1 2 ; LST OFF 3 ORG $1000 4 5 ******************************** 6 * * 7 * The Starfield Routine * 8 * by Mini Appler * 9 * (Midwest Pirates' Guild) * 10 * * 11 * Source by Deckard * 12 * * 13 ******************************** 14 15 * JUST BRUN THIS PROGRAM FROM A DOS 3.3 PROMPT 16 * AND PRESS ANY KEY (X TIMES) TO SEE THE PROCESS 17 * OF "The Starfield Routine" 18 19 *------------------------------- 20 * Zero page 21 *------------------------------- 22 23 RANDOM_DELAY EQU $00 ; delay (in loops) before moving a star 24 PTRL EQU $01 ; HGR2 screen pointer (low) 25 PTRH EQU $02 ; HGR2 screen pointer (high) 26 COORDX EQU $06 ; X [0,39] on HGR2 screen 27 COORDY EQU $07 ; Y [0,23] on HGR2 screen 28 29 *------------------------------- 30 * Rom 31 *------------------------------- 32 33 KEY EQU $C000 34 STROBE EQU $C010 35 SPKR EQU $C030 ; speaker 36 TXTCLR EQU $C050 37 MIXCLR EQU $C052 38 HISCR EQU $C055 39 HIRES EQU $C057 40 41 BASIC2 EQU $E003 42 INIT EQU $FB2F 43 HOME EQU $FC58 44 SETKBD EQU $FE89 45 SETVID EQU $FE93 46 47 ******************************** 48 1000: 2C 10 C0 49 BIT STROBE 1003: 20 E6 12 50 JSR INIT_SCREEN ; clear HGR2 screen and set mode on 51 52 * Display messages on HGR2 screen 53 1006: A9 0A 54 LDA #10 1008: 85 06 55 STA COORDX 100A: A9 01 56 LDA #1 100C: 85 07 57 STA COORDY 100E: 20 E0 14 58 JSR DSP_HGR2_STR 1011: D4 E8 E5 59 ASC "The Starfield Routine" 1014: A0 D3 F4 E1 F2 E6 E9 E5 101C: EC E4 A0 D2 EF F5 F4 E9 1024: EE E5 1026: 8D 00 60 HEX 8D00 61 1028: A9 0D 62 LDA #13 102A: 85 06 63 STA COORDX 102C: 20 E0 14 64 JSR DSP_HGR2_STR 102F: E2 F9 A0 65 ASC "by Mini Appler" 1032: CD E9 EE E9 A0 C1 F0 F0 103A: EC E5 F2 103D: 8D 8D 00 66 HEX 8D8D00 67 1040: A9 0C 68 LDA #12 1042: 85 06 69 STA COORDX 1044: 20 E0 14 70 JSR DSP_HGR2_STR 1047: D3 EF F5 71 ASC "Source by Deckard"00 104A: F2 E3 E5 A0 E2 F9 A0 C4 1052: E5 E3 EB E1 F2 E4 00 72 1059: A9 00 73 LDA #0 ; display the number of each column 105B: 85 06 74 STA COORDX 105D: A9 13 75 LDA #19 105F: 85 07 76 STA COORDY 1061: 20 E0 14 77 JSR DSP_HGR2_STR 1064: B0 B0 B0 78 ASC "0000000000111111111122222222223333333333" 1067: B0 B0 B0 B0 B0 B0 B0 B1 106F: B1 B1 B1 B1 B1 B1 B1 B1 1077: B1 B2 B2 B2 B2 B2 B2 B2 107F: B2 B2 B2 B3 B3 B3 B3 B3 1087: B3 B3 B3 B3 B3 108C: B0 B1 B2 79 ASC "0123456789012345678901234567890123456789"00 108F: B3 B4 B5 B6 B7 B8 B9 B0 1097: B1 B2 B3 B4 B5 B6 B7 B8 109F: B9 B0 B1 B2 B3 B4 B5 B6 10A7: B7 B8 B9 B0 B1 B2 B3 B4 10AF: B5 B6 B7 B8 B9 00 80 81 82 * Draw a big red line (before the 2 last lines of text) 83 10B5: A9 AC 84 LDA #172 ; last line 10B7: 8D BB 10 85 STA HB28F+1 86 10BA: A0 AC 87 HB28F LDY #172 10BC: B9 66 11 88 LDA HGR2_DATAL,Y 10BF: 85 01 89 STA PTRL 10C1: B9 26 12 90 LDA HGR2_DATAH,Y 10C4: 85 02 91 STA PTRH 92 10C6: A2 14 93 LDX #20 ; (even + odd) *20 = 40 bytes (1 line) 10C8: A0 00 94 LDY #0 10CA: A9 AA 95 HB29F LDA #$AA ; even 10CC: 91 01 96 STA (PTRL),Y 10CE: C8 97 INY 10CF: A9 D5 98 LDA #$D5 ; odd 10D1: 91 01 99 STA (PTRL),Y 10D3: C8 100 INY 10D4: CA 101 DEX 10D5: D0 F3 102 BNE HB29F 103 10D7: CE BB 10 104 DEC HB28F+1 ; previous part of the 'big' red line 10DA: AD BB 10 105 LDA HB28F+1 10DD: C9 AB 106 CMP #171 10DF: B0 D9 107 BCS HB28F 108 109 * Write 2 lines of text at the bottom of the HGR2 screen 110 10E1: A9 00 111 LDA #0 10E3: 85 06 112 STA COORDX 10E5: A9 16 113 LDA #22 10E7: 85 07 114 STA COORDY 10E9: 20 E0 14 115 JSR DSP_HGR2_STR 10EC: C5 D3 C3 116 ASC "ESC = END. ANY KEY = CONTINUE" 10EF: A0 BD A0 C5 CE C4 AE A0 10F7: A0 A0 A0 A0 A0 A0 A0 A0 10FF: A0 A0 A0 C1 CE D9 A0 CB 1107: C5 D9 A0 BD A0 C3 CF CE 110F: D4 C9 CE D5 C5 1114: BE BE BE 117 ASC ">>>>>>>>> Deckard was here!!!! <<<<<<<<<"00 1117: BE BE BE BE BE BE A0 C4 111F: E5 E3 EB E1 F2 E4 A0 F7 1127: E1 F3 A0 E8 E5 F2 E5 A1 112F: A1 A1 A1 A0 BC BC BC BC 1137: BC BC BC BC BC 00 118 119 *------------------------------- 120 * Process animation and wait 121 * for any key 122 *------------------------------- 123 113D: 20 61 14 124 JSR INIT_ANIM ; init animation 125 1140: AD 00 C0 126 :1 LDA KEY ; first stop (after init) 1143: 10 FB 127 BPL :1 128 129 1145: 2C 10 C0 130 KEY_PROCESS BIT STROBE 131 1148: 20 0B 13 132 JSR ANIMATION ; animation for the 40 columns 133 114B: AD 00 C0 134 :1 LDA KEY ; next stop 114E: 10 FB 135 BPL :1 136 1150: 2C 10 C0 137 BIT STROBE 1153: C9 9B 138 CMP #$9B ; esc? 1155: D0 EE 139 BNE KEY_PROCESS ; no, continue 140 1157: 20 89 FE 141 JSR SETKBD ; return to basic 115A: 20 93 FE 142 JSR SETVID 115D: 20 2F FB 143 JSR INIT 1160: 20 58 FC 144 JSR HOME 1163: 4C 03 E0 145 JMP BASIC2 146 147 *------------------------------- 148 * Addresses of each line of the 149 * HGR2 screen 150 *------------------------------- 151 152 * Low address 153 1166: 00 00 00 154 HGR2_DATAL HEX 0000000000000000 1169: 00 00 00 00 00 116E: 80 80 80 155 HEX 8080808080808080 1171: 80 80 80 80 80 1176: 00 00 00 156 HEX 0000000000000000 1179: 00 00 00 00 00 117E: 80 80 80 157 HEX 8080808080808080 1181: 80 80 80 80 80 1186: 00 00 00 158 HEX 0000000000000000 1189: 00 00 00 00 00 118E: 80 80 80 159 HEX 8080808080808080 1191: 80 80 80 80 80 1196: 00 00 00 160 HEX 0000000000000000 1199: 00 00 00 00 00 119E: 80 80 80 161 HB5BE HEX 8080808080808080 11A1: 80 80 80 80 80 11A6: 28 28 28 162 HEX 2828282828282828 11A9: 28 28 28 28 28 11AE: A8 A8 A8 163 HEX A8A8A8A8A8A8A8A8 11B1: A8 A8 A8 A8 A8 11B6: 28 28 28 164 HEX 2828282828282828 11B9: 28 28 28 28 28 11BE: A8 A8 A8 165 HEX A8A8A8A8A8A8A8A8 11C1: A8 A8 A8 A8 A8 11C6: 28 28 28 166 HEX 2828282828282828 11C9: 28 28 28 28 28 11CE: A8 A8 A8 167 HEX A8A8A8A8A8A8A8A8 11D1: A8 A8 A8 A8 A8 11D6: 28 28 28 168 HEX 2828282828282828 11D9: 28 28 28 28 28 11DE: A8 A8 A8 169 HEX A8A8A8A8A8A8A8A8 11E1: A8 A8 A8 A8 A8 11E6: 50 50 50 170 HEX 5050505050505050 11E9: 50 50 50 50 50 11EE: D0 D0 D0 171 HEX D0D0D0D0D0D0D0D0 11F1: D0 D0 D0 D0 D0 11F6: 50 50 50 172 HEX 5050505050505050 11F9: 50 50 50 50 50 11FE: D0 D0 D0 173 HEX D0D0D0D0D0D0D0D0 1201: D0 D0 D0 D0 D0 1206: 50 50 50 174 HEX 5050505050505050 1209: 50 50 50 50 50 120E: D0 D0 D0 175 HEX D0D0D0D0D0D0D0D0 1211: D0 D0 D0 D0 D0 1216: 50 50 50 176 HEX 5050505050505050 1219: 50 50 50 50 50 121E: D0 D0 D0 177 HEX D0D0D0D0D0D0D0D0 1221: D0 D0 D0 D0 D0 178 179 * High address 180 1226: 40 44 48 181 HGR2_DATAH HEX 4044484C5054585C 1229: 4C 50 54 58 5C 122E: 40 44 48 182 HEX 4044484C5054585C 1231: 4C 50 54 58 5C 1236: 41 45 49 183 HEX 4145494D5155595D 1239: 4D 51 55 59 5D 123E: 41 45 49 184 HEX 4145494D5155595D 1241: 4D 51 55 59 5D 1246: 42 46 4A 185 HEX 42464A4E52565A5E 1249: 4E 52 56 5A 5E 124E: 42 46 4A 186 HEX 42464A4E52565A5E 1251: 4E 52 56 5A 5E 1256: 43 47 4B 187 HEX 43474B4F53575B5F 1259: 4F 53 57 5B 5F 125E: 43 47 4B 188 HEX 43474B4F53575B5F 1261: 4F 53 57 5B 5F 1266: 40 44 48 189 HEX 4044484C5054585C 1269: 4C 50 54 58 5C 126E: 40 44 48 190 HEX 4044484C5054585C 1271: 4C 50 54 58 5C 1276: 41 45 49 191 HEX 4145494D5155595D 1279: 4D 51 55 59 5D 127E: 41 45 49 192 HEX 4145494D5155595D 1281: 4D 51 55 59 5D 1286: 42 46 4A 193 HEX 42464A4E52565A5E 1289: 4E 52 56 5A 5E 128E: 42 46 4A 194 HEX 42464A4E52565A5E 1291: 4E 52 56 5A 5E 1296: 43 47 4B 195 HEX 43474B4F53575B5F 1299: 4F 53 57 5B 5F 129E: 43 47 4B 196 HEX 43474B4F53575B5F 12A1: 4F 53 57 5B 5F 12A6: 40 44 48 197 HEX 4044484C5054585C 12A9: 4C 50 54 58 5C 12AE: 40 44 48 198 HEX 4044484C5054585C 12B1: 4C 50 54 58 5C 12B6: 41 45 49 199 HEX 4145494D5155595D 12B9: 4D 51 55 59 5D 12BE: 41 45 49 200 HEX 4145494D5155595D 12C1: 4D 51 55 59 5D 12C6: 42 46 4A 201 HEX 42464A4E52565A5E 12C9: 4E 52 56 5A 5E 12CE: 42 46 4A 202 HEX 42464A4E52565A5E 12D1: 4E 52 56 5A 5E 12D6: 43 47 4B 203 HEX 43474B4F53575B5F 12D9: 4F 53 57 5B 5F 12DE: 43 47 4B 204 HEX 43474B4F53575B5F 12E1: 4F 53 57 5B 5F 205 206 *------------------------------- 207 * Init HGR2 screen 208 *------------------------------- 209 210 * Clear HGR2 211 12E6: A9 40 212 INIT_SCREEN LDA #>$4000 ; clear memory space from $4000 to $5FFF 12E8: 8D F0 12 213 STA HB70E+2 12EB: A0 00 214 LDY #0 12ED: 98 215 HB70D TYA ; acc=0 12EE: 99 00 00 216 HB70E STA $0000,Y 12F1: C8 217 INY 12F2: D0 FA 218 BNE HB70E 219 12F4: EE F0 12 220 INC HB70E+2 12F7: AD F0 12 221 LDA HB70E+2 12FA: C9 60 222 CMP #>$6000 12FC: D0 EF 223 BNE HB70D 224 12FE: 2C 50 C0 225 BIT TXTCLR ; set HGR2 mode on 1301: 2C 57 C0 226 BIT HIRES 1304: 2C 52 C0 227 BIT MIXCLR 1307: 2C 55 C0 228 BIT HISCR 229 130A: 60 230 RTS 231 232 *------------------------------- 233 * Process the 40 stars 234 *------------------------------- 235 236 * Animation main loop 237 130B: A2 27 238 ANIMATION LDX #39 ; columns from right to left 130D: BC E9 13 239 HB745 LDY STARS_WK_LOOP,X ; remaining number of loops -1 1310: E6 00 240 INC RANDOM_DELAY 1312: 88 241 DEY 1313: F0 08 242 BEQ ANIM_1_STAR ; time to display it 243 1315: 98 244 TYA ; dec number of loops for that star 1316: 9D E9 13 245 STA STARS_WK_LOOP,X 1319: CA 246 HB751 DEX ; previous column 131A: 10 F1 247 BPL HB745 ; not finished 248 131C: 60 249 RTS 250 251 *------------------------------- 252 * Process one star 253 *------------------------------- 254 131D: BD C1 13 255 ANIM_1_STAR LDA STARS_RF_LOOP,X ; init byte (work table) for next time 1320: 9D E9 13 256 STA STARS_WK_LOOP,X ; use the byte from the reference table 257 ; (number of loops) 258 1323: BC 39 14 259 LDY STARS_POS_Y,X ; HGR2 pointer for the Y position of the 1326: B9 66 11 260 LDA HGR2_DATAL,Y ; star 1329: 85 01 261 STA PTRL 132B: B9 26 12 262 LDA HGR2_DATAH,Y 132E: 85 02 263 STA PTRH 264 1330: 8A 265 TXA 1331: A8 266 TAY 1332: BD FF 17 267 LDA BEFORE_STAR,X ; poke the value which was on the screen 1335: 91 01 268 STA (PTRL),Y ; before displaying the star 269 ; = delete the star from the screen 270 1337: BC 39 14 271 LDY STARS_POS_Y,X ; next move of the star 133A: C8 272 INY 133B: C0 C0 273 CPY #192 ; out of screen? 133D: B0 30 274 BCS STAR_AT_TOP ; yes 275 133F: 98 276 TYA ; save the new position of the star 1340: 9D 39 14 277 STA STARS_POS_Y,X 1343: B9 66 11 278 LDA HGR2_DATAL,Y ; and prepare the pointer for the next 1346: 85 01 279 STA PTRL ; write 1348: B9 26 12 280 LDA HGR2_DATAH,Y 134B: 85 02 281 STA PTRH 282 134D: 8A 283 TXA 134E: A8 284 TAY 134F: BD 39 14 285 LDA STARS_POS_Y,X ; is Y position = $1F or $3F or $5F or $7F or 1352: 29 1F 286 AND #%00011111 ; $9F or $BF? 1354: C9 1F 287 CMP #%00011111 1356: D0 08 288 BNE HB798 ; no 289 1358: BD 11 14 290 LDA STARS_BYT_VAL,X ; horizontal movement of the star 135B: 49 18 291 EOR #%00011000 ; + or - 1 bit (switch on/off bits 3 and 4) 135D: 9D 11 14 292 STA STARS_BYT_VAL,X ; save the byte with star inside 293 1360: B1 01 294 HB798 LDA (PTRL),Y ; save the screen byte before writing the star 1362: 9D FF 17 295 STA BEFORE_STAR,X 1365: BD 11 14 296 LDA STARS_BYT_VAL,X ; merge the star with the background 1368: 11 01 297 ORA (PTRL),Y 136A: 91 01 298 STA (PTRL),Y ; and display it 136C: 4C 19 13 299 JMP HB751 ; return to the animation's main loop 300 301 *------------------------------- 302 * The star is out of the screen 303 * (bottom) 304 * Init the next star which will 305 * appear at the top of the 306 * screen (same column) 307 *------------------------------- 308 136F: A9 00 309 STAR_AT_TOP LDA #0 ; the next Y pos of the star 1371: 9D 39 14 310 STA STARS_POS_Y,X 1374: A8 311 TAY 1375: B9 66 11 312 LDA HGR2_DATAL,Y ; get HGR2 pointer 1378: 85 01 313 STA PTRL 137A: B9 26 12 314 LDA HGR2_DATAH,Y 137D: 85 02 315 STA PTRH 316 137F: 8A 317 TXA 1380: A8 318 TAY 1381: B1 01 319 LDA (PTRL),Y ; init: save current byte of the HGR2 screen 1383: 9D FF 17 320 STA BEFORE_STAR,X 321 1386: BD 11 14 322 LDA STARS_BYT_VAL,X ; merge star and background 1389: 11 01 323 ORA (PTRL),Y 138B: 91 01 324 STA (PTRL),Y ; and display it 325 326 * And now set a delay (=speed) for that star 327 * The same value will be used from up to down 328 138D: E6 00 329 INC RANDOM_DELAY 138F: A5 00 330 LDA RANDOM_DELAY ; use a part of that value 1391: 29 1F 331 AND #%00011111 ; avoid a too long delay 1393: D0 04 332 BNE HB7D1 ; keep that value 333 1395: A9 0F 334 LDA #15 ; delay=0 not allowed. Set this one 1397: A0 01 335 LDY #1 336 1399: 9D E9 13 337 HB7D1 STA STARS_WK_LOOP,X 139C: 9D C1 13 338 STA STARS_RF_LOOP,X ; replace original reference 339 139F: 0A 340 ASL ; the delay is also used for the sound routine 13A0: 0A 341 ASL 13A1: 0A 342 ASL 13A2: 8D AA 13 343 STA HB7E1+1 13A5: 8A 344 TXA 13A6: 48 345 PHA 346 347 * Sound routine 348 13A7: A0 09 349 LDY #9 13A9: A2 01 350 HB7E1 LDX #1 13AB: CA 351 HB7E3 DEX 13AC: D0 FD 352 BNE HB7E3 353 13AE: 2C 30 C0 354 BIT SPKR 13B1: A2 06 355 LDX #6 13B3: CA 356 HB7EB DEX 13B4: D0 FD 357 BNE HB7EB 358 13B6: 2C 30 C0 359 BIT SPKR 13B9: 88 360 DEY 13BA: D0 ED 361 BNE HB7E1 362 13BC: 68 363 PLA 13BD: AA 364 TAX 13BE: 4C 19 13 365 JMP HB751 ; return to animation's main loop 366 367 *------------------------------- 368 * Datas for the stars 369 *------------------------------- 370 371 * Reference table: 372 * Number of main loops before displaying each star 373 * 1st run: display stars from left to right because 374 * of the incremental value (1 to 40) 375 * A new value is produced for each byte when the 376 * corresponding star begins a new cycle (up -> down) 377 13C1: 01 02 03 378 STARS_RF_LOOP HEX 0102030405060708 13C4: 04 05 06 07 08 13C9: 09 0A 0B 379 HEX 090A0B0C0D0E0F10 13CC: 0C 0D 0E 0F 10 13D1: 11 12 13 380 HEX 1112131415161718 13D4: 14 15 16 17 18 13D9: 19 1A 1B 381 HEX 191A1B1C1D1E1F20 13DC: 1C 1D 1E 1F 20 13E1: 21 22 23 382 HEX 2122232425262728 13E4: 24 25 26 27 28 383 384 * Work table: 385 * Number of main loops before displaying each star 386 * A copy of the reference table and then DEC byte/star 387 13E9: 00 00 00 388 STARS_WK_LOOP DS 40,0 13EC: 00 00 00 00 00 00 00 00 13F4: 00 00 00 00 00 00 00 00 13FC: 00 00 00 00 00 00 00 00 1404: 00 00 00 00 00 00 00 00 140C: 00 00 00 00 00 389 390 * Bytes for the 40 stars displayed on the screen 391 * 1 star for each column. Each byte is "poked" on the 392 * HGR2 screen (and contains 1 star) 393 1411: 88 08 10 394 STARS_BYT_VAL HEX 8808101088081088 1414: 10 88 08 10 88 1419: 08 10 10 395 HEX 0810101008100810 141C: 10 08 10 08 10 1421: 08 08 10 396 HEX 0808100810101088 1424: 08 10 10 10 88 1429: 10 08 88 397 HEX 1008881008088808 142C: 10 08 08 88 08 1431: 08 10 88 398 HEX 0810881010081088 1434: 10 10 08 10 88 399 400 * 40 * Lines # (for every column) 401 * Current position of each star 402 * The following value are for the init screen 403 1439: 14 01 7B 404 STARS_POS_Y HEX 14017B64321EA909 143C: 64 32 1E A9 09 1441: 81 39 4E 405 HEX 81394EB220BE503C 1444: B2 20 BE 50 3C 1449: 59 70 26 406 HEX 5970265E03174B3C 144C: 5E 03 17 4B 3C 1451: A5 91 05 407 HEX A59105468C2A765F 1454: 46 8C 2A 76 5F 1459: 17 3C 84 408 HEX 173C84644335992F 145C: 64 43 35 99 2F 409 410 *------------------------------- 411 * Init animation 412 *------------------------------- 413 1461: A2 27 414 INIT_ANIM LDX #39 ; 40 columns 1463: BD C1 13 415 HB89B LDA STARS_RF_LOOP,X ; copy # of loops from ref table 1466: 9D E9 13 416 STA STARS_WK_LOOP,X ; to work table 417 1469: BD 39 14 418 LDA STARS_POS_Y,X ; line # for this column (where the star 146C: A8 419 TAY ; must be written) 146D: B9 66 11 420 LDA HGR2_DATAL,Y ; HGR2 pointer 1470: 85 01 421 STA PTRL 1472: B9 26 12 422 LDA HGR2_DATAH,Y 1475: 85 02 423 STA PTRH 1477: 8A 424 TXA 1478: A8 425 TAY 1479: B1 01 426 LDA (PTRL),Y ; save the byte of the screen where the star 147B: 9D FF 17 427 STA BEFORE_STAR,X ; will be written 147E: CA 428 DEX ; previous column 147F: 10 E2 429 BPL HB89B 430 1481: 60 431 RTS 432 433 *------------------------------- 434 * Display a character on HGR2 435 * screen 436 *------------------------------- 437 438 * In : Acc = "character" 439 1482: 84 04 440 DSP_HGR2_CHAR STY $04 ; save Y 1484: 86 05 441 STX $05 ; save X 442 1486: A2 00 443 LDX #0 ; init offset (high) for font addr 1488: 86 0C 444 STX $0C 445 148A: C9 8D 446 CMP #$8D ; return? 148C: F0 47 447 BEQ HB913 ; yes 448 148E: C9 A0 449 CMP #" " ; first allowed character 1490: 90 49 450 BCC HB919 ; out of range 451 1492: 38 452 SEC ; [" ","~"] -> [0,94] 1493: E9 A0 453 SBC #" " 1495: 0A 454 ASL ; *8 to be on the first byte 1496: 26 0C 455 ROL $0C ; and prepare offset (high) 1498: 0A 456 ASL 1499: 26 0C 457 ROL $0C 149B: 0A 458 ASL 149C: 26 0C 459 ROL $0C 149E: 69 07 460 ADC #FONT 14A7: 8D C1 14 464 STA HB8FD+2 465 466 * Calc the Y position of the 1st line where to write 467 * the first byte of the character 468 14AA: A5 07 469 LDA COORDY ; line # *8 14AC: 0A 470 ASL 14AD: 0A 471 ASL 14AE: 0A 472 ASL 14AF: A8 473 TAY 14B0: B9 66 11 474 LDA HGR2_DATAL,Y 14B3: 85 0A 475 STA $0A 14B5: B9 26 12 476 LDA HGR2_DATAH,Y 14B8: 85 0B 477 STA $0B 14BA: A5 06 478 LDA COORDX 14BC: A8 479 TAY 480 481 * Write the full character 482 14BD: A2 07 483 LDX #7 ; 8 bytes for 1 full character 14BF: BD FF FF 484 HB8FD LDA $FFFF,X 14C2: 91 0A 485 STA ($0A),Y 14C4: A9 04 486 LDA #>$0400 ; calc position for the byte above 14C6: 65 0B 487 ADC $0B 14C8: 85 0B 488 STA $0B 14CA: CA 489 DEX 14CB: 10 F2 490 BPL HB8FD 491 492 * Position for the next character of the string 493 14CD: E6 06 494 INC COORDX 14CF: A5 06 495 LDA COORDX 14D1: C9 28 496 CMP #40 ; out of line 14D3: 90 06 497 BCC HB919 ; no 498 14D5: A9 00 499 HB913 LDA #0 ; init abscissa 14D7: 85 06 500 STA COORDX 14D9: E6 07 501 INC COORDY ; next line 502 14DB: A6 05 503 HB919 LDX $05 ; restore X 14DD: A4 04 504 LDY $04 ; restore Y 14DF: 60 505 RTS 506 507 *------------------------------- 508 * Print string on HGR2 screen 509 *------------------------------- 510 14E0: 68 511 DSP_HGR2_STR PLA ; get string addr-1 14E1: 85 08 512 STA $08 14E3: 68 513 PLA 14E4: 85 09 514 STA $09 14E6: 98 515 TYA ; save Y 14E7: 48 516 PHA 14E8: 8A 517 TXA ; save X 14E9: 48 518 PHA 519 14EA: A0 00 520 LDY #0 521 14EC: E6 08 522 HB954 INC $08 14EE: D0 02 523 BNE HB95A 524 14F0: E6 09 525 INC $09 14F2: B1 08 526 HB95A LDA ($08),Y 14F4: F0 06 527 BEQ HB964 ; end of string 528 14F6: 20 82 14 529 JSR DSP_HGR2_CHAR ; display this character 14F9: 4C EC 14 530 JMP HB954 ; next char 531 14FC: 68 532 HB964 PLA ; restore X 14FD: AA 533 TAX 14FE: 68 534 PLA ; restore Y 14FF: A8 535 TAY 1500: A5 09 536 LDA $09 ; addr of return 1502: 48 537 PHA 1503: A5 08 538 LDA $08 1505: 48 539 PHA 1506: 60 540 RTS ; return to sender (and skip string) 541 542 543 *------------------------------- 544 * Datas for the characters 545 *------------------------------- 546 1507: 80 80 80 547 FONT HEX 8080808080808080 ; space 150A: 80 80 80 80 80 150F: 80 87 87 548 HEX 8087878087878787 ; ! 1512: 80 87 87 87 87 1517: 80 80 80 549 HEX 80808080B6A4B6B6 ; " 151A: 80 B6 A4 B6 B6 151F: 80 9E 9E 550 HEX 809E9EBF9EBF9E9E ; # 1522: BF 9E BF 9E 9E 1527: 80 8C 9F 551 HEX 808C9FB09E83BE8C ; $ 152A: B0 9E 83 BE 8C 152F: 80 BB BB 552 HEX 80BBBB868C98B7B7 ; % 1532: 86 8C 98 B7 B7 1537: 80 AE 9B 553 HEX 80AE9BBB8F868F86 ; & 153A: BB 8F 86 8F 86 153F: 80 80 80 554 HEX 808080808C888C8C ; ' 1542: 80 8C 88 8C 8C 1547: 80 B8 9C 555 HEX 80B89C8E8E8E9CB8 ; ( 154A: 8E 8E 8E 9C B8 154F: 80 87 8E 556 HEX 80878E9C9C9C8E87 ; ) 1552: 9C 9C 9C 8E 87 1557: 80 88 AA 557 HEX 8088AA9CBE9CAA88 ; * 155A: 9C BE 9C AA 88 155F: 80 80 8C 558 HEX 80808C8CBFBF8C8C ; + 1562: 8C BF BF 8C 8C 1567: 83 86 87 559 HEX 8386878080808080 ; , 156A: 80 80 80 80 80 156F: 80 80 80 560 HEX 80808080BEBE8080 ; - 1572: 80 BE BE 80 80 1577: 80 87 87 561 HEX 8087878080808080 ; . 157A: 80 80 80 80 80 157F: 80 83 87 562 HEX 8083878E9CB8F0E0 ; / 1582: 8E 9C B8 F0 E0 1587: 80 9E B3 563 HEX 809EB3B3B3B3B39E ; 0 158A: B3 B3 B3 B3 9E 158F: 80 BF 8C 564 HEX 80BF8C8C8C8F8E8C ; 1 1592: 8C 8C 8F 8E 8C 1597: 80 BF BF 565 HEX 80BFBF8EB8B3BF9E ; 2 159A: 8E B8 B3 BF 9E 159F: 80 9E BF 566 HEX 809EBFB0BEB0BF9E ; 3 15A2: B0 BE B0 BF 9E 15A7: 80 B0 B0 567 HEX 80B0B0BFB3B6BCB8 ; 4 15AA: BF B3 B6 BC B8 15AF: 80 9E BF 568 HEX 809EBFB09F83BFBF ; 5 15B2: B0 9F 83 BF BF 15B7: 80 9E BF 569 HEX 809EBFB39F83BF9E ; 6 15BA: B3 9F 83 BF 9E 15BF: 80 8C 8C 570 HEX 808C8C8C98B0BFBF ; 7 15C2: 8C 98 B0 BF BF 15C7: 80 9E BF 571 HEX 809EBFB39EB3BF9E ; 8 15CA: B3 9E B3 BF 9E 15CF: 80 9E BF 572 HEX 809EBFB0BEB3BF9E ; 9 15D2: B0 BE B3 BF 9E 15D7: 80 9C 9C 573 HEX 809C9C80809C9C80 ; : 15DA: 80 80 9C 9C 80 15DF: 83 86 87 574 HEX 8386878080878780 ; ; 15E2: 80 80 87 87 80 15E7: 80 F0 B8 575 HEX 80F0B89C8E9CB8F0 ; < 15EA: 9C 8E 9C B8 F0 15EF: 80 80 80 576 HEX 808080BE80BE8080 ; = WAS BUGGED!! (same data bytes as '-') 15F2: BE 80 BE 80 80 15F7: 80 87 8E 577 HEX 80878E9CB89C8E87 ; > 15FA: 9C B8 9C 8E 87 15FF: 80 8C 80 578 HEX 808C808C98B3BF9E ; ? 1602: 8C 98 B3 BF 9E 1607: 80 BE 83 579 HEX 80BE83BBBBB3B39E ; @ 160A: BB BB B3 B3 9E 160F: 80 B3 B3 580 HEX 80B3B3BFBFB3BF9E ; A 1612: BF BF B3 BF 9E 1617: 80 9F BF 581 HEX 809FBFB39FB3BF9F ; B 161A: B3 9F B3 BF 9F 161F: 80 9E BF 582 HEX 809EBFB383B3BF9E ; C 1622: B3 83 B3 BF 9E 1627: 80 9F BF 583 HEX 809FBFB3B3B3BF9F ; D 162A: B3 B3 B3 BF 9F 162F: 80 BF BF 584 HEX 80BFBF839F83BFBF ; E 1632: 83 9F 83 BF BF 1637: 80 83 83 585 HEX 8083839F9F83BFBF ; F 163A: 9F 9F 83 BF BF 163F: 80 9E BF 586 HEX 809EBFB3BB83BF9E ; G 1642: B3 BB 83 BF 9E 1647: 80 B3 B3 587 HEX 80B3B3BFBFB3B3B3 ; H 164A: BF BF B3 B3 B3 164F: 80 BF BF 588 HEX 80BFBF8C8C8CBFBF ; I 1652: 8C 8C 8C BF BF 1657: 80 9E BF 589 HEX 809EBFB3B0B0B0B0 ; J 165A: B3 B0 B0 B0 B0 165F: 80 B3 BB 590 HEX 80B3BB9F8F9FBBB3 ; K 1662: 9F 8F 9F BB B3 1667: 80 BF BF 591 HEX 80BFBF8383838383 ; L 166A: 83 83 83 83 83 166F: 80 B3 B3 592 HEX 80B3B3B3B3B3BFB3 ; M 1672: B3 B3 B3 BF B3 1677: 80 B3 B3 593 HEX 80B3B3BBBFB7B3B3 ; N 167A: BB BF B7 B3 B3 167F: 80 9E BF 594 HEX 809EBFB3B3B3BF9E ; O 1682: B3 B3 B3 BF 9E 1687: 80 83 83 595 HEX 8083839FBFB3BF9F ; P 168A: 9F BF B3 BF 9F 168F: 80 AE 93 596 HEX 80AE93ABA3A3BF9E ; Q 1692: AB A3 A3 BF 9E 1697: 80 B3 BB 597 HEX 80B3BB9FBFB3BF9F ; R 169A: 9F BF B3 BF 9F 169F: 80 9E B3 598 HEX 809EB3B09E83B39E ; S 16A2: B0 9E 83 B3 9E 16A7: 80 8C 8C 599 HEX 808C8C8C8C8CBFBF ; T 16AA: 8C 8C 8C BF BF 16AF: 80 9E BF 600 HEX 809EBFB3B3B3B3B3 ; U 16B2: B3 B3 B3 B3 B3 16B7: 80 8C 9E 601 HEX 808C9EB3B3B3B3B3 ; V 16BA: B3 B3 B3 B3 B3 16BF: 80 B3 BF 602 HEX 80B3BFB3B3B3B3B3 ; W 16C2: B3 B3 B3 B3 B3 16C7: 80 B3 B3 603 HEX 80B3B39E8C9EB3B3 ; X 16CA: 9E 8C 9E B3 B3 16CF: 80 8C 8C 604 HEX 808C8C8C9EB3B3B3 ; Y 16D2: 8C 9E B3 B3 B3 16D7: 80 BF BF 605 HEX 80BFBF868C98BFBF ; Z 16DA: 86 8C 98 BF BF 16DF: 80 BC BC 606 HEX 80BCBC8C8C8CBCBC ; [ 16E2: 8C 8C 8C BC BC 16E7: 80 E0 F0 607 HEX 80E0F0B89C8E8783 ; backslash 16EA: B8 9C 8E 87 83 16EF: 80 8F 8F 608 HEX 808F8F8C8C8C8F8F ; ] 16F2: 8C 8C 8C 8F 8F 16F7: 80 80 80 609 HEX 8080808080BF9E8C ; exp 16FA: 80 80 BF 9E 8C 16FF: 80 FF FF 610 HEX 80FFFF8080808080 ; _ 1702: 80 80 80 80 80 1707: 80 80 80 611 HEX 8080808080988C86 ; 170A: 80 80 98 8C 86 170F: 80 BE B3 612 HEX 80BEB3BEB09E8080 ; a 1712: BE B0 9E 80 80 1717: 80 9F B3 613 HEX 809FB3B3B39F8383 ; b 171A: B3 B3 9F 83 83 171F: 80 9E B3 614 HEX 809EB383B39E8080 ; c 1722: 83 B3 9E 80 80 1727: 80 BE B3 615 HEX 80BEB3B3B3BEB0B0 ; d 172A: B3 B3 BE B0 B0 172F: 80 9E 83 616 HEX 809E839FB39E8080 ; e 1732: 9F B3 9E 80 80 1737: 80 86 86 617 HEX 808686869F86B69C ; f 173A: 86 9F 86 B6 9C 173F: 9E B0 BE 618 HEX 9EB0BEB3B39E8080 ; g 1742: B3 B3 9E 80 80 1747: 80 B3 B3 619 HEX 80B3B3B3B39F8383 ; h 174A: B3 B3 9F 83 83 174F: 80 8C 8C 620 HEX 808C8C8C8C808C80 ; i 1752: 8C 8C 80 8C 80 1757: 9E B3 B3 621 HEX 9EB3B3B0B0B080B0 ; j 175A: B0 B0 B0 80 B0 175F: 80 B3 9B 622 HEX 80B39B8F9BB38383 ; k 1762: 8F 9B B3 83 83 1767: 80 9E 8C 623 HEX 809E8C8C8C8C8C8E ; l 176A: 8C 8C 8C 8C 8E 176F: 80 B3 B3 624 HEX 80B3B3B3BFB38080 : m 1772: B3 BF B3 80 80 1777: 80 B3 B3 625 HEX 80B3B3B3B39F8080 ; n 177A: B3 B3 9F 80 80 177F: 80 9E B3 626 HEX 809EB3B3B39E8080 ; o 1782: B3 B3 9E 80 80 1787: 83 83 9F 627 HEX 83839FB3B39F8080 ; p 178A: B3 B3 9F 80 80 178F: B0 B0 BE 628 HEX B0B0BEB3B3BE8080 ; q 1792: B3 B3 BE 80 80 1797: 80 83 83 629 HEX 80838383B39F8080 ; r 179A: 83 B3 9F 80 80 179F: 80 9E B0 630 HEX 809EB09E839E8080 ; s 17A2: 9E 83 9E 80 80 17A7: 80 9C B6 631 HEX 809CB686869F8686 ; t 17AA: 86 86 9F 86 86 17AF: 80 BE B3 632 HEX 80BEB3B3B3B38080 ; u 17B2: B3 B3 B3 80 80 17B7: 80 8C 9E 633 HEX 808C9EB3B3B38080 ; v 17BA: B3 B3 B3 80 80 17BF: 80 B3 BF 634 HEX 80B3BFB3B3B38080 ; w 17C2: B3 B3 B3 80 80 17C7: 80 B3 9E 635 HEX 80B39E8C9EB38080 ; x 17CA: 8C 9E B3 80 80 17CF: 9E B0 BE 636 HEX 9EB0BEB3B3B38080 ; y 17D2: B3 B3 B3 80 80 17D7: 80 BF 86 637 HEX 80BF868C98BF8080 ; z 17DA: 8C 98 BF 80 80 17DF: 80 9C 9E 638 HEX 809C9E8687869E9C ; { 17E2: 86 87 86 9E 9C 17E7: 8C 8C 8C 639 HEX 8C8C8C8C8C8C8C8C ; | 17EA: 8C 8C 8C 8C 8C 17EF: 80 8E 9E 640 HEX 808E9E98B8989E8E ; } 17F2: 98 B8 98 9E 8E 17F7: 80 80 80 641 HEX 808080808098BF86 ; ~ 17FA: 80 80 98 BF 86 642 643 *------------------------------- 644 645 * Backup of bytes of the screen before writing the stars 646 17FF: 00 00 00 647 BEFORE_STAR DS 40,0 1802: 00 00 00 00 00 00 00 00 180A: 00 00 00 00 00 00 00 00 1812: 00 00 00 00 00 00 00 00 181A: 00 00 00 00 00 00 00 00 1822: 00 00 00 00 00 648 649 *------------------------------- 650 651 SAV THE_STARFIELD_ROUTINE Object saved as THE_STARFIELD_ROUTINE,A$1000,L$0827 --End assembly, 2087 bytes, Errors: 0 Symbol table - alphabetical order: ANIMATION =$130B ANIM_1_STAR =$131D BASIC2 =$E003 BEFORE_STAR =$17FF COORDX =$06 COORDY =$07 DSP_HGR2_CHAR=$1482 DSP_HGR2_STR =$14E0 FONT =$1507 HB28F =$10BA HB29F =$10CA ? HB5BE =$119E HB70D =$12ED HB70E =$12EE HB745 =$130D HB751 =$1319 HB798 =$1360 HB7D1 =$1399 HB7E1 =$13A9 HB7E3 =$13AB HB7EB =$13B3 HB89B =$1463 HB8FD =$14BF HB913 =$14D5 HB919 =$14DB HB954 =$14EC HB95A =$14F2 HB964 =$14FC HGR2_DATAH =$1226 HGR2_DATAL =$1166 HIRES =$C057 HISCR =$C055 HOME =$FC58 INIT =$FB2F INIT_ANIM =$1461 INIT_SCREEN =$12E6 KEY =$C000 KEY_PROCESS =$1145 MIXCLR =$C052 PTRH =$02 PTRL =$01 RANDOM_DELAY =$00 SETKBD =$FE89 SETVID =$FE93 SPKR =$C030 STARS_BYT_VAL=$1411 STARS_POS_Y =$1439 STARS_RF_LOOP=$13C1 STARS_WK_LOOP=$13E9 STAR_AT_TOP =$136F STROBE =$C010 TXTCLR =$C050 Symbol table - numerical order: RANDOM_DELAY =$00 PTRL =$01 PTRH =$02 COORDX =$06 COORDY =$07 HB28F =$10BA HB29F =$10CA KEY_PROCESS =$1145 HGR2_DATAL =$1166 ? HB5BE =$119E HGR2_DATAH =$1226 INIT_SCREEN =$12E6 HB70D =$12ED HB70E =$12EE ANIMATION =$130B HB745 =$130D HB751 =$1319 ANIM_1_STAR =$131D HB798 =$1360 STAR_AT_TOP =$136F HB7D1 =$1399 HB7E1 =$13A9 HB7E3 =$13AB HB7EB =$13B3 STARS_RF_LOOP=$13C1 STARS_WK_LOOP=$13E9 STARS_BYT_VAL=$1411 STARS_POS_Y =$1439 INIT_ANIM =$1461 HB89B =$1463 DSP_HGR2_CHAR=$1482 HB8FD =$14BF HB913 =$14D5 HB919 =$14DB DSP_HGR2_STR =$14E0 HB954 =$14EC HB95A =$14F2 HB964 =$14FC FONT =$1507 BEFORE_STAR =$17FF KEY =$C000 STROBE =$C010 SPKR =$C030 TXTCLR =$C050 MIXCLR =$C052 HISCR =$C055 HIRES =$C057 BASIC2 =$E003 INIT =$FB2F HOME =$FC58 SETKBD =$FE89 SETVID =$FE93