powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Утилита по выключению компьютера в MS DOS version 6.22
11 сообщений из 11, страница 1 из 1
Утилита по выключению компьютера в MS DOS version 6.22
    #39137470
Roman777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
Компьютер работает под управлением MS DOS version 6.22.
Нужна утилита которая будет выключать компьютер.
Утилиту можно написать, например, на Turbo Pascal под MS DOS (cам программирую на Delphi, начинал с паскаля).
Только никак не соображу какой код написать чтобы выключить компьютер по MS DOS.
Может кто-нибудь реализовывал такую задачу?
Или может у кого утилита уже готовая есть?
...
Рейтинг: 0 / 0
Утилита по выключению компьютера в MS DOS version 6.22
    #39137496
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASM source code
Код: asm
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
;*****************************;
;                             ;
; Code by BiTByte             ;
; [Elmar Hanlhofer]           ;
;                             ;
;-----------------------------;
;                             ;
; SHUTDOWN PC IN DOS          ;
;                             ;
; - Sourcecode is FREE -      ;
;                             ;
;-----------------------------;
;                             ;
; assembling:                 ;
;                             ;
;   tasm shutdown             ;
;   tlink /t shutdown         ;
;                             ;
;-----------------------------;
;                             ;
; http://plop.at              ;
;                             ;
;*****************************;

assume cs:code,ds:code
assume es:nothing,ss:nothing
code segment
.286
org 100h
start:
        push cs
        pop ds




        call ProcessCommandline


        cmp parameter,WRONGPARAMETER
        jne @main1
        mov ah,9
        lea dx,WrongTxt
        int 21h
        jmp @exit
@main1:
        cmp parameter,NOOUTPUT
        je @main2
        mov ah,9
        lea dx,TitleTxt
        int 21h
@main2:
        cmp parameter,0
        je @main30
        cmp parameter,HELP
        jne @main3
@main30:
        mov ah,9
        lea dx,HelpTxt
        int 21h
        int 20h
@main3:
        mov ah,2ch
        int 21h
        call Print
@again:
        mov countw,dh

        cmp ignore,1
        je @again2
        mov ah,1
        int 16h
        jne @exit
@again2:
        mov ah,2ch
        int 21h        
        cmp countw,dh
        je @again

        call Print
        cmp seconds,0
        je @chknxt1
        dec seconds
        jmp @again
@chknxt1:
        cmp minutes,0
        je @nl
        mov seconds,59
        dec minutes
        jmp @again
@nl:
        call Poweroff
@exit:
        xor ax,ax
        int 16h
        mov ah,9
        lea dx,aborttxt
        int 21h
        int 20h


Print:
        cmp parameter,NOOUTPUT
        jne @prn
        ret
@prn:
        pusha       
          mov ax,seconds
          lea di,outpsec
          mov byte ptr ds:[di-1]," "
          call integer
          mov ax,minutes
          lea di,outpmin
          mov byte ptr ds:[di-1]," "
          call integer

          lea dx,outputtxt
          mov ah,9
          int 21h
         popa
ret
Integer:
        pusha
        mov bx,10       ; set base (10 values)
        mov byte ptr ds:[di],"0"  ; write "0" 
@decagain:
        or ax,ax        ; check if ax=0
    je @decexit
        xor dx,dx       ; clear dx for div
        div bx
    add dl,"0"      ; in dx=rest & add value "0"
        mov ds:[di],dl  ; write it
        dec di          ; sub pointer 1
    jmp @decagain
@decexit:
        popa
ret

ProcessCommandline:
        pusha
          mov si,81h
@proces1:
          call RemoveSpaces
          cmp byte ptr ds:[si],0dh
          je @procescmdexit
          cmp word ptr ds:[si],"m-"
          jne @proces2
          add si,2
          call RemoveSpaces
          call convert
          mov minutes,ax
          jmp @proces1
@proces2:
          cmp word ptr ds:[si],"s-"
          jne @proces3
          add si,2
          call RemoveSpaces
          call convert
          mov seconds,ax
          jmp @proces1
@proces3:
          cmp word ptr ds:[si],"h-"
          jne @proces4
          add si,2
          mov parameter,HELP
          call RemoveSpaces
          cmp byte ptr ds:[si],0dh
          je @procescmdexit
          mov parameter,TOOMANYPARAMETERS
          jmp @procescmdexit

@proces4:
          cmp word ptr ds:[si],"n-"
          jne @proces5
          add si,2
          call RemoveSpaces
          mov parameter,NOOUTPUT
          jmp @proces1
@proces5:
          cmp word ptr ds:[si],"i-"
          jne @proces6
          add si,2
          call RemoveSpaces
          mov ignore,1
          jmp @proces1
@proces6:
          mov parameter,WRONGPARAMETER
@procescmdexit:
        popa
ret

Convert:
          mov parameter,OK
          mov di,si
          push si
          call ToStringEnd
          sub si,di
          mov cx,si
          pop si
          push cx
          call rinteger
          pop cx
          add si,cx
ret

RemoveSpaces:
          cmp byte ptr ds:[si],20h
          jne @removeexit
          inc si
          jmp removespaces
@removeexit:
ret

ToStringEnd:
          cmp byte ptr ds:[si],20h
          je @tostrexit
          cmp byte ptr ds:[si],0dh
          je @tostrexit
          inc si
          jmp tostringend
@tostrexit:
ret

rinteger:
        push bx dx si
        xor ax,ax
        xor dx,dx
        mov bx,10      ; set base 10
@rdecagain:
        mul bx         ; x10
        mov dx,ax     ; save old eax
    lodsb           ; load next value
    cmp al,"0"      ; value valid?
    jb @rdecexit
    cmp al,"9"
    ja @rdecexit
        and ax,0ffh
    sub al,"0"      ; yes -> sub ascii value
        add dx,ax     ; add new to old
        mov ax,dx     ; save new value
    loop @rdecagain ; loop during the string
@rdecexit:
        pop si dx bx
ret

PowerOff:
        mov ax,5300h
        mov bx,0
        int 15h
        push ax

    mov ax,5308h
    mov bx,1
    mov cx,1
    int 15h
    mov ax,5308h
    mov bx,0ffffh
    mov cx,1
    int 15h

    mov ax,5301h
    mov bx,0
    int 15h
    mov ax,530Eh
    mov bx,0
        pop cx

    int 15h
    mov ax,530Dh
    mov bx,1
    mov cx,1
    int 15h
    mov ax,530Fh
    mov bx,1
    mov cx,1
    int 15h
    mov ax,5307h
    mov bx,1
    mov cx,3
    int 15h
        int 20h


OK                      = 1
NOOUTPUT                = 2
HELP                    = 3
TOOMANYPARAMETERS       = 5
WRONGPARAMETER          = 6

TitleTxt        db "PLOP Shutdown program   v1.1 Coded by Elmar Hanlhofer   "
                db "http://plop.at",0dh,0ah,0ah,"$"
WrongTxt        db "Error: wrong parameter use -h for help",0dh,0ah,"$"

Param1Txt       db "-m"
Param2Txt       db "-s"
Param3Txt       db "-h"
Param4Txt       db "-n"

HelpTxt         db "shutdown [-s value] [-m value] [-n] [-i] [-h]",0dh,0ah,0ah
                db " turns the pc off"
                db 0dh,0ah,0ah
                db " -s   seconds",0dh,0ah
                db " -m   minutes",0dh,0ah
                db " -n   no output",0dh,0ah
                db " -i   ignore key press to abort",0dh,0ah
                db " -h   help",0dh,0ah,"$"

OutputTxt       db 0dh,"Shutdown in    Minutes:  "
outpmin         db "   Seconds:  "
outpsec         db " $"

ignore db 0
aborttxt db 0dh,"Abort                                                ",0dh,0ah,"$"

parameter       db 0
minutes         dw 0
seconds         dw 0
count           db ?
countw          db ?


code ends
        end start

...
Рейтинг: 0 / 0
Утилита по выключению компьютера в MS DOS version 6.22
    #39137497
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕМНИП во времена доса еще не было ATX блоков питания (которые могут по програмной команде выключаться), тогда кнопка "вкл" была обычным выключателем (просто разрывала цепь 220), как следствие в досе нет ничего что можно было бы вызвать для выключения.

Даже Win95 не выключал, писал картину "Теперь питание можно отключить"

Можно Win98 поставить, запускать в дос режиме (без загрузки окошек, не помню как, но как-то настраивалось), там выключалось, наверно и shutdown.exe есть.
...
Рейтинг: 0 / 0
Утилита по выключению компьютера в MS DOS version 6.22
    #39137516
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЕМНИП во времена доса еще не было ATX блоков питания (которые могут по програмной команде выключаться), тогда кнопка "вкл" была обычным выключателем (просто разрывала цепь 220)Во-первых, изменяет.
Во-вторых, то, что во времена DOS не было ATX, не означает, что во времена ATX не было DOS.
В третьих, смотря какой DOS - скажем, во freeDOS есть соотв. утилита (FDAPM).

Dima TWin95 не выключал, писал картину "Теперь питание можно отключить"
Это если БП был АТ или при ATX-блоке в настройках БИОС отключили расширенное управление питанием.

Dima TWin98 ... наверно и shutdown.exe есть
Есть. Но под 6.22 она не заведётся.
...
Рейтинг: 0 / 0
Утилита по выключению компьютера в MS DOS version 6.22
    #39137556
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaВо-вторых, то, что во времена DOS не было ATX, не означает, что во времена ATX не было DOS.
Типа могли написать код для несуществующего железа? Речь о MS DOS version 6.22, когда ATX появился эту версию уже забыли и похоронили.
AkinaDima TWin98 ... наверно и shutdown.exe есть
Есть. Но под 6.22 она не заведётся.
Win98 это DOS 8 или что-то типа того. Не путай с Win3, который был добавкой к имеющемуся DOS, начиная с Win95 добавкой стал DOS
...
Рейтинг: 0 / 0
Утилита по выключению компьютера в MS DOS version 6.22
    #39137623
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TРечь о MS DOS version 6.22, когда ATX появился эту версию уже забыли и похоронили.
Да ну? сколько у меня на работе вторых, третьих и даже четвёртых пентиумов работало под 6.22 (а некоторые даже под пятёркой)... не один десяток и не два... а уж P4-то точно были с АТХ. Так что если где-то похоронили - не значит, что не было мест, где MS-DOS продолжала трудиться.
Системники с АТХ массово пошли где-то к концу 1999 - началу 2000. Я помню компанию по "подготовке к проблеме-2000", так там в отчётных документах как раз указывали, сколько АТ и сколько АТХ-системников, и системники АТХ априори считались не подверженными проблеме (как выяснилось, напрасно, кстати).

Dima TТипа могли написать код для несуществующего железа?
Я разве где-то говорю, что такая утилита имеется в поставке MS-DOS 6.22?
...
Рейтинг: 0 / 0
Утилита по выключению компьютера в MS DOS version 6.22
    #39137726
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Утилита по выключению компьютера в MS DOS version 6.22
    #39137728
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TРечь о MS DOS version 6.22, когда ATX появился эту версию уже забыли и похоронили.
из этого не следует, что не существует программы для MSDOS, обладающей необходимой функциональностью и не входящей в комплент поставки MSDOS
...
Рейтинг: 0 / 0
Утилита по выключению компьютера в MS DOS version 6.22
    #39137735
Зимаргл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

msdos позволяет обращаться к железу как тебе надо. Потому берешь доку интерфейса производителя и пишешь что тебе надо.

Умничанье по поводу разницы 6.22 и выше должно быть подтверждено в рамках задачи.
...
Рейтинг: 0 / 0
Утилита по выключению компьютера в MS DOS version 6.22
    #39137746
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗимарглПотому берешь доку интерфейса производителя
производитель - не нужен, достаточно спеки ACPI
...
Рейтинг: 0 / 0
Утилита по выключению компьютера в MS DOS version 6.22
    #39138367
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Достаточно даже предшественника - APM
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Утилита по выключению компьютера в MS DOS version 6.22
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]