; Seeker for Micro Decision ; 0100 ORG 0100H AB00 = BIOS EQU 0AB00H 0005 = BDOS EQU 0005H 0000 = WARM EQU 0 0027 = SIZE EQU 39 0000 = TSTCNT EQU 0 ;NUMBER OF PASSES AB1E = SETTRK EQU BIOS+1EH AB21 = SETSEC EQU BIOS+21H AB27 = READ EQU BIOS+27H AB24 = SETDMA EQU BIOS+24H AB2A = WRITE EQU BIOS+2AH 0100 3A8000 BEGIN: LDA 80H ;CHECK FOR PARAMETERS 0103 B7 ORA A 0104 CAC801 JZ BADPAR 0107 3A8200 LDA 082H ;PICK UP DRIVE NUMBER 010A E64F ANI 04FH ;UPPER CASE CONVERT 010C FE41 CPI 'A' 010E CA1601 JZ SELECT 0111 FE42 CPI 'B' 0113 C2C801 JNZ BADPAR 0116 E603 SELECT: ANI 3 ;SELECT A DRIVE 0118 3D DCR A 0119 5F MOV E,A 011A 0E0E MVI C,0EH 011C CD0500 CALL BDOS 011F 310001 LXI SP,BEGIN 0122 1E0C MVI E,0CH 0124 CDB201 CALL COUT ;PRINT FORM FEED 0127 11D101 LXI D,SIGNON 012A CDB801 CALL PMSG 012D 1E0D MVI E,0DH 012F CDB201 CALL COUT 0132 1E0A MVI E,0AH 0134 CDB201 CALL COUT 0137 0E00 MVI C,TSTCNT ;NUMBER OF PASSES 0139 C5 START: PUSH B 013A 1E2E MVI E,02EH 013C CDB201 CALL COUT 013F 019F02 LXI B,BUFFER 0142 CD24AB CALL SETDMA 0145 C1 POP B ; DE = MULTIPLICAND ; HL = PRODUCT ; A = MULTIPLIER ; B = COUNT 0146 2A9B02 MAIN: LHLD FIRST ;GET CURRENT TRACK 0149 7D MOV A,L 014A 3C INR A 014B 119900 LXI D,153 014E 210700 LXI H,7 0151 0608 MVI B,8 0153 29 MULT: DAD H 0154 17 RAL 0155 D25901 JNC CHCNT 0158 19 DAD D 0159 05 CHCNT: DCR B 015A C25301 JNZ MULT 015D 229B02 SHLD FIRST 0160 7D MOV A,L 0161 E63F ANI 03FH ;MAKE IT FIT SIZE 0163 47 MOV B,A 0164 D627 SUI SIZE ;WITHIN TRACK LIMIT? 0166 D26C01 JNC MAIN1 0169 78 MOV A,B 016A 0F RRC 016B 47 MOV B,A 016C 68 MAIN1: MOV L,B 016D CD7701 CALL SEEK 0170 0D DCR C 0171 C23901 JNZ START 0174 C39601 JMP SEEKOK ; ENTER WITH HL POINTING TO NEW TRACK, C HAS PASS NUMBER ; AND DMA ADRESS SET. 0177 C5 SEEK: PUSH B ;SAVE PASS COUNTER 0178 44 MOV B,H 0179 4D MOV C,L 017A CD1EAB CALL SETTRK 017D 010100 LXI B,1 0180 CD21AB CALL SETSEC 0183 CD27ABB7 CALL READŠ ORA A 0187 C29F01 JNZ ERROR ; CALL WRITE ; ORA A ; JNZ ERROR 018A 0E0B MVI C,0BH ;CHECK KEY PRESSED 018C CD0500 CALL BDOS 018F FE00 CPI 0 0191 C20000 JNZ WARM 0194 C1 POP B 0195 C9 RET 0196 110502 SEEKOK: LXI D,GDMESS 0199 CDB801 CALL PMSG 019C C30000 JMP WARM 019F 112E02 ERROR: LXI D,BDMESS 01A2 CDB801 CALL PMSG 01A5 1E0A MVI E,0AH 01A7 CDB201 CALL COUT 01AA 1E0D MVI E,0DH 01AC CDB201 CALL COUT 01AF C30000 JMP WARM 01B2 0E02 COUT: MVI C,02 01B4 CD0500 CALL BDOS 01B7 C9 RET 01B8 0E09 PMSG: MVI C,09H 01BA CD0500 CALL BDOS 01BD 1E0A MVI E,0AH 01BF CDB201 CALL COUT 01C2 1E0D MVI E,0DH 01C4 CDB201 CALL COUT 01C7 C9 RET 01C8 116F02 BADPAR: LXI D,PARAM 01CB CDB801 CALL PMSG 01CE C30000 JMP WARM 01D1 4D6963726FSIGNON: DB 'Micro Decision Disk Test... Type any key to abort: $' 0205 526561642FGDMESS: DB 'Read/Write Test Complete... No errors!! $' 022E 203D3D3D3EBDMESS: DB ' ===>> Read/Write ERROR <<=== $' 024D 2054797065RETURN: DB ' Type any key to return to CP/M: $' 026F 4261642064PARAM: DB 'Bad drive value, select either "A" or "B". $' 029B 0000 FIRST: DW 0 029D 2700 LAST: DW SIZE 029F = BUFFER EQU $ 029F END