; AM160PAT.ASM PATCH FOR AUTOMITE.COM VERSION 1.60 6/12/86 GSD ; ; THIS PATCH: ; ; 1. ENSURES THAT THE 25th LINE ON THE SCREEN IS ERASED ; 2. ASSEMBLES WITH DRI'S MAC ASSEMBLER ; ; BDOS equ 0005H ; BDOS ENTRY ESC equ 01BH ; ASCII ESCAPE CHARACTER ; djnz macro addr ; Z80 djnz macro db 10h db low addr-($+1) endm ; org 011bh ; id string db '1.60' ; ORG 100H ; start of TPA ; JMP PATCH ; branch to patch code ; org 713AH ; end of program pointer DW ENDPRG ; change pointer to protect patch ORG 74CFH ; start of patch area ; patch: lxi sp,endprg call swap ; exchange BIOS Warm Boot vector lxi h,line25 ; turn off status line call prnstr jmp 713CH ; execute AUTOMITE ; ; This code intercepts the Warm Boot following the exit ; from Automite. This code: ; ; 1. Resotres the orginal Warm Boot vector at the BIOS ; jump table level. ; 2. Ensures that the 25th line is cleared ; 3. Exits to the orginal Warm Boot routine ; WBPATCH: lxi sp,endprg call swap ; restore BIOS Warm Boot vector lxi h,line24 ; restore status line call prnstr rst 0 ; Warm Boot ; ; This code exchanges the BIOS jump table Warm Boot vector ; for the vector stored locally. This code is used to ; insert a Warm Boot patch into Automite and then restore ; the orginal Warm Boot vector. ; swap: lhld 0001 ; get BIOS Warm BootJMP ADDR push h ; save jmp addr lxi d,0ch-3 ; offset to conout routine dad d shld conout+1 pop h ; restore jmp addr inx h ; hl --> BIOS Warm Boot vector lxi d,table ; de --> local Warm Boot handler mvi b,2 ; vector size in bytes ; ; exchange the contents pointed to by hl with those ; pointed to by de. ; loop: ; repeat mov c,m ; swap *hl,*de ldax d mov m,a mov a,c stax d inx h ; hl++, de++ inx d djnz loop ; unitl bytes swaped ret ; prnstr: mov a,m ; while character is not 0 ora a ; rz mov c,a ; set up to pass char in c push h ; save pointer call conout ; output to screen pop h ; restore pointer inx h ; and advance to next char jmp prnstr ; end while conout: jmp 0 ; dummy jump to BIOS CONOUT routine ; table: DW wbpatch ; replacement Warm Boot Vector ; line25: DB ESC,'C7',0 line24: DB ESC,'B7',0 ; ds 16 ; temp stack area ; ENDPRG equ $ ; end marker ; END