;************************************************************************ ;* * ;* program to format a microdecision drive b head 0 track over * ;* and over again for troubleshooting purposes * ;* BY RONALD E. JACOBS JUNE 15, 1986 * ;* * ;************************************************************************ BDOS EQU 5 .Z80 start: CALL CMDRDY ;IS DATA PORT READY TO RECEIVE A COMMAND BYTE LD A,4Dh ;NEC 765 format a track COMMAND CODE OUT (0FBh),A ;SEND format a track cmd TO NEC 765 DATA PORT CALL CMDRDY ;IS DATA PORT READY TO RECEIVE A COMMAND BYTE LD A,01 ;side 0, drive 1 OUT (0FBh),A ;SEND SECOND COMMAND BYTE TO NEC 765 DATA PORT CALL CMDRDY ;IS DATA PORT READY TO RECEIVE A COMMAND BYTE LD A,03 ;N: bytes per sector (03=1024 selected) OUT (0FBh),A ;SEND SECOND COMMAND BYTE TO NEC 765 DATA PORT CALL CMDRDY ;IS DATA PORT READY TO RECEIVE A COMMAND BYTE LD A,04 ;SC: sectors per track OUT (0FBh),A ;SEND SECOND COMMAND BYTE TO NEC 765 DATA PORT CALL CMDRDY ;IS DATA PORT READY TO RECEIVE A COMMAND BYTE LD A,0f0h ;GPL: gap three OUT (0FBh),A ;SEND SECOND COMMAND BYTE TO NEC 765 DATA PORT CALL CMDRDY ;IS DATA PORT READY TO RECEIVE A COMMAND BYTE LD A,99h ;D: filler byte OUT (0FBh),A ;SEND SECOND COMMAND BYTE TO NEC 765 DATA PORT ld a,0 ld (sectr),a ;initialize sector number call chrn ;supply C, H, R, N for each sector on the track call chrn ; there are five sectors call chrn call chrn call chrn call rdrdy ;there are 7 result bytes to be read call rdrdy ;2 call rdrdy ;3 call rdrdy ;4 call rdrdy ;5 call rdrdy ;6 call rdrdy ;7 jp start ;format the track all over again chrn: CALL CMDRDY ;IS DATA PORT READY TO RECEIVE A COMMAND BYTE LD A,05h ;C: cylinder number OUT (0FBh),A ;SEND BYTE TO NEC 765 DATA PORT CALL CMDRDY ;IS DATA PORT READY TO RECEIVE A COMMAND BYTE LD A,00h ;H: head number OUT (0FBh),A ;SEND BYTE TO NEC 765 DATA PORT CALL CMDRDY ;IS DATA PORT READY TO RECEIVE A COMMAND BYTE ld a,(sectr) ;old sector number inc a ;add 1 to make new sector number OUT (0FBh),A ;SEND BYTE TO NEC 765 DATA PORT CALL CMDRDY ;IS DATA PORT READY TO RECEIVE A COMMAND BYTE Ld A,03 ;03 = 1024 bytes per sector code number OUT (0FBh),A ;SEND BYTE TO NEC 765 DATA PORT ret ;************************************************************************ ;* * ;* SUBROUTINE CMDRDY * ;* * ;* READS MICRODECISION PORT 0FAh TO GET THE STATUS OF THE NEC 765 * ;* CONTROLLER CHIP. THIS IS A CHECK TO SEE IF THE CHIP IS READY * ;* FOR THE NEXT BYTE OF THE COMMAND. * ;* * ;************************************************************************ CMDRDY: CALL MDDLY ;DELAY 12.5 uS IN A,(0FAh) ;READ NEC 765 STATUS PORT AND 11000000b ;MASK OUT SOME BITS CP 10000000b ;IS DATA PORT READY TO RECEIVE DATA? JP NZ,CMDRDY ;LOOP UNTIL READY RET ;************************************************************************ ;* * ;* SUBROUTINE RDRDY * ;* * ;* READS MICRODECISION PORT 0FAh TO GET THE STATUS OF THE NEC 765 * ;* CONTROLLER CHIP. THIS IS A CHECK TO SEE IF THE CHIP IS READY * ;* FOR THE NEXT BYTE OF THE RESULT. * ;* * ;************************************************************************ RDRDY: CALL MDDLY ;DELAY 12.5 uS IN A,(0FAh) ;READ NEC 765 STATUS PORT anä 11000000b ;savå DATÁ INPUT/OUTPUT,REQUESÔ FOÒ MASTEÒ BITS CP 11000000b ;IS DATA PORT READY TO SEND DATA? JP NZ,RDRDY ;LOOP UNTIL READY call tblpnt ;~ push psw ;~ ld e,'s' ;~ ld c,6 ;~ call bdos ;~ pop psw ;~ RET ;************************************************************************ ; temproarilyr for trouble reporting ; saves the a register ;************************************************************************ tblpnt: ld h,a ;~save for reuse ld a,' ' ;prepare to print a space call is09 ld a,h rlc a ;~get upper nybble rlc a ;~ rlc a ;~ rlc a ;~ call tblout ;~ ;~ ld a,h ;~ call tblout ;~ ld a,h ;~ ret ;~ tblout: and 0fh ;~mask upper four bits or 30h ;~make ascii digit cp 3Ah ;~is it a 0-9 or A-F? jp c,is09 ;~it is a digit 0-9 add a,7 ;~make it A-F is09: ld e,a ;~ready to be printed ld c,6 ;~bdos direct console i/o push hl ;~ call bdos ;~^^^^^^^^for troubleshooting^^^^^^^^^^^ pop hl ;~ ret ;~ ;************************************************************************ ;* * ;* SUBROUTINE MDDLY * ;* * ;* DELAYS 12 uS. 12uS IS THE MINIMUM TIME REQUIRED BETWEEN BYTES * ;* BEING OUTPUT TO THE NEC 765. * ;* 12.5uS = (50 CYCLES)/(4 MHZ) * ;* * ;************************************************************************ MDDLY: EX (SP),IX ;23 CLOCK CYCLES TO EXECUTE THIS INSTRUCTION EX (SP),IX ;23 MORE CLOCK CYCLES RET ; 1 CLOCK CYCLE FOR RET (3 CYCLES FOR CALL) sectr: ds 1 ;sector number being formated end