Triblox


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”

  1. My first impression of this website is マイク アタマおかしくなっちゃったんじゃないの? Soon I will decipher all those things…

  2. 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…

Leave a Reply to Kay Takahashi Conomy Cancel reply

Your email address will not be published. Required fields are marked *