status. test al,error ; look at error bits. mov al,0 jz stat2 ; hop if no errors. call geterr ; get error bytes from controller. mov al,errbuf ; al = first byte. test al,1 ; if fatal errors. mov al,1 ; then set error flag. jnz stat1 ; else xor al,al ; reset error flag. stat1: stat2: out intrupt,al ; interrupt the controller. ret ; geterr - get error code bits. geterr: out intrupt,al ; interrupt the controller. geter1: in al,status ; al = status. test al,ready cmd buffer. rwsect: mov al,rtcnt ;get number of retries. mov byte ptr ercnt,al retry: call mwrdwr ; read or write a sector. mov al,0 jc l_3 ; hop if error. ret ;back to mp/m. l_3: dec ercnt ; decrement error count. jnz retry stc ; set error flag. ret ; ; reset the controller and setup the default parameters. ; mwreset: mov dmastat,0 ; set busy flag. out reset,al ;send reset pulse to controller. out clear,al ; clear any pending ctlr interrupt. in al,status ; initialization data. movel: lodsb ; al = byte of init data. out data,al ; send init data to controller. loop movel ; decrement cx, loop if not zero. out intrupt,al ; interrupt controller. call twait ; wait for controller request. ; check for controller error. in al,status ; if controller error, test al,error jz move9 ; then mov bx,offset msg1 ; print "load aborted". call prtmsg call geterr ; get error bytes from controller. mov bx,offset msg5 ; print "check dril = status. test al,error ; any errors? jz data1 ; hop if not. pop ax ; correct stack. ret ; abort data phase. data1: out intrupt,al ; interrupt the controller. data2: in al,status ; al = status. test al,ready ; is it ready? jz data2 ;