This program tests A & J Micro Drive wafers by repeatedly saving and verifying small test files across 52 sectors (ASCII codes 49–100), using ON ERR trapping to detect and record bad sectors. It tracks the number of successfully written sectors in variable S and accumulates a comma-separated string of bad sector numbers in S$. After completing the test loop, it calculates approximate free capacity by multiplying the good-sector count by 3.88K and displays the result along with any bad sector numbers. The large REM statements at lines 200–350 serve as dummy data blocks of known size that the program saves to the wafer during testing.
Program Analysis
Program Structure
The program is organized into four functional regions:
- Initialization (lines 91–93): Sets the successful-sector counter
Sto 1, the bad-sector counterBSto 0, and the bad-sector list stringS$to a space. - Test loop (lines 100–160): Iterates
Afrom 49 to 100 (52 iterations), constructing filenames fromCHR$ Aand attempting a SAVE/VERIFY cycle on each sector. - Results display (lines 3000–3020): Prints the estimated free capacity and the list of bad sectors, then waits for a keypress before restarting with
RUNfor the next wafer. - Error handler (lines 3500–3810): Intercepts drive errors, classifies them by error code, and either records a bad sector or halts.
REM Blocks as Test Data
Lines 200 through 350 consist entirely of large REM statements packed with repeated characters (U and w sequences). These are not comments in the conventional sense; they are bulk data embedded in the program itself, sized to give each SAVE operation a meaningful payload. Because the program saves itself (or portions of itself) to the wafer, these padded REM lines ensure that each saved file occupies a realistic amount of wafer space and provides a meaningful stress test of each sector.
Filename Construction
The loop variable A runs from 49 to 100, covering ASCII characters 1 through d. Three string variables are constructed each iteration:
A$=CHR$ A— a single distinguishing character.B$="TEST"+A$— the filename for the saved file (e.g.,TEST1,TEST2, …).C$="@"+A$+","+B$— the SAVE target specifying the drive/sector.D$="@"+B$— the VERIFY source.
Lines 1000–1020 save three short named files (A, B, C) to drives 1–3 respectively, seemingly as a calibration or warm-up step before the main loop begins — though they fall outside the loop and are only reached if execution flows past line 160.
Error Handling Strategy
The program makes careful use of ON ERR to handle drive failures non-fatally:
- Line 135 arms the error trap to jump to the handler at line 3500 before each SAVE.
- Line 155 resets the error trap after a successful VERIFY, so normal execution resumes cleanly.
- The handler at line 3500 reads the system error code variable via
PEEK 23739intoZ. - Error code 8 (interpreted as a successful end-of-wafer or capacity condition) branches to the results display at line 2999.
- Error code 21 (a more serious or unrecoverable error) branches to line 3800, which resets the trap and halts.
- Any other error is treated as a bad sector: a message is printed,
BSis incremented,Sis decremented, and the bad sector number (A-48, converting ASCII back to a 1-based sector number) is appended toS$.
Capacity Calculation
At line 3002, the estimated free capacity is printed as S * 3.88 kilobytes. The multiplier 3.88 reflects an empirical per-sector storage figure for the wafer format. Since S starts at 1 and is incremented before each SAVE (line 137) but decremented on error (line 3610), the final value of S approximates the number of sectors successfully written.
Bad Sector Reporting
Bad sector numbers are accumulated in S$ as a comma-separated string using STR$ concatenation (line 3620). The sector number displayed is A-48, converting the ASCII loop index back to a human-readable integer. This string is printed verbatim at line 3005.
Multi-Wafer Operation
After displaying results, line 3010 waits for any key using the IF INKEY$ = "" THEN GO TO 3010 idiom, then line 3020 executes RUN, which reinitializes all variables and restarts from line 91, allowing sequential testing of multiple wafers without manual program restart.
Notable Anomalies
- Lines 1000–1020 save files to drives 1, 2, and 3 unconditionally but are positioned after the loop at line 160, which ends with
NEXT Aand falls through to line 200 (aREM). Normal execution after the loop would flow from line 160 to line 200 onwards through theREMblocks and on to line 1000, which may be unintentional, or these saves may be a secondary test stage. - Line 4000 onward contains a
SAVE "TEST"and aBEEPfollowed by anotherSAVE "TEST". These lines are unreachable during normal program flow and appear to be a mechanism for saving the test program itself to tape. - The bad-sector counter
BSis incremented at line 3610 but never displayed in the results — only the stringS$listing sector numbers is shown.
Content
Source Code
91 LET S=1
92 LET BS=0
93 LET S$=" "
100 FOR A=49 TO 100
110 LET A$=CHR$ A
115 LET B$="TEST"+A$
120 LET C$="@"+A$+","+B$
130 LET D$="@"+B$
135 ON ERR GO TO 3500
137 LET S=S+1
140 SAVE C$
150 VERIFY D$
155 ON ERR RESET
160 NEXT A
200 REM UUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
U
210 REM wwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
220 REM UUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
240 REM wwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
250 REM UUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
260 REM wwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
270 REM wwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
280 REM wwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
290 REM wwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
300 REM wwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
310 REM wwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
320 REM wwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
330 REM wwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
340 REM wwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
350 REM wwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
1000 SAVE "@1,A"
1010 SAVE "@2,B"
1020 SAVE "@3,C"
2999 ON ERR RESET
3000 CLS
3002 PRINT AT 0,0;"THE WAFER HAS
APPROXIMATELY ",;S*3.88;"K-BYTE
S FREE.";
3005 PRINT AT 4,0;"THE FOLLOWING
SECTORS WERE BAD:",;S$
3007 PRINT AT 8,0;"REMOVE WAFER
AND INSERT NEXT WAFER FOR TES
TING, THEN PRESS ANY KEY."
3010 IF INKEY$ = "" THEN GO TO 3
010
3020 RUN
3499 STOP
3500 LET Z=PEEK 23739
3505 ON ERR RESET
3510 IF Z=8 THEN GO TO 2999
3520 IF Z=21 THEN GO TO 3800
3600 PRINT "THERE HAS BEEN AN ER
ROR DETECTEDON SECTOR #";A-48;".
",,"CONTINUING TO TEST WAFER."
3610 LET BS=BS+1: LET S=S-1
3620 LET S$=S$+STR$ S+","
3700 GO TO 155
3800 ON ERR RESET
3810 STOP
4000 SAVE "TEST"
4010 BEEP 2,2
4030 SAVE "TEST"
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.
