; poll-wait for controller ready. jz geter1 ; loop until ready. mov bx,offset errbuf ; bx = error buffer adr. mov cx,nerbyts ; cx = number of error bytes. geterl: in al,data ; al = error code byte. mov [bx],al ; put into buffer. inc bx ; bump buffer pointer. loop geterl ; dec cx, loop till zero. ret ; bios stack area. tmpsp rw 1 rw 40 ; 20 levels. tmp_tos rw 0 ; top of stack. ; Teletek HD/CTC Initialization Data. initdat db 0 ; interrupt vector. db 00000000b ; opti release the reset signal. call fdelay ; delay at least 40 microseconds. ; verify that controller request signal is off. mov bx,0 move3: in al,status ; get status byte. test al,request ; check request signal. jz move4 ; until request signal turned off. dec bx jnz move3 ; or until waited long enough. ; if request signal never turned off. mov bx,offset msg1 ; print "Load Aborted' call prtmsg mov bx,offset msg3 ; print "HD/CTC Board Does Not Resp." call prtmsg jmp mwierves". call prtmsg jmp mwierr ; abort. ; if no errors. move9: out intrupt,al ; interrupt controller. mov dmastat,0ffh ; set done status. clc ; clear error flag. ret ; return from mwreset. ; do the operation specified by mwop. mwrdwr: mov dmastat,0 ; set busy status. call cmndphas ; do command phase. mov al,1 ; i/o direction = in. cmp mwop,dmaread ; is it a read operation? je mwtran ; hop if so. mov al,0 ; else i/o direction = out. mwtran: call dataphas ; tmov bl,0 mov es,bx ; put into extra segment. cmp al,0 ; is it a write? je mwrite ; hop if so. ; transfer 512 bytes from controller to memory. mwread: in al,data ; al = a data byte. mov es:[di],al ; put byte into buffer. inc di ; bump buffer pointer. jnz mwread2 ; hop if no overflow. mov bx,es ; increment segment by 64k. add bx,1000h mov es,bx mwread2: loop mwread ; dec cx, loop until zero. jmps mwexit ; exit routine. ; transfer 512 bytes from memory to controller. m