bdos equ 5h ;BDOS entry acr equ 0dh ;carriage return alf equ 0ah ;line feed drsel equ 0fch ;DR 0, HD 0, STEP OUT drvrdy equ 20h cntrl equ 0fh ;WENBL, MCLK, RUN, FRENBL clrflt equ 7h ;TOGGLE 3bit TO CLR WRFAULT wrsect equ 7h ;WRITE SECTOR COMMAND rdsect equ 3h ;READ SECTOR COMMAND opdone equ 2h ;OP DONE STATUS BIT tkzro equ 1h ;Track Zero bit halt equ 80h ;Halt bit nflt equ 10h ;Write Fault tmout equ 8h ;Timeout bit cmplt equ 4h ;Complete bit xrtry equ 2h ;Auxilliary status retry bit djiost equ 0e3f9h ;DJ UART STATUS djdata equ 0e3f8h ;DJ DATA djdr equ 4h ;DJ DATA READY WHEN OFF wboot equ 0h ;RESTART tstpat equ 0aah ;Test pattern 10101010 himem equ 8h ;High Memory Select & Reset org 100h lxi d,sgnon call pbuff ;select drive, head & Mclock, out step direction setup mvi a,drsel out 52h mvi a,cntrl ;enable function register out 50h ;toggle write enable to clr write fault mvi a,clrflt out 50h mvi a,cntrl out 50h mvi a,clrflt out 50h in 50h ;see if write fault cleared ani nflt jnz ckrdy ;no error lxi d,noclr call pbuff jmp setup ckrdy in 50h ani drvrdy jz wrbuf lxi d,ntrdy call pbuff jmp setup wrbuf mvi a,himem ;load buffer with test pattern out 51h mov b,a mvi a,tstpat filbuf out 53h dcr b jnz filbuf mvi a,himem ;verify buffer data out 51h mov b,a rdbuf in 53h cpi tstpat jz noerr push b lxi d,buferr call pbuff pop b jmp wrbuf noerr dcr b jnz rdbuf lxi d,wrtmsg call pbuff wrsec mvi a,wrsect ;write sector headers til interrupt out 51h rerd in 50h ani opdone jz rerd lda djiost ani djdr jnz wrsec lda djdata mvi a,himem ;write zeros to buffer out 51h mov b,a sub a clrmem out 53h dcr b jnz clrmem lxi d,rdmsg call pbuff rdsec mvi a,rdsect ;read sectors till interrupt out 51h rdagn in 50h ani opdone jz rdagn lda djiost ani djdr jnz rdsec lda djdata cpi 'R' jz setup jnz wboot pbuff mvi c,9 jmp bdos sgnon db acr,alf db 'Loading & checking sector buffer$' wrtmsg db acr,alf db 'Writing Sector Headers$' rdmsg db acr,alf db 'Reading Sector Headers$' buferr db acr,alf db 'Data read from hi buff differs from written$' noclr db acr,alf db 'Toggle Write Protect did not clear Write Fault$' ntrdy db acr,alf db 'Drive Not Ready$' end 100h