TITLE FORMAT SUBTTL Format and verify a disk (IBM 3740 format) .Z80 FBIOS EQU 0F000H HOME EQU FBIOS+18H READ EQU FBIOS+27H NSCTRS EQU 26 NTRKS EQU 77 GAP1 EQU 4CH GAP2 EQU 11H GAP3 EQU 21H SKNCMD EQU 1AH WRTCMD EQU 0F4H DLYCON EQU 8EH X EQU 0E0H SELPRT EQU X+3 ;DRIVE SELECT PORT STATUS EQU X+4 ;STATUS PORT (IN) TRKPRT EQU X+5 ;TRACK PORT DATA EQU X+7 ;DATA PORT CMD EQU X+4 ;COMMAND PORT (OUT) UNIT EQU 42H SECTOR EQU 43H TRACK EQU 44H DLTDSK EQU 4 BDOS EQU 5 TFCB EQU 5CH CR EQU 0DH LF EQU 0AH FORMAT: LD (CCPSP),SP LD SP,STACK LD A,(TFCB) OR A JR Z,USE.B DEC A JR SELECT USE.B: LD A,1 ;Select drive B SELECT: LD (UNIT),A CALL HOME LD B,NTRKS LD C,0 NXTTRK: LD A,C LD (TRACK),A PUSH BC LD B,5 NXTFMT: PUSH BC CALL FMAT LD B,NSCTRS LD C,1 NXTSEC: LD A,C LD (SECTOR),A PUSH BC CALL READ JR Z,NOERR POP DE POP BC LD A,B OR A JR Z,NOFMAT DJNZ NXTFMT NOFMAT: PUSH BC PUSH DE LD A,(TRACK) LD HL,TRKLOC CALL STACC LD A,(SECTOR) LD HL,SECLOC CALL STACC LD DE,REMSG LD C,9 ;Print string CALL BDOS NOERR: POP BC INC C DJNZ NXTSEC POP BC POP BC INC C DJNZ NXTTRK LD A,(DLTDSK) LD (UNIT),A LD SP,(CCPSP) RET STACC: PUSH AF RRCA RRCA RRCA RRCA CALL STHEX POP AF STHEX: AND 0FH ADD A,90H DAA ADC A,40H DAA LD (HL),A INC HL RET FMAT: ;Format the track in IBM 3740 format LD A,C OUT (DATA),A CMDI1: IN A,(STATUS) RRA JR C,CMDI1 ;WAIT FOR NOT BUSY IN A,(SELPRT) AND 1FH OR 60H OUT (SELPRT),A ;NO WAIT STATE ENABLED LD A,SKNCMD OUT (CMD),A LD B,DLYCON MSEC: DJNZ MSEC CALL END LD HL,NSCTRS*256+1 IN A,(SELPRT) AND 1FH OUT (SELPRT),A LD A,WRTCMD OUT (CMD),A LD A,0FFH LD B,40 LOOP0: OUT (DATA),A ;GAP1 DJNZ LOOP0 LD B,6 XOR A LOOP1: OUT (DATA),A ;ADD ADDRESS MARK DJNZ LOOP1 LD A,0FCH OUT (DATA),A LD B,26 LD A,0FFH LOOP2: OUT (DATA),A DJNZ LOOP2 BACK: LD B,6 XOR A LOOP4: OUT (DATA),A DJNZ LOOP4 LD A,0FEH OUT (DATA),A IN A,(TRKPRT) OUT (DATA),A XOR A OUT (DATA),A LD A,L OUT (DATA),A XOR A OUT (DATA),A LD A,0F7H OUT (DATA),A LD B,11 LD A,0FFH LOOP5: OUT (DATA),A DJNZ LOOP5 LD B,6 XOR A LOOP6: OUT (DATA),A DJNZ LOOP6 LD A,0FBH OUT (DATA),A LD B,128 LD A,0E5H LOOP7: OUT (DATA),A DJNZ LOOP7 LD A,0F7H OUT (DATA),A LD B,27 LD A,0FFH LOOP8: OUT (DATA),A DJNZ LOOP8 INC L DEC H JR NZ,BACK LD A,0FFH LD B,247 LOOP9: OUT (DATA),A DJNZ LOOP9 END: IN A,(STATUS) RRA JR C,END IN A,(SELPRT) OR 0E0H OUT (SELPRT),A RET REMSG: DEFB "Read error at track " TRKLOC: DEFB " , sector " SECLOC: DEFB " ",CR,LF,"$" CCPSP: DEFS 2 DEFS 30H STACK: ORG CCPSP END FORMAT