;FM80.Z80 TRiPsoft 02/04/88 ; ;Amstrad CPM+ formatter for 80 track DS DD Drive B: ;Needs BDISK.COM to patch XDPB for use after formatting ; ;Note: EMS file must be patched using one of the routines ;BPAT.SUB or BCPAT.SUB prior to using this formatter. ; ;Feel free to use this programme for non-commercial application ;no responsability is accepted for any loss arising from the use ;of this programme or any of the accompanying patches. ; ; Version 1.01 ; ;.... table of equates ; COLDST EQU 0 BDOS EQU 5 BVAL EQU 04007H COMMON EQU 0C000H PORT1 EQU 0FA7EH PORT2 EQU 0FB7FH DLMON EQU 00A4H CR EQU 0DH LF EQU 0AH BELL EQU 07H ORG 0100H START: JP BEGIN DEFB 'TRiPsoft 020488.$' BEGIN: LD DE,CLSMSG ;clear screen CALL PSTRNG DOIT: LD A,0 LD (TRK),A ;zero track no LD DE,INMSG ;signon CALL PSTRNG CALL GETKEY ;get a keypress CALL MOTON ;turn motor on DI LD BC,PORT1 LD A,01H OUT (C),A INC B INC C LD HL,0000H LOOP2: INC HL LD A,H OR L JR NZ,LOOP2 LD E,020H CALL CHKDRV LD E,040H CALL CHKDRV CALL SUBR1 XOR A LD (STO1),A LD DE,FMTMSG CALL PSTRNG FMTIT: LD DE,STRMSG ;sector message CALL PSTRNG LD A,(TRK) INC A LD (TRK),A CALL OPHX ;output trk no in hex LD DE,HMSG ;hex message CALL PSTRNG DI LD BC,PORT1 LD A,01H OUT (C),A LD HL,FTAB1 LD A,(STO1) LD B,014H LD DE,0004H LOOP1: LD (HL),A ADD HL,DE DJNZ LOOP1 LD BC,PORT2 CALL SUBRT2 LD HL,FTAB1 LD DE,BVAL LD A,04DH CALL MAIN1 LD A,01H CALL MAIN1 LD A,02H CALL MAIN1 LD A,0AH CALL MAIN1 LD A,011H CALL MAIN1 LD A,0E5H OUT (C),A DEC C LOOP3: IN A,(C) RLA JR NC,LOOP3 AND D JR Z,SKIP1 INC C LD A,(HL) OUT (C),A INC HL DEC C JR LOOP3 SKIP1: INC C LOOP4: IN A,(C) DEC E JR Z,FWD2 CALL MAIN2 JR LOOP4 FWD2: LD HL,FTAB2 LD DE,BVAL LD BC,PORT2 LD A,04DH CALL MAIN1 LD A,05H CALL MAIN1 LD A,02H CALL MAIN1 LD A,0AH CALL MAIN1 LD A,011H CALL MAIN1 LD A,0E5H OUT (C),A DEC C LOOP5: IN A,(C) RLA JR NC,LOOP5 AND D JR Z,FWD3 INC C LD A,(HL) OUT (C),A INC HL DEC C JR LOOP5 FWD3: INC C LOOP6: IN A,(C) DEC E JR Z,CKDONE CALL MAIN2 JR LOOP6 CKDONE: LD A,(STO1) INC A LD (STO1),A CP 050H ;done 80 tracks ? JP C,FMTIT JP START MAIN1: OUT (C),A MAIN2: DEC C NXT2: IN A,(C) RLA JR NC,NXT2 INC C RET LD BC,PORT1 LD A,01H OUT (C),A LD HL,COMMON WAIT1: LD B,03H HERE: DJNZ HERE DEC HL LD A,H OR L JR NZ,WAIT1 RET CHKDRV: LD A,04H CALL MAIN1 LD A,01H CALL MAIN1 IN A,(C) LD L,A AND 020H JR Z,ERR1 LD A,L AND 040H JR NZ,ERR2 JP MAIN2 ERR1: CALL PDRIV ;print drive b: LD DE,ERMS1 ;disk missing JR REPEAT ERR2: CALL PDRIV ;print drive b: LD DE,ERMS2 ;disk wite protected REPEAT: CALL PSTRNG JP DOIT PDRIV: LD DE,DRVMSG JP PSTRNG SUBR1: CALL MAIN2 LD A,07H CALL MAIN1 LD A,01H OUT (C),A LD L,0FFH NXT4: CALL MAIN2 LD A,04H CALL MAIN1 LD A,01H CALL MAIN1 IN A,(C) AND 010H JP NZ,MAIN2 DEC L JR NZ,NXT4 JR SUBR1 SUBRT2: CALL MAIN2 LD A,0FH CALL MAIN1 LD A,01H CALL MAIN1 LD A,(STO1) CALL MAIN1 LD A,08H CALL MAIN1 IN L,(C) CALL MAIN2 IN A,(C) LD A,L AND 0C0H JP Z,MAIN2 JR SUBRT2 ;.... utility subroutines PSTRNG: LD C,09H JP BDOS GETKEY: LD C,01H CALL BDOS CP 03H JR Z,QUIT RET MOTON: LD IX,(0001) ;get base of jump table LD DE,87 ;add offset for userf ADD IX,DE CALL JUMP ;do it DEFW DLMON ;turn motor on RET ; JUMP: JP (IX) RET QUIT: LD BC,PORT1 XOR A OUT (C),A LD DE,FINMSG CALL PSTRNG JP 0000H ;quit to cpm ;.... output number as hex pair OPHX: PUSH BC LD C,A RRA RRA RRA RRA CALL H1 LD A,C CALL H1 LD A,C POP BC RET H1: AND 0FH ADD '0' CP '9'+1 JP C,H2 ADD 'A'-'9'-1 H2: CALL PCHAR RET ;.... print char in A PCHAR: PUSH BC PUSH AF PUSH DE PUSH HL LD C,02 LD E,A CALL 0005 POP HL POP DE POP AF POP BC RET ;.... data storgae amd message area DRVMSG: DB CR,LF,'Drive B: $' ERMS1: DB 'Error - disk missing',BELL,CR,LF,'$' ERMS2: DB 'Error - disk is write protected',BELL,CR,LF,'$' CLSMSG: DB 27,'E',27,'H',CR,LF,'80 TRACK DS FORMATTER V 1.01',CR,LF,'$' INMSG: DB LF,CR,LF,'Put Disk for formatting in Drive B:',CR,LF DB 'Press SPACE when ready or ^C to quit.',CR,LF,'$' FMTMSG: DB CR,LF,'Formatting Disk in B: for 80 track DS DD',CR,LF,LF,'$' STRMSG: DB CR,' Formatting track: $' HMSG: DB ' (hex).',CR,'$' TRK: DB 0,0 FINMSG: DB CR,LF,LF,'Formatting finished - Reboot CPM',CR,LF,'$' STO1: DB 0 FTAB1: DB 0,0,'A',2 DB 0,0,'F',2 DB 0,0,'B',2 DB 0,0,'G',2 DB 0,0,'C',2 DB 0,0,'H',2 DB 0,0,'D',2 DB 0,0,'I',2 DB 0,0,'E',2 DB 0,0,'J',2 FTAB2: DB 0,1,'A',2 DB 0,1,'F',2 DB 0,1,'B',2 DB 0,1,'G',2 DB 0,1,'C',2 DB 0,1,'H',2 DB 0,1,'D',2 DB 0,1,'I',2 DB 0,1,'E',2 DB 0,1,'J',2 END DB 0,1,'B',2 DB 0,1,