Category : OS/2 Files
Archive   : REBOOT2.ZIP
Filename : REBOOTDR.ASM

 
Output of file : REBOOTDR.ASM contained in archive : REBOOT2.ZIP
title REBOOTDR.ASM -- Installable device driver for OS/2 reboot
.286

; REBOOTDR.ASM
; By Mitch Stuart and Paul Chen
;
; Reference: TEMPLATE.ASM, Page 377, in Ray Duncan's "Advanced
; OS/2 Programming," Microsoft Press, 1989.
;
; To assemble and link:
;
; masm rebootdr.asm;
; link rebootdr,rebootdr.sys,,os2,rebootdr
;
; Apparently some versions of the linker will call the resulting file
; "REBOOTDR.DLL" even though we specifed ".SYS" on the command line.
; In this case, just rename REBOOTDR.DLL to REBOOTDR.SYS and it will
; work fine.
;
; To install, add the line "DEVICE=REBOOTDR.SYS" to the CONFIG.SYS file.
; To reboot, type REBOOT2. REBOOT2.EXE is a program file that simply
; attempts to open the device "REBOOTZZ", thus causing the machine to
; reboot.
;
; Description:
;
; This device driver gets installed at boot time. It sets up a
; dummy character device driver called "REBOOTZZ". Then, when an
; application opens the device "REBOOTZZ", this driver gets control.
; It calls one of the DevHlp functions to get the system reboot
; vector, and then jumps to that address, causing the system to reboot.
;
maxcmd equ 26

stdin equ 0
stdout equ 1
stderr equ 2

cr equ 0dh
lf equ 0ah

GetDosVar equ 24h
GetRebootVector equ 5

extrn DosWrite:far

DGROUP group _DATA

_DATA segment word public 'DATA'

; ***** Device driver header

header dd -1
dw 8880h
dw Strat ; our "stragegy" entry point
dw 0
db 'REBOOTZZ'
db 8 dup (0)

; ***** Device driver variables

devhlp dd ? ; DevHlp entry point
wlen dw ? ; DosWrite length

; ***** Dispatch table

dispch dw Init ; 0 Init driver
dw ReturnOK ; 1 Media check
dw ReturnOK ; 2 Build BPB
dw Error ; 3 not used
dw ReturnOK ; 4 Read
dw ReturnOK ; 5 Nondestructive read
dw ReturnOK ; 6 Return input status
dw ReturnOK ; 7 Flush input buffers
dw ReturnOK ; 8 Write
dw ReturnOK ; 9 Write with verify
dw ReturnOK ; 10 Return output status
dw ReturnOK ; 11 Flush output buffers
dw Error ; 12 not used
dw DevOpen ; 13 Open
dw ReturnOK ; 14 Close
dw ReturnOK ; 15 Removable media
dw ReturnOK ; 16 Generic IOCTL
dw ReturnOK ; 17 Reset media
dw ReturnOK ; 18 Get logical drive
dw ReturnOK ; 19 Set logical drive
dw ReturnOK ; 20 Deinstall
dw Error ; 21 not used
dw ReturnOK ; 22 Partitionable fixed disks
dw ReturnOK ; 23 Get fixed disk unit map
dw Error ; 24 not used
dw Error ; 25 not used
dw Error ; 26 not used

ident db cr,lf
db 'OS/2 reboot driver loaded. '
db 'Type REBOOT2 to reboot system.'
db cr,lf
ident_len equ $ - ident

_DATA ends


_TEXT segment word public 'CODE'

assume cs:_TEXT,ds:DGROUP,es:NOTHING

Strat proc far
mov di,es:[bx+2] ; get command code
and di,0ffh
cmp di,maxcmd ; supported command?
jle Strat1 ; yes
call Error ; unsupported command
jmp Strat2


Strat1: add di,di ; branch to command handler
call word ptr [di+dispch]

Strat2: mov es:[bx+3],ax ; return status code
ret
Strat endp


DevOpen proc near

; Get the address of the reboot vector
mov dl,GetDosVar
mov al,GetRebootVector
call devhlp

; AX:BX now contains the reboot vector
; We want it to be in ES:BX for a far jump
mov es, ax

; Jump to vector and reboot
jmp dword ptr es:[bx]

; We should never get here, but return just in case ...
mov ax,0100h ; return "done" status
ret
DevOpen endp


Error proc near ; set error bit, done status
mov ax,8103h ; and unknown command code
ret
Error endp


ReturnOK proc near
mov ax,0100h ; return "done" status
ret
ReturnOK endp


Init proc near
mov ax,es:[bx+14] ; get DevHlp entry point
mov word ptr devhlp,ax
mov ax,es:[bx+16]
mov word ptr devhlp+2,ax

; set offsets to end of code and data segments
mov word ptr es:[bx+14],offset _TEXT:Init
mov word ptr es:[bx+16],offset DGROUP:ident

; display sign-on message
push stdout
push ds
push offset DGROUP:ident
push ident_len
push ds
push offset DGROUP:wlen
call DosWrite

mov ax,0100h ; return "done"
ret
Init endp

_TEXT ends

end





  3 Responses to “Category : OS/2 Files
Archive   : REBOOT2.ZIP
Filename : REBOOTDR.ASM

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/