[comp.os.msdos.programmer] Weird bug in DOS 3.2???

valley@uchicago (Doug Dougherty) (12/18/90)

Observe:
	All this device driver does is copy 200 words of data starting
	with its own filename to a safe (?) area of memory (@512K), then
	exit leaving nothing resident.  This allows one to figure out
	the syntax of the CONFIG.SYS buffer, a topic which, I should
	add, is utterly undocumented in all the references.  As an
	aside, I think I've got it figured out, but its all emperical
	data...

	What's funny is that this was developed under and runs fine
	under, (several versions) of DOS 3.3.  But under DOS 3.2, it
	crashes and burns (system hard crashes on boot)

.RADIX 16

	org 0

	; Device driver header
	dd -1
	dw 8000		; Char dev
	dw offset strat
	dw offset cmds
	db 'AskDev  '

ptrsav	dd 0
strat:
	mov W cs:[ptrsav],bx
	mov W cs:[ptrsav+2],es
	retf

cmds:	pushf
	push es
	push bx
	les bx,cs:[ptrsav]	; Get Request Packet
	mov W es:[bx+3],8003	; Preset exit with Unknown Command code
	cmp B es:[bx+2],0	; INIT is the only cmd we do
	jne >L99
	mov W es:[bx+0E],0	; Set the end addresses
	mov W es:[bx+10],cs	; (In no case, do we go resident)
	cld
	push ax
	push cx
	push ds
	push si
	push di

	lds si,es:[bx+12]
	mov ax,9000		; Point at 512K
	mov es,ax
	xor di,di
	mov cx,200		; (This is a guess)
	rep movsw

	pop di
	pop si
	pop ds
	pop cx
	pop ax
L99:	pop bx
	pop es
	popf
	retf

Comments?