
Here you can find the source code and design documents for the ZX Spectrum game Triblox, as well as a virtual +3 disk that allows you to load and assemble the game yourself.
Source Code
First, the source code comes in three blocks as there was too much code for the Spectrum to load it all at once. The first is CODE.TEX which contains *F instructions which tell the assembler to include OVER.TEX and SOUND.TEX.
CODE.TEX
10 WKSPA EQU 59904 20 WKSPB EQU 62720 30 BLOGRA EQU 59000 40 CSET EQU 58000 50 LEVNUM EQU 57232 60 TRIBLO EQU 55744 70 SCOCOL EQU 56528 80 TITCOL EQU 56880 90 OVEBIN EQU 55168 100 ORG 25000 110 ENTRY DI 120 JP MENULO 130 STGAME 140 LD IY,VARS 150 CALL CLEAAC 160 RES 3,(IY+16) 170 LD (IY+36),0 180 LD B,8 190 SET 2,(IY+16) 200 SETLOO 210 PUSH BC 220 CALL PICCYC 230 POP BC 240 DJNZ SETLOO 250 RES 2,(IY+16) 260 RES 1,(IY+16) 270 LD (IY+19),1 280 XOR A 290 LD (IY+27),1 300 LD (IY+36),A 310 LD (IY+10),A 320 LD BC,0 330 LD (SCORE),BC 340 LD (BLOCNO),BC 350 LD (LINES),BC 360 LD (LINLEV),BC 370 LD (BLOREL),BC 380 LD (SCOREL),BC 390 LD (SQUREL),BC 400 LD (SQUBCD),BC 410 LD (IY+22),0 420 LD (HORBCD),BC 430 LD (VERBCD),BC 440 LD (DIABCD),BC 450 LD (IY+37),1 460 CALL PRILEV 470 CALL ACTOBD 480 CALL PICBLO 490 JR STARTB 500 VARS 510 XPOS DEFB 3 520 YPOS DEFB 0 530 BLOCKS DEFB 2 540 BLOCK1 DEFB 3 550 BLOCK2 DEFB 6 560 ORIENT DEFB 4 570 SEED DEFB 53 580 OFFSET DEFB 2 590 XPOS2 DEFB 8 600 YPOS2 DEFB 0 610 FLAGS DEFB 0 620 CORD DEFW 0 630 AORB DEFW 0 640 TSTORE DEFB 0 650 FLAGS2 DEFB 0 660 FLAGS3 DEFB 0 670 FLAGS4 DEFB 0 680 SPEED DEFB 1 690 SCORE DEFS 3 700 COLSTO DEFW 0 710 BLOCNO DEFW 0 720 LEVEL DEFB 0 730 LINES DEFW 0 740 LINLEV DEFW 0 750 BLOREL DEFW 0 760 SCOREL DEFW 0 770 LEVREL DEFB 0 780 FALPOI DEFB 0 790 SQUBCD DEFW 0 800 SQUREL DEFW 0 810 NEXBLO DEFS 16 820 HORBCD DEFW 0 830 VERBCD DEFW 0 840 DIABCD DEFW 0 850 NEWCHA DEFB 1 860 MESSTO DEFW 0 870 COUNEX DEFB 0 880 TEMP DEFS 10 ;TO PREVENT BUGS 890 STARTB 900 CALL ADDROW 910 CALL SQUASH 920 CALL INCLEV 930 CALL LANDED 940 CALL DEBOUN 950 CALL ACTOBD 960 CALL GRAVIT 970 CALL SQUASH 980 CALL DRASPR 990 CALL ALLOBL 1000 CALL BDTOSC 1010 BIT 3,(IY+18) 1020 CALL NZ,SQUSOU 1030 BIT 2,(IY+18) 1040 CALL NZ,REMSOU 1050 RES 2,(IY+18) 1060 BIT 4,(IY+18) 1070 CALL NZ,CRUSOU 1080 CALL DELAY 1090 CALL QUIT 1100 MAINLO 1110 CALL PAUSE 1120 CALL ADDROW 1130 RES 3,(IY+16) 1140 RES 1,(IY+16) 1150 CALL SQUASH 1160 CALL INCLEV 1170 CALL CHEAT 1180 CALL LANDED 1190 CALL DEBOUN 1200 CALL ACTOBD 1210 CALL FALL 1220 CALL LEFT 1230 CALL RIGHT 1240 MOVED 1250 CALL TURN 1260 CALL DROP 1270 CALL GRAVIT 1280 CALL SQUASH 1290 LD A,(IY+1) 1300 AND %00001111 1310 JR NZ,ALLNO1 1320 CALL DRASPR 1330 CALL ALLOBL 1340 JR BDDO 1350 ALLNO1 CALL ALLOBL 1360 CALL DRASPR 1370 BDDO CALL BDTOSC 1380 BIT 3,(IY+18) 1390 CALL NZ,SQUSOU 1400 BIT 2,(IY+18) 1410 CALL NZ,REMSOU 1420 RES 2,(IY+18) 1430 BIT 4,(IY+18) 1440 CALL NZ,CRUSOU 1450 CALL DELAY 1460 CALL QUIT 1470 JR MAINLO 1480 CLEAAC 1490 LD HL,CSTART 1500 LD B,22 1510 CLELO1 PUSH BC 1520 LD BC,15 1530 LD D,H 1540 LD E,L 1550 LD (HL),0 1560 INC DE 1570 LDIR 1580 LD DE,4 1590 ADD HL,DE 1600 POP BC 1610 DJNZ CLELO1 1620 CLEARA LD HL,WKSPA 1630 LD (HL),0 1640 LD DE,WKSPA+1 1650 LD BC,2815 1660 LDIR 1670 RET 1680 ANYR MAC 1690 DEFS 16 1700 DEFB 255,255,255 1710 ENDM 1720 FILL MAC 1730 DEFB 255,255,255,255,255,255,255,255,255,255 1740 DEFB 255,255,255,255,255,255,255,255,255 1750 ENDM 1760 WKSPC DEFB 255,255,255,255 1770 FILL 1780 FILL 1790 FILL 1800 FILL 1810 CSTART ANYR 1820 ANYR 1830 ANYR 1840 ANYR 1850 ANYR 1860 ANYR 1870 ANYR 1880 ANYR 1890 ANYR 1900 ANYR 1910 ANYR 1920 ANYR 1930 ANYR 1940 ANYR 1950 ANYR 1960 ANYR 1970 ANYR 1980 ANYR 1990 ANYR 2000 ANYR 2010 ANYR 2020 ANYR 2030 FILL 2040 FILL 2050 FILL 2060 DEFB 255,255,255 2070 WKSPD DEFB 255,255,255,255 2080 FILL 2090 FILL 2100 FILL 2110 FILL 2120 DSTART DEFS 22*19 2130 FILL 2140 FILL 2150 FILL 2160 DEFB 255,255,255 2170 NEXTAB 2180 DEFW 16538,16634,18522,18618,20506,20602,20698 2190 PICBLO 2200 LD IX,CSTART 2210 XOR A 2220 CP (IX+6) 2230 CALL NZ,DEATH 2240 LD IX,CSTART 2250 XOR A 2260 CP (IX+8) 2270 CALL NZ,DEATH 2280 PICBL8 2290 LD (IY),6 2300 LD (IY+1),0 2310 LD (IY+2),2 2320 LD (IY+5),4 2330 LD (IY+8),8 2340 LD (IY+9),0 2350 LD A,(IY+42) 2360 LD (IY+3),A 2370 LD A,(IY+43) 2380 LD (IY+4),A 2390 PICCYC LD HL,NEXBLO+2 2400 LD DE,NEXBLO 2410 LD BC,14 2420 LDIR 2430 LD A,(IY+36) 2440 CP 11 2450 JR Z,PICBLX 2460 CALL RANDOM 2470 CP 21 2480 JR NC,PICBLX 2490 LD A,(IY+36) 2500 CP 7 2510 JR C,PICBLX 2520 BIT 3,(IY+16) 2530 JR NZ,PICBLX 2540 LD (IY+56),3 2550 JR PICBL2 2560 PICBLX 2570 CALL RANDOM 2580 CP 23 2590 JR NC,PICBL1 2600 LD A,(IY+36) 2610 CP 6 2620 JR C,PICBL1 2630 LD (IY+56),5 2640 JR PICBL2 2650 PICBL1 2660 BIT 3,(IY+16) 2670 JR NZ,PICB13 2680 CALL RANDOM 2690 CP 26 2700 JR NC,PICB12 2710 LD A,(IY+36) 2720 CP 4 2730 JR C,PICB12 2740 LD (IY+56),6 2750 JR PICBL2 2760 PICB12 2770 LD A,(IY+36) 2780 CP 11 2790 JR Z,PICB13 2800 CALL RANDOM 2810 CP 28 2820 JR NC,PICB13 2830 LD A,(IY+36) 2840 CP 3 2850 JR C,PICB13 2860 LD (IY+56),2 2870 JR PICBL2 2880 PICB13 2890 CALL RANDOM 2900 AND 7 2910 CP 0 2920 JR NZ,PICB15 2930 LD A,(IY+36) 2940 CP 2 2950 JR C,PICBL1 2960 LD (IY+56),7 2970 JR PICBL2 2980 PICB15 2990 SET 6,A 3000 PICIT LD (IY+56),A 3010 PICBL2 3020 LD A,(IY+36) 3030 CP 11 3040 JR Z,PICB29 3050 CALL RANDOM 3060 CP 21 3070 JR NC,PICB29 3080 LD A,(IY+36) 3090 CP 7 3100 JR C,PICB29 3110 BIT 3,(IY+16) 3120 JR NZ,PICB29 3130 LD (IY+57),3 3140 JR PICBL3 3150 PICB29 3160 CALL RANDOM 3170 CP 23 3180 JR NC,PICB21 3190 LD A,(IY+36) 3200 CP 6 3210 JR C,PICB21 3220 LD (IY+57),5 3230 JR PICBL3 3240 PICB21 3250 BIT 3,(IY+16) 3260 JR NZ,PICB23 3270 CALL RANDOM 3280 CP 26 3290 JR NC,PICB22 3300 LD A,(IY+36) 3310 CP 4 3320 JR C,PICB22 3330 LD (IY+57),6 3340 JR PICBL3 3350 PICB22 3360 LD A,(IY+36) 3370 CP 11 3380 JR Z,PICB23 3390 CALL RANDOM 3400 CP 28 3410 JR NC,PICB23 3420 LD A,(IY+36) 3430 CP 3 3440 JR C,PICB23 3450 LD (IY+57),2 3460 JR PICBL3 3470 PICB23 3480 CALL RANDOM 3490 AND 7 3500 CP 0 3510 JR NZ,PICB25 3520 LD A,(IY+36) 3530 CP 2 3540 JR C,PICBL2 3550 LD (IY+57),7 3560 JR PICBL3 3570 PICB25 3580 SET 6,A 3590 PICIT2 LD (IY+57),A 3600 PICBL3 3610 LD B,7 3620 LD HL,NEXTAB 3630 LD DE,NEXBLO 3640 LD IX,22528+128+8+16+2+2 3650 SCRLOO 3660 PUSH HL 3670 PUSH DE 3680 LD E,(HL) 3690 INC HL 3700 LD D,(HL) 3710 EX DE,HL 3720 INC HL 3730 INC HL 3740 POP DE 3750 LD A,(DE) 3760 CALL DRASCR 3770 INC DE 3780 INC HL 3790 INC HL 3800 INC IX 3810 INC IX 3820 LD A,(DE) 3830 CALL DRASCR 3840 PUSH BC 3850 LD BC,94 3860 ADD IX,BC 3870 INC DE 3880 POP BC 3890 POP HL 3900 INC HL 3910 INC HL 3920 DJNZ SCRLOO 3930 BIT 2,(IY+16) 3940 RET NZ 3950 CALL INCBLO 3960 CALL UPDSCO 3970 RET 3980 RANDOM LD A,(IY+6) 3990 RLC A 4000 RLC A 4010 RLC A 4020 RLC A 4030 LD B,A 4040 LD A,R 4050 ADD A,B 4060 RRC A 4070 ADD A,19 4080 LD (IY+6),A 4090 RET 4100 ACTOBD 4110 LD HL,WKSPA 4120 LD DE,WKSPB 4130 LD BC,2816 4140 LDIR 4150 CTOD LD HL,CSTART 4160 LD DE,DSTART 4170 LD BC,19*22 4180 LDIR 4190 INC (IY+6) 4200 RET 4210 FALTAB DEFB 2,1,0,0,0,0,0,0 4220 DEFB 2,2,0,0,0,0,0,0 4230 DEFB 2,2,0,0,0,0,0,0 4240 DEFB 8,2,2,3,2,2,2,3 4250 DEFB 8,2,2,3,2,2,2,3 4260 DEFB 4,3,3,2,0,0,0,0 4270 DEFB 4,3,3,2,0,0,0,0 4280 DEFB 6,3,3,3,3,4,0,0 4290 DEFB 2,4,0,0,0,0,0,0 4300 DEFB 4,5,5,6,0,0,0,0 4310 DEFB 2,8,0,0,0,0,0,0 4320 DEFB 2,8,0,0,0,0,0,0 4330 FALL 4340 LD L,(IY+36) 4350 LD H,0 4360 ADD HL,HL 4370 ADD HL,HL 4380 ADD HL,HL 4390 LD DE,FALTAB 4400 ADD HL,DE 4410 LD C,(IY+37) 4420 DEC (IY+37) 4430 LD B,0 4440 ADD HL,BC 4450 DEC HL 4460 DEC C 4470 JR NZ,FALL2 4480 LD A,(HL) 4490 LD (IY+37),A 4500 JR FALL 4510 FALL2 LD B,(HL) 4520 LD A,(IY+1) 4530 ADD A,B 4540 LD (IY+1),A 4550 LD A,(IY+9) 4560 ADD A,B 4570 LD (IY+9),A 4580 RET 4590 DEATH6 4600 BIT 6,(IY+10) 4610 JR Z,DEAD 4620 DEATH 4630 CALL ADDROW 4640 CALL DEBOUN 4650 DEATH7 CALL ACTOBD 4660 CALL GRAVIT 4670 CALL ALLOBL 4680 CALL BDTOSC 4690 LD HL,CSTART+6 4700 LD DE,2 4710 LD B,2 4720 XOR A 4730 DEATH9 4740 CP (HL) 4750 JR NZ,DEATH6 4760 ADD HL,DE 4770 DJNZ DEATH9 4780 RET 4790 DEAD POP AF 4800 POP AF 4810 CALL ACTOBD 4820 CALL BDTOSC 4830 RET 4840 DEATH4 4850 LD IX,CSTART 4860 XOR A 4870 CP (IX+6) 4880 JR NZ,DEATH6 4890 CP (IX+8) 4900 JR NZ,DEATH6 4910 RET 4920 BDTOSC 4930 BTOSC LD HL,WKSPB 4940 LD DE,16384+32+8 4950 LD B,176 4960 BTOSCL PUSH BC 4970 LD BC,16 4980 PUSH DE 4990 LDIR 5000 POP DE 5010 CALL STEPSC 5020 POP BC 5030 DJNZ BTOSCL 5040 DTOSC LD HL,DSTART 5050 LD DE,22528+32+8 5060 LD BC,22 5070 DTOSCL PUSH BC 5080 LD C,16 5090 LDIR 5100 LD C,3 5110 ADD HL,BC 5120 LD C,16 5130 EX DE,HL 5140 ADD HL,BC 5150 EX DE,HL 5160 POP BC 5170 DEC C 5180 JR NZ,DTOSCL 5190 RET 5200 STEPSC INC D 5210 LD A,D 5220 AND 7 5230 RET NZ 5240 LD A,E 5250 ADD A,32 5260 LD E,A 5270 RET C 5280 LD A,D 5290 SUB 8 5300 LD D,A 5310 RET 5320 DRASPR 5330 LD BC,WKSPB 5340 LD DE,DSTART 5350 LD (AORB),BC 5360 LD (CORD),DE 5370 DRABLO 5380 BIT 7,(IY+3) 5390 JP NZ,DRASEC 5400 LD DE,BLOGRA 5410 LD H,(IY+3) 5420 LD A,H 5430 CP 7 5440 JR NZ,DRAB1 5450 LD H,0 5460 DRAB1 5470 CP 5 5480 JR NZ,DRAB2 5490 LD H,0 5500 DRAB2 5510 CP 6 5520 JR NZ,DRAB3 5530 LD H,8 5540 DRAB3 5550 CP 2 5560 JR NZ,DRAB4 5570 LD H,9 5580 DRAB4 5590 CP 3 5600 JR NZ,DRAB5 5610 LD H,10 5620 DRAB5 5630 RES 6,H 5640 LD L,0 5650 SRL H 5660 RR L 5670 SRL H 5680 RR L 5690 SRL H 5700 RR L 5710 ADD HL,DE 5720 EX DE,HL 5730 LD L,(IY+1) ;NOW FIND POS IN WKSP B 5740 LD H,0 5750 SLA L 5760 RL H 5770 SLA L 5780 RL H 5790 SLA L 5800 RL H 5810 SLA L 5820 RL H 5830 LD BC,(AORB) 5840 ADD HL,BC 5850 LD B,0 5860 LD C,(IY) 5870 ADD HL,BC 5880 ;DE HOLDS POS IN GRAPH 5890 ;HL HOLDS POS IN WKSP B 5900 LD B,16 5910 DRALO1 LD A,(DE) 5920 LD (HL),A 5930 INC DE 5940 INC HL 5950 LD A,(DE) 5960 LD (HL),A 5970 INC DE 5980 PUSH BC 5990 LD BC,15 6000 ADD HL,BC 6010 POP BC 6020 DJNZ DRALO1 6030 ;NOW ADD COLOUR 6040 LD H,0 6050 LD A,(IY+1) 6060 PUSH AF 6070 AND %11111000 6080 LD L,A 6090 LD C,A 6100 SRL C 6110 SRL C 6120 SRL C 6130 SLA L 6140 RL H 6150 LD B,0 6160 ADD HL,BC 6170 ADD HL,BC 6180 ADD HL,BC 6190 LD D,0 6200 LD E,(IY) 6210 ADD HL,DE 6220 LD DE,(CORD) 6230 ADD HL,DE 6240 PUSH HL 6250 POP IX 6260 LD A,(IY+3) 6270 LD (IX),A 6280 LD (IX+1),A 6290 LD (IX+19),A 6300 LD (IX+20),A 6310 POP AF 6320 AND %00000111 6330 JR Z,DRASEC 6340 LD A,(IY+3) 6350 LD (IX+38),A 6360 LD (IX+39),A 6370 DRASEC 6380 BIT 7,(IY+4) 6390 RET NZ 6400 LD DE,BLOGRA 6410 LD H,(IY+4) 6420 LD A,H 6430 CP 7 6440 JR NZ,DRAS2 6450 LD H,0 6460 DRAS2 6470 CP 5 6480 JR NZ,DRAS3 6490 LD H,0 6500 DRAS3 6510 CP 6 6520 JR NZ,DRAS4 6530 LD H,8 6540 DRAS4 6550 CP 2 6560 JR NZ,DRAS5 6570 LD H,9 6580 DRAS5 6590 CP 3 6600 JR NZ,DRAS6 6610 LD H,10 6620 DRAS6 6630 RES 6,H 6640 LD L,0 6650 SRL H 6660 RR L 6670 SRL H 6680 RR L 6690 SRL H 6700 RR L 6710 ADD HL,DE 6720 EX DE,HL 6730 LD L,(IY+9) ;NOW FIND POS IN WKSP B 6740 LD H,0 6750 SLA L 6760 RL H 6770 SLA L 6780 RL H 6790 SLA L 6800 RL H 6810 SLA L 6820 RL H 6830 LD BC,(AORB) 6840 ADD HL,BC 6850 LD B,0 6860 LD C,(IY+8) 6870 ADD HL,BC 6880 ;DE HOLDS POS IN GRAPH 6890 ;HL HOLDS POS IN WKSP B 6900 LD B,16 6910 DRALO2 LD A,(DE) 6920 LD (HL),A 6930 INC DE 6940 INC HL 6950 LD A,(DE) 6960 LD (HL),A 6970 INC DE 6980 PUSH BC 6990 LD BC,15 7000 ADD HL,BC 7010 POP BC 7020 DJNZ DRALO2 7030 ;NOW ADD COLOUR 7040 ADDCO3 LD H,0 7050 LD A,(IY+9) 7060 PUSH AF 7070 AND %11111000 7080 LD L,A 7090 LD C,A 7100 SRL C 7110 SRL C 7120 SRL C 7130 SLA L 7140 RL H 7150 LD B,0 7160 ADD HL,BC 7170 ADD HL,BC 7180 ADD HL,BC 7190 LD D,0 7200 LD E,(IY+8) 7210 ADD HL,DE 7220 LD DE,(CORD) 7230 ADD HL,DE 7240 PUSH HL 7250 POP IX 7260 LD A,(IY+5) 7270 CP 3 7280 JR NZ,ADDALL 7290 LD A,(IY+9) 7300 AND %00000111 7310 CP 5 7320 JR NC,ADDMID 7330 ADDALL LD A,(IY+4) 7340 LD (IX),A 7350 LD (IX+1),A 7360 ADDMID LD A,(IY+4) 7370 LD (IX+19),A 7380 LD (IX+20),A 7390 POP AF 7400 AND %00000111 7410 RET Z 7420 LD A,(IY+5) 7430 CP 1 7440 JR NZ,ADDBOT 7450 LD A,(IY+9) 7460 AND %00000111 7470 CP 5 7480 RET C 7490 ADDBOT LD A,(IY+4) 7500 LD (IX+38),A 7510 LD (IX+39),A 7520 RET 7530 GETCP1 7540 LD A,(IY+1) 7550 LD E,(IY) 7560 GETANY LD H,0 7570 AND %11111000 7580 LD L,A 7590 LD C,A 7600 SRL C 7610 SRL C 7620 SRL C 7630 SLA L 7640 RL H 7650 LD B,0 7660 ADD HL,BC 7670 ADD HL,BC 7680 ADD HL,BC 7690 LD D,0 7700 ADD HL,DE 7710 LD DE,CSTART 7720 ADD HL,DE 7730 PUSH HL 7740 POP IX 7750 RET 7760 GETCP2 LD A,(IY+9) 7770 LD E,(IY+8) 7780 JR GETANY 7790 LEFT 7800 BIT 1,(IY+10) 7810 RET NZ 7820 BIT 0,(IY+10) 7830 JR Z,LEFT2 7840 RES 0,(IY+10) 7850 DEC (IY) 7860 DEC (IY+8) 7870 POP AF 7880 JP MOVED 7890 LEFT2 7900 LEFLO1 LD BC,49150 7910 IN A,(C) 7920 LEFBI1 BIT 3,A 7930 RET NZ 7940 POP AF 7950 LD BC,MOVED 7960 PUSH BC 7970 CALL GETCP1 7980 XOR A 7990 CP (IX-2) 8000 RET NZ 8010 CP (IX+38-2) 8020 RET NZ 8030 CP (IX+38) 8040 RET NZ 8050 LD A,(IY+1) 8060 AND %00001111 8070 CP 15 8080 JR NZ,LEFT4 8090 XOR A 8100 CP (IX+74) 8110 RET NZ 8120 CP (IX+76) 8130 RET NZ 8140 LEFT4 8150 BIT 1,(IY+10) 8160 RET NZ 8170 BIT 7,(IY+4) 8180 JR NZ,LEFT5 8190 CALL GETCP2 8200 XOR A 8210 CP (IX-2) 8220 RET NZ 8230 CP (IX+36) 8240 RET NZ 8250 CP (IX+38) 8260 RET NZ 8270 LD A,(IY+1) 8280 AND %00001111 8290 CP 15 8300 JR NZ,LEFT5 8310 XOR A 8320 CP (IX+74) 8330 RET NZ 8340 CP (IX+76) 8350 RET NZ 8360 LEFT5 SET 0,(IY+10) 8370 DEC (IY) 8380 DEC (IY+8) 8390 RET 8400 RIGHT 8410 BIT 1,(IY+10) 8420 JR Z,RIGH2 8430 RES 1,(IY+10) 8440 INC (IY) 8450 INC (IY+8) 8460 RET 8470 RIGH2 8480 RIGLO1 LD BC,49150 8490 IN A,(C) 8500 RIGBI1 BIT 2,A 8510 RET NZ 8520 INC (IY+6) 8530 CALL GETCP1 8540 XOR A 8550 CP (IX+2) 8560 RET NZ 8570 CP (IX+40) 8580 RET NZ 8590 CP (IX+38) 8600 RET NZ 8610 LD A,(IY+1) 8620 AND %00001111 8630 CP 15 8640 JR C,RIGH4 8650 XOR A 8660 CP (IX+78) 8670 RET NZ 8680 CP (IX+76) 8690 RET NZ 8700 RIGH4 8710 BIT 0,(IY+10) 8720 RET NZ 8730 BIT 7,(IY+4) 8740 JR NZ,RIGH5 8750 CALL GETCP2 8760 XOR A 8770 CP (IX+2) 8780 RET NZ 8790 CP (IX+40) 8800 RET NZ 8810 CP (IX+38) 8820 RET NZ 8830 LD A,(IY+1) 8840 AND %00001111 8850 CP 15 8860 JR C,RIGH5 8870 XOR A 8880 CP (IX+78) 8890 RET NZ 8900 CP (IX+76) 8910 RET NZ 8920 RIGH5 SET 1,(IY+10) 8930 INC (IY) 8940 INC (IY+8) 8950 RET 8960 LANDED 8970 BIT 7,(IY+4) 8980 JR NZ,LAND4 8990 CALL GETCP2 9000 XOR A 9010 CP (IX+38) 9020 JR Z,LAND4 9030 LD A,(IY+4) 9040 CP 2 9050 CALL Z,ZAP2 ;DO NOT INSERT STUFF 9060 CALL DRA2AC ;BETWEEN THESE 2 LINES 9070 LD (IY+4),255 9080 DEC (IY+2) 9090 LAND4 CALL GETCP1 9100 XOR A 9110 CP (IX+38) 9120 RET Z 9130 LD A,(IY+3) 9140 CP 2 9150 CALL Z,ZAP1 ;DO NOT INSERT STUFF 9160 CALL DRA1AC ;BETWEEN THESE TWO LINES 9170 DEC (IY+2) 9180 JR NZ,LAND5 9190 SET 7,(IY+3) 9200 POP AF 9210 CALL PICBLO 9220 JP STARTB 9230 LAND5 9240 LD A,(IY+8) 9250 LD (IY),A 9260 LD A,(IY+9) 9270 LD (IY+1),A 9280 LD A,(IY+4) 9290 LD (IY+3),A 9300 LD (IY+4),255 9310 JP LAND4 9320 DRA1AC 9330 LD A,(IY+4) 9340 LD (IY+15),A 9350 LD (IY+4),255 9360 LD BC,WKSPA 9370 LD DE,CSTART 9380 LD (AORB),BC 9390 LD (CORD),DE 9400 CALL DRABLO 9410 LD A,(IY+15) 9420 LD (IY+4),A 9430 RET 9440 DRA2AC 9450 LD A,(IY+3) 9460 LD (IY+15),A 9470 LD (IY+3),255 9480 LD BC,WKSPA 9490 LD DE,CSTART 9500 LD (AORB),BC 9510 LD (CORD),DE 9520 CALL DRABLO 9530 LD A,(IY+15) 9540 LD (IY+3),A 9550 RET 9560 DROP 9570 BIT 0,(IY+10) 9580 RET NZ 9590 BIT 1,(IY+10) 9600 RET NZ 9610 SPALO1 LD BC,49150 9620 IN A,(C) 9630 SPABI1 BIT 0,A 9640 RET NZ 9650 CALL GETCP1 9660 XOR A 9670 CP (IX+38) 9680 RET NZ 9690 BIT 7,(IY+4) 9700 JR NZ,DROP2 9710 CALL GETCP2 9720 XOR A 9730 CP (IX+38) 9740 RET NZ 9750 DROP2 LD A,(IY+9) 9760 ADD A,16 9770 AND %11110000 9780 LD (IY+9),A 9790 LD A,(IY+1) 9800 ADD A,16 9810 AND %11110000 9820 LD (IY+1),A 9830 LD (IY+37),1 9840 RET 9850 PAUSE 9860 BIT 4,(IY+10) 9870 RET NZ 9880 PAULO1 LD BC,57342 9890 IN A,(C) 9900 PAUBI1 BIT 0,A 9910 RET NZ 9920 SET 4,(IY+10) 9930 CALL CLS 9940 PAUSE2 9950 PUSH BC 9960 CALL RANBLO 9970 LD B,60 9980 PLOOP1 9990 DEC B 10000 JR NZ,PLOOP1 10010 POP BC 10020 IN A,(C) 10030 PAUBI2 BIT 0,A 10040 JR Z,PAUSE2 10050 PAUSE3 10060 PUSH BC 10070 CALL RANBLO 10080 LD B,60 10090 PLOOP2 10100 DEC B 10110 JR NZ,PLOOP2 10120 POP BC 10130 IN A,(C) 10140 PAUBI3 BIT 0,A 10150 JR NZ,PAUSE3 10160 CALL CLSCOL 10170 RET 10180 TURN 10190 BIT 7,(IY+10) 10200 RET NZ 10210 BIT 7,(IY+4) 10220 RET NZ 10230 BIT 0,(IY+10) 10240 RET NZ 10250 BIT 1,(IY+10) 10260 RET NZ 10270 TURLO1 LD BC,32766 10280 IN A,(C) 10290 TURBI1 BIT 0,A 10300 RET NZ 10310 LD A,(IY+5) 10320 CP 4 10330 JR Z,T4TO3 10340 CP 3 10350 JR Z,T3TO2 10360 CP 2 10370 JP Z,T2TO1 10380 CALL GETCP2 10390 XOR A 10400 CP (IX+2) 10410 RET NZ 10420 LD A,(IY+9) 10430 AND %00001111 10440 JR Z,T1TO42 10450 XOR A 10460 CP (IX+40) 10470 RET NZ 10480 T1TO42 10490 LD (IY+5),4 10500 INC (IY+8) 10510 INC (IY+8) 10520 LD A,(IY+1) 10530 SUB 16 10540 LD (IY+1),A 10550 SET 7,(IY+10) 10560 RET 10570 T4TO3 10580 CALL GETCP2 10590 XOR A 10600 CP (IX+38) 10610 RET NZ 10620 LD A,(IY+9) 10630 AND %00001111 10640 JR Z,T4TO32 10650 XOR A 10660 CP (IX+76) 10670 RET NZ 10680 T4TO32 10690 DEC (IY+5) 10700 INC (IY) 10710 INC (IY) 10720 LD A,(IY+9) 10730 ADD A,16 10740 LD (IY+9),A 10750 SET 7,(IY+10) 10760 RET 10770 T3TO2 10780 CALL GETCP2 10790 XOR A 10800 CP (IX-2) 10810 RET NZ 10820 LD A,(IY+9) 10830 AND 15 10840 JR Z,T3TO22 10850 XOR A 10860 CP (IX+36) 10870 RET NZ 10880 T3TO22 10890 DEC (IY+5) 10900 DEC (IY+8) 10910 DEC (IY+8) 10920 LD A,(IY+1) 10930 ADD A,16 10940 LD (IY+1),A 10950 SET 7,(IY+10) 10960 RET 10970 T2TO1 10980 CALL GETCP2 10990 XOR A 11000 CP (IX-38) 11010 RET NZ 11020 DEC (IY+5) 11030 LD A,(IY+9) 11040 SUB 16 11050 LD (IY+9),A 11060 DEC (IY) 11070 DEC (IY) 11080 SET 7,(IY+10) 11090 RET 11100 INCLIN PUSH AF 11110 LD A,(IY+28) 11120 ADD A,1 11130 DAA 11140 LD (IY+28),A 11150 LD A,(IY+29) 11160 ADC A,0 11170 DAA 11180 LD (IY+29),A 11190 LD DE,(LINLEV) 11200 INC DE 11210 LD (LINLEV),DE 11220 POP AF 11230 RET 11240 MOVCOL 11250 LD (COLSTO),HL 11260 SET 6,(IY+10) 11270 ;DE NOW POINTS TO BLOCK TO BE OVER WRITTEN 11280 MOVLO1 LD HL,WKSPA 11290 PUSH DE 11300 AND A 11310 EX DE,HL 11320 SBC HL,DE 11330 LD A,L 11340 AND %11110000 11350 OR H 11360 POP DE 11370 JP Z,TOPBLO 11380 LD HL,-256 11390 ADD HL,DE 11400 LD B,16 11410 MOVLO2 11420 PUSH BC 11430 LDI 11440 LDI 11450 LD BC,14 11460 ADD HL,BC 11470 EX DE,HL 11480 ADD HL,BC 11490 EX DE,HL 11500 POP BC 11510 DJNZ MOVLO2 11520 LD HL,-512 11530 ADD HL,DE 11540 EX DE,HL 11550 ;NOW MOVE COLOURS DOWN ONE ROW 11560 PUSH DE 11570 LD DE,(COLSTO) 11580 LD HL,-38 11590 ADD HL,DE 11600 LDI 11610 LDI 11620 LD BC,17 11630 ADD HL,BC 11640 EX DE,HL 11650 ADD HL,BC 11660 EX DE,HL 11670 LDI 11680 LDI 11690 LD BC,-59 11700 EX DE,HL 11710 ADD HL,BC 11720 LD (COLSTO),HL 11730 POP DE 11740 JP MOVLO1 11750 TOPBLO 11760 LD A,0 11770 EX DE,HL 11780 LD DE,15 11790 LD B,16 11800 TOPLO1 11810 LD (HL),A 11820 INC HL 11830 LD (HL),A 11840 ADD HL,DE 11850 DJNZ TOPLO1 11860 PUSH IX 11870 LD IX,(COLSTO) 11880 LD (IX),0 11890 LD (IX+1),0 11900 LD (IX+19),0 11910 LD (IX+20),0 11920 POP IX 11930 RET 11940 INCSCO LD A,(IY+20) 11950 LD B,(IY+27) 11960 ADD A,B 11970 DAA 11980 LD (IY+20),A 11990 LD A,(IY+21) 12000 ADC A,0 12010 DAA 12020 LD (IY+21),A 12030 LD A,(IY+22) 12040 ADC A,0 12050 DAA 12060 LD (IY+22),A 12070 LD DE,(SCOREL) 12080 INC DE 12090 LD (SCOREL),DE 12100 RET 12110 *F OVER.TEX 12120 GRAVIT 12130 BIT 6,(IY+10) 12140 RET Z 12150 RES 6,(IY+10) 12160 LD DE,2560+WKSPA 12170 LD HL,380+CSTART 12180 LD B,8 12190 GRAVL1 12200 PUSH BC 12210 PUSH DE 12220 PUSH HL 12230 CALL GRASUB 12240 POP HL 12250 POP DE 12260 POP BC 12270 INC HL 12280 INC HL 12290 INC DE 12300 INC DE 12310 DJNZ GRAVL1 12320 RET 12330 GRASUB 12340 LD B,10 12350 GRASUL XOR A 12360 CP (HL) 12370 JR Z,SUBDOW 12380 PUSH BC 12390 LD BC,-256 12400 EX DE,HL 12410 ADD HL,BC 12420 EX DE,HL 12430 LD BC,-38 12440 ADD HL,BC 12450 POP BC 12460 DJNZ GRASUL 12470 RET 12480 SUBDOW 12490 PUSH HL 12500 PUSH DE 12510 LD DE,-38 12520 XOR A 12530 SUBDOL 12540 ADD HL,DE 12550 CP (HL) 12560 JR NZ,SUBDO2 12570 DJNZ SUBDOL 12580 POP DE 12590 POP HL 12600 RET 12610 SUBDO2 12620 LD A,6 12630 SUBDL6 12640 CP (HL) 12650 JR Z,SUB666 12660 ADD HL,DE 12670 DJNZ SUBDL6 12680 SUB999 POP DE 12690 POP HL 12700 JP MOVCOL 12710 SUB666 12720 SET 1,(IY+16) 12730 JR SUB999 12740 CHEAT 12750 BIT 2,(IY+10) 12760 JR NZ,CHEAT4 12770 BIT 5,(IY+10) 12780 JR Z,CHEAT5 12790 LD BC,63486 12800 IN A,(C) 12810 BIT 0,A 12820 RET NZ 12830 SET 2,(IY+10) 12840 JP JUMLEV 12850 CHEAT4 12860 LD BC,63486 12870 IN A,(C) 12880 BIT 0,A 12890 RET Z 12900 RES 2,(IY+10) 12910 RET 12920 CHEAT5 12930 LD BC,65022 12940 IN A,(C) 12950 AND %00011111 12960 XOR %00001010 12970 RET NZ 12980 SET 5,(IY+10) 12990 RET 13000 DEBOUN 13010 PAULO2 LD BC,57342 13020 IN A,(C) 13030 PAUBI4 BIT 0,A 13040 JR Z,TURLO2 13050 RES 4,(IY+10) 13060 TURLO2 LD BC,32766 13070 IN A,(C) 13080 TURBI2 BIT 0,A 13090 RET Z 13100 RES 7,(IY+10) 13110 RET 13120 VARS2 DEFS 10 13130 ADDEAD 13140 SET 0,(IY+16) 13150 JR DEADFI 13160 ADDROW 13170 BIT 1,(IY+16) 13180 RET Z 13190 SET 3,(IY+16) 13200 SET 6,(IY+10) 13210 LD HL,CSTART 13220 XOR A 13230 RES 0,(IY+16) 13240 LD B,8 13250 LD DE,2 13260 ADLOOP 13270 CP (HL) 13280 JR NZ,ADDEAD 13290 ADD HL,DE 13300 DJNZ ADLOOP 13310 DEADFI 13320 CALL BOMSOU 13330 CALL BOMSOU 13340 CALL BOMSOU 13350 CALL MOVDOW 13360 LD HL,VARS 13370 LD DE,VARS2 13380 LD BC,10 13390 LDIR 13400 CALL PICTWO 13410 LD (IY),0 13420 LD (IY+1),10*16 13430 CALL DRA1AC 13440 LD (IY+8),2 13450 LD (IY+9),10*16 13460 CALL DRA2AC 13470 CALL PICTWO 13480 LD (IY+1),160 13490 LD (IY+9),160 13500 LD (IY),4 13510 CALL DRA1AC 13520 LD (IY+8),6 13530 CALL DRA2AC 13540 CALL PICTWO 13550 LD (IY+1),160 13560 LD (IY+9),160 13570 LD (IY),8 13580 CALL DRA1AC 13590 LD (IY+8),10 13600 CALL DRA2AC 13610 CALL PICTWO 13620 LD (IY+1),160 13630 LD (IY+9),160 13640 LD (IY),12 13650 CALL DRA1AC 13660 LD (IY+8),14 13670 CALL DRA2AC 13680 LD HL,VARS2 13690 LD DE,VARS 13700 LD BC,10 13710 LDIR 13720 CALL REMSOU 13730 BIT 0,(IY+16) 13740 CALL NZ,DEAD 13750 RET 13760 MOVDOW 13770 LD HL,WKSPA+256 13780 LD DE,WKSPA 13790 ;HL POINTS TO 2ND ROW, DE TO 1ST 13800 LD BC,2560 13810 LDIR 13820 LD DE,CSTART 13830 LD HL,CSTART+38 13840 LD BC,20*19 13850 LDIR 13860 RET 13870 SQUASH 13880 BIT 7,(IY+4) 13890 JR NZ,SQUAS1 13900 CALL GETCP2 13910 XOR A 13920 CP (IX) 13930 JR NZ,SQUIT2 13940 CP (IX+1) 13950 JR NZ,SQUIT2 13960 CP (IX+19) 13970 JR NZ,SQUIT2 13980 CP (IX+20) 13990 JR NZ,SQUIT2 14000 LD A,(IY+1) 14010 AND %00001111 14020 JR Z,SQUAS1 14030 XOR A 14040 CP (IX+38) 14050 JR NZ,SQUIT2 14060 CP (IX+39) 14070 JR NZ,SQUIT2 14080 SQUAS1 CALL GETCP1 14090 XOR A 14100 CP (IX) 14110 JR NZ,SQUIT1 14120 CP (IX+1) 14130 JR NZ,SQUIT1 14140 CP (IX+19) 14150 JR NZ,SQUIT1 14160 CP (IX+20) 14170 JR NZ,SQUIT1 14180 LD A,(IY+1) 14190 AND %00001111 14200 RET Z 14210 XOR A 14220 CP (IX+38) 14230 JR NZ,SQUIT1 14240 CP (IX+39) 14250 JR NZ,SQUIT1 14260 RET 14270 SQUIT2 14280 LD (IY+4),255 14290 DEC (IY+2) 14300 JR SQUAS1 14310 SQUIT1 14320 DEC (IY+2) 14330 JR Z,SQUIT3 14340 LD A,(IY+8) 14350 LD (IY),A 14360 LD A,(IY+9) 14370 LD (IY+1),A 14380 LD A,(IY+4) 14390 LD (IY+3),A 14400 LD (IY+4),255 14410 RET 14420 SQUIT3 14430 POP AF 14440 CALL BDTOSC 14450 CALL PICBLO 14460 RES 0,(IY+10) 14470 RES 1,(IY+10) 14480 JP STARTB 14490 ZAP2 14500 LD H,(IY+9) 14510 LD C,(IY+8) 14520 ZAPANY 14530 LD A,16 14540 ADD A,H 14550 LD H,A 14560 CP 176 14570 JR Z,ZAPRET 14580 LD DE,WKSPD-WKSPC+38 14590 ADD IX,DE 14600 LD L,0 14610 LD B,0 14620 SRL H 14630 RR L 14640 SRL H 14650 RR L 14660 SRL H 14670 RR L 14680 SRL H 14690 RR L 14700 LD DE,WKSPB 14710 ADD HL,DE 14720 ADD HL,BC 14730 CALL GETIT 14740 CALL BOMSOU 14750 CALL UPDSCO 14760 ZAPRET POP HL 14770 INC HL 14780 INC HL 14790 INC HL 14800 PUSH HL 14810 LD DE,(SCOREL) 14820 INC DE 14830 LD (SCOREL),DE 14840 RET 14850 ZAP1 14860 LD H,(IY+1) 14870 LD C,(IY) 14880 JP ZAPANY 14890 PICTWO 14900 CALL RANDOM 14910 AND %00000111 14920 CP 0 14930 JR Z,PICTWO 14940 SET 6,A 14950 LD (IY+3),A 14960 PICTW2 14970 CALL RANDOM 14980 AND %00000111 14990 CP 0 15000 JR Z,PICTW2 15010 SET 6,A 15020 LD (IY+4),A 15030 RET 15040 DRASCR 15050 LD (IX),A 15060 LD (IX+1),A 15070 LD (IX+32),A 15080 LD (IX+33),A 15090 PUSH DE 15100 PUSH HL 15110 EX DE,HL 15120 PUSH BC 15130 LD BC,BLOGRA 15140 LD H,A 15150 CP 7 15160 JR NZ,DRASC1 15170 LD H,0 15180 DRASC1 15190 CP 5 15200 JR NZ,DRASC2 15210 LD H,0 15220 DRASC2 15230 CP 6 15240 JR NZ,DRASC3 15250 LD H,8 15260 DRASC3 15270 CP 2 15280 JR NZ,DRASC4 15290 LD H,9 15300 DRASC4 15310 CP 3 15320 JR NZ,DRASC5 15330 LD H,10 15340 DRASC5 15350 RES 6,H 15360 LD L,0 15370 SRL H 15380 RR L 15390 SRL H 15400 RR L 15410 SRL H 15420 RR L 15430 ADD HL,BC 15440 ;DE = POS ON SCREEN HL = POS IN GRAPHICS 15450 LD B,16 15460 DRASCL 15470 LD A,(HL) 15480 LD (DE),A 15490 INC DE 15500 INC HL 15510 LD A,(HL) 15520 LD (DE),A 15530 DEC DE 15540 CALL STEPSC 15550 INC HL 15560 DJNZ DRASCL 15570 POP BC 15580 POP HL 15590 POP DE 15600 RET 15610 QUIT 15620 QUILO1 LD BC,64510 15630 IN A,(C) 15640 QUIBI1 BIT 0,A 15650 RET NZ 15660 POP AF 15670 RET 15680 *F SOUND.TEX
OVER.TEX
10 REMSOU 20 RES 4,(IY+18) 30 LD HL,130 40 LD BC,254 50 LD A,0 60 PUSH AF 70 REMSL1 LD D,H 80 LD E,L 90 POP AF 100 XOR 16 110 PUSH AF 120 OUT (C),A 130 REMSL2 DEC DE 140 LD A,D 150 OR E 160 JR NZ,REMSL2 170 DEC HL 180 LD A,H 190 OR L 200 JR NZ,REMSL1 210 POP AF 220 RET 230 UPDSCO 240 LD E,(IY+22) 250 LD HL,16416 260 CALL PRIBC2 270 LD HL,16418 280 LD DE,(SCORE) 290 CALL PRIBCD 300 LD HL,16513 310 LD DE,(BLOCNO) 320 CALL PRIBCD 330 LD HL,16609 340 LD DE,(LINES) 350 CALL PRIBCD 360 LD HL,20577 370 LD DE,(SQUBCD) 380 CALL PRIBCD 390 LD HL,18497 400 LD DE,(HORBCD) 410 CALL PRIBCD 420 LD HL,18593 430 LD DE,(VERBCD) 440 CALL PRIBCD 450 LD HL,20481 460 LD DE,(DIABCD) 470 CALL PRIBCD 480 RET 490 PRIBCD 500 PUSH DE 510 LD A,D 520 AND %11110000 530 SRL A 540 SRL A 550 SRL A 560 SRL A 570 CALL PRINIT 580 POP DE 590 PUSH DE 600 LD A,D 610 AND %00001111 620 CALL PRINIT 630 POP DE 640 PRIBC2 PUSH DE 650 LD A,E 660 AND %11110000 670 SRL A 680 SRL A 690 SRL A 700 SRL A 710 CALL PRINIT 720 POP DE 730 LD A,E 740 AND %00001111 750 JR PRINIT 760 PRINIT 770 PUSH HL 780 LD E,A 790 LD D,0 800 SLA E 810 SLA E 820 SLA E 830 EX DE,HL 840 LD BC,CSET+216 850 ADD HL,BC 860 EX DE,HL 870 PRIANY LD B,8 880 ;HL = ADDRESS ON SCREEN DE = ADDRESS OF DATA 890 PRILOO 900 LD A,(DE) 910 LD (HL),A 920 EX DE,HL 930 CALL STEPSC 940 EX DE,HL 950 INC DE 960 DJNZ PRILOO 970 POP HL 980 INC HL 990 RET 1000 INCBLO 1010 LD A,(IY+25) 1020 ADD A,2 1030 DAA 1040 LD (IY+25),A 1050 LD A,(IY+26) 1060 ADC A,0 1070 DAA 1080 LD (IY+26),A 1090 LD DE,(BLOREL) 1100 INC DE 1110 INC DE 1120 LD (BLOREL),DE 1130 RET 1140 INCLEV 1150 LD HL,(BLOREL) 1160 LD DE,(SCOREL) 1170 AND A 1180 SBC HL,DE 1190 LD BC,31 1200 SBC HL,BC 1210 RET NC 1220 LD HL,(LINLEV) 1230 LD BC,20 1240 AND A 1250 SBC HL,BC 1260 RET C 1270 LD A,(IY+1) 1280 AND %00001111 1290 RET NZ 1300 JUMLEV LD HL,0 1310 LD (LINLEV),HL 1320 LD A,(IY+1) 1330 AND %11110000 1340 LD (IY+1),A 1350 LD A,(IY+9) 1360 AND %11110000 1370 LD (IY+9),A 1380 LD A,(IY+27) 1390 ADD A,1 1400 DAA 1410 LD (IY+27),A 1420 INC (IY+36) 1430 LD (IY+37),1 1440 LD A,(IY+36) 1450 CP 11 1460 CALL Z,ZAPZAP 1470 LD A,(IY+36) 1480 CP 12 1490 JP Z,GAMCOM 1500 LD HL,20672 1510 CALL PRILEV 1520 LD B,8 1530 SET 2,(IY+16) 1540 WHIZZ 1550 PUSH BC 1560 CALL PICCYC 1570 POP BC 1580 DJNZ WHIZZ 1590 RES 2,(IY+16) 1600 CALL REMSOU 1610 CALL CRUSOU 1620 JP SQUSOU 1630 DELTAB DEFW 1,1,1,1,1,1,1,1 1640 DEFW 1,1,1,1,1 1650 DEFW 1,1,1 1660 DELAY 1670 LD L,(IY+36) 1680 LD H,0 1690 SLA L 1700 RL H 1710 LD BC,DELTAB 1720 ADD HL,BC 1730 LD E,(HL) 1740 INC HL 1750 LD D,(HL) 1760 DELLOO 1770 DEC DE 1780 LD A,D 1790 OR E 1800 JR NZ,DELLOO 1810 RET 1820 ALLOBL 1830 LD A,(IY+1) 1840 AND %00001111 1850 JR NZ,ALLOB4 1860 BIT 7,(IY+4) 1870 JR NZ,ALLOB3 1880 CALL GETCP2 1890 LD (IX),255 1900 ALLOB3 1910 BIT 7,(IY+3) 1920 JR NZ,ALLOB4 1930 CALL GETCP1 1940 LD (IX),255 1950 ALLOB4 RES 2,(IY+18) 1960 LD IX,DSTART 1970 LD HL,WKSPB 1980 LD C,11 1990 OBLLOO 2000 LD B,8 2010 OBLLO2 2020 CALL EXAMIT 2030 INC IX 2040 INC HL 2050 INC IX 2060 INC HL 2070 DJNZ OBLLO2 2080 LD DE,22 2090 ADD IX,DE 2100 LD DE,240 2110 ADD HL,DE 2120 DEC C 2130 JR NZ,OBLLOO 2140 CALL UPDSCO 2150 LD A,(IY+1) 2160 AND %00001111 2170 RET NZ 2180 BIT 7,(IY+3) 2190 RET NZ 2200 BIT 7,(IY+4) 2210 JR NZ,APRIL 2220 CALL GETCP2 2230 XOR A 2240 CP (IX) 2250 JR NZ,APRIL 2260 LD (IY+4),255 2270 DEC (IY+2) 2280 APRIL 2290 CALL GETCP1 2300 XOR A 2310 CP (IX) 2320 JR NZ,APRIL4 2330 DEC (IY+2) 2340 JR Z,APRIL3 2350 LD A,(IY+8) 2360 LD (IY),A 2370 LD A,(IY+9) 2380 LD (IY+1),A 2390 LD A,(IY+4) 2400 LD (IY+3),A 2410 LD (IY+4),255 2420 JR APRIL4 2430 APRIL3 2440 POP AF 2450 CALL BDTOSC 2460 CALL REMSOU 2470 CALL PICBLO 2480 JP STARTB 2490 APRIL4 2500 CALL GETCP1 2510 LD (IX),0 2520 BIT 7,(IY+4) 2530 RET NZ 2540 CALL GETCP2 2550 LD (IX),0 2560 RET 2570 EXAMIT 2580 LD A,(IX) 2590 CP 0 2600 RET Z 2610 CP 7 2620 JP Z,SQUARE 2630 CP 5 2640 JP Z,SQUARE 2650 CP 3 2660 JP Z,CRUSH 2670 CP (IX+2) 2680 JR NZ,EXA2 2690 CP (IX+4) 2700 JR NZ,EXA2 2710 SET 2,(IY+18) 2720 PUSH IX 2730 PUSH HL 2740 CALL GETIT 2750 INC IX 2760 INC IX 2770 INC HL 2780 INC HL 2790 CALL GETIT 2800 INC IX 2810 INC IX 2820 INC HL 2830 INC HL 2840 CALL GETIT 2850 POP HL 2860 POP IX 2870 CALL INCLIN 2880 LD A,(IY+58) 2890 ADD A,1 2900 DAA 2910 LD (IY+58),A 2920 LD A,(IY+59) 2930 ADC A,0 2940 DAA 2950 LD (IY+59),A 2960 EXA2 2970 LD A,(IX) 2980 CP (IX+36) 2990 JR NZ,EXA3 3000 CP (IX+72) 3010 JR NZ,EXA3 3020 SET 2,(IY+18) 3030 PUSH IX 3040 PUSH HL 3050 CALL GETIT 3060 LD DE,36 3070 ADD IX,DE 3080 LD DE,254 3090 ADD HL,DE 3100 CALL GETIT 3110 ADD HL,DE 3120 LD DE,36 3130 ADD IX,DE 3140 CALL GETIT 3150 POP HL 3160 POP IX 3170 CALL INCLIN 3180 CALL INCDIA 3190 EXA3 3200 LD A,(IX) 3210 CP (IX+38) 3220 JR NZ,EXA4 3230 CP (IX+76) 3240 JR NZ,EXA4 3250 SET 2,(IY+18) 3260 PUSH IX 3270 PUSH HL 3280 CALL GETIT 3290 LD DE,38 3300 ADD IX,DE 3310 LD DE,256 3320 ADD HL,DE 3330 CALL GETIT 3340 ADD HL,DE 3350 LD DE,38 3360 ADD IX,DE 3370 CALL GETIT 3380 POP HL 3390 POP IX 3400 CALL INCLIN 3410 LD A,(IY+60) 3420 ADD A,1 3430 DAA 3440 LD (IY+60),A 3450 LD A,(IY+61) 3460 ADC A,0 3470 DAA 3480 LD (IY+61),A 3490 EXA4 3500 LD A,(IX) 3510 CP (IX+40) 3520 JR NZ,EXA5 3530 CP (IX+80) 3540 JR NZ,EXA5 3550 SET 2,(IY+18) 3560 PUSH IX 3570 PUSH HL 3580 CALL GETIT 3590 LD DE,40 3600 ADD IX,DE 3610 LD DE,258 3620 ADD HL,DE 3630 CALL GETIT 3640 ADD HL,DE 3650 LD DE,40 3660 ADD IX,DE 3670 CALL GETIT 3680 POP HL 3690 POP IX 3700 CALL INCLIN 3710 CALL INCDIA 3720 EXA5 3730 RET 3740 GETIT 3750 PUSH AF 3760 PUSH BC 3770 PUSH DE 3780 PUSH HL 3790 PUSH IX 3800 SET 6,(IY+10) 3810 LD DE,WKSPC-WKSPD 3820 ADD IX,DE 3830 LD DE,WKSPA-WKSPB 3840 ADD HL,DE 3850 XOR A 3860 CP (IX) 3870 JR Z,GETRET 3880 XOR A 3890 LD (IX),A 3900 LD (IX+1),A 3910 LD (IX+19),A 3920 LD (IX+20),A 3930 LD B,16 3940 LD DE,15 3950 GETLOP 3960 LD (HL),A 3970 INC HL 3980 LD (HL),A 3990 ADD HL,DE 4000 DJNZ GETLOP 4010 CALL INCSCO 4020 GETRET 4030 POP IX 4040 POP HL 4050 POP DE 4060 POP BC 4070 POP AF 4080 RET 4090 REDEF 4100 CALL CLS 4110 CALL REDCOL 4120 CALL DRALIN 4130 RES 4,(IY+16) 4140 CALL RELALL 4150 CALL SPRINT 4160 DEFW 16448+11 4170 DEFM "PRESS@THE" 4180 DEFB 255 4190 CALL SPRINT 4200 DEFW 16512+12 4210 DEFM "KEY@FOR" 4220 DEFB 255 4230 CALL SPRINT 4240 DEFW 16576+12 4250 DEFM "LEFT" 4260 DEFB 255 4270 CALL GETPOR 4280 LD (LEFLO1+1),BC 4290 LD (LEFBI1+1),A 4300 LD HL,16576+18 4310 CALL GETPRI 4320 CALL RELALL 4330 CALL SPRINT 4340 DEFW 18432+12 4350 DEFM "RIGHT" 4360 DEFB 255 4370 CALL GETPOR 4380 LD (RIGLO1+1),BC 4390 LD (RIGBI1+1),A 4400 LD HL,18432+18 4410 CALL GETPRI 4420 CALL RELALL 4430 CALL SPRINT 4440 DEFW 18496+12 4450 DEFM "TURN" 4460 DEFB 255 4470 CALL GETPOR 4480 LD (TURLO1+1),BC 4490 LD (TURLO2+1),BC 4500 LD (TURBI1+1),A 4510 LD (TURBI2+1),A 4520 LD HL,18496+18 4530 CALL GETPRI 4540 CALL RELALL 4550 CALL SPRINT 4560 DEFW 18560+12 4570 DEFM "DROP" 4580 DEFB 255 4590 CALL GETPOR 4600 LD (SPALO1+1),BC 4610 LD (SPABI1+1),A 4620 LD HL,18560+18 4630 CALL GETPRI 4640 CALL RELALL 4650 CALL SPRINT 4660 DEFW 18624+12 4670 DEFM "PAUSE" 4680 DEFB 255 4690 CALL GETPOR 4700 LD (PAULO1+1),BC 4710 LD (PAUBI1+1),A 4720 LD (PAUBI2+1),A 4730 LD (PAUBI3+1),A 4740 LD (PAULO2+1),BC 4750 LD (PAUBI4+1),A 4760 LD HL,18624+18 4770 CALL GETPRI 4780 CALL RELALL 4790 CALL SPRINT 4800 DEFW 20480+12 4810 DEFM "QUIT" 4820 DEFB 255 4830 CALL GETPOR 4840 LD (QUILO1+1),BC 4850 LD (QUIBI1+1),A 4860 LD HL,20480+18 4870 CALL GETPRI 4880 CALL RELALL 4890 CALL SPRINT 4900 DEFW 20576+10 4910 DEFM "KEYS@OK@YgNh" 4920 DEFB 255 4930 CALL YESNO 4940 JP NC,REDEF 4950 JP FRREDE 4960 SPRINT 4970 POP HL 4980 LD E,(HL) 4990 INC HL 5000 LD D,(HL) 5010 INC HL 5020 PUSH HL 5030 LD H,D 5040 LD L,E 5050 SPRIN2 5060 POP BC 5070 LD A,(BC) 5080 INC BC 5090 PUSH BC 5100 CP 255 5110 RET Z 5120 LD E,A 5130 LD D,0 5140 SLA E 5150 RL D 5160 SLA E 5170 RL D 5180 SLA E 5190 RL D 5200 PUSH HL 5210 LD HL,CSET-512 5220 ADD HL,DE 5230 LD D,H 5240 LD E,L 5250 POP HL 5260 PUSH HL 5270 LD B,8 5280 WRITLO 5290 LD A,(DE) 5300 LD (HL),A 5310 INC DE 5320 EX DE,HL 5330 CALL STEPSC 5340 EX DE,HL 5350 DJNZ WRITLO 5360 POP HL 5370 INC HL 5380 JP SPRIN2 5390 GETPOR 5400 LD BC,65278 5410 LD D,0 5420 CALL GETBIT 5430 LD BC,65022 5440 LD D,1 5450 CALL GETBIT 5460 LD BC,64510 5470 LD D,2 5480 CALL GETBIT 5490 LD BC,63486 5500 LD D,3 5510 CALL GETBIT 5520 LD BC,61438 5530 LD D,4 5540 CALL GETBIT 5550 LD BC,57342 5560 LD D,5 5570 CALL GETBIT 5580 LD BC,49150 5590 LD D,6 5600 CALL GETBIT 5610 LD BC,32766 5620 LD D,7 5630 CALL GETBIT 5640 BIT 5,(IY+16) 5650 CALL NZ,SCRIT1 5660 BIT 6,(IY+16) 5670 CALL NZ,SCRIT2 5680 JR GETPOR 5690 GETBIT 5700 IN E,(C) 5710 POP HL 5720 LD A,#47 5730 BIT 0,E 5740 RET Z 5750 LD A,#4F 5760 BIT 1,E 5770 RET Z 5780 LD A,#57 5790 BIT 2,E 5800 RET Z 5810 LD A,#5F 5820 BIT 3,E 5830 RET Z 5840 LD A,#67 5850 BIT 4,E 5860 RET Z 5870 PUSH HL 5880 RET 5890 RELALL 5900 PUSH DE 5910 PUSH HL 5920 BIT 5,(IY+16) 5930 CALL NZ,IT3 5940 BIT 6,(IY+16) 5950 CALL NZ,I2T2 5960 POP HL 5970 POP DE 5980 LD BC,65278 5990 CALL RELROW 6000 LD BC,65022 6010 CALL RELROW 6020 LD BC,64510 6030 CALL RELROW 6040 LD BC,63486 6050 CALL RELROW 6060 LD BC,61438 6070 CALL RELROW 6080 LD BC,57342 6090 CALL RELROW 6100 LD BC,49150 6110 CALL RELROW 6120 LD BC,32766 6130 CALL RELROW 6140 RET 6150 RELROW 6160 IN A,(C) 6170 OR %11100000 6180 XOR #FF 6190 POP BC 6200 JR NZ,RELALL 6210 PUSH BC 6220 RET 6230 SQUARE 6240 CP (IX+2) 6250 RET NZ 6260 CP (IX+38) 6270 RET NZ 6280 CP (IX+40) 6290 RET NZ 6300 SET 3,(IY+18) 6310 PUSH HL 6320 PUSH IX 6330 CALL GETIT 6340 INC HL 6350 INC HL 6360 INC IX 6370 INC IX 6380 CALL GETIT 6390 LD DE,36 6400 ADD IX,DE 6410 LD DE,254 6420 ADD HL,DE 6430 CALL GETIT 6440 INC HL 6450 INC HL 6460 INC IX 6470 INC IX 6480 CALL GETIT 6490 LD HL,(SQUREL) 6500 INC HL 6510 LD (SQUREL),HL 6520 LD A,(IY+38) 6530 ADD A,1 6540 DAA 6550 LD (IY+38),A 6560 LD A,(IY+39) 6570 ADC A,0 6580 DAA 6590 LD (IY+39),A 6600 LD HL,(LINLEV) 6610 INC HL 6620 LD (LINLEV),HL 6630 POP IX 6640 POP HL 6650 RET 6660 CRUSH 6670 LD DE,WKSPC-WKSPD 6680 PUSH IX 6690 ADD IX,DE 6700 XOR A 6710 CP (IX+1) 6720 CALL Z,CRULAN 6730 POP IX 6740 LD A,C 6750 CP 1 6760 JP Z,GETIT 6770 BIT 6,(IX+38) 6780 RET Z 6790 CALL GETIT 6800 PUSH HL 6810 PUSH IX 6820 LD DE,WKSPC-WKSPD 6830 ADD IX,DE 6840 LD DE,WKSPA-WKSPB+256 6850 ADD HL,DE 6860 PUSH BC 6870 LD DE,BLOGRA+320 6880 LD B,16 6890 SET 4,(IY+18) 6900 CRULO1 6910 LD A,(DE) 6920 LD (HL),A 6930 INC HL 6940 INC DE 6950 LD A,(DE) 6960 LD (HL),A 6970 INC DE 6980 PUSH BC 6990 LD BC,15 7000 ADD HL,BC 7010 POP BC 7020 DJNZ CRULO1 7030 LD A,3 7040 LD (IX+38),A 7050 LD (IX+39),A 7060 LD (IX+57),A 7070 LD (IX+58),A 7080 POP BC 7090 POP IX 7100 POP HL 7110 RET 7120 CRULAN 7130 BIT 6,(IX+39) 7140 RET NZ 7150 POP AF 7160 POP IX 7170 RET 7180 INCDIA 7190 LD A,(IY+62) 7200 ADD A,1 7210 DAA 7220 LD (IY+62),A 7230 LD A,(IY+63) 7240 ADC A,0 7250 DAA 7260 LD (IY+63),A 7270 RET 7280 PRILEV 7290 LD L,(IY+36) 7300 LD H,0 7310 SLA L 7320 RL H 7330 SLA L 7340 RL H 7350 SLA L 7360 RL H 7370 SLA L 7380 RL H 7390 SLA L 7400 RL H 7410 SLA L 7420 RL H 7430 LD DE,LEVNUM 7440 ADD HL,DE 7450 LD DE,20673 7460 LD B,16 7470 PRILLO 7480 LD A,(HL) 7490 LD (DE),A 7500 PUSH DE 7510 INC HL 7520 INC DE 7530 LD A,(HL) 7540 LD (DE),A 7550 INC HL 7560 INC DE 7570 LD A,(HL) 7580 LD (DE),A 7590 INC HL 7600 INC DE 7610 LD A,(HL) 7620 LD (DE),A 7630 INC HL 7640 POP DE 7650 CALL STEPSC 7660 DJNZ PRILLO 7670 RET 7680 MENULO 7690 LD IY,XPOS 7700 LD DE,MESSA1 7710 LD (MESSTO),DE 7720 CALL RESMES 7730 FRREDE 7740 CALL CLS 7750 MEFRHI LD DE,22528+32+8 7760 LD HL,TITCOL 7770 LD B,22 7780 TITLO1 7790 PUSH BC 7800 LD BC,16 7810 LDIR 7820 LD BC,16 7830 EX DE,HL 7840 ADD HL,BC 7850 EX DE,HL 7860 POP BC 7870 DJNZ TITLO1 7880 CALL DRATRI 7890 CALL SPRINT 7900 DEFW 18496+9 7910 DEFM "\@START@GAME" 7920 DEFB 255 7930 CALL SPRINT 7940 DEFW 18560+9 7950 DEFM "]@REDEFINE" 7960 DEFB 255 7970 CALL SPRINT 7980 DEFW 18592+15 7990 DEFM "KEYBOARD" 8000 DEFB 255 8010 CALL SPRINT 8020 DEFW 18656+9 8030 DEFM "^@SINCLAIR" 8040 DEFB 255 8050 CALL SPRINT 8060 DEFW 20480+15 8070 DEFM "JOYSTICK" 8080 DEFB 255 8090 CALL SPRINT 8100 DEFW 20544+9 8110 DEFM "_@VIEW@HIGH" 8120 DEFB 255 8130 CALL SPRINT 8140 DEFW 20576+12 8150 DEFM "SCORE@TABLE" 8160 DEFB 255 8170 CALL DRALIN 8180 CALL DRAPOI 8190 CALL RELALL 8200 MENLO1 8210 LD BC,63486 8220 IN A,(C) 8230 BIT 1,A 8240 JP Z,REDEF 8250 BIT 0,A 8260 JP Z,CALSTA 8270 BIT 2,A 8280 JP Z,SINJOY 8290 BIT 3,A 8300 JP Z,HIGSCO 8310 CALL IT4 8320 JR MENLO1 8330 CALSTA 8340 LD HL,21152+7 8350 RES 0,(HL) 8360 RES 5,(IY+16) 8370 CALL EFFECT 8380 CALL STGAME 8390 CALL DEASOU 8400 CALL DRAOVE 8410 CALL RELALL 8420 CALL WAIPRE 8430 CALL EFFECT 8440 CALL ENTHIG 8450 JP MENULO 8460 DRATRI 8470 LD HL,TRIBLO 8480 LD DE,16384+64+9 8490 LD B,56 8500 DRATRL 8510 PUSH BC 8520 PUSH DE 8530 LD BC,14 8540 LDIR 8550 POP DE 8560 CALL STEPSC 8570 POP BC 8580 DJNZ DRATRL 8590 RET 8600 CLS 8610 LD DE,16424 8620 LD B,176 8630 CLSLOO 8640 PUSH BC 8650 LD H,D 8660 LD L,E 8670 PUSH HL 8680 INC DE 8690 LD (HL),0 8700 LD BC,15 8710 LDIR 8720 POP DE 8730 CALL STEPSC 8740 POP BC 8750 DJNZ CLSLOO 8760 RET 8770 CLSLOW 8780 LD DE,18464+8 8790 LD B,12*8 8800 JP CLSLOO 8810 DRALIN 8820 LD HL,21152+7 8830 SET 0,(HL) 8840 INC HL 8850 LD D,H 8860 LD E,L 8870 INC DE 8880 LD (HL),255 8890 LD BC,15 8900 LDIR 8910 RET 8920 SINJOY 8930 SET 4,(IY+16) 8940 LD BC,61438 8950 LD (LEFLO1+1),BC 8960 LD (RIGLO1+1),BC 8970 LD (SPALO1+1),BC 8980 LD (PAULO1+1),BC 8990 LD (TURLO1+1),BC 9000 LD (TURLO2+1),BC 9010 LD A,#47 9020 LD (TURBI1+1),A 9030 LD (TURBI2+1),A 9040 LD A,#4F 9050 LD (PAUBI1+1),A 9060 LD (PAUBI2+1),A 9070 LD (PAUBI3+1),A 9080 LD A,#57 9090 LD (SPABI1+1),A 9100 LD A,#5F 9110 LD (RIGBI1+1),A 9120 LD A,#67 9130 LD (LEFBI1+1),A 9140 LD A,#47 9150 LD (QUIBI1+1),A 9160 LD BC,64510 9170 LD (QUILO1+1),BC 9180 CALL DRAPOI 9190 JP MENLO1 9200 DRAPOI 9210 CALL SPRINT 9220 DEFW 18560+8 9230 DEFM "@]@" 9240 DEFB 255 9250 BIT 4,(IY+16) 9260 JR Z,POIKEY 9270 POIJOY 9280 CALL SPRINT 9290 DEFW 18656+8 9300 DEFM "e^f" 9310 DEFB 255 9320 RET 9330 POIKEY 9340 CALL SPRINT 9350 DEFW 18560+8 9360 DEFM "e]f" 9370 DEFB 255 9380 RET 9390 HIGTAB 9400 DEFM "MICHAEL" 9410 DEFB 0,#45,0 9420 DEFM "MICHAEL" 9430 DEFB 0,#30,0 9440 DEFM "MICHAEL" 9450 DEFB 0,#20,0 9460 DEFM "MICHAEL" 9470 DEFB 0,#15,0 9480 DEFM "MICHAEL" 9490 DEFB 0,#10,0 9500 DEFM "MICHAEL" 9510 DEFB 0,#5,0 9520 DEFM "MICHAEL" 9530 DEFB 0,#2,#50 9540 DEFM "MICHAEL" 9550 DEFB 0,#1,0 9560 DEFM "MICHAEL" 9570 DEFB 0,0,#50 9580 DEFM "MICHAEL" 9590 DEFB 0,0,#25 9600 HIGSCO 9610 CALL CLSLOW 9620 CALL DRHSCO 9630 CALL DRAHST 9640 CALL RELALL 9650 HIGHL1 9660 CALL IT5 9670 CALL KEYPRE 9680 JR C,HIGHL1 9690 CALL CLSLOW 9700 JP MEFRHI 9710 KEYPRE 9720 LD BC,65278 9730 CALL KEPSUB 9740 LD BC,65022 9750 CALL KEPSUB 9760 LD BC,64510 9770 CALL KEPSUB 9780 LD BC,63486 9790 CALL KEPSUB 9800 LD BC,61438 9810 CALL KEPSUB 9820 LD BC,57342 9830 CALL KEPSUB 9840 LD BC,49150 9850 CALL KEPSUB 9860 LD BC,32766 9870 CALL KEPSUB 9880 SCF 9890 RET 9900 KEPSUB 9910 IN A,(C) 9920 OR %11100000 9930 INC A 9940 RET Z 9950 POP AF 9960 AND A 9970 RET 9980 DRAHST 9990 LD DE,HIGTAB 10000 LD HL,18496+9 10010 LD B,10 10020 DHSTL1 10030 PUSH BC 10040 PUSH HL 10050 LD B,7 10060 DHSTL2 10070 LD A,(DE) 10080 INC DE 10090 PUSH DE 10100 PUSH HL 10110 PUSH BC 10120 CALL PRICHA 10130 POP BC 10140 POP HL 10150 POP DE 10160 INC HL 10170 DJNZ DHSTL2 10180 INC HL 10190 PUSH HL 10200 EX DE,HL 10210 LD D,(HL) 10220 INC HL 10230 LD E,(HL) 10240 INC HL 10250 EX (SP),HL 10260 PUSH HL 10270 CALL PRIBCD 10280 POP HL 10290 INC HL 10300 INC HL 10310 INC HL 10320 INC HL 10330 EX (SP),HL 10340 LD E,(HL) 10350 INC HL 10360 EX (SP),HL 10370 CALL PRIBC2 10380 POP DE 10390 POP HL 10400 LD B,8 10410 EX DE,HL 10420 PHSTL3 10430 CALL STEPSC 10440 DJNZ PHSTL3 10450 EX DE,HL 10460 POP BC 10470 DJNZ DHSTL1 10480 RET 10490 PRICHA 10500 PUSH HL 10510 LD L,A 10520 LD H,0 10530 SLA L 10540 RL H 10550 SLA L 10560 RL H 10570 SLA L 10580 RL H 10590 LD DE,CSET-512 10600 ADD HL,DE 10610 LD D,H 10620 LD E,L 10630 POP HL 10640 LD B,8 10650 PCHAL1 10660 LD A,(DE) 10670 LD (HL),A 10680 INC DE 10690 EX DE,HL 10700 CALL STEPSC 10710 EX DE,HL 10720 DJNZ PCHAL1 10730 RET 10740 DRHSCO 10750 LD HL,SCOCOL 10760 LD DE,22528+32+8 10770 LD B,22 10780 HSCOL1 10790 PUSH BC 10800 LD BC,16 10810 LDIR 10820 LD BC,16 10830 EX DE,HL 10840 ADD HL,BC 10850 EX DE,HL 10860 POP BC 10870 DJNZ HSCOL1 10880 RET 10890 WAIPRE 10900 CALL KEYPRE 10910 JR C,WAIPRE 10920 RET 10930 PORTAB 10940 DEFB 109,90,88,67,86 10950 DEFB 65,83,68,70,71 10960 DEFB 81,87,69,82,84 10970 DEFB 92,93,94,95,96 10980 DEFB 91,100,99,98,97 10990 DEFB 80,79,73,85,89 11000 DEFB 106,76,75,74,72 11010 DEFB 64,108,77,78,66 11020 GETCHA 11030 LD L,D 11040 LD H,0 11050 LD E,D 11060 LD D,H 11070 SLA L 11080 SLA L 11090 ADD HL,DE 11100 SUB #47 11110 SRL A 11120 SRL A 11130 SRL A 11140 LD E,A 11150 ADD HL,DE 11160 LD DE,PORTAB 11170 ADD HL,DE 11180 LD A,(HL) 11190 RET 11200 GETPRI 11210 PUSH HL 11220 CALL GETCHA 11230 POP HL 11240 CP 106 11250 JP Z,PRIENT 11260 CP 64 11270 JP Z,PRISPA 11280 CP 108 11290 JP Z,PRISYM 11300 CP 109 11310 JP Z,PRICAP 11320 JP PRICHA 11330 PRIENT 11340 LD (ENTDAT),HL 11350 CALL SPRINT 11360 ENTDAT DEFW 0 11370 DEFM "ENTER" 11380 DEFB 255 11390 RET 11400 PRISPA 11410 LD (SPADAT),HL 11420 CALL SPRINT 11430 SPADAT DEFW 0 11440 DEFM "SPACE" 11450 DEFB 255 11460 RET 11470 PRICAP 11480 LD (CAPDAT),HL 11490 CALL SPRINT 11500 CAPDAT DEFW 0 11510 DEFM "CAPS" 11520 DEFB 255 11530 RET 11540 PRISYM 11550 LD (SYMDAT),HL 11560 CALL SPRINT 11570 SYMDAT DEFW 0 11580 DEFM "SYMB" 11590 DEFB 255 11600 RET 11610 REDCOL 11620 LD HL,22528+32+8 11630 LD B,20 11640 RCLOOP 11650 PUSH BC 11660 LD D,H 11670 LD E,L 11680 INC DE 11690 LD (HL),7 11700 LD BC,15 11710 LDIR 11720 LD BC,17 11730 ADD HL,BC 11740 POP BC 11750 DJNZ RCLOOP 11760 RET 11770 YESNO 11780 LD BC,32766 11790 IN A,(C) 11800 BIT 3,A 11810 SCF 11820 CCF 11830 RET Z 11840 LD BC,57342 11850 IN A,(C) 11860 BIT 4,A 11870 SCF 11880 RET Z 11890 BIT 5,(IY+16) 11900 CALL NZ,IT2 11910 JR YESNO 11920 GAMCOM 11930 POP AF 11940 POP AF 11950 CALL REMSOU 11960 CALL REMSOU 11970 CALL REMSOU 11980 CALL EFFECT 11990 CALL DRHSCO 12000 CALL DRATRI 12010 CALL COMCOL 12020 CALL SPRINT 12030 DEFW 18496+11 12040 DEFM "WELL@DONE" 12050 DEFB 255 12060 CALL SPRINT 12070 DEFW 18560+12 12080 DEFM "YOU@HAVE" 12090 DEFB 255 12100 CALL SPRINT 12110 DEFW 18624+11 12120 DEFM "COMPLETED" 12130 DEFB 255 12140 CALL SPRINT 12150 DEFW 20480+9 12160 DEFM "ALL@THE@LEVELS" 12170 DEFB 255 12180 CALL SPRINT 12190 DEFW 20544+11 12200 DEFM "OF@TRIBLOXi" 12210 DEFB 255 12220 CALL SPRINT 12230 DEFW 20608+10 12240 DEFM "YOU@ARE@VERY" 12250 DEFB 255 12260 CALL SPRINT 12270 DEFW 20640+9 12280 DEFM "CLEVER@INDEEDi" 12290 DEFB 255 12300 CALL RELALL 12310 CALL WAIPRE 12320 CALL EFFECT 12330 CALL ENTHIG 12340 JP MENULO 12350 COMCOL 12360 LD HL,32*10+22528+9 12370 LD B,12 12380 COMLOO 12390 PUSH BC 12400 LD D,H 12410 LD E,L 12420 INC DE 12430 LD (HL),69 12440 LD BC,13 12450 LDIR 12460 LD BC,19 12470 ADD HL,BC 12480 POP BC 12490 DJNZ COMLOO 12500 RET 12510 ZAPZAP 12520 LD IX,DSTART 12530 LD HL,WKSPB 12540 LD C,11 12550 ZZLOO1 12560 LD B,8 12570 ZZLOO2 12580 LD A,3 12590 CP (IX) 12600 CALL Z,GETIT 12610 INC IX 12620 INC IX 12630 INC HL 12640 INC HL 12650 DJNZ ZZLOO2 12660 LD DE,22 12670 ADD IX,DE 12680 LD DE,240 12690 ADD HL,DE 12700 DEC C 12710 JR NZ,ZZLOO1 12720 CALL UPDSCO 12730 RET 12740 GREATS 12750 LD A,(IX+7) 12760 SUB (IY+22) 12770 RET NZ 12780 LD A,(IX+8) 12790 SUB (IY+21) 12800 RET NZ 12810 LD A,(IX+9) 12820 SUB (IY+20) 12830 RET 12840 ENTHIG 12850 LD IX,HIGTAB 12860 LD B,10 12870 ENTLO1 12880 CALL GREATS 12890 JR C,DOENT 12900 LD DE,10 12910 ADD IX,DE 12920 DJNZ ENTLO1 12930 RET 12940 DOENT 12950 DEC B 12960 PUSH BC 12970 PUSH IX 12980 POP HL 12990 JR Z,NOSCRO 13000 LD DE,HIGTAB+99 13010 LD HL,HIGTAB+89 13020 DOELO2 13030 PUSH BC 13040 LD BC,10 13050 LDDR 13060 POP BC 13070 DJNZ DOELO2 13080 INC HL 13090 NOSCRO 13100 PUSH HL 13110 LD D,H 13120 LD E,L 13130 INC DE 13140 LD (HL),"@" 13150 LD BC,6 13160 LDIR 13170 INC HL 13180 LD A,(IY+22) 13190 LD (HL),A 13200 INC HL 13210 LD A,(IY+21) 13220 LD (HL),A 13230 INC HL 13240 LD A,(IY+20) 13250 LD (HL),A 13260 CALL CLS 13270 CALL DRHSCO 13280 CALL DRATRI 13290 CALL DRALIN 13300 CALL DRAHST 13310 POP HL 13320 POP BC 13330 LD C,B 13340 LD B,0 13350 SLA C 13360 LD IX,NASTTA 13370 ADD IX,BC 13380 LD E,(IX) 13390 LD D,(IX+1) 13400 PUSH DE 13410 PUSH HL 13420 CALL RESMES 13430 LD DE,MESSA2 13440 LD (MESSTO),DE 13450 RES 5,(IY+16) 13460 SET 6,(IY+16) 13470 POP HL 13480 POP DE 13490 CALL TYPNAM 13500 RES 6,(IY+16) 13510 CALL EFFECT 13520 RET 13530 NASTTA 13540 DEFW 20576+9,20544+9,20512+9 13550 DEFW 20480+9,18656+9,18624+9 13560 DEFW 18592+9,18560+9,18528+9 13570 DEFW 18496+9 13580 TYPNAM 13590 CALL RELALL 13600 LD B,7 13610 TYPLO1 13620 PUSH BC 13630 PUSH HL 13640 PUSH DE 13650 CALL GETPOR 13660 CALL GETCHA 13670 POP DE 13680 POP HL 13690 POP BC 13700 CP 106 13710 RET Z 13720 CP 108 13730 JR Z,TYPLO1 13740 CP 109 13750 JR Z,DELETE 13760 CP 91 13770 JR Z,DELETE 13780 LD (HL),A 13790 PUSH BC 13800 PUSH HL 13810 PUSH DE 13820 EX DE,HL 13830 CALL PRICHA 13840 POP DE 13850 POP HL 13860 POP BC 13870 INC HL 13880 INC DE 13890 PUSH BC 13900 CALL RELALL 13910 POP BC 13920 DJNZ TYPLO1 13930 TYPLO2 13940 PUSH HL 13950 PUSH DE 13960 PUSH BC 13970 CALL GETPOR 13980 CALL GETCHA 13990 POP BC 14000 POP DE 14010 POP HL 14020 CP 106 14030 RET Z 14040 CP 109 14050 JR Z,DELETE 14060 CP 91 14070 JR Z,DELETE 14080 JR TYPLO2 14090 DELETE 14100 LD A,B 14110 CP 7 14120 JR Z,TYPLO1 14130 LD A,64 14140 DEC HL 14150 DEC DE 14160 LD (HL),A 14170 PUSH HL 14180 PUSH DE 14190 PUSH BC 14200 EX DE,HL 14210 CALL PRICHA 14220 POP BC 14230 POP DE 14240 POP HL 14250 INC B 14260 PUSH BC 14270 CALL RELALL 14280 POP BC 14290 JP TYPLO1 14300 RANBLO 14310 LD HL,22528+32+8 14320 LD C,22 14330 LD DE,16 14340 RANOUT 14350 LD B,16 14360 RANIN 14370 PUSH BC 14380 RANIN2 14390 CALL RANDOM 14400 LD B,A 14410 AND %00111000 14420 JR Z,RANIN2 14430 RES 7,B 14440 LD (HL),B 14450 POP BC 14460 INC HL 14470 DJNZ RANIN 14480 ADD HL,DE 14490 DEC C 14500 JR NZ,RANOUT 14510 RET 14520 EFFECT 14530 CALL CLS 14540 LD B,10 14550 EFFLO1 14560 PUSH BC 14570 CALL RANBLO 14580 POP BC 14590 LD C,60 14600 EFFLO2 14610 DEC C 14620 JR NZ,EFFLO2 14630 DJNZ EFFLO1 14640 CLSCOL 14650 LD HL,22528+32+8 14660 LD B,22 14670 CLCOLL 14680 PUSH BC 14690 LD D,H 14700 LD E,L 14710 INC DE 14720 LD (HL),0 14730 LD BC,15 14740 LDIR 14750 LD BC,17 14760 ADD HL,BC 14770 POP BC 14780 DJNZ CLCOLL 14790 RET 14800 MESSA1 14810 DEFM "TRIBLOX@BY@MIKE@DOWMAN@\dd^@@@" 14820 DEFM "@@@@ARRANGE@THE@BLOCKS@TO@MAKE@" 14830 DEFM "LINES@OF@THREE@OR@MORE@" 14840 DEFM "WHICH@WILL@THEN@DISAPPEAR@" 14850 DEFM "ALLOWING@THE@BLOCKS@ABOVE@" 14860 DEFM "TO@FALL@DOWNi@YOU@MUST@" 14870 DEFM "COMPLETE@AT@LEAST@][@LINES@" 14880 DEFM "ON@EACH@OF@THE@\]@LEVELS@" 14890 DEFM "BEFORE@BEING@ALLOWED@TO@" 14900 DEFM "PROCEED@TO@THE@NEXT@ONEi@" 14910 DEFM "ON@LATER@LEVELS@WATCH@OUT@FOR@" 14920 DEFM "SQUARES@WHICH@MUST@BE@MADE@" 14930 DEFM "INTO@BIGGER@SQUARES@OF@]@BY@]@" 14940 DEFM "AND@DIAMONDS@WHICH@MUST@NOT@BE@" 14950 DEFM "ALLOWED@TO@FALL@DOWN@OR@THEY@" 14960 DEFM "WILL@ADD@A@WHOLE@EXTRA@ROW@" 14970 DEFM "OF@BLOCKSi@TO@MAKE@THINGS@A@" 14980 DEFM "BIT@EASIER@THERE@ARE@ALSO@" 14990 DEFM "BOMBS@WHICH@WILL@BLOW@UP@ANY@" 15000 DEFM "BLOCK@YOU@WANT@AND@CRUSHERS@" 15010 DEFM "WHICH@WILL@DESTROY@ANY@" 15020 DEFM "ORDINARY@BLOCK@UNLUCKY@" 15030 DEFM "ENOUGH@TO@GET@IN@THEIR@WAYi@" 15040 DEFM "SUCCESS@CAN@ONLY@BE@ACHIEVED@" 15050 DEFM "WITH@LIGHTNING@FAST@REFLEXES@" 15060 DEFM "COMBINED@WITH@GREAT@SKILLi@@" 15070 DEFM "@@@@@@@@@" 15080 DEFB 255 15090 MESWIN 15100 DEFS 136 15110 RESMES 15120 LD (IY+67),1 15130 LD HL,MESWIN 15140 LD DE,MESWIN+1 15150 LD BC,135 15160 LD (HL),0 15170 LDIR 15180 LD (IY+64),1 15190 SET 5,(IY+16) 15200 RET 15210 SCRIT1 15220 DEC (IY+67) 15230 RET NZ 15240 LD (IY+67),21 15250 ANYME1 15260 DEC (IY+64) 15270 JR NZ,SCRANY 15280 LD (IY+64),8 15290 CALL SCRPRI 15300 LD DE,(MESSTO) 15310 LD A,(DE) 15320 CP 255 15330 JR NZ,SCR12 15340 LD DE,MESSA1 15350 LD (MESSTO),DE 15360 SCR12 15370 CALL SCRPRI 15380 LD DE,(MESSTO) 15390 INC DE 15400 LD (MESSTO),DE 15410 SCRANY 15420 LD C,8 15430 LD HL,MESWIN+135 15440 SCRLO1 15450 SLA (HL) 15460 DEC HL 15470 LD B,16 15480 SCRLO2 15490 RL (HL) 15500 DEC HL 15510 DJNZ SCRLO2 15520 DEC C 15530 JR NZ,SCRLO1 15540 ;NOW COPY TO SCREEN 15550 INC HL 15560 LD DE,20640+1536+8 15570 LD B,8 15580 SCRLO3 15590 PUSH BC 15600 PUSH DE 15610 LD BC,16 15620 LDIR 15630 INC HL 15640 POP DE 15650 CALL STEPSC 15660 POP BC 15670 DJNZ SCRLO3 15680 RET 15690 SCRPRI 15700 LD HL,(MESSTO) 15710 LD E,(HL) 15720 LD D,0 15730 SLA E 15740 RL D 15750 SLA E 15760 RL D 15770 SLA E 15780 RL D 15790 LD HL,CSET-512 15800 ADD HL,DE 15810 LD DE,MESWIN+16 15820 LD B,8 15830 SCPRL3 15840 LD A,(HL) 15850 LD (DE),A 15860 INC HL 15870 PUSH HL 15880 LD HL,17 15890 ADD HL,DE 15900 EX DE,HL 15910 POP HL 15920 DJNZ SCPRL3 15930 RET 15940 IT2 15950 DEC (IY+67) 15960 RET NZ 15970 LD (IY+67),191 15980 JP ANYME1 15990 IT3 16000 DEC (IY+67) 16010 RET NZ 16020 LD (IY+67),66 16030 JP ANYME1 16040 IT4 16050 DEC (IY+67) 16060 RET NZ 16070 LD (IY+67),201 16080 JP ANYME1 16090 IT5 16100 DEC (IY+67) 16110 RET NZ 16120 LD (IY+67),57 16130 JP ANYME1 16140 MESSA2 16150 DEFM "CONGRATULATIONS@@@@@YOU@HAVE@ACHIEVED@A@HIGH@" 16160 DEFM "SCOREi@PLEASE@ENTER@YOUR@NAMEi@@@@@@@@@@@" 16170 DEFB 255 16180 SCRIT2 16190 DEC (IY+67) 16200 RET NZ 16210 LD (IY+67),21 16220 ANYME2 16230 DEC (IY+64) 16240 JP NZ,SCRANY 16250 LD (IY+64),8 16260 LD DE,(MESSTO) 16270 LD A,(DE) 16280 CP 255 16290 JR NZ,S2CR12 16300 LD DE,MESSA2 16310 LD (MESSTO),DE 16320 S2CR12 16330 CALL SCRPRI 16340 LD DE,(MESSTO) 16350 INC DE 16360 LD (MESSTO),DE 16370 JP SCRANY 16380 I2T2 16390 DEC (IY+67) 16400 RET NZ 16410 LD (IY+67),66 16420 JP ANYME2 16430 DRAOVE 16440 CALL OVECOL 16450 CALL OVEGRA 16460 RET 16470 OVECOL 16480 LD HL,9*32+22528+10 16490 LD (HL),70 16500 LD DE,9*32+22528+11 16510 LD BC,11 16520 LDIR 16530 LD HL,10*32+22528+10 16540 LD B,4 16550 OVELOP 16560 PUSH BC 16570 LD (HL),70 16580 INC HL 16590 LD (HL),68 16600 LD D,H 16610 LD E,L 16620 INC DE 16630 LD BC,9 16640 LDIR 16650 INC HL 16660 LD (HL),70 16670 LD BC,21 16680 ADD HL,BC 16690 POP BC 16700 DJNZ OVELOP 16710 LD (HL),70 16720 LD DE,14*32+22528+11 16730 LD BC,11 16740 LDIR 16750 RET 16760 OVEGRA 16770 LD HL,OVEBIN 16780 LD DE,18464+10 16790 LD B,6*8 16800 GAMOLO 16810 PUSH BC 16820 PUSH DE 16830 LD BC,12 16840 LDIR 16850 POP DE 16860 CALL STEPSC 16870 POP BC 16880 DJNZ GAMOLO 16890 RET
SOUND.TEX
10 CRUSOU 20 RES 4,(IY+18) 30 LD HL,200 40 LD BC,254 50 XOR A 60 PUSH AF 70 LOOP 80 LD DE,30 90 POP AF 100 OUT (C),A 110 XOR %00010000 120 PUSH AF 130 LOOP2 140 DEC DE 150 LD A,D 160 OR E 170 JR NZ,LOOP2 180 DEC HL 190 LD A,H 200 OR L 210 JR NZ,LOOP 220 POP AF 230 RET 240 BOMSOU 250 LD HL,200 260 LD BC,254 270 XOR A 280 PUSH AF 290 BSLOOP 300 LD D,H 310 SLA L 320 LD E,L 330 SRL L 340 POP AF 350 OUT (C),A 360 XOR %00010000 370 PUSH AF 380 BSLOP2 390 DEC DE 400 LD A,D 410 OR E 420 JR NZ,BSLOP2 430 DEC HL 440 LD A,H 450 OR L 460 JR NZ,BSLOOP 470 POP AF 480 RET 490 SQUSOU 500 RES 4,(IY+18) 510 RES 2,(IY+18) 520 RES 3,(IY+18) 530 LD HL,200 540 LD BC,254 550 XOR A 560 PUSH AF 570 SQLOOP 580 LD D,H 590 LD E,L 600 POP AF 610 OUT (C),A 620 XOR %00010000 630 PUSH AF 640 QLOOP2 650 DEC DE 660 LD A,D 670 OR E 680 JR NZ,QLOOP2 690 DEC HL 700 LD A,H 710 OR L 720 JR NZ,SQLOOP 730 POP AF 740 RET 750 DEASOU 760 LD HL,700 770 LD BC,254 780 LD DE,150 790 XOR A 800 DELOOP 810 INC DE 820 PUSH DE 830 OUT (C),A 840 XOR %00010000 850 LD (IY+7),A 860 ELOOP2 870 DEC DE 880 LD A,D 890 OR E 900 JR NZ,ELOOP2 910 POP DE 920 DEC HL 930 LD A,H 940 OR L 950 LD A,(IY+7) 960 JR NZ,DELOOP 970 RET
Design Documents
These are the original design documents I used when writing the game – they might help you in making sense of the above source code.
Variables
In machine code, variables are just memory locations you use to store some information. They were normally one byte (0 to 255 or -128 to 127) or two bytes long (0 to 65535), but some were flags, in which case just one bit (0 or 1) was used for each flag, and eight could be fitted in one byte. I set the iy register to point at the first variable, so all the variables could be accessed either using iy + the offset to the variable, or the variable’s address (represented in the assembly code with the textual labels given here). The names of the variables and the brief descriptions give a clue to what their purpose is, but in many cases you would need to look at the code closely to see exactly how they are used.




Subroutines
The above code makes major use of subroutines, mainly to break the code into modules with names and so make it much easier to write, test and understand. Here is a list of the subroutines and brief descriptions of what they all do. You can find all of these routines in the source code above.








Memory Map and Workspaces
The following document specifies where the data for game is located in memory. First is the graphic that is shown when the game is over, then the large TRIBLOX letters that appear on top of the main menu. Next is the colour data for the high score table, followed by the colours for the large TRIBLOX letters. Levnum are the large numbers indicating which level you are on. Cset is the character set used in Triblox (the default Spectrum one looked a bit clunky). Finally at 59,000 are the graphics for the blocks used in the game.

Here we have an explanation of the four main workspaces used in the game. Workspace A holds the graphics for all the blocks that have landed, while C has the colours for the same. Workspaces A and C are copied to B and D every frame of the game, and the moving blocks are added to B and D before they are then copied to the screen.

Here is more detail about workspace C: it is made up of rows of 16 attribute bytes separated by 255 to mark the edge of the play area. All the checks of whether a line has been formed are done using workspace D; as each type of block has a different colour, the colour data alone is sufficient to identify blocks.

Character Set
Triblox did not use a full character set – only the capital letters, nunbers < > and space were defined. As a result, not all characters received their usual ASCII codes, which is why spaces in the textual data within the source code are written with @.

Levels
This shows the speeds of each level, as well as what new kinds of blocks were added (or removed) at each level. The distance between rows of blocks is 16 pixels. Level 1 (that the code actually calls level 0) moves the blocks down in 16 one-pixel increments. On level 2, the speed is doubled, with the blocks moving down in 8 two-pixel increments. By level 6, the blocks move down in six increments, but as 16 doesn’t divide by six, these have to be 3, 3, 2, 3, 3, 2. If you look closely, you can see that the movement is a little bit uneven on some levels.

This describes a feature that I added to try to avoid players becoming frustrated. You won’t advance to a higher level unless there are 20 or fewer blocks on the screen. This is supposed to prevent what can be an annoying situation of advancing to a harder level when the blocks are already piled high, which will usually result in you losing very quickly. In practice though, this means that you can get a really high score by keeping at least 20 blocks on the screen and playing for a very long time on a lower level. If I wrote Triblox again I would take this out.

Screen Layouts and Memory Maps
This diagram shows the layout of the left hand panel, and the address of each part in memory.

This shows the same for the right hand panel. Incidentally, the next blocks indicator was only added to use up what was otherwise redundant space.

Here is the memory map and layout for the main menu.

And here is the same for the redefine keys page.

This is the layout for the high score table (this time with no memory locations indicated).

And finally, the same for the game completed screen. Whether anyone except me has ever seen this is questionable, as the last couple of levels are very very hard. I once managed to complete the game, but only by using the built-in cheat mode (yes there is one – can you find in the source code above?) to start on the last level.

The Source Code on a Spectrum +3 Disk
Below you can down load a .dsk file containing the Triblox source code as .TEX files as well as the game itself. You should be able to use this with any Spectrum emulator that supports +3 disks – I recommend the excellent (and free) Fuse.
To use this virtual disk, first put Fuse into +3 mode (Machine–>Select–>Spectrum +3) then open it using the Media menu (Media–>Disk–>+3–>Drive A:–>Insert…). Next go into +3 Basic (down arrow and enter) and type cat to see what is on the disk. If you type load”triblox” the game will load from disk just as it would have on a real Spectrum. (Use control and p to get “) Besides the source code, there are three other files on the disk. WHOLE is the loader screen – try Load”whole”screen$. CODE1 is the assembled version of the source code above, while CODE2 is graphics data as specified above in Memory Map and Workspaces.
Assembling the Code Yourself
If you would like to assemble the code yourself, you will need HiSoft’s Devpac GENP3 assembler. This was reputed to be the best assembler for the Spectrum – though not the one professionals used. I understand that most Spectrum games were actually written on much more powerful computers with better software. GENP3 is the version for the Spectrum +3, and I used the GENP351 variant which had 51 columns of text across the screen instead of the Spectrum’s usual 32. You can download a snapshot of the Spectrum with GENP351 already loaded and running below.
You can load this into Fuse using File–>Open… – this way the Triblox disk should also remain open. If you now type H, GENP351 will give you some (very brief) help. You can also type B to return to BASIC. GENP351 can be loaded anywhere in memory that there is free space – the version above is loaded to address 25,000, so if you exit in this way you can return to the GENP351 by typing RANDOMIZE USR 25000.
To load the code for assembly type: g,,code.tex
You can now list the section of code from, say, line 1 to 100 by typing L1,100
If you just typed L it would list the whole code and you might be waiting a while…
To assemble the code and save it to the ram disk, first type type c and then enter 1000 to set the macro buffer size, and then type a16,5000,m:code1 (Use control and z to get : ).
Assembly will take a couple of minutes. Once it is done, type b to exit GENP351. Now type merge”triblox” – this will load in the Triblox loader program but not run it. Edit the load”code1″ to read load”m:code1″code 25000 so it uses the code you have just assembled and not the code from disk, and also so that it places it at the right point in memory.
Finally type run and Triblox should load and run.
Now why not try making your own modifications to the code?
Triblox on the Web
You can find Triblox at World of Spectrum here and at Spectrum Computing here. To play it in your web browser without downloading it click here.
2 responses to “Triblox”
My first impression of this website is マイク アタマおかしくなっちゃったんじゃないの? Soon I will decipher all those things…
A very impressive overview of your coding process and software used. Interesting to see your written notes also. I only got so far as a choose your own adventure game, written in BASIC, called Dracula…