10
20
30
40
50
60
70
80
90
100
110
120
130
140
150
160
170
180 :
190
200 :
210 ver0$="1.03":
220 ver1$="1.04 (23 Mar 1998)"
230 infile$="<Spec$Dir>.Speculator"
240 outfile$="<Spec$Dir>.Speculator"
250 :
260 SYS "OS_File",5,infile$ TO ,,,,len%
270 DIM ver0% 20,ver1% 20,mem% len%+&200:OSCLI"Load "+infile$+" "+STR$~mem%
280 $ver0%=ver0$:$ver1%=ver1$
290 IF mem%!&266<>!ver0% AND mem%!&266<>!ver1%:PRINT"This program only patches Speculator 1.03":END
300 $(mem%+&266)=ver1$:mem%?(&266+LEN ver1$)=0
310 PROCScrCentre
320 PROCXYTape
330 PROCRdTape
340
350 PROCReset
360 PROCOUT_A
370
380
390 PROCNullOps
400 :
410 OSCLI"Save "+outfile$+" "+STR$~mem%+"+"+STR$~len%
420 OSCLI"SetType "+outfile$+" Module"
430 OSCLI"Stamp "+outfile$
440 END
450 :
460 DEF PROCPoke(A%,B%,C%)
470 IF mem%!A%<>B% AND mem%!A%<>C%:PRINT"Unexpected word found at &";~A%;" (";~mem%!A%;")":END
480 mem%!A%=C%:ENDPROC
490 :
500 :
510
520 DEF PROCScrCentre
530 PROCPoke(&04E4,&8C140000,&8C0E8000):
540 PROCPoke(&04E8,&90340000,&902E8000):
550
560
570 ENDPROC
580 :
590
600 DEFPROCXYTape
610 PROCPoke(&129F8,&EAFFC14C,&E51B0002):
620 PROCPoke(&129FC,&E1000090,&E35000FD):
630 PROCPoke(&12A00,&E1000090,&1AFFC14A):
640 PROCPoke(&12A04,&E1000090,&E1A0F00E):
650 ENDPROC
660 :
670
680 DEF PROCRdTape
690 PROCPoke(&3124,&E28F2048,&E28F201C):
700 PROCPoke(&3148,&6570533C,&63657053):
710 PROCPoke(&314C,&69442463,&65706154):
720 PROCPoke(&3150,&502E3E72,&0000003A):
730 PROCPoke(&31D8,&E24F0084,&E1A0F00E):
740 :
750
760 PROCPoke(&2FB4,&E1800401,&EB000092):
770 PROCPoke(&2FD0,&E50C4054,&EB000090):
780 PROCPoke(&306C,&E50C4054,&EB000069):
790 PROCPoke(&310C,&E3C11A0F,&E1A0600E):
800 PROCPoke(&3110,&E2211C07,&EB000027):
810 PROCPoke(&3114,&E2311001,&E1A0E006):
820 PROCPoke(&3204,&73206874,&E1800401):
830 PROCPoke(&3208,&6E697274,&E55C104C):
840 PROCPoke(&320C,&6F742067,&E2111004):
850 PROCPoke(&3210,&6F727020,&12400002):
860 PROCPoke(&3214,&6D617267,&E1A0F00E):
870 PROCPoke(&3218,&72696420,&E51C004C):
880 PROCPoke(&321C,&6F746365,&E2100004):
890 PROCPoke(&3220,&74207972,&12844001):
900 PROCPoke(&3224,&6C206F6F,&E50C4054):
910 PROCPoke(&3228,&00676E6F,&E1A0F00E):
920 :
930 PROCPoke(&31B4,&20646574,&E3C11A0F):
940 PROCPoke(&31B8,&69727473,&E50C104C):
950 PROCPoke(&31BC,&2020676E,&E3510C07):
960 PROCPoke(&31C0,&20202020,&2A000002):
970 PROCPoke(&31C4,&20202020,&E2211C01):
980 PROCPoke(&31C8,&20202020,&E231101D):
990 PROCPoke(&31CC,&20202020,&E1A0F00E):
1000 PROCPoke(&31D0,&20202020,&E2211C07):
1010 PROCPoke(&31D4,&20202020,&E2311001):
1020 PROCPoke(&31D8,&E24F0084,&E1A0F00E):
1030 ENDPROC
1040 :
1050
1060
1070
1080
1090 :
1100 :
1110
1120 DEF PROCReset
1130
1140 PROCPoke(&0A74,&E1A0B00C,&EB0009D8):
1150 PROCPoke(&3178,&70533A3A,&E24F4DC6):
1160 PROCPoke(&317C,&6C756365,&E1A0F00E):
1170 PROCPoke(&31DC,&E24F1070,&E1A0B00C):
1180 PROCPoke(&31E0,&E3A02064,&E92D4000):
1190 PROCPoke(&31E4,&EF000027,&EBFFFFE3):
1200 PROCPoke(&31E8,&31A0F00E,&E59F1010):
1210 PROCPoke(&31EC,&E28F0000,&E3A00000):
1220 PROCPoke(&31F0,&EF00002B,&E54C0042):
1230 PROCPoke(&31F4,&00800006,&E1A0000C):
1240 PROCPoke(&31F8,&676E654C,&EF020030):
1250 PROCPoke(&31FC,&6F206874,&E8BD8000):
1260 PROCPoke(&3200,&61702066,&00080AC2):
1270 ENDPROC
1280 :
1290 :
1300
1310 DEF PROCOUT_A
1320
1330 PROCPoke(&3180,&726F7461,&E1802403):
1340 PROCPoke(&3184,&212E242E,&E54C3100):
1350 PROCPoke(&3188,&63657053,&E54C40FC):
1360 PROCPoke(&318C,&6D757274,&E1A0000E):
1370 PROCPoke(&3190,&6F72502E,&EBFFFFF8):
1380 PROCPoke(&3194,&6D617267,&E1A0E000):
1390 PROCPoke(&3198,&68002E73,&E59F1010):
1400 PROCPoke(&319C,&63617261,&E1A0000C):
1410 PROCPoke(&31A0,&73726574,&EF000030):
1420 PROCPoke(&31A4,&726F6620,&E55C40FC):
1430 PROCPoke(&31A8,&65687420,&E55C3100):
1440 PROCPoke(&31AC,&61727420,&E1A0F00E):
1450 PROCPoke(&31B0,&616C736E,&00080AC1):
1460 :
1470
1480 PROCPoke(&6738,&11A0F00E,&1AFFF290):
1490 :
1500
1510 FOR A%=0 TO 7
1520 PROCPoke(&C2FC+A%*512,mem%!(&C2FC+A%*512),&1A000005) :
1530
1540 PROCPoke(&C318+A%*512,&E1000090,&E1862405) :
1550 PROCPoke(&C31C+A%*512,&E1000090,&E54C3100) :
1560 PROCPoke(&C320+A%*512,&E1000090,&E1A03000+A%+5+9*(A%>5)):
1570 PROCPoke(&C324+A%*512,&E1000090,&EAFFDB97-128*A%) :
1580 NEXT
1590 ENDPROC
1600 :
1610 :
1620
1630 DEF PROCNullOps
1640 A%=&45 :
1650 PROCPoke(&B2B8+64*A%+0,&E1000090,&E3A000FF):
1660 PROCPoke(&B2B8+64*A%+4,&E1000090,&E54C0041):
1670 PROCPoke(&B2B8+64*A%+8,&E1000090,&EAFFE82A):
1680 :
1690 A%=&46 :
1700 PROCPoke(&B2B8+64*A%+0,&E1000090,&E3A00000):
1710 PROCPoke(&B2B8+64*A%+4,&E1000090,&E50C005C):
1720 PROCPoke(&B2B8+64*A%+8,&E1000090,&E1A0F00E):
1730 :
1740 PROCnull(&B2B8,&63,&63):
1750 PROCnull(&B2B8,&6B,&6B):
1760 :
1770
1780 PROCnull(&B2B8,&00,&3F)
1790 PROCnull(&B2B8,&4C,&4C)
1800 PROCnull(&B2B8,&4E,&4E)
1810 PROCnull(&B2B8,&54,&55)
1820 PROCnull(&B2B8,&5C,&5D)
1830 PROCnull(&B2B8,&64,&66)
1840 PROCnull(&B2B8,&6C,&6E)
1850 PROCnull(&B2B8,&70,&71)
1860 PROCnull(&B2B8,&74,&77)
1870 PROCnull(&B2B8,&7C,&7F)
1880 PROCnull(&B2B8,&80,&9F)
1890 PROCnull(&B2B8,&A4,&A7)
1900 PROCnull(&B2B8,&AC,&AF)
1910 PROCnull(&B2B8,&B4,&B7)
1920 PROCnull(&B2B8,&BC,&BF)
1930 PROCnull(&B2B8,&C0,&FF)
1940 :
1950
1960 PROCnull(&F2B8,&00,&08)
1970 PROCnull(&F2B8,&0A,&18)
1980 PROCnull(&F2B8,&1A,&20)
1990 PROCnull(&F2B8,&27,&28)
2000 PROCnull(&F2B8,&2F,&33)
2010 PROCnull(&F2B8,&37,&38)
2020 PROCnull(&F2B8,&3A,&3F)
2030 FOR B%=0 TO 3
2040 PROCnull(&F2B8,&40+8*B%,&43+8*B%)
2050 PROCnull(&F2B8,&47+8*B%,&47+8*B%)
2060
2070
2080 NEXT
2090 PROCnull(&F2B8,&78,&7B)
2100 PROCnull(&F2B8,&7F,&7F)
2110 FOR B%=0 TO 7
2120 PROCnull(&F2B8,&80+8*B%,&83+8*B%)
2130 PROCnull(&F2B8,&87+8*B%,&87+8*B%)
2140
2150
2160 NEXT
2170 PROCnull(&F2B8,&C0,&CA)
2180 PROCnull(&F2B8,&CC,&DC)
2190 PROCnull(&F2B8,&DE,&E0)
2200 PROCnull(&F2B8,&E2,&E2)
2210 PROCnull(&F2B8,&E4,&E4)
2220 PROCnull(&F2B8,&E6,&E8)
2230 PROCnull(&F2B8,&EA,&F8)
2240 PROCnull(&F2B8,&FA,&FC)
2250 PROCnull(&F2B8,&FE,&FF)
2260 :
2270
2280 PROCnull(&F2B8,&24,&24):
2290 PROCnull(&F2B8,&2D,&2D):
2300 PROCnull(&F2B8,&76,&76):
2310 PROCnull(&F2B8,&84,&85):
2320 PROCnull(&F2B8,&8C,&8D):
2330 PROCnull(&F2B8,&94,&95):
2340 PROCnull(&F2B8,&9C,&9D):
2350 PROCnull(&F2B8,&A4,&A5):
2360 PROCnull(&F2B8,&B4,&B5):
2370 PROCnull(&F2B8,&BC,&BD):
2380 :
2390 ENDPROC
2400 :
2410 DEF PROCnull(B%,S%,E%):FOR A%=S% TO E%:PROCPoke(B%+64*A%,&E1000090,&E1A0F00E):NEXT
2420 ENDPROC
2430 :
2440 :
2450 :
2460 :
2470 DEF PROCSwiVector
2480
2490
2500 PROCPoke(&0A10,&E5810008,&F5810008)
2510 PROCPoke(&0AB0,&E5810008,&F5810008)
2520 PROCPoke(&0D50,&E5810008,&F5810008)
2530
2540 PROCPoke(&0918,&EF0C0000,&FF0C0000)
2550 PROCPoke(&3040,&EF0C0000,&FF0C0000)
2560
2570
2580 PROCPoke(&0BDC,&E5810000,&F5810000)
2590
2600 ENDPROC
2610 :
2620 :
2630
2640 PROCPoke(&30D8,&6AFFF63C,&EA000034):
2650 PROCPoke(&31B0,&616C736E,&6AFFF606):
2660 PROCPoke(&31B4,&20646574,&E24C00EC):
2670 PROCPoke(&31B8,&69727473,&EF000116):
2680 PROCPoke(&31BC,&2020676E,&EF000100):
2690 PROCPoke(&31C0,&20202020,&EF000002):
2700 PROCPoke(&31C4,&20202020,&EF000107):
2710 PROCPoke(&31C8,&20202020,&EAFFFFC3):
2720 ENDPROC