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 ;Drive Ready bit cntrl equ 0dh ;WENBL, MCLK, FRENBL clrflt equ 5h ;Toggle 3bit to clr wrfault run equ 0fh ;cntrl + RUN bit 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 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 ckhalt lxi d,ntrdy call pbuff jmp setup ckhalt in 50h ani halt jnz setrun lxi d,nothlt call pbuff jmp setup setrun mvi a,run out 50h 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 in 50h ani nflt jnz ckrtry lxi d,wrflms call pbuff ckrtry in 51h ;check xrtry ani xrtry jz ckint lxi d,rtryms call pbuff ckint 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 in 51h ani xrtry jz datack lxi d,cksumr call pbuff datack mvi a,himem out 51h in 53h in 53h mvi c,4 mvi b,tstpat rdmor in 53h cmp b jz ckmor push b lxi d,rderr call pbuff pop b ckmor dcr c jnz rdmor 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 'Buffer error$' noclr db acr,alf db 'Toggle Write Protect did not clear Write Fault$' ntrdy db acr,alf db 'Drive Not Ready$' wrflms db acr,alf db 'Write Fault$' nothlt db acr,alf db 'Not Halted$' rtryms db acr,alf db 'Retry$' rderr db acr,alf db 'Read Error$' cksumr db acr,alf db 'check sum error$' end 100h