hdsel0 equ 0fch ;DR 0, HD 0, Step Out hdsel1 equ 0ech ; HD 1 hdsel2 equ 0dch ; HD 2 hdsel3 equ 0cch ; HD 3 HDSEL7 EQU 8CH ; HD 7 bdos equ 05h ;BDOS entry cntrl equ 0fh ;WENBL, MCLK, RUN, FRENBL clrflt equ 07h ;TOGGLE 3bit TO CLEAR WRFAULT drdy equ 20h ;Drive Ready when Off wrflt equ 10h ;Write Fault when Off wrsech equ 07h ;Write Sector Header Command rdsech equ 03h ;Read Sector Header Command opdone equ 02h ;OP DONE STATUS BIT djiost equ 0e3f9h ;DJ UART STATUS djdata equ 0e3f8h ;DJ DATA djdr equ 04h ;DJ DATA READY WHEN OFF conin equ 01h ;Get a character conout equ 02h ;Send a character acr equ 0dh ;Carriage Return alf equ 0ah ;Line Feed himem equ 08h ;High memory select & reset wboot equ 0h ;Warm Boot org 100h setup mvi a,hdsel0 out 52h mvi a,cntrl out 50h mvi a,clrflt out 50h mvi a,cntrl out 50h in 50h ani drdy jz rdy lxi d,ntrdy call pbuff jmp setup rdy in 50h ani wrflt jnz noflt lxi d,fltmsg call pbuff jmp setup noflt lxi d,hedsel call pbuff call getch cpi '0' jz hd0 cpi '1' jz hd1 cpi '2' jz hd2 cpi '3' jz hd3 cpi 'M' jz memtst CPI '7' JZ HD7 cpi acr jz wboot jmp setup hd0 mvi a,hdsel0 jmp select hd1 mvi a,hdsel1 jmp select hd2 mvi a,hdsel2 jmp select hd3 mvi a,hdsel3 JMP SELECT HD7 MVI A,HDSEL7 select out 52h rdor lxi d,rorw call pbuff call getch cpi 'R' jz read cpi 'W' jz write cpi acr jz wboot write lxi d,patmsg call pbuff call getpat sta tstpat lxi d,wrtng call pbuff mvi a,himem out 51h mov b,a mvi a,0 tstpat equ $-1 ldbuf out 53h dcr b jnz ldbuf wrhdr mvi a,wrsech out 51h rdstat in 50h ani opdone jz rdstat lda djiost ani djdr jnz wrhdr call intrpt jmp noflt read lxi d,rding call pbuff rd mvi a,rdsech out 51h ckst in 50h ani opdone jz ckst lda djiost ani djdr jnz rd call intrpt jmp noflt memtst pop b lxi d,memsg call pbuff mmtst lxi b,0aa00h memlp mvi a,0 out 51h rar mov a,b wrmem out 53h dcr c jnz wrmem jc ck stc jmp wrmem ck mvi e,1 cklp in 53h cmp b cnz errtin dcr c jnz cklp dcr e jz cklp mov a,b cpi 55h jz ckint mvi b,55h jmp memlp ckint lda djiost ani djdr jnz mmtst call intrpt jmp wboot errtin mov d,a push d push b lxi d,byte call pbuff pop b push b mov a,c call putadc lxi d,shldb call pbuff pop b push b mov a,b call bitout lxi d,was call pbuff pop b pop d push b push d mov a,d call bitout pop d pop b ret bitout mvi b,8 ;bit counter bitlp rlc ;first bit mov c,a push b jc one ;if on mvi c,conout mvi e,'0' ;if off call bdos ;Print character pop b mov a,c dcr b ;decrement bit counter jnz bitlp ;next bit ret one mvi e,'1' ;on bit mvi c,conout call bdos ;Print character pop b mov a,c dcr b ;decrement bit counter jnz bitlp ;next bit ret putadc mov l,a mvi h,0 ***************************************************************** * * * Putdc prints the ascii decimal equivalent of the number in HL * * * ***************************************************************** putdc lxi b,-10 phl push d mov d,b mov e,b phllp dad b inx d jc phllp xthl xchg mov a,h ora l cnz phl pop h mvi a,'0' add l sub c pchar push h push b push d push psw mov e,a mvi c,2 call bdos pop psw pop d pop b pop h ret pbuff mvi c,9 jmp bdos getch mvi c,conin jmp bdos getpat lxi b,8 patlp push b call getch cpi '0' jz zero cpi '1' jz on pop b lxi d,patmsg call pbuff jmp getpat zero pop b sub a add b dcr c rz ral mov b,a jmp patlp on pop b mvi a,1 add b dcr c rz ral mov b,a jmp patlp intrpt call getch cpi 'M' jz memtst ret ntrdy db acr,alf db 'Not Ready$' fltmsg db acr,alf db 'Toggle did not clear Write Fault$' hedsel db acr,alf DB 'SELECT HEAD (0-3,7) OR MEMORY (M)$' rorw db acr,alf db 'R (read) or W (write)?$' patmsg db acr,alf db 'Enter pattern in 0`s & 1`s:$' wrtng db acr,alf db 'Writing Sector Headers$' rding db acr,alf db 'Reading Sector Headers$' byte db acr,alf db 'Byte $' shldb db ' should be $' was db ' was $' memsg db acr,alf db 'Testing Memory$'