;NAME VDIAG ; ;VERSION 1.0 3/17/78 ;RUNS ON Z80, 800, OR 8085 ; 0100 ORG 100H ; ;BIOS LINKAGES ; F000 = BIOS EQU 0F000H F006 = CSE EQU BIOS+6 F009 = CIE EQU BIOS+9 F00C = COE EQU BIOS+0CH F018 = HME EQU BIOS+18H F027 = RDE EQU BIOS+27H F02A = WRE EQU BIOS+2AH F02D = LDE EQU BIOS+2DH F030 = SVE EQU BIOS+30H F033 = FMATE EQU BIOS+33H F036 = SCANE EQU BIOS+36H F039 = PTXTE EQU BIOS+39H F03C = PACCE EQU BIOS+3CH F03F = NSCTRS EQU BIOS+3FH F040 = NTRKS EQU BIOS+40H F046 = SKNCMD EQU BIOS+46H ; 0000 = RBASE EQU 0 ; RAM START 0040 = TADDR EQU RBASE+40H 0042 = UNIT EQU RBASE+42H 0043 = SCTR EQU RBASE+43H 0044 = TRK EQU RBASE+44H 0045 = NREC EQU RBASE+45H 0046 = ERMASK EQU RBASE+46H 0047 = ERSTAT EQU RBASE+47H 0048 = IDSV EQU RBASE+48H 004C = CMDSV EQU RBASE+4CH 0039 = RQST EQU RBASE+39H 0038 = RANDS EQU RBASE+38H 003A = NUMB EQU RBASE+3AH ; 0800 = BFFR1 EQU RBASE+800H 0880 = BFFR2 EQU RBASE+880H 0080 = USRSP EQU RBASE+80H 0080 = NBYTES EQU 128 ; 0060 = X EQU 60H 0064 = STATUS EQU X+4 0064 = CMD EQU X+4 0067 = DATA EQU X+7 ; ; DISK DRIVE EVALUATION EXEC ; 0100 318000 DEXEC: LXI SP,USRSP 0103 213101 LXI H,MSG1 0106 CD39F0 CALL PTXTE ; "ENTER REQUEST #, DRIVE #" 0109 CD36F0 CALL SCANE 010C C22601 JNZ INERR 010F 7D MOV A,L 0110 324200 STA UNIT 0113 7C MOV A,H 0114 323900 STA RQST 0117 CD5001 CALL DECODE ; DECODE AND EXECUTE CMD 011A CD18F0 CALL HME 011D 214401 LXI H,MSG3 0120 CD39F0 CALL PTXTE ; "TASK COMPLETE" 0123 C30001 JMP DEXEC ; 0126 0E3F INERR MVI C,'?' 0128 CD0CF0 CALL COE 012B CD3103 CALL CRLF 012E C30001 JMP DEXEC ; 0131 5445535423MSG1 DB 'TEST#DRV# (TTDD): ',3 ; 0144 5441534B20MSG3 DB 'TASK DONE',0DH,0AH,03 ; ; DECODE REQUEST AND EXECUTE IT ; 0150 FE00 DECODE CPI 0 0152 CA1403 JZ TSTSK ; SEEK TEST 0155 FE01 CPI 1 0157 CAFC01 JZ DIAG 015A FE02 CPI 2 015C CAFC01 JZ DIAG 015F FE03 CPI 3 0161 CAFC01 JZ DIAG 0164 FE04 CPI 4 0166 CAFC01 JZ DIAG 0169 FE05 CPI 5 016B CA8F01 JZ FORMT 016E FE10 CPI 10H 0170 CA4003 JZ LOAD 0173 FE11 CPI 11H 0175 CA5B03 JZ SAVE 0178 FEFF CPI 0FFH 017A C0 RNZ 017B 218501 LXI H,MSG2 017E CD39F0 CALL PTXTE 0181 CD36F0 CALL SCANE 0184 E9 PCHL ; ; 0185 4144445245MSG2 DB 'ADDRESS: ',3 ; ; ; ; FORMAT A DISKETTE ; ; 018F AF FORMT XRA A 0190 324400 STA TRK 0193 3C INR A 0194 324300 STA SCTR 0197 CD18F0 CALL HME 019A CD33F0 FORMT1 CALL FMATE 019D C2B001 JNZ ERROR 01A0 3A4400 LDA TRK 01A3 3C INR A 01A4 324400 STA TRK 01A7 47 MOV B,A 01A8 3A40F0 LDA NTRKS 01AB B8 CMP B 01AC C29A01 JNZ FORMT1 01AF C9 RET ; ; ; ; ; ERROR PRINT ROUTINE ; ; 01B0 21E401 ERROR LXI H,ERMSG 01B3 CD39F0 CALL PTXTE ; "DISK ERROR ..." 01B6 3A4C00 LDA CMDSV 01B9 CD3CF0 CALL PACCE ; PRINT COMMAND 01BC CD3B03 CALL SPACE 01BF 3A4700 LDA ERSTAT 01C2 CD3CF0 CALL PACCE ; PRINT STATUS 01C5 CD3B03 CALL SPACE 01C8 3A4200 LDA UNIT 01CB CD3CF0 CALL PACCE ; UNIT # 01CE CD3B03 CALL SPACE 01D1 3A4400 LDA TRK 01D4 CD3CF0 CALL PACCE 01D7 CD3B03 CALL SPACE 01DA 3A4300 LDA SCTR 01DD CD3CF0 CALL PACCE 01E0 CD3103 CALL CRLF 01E3 C9 RET ; ; 01E4 434D442053ERMSG DB 'CMD STAT DRV TRK SCTR> ',3 ; ; ; ; ; READ / WRITE DIAGNOSTIC ; CONTINUES UNTIL A '.' IS ENTERED FROM KEYBOARD ; ; ; 01FC AF DIAG XRA A 01FD 324400 STA TRK 0200 3C INR A 0201 324300 STA SCTR 0204 C35202 JMP DIAG1 0207 210008 DIA10 LXI H,BFFR1 020A 224000 SHLD TADDR 020D CD2AF0 CALL WRE 0210 C4B001 CNZ ERROR 0213 218008 DIA11 LXI H,BFFR2 0216 224000 SHLD TADDR 0219 CD27F0 CALL RDE 021C C4B001 CNZ ERROR 021F 3A3900 LDA RQST 0222 FE02 CPI 2 0224 CA3402 JZ DIAG3 0227 FE03 CPI 3 0229 CACA02 JZ RINCR 022C FE04 CPI 4 022E CABB02 JZ DINCR 0231 CD7302 CALL COMPR ; IF DIAG 1, COMPARE 0234 214300 DIAG3 LXI H,SCTR 0237 34 INR M ; INC SECTOR 0238 3A3FF0 LDA NSCTRS 023B 3C INR A 023C BE CMP M 023D C25202 JNZ DIAG1 ; IF NOT END OF TRK, JMP 0240 3601 MVI M,1 ; SET TO SCTR 1 0242 23 INX H ; POINT TO TRK 0243 34 INR M ; INC TRK # 0244 3A40F0 DIAG4 LDA NTRKS 0247 BE CMP M 0248 C25202 JNZ DIAG1 024B 3600 MVI M,0 ; SET TO TRK 00 024D 0E50 MVI C,'P' 024F CD0CF0 CALL COE ; PRINT 'P' EVERY COMPLETE PASS 0252 0000000000DIAG1 NOP!NOP!NOP!NOP!NOP! 0257 DB01 IN 1 0259 E67F ANI 7FH ;STRIP PARITY 025B FE1B CPI 1BH ;ESCAPPE 025D C8 RZ 025E 3A3900 DIAG2 LDA RQST 0261 FE02 CPI 2 0263 CA1302 JZ DIA11 0266 FE01 CPI 1 0268 CA0702 JZ DIA10 026B FE03 CPI 3 026D CA0702 JZ DIA10 0270 C30702 JMP DIA10 ; ; ; 0273 210008 COMPR LXI H,BFFR1 0276 118008 LXI D,BFFR2 0279 0680 MVI B,NBYTES 027B 1A CMPR1 LDAX D 027C BE CMP M 027D 3EFF MVI A,0FFH 027F 324700 STA ERSTAT 0282 C2B001 JNZ ERROR 0285 23 INX H 0286 13 INX D 0287 05 DCR B 0288 C27B02 JNZ CMPR1 028B CD8F02 CALL INCRD 028E C9 RET ; ; ; ; ; ; ; 028F 110008 INCRD LXI D,BFFR1 0292 0640 MVI B,NBYTES/2 0294 3A3800 LDA RANDS 0297 FE01 CPI 1 0299 CA9D02 JZ HERE 029C 13 INX D 029D CDF502 HERE CALL PRAND 02A0 12 STAX D 02A1 13 INX D 02A2 13 INX D 02A3 05 DCR B 02A4 C29D02 JNZ HERE 02A7 3A3800 LDA RANDS 02AA FE01 CPI 1 02AC CAB502 JZ SKIP 02AF 3E01 MVI A,1 02B1 323800 STA RANDS 02B4 C9 RET 02B5 3E00 SKIP MVI A,0 02B7 323800 STA RANDS 02BA C9 RET ; ; ; 02BB CD7302 DINCR CALL COMPR 02BE CDF502 CALL PRAND 02C1 34 INR M ; INC SEED 02C2 E601 ANI 1 02C4 324200 STA UNIT ; RANDOM UNIT 02C7 C3CD02 JMP RINCR1 02CA CD7302 RINCR CALL COMPR 02CD 3A3FF0 RINCR1 LDA NSCTRS 02D0 3C INR A 02D1 47 MOV B,A 02D2 CDF502 CALL PRAND 02D5 E61F ANI 01FH 02D7 B7 ORA A 02D8 CACD02 JZ RINCR1 ; SECTOR 0 ILLEGAL 02DB 324300 STA SCTR 02DE B8 CMP B 02DF D2CD02 JNC RINCR1 ;IF NO>NSCTRS TRY AGAIN 02E2 3A40F0 ONCM LDA NTRKS 02E5 47 MOV B,A 02E6 CDF502 CALL PRAND 02E9 E67F ANI 07FH 02EB 324400 STA TRK 02EE B8 CMP B 02EF D2E202 JNC ONCM ; IF NO>NTRKS TRY AGAIN 02F2 C35202 JMP DIAG1 ; ; ; ; PSEUDO RANDOM NUMBER GENERATOR ; ; 02F5 D5 PRAND PUSH D 02F6 C5 PUSH B 02F7 213A00 LXI H,NUMB ; LOCATION OF SEED 02FA 0E00 MVI C,0 02FC 7E MOV A,M 02FD A7 ANA A 02FE C20303 JNZ NEXT 0301 3EFF MVI A,0FFH 0303 57 NEXT MOV D,A 0304 E61D ANI 1DH 0306 EA0B03 JPE PAR 0309 0E80 MVI C,80H 030B 7A PAR MOV A,D 030C 0F RRC 030D E67F ANI 7FH 030F 81 ADD C 0310 77 MOV M,A 0311 C1 POP B 0312 D1 POP D 0313 C9 RET ; ; ; ; 0314 CD18F0 TSTSK CALL HME 0317 3A40F0 LDA NTRKS 031A 3D DCR A 031B D367 OUT DATA 031D 3A46F0 LDA SKNCMD ; SEEK ( NO VERIFY ) 0320 D364 OUT CMD 0322 CD06F0 CALL CSE 0325 CA1403 JZ TSTSK 0328 CD09F0 CALL CIE 032B FE2E CPI '.' 032D C8 RZ 032E C31403 JMP TSTSK ; ; ; ; 0331 0E0D CRLF MVI C,0DH 0333 CD0CF0 CALL COE 0336 0E0A MVI C,0AH 0338 C30CF0 JMP COE ;; ; 033B 0E20 SPACE MVI C,' ' 033D C30CF0 JMP COE ; ; ; ; ; ; ; LOAD 'N' SECTORS ; ; 0340 214903 LOAD LXI H,LDMSG 0343 CD7603 CALL STUFF 0346 C32DF0 JMP LDE ; 0349 454E544552LDMSG DB 'ENTER LOAD ADDR: ',3 ; ; ; ; ; SAVE 'N' SECTORS ; ; 035B 216403 SAVE LXI H,SVMSG 035E CD7603 CALL STUFF 0361 C330F0 JMP SVE ; 0364 454E544552SVMSG DB 'ENTER SAVE ADDR: ',3 ; ; ; ; ; STUFF DISK PARAMS ; ; ; 0376 CD39F0 STUFF CALL PTXTE 0379 CD36F0 CALL SCANE 037C C22601 JNZ INERR 037F 224000 SHLD TADDR 0382 21A203 LXI H,TSMSG 0385 CD39F0 CALL PTXTE 0388 CD36F0 CALL SCANE 038B C22601 JNZ INERR 038E 224300 SHLD SCTR ; SECTOR & TRACK 0391 21BE03 LXI H,SZMSG 0394 CD39F0 CALL PTXTE 0397 CD36F0 CALL SCANE 039A C22601 JNZ INERR 039D 7D MOV A,L 039E 324500 STA NREC ; # OF SECTORS 03A1 C9 RET ; 03A2 454E544552TSMSG DB 'ENTER TRACK/SECTOR (TTSS): ',3 ; 03BE 454E544552SZMSG DB 'ENTER NUMBER OF SECTORS (NN):',3 03DC END