0000- 5 0000- 6 ; ***************************************************************************** 0000- 7 ; MK14 Tetris 0000- 8 ; Rev Still in development 0000- 9 ; Written by Ian Murray December 2023 0000- 10 ; Loads into 0x0400 and 0x0B00 0000- 11 ; Executes at 0x0400 0000- 12 ; ***************************************************************************** 0000- 13 0000- 14 ;Game Constants 0051- 15 PROM .EQ 0x0051 0185- 16 MK14_KEYS .EQ 0x0185 ;Address of keyboard and display routine in SCIOSv3 0200- 17 DISP_GR .EQ 0x0200 ;Start of VDU frame store for graphics 0241- 18 CLEAR_SCREEN .EQ 0x0241 ;Start Point for Clear Screan 0371- 19 CHECK_LINES .EQ 0x0371 ;Used to check completed lines 0350- 20 DISP_TEXT .EQ 0x0350 ;Display Text after load 027C- 21 DISP_SCO .EQ 0x027C ;Display Score 02DE- 22 DISP_LEV .EQ 0x02DE ;Display Level 033E- 23 DISP_LIN .EQ 0x033E ;Display Lines 037C- 24 DISP_NEXT_BOX .EQ 0x037C ;Location of Next Box on Screen 03E0- 25 DISP_TEST .EQ 0x03E0 ;Display Test 0400- 26 PROG1 .EQ 0x0400 ;Start of program memory 0B00- 27 PROG2 .EQ 0x0B00 ;Extended RAM 256 bytes 0880- 28 PROG3 .EQ 0x0880 ;I/O chip RAM 128 bytes 0000- 29 0D00- 30 KEYBOARD .EQ 0x0D00 ;Keyboard Pointer 0000- 31 07E0- 32 VAR_07E0 .EQ 0x07E0 ;GAME OVER text 07F0- 33 VAR_07F0 .EQ 0x07F0 ;PRESS GO TO START text 0F00- 34 VAR_0F00 .EQ 0x0F00 ;Variables storage area 0F60- 35 VAR_0F60 .EQ 0x0F60 ;Object shape 0F70- 36 VAR_0F70 .EQ 0x0F70 ;Object Bit shape 1st Byte 0F90- 37 VAR_0F90 .EQ 0x0F90 ;Object Bit shape 2nd Byte 0FB0- 38 VAR_0FB0 .EQ 0x0FB0 ;Chr to be used for Object 0FB7- 39 VAR_0FB7 .EQ 0x0FB7 ;Scores for Single, Double etc 0FC0- 40 VAR_0FC0 .EQ 0x0FC0 ;Random sequence 0000- 41 0000- 42 ;1 = True 0000- 43 ;0 = False 0000- 44 0F00- 45 .OR VAR_0F00 ; Variables 0F00- 46 0020- 47 True_1 .EQ 0x20 ;Set to True 1 0021- 48 False_0 .EQ 0x21 ;Set to False 0 0022- 49 OBJ_P .EQ 0x22 ;Used to point to object at 0F60 0023- 50 OBJ_COL .EQ 0x23 0024- 51 OBJ_ROW .EQ 0x24 0025- 52 OBJ_H .EQ 0x25 0026- 53 OBJ_L .EQ 0x26 0027- 54 OBJ_OH .EQ 0x27 ;Used to store original H location of object 0028- 55 OBJ_OL .EQ 0x28 ;Used to store original H location of object 0029- 56 OBJ_NUM_OLD .EQ 0x29 002A- 57 OBJ_NUM .EQ 0x2A 002B- 58 OBJ_NUM_NEXT .EQ 0x2B 002C- 59 OBJ_BYTE .EQ 0x2C 002D- 60 NOT_USED .EQ 0x2D ;Used to confirm move possible 002E- 61 OBJ_1_BYTE .EQ 0x2E 002F- 62 OBJ_2_BYTE .EQ 0x2F 0030- 63 OBJ_NUMBER .EQ 0x30 0031- 64 OBJ_DELETE .EQ 0x31 0032- 65 OBJ_CHR .EQ 0x32 0033- 66 OBJ_ORIENT .EQ 0x33 ;0 Up, 1 Right, 2 Down, 3 Left 0034- 67 OBJ_WIDTH .EQ 0x34 0035- 68 KEYPRESS .EQ 0x35 0036- 69 KEY_PRESSED .EQ 0x36 0037- 70 X_MOVE .EQ 0x37 0038- 71 SCORE_H .EQ 0x38 0039- 72 SCORE_T .EQ 0x39 003A- 73 SCORE_U .EQ 0x3A 003B- 74 SCORE .EQ 0x3B 003C- 75 SCORE_SUB .EQ 0x3C 003D- 76 OBJ_NEXT .EQ 0x3D 003E- 77 LINE_COMP .EQ 0x3E ;True (1) or False (0) Line Complete 003F- 78 LINE_COMP_H .EQ 0x3F ;Number of lines complete High Byte 0040- 79 LINE_COMP_L .EQ 0x40 ;Number of lines complete Low Byte 0041- 80 LINE_COMP_SUB .EQ 0x41 0042- 81 MOVE_COUNT .EQ 0x42 0043- 82 LINES_DELETED .EQ 0x43 0044- 83 LINES_DELETED_TEMP .EQ 0x44 0045- 84 TEMP_1 .EQ 0x45 0046- 85 TEMP_X .EQ 0x46 ; General purpose counter 0047- 86 TEMP_Y .EQ 0x47 0048- 87 TEMP_Z .EQ 0x48 0049- 88 DELAY_LEVEL .EQ 0x49 004A- 89 DELAY_LOOP .EQ 0x4A 004B- 90 LEVEL .EQ 0x4B 004C- 91 MOVE_OK .EQ 0x4C ;Used to confirm move possible 004D- 92 RND .EQ 0x4D ;Random number to select next object 004E- 93 SPACE_CHR .EQ 0x4E ;0x20 for next 0x00 for play area 004F- 94 KEY_COUNT .EQ 0x4F 0050- 95 CHAR .EQ 0x50 0051- 96 ROW .EQ 0x51 0052- 97 CNT .EQ 0x52 0053- 98 PUSHED .EQ 0x53 0F00- 99 0F00- 100 0F00- 101 .OR VAR_0F00 0F00-00 6D 30 31 78 7B 78 00 102 .HS 006D3031787B7800 0F08- 103 07E0- 104 .OR VAR_07E0 07E0-07 01 0D 05 20 0F 16 05 12 20 20 20 20 20 20 10 105 .HS 07010D05200F16051220202020202010 ;Game Over 07F0-12 05 13 13 07 0F 20 14 0F 13 14 01 12 14 20 00 106 .HS 12051313070F20140F13140112142000 ;PRESS GO TO START 0F60- 107 .OR VAR_0F60 0F60-2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 2E 108 .HS 2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E ;Object Shape Store 0F70- 109 0F70- 110 .OR VAR_0F70 0F70- 111 ; Byte codes for each object shape 0F70-60 30 10 70 70 30 F0 FF 112 .HS 603010707030F0FF 0F78-10 20 30 30 20 30 11 FF 113 .HS 10203030203011FF 0F80-00 00 00 00 20 30 F0 FF 114 .HS 000000002030F0FF 0F88-10 20 20 10 10 30 11 FF 115 .HS 10202010103011FF 0F90- 116 0F90-03 06 07 01 02 03 00 FF 117 .HS 03060701020300FF 0F98-23 13 11 22 23 03 11 FF 118 .HS 23131122230311FF 0FA0-36 63 47 74 07 03 00 FF 119 .HS 36634774070300FF 0FA8-23 13 32 31 13 03 11 FF 120 .HS 23133231130311FF 0FB0- 121 0FB0- 122 .OR VAR_0FB0 0FB0-02 24 11 15 18 19 1A 08 123 .HS 0224111518191A08 ;Chr used for objects 0FB8- 124 ;.OR VAR_0FB8 0FB8-40 00 00 00 00 01 03 12 125 .HS 4000000000010312 ;Scores for level 0 0FC0- 126 0FC0- 127 .OR VAR_0FC0 0FC0-00 01 02 03 04 05 06 03 06 02 00 04 05 01 05 01 128 .HS 00010203040506030602000405010501 0FD0-03 02 04 00 06 03 01 06 00 04 05 02 00 02 01 03 129 .HS 03020400060301060004050200020103 0FE0-05 04 06 05 01 03 01 04 00 06 06 01 05 04 03 02 130 .HS 05040605010301040006060105040302 0FF0-00 00 131 .HS 0000 0FF2- 132 0200- 133 .OR DISP_GR 0200-20 0D 0B 31 34 20 14 05 14 12 09 13 20 16 31 20 134 .HS 200D0B31342014051412091320163120 ; MK14 TETRIS V1 0210-20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 135 .HS 20202020202020202020202020202020 0220-20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 136 .HS 20202020202020202020202020202020 0230-63 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 137 .HS 63232323232323232323232323232323 ;################ 0240-23 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 138 .HS 23202020202020202020202320202020 ;# # 0250-23 20 20 20 20 0D 0F 16 05 20 20 23 20 13 03 0F 139 .HS 23202020200D0F16052020232013030F ;# Move # SCO 0260-23 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 140 .HS 23202020202020202020202320202020 ;# # 0270-23 20 32 3D 04 0F 17 0E 20 20 20 23 20 20 20 20 141 .HS 2320323D040F170E2020202320202020 ;# 2=DOWN # 0280-23 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 142 .HS 23202020202020202020202320202020 ;# # 0290-23 20 34 3D 0C 05 06 14 20 20 20 23 20 20 20 20 143 .HS 2320343D0C0506142020202320202020 ;# 4=LEFT ##### 02A0-23 20 20 20 20 20 20 20 20 20 20 23 23 23 23 23 144 .HS 23202020202020202020202323232323 ;# # 02B0-23 20 36 3D 12 09 07 08 14 20 20 23 20 20 20 20 145 .HS 2320363D120907081420202320202020 ;# 6=RIGHT # LEV 02C0-23 20 20 20 20 20 20 20 20 20 20 23 20 0C 05 16 146 .HS 232020202020202020202023200C0516 ;# # 02D0-23 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 147 .HS 23202020202020202020202320202020 ;# # 02E0-23 20 20 20 12 0F 14 01 14 05 20 23 20 20 20 20 148 .HS 23202020120F14011405202320202020 ;# ROTATE # 02F0-23 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 149 .HS 23202020202020202020202320202020 ;# # 0300-23 20 03 3D 12 09 07 08 14 20 20 23 23 23 23 23 150 .HS 2320033D120907081420202323232323 ;# C=RIGHT ##### 0310-23 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 151 .HS 23202020202020202020202320202020 ;# # 0320-23 20 04 3D 0C 05 06 14 20 20 20 23 20 0C 09 0E 152 .HS 2320043D0C05061420202023200C090E ;# D=LEFT # LIN 0330-23 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 153 .HS 23202020202020202020202320202020 ;# # 0340-23 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 154 .HS 23202020202020202020202320202020 ;# # 0350-23 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 155 .HS 23202020202020202020202320202020 ;# # 0360-23 20 20 20 20 20 20 20 20 20 20 23 23 23 23 23 156 .HS 23202020202020202020202323232323 ;# ##### 0370-23 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 157 .HS 23202020202020202020202320202020 ;# # 0380-23 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 158 .HS 23202020202020202020202320202020 ;# # 0390-23 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 159 .HS 23202020202020202020202320202020 ;# # 03A0-23 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 160 .HS 23202020202020202020202320202020 ;# # 03B0-23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 161 .HS 23232323232323232323232323232323 ;################ 03C0-20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 162 .HS 20202020202020202020202020202020 03D0-20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 163 .HS 20202020202020202020202020202020 03E0-20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 164 .HS 20202020202020202020202020202020 03F0-20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 165 .HS 20202020202020202020202020202020 0400- 166 0400- 167 0400- 168 .OR PROG1 0400- 169 0400- 170 ENTRY: 0400- 171 ;=================================================================== 0400- 172 ;P2 is variables pointer 0F20 0400- 173 ;=================================================================== 0400- 174 0400-C4 0F 175 ( 10) LDI VAR_0F00/256 0402-36 176 ( 8) XPAH P2 0403-C4 00 177 ( 10) LDI VAR_0F00\256 0405-32 178 ( 8) XPAL P2 0406- 179 0406- 180 ;========================== Wait For GO Pressed ======================= 0406- 181 NEW_GAME: 0406- 182 0406- 183 GET_KEY_1: 0406-02 184 ( 5) CCL 0407-C4 01 37 C4 84 33 3F 185 JS P3,MK14_KEYS 040E-08 186 ( 5) NOP 040F-08 187 ( 5) NOP 0410-01 188 ( 7) XAE 0411-CA 35 189 ( 18) ST KEYPRESS(2) 0413-E4 22 190 ( 10) XRI 0x22 ;Check for GO Key 0415-9C EF 191 (9/11) JNZ GET_KEY_1 0417- 192 0417- 193 ;========================== Clear Screen ============================== 0417-C4 07 37 C4 B1 33 3F 194 JS P3,CLEAR_PLAY_AREA 041E- 195 ;===================== Initialise variables =========================== 041E-C4 01 196 ( 10) LDI 0x01 0420-CA 20 197 ( 18) ST True_1(P2) 0422-CA 42 198 ( 18) ST MOVE_COUNT(P2) ;Required for new games to start 0424-C4 00 199 ( 10) LDI 0x00 0426-CA 21 200 ( 18) ST False_0(P2) 0428- 201 0428-CA 36 202 ( 18) ST KEY_PRESSED(P2) 042A-CA 45 203 ( 18) ST TEMP_1(P2) 042C-CA 3F 204 ( 18) ST LINE_COMP_H(P2) 042E-CA 40 205 ( 18) ST LINE_COMP_L(P2) 0430-CA 38 206 ( 18) ST SCORE_H(P2) 0432-CA 39 207 ( 18) ST SCORE_T(P2) 0434-CA 3A 208 ( 18) ST SCORE_U(P2) 0436-CA 4B 209 ( 18) ST LEVEL(P2) 0438- 210 0438-C4 0A 211 ( 10) LDI 0x0A 043A-CA 49 212 ( 18) ST DELAY_LEVEL(P2) ;New Game starting delay_level 043C- 213 043C-C4 0F 214 ( 10) LDI VAR_0FC0/256 043E-35 215 ( 8) XPAH P1 043F-C4 C0 216 ( 10) LDI VAR_0FC0\256 0441-31 217 ( 8) XPAL P1 ;Set P1 to Random Object List 0442- 218 0442-C2 4D 219 ( 18) LD RND(P2) 0444-D4 1F 220 ( 10) ANI 0x1F 0446-F4 07 221 ( 11) ADI 0x07 0448-CA 4D 222 ( 18) ST RND(P2) 044A-01 223 ( 7) XAE 044B-C1 80 224 ( 18) LD -128(P1) 044D-CA 2B 225 ( 18) ST OBJ_NUM_NEXT(P2) 044F-BA 4D 226 ( 22) DLD RND(P2) 0451-01 227 ( 7) XAE 0452-C1 80 228 ( 18) LD -128(P1) 0454-CA 30 229 ( 18) ST OBJ_NUMBER(P2) 0456- 230 0456-C4 05 37 C4 E3 33 3F 231 JS P3,DISPLAY_SCORES 045D- 232 ;--------------------------------------------------------------------- 045D- 233 NEXT_OBJECT: 045D- 234 045D-C4 03 235 ( 10) LDI DISP_NEXT_BOX/256 045F-35 236 ( 8) XPAH P1 0460-C4 7C 237 ( 10) LDI DISP_NEXT_BOX\256 0462-31 238 ( 8) XPAL P1 ;Set P1 to Next Box Location 0463- 239 0463-C4 06 37 C4 FB 33 3F 240 JS P3,UPDATE_OBJECT_NEXT 046A-C4 0B 37 C4 A7 33 3F 241 JS P3,PLACE_OBJECT_NEXT 0471- 242 0471- 243 ;------------------------------------------------------------------- 0471-C4 02 244 ( 10) LDI 0x02 0473-CA 25 245 ( 18) ST OBJ_H(P2) 0475-C4 45 246 ( 10) LDI 0x45 0477-CA 26 247 ( 18) ST OBJ_L(P2) ;Set starting postion of new object 0479- 248 0479-C2 49 249 ( 18) LD DELAY_LEVEL(P2) 047B-CA 4A 250 ( 18) ST DELAY_LOOP(P2) 047D- 251 047D-C4 00 252 ( 10) LDI 0x00 047F-CA 3B 253 ( 18) ST SCORE(P2) 0481-CA 33 254 ( 18) ST OBJ_ORIENT(P2) 0483-CA 42 255 ( 18) ST MOVE_COUNT(P2) 0485-CA 41 256 ( 18) ST LINE_COMP_SUB(P2) 0487- 257 0487-C4 01 258 ( 10) LDI 0x01 0489-CA 3C 259 ( 18) ST SCORE_SUB(P2) 048B- 260 048B-C4 10 261 ( 10) LDI 0x10 048D-CA 37 262 ( 18) ST X_MOVE(P2) 048F- 263 048F-C2 30 264 ( 18) LD OBJ_NUMBER(P2) 0491-CA 2A 265 ( 18) ST OBJ_NUM(P2) 0493- 266 0493-C4 07 37 C4 0D 33 3F 267 JS P3,UPDATE_OBJECT 049A-C4 0B 37 C4 B5 33 3F 268 JS P3,PLACE_OBJECT 04A1- 269 04A1- 270 ;---------------------------------------------------------------------- 04A1- 271 MOVE_MORE: 04A1-C4 0B 37 C4 B1 33 3F 272 JS P3,DELETE_OBJECT ;Delete and Place object use same function 04A8-C4 07 37 C4 0D 33 3F 273 JS P3,UPDATE_OBJECT 04AF- 274 04AF- 275 ;---------------------------------------------------------------------- 04AF- 276 CHECK_OBJECT_CAN_MOVE: 04AF-C2 20 277 ( 18) LD True_1(P2) 04B1-CA 4C 278 ( 18) ST MOVE_OK(P2) ;Set Move OK to True 04B3- 279 04B3-02 280 ( 5) CCL 04B4-C2 26 281 ( 18) LD OBJ_L(P2) 04B6-CA 28 282 ( 18) ST OBJ_OL(P2) 04B8-F2 37 283 ( 19) ADD X_MOVE(P2) 04BA-CA 26 284 ( 18) ST OBJ_L(P2) 04BC-C2 25 285 ( 18) LD OBJ_H(P2) 04BE-CA 27 286 ( 18) ST OBJ_OH(P2) 04C0-F4 00 287 ( 11) ADI 0x00 04C2-CA 25 288 ( 18) ST OBJ_H(P2) 04C4- 289 04C4-C2 25 290 ( 18) LD OBJ_H(P2) 04C6-35 291 ( 8) XPAH P1 04C7-C2 26 292 ( 18) LD OBJ_L(P2) 04C9-31 293 ( 8) XPAL P1 ;P1 now points top object location 04CA- 294 04CA-C4 5F 295 ( 10) LDI 0x5F 04CC-CA 22 296 ( 18) ST OBJ_P(P2) ;0x0F60 contains object 04CE- 297 04CE-C4 04 298 ( 10) LDI 0x04 04D0-CA 24 299 ( 18) ST OBJ_ROW(P2) 04D2- 300 04D2- 301 NEXT_ROW_C: 04D2-C4 04 302 ( 10) LDI 0x04 04D4-CA 23 303 ( 18) ST OBJ_COL(P2) 04D6- 304 04D6- 305 NEXT_COL_C: 04D6-AA 22 306 ( 22) ILD OBJ_P(P2) 04D8-01 307 ( 7) XAE 04D9-C2 80 308 ( 18) LD -128(P2) 04DB-98 0C 309 (9/11) JZ DO_NOT_STORE_C 04DD-C5 01 310 ( 18) LD @1(P1) ; Check Location contains 0x20 04DF-E4 20 311 ( 10) XRI 0x20 04E1-98 08 312 (9/11) JZ STORED_C 04E3-C2 21 313 ( 18) LD False_0(P2) 04E5-CA 4C 314 ( 18) ST MOVE_OK(P2) 04E7-90 02 315 ( 11) JMP STORED_C 04E9- 316 04E9- 317 DO_NOT_STORE_C: 04E9-C5 01 318 ( 18) LD @1(P1) 04EB- 319 04EB- 320 STORED_C: 04EB-BA 23 321 ( 22) DLD OBJ_COL(P2) 04ED-9C E7 322 (9/11) JNZ NEXT_COL_C 04EF- 323 04EF-C5 0C 324 ( 18) LD @12(P1) 04F1-BA 24 325 ( 22) DLD OBJ_ROW(P2) 04F3-9C DD 326 (9/11) JNZ NEXT_ROW_C 04F5- 327 04F5-C2 4C 328 ( 18) LD MOVE_OK(P2) 04F7-9C 14 329 (9/11) JNZ OBJECT_MOVE_OK 04F9- 330 04F9-C2 27 331 ( 18) LD OBJ_OH(P2) 04FB-CA 25 332 ( 18) ST OBJ_H(P2) 04FD-C2 28 333 ( 18) LD OBJ_OL(P2) 04FF-CA 26 334 ( 18) ST OBJ_L(P2) 0501- 335 0501-C2 37 336 ( 18) LD X_MOVE(P2) 0503-E4 10 337 ( 10) XRI 0x10 0505-98 06 338 (9/11) JZ OBJECT_MOVE_OK 0507-C4 10 339 ( 10) LDI 0x10 0509-CA 37 340 ( 18) ST x_MOVE(P2) 050B-90 A2 341 ( 11) JMP CHECK_OBJECT_CAN_MOVE 050D- 342 050D- 343 ;---------------------------------------------------------------------- 050D- 344 OBJECT_MOVE_OK: 050D-C4 0B 37 C4 B5 33 3F 345 JS P3,PLACE_OBJECT 0514- 346 0514-C2 4C 347 ( 18) LD MOVE_OK(P2) 0516-98 29 348 (9/11) JZ MOVE_NOT_OK ;Move not ok 0518- 349 0518-AA 42 350 ( 22) ILD MOVE_COUNT(P2) 051A- 351 051A-C4 10 352 ( 10) LDI 0x10 051C-CA 37 353 ( 18) ST X_MOVE(P2) ;Reset Move before checking key press 051E- 354 051E-C2 21 355 ( 18) LD False_0(P2) 0520-CA 35 356 ( 18) ST KEYPRESS(P2) ;Reset Keypress to False 0522- 357 0522- 358 ;--------------------------------------------------------------------- 0522-C2 4A 359 ( 18) LD DELAY_LOOP(P2) 0524-CA 45 360 ( 18) ST TEMP_1(P2) 0526- 361 0526- 362 DELAY_TIMER: 0526-C4 0A 37 C4 FF 33 3F 363 JS P3,GET_INPUT 052D- 364 ;JS P3,DISPLAY_TEST_INFO ;Only required for testing 052D-8F 60 365 ( 13+) DLY 0x60 ;80 for PiView 60 for other 052F-BA 45 366 ( 22) DLD TEMP_1(P2) 0531-9C F3 367 (9/11) JNZ DELAY_TIMER 0533- 368 0533- 369 ;--------------------------------------------------------------------- 0533-02 370 ( 5) CCL ;Add Score to Sub Score 0534-C2 3C 371 ( 18) LD SCORE_SUB(P2) 0536-EA 3B 372 ( 23) DAD SCORE(P2) 0538-CA 3C 373 ( 18) ST SCORE_SUB(P2) 053A- 374 053A-C4 04 37 C4 A0 33 3F 375 JS P3,MOVE_MORE ;To far to jump 0541- 376 0541- 377 MOVE_NOT_OK: 0541-C4 06 37 C4 7E 33 3F 378 JS P3,CHECK_COMPLETE_LINE 0548- 379 0548-C2 43 380 ( 18) LD LINES_DELETED(P2) 054A-CA 44 381 ( 18) ST LINES_DELETED_TEMP(P2) 054C-98 46 382 (9/11) JZ NO_LINES_TO_DELETE 054E- 383 054E- 384 ;--------------------------------------------------------------------- 054E- 385 DELETE_LINES: 054E-C4 03 386 ( 10) LDI 0x03 ;Set P1 & P3 ready for move 0550-35 387 ( 8) XPAH P1 ;P1 = 0x0390 0551-C4 90 388 ( 10) LDI 0x90 0553-31 389 ( 8) XPAL P1 0554- 390 0554-C4 03 391 ( 10) LDI 0x03 ;P3 = 0x03A0 0556-37 392 ( 8) XPAH P3 0557-C4 A0 393 ( 10) LDI 0xA0 0559-33 394 ( 8) XPAL P3 055A- 395 055A-C4 12 396 ( 10) LDI 0x12 ;Only check 18 lines for testing 055C-CA 48 397 ( 18) ST TEMP_Z(P2) 055E- 398 055E-BA 44 399 ( 22) DLD LINES_DELETED_TEMP(P2) 0560- 400 0560- 401 CHECK_NEXT_ROW: 0560-C7 00 402 ( 18) LD @0(P3) 0562-E4 A3 403 ( 10) XRI 0xA3 0564-98 0A 404 (9/11) JZ CHECK_P1_ROW 0566-C7 F0 405 ( 18) LD @-16(P3) 0568-C5 F0 406 ( 18) LD @-16(P1) 056A-BA 48 407 ( 22) DLD TEMP_Z(P2) 056C-9C F2 408 (9/11) JNZ CHECK_NEXT_ROW 056E-90 24 409 ( 11) JMP NO_LINES_TO_DELETE 0570- 410 0570- 411 CHECK_P1_ROW: 0570-C5 00 412 ( 18) LD @0(P1) 0572-E4 A3 413 ( 10) XRI 0xA3 0574-9C 06 414 (9/11) JNZ LOOP_MOVE_ROW 0576-BA 45 415 ( 22) DLD TEMP_1(P2) 0578-C5 F0 416 ( 18) LD @-16(P1) 057A-90 F4 417 ( 11) JMP CHECK_P1_ROW 057C- 418 057C- 419 LOOP_MOVE_ROW: 057C-C4 0B 420 ( 10) LDI 0x0B 057E-CA 46 421 ( 18) ST TEMP_X(P2) 0580- 422 0580- 423 LOOP_MOVE: 0580-C5 01 424 ( 18) LD @1(P1) 0582-CF 01 425 ( 18) ST @1(P3) 0584-BA 46 426 ( 22) DLD TEMP_X(P2) 0586-9C F8 427 (9/11) JNZ LOOP_MOVE 0588- 428 0588-C7 E5 429 ( 18) LD @-27(P3) 058A-C5 E5 430 ( 18) LD @-27(P1) 058C-E4 63 431 ( 10) XRI 0x63 ;Check for top of play area 058E-9C EC 432 (9/11) JNZ LOOP_MOVE_ROW 0590- 433 0590-C2 44 434 ( 18) LD LINES_DELETED_TEMP(P2) 0592-9C BA 435 (9/11) JNZ DELETE_LINES ;Check for more lines 0594- 436 0594- 437 ;----------------------------------------------------------------- 0594- 438 NO_LINES_TO_DELETE: 0594-C2 2B 439 ( 18) LD OBJ_NUM_NEXT(P2) 0596-CA 30 440 ( 18) ST OBJ_NUMBER(P2) 0598- 441 0598- 442 ;----------------------------------------------------------------- 0598-C4 0F 443 ( 10) LDI VAR_0FC0/256 059A-35 444 ( 8) XPAH P1 059B-C4 C0 445 ( 10) LDI VAR_0FC0\256 059D-31 446 ( 8) XPAL P1 ;Set P1 to Random Object List 059E- 447 059E-BA 4D 448 ( 22) DLD RND(P2) ;RND counts down from 0x31 to zero 05A0-9C 04 449 (9/11) JNZ DONT_RESET_RND 05A2-C4 31 450 ( 10) LDI 0x31 05A4-CA 4D 451 ( 18) ST RND(P2) 05A6- 452 05A6- 453 DONT_RESET_RND: 05A6-C2 4D 454 ( 18) LD RND(P2) 05A8-01 455 ( 7) XAE 05A9-C1 80 456 ( 18) LD -128(P1) 05AB-CA 2B 457 ( 18) ST OBJ_NUM_NEXT(P2) 05AD- 458 05AD- 459 ;----------------------------------------------------------------- 05AD- 460 UPDATE_SCORES: 05AD-02 461 ( 5) CCL 05AE-C2 3A 462 ( 18) LD SCORE_U(P2) 05B0-EA 3C 463 ( 23) DAD SCORE_SUB(P2) 05B2-CA 3A 464 ( 18) ST SCORE_U(P2) 05B4-C2 39 465 ( 18) LD SCORE_T(P2) 05B6-EC 00 466 ( 15) DAI 0x00 05B8-CA 39 467 ( 18) ST SCORE_T(P2) 05BA-C2 38 468 ( 18) LD SCORE_H(P2) 05BC-EC 00 469 ( 15) DAI 0x00 05BE-CA 38 470 ( 18) ST SCORE_H(P2) 05C0- 471 05C0-02 472 ( 5) CCL 05C1-C2 40 473 ( 18) LD LINE_COMP_L(P2) 05C3-EA 41 474 ( 23) DAD LINE_COMP_SUB(P2) 05C5-CA 40 475 ( 18) ST LINE_COMP_L(P2) 05C7-C2 3F 476 ( 18) LD LINE_COMP_H(P2) 05C9-EC 00 477 ( 15) DAI 0x00 05CB-CA 3F 478 ( 18) ST LINE_COMP_H(P2) 05CD- 479 05CD-C2 40 480 ( 18) LD LINE_COMP_L(P2) 05CF-D4 F0 481 ( 10) ANI 0xF0 05D1-1E 482 ( 5) RR 05D2-1E 483 ( 5) RR 05D3-1E 484 ( 5) RR 05D4-1E 485 ( 5) RR 05D5-CA 4B 486 ( 18) ST LEVEL(P2) ;Change Delay based on Level 05D7- 487 05D7-02 488 ( 5) CCL 05D8-C4 0A 489 ( 10) LDI 0x0A 05DA-FA 4B 490 ( 20) CAD LEVEL(P2) 05DC-CA 49 491 ( 18) ST DELAY_LEVEL(P2) ;DELAY_LEVEL = 10 - LEVEL 05DE-94 04 492 (9/11) JP STILL_POSITIVE_DELAY 05E0-C4 00 493 ( 10) LDI 0x00 05E2-CA 49 494 ( 18) ST DELAY_LEVEL(P2) 05E4- 495 05E4- 496 STILL_POSITIVE_DELAY: 05E4- 497 05E4- 498 DISPLAY_SCORES: 05E4-C4 02 499 ( 10) LDI DISP_SCO/256 05E6-35 500 ( 8) XPAH P1 05E7-C4 7C 501 ( 10) LDI DISP_SCO\256 05E9-31 502 ( 8) XPAL P1 ;Set P1 to Score Location 05EA- 503 05EA-C5 02 504 ( 18) LD @0x02(P1) 05EC-C2 38 505 ( 18) LD SCORE_H(P2) 05EE-01 506 ( 7) XAE 05EF-C4 06 37 C4 68 33 3F 507 JS P3,UPDATE_SCO_LEV_LIN 05F6- 508 05F6-C5 0C 509 ( 18) LD @0x0C(P1) 05F8- 510 05F8-C2 39 511 ( 18) LD SCORE_T(P2) 05FA-01 512 ( 7) XAE 05FB-C4 06 37 C4 68 33 3F 513 JS P3,UPDATE_SCO_LEV_LIN 0602- 514 0602-C2 3A 515 ( 18) LD SCORE_U(P2) 0604-01 516 ( 7) XAE 0605-C4 06 37 C4 68 33 3F 517 JS P3,UPDATE_SCO_LEV_LIN 060C- 518 060C- 519 ;-------------------------------------------------------------------- 060C-C5 5E 520 ( 18) LD @0x5E(P1) ;Set P1 to Level Location 060E-C2 4B 521 ( 18) LD LEVEL(P2) 0610-01 522 ( 7) XAE 0611-C4 06 37 C4 68 33 3F 523 JS P3,UPDATE_SCO_LEV_LIN 0618- 524 0618- 525 ;-------------------------------------------------------------------- 0618-C5 5C 526 ( 18) LD @0x5C(P1) ;Set P1 to Line Location 061A- 527 061A-C2 3F 528 ( 18) LD LINE_COMP_H(P2) 061C-01 529 ( 7) XAE 061D-C4 06 37 C4 68 33 3F 530 JS P3,UPDATE_SCO_LEV_LIN 0624-C2 40 531 ( 18) LD LINE_COMP_L(P2) 0626-01 532 ( 7) XAE 0627-C4 06 37 C4 68 33 3F 533 JS P3,UPDATE_SCO_LEV_LIN 062E- 534 062E- 535 ;-------------------------------------------------------------------- 062E-C2 42 536 ( 18) LD MOVE_COUNT(P2) 0630-98 07 537 (9/11) JZ END 0632-C4 04 37 C4 5C 33 3F 538 JS P3,NEXT_OBJECT ;Jump to next object 0639- 539 ;-------------------------------------------------------------------- 0639- 540 END: 0639-C4 07 37 C4 B1 33 3F 541 JS P3,CLEAR_PLAY_AREA 0640- 542 0640-C4 07 543 ( 10) LDI VAR_07E0/256 0642-35 544 ( 8) XPAH P1 0643-C4 E0 545 ( 10) LDI VAR_07E0\256 0645-31 546 ( 8) XPAL P1 ;P1 points to text 0646- 547 0646-C4 02 548 ( 10) LDI 0x02 0648-37 549 ( 8) XPAH P3 0649-C4 C4 550 ( 10) LDI 0xC4 064B-33 551 ( 8) XPAL P3 ;P3 points Text Location on screen 064C- 552 064C-C4 06 553 ( 10) LDI 0x06 064E-CA 47 554 ( 18) ST TEMP_Y(P2) 0650- 555 0650- 556 SCREEN_TEXT_MOVE_ROW: 0650-C4 05 557 ( 10) LDI 0x05 0652-CA 46 558 ( 18) ST TEMP_X(P2) 0654- 559 0654- 560 SCREEN_TEXT_MOVE: 0654-C5 01 561 ( 18) LD @1(P1) 0656-CF 01 562 ( 18) ST @1(P3) 0658-BA 46 563 ( 22) DLD TEMP_X(P2) 065A-9C F8 564 (9/11) JNZ SCREEN_TEXT_MOVE 065C- 565 065C-C7 1B 566 ( 18) LD @27(P3) 065E-BA 47 567 ( 22) DLD TEMP_Y(P2) 0660-9C EE 568 (9/11) JNZ SCREEN_TEXT_MOVE_ROW 0662- 569 0662-C4 04 37 C4 05 33 3F 570 JS P3,NEW_GAME 0669- 571 ;******************************************************************** 0669- 572 ;*************************** THE END ******************************** 0669- 573 ;******************************************************************** 0669- 574 0669- 575 UPDATE_SCO_LEV_LIN 0669- 576 0669-01 577 ( 7) XAE 066A-CA 45 578 ( 18) ST TEMP_1(P2) 066C-D4 F0 579 ( 10) ANI 0xF0 066E-1E 580 ( 5) RR 066F-1E 581 ( 5) RR 0670-1E 582 ( 5) RR 0671-1E 583 ( 5) RR 0672-DC 30 584 ( 10) ORI 0x30 0674-CD 01 585 ( 18) ST @1(P1) 0676-C2 45 586 ( 18) LD TEMP_1(P2) 0678-D4 0F 587 ( 10) ANI 0x0F 067A-DC 30 588 ( 10) ORI 0x30 067C-CD 01 589 ( 18) ST @1(P1) 067E- 590 067E- 591 UPDATE_SCO_LEV_LIN_RETURN: 067E-3F 592 ( 7) RET P3 067F- 593 067F- 594 ;==================================================================== 067F- 595 ;==================================================================== 067F- 596 067F- 597 CHECK_COMPLETE_LINE: ;CHECK LINES COMPLETED 067F-C4 00 598 ( 10) LDI 0x00 0681-CA 43 599 ( 18) ST LINES_DELETED(P2) 0683- 600 0683-C2 25 601 ( 18) LD OBJ_H(P2) 0685-35 602 ( 8) XPAH P1 0686-C2 26 603 ( 18) LD OBJ_L(P2) 0688-D4 F0 604 ( 10) ANI 0xF0 068A-DC 01 605 ( 10) ORI 0x01 068C-31 606 ( 8) XPAL P1 ;P1 points to start of line 068D- 607 068D-C4 04 608 ( 10) LDI 0x04 068F-CA 47 609 ( 18) ST TEMP_Y(P2) 0691- 610 0691- 611 CCL_LOOP1: 0691-C2 20 612 ( 18) LD True_1(P2) 0693-CA 3E 613 ( 18) ST LINE_COMP(P2) ;Set Line Complete to True(1) 0695- 614 0695-C4 0A 615 ( 10) LDI 0x0A 0697-CA 46 616 ( 18) ST TEMP_X(P2) 0699-C5 00 617 ( 18) LD @0(P1) 069B-E4 23 618 ( 10) XRI 0x23 ;Check for bottom line # 069D-9C 04 619 (9/11) JNZ CCL_LOOP2 069F-C2 21 620 ( 18) LD False_0(P2) ;Set Line Complete to False(0) 06A1-CA 3E 621 ( 18) ST LINE_COMP(P2) ;if character 20(space) found 06A3- 622 06A3- 623 CCL_LOOP2: 06A3-C5 01 624 ( 18) LD @1(P1) 06A5-E4 20 625 ( 10) XRI 0x20 06A7-9C 04 626 (9/11) JNZ CCL_NEXT 06A9-C2 21 627 ( 18) LD False_0(P2) ;Set Line Complete to False(0) 06AB-CA 3E 628 ( 18) ST LINE_COMP(P2) ;if character 20(space) found 06AD- 629 06AD- 630 CCL_NEXT 06AD-BA 46 631 ( 22) DLD TEMP_X(P2) 06AF-9C F2 632 (9/11) JNZ CCL_LOOP2 ;Check rest of line 06B1- 633 06B1-C2 3E 634 ( 18) LD LINE_COMP(P2) 06B3-98 0C 635 (9/11) JZ CCL_NEXT_LINE 06B5-AA 41 636 ( 22) ILD LINE_COMP_SUB(P2) 06B7- 637 06B7-C5 F5 638 ( 18) LD @-11(P1) ;Move to start of line 06B9- 639 06B9-C4 A3 640 ( 10) LDI 0xA3 06BB-CD 01 641 ( 18) ST @1(P1) ;Mark Line for deletion 06BD-AA 43 642 ( 22) ILD LINES_DELETED(P2) 06BF- 643 06BF- 644 06BF- 645 DELETE_LINE: 06BF-C5 0A 646 ( 18) LD @10(P1) 06C1- 647 06C1- 648 CCL_NEXT_LINE: 06C1- 649 06C1-C5 06 650 ( 18) LD @6(P1) 06C3-BA 47 651 ( 22) DLD TEMP_Y(P2) 06C5-9C CA 652 (9/11) JNZ CCL_LOOP1 ;Check next line 06C7- 653 06C7-C2 43 654 ( 18) LD LINES_DELETED(P2) 06C9-98 30 655 (9/11) JZ CHECK_COMPLETE_LINE_RETURN 06CB- 656 06CB-C2 4B 657 ( 18) LD LEVEL(P2) 06CD-CA 46 658 ( 18) ST TEMP_X(P2) 06CF-AA 46 659 ( 22) ILD TEMP_X(P2) 06D1- 660 06D1- 661 LOOP_FOR_EACH_LEVEL: 06D1-C4 0F 662 ( 10) LDI VAR_0FB7/256 06D3-35 663 ( 8) XPAH P1 06D4-C4 B7 664 ( 10) LDI VAR_0FB7\256 06D6-31 665 ( 8) XPAL P1 06D7- 666 06D7-02 667 ( 5) CCL 06D8-C2 43 668 ( 18) LD LINES_DELETED(P2) 06DA-F4 04 669 ( 11) ADI 0x04 06DC-CA 45 670 ( 18) ST TEMP_1(P2) 06DE- 671 06DE-C2 43 672 ( 18) LD LINES_DELETED(P2) 06E0-01 673 ( 7) XAE 06E1- 674 06E1-02 675 ( 5) CCL 06E2-C2 3A 676 ( 18) LD SCORE_U(P2) 06E4-E9 80 677 ( 23) DAD -128(P1) 06E6-CA 3A 678 ( 18) ST SCORE_U(P2) 06E8-C2 45 679 ( 18) LD TEMP_1(P2) 06EA-01 680 ( 7) XAE 06EB-C2 39 681 ( 18) LD SCORE_T(P2) 06ED-E9 80 682 ( 23) DAD -128(P1) 06EF-CA 39 683 ( 18) ST SCORE_T(P2) 06F1-C2 38 684 ( 18) LD SCORE_H(P2) 06F3-EC 00 685 ( 15) DAI 0x00 06F5-CA 38 686 ( 18) ST SCORE_H(P2) 06F7- 687 06F7-BA 46 688 ( 22) DLD TEMP_X(P2) 06F9-9C D6 689 (9/11) JNZ LOOP_FOR_EACH_LEVEL 06FB- 690 06FB- 691 CHECK_COMPLETE_LINE_RETURN: 06FB-3F 692 ( 7) RET P3 06FC- 693 ;==================================================================== 06FC- 694 ;==================================================================== 06FC- 695 UPDATE_OBJECT_NEXT: 06FC-C2 20 696 ( 18) LD True_1(P2) 06FE-CA 3D 697 ( 18) ST OBJ_NEXT(P2) 0700-C2 2B 698 ( 18) LD OBJ_NUM_NEXT(P2) 0702-CA 2A 699 ( 18) ST OBJ_NUM(P2) 0704-C4 20 700 ( 10) LDI 0x20 0706-CA 4E 701 ( 18) ST SPACE_CHR(P2) 0708-94 0A 702 (9/11) JP UPDATE_OBJECT_NEXT_2 070A- 703 ;==================================================================== 070A- 704 UPDATE_OBJECT_OLD: 070A-C2 29 705 ( 18) LD OBJ_NUM_OLD(P2) 070C-CA 2A 706 ( 18) ST OBJ_NUM(P2) 070E- 707 070E- 708 UPDATE_OBJECT: 070E-C2 21 709 ( 18) LD False_0(P2) 0710-CA 3D 710 ( 18) ST OBJ_NEXT(P2) 0712-CA 4E 711 ( 18) ST SPACE_CHR(P2) 0714- 712 0714- 713 UPDATE_OBJECT_NEXT_2: 0714-C4 0F 714 ( 10) LDI VAR_0FB0/256 0716-35 715 ( 8) XPAH P1 0717-C4 B0 716 ( 10) LDI VAR_0FB0\256 0719-31 717 ( 8) XPAL P1 071A- 718 071A-C2 2A 719 ( 18) LD OBJ_NUM(P2) 071C-D4 07 720 ( 10) ANI 0x07 071E-01 721 ( 7) XAE 071F-C1 80 722 ( 18) LD -128(P1) 0721-CA 32 723 ( 18) ST OBJ_CHR(P2) 0723- 724 0723-C4 70 725 ( 10) LDI VAR_0F70\256 0725-31 726 ( 8) XPAL P1 0726- 727 0726-C2 2A 728 ( 18) LD OBJ_NUM(P2) ;Get 2 Bytes that make up object 0728-01 729 ( 7) XAE 0729-C1 80 730 ( 18) LD -128(P1) 072B-CA 2E 731 ( 18) ST OBJ_1_BYTE(P2) 072D-02 732 ( 5) CCL 072E-C2 2A 733 ( 18) LD OBJ_NUM(P2) 0730-F4 20 734 ( 11) ADI 0x20 ;Location of Second Byte of object 0732-01 735 ( 7) XAE 0733-C1 80 736 ( 18) LD -128(P1) 0735-CA 2F 737 ( 18) ST OBJ_2_BYTE(P2) 0737- 738 0737- 739 ;---------------------------------------------------------------- 0737-DA 2E 740 ( 18) OR OBJ_1_BYTE(P2) 0739-CA 45 741 ( 18) ST TEMP_1(P2) 073B-D4 0F 742 ( 10) ANI 0x0F 073D-CA 2C 743 ( 18) ST OBJ_BYTE(P2) 073F-C2 45 744 ( 18) LD TEMP_1(P2) 0741-D4 F0 745 ( 10) ANI 0xF0 0743-1E 746 ( 5) RR 0744-1E 747 ( 5) RR 0745-1E 748 ( 5) RR 0746-1E 749 ( 5) RR 0747-DA 2C 750 ( 18) OR OBJ_BYTE(P2) 0749-CA 2C 751 ( 18) ST OBJ_BYTE(P2) 074B-C4 00 752 ( 10) LDI 0x00 074D-CA 34 753 ( 18) ST OBJ_WIDTH(P2) 074F- 754 074F- 755 NEXT_OBJECT_BIT: 074F-C2 2C 756 ( 18) LD OBJ_BYTE(P2) 0751-D4 01 757 ( 10) ANI 0x01 0753-98 09 758 (9/11) JZ CHECK_OBJECT_WIDTH 0755-C2 2C 759 ( 18) LD OBJ_BYTE(P2) 0757-1E 760 ( 5) RR 0758-CA 2C 761 ( 18) ST OBJ_BYTE(P2) 075A-AA 34 762 ( 22) ILD OBJ_WIDTH(P2) 075C-90 F1 763 ( 11) JMP NEXT_OBJECT_BIT 075E- 764 075E- 765 ;---------------------------------------------------------------- 075E- 766 CHECK_OBJECT_WIDTH: 075E- 767 075E-02 768 ( 5) CCL 075F-C2 26 769 ( 18) LD OBJ_L(P2) 0761-D4 0F 770 ( 10) ANI 0x0F 0763-F2 34 771 ( 19) ADD OBJ_WIDTH(P2) 0765-CA 45 772 ( 18) ST TEMP_1(P2) 0767- 773 0767-C2 3D 774 ( 18) LD OBJ_NEXT(P2) 0769-9C 18 775 (9/11) JNZ GET_OBJECT 076B- 776 076B- 777 CHECK_0C 076B-C2 45 778 ( 18) LD TEMP_1(P2) 076D-E4 0C 779 ( 10) XRI 0x0C 076F-9C 02 780 (9/11) JNZ CHECK_0D 0771-90 97 781 ( 11) JMP UPDATE_OBJECT_OLD 0773- 782 0773- 783 CHECK_0D 0773-C2 45 784 ( 18) LD TEMP_1(P2) 0775-E4 0D 785 ( 10) XRI 0x0D 0777-9C 02 786 (9/11) JNZ CHECK_0E 0779-90 8F 787 ( 11) JMP UPDATE_OBJECT_OLD 077B- 788 077B- 789 CHECK_0E 077B-C2 45 790 ( 18) LD TEMP_1(P2) 077D-E4 0E 791 ( 10) XRI 0x0E 077F-9C 02 792 (9/11) JNZ GET_OBJECT 0781-90 87 793 ( 11) JMP UPDATE_OBJECT_OLD 0783- 794 0783- 795 GET_OBJECT: 0783-C4 02 796 ( 10) LDI 0x02 0785-CA 46 797 ( 18) ST TEMP_X(P2) 0787- 798 0787-C4 60 799 ( 10) LDI VAR_0F60\256 ;P1 = Object Shape Location 0789-31 800 ( 8) XPAL P1 078A- 801 078A- 802 LOOP0: 078A-C4 08 803 ( 10) LDI 0x08 078C-CA 47 804 ( 18) ST TEMP_Y(P2) 078E- 805 078E- 806 LOOP1: 078E-C2 2E 807 ( 18) LD OBJ_1_BYTE(P2) 0790-D4 01 808 ( 10) ANI 0x01 0792-98 04 809 (9/11) JZ CHR_STORED 0794- 810 0794-C2 32 811 ( 18) LD OBJ_CHR(P2) 0796-90 02 812 ( 11) JMP STORE_CHARACTER 0798- 813 0798- 814 CHR_STORED: 0798-C2 4E 815 ( 18) LD SPACE_CHR(P2) 079A- 816 079A- 817 STORE_CHARACTER: 079A-CD 01 818 ( 18) ST @1(P1) 079C-C2 2E 819 ( 18) LD OBJ_1_BYTE(P2) 079E-1E 820 ( 5) RR 079F-CA 2E 821 ( 18) ST OBJ_1_BYTE(P2) 07A1-BA 47 822 ( 22) DLD TEMP_Y(P2) 07A3-9C E9 823 (9/11) JNZ LOOP1 07A5- 824 07A5-C2 2F 825 ( 18) LD OBJ_2_BYTE(P2) 07A7-CA 2E 826 ( 18) ST OBJ_1_BYTE(P2) 07A9-BA 46 827 ( 22) DLD TEMP_X(P2) 07AB-9C DD 828 (9/11) JNZ LOOP0 07AD- 829 07AD-C2 21 830 ( 18) LD False_0(P2) 07AF-CA 3D 831 ( 18) ST OBJ_NEXT(P2) 07B1- 832 07B1- 833 UPDATE_OBJECT_RETURN: 07B1-3F 834 ( 7) RET P3 07B2- 835 07B2- 836 ;===================================================================== 07B2- 837 ;===================================================================== 07B2- 838 CLEAR_PLAY_AREA: 07B2- 839 07B2-C4 02 840 ( 10) LDI CLEAR_SCREEN/256 07B4-35 841 ( 8) XPAH P1 07B5-C4 41 842 ( 10) LDI CLEAR_SCREEN\256 07B7-31 843 ( 8) XPAL P1 07B8- 844 07B8-C4 17 845 ( 10) LDI 0x17 07BA-CA 47 846 ( 18) ST TEMP_Y(P2) 07BC- 847 07BC- 848 CLS_LOOP1: 07BC-C4 0A 849 ( 10) LDI 0x0A 07BE-CA 46 850 ( 18) ST TEMP_X(P2) 07C0- 851 07C0- 852 CLS_LOOP2: 07C0-C4 20 853 ( 10) LDI 0x20 07C2-CD 01 854 ( 18) ST @1(P1) 07C4-BA 46 855 ( 22) DLD TEMP_X(P2) 07C6-9C F8 856 (9/11) JNZ CLS_LOOP2 07C8-C5 06 857 ( 18) LD @6(P1) 07CA-BA 47 858 ( 22) DLD TEMP_Y(P2) 07CC-9C EE 859 (9/11) JNZ CLS_LOOP1 07CE- 860 07CE- 861 CLEAR_PLAY_AREA_RETURN: 07CE-3F 862 ( 7) RET P3 07CF- 863 07CF- 864 ;===================================================================== 07CF- 865 ;===================================================================== 0B00- 866 .OR PROG2 0B00- 867 GET_INPUT: 0B00- 868 0B00- 869 KYBD: 0B00-C4 00 870 ( 10) LDI 0x00 0B02-CA 50 871 ( 18) ST CHAR(P2) 0B04- 872 0B04-C4 0D 873 ( 10) LDI KEYBOARD/256 0B06-35 874 ( 8) XPAH P1 0B07- 875 0B07- 876 OFF: 0B07-C4 FF 877 ( 10) LDI 0xFF 0B09-CA 51 878 ( 18) ST ROW(P2) 0B0B-C4 0A 879 ( 10) LDI 10 ;Set row counter 0B0D-CA 52 880 ( 18) ST CNT(P2) 0B0F-C4 00 881 ( 10) LDI 0 0B11-CA 53 882 ( 18) ST PUSHED(P2) ;Zero keyboard input 0B13-31 883 ( 8) XPAL P1 ;Update row address 0B14- 884 LOOPB: 0B14-AA 51 885 ( 22) ILD ROW(P2) ;Update row address 0B16-01 886 ( 7) XAE 0B17-C4 00 887 ( 10) LDI 0x00 0B19-C9 80 888 ( 18) ST -128(P1) 0B1B-C1 80 889 ( 18) LD -128(P1) ;Get segmant 0B1D-E4 FF 890 ( 10) XRI 0xFF ;Check if pushed 0B1F-98 03 891 (9/11) JZ BACK ;Jump if not pushed 0B21-58 892 ( 6) ORE 0B22-CA 53 893 ( 18) ST PUSHED(P2) 0B24- 894 BACK: 0B24-BA 52 895 ( 22) DLD CNT(P2) ;Check if done 0B26-9C EC 896 (9/11) JNZ LOOPB ;No if jump 0B28-C2 53 897 ( 18) LD PUSHED(P2) ;No set character 0B2A-CA 50 898 ( 18) ST CHAR(P2) 0B2C- 899 0B2C-C2 53 900 ( 18) LD PUSHED(P2) 0B2E-9C 05 901 (9/11) JNZ CHECK_KEY_PRESSED 0B30-C2 21 902 ( 18) LD False_0(P2) 0B32-CA 36 903 ( 18) ST KEY_PRESSED(P2) 0B34-3F 904 ( 7) RET P3 0B35- 905 0B35- 906 CHECK_KEY_PRESSED: 0B35-C2 36 907 ( 18) LD KEY_PRESSED(P2) 0B37-98 01 908 (9/11) JZ TEST_2 0B39-3F 909 ( 7) RET P3 0B3A- 910 0B3A- 911 TEST_2: ;Move Down 0B3A-C2 20 912 ( 18) LD True_1(P2) 0B3C-CA 36 913 ( 18) ST KEY_PRESSED(P2) 0B3E- 914 0B3E-C2 53 915 ( 18) LD PUSHED(P2) 0B40-E4 82 916 ( 10) XRI 0x82 0B42-9C 0A 917 (9/11) JNZ TEST_4 0B44-AA 35 918 ( 22) ILD KEYPRESS(P2) 0B46-C4 01 919 ( 10) LDI 0x01 0B48-CA 45 920 ( 18) ST TEMP_1(P2) 0B4A-CA 4A 921 ( 18) ST DELAY_LOOP(P2) 0B4C-CA 3B 922 ( 18) ST SCORE(P2) 0B4E- 923 0B4E- 924 TEST_4: ;Move Left 0B4E-C2 53 925 ( 18) LD PUSHED(P2) 0B50-E4 84 926 ( 10) XRI 0x84 0B52-9C 0E 927 (9/11) JNZ TEST_6 0B54-AA 35 928 ( 22) ILD KEYPRESS(P2) 0B56-C2 26 929 ( 18) LD OBJ_L(P2) 0B58-D4 0F 930 ( 10) ANI 0x0F 0B5A-E4 01 931 ( 10) XRI 0x01 0B5C-98 04 932 (9/11) JZ TEST_6 ;Check if at edge of screen 0B5E- 933 0B5E-C4 0F 934 ( 10) LDI 0x0F 0B60-CA 37 935 ( 18) ST X_MOVE(P2) 0B62- 936 0B62- 937 TEST_6: ;Move Right 0B62-C2 53 938 ( 18) LD PUSHED(P2) 0B64-E4 86 939 ( 10) XRI 0x86 0B66-9C 11 940 (9/11) JNZ TEST_C 0B68-02 941 ( 5) CCL 0B69-C2 26 942 ( 18) LD OBJ_L(P2) 0B6B-D4 0F 943 ( 10) ANI 0x0F 0B6D-F2 34 944 ( 19) ADD OBJ_WIDTH(P2) 0B6F-E4 0B 945 ( 10) XRI 0x0B 0B71-98 06 946 (9/11) JZ TEST_C ;Check for right hand edge 0B73-AA 35 947 ( 22) ILD KEYPRESS(P2) 0B75-C4 11 948 ( 10) LDI 0x11 0B77-CA 37 949 ( 18) ST X_MOVE(P2) 0B79- 950 0B79- 951 TEST_C: 0B79-C2 53 952 ( 18) LD PUSHED(P2) 0B7B-E4 12 953 ( 10) XRI 0x12 0B7D-9C 0D 954 (9/11) JNZ TEST_D 0B7F-AA 35 955 ( 22) ILD KEYPRESS(P2) 0B81-C2 2A 956 ( 18) LD OBJ_NUM(P2) ;Rotate object clockwise 0B83-CA 29 957 ( 18) ST OBJ_NUM_OLD(P2) 0B85-02 958 ( 5) CCL 0B86-F4 08 959 ( 11) ADI 0x08 0B88-D4 1F 960 ( 10) ANI 0x1F 0B8A-CA 2A 961 ( 18) ST OBJ_NUM(P2) 0B8C- 962 0B8C- 963 TEST_D: 0B8C-C2 53 964 ( 18) LD PUSHED(P2) 0B8E-E4 13 965 ( 10) XRI 0x13 0B90-9C 0D 966 (9/11) JNZ NO_MORE_KEYS_TO_CHECK 0B92-AA 35 967 ( 22) ILD KEYPRESS(P2) 0B94-C2 2A 968 ( 18) LD OBJ_NUM(P2) ;Rotate object anti clockwise 0B96-CA 29 969 ( 18) ST OBJ_NUM_OLD(P2) 0B98-02 970 ( 5) CCL 0B99-F4 18 971 ( 11) ADI 0x18 0B9B-D4 1F 972 ( 10) ANI 0x1F 0B9D-CA 2A 973 ( 18) ST OBJ_NUM(P2) 0B9F- 974 0B9F- 975 NO_MORE_KEYS_TO_CHECK: 0B9F-BA 4D 976 ( 22) DLD RND(P2) ;RND counts down from 0x31 to zero 0BA1-9C 04 977 (9/11) JNZ GET_INPUT_RETURN 0BA3-C4 31 978 ( 10) LDI 0x31 0BA5-CA 4D 979 ( 18) ST RND(P2) 0BA7- 980 0BA7- 981 GET_INPUT_RETURN: 0BA7- 982 0BA7-3F 983 ( 7) RET P3 0BA8- 984 ;====================================================================== 0BA8- 985 ;====================================================================== 0BA8- 986 PLACE_OBJECT_NEXT: 0BA8-C4 03 987 ( 10) LDI 0x03 0BAA-CA 25 988 ( 18) ST OBJ_H(P2) 0BAC-C4 7C 989 ( 10) LDI 0x7C 0BAE-CA 26 990 ( 18) ST OBJ_L(P2) ;Next object postion 0BB0-94 04 991 (9/11) JP PLACE_OBJECT 0BB2- 992 ;---------------------------------------------------------------------- 0BB2- 993 0BB2- 994 DELETE_OBJECT: 0BB2-C2 20 995 ( 18) LD True_1(P2) 0BB4-CA 31 996 ( 18) ST OBJ_DELETE(P2) ; Set Object Delete to True 0BB6- 997 ;---------------------------------------------------------------------- 0BB6- 998 PLACE_OBJECT: 0BB6-C2 25 999 ( 18) LD OBJ_H(P2) 0BB8-35 1000 ( 8) XPAH P1 0BB9-C2 26 1001 ( 18) LD OBJ_L(P2) 0BBB-31 1002 ( 8) XPAL P1 ; P1 now points top object location 0BBC- 1003 0BBC-C4 5F 1004 ( 10) LDI 0x5F 0BBE-CA 22 1005 ( 18) ST OBJ_P(P2) ;0x0F60 contains object 0BC0- 1006 0BC0-C4 04 1007 ( 10) LDI 0x04 0BC2-CA 24 1008 ( 18) ST OBJ_ROW(P2) 0BC4- 1009 0BC4- 1010 NEXT_ROW: 0BC4-C4 04 1011 ( 10) LDI 0x04 0BC6-CA 23 1012 ( 18) ST OBJ_COL(P2) 0BC8- 1013 0BC8- 1014 NEXT_COL: 0BC8-C2 31 1015 ( 18) LD OBJ_DELETE(P2) 0BCA-9C 0B 1016 (9/11) JNZ DELETE_OBJECT_BYTE 0BCC- 1017 0BCC-AA 22 1018 ( 22) ILD OBJ_P(P2) 0BCE-01 1019 ( 7) XAE 0BCF-C2 80 1020 ( 18) LD -128(P2) 0BD1-98 1A 1021 (9/11) JZ DO_NOT_STORE 0BD3-CD 01 1022 ( 18) ST @1(P1) ; Place Object 0BD5-94 18 1023 (9/11) JP STORED 0BD7- 1024 0BD7- 1025 DELETE_OBJECT_BYTE: 0BD7-AA 22 1026 ( 22) ILD OBJ_P(P2) 0BD9-01 1027 ( 7) XAE 0BDA-C2 80 1028 ( 18) LD -128(P2) 0BDC-98 0F 1029 (9/11) JZ DO_NOT_STORE 0BDE-C4 20 1030 ( 10) LDI 0x20 0BE0-CD 01 1031 ( 18) ST @1(P1) ; Place Space Chracter 0BE2-94 0B 1032 (9/11) JP STORED 0BE4- 1033 0BE4- 1034 NEXT_OBJECT_BYTE: 0BE4-AA 22 1035 ( 22) ILD OBJ_P(P2) 0BE6-01 1036 ( 7) XAE 0BE7-C2 80 1037 ( 18) LD -128(P2) 0BE9-CD 01 1038 ( 18) ST @1(P1) ; Place Space Chracter 0BEB-94 02 1039 (9/11) JP STORED 0BED- 1040 0BED- 1041 DO_NOT_STORE: 0BED-C5 01 1042 ( 18) LD @1(P1) 0BEF- 1043 0BEF- 1044 STORED: 0BEF- 1045 0BEF-BA 23 1046 ( 22) DLD OBJ_COL(P2) 0BF1-9C D5 1047 (9/11) JNZ NEXT_COL 0BF3- 1048 0BF3-C5 0C 1049 ( 18) LD @12(P1) 0BF5-BA 24 1050 ( 22) DLD OBJ_ROW(P2) 0BF7-9C CB 1051 (9/11) JNZ NEXT_ROW 0BF9- 1052 0BF9-C4 00 1053 ( 10) LDI 0x00 0BFB-CA 31 1054 ( 18) ST OBJ_DELETE(P2) ; Reset Object Delete to False 0BFD- 1055 0BFD- 1056 PLACE_OBJECT_RETURN: 0BFD-3F 1057 ( 7) RET P3 0BFE- 1058 0BFE- 1059 ;====================================================================== 0BFE- 1060 ;====================================================================== 0880- 1061 .OR PROG3 0880- 1062 DISPLAY_TEST_INFO: 0880- 1063 0880-C4 03 1064 ( 10) LDI DISP_TEST/256 0882-35 1065 ( 8) XPAH P1 0883-C4 E0 1066 ( 10) LDI DISP_TEST\256 0885-31 1067 ( 8) XPAL P1 0886- 1068 0886-C2 35 1069 ( 18) LD KEYPRESS(P2) 0888-CD 01 1070 ( 18) ST @1(P1) 088A-C5 02 1071 ( 18) LD @2(P1) 088C- 1072 088C-C2 34 1073 ( 18) LD OBJ_WIDTH(P2) 088E-DC 30 1074 ( 10) ORI 0x30 0890-CD 01 1075 ( 18) ST @1(P1) 0892-C5 01 1076 ( 18) LD @1(P1) 0894- 1077 0894-02 1078 ( 5) CCL 0895-C2 26 1079 ( 18) LD OBJ_L(P2) 0897-D4 0F 1080 ( 10) ANI 0x0F 0899-F2 34 1081 ( 19) ADD OBJ_WIDTH(P2) 089B-DC 30 1082 ( 10) ORI 0x30 089D-CD 01 1083 ( 18) ST @1(P1) 089F-C5 01 1084 ( 18) LD @1(P1) 08A1- 1085 08A1-C2 49 1086 ( 18) LD DELAY_LEVEL(P2) 08A3-DC 30 1087 ( 10) ORI 0x30 08A5-CD 01 1088 ( 18) ST @1(P1) 08A7-C5 01 1089 ( 18) LD @1(P1) 08A9- 1090 08A9-C2 50 1091 ( 18) LD CHAR(P2) 08AB- 1092 ;ORI 0x30 08AB-CD 01 1093 ( 18) ST @1(P1) 08AD-C5 01 1094 ( 18) LD @1(P1) 08AF- 1095 08AF- 1096 08AF- 1097 DISPLAY_TEST_INFO_RETURN: 08AF-3F 1098 ( 7) RET P3 08B0- 1099 ;====================================================================== 08B0- 1100 08B0- 1101 ;====================================================================== 0350- 1102 .OR DISP_TEXT 0350-23 20 20 20 10 12 05 13 13 20 20 23 20 20 20 20 1103 .HS 23202020101205131320202320202020 0360-23 20 20 20 20 20 20 20 20 20 20 23 23 23 23 23 1104 .HS 23202020202020202020202323232323 0370-23 20 20 20 07 0F 20 14 0F 20 20 23 20 20 20 20 1105 .HS 23202020070F20140F20202320202020 0380-23 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 1106 .HS 23202020202020202020202320202020 0390-23 20 20 20 13 14 01 12 14 20 20 23 20 20 20 20 1107 .HS 23202020131401121420202320202020 03A0- 1108 03A0- 1109 03A0- 1110 03A0- 1111 EXEC_ADR: FFFE 1112 .NO 0xFFFE FFFE-04 1113 .DB ENTRY/256 FFFF-00 1114 .DB ENTRY\256