; ; Seeker for Micro Decision ; 0100 ORG 0100H F600 = BIOS EQU 0F600H 0005 = BDOS EQU 0005H 0000 = WARM EQU 0 0022 = SIZE EQU 34 000A = TSTCNT EQU 10 ;NUMBER OF PASSES F61E = SETTRK EQU BIOS+1EH F621 = SETSEC EQU BIOS+21H F627 = READ EQU BIOS+27H F624 = SETDMA EQU BIOS+24H 0100 3A8200 BEGIN: LDA 082H ;PICK UP DRIVE NUMBER 0103 E64F ANI 04FH ;UPPER CASE CONVERT 0105 FE41 CPI 'A' 0107 CA0F01 JZ SELECT 010A FE42 CPI 'B' 010C C2E301 JNZ BADPAR 010F E603 SELECT: ANI 3 ;SELECT A DRIVE 0111 3D DCR A 0112 5F MOV E,A 0113 0E0E MVI C,0EH 0115 CD0500 CALL BDOS 0118 310001 LXI SP,BEGIN 011B 1E0C MVI E,0CH 011D CDCD01 CALL COUT ;PRINT FORM FEED 0120 11EC01 LXI D,SIGNON 0123 CDD301 CALL PMSG 0126 1E0D MVI E,0DH 0128 CDCD01 CALL COUT 012B 1E0A MVI E,0AH 012D CDCD01 CALL COUT 0130 0E0A MVI C,TSTCNT ;NUMBER OF PASSES 0132 C5 START: PUSH B 0133 1E2E MVI E,02EH 0135 CDCD01 CALL COUT 0138 210000 LXI H,0 013B 22AA02 SHLD FIRST 013E 212200 LXI H,SIZE 0141 22AC02 SHLD LAST 0144 01AE02 LXI B,BUFFER 0147 CD24F6 CALL SETDMA 014A C1 POP B 014B 2AAA02 MAIN: LHLD FIRST 014E CD7D01 CALL SEEK 0151 2AAC02 LHLD LAST 0154 CD7D01 CALL SEEK 0157 2AAA02 LHLD FIRST 015A 23 INX H 015B 22AA02 SHLD FIRST 015E 2AAC02 LHLD LAST 0161 CD7D01 CALL SEEK 0164 2AAA02 LHLD FIRST 0167 CD7D01 CALL SEEK 016A 2AAC02 LHLD LAST 016D 2B DCX H 016E 22AC02 SHLD LAST 0171 7C MOV A,H 0172 B5 ORA L 0173 C24B01 JNZ MAIN 0176 0D DCR C 0177 C23201 JNZ START 017A C39C01 JMP SEEKOK 017D C5 SEEK: PUSH B ;SAVE PASS COUNTER 017E 44 MOV B,H 017F 4D MOV C,L 0180 CD1EF6 CALL SETTRK 0183 010100 LXI B,1 0186 CD21F6 CALL SETSEC 0189 CD27F6B7 CALL READŠ ORA A 018D C2A501 JNZ ERROR 0190 0E0B MVI C,0BH ;CHECK KEY PRESSED 0192 CD0500 CALL BDOS 0195 FE00 CPI 0 0197 C20000 JNZ WARM 019A C1 POP B 019B C9 RET 019C 112002 SEEKOK: LXI D,GDMESS 019F CDD301 CALL PMSG 01A2 C30000 JMP WARM 01A5 114302 ERROR: LXI D,BDMESS 01A8 CDD301 CALL PMSG 01AB 1E0A MVI E,0AH 01AD CDCD01 CALL COUT 01B0 1E0D MVI E,0DH 01B2 CDCD01 CALL COUT 01B5 115C02 LXI D,RETURN 01B8 CDD301 CALL PMSG 01BB 0E0B LOOP0: MVI C,0BH ;CHECK KEY PRESSED 01BD CD0500 CALL BDOS 01C0 FE00 CPI 0 01C2 C20000 JNZ WARM 01C5 1E07 MVI E,07H ;BEEP THE TERMINAL 01C7 CDCD01 CALL COUT 01CA C3BB01 JMP LOOP0 01CD 0E02 COUT: MVI C,02 01CF CD0500 CALL BDOS 01D2 C9 RET 01D3 0E09 PMSG: MVI C,09H 01D5 CD0500 CALL BDOS 01D8 1E0A MVI E,0AH 01DA CDCD01 CALL COUT 01DD 1E0D MVI E,0DH 01DF CDCD01 CALL COUT 01E2 C9 RET 01E3 117E02 BADPAR: LXI D,PARAM 01E6 CDD301 CALL PMSG 01E9 C30000 JMP WARM 01EC 4D6963726FSIGNON: DB 'Micro Decision Seek Test... Type any key to abort: $' 0220 5365656B20GDMESS: DB 'Seek Test Complete... No errors!! $' 0243 203D3D3D3EBDMESS: DB ' ===>> SEEK ERROR <<=== $' 025C 2054797065RETURN: DB ' Type any key to return to CP/M: $' 027E 4261642064PARAM: DB 'Bad drive value, select either "A" or "B". $' 02AA 0000 FIRST: DW 0 02AC 2200 LAST: DW SIZE 02AE = BUFFER EQU $ 02AE END