1 2 ; LST OFF 3 ORG $B100 4 5 ******************************** 6 * * 7 * Beautiful Boot * 8 * by Mini Appler * 9 * >>> BOOT2 <<< * 10 * * 11 * Source by Deckard * 12 * * 13 ******************************** 14 15 * Select only BIN files from T$11 S$0F and T$11 S$0E 16 * Max Files on the screen = 14 (letters A to N) 17 18 * In : X = slot*16 19 20 *------------------------------- 21 * Zero page 22 *------------------------------- 23 24 RANDOM_DELAY EQU $00 ; delay (in loops) before moving a star 25 PTRL EQU $01 ; HGR2 screen pointer (low) 26 PTRH EQU $02 ; HGR2 screen pointer (high) 27 COORDX EQU $06 ; X [0,39] on HGR2 screen 28 COORDY EQU $07 ; Y [0,23] on HGR2 screen 29 BIN_COUNT EQU $10 ; # of bin files 30 OBJNUM EQU $11 ; "key" for each bin 31 CH EQU $24 ; X for TXT page 32 CV EQU $25 ; Y for TXT page 33 PARM_SD EQU $F1 ; [0sss00dd] s=slot, d=drive 34 ; if dd=0, don't use drive number switch 35 ; = use last used drive 36 37 * DOS 3.3 File Manager 38 39 BUFADRL EQU $42 ; file buffer (low) 40 BUFADRH EQU $43 : (high) 41 42 * RDADR16 routine 43 44 RETRYCNT EQU $F2 ; nbr of retries 45 COUNT_NIBBLE EQU $F5 ; max nbr of nibbles before D5 AA 96 46 WTEMP EQU $F6 ; temp. field 47 WCHKSUM EQU $F8 ; working checksum 48 49 * Found address field 50 51 READ_CHKSUM EQU $F3 ; checksum 52 READ_SECT EQU $F4 ; sector number 53 READ_TRK EQU $F5 ; track number 54 READ_VOL EQU $F6 ; volume number 55 56 * Read data field 57 58 IDX EQU $F6 ; index 59 60 * MYSEEK/SEEKABS (DOS 3.3 RWTS) 61 62 TRKCNT EQU $F3 63 PRIOR EQU $F4 64 TRKN EQU $F5 65 DRV0TRK EQU $F7 66 ZCURTRK EQU $F7 67 SLOTEMP EQU $F8 68 MONTIMEL EQU $F9 69 MONTIMEH EQU $FA 70 71 * Mini RWTS parms 72 73 PTR_BUFFL EQU $FB ; pointer (low) for addr where to load pgm 74 PTR_BUFFH EQU $FC ; (high) 75 NB_SECT EQU $FD ; number of sectors 76 TRACK EQU $FE ; start track 77 SECTOR EQU $FF ; start sector 78 79 *------------------------------- 80 * Ram 81 *------------------------------- 82 83 IN EQU $0200 84 PAGE3 EQU $0300 85 CURTRK EQU $0478 ; DOS 3.3 RWTS current track 86 H0800 EQU $0800 87 BUFFER EQU $6000 88 BUFFER2 EQU $6100 89 90 *------------------------------- 91 * Rom 92 *------------------------------- 93 94 KEY EQU $C000 95 STROBE EQU $C010 96 SPKR EQU $C030 ; speaker 97 TXTCLR EQU $C050 98 MIXCLR EQU $C052 99 HISCR EQU $C055 100 HIRES EQU $C057 101 102 BASIC2 EQU $E003 103 INIT EQU $FB2F 104 VTAB EQU $FC22 105 HOME EQU $FC58 106 COUT EQU $FDED 107 SETKBD EQU $FE89 108 SETVID EQU $FE93 109 110 ******************************** 111 B100: A9 00 112 HB100 LDA #0 ; we're on track $00 B102: 85 F7 113 STA ZCURTRK B104: 8A 114 TXA ; acc=slot*16 (bits 7 to 4) B105: 09 01 115 ORA #%00000001 ; set drive=1 B107: 85 F1 116 STA PARM_SD ; slot/drive 117 B109: A2 FF 118 REFRESH LDX #$FF 119 B10B: 38 120 SEC ; EOR #$52 -> EOR #$A5 B10C: 2E CB B8 121 ROL HB8CA+1 B10F: 05 00 122 HB10F ORA RANDOM_DELAY 123 B111: 2C 10 C0 124 BIT STROBE B114: 20 06 B7 125 JSR INIT_SCREEN 126 B117: A9 04 127 LDA #$04 B119: 8D 77 B1 128 STA HB176+1 129 130 *------------------------------- 131 * Display messages on HGR2 screen 132 *------------------------------- 133 B11C: A9 0D 134 LDA #13 B11E: 85 06 135 STA COORDX B120: A9 01 136 LDA #1 B122: 85 07 137 STA COORDY B124: EE C7 B8 138 INC HB8C6+1 ; LDY #$7F -> LDY #$80 B127: 20 48 B9 139 JSR DSP_HGR2_STR 140 ; Beautiful Boot (EOR #$A5) B12A: 67 40 141 HB12A HEX 6740 B12C: 44 142 HB12C HEX 44 ; check B12D: 50 51 4C 143 HEX 50514C43504905674A4A51 B130: 43 50 49 05 67 4A 4A 51 B138: 8D 00 144 HEX 8D00 145 B13A: A9 0D 146 LDA #13 B13C: 85 06 147 STA COORDX B13E: 20 48 B9 148 JSR DSP_HGR2_STR 149 ; by Mini Appler (EOR #$A5) B141: 47 5C 150 HB141 HEX 475C B143: 05 151 HB143 HEX 05 ; check B144: 68 4C 4B 152 HEX 684C4B4C05645555494057 B147: 4C 05 64 55 55 49 40 57 B14F: 8D 00 153 HEX 8D00 154 B151: CE C7 B8 155 DEC HB8C6+1 ; LDY #$80 -> LDY #$7F B154: 4E CB B8 156 LSR HB8CA+1 ; EOR #$A5 -> EOR #$52 157 B157: A9 60 158 LDA #>BUFFER B159: 85 FC 159 STA PTR_BUFFH B15B: A9 00 160 LDA #BUFFER B172: 85 02 173 STA PTRH 174 B174: A0 0B 175 LDY #$0B ; 1st file descriptive entry 176 B176: A9 04 177 HB176 LDA #4 B178: 85 07 178 STA COORDY B17A: A9 08 179 LDA #8 B17C: 85 06 180 STA COORDX 181 B17E: A5 11 182 LDA OBJNUM B180: 0A 183 ASL B181: AA 184 TAX ; X=bin file# *2 B182: B1 01 185 LDA (PTRL),Y ; track of TSL B184: F0 05 186 BEQ HB18B ; no file 187 B186: 9D 00 03 188 STA PAGE3,X ; store it B189: 10 0A 189 BPL HB195 ; always 190 B18B: 98 191 HB18B TYA ; next file descriptive entry B18C: 18 192 CLC B18D: 69 23 193 ADC #$23 B18F: A8 194 TAY B190: CE 77 B1 195 DEC HB176+1 B193: D0 52 196 BNE HB1E7 197 B195: C8 198 HB195 INY ; sector of TSL B196: B1 01 199 LDA (PTRL),Y B198: E8 200 HB198 INX B199: 9D 00 03 201 STA PAGE3,X ; store it 202 B19C: C8 203 INY B19D: B1 01 204 LDA (PTRL),Y ; file type B19F: 29 0F 205 AND #$0F ; remove lock information B1A1: C9 04 206 CMP #$04 ; is it a BIN file? B1A3: B0 09 207 BCS HB1AE ; yes 208 B1A5: 98 209 TYA ; next file descriptive entry B1A6: 69 21 210 ADC #$21 B1A8: A8 211 TAY B1A9: CE 77 B1 212 DEC HB176+1 B1AC: D0 39 213 BNE HB1E7 214 B1AE: C8 215 HB1AE INY B1AF: A2 1E 216 LDX #30 ; display the filename B1B1: B1 01 217 HB1B1 LDA (PTRL),Y B1B3: 20 BA B8 218 JSR DSP_HGR2_CHAR B1B6: C8 219 INY B1B7: CA 220 DEX B1B8: D0 F7 221 BNE HB1B1 222 B1BA: A9 04 223 LDA #4 B1BC: 85 06 224 STA COORDX 225 B1BE: B1 01 226 LDA (PTRL),Y ; length of bin file in sectors (low) B1C0: 85 0C 227 STA $0C 228 B1C2: C8 229 INY B1C3: B1 01 230 LDA (PTRL),Y ; length of bin file in sectors (high) B1C5: 85 0D 231 STA $0D 232 B1C7: 98 233 TYA ; save the index of the file descriptive entry B1C8: 48 234 PHA B1C9: 20 AA B9 235 JSR DSP_3_DIGITS ; display length 236 B1CC: 68 237 PLA ; restore index B1CD: A8 238 TAY B1CE: A9 00 239 LDA #0 ; display the letter for this bin file B1D0: 85 06 240 STA COORDX B1D2: A9 DB 241 LDA #"[" B1D4: 20 BA B8 242 JSR DSP_HGR2_CHAR B1D7: A5 11 243 LDA OBJNUM B1D9: 18 244 CLC B1DA: 69 C1 245 ADC #"A" B1DC: 20 BA B8 246 JSR DSP_HGR2_CHAR B1DF: A9 DD 247 LDA #"]" B1E1: 20 BA B8 248 JSR DSP_HGR2_CHAR 249 B1E4: E6 11 250 INC OBJNUM B1E6: C8 251 INY B1E7: C0 0E 252 HB1E7 CPY #14 B1E9: B0 04 253 BCS HB1EF 254 B1EB: A0 0B 255 LDY #$0B B1ED: E6 02 256 INC PTRH 257 B1EF: EE 77 B1 258 HB1EF INC HB176+1 B1F2: E6 10 259 INC BIN_COUNT ; add this object B1F4: A5 10 260 LDA BIN_COUNT ; max bin files =14 B1F6: C9 0F 261 CMP #15 ; too many bin B1F8: F0 03 262 BEQ HB1FD ; stop here 263 B1FA: 4C 76 B1 264 JMP HB176 ; search next bin file 265 266 * Display floppy disk info and other bottom page infos 267 B1FD: A9 C0 268 HB1FD LDA #$C0 ; letter for the last bin file B1FF: 05 11 269 ORA OBJNUM B201: 85 11 270 STA OBJNUM B203: A9 11 271 LDA #$11 ; track B205: A2 00 272 LDX #0 ; sector B207: A0 01 273 LDY #1 ; 1 sector B209: 20 6F B9 274 JSR TS_READ ; load VTOC 275 B20C: A9 13 276 LDA #19 B20E: 85 07 277 STA COORDY B210: A9 00 278 LDA #0 B212: 85 06 279 STA COORDX B214: 20 78 B9 280 JSR DSP_FREE_SECT 281 B217: 20 48 B9 282 JSR DSP_HGR2_STR B21A: A0 C6 F2 283 ASC " Free sectors Slot ["00 B21D: E5 E5 A0 F3 E5 E3 F4 EF B225: F2 F3 A0 A0 D3 EC EF F4 B22D: A0 DB 00 284 B230: A5 F1 285 LDA PARM_SD B232: 48 286 PHA ; save Slot / Drive B233: 4A 287 LSR ; erase drive #, get slot # B234: 4A 288 LSR B235: 4A 289 LSR B236: 4A 290 LSR B237: 09 B0 291 ORA #"0" ;displayable form B239: 20 BA B8 292 JSR DSP_HGR2_CHAR B23C: 20 48 B9 293 JSR DSP_HGR2_STR B23F: DD A0 A0 294 ASC "] Drive ["00 B242: C4 F2 E9 F6 E5 A0 DB 00 295 B24A: 68 296 PLA ; restore Slot / Drive B24B: 29 0F 297 AND #%00001111 ; erase slot #, get drive # B24D: 09 B0 298 ORA #"0" ; displayable form B24F: 20 BA B8 299 JSR DSP_HGR2_CHAR B252: 20 48 B9 300 JSR DSP_HGR2_STR B255: DD 8D 301 ASC "]"8D B257: D5 F3 E5 302 ASC "Use keys A through "00 B25A: A0 EB E5 F9 F3 A0 C1 A0 B262: F4 E8 F2 EF F5 E7 E8 A0 B26A: 00 303 B26B: A5 11 304 LDA OBJNUM ; display last usable key B26D: 20 BA B8 305 JSR DSP_HGR2_CHAR B270: E6 11 306 INC OBJNUM B272: 20 48 B9 307 JSR DSP_HGR2_STR B275: A0 F4 EF 308 ASC " to select your ware"00 B278: A0 F3 E5 EC E5 E3 F4 A0 B280: F9 EF F5 F2 A0 F7 E1 F2 B288: E5 00 309 310 * Draw a big red line (before the 2 last lines of text) 311 B28A: A9 AC 312 LDA #172 ; last line B28C: 8D 90 B2 313 STA HB28F+1 314 B28F: A0 AC 315 HB28F LDY #172 B291: B9 86 B5 316 LDA HGR2_DATAL,Y B294: 85 01 317 STA PTRL B296: B9 46 B6 318 LDA HGR2_DATAH,Y B299: 85 02 319 STA PTRH 320 B29B: A2 14 321 LDX #20 ; (even + odd) *20 = 40 bytes (1 line) B29D: A0 00 322 LDY #0 B29F: A9 AA 323 HB29F LDA #$AA ; even B2A1: 91 01 324 STA (PTRL),Y B2A3: C8 325 INY B2A4: A9 D5 326 LDA #$D5 ; odd B2A6: 91 01 327 STA (PTRL),Y B2A8: C8 328 INY B2A9: CA 329 DEX B2AA: D0 F3 330 BNE HB29F 331 B2AC: CE 90 B2 332 DEC HB28F+1 ; previous part of the 'big' red line B2AF: AD 90 B2 333 LDA HB28F+1 B2B2: C9 AB 334 CMP #171 B2B4: B0 D9 335 BCS HB28F 336 337 * Write 2 lines of text at the bottom of the screen 338 B2B6: 20 48 B9 339 JSR DSP_HGR2_STR B2B9: 8D 340 DFB $8D B2BA: A0 A0 A0 341 ASC " " B2BD: A0 A0 A0 A0 A0 A0 A0 A0 B2C5: A0 A0 A0 A0 A0 A0 A0 A0 B2CD: A0 A0 A0 A0 A0 A0 A0 A0 B2D5: A0 A0 A0 A0 A0 A0 A0 A0 B2DD: A0 A0 A0 A0 A0 B2E2: A0 A0 A0 342 ASC " "00 B2E5: A0 A0 A0 A0 A0 A0 A0 A0 B2ED: A0 A0 A0 A0 A0 A0 A0 A0 B2F5: A0 A0 A0 A0 A0 A0 A0 A0 B2FD: A0 A0 A0 A0 A0 A0 A0 A0 B305: A0 A0 A0 A0 A0 00 343 344 *------------------------------- 345 * Process animation and wait 346 * for any key 347 *------------------------------- 348 B30B: 20 99 B8 349 JSR INIT_ANIM ; init animation 350 B30E: 2C 10 C0 351 KEY_PROCESS BIT STROBE 352 B311: 20 43 B7 353 HB311 JSR ANIMATION ; animation for the 40 columns 354 B314: AD 00 C0 355 LDA KEY ; key pressed? B317: 10 F8 356 BPL HB311 ; no 357 B319: 2C 10 C0 358 BIT STROBE B31C: C9 E0 359 CMP #$E0 B31E: 90 02 360 BCC HB322 361 B320: E9 20 362 SBC #$20 363 B322: C9 8D 364 HB322 CMP #$8D ; return? B324: D0 03 365 BNE HB329 ; no 366 B326: 4C 09 B1 367 JMP REFRESH ; go to scan the new floppy disk 368 B329: C9 9B 369 HB329 CMP #$9B ; esc? B32B: D0 0F 370 BNE HB33C ; no 371 B32D: 20 89 FE 372 JSR SETKBD ; return to basic B330: 20 93 FE 373 JSR SETVID B333: 20 2F FB 374 JSR INIT B336: 20 58 FC 375 JSR HOME B339: 4C 03 E0 376 JMP BASIC2 377 B33C: C9 A0 378 HB33C CMP #" " ; space? B33E: F0 03 379 BEQ HB343 ; yes 380 B340: 4C 23 B4 381 JMP BIN_FILE_SELT ; check for bin file selection 382 383 *------------------------------- 384 * Change Slot/Drive 385 *------------------------------- 386 387 * Change slot # 388 B343: A9 16 389 HB343 LDA #22 B345: 85 07 390 STA COORDY B347: 20 48 B9 391 JSR DSP_HGR2_STR B34A: 8D 392 DFB $8D B34B: C5 EE F4 393 ASC "Enter the new slot # and hit " B34E: E5 F2 A0 F4 E8 E5 A0 EE B356: E5 F7 A0 F3 EC EF F4 A0 B35E: A3 A0 E1 EE E4 A0 E8 E9 B366: F4 A0 B368: DB D2 C5 394 ASC "[RETURN] "00 B36B: D4 D5 D2 CE DD A0 A0 A0 B373: 00 395 B374: A9 13 396 LDA #19 ; erase current slot valut B376: 85 07 397 STA COORDY B378: A9 18 398 LDA #24 B37A: 85 06 399 STA COORDX B37C: A9 A0 400 LDA #" " B37E: 20 BA B8 401 JSR DSP_HGR2_CHAR 402 B381: 2C 10 C0 403 HB381 BIT STROBE B384: AD 00 C0 404 HB384 LDA KEY ; wait for the new slot # B387: 10 FB 405 BPL HB384 406 B389: C9 8D 407 CMP #$8D ; return B38B: F0 1A 408 BEQ HB3A7 ; ok, now change drive # 409 B38D: C9 B1 410 CMP #"1" B38F: 90 F0 411 BCC HB381 ; bad value 412 B391: C9 B8 413 CMP #"8" B393: B0 EC 414 BCS HB381 ; out of range 415 B395: 85 0D 416 STA $0D ; store value B397: A9 13 417 LDA #19 B399: 85 07 418 STA COORDY B39B: A9 18 419 LDA #24 B39D: 85 06 420 STA COORDX B39F: A5 0D 421 LDA $0D ; display new slot value B3A1: 20 BA B8 422 JSR DSP_HGR2_CHAR 423 B3A4: 4C 81 B3 424 JMP HB381 ; wait for return 425 426 * Change drive # 427 B3A7: A9 16 428 HB3A7 LDA #22 B3A9: 85 07 429 STA COORDY B3AB: 20 48 B9 430 JSR DSP_HGR2_STR B3AE: 8D 431 DFB $8D B3AF: C5 EE F4 432 ASC "Enter the new drive # and hit " B3B2: E5 F2 A0 F4 E8 E5 A0 EE B3BA: E5 F7 A0 E4 F2 E9 F6 E5 B3C2: A0 A3 A0 E1 EE E4 A0 E8 B3CA: E9 F4 A0 B3CD: DB D2 C5 433 ASC "[RETURN] "00 B3D0: D4 D5 D2 CE DD A0 A0 00 434 B3D8: A9 13 435 LDA #19 ; erase current drive value B3DA: 85 07 436 STA COORDY B3DC: A9 23 437 LDA #35 B3DE: 85 06 438 STA COORDX B3E0: A9 A0 439 LDA #" " B3E2: 20 BA B8 440 JSR DSP_HGR2_CHAR 441 B3E5: 2C 10 C0 442 HB3E5 BIT STROBE ; wait for the new drive # B3E8: AD 00 C0 443 HB3E8 LDA KEY B3EB: 10 FB 444 BPL HB3E8 445 B3ED: C9 8D 446 CMP #$8D ; return? B3EF: F0 1A 447 BEQ HB40B ; yes 448 B3F1: C9 B1 449 CMP #"1" B3F3: 90 F0 450 BCC HB3E5 ; bad value 451 B3F5: C9 B3 452 CMP #"3" B3F7: B0 EC 453 BCS HB3E5 ; out of range 454 B3F9: 85 0E 455 STA $0E ; store value B3FB: A9 13 456 LDA #19 B3FD: 85 07 457 STA COORDY B3FF: A9 23 458 LDA #35 B401: 85 06 459 STA COORDX B403: A5 0E 460 LDA $0E ; display new drive value B405: 20 BA B8 461 JSR DSP_HGR2_CHAR 462 B408: 4C E5 B3 463 JMP HB3E5 ; wait for return 464 465 * Build new reference 466 B40B: A5 0D 467 HB40B LDA $0D ; slot*16 B40D: 0A 468 ASL B40E: 0A 469 ASL B40F: 0A 470 ASL B410: 0A 471 ASL B411: 48 472 PHA ; save it 473 B412: A5 0E 474 LDA $0E ; drive # B414: 29 0F 475 AND #%00001111 B416: 85 0E 476 STA $0E 477 B418: 68 478 PLA B419: 05 0E 479 ORA $0E ; mix both B41B: 85 F1 480 STA PARM_SD ; save new reference B41D: 4C 09 B1 481 JMP REFRESH ; restart 482 483 *------------------------------- 484 * Bin file selection 485 *------------------------------- 486 B420: 4C 0E B3 487 HB420 JMP KEY_PROCESS 488 B423: C9 C1 489 BIN_FILE_SELT CMP #"A" B425: 90 F9 490 BCC HB420 ; out of range 491 B427: C5 11 492 CMP OBJNUM ; last letter B429: B0 F5 493 BCS HB420 ; out of range 494 495 * Bin file selected. 496 497 * Clear HGR2 screen (up and down from middle of screen) 498 B42B: 48 499 PHA ; save file letter 500 B42C: A2 5F 501 HB42C LDX #95 ; pointer for line (up) B42E: BD 86 B5 502 LDA HGR2_DATAL,X B431: 85 01 503 STA PTRL B433: BD 46 B6 504 LDA HGR2_DATAH,X B436: 85 02 505 STA PTRH 506 B438: A0 27 507 LDY #39 ; clear that line (up) B43A: A9 00 508 LDA #0 B43C: 91 01 509 HB43C STA (PTRL),Y B43E: 88 510 DEY B43F: 10 FB 511 BPL HB43C 512 B441: 8E 73 B5 513 STX HB572+1 ; for sound routine B444: 20 70 B5 514 JSR SOUND 515 B447: A2 5F 516 HB447 LDX #95 ; pointer for line (down) B449: BD 86 B5 517 LDA HGR2_DATAL,X B44C: 85 01 518 STA PTRL B44E: BD 46 B6 519 LDA HGR2_DATAH,X B451: 85 02 520 STA PTRH 521 B453: A0 27 522 LDY #39 ; clear that line (down) B455: A9 00 523 LDA #0 B457: 91 01 524 HB457 STA (PTRL),Y B459: 88 525 DEY B45A: 10 FB 526 BPL HB457 527 B45C: 8E 73 B5 528 STX HB572+1 ; for sound routine B45F: 20 70 B5 529 JSR SOUND 530 B462: EE 2D B4 531 INC HB42C+1 ; previous line (up) B465: CE 48 B4 532 DEC HB447+1 ; next line (down) B468: 10 C2 533 BPL HB42C ; clear the next 2 line 534 535 * Clear TXT screen and display "wait" message 536 B46A: 20 89 FE 537 JSR SETKBD B46D: 20 93 FE 538 JSR SETVID B470: 20 2F FB 539 JSR INIT B473: 20 58 FC 540 JSR HOME B476: A9 0C 541 LDA #12 B478: 85 25 542 STA CV B47A: A9 0A 543 LDA #10 B47C: 85 24 544 STA CH B47E: 20 1E B9 545 JSR DSP_TXT_STR B481: D0 D2 C5 546 ASC "PREPARE YOURSELF..."8D00 B484: D0 C1 D2 C5 A0 D9 CF D5 B48C: D2 D3 C5 CC C6 AE AE AE B494: 8D 00 547 548 * Load TSL of the bin file 549 B496: A9 02 550 LDA #>IN ; 'protected' buffer! B498: 85 FC 551 STA PTR_BUFFH ; no pgm loaded here B49A: A9 00 552 LDA #H0800 B4B3: 85 FC 568 STA PTR_BUFFH B4B5: A9 00 569 LDA #$79FC B513: F0 2D 630 BEQ HB542 ; it was the last TSL 631 632 ; more than 1 TSL B515: A5 FC 633 LDA PTR_BUFFH ; save current addr B517: 48 634 PHA B518: A5 FB 635 LDA PTR_BUFFL B51A: 48 636 PHA 637 B51B: A9 02 638 LDA #>IN ; addr for next TSL B51D: 85 FC 639 STA PTR_BUFFH B51F: A9 00 640 LDA # load 1 sector B52A: B9 00 02 647 LDA IN,Y ; track of next TSL B52D: 20 6F B9 648 JSR TS_READ 649 B530: 68 650 PLA ; restore current addr for next load B531: 85 FB 651 STA PTR_BUFFL B533: 68 652 PLA B534: 85 FC 653 STA PTR_BUFFH 654 B536: A9 00 655 HB536 LDA #0 ; remaining length B538: 85 12 656 STA $12 B53A: A9 00 657 LDA #0 ; no other TSL B53C: 8D 12 B5 658 STA HB511+1 B53F: 4C F6 B4 659 JMP HB4F6 ; process this 2nd TSL 660 B542: A5 F7 661 HB542 LDA ZCURTRK ; save current track # B544: 8D 78 04 662 STA CURTRK B547: A9 03 663 LDA #>PAGE3 ; select data buffer B549: 85 43 664 STA BUFADRH B54B: A9 00 665 LDA #$4000 ; clear memory space from $4000 to $5FFF B708: 8D 10 B7 775 STA HB70E+2 B70B: A0 00 776 LDY #0 B70D: 98 777 HB70D TYA ; acc=0 B70E: 99 00 00 778 HB70E STA $0000,Y B711: C8 779 INY B712: D0 FA 780 BNE HB70E 781 B714: EE 10 B7 782 INC HB70E+2 B717: AD 10 B7 783 LDA HB70E+2 B71A: C9 60 784 CMP #>BUFFER B71C: D0 EF 785 BNE HB70D 786 B71E: 2C 50 C0 787 BIT TXTCLR ; set HGR2 mode on B721: 2C 57 C0 788 BIT HIRES B724: 2C 52 C0 789 BIT MIXCLR B727: 2C 55 C0 790 BIT HISCR 791 792 * Check integrity of the title (=protection) 793 B72A: A9 00 794 LDA #0 B72C: 8D 36 B7 795 STA HB735+1 796 B72F: A0 0D 797 LDY #13 B731: B9 2A B1 798 HB731 LDA HB12A,Y ; beautiful Boot B734: 18 799 CLC B735: 69 00 800 HB735 ADC #0 B737: 8D 36 B7 801 STA HB735+1 B73A: 88 802 DEY B73B: 10 F4 803 BPL HB731 804 B73D: CD 0F B1 805 CMP HB10F ; check byte with good value B740: D0 CB 806 BNE HB70D ; bad, stop here B742: 60 807 RTS ; ok, the title is not altered 808 809 *------------------------------- 810 * Process the 40 stars 811 *------------------------------- 812 813 * Animation main loop 814 B743: A2 27 815 ANIMATION LDX #39 ; columns from right to left B745: BC 21 B8 816 HB745 LDY STARS_WK_LOOP,X ; remaining number of loops -1 B748: E6 00 817 INC RANDOM_DELAY B74A: 88 818 DEY B74B: F0 08 819 BEQ ANIM_1_STAR ; time to display it 820 B74D: 98 821 TYA ; dec number of loops for that star B74E: 9D 21 B8 822 STA STARS_WK_LOOP,X B751: CA 823 HB751 DEX ; previous column B752: 10 F1 824 BPL HB745 ; not finished 825 B754: 60 826 RTS 827 828 *------------------------------- 829 * Process one star 830 *------------------------------- 831 B755: BD F9 B7 832 ANIM_1_STAR LDA STARS_RF_LOOP,X ; init byte (work table) for next time B758: 9D 21 B8 833 STA STARS_WK_LOOP,X ; use the byte from the reference table 834 ; (number of loops) 835 B75B: BC 71 B8 836 LDY STARS_POS_Y,X ; HGR2 pointer for the Y position of the B75E: B9 86 B5 837 LDA HGR2_DATAL,Y ; star B761: 85 01 838 STA PTRL B763: B9 46 B6 839 LDA HGR2_DATAH,Y B766: 85 02 840 STA PTRH 841 B768: 8A 842 TXA B769: A8 843 TAY B76A: BD A7 BF 844 LDA BEFORE_STAR,X ; poke the value which was on the screen B76D: 91 01 845 STA (PTRL),Y ; before displaying the star 846 ; = delete the star from the screen 847 B76F: BC 71 B8 848 LDY STARS_POS_Y,X ; next move of the star B772: C8 849 INY B773: C0 C0 850 CPY #192 ; out of screen? B775: B0 30 851 BCS STAR_AT_TOP ; yes 852 B777: 98 853 TYA ; save the new position of the star B778: 9D 71 B8 854 STA STARS_POS_Y,X B77B: B9 86 B5 855 LDA HGR2_DATAL,Y ; and prepare the pointer for the next B77E: 85 01 856 STA PTRL ; write B780: B9 46 B6 857 LDA HGR2_DATAH,Y B783: 85 02 858 STA PTRH 859 B785: 8A 860 TXA B786: A8 861 TAY B787: BD 71 B8 862 LDA STARS_POS_Y,X ; is Y position = $1F or $3F or $5F or $7F B78A: 29 1F 863 AND #%00011111 ; or $9F or $BF? B78C: C9 1F 864 CMP #%00011111 B78E: D0 08 865 BNE HB798 ; no 866 B790: BD 49 B8 867 LDA STARS_BYT_VAL,X ; horizontal movement of the star B793: 49 18 868 EOR #%00011000 ; + or - 1 bit (switch on/off bits 3 and 4) B795: 9D 49 B8 869 STA STARS_BYT_VAL,X ; save the byte with star inside 870 B798: B1 01 871 HB798 LDA (PTRL),Y ; save the screen byte before writing the star B79A: 9D A7 BF 872 STA BEFORE_STAR,X B79D: BD 49 B8 873 LDA STARS_BYT_VAL,X ; merge the star with the background B7A0: 11 01 874 ORA (PTRL),Y B7A2: 91 01 875 STA (PTRL),Y ; and display it B7A4: 4C 51 B7 876 JMP HB751 ; return to the animation's main loop 877 878 *------------------------------- 879 * The star is out of the screen 880 * (bottom) 881 * Init the next star which will 882 * appear at the top of the 883 * screen (same column) 884 *------------------------------- 885 B7A7: A9 00 886 STAR_AT_TOP LDA #0 ; the next Y pos of the star B7A9: 9D 71 B8 887 STA STARS_POS_Y,X B7AC: A8 888 TAY B7AD: B9 86 B5 889 LDA HGR2_DATAL,Y ; get HGR2 pointer B7B0: 85 01 890 STA PTRL B7B2: B9 46 B6 891 LDA HGR2_DATAH,Y B7B5: 85 02 892 STA PTRH 893 B7B7: 8A 894 TXA B7B8: A8 895 TAY B7B9: B1 01 896 LDA (PTRL),Y ; init: save current byte of the HGR2 screen B7BB: 9D A7 BF 897 STA BEFORE_STAR,X 898 B7BE: BD 49 B8 899 LDA STARS_BYT_VAL,X ; merge star and background B7C1: 11 01 900 ORA (PTRL),Y B7C3: 91 01 901 STA (PTRL),Y 902 903 * And now set a delay (=speed) for that star 904 * The same value will be used from up to down 905 B7C5: E6 00 906 INC RANDOM_DELAY B7C7: A5 00 907 LDA RANDOM_DELAY ; use a part of that value B7C9: 29 1F 908 AND #%00011111 ; avoid a too long delay B7CB: D0 04 909 BNE HB7D1 ; keep that value 910 B7CD: A9 0F 911 LDA #15 ; delay=0 not allowed. Set this one B7CF: A0 01 912 LDY #1 913 B7D1: 9D 21 B8 914 HB7D1 STA STARS_WK_LOOP,X B7D4: 9D F9 B7 915 STA STARS_RF_LOOP,X ; replace original reference 916 B7D7: 0A 917 ASL ; the delay is also used for the sound routine B7D8: 0A 918 ASL B7D9: 0A 919 ASL B7DA: 8D E2 B7 920 STA HB7E1+1 B7DD: 8A 921 TXA B7DE: 48 922 PHA 923 924 * Sound routine 925 B7DF: A0 09 926 LDY #9 B7E1: A2 01 927 HB7E1 LDX #1 B7E3: CA 928 HB7E3 DEX B7E4: D0 FD 929 BNE HB7E3 930 B7E6: 2C 30 C0 931 BIT SPKR B7E9: A2 06 932 LDX #6 B7EB: CA 933 HB7EB DEX B7EC: D0 FD 934 BNE HB7EB 935 B7EE: 2C 30 C0 936 BIT SPKR B7F1: 88 937 DEY B7F2: D0 ED 938 BNE HB7E1 939 B7F4: 68 940 PLA B7F5: AA 941 TAX B7F6: 4C 51 B7 942 JMP HB751 ; return to animation's main loop 943 944 *------------------------------- 945 * Datas for the stars 946 *------------------------------- 947 948 * Reference table: 949 * Number of main loops before displaying each star 950 * 1st run: display stars from left to right because 951 * of the incremental value (1 to 40) 952 * A new value is produced for each byte when the 953 * corresponding star begins a new cycle (up -> down) 954 B7F9: 01 02 03 955 STARS_RF_LOOP HEX 0102030405060708 B7FC: 04 05 06 07 08 B801: 09 0A 0B 956 HEX 090A0B0C0D0E0F10 B804: 0C 0D 0E 0F 10 B809: 11 12 13 957 HEX 1112131415161718 B80C: 14 15 16 17 18 B811: 19 1A 1B 958 HEX 191A1B1C1D1E1F20 B814: 1C 1D 1E 1F 20 B819: 21 22 23 959 HEX 2122232425262728 B81C: 24 25 26 27 28 960 961 * Work table: 962 * Number of main loops before displaying each star 963 * A copy of the reference table and then DEC byte/star 964 B821: 00 00 00 965 STARS_WK_LOOP DS 40,0 B824: 00 00 00 00 00 00 00 00 B82C: 00 00 00 00 00 00 00 00 B834: 00 00 00 00 00 00 00 00 B83C: 00 00 00 00 00 00 00 00 B844: 00 00 00 00 00 966 967 * Bytes for the 40 stars displayed on the screen 968 * 1 star for each column. Each byte is "poked" on the 969 * HGR2 screen (and contains 1 star) 970 B849: 88 08 10 971 STARS_BYT_VAL HEX 8808101088081088 B84C: 10 88 08 10 88 B851: 08 10 10 972 HEX 0810101008100810 B854: 10 08 10 08 10 B859: 08 08 10 973 HEX 0808100810101088 B85C: 08 10 10 10 88 B861: 10 08 88 974 HEX 1008881008088808 B864: 10 08 08 88 08 B869: 08 10 88 975 HEX 0810881010081088 B86C: 10 10 08 10 88 976 977 * 40 * Lines # (for every column) 978 * Current position of each star 979 * The following value are for the init screen 980 B871: 14 01 7B 981 STARS_POS_Y HEX 14017B64321EA909 B874: 64 32 1E A9 09 B879: 81 39 4E 982 HEX 81394EB220BE503C B87C: B2 20 BE 50 3C B881: 59 70 26 983 HEX 5970265E03174B3C B884: 5E 03 17 4B 3C B889: A5 91 05 984 HEX A59105468C2A765F B88C: 46 8C 2A 76 5F B891: 17 3C 84 985 HEX 173C84644335992F B894: 64 43 35 99 2F 986 987 *------------------------------- 988 * Init animation 989 *------------------------------- 990 B899: A2 27 991 INIT_ANIM LDX #39 ; 40 columns B89B: BD F9 B7 992 HB89B LDA STARS_RF_LOOP,X ; copy # of loops from ref table B89E: 9D 21 B8 993 STA STARS_WK_LOOP,X ; to work table 994 B8A1: BD 71 B8 995 LDA STARS_POS_Y,X ; line # for this column (where the star B8A4: A8 996 TAY ; must be written) B8A5: B9 86 B5 997 LDA HGR2_DATAL,Y ; HGR2 pointer B8A8: 85 01 998 STA PTRL B8AA: B9 46 B6 999 LDA HGR2_DATAH,Y B8AD: 85 02 1000 STA PTRH B8AF: 8A 1001 TXA B8B0: A8 1002 TAY B8B1: B1 01 1003 LDA (PTRL),Y ; save the byte of the screen where the star B8B3: 9D A7 BF 1004 STA BEFORE_STAR,X ; will be written B8B6: CA 1005 DEX ; previous column B8B7: 10 E2 1006 BPL HB89B 1007 B8B9: 60 1008 RTS 1009 1010 *------------------------------- 1011 * Display a character on HGR2 1012 * screen 1013 *------------------------------- 1014 1015 * In : Acc = "character" 1016 B8BA: 84 04 1017 DSP_HGR2_CHAR STY $04 ; save Y B8BC: 86 05 1018 STX $05 ; save X 1019 B8BE: A2 00 1020 LDX #0 ; init offset (high) for font addr B8C0: 86 0C 1021 STX $0C 1022 B8C2: C9 8D 1023 CMP #$8D ; return? B8C4: F0 4D 1024 BEQ HB913 ; yes 1025 B8C6: A0 7F 1026 HB8C6 LDY #$7F ; or LDY #$80 (protected msg) B8C8: 10 02 1027 BPL HB8CC ; always if not a protected msg 1028 1029 ; always if a protected msg B8CA: 49 52 1030 HB8CA EOR #$52 ; or EOR #$A5 (protected msg) 1031 B8CC: C9 A0 1032 HB8CC CMP #" " B8CE: 90 49 1033 BCC HB919 1034 B8D0: 38 1035 SEC ; [" ","~"] -> [0,94] B8D1: E9 A0 1036 SBC #" " B8D3: 0A 1037 ASL ; *8 to be on the first byte B8D4: 26 0C 1038 ROL $0C ; and prepare offset (high) B8D6: 0A 1039 ASL B8D7: 26 0C 1040 ROL $0C B8D9: 0A 1041 ASL B8DA: 26 0C 1042 ROL $0C B8DC: 69 97 1043 ADC #FONT B8E5: 8D FF B8 1047 STA HB8FD+2 1048 1049 * Calc the Y position of the 1st line where to write 1050 * the first byte of the character 1051 B8E8: A5 07 1052 LDA COORDY ; line # *8 B8EA: 0A 1053 ASL B8EB: 0A 1054 ASL B8EC: 0A 1055 ASL B8ED: A8 1056 TAY B8EE: B9 86 B5 1057 LDA HGR2_DATAL,Y B8F1: 85 0A 1058 STA $0A B8F3: B9 46 B6 1059 LDA HGR2_DATAH,Y B8F6: 85 0B 1060 STA $0B B8F8: A5 06 1061 LDA COORDX B8FA: A8 1062 TAY 1063 1064 * Write the full character 1065 B8FB: A2 07 1066 LDX #7 ; 8 bytes for 1 full character B8FD: BD FF FF 1067 HB8FD LDA $FFFF,X B900: 91 0A 1068 STA ($0A),Y B902: A9 04 1069 LDA #>$0400 ; calc position for the byte above B904: 65 0B 1070 ADC $0B B906: 85 0B 1071 STA $0B B908: CA 1072 DEX B909: 10 F2 1073 BPL HB8FD 1074 1075 * Position for the next character of the string 1076 B90B: E6 06 1077 INC COORDX B90D: A5 06 1078 LDA COORDX B90F: C9 28 1079 CMP #40 ; out of line? B911: 90 06 1080 BCC HB919 ; no 1081 B913: A9 00 1082 HB913 LDA #0 ; init abscissa B915: 85 06 1083 STA COORDX B917: E6 07 1084 INC COORDY ; next line 1085 B919: A6 05 1086 HB919 LDX $05 ; restore X B91B: A4 04 1087 LDY $04 ; restore Y B91D: 60 1088 RTS 1089 1090 *------------------------------- 1091 * Print string on TXT screen 1092 *------------------------------- 1093 B91E: 68 1094 DSP_TXT_STR PLA ; restore ptr-1 on the string B91F: 85 08 1095 STA $08 B921: 68 1096 PLA B922: 85 09 1097 STA $09 1098 B924: 98 1099 TYA ; save Y and X registers B925: 48 1100 PHA B926: 8A 1101 TXA B927: 48 1102 PHA 1103 B928: 20 22 FC 1104 JSR VTAB ; position 1105 B92B: A0 00 1106 LDY #0 B92D: E6 08 1107 HB92D INC $08 ; next character of the string (or 1st one) B92F: D0 02 1108 BNE HB933 ; low only 1109 B931: E6 09 1110 INC $09 ; high 1111 B933: B1 08 1112 HB933 LDA ($08),Y ; get character B935: F0 06 1113 BEQ HB93D ; end of string 1114 B937: 20 ED FD 1115 JSR COUT ; display it on txt screen B93A: 4C 2D B9 1116 JMP HB92D ; next character 1117 B93D: 68 1118 HB93D PLA ; restore X and Y registers B93E: AA 1119 TAX B93F: 68 1120 PLA B940: A8 1121 TAY 1122 B941: A5 09 1123 LDA $09 ; ptr (after string) on stack B943: 48 1124 PHA B944: A5 08 1125 LDA $08 B946: 48 1126 PHA B947: 60 1127 RTS ; return to sender 1128 1129 *------------------------------- 1130 * Print string on HGR2 screen 1131 *------------------------------- 1132 B948: 68 1133 DSP_HGR2_STR PLA ; get string addr-1 B949: 85 08 1134 STA $08 B94B: 68 1135 PLA B94C: 85 09 1136 STA $09 B94E: 98 1137 TYA ; save Y B94F: 48 1138 PHA B950: 8A 1139 TXA ; save X B951: 48 1140 PHA 1141 B952: A0 00 1142 LDY #0 1143 B954: E6 08 1144 HB954 INC $08 B956: D0 02 1145 BNE HB95A 1146 B958: E6 09 1147 INC $09 B95A: B1 08 1148 HB95A LDA ($08),Y B95C: F0 06 1149 BEQ HB964 ; end of string 1150 B95E: 20 BA B8 1151 JSR DSP_HGR2_CHAR ; display this character B961: 4C 54 B9 1152 JMP HB954 ; next char 1153 B964: 68 1154 HB964 PLA ; restore X B965: AA 1155 TAX B966: 68 1156 PLA ; restore Y B967: A8 1157 TAY B968: A5 09 1158 LDA $09 ; addr of return B96A: 48 1159 PHA B96B: A5 08 1160 LDA $08 B96D: 48 1161 PHA B96E: 60 1162 RTS ; return to sender (and skip string) 1163 1164 *------------------------------- 1165 * Read Track/Sector 1166 *------------------------------- 1167 B96F: 85 FE 1168 TS_READ STA TRACK B971: 86 FF 1169 STX SECTOR B973: 84 FD 1170 STY NB_SECT B975: 4C 00 BA 1171 JMP MINI_RWTS 1172 1173 *------------------------------- 1174 * Display # of free sectors 1175 *------------------------------- 1176 B978: A9 00 1177 DSP_FREE_SECT LDA #0 ; init free sector B97A: 85 0E 1178 STA $0E ; low B97C: 85 0F 1179 STA $0F ; high 1180 B97E: C6 FC 1181 DEC PTR_BUFFH B980: A5 FC 1182 LDA PTR_BUFFH B982: 8D 89 B9 1183 STA HB987+2 B985: A2 C1 1184 LDX #$C1 B987: BD 00 61 1185 HB987 LDA BUFFER2,X B98A: F8 1186 SED B98B: A0 08 1187 LDY #$08 B98D: 4A 1188 HB98D LSR B98E: 90 0E 1189 BCC HB99E 1190 B990: 48 1191 PHA B991: A9 00 1192 LDA #0 B993: 65 0E 1193 ADC $0E B995: 85 0E 1194 STA $0E B997: A9 00 1195 LDA #0 B999: 65 0F 1196 ADC $0F B99B: 85 0F 1197 STA $0F B99D: 68 1198 PLA B99E: 88 1199 HB99E DEY B99F: D0 EC 1200 BNE HB98D 1201 B9A1: CA 1202 DEX B9A2: E0 38 1203 CPX #$38 B9A4: B0 E1 1204 BCS HB987 1205 B9A6: D8 1206 CLD B9A7: 4C D3 B9 1207 JMP HB9D3 1208 1209 *------------------------------- 1210 * Display a 3 digits number 1211 *------------------------------- 1212 1213 * In : $0C = number (low) 1214 * $0D = number (high) 1215 B9AA: A9 00 1216 DSP_3_DIGITS LDA #0 ; init result B9AC: 85 0F 1217 STA $0F B9AE: 85 0E 1218 STA $0E 1219 1220 * Calc the 3 digits number (decimal mode) 1221 B9B0: F8 1222 SED B9B1: A9 01 1223 HB9B1 LDA #1 ; add 1 to result B9B3: 65 0E 1224 ADC $0E B9B5: 85 0E 1225 STA $0E B9B7: A9 00 1226 LDA #0 ; carry over B9B9: 65 0F 1227 ADC $0F B9BB: 85 0F 1228 STA $0F 1229 B9BD: C6 0C 1230 DEC $0C ; until end of low B9BF: D0 F0 1231 BNE HB9B1 ; loop for low 1232 B9C1: C6 0D 1233 DEC $0D ; and until end of high B9C3: 10 EC 1234 BPL HB9B1 ; loop for high 1235 B9C5: D8 1236 CLD 1237 1238 * Mini Appler's protection 1239 B9C6: AD 2C B1 1240 LDA HB12C ; title (1 byte) B9C9: 4D 43 B1 1241 EOR HB143 ; author (1 byte) B9CC: 49 41 1242 EOR #$41 B9CE: F0 03 1243 BEQ HB9D3 ; ok, title and author are correct 1244 B9D0: 4C 00 B1 1245 JMP HB100 ; infinite loop 1246 1247 * Display the 3 digits 1248 B9D3: A5 0F 1249 HB9D3 LDA $0F ; first digit B9D5: 29 0F 1250 AND #%00001111 B9D7: 09 B0 1251 ORA #"0" B9D9: 8D F3 B9 1252 STA HB9F3 1253 B9DC: A5 0E 1254 LDA $0E ; 2nd digit B9DE: 48 1255 PHA B9DF: 4A 1256 LSR ; erase 3th digit info B9E0: 4A 1257 LSR B9E1: 4A 1258 LSR B9E2: 4A 1259 LSR B9E3: 09 B0 1260 ORA #"0" B9E5: 8D F4 B9 1261 STA HB9F4 1262 B9E8: 68 1263 PLA ; 3th digit B9E9: 29 0F 1264 AND #%00001111 ; erase 2nd digit info B9EB: 09 B0 1265 ORA #"0" B9ED: 8D F5 B9 1266 STA HB9F5 1267 B9F0: 20 48 B9 1268 JSR DSP_HGR2_STR ; display the 3 digits B9F3: B0 1269 HB9F3 ASC "0" B9F4: B0 1270 HB9F4 ASC "0" B9F5: B0 1271 HB9F5 ASC "0" B9F6: 00 1272 DFB 0 B9F7: 60 1273 RTS 1274 B9F8: 00 00 00 1275 DS \,0 B9FB: 00 00 00 00 00 1276 1277 1278 ******************************** 1279 * * 1280 * Mini RWTS * 1281 * by The Stack * 1282 * (c)1982 Corrupt Computing * 1283 * * 1284 ******************************** 1285 1286 * Notes (Deckard): 1287 * 1288 * Contains parts of the original DOS 3.3 RWTS 1289 * (c)1980 by Apple Computer Inc 1290 * 1291 * In fact MINI RWTS should be called MINI RTS 1292 * because it is a read only routine (no "W"). 1293 1294 1295 * In: TRACK/SECTOR/NB_SECT/PTR_BUFF (low & high) 1296 1297 HBA00 BA00: A5 F1 1298 MINI_RWTS LDA PARM_SD ; get slot# * 16 BA02: 29 70 1299 AND #%01110000 BA04: AA 1300 TAX ; in X BA05: A5 F1 1301 LDA PARM_SD ; get drive# BA07: 29 03 1302 AND #%00000011 BA09: F0 14 1303 BEQ HBA1F ; use last used drive 1304 BA0B: 4A 1305 LSR ; [1,2] -> [0,1] BA0C: 90 05 1306 BCC HBA13 ; drive 2 1307 BA0E: BD 8A C0 1308 LDA $C08A,X ; drive 1 BA11: B0 0C 1309 BCS HBA1F 1310 BA13: BD 8B C0 1311 HBA13 LDA $C08B,X ; drive 2 BA16: 90 07 1312 BCC HBA1F 1313 BA18: A2 60 1314 MINI_RWTS2 LDX #$60 ; set slot 6 *16 BA1A: EA 1315 NOP ; LDA CURTRK BA1B: EA 1316 NOP BA1C: EA 1317 NOP BA1D: EA 1318 NOP ; STA ZCURTRK BA1E: EA 1319 NOP 1320 BA1F: A5 FD 1321 HBA1F LDA NB_SECT BA21: D0 01 1322 BNE SAMESLOT 1323 BA23: 60 1324 RTS ; not a normal end 1325 1326 *------------------------------- 1327 BA24: BD 8E C0 1328 SAMESLOT LDA $C08E,X ; start the motor up BA27: BD 8E C0 1329 LDA $C08E,X BA2A: A0 08 1330 LDY #8 BA2C: BD 8C C0 1331 HBA2C LDA $C08C,X BA2F: 48 1332 PHA BA30: 68 1333 PLA BA31: 48 1334 PHA BA32: 68 1335 PLA BA33: DD 8C C0 1336 CMP $C08C,X BA36: D0 03 1337 BNE HBA3B 1338 BA38: 88 1339 DEY BA39: D0 F1 1340 BNE HBA2C 1341 BA3B: 08 1342 HBA3B PHP BA3C: BD 89 C0 1343 LDA $C089,X 1344 ; set parameters (device characteristics table) 1345 ; motor on time count (DCT) BA3F: A9 D8 1346 LDA #$D8 ; normal values (see your dos manual, RWTS BA41: 85 FA 1347 STA MONTIMEH ; section, IOB table) BA43: A9 EF 1348 LDA #$EF ; BA45: 85 F9 1349 STA MONTIMEL BA47: 28 1350 PLP BA48: 08 1351 PHP BA49: D0 08 1352 BNE NOWAIT 1353 BA4B: A0 08 1354 LDY #8 1355 BA4D: 20 00 BC 1356 STEPWAIT JSR MSWAIT ; wait 100 usec for old drive's timing BA50: 88 1357 DEY ; capacitor to discharge BA51: D0 FA 1358 BNE STEPWAIT 1359 BA53: A5 FE 1360 NOWAIT LDA TRACK BA55: 20 8D BB 1361 JSR MYSEEK BA58: 28 1362 PLP BA59: D0 11 1363 BNE TRYTRK 1364 BA5B: A4 FA 1365 LDY MONTIMEH BA5D: 10 0D 1366 BPL TRYTRK 1367 BA5F: A0 12 1368 MOTOROFF LDY #$12 ; wait for motor to come up to speed BA61: 88 1369 HBA61 DEY BA62: D0 FD 1370 BNE HBA61 1371 BA64: E6 F9 1372 INC MONTIMEL BA66: D0 F7 1373 BNE MOTOROFF 1374 BA68: E6 FA 1375 INC MONTIMEH BA6A: D0 F3 1376 BNE MOTOROFF 1377 ; disk is now up to speed 1378 1379 *------------------------------- 1380 * Read address field 1381 * Same routine as DOS 3.3 RWTS 1382 *------------------------------- 1383 BA6C: A0 30 1384 TRYTRK LDY #48 ; set up for a maximum of 48 retries BA6E: 84 F2 1385 STY RETRYCNT 1386 BA70: A0 FC 1387 RDADR16 LDY #$FC ; a too big gap is not allowed BA72: 84 F5 1388 STY COUNT_NIBBLE ; if D5 AA 96 not found before a raisonnable BA74: C8 1389 HBA74 INY ; gap -> recalibration BA75: D0 04 1390 BNE HBA7B 1391 BA77: E6 F5 1392 INC COUNT_NIBBLE BA79: F0 4F 1393 BEQ RDERR 1394 1395 * Search for prologue 1396 BA7B: BD 8C C0 1397 HBA7B LDA $C08C,X BA7E: 10 FB 1398 BPL HBA7B 1399 BA80: C9 D5 1400 HBA80 CMP #$D5 ; prologue D5 BA82: D0 F0 1401 BNE HBA74 1402 BA84: EA 1403 NOP 1404 BA85: BD 8C C0 1405 HBA85 LDA $C08C,X BA88: 10 FB 1406 BPL HBA85 1407 BA8A: C9 AA 1408 CMP #$AA ; prologue AA BA8C: D0 F2 1409 BNE HBA80 1410 BA8E: A0 03 1411 LDY #3 ; index ready for addr field informations BA90: BD 8C C0 1412 HBA90 LDA $C08C,X BA93: 10 FB 1413 BPL HBA90 1414 BA95: C9 96 1415 CMP #$96 ; prologue 96 BA97: D0 E7 1416 BNE HBA80 1417 1418 * Search for sector informations 1419 BA99: A9 00 1420 LDA #0 ; read volume/track/sector/checksum (4+4) BA9B: 85 F8 1421 HBA9B STA WCHKSUM ; init working checksum 1422 BA9D: BD 8C C0 1423 HBA9D LDA $C08C,X ; 1st nibble ('odd') BAA0: 10 FB 1424 BPL HBA9D 1425 BAA2: 2A 1426 ROL BAA3: 85 F3 1427 STA READ_CHKSUM BAA5: BD 8C C0 1428 HBAA5 LDA $C08C,X ; 2nd nibble ('even') BAA8: 10 FB 1429 BPL HBAA5 1430 BAAA: 25 F3 1431 AND READ_CHKSUM ; merge the two BAAC: 99 F3 00 1432 STA $00F3,Y ; store it BAAF: 45 F8 1433 EOR WCHKSUM ; update working checksum BAB1: 88 1434 DEY BAB2: 10 E7 1435 BPL HBA9B 1436 BAB4: A8 1437 TAY ; last read=checksum BAB5: D0 13 1438 BNE RDERR ; bad checksum -> retry 1439 1440 * Search for epilogue 1441 BAB7: BD 8C C0 1442 HBAB7 LDA $C08C,X BABA: 10 FB 1443 BPL HBAB7 1444 BABC: C9 DE 1445 CMP #$DE ; epilogue DE BABE: D0 0A 1446 BNE RDERR 1447 BAC0: EA 1448 NOP 1449 BAC1: BD 8C C0 1450 HBAC1 LDA $C08C,X BAC4: 10 FB 1451 BPL HBAC1 1452 BAC6: C9 AA 1453 CMP #$AA ; epilogue AA BAC8: F0 17 1454 BEQ RDRIGHT ; sector OK 1455 1456 *------------------------------- 1457 BACA: C6 F2 1458 RDERR DEC RETRYCNT ; -1 retry BACC: 10 A2 1459 BPL RDADR16 ; not the last one 1460 1461 *------------------------------- 1462 1463 * Unable to find a correct address field 1464 * Recalibrate disk head 1465 BACE: A5 F7 1466 RECAL LDA ZCURTRK ; save track we want BAD0: 48 1467 PHA BAD1: A9 60 1468 LDA #$60 ; not a real track but ok to force recalibration BAD3: 85 F7 1469 STA ZCURTRK BAD5: A9 00 1470 LDA #0 ; track $00 please! BAD7: 20 8D BB 1471 JSR MYSEEK BADA: 68 1472 PLA ; and now go to the desired track BADB: 20 8D BB 1473 HBADB JSR MYSEEK BADE: 18 1474 CLC ; always BADF: 90 8B 1475 BCC TRYTRK ; read address field under the R/W head 1476 1477 *------------------------------- 1478 1479 * We have just read an address field 1480 * Now check for desired track and sector 1481 BAE1: A4 F5 1482 RDRIGHT LDY READ_TRK ; track found BAE3: C4 F7 1483 CPY ZCURTRK ; wanted track? BAE5: F0 07 1484 BEQ HBAEE ; yes, found 1485 BAE7: A5 F7 1486 LDA ZCURTRK ; recalibrate on this BAE9: 84 F7 1487 STY ZCURTRK ; current track = track found BAEB: 18 1488 CLC BAEC: 90 ED 1489 BCC HBADB ; always: exec recalibration 1490 BAEE: A4 FF 1491 HBAEE LDY SECTOR BAF0: B9 F0 BB 1492 LDA SKEWING,Y ; convert to "soft" sector (interleave) BAF3: C5 F4 1493 CMP READ_SECT ; sector found? BAF5: D0 D3 1494 BNE RDERR ; no 1495 1496 *------------------------------- 1497 * Read data field 1498 *------------------------------- 1499 BAF7: A0 20 1500 READ16 LDY #$20 ; a too big gap 2 is not allowed BAF9: 88 1501 RSYNC DEY ; sync byte-1 BAFA: F0 CE 1502 BEQ RDERR ; too big: retry 1503 1504 * Read prologue 1505 BAFC: BD 8C C0 1506 HBAFC LDA $C08C,X BAFF: 10 FB 1507 BPL HBAFC 1508 BB01: 49 D5 1509 HBB01 EOR #$D5 ; prologue D5 BB03: D0 F4 1510 BNE RSYNC 1511 BB05: EA 1512 NOP 1513 BB06: BD 8C C0 1514 HBB06 LDA $C08C,X BB09: 10 FB 1515 BPL HBB06 1516 BB0B: C9 AA 1517 CMP #$AA ; prologue AA BB0D: D0 F2 1518 BNE HBB01 1519 BB0F: A0 56 1520 LDY #$56 ; index part 1 BB11: BD 8C C0 1521 HBB11 LDA $C08C,X BB14: 10 FB 1522 BPL HBB11 1523 BB16: C9 AD 1524 CMP #$AD ; prologue AD BB18: D0 E7 1525 BNE HBB01 1526 1527 * Read 342 nibbles (342=$156 => $56+$100) 1528 * = the data from the sector 1529 BB1A: A9 00 1530 LDA #0 ; init checksum 1531 1532 * Part 1 : $56 nibbles 1533 BB1C: 88 1534 RDATA1 DEY ; read stuff into NBUF2 BB1D: 84 F6 1535 STY IDX 1536 BB1F: BC 8C C0 1537 HBB1F LDY $C08C,X BB22: 10 FB 1538 BPL HBB1F 1539 ; Y[$96,$FF] BB24: 59 97 BB 1540 EOR RD_TRANS_TBL-$96,Y BB27: A4 F6 1541 LDY IDX ; Y[$00,$55] BB29: 99 A7 BF 1542 STA NBUF2,Y BB2C: D0 EE 1543 BNE RDATA1 1544 1545 * Part 2 : $100 nibbles 1546 BB2E: 84 F6 1547 HBB2E STY IDX ; read stuff into NBUF1 (= final page) 1548 BB30: BC 8C C0 1549 HBB30 LDY $C08C,X BB33: 10 FB 1550 BPL HBB30 1551 ; Y[$96,$FF] BB35: 59 97 BB 1552 EOR RD_TRANS_TBL-$96,Y BB38: A4 F6 1553 LDY IDX BB3A: 91 FB 1554 STA (PTR_BUFFL),Y BB3C: C8 1555 INY BB3D: D0 EF 1556 BNE HBB2E 1557 1558 * Checksum 1559 BB3F: BC 8C C0 1560 HBB3F LDY $C08C,X ; read it BB42: 10 FB 1561 BPL HBB3F 1562 ; Y[$96,$FF] BB44: D9 97 BB 1563 CMP RD_TRANS_TBL-$96,Y ; and compare (must be = 0) BB47: D0 81 1564 RDERR2 BNE RDERR ; bad sector -> retry 1565 1566 * Read epilogue 1567 BB49: BD 8C C0 1568 HBB49 LDA $C08C,X BB4C: 10 FB 1569 BPL HBB49 1570 BB4E: C9 DE 1571 CMP #$DE ; epilogue DE BB50: D0 F5 1572 BNE RDERR2 ; no -> bad sector: retry 1573 BB52: EA 1574 NOP 1575 BB53: BD 8C C0 1576 HBB53 LDA $C08C,X BB56: 10 FB 1577 BPL HBB53 1578 BB58: C9 AA 1579 CMP #$AA ; epilogue AA BB5A: D0 EB 1580 BNE RDERR2 ; no -> bad sector: retry 1581 BB5C: 86 F8 1582 STX SLOTEMP 1583 1584 * Post nibblize routine 1585 BB5E: A0 00 1586 LDY #0 BB60: A2 56 1587 HBB60 LDX #$56 BB62: CA 1588 HBB62 DEX BB63: 30 FB 1589 BMI HBB60 1590 BB65: B1 FB 1591 LDA (PTR_BUFFL),Y BB67: 5E A7 BF 1592 LSR NBUF2,X BB6A: 2A 1593 ROL BB6B: 5E A7 BF 1594 LSR NBUF2,X BB6E: 2A 1595 ROL BB6F: 91 FB 1596 STA (PTR_BUFFL),Y ; store in user buffer BB71: C8 1597 INY BB72: D0 EE 1598 BNE HBB62 1599 1600 *------------------------------- 1601 1602 * Prepare mini RWTS' parms if more than 1 sector to load 1603 BB74: A6 F8 1604 LDX SLOTEMP BB76: BD 88 C0 1605 LDA $C088,X BB79: E6 FC 1606 INC PTR_BUFFH ; next page of memory BB7B: A4 FF 1607 LDY SECTOR ; previous sector BB7D: 88 1608 DEY BB7E: 10 04 1609 BPL HBB84 ; was not sector $00 1610 BB80: A0 0F 1611 LDY #$0F ; next sector = $0F of the previous track BB82: C6 FE 1612 DEC TRACK 1613 BB84: 84 FF 1614 HBB84 STY SECTOR BB86: C6 FD 1615 DEC NB_SECT ; nbr sector-1. Was last sector? BB88: F0 0B 1616 BEQ HBB95 ; yes, end. 1617 BB8A: 4C 3B BA 1618 JMP HBA3B ; read the next one 1619 1620 *------------------------------- 1621 * Seek track routine 1622 * (uses SEEKABS) 1623 *------------------------------- 1624 1625 * In: Acc = desired track 1626 * X = slot * 16 1627 BB8D: 0A 1628 MYSEEK ASL BB8E: 06 F7 1629 ASL ZCURTRK ; half track BB90: 20 96 BB 1630 JSR SEEKABS BB93: 46 F7 1631 LSR ZCURTRK ; full track BB95: 60 1632 HBB95 RTS 1633 1634 *------------------------------- 1635 * SEEKABS routine, moves the 1636 * disk head over the desired 1637 * track (same as DOS 3.3 RWTS) 1638 *------------------------------- 1639 1640 * In : Acc = desired half track 1641 * X = slot * 16 1642 BB96: 86 F8 1643 SEEKABS STX SLOTEMP BB98: 85 F5 1644 STA TRKN BB9A: C5 F7 1645 CMP DRV0TRK ; current half track? BB9C: F0 4F 1646 BEQ HBBED ; yep: end 1647 BB9E: A9 00 1648 LDA #0 BBA0: 85 F3 1649 STA TRKCNT BBA2: A5 F7 1650 MOVEHEAD LDA DRV0TRK BBA4: 85 F4 1651 STA PRIOR BBA6: 38 1652 SEC BBA7: E5 F5 1653 SBC TRKN BBA9: F0 31 1654 BEQ ISTHERE 1655 BBAB: B0 06 1656 BCS HBBB3 1657 BBAD: 49 FF 1658 EOR #$FF BBAF: E6 F7 1659 INC DRV0TRK BBB1: 90 04 1660 BCC HBBB7 1661 BBB3: 69 FE 1662 HBBB3 ADC #$FE BBB5: C6 F7 1663 DEC DRV0TRK BBB7: C5 F3 1664 HBBB7 CMP TRKCNT BBB9: 90 02 1665 BCC HBBBD 1666 BBBB: A5 F3 1667 LDA TRKCNT BBBD: C9 0C 1668 HBBBD CMP #$0C BBBF: B0 01 1669 BCS HBBC2 1670 BBC1: A8 1671 TAY BBC2: 38 1672 HBBC2 SEC BBC3: 20 E0 BB 1673 JSR CHKPOS BBC6: B9 15 BC 1674 LDA ONTBL,Y BBC9: 20 00 BC 1675 JSR MSWAIT BBCC: A5 F4 1676 LDA PRIOR BBCE: 18 1677 CLC BBCF: 20 E2 BB 1678 JSR CHKPOS2 BBD2: B9 21 BC 1679 LDA OFFTBL,Y BBD5: 20 00 BC 1680 JSR MSWAIT BBD8: E6 F3 1681 INC TRKCNT BBDA: D0 C6 1682 BNE MOVEHEAD 1683 1684 *------------------------------- 1685 BBDC: 20 00 BC 1686 ISTHERE JSR MSWAIT ; wait arm BBDF: 18 1687 CLC BBE0: A5 F7 1688 CHKPOS LDA DRV0TRK BBE2: 29 03 1689 CHKPOS2 AND #%00000011 BBE4: 2A 1690 ROL BBE5: 05 F8 1691 ORA SLOTEMP BBE7: AA 1692 TAX BBE8: BD 80 C0 1693 LDA $C080,X BBEB: A6 F8 1694 LDX SLOTEMP BBED: 60 1695 HBBED RTS 1696 BBEE: 00 1697 DFB 0 BBEF: 00 1698 DFB 0 1699 BBF0: 00 0D 0B 1700 SKEWING HEX 000D0B09070503010E0C0A080604020F BBF3: 09 07 05 03 01 0E 0C 0A BBFB: 08 06 04 02 0F 1701 1702 *------------------------------- 1703 * Head move delay subroutine 1704 * Delay acc*100+ usec 1705 * (Same as DOS 3.3 RWTS) 1706 *------------------------------- 1707 BC00: 86 F6 1708 MSWAIT STX WTEMP ; added 1709 BC02: A2 11 1710 HBC02 LDX #$11 BC04: CA 1711 HBC04 DEX BC05: D0 FD 1712 BNE HBC04 1713 BC07: E6 F9 1714 INC MONTIMEL BC09: D0 02 1715 BNE HBC0D 1716 BC0B: E6 FA 1717 INC MONTIMEH 1718 BC0D: 38 1719 HBC0D SEC BC0E: E9 01 1720 SBC #1 BC10: D0 F0 1721 BNE HBC02 1722 BC12: A6 F6 1723 LDX WTEMP ; added BC14: 60 1724 RTS 1725 1726 *------------------------------- 1727 * Phaseon/phaseoff tables 1728 *------------------------------- 1729 BC15: 01 30 28 1730 ONTBL HEX 01302824201E1D1C BC18: 24 20 1E 1D 1C BC1D: 1C 1C 1C 1731 HEX 1C1C1C1C BC20: 1C 1732 BC21: 70 2C 26 1733 OFFTBL HEX 702C2622 BC24: 22 BC25: 1F 1E 1D 1734 HEX 1F1E1D1C1C1C1C1C BC28: 1C 1C 1C 1C 1C 1735 1736 *------------------------------- 1737 * Read translate table 1738 *------------------------------- 1739 1740 * DOS 3.3 : BA96.BAFF 1741 BC2D: 00 01 98 1742 RD_TRANS_TBL HEX 0001989902039C04 BC30: 99 02 03 9C 04 BC35: 05 06 A0 1743 HEX 0506A0A1A2A3A4A5 BC38: A1 A2 A3 A4 A5 BC3D: 07 08 A8 1744 HEX 0708A8A9AA090A0B BC40: A9 AA 09 0A 0B BC45: 0C 0D B0 1745 HEX 0C0DB0B10E0F1011 BC48: B1 0E 0F 10 11 BC4D: 12 13 B8 1746 HEX 1213B81415161718 BC50: 14 15 16 17 18 BC55: 19 1A C0 1747 HEX 191AC0C1C2C3C4C5 BC58: C1 C2 C3 C4 C5 BC5D: C6 C7 C8 1748 HEX C6C7C8C9CA1BCC1C BC60: C9 CA 1B CC 1C BC65: 1D 1E D0 1749 HEX 1D1ED0D1D21FD4D5 BC68: D1 D2 1F D4 D5 BC6D: 20 21 D8 1750 HEX 2021D82223242526 BC70: 22 23 24 25 26 BC75: 27 28 E0 1751 HEX 2728E0E1E2E3E429 BC78: E1 E2 E3 E4 29 BC7D: 2A 2B E8 1752 HEX 2A2BE82C2D2E2F30 BC80: 2C 2D 2E 2F 30 BC85: 31 32 F0 1753 HEX 3132F0F133343536 BC88: F1 33 34 35 36 BC8D: 37 38 F8 1754 HEX 3738F8393A3B3C3D BC90: 39 3A 3B 3C 3D BC95: 3E 3F 1755 HEX 3E3F 1756 1757 *------------------------------- 1758 * Datas for the characters 1759 *------------------------------- 1760 BC97: 80 80 80 1761 FONT HEX 8080808080808080 ; space BC9A: 80 80 80 80 80 BC9F: 80 87 87 1762 HEX 8087878087878787 ; ! BCA2: 80 87 87 87 87 BCA7: 80 80 80 1763 HEX 80808080B6A4B6B6 ; " BCAA: 80 B6 A4 B6 B6 BCAF: 80 9E 9E 1764 HEX 809E9EBF9EBF9E9E ; # BCB2: BF 9E BF 9E 9E BCB7: 80 8C 9F 1765 HEX 808C9FB09E83BE8C ; $ BCBA: B0 9E 83 BE 8C BCBF: 80 BB BB 1766 HEX 80BBBB868C98B7B7 ; % BCC2: 86 8C 98 B7 B7 BCC7: 80 AE 9B 1767 HEX 80AE9BBB8F868F86 ; & BCCA: BB 8F 86 8F 86 BCCF: 80 80 80 1768 HEX 808080808C888C8C ; ' BCD2: 80 8C 88 8C 8C BCD7: 80 B8 9C 1769 HEX 80B89C8E8E8E9CB8 ; ( BCDA: 8E 8E 8E 9C B8 BCDF: 80 87 8E 1770 HEX 80878E9C9C9C8E87 ; ) BCE2: 9C 9C 9C 8E 87 BCE7: 80 88 AA 1771 HEX 8088AA9CBE9CAA88 ; * BCEA: 9C BE 9C AA 88 BCEF: 80 80 8C 1772 HEX 80808C8CBFBF8C8C ; + BCF2: 8C BF BF 8C 8C BCF7: 83 86 87 1773 HEX 8386878080808080 ; , BCFA: 80 80 80 80 80 BCFF: 80 80 80 1774 HEX 80808080BEBE8080 ; - BD02: 80 BE BE 80 80 BD07: 80 87 87 1775 HEX 8087878080808080 ; . BD0A: 80 80 80 80 80 BD0F: 80 83 87 1776 HEX 8083878E9CB8F0E0 ; / BD12: 8E 9C B8 F0 E0 BD17: 80 9E B3 1777 HEX 809EB3B3B3B3B39E ; 0 BD1A: B3 B3 B3 B3 9E BD1F: 80 BF 8C 1778 HEX 80BF8C8C8C8F8E8C ; 1 BD22: 8C 8C 8F 8E 8C BD27: 80 BF BF 1779 HEX 80BFBF8EB8B3BF9E ; 2 BD2A: 8E B8 B3 BF 9E BD2F: 80 9E BF 1780 HEX 809EBFB0BEB0BF9E ; 3 BD32: B0 BE B0 BF 9E BD37: 80 B0 B0 1781 HEX 80B0B0BFB3B6BCB8 ; 4 BD3A: BF B3 B6 BC B8 BD3F: 80 9E BF 1782 HEX 809EBFB09F83BFBF ; 5 BD42: B0 9F 83 BF BF BD47: 80 9E BF 1783 HEX 809EBFB39F83BF9E ; 6 BD4A: B3 9F 83 BF 9E BD4F: 80 8C 8C 1784 HEX 808C8C8C98B0BFBF ; 7 BD52: 8C 98 B0 BF BF BD57: 80 9E BF 1785 HEX 809EBFB39EB3BF9E ; 8 BD5A: B3 9E B3 BF 9E BD5F: 80 9E BF 1786 HEX 809EBFB0BEB3BF9E ; 9 BD62: B0 BE B3 BF 9E BD67: 80 9C 9C 1787 HEX 809C9C80809C9C80 ; : BD6A: 80 80 9C 9C 80 BD6F: 83 86 87 1788 HEX 8386878080878780 ; ; BD72: 80 80 87 87 80 BD77: 80 F0 B8 1789 HEX 80F0B89C8E9CB8F0 ; < BD7A: 9C 8E 9C B8 F0 BD7F: 80 80 80 1790 HEX 808080BE80BE8080 ; = WAS BUGGED!! (same data bytes as '-') BD82: BE 80 BE 80 80 BD87: 80 87 8E 1791 HEX 80878E9CB89C8E87 ; > BD8A: 9C B8 9C 8E 87 BD8F: 80 8C 80 1792 HEX 808C808C98B3BF9E ; ? BD92: 8C 98 B3 BF 9E BD97: 80 BE 83 1793 HEX 80BE83BBBBB3B39E ; @ BD9A: BB BB B3 B3 9E BD9F: 80 B3 B3 1794 HEX 80B3B3BFBFB3BF9E ; A BDA2: BF BF B3 BF 9E BDA7: 80 9F BF 1795 HEX 809FBFB39FB3BF9F ; B BDAA: B3 9F B3 BF 9F BDAF: 80 9E BF 1796 HEX 809EBFB383B3BF9E ; C BDB2: B3 83 B3 BF 9E BDB7: 80 9F BF 1797 HEX 809FBFB3B3B3BF9F ; D BDBA: B3 B3 B3 BF 9F BDBF: 80 BF BF 1798 HEX 80BFBF839F83BFBF ; E BDC2: 83 9F 83 BF BF BDC7: 80 83 83 1799 HEX 8083839F9F83BFBF ; F BDCA: 9F 9F 83 BF BF BDCF: 80 9E BF 1800 HEX 809EBFB3BB83BF9E ; G BDD2: B3 BB 83 BF 9E BDD7: 80 B3 B3 1801 HEX 80B3B3BFBFB3B3B3 ; H BDDA: BF BF B3 B3 B3 BDDF: 80 BF BF 1802 HEX 80BFBF8C8C8CBFBF ; I BDE2: 8C 8C 8C BF BF BDE7: 80 9E BF 1803 HEX 809EBFB3B0B0B0B0 ; J BDEA: B3 B0 B0 B0 B0 BDEF: 80 B3 BB 1804 HEX 80B3BB9F8F9FBBB3 ; K BDF2: 9F 8F 9F BB B3 BDF7: 80 BF BF 1805 HEX 80BFBF8383838383 ; L BDFA: 83 83 83 83 83 BDFF: 80 B3 B3 1806 HEX 80B3B3B3B3B3BFB3 ; M BE02: B3 B3 B3 BF B3 BE07: 80 B3 B3 1807 HEX 80B3B3BBBFB7B3B3 ; N BE0A: BB BF B7 B3 B3 BE0F: 80 9E BF 1808 HEX 809EBFB3B3B3BF9E ; O BE12: B3 B3 B3 BF 9E BE17: 80 83 83 1809 HEX 8083839FBFB3BF9F ; P BE1A: 9F BF B3 BF 9F BE1F: 80 AE 93 1810 HEX 80AE93ABA3A3BF9E ; Q BE22: AB A3 A3 BF 9E BE27: 80 B3 BB 1811 HEX 80B3BB9FBFB3BF9F ; R BE2A: 9F BF B3 BF 9F BE2F: 80 9E B3 1812 HEX 809EB3B09E83B39E ; S BE32: B0 9E 83 B3 9E BE37: 80 8C 8C 1813 HEX 808C8C8C8C8CBFBF ; T BE3A: 8C 8C 8C BF BF BE3F: 80 9E BF 1814 HEX 809EBFB3B3B3B3B3 ; U BE42: B3 B3 B3 B3 B3 BE47: 80 8C 9E 1815 HEX 808C9EB3B3B3B3B3 ; V BE4A: B3 B3 B3 B3 B3 BE4F: 80 B3 BF 1816 HEX 80B3BFB3B3B3B3B3 ; W BE52: B3 B3 B3 B3 B3 BE57: 80 B3 B3 1817 HEX 80B3B39E8C9EB3B3 ; X BE5A: 9E 8C 9E B3 B3 BE5F: 80 8C 8C 1818 HEX 808C8C8C9EB3B3B3 ; Y BE62: 8C 9E B3 B3 B3 BE67: 80 BF BF 1819 HEX 80BFBF868C98BFBF ; Z BE6A: 86 8C 98 BF BF BE6F: 80 BC BC 1820 HEX 80BCBC8C8C8CBCBC ; [ BE72: 8C 8C 8C BC BC BE77: 80 E0 F0 1821 HEX 80E0F0B89C8E8783 ; backslash BE7A: B8 9C 8E 87 83 BE7F: 80 8F 8F 1822 HEX 808F8F8C8C8C8F8F ; ] BE82: 8C 8C 8C 8F 8F BE87: 80 80 80 1823 HEX 8080808080BF9E8C ; exp BE8A: 80 80 BF 9E 8C BE8F: 80 FF FF 1824 HEX 80FFFF8080808080 ; _ BE92: 80 80 80 80 80 BE97: 80 80 80 1825 HEX 8080808080988C86 ; BE9A: 80 80 98 8C 86 BE9F: 80 BE B3 1826 HEX 80BEB3BEB09E8080 ; a BEA2: BE B0 9E 80 80 BEA7: 80 9F B3 1827 HEX 809FB3B3B39F8383 ; b BEAA: B3 B3 9F 83 83 BEAF: 80 9E B3 1828 HEX 809EB383B39E8080 ; c BEB2: 83 B3 9E 80 80 BEB7: 80 BE B3 1829 HEX 80BEB3B3B3BEB0B0 ; d BEBA: B3 B3 BE B0 B0 BEBF: 80 9E 83 1830 HEX 809E839FB39E8080 ; e BEC2: 9F B3 9E 80 80 BEC7: 80 86 86 1831 HEX 808686869F86B69C ; f BECA: 86 9F 86 B6 9C BECF: 9E B0 BE 1832 HEX 9EB0BEB3B39E8080 ; g BED2: B3 B3 9E 80 80 BED7: 80 B3 B3 1833 HEX 80B3B3B3B39F8383 ; h BEDA: B3 B3 9F 83 83 BEDF: 80 8C 8C 1834 HEX 808C8C8C8C808C80 ; i BEE2: 8C 8C 80 8C 80 BEE7: 9E B3 B3 1835 HEX 9EB3B3B0B0B080B0 ; j BEEA: B0 B0 B0 80 B0 BEEF: 80 B3 9B 1836 HEX 80B39B8F9BB38383 ; k BEF2: 8F 9B B3 83 83 BEF7: 80 9E 8C 1837 HEX 809E8C8C8C8C8C8E ; l BEFA: 8C 8C 8C 8C 8E BEFF: 80 B3 B3 1838 HEX 80B3B3B3BFB38080 : m BF02: B3 BF B3 80 80 BF07: 80 B3 B3 1839 HEX 80B3B3B3B39F8080 ; n BF0A: B3 B3 9F 80 80 BF0F: 80 9E B3 1840 HEX 809EB3B3B39E8080 ; o BF12: B3 B3 9E 80 80 BF17: 83 83 9F 1841 HEX 83839FB3B39F8080 ; p BF1A: B3 B3 9F 80 80 BF1F: B0 B0 BE 1842 HEX B0B0BEB3B3BE8080 ; q BF22: B3 B3 BE 80 80 BF27: 80 83 83 1843 HEX 80838383B39F8080 ; r BF2A: 83 B3 9F 80 80 BF2F: 80 9E B0 1844 HEX 809EB09E839E8080 ; s BF32: 9E 83 9E 80 80 BF37: 80 9C B6 1845 HEX 809CB686869F8686 ; t BF3A: 86 86 9F 86 86 BF3F: 80 BE B3 1846 HEX 80BEB3B3B3B38080 ; u BF42: B3 B3 B3 80 80 BF47: 80 8C 9E 1847 HEX 808C9EB3B3B38080 ; v BF4A: B3 B3 B3 80 80 BF4F: 80 B3 BF 1848 HEX 80B3BFB3B3B38080 ; w BF52: B3 B3 B3 80 80 BF57: 80 B3 9E 1849 HEX 80B39E8C9EB38080 ; x BF5A: 8C 9E B3 80 80 BF5F: 9E B0 BE 1850 HEX 9EB0BEB3B3B38080 ; y BF62: B3 B3 B3 80 80 BF67: 80 BF 86 1851 HEX 80BF868C98BF8080 ; z BF6A: 8C 98 BF 80 80 BF6F: 80 9C 9E 1852 HEX 809C9E8687869E9C ; { BF72: 86 87 86 9E 9C BF77: 8C 8C 8C 1853 HEX 8C8C8C8C8C8C8C8C ; | BF7A: 8C 8C 8C 8C 8C BF7F: 80 8E 9E 1854 HEX 808E9E98B8989E8E ; } BF82: 98 B8 98 9E 8E BF87: 80 80 80 1855 HEX 808080808098BF86 ; ~ BF8A: 80 80 98 BF 86 1856 BF8F: 00 00 00 1857 DS 24,0 BF92: 00 00 00 00 00 00 00 00 BF9A: 00 00 00 00 00 00 00 00 BFA2: 00 00 00 00 00 1858 1859 *------------------------------- 1860 1861 * Backup of bytes of the screen before writing the stars 1862 1863 NBUF2 ; $56 bytes buffer BFA7: 00 00 00 1864 BEFORE_STAR DS 40,0 BFAA: 00 00 00 00 00 00 00 00 BFB2: 00 00 00 00 00 00 00 00 BFBA: 00 00 00 00 00 00 00 00 BFC2: 00 00 00 00 00 00 00 00 BFCA: 00 00 00 00 00 1865 1866 *------------------------------- 1867 BFCF: 00 00 00 1868 DS \,0 BFD2: 00 00 00 00 00 00 00 00 BFDA: 00 00 00 00 00 00 00 00 BFE2: 00 00 00 00 00 00 00 00 BFEA: 00 00 00 00 00 00 00 00 BFF2: 00 00 00 00 00 00 00 00 BFFA: 00 00 00 00 00 00 1869 1870 *------------------------------- 1871 1872 SAV BOOT2 Object saved as BOOT2,A$B100,L$0F00 --End assembly, 3840 bytes, Errors: 0 Symbol table - alphabetical order: ANIMATION =$B743 ANIM_1_STAR =$B755 BASIC2 =$E003 BEFORE_STAR =$BFA7 BIN_COUNT =$10 BIN_FILE_SELT=$B423 BUFADRH =$43 BUFADRL =$42 BUFFER =$6000 BUFFER2 =$6100 CH =$24 CHKPOS =$BBE0 CHKPOS2 =$BBE2 COORDX =$06 COORDY =$07 COUNT_NIBBLE =$F5 COUT =$FDED CURTRK =$0478 CV =$25 DRV0TRK =$F7 DSP_3_DIGITS =$B9AA DSP_FREE_SECT=$B978 DSP_HGR2_CHAR=$B8BA DSP_HGR2_STR =$B948 DSP_TXT_STR =$B91E FONT =$BC97 H0800 =$0800 HB100 =$B100 HB10F =$B10F HB12A =$B12A HB12C =$B12C HB141 =$B141 HB143 =$B143 HB176 =$B176 HB18B =$B18B HB195 =$B195 HB198 =$B198 HB1AE =$B1AE HB1B1 =$B1B1 HB1E7 =$B1E7 HB1EF =$B1EF HB1FD =$B1FD HB28F =$B28F HB29F =$B29F HB311 =$B311 HB322 =$B322 HB329 =$B329 HB33C =$B33C HB343 =$B343 HB381 =$B381 HB384 =$B384 HB3A7 =$B3A7 HB3E5 =$B3E5 HB3E8 =$B3E8 HB40B =$B40B HB420 =$B420 HB42C =$B42C HB43C =$B43C HB447 =$B447 HB457 =$B457 HB4F4 =$B4F4 HB4F6 =$B4F6 HB4FA =$B4FA HB511 =$B511 HB536 =$B536 HB542 =$B542 HB556 =$B556 HB55A =$B55A HB56D =$B56D HB572 =$B572 HB574 =$B574 HB57C =$B57C ? HB5BE =$B5BE HB70D =$B70D HB70E =$B70E HB731 =$B731 HB735 =$B735 HB745 =$B745 HB751 =$B751 HB798 =$B798 HB7D1 =$B7D1 HB7E1 =$B7E1 HB7E3 =$B7E3 HB7EB =$B7EB HB89B =$B89B HB8C6 =$B8C6 HB8CA =$B8CA HB8CC =$B8CC HB8FD =$B8FD HB913 =$B913 HB919 =$B919 HB92D =$B92D HB933 =$B933 HB93D =$B93D HB954 =$B954 HB95A =$B95A HB964 =$B964 HB987 =$B987 HB98D =$B98D HB99E =$B99E HB9B1 =$B9B1 HB9D3 =$B9D3 HB9F3 =$B9F3 HB9F4 =$B9F4 HB9F5 =$B9F5 ? HBA00 =$BA00 HBA13 =$BA13 HBA1F =$BA1F HBA2C =$BA2C HBA3B =$BA3B HBA61 =$BA61 HBA74 =$BA74 HBA7B =$BA7B HBA80 =$BA80 HBA85 =$BA85 HBA90 =$BA90 HBA9B =$BA9B HBA9D =$BA9D HBAA5 =$BAA5 HBAB7 =$BAB7 HBAC1 =$BAC1 HBADB =$BADB HBAEE =$BAEE HBAFC =$BAFC HBB01 =$BB01 HBB06 =$BB06 HBB11 =$BB11 HBB1F =$BB1F HBB2E =$BB2E HBB30 =$BB30 HBB3F =$BB3F HBB49 =$BB49 HBB53 =$BB53 HBB60 =$BB60 HBB62 =$BB62 HBB84 =$BB84 HBB95 =$BB95 HBBB3 =$BBB3 HBBB7 =$BBB7 HBBBD =$BBBD HBBC2 =$BBC2 HBBED =$BBED HBC02 =$BC02 HBC04 =$BC04 HBC0D =$BC0D HGR2_DATAH =$B646 HGR2_DATAL =$B586 HIRES =$C057 HISCR =$C055 HOME =$FC58 IDX =$F6 IN =$0200 INIT =$FB2F INIT_ANIM =$B899 INIT_SCREEN =$B706 ISTHERE =$BBDC KEY =$C000 KEY_PROCESS =$B30E MINI_RWTS =$BA00 ? MINI_RWTS2 =$BA18 MIXCLR =$C052 MONTIMEH =$FA MONTIMEL =$F9 MOTOROFF =$BA5F MOVEHEAD =$BBA2 MSWAIT =$BC00 MYSEEK =$BB8D NBUF2 =$BFA7 NB_SECT =$FD NOWAIT =$BA53 OBJNUM =$11 OFFTBL =$BC21 ONTBL =$BC15 PAGE3 =$0300 PARM_SD =$F1 PRIOR =$F4 PTRH =$02 PTRL =$01 PTR_BUFFH =$FC PTR_BUFFL =$FB RANDOM_DELAY =$00 RDADR16 =$BA70 RDATA1 =$BB1C RDERR =$BACA RDERR2 =$BB47 RDRIGHT =$BAE1 RD_TRANS_TBL =$BC2D ? READ16 =$BAF7 READ_CHKSUM =$F3 READ_SECT =$F4 READ_TRK =$F5 ? READ_VOL =$F6 ? RECAL =$BACE REFRESH =$B109 RETRYCNT =$F2 RSYNC =$BAF9 SAMESLOT =$BA24 SECTOR =$FF SEEKABS =$BB96 SETKBD =$FE89 SETVID =$FE93 SKEWING =$BBF0 SLOTEMP =$F8 SOUND =$B570 SPKR =$C030 STARS_BYT_VAL=$B849 STARS_POS_Y =$B871 STARS_RF_LOOP=$B7F9 STARS_WK_LOOP=$B821 STAR_AT_TOP =$B7A7 STEPWAIT =$BA4D STROBE =$C010 TRACK =$FE TRKCNT =$F3 TRKN =$F5 TRYTRK =$BA6C TS_READ =$B96F TXTCLR =$C050 VTAB =$FC22 WCHKSUM =$F8 WTEMP =$F6 ZCURTRK =$F7 Symbol table - numerical order: RANDOM_DELAY =$00 PTRL =$01 PTRH =$02 COORDX =$06 COORDY =$07 BIN_COUNT =$10 OBJNUM =$11 CH =$24 CV =$25 BUFADRL =$42 BUFADRH =$43 PARM_SD =$F1 RETRYCNT =$F2 READ_CHKSUM =$F3 TRKCNT =$F3 READ_SECT =$F4 PRIOR =$F4 COUNT_NIBBLE =$F5 READ_TRK =$F5 TRKN =$F5 WTEMP =$F6 ? READ_VOL =$F6 IDX =$F6 DRV0TRK =$F7 ZCURTRK =$F7 WCHKSUM =$F8 SLOTEMP =$F8 MONTIMEL =$F9 MONTIMEH =$FA PTR_BUFFL =$FB PTR_BUFFH =$FC NB_SECT =$FD TRACK =$FE SECTOR =$FF IN =$0200 PAGE3 =$0300 CURTRK =$0478 H0800 =$0800 BUFFER =$6000 BUFFER2 =$6100 HB100 =$B100 REFRESH =$B109 HB10F =$B10F HB12A =$B12A HB12C =$B12C HB141 =$B141 HB143 =$B143 HB176 =$B176 HB18B =$B18B HB195 =$B195 HB198 =$B198 HB1AE =$B1AE HB1B1 =$B1B1 HB1E7 =$B1E7 HB1EF =$B1EF HB1FD =$B1FD HB28F =$B28F HB29F =$B29F KEY_PROCESS =$B30E HB311 =$B311 HB322 =$B322 HB329 =$B329 HB33C =$B33C HB343 =$B343 HB381 =$B381 HB384 =$B384 HB3A7 =$B3A7 HB3E5 =$B3E5 HB3E8 =$B3E8 HB40B =$B40B HB420 =$B420 BIN_FILE_SELT=$B423 HB42C =$B42C HB43C =$B43C HB447 =$B447 HB457 =$B457 HB4F4 =$B4F4 HB4F6 =$B4F6 HB4FA =$B4FA HB511 =$B511 HB536 =$B536 HB542 =$B542 HB556 =$B556 HB55A =$B55A HB56D =$B56D SOUND =$B570 HB572 =$B572 HB574 =$B574 HB57C =$B57C HGR2_DATAL =$B586 ? HB5BE =$B5BE HGR2_DATAH =$B646 INIT_SCREEN =$B706 HB70D =$B70D HB70E =$B70E HB731 =$B731 HB735 =$B735 ANIMATION =$B743 HB745 =$B745 HB751 =$B751 ANIM_1_STAR =$B755 HB798 =$B798 STAR_AT_TOP =$B7A7 HB7D1 =$B7D1 HB7E1 =$B7E1 HB7E3 =$B7E3 HB7EB =$B7EB STARS_RF_LOOP=$B7F9 STARS_WK_LOOP=$B821 STARS_BYT_VAL=$B849 STARS_POS_Y =$B871 INIT_ANIM =$B899 HB89B =$B89B DSP_HGR2_CHAR=$B8BA HB8C6 =$B8C6 HB8CA =$B8CA HB8CC =$B8CC HB8FD =$B8FD HB913 =$B913 HB919 =$B919 DSP_TXT_STR =$B91E HB92D =$B92D HB933 =$B933 HB93D =$B93D DSP_HGR2_STR =$B948 HB954 =$B954 HB95A =$B95A HB964 =$B964 TS_READ =$B96F DSP_FREE_SECT=$B978 HB987 =$B987 HB98D =$B98D HB99E =$B99E DSP_3_DIGITS =$B9AA HB9B1 =$B9B1 HB9D3 =$B9D3 HB9F3 =$B9F3 HB9F4 =$B9F4 HB9F5 =$B9F5 ? HBA00 =$BA00 MINI_RWTS =$BA00 HBA13 =$BA13 ? MINI_RWTS2 =$BA18 HBA1F =$BA1F SAMESLOT =$BA24 HBA2C =$BA2C HBA3B =$BA3B STEPWAIT =$BA4D NOWAIT =$BA53 MOTOROFF =$BA5F HBA61 =$BA61 TRYTRK =$BA6C RDADR16 =$BA70 HBA74 =$BA74 HBA7B =$BA7B HBA80 =$BA80 HBA85 =$BA85 HBA90 =$BA90 HBA9B =$BA9B HBA9D =$BA9D HBAA5 =$BAA5 HBAB7 =$BAB7 HBAC1 =$BAC1 RDERR =$BACA ? RECAL =$BACE HBADB =$BADB RDRIGHT =$BAE1 HBAEE =$BAEE ? READ16 =$BAF7 RSYNC =$BAF9 HBAFC =$BAFC HBB01 =$BB01 HBB06 =$BB06 HBB11 =$BB11 RDATA1 =$BB1C HBB1F =$BB1F HBB2E =$BB2E HBB30 =$BB30 HBB3F =$BB3F RDERR2 =$BB47 HBB49 =$BB49 HBB53 =$BB53 HBB60 =$BB60 HBB62 =$BB62 HBB84 =$BB84 MYSEEK =$BB8D HBB95 =$BB95 SEEKABS =$BB96 MOVEHEAD =$BBA2 HBBB3 =$BBB3 HBBB7 =$BBB7 HBBBD =$BBBD HBBC2 =$BBC2 ISTHERE =$BBDC CHKPOS =$BBE0 CHKPOS2 =$BBE2 HBBED =$BBED SKEWING =$BBF0 MSWAIT =$BC00 HBC02 =$BC02 HBC04 =$BC04 HBC0D =$BC0D ONTBL =$BC15 OFFTBL =$BC21 RD_TRANS_TBL =$BC2D FONT =$BC97 NBUF2 =$BFA7 BEFORE_STAR =$BFA7 KEY =$C000 STROBE =$C010 SPKR =$C030 TXTCLR =$C050 MIXCLR =$C052 HISCR =$C055 HIRES =$C057 BASIC2 =$E003 INIT =$FB2F VTAB =$FC22 HOME =$FC58 COUT =$FDED SETKBD =$FE89 SETVID =$FE93