System test software
System test software
Is the system test program mentioned in the service manual available somewhere?
- klausfrank
- Chuggy Microdrive
- Posts: 61
- Joined: Wed Jan 26, 2011 10:47 am
- Location: Silkeborg, Denmark
Re: System test software
I have a master - still working from a backup ! I have both microdrive and disc.
Regards
Regards
Re: System test software
Great! I sent you a PMklausfrank wrote:I have a master - still working from a backup ! I have both microdrive and disc.
Regards

Re: System test software
I don't remember If we have preserved or notklausfrank wrote:I have a master - still working from a backup ! I have both microdrive and disc.
Regards

Re: System test software
Would anyone be. able to share this one with me, trying to debug my microdrive issues, it might prove useful. Thanks! 

Re: System test software
Hi, Sorry for stealing the thread, anyone willing to share the test program?
thanks in advance
/Chris
thanks in advance
/Chris
- klausfrank
- Chuggy Microdrive
- Posts: 61
- Joined: Wed Jan 26, 2011 10:47 am
- Location: Silkeborg, Denmark
- Chr$
- QL Wafer Drive
- Posts: 1382
- Joined: Mon May 27, 2019 10:03 am
- Location: Sachsen, Germany
- Contact:
Re: System test software
The program (below) that goes through and tests stuff (originally on the ROM of the factory test jig, here: https://qxl.win/test_jig_with_dongle.htm) is just in SuperBasic and tests mdv functions read/write etc etc, but it's not really much good for fault finding as it will just either pass or fail
.

Code: Select all
1000 MODE 256
1010 set_scr
1015 REMark SYSCOMP V1.1
1020 REMark COMBINED SYS2/COMPATIBILITY
1030 REMark EDITED 19.9.85, C.Selby
1060 sv_respr=RESPR(10000)
1070 PAUSE 10
1080 test1
1085 STOP
1090 DEFine PROCedure test1
1100 display
1110 sound
1120 network
1130 rs_232_c
1140 keyboard
1150 joysticks
1160 clock
1170 mdrive
1190 complete
1200 END DEFine test1
1210 DEFine PROCedure set_scr
1220 WINDOW 512,256,0,0
1230 PAPER 0
1240 INK 7
1250 CLS
1260 WINDOW 400,200,50,20
1270 BORDER 4,255
1280 END DEFine
1290 DEFine PROCedure display
1300 INK 7
1310 CLS
1320 PRINT "Display test:";
1330 FLASH 1:PAPER 7:INK 0:PRINT " FLASHING TEXT ":PAPER 0: INK 7:PRINT " FLASHING TEXT":FLASH 0
1340 PRINT \"Colour test:"\
1350 FOR row=0 TO 7
1360 FOR col=0 TO 7
1370 INK row:STRIP col
1380 PRINT "Test";
1390 END FOR col
1400 PRINT \
1410 END FOR row
1420 STRIP 5:INK 2
1430 PRINT "Display test complete"\"Type OK to continue"
1440 STRIP 0:INK 4
1450 REPeat l:a$=INKEY$:IF a$="o" OR a$="O" THEN EXIT l
1460 PRINT "O";
1470 REPeat l1:a$=INKEY$:IF a$="k" OR a$="K" THEN EXIT l1
1480 PRINT "K"
1490 PAUSE 50
1500 END DEFine display
1510 DEFine PROCedure sound
1520 INK 7
1530 CLS:PRINT "Sound test"\\"Two cycles of Trimphone"
1540 PRINT "followed by low pitch tone"
1550 FOR l=1 TO 2
1560 FOR m=1 TO 2
1570 FOR n=1 TO 6+2*m
1580 BEEP 100,1
1590 a$=INKEY$(1)
1600 END FOR n
1610 a$=INKEY$(20)
1620 END FOR m
1630 a$=INKEY$(50)
1640 END FOR l
1650 BEEP 0,240:PRINT \\
1660 PRINT "Sound test complete"\\
1670 STRIP 5:INK 2
1680 PRINT "If sound OK, type OK to continue"
1690 REPeat l2:a$=INKEY$:IF a$="o" OR a$="O" THEN EXIT l2
1700 STRIP 0:INK 4:PRINT "O";
1710 REPeat l3:a$=INKEY$:IF a$="k" OR a$="K"THEN EXIT l3
1720 PRINT "K"
1730 BEEP
1740 END DEFine sound
1750 DEFine PROCedure network
1760 INK 7
1770 CLS:PRINT "Network test: ";
1780 tmode=PEEK(164000):POKE 164000,24
1790 POKE 98306,24
1800 IF PEEK(98336)MOD 2 THEN INK 2:PRINT "Failed":STOP
1810 POKE 98306,152
1820 IF PEEK(98336)MOD 2<>1 THEN INK 2:PRINT "Failed":STOP
1830 INK 4:PRINT "OK"
1840 POKE 98339,tmode:POKE 164000,tmode
1850 PAUSE 50
1860 END DEFine network
1870 DEFine PROCedure rs_232_c
1880 CLS:INK 7
1890 PRINT "RS-232-C loopback test"
1900 STRIP 0:INK 7
1910 OPEN#3;ser1:OPEN#4;ser2
1920 FOR n=9600,4800,2400,1200,600,300,75
1930 BAUD n
1940 PRINT n;" baud: ";
1950 IF n=9600 THEN
1960 t$="1234567890abcdefghijklmnopqrstuvwxyz"
1970 t$=t$ & t$ & t$
1980 FOR i=1 TO 19
1990 rssub
2000 NEXT i
2010 ELSE
2020 t$="Test"
2030 rssub
2040 END IF
2050 INK 4
2060 PRINT "OK"
2070 INK 7
2080 END FOR n
2090 CLOSE#3:CLOSE#4
2100 PRINT \"RS-232-C test complete"
2110 END DEFine rs_232_c
2120 DEFine PROCedure rssub
2130 PRINT#3;t$:PRINT#4;t$
2140 INPUT#3;a$
2150 INK 2
2160 IF a$<>t$ THEN PRINT "failed":STOP
2170 INPUT#4;b$
2180 IF b$<>t$ THEN PRINT "failed":STOP
2190 END DEFine srsub
2200 DEFine PROCedure keyboard
2210 BORDER 4,255
2220 CLS:CURSOR 0,80
2230 STRIP 0:PRINT "Keyboard test"\\
2240 STRIP 5:INK 0:PRINT "Press the dark blue key":STRIP 0:INK 7
2250 CURSOR 0,0
2260 row1$="F1Es1 2 3 4 5 6 7 8 9 0 - = ` \ "
2270 row2$="F2TaQ W E R T Y U I O P [ ] "
2280 row3$="F3CLA S D F G H J K L ; ' En"
2290 row4$="F4ShZ X C V B N M , . / Sh"
2300 row5$="F5CtLeRiSpUpDoAl"
2310 STRIP 0:INK 7
2320 PRINT row1$\row2$\row3$\row4$\row5$
2330 x=0
2340 FOR n=232,27,49,50,51,52,53,54,55,56,57,48,45,61,96,92
2350 CURSOR x*12,0
2360 STRIP 1:PRINT row1$(x+1 TO x+2);
2370 REPeat loop:IF CODE(INKEY$(-1))=n THEN EXIT loop
2380 CURSOR x*12,0
2390 STRIP 4:PRINT row1$(x+1 TO x+2);
2400 x=x+2
2410 END FOR n
2420 x=0
2430 FOR n=236,9,113,119,101,114,116,121,117,105,111,112,91,93
2440 CURSOR x*12,10
2450 STRIP 1:PRINT row2$(x+1 TO x+2);
2460 REPeat loop2:IF CODE(INKEY$(-1))=n THEN EXIT loop2
2470 CURSOR x*12,10
2480 STRIP 4:PRINT row2$(x+1 TO x+2);
2490 x=x+2
2500 END FOR n
2510 CURSOR 0,20:STRIP 1:PRINT "F3";
2520 REPeat loop3:IF CODE(INKEY$(-1))=240 THEN EXIT loop3
2530 CURSOR 0,20:STRIP 4:PRINT "F3";
2540 STRIP 1:PRINT "CL";
2550 caps=40*16^3+136
2560 REPeat loop4:IF PEEK_W(caps)<>0 THEN POKE_W caps,0:EXIT loop4
2570 CURSOR 24,20:STRIP 4:PRINT "CL";
2580 x=4
2590 FOR n=97,115,100,102,103,104,106,107,108,59,39,10
2600 CURSOR x*12,20
2610 STRIP 1:PRINT row3$(x+1 TO x+2);
2620 REPeat loop5:IF CODE(INKEY$(-1))=n THEN EXIT loop5
2630 CURSOR x*12,20
2640 STRIP 4:PRINT row3$(x+1 TO x+2);
2650 x=x+2
2660 END FOR n
2670 CURSOR 0,30:STRIP 1:PRINT "F4";
2680 REPeat loop6:IF CODE(INKEY$(-1))=244 THEN EXIT loop6
2690 CURSOR 0,30:STRIP 4:PRINT "F4";
2700 STRIP 1:PRINT "Sh";
2710 REPeat loop7:IF KEYROW(7)=1 THEN EXIT loop7
2720 CURSOR 24,30:STRIP 4:PRINT "Sh";
2730 x=4
2740 FOR n=122,120,99,118,98,110,109,44,46,47
2750 CURSOR x*12,30
2760 STRIP 1:PRINT row4$(x+1 TO x+2);
2770 REPeat loop8:IF CODE(INKEY$(-1))=n THEN EXIT loop8
2780 CURSOR x*12,30
2790 STRIP 4:PRINT row4$(x+1 TO x+2);
2800 x=x+2
2810 END FOR n
2820 STRIP 1:PRINT "Sh";
2830 REPeat loop9:IF KEYROW(7)=1 THEN EXIT loop9
2840 STRIP 4:CURSOR 288,30:PRINT "Sh";
2850 STRIP 1:CURSOR 0,40:PRINT "F5";
2860 REPeat loop9:IF CODE(INKEY$(-1))=248 THEN EXIT loop9
2870 STRIP 4:CURSOR 0,40:PRINT "F5";
2880 STRIP 1:PRINT "Ct";
2890 REPeat loop10:IF KEYROW(7)=2 THEN EXIT loop10
2900 CURSOR 24,40:STRIP 4:PRINT "Ct";
2910 x=4
2920 FOR n=192,200,32,208,216
2930 CURSOR x*12,40
2940 STRIP 1:PRINT row5$(x+1 TO x+2);
2950 REPeat loop11:IF CODE(INKEY$(-1))=n THEN EXIT loop11
2960 CURSOR x*12,40
2970 STRIP 4:PRINT row5$(x+1 TO x+2);
2980 x=x+2
2990 END FOR n
3000 STRIP 1:PRINT "Al";
3010 REPeat loop12:IF KEYROW(7)=4 THEN EXIT loop12
3020 STRIP 4:CURSOR 24*7,40:PRINT "Al"
3030 STRIP 0
3040 CURSOR 0,120:INK 4:PRINT "Keyboard test complete"
3050 PAUSE 50
3060 END DEFine keyboard
3070 DEFine PROCedure joysticks
3080 joy$="F1F2F3F4F5LeRiSpUpDo"
3090 CLS:PAPER 0:INK 7
3100 PRINT "Joystick test"
3110 STRIP 5:INK 0:PRINT "Plug in joystick test board"\"and type keys from left to right"
3120 CURSOR 0,60:STRIP 0:INK 7:PRINT joy$
3130 x=0
3140 FOR n=232,236,240,244,248,192,200,32,208,216
3150 CURSOR x*12,60:STRIP 1:PRINT joy$(x+1 TO x+2)
3160 REPeat loop12:IF CODE(INKEY$(-1))=n THEN EXIT loop12
3170 STRIP 4:CURSOR x*12,60:PRINT joy$(x+1 TO x+2)
3180 x=x+2
3190 END FOR n
3200 CURSOR 0,110:STRIP 0:INK 4:PRINT "Joystick test complete"
3210 PAUSE 50
3220 END DEFine joysticks
3230 DEFine PROCedure complete
3240 PAPER 0:INK 4:CLS
3250 CSIZE 1,1:CURSOR 50,60
3260 PRINT "QL test complete"
3270 END DEFine complete
3280 DEFine PROCedure clock
3290 CLS:PAPER 0:INK 7
3300 PRINT "Real-time clock test"\\
3310 PRINT "Reset test: ";
3320 rtc=24*16^3
3330 POKE rtc,0
3340 IF PEEK_L(rtc) THEN fail_rtc:RETurn
3350 INK 4:PRINT "OK":INK 7
3360 PRINT "Step test: ";
3370 INK 2
3380 FOR n=1 TO 4
3390 FOR byte=0 TO 3
3400 POKE rtc+1,255-2^(byte+1)
3410 IF PEEK(rtc+3-byte)<>n THEN fail_rtc:RETurn
3420 END FOR byte
3430 END FOR n
3440 INK 4:PRINT "OK":INK 7
3450 PRINT "Count test: ";
3460 POKE rtc,0
3470 PAUSE 180
3480 IF PEEK_L(rtc)<>3 THEN fail_rtc
3490 INK 4:PRINT "OK"
3500 INK 7
3510 END DEFine clock
3520 DEFine PROCedure fail_rtc
3530 failed=1
3540 INK 2:PRINT "Failed"
3550 INK 7
3560 STOP
3570 RETurn
3580 END DEFine
5000 DEFine PROCedure mdrive
5010 mdvtest
5012 compat
5013 END DEFine mdrive
5014 DEFine PROCedure compat
5020 set_scr
5050 REMark microdrive compatibility
5060 set_scr
5070 CSIZE 2,0
5080 rtc=24*16^3
5090 DIM dt(3,2)
5100 DIM t(2)
5110 DIM s(2)
5120 write
5130 setup
5140 readback
5150 dt(1,1)=t(1):dt(1,2)=t(2)
5160 swap
5170 setup
5180 readback
5190 dt(2,1)=t(1):dt(2,2)=t(2)
5200 swap
5210 setup
5220 readback
5230 dt(3,1)=t(1):dt(3,2)=t(2)
5240 test
5250 END DEFine compat
5260 DEFine PROCedure write
5265 CSIZE 2,1:PRINT "DRIVE COMPATIBILITY TEST":CSIZE 0,0
5270 AT 3,0 :PRINT"Writing onto microdrives..."
5280 FOR d=1 TO 2:SBYTES "mdv"&d&"_dump",0,32*1024
5290 END DEFine
5300 DEFine PROCedure readback
5310 CLS
5320 FOR i=1 TO 2
5330 s(i)=PEEK_L(rtc)+1
5340 IF PEEK_L(rtc)<>s(i) THEN GO TO 5340
5350 LBYTES "mdv"&i&"_dump",131072
5360 set_scr
5370 t(i)=PEEK_L(rtc)-s(i)
5380 CLS
5390 NEXT i
5400 PRINT "Times were ";t(1);" & ";t(2)
5410 END DEFine
5420 DEFine PROCedure swap
5430 AT 3,6:PRINT "Swap cartridges"
5440 AT 4,6:PRINT "then press space bar"
5450 PAUSE
5460 END DEFine
5470 DEFine PROCedure setup
5480 PRINT \"Setting up..."
5490 DIR mdv1_:DIR mdv2_
5500 PAUSE 100
5510 END DEFine
5520 DEFine PROCedure output
5530 CLS
5540 PRINT:PRINT
5550 PRINT " Times were"
5560 PRINT
5570 FOR i=1 TO 3
5580 PRINT " Run ";i;": ";dt(i,1),dt(i,2)
5590 NEXT i
5600 END DEFine
5610 DEFine PROCedure test
5620 REMark
5630 IF dt(1,1)<=8 AND dt(1,2)<=8 AND dt(2,1)<=8 AND dt(2,2)<=8 AND dt(3,1)<=8 AND dt(3,2)<=8 THEN
5640 pass
5650 ELSE
5660 fail
5670 END IF
5680 END DEFine
5690 DEFine PROCedure pass
5700 output
5710 PRINT:PRINT
5720 PRINT" DRIVES PASSED":CSIZE 2,0
5725 PAUSE 100
5730 END DEFine
5740 DEFine PROCedure fail
5750 output
5760 PRINT:PRINT
5770 FLASH 1:PRINT" REJECT UNIT"\" RECORD DETAILS"\" HAND TO FAULT FINDING":FLASH 0:CSIZE 2,0
5780 END DEFine
5790 DEFine PROCedure update
5800 DELETE mdv1_mcomp:SAVE mdv1_mcomp
5810 END DEFine
5820 DEFine PROCedure mdvtest
5830 MODE 256
5840 set_scr
5845 PRINT "PLACE BLANK TAPES IN DRIVES"\"AND PRESS SPACE..."
5847 BEEP 150,2:PAUSE 5:BEEP 150,2:PAUSE
5850 REMark MICRODRIVE TEST
5890 sv_respr=RESPR(10000)
5900 PAUSE 10
5910 scrset 1
5920 spin 1
5930 mdtest 1
5940 PAUSE 40
5950 scrset 2
5960 spin 2
5970 mdtest 2
5980 END DEFine mdvtest
5990 DEFine PROCedure scrset (drive)
6000 WINDOW 512,256,0,0
6010 PAPER 0
6020 INK 7
6030 CLS
6040 WINDOW 400,200,50,20
6050 BORDER 4,255
6060 CSIZE 2,1: PRINT "MICRODRIVE ";drive;" FORMAT TEST"
6070 CSIZE 0,0
6080 END DEFine
6090 DEFine PROCedure mdvr(drive)
6100 REMark (run,write & erase)
6110 POKE 164000,24
6120 POKE 98336,3:POKE 98336,1
6130 IF drive = 2 THEN POKE 98336,2 : POKE 98336,0
6140 POKE 98336,12
6150 END DEFine
6160 DEFine FuNction ftest(drive)
6170 LOCal total,bad,errcode
6180 INK 0:STRIP 5
6190 formt(drive)
6200 INK 7:STRIP 0
6210 IF errcode THEN INK 7:PRINT\"Format failed"
6220 IF total<214 THEN errcode=1:INK 7:PRINT\ "Total sectors too low"
6230 IF total>225 THEN errcode=1:INK 7:PRINT\"Total sectors too high"
6240 IF bad>7 THEN errcode=2:INK 7:PRINT "Too many bad sectors:"
6250 PRINT "Bad/total sectors:"!bad;"/";total
6260 RETurn errcode
6270 END DEFine
6280 DEFine PROCedure formt(drive)
6290 LOCal drive$,n
6300 drive$="mdv"&drive&"_test"
6310 POKE_W sv_respr+8,LEN(drive$)
6320 FOR n=1 TO LEN(drive$):POKE sv_respr+9+n,CODE(drive$(n))
6330 CALL 63488,sv_respr:REMark hex F800
6340 errcode=PEEK_L(sv_respr)
6350 total=PEEK_W(sv_respr+6)
6360 bad=total-PEEK_W(sv_respr+4)
6370 END DEFine
6380 DEFine FuNction ftest1(drive)
6390 IF ftest(drive) THEN RETurn 1
6400 END IF
6410 RETurn 0
6420 END DEFine
6430 DEFine PROCedure mdtest(drive)
6450 IF ftest1(drive) THEN
6460 STRIP 0:INK 7
6470 FLASH 1: PRINT "Failed microdrive test": FLASH 0
6480 BEEP 10000,50
6490 STOP
6500 END IF
6510 INK 7:STRIP 0
6520 PRINT "Microdrive"!drive!"test OK"
6530 BEEP 5000,4
6540 PAUSE 100
6550 END DEFine
6560 DEFine PROCedure save_data_io
6570 OPEN#4;ser1
6580 PRINT#4;CHR$(0);CHR$(255);
6590 CLOSE#4
6600 PAUSE 50
6610 SAVE ser1
6620 END DEFine save_data_io
6630 DEFine PROCedure spin (drive)
6640 POKE 98336,3:POKE 98336,1
6650 IF drive = 2 THEN POKE 98336,2 : POKE 98336,0
6660 PAUSE 350: POKE 98336,2:POKE 98336,0
6670 IF drive = 1 THEN POKE 98336,2 : POKE 98336,0
6680 END DEFine
https://QXL.WIN
Collector of QL related computers, accessories and QL games/software.
Ask me about felt pads - I can cut them to size and they have proven excellent for mdv data recovery.
Collector of QL related computers, accessories and QL games/software.
Ask me about felt pads - I can cut them to size and they have proven excellent for mdv data recovery.
Re: System test software
Hi,
Great thank you, now I just have to figure out how to copy it to vdrive and run it,
Regards
Chris
Great thank you, now I just have to figure out how to copy it to vdrive and run it,
Regards
Chris
- Chr$
- QL Wafer Drive
- Posts: 1382
- Joined: Mon May 27, 2019 10:03 am
- Location: Sachsen, Germany
- Contact:
Re: System test software
Copy that text into a normal text file (not with windows standard notepad!), then copy it into an .mdv file.... oh hang on, just use this .mdv image in vDrive! Then load the SYSCOMP_BAS file.
- Attachments
-
- SYStest.zip
- (6.42 KiB) Downloaded 182 times
https://QXL.WIN
Collector of QL related computers, accessories and QL games/software.
Ask me about felt pads - I can cut them to size and they have proven excellent for mdv data recovery.
Collector of QL related computers, accessories and QL games/software.
Ask me about felt pads - I can cut them to size and they have proven excellent for mdv data recovery.