* source: Core/ROMv5a.asm.py 164 enableListing() 165 #----------------------------------------------------------------------- 166 # 167 # Start of core 168 # 169 #----------------------------------------------------------------------- 170 171 # Pre-loading the formal interface as a way to get warnings when 172 # accidentally redefined with a different value 173 loadBindings('interface.json') 174 loadBindings('Core/interface-dev.json') # Provisional values for DEVROM 175 176 # Gigatron clock 177 cpuClock = 6.250e+06 178 179 # Output pin assignment for VGA 180 R, G, B, hSync, vSync = 1, 4, 16, 64, 128 181 syncBits = hSync+vSync # Both pulses negative 182 183 # When the XOUT register is in the circuit, the rising edge triggers its update. 184 # The loop can therefore not be agnostic to the horizontal pulse polarity. 185 assert syncBits & hSync != 0 186 187 # VGA 640x480 defaults (to be adjusted below!) 188 vFront = 10 # Vertical front porch 189 vPulse = 2 # Vertical sync pulse 190 vBack = 33 # Vertical back porch 191 vgaLines = vFront + vPulse + vBack + 480 192 vgaClock = 25.175e+06 193 194 # Video adjustments for Gigatron 195 # 1. Our clock is (slightly) slower than 1/4th VGA clock. Not all monitors will 196 # accept the decreased frame rate, so we restore the frame rate to above 197 # minimum 59.94 Hz by cutting some lines from the vertical front porch. 198 vFrontAdjust = vgaLines - int(4 * cpuClock / vgaClock * vgaLines) 199 vFront -= vFrontAdjust 200 # 2. Extend vertical sync pulse so we can feed the game controller the same 201 # signal. This is needed for controllers based on the 4021 instead of 74165 202 vPulseExtension = max(0, 8-vPulse) 203 vPulse += vPulseExtension 204 # 3. Borrow these lines from the back porch so the refresh rate remains 205 # unaffected 206 vBack -= vPulseExtension 207 208 # Start value of vertical blank counter 209 videoYline0 = 1-2*(vFront+vPulse+vBack-2) 210 211 # Mismatch between video lines and sound channels 212 soundDiscontinuity = (vFront+vPulse+vBack) % 4 213 214 # QQVGA resolution 215 qqVgaWidth = 160 216 qqVgaHeight = 120 217 218 # Game controller bits (actual controllers in kit have negative output) 219 # +----------------------------------------+ 220 # | Up B* | 221 # | Left Right B A* | 222 # | Down Select Start A | 223 # +----------------------------------------+ *=Auto fire 224 buttonRight = 1 225 buttonLeft = 2 226 buttonDown = 4 227 buttonUp = 8 228 buttonStart = 16 229 buttonSelect = 32 230 buttonB = 64 231 buttonA = 128 232 233 #----------------------------------------------------------------------- 234 # 235 # RAM page 0: zero-page variables 236 # 237 #----------------------------------------------------------------------- 238 239 # Memory size in pages from auto-detect 240 memSize = zpByte() 241 242 # The current channel number for sound generation. Advanced every scan line 243 # and independent of the vertical refresh to maintain constant oscillation. 244 channel = zpByte() 245 246 # Next sound sample being synthesized 247 sample = zpByte() 248 # To save one instruction in the critical inner loop, `sample' is always 249 # reset with its own address instead of, for example, the value 0. Compare: 250 # 1 instruction reset 251 # st sample,[sample] 252 # 2 instruction reset: 253 # ld 0 254 # st [sample] 255 # The difference is not audible. This is fine when the reset/address 256 # value is low and doesn't overflow with 4 channels added to it. 257 # There is an alternative, but it requires pull-down diodes on the data bus: 258 # st [sample],[sample] 259 assert 4*63 + sample < 256 260 # We pin this reset/address value to 3, so `sample' swings from 3 to 255 261 assert sample == 3 262 263 # Former bootCount and bootCheck (<= ROMv3) 264 zpReserved = zpByte() # Recycled and still unused. Candidate future uses: 265 # - Video driver high address (for alternative video modes) 266 # - v6502: ADH offset ("MMU") 267 # - v8080: ??? 268 vCpuSelect = zpByte() # Active interpreter page 269 270 # Entropy harvested from SRAM startup and controller input 271 entropy = zpByte(3) 272 273 # Visible video 274 videoY = zpByte() # Counts up from 0 to 238 in steps of 2 275 # Counts up (and is odd) during vertical blank 276 videoModeB = zpByte() # Handler for every 2nd line (pixel burst or vCPU) 277 videoModeC = zpByte() # Handler for every 3rd line (pixel burst or vCPU) 278 videoModeD = zpByte() # Handler for every 4th line (pixel burst or vCPU) 279 280 nextVideo = zpByte() # Jump offset to scan line handler (videoA, B, C...) 281 videoPulse = nextVideo # Used for pulse width modulation 282 283 # Frame counter is good enough as system clock 284 frameCount = zpByte(1) 285 286 # Serial input (game controller) 287 serialRaw = zpByte() # New raw serial read 288 serialLast = zpByte() # Previous serial read 289 buttonState = zpByte() # Clearable button state 290 resetTimer = zpByte() # After 2 seconds of holding 'Start', do a soft reset 291 # XXX move to page 1 to free up space 292 293 # Extended output (blinkenlights in bit 0:3 and audio in bit 4:7). This 294 # value must be present in AC during a rising hSync edge. It then gets 295 # copied to the XOUT register by the hardware. The XOUT register is only 296 # accessible in this indirect manner because it isn't part of the core 297 # CPU architecture. 298 xout = zpByte() 299 xoutMask = zpByte() # The blinkenlights and sound on/off state 300 301 # vCPU interpreter 302 vTicks = zpByte() # Interpreter ticks are units of 2 clocks 303 vPC = zpByte(2) # Interpreter program counter, points into RAM 304 vAC = zpByte(2) # Interpreter accumulator, 16-bits 305 vLR = zpByte(2) # Return address, for returning after CALL 306 vSP = zpByte(1) # Stack pointer 307 vTmp = zpByte() 308 vReturn = zpByte() # Return into video loop (in page of vBlankStart) 309 310 # Scratch 311 frameX = zpByte() # Starting byte within page 312 frameY = zpByte() # Page of current pixel line (updated by videoA) 313 314 # Vertical blank (reuse some variables used in the visible part) 315 videoSync0 = frameX # Vertical sync type on current line (0xc0 or 0x40) 316 videoSync1 = frameY # Same during horizontal pulse (0x80 or 0x00) 317 318 # Versioning for GT1 compatibility 319 # Please refer to Docs/GT1-files.txt for interpreting this variable 320 romType = zpByte(1) 321 322 # The low 3 bits are repurposed to select the actively updated sound channels. 323 # Valid bit combinations are: 324 # xxxxx011 Default after reset: 4 channels (page 1,2,3,4) 325 # xxxxx001 2 channels at double update rate (page 1,2) 326 # xxxxx000 1 channel at quadruple update rate (page 1) 327 # The main application for this is to free up the high bytes of page 2,3,4. 328 channelMask = symbol('channelMask_v4') 329 assert romType == channelMask 330 331 # SYS function arguments and results/scratch 332 sysFn = zpByte(2) 333 sysArgs = zpByte(8) 334 335 # Play sound if non-zero, count down and stop sound when zero 336 soundTimer = zpByte() 337 338 # Fow now the LED state machine itself is hard-coded in the program ROM 339 ledTimer = zpByte() # Number of ticks until next LED change 340 ledState_v2 = zpByte() # Current LED state 341 ledTempo = zpByte() # Next value for ledTimer after LED state change 342 343 # All bytes above, except 0x80, are free for temporary/scratch/stacks etc 344 userVars = zpByte(0) 345 346 #----------------------------------------------------------------------- 347 # 348 # RAM page 1: video line table 349 # 350 #----------------------------------------------------------------------- 351 352 # Byte 0-239 define the video lines 353 videoTable = 0x0100 # Indirection table: Y[0] dX[0] ..., Y[119] dX[119] 354 355 vReset = 0x01f0 356 vIRQ_v5 = 0x01f6 357 ctrlBits = 0x01f8 358 videoTop_v5 = 0x01f9 # Number of skip lines 359 360 # Highest bytes are for sound channel variables 361 wavA = 250 # Waveform modulation with `adda' 362 wavX = 251 # Waveform modulation with `xora' 363 keyL = 252 # Frequency low 7 bits (bit7 == 0) 364 keyH = 253 # Frequency high 8 bits 365 oscL = 254 # Phase low 7 bits 366 oscH = 255 # Phase high 8 bits 367 368 #----------------------------------------------------------------------- 369 # Memory layout 370 #----------------------------------------------------------------------- 371 372 userCode = 0x0200 # Application vCPU code 373 soundTable = 0x0700 # Wave form tables (doubles as right-shift-2 table) 374 screenMemory = 0x0800 # Default start of screen memory: 0x0800 to 0x7fff 375 376 #----------------------------------------------------------------------- 377 # Application definitions 378 #----------------------------------------------------------------------- 379 380 maxTicks = 28//2 # Duration of vCPU's slowest virtual opcode (ticks) 381 minTicks = 14//2 # vcPU's fastest instruction 382 v6502_maxTicks = 38//2 # Max duration of v6502 processing phase (ticks) 383 384 runVcpu_overhead = 5 # Caller overhead (cycles) 385 vCPU_overhead = 9 # Callee overhead of jumping in and out (cycles) 386 v6502_overhead = 11 # Callee overhead for v6502 (cycles) 387 388 v6502_adjust = (v6502_maxTicks - maxTicks) + (v6502_overhead - vCPU_overhead)//2 389 assert v6502_adjust >= 0 # v6502's overhead is a bit more than vCPU 390 391 def runVcpu(n, ref=None, returnTo=None): 392 """Macro to run interpreter for exactly n cycles. Returns 0 in AC. 393 394 - `n' is the number of available Gigatron cycles including overhead. 395 This is converted into interpreter ticks and takes into account 396 the vCPU calling overheads. A `nop' is inserted when necessary 397 for alignment between cycles and ticks. 398 - `returnTo' is where program flow continues after return. If not set 399 explicitely, it will be the first instruction behind the expansion. 400 - If another interpreter than vCPU is active (v6502...), that one 401 must adjust for the timing differences, because runVcpu wouldn't know.""" 402 403 overhead = runVcpu_overhead + vCPU_overhead 404 if returnTo == 0x100: # Special case for videoZ 405 overhead -= 2 406 407 if n is None: 408 # (Clumsily) create a maximum time slice, corresponding to a vTicks 409 # value of 127 (giving 282 cycles). A higher value doesn't work because 410 # then SYS functions that just need 28 cycles (0 excess) won't start. 411 n = (127 + maxTicks) * 2 + overhead 412 413 n -= overhead 414 assert n > 0 415 416 if n % 2 == 1: 417 nop() # Tick alignment 418 n -= 1 419 assert n % 2 == 0 420 421 print('runVcpu at $%04x net cycles %3s info %s' % (pc(), n, ref)) 422 423 if returnTo != 0x100: 424 if returnTo is None: 425 returnTo = pc() + 5 # Next instruction 426 ld(lo(returnTo)) #0 427 st([vReturn]) #1 428 429 n //= 2 430 n -= maxTicks # First instruction always runs 431 assert n < 128 432 assert n >= v6502_adjust 433 434 ld([vCpuSelect],Y) #2 435 jmp(Y,'ENTER') #3 436 ld(n) #4 437 assert runVcpu_overhead == 5 438 439 #----------------------------------------------------------------------- 440 # v6502 definitions 441 #----------------------------------------------------------------------- 442 443 # Registers are zero page variables 444 v6502_PC = vLR # Program Counter 445 v6502_PCL = vLR+0 # Program Counter Low 446 v6502_PCH = vLR+1 # Program Counter High 447 v6502_S = vSP # Stack Pointer (kept as "S+1") 448 v6502_A = vAC+0 # Accumulator 449 v6502_BI = vAC+1 # B Input Register (used by SBC) 450 v6502_ADL = sysArgs+0 # Low Address Register 451 v6502_ADH = sysArgs+1 # High Address Register 452 v6502_IR = sysArgs+2 # Instruction Register 453 v6502_P = sysArgs+3 # Processor Status Register (V flag in bit 7) 454 v6502_Qz = sysArgs+4 # Quick Status Register for Z flag 455 v6502_Qn = sysArgs+5 # Quick Status Register for N flag 456 v6502_X = sysArgs+6 # Index Register X 457 v6502_Y = sysArgs+7 # Index Register Y 458 v6502_Tmp = vTmp # Scratch (may be clobbered outside v6502) 459 460 # MOS 6502 definitions for P register 461 v6502_Cflag = 1 # Carry Flag (unsigned overflow) 462 v6502_Zflag = 2 # Zero Flag (all bits zero) 463 v6502_Iflag = 4 # Interrupt Enable Flag (1=Disable) 464 v6502_Dflag = 8 # Decimal Enable Flag (aka BCD mode, 1=Enable) 465 v6502_Bflag = 16 # Break (or PHP) Instruction Flag 466 v6502_Uflag = 32 # Unused (always 1) 467 v6502_Vflag = 64 # Overflow Flag (signed overflow) 468 v6502_Nflag = 128 # Negative Flag (bit 7 of result) 469 470 # In emulation it is much faster to keep the V flag in bit 7 471 # This can be corrected when importing/exporting with PHP, PLP, etc 472 v6502_Vemu = 128 473 474 # On overflow: 475 # """Overflow is set if two inputs with the same sign produce 476 # a result with a different sign. Otherwise it is clear.""" 477 # Formula (without carry/borrow in!): 478 # (A ^ (A+B)) & (B ^ (A+B)) & 0x80 479 # References: 480 # http://www.righto.com/2012/12/the-6502-overflow-flag-explained.html 481 # http://6502.org/tutorials/vflag.html 482 483 # Memory layout 484 v6502_Stack = 0x0000 # 0x0100 is already used in the Gigatron 485 #v6502_NMI = 0xfffa 486 #v6502_RESET = 0xfffc 487 #v6502_IRQ = 0xfffe 488 489 #----------------------------------------------------------------------- 490 # 491 # $0000 ROM page 0: Boot 492 # 493 #----------------------------------------------------------------------- 494 495 align(0x100, size=0x80) 496 497 # Give a first sign of life that can be checked with a voltmeter address | encoding | | instruction | | | operands | | | | V V V V 0000 0000 ld $00 498 ld(0b0000) # LEDs |OOOO| 0001 1880 ld $80,out 499 ld(syncBits^hSync,OUT) # Prepare XOUT update, hSync goes down, RGB to black 0002 18c0 ld $c0,out 500 ld(syncBits,OUT) # hSync goes up, updating XOUT 501 502 # Setup I/O and RAM expander 0003 c17c ctrl $7c 503 ctrl(0b01111100) # Disable SPI slaves, enable RAM, bank 1 504 # ^^^^^^^^ 505 # |||||||`-- SCLK 506 # ||||||`--- Not connected 507 # |||||`---- /SS0 508 # ||||`----- /SS1 509 # |||`------ /SS2 510 # ||`------- /SS3 511 # |`-------- B0 512 # `--------- B1 513 # bit15 --------- MOSI = 0 514 515 # Simple RAM test and size check by writing to [1<>8) 003c d617 st [$17],y 595 st([vPC+1],Y) 003d dc59 st $59,[y,x++] 596 st('LDI', [Y,Xpp]) 003e dc5e st $5e,[y,x++] 597 st('SYS_Reset_88', [Y,Xpp]) 003f dc2b st $2b,[y,x++] 598 st('STW', [Y,Xpp]) 0040 dc22 st $22,[y,x++] 599 st(sysFn, [Y,Xpp]) 0041 dcb4 st $b4,[y,x++] 600 st('SYS', [Y,Xpp]) # SYS -> SYS_Reset_88 -> SYS_Exec_88 0042 dce2 st $e2,[y,x++] 601 st(256-88//2+maxTicks,[Y,Xpp]) 0043 dc00 st $00,[y,x++] 602 st(0, [Y,Xpp]) # vIRQ_v5: Disable interrupts 0044 dc00 st $00,[y,x++] 603 st(0, [Y,Xpp]) # vIRQ_v5 0045 dcfc st $fc,[y,x++] 604 st(0b11111100, [Y,Xpp]) # Control register 0046 dc00 st $00,[y,x++] 605 st(0, [Y,Xpp]) # videoTop 606 0047 0002 ld $02 607 ld(hi('ENTER')) # Active interpreter (vCPU,v6502) = vCPU 0048 c205 st [$05] 608 st([vCpuSelect]) 609 0049 00ff ld $ff 610 ld(255) # Setup serial input 004a c20e st [$0e] 611 st([frameCount]) 004b c20f st [$0f] 612 st([serialRaw]) 004c c210 st [$10] 613 st([serialLast]) 004d c211 st [$11] 614 st([buttonState]) 004e c212 st [$12] 615 st([resetTimer]) # resetTimer<0 when entering Main.gcl 616 004f 0007 ld $07 617 ld(0b0111) # LEDs |***O| 0050 1880 ld $80,out 618 ld(syncBits^hSync,OUT) 0051 18c0 ld $c0,out 619 ld(syncBits,OUT) 620 0052 0000 ld $00 621 ld(0) 0053 c200 st [$00] 622 st([0]) # Carry lookup ([0x80] in 1st line of vBlank) 0054 c202 st [$02] 623 st([channel]) 0055 c22c st [$2c] 624 st([soundTimer]) 625 0056 000f ld $0f 626 ld(0b1111) # LEDs |****| 0057 1880 ld $80,out 627 ld(syncBits^hSync,OUT) 0058 18c0 ld $c0,out 628 ld(syncBits,OUT) 0059 c213 st [$13] 629 st([xout]) # Setup for control by video loop 005a c214 st [$14] 630 st([xoutMask]) 631 005b 1401 ld $01,y 632 ld(hi('startVideo'),Y) # Enter video loop at vertical blank 005c e003 jmp y,$03 633 jmp(Y,'startVideo') 005d c22e st [$2e] 634 st([ledState_v2]) # Setting to 1..126 means "stopped" 635 636 #----------------------------------------------------------------------- 637 # Extension SYS_Reset_88: Soft reset 638 #----------------------------------------------------------------------- 639 640 # SYS_Reset_88 initiates an immediate Gigatron reset from within the vCPU. 641 # The reset sequence itself is mostly implemented in GCL by Reset.gcl, 642 # which must first be loaded into RAM. But as that takes more than 1 scanline, 643 # some vCPU bootstrapping code gets loaded with SYS_Exec_88. 644 # !!! This function was REMOVED from interface.json 645 # !!! Better use vReset as generic entry point for soft reset 646 647 # ROM type (see also Docs/GT1-files.txt) 648 romTypeValue = symbol('romTypeValue_ROMv5') 649 650 label('SYS_Reset_88') 651 assert pc()>>8 == 0 652 assert (romTypeValue & 7) == 0 SYS_Reset_88: 005e 0040 ld $40 653 ld(romTypeValue) #15 Set ROM type/version and clear channel mask 005f c221 st [$21] 654 st([romType]) #16 0060 0000 ld $00 655 ld(0) #17 0061 c21c st [$1c] 656 st([vSP]) #18 vSP 0062 1401 ld $01,y 657 ld(hi('videoTop_v5'),Y) #19 0063 caf9 st [y,$f9] 658 st([Y,lo('videoTop_v5')]) #20 Show all 120 pixel lines 0064 caf6 st [y,$f6] 659 st([Y,vIRQ_v5]) #21 Disable vIRQ dispatch 0065 caf7 st [y,$f7] 660 st([Y,vIRQ_v5+1]) #22 0066 c22c st [$2c] 661 st([soundTimer]) #23 soundTimer 662 assert userCode&255 == 0 0067 c21a st [$1a] 663 st([vLR]) #24 vLR 0068 0002 ld $02 664 ld(userCode>>8) #25 0069 c21b st [$1b] 665 st([vLR+1]) #26 006a 00f6 ld $f6 666 ld('nopixels') #27 Video mode 3 (fast) 006b c20a st [$0a] 667 st([videoModeB]) #28 006c c20b st [$0b] 668 st([videoModeC]) #29 006d c20c st [$0c] 669 st([videoModeD]) #30 006e 00ad ld $ad 670 ld('SYS_Exec_88') #31 SYS_Exec_88 006f c222 st [$22] 671 st([sysFn]) #32 High byte (remains) 0 0070 000e ld $0e 672 ld('Reset') #33 Reset.gt1 from EPROM 0071 c224 st [$24] 673 st([sysArgs+0]) #34 0072 00f9 ld $f9 674 ld(hi('Reset')) #35 0073 c225 st [$25] 675 st([sysArgs+1]) #36 0074 0116 ld [$16] 676 ld([vPC]) #37 Force second SYS call 0075 a002 suba $02 677 suba(2) #38 0076 c216 st [$16] 678 st([vPC]) #39 679 # Return to interpreter 0077 1403 ld $03,y 680 ld(hi('NEXTY'),Y) #40 0078 e000 jmp y,$00 681 jmp(Y,'NEXTY') #41 0079 00ea ld $ea 682 ld(-44/2) #42 683 684 #----------------------------------------------------------------------- 685 # Placeholders for future SYS functions. This works as a kind of jump 686 # table. The indirection allows SYS implementations to be moved around 687 # between ROM versions, at the expense of 2 clock cycles (or 1). When 688 # the function is not present it just acts as a NOP. Of course, when a 689 # SYS function must be patched or extended it needs to have budget for 690 # that in its declared maximum cycle count. 691 # 692 # Technically the same goal can be achieved by starting each function 693 # with 2 nop's, or by overdeclaring their duration in the first place 694 # (a bit is still wise to do). But this can result in fragmentation 695 # of future ROM images. The indirection avoids that. 696 # 697 # An added advantage of having these in ROM page 0 is that it saves one 698 # byte when setting sysFn: LDI+STW (4 bytes) instead of LDWI+STW (5 bytes) 699 #----------------------------------------------------------------------- 700 007a 0200 nop 701 align(0x80, size=0x80) 007b 0200 nop 007c 0200 nop * 6 times 702 assert pc() == 0x80 703 0080 1403 ld $03,y 704 ld(hi('REENTER'),Y) #15 slot 0x80 0081 e0cb jmp y,$cb 705 jmp(Y,'REENTER') #16 0082 00f6 ld $f6 706 ld(-20/2) #17 707 0083 1403 ld $03,y 708 ld(hi('REENTER'),Y) #15 slot 0x83 0084 e0cb jmp y,$cb 709 jmp(Y,'REENTER') #16 0085 00f6 ld $f6 710 ld(-20/2) #17 711 0086 1403 ld $03,y 712 ld(hi('REENTER'),Y) #15 slot 0x86 0087 e0cb jmp y,$cb 713 jmp(Y,'REENTER') #16 0088 00f6 ld $f6 714 ld(-20/2) #17 715 0089 1403 ld $03,y 716 ld(hi('REENTER'),Y) #15 slot 0x89 008a e0cb jmp y,$cb 717 jmp(Y,'REENTER') #16 008b 00f6 ld $f6 718 ld(-20/2) #17 719 008c 1403 ld $03,y 720 ld(hi('REENTER'),Y) #15 slot 0x8c 008d e0cb jmp y,$cb 721 jmp(Y,'REENTER') #16 008e 00f6 ld $f6 722 ld(-20/2) #17 723 008f 1403 ld $03,y 724 ld(hi('REENTER'),Y) #15 slot 0x8f 0090 e0cb jmp y,$cb 725 jmp(Y,'REENTER') #16 0091 00f6 ld $f6 726 ld(-20/2) #17 727 0092 1403 ld $03,y 728 ld(hi('REENTER'),Y) #15 slot 0x92 0093 e0cb jmp y,$cb 729 jmp(Y,'REENTER') #16 0094 00f6 ld $f6 730 ld(-20/2) #17 731 0095 1403 ld $03,y 732 ld(hi('REENTER'),Y) #15 slot 0x95 0096 e0cb jmp y,$cb 733 jmp(Y,'REENTER') #16 0097 00f6 ld $f6 734 ld(-20/2) #17 735 0098 1403 ld $03,y 736 ld(hi('REENTER'),Y) #15 slot 0x98 0099 e0cb jmp y,$cb 737 jmp(Y,'REENTER') #16 009a 00f6 ld $f6 738 ld(-20/2) #17 739 009b 1403 ld $03,y 740 ld(hi('REENTER'),Y) #15 slot 0x9b 009c e0cb jmp y,$cb 741 jmp(Y,'REENTER') #16 009d 00f6 ld $f6 742 ld(-20/2) #17 743 009e 1403 ld $03,y 744 ld(hi('REENTER'),Y) #15 slot 0x9e 009f e0cb jmp y,$cb 745 jmp(Y,'REENTER') #16 00a0 00f6 ld $f6 746 ld(-20/2) #17 747 00a1 1403 ld $03,y 748 ld(hi('REENTER'),Y) #15 slot 0xa1 00a2 e0cb jmp y,$cb 749 jmp(Y,'REENTER') #16 00a3 00f6 ld $f6 750 ld(-20/2) #17 751 00a4 1403 ld $03,y 752 ld(hi('REENTER'),Y) #15 slot 0xa4 00a5 e0cb jmp y,$cb 753 jmp(Y,'REENTER') #16 00a6 00f6 ld $f6 754 ld(-20/2) #17 755 00a7 1403 ld $03,y 756 ld(hi('REENTER'),Y) #15 slot 0xa7 00a8 e0cb jmp y,$cb 757 jmp(Y,'REENTER') #16 00a9 00f6 ld $f6 758 ld(-20/2) #17 759 00aa 1403 ld $03,y 760 ld(hi('REENTER'),Y) #15 slot 0xaa 00ab e0cb jmp y,$cb 761 jmp(Y,'REENTER') #16 00ac 00f6 ld $f6 762 ld(-20/2) #17 763 764 #----------------------------------------------------------------------- 765 # Extension SYS_Exec_88: Load code from ROM into memory and execute it 766 #----------------------------------------------------------------------- 767 # 768 # This loads the vCPU code with consideration of the current vSP 769 # Used during reset, but also for switching between applications or for 770 # loading data from ROM from within an application (overlays). 771 # 772 # ROM stream format is [ n*]* 0 773 # on top of lookup tables. 774 # 775 # Variables: 776 # sysArgs[0:1] ROM pointer (in) 777 # sysArgs[2:3] RAM pointer (changed) 778 # sysArgs[4] State counter (changed) 779 # vLR vCPU continues here (in) 780 781 label('SYS_Exec_88') SYS_Exec_88: 00ad 1412 ld $12,y 782 ld(hi('sys_Exec'),Y) #15 00ae e04b jmp y,$4b 783 jmp(Y,'sys_Exec') #16 00af 0000 ld $00 784 ld(0) #17 Address of loader on zero page 785 786 #----------------------------------------------------------------------- 787 # More placeholders for future SYS functions 788 #----------------------------------------------------------------------- 789 00b0 1403 ld $03,y 790 ld(hi('REENTER'),Y) #15 slot 0xb0 00b1 e0cb jmp y,$cb 791 jmp(Y,'REENTER') #16 00b2 00f6 ld $f6 792 ld(-20/2) #17 793 00b3 1403 ld $03,y 794 ld(hi('REENTER'),Y) #15 slot 0xb3 00b4 e0cb jmp y,$cb 795 jmp(Y,'REENTER') #16 00b5 00f6 ld $f6 796 ld(-20/2) #17 797 00b6 1403 ld $03,y 798 ld(hi('REENTER'),Y) #15 slot 0xb6 00b7 e0cb jmp y,$cb 799 jmp(Y,'REENTER') #16 00b8 00f6 ld $f6 800 ld(-20/2) #17 801 00b9 1403 ld $03,y 802 ld(hi('REENTER'),Y) #15 slot 0xb9 00ba e0cb jmp y,$cb 803 jmp(Y,'REENTER') #16 00bb 00f6 ld $f6 804 ld(-20/2) #17 805 00bc 1403 ld $03,y 806 ld(hi('REENTER'),Y) #15 slot 0xbc 00bd e0cb jmp y,$cb 807 jmp(Y,'REENTER') #16 00be 00f6 ld $f6 808 ld(-20/2) #17 809 00bf 1403 ld $03,y 810 ld(hi('REENTER'),Y) #15 slot 0xbf 00c0 e0cb jmp y,$cb 811 jmp(Y,'REENTER') #16 00c1 00f6 ld $f6 812 ld(-20/2) #17 813 00c2 1403 ld $03,y 814 ld(hi('REENTER'),Y) #15 slot 0xc2 00c3 e0cb jmp y,$cb 815 jmp(Y,'REENTER') #16 00c4 00f6 ld $f6 816 ld(-20/2) #17 817 00c5 1403 ld $03,y 818 ld(hi('REENTER'),Y) #15 slot 0xc5 00c6 e0cb jmp y,$cb 819 jmp(Y,'REENTER') #16 00c7 00f6 ld $f6 820 ld(-20/2) #17 821 00c8 1403 ld $03,y 822 ld(hi('REENTER'),Y) #15 slot 0xc8 00c9 e0cb jmp y,$cb 823 jmp(Y,'REENTER') #16 00ca 00f6 ld $f6 824 ld(-20/2) #17 825 00cb 1403 ld $03,y 826 ld(hi('REENTER'),Y) #15 slot 0xcb 00cc e0cb jmp y,$cb 827 jmp(Y,'REENTER') #16 00cd 00f6 ld $f6 828 ld(-20/2) #17 829 00ce 1403 ld $03,y 830 ld(hi('REENTER'),Y) #15 slot 0xce 00cf e0cb jmp y,$cb 831 jmp(Y,'REENTER') #16 00d0 00f6 ld $f6 832 ld(-20/2) #17 833 00d1 1403 ld $03,y 834 ld(hi('REENTER'),Y) #15 slot 0xd1 00d2 e0cb jmp y,$cb 835 jmp(Y,'REENTER') #16 00d3 00f6 ld $f6 836 ld(-20/2) #17 837 00d4 1403 ld $03,y 838 ld(hi('REENTER'),Y) #15 slot 0xd4 00d5 e0cb jmp y,$cb 839 jmp(Y,'REENTER') #16 00d6 00f6 ld $f6 840 ld(-20/2) #17 841 00d7 1403 ld $03,y 842 ld(hi('REENTER'),Y) #15 slot 0xd7 00d8 e0cb jmp y,$cb 843 jmp(Y,'REENTER') #16 00d9 00f6 ld $f6 844 ld(-20/2) #17 845 00da 1403 ld $03,y 846 ld(hi('REENTER'),Y) #15 slot 0xda 00db e0cb jmp y,$cb 847 jmp(Y,'REENTER') #16 00dc 00f6 ld $f6 848 ld(-20/2) #17 849 00dd 1403 ld $03,y 850 ld(hi('REENTER'),Y) #15 slot 0xdd 00de e0cb jmp y,$cb 851 jmp(Y,'REENTER') #16 00df 00f6 ld $f6 852 ld(-20/2) #17 853 00e0 1403 ld $03,y 854 ld(hi('REENTER'),Y) #15 slot 0xe0 00e1 e0cb jmp y,$cb 855 jmp(Y,'REENTER') #16 00e2 00f6 ld $f6 856 ld(-20/2) #17 857 00e3 1403 ld $03,y 858 ld(hi('REENTER'),Y) #15 slot 0xe3 00e4 e0cb jmp y,$cb 859 jmp(Y,'REENTER') #16 00e5 00f6 ld $f6 860 ld(-20/2) #17 861 00e6 1403 ld $03,y 862 ld(hi('REENTER'),Y) #15 slot 0xe6 00e7 e0cb jmp y,$cb 863 jmp(Y,'REENTER') #16 00e8 00f6 ld $f6 864 ld(-20/2) #17 865 866 #----------------------------------------------------------------------- 867 # Extension SYS_StoreBytes_DEVROM_XXX 868 #----------------------------------------------------------------------- 869 00e9 1403 ld $03,y 870 ld(hi('REENTER'),Y) #15 slot 0xe9 00ea e0cb jmp y,$cb 871 jmp(Y,'REENTER') #16 00eb 00f6 ld $f6 872 ld(-20/2) #17 873 874 #----------------------------------------------------------------------- 875 # Extension SYS_LoadBytes_DEVROM_XXX 876 #----------------------------------------------------------------------- 877 878 # Load object variables into zero-page 879 # XXX Unfinished 880 # 881 # Variables 882 # vLR Pointer to size byte + object variables 883 # $30...$30+n-1 Target location 884 885 label('SYS_LoadBytes_DEVROM_XXX') SYS_LoadBytes_DEVROM_XXX: 00ec 1412 ld $12,y 886 ld(hi('sys_LoadBytes'),Y) #15 00ed e0e9 jmp y,$e9 887 jmp(Y,'sys_LoadBytes') #16 00ee 151b ld [$1b],y 888 ld([vLR+1],Y) #17 889 890 #----------------------------------------------------------------------- 891 # Extension SYS_ReadRomDir_v5_80 892 #----------------------------------------------------------------------- 893 894 # Get next entry from ROM file system. Use vAC=0 to get the first entry. 895 896 # Variables: 897 # vAC Start address of current entry (inout) 898 # sysArgs[0:7] File name, padded with zeroes (out) 899 900 label('SYS_ReadRomDir_v5_80') SYS_ReadRomDir_v5_80: 00ef 14fb ld $fb,y 901 ld(hi('sys_ReadRomDir'),Y) #15 00f0 e0d5 jmp y,$d5 902 jmp(Y,'sys_ReadRomDir') #16 00f1 0119 ld [$19] 903 ld([vAC+1]) #17 904 00f2 0200 nop 905 fillers(until=symbol('SYS_Out_22') & 255) 00f3 0200 nop 906 907 #----------------------------------------------------------------------- 908 # Extension SYS_Out_22 909 #----------------------------------------------------------------------- 910 911 # Send byte to output port 912 # 913 # Variables: 914 # vAC 915 916 label('SYS_Out_22') SYS_Out_22: 00f4 1924 ld [$24],out 917 ld([sysArgs+0],OUT) #15 00f5 0200 nop 918 nop() #16 00f6 1403 ld $03,y 919 ld(hi('REENTER'),Y) #17 00f7 e0cb jmp y,$cb 920 jmp(Y,'REENTER') #18 00f8 00f5 ld $f5 921 ld(-22/2) #19 922 923 #----------------------------------------------------------------------- 924 # Extension SYS_In_24 925 #----------------------------------------------------------------------- 926 927 # Read a byte from the input port 928 # 929 # Variables: 930 # vAC 931 932 label('SYS_In_24') SYS_In_24: 00f9 c318 st in,[$18] 933 st(IN, [vAC]) #15 00fa 0000 ld $00 934 ld(0) #16 00fb c219 st [$19] 935 st([vAC+1]) #17 00fc 0200 nop 936 nop() #18 00fd 1403 ld $03,y 937 ld(hi('REENTER'),Y) #19 00fe e0cb jmp y,$cb 938 jmp(Y,'REENTER') #20 00ff 00f4 ld $f4 939 ld(-24/2) #21 940 941 assert pc()&255 == 0 942 943 #----------------------------------------------------------------------- 944 # 945 # $0100 ROM page 1: Video loop vertical blank 946 # 947 #----------------------------------------------------------------------- 948 align(0x100, size=0x100) 949 950 # Video off mode (also no sound, serial, timer, blinkenlights, ...). 951 # For benchmarking purposes. This still has the overhead for the vTicks 952 # administration, time slice granularity etc. 953 label('videoZ') 954 videoZ = pc() videoZ: 0100 1505 ld [$05],y 955 runVcpu(None, '---- novideo', returnTo=videoZ) 0101 e0ff jmp y,$ff 0102 007f ld $7f 956 957 label('startVideo') # (Re)start of video signal from idle state startVideo: 0103 00c0 ld $c0 958 ld(syncBits) 959 960 # Start of vertical blank interval 961 label('vBlankStart') vBlankStart: 0104 c21f st [$1f] 962 st([videoSync0]) #32 Start of vertical blank interval 0105 0080 ld $80 963 ld(syncBits^hSync) #33 0106 c220 st [$20] 964 st([videoSync1]) #34 965 966 # Reset line counter before vCPU can see it 0107 00b3 ld $b3 967 ld(videoYline0) #35 0108 c209 st [$09] 968 st([videoY]) #36 969 970 # Update frame count and [0x80] (4 cycles) 0109 0001 ld $01 971 ld(1) #37 Reinitialize carry lookup, for robustness 010a c280 st [$80] 972 st([0x80]) #38 010b 810e adda [$0e] 973 adda([frameCount]) #39 Frame counter 010c c20e st [$0e] 974 st([frameCount]) #40 975 976 # Mix entropy (11 cycles) 010d 6107 xora [$07] 977 xora([entropy+1]) #41 Mix entropy 010e 610f xora [$0f] 978 xora([serialRaw]) #42 Mix in serial input 010f 8106 adda [$06] 979 adda([entropy+0]) #43 0110 c206 st [$06] 980 st([entropy+0]) #44 0111 8108 adda [$08] 981 adda([entropy+2]) #45 Some hidden state 0112 c208 st [$08] 982 st([entropy+2]) #46 0113 e816 blt $0116 983 bmi(pc()+3) #47 0114 fc17 bra $0117 984 bra(pc()+3) #48 0115 6053 xora $53 985 xora(64+16+2+1) #49 0116 606c xora $6c 986 xora(64+32+8+4) #49(!) 0117 8107 adda [$07] 987 adda([entropy+1]) #50 0118 c207 st [$07] 988 st([entropy+1]) #51 989 990 # LED sequencer (18 cycles) 0119 012d ld [$2d] 991 ld([ledTimer]) #52 Blinkenlight sequencer 011a f01d beq $011d 992 beq(pc()+3) #53 011b fc1e bra $011e 993 bra(pc()+3) #54 011c a001 suba $01 994 suba(1) #55 011d 012f ld [$2f] 995 ld([ledTempo]) #55(!) 011e c22d st [$2d] 996 st([ledTimer]) #56 011f f022 beq $0122 997 beq(pc()+3) #57 0120 fc23 bra $0123 998 bra(pc()+3) #58 0121 0000 ld $00 999 ld(0) #59 Don't advance state 0122 0001 ld $01 1000 ld(1) #59(!) Advance state when timer passes through 0 0123 812e adda [$2e] 1001 adda([ledState_v2]) #60 0124 ec27 bne $0127 1002 bne(pc()+3) #61 0125 fc28 bra $0128 1003 bra(pc()+3) #62 0126 00e8 ld $e8 1004 ld(-24) #63 State 0 becomes -24, start of sequence 0127 e42c bgt .leds#65 1005 bgt('.leds#65') #63(!) Catch the stopped state (>0) 0128 c22e st [$2e] 1006 st([ledState_v2]) #64 0129 8048 adda $48 1007 adda('.leds#69') #65 012a fe00 bra ac 1008 bra(AC) #66 Jump to lookup table 012b fc48 bra .leds#69 1009 bra('.leds#69') #67 Single-instruction subroutine 1010 1011 label('.leds#65') .leds#65: 012c 000f ld $0f 1012 ld(0x0f) #65 Maintain stopped state 012d c22e st [$2e] 1013 st([ledState_v2]) #66 012e fc48 bra .leds#69 1014 bra('.leds#69') #67 012f 2114 anda [$14] 1015 anda([xoutMask]) #68 Always clear sound bits (this is why AC=0x0f) 1016 0130 000f ld $0f 1017 ld(0b1111) #68 LEDs |****| offset -24 Low 4 bits are the LED output 0131 0007 ld $07 1018 ld(0b0111) #68 LEDs |***O| 0132 0003 ld $03 1019 ld(0b0011) #68 LEDs |**OO| 0133 0001 ld $01 1020 ld(0b0001) #68 LEDs |*OOO| 0134 0002 ld $02 1021 ld(0b0010) #68 LEDs |O*OO| 0135 0004 ld $04 1022 ld(0b0100) #68 LEDs |OO*O| 0136 0008 ld $08 1023 ld(0b1000) #68 LEDs |OOO*| 0137 0004 ld $04 1024 ld(0b0100) #68 LEDs |OO*O| 0138 0002 ld $02 1025 ld(0b0010) #68 LEDs |O*OO| 0139 0001 ld $01 1026 ld(0b0001) #68 LEDs |*OOO| 013a 0003 ld $03 1027 ld(0b0011) #68 LEDs |**OO| 013b 0007 ld $07 1028 ld(0b0111) #68 LEDs |***O| 013c 000f ld $0f 1029 ld(0b1111) #68 LEDs |****| 013d 000e ld $0e 1030 ld(0b1110) #68 LEDs |O***| 013e 000c ld $0c 1031 ld(0b1100) #68 LEDs |OO**| 013f 0008 ld $08 1032 ld(0b1000) #68 LEDs |OOO*| 0140 0004 ld $04 1033 ld(0b0100) #68 LEDs |OO*O| 0141 0002 ld $02 1034 ld(0b0010) #68 LEDs |O*OO| 0142 0001 ld $01 1035 ld(0b0001) #68 LEDs |*OOO| 0143 0002 ld $02 1036 ld(0b0010) #68 LEDs |O*OO| 0144 0004 ld $04 1037 ld(0b0100) #68 LEDs |OO*O| 0145 0008 ld $08 1038 ld(0b1000) #68 LEDs |OOO*| 0146 000c ld $0c 1039 ld(0b1100) #68 LEDs |OO**| 0147 000e ld $0e 1040 ld(0b1110) #68 LEDs |O***| offset -1 1041 label('.leds#69') .leds#69: 0148 c214 st [$14] 1042 st([xoutMask]) #69 Sound bits will be re-enabled below 0149 0010 ld $10 1043 ld(vPulse*2) #70 vPulse default length when not modulated 014a c20d st [$0d] 1044 st([videoPulse]) #71 1045 1046 # When the total number of scan lines per frame is not an exact multiple of the 1047 # (4) channels, there will be an audible discontinuity if no measure is taken. 1048 # This static noise can be suppressed by swallowing the first `lines mod 4' 1049 # partial samples after transitioning into vertical blank. This is easiest if 1050 # the modulo is 0 (do nothing), 1 (reset sample when entering the last visible 1051 # scan line), or 2 (reset sample while in the first blank scan line). For the 1052 # last case there is no solution yet: give a warning. 1053 extra = 0 1054 if soundDiscontinuity == 2: 1055 st(sample, [sample]) # Sound continuity 1056 extra += 1 1057 if soundDiscontinuity > 2: 1058 highlight('Warning: sound discontinuity not suppressed') 1059 1060 # vCPU interrupt 014b 010e ld [$0e] 1061 ld([frameCount]) #72 1062 beq('vBlankFirst#75') #73 014c f052 beq vBlankFirst#75 1063 1064 runVcpu(186-74-extra, #74 Application cycles (scan line 0) 1065 '---D line 0 no timeout', 014d 0055 ld $55 1066 returnTo='vBlankFirst#186') 014e c21e st [$1e] 014f 1505 ld [$05],y 0150 e0ff jmp y,$ff 0151 0023 ld $23 1067 1068 label('vBlankFirst#75') vBlankFirst#75: 0152 1412 ld $12,y 1069 ld(hi('vBlankFirst#78'),Y) #75 0153 e000 jmp y,$00 1070 jmp(Y,'vBlankFirst#78') #76 0154 1401 ld $01,y 1071 ld(hi(vIRQ_v5),Y) #77 1072 label('vBlankFirst#186') 1073 1074 # Mitigation for rogue channelMask (3 cycles) vBlankFirst#186: 0155 0121 ld [$21] 1075 ld([channelMask]) #186 Normalize channelMask, for robustness 0156 20fb anda $fb 1076 anda(0b11111011) #187 0157 c221 st [$21] 1077 st([channelMask]) #188 1078 1079 # Sound on/off (6 cycles) 0158 012c ld [$2c] 1080 ld([soundTimer]) #189 Sound on/off 0159 ec5c bne $015c 1081 bne(pc()+3) #190 015a fc5d bra $015d 1082 bra(pc()+3) #191 015b 0000 ld $00 1083 ld(0) #192 Keeps sound unchanged (should be off here) 015c 00f0 ld $f0 1084 ld(0xf0) #192(!) Turns sound back on 015d 4114 ora [$14] 1085 ora([xoutMask]) #193 015e c214 st [$14] 1086 st([xoutMask]) #194 1087 1088 # Sound timer count down (5 cycles) 015f 012c ld [$2c] 1089 ld([soundTimer]) #195 Sound timer 0160 f063 beq $0163 1090 beq(pc()+3) #196 0161 fc64 bra $0164 1091 bra(pc()+3) #197 0162 a001 suba $01 1092 suba(1) #198 0163 0000 ld $00 1093 ld(0) #198 0164 c22c st [$2c] 1094 st([soundTimer]) #199 1095 0165 191f ld [$1f],out 1096 ld([videoSync0],OUT) #0 1097 label('sound1') sound1: 0166 0102 ld [$02] 1098 ld([channel]) #1 Advance to next sound channel 0167 2121 anda [$21] 1099 anda([channelMask]) #2 0168 8001 adda $01 1100 adda(1) #3 0169 1920 ld [$20],out 1101 ld([videoSync1],OUT) #4 Start horizontal pulse 016a d602 st [$02],y 1102 st([channel],Y) #5 016b 007f ld $7f 1103 ld(0x7f) #6 Update sound channel 016c 29fe anda [y,$fe] 1104 anda([Y,oscL]) #7 016d 89fc adda [y,$fc] 1105 adda([Y,keyL]) #8 016e cafe st [y,$fe] 1106 st([Y,oscL]) #9 016f 3080 anda $80,x 1107 anda(0x80,X) #10 0170 0500 ld [x] 1108 ld([X]) #11 0171 89ff adda [y,$ff] 1109 adda([Y,oscH]) #12 0172 89fd adda [y,$fd] 1110 adda([Y,keyH]) #13 0173 caff st [y,$ff] 1111 st([Y,oscH]) #14 0174 20fc anda $fc 1112 anda(0xfc) #15 0175 69fb xora [y,$fb] 1113 xora([Y,wavX]) #16 0176 1200 ld ac,x 1114 ld(AC,X) #17 0177 09fa ld [y,$fa] 1115 ld([Y,wavA]) #18 0178 1407 ld $07,y 1116 ld(soundTable>>8,Y) #19 0179 8d00 adda [y,x] 1117 adda([Y,X]) #20 017a e87d blt $017d 1118 bmi(pc()+3) #21 017b fc7e bra $017e 1119 bra(pc()+3) #22 017c 203f anda $3f 1120 anda(63) #23 017d 003f ld $3f 1121 ld(63) #23(!) 017e 8103 adda [$03] 1122 adda([sample]) #24 017f c203 st [$03] 1123 st([sample]) #25 1124 0180 0113 ld [$13] 1125 ld([xout]) #26 Gets copied to XOUT 0181 1412 ld $12,y 1126 ld(hi('vBlankLast#34'),Y) #27 Prepare jumping out of page in last line 0182 191f ld [$1f],out 1127 ld([videoSync0],OUT) #28 End horizontal pulse 1128 1129 # Count through the vertical blank interval until its last scan line 0183 0109 ld [$09] 1130 ld([videoY]) #29 1131 bpl('.vBlankLast#32') #30 0184 f4b1 bge .vBlankLast#32 0185 8002 adda $02 1132 adda(2) #31 0186 c209 st [$09] 1133 st([videoY]) #32 1134 1135 # Determine if we're in the vertical sync pulse 0187 a0bd suba $bd 1136 suba(1-2*(vBack+vPulse-1)) #33 Prepare sync values 0188 ec8d bne .prepSync36 1137 bne('.prepSync36') #34 Tests for start of vPulse 0189 a10d suba [$0d] 1138 suba([videoPulse]) #35 018a 0040 ld $40 1139 ld(syncBits^vSync) #36 Entering vertical sync pulse 018b fc92 bra .prepSync39 1140 bra('.prepSync39') #37 018c c21f st [$1f] 1141 st([videoSync0]) #38 1142 label('.prepSync36') .prepSync36: 018d ec91 bne .prepSync38 1143 bne('.prepSync38') #36 Tests for end of vPulse 018e 00c0 ld $c0 1144 ld(syncBits) #37 018f fc93 bra .prepSync40 1145 bra('.prepSync40') #38 Entering vertical back porch 0190 c21f st [$1f] 1146 st([videoSync0]) #39 1147 label('.prepSync38') .prepSync38: 0191 011f ld [$1f] 1148 ld([videoSync0]) #38 Load current value 1149 label('.prepSync39') .prepSync39: 0192 0200 nop 1150 nop() #39 1151 label('.prepSync40') .prepSync40: 0193 6040 xora $40 1152 xora(hSync) #40 Precompute, as during the pulse there is no time 0194 c220 st [$20] 1153 st([videoSync1]) #41 1154 1155 # Capture the serial input before the '595 shifts it out 0195 0109 ld [$09] 1156 ld([videoY]) #42 Capture serial input 0196 60cf xora $cf 1157 xora(1-2*(vBack-1-1)) #43 Exactly when the 74HC595 has captured all 8 controller bits 0197 ec9a bne $019a 1158 bne(pc()+3) #44 0198 fc9b bra $019b 1159 bra(pc()+3) #45 0199 c30f st in,[$0f] 1160 st(IN, [serialRaw]) #46 019a c000 st $00,[$00] 1161 st(0,[0]) #46(!) Reinitialize carry lookup, for robustness 1162 1163 # Update [xout] with the next sound sample every 4 scan lines. 1164 # Keep doing this on 'videoC equivalent' scan lines in vertical blank. 019b 0109 ld [$09] 1165 ld([videoY]) #47 019c 2006 anda $06 1166 anda(6) #48 1167 beq('vBlankSample') #49 019d f0a6 beq vBlankSample 019e 0103 ld [$03] 1168 ld([sample]) #50 1169 1170 label('vBlankNormal') vBlankNormal: 019f 00a4 ld $a4 1171 runVcpu(199-51, 'AB-D line 1-36')#51 Application cycles (vBlank scan lines without sound sample update) 01a0 c21e st [$1e] 01a1 1505 ld [$05],y 01a2 e0ff jmp y,$ff 01a3 0035 ld $35 01a4 fc66 bra sound1 1172 bra('sound1') #199 01a5 191f ld [$1f],out 1173 ld([videoSync0],OUT) #0 1174 1175 label('vBlankSample') vBlankSample: 01a6 400f ora $0f 1176 ora(0x0f) #51 New sound sample is ready 01a7 2114 anda [$14] 1177 anda([xoutMask]) #52 01a8 c213 st [$13] 1178 st([xout]) #53 01a9 c003 st $03,[$03] 1179 st(sample, [sample]) #54 Reset for next sample 1180 01aa 00af ld $af 1181 runVcpu(199-55, '--C- line 3-39')#55 Application cycles (vBlank scan lines with sound sample update) 01ab c21e st [$1e] 01ac 1505 ld [$05],y 01ad e0ff jmp y,$ff 01ae 0033 ld $33 01af fc66 bra sound1 1182 bra('sound1') #199 01b0 191f ld [$1f],out 1183 ld([videoSync0],OUT) #0 1184 1185 #----------------------------------------------------------------------- 1186 1187 label('.vBlankLast#32') .vBlankLast#32: 01b1 e02e jmp y,$2e 1188 jmp(Y,'vBlankLast#34') #32 Jump out of page for space reasons 1189 #assert hi(controllerType) == hi(pc()) # Assume these share the high address 01b2 1401 ld $01,y 1190 ld(hi(pc()),Y) #33 1191 1192 label('vBlankLast#52') 1193 1194 # Respond to reset button (14 cycles) 1195 # - ResetTimer decrements as long as just [Start] is pressed down 1196 # - Reaching 0 (normal) or 128 (extended) triggers the soft reset sequence 1197 # - Initial value is 128 (or 255 at boot), first decrement, then check 1198 # - This starts vReset -> SYS_Reset_88 -> SYS_Exec_88 -> Reset.gcl -> Main.gcl 1199 # - Main.gcl then recognizes extended presses if resetTimer is 0..127 ("paasei") 1200 # - This requires a full cycle (4s) in the warm boot scenario 1201 # - Or a half cycle (2s) when pressing [Select] down during hard reset 1202 # - This furthermore requires >=1 frame (and <=128) to have passed between 1203 # reaching 128 and getting through Reset and the start of Main, while [Start] 1204 # was still pressed so the count reaches <128. Two reasonable expectations. 1205 # - The unintended power-up scenarios of ROMv1 (pulling SER_DATA low, or 1206 # pressing [Select] together with another button) now don't trigger anymore. 1207 vBlankLast#52: 01b3 0111 ld [$11] 1208 ld([buttonState]) #52 Check [Start] for soft reset 01b4 60ef xora $ef 1209 xora(~buttonStart) #53 01b5 ecbe bne .restart#56 1210 bne('.restart#56') #54 01b6 0112 ld [$12] 1211 ld([resetTimer]) #55 As long as button pressed 01b7 a001 suba $01 1212 suba(1) #56 ... count down the timer 01b8 c212 st [$12] 1213 st([resetTimer]) #57 01b9 207f anda $7f 1214 anda(127) #58 01ba f0c6 beq .restart#61 1215 beq('.restart#61') #59 Reset at 0 (normal 2s) or 128 (extended 4s) 01bb 00ee ld $ee 1216 ld((vReset&255)-2) #60 Start force reset when hitting 0 01bc fcc5 bra .restart#63 1217 bra('.restart#63') #61 ... otherwise do nothing yet 01bd fcc4 bra .restart#64 1218 bra('.restart#64') #62 1219 label('.restart#56') .restart#56: 01be 0001 ld $01 1220 wait(62-56) #56 01bf ecbf bne $01bf 01c0 a001 suba $01 01c1 0200 nop 01c2 0080 ld $80 1221 ld(128) #62 Not pressed, reset the timer 01c3 c212 st [$12] 1222 st([resetTimer]) #63 1223 label('.restart#64') .restart#64: 01c4 fccb bra .restart#66 1224 bra('.restart#66') #64 1225 label('.restart#63') .restart#63: 01c5 0200 nop 1226 nop() #63,65 1227 label('.restart#61') .restart#61: 01c6 c216 st [$16] 1228 st([vPC]) #61 Point vPC at vReset 01c7 0001 ld $01 1229 ld(vReset>>8) #62 01c8 c217 st [$17] 1230 st([vPC+1]) #63 01c9 0002 ld $02 1231 ld(hi('ENTER')) #64 Set active interpreter to vCPU 01ca c205 st [$05] 1232 st([vCpuSelect]) #65 1233 label('.restart#66') 1234 1235 # Switch video mode when (only) select is pressed (16 cycles) 1236 # XXX We could make this a vCPU interrupt .restart#66: 01cb 0111 ld [$11] 1237 ld([buttonState]) #66 Check [Select] to switch modes 01cc 60df xora $df 1238 xora(~buttonSelect) #67 Only trigger when just [Select] is pressed 01cd ece2 bne .select#70 1239 bne('.select#70') #68 01ce 010b ld [$0b] 1240 ld([videoModeC]) #69 01cf e8d5 blt .select#72 1241 bmi('.select#72') #70 Branch when line C is off 01d0 010a ld [$0a] 1242 ld([videoModeB]) #71 Rotate: Off->D->B->C 01d1 c20b st [$0b] 1243 st([videoModeC]) #72 01d2 010c ld [$0c] 1244 ld([videoModeD]) #73 01d3 c20a st [$0a] 1245 st([videoModeB]) #74 01d4 fcda bra .select#77 1246 bra('.select#77') #75 1247 label('.select#72') .select#72: 01d5 00f6 ld $f6 1248 ld('nopixels') #72,76 01d6 000a ld $0a 1249 ld('pixels') #73 Reset: On->D->B->C 01d7 c20b st [$0b] 1250 st([videoModeC]) #74 01d8 c20a st [$0a] 1251 st([videoModeB]) #75 01d9 0200 nop 1252 nop() #76 1253 label('.select#77') .select#77: 01da c20c st [$0c] 1254 st([videoModeD]) #77 01db 0035 ld $35 1255 wait(188-78) #78 Don't waste code space expanding runVcpu here 01dc ecdc bne $01dc 01dd a001 suba $01 01de 0200 nop 1256 # AC==255 now 01df c211 st [$11] 1257 st([buttonState]) #188 1258 bra('vBlankEnd#191') #189 01e0 fcea bra vBlankEnd#191 01e1 0000 ld $00 1259 ld(0) #190 1260 label('.select#70') 1261 1262 # Mitigation of runaway channel variable .select#70: 01e2 0102 ld [$02] 1263 ld([channel]) #70 Normalize channel, for robustness 01e3 2003 anda $03 1264 anda(0b00000011) #71 01e4 c202 st [$02] 1265 st([channel]) #72 Stop wild channel updates 1266 01e5 00ea ld $ea 1267 runVcpu(191-73, '---D line 40') #73 Application cycles (scan line 40) 01e6 c21e st [$1e] 01e7 1505 ld [$05],y 01e8 e0ff jmp y,$ff 01e9 0026 ld $26 1268 1269 # AC==0 now 1270 label('vBlankEnd#191') vBlankEnd#191: 01ea 1401 ld $01,y 1271 ld(videoTop_v5>>8,Y) #191 01eb 09f9 ld [y,$f9] 1272 ld([Y,videoTop_v5]) #192 01ec c209 st [$09] 1273 st([videoY]) #193 01ed c21f st [$1f] 1274 st([frameX]) #194 01ee ecf1 bne $01f1 1275 bne(pc()+3) #195 01ef fcf2 bra $01f2 1276 bra(pc()+3) #196 01f0 0001 ld $01 1277 ld('videoA') #197 01f1 00ec ld $ec 1278 ld('videoF') #197(!) 01f2 c20d st [$0d] 1279 st([nextVideo]) #198 01f3 0102 ld [$02] 1280 ld([channel]) #199 Advance to next sound channel 01f4 2121 anda [$21] 1281 anda([channelMask]) #0 01f5 8001 adda $01 1282 adda(1) #1 01f6 1402 ld $02,y 1283 ld(hi('sound2'),Y) #2 01f7 e0b1 jmp y,$b1 1284 jmp(Y,'sound2') #3 01f8 1880 ld $80,out 1285 ld(syncBits^hSync,OUT) #4 Start horizontal pulse 1286 01f9 0200 nop 1287 fillers(until=0xff) 01fa 0200 nop 01fb 0200 nop * 6 times 1288 1289 #----------------------------------------------------------------------- 1290 # Return point for vCPU slices during visible screen area 1291 #----------------------------------------------------------------------- 1292 1293 assert pc() == 0x1ff # Enables runVcpu() to re-enter into the next page 01ff fcae bra sound3 1294 bra('sound3') #200,0 1295 1296 #----------------------------------------------------------------------- 1297 # 1298 # $0200 ROM page 2: Video loop visible scanlines 1299 # 1300 #----------------------------------------------------------------------- 1301 align(0x100, size=0x100) 0200 0102 ld [$02] 1302 ld([channel]) #1 Advance to next sound channel 1303 1304 # Back porch A: first of 4 repeated scan lines 1305 # - Fetch next Yi and store it for retrieval in the next scan lines 1306 # - Calculate Xi from dXi, but there is no cycle time left to store it as well 1307 label('videoA') videoA: 0201 00ca ld $ca 1308 ld('videoB') #29 1st scanline of 4 (always visible) 0202 c20d st [$0d] 1309 st([nextVideo]) #30 0203 1401 ld $01,y 1310 ld(videoTable>>8,Y) #31 0204 1109 ld [$09],x 1311 ld([videoY],X) #32 0205 0d00 ld [y,x] 1312 ld([Y,X]) #33 0206 de00 st [y,x++] 1313 st([Y,Xpp]) #34 Just X++ 0207 c220 st [$20] 1314 st([frameY]) #35 0208 0d00 ld [y,x] 1315 ld([Y,X]) #36 0209 911f adda [$1f],x 1316 adda([frameX],X) #37 1317 label('pixels') pixels: 020a 1520 ld [$20],y 1318 ld([frameY],Y) #38 020b 00c0 ld $c0 1319 ld(syncBits) #39 1320 1321 # Stream 160 pixels from memory location onwards 1322 # Superimpose the sync signal bits to be robust against misprogramming 1323 for i in range(qqVgaWidth): 020c 5d00 ora [y,x++],out 1324 ora([Y,Xpp],OUT) #40-199 Pixel burst 020d 5d00 ora [y,x++],out 020e 5d00 ora [y,x++],out * 160 times 02ac 18c0 ld $c0,out 1325 ld(syncBits,OUT) #0 Back to black 1326 1327 # Front porch 02ad 0102 ld [$02] 1328 ld([channel]) #1 Advance to next sound channel 1329 label('sound3') # Return from vCPU interpreter sound3: 02ae 2121 anda [$21] 1330 anda([channelMask]) #2 02af 8001 adda $01 1331 adda(1) #3 02b0 1880 ld $80,out 1332 ld(syncBits^hSync,OUT) #4 Start horizontal pulse 1333 1334 # Horizontal sync and sound channel update for scanlines outside vBlank 1335 label('sound2') sound2: 02b1 d602 st [$02],y 1336 st([channel],Y) #5 02b2 007f ld $7f 1337 ld(0x7f) #6 02b3 29fe anda [y,$fe] 1338 anda([Y,oscL]) #7 02b4 89fc adda [y,$fc] 1339 adda([Y,keyL]) #8 02b5 cafe st [y,$fe] 1340 st([Y,oscL]) #9 02b6 3080 anda $80,x 1341 anda(0x80,X) #10 02b7 0500 ld [x] 1342 ld([X]) #11 02b8 89ff adda [y,$ff] 1343 adda([Y,oscH]) #12 02b9 89fd adda [y,$fd] 1344 adda([Y,keyH]) #13 02ba caff st [y,$ff] 1345 st([Y,oscH] ) #14 02bb 20fc anda $fc 1346 anda(0xfc) #15 02bc 69fb xora [y,$fb] 1347 xora([Y,wavX]) #16 02bd 1200 ld ac,x 1348 ld(AC,X) #17 02be 09fa ld [y,$fa] 1349 ld([Y,wavA]) #18 02bf 1407 ld $07,y 1350 ld(soundTable>>8,Y) #19 02c0 8d00 adda [y,x] 1351 adda([Y,X]) #20 02c1 e8c4 blt $02c4 1352 bmi(pc()+3) #21 02c2 fcc5 bra $02c5 1353 bra(pc()+3) #22 02c3 203f anda $3f 1354 anda(63) #23 02c4 003f ld $3f 1355 ld(63) #23(!) 02c5 8103 adda [$03] 1356 adda([sample]) #24 02c6 c203 st [$03] 1357 st([sample]) #25 1358 02c7 0113 ld [$13] 1359 ld([xout]) #26 Gets copied to XOUT 02c8 fd0d bra [$0d] 1360 bra([nextVideo]) #27 02c9 18c0 ld $c0,out 1361 ld(syncBits,OUT) #28 End horizontal pulse 1362 1363 # Back porch B: second of 4 repeated scan lines 1364 # - Recompute Xi from dXi and store for retrieval in the next scan lines 1365 label('videoB') videoB: 02ca 00d3 ld $d3 1366 ld('videoC') #29 2nd scanline of 4 02cb c20d st [$0d] 1367 st([nextVideo]) #30 02cc 1401 ld $01,y 1368 ld(videoTable>>8,Y) #31 02cd 0109 ld [$09] 1369 ld([videoY]) #32 02ce 9001 adda $01,x 1370 adda(1,X) #33 02cf 011f ld [$1f] 1371 ld([frameX]) #34 02d0 8d00 adda [y,x] 1372 adda([Y,X]) #35 02d1 fd0a bra [$0a] 1373 bra([videoModeB]) #36 02d2 d21f st [$1f],x 1374 st([frameX],X) #37 Store in RAM and X 1375 1376 # Back porch C: third of 4 repeated scan lines 1377 # - Nothing new to for video do as Yi and Xi are known, 1378 # - This is the time to emit and reset the next sound sample 1379 label('videoC') videoC: 02d3 00dc ld $dc 1380 ld('videoD') #29 3rd scanline of 4 02d4 c20d st [$0d] 1381 st([nextVideo]) #30 02d5 0103 ld [$03] 1382 ld([sample]) #31 New sound sample is ready (didn't fit in the audio loop) 02d6 400f ora $0f 1383 ora(0x0f) #32 02d7 2114 anda [$14] 1384 anda([xoutMask]) #33 02d8 c213 st [$13] 1385 st([xout]) #34 Update [xout] with new sample (4 channels just updated) 02d9 c003 st $03,[$03] 1386 st(sample, [sample]) #35 Reset for next sample 02da fd0b bra [$0b] 1387 bra([videoModeC]) #36 02db 111f ld [$1f],x 1388 ld([frameX],X) #37 1389 1390 # Back porch D: last of 4 repeated scan lines 1391 # - Calculate the next frame index 1392 # - Decide if this is the last line or not 1393 label('videoD') # Default video mode videoD: 02dc 111f ld [$1f],x 1394 ld([frameX], X) #29 4th scanline of 4 02dd 0109 ld [$09] 1395 ld([videoY]) #30 02de a0ee suba $ee 1396 suba((120-1)*2) #31 1397 beq('.lastpixels#34') #32 02df f0e5 beq .lastpixels#34 02e0 80f0 adda $f0 1398 adda(120*2) #33 More pixel lines to go 02e1 c209 st [$09] 1399 st([videoY]) #34 02e2 0001 ld $01 1400 ld('videoA') #35 02e3 fd0c bra [$0c] 1401 bra([videoModeD]) #36 02e4 c20d st [$0d] 1402 st([nextVideo]) #37 1403 1404 label('.lastpixels#34') 1405 if soundDiscontinuity == 1: .lastpixels#34: 02e5 c003 st $03,[$03] 1406 st(sample, [sample]) #34 Sound continuity 1407 else: 1408 nop() #34 02e6 00e9 ld $e9 1409 ld('videoE') #35 No more pixel lines to go 02e7 fd0c bra [$0c] 1410 bra([videoModeD]) #36 02e8 c20d st [$0d] 1411 st([nextVideo]) #37 1412 1413 # Back porch "E": after the last line 1414 # - Go back and and enter vertical blank (program page 2) 1415 label('videoE') # Exit visible area videoE: 02e9 1401 ld $01,y 1416 ld(hi('vBlankStart'),Y) #29 Return to vertical blank interval 02ea e004 jmp y,$04 1417 jmp(Y,'vBlankStart') #30 02eb 00c0 ld $c0 1418 ld(syncBits) #31 1419 1420 # Video mode that blacks out one or more pixel lines from the top of screen. 1421 # This yields some speed, but also frees up screen memory for other purposes. 1422 # Note: Sound output becomes choppier the more pixel lines are skipped 1423 # Note: The vertical blank driver leaves 0x80 behind in [videoSync1] 1424 label('videoF') videoF: 02ec 0120 ld [$20] 1425 ld([videoSync1]) #29 Completely black pixel line 02ed 8080 adda $80 1426 adda(0x80) #30 02ee d220 st [$20],x 1427 st([videoSync1],X) #31 02ef 011f ld [$1f] 1428 ld([frameX]) #32 02f0 a500 suba [x] 1429 suba([X]) #33 Decrements every two VGA scanlines 02f1 f0f4 beq .videoF#36 1430 beq('.videoF#36') #34 02f2 c21f st [$1f] 1431 st([frameX]) #35 02f3 fcf6 bra nopixels 1432 bra('nopixels') #36 1433 label('.videoF#36') .videoF#36: 02f4 0001 ld $01 1434 ld('videoA') #36,37 Transfer to visible screen area 02f5 c20d st [$0d] 1435 st([nextVideo]) #37 1436 # 1437 # Alternative for pixel burst: faster application mode 1438 label('nopixels') 1439 runVcpu(200-38, 'ABCD line 40-520', nopixels: 02f6 00ff ld $ff 1440 returnTo=0x1ff) #38 Application interpreter (black scanlines) 02f7 c21e st [$1e] 02f8 1505 ld [$05],y 02f9 e0ff jmp y,$ff 02fa 003c ld $3c 1441 1442 #----------------------------------------------------------------------- 1443 # 1444 # $0300 ROM page 3: Application interpreter primary page 1445 # 1446 #----------------------------------------------------------------------- 1447 1448 # Enter the timing-aware application interpreter (aka virtual CPU, vCPU) 1449 # 1450 # This routine will execute as many as possible instructions in the 1451 # allotted time. When time runs out, it synchronizes such that the total 1452 # duration matches the caller's request. Durations are counted in `ticks', 1453 # which are multiples of 2 clock cycles. 1454 # 1455 # Synopsis: Use the runVcpu() macro as entry point 1456 1457 # We let 'ENTER' begin one word before the page boundary, for a bit extra 1458 # precious space in the packed interpreter code page. Although ENTER's 1459 # first instruction is bra() which normally doesn't cross page boundaries, 1460 # in this case it will still jump into the right space, because branches 1461 # from $xxFF land in the next page anyway. 1462 while pc()&255 < 255: 02fb 0200 nop 1463 nop() 02fc 0200 nop 02fd 0200 nop 02fe 0200 nop 1464 label('ENTER') ENTER: 02ff fc03 bra .next2 1465 bra('.next2') #0 Enter at '.next2' (so no startup overhead) 1466 # --- Page boundary --- 1467 align(0x100,size=0x100) 1468 label('NEXTY') # Alternative for REENTER NEXTY: 0300 1517 ld [$17],y 1469 ld([vPC+1],Y) #1 1470 1471 # Fetch next instruction and execute it, but only if there are sufficient 1472 # ticks left for the slowest instruction. 1473 label('NEXT') NEXT: 0301 8115 adda [$15] 1474 adda([vTicks]) #0 Track elapsed ticks (actually counting down: AC<0) 0302 e80b blt EXIT 1475 blt('EXIT') #1 Escape near time out 1476 label('.next2') .next2: 0303 c215 st [$15] 1477 st([vTicks]) #2 0304 0116 ld [$16] 1478 ld([vPC]) #3 Advance vPC 0305 8002 adda $02 1479 adda(2) #4 0306 d216 st [$16],x 1480 st([vPC],X) #5 0307 0d00 ld [y,x] 1481 ld([Y,X]) #6 Fetch opcode (actually a branch target) 0308 de00 st [y,x++] 1482 st([Y,Xpp]) #7 Just X++ 0309 fe00 bra ac 1483 bra(AC) #8 Dispatch 030a 0d00 ld [y,x] 1484 ld([Y,X]) #9 Prefetch operand 1485 1486 # Resync with video driver and transfer control 1487 label('EXIT') EXIT: 030b 800e adda $0e 1488 adda(maxTicks) #3 1489 label('RESYNC') RESYNC: 030c e40c bgt RESYNC 1490 bgt(pc()&255) #4 Resync 030d a001 suba $01 1491 suba(1) #5 030e 1401 ld $01,y 1492 ld(hi('vBlankStart'),Y) #6 030f e11e jmp y,[$1e] 1493 jmp(Y,[vReturn]) #7 To video driver 0310 0000 ld $00 1494 ld(0) #8 AC should be 0 already. Still.. 1495 assert vCPU_overhead == 9 1496 1497 # Instruction LDWI: Load immediate word constant (vAC=D), 20 cycles 1498 label('LDWI') LDWI: 0311 c218 st [$18] 1499 st([vAC]) #10 0312 de00 st [y,x++] 1500 st([Y,Xpp]) #11 Just X++ 0313 0d00 ld [y,x] 1501 ld([Y,X]) #12 Fetch second operand 0314 c219 st [$19] 1502 st([vAC+1]) #13 0315 0116 ld [$16] 1503 ld([vPC]) #14 Advance vPC one more 0316 8001 adda $01 1504 adda(1) #15 0317 c216 st [$16] 1505 st([vPC]) #16 0318 00f6 ld $f6 1506 ld(-20/2) #17 0319 fc01 bra NEXT 1507 bra('NEXT') #18 1508 #dummy() #19 Overlap 1509 # 1510 # Instruction LD: Load byte from zero page (vAC=[D]), 22 cycles 1511 label('LD') LD: 031a 1200 ld ac,x 1512 ld(AC,X) #10,19 031b 0500 ld [x] 1513 ld([X]) #11 031c 1404 ld $04,y 1514 ld(hi('ld#15'),Y) #12 031d e013 jmp y,$13 1515 jmp(Y,'ld#15') #13 031e c218 st [$18] 1516 st([vAC]) #14 1517 1518 # Instruction CMPHS: Adjust high byte for signed compare (vACH=XXX), 28 cycles 1519 label('CMPHS_v5') CMPHS_v5: 031f 140b ld $0b,y 1520 ld(hi('cmphs#13'),Y) #10 0320 e0bc jmp y,$bc 1521 jmp(Y,'cmphs#13') #11 1522 #ld(AC,X) #12 Overlap 1523 # 1524 # Instruction LDW: Load word from zero page (vAC=[D]+256*[D+1]), 20 cycles 1525 label('LDW') LDW: 0321 1200 ld ac,x 1526 ld(AC,X) #10,12 0322 8001 adda $01 1527 adda(1) #11 0323 c21d st [$1d] 1528 st([vTmp]) #12 Address of high byte 0324 0500 ld [x] 1529 ld([X]) #13 0325 c218 st [$18] 1530 st([vAC]) #14 0326 111d ld [$1d],x 1531 ld([vTmp],X) #15 0327 0500 ld [x] 1532 ld([X]) #16 0328 c219 st [$19] 1533 st([vAC+1]) #17 0329 fc01 bra NEXT 1534 bra('NEXT') #18 032a 00f6 ld $f6 1535 ld(-20/2) #19 1536 1537 # Instruction STW: Store word in zero page ([D],[D+1]=vAC&255,vAC>>8), 20 cycles 1538 label('STW') STW: 032b 1200 ld ac,x 1539 ld(AC,X) #10,20 032c 8001 adda $01 1540 adda(1) #11 032d c21d st [$1d] 1541 st([vTmp]) #12 Address of high byte 032e 0118 ld [$18] 1542 ld([vAC]) #13 032f c600 st [x] 1543 st([X]) #14 0330 111d ld [$1d],x 1544 ld([vTmp],X) #15 0331 0119 ld [$19] 1545 ld([vAC+1]) #16 0332 c600 st [x] 1546 st([X]) #17 0333 fc01 bra NEXT 1547 bra('NEXT') #18 0334 00f6 ld $f6 1548 ld(-20/2) #19 1549 1550 # Instruction BCC: Test AC sign and branch conditionally, 28 cycles 1551 label('BCC') BCC: 0335 0119 ld [$19] 1552 ld([vAC+1]) #10 First inspect high byte of vAC 0336 ec40 bne .bcc#13 1553 bne('.bcc#13') #11 0337 c21d st [$1d] 1554 st([vTmp]) #12 0338 0118 ld [$18] 1555 ld([vAC]) #13 Additionally inspect low byte of vAC 0339 f043 beq .bcc#16 1556 beq('.bcc#16') #14 033a 0001 ld $01 1557 ld(1) #15 033b c21d st [$1d] 1558 st([vTmp]) #16 033c 0d00 ld [y,x] 1559 ld([Y,X]) #17 Operand is the conditional 1560 label('.bcc#18') .bcc#18: 033d fe00 bra ac 1561 bra(AC) #18 033e 011d ld [$1d] 1562 ld([vTmp]) #19 1563 1564 # Conditional EQ: Branch if zero (if(vACL==0)vPCL=D) 1565 label('EQ') EQ: 033f ec45 bne .bcc#22 1566 bne('.bcc#22') #20 1567 label('.bcc#13') .bcc#13: 0340 f048 beq .bcc#23 1568 beq('.bcc#23') #21,13 AC=0 in EQ, AC!=0 from BCC... Overlap with BCC 0341 0d00 ld [y,x] 1569 ld([Y,X]) #22,14 Overlap with BCC 1570 # 1571 # (continue BCC) 1572 #label('.bcc#13') 1573 #dummy() #13 1574 #dummy() #14 0342 0200 nop 1575 nop() #15 1576 label('.bcc#16') .bcc#16: 0343 fc3d bra .bcc#18 1577 bra('.bcc#18') #16 0344 0d00 ld [y,x] 1578 ld([Y,X]) #17 Operand is the conditional 1579 label('.bcc#22') .bcc#22: 0345 0116 ld [$16] 1580 ld([vPC]) #22 False condition 0346 fc4a bra .bcc#25 1581 bra('.bcc#25') #23 0347 8001 adda $01 1582 adda(1) #24 1583 label('.bcc#23') .bcc#23: 0348 de00 st [y,x++] 1584 st([Y,Xpp]) #23 Just X++ True condition 0349 0d00 ld [y,x] 1585 ld([Y,X]) #24 1586 label('.bcc#25') .bcc#25: 034a c216 st [$16] 1587 st([vPC]) #25 034b fc01 bra NEXT 1588 bra('NEXT') #26 034c 00f2 ld $f2 1589 ld(-28/2) #27 1590 1591 # Conditional GT: Branch if positive (if(vACL>0)vPCL=D) 1592 label('GT') GT: 034d f845 ble .bcc#22 1593 ble('.bcc#22') #20 034e e448 bgt .bcc#23 1594 bgt('.bcc#23') #21 034f 0d00 ld [y,x] 1595 ld([Y,X]) #22 1596 1597 # Conditional LT: Branch if negative (if(vACL<0)vPCL=D) 1598 label('LT') LT: 0350 f445 bge .bcc#22 1599 bge('.bcc#22') #20 0351 e848 blt .bcc#23 1600 blt('.bcc#23') #21 0352 0d00 ld [y,x] 1601 ld([Y,X]) #22 1602 1603 # Conditional GE: Branch if positive or zero (if(vACL>=0)vPCL=D) 1604 label('GE') GE: 0353 e845 blt .bcc#22 1605 blt('.bcc#22') #20 0354 f448 bge .bcc#23 1606 bge('.bcc#23') #21 0355 0d00 ld [y,x] 1607 ld([Y,X]) #22 1608 1609 # Conditional LE: Branch if negative or zero (if(vACL<=0)vPCL=D) 1610 label('LE') LE: 0356 e445 bgt .bcc#22 1611 bgt('.bcc#22') #20 0357 f848 ble .bcc#23 1612 ble('.bcc#23') #21 0358 0d00 ld [y,x] 1613 ld([Y,X]) #22 1614 1615 # Instruction LDI: Load immediate small positive constant (vAC=D), 16 cycles 1616 label('LDI') LDI: 0359 c218 st [$18] 1617 st([vAC]) #10 035a 0000 ld $00 1618 ld(0) #11 035b c219 st [$19] 1619 st([vAC+1]) #12 035c fc00 bra NEXTY 1620 bra('NEXTY') #13 035d 00f8 ld $f8 1621 ld(-16/2) #14 1622 1623 # Instruction ST: Store byte in zero page ([D]=vAC&255), 16 cycles 1624 label('ST') ST: 035e 1200 ld ac,x 1625 ld(AC,X) #10,15 035f 0118 ld [$18] 1626 ld([vAC]) #11 0360 c600 st [x] 1627 st([X]) #12 0361 fc00 bra NEXTY 1628 bra('NEXTY') #13 0362 00f8 ld $f8 1629 ld(-16/2) #14 1630 1631 # Instruction POP: Pop address from stack (vLR,vSP==[vSP]+256*[vSP+1],vSP+2), 26 cycles 1632 label('POP') POP: 0363 111c ld [$1c],x 1633 ld([vSP],X) #10,15 0364 0500 ld [x] 1634 ld([X]) #11 0365 c21a st [$1a] 1635 st([vLR]) #12 0366 011c ld [$1c] 1636 ld([vSP]) #13 0367 9001 adda $01,x 1637 adda(1,X) #14 0368 0500 ld [x] 1638 ld([X]) #15 0369 c21b st [$1b] 1639 st([vLR+1]) #16 036a 011c ld [$1c] 1640 ld([vSP]) #17 036b 8002 adda $02 1641 adda(2) #18 036c c21c st [$1c] 1642 st([vSP]) #19 1643 label('.pop#20') .pop#20: 036d 0116 ld [$16] 1644 ld([vPC]) #20 036e a001 suba $01 1645 suba(1) #21 036f c216 st [$16] 1646 st([vPC]) #22 0370 fc00 bra NEXTY 1647 bra('NEXTY') #23 0371 00f3 ld $f3 1648 ld(-26/2) #24 1649 1650 # Conditional NE: Branch if not zero (if(vACL!=0)vPCL=D) 1651 label('NE') NE: 0372 f045 beq .bcc#22 1652 beq('.bcc#22') #20,25 0373 ec48 bne .bcc#23 1653 bne('.bcc#23') #21 0374 0d00 ld [y,x] 1654 ld([Y,X]) #22 1655 1656 # Instruction PUSH: Push vLR on stack ([vSP-2],v[vSP-1],vSP=vLR&255,vLR>>8,vLR-2), 26 cycles 1657 label('PUSH') PUSH: 0375 011c ld [$1c] 1658 ld([vSP]) #10 0376 b001 suba $01,x 1659 suba(1,X) #11 0377 011b ld [$1b] 1660 ld([vLR+1]) #12 0378 c600 st [x] 1661 st([X]) #13 0379 011c ld [$1c] 1662 ld([vSP]) #14 037a a002 suba $02 1663 suba(2) #15 037b d21c st [$1c],x 1664 st([vSP],X) #16 037c 011a ld [$1a] 1665 ld([vLR]) #17 037d fc6d bra .pop#20 1666 bra('.pop#20') #18 037e c600 st [x] 1667 st([X]) #19 1668 1669 # Instruction LUP: ROM lookup (vAC=ROM[vAC+D]), 26 cycles 1670 label('LUP') LUP: 037f 1519 ld [$19],y 1671 ld([vAC+1],Y) #10 0380 e0fb jmp y,$fb 1672 jmp(Y,251) #11 Trampoline offset 0381 8118 adda [$18] 1673 adda([vAC]) #12 1674 1675 # Instruction ANDI: Logical-AND with small constant (vAC&=D), 22 cycles 1676 label('ANDI') ANDI: 0382 1404 ld $04,y 1677 ld(hi('andi#13'),Y) #10 0383 e011 jmp y,$11 1678 jmp(Y,'andi#13') #11 0384 2118 anda [$18] 1679 anda([vAC]) #12 1680 1681 # Instruction CALLI: Goto immediate address and remember vPC (vLR,vPC=vPC+3,$HHLL-2), 28 cycles 1682 label('CALLI_v5') CALLI_v5: 0385 140b ld $0b,y 1683 ld(hi('calli#13'),Y) #10 0386 e0b0 jmp y,$b0 1684 jmp(Y,'calli#13') #11 0387 0116 ld [$16] 1685 ld([vPC]) #12 1686 1687 # Instruction ORI: Logical-OR with small constant (vAC|=D), 14 cycles 1688 label('ORI') ORI: 0388 4118 ora [$18] 1689 ora([vAC]) #10 0389 c218 st [$18] 1690 st([vAC]) #11 038a fc01 bra NEXT 1691 bra('NEXT') #12 038b 00f9 ld $f9 1692 ld(-14/2) #13 1693 1694 # Instruction XORI: Logical-XOR with small constant (vAC^=D), 14 cycles 1695 label('XORI') XORI: 038c 6118 xora [$18] 1696 xora([vAC]) #10 038d c218 st [$18] 1697 st([vAC]) #11 038e fc01 bra NEXT 1698 bra('NEXT') #12 038f 00f9 ld $f9 1699 ld(-14/2) #13 1700 1701 # Instruction BRA: Branch unconditionally (vPC=(vPC&0xff00)+D), 14 cycles 1702 label('BRA') BRA: 0390 c216 st [$16] 1703 st([vPC]) #10 0391 fc00 bra NEXTY 1704 bra('NEXTY') #11 0392 00f9 ld $f9 1705 ld(-14/2) #12 1706 1707 # Instruction INC: Increment zero page byte ([D]++), 20 cycles 1708 label('INC') INC: 0393 1200 ld ac,x 1709 ld(AC,X) #10,13 0394 1404 ld $04,y 1710 ld(hi('inc#14'),Y) #11 0395 e0e4 jmp y,$e4 1711 jmp(Y,'inc#14') #12 0396 0001 ld $01 1712 ld(1) #13 1713 1714 # Instruction CMPHU: Adjust high byte for unsigned compare (vACH=XXX), 28 cycles 1715 label('CMPHU_v5') CMPHU_v5: 0397 140b ld $0b,y 1716 ld(hi('cmphu#13'),Y) #10 0398 e0c8 jmp y,$c8 1717 jmp(Y,'cmphu#13') #11 1718 #ld(AC,X) #12 Overlap 1719 # 1720 # Instruction ADDW: Word addition with zero page (vAC+=[D]+256*[D+1]), 28 cycles 1721 label('ADDW') 1722 # The non-carry paths could be 26 cycles at the expense of (much) more code. 1723 # But a smaller size is better so more instructions fit in this code page. 1724 # 28 cycles is still 4.5 usec. The 6502 equivalent takes 20 cycles or 20 usec. ADDW: 0399 1200 ld ac,x 1725 ld(AC,X) #10,12 Address of low byte to be added 039a 8001 adda $01 1726 adda(1) #11 039b c21d st [$1d] 1727 st([vTmp]) #12 Address of high byte to be added 039c 0118 ld [$18] 1728 ld([vAC]) #13 Add the low bytes 039d 8500 adda [x] 1729 adda([X]) #14 039e c218 st [$18] 1730 st([vAC]) #15 Store low result 039f e8a3 blt .addw#18 1731 bmi('.addw#18') #16 Now figure out if there was a carry 03a0 a500 suba [x] 1732 suba([X]) #17 Gets back the initial value of vAC 03a1 fca5 bra .addw#20 1733 bra('.addw#20') #18 03a2 4500 ora [x] 1734 ora([X]) #19 Carry in bit 7 1735 label('.addw#18') .addw#18: 03a3 2500 anda [x] 1736 anda([X]) #18 Carry in bit 7 03a4 0200 nop 1737 nop() #19 1738 label('.addw#20') .addw#20: 03a5 3080 anda $80,x 1739 anda(0x80,X) #20 Move carry to bit 0 03a6 0500 ld [x] 1740 ld([X]) #21 03a7 8119 adda [$19] 1741 adda([vAC+1]) #22 Add the high bytes with carry 03a8 111d ld [$1d],x 1742 ld([vTmp],X) #23 03a9 8500 adda [x] 1743 adda([X]) #24 03aa c219 st [$19] 1744 st([vAC+1]) #25 Store high result 03ab fc01 bra NEXT 1745 bra('NEXT') #26 03ac 00f2 ld $f2 1746 ld(-28/2) #27 1747 1748 # Instruction PEEK: Read byte from memory (vAC=[vAC]), 26 cycles 1749 label('PEEK') PEEK: 03ad 1404 ld $04,y 1750 ld(hi('peek'),Y) #10 03ae e062 jmp y,$62 1751 jmp(Y,'peek') #11 1752 #ld([vPC]) #12 Overlap 1753 # 1754 # Instruction SYS: Native call, <=256 cycles (<=128 ticks, in reality less) 1755 # 1756 # The 'SYS' vCPU instruction first checks the number of desired ticks given by 1757 # the operand. As long as there are insufficient ticks available in the current 1758 # time slice, the instruction will be retried. This will effectively wait for 1759 # the next scan line if the current slice is almost out of time. Then a jump to 1760 # native code is made. This code can do whatever it wants, but it must return 1761 # to the 'REENTER' label when done. When returning, AC must hold (the negative 1762 # of) the actual consumed number of whole ticks for the entire virtual 1763 # instruction cycle (from NEXT to NEXT). This duration may not exceed the prior 1764 # declared duration in the operand + 28 (or maxTicks). The operand specifies the 1765 # (negative) of the maximum number of *extra* ticks that the native call will 1766 # need. The GCL compiler automatically makes this calculation from gross number 1767 # of cycles to excess number of ticks. 1768 # SYS functions can modify vPC to implement repetition. For example to split 1769 # up work into multiple chucks. 1770 label('.sys#13') .sys#13: 03af 0116 ld [$16] 1771 ld([vPC]) #13,12 Retry until sufficient time 03b0 a002 suba $02 1772 suba(2) #14 03b1 c216 st [$16] 1773 st([vPC]) #15 03b2 fccb bra REENTER 1774 bra('REENTER') #16 03b3 00f6 ld $f6 1775 ld(-20/2) #17 1776 label('SYS') SYS: 03b4 8115 adda [$15] 1777 adda([vTicks]) #10 03b5 e8af blt .sys#13 1778 blt('.sys#13') #11 03b6 1523 ld [$23],y 1779 ld([sysFn+1],Y) #12 03b7 e122 jmp y,[$22] 1780 jmp(Y,[sysFn]) #13 1781 #dummy() #14 Overlap 1782 # 1783 # Instruction SUBW: Word subtract with zero page (AC-=[D]+256*[D+1]), 28 cycles 1784 # All cases can be done in 26 cycles, but the code will become much larger 1785 label('SUBW') SUBW: 03b8 1200 ld ac,x 1786 ld(AC,X) #10,14 Address of low byte to be subtracted 03b9 8001 adda $01 1787 adda(1) #11 03ba c21d st [$1d] 1788 st([vTmp]) #12 Address of high byte to be subtracted 03bb 0118 ld [$18] 1789 ld([vAC]) #13 03bc e8c1 blt .subw#16 1790 bmi('.subw#16') #14 03bd a500 suba [x] 1791 suba([X]) #15 03be c218 st [$18] 1792 st([vAC]) #16 Store low result 03bf fcc4 bra .subw#19 1793 bra('.subw#19') #17 03c0 4500 ora [x] 1794 ora([X]) #18 Carry in bit 7 1795 label('.subw#16') .subw#16: 03c1 c218 st [$18] 1796 st([vAC]) #16 Store low result 03c2 2500 anda [x] 1797 anda([X]) #17 Carry in bit 7 03c3 0200 nop 1798 nop() #18 1799 label('.subw#19') .subw#19: 03c4 3080 anda $80,x 1800 anda(0x80,X) #19 Move carry to bit 0 03c5 0119 ld [$19] 1801 ld([vAC+1]) #20 03c6 a500 suba [x] 1802 suba([X]) #21 03c7 111d ld [$1d],x 1803 ld([vTmp],X) #22 03c8 a500 suba [x] 1804 suba([X]) #23 03c9 c219 st [$19] 1805 st([vAC+1]) #24 1806 label('REENTER_28') REENTER_28: 03ca 00f2 ld $f2 1807 ld(-28/2) #25 1808 label('REENTER') REENTER: 03cb fc01 bra NEXT 1809 bra('NEXT') #26 Return from SYS calls 03cc 1517 ld [$17],y 1810 ld([vPC+1],Y) #27 1811 1812 # Instruction DEF: Define data or code (vAC,vPC=vPC+2,(vPC&0xff00)+D), 24 cycles 1813 label('DEF') DEF: 03cd 1404 ld $04,y 1814 ld(hi('def#13'),Y) #10 03ce e007 jmp y,$07 1815 jmp(Y,'def#13') #11 1816 #st([vTmp]) #12 Overlap 1817 # 1818 # Instruction CALL: Goto address and remember vPC (vLR,vPC=vPC+2,[D]+256*[D+1]-2), 26 cycles 1819 label('CALL') CALL: 03cf c21d st [$1d] 1820 st([vTmp]) #10,12 03d0 0116 ld [$16] 1821 ld([vPC]) #11 03d1 8002 adda $02 1822 adda(2) #12 Point to instruction after CALL 03d2 c21a st [$1a] 1823 st([vLR]) #13 03d3 0117 ld [$17] 1824 ld([vPC+1]) #14 03d4 c21b st [$1b] 1825 st([vLR+1]) #15 03d5 111d ld [$1d],x 1826 ld([vTmp],X) #16 03d6 0500 ld [x] 1827 ld([X]) #17 03d7 a002 suba $02 1828 suba(2) #18 Because NEXT will add 2 03d8 c216 st [$16] 1829 st([vPC]) #19 03d9 011d ld [$1d] 1830 ld([vTmp]) #20 03da 9001 adda $01,x 1831 adda(1,X) #21 03db 0500 ld [x] 1832 ld([X]) #22 03dc d617 st [$17],y 1833 st([vPC+1],Y) #23 03dd fc01 bra NEXT 1834 bra('NEXT') #24 03de 00f3 ld $f3 1835 ld(-26/2) #25 1836 1837 # Instruction ALLOC: Create or destroy stack frame (vSP+=D), 14 cycles 1838 label('ALLOC') ALLOC: 03df 811c adda [$1c] 1839 adda([vSP]) #10 03e0 c21c st [$1c] 1840 st([vSP]) #11 03e1 fc01 bra NEXT 1841 bra('NEXT') #12 03e2 00f9 ld $f9 1842 ld(-14/2) #13 1843 1844 # The instructions below are all implemented in the second code page. Jumping 1845 # back and forth makes each 6 cycles slower, but it also saves space in the 1846 # primary page for the instructions above. Most of them are in fact not very 1847 # critical, as evidenced by the fact that they weren't needed for the first 1848 # Gigatron applications (Snake, Racer, Mandelbrot, Loader). By providing them 1849 # in this way, at least they don't need to be implemented as a SYS extension. 1850 1851 # Instruction ADDI: Add small positive constant (vAC+=D), 28 cycles 1852 label('ADDI') ADDI: 03e3 1404 ld $04,y 1853 ld(hi('addi'),Y) #10 03e4 e018 jmp y,$18 1854 jmp(Y,'addi') #11 03e5 c21d st [$1d] 1855 st([vTmp]) #12 1856 1857 # Instruction SUBI: Subtract small positive constant (vAC+=D), 28 cycles 1858 label('SUBI') SUBI: 03e6 1404 ld $04,y 1859 ld(hi('subi'),Y) #10 03e7 e026 jmp y,$26 1860 jmp(Y,'subi') #11 03e8 c21d st [$1d] 1861 st([vTmp]) #12 1862 1863 # Instruction LSLW: Logical shift left (vAC<<=1), 28 cycles 1864 # Useful, because ADDW can't add vAC to itself. Also more compact. 1865 label('LSLW') LSLW: 03e9 1404 ld $04,y 1866 ld(hi('lslw'),Y) #10 03ea e035 jmp y,$35 1867 jmp(Y,'lslw') #11 03eb 0118 ld [$18] 1868 ld([vAC]) #12 1869 1870 # Instruction STLW: Store word in stack frame ([vSP+D],[vSP+D+1]=vAC&255,vAC>>8), 26 cycles 1871 label('STLW') STLW: 03ec 1404 ld $04,y 1872 ld(hi('stlw'),Y) #10 03ed e041 jmp y,$41 1873 jmp(Y,'stlw') #11 1874 #dummy() #12 Overlap 1875 # 1876 # Instruction LDLW: Load word from stack frame (vAC=[vSP+D]+256*[vSP+D+1]), 26 cycles 1877 label('LDLW') LDLW: 03ee 1404 ld $04,y 1878 ld(hi('ldlw'),Y) #10,12 03ef e04c jmp y,$4c 1879 jmp(Y,'ldlw') #11 1880 #dummy() #12 Overlap 1881 # 1882 # Instruction POKE: Write byte in memory ([[D+1],[D]]=vAC&255), 28 cycles 1883 label('POKE') POKE: 03f0 1404 ld $04,y 1884 ld(hi('poke'),Y) #10,12 03f1 e057 jmp y,$57 1885 jmp(Y,'poke') #11 03f2 c21d st [$1d] 1886 st([vTmp]) #12 1887 1888 # Instruction DOKE: Write word in memory ([[D+1],[D]],[[D+1],[D]+1]=vAC&255,vAC>>8), 28 cycles 1889 label('DOKE') DOKE: 03f3 1404 ld $04,y 1890 ld(hi('doke'),Y) #10 03f4 e06d jmp y,$6d 1891 jmp(Y,'doke') #11 03f5 c21d st [$1d] 1892 st([vTmp]) #12 1893 1894 # Instruction DEEK: Read word from memory (vAC=[vAC]+256*[vAC+1]), 28 cycles 1895 label('DEEK') DEEK: 03f6 1404 ld $04,y 1896 ld(hi('deek'),Y) #10 03f7 e07a jmp y,$7a 1897 jmp(Y,'deek') #11 1898 #dummy() #12 Overlap 1899 # 1900 # Instruction ANDW: Word logical-AND with zero page (vAC&=[D]+256*[D+1]), 28 cycles 1901 label('ANDW') ANDW: 03f8 1404 ld $04,y 1902 ld(hi('andw'),Y) #10,12 03f9 e086 jmp y,$86 1903 jmp(Y,'andw') #11 1904 #dummy() #12 Overlap 1905 # 1906 # Instruction ORW: Word logical-OR with zero page (vAC|=[D]+256*[D+1]), 28 cycles 1907 label('ORW') ORW: 03fa 1404 ld $04,y 1908 ld(hi('orw'),Y) #10,12 03fb e091 jmp y,$91 1909 jmp(Y,'orw') #11 1910 #dummy() #12 Overlap 1911 # 1912 # Instruction XORW: Word logical-XOR with zero page (vAC^=[D]+256*[D+1]), 26 cycles 1913 label('XORW') XORW: 03fc 1404 ld $04,y 1914 ld(hi('xorw'),Y) #10,12 03fd e09c jmp y,$9c 1915 jmp(Y,'xorw') #11 03fe c21d st [$1d] 1916 st([vTmp]) #12 1917 # We keep XORW 2 cycles faster than ANDW/ORW, because that 1918 # can be useful for comparing numbers for equality a tiny 1919 # bit faster than with SUBW 1920 1921 # Instruction RET: Function return (vPC=vLR-2), 16 cycles 1922 label('RET') RET: 03ff 011a ld [$1a] 1923 ld([vLR]) #10 1924 assert pc()&255 == 0 1925 1926 #----------------------------------------------------------------------- 1927 # 1928 # $0400 ROM page 4: Application interpreter extension 1929 # 1930 #----------------------------------------------------------------------- 1931 align(0x100, size=0x100) 1932 1933 # (Continue RET) 0400 a002 suba $02 1934 suba(2) #11 0401 c216 st [$16] 1935 st([vPC]) #12 0402 011b ld [$1b] 1936 ld([vLR+1]) #13 0403 c217 st [$17] 1937 st([vPC+1]) #14 0404 1403 ld $03,y 1938 ld(hi('REENTER'),Y) #15 0405 e0cb jmp y,$cb 1939 jmp(Y,'REENTER') #16 0406 00f6 ld $f6 1940 ld(-20/2) #17 1941 1942 # DEF implementation 1943 label('def#13') def#13: 0407 0116 ld [$16] 1944 ld([vPC]) #13 0408 8002 adda $02 1945 adda(2) #14 0409 c218 st [$18] 1946 st([vAC]) #15 040a 0117 ld [$17] 1947 ld([vPC+1]) #16 040b c219 st [$19] 1948 st([vAC+1]) #17 040c 011d ld [$1d] 1949 ld([vTmp]) #18 040d c216 st [$16] 1950 st([vPC]) #19 040e 1403 ld $03,y 1951 ld(hi('NEXTY'),Y) #20 040f e000 jmp y,$00 1952 jmp(Y,'NEXTY') #21 0410 00f4 ld $f4 1953 ld(-24/2) #22 1954 1955 # Clear vACH (continuation of ANDI and LD instructions) 1956 label('andi#13') andi#13: 0411 0200 nop 1957 nop() #13 0412 c218 st [$18] 1958 st([vAC]) #14 1959 # 1960 label('ld#15') ld#15: 0413 0000 ld $00 1961 ld(0) #15 Clear high byte 0414 c219 st [$19] 1962 st([vAC+1]) #16 0415 1403 ld $03,y 1963 ld(hi('REENTER'),Y) #17 0416 e0cb jmp y,$cb 1964 jmp(Y,'REENTER') #18 0417 00f5 ld $f5 1965 ld(-22/2) #19 1966 1967 # ADDI implementation 1968 label('addi') addi: 0418 8118 adda [$18] 1969 adda([vAC]) #13 0419 c218 st [$18] 1970 st([vAC]) #14 Store low result 041a e81e blt .addi#17 1971 bmi('.addi#17') #15 Now figure out if there was a carry 041b a11d suba [$1d] 1972 suba([vTmp]) #16 Gets back the initial value of vAC 041c fc20 bra .addi#19 1973 bra('.addi#19') #17 041d 411d ora [$1d] 1974 ora([vTmp]) #18 Carry in bit 7 1975 label('.addi#17') .addi#17: 041e 211d anda [$1d] 1976 anda([vTmp]) #17 Carry in bit 7 041f 0200 nop 1977 nop() #18 1978 label('.addi#19') .addi#19: 0420 3080 anda $80,x 1979 anda(0x80,X) #19 Move carry to bit 0 0421 0500 ld [x] 1980 ld([X]) #20 0422 8119 adda [$19] 1981 adda([vAC+1]) #21 Add the high bytes with carry 0423 1403 ld $03,y 1982 ld(hi('REENTER_28'),Y) #22 0424 e0ca jmp y,$ca 1983 jmp(Y,'REENTER_28') #23 0425 c219 st [$19] 1984 st([vAC+1]) #24 Store high result 1985 1986 # SUBI implementation 1987 label('subi') subi: 0426 0118 ld [$18] 1988 ld([vAC]) #13 0427 e82c blt .subi#16 1989 bmi('.subi#16') #14 0428 a11d suba [$1d] 1990 suba([vTmp]) #15 0429 c218 st [$18] 1991 st([vAC]) #16 Store low result 042a fc2f bra .subi#19 1992 bra('.subi#19') #17 042b 411d ora [$1d] 1993 ora([vTmp]) #18 Carry in bit 7 1994 label('.subi#16') .subi#16: 042c c218 st [$18] 1995 st([vAC]) #16 Store low result 042d 211d anda [$1d] 1996 anda([vTmp]) #17 Carry in bit 7 042e 0200 nop 1997 nop() #18 1998 label('.subi#19') .subi#19: 042f 3080 anda $80,x 1999 anda(0x80,X) #19 Move carry to bit 0 0430 0119 ld [$19] 2000 ld([vAC+1]) #20 0431 a500 suba [x] 2001 suba([X]) #21 0432 1403 ld $03,y 2002 ld(hi('REENTER_28'),Y) #22 0433 e0ca jmp y,$ca 2003 jmp(Y,'REENTER_28') #23 0434 c219 st [$19] 2004 st([vAC+1]) #24 2005 2006 # LSLW implementation 2007 label('lslw') lslw: 0435 3080 anda $80,x 2008 anda(128,X) #13 0436 8118 adda [$18] 2009 adda([vAC]) #14 0437 c218 st [$18] 2010 st([vAC]) #15 0438 0500 ld [x] 2011 ld([X]) #16 0439 8119 adda [$19] 2012 adda([vAC+1]) #17 043a 8119 adda [$19] 2013 adda([vAC+1]) #18 043b c219 st [$19] 2014 st([vAC+1]) #19 043c 0116 ld [$16] 2015 ld([vPC]) #20 043d a001 suba $01 2016 suba(1) #21 043e 1403 ld $03,y 2017 ld(hi('REENTER_28'),Y) #22 043f e0ca jmp y,$ca 2018 jmp(Y,'REENTER_28') #23 0440 c216 st [$16] 2019 st([vPC]) #24 2020 2021 # STLW implementation 2022 label('stlw') stlw: 0441 811c adda [$1c] 2023 adda([vSP]) #13 0442 c21d st [$1d] 2024 st([vTmp]) #14 0443 9001 adda $01,x 2025 adda(1,X) #15 0444 0119 ld [$19] 2026 ld([vAC+1]) #16 0445 c600 st [x] 2027 st([X]) #17 0446 111d ld [$1d],x 2028 ld([vTmp],X) #18 0447 0118 ld [$18] 2029 ld([vAC]) #19 0448 c600 st [x] 2030 st([X]) #20 0449 1403 ld $03,y 2031 ld(hi('REENTER'),Y) #21 044a e0cb jmp y,$cb 2032 jmp(Y,'REENTER') #22 044b 00f3 ld $f3 2033 ld(-26/2) #23 2034 2035 # LDLW implementation 2036 label('ldlw') ldlw: 044c 811c adda [$1c] 2037 adda([vSP]) #13 044d c21d st [$1d] 2038 st([vTmp]) #14 044e 9001 adda $01,x 2039 adda(1,X) #15 044f 0500 ld [x] 2040 ld([X]) #16 0450 c219 st [$19] 2041 st([vAC+1]) #17 0451 111d ld [$1d],x 2042 ld([vTmp],X) #18 0452 0500 ld [x] 2043 ld([X]) #19 0453 c218 st [$18] 2044 st([vAC]) #20 0454 1403 ld $03,y 2045 ld(hi('REENTER'),Y) #21 0455 e0cb jmp y,$cb 2046 jmp(Y,'REENTER') #22 0456 00f3 ld $f3 2047 ld(-26/2) #23 2048 2049 # POKE implementation 2050 label('poke') poke: 0457 9001 adda $01,x 2051 adda(1,X) #13 0458 0500 ld [x] 2052 ld([X]) #14 0459 1600 ld ac,y 2053 ld(AC,Y) #15 045a 111d ld [$1d],x 2054 ld([vTmp],X) #16 045b 0500 ld [x] 2055 ld([X]) #17 045c 1200 ld ac,x 2056 ld(AC,X) #18 045d 0118 ld [$18] 2057 ld([vAC]) #19 045e ce00 st [y,x] 2058 st([Y,X]) #20 045f 1403 ld $03,y 2059 ld(hi('REENTER'),Y) #21 0460 e0cb jmp y,$cb 2060 jmp(Y,'REENTER') #22 0461 00f3 ld $f3 2061 ld(-26/2) #23 2062 2063 # PEEK implementation 2064 label('peek') peek: 0462 a001 suba $01 2065 suba(1) #13 0463 c216 st [$16] 2066 st([vPC]) #14 0464 1118 ld [$18],x 2067 ld([vAC],X) #15 0465 1519 ld [$19],y 2068 ld([vAC+1],Y) #16 0466 0d00 ld [y,x] 2069 ld([Y,X]) #17 0467 c218 st [$18] 2070 st([vAC]) #18 2071 label('lupReturn#19') #Nice coincidence that lupReturn can be here lupReturn#19: 0468 0000 ld $00 2072 ld(0) #19 0469 c219 st [$19] 2073 st([vAC+1]) #20 046a 1403 ld $03,y 2074 ld(hi('REENTER'),Y) #21 046b e0cb jmp y,$cb 2075 jmp(Y,'REENTER') #22 046c 00f3 ld $f3 2076 ld(-26/2) #23 2077 2078 # DOKE implementation 2079 label('doke') doke: 046d 9001 adda $01,x 2080 adda(1,X) #13 046e 0500 ld [x] 2081 ld([X]) #14 046f 1600 ld ac,y 2082 ld(AC,Y) #15 0470 111d ld [$1d],x 2083 ld([vTmp],X) #16 0471 0500 ld [x] 2084 ld([X]) #17 0472 1200 ld ac,x 2085 ld(AC,X) #18 0473 0118 ld [$18] 2086 ld([vAC]) #19 0474 de00 st [y,x++] 2087 st([Y,Xpp]) #20 0475 0119 ld [$19] 2088 ld([vAC+1]) #21 0476 ce00 st [y,x] 2089 st([Y,X]) #22 Incompatible with REENTER_28 0477 1403 ld $03,y 2090 ld(hi('REENTER'),Y) #23 0478 e0cb jmp y,$cb 2091 jmp(Y,'REENTER') #24 0479 00f2 ld $f2 2092 ld(-28/2) #25 2093 2094 # DEEK implementation 2095 label('deek') deek: 047a 0116 ld [$16] 2096 ld([vPC]) #13 047b a001 suba $01 2097 suba(1) #14 047c c216 st [$16] 2098 st([vPC]) #15 047d 1118 ld [$18],x 2099 ld([vAC],X) #16 047e 1519 ld [$19],y 2100 ld([vAC+1],Y) #17 047f 0d00 ld [y,x] 2101 ld([Y,X]) #18 0480 de00 st [y,x++] 2102 st([Y,Xpp]) #19 Just X++ 0481 c218 st [$18] 2103 st([vAC]) #20 0482 0d00 ld [y,x] 2104 ld([Y,X]) #21 0483 1403 ld $03,y 2105 ld(hi('REENTER_28'),Y) #22 0484 e0ca jmp y,$ca 2106 jmp(Y,'REENTER_28') #23 0485 c219 st [$19] 2107 st([vAC+1]) #24 2108 2109 # ANDW implementation 2110 label('andw') andw: 0486 c21d st [$1d] 2111 st([vTmp]) #13 0487 9001 adda $01,x 2112 adda(1,X) #14 0488 0500 ld [x] 2113 ld([X]) #15 0489 2119 anda [$19] 2114 anda([vAC+1]) #16 048a c219 st [$19] 2115 st([vAC+1]) #17 048b 111d ld [$1d],x 2116 ld([vTmp],X) #18 048c 0500 ld [x] 2117 ld([X]) #19 048d 2118 anda [$18] 2118 anda([vAC]) #20 048e c218 st [$18] 2119 st([vAC]) #21 048f 1403 ld $03,y 2120 ld(hi('REENTER_28'),Y) #22 0490 e0ca jmp y,$ca 2121 jmp(Y,'REENTER_28') #23 2122 #dummy() #24 Overlap 2123 # 2124 # ORW implementation 2125 label('orw') orw: 0491 c21d st [$1d] 2126 st([vTmp]) #13,24 0492 9001 adda $01,x 2127 adda(1,X) #14 0493 0500 ld [x] 2128 ld([X]) #15 0494 4119 ora [$19] 2129 ora([vAC+1]) #16 0495 c219 st [$19] 2130 st([vAC+1]) #17 0496 111d ld [$1d],x 2131 ld([vTmp],X) #18 0497 0500 ld [x] 2132 ld([X]) #19 0498 4118 ora [$18] 2133 ora([vAC]) #20 0499 c218 st [$18] 2134 st([vAC]) #21 049a 1403 ld $03,y 2135 ld(hi('REENTER_28'),Y) #22 049b e0ca jmp y,$ca 2136 jmp(Y,'REENTER_28') #23 2137 #dummy() #24 Overlap 2138 # 2139 # XORW implementation 2140 label('xorw') xorw: 049c 9001 adda $01,x 2141 adda(1,X) #13,24 049d 0500 ld [x] 2142 ld([X]) #14 049e 6119 xora [$19] 2143 xora([vAC+1]) #15 049f c219 st [$19] 2144 st([vAC+1]) #16 04a0 111d ld [$1d],x 2145 ld([vTmp],X) #17 04a1 0500 ld [x] 2146 ld([X]) #18 04a2 6118 xora [$18] 2147 xora([vAC]) #19 04a3 c218 st [$18] 2148 st([vAC]) #20 04a4 1403 ld $03,y 2149 ld(hi('REENTER'),Y) #21 04a5 e0cb jmp y,$cb 2150 jmp(Y,'REENTER') #22 04a6 00f3 ld $f3 2151 ld(-26/2) #23 2152 2153 #----------------------------------------------------------------------- 2154 # 2155 # vCPU extension functions (for acceleration and compaction) follow below. 2156 # 2157 # The naming convention is: SYS_[_v]_ 2158 # 2159 # With the maximum number of cycles the function will run 2160 # (counted from NEXT to NEXT). This is the same number that must 2161 # be passed to the 'SYS' vCPU instruction as operand, and it will 2162 # appear in the GCL code upon use. 2163 # 2164 # If a SYS extension got introduced after ROM v1, the version number of 2165 # introduction is included in the name. This helps the programmer to be 2166 # reminded to verify the acutal ROM version and fail gracefully on older 2167 # ROMs than required. See also Docs/GT1-files.txt on using [romType]. 2168 # 2169 #----------------------------------------------------------------------- 2170 2171 #----------------------------------------------------------------------- 2172 # Extension SYS_Random_34: Update entropy and copy to vAC 2173 #----------------------------------------------------------------------- 2174 2175 # This same algorithm runs automatically once per vertical blank. 2176 # Use this function to get numbers at a higher rate. 2177 # 2178 # Variables: 2179 # vAC 2180 2181 label('SYS_Random_34') SYS_Random_34: 04a7 010e ld [$0e] 2182 ld([frameCount]) #15 04a8 6107 xora [$07] 2183 xora([entropy+1]) #16 04a9 610f xora [$0f] 2184 xora([serialRaw]) #17 04aa 8106 adda [$06] 2185 adda([entropy+0]) #18 04ab c206 st [$06] 2186 st([entropy+0]) #19 04ac c218 st [$18] 2187 st([vAC+0]) #20 04ad 8108 adda [$08] 2188 adda([entropy+2]) #21 04ae c208 st [$08] 2189 st([entropy+2]) #22 04af e8b2 blt .sysRnd0 2190 bmi('.sysRnd0') #23 04b0 fcb3 bra .sysRnd1 2191 bra('.sysRnd1') #24 04b1 6053 xora $53 2192 xora(64+16+2+1) #25 2193 label('.sysRnd0') .sysRnd0: 04b2 606c xora $6c 2194 xora(64+32+8+4) #25 2195 label('.sysRnd1') .sysRnd1: 04b3 8107 adda [$07] 2196 adda([entropy+1]) #26 04b4 c207 st [$07] 2197 st([entropy+1]) #27 04b5 c219 st [$19] 2198 st([vAC+1]) #28 04b6 1403 ld $03,y 2199 ld(hi('REENTER'),Y) #29 04b7 e0cb jmp y,$cb 2200 jmp(Y,'REENTER') #30 04b8 00ef ld $ef 2201 ld(-34/2) #31 2202 2203 label('SYS_LSRW7_30') SYS_LSRW7_30: 04b9 0118 ld [$18] 2204 ld([vAC]) #15 04ba 3080 anda $80,x 2205 anda(128,X) #16 04bb 0119 ld [$19] 2206 ld([vAC+1]) #17 04bc 8200 adda ac 2207 adda(AC) #18 04bd 4500 ora [x] 2208 ora([X]) #19 04be c218 st [$18] 2209 st([vAC]) #20 04bf 0119 ld [$19] 2210 ld([vAC+1]) #21 04c0 3080 anda $80,x 2211 anda(128,X) #22 04c1 0500 ld [x] 2212 ld([X]) #23 04c2 c219 st [$19] 2213 st([vAC+1]) #24 04c3 1403 ld $03,y 2214 ld(hi('REENTER'),Y) #25 04c4 e0cb jmp y,$cb 2215 jmp(Y,'REENTER') #26 04c5 00f1 ld $f1 2216 ld(-30/2) #27 2217 2218 label('SYS_LSRW8_24') SYS_LSRW8_24: 04c6 0119 ld [$19] 2219 ld([vAC+1]) #15 04c7 c218 st [$18] 2220 st([vAC]) #16 04c8 0000 ld $00 2221 ld(0) #17 04c9 c219 st [$19] 2222 st([vAC+1]) #18 04ca 1403 ld $03,y 2223 ld(hi('REENTER'),Y) #19 04cb e0cb jmp y,$cb 2224 jmp(Y,'REENTER') #20 04cc 00f4 ld $f4 2225 ld(-24/2) #21 2226 2227 label('SYS_LSLW8_24') SYS_LSLW8_24: 04cd 0118 ld [$18] 2228 ld([vAC]) #15 04ce c219 st [$19] 2229 st([vAC+1]) #16 04cf 0000 ld $00 2230 ld(0) #17 04d0 c218 st [$18] 2231 st([vAC]) #18 04d1 1403 ld $03,y 2232 ld(hi('REENTER'),Y) #19 04d2 e0cb jmp y,$cb 2233 jmp(Y,'REENTER') #20 04d3 00f4 ld $f4 2234 ld(-24/2) #21 2235 2236 #----------------------------------------------------------------------- 2237 # Extension SYS_Draw4_30 2238 #----------------------------------------------------------------------- 2239 2240 # Draw 4 pixels on screen, horizontally next to each other 2241 # 2242 # Variables: 2243 # sysArgs[0:3] Pixels (in) 2244 # sysArgs[4:5] Position on screen (in) 2245 2246 label('SYS_Draw4_30') SYS_Draw4_30: 04d4 1128 ld [$28],x 2247 ld([sysArgs+4],X) #15 04d5 1529 ld [$29],y 2248 ld([sysArgs+5],Y) #16 04d6 0124 ld [$24] 2249 ld([sysArgs+0]) #17 04d7 de00 st [y,x++] 2250 st([Y,Xpp]) #18 04d8 0125 ld [$25] 2251 ld([sysArgs+1]) #19 04d9 de00 st [y,x++] 2252 st([Y,Xpp]) #20 04da 0126 ld [$26] 2253 ld([sysArgs+2]) #21 04db de00 st [y,x++] 2254 st([Y,Xpp]) #22 04dc 0127 ld [$27] 2255 ld([sysArgs+3]) #23 04dd de00 st [y,x++] 2256 st([Y,Xpp]) #24 04de 1403 ld $03,y 2257 ld(hi('REENTER'),Y) #25 04df e0cb jmp y,$cb 2258 jmp(Y,'REENTER') #26 04e0 00f1 ld $f1 2259 ld(-30/2) #27 2260 2261 #----------------------------------------------------------------------- 2262 # Extension SYS_VDrawBits_134: 2263 #----------------------------------------------------------------------- 2264 2265 # Draw slice of a character, 8 pixels vertical 2266 # 2267 # Variables: 2268 # sysArgs[0] Color 0 "background" (in) 2269 # sysArgs[1] Color 1 "pen" (in) 2270 # sysArgs[2] 8 bits, highest bit first (in, changed) 2271 # sysArgs[4:5] Position on screen (in) 2272 2273 label('SYS_VDrawBits_134') SYS_VDrawBits_134: 04e1 1412 ld $12,y 2274 ld(hi('sys_VDrawBits'),Y) #15 04e2 e08f jmp y,$8f 2275 jmp(Y,'sys_VDrawBits') #16 04e3 1128 ld [$28],x 2276 ld([sysArgs+4],X) #17 2277 2278 #----------------------------------------------------------------------- 2279 2280 # INC implementation 2281 label('inc#14') inc#14: 04e4 8500 adda [x] 2282 adda([X]) #14 04e5 c600 st [x] 2283 st([X]) #15 04e6 1403 ld $03,y 2284 ld(hi('NEXTY'),Y) #16 04e7 e000 jmp y,$00 2285 jmp(Y,'NEXTY') #17 04e8 00f6 ld $f6 2286 ld(-20/2) #18 2287 2288 # Interrupt handler: 2289 # ST $xx -> optionally store vCpuSelect 2290 # ... IRQ payload ... 2291 # either: 2292 # LDWI $400 2293 # LUP 0 -> vRTI and don't switch interpreter (immediate resume) 2294 # or: 2295 # LDWI $400 2296 # LUP $xx -> vRTI and switch interpreter type as stored in [$xx] 04e9 0200 nop 2297 fillers(until=251-11) 04ea 0200 nop 04eb 0200 nop * 7 times 2298 label('vRTI#15') vRTI#15: 04f0 0130 ld [$30] 2299 ld([0x30]) #15 Continue with vCPU in the same timeslice (faster) 04f1 c216 st [$16] 2300 st([vPC]) #16 04f2 0131 ld [$31] 2301 ld([0x31]) #17 04f3 c217 st [$17] 2302 st([vPC+1]) #18 04f4 0132 ld [$32] 2303 ld([0x32]) #19 04f5 c218 st [$18] 2304 st([vAC]) #20 04f6 0133 ld [$33] 2305 ld([0x33]) #21 04f7 c219 st [$19] 2306 st([vAC+1]) #22 04f8 1403 ld $03,y 2307 ld(hi('REENTER'),Y) #23 04f9 e0cb jmp y,$cb 2308 jmp(Y,'REENTER') #24 04fa 00f2 ld $f2 2309 ld(-28/2) #25 2310 # vRTI entry point 2311 assert(pc()&255 == 251) # The landing offset 251 for LUP trampoline is fixed 04fb f0f0 beq vRTI#15 2312 beq('vRTI#15') #13 vRTI sequence 04fc 9001 adda $01,x 2313 adda(1,X) #14 04fd 1412 ld $12,y 2314 ld(hi('vRTI#18'),Y) #15 Switch and wait for end of timeslice (slower) 04fe e020 jmp y,$20 2315 jmp(Y,'vRTI#18') #16 04ff c21d st [$1d] 2316 st([vTmp]) #17 2317 2318 #----------------------------------------------------------------------- 2319 # 2320 # $0500 ROM page 5-6: Shift table and code 2321 # 2322 #----------------------------------------------------------------------- 2323 2324 align(0x100, size=0x200) 2325 2326 # Lookup table for i>>n, with n in 1..6 2327 # Indexing ix = i & ~b | (b-1), where b = 1<<(n-1) 2328 # ... 2329 # ld <.ret 2330 # st [vTmp] 2331 # ld >shiftTable,y 2332 # 2333 # jmp y,ac 2334 # bra $ff 2335 # .ret: ... 2336 # 2337 # i >> 7 can be always be done with RAM: [i&128] 2338 # ... 2339 # anda $80,x 2340 # ld [x] 2341 # ... 2342 2343 label('shiftTable') 2344 shiftTable = pc() 2345 2346 for ix in range(255): 2347 for n in range(1,7): # Find first zero 2348 if ~ix & (1 << (n-1)): 2349 break 2350 pattern = ['x' if i>n); C('0b%s >> %d' % (''.join(reversed(pattern)), n)) shiftTable: 0500 0000 ld $00 ;0b0000000x >> 1 0501 0000 ld $00 ;0b000000xx >> 2 0502 0001 ld $01 ;0b0000001x >> 1 0503 0000 ld $00 ;0b00000xxx >> 3 0504 0002 ld $02 ;0b0000010x >> 1 0505 0001 ld $01 ;0b000001xx >> 2 0506 0003 ld $03 ;0b0000011x >> 1 0507 0000 ld $00 ;0b0000xxxx >> 4 0508 0004 ld $04 ;0b0000100x >> 1 0509 0002 ld $02 ;0b000010xx >> 2 050a 0005 ld $05 ;0b0000101x >> 1 050b 0001 ld $01 ;0b00001xxx >> 3 050c 0006 ld $06 ;0b0000110x >> 1 050d 0003 ld $03 ;0b000011xx >> 2 050e 0007 ld $07 ;0b0000111x >> 1 050f 0000 ld $00 ;0b000xxxxx >> 5 0510 0008 ld $08 ;0b0001000x >> 1 0511 0004 ld $04 ;0b000100xx >> 2 0512 0009 ld $09 ;0b0001001x >> 1 0513 0002 ld $02 ;0b00010xxx >> 3 0514 000a ld $0a ;0b0001010x >> 1 0515 0005 ld $05 ;0b000101xx >> 2 0516 000b ld $0b ;0b0001011x >> 1 0517 0001 ld $01 ;0b0001xxxx >> 4 0518 000c ld $0c ;0b0001100x >> 1 0519 0006 ld $06 ;0b000110xx >> 2 051a 000d ld $0d ;0b0001101x >> 1 051b 0003 ld $03 ;0b00011xxx >> 3 051c 000e ld $0e ;0b0001110x >> 1 051d 0007 ld $07 ;0b000111xx >> 2 051e 000f ld $0f ;0b0001111x >> 1 051f 0000 ld $00 ;0b00xxxxxx >> 6 0520 0010 ld $10 ;0b0010000x >> 1 0521 0008 ld $08 ;0b001000xx >> 2 0522 0011 ld $11 ;0b0010001x >> 1 0523 0004 ld $04 ;0b00100xxx >> 3 0524 0012 ld $12 ;0b0010010x >> 1 0525 0009 ld $09 ;0b001001xx >> 2 0526 0013 ld $13 ;0b0010011x >> 1 0527 0002 ld $02 ;0b0010xxxx >> 4 0528 0014 ld $14 ;0b0010100x >> 1 0529 000a ld $0a ;0b001010xx >> 2 052a 0015 ld $15 ;0b0010101x >> 1 052b 0005 ld $05 ;0b00101xxx >> 3 052c 0016 ld $16 ;0b0010110x >> 1 052d 000b ld $0b ;0b001011xx >> 2 052e 0017 ld $17 ;0b0010111x >> 1 052f 0001 ld $01 ;0b001xxxxx >> 5 0530 0018 ld $18 ;0b0011000x >> 1 0531 000c ld $0c ;0b001100xx >> 2 0532 0019 ld $19 ;0b0011001x >> 1 0533 0006 ld $06 ;0b00110xxx >> 3 0534 001a ld $1a ;0b0011010x >> 1 0535 000d ld $0d ;0b001101xx >> 2 0536 001b ld $1b ;0b0011011x >> 1 0537 0003 ld $03 ;0b0011xxxx >> 4 0538 001c ld $1c ;0b0011100x >> 1 0539 000e ld $0e ;0b001110xx >> 2 053a 001d ld $1d ;0b0011101x >> 1 053b 0007 ld $07 ;0b00111xxx >> 3 053c 001e ld $1e ;0b0011110x >> 1 053d 000f ld $0f ;0b001111xx >> 2 053e 001f ld $1f ;0b0011111x >> 1 053f 0000 ld $00 ;0b00xxxxxx >> 6 0540 0020 ld $20 ;0b0100000x >> 1 0541 0010 ld $10 ;0b010000xx >> 2 0542 0021 ld $21 ;0b0100001x >> 1 0543 0008 ld $08 ;0b01000xxx >> 3 0544 0022 ld $22 ;0b0100010x >> 1 0545 0011 ld $11 ;0b010001xx >> 2 0546 0023 ld $23 ;0b0100011x >> 1 0547 0004 ld $04 ;0b0100xxxx >> 4 0548 0024 ld $24 ;0b0100100x >> 1 0549 0012 ld $12 ;0b010010xx >> 2 054a 0025 ld $25 ;0b0100101x >> 1 054b 0009 ld $09 ;0b01001xxx >> 3 054c 0026 ld $26 ;0b0100110x >> 1 054d 0013 ld $13 ;0b010011xx >> 2 054e 0027 ld $27 ;0b0100111x >> 1 054f 0002 ld $02 ;0b010xxxxx >> 5 0550 0028 ld $28 ;0b0101000x >> 1 0551 0014 ld $14 ;0b010100xx >> 2 0552 0029 ld $29 ;0b0101001x >> 1 0553 000a ld $0a ;0b01010xxx >> 3 0554 002a ld $2a ;0b0101010x >> 1 0555 0015 ld $15 ;0b010101xx >> 2 0556 002b ld $2b ;0b0101011x >> 1 0557 0005 ld $05 ;0b0101xxxx >> 4 0558 002c ld $2c ;0b0101100x >> 1 0559 0016 ld $16 ;0b010110xx >> 2 055a 002d ld $2d ;0b0101101x >> 1 055b 000b ld $0b ;0b01011xxx >> 3 055c 002e ld $2e ;0b0101110x >> 1 055d 0017 ld $17 ;0b010111xx >> 2 055e 002f ld $2f ;0b0101111x >> 1 055f 0001 ld $01 ;0b01xxxxxx >> 6 0560 0030 ld $30 ;0b0110000x >> 1 0561 0018 ld $18 ;0b011000xx >> 2 0562 0031 ld $31 ;0b0110001x >> 1 0563 000c ld $0c ;0b01100xxx >> 3 0564 0032 ld $32 ;0b0110010x >> 1 0565 0019 ld $19 ;0b011001xx >> 2 0566 0033 ld $33 ;0b0110011x >> 1 0567 0006 ld $06 ;0b0110xxxx >> 4 0568 0034 ld $34 ;0b0110100x >> 1 0569 001a ld $1a ;0b011010xx >> 2 056a 0035 ld $35 ;0b0110101x >> 1 056b 000d ld $0d ;0b01101xxx >> 3 056c 0036 ld $36 ;0b0110110x >> 1 056d 001b ld $1b ;0b011011xx >> 2 056e 0037 ld $37 ;0b0110111x >> 1 056f 0003 ld $03 ;0b011xxxxx >> 5 0570 0038 ld $38 ;0b0111000x >> 1 0571 001c ld $1c ;0b011100xx >> 2 0572 0039 ld $39 ;0b0111001x >> 1 0573 000e ld $0e ;0b01110xxx >> 3 0574 003a ld $3a ;0b0111010x >> 1 0575 001d ld $1d ;0b011101xx >> 2 0576 003b ld $3b ;0b0111011x >> 1 0577 0007 ld $07 ;0b0111xxxx >> 4 0578 003c ld $3c ;0b0111100x >> 1 0579 001e ld $1e ;0b011110xx >> 2 057a 003d ld $3d ;0b0111101x >> 1 057b 000f ld $0f ;0b01111xxx >> 3 057c 003e ld $3e ;0b0111110x >> 1 057d 001f ld $1f ;0b011111xx >> 2 057e 003f ld $3f ;0b0111111x >> 1 057f 0001 ld $01 ;0b01xxxxxx >> 6 0580 0040 ld $40 ;0b1000000x >> 1 0581 0020 ld $20 ;0b100000xx >> 2 0582 0041 ld $41 ;0b1000001x >> 1 0583 0010 ld $10 ;0b10000xxx >> 3 0584 0042 ld $42 ;0b1000010x >> 1 0585 0021 ld $21 ;0b100001xx >> 2 0586 0043 ld $43 ;0b1000011x >> 1 0587 0008 ld $08 ;0b1000xxxx >> 4 0588 0044 ld $44 ;0b1000100x >> 1 0589 0022 ld $22 ;0b100010xx >> 2 058a 0045 ld $45 ;0b1000101x >> 1 058b 0011 ld $11 ;0b10001xxx >> 3 058c 0046 ld $46 ;0b1000110x >> 1 058d 0023 ld $23 ;0b100011xx >> 2 058e 0047 ld $47 ;0b1000111x >> 1 058f 0004 ld $04 ;0b100xxxxx >> 5 0590 0048 ld $48 ;0b1001000x >> 1 0591 0024 ld $24 ;0b100100xx >> 2 0592 0049 ld $49 ;0b1001001x >> 1 0593 0012 ld $12 ;0b10010xxx >> 3 0594 004a ld $4a ;0b1001010x >> 1 0595 0025 ld $25 ;0b100101xx >> 2 0596 004b ld $4b ;0b1001011x >> 1 0597 0009 ld $09 ;0b1001xxxx >> 4 0598 004c ld $4c ;0b1001100x >> 1 0599 0026 ld $26 ;0b100110xx >> 2 059a 004d ld $4d ;0b1001101x >> 1 059b 0013 ld $13 ;0b10011xxx >> 3 059c 004e ld $4e ;0b1001110x >> 1 059d 0027 ld $27 ;0b100111xx >> 2 059e 004f ld $4f ;0b1001111x >> 1 059f 0002 ld $02 ;0b10xxxxxx >> 6 05a0 0050 ld $50 ;0b1010000x >> 1 05a1 0028 ld $28 ;0b101000xx >> 2 05a2 0051 ld $51 ;0b1010001x >> 1 05a3 0014 ld $14 ;0b10100xxx >> 3 05a4 0052 ld $52 ;0b1010010x >> 1 05a5 0029 ld $29 ;0b101001xx >> 2 05a6 0053 ld $53 ;0b1010011x >> 1 05a7 000a ld $0a ;0b1010xxxx >> 4 05a8 0054 ld $54 ;0b1010100x >> 1 05a9 002a ld $2a ;0b101010xx >> 2 05aa 0055 ld $55 ;0b1010101x >> 1 05ab 0015 ld $15 ;0b10101xxx >> 3 05ac 0056 ld $56 ;0b1010110x >> 1 05ad 002b ld $2b ;0b101011xx >> 2 05ae 0057 ld $57 ;0b1010111x >> 1 05af 0005 ld $05 ;0b101xxxxx >> 5 05b0 0058 ld $58 ;0b1011000x >> 1 05b1 002c ld $2c ;0b101100xx >> 2 05b2 0059 ld $59 ;0b1011001x >> 1 05b3 0016 ld $16 ;0b10110xxx >> 3 05b4 005a ld $5a ;0b1011010x >> 1 05b5 002d ld $2d ;0b101101xx >> 2 05b6 005b ld $5b ;0b1011011x >> 1 05b7 000b ld $0b ;0b1011xxxx >> 4 05b8 005c ld $5c ;0b1011100x >> 1 05b9 002e ld $2e ;0b101110xx >> 2 05ba 005d ld $5d ;0b1011101x >> 1 05bb 0017 ld $17 ;0b10111xxx >> 3 05bc 005e ld $5e ;0b1011110x >> 1 05bd 002f ld $2f ;0b101111xx >> 2 05be 005f ld $5f ;0b1011111x >> 1 05bf 0002 ld $02 ;0b10xxxxxx >> 6 05c0 0060 ld $60 ;0b1100000x >> 1 05c1 0030 ld $30 ;0b110000xx >> 2 05c2 0061 ld $61 ;0b1100001x >> 1 05c3 0018 ld $18 ;0b11000xxx >> 3 05c4 0062 ld $62 ;0b1100010x >> 1 05c5 0031 ld $31 ;0b110001xx >> 2 05c6 0063 ld $63 ;0b1100011x >> 1 05c7 000c ld $0c ;0b1100xxxx >> 4 05c8 0064 ld $64 ;0b1100100x >> 1 05c9 0032 ld $32 ;0b110010xx >> 2 05ca 0065 ld $65 ;0b1100101x >> 1 05cb 0019 ld $19 ;0b11001xxx >> 3 05cc 0066 ld $66 ;0b1100110x >> 1 05cd 0033 ld $33 ;0b110011xx >> 2 05ce 0067 ld $67 ;0b1100111x >> 1 05cf 0006 ld $06 ;0b110xxxxx >> 5 05d0 0068 ld $68 ;0b1101000x >> 1 05d1 0034 ld $34 ;0b110100xx >> 2 05d2 0069 ld $69 ;0b1101001x >> 1 05d3 001a ld $1a ;0b11010xxx >> 3 05d4 006a ld $6a ;0b1101010x >> 1 05d5 0035 ld $35 ;0b110101xx >> 2 05d6 006b ld $6b ;0b1101011x >> 1 05d7 000d ld $0d ;0b1101xxxx >> 4 05d8 006c ld $6c ;0b1101100x >> 1 05d9 0036 ld $36 ;0b110110xx >> 2 05da 006d ld $6d ;0b1101101x >> 1 05db 001b ld $1b ;0b11011xxx >> 3 05dc 006e ld $6e ;0b1101110x >> 1 05dd 0037 ld $37 ;0b110111xx >> 2 05de 006f ld $6f ;0b1101111x >> 1 05df 0003 ld $03 ;0b11xxxxxx >> 6 05e0 0070 ld $70 ;0b1110000x >> 1 05e1 0038 ld $38 ;0b111000xx >> 2 05e2 0071 ld $71 ;0b1110001x >> 1 05e3 001c ld $1c ;0b11100xxx >> 3 05e4 0072 ld $72 ;0b1110010x >> 1 05e5 0039 ld $39 ;0b111001xx >> 2 05e6 0073 ld $73 ;0b1110011x >> 1 05e7 000e ld $0e ;0b1110xxxx >> 4 05e8 0074 ld $74 ;0b1110100x >> 1 05e9 003a ld $3a ;0b111010xx >> 2 05ea 0075 ld $75 ;0b1110101x >> 1 05eb 001d ld $1d ;0b11101xxx >> 3 05ec 0076 ld $76 ;0b1110110x >> 1 05ed 003b ld $3b ;0b111011xx >> 2 05ee 0077 ld $77 ;0b1110111x >> 1 05ef 0007 ld $07 ;0b111xxxxx >> 5 05f0 0078 ld $78 ;0b1111000x >> 1 05f1 003c ld $3c ;0b111100xx >> 2 05f2 0079 ld $79 ;0b1111001x >> 1 05f3 001e ld $1e ;0b11110xxx >> 3 05f4 007a ld $7a ;0b1111010x >> 1 05f5 003d ld $3d ;0b111101xx >> 2 05f6 007b ld $7b ;0b1111011x >> 1 05f7 000f ld $0f ;0b1111xxxx >> 4 05f8 007c ld $7c ;0b1111100x >> 1 05f9 003e ld $3e ;0b111110xx >> 2 05fa 007d ld $7d ;0b1111101x >> 1 05fb 001f ld $1f ;0b11111xxx >> 3 05fc 007e ld $7e ;0b1111110x >> 1 05fd 003f ld $3f ;0b111111xx >> 2 05fe 007f ld $7f ;0b1111111x >> 1 2352 2353 assert pc()&255 == 255 05ff fd1d bra [$1d] 2354 bra([vTmp]) # Jumps back into next page 2355 2356 label('SYS_LSRW1_48') 2357 assert pc()&255 == 0 # First instruction on this page *must* be a nop SYS_LSRW1_48: 0600 0200 nop 2358 nop() #15 0601 1405 ld $05,y 2359 ld(hi('shiftTable'),Y) #16 Logical shift right 1 bit (X >> 1) 0602 0008 ld $08 2360 ld('.sysLsrw1a') #17 Shift low byte 0603 c21d st [$1d] 2361 st([vTmp]) #18 0604 0118 ld [$18] 2362 ld([vAC]) #19 0605 20fe anda $fe 2363 anda(0b11111110) #20 0606 e200 jmp y,ac 2364 jmp(Y,AC) #21 0607 fcff bra $ff 2365 bra(255) #22 bra shiftTable+255 2366 label('.sysLsrw1a') .sysLsrw1a: 0608 c218 st [$18] 2367 st([vAC]) #26 0609 0119 ld [$19] 2368 ld([vAC+1]) #27 Transfer bit 8 060a 2001 anda $01 2369 anda(1) #28 060b 807f adda $7f 2370 adda(127) #29 060c 2080 anda $80 2371 anda(128) #30 060d 4118 ora [$18] 2372 ora([vAC]) #31 060e c218 st [$18] 2373 st([vAC]) #32 060f 0015 ld $15 2374 ld('.sysLsrw1b') #33 Shift high byte 0610 c21d st [$1d] 2375 st([vTmp]) #34 0611 0119 ld [$19] 2376 ld([vAC+1]) #35 0612 20fe anda $fe 2377 anda(0b11111110) #36 0613 e200 jmp y,ac 2378 jmp(Y,AC) #37 0614 fcff bra $ff 2379 bra(255) #38 bra shiftTable+255 2380 label('.sysLsrw1b') .sysLsrw1b: 0615 c219 st [$19] 2381 st([vAC+1]) #42 0616 1403 ld $03,y 2382 ld(hi('REENTER'),Y) #43 0617 e0cb jmp y,$cb 2383 jmp(Y,'REENTER') #44 0618 00e8 ld $e8 2384 ld(-48/2) #45 2385 2386 label('SYS_LSRW2_52') SYS_LSRW2_52: 0619 1405 ld $05,y 2387 ld(hi('shiftTable'),Y) #15 Logical shift right 2 bit (X >> 2) 061a 0021 ld $21 2388 ld('.sysLsrw2a') #16 Shift low byte 061b c21d st [$1d] 2389 st([vTmp]) #17 061c 0118 ld [$18] 2390 ld([vAC]) #18 061d 20fc anda $fc 2391 anda(0b11111100) #19 061e 4001 ora $01 2392 ora( 0b00000001) #20 061f e200 jmp y,ac 2393 jmp(Y,AC) #21 0620 fcff bra $ff 2394 bra(255) #22 bra shiftTable+255 2395 label('.sysLsrw2a') .sysLsrw2a: 0621 c218 st [$18] 2396 st([vAC]) #26 0622 0119 ld [$19] 2397 ld([vAC+1]) #27 Transfer bit 8:9 0623 8200 adda ac 2398 adda(AC) #28 0624 8200 adda ac 2399 adda(AC) #29 0625 8200 adda ac 2400 adda(AC) #30 0626 8200 adda ac 2401 adda(AC) #31 0627 8200 adda ac 2402 adda(AC) #32 0628 8200 adda ac 2403 adda(AC) #33 0629 4118 ora [$18] 2404 ora([vAC]) #34 062a c218 st [$18] 2405 st([vAC]) #35 062b 0032 ld $32 2406 ld('.sysLsrw2b') #36 Shift high byte 062c c21d st [$1d] 2407 st([vTmp]) #37 062d 0119 ld [$19] 2408 ld([vAC+1]) #38 062e 20fc anda $fc 2409 anda(0b11111100) #39 062f 4001 ora $01 2410 ora( 0b00000001) #40 0630 e200 jmp y,ac 2411 jmp(Y,AC) #41 0631 fcff bra $ff 2412 bra(255) #42 bra shiftTable+255 2413 label('.sysLsrw2b') .sysLsrw2b: 0632 c219 st [$19] 2414 st([vAC+1]) #46 0633 1403 ld $03,y 2415 ld(hi('REENTER'),Y) #47 0634 e0cb jmp y,$cb 2416 jmp(Y,'REENTER') #48 0635 00e6 ld $e6 2417 ld(-52/2) #49 2418 2419 label('SYS_LSRW3_52') SYS_LSRW3_52: 0636 1405 ld $05,y 2420 ld(hi('shiftTable'),Y) #15 Logical shift right 3 bit (X >> 3) 0637 003e ld $3e 2421 ld('.sysLsrw3a') #16 Shift low byte 0638 c21d st [$1d] 2422 st([vTmp]) #17 0639 0118 ld [$18] 2423 ld([vAC]) #18 063a 20f8 anda $f8 2424 anda(0b11111000) #19 063b 4003 ora $03 2425 ora( 0b00000011) #20 063c e200 jmp y,ac 2426 jmp(Y,AC) #21 063d fcff bra $ff 2427 bra(255) #22 bra shiftTable+255 2428 label('.sysLsrw3a') .sysLsrw3a: 063e c218 st [$18] 2429 st([vAC]) #26 063f 0119 ld [$19] 2430 ld([vAC+1]) #27 Transfer bit 8:10 0640 8200 adda ac 2431 adda(AC) #28 0641 8200 adda ac 2432 adda(AC) #29 0642 8200 adda ac 2433 adda(AC) #30 0643 8200 adda ac 2434 adda(AC) #31 0644 8200 adda ac 2435 adda(AC) #32 0645 4118 ora [$18] 2436 ora([vAC]) #33 0646 c218 st [$18] 2437 st([vAC]) #34 0647 004e ld $4e 2438 ld('.sysLsrw3b') #35 Shift high byte 0648 c21d st [$1d] 2439 st([vTmp]) #36 0649 0119 ld [$19] 2440 ld([vAC+1]) #37 064a 20f8 anda $f8 2441 anda(0b11111000) #38 064b 4003 ora $03 2442 ora( 0b00000011) #39 064c e200 jmp y,ac 2443 jmp(Y,AC) #40 064d fcff bra $ff 2444 bra(255) #41 bra shiftTable+255 2445 label('.sysLsrw3b') .sysLsrw3b: 064e c219 st [$19] 2446 st([vAC+1]) #45 064f 00e6 ld $e6 2447 ld(-52/2) #46 0650 1403 ld $03,y 2448 ld(hi('REENTER'),Y) #47 0651 e0cb jmp y,$cb 2449 jmp(Y,'REENTER') #48 2450 #nop() #49 2451 2452 label('SYS_LSRW4_50') SYS_LSRW4_50: 0652 1405 ld $05,y 2453 ld(hi('shiftTable'),Y) #15,49 Logical shift right 4 bit (X >> 4) 0653 005a ld $5a 2454 ld('.sysLsrw4a') #16 Shift low byte 0654 c21d st [$1d] 2455 st([vTmp]) #17 0655 0118 ld [$18] 2456 ld([vAC]) #18 0656 20f0 anda $f0 2457 anda(0b11110000) #19 0657 4007 ora $07 2458 ora( 0b00000111) #20 0658 e200 jmp y,ac 2459 jmp(Y,AC) #21 0659 fcff bra $ff 2460 bra(255) #22 bra shiftTable+255 2461 label('.sysLsrw4a') .sysLsrw4a: 065a c218 st [$18] 2462 st([vAC]) #26 065b 0119 ld [$19] 2463 ld([vAC+1]) #27 Transfer bit 8:11 065c 8200 adda ac 2464 adda(AC) #28 065d 8200 adda ac 2465 adda(AC) #29 065e 8200 adda ac 2466 adda(AC) #30 065f 8200 adda ac 2467 adda(AC) #31 0660 4118 ora [$18] 2468 ora([vAC]) #32 0661 c218 st [$18] 2469 st([vAC]) #33 0662 0069 ld $69 2470 ld('.sysLsrw4b') #34 Shift high byte' 0663 c21d st [$1d] 2471 st([vTmp]) #35 0664 0119 ld [$19] 2472 ld([vAC+1]) #36 0665 20f0 anda $f0 2473 anda(0b11110000) #37 0666 4007 ora $07 2474 ora( 0b00000111) #38 0667 e200 jmp y,ac 2475 jmp(Y,AC) #39 0668 fcff bra $ff 2476 bra(255) #40 bra shiftTable+255 2477 label('.sysLsrw4b') .sysLsrw4b: 0669 c219 st [$19] 2478 st([vAC+1]) #44 066a 1403 ld $03,y 2479 ld(hi('REENTER'),Y) #45 066b e0cb jmp y,$cb 2480 jmp(Y,'REENTER') #46 066c 00e7 ld $e7 2481 ld(-50/2) #47 2482 2483 label('SYS_LSRW5_50') SYS_LSRW5_50: 066d 1405 ld $05,y 2484 ld(hi('shiftTable'),Y) #15 Logical shift right 5 bit (X >> 5) 066e 0075 ld $75 2485 ld('.sysLsrw5a') #16 Shift low byte 066f c21d st [$1d] 2486 st([vTmp]) #17 0670 0118 ld [$18] 2487 ld([vAC]) #18 0671 20e0 anda $e0 2488 anda(0b11100000) #19 0672 400f ora $0f 2489 ora( 0b00001111) #20 0673 e200 jmp y,ac 2490 jmp(Y,AC) #21 0674 fcff bra $ff 2491 bra(255) #22 bra shiftTable+255 2492 label('.sysLsrw5a') .sysLsrw5a: 0675 c218 st [$18] 2493 st([vAC]) #26 0676 0119 ld [$19] 2494 ld([vAC+1]) #27 Transfer bit 8:13 0677 8200 adda ac 2495 adda(AC) #28 0678 8200 adda ac 2496 adda(AC) #29 0679 8200 adda ac 2497 adda(AC) #30 067a 4118 ora [$18] 2498 ora([vAC]) #31 067b c218 st [$18] 2499 st([vAC]) #32 067c 0083 ld $83 2500 ld('.sysLsrw5b') #33 Shift high byte 067d c21d st [$1d] 2501 st([vTmp]) #34 067e 0119 ld [$19] 2502 ld([vAC+1]) #35 067f 20e0 anda $e0 2503 anda(0b11100000) #36 0680 400f ora $0f 2504 ora( 0b00001111) #37 0681 e200 jmp y,ac 2505 jmp(Y,AC) #38 0682 fcff bra $ff 2506 bra(255) #39 bra shiftTable+255 2507 label('.sysLsrw5b') .sysLsrw5b: 0683 c219 st [$19] 2508 st([vAC+1]) #44 0684 00e7 ld $e7 2509 ld(-50/2) #45 0685 1403 ld $03,y 2510 ld(hi('REENTER'),Y) #46 0686 e0cb jmp y,$cb 2511 jmp(Y,'REENTER') #47 2512 #nop() #48 2513 2514 label('SYS_LSRW6_48') SYS_LSRW6_48: 0687 1405 ld $05,y 2515 ld(hi('shiftTable'),Y) #15,44 Logical shift right 6 bit (X >> 6) 0688 008f ld $8f 2516 ld('.sysLsrw6a') #16 Shift low byte 0689 c21d st [$1d] 2517 st([vTmp]) #17 068a 0118 ld [$18] 2518 ld([vAC]) #18 068b 20c0 anda $c0 2519 anda(0b11000000) #19 068c 401f ora $1f 2520 ora( 0b00011111) #20 068d e200 jmp y,ac 2521 jmp(Y,AC) #21 068e fcff bra $ff 2522 bra(255) #22 bra shiftTable+255 2523 label('.sysLsrw6a') .sysLsrw6a: 068f c218 st [$18] 2524 st([vAC]) #26 0690 0119 ld [$19] 2525 ld([vAC+1]) #27 Transfer bit 8:13 0691 8200 adda ac 2526 adda(AC) #28 0692 8200 adda ac 2527 adda(AC) #29 0693 4118 ora [$18] 2528 ora([vAC]) #30 0694 c218 st [$18] 2529 st([vAC]) #31 0695 009c ld $9c 2530 ld('.sysLsrw6b') #32 Shift high byte 0696 c21d st [$1d] 2531 st([vTmp]) #33 0697 0119 ld [$19] 2532 ld([vAC+1]) #34 0698 20c0 anda $c0 2533 anda(0b11000000) #35 0699 401f ora $1f 2534 ora( 0b00011111) #36 069a e200 jmp y,ac 2535 jmp(Y,AC) #37 069b fcff bra $ff 2536 bra(255) #38 bra shiftTable+255 2537 label('.sysLsrw6b') .sysLsrw6b: 069c c219 st [$19] 2538 st([vAC+1]) #42 069d 1403 ld $03,y 2539 ld(hi('REENTER'),Y) #43 069e e0cb jmp y,$cb 2540 jmp(Y,'REENTER') #44 069f 00e8 ld $e8 2541 ld(-48/2) #45 2542 2543 label('SYS_LSLW4_46') SYS_LSLW4_46: 06a0 1405 ld $05,y 2544 ld(hi('shiftTable'),Y) #15 Logical shift left 4 bit (X << 4) 06a1 00ae ld $ae 2545 ld('.sysLsrl4') #16 06a2 c21d st [$1d] 2546 st([vTmp]) #17 06a3 0119 ld [$19] 2547 ld([vAC+1]) #18 06a4 8200 adda ac 2548 adda(AC) #19 06a5 8200 adda ac 2549 adda(AC) #20 06a6 8200 adda ac 2550 adda(AC) #21 06a7 8200 adda ac 2551 adda(AC) #22 06a8 c219 st [$19] 2552 st([vAC+1]) #23 06a9 0118 ld [$18] 2553 ld([vAC]) #24 06aa 20f0 anda $f0 2554 anda(0b11110000) #25 06ab 4007 ora $07 2555 ora( 0b00000111) #26 06ac e200 jmp y,ac 2556 jmp(Y,AC) #27 06ad fcff bra $ff 2557 bra(255) #28 bra shiftTable+255 2558 label('.sysLsrl4') .sysLsrl4: 06ae 4119 ora [$19] 2559 ora([vAC+1]) #32 06af c219 st [$19] 2560 st([vAC+1]) #33 06b0 0118 ld [$18] 2561 ld([vAC]) #34 06b1 8200 adda ac 2562 adda(AC) #35 06b2 8200 adda ac 2563 adda(AC) #36 06b3 8200 adda ac 2564 adda(AC) #37 06b4 8200 adda ac 2565 adda(AC) #38 06b5 c218 st [$18] 2566 st([vAC]) #39 06b6 00e9 ld $e9 2567 ld(-46/2) #40 06b7 1403 ld $03,y 2568 ld(hi('REENTER'),Y) #41 06b8 e0cb jmp y,$cb 2569 jmp(Y,'REENTER') #42 2570 #nop() #43 2571 2572 #----------------------------------------------------------------------- 2573 # Extension SYS_Read3_40 2574 #----------------------------------------------------------------------- 2575 2576 # Read 3 consecutive bytes from ROM 2577 # 2578 # Note: This function a bit obsolete, as it has very limited use. It's 2579 # effectively an application-specific SYS function for the Pictures 2580 # application from ROM v1. It requires the ROM data be organized 2581 # with trampoline3a and trampoline3b fragments, and their address 2582 # in ROM to be known. Better avoid using this. 2583 # 2584 # Variables: 2585 # sysArgs[0:2] Bytes (out) 2586 # sysArgs[6:7] ROM pointer (in) 2587 2588 label('SYS_Read3_40') SYS_Read3_40: 06b9 152b ld [$2b],y 2589 ld([sysArgs+7],Y) #15,32 06ba e079 jmp y,$79 2590 jmp(Y,128-7) #16 trampoline3a 06bb 012a ld [$2a] 2591 ld([sysArgs+6]) #17 2592 label('txReturn') txReturn: 06bc c226 st [$26] 2593 st([sysArgs+2]) #34 06bd 1403 ld $03,y 2594 ld(hi('REENTER'),Y) #35 06be e0cb jmp y,$cb 2595 jmp(Y,'REENTER') #36 06bf 00ec ld $ec 2596 ld(-40/2) #37 2597 2598 def trampoline3a(): 2599 """Read 3 bytes from ROM page""" 2600 while pc()&255 < 128-7: 2601 nop() 2602 bra(AC) #18 2603 C('Trampoline for page $%02x00 reading (entry)' % (pc()>>8)) 2604 bra(123) #19 2605 st([sysArgs+0]) #21 2606 ld([sysArgs+6]) #22 2607 adda(1) #23 2608 bra(AC) #24 2609 bra(250) #25 trampoline3b 2610 align(1, size=0x80) 2611 2612 def trampoline3b(): 2613 """Read 3 bytes from ROM page (continue)""" 2614 while pc()&255 < 256-6: 2615 nop() 2616 st([sysArgs+1]) #27 2617 C('Trampoline for page $%02x00 reading (continue)' % (pc()>>8)) 2618 ld([sysArgs+6]) #28 2619 adda(2) #29 2620 ld(hi('txReturn'),Y) #30 2621 bra(AC) #31 2622 jmp(Y,'txReturn') #32 2623 align(1, size=0x100) 2624 2625 #----------------------------------------------------------------------- 2626 # Extension SYS_Unpack_56 2627 #----------------------------------------------------------------------- 2628 2629 # Unpack 3 bytes into 4 pixels 2630 # 2631 # Variables: 2632 # sysArgs[0:2] Packed bytes (in) 2633 # sysArgs[0:3] Pixels (out) 2634 2635 label('SYS_Unpack_56') SYS_Unpack_56: 06c0 1407 ld $07,y 2636 ld(soundTable>>8,Y) #15 06c1 0126 ld [$26] 2637 ld([sysArgs+2]) #16 a[2]>>2 06c2 5003 ora $03,x 2638 ora(0x03,X) #17 06c3 0d00 ld [y,x] 2639 ld([Y,X]) #18 06c4 c227 st [$27] 2640 st([sysArgs+3]) #19 -> Pixel 3 2641 06c5 0126 ld [$26] 2642 ld([sysArgs+2]) #20 (a[2]&3)<<4 06c6 2003 anda $03 2643 anda(0x03) #21 06c7 8200 adda ac 2644 adda(AC) #22 06c8 8200 adda ac 2645 adda(AC) #23 06c9 8200 adda ac 2646 adda(AC) #24 06ca 8200 adda ac 2647 adda(AC) #25 06cb c226 st [$26] 2648 st([sysArgs+2]) #26 06cc 0125 ld [$25] 2649 ld([sysArgs+1]) #27 | a[1]>>4 06cd 5003 ora $03,x 2650 ora(0x03,X) #28 06ce 0d00 ld [y,x] 2651 ld([Y,X]) #29 06cf 5003 ora $03,x 2652 ora(0x03,X) #30 06d0 0d00 ld [y,x] 2653 ld([Y,X]) #31 06d1 4126 ora [$26] 2654 ora([sysArgs+2]) #32 06d2 c226 st [$26] 2655 st([sysArgs+2]) #33 -> Pixel 2 2656 06d3 0125 ld [$25] 2657 ld([sysArgs+1]) #34 (a[1]&15)<<2 06d4 200f anda $0f 2658 anda(0x0f) #35 06d5 8200 adda ac 2659 adda(AC) #36 06d6 8200 adda ac 2660 adda(AC) #37 06d7 c225 st [$25] 2661 st([sysArgs+1]) #38 2662 06d8 0124 ld [$24] 2663 ld([sysArgs+0]) #39 | a[0]>>6 06d9 5003 ora $03,x 2664 ora(0x03,X) #40 06da 0d00 ld [y,x] 2665 ld([Y,X]) #41 06db 5003 ora $03,x 2666 ora(0x03,X) #42 06dc 0d00 ld [y,x] 2667 ld([Y,X]) #43 06dd 5003 ora $03,x 2668 ora(0x03,X) #44 06de 0d00 ld [y,x] 2669 ld([Y,X]) #45 06df 4125 ora [$25] 2670 ora([sysArgs+1]) #46 06e0 c225 st [$25] 2671 st([sysArgs+1]) #47 -> Pixel 1 2672 06e1 0124 ld [$24] 2673 ld([sysArgs+0]) #48 a[1]&63 06e2 203f anda $3f 2674 anda(0x3f) #49 06e3 c224 st [$24] 2675 st([sysArgs+0]) #50 -> Pixel 0 2676 06e4 1403 ld $03,y 2677 ld(hi('REENTER'),Y) #51 06e5 e0cb jmp y,$cb 2678 jmp(Y,'REENTER') #52 06e6 00e4 ld $e4 2679 ld(-56/2) #53 2680 2681 #----------------------------------------------------------------------- 2682 # v6502 right shift instruction 2683 #----------------------------------------------------------------------- 2684 2685 label('v6502_lsr#30') v6502_lsr#30: 06e7 1525 ld [$25],y 2686 ld([v6502_ADH],Y) #30 Result 06e8 ce00 st [y,x] 2687 st([Y,X]) #31 06e9 c228 st [$28] 2688 st([v6502_Qz]) #32 Z flag 06ea c229 st [$29] 2689 st([v6502_Qn]) #33 N flag 06eb 140e ld $0e,y 2690 ld(hi('v6502_next'),Y) #34 06ec 00ed ld $ed 2691 ld(-38/2) #35 06ed e020 jmp y,$20 2692 jmp(Y,'v6502_next') #36 2693 #nop() #37 Overlap 2694 # 2695 label('v6502_ror#38') v6502_ror#38: 06ee 1525 ld [$25],y 2696 ld([v6502_ADH],Y) #38,38 Result 06ef 4119 ora [$19] 2697 ora([v6502_BI]) #39 Transfer bit 8 06f0 ce00 st [y,x] 2698 st([Y,X]) #40 06f1 c228 st [$28] 2699 st([v6502_Qz]) #41 Z flag 06f2 c229 st [$29] 2700 st([v6502_Qn]) #42 N flag 06f3 140e ld $0e,y 2701 ld(hi('v6502_next'),Y) #43 06f4 e020 jmp y,$20 2702 jmp(Y,'v6502_next') #44 06f5 00e9 ld $e9 2703 ld(-46/2) #45 2704 2705 #----------------------------------------------------------------------- 2706 # Reserved 2707 #----------------------------------------------------------------------- 2708 2709 # XXX Reserve space for LSRW? 2710 2711 #----------------------------------------------------------------------- 2712 # 2713 # $0700 ROM page 7-8: Gigatron font data 2714 # 2715 #----------------------------------------------------------------------- 2716 06f6 0200 nop 2717 align(0x100, size=0x100) 06f7 0200 nop 06f8 0200 nop * 10 times 2718 2719 label('font32up') 2720 for ch in range(32, 32+50): 2721 comment = 'Char %s' % repr(chr(ch)) 2722 for byte in font.font[ch-32]: 2723 ld(byte) font32up: 0700 0000 ld $00 ;Char ' ' 0701 0000 ld $00 0702 0000 ld $00 * 5 times 0705 0000 ld $00 ;Char '!' 0706 0000 ld $00 0707 00fa ld $fa 0708 0000 ld $00 0709 0000 ld $00 070a 00a0 ld $a0 ;Char '"' 070b 00c0 ld $c0 070c 0000 ld $00 070d 00a0 ld $a0 070e 00c0 ld $c0 070f 0028 ld $28 ;Char '#' 0710 00fe ld $fe 0711 0028 ld $28 0712 00fe ld $fe 0713 0028 ld $28 0714 0024 ld $24 ;Char '$' 0715 0054 ld $54 0716 00fe ld $fe 0717 0054 ld $54 0718 0048 ld $48 0719 00c4 ld $c4 ;Char '%' 071a 00c8 ld $c8 071b 0010 ld $10 071c 0026 ld $26 071d 0046 ld $46 071e 006c ld $6c ;Char '&' 071f 0092 ld $92 0720 006a ld $6a 0721 0004 ld $04 0722 000a ld $0a 0723 0000 ld $00 ;Char "'" 0724 00a0 ld $a0 0725 00c0 ld $c0 0726 0000 ld $00 0727 0000 ld $00 0728 0000 ld $00 ;Char '(' 0729 0038 ld $38 072a 0044 ld $44 072b 0082 ld $82 072c 0000 ld $00 072d 0000 ld $00 ;Char ')' 072e 0082 ld $82 072f 0044 ld $44 0730 0038 ld $38 0731 0000 ld $00 0732 0028 ld $28 ;Char '*' 0733 0010 ld $10 0734 007c ld $7c 0735 0010 ld $10 0736 0028 ld $28 0737 0010 ld $10 ;Char '+' 0738 0010 ld $10 0739 007c ld $7c 073a 0010 ld $10 073b 0010 ld $10 073c 0000 ld $00 ;Char ',' 073d 0005 ld $05 073e 0006 ld $06 073f 0000 ld $00 0740 0000 ld $00 0741 0010 ld $10 ;Char '-' 0742 0010 ld $10 0743 0010 ld $10 * 5 times 0746 0000 ld $00 ;Char '.' 0747 0002 ld $02 0748 0002 ld $02 0749 0000 ld $00 074a 0000 ld $00 074b 0000 ld $00 ;Char '/' 074c 0006 ld $06 074d 0018 ld $18 074e 0060 ld $60 074f 0000 ld $00 0750 007c ld $7c ;Char '0' 0751 008a ld $8a 0752 0092 ld $92 0753 00a2 ld $a2 0754 007c ld $7c 0755 0022 ld $22 ;Char '1' 0756 0042 ld $42 0757 00fe ld $fe 0758 0002 ld $02 0759 0002 ld $02 075a 0046 ld $46 ;Char '2' 075b 008a ld $8a 075c 0092 ld $92 075d 0092 ld $92 075e 0062 ld $62 075f 0044 ld $44 ;Char '3' 0760 0082 ld $82 0761 0092 ld $92 0762 0092 ld $92 0763 006c ld $6c 0764 0018 ld $18 ;Char '4' 0765 0028 ld $28 0766 0048 ld $48 0767 00fe ld $fe 0768 0008 ld $08 0769 00e4 ld $e4 ;Char '5' 076a 00a2 ld $a2 076b 00a2 ld $a2 076c 00a2 ld $a2 076d 009c ld $9c 076e 003c ld $3c ;Char '6' 076f 0052 ld $52 0770 0092 ld $92 0771 0092 ld $92 0772 000c ld $0c 0773 0080 ld $80 ;Char '7' 0774 008e ld $8e 0775 0090 ld $90 0776 00a0 ld $a0 0777 00c0 ld $c0 0778 006c ld $6c ;Char '8' 0779 0092 ld $92 077a 0092 ld $92 077b 0092 ld $92 077c 006c ld $6c 077d 0060 ld $60 ;Char '9' 077e 0092 ld $92 077f 0092 ld $92 0780 0094 ld $94 0781 0078 ld $78 0782 0000 ld $00 ;Char ':' 0783 0024 ld $24 0784 0024 ld $24 0785 0000 ld $00 0786 0000 ld $00 0787 0000 ld $00 ;Char ';' 0788 0025 ld $25 0789 0026 ld $26 078a 0000 ld $00 078b 0000 ld $00 078c 0010 ld $10 ;Char '<' 078d 0028 ld $28 078e 0044 ld $44 078f 0082 ld $82 0790 0000 ld $00 0791 0028 ld $28 ;Char '=' 0792 0028 ld $28 0793 0028 ld $28 * 5 times 0796 0000 ld $00 ;Char '>' 0797 0082 ld $82 0798 0044 ld $44 0799 0028 ld $28 079a 0010 ld $10 079b 0040 ld $40 ;Char '?' 079c 0080 ld $80 079d 008a ld $8a 079e 0090 ld $90 079f 0060 ld $60 07a0 007c ld $7c ;Char '@' 07a1 0082 ld $82 07a2 00ba ld $ba 07a3 00aa ld $aa 07a4 0078 ld $78 07a5 003e ld $3e ;Char 'A' 07a6 0048 ld $48 07a7 0088 ld $88 07a8 0048 ld $48 07a9 003e ld $3e 07aa 00fe ld $fe ;Char 'B' 07ab 0092 ld $92 07ac 0092 ld $92 07ad 0092 ld $92 07ae 006c ld $6c 07af 007c ld $7c ;Char 'C' 07b0 0082 ld $82 07b1 0082 ld $82 07b2 0082 ld $82 07b3 0044 ld $44 07b4 00fe ld $fe ;Char 'D' 07b5 0082 ld $82 07b6 0082 ld $82 07b7 0044 ld $44 07b8 0038 ld $38 07b9 00fe ld $fe ;Char 'E' 07ba 0092 ld $92 07bb 0092 ld $92 07bc 0092 ld $92 07bd 0082 ld $82 07be 00fe ld $fe ;Char 'F' 07bf 0090 ld $90 07c0 0090 ld $90 07c1 0090 ld $90 07c2 0080 ld $80 07c3 007c ld $7c ;Char 'G' 07c4 0082 ld $82 07c5 0082 ld $82 07c6 0092 ld $92 07c7 005c ld $5c 07c8 00fe ld $fe ;Char 'H' 07c9 0010 ld $10 07ca 0010 ld $10 07cb 0010 ld $10 07cc 00fe ld $fe 07cd 0000 ld $00 ;Char 'I' 07ce 0082 ld $82 07cf 00fe ld $fe 07d0 0082 ld $82 07d1 0000 ld $00 07d2 0004 ld $04 ;Char 'J' 07d3 0002 ld $02 07d4 0082 ld $82 07d5 00fc ld $fc 07d6 0080 ld $80 07d7 00fe ld $fe ;Char 'K' 07d8 0010 ld $10 07d9 0028 ld $28 07da 0044 ld $44 07db 0082 ld $82 07dc 00fe ld $fe ;Char 'L' 07dd 0002 ld $02 07de 0002 ld $02 07df 0002 ld $02 07e0 0002 ld $02 07e1 00fe ld $fe ;Char 'M' 07e2 0040 ld $40 07e3 0030 ld $30 07e4 0040 ld $40 07e5 00fe ld $fe 07e6 00fe ld $fe ;Char 'N' 07e7 0020 ld $20 07e8 0010 ld $10 07e9 0008 ld $08 07ea 00fe ld $fe 07eb 007c ld $7c ;Char 'O' 07ec 0082 ld $82 07ed 0082 ld $82 07ee 0082 ld $82 07ef 007c ld $7c 07f0 00fe ld $fe ;Char 'P' 07f1 0090 ld $90 07f2 0090 ld $90 07f3 0090 ld $90 07f4 0060 ld $60 07f5 007c ld $7c ;Char 'Q' 07f6 0082 ld $82 07f7 008a ld $8a 07f8 0084 ld $84 07f9 007a ld $7a 2724 comment = C(comment) 2725 07fa 0200 nop 2726 trampoline() 07fb fe00 bra ac ;+-----------------------------------+ 07fc fcfd bra $07fd ;| | 07fd 1404 ld $04,y ;| Trampoline for page $0700 lookups | 07fe e068 jmp y,$68 ;| | 07ff c218 st [$18] ;+-----------------------------------+ 2727 2728 #----------------------------------------------------------------------- 2729 2730 align(0x100, size=0x100) 2731 2732 label('font82up') 2733 for ch in range(32+50, 132): 2734 comment = 'Char %s' % repr(chr(ch)) 2735 for byte in font.font[ch-32]: 2736 ld(byte) font82up: 0800 00fe ld $fe ;Char 'R' 0801 0090 ld $90 0802 0098 ld $98 0803 0094 ld $94 0804 0062 ld $62 0805 0062 ld $62 ;Char 'S' 0806 0092 ld $92 0807 0092 ld $92 0808 0092 ld $92 0809 000c ld $0c 080a 0080 ld $80 ;Char 'T' 080b 0080 ld $80 080c 00fe ld $fe 080d 0080 ld $80 080e 0080 ld $80 080f 00fc ld $fc ;Char 'U' 0810 0002 ld $02 0811 0002 ld $02 0812 0002 ld $02 0813 00fc ld $fc 0814 00f0 ld $f0 ;Char 'V' 0815 000c ld $0c 0816 0002 ld $02 0817 000c ld $0c 0818 00f0 ld $f0 0819 00fe ld $fe ;Char 'W' 081a 0004 ld $04 081b 0018 ld $18 081c 0004 ld $04 081d 00fe ld $fe 081e 00c6 ld $c6 ;Char 'X' 081f 0028 ld $28 0820 0010 ld $10 0821 0028 ld $28 0822 00c6 ld $c6 0823 00e0 ld $e0 ;Char 'Y' 0824 0010 ld $10 0825 000e ld $0e 0826 0010 ld $10 0827 00e0 ld $e0 0828 0086 ld $86 ;Char 'Z' 0829 008a ld $8a 082a 0092 ld $92 082b 00a2 ld $a2 082c 00c2 ld $c2 082d 0000 ld $00 ;Char '[' 082e 00fe ld $fe 082f 0082 ld $82 0830 0082 ld $82 0831 0000 ld $00 0832 0000 ld $00 ;Char '\\' 0833 0060 ld $60 0834 0018 ld $18 0835 0006 ld $06 0836 0000 ld $00 0837 0000 ld $00 ;Char ']' 0838 0082 ld $82 0839 0082 ld $82 083a 00fe ld $fe 083b 0000 ld $00 083c 0020 ld $20 ;Char '^' 083d 0040 ld $40 083e 0080 ld $80 083f 0040 ld $40 0840 0020 ld $20 0841 0002 ld $02 ;Char '_' 0842 0002 ld $02 0843 0002 ld $02 * 5 times 0846 0000 ld $00 ;Char '`' 0847 0000 ld $00 0848 00c0 ld $c0 0849 00a0 ld $a0 084a 0000 ld $00 084b 0004 ld $04 ;Char 'a' 084c 002a ld $2a 084d 002a ld $2a 084e 002a ld $2a 084f 001e ld $1e 0850 00fe ld $fe ;Char 'b' 0851 0022 ld $22 0852 0022 ld $22 0853 0022 ld $22 0854 001c ld $1c 0855 001c ld $1c ;Char 'c' 0856 0022 ld $22 0857 0022 ld $22 0858 0022 ld $22 0859 0002 ld $02 085a 001c ld $1c ;Char 'd' 085b 0022 ld $22 085c 0022 ld $22 085d 0022 ld $22 085e 00fe ld $fe 085f 001c ld $1c ;Char 'e' 0860 002a ld $2a 0861 002a ld $2a 0862 002a ld $2a 0863 0018 ld $18 0864 0010 ld $10 ;Char 'f' 0865 007e ld $7e 0866 0090 ld $90 0867 0080 ld $80 0868 0040 ld $40 0869 0018 ld $18 ;Char 'g' 086a 0025 ld $25 086b 0025 ld $25 086c 0025 ld $25 086d 001e ld $1e 086e 00fe ld $fe ;Char 'h' 086f 0020 ld $20 0870 0020 ld $20 0871 0020 ld $20 0872 001e ld $1e 0873 0000 ld $00 ;Char 'i' 0874 0022 ld $22 0875 00be ld $be 0876 0002 ld $02 0877 0000 ld $00 0878 0002 ld $02 ;Char 'j' 0879 0001 ld $01 087a 0021 ld $21 087b 00be ld $be 087c 0000 ld $00 087d 00fe ld $fe ;Char 'k' 087e 0008 ld $08 087f 0018 ld $18 0880 0024 ld $24 0881 0002 ld $02 0882 0000 ld $00 ;Char 'l' 0883 0082 ld $82 0884 00fe ld $fe 0885 0002 ld $02 0886 0000 ld $00 0887 003e ld $3e ;Char 'm' 0888 0020 ld $20 0889 001c ld $1c 088a 0020 ld $20 088b 001e ld $1e 088c 003e ld $3e ;Char 'n' 088d 0010 ld $10 088e 0020 ld $20 088f 0020 ld $20 0890 001e ld $1e 0891 001c ld $1c ;Char 'o' 0892 0022 ld $22 0893 0022 ld $22 0894 0022 ld $22 0895 001c ld $1c 0896 003f ld $3f ;Char 'p' 0897 0024 ld $24 0898 0024 ld $24 0899 0024 ld $24 089a 0018 ld $18 089b 0018 ld $18 ;Char 'q' 089c 0024 ld $24 089d 0024 ld $24 089e 0024 ld $24 089f 003f ld $3f 08a0 003e ld $3e ;Char 'r' 08a1 0010 ld $10 08a2 0020 ld $20 08a3 0020 ld $20 08a4 0010 ld $10 08a5 0012 ld $12 ;Char 's' 08a6 002a ld $2a 08a7 002a ld $2a 08a8 002a ld $2a 08a9 0004 ld $04 08aa 0020 ld $20 ;Char 't' 08ab 00fc ld $fc 08ac 0022 ld $22 08ad 0002 ld $02 08ae 0004 ld $04 08af 003c ld $3c ;Char 'u' 08b0 0002 ld $02 08b1 0002 ld $02 08b2 0004 ld $04 08b3 003e ld $3e 08b4 0038 ld $38 ;Char 'v' 08b5 0004 ld $04 08b6 0002 ld $02 08b7 0004 ld $04 08b8 0038 ld $38 08b9 003c ld $3c ;Char 'w' 08ba 0002 ld $02 08bb 000c ld $0c 08bc 0002 ld $02 08bd 003c ld $3c 08be 0022 ld $22 ;Char 'x' 08bf 0014 ld $14 08c0 0008 ld $08 08c1 0014 ld $14 08c2 0022 ld $22 08c3 0038 ld $38 ;Char 'y' 08c4 0005 ld $05 08c5 0005 ld $05 08c6 0005 ld $05 08c7 003e ld $3e 08c8 0022 ld $22 ;Char 'z' 08c9 0026 ld $26 08ca 002a ld $2a 08cb 0032 ld $32 08cc 0022 ld $22 08cd 0010 ld $10 ;Char '{' 08ce 006c ld $6c 08cf 0082 ld $82 08d0 0082 ld $82 08d1 0000 ld $00 08d2 0000 ld $00 ;Char '|' 08d3 0000 ld $00 08d4 00fe ld $fe 08d5 0000 ld $00 08d6 0000 ld $00 08d7 0000 ld $00 ;Char '}' 08d8 0082 ld $82 08d9 0082 ld $82 08da 006c ld $6c 08db 0010 ld $10 08dc 0040 ld $40 ;Char '~' 08dd 0080 ld $80 08de 0040 ld $40 08df 0020 ld $20 08e0 0040 ld $40 08e1 00fe ld $fe ;Char '\x7f' 08e2 00fe ld $fe 08e3 00fe ld $fe * 5 times 08e6 0010 ld $10 ;Char '\x80' 08e7 0038 ld $38 08e8 0054 ld $54 08e9 0010 ld $10 08ea 0010 ld $10 08eb 0010 ld $10 ;Char '\x81' 08ec 0020 ld $20 08ed 007c ld $7c 08ee 0020 ld $20 08ef 0010 ld $10 08f0 0010 ld $10 ;Char '\x82' 08f1 0010 ld $10 08f2 0054 ld $54 08f3 0038 ld $38 08f4 0010 ld $10 08f5 0010 ld $10 ;Char '\x83' 08f6 0008 ld $08 08f7 007c ld $7c 08f8 0008 ld $08 08f9 0010 ld $10 2737 comment = C(comment) 2738 08fa 0200 nop 2739 trampoline() 08fb fe00 bra ac ;+-----------------------------------+ 08fc fcfd bra $08fd ;| | 08fd 1404 ld $04,y ;| Trampoline for page $0800 lookups | 08fe e068 jmp y,$68 ;| | 08ff c218 st [$18] ;+-----------------------------------+ 2740 2741 #----------------------------------------------------------------------- 2742 # 2743 # $0900 ROM page 9: Key table for music 2744 # 2745 #----------------------------------------------------------------------- 2746 2747 align(0x100, size=0x100) 2748 notes = 'CCDDEFFGGAAB' 2749 sampleRate = cpuClock / 200.0 / 4 2750 label('notesTable') notesTable: 0900 0000 ld $00 2751 ld(0) 0901 0000 ld $00 2752 ld(0) 2753 for i in range(0, 250, 2): 2754 j = i//2-1 2755 freq = 440.0*2.0**((j-57)/12.0) 2756 if j>=0 and freq <= sampleRate/2.0: 2757 key = int(round(32768 * freq / sampleRate)) 2758 octave, note = j//12, notes[j%12] 2759 sharp = '-' if notes[j%12-1] != note else '#' 2760 comment = '%s%s%s (%0.1f Hz)' % (note, sharp, octave, freq) 2761 ld(key&127); C(comment); ld(key>>7) 0902 0045 ld $45 ;C-0 (16.4 Hz) 0903 0000 ld $00 0904 0049 ld $49 ;C#0 (17.3 Hz) 0905 0000 ld $00 0906 004d ld $4d ;D-0 (18.4 Hz) 0907 0000 ld $00 0908 0052 ld $52 ;D#0 (19.4 Hz) 0909 0000 ld $00 090a 0056 ld $56 ;E-0 (20.6 Hz) 090b 0000 ld $00 090c 005c ld $5c ;F-0 (21.8 Hz) 090d 0000 ld $00 090e 0061 ld $61 ;F#0 (23.1 Hz) 090f 0000 ld $00 0910 0067 ld $67 ;G-0 (24.5 Hz) 0911 0000 ld $00 0912 006d ld $6d ;G#0 (26.0 Hz) 0913 0000 ld $00 0914 0073 ld $73 ;A-0 (27.5 Hz) 0915 0000 ld $00 0916 007a ld $7a ;A#0 (29.1 Hz) 0917 0000 ld $00 0918 0001 ld $01 ;B-0 (30.9 Hz) 0919 0001 ld $01 091a 0009 ld $09 ;C-1 (32.7 Hz) 091b 0001 ld $01 091c 0011 ld $11 ;C#1 (34.6 Hz) 091d 0001 ld $01 091e 001a ld $1a ;D-1 (36.7 Hz) 091f 0001 ld $01 0920 0023 ld $23 ;D#1 (38.9 Hz) 0921 0001 ld $01 0922 002d ld $2d ;E-1 (41.2 Hz) 0923 0001 ld $01 0924 0037 ld $37 ;F-1 (43.7 Hz) 0925 0001 ld $01 0926 0042 ld $42 ;F#1 (46.2 Hz) 0927 0001 ld $01 0928 004e ld $4e ;G-1 (49.0 Hz) 0929 0001 ld $01 092a 005a ld $5a ;G#1 (51.9 Hz) 092b 0001 ld $01 092c 0067 ld $67 ;A-1 (55.0 Hz) 092d 0001 ld $01 092e 0074 ld $74 ;A#1 (58.3 Hz) 092f 0001 ld $01 0930 0003 ld $03 ;B-1 (61.7 Hz) 0931 0002 ld $02 0932 0012 ld $12 ;C-2 (65.4 Hz) 0933 0002 ld $02 0934 0023 ld $23 ;C#2 (69.3 Hz) 0935 0002 ld $02 0936 0034 ld $34 ;D-2 (73.4 Hz) 0937 0002 ld $02 0938 0046 ld $46 ;D#2 (77.8 Hz) 0939 0002 ld $02 093a 005a ld $5a ;E-2 (82.4 Hz) 093b 0002 ld $02 093c 006e ld $6e ;F-2 (87.3 Hz) 093d 0002 ld $02 093e 0004 ld $04 ;F#2 (92.5 Hz) 093f 0003 ld $03 0940 001b ld $1b ;G-2 (98.0 Hz) 0941 0003 ld $03 0942 0033 ld $33 ;G#2 (103.8 Hz) 0943 0003 ld $03 0944 004d ld $4d ;A-2 (110.0 Hz) 0945 0003 ld $03 0946 0069 ld $69 ;A#2 (116.5 Hz) 0947 0003 ld $03 0948 0006 ld $06 ;B-2 (123.5 Hz) 0949 0004 ld $04 094a 0025 ld $25 ;C-3 (130.8 Hz) 094b 0004 ld $04 094c 0045 ld $45 ;C#3 (138.6 Hz) 094d 0004 ld $04 094e 0068 ld $68 ;D-3 (146.8 Hz) 094f 0004 ld $04 0950 000c ld $0c ;D#3 (155.6 Hz) 0951 0005 ld $05 0952 0033 ld $33 ;E-3 (164.8 Hz) 0953 0005 ld $05 0954 005c ld $5c ;F-3 (174.6 Hz) 0955 0005 ld $05 0956 0008 ld $08 ;F#3 (185.0 Hz) 0957 0006 ld $06 0958 0036 ld $36 ;G-3 (196.0 Hz) 0959 0006 ld $06 095a 0067 ld $67 ;G#3 (207.7 Hz) 095b 0006 ld $06 095c 001b ld $1b ;A-3 (220.0 Hz) 095d 0007 ld $07 095e 0052 ld $52 ;A#3 (233.1 Hz) 095f 0007 ld $07 0960 000c ld $0c ;B-3 (246.9 Hz) 0961 0008 ld $08 0962 0049 ld $49 ;C-4 (261.6 Hz) 0963 0008 ld $08 0964 000b ld $0b ;C#4 (277.2 Hz) 0965 0009 ld $09 0966 0050 ld $50 ;D-4 (293.7 Hz) 0967 0009 ld $09 0968 0019 ld $19 ;D#4 (311.1 Hz) 0969 000a ld $0a 096a 0067 ld $67 ;E-4 (329.6 Hz) 096b 000a ld $0a 096c 0039 ld $39 ;F-4 (349.2 Hz) 096d 000b ld $0b 096e 0010 ld $10 ;F#4 (370.0 Hz) 096f 000c ld $0c 0970 006c ld $6c ;G-4 (392.0 Hz) 0971 000c ld $0c 0972 004e ld $4e ;G#4 (415.3 Hz) 0973 000d ld $0d 0974 0035 ld $35 ;A-4 (440.0 Hz) 0975 000e ld $0e 0976 0023 ld $23 ;A#4 (466.2 Hz) 0977 000f ld $0f 0978 0017 ld $17 ;B-4 (493.9 Hz) 0979 0010 ld $10 097a 0013 ld $13 ;C-5 (523.3 Hz) 097b 0011 ld $11 097c 0015 ld $15 ;C#5 (554.4 Hz) 097d 0012 ld $12 097e 001f ld $1f ;D-5 (587.3 Hz) 097f 0013 ld $13 0980 0032 ld $32 ;D#5 (622.3 Hz) 0981 0014 ld $14 0982 004d ld $4d ;E-5 (659.3 Hz) 0983 0015 ld $15 0984 0072 ld $72 ;F-5 (698.5 Hz) 0985 0016 ld $16 0986 0020 ld $20 ;F#5 (740.0 Hz) 0987 0018 ld $18 0988 0058 ld $58 ;G-5 (784.0 Hz) 0989 0019 ld $19 098a 001c ld $1c ;G#5 (830.6 Hz) 098b 001b ld $1b 098c 006b ld $6b ;A-5 (880.0 Hz) 098d 001c ld $1c 098e 0046 ld $46 ;A#5 (932.3 Hz) 098f 001e ld $1e 0990 002f ld $2f ;B-5 (987.8 Hz) 0991 0020 ld $20 0992 0025 ld $25 ;C-6 (1046.5 Hz) 0993 0022 ld $22 0994 002a ld $2a ;C#6 (1108.7 Hz) 0995 0024 ld $24 0996 003f ld $3f ;D-6 (1174.7 Hz) 0997 0026 ld $26 0998 0064 ld $64 ;D#6 (1244.5 Hz) 0999 0028 ld $28 099a 001a ld $1a ;E-6 (1318.5 Hz) 099b 002b ld $2b 099c 0063 ld $63 ;F-6 (1396.9 Hz) 099d 002d ld $2d 099e 003f ld $3f ;F#6 (1480.0 Hz) 099f 0030 ld $30 09a0 0031 ld $31 ;G-6 (1568.0 Hz) 09a1 0033 ld $33 09a2 0038 ld $38 ;G#6 (1661.2 Hz) 09a3 0036 ld $36 09a4 0056 ld $56 ;A-6 (1760.0 Hz) 09a5 0039 ld $39 09a6 000d ld $0d ;A#6 (1864.7 Hz) 09a7 003d ld $3d 09a8 005e ld $5e ;B-6 (1975.5 Hz) 09a9 0040 ld $40 09aa 004b ld $4b ;C-7 (2093.0 Hz) 09ab 0044 ld $44 09ac 0055 ld $55 ;C#7 (2217.5 Hz) 09ad 0048 ld $48 09ae 007e ld $7e ;D-7 (2349.3 Hz) 09af 004c ld $4c 09b0 0048 ld $48 ;D#7 (2489.0 Hz) 09b1 0051 ld $51 09b2 0034 ld $34 ;E-7 (2637.0 Hz) 09b3 0056 ld $56 09b4 0046 ld $46 ;F-7 (2793.8 Hz) 09b5 005b ld $5b 09b6 007f ld $7f ;F#7 (2960.0 Hz) 09b7 0060 ld $60 09b8 0061 ld $61 ;G-7 (3136.0 Hz) 09b9 0066 ld $66 09ba 006f ld $6f ;G#7 (3322.4 Hz) 09bb 006c ld $6c 09bc 002c ld $2c ;A-7 (3520.0 Hz) 09bd 0073 ld $73 09be 001a ld $1a ;A#7 (3729.3 Hz) 09bf 007a ld $7a 2762 09c0 0200 nop 2763 trampoline() 09c1 0200 nop 09c2 0200 nop * 59 times 09fb fe00 bra ac ;+-----------------------------------+ 09fc fcfd bra $09fd ;| | 09fd 1404 ld $04,y ;| Trampoline for page $0900 lookups | 09fe e068 jmp y,$68 ;| | 09ff c218 st [$18] ;+-----------------------------------+ 2764 2765 #----------------------------------------------------------------------- 2766 # 2767 # $0a00 ROM page 10: Inversion table 2768 # 2769 #----------------------------------------------------------------------- 2770 2771 align(0x100, size=0x100) 2772 label('invTable') 2773 2774 # Unit 64, table offset 16 (=1/4), value offset 1: (x+16)*(y+1) == 64*64 - e 2775 for i in range(251): invTable: 0a00 00ff ld $ff 2776 ld(4096//(i+16)-1) 0a01 00ef ld $ef 0a02 00e2 ld $e2 0a03 00d6 ld $d6 0a04 00cb ld $cb 0a05 00c2 ld $c2 0a06 00b9 ld $b9 0a07 00b1 ld $b1 0a08 00a9 ld $a9 0a09 00a2 ld $a2 0a0a 009c ld $9c 0a0b 0096 ld $96 0a0c 0091 ld $91 0a0d 008c ld $8c 0a0e 0087 ld $87 0a0f 0083 ld $83 0a10 007f ld $7f 0a11 007b ld $7b 0a12 0077 ld $77 0a13 0074 ld $74 0a14 0070 ld $70 0a15 006d ld $6d 0a16 006a ld $6a 0a17 0068 ld $68 0a18 0065 ld $65 0a19 0062 ld $62 0a1a 0060 ld $60 0a1b 005e ld $5e 0a1c 005c ld $5c 0a1d 005a ld $5a 0a1e 0058 ld $58 0a1f 0056 ld $56 0a20 0054 ld $54 0a21 0052 ld $52 0a22 0050 ld $50 0a23 004f ld $4f 0a24 004d ld $4d 0a25 004c ld $4c 0a26 004a ld $4a 0a27 0049 ld $49 0a28 0048 ld $48 0a29 0046 ld $46 0a2a 0045 ld $45 0a2b 0044 ld $44 0a2c 0043 ld $43 0a2d 0042 ld $42 0a2e 0041 ld $41 0a2f 0040 ld $40 0a30 003f ld $3f 0a31 003e ld $3e 0a32 003d ld $3d 0a33 003c ld $3c 0a34 003b ld $3b 0a35 003a ld $3a 0a36 0039 ld $39 0a37 0038 ld $38 0a38 0037 ld $37 0a39 0037 ld $37 0a3a 0036 ld $36 0a3b 0035 ld $35 0a3c 0034 ld $34 0a3d 0034 ld $34 0a3e 0033 ld $33 0a3f 0032 ld $32 0a40 0032 ld $32 0a41 0031 ld $31 0a42 0030 ld $30 0a43 0030 ld $30 0a44 002f ld $2f 0a45 002f ld $2f 0a46 002e ld $2e 0a47 002e ld $2e 0a48 002d ld $2d 0a49 002d ld $2d 0a4a 002c ld $2c 0a4b 002c ld $2c 0a4c 002b ld $2b 0a4d 002b ld $2b 0a4e 002a ld $2a 0a4f 002a ld $2a 0a50 0029 ld $29 0a51 0029 ld $29 0a52 0028 ld $28 0a53 0028 ld $28 0a54 0027 ld $27 0a55 0027 ld $27 0a56 0027 ld $27 0a57 0026 ld $26 0a58 0026 ld $26 0a59 0026 ld $26 0a5a 0025 ld $25 0a5b 0025 ld $25 0a5c 0024 ld $24 0a5d 0024 ld $24 0a5e 0024 ld $24 0a5f 0023 ld $23 0a60 0023 ld $23 0a61 0023 ld $23 0a62 0022 ld $22 0a63 0022 ld $22 0a64 0022 ld $22 0a65 0022 ld $22 0a66 0021 ld $21 0a67 0021 ld $21 0a68 0021 ld $21 0a69 0020 ld $20 0a6a 0020 ld $20 0a6b 0020 ld $20 0a6c 0020 ld $20 0a6d 001f ld $1f 0a6e 001f ld $1f 0a6f 001f ld $1f 0a70 001f ld $1f 0a71 001e ld $1e 0a72 001e ld $1e 0a73 001e ld $1e 0a74 001e ld $1e 0a75 001d ld $1d 0a76 001d ld $1d 0a77 001d ld $1d 0a78 001d ld $1d 0a79 001c ld $1c 0a7a 001c ld $1c 0a7b 001c ld $1c * 5 times 0a7e 001b ld $1b 0a7f 001b ld $1b 0a80 001b ld $1b * 5 times 0a83 001a ld $1a 0a84 001a ld $1a 0a85 001a ld $1a * 5 times 0a88 0019 ld $19 0a89 0019 ld $19 0a8a 0019 ld $19 * 6 times 0a8e 0018 ld $18 0a8f 0018 ld $18 0a90 0018 ld $18 * 6 times 0a94 0017 ld $17 0a95 0017 ld $17 0a96 0017 ld $17 * 7 times 0a9b 0016 ld $16 0a9c 0016 ld $16 0a9d 0016 ld $16 * 8 times 0aa3 0015 ld $15 0aa4 0015 ld $15 0aa5 0015 ld $15 * 8 times 0aab 0014 ld $14 0aac 0014 ld $14 0aad 0014 ld $14 * 9 times 0ab4 0013 ld $13 0ab5 0013 ld $13 0ab6 0013 ld $13 * 9 times 0abd 0012 ld $12 0abe 0012 ld $12 0abf 0012 ld $12 * 11 times 0ac8 0011 ld $11 0ac9 0011 ld $11 0aca 0011 ld $11 * 12 times 0ad4 0010 ld $10 0ad5 0010 ld $10 0ad6 0010 ld $10 * 13 times 0ae1 000f ld $0f 0ae2 000f ld $0f 0ae3 000f ld $0f * 16 times 0af1 000e ld $0e 0af2 000e ld $0e 0af3 000e ld $0e * 10 times 2777 2778 trampoline() 0afb fe00 bra ac ;+-----------------------------------+ 0afc fcfd bra $0afd ;| | 0afd 1404 ld $04,y ;| Trampoline for page $0a00 lookups | 0afe e068 jmp y,$68 ;| | 0aff c218 st [$18] ;+-----------------------------------+ 2779 2780 #----------------------------------------------------------------------- 2781 # 2782 # $0d00 ROM page 11: More SYS functions 2783 # 2784 #----------------------------------------------------------------------- 2785 2786 align(0x100, size=0x100) 2787 2788 #----------------------------------------------------------------------- 2789 # Extension SYS_SetMode_v2_80 2790 #----------------------------------------------------------------------- 2791 2792 # Set video mode to 0 to 3 black scanlines per pixel line. 2793 # 2794 # Mainly for making the MODE command available in Tiny BASIC, so that 2795 # the user can experiment. It's adviced to refrain from using 2796 # SYS_SetMode_v2_80 in regular applications. Video mode is a deeply 2797 # personal preference, and the programmer shouldn't overrule the user 2798 # in that choice. The Gigatron philisophy is that the end user has 2799 # the final say on what happens on the system, not the application, 2800 # even if that implies a degraded performance. This doesn't mean that 2801 # all applications must work well in all video modes: mode 1 is still 2802 # the default. If an application really doesn't work at all in that 2803 # mode, it's acceptable to change mode once after loading. 2804 # 2805 # There's no "SYS_GetMode" function. 2806 # 2807 # Variables: 2808 # vAC bit 0:1 Mode: 2809 # 0 "ABCD" -> Full mode (slowest) 2810 # 1 "ABC-" -> Default mode after reset 2811 # 2 "A-C-" -> at67's mode 2812 # 3 "A---" -> HGM's mode 2813 # vAC bit 2:15 Ignored bits and should be 0 2814 # 2815 # Special values (ROM v4): 2816 # vAC = 1975 Zombie mode (no video signals, no input, 2817 # no blinkenlights). 2818 # vAC = -1 Leave zombie mode and restore previous mode. 2819 2820 # Actual duration is <80 cycles, but keep some room for future extensions 2821 label('SYS_SetMode_v2_80') SYS_SetMode_v2_80: 0b00 140b ld $0b,y 2822 ld(hi('sys_SetMode'),Y) #15 0b01 e054 jmp y,$54 2823 jmp(Y,'sys_SetMode') #16 0b02 011e ld [$1e] 2824 ld([vReturn]) #17 2825 2826 #----------------------------------------------------------------------- 2827 # Extension SYS_SetMemory_v2_54 2828 #----------------------------------------------------------------------- 2829 2830 # SYS function for setting 1..256 bytes 2831 # 2832 # sysArgs[0] Copy count (in, changed) 2833 # sysArgs[1] Copy value (in) 2834 # sysArgs[2:3] Destination address (in, changed) 2835 # 2836 # Sets up to 8 bytes per invocation before restarting itself through vCPU. 2837 # Doesn't wrap around page boundary. Can run 3 times per 148-cycle time slice. 2838 # All combined that gives a 300% speedup over ROMv4 and before. 2839 2840 label('SYS_SetMemory_v2_54') SYS_SetMemory_v2_54: 0b03 0124 ld [$24] 2841 ld([sysArgs+0]) #15 2842 bra('sys_SetMemory#18') #16 0b04 fc18 bra sys_SetMemory#18 0b05 1126 ld [$26],x 2843 ld([sysArgs+2],X) #17 2844 2845 #----------------------------------------------------------------------- 2846 # Extension SYS_SendSerial1_v3_80 2847 #----------------------------------------------------------------------- 2848 2849 # SYS function for sending data over serial controller port using 2850 # pulse width modulation of the vertical sync signal. 2851 # 2852 # Variables: 2853 # sysArgs[0:1] Source address (in, changed) 2854 # sysArgs[2] Start bit mask (typically 1) (in, changed) 2855 # sysArgs[3] Number of send frames X (in, changed) 2856 # 2857 # The sending will abort if input data is detected on the serial port. 2858 # Returns 0 in case of all bits sent, or <>0 in case of abort 2859 # 2860 # This modulates the next upcoming X vertical pulses with the supplied 2861 # data. A zero becomes a 7 line vPulse, a one will be 9 lines. 2862 # After that, the vPulse width falls back to 8 lines (idle). 2863 2864 label('SYS_SendSerial1_v3_80') SYS_SendSerial1_v3_80: 0b06 0109 ld [$09] 2865 ld([videoY]) #15 2866 bra('sys_SendSerial1') #16 0b07 fc83 bra sys_SendSerial1 0b08 60b3 xora $b3 2867 xora(videoYline0) #17 First line of vertical blank 2868 2869 #----------------------------------------------------------------------- 2870 # Extension SYS_ExpanderControl_v4_40 2871 #----------------------------------------------------------------------- 2872 2873 # Sets the I/O and RAM expander's control register 2874 # 2875 # Variables: 2876 # vAC bit 2 Device enable /SS0 2877 # bit 3 Device enable /SS1 2878 # bit 4 Device enable /SS2 2879 # bit 5 Device enable /SS3 2880 # bit 6 Banking B0 2881 # bit 7 Banking B1 2882 # bit 15 Data out MOSI 2883 # sysArgs[7] Cache for control state (written to) 2884 # 2885 # Intended for prototyping, and probably too low-level for most applications 2886 # Still there's a safeguard: it's not possible to disable RAM using this 2887 2888 label('SYS_ExpanderControl_v4_40') SYS_ExpanderControl_v4_40: 0b09 140c ld $0c,y 2889 ld(hi('sys_ExpanderControl'),Y) #15 0b0a e0fb jmp y,$fb 2890 jmp(Y,'sys_ExpanderControl') #16 0b0b 00fc ld $fc 2891 ld(0b11111100) #17 Safety (SCLK=0) 2892 # ^^^^^^^^ 2893 # |||||||`-- SCLK 2894 # ||||||`--- Not connected 2895 # |||||`---- /SS0 2896 # ||||`----- /SS1 2897 # |||`------ /SS2 2898 # ||`------- /SS3 2899 # |`-------- B0 2900 # `--------- B1 2901 2902 #----------------------------------------------------------------------- 2903 # Extension SYS_Run6502_v4_80 2904 #----------------------------------------------------------------------- 2905 2906 # Transfer control to v6502 2907 # 2908 # Calling 6502 code from vCPU goes (only) through this SYS function. 2909 # Directly modifying the vCpuSelect variable is unreliable. The 2910 # control transfer is immediate, without waiting for the current 2911 # time slice to end or first returning to vCPU. 2912 # 2913 # vCPU code and v6502 code can interoperate without much hassle: 2914 # - The v6502 program counter is vLR, and v6502 doesn't touch vPC 2915 # - Returning to vCPU is with the BRK instruction 2916 # - BRK doesn't dump process state on the stack 2917 # - vCPU can save/restore the vLR with PUSH/POP 2918 # - Stacks are shared, vAC is shared 2919 # - vAC can indicate what the v6502 code wants. vAC+1 will be cleared 2920 # - Alternative is to leave a word in sysArgs[6:7] (v6502 X and Y registers) 2921 # - Another way is to set vPC before BRK, and vCPU will continue there(+2) 2922 # 2923 # Calling v6502 code from vCPU looks like this: 2924 # LDWI SYS_Run6502_v4_80 2925 # STW sysFn 2926 # LDWI $6502_start_address 2927 # STW vLR 2928 # SYS 80 2929 # 2930 # Variables: 2931 # vAC Accumulator 2932 # vLR Program Counter 2933 # vSP Stack Pointer (+1) 2934 # sysArgs[6] Index Register X 2935 # sysArgs[7] Index Register Y 2936 # For info: 2937 # sysArgs[0:1] Address Register, free to clobber 2938 # sysArgs[2] Instruction Register, free to clobber 2939 # sysArgs[3:5] Flags, don't touch 2940 # 2941 # Implementation details:: 2942 # 2943 # The time to reserve for this transition is the maximum time 2944 # between NEXT and v6502_check. This is 2945 # SYS call duration + 2*v6502_maxTicks + (v6502_overhead - vCPU_overhead) 2946 # = 22 + 28 + (11 - 9) = 62 cycles. 2947 # So reserving 80 cycles is future proof. This isn't overhead, as it includes 2948 # the fetching of the first 6502 opcode and its operands.. 2949 # 2950 # 0 10 28=0 9 2951 # ---+----+---------+------------+------------------+-----------+--- 2952 # video | nop| runVcpu | ENTER | At least one ins | EXIT | video 2953 # ---+----+---------+------------+------------------+-----------+--- 2954 # sync prelude ENTER-to-ins ins-to-NEXT NEXT-to-video 2955 # |<-->| 2956 # 0/1 |<------->| 2957 # 5 |<----------------------------->| 2958 # runVCpu_overhead 28 |<--------->| 2959 # 2*maxTicks 9 2960 # vCPU_overhead 2961 # 2962 # 0 21 38=0 11 2963 # ---+----+---------+----------------+--------------------+-----------+--- 2964 # video | nop| runVcpu | v6502_ENTER | At least one fetch |v6502_exitB| video 2965 # ---+----+---------+----------------+--------------------+-----------+--- 2966 # sync prelude enter-to-fetch fetch-to-check check-to-video 2967 # |<-->| 2968 # 0/1 |<------->| 2969 # 5 |<----------------------------------->| 2970 # runVcpu_overhead 38 |<--------->| 2971 # 2*v6520_maxTicks 11 2972 # v6502_overhead 2973 2974 label('SYS_Run6502_v4_80') SYS_Run6502_v4_80: 0b0c 140d ld $0d,y 2975 ld(hi('sys_v6502'),Y) #15 0b0d e07f jmp y,$7f 2976 jmp(Y,'sys_v6502') #16 0b0e 000d ld $0d 2977 ld(hi('v6502_ENTER')) #17 Activate v6502 2978 2979 #----------------------------------------------------------------------- 2980 # Extension SYS_ResetWaveforms_v4_50 2981 #----------------------------------------------------------------------- 2982 2983 # soundTable[4x+0] = sawtooth, to be modified into metallic/noise 2984 # soundTable[4x+1] = pulse 2985 # soundTable[4x+2] = triangle 2986 # soundTable[4x+3] = sawtooth, also useful to right shift 2 bits 2987 2988 label('SYS_ResetWaveforms_v4_50') SYS_ResetWaveforms_v4_50: 0b0f 1412 ld $12,y 2989 ld(hi('sys_ResetWaveforms'),Y) #15 Initial setup of waveforms. [vAC+0]=i 0b10 e0ae jmp y,$ae 2990 jmp(Y,'sys_ResetWaveforms') #16 0b11 1407 ld $07,y 2991 ld(soundTable>>8,Y) #17 2992 2993 #----------------------------------------------------------------------- 2994 # Extension SYS_ShuffleNoise_v4_46 2995 #----------------------------------------------------------------------- 2996 2997 # Use simple 6-bits variation of RC4 to permutate waveform 0 in soundTable 2998 2999 label('SYS_ShuffleNoise_v4_46') SYS_ShuffleNoise_v4_46: 0b12 1412 ld $12,y 3000 ld(hi('sys_ShuffleNoise'),Y) #15 Shuffle soundTable[4i+0]. [vAC+0]=4j, [vAC+1]=4i 0b13 e0cf jmp y,$cf 3001 jmp(Y,'sys_ShuffleNoise') #16 0b14 1407 ld $07,y 3002 ld(soundTable>>8,Y) #17 3003 3004 #----------------------------------------------------------------------- 3005 # Extension SYS_SpiExchangeBytes_v4_134 3006 #----------------------------------------------------------------------- 3007 3008 # Send AND receive 1..256 bytes over SPI interface 3009 3010 # Variables: 3011 # sysArgs[0] Page index start, for both send/receive (in, changed) 3012 # sysArgs[1] Memory page for send data (in) 3013 # sysArgs[2] Page index stop (in) 3014 # sysArgs[3] Memory page for receive data (in) 3015 # sysArgs[4] Scratch (changed) 3016 3017 label('SYS_SpiExchangeBytes_v4_134') SYS_SpiExchangeBytes_v4_134: 0b15 140d ld $0d,y 3018 ld(hi('sys_SpiExchangeBytes'),Y)#15 0b16 e009 jmp y,$09 3019 jmp(Y,'sys_SpiExchangeBytes') #16 0b17 1401 ld $01,y 3020 ld(hi(ctrlBits),Y) #17 Control state as saved by SYS_ExpanderControl 3021 3022 #----------------------------------------------------------------------- 3023 # Implementations 3024 #----------------------------------------------------------------------- 3025 3026 # SYS_SetMemory_54 implementation 3027 label('sys_SetMemory#18') sys_SetMemory#18: 0b18 1527 ld [$27],y 3028 ld([sysArgs+3],Y) #18 0b19 f83c ble .sysSb#21 3029 ble('.sysSb#21') #19 Enter fast lane if >=128 or at 0 (-> 256) 0b1a a008 suba $08 3030 suba(8) #20 0b1b f43e bge .sysSb#23 3031 bge('.sysSb#23') #21 Or when >=8 0b1c c224 st [$24] 3032 st([sysArgs+0]) #22 0b1d 2004 anda $04 3033 anda(4) #23 0b1e f025 beq .sysSb#26 3034 beq('.sysSb#26') #24 0b1f 0125 ld [$25] 3035 ld([sysArgs+1]) #25 Set 4 pixels 0b20 de00 st [y,x++] 3036 st([Y,Xpp]) #26 0b21 de00 st [y,x++] 3037 st([Y,Xpp]) #27 0b22 de00 st [y,x++] 3038 st([Y,Xpp]) #28 0b23 fc28 bra .sysSb#31 3039 bra('.sysSb#31') #29 0b24 de00 st [y,x++] 3040 st([Y,Xpp]) #30 3041 label('.sysSb#26') .sysSb#26: 0b25 0001 ld $01 3042 wait(31-26) #26 0b26 ec26 bne $0b26 0b27 a001 suba $01 3043 label('.sysSb#31') .sysSb#31: 0b28 0124 ld [$24] 3044 ld([sysArgs+0]) #31 0b29 2002 anda $02 3045 anda(2) #32 0b2a f02f beq .sysSb#35 3046 beq('.sysSb#35') #33 0b2b 0125 ld [$25] 3047 ld([sysArgs+1]) #34 Set 2 pixels 0b2c de00 st [y,x++] 3048 st([Y,Xpp]) #35 0b2d fc32 bra .sysSb#38 3049 bra('.sysSb#38') #36 0b2e de00 st [y,x++] 3050 st([Y,Xpp]) #37 3051 label('.sysSb#35') .sysSb#35: 0b2f 0200 nop 3052 wait(38-35) #35 0b30 0200 nop 0b31 0200 nop 3053 label('.sysSb#38') .sysSb#38: 0b32 0124 ld [$24] 3054 ld([sysArgs+0]) #38 0b33 2001 anda $01 3055 anda(1) #39 0b34 f037 beq $0b37 3056 beq(pc()+3) #40 0b35 fc38 bra $0b38 3057 bra(pc()+3) #41 0b36 0125 ld [$25] 3058 ld([sysArgs+1]) #42 Set 1 pixel 0b37 0d00 ld [y,x] 3059 ld([Y,X]) #42(!) No change 0b38 ce00 st [y,x] 3060 st([Y,X]) #43 0b39 1403 ld $03,y 3061 ld(hi('NEXTY'),Y) #44 Return 0b3a e000 jmp y,$00 3062 jmp(Y,'NEXTY') #45 All done 0b3b 00e8 ld $e8 3063 ld(-48/2) #46 3064 label('.sysSb#21') .sysSb#21: 0b3c 0200 nop 3065 nop() #21 0b3d c224 st [$24] 3066 st([sysArgs+0]) #22 3067 label('.sysSb#23') .sysSb#23: 0b3e 0125 ld [$25] 3068 ld([sysArgs+1]) #23 Set 8 pixels 0b3f de00 st [y,x++] 3069 st([Y,Xpp]) #24 0b40 de00 st [y,x++] 3070 st([Y,Xpp]) #25 0b41 de00 st [y,x++] 3071 st([Y,Xpp]) #26 0b42 de00 st [y,x++] 3072 st([Y,Xpp]) #27 0b43 de00 st [y,x++] 3073 st([Y,Xpp]) #28 0b44 de00 st [y,x++] 3074 st([Y,Xpp]) #29 0b45 de00 st [y,x++] 3075 st([Y,Xpp]) #30 0b46 de00 st [y,x++] 3076 st([Y,Xpp]) #31 0b47 0126 ld [$26] 3077 ld([sysArgs+2]) #32 Advance write pointer 0b48 8008 adda $08 3078 adda(8) #33 0b49 c226 st [$26] 3079 st([sysArgs+2]) #34 0b4a 0124 ld [$24] 3080 ld([sysArgs+0]) #35 0b4b f04e beq $0b4e 3081 beq(pc()+3) #36 0b4c fc4f bra $0b4f 3082 bra(pc()+3) #37 0b4d 00fe ld $fe 3083 ld(-2) #38 Self-restart when more to do 0b4e 0000 ld $00 3084 ld(0) #38(!) 0b4f 8116 adda [$16] 3085 adda([vPC]) #39 0b50 c216 st [$16] 3086 st([vPC]) #40 0b51 1403 ld $03,y 3087 ld(hi('REENTER'),Y) #41 0b52 e0cb jmp y,$cb 3088 jmp(Y,'REENTER') #42 0b53 00e9 ld $e9 3089 ld(-46/2) #43 3090 3091 # SYS_SetMode_80 implementation 3092 label('sys_SetMode') sys_SetMode: 0b54 ec57 bne $0b57 3093 bne(pc()+3) #18 0b55 fc57 bra $0b57 3094 bra(pc()+2) #19 0b56 0003 ld $03 3095 ld('startVideo') #20 First enable video if disabled 0b57 c21e st [$1e] 3096 st([vReturn]) #20,21 0b58 0119 ld [$19] 3097 ld([vAC+1]) #22 0b59 f063 beq .sysSm#25 3098 beq('.sysSm#25') #23 0b5a 1403 ld $03,y 3099 ld(hi('REENTER'),Y) #24 0b5b 6118 xora [$18] 3100 xora([vAC]) #25 0b5c 60b0 xora $b0 3101 xora((1975>>8)^(1975&255)) #26 Poor man\'s 1975 detection 0b5d ec60 bne $0b60 3102 bne(pc()+3) #27 0b5e fc61 bra $0b61 3103 bra(pc()+3) #28 3104 assert videoZ == 0x0100 0b5f c21e st [$1e] 3105 st([vReturn]) #29 DISABLE video/audio/serial/etc 0b60 0200 nop 3106 nop() #29(!) Ignore and return 0b61 e0cb jmp y,$cb 3107 jmp(Y,'REENTER') #30 0b62 00ef ld $ef 3108 ld(-34/2) #31 3109 label('.sysSm#25') .sysSm#25: 0b63 0118 ld [$18] 3110 ld([vAC]) #25 Mode 0,1,2,3 0b64 2003 anda $03 3111 anda(3) #26 0b65 8068 adda $68 3112 adda('.sysSm#30') #27 0b66 fe00 bra ac 3113 bra(AC) #28 0b67 fc6c bra .sysSm#31 3114 bra('.sysSm#31') #29 3115 label('.sysSm#30') .sysSm#30: 0b68 000a ld $0a 3116 ld('pixels') #30 videoB lines 0b69 000a ld $0a 3117 ld('pixels') #30 0b6a 00f6 ld $f6 3118 ld('nopixels') #30 0b6b 00f6 ld $f6 3119 ld('nopixels') #30 3120 label('.sysSm#31') .sysSm#31: 0b6c c20a st [$0a] 3121 st([videoModeB]) #31 0b6d 0118 ld [$18] 3122 ld([vAC]) #32 0b6e 2003 anda $03 3123 anda(3) #33 0b6f 8072 adda $72 3124 adda('.sysSm#37') #34 0b70 fe00 bra ac 3125 bra(AC) #35 0b71 fc76 bra .sysSm#38 3126 bra('.sysSm#38') #36 3127 label('.sysSm#37') .sysSm#37: 0b72 000a ld $0a 3128 ld('pixels') #37 videoC lines 0b73 000a ld $0a 3129 ld('pixels') #37 0b74 000a ld $0a 3130 ld('pixels') #37 0b75 00f6 ld $f6 3131 ld('nopixels') #37 3132 label('.sysSm#38') .sysSm#38: 0b76 c20b st [$0b] 3133 st([videoModeC]) #38 0b77 0118 ld [$18] 3134 ld([vAC]) #39 0b78 2003 anda $03 3135 anda(3) #40 0b79 807c adda $7c 3136 adda('.sysSm#44') #41 0b7a fe00 bra ac 3137 bra(AC) #42 0b7b fc80 bra .sysSm#45 3138 bra('.sysSm#45') #43 3139 label('.sysSm#44') .sysSm#44: 0b7c 000a ld $0a 3140 ld('pixels') #44 videoD lines 0b7d 00f6 ld $f6 3141 ld('nopixels') #44 0b7e 00f6 ld $f6 3142 ld('nopixels') #44 0b7f 00f6 ld $f6 3143 ld('nopixels') #44 3144 label('.sysSm#45') .sysSm#45: 0b80 c20c st [$0c] 3145 st([videoModeD]) #45 0b81 e0cb jmp y,$cb 3146 jmp(Y,'REENTER') #46 0b82 00e7 ld $e7 3147 ld(-50/2) #47 3148 3149 # SYS_SendSerial1_v3_80 implementation 3150 label('sys_SendSerial1') sys_SendSerial1: 0b83 f08a beq .sysSs#20 3151 beq('.sysSs#20') #18 0b84 1124 ld [$24],x 3152 ld([sysArgs+0],X) #19 0b85 0116 ld [$16] 3153 ld([vPC]) #20 Wait for vBlank 0b86 a002 suba $02 3154 suba(2) #21 0b87 1403 ld $03,y 3155 ld(hi('REENTER_28'),Y) #22 0b88 e0ca jmp y,$ca 3156 jmp(Y,'REENTER_28') #23 0b89 c216 st [$16] 3157 st([vPC]) #24 3158 label('.sysSs#20') .sysSs#20: 0b8a 1525 ld [$25],y 3159 ld([sysArgs+1],Y) #20 Synchronized with vBlank 0b8b 0d00 ld [y,x] 3160 ld([Y,X]) #21 Copy next bit 0b8c 2126 anda [$26] 3161 anda([sysArgs+2]) #22 0b8d ec90 bne $0b90 3162 bne(pc()+3) #23 0b8e fc91 bra $0b91 3163 bra(pc()+3) #24 0b8f 000e ld $0e 3164 ld(7*2) #25 0b90 0012 ld $12 3165 ld(9*2) #25 0b91 c20d st [$0d] 3166 st([videoPulse]) #26 0b92 0126 ld [$26] 3167 ld([sysArgs+2]) #27 Rotate input bit 0b93 8200 adda ac 3168 adda(AC) #28 0b94 ec97 bne $0b97 3169 bne(pc()+3) #29 0b95 fc97 bra $0b97 3170 bra(pc()+2) #30 0b96 0001 ld $01 3171 ld(1) #31 0b97 c226 st [$26] 3172 st([sysArgs+2]) #31,32 (must be idempotent) 0b98 2001 anda $01 3173 anda(1) #33 Optionally increment pointer 0b99 8124 adda [$24] 3174 adda([sysArgs+0]) #34 0b9a d224 st [$24],x 3175 st([sysArgs+0],X) #35 0b9b 0127 ld [$27] 3176 ld([sysArgs+3]) #36 Frame counter 0b9c a001 suba $01 3177 suba(1) #37 0b9d f0ac beq .sysSs#40 3178 beq('.sysSs#40') #38 0b9e 1403 ld $03,y 3179 ld(hi('REENTER'),Y) #39 0b9f c227 st [$27] 3180 st([sysArgs+3]) #40 0ba0 010f ld [$0f] 3181 ld([serialRaw]) #41 Test for anything being sent back 0ba1 60ff xora $ff 3182 xora(255) #42 0ba2 f0a7 beq .sysSs#45 3183 beq('.sysSs#45') #43 0ba3 c218 st [$18] 3184 st([vAC]) #44 Abort after key press with non-zero error 0ba4 c219 st [$19] 3185 st([vAC+1]) #45 0ba5 e0cb jmp y,$cb 3186 jmp(Y,'REENTER') #46 0ba6 00e7 ld $e7 3187 ld(-50/2) #47 3188 label('.sysSs#45') .sysSs#45: 0ba7 0116 ld [$16] 3189 ld([vPC]) #45 Continue sending bits 0ba8 a002 suba $02 3190 suba(2) #46 0ba9 c216 st [$16] 3191 st([vPC]) #47 0baa e0cb jmp y,$cb 3192 jmp(Y,'REENTER') #48 0bab 00e6 ld $e6 3193 ld(-52/2) #49 3194 label('.sysSs#40') .sysSs#40: 0bac c218 st [$18] 3195 st([vAC]) #40 Stop sending bits, no error 0bad c219 st [$19] 3196 st([vAC+1]) #41 0bae e0cb jmp y,$cb 3197 jmp(Y,'REENTER') #42 0baf 00e9 ld $e9 3198 ld(-46/2) #43 3199 3200 # CALLI implementation (vCPU instruction) 3201 label('calli#13') calli#13: 0bb0 8003 adda $03 3202 adda(3) #13,43 0bb1 c21a st [$1a] 3203 st([vLR]) #14 0bb2 0117 ld [$17] 3204 ld([vPC+1]) #15 0bb3 d61b st [$1b],y 3205 st([vLR+1],Y) #16 0bb4 0d00 ld [y,x] 3206 ld([Y,X]) #17 0bb5 de00 st [y,x++] 3207 st([Y,Xpp]) #18 Just X++ 0bb6 a002 suba $02 3208 suba(2) #19 0bb7 c216 st [$16] 3209 st([vPC]) #20 0bb8 0d00 ld [y,x] 3210 ld([Y,X]) #21 0bb9 1403 ld $03,y 3211 ld(hi('REENTER_28'),Y) #22 0bba e0ca jmp y,$ca 3212 jmp(Y,'REENTER_28') #23 0bbb c217 st [$17] 3213 st([vPC+1]) #24 3214 3215 # ------------------------------------------------------------- 3216 # vCPU instructions for comparisons between two 16-bit operands 3217 # ------------------------------------------------------------- 3218 # 3219 # vCPU's conditional branching (BCC) always compares vAC against 0, 3220 # treating vAC as a two's complement 16-bit number. When we need to 3221 # compare two arbitrary numnbers we normally first take their difference 3222 # with SUBW. However, when this difference is too large, the subtraction 3223 # overflows and we get the wrong outcome. To get it right over the 3224 # entire range, an elaborate sequence is needed. TinyBASIC uses this 3225 # blurp for its relational operators. (It compares stack variable $02 3226 # with zero page variable $3a.) 3227 # 3228 # 0461 ee 02 LDLW $02 3229 # 0463 fc 3a XORW $3a 3230 # 0465 35 53 6a BGE $046c 3231 # 0468 ee 02 LDLW $02 3232 # 046a 90 6e BRA $0470 3233 # 046c ee 02 LDLW $02 3234 # 046e b8 3a SUBW $3a 3235 # 0470 35 56 73 BLE $0475 3236 # 3237 # The CMPHS and CMPHU instructions were introduced to simplify this. 3238 # They inspect both operands to see if there is an overflow risk. If 3239 # so, they modify vAC such that their difference gets smaller, while 3240 # preserving the relation between the two operands. After that, the 3241 # SUBW instruction can't overflow and we achieve a correct comparison. 3242 # Use CMPHS for signed comparisons and CMPHU for unsigned. With these, 3243 # the sequence above becomes: 3244 # 3245 # 0461 ee 02 LDLW $02 3246 # 0463 1f 3b CMPHS $3b Note: high byte of operand 3247 # 0465 b8 3a SUBW $3a 3248 # 0467 35 56 73 BLE $0475 3249 # 3250 # CMPHS/CMPHU don't make much sense other than in combination with 3251 # SUBW. These modify vACH, if needed, as given in the following table: 3252 # 3253 # vACH varH | vACH 3254 # bit7 bit7 | CMPHS CMPHU 3255 # --------------------------- 3256 # 0 0 | vACH vACH no change needed 3257 # 0 1 | varH+1 varH-1 narrowing the range 3258 # 1 0 | varH-1 varH+1 narrowing the range 3259 # 1 1 | vACH vACH no change needed 3260 # --------------------------- 3261 3262 # CMPHS implementation (vCPU instruction) 3263 label('cmphs#13') cmphs#13: 0bbc 1403 ld $03,y 3264 ld(hi('REENTER'),Y) #13 0bbd 0500 ld [x] 3265 ld([X]) #14 0bbe 6119 xora [$19] 3266 xora([vAC+1]) #15 0bbf f4d0 bge .cmphu#18 3267 bpl('.cmphu#18') #16 Skip if same sign 0bc0 0119 ld [$19] 3268 ld([vAC+1]) #17 0bc1 e8c4 blt $0bc4 3269 bmi(pc()+3) #18 0bc2 fcc5 bra .cmphs#21 3270 bra(pc()+3) #19 3271 label('.cmphs#20') .cmphs#20: 0bc3 0001 ld $01 3272 ld(+1) #20 vAC < variable 0bc4 00ff ld $ff 3273 ld(-1) #20(!) vAC > variable 3274 label('.cmphs#21') .cmphs#21: 0bc5 8500 adda [x] 3275 adda([X]) #21 0bc6 c219 st [$19] 3276 st([vAC+1]) #22 0bc7 e0ca jmp y,$ca 3277 jmp(Y,'REENTER_28') #23 3278 #dummy() #24 Overlap 3279 # 3280 # CMPHS implementation (vCPU instruction) 3281 label('cmphu#13') cmphu#13: 0bc8 1403 ld $03,y 3282 ld(hi('REENTER'),Y) #13,24 0bc9 0500 ld [x] 3283 ld([X]) #14 0bca 6119 xora [$19] 3284 xora([vAC+1]) #15 0bcb f4d0 bge .cmphu#18 3285 bpl('.cmphu#18') #16 Skip if same sign 0bcc 0119 ld [$19] 3286 ld([vAC+1]) #17 0bcd e8c3 blt .cmphs#20 3287 bmi('.cmphs#20') #18 0bce fcc5 bra .cmphs#21 3288 bra('.cmphs#21') #19 0bcf 00ff ld $ff 3289 ld(-1) #20 vAC > variable 3290 3291 # No-operation for CMPHS/CMPHU when high bits are equal 3292 label('.cmphu#18') .cmphu#18: 0bd0 e0cb jmp y,$cb 3293 jmp(Y,'REENTER') #18 0bd1 00f5 ld $f5 3294 ld(-22/2) #19 3295 3296 #----------------------------------------------------------------------- 3297 # 3298 # $0c00 ROM page 12: More SYS functions (sprites) 3299 # 3300 # Page 1: vertical blank interval 3301 # Page 2: visible scanlines 3302 # 3303 #----------------------------------------------------------------------- 3304 0bd2 0200 nop 3305 align(0x100, size=0x100) 0bd3 0200 nop 0bd4 0200 nop * 46 times 3306 3307 #----------------------------------------------------------------------- 3308 # Extension SYS_Sprite6_v3_64 3309 # Extension SYS_Sprite6x_v3_64 3310 # Extension SYS_Sprite6y_v3_64 3311 # Extension SYS_Sprite6xy_v3_64 3312 #----------------------------------------------------------------------- 3313 3314 # Blit sprite in screen memory 3315 # 3316 # Variables 3317 # vAC Destination address in screen 3318 # sysArgs[0:1] Source address of 6xY pixels (colors 0..63) terminated 3319 # by negative byte value N (typically N = -Y) 3320 # sysArgs[2:7] Scratch (user as copy buffer) 3321 # 3322 # This SYS function draws a sprite of 6 pixels wide and Y pixels high. 3323 # The pixel data is read sequentually from RAM, in horizontal chunks 3324 # of 6 pixels at a time, and then written to the screen through the 3325 # destination pointer (each chunk underneath the previous), thus 3326 # drawing a 6xY stripe. Pixel values should be non-negative. The first 3327 # negative byte N after a chunk signals the end of the sprite data. 3328 # So the sprite's height Y is determined by the source data and is 3329 # therefore flexible. This negative byte value, typically N == -Y, 3330 # is then used to adjust the destination pointer's high byte, to make 3331 # it easier to draw sprites wider than 6 pixels: just repeat the SYS 3332 # call for as many 6-pixel wide stripes you need. All arguments are 3333 # already left in place to facilitate this. After one call, the source 3334 # pointer will point past that source data, effectively: 3335 # src += Y * 6 + 1 3336 # The destination pointer will have been adjusted as: 3337 # dst += (Y + N) * 256 + 6 3338 # (With arithmetic wrapping around on the same memory page) 3339 # 3340 # Y is only limited by source memory, not by CPU cycles. The 3341 # implementation is such that the SYS function self-repeats, each 3342 # time drawing the next 6-pixel chunk. It can typically draw 12 3343 # pixels per scanline this way. 3344 3345 label('SYS_Sprite6_v3_64') 3346 SYS_Sprite6_v3_64: 0c00 1124 ld [$24],x 3347 ld([sysArgs+0],X) #15 Pixel data source address 0c01 1525 ld [$25],y 3348 ld([sysArgs+1],Y) #16 0c02 0d00 ld [y,x] 3349 ld([Y,X]) #17 Next pixel or stop 0c03 f411 bge .sysDpx0 3350 bpl('.sysDpx0') #18 0c04 de00 st [y,x++] 3351 st([Y,Xpp]) #19 Just X++ 3352 0c05 8119 adda [$19] 3353 adda([vAC+1]) #20 Adjust dst for convenience 0c06 c219 st [$19] 3354 st([vAC+1]) #21 0c07 0118 ld [$18] 3355 ld([vAC]) #22 0c08 8006 adda $06 3356 adda(6) #23 0c09 c218 st [$18] 3357 st([vAC]) #24 0c0a 0124 ld [$24] 3358 ld([sysArgs+0]) #25 Adjust src for convenience 0c0b 8001 adda $01 3359 adda(1) #26 0c0c c224 st [$24] 3360 st([sysArgs+0]) #27 0c0d 0200 nop 3361 nop() #28 0c0e 1403 ld $03,y 3362 ld(hi('REENTER'),Y) #29 Normal exit (no self-repeat) 0c0f e0cb jmp y,$cb 3363 jmp(Y,'REENTER') #30 0c10 00ef ld $ef 3364 ld(-34/2) #31 3365 3366 label('.sysDpx0') .sysDpx0: 0c11 c226 st [$26] 3367 st([sysArgs+2]) #20 Gobble 6 pixels into buffer 0c12 0d00 ld [y,x] 3368 ld([Y,X]) #21 0c13 de00 st [y,x++] 3369 st([Y,Xpp]) #22 Just X++ 0c14 c227 st [$27] 3370 st([sysArgs+3]) #23 0c15 0d00 ld [y,x] 3371 ld([Y,X]) #24 0c16 de00 st [y,x++] 3372 st([Y,Xpp]) #25 Just X++ 0c17 c228 st [$28] 3373 st([sysArgs+4]) #26 0c18 0d00 ld [y,x] 3374 ld([Y,X]) #27 0c19 de00 st [y,x++] 3375 st([Y,Xpp]) #28 Just X++ 0c1a c229 st [$29] 3376 st([sysArgs+5]) #29 0c1b 0d00 ld [y,x] 3377 ld([Y,X]) #30 0c1c de00 st [y,x++] 3378 st([Y,Xpp]) #31 Just X++ 0c1d c22a st [$2a] 3379 st([sysArgs+6]) #32 0c1e 0d00 ld [y,x] 3380 ld([Y,X]) #33 0c1f de00 st [y,x++] 3381 st([Y,Xpp]) #34 Just X++ 0c20 c22b st [$2b] 3382 st([sysArgs+7]) #35 3383 0c21 1118 ld [$18],x 3384 ld([vAC],X) #36 Screen memory destination address 0c22 1519 ld [$19],y 3385 ld([vAC+1],Y) #37 0c23 0126 ld [$26] 3386 ld([sysArgs+2]) #38 Write 6 pixels 0c24 de00 st [y,x++] 3387 st([Y,Xpp]) #39 0c25 0127 ld [$27] 3388 ld([sysArgs+3]) #40 0c26 de00 st [y,x++] 3389 st([Y,Xpp]) #41 0c27 0128 ld [$28] 3390 ld([sysArgs+4]) #42 0c28 de00 st [y,x++] 3391 st([Y,Xpp]) #43 0c29 0129 ld [$29] 3392 ld([sysArgs+5]) #44 0c2a de00 st [y,x++] 3393 st([Y,Xpp]) #45 0c2b 012a ld [$2a] 3394 ld([sysArgs+6]) #46 0c2c de00 st [y,x++] 3395 st([Y,Xpp]) #47 0c2d 012b ld [$2b] 3396 ld([sysArgs+7]) #48 0c2e de00 st [y,x++] 3397 st([Y,Xpp]) #49 3398 0c2f 0124 ld [$24] 3399 ld([sysArgs+0]) #50 src += 6 0c30 8006 adda $06 3400 adda(6) #51 0c31 c224 st [$24] 3401 st([sysArgs+0]) #52 0c32 0119 ld [$19] 3402 ld([vAC+1]) #53 dst += 256 0c33 8001 adda $01 3403 adda(1) #54 0c34 c219 st [$19] 3404 st([vAC+1]) #55 3405 0c35 0116 ld [$16] 3406 ld([vPC]) #56 Self-repeating SYS call 0c36 a002 suba $02 3407 suba(2) #57 0c37 c216 st [$16] 3408 st([vPC]) #58 0c38 1403 ld $03,y 3409 ld(hi('REENTER'),Y) #59 0c39 e0cb jmp y,$cb 3410 jmp(Y,'REENTER') #60 0c3a 00e0 ld $e0 3411 ld(-64/2) #61 3412 0c3b 0200 nop 3413 align(64) 0c3c 0200 nop 0c3d 0200 nop * 5 times 3414 label('SYS_Sprite6x_v3_64') 3415 SYS_Sprite6x_v3_64: 0c40 1124 ld [$24],x 3416 ld([sysArgs+0],X) #15 Pixel data source address 0c41 1525 ld [$25],y 3417 ld([sysArgs+1],Y) #16 0c42 0d00 ld [y,x] 3418 ld([Y,X]) #17 Next pixel or stop 0c43 f451 bge .sysDpx1 3419 bpl('.sysDpx1') #18 0c44 de00 st [y,x++] 3420 st([Y,Xpp]) #19 Just X++ 3421 0c45 8119 adda [$19] 3422 adda([vAC+1]) #20 Adjust dst for convenience 0c46 c219 st [$19] 3423 st([vAC+1]) #21 0c47 0118 ld [$18] 3424 ld([vAC]) #22 0c48 a006 suba $06 3425 suba(6) #23 0c49 c218 st [$18] 3426 st([vAC]) #24 0c4a 0124 ld [$24] 3427 ld([sysArgs+0]) #25 Adjust src for convenience 0c4b 8001 adda $01 3428 adda(1) #26 0c4c c224 st [$24] 3429 st([sysArgs+0]) #27 0c4d 0200 nop 3430 nop() #28 0c4e 1403 ld $03,y 3431 ld(hi('REENTER'),Y) #29 Normal exit (no self-repeat) 0c4f e0cb jmp y,$cb 3432 jmp(Y,'REENTER') #30 0c50 00ef ld $ef 3433 ld(-34/2) #31 3434 3435 label('.sysDpx1') .sysDpx1: 0c51 c22b st [$2b] 3436 st([sysArgs+7]) #20 Gobble 6 pixels into buffer (backwards) 0c52 0d00 ld [y,x] 3437 ld([Y,X]) #21 0c53 de00 st [y,x++] 3438 st([Y,Xpp]) #22 Just X++ 0c54 c22a st [$2a] 3439 st([sysArgs+6]) #23 0c55 0d00 ld [y,x] 3440 ld([Y,X]) #24 0c56 de00 st [y,x++] 3441 st([Y,Xpp]) #25 Just X++ 0c57 c229 st [$29] 3442 st([sysArgs+5]) #26 0c58 0d00 ld [y,x] 3443 ld([Y,X]) #27 0c59 de00 st [y,x++] 3444 st([Y,Xpp]) #28 Just X++ 0c5a c228 st [$28] 3445 st([sysArgs+4]) #29 0c5b 0d00 ld [y,x] 3446 ld([Y,X]) #30 0c5c de00 st [y,x++] 3447 st([Y,Xpp]) #31 Just X++ 0c5d c227 st [$27] 3448 st([sysArgs+3]) #32 0c5e 0d00 ld [y,x] 3449 ld([Y,X]) #33 0c5f de00 st [y,x++] 3450 st([Y,Xpp]) #34 Just X++ 3451 0c60 1118 ld [$18],x 3452 ld([vAC],X) #35 Screen memory destination address 0c61 1519 ld [$19],y 3453 ld([vAC+1],Y) #36 0c62 de00 st [y,x++] 3454 st([Y,Xpp]) #37 Write 6 pixels 0c63 0127 ld [$27] 3455 ld([sysArgs+3]) #38 0c64 de00 st [y,x++] 3456 st([Y,Xpp]) #39 0c65 0128 ld [$28] 3457 ld([sysArgs+4]) #40 0c66 de00 st [y,x++] 3458 st([Y,Xpp]) #41 0c67 0129 ld [$29] 3459 ld([sysArgs+5]) #42 0c68 de00 st [y,x++] 3460 st([Y,Xpp]) #43 0c69 012a ld [$2a] 3461 ld([sysArgs+6]) #44 0c6a de00 st [y,x++] 3462 st([Y,Xpp]) #45 0c6b 012b ld [$2b] 3463 ld([sysArgs+7]) #46 0c6c de00 st [y,x++] 3464 st([Y,Xpp]) #47 3465 0c6d 0124 ld [$24] 3466 ld([sysArgs+0]) #48 src += 6 0c6e 8006 adda $06 3467 adda(6) #49 0c6f c224 st [$24] 3468 st([sysArgs+0]) #50 0c70 0119 ld [$19] 3469 ld([vAC+1]) #51 dst += 256 0c71 8001 adda $01 3470 adda(1) #52 0c72 c219 st [$19] 3471 st([vAC+1]) #53 3472 0c73 0116 ld [$16] 3473 ld([vPC]) #54 Self-repeating SYS call 0c74 a002 suba $02 3474 suba(2) #55 0c75 c216 st [$16] 3475 st([vPC]) #56 0c76 1403 ld $03,y 3476 ld(hi('REENTER'),Y) #57 0c77 e0cb jmp y,$cb 3477 jmp(Y,'REENTER') #58 0c78 00e1 ld $e1 3478 ld(-62/2) #59 3479 0c79 0200 nop 3480 align(64) 0c7a 0200 nop 0c7b 0200 nop * 7 times 3481 label('SYS_Sprite6y_v3_64') 3482 SYS_Sprite6y_v3_64: 0c80 1124 ld [$24],x 3483 ld([sysArgs+0],X) #15 Pixel data source address 0c81 1525 ld [$25],y 3484 ld([sysArgs+1],Y) #16 0c82 0d00 ld [y,x] 3485 ld([Y,X]) #17 Next pixel or stop 0c83 f493 bge .sysDpx2 3486 bpl('.sysDpx2') #18 0c84 de00 st [y,x++] 3487 st([Y,Xpp]) #19 Just X++ 3488 0c85 60ff xora $ff 3489 xora(255) #20 Adjust dst for convenience 0c86 8001 adda $01 3490 adda(1) #21 0c87 8119 adda [$19] 3491 adda([vAC+1]) #22 0c88 c219 st [$19] 3492 st([vAC+1]) #23 0c89 0118 ld [$18] 3493 ld([vAC]) #24 0c8a 8006 adda $06 3494 adda(6) #25 0c8b c218 st [$18] 3495 st([vAC]) #26 0c8c 0124 ld [$24] 3496 ld([sysArgs+0]) #27 Adjust src for convenience 0c8d 8001 adda $01 3497 adda(1) #28 0c8e c224 st [$24] 3498 st([sysArgs+0]) #29 0c8f 0200 nop 3499 nop() #30 0c90 1403 ld $03,y 3500 ld(hi('REENTER'),Y) #31 Normal exit (no self-repeat) 0c91 e0cb jmp y,$cb 3501 jmp(Y,'REENTER') #32 0c92 00ee ld $ee 3502 ld(-36/2) #33 3503 3504 label('.sysDpx2') .sysDpx2: 0c93 c226 st [$26] 3505 st([sysArgs+2]) #20 Gobble 6 pixels into buffer 0c94 0d00 ld [y,x] 3506 ld([Y,X]) #21 0c95 de00 st [y,x++] 3507 st([Y,Xpp]) #22 Just X++ 0c96 c227 st [$27] 3508 st([sysArgs+3]) #23 0c97 0d00 ld [y,x] 3509 ld([Y,X]) #24 0c98 de00 st [y,x++] 3510 st([Y,Xpp]) #25 Just X++ 0c99 c228 st [$28] 3511 st([sysArgs+4]) #26 0c9a 0d00 ld [y,x] 3512 ld([Y,X]) #27 0c9b de00 st [y,x++] 3513 st([Y,Xpp]) #28 Just X++ 0c9c c229 st [$29] 3514 st([sysArgs+5]) #29 0c9d 0d00 ld [y,x] 3515 ld([Y,X]) #30 0c9e de00 st [y,x++] 3516 st([Y,Xpp]) #31 Just X++ 0c9f c22a st [$2a] 3517 st([sysArgs+6]) #32 0ca0 0d00 ld [y,x] 3518 ld([Y,X]) #33 0ca1 de00 st [y,x++] 3519 st([Y,Xpp]) #34 Just X++ 0ca2 c22b st [$2b] 3520 st([sysArgs+7]) #35 3521 0ca3 1118 ld [$18],x 3522 ld([vAC],X) #36 Screen memory destination address 0ca4 1519 ld [$19],y 3523 ld([vAC+1],Y) #37 0ca5 0126 ld [$26] 3524 ld([sysArgs+2]) #38 Write 6 pixels 0ca6 de00 st [y,x++] 3525 st([Y,Xpp]) #39 0ca7 0127 ld [$27] 3526 ld([sysArgs+3]) #40 0ca8 de00 st [y,x++] 3527 st([Y,Xpp]) #41 0ca9 0128 ld [$28] 3528 ld([sysArgs+4]) #42 0caa de00 st [y,x++] 3529 st([Y,Xpp]) #43 0cab 0129 ld [$29] 3530 ld([sysArgs+5]) #44 0cac de00 st [y,x++] 3531 st([Y,Xpp]) #45 0cad 012a ld [$2a] 3532 ld([sysArgs+6]) #46 0cae de00 st [y,x++] 3533 st([Y,Xpp]) #47 0caf 012b ld [$2b] 3534 ld([sysArgs+7]) #48 0cb0 de00 st [y,x++] 3535 st([Y,Xpp]) #49 3536 0cb1 0124 ld [$24] 3537 ld([sysArgs+0]) #50 src += 6 0cb2 8006 adda $06 3538 adda(6) #51 0cb3 c224 st [$24] 3539 st([sysArgs+0]) #52 0cb4 0119 ld [$19] 3540 ld([vAC+1]) #53 dst -= 256 0cb5 a001 suba $01 3541 suba(1) #54 0cb6 c219 st [$19] 3542 st([vAC+1]) #55 3543 0cb7 0116 ld [$16] 3544 ld([vPC]) #56 Self-repeating SYS call 0cb8 a002 suba $02 3545 suba(2) #57 0cb9 c216 st [$16] 3546 st([vPC]) #58 0cba 1403 ld $03,y 3547 ld(hi('REENTER'),Y) #59 0cbb e0cb jmp y,$cb 3548 jmp(Y,'REENTER') #60 0cbc 00e0 ld $e0 3549 ld(-64/2) #61 3550 0cbd 0200 nop 3551 align(64) 0cbe 0200 nop 0cbf 0200 nop 3552 label('SYS_Sprite6xy_v3_64') 3553 SYS_Sprite6xy_v3_64: 0cc0 1124 ld [$24],x 3554 ld([sysArgs+0],X) #15 Pixel data source address 0cc1 1525 ld [$25],y 3555 ld([sysArgs+1],Y) #16 0cc2 0d00 ld [y,x] 3556 ld([Y,X]) #17 Next pixel or stop 0cc3 f4d3 bge .sysDpx3 3557 bpl('.sysDpx3') #18 0cc4 de00 st [y,x++] 3558 st([Y,Xpp]) #19 Just X++ 3559 0cc5 60ff xora $ff 3560 xora(255) #20 Adjust dst for convenience 0cc6 8001 adda $01 3561 adda(1) #21 0cc7 8119 adda [$19] 3562 adda([vAC+1]) #22 0cc8 c219 st [$19] 3563 st([vAC+1]) #23 0cc9 0118 ld [$18] 3564 ld([vAC]) #24 0cca a006 suba $06 3565 suba(6) #25 0ccb c218 st [$18] 3566 st([vAC]) #26 0ccc 0124 ld [$24] 3567 ld([sysArgs+0]) #27 Adjust src for convenience 0ccd 8001 adda $01 3568 adda(1) #28 0cce c224 st [$24] 3569 st([sysArgs+0]) #29 0ccf 0200 nop 3570 nop() #30 0cd0 1403 ld $03,y 3571 ld(hi('REENTER'),Y) #31 Normal exit (no self-repeat) 0cd1 e0cb jmp y,$cb 3572 jmp(Y,'REENTER') #32 0cd2 00ee ld $ee 3573 ld(-36/2) #33 3574 3575 label('.sysDpx3') .sysDpx3: 0cd3 c22b st [$2b] 3576 st([sysArgs+7]) #20 Gobble 6 pixels into buffer (backwards) 0cd4 0d00 ld [y,x] 3577 ld([Y,X]) #21 0cd5 de00 st [y,x++] 3578 st([Y,Xpp]) #22 Just X++ 0cd6 c22a st [$2a] 3579 st([sysArgs+6]) #23 0cd7 0d00 ld [y,x] 3580 ld([Y,X]) #24 0cd8 de00 st [y,x++] 3581 st([Y,Xpp]) #25 Just X++ 0cd9 c229 st [$29] 3582 st([sysArgs+5]) #26 0cda 0d00 ld [y,x] 3583 ld([Y,X]) #27 0cdb de00 st [y,x++] 3584 st([Y,Xpp]) #28 Just X++ 0cdc c228 st [$28] 3585 st([sysArgs+4]) #29 0cdd 0d00 ld [y,x] 3586 ld([Y,X]) #30 0cde de00 st [y,x++] 3587 st([Y,Xpp]) #31 Just X++ 0cdf c227 st [$27] 3588 st([sysArgs+3]) #32 0ce0 0d00 ld [y,x] 3589 ld([Y,X]) #33 0ce1 de00 st [y,x++] 3590 st([Y,Xpp]) #34 Just X++ 3591 0ce2 1118 ld [$18],x 3592 ld([vAC],X) #35 Screen memory destination address 0ce3 1519 ld [$19],y 3593 ld([vAC+1],Y) #36 0ce4 de00 st [y,x++] 3594 st([Y,Xpp]) #37 Write 6 pixels 0ce5 0127 ld [$27] 3595 ld([sysArgs+3]) #38 0ce6 de00 st [y,x++] 3596 st([Y,Xpp]) #39 0ce7 0128 ld [$28] 3597 ld([sysArgs+4]) #40 0ce8 de00 st [y,x++] 3598 st([Y,Xpp]) #41 0ce9 0129 ld [$29] 3599 ld([sysArgs+5]) #42 0cea de00 st [y,x++] 3600 st([Y,Xpp]) #43 0ceb 012a ld [$2a] 3601 ld([sysArgs+6]) #44 0cec de00 st [y,x++] 3602 st([Y,Xpp]) #45 0ced 012b ld [$2b] 3603 ld([sysArgs+7]) #46 0cee de00 st [y,x++] 3604 st([Y,Xpp]) #47 3605 0cef 0124 ld [$24] 3606 ld([sysArgs+0]) #48 src += 6 0cf0 8006 adda $06 3607 adda(6) #49 0cf1 c224 st [$24] 3608 st([sysArgs+0]) #50 0cf2 0119 ld [$19] 3609 ld([vAC+1]) #51 dst -= 256 0cf3 a001 suba $01 3610 suba(1) #52 0cf4 c219 st [$19] 3611 st([vAC+1]) #53 3612 0cf5 0116 ld [$16] 3613 ld([vPC]) #54 Self-repeating SYS call 0cf6 a002 suba $02 3614 suba(2) #55 0cf7 c216 st [$16] 3615 st([vPC]) #56 0cf8 1403 ld $03,y 3616 ld(hi('REENTER'),Y) #57 0cf9 e0cb jmp y,$cb 3617 jmp(Y,'REENTER') #58 0cfa 00e1 ld $e1 3618 ld(-62/2) #59 3619 3620 #----------------------------------------------------------------------- 3621 3622 label('sys_ExpanderControl') 3623 sys_ExpanderControl: 0cfb 2118 anda [$18] 3624 anda([vAC]) #18 0cfc d218 st [$18],x 3625 st([vAC],X) #19 0cfd 1401 ld $01,y 3626 ld(hi(ctrlBits),Y) #20 0cfe caf8 st [y,$f8] 3627 st([Y,ctrlBits]) #21 Set control variable 0cff 1519 ld [$19],y 3628 ld([vAC+1],Y) #22 MOSI (A15) 0d00 cd00 ctrl y,x 3629 ctrl(Y,X) #23 Try set the expander control register 3630 0d01 0127 ld [$27] 3631 ld([sysArgs+3]) #24 Prepare for SYS_SpiExchangeBytes 3632 assert pc()&255 < 255-3 # Beware of page crossing: asm.py won't warn 0d02 ec05 bne $0d05 3633 bne(pc()+3) #25 0d03 fc05 bra $0d05 3634 bra(pc()+2) #26 0d04 0125 ld [$25] 3635 ld([sysArgs+1]) #27 0d05 c227 st [$27] 3636 st([sysArgs+3]) #27,28 (must be idempotent) 3637 0d06 1403 ld $03,y 3638 ld(hi('REENTER'),Y) #29 0d07 e0cb jmp y,$cb 3639 jmp(Y,'REENTER') #30 0d08 00ef ld $ef 3640 ld(-34/2) #31 3641 3642 #----------------------------------------------------------------------- 3643 3644 label('sys_SpiExchangeBytes') 3645 sys_SpiExchangeBytes: 0d09 09f8 ld [y,$f8] 3646 ld([Y,ctrlBits]) #18 0d0a c228 st [$28] 3647 st([sysArgs+4]) #19 3648 0d0b 1124 ld [$24],x 3649 ld([sysArgs+0],X) #20 Fetch byte to send 0d0c 1525 ld [$25],y 3650 ld([sysArgs+1],Y) #21 0d0d 0d00 ld [y,x] 3651 ld([Y,X]) #22 3652 3653 for i in range(8): 3654 st([vTmp],Y);C('Bit %d'%(7-i))#23+i*12 0d0e d61d st [$1d],y ;Bit 7 0d0f 1128 ld [$28],x 3655 ld([sysArgs+4],X) #24+i*12 0d10 dd00 ctrl y,x++ 3656 ctrl(Y,Xpp) #25+i*12 Set MOSI 0d11 dd00 ctrl y,x++ 3657 ctrl(Y,Xpp) #26+i*12 Raise SCLK, disable RAM! 0d12 0100 ld [$00] 3658 ld([0]) #27+i*12 Get MISO 0d13 200f anda $0f 3659 anda(0b00001111) #28+i*12 This is why R1 as pull-DOWN is simpler 0d14 f017 beq $0d17 3660 beq(pc()+3) #29+i*12 0d15 fc17 bra $0d17 3661 bra(pc()+2) #30+i*12 0d16 0001 ld $01 3662 ld(1) #31+i*12 0d17 cd00 ctrl y,x 3663 ctrl(Y,X) #32+i*12,29+i*12 (Must be idempotent) Lower SCLK 0d18 811d adda [$1d] 3664 adda([vTmp]) #33+i*12 Shift 0d19 811d adda [$1d] 3665 adda([vTmp]) #34+i*12 0d1a d61d st [$1d],y ;Bit 6 0d1b 1128 ld [$28],x 0d1c dd00 ctrl y,x++ 0d1d dd00 ctrl y,x++ 0d1e 0100 ld [$00] 0d1f 200f anda $0f 0d20 f023 beq $0d23 0d21 fc23 bra $0d23 0d22 0001 ld $01 0d23 cd00 ctrl y,x 0d24 811d adda [$1d] 0d25 811d adda [$1d] 0d26 d61d st [$1d],y ;Bit 5 0d27 1128 ld [$28],x 0d28 dd00 ctrl y,x++ 0d29 dd00 ctrl y,x++ 0d2a 0100 ld [$00] 0d2b 200f anda $0f 0d2c f02f beq $0d2f 0d2d fc2f bra $0d2f 0d2e 0001 ld $01 0d2f cd00 ctrl y,x 0d30 811d adda [$1d] 0d31 811d adda [$1d] 0d32 d61d st [$1d],y ;Bit 4 0d33 1128 ld [$28],x 0d34 dd00 ctrl y,x++ 0d35 dd00 ctrl y,x++ 0d36 0100 ld [$00] 0d37 200f anda $0f 0d38 f03b beq $0d3b 0d39 fc3b bra $0d3b 0d3a 0001 ld $01 0d3b cd00 ctrl y,x 0d3c 811d adda [$1d] 0d3d 811d adda [$1d] 0d3e d61d st [$1d],y ;Bit 3 0d3f 1128 ld [$28],x 0d40 dd00 ctrl y,x++ 0d41 dd00 ctrl y,x++ 0d42 0100 ld [$00] 0d43 200f anda $0f 0d44 f047 beq $0d47 0d45 fc47 bra $0d47 0d46 0001 ld $01 0d47 cd00 ctrl y,x 0d48 811d adda [$1d] 0d49 811d adda [$1d] 0d4a d61d st [$1d],y ;Bit 2 0d4b 1128 ld [$28],x 0d4c dd00 ctrl y,x++ 0d4d dd00 ctrl y,x++ 0d4e 0100 ld [$00] 0d4f 200f anda $0f 0d50 f053 beq $0d53 0d51 fc53 bra $0d53 0d52 0001 ld $01 0d53 cd00 ctrl y,x 0d54 811d adda [$1d] 0d55 811d adda [$1d] 0d56 d61d st [$1d],y ;Bit 1 0d57 1128 ld [$28],x 0d58 dd00 ctrl y,x++ 0d59 dd00 ctrl y,x++ 0d5a 0100 ld [$00] 0d5b 200f anda $0f 0d5c f05f beq $0d5f 0d5d fc5f bra $0d5f 0d5e 0001 ld $01 0d5f cd00 ctrl y,x 0d60 811d adda [$1d] 0d61 811d adda [$1d] 0d62 d61d st [$1d],y ;Bit 0 0d63 1128 ld [$28],x 0d64 dd00 ctrl y,x++ 0d65 dd00 ctrl y,x++ 0d66 0100 ld [$00] 0d67 200f anda $0f 0d68 f06b beq $0d6b 0d69 fc6b bra $0d6b 0d6a 0001 ld $01 0d6b cd00 ctrl y,x 0d6c 811d adda [$1d] 0d6d 811d adda [$1d] 3666 0d6e 1124 ld [$24],x 3667 ld([sysArgs+0],X) #119 Store received byte 0d6f 1527 ld [$27],y 3668 ld([sysArgs+3],Y) #120 0d70 ce00 st [y,x] 3669 st([Y,X]) #121 3670 0d71 0124 ld [$24] 3671 ld([sysArgs+0]) #122 Advance pointer 0d72 8001 adda $01 3672 adda(1) #123 0d73 c224 st [$24] 3673 st([sysArgs+0]) #124 3674 0d74 6126 xora [$26] 3675 xora([sysArgs+2]) #125 Reached end? 0d75 f07c beq .sysSpi#128 3676 beq('.sysSpi#128') #126 3677 0d76 0116 ld [$16] 3678 ld([vPC]) #127 Self-repeating SYS call 0d77 a002 suba $02 3679 suba(2) #128 0d78 c216 st [$16] 3680 st([vPC]) #129 0d79 1403 ld $03,y 3681 ld(hi('NEXTY'),Y) #130 0d7a e000 jmp y,$00 3682 jmp(Y,'NEXTY') #131 0d7b 00bd ld $bd 3683 ld(-134/2) #132 3684 3685 label('.sysSpi#128') .sysSpi#128: 0d7c 1403 ld $03,y 3686 ld(hi('NEXTY'),Y) #128 Continue program 0d7d e000 jmp y,$00 3687 jmp(Y,'NEXTY') #129 0d7e 00be ld $be 3688 ld(-132/2) #130 3689 3690 #----------------------------------------------------------------------- 3691 3692 label('sys_v6502') 3693 sys_v6502: 0d7f d605 st [$05],y 3694 st([vCpuSelect],Y) #18 Activate v6502 0d80 00f5 ld $f5 3695 ld(-22/2) #19 0d81 e0ff jmp y,$ff 3696 jmp(Y,'v6502_ENTER') #20 Transfer control in the same time slice 0d82 8115 adda [$15] 3697 adda([vTicks]) #21 3698 assert (38 - 22)//2 >= v6502_adjust 3699 3700 #----------------------------------------------------------------------- 3701 # MOS 6502 emulator 3702 #----------------------------------------------------------------------- 3703 3704 # Some quirks: 3705 # - Stack in zero page instead of page 1 3706 # - No interrupts 3707 # - No decimal mode (may never be added). D flag is emulated but ignored. 3708 # - BRK switches back to running 16-bits vCPU 3709 # - Illegal opcodes map to BRK, but can read ghost operands before trapping 3710 # - Illegal opcode $ff won't be trapped and cause havoc instead 3711 3712 # Big things TODO: 3713 # XXX Tuning, put most frequent instructions in the primary page 3714 3715 label('v6502_ror') 3716 assert v6502_Cflag == 1 v6502_ror: 0d83 1525 ld [$25],y 3717 ld([v6502_ADH],Y) #12 0d84 00fc ld $fc 3718 ld(-46//2+v6502_maxTicks) #13 Is there enough time for the excess ticks? 0d85 8115 adda [$15] 3719 adda([vTicks]) #14 0d86 e89a blt .recheck17 3720 blt('.recheck17') #15 0d87 0127 ld [$27] 3721 ld([v6502_P]) #16 Transfer C to "bit 8" 0d88 2001 anda $01 3722 anda(1) #17 0d89 807f adda $7f 3723 adda(127) #18 0d8a 2080 anda $80 3724 anda(128) #19 0d8b c219 st [$19] 3725 st([v6502_BI]) #20 The real 6502 wouldn't use BI for this 0d8c 0127 ld [$27] 3726 ld([v6502_P]) #21 Transfer bit 0 to C 0d8d 20fe anda $fe 3727 anda(~1) #22 0d8e c227 st [$27] 3728 st([v6502_P]) #23 0d8f 0d00 ld [y,x] 3729 ld([Y,X]) #24 0d90 2001 anda $01 3730 anda(1) #25 0d91 4127 ora [$27] 3731 ora([v6502_P]) #26 0d92 c227 st [$27] 3732 st([v6502_P]) #27 0d93 00ee ld $ee 3733 ld('v6502_ror#38') #28 Shift table lookup 0d94 c21d st [$1d] 3734 st([vTmp]) #29 0d95 0d00 ld [y,x] 3735 ld([Y,X]) #30 0d96 20fe anda $fe 3736 anda(~1) #31 0d97 1405 ld $05,y 3737 ld(hi('shiftTable'),Y) #32 0d98 e200 jmp y,ac 3738 jmp(Y,AC) #33 0d99 fcff bra $ff 3739 bra(255) #34 bra shiftTable+255 3740 label('.recheck17') .recheck17: 0d9a 140e ld $0e,y 3741 ld(hi('v6502_check'),Y) #17 Go back to time check before dispatch 0d9b e0f2 jmp y,$f2 3742 jmp(Y,'v6502_check') #18 0d9c 00f6 ld $f6 3743 ld(-20/2) #19 3744 3745 label('v6502_lsr') 3746 assert v6502_Cflag == 1 v6502_lsr: 0d9d 1525 ld [$25],y 3747 ld([v6502_ADH],Y) #12 0d9e 0127 ld [$27] 3748 ld([v6502_P]) #13 Transfer bit 0 to C 0d9f 20fe anda $fe 3749 anda(~1) #14 0da0 c227 st [$27] 3750 st([v6502_P]) #15 0da1 0d00 ld [y,x] 3751 ld([Y,X]) #16 0da2 2001 anda $01 3752 anda(1) #17 0da3 4127 ora [$27] 3753 ora([v6502_P]) #18 0da4 c227 st [$27] 3754 st([v6502_P]) #19 0da5 00e7 ld $e7 3755 ld('v6502_lsr#30') #20 Shift table lookup 0da6 c21d st [$1d] 3756 st([vTmp]) #21 0da7 0d00 ld [y,x] 3757 ld([Y,X]) #22 0da8 20fe anda $fe 3758 anda(~1) #23 0da9 1405 ld $05,y 3759 ld(hi('shiftTable'),Y) #24 0daa e200 jmp y,ac 3760 jmp(Y,AC) #25 0dab fcff bra $ff 3761 bra(255) #26 bra shiftTable+255 3762 3763 label('v6502_rol') 3764 assert v6502_Cflag == 1 v6502_rol: 0dac 1525 ld [$25],y 3765 ld([v6502_ADH],Y) #12 0dad 0d00 ld [y,x] 3766 ld([Y,X]) #13 0dae 2080 anda $80 3767 anda(0x80) #14 0daf c21d st [$1d] 3768 st([v6502_Tmp]) #15 0db0 0127 ld [$27] 3769 ld([v6502_P]) #16 0db1 2001 anda $01 3770 anda(1) #17 3771 label('.rol#18') .rol#18: 0db2 8d00 adda [y,x] 3772 adda([Y,X]) #18 0db3 8d00 adda [y,x] 3773 adda([Y,X]) #19 0db4 ce00 st [y,x] 3774 st([Y,X]) #20 0db5 c228 st [$28] 3775 st([v6502_Qz]) #21 Z flag 0db6 c229 st [$29] 3776 st([v6502_Qn]) #22 N flag 0db7 0127 ld [$27] 3777 ld([v6502_P]) #23 C Flag 0db8 20fe anda $fe 3778 anda(~1) #24 0db9 111d ld [$1d],x 3779 ld([v6502_Tmp],X) #25 0dba 4500 ora [x] 3780 ora([X]) #26 0dbb c227 st [$27] 3781 st([v6502_P]) #27 0dbc 140e ld $0e,y 3782 ld(hi('v6502_next'),Y) #28 0dbd 00f0 ld $f0 3783 ld(-32/2) #29 0dbe e020 jmp y,$20 3784 jmp(Y,'v6502_next') #30 3785 #nop() #31 Overlap 3786 # 3787 label('v6502_asl') v6502_asl: 0dbf 1525 ld [$25],y 3788 ld([v6502_ADH],Y) #12,32 0dc0 0d00 ld [y,x] 3789 ld([Y,X]) #13 0dc1 2080 anda $80 3790 anda(0x80) #14 0dc2 c21d st [$1d] 3791 st([v6502_Tmp]) #15 0dc3 fcb2 bra .rol#18 3792 bra('.rol#18') #16 0dc4 0000 ld $00 3793 ld(0) #17 3794 3795 label('v6502_jmp1') v6502_jmp1: 0dc5 0200 nop 3796 nop() #12 0dc6 0124 ld [$24] 3797 ld([v6502_ADL]) #13 0dc7 c21a st [$1a] 3798 st([v6502_PCL]) #14 0dc8 0125 ld [$25] 3799 ld([v6502_ADH]) #15 0dc9 c21b st [$1b] 3800 st([v6502_PCH]) #16 0dca 140e ld $0e,y 3801 ld(hi('v6502_next'),Y) #17 0dcb e020 jmp y,$20 3802 jmp(Y,'v6502_next') #18 0dcc 00f6 ld $f6 3803 ld(-20/2) #19 3804 3805 label('v6502_jmp2') v6502_jmp2: 0dcd 0200 nop 3806 nop() #12 0dce 1525 ld [$25],y 3807 ld([v6502_ADH],Y) #13 0dcf 0d00 ld [y,x] 3808 ld([Y,X]) #14 0dd0 de00 st [y,x++] 3809 st([Y,Xpp]) #15 (Just X++) Wrap around: bug compatible with NMOS 0dd1 c21a st [$1a] 3810 st([v6502_PCL]) #16 0dd2 0d00 ld [y,x] 3811 ld([Y,X]) #17 0dd3 c21b st [$1b] 3812 st([v6502_PCH]) #18 0dd4 140e ld $0e,y 3813 ld(hi('v6502_next'),Y) #19 0dd5 e020 jmp y,$20 3814 jmp(Y,'v6502_next') #20 0dd6 00f5 ld $f5 3815 ld(-22/2) #21 3816 3817 label('v6502_pla') v6502_pla: 0dd7 011c ld [$1c] 3818 ld([v6502_S]) #12 0dd8 1200 ld ac,x 3819 ld(AC,X) #13 0dd9 8001 adda $01 3820 adda(1) #14 0dda c21c st [$1c] 3821 st([v6502_S]) #15 0ddb 0500 ld [x] 3822 ld([X]) #16 0ddc c218 st [$18] 3823 st([v6502_A]) #17 0ddd c228 st [$28] 3824 st([v6502_Qz]) #18 Z flag 0dde c229 st [$29] 3825 st([v6502_Qn]) #19 N flag 0ddf 140e ld $0e,y 3826 ld(hi('v6502_next'),Y) #20 0de0 00f4 ld $f4 3827 ld(-24/2) #21 0de1 e020 jmp y,$20 3828 jmp(Y,'v6502_next') #22 3829 #nop() #23 Overlap 3830 # 3831 label('v6502_pha') v6502_pha: 0de2 140e ld $0e,y 3832 ld(hi('v6502_next'),Y) #12,24 0de3 011c ld [$1c] 3833 ld([v6502_S]) #13 0de4 a001 suba $01 3834 suba(1) #14 0de5 d21c st [$1c],x 3835 st([v6502_S],X) #15 0de6 0118 ld [$18] 3836 ld([v6502_A]) #16 0de7 c600 st [x] 3837 st([X]) #17 0de8 e020 jmp y,$20 3838 jmp(Y,'v6502_next') #18 0de9 00f6 ld $f6 3839 ld(-20/2) #19 3840 3841 label('v6502_brk') v6502_brk: 0dea 0002 ld $02 3842 ld(hi('ENTER')) #12 Switch to vCPU 0deb c205 st [$05] 3843 st([vCpuSelect]) #13 3844 assert v6502_A == vAC 0dec 0000 ld $00 3845 ld(0) #14 0ded c219 st [$19] 3846 st([vAC+1]) #15 0dee 1403 ld $03,y 3847 ld(hi('REENTER'),Y) #16 Switch in the current time slice 0def 00fb ld $fb 3848 ld(-22//2+v6502_adjust) #17 0df0 e0cb jmp y,$cb 3849 jmp(Y,'REENTER') #18 0df1 0200 nop 3850 nop() #19 3851 3852 # All interpreter entry points must share the same page offset, because 3853 # this offset is hard-coded as immediate operand in the video driver. 3854 # The Gigatron's original vCPU's 'ENTER' label is already at $2ff, so we 3855 # just use $dff for 'v6502_ENTER'. v6502 actually has two entry points. 3856 # The other is 'v6502_RESUME' at $10ff. It is used for instructions 3857 # that were fetched but not yet executed. Allowing the split gives finer 3858 # granulariy, and hopefully more throughput for the simpler instructions. 3859 # (There is no "overhead" for allowing instruction splitting, because 3860 # both emulation phases must administer [vTicks] anyway.) 3861 while pc()&255 < 255: 0df2 0200 nop 3862 nop() 0df3 0200 nop 0df4 0200 nop * 13 times 3863 label('v6502_ENTER') v6502_ENTER: 0dff fc22 bra v6502_next2 3864 bra('v6502_next2') #0 v6502 primary entry point 3865 # --- Page boundary --- 0e00 a006 suba $06 3866 suba(v6502_adjust) #1,19 Adjust for vCPU/v6520 timing differences 3867 3868 #19 Addressing modes 3869 ( 'v6502_mode0' ); bra('v6502_modeIZX'); bra('v6502_modeIMM'); bra('v6502_modeILL') # $00 xxx000xx 0e01 fce0 bra v6502_modeIZX 0e02 fc42 bra v6502_modeIMM 0e03 fc58 bra v6502_modeIMP 3870 bra('v6502_modeZP'); bra('v6502_modeZP'); bra('v6502_modeZP'); bra('v6502_modeILL') # $04 xxx001xx 0e04 fc5d bra v6502_modeZP 0e05 fc5d bra v6502_modeZP 0e06 fc5d bra v6502_modeZP 0e07 fc58 bra v6502_modeIMP 3871 bra('v6502_modeIMP'); bra('v6502_modeIMM'); bra('v6502_modeACC'); bra('v6502_modeILL') # $08 xxx010xx 0e08 fc58 bra v6502_modeIMP 0e09 fc42 bra v6502_modeIMM 0e0a fc52 bra v6502_modeACC 0e0b fc58 bra v6502_modeIMP 3872 bra('v6502_modeABS'); bra('v6502_modeABS'); bra('v6502_modeABS'); bra('v6502_modeILL') # $0c xxx011xx 0e0c fc78 bra v6502_modeABS 0e0d fc78 bra v6502_modeABS 0e0e fc78 bra v6502_modeABS 0e0f fc58 bra v6502_modeIMP 3873 bra('v6502_modeREL'); bra('v6502_modeIZY'); bra('v6502_modeIMM'); bra('v6502_modeILL') # $10 xxx100xx 0e10 fccf bra v6502_modeREL 0e11 fcab bra v6502_modeIZY 0e12 fc42 bra v6502_modeIMM 0e13 fc58 bra v6502_modeIMP 3874 bra('v6502_modeZPX'); bra('v6502_modeZPX'); bra('v6502_modeZPX'); bra('v6502_modeILL') # $14 xxx101xx 0e14 fc5b bra v6502_modeZPX 0e15 fc5b bra v6502_modeZPX 0e16 fc5b bra v6502_modeZPX 0e17 fc58 bra v6502_modeIMP 3875 bra('v6502_modeIMP'); bra('v6502_modeABY'); bra('v6502_modeIMP'); bra('v6502_modeILL') # $18 xxx110xx 0e18 fc58 bra v6502_modeIMP 0e19 fc7b bra v6502_modeABY 0e1a fc58 bra v6502_modeIMP 0e1b fc58 bra v6502_modeIMP 3876 bra('v6502_modeABX'); bra('v6502_modeABX'); bra('v6502_modeABX'); bra('v6502_modeILL') # $1c xxx111xx 0e1c fc7a bra v6502_modeABX 0e1d fc7a bra v6502_modeABX 0e1e fc7a bra v6502_modeABX 0e1f fc58 bra v6502_modeIMP 3877 3878 # Special encoding cases for emulator: 3879 # $00 BRK - but gets mapped to #$DD handled in v6502_mode0 3880 # $20 JSR $DDDD but gets mapped to #$DD handled in v6502_mode0 and v6502_JSR 3881 # $40 RTI - but gets mapped to #$DD handled in v6502_mode0 3882 # $60 RTS - but gets mapped to #$DD handled in v6502_mode0 3883 # $6C JMP ($DDDD) but gets mapped to $DDDD handled in v6502_JMP2 3884 # $96 STX $DD,Y but gets mapped to $DD,X handled in v6502_STX2 3885 # $B6 LDX $DD,Y but gets mapped to $DD,X handled in v6502_LDX2 3886 # $BE LDX $DDDD,Y but gets mapped to $DDDD,X handled in v6502_modeABX 3887 3888 label('v6502_next') v6502_next: 0e20 8115 adda [$15] 3889 adda([vTicks]) #0 3890 blt('v6502_exitBefore') #1 No more ticks 0e21 e83a blt v6502_exitBefore 3891 label('v6502_next2') v6502_next2: 0e22 c215 st [$15] 3892 st([vTicks]) #2 3893 # 3894 # Fetch opcode 0e23 111a ld [$1a],x 3895 ld([v6502_PCL],X) #3 0e24 151b ld [$1b],y 3896 ld([v6502_PCH],Y) #4 0e25 0d00 ld [y,x] 3897 ld([Y,X]) #5 Fetch IR 0e26 c226 st [$26] 3898 st([v6502_IR]) #6 0e27 011a ld [$1a] 3899 ld([v6502_PCL]) #7 PC++ 0e28 8001 adda $01 3900 adda(1) #8 0e29 d21a st [$1a],x 3901 st([v6502_PCL],X) #9 0e2a f02d beq $0e2d 3902 beq(pc()+3) #10 0e2b fc2e bra $0e2e 3903 bra(pc()+3) #11 0e2c 0000 ld $00 3904 ld(0) #12 0e2d 0001 ld $01 3905 ld(1) #12(!) 0e2e 811b adda [$1b] 3906 adda([v6502_PCH]) #13 0e2f d61b st [$1b],y 3907 st([v6502_PCH],Y) #14 3908 # 3909 # Get addressing mode and fetch operands 0e30 0126 ld [$26] 3910 ld([v6502_IR]) #15 Get addressing mode 0e31 201f anda $1f 3911 anda(31) #16 0e32 fe00 bra ac 3912 bra(AC) #17 0e33 fc34 bra .next20 3913 bra('.next20') #18 3914 # (jump table) #19 3915 label('.next20') .next20: 0e34 0d00 ld [y,x] 3916 ld([Y,X]) #20 Fetch L 3917 # Most opcodes branch away at this point, but IR & 31 == 0 falls through 3918 # 3919 # Implicit Mode for BRK JSR RTI RTS (< 0x80) -- 26 cycles 3920 # Immediate Mode for LDY CPY CPX (>= 0x80) -- 36 cycles 3921 label('v6502_mode0') v6502_mode0: 0e35 0126 ld [$26] 3922 ld([v6502_IR]) #21 'xxx0000' 0e36 e845 blt .imm24 3923 bmi('.imm24') #22 0e37 011b ld [$1b] 3924 ld([v6502_PCH]) #23 0e38 fcf2 bra v6502_check 3925 bra('v6502_check') #24 0e39 00f3 ld $f3 3926 ld(-26/2) #25 3927 3928 # Resync with video driver. At this point we're returning BEFORE 3929 # fetching and executing the next instruction. 3930 label('v6502_exitBefore') v6502_exitBefore: 0e3a 8013 adda $13 3931 adda(v6502_maxTicks) #3 Exit BEFORE fetch 0e3b e43b bgt $0e3b 3932 bgt(pc()&255) #4 Resync 0e3c a001 suba $01 3933 suba(1) #5 0e3d 000d ld $0d 3934 ld(hi('v6502_ENTER')) #6 Set entry point to before 'fetch' 0e3e c205 st [$05] 3935 st([vCpuSelect]) #7 0e3f 1401 ld $01,y 3936 ld(hi('vBlankStart'),Y) #8 0e40 e11e jmp y,[$1e] 3937 jmp(Y,[vReturn]) #9 To video driver 0e41 0000 ld $00 3938 ld(0) #10 3939 assert v6502_overhead == 11 3940 3941 # Immediate Mode: #$FF -- 36 cycles 3942 label('v6502_modeIMM') v6502_modeIMM: 0e42 0200 nop 3943 nop() #21 Wait for v6502_mode0 to join 0e43 0200 nop 3944 nop() #22 0e44 011b ld [$1b] 3945 ld([v6502_PCH]) #23 Copy PC 3946 label('.imm24') .imm24: 0e45 c225 st [$25] 3947 st([v6502_ADH]) #24 0e46 011a ld [$1a] 3948 ld([v6502_PCL]) #25 0e47 d224 st [$24],x 3949 st([v6502_ADL],X) #26 0e48 8001 adda $01 3950 adda(1) #27 PC++ 0e49 c21a st [$1a] 3951 st([v6502_PCL]) #28 0e4a f04d beq $0e4d 3952 beq(pc()+3) #29 0e4b fc4e bra $0e4e 3953 bra(pc()+3) #30 0e4c 0000 ld $00 3954 ld(0) #31 0e4d 0001 ld $01 3955 ld(1) #31(!) 0e4e 811b adda [$1b] 3956 adda([v6502_PCH]) #32 0e4f c21b st [$1b] 3957 st([v6502_PCH]) #33 0e50 fcf2 bra v6502_check 3958 bra('v6502_check') #34 0e51 00ee ld $ee 3959 ld(-36/2) #35 3960 3961 # Accumulator Mode: ROL ROR LSL ASR -- 28 cycles 3962 label('v6502_modeACC') v6502_modeACC: 0e52 0018 ld $18 3963 ld(v6502_A&255) #21 Address of AC 0e53 d224 st [$24],x 3964 st([v6502_ADL],X) #22 0e54 0000 ld $00 3965 ld(v6502_A>>8) #23 0e55 c225 st [$25] 3966 st([v6502_ADH]) #24 0e56 00f2 ld $f2 3967 ld(-28/2) #25 0e57 fcf2 bra v6502_check 3968 bra('v6502_check') #26 3969 #nop() #27 Overlap 3970 # 3971 # Implied Mode: no operand -- 24 cycles 3972 label('v6502_modeILL') 3973 label('v6502_modeIMP') v6502_modeILL: v6502_modeIMP: 0e58 0200 nop 3974 nop() #21,27 0e59 fcf2 bra v6502_check 3975 bra('v6502_check') #22 0e5a 00f4 ld $f4 3976 ld(-24/2) #23 3977 3978 # Zero Page Modes: $DD $DD,X $DD,Y -- 36 cycles 3979 label('v6502_modeZPX') v6502_modeZPX: 0e5b fc5f bra .zp23 3980 bra('.zp23') #21 0e5c 812a adda [$2a] 3981 adda([v6502_X]) #22 3982 label('v6502_modeZP') v6502_modeZP: 0e5d fc5f bra .zp23 3983 bra('.zp23') #21 0e5e 0200 nop 3984 nop() #22 3985 label('.zp23') .zp23: 0e5f d224 st [$24],x 3986 st([v6502_ADL],X) #23 0e60 0000 ld $00 3987 ld(0) #24 H=0 0e61 c225 st [$25] 3988 st([v6502_ADH]) #25 0e62 0001 ld $01 3989 ld(1) #26 PC++ 0e63 811a adda [$1a] 3990 adda([v6502_PCL]) #27 0e64 c21a st [$1a] 3991 st([v6502_PCL]) #28 0e65 f068 beq $0e68 3992 beq(pc()+3) #29 0e66 fc69 bra $0e69 3993 bra(pc()+3) #30 0e67 0000 ld $00 3994 ld(0) #31 0e68 0001 ld $01 3995 ld(1) #31(!) 0e69 811b adda [$1b] 3996 adda([v6502_PCH]) #32 0e6a c21b st [$1b] 3997 st([v6502_PCH]) #33 0e6b fcf2 bra v6502_check 3998 bra('v6502_check') #34 0e6c 00ee ld $ee 3999 ld(-36/2) #35 4000 4001 # Possible retry loop for modeABS and modeIZY. Because these need 4002 # more time than the v6502_maxTicks of 38 Gigatron cycles, we may 4003 # have to restart them after the next horizontal pulse. 4004 label('.retry28') .retry28: 0e6d f070 beq $0e70 4005 beq(pc()+3) #28,37 PC-- 0e6e fc71 bra $0e71 4006 bra(pc()+3) #29 0e6f 0000 ld $00 4007 ld(0) #30 0e70 00ff ld $ff 4008 ld(-1) #30(!) 0e71 811b adda [$1b] 4009 adda([v6502_PCH]) #31 0e72 c21b st [$1b] 4010 st([v6502_PCH]) #32 0e73 011a ld [$1a] 4011 ld([v6502_PCL]) #33 0e74 a001 suba $01 4012 suba(1) #34 0e75 c21a st [$1a] 4013 st([v6502_PCL]) #35 0e76 fc20 bra v6502_next 4014 bra('v6502_next') #36 Retry until sufficient time 0e77 00ed ld $ed 4015 ld(-38/2) #37 4016 4017 # Absolute Modes: $DDDD $DDDD,X $DDDD,Y -- 64 cycles 4018 label('v6502_modeABS') v6502_modeABS: 0e78 fc7d bra .abs23 4019 bra('.abs23') #21 0e79 0000 ld $00 4020 ld(0) #22 4021 label('v6502_modeABX') v6502_modeABX: 0e7a fc7d bra .abs23 4022 bra('.abs23') #21 4023 label('v6502_modeABY') v6502_modeABY: 0e7b 012a ld [$2a] 4024 ld([v6502_X]) #21,22 0e7c 012b ld [$2b] 4025 ld([v6502_Y]) #22 4026 label('.abs23') .abs23: 0e7d c224 st [$24] 4027 st([v6502_ADL]) #23 0e7e 00f3 ld $f3 4028 ld(-64//2+v6502_maxTicks) #24 Is there enough time for the excess ticks? 0e7f 8115 adda [$15] 4029 adda([vTicks]) #25 0e80 e86d blt .retry28 4030 blt('.retry28') #26 0e81 011a ld [$1a] 4031 ld([v6502_PCL]) #27 0e82 0126 ld [$26] 4032 ld([v6502_IR]) #28 Special case $BE: LDX $DDDD,Y (we got X in ADL) 0e83 60be xora $be 4033 xora(0xbe) #29 0e84 f087 beq $0e87 4034 beq(pc()+3) #30 0e85 fc88 bra $0e88 4035 bra(pc()+3) #31 0e86 0124 ld [$24] 4036 ld([v6502_ADL]) #32 0e87 012b ld [$2b] 4037 ld([v6502_Y]) #32(!) 0e88 8d00 adda [y,x] 4038 adda([Y,X]) #33 Fetch and add L 0e89 c224 st [$24] 4039 st([v6502_ADL]) #34 0e8a e88e blt .abs37 4040 bmi('.abs37') #35 Carry? 0e8b ad00 suba [y,x] 4041 suba([Y,X]) #36 Gets back original operand 0e8c fc90 bra .abs39 4042 bra('.abs39') #37 0e8d 4d00 ora [y,x] 4043 ora([Y,X]) #38 Carry in bit 7 4044 label('.abs37') .abs37: 0e8e 2d00 anda [y,x] 4045 anda([Y,X]) #37 Carry in bit 7 0e8f 0200 nop 4046 nop() #38 4047 label('.abs39') .abs39: 0e90 3080 anda $80,x 4048 anda(0x80,X) #39 Move carry to bit 0 0e91 0500 ld [x] 4049 ld([X]) #40 0e92 c225 st [$25] 4050 st([v6502_ADH]) #41 0e93 011a ld [$1a] 4051 ld([v6502_PCL]) #42 PC++ 0e94 8001 adda $01 4052 adda(1) #43 0e95 d21a st [$1a],x 4053 st([v6502_PCL],X) #44 0e96 f099 beq $0e99 4054 beq(pc()+3) #45 0e97 fc9a bra $0e9a 4055 bra(pc()+3) #46 0e98 0000 ld $00 4056 ld(0) #47 0e99 0001 ld $01 4057 ld(1) #47(!) 0e9a 811b adda [$1b] 4058 adda([v6502_PCH]) #48 0e9b d61b st [$1b],y 4059 st([v6502_PCH],Y) #49 0e9c 0d00 ld [y,x] 4060 ld([Y,X]) #50 Fetch H 0e9d 8125 adda [$25] 4061 adda([v6502_ADH]) #51 0e9e c225 st [$25] 4062 st([v6502_ADH]) #52 0e9f 011a ld [$1a] 4063 ld([v6502_PCL]) #53 PC++ 0ea0 8001 adda $01 4064 adda(1) #54 0ea1 c21a st [$1a] 4065 st([v6502_PCL]) #55 0ea2 f0a5 beq $0ea5 4066 beq(pc()+3) #56 0ea3 fca6 bra $0ea6 4067 bra(pc()+3) #57 0ea4 0000 ld $00 4068 ld(0) #58 0ea5 0001 ld $01 4069 ld(1) #58(!) 0ea6 811b adda [$1b] 4070 adda([v6502_PCH]) #59 0ea7 c21b st [$1b] 4071 st([v6502_PCH]) #60 0ea8 1124 ld [$24],x 4072 ld([v6502_ADL],X) #61 0ea9 fcf2 bra v6502_check 4073 bra('v6502_check') #62 0eaa 00e0 ld $e0 4074 ld(-64/2) #63 4075 4076 # Indirect Indexed Mode: ($DD),Y -- 54 cycles 4077 label('v6502_modeIZY') v6502_modeIZY: 0eab 1200 ld ac,x 4078 ld(AC,X) #21 $DD 0eac 1400 ld $00,y 4079 ld(0,Y) #22 $00DD 0ead 00f8 ld $f8 4080 ld(-54//2+v6502_maxTicks) #23 Is there enough time for the excess ticks? 0eae 8115 adda [$15] 4081 adda([vTicks]) #24 0eaf 0200 nop 4082 nop() #25 0eb0 e86d blt .retry28 4083 blt('.retry28') #26 0eb1 011a ld [$1a] 4084 ld([v6502_PCL]) #27 0eb2 8001 adda $01 4085 adda(1) #28 PC++ 0eb3 c21a st [$1a] 4086 st([v6502_PCL]) #29 0eb4 f0b7 beq $0eb7 4087 beq(pc()+3) #30 0eb5 fcb8 bra $0eb8 4088 bra(pc()+3) #31 0eb6 0000 ld $00 4089 ld(0) #32 0eb7 0001 ld $01 4090 ld(1) #32(!) 0eb8 811b adda [$1b] 4091 adda([v6502_PCH]) #33 0eb9 c21b st [$1b] 4092 st([v6502_PCH]) #34 0eba 0d00 ld [y,x] 4093 ld([Y,X]) #35 Read word from zero-page 0ebb de00 st [y,x++] 4094 st([Y,Xpp]) #36 (Just X++) Wrap-around is correct 0ebc c224 st [$24] 4095 st([v6502_ADL]) #37 0ebd 0d00 ld [y,x] 4096 ld([Y,X]) #38 0ebe c225 st [$25] 4097 st([v6502_ADH]) #39 0ebf 012b ld [$2b] 4098 ld([v6502_Y]) #40 Add Y 0ec0 8124 adda [$24] 4099 adda([v6502_ADL]) #41 0ec1 c224 st [$24] 4100 st([v6502_ADL]) #42 0ec2 e8c6 blt .izy45 4101 bmi('.izy45') #43 Carry? 0ec3 a12b suba [$2b] 4102 suba([v6502_Y]) #44 Gets back original operand 0ec4 fcc8 bra .izy47 4103 bra('.izy47') #45 0ec5 412b ora [$2b] 4104 ora([v6502_Y]) #46 Carry in bit 7 4105 label('.izy45') .izy45: 0ec6 212b anda [$2b] 4106 anda([v6502_Y]) #45 Carry in bit 7 0ec7 0200 nop 4107 nop() #46 4108 label('.izy47') .izy47: 0ec8 3080 anda $80,x 4109 anda(0x80,X) #47 Move carry to bit 0 0ec9 0500 ld [x] 4110 ld([X]) #48 0eca 8125 adda [$25] 4111 adda([v6502_ADH]) #49 0ecb c225 st [$25] 4112 st([v6502_ADH]) #50 0ecc 1124 ld [$24],x 4113 ld([v6502_ADL],X) #51 0ecd fcf2 bra v6502_check 4114 bra('v6502_check') #52 0ece 00e5 ld $e5 4115 ld(-54/2) #53 4116 4117 # Relative Mode: BEQ BNE BPL BMI BCC BCS BVC BVS -- 36 cycles 4118 label('v6502_modeREL') v6502_modeREL: 0ecf d224 st [$24],x 4119 st([v6502_ADL],X) #21 Offset (Only needed for branch) 0ed0 e8d3 blt $0ed3 4120 bmi(pc()+3) #22 Sign extend 0ed1 fcd4 bra $0ed4 4121 bra(pc()+3) #23 0ed2 0000 ld $00 4122 ld(0) #24 0ed3 00ff ld $ff 4123 ld(255) #24(!) 0ed4 c225 st [$25] 4124 st([v6502_ADH]) #25 0ed5 011a ld [$1a] 4125 ld([v6502_PCL]) #26 PC++ (Needed for both cases) 0ed6 8001 adda $01 4126 adda(1) #27 0ed7 c21a st [$1a] 4127 st([v6502_PCL]) #28 0ed8 f0db beq $0edb 4128 beq(pc()+3) #29 0ed9 fcdc bra $0edc 4129 bra(pc()+3) #30 0eda 0000 ld $00 4130 ld(0) #31 0edb 0001 ld $01 4131 ld(1) #31(!) 0edc 811b adda [$1b] 4132 adda([v6502_PCH]) #32 0edd c21b st [$1b] 4133 st([v6502_PCH]) #33 0ede fcf2 bra v6502_check 4134 bra('v6502_check') #34 0edf 00ee ld $ee 4135 ld(-36/2) #53 4136 4137 # Indexed Indirect Mode: ($DD,X) -- 38 cycles 4138 label('v6502_modeIZX') v6502_modeIZX: 0ee0 812a adda [$2a] 4139 adda([v6502_X]) #21 Add X 0ee1 c21d st [$1d] 4140 st([v6502_Tmp]) #22 0ee2 9001 adda $01,x 4141 adda(1,X) #23 Read word from zero-page 0ee3 0500 ld [x] 4142 ld([X]) #24 0ee4 c225 st [$25] 4143 st([v6502_ADH]) #25 0ee5 111d ld [$1d],x 4144 ld([v6502_Tmp],X) #26 0ee6 0500 ld [x] 4145 ld([X]) #27 0ee7 d224 st [$24],x 4146 st([v6502_ADL],X) #28 0ee8 011a ld [$1a] 4147 ld([v6502_PCL]) #29 PC++ 0ee9 8001 adda $01 4148 adda(1) #30 0eea c21a st [$1a] 4149 st([v6502_PCL]) #31 0eeb f0ee beq $0eee 4150 beq(pc()+3) #32 0eec fcef bra $0eef 4151 bra(pc()+3) #33 0eed 0000 ld $00 4152 ld(0) #34 0eee 0001 ld $01 4153 ld(1) #34(!) 0eef 811b adda [$1b] 4154 adda([v6502_PCH]) #35 0ef0 c21b st [$1b] 4155 st([v6502_PCH]) #36 0ef1 00ed ld $ed 4156 ld(-38/2) #37 !!! Fall through to v6502_check !!! 4157 # 4158 # Update elapsed time for the addressing mode processing. 4159 # Then check if we can immediately execute this instruction. 4160 # Otherwise transfer control to the video driver. 4161 label('v6502_check') v6502_check: 0ef2 8115 adda [$15] 4162 adda([vTicks]) #0 4163 blt('v6502_exitAfter') #1 No more ticks 0ef3 e8f8 blt v6502_exitAfter 0ef4 c215 st [$15] 4164 st([vTicks]) #2 0ef5 140f ld $0f,y 4165 ld(hi('v6502_execute'),Y) #3 0ef6 e126 jmp y,[$26] 4166 jmp(Y,[v6502_IR]) #4 0ef7 fcff bra $ff 4167 bra(255) #5 4168 4169 # Otherwise resync with video driver. At this point we're returning AFTER 4170 # addressing mode decoding, but before executing the instruction. 4171 label('v6502_exitAfter') v6502_exitAfter: 0ef8 8013 adda $13 4172 adda(v6502_maxTicks) #3 Exit AFTER fetch 0ef9 e4f9 bgt $0ef9 4173 bgt(pc()&255) #4 Resync 0efa a001 suba $01 4174 suba(1) #5 0efb 0010 ld $10 4175 ld(hi('v6502_RESUME')) #6 Set entry point to before 'execute' 0efc c205 st [$05] 4176 st([vCpuSelect]) #7 0efd 1401 ld $01,y 4177 ld(hi('vBlankStart'),Y) #8 0efe e11e jmp y,[$1e] 4178 jmp(Y,[vReturn]) #9 To video driver 0eff 0000 ld $00 4179 ld(0) #10 4180 assert v6502_overhead == 11 4181 4182 align(0x100,size=0x100) 4183 label('v6502_execute') 4184 # This page works as a 255-entry (0..254) jump table for 6502 opcodes. 4185 # Jumping into this page must have 'bra 255' in the branch delay slot 4186 # in order to get out again and dispatch to the right continuation. 4187 # X must hold [v6502_ADL], 4188 # Y will hold hi('v6502_execute'), 4189 # A will be loaded with the code offset (this is skipped at offset $ff) v6502_execute: 0f00 00fd ld $fd 4190 ld('v6502_BRK'); ld('v6502_ORA'); ld('v6502_ILL'); ld('v6502_ILL') #6 $00 0f01 0089 ld $89 0f02 00fd ld $fd 0f03 00fd ld $fd 0f04 00fd ld $fd 4191 ld('v6502_ILL'); ld('v6502_ORA'); ld('v6502_ASL'); ld('v6502_ILL') #6 0f05 0089 ld $89 0f06 00f1 ld $f1 0f07 00fd ld $fd 0f08 00f3 ld $f3 4192 ld('v6502_PHP'); ld('v6502_ORA'); ld('v6502_ASL'); ld('v6502_ILL') #6 0f09 0089 ld $89 0f0a 00f1 ld $f1 0f0b 00fd ld $fd 0f0c 00fd ld $fd 4193 ld('v6502_ILL'); ld('v6502_ORA'); ld('v6502_ASL'); ld('v6502_ILL') #6 0f0d 0089 ld $89 0f0e 00f1 ld $f1 0f0f 00fd ld $fd 0f10 003f ld $3f 4194 ld('v6502_BPL'); ld('v6502_ORA'); ld('v6502_ILL'); ld('v6502_ILL') #6 $10 0f11 0089 ld $89 0f12 00fd ld $fd 0f13 00fd ld $fd 0f14 00fd ld $fd 4195 ld('v6502_ILL'); ld('v6502_ORA'); ld('v6502_ASL'); ld('v6502_ILL') #6 0f15 0089 ld $89 0f16 00f1 ld $f1 0f17 00fd ld $fd 0f18 0036 ld $36 4196 ld('v6502_CLC'); ld('v6502_ORA'); ld('v6502_ILL'); ld('v6502_ILL') #6 0f19 0089 ld $89 0f1a 00fd ld $fd 0f1b 00fd ld $fd 0f1c 00fd ld $fd 4197 ld('v6502_ILL'); ld('v6502_ORA'); ld('v6502_ASL'); ld('v6502_ILL') #6 0f1d 0089 ld $89 0f1e 00f1 ld $f1 0f1f 00fd ld $fd 0f20 009a ld $9a 4198 ld('v6502_JSR'); ld('v6502_AND'); ld('v6502_ILL'); ld('v6502_ILL') #6 $20 0f21 0085 ld $85 0f22 00fd ld $fd 0f23 00fd ld $fd 0f24 00f5 ld $f5 4199 ld('v6502_BIT'); ld('v6502_AND'); ld('v6502_ROL'); ld('v6502_ILL') #6 0f25 0085 ld $85 0f26 00f7 ld $f7 0f27 00fd ld $fd 0f28 00f9 ld $f9 4200 ld('v6502_PLP'); ld('v6502_AND'); ld('v6502_ROL'); ld('v6502_ILL') #6 0f29 0085 ld $85 0f2a 00f7 ld $f7 0f2b 00fd ld $fd 0f2c 00f5 ld $f5 4201 ld('v6502_BIT'); ld('v6502_AND'); ld('v6502_ROL'); ld('v6502_ILL') #6 0f2d 0085 ld $85 0f2e 00f7 ld $f7 0f2f 00fd ld $fd 0f30 0042 ld $42 4202 ld('v6502_BMI'); ld('v6502_AND'); ld('v6502_ILL'); ld('v6502_ILL') #6 $30 0f31 0085 ld $85 0f32 00fd ld $fd 0f33 00fd ld $fd 0f34 00fd ld $fd 4203 ld('v6502_ILL'); ld('v6502_AND'); ld('v6502_ROL'); ld('v6502_ILL') #6 0f35 0085 ld $85 0f36 00f7 ld $f7 0f37 00fd ld $fd 0f38 0038 ld $38 4204 ld('v6502_SEC'); ld('v6502_AND'); ld('v6502_ILL'); ld('v6502_ILL') #6 0f39 0085 ld $85 0f3a 00fd ld $fd 0f3b 00fd ld $fd 0f3c 00fd ld $fd 4205 ld('v6502_ILL'); ld('v6502_AND'); ld('v6502_ROL'); ld('v6502_ILL') #6 0f3d 0085 ld $85 0f3e 00f7 ld $f7 0f3f 00fd ld $fd 0f40 00d3 ld $d3 4206 ld('v6502_RTI'); ld('v6502_EOR'); ld('v6502_ILL'); ld('v6502_ILL') #6 $40 0f41 008c ld $8c 0f42 00fd ld $fd 0f43 00fd ld $fd 0f44 00fd ld $fd 4207 ld('v6502_ILL'); ld('v6502_EOR'); ld('v6502_LSR'); ld('v6502_ILL') #6 0f45 008c ld $8c 0f46 00d7 ld $d7 0f47 00fd ld $fd 0f48 00d9 ld $d9 4208 ld('v6502_PHA'); ld('v6502_EOR'); ld('v6502_LSR'); ld('v6502_ILL') #6 0f49 008c ld $8c 0f4a 00d7 ld $d7 0f4b 00fd ld $fd 0f4c 0096 ld $96 4209 ld('v6502_JMP1');ld('v6502_EOR'); ld('v6502_LSR'); ld('v6502_ILL') #6 0f4d 008c ld $8c 0f4e 00d7 ld $d7 0f4f 00fd ld $fd 0f50 0045 ld $45 4210 ld('v6502_BVC'); ld('v6502_EOR'); ld('v6502_ILL'); ld('v6502_ILL') #6 $50 0f51 008c ld $8c 0f52 00fd ld $fd 0f53 00fd ld $fd 0f54 00fd ld $fd 4211 ld('v6502_ILL'); ld('v6502_EOR'); ld('v6502_LSR'); ld('v6502_ILL') #6 0f55 008c ld $8c 0f56 00d7 ld $d7 0f57 00fd ld $fd 0f58 00db ld $db 4212 ld('v6502_CLI'); ld('v6502_EOR'); ld('v6502_ILL'); ld('v6502_ILL') #6 0f59 008c ld $8c 0f5a 00fd ld $fd 0f5b 00fd ld $fd 0f5c 00fd ld $fd 4213 ld('v6502_ILL'); ld('v6502_EOR'); ld('v6502_LSR'); ld('v6502_ILL') #6 0f5d 008c ld $8c 0f5e 00d7 ld $d7 0f5f 00fd ld $fd 0f60 00dd ld $dd 4214 ld('v6502_RTS'); ld('v6502_ADC'); ld('v6502_ILL'); ld('v6502_ILL') #6 $60 0f61 0001 ld $01 0f62 00fd ld $fd 0f63 00fd ld $fd 0f64 00fd ld $fd 4215 ld('v6502_ILL'); ld('v6502_ADC'); ld('v6502_ROR'); ld('v6502_ILL') #6 0f65 0001 ld $01 0f66 00d5 ld $d5 0f67 00fd ld $fd 0f68 00df ld $df 4216 ld('v6502_PLA'); ld('v6502_ADC'); ld('v6502_ROR'); ld('v6502_ILL') #6 0f69 0001 ld $01 0f6a 00d5 ld $d5 0f6b 00fd ld $fd 0f6c 0098 ld $98 4217 ld('v6502_JMP2');ld('v6502_ADC'); ld('v6502_ROR'); ld('v6502_ILL') #6 0f6d 0001 ld $01 0f6e 00d5 ld $d5 0f6f 00fd ld $fd 0f70 0049 ld $49 4218 ld('v6502_BVS'); ld('v6502_ADC'); ld('v6502_ILL'); ld('v6502_ILL') #6 $70 0f71 0001 ld $01 0f72 00fd ld $fd 0f73 00fd ld $fd 0f74 00fd ld $fd 4219 ld('v6502_ILL'); ld('v6502_ADC'); ld('v6502_ROR'); ld('v6502_ILL') #6 0f75 0001 ld $01 0f76 00d5 ld $d5 0f77 00fd ld $fd 0f78 00e1 ld $e1 4220 ld('v6502_SEI'); ld('v6502_ADC'); ld('v6502_ILL'); ld('v6502_ILL') #6 0f79 0001 ld $01 0f7a 00fd ld $fd 0f7b 00fd ld $fd 0f7c 00fd ld $fd 4221 ld('v6502_ILL'); ld('v6502_ADC'); ld('v6502_ROR'); ld('v6502_ILL') #6 0f7d 0001 ld $01 0f7e 00d5 ld $d5 0f7f 00fd ld $fd 0f80 00fd ld $fd 4222 ld('v6502_ILL'); ld('v6502_STA'); ld('v6502_ILL'); ld('v6502_ILL') #6 $80 0f81 00c1 ld $c1 0f82 00fd ld $fd 0f83 00fd ld $fd 0f84 00c7 ld $c7 4223 ld('v6502_STY'); ld('v6502_STA'); ld('v6502_STX'); ld('v6502_ILL') #6 0f85 00c1 ld $c1 0f86 00c3 ld $c3 0f87 00fd ld $fd 0f88 007f ld $7f 4224 ld('v6502_DEY'); ld('v6502_ILL'); ld('v6502_TXA'); ld('v6502_ILL') #6 0f89 00fd ld $fd 0f8a 00cd ld $cd 0f8b 00fd ld $fd 0f8c 00c7 ld $c7 4225 ld('v6502_STY'); ld('v6502_STA'); ld('v6502_STX'); ld('v6502_ILL') #6 0f8d 00c1 ld $c1 0f8e 00c3 ld $c3 0f8f 00fd ld $fd 0f90 004d ld $4d 4226 ld('v6502_BCC'); ld('v6502_STA'); ld('v6502_ILL'); ld('v6502_ILL') #6 $90 0f91 00c1 ld $c1 0f92 00fd ld $fd 0f93 00fd ld $fd 0f94 00c7 ld $c7 4227 ld('v6502_STY'); ld('v6502_STA'); ld('v6502_STX2');ld('v6502_ILL') #6 0f95 00c1 ld $c1 0f96 00c5 ld $c5 0f97 00fd ld $fd 0f98 00cf ld $cf 4228 ld('v6502_TYA'); ld('v6502_STA'); ld('v6502_TXS'); ld('v6502_ILL') #6 0f99 00c1 ld $c1 0f9a 00e3 ld $e3 0f9b 00fd ld $fd 0f9c 00fd ld $fd 4229 ld('v6502_ILL'); ld('v6502_STA'); ld('v6502_ILL'); ld('v6502_ILL') #6 0f9d 00c1 ld $c1 0f9e 00fd ld $fd 0f9f 00fd ld $fd 0fa0 00bf ld $bf 4230 ld('v6502_LDY'); ld('v6502_LDA'); ld('v6502_LDX'); ld('v6502_ILL') #6 $A0 0fa1 00b9 ld $b9 0fa2 00bb ld $bb 0fa3 00fd ld $fd 0fa4 00bf ld $bf 4231 ld('v6502_LDY'); ld('v6502_LDA'); ld('v6502_LDX'); ld('v6502_ILL') #6 0fa5 00b9 ld $b9 0fa6 00bb ld $bb 0fa7 00fd ld $fd 0fa8 00cb ld $cb 4232 ld('v6502_TAY'); ld('v6502_LDA'); ld('v6502_TAX'); ld('v6502_ILL') #6 0fa9 00b9 ld $b9 0faa 00c9 ld $c9 0fab 00fd ld $fd 0fac 00bf ld $bf 4233 ld('v6502_LDY'); ld('v6502_LDA'); ld('v6502_LDX'); ld('v6502_ILL') #6 0fad 00b9 ld $b9 0fae 00bb ld $bb 0faf 00fd ld $fd 0fb0 0051 ld $51 4234 ld('v6502_BCS'); ld('v6502_LDA'); ld('v6502_ILL'); ld('v6502_ILL') #6 $B0 0fb1 00b9 ld $b9 0fb2 00fd ld $fd 0fb3 00fd ld $fd 0fb4 00bf ld $bf 4235 ld('v6502_LDY'); ld('v6502_LDA'); ld('v6502_LDX2');ld('v6502_ILL') #6 0fb5 00b9 ld $b9 0fb6 00bd ld $bd 0fb7 00fd ld $fd 0fb8 00d1 ld $d1 4236 ld('v6502_CLV'); ld('v6502_LDA'); ld('v6502_TSX'); ld('v6502_ILL') #6 0fb9 00b9 ld $b9 0fba 00e5 ld $e5 0fbb 00fd ld $fd 0fbc 00bf ld $bf 4237 ld('v6502_LDY'); ld('v6502_LDA'); ld('v6502_LDX'); ld('v6502_ILL') #6 0fbd 00b9 ld $b9 0fbe 00bb ld $bb 0fbf 00fd ld $fd 0fc0 00e7 ld $e7 4238 ld('v6502_CPY'); ld('v6502_CMP'); ld('v6502_ILL'); ld('v6502_ILL') #6 $C0 0fc1 00e9 ld $e9 0fc2 00fd ld $fd 0fc3 00fd ld $fd 0fc4 00e7 ld $e7 4239 ld('v6502_CPY'); ld('v6502_CMP'); ld('v6502_DEC'); ld('v6502_ILL') #6 0fc5 00e9 ld $e9 0fc6 00eb ld $eb 0fc7 00fd ld $fd 0fc8 007b ld $7b 4240 ld('v6502_INY'); ld('v6502_CMP'); ld('v6502_DEX'); ld('v6502_ILL') #6 0fc9 00e9 ld $e9 0fca 0077 ld $77 0fcb 00fd ld $fd 0fcc 00e7 ld $e7 4241 ld('v6502_CPY'); ld('v6502_CMP'); ld('v6502_DEC'); ld('v6502_ILL') #6 0fcd 00e9 ld $e9 0fce 00eb ld $eb 0fcf 00fd ld $fd 0fd0 0055 ld $55 4242 ld('v6502_BNE'); ld('v6502_CMP'); ld('v6502_ILL'); ld('v6502_ILL') #6 $D0 0fd1 00e9 ld $e9 0fd2 00fd ld $fd 0fd3 00fd ld $fd 0fd4 00fd ld $fd 4243 ld('v6502_ILL'); ld('v6502_CMP'); ld('v6502_DEC'); ld('v6502_ILL') #6 0fd5 00e9 ld $e9 0fd6 00eb ld $eb 0fd7 00fd ld $fd 0fd8 00ed ld $ed 4244 ld('v6502_CLD'); ld('v6502_CMP'); ld('v6502_ILL'); ld('v6502_ILL') #6 0fd9 00e9 ld $e9 0fda 00fd ld $fd 0fdb 00fd ld $fd 0fdc 00fd ld $fd 4245 ld('v6502_ILL'); ld('v6502_CMP'); ld('v6502_DEC'); ld('v6502_ILL') #6 0fdd 00e9 ld $e9 0fde 00eb ld $eb 0fdf 00fd ld $fd 0fe0 00ef ld $ef 4246 ld('v6502_CPX'); ld('v6502_SBC'); ld('v6502_ILL'); ld('v6502_ILL') #6 $E0 0fe1 0029 ld $29 0fe2 00fd ld $fd 0fe3 00fd ld $fd 0fe4 00ef ld $ef 4247 ld('v6502_CPX'); ld('v6502_SBC'); ld('v6502_INC'); ld('v6502_ILL') #6 0fe5 0029 ld $29 0fe6 00b7 ld $b7 0fe7 00fd ld $fd 0fe8 006c ld $6c 4248 ld('v6502_INX'); ld('v6502_SBC'); ld('v6502_NOP'); ld('v6502_ILL') #6 0fe9 0029 ld $29 0fea 0083 ld $83 0feb 00fd ld $fd 0fec 00ef ld $ef 4249 ld('v6502_CPX'); ld('v6502_SBC'); ld('v6502_INC'); ld('v6502_ILL') #6 0fed 0029 ld $29 0fee 00b7 ld $b7 0fef 00fd ld $fd 0ff0 0058 ld $58 4250 ld('v6502_BEQ'); ld('v6502_SBC'); ld('v6502_ILL'); ld('v6502_ILL') #6 $F0 0ff1 0029 ld $29 0ff2 00fd ld $fd 0ff3 00fd ld $fd 0ff4 00fd ld $fd 4251 ld('v6502_ILL'); ld('v6502_SBC'); ld('v6502_INC'); ld('v6502_ILL') #6 0ff5 0029 ld $29 0ff6 00b7 ld $b7 0ff7 00fd ld $fd 0ff8 00fb ld $fb 4252 ld('v6502_SED'); ld('v6502_SBC'); ld('v6502_ILL'); ld('v6502_ILL') #6 0ff9 0029 ld $29 0ffa 00fd ld $fd 0ffb 00fd ld $fd 0ffc 00fd ld $fd 4253 ld('v6502_ILL'); ld('v6502_SBC'); ld('v6502_INC') #6 0ffd 0029 ld $29 0ffe 00b7 ld $b7 0fff fe00 bra ac 4254 bra(AC) #6,7 Dispatch into next page 4255 # --- Page boundary --- 4256 align(0x100,size=0x100) 1000 140e ld $0e,y 4257 ld(hi('v6502_next'),Y) #8 Handy for instructions that don't clobber Y 4258 4259 label('v6502_ADC') 4260 assert pc()&255 == 1 4261 assert v6502_Cflag == 1 4262 assert v6502_Vemu == 128 v6502_ADC: 1001 1525 ld [$25],y 4263 ld([v6502_ADH],Y) #9 Must be at page offset 1, so A=1 1002 2127 anda [$27] 4264 anda([v6502_P]) #10 Carry in (AC=1 because lo('v6502_ADC')=1) 1003 8118 adda [$18] 4265 adda([v6502_A]) #11 Sum 1004 f020 beq .adc14 4266 beq('.adc14') #12 Danger zone for dropping a carry 1005 8d00 adda [y,x] 4267 adda([Y,X]) #13 1006 c228 st [$28] 4268 st([v6502_Qz]) #14 Z flag, don't overwrite left-hand side (A) yet 1007 c229 st [$29] 4269 st([v6502_Qn]) #15 N flag 1008 6118 xora [$18] 4270 xora([v6502_A]) #16 V flag, (Q^A) & (B^Q) & 0x80 1009 c218 st [$18] 4271 st([v6502_A]) #17 100a 0d00 ld [y,x] 4272 ld([Y,X]) #18 100b 6128 xora [$28] 4273 xora([v6502_Qz]) #19 100c 2118 anda [$18] 4274 anda([v6502_A]) #20 100d 2080 anda $80 4275 anda(0x80) #21 100e c21d st [$1d] 4276 st([v6502_Tmp]) #22 100f 0128 ld [$28] 4277 ld([v6502_Qz]) #23 Update A 1010 c218 st [$18] 4278 st([v6502_A]) #24 1011 e815 blt .adc27 4279 bmi('.adc27') #25 C flag 1012 ad00 suba [y,x] 4280 suba([Y,X]) #26 1013 fc17 bra .adc29 4281 bra('.adc29') #27 1014 4d00 ora [y,x] 4282 ora([Y,X]) #28 4283 label('.adc27') .adc27: 1015 2d00 anda [y,x] 4284 anda([Y,X]) #27 1016 0200 nop 4285 nop() #28 4286 label('.adc29') .adc29: 1017 3080 anda $80,x 4287 anda(0x80,X) #29 1018 0127 ld [$27] 4288 ld([v6502_P]) #30 Update P 1019 207e anda $7e 4289 anda(~v6502_Vemu&~v6502_Cflag) #31 101a 4500 ora [x] 4290 ora([X]) #32 101b 411d ora [$1d] 4291 ora([v6502_Tmp]) #33 101c c227 st [$27] 4292 st([v6502_P]) #34 101d 140e ld $0e,y 4293 ld(hi('v6502_next'),Y) #35 101e e020 jmp y,$20 4294 jmp(Y,'v6502_next') #36 101f 00ed ld $ed 4295 ld(-38/2) #37 4296 # Cin=1, A=$FF, B=$DD --> Result=$DD, Cout=1, V=0 4297 # Cin=0, A=$00, B=$DD --> Result=$DD, Cout=0, V=0 4298 label('.adc14') .adc14: 1020 c218 st [$18] 4299 st([v6502_A]) #14 Special case 1021 c228 st [$28] 4300 st([v6502_Qz]) #15 Z flag 1022 c229 st [$29] 4301 st([v6502_Qn]) #16 N flag 1023 0127 ld [$27] 4302 ld([v6502_P]) #17 1024 207f anda $7f 4303 anda(0x7f) #18 V=0, keep C 1025 c227 st [$27] 4304 st([v6502_P]) #19 1026 140e ld $0e,y 4305 ld(hi('v6502_next'),Y) #20 1027 00f4 ld $f4 4306 ld(-24/2) #21 1028 e020 jmp y,$20 4307 jmp(Y,'v6502_next') #22 4308 #nop() #23 Overlap 4309 # 4310 label('v6502_SBC') 4311 # No matter how hard we try, v6502_SBC always comes out a lot clumsier 4312 # than v6502_ADC. And that one already barely fits in 38 cycles and is 4313 # hard to follow. So we use a hack: transmorph our SBC into an ADC with 4314 # inverted operand, and then dispatch again. Simple and effective. v6502_SBC: 1029 1525 ld [$25],y 4315 ld([v6502_ADH],Y) #9,24 102a 0d00 ld [y,x] 4316 ld([Y,X]) #10 102b 60ff xora $ff 4317 xora(255) #11 Invert right-hand side operand 102c c219 st [$19] 4318 st([v6502_BI]) #12 Park modified operand for v6502_ADC 102d 0019 ld $19 4319 ld(v6502_BI&255) #13 Address of BI 102e d224 st [$24],x 4320 st([v6502_ADL],X) #14 102f 0000 ld $00 4321 ld(v6502_BI>>8) #15 1030 c225 st [$25] 4322 st([v6502_ADH]) #16 1031 0069 ld $69 4323 ld(0x69) #17 ADC #$xx (Any ADC opcode will do) 1032 c226 st [$26] 4324 st([v6502_IR]) #18 1033 140e ld $0e,y 4325 ld(hi('v6502_check'),Y) #20 Go back to time check before dispatch 1034 e0f2 jmp y,$f2 4326 jmp(Y,'v6502_check') #20 1035 00f5 ld $f5 4327 ld(-22/2) #21 4328 4329 # Carry calculation table 4330 # L7 R7 C7 RX UC SC 4331 # -- -- -- | -- -- -- 4332 # 0 0 0 | 0 0 0 4333 # 0 0 1 | 0 0 0 4334 # 1 0 0 | 0 1 +1 4335 # 1 0 1 | 0 0 0 4336 # 0 1 0 | -1 1 0 4337 # 0 1 1 | -1 0 -1 4338 # 1 1 0 | -1 1 0 4339 # 1 1 1 | -1 1 0 4340 # -- -- -- | -- -- -- 4341 # ^ ^ ^ ^ ^ ^ 4342 # | | | | | `--- Carry of unsigned L + signed R: SC = RX + UC 4343 # | | | | `----- Carry of unsigned L + unsigned R: UC = C7 ? L7&R7 : L7|R7 4344 # | | | `------- Sign extension of signed R 4345 # | | `--------- MSB of unextended L + R 4346 # | `----------- MSB of right operand R 4347 # `------------- MSB of left operand L 4348 4349 label('v6502_CLC') v6502_CLC: 1036 0127 ld [$27] 4350 ld([v6502_P]) #9 1037 fc3b bra .sec12 4351 bra('.sec12') #10 4352 label('v6502_SEC') v6502_SEC: 1038 20fe anda $fe 4353 anda(~v6502_Cflag) #9,11 Overlap 1039 0127 ld [$27] 4354 ld([v6502_P]) #10 103a 4001 ora $01 4355 ora(v6502_Cflag) #11 4356 label('.sec12') .sec12: 103b c227 st [$27] 4357 st([v6502_P]) #12 103c 0200 nop 4358 nop() #13 4359 label('.next14') .next14: 103d e020 jmp y,$20 4360 jmp(Y,'v6502_next') #14 103e 00f8 ld $f8 4361 ld(-16/2) #15 4362 4363 label('v6502_BPL') v6502_BPL: 103f 0129 ld [$29] 4364 ld([v6502_Qn]) #9 1040 e875 blt .next12 4365 bmi('.next12') #10 1041 f45b bge .branch13 4366 bpl('.branch13') #11 4367 #nop() #12 Overlap 4368 label('v6502_BMI') v6502_BMI: 1042 0129 ld [$29] 4369 ld([v6502_Qn]) #9,12 1043 f475 bge .next12 4370 bpl('.next12') #10 1044 e85b blt .branch13 4371 bmi('.branch13') #11 4372 #nop() #12 Overlap 4373 label('v6502_BVC') v6502_BVC: 1045 0127 ld [$27] 4374 ld([v6502_P]) #9,12 1046 2080 anda $80 4375 anda(v6502_Vemu) #10 1047 f05b beq .branch13 4376 beq('.branch13') #11 1048 ec3d bne .next14 4377 bne('.next14') #12 4378 #nop() #13 Overlap 4379 label('v6502_BVS') v6502_BVS: 1049 0127 ld [$27] 4380 ld([v6502_P]) #9,13 104a 2080 anda $80 4381 anda(v6502_Vemu) #10 104b ec5b bne .branch13 4382 bne('.branch13') #11 104c f03d beq .next14 4383 beq('.next14') #12 4384 #nop() #13 Overlap 4385 label('v6502_BCC') v6502_BCC: 104d 0127 ld [$27] 4386 ld([v6502_P]) #9,13 104e 2001 anda $01 4387 anda(v6502_Cflag) #10 104f f05b beq .branch13 4388 beq('.branch13') #11 1050 ec3d bne .next14 4389 bne('.next14') #12 4390 #nop() #13 Overlap 4391 label('v6502_BCS') v6502_BCS: 1051 0127 ld [$27] 4392 ld([v6502_P]) #9,13 1052 2001 anda $01 4393 anda(v6502_Cflag) #10 1053 ec5b bne .branch13 4394 bne('.branch13') #11 1054 f03d beq .next14 4395 beq('.next14') #12 4396 #nop() #13 Overlap 4397 label('v6502_BNE') v6502_BNE: 1055 0128 ld [$28] 4398 ld([v6502_Qz]) #9,13 1056 f075 beq .next12 4399 beq('.next12') #10 1057 ec5b bne .branch13 4400 bne('.branch13') #11 4401 #nop() #12 Overlap 4402 label('v6502_BEQ') v6502_BEQ: 1058 0128 ld [$28] 4403 ld([v6502_Qz]) #9,12 1059 ec75 bne .next12 4404 bne('.next12') #10 105a f05b beq .branch13 4405 beq('.branch13') #11 4406 #nop() #12 Overlap 4407 label('.branch13') .branch13: 105b 0124 ld [$24] 4408 ld([v6502_ADL]) #13,12 PC + offset 105c 811a adda [$1a] 4409 adda([v6502_PCL]) #14 105d c21a st [$1a] 4410 st([v6502_PCL]) #15 105e e862 blt .bra0 4411 bmi('.bra0') #16 Carry 105f a124 suba [$24] 4412 suba([v6502_ADL]) #17 1060 fc64 bra .bra1 4413 bra('.bra1') #18 1061 4124 ora [$24] 4414 ora([v6502_ADL]) #19 4415 label('.bra0') .bra0: 1062 2124 anda [$24] 4416 anda([v6502_ADL]) #18 1063 0200 nop 4417 nop() #19 4418 label('.bra1') .bra1: 1064 3080 anda $80,x 4419 anda(0x80,X) #20 1065 0500 ld [x] 4420 ld([X]) #21 1066 8125 adda [$25] 4421 adda([v6502_ADH]) #22 1067 811b adda [$1b] 4422 adda([v6502_PCH]) #23 1068 c21b st [$1b] 4423 st([v6502_PCH]) #24 1069 0200 nop 4424 nop() #25 106a e020 jmp y,$20 4425 jmp(Y,'v6502_next') #26 106b 00f2 ld $f2 4426 ld(-28/2) #27 4427 4428 label('v6502_INX') v6502_INX: 106c 0200 nop 4429 nop() #9 106d 012a ld [$2a] 4430 ld([v6502_X]) #10 106e 8001 adda $01 4431 adda(1) #11 106f c22a st [$2a] 4432 st([v6502_X]) #12 4433 label('.inx13') .inx13: 1070 c228 st [$28] 4434 st([v6502_Qz]) #13 Z flag 1071 c229 st [$29] 4435 st([v6502_Qn]) #14 N flag 1072 00f7 ld $f7 4436 ld(-18/2) #15 1073 e020 jmp y,$20 4437 jmp(Y,'v6502_next') #16 1074 0200 nop 4438 nop() #17 4439 4440 label('.next12') .next12: 1075 e020 jmp y,$20 4441 jmp(Y,'v6502_next') #12 1076 00f9 ld $f9 4442 ld(-14/2) #13 4443 4444 label('v6502_DEX') v6502_DEX: 1077 012a ld [$2a] 4445 ld([v6502_X]) #9 1078 a001 suba $01 4446 suba(1) #10 1079 fc70 bra .inx13 4447 bra('.inx13') #11 107a c22a st [$2a] 4448 st([v6502_X]) #12 4449 4450 label('v6502_INY') v6502_INY: 107b 012b ld [$2b] 4451 ld([v6502_Y]) #9 107c 8001 adda $01 4452 adda(1) #10 107d fc70 bra .inx13 4453 bra('.inx13') #11 107e c22b st [$2b] 4454 st([v6502_Y]) #12 4455 4456 label('v6502_DEY') v6502_DEY: 107f 012b ld [$2b] 4457 ld([v6502_Y]) #9 1080 a001 suba $01 4458 suba(1) #10 1081 fc70 bra .inx13 4459 bra('.inx13') #11 1082 c22b st [$2b] 4460 st([v6502_Y]) #12 4461 4462 label('v6502_NOP') v6502_NOP: 1083 00fa ld $fa 4463 ld(-12/2) #9 1084 e020 jmp y,$20 4464 jmp(Y,'v6502_next') #10 4465 #nop() #11 Overlap 4466 # 4467 label('v6502_AND') v6502_AND: 1085 1525 ld [$25],y 4468 ld([v6502_ADH],Y) #9,11 1086 0118 ld [$18] 4469 ld([v6502_A]) #10 1087 fc90 bra .eor13 4470 bra('.eor13') #11 1088 2d00 anda [y,x] 4471 anda([Y,X]) #12 4472 4473 label('v6502_ORA') v6502_ORA: 1089 1525 ld [$25],y 4474 ld([v6502_ADH],Y) #9 108a 0118 ld [$18] 4475 ld([v6502_A]) #10 108b fc90 bra .eor13 4476 bra('.eor13') #11 4477 label('v6502_EOR') v6502_EOR: 108c 4d00 ora [y,x] 4478 ora([Y,X]) #12,9 4479 # 4480 #label('v6502_EOR') 4481 #nop() #9 Overlap 108d 1525 ld [$25],y 4482 ld([v6502_ADH],Y) #10 108e 0118 ld [$18] 4483 ld([v6502_A]) #11 108f 6d00 xora [y,x] 4484 xora([Y,X]) #12 4485 label('.eor13') .eor13: 1090 c218 st [$18] 4486 st([v6502_A]) #13 1091 c228 st [$28] 4487 st([v6502_Qz]) #14 Z flag 1092 c229 st [$29] 4488 st([v6502_Qn]) #15 N flag 1093 140e ld $0e,y 4489 ld(hi('v6502_next'),Y) #16 1094 00f6 ld $f6 4490 ld(-20/2) #17 1095 e020 jmp y,$20 4491 jmp(Y,'v6502_next') #18 4492 #nop() #19 Overlap 4493 # 4494 label('v6502_JMP1') v6502_JMP1: 1096 140d ld $0d,y 4495 ld(hi('v6502_jmp1'),Y) #9,19 JMP $DDDD 1097 e0c5 jmp y,$c5 4496 jmp(Y,'v6502_jmp1') #10 4497 #nop() #11 Overlap 4498 label('v6502_JMP2') v6502_JMP2: 1098 140d ld $0d,y 4499 ld(hi('v6502_jmp2'),Y) #9 JMP ($DDDD) 1099 e0cd jmp y,$cd 4500 jmp(Y,'v6502_jmp2') #10 4501 #nop() #11 Overlap 4502 label('v6502_JSR') v6502_JSR: 109a 011c ld [$1c] 4503 ld([v6502_S]) #9,11 109b a002 suba $02 4504 suba(2) #10 109c d21c st [$1c],x 4505 st([v6502_S],X) #11 109d 1400 ld $00,y 4506 ld(v6502_Stack>>8,Y) #12 109e 011b ld [$1b] 4507 ld([v6502_PCH]) #13 Let ADL,ADH point to L operand 109f c225 st [$25] 4508 st([v6502_ADH]) #14 10a0 011a ld [$1a] 4509 ld([v6502_PCL]) #15 10a1 c224 st [$24] 4510 st([v6502_ADL]) #16 10a2 8001 adda $01 4511 adda(1) #17 Push ++PC 10a3 c21a st [$1a] 4512 st([v6502_PCL]) #18 Let PCL,PCH point to H operand 10a4 de00 st [y,x++] 4513 st([Y,Xpp]) #19 10a5 f0a8 beq $10a8 4514 beq(pc()+3) #20 10a6 fca9 bra $10a9 4515 bra(pc()+3) #21 10a7 0000 ld $00 4516 ld(0) #22 10a8 0001 ld $01 4517 ld(1) #22(!) 10a9 811b adda [$1b] 4518 adda([v6502_PCH]) #23 10aa c21b st [$1b] 4519 st([v6502_PCH]) #24 10ab ce00 st [y,x] 4520 st([Y,X]) #25 10ac 1124 ld [$24],x 4521 ld([v6502_ADL],X) #26 Fetch L 10ad 1525 ld [$25],y 4522 ld([v6502_ADH],Y) #27 10ae 0d00 ld [y,x] 4523 ld([Y,X]) #28 10af 111a ld [$1a],x 4524 ld([v6502_PCL],X) #29 Fetch H 10b0 c21a st [$1a] 4525 st([v6502_PCL]) #30 10b1 151b ld [$1b],y 4526 ld([v6502_PCH],Y) #31 10b2 0d00 ld [y,x] 4527 ld([Y,X]) #32 10b3 c21b st [$1b] 4528 st([v6502_PCH]) #33 10b4 140e ld $0e,y 4529 ld(hi('v6502_next'),Y) #34 10b5 00ed ld $ed 4530 ld(-38/2) #35 10b6 e020 jmp y,$20 4531 jmp(Y,'v6502_next') #36 4532 #nop() #37 Overlap 4533 # 4534 label('v6502_INC') v6502_INC: 10b7 1411 ld $11,y 4535 ld(hi('v6502_inc'),Y) #9,37 10b8 e00e jmp y,$0e 4536 jmp(Y,'v6502_inc') #10 4537 #nop() #11 Overlap 4538 label('v6502_LDA') v6502_LDA: 10b9 1411 ld $11,y 4539 ld(hi('v6502_lda'),Y) #9,11 10ba e018 jmp y,$18 4540 jmp(Y,'v6502_lda') #10 4541 #nop() #11 Overlap 4542 label('v6502_LDX') v6502_LDX: 10bb 1411 ld $11,y 4543 ld(hi('v6502_ldx'),Y) #9,11 10bc e022 jmp y,$22 4544 jmp(Y,'v6502_ldx') #10 4545 #nop() #11 Overlap 4546 label('v6502_LDX2') v6502_LDX2: 10bd 1411 ld $11,y 4547 ld(hi('v6502_ldx2'),Y) #9,11 10be e02a jmp y,$2a 4548 jmp(Y,'v6502_ldx2') #10 4549 #nop() #11 Overlap 4550 label('v6502_LDY') v6502_LDY: 10bf 1411 ld $11,y 4551 ld(hi('v6502_ldy'),Y) #9,11 10c0 e026 jmp y,$26 4552 jmp(Y,'v6502_ldy') #10 4553 #nop() #11 Overlap 4554 label('v6502_STA') v6502_STA: 10c1 1411 ld $11,y 4555 ld(hi('v6502_sta'),Y) #9,11 10c2 e034 jmp y,$34 4556 jmp(Y,'v6502_sta') #10 4557 #nop() #11 Overlap 4558 label('v6502_STX') v6502_STX: 10c3 1411 ld $11,y 4559 ld(hi('v6502_stx'),Y) #9,11 10c4 e03a jmp y,$3a 4560 jmp(Y,'v6502_stx') #10 4561 #nop() #11 Overlap 4562 label('v6502_STX2') v6502_STX2: 10c5 1411 ld $11,y 4563 ld(hi('v6502_stx2'),Y) #9,11 10c6 e040 jmp y,$40 4564 jmp(Y,'v6502_stx2') #10 4565 #nop() #11 Overlap 4566 label('v6502_STY') v6502_STY: 10c7 1411 ld $11,y 4567 ld(hi('v6502_sty'),Y) #9,11 10c8 e048 jmp y,$48 4568 jmp(Y,'v6502_sty') #10 4569 #nop() #11 Overlap 4570 label('v6502_TAX') v6502_TAX: 10c9 1411 ld $11,y 4571 ld(hi('v6502_tax'),Y) #9,11 10ca e04d jmp y,$4d 4572 jmp(Y,'v6502_tax') #10 4573 #nop() #11 Overlap 4574 label('v6502_TAY') v6502_TAY: 10cb 1411 ld $11,y 4575 ld(hi('v6502_tay'),Y) #9,11 10cc e062 jmp y,$62 4576 jmp(Y,'v6502_tay') #10 4577 #nop() #11 Overlap 4578 label('v6502_TXA') v6502_TXA: 10cd 1411 ld $11,y 4579 ld(hi('v6502_txa'),Y) #9,11 10ce e065 jmp y,$65 4580 jmp(Y,'v6502_txa') #10 4581 #nop() #11 Overlap 4582 label('v6502_TYA') v6502_TYA: 10cf 1411 ld $11,y 4583 ld(hi('v6502_tya'),Y) #9,11 10d0 e068 jmp y,$68 4584 jmp(Y,'v6502_tya') #10 4585 #nop() #11 Overlap 4586 label('v6502_CLV') v6502_CLV: 10d1 1411 ld $11,y 4587 ld(hi('v6502_clv'),Y) #9,11 10d2 e076 jmp y,$76 4588 jmp(Y,'v6502_clv') #10 4589 #nop() #11 Overlap 4590 label('v6502_RTI') v6502_RTI: 10d3 1411 ld $11,y 4591 ld(hi('v6502_rti'),Y) #9,11 10d4 e0e4 jmp y,$e4 4592 jmp(Y,'v6502_rti') #10 4593 #nop() #11 Overlap 4594 label('v6502_ROR') v6502_ROR: 10d5 140d ld $0d,y 4595 ld(hi('v6502_ror'),Y) #9,11 10d6 e083 jmp y,$83 4596 jmp(Y,'v6502_ror') #10 4597 #nop() #11 Overlap 4598 label('v6502_LSR') v6502_LSR: 10d7 140d ld $0d,y 4599 ld(hi('v6502_lsr'),Y) #9,11 10d8 e09d jmp y,$9d 4600 jmp(Y,'v6502_lsr') #10 4601 #nop() #11 Overlap 4602 label('v6502_PHA') v6502_PHA: 10d9 140d ld $0d,y 4603 ld(hi('v6502_pha'),Y) #9,11 10da e0e2 jmp y,$e2 4604 jmp(Y,'v6502_pha') #10 4605 #nop() #11 Overlap 4606 label('v6502_CLI') v6502_CLI: 10db 1411 ld $11,y 4607 ld(hi('v6502_cli'),Y) #9,11 10dc e06b jmp y,$6b 4608 jmp(Y,'v6502_cli') #10 4609 #nop() #11 Overlap 4610 label('v6502_RTS') v6502_RTS: 10dd 1411 ld $11,y 4611 ld(hi('v6502_rts'),Y) #9,11 10de e08f jmp y,$8f 4612 jmp(Y,'v6502_rts') #10 4613 #nop() #11 Overlap 4614 label('v6502_PLA') v6502_PLA: 10df 140d ld $0d,y 4615 ld(hi('v6502_pla'),Y) #9,11 10e0 e0d7 jmp y,$d7 4616 jmp(Y,'v6502_pla') #10 4617 #nop() #11 Overlap 4618 label('v6502_SEI') v6502_SEI: 10e1 1411 ld $11,y 4619 ld(hi('v6502_sei'),Y) #9,11 10e2 e06e jmp y,$6e 4620 jmp(Y,'v6502_sei') #10 4621 #nop() #11 Overlap 4622 label('v6502_TXS') v6502_TXS: 10e3 1411 ld $11,y 4623 ld(hi('v6502_txs'),Y) #9,11 10e4 e05e jmp y,$5e 4624 jmp(Y,'v6502_txs') #10 4625 #nop() #11 Overlap 4626 label('v6502_TSX') v6502_TSX: 10e5 1411 ld $11,y 4627 ld(hi('v6502_tsx'),Y) #9,11 10e6 e054 jmp y,$54 4628 jmp(Y,'v6502_tsx') #10 4629 #nop() #11 Overlap 4630 label('v6502_CPY') v6502_CPY: 10e7 1411 ld $11,y 4631 ld(hi('v6502_cpy'),Y) #9,11 10e8 e0bd jmp y,$bd 4632 jmp(Y,'v6502_cpy') #10 4633 #nop() #11 Overlap 4634 label('v6502_CMP') v6502_CMP: 10e9 1411 ld $11,y 4635 ld(hi('v6502_cmp'),Y) #9,11 10ea e0be jmp y,$be 4636 jmp(Y,'v6502_cmp') #10 4637 #nop() #11 Overlap 4638 label('v6502_DEC') v6502_DEC: 10eb 1411 ld $11,y 4639 ld(hi('v6502_dec'),Y) #9,11 10ec e005 jmp y,$05 4640 jmp(Y,'v6502_dec') #10 4641 #nop() #11 Overlap 4642 label('v6502_CLD') v6502_CLD: 10ed 1411 ld $11,y 4643 ld(hi('v6502_cld'),Y) #9,11 10ee e071 jmp y,$71 4644 jmp(Y,'v6502_cld') #10 4645 #nop() #11 Overlap 4646 label('v6502_CPX') v6502_CPX: 10ef 1411 ld $11,y 4647 ld(hi('v6502_cpx'),Y) #9,11 10f0 e0bb jmp y,$bb 4648 jmp(Y,'v6502_cpx') #10 4649 #nop() #11 Overlap 4650 label('v6502_ASL') v6502_ASL: 10f1 140d ld $0d,y 4651 ld(hi('v6502_asl'),Y) #9,11 10f2 e0bf jmp y,$bf 4652 jmp(Y,'v6502_asl') #10 4653 #nop() #11 Overlap 4654 label('v6502_PHP') v6502_PHP: 10f3 1411 ld $11,y 4655 ld(hi('v6502_php'),Y) #9,11 10f4 e0a2 jmp y,$a2 4656 jmp(Y,'v6502_php') #10 4657 #nop() #11 Overlap 4658 label('v6502_BIT') v6502_BIT: 10f5 1411 ld $11,y 4659 ld(hi('v6502_bit'),Y) #9 10f6 e07d jmp y,$7d 4660 jmp(Y,'v6502_bit') #10 4661 #nop() #11 Overlap 4662 label('v6502_ROL') v6502_ROL: 10f7 140d ld $0d,y 4663 ld(hi('v6502_rol'),Y) #9 10f8 e0ac jmp y,$ac 4664 jmp(Y,'v6502_rol') #10 4665 #nop() #11 Overlap 4666 label('v6502_PLP') v6502_PLP: 10f9 1411 ld $11,y 4667 ld(hi('v6502_plp'),Y) #9 10fa e0d4 jmp y,$d4 4668 jmp(Y,'v6502_plp') #10 4669 #nop() #11 Overlap 4670 label('v6502_SED') # Decimal mode not implemented v6502_SED: 10fb 1411 ld $11,y 4671 ld(hi('v6502_sed'),Y) #9,11 10fc e074 jmp y,$74 4672 jmp(Y,'v6502_sed') #10 4673 #nop() #11 Overlap 4674 label('v6502_ILL') # All illegal opcodes map to BRK, except $FF which will crash 4675 label('v6502_BRK') v6502_ILL: v6502_BRK: 10fd 140d ld $0d,y 4676 ld(hi('v6502_brk'),Y) #9 10fe e0ea jmp y,$ea 4677 jmp(Y,'v6502_brk') #10 4678 #nop() #11 Overlap 4679 4680 while pc()&255 < 255: 4681 nop() 4682 4683 # `v6502_RESUME' is the interpreter's secondary entry point for when 4684 # the opcode and operands were already fetched, just before the last hPulse. 4685 # It must be at $xxff, prefably somewhere in v6502's own code pages. 4686 label('v6502_RESUME') 4687 assert (pc()&255) == 255 v6502_RESUME: 10ff a006 suba $06 4688 suba(v6502_adjust) #0,11 v6502 secondary entry point 4689 # --- Page boundary --- 4690 align(0x100,size=0x200) 1100 c215 st [$15] 4691 st([vTicks]) #1 1101 1124 ld [$24],x 4692 ld([v6502_ADL],X) #2 1102 140f ld $0f,y 4693 ld(hi('v6502_execute'),Y) #3 1103 e126 jmp y,[$26] 4694 jmp(Y,[v6502_IR]) #4 1104 fcff bra $ff 4695 bra(255) #5 4696 4697 label('v6502_dec') v6502_dec: 1105 1525 ld [$25],y 4698 ld([v6502_ADH],Y) #12 1106 0d00 ld [y,x] 4699 ld([Y,X]) #13 1107 a001 suba $01 4700 suba(1) #14 1108 ce00 st [y,x] 4701 st([Y,X]) #15 1109 c228 st [$28] 4702 st([v6502_Qz]) #16 Z flag 110a c229 st [$29] 4703 st([v6502_Qn]) #17 N flag 110b 140e ld $0e,y 4704 ld(hi('v6502_next'),Y) #18 110c 00f5 ld $f5 4705 ld(-22/2) #19 110d e020 jmp y,$20 4706 jmp(Y,'v6502_next') #20 4707 #nop() #21 Overlap 4708 # 4709 label('v6502_inc') v6502_inc: 110e 1525 ld [$25],y 4710 ld([v6502_ADH],Y) #12,22 110f 0d00 ld [y,x] 4711 ld([Y,X]) #13 1110 8001 adda $01 4712 adda(1) #14 1111 ce00 st [y,x] 4713 st([Y,X]) #15 1112 c228 st [$28] 4714 st([v6502_Qz]) #16 Z flag 1113 c229 st [$29] 4715 st([v6502_Qn]) #17 N flag 1114 140e ld $0e,y 4716 ld(hi('v6502_next'),Y) #18 1115 00f5 ld $f5 4717 ld(-22/2) #19 1116 e020 jmp y,$20 4718 jmp(Y,'v6502_next') #20 1117 0200 nop 4719 nop() #21 4720 4721 label('v6502_lda') v6502_lda: 1118 0200 nop 4722 nop() #12 1119 1525 ld [$25],y 4723 ld([v6502_ADH],Y) #13 111a 0d00 ld [y,x] 4724 ld([Y,X]) #14 111b c218 st [$18] 4725 st([v6502_A]) #15 4726 label('.lda16') .lda16: 111c c228 st [$28] 4727 st([v6502_Qz]) #16 Z flag 111d c229 st [$29] 4728 st([v6502_Qn]) #17 N flag 111e 0200 nop 4729 nop() #18 111f 140e ld $0e,y 4730 ld(hi('v6502_next'),Y) #19 1120 e020 jmp y,$20 4731 jmp(Y,'v6502_next') #20 1121 00f5 ld $f5 4732 ld(-22/2) #21 4733 4734 label('v6502_ldx') v6502_ldx: 1122 1525 ld [$25],y 4735 ld([v6502_ADH],Y) #12 1123 0d00 ld [y,x] 4736 ld([Y,X]) #13 1124 fc1c bra .lda16 4737 bra('.lda16') #14 1125 c22a st [$2a] 4738 st([v6502_X]) #15 4739 4740 label('v6502_ldy') v6502_ldy: 1126 1525 ld [$25],y 4741 ld([v6502_ADH],Y) #12 1127 0d00 ld [y,x] 4742 ld([Y,X]) #13 1128 fc1c bra .lda16 4743 bra('.lda16') #14 1129 c22b st [$2b] 4744 st([v6502_Y]) #15 4745 4746 label('v6502_ldx2') v6502_ldx2: 112a 0124 ld [$24] 4747 ld([v6502_ADL]) #12 Special case $B6: LDX $DD,Y 112b a12a suba [$2a] 4748 suba([v6502_X]) #13 Undo X offset 112c 912b adda [$2b],x 4749 adda([v6502_Y],X) #14 Apply Y instead 112d 0500 ld [x] 4750 ld([X]) #15 112e c22a st [$2a] 4751 st([v6502_X]) #16 112f c228 st [$28] 4752 st([v6502_Qz]) #17 Z flag 1130 c229 st [$29] 4753 st([v6502_Qn]) #18 N flag 1131 140e ld $0e,y 4754 ld(hi('v6502_next'),Y) #19 1132 e020 jmp y,$20 4755 jmp(Y,'v6502_next') #20 1133 00f5 ld $f5 4756 ld(-22/2) #21 4757 4758 label('v6502_sta') v6502_sta: 1134 1525 ld [$25],y 4759 ld([v6502_ADH],Y) #12 1135 0118 ld [$18] 4760 ld([v6502_A]) #13 1136 ce00 st [y,x] 4761 st([Y,X]) #14 1137 140e ld $0e,y 4762 ld(hi('v6502_next'),Y) #15 1138 e020 jmp y,$20 4763 jmp(Y,'v6502_next') #16 1139 00f7 ld $f7 4764 ld(-18/2) #17 4765 4766 label('v6502_stx') v6502_stx: 113a 1525 ld [$25],y 4767 ld([v6502_ADH],Y) #12 113b 012a ld [$2a] 4768 ld([v6502_X]) #13 113c ce00 st [y,x] 4769 st([Y,X]) #14 113d 140e ld $0e,y 4770 ld(hi('v6502_next'),Y) #15 113e e020 jmp y,$20 4771 jmp(Y,'v6502_next') #16 113f 00f7 ld $f7 4772 ld(-18/2) #17 4773 4774 label('v6502_stx2') v6502_stx2: 1140 0124 ld [$24] 4775 ld([v6502_ADL]) #12 Special case $96: STX $DD,Y 1141 a12a suba [$2a] 4776 suba([v6502_X]) #13 Undo X offset 1142 912b adda [$2b],x 4777 adda([v6502_Y],X) #14 Apply Y instead 1143 012a ld [$2a] 4778 ld([v6502_X]) #15 1144 c600 st [x] 4779 st([X]) #16 1145 140e ld $0e,y 4780 ld(hi('v6502_next'),Y) #17 1146 e020 jmp y,$20 4781 jmp(Y,'v6502_next') #18 1147 00f6 ld $f6 4782 ld(-20/2) #19 4783 4784 label('v6502_sty') v6502_sty: 1148 1525 ld [$25],y 4785 ld([v6502_ADH],Y) #12 1149 012b ld [$2b] 4786 ld([v6502_Y]) #13 114a ce00 st [y,x] 4787 st([Y,X]) #14 114b 140e ld $0e,y 4788 ld(hi('v6502_next'),Y) #15 114c e020 jmp y,$20 4789 jmp(Y,'v6502_next') #16 4790 label('v6502_tax') v6502_tax: 114d 00f7 ld $f7 4791 ld(-18/2) #17,12 4792 # 4793 #label('v6502_tax') 4794 #nop() #12 Overlap 114e 0118 ld [$18] 4795 ld([v6502_A]) #13 114f c22a st [$2a] 4796 st([v6502_X]) #14 4797 label('.tax15') .tax15: 1150 c228 st [$28] 4798 st([v6502_Qz]) #15 Z flag 1151 c229 st [$29] 4799 st([v6502_Qn]) #16 N flag 1152 140e ld $0e,y 4800 ld(hi('v6502_next'),Y) #17 1153 e020 jmp y,$20 4801 jmp(Y,'v6502_next') #18 4802 label('v6502_tsx') v6502_tsx: 1154 00f6 ld $f6 4803 ld(-20/2) #19 4804 # 4805 #label('v6502_tsx') 4806 #nop() #12 Overlap 1155 011c ld [$1c] 4807 ld([v6502_S]) #13 1156 a001 suba $01 4808 suba(1) #14 Shift down on export 1157 c22a st [$2a] 4809 st([v6502_X]) #15 4810 label('.tsx16') .tsx16: 1158 c228 st [$28] 4811 st([v6502_Qz]) #16 Z flag 1159 c229 st [$29] 4812 st([v6502_Qn]) #17 N flag 115a 0200 nop 4813 nop() #18 115b 140e ld $0e,y 4814 ld(hi('v6502_next'),Y) #19 115c e020 jmp y,$20 4815 jmp(Y,'v6502_next') #20 115d 00f5 ld $f5 4816 ld(-22/2) #21 4817 4818 label('v6502_txs') v6502_txs: 115e 012a ld [$2a] 4819 ld([v6502_X]) #12 115f 8001 adda $01 4820 adda(1) #13 Shift up on import 1160 fc58 bra .tsx16 4821 bra('.tsx16') #14 1161 c21c st [$1c] 4822 st([v6502_S]) #15 4823 4824 label('v6502_tay') v6502_tay: 1162 0118 ld [$18] 4825 ld([v6502_A]) #12 1163 fc50 bra .tax15 4826 bra('.tax15') #13 1164 c22b st [$2b] 4827 st([v6502_Y]) #14 4828 4829 label('v6502_txa') v6502_txa: 1165 012a ld [$2a] 4830 ld([v6502_X]) #12 1166 fc50 bra .tax15 4831 bra('.tax15') #13 1167 c218 st [$18] 4832 st([v6502_A]) #14 4833 4834 label('v6502_tya') v6502_tya: 1168 012b ld [$2b] 4835 ld([v6502_Y]) #12 1169 fc50 bra .tax15 4836 bra('.tax15') #13 116a c218 st [$18] 4837 st([v6502_A]) #14 4838 4839 label('v6502_cli') v6502_cli: 116b 0127 ld [$27] 4840 ld([v6502_P]) #12 116c fc79 bra .clv15 4841 bra('.clv15') #13 116d 20fb anda $fb 4842 anda(~v6502_Iflag) #14 4843 4844 label('v6502_sei') v6502_sei: 116e 0127 ld [$27] 4845 ld([v6502_P]) #12 116f fc79 bra .clv15 4846 bra('.clv15') #13 1170 4004 ora $04 4847 ora(v6502_Iflag) #14 4848 4849 label('v6502_cld') v6502_cld: 1171 0127 ld [$27] 4850 ld([v6502_P]) #12 1172 fc79 bra .clv15 4851 bra('.clv15') #13 1173 20f7 anda $f7 4852 anda(~v6502_Dflag) #14 4853 4854 label('v6502_sed') v6502_sed: 1174 0127 ld [$27] 4855 ld([v6502_P]) #12 1175 fc79 bra .clv15 4856 bra('.clv15') #13 4857 label('v6502_clv') v6502_clv: 1176 4008 ora $08 4858 ora(v6502_Dflag) #14,12 Overlap 4859 # 4860 #label('v6502_clv') 4861 #nop() #12 1177 0127 ld [$27] 4862 ld([v6502_P]) #13 1178 207f anda $7f 4863 anda(~v6502_Vemu) #14 4864 label('.clv15') .clv15: 1179 c227 st [$27] 4865 st([v6502_P]) #15 117a 140e ld $0e,y 4866 ld(hi('v6502_next'),Y) #16 117b 00f6 ld $f6 4867 ld(-20/2) #17 117c e020 jmp y,$20 4868 jmp(Y,'v6502_next') #18 4869 label('v6502_bit') v6502_bit: 117d 0200 nop 4870 nop() #19,12 4871 # 4872 #label('v6502_bit') 4873 #nop() #12 Overlap 117e 1124 ld [$24],x 4874 ld([v6502_ADL],X) #13 117f 1525 ld [$25],y 4875 ld([v6502_ADH],Y) #14 1180 0d00 ld [y,x] 4876 ld([Y,X]) #15 1181 c229 st [$29] 4877 st([v6502_Qn]) #16 N flag 1182 2118 anda [$18] 4878 anda([v6502_A]) #17 This is a reason we keep N and Z in separate bytes 1183 c228 st [$28] 4879 st([v6502_Qz]) #18 Z flag 1184 0127 ld [$27] 4880 ld([v6502_P]) #19 1185 207f anda $7f 4881 anda(~v6502_Vemu) #20 1186 c227 st [$27] 4882 st([v6502_P]) #21 1187 0d00 ld [y,x] 4883 ld([Y,X]) #22 1188 8200 adda ac 4884 adda(AC) #23 1189 2080 anda $80 4885 anda(v6502_Vemu) #24 118a 4127 ora [$27] 4886 ora([v6502_P]) #25 118b c227 st [$27] 4887 st([v6502_P]) #26 Update V 118c 140e ld $0e,y 4888 ld(hi('v6502_next'),Y) #27 118d e020 jmp y,$20 4889 jmp(Y,'v6502_next') #28 118e 00f1 ld $f1 4890 ld(-30/2) #29 4891 4892 label('v6502_rts') v6502_rts: 118f 011c ld [$1c] 4893 ld([v6502_S]) #12 1190 1200 ld ac,x 4894 ld(AC,X) #13 1191 8002 adda $02 4895 adda(2) #14 1192 c21c st [$1c] 4896 st([v6502_S]) #15 1193 1400 ld $00,y 4897 ld(0,Y) #16 1194 0d00 ld [y,x] 4898 ld([Y,X]) #17 1195 de00 st [y,x++] 4899 st([Y,Xpp]) #18 Just X++ 1196 8001 adda $01 4900 adda(1) #19 1197 c21a st [$1a] 4901 st([v6502_PCL]) #20 1198 f09b beq $119b 4902 beq(pc()+3) #21 1199 fc9c bra $119c 4903 bra(pc()+3) #22 119a 0000 ld $00 4904 ld(0) #23 119b 0001 ld $01 4905 ld(1) #23(!) 119c 8d00 adda [y,x] 4906 adda([Y,X]) #24 119d c21b st [$1b] 4907 st([v6502_PCH]) #25 119e 0200 nop 4908 nop() #26 119f 140e ld $0e,y 4909 ld(hi('v6502_next'),Y) #27 11a0 e020 jmp y,$20 4910 jmp(Y,'v6502_next') #28 11a1 00f1 ld $f1 4911 ld(-30/2) #29 4912 4913 label('v6502_php') v6502_php: 11a2 011c ld [$1c] 4914 ld([v6502_S]) #12 11a3 a001 suba $01 4915 suba(1) #13 11a4 d21c st [$1c],x 4916 st([v6502_S],X) #14 11a5 0127 ld [$27] 4917 ld([v6502_P]) #15 11a6 20bd anda $bd 4918 anda(~v6502_Vflag&~v6502_Zflag) #16 Keep Vemu,B,D,I,C 11a7 f4aa bge $11aa 4919 bpl(pc()+3) #17 V to bit 6 and clear N 11a8 fcaa bra $11aa 4920 bra(pc()+2) #18 11a9 60c0 xora $c0 4921 xora(v6502_Vflag^v6502_Vemu) #19 11aa c600 st [x] 4922 st([X]) #19,20 11ab 0128 ld [$28] 4923 ld([v6502_Qz]) #21 Z flag 11ac f0af beq $11af 4924 beq(pc()+3) #22 11ad fcb0 bra $11b0 4925 bra(pc()+3) #23 11ae 0000 ld $00 4926 ld(0) #24 11af 0002 ld $02 4927 ld(v6502_Zflag) #24(!) 11b0 4500 ora [x] 4928 ora([X]) #25 11b1 c600 st [x] 4929 st([X]) #26 11b2 0129 ld [$29] 4930 ld([v6502_Qn]) #27 N flag 11b3 2080 anda $80 4931 anda(0x80) #28 11b4 4500 ora [x] 4932 ora([X]) #29 11b5 4020 ora $20 4933 ora(v6502_Uflag) #30 Unused bit 11b6 c600 st [x] 4934 st([X]) #31 11b7 0200 nop 4935 nop() #32 11b8 140e ld $0e,y 4936 ld(hi('v6502_next'),Y) #33 11b9 e020 jmp y,$20 4937 jmp(Y,'v6502_next') #34 11ba 00ee ld $ee 4938 ld(-36/2) #35 4939 4940 label('v6502_cpx') v6502_cpx: 11bb fcc0 bra .cmp14 4941 bra('.cmp14') #12 11bc 012a ld [$2a] 4942 ld([v6502_X]) #13 4943 4944 label('v6502_cpy') v6502_cpy: 11bd fcc0 bra .cmp14 4945 bra('.cmp14') #12 4946 label('v6502_cmp') v6502_cmp: 11be 012b ld [$2b] 4947 ld([v6502_Y]) #13,12 4948 # 4949 #label('v6502_cmp') #12 Overlap 4950 assert v6502_Cflag == 1 11bf 0118 ld [$18] 4951 ld([v6502_A]) #13 4952 label('.cmp14') .cmp14: 11c0 1525 ld [$25],y 4953 ld([v6502_ADH],Y) #14 11c1 e8c7 blt .cmp17 4954 bmi('.cmp17') #15 Carry? 11c2 ad00 suba [y,x] 4955 suba([Y,X]) #16 11c3 c228 st [$28] 4956 st([v6502_Qz]) #17 Z flag 11c4 c229 st [$29] 4957 st([v6502_Qn]) #18 N flag 11c5 fccb bra .cmp21 4958 bra('.cmp21') #19 11c6 4d00 ora [y,x] 4959 ora([Y,X]) #20 4960 label('.cmp17') .cmp17: 11c7 c228 st [$28] 4961 st([v6502_Qz]) #17 Z flag 11c8 c229 st [$29] 4962 st([v6502_Qn]) #18 N flag 11c9 2d00 anda [y,x] 4963 anda([Y,X]) #19 11ca 0200 nop 4964 nop() #20 4965 label('.cmp21') .cmp21: 11cb 6080 xora $80 4966 xora(0x80) #21 11cc 3080 anda $80,x 4967 anda(0x80,X) #22 Move carry to bit 0 11cd 0127 ld [$27] 4968 ld([v6502_P]) #23 C flag 11ce 20fe anda $fe 4969 anda(~1) #24 11cf 4500 ora [x] 4970 ora([X]) #25 11d0 c227 st [$27] 4971 st([v6502_P]) #26 11d1 140e ld $0e,y 4972 ld(hi('v6502_next'),Y) #27 11d2 e020 jmp y,$20 4973 jmp(Y,'v6502_next') #28 11d3 00f1 ld $f1 4974 ld(-30/2) #29 4975 4976 label('v6502_plp') 4977 assert v6502_Nflag == 128 4978 assert 2*v6502_Vflag == v6502_Vemu v6502_plp: 11d4 011c ld [$1c] 4979 ld([v6502_S]) #12 11d5 1200 ld ac,x 4980 ld(AC,X) #13 11d6 8001 adda $01 4981 adda(1) #14 11d7 c21c st [$1c] 4982 st([v6502_S]) #15 11d8 0500 ld [x] 4983 ld([X]) #16 11d9 c229 st [$29] 4984 st([v6502_Qn]) #17 N flag 11da 2002 anda $02 4985 anda(v6502_Zflag) #18 11db 6002 xora $02 4986 xora(v6502_Zflag) #19 11dc c228 st [$28] 4987 st([v6502_Qz]) #20 Z flag 11dd 0500 ld [x] 4988 ld([X]) #21 11de 207f anda $7f 4989 anda(~v6502_Vemu) #22 V to bit 7 11df 8040 adda $40 4990 adda(v6502_Vflag) #23 11e0 c227 st [$27] 4991 st([v6502_P]) #24 All other flags 11e1 140e ld $0e,y 4992 ld(hi('v6502_next'),Y) #25 11e2 e020 jmp y,$20 4993 jmp(Y,'v6502_next') #26 11e3 00f2 ld $f2 4994 ld(-28/2) #27 4995 4996 label('v6502_rti') v6502_rti: 11e4 011c ld [$1c] 4997 ld([v6502_S]) #12 11e5 1200 ld ac,x 4998 ld(AC,X) #13 11e6 8003 adda $03 4999 adda(3) #14 11e7 c21c st [$1c] 5000 st([v6502_S]) #15 11e8 0500 ld [x] 5001 ld([X]) #16 11e9 c229 st [$29] 5002 st([v6502_Qn]) #17 N flag 11ea 2002 anda $02 5003 anda(v6502_Zflag) #18 11eb 6002 xora $02 5004 xora(v6502_Zflag) #19 11ec c228 st [$28] 5005 st([v6502_Qz]) #20 Z flag 11ed 1400 ld $00,y 5006 ld(0,Y) #21 11ee 0d00 ld [y,x] 5007 ld([Y,X]) #22 11ef de00 st [y,x++] 5008 st([Y,Xpp]) #23 Just X++ 11f0 207f anda $7f 5009 anda(~v6502_Vemu) #24 V to bit 7 11f1 8040 adda $40 5010 adda(v6502_Vflag) #25 11f2 c227 st [$27] 5011 st([v6502_P]) #26 All other flags 11f3 0d00 ld [y,x] 5012 ld([Y,X]) #27 11f4 de00 st [y,x++] 5013 st([Y,Xpp]) #28 Just X++ 11f5 c21a st [$1a] 5014 st([v6502_PCL]) #29 11f6 0d00 ld [y,x] 5015 ld([Y,X]) #30 11f7 c21b st [$1b] 5016 st([v6502_PCH]) #31 11f8 0200 nop 5017 nop() #32 11f9 140e ld $0e,y 5018 ld(hi('v6502_next'),Y) #33 11fa e020 jmp y,$20 5019 jmp(Y,'v6502_next') #34 11fb 00ee ld $ee 5020 ld(-36/2) #35 5021 5022 #----------------------------------------------------------------------- 5023 # Extended vertical blank logic: interrupts 5024 #----------------------------------------------------------------------- 11fc 0200 nop 5025 align(0x100) 11fd 0200 nop 11fe 0200 nop 11ff 0200 nop 5026 5027 # Check if an IRQ handler is defined 5028 label('vBlankFirst#78') vBlankFirst#78: 1200 09f6 ld [y,$f6] 5029 ld([Y,vIRQ_v5]) #78 1201 49f7 ora [y,$f7] 5030 ora([Y,vIRQ_v5+1]) #79 5031 bne('vBlankFirst#82') #80 1202 ec09 bne vBlankFirst#82 1203 0116 ld [$16] 5032 ld([vPC]) #81 5033 runVcpu(186-82-extra, #82 Application cycles (scan line 0) 5034 '---D line 0 timeout but no irq', 1204 0055 ld $55 5035 returnTo='vBlankFirst#186') 1205 c21e st [$1e] 1206 1505 ld [$05],y 1207 e0ff jmp y,$ff 1208 001f ld $1f 5036 5037 label('vBlankFirst#82') vBlankFirst#82: 1209 c230 st [$30] 5038 st([0x30]) #82 Save vPC 120a 0117 ld [$17] 5039 ld([vPC+1]) #83 120b c231 st [$31] 5040 st([0x31]) #84 120c 0118 ld [$18] 5041 ld([vAC]) #85 Save vAC 120d c232 st [$32] 5042 st([0x32]) #86 120e 0119 ld [$19] 5043 ld([vAC+1]) #87 120f c233 st [$33] 5044 st([0x33]) #88 1210 09f6 ld [y,$f6] 5045 ld([Y,vIRQ_v5]) #89 Set vPC to vIRQ 1211 a002 suba $02 5046 suba(2) #90 1212 c216 st [$16] 5047 st([vPC]) #91 1213 09f7 ld [y,$f7] 5048 ld([Y,vIRQ_v5+1]) #92 1214 c217 st [$17] 5049 st([vPC+1]) #93 1215 0105 ld [$05] 5050 ld([vCpuSelect]) #94 Handler must save this if needed 1216 c219 st [$19] 5051 st([vAC+1]) #95 1217 0000 ld $00 5052 ld(0) #96 1218 c218 st [$18] 5053 st([vAC]) #97 1219 0002 ld $02 5054 ld(hi('ENTER')) #98 Set vCpuSelect to ENTER (=regular vCPU) 121a c205 st [$05] 5055 st([vCpuSelect]) #99 5056 runVcpu(186-100-extra, #100 Application cycles (scan line 0) 5057 '---D line 0 timeout with irq', 121b 0055 ld $55 5058 returnTo='vBlankFirst#186') 121c c21e st [$1e] 121d 1505 ld [$05],y 121e e0ff jmp y,$ff 121f 0016 ld $16 5059 5060 # vIRQ sequence WITH interpreter switch 5061 label('vRTI#18') vRTI#18: 1220 0500 ld [x] 5062 ld([X]) #18 1221 c205 st [$05] 5063 st([vCpuSelect]) #19 1222 0130 ld [$30] 5064 ld([0x30]) #20 1223 c216 st [$16] 5065 st([vPC]) #21 1224 0131 ld [$31] 5066 ld([0x31]) #22 1225 c217 st [$17] 5067 st([vPC+1]) #23 1226 0132 ld [$32] 5068 ld([0x32]) #24 1227 c218 st [$18] 5069 st([vAC]) #25 1228 0133 ld [$33] 5070 ld([0x33]) #26 1229 c219 st [$19] 5071 st([vAC+1]) #27 122a 0200 nop 5072 nop() #0 122b 1403 ld $03,y 5073 ld(hi('RESYNC'),Y) #1 122c e00c jmp y,$0c 5074 jmp(Y,'RESYNC') #2 122d 0115 ld [$15] 5075 ld([vTicks]) #3 5076 5077 # Entered last line of vertical blank (line 40) 5078 label('vBlankLast#34') 5079 5080 #----------------------------------------------------------------------- 5081 # Extended vertical blank logic: game controller decoding 5082 #----------------------------------------------------------------------- 5083 5084 # Game controller types 5085 # TypeA: Based on 74LS165 shift register (not supported) 5086 # TypeB: Based on CD4021B shift register (standard) 5087 # TypeC: Based on priority encoder 5088 # 5089 # Notes: 5090 # - TypeA was only used during development and first beta test, before ROM v1 5091 # - TypeB appears as type A with negative logic levels 5092 # - TypeB is the game controller type that comes with the original kit and ROM v1 5093 # - TypeB is mimicked by BabelFish / Pluggy McPlugface 5094 # - TypeB requires a prolonged /SER_LATCH, therefore vPulse is 8 scanlines, not 2 5095 # - TypeB and TypeC can be sampled in the same scanline 5096 # - TypeA is 1 scanline shifted as it looks at a different edge (XXX up or down?) 5097 # - TypeC gives incomplete information: lower buttons overshadow higher ones 5098 # 5099 # TypeC Alias Button TypeB 5100 # 00000000 ^@ -> Right 11111110 5101 # 00000001 ^A -> Left 11111101 5102 # 00000011 ^C -> Down 11111011 5103 # 00000111 ^G -> Up 11110111 5104 # 00001111 ^O -> Start 11101111 5105 # 00011111 ^_ -> Select 11011111 5106 # 00111111 ? -> B 10111111 5107 # 01111111 DEL -> A 01111111 5108 # 11111111 -> (None) 11111111 5109 # 5110 # Conversion formula: 5111 # f(x) := 254 - x 5112 5113 # Detect controller TypeC codes vBlankLast#34: 122e 010f ld [$0f] 5114 ld([serialRaw]) #34 if serialRaw in [0,1,3,7,15,31,63,127,255] 122f 8001 adda $01 5115 adda(1) #35 1230 210f anda [$0f] 5116 anda([serialRaw]) #36 1231 ec42 bne .buttons#39 5117 bne('.buttons#39') #37 5118 5119 # TypeC 1232 010f ld [$0f] 5120 ld([serialRaw]) #38 [TypeC] if serialRaw < serialLast 1233 8001 adda $01 5121 adda(1) #39 1234 2110 anda [$10] 5122 anda([serialLast]) #40 1235 ec39 bne .buttons#43 5123 bne('.buttons#43') #41 1236 00fe ld $fe 5124 ld(254) #42 then clear the selected bit 1237 0200 nop 5125 nop() #43 1238 fc3c bra .buttons#46 5126 bra('.buttons#46') #44 5127 label('.buttons#43') .buttons#43: 1239 a10f suba [$0f] 5128 suba([serialRaw]) #43,45 123a 2111 anda [$11] 5129 anda([buttonState]) #44 123b c211 st [$11] 5130 st([buttonState]) #45 5131 label('.buttons#46') .buttons#46: 123c 010f ld [$0f] 5132 ld([serialRaw]) #46 Set the lower bits 123d 4111 ora [$11] 5133 ora([buttonState]) #47 5134 label('.buttons#48') .buttons#48: 123e c211 st [$11] 5135 st([buttonState]) #48 123f 010f ld [$0f] 5136 ld([serialRaw]) #49 Update serialLast for next pass 1240 e0b3 jmp y,$b3 5137 jmp(Y,'vBlankLast#52') #50 1241 c210 st [$10] 5138 st([serialLast]) #51 5139 5140 # TypeB 5141 # pChange = pNew & ~pOld 5142 # nChange = nNew | ~nOld {DeMorgan} 5143 label('.buttons#39') .buttons#39: 1242 00ff ld $ff 5144 ld(255) #39 [TypeB] Bitwise edge-filter to detect button presses 1243 6110 xora [$10] 5145 xora([serialLast]) #40 1244 410f ora [$0f] 5146 ora([serialRaw]) #41 Catch button-press events 1245 2111 anda [$11] 5147 anda([buttonState]) #42 Keep active button presses 1246 410f ora [$0f] 5148 ora([serialRaw]) #43 1247 0200 nop 5149 nop() #44 1248 0200 nop 5150 nop() #45 1249 fc3e bra .buttons#48 5151 bra('.buttons#48') #46 124a 0200 nop 5152 nop() #47 5153 5154 5155 #----------------------------------------------------------------------- 5156 # More SYS functions 5157 #----------------------------------------------------------------------- 5158 5159 # SYS_Exec_88 implementation 5160 label('sys_Exec') sys_Exec: 124b d617 st [$17],y 5161 st([vPC+1],Y) #18 Clear vPCH and Y 124c 011c ld [$1c] 5162 ld([vSP]) #19 Place ROM loader below current stack pointer 124d a037 suba $37 5163 suba(53+2) #20 (AC -> *+0) One extra word for PUSH 124e d21d st [$1d],x 5164 st([vTmp],X) #21 124f 80fe adda $fe 5165 adda(-2) #22 (AC -> *-2) 1250 c216 st [$16] 5166 st([vPC]) #23 5167 # Start of manually compiled vCPU section 1251 dc75 st $75,[y,x++] 5168 st('PUSH', [Y,Xpp]) #24 *+0 1252 dccf st $cf,[y,x++] 5169 st('CALL', [Y,Xpp]) #25 *+26 Fetch first byte 1253 8023 adda $23 5170 adda(33-(-2)) #26 (AC -> *+33) 1254 de00 st [y,x++] 5171 st( [Y,Xpp]) #27 *+27 1255 dc5e st $5e,[y,x++] 5172 st('ST', [Y,Xpp]) #28 *+3 Chunk copy loop 1256 dc27 st $27,[y,x++] 5173 st(sysArgs+3, [Y,Xpp]) #29 *+4 High-address comes first 1257 dccf st $cf,[y,x++] 5174 st('CALL', [Y,Xpp]) #30 *+5 1258 de00 st [y,x++] 5175 st( [Y,Xpp]) #31 *+6 1259 dc5e st $5e,[y,x++] 5176 st('ST', [Y,Xpp]) #32 *+7 125a dc26 st $26,[y,x++] 5177 st(sysArgs+2, [Y,Xpp]) #33 *+8 Then the low address 125b dccf st $cf,[y,x++] 5178 st('CALL', [Y,Xpp]) #34 *+9 125c de00 st [y,x++] 5179 st( [Y,Xpp]) #35 *+10 125d dc5e st $5e,[y,x++] 5180 st('ST', [Y,Xpp]) #36 *+11 Byte copy loop 125e dc28 st $28,[y,x++] 5181 st(sysArgs+4, [Y,Xpp]) #37 *+12 Byte count (0 means 256) 125f dccf st $cf,[y,x++] 5182 st('CALL', [Y,Xpp]) #38 *+13 1260 de00 st [y,x++] 5183 st( [Y,Xpp]) #39 *+14 1261 dcf0 st $f0,[y,x++] 5184 st('POKE', [Y,Xpp]) #40 *+15 1262 dc26 st $26,[y,x++] 5185 st(sysArgs+2, [Y,Xpp]) #41 *+16 1263 dc93 st $93,[y,x++] 5186 st('INC', [Y,Xpp]) #42 *+17 1264 dc26 st $26,[y,x++] 5187 st(sysArgs+2, [Y,Xpp]) #43 *+18 1265 dc1a st $1a,[y,x++] 5188 st('LD', [Y,Xpp]) #44 *+19 1266 dc28 st $28,[y,x++] 5189 st(sysArgs+4, [Y,Xpp]) #45 *+20 1267 dce6 st $e6,[y,x++] 5190 st('SUBI', [Y,Xpp]) #46 *+21 1268 dc01 st $01,[y,x++] 5191 st(1, [Y,Xpp]) #47 *+22 1269 dc35 st $35,[y,x++] 5192 st('BCC', [Y,Xpp]) #48 *+23 126a dc72 st $72,[y,x++] 5193 st('NE', [Y,Xpp]) #49 *+24 126b 80e8 adda $e8 5194 adda(11-2-33) #50 (AC -> *+9) 126c de00 st [y,x++] 5195 st( [Y,Xpp]) #51 *+25 126d dccf st $cf,[y,x++] 5196 st('CALL', [Y,Xpp]) #52 *+26 Go to next block 126e 8018 adda $18 5197 adda(33-9) #53 (AC -> *+33) 126f de00 st [y,x++] 5198 st( [Y,Xpp]) #54 *+27 1270 dc35 st $35,[y,x++] 5199 st('BCC', [Y,Xpp]) #55 *+28 1271 dc72 st $72,[y,x++] 5200 st('NE', [Y,Xpp]) #56 *+29 1272 80e0 adda $e0 5201 adda(3-2-33) #57 (AC -> *+1) 1273 de00 st [y,x++] 5202 st( [Y,Xpp]) #58 *+30 1274 dc63 st $63,[y,x++] 5203 st('POP', [Y,Xpp]) #59 *+31 End 1275 dcff st $ff,[y,x++] 5204 st('RET', [Y,Xpp]) #60 *+32 5205 # Pointer constant pointing to the routine below (for use by CALL) 1276 8022 adda $22 5206 adda(35-1) #61 (AC -> *+35) 1277 de00 st [y,x++] 5207 st( [Y,Xpp]) #62 *+33 1278 dc00 st $00,[y,x++] 5208 st(0, [Y,Xpp]) #63 *+34 5209 # Routine to read next byte from ROM and advance read pointer 1279 dc1a st $1a,[y,x++] 5210 st('LD', [Y,Xpp]) #64 *+35 Test for end of ROM table 127a dc24 st $24,[y,x++] 5211 st(sysArgs+0, [Y,Xpp]) #65 *+36 127b dc8c st $8c,[y,x++] 5212 st('XORI', [Y,Xpp]) #66 *+37 127c dcfb st $fb,[y,x++] 5213 st(251, [Y,Xpp]) #67 *+38 127d dc35 st $35,[y,x++] 5214 st('BCC', [Y,Xpp]) #68 *+39 127e dc72 st $72,[y,x++] 5215 st('NE', [Y,Xpp]) #69 *+40 127f 8009 adda $09 5216 adda(46-2-35) #70 (AC -> *+44) 1280 de00 st [y,x++] 5217 st( [Y,Xpp]) #71 *+41 1281 dc5e st $5e,[y,x++] 5218 st('ST', [Y,Xpp]) #72 *+42 Wrap to next ROM page 1282 dc24 st $24,[y,x++] 5219 st(sysArgs+0, [Y,Xpp]) #73 *+43 1283 dc93 st $93,[y,x++] 5220 st('INC', [Y,Xpp]) #74 *+44 1284 dc25 st $25,[y,x++] 5221 st(sysArgs+1, [Y,Xpp]) #75 *+45 1285 dc21 st $21,[y,x++] 5222 st('LDW', [Y,Xpp]) #76 *+46 Read next byte from ROM table 1286 dc24 st $24,[y,x++] 5223 st(sysArgs+0, [Y,Xpp]) #77 *+47 1287 dc7f st $7f,[y,x++] 5224 st('LUP', [Y,Xpp]) #78 *+48 1288 dc00 st $00,[y,x++] 5225 st(0, [Y,Xpp]) #79 *+49 1289 dc93 st $93,[y,x++] 5226 st('INC', [Y,Xpp]) #80 *+50 Increment read pointer 128a dc24 st $24,[y,x++] 5227 st(sysArgs+0, [Y,Xpp]) #81 *+51 128b dcff st $ff,[y,x++] 5228 st('RET', [Y,Xpp]) #82 *+52 Return 5229 # Return to interpreter 128c 1403 ld $03,y 5230 ld(hi('REENTER'),Y) #83 128d e0cb jmp y,$cb 5231 jmp(Y,'REENTER') #84 128e 00d4 ld $d4 5232 ld(-88/2) #85 5233 5234 # SYS_VDrawBits_134 implementation 5235 label('sys_VDrawBits') sys_VDrawBits: 128f 0000 ld $00 5236 ld(0) #18 5237 label('.sysVdb0') .sysVdb0: 1290 c21d st [$1d] 5238 st([vTmp]) #19+i*25 1291 9529 adda [$29],y 5239 adda([sysArgs+5],Y) #20+i*25 Y=[sysPos+1]+[vTmp] 1292 0126 ld [$26] 5240 ld([sysArgs+2]) #21+i*25 Select color 1293 e896 blt $1296 5241 bmi(pc()+3) #22+i*25 1294 fc97 bra $1297 5242 bra(pc()+3) #23+i*25 1295 0124 ld [$24] 5243 ld([sysArgs+0]) #24+i*25 1296 0125 ld [$25] 5244 ld([sysArgs+1]) #24+i*25(!) 1297 ce00 st [y,x] 5245 st([Y,X]) #25+i*25 Draw pixel 1298 0126 ld [$26] 5246 ld([sysArgs+2]) #26+i*25 Shift byte left 1299 8200 adda ac 5247 adda(AC) #27+i*25 129a c226 st [$26] 5248 st([sysArgs+2]) #28+i*25 129b 011d ld [$1d] 5249 ld([vTmp]) #29+i*25 Unrolled loop (once) 129c 8129 adda [$29] 5250 adda([sysArgs+5]) #31+i*25 129d 9401 adda $01,y 5251 adda(1,Y) #30+i*25 Y=[sysPos+1]+[vTmp]+1 129e 0126 ld [$26] 5252 ld([sysArgs+2]) #32+i*25 Select color 129f e8a2 blt $12a2 5253 bmi(pc()+3) #33+i*25 12a0 fca3 bra $12a3 5254 bra(pc()+3) #34+i*25 12a1 0124 ld [$24] 5255 ld([sysArgs+0]) #35+i*25 12a2 0125 ld [$25] 5256 ld([sysArgs+1]) #35+i*25(!) 12a3 ce00 st [y,x] 5257 st([Y,X]) #36+i*25 Draw pixel 12a4 0126 ld [$26] 5258 ld([sysArgs+2]) #37+i*25 Shift byte left 12a5 8200 adda ac 5259 adda(AC) #38+i*25 12a6 c226 st [$26] 5260 st([sysArgs+2]) #39+i*25 12a7 011d ld [$1d] 5261 ld([vTmp]) #40+i*25 Loop counter 12a8 a006 suba $06 5262 suba(6) #41+i*25 12a9 ec90 bne .sysVdb0 5263 bne('.sysVdb0') #42+i*25 12aa 8008 adda $08 5264 adda(8) #43+i*25 Steps of 2 12ab 1403 ld $03,y 5265 ld(hi('REENTER'),Y) #119 12ac e0cb jmp y,$cb 5266 jmp(Y,'REENTER') #120 12ad 00c2 ld $c2 5267 ld(-124/2) #121 5268 5269 # SYS_ResetWaveforms_v4_50 implementation 5270 label('sys_ResetWaveforms') sys_ResetWaveforms: 12ae 0118 ld [$18] 5271 ld([vAC+0]) #18 X=4i 12af 8200 adda ac 5272 adda(AC) #19 12b0 9200 adda ac,x 5273 adda(AC,X) #20 12b1 0118 ld [$18] 5274 ld([vAC+0]) #21 12b2 de00 st [y,x++] 5275 st([Y,Xpp]) #22 Sawtooth: T[4i+0] = i 12b3 2020 anda $20 5276 anda(0x20) #23 Triangle: T[4i+1] = 2i if i<32 else 127-2i 12b4 ecb7 bne $12b7 5277 bne(pc()+3) #24 12b5 0118 ld [$18] 5278 ld([vAC+0]) #25 12b6 fcb9 bra $12b9 5279 bra(pc()+3) #26 12b7 8118 adda [$18] 5280 adda([vAC+0]) #26,27 12b8 607f xora $7f 5281 xora(127) #27 12b9 de00 st [y,x++] 5282 st([Y,Xpp]) #28 12ba 0118 ld [$18] 5283 ld([vAC+0]) #29 Pulse: T[4i+2] = 0 if i<32 else 63 12bb 2020 anda $20 5284 anda(0x20) #30 12bc ecbf bne $12bf 5285 bne(pc()+3) #31 12bd fcc0 bra $12c0 5286 bra(pc()+3) #32 12be 0000 ld $00 5287 ld(0) #33 12bf 003f ld $3f 5288 ld(63) #33(!) 12c0 de00 st [y,x++] 5289 st([Y,Xpp]) #34 12c1 0118 ld [$18] 5290 ld([vAC+0]) #35 Sawtooth: T[4i+3] = i 12c2 ce00 st [y,x] 5291 st([Y,X]) #36 12c3 8001 adda $01 5292 adda(1) #37 i += 1 12c4 c218 st [$18] 5293 st([vAC+0]) #38 12c5 6040 xora $40 5294 xora(64) #39 For 64 iterations 12c6 f0c9 beq $12c9 5295 beq(pc()+3) #40 12c7 fcca bra $12ca 5296 bra(pc()+3) #41 12c8 00fe ld $fe 5297 ld(-2) #42 12c9 0000 ld $00 5298 ld(0) #42(!) 12ca 8116 adda [$16] 5299 adda([vPC]) #43 12cb c216 st [$16] 5300 st([vPC]) #44 12cc 1403 ld $03,y 5301 ld(hi('REENTER'),Y) #45 12cd e0cb jmp y,$cb 5302 jmp(Y,'REENTER') #46 12ce 00e7 ld $e7 5303 ld(-50/2) #47 5304 5305 # SYS_ShuffleNoise_v4_46 implementation 5306 label('sys_ShuffleNoise') sys_ShuffleNoise: 12cf 1118 ld [$18],x 5307 ld([vAC+0],X) #18 tmp = T[4j] 12d0 0d00 ld [y,x] 5308 ld([Y,X]) #19 12d1 c21d st [$1d] 5309 st([vTmp]) #20 12d2 1119 ld [$19],x 5310 ld([vAC+1],X) #21 T[4j] = T[4i] 12d3 0d00 ld [y,x] 5311 ld([Y,X]) #22 12d4 1118 ld [$18],x 5312 ld([vAC+0],X) #23 12d5 ce00 st [y,x] 5313 st([Y,X]) #24 12d6 8200 adda ac 5314 adda(AC) #25 j += T[4i] 12d7 8200 adda ac 5315 adda(AC,) #26 12d8 8118 adda [$18] 5316 adda([vAC+0]) #27 12d9 c218 st [$18] 5317 st([vAC+0]) #28 12da 1119 ld [$19],x 5318 ld([vAC+1],X) #29 T[4i] = tmp 12db 011d ld [$1d] 5319 ld([vTmp]) #30 12dc ce00 st [y,x] 5320 st([Y,X]) #31 12dd 0119 ld [$19] 5321 ld([vAC+1]) #32 i += 1 12de 8004 adda $04 5322 adda(4) #33 12df c219 st [$19] 5323 st([vAC+1]) #34 12e0 f0e3 beq $12e3 5324 beq(pc()+3) #35 For 64 iterations 12e1 fce4 bra $12e4 5325 bra(pc()+3) #36 12e2 00fe ld $fe 5326 ld(-2) #37 12e3 0000 ld $00 5327 ld(0) #37(!) 12e4 8116 adda [$16] 5328 adda([vPC]) #38 12e5 c216 st [$16] 5329 st([vPC]) #39 12e6 1403 ld $03,y 5330 ld(hi('NEXTY'),Y) #40 12e7 e000 jmp y,$00 5331 jmp(Y,'NEXTY') #41 12e8 00ea ld $ea 5332 ld(-44/2) #42 5333 5334 # SYS_LoadBytes_DEVROM_XXX implementation 5335 label('sys_LoadBytes') sys_LoadBytes: 12e9 0030 ld $30 5336 ld(0x30) # Target address 12ea c225 st [$25] 5337 st([sysArgs+1]) # 12eb 011a ld [$1a] 5338 ld([vLR+0]) # Source address 12ec d224 st [$24],x 5339 st([sysArgs+0],X) # 12ed 0d00 ld [y,x] 5340 ld([Y,X]) # Byte count 5341 label('.slb1') # .slb1: 12ee c226 st [$26] 5342 st([sysArgs+2]) # 5343 12ef 0124 ld [$24] 5344 ld([sysArgs+0]) # Advance source address 12f0 8001 adda $01 5345 adda(1) # 12f1 d224 st [$24],x 5346 st([sysArgs+0],X) # 5347 12f2 0d00 ld [y,x] 5348 ld([Y,X]) # Copy byte 12f3 1125 ld [$25],x 5349 ld([sysArgs+1],X) # 12f4 c600 st [x] 5350 st([X]) # 5351 12f5 0125 ld [$25] 5352 ld([sysArgs+1]) # Advance target address 12f6 8001 adda $01 5353 adda(1) # 12f7 c225 st [$25] 5354 st([sysArgs+1]) # 5355 12f8 0126 ld [$26] 5356 ld([sysArgs+2]) # Decrement byte count and loop 12f9 ecee bne .slb1 5357 bne('.slb1') # 12fa a001 suba $01 5358 suba(1) # 5359 5360 # XXX Unfinished 5361 5362 #----------------------------------------------------------------------- 5363 # 5364 # End of core 5365 # 5366 #----------------------------------------------------------------------- 5367 disableListing() 12fb 0200 nop ;5 fillers 12fc 0200 nop 12fd 0200 nop 12fe 0200 nop 12ff 0200 nop ;+-----------------------------------+ ;| Apps/Pictures/packedPictures.rgb | ;+-----------------------------------+ packedPictures: 1300 00ff ld $ff 1301 00ff ld $ff 1302 00ff ld $ff * 15 times 130f 00fa ld $fa 1310 00ff ld $ff 1311 00ff ld $ff 1312 00ff ld $ff * 5 times 1315 00fe ld $fe 1316 00ff ld $ff 1317 00ff ld $ff 1318 00ff ld $ff * 5 times 131b 00ba ld $ba 131c 00be ld $be 131d 00ff ld $ff 131e 00ff ld $ff 131f 00fe ld $fe 1320 00eb ld $eb 1321 00ff ld $ff 1322 00fe ld $fe 1323 00fb ld $fb 1324 00fb ld $fb 1325 00bf ld $bf 1326 00ff ld $ff 1327 00fa ld $fa 1328 00af ld $af 1329 00ff ld $ff 132a 00ff ld $ff 132b 00ae ld $ae 132c 00ef ld $ef 132d 00ba ld $ba 132e 00fe ld $fe 132f 00ff ld $ff 1330 00ff ld $ff 1331 00ff ld $ff * 12 times 133b 00eb ld $eb 133c 00bf ld $bf 133d 00ee ld $ee 133e 00ef ld $ef 133f 00fe ld $fe 1340 00ae ld $ae 1341 00ff ld $ff 1342 00fe ld $fe 1343 00ee ld $ee 1344 00af ld $af 1345 00ff ld $ff 1346 00ff ld $ff 1347 00ff ld $ff 1348 00ff ld $ff 1349 00af ld $af 134a 00ff ld $ff 134b 00ff ld $ff 134c 00ef ld $ef 134d 00ff ld $ff 134e 00bf ld $bf 134f 00ff ld $ff 1350 00ff ld $ff 1351 00ff ld $ff * 5 times 1354 00bb ld $bb 1355 00be ld $be 1356 00eb ld $eb 1357 00ff ld $ff 1358 00fa ld $fa 1359 00ff ld $ff 135a 00bf ld $bf 135b 006f ld $6f 135c 00ea ld $ea 135d 00bb ld $bb 135e 005a ld $5a 135f 00a9 ld $a9 1360 00ff ld $ff 1361 00ff ld $ff 1362 00ff ld $ff * 12 times 136c 00ef ld $ef 136d 00ff ld $ff 136e 00ff ld $ff 136f 00ff ld $ff * 6 times 1373 00af ld $af 1374 00fe ld $fe 1375 00ff ld $ff 1376 00ff ld $ff 1377 00ff ld $ff 1378 00bf ld $bf 1379 00ff ld $ff 137a 00ff ld $ff 137b 00bb ld $bb 137c 00fa ld $fa 137d 00ff ld $ff 137e 00ff ld $ff 137f 00bf ld $bf 1380 00fa ld $fa 1381 00ff ld $ff 1382 00ff ld $ff 1383 00eb ld $eb 1384 00bb ld $bb 1385 00be ld $be 1386 00ff ld $ff 1387 00bf ld $bf 1388 00ff ld $ff 1389 00ff ld $ff 138a 00ff ld $ff 138b 00be ld $be 138c 00eb ld $eb 138d 00fb ld $fb 138e 00af ld $af 138f 009a ld $9a 1390 00ff ld $ff 1391 00ff ld $ff 1392 00ff ld $ff * 7 times 1397 00af ld $af 1398 00ff ld $ff 1399 00ff ld $ff 139a 00ff ld $ff 139b 00fb ld $fb 139c 00ff ld $ff 139d 00ff ld $ff 139e 00bb ld $bb 139f 00ba ld $ba 13a0 00aa ld $aa 13a1 00ba ld $ba 13a2 00fa ld $fa 13a3 00ff ld $ff 13a4 00ff ld $ff 13a5 00fe ld $fe 13a6 00ff ld $ff 13a7 00ff ld $ff 13a8 00ff ld $ff * 5 times 13ab 00fe ld $fe 13ac 00ff ld $ff 13ad 00fb ld $fb 13ae 00ff ld $ff 13af 00ef ld $ef 13b0 00ab ld $ab 13b1 00aa ld $aa 13b2 00fb ld $fb 13b3 00ef ld $ef 13b4 00bb ld $bb 13b5 00be ld $be 13b6 00eb ld $eb 13b7 00ff ld $ff 13b8 00ff ld $ff 13b9 00ff ld $ff 13ba 00bf ld $bf 13bb 00ae ld $ae 13bc 00eb ld $eb 13bd 00ff ld $ff 13be 00bf ld $bf 13bf 00ff ld $ff 13c0 00ff ld $ff 13c1 00bf ld $bf 13c2 00fb ld $fb 13c3 00ff ld $ff 13c4 00ff ld $ff 13c5 00ff ld $ff * 8 times 13cb 00ef ld $ef 13cc 006a ld $6a 13cd 0049 ld $49 13ce 0096 ld $96 13cf 0010 ld $10 13d0 0008 ld $08 13d1 0041 ld $41 13d2 0015 ld $15 13d3 0055 ld $55 13d4 0096 ld $96 13d5 00aa ld $aa 13d6 00aa ld $aa 13d7 00ab ld $ab 13d8 006a ld $6a 13d9 005a ld $5a 13da 0056 ld $56 13db 0065 ld $65 13dc 00a9 ld $a9 13dd 00ea ld $ea 13de 00aa ld $aa 13df 00aa ld $aa 13e0 00ff ld $ff 13e1 00ff ld $ff 13e2 00ae ld $ae 13e3 00eb ld $eb 13e4 00bf ld $bf 13e5 00be ld $be 13e6 00bf ld $bf 13e7 00ff ld $ff 13e8 00ff ld $ff 13e9 00ff ld $ff 13ea 00fb ld $fb 13eb 00aa ld $aa 13ec 00ef ld $ef 13ed 00af ld $af 13ee 00ff ld $ff 13ef 00ff ld $ff 13f0 00ff ld $ff * 11 times 13f9 0000 ld $00 13fa 0000 ld $00 13fb fe00 bra ac ;+-----------------------------------+ 13fc fcfd bra $13fd ;| | 13fd 1404 ld $04,y ;| Trampoline for page $1300 lookups | 13fe e068 jmp y,$68 ;| | 13ff c218 st [$18] ;+-----------------------------------+ 1400 00be ld $be 1401 009a ld $9a 1402 0092 ld $92 1403 0024 ld $24 1404 0048 ld $48 1405 0092 ld $92 1406 0010 ld $10 1407 0009 ld $09 1408 0092 ld $92 1409 0020 ld $20 140a 0008 ld $08 140b 0041 ld $41 140c 0010 ld $10 140d 0004 ld $04 140e 0041 ld $41 140f 0010 ld $10 1410 0004 ld $04 1411 0041 ld $41 1412 0010 ld $10 1413 0004 ld $04 1414 0042 ld $42 1415 0010 ld $10 1416 0054 ld $54 1417 00aa ld $aa 1418 00e9 ld $e9 1419 00ff ld $ff 141a 00eb ld $eb 141b 00ef ld $ef 141c 00ff ld $ff 141d 00eb ld $eb 141e 00ff ld $ff 141f 00ff ld $ff 1420 00ff ld $ff 1421 00fe ld $fe 1422 00ff ld $ff 1423 00ff ld $ff 1424 00ff ld $ff 1425 00bf ld $bf 1426 00eb ld $eb 1427 00ff ld $ff 1428 00ff ld $ff 1429 00ff ld $ff * 8 times 142f 00e6 ld $e6 1430 0028 ld $28 1431 004a ld $4a 1432 0092 ld $92 1433 0024 ld $24 1434 0049 ld $49 1435 0092 ld $92 1436 0020 ld $20 1437 0049 ld $49 1438 0082 ld $82 1439 0024 ld $24 143a 0008 ld $08 143b 0042 ld $42 143c 0010 ld $10 143d 0004 ld $04 143e 0042 ld $42 143f 0010 ld $10 1440 0008 ld $08 1441 0081 ld $81 1442 0020 ld $20 1443 0004 ld $04 1444 0081 ld $81 1445 0010 ld $10 1446 0009 ld $09 1447 0091 ld $91 1448 0050 ld $50 1449 00f9 ld $f9 144a 00ef ld $ef 144b 00ff ld $ff 144c 00ff ld $ff 144d 00ff ld $ff 144e 00ff ld $ff 144f 00bf ld $bf 1450 00ff ld $ff 1451 00ff ld $ff 1452 00ee ld $ee 1453 00ef ld $ef 1454 00bf ld $bf 1455 00bf ld $bf 1456 00fe ld $fe 1457 00ff ld $ff 1458 00ff ld $ff 1459 00ff ld $ff * 7 times 145e 00df ld $df 145f 00e3 ld $e3 1460 0028 ld $28 1461 008f ld $8f 1462 00e3 ld $e3 1463 0028 ld $28 1464 004a ld $4a 1465 0092 ld $92 1466 0028 ld $28 1467 004d ld $4d 1468 0092 ld $92 1469 0020 ld $20 146a 0049 ld $49 146b 0082 ld $82 146c 0024 ld $24 146d 0048 ld $48 146e 0082 ld $82 146f 0010 ld $10 1470 0009 ld $09 1471 0092 ld $92 1472 0024 ld $24 1473 0008 ld $08 1474 0091 ld $91 1475 0024 ld $24 1476 0048 ld $48 1477 0082 ld $82 1478 0024 ld $24 1479 0055 ld $55 147a 00a6 ld $a6 147b 00bf ld $bf 147c 00ff ld $ff 147d 00ff ld $ff 147e 00fa ld $fa 147f 00ef ld $ef 1480 00bf ld $bf 1481 00ff ld $ff 1482 00ff ld $ff 1483 00ab ld $ab 1484 00ff ld $ff 1485 00ee ld $ee 1486 00ee ld $ee 1487 00ea ld $ea 1488 00ff ld $ff 1489 00ff ld $ff 148a 00ff ld $ff * 6 times 148e 009f ld $9f 148f 00f2 ld $f2 1490 003d ld $3d 1491 00db ld $db 1492 00a3 ld $a3 1493 0038 ld $38 1494 0089 ld $89 1495 0093 ld $93 1496 0024 ld $24 1497 0085 ld $85 1498 0092 ld $92 1499 0024 ld $24 149a 0049 ld $49 149b 0092 ld $92 149c 0024 ld $24 149d 0009 ld $09 149e 0092 ld $92 149f 0024 ld $24 14a0 0048 ld $48 14a1 0092 ld $92 14a2 0020 ld $20 14a3 0009 ld $09 14a4 0092 ld $92 14a5 0020 ld $20 14a6 0009 ld $09 14a7 0041 ld $41 14a8 0020 ld $20 14a9 0004 ld $04 14aa 0041 ld $41 14ab 00e5 ld $e5 14ac 00ff ld $ff 14ad 00ab ld $ab 14ae 00ff ld $ff 14af 00bf ld $bf 14b0 009b ld $9b 14b1 00fa ld $fa 14b2 00ae ld $ae 14b3 00ef ld $ef 14b4 00aa ld $aa 14b5 00ae ld $ae 14b6 00ee ld $ee 14b7 00ea ld $ea 14b8 00ff ld $ff 14b9 00ff ld $ff 14ba 00ff ld $ff 14bb 00ff ld $ff 14bc 00af ld $af 14bd 00ff ld $ff 14be 00ff ld $ff 14bf 00f7 ld $f7 14c0 0069 ld $69 14c1 00cf ld $cf 14c2 00f7 ld $f7 14c3 0069 ld $69 14c4 0056 ld $56 14c5 0051 ld $51 14c6 0015 ld $15 14c7 0011 ld $11 14c8 0010 ld $10 14c9 0014 ld $14 14ca 0085 ld $85 14cb 0092 ld $92 14cc 0024 ld $24 14cd 0009 ld $09 14ce 0092 ld $92 14cf 0020 ld $20 14d0 0048 ld $48 14d1 0092 ld $92 14d2 0024 ld $24 14d3 008d ld $8d 14d4 0092 ld $92 14d5 0024 ld $24 14d6 0049 ld $49 14d7 0042 ld $42 14d8 0010 ld $10 14d9 0004 ld $04 14da 0052 ld $52 14db 0010 ld $10 14dc 00a4 ld $a4 14dd 00fb ld $fb 14de 00bb ld $bb 14df 00af ld $af 14e0 00ab ld $ab 14e1 00a6 ld $a6 14e2 0059 ld $59 14e3 00aa ld $aa 14e4 00bb ld $bb 14e5 00ba ld $ba 14e6 00ef ld $ef 14e7 00ff ld $ff 14e8 00ff ld $ff 14e9 00ff ld $ff * 6 times 14ed 00bf ld $bf 14ee 00fe ld $fe 14ef 00ab ld $ab 14f0 0044 ld $44 14f1 00da ld $da 14f2 00f7 ld $f7 14f3 0029 ld $29 14f4 0010 ld $10 14f5 0050 ld $50 14f6 0044 ld $44 14f7 0055 ld $55 14f8 0041 ld $41 14f9 0000 ld $00 14fa 0000 ld $00 14fb fe00 bra ac ;+-----------------------------------+ 14fc fcfd bra $14fd ;| | 14fd 1404 ld $04,y ;| Trampoline for page $1400 lookups | 14fe e068 jmp y,$68 ;| | 14ff c218 st [$18] ;+-----------------------------------+ 1500 0004 ld $04 1501 0044 ld $44 1502 0050 ld $50 1503 0024 ld $24 1504 0049 ld $49 1505 0092 ld $92 1506 0024 ld $24 1507 0049 ld $49 1508 0092 ld $92 1509 0024 ld $24 150a 0089 ld $89 150b 00e2 ld $e2 150c 0034 ld $34 150d 004a ld $4a 150e 0092 ld $92 150f 0024 ld $24 1510 0009 ld $09 1511 0091 ld $91 1512 0024 ld $24 1513 0009 ld $09 1514 0052 ld $52 1515 00bb ld $bb 1516 00bf ld $bf 1517 00eb ld $eb 1518 00ba ld $ba 1519 006e ld $6e 151a 0097 ld $97 151b 00a5 ld $a5 151c 0059 ld $59 151d 00ea ld $ea 151e 00ff ld $ff 151f 00ff ld $ff 1520 00ef ld $ef 1521 00bf ld $bf 1522 00fa ld $fa 1523 00ef ld $ef 1524 00fe ld $fe 1525 00ff ld $ff 1526 00ab ld $ab 1527 0080 ld $80 1528 0010 ld $10 1529 00a5 ld $a5 152a 007d ld $7d 152b 004a ld $4a 152c 0011 ld $11 152d 0001 ld $01 152e 0055 ld $55 152f 0011 ld $11 1530 0015 ld $15 1531 0011 ld $11 1532 0040 ld $40 1533 0014 ld $14 1534 0048 ld $48 1535 0091 ld $91 1536 0020 ld $20 1537 0049 ld $49 1538 0092 ld $92 1539 0034 ld $34 153a 0009 ld $09 153b 0092 ld $92 153c 0024 ld $24 153d 0008 ld $08 153e 0092 ld $92 153f 0024 ld $24 1540 0089 ld $89 1541 0093 ld $93 1542 0024 ld $24 1543 0048 ld $48 1544 0096 ld $96 1545 00be ld $be 1546 00ff ld $ff 1547 00bf ld $bf 1548 00bb ld $bb 1549 00bf ld $bf 154a 00eb ld $eb 154b 00a6 ld $a6 154c 00a9 ld $a9 154d 00ff ld $ff 154e 00ff ld $ff 154f 00ff ld $ff 1550 00ff ld $ff 1551 00fa ld $fa 1552 00bf ld $bf 1553 00fb ld $fb 1554 00eb ld $eb 1555 00ff ld $ff 1556 00a7 ld $a7 1557 0080 ld $80 1558 0040 ld $40 1559 0054 ld $54 155a 00aa ld $aa 155b 004a ld $4a 155c 0045 ld $45 155d 0080 ld $80 155e 0040 ld $40 155f 0040 ld $40 1560 0080 ld $80 1561 0000 ld $00 1562 0051 ld $51 1563 0024 ld $24 1564 0049 ld $49 1565 0096 ld $96 1566 0024 ld $24 1567 0049 ld $49 1568 00d2 ld $d2 1569 0024 ld $24 156a 0049 ld $49 156b 0082 ld $82 156c 0050 ld $50 156d 0089 ld $89 156e 00e2 ld $e2 156f 0028 ld $28 1570 0049 ld $49 1571 0092 ld $92 1572 0028 ld $28 1573 0049 ld $49 1574 0042 ld $42 1575 0041 ld $41 1576 00f9 ld $f9 1577 00fb ld $fb 1578 00fa ld $fa 1579 00fb ld $fb 157a 00eb ld $eb 157b 00ff ld $ff 157c 00ae ld $ae 157d 00aa ld $aa 157e 00fa ld $fa 157f 00ff ld $ff 1580 00ff ld $ff 1581 00ff ld $ff 1582 00fb ld $fb 1583 00ff ld $ff 1584 00ff ld $ff 1585 00bf ld $bf 1586 0057 ld $57 1587 0040 ld $40 1588 0040 ld $40 1589 0001 ld $01 158a 0041 ld $41 158b 00e5 ld $e5 158c 00aa ld $aa 158d 0015 ld $15 158e 0051 ld $51 158f 0050 ld $50 1590 0040 ld $40 1591 0010 ld $10 1592 0000 ld $00 1593 0001 ld $01 1594 0001 ld $01 1595 0051 ld $51 1596 0024 ld $24 1597 0049 ld $49 1598 0051 ld $51 1599 0024 ld $24 159a 0048 ld $48 159b 00a2 ld $a2 159c 0025 ld $25 159d 0049 ld $49 159e 0092 ld $92 159f 0038 ld $38 15a0 008a ld $8a 15a1 00a3 ld $a3 15a2 0024 ld $24 15a3 0049 ld $49 15a4 0092 ld $92 15a5 0024 ld $24 15a6 0049 ld $49 15a7 0001 ld $01 15a8 0001 ld $01 15a9 0044 ld $44 15aa 0055 ld $55 15ab 00a5 ld $a5 15ac 00bf ld $bf 15ad 00eb ld $eb 15ae 00bf ld $bf 15af 00ae ld $ae 15b0 0056 ld $56 15b1 0066 ld $66 15b2 00f4 ld $f4 15b3 00ff ld $ff 15b4 00bf ld $bf 15b5 00bf ld $bf 15b6 00ff ld $ff 15b7 00bf ld $bf 15b8 00fe ld $fe 15b9 00ff ld $ff 15ba 0015 ld $15 15bb 0015 ld $15 15bc 0040 ld $40 15bd 0095 ld $95 15be 00ea ld $ea 15bf 0057 ld $57 15c0 0040 ld $40 15c1 0000 ld $00 15c2 0001 ld $01 15c3 0002 ld $02 15c4 0001 ld $01 15c5 0008 ld $08 15c6 0004 ld $04 15c7 0009 ld $09 15c8 0052 ld $52 15c9 0024 ld $24 15ca 0009 ld $09 15cb 0052 ld $52 15cc 0024 ld $24 15cd 0049 ld $49 15ce 0092 ld $92 15cf 0038 ld $38 15d0 008a ld $8a 15d1 00e3 ld $e3 15d2 0028 ld $28 15d3 008e ld $8e 15d4 0093 ld $93 15d5 0028 ld $28 15d6 0049 ld $49 15d7 0092 ld $92 15d8 0010 ld $10 15d9 0005 ld $05 15da 0001 ld $01 15db 0001 ld $01 15dc 0044 ld $44 15dd 00a6 ld $a6 15de 0065 ld $65 15df 00aa ld $aa 15e0 00ea ld $ea 15e1 00ba ld $ba 15e2 0069 ld $69 15e3 00ea ld $ea 15e4 00ff ld $ff 15e5 00ff ld $ff 15e6 00ff ld $ff * 7 times 15eb 009f ld $9f 15ec 0041 ld $41 15ed 0054 ld $54 15ee 0095 ld $95 15ef 00fe ld $fe 15f0 00bb ld $bb 15f1 005f ld $5f 15f2 0000 ld $00 15f3 0003 ld $03 15f4 0004 ld $04 15f5 000c ld $0c 15f6 0010 ld $10 15f7 0045 ld $45 15f8 0092 ld $92 15f9 0000 ld $00 15fa 0000 ld $00 15fb fe00 bra ac ;+-----------------------------------+ 15fc fcfd bra $15fd ;| | 15fd 1404 ld $04,y ;| Trampoline for page $1500 lookups | 15fe e068 jmp y,$68 ;| | 15ff c218 st [$18] ;+-----------------------------------+ 1600 0024 ld $24 1601 0049 ld $49 1602 0092 ld $92 1603 0024 ld $24 1604 0089 ld $89 1605 0092 ld $92 1606 0024 ld $24 1607 0049 ld $49 1608 00e2 ld $e2 1609 0028 ld $28 160a 0059 ld $59 160b 00e2 ld $e2 160c 0028 ld $28 160d 0049 ld $49 160e 0011 ld $11 160f 0040 ld $40 1610 0040 ld $40 1611 0091 ld $91 1612 0024 ld $24 1613 004a ld $4a 1614 0092 ld $92 1615 0010 ld $10 1616 0054 ld $54 1617 00ea ld $ea 1618 00b6 ld $b6 1619 00ae ld $ae 161a 00ff ld $ff 161b 00ff ld $ff 161c 00ff ld $ff * 7 times 1621 00bf ld $bf 1622 004a ld $4a 1623 0055 ld $55 1624 0095 ld $95 1625 00da ld $da 1626 00a7 ld $a7 1627 007f ld $7f 1628 0005 ld $05 1629 000c ld $0c 162a 0005 ld $05 162b 0051 ld $51 162c 0041 ld $41 162d 0014 ld $14 162e 0045 ld $45 162f 0092 ld $92 1630 0024 ld $24 1631 008a ld $8a 1632 00e2 ld $e2 1633 0028 ld $28 1634 004e ld $4e 1635 00a2 ld $a2 1636 0024 ld $24 1637 0049 ld $49 1638 00a2 ld $a2 1639 0024 ld $24 163a 0089 ld $89 163b 00a2 ld $a2 163c 0064 ld $64 163d 008a ld $8a 163e 0042 ld $42 163f 0040 ld $40 1640 0000 ld $00 1641 0061 ld $61 1642 0028 ld $28 1643 008e ld $8e 1644 0092 ld $92 1645 0014 ld $14 1646 0054 ld $54 1647 00a6 ld $a6 1648 00bb ld $bb 1649 00ae ld $ae 164a 00fe ld $fe 164b 00ff ld $ff 164c 00ff ld $ff 164d 00ff ld $ff 164e 00ff ld $ff 164f 00af ld $af 1650 00fe ld $fe 1651 00ff ld $ff 1652 005f ld $5f 1653 0052 ld $52 1654 0059 ld $59 1655 009f ld $9f 1656 00aa ld $aa 1657 00a9 ld $a9 1658 00aa ld $aa 1659 0056 ld $56 165a 0015 ld $15 165b 0010 ld $10 165c 0050 ld $50 165d 0040 ld $40 165e 0040 ld $40 165f 0051 ld $51 1660 0024 ld $24 1661 0049 ld $49 1662 00a2 ld $a2 1663 0038 ld $38 1664 0089 ld $89 1665 00e2 ld $e2 1666 0028 ld $28 1667 008a ld $8a 1668 0092 ld $92 1669 0064 ld $64 166a 008f ld $8f 166b 00a3 ld $a3 166c 0028 ld $28 166d 009e ld $9e 166e 0056 ld $56 166f 0028 ld $28 1670 004a ld $4a 1671 0052 ld $52 1672 0040 ld $40 1673 0000 ld $00 1674 00a1 ld $a1 1675 0039 ld $39 1676 008a ld $8a 1677 0092 ld $92 1678 0024 ld $24 1679 0045 ld $45 167a 0099 ld $99 167b 00ba ld $ba 167c 00fd ld $fd 167d 00ff ld $ff 167e 00ff ld $ff 167f 00ff ld $ff 1680 00ff ld $ff 1681 00bf ld $bf 1682 00af ld $af 1683 00fe ld $fe 1684 00ff ld $ff 1685 009b ld $9b 1686 00a6 ld $a6 1687 00a9 ld $a9 1688 00a6 ld $a6 1689 00be ld $be 168a 00ba ld $ba 168b 00eb ld $eb 168c 00ab ld $ab 168d 006a ld $6a 168e 0055 ld $55 168f 00a1 ld $a1 1690 0024 ld $24 1691 0049 ld $49 1692 00a6 ld $a6 1693 0028 ld $28 1694 008a ld $8a 1695 0092 ld $92 1696 0068 ld $68 1697 008e ld $8e 1698 00a3 ld $a3 1699 0078 ld $78 169a 009b ld $9b 169b 00f3 ld $f3 169c 0039 ld $39 169d 004a ld $4a 169e 0056 ld $56 169f 0014 ld $14 16a0 0089 ld $89 16a1 0092 ld $92 16a2 0024 ld $24 16a3 0004 ld $04 16a4 0004 ld $04 16a5 0014 ld $14 16a6 008a ld $8a 16a7 00a6 ld $a6 16a8 0028 ld $28 16a9 004a ld $4a 16aa 0096 ld $96 16ab 0094 ld $94 16ac 00fe ld $fe 16ad 00ff ld $ff 16ae 00bf ld $bf 16af 00fe ld $fe 16b0 00ff ld $ff 16b1 00ff ld $ff 16b2 00bf ld $bf 16b3 00fb ld $fb 16b4 00fb ld $fb 16b5 009f ld $9f 16b6 0096 ld $96 16b7 0064 ld $64 16b8 00da ld $da 16b9 00eb ld $eb 16ba 00fe ld $fe 16bb 00eb ld $eb 16bc 00af ld $af 16bd 00fe ld $fe 16be 00ef ld $ef 16bf 00a7 ld $a7 16c0 0028 ld $28 16c1 008a ld $8a 16c2 00a2 ld $a2 16c3 0024 ld $24 16c4 008a ld $8a 16c5 00e3 ld $e3 16c6 0039 ld $39 16c7 00ce ld $ce 16c8 00f2 ld $f2 16c9 0038 ld $38 16ca 008e ld $8e 16cb 00fa ld $fa 16cc 007a ld $7a 16cd 005a ld $5a 16ce 0052 ld $52 16cf 0028 ld $28 16d0 0049 ld $49 16d1 0091 ld $91 16d2 0028 ld $28 16d3 0049 ld $49 16d4 0042 ld $42 16d5 0014 ld $14 16d6 0089 ld $89 16d7 00a2 ld $a2 16d8 0028 ld $28 16d9 0045 ld $45 16da 0066 ld $66 16db 0024 ld $24 16dc 00aa ld $aa 16dd 0057 ld $57 16de 0095 ld $95 16df 0059 ld $59 16e0 0099 ld $99 16e1 00ff ld $ff 16e2 00ff ld $ff 16e3 00ff ld $ff 16e4 002a ld $2a 16e5 0049 ld $49 16e6 0091 ld $91 16e7 0028 ld $28 16e8 0099 ld $99 16e9 00b3 ld $b3 16ea 0079 ld $79 16eb 00ea ld $ea 16ec 00fb ld $fb 16ed 00ae ld $ae 16ee 00de ld $de 16ef 00a3 ld $a3 16f0 0078 ld $78 16f1 008a ld $8a 16f2 00e2 ld $e2 16f3 0028 ld $28 16f4 00ce ld $ce 16f5 00a3 ld $a3 16f6 003c ld $3c 16f7 009a ld $9a 16f8 00f3 ld $f3 16f9 0000 ld $00 16fa 0000 ld $00 16fb fe00 bra ac ;+-----------------------------------+ 16fc fcfd bra $16fd ;| | 16fd 1404 ld $04,y ;| Trampoline for page $1600 lookups | 16fe e068 jmp y,$68 ;| | 16ff c218 st [$18] ;+-----------------------------------+ 1700 0029 ld $29 1701 009e ld $9e 1702 00f6 ld $f6 1703 0028 ld $28 1704 008a ld $8a 1705 0092 ld $92 1706 0028 ld $28 1707 008e ld $8e 1708 0092 ld $92 1709 0028 ld $28 170a 008a ld $8a 170b 0092 ld $92 170c 0024 ld $24 170d 008a ld $8a 170e 00b7 ld $b7 170f 0028 ld $28 1710 0089 ld $89 1711 0092 ld $92 1712 0029 ld $29 1713 0099 ld $99 1714 0096 ld $96 1715 00a2 ld $a2 1716 0059 ld $59 1717 009a ld $9a 1718 00ff ld $ff 1719 00ff ld $ff 171a 00a7 ld $a7 171b 0014 ld $14 171c 0044 ld $44 171d 0092 ld $92 171e 0028 ld $28 171f 008a ld $8a 1720 00a2 ld $a2 1721 0028 ld $28 1722 009a ld $9a 1723 00fa ld $fa 1724 007d ld $7d 1725 009f ld $9f 1726 00a3 ld $a3 1727 007e ld $7e 1728 008e ld $8e 1729 00a2 ld $a2 172a 0068 ld $68 172b 00da ld $da 172c 00a3 ld $a3 172d 0079 ld $79 172e 008f ld $8f 172f 00a3 ld $a3 1730 0038 ld $38 1731 00ca ld $ca 1732 00a3 ld $a3 1733 0038 ld $38 1734 008a ld $8a 1735 00e6 ld $e6 1736 0028 ld $28 1737 008e ld $8e 1738 00e2 ld $e2 1739 0038 ld $38 173a 008e ld $8e 173b 00e2 ld $e2 173c 0028 ld $28 173d 008a ld $8a 173e 00f6 ld $f6 173f 0028 ld $28 1740 008a ld $8a 1741 0092 ld $92 1742 0024 ld $24 1743 004a ld $4a 1744 00da ld $da 1745 00a6 ld $a6 1746 00be ld $be 1747 00ff ld $ff 1748 00ff ld $ff 1749 009f ld $9f 174a 0042 ld $42 174b 0024 ld $24 174c 0049 ld $49 174d 0091 ld $91 174e 0028 ld $28 174f 00de ld $de 1750 00a7 ld $a7 1751 0068 ld $68 1752 009a ld $9a 1753 00f6 ld $f6 1754 00ad ld $ad 1755 00ef ld $ef 1756 00fb ld $fb 1757 00be ld $be 1758 009f ld $9f 1759 00e2 ld $e2 175a 006d ld $6d 175b 00df ld $df 175c 00a7 ld $a7 175d 007d ld $7d 175e 00df ld $df 175f 00a3 ld $a3 1760 007d ld $7d 1761 009f ld $9f 1762 00f7 ld $f7 1763 0028 ld $28 1764 009e ld $9e 1765 00f3 ld $f3 1766 007d ld $7d 1767 00de ld $de 1768 00b3 ld $b3 1769 0039 ld $39 176a 008a ld $8a 176b 00a3 ld $a3 176c 0024 ld $24 176d 004a ld $4a 176e 00a2 ld $a2 176f 0038 ld $38 1770 009a ld $9a 1771 00a2 ld $a2 1772 0064 ld $64 1773 00aa ld $aa 1774 00eb ld $eb 1775 00ba ld $ba 1776 00fa ld $fa 1777 00ff ld $ff 1778 00ff ld $ff 1779 004f ld $4f 177a 00a1 ld $a1 177b 0029 ld $29 177c 0089 ld $89 177d 00a2 ld $a2 177e 0039 ld $39 177f 009a ld $9a 1780 00ea ld $ea 1781 0069 ld $69 1782 00aa ld $aa 1783 00f7 ld $f7 1784 00b9 ld $b9 1785 00ef ld $ef 1786 00ab ld $ab 1787 00be ld $be 1788 009f ld $9f 1789 00f6 ld $f6 178a 007d ld $7d 178b 00de ld $de 178c 00f7 ld $f7 178d 007d ld $7d 178e 00ef ld $ef 178f 00f7 ld $f7 1790 007d ld $7d 1791 00df ld $df 1792 00f7 ld $f7 1793 007d ld $7d 1794 00df ld $df 1795 00b7 ld $b7 1796 0039 ld $39 1797 008b ld $8b 1798 00e3 ld $e3 1799 0028 ld $28 179a 008e ld $8e 179b 00e2 ld $e2 179c 0028 ld $28 179d 008a ld $8a 179e 00a3 ld $a3 179f 006d ld $6d 17a0 008a ld $8a 17a1 00a2 ld $a2 17a2 0068 ld $68 17a3 00a9 ld $a9 17a4 00aa ld $aa 17a5 00aa ld $aa 17a6 00aa ld $aa 17a7 00ef ld $ef 17a8 007e ld $7e 17a9 0045 ld $45 17aa 00a5 ld $a5 17ab 0028 ld $28 17ac 009a ld $9a 17ad 00f6 ld $f6 17ae 0069 ld $69 17af 008b ld $8b 17b0 00f6 ld $f6 17b1 00aa ld $aa 17b2 00ef ld $ef 17b3 00fb ld $fb 17b4 00be ld $be 17b5 00de ld $de 17b6 00fb ld $fb 17b7 00bd ld $bd 17b8 00ef ld $ef 17b9 00e7 ld $e7 17ba 006e ld $6e 17bb 00ef ld $ef 17bc 00f7 ld $f7 17bd 00be ld $be 17be 009f ld $9f 17bf 00f7 ld $f7 17c0 0079 ld $79 17c1 00da ld $da 17c2 00fb ld $fb 17c3 0079 ld $79 17c4 008f ld $8f 17c5 00e3 ld $e3 17c6 0028 ld $28 17c7 008e ld $8e 17c8 00e2 ld $e2 17c9 0028 ld $28 17ca 008a ld $8a 17cb 00a3 ld $a3 17cc 0028 ld $28 17cd 008a ld $8a 17ce 00e2 ld $e2 17cf 0078 ld $78 17d0 005f ld $5f 17d1 00e6 ld $e6 17d2 0028 ld $28 17d3 0069 ld $69 17d4 009a ld $9a 17d5 0062 ld $62 17d6 0015 ld $15 17d7 00a9 ld $a9 17d8 0029 ld $29 17d9 0099 ld $99 17da 00e6 ld $e6 17db 0028 ld $28 17dc 004a ld $4a 17dd 00a2 ld $a2 17de 0068 ld $68 17df 00de ld $de 17e0 00e7 ld $e7 17e1 00bd ld $bd 17e2 00ee ld $ee 17e3 00fb ld $fb 17e4 0069 ld $69 17e5 00df ld $df 17e6 00e7 ld $e7 17e7 00ad ld $ad 17e8 00ee ld $ee 17e9 00f7 ld $f7 17ea 00bd ld $bd 17eb 00df ld $df 17ec 00eb ld $eb 17ed 006d ld $6d 17ee 00ef ld $ef 17ef 00f7 ld $f7 17f0 007d ld $7d 17f1 00df ld $df 17f2 00a3 ld $a3 17f3 003d ld $3d 17f4 008a ld $8a 17f5 00e2 ld $e2 17f6 002c ld $2c 17f7 008e ld $8e 17f8 00a2 ld $a2 17f9 0000 ld $00 17fa 0000 ld $00 17fb fe00 bra ac ;+-----------------------------------+ 17fc fcfd bra $17fd ;| | 17fd 1404 ld $04,y ;| Trampoline for page $1700 lookups | 17fe e068 jmp y,$68 ;| | 17ff c218 st [$18] ;+-----------------------------------+ 1800 003c ld $3c 1801 008a ld $8a 1802 00a3 ld $a3 1803 0038 ld $38 1804 008e ld $8e 1805 00a3 ld $a3 1806 0068 ld $68 1807 009f ld $9f 1808 001a ld $1a 1809 0069 ld $69 180a 00a5 ld $a5 180b 009a ld $9a 180c 00ba ld $ba 180d 00be ld $be 180e 00eb ld $eb 180f 0066 ld $66 1810 00da ld $da 1811 00a3 ld $a3 1812 0028 ld $28 1813 008a ld $8a 1814 00a2 ld $a2 1815 0068 ld $68 1816 00de ld $de 1817 00a7 ld $a7 1818 006c ld $6c 1819 00ee ld $ee 181a 00f7 ld $f7 181b 00bd ld $bd 181c 009f ld $9f 181d 00fb ld $fb 181e 00be ld $be 181f 00ef ld $ef 1820 00f6 ld $f6 1821 007a ld $7a 1822 009b ld $9b 1823 00fb ld $fb 1824 007d ld $7d 1825 00de ld $de 1826 00f7 ld $f7 1827 006d ld $6d 1828 009e ld $9e 1829 00e3 ld $e3 182a 0028 ld $28 182b 00de ld $de 182c 00e2 ld $e2 182d 0068 ld $68 182e 008f ld $8f 182f 00f2 ld $f2 1830 0028 ld $28 1831 008e ld $8e 1832 00a2 ld $a2 1833 0029 ld $29 1834 00df ld $df 1835 00e2 ld $e2 1836 0068 ld $68 1837 00ef ld $ef 1838 006b ld $6b 1839 0086 ld $86 183a 00a6 ld $a6 183b 0096 ld $96 183c 00a6 ld $a6 183d 00fe ld $fe 183e 00ee ld $ee 183f 0039 ld $39 1840 008a ld $8a 1841 0092 ld $92 1842 0068 ld $68 1843 008e ld $8e 1844 00e6 ld $e6 1845 0068 ld $68 1846 00da ld $da 1847 00f7 ld $f7 1848 0078 ld $78 1849 00da ld $da 184a 00fb ld $fb 184b 0079 ld $79 184c 00ef ld $ef 184d 00f6 ld $f6 184e 00be ld $be 184f 00ef ld $ef 1850 00fb ld $fb 1851 007d ld $7d 1852 00df ld $df 1853 00f6 ld $f6 1854 0079 ld $79 1855 00df ld $df 1856 00e6 ld $e6 1857 007d ld $7d 1858 00df ld $df 1859 00b7 ld $b7 185a 007c ld $7c 185b 008f ld $8f 185c 00f3 ld $f3 185d 0038 ld $38 185e 008a ld $8a 185f 00b3 ld $b3 1860 0038 ld $38 1861 008a ld $8a 1862 00e2 ld $e2 1863 0068 ld $68 1864 00cf ld $cf 1865 00e7 ld $e7 1866 00bd ld $bd 1867 009b ld $9b 1868 006b ld $6b 1869 0085 ld $85 186a 00a5 ld $a5 186b 0099 ld $99 186c 0055 ld $55 186d 00a4 ld $a4 186e 00fb ld $fb 186f 0064 ld $64 1870 0056 ld $56 1871 00a2 ld $a2 1872 0069 ld $69 1873 00de ld $de 1874 00b3 ld $b3 1875 0078 ld $78 1876 009a ld $9a 1877 00b7 ld $b7 1878 007d ld $7d 1879 00df ld $df 187a 00f7 ld $f7 187b 00bd ld $bd 187c 00ef ld $ef 187d 00eb ld $eb 187e 00fe ld $fe 187f 00ef ld $ef 1880 00e7 ld $e7 1881 006e ld $6e 1882 00ee ld $ee 1883 00f7 ld $f7 1884 0069 ld $69 1885 00df ld $df 1886 00f7 ld $f7 1887 003d ld $3d 1888 00de ld $de 1889 00f7 ld $f7 188a 0079 ld $79 188b 00db ld $db 188c 00b3 ld $b3 188d 0038 ld $38 188e 008b ld $8b 188f 00e2 ld $e2 1890 0028 ld $28 1891 008f ld $8f 1892 00e2 ld $e2 1893 0078 ld $78 1894 008b ld $8b 1895 00b3 ld $b3 1896 007d ld $7d 1897 00de ld $de 1898 006b ld $6b 1899 0086 ld $86 189a 00a6 ld $a6 189b 00da ld $da 189c 00a6 ld $a6 189d 00fa ld $fa 189e 00fe ld $fe 189f 0065 ld $65 18a0 00a1 ld $a1 18a1 00f9 ld $f9 18a2 007e ld $7e 18a3 00da ld $da 18a4 00a3 ld $a3 18a5 0068 ld $68 18a6 009f ld $9f 18a7 00e6 ld $e6 18a8 00b9 ld $b9 18a9 00ee ld $ee 18aa 00b7 ld $b7 18ab 007a ld $7a 18ac 00ef ld $ef 18ad 00fb ld $fb 18ae 00ff ld $ff 18af 00db ld $db 18b0 00bb ld $bb 18b1 0039 ld $39 18b2 00df ld $df 18b3 00a7 ld $a7 18b4 003c ld $3c 18b5 00da ld $da 18b6 00e3 ld $e3 18b7 007d ld $7d 18b8 009b ld $9b 18b9 00b7 ld $b7 18ba 003d ld $3d 18bb 00df ld $df 18bc 00e3 ld $e3 18bd 002d ld $2d 18be 008e ld $8e 18bf 00f7 ld $f7 18c0 0078 ld $78 18c1 008f ld $8f 18c2 00e2 ld $e2 18c3 0069 ld $69 18c4 008f ld $8f 18c5 00a2 ld $a2 18c6 007c ld $7c 18c7 00da ld $da 18c8 00ab ld $ab 18c9 0086 ld $86 18ca 00a6 ld $a6 18cb 00e9 ld $e9 18cc 00a6 ld $a6 18cd 006e ld $6e 18ce 00aa ld $aa 18cf 009a ld $9a 18d0 00a1 ld $a1 18d1 00a6 ld $a6 18d2 0068 ld $68 18d3 009f ld $9f 18d4 00a2 ld $a2 18d5 00a8 ld $a8 18d6 009e ld $9e 18d7 00f6 ld $f6 18d8 0078 ld $78 18d9 009f ld $9f 18da 00f7 ld $f7 18db 007e ld $7e 18dc 009f ld $9f 18dd 00fa ld $fa 18de 007e ld $7e 18df 00ee ld $ee 18e0 00a6 ld $a6 18e1 007d ld $7d 18e2 00da ld $da 18e3 00a3 ld $a3 18e4 007d ld $7d 18e5 008b ld $8b 18e6 00b7 ld $b7 18e7 003d ld $3d 18e8 00df ld $df 18e9 00f3 ld $f3 18ea 003d ld $3d 18eb 00da ld $da 18ec 00b3 ld $b3 18ed 003c ld $3c 18ee 00de ld $de 18ef 00a2 ld $a2 18f0 007c ld $7c 18f1 00ca ld $ca 18f2 00f3 ld $f3 18f3 007d ld $7d 18f4 008f ld $8f 18f5 00a2 ld $a2 18f6 0068 ld $68 18f7 008f ld $8f 18f8 00a7 ld $a7 18f9 0000 ld $00 18fa 0000 ld $00 18fb fe00 bra ac ;+-----------------------------------+ 18fc fcfd bra $18fd ;| | 18fd 1404 ld $04,y ;| Trampoline for page $1800 lookups | 18fe e068 jmp y,$68 ;| | 18ff c218 st [$18] ;+-----------------------------------+ 1900 008a ld $8a 1901 00a6 ld $a6 1902 00ee ld $ee 1903 00ba ld $ba 1904 0059 ld $59 1905 0055 ld $55 1906 0085 ld $85 1907 00a6 ld $a6 1908 00a2 ld $a2 1909 0068 ld $68 190a 00ce ld $ce 190b 00e6 ld $e6 190c 0068 ld $68 190d 00ae ld $ae 190e 00e6 ld $e6 190f 00aa ld $aa 1910 00ef ld $ef 1911 00b7 ld $b7 1912 0079 ld $79 1913 00df ld $df 1914 00fb ld $fb 1915 007e ld $7e 1916 009b ld $9b 1917 00f7 ld $f7 1918 0039 ld $39 1919 009f ld $9f 191a 00e6 ld $e6 191b 006c ld $6c 191c 00ce ld $ce 191d 00f3 ld $f3 191e 003d ld $3d 191f 00de ld $de 1920 00a3 ld $a3 1921 007d ld $7d 1922 00cf ld $cf 1923 00f7 ld $f7 1924 007d ld $7d 1925 00ca ld $ca 1926 00e3 ld $e3 1927 0028 ld $28 1928 009f ld $9f 1929 00a3 ld $a3 192a 0079 ld $79 192b 008f ld $8f 192c 00e2 ld $e2 192d 0028 ld $28 192e 00da ld $da 192f 00bb ld $bb 1930 0096 ld $96 1931 00aa ld $aa 1932 00da ld $da 1933 00a6 ld $a6 1934 006e ld $6e 1935 0006 ld $06 1936 0086 ld $86 1937 0086 ld $86 1938 00a3 ld $a3 1939 0029 ld $29 193a 008a ld $8a 193b 00f6 ld $f6 193c 0068 ld $68 193d 00ae ld $ae 193e 00fb ld $fb 193f 00be ld $be 1940 00fe ld $fe 1941 00f7 ld $f7 1942 00be ld $be 1943 009f ld $9f 1944 00fa ld $fa 1945 007e ld $7e 1946 00df ld $df 1947 00b7 ld $b7 1948 0078 ld $78 1949 00da ld $da 194a 00f3 ld $f3 194b 003c ld $3c 194c 00ca ld $ca 194d 00a7 ld $a7 194e 003c ld $3c 194f 00db ld $db 1950 00f7 ld $f7 1951 007c ld $7c 1952 009b ld $9b 1953 00f3 ld $f3 1954 0068 ld $68 1955 00cf ld $cf 1956 00a7 ld $a7 1957 007c ld $7c 1958 00ce ld $ce 1959 00e2 ld $e2 195a 007d ld $7d 195b 008f ld $8f 195c 00a2 ld $a2 195d 0028 ld $28 195e 008e ld $8e 195f 00a7 ld $a7 1960 008a ld $8a 1961 00ba ld $ba 1962 009a ld $9a 1963 00ba ld $ba 1964 00ad ld $ad 1965 0017 ld $17 1966 0056 ld $56 1967 008a ld $8a 1968 00a6 ld $a6 1969 0039 ld $39 196a 008a ld $8a 196b 00a3 ld $a3 196c 0078 ld $78 196d 009a ld $9a 196e 00ea ld $ea 196f 00be ld $be 1970 00eb ld $eb 1971 00ef ld $ef 1972 00be ld $be 1973 00ef ld $ef 1974 00fb ld $fb 1975 007d ld $7d 1976 00ca ld $ca 1977 00e7 ld $e7 1978 007c ld $7c 1979 008f ld $8f 197a 00e2 ld $e2 197b 002d ld $2d 197c 00de ld $de 197d 00e2 ld $e2 197e 006c ld $6c 197f 008e ld $8e 1980 00b3 ld $b3 1981 0039 ld $39 1982 00df ld $df 1983 00f6 ld $f6 1984 007c ld $7c 1985 00df ld $df 1986 00f3 ld $f3 1987 006d ld $6d 1988 008f ld $8f 1989 00f7 ld $f7 198a 006c ld $6c 198b 00df ld $df 198c 00a3 ld $a3 198d 0038 ld $38 198e 008b ld $8b 198f 00a6 ld $a6 1990 009a ld $9a 1991 006a ld $6a 1992 00ff ld $ff 1993 00ff ld $ff 1994 00bf ld $bf 1995 0016 ld $16 1996 001a ld $1a 1997 004a ld $4a 1998 00aa ld $aa 1999 0029 ld $29 199a 008b ld $8b 199b 00a3 ld $a3 199c 0028 ld $28 199d 00ae ld $ae 199e 00e6 ld $e6 199f 00fa ld $fa 19a0 00ff ld $ff 19a1 00fb ld $fb 19a2 00bf ld $bf 19a3 00eb ld $eb 19a4 00fb ld $fb 19a5 0079 ld $79 19a6 00df ld $df 19a7 00b3 ld $b3 19a8 0029 ld $29 19a9 00de ld $de 19aa 00b3 ld $b3 19ab 0038 ld $38 19ac 008b ld $8b 19ad 00f3 ld $f3 19ae 0039 ld $39 19af 00db ld $db 19b0 00f3 ld $f3 19b1 003d ld $3d 19b2 00de ld $de 19b3 00f7 ld $f7 19b4 0029 ld $29 19b5 008f ld $8f 19b6 00f6 ld $f6 19b7 0078 ld $78 19b8 00df ld $df 19b9 00f2 ld $f2 19ba 0039 ld $39 19bb 009f ld $9f 19bc 00f7 ld $f7 19bd 003d ld $3d 19be 008a ld $8a 19bf 00a3 ld $a3 19c0 00aa ld $aa 19c1 00be ld $be 19c2 00eb ld $eb 19c3 00fa ld $fa 19c4 00ff ld $ff 19c5 001b ld $1b 19c6 005a ld $5a 19c7 008a ld $8a 19c8 00a6 ld $a6 19c9 0039 ld $39 19ca 00ca ld $ca 19cb 00e6 ld $e6 19cc 0065 ld $65 19cd 009a ld $9a 19ce 00a7 ld $a7 19cf 00ba ld $ba 19d0 00fe ld $fe 19d1 00fe ld $fe 19d2 00fe ld $fe 19d3 00ff ld $ff 19d4 00fb ld $fb 19d5 007d ld $7d 19d6 00ce ld $ce 19d7 00f6 ld $f6 19d8 0078 ld $78 19d9 008f ld $8f 19da 00f6 ld $f6 19db 0028 ld $28 19dc 00ce ld $ce 19dd 00a7 ld $a7 19de 006c ld $6c 19df 00ce ld $ce 19e0 00a3 ld $a3 19e1 003d ld $3d 19e2 00db ld $db 19e3 00b3 ld $b3 19e4 007d ld $7d 19e5 00df ld $df 19e6 00f7 ld $f7 19e7 003d ld $3d 19e8 009f ld $9f 19e9 00f7 ld $f7 19ea 0078 ld $78 19eb 00db ld $db 19ec 00e7 ld $e7 19ed 002c ld $2c 19ee 008e ld $8e 19ef 00a3 ld $a3 19f0 00a9 ld $a9 19f1 005d ld $5d 19f2 009a ld $9a 19f3 00ea ld $ea 19f4 00ee ld $ee 19f5 001a ld $1a 19f6 0029 ld $29 19f7 009e ld $9e 19f8 00a6 ld $a6 19f9 0000 ld $00 19fa 0000 ld $00 19fb fe00 bra ac ;+-----------------------------------+ 19fc fcfd bra $19fd ;| | 19fd 1404 ld $04,y ;| Trampoline for page $1900 lookups | 19fe e068 jmp y,$68 ;| | 19ff c218 st [$18] ;+-----------------------------------+ 1a00 0028 ld $28 1a01 0089 ld $89 1a02 00a7 ld $a7 1a03 007e ld $7e 1a04 0099 ld $99 1a05 00e6 ld $e6 1a06 00aa ld $aa 1a07 00ef ld $ef 1a08 00ef ld $ef 1a09 00ff ld $ff 1a0a 00ef ld $ef 1a0b 00b7 ld $b7 1a0c 0079 ld $79 1a0d 00cb ld $cb 1a0e 00e3 ld $e3 1a0f 002d ld $2d 1a10 00ce ld $ce 1a11 00a3 ld $a3 1a12 007c ld $7c 1a13 00ca ld $ca 1a14 00f7 ld $f7 1a15 007c ld $7c 1a16 00cf ld $cf 1a17 00f6 ld $f6 1a18 0078 ld $78 1a19 00df ld $df 1a1a 00e7 ld $e7 1a1b 007c ld $7c 1a1c 009f ld $9f 1a1d 00f2 ld $f2 1a1e 0068 ld $68 1a1f 00ef ld $ef 1a20 00f6 ld $f6 1a21 00ac ld $ac 1a22 00ef ld $ef 1a23 00fb ld $fb 1a24 007e ld $7e 1a25 00ce ld $ce 1a26 00a2 ld $a2 1a27 00ba ld $ba 1a28 005e ld $5e 1a29 0096 ld $96 1a2a 00a6 ld $a6 1a2b 00be ld $be 1a2c 006a ld $6a 1a2d 0078 ld $78 1a2e 009a ld $9a 1a2f 00e6 ld $e6 1a30 0028 ld $28 1a31 004a ld $4a 1a32 00e6 ld $e6 1a33 0069 ld $69 1a34 005a ld $5a 1a35 0096 ld $96 1a36 00b9 ld $b9 1a37 00fe ld $fe 1a38 00ff ld $ff 1a39 00ff ld $ff 1a3a 00af ld $af 1a3b 00fb ld $fb 1a3c 003d ld $3d 1a3d 009f ld $9f 1a3e 00b7 ld $b7 1a3f 0038 ld $38 1a40 009b ld $9b 1a41 00b3 ld $b3 1a42 0038 ld $38 1a43 008a ld $8a 1a44 00b7 ld $b7 1a45 0078 ld $78 1a46 008b ld $8b 1a47 00f7 ld $f7 1a48 006c ld $6c 1a49 00ce ld $ce 1a4a 00f6 ld $f6 1a4b 006d ld $6d 1a4c 00df ld $df 1a4d 00e3 ld $e3 1a4e 007d ld $7d 1a4f 00ef ld $ef 1a50 00a7 ld $a7 1a51 00b8 ld $b8 1a52 00ef ld $ef 1a53 00af ld $af 1a54 00fe ld $fe 1a55 009f ld $9f 1a56 00ea ld $ea 1a57 00fb ld $fb 1a58 00ae ld $ae 1a59 00a7 ld $a7 1a5a 00ea ld $ea 1a5b 00fe ld $fe 1a5c 006a ld $6a 1a5d 007d ld $7d 1a5e 0085 ld $85 1a5f 00a2 ld $a2 1a60 0028 ld $28 1a61 009a ld $9a 1a62 00aa ld $aa 1a63 0069 ld $69 1a64 009a ld $9a 1a65 0096 ld $96 1a66 00b9 ld $b9 1a67 00aa ld $aa 1a68 00ff ld $ff 1a69 00bf ld $bf 1a6a 00aa ld $aa 1a6b 00a6 ld $a6 1a6c 007d ld $7d 1a6d 008b ld $8b 1a6e 00f3 ld $f3 1a6f 0068 ld $68 1a70 00cf ld $cf 1a71 00e3 ld $e3 1a72 002d ld $2d 1a73 00de ld $de 1a74 00f7 ld $f7 1a75 003d ld $3d 1a76 00db ld $db 1a77 00f7 ld $f7 1a78 0069 ld $69 1a79 00df ld $df 1a7a 00f7 ld $f7 1a7b 007d ld $7d 1a7c 00de ld $de 1a7d 00b7 ld $b7 1a7e 007c ld $7c 1a7f 00ee ld $ee 1a80 00a3 ld $a3 1a81 00bc ld $bc 1a82 00ee ld $ee 1a83 00ff ld $ff 1a84 00bf ld $bf 1a85 00ba ld $ba 1a86 00db ld $db 1a87 00ba ld $ba 1a88 00ba ld $ba 1a89 009b ld $9b 1a8a 00fa ld $fa 1a8b 00af ld $af 1a8c 006a ld $6a 1a8d 0068 ld $68 1a8e 008a ld $8a 1a8f 00a2 ld $a2 1a90 0038 ld $38 1a91 008a ld $8a 1a92 00eb ld $eb 1a93 006a ld $6a 1a94 009a ld $9a 1a95 00a6 ld $a6 1a96 00a5 ld $a5 1a97 00aa ld $aa 1a98 00fb ld $fb 1a99 00bf ld $bf 1a9a 009a ld $9a 1a9b 00f7 ld $f7 1a9c 007c ld $7c 1a9d 00ce ld $ce 1a9e 00f6 ld $f6 1a9f 007c ld $7c 1aa0 009f ld $9f 1aa1 00f6 ld $f6 1aa2 0028 ld $28 1aa3 00df ld $df 1aa4 00b7 ld $b7 1aa5 007c ld $7c 1aa6 00ce ld $ce 1aa7 00e6 ld $e6 1aa8 007c ld $7c 1aa9 00df ld $df 1aaa 00e7 ld $e7 1aab 007c ld $7c 1aac 00cf ld $cf 1aad 00f7 ld $f7 1aae 00ad ld $ad 1aaf 00ff ld $ff 1ab0 00e7 ld $e7 1ab1 00ae ld $ae 1ab2 00fe ld $fe 1ab3 00ea ld $ea 1ab4 00e9 ld $e9 1ab5 00ae ld $ae 1ab6 009b ld $9b 1ab7 00ba ld $ba 1ab8 0069 ld $69 1ab9 00ea ld $ea 1aba 00bb ld $bb 1abb 00ae ld $ae 1abc 00aa ld $aa 1abd 0068 ld $68 1abe 009a ld $9a 1abf 00a3 ld $a3 1ac0 0039 ld $39 1ac1 00ae ld $ae 1ac2 00a6 ld $a6 1ac3 0065 ld $65 1ac4 005a ld $5a 1ac5 0096 ld $96 1ac6 00a9 ld $a9 1ac7 00ee ld $ee 1ac8 00ff ld $ff 1ac9 00ab ld $ab 1aca 00da ld $da 1acb 00e7 ld $e7 1acc 002d ld $2d 1acd 008f ld $8f 1ace 00f7 ld $f7 1acf 0068 ld $68 1ad0 00df ld $df 1ad1 00fb ld $fb 1ad2 007e ld $7e 1ad3 009f ld $9f 1ad4 00f2 ld $f2 1ad5 0039 ld $39 1ad6 00db ld $db 1ad7 00f3 ld $f3 1ad8 002d ld $2d 1ad9 00ce ld $ce 1ada 00f6 ld $f6 1adb 002c ld $2c 1adc 00de ld $de 1add 00e6 ld $e6 1ade 00fd ld $fd 1adf 00ff ld $ff 1ae0 00fb ld $fb 1ae1 00bf ld $bf 1ae2 00fe ld $fe 1ae3 00ea ld $ea 1ae4 00fa ld $fa 1ae5 00ae ld $ae 1ae6 009b ld $9b 1ae7 00b6 ld $b6 1ae8 00be ld $be 1ae9 00db ld $db 1aea 00a5 ld $a5 1aeb 001a ld $1a 1aec 0069 ld $69 1aed 0039 ld $39 1aee 009e ld $9e 1aef 00a2 ld $a2 1af0 0079 ld $79 1af1 00aa ld $aa 1af2 00ea ld $ea 1af3 00a9 ld $a9 1af4 0099 ld $99 1af5 00a6 ld $a6 1af6 00a5 ld $a5 1af7 00ae ld $ae 1af8 00eb ld $eb 1af9 0000 ld $00 1afa 0000 ld $00 1afb fe00 bra ac ;+-----------------------------------+ 1afc fcfd bra $1afd ;| | 1afd 1404 ld $04,y ;| Trampoline for page $1a00 lookups | 1afe e068 jmp y,$68 ;| | 1aff c218 st [$18] ;+-----------------------------------+ 1b00 00be ld $be 1b01 009a ld $9a 1b02 00f3 ld $f3 1b03 007d ld $7d 1b04 00df ld $df 1b05 00f2 ld $f2 1b06 007d ld $7d 1b07 00ef ld $ef 1b08 00ea ld $ea 1b09 006e ld $6e 1b0a 00cf ld $cf 1b0b 00f7 ld $f7 1b0c 006c ld $6c 1b0d 00ce ld $ce 1b0e 00e2 ld $e2 1b0f 0038 ld $38 1b10 008b ld $8b 1b11 00f3 ld $f3 1b12 0069 ld $69 1b13 00ef ld $ef 1b14 00f7 ld $f7 1b15 00fe ld $fe 1b16 00ff ld $ff 1b17 00ff ld $ff 1b18 00ea ld $ea 1b19 00aa ld $aa 1b1a 00ab ld $ab 1b1b 00ff ld $ff 1b1c 00ae ld $ae 1b1d 0097 ld $97 1b1e 00e6 ld $e6 1b1f 00fe ld $fe 1b20 00eb ld $eb 1b21 0076 ld $76 1b22 0008 ld $08 1b23 0055 ld $55 1b24 007f ld $7f 1b25 009a ld $9a 1b26 00e2 ld $e2 1b27 0079 ld $79 1b28 0059 ld $59 1b29 00ea ld $ea 1b2a 006a ld $6a 1b2b 005a ld $5a 1b2c 0096 ld $96 1b2d 00a9 ld $a9 1b2e 00ae ld $ae 1b2f 00fb ld $fb 1b30 007f ld $7f 1b31 00de ld $de 1b32 00b7 ld $b7 1b33 0039 ld $39 1b34 009f ld $9f 1b35 00f7 ld $f7 1b36 0069 ld $69 1b37 0055 ld $55 1b38 0055 ld $55 1b39 0095 ld $95 1b3a 00ea ld $ea 1b3b 00a7 ld $a7 1b3c 007d ld $7d 1b3d 00ef ld $ef 1b3e 00fb ld $fb 1b3f 00ae ld $ae 1b40 00af ld $af 1b41 00bb ld $bb 1b42 00be ld $be 1b43 00ef ld $ef 1b44 00f7 ld $f7 1b45 00be ld $be 1b46 00fb ld $fb 1b47 00ab ld $ab 1b48 00aa ld $aa 1b49 00bf ld $bf 1b4a 00ef ld $ef 1b4b 00fa ld $fa 1b4c 00ff ld $ff 1b4d 00eb ld $eb 1b4e 00f6 ld $f6 1b4f 00ef ld $ef 1b50 0097 ld $97 1b51 0076 ld $76 1b52 0059 ld $59 1b53 0085 ld $85 1b54 006a ld $6a 1b55 009a ld $9a 1b56 00a7 ld $a7 1b57 0069 ld $69 1b58 005a ld $5a 1b59 00e6 ld $e6 1b5a 00ba ld $ba 1b5b 00aa ld $aa 1b5c 00ea ld $ea 1b5d 00a9 ld $a9 1b5e 00ae ld $ae 1b5f 00ff ld $ff 1b60 007f ld $7f 1b61 009a ld $9a 1b62 00f7 ld $f7 1b63 007d ld $7d 1b64 00df ld $df 1b65 00a7 ld $a7 1b66 0055 ld $55 1b67 0095 ld $95 1b68 0055 ld $55 1b69 0015 ld $15 1b6a 00a5 ld $a5 1b6b 00fe ld $fe 1b6c 00bf ld $bf 1b6d 00fa ld $fa 1b6e 00ab ld $ab 1b6f 00aa ld $aa 1b70 00aa ld $aa 1b71 00aa ld $aa 1b72 00ff ld $ff 1b73 00ef ld $ef 1b74 00eb ld $eb 1b75 00be ld $be 1b76 00af ld $af 1b77 00ab ld $ab 1b78 00fe ld $fe 1b79 00be ld $be 1b7a 00eb ld $eb 1b7b 00bb ld $bb 1b7c 00fd ld $fd 1b7d 00ef ld $ef 1b7e 00fb ld $fb 1b7f 00bf ld $bf 1b80 00eb ld $eb 1b81 0076 ld $76 1b82 0069 ld $69 1b83 0096 ld $96 1b84 00ba ld $ba 1b85 009a ld $9a 1b86 00a6 ld $a6 1b87 0065 ld $65 1b88 0085 ld $85 1b89 0096 ld $96 1b8a 00ba ld $ba 1b8b 009a ld $9a 1b8c 00ab ld $ab 1b8d 00ba ld $ba 1b8e 009e ld $9e 1b8f 00ab ld $ab 1b90 007f ld $7f 1b91 00de ld $de 1b92 00f7 ld $f7 1b93 006d ld $6d 1b94 009f ld $9f 1b95 0055 ld $55 1b96 0099 ld $99 1b97 00aa ld $aa 1b98 0056 ld $56 1b99 0045 ld $45 1b9a 0055 ld $55 1b9b 00a9 ld $a9 1b9c 009a ld $9a 1b9d 00aa ld $aa 1b9e 00aa ld $aa 1b9f 0055 ld $55 1ba0 00aa ld $aa 1ba1 0095 ld $95 1ba2 00aa ld $aa 1ba3 00aa ld $aa 1ba4 00aa ld $aa * 5 times 1ba7 006a ld $6a 1ba8 00b6 ld $b6 1ba9 00ae ld $ae 1baa 00ef ld $ef 1bab 00ff ld $ff 1bac 00ae ld $ae 1bad 00bf ld $bf 1bae 00ff ld $ff 1baf 00ff ld $ff 1bb0 00ef ld $ef 1bb1 00ba ld $ba 1bb2 00ae ld $ae 1bb3 00ef ld $ef 1bb4 007f ld $7f 1bb5 00a5 ld $a5 1bb6 0096 ld $96 1bb7 0069 ld $69 1bb8 005a ld $5a 1bb9 00a6 ld $a6 1bba 00a9 ld $a9 1bbb 00af ld $af 1bbc 00e6 ld $e6 1bbd 00b9 ld $b9 1bbe 00aa ld $aa 1bbf 00fb ld $fb 1bc0 00bf ld $bf 1bc1 009a ld $9a 1bc2 00e7 ld $e7 1bc3 007a ld $7a 1bc4 005a ld $5a 1bc5 0055 ld $55 1bc6 0056 ld $56 1bc7 0065 ld $65 1bc8 0055 ld $55 1bc9 0055 ld $55 1bca 0055 ld $55 1bcb 0055 ld $55 1bcc 00a5 ld $a5 1bcd 0065 ld $65 1bce 00a9 ld $a9 1bcf 0056 ld $56 1bd0 0095 ld $95 1bd1 0055 ld $55 1bd2 00aa ld $aa 1bd3 00a5 ld $a5 1bd4 0099 ld $99 1bd5 009a ld $9a 1bd6 0065 ld $65 1bd7 0055 ld $55 1bd8 0056 ld $56 1bd9 0065 ld $65 1bda 0095 ld $95 1bdb 00ab ld $ab 1bdc 00fe ld $fe 1bdd 00ff ld $ff 1bde 00ff ld $ff 1bdf 00ff ld $ff 1be0 00ab ld $ab 1be1 00aa ld $aa 1be2 006d ld $6d 1be3 00fb ld $fb 1be4 00af ld $af 1be5 0096 ld $96 1be6 00a6 ld $a6 1be7 0066 ld $66 1be8 005a ld $5a 1be9 00a6 ld $a6 1bea 00b9 ld $b9 1beb 00aa ld $aa 1bec 00ab ld $ab 1bed 00ba ld $ba 1bee 00ee ld $ee 1bef 00ff ld $ff 1bf0 00bf ld $bf 1bf1 006a ld $6a 1bf2 0055 ld $55 1bf3 0055 ld $55 1bf4 0051 ld $51 1bf5 0055 ld $55 1bf6 0095 ld $95 1bf7 00a5 ld $a5 1bf8 006a ld $6a 1bf9 0000 ld $00 1bfa 0000 ld $00 1bfb fe00 bra ac ;+-----------------------------------+ 1bfc fcfd bra $1bfd ;| | 1bfd 1404 ld $04,y ;| Trampoline for page $1b00 lookups | 1bfe e068 jmp y,$68 ;| | 1bff c218 st [$18] ;+-----------------------------------+ 1c00 00a5 ld $a5 1c01 00a6 ld $a6 1c02 0056 ld $56 1c03 009a ld $9a 1c04 00a9 ld $a9 1c05 00a9 ld $a9 1c06 006a ld $6a 1c07 00a5 ld $a5 1c08 009a ld $9a 1c09 00aa ld $aa 1c0a 006a ld $6a 1c0b 00a5 ld $a5 1c0c 0056 ld $56 1c0d 006a ld $6a 1c0e 0065 ld $65 1c0f 0056 ld $56 1c10 00a5 ld $a5 1c11 0055 ld $55 1c12 0056 ld $56 1c13 0066 ld $66 1c14 00aa ld $aa 1c15 00ff ld $ff 1c16 00ff ld $ff 1c17 00db ld $db 1c18 00ba ld $ba 1c19 006e ld $6e 1c1a 00da ld $da 1c1b 00bf ld $bf 1c1c 00aa ld $aa 1c1d 00aa ld $aa 1c1e 006a ld $6a 1c1f 009a ld $9a 1c20 00a6 ld $a6 1c21 00a5 ld $a5 1c22 00ae ld $ae 1c23 00e6 ld $e6 1c24 00aa ld $aa 1c25 00ae ld $ae 1c26 006a ld $6a 1c27 0055 ld $55 1c28 0054 ld $54 1c29 0054 ld $54 1c2a 0056 ld $56 1c2b 0065 ld $65 1c2c 0059 ld $59 1c2d 0056 ld $56 1c2e 0065 ld $65 1c2f 00a9 ld $a9 1c30 006a ld $6a 1c31 00e5 ld $e5 1c32 00af ld $af 1c33 00fa ld $fa 1c34 00ea ld $ea 1c35 00eb ld $eb 1c36 00bf ld $bf 1c37 005a ld $5a 1c38 0069 ld $69 1c39 00bf ld $bf 1c3a 00af ld $af 1c3b 00bb ld $bb 1c3c 00bb ld $bb 1c3d 00aa ld $aa 1c3e 00aa ld $aa 1c3f 00a6 ld $a6 1c40 0066 ld $66 1c41 005a ld $5a 1c42 0095 ld $95 1c43 0055 ld $55 1c44 0055 ld $55 1c45 00a6 ld $a6 1c46 00fa ld $fa 1c47 00d7 ld $d7 1c48 00ba ld $ba 1c49 005e ld $5e 1c4a 0097 ld $97 1c4b 00ba ld $ba 1c4c 00aa ld $aa 1c4d 00aa ld $aa 1c4e 00aa ld $aa 1c4f 009a ld $9a 1c50 00a6 ld $a6 1c51 00a9 ld $a9 1c52 00ae ld $ae 1c53 00ab ld $ab 1c54 0065 ld $65 1c55 0055 ld $55 1c56 0044 ld $44 1c57 0045 ld $45 1c58 0065 ld $65 1c59 0055 ld $55 1c5a 0056 ld $56 1c5b 0065 ld $65 1c5c 00a5 ld $a5 1c5d 00aa ld $aa 1c5e 00aa ld $aa 1c5f 00fe ld $fe 1c60 0059 ld $59 1c61 00a5 ld $a5 1c62 00fe ld $fe 1c63 00fe ld $fe 1c64 00af ld $af 1c65 00ea ld $ea 1c66 00bf ld $bf 1c67 009a ld $9a 1c68 00ea ld $ea 1c69 00bf ld $bf 1c6a 00fb ld $fb 1c6b 00ff ld $ff 1c6c 00ba ld $ba 1c6d 00be ld $be 1c6e 00ef ld $ef 1c6f 00bf ld $bf 1c70 00ae ld $ae 1c71 00aa ld $aa 1c72 00aa ld $aa 1c73 0065 ld $65 1c74 0059 ld $59 1c75 0099 ld $99 1c76 0055 ld $55 1c77 0085 ld $85 1c78 00a6 ld $a6 1c79 00ae ld $ae 1c7a 0097 ld $97 1c7b 00b6 ld $b6 1c7c 005a ld $5a 1c7d 00a9 ld $a9 1c7e 00be ld $be 1c7f 006e ld $6e 1c80 00e6 ld $e6 1c81 006a ld $6a 1c82 006a ld $6a 1c83 0055 ld $55 1c84 0045 ld $45 1c85 0051 ld $51 1c86 0055 ld $55 1c87 0096 ld $96 1c88 0055 ld $55 1c89 0059 ld $59 1c8a 00aa ld $aa 1c8b 00aa ld $aa 1c8c 006a ld $6a 1c8d 00aa ld $aa 1c8e 00aa ld $aa 1c8f 00fe ld $fe 1c90 006a ld $6a 1c91 0066 ld $66 1c92 00f9 ld $f9 1c93 00ab ld $ab 1c94 00aa ld $aa 1c95 00aa ld $aa 1c96 00ff ld $ff 1c97 00ff ld $ff 1c98 00fe ld $fe 1c99 00be ld $be 1c9a 00fe ld $fe 1c9b 00eb ld $eb 1c9c 00ae ld $ae 1c9d 006e ld $6e 1c9e 00fb ld $fb 1c9f 00fa ld $fa 1ca0 00be ld $be 1ca1 00eb ld $eb 1ca2 00bb ld $bb 1ca3 00ae ld $ae 1ca4 006a ld $6a 1ca5 0066 ld $66 1ca6 0065 ld $65 1ca7 00e9 ld $e9 1ca8 00f5 ld $f5 1ca9 00fe ld $fe 1caa 0097 ld $97 1cab 00f5 ld $f5 1cac 005b ld $5b 1cad 0055 ld $55 1cae 00aa ld $aa 1caf 00ef ld $ef 1cb0 00aa ld $aa 1cb1 0055 ld $55 1cb2 0054 ld $54 1cb3 0044 ld $44 1cb4 0095 ld $95 1cb5 0065 ld $65 1cb6 0059 ld $59 1cb7 00a5 ld $a5 1cb8 00a6 ld $a6 1cb9 00a6 ld $a6 1cba 0069 ld $69 1cbb 00ef ld $ef 1cbc 00ab ld $ab 1cbd 00aa ld $aa 1cbe 00ea ld $ea 1cbf 00ea ld $ea 1cc0 00fa ld $fa 1cc1 00af ld $af 1cc2 00aa ld $aa 1cc3 006a ld $6a 1cc4 00b5 ld $b5 1cc5 00fe ld $fe 1cc6 00bf ld $bf 1cc7 00ff ld $ff 1cc8 00fb ld $fb 1cc9 00fb ld $fb 1cca 00ef ld $ef 1ccb 00eb ld $eb 1ccc 00ea ld $ea 1ccd 00fe ld $fe 1cce 00af ld $af 1ccf 00b6 ld $b6 1cd0 006e ld $6e 1cd1 00ef ld $ef 1cd2 00b6 ld $b6 1cd3 006e ld $6e 1cd4 00eb ld $eb 1cd5 00aa ld $aa 1cd6 006a ld $6a 1cd7 00ad ld $ad 1cd8 00ff ld $ff 1cd9 00ff ld $ff 1cda 00ef ld $ef 1cdb 00ff ld $ff 1cdc 009e ld $9e 1cdd 0056 ld $56 1cde 0069 ld $69 1cdf 006a ld $6a 1ce0 0045 ld $45 1ce1 0041 ld $41 1ce2 0051 ld $51 1ce3 0059 ld $59 1ce4 0099 ld $99 1ce5 0055 ld $55 1ce6 006a ld $6a 1ce7 00aa ld $aa 1ce8 00ae ld $ae 1ce9 00ea ld $ea 1cea 0069 ld $69 1ceb 00ee ld $ee 1cec 00eb ld $eb 1ced 009a ld $9a 1cee 00aa ld $aa 1cef 00aa ld $aa 1cf0 00ba ld $ba 1cf1 00ea ld $ea 1cf2 00ab ld $ab 1cf3 00aa ld $aa 1cf4 00ea ld $ea 1cf5 00ff ld $ff 1cf6 00ea ld $ea 1cf7 00bf ld $bf 1cf8 00fb ld $fb 1cf9 0000 ld $00 1cfa 0000 ld $00 1cfb fe00 bra ac ;+-----------------------------------+ 1cfc fcfd bra $1cfd ;| | 1cfd 1404 ld $04,y ;| Trampoline for page $1c00 lookups | 1cfe e068 jmp y,$68 ;| | 1cff c218 st [$18] ;+-----------------------------------+ 1d00 00bf ld $bf 1d01 00ee ld $ee 1d02 00ea ld $ea 1d03 00bf ld $bf 1d04 00fe ld $fe 1d05 00ab ld $ab 1d06 00a6 ld $a6 1d07 00a9 ld $a9 1d08 00db ld $db 1d09 00b7 ld $b7 1d0a 007e ld $7e 1d0b 00db ld $db 1d0c 00f6 ld $f6 1d0d 00af ld $af 1d0e 00ea ld $ea 1d0f 00bb ld $bb 1d10 00ff ld $ff 1d11 00ff ld $ff 1d12 00fe ld $fe 1d13 00af ld $af 1d14 0056 ld $56 1d15 0055 ld $55 1d16 0054 ld $54 1d17 0010 ld $10 1d18 0095 ld $95 1d19 0059 ld $59 1d1a 0059 ld $59 1d1b 0056 ld $56 1d1c 00aa ld $aa 1d1d 00fb ld $fb 1d1e 006a ld $6a 1d1f 009a ld $9a 1d20 00b6 ld $b6 1d21 007a ld $7a 1d22 00eb ld $eb 1d23 00ff ld $ff 1d24 00aa ld $aa 1d25 00a6 ld $a6 1d26 00aa ld $aa 1d27 00ae ld $ae 1d28 00aa ld $aa 1d29 00aa ld $aa 1d2a 009a ld $9a 1d2b 00fa ld $fa 1d2c 00fb ld $fb 1d2d 00fa ld $fa 1d2e 00ef ld $ef 1d2f 00fe ld $fe 1d30 00be ld $be 1d31 00ee ld $ee 1d32 00ff ld $ff 1d33 00ff ld $ff 1d34 00fe ld $fe 1d35 00ef ld $ef 1d36 00fe ld $fe 1d37 006f ld $6f 1d38 00db ld $db 1d39 00fa ld $fa 1d3a 00fe ld $fe 1d3b 00eb ld $eb 1d3c 00eb ld $eb 1d3d 00ff ld $ff 1d3e 00ab ld $ab 1d3f 00ea ld $ea 1d40 00ba ld $ba 1d41 00ef ld $ef 1d42 00ab ld $ab 1d43 009a ld $9a 1d44 0045 ld $45 1d45 0045 ld $45 1d46 0050 ld $50 1d47 0059 ld $59 1d48 005a ld $5a 1d49 0065 ld $65 1d4a 00a9 ld $a9 1d4b 00fa ld $fa 1d4c 00af ld $af 1d4d 00eb ld $eb 1d4e 00bb ld $bb 1d4f 00ab ld $ab 1d50 00ea ld $ea 1d51 007d ld $7d 1d52 00fe ld $fe 1d53 00fa ld $fa 1d54 00aa ld $aa 1d55 0095 ld $95 1d56 0069 ld $69 1d57 00a5 ld $a5 1d58 009a ld $9a 1d59 005a ld $5a 1d5a 009a ld $9a 1d5b 00ea ld $ea 1d5c 00ab ld $ab 1d5d 00aa ld $aa 1d5e 00ef ld $ef 1d5f 00ff ld $ff 1d60 00be ld $be 1d61 00fa ld $fa 1d62 00ff ld $ff 1d63 00fb ld $fb 1d64 00ff ld $ff 1d65 00ff ld $ff 1d66 00ff ld $ff 1d67 00bf ld $bf 1d68 00ab ld $ab 1d69 00e6 ld $e6 1d6a 00ff ld $ff 1d6b 00ff ld $ff 1d6c 00fa ld $fa 1d6d 00ff ld $ff 1d6e 00eb ld $eb 1d6f 00ea ld $ea 1d70 00ef ld $ef 1d71 00ef ld $ef 1d72 006a ld $6a 1d73 0014 ld $14 1d74 0004 ld $04 1d75 0055 ld $55 1d76 0065 ld $65 1d77 0095 ld $95 1d78 0096 ld $96 1d79 00aa ld $aa 1d7a 00e7 ld $e7 1d7b 00fa ld $fa 1d7c 00eb ld $eb 1d7d 00ff ld $ff 1d7e 00fe ld $fe 1d7f 009e ld $9e 1d80 00ba ld $ba 1d81 00b9 ld $b9 1d82 00af ld $af 1d83 00fb ld $fb 1d84 006a ld $6a 1d85 0066 ld $66 1d86 0055 ld $55 1d87 006a ld $6a 1d88 0065 ld $65 1d89 0055 ld $55 1d8a 009a ld $9a 1d8b 00af ld $af 1d8c 00ea ld $ea 1d8d 00e9 ld $e9 1d8e 00bf ld $bf 1d8f 00fb ld $fb 1d90 00ea ld $ea 1d91 00ff ld $ff 1d92 00ff ld $ff 1d93 00ff ld $ff * 9 times 1d9a 00bf ld $bf 1d9b 00ef ld $ef 1d9c 00ff ld $ff 1d9d 00ff ld $ff 1d9e 00ef ld $ef 1d9f 00fb ld $fb 1da0 00ff ld $ff 1da1 005b ld $5b 1da2 0055 ld $55 1da3 0050 ld $50 1da4 0054 ld $54 1da5 005a ld $5a 1da6 0069 ld $69 1da7 0069 ld $69 1da8 006a ld $6a 1da9 00ae ld $ae 1daa 00ab ld $ab 1dab 00ba ld $ba 1dac 00fe ld $fe 1dad 00ff ld $ff 1dae 00fa ld $fa 1daf 009b ld $9b 1db0 00a6 ld $a6 1db1 0079 ld $79 1db2 00ea ld $ea 1db3 00ab ld $ab 1db4 00aa ld $aa 1db5 0056 ld $56 1db6 0055 ld $55 1db7 0099 ld $99 1db8 0095 ld $95 1db9 0015 ld $15 1dba 00aa ld $aa 1dbb 00ee ld $ee 1dbc 00a6 ld $a6 1dbd 00aa ld $aa 1dbe 00ef ld $ef 1dbf 00ab ld $ab 1dc0 00ff ld $ff 1dc1 00ff ld $ff 1dc2 00ff ld $ff * 5 times 1dc5 00ef ld $ef 1dc6 00bf ld $bf 1dc7 00fe ld $fe 1dc8 00ff ld $ff 1dc9 00ff ld $ff 1dca 00ef ld $ef 1dcb 00ef ld $ef 1dcc 00fe ld $fe 1dcd 00bf ld $bf 1dce 009b ld $9b 1dcf 00ba ld $ba 1dd0 006e ld $6e 1dd1 0001 ld $01 1dd2 0041 ld $41 1dd3 0050 ld $50 1dd4 0055 ld $55 1dd5 0096 ld $96 1dd6 0055 ld $55 1dd7 00a9 ld $a9 1dd8 00b9 ld $b9 1dd9 00af ld $af 1dda 00ea ld $ea 1ddb 00be ld $be 1ddc 00ae ld $ae 1ddd 00bf ld $bf 1dde 00fa ld $fa 1ddf 00af ld $af 1de0 00a6 ld $a6 1de1 007e ld $7e 1de2 00de ld $de 1de3 00ab ld $ab 1de4 00aa ld $aa 1de5 009a ld $9a 1de6 0059 ld $59 1de7 0095 ld $95 1de8 0055 ld $55 1de9 0015 ld $15 1dea 005a ld $5a 1deb 009a ld $9a 1dec 00aa ld $aa 1ded 00a9 ld $a9 1dee 00ea ld $ea 1def 00ff ld $ff 1df0 00ff ld $ff 1df1 00ff ld $ff * 6 times 1df5 00fb ld $fb 1df6 00ff ld $ff 1df7 00bf ld $bf 1df8 00bf ld $bf 1df9 0000 ld $00 1dfa 0000 ld $00 1dfb fe00 bra ac ;+-----------------------------------+ 1dfc fcfd bra $1dfd ;| | 1dfd 1404 ld $04,y ;| Trampoline for page $1d00 lookups | 1dfe e068 jmp y,$68 ;| | 1dff c218 st [$18] ;+-----------------------------------+ 1e00 00fb ld $fb 1e01 00ff ld $ff 1e02 00af ld $af 1e03 00ff ld $ff 1e04 00ff ld $ff 1e05 00fb ld $fb 1e06 00bb ld $bb 1e07 005a ld $5a 1e08 0004 ld $04 1e09 0045 ld $45 1e0a 00a5 ld $a5 1e0b 0059 ld $59 1e0c 0056 ld $56 1e0d 00aa ld $aa 1e0e 00e6 ld $e6 1e0f 00ad ld $ad 1e10 00ee ld $ee 1e11 00eb ld $eb 1e12 00fa ld $fa 1e13 00ab ld $ab 1e14 00fb ld $fb 1e15 00ba ld $ba 1e16 00af ld $af 1e17 00a6 ld $a6 1e18 0069 ld $69 1e19 009e ld $9e 1e1a 00f6 ld $f6 1e1b 00aa ld $aa 1e1c 00aa ld $aa 1e1d 0055 ld $55 1e1e 0045 ld $45 1e1f 0056 ld $56 1e20 0054 ld $54 1e21 006a ld $6a 1e22 00ea ld $ea 1e23 00a6 ld $a6 1e24 00a5 ld $a5 1e25 00ab ld $ab 1e26 00ff ld $ff 1e27 00bf ld $bf 1e28 00fe ld $fe 1e29 00ff ld $ff 1e2a 00ff ld $ff 1e2b 00eb ld $eb 1e2c 00ef ld $ef 1e2d 00ef ld $ef 1e2e 00ff ld $ff 1e2f 00fb ld $fb 1e30 00ff ld $ff 1e31 00ef ld $ef 1e32 00ff ld $ff 1e33 00ff ld $ff 1e34 00ff ld $ff 1e35 00ff ld $ff 1e36 006a ld $6a 1e37 0010 ld $10 1e38 0054 ld $54 1e39 0095 ld $95 1e3a 0059 ld $59 1e3b 0059 ld $59 1e3c 0069 ld $69 1e3d 00aa ld $aa 1e3e 00a6 ld $a6 1e3f 00b9 ld $b9 1e40 00ab ld $ab 1e41 00bb ld $bb 1e42 00ba ld $ba 1e43 00ee ld $ee 1e44 00ab ld $ab 1e45 00fe ld $fe 1e46 00af ld $af 1e47 00a2 ld $a2 1e48 0069 ld $69 1e49 009a ld $9a 1e4a 00a7 ld $a7 1e4b 00ba ld $ba 1e4c 009a ld $9a 1e4d 0019 ld $19 1e4e 0045 ld $45 1e4f 0055 ld $55 1e50 00a8 ld $a8 1e51 0069 ld $69 1e52 009a ld $9a 1e53 00a6 ld $a6 1e54 00a9 ld $a9 1e55 0069 ld $69 1e56 00ea ld $ea 1e57 00a6 ld $a6 1e58 00a9 ld $a9 1e59 00eb ld $eb 1e5a 00fb ld $fb 1e5b 00fe ld $fe 1e5c 00ff ld $ff 1e5d 00ff ld $ff 1e5e 00ff ld $ff 1e5f 00ef ld $ef 1e60 00ff ld $ff 1e61 00ff ld $ff 1e62 00ff ld $ff * 6 times 1e66 0045 ld $45 1e67 0050 ld $50 1e68 0055 ld $55 1e69 005a ld $5a 1e6a 0065 ld $65 1e6b 00aa ld $aa 1e6c 0025 ld $25 1e6d 00aa ld $aa 1e6e 00e7 ld $e7 1e6f 00a9 ld $a9 1e70 009f ld $9f 1e71 00bb ld $bb 1e72 00ba ld $ba 1e73 00af ld $af 1e74 00fb ld $fb 1e75 00ba ld $ba 1e76 009a ld $9a 1e77 0092 ld $92 1e78 0069 ld $69 1e79 009a ld $9a 1e7a 00a7 ld $a7 1e7b 00a9 ld $a9 1e7c 006b ld $6b 1e7d 0065 ld $65 1e7e 0056 ld $56 1e7f 0061 ld $61 1e80 0065 ld $65 1e81 0069 ld $69 1e82 00aa ld $aa 1e83 00a2 ld $a2 1e84 0095 ld $95 1e85 006d ld $6d 1e86 00db ld $db 1e87 00ba ld $ba 1e88 00be ld $be 1e89 00ea ld $ea 1e8a 00bb ld $bb 1e8b 00be ld $be 1e8c 00ff ld $ff 1e8d 00ff ld $ff 1e8e 00af ld $af 1e8f 00bf ld $bf 1e90 00ff ld $ff 1e91 00ff ld $ff 1e92 00ff ld $ff 1e93 00ff ld $ff 1e94 00fe ld $fe 1e95 00ff ld $ff 1e96 0041 ld $41 1e97 0055 ld $55 1e98 0059 ld $59 1e99 0096 ld $96 1e9a 00aa ld $aa 1e9b 00ef ld $ef 1e9c 0069 ld $69 1e9d 00aa ld $aa 1e9e 00aa ld $aa 1e9f 0079 ld $79 1ea0 00ab ld $ab 1ea1 00ab ld $ab 1ea2 00bd ld $bd 1ea3 00aa ld $aa 1ea4 00fb ld $fb 1ea5 00ab ld $ab 1ea6 009b ld $9b 1ea7 0056 ld $56 1ea8 0039 ld $39 1ea9 009a ld $9a 1eaa 00e6 ld $e6 1eab 00aa ld $aa 1eac 00aa ld $aa 1ead 0055 ld $55 1eae 009a ld $9a 1eaf 0096 ld $96 1eb0 0066 ld $66 1eb1 0065 ld $65 1eb2 00aa ld $aa 1eb3 0092 ld $92 1eb4 00a9 ld $a9 1eb5 00ae ld $ae 1eb6 00ff ld $ff 1eb7 00ff ld $ff 1eb8 00ef ld $ef 1eb9 00ef ld $ef 1eba 00ea ld $ea 1ebb 00fe ld $fe 1ebc 00fb ld $fb 1ebd 00ff ld $ff 1ebe 00ff ld $ff 1ebf 00ef ld $ef 1ec0 00ff ld $ff 1ec1 00bf ld $bf 1ec2 00ff ld $ff 1ec3 00ff ld $ff 1ec4 00ff ld $ff 1ec5 00ff ld $ff 1ec6 0095 ld $95 1ec7 00a5 ld $a5 1ec8 0056 ld $56 1ec9 00ea ld $ea 1eca 00be ld $be 1ecb 00da ld $da 1ecc 006a ld $6a 1ecd 009a ld $9a 1ece 00f7 ld $f7 1ecf 0069 ld $69 1ed0 00ea ld $ea 1ed1 00b7 ld $b7 1ed2 00aa ld $aa 1ed3 00ee ld $ee 1ed4 00eb ld $eb 1ed5 00be ld $be 1ed6 009a ld $9a 1ed7 0096 ld $96 1ed8 0068 ld $68 1ed9 009a ld $9a 1eda 00a6 ld $a6 1edb 00a9 ld $a9 1edc 00aa ld $aa 1edd 0055 ld $55 1ede 0056 ld $56 1edf 005a ld $5a 1ee0 00a5 ld $a5 1ee1 0069 ld $69 1ee2 009a ld $9a 1ee3 0056 ld $56 1ee4 009a ld $9a 1ee5 00ed ld $ed 1ee6 00ef ld $ef 1ee7 00af ld $af 1ee8 00fe ld $fe 1ee9 00ee ld $ee 1eea 00ba ld $ba 1eeb 00be ld $be 1eec 00ff ld $ff 1eed 00ea ld $ea 1eee 00fa ld $fa 1eef 00ff ld $ff 1ef0 00fe ld $fe 1ef1 00ff ld $ff 1ef2 00fb ld $fb 1ef3 00ff ld $ff 1ef4 00ff ld $ff 1ef5 00ff ld $ff 1ef6 0056 ld $56 1ef7 0066 ld $66 1ef8 00a9 ld $a9 1ef9 0000 ld $00 1efa 0000 ld $00 1efb fe00 bra ac ;+-----------------------------------+ 1efc fcfd bra $1efd ;| | 1efd 1404 ld $04,y ;| Trampoline for page $1e00 lookups | 1efe e068 jmp y,$68 ;| | 1eff c218 st [$18] ;+-----------------------------------+ 1f00 00ff ld $ff 1f01 00ff ld $ff 1f02 00eb ld $eb 1f03 006a ld $6a 1f04 00aa ld $aa 1f05 00ea ld $ea 1f06 0069 ld $69 1f07 009a ld $9a 1f08 00ab ld $ab 1f09 00a9 ld $a9 1f0a 00eb ld $eb 1f0b 00eb ld $eb 1f0c 006e ld $6e 1f0d 005a ld $5a 1f0e 00a1 ld $a1 1f0f 0025 ld $25 1f10 009a ld $9a 1f11 00a7 ld $a7 1f12 0065 ld $65 1f13 00aa ld $aa 1f14 0025 ld $25 1f15 0059 ld $59 1f16 009a ld $9a 1f17 0095 ld $95 1f18 0059 ld $59 1f19 009a ld $9a 1f1a 0092 ld $92 1f1b 00aa ld $aa 1f1c 006e ld $6e 1f1d 00eb ld $eb 1f1e 00a6 ld $a6 1f1f 00aa ld $aa 1f20 00eb ld $eb 1f21 00bb ld $bb 1f22 00ae ld $ae 1f23 00ee ld $ee 1f24 00a6 ld $a6 1f25 00be ld $be 1f26 00bf ld $bf 1f27 00ff ld $ff 1f28 00fe ld $fe 1f29 00fe ld $fe 1f2a 00ff ld $ff 1f2b 00ff ld $ff 1f2c 00ff ld $ff 1f2d 00a9 ld $a9 1f2e 00b5 ld $b5 1f2f 00ff ld $ff 1f30 00ff ld $ff 1f31 00af ld $af 1f32 00eb ld $eb 1f33 007b ld $7b 1f34 00ea ld $ea 1f35 00a7 ld $a7 1f36 007a ld $7a 1f37 009a ld $9a 1f38 00b7 ld $b7 1f39 007a ld $7a 1f3a 00aa ld $aa 1f3b 00fe ld $fe 1f3c 006a ld $6a 1f3d 005a ld $5a 1f3e 00a5 ld $a5 1f3f 0064 ld $64 1f40 009a ld $9a 1f41 00a6 ld $a6 1f42 0059 ld $59 1f43 00ea ld $ea 1f44 005a ld $5a 1f45 0055 ld $55 1f46 0056 ld $56 1f47 0066 ld $66 1f48 0065 ld $65 1f49 004a ld $4a 1f4a 0056 ld $56 1f4b 00aa ld $aa 1f4c 00be ld $be 1f4d 00eb ld $eb 1f4e 00ba ld $ba 1f4f 00ad ld $ad 1f50 00eb ld $eb 1f51 00fb ld $fb 1f52 00be ld $be 1f53 00eb ld $eb 1f54 00fb ld $fb 1f55 00ff ld $ff 1f56 00ff ld $ff 1f57 00ff ld $ff * 6 times 1f5b 00ae ld $ae 1f5c 00ff ld $ff 1f5d 0000 ld $00 1f5e 0000 ld $00 1f5f 0000 ld $00 1f60 00aa ld $aa 1f61 00ae ld $ae 1f62 00aa ld $aa 1f63 00a5 ld $a5 1f64 0099 ld $99 1f65 009b ld $9b 1f66 00a9 ld $a9 1f67 00a9 ld $a9 1f68 0096 ld $96 1f69 006a ld $6a 1f6a 0069 ld $69 1f6b 0095 ld $95 1f6c 0096 ld $96 1f6d 006a ld $6a 1f6e 00aa ld $aa 1f6f 00a6 ld $a6 1f70 005a ld $5a 1f71 0099 ld $99 1f72 009a ld $9a 1f73 00a9 ld $a9 1f74 00aa ld $aa 1f75 00aa ld $aa 1f76 00a5 ld $a5 1f77 009a ld $9a 1f78 00aa ld $aa 1f79 00a5 ld $a5 1f7a 005a ld $5a 1f7b 00aa ld $aa 1f7c 00a5 ld $a5 1f7d 00aa ld $aa 1f7e 00a6 ld $a6 1f7f 00aa ld $aa 1f80 00aa ld $aa 1f81 00a6 ld $a6 1f82 0056 ld $56 1f83 0059 ld $59 1f84 006a ld $6a 1f85 0065 ld $65 1f86 0056 ld $56 1f87 0066 ld $66 1f88 0055 ld $55 1f89 0056 ld $56 1f8a 0065 ld $65 1f8b 0069 ld $69 1f8c 0096 ld $96 1f8d 0066 ld $66 1f8e 00a9 ld $a9 1f8f 00aa ld $aa 1f90 006a ld $6a 1f91 00ae ld $ae 1f92 0096 ld $96 1f93 00b9 ld $b9 1f94 005a ld $5a 1f95 0096 ld $96 1f96 0066 ld $66 1f97 00a9 ld $a9 1f98 0096 ld $96 1f99 00a6 ld $a6 1f9a 0099 ld $99 1f9b 009a ld $9a 1f9c 00a9 ld $a9 1f9d 00a5 ld $a5 1f9e 005a ld $5a 1f9f 00a9 ld $a9 1fa0 00aa ld $aa 1fa1 00aa ld $aa 1fa2 00aa ld $aa * 11 times 1fab 00a6 ld $a6 1fac 006a ld $6a 1fad 00a9 ld $a9 1fae 00aa ld $aa 1faf 00a5 ld $a5 1fb0 005a ld $5a 1fb1 005a ld $5a 1fb2 0065 ld $65 1fb3 0055 ld $55 1fb4 0096 ld $96 1fb5 0099 ld $99 1fb6 00aa ld $aa 1fb7 0099 ld $99 1fb8 00a9 ld $a9 1fb9 0096 ld $96 1fba 006a ld $6a 1fbb 0055 ld $55 1fbc 0056 ld $56 1fbd 0069 ld $69 1fbe 0059 ld $59 1fbf 00aa ld $aa 1fc0 00ba ld $ba 1fc1 006a ld $6a 1fc2 0097 ld $97 1fc3 0066 ld $66 1fc4 0059 ld $59 1fc5 009a ld $9a 1fc6 0069 ld $69 1fc7 0069 ld $69 1fc8 0096 ld $96 1fc9 00aa ld $aa 1fca 006a ld $6a 1fcb 0069 ld $69 1fcc 0096 ld $96 1fcd 005a ld $5a 1fce 00aa ld $aa 1fcf 00aa ld $aa 1fd0 00aa ld $aa * 5 times 1fd3 00a9 ld $a9 1fd4 00aa ld $aa 1fd5 00aa ld $aa 1fd6 00aa ld $aa * 5 times 1fd9 0065 ld $65 1fda 0055 ld $55 1fdb 0085 ld $85 1fdc 0095 ld $95 1fdd 006a ld $6a 1fde 0056 ld $56 1fdf 0055 ld $55 1fe0 0059 ld $59 1fe1 00a5 ld $a5 1fe2 00a5 ld $a5 1fe3 0056 ld $56 1fe4 00aa ld $aa 1fe5 00aa ld $aa 1fe6 009a ld $9a 1fe7 0066 ld $66 1fe8 005a ld $5a 1fe9 0095 ld $95 1fea 0095 ld $95 1feb 0099 ld $99 1fec 0096 ld $96 1fed 00a6 ld $a6 1fee 005a ld $5a 1fef 009a ld $9a 1ff0 00aa ld $aa 1ff1 009e ld $9e 1ff2 009a ld $9a 1ff3 0069 ld $69 1ff4 0059 ld $59 1ff5 00aa ld $aa 1ff6 00a5 ld $a5 1ff7 0059 ld $59 1ff8 00aa ld $aa 1ff9 0000 ld $00 1ffa 0000 ld $00 1ffb fe00 bra ac ;+-----------------------------------+ 1ffc fcfd bra $1ffd ;| | 1ffd 1404 ld $04,y ;| Trampoline for page $1f00 lookups | 1ffe e068 jmp y,$68 ;| | 1fff c218 st [$18] ;+-----------------------------------+ 2000 00aa ld $aa 2001 00aa ld $aa 2002 0096 ld $96 2003 00aa ld $aa 2004 00a5 ld $a5 2005 006a ld $6a 2006 00a6 ld $a6 2007 006a ld $6a 2008 00aa ld $aa 2009 00aa ld $aa 200a 006a ld $6a 200b 0059 ld $59 200c 0095 ld $95 200d 00a5 ld $a5 200e 005a ld $5a 200f 0056 ld $56 2010 0055 ld $55 2011 0059 ld $59 2012 00aa ld $aa 2013 00aa ld $aa 2014 009a ld $9a 2015 00aa ld $aa 2016 00aa ld $aa 2017 00aa ld $aa * 7 times 201c 00a9 ld $a9 201d 00a6 ld $a6 201e 00aa ld $aa 201f 00aa ld $aa 2020 00aa ld $aa 2021 0065 ld $65 2022 0069 ld $69 2023 0095 ld $95 2024 0055 ld $55 2025 00a9 ld $a9 2026 00aa ld $aa 2027 00ba ld $ba 2028 005a ld $5a 2029 0096 ld $96 202a 006a ld $6a 202b 0059 ld $59 202c 009a ld $9a 202d 00a5 ld $a5 202e 00aa ld $aa 202f 00ea ld $ea 2030 00aa ld $aa 2031 00a9 ld $a9 2032 00ab ld $ab 2033 00ba ld $ba 2034 00aa ld $aa 2035 00ea ld $ea 2036 00aa ld $aa 2037 00aa ld $aa 2038 00ea ld $ea 2039 00aa ld $aa 203a 00aa ld $aa 203b 00aa ld $aa 203c 0096 ld $96 203d 006a ld $6a 203e 00aa ld $aa 203f 00aa ld $aa 2040 00aa ld $aa * 5 times 2043 00ae ld $ae 2044 00aa ld $aa 2045 00ea ld $ea 2046 00ae ld $ae 2047 00aa ld $aa 2048 00ba ld $ba 2049 00aa ld $aa 204a 00ab ld $ab 204b 00aa ld $aa 204c 00aa ld $aa 204d 00aa ld $aa 204e 00aa ld $aa 204f 0059 ld $59 2050 009a ld $9a 2051 0055 ld $55 2052 0059 ld $59 2053 0096 ld $96 2054 006a ld $6a 2055 0069 ld $69 2056 00a6 ld $a6 2057 00a9 ld $a9 2058 006a ld $6a 2059 00ab ld $ab 205a 0065 ld $65 205b 00a9 ld $a9 205c 0096 ld $96 205d 006a ld $6a 205e 00a9 ld $a9 205f 00aa ld $aa 2060 00aa ld $aa 2061 00ae ld $ae 2062 00fa ld $fa 2063 00aa ld $aa 2064 00af ld $af 2065 00fe ld $fe 2066 00ea ld $ea 2067 00ef ld $ef 2068 00af ld $af 2069 00fe ld $fe 206a 00ea ld $ea 206b 00ab ld $ab 206c 00ba ld $ba 206d 00aa ld $aa 206e 00aa ld $aa 206f 00aa ld $aa 2070 00aa ld $aa 2071 00fe ld $fe 2072 00ba ld $ba 2073 00ba ld $ba 2074 00aa ld $aa 2075 007a ld $7a 2076 00aa ld $aa 2077 00eb ld $eb 2078 00ea ld $ea 2079 00af ld $af 207a 00ae ld $ae 207b 00fa ld $fa 207c 00ab ld $ab 207d 00ab ld $ab 207e 006a ld $6a 207f 006a ld $6a 2080 00a5 ld $a5 2081 00a5 ld $a5 2082 0059 ld $59 2083 0055 ld $55 2084 00a5 ld $a5 2085 005a ld $5a 2086 00aa ld $aa 2087 00aa ld $aa 2088 009d ld $9d 2089 0096 ld $96 208a 00a5 ld $a5 208b 0059 ld $59 208c 0096 ld $96 208d 00a5 ld $a5 208e 0099 ld $99 208f 00aa ld $aa 2090 00aa ld $aa 2091 00aa ld $aa 2092 00ae ld $ae 2093 00ea ld $ea 2094 00fe ld $fe 2095 00aa ld $aa 2096 00b9 ld $b9 2097 009a ld $9a 2098 00eb ld $eb 2099 00aa ld $aa 209a 00aa ld $aa 209b 00fe ld $fe 209c 00aa ld $aa 209d 00af ld $af 209e 00ea ld $ea 209f 00ea ld $ea 20a0 00aa ld $aa 20a1 00ab ld $ab 20a2 00aa ld $aa 20a3 00aa ld $aa 20a4 00e6 ld $e6 20a5 0075 ld $75 20a6 009a ld $9a 20a7 00d7 ld $d7 20a8 00aa ld $aa 20a9 00aa ld $aa 20aa 00aa ld $aa * 6 times 20ae 0066 ld $66 20af 0065 ld $65 20b0 00a6 ld $a6 20b1 0056 ld $56 20b2 0059 ld $59 20b3 0096 ld $96 20b4 0066 ld $66 20b5 006a ld $6a 20b6 0096 ld $96 20b7 0069 ld $69 20b8 0059 ld $59 20b9 00aa ld $aa 20ba 0065 ld $65 20bb 0059 ld $59 20bc 0056 ld $56 20bd 0065 ld $65 20be 00a9 ld $a9 20bf 00ea ld $ea 20c0 00aa ld $aa 20c1 00ea ld $ea 20c2 00ab ld $ab 20c3 00aa ld $aa 20c4 00aa ld $aa 20c5 0097 ld $97 20c6 00b8 ld $b8 20c7 009e ld $9e 20c8 00e6 ld $e6 20c9 00e9 ld $e9 20ca 00aa ld $aa 20cb 00aa ld $aa 20cc 00fe ld $fe 20cd 00ae ld $ae 20ce 00ee ld $ee 20cf 00aa ld $aa 20d0 00ae ld $ae 20d1 00a6 ld $a6 20d2 00a6 ld $a6 20d3 00bf ld $bf 20d4 00a6 ld $a6 20d5 0075 ld $75 20d6 009e ld $9e 20d7 0093 ld $93 20d8 00aa ld $aa 20d9 005a ld $5a 20da 0095 ld $95 20db 00aa ld $aa 20dc 00aa ld $aa 20dd 009a ld $9a 20de 006a ld $6a 20df 0066 ld $66 20e0 0056 ld $56 20e1 0065 ld $65 20e2 00a9 ld $a9 20e3 009a ld $9a 20e4 0055 ld $55 20e5 00a9 ld $a9 20e6 00aa ld $aa 20e7 00aa ld $aa 20e8 00ae ld $ae 20e9 0096 ld $96 20ea 006a ld $6a 20eb 0059 ld $59 20ec 009a ld $9a 20ed 0055 ld $55 20ee 0069 ld $69 20ef 0095 ld $95 20f0 009a ld $9a 20f1 00aa ld $aa 20f2 009a ld $9a 20f3 00a6 ld $a6 20f4 00fa ld $fa 20f5 00ea ld $ea 20f6 0035 ld $35 20f7 005e ld $5e 20f8 00a7 ld $a7 20f9 0000 ld $00 20fa 0000 ld $00 20fb fe00 bra ac ;+-----------------------------------+ 20fc fcfd bra $20fd ;| | 20fd 1404 ld $04,y ;| Trampoline for page $2000 lookups | 20fe e068 jmp y,$68 ;| | 20ff c218 st [$18] ;+-----------------------------------+ 2100 00aa ld $aa 2101 00af ld $af 2102 009a ld $9a 2103 00fe ld $fe 2104 00af ld $af 2105 00ea ld $ea 2106 00ea ld $ea 2107 00ae ld $ae 2108 00aa ld $aa 2109 00aa ld $aa 210a 00aa ld $aa 210b 00af ld $af 210c 0039 ld $39 210d 005d ld $5d 210e 00ab ld $ab 210f 00aa ld $aa 2110 006a ld $6a 2111 005a ld $5a 2112 00aa ld $aa 2113 0059 ld $59 2114 0069 ld $69 2115 0065 ld $65 2116 0069 ld $69 2117 00a6 ld $a6 2118 0066 ld $66 2119 0055 ld $55 211a 0056 ld $56 211b 00aa ld $aa 211c 0059 ld $59 211d 00aa ld $aa 211e 0075 ld $75 211f 00a9 ld $a9 2120 0097 ld $97 2121 00a9 ld $a9 2122 0059 ld $59 2123 00a6 ld $a6 2124 00a5 ld $a5 2125 005a ld $5a 2126 006a ld $6a 2127 00a5 ld $a5 2128 0069 ld $69 2129 006a ld $6a 212a 0095 ld $95 212b 00a9 ld $a9 212c 00bf ld $bf 212d 00aa ld $aa 212e 009e ld $9e 212f 00eb ld $eb 2130 00bf ld $bf 2131 00ae ld $ae 2132 00aa ld $aa 2133 00aa ld $aa 2134 00ee ld $ee 2135 00ab ld $ab 2136 00ba ld $ba 2137 009a ld $9a 2138 009a ld $9a 2139 00aa ld $aa 213a 00aa ld $aa 213b 00bf ld $bf 213c 00fa ld $fa 213d 00ab ld $ab 213e 00aa ld $aa 213f 006a ld $6a 2140 0059 ld $59 2141 00a9 ld $a9 2142 00aa ld $aa 2143 00a6 ld $a6 2144 009a ld $9a 2145 00a5 ld $a5 2146 0055 ld $55 2147 0095 ld $95 2148 0055 ld $55 2149 0059 ld $59 214a 0095 ld $95 214b 00a5 ld $a5 214c 005a ld $5a 214d 00aa ld $aa 214e 00aa ld $aa 214f 005a ld $5a 2150 009a ld $9a 2151 0065 ld $65 2152 0059 ld $59 2153 0096 ld $96 2154 0066 ld $66 2155 0059 ld $59 2156 00aa ld $aa 2157 0095 ld $95 2158 00aa ld $aa 2159 00aa ld $aa 215a 0066 ld $66 215b 0066 ld $66 215c 00aa ld $aa 215d 00fa ld $fa 215e 00ab ld $ab 215f 00be ld $be 2160 00aa ld $aa 2161 0055 ld $55 2162 00aa ld $aa 2163 00aa ld $aa 2164 00aa ld $aa 2165 00ab ld $ab 2166 007a ld $7a 2167 00aa ld $aa 2168 00ea ld $ea 2169 00aa ld $aa 216a 00a5 ld $a5 216b 009a ld $9a 216c 00aa ld $aa 216d 00aa ld $aa 216e 005a ld $5a 216f 0095 ld $95 2170 00a6 ld $a6 2171 00aa ld $aa 2172 0066 ld $66 2173 006a ld $6a 2174 006a ld $6a 2175 0055 ld $55 2176 0065 ld $65 2177 0056 ld $56 2178 00a5 ld $a5 2179 0055 ld $55 217a 009a ld $9a 217b 0065 ld $65 217c 00a9 ld $a9 217d 0096 ld $96 217e 00a9 ld $a9 217f 005e ld $5e 2180 009a ld $9a 2181 0069 ld $69 2182 0069 ld $69 2183 0096 ld $96 2184 0065 ld $65 2185 0059 ld $59 2186 0095 ld $95 2187 006a ld $6a 2188 0065 ld $65 2189 0056 ld $56 218a 00aa ld $aa 218b 00a9 ld $a9 218c 00aa ld $aa 218d 0096 ld $96 218e 006a ld $6a 218f 005a ld $5a 2190 00a9 ld $a9 2191 00a5 ld $a5 2192 00aa ld $aa 2193 00bf ld $bf 2194 00aa ld $aa 2195 00a7 ld $a7 2196 0069 ld $69 2197 006a ld $6a 2198 00a9 ld $a9 2199 00aa ld $aa 219a 006a ld $6a 219b 00a5 ld $a5 219c 0096 ld $96 219d 005a ld $5a 219e 0095 ld $95 219f 00aa ld $aa 21a0 006a ld $6a 21a1 00aa ld $aa 21a2 00aa ld $aa 21a3 00a9 ld $a9 21a4 0095 ld $95 21a5 006a ld $6a 21a6 0059 ld $59 21a7 0095 ld $95 21a8 0055 ld $55 21a9 0059 ld $59 21aa 0095 ld $95 21ab 0095 ld $95 21ac 005a ld $5a 21ad 009a ld $9a 21ae 007a ld $7a 21af 00a9 ld $a9 21b0 00a6 ld $a6 21b1 0065 ld $65 21b2 0099 ld $99 21b3 0095 ld $95 21b4 00a6 ld $a6 21b5 005a ld $5a 21b6 009a ld $9a 21b7 0055 ld $55 21b8 00aa ld $aa 21b9 00a9 ld $a9 21ba 0056 ld $56 21bb 00aa ld $aa 21bc 00aa ld $aa 21bd 00a9 ld $a9 21be 0099 ld $99 21bf 00aa ld $aa 21c0 00aa ld $aa 21c1 00aa ld $aa 21c2 00aa ld $aa 21c3 006a ld $6a 21c4 00aa ld $aa 21c5 00a6 ld $a6 21c6 00a9 ld $a9 21c7 006e ld $6e 21c8 0099 ld $99 21c9 00aa ld $aa 21ca 006a ld $6a 21cb 0059 ld $59 21cc 0056 ld $56 21cd 00a5 ld $a5 21ce 00aa ld $aa 21cf 00aa ld $aa 21d0 00a9 ld $a9 21d1 0095 ld $95 21d2 006a ld $6a 21d3 00a5 ld $a5 21d4 009a ld $9a 21d5 0095 ld $95 21d6 00a9 ld $a9 21d7 0056 ld $56 21d8 00a5 ld $a5 21d9 0055 ld $55 21da 0056 ld $56 21db 0066 ld $66 21dc 0059 ld $59 21dd 00aa ld $aa 21de 007a ld $7a 21df 005a ld $5a 21e0 009a ld $9a 21e1 00a5 ld $a5 21e2 0059 ld $59 21e3 00aa ld $aa 21e4 0065 ld $65 21e5 0055 ld $55 21e6 0056 ld $56 21e7 00a5 ld $a5 21e8 006a ld $6a 21e9 0096 ld $96 21ea 00aa ld $aa 21eb 00aa ld $aa 21ec 00ae ld $ae 21ed 00aa ld $aa 21ee 00a6 ld $a6 21ef 006a ld $6a 21f0 0096 ld $96 21f1 00a5 ld $a5 21f2 00ae ld $ae 21f3 0056 ld $56 21f4 00aa ld $aa 21f5 00a7 ld $a7 21f6 0065 ld $65 21f7 00aa ld $aa 21f8 00ba ld $ba 21f9 0000 ld $00 21fa 0000 ld $00 21fb fe00 bra ac ;+-----------------------------------+ 21fc fcfd bra $21fd ;| | 21fd 1404 ld $04,y ;| Trampoline for page $2100 lookups | 21fe e068 jmp y,$68 ;| | 21ff c218 st [$18] ;+-----------------------------------+ 2200 00aa ld $aa 2201 0050 ld $50 2202 0014 ld $14 2203 0085 ld $85 2204 0061 ld $61 2205 0069 ld $69 2206 00aa ld $aa 2207 00aa ld $aa 2208 00aa ld $aa 2209 00a6 ld $a6 220a 009a ld $9a 220b 009a ld $9a 220c 0055 ld $55 220d 0055 ld $55 220e 0055 ld $55 220f 0055 ld $55 2210 0059 ld $59 2211 0095 ld $95 2212 0095 ld $95 2213 005a ld $5a 2214 00aa ld $aa 2215 00a6 ld $a6 2216 00aa ld $aa 2217 0096 ld $96 2218 00a5 ld $a5 2219 005a ld $5a 221a 0096 ld $96 221b 0065 ld $65 221c 00a9 ld $a9 221d 0096 ld $96 221e 006a ld $6a 221f 00a9 ld $a9 2220 006a ld $6a 2221 00aa ld $aa 2222 00a9 ld $a9 2223 00aa ld $aa 2224 00aa ld $aa 2225 0061 ld $61 2226 0008 ld $08 2227 0045 ld $45 2228 0051 ld $51 2229 00a9 ld $a9 222a 0069 ld $69 222b 00aa ld $aa 222c 0067 ld $67 222d 0039 ld $39 222e 005a ld $5a 222f 00ee ld $ee 2230 005a ld $5a 2231 0011 ld $11 2232 0019 ld $19 2233 0096 ld $96 2234 0065 ld $65 2235 0058 ld $58 2236 009a ld $9a 2237 006a ld $6a 2238 00a9 ld $a9 2239 00aa ld $aa 223a 0059 ld $59 223b 0069 ld $69 223c 00a5 ld $a5 223d 0059 ld $59 223e 0056 ld $56 223f 0066 ld $66 2240 0055 ld $55 2241 005a ld $5a 2242 00a5 ld $a5 2243 006a ld $6a 2244 0096 ld $96 2245 007a ld $7a 2246 0099 ld $99 2247 009a ld $9a 2248 0069 ld $69 2249 0059 ld $59 224a 0096 ld $96 224b 006a ld $6a 224c 0055 ld $55 224d 00aa ld $aa 224e 0065 ld $65 224f 0066 ld $66 2250 00aa ld $aa 2251 00aa ld $aa 2252 00ba ld $ba 2253 006a ld $6a 2254 0096 ld $96 2255 0065 ld $65 2256 0015 ld $15 2257 0095 ld $95 2258 0051 ld $51 2259 00a9 ld $a9 225a 0065 ld $65 225b 009a ld $9a 225c 0096 ld $96 225d 0078 ld $78 225e 009a ld $9a 225f 00aa ld $aa 2260 0055 ld $55 2261 0050 ld $50 2262 0015 ld $15 2263 0041 ld $41 2264 0061 ld $61 2265 0058 ld $58 2266 0096 ld $96 2267 00aa ld $aa 2268 009a ld $9a 2269 00aa ld $aa 226a 00aa ld $aa 226b 0096 ld $96 226c 006a ld $6a 226d 0065 ld $65 226e 0096 ld $96 226f 0055 ld $55 2270 0059 ld $59 2271 0099 ld $99 2272 0055 ld $55 2273 0059 ld $59 2274 00aa ld $aa 2275 00aa ld $aa 2276 005a ld $5a 2277 00aa ld $aa 2278 00a5 ld $a5 2279 005a ld $5a 227a 00aa ld $aa 227b 0065 ld $65 227c 00a9 ld $a9 227d 0096 ld $96 227e 00a6 ld $a6 227f 00aa ld $aa 2280 00aa ld $aa 2281 00aa ld $aa 2282 00aa ld $aa 2283 005a ld $5a 2284 0086 ld $86 2285 0061 ld $61 2286 0015 ld $15 2287 0041 ld $41 2288 0051 ld $51 2289 00e5 ld $e5 228a 0069 ld $69 228b 009a ld $9a 228c 00a7 ld $a7 228d 0028 ld $28 228e 005e ld $5e 228f 00a6 ld $a6 2290 0095 ld $95 2291 0051 ld $51 2292 0009 ld $09 2293 0085 ld $85 2294 0065 ld $65 2295 0055 ld $55 2296 0086 ld $86 2297 00a5 ld $a5 2298 00a9 ld $a9 2299 00a6 ld $a6 229a 006a ld $6a 229b 00a6 ld $a6 229c 0056 ld $56 229d 0059 ld $59 229e 0055 ld $55 229f 0066 ld $66 22a0 0055 ld $55 22a1 0096 ld $96 22a2 0066 ld $66 22a3 00a9 ld $a9 22a4 009a ld $9a 22a5 00a9 ld $a9 22a6 00aa ld $aa 22a7 00a7 ld $a7 22a8 0066 ld $66 22a9 0059 ld $59 22aa 00a6 ld $a6 22ab 0066 ld $66 22ac 00a9 ld $a9 22ad 0096 ld $96 22ae 00a9 ld $a9 22af 00aa ld $aa 22b0 009a ld $9a 22b1 00aa ld $aa 22b2 0066 ld $66 22b3 0058 ld $58 22b4 0096 ld $96 22b5 0050 ld $50 22b6 0058 ld $58 22b7 0045 ld $45 22b8 0054 ld $54 22b9 00a5 ld $a5 22ba 0028 ld $28 22bb 009a ld $9a 22bc 00a7 ld $a7 22bd 0028 ld $28 22be 008e ld $8e 22bf 00a6 ld $a6 22c0 0056 ld $56 22c1 0054 ld $54 22c2 0004 ld $04 22c3 0085 ld $85 22c4 0065 ld $65 22c5 0018 ld $18 22c6 0086 ld $86 22c7 0066 ld $66 22c8 0066 ld $66 22c9 0056 ld $56 22ca 0066 ld $66 22cb 006a ld $6a 22cc 00a5 ld $a5 22cd 0055 ld $55 22ce 009a ld $9a 22cf 0055 ld $55 22d0 0069 ld $69 22d1 0055 ld $55 22d2 00a9 ld $a9 22d3 0055 ld $55 22d4 00aa ld $aa 22d5 0066 ld $66 22d6 006a ld $6a 22d7 00aa ld $aa 22d8 00a9 ld $a9 22d9 00a9 ld $a9 22da 0096 ld $96 22db 0065 ld $65 22dc 00a5 ld $a5 22dd 009a ld $9a 22de 006a ld $6a 22df 0059 ld $59 22e0 00aa ld $aa 22e1 00aa ld $aa 22e2 0065 ld $65 22e3 0014 ld $14 22e4 0056 ld $56 22e5 0051 ld $51 22e6 0005 ld $05 22e7 0055 ld $55 22e8 0051 ld $51 22e9 00e5 ld $e5 22ea 0068 ld $68 22eb 008e ld $8e 22ec 00a2 ld $a2 22ed 0038 ld $38 22ee 008a ld $8a 22ef 00a6 ld $a6 22f0 0045 ld $45 22f1 0011 ld $11 22f2 0015 ld $15 22f3 0056 ld $56 22f4 0060 ld $60 22f5 0014 ld $14 22f6 0056 ld $56 22f7 0065 ld $65 22f8 00a9 ld $a9 22f9 0000 ld $00 22fa 0000 ld $00 22fb fe00 bra ac ;+-----------------------------------+ 22fc fcfd bra $22fd ;| | 22fd 1404 ld $04,y ;| Trampoline for page $2200 lookups | 22fe e068 jmp y,$68 ;| | 22ff c218 st [$18] ;+-----------------------------------+ 2300 00a6 ld $a6 2301 0055 ld $55 2302 005a ld $5a 2303 0065 ld $65 2304 0065 ld $65 2305 0095 ld $95 2306 0055 ld $55 2307 0055 ld $55 2308 0056 ld $56 2309 0066 ld $66 230a 0059 ld $59 230b 00aa ld $aa 230c 00ba ld $ba 230d 00aa ld $aa 230e 0097 ld $97 230f 006a ld $6a 2310 0099 ld $99 2311 009a ld $9a 2312 00a9 ld $a9 2313 0099 ld $99 2314 0096 ld $96 2315 0095 ld $95 2316 00a5 ld $a5 2317 005a ld $5a 2318 00aa ld $aa 2319 002a ld $2a 231a 0014 ld $14 231b 0096 ld $96 231c 0051 ld $51 231d 0058 ld $58 231e 0041 ld $41 231f 0051 ld $51 2320 00a2 ld $a2 2321 0028 ld $28 2322 009a ld $9a 2323 00a3 ld $a3 2324 0029 ld $29 2325 004e ld $4e 2326 00a6 ld $a6 2327 0055 ld $55 2328 0050 ld $50 2329 0054 ld $54 232a 0046 ld $46 232b 0021 ld $21 232c 0058 ld $58 232d 0096 ld $96 232e 0061 ld $61 232f 0059 ld $59 2330 006a ld $6a 2331 00a5 ld $a5 2332 0055 ld $55 2333 005a ld $5a 2334 0055 ld $55 2335 0056 ld $56 2336 0065 ld $65 2337 0065 ld $65 2338 0096 ld $96 2339 006a ld $6a 233a 00a9 ld $a9 233b 009a ld $9a 233c 006a ld $6a 233d 006a ld $6a 233e 00aa ld $aa 233f 00a5 ld $a5 2340 005a ld $5a 2341 00aa ld $aa 2342 0065 ld $65 2343 0069 ld $69 2344 00a6 ld $a6 2345 0066 ld $66 2346 005a ld $5a 2347 00a9 ld $a9 2348 009a ld $9a 2349 0065 ld $65 234a 0014 ld $14 234b 0081 ld $81 234c 0015 ld $15 234d 0018 ld $18 234e 0055 ld $55 234f 0050 ld $50 2350 00e1 ld $e1 2351 0068 ld $68 2352 008e ld $8e 2353 00a2 ld $a2 2354 0038 ld $38 2355 008e ld $8e 2356 00a6 ld $a6 2357 0055 ld $55 2358 0011 ld $11 2359 0015 ld $15 235a 0081 ld $81 235b 0051 ld $51 235c 0018 ld $18 235d 0081 ld $81 235e 0061 ld $61 235f 0069 ld $69 2360 0095 ld $95 2361 0055 ld $55 2362 0099 ld $99 2363 0095 ld $95 2364 0059 ld $59 2365 0059 ld $59 2366 0065 ld $65 2367 0055 ld $55 2368 005a ld $5a 2369 00a5 ld $a5 236a 0099 ld $99 236b 009a ld $9a 236c 00aa ld $aa 236d 00aa ld $aa 236e 00e6 ld $e6 236f 006a ld $6a 2370 00a9 ld $a9 2371 0096 ld $96 2372 006a ld $6a 2373 005a ld $5a 2374 0099 ld $99 2375 0099 ld $99 2376 00a9 ld $a9 2377 00aa ld $aa 2378 0056 ld $56 2379 0065 ld $65 237a 0058 ld $58 237b 0085 ld $85 237c 0055 ld $55 237d 0054 ld $54 237e 0046 ld $46 237f 0091 ld $91 2380 00a2 ld $a2 2381 0028 ld $28 2382 008e ld $8e 2383 00a2 ld $a2 2384 0029 ld $29 2385 008e ld $8e 2386 0066 ld $66 2387 0051 ld $51 2388 0011 ld $11 2389 0018 ld $18 238a 0055 ld $55 238b 0060 ld $60 238c 0015 ld $15 238d 0086 ld $86 238e 0051 ld $51 238f 0098 ld $98 2390 0096 ld $96 2391 006a ld $6a 2392 0055 ld $55 2393 0055 ld $55 2394 0055 ld $55 2395 0095 ld $95 2396 0095 ld $95 2397 0056 ld $56 2398 0056 ld $56 2399 0066 ld $66 239a 0066 ld $66 239b 00aa ld $aa 239c 006a ld $6a 239d 00a9 ld $a9 239e 00aa ld $aa 239f 0065 ld $65 23a0 006a ld $6a 23a1 00a6 ld $a6 23a2 0066 ld $66 23a3 0055 ld $55 23a4 00a6 ld $a6 23a5 00a6 ld $a6 23a6 00aa ld $aa 23a7 00aa ld $aa 23a8 009a ld $9a 23a9 0061 ld $61 23aa 0004 ld $04 23ab 0085 ld $85 23ac 0011 ld $11 23ad 0015 ld $15 23ae 0041 ld $41 23af 0055 ld $55 23b0 00a1 ld $a1 23b1 0039 ld $39 23b2 008e ld $8e 23b3 0096 ld $96 23b4 0028 ld $28 23b5 008e ld $8e 23b6 00a7 ld $a7 23b7 0045 ld $45 23b8 0055 ld $55 23b9 0004 ld $04 23ba 0085 ld $85 23bb 0055 ld $55 23bc 0004 ld $04 23bd 0086 ld $86 23be 0065 ld $65 23bf 0058 ld $58 23c0 006a ld $6a 23c1 00a9 ld $a9 23c2 0055 ld $55 23c3 0066 ld $66 23c4 0065 ld $65 23c5 0095 ld $95 23c6 0095 ld $95 23c7 0059 ld $59 23c8 00aa ld $aa 23c9 00a5 ld $a5 23ca 006a ld $6a 23cb 00aa ld $aa 23cc 00a9 ld $a9 23cd 00aa ld $aa 23ce 00ab ld $ab 23cf 00a9 ld $a9 23d0 00a9 ld $a9 23d1 0096 ld $96 23d2 0065 ld $65 23d3 00a9 ld $a9 23d4 0096 ld $96 23d5 006a ld $6a 23d6 00a9 ld $a9 23d7 00aa ld $aa 23d8 0056 ld $56 23d9 0060 ld $60 23da 0058 ld $58 23db 0042 ld $42 23dc 0055 ld $55 23dd 0044 ld $44 23de 0046 ld $46 23df 0051 ld $51 23e0 00e1 ld $e1 23e1 0068 ld $68 23e2 008e ld $8e 23e3 00a2 ld $a2 23e4 0028 ld $28 23e5 008e ld $8e 23e6 00a2 ld $a2 23e7 0051 ld $51 23e8 0011 ld $11 23e9 0015 ld $15 23ea 0055 ld $55 23eb 0011 ld $11 23ec 0058 ld $58 23ed 0085 ld $85 23ee 0050 ld $50 23ef 0058 ld $58 23f0 00aa ld $aa 23f1 0055 ld $55 23f2 0099 ld $99 23f3 006a ld $6a 23f4 0055 ld $55 23f5 0059 ld $59 23f6 0065 ld $65 23f7 0065 ld $65 23f8 0066 ld $66 23f9 0000 ld $00 23fa 0000 ld $00 23fb fe00 bra ac ;+-----------------------------------+ 23fc fcfd bra $23fd ;| | 23fd 1404 ld $04,y ;| Trampoline for page $2300 lookups | 23fe e068 jmp y,$68 ;| | 23ff c218 st [$18] ;+-----------------------------------+ 2400 0066 ld $66 2401 00a9 ld $a9 2402 00ab ld $ab 2403 00aa ld $aa 2404 0099 ld $99 2405 00aa ld $aa 2406 006a ld $6a 2407 00a9 ld $a9 2408 00a6 ld $a6 2409 0066 ld $66 240a 0056 ld $56 240b 005a ld $5a 240c 00a9 ld $a9 240d 00a5 ld $a5 240e 00aa ld $aa 240f 0086 ld $86 2410 0061 ld $61 2411 0015 ld $15 2412 0046 ld $46 2413 0061 ld $61 2414 0015 ld $15 2415 0041 ld $41 2416 0055 ld $55 2417 00a1 ld $a1 2418 0038 ld $38 2419 008e ld $8e 241a 0056 ld $56 241b 0068 ld $68 241c 008e ld $8e 241d 00a7 ld $a7 241e 0045 ld $45 241f 0061 ld $61 2420 0044 ld $44 2421 0046 ld $46 2422 0050 ld $50 2423 0019 ld $19 2424 0082 ld $82 2425 0065 ld $65 2426 0058 ld $58 2427 00aa ld $aa 2428 0069 ld $69 2429 0065 ld $65 242a 0056 ld $56 242b 0069 ld $69 242c 00a5 ld $a5 242d 0095 ld $95 242e 005a ld $5a 242f 0099 ld $99 2430 00a9 ld $a9 2431 00a9 ld $a9 2432 009a ld $9a 2433 00aa ld $aa 2434 006a ld $6a 2435 00ab ld $ab 2436 00ba ld $ba 2437 00aa ld $aa 2438 0096 ld $96 2439 00aa ld $aa 243a 0059 ld $59 243b 00aa ld $aa 243c 00a5 ld $a5 243d 00aa ld $aa 243e 00aa ld $aa 243f 0046 ld $46 2440 0061 ld $61 2441 0058 ld $58 2442 0041 ld $41 2443 0015 ld $15 2444 0014 ld $14 2445 0055 ld $55 2446 0090 ld $90 2447 00a2 ld $a2 2448 0038 ld $38 2449 009a ld $9a 244a 0092 ld $92 244b 0028 ld $28 244c 008e ld $8e 244d 00a2 ld $a2 244e 0042 ld $42 244f 0015 ld $15 2450 0014 ld $14 2451 0055 ld $55 2452 0021 ld $21 2453 0014 ld $14 2454 0085 ld $85 2455 0011 ld $11 2456 0058 ld $58 2457 00aa ld $aa 2458 00aa ld $aa 2459 005a ld $5a 245a 00a5 ld $a5 245b 0055 ld $55 245c 0056 ld $56 245d 00a6 ld $a6 245e 0056 ld $56 245f 009a ld $9a 2460 00aa ld $aa 2461 0069 ld $69 2462 00aa ld $aa 2463 00a9 ld $a9 2464 00aa ld $aa 2465 00aa ld $aa 2466 00a5 ld $a5 2467 009a ld $9a 2468 009a ld $9a 2469 00a9 ld $a9 246a 0059 ld $59 246b 0095 ld $95 246c 00aa ld $aa 246d 00aa ld $aa 246e 006b ld $6b 246f 0086 ld $86 2470 0015 ld $15 2471 0058 ld $58 2472 0085 ld $85 2473 0050 ld $50 2474 0015 ld $15 2475 0081 ld $81 2476 0081 ld $81 2477 00a2 ld $a2 2478 0038 ld $38 2479 008e ld $8e 247a 0065 ld $65 247b 0028 ld $28 247c 008a ld $8a 247d 00a7 ld $a7 247e 0045 ld $45 247f 0011 ld $11 2480 0015 ld $15 2481 0046 ld $46 2482 0054 ld $54 2483 0058 ld $58 2484 0056 ld $56 2485 0061 ld $61 2486 0058 ld $58 2487 00aa ld $aa 2488 00a9 ld $a9 2489 0056 ld $56 248a 0066 ld $66 248b 0056 ld $56 248c 0099 ld $99 248d 0095 ld $95 248e 0099 ld $99 248f 00aa ld $aa 2490 0066 ld $66 2491 00aa ld $aa 2492 009a ld $9a 2493 0066 ld $66 2494 0099 ld $99 2495 00ea ld $ea 2496 00aa ld $aa 2497 00ae ld $ae 2498 00aa ld $aa 2499 00a9 ld $a9 249a 00aa ld $aa 249b 0096 ld $96 249c 00aa ld $aa 249d 00aa ld $aa 249e 005a ld $5a 249f 0056 ld $56 24a0 0061 ld $61 24a1 0014 ld $14 24a2 0056 ld $56 24a3 0051 ld $51 24a4 0044 ld $44 24a5 0045 ld $45 24a6 0055 ld $55 24a7 00a1 ld $a1 24a8 0078 ld $78 24a9 008a ld $8a 24aa 0056 ld $56 24ab 0068 ld $68 24ac 008e ld $8e 24ad 00a3 ld $a3 24ae 0085 ld $85 24af 0055 ld $55 24b0 0054 ld $54 24b1 0041 ld $41 24b2 0061 ld $61 24b3 0014 ld $14 24b4 0046 ld $46 24b5 0060 ld $60 24b6 0098 ld $98 24b7 00aa ld $aa 24b8 00a9 ld $a9 24b9 005a ld $5a 24ba 00a5 ld $a5 24bb 0065 ld $65 24bc 0056 ld $56 24bd 006a ld $6a 24be 0069 ld $69 24bf 00a5 ld $a5 24c0 00a6 ld $a6 24c1 006a ld $6a 24c2 00aa ld $aa 24c3 00aa ld $aa 24c4 006a ld $6a 24c5 00aa ld $aa 24c6 00aa ld $aa 24c7 00ae ld $ae 24c8 009a ld $9a 24c9 00ba ld $ba 24ca 00aa ld $aa 24cb 00aa ld $aa 24cc 00aa ld $aa 24cd 00aa ld $aa 24ce 006a ld $6a 24cf 0086 ld $86 24d0 0055 ld $55 24d1 0058 ld $58 24d2 0045 ld $45 24d3 0054 ld $54 24d4 0054 ld $54 24d5 0041 ld $41 24d6 0051 ld $51 24d7 00a2 ld $a2 24d8 0038 ld $38 24d9 008e ld $8e 24da 0055 ld $55 24db 0024 ld $24 24dc 008a ld $8a 24dd 00a7 ld $a7 24de 0041 ld $41 24df 0011 ld $11 24e0 0015 ld $15 24e1 0055 ld $55 24e2 0050 ld $50 24e3 0059 ld $59 24e4 0045 ld $45 24e5 0061 ld $61 24e6 00a9 ld $a9 24e7 00aa ld $aa 24e8 005a ld $5a 24e9 00a9 ld $a9 24ea 0066 ld $66 24eb 0066 ld $66 24ec 00aa ld $aa 24ed 00a6 ld $a6 24ee 00aa ld $aa 24ef 009a ld $9a 24f0 006a ld $6a 24f1 00a9 ld $a9 24f2 0096 ld $96 24f3 0069 ld $69 24f4 00aa ld $aa 24f5 00ea ld $ea 24f6 00aa ld $aa 24f7 00aa ld $aa 24f8 00ab ld $ab 24f9 0000 ld $00 24fa 0000 ld $00 24fb fe00 bra ac ;+-----------------------------------+ 24fc fcfd bra $24fd ;| | 24fd 1404 ld $04,y ;| Trampoline for page $2400 lookups | 24fe e068 jmp y,$68 ;| | 24ff c218 st [$18] ;+-----------------------------------+ 2500 00aa ld $aa 2501 00aa ld $aa 2502 00aa ld $aa 2503 00ba ld $ba 2504 00fa ld $fa 2505 00ab ld $ab 2506 0086 ld $86 2507 0025 ld $25 2508 0054 ld $54 2509 0046 ld $46 250a 0015 ld $15 250b 0014 ld $14 250c 0055 ld $55 250d 0081 ld $81 250e 00a2 ld $a2 250f 0038 ld $38 2510 008a ld $8a 2511 0056 ld $56 2512 0028 ld $28 2513 008e ld $8e 2514 00a6 ld $a6 2515 0045 ld $45 2516 0055 ld $55 2517 0044 ld $44 2518 0045 ld $45 2519 0060 ld $60 251a 0054 ld $54 251b 0046 ld $46 251c 0060 ld $60 251d 00a8 ld $a8 251e 00aa ld $aa 251f 00aa ld $aa 2520 0056 ld $56 2521 00aa ld $aa 2522 0059 ld $59 2523 0066 ld $66 2524 0066 ld $66 2525 006a ld $6a 2526 00aa ld $aa 2527 00aa ld $aa 2528 006a ld $6a 2529 00aa ld $aa 252a 006a ld $6a 252b 00a9 ld $a9 252c 00aa ld $aa 252d 00aa ld $aa 252e 00ae ld $ae 252f 00aa ld $aa 2530 00ba ld $ba 2531 00aa ld $aa 2532 00ea ld $ea 2533 00aa ld $aa 2534 00ea ld $ea 2535 00af ld $af 2536 0086 ld $86 2537 0065 ld $65 2538 0014 ld $14 2539 0095 ld $95 253a 0011 ld $11 253b 0015 ld $15 253c 0051 ld $51 253d 0091 ld $91 253e 00e2 ld $e2 253f 007c ld $7c 2540 009a ld $9a 2541 0051 ld $51 2542 0029 ld $29 2543 008a ld $8a 2544 00a3 ld $a3 2545 0042 ld $42 2546 0051 ld $51 2547 0015 ld $15 2548 0055 ld $55 2549 0061 ld $61 254a 0005 ld $05 254b 0085 ld $85 254c 0065 ld $65 254d 00a9 ld $a9 254e 00a6 ld $a6 254f 00a9 ld $a9 2550 009a ld $9a 2551 00a5 ld $a5 2552 0066 ld $66 2553 009a ld $9a 2554 00aa ld $aa 2555 00aa ld $aa 2556 009a ld $9a 2557 00aa ld $aa 2558 00aa ld $aa 2559 00aa ld $aa 255a 006a ld $6a 255b 0059 ld $59 255c 0096 ld $96 255d 0066 ld $66 255e 00aa ld $aa 255f 00ea ld $ea 2560 00aa ld $aa 2561 00ae ld $ae 2562 00ba ld $ba 2563 00ba ld $ba 2564 00ba ld $ba 2565 00bb ld $bb 2566 0046 ld $46 2567 0061 ld $61 2568 0019 ld $19 2569 0041 ld $41 256a 0055 ld $55 256b 0018 ld $18 256c 0055 ld $55 256d 0090 ld $90 256e 00e2 ld $e2 256f 0038 ld $38 2570 009e ld $9e 2571 0015 ld $15 2572 0028 ld $28 2573 008e ld $8e 2574 00a7 ld $a7 2575 0045 ld $45 2576 0015 ld $15 2577 0014 ld $14 2578 0041 ld $41 2579 0055 ld $55 257a 0054 ld $54 257b 0042 ld $42 257c 0061 ld $61 257d 00a9 ld $a9 257e 00aa ld $aa 257f 006a ld $6a 2580 00aa ld $aa 2581 00aa ld $aa 2582 00a9 ld $a9 2583 00a6 ld $a6 2584 00aa ld $aa 2585 005a ld $5a 2586 00aa ld $aa 2587 00a6 ld $a6 2588 006a ld $6a 2589 00aa ld $aa 258a 0065 ld $65 258b 0099 ld $99 258c 0095 ld $95 258d 00a9 ld $a9 258e 00a9 ld $a9 258f 0096 ld $96 2590 00ba ld $ba 2591 00aa ld $aa 2592 00ef ld $ef 2593 00aa ld $aa 2594 00aa ld $aa 2595 00ff ld $ff 2596 0096 ld $96 2597 0061 ld $61 2598 0015 ld $15 2599 0085 ld $85 259a 0055 ld $55 259b 0044 ld $44 259c 0045 ld $45 259d 0091 ld $91 259e 00e2 ld $e2 259f 0028 ld $28 25a0 009e ld $9e 25a1 0051 ld $51 25a2 0015 ld $15 25a3 008a ld $8a 25a4 0067 ld $67 25a5 0041 ld $41 25a6 0065 ld $65 25a7 0054 ld $54 25a8 0081 ld $81 25a9 0055 ld $55 25aa 0014 ld $14 25ab 0086 ld $86 25ac 0061 ld $61 25ad 00a9 ld $a9 25ae 00aa ld $aa 25af 00a9 ld $a9 25b0 009a ld $9a 25b1 006a ld $6a 25b2 00aa ld $aa 25b3 009a ld $9a 25b4 00aa ld $aa 25b5 00a9 ld $a9 25b6 00aa ld $aa 25b7 00aa ld $aa 25b8 00aa ld $aa 25b9 00aa ld $aa 25ba 0065 ld $65 25bb 0059 ld $59 25bc 009a ld $9a 25bd 0065 ld $65 25be 0099 ld $99 25bf 0096 ld $96 25c0 00ea ld $ea 25c1 00ee ld $ee 25c2 00aa ld $aa 25c3 00fa ld $fa 25c4 00ab ld $ab 25c5 00fe ld $fe 25c6 005a ld $5a 25c7 0051 ld $51 25c8 0019 ld $19 25c9 0051 ld $51 25ca 0051 ld $51 25cb 0015 ld $15 25cc 0055 ld $55 25cd 0051 ld $51 25ce 00e1 ld $e1 25cf 003c ld $3c 25d0 004a ld $4a 25d1 0055 ld $55 25d2 0029 ld $29 25d3 008a ld $8a 25d4 0057 ld $57 25d5 0045 ld $45 25d6 0011 ld $11 25d7 0015 ld $15 25d8 0045 ld $45 25d9 0015 ld $15 25da 0058 ld $58 25db 0081 ld $81 25dc 00a1 ld $a1 25dd 00ea ld $ea 25de 00aa ld $aa 25df 00aa ld $aa 25e0 0056 ld $56 25e1 00aa ld $aa 25e2 00a9 ld $a9 25e3 009a ld $9a 25e4 006a ld $6a 25e5 006a ld $6a 25e6 00aa ld $aa 25e7 00a6 ld $a6 25e8 00aa ld $aa 25e9 00ab ld $ab 25ea 0065 ld $65 25eb 0099 ld $99 25ec 0096 ld $96 25ed 0065 ld $65 25ee 0059 ld $59 25ef 00aa ld $aa 25f0 00ba ld $ba 25f1 00bb ld $bb 25f2 00ea ld $ea 25f3 00ae ld $ae 25f4 00be ld $be 25f5 00fa ld $fa 25f6 009b ld $9b 25f7 0061 ld $61 25f8 0015 ld $15 25f9 0000 ld $00 25fa 0000 ld $00 25fb fe00 bra ac ;+-----------------------------------+ 25fc fcfd bra $25fd ;| | 25fd 1404 ld $04,y ;| Trampoline for page $2500 lookups | 25fe e068 jmp y,$68 ;| | 25ff c218 st [$18] ;+-----------------------------------+ 2600 0045 ld $45 2601 0015 ld $15 2602 0054 ld $54 2603 0045 ld $45 2604 0054 ld $54 2605 00a1 ld $a1 2606 0078 ld $78 2607 008a ld $8a 2608 0066 ld $66 2609 0028 ld $28 260a 008a ld $8a 260b 0056 ld $56 260c 0045 ld $45 260d 0055 ld $55 260e 0044 ld $44 260f 0055 ld $55 2610 0051 ld $51 2611 0004 ld $04 2612 0096 ld $96 2613 00a5 ld $a5 2614 00ae ld $ae 2615 00aa ld $aa 2616 00aa ld $aa 2617 00aa ld $aa 2618 00aa ld $aa 2619 00a9 ld $a9 261a 00aa ld $aa 261b 00aa ld $aa 261c 00a9 ld $a9 261d 00aa ld $aa 261e 00aa ld $aa 261f 00aa ld $aa 2620 00aa ld $aa 2621 0069 ld $69 2622 0059 ld $59 2623 0056 ld $56 2624 00a5 ld $a5 2625 00aa ld $aa 2626 00aa ld $aa 2627 00ea ld $ea 2628 00ea ld $ea 2629 00ab ld $ab 262a 00bb ld $bb 262b 00ab ld $ab 262c 00ee ld $ee 262d 00aa ld $aa 262e 0051 ld $51 262f 0019 ld $19 2630 0051 ld $51 2631 0061 ld $61 2632 0005 ld $05 2633 0055 ld $55 2634 0051 ld $51 2635 00a4 ld $a4 2636 0038 ld $38 2637 008f ld $8f 2638 0056 ld $56 2639 0028 ld $28 263a 009e ld $9e 263b 0016 ld $16 263c 0091 ld $91 263d 0011 ld $11 263e 0015 ld $15 263f 0045 ld $45 2640 0054 ld $54 2641 0018 ld $18 2642 0085 ld $85 2643 00a5 ld $a5 2644 00aa ld $aa 2645 00aa ld $aa 2646 00a9 ld $a9 2647 009a ld $9a 2648 00aa ld $aa 2649 009a ld $9a 264a 009a ld $9a 264b 00aa ld $aa 264c 00aa ld $aa 264d 00aa ld $aa 264e 00aa ld $aa 264f 00a9 ld $a9 2650 00ab ld $ab 2651 0025 ld $25 2652 0059 ld $59 2653 0096 ld $96 2654 0069 ld $69 2655 0099 ld $99 2656 00ea ld $ea 2657 00ba ld $ba 2658 00be ld $be 2659 00fa ld $fa 265a 00ab ld $ab 265b 00fe ld $fe 265c 00fe ld $fe 265d 00aa ld $aa 265e 0065 ld $65 265f 0054 ld $54 2660 0046 ld $46 2661 0055 ld $55 2662 0054 ld $54 2663 0045 ld $45 2664 0055 ld $55 2665 00a0 ld $a0 2666 0078 ld $78 2667 008a ld $8a 2668 00a6 ld $a6 2669 0038 ld $38 266a 009e ld $9e 266b 0015 ld $15 266c 0055 ld $55 266d 0051 ld $51 266e 0054 ld $54 266f 0056 ld $56 2670 0051 ld $51 2671 0058 ld $58 2672 0086 ld $86 2673 00f5 ld $f5 2674 00ab ld $ab 2675 00ab ld $ab 2676 00aa ld $aa 2677 009a ld $9a 2678 00aa ld $aa 2679 006a ld $6a 267a 00aa ld $aa 267b 00aa ld $aa 267c 00a9 ld $a9 267d 009a ld $9a 267e 00aa ld $aa 267f 00aa ld $aa 2680 00aa ld $aa 2681 0064 ld $64 2682 0059 ld $59 2683 0092 ld $92 2684 0065 ld $65 2685 0069 ld $69 2686 00aa ld $aa 2687 00aa ld $aa 2688 00ea ld $ea 2689 00af ld $af 268a 00be ld $be 268b 00aa ld $aa 268c 00aa ld $aa 268d 00af ld $af 268e 006a ld $6a 268f 0018 ld $18 2690 0055 ld $55 2691 0061 ld $61 2692 0055 ld $55 2693 0081 ld $81 2694 0055 ld $55 2695 00a4 ld $a4 2696 0038 ld $38 2697 009a ld $9a 2698 00a2 ld $a2 2699 0028 ld $28 269a 009a ld $9a 269b 0006 ld $06 269c 0056 ld $56 269d 0051 ld $51 269e 0019 ld $19 269f 0055 ld $55 26a0 0060 ld $60 26a1 0054 ld $54 26a2 0086 ld $86 26a3 00aa ld $aa 26a4 00aa ld $aa 26a5 00aa ld $aa 26a6 00aa ld $aa 26a7 00a9 ld $a9 26a8 00a6 ld $a6 26a9 00aa ld $aa 26aa 00ab ld $ab 26ab 00a5 ld $a5 26ac 00aa ld $aa 26ad 00a6 ld $a6 26ae 00aa ld $aa 26af 00aa ld $aa 26b0 00ab ld $ab 26b1 0065 ld $65 26b2 0049 ld $49 26b3 00a6 ld $a6 26b4 0075 ld $75 26b5 009a ld $9a 26b6 009b ld $9b 26b7 00ba ld $ba 26b8 00ba ld $ba 26b9 00fa ld $fa 26ba 00ab ld $ab 26bb 00bf ld $bf 26bc 00aa ld $aa 26bd 00bb ld $bb 26be 0066 ld $66 26bf 0015 ld $15 26c0 0056 ld $56 26c1 0061 ld $61 26c2 0015 ld $15 26c3 0055 ld $55 26c4 0051 ld $51 26c5 00a1 ld $a1 26c6 0038 ld $38 26c7 009a ld $9a 26c8 0062 ld $62 26c9 0038 ld $38 26ca 009e ld $9e 26cb 0005 ld $05 26cc 0055 ld $55 26cd 0011 ld $11 26ce 0068 ld $68 26cf 0085 ld $85 26d0 0061 ld $61 26d1 0019 ld $19 26d2 0096 ld $96 26d3 00aa ld $aa 26d4 00ae ld $ae 26d5 00aa ld $aa 26d6 006a ld $6a 26d7 00aa ld $aa 26d8 00aa ld $aa 26d9 00aa ld $aa * 5 times 26dc 006a ld $6a 26dd 00aa ld $aa 26de 00ba ld $ba 26df 00aa ld $aa 26e0 00da ld $da 26e1 0025 ld $25 26e2 0059 ld $59 26e3 0096 ld $96 26e4 00b9 ld $b9 26e5 0059 ld $59 26e6 00a6 ld $a6 26e7 00aa ld $aa 26e8 00af ld $af 26e9 00aa ld $aa 26ea 00aa ld $aa 26eb 00aa ld $aa 26ec 00af ld $af 26ed 00aa ld $aa 26ee 00aa ld $aa 26ef 0019 ld $19 26f0 0096 ld $96 26f1 0055 ld $55 26f2 0059 ld $59 26f3 0045 ld $45 26f4 0055 ld $55 26f5 00a1 ld $a1 26f6 0039 ld $39 26f7 008e ld $8e 26f8 00a2 ld $a2 26f9 0000 ld $00 26fa 0000 ld $00 26fb fe00 bra ac ;+-----------------------------------+ 26fc fcfd bra $26fd ;| | 26fd 1404 ld $04,y ;| Trampoline for page $2600 lookups | 26fe e068 jmp y,$68 ;| | 26ff c218 st [$18] ;+-----------------------------------+ 2700 0029 ld $29 2701 008e ld $8e 2702 0055 ld $55 2703 0056 ld $56 2704 0061 ld $61 2705 0059 ld $59 2706 0095 ld $95 2707 0051 ld $51 2708 0059 ld $59 2709 009a ld $9a 270a 00a5 ld $a5 270b 00aa ld $aa 270c 00ba ld $ba 270d 00aa ld $aa 270e 00aa ld $aa 270f 00aa ld $aa 2710 006a ld $6a 2711 00aa ld $aa 2712 00aa ld $aa 2713 00a9 ld $a9 2714 00a6 ld $a6 2715 00a6 ld $a6 2716 00ae ld $ae 2717 00aa ld $aa 2718 0064 ld $64 2719 0099 ld $99 271a 0096 ld $96 271b 0079 ld $79 271c 0099 ld $99 271d 00da ld $da 271e 00ea ld $ea 271f 00ea ld $ea 2720 00ef ld $ef 2721 00ae ld $ae 2722 00aa ld $aa 2723 00ba ld $ba 2724 00ab ld $ab 2725 00aa ld $aa 2726 0059 ld $59 2727 0096 ld $96 2728 0066 ld $66 2729 0068 ld $68 272a 0045 ld $45 272b 0095 ld $95 272c 00e1 ld $e1 272d 0028 ld $28 272e 009a ld $9a 272f 00a2 ld $a2 2730 0028 ld $28 2731 009a ld $9a 2732 0056 ld $56 2733 0056 ld $56 2734 0061 ld $61 2735 0069 ld $69 2736 0096 ld $96 2737 0055 ld $55 2738 0068 ld $68 2739 0096 ld $96 273a 00a6 ld $a6 273b 00aa ld $aa 273c 00ea ld $ea 273d 00aa ld $aa 273e 00aa ld $aa 273f 00a6 ld $a6 2740 00aa ld $aa 2741 00aa ld $aa 2742 00a5 ld $a5 2743 00aa ld $aa 2744 009a ld $9a 2745 00aa ld $aa 2746 00aa ld $aa 2747 00aa ld $aa 2748 0064 ld $64 2749 0049 ld $49 274a 0097 ld $97 274b 0064 ld $64 274c 0059 ld $59 274d 00ea ld $ea 274e 00be ld $be 274f 00aa ld $aa 2750 00aa ld $aa 2751 00bb ld $bb 2752 00aa ld $aa 2753 00ea ld $ea 2754 00ea ld $ea 2755 006a ld $6a 2756 0069 ld $69 2757 0096 ld $96 2758 0056 ld $56 2759 0055 ld $55 275a 0046 ld $46 275b 0085 ld $85 275c 00e2 ld $e2 275d 0028 ld $28 275e 008e ld $8e 275f 00a2 ld $a2 2760 0028 ld $28 2761 008e ld $8e 2762 0066 ld $66 2763 0045 ld $45 2764 00a5 ld $a5 2765 0015 ld $15 2766 0085 ld $85 2767 00a5 ld $a5 2768 0059 ld $59 2769 0096 ld $96 276a 0066 ld $66 276b 00a9 ld $a9 276c 009a ld $9a 276d 006a ld $6a 276e 00aa ld $aa 276f 00aa ld $aa 2770 00aa ld $aa * 8 times 2776 005a ld $5a 2777 00aa ld $aa 2778 0025 ld $25 2779 0059 ld $59 277a 0092 ld $92 277b 0025 ld $25 277c 0099 ld $99 277d 00a6 ld $a6 277e 00aa ld $aa 277f 00aa ld $aa 2780 00aa ld $aa 2781 00aa ld $aa 2782 00a5 ld $a5 2783 00aa ld $aa 2784 00aa ld $aa 2785 00aa ld $aa 2786 0059 ld $59 2787 009a ld $9a 2788 0066 ld $66 2789 0059 ld $59 278a 0015 ld $15 278b 008a ld $8a 278c 00e6 ld $e6 278d 0068 ld $68 278e 008a ld $8a 278f 00a6 ld $a6 2790 0068 ld $68 2791 008a ld $8a 2792 0097 ld $97 2793 0085 ld $85 2794 0065 ld $65 2795 0055 ld $55 2796 009a ld $9a 2797 00a5 ld $a5 2798 0059 ld $59 2799 009a ld $9a 279a 006a ld $6a 279b 00a9 ld $a9 279c 00aa ld $aa 279d 00aa ld $aa 279e 006a ld $6a 279f 00a6 ld $a6 27a0 00aa ld $aa 27a1 00ea ld $ea 27a2 00aa ld $aa 27a3 0099 ld $99 27a4 00aa ld $aa 27a5 00a5 ld $a5 27a6 00aa ld $aa 27a7 00aa ld $aa 27a8 0064 ld $64 27a9 0049 ld $49 27aa 0096 ld $96 27ab 0064 ld $64 27ac 0099 ld $99 27ad 009b ld $9b 27ae 00aa ld $aa 27af 00aa ld $aa 27b0 0056 ld $56 27b1 0055 ld $55 27b2 0065 ld $65 27b3 00a9 ld $a9 27b4 00aa ld $aa 27b5 00a6 ld $a6 27b6 00aa ld $aa 27b7 005a ld $5a 27b8 009a ld $9a 27b9 00a2 ld $a2 27ba 0028 ld $28 27bb 008e ld $8e 27bc 00a3 ld $a3 27bd 0038 ld $38 27be 008a ld $8a 27bf 00a2 ld $a2 27c0 0028 ld $28 27c1 008e ld $8e 27c2 00a2 ld $a2 27c3 0068 ld $68 27c4 0056 ld $56 27c5 0019 ld $19 27c6 009a ld $9a 27c7 00a5 ld $a5 27c8 00a9 ld $a9 27c9 0096 ld $96 27ca 00a6 ld $a6 27cb 0099 ld $99 27cc 00aa ld $aa 27cd 006a ld $6a 27ce 0066 ld $66 27cf 0066 ld $66 27d0 006a ld $6a 27d1 00aa ld $aa 27d2 00aa ld $aa 27d3 00aa ld $aa * 5 times 27d6 0099 ld $99 27d7 009a ld $9a 27d8 0064 ld $64 27d9 004c ld $4c 27da 0092 ld $92 27db 0060 ld $60 27dc 0099 ld $99 27dd 0096 ld $96 27de 00ba ld $ba 27df 006a ld $6a 27e0 0056 ld $56 27e1 0055 ld $55 27e2 0059 ld $59 27e3 00a9 ld $a9 27e4 00ab ld $ab 27e5 006a ld $6a 27e6 0069 ld $69 27e7 0029 ld $29 27e8 008a ld $8a 27e9 00a2 ld $a2 27ea 0028 ld $28 27eb 008a ld $8a 27ec 00a7 ld $a7 27ed 0028 ld $28 27ee 009a ld $9a 27ef 00a2 ld $a2 27f0 0038 ld $38 27f1 008a ld $8a 27f2 00a3 ld $a3 27f3 0038 ld $38 27f4 008a ld $8a 27f5 00a6 ld $a6 27f6 0096 ld $96 27f7 0066 ld $66 27f8 0069 ld $69 27f9 0000 ld $00 27fa 0000 ld $00 27fb fe00 bra ac ;+-----------------------------------+ 27fc fcfd bra $27fd ;| | 27fd 1404 ld $04,y ;| Trampoline for page $2700 lookups | 27fe e068 jmp y,$68 ;| | 27ff c218 st [$18] ;+-----------------------------------+ 2800 009a ld $9a 2801 006a ld $6a 2802 006a ld $6a 2803 0096 ld $96 2804 00a5 ld $a5 2805 009a ld $9a 2806 005a ld $5a 2807 00a9 ld $a9 2808 00a9 ld $a9 2809 00a6 ld $a6 280a 00aa ld $aa 280b 00ab ld $ab 280c 006a ld $6a 280d 006a ld $6a 280e 00aa ld $aa 280f 0025 ld $25 2810 0059 ld $59 2811 00d2 ld $d2 2812 0025 ld $25 2813 0059 ld $59 2814 00a7 ld $a7 2815 00aa ld $aa 2816 005a ld $5a 2817 0095 ld $95 2818 0066 ld $66 2819 0055 ld $55 281a 00a9 ld $a9 281b 00aa ld $aa 281c 00a9 ld $a9 281d 00a5 ld $a5 281e 0039 ld $39 281f 009a ld $9a 2820 00a2 ld $a2 2821 0029 ld $29 2822 009a ld $9a 2823 00a1 ld $a1 2824 0028 ld $28 2825 008a ld $8a 2826 00a2 ld $a2 2827 0028 ld $28 2828 009a ld $9a 2829 0091 ld $91 282a 0058 ld $58 282b 0089 ld $89 282c 00a2 ld $a2 282d 0099 ld $99 282e 0095 ld $95 282f 0059 ld $59 2830 0096 ld $96 2831 0066 ld $66 2832 0069 ld $69 2833 00aa ld $aa 2834 00aa ld $aa 2835 0055 ld $55 2836 00aa ld $aa 2837 0095 ld $95 2838 009a ld $9a 2839 00a9 ld $a9 283a 00aa ld $aa 283b 00aa ld $aa 283c 00aa ld $aa 283d 00a9 ld $a9 283e 00a6 ld $a6 283f 0064 ld $64 2840 0009 ld $09 2841 0096 ld $96 2842 0064 ld $64 2843 009d ld $9d 2844 00aa ld $aa 2845 00a6 ld $a6 2846 005a ld $5a 2847 0056 ld $56 2848 0055 ld $55 2849 0055 ld $55 284a 0099 ld $99 284b 00aa ld $aa 284c 00a6 ld $a6 284d 00a6 ld $a6 284e 0028 ld $28 284f 008e ld $8e 2850 00e6 ld $e6 2851 0069 ld $69 2852 004a ld $4a 2853 0066 ld $66 2854 0058 ld $58 2855 0085 ld $85 2856 0056 ld $56 2857 0058 ld $58 2858 0089 ld $89 2859 00a6 ld $a6 285a 0039 ld $39 285b 008a ld $8a 285c 00a2 ld $a2 285d 0078 ld $78 285e 00a5 ld $a5 285f 0059 ld $59 2860 009a ld $9a 2861 00a9 ld $a9 2862 0099 ld $99 2863 005a ld $5a 2864 0065 ld $65 2865 006a ld $6a 2866 0066 ld $66 2867 00aa ld $aa 2868 006a ld $6a 2869 00a6 ld $a6 286a 005a ld $5a 286b 00aa ld $aa 286c 00a5 ld $a5 286d 005a ld $5a 286e 009a ld $9a 286f 0025 ld $25 2870 0059 ld $59 2871 00d2 ld $d2 2872 0024 ld $24 2873 0059 ld $59 2874 00e6 ld $e6 2875 007a ld $7a 2876 00aa ld $aa 2877 0096 ld $96 2878 0065 ld $65 2879 0055 ld $55 287a 0059 ld $59 287b 00aa ld $aa 287c 00aa ld $aa 287d 00a6 ld $a6 287e 0038 ld $38 287f 008e ld $8e 2880 00a2 ld $a2 2881 0069 ld $69 2882 009e ld $9e 2883 00a2 ld $a2 2884 0028 ld $28 2885 0095 ld $95 2886 0091 ld $91 2887 0068 ld $68 2888 009a ld $9a 2889 00a6 ld $a6 288a 0068 ld $68 288b 008a ld $8a 288c 00e2 ld $e2 288d 0068 ld $68 288e 00aa ld $aa 288f 0095 ld $95 2890 009a ld $9a 2891 00aa ld $aa 2892 0095 ld $95 2893 009a ld $9a 2894 0099 ld $99 2895 0059 ld $59 2896 0095 ld $95 2897 00a5 ld $a5 2898 009a ld $9a 2899 00a9 ld $a9 289a 00a6 ld $a6 289b 009a ld $9a 289c 005a ld $5a 289d 00a9 ld $a9 289e 0095 ld $95 289f 0064 ld $64 28a0 0009 ld $09 28a1 0096 ld $96 28a2 0074 ld $74 28a3 0059 ld $59 28a4 00a6 ld $a6 28a5 0066 ld $66 28a6 0059 ld $59 28a7 0056 ld $56 28a8 0055 ld $55 28a9 0059 ld $59 28aa 0055 ld $55 28ab 00aa ld $aa 28ac 00aa ld $aa 28ad 00a5 ld $a5 28ae 0029 ld $29 28af 009a ld $9a 28b0 00a2 ld $a2 28b1 0028 ld $28 28b2 009a ld $9a 28b3 00a6 ld $a6 28b4 0068 ld $68 28b5 008a ld $8a 28b6 00a2 ld $a2 28b7 0068 ld $68 28b8 008e ld $8e 28b9 00a2 ld $a2 28ba 0028 ld $28 28bb 008a ld $8a 28bc 00e2 ld $e2 28bd 0069 ld $69 28be 006a ld $6a 28bf 0069 ld $69 28c0 00a6 ld $a6 28c1 0066 ld $66 28c2 006a ld $6a 28c3 00aa ld $aa 28c4 00a5 ld $a5 28c5 0095 ld $95 28c6 0056 ld $56 28c7 0055 ld $55 28c8 0099 ld $99 28c9 00aa ld $aa 28ca 005a ld $5a 28cb 006a ld $6a 28cc 00a5 ld $a5 28cd 005a ld $5a 28ce 0099 ld $99 28cf 0064 ld $64 28d0 0049 ld $49 28d1 0093 ld $93 28d2 0025 ld $25 28d3 0059 ld $59 28d4 00a7 ld $a7 28d5 00ba ld $ba 28d6 009a ld $9a 28d7 0096 ld $96 28d8 0069 ld $69 28d9 0059 ld $59 28da 0069 ld $69 28db 0095 ld $95 28dc 00a5 ld $a5 28dd 00aa ld $aa 28de 0028 ld $28 28df 008e ld $8e 28e0 0066 ld $66 28e1 0028 ld $28 28e2 008a ld $8a 28e3 00e6 ld $e6 28e4 0028 ld $28 28e5 004a ld $4a 28e6 00a6 ld $a6 28e7 0028 ld $28 28e8 008a ld $8a 28e9 00a2 ld $a2 28ea 0028 ld $28 28eb 008e ld $8e 28ec 00e2 ld $e2 28ed 0068 ld $68 28ee 00aa ld $aa 28ef 00a9 ld $a9 28f0 006a ld $6a 28f1 00a5 ld $a5 28f2 00aa ld $aa 28f3 006a ld $6a 28f4 006a ld $6a 28f5 0055 ld $55 28f6 0056 ld $56 28f7 00a5 ld $a5 28f8 0056 ld $56 28f9 0000 ld $00 28fa 0000 ld $00 28fb fe00 bra ac ;+-----------------------------------+ 28fc fcfd bra $28fd ;| | 28fd 1404 ld $04,y ;| Trampoline for page $2800 lookups | 28fe e068 jmp y,$68 ;| | 28ff c218 st [$18] ;+-----------------------------------+ 2900 006a ld $6a 2901 00a5 ld $a5 2902 009a ld $9a 2903 005a ld $5a 2904 00a9 ld $a9 2905 0095 ld $95 2906 0025 ld $25 2907 0059 ld $59 2908 0096 ld $96 2909 0064 ld $64 290a 004d ld $4d 290b 00a6 ld $a6 290c 0065 ld $65 290d 0059 ld $59 290e 00aa ld $aa 290f 0065 ld $65 2910 0055 ld $55 2911 0055 ld $55 2912 0095 ld $95 2913 00aa ld $aa 2914 00a6 ld $a6 2915 0029 ld $29 2916 008a ld $8a 2917 00e2 ld $e2 2918 0028 ld $28 2919 008a ld $8a 291a 00a2 ld $a2 291b 0029 ld $29 291c 009a ld $9a 291d 00a1 ld $a1 291e 0028 ld $28 291f 009a ld $9a 2920 00a2 ld $a2 2921 0028 ld $28 2922 008e ld $8e 2923 00a3 ld $a3 2924 0069 ld $69 2925 006a ld $6a 2926 00a9 ld $a9 2927 00aa ld $aa 2928 0056 ld $56 2929 00a9 ld $a9 292a 0095 ld $95 292b 0055 ld $55 292c 0095 ld $95 292d 0055 ld $55 292e 0055 ld $55 292f 0055 ld $55 2930 00a6 ld $a6 2931 00aa ld $aa 2932 0066 ld $66 2933 0066 ld $66 2934 0065 ld $65 2935 0066 ld $66 2936 0015 ld $15 2937 0059 ld $59 2938 0092 ld $92 2939 0025 ld $25 293a 0059 ld $59 293b 00a7 ld $a7 293c 0076 ld $76 293d 005a ld $5a 293e 0096 ld $96 293f 0064 ld $64 2940 0055 ld $55 2941 0056 ld $56 2942 0056 ld $56 2943 0055 ld $55 2944 0069 ld $69 2945 0029 ld $29 2946 008e ld $8e 2947 00e2 ld $e2 2948 0068 ld $68 2949 008e ld $8e 294a 00e2 ld $e2 294b 0028 ld $28 294c 008a ld $8a 294d 00e2 ld $e2 294e 0028 ld $28 294f 008a ld $8a 2950 00a2 ld $a2 2951 0038 ld $38 2952 008a ld $8a 2953 00a3 ld $a3 2954 00a9 ld $a9 2955 00a5 ld $a5 2956 00aa ld $aa 2957 0095 ld $95 2958 005a ld $5a 2959 0055 ld $55 295a 0099 ld $99 295b 0099 ld $99 295c 0055 ld $55 295d 0056 ld $56 295e 0055 ld $55 295f 005a ld $5a 2960 0069 ld $69 2961 006a ld $6a 2962 0066 ld $66 2963 0066 ld $66 2964 006a ld $6a 2965 0095 ld $95 2966 0065 ld $65 2967 0009 ld $09 2968 0096 ld $96 2969 0025 ld $25 296a 0059 ld $59 296b 00a6 ld $a6 296c 0065 ld $65 296d 006a ld $6a 296e 0096 ld $96 296f 0065 ld $65 2970 005a ld $5a 2971 0055 ld $55 2972 0059 ld $59 2973 0055 ld $55 2974 0099 ld $99 2975 0059 ld $59 2976 009a ld $9a 2977 00b2 ld $b2 2978 0038 ld $38 2979 00ca ld $ca 297a 00e3 ld $e3 297b 0029 ld $29 297c 008a ld $8a 297d 00a3 ld $a3 297e 0039 ld $39 297f 008a ld $8a 2980 00a3 ld $a3 2981 0029 ld $29 2982 008e ld $8e 2983 00a6 ld $a6 2984 00a9 ld $a9 2985 0095 ld $95 2986 00a9 ld $a9 2987 0056 ld $56 2988 0095 ld $95 2989 0055 ld $55 298a 00a6 ld $a6 298b 005a ld $5a 298c 0055 ld $55 298d 0055 ld $55 298e 0059 ld $59 298f 0095 ld $95 2990 00a6 ld $a6 2991 00aa ld $aa 2992 0096 ld $96 2993 0056 ld $56 2994 006a ld $6a 2995 0055 ld $55 2996 0064 ld $64 2997 0055 ld $55 2998 0095 ld $95 2999 0064 ld $64 299a 005a ld $5a 299b 0097 ld $97 299c 0075 ld $75 299d 0059 ld $59 299e 00e6 ld $e6 299f 0069 ld $69 29a0 0055 ld $55 29a1 0056 ld $56 29a2 0055 ld $55 29a3 0055 ld $55 29a4 0055 ld $55 29a5 0055 ld $55 29a6 0085 ld $85 29a7 00a6 ld $a6 29a8 0028 ld $28 29a9 008e ld $8e 29aa 00e2 ld $e2 29ab 0068 ld $68 29ac 008a ld $8a 29ad 00a2 ld $a2 29ae 0038 ld $38 29af 008e ld $8e 29b0 00e2 ld $e2 29b1 0028 ld $28 29b2 009e ld $9e 29b3 00a6 ld $a6 29b4 005a ld $5a 29b5 0069 ld $69 29b6 0055 ld $55 29b7 0069 ld $69 29b8 0055 ld $55 29b9 006a ld $6a 29ba 0095 ld $95 29bb 0055 ld $55 29bc 0055 ld $55 29bd 0065 ld $65 29be 0055 ld $55 29bf 0056 ld $56 29c0 00a5 ld $a5 29c1 0056 ld $56 29c2 00aa ld $aa 29c3 006a ld $6a 29c4 0069 ld $69 29c5 0095 ld $95 29c6 0055 ld $55 29c7 0049 ld $49 29c8 0096 ld $96 29c9 0025 ld $25 29ca 0059 ld $59 29cb 0092 ld $92 29cc 0069 ld $69 29cd 0099 ld $99 29ce 00aa ld $aa 29cf 0065 ld $65 29d0 0059 ld $59 29d1 0095 ld $95 29d2 0095 ld $95 29d3 0055 ld $55 29d4 0055 ld $55 29d5 0055 ld $55 29d6 0055 ld $55 29d7 00a5 ld $a5 29d8 0029 ld $29 29d9 009a ld $9a 29da 00a2 ld $a2 29db 0029 ld $29 29dc 008a ld $8a 29dd 00e2 ld $e2 29de 0028 ld $28 29df 008f ld $8f 29e0 00a2 ld $a2 29e1 0068 ld $68 29e2 009a ld $9a 29e3 0056 ld $56 29e4 006a ld $6a 29e5 0055 ld $55 29e6 0055 ld $55 29e7 0095 ld $95 29e8 005a ld $5a 29e9 00a9 ld $a9 29ea 0055 ld $55 29eb 0055 ld $55 29ec 0059 ld $59 29ed 0065 ld $65 29ee 0055 ld $55 29ef 00a6 ld $a6 29f0 00a5 ld $a5 29f1 0099 ld $99 29f2 005a ld $5a 29f3 00a5 ld $a5 29f4 0056 ld $56 29f5 006a ld $6a 29f6 0061 ld $61 29f7 0055 ld $55 29f8 0095 ld $95 29f9 0000 ld $00 29fa 0000 ld $00 29fb fe00 bra ac ;+-----------------------------------+ 29fc fcfd bra $29fd ;| | 29fd 1404 ld $04,y ;| Trampoline for page $2900 lookups | 29fe e068 jmp y,$68 ;| | 29ff c218 st [$18] ;+-----------------------------------+ 2a00 0065 ld $65 2a01 0059 ld $59 2a02 00e6 ld $e6 2a03 0065 ld $65 2a04 005a ld $5a 2a05 0096 ld $96 2a06 0069 ld $69 2a07 0059 ld $59 2a08 0055 ld $55 2a09 0055 ld $55 2a0a 0065 ld $65 2a0b 0055 ld $55 2a0c 0055 ld $55 2a0d 0055 ld $55 * 5 times 2a10 009a ld $9a 2a11 00a6 ld $a6 2a12 0059 ld $59 2a13 009a ld $9a 2a14 00a6 ld $a6 2a15 0029 ld $29 2a16 009a ld $9a 2a17 00a2 ld $a2 2a18 0069 ld $69 2a19 005a ld $5a 2a1a 0055 ld $55 2a1b 0055 ld $55 2a1c 0055 ld $55 2a1d 0055 ld $55 2a1e 0095 ld $95 2a1f 00a6 ld $a6 2a20 0056 ld $56 2a21 0099 ld $99 2a22 0055 ld $55 2a23 0056 ld $56 2a24 0065 ld $65 2a25 005a ld $5a 2a26 009a ld $9a 2a27 006a ld $6a 2a28 00a5 ld $a5 2a29 00aa ld $aa 2a2a 0095 ld $95 2a2b 0099 ld $99 2a2c 0099 ld $99 2a2d 0055 ld $55 2a2e 0055 ld $55 2a2f 0056 ld $56 2a30 0065 ld $65 2a31 0049 ld $49 2a32 0096 ld $96 2a33 0065 ld $65 2a34 0099 ld $99 2a35 0096 ld $96 2a36 0065 ld $65 2a37 005a ld $5a 2a38 00a5 ld $a5 2a39 0055 ld $55 2a3a 005a ld $5a 2a3b 0055 ld $55 2a3c 0055 ld $55 2a3d 0055 ld $55 * 11 times 2a46 0095 ld $95 2a47 0056 ld $56 2a48 0055 ld $55 2a49 0055 ld $55 2a4a 0055 ld $55 2a4b 0054 ld $54 2a4c 0055 ld $55 2a4d 00a5 ld $a5 2a4e 0055 ld $55 2a4f 00a9 ld $a9 2a50 0059 ld $59 2a51 0055 ld $55 2a52 0055 ld $55 2a53 0059 ld $59 2a54 0065 ld $65 2a55 00a5 ld $a5 2a56 0096 ld $96 2a57 00a9 ld $a9 2a58 005a ld $5a 2a59 005a ld $5a 2a5a 006a ld $6a 2a5b 0065 ld $65 2a5c 0056 ld $56 2a5d 0065 ld $65 2a5e 0055 ld $55 2a5f 0095 ld $95 2a60 0055 ld $55 2a61 0099 ld $99 2a62 0096 ld $96 2a63 0065 ld $65 2a64 005a ld $5a 2a65 0096 ld $96 2a66 006a ld $6a 2a67 005a ld $5a 2a68 0095 ld $95 2a69 0055 ld $55 2a6a 0055 ld $55 2a6b 0055 ld $55 2a6c 005a ld $5a 2a6d 0059 ld $59 2a6e 0055 ld $55 2a6f 0058 ld $58 2a70 0055 ld $55 2a71 0051 ld $51 2a72 0055 ld $55 2a73 0055 ld $55 2a74 0055 ld $55 2a75 0054 ld $54 2a76 0055 ld $55 2a77 0065 ld $65 2a78 0055 ld $55 2a79 0045 ld $45 2a7a 0055 ld $55 2a7b 0055 ld $55 2a7c 005a ld $5a 2a7d 00a9 ld $a9 2a7e 0095 ld $95 2a7f 0056 ld $56 2a80 0099 ld $99 2a81 0095 ld $95 2a82 005a ld $5a 2a83 0095 ld $95 2a84 00a9 ld $a9 2a85 0099 ld $99 2a86 0096 ld $96 2a87 00aa ld $aa 2a88 00a9 ld $a9 2a89 00aa ld $aa 2a8a 00a5 ld $a5 2a8b 0066 ld $66 2a8c 006a ld $6a 2a8d 0055 ld $55 2a8e 0055 ld $55 2a8f 0056 ld $56 2a90 0065 ld $65 2a91 0059 ld $59 2a92 005a ld $5a 2a93 0065 ld $65 2a94 00a9 ld $a9 2a95 00d6 ld $d6 2a96 0069 ld $69 2a97 00a5 ld $a5 2a98 00a6 ld $a6 2a99 0055 ld $55 2a9a 0059 ld $59 2a9b 0055 ld $55 2a9c 0055 ld $55 2a9d 0055 ld $55 2a9e 0055 ld $55 2a9f 0065 ld $65 2aa0 008a ld $8a 2aa1 00a6 ld $a6 2aa2 0068 ld $68 2aa3 008a ld $8a 2aa4 0056 ld $56 2aa5 0068 ld $68 2aa6 004a ld $4a 2aa7 00a2 ld $a2 2aa8 0064 ld $64 2aa9 009a ld $9a 2aaa 0056 ld $56 2aab 0059 ld $59 2aac 00a9 ld $a9 2aad 0095 ld $95 2aae 006a ld $6a 2aaf 00a5 ld $a5 2ab0 0056 ld $56 2ab1 0055 ld $55 2ab2 0059 ld $59 2ab3 0095 ld $95 2ab4 0056 ld $56 2ab5 00a9 ld $a9 2ab6 00aa ld $aa 2ab7 00a9 ld $a9 2ab8 0095 ld $95 2ab9 005a ld $5a 2aba 00a9 ld $a9 2abb 0095 ld $95 2abc 0099 ld $99 2abd 00a5 ld $a5 2abe 0055 ld $55 2abf 0095 ld $95 2ac0 0055 ld $55 2ac1 0059 ld $59 2ac2 0055 ld $55 2ac3 0065 ld $65 2ac4 005a ld $5a 2ac5 009a ld $9a 2ac6 00a9 ld $a9 2ac7 0099 ld $99 2ac8 0096 ld $96 2ac9 0065 ld $65 2aca 0055 ld $55 2acb 0045 ld $45 2acc 0055 ld $55 2acd 0055 ld $55 2ace 0055 ld $55 2acf 0055 ld $55 2ad0 0095 ld $95 2ad1 00a6 ld $a6 2ad2 0068 ld $68 2ad3 008a ld $8a 2ad4 0092 ld $92 2ad5 0068 ld $68 2ad6 008a ld $8a 2ad7 0055 ld $55 2ad8 0069 ld $69 2ad9 009a ld $9a 2ada 0056 ld $56 2adb 0095 ld $95 2adc 009a ld $9a 2add 0056 ld $56 2ade 00aa ld $aa 2adf 0055 ld $55 2ae0 0055 ld $55 2ae1 006a ld $6a 2ae2 0055 ld $55 2ae3 00aa ld $aa 2ae4 00a9 ld $a9 2ae5 0099 ld $99 2ae6 0096 ld $96 2ae7 006a ld $6a 2ae8 00a9 ld $a9 2ae9 00aa ld $aa 2aea 0095 ld $95 2aeb 006a ld $6a 2aec 006a ld $6a 2aed 0055 ld $55 2aee 0066 ld $66 2aef 0066 ld $66 2af0 0065 ld $65 2af1 0055 ld $55 2af2 0099 ld $99 2af3 0095 ld $95 2af4 0099 ld $99 2af5 00a5 ld $a5 2af6 0066 ld $66 2af7 00aa ld $aa 2af8 00a6 ld $a6 2af9 0000 ld $00 2afa 0000 ld $00 2afb fe00 bra ac ;+-----------------------------------+ 2afc fcfd bra $2afd ;| | 2afd 1404 ld $04,y ;| Trampoline for page $2a00 lookups | 2afe e068 jmp y,$68 ;| | 2aff c218 st [$18] ;+-----------------------------------+ 2b00 0065 ld $65 2b01 0059 ld $59 2b02 0055 ld $55 2b03 0055 ld $55 2b04 0055 ld $55 * 5 times 2b07 005a ld $5a 2b08 00a2 ld $a2 2b09 0029 ld $29 2b0a 009a ld $9a 2b0b 00a6 ld $a6 2b0c 0029 ld $29 2b0d 0099 ld $99 2b0e 0096 ld $96 2b0f 0069 ld $69 2b10 0095 ld $95 2b11 0056 ld $56 2b12 0099 ld $99 2b13 0059 ld $59 2b14 0055 ld $55 2b15 0055 ld $55 2b16 0055 ld $55 2b17 00aa ld $aa 2b18 00a5 ld $a5 2b19 005a ld $5a 2b1a 0096 ld $96 2b1b 006a ld $6a 2b1c 006a ld $6a 2b1d 00aa ld $aa 2b1e 00aa ld $aa 2b1f 005a ld $5a 2b20 006a ld $6a 2b21 0066 ld $66 2b22 00aa ld $aa 2b23 0095 ld $95 2b24 0096 ld $96 2b25 0059 ld $59 2b26 0099 ld $99 2b27 0095 ld $95 2b28 0099 ld $99 2b29 0059 ld $59 2b2a 0065 ld $65 2b2b 0056 ld $56 2b2c 009a ld $9a 2b2d 00a9 ld $a9 2b2e 006a ld $6a 2b2f 00ea ld $ea 2b30 0069 ld $69 2b31 0055 ld $55 2b32 0056 ld $56 2b33 0015 ld $15 2b34 0054 ld $54 2b35 0055 ld $55 2b36 0015 ld $15 2b37 0055 ld $55 2b38 00a5 ld $a5 2b39 0055 ld $55 2b3a 0049 ld $49 2b3b 00a5 ld $a5 2b3c 0055 ld $55 2b3d 005a ld $5a 2b3e 0055 ld $55 2b3f 0059 ld $59 2b40 0055 ld $55 2b41 0099 ld $99 2b42 0055 ld $55 2b43 0056 ld $56 2b44 0055 ld $55 2b45 0055 ld $55 2b46 005a ld $5a 2b47 0055 ld $55 2b48 0065 ld $65 2b49 00aa ld $aa 2b4a 009a ld $9a 2b4b 00a9 ld $a9 2b4c 00a9 ld $a9 2b4d 00aa ld $aa 2b4e 006a ld $6a 2b4f 006a ld $6a 2b50 00a5 ld $a5 2b51 00aa ld $aa 2b52 00aa ld $aa 2b53 00aa ld $aa 2b54 0095 ld $95 2b55 0056 ld $56 2b56 0055 ld $55 2b57 0056 ld $56 2b58 0055 ld $55 2b59 0059 ld $59 2b5a 0099 ld $99 2b5b 0059 ld $59 2b5c 00a9 ld $a9 2b5d 00a5 ld $a5 2b5e 009a ld $9a 2b5f 00aa ld $aa 2b60 006a ld $6a 2b61 0059 ld $59 2b62 0052 ld $52 2b63 0055 ld $55 2b64 0055 ld $55 2b65 0041 ld $41 2b66 0055 ld $55 2b67 0055 ld $55 2b68 0051 ld $51 2b69 0055 ld $55 2b6a 0055 ld $55 2b6b 0055 ld $55 2b6c 0014 ld $14 2b6d 0055 ld $55 2b6e 0091 ld $91 2b6f 0015 ld $15 2b70 0055 ld $55 2b71 0055 ld $55 2b72 0055 ld $55 * 6 times 2b76 0059 ld $59 2b77 00aa ld $aa 2b78 00a5 ld $a5 2b79 00a9 ld $a9 2b7a 00a7 ld $a7 2b7b 00aa ld $aa 2b7c 009a ld $9a 2b7d 009a ld $9a 2b7e 00aa ld $aa 2b7f 006a ld $6a 2b80 00aa ld $aa 2b81 00aa ld $aa 2b82 00a9 ld $a9 2b83 00aa ld $aa 2b84 00aa ld $aa 2b85 00a5 ld $a5 2b86 009a ld $9a 2b87 0099 ld $99 2b88 006a ld $6a 2b89 0055 ld $55 2b8a 00a6 ld $a6 2b8b 0056 ld $56 2b8c 00aa ld $aa 2b8d 00aa ld $aa 2b8e 00ad ld $ad 2b8f 00aa ld $aa 2b90 00b9 ld $b9 2b91 009a ld $9a 2b92 0096 ld $96 2b93 0065 ld $65 2b94 0055 ld $55 2b95 0055 ld $55 2b96 0055 ld $55 * 6 times 2b9a 0095 ld $95 2b9b 0056 ld $56 2b9c 0055 ld $55 2b9d 0059 ld $59 2b9e 0055 ld $55 2b9f 0055 ld $55 2ba0 0055 ld $55 2ba1 0056 ld $56 2ba2 0055 ld $55 2ba3 0059 ld $59 2ba4 0095 ld $95 2ba5 0065 ld $65 2ba6 0059 ld $59 2ba7 00aa ld $aa 2ba8 00b9 ld $b9 2ba9 00aa ld $aa 2baa 00ea ld $ea 2bab 00ba ld $ba 2bac 00aa ld $aa 2bad 00ab ld $ab 2bae 00aa ld $aa 2baf 009a ld $9a 2bb0 00aa ld $aa 2bb1 00aa ld $aa 2bb2 00aa ld $aa 2bb3 00aa ld $aa 2bb4 0000 ld $00 2bb5 0000 ld $00 2bb6 0000 ld $00 2bb7 00ff ld $ff 2bb8 00ff ld $ff 2bb9 00ff ld $ff * 66 times 2bf9 0000 ld $00 2bfa 0000 ld $00 2bfb fe00 bra ac ;+-----------------------------------+ 2bfc fcfd bra $2bfd ;| | 2bfd 1404 ld $04,y ;| Trampoline for page $2b00 lookups | 2bfe e068 jmp y,$68 ;| | 2bff c218 st [$18] ;+-----------------------------------+ 2c00 00ff ld $ff 2c01 00ff ld $ff 2c02 00ff ld $ff 2c03 00ea ld $ea 2c04 00af ld $af 2c05 00fa ld $fa 2c06 00aa ld $aa 2c07 00fe ld $fe 2c08 00ea ld $ea 2c09 00ff ld $ff 2c0a 00ff ld $ff 2c0b 00ff ld $ff * 38 times 2c2f 00ab ld $ab 2c30 006a ld $6a 2c31 009a ld $9a 2c32 00a6 ld $a6 2c33 0065 ld $65 2c34 009a ld $9a 2c35 009a ld $9a 2c36 00a9 ld $a9 2c37 009a ld $9a 2c38 00aa ld $aa 2c39 00a9 ld $a9 2c3a 00aa ld $aa 2c3b 00ea ld $ea 2c3c 00ef ld $ef 2c3d 00ff ld $ff 2c3e 00ff ld $ff 2c3f 00ff ld $ff * 32 times 2c5d 006a ld $6a 2c5e 009a ld $9a 2c5f 0096 ld $96 2c60 0069 ld $69 2c61 0059 ld $59 2c62 00a6 ld $a6 2c63 00a5 ld $a5 2c64 005a ld $5a 2c65 00a6 ld $a6 2c66 0065 ld $65 2c67 005a ld $5a 2c68 00aa ld $aa 2c69 00a9 ld $a9 2c6a 009a ld $9a 2c6b 00aa ld $aa 2c6c 00a9 ld $a9 2c6d 00aa ld $aa 2c6e 00fa ld $fa 2c6f 00ff ld $ff 2c70 00ff ld $ff 2c71 00ff ld $ff * 28 times 2c8b 00af ld $af 2c8c 00a6 ld $a6 2c8d 0065 ld $65 2c8e 005a ld $5a 2c8f 00a6 ld $a6 2c90 0055 ld $55 2c91 005a ld $5a 2c92 00a6 ld $a6 2c93 0065 ld $65 2c94 009a ld $9a 2c95 0096 ld $96 2c96 006a ld $6a 2c97 009a ld $9a 2c98 00aa ld $aa 2c99 00b9 ld $b9 2c9a 009a ld $9a 2c9b 00ab ld $ab 2c9c 00ba ld $ba 2c9d 00ae ld $ae 2c9e 00ea ld $ea 2c9f 00ea ld $ea 2ca0 00ff ld $ff 2ca1 00ff ld $ff 2ca2 00ff ld $ff * 26 times 2cba 006a ld $6a 2cbb 005a ld $5a 2cbc 00a6 ld $a6 2cbd 0065 ld $65 2cbe 005a ld $5a 2cbf 00a6 ld $a6 2cc0 0065 ld $65 2cc1 005a ld $5a 2cc2 00a6 ld $a6 2cc3 0065 ld $65 2cc4 005a ld $5a 2cc5 00a6 ld $a6 2cc6 0069 ld $69 2cc7 0099 ld $99 2cc8 0096 ld $96 2cc9 00a9 ld $a9 2cca 009e ld $9e 2ccb 00ea ld $ea 2ccc 0069 ld $69 2ccd 00aa ld $aa 2cce 00ea ld $ea 2ccf 00ae ld $ae 2cd0 00ae ld $ae 2cd1 00fa ld $fa 2cd2 00ff ld $ff 2cd3 00ff ld $ff 2cd4 00ff ld $ff * 22 times 2ce8 00af ld $af 2ce9 00a6 ld $a6 2cea 0065 ld $65 2ceb 005a ld $5a 2cec 00a2 ld $a2 2ced 0065 ld $65 2cee 009a ld $9a 2cef 0096 ld $96 2cf0 0065 ld $65 2cf1 005a ld $5a 2cf2 0096 ld $96 2cf3 0059 ld $59 2cf4 0099 ld $99 2cf5 0096 ld $96 2cf6 0069 ld $69 2cf7 0099 ld $99 2cf8 00a6 ld $a6 2cf9 0000 ld $00 2cfa 0000 ld $00 2cfb fe00 bra ac ;+-----------------------------------+ 2cfc fcfd bra $2cfd ;| | 2cfd 1404 ld $04,y ;| Trampoline for page $2c00 lookups | 2cfe e068 jmp y,$68 ;| | 2cff c218 st [$18] ;+-----------------------------------+ 2d00 0066 ld $66 2d01 009a ld $9a 2d02 00ea ld $ea 2d03 00a9 ld $a9 2d04 00ae ld $ae 2d05 00e6 ld $e6 2d06 00aa ld $aa 2d07 00ae ld $ae 2d08 00fa ld $fa 2d09 00eb ld $eb 2d0a 00ff ld $ff 2d0b 00ff ld $ff 2d0c 00ff ld $ff * 20 times 2d1e 00bf ld $bf 2d1f 009a ld $9a 2d20 0096 ld $96 2d21 0025 ld $25 2d22 0059 ld $59 2d23 00a6 ld $a6 2d24 0065 ld $65 2d25 0049 ld $49 2d26 0096 ld $96 2d27 0068 ld $68 2d28 0089 ld $89 2d29 0095 ld $95 2d2a 0065 ld $65 2d2b 005a ld $5a 2d2c 0096 ld $96 2d2d 0065 ld $65 2d2e 005a ld $5a 2d2f 0096 ld $96 2d30 0069 ld $69 2d31 009e ld $9e 2d32 0096 ld $96 2d33 006a ld $6a 2d34 009a ld $9a 2d35 00aa ld $aa 2d36 00a9 ld $a9 2d37 00aa ld $aa 2d38 00ab ld $ab 2d39 00ba ld $ba 2d3a 00ea ld $ea 2d3b 00ff ld $ff 2d3c 00ff ld $ff 2d3d 00ff ld $ff * 19 times 2d4e 0025 ld $25 2d4f 0059 ld $59 2d50 0052 ld $52 2d51 0054 ld $54 2d52 0049 ld $49 2d53 0092 ld $92 2d54 0025 ld $25 2d55 005a ld $5a 2d56 00a6 ld $a6 2d57 0065 ld $65 2d58 0049 ld $49 2d59 00a6 ld $a6 2d5a 0064 ld $64 2d5b 0049 ld $49 2d5c 00a5 ld $a5 2d5d 0065 ld $65 2d5e 005a ld $5a 2d5f 00a6 ld $a6 2d60 0065 ld $65 2d61 0099 ld $99 2d62 00a6 ld $a6 2d63 00a5 ld $a5 2d64 005a ld $5a 2d65 00ea ld $ea 2d66 00a9 ld $a9 2d67 009a ld $9a 2d68 00ea ld $ea 2d69 00aa ld $aa 2d6a 00ae ld $ae 2d6b 00fa ld $fa 2d6c 00ff ld $ff 2d6d 00ff ld $ff 2d6e 00ff ld $ff * 16 times 2d7c 00ef ld $ef 2d7d 0096 ld $96 2d7e 0015 ld $15 2d7f 0045 ld $45 2d80 0096 ld $96 2d81 0024 ld $24 2d82 0059 ld $59 2d83 0091 ld $91 2d84 0069 ld $69 2d85 0099 ld $99 2d86 0052 ld $52 2d87 0064 ld $64 2d88 0099 ld $99 2d89 0096 ld $96 2d8a 0025 ld $25 2d8b 0099 ld $99 2d8c 0096 ld $96 2d8d 0065 ld $65 2d8e 0099 ld $99 2d8f 0096 ld $96 2d90 0069 ld $69 2d91 005a ld $5a 2d92 00ea ld $ea 2d93 0069 ld $69 2d94 009e ld $9e 2d95 00a6 ld $a6 2d96 006a ld $6a 2d97 00ae ld $ae 2d98 00e6 ld $e6 2d99 00aa ld $aa 2d9a 00af ld $af 2d9b 00ea ld $ea 2d9c 00ea ld $ea 2d9d 00ff ld $ff 2d9e 00ff ld $ff 2d9f 00ff ld $ff * 15 times 2dac 005f ld $5f 2dad 0052 ld $52 2dae 0024 ld $24 2daf 0049 ld $49 2db0 0091 ld $91 2db1 0025 ld $25 2db2 0045 ld $45 2db3 00a6 ld $a6 2db4 0024 ld $24 2db5 0059 ld $59 2db6 00a2 ld $a2 2db7 0025 ld $25 2db8 005a ld $5a 2db9 0092 ld $92 2dba 0069 ld $69 2dbb 0049 ld $49 2dbc 00a6 ld $a6 2dbd 0064 ld $64 2dbe 005a ld $5a 2dbf 00a6 ld $a6 2dc0 0075 ld $75 2dc1 009a ld $9a 2dc2 00e6 ld $e6 2dc3 0066 ld $66 2dc4 00aa ld $aa 2dc5 00eb ld $eb 2dc6 00a9 ld $a9 2dc7 00ae ld $ae 2dc8 00ea ld $ea 2dc9 00aa ld $aa 2dca 00ae ld $ae 2dcb 00fb ld $fb 2dcc 00fa ld $fa 2dcd 00ff ld $ff 2dce 00ff ld $ff 2dcf 00ff ld $ff * 14 times 2ddb 007f ld $7f 2ddc 0049 ld $49 2ddd 0091 ld $91 2dde 0025 ld $25 2ddf 0059 ld $59 2de0 0096 ld $96 2de1 0024 ld $24 2de2 0059 ld $59 2de3 0092 ld $92 2de4 0064 ld $64 2de5 0049 ld $49 2de6 0092 ld $92 2de7 0069 ld $69 2de8 0099 ld $99 2de9 0092 ld $92 2dea 0025 ld $25 2deb 0055 ld $55 2dec 0096 ld $96 2ded 0079 ld $79 2dee 005a ld $5a 2def 00a6 ld $a6 2df0 0069 ld $69 2df1 009d ld $9d 2df2 0096 ld $96 2df3 0069 ld $69 2df4 0099 ld $99 2df5 0096 ld $96 2df6 006a ld $6a 2df7 00ae ld $ae 2df8 00e6 ld $e6 2df9 0000 ld $00 2dfa 0000 ld $00 2dfb fe00 bra ac ;+-----------------------------------+ 2dfc fcfd bra $2dfd ;| | 2dfd 1404 ld $04,y ;| Trampoline for page $2d00 lookups | 2dfe e068 jmp y,$68 ;| | 2dff c218 st [$18] ;+-----------------------------------+ 2e00 00a9 ld $a9 2e01 00ae ld $ae 2e02 00ea ld $ea 2e03 00ae ld $ae 2e04 00ae ld $ae 2e05 00fe ld $fe 2e06 00ff ld $ff 2e07 00ff ld $ff 2e08 00ff ld $ff * 12 times 2e12 0025 ld $25 2e13 0045 ld $45 2e14 0096 ld $96 2e15 0014 ld $14 2e16 0045 ld $45 2e17 0051 ld $51 2e18 0014 ld $14 2e19 0045 ld $45 2e1a 0051 ld $51 2e1b 0015 ld $15 2e1c 0045 ld $45 2e1d 0052 ld $52 2e1e 0025 ld $25 2e1f 0049 ld $49 2e20 0056 ld $56 2e21 0064 ld $64 2e22 0049 ld $49 2e23 0055 ld $55 2e24 0065 ld $65 2e25 0049 ld $49 2e26 0096 ld $96 2e27 0069 ld $69 2e28 0099 ld $99 2e29 0096 ld $96 2e2a 0069 ld $69 2e2b 0099 ld $99 2e2c 0096 ld $96 2e2d 00a9 ld $a9 2e2e 009a ld $9a 2e2f 00aa ld $aa 2e30 00a9 ld $a9 2e31 00aa ld $aa 2e32 00ab ld $ab 2e33 00ba ld $ba 2e34 00ae ld $ae 2e35 00fa ld $fa 2e36 00ff ld $ff 2e37 00ff ld $ff 2e38 00ff ld $ff * 11 times 2e41 00ab ld $ab 2e42 0014 ld $14 2e43 0044 ld $44 2e44 0041 ld $41 2e45 0014 ld $14 2e46 0004 ld $04 2e47 0051 ld $51 2e48 0010 ld $10 2e49 0005 ld $05 2e4a 0041 ld $41 2e4b 0010 ld $10 2e4c 0005 ld $05 2e4d 0051 ld $51 2e4e 0010 ld $10 2e4f 0005 ld $05 2e50 0051 ld $51 2e51 0014 ld $14 2e52 0045 ld $45 2e53 0091 ld $91 2e54 0014 ld $14 2e55 0055 ld $55 2e56 0052 ld $52 2e57 0065 ld $65 2e58 0055 ld $55 2e59 0096 ld $96 2e5a 0065 ld $65 2e5b 0059 ld $59 2e5c 00a6 ld $a6 2e5d 0065 ld $65 2e5e 0099 ld $99 2e5f 0096 ld $96 2e60 00a9 ld $a9 2e61 009a ld $9a 2e62 00aa ld $aa 2e63 00aa ld $aa 2e64 00aa ld $aa 2e65 00ab ld $ab 2e66 00ea ld $ea 2e67 00ff ld $ff 2e68 00ff ld $ff 2e69 00ff ld $ff * 9 times 2e70 00af ld $af 2e71 0042 ld $42 2e72 0010 ld $10 2e73 0005 ld $05 2e74 0041 ld $41 2e75 0010 ld $10 2e76 0005 ld $05 2e77 0041 ld $41 2e78 0010 ld $10 2e79 0044 ld $44 2e7a 0041 ld $41 2e7b 0014 ld $14 2e7c 0004 ld $04 2e7d 0051 ld $51 2e7e 0010 ld $10 2e7f 0045 ld $45 2e80 0041 ld $41 2e81 0054 ld $54 2e82 0044 ld $44 2e83 0045 ld $45 2e84 0054 ld $54 2e85 0059 ld $59 2e86 0055 ld $55 2e87 0064 ld $64 2e88 0045 ld $45 2e89 0066 ld $66 2e8a 0065 ld $65 2e8b 0056 ld $56 2e8c 0096 ld $96 2e8d 00a9 ld $a9 2e8e 0099 ld $99 2e8f 009a ld $9a 2e90 00a9 ld $a9 2e91 009a ld $9a 2e92 00ea ld $ea 2e93 00aa ld $aa 2e94 00af ld $af 2e95 00ea ld $ea 2e96 00ea ld $ea 2e97 00ff ld $ff 2e98 00ff ld $ff 2e99 00ff ld $ff * 9 times 2ea0 000f ld $0f 2ea1 0051 ld $51 2ea2 0010 ld $10 2ea3 0010 ld $10 2ea4 0040 ld $40 2ea5 0014 ld $14 2ea6 0004 ld $04 2ea7 0041 ld $41 2ea8 0010 ld $10 2ea9 0005 ld $05 2eaa 0041 ld $41 2eab 0010 ld $10 2eac 0004 ld $04 2ead 0051 ld $51 2eae 0010 ld $10 2eaf 0004 ld $04 2eb0 0051 ld $51 2eb1 0010 ld $10 2eb2 0005 ld $05 2eb3 0051 ld $51 2eb4 0054 ld $54 2eb5 0005 ld $05 2eb6 0051 ld $51 2eb7 0054 ld $54 2eb8 0045 ld $45 2eb9 0056 ld $56 2eba 0065 ld $65 2ebb 0055 ld $55 2ebc 0096 ld $96 2ebd 0055 ld $55 2ebe 005a ld $5a 2ebf 00a5 ld $a5 2ec0 0065 ld $65 2ec1 006a ld $6a 2ec2 00a6 ld $a6 2ec3 006a ld $6a 2ec4 00aa ld $aa 2ec5 00aa ld $aa 2ec6 00aa ld $aa 2ec7 00aa ld $aa 2ec8 00fe ld $fe 2ec9 00ff ld $ff 2eca 00ff ld $ff 2ecb 00ff ld $ff * 7 times 2ed0 005f ld $5f 2ed1 0051 ld $51 2ed2 0010 ld $10 2ed3 0010 ld $10 2ed4 0050 ld $50 2ed5 0010 ld $10 2ed6 0010 ld $10 2ed7 0050 ld $50 2ed8 0040 ld $40 2ed9 0040 ld $40 2eda 0001 ld $01 2edb 0001 ld $01 2edc 0044 ld $44 2edd 0041 ld $41 2ede 0014 ld $14 2edf 0044 ld $44 2ee0 0041 ld $41 2ee1 0014 ld $14 2ee2 0055 ld $55 2ee3 0041 ld $41 2ee4 0054 ld $54 2ee5 0005 ld $05 2ee6 0095 ld $95 2ee7 0010 ld $10 2ee8 0055 ld $55 2ee9 0056 ld $56 2eea 0025 ld $25 2eeb 0055 ld $55 2eec 0095 ld $95 2eed 0054 ld $54 2eee 0099 ld $99 2eef 0095 ld $95 2ef0 0069 ld $69 2ef1 0095 ld $95 2ef2 009a ld $9a 2ef3 00a9 ld $a9 2ef4 009a ld $9a 2ef5 00aa ld $aa 2ef6 00a9 ld $a9 2ef7 00aa ld $aa 2ef8 00ea ld $ea 2ef9 0000 ld $00 2efa 0000 ld $00 2efb fe00 bra ac ;+-----------------------------------+ 2efc fcfd bra $2efd ;| | 2efd 1404 ld $04,y ;| Trampoline for page $2e00 lookups | 2efe e068 jmp y,$68 ;| | 2eff c218 st [$18] ;+-----------------------------------+ 2f00 00aa ld $aa 2f01 00ae ld $ae 2f02 00fa ld $fa 2f03 00ff ld $ff 2f04 00ff ld $ff 2f05 00ff ld $ff * 6 times 2f09 00bf ld $bf 2f0a 004a ld $4a 2f0b 0041 ld $41 2f0c 0014 ld $14 2f0d 0005 ld $05 2f0e 0051 ld $51 2f0f 0014 ld $14 2f10 0044 ld $44 2f11 0041 ld $41 2f12 0014 ld $14 2f13 0005 ld $05 2f14 0051 ld $51 2f15 0010 ld $10 2f16 0045 ld $45 2f17 0051 ld $51 2f18 0011 ld $11 2f19 0005 ld $05 2f1a 0051 ld $51 2f1b 0054 ld $54 2f1c 0049 ld $49 2f1d 0051 ld $51 2f1e 0025 ld $25 2f1f 0055 ld $55 2f20 0051 ld $51 2f21 0054 ld $54 2f22 0055 ld $55 2f23 0056 ld $56 2f24 0069 ld $69 2f25 0059 ld $59 2f26 0066 ld $66 2f27 0065 ld $65 2f28 005a ld $5a 2f29 00aa ld $aa 2f2a 0065 ld $65 2f2b 006a ld $6a 2f2c 00a6 ld $a6 2f2d 00aa ld $aa 2f2e 009a ld $9a 2f2f 00ab ld $ab 2f30 00aa ld $aa 2f31 00aa ld $aa 2f32 00aa ld $aa 2f33 00ff ld $ff 2f34 00ff ld $ff 2f35 00ff ld $ff * 6 times 2f39 007f ld $7f 2f3a 0005 ld $05 2f3b 0051 ld $51 2f3c 0010 ld $10 2f3d 0004 ld $04 2f3e 0004 ld $04 2f3f 0010 ld $10 2f40 0004 ld $04 2f41 0041 ld $41 2f42 0010 ld $10 2f43 0004 ld $04 2f44 0015 ld $15 2f45 0010 ld $10 2f46 0004 ld $04 2f47 0041 ld $41 2f48 0010 ld $10 2f49 0005 ld $05 2f4a 0051 ld $51 2f4b 0010 ld $10 2f4c 0044 ld $44 2f4d 0041 ld $41 2f4e 0015 ld $15 2f4f 0005 ld $05 2f50 0051 ld $51 2f51 0015 ld $15 2f52 0059 ld $59 2f53 0051 ld $51 2f54 0064 ld $64 2f55 0055 ld $55 2f56 0055 ld $55 2f57 0065 ld $65 2f58 0055 ld $55 2f59 0066 ld $66 2f5a 0065 ld $65 2f5b 006a ld $6a 2f5c 00a6 ld $a6 2f5d 006a ld $6a 2f5e 00aa ld $aa 2f5f 00aa ld $aa 2f60 00aa ld $aa 2f61 00af ld $af 2f62 00ea ld $ea 2f63 00aa ld $aa 2f64 00fa ld $fa 2f65 00ff ld $ff 2f66 00ff ld $ff 2f67 00ff ld $ff 2f68 00ff ld $ff 2f69 00bf ld $bf 2f6a 004a ld $4a 2f6b 0041 ld $41 2f6c 0010 ld $10 2f6d 0010 ld $10 2f6e 0040 ld $40 2f6f 0040 ld $40 2f70 0040 ld $40 2f71 0001 ld $01 2f72 0003 ld $03 2f73 0001 ld $01 2f74 0004 ld $04 2f75 0010 ld $10 2f76 0010 ld $10 2f77 0040 ld $40 2f78 0040 ld $40 2f79 0040 ld $40 2f7a 0040 ld $40 2f7b 0004 ld $04 2f7c 0044 ld $44 2f7d 0001 ld $01 2f7e 0001 ld $01 2f7f 0005 ld $05 2f80 0051 ld $51 2f81 0010 ld $10 2f82 0005 ld $05 2f83 0055 ld $55 2f84 0010 ld $10 2f85 0015 ld $15 2f86 0051 ld $51 2f87 0054 ld $54 2f88 0045 ld $45 2f89 0056 ld $56 2f8a 0064 ld $64 2f8b 0055 ld $55 2f8c 0066 ld $66 2f8d 0065 ld $65 2f8e 0055 ld $55 2f8f 0066 ld $66 2f90 0065 ld $65 2f91 006a ld $6a 2f92 00a6 ld $a6 2f93 00ba ld $ba 2f94 00aa ld $aa 2f95 00a6 ld $a6 2f96 00aa ld $aa 2f97 00aa ld $aa 2f98 00fe ld $fe 2f99 00ff ld $ff 2f9a 00ff ld $ff 2f9b 00ff ld $ff 2f9c 00ff ld $ff 2f9d 009f ld $9f 2f9e 0042 ld $42 2f9f 0040 ld $40 2fa0 0050 ld $50 2fa1 0041 ld $41 2fa2 0040 ld $40 2fa3 0000 ld $00 2fa4 0041 ld $41 2fa5 0040 ld $40 2fa6 0000 ld $00 2fa7 0041 ld $41 2fa8 0010 ld $10 2fa9 0010 ld $10 2faa 0040 ld $40 2fab 0010 ld $10 2fac 0001 ld $01 2fad 0041 ld $41 2fae 0010 ld $10 2faf 0044 ld $44 2fb0 0001 ld $01 2fb1 0001 ld $01 2fb2 0044 ld $44 2fb3 0041 ld $41 2fb4 0014 ld $14 2fb5 0044 ld $44 2fb6 0051 ld $51 2fb7 0050 ld $50 2fb8 0045 ld $45 2fb9 0055 ld $55 2fba 0054 ld $54 2fbb 0055 ld $55 2fbc 0051 ld $51 2fbd 0065 ld $65 2fbe 0055 ld $55 2fbf 0056 ld $56 2fc0 0065 ld $65 2fc1 0095 ld $95 2fc2 00aa ld $aa 2fc3 00a5 ld $a5 2fc4 00aa ld $aa 2fc5 00a6 ld $a6 2fc6 00aa ld $aa 2fc7 009a ld $9a 2fc8 00ea ld $ea 2fc9 00aa ld $aa 2fca 00ae ld $ae 2fcb 00aa ld $aa 2fcc 00fe ld $fe 2fcd 00ff ld $ff 2fce 00ff ld $ff 2fcf 00ff ld $ff 2fd0 00ff ld $ff 2fd1 0047 ld $47 2fd2 0014 ld $14 2fd3 0004 ld $04 2fd4 0041 ld $41 2fd5 0010 ld $10 2fd6 0005 ld $05 2fd7 0041 ld $41 2fd8 0014 ld $14 2fd9 0004 ld $04 2fda 0051 ld $51 2fdb 0010 ld $10 2fdc 0005 ld $05 2fdd 0041 ld $41 2fde 0014 ld $14 2fdf 0044 ld $44 2fe0 0041 ld $41 2fe1 0014 ld $14 2fe2 0044 ld $44 2fe3 0041 ld $41 2fe4 0054 ld $54 2fe5 0044 ld $44 2fe6 0045 ld $45 2fe7 0014 ld $14 2fe8 0005 ld $05 2fe9 0095 ld $95 2fea 0054 ld $54 2feb 0049 ld $49 2fec 0095 ld $95 2fed 0015 ld $15 2fee 0059 ld $59 2fef 00a5 ld $a5 2ff0 0055 ld $55 2ff1 005a ld $5a 2ff2 0096 ld $96 2ff3 0069 ld $69 2ff4 0099 ld $99 2ff5 009a ld $9a 2ff6 00a9 ld $a9 2ff7 00aa ld $aa 2ff8 00aa ld $aa 2ff9 0000 ld $00 2ffa 0000 ld $00 2ffb fe00 bra ac ;+-----------------------------------+ 2ffc fcfd bra $2ffd ;| | 2ffd 1404 ld $04,y ;| Trampoline for page $2f00 lookups | 2ffe e068 jmp y,$68 ;| | 2fff c218 st [$18] ;+-----------------------------------+ 3000 00aa ld $aa 3001 00aa ld $aa 3002 00ab ld $ab 3003 00ea ld $ea 3004 00ff ld $ff 3005 00ff ld $ff 3006 00ff ld $ff 3007 00af ld $af 3008 0092 ld $92 3009 0014 ld $14 300a 0044 ld $44 300b 0051 ld $51 300c 0014 ld $14 300d 0045 ld $45 300e 0041 ld $41 300f 0015 ld $15 3010 0044 ld $44 3011 0041 ld $41 3012 0015 ld $15 3013 0005 ld $05 3014 0051 ld $51 3015 0014 ld $14 3016 0054 ld $54 3017 0051 ld $51 3018 0060 ld $60 3019 0045 ld $45 301a 0052 ld $52 301b 0014 ld $14 301c 0045 ld $45 301d 0091 ld $91 301e 0054 ld $54 301f 0059 ld $59 3020 0052 ld $52 3021 0025 ld $25 3022 0059 ld $59 3023 0096 ld $96 3024 0069 ld $69 3025 0099 ld $99 3026 0096 ld $96 3027 0069 ld $69 3028 0099 ld $99 3029 00aa ld $aa 302a 00aa ld $aa 302b 009a ld $9a 302c 00aa ld $aa 302d 00a9 ld $a9 302e 00aa ld $aa 302f 00ab ld $ab 3030 007a ld $7a 3031 00ab ld $ab 3032 00ab ld $ab 3033 00fa ld $fa 3034 00ff ld $ff 3035 00ff ld $ff 3036 00ff ld $ff 3037 00af ld $af 3038 0092 ld $92 3039 0025 ld $25 303a 0049 ld $49 303b 0091 ld $91 303c 0064 ld $64 303d 0049 ld $49 303e 0096 ld $96 303f 0024 ld $24 3040 0005 ld $05 3041 0052 ld $52 3042 0014 ld $14 3043 0048 ld $48 3044 0095 ld $95 3045 0024 ld $24 3046 0005 ld $05 3047 0052 ld $52 3048 0025 ld $25 3049 0044 ld $44 304a 0052 ld $52 304b 0021 ld $21 304c 0059 ld $59 304d 0052 ld $52 304e 0025 ld $25 304f 0049 ld $49 3050 0096 ld $96 3051 0065 ld $65 3052 0099 ld $99 3053 0096 ld $96 3054 0069 ld $69 3055 005a ld $5a 3056 00e6 ld $e6 3057 0069 ld $69 3058 00aa ld $aa 3059 00a6 ld $a6 305a 0079 ld $79 305b 00aa ld $aa 305c 00ab ld $ab 305d 007a ld $7a 305e 00ae ld $ae 305f 00ea ld $ea 3060 00be ld $be 3061 00aa ld $aa 3062 00bb ld $bb 3063 00ba ld $ba 3064 00fb ld $fb 3065 00ff ld $ff 3066 00ff ld $ff 3067 009f ld $9f 3068 00a7 ld $a7 3069 0039 ld $39 306a 0049 ld $49 306b 0096 ld $96 306c 0014 ld $14 306d 0049 ld $49 306e 0092 ld $92 306f 0069 ld $69 3070 0099 ld $99 3071 0053 ld $53 3072 0020 ld $20 3073 0055 ld $55 3074 0092 ld $92 3075 0065 ld $65 3076 0049 ld $49 3077 0092 ld $92 3078 0024 ld $24 3079 005a ld $5a 307a 0092 ld $92 307b 0014 ld $14 307c 0059 ld $59 307d 0092 ld $92 307e 0065 ld $65 307f 0099 ld $99 3080 00a6 ld $a6 3081 0068 ld $68 3082 005a ld $5a 3083 00a2 ld $a2 3084 0065 ld $65 3085 009a ld $9a 3086 00a7 ld $a7 3087 007a ld $7a 3088 00ae ld $ae 3089 00a7 ld $a7 308a 006a ld $6a 308b 00aa ld $aa 308c 00a7 ld $a7 308d 00ba ld $ba 308e 00ea ld $ea 308f 00fb ld $fb 3090 00ba ld $ba 3091 00af ld $af 3092 00eb ld $eb 3093 00be ld $be 3094 00fe ld $fe 3095 00ff ld $ff 3096 00bf ld $bf 3097 009f ld $9f 3098 00a7 ld $a7 3099 0078 ld $78 309a 005a ld $5a 309b 0092 ld $92 309c 0024 ld $24 309d 0099 ld $99 309e 00a6 ld $a6 309f 0034 ld $34 30a0 009a ld $9a 30a1 00a7 ld $a7 30a2 0065 ld $65 30a3 009e ld $9e 30a4 00a2 ld $a2 30a5 0079 ld $79 30a6 009e ld $9e 30a7 00a6 ld $a6 30a8 0065 ld $65 30a9 009a ld $9a 30aa 00a7 ld $a7 30ab 0079 ld $79 30ac 004a ld $4a 30ad 0092 ld $92 30ae 0025 ld $25 30af 004a ld $4a 30b0 0096 ld $96 30b1 0079 ld $79 30b2 0099 ld $99 30b3 00a7 ld $a7 30b4 0079 ld $79 30b5 00aa ld $aa 30b6 00a7 ld $a7 30b7 00b9 ld $b9 30b8 00aa ld $aa 30b9 00eb ld $eb 30ba 00b9 ld $b9 30bb 009e ld $9e 30bc 00ea ld $ea 30bd 00ae ld $ae 30be 00ee ld $ee 30bf 00eb ld $eb 30c0 00be ld $be 30c1 00ee ld $ee 30c2 00bb ld $bb 30c3 00bb ld $bb 30c4 00ff ld $ff 30c5 00ff ld $ff 30c6 00bf ld $bf 30c7 009b ld $9b 30c8 00e7 ld $e7 30c9 0029 ld $29 30ca 008d ld $8d 30cb 00e6 ld $e6 30cc 0068 ld $68 30cd 009d ld $9d 30ce 0093 ld $93 30cf 0068 ld $68 30d0 0049 ld $49 30d1 00e2 ld $e2 30d2 0079 ld $79 30d3 009a ld $9a 30d4 00e7 ld $e7 30d5 0029 ld $29 30d6 009a ld $9a 30d7 00e7 ld $e7 30d8 0079 ld $79 30d9 009e ld $9e 30da 00e7 ld $e7 30db 0079 ld $79 30dc 00ae ld $ae 30dd 00e6 ld $e6 30de 0069 ld $69 30df 009a ld $9a 30e0 00e6 ld $e6 30e1 0069 ld $69 30e2 009e ld $9e 30e3 00d6 ld $d6 30e4 0069 ld $69 30e5 009e ld $9e 30e6 00ea ld $ea 30e7 0069 ld $69 30e8 00ae ld $ae 30e9 00e6 ld $e6 30ea 00ba ld $ba 30eb 00aa ld $aa 30ec 00e7 ld $e7 30ed 00ba ld $ba 30ee 00af ld $af 30ef 00fe ld $fe 30f0 00ba ld $ba 30f1 00bf ld $bf 30f2 00fb ld $fb 30f3 00be ld $be 30f4 00fa ld $fa 30f5 00ff ld $ff 30f6 00bf ld $bf 30f7 009e ld $9e 30f8 00e6 ld $e6 30f9 0000 ld $00 30fa 0000 ld $00 30fb fe00 bra ac ;+-----------------------------------+ 30fc fcfd bra $30fd ;| | 30fd 1404 ld $04,y ;| Trampoline for page $3000 lookups | 30fe e068 jmp y,$68 ;| | 30ff c218 st [$18] ;+-----------------------------------+ 3100 0024 ld $24 3101 005a ld $5a 3102 0092 ld $92 3103 0024 ld $24 3104 005a ld $5a 3105 00a2 ld $a2 3106 0035 ld $35 3107 009a ld $9a 3108 0093 ld $93 3109 0029 ld $29 310a 0049 ld $49 310b 0092 ld $92 310c 0010 ld $10 310d 0054 ld $54 310e 00a2 ld $a2 310f 0079 ld $79 3110 005e ld $5e 3111 00a2 ld $a2 3112 0065 ld $65 3113 008a ld $8a 3114 00e6 ld $e6 3115 0069 ld $69 3116 009e ld $9e 3117 00a7 ld $a7 3118 0079 ld $79 3119 009a ld $9a 311a 00a7 ld $a7 311b 00b9 ld $b9 311c 0099 ld $99 311d 00a7 ld $a7 311e 007a ld $7a 311f 009a ld $9a 3120 00ab ld $ab 3121 00ba ld $ba 3122 00af ld $af 3123 00fb ld $fb 3124 00aa ld $aa 3125 00ee ld $ee 3126 00fb ld $fb 3127 00ba ld $ba 3128 00ab ld $ab 3129 00ab ld $ab 312a 00ba ld $ba 312b 00ee ld $ee 312c 00ff ld $ff 312d 007f ld $7f 312e 004a ld $4a 312f 0092 ld $92 3130 0024 ld $24 3131 0049 ld $49 3132 0092 ld $92 3133 0024 ld $24 3134 0049 ld $49 3135 0092 ld $92 3136 0024 ld $24 3137 0049 ld $49 3138 0092 ld $92 3139 0024 ld $24 313a 0049 ld $49 313b 0041 ld $41 313c 0010 ld $10 313d 0044 ld $44 313e 0095 ld $95 313f 0024 ld $24 3140 0059 ld $59 3141 0092 ld $92 3142 0025 ld $25 3143 0059 ld $59 3144 0092 ld $92 3145 0064 ld $64 3146 0059 ld $59 3147 0096 ld $96 3148 0065 ld $65 3149 0099 ld $99 314a 0096 ld $96 314b 0069 ld $69 314c 005a ld $5a 314d 00e6 ld $e6 314e 0065 ld $65 314f 00aa ld $aa 3150 00a6 ld $a6 3151 0069 ld $69 3152 00aa ld $aa 3153 00e6 ld $e6 3154 00ba ld $ba 3155 00aa ld $aa 3156 00ab ld $ab 3157 00ba ld $ba 3158 00ae ld $ae 3159 00fa ld $fa 315a 00ba ld $ba 315b 00fa ld $fa 315c 00fe ld $fe 315d 007f ld $7f 315e 0049 ld $49 315f 0096 ld $96 3160 0020 ld $20 3161 0005 ld $05 3162 0041 ld $41 3163 0014 ld $14 3164 0044 ld $44 3165 0092 ld $92 3166 0014 ld $14 3167 0048 ld $48 3168 0091 ld $91 3169 0014 ld $14 316a 0049 ld $49 316b 0041 ld $41 316c 0014 ld $14 316d 0045 ld $45 316e 0092 ld $92 316f 0025 ld $25 3170 0049 ld $49 3171 0091 ld $91 3172 0024 ld $24 3173 0045 ld $45 3174 0052 ld $52 3175 0015 ld $15 3176 0049 ld $49 3177 0095 ld $95 3178 0064 ld $64 3179 005a ld $5a 317a 00a6 ld $a6 317b 0065 ld $65 317c 009d ld $9d 317d 0096 ld $96 317e 0069 ld $69 317f 0059 ld $59 3180 00aa ld $aa 3181 00b5 ld $b5 3182 009a ld $9a 3183 00ab ld $ab 3184 00aa ld $aa 3185 00aa ld $aa 3186 00ea ld $ea 3187 00aa ld $aa 3188 00aa ld $aa 3189 00aa ld $aa 318a 00be ld $be 318b 00aa ld $aa 318c 00ff ld $ff 318d 007f ld $7f 318e 0049 ld $49 318f 0052 ld $52 3190 0024 ld $24 3191 0044 ld $44 3192 0042 ld $42 3193 0024 ld $24 3194 0049 ld $49 3195 0092 ld $92 3196 0024 ld $24 3197 0005 ld $05 3198 0092 ld $92 3199 0025 ld $25 319a 0048 ld $48 319b 0041 ld $41 319c 0024 ld $24 319d 0045 ld $45 319e 0092 ld $92 319f 0014 ld $14 31a0 0049 ld $49 31a1 0041 ld $41 31a2 0015 ld $15 31a3 0058 ld $58 31a4 0091 ld $91 31a5 0064 ld $64 31a6 0045 ld $45 31a7 0096 ld $96 31a8 0065 ld $65 31a9 0059 ld $59 31aa 00a6 ld $a6 31ab 0065 ld $65 31ac 009a ld $9a 31ad 0096 ld $96 31ae 0069 ld $69 31af 0099 ld $99 31b0 00a6 ld $a6 31b1 006a ld $6a 31b2 00aa ld $aa 31b3 00a7 ld $a7 31b4 00ba ld $ba 31b5 00ae ld $ae 31b6 00bb ld $bb 31b7 00ba ld $ba 31b8 00aa ld $aa 31b9 00eb ld $eb 31ba 00aa ld $aa 31bb 00ee ld $ee 31bc 00fe ld $fe 31bd 007f ld $7f 31be 004a ld $4a 31bf 0092 ld $92 31c0 0014 ld $14 31c1 0009 ld $09 31c2 0091 ld $91 31c3 0024 ld $24 31c4 0049 ld $49 31c5 0052 ld $52 31c6 0020 ld $20 31c7 0049 ld $49 31c8 0091 ld $91 31c9 0024 ld $24 31ca 0049 ld $49 31cb 0092 ld $92 31cc 0015 ld $15 31cd 0049 ld $49 31ce 0096 ld $96 31cf 0024 ld $24 31d0 0055 ld $55 31d1 0092 ld $92 31d2 0014 ld $14 31d3 0009 ld $09 31d4 0091 ld $91 31d5 0015 ld $15 31d6 0059 ld $59 31d7 0096 ld $96 31d8 0069 ld $69 31d9 0089 ld $89 31da 0097 ld $97 31db 0069 ld $69 31dc 009d ld $9d 31dd 009a ld $9a 31de 0079 ld $79 31df 00aa ld $aa 31e0 00a7 ld $a7 31e1 007a ld $7a 31e2 00ae ld $ae 31e3 00ea ld $ea 31e4 00ba ld $ba 31e5 00af ld $af 31e6 00ab ld $ab 31e7 00ba ld $ba 31e8 00ee ld $ee 31e9 00fa ld $fa 31ea 00ba ld $ba 31eb 00aa ld $aa 31ec 00ff ld $ff 31ed 007f ld $7f 31ee 004a ld $4a 31ef 0096 ld $96 31f0 0024 ld $24 31f1 0059 ld $59 31f2 0092 ld $92 31f3 0024 ld $24 31f4 0049 ld $49 31f5 0096 ld $96 31f6 0024 ld $24 31f7 0059 ld $59 31f8 0092 ld $92 31f9 0000 ld $00 31fa 0000 ld $00 31fb fe00 bra ac ;+-----------------------------------+ 31fc fcfd bra $31fd ;| | 31fd 1404 ld $04,y ;| Trampoline for page $3100 lookups | 31fe e068 jmp y,$68 ;| | 31ff c218 st [$18] ;+-----------------------------------+ 3200 0024 ld $24 3201 0049 ld $49 3202 0092 ld $92 3203 0024 ld $24 3204 0045 ld $45 3205 0096 ld $96 3206 0064 ld $64 3207 0049 ld $49 3208 0096 ld $96 3209 0064 ld $64 320a 0059 ld $59 320b 0092 ld $92 320c 0065 ld $65 320d 009a ld $9a 320e 0092 ld $92 320f 0069 ld $69 3210 0099 ld $99 3211 0096 ld $96 3212 0079 ld $79 3213 009a ld $9a 3214 00e7 ld $e7 3215 006a ld $6a 3216 00ae ld $ae 3217 00e6 ld $e6 3218 00ba ld $ba 3219 009a ld $9a 321a 00eb ld $eb 321b 00be ld $be 321c 00ee ld $ee 321d 00eb ld $eb 321e 00be ld $be 321f 00ee ld $ee 3220 00eb ld $eb 3221 00be ld $be 3222 00ea ld $ea 3223 00ff ld $ff 3224 007f ld $7f 3225 005a ld $5a 3226 00a2 ld $a2 3227 0064 ld $64 3228 0049 ld $49 3229 0092 ld $92 322a 0025 ld $25 322b 0059 ld $59 322c 00a2 ld $a2 322d 0025 ld $25 322e 004a ld $4a 322f 00a6 ld $a6 3230 0064 ld $64 3231 0049 ld $49 3232 0096 ld $96 3233 0064 ld $64 3234 0049 ld $49 3235 00a6 ld $a6 3236 0064 ld $64 3237 009e ld $9e 3238 00a6 ld $a6 3239 0065 ld $65 323a 009a ld $9a 323b 00e6 ld $e6 323c 0069 ld $69 323d 005e ld $5e 323e 00e6 ld $e6 323f 0069 ld $69 3240 009e ld $9e 3241 00a7 ld $a7 3242 0079 ld $79 3243 00aa ld $aa 3244 00ab ld $ab 3245 00b9 ld $b9 3246 009e ld $9e 3247 00ab ld $ab 3248 00b9 ld $b9 3249 00ae ld $ae 324a 00fb ld $fb 324b 00ba ld $ba 324c 00ab ld $ab 324d 00fb ld $fb 324e 00be ld $be 324f 00ea ld $ea 3250 00eb ld $eb 3251 00be ld $be 3252 00fe ld $fe 3253 00ff ld $ff 3254 007f ld $7f 3255 008a ld $8a 3256 0097 ld $97 3257 0029 ld $29 3258 009e ld $9e 3259 00a2 ld $a2 325a 0064 ld $64 325b 004a ld $4a 325c 00e6 ld $e6 325d 0024 ld $24 325e 0099 ld $99 325f 0093 ld $93 3260 0029 ld $29 3261 005a ld $5a 3262 00e6 ld $e6 3263 0068 ld $68 3264 008d ld $8d 3265 00d6 ld $d6 3266 0039 ld $39 3267 005a ld $5a 3268 00e3 ld $e3 3269 0029 ld $29 326a 009d ld $9d 326b 0096 ld $96 326c 0079 ld $79 326d 009a ld $9a 326e 00e7 ld $e7 326f 0079 ld $79 3270 009e ld $9e 3271 00ea ld $ea 3272 00b9 ld $b9 3273 009a ld $9a 3274 00e7 ld $e7 3275 006a ld $6a 3276 00ae ld $ae 3277 00eb ld $eb 3278 00be ld $be 3279 00ea ld $ea 327a 00eb ld $eb 327b 00be ld $be 327c 00ee ld $ee 327d 00eb ld $eb 327e 00be ld $be 327f 00fe ld $fe 3280 00eb ld $eb 3281 00ae ld $ae 3282 00ee ld $ee 3283 00ff ld $ff 3284 00bf ld $bf 3285 004e ld $4e 3286 00e6 ld $e6 3287 0064 ld $64 3288 004a ld $4a 3289 0097 ld $97 328a 0024 ld $24 328b 0049 ld $49 328c 0092 ld $92 328d 0024 ld $24 328e 0049 ld $49 328f 00a2 ld $a2 3290 0025 ld $25 3291 009d ld $9d 3292 0092 ld $92 3293 0064 ld $64 3294 0089 ld $89 3295 0097 ld $97 3296 0068 ld $68 3297 0049 ld $49 3298 00a6 ld $a6 3299 0064 ld $64 329a 005a ld $5a 329b 00a3 ld $a3 329c 0079 ld $79 329d 009a ld $9a 329e 00a7 ld $a7 329f 00b9 ld $b9 32a0 009a ld $9a 32a1 00a7 ld $a7 32a2 0079 ld $79 32a3 009a ld $9a 32a4 00ab ld $ab 32a5 00b9 ld $b9 32a6 009a ld $9a 32a7 00ab ld $ab 32a8 00b9 ld $b9 32a9 00ee ld $ee 32aa 00eb ld $eb 32ab 00ba ld $ba 32ac 00ab ld $ab 32ad 00ab ld $ab 32ae 00ba ld $ba 32af 00ab ld $ab 32b0 00fb ld $fb 32b1 00ba ld $ba 32b2 00bb ld $bb 32b3 00ff ld $ff 32b4 00bf ld $bf 32b5 009a ld $9a 32b6 00e7 ld $e7 32b7 0029 ld $29 32b8 005e ld $5e 32b9 00a2 ld $a2 32ba 0039 ld $39 32bb 005a ld $5a 32bc 00a3 ld $a3 32bd 0069 ld $69 32be 004e ld $4e 32bf 00e6 ld $e6 32c0 0068 ld $68 32c1 005e ld $5e 32c2 00e2 ld $e2 32c3 0069 ld $69 32c4 004a ld $4a 32c5 00e6 ld $e6 32c6 0065 ld $65 32c7 008e ld $8e 32c8 00d6 ld $d6 32c9 0069 ld $69 32ca 009e ld $9e 32cb 00e6 ld $e6 32cc 0069 ld $69 32cd 009e ld $9e 32ce 00a7 ld $a7 32cf 0079 ld $79 32d0 009a ld $9a 32d1 00eb ld $eb 32d2 00a9 ld $a9 32d3 009e ld $9e 32d4 00e6 ld $e6 32d5 006a ld $6a 32d6 00ae ld $ae 32d7 00fa ld $fa 32d8 00ba ld $ba 32d9 00ab ld $ab 32da 00fb ld $fb 32db 00ba ld $ba 32dc 00ae ld $ae 32dd 00fa ld $fa 32de 00aa ld $aa 32df 00ae ld $ae 32e0 00ea ld $ea 32e1 00aa ld $aa 32e2 00ef ld $ef 32e3 00ff ld $ff 32e4 00bf ld $bf 32e5 00af ld $af 32e6 00f7 ld $f7 32e7 0079 ld $79 32e8 009e ld $9e 32e9 00e7 ld $e7 32ea 0079 ld $79 32eb 00ee ld $ee 32ec 00e7 ld $e7 32ed 0079 ld $79 32ee 00ee ld $ee 32ef 00e7 ld $e7 32f0 007a ld $7a 32f1 00ef ld $ef 32f2 00eb ld $eb 32f3 00bd ld $bd 32f4 00ee ld $ee 32f5 00e7 ld $e7 32f6 007e ld $7e 32f7 00af ld $af 32f8 00fb ld $fb 32f9 0000 ld $00 32fa 0000 ld $00 32fb fe00 bra ac ;+-----------------------------------+ 32fc fcfd bra $32fd ;| | 32fd 1404 ld $04,y ;| Trampoline for page $3200 lookups | 32fe e068 jmp y,$68 ;| | 32ff c218 st [$18] ;+-----------------------------------+ 3300 00b9 ld $b9 3301 00ef ld $ef 3302 00eb ld $eb 3303 00be ld $be 3304 00ee ld $ee 3305 00eb ld $eb 3306 00b9 ld $b9 3307 00ae ld $ae 3308 00e7 ld $e7 3309 00ba ld $ba 330a 00af ld $af 330b 00fb ld $fb 330c 00ba ld $ba 330d 00ef ld $ef 330e 00eb ld $eb 330f 00be ld $be 3310 00af ld $af 3311 00fb ld $fb 3312 00be ld $be 3313 00ab ld $ab 3314 00ab ld $ab 3315 00ba ld $ba 3316 00ae ld $ae 3317 00ea ld $ea 3318 00bf ld $bf 3319 00fe ld $fe 331a 00ff ld $ff 331b 00ff ld $ff 331c 00df ld $df 331d 00ab ld $ab 331e 00bd ld $bd 331f 00de ld $de 3320 00a7 ld $a7 3321 0069 ld $69 3322 009e ld $9e 3323 00e6 ld $e6 3324 0069 ld $69 3325 009e ld $9e 3326 00e6 ld $e6 3327 007a ld $7a 3328 009a ld $9a 3329 00f7 ld $f7 332a 007a ld $7a 332b 009f ld $9f 332c 00ea ld $ea 332d 0069 ld $69 332e 009e ld $9e 332f 00a6 ld $a6 3330 0079 ld $79 3331 009a ld $9a 3332 00a7 ld $a7 3333 0079 ld $79 3334 009a ld $9a 3335 00f7 ld $f7 3336 00ba ld $ba 3337 009b ld $9b 3338 00fb ld $fb 3339 007a ld $7a 333a 00ee ld $ee 333b 00eb ld $eb 333c 00be ld $be 333d 00af ld $af 333e 00fb ld $fb 333f 00fe ld $fe 3340 00ef ld $ef 3341 00ff ld $ff 3342 00bf ld $bf 3343 00ee ld $ee 3344 00eb ld $eb 3345 00be ld $be 3346 00eb ld $eb 3347 00fb ld $fb 3348 00fe ld $fe 3349 00ff ld $ff 334a 00ff ld $ff 334b 00ff ld $ff 334c 00af ld $af 334d 00f7 ld $f7 334e 0079 ld $79 334f 009e ld $9e 3350 0092 ld $92 3351 0024 ld $24 3352 0045 ld $45 3353 0092 ld $92 3354 0024 ld $24 3355 0049 ld $49 3356 0092 ld $92 3357 0064 ld $64 3358 004a ld $4a 3359 0096 ld $96 335a 0064 ld $64 335b 0099 ld $99 335c 00e6 ld $e6 335d 0069 ld $69 335e 009d ld $9d 335f 00e6 ld $e6 3360 0069 ld $69 3361 009e ld $9e 3362 00e6 ld $e6 3363 0079 ld $79 3364 009f ld $9f 3365 00ab ld $ab 3366 0079 ld $79 3367 00aa ld $aa 3368 00e7 ld $e7 3369 007a ld $7a 336a 00aa ld $aa 336b 00fb ld $fb 336c 00b9 ld $b9 336d 00ea ld $ea 336e 00fb ld $fb 336f 00aa ld $aa 3370 00ee ld $ee 3371 00eb ld $eb 3372 00be ld $be 3373 00bf ld $bf 3374 00fb ld $fb 3375 00bf ld $bf 3376 00fe ld $fe 3377 00ef ld $ef 3378 00be ld $be 3379 00fe ld $fe 337a 00ff ld $ff 337b 00ff ld $ff 337c 00af ld $af 337d 00a6 ld $a6 337e 00b9 ld $b9 337f 004a ld $4a 3380 0052 ld $52 3381 0010 ld $10 3382 0049 ld $49 3383 0095 ld $95 3384 0014 ld $14 3385 0055 ld $55 3386 00a6 ld $a6 3387 0079 ld $79 3388 008a ld $8a 3389 0096 ld $96 338a 0068 ld $68 338b 0049 ld $49 338c 00a2 ld $a2 338d 0075 ld $75 338e 009a ld $9a 338f 00e7 ld $e7 3390 0069 ld $69 3391 009e ld $9e 3392 00a7 ld $a7 3393 007a ld $7a 3394 009a ld $9a 3395 00e6 ld $e6 3396 0069 ld $69 3397 009a ld $9a 3398 00a6 ld $a6 3399 00b9 ld $b9 339a 009a ld $9a 339b 00a6 ld $a6 339c 007a ld $7a 339d 00aa ld $aa 339e 00ab ld $ab 339f 00ba ld $ba 33a0 00af ld $af 33a1 00ea ld $ea 33a2 00ee ld $ee 33a3 00ef ld $ef 33a4 00fb ld $fb 33a5 00bb ld $bb 33a6 00ef ld $ef 33a7 00fb ld $fb 33a8 00bb ld $bb 33a9 00fb ld $fb 33aa 00ff ld $ff 33ab 00ff ld $ff 33ac 00af ld $af 33ad 00a7 ld $a7 33ae 0039 ld $39 33af 0049 ld $49 33b0 0041 ld $41 33b1 0014 ld $14 33b2 0045 ld $45 33b3 0052 ld $52 33b4 0065 ld $65 33b5 009e ld $9e 33b6 00e7 ld $e7 33b7 0069 ld $69 33b8 009e ld $9e 33b9 00e7 ld $e7 33ba 0029 ld $29 33bb 009e ld $9e 33bc 0092 ld $92 33bd 0079 ld $79 33be 009a ld $9a 33bf 00a7 ld $a7 33c0 00b9 ld $b9 33c1 009e ld $9e 33c2 00e6 ld $e6 33c3 0069 ld $69 33c4 009e ld $9e 33c5 00e6 ld $e6 33c6 0065 ld $65 33c7 009e ld $9e 33c8 00e7 ld $e7 33c9 006a ld $6a 33ca 00ae ld $ae 33cb 00e7 ld $e7 33cc 006a ld $6a 33cd 00ae ld $ae 33ce 00fb ld $fb 33cf 00ba ld $ba 33d0 00af ld $af 33d1 00ff ld $ff 33d2 00ba ld $ba 33d3 00af ld $af 33d4 00ab ld $ab 33d5 00fe ld $fe 33d6 00ee ld $ee 33d7 00ff ld $ff 33d8 00fe ld $fe 33d9 00ff ld $ff 33da 00ff ld $ff 33db 00ff ld $ff 33dc 00ef ld $ef 33dd 0096 ld $96 33de 0025 ld $25 33df 0045 ld $45 33e0 0056 ld $56 33e1 0024 ld $24 33e2 0049 ld $49 33e3 0095 ld $95 33e4 0039 ld $39 33e5 004a ld $4a 33e6 0092 ld $92 33e7 0024 ld $24 33e8 0089 ld $89 33e9 00e6 ld $e6 33ea 0079 ld $79 33eb 009e ld $9e 33ec 00e7 ld $e7 33ed 0029 ld $29 33ee 009d ld $9d 33ef 0096 ld $96 33f0 0069 ld $69 33f1 005a ld $5a 33f2 00a7 ld $a7 33f3 0065 ld $65 33f4 005e ld $5e 33f5 00e6 ld $e6 33f6 006a ld $6a 33f7 00ae ld $ae 33f8 00ea ld $ea 33f9 0000 ld $00 33fa 0000 ld $00 33fb fe00 bra ac ;+-----------------------------------+ 33fc fcfd bra $33fd ;| | 33fd 1404 ld $04,y ;| Trampoline for page $3300 lookups | 33fe e068 jmp y,$68 ;| | 33ff c218 st [$18] ;+-----------------------------------+ 3400 00b9 ld $b9 3401 00ee ld $ee 3402 00ea ld $ea 3403 00be ld $be 3404 00ee ld $ee 3405 00eb ld $eb 3406 00be ld $be 3407 00ee ld $ee 3408 00eb ld $eb 3409 00fe ld $fe 340a 00ee ld $ee 340b 00fb ld $fb 340c 00bf ld $bf 340d 00ef ld $ef 340e 00eb ld $eb 340f 00ff ld $ff 3410 00ff ld $ff 3411 00ff ld $ff * 5 times 3414 00a7 ld $a7 3415 0024 ld $24 3416 0055 ld $55 3417 0092 ld $92 3418 0054 ld $54 3419 0049 ld $49 341a 00a2 ld $a2 341b 0039 ld $39 341c 0049 ld $49 341d 00a2 ld $a2 341e 0024 ld $24 341f 0049 ld $49 3420 0092 ld $92 3421 0069 ld $69 3422 009f ld $9f 3423 00e7 ld $e7 3424 0079 ld $79 3425 009a ld $9a 3426 00a7 ld $a7 3427 0079 ld $79 3428 009e ld $9e 3429 00e6 ld $e6 342a 0079 ld $79 342b 00aa ld $aa 342c 00fb ld $fb 342d 00b9 ld $b9 342e 009e ld $9e 342f 00fb ld $fb 3430 007a ld $7a 3431 00af ld $af 3432 00f7 ld $f7 3433 00ba ld $ba 3434 00af ld $af 3435 00fb ld $fb 3436 00be ld $be 3437 00ef ld $ef 3438 00fa ld $fa 3439 00be ld $be 343a 00ef ld $ef 343b 00ff ld $ff 343c 00fa ld $fa 343d 00ef ld $ef 343e 00ef ld $ef 343f 00fe ld $fe 3440 00ff ld $ff 3441 00ff ld $ff 3442 00ff ld $ff 3443 00ff ld $ff 3444 00eb ld $eb 3445 0065 ld $65 3446 0049 ld $49 3447 0092 ld $92 3448 0025 ld $25 3449 0059 ld $59 344a 00e6 ld $e6 344b 0024 ld $24 344c 0059 ld $59 344d 00a2 ld $a2 344e 0025 ld $25 344f 0049 ld $49 3450 0092 ld $92 3451 0064 ld $64 3452 0099 ld $99 3453 00e6 ld $e6 3454 007e ld $7e 3455 009e ld $9e 3456 00e7 ld $e7 3457 00be ld $be 3458 00ef ld $ef 3459 00fb ld $fb 345a 00be ld $be 345b 00ef ld $ef 345c 00eb ld $eb 345d 00be ld $be 345e 00ea ld $ea 345f 00e7 ld $e7 3460 006a ld $6a 3461 00aa ld $aa 3462 00ab ld $ab 3463 00be ld $be 3464 00ea ld $ea 3465 00eb ld $eb 3466 00ea ld $ea 3467 00af ld $af 3468 00ff ld $ff 3469 00bb ld $bb 346a 00ff ld $ff 346b 00eb ld $eb 346c 00be ld $be 346d 00af ld $af 346e 00fa ld $fa 346f 00ff ld $ff 3470 00ff ld $ff 3471 00ff ld $ff * 6 times 3475 0059 ld $59 3476 0049 ld $49 3477 0095 ld $95 3478 0014 ld $14 3479 0099 ld $99 347a 00a3 ld $a3 347b 0074 ld $74 347c 008a ld $8a 347d 00e7 ld $e7 347e 0078 ld $78 347f 009e ld $9e 3480 0092 ld $92 3481 0028 ld $28 3482 008d ld $8d 3483 00a6 ld $a6 3484 0079 ld $79 3485 009a ld $9a 3486 00ab ld $ab 3487 0079 ld $79 3488 009a ld $9a 3489 00a7 ld $a7 348a 007a ld $7a 348b 009e ld $9e 348c 00e6 ld $e6 348d 0069 ld $69 348e 009e ld $9e 348f 00aa ld $aa 3490 00a9 ld $a9 3491 009e ld $9e 3492 00aa ld $aa 3493 0079 ld $79 3494 00aa ld $aa 3495 00ab ld $ab 3496 00ba ld $ba 3497 00af ld $af 3498 00fb ld $fb 3499 00aa ld $aa 349a 00af ld $af 349b 00bb ld $bb 349c 00aa ld $aa 349d 00aa ld $aa 349e 00ab ld $ab 349f 00ff ld $ff 34a0 00ff ld $ff 34a1 00ff ld $ff * 6 times 34a5 002a ld $2a 34a6 0045 ld $45 34a7 0051 ld $51 34a8 0054 ld $54 34a9 0059 ld $59 34aa 00a6 ld $a6 34ab 0028 ld $28 34ac 009d ld $9d 34ad 00e6 ld $e6 34ae 0079 ld $79 34af 009e ld $9e 34b0 0093 ld $93 34b1 0025 ld $25 34b2 005a ld $5a 34b3 00a7 ld $a7 34b4 0079 ld $79 34b5 0089 ld $89 34b6 00a6 ld $a6 34b7 0079 ld $79 34b8 009a ld $9a 34b9 00e6 ld $e6 34ba 0069 ld $69 34bb 005a ld $5a 34bc 00a6 ld $a6 34bd 00a9 ld $a9 34be 009a ld $9a 34bf 00e7 ld $e7 34c0 006a ld $6a 34c1 00ae ld $ae 34c2 00e6 ld $e6 34c3 00aa ld $aa 34c4 00ae ld $ae 34c5 00fa ld $fa 34c6 00ba ld $ba 34c7 00aa ld $aa 34c8 00bb ld $bb 34c9 00ba ld $ba 34ca 00aa ld $aa 34cb 00ea ld $ea 34cc 00ba ld $ba 34cd 00ea ld $ea 34ce 00fe ld $fe 34cf 00ff ld $ff 34d0 00ff ld $ff 34d1 00ff ld $ff * 6 times 34d5 007f ld $7f 34d6 0019 ld $19 34d7 0095 ld $95 34d8 0010 ld $10 34d9 0045 ld $45 34da 0091 ld $91 34db 0069 ld $69 34dc 009e ld $9e 34dd 00a7 ld $a7 34de 0078 ld $78 34df 009a ld $9a 34e0 00a7 ld $a7 34e1 0064 ld $64 34e2 009e ld $9e 34e3 0092 ld $92 34e4 0069 ld $69 34e5 005a ld $5a 34e6 00a7 ld $a7 34e7 0065 ld $65 34e8 0059 ld $59 34e9 0096 ld $96 34ea 0069 ld $69 34eb 0099 ld $99 34ec 0096 ld $96 34ed 0069 ld $69 34ee 00a9 ld $a9 34ef 0096 ld $96 34f0 00a9 ld $a9 34f1 009a ld $9a 34f2 00aa ld $aa 34f3 00b9 ld $b9 34f4 00ea ld $ea 34f5 00eb ld $eb 34f6 00ba ld $ba 34f7 00ab ld $ab 34f8 00ab ld $ab 34f9 0000 ld $00 34fa 0000 ld $00 34fb fe00 bra ac ;+-----------------------------------+ 34fc fcfd bra $34fd ;| | 34fd 1404 ld $04,y ;| Trampoline for page $3400 lookups | 34fe e068 jmp y,$68 ;| | 34ff c218 st [$18] ;+-----------------------------------+ 3500 00ba ld $ba 3501 00ee ld $ee 3502 00ab ld $ab 3503 00ba ld $ba 3504 00aa ld $aa 3505 00ff ld $ff 3506 00ff ld $ff 3507 00ff ld $ff * 7 times 350c 00bf ld $bf 350d 005b ld $5b 350e 0052 ld $52 350f 0065 ld $65 3510 0049 ld $49 3511 0091 ld $91 3512 0064 ld $64 3513 0089 ld $89 3514 00e6 ld $e6 3515 0079 ld $79 3516 009e ld $9e 3517 00e7 ld $e7 3518 0029 ld $29 3519 0059 ld $59 351a 00a6 ld $a6 351b 0064 ld $64 351c 0099 ld $99 351d 0096 ld $96 351e 0065 ld $65 351f 005a ld $5a 3520 00a6 ld $a6 3521 0065 ld $65 3522 0099 ld $99 3523 0096 ld $96 3524 006a ld $6a 3525 0099 ld $99 3526 00a6 ld $a6 3527 006a ld $6a 3528 00ae ld $ae 3529 00aa ld $aa 352a 006a ld $6a 352b 00ae ld $ae 352c 00fa ld $fa 352d 00aa ld $aa 352e 00ae ld $ae 352f 00ea ld $ea 3530 00aa ld $aa 3531 00aa ld $aa 3532 00ab ld $ab 3533 00ba ld $ba 3534 00fb ld $fb 3535 00ff ld $ff 3536 00ff ld $ff 3537 00ff ld $ff * 8 times 353d 00af ld $af 353e 0096 ld $96 353f 0029 ld $29 3540 0059 ld $59 3541 0056 ld $56 3542 0025 ld $25 3543 005a ld $5a 3544 0092 ld $92 3545 0029 ld $29 3546 005a ld $5a 3547 00a2 ld $a2 3548 0064 ld $64 3549 0049 ld $49 354a 0096 ld $96 354b 0025 ld $25 354c 0055 ld $55 354d 0052 ld $52 354e 0065 ld $65 354f 0055 ld $55 3550 0056 ld $56 3551 0065 ld $65 3552 005a ld $5a 3553 00a6 ld $a6 3554 0065 ld $65 3555 00aa ld $aa 3556 0096 ld $96 3557 006a ld $6a 3558 00a9 ld $a9 3559 00a6 ld $a6 355a 00ba ld $ba 355b 00aa ld $aa 355c 00ea ld $ea 355d 00be ld $be 355e 00ee ld $ee 355f 00ea ld $ea 3560 00be ld $be 3561 00af ld $af 3562 00fa ld $fa 3563 00fa ld $fa 3564 00ff ld $ff 3565 00ff ld $ff 3566 00ff ld $ff * 10 times 356e 00a7 ld $a7 356f 0065 ld $65 3570 005a ld $5a 3571 00a6 ld $a6 3572 0064 ld $64 3573 0099 ld $99 3574 0096 ld $96 3575 0064 ld $64 3576 0049 ld $49 3577 0056 ld $56 3578 0025 ld $25 3579 0056 ld $56 357a 0056 ld $56 357b 0068 ld $68 357c 0055 ld $55 357d 0066 ld $66 357e 0065 ld $65 357f 009a ld $9a 3580 0096 ld $96 3581 00a9 ld $a9 3582 0095 ld $95 3583 009a ld $9a 3584 0069 ld $69 3585 00a9 ld $a9 3586 00a6 ld $a6 3587 00aa ld $aa 3588 009e ld $9e 3589 00ea ld $ea 358a 00aa ld $aa 358b 00ae ld $ae 358c 00fa ld $fa 358d 00aa ld $aa 358e 00af ld $af 358f 00ab ld $ab 3590 00ba ld $ba 3591 00af ld $af 3592 00bb ld $bb 3593 00fb ld $fb 3594 00ff ld $ff 3595 00ff ld $ff 3596 00ff ld $ff * 11 times 359f 0069 ld $69 35a0 0099 ld $99 35a1 0096 ld $96 35a2 0069 ld $69 35a3 0049 ld $49 35a4 0056 ld $56 35a5 0065 ld $65 35a6 005a ld $5a 35a7 00a2 ld $a2 35a8 0065 ld $65 35a9 0099 ld $99 35aa 0095 ld $95 35ab 0065 ld $65 35ac 005a ld $5a 35ad 00a6 ld $a6 35ae 0055 ld $55 35af 0099 ld $99 35b0 0095 ld $95 35b1 0069 ld $69 35b2 005a ld $5a 35b3 00a6 ld $a6 35b4 00a9 ld $a9 35b5 009a ld $9a 35b6 00ea ld $ea 35b7 00a9 ld $a9 35b8 00aa ld $aa 35b9 00a6 ld $a6 35ba 00ba ld $ba 35bb 00aa ld $aa 35bc 00aa ld $aa 35bd 00ba ld $ba 35be 00ee ld $ee 35bf 00ea ld $ea 35c0 00fe ld $fe 35c1 00ea ld $ea 35c2 00eb ld $eb 35c3 00ff ld $ff 35c4 00ff ld $ff 35c5 00ff ld $ff * 12 times 35cf 006a ld $6a 35d0 005a ld $5a 35d1 00a6 ld $a6 35d2 0065 ld $65 35d3 005a ld $5a 35d4 0091 ld $91 35d5 0055 ld $55 35d6 005a ld $5a 35d7 00a6 ld $a6 35d8 0065 ld $65 35d9 005a ld $5a 35da 00a6 ld $a6 35db 0065 ld $65 35dc 005a ld $5a 35dd 00a6 ld $a6 35de 0069 ld $69 35df 006a ld $6a 35e0 00a6 ld $a6 35e1 006a ld $6a 35e2 00a9 ld $a9 35e3 00aa ld $aa 35e4 006a ld $6a 35e5 00aa ld $aa 35e6 00aa ld $aa 35e7 00ba ld $ba 35e8 00aa ld $aa 35e9 00eb ld $eb 35ea 00aa ld $aa 35eb 009b ld $9b 35ec 00ab ld $ab 35ed 00be ld $be 35ee 00aa ld $aa 35ef 00fb ld $fb 35f0 00aa ld $aa 35f1 00ee ld $ee 35f2 00fe ld $fe 35f3 00ff ld $ff 35f4 00ff ld $ff 35f5 00ff ld $ff * 6 times 35f9 0000 ld $00 35fa 0000 ld $00 35fb fe00 bra ac ;+-----------------------------------+ 35fc fcfd bra $35fd ;| | 35fd 1404 ld $04,y ;| Trampoline for page $3500 lookups | 35fe e068 jmp y,$68 ;| | 35ff c218 st [$18] ;+-----------------------------------+ 3600 00ff ld $ff 3601 00ff ld $ff 3602 00ff ld $ff * 6 times 3606 00bf ld $bf 3607 009a ld $9a 3608 0096 ld $96 3609 0069 ld $69 360a 0099 ld $99 360b 0096 ld $96 360c 0065 ld $65 360d 005a ld $5a 360e 00a6 ld $a6 360f 0025 ld $25 3610 0099 ld $99 3611 0096 ld $96 3612 0069 ld $69 3613 0099 ld $99 3614 0096 ld $96 3615 0069 ld $69 3616 0099 ld $99 3617 0096 ld $96 3618 00a9 ld $a9 3619 009a ld $9a 361a 00a6 ld $a6 361b 0076 ld $76 361c 00aa ld $aa 361d 00a7 ld $a7 361e 007a ld $7a 361f 00aa ld $aa 3620 00bb ld $bb 3621 00ba ld $ba 3622 00ae ld $ae 3623 00ea ld $ea 3624 00aa ld $aa 3625 00af ld $af 3626 00ab ld $ab 3627 00be ld $be 3628 00fe ld $fe 3629 00ff ld $ff 362a 00ff ld $ff 362b 00ff ld $ff * 14 times 3637 00ef ld $ef 3638 0097 ld $97 3639 0069 ld $69 363a 005a ld $5a 363b 00a6 ld $a6 363c 0069 ld $69 363d 009a ld $9a 363e 00a6 ld $a6 363f 00a9 ld $a9 3640 005a ld $5a 3641 00a6 ld $a6 3642 0069 ld $69 3643 009a ld $9a 3644 00aa ld $aa 3645 00ba ld $ba 3646 009a ld $9a 3647 00aa ld $aa 3648 00b9 ld $b9 3649 009a ld $9a 364a 00ab ld $ab 364b 00ba ld $ba 364c 00aa ld $aa 364d 00eb ld $eb 364e 00aa ld $aa 364f 00af ld $af 3650 00ab ld $ab 3651 00be ld $be 3652 00ee ld $ee 3653 00ab ld $ab 3654 00be ld $be 3655 00fe ld $fe 3656 00eb ld $eb 3657 00fe ld $fe 3658 00fb ld $fb 3659 00ff ld $ff 365a 00ff ld $ff 365b 00ff ld $ff * 16 times 3669 006a ld $6a 366a 00aa ld $aa 366b 00a7 ld $a7 366c 0065 ld $65 366d 00aa ld $aa 366e 00eb ld $eb 366f 0075 ld $75 3670 00aa ld $aa 3671 00a7 ld $a7 3672 00a9 ld $a9 3673 0099 ld $99 3674 00ea ld $ea 3675 0069 ld $69 3676 00aa ld $aa 3677 00e7 ld $e7 3678 006a ld $6a 3679 00ae ld $ae 367a 00ea ld $ea 367b 00be ld $be 367c 00ae ld $ae 367d 00fa ld $fa 367e 00be ld $be 367f 00aa ld $aa 3680 00fb ld $fb 3681 00ea ld $ea 3682 00af ld $af 3683 00fb ld $fb 3684 00aa ld $aa 3685 00ee ld $ee 3686 00ab ld $ab 3687 00ff ld $ff 3688 00ff ld $ff 3689 00ff ld $ff * 18 times 3699 00ba ld $ba 369a 009a ld $9a 369b 00ea ld $ea 369c 00a9 ld $a9 369d 009e ld $9e 369e 00a6 ld $a6 369f 006a ld $6a 36a0 00ae ld $ae 36a1 00ea ld $ea 36a2 00b9 ld $b9 36a3 009e ld $9e 36a4 00ab ld $ab 36a5 00b9 ld $b9 36a6 00aa ld $aa 36a7 00ab ld $ab 36a8 00ba ld $ba 36a9 00aa ld $aa 36aa 00eb ld $eb 36ab 00aa ld $aa 36ac 00af ld $af 36ad 00eb ld $eb 36ae 00be ld $be 36af 00bf ld $bf 36b0 00fb ld $fb 36b1 00ba ld $ba 36b2 00bf ld $bf 36b3 00ea ld $ea 36b4 00bf ld $bf 36b5 00fe ld $fe 36b6 00fe ld $fe 36b7 00ff ld $ff 36b8 00ff ld $ff 36b9 00ff ld $ff * 19 times 36ca 00af ld $af 36cb 00ab ld $ab 36cc 00a9 ld $a9 36cd 005a ld $5a 36ce 00ea ld $ea 36cf 00a9 ld $a9 36d0 009e ld $9e 36d1 00e6 ld $e6 36d2 00aa ld $aa 36d3 009a ld $9a 36d4 00aa ld $aa 36d5 007a ld $7a 36d6 00aa ld $aa 36d7 00e6 ld $e6 36d8 006a ld $6a 36d9 00ae ld $ae 36da 00ea ld $ea 36db 00be ld $be 36dc 00aa ld $aa 36dd 00bb ld $bb 36de 00ba ld $ba 36df 00aa ld $aa 36e0 00ab ld $ab 36e1 00ba ld $ba 36e2 00ea ld $ea 36e3 00eb ld $eb 36e4 00aa ld $aa 36e5 00ff ld $ff 36e6 00ff ld $ff 36e7 00ff ld $ff * 20 times 36f9 0000 ld $00 36fa 0000 ld $00 36fb fe00 bra ac ;+-----------------------------------+ 36fc fcfd bra $36fd ;| | 36fd 1404 ld $04,y ;| Trampoline for page $3600 lookups | 36fe e068 jmp y,$68 ;| | 36ff c218 st [$18] ;+-----------------------------------+ 3700 00ff ld $ff 3701 00ff ld $ff 3702 00eb ld $eb 3703 006a ld $6a 3704 00aa ld $aa 3705 00a6 ld $a6 3706 0066 ld $66 3707 00aa ld $aa 3708 00a6 ld $a6 3709 0066 ld $66 370a 00ae ld $ae 370b 00a6 ld $a6 370c 006a ld $6a 370d 00aa ld $aa 370e 00ab ld $ab 370f 00aa ld $aa 3710 00ae ld $ae 3711 00a6 ld $a6 3712 00ba ld $ba 3713 00ea ld $ea 3714 00ab ld $ab 3715 00ba ld $ba 3716 00af ld $af 3717 00fa ld $fa 3718 00ba ld $ba 3719 00ab ld $ab 371a 00bb ld $bb 371b 00ff ld $ff 371c 00ff ld $ff 371d 00ff ld $ff * 24 times 3733 00bf ld $bf 3734 00ae ld $ae 3735 00e6 ld $e6 3736 006a ld $6a 3737 00a9 ld $a9 3738 00e6 ld $e6 3739 006a ld $6a 373a 006a ld $6a 373b 00aa ld $aa 373c 00b9 ld $b9 373d 00aa ld $aa 373e 00a6 ld $a6 373f 00ba ld $ba 3740 00ea ld $ea 3741 00ab ld $ab 3742 00ba ld $ba 3743 00af ld $af 3744 00ea ld $ea 3745 00aa ld $aa 3746 00ab ld $ab 3747 00fb ld $fb 3748 00ab ld $ab 3749 00fe ld $fe 374a 00ff ld $ff 374b 00ff ld $ff 374c 00ff ld $ff * 28 times 3766 00aa ld $aa 3767 00ae ld $ae 3768 00aa ld $aa 3769 00ba ld $ba 376a 00ae ld $ae 376b 00ab ld $ab 376c 00ba ld $ba 376d 00ae ld $ae 376e 00ea ld $ea 376f 00aa ld $aa 3770 00af ld $af 3771 00ea ld $ea 3772 00be ld $be 3773 00ea ld $ea 3774 00eb ld $eb 3775 00fe ld $fe 3776 00ae ld $ae 3777 00fe ld $fe 3778 00fe ld $fe 3779 00ff ld $ff 377a 00ff ld $ff 377b 00ff ld $ff * 30 times 3797 00ef ld $ef 3798 00fb ld $fb 3799 00aa ld $aa 379a 00ab ld $ab 379b 00fb ld $fb 379c 00aa ld $aa 379d 00af ld $af 379e 00fb ld $fb 379f 00be ld $be 37a0 00ee ld $ee 37a1 00fb ld $fb 37a2 00ab ld $ab 37a3 00af ld $af 37a4 00ff ld $ff 37a5 00ea ld $ea 37a6 00ff ld $ff 37a7 00ff ld $ff 37a8 00ff ld $ff * 37 times 37cb 00bf ld $bf 37cc 00fa ld $fa 37cd 00af ld $af 37ce 00fe ld $fe 37cf 00ea ld $ea 37d0 00af ld $af 37d1 00fe ld $fe 37d2 00fe ld $fe 37d3 00ff ld $ff 37d4 00ff ld $ff 37d5 00ff ld $ff * 5 times 37d8 00ef ld $ef 37d9 00ff ld $ff 37da 00ff ld $ff 37db 00ff ld $ff * 32 times 37f9 0000 ld $00 37fa 0000 ld $00 37fb fe00 bra ac ;+-----------------------------------+ 37fc fcfd bra $37fd ;| | 37fd 1404 ld $04,y ;| Trampoline for page $3700 lookups | 37fe e068 jmp y,$68 ;| | 37ff c218 st [$18] ;+-----------------------------------+ 3800 00ff ld $ff 3801 00ff ld $ff 3802 00ff ld $ff * 30 times 381e 0000 ld $00 381f 0000 ld $00 3820 0000 ld $00 * 221 times 38fb fe00 bra ac ;+-----------------------------------+ 38fc fcfd bra $38fd ;| | 38fd 1404 ld $04,y ;| Trampoline for page $3800 lookups | 38fe e068 jmp y,$68 ;| | 38ff c218 st [$18] ;+-----------------------------------+ ;End of Apps/Pictures/packedPictures.rgb, size 9728 ;+-----------------------------------+ ;| Apps/Snake/Snake_v3.gcl | ;+-----------------------------------+ 3900 dc00 st $00,[y,x++] ;'\x00' 3901 dc00 st $00,[y,x++] ;'\x00' 3902 dc00 st $00,[y,x++] ;'\x00' 3903 dc00 st $00,[y,x++] ;'\x00' 3904 dc00 st $00,[y,x++] ;'\x00' 3905 dc00 st $00,[y,x++] ;'\x00' 3906 dc00 st $00,[y,x++] ;'\x00' 3907 dc00 st $00,[y,x++] ;'\x00' 3908 0000 ld $00 3909 c218 st [$18] 390a 0000 ld $00 390b 14fb ld $fb,y 390c e0ee jmp y,$ee 390d c219 st [$19] Snake: 390e 0002 ld $02 ;| RAM segment address (high byte first) 390f 0000 ld $00 ;| 3910 00e5 ld $e5 ;| Length (1..256) 3911 001a ld $1a ;0200 LD 3912 0021 ld $21 3913 00e6 ld $e6 ;0202 SUBI 3914 0020 ld $20 3915 0035 ld $35 ;0204 BCC 3916 0053 ld $53 ;0205 GE 3917 000b ld $0b 3918 0021 ld $21 ;0207 LDW 3919 000e ld $0e ;0207 '_frameCount' 391a 00f3 ld $f3 ;0209 DOKE 391b 0017 ld $17 ;0209 '_vPCH' 391c 0090 ld $90 ;020b BRA 391d 0005 ld $05 391e 0059 ld $59 ;020d LDI 391f 0000 ld $00 3920 002b ld $2b ;020f STW 3921 0030 ld $30 ;020f 'HighScore' 3922 00cd ld $cd ;0211 DEF 3923 005f ld $5f 3924 0021 ld $21 ;0213 LDW 3925 0032 ld $32 ;0213 'Char' 3926 00e6 ld $e6 ;0215 SUBI 3927 0052 ld $52 3928 0035 ld $35 ;0217 BCC 3929 0053 ld $53 ;0218 GE 392a 0021 ld $21 392b 00e3 ld $e3 ;021a ADDI 392c 0032 ld $32 392d 002b ld $2b ;021c STW 392e 0034 ld $34 ;021c 'i' 392f 0011 ld $11 ;021e LDWI 3930 0000 ld $00 3931 0007 ld $07 3932 0090 ld $90 ;0221 BRA 3933 0026 ld $26 3934 002b ld $2b ;0223 STW 3935 0034 ld $34 ;0223 'i' 3936 0011 ld $11 ;0225 LDWI 3937 0000 ld $00 3938 0008 ld $08 3939 002b ld $2b ;0228 STW 393a 0036 ld $36 ;0228 'fontData' 393b 0021 ld $21 ;022a LDW 393c 0034 ld $34 ;022a 'i' 393d 00e9 ld $e9 ;022c LSLW 393e 00e9 ld $e9 ;022d LSLW 393f 0099 ld $99 ;022e ADDW 3940 0034 ld $34 ;022e 'i' 3941 0099 ld $99 ;0230 ADDW 3942 0036 ld $36 ;0230 'fontData' 3943 002b ld $2b ;0232 STW 3944 0036 ld $36 ;0232 'fontData' 3945 0021 ld $21 ;0234 LDW 3946 0038 ld $38 ;0234 'BgColor' 3947 005e ld $5e ;0236 ST 3948 0024 ld $24 3949 0021 ld $21 ;0238 LDW 394a 003a ld $3a ;0238 'Color' 394b 005e ld $5e ;023a ST 394c 0025 ld $25 394d 0021 ld $21 ;023c LDW 394e 003c ld $3c ;023c 'Pos' 394f 002b ld $2b ;023e STW 3950 0028 ld $28 3951 00e3 ld $e3 ;0240 ADDI 3952 0006 ld $06 3953 002b ld $2b ;0242 STW 3954 003c ld $3c ;0242 'Pos' 3955 0011 ld $11 ;0244 LDWI 3956 00e1 ld $e1 3957 0004 ld $04 3958 002b ld $2b ;0247 STW 3959 0022 ld $22 395a 0059 ld $59 ;0249 LDI 395b 00fb ld $fb 395c 002b ld $2b ;024b STW 395d 0034 ld $34 ;024b 'i' 395e 0021 ld $21 ;024d LDW 395f 0036 ld $36 ;024d 'fontData' 3960 007f ld $7f ;024f LUP 3961 0000 ld $00 3962 0093 ld $93 ;0251 INC 3963 0036 ld $36 ;0251 'fontData' 3964 005e ld $5e ;0253 ST 3965 0026 ld $26 3966 00b4 ld $b4 ;0255 SYS 3967 00cb ld $cb 3968 0093 ld $93 ;0257 INC 3969 0028 ld $28 396a 0093 ld $93 ;0259 INC 396b 0034 ld $34 ;0259 'i' 396c 0021 ld $21 ;025b LDW 396d 0034 ld $34 ;025b 'i' 396e 0035 ld $35 ;025d BCC 396f 0072 ld $72 ;025e NE 3970 004b ld $4b 3971 00ff ld $ff ;0260 RET 3972 002b ld $2b ;0261 STW 3973 003e ld $3e ;0261 'PrintChar' 3974 00cd ld $cd ;0263 DEF 3975 0076 ld $76 3976 0075 ld $75 ;0265 PUSH 3977 002b ld $2b ;0266 STW 3978 0040 ld $40 ;0266 'Text' 3979 0021 ld $21 ;0268 LDW 397a 0040 ld $40 ;0268 'Text' 397b 00ad ld $ad ;026a PEEK 397c 002b ld $2b ;026b STW 397d 0032 ld $32 ;026b 'Char' 397e 0093 ld $93 ;026d INC 397f 0040 ld $40 ;026d 'Text' 3980 0035 ld $35 ;026f BCC 3981 003f ld $3f ;0270 EQ 3982 0074 ld $74 3983 00cf ld $cf ;0272 CALL 3984 003e ld $3e ;0272 'PrintChar' 3985 0090 ld $90 ;0274 BRA 3986 0066 ld $66 3987 0063 ld $63 ;0276 POP 3988 00ff ld $ff ;0277 RET 3989 002b ld $2b ;0278 STW 398a 0042 ld $42 ;0278 'PrintText' 398b 00cd ld $cd ;027a DEF 398c 0090 ld $90 398d 0035 ld $35 ;027c BCC 398e 0056 ld $56 ;027d LE 398f 008f ld $8f 3990 002b ld $2b ;027f STW 3991 0034 ld $34 ;027f 'i' 3992 0021 ld $21 ;0281 LDW 3993 003a ld $3a ;0281 'Color' 3994 00f0 ld $f0 ;0283 POKE 3995 003c ld $3c ;0283 'Pos' 3996 0021 ld $21 ;0285 LDW 3997 003c ld $3c ;0285 'Pos' 3998 0099 ld $99 ;0287 ADDW 3999 0044 ld $44 ;0287 'Step' 399a 002b ld $2b ;0289 STW 399b 003c ld $3c ;0289 'Pos' 399c 0021 ld $21 ;028b LDW 399d 0034 ld $34 ;028b 'i' 399e 00e6 ld $e6 ;028d SUBI 399f 0001 ld $01 39a0 0090 ld $90 ;028f BRA 39a1 007a ld $7a 39a2 00ff ld $ff ;0291 RET 39a3 002b ld $2b ;0292 STW 39a4 0046 ld $46 ;0292 'DrawLine' 39a5 00cd ld $cd ;0294 DEF 39a6 00bc ld $bc 39a7 0075 ld $75 ;0296 PUSH 39a8 001a ld $1a ;0297 LD 39a9 000e ld $0e 39aa 00b8 ld $b8 ;0299 SUBW 39ab 0048 ld $48 ;0299 'TimeOut' 39ac 0082 ld $82 ;029b ANDI 39ad 0080 ld $80 39ae 0035 ld $35 ;029d BCC 39af 0072 ld $72 ;029e NE 39b0 00a9 ld $a9 39b1 0021 ld $21 ;02a0 LDW 39b2 004a ld $4a ;02a0 'Timer' 39b3 0035 ld $35 ;02a2 BCC 39b4 0056 ld $56 ;02a3 LE 39b5 00a7 ld $a7 39b6 00e6 ld $e6 ;02a5 SUBI 39b7 0001 ld $01 39b8 002b ld $2b ;02a7 STW 39b9 004a ld $4a ;02a7 'Timer' 39ba 00cf ld $cf ;02a9 CALL 39bb 004c ld $4c ;02a9 'DrawTimer' 39bc 001a ld $1a ;02ab LD 39bd 0011 ld $11 39be 0082 ld $82 ;02ad ANDI 39bf 0080 ld $80 39c0 0035 ld $35 ;02af BCC 39c1 0072 ld $72 ;02b0 NE 39c2 00b4 ld $b4 39c3 00e6 ld $e6 ;02b2 SUBI 39c4 0001 ld $01 39c5 0090 ld $90 ;02b4 BRA 39c6 00b6 ld $b6 39c7 0059 ld $59 ;02b6 LDI 39c8 0000 ld $00 39c9 0099 ld $99 ;02b8 ADDW 39ca 004e ld $4e ;02b8 'Delay' 39cb 00cf ld $cf ;02ba CALL 39cc 0050 ld $50 ;02ba 'Wait' 39cd 0063 ld $63 ;02bc POP 39ce 00ff ld $ff ;02bd RET 39cf 002b ld $2b ;02be STW 39d0 0052 ld $52 ;02be 'TimeStep' 39d1 00cd ld $cd ;02c0 DEF 39d2 00de ld $de 39d3 0075 ld $75 ;02c2 PUSH 39d4 0011 ld $11 ;02c3 LDWI 39d5 0020 ld $20 39d6 0008 ld $08 39d7 002b ld $2b ;02c6 STW 39d8 003c ld $3c ;02c6 'Pos' 39d9 0059 ld $59 ;02c8 LDI 39da 0008 ld $08 39db 002b ld $2b ;02ca STW 39dc 003a ld $3a ;02ca 'Color' 39dd 0059 ld $59 ;02cc LDI 39de 0000 ld $00 39df 002b ld $2b ;02ce STW 39e0 0038 ld $38 ;02ce 'BgColor' 39e1 0021 ld $21 ;02d0 LDW 39e2 004a ld $4a ;02d0 'Timer' 39e3 002b ld $2b ;02d2 STW 39e4 0054 ld $54 ;02d2 'Value' 39e5 00cf ld $cf ;02d4 CALL 39e6 0056 ld $56 ;02d4 'DrawNumber2' 39e7 0021 ld $21 ;02d6 LDW 39e8 0048 ld $48 ;02d6 'TimeOut' 39e9 00e3 ld $e3 ;02d8 ADDI 39ea 003c ld $3c 39eb 0082 ld $82 ;02da ANDI 39ec 00ff ld $ff 39ed 002b ld $2b ;02dc STW 39ee 0048 ld $48 ;02dc 'TimeOut' 39ef 0063 ld $63 ;02de POP 39f0 00ff ld $ff ;02df RET 39f1 002b ld $2b ;02e0 STW 39f2 004c ld $4c ;02e0 'DrawTimer' 39f3 0093 ld $93 ;02e2 INC 39f4 001b ld $1b ;02e2 '_vLR'+1 39f5 00ff ld $ff ;02e4 RET 39f6 0003 ld $03 ;| RAM segment address (high byte first) 39f7 0000 ld $00 ;| 39f8 00f7 ld $f7 ;| Length (1..256) 39f9 00cd ld $cd ;0300 DEF 39fa 000b ld $0b 39fb fe00 bra ac ;+-----------------------------------+ 39fc fcfd bra $39fd ;| | 39fd 1404 ld $04,y ;| Trampoline for page $3900 lookups | 39fe e068 jmp y,$68 ;| | 39ff c218 st [$18] ;+-----------------------------------+ 3a00 0075 ld $75 ;0302 PUSH 3a01 0059 ld $59 ;0303 LDI 3a02 000f ld $0f 3a03 002b ld $2b ;0305 STW 3a04 003a ld $3a ;0305 'Color' 3a05 0021 ld $21 ;0307 LDW 3a06 0058 ld $58 ;0307 'Head' 3a07 00cf ld $cf ;0309 CALL 3a08 005a ld $5a ;0309 'DrawBlock' 3a09 0063 ld $63 ;030b POP 3a0a 00ff ld $ff ;030c RET 3a0b 002b ld $2b ;030d STW 3a0c 005c ld $5c ;030d 'DrawHead' 3a0d 00cd ld $cd ;030f DEF 3a0e 0043 ld $43 3a0f 0075 ld $75 ;0311 PUSH 3a10 0011 ld $11 ;0312 LDWI 3a11 0035 ld $35 3a12 0044 ld $44 3a13 002b ld $2b ;0315 STW 3a14 003c ld $3c ;0315 'Pos' 3a15 0059 ld $59 ;0317 LDI 3a16 0004 ld $04 3a17 002b ld $2b ;0319 STW 3a18 0038 ld $38 ;0319 'BgColor' 3a19 00cd ld $cd ;031b DEF 3a1a 0025 ld $25 3a1b 0047 ld $47 ;031d 'G' 3a1c 0041 ld $41 ;031e 'A' 3a1d 004d ld $4d ;031f 'M' 3a1e 0045 ld $45 ;0320 'E' 3a1f 0020 ld $20 ;0321 ' ' 3a20 004f ld $4f ;0322 'O' 3a21 0056 ld $56 ;0323 'V' 3a22 0045 ld $45 ;0324 'E' 3a23 0052 ld $52 ;0325 'R' 3a24 0000 ld $00 ;0326 0 3a25 00cf ld $cf ;0327 CALL 3a26 0042 ld $42 ;0327 'PrintText' 3a27 0021 ld $21 ;0329 LDW 3a28 005e ld $5e ;0329 'Score' 3a29 00b8 ld $b8 ;032b SUBW 3a2a 0030 ld $30 ;032b 'HighScore' 3a2b 0035 ld $35 ;032d BCC 3a2c 0056 ld $56 ;032e LE 3a2d 003f ld $3f 3a2e 0021 ld $21 ;0330 LDW 3a2f 0060 ld $60 ;0330 'Control' 3a30 00fc ld $fc ;0332 XORW 3a31 0062 ld $62 ;0332 'PlayerControl' 3a32 0035 ld $35 ;0334 BCC 3a33 0072 ld $72 ;0335 NE 3a34 003f ld $3f 3a35 0021 ld $21 ;0337 LDW 3a36 005e ld $5e ;0337 'Score' 3a37 002b ld $2b ;0339 STW 3a38 0030 ld $30 ;0339 'HighScore' 3a39 0059 ld $59 ;033b LDI 3a3a 001e ld $1e 3a3b 002b ld $2b ;033d STW 3a3c 003a ld $3a ;033d 'Color' 3a3d 00cf ld $cf ;033f CALL 3a3e 0064 ld $64 ;033f 'DrawHighScore' 3a3f 00cf ld $cf ;0341 CALL 3a40 0066 ld $66 ;0341 'PlayGameOverSound' 3a41 0063 ld $63 ;0343 POP 3a42 00ff ld $ff ;0344 RET 3a43 002b ld $2b ;0345 STW 3a44 0068 ld $68 ;0345 'GameOver' 3a45 00cd ld $cd ;0347 DEF 3a46 0059 ld $59 3a47 002b ld $2b ;0349 STW 3a48 006a ld $6a ;0349 'tmp' 3a49 001a ld $1a ;034b LD 3a4a 000e ld $0e 3a4b 0099 ld $99 ;034d ADDW 3a4c 006a ld $6a ;034d 'tmp' 3a4d 0082 ld $82 ;034f ANDI 3a4e 00ff ld $ff 3a4f 002b ld $2b ;0351 STW 3a50 006a ld $6a ;0351 'tmp' 3a51 001a ld $1a ;0353 LD 3a52 000e ld $0e 3a53 00b8 ld $b8 ;0355 SUBW 3a54 006a ld $6a ;0355 'tmp' 3a55 0035 ld $35 ;0357 BCC 3a56 0072 ld $72 ;0358 NE 3a57 0051 ld $51 3a58 00ff ld $ff ;035a RET 3a59 002b ld $2b ;035b STW 3a5a 0050 ld $50 ;035b 'Wait' 3a5b 00cd ld $cd ;035d DEF 3a5c 007f ld $7f 3a5d 0075 ld $75 ;035f PUSH 3a5e 0059 ld $59 ;0360 LDI 3a5f 0008 ld $08 3a60 002b ld $2b ;0362 STW 3a61 003a ld $3a ;0362 'Color' 3a62 0059 ld $59 ;0364 LDI 3a63 0000 ld $00 3a64 002b ld $2b ;0366 STW 3a65 0038 ld $38 ;0366 'BgColor' 3a66 0011 ld $11 ;0368 LDWI 3a67 0000 ld $00 3a68 0008 ld $08 3a69 00cf ld $cf ;036b CALL 3a6a 006c ld $6c ;036b 'ClearScreen' 3a6b 0011 ld $11 ;036d LDWI 3a6c 0038 ld $38 3a6d 0008 ld $08 3a6e 002b ld $2b ;0370 STW 3a6f 003c ld $3c ;0370 'Pos' 3a70 00cd ld $cd ;0372 DEF 3a71 007b ld $7b 3a72 0047 ld $47 ;0374 'G' 3a73 0069 ld $69 ;0375 'i' 3a74 0067 ld $67 ;0376 'g' 3a75 0061 ld $61 ;0377 'a' 3a76 0074 ld $74 ;0378 't' 3a77 0072 ld $72 ;0379 'r' 3a78 006f ld $6f ;037a 'o' 3a79 006e ld $6e ;037b 'n' 3a7a 0000 ld $00 ;037c 0 3a7b 00cf ld $cf ;037d CALL 3a7c 0042 ld $42 ;037d 'PrintText' 3a7d 0063 ld $63 ;037f POP 3a7e 00ff ld $ff ;0380 RET 3a7f 002b ld $2b ;0381 STW 3a80 006e ld $6e ;0381 'Intro' 3a81 00cd ld $cd ;0383 DEF 3a82 00a3 ld $a3 3a83 002b ld $2b ;0385 STW 3a84 0070 ld $70 ;0385 'p' 3a85 0011 ld $11 ;0387 LDWI 3a86 0003 ld $03 3a87 000b ld $0b 3a88 002b ld $2b ;038a STW 3a89 0022 ld $22 3a8a 0021 ld $21 ;038c LDW 3a8b 0038 ld $38 ;038c 'BgColor' 3a8c 005e ld $5e ;038e ST 3a8d 0025 ld $25 3a8e 0021 ld $21 ;0390 LDW 3a8f 0070 ld $70 ;0390 'p' 3a90 002b ld $2b ;0392 STW 3a91 0026 ld $26 3a92 0059 ld $59 ;0394 LDI 3a93 00a0 ld $a0 3a94 005e ld $5e ;0396 ST 3a95 0024 ld $24 3a96 00b4 ld $b4 ;0398 SYS 3a97 00f3 ld $f3 3a98 0011 ld $11 ;039a LDWI 3a99 0000 ld $00 3a9a 0001 ld $01 3a9b 0099 ld $99 ;039d ADDW 3a9c 0070 ld $70 ;039d 'p' 3a9d 002b ld $2b ;039f STW 3a9e 0070 ld $70 ;039f 'p' 3a9f 0035 ld $35 ;03a1 BCC 3aa0 004d ld $4d ;03a2 GT 3aa1 0090 ld $90 3aa2 00ff ld $ff ;03a4 RET 3aa3 002b ld $2b ;03a5 STW 3aa4 006c ld $6c ;03a5 'ClearScreen' 3aa5 00cd ld $cd ;03a7 DEF 3aa6 00c1 ld $c1 3aa7 0059 ld $59 ;03a9 LDI 3aa8 0000 ld $00 3aa9 00b8 ld $b8 ;03ab SUBW 3aaa 0072 ld $72 ;03ab 'stepV' 3aab 002b ld $2b ;03ad STW 3aac 006a ld $6a ;03ad 'tmp' 3aad 0021 ld $21 ;03af LDW 3aae 0074 ld $74 ;03af 'stepU' 3aaf 002b ld $2b ;03b1 STW 3ab0 0072 ld $72 ;03b1 'stepV' 3ab1 0021 ld $21 ;03b3 LDW 3ab2 006a ld $6a ;03b3 'tmp' 3ab3 002b ld $2b ;03b5 STW 3ab4 0074 ld $74 ;03b5 'stepU' 3ab5 0021 ld $21 ;03b7 LDW 3ab6 0076 ld $76 ;03b7 'Bias' 3ab7 0035 ld $35 ;03b9 BCC 3ab8 0053 ld $53 ;03ba GE 3ab9 00bc ld $bc 3aba 0059 ld $59 ;03bc LDI 3abb 0000 ld $00 3abc 00e3 ld $e3 ;03be ADDI 3abd 003c ld $3c 3abe 002b ld $2b ;03c0 STW 3abf 0076 ld $76 ;03c0 'Bias' 3ac0 00ff ld $ff ;03c2 RET 3ac1 002b ld $2b ;03c3 STW 3ac2 0078 ld $78 ;03c3 'TurnL' 3ac3 00cd ld $cd ;03c5 DEF 3ac4 00df ld $df 3ac5 0059 ld $59 ;03c7 LDI 3ac6 0000 ld $00 3ac7 00b8 ld $b8 ;03c9 SUBW 3ac8 0074 ld $74 ;03c9 'stepU' 3ac9 002b ld $2b ;03cb STW 3aca 006a ld $6a ;03cb 'tmp' 3acb 0021 ld $21 ;03cd LDW 3acc 0072 ld $72 ;03cd 'stepV' 3acd 002b ld $2b ;03cf STW 3ace 0074 ld $74 ;03cf 'stepU' 3acf 0021 ld $21 ;03d1 LDW 3ad0 006a ld $6a ;03d1 'tmp' 3ad1 002b ld $2b ;03d3 STW 3ad2 0072 ld $72 ;03d3 'stepV' 3ad3 0021 ld $21 ;03d5 LDW 3ad4 0076 ld $76 ;03d5 'Bias' 3ad5 0035 ld $35 ;03d7 BCC 3ad6 0056 ld $56 ;03d8 LE 3ad7 00da ld $da 3ad8 0059 ld $59 ;03da LDI 3ad9 0000 ld $00 3ada 00e6 ld $e6 ;03dc SUBI 3adb 003c ld $3c 3adc 002b ld $2b ;03de STW 3add 0076 ld $76 ;03de 'Bias' 3ade 00ff ld $ff ;03e0 RET 3adf 002b ld $2b ;03e1 STW 3ae0 007a ld $7a ;03e1 'TurnR' 3ae1 00cd ld $cd ;03e3 DEF 3ae2 00f0 ld $f0 3ae3 002b ld $2b ;03e5 STW 3ae4 003c ld $3c ;03e5 'Pos' 3ae5 0021 ld $21 ;03e7 LDW 3ae6 003a ld $3a ;03e7 'Color' 3ae7 005e ld $5e ;03e9 ST 3ae8 0019 ld $19 3ae9 00f3 ld $f3 ;03eb DOKE 3aea 003c ld $3c ;03eb 'Pos' 3aeb 0093 ld $93 ;03ed INC 3aec 003d ld $3d ;03ed 'Pos'+1 3aed 00f3 ld $f3 ;03ef DOKE 3aee 003c ld $3c ;03ef 'Pos' 3aef 00ff ld $ff ;03f1 RET 3af0 002b ld $2b ;03f2 STW 3af1 005a ld $5a ;03f2 'DrawBlock' 3af2 0093 ld $93 ;03f4 INC 3af3 001b ld $1b ;03f4 '_vLR'+1 3af4 00ff ld $ff ;03f6 RET 3af5 0004 ld $04 ;| RAM segment address (high byte first) 3af6 0000 ld $00 ;| 3af7 00f9 ld $f9 ;| Length (1..256) 3af8 00cd ld $cd ;0400 DEF 3af9 00ae ld $ae 3afa 0075 ld $75 ;0402 PUSH 3afb fe00 bra ac ;+-----------------------------------+ 3afc fcfd bra $3afd ;| | 3afd 1404 ld $04,y ;| Trampoline for page $3a00 lookups | 3afe e068 jmp y,$68 ;| | 3aff c218 st [$18] ;+-----------------------------------+ 3b00 00cf ld $cf ;0403 CALL 3b01 0060 ld $60 ;0403 'Control' 3b02 001a ld $1a ;0405 LD 3b03 0075 ld $75 ;0405 'stepU'+1 3b04 0082 ld $82 ;0407 ANDI 3b05 0080 ld $80 3b06 002b ld $2b ;0409 STW 3b07 006a ld $6a ;0409 'tmp' 3b08 0021 ld $21 ;040b LDW 3b09 0074 ld $74 ;040b 'stepU' 3b0a 0082 ld $82 ;040d ANDI 3b0b 0002 ld $02 3b0c 0035 ld $35 ;040f BCC 3b0d 003f ld $3f ;0410 EQ 3b0e 0012 ld $12 3b0f 0059 ld $59 ;0412 LDI 3b10 0040 ld $40 3b11 0099 ld $99 ;0414 ADDW 3b12 006a ld $6a ;0414 'tmp' 3b13 00e3 ld $e3 ;0416 ADDI 3b14 001b ld $1b 3b15 002b ld $2b ;0418 STW 3b16 003a ld $3a ;0418 'Color' 3b17 001a ld $1a ;041a LD 3b18 0059 ld $59 ;041a 'Head'+1 3b19 00fc ld $fc ;041c XORW 3b1a 0058 ld $58 ;041c 'Head' 3b1b 0082 ld $82 ;041e ANDI 3b1c 0002 ld $02 3b1d 0035 ld $35 ;0420 BCC 3b1e 003f ld $3f ;0421 EQ 3b1f 0023 ld $23 3b20 0059 ld $59 ;0423 LDI 3b21 0001 ld $01 3b22 00fc ld $fc ;0425 XORW 3b23 003a ld $3a ;0425 'Color' 3b24 002b ld $2b ;0427 STW 3b25 003a ld $3a ;0427 'Color' 3b26 0021 ld $21 ;0429 LDW 3b27 0058 ld $58 ;0429 'Head' 3b28 00cf ld $cf ;042b CALL 3b29 005a ld $5a ;042b 'DrawBlock' 3b2a 0021 ld $21 ;042d LDW 3b2b 0058 ld $58 ;042d 'Head' 3b2c 0099 ld $99 ;042f ADDW 3b2d 0074 ld $74 ;042f 'stepU' 3b2e 002b ld $2b ;0431 STW 3b2f 0058 ld $58 ;0431 'Head' 3b30 0021 ld $21 ;0433 LDW 3b31 0058 ld $58 ;0433 'Head' 3b32 00ad ld $ad ;0435 PEEK 3b33 0082 ld $82 ;0436 ANDI 3b34 0003 ld $03 3b35 0035 ld $35 ;0438 BCC 3b36 003f ld $3f ;0439 EQ 3b37 003b ld $3b 3b38 0063 ld $63 ;043b POP 3b39 00ff ld $ff ;043c RET 3b3a 0021 ld $21 ;043d LDW 3b3b 0058 ld $58 ;043d 'Head' 3b3c 00ad ld $ad ;043f PEEK 3b3d 008c ld $8c ;0440 XORI 3b3e 0018 ld $18 3b3f 0035 ld $35 ;0442 BCC 3b40 0072 ld $72 ;0443 NE 3b41 005d ld $5d 3b42 0059 ld $59 ;0445 LDI 3b43 0040 ld $40 3b44 0099 ld $99 ;0447 ADDW 3b45 004a ld $4a ;0447 'Timer' 3b46 00cf ld $cf ;0449 CALL 3b47 007c ld $7c ;0449 'SetNote' 3b48 0059 ld $59 ;044b LDI 3b49 0002 ld $02 3b4a 005e ld $5e ;044d ST 3b4b 002c ld $2c 3b4c 0021 ld $21 ;044f LDW 3b4d 005e ld $5e ;044f 'Score' 3b4e 0099 ld $99 ;0451 ADDW 3b4f 004a ld $4a ;0451 'Timer' 3b50 002b ld $2b ;0453 STW 3b51 005e ld $5e ;0453 'Score' 3b52 00cf ld $cf ;0455 CALL 3b53 007e ld $7e ;0455 'DrawScore' 3b54 0059 ld $59 ;0457 LDI 3b55 0005 ld $05 3b56 00cf ld $cf ;0459 CALL 3b57 0081 ld $81 ;0459 'AddTimer' 3b58 0093 ld $93 ;045b INC 3b59 0083 ld $83 ;045b 'Grow' 3b5a 0093 ld $93 ;045d INC 3b5b 0085 ld $85 ;045d 'Drops' 3b5c 00cf ld $cf ;045f CALL 3b5d 005c ld $5c ;045f 'DrawHead' 3b5e 0021 ld $21 ;0461 LDW 3b5f 0083 ld $83 ;0461 'Grow' 3b60 0035 ld $35 ;0463 BCC 3b61 0056 ld $56 ;0464 LE 3b62 006c ld $6c 3b63 00e6 ld $e6 ;0466 SUBI 3b64 0001 ld $01 3b65 002b ld $2b ;0468 STW 3b66 0083 ld $83 ;0468 'Grow' 3b67 00cf ld $cf ;046a CALL 3b68 0087 ld $87 ;046a 'AddFood' 3b69 0090 ld $90 ;046c BRA 3b6a 00aa ld $aa 3b6b 0021 ld $21 ;046e LDW 3b6c 0089 ld $89 ;046e 'Tail' 3b6d 00ad ld $ad ;0470 PEEK 3b6e 002b ld $2b ;0471 STW 3b6f 006a ld $6a ;0471 'tmp' 3b70 0021 ld $21 ;0473 LDW 3b71 0085 ld $85 ;0473 'Drops' 3b72 0035 ld $35 ;0475 BCC 3b73 0056 ld $56 ;0476 LE 3b74 007e ld $7e 3b75 00e6 ld $e6 ;0478 SUBI 3b76 0001 ld $01 3b77 002b ld $2b ;047a STW 3b78 0085 ld $85 ;047a 'Drops' 3b79 0059 ld $59 ;047c LDI 3b7a 003e ld $3e 3b7b 0090 ld $90 ;047e BRA 3b7c 0080 ld $80 3b7d 0059 ld $59 ;0480 LDI 3b7e 0004 ld $04 3b7f 002b ld $2b ;0482 STW 3b80 003a ld $3a ;0482 'Color' 3b81 0021 ld $21 ;0484 LDW 3b82 0089 ld $89 ;0484 'Tail' 3b83 00cf ld $cf ;0486 CALL 3b84 005a ld $5a ;0486 'DrawBlock' 3b85 0021 ld $21 ;0488 LDW 3b86 006a ld $6a ;0488 'tmp' 3b87 0082 ld $82 ;048a ANDI 3b88 0040 ld $40 3b89 0035 ld $35 ;048c BCC 3b8a 0072 ld $72 ;048d NE 3b8b 0092 ld $92 3b8c 0011 ld $11 ;048f LDWI 3b8d 0000 ld $00 3b8e 0001 ld $01 3b8f 0090 ld $90 ;0492 BRA 3b90 0094 ld $94 3b91 0059 ld $59 ;0494 LDI 3b92 0001 ld $01 3b93 002b ld $2b ;0496 STW 3b94 008b ld $8b ;0496 'x' 3b95 0021 ld $21 ;0498 LDW 3b96 006a ld $6a ;0498 'tmp' 3b97 0082 ld $82 ;049a ANDI 3b98 0080 ld $80 3b99 0035 ld $35 ;049c BCC 3b9a 0072 ld $72 ;049d NE 3b9b 00a1 ld $a1 3b9c 0021 ld $21 ;049f LDW 3b9d 008b ld $8b ;049f 'x' 3b9e 0090 ld $90 ;04a1 BRA 3b9f 00a5 ld $a5 3ba0 0059 ld $59 ;04a3 LDI 3ba1 0000 ld $00 3ba2 00b8 ld $b8 ;04a5 SUBW 3ba3 008b ld $8b ;04a5 'x' 3ba4 00e9 ld $e9 ;04a7 LSLW 3ba5 0099 ld $99 ;04a8 ADDW 3ba6 0089 ld $89 ;04a8 'Tail' 3ba7 002b ld $2b ;04aa STW 3ba8 0089 ld $89 ;04aa 'Tail' 3ba9 00cf ld $cf ;04ac CALL 3baa 0052 ld $52 ;04ac 'TimeStep' 3bab 0090 ld $90 ;04ae BRA 3bac 0001 ld $01 3bad 002b ld $2b ;04b0 STW 3bae 008d ld $8d ;04b0 'RunGame' 3baf 00cd ld $cd ;04b2 DEF 3bb0 00ee ld $ee 3bb1 0075 ld $75 ;04b4 PUSH 3bb2 0059 ld $59 ;04b5 LDI 3bb3 0018 ld $18 3bb4 002b ld $2b ;04b7 STW 3bb5 003a ld $3a ;04b7 'Color' 3bb6 0011 ld $11 ;04b9 LDWI 3bb7 00a7 ld $a7 3bb8 0004 ld $04 3bb9 002b ld $2b ;04bc STW 3bba 0022 ld $22 3bbb 00b4 ld $b4 ;04be SYS 3bbc 00fd ld $fd 3bbd 002b ld $2b ;04c0 STW 3bbe 003c ld $3c ;04c0 'Pos' 3bbf 001a ld $1a ;04c2 LD 3bc0 003c ld $3c ;04c2 'Pos' 3bc1 00e6 ld $e6 ;04c4 SUBI 3bc2 0080 ld $80 3bc3 0035 ld $35 ;04c6 BCC 3bc4 0053 ld $53 ;04c7 GE 3bc5 00c9 ld $c9 3bc6 00e3 ld $e3 ;04c9 ADDI 3bc7 0096 ld $96 3bc8 00e3 ld $e3 ;04cb ADDI 3bc9 0005 ld $05 3bca 0082 ld $82 ;04cd ANDI 3bcb 00fe ld $fe 3bcc 005e ld $5e ;04cf ST 3bcd 003c ld $3c ;04cf 'Pos' 3bce 001a ld $1a ;04d1 LD 3bcf 003d ld $3d ;04d1 'Pos'+1 3bd0 0082 ld $82 ;04d3 ANDI 3bd1 007f ld $7f 3bd2 00e6 ld $e6 ;04d5 SUBI 3bd3 0040 ld $40 3bd4 0035 ld $35 ;04d7 BCC 3bd5 0053 ld $53 ;04d8 GE 3bd6 00da ld $da 3bd7 00e3 ld $e3 ;04da ADDI 3bd8 0066 ld $66 3bd9 00e3 ld $e3 ;04dc ADDI 3bda 0015 ld $15 3bdb 0082 ld $82 ;04de ANDI 3bdc 00fe ld $fe 3bdd 005e ld $5e ;04e0 ST 3bde 003d ld $3d ;04e0 'Pos'+1 3bdf 0021 ld $21 ;04e2 LDW 3be0 003c ld $3c ;04e2 'Pos' 3be1 00ad ld $ad ;04e4 PEEK 3be2 008c ld $8c ;04e5 XORI 3be3 0004 ld $04 3be4 0035 ld $35 ;04e7 BCC 3be5 0072 ld $72 ;04e8 NE 3be6 00b7 ld $b7 3be7 0021 ld $21 ;04ea LDW 3be8 003c ld $3c ;04ea 'Pos' 3be9 00cf ld $cf ;04ec CALL 3bea 005a ld $5a ;04ec 'DrawBlock' 3beb 0063 ld $63 ;04ee POP 3bec 00ff ld $ff ;04ef RET 3bed 002b ld $2b ;04f0 STW 3bee 0087 ld $87 ;04f0 'AddFood' 3bef 0059 ld $59 ;04f2 LDI 3bf0 0000 ld $00 3bf1 002b ld $2b ;04f4 STW 3bf2 0076 ld $76 ;04f4 'Bias' 3bf3 0093 ld $93 ;04f6 INC 3bf4 001b ld $1b ;04f6 '_vLR'+1 3bf5 00ff ld $ff ;04f8 RET 3bf6 0005 ld $05 ;| RAM segment address (high byte first) 3bf7 0000 ld $00 ;| 3bf8 00ed ld $ed ;| Length (1..256) 3bf9 00cd ld $cd ;0500 DEF 3bfa 00e6 ld $e6 3bfb fe00 bra ac ;+-----------------------------------+ 3bfc fcfd bra $3bfd ;| | 3bfd 1404 ld $04,y ;| Trampoline for page $3b00 lookups | 3bfe e068 jmp y,$68 ;| | 3bff c218 st [$18] ;+-----------------------------------+ 3c00 0075 ld $75 ;0502 PUSH 3c01 001a ld $1a ;0503 LD 3c02 0011 ld $11 3c03 0082 ld $82 ;0505 ANDI 3c04 00cf ld $cf 3c05 008c ld $8c ;0507 XORI 3c06 00cf ld $cf 3c07 0035 ld $35 ;0509 BCC 3c08 003f ld $3f ;050a EQ 3c09 000e ld $0e 3c0a 00cf ld $cf ;050c CALL 3c0b 008f ld $8f ;050c 'SetupGame' 3c0c 0063 ld $63 ;050e POP 3c0d 00ff ld $ff ;050f RET 3c0e 0021 ld $21 ;0510 LDW 3c0f 0078 ld $78 ;0510 'TurnL' 3c10 002b ld $2b ;0512 STW 3c11 0070 ld $70 ;0512 'p' 3c12 0021 ld $21 ;0514 LDW 3c13 007a ld $7a ;0514 'TurnR' 3c14 002b ld $2b ;0516 STW 3c15 0091 ld $91 ;0516 'q' 3c16 0021 ld $21 ;0518 LDW 3c17 0058 ld $58 ;0518 'Head' 3c18 0099 ld $99 ;051a ADDW 3c19 0074 ld $74 ;051a 'stepU' 3c1a 00ad ld $ad ;051c PEEK 3c1b 008c ld $8c ;051d XORI 3c1c 0004 ld $04 3c1d 002b ld $2b ;051f STW 3c1e 006a ld $6a ;051f 'tmp' 3c1f 0035 ld $35 ;0521 BCC 3c20 003f ld $3f ;0522 EQ 3c21 002b ld $2b 3c22 008c ld $8c ;0524 XORI 3c23 001c ld $1c 3c24 0035 ld $35 ;0526 BCC 3c25 0072 ld $72 ;0527 NE 3c26 0029 ld $29 3c27 002b ld $2b ;0529 STW 3c28 006a ld $6a ;0529 'tmp' 3c29 0090 ld $90 ;052b BRA 3c2a 0039 ld $39 3c2b 0021 ld $21 ;052d LDW 3c2c 0058 ld $58 ;052d 'Head' 3c2d 0099 ld $99 ;052f ADDW 3c2e 0074 ld $74 ;052f 'stepU' 3c2f 0099 ld $99 ;0531 ADDW 3c30 0074 ld $74 ;0531 'stepU' 3c31 00ad ld $ad ;0533 PEEK 3c32 008c ld $8c ;0534 XORI 3c33 003e ld $3e 3c34 0035 ld $35 ;0536 BCC 3c35 0072 ld $72 ;0537 NE 3c36 0039 ld $39 3c37 0093 ld $93 ;0539 INC 3c38 006b ld $6b ;0539 'tmp'+1 3c39 0021 ld $21 ;053b LDW 3c3a 0058 ld $58 ;053b 'Head' 3c3b 00b8 ld $b8 ;053d SUBW 3c3c 0072 ld $72 ;053d 'stepV' 3c3d 00ad ld $ad ;053f PEEK 3c3e 008c ld $8c ;0540 XORI 3c3f 0004 ld $04 3c40 0035 ld $35 ;0542 BCC 3c41 003f ld $3f ;0543 EQ 3c42 0054 ld $54 3c43 008c ld $8c ;0545 XORI 3c44 001c ld $1c 3c45 0035 ld $35 ;0547 BCC 3c46 0072 ld $72 ;0548 NE 3c47 004e ld $4e 3c48 002b ld $2b ;054a STW 3c49 0091 ld $91 ;054a 'q' 3c4a 0093 ld $93 ;054c INC 3c4b 006b ld $6b ;054c 'tmp'+1 3c4c 0090 ld $90 ;054e BRA 3c4d 0052 ld $52 3c4e 0059 ld $59 ;0550 LDI 3c4f 0000 ld $00 3c50 002b ld $2b ;0552 STW 3c51 0070 ld $70 ;0552 'p' 3c52 0090 ld $90 ;0554 BRA 3c53 0071 ld $71 3c54 0021 ld $21 ;0556 LDW 3c55 0058 ld $58 ;0556 'Head' 3c56 00b8 ld $b8 ;0558 SUBW 3c57 0072 ld $72 ;0558 'stepV' 3c58 00b8 ld $b8 ;055a SUBW 3c59 0072 ld $72 ;055a 'stepV' 3c5a 00ad ld $ad ;055c PEEK 3c5b 008c ld $8c ;055d XORI 3c5c 0004 ld $04 3c5d 0035 ld $35 ;055f BCC 3c5e 003f ld $3f ;0560 EQ 3c5f 0071 ld $71 3c60 008c ld $8c ;0562 XORI 3c61 001c ld $1c 3c62 0035 ld $35 ;0564 BCC 3c63 0072 ld $72 ;0565 NE 3c64 006b ld $6b 3c65 002b ld $2b ;0567 STW 3c66 0091 ld $91 ;0567 'q' 3c67 0093 ld $93 ;0569 INC 3c68 006b ld $6b ;0569 'tmp'+1 3c69 0090 ld $90 ;056b BRA 3c6a 0071 ld $71 3c6b 0021 ld $21 ;056d LDW 3c6c 0076 ld $76 ;056d 'Bias' 3c6d 00e3 ld $e3 ;056f ADDI 3c6e 000f ld $0f 3c6f 0021 ld $21 ;0571 LDW 3c70 0076 ld $76 ;0571 'Bias' 3c71 0021 ld $21 ;0573 LDW 3c72 0058 ld $58 ;0573 'Head' 3c73 0099 ld $99 ;0575 ADDW 3c74 0072 ld $72 ;0575 'stepV' 3c75 00ad ld $ad ;0577 PEEK 3c76 008c ld $8c ;0578 XORI 3c77 0004 ld $04 3c78 0035 ld $35 ;057a BCC 3c79 003f ld $3f ;057b EQ 3c7a 008c ld $8c 3c7b 008c ld $8c ;057d XORI 3c7c 001c ld $1c 3c7d 0035 ld $35 ;057f BCC 3c7e 0072 ld $72 ;0580 NE 3c7f 0086 ld $86 3c80 002b ld $2b ;0582 STW 3c81 0070 ld $70 ;0582 'p' 3c82 0093 ld $93 ;0584 INC 3c83 006b ld $6b ;0584 'tmp'+1 3c84 0090 ld $90 ;0586 BRA 3c85 008a ld $8a 3c86 0059 ld $59 ;0588 LDI 3c87 0000 ld $00 3c88 002b ld $2b ;058a STW 3c89 0091 ld $91 ;058a 'q' 3c8a 0090 ld $90 ;058c BRA 3c8b 00a9 ld $a9 3c8c 0021 ld $21 ;058e LDW 3c8d 0058 ld $58 ;058e 'Head' 3c8e 0099 ld $99 ;0590 ADDW 3c8f 0072 ld $72 ;0590 'stepV' 3c90 0099 ld $99 ;0592 ADDW 3c91 0072 ld $72 ;0592 'stepV' 3c92 00ad ld $ad ;0594 PEEK 3c93 008c ld $8c ;0595 XORI 3c94 0004 ld $04 3c95 0035 ld $35 ;0597 BCC 3c96 003f ld $3f ;0598 EQ 3c97 00a9 ld $a9 3c98 008c ld $8c ;059a XORI 3c99 001c ld $1c 3c9a 0035 ld $35 ;059c BCC 3c9b 0072 ld $72 ;059d NE 3c9c 00a3 ld $a3 3c9d 002b ld $2b ;059f STW 3c9e 0070 ld $70 ;059f 'p' 3c9f 0093 ld $93 ;05a1 INC 3ca0 006b ld $6b ;05a1 'tmp'+1 3ca1 0090 ld $90 ;05a3 BRA 3ca2 00a9 ld $a9 3ca3 0021 ld $21 ;05a5 LDW 3ca4 0076 ld $76 ;05a5 'Bias' 3ca5 00e6 ld $e6 ;05a7 SUBI 3ca6 000f ld $0f 3ca7 0021 ld $21 ;05a9 LDW 3ca8 0076 ld $76 ;05a9 'Bias' 3ca9 0021 ld $21 ;05ab LDW 3caa 006a ld $6a ;05ab 'tmp' 3cab 0035 ld $35 ;05ad BCC 3cac 0072 ld $72 ;05ae NE 3cad 00bb ld $bb 3cae 001a ld $1a ;05b0 LD 3caf 0006 ld $06 3cb0 00e6 ld $e6 ;05b2 SUBI 3cb1 000d ld $0d 3cb2 0035 ld $35 ;05b4 BCC 3cb3 0053 ld $53 ;05b5 GE 3cb4 00b9 ld $b9 3cb5 0059 ld $59 ;05b7 LDI 3cb6 0001 ld $01 3cb7 0090 ld $90 ;05b9 BRA 3cb8 00bb ld $bb 3cb9 0059 ld $59 ;05bb LDI 3cba 0000 ld $00 3cbb 0035 ld $35 ;05bd BCC 3cbc 003f ld $3f ;05be EQ 3cbd 00e4 ld $e4 3cbe 0021 ld $21 ;05c0 LDW 3cbf 0070 ld $70 ;05c0 'p' 3cc0 0035 ld $35 ;05c2 BCC 3cc1 0072 ld $72 ;05c3 NE 3cc2 00c7 ld $c7 3cc3 0021 ld $21 ;05c5 LDW 3cc4 0091 ld $91 ;05c5 'q' 3cc5 0090 ld $90 ;05c7 BRA 3cc6 00df ld $df 3cc7 0021 ld $21 ;05c9 LDW 3cc8 0091 ld $91 ;05c9 'q' 3cc9 0035 ld $35 ;05cb BCC 3cca 0072 ld $72 ;05cc NE 3ccb 00d0 ld $d0 3ccc 0021 ld $21 ;05ce LDW 3ccd 0070 ld $70 ;05ce 'p' 3cce 0090 ld $90 ;05d0 BRA 3ccf 00df ld $df 3cd0 001a ld $1a ;05d2 LD 3cd1 0006 ld $06 3cd2 00e6 ld $e6 ;05d4 SUBI 3cd3 0080 ld $80 3cd4 0099 ld $99 ;05d6 ADDW 3cd5 0076 ld $76 ;05d6 'Bias' 3cd6 0035 ld $35 ;05d8 BCC 3cd7 0053 ld $53 ;05d9 GE 3cd8 00dd ld $dd 3cd9 0021 ld $21 ;05db LDW 3cda 0070 ld $70 ;05db 'p' 3cdb 0090 ld $90 ;05dd BRA 3cdc 00df ld $df 3cdd 0021 ld $21 ;05df LDW 3cde 0091 ld $91 ;05df 'q' 3cdf 0035 ld $35 ;05e1 BCC 3ce0 003f ld $3f ;05e2 EQ 3ce1 00e4 ld $e4 3ce2 00cf ld $cf ;05e4 CALL 3ce3 0018 ld $18 ;05e4 vAC 3ce4 0063 ld $63 ;05e6 POP 3ce5 00ff ld $ff ;05e7 RET 3ce6 002b ld $2b ;05e8 STW 3ce7 0093 ld $93 ;05e8 'AutoControl' 3ce8 0093 ld $93 ;05ea INC 3ce9 001b ld $1b ;05ea '_vLR'+1 3cea 00ff ld $ff ;05ec RET 3ceb 0006 ld $06 ;| RAM segment address (high byte first) 3cec 0000 ld $00 ;| 3ced 00fa ld $fa ;| Length (1..256) 3cee 00cd ld $cd ;0600 DEF 3cef 0016 ld $16 3cf0 0075 ld $75 ;0602 PUSH 3cf1 0099 ld $99 ;0603 ADDW 3cf2 004a ld $4a ;0603 'Timer' 3cf3 002b ld $2b ;0605 STW 3cf4 004a ld $4a ;0605 'Timer' 3cf5 00e6 ld $e6 ;0607 SUBI 3cf6 000f ld $0f 3cf7 0035 ld $35 ;0609 BCC 3cf8 0056 ld $56 ;060a LE 3cf9 000e ld $0e 3cfa 0059 ld $59 ;060c LDI 3cfb fe00 bra ac ;+-----------------------------------+ 3cfc fcfd bra $3cfd ;| | 3cfd 1404 ld $04,y ;| Trampoline for page $3c00 lookups | 3cfe e068 jmp y,$68 ;| | 3cff c218 st [$18] ;+-----------------------------------+ 3d00 000f ld $0f 3d01 002b ld $2b ;060e STW 3d02 004a ld $4a ;060e 'Timer' 3d03 001a ld $1a ;0610 LD 3d04 000e ld $0e 3d05 002b ld $2b ;0612 STW 3d06 0048 ld $48 ;0612 'TimeOut' 3d07 00cf ld $cf ;0614 CALL 3d08 004c ld $4c ;0614 'DrawTimer' 3d09 0063 ld $63 ;0616 POP 3d0a 00ff ld $ff ;0617 RET 3d0b 002b ld $2b ;0618 STW 3d0c 0081 ld $81 ;0618 'AddTimer' 3d0d 00cd ld $cd ;061a DEF 3d0e 00b3 ld $b3 3d0f 0075 ld $75 ;061c PUSH 3d10 0059 ld $59 ;061d LDI 3d11 0000 ld $00 3d12 002b ld $2b ;061f STW 3d13 005e ld $5e ;061f 'Score' 3d14 002b ld $2b ;0621 STW 3d15 004a ld $4a ;0621 'Timer' 3d16 00cf ld $cf ;0623 CALL 3d17 007e ld $7e ;0623 'DrawScore' 3d18 0059 ld $59 ;0625 LDI 3d19 000f ld $0f 3d1a 002b ld $2b ;0627 STW 3d1b 004a ld $4a ;0627 'Timer' 3d1c 00cf ld $cf ;0629 CALL 3d1d 004c ld $4c ;0629 'DrawTimer' 3d1e 00cf ld $cf ;062b CALL 3d1f 0064 ld $64 ;062b 'DrawHighScore' 3d20 0059 ld $59 ;062d LDI 3d21 0004 ld $04 3d22 002b ld $2b ;062f STW 3d23 0038 ld $38 ;062f 'BgColor' 3d24 0011 ld $11 ;0631 LDWI 3d25 0000 ld $00 3d26 0010 ld $10 3d27 002b ld $2b ;0634 STW 3d28 003c ld $3c ;0634 'Pos' 3d29 00cf ld $cf ;0636 CALL 3d2a 006c ld $6c ;0636 'ClearScreen' 3d2b 0059 ld $59 ;0638 LDI 3d2c 001a ld $1a 3d2d 002b ld $2b ;063a STW 3d2e 003a ld $3a ;063a 'Color' 3d2f 0059 ld $59 ;063c LDI 3d30 0001 ld $01 3d31 002b ld $2b ;063e STW 3d32 0044 ld $44 ;063e 'Step' 3d33 0059 ld $59 ;0640 LDI 3d34 009f ld $9f 3d35 00cf ld $cf ;0642 CALL 3d36 0046 ld $46 ;0642 'DrawLine' 3d37 0011 ld $11 ;0644 LDWI 3d38 0000 ld $00 3d39 0001 ld $01 3d3a 002b ld $2b ;0647 STW 3d3b 0044 ld $44 ;0647 'Step' 3d3c 0059 ld $59 ;0649 LDI 3d3d 006f ld $6f 3d3e 00cf ld $cf ;064b CALL 3d3f 0046 ld $46 ;064b 'DrawLine' 3d40 0011 ld $11 ;064d LDWI 3d41 00ff ld $ff 3d42 00ff ld $ff 3d43 002b ld $2b ;0650 STW 3d44 0044 ld $44 ;0650 'Step' 3d45 0059 ld $59 ;0652 LDI 3d46 009f ld $9f 3d47 00cf ld $cf ;0654 CALL 3d48 0046 ld $46 ;0654 'DrawLine' 3d49 0011 ld $11 ;0656 LDWI 3d4a 0000 ld $00 3d4b 00ff ld $ff 3d4c 002b ld $2b ;0659 STW 3d4d 0044 ld $44 ;0659 'Step' 3d4e 0059 ld $59 ;065b LDI 3d4f 006e ld $6e 3d50 00cf ld $cf ;065d CALL 3d51 0046 ld $46 ;065d 'DrawLine' 3d52 0059 ld $59 ;065f LDI 3d53 0001 ld $01 3d54 002b ld $2b ;0661 STW 3d55 0044 ld $44 ;0661 'Step' 3d56 0059 ld $59 ;0663 LDI 3d57 009e ld $9e 3d58 00cf ld $cf ;0665 CALL 3d59 0046 ld $46 ;0665 'DrawLine' 3d5a 0011 ld $11 ;0667 LDWI 3d5b 0000 ld $00 3d5c 0001 ld $01 3d5d 002b ld $2b ;066a STW 3d5e 0044 ld $44 ;066a 'Step' 3d5f 0059 ld $59 ;066c LDI 3d60 006d ld $6d 3d61 00cf ld $cf ;066e CALL 3d62 0046 ld $46 ;066e 'DrawLine' 3d63 0011 ld $11 ;0670 LDWI 3d64 00ff ld $ff 3d65 00ff ld $ff 3d66 002b ld $2b ;0673 STW 3d67 0044 ld $44 ;0673 'Step' 3d68 0059 ld $59 ;0675 LDI 3d69 009d ld $9d 3d6a 00cf ld $cf ;0677 CALL 3d6b 0046 ld $46 ;0677 'DrawLine' 3d6c 0011 ld $11 ;0679 LDWI 3d6d 0000 ld $00 3d6e 00ff ld $ff 3d6f 002b ld $2b ;067c STW 3d70 0044 ld $44 ;067c 'Step' 3d71 0059 ld $59 ;067e LDI 3d72 006d ld $6d 3d73 00cf ld $cf ;0680 CALL 3d74 0046 ld $46 ;0680 'DrawLine' 3d75 00cf ld $cf ;0682 CALL 3d76 0095 ld $95 ;0682 'GetReady' 3d77 0011 ld $11 ;0684 LDWI 3d78 0030 ld $30 3d79 0044 ld $44 3d7a 002b ld $2b ;0687 STW 3d7b 0058 ld $58 ;0687 'Head' 3d7c 002b ld $2b ;0689 STW 3d7d 0089 ld $89 ;0689 'Tail' 3d7e 00cf ld $cf ;068b CALL 3d7f 005c ld $5c ;068b 'DrawHead' 3d80 0059 ld $59 ;068d LDI 3d81 0000 ld $00 3d82 002b ld $2b ;068f STW 3d83 0083 ld $83 ;068f 'Grow' 3d84 002b ld $2b ;0691 STW 3d85 0085 ld $85 ;0691 'Drops' 3d86 002b ld $2b ;0693 STW 3d87 004a ld $4a ;0693 'Timer' 3d88 0059 ld $59 ;0695 LDI 3d89 000f ld $0f 3d8a 00cf ld $cf ;0697 CALL 3d8b 0081 ld $81 ;0697 'AddTimer' 3d8c 0059 ld $59 ;0699 LDI 3d8d 0002 ld $02 3d8e 002b ld $2b ;069b STW 3d8f 0074 ld $74 ;069b 'stepU' 3d90 0011 ld $11 ;069d LDWI 3d91 0000 ld $00 3d92 0002 ld $02 3d93 002b ld $2b ;06a0 STW 3d94 0072 ld $72 ;06a0 'stepV' 3d95 0059 ld $59 ;06a2 LDI 3d96 0019 ld $19 3d97 002b ld $2b ;06a4 STW 3d98 0034 ld $34 ;06a4 'i' 3d99 00cf ld $cf ;06a6 CALL 3d9a 0087 ld $87 ;06a6 'AddFood' 3d9b 0021 ld $21 ;06a8 LDW 3d9c 0034 ld $34 ;06a8 'i' 3d9d 00e6 ld $e6 ;06aa SUBI 3d9e 0001 ld $01 3d9f 0035 ld $35 ;06ac BCC 3da0 004d ld $4d ;06ad GT 3da1 00a2 ld $a2 3da2 0021 ld $21 ;06af LDW 3da3 0097 ld $97 ;06af 'LaunchControl' 3da4 002b ld $2b ;06b1 STW 3da5 0060 ld $60 ;06b1 'Control' 3da6 0063 ld $63 ;06b3 POP 3da7 00ff ld $ff ;06b4 RET 3da8 002b ld $2b ;06b5 STW 3da9 008f ld $8f ;06b5 'SetupGame' 3daa 00cd ld $cd ;06b7 DEF 3dab 00f0 ld $f0 3dac 0075 ld $75 ;06b9 PUSH 3dad 0011 ld $11 ;06ba LDWI 3dae 0002 ld $02 3daf 0008 ld $08 3db0 002b ld $2b ;06bd STW 3db1 003c ld $3c ;06bd 'Pos' 3db2 0021 ld $21 ;06bf LDW 3db3 005e ld $5e ;06bf 'Score' 3db4 00b8 ld $b8 ;06c1 SUBW 3db5 0030 ld $30 ;06c1 'HighScore' 3db6 0035 ld $35 ;06c3 BCC 3db7 0056 ld $56 ;06c4 LE 3db8 00c8 ld $c8 3db9 0059 ld $59 ;06c6 LDI 3dba 001e ld $1e 3dbb 0090 ld $90 ;06c8 BRA 3dbc 00ca ld $ca 3dbd 0059 ld $59 ;06ca LDI 3dbe 0008 ld $08 3dbf 002b ld $2b ;06cc STW 3dc0 003a ld $3a ;06cc 'Color' 3dc1 0059 ld $59 ;06ce LDI 3dc2 0000 ld $00 3dc3 002b ld $2b ;06d0 STW 3dc4 0038 ld $38 ;06d0 'BgColor' 3dc5 0021 ld $21 ;06d2 LDW 3dc6 005e ld $5e ;06d2 'Score' 3dc7 002b ld $2b ;06d4 STW 3dc8 0054 ld $54 ;06d4 'Value' 3dc9 00cf ld $cf ;06d6 CALL 3dca 0099 ld $99 ;06d6 'DrawNumber4' 3dcb 0021 ld $21 ;06d8 LDW 3dcc 005e ld $5e ;06d8 'Score' 3dcd 00e6 ld $e6 ;06da SUBI 3dce 0064 ld $64 3dcf 0035 ld $35 ;06dc BCC 3dd0 0053 ld $53 ;06dd GE 3dd1 00e1 ld $e1 3dd2 0059 ld $59 ;06df LDI 3dd3 0004 ld $04 3dd4 0090 ld $90 ;06e1 BRA 3dd5 00ec ld $ec 3dd6 00e6 ld $e6 ;06e3 SUBI 3dd7 00c8 ld $c8 3dd8 0035 ld $35 ;06e5 BCC 3dd9 0053 ld $53 ;06e6 GE 3dda 00ea ld $ea 3ddb 0059 ld $59 ;06e8 LDI 3ddc 0003 ld $03 3ddd 0090 ld $90 ;06ea BRA 3dde 00ec ld $ec 3ddf 0059 ld $59 ;06ec LDI 3de0 0002 ld $02 3de1 002b ld $2b ;06ee STW 3de2 004e ld $4e ;06ee 'Delay' 3de3 0063 ld $63 ;06f0 POP 3de4 00ff ld $ff ;06f1 RET 3de5 002b ld $2b ;06f2 STW 3de6 007e ld $7e ;06f2 'DrawScore' 3de7 0011 ld $11 ;06f4 LDWI 3de8 00a0 ld $a0 3de9 0008 ld $08 3dea 002b ld $2b ;06f7 STW 3deb 001a ld $1a 3dec 00ff ld $ff ;06f9 RET 3ded 0008 ld $08 ;| RAM segment address (high byte first) 3dee 00a0 ld $a0 ;| 3def 0056 ld $56 ;| Length (1..256) 3df0 00cd ld $cd ;08a0 DEF 3df1 00d4 ld $d4 3df2 0075 ld $75 ;08a2 PUSH 3df3 0011 ld $11 ;08a3 LDWI 3df4 009c ld $9c 3df5 0044 ld $44 3df6 00b8 ld $b8 ;08a6 SUBW 3df7 0058 ld $58 ;08a6 'Head' 3df8 0035 ld $35 ;08a8 BCC 3df9 0072 ld $72 ;08a9 NE 3dfa 00c3 ld $c3 3dfb fe00 bra ac ;+-----------------------------------+ 3dfc fcfd bra $3dfd ;| | 3dfd 1404 ld $04,y ;| Trampoline for page $3d00 lookups | 3dfe e068 jmp y,$68 ;| | 3dff c218 st [$18] ;+-----------------------------------+ 3e00 0059 ld $59 ;08ab LDI 3e01 001e ld $1e 3e02 002b ld $2b ;08ad STW 3e03 003a ld $3a ;08ad 'Color' 3e04 0011 ld $11 ;08af LDWI 3e05 0002 ld $02 3e06 0008 ld $08 3e07 002b ld $2b ;08b2 STW 3e08 003c ld $3c ;08b2 'Pos' 3e09 00cd ld $cd ;08b4 DEF 3e0a 00b9 ld $b9 3e0b 0041 ld $41 ;08b6 'A' 3e0c 0055 ld $55 ;08b7 'U' 3e0d 0054 ld $54 ;08b8 'T' 3e0e 004f ld $4f ;08b9 'O' 3e0f 0000 ld $00 ;08ba 0 3e10 00cf ld $cf ;08bb CALL 3e11 0042 ld $42 ;08bb 'PrintText' 3e12 0021 ld $21 ;08bd LDW 3e13 0093 ld $93 ;08bd 'AutoControl' 3e14 002b ld $2b ;08bf STW 3e15 0060 ld $60 ;08bf 'Control' 3e16 00cf ld $cf ;08c1 CALL 3e17 0018 ld $18 ;08c1 vAC 3e18 0090 ld $90 ;08c3 BRA 3e19 00d2 ld $d2 3e1a 001a ld $1a ;08c5 LD 3e1b 0011 ld $11 3e1c 0082 ld $82 ;08c7 ANDI 3e1d 00cf ld $cf 3e1e 008c ld $8c ;08c9 XORI 3e1f 00cf ld $cf 3e20 0035 ld $35 ;08cb BCC 3e21 003f ld $3f ;08cc EQ 3e22 00d2 ld $d2 3e23 0021 ld $21 ;08ce LDW 3e24 0062 ld $62 ;08ce 'PlayerControl' 3e25 002b ld $2b ;08d0 STW 3e26 0060 ld $60 ;08d0 'Control' 3e27 00cf ld $cf ;08d2 CALL 3e28 0018 ld $18 ;08d2 vAC 3e29 0063 ld $63 ;08d4 POP 3e2a 00ff ld $ff ;08d5 RET 3e2b 002b ld $2b ;08d6 STW 3e2c 0097 ld $97 ;08d6 'LaunchControl' 3e2d 00cd ld $cd ;08d8 DEF 3e2e 00ef ld $ef 3e2f 0075 ld $75 ;08da PUSH 3e30 0059 ld $59 ;08db LDI 3e31 0020 ld $20 3e32 002b ld $2b ;08dd STW 3e33 0032 ld $32 ;08dd 'Char' 3e34 0059 ld $59 ;08df LDI 3e35 000a ld $0a 3e36 002b ld $2b ;08e1 STW 3e37 009b ld $9b ;08e1 'Radix' 3e38 00cf ld $cf ;08e3 CALL 3e39 009d ld $9d ;08e3 'DrawNextDigit' 3e3a 0059 ld $59 ;08e5 LDI 3e3b 0030 ld $30 3e3c 002b ld $2b ;08e7 STW 3e3d 0032 ld $32 ;08e7 'Char' 3e3e 0059 ld $59 ;08e9 LDI 3e3f 0001 ld $01 3e40 002b ld $2b ;08eb STW 3e41 009b ld $9b ;08eb 'Radix' 3e42 00cf ld $cf ;08ed CALL 3e43 009d ld $9d ;08ed 'DrawNextDigit' 3e44 0063 ld $63 ;08ef POP 3e45 00ff ld $ff ;08f0 RET 3e46 002b ld $2b ;08f1 STW 3e47 0056 ld $56 ;08f1 'DrawNumber2' 3e48 0093 ld $93 ;08f3 INC 3e49 001b ld $1b ;08f3 '_vLR'+1 3e4a 00ff ld $ff ;08f5 RET 3e4b 0009 ld $09 ;| RAM segment address (high byte first) 3e4c 00a0 ld $a0 ;| 3e4d 0056 ld $56 ;| Length (1..256) 3e4e 00cd ld $cd ;09a0 DEF 3e4f 00c7 ld $c7 3e50 0075 ld $75 ;09a2 PUSH 3e51 0021 ld $21 ;09a3 LDW 3e52 0054 ld $54 ;09a3 'Value' 3e53 00b8 ld $b8 ;09a5 SUBW 3e54 009b ld $9b ;09a5 'Radix' 3e55 0035 ld $35 ;09a7 BCC 3e56 0050 ld $50 ;09a8 LT 3e57 00c3 ld $c3 3e58 002b ld $2b ;09aa STW 3e59 0054 ld $54 ;09aa 'Value' 3e5a 0059 ld $59 ;09ac LDI 3e5b 0031 ld $31 3e5c 002b ld $2b ;09ae STW 3e5d 0032 ld $32 ;09ae 'Char' 3e5e 0021 ld $21 ;09b0 LDW 3e5f 0054 ld $54 ;09b0 'Value' 3e60 00b8 ld $b8 ;09b2 SUBW 3e61 009b ld $9b ;09b2 'Radix' 3e62 0035 ld $35 ;09b4 BCC 3e63 0050 ld $50 ;09b5 LT 3e64 00bb ld $bb 3e65 002b ld $2b ;09b7 STW 3e66 0054 ld $54 ;09b7 'Value' 3e67 0093 ld $93 ;09b9 INC 3e68 0032 ld $32 ;09b9 'Char' 3e69 0090 ld $90 ;09bb BRA 3e6a 00b0 ld $b0 3e6b 00cf ld $cf ;09bd CALL 3e6c 003e ld $3e ;09bd 'PrintChar' 3e6d 0059 ld $59 ;09bf LDI 3e6e 0030 ld $30 3e6f 002b ld $2b ;09c1 STW 3e70 0032 ld $32 ;09c1 'Char' 3e71 0090 ld $90 ;09c3 BRA 3e72 00c5 ld $c5 3e73 00cf ld $cf ;09c5 CALL 3e74 003e ld $3e ;09c5 'PrintChar' 3e75 0063 ld $63 ;09c7 POP 3e76 00ff ld $ff ;09c8 RET 3e77 002b ld $2b ;09c9 STW 3e78 009d ld $9d ;09c9 'DrawNextDigit' 3e79 00cd ld $cd ;09cb DEF 3e7a 00ef ld $ef 3e7b 0075 ld $75 ;09cd PUSH 3e7c 0059 ld $59 ;09ce LDI 3e7d 0020 ld $20 3e7e 002b ld $2b ;09d0 STW 3e7f 0032 ld $32 ;09d0 'Char' 3e80 0011 ld $11 ;09d2 LDWI 3e81 00e8 ld $e8 3e82 0003 ld $03 3e83 002b ld $2b ;09d5 STW 3e84 009b ld $9b ;09d5 'Radix' 3e85 00cf ld $cf ;09d7 CALL 3e86 009d ld $9d ;09d7 'DrawNextDigit' 3e87 0059 ld $59 ;09d9 LDI 3e88 0064 ld $64 3e89 002b ld $2b ;09db STW 3e8a 009b ld $9b ;09db 'Radix' 3e8b 00cf ld $cf ;09dd CALL 3e8c 009d ld $9d ;09dd 'DrawNextDigit' 3e8d 0059 ld $59 ;09df LDI 3e8e 000a ld $0a 3e8f 002b ld $2b ;09e1 STW 3e90 009b ld $9b ;09e1 'Radix' 3e91 00cf ld $cf ;09e3 CALL 3e92 009d ld $9d ;09e3 'DrawNextDigit' 3e93 0059 ld $59 ;09e5 LDI 3e94 0030 ld $30 3e95 002b ld $2b ;09e7 STW 3e96 0032 ld $32 ;09e7 'Char' 3e97 0059 ld $59 ;09e9 LDI 3e98 0001 ld $01 3e99 002b ld $2b ;09eb STW 3e9a 009b ld $9b ;09eb 'Radix' 3e9b 00cf ld $cf ;09ed CALL 3e9c 009d ld $9d ;09ed 'DrawNextDigit' 3e9d 0063 ld $63 ;09ef POP 3e9e 00ff ld $ff ;09f0 RET 3e9f 002b ld $2b ;09f1 STW 3ea0 0099 ld $99 ;09f1 'DrawNumber4' 3ea1 0093 ld $93 ;09f3 INC 3ea2 001b ld $1b ;09f3 '_vLR'+1 3ea3 00ff ld $ff ;09f5 RET 3ea4 000a ld $0a ;| RAM segment address (high byte first) 3ea5 00a0 ld $a0 ;| 3ea6 0056 ld $56 ;| Length (1..256) 3ea7 00cd ld $cd ;0aa0 DEF 3ea8 00ba ld $ba 3ea9 0075 ld $75 ;0aa2 PUSH 3eaa 0011 ld $11 ;0aa3 LDWI 3eab 0074 ld $74 3eac 0008 ld $08 3ead 002b ld $2b ;0aa6 STW 3eae 003c ld $3c ;0aa6 'Pos' 3eaf 0059 ld $59 ;0aa8 LDI 3eb0 0000 ld $00 3eb1 002b ld $2b ;0aaa STW 3eb2 0038 ld $38 ;0aaa 'BgColor' 3eb3 00cd ld $cd ;0aac DEF 3eb4 00b0 ld $b0 3eb5 0048 ld $48 ;0aae 'H' 3eb6 0049 ld $49 ;0aaf 'I' 3eb7 0020 ld $20 ;0ab0 ' ' 3eb8 0000 ld $00 ;0ab1 0 3eb9 00cf ld $cf ;0ab2 CALL 3eba 0042 ld $42 ;0ab2 'PrintText' 3ebb 0021 ld $21 ;0ab4 LDW 3ebc 0030 ld $30 ;0ab4 'HighScore' 3ebd 002b ld $2b ;0ab6 STW 3ebe 0054 ld $54 ;0ab6 'Value' 3ebf 00cf ld $cf ;0ab8 CALL 3ec0 0099 ld $99 ;0ab8 'DrawNumber4' 3ec1 0063 ld $63 ;0aba POP 3ec2 00ff ld $ff ;0abb RET 3ec3 002b ld $2b ;0abc STW 3ec4 0064 ld $64 ;0abc 'DrawHighScore' 3ec5 00cd ld $cd ;0abe DEF 3ec6 00ef ld $ef 3ec7 002b ld $2b ;0ac0 STW 3ec8 0034 ld $34 ;0ac0 'i' 3ec9 0088 ld $88 ;0ac2 ORI 3eca 00ff ld $ff 3ecb 008c ld $8c ;0ac4 XORI 3ecc 00ff ld $ff 3ecd 0088 ld $88 ;0ac6 ORI 3ece 00fa ld $fa 3ecf 002b ld $2b ;0ac8 STW 3ed0 0070 ld $70 ;0ac8 'p' 3ed1 001a ld $1a ;0aca LD 3ed2 0034 ld $34 ;0aca 'i' 3ed3 002b ld $2b ;0acc STW 3ed4 0034 ld $34 ;0acc 'i' 3ed5 0059 ld $59 ;0ace LDI 3ed6 0000 ld $00 3ed7 00f0 ld $f0 ;0ad0 POKE 3ed8 0070 ld $70 ;0ad0 'p' 3ed9 0093 ld $93 ;0ad2 INC 3eda 0070 ld $70 ;0ad2 'p' 3edb 0059 ld $59 ;0ad4 LDI 3edc 0001 ld $01 3edd 00f0 ld $f0 ;0ad6 POKE 3ede 0070 ld $70 ;0ad6 'p' 3edf 0093 ld $93 ;0ad8 INC 3ee0 0070 ld $70 ;0ad8 'p' 3ee1 0011 ld $11 ;0ada LDWI 3ee2 0000 ld $00 3ee3 0009 ld $09 3ee4 0099 ld $99 ;0add ADDW 3ee5 0034 ld $34 ;0add 'i' 3ee6 007f ld $7f ;0adf LUP 3ee7 0000 ld $00 3ee8 00f0 ld $f0 ;0ae1 POKE 3ee9 0070 ld $70 ;0ae1 'p' 3eea 0093 ld $93 ;0ae3 INC 3eeb 0070 ld $70 ;0ae3 'p' 3eec 0011 ld $11 ;0ae5 LDWI 3eed 0000 ld $00 3eee 0009 ld $09 3eef 0099 ld $99 ;0ae8 ADDW 3ef0 0034 ld $34 ;0ae8 'i' 3ef1 007f ld $7f ;0aea LUP 3ef2 0001 ld $01 3ef3 00f0 ld $f0 ;0aec POKE 3ef4 0070 ld $70 ;0aec 'p' 3ef5 0093 ld $93 ;0aee INC 3ef6 0070 ld $70 ;0aee 'p' 3ef7 00ff ld $ff ;0af0 RET 3ef8 002b ld $2b ;0af1 STW 3ef9 009f ld $9f ;0af1 'SetupChannel' 3efa 0093 ld $93 ;0af3 INC 3efb fe00 bra ac ;+-----------------------------------+ 3efc fcfd bra $3efd ;| | 3efd 1404 ld $04,y ;| Trampoline for page $3e00 lookups | 3efe e068 jmp y,$68 ;| | 3eff c218 st [$18] ;+-----------------------------------+ 3f00 001b ld $1b ;0af3 '_vLR'+1 3f01 00ff ld $ff ;0af5 RET 3f02 000b ld $0b ;| RAM segment address (high byte first) 3f03 00a0 ld $a0 ;| 3f04 004c ld $4c ;| Length (1..256) 3f05 00cd ld $cd ;0ba0 DEF 3f06 00c2 ld $c2 3f07 0075 ld $75 ;0ba2 PUSH 3f08 00e9 ld $e9 ;0ba3 LSLW 3f09 002b ld $2b ;0ba4 STW 3f0a 006a ld $6a ;0ba4 'tmp' 3f0b 0011 ld $11 ;0ba6 LDWI 3f0c 0000 ld $00 3f0d 0001 ld $01 3f0e 00fa ld $fa ;0ba9 ORW 3f0f 006a ld $6a ;0ba9 'tmp' 3f10 00cf ld $cf ;0bab CALL 3f11 009f ld $9f ;0bab 'SetupChannel' 3f12 0011 ld $11 ;0bad LDWI 3f13 0000 ld $00 3f14 0002 ld $02 3f15 00fa ld $fa ;0bb0 ORW 3f16 006a ld $6a ;0bb0 'tmp' 3f17 00cf ld $cf ;0bb2 CALL 3f18 009f ld $9f ;0bb2 'SetupChannel' 3f19 0011 ld $11 ;0bb4 LDWI 3f1a 0000 ld $00 3f1b 0003 ld $03 3f1c 00fa ld $fa ;0bb7 ORW 3f1d 006a ld $6a ;0bb7 'tmp' 3f1e 00cf ld $cf ;0bb9 CALL 3f1f 009f ld $9f ;0bb9 'SetupChannel' 3f20 0011 ld $11 ;0bbb LDWI 3f21 0000 ld $00 3f22 0004 ld $04 3f23 00fa ld $fa ;0bbe ORW 3f24 006a ld $6a ;0bbe 'tmp' 3f25 00cf ld $cf ;0bc0 CALL 3f26 009f ld $9f ;0bc0 'SetupChannel' 3f27 0063 ld $63 ;0bc2 POP 3f28 00ff ld $ff ;0bc3 RET 3f29 002b ld $2b ;0bc4 STW 3f2a 007c ld $7c ;0bc4 'SetNote' 3f2b 00cd ld $cd ;0bc6 DEF 3f2c 00e5 ld $e5 3f2d 0075 ld $75 ;0bc8 PUSH 3f2e 0059 ld $59 ;0bc9 LDI 3f2f 0049 ld $49 3f30 002b ld $2b ;0bcb STW 3f31 00a1 ld $a1 ;0bcb 'j' 3f32 0021 ld $21 ;0bcd LDW 3f33 00a1 ld $a1 ;0bcd 'j' 3f34 00cf ld $cf ;0bcf CALL 3f35 007c ld $7c ;0bcf 'SetNote' 3f36 0059 ld $59 ;0bd1 LDI 3f37 0005 ld $05 3f38 005e ld $5e ;0bd3 ST 3f39 002c ld $2c 3f3a 001a ld $1a ;0bd5 LD 3f3b 002c ld $2c 3f3c 0035 ld $35 ;0bd7 BCC 3f3d 0072 ld $72 ;0bd8 NE 3f3e 00d3 ld $d3 3f3f 0021 ld $21 ;0bda LDW 3f40 00a1 ld $a1 ;0bda 'j' 3f41 00e6 ld $e6 ;0bdc SUBI 3f42 0001 ld $01 3f43 002b ld $2b ;0bde STW 3f44 00a1 ld $a1 ;0bde 'j' 3f45 008c ld $8c ;0be0 XORI 3f46 0030 ld $30 3f47 0035 ld $35 ;0be2 BCC 3f48 0072 ld $72 ;0be3 NE 3f49 00cb ld $cb 3f4a 0063 ld $63 ;0be5 POP 3f4b 00ff ld $ff ;0be6 RET 3f4c 002b ld $2b ;0be7 STW 3f4d 0066 ld $66 ;0be7 'PlayGameOverSound' 3f4e 0093 ld $93 ;0be9 INC 3f4f 001b ld $1b ;0be9 '_vLR'+1 3f50 00ff ld $ff ;0beb RET 3f51 000c ld $0c ;| RAM segment address (high byte first) 3f52 00a0 ld $a0 ;| 3f53 0045 ld $45 ;| Length (1..256) 3f54 00cd ld $cd ;0ca0 DEF 3f55 00de ld $de 3f56 0075 ld $75 ;0ca2 PUSH 3f57 0011 ld $11 ;0ca3 LDWI 3f58 0033 ld $33 3f59 0045 ld $45 3f5a 002b ld $2b ;0ca6 STW 3f5b 0070 ld $70 ;0ca6 'p' 3f5c 002b ld $2b ;0ca8 STW 3f5d 003c ld $3c ;0ca8 'Pos' 3f5e 0059 ld $59 ;0caa LDI 3f5f 0018 ld $18 3f60 002b ld $2b ;0cac STW 3f61 003a ld $3a ;0cac 'Color' 3f62 0021 ld $21 ;0cae LDW 3f63 00a3 ld $a3 ;0cae 'Messages' 3f64 00cf ld $cf ;0cb0 CALL 3f65 0042 ld $42 ;0cb0 'PrintText' 3f66 0059 ld $59 ;0cb2 LDI 3f67 002d ld $2d 3f68 00cf ld $cf ;0cb4 CALL 3f69 0050 ld $50 ;0cb4 'Wait' 3f6a 0021 ld $21 ;0cb6 LDW 3f6b 0070 ld $70 ;0cb6 'p' 3f6c 002b ld $2b ;0cb8 STW 3f6d 003c ld $3c ;0cb8 'Pos' 3f6e 0059 ld $59 ;0cba LDI 3f6f 003e ld $3e 3f70 002b ld $2b ;0cbc STW 3f71 003a ld $3a ;0cbc 'Color' 3f72 0021 ld $21 ;0cbe LDW 3f73 0040 ld $40 ;0cbe 'Text' 3f74 00cf ld $cf ;0cc0 CALL 3f75 0042 ld $42 ;0cc0 'PrintText' 3f76 0059 ld $59 ;0cc2 LDI 3f77 002d ld $2d 3f78 00cf ld $cf ;0cc4 CALL 3f79 0050 ld $50 ;0cc4 'Wait' 3f7a 0021 ld $21 ;0cc6 LDW 3f7b 0070 ld $70 ;0cc6 'p' 3f7c 002b ld $2b ;0cc8 STW 3f7d 003c ld $3c ;0cc8 'Pos' 3f7e 0059 ld $59 ;0cca LDI 3f7f 000f ld $0f 3f80 002b ld $2b ;0ccc STW 3f81 003a ld $3a ;0ccc 'Color' 3f82 0021 ld $21 ;0cce LDW 3f83 0040 ld $40 ;0cce 'Text' 3f84 00cf ld $cf ;0cd0 CALL 3f85 0042 ld $42 ;0cd0 'PrintText' 3f86 0059 ld $59 ;0cd2 LDI 3f87 002d ld $2d 3f88 00cf ld $cf ;0cd4 CALL 3f89 0050 ld $50 ;0cd4 'Wait' 3f8a 0021 ld $21 ;0cd6 LDW 3f8b 0070 ld $70 ;0cd6 'p' 3f8c 002b ld $2b ;0cd8 STW 3f8d 003c ld $3c ;0cd8 'Pos' 3f8e 0021 ld $21 ;0cda LDW 3f8f 0040 ld $40 ;0cda 'Text' 3f90 00cf ld $cf ;0cdc CALL 3f91 0042 ld $42 ;0cdc 'PrintText' 3f92 0063 ld $63 ;0cde POP 3f93 00ff ld $ff ;0cdf RET 3f94 002b ld $2b ;0ce0 STW 3f95 0095 ld $95 ;0ce0 'GetReady' 3f96 0093 ld $93 ;0ce2 INC 3f97 001b ld $1b ;0ce2 '_vLR'+1 3f98 00ff ld $ff ;0ce4 RET 3f99 000d ld $0d ;| RAM segment address (high byte first) 3f9a 00a0 ld $a0 ;| 3f9b 0046 ld $46 ;| Length (1..256) 3f9c 00cd ld $cd ;0da0 DEF 3f9d 00df ld $df 3f9e 0021 ld $21 ;0da2 LDW 3f9f 0074 ld $74 ;0da2 'stepU' 3fa0 002b ld $2b ;0da4 STW 3fa1 006a ld $6a ;0da4 'tmp' 3fa2 001a ld $1a ;0da6 LD 3fa3 0011 ld $11 3fa4 008c ld $8c ;0da8 XORI 3fa5 00fe ld $fe 3fa6 0035 ld $35 ;0daa BCC 3fa7 0072 ld $72 ;0dab NE 3fa8 00af ld $af 3fa9 0059 ld $59 ;0dad LDI 3faa 0002 ld $02 3fab 002b ld $2b ;0daf STW 3fac 006a ld $6a ;0daf 'tmp' 3fad 001a ld $1a ;0db1 LD 3fae 0011 ld $11 3faf 008c ld $8c ;0db3 XORI 3fb0 00fd ld $fd 3fb1 0035 ld $35 ;0db5 BCC 3fb2 0072 ld $72 ;0db6 NE 3fb3 00bb ld $bb 3fb4 0011 ld $11 ;0db8 LDWI 3fb5 00fe ld $fe 3fb6 00ff ld $ff 3fb7 002b ld $2b ;0dbb STW 3fb8 006a ld $6a ;0dbb 'tmp' 3fb9 001a ld $1a ;0dbd LD 3fba 0011 ld $11 3fbb 008c ld $8c ;0dbf XORI 3fbc 00fb ld $fb 3fbd 0035 ld $35 ;0dc1 BCC 3fbe 0072 ld $72 ;0dc2 NE 3fbf 00c7 ld $c7 3fc0 0011 ld $11 ;0dc4 LDWI 3fc1 0000 ld $00 3fc2 0002 ld $02 3fc3 002b ld $2b ;0dc7 STW 3fc4 006a ld $6a ;0dc7 'tmp' 3fc5 001a ld $1a ;0dc9 LD 3fc6 0011 ld $11 3fc7 008c ld $8c ;0dcb XORI 3fc8 00f7 ld $f7 3fc9 0035 ld $35 ;0dcd BCC 3fca 0072 ld $72 ;0dce NE 3fcb 00d3 ld $d3 3fcc 0011 ld $11 ;0dd0 LDWI 3fcd 0000 ld $00 3fce 00fe ld $fe 3fcf 002b ld $2b ;0dd3 STW 3fd0 006a ld $6a ;0dd3 'tmp' 3fd1 0021 ld $21 ;0dd5 LDW 3fd2 006a ld $6a ;0dd5 'tmp' 3fd3 0099 ld $99 ;0dd7 ADDW 3fd4 0074 ld $74 ;0dd7 'stepU' 3fd5 0035 ld $35 ;0dd9 BCC 3fd6 003f ld $3f ;0dda EQ 3fd7 00de ld $de 3fd8 0021 ld $21 ;0ddc LDW 3fd9 006a ld $6a ;0ddc 'tmp' 3fda 002b ld $2b ;0dde STW 3fdb 0074 ld $74 ;0dde 'stepU' 3fdc 00ff ld $ff ;0de0 RET 3fdd 002b ld $2b ;0de1 STW 3fde 0062 ld $62 ;0de1 'PlayerControl' 3fdf 0093 ld $93 ;0de3 INC 3fe0 001b ld $1b ;0de3 '_vLR'+1 3fe1 00ff ld $ff ;0de5 RET 3fe2 000e ld $0e ;| RAM segment address (high byte first) 3fe3 00a0 ld $a0 ;| 3fe4 004d ld $4d ;| Length (1..256) 3fe5 00cd ld $cd ;0ea0 DEF 3fe6 00cb ld $cb 3fe7 0020 ld $20 ;0ea2 ' ' 3fe8 0045 ld $45 ;0ea3 'E' 3fe9 0041 ld $41 ;0ea4 'A' 3fea 0054 ld $54 ;0ea5 'T' 3feb 0020 ld $20 ;0ea6 ' ' 3fec 0046 ld $46 ;0ea7 'F' 3fed 004f ld $4f ;0ea8 'O' 3fee 004f ld $4f ;0ea9 'O' 3fef 0044 ld $44 ;0eaa 'D' 3ff0 0000 ld $00 ;0eab 0 3ff1 004e ld $4e ;0eac 'N' 3ff2 004f ld $4f ;0ead 'O' 3ff3 0054 ld $54 ;0eae 'T' 3ff4 0020 ld $20 ;0eaf ' ' 3ff5 0050 ld $50 ;0eb0 'P' 3ff6 004f ld $4f ;0eb1 'O' 3ff7 0049 ld $49 ;0eb2 'I' 3ff8 0053 ld $53 ;0eb3 'S' 3ff9 004f ld $4f ;0eb4 'O' 3ffa 004e ld $4e ;0eb5 'N' 3ffb fe00 bra ac ;+-----------------------------------+ 3ffc fcfd bra $3ffd ;| | 3ffd 1404 ld $04,y ;| Trampoline for page $3f00 lookups | 3ffe e068 jmp y,$68 ;| | 3fff c218 st [$18] ;+-----------------------------------+ 4000 0000 ld $00 ;0eb6 0 4001 0047 ld $47 ;0eb7 'G' 4002 0045 ld $45 ;0eb8 'E' 4003 0054 ld $54 ;0eb9 'T' 4004 0020 ld $20 ;0eba ' ' 4005 0052 ld $52 ;0ebb 'R' 4006 0045 ld $45 ;0ebc 'E' 4007 0041 ld $41 ;0ebd 'A' 4008 0044 ld $44 ;0ebe 'D' 4009 0059 ld $59 ;0ebf 'Y' 400a 0021 ld $21 ;0ec0 '!' 400b 0000 ld $00 ;0ec1 0 400c 0020 ld $20 ;0ec2 ' ' 400d 0020 ld $20 ;0ec3 ' ' 400e 0020 ld $20 ;0ec4 ' ' 400f 0020 ld $20 ;0ec5 ' ' 4010 0020 ld $20 ;0ec6 ' ' 4011 0020 ld $20 ;0ec7 ' ' 4012 0020 ld $20 ;0ec8 ' ' 4013 0020 ld $20 ;0ec9 ' ' 4014 0020 ld $20 ;0eca ' ' 4015 0020 ld $20 ;0ecb ' ' 4016 0000 ld $00 ;0ecc 0 4017 002b ld $2b ;0ecd STW 4018 00a3 ld $a3 ;0ecd 'Messages' 4019 00cf ld $cf ;0ecf CALL 401a 006e ld $6e ;0ecf 'Intro' 401b 0059 ld $59 ;0ed1 LDI 401c 0049 ld $49 401d 00cf ld $cf ;0ed3 CALL 401e 007c ld $7c ;0ed3 'SetNote' 401f 00cf ld $cf ;0ed5 CALL 4020 008f ld $8f ;0ed5 'SetupGame' 4021 00cf ld $cf ;0ed7 CALL 4022 008d ld $8d ;0ed7 'RunGame' 4023 0059 ld $59 ;0ed9 LDI 4024 0078 ld $78 4025 005e ld $5e ;0edb ST 4026 002c ld $2c 4027 0059 ld $59 ;0edd LDI 4028 0007 ld $07 4029 002b ld $2b ;0edf STW 402a 003a ld $3a ;0edf 'Color' 402b 0021 ld $21 ;0ee1 LDW 402c 0058 ld $58 ;0ee1 'Head' 402d 00cf ld $cf ;0ee3 CALL 402e 005a ld $5a ;0ee3 'DrawBlock' 402f 00cf ld $cf ;0ee5 CALL 4030 0068 ld $68 ;0ee5 'GameOver' 4031 0059 ld $59 ;0ee7 LDI 4032 003c ld $3c 4033 00cf ld $cf ;0ee9 CALL 4034 0050 ld $50 ;0ee9 'Wait' 4035 0090 ld $90 ;0eeb BRA 4036 00d3 ld $d3 4037 0000 ld $00 ;End of Apps/Snake/Snake_v3.gcl, size 1834 ;+-----------------------------------+ ;| SYS_Racer_v1.py | ;+-----------------------------------+ SYS_Racer_v1: SYS_RacerUpdateVideoX_40: 4038 1126 ld [$26],x 4039 1527 ld [$27],y 403a 0d00 ld [y,x] 403b c21d st [$1d] 403c a128 suba [$28] 403d 1124 ld [$24],x 403e 1525 ld [$25],y 403f ce00 st [y,x] 4040 0124 ld [$24] 4041 a004 suba $04 4042 c224 st [$24] 4043 011d ld [$1d] 4044 c228 st [$28] 4045 0126 ld [$26] 4046 8001 adda $01 4047 c226 st [$26] 4048 ec4c bne .sysRacer0 4049 0116 ld [$16] 404a fc4e bra .sysRacer1 404b 0200 nop .sysRacer0: 404c a002 suba $02 404d c216 st [$16] .sysRacer1: 404e 1403 ld $03,y 404f e0cb jmp y,$cb 4050 00ec ld $ec SYS_RacerUpdateVideoY_40: 4051 0127 ld [$27] 4052 2008 anda $08 4053 ec56 bne $4056 4054 fc57 bra $4057 4055 0000 ld $00 4056 0001 ld $01 4057 c21d st [$1d] 4058 1525 ld [$25],y 4059 0124 ld [$24] 405a 8002 adda $02 405b d224 st [$24],x 405c 60ee xora $ee 405d c218 st [$18] 405e c219 st [$19] 405f 0126 ld [$26] 4060 20fe anda $fe 4061 811d adda [$1d] 4062 ce00 st [y,x] 4063 0126 ld [$26] 4064 8001 adda $01 4065 c226 st [$26] 4066 1403 ld $03,y 4067 e0cb jmp y,$cb 4068 00ec ld $ec ;End of SYS_Racer_v1.py, size 49 ;+-----------------------------------+ ;| Apps/Racer/Horizon-256x16.rgb | ;+-----------------------------------+ 4069 dc53 st $53,[y,x++] ;'S' 406a dc6e st $6e,[y,x++] ;'n' 406b dc61 st $61,[y,x++] ;'a' 406c dc6b st $6b,[y,x++] ;'k' 406d dc65 st $65,[y,x++] ;'e' 406e dc00 st $00,[y,x++] ;'\x00' 406f dc00 st $00,[y,x++] ;'\x00' 4070 dc00 st $00,[y,x++] ;'\x00' 4071 000e ld $0e 4072 c218 st [$18] 4073 0039 ld $39 4074 14fb ld $fb,y 4075 e0ee jmp y,$ee 4076 c219 st [$19] zippedRacerHorizon: 4077 0041 ld $41 4078 0000 ld $00 4079 00c3 ld $c3 407a 0030 ld $30 407b 000c ld $0c 407c 00c3 ld $c3 407d 0030 ld $30 407e 000c ld $0c 407f 00c3 ld $c3 4080 0030 ld $30 4081 000c ld $0c 4082 00c3 ld $c3 4083 0030 ld $30 4084 000c ld $0c 4085 00c3 ld $c3 4086 0030 ld $30 4087 000c ld $0c 4088 00c3 ld $c3 4089 0030 ld $30 408a 000c ld $0c 408b 00c3 ld $c3 408c 0030 ld $30 408d 000c ld $0c 408e 00c3 ld $c3 408f 0000 ld $00 4090 000c ld $0c 4091 00c3 ld $c3 4092 0030 ld $30 4093 000c ld $0c 4094 00c3 ld $c3 4095 0030 ld $30 4096 00fc ld $fc 4097 0002 ld $02 4098 0030 ld $30 4099 000c ld $0c 409a 00c3 ld $c3 409b 0030 ld $30 409c 000c ld $0c 409d 00c3 ld $c3 409e 0030 ld $30 409f 000c ld $0c 40a0 00c3 ld $c3 40a1 0030 ld $30 40a2 000c ld $0c 40a3 00c3 ld $c3 40a4 0030 ld $30 40a5 000c ld $0c 40a6 00c3 ld $c3 40a7 0030 ld $30 40a8 000c ld $0c 40a9 00c3 ld $c3 40aa 0030 ld $30 40ab 000c ld $0c 40ac 00c3 ld $c3 40ad 0030 ld $30 40ae 000c ld $0c 40af 00c3 ld $c3 40b0 0030 ld $30 40b1 000c ld $0c 40b2 00c3 ld $c3 40b3 0030 ld $30 40b4 000c ld $0c 40b5 00c3 ld $c3 40b6 0030 ld $30 40b7 000c ld $0c 40b8 00c3 ld $c3 40b9 0030 ld $30 40ba 000c ld $0c 40bb 00c3 ld $c3 40bc 0030 ld $30 40bd 000c ld $0c 40be 00c3 ld $c3 40bf 0030 ld $30 40c0 000c ld $0c 40c1 00c3 ld $c3 40c2 0030 ld $30 40c3 000c ld $0c 40c4 00c3 ld $c3 40c5 0030 ld $30 40c6 000c ld $0c 40c7 00c3 ld $c3 40c8 0030 ld $30 40c9 000c ld $0c 40ca 00c3 ld $c3 40cb 0013 ld $13 40cc 000c ld $0c 40cd 00c3 ld $c3 40ce 0030 ld $30 40cf 000c ld $0c 40d0 00c3 ld $c3 40d1 002a ld $2a 40d2 000c ld $0c 40d3 00c3 ld $c3 40d4 0030 ld $30 40d5 000c ld $0c 40d6 00c3 ld $c3 40d7 0030 ld $30 40d8 000c ld $0c 40d9 00c3 ld $c3 40da 0030 ld $30 40db 000c ld $0c 40dc 00c3 ld $c3 40dd 0030 ld $30 40de 000c ld $0c 40df 00c3 ld $c3 40e0 0030 ld $30 40e1 000c ld $0c 40e2 00c3 ld $c3 40e3 0030 ld $30 40e4 000c ld $0c 40e5 00c3 ld $c3 40e6 0030 ld $30 40e7 000c ld $0c 40e8 00c3 ld $c3 40e9 0030 ld $30 40ea 000c ld $0c 40eb 00c3 ld $c3 40ec 0030 ld $30 40ed 000c ld $0c 40ee 00c3 ld $c3 40ef 0030 ld $30 40f0 000c ld $0c 40f1 00c3 ld $c3 40f2 0030 ld $30 40f3 000c ld $0c 40f4 00c3 ld $c3 40f5 0030 ld $30 40f6 000c ld $0c 40f7 00ab ld $ab 40f8 002a ld $2a 40f9 000c ld $0c 40fa 00c3 ld $c3 40fb fe00 bra ac ;+-----------------------------------+ 40fc fcfd bra $40fd ;| | 40fd 1404 ld $04,y ;| Trampoline for page $4000 lookups | 40fe e068 jmp y,$68 ;| | 40ff c218 st [$18] ;+-----------------------------------+ 4100 0030 ld $30 4101 000c ld $0c 4102 00c3 ld $c3 4103 0030 ld $30 4104 000c ld $0c 4105 00c3 ld $c3 4106 0030 ld $30 4107 000c ld $0c 4108 00c3 ld $c3 4109 0030 ld $30 410a 000c ld $0c 410b 00c3 ld $c3 410c 00f0 ld $f0 410d 000f ld $0f 410e 00c3 ld $c3 410f 0030 ld $30 4110 000c ld $0c 4111 00c3 ld $c3 4112 00f0 ld $f0 4113 000f ld $0f 4114 00c3 ld $c3 4115 0030 ld $30 4116 000c ld $0c 4117 00c3 ld $c3 4118 003f ld $3f 4119 000c ld $0c 411a 00c3 ld $c3 411b 0030 ld $30 411c 000c ld $0c 411d 00c3 ld $c3 411e 0030 ld $30 411f 000c ld $0c 4120 00c3 ld $c3 4121 0030 ld $30 4122 000c ld $0c 4123 00c3 ld $c3 4124 0030 ld $30 4125 000c ld $0c 4126 00c3 ld $c3 4127 0030 ld $30 4128 000c ld $0c 4129 00c3 ld $c3 412a 0030 ld $30 412b 000c ld $0c 412c 00c3 ld $c3 412d 0030 ld $30 412e 000c ld $0c 412f 00c3 ld $c3 4130 0015 ld $15 4131 000c ld $0c 4132 00c3 ld $c3 4133 0030 ld $30 4134 000c ld $0c 4135 00c3 ld $c3 4136 0030 ld $30 4137 000c ld $0c 4138 00c3 ld $c3 4139 0030 ld $30 413a 001c ld $1c 413b 0004 ld $04 413c 006b ld $6b 413d 0000 ld $00 413e 00c3 ld $c3 413f 0030 ld $30 4140 000c ld $0c 4141 00c3 ld $c3 4142 0030 ld $30 4143 000c ld $0c 4144 00c3 ld $c3 4145 0030 ld $30 4146 000c ld $0c 4147 00c3 ld $c3 4148 0030 ld $30 4149 000c ld $0c 414a 00c3 ld $c3 414b 0030 ld $30 414c 000c ld $0c 414d 00c3 ld $c3 414e 0030 ld $30 414f 000c ld $0c 4150 00c3 ld $c3 4151 0030 ld $30 4152 000c ld $0c 4153 00c3 ld $c3 4154 003f ld $3f 4155 0000 ld $00 4156 00c3 ld $c3 4157 0030 ld $30 4158 000c ld $0c 4159 00c3 ld $c3 415a 00f0 ld $f0 415b 000f ld $0f 415c 00c0 ld $c0 415d 0030 ld $30 415e 000c ld $0c 415f 00c3 ld $c3 4160 0030 ld $30 4161 000c ld $0c 4162 00c3 ld $c3 4163 0030 ld $30 4164 000c ld $0c 4165 00c3 ld $c3 4166 0030 ld $30 4167 000c ld $0c 4168 00c3 ld $c3 4169 0030 ld $30 416a 000c ld $0c 416b 00c3 ld $c3 416c 0030 ld $30 416d 000c ld $0c 416e 00c3 ld $c3 416f 0030 ld $30 4170 000c ld $0c 4171 00c3 ld $c3 4172 0030 ld $30 4173 000c ld $0c 4174 00c3 ld $c3 4175 0030 ld $30 4176 000c ld $0c 4177 00c3 ld $c3 4178 0030 ld $30 4179 000c ld $0c 417a 00c3 ld $c3 417b 0030 ld $30 417c 000c ld $0c 417d 00c3 ld $c3 417e 0030 ld $30 417f 000c ld $0c 4180 00c3 ld $c3 4181 0030 ld $30 4182 000c ld $0c 4183 00c3 ld $c3 4184 0030 ld $30 4185 000c ld $0c 4186 00c3 ld $c3 4187 0030 ld $30 4188 000c ld $0c 4189 00c3 ld $c3 418a 0030 ld $30 418b 000c ld $0c 418c 00c3 ld $c3 418d 0030 ld $30 418e 000c ld $0c 418f 00c3 ld $c3 4190 002a ld $2a 4191 000c ld $0c 4192 00c3 ld $c3 4193 0030 ld $30 4194 000c ld $0c 4195 00ab ld $ab 4196 002a ld $2a 4197 000c ld $0c 4198 00c3 ld $c3 4199 0030 ld $30 419a 000c ld $0c 419b 00c3 ld $c3 419c 0030 ld $30 419d 000c ld $0c 419e 00c3 ld $c3 419f 0030 ld $30 41a0 000c ld $0c 41a1 00c3 ld $c3 41a2 0030 ld $30 41a3 000c ld $0c 41a4 00c3 ld $c3 41a5 00ff ld $ff 41a6 00fb ld $fb 41a7 00bf ld $bf 41a8 003f ld $3f 41a9 000c ld $0c 41aa 00c3 ld $c3 41ab 0030 ld $30 41ac 000c ld $0c 41ad 00c3 ld $c3 41ae 0030 ld $30 41af 000c ld $0c 41b0 00c3 ld $c3 41b1 0030 ld $30 41b2 000c ld $0c 41b3 00c3 ld $c3 41b4 0030 ld $30 41b5 000c ld $0c 41b6 00c3 ld $c3 41b7 0030 ld $30 41b8 000c ld $0c 41b9 00c3 ld $c3 41ba 0030 ld $30 41bb 00ac ld $ac 41bc 0056 ld $56 41bd 0095 ld $95 41be 000a ld $0a 41bf 00c3 ld $c3 41c0 0030 ld $30 41c1 000c ld $0c 41c2 00c3 ld $c3 41c3 0030 ld $30 41c4 000c ld $0c 41c5 00c3 ld $c3 41c6 0030 ld $30 41c7 000c ld $0c 41c8 00c3 ld $c3 41c9 0030 ld $30 41ca 000c ld $0c 41cb 00c3 ld $c3 41cc 00f0 ld $f0 41cd 00ff ld $ff 41ce 00c3 ld $c3 41cf 0030 ld $30 41d0 000c ld $0c 41d1 00c3 ld $c3 41d2 00f0 ld $f0 41d3 00ff ld $ff 41d4 00c3 ld $c3 41d5 0030 ld $30 41d6 000c ld $0c 41d7 00c3 ld $c3 41d8 00ff ld $ff 41d9 000f ld $0f 41da 00c3 ld $c3 41db 0030 ld $30 41dc 000c ld $0c 41dd 00c3 ld $c3 41de 0030 ld $30 41df 000c ld $0c 41e0 00c3 ld $c3 41e1 0030 ld $30 41e2 000c ld $0c 41e3 00c3 ld $c3 41e4 0030 ld $30 41e5 000c ld $0c 41e6 00c3 ld $c3 41e7 0030 ld $30 41e8 000c ld $0c 41e9 00c3 ld $c3 41ea 0030 ld $30 41eb 000c ld $0c 41ec 00c3 ld $c3 41ed 0030 ld $30 41ee 000c ld $0c 41ef 00c3 ld $c3 41f0 0015 ld $15 41f1 000c ld $0c 41f2 00c3 ld $c3 41f3 0030 ld $30 41f4 000c ld $0c 41f5 00c3 ld $c3 41f6 0030 ld $30 41f7 000c ld $0c 41f8 00c3 ld $c3 41f9 0030 ld $30 41fa 001c ld $1c 41fb fe00 bra ac ;+-----------------------------------+ 41fc fcfd bra $41fd ;| | 41fd 1404 ld $04,y ;| Trampoline for page $4100 lookups | 41fe e068 jmp y,$68 ;| | 41ff c218 st [$18] ;+-----------------------------------+ 4200 00ac ld $ac 4201 0056 ld $56 4202 0060 ld $60 4203 0059 ld $59 4204 0030 ld $30 4205 000c ld $0c 4206 00c3 ld $c3 4207 0070 ld $70 4208 0055 ld $55 4209 00fd ld $fd 420a 0055 ld $55 420b 00f5 ld $f5 420c 0057 ld $57 420d 00d5 ld $d5 420e 005f ld $5f 420f 0055 ld $55 4210 007f ld $7f 4211 0055 ld $55 4212 00fd ld $fd 4213 0055 ld $55 4214 0005 ld $05 4215 00c3 ld $c3 4216 0030 ld $30 4217 000c ld $0c 4218 00c3 ld $c3 4219 00f0 ld $f0 421a 000b ld $0b 421b 00c0 ld $c0 421c 0030 ld $30 421d 000c ld $0c 421e 00c3 ld $c3 421f 002f ld $2f 4220 0000 ld $00 4221 00c3 ld $c3 4222 0030 ld $30 4223 000c ld $0c 4224 00c3 ld $c3 4225 0030 ld $30 4226 000c ld $0c 4227 00c3 ld $c3 4228 0030 ld $30 4229 000c ld $0c 422a 00c3 ld $c3 422b 0030 ld $30 422c 000c ld $0c 422d 00c3 ld $c3 422e 0030 ld $30 422f 000c ld $0c 4230 00c3 ld $c3 4231 0030 ld $30 4232 000c ld $0c 4233 00c3 ld $c3 4234 0030 ld $30 4235 000c ld $0c 4236 00c3 ld $c3 4237 0030 ld $30 4238 000c ld $0c 4239 00c3 ld $c3 423a 0030 ld $30 423b 000c ld $0c 423c 00c3 ld $c3 423d 0030 ld $30 423e 000c ld $0c 423f 00c3 ld $c3 4240 0030 ld $30 4241 000c ld $0c 4242 00c3 ld $c3 4243 0030 ld $30 4244 000c ld $0c 4245 00c3 ld $c3 4246 0030 ld $30 4247 000c ld $0c 4248 00c3 ld $c3 4249 0030 ld $30 424a 000c ld $0c 424b 00c3 ld $c3 424c 0030 ld $30 424d 000c ld $0c 424e 00c3 ld $c3 424f 0030 ld $30 4250 000c ld $0c 4251 00c3 ld $c3 4252 0030 ld $30 4253 000c ld $0c 4254 00c3 ld $c3 4255 002a ld $2a 4256 000c ld $0c 4257 00c3 ld $c3 4258 00b0 ld $b0 4259 00aa ld $aa 425a 00aa ld $aa 425b 002a ld $2a 425c 000c ld $0c 425d 00c3 ld $c3 425e 0030 ld $30 425f 000c ld $0c 4260 00c3 ld $c3 4261 0030 ld $30 4262 000c ld $0c 4263 00c3 ld $c3 4264 0030 ld $30 4265 000c ld $0c 4266 00c3 ld $c3 4267 0030 ld $30 4268 000c ld $0c 4269 00bf ld $bf 426a 0091 ld $91 426b 00f4 ld $f4 426c 0046 ld $46 426d 00d2 ld $d2 426e 000b ld $0b 426f 00c3 ld $c3 4270 0030 ld $30 4271 000c ld $0c 4272 00c3 ld $c3 4273 0030 ld $30 4274 000c ld $0c 4275 00c3 ld $c3 4276 0030 ld $30 4277 000c ld $0c 4278 00c3 ld $c3 4279 0030 ld $30 427a 000c ld $0c 427b 00c3 ld $c3 427c 0030 ld $30 427d 00ac ld $ac 427e 00c2 ld $c2 427f 00b0 ld $b0 4280 00aa ld $aa 4281 00aa ld $aa 4282 00aa ld $aa 4283 00aa ld $aa 4284 00c2 ld $c2 4285 00b0 ld $b0 4286 000a ld $0a 4287 00c3 ld $c3 4288 0030 ld $30 4289 000c ld $0c 428a 00c3 ld $c3 428b 0030 ld $30 428c 000c ld $0c 428d 00c3 ld $c3 428e 0030 ld $30 428f 000c ld $0c 4290 00c3 ld $c3 4291 0030 ld $30 4292 00ac ld $ac 4293 00fe ld $fe 4294 00ff ld $ff 4295 003f ld $3f 4296 00c0 ld $c0 4297 0030 ld $30 4298 00ac ld $ac 4299 00fe ld $fe 429a 00ff ld $ff 429b 003f ld $3f 429c 00c0 ld $c0 429d 00b0 ld $b0 429e 00fa ld $fa 429f 00ff ld $ff 42a0 00ff ld $ff 42a1 0000 ld $00 42a2 00c3 ld $c3 42a3 0030 ld $30 42a4 000c ld $0c 42a5 00c3 ld $c3 42a6 0030 ld $30 42a7 000c ld $0c 42a8 00c3 ld $c3 42a9 0030 ld $30 42aa 000c ld $0c 42ab 00c3 ld $c3 42ac 0030 ld $30 42ad 000c ld $0c 42ae 00c3 ld $c3 42af 0030 ld $30 42b0 000c ld $0c 42b1 00c3 ld $c3 42b2 0030 ld $30 42b3 000c ld $0c 42b4 0057 ld $57 42b5 0055 ld $55 42b6 0005 ld $05 42b7 00c3 ld $c3 42b8 0030 ld $30 42b9 000c ld $0c 42ba 00c3 ld $c3 42bb 0030 ld $30 42bc 000c ld $0c 42bd 00c3 ld $c3 42be 0096 ld $96 42bf 0015 ld $15 42c0 0058 ld $58 42c1 006b ld $6b 42c2 00b0 ld $b0 42c3 00ae ld $ae 42c4 0030 ld $30 42c5 000c ld $0c 42c6 00c3 ld $c3 42c7 00f0 ld $f0 42c8 00ff ld $ff 42c9 00ff ld $ff 42ca 00ff ld $ff * 12 times 42d4 000f ld $0f 42d5 00c3 ld $c3 42d6 0030 ld $30 42d7 000c ld $0c 42d8 00c3 ld $c3 42d9 0030 ld $30 42da 00fc ld $fc 42db 0003 ld $03 42dc 0030 ld $30 42dd 000c ld $0c 42de 00ff ld $ff 42df 0000 ld $00 42e0 000c ld $0c 42e1 00c3 ld $c3 42e2 0030 ld $30 42e3 000c ld $0c 42e4 00c3 ld $c3 42e5 0030 ld $30 42e6 00fc ld $fc 42e7 00bf ld $bf 42e8 0030 ld $30 42e9 000c ld $0c 42ea 00c3 ld $c3 42eb 0030 ld $30 42ec 000c ld $0c 42ed 00c3 ld $c3 42ee 0030 ld $30 42ef 000c ld $0c 42f0 00c3 ld $c3 42f1 0030 ld $30 42f2 000c ld $0c 42f3 00c3 ld $c3 42f4 0030 ld $30 42f5 000c ld $0c 42f6 00c3 ld $c3 42f7 0030 ld $30 42f8 000c ld $0c 42f9 00c3 ld $c3 42fa 0030 ld $30 42fb fe00 bra ac ;+-----------------------------------+ 42fc fcfd bra $42fd ;| | 42fd 1404 ld $04,y ;| Trampoline for page $4200 lookups | 42fe e068 jmp y,$68 ;| | 42ff c218 st [$18] ;+-----------------------------------+ 4300 000c ld $0c 4301 00c3 ld $c3 4302 0030 ld $30 4303 000c ld $0c 4304 00c3 ld $c3 4305 0030 ld $30 4306 000c ld $0c 4307 00c3 ld $c3 4308 0030 ld $30 4309 000c ld $0c 430a 00c3 ld $c3 430b 0030 ld $30 430c 000c ld $0c 430d 00c3 ld $c3 430e 0030 ld $30 430f 000c ld $0c 4310 00c3 ld $c3 4311 0030 ld $30 4312 000c ld $0c 4313 00c3 ld $c3 4314 0030 ld $30 4315 000c ld $0c 4316 00c3 ld $c3 4317 00f0 ld $f0 4318 00ff ld $ff 4319 00ab ld $ab 431a 00ff ld $ff 431b 000f ld $0f 431c 00c3 ld $c3 431d 006a ld $6a 431e 00a5 ld $a5 431f 0056 ld $56 4320 002a ld $2a 4321 000c ld $0c 4322 00c3 ld $c3 4323 0030 ld $30 4324 000c ld $0c 4325 00c3 ld $c3 4326 0030 ld $30 4327 000c ld $0c 4328 00c3 ld $c3 4329 0030 ld $30 432a 000c ld $0c 432b 00c3 ld $c3 432c 0030 ld $30 432d 00fc ld $fc 432e 004a ld $4a 432f 0030 ld $30 4330 00fc ld $fc 4331 00c2 ld $c2 4332 0070 ld $70 4333 00f4 ld $f4 4334 00c2 ld $c2 4335 0030 ld $30 4336 000c ld $0c 4337 00c3 ld $c3 4338 0030 ld $30 4339 000c ld $0c 433a 00c3 ld $c3 433b 0030 ld $30 433c 000c ld $0c 433d 00c3 ld $c3 433e 0030 ld $30 433f 000c ld $0c 4340 00c3 ld $c3 4341 00f0 ld $f0 4342 00af ld $af 4343 00fe ld $fe 4344 00aa ld $aa 4345 00aa ld $aa 4346 00aa ld $aa * 6 times 434a 00bf ld $bf 434b 00fa ld $fa 434c 00c3 ld $c3 434d 0030 ld $30 434e 000c ld $0c 434f 00c3 ld $c3 4350 0030 ld $30 4351 000c ld $0c 4352 00c3 ld $c3 4353 0030 ld $30 4354 000c ld $0c 4355 00c3 ld $c3 4356 00f0 ld $f0 4357 00ff ld $ff 4358 00ff ld $ff 4359 0030 ld $30 435a 000c ld $0c 435b 00c3 ld $c3 435c 00f0 ld $f0 435d 00ff ld $ff 435e 00ff ld $ff 435f 0030 ld $30 4360 000c ld $0c 4361 00c3 ld $c3 4362 00ff ld $ff 4363 00ff ld $ff 4364 00c3 ld $c3 4365 0030 ld $30 4366 000c ld $0c 4367 00c3 ld $c3 4368 0030 ld $30 4369 000c ld $0c 436a 00c3 ld $c3 436b 0030 ld $30 436c 000c ld $0c 436d 00c3 ld $c3 436e 0030 ld $30 436f 000c ld $0c 4370 00c3 ld $c3 4371 0030 ld $30 4372 000c ld $0c 4373 00c3 ld $c3 4374 0030 ld $30 4375 000c ld $0c 4376 00c3 ld $c3 4377 0030 ld $30 4378 000c ld $0c 4379 00c3 ld $c3 437a 0015 ld $15 437b 000c ld $0c 437c 00c3 ld $c3 437d 0030 ld $30 437e 000c ld $0c 437f 00c3 ld $c3 4380 0030 ld $30 4381 000c ld $0c 4382 00c3 ld $c3 4383 00eb ld $eb 4384 001a ld $1a 4385 00ac ld $ac 4386 0056 ld $56 4387 00b0 ld $b0 4388 00a6 ld $a6 4389 0030 ld $30 438a 000c ld $0c 438b 00c3 ld $c3 438c 0070 ld $70 438d 0055 ld $55 438e 00fd ld $fd 438f 0055 ld $55 4390 00f5 ld $f5 4391 0057 ld $57 4392 00d5 ld $d5 4393 005f ld $5f 4394 0055 ld $55 4395 007f ld $7f 4396 0055 ld $55 4397 00fd ld $fd 4398 0055 ld $55 4399 0005 ld $05 439a 00c3 ld $c3 439b 0030 ld $30 439c 000c ld $0c 439d 00c3 ld $c3 439e 0030 ld $30 439f 000c ld $0c 43a0 00bf ld $bf 43a1 0000 ld $00 43a2 00fc ld $fc 43a3 0002 ld $02 43a4 0030 ld $30 43a5 000c ld $0c 43a6 00c3 ld $c3 43a7 0030 ld $30 43a8 000c ld $0c 43a9 00c3 ld $c3 43aa 0030 ld $30 43ab 006c ld $6c 43ac 00fc ld $fc 43ad 0030 ld $30 43ae 000c ld $0c 43af 00c3 ld $c3 43b0 0030 ld $30 43b1 000c ld $0c 43b2 00c3 ld $c3 43b3 0030 ld $30 43b4 000c ld $0c 43b5 00c3 ld $c3 43b6 0030 ld $30 43b7 000c ld $0c 43b8 00c3 ld $c3 43b9 0030 ld $30 43ba 000c ld $0c 43bb 00c3 ld $c3 43bc 0030 ld $30 43bd 000c ld $0c 43be 00c3 ld $c3 43bf 0030 ld $30 43c0 000c ld $0c 43c1 00c3 ld $c3 43c2 0030 ld $30 43c3 000c ld $0c 43c4 00c3 ld $c3 43c5 0030 ld $30 43c6 000c ld $0c 43c7 00c3 ld $c3 43c8 0030 ld $30 43c9 000c ld $0c 43ca 00c3 ld $c3 43cb 0030 ld $30 43cc 000c ld $0c 43cd 00c3 ld $c3 43ce 0030 ld $30 43cf 000c ld $0c 43d0 00c3 ld $c3 43d1 0030 ld $30 43d2 000c ld $0c 43d3 00c3 ld $c3 43d4 0030 ld $30 43d5 000c ld $0c 43d6 00c3 ld $c3 43d7 00f0 ld $f0 43d8 00af ld $af 43d9 00fe ld $fe 43da 00ea ld $ea 43db 000f ld $0f 43dc 00ab ld $ab 43dd 00aa ld $aa 43de 00aa ld $aa 43df 00aa ld $aa 43e0 002a ld $2a 43e1 000c ld $0c 43e2 00c3 ld $c3 43e3 0030 ld $30 43e4 000c ld $0c 43e5 00c3 ld $c3 43e6 0030 ld $30 43e7 000c ld $0c 43e8 00c3 ld $c3 43e9 0030 ld $30 43ea 000c ld $0c 43eb 00c3 ld $c3 43ec 00f0 ld $f0 43ed 001b ld $1b 43ee 00bd ld $bd 43ef 0030 ld $30 43f0 00fc ld $fc 43f1 00c2 ld $c2 43f2 00f0 ld $f0 43f3 002b ld $2b 43f4 00bd ld $bd 43f5 0030 ld $30 43f6 000c ld $0c 43f7 00c3 ld $c3 43f8 0030 ld $30 43f9 000c ld $0c 43fa 00c3 ld $c3 43fb fe00 bra ac ;+-----------------------------------+ 43fc fcfd bra $43fd ;| | 43fd 1404 ld $04,y ;| Trampoline for page $4300 lookups | 43fe e068 jmp y,$68 ;| | 43ff c218 st [$18] ;+-----------------------------------+ 4400 0030 ld $30 4401 000c ld $0c 4402 00c3 ld $c3 4403 0030 ld $30 4404 000c ld $0c 4405 00c3 ld $c3 4406 00f0 ld $f0 4407 00af ld $af 4408 00ab ld $ab 4409 0095 ld $95 440a 005a ld $5a 440b 0055 ld $55 440c 006a ld $6a 440d 00a5 ld $a5 440e 0056 ld $56 440f 00aa ld $aa 4410 00fe ld $fe 4411 00c3 ld $c3 4412 0030 ld $30 4413 000c ld $0c 4414 00c3 ld $c3 4415 0030 ld $30 4416 000c ld $0c 4417 00c3 ld $c3 4418 0030 ld $30 4419 000c ld $0c 441a 00c3 ld $c3 441b 00ff ld $ff 441c 00af ld $af 441d 00fe ld $fe 441e 0030 ld $30 441f 000c ld $0c 4420 00c3 ld $c3 4421 00ff ld $ff 4422 00af ld $af 4423 00fe ld $fe 4424 0030 ld $30 4425 000c ld $0c 4426 00ff ld $ff 4427 00bf ld $bf 4428 00fa ld $fa 4429 00c3 ld $c3 442a 0030 ld $30 442b 000c ld $0c 442c 00c3 ld $c3 442d 0030 ld $30 442e 000c ld $0c 442f 00c3 ld $c3 4430 0030 ld $30 4431 000c ld $0c 4432 00c3 ld $c3 4433 0030 ld $30 4434 000c ld $0c 4435 00c3 ld $c3 4436 0030 ld $30 4437 000c ld $0c 4438 00c3 ld $c3 4439 0030 ld $30 443a 000c ld $0c 443b 00c3 ld $c3 443c 0030 ld $30 443d 000c ld $0c 443e 00ab ld $ab 443f 0095 ld $95 4440 000a ld $0a 4441 00c3 ld $c3 4442 0030 ld $30 4443 000c ld $0c 4444 00c3 ld $c3 4445 0030 ld $30 4446 000c ld $0c 4447 00c3 ld $c3 4448 00e9 ld $e9 4449 001a ld $1a 444a 0058 ld $58 444b 0041 ld $41 444c 00b0 ld $b0 444d 00ae ld $ae 444e 0030 ld $30 444f 000c ld $0c 4450 00c3 ld $c3 4451 00b0 ld $b0 4452 00ae ld $ae 4453 00fe ld $fe 4454 00aa ld $aa 4455 00fe ld $fe 4456 00ab ld $ab 4457 00ea ld $ea 4458 00af ld $af 4459 00ab ld $ab 445a 00bf ld $bf 445b 00aa ld $aa 445c 00ff ld $ff 445d 00aa ld $aa 445e 000e ld $0e 445f 00c3 ld $c3 4460 0030 ld $30 4461 000c ld $0c 4462 00c3 ld $c3 4463 0030 ld $30 4464 000c ld $0c 4465 00c3 ld $c3 4466 007f ld $7f 4467 0005 ld $05 4468 00c0 ld $c0 4469 0030 ld $30 446a 000c ld $0c 446b 00c3 ld $c3 446c 0030 ld $30 446d 000c ld $0c 446e 00c3 ld $c3 446f 0030 ld $30 4470 00bc ld $bc 4471 00bc ld $bc 4472 0030 ld $30 4473 000c ld $0c 4474 00c3 ld $c3 4475 0030 ld $30 4476 000c ld $0c 4477 00c3 ld $c3 4478 0030 ld $30 4479 000c ld $0c 447a 00c3 ld $c3 447b 0030 ld $30 447c 000c ld $0c 447d 00c3 ld $c3 447e 0030 ld $30 447f 000c ld $0c 4480 00c3 ld $c3 4481 0030 ld $30 4482 000c ld $0c 4483 00c3 ld $c3 4484 0030 ld $30 4485 000c ld $0c 4486 00c3 ld $c3 4487 0030 ld $30 4488 000c ld $0c 4489 00c3 ld $c3 448a 0030 ld $30 448b 000c ld $0c 448c 00c3 ld $c3 448d 0030 ld $30 448e 000c ld $0c 448f 00c3 ld $c3 4490 0030 ld $30 4491 000c ld $0c 4492 00c3 ld $c3 4493 0030 ld $30 4494 000c ld $0c 4495 00c3 ld $c3 4496 0030 ld $30 4497 000c ld $0c 4498 00c3 ld $c3 4499 0030 ld $30 449a 000c ld $0c 449b 00c3 ld $c3 449c 00b0 ld $b0 449d 00fa ld $fa 449e 00ab ld $ab 449f 00bf ld $bf 44a0 000a ld $0a 44a1 00ab ld $ab 44a2 0095 ld $95 44a3 005a ld $5a 44a4 00a9 ld $a9 44a5 002a ld $2a 44a6 000c ld $0c 44a7 00c3 ld $c3 44a8 0012 ld $12 44a9 005c ld $5c 44aa 00c2 ld $c2 44ab 0030 ld $30 44ac 000c ld $0c 44ad 00c3 ld $c3 44ae 0030 ld $30 44af 000c ld $0c 44b0 00c3 ld $c3 44b1 00bf ld $bf 44b2 0004 ld $04 44b3 00c3 ld $c3 44b4 002f ld $2f 44b5 00fc ld $fc 44b6 00c2 ld $c2 44b7 002f ld $2f 44b8 000c ld $0c 44b9 0047 ld $47 44ba 003f ld $3f 44bb 000c ld $0c 44bc 00c3 ld $c3 44bd 0030 ld $30 44be 000c ld $0c 44bf 00c3 ld $c3 44c0 0030 ld $30 44c1 000c ld $0c 44c2 00c3 ld $c3 44c3 0030 ld $30 44c4 000c ld $0c 44c5 00c3 ld $c3 44c6 00b0 ld $b0 44c7 00aa ld $aa 44c8 00aa ld $aa 44c9 0095 ld $95 44ca 005a ld $5a 44cb 00a9 ld $a9 44cc 006a ld $6a 44cd 00a5 ld $a5 44ce 0056 ld $56 44cf 00aa ld $aa 44d0 00aa ld $aa 44d1 00c2 ld $c2 44d2 0030 ld $30 44d3 000c ld $0c 44d4 00c3 ld $c3 44d5 0030 ld $30 44d6 000c ld $0c 44d7 00c3 ld $c3 44d8 0030 ld $30 44d9 000c ld $0c 44da 000f ld $0f 44db 003f ld $3f 44dc 00ac ld $ac 44dd 00fe ld $fe 44de 0030 ld $30 44df 000c ld $0c 44e0 000f ld $0f 44e1 003f ld $3f 44e2 00ac ld $ac 44e3 00fe ld $fe 44e4 0030 ld $30 44e5 003c ld $3c 44e6 00fc ld $fc 44e7 00b0 ld $b0 44e8 00fa ld $fa 44e9 00c3 ld $c3 44ea 0030 ld $30 44eb 000c ld $0c 44ec 00c3 ld $c3 44ed 0030 ld $30 44ee 000c ld $0c 44ef 00c3 ld $c3 44f0 0030 ld $30 44f1 000c ld $0c 44f2 00c3 ld $c3 44f3 0030 ld $30 44f4 000c ld $0c 44f5 00c3 ld $c3 44f6 0030 ld $30 44f7 000c ld $0c 44f8 00c3 ld $c3 44f9 0030 ld $30 44fa 000c ld $0c 44fb fe00 bra ac ;+-----------------------------------+ 44fc fcfd bra $44fd ;| | 44fd 1404 ld $04,y ;| Trampoline for page $4400 lookups | 44fe e068 jmp y,$68 ;| | 44ff c218 st [$18] ;+-----------------------------------+ 4500 00c3 ld $c3 4501 0030 ld $30 4502 000c ld $0c 4503 00c3 ld $c3 4504 0015 ld $15 4505 000c ld $0c 4506 00c3 ld $c3 4507 0030 ld $30 4508 000c ld $0c 4509 00c3 ld $c3 450a 0030 ld $30 450b 000c ld $0c 450c 00c3 ld $c3 450d 00eb ld $eb 450e 001a ld $1a 450f 0004 ld $04 4510 0069 ld $69 4511 00b0 ld $b0 4512 00a6 ld $a6 4513 0030 ld $30 4514 000c ld $0c 4515 00c3 ld $c3 4516 0070 ld $70 4517 0055 ld $55 4518 00fd ld $fd 4519 0055 ld $55 451a 00f5 ld $f5 451b 0057 ld $57 451c 00d5 ld $d5 451d 005f ld $5f 451e 0055 ld $55 451f 007f ld $7f 4520 0055 ld $55 4521 00fd ld $fd 4522 0055 ld $55 4523 0005 ld $05 4524 00c3 ld $c3 4525 0030 ld $30 4526 000c ld $0c 4527 00c3 ld $c3 4528 0030 ld $30 4529 000c ld $0c 452a 00c3 ld $c3 452b 0030 ld $30 452c 0050 ld $50 452d 00fd ld $fd 452e 0030 ld $30 452f 000c ld $0c 4530 00c3 ld $c3 4531 0030 ld $30 4532 000c ld $0c 4533 00c3 ld $c3 4534 0030 ld $30 4535 006c ld $6c 4536 00fc ld $fc 4537 0030 ld $30 4538 000c ld $0c 4539 00c3 ld $c3 453a 0030 ld $30 453b 000c ld $0c 453c 00c3 ld $c3 453d 0030 ld $30 453e 000c ld $0c 453f 00c3 ld $c3 4540 0030 ld $30 4541 000c ld $0c 4542 00c3 ld $c3 4543 0030 ld $30 4544 000c ld $0c 4545 00c3 ld $c3 4546 0030 ld $30 4547 000c ld $0c 4548 00c3 ld $c3 4549 0030 ld $30 454a 000c ld $0c 454b 00c3 ld $c3 454c 0030 ld $30 454d 000c ld $0c 454e 00c3 ld $c3 454f 0030 ld $30 4550 000c ld $0c 4551 00c3 ld $c3 4552 0030 ld $30 4553 000c ld $0c 4554 00c3 ld $c3 4555 0030 ld $30 4556 000c ld $0c 4557 00c3 ld $c3 4558 0030 ld $30 4559 000c ld $0c 455a 00c3 ld $c3 455b 0030 ld $30 455c 000c ld $0c 455d 00c3 ld $c3 455e 0030 ld $30 455f 000c ld $0c 4560 00c3 ld $c3 4561 0070 ld $70 4562 00a5 ld $a5 4563 00fe ld $fe 4564 00ea ld $ea 4565 000f ld $0f 4566 00ab ld $ab 4567 006a ld $6a 4568 00a5 ld $a5 4569 0056 ld $56 456a 002a ld $2a 456b 000c ld $0c 456c 004b ld $4b 456d 0092 ld $92 456e 0054 ld $54 456f 0096 ld $96 4570 0030 ld $30 4571 000c ld $0c 4572 00c3 ld $c3 4573 0030 ld $30 4574 000c ld $0c 4575 00c3 ld $c3 4576 006f ld $6f 4577 0004 ld $04 4578 00c3 ld $c3 4579 00f0 ld $f0 457a 000b ld $0b 457b 00bf ld $bf 457c 0030 ld $30 457d 000c ld $0c 457e 004b ld $4b 457f 002f ld $2f 4580 000c ld $0c 4581 00c3 ld $c3 4582 0030 ld $30 4583 000c ld $0c 4584 00c3 ld $c3 4585 0030 ld $30 4586 00fc ld $fc 4587 00ff ld $ff 4588 00ff ld $ff 4589 00ff ld $ff 458a 00ff ld $ff 458b 00aa ld $aa 458c 0065 ld $65 458d 00a9 ld $a9 458e 00aa ld $aa 458f 00aa ld $aa 4590 00aa ld $aa * 7 times 4595 0065 ld $65 4596 00a9 ld $a9 4597 00ff ld $ff 4598 00ff ld $ff 4599 00ff ld $ff 459a 00ff ld $ff 459b 000f ld $0f 459c 00c3 ld $c3 459d 0030 ld $30 459e 000c ld $0c 459f 00c3 ld $c3 45a0 0030 ld $30 45a1 00ac ld $ac 45a2 00fe ld $fe 45a3 0030 ld $30 45a4 000c ld $0c 45a5 00c3 ld $c3 45a6 0030 ld $30 45a7 00ac ld $ac 45a8 00fe ld $fe 45a9 0030 ld $30 45aa 000c ld $0c 45ab 00c3 ld $c3 45ac 00b0 ld $b0 45ad 00fa ld $fa 45ae 00c3 ld $c3 45af 0030 ld $30 45b0 000c ld $0c 45b1 00c3 ld $c3 45b2 0030 ld $30 45b3 000c ld $0c 45b4 00c3 ld $c3 45b5 0030 ld $30 45b6 000c ld $0c 45b7 00c3 ld $c3 45b8 0030 ld $30 45b9 000c ld $0c 45ba 00c3 ld $c3 45bb 0030 ld $30 45bc 000c ld $0c 45bd 00c3 ld $c3 45be 0030 ld $30 45bf 000c ld $0c 45c0 00c3 ld $c3 45c1 0030 ld $30 45c2 000c ld $0c 45c3 00c3 ld $c3 45c4 0015 ld $15 45c5 000c ld $0c 45c6 00c3 ld $c3 45c7 0030 ld $30 45c8 000c ld $0c 45c9 00c3 ld $c3 45ca 0030 ld $30 45cb 000c ld $0c 45cc 00c3 ld $c3 45cd 00e9 ld $e9 45ce 001a ld $1a 45cf 00a4 ld $a4 45d0 0041 ld $41 45d1 00b0 ld $b0 45d2 00ae ld $ae 45d3 0030 ld $30 45d4 000c ld $0c 45d5 00c3 ld $c3 45d6 00b0 ld $b0 45d7 00aa ld $aa 45d8 00ff ld $ff 45d9 00ba ld $ba 45da 00fa ld $fa 45db 00ab ld $ab 45dc 00fa ld $fa 45dd 00af ld $af 45de 00aa ld $aa 45df 00bf ld $bf 45e0 00ae ld $ae 45e1 00fe ld $fe 45e2 00ba ld $ba 45e3 000a ld $0a 45e4 00c3 ld $c3 45e5 0030 ld $30 45e6 000c ld $0c 45e7 00c3 ld $c3 45e8 0030 ld $30 45e9 000c ld $0c 45ea 00c3 ld $c3 45eb 00c0 ld $c0 45ec 006b ld $6b 45ed 0001 ld $01 45ee 002f ld $2f 45ef 000c ld $0c 45f0 00c3 ld $c3 45f1 0030 ld $30 45f2 000c ld $0c 45f3 00c3 ld $c3 45f4 0030 ld $30 45f5 00bc ld $bc 45f6 00bc ld $bc 45f7 0030 ld $30 45f8 000c ld $0c 45f9 00c3 ld $c3 45fa 0030 ld $30 45fb fe00 bra ac ;+-----------------------------------+ 45fc fcfd bra $45fd ;| | 45fd 1404 ld $04,y ;| Trampoline for page $4500 lookups | 45fe e068 jmp y,$68 ;| | 45ff c218 st [$18] ;+-----------------------------------+ 4600 000c ld $0c 4601 00c3 ld $c3 4602 0030 ld $30 4603 000c ld $0c 4604 00c3 ld $c3 4605 0030 ld $30 4606 000c ld $0c 4607 00c3 ld $c3 4608 0030 ld $30 4609 000c ld $0c 460a 00c3 ld $c3 460b 0030 ld $30 460c 000c ld $0c 460d 00c3 ld $c3 460e 0030 ld $30 460f 000c ld $0c 4610 00c3 ld $c3 4611 0030 ld $30 4612 000c ld $0c 4613 00c3 ld $c3 4614 0030 ld $30 4615 000c ld $0c 4616 00c3 ld $c3 4617 0030 ld $30 4618 000c ld $0c 4619 00c3 ld $c3 461a 0030 ld $30 461b 000c ld $0c 461c 00c3 ld $c3 461d 0030 ld $30 461e 000c ld $0c 461f 00c3 ld $c3 4620 0030 ld $30 4621 000c ld $0c 4622 00c3 ld $c3 4623 0030 ld $30 4624 000c ld $0c 4625 00c3 ld $c3 4626 00b0 ld $b0 4627 005a ld $5a 4628 00a9 ld $a9 4629 00bf ld $bf 462a 000a ld $0a 462b 00ab ld $ab 462c 0095 ld $95 462d 005a ld $5a 462e 00a9 ld $a9 462f 002a ld $2a 4630 000c ld $0c 4631 004b ld $4b 4632 00a3 ld $a3 4633 0094 ld $94 4634 0097 ld $97 4635 0030 ld $30 4636 000c ld $0c 4637 00c3 ld $c3 4638 0030 ld $30 4639 000c ld $0c 463a 00c3 ld $c3 463b 00ff ld $ff 463c 00fb ld $fb 463d 00be ld $be 463e 002f ld $2f 463f 00fc ld $fc 4640 00c3 ld $c3 4641 00ef ld $ef 4642 00fb ld $fb 4643 00be ld $be 4644 003f ld $3f 4645 000c ld $0c 4646 00c3 ld $c3 4647 0030 ld $30 4648 000c ld $0c 4649 00c3 ld $c3 464a 0030 ld $30 464b 00ac ld $ac 464c 0069 ld $69 464d 009a ld $9a 464e 00a6 ld $a6 464f 0069 ld $69 4650 0096 ld $96 4651 00aa ld $aa 4652 001a ld $1a 4653 0096 ld $96 4654 0065 ld $65 4655 0059 ld $59 4656 0096 ld $96 4657 0065 ld $65 4658 0059 ld $59 4659 0086 ld $86 465a 00aa ld $aa 465b 005a ld $5a 465c 009a ld $9a 465d 00a6 ld $a6 465e 0069 ld $69 465f 009a ld $9a 4660 0006 ld $06 4661 00c3 ld $c3 4662 0030 ld $30 4663 000c ld $0c 4664 00c3 ld $c3 4665 0030 ld $30 4666 00ac ld $ac 4667 00fe ld $fe 4668 0030 ld $30 4669 000c ld $0c 466a 00c3 ld $c3 466b 0030 ld $30 466c 00ac ld $ac 466d 00fe ld $fe 466e 0030 ld $30 466f 000c ld $0c 4670 00c3 ld $c3 4671 00b0 ld $b0 4672 00fa ld $fa 4673 00c3 ld $c3 4674 0030 ld $30 4675 000c ld $0c 4676 00c3 ld $c3 4677 0030 ld $30 4678 000c ld $0c 4679 00c3 ld $c3 467a 0030 ld $30 467b 000c ld $0c 467c 00c3 ld $c3 467d 0030 ld $30 467e 000c ld $0c 467f 00c3 ld $c3 4680 0030 ld $30 4681 00ac ld $ac 4682 00aa ld $aa 4683 00ff ld $ff 4684 00ff ld $ff 4685 00ff ld $ff * 5 times 4688 00c3 ld $c3 4689 0015 ld $15 468a 000c ld $0c 468b 00c3 ld $c3 468c 0030 ld $30 468d 000c ld $0c 468e 00c3 ld $c3 468f 0030 ld $30 4690 000c ld $0c 4691 00c3 ld $c3 4692 00eb ld $eb 4693 001a ld $1a 4694 0004 ld $04 4695 0069 ld $69 4696 00b0 ld $b0 4697 00a6 ld $a6 4698 0030 ld $30 4699 000c ld $0c 469a 00c3 ld $c3 469b 0070 ld $70 469c 0055 ld $55 469d 00fd ld $fd 469e 0055 ld $55 469f 00f5 ld $f5 46a0 0057 ld $57 46a1 00d5 ld $d5 46a2 005f ld $5f 46a3 0055 ld $55 46a4 007f ld $7f 46a5 0055 ld $55 46a6 00fd ld $fd 46a7 0055 ld $55 46a8 0005 ld $05 46a9 00c3 ld $c3 46aa 0030 ld $30 46ab 000c ld $0c 46ac 00c3 ld $c3 46ad 0030 ld $30 46ae 000c ld $0c 46af 0003 ld $03 46b0 007f ld $7f 46b1 0010 ld $10 46b2 0004 ld $04 46b3 00c0 ld $c0 46b4 000f ld $0f 46b5 00c3 ld $c3 46b6 0030 ld $30 46b7 000c ld $0c 46b8 00c3 ld $c3 46b9 0030 ld $30 46ba 006c ld $6c 46bb 00fc ld $fc 46bc 0041 ld $41 46bd 0010 ld $10 46be 0004 ld $04 46bf 0041 ld $41 46c0 0010 ld $10 46c1 0004 ld $04 46c2 0041 ld $41 46c3 0010 ld $10 46c4 0004 ld $04 46c5 0041 ld $41 46c6 0010 ld $10 46c7 0004 ld $04 46c8 0041 ld $41 46c9 0010 ld $10 46ca 0004 ld $04 46cb 0030 ld $30 46cc 000c ld $0c 46cd 00c3 ld $c3 46ce 0030 ld $30 46cf 000c ld $0c 46d0 00c3 ld $c3 46d1 0030 ld $30 46d2 000c ld $0c 46d3 00c3 ld $c3 46d4 0030 ld $30 46d5 000c ld $0c 46d6 00c3 ld $c3 46d7 0030 ld $30 46d8 000c ld $0c 46d9 00c3 ld $c3 46da 0030 ld $30 46db 000c ld $0c 46dc 00c3 ld $c3 46dd 0030 ld $30 46de 000c ld $0c 46df 00c3 ld $c3 46e0 0030 ld $30 46e1 000c ld $0c 46e2 00c3 ld $c3 46e3 0030 ld $30 46e4 000c ld $0c 46e5 00c3 ld $c3 46e6 0070 ld $70 46e7 00a5 ld $a5 46e8 00fe ld $fe 46e9 00ea ld $ea 46ea 000f ld $0f 46eb 00ab ld $ab 46ec 006a ld $6a 46ed 00a5 ld $a5 46ee 0056 ld $56 46ef 002a ld $2a 46f0 001c ld $1c 46f1 0058 ld $58 46f2 0081 ld $81 46f3 0015 ld $15 46f4 0058 ld $58 46f5 0011 ld $11 46f6 000c ld $0c 46f7 00c3 ld $c3 46f8 0030 ld $30 46f9 000c ld $0c 46fa 00c3 ld $c3 46fb fe00 bra ac ;+-----------------------------------+ 46fc fcfd bra $46fd ;| | 46fd 1404 ld $04,y ;| Trampoline for page $4600 lookups | 46fe e068 jmp y,$68 ;| | 46ff c218 st [$18] ;+-----------------------------------+ 4700 00af ld $af 4701 0004 ld $04 4702 00c3 ld $c3 4703 00f0 ld $f0 4704 000f ld $0f 4705 00ff ld $ff 4706 0030 ld $30 4707 000c ld $0c 4708 0047 ld $47 4709 002f ld $2f 470a 000c ld $0c 470b 00c3 ld $c3 470c 0030 ld $30 470d 000c ld $0c 470e 00c3 ld $c3 470f 0030 ld $30 4710 005c ld $5c 4711 0055 ld $55 4712 0055 ld $55 4713 0055 ld $55 4714 0055 ld $55 4715 00d6 ld $d6 4716 00fa ld $fa 4717 005a ld $5a 4718 0069 ld $69 4719 009a ld $9a 471a 00a6 ld $a6 471b 0069 ld $69 471c 009a ld $9a 471d 00a6 ld $a6 471e 00d6 ld $d6 471f 00bb ld $bb 4720 005a ld $5a 4721 0055 ld $55 4722 0055 ld $55 4723 0055 ld $55 4724 0055 ld $55 4725 0005 ld $05 4726 00c3 ld $c3 4727 0030 ld $30 4728 000c ld $0c 4729 00c3 ld $c3 472a 0030 ld $30 472b 00ac ld $ac 472c 00fe ld $fe 472d 0030 ld $30 472e 000c ld $0c 472f 00c3 ld $c3 4730 0030 ld $30 4731 00ac ld $ac 4732 00fe ld $fe 4733 0030 ld $30 4734 000c ld $0c 4735 00c3 ld $c3 4736 00b0 ld $b0 4737 00fa ld $fa 4738 00c3 ld $c3 4739 0030 ld $30 473a 000c ld $0c 473b 00c3 ld $c3 473c 0030 ld $30 473d 000c ld $0c 473e 00c3 ld $c3 473f 0030 ld $30 4740 000c ld $0c 4741 00c3 ld $c3 4742 0030 ld $30 4743 000c ld $0c 4744 00ab ld $ab 4745 00aa ld $aa 4746 00aa ld $aa 4747 00aa ld $aa 4748 00aa ld $aa 4749 00fa ld $fa 474a 00ff ld $ff 474b 00ff ld $ff 474c 00ff ld $ff * 5 times 474f 000f ld $0f 4750 00c3 ld $c3 4751 0030 ld $30 4752 000c ld $0c 4753 00c3 ld $c3 4754 0030 ld $30 4755 000c ld $0c 4756 00c3 ld $c3 4757 00e9 ld $e9 4758 001a ld $1a 4759 00a4 ld $a4 475a 0041 ld $41 475b 00b0 ld $b0 475c 00ae ld $ae 475d 0030 ld $30 475e 000c ld $0c 475f 00c3 ld $c3 4760 00b0 ld $b0 4761 00aa ld $aa 4762 00ff ld $ff 4763 00aa ld $aa 4764 00fe ld $fe 4765 00ab ld $ab 4766 00ea ld $ea 4767 00af ld $af 4768 00ea ld $ea 4769 00bf ld $bf 476a 00aa ld $aa 476b 00ff ld $ff 476c 00aa ld $aa 476d 000e ld $0e 476e 00c3 ld $c3 476f 0030 ld $30 4770 000c ld $0c 4771 00c3 ld $c3 4772 0030 ld $30 4773 000c ld $0c 4774 00bc ld $bc 4775 0081 ld $81 4776 0065 ld $65 4777 0005 ld $05 4778 0020 ld $20 4779 00f0 ld $f0 477a 00c2 ld $c2 477b 0030 ld $30 477c 000c ld $0c 477d 00c3 ld $c3 477e 0030 ld $30 477f 00bc ld $bc 4780 00bc ld $bc 4781 00ff ld $ff 4782 00fb ld $fb 4783 00bf ld $bf 4784 00ff ld $ff 4785 00fb ld $fb 4786 00bf ld $bf 4787 00ff ld $ff 4788 00fb ld $fb 4789 00bf ld $bf 478a 00ff ld $ff 478b 00fb ld $fb 478c 00bf ld $bf 478d 00ff ld $ff 478e 00fb ld $fb 478f 0007 ld $07 4790 0030 ld $30 4791 000c ld $0c 4792 00c3 ld $c3 4793 0030 ld $30 4794 000c ld $0c 4795 00c3 ld $c3 4796 0030 ld $30 4797 000c ld $0c 4798 00c3 ld $c3 4799 0030 ld $30 479a 000c ld $0c 479b 00c3 ld $c3 479c 0030 ld $30 479d 000c ld $0c 479e 00c3 ld $c3 479f 0030 ld $30 47a0 000c ld $0c 47a1 00c3 ld $c3 47a2 0030 ld $30 47a3 000c ld $0c 47a4 00c3 ld $c3 47a5 0030 ld $30 47a6 000c ld $0c 47a7 00c3 ld $c3 47a8 0030 ld $30 47a9 000c ld $0c 47aa 00c3 ld $c3 47ab 00b0 ld $b0 47ac 005a ld $5a 47ad 00a9 ld $a9 47ae 00bf ld $bf 47af 000a ld $0a 47b0 00ab ld $ab 47b1 0095 ld $95 47b2 005a ld $5a 47b3 00a9 ld $a9 47b4 002a ld $2a 47b5 001c ld $1c 47b6 0004 ld $04 47b7 0041 ld $41 47b8 0010 ld $10 47b9 0044 ld $44 47ba 0011 ld $11 47bb 000c ld $0c 47bc 00c3 ld $c3 47bd 0030 ld $30 47be 000c ld $0c 47bf 00c3 ld $c3 47c0 007f ld $7f 47c1 0004 ld $04 47c2 00c3 ld $c3 47c3 00ef ld $ef 47c4 00ff ld $ff 47c5 00fe ld $fe 47c6 003f ld $3f 47c7 000c ld $0c 47c8 004b ld $4b 47c9 003f ld $3f 47ca 000c ld $0c 47cb 00c3 ld $c3 47cc 0030 ld $30 47cd 000c ld $0c 47ce 00c3 ld $c3 47cf 0030 ld $30 47d0 00ac ld $ac 47d1 00aa ld $aa 47d2 0095 ld $95 47d3 00aa ld $aa 47d4 0056 ld $56 47d5 00d6 ld $d6 47d6 00fa ld $fa 47d7 005a ld $5a 47d8 006a ld $6a 47d9 00a5 ld $a5 47da 00aa ld $aa 47db 006a ld $6a 47dc 00a5 ld $a5 47dd 00aa ld $aa 47de 00d6 ld $d6 47df 00bb ld $bb 47e0 005a ld $5a 47e1 0095 ld $95 47e2 00aa ld $aa 47e3 0056 ld $56 47e4 00aa ld $aa 47e5 000a ld $0a 47e6 00c3 ld $c3 47e7 0030 ld $30 47e8 000c ld $0c 47e9 00c3 ld $c3 47ea 0030 ld $30 47eb 00ac ld $ac 47ec 00fe ld $fe 47ed 0030 ld $30 47ee 000c ld $0c 47ef 00c3 ld $c3 47f0 0030 ld $30 47f1 00ac ld $ac 47f2 00fe ld $fe 47f3 0030 ld $30 47f4 000c ld $0c 47f5 00c3 ld $c3 47f6 00b0 ld $b0 47f7 00fa ld $fa 47f8 00c3 ld $c3 47f9 0030 ld $30 47fa 000c ld $0c 47fb fe00 bra ac ;+-----------------------------------+ 47fc fcfd bra $47fd ;| | 47fd 1404 ld $04,y ;| Trampoline for page $4700 lookups | 47fe e068 jmp y,$68 ;| | 47ff c218 st [$18] ;+-----------------------------------+ 4800 00c3 ld $c3 4801 0030 ld $30 4802 000c ld $0c 4803 00c3 ld $c3 4804 0030 ld $30 4805 000c ld $0c 4806 00c3 ld $c3 4807 0055 ld $55 4808 0055 ld $55 4809 0055 ld $55 * 6 times 480d 00aa ld $aa 480e 00aa ld $aa 480f 00aa ld $aa 4810 00ea ld $ea 4811 00ff ld $ff 4812 00ff ld $ff 4813 00ff ld $ff * 5 times 4816 003f ld $3f 4817 000c ld $0c 4818 00c3 ld $c3 4819 0030 ld $30 481a 000c ld $0c 481b 00c3 ld $c3 481c 00eb ld $eb 481d 001a ld $1a 481e 0004 ld $04 481f 0069 ld $69 4820 00b0 ld $b0 4821 00a6 ld $a6 4822 0030 ld $30 4823 000c ld $0c 4824 00c3 ld $c3 4825 0070 ld $70 4826 0055 ld $55 4827 00fd ld $fd 4828 0055 ld $55 4829 00f5 ld $f5 482a 0057 ld $57 482b 00d5 ld $d5 482c 005f ld $5f 482d 0055 ld $55 482e 007f ld $7f 482f 0055 ld $55 4830 00fd ld $fd 4831 0055 ld $55 4832 0005 ld $05 4833 00c3 ld $c3 4834 0030 ld $30 4835 000c ld $0c 4836 00c3 ld $c3 4837 0030 ld $30 4838 00f0 ld $f0 4839 0083 ld $83 483a 0081 ld $81 483b 0065 ld $65 483c 0005 ld $05 483d 0020 ld $20 483e 0008 ld $08 483f 00fc ld $fc 4840 0030 ld $30 4841 000c ld $0c 4842 00c3 ld $c3 4843 0030 ld $30 4844 006c ld $6c 4845 00fc ld $fc 4846 006f ld $6f 4847 0060 ld $60 4848 0004 ld $04 4849 0046 ld $46 484a 0060 ld $60 484b 0004 ld $04 484c 0046 ld $46 484d 0060 ld $60 484e 0004 ld $04 484f 00c6 ld $c6 4850 006f ld $6f 4851 002c ld $2c 4852 0056 ld $56 4853 00f0 ld $f0 4854 0006 ld $06 4855 0030 ld $30 4856 000c ld $0c 4857 00c3 ld $c3 4858 0030 ld $30 4859 000c ld $0c 485a 00c3 ld $c3 485b 0030 ld $30 485c 000c ld $0c 485d 00c3 ld $c3 485e 0030 ld $30 485f 000c ld $0c 4860 00c3 ld $c3 4861 0030 ld $30 4862 000c ld $0c 4863 00c3 ld $c3 4864 0030 ld $30 4865 000c ld $0c 4866 00c3 ld $c3 4867 0030 ld $30 4868 000c ld $0c 4869 00c3 ld $c3 486a 0030 ld $30 486b 000c ld $0c 486c 00c3 ld $c3 486d 0030 ld $30 486e 000c ld $0c 486f 00c3 ld $c3 4870 0070 ld $70 4871 00a5 ld $a5 4872 00fe ld $fe 4873 00ea ld $ea 4874 000f ld $0f 4875 00ab ld $ab 4876 006a ld $6a 4877 00a5 ld $a5 4878 0056 ld $56 4879 002a ld $2a 487a 001c ld $1c 487b 0058 ld $58 487c 0081 ld $81 487d 0015 ld $15 487e 0058 ld $58 487f 0011 ld $11 4880 000c ld $0c 4881 00c3 ld $c3 4882 0030 ld $30 4883 000c ld $0c 4884 00c3 ld $c3 4885 00f0 ld $f0 4886 000b ld $0b 4887 00bf ld $bf 4888 003f ld $3f 4889 00fc ld $fc 488a 00c2 ld $c2 488b 00ff ld $ff 488c 000f ld $0f 488d 00bf ld $bf 488e 0030 ld $30 488f 000c ld $0c 4890 00c3 ld $c3 4891 0030 ld $30 4892 000c ld $0c 4893 00c3 ld $c3 4894 0030 ld $30 4895 00ac ld $ac 4896 0069 ld $69 4897 0055 ld $55 4898 0055 ld $55 4899 0055 ld $55 489a 0096 ld $96 489b 00aa ld $aa 489c 005a ld $5a 489d 00aa ld $aa 489e 006a ld $6a 489f 00a9 ld $a9 48a0 0096 ld $96 48a1 00aa ld $aa 48a2 00aa ld $aa 48a3 0096 ld $96 48a4 00aa ld $aa 48a5 005a ld $5a 48a6 0055 ld $55 48a7 0055 ld $55 48a8 0055 ld $55 48a9 009a ld $9a 48aa 0006 ld $06 48ab 00c3 ld $c3 48ac 0030 ld $30 48ad 000c ld $0c 48ae 00c3 ld $c3 48af 0030 ld $30 48b0 00ac ld $ac 48b1 00fe ld $fe 48b2 0030 ld $30 48b3 000c ld $0c 48b4 00c3 ld $c3 48b5 0030 ld $30 48b6 00ac ld $ac 48b7 00fe ld $fe 48b8 0030 ld $30 48b9 000c ld $0c 48ba 00c3 ld $c3 48bb 00b0 ld $b0 48bc 00fa ld $fa 48bd 00c3 ld $c3 48be 0030 ld $30 48bf 000c ld $0c 48c0 00c3 ld $c3 48c1 0030 ld $30 48c2 000c ld $0c 48c3 00c3 ld $c3 48c4 0030 ld $30 48c5 0000 ld $00 48c6 0000 ld $00 48c7 0000 ld $00 * 5 times 48ca 0055 ld $55 48cb 0055 ld $55 48cc 0055 ld $55 48cd 0055 ld $55 48ce 00a5 ld $a5 48cf 00aa ld $aa 48d0 00aa ld $aa 48d1 00aa ld $aa 48d2 00fe ld $fe 48d3 00ff ld $ff 48d4 00ff ld $ff 48d5 00ff ld $ff * 6 times 48d9 0030 ld $30 48da 000c ld $0c 48db 00c3 ld $c3 48dc 00e9 ld $e9 48dd 001a ld $1a 48de 00a4 ld $a4 48df 0041 ld $41 48e0 00b0 ld $b0 48e1 00ae ld $ae 48e2 0030 ld $30 48e3 000c ld $0c 48e4 00c3 ld $c3 48e5 00b0 ld $b0 48e6 00ae ld $ae 48e7 00fe ld $fe 48e8 00ba ld $ba 48e9 00fa ld $fa 48ea 00ab ld $ab 48eb 00fa ld $fa 48ec 00af ld $af 48ed 00aa ld $aa 48ee 00bf ld $bf 48ef 00ae ld $ae 48f0 00fe ld $fe 48f1 00aa ld $aa 48f2 000e ld $0e 48f3 00c3 ld $c3 48f4 0030 ld $30 48f5 000c ld $0c 48f6 00c3 ld $c3 48f7 00c0 ld $c0 48f8 001b ld $1b 48f9 0004 ld $04 48fa 0041 ld $41 48fb fe00 bra ac ;+-----------------------------------+ 48fc fcfd bra $48fd ;| | 48fd 1404 ld $04,y ;| Trampoline for page $4800 lookups | 48fe e068 jmp y,$68 ;| | 48ff c218 st [$18] ;+-----------------------------------+ 4900 0010 ld $10 4901 0004 ld $04 4902 0041 ld $41 4903 0000 ld $00 4904 0003 ld $03 4905 0030 ld $30 4906 000c ld $0c 4907 00c3 ld $c3 4908 0030 ld $30 4909 00bc ld $bc 490a 00bc ld $bc 490b 00bf ld $bf 490c 00f1 ld $f1 490d 001a ld $1a 490e 008b ld $8b 490f 00b1 ld $b1 4910 0018 ld $18 4911 008b ld $8b 4912 00b1 ld $b1 4913 0018 ld $18 4914 00c1 ld $c1 4915 00bb ld $bb 4916 0058 ld $58 4917 0046 ld $46 4918 00f0 ld $f0 4919 0007 ld $07 491a 0030 ld $30 491b 000c ld $0c 491c 00c3 ld $c3 491d 0030 ld $30 491e 000c ld $0c 491f 00c3 ld $c3 4920 0030 ld $30 4921 000c ld $0c 4922 00c3 ld $c3 4923 0030 ld $30 4924 000c ld $0c 4925 00c3 ld $c3 4926 0030 ld $30 4927 000c ld $0c 4928 00c3 ld $c3 4929 0030 ld $30 492a 000c ld $0c 492b 00c3 ld $c3 492c 0030 ld $30 492d 000c ld $0c 492e 00c3 ld $c3 492f 0030 ld $30 4930 000c ld $0c 4931 00c3 ld $c3 4932 0030 ld $30 4933 000c ld $0c 4934 00c3 ld $c3 4935 00b0 ld $b0 4936 005a ld $5a 4937 00a9 ld $a9 4938 00bf ld $bf 4939 000a ld $0a 493a 00ab ld $ab 493b 0095 ld $95 493c 005a ld $5a 493d 00a9 ld $a9 493e 002a ld $2a 493f 001c ld $1c 4940 0004 ld $04 4941 0041 ld $41 4942 0010 ld $10 4943 0044 ld $44 4944 0011 ld $11 4945 000c ld $0c 4946 00c3 ld $c3 4947 0030 ld $30 4948 000c ld $0c 4949 00c3 ld $c3 494a 0070 ld $70 494b 00f4 ld $f4 494c 00fe ld $fe 494d 0030 ld $30 494e 00fc ld $fc 494f 00c2 ld $c2 4950 00f0 ld $f0 4951 00ff ld $ff 4952 004b ld $4b 4953 0030 ld $30 4954 000c ld $0c 4955 00c3 ld $c3 4956 0030 ld $30 4957 000c ld $0c 4958 00c3 ld $c3 4959 0030 ld $30 495a 00ac ld $ac 495b 0069 ld $69 495c 009a ld $9a 495d 00aa ld $aa 495e 006a ld $6a 495f 0016 ld $16 4960 00a5 ld $a5 4961 005a ld $5a 4962 00aa ld $aa 4963 0061 ld $61 4964 00a9 ld $a9 4965 0056 ld $56 4966 0065 ld $65 4967 00a8 ld $a8 4968 0056 ld $56 4969 0095 ld $95 496a 005a ld $5a 496b 009a ld $9a 496c 00aa ld $aa 496d 006a ld $6a 496e 009a ld $9a 496f 0006 ld $06 4970 00c3 ld $c3 4971 0030 ld $30 4972 000c ld $0c 4973 00c3 ld $c3 4974 0030 ld $30 4975 00ac ld $ac 4976 00fe ld $fe 4977 0030 ld $30 4978 000c ld $0c 4979 00c3 ld $c3 497a 0030 ld $30 497b 00ac ld $ac 497c 00fe ld $fe 497d 0030 ld $30 497e 000c ld $0c 497f 00c3 ld $c3 4980 00b0 ld $b0 4981 00fa ld $fa 4982 00c3 ld $c3 4983 0030 ld $30 4984 000c ld $0c 4985 00c3 ld $c3 4986 0030 ld $30 4987 000c ld $0c 4988 00c3 ld $c3 4989 0030 ld $30 498a 000c ld $0c 498b 0003 ld $03 498c 0000 ld $00 498d 0000 ld $00 498e 0000 ld $00 * 5 times 4991 0054 ld $54 4992 0055 ld $55 4993 0055 ld $55 4994 0055 ld $55 4995 0055 ld $55 4996 00a5 ld $a5 4997 00aa ld $aa 4998 00aa ld $aa 4999 00fa ld $fa 499a 00ff ld $ff 499b 00ff ld $ff 499c 000f ld $0f 499d 00c3 ld $c3 499e 0030 ld $30 499f 000c ld $0c 49a0 00c3 ld $c3 49a1 00eb ld $eb 49a2 001a ld $1a 49a3 0004 ld $04 49a4 0069 ld $69 49a5 00b0 ld $b0 49a6 00a6 ld $a6 49a7 0030 ld $30 49a8 000c ld $0c 49a9 00c3 ld $c3 49aa 0070 ld $70 49ab 0055 ld $55 49ac 00fd ld $fd 49ad 0055 ld $55 49ae 00f5 ld $f5 49af 0057 ld $57 49b0 00d5 ld $d5 49b1 005f ld $5f 49b2 0055 ld $55 49b3 007f ld $7f 49b4 0055 ld $55 49b5 00fd ld $fd 49b6 0055 ld $55 49b7 0005 ld $05 49b8 00c3 ld $c3 49b9 0030 ld $30 49ba 000c ld $0c 49bb 00c3 ld $c3 49bc 0030 ld $30 49bd 000c ld $0c 49be 0007 ld $07 49bf 0096 ld $96 49c0 0065 ld $65 49c1 0059 ld $59 49c2 0001 ld $01 49c3 000c ld $0c 49c4 00c3 ld $c3 49c5 0030 ld $30 49c6 000c ld $0c 49c7 00c3 ld $c3 49c8 0030 ld $30 49c9 006c ld $6c 49ca 00fc ld $fc 49cb 006f ld $6f 49cc 0060 ld $60 49cd 002c ld $2c 49ce 00c6 ld $c6 49cf 0062 ld $62 49d0 002c ld $2c 49d1 00c6 ld $c6 49d2 0062 ld $62 49d3 002c ld $2c 49d4 00c6 ld $c6 49d5 006f ld $6f 49d6 0019 ld $19 49d7 0056 ld $56 49d8 00f0 ld $f0 49d9 0006 ld $06 49da 0030 ld $30 49db 000c ld $0c 49dc 00c3 ld $c3 49dd 0030 ld $30 49de 000c ld $0c 49df 00c3 ld $c3 49e0 0030 ld $30 49e1 000c ld $0c 49e2 00c3 ld $c3 49e3 0030 ld $30 49e4 000c ld $0c 49e5 00c3 ld $c3 49e6 0030 ld $30 49e7 000c ld $0c 49e8 00c3 ld $c3 49e9 0030 ld $30 49ea 000c ld $0c 49eb 00c3 ld $c3 49ec 0030 ld $30 49ed 000c ld $0c 49ee 00c3 ld $c3 49ef 0030 ld $30 49f0 000c ld $0c 49f1 00c3 ld $c3 49f2 0030 ld $30 49f3 000c ld $0c 49f4 00c3 ld $c3 49f5 0070 ld $70 49f6 00a5 ld $a5 49f7 00fe ld $fe 49f8 00ea ld $ea 49f9 000f ld $0f 49fa 00ab ld $ab 49fb fe00 bra ac ;+-----------------------------------+ 49fc fcfd bra $49fd ;| | 49fd 1404 ld $04,y ;| Trampoline for page $4900 lookups | 49fe e068 jmp y,$68 ;| | 49ff c218 st [$18] ;+-----------------------------------+ 4a00 006a ld $6a 4a01 00a5 ld $a5 4a02 0056 ld $56 4a03 002a ld $2a 4a04 001c ld $1c 4a05 0058 ld $58 4a06 0081 ld $81 4a07 0015 ld $15 4a08 0058 ld $58 4a09 0011 ld $11 4a0a 000c ld $0c 4a0b 00c3 ld $c3 4a0c 0030 ld $30 4a0d 000c ld $0c 4a0e 00c3 ld $c3 4a0f 0030 ld $30 4a10 00fc ld $fc 4a11 00bf ld $bf 4a12 0030 ld $30 4a13 00fc ld $fc 4a14 00c2 ld $c2 4a15 00f0 ld $f0 4a16 00fb ld $fb 4a17 00c3 ld $c3 4a18 0030 ld $30 4a19 000c ld $0c 4a1a 00c3 ld $c3 4a1b 0030 ld $30 4a1c 000c ld $0c 4a1d 00c3 ld $c3 4a1e 0030 ld $30 4a1f 005c ld $5c 4a20 00a9 ld $a9 4a21 0069 ld $69 4a22 0055 ld $55 4a23 0055 ld $55 4a24 0029 ld $29 4a25 0055 ld $55 4a26 0055 ld $55 4a27 0055 ld $55 4a28 0055 ld $55 4a29 0051 ld $51 4a2a 0054 ld $54 4a2b 0055 ld $55 4a2c 0055 ld $55 4a2d 0014 ld $14 4a2e 0090 ld $90 4a2f 0052 ld $52 4a30 0055 ld $55 4a31 0055 ld $55 4a32 0055 ld $55 4a33 006a ld $6a 4a34 0005 ld $05 4a35 00c3 ld $c3 4a36 0030 ld $30 4a37 000c ld $0c 4a38 00c3 ld $c3 4a39 0030 ld $30 4a3a 00ac ld $ac 4a3b 00fe ld $fe 4a3c 0030 ld $30 4a3d 000c ld $0c 4a3e 00c3 ld $c3 4a3f 0030 ld $30 4a40 00ac ld $ac 4a41 00fe ld $fe 4a42 0030 ld $30 4a43 000c ld $0c 4a44 00c3 ld $c3 4a45 00b0 ld $b0 4a46 00fa ld $fa 4a47 00c3 ld $c3 4a48 0030 ld $30 4a49 000c ld $0c 4a4a 00c3 ld $c3 4a4b 0030 ld $30 4a4c 000c ld $0c 4a4d 00c3 ld $c3 4a4e 0030 ld $30 4a4f 000c ld $0c 4a50 00c3 ld $c3 4a51 0030 ld $30 4a52 0000 ld $00 4a53 0000 ld $00 4a54 0000 ld $00 * 8 times 4a5a 0040 ld $40 4a5b 0055 ld $55 4a5c 0055 ld $55 4a5d 0055 ld $55 * 5 times 4a60 0030 ld $30 4a61 000c ld $0c 4a62 00c3 ld $c3 4a63 0030 ld $30 4a64 000c ld $0c 4a65 00c3 ld $c3 4a66 00e9 ld $e9 4a67 001a ld $1a 4a68 00a4 ld $a4 4a69 0041 ld $41 4a6a 00b0 ld $b0 4a6b 00ae ld $ae 4a6c 0030 ld $30 4a6d 000c ld $0c 4a6e 00c3 ld $c3 4a6f 00b0 ld $b0 4a70 004a ld $4a 4a71 00d3 ld $d3 4a72 0034 ld $34 4a73 004d ld $4d 4a74 00d3 ld $d3 4a75 0034 ld $34 4a76 004d ld $4d 4a77 00d3 ld $d3 4a78 0034 ld $34 4a79 004d ld $4d 4a7a 00d3 ld $d3 4a7b 00b4 ld $b4 4a7c 000a ld $0a 4a7d 00c3 ld $c3 4a7e 0030 ld $30 4a7f 000c ld $0c 4a80 00c3 ld $c3 4a81 0030 ld $30 4a82 000c ld $0c 4a83 0007 ld $07 4a84 0096 ld $96 4a85 0045 ld $45 4a86 0058 ld $58 4a87 0001 ld $01 4a88 000c ld $0c 4a89 00c3 ld $c3 4a8a 0030 ld $30 4a8b 000c ld $0c 4a8c 00c3 ld $c3 4a8d 0030 ld $30 4a8e 00bc ld $bc 4a8f 00bc ld $bc 4a90 00bf ld $bf 4a91 0011 ld $11 4a92 0018 ld $18 4a93 0081 ld $81 4a94 0011 ld $11 4a95 0018 ld $18 4a96 0081 ld $81 4a97 0011 ld $11 4a98 0018 ld $18 4a99 00c1 ld $c1 4a9a 001b ld $1b 4a9b 0004 ld $04 4a9c 0041 ld $41 4a9d 00f0 ld $f0 4a9e 0007 ld $07 4a9f 0030 ld $30 4aa0 000c ld $0c 4aa1 00c3 ld $c3 4aa2 0030 ld $30 4aa3 000c ld $0c 4aa4 00fc ld $fc 4aa5 0030 ld $30 4aa6 000c ld $0c 4aa7 00ff ld $ff 4aa8 003f ld $3f 4aa9 000c ld $0c 4aaa 00c3 ld $c3 4aab 003f ld $3f 4aac 00f0 ld $f0 4aad 00c3 ld $c3 4aae 0030 ld $30 4aaf 000c ld $0c 4ab0 00ff ld $ff 4ab1 00c0 ld $c0 4ab2 000f ld $0f 4ab3 00c3 ld $c3 4ab4 00ff ld $ff 4ab5 000f ld $0f 4ab6 00c3 ld $c3 4ab7 0030 ld $30 4ab8 000c ld $0c 4ab9 00c3 ld $c3 4aba 00b0 ld $b0 4abb 005a ld $5a 4abc 00a9 ld $a9 4abd 00bf ld $bf 4abe 000a ld $0a 4abf 00ab ld $ab 4ac0 0095 ld $95 4ac1 005a ld $5a 4ac2 00a9 ld $a9 4ac3 002a ld $2a 4ac4 001c ld $1c 4ac5 0004 ld $04 4ac6 0041 ld $41 4ac7 0010 ld $10 4ac8 0044 ld $44 4ac9 0011 ld $11 4aca 000c ld $0c 4acb 00c3 ld $c3 4acc 0030 ld $30 4acd 000c ld $0c 4ace 00c3 ld $c3 4acf 00f0 ld $f0 4ad0 00ff ld $ff 4ad1 004b ld $4b 4ad2 00ff ld $ff 4ad3 00fb ld $fb 4ad4 00bf ld $bf 4ad5 00bf ld $bf 4ad6 00f4 ld $f4 4ad7 00ff ld $ff 4ad8 0030 ld $30 4ad9 000c ld $0c 4ada 00c3 ld $c3 4adb 0030 ld $30 4adc 000c ld $0c 4add 00c3 ld $c3 4ade 0030 ld $30 4adf 00ac ld $ac 4ae0 00aa ld $aa 4ae1 00aa ld $aa 4ae2 005a ld $5a 4ae3 00a9 ld $a9 4ae4 00aa ld $aa 4ae5 00aa ld $aa 4ae6 00aa ld $aa * 5 times 4ae9 006a ld $6a 4aea 009a ld $9a 4aeb 00aa ld $aa 4aec 00aa ld $aa 4aed 00aa ld $aa * 5 times 4af0 006a ld $6a 4af1 00a5 ld $a5 4af2 0069 ld $69 4af3 009a ld $9a 4af4 0006 ld $06 4af5 00c3 ld $c3 4af6 0030 ld $30 4af7 000c ld $0c 4af8 00c3 ld $c3 4af9 0030 ld $30 4afa 00ac ld $ac 4afb fe00 bra ac ;+-----------------------------------+ 4afc fcfd bra $4afd ;| | 4afd 1404 ld $04,y ;| Trampoline for page $4a00 lookups | 4afe e068 jmp y,$68 ;| | 4aff c218 st [$18] ;+-----------------------------------+ 4b00 00fe ld $fe 4b01 0030 ld $30 4b02 000c ld $0c 4b03 00c3 ld $c3 4b04 0030 ld $30 4b05 00ac ld $ac 4b06 00fe ld $fe 4b07 0030 ld $30 4b08 000c ld $0c 4b09 00c3 ld $c3 4b0a 00b0 ld $b0 4b0b 00fa ld $fa 4b0c 00c3 ld $c3 4b0d 0030 ld $30 4b0e 000c ld $0c 4b0f 00c3 ld $c3 4b10 0030 ld $30 4b11 000c ld $0c 4b12 00c3 ld $c3 4b13 0030 ld $30 4b14 000c ld $0c 4b15 00c3 ld $c3 4b16 0030 ld $30 4b17 000c ld $0c 4b18 0003 ld $03 4b19 0000 ld $00 4b1a 0000 ld $00 4b1b 0000 ld $00 * 11 times 4b24 00c3 ld $c3 4b25 0030 ld $30 4b26 000c ld $0c 4b27 00c3 ld $c3 4b28 0030 ld $30 4b29 000c ld $0c 4b2a 00c3 ld $c3 4b2b 00eb ld $eb 4b2c 001a ld $1a 4b2d 0004 ld $04 4b2e 0069 ld $69 4b2f 00b0 ld $b0 4b30 00a6 ld $a6 4b31 0030 ld $30 4b32 000c ld $0c 4b33 00c3 ld $c3 4b34 0070 ld $70 4b35 0005 ld $05 4b36 00c3 ld $c3 4b37 00fe ld $fe 4b38 00ef ld $ef 4b39 00ff ld $ff 4b3a 00fe ld $fe 4b3b 00ef ld $ef 4b3c 00ff ld $ff 4b3d 00fe ld $fe 4b3e 00ef ld $ef 4b3f 00c3 ld $c3 4b40 0070 ld $70 4b41 0005 ld $05 4b42 00c3 ld $c3 4b43 0030 ld $30 4b44 000c ld $0c 4b45 00c3 ld $c3 4b46 0030 ld $30 4b47 000c ld $0c 4b48 0007 ld $07 4b49 0084 ld $84 4b4a 0065 ld $65 4b4b 0059 ld $59 4b4c 0001 ld $01 4b4d 000c ld $0c 4b4e 00c3 ld $c3 4b4f 0030 ld $30 4b50 000c ld $0c 4b51 00c3 ld $c3 4b52 0030 ld $30 4b53 006c ld $6c 4b54 00fc ld $fc 4b55 00ef ld $ef 4b56 00ff ld $ff 4b57 00fe ld $fe 4b58 00ef ld $ef 4b59 00ff ld $ff 4b5a 00fe ld $fe 4b5b 00ef ld $ef 4b5c 00ff ld $ff 4b5d 00fe ld $fe 4b5e 00ef ld $ef 4b5f 00ff ld $ff 4b60 00fe ld $fe 4b61 00ef ld $ef 4b62 00ff ld $ff 4b63 0006 ld $06 4b64 0030 ld $30 4b65 000c ld $0c 4b66 00c3 ld $c3 4b67 000c ld $0c 4b68 00f3 ld $f3 4b69 0003 ld $03 4b6a 000c ld $0c 4b6b 00c3 ld $c3 4b6c 0030 ld $30 4b6d 000c ld $0c 4b6e 00c3 ld $c3 4b6f 0030 ld $30 4b70 00cc ld $cc 4b71 00ff ld $ff 4b72 0033 ld $33 4b73 000c ld $0c 4b74 00c3 ld $c3 4b75 0000 ld $00 4b76 003f ld $3f 4b77 00c3 ld $c3 4b78 0030 ld $30 4b79 000c ld $0c 4b7a 00c3 ld $c3 4b7b 0030 ld $30 4b7c 000c ld $0c 4b7d 000c ld $0c 4b7e 00c3 ld $c3 4b7f 0070 ld $70 4b80 00a5 ld $a5 4b81 00fe ld $fe 4b82 00ea ld $ea 4b83 000f ld $0f 4b84 00ab ld $ab 4b85 006a ld $6a 4b86 00a5 ld $a5 4b87 0056 ld $56 4b88 002a ld $2a 4b89 001c ld $1c 4b8a 0058 ld $58 4b8b 0081 ld $81 4b8c 0015 ld $15 4b8d 0058 ld $58 4b8e 0011 ld $11 4b8f 000c ld $0c 4b90 00c3 ld $c3 4b91 0030 ld $30 4b92 000c ld $0c 4b93 00c3 ld $c3 4b94 00f0 ld $f0 4b95 000f ld $0f 4b96 00c3 ld $c3 4b97 0052 ld $52 4b98 0024 ld $24 4b99 0005 ld $05 4b9a 0012 ld $12 4b9b 000c ld $0c 4b9c 00ff ld $ff 4b9d 0030 ld $30 4b9e 000c ld $0c 4b9f 00c3 ld $c3 4ba0 0030 ld $30 4ba1 000c ld $0c 4ba2 00c3 ld $c3 4ba3 0030 ld $30 4ba4 005c ld $5c 4ba5 0055 ld $55 4ba6 0055 ld $55 4ba7 0055 ld $55 4ba8 0055 ld $55 4ba9 0015 ld $15 4baa 0055 ld $55 4bab 00a9 ld $a9 4bac 0095 ld $95 4bad 00aa ld $aa 4bae 00aa ld $aa 4baf 00aa ld $aa 4bb0 001a ld $1a 4bb1 0054 ld $54 4bb2 0041 ld $41 4bb3 0055 ld $55 4bb4 0055 ld $55 4bb5 0055 ld $55 4bb6 0055 ld $55 4bb7 0005 ld $05 4bb8 0095 ld $95 4bb9 000a ld $0a 4bba 00c3 ld $c3 4bbb 0030 ld $30 4bbc 00cc ld $cc 4bbd 0030 ld $30 4bbe 008c ld $8c 4bbf 00fa ld $fa 4bc0 00ff ld $ff 4bc1 003f ld $3f 4bc2 00c3 ld $c3 4bc3 0030 ld $30 4bc4 008c ld $8c 4bc5 00fa ld $fa 4bc6 00ff ld $ff 4bc7 003f ld $3f 4bc8 00c3 ld $c3 4bc9 0030 ld $30 4bca 00ea ld $ea 4bcb 00ff ld $ff 4bcc 00ff ld $ff 4bcd 000c ld $0c 4bce 00c3 ld $c3 4bcf 00c0 ld $c0 4bd0 0030 ld $30 4bd1 000c ld $0c 4bd2 00c3 ld $c3 4bd3 0030 ld $30 4bd4 000c ld $0c 4bd5 00c3 ld $c3 4bd6 0030 ld $30 4bd7 000c ld $0c 4bd8 00c3 ld $c3 4bd9 0030 ld $30 4bda 0000 ld $00 4bdb 0000 ld $00 4bdc 0000 ld $00 * 8 times 4be2 0015 ld $15 4be3 000c ld $0c 4be4 00c3 ld $c3 4be5 0030 ld $30 4be6 000c ld $0c 4be7 00c3 ld $c3 4be8 0030 ld $30 4be9 000c ld $0c 4bea 00c3 ld $c3 4beb 00e9 ld $e9 4bec 001a ld $1a 4bed 00a4 ld $a4 4bee 0041 ld $41 4bef 00b0 ld $b0 4bf0 00ae ld $ae 4bf1 0030 ld $30 4bf2 000c ld $0c 4bf3 00c3 ld $c3 4bf4 0070 ld $70 4bf5 00f5 ld $f5 4bf6 00fb ld $fb 4bf7 00bf ld $bf 4bf8 00af ld $af 4bf9 00aa ld $aa 4bfa 00aa ld $aa 4bfb fe00 bra ac ;+-----------------------------------+ 4bfc fcfd bra $4bfd ;| | 4bfd 1404 ld $04,y ;| Trampoline for page $4b00 lookups | 4bfe e068 jmp y,$68 ;| | 4bff c218 st [$18] ;+-----------------------------------+ 4c00 00aa ld $aa 4c01 00aa ld $aa 4c02 00aa ld $aa 4c03 00fa ld $fa 4c04 00fb ld $fb 4c05 007f ld $7f 4c06 0005 ld $05 4c07 00c3 ld $c3 4c08 0030 ld $30 4c09 000c ld $0c 4c0a 00c3 ld $c3 4c0b 0030 ld $30 4c0c 000c ld $0c 4c0d 0007 ld $07 4c0e 0084 ld $84 4c0f 0065 ld $65 4c10 0059 ld $59 4c11 0001 ld $01 4c12 000c ld $0c 4c13 00c3 ld $c3 4c14 0030 ld $30 4c15 000c ld $0c 4c16 00c3 ld $c3 4c17 0030 ld $30 4c18 00bc ld $bc 4c19 00bc ld $bc 4c1a 0000 ld $00 4c1b 0000 ld $00 4c1c 0000 ld $00 * 13 times 4c27 00f0 ld $f0 4c28 0007 ld $07 4c29 0030 ld $30 4c2a 000c ld $0c 4c2b 0033 ld $33 4c2c 0008 ld $08 4c2d 0082 ld $82 4c2e 0020 ld $20 4c2f 0008 ld $08 4c30 0082 ld $82 4c31 0020 ld $20 4c32 0008 ld $08 4c33 0082 ld $82 4c34 0020 ld $20 4c35 0008 ld $08 4c36 0082 ld $82 4c37 0020 ld $20 4c38 0008 ld $08 4c39 0082 ld $82 4c3a 0020 ld $20 4c3b 0008 ld $08 4c3c 0082 ld $82 4c3d 0020 ld $20 4c3e 0008 ld $08 4c3f 0082 ld $82 4c40 0020 ld $20 4c41 0008 ld $08 4c42 0003 ld $03 4c43 00c3 ld $c3 4c44 00b0 ld $b0 4c45 005a ld $5a 4c46 00a9 ld $a9 4c47 00bf ld $bf 4c48 000a ld $0a 4c49 00ab ld $ab 4c4a 00aa ld $aa 4c4b 00aa ld $aa 4c4c 00aa ld $aa 4c4d 002a ld $2a 4c4e 001c ld $1c 4c4f 0004 ld $04 4c50 0041 ld $41 4c51 0010 ld $10 4c52 0044 ld $44 4c53 0011 ld $11 4c54 000c ld $0c 4c55 00c3 ld $c3 4c56 0030 ld $30 4c57 000c ld $0c 4c58 00ff ld $ff 4c59 00ff ld $ff 4c5a 00ff ld $ff * 11 times 4c63 000f ld $0f 4c64 00c3 ld $c3 4c65 0030 ld $30 4c66 000c ld $0c 4c67 00c3 ld $c3 4c68 0030 ld $30 4c69 005c ld $5c 4c6a 0014 ld $14 4c6b 0045 ld $45 4c6c 0051 ld $51 4c6d 0014 ld $14 4c6e 0045 ld $45 4c6f 0051 ld $51 4c70 0014 ld $14 4c71 0045 ld $45 4c72 0051 ld $51 4c73 0014 ld $14 4c74 0045 ld $45 4c75 0051 ld $51 4c76 0014 ld $14 4c77 0045 ld $45 4c78 0051 ld $51 4c79 0014 ld $14 4c7a 0045 ld $45 4c7b 0051 ld $51 4c7c 0014 ld $14 4c7d 0045 ld $45 4c7e 0001 ld $01 4c7f 00c3 ld $c3 4c80 0030 ld $30 4c81 0083 ld $83 4c82 0020 ld $20 4c83 0008 ld $08 4c84 0082 ld $82 4c85 0020 ld $20 4c86 0008 ld $08 4c87 0082 ld $82 4c88 0020 ld $20 4c89 0008 ld $08 4c8a 0082 ld $82 4c8b 0020 ld $20 4c8c 0008 ld $08 4c8d 0082 ld $82 4c8e 0020 ld $20 4c8f 0008 ld $08 4c90 0082 ld $82 4c91 0020 ld $20 4c92 0008 ld $08 4c93 0082 ld $82 4c94 0030 ld $30 4c95 0030 ld $30 4c96 000c ld $0c 4c97 00c3 ld $c3 4c98 0030 ld $30 4c99 000c ld $0c 4c9a 00c3 ld $c3 4c9b 0030 ld $30 4c9c 000c ld $0c 4c9d 00c3 ld $c3 4c9e 0030 ld $30 4c9f 000c ld $0c 4ca0 0003 ld $03 4ca1 0000 ld $00 4ca2 0000 ld $00 4ca3 0000 ld $00 * 5 times 4ca6 00c3 ld $c3 4ca7 0015 ld $15 4ca8 000c ld $0c 4ca9 00c3 ld $c3 4caa 0030 ld $30 4cab 000c ld $0c 4cac 00c3 ld $c3 4cad 0030 ld $30 4cae 000c ld $0c 4caf 00c3 ld $c3 4cb0 00eb ld $eb 4cb1 001a ld $1a 4cb2 0004 ld $04 ;End of Apps/Racer/Horizon-256x16.rgb, size 3132 ;+-----------------------------------+ ;| Apps/Racer/Racer_v2.gcl | ;+-----------------------------------+ 4cb3 dc7a st $7a,[y,x++] ;'z' 4cb4 dc69 st $69,[y,x++] ;'i' 4cb5 dc70 st $70,[y,x++] ;'p' 4cb6 dc70 st $70,[y,x++] ;'p' 4cb7 dc65 st $65,[y,x++] ;'e' 4cb8 dc64 st $64,[y,x++] ;'d' 4cb9 dc52 st $52,[y,x++] ;'R' 4cba dc61 st $61,[y,x++] ;'a' 4cbb 0077 ld $77 4cbc c218 st [$18] 4cbd 0040 ld $40 4cbe 14fb ld $fb,y 4cbf e0ee jmp y,$ee 4cc0 c219 st [$19] Racer: 4cc1 0002 ld $02 ;| RAM segment address (high byte first) 4cc2 0000 ld $00 ;| 4cc3 00f7 ld $f7 ;| Length (1..256) 4cc4 001a ld $1a ;0200 LD 4cc5 0021 ld $21 4cc6 00e6 ld $e6 ;0202 SUBI 4cc7 0020 ld $20 4cc8 0035 ld $35 ;0204 BCC 4cc9 0053 ld $53 ;0205 GE 4cca 000b ld $0b 4ccb 0021 ld $21 ;0207 LDW 4ccc 000e ld $0e ;0207 '_frameCount' 4ccd 00f3 ld $f3 ;0209 DOKE 4cce 0017 ld $17 ;0209 '_vPCH' 4ccf 0090 ld $90 ;020b BRA 4cd0 0005 ld $05 4cd1 00cd ld $cd ;020d DEF 4cd2 0057 ld $57 4cd3 00e6 ld $e6 ;020f SUBI 4cd4 0052 ld $52 4cd5 0035 ld $35 ;0211 BCC 4cd6 0053 ld $53 ;0212 GE 4cd7 001b ld $1b 4cd8 00e3 ld $e3 ;0214 ADDI 4cd9 0032 ld $32 4cda 002b ld $2b ;0216 STW 4cdb 0030 ld $30 ;0216 'i' 4cdc 0011 ld $11 ;0218 LDWI 4cdd 0000 ld $00 4cde 0007 ld $07 4cdf 0090 ld $90 ;021b BRA 4ce0 0020 ld $20 4ce1 002b ld $2b ;021d STW 4ce2 0030 ld $30 ;021d 'i' 4ce3 0011 ld $11 ;021f LDWI 4ce4 0000 ld $00 4ce5 0008 ld $08 4ce6 002b ld $2b ;0222 STW 4ce7 0032 ld $32 ;0222 'fontData' 4ce8 0021 ld $21 ;0224 LDW 4ce9 0030 ld $30 ;0224 'i' 4cea 00e9 ld $e9 ;0226 LSLW 4ceb 00e9 ld $e9 ;0227 LSLW 4cec 0099 ld $99 ;0228 ADDW 4ced 0030 ld $30 ;0228 'i' 4cee 0099 ld $99 ;022a ADDW 4cef 0032 ld $32 ;022a 'fontData' 4cf0 002b ld $2b ;022c STW 4cf1 0032 ld $32 ;022c 'fontData' 4cf2 0021 ld $21 ;022e LDW 4cf3 0034 ld $34 ;022e 'BgColor' 4cf4 005e ld $5e ;0230 ST 4cf5 0024 ld $24 4cf6 0021 ld $21 ;0232 LDW 4cf7 0036 ld $36 ;0232 'Color' 4cf8 005e ld $5e ;0234 ST 4cf9 0025 ld $25 4cfa 0021 ld $21 ;0236 LDW 4cfb fe00 bra ac ;+-----------------------------------+ 4cfc fcfd bra $4cfd ;| | 4cfd 1404 ld $04,y ;| Trampoline for page $4c00 lookups | 4cfe e068 jmp y,$68 ;| | 4cff c218 st [$18] ;+-----------------------------------+ 4d00 0038 ld $38 ;0236 'Pos' 4d01 002b ld $2b ;0238 STW 4d02 0028 ld $28 4d03 0011 ld $11 ;023a LDWI 4d04 00e1 ld $e1 4d05 0004 ld $04 4d06 002b ld $2b ;023d STW 4d07 0022 ld $22 4d08 0059 ld $59 ;023f LDI 4d09 00fb ld $fb 4d0a 002b ld $2b ;0241 STW 4d0b 0030 ld $30 ;0241 'i' 4d0c 0021 ld $21 ;0243 LDW 4d0d 0032 ld $32 ;0243 'fontData' 4d0e 007f ld $7f ;0245 LUP 4d0f 0000 ld $00 4d10 0093 ld $93 ;0247 INC 4d11 0032 ld $32 ;0247 'fontData' 4d12 005e ld $5e ;0249 ST 4d13 0026 ld $26 4d14 00b4 ld $b4 ;024b SYS 4d15 00cb ld $cb 4d16 0093 ld $93 ;024d INC 4d17 0028 ld $28 4d18 0093 ld $93 ;024f INC 4d19 0030 ld $30 ;024f 'i' 4d1a 0021 ld $21 ;0251 LDW 4d1b 0030 ld $30 ;0251 'i' 4d1c 0035 ld $35 ;0253 BCC 4d1d 0072 ld $72 ;0254 NE 4d1e 0041 ld $41 4d1f 0021 ld $21 ;0256 LDW 4d20 0038 ld $38 ;0256 'Pos' 4d21 00ff ld $ff ;0258 RET 4d22 002b ld $2b ;0259 STW 4d23 003a ld $3a ;0259 'QPrintChar' 4d24 00cd ld $cd ;025b DEF 4d25 00f0 ld $f0 4d26 001a ld $1a ;025d LD 4d27 000e ld $0e 4d28 00b8 ld $b8 ;025f SUBW 4d29 003c ld $3c ;025f 'LastFrame' 4d2a 0082 ld $82 ;0261 ANDI 4d2b 00ff ld $ff 4d2c 005e ld $5e ;0263 ST 4d2d 002b ld $2b 4d2e 0099 ld $99 ;0265 ADDW 4d2f 003e ld $3e ;0265 'Time' 4d30 0035 ld $35 ;0267 BCC 4d31 0053 ld $53 ;0268 GE 4d32 006b ld $6b 4d33 0011 ld $11 ;026a LDWI 4d34 00ff ld $ff 4d35 007f ld $7f 4d36 002b ld $2b ;026d STW 4d37 003e ld $3e ;026d 'Time' 4d38 001a ld $1a ;026f LD 4d39 000e ld $0e 4d3a 002b ld $2b ;0271 STW 4d3b 003c ld $3c ;0271 'LastFrame' 4d3c 001a ld $1a ;0273 LD 4d3d 0041 ld $41 ;0273 'Speed'+1 4d3e 0035 ld $35 ;0275 BCC 4d3f 0056 ld $56 ;0276 LE 4d40 008a ld $8a 4d41 002b ld $2b ;0278 STW 4d42 0030 ld $30 ;0278 'i' 4d43 0021 ld $21 ;027a LDW 4d44 0042 ld $42 ;027a 'CarX' 4d45 00b8 ld $b8 ;027c SUBW 4d46 0044 ld $44 ;027c 'DriftX' 4d47 002b ld $2b ;027e STW 4d48 0042 ld $42 ;027e 'CarX' 4d49 0021 ld $21 ;0280 LDW 4d4a 0046 ld $46 ;0280 'HorizonX' 4d4b 0099 ld $99 ;0282 ADDW 4d4c 0048 ld $48 ;0282 'HorizonDX' 4d4d 002b ld $2b ;0284 STW 4d4e 0046 ld $46 ;0284 'HorizonX' 4d4f 0021 ld $21 ;0286 LDW 4d50 0030 ld $30 ;0286 'i' 4d51 00e6 ld $e6 ;0288 SUBI 4d52 0001 ld $01 4d53 0090 ld $90 ;028a BRA 4d54 0073 ld $73 4d55 0059 ld $59 ;028c LDI 4d56 0000 ld $00 4d57 002b ld $2b ;028e STW 4d58 004a ld $4a ;028e 'Steer' 4d59 001a ld $1a ;0290 LD 4d5a 0011 ld $11 4d5b 0082 ld $82 ;0292 ANDI 4d5c 0001 ld $01 4d5d 0035 ld $35 ;0294 BCC 4d5e 0072 ld $72 ;0295 NE 4d5f 00a0 ld $a0 4d60 0011 ld $11 ;0297 LDWI 4d61 0000 ld $00 4d62 0002 ld $02 4d63 0099 ld $99 ;029a ADDW 4d64 0042 ld $42 ;029a 'CarX' 4d65 002b ld $2b ;029c STW 4d66 0042 ld $42 ;029c 'CarX' 4d67 0059 ld $59 ;029e LDI 4d68 0001 ld $01 4d69 002b ld $2b ;02a0 STW 4d6a 004a ld $4a ;02a0 'Steer' 4d6b 001a ld $1a ;02a2 LD 4d6c 0011 ld $11 4d6d 0082 ld $82 ;02a4 ANDI 4d6e 0002 ld $02 4d6f 0035 ld $35 ;02a6 BCC 4d70 0072 ld $72 ;02a7 NE 4d71 00b3 ld $b3 4d72 0011 ld $11 ;02a9 LDWI 4d73 0000 ld $00 4d74 00fe ld $fe 4d75 0099 ld $99 ;02ac ADDW 4d76 0042 ld $42 ;02ac 'CarX' 4d77 002b ld $2b ;02ae STW 4d78 0042 ld $42 ;02ae 'CarX' 4d79 0011 ld $11 ;02b0 LDWI 4d7a 00ff ld $ff 4d7b 00ff ld $ff 4d7c 002b ld $2b ;02b3 STW 4d7d 004a ld $4a ;02b3 'Steer' 4d7e 001a ld $1a ;02b5 LD 4d7f 0011 ld $11 4d80 0082 ld $82 ;02b7 ANDI 4d81 0080 ld $80 4d82 0035 ld $35 ;02b9 BCC 4d83 0072 ld $72 ;02ba NE 4d84 00cf ld $cf 4d85 0021 ld $21 ;02bc LDW 4d86 0040 ld $40 ;02bc 'Speed' 4d87 00e3 ld $e3 ;02be ADDI 4d88 0010 ld $10 4d89 002b ld $2b ;02c0 STW 4d8a 0040 ld $40 ;02c0 'Speed' 4d8b 0011 ld $11 ;02c2 LDWI 4d8c 00ff ld $ff 4d8d 0005 ld $05 4d8e 00b8 ld $b8 ;02c5 SUBW 4d8f 0040 ld $40 ;02c5 'Speed' 4d90 0035 ld $35 ;02c7 BCC 4d91 0053 ld $53 ;02c8 GE 4d92 00cd ld $cd 4d93 0011 ld $11 ;02ca LDWI 4d94 00ff ld $ff 4d95 0005 ld $05 4d96 002b ld $2b ;02cd STW 4d97 0040 ld $40 ;02cd 'Speed' 4d98 0090 ld $90 ;02cf BRA 4d99 00dd ld $dd 4d9a 0011 ld $11 ;02d1 LDWI 4d9b 00f8 ld $f8 4d9c 00fe ld $fe 4d9d 0099 ld $99 ;02d4 ADDW 4d9e 0040 ld $40 ;02d4 'Speed' 4d9f 0035 ld $35 ;02d6 BCC 4da0 0050 ld $50 ;02d7 LT 4da1 00dd ld $dd 4da2 0021 ld $21 ;02d9 LDW 4da3 0040 ld $40 ;02d9 'Speed' 4da4 00e6 ld $e6 ;02db SUBI 4da5 0008 ld $08 4da6 002b ld $2b ;02dd STW 4da7 0040 ld $40 ;02dd 'Speed' 4da8 001a ld $1a ;02df LD 4da9 0011 ld $11 4daa 0082 ld $82 ;02e1 ANDI 4dab 0040 ld $40 4dac 0035 ld $35 ;02e3 BCC 4dad 0072 ld $72 ;02e4 NE 4dae 00ef ld $ef 4daf 0021 ld $21 ;02e6 LDW 4db0 0040 ld $40 ;02e6 'Speed' 4db1 00e6 ld $e6 ;02e8 SUBI 4db2 0040 ld $40 4db3 0035 ld $35 ;02ea BCC 4db4 0053 ld $53 ;02eb GE 4db5 00ed ld $ed 4db6 0059 ld $59 ;02ed LDI 4db7 0000 ld $00 4db8 002b ld $2b ;02ef STW 4db9 0040 ld $40 ;02ef 'Speed' 4dba 00ff ld $ff ;02f1 RET 4dbb 002b ld $2b ;02f2 STW 4dbc 004c ld $4c ;02f2 'ControlRaceCar' 4dbd 0093 ld $93 ;02f4 INC 4dbe 001b ld $1b ;02f4 '_vLR'+1 4dbf 00ff ld $ff ;02f6 RET 4dc0 0003 ld $03 ;| RAM segment address (high byte first) 4dc1 0000 ld $00 ;| 4dc2 00e1 ld $e1 ;| Length (1..256) 4dc3 00cd ld $cd ;0300 DEF 4dc4 0009 ld $09 4dc5 0047 ld $47 ;0302 'G' 4dc6 0069 ld $69 ;0303 'i' 4dc7 0067 ld $67 ;0304 'g' 4dc8 0061 ld $61 ;0305 'a' 4dc9 0074 ld $74 ;0306 't' 4dca 0072 ld $72 ;0307 'r' 4dcb 006f ld $6f ;0308 'o' 4dcc 006e ld $6e ;0309 'n' 4dcd 0000 ld $00 ;030a 0 4dce 002b ld $2b ;030b STW 4dcf 004e ld $4e ;030b 'GigatronText' 4dd0 00cd ld $cd ;030d DEF 4dd1 001d ld $1d 4dd2 001a ld $1a ;030f LD 4dd3 000e ld $0e 4dd4 0099 ld $99 ;0311 ADDW 4dd5 0050 ld $50 ;0311 'Delay' 4dd6 0082 ld $82 ;0313 ANDI 4dd7 00ff ld $ff 4dd8 002b ld $2b ;0315 STW 4dd9 0052 ld $52 ;0315 'tmp' 4dda 001a ld $1a ;0317 LD 4ddb 000e ld $0e 4ddc 00b8 ld $b8 ;0319 SUBW 4ddd 0052 ld $52 ;0319 'tmp' 4dde 0035 ld $35 ;031b BCC 4ddf 0072 ld $72 ;031c NE 4de0 0015 ld $15 4de1 00ff ld $ff ;031e RET 4de2 002b ld $2b ;031f STW 4de3 0054 ld $54 ;031f 'Wait' 4de4 00cd ld $cd ;0321 DEF 4de5 00a1 ld $a1 4de6 0021 ld $21 ;0323 LDW 4de7 0056 ld $56 ;0323 'Video' 4de8 00ad ld $ad ;0325 PEEK 4de9 0082 ld $82 ;0326 ANDI 4dea 00fe ld $fe 4deb 005e ld $5e ;0328 ST 4dec 0059 ld $59 ;0328 'p'+1 4ded 0088 ld $88 ;032a ORI 4dee 0001 ld $01 4def 005e ld $5e ;032c ST 4df0 005b ld $5b ;032c 'q'+1 4df1 0093 ld $93 ;032e INC 4df2 0056 ld $56 ;032e 'Video' 4df3 0059 ld $59 ;0330 LDI 4df4 0000 ld $00 4df5 005e ld $5e ;0332 ST 4df6 0058 ld $58 ;0332 'p' 4df7 005e ld $5e ;0334 ST 4df8 005a ld $5a ;0334 'q' 4df9 0021 ld $21 ;0336 LDW 4dfa 0058 ld $58 ;0336 'p' 4dfb fe00 bra ac ;+-----------------------------------+ 4dfc fcfd bra $4dfd ;| | 4dfd 1404 ld $04,y ;| Trampoline for page $4d00 lookups | 4dfe e068 jmp y,$68 ;| | 4dff c218 st [$18] ;+-----------------------------------+ 4e00 00ad ld $ad ;0338 PEEK 4e01 002b ld $2b ;0339 STW 4e02 0030 ld $30 ;0339 'i' 4e03 0021 ld $21 ;033b LDW 4e04 005a ld $5a ;033b 'q' 4e05 00ad ld $ad ;033d PEEK 4e06 00b8 ld $b8 ;033e SUBW 4e07 0030 ld $30 ;033e 'i' 4e08 002b ld $2b ;0340 STW 4e09 0030 ld $30 ;0340 'i' 4e0a 0021 ld $21 ;0342 LDW 4e0b 0058 ld $58 ;0342 'p' 4e0c 00ad ld $ad ;0344 PEEK 4e0d 005e ld $5e ;0345 ST 4e0e 0058 ld $58 ;0345 'p' 4e0f 005e ld $5e ;0347 ST 4e10 005a ld $5a ;0347 'q' 4e11 0059 ld $59 ;0349 LDI 4e12 0015 ld $15 4e13 00f0 ld $f0 ;034b POKE 4e14 0058 ld $58 ;034b 'p' 4e15 00f0 ld $f0 ;034d POKE 4e16 005a ld $5a ;034d 'q' 4e17 0093 ld $93 ;034f INC 4e18 0058 ld $58 ;034f 'p' 4e19 0093 ld $93 ;0351 INC 4e1a 005a ld $5a ;0351 'q' 4e1b 0021 ld $21 ;0353 LDW 4e1c 0030 ld $30 ;0353 'i' 4e1d 00e6 ld $e6 ;0355 SUBI 4e1e 0001 ld $01 4e1f 002b ld $2b ;0357 STW 4e20 0030 ld $30 ;0357 'i' 4e21 0035 ld $35 ;0359 BCC 4e22 004d ld $4d ;035a GT 4e23 0047 ld $47 4e24 0021 ld $21 ;035c LDW 4e25 005c ld $5c ;035c 'Sprite' 4e26 002b ld $2b ;035e STW 4e27 005e ld $5e ;035e 's' 4e28 0059 ld $59 ;0360 LDI 4e29 0000 ld $00 4e2a 005e ld $5e ;0362 ST 4e2b 0058 ld $58 ;0362 'p' 4e2c 0021 ld $21 ;0364 LDW 4e2d 0056 ld $56 ;0364 'Video' 4e2e 00ad ld $ad ;0366 PEEK 4e2f 0099 ld $99 ;0367 ADDW 4e30 0060 ld $60 ;0367 'X' 4e31 002b ld $2b ;0369 STW 4e32 0060 ld $60 ;0369 'X' 4e33 0021 ld $21 ;036b LDW 4e34 005e ld $5e ;036b 's' 4e35 00ad ld $ad ;036d PEEK 4e36 0099 ld $99 ;036e ADDW 4e37 0060 ld $60 ;036e 'X' 4e38 00f0 ld $f0 ;0370 POKE 4e39 0058 ld $58 ;0370 'p' 4e3a 005e ld $5e ;0372 ST 4e3b 0058 ld $58 ;0372 'p' 4e3c 005e ld $5e ;0374 ST 4e3d 005a ld $5a ;0374 'q' 4e3e 0093 ld $93 ;0376 INC 4e3f 005e ld $5e ;0376 's' 4e40 0021 ld $21 ;0378 LDW 4e41 0058 ld $58 ;0378 'p' 4e42 00ad ld $ad ;037a PEEK 4e43 008c ld $8c ;037b XORI 4e44 0015 ld $15 4e45 0099 ld $99 ;037d ADDW 4e46 0062 ld $62 ;037d 'Collision' 4e47 002b ld $2b ;037f STW 4e48 0062 ld $62 ;037f 'Collision' 4e49 0021 ld $21 ;0381 LDW 4e4a 005e ld $5e ;0381 's' 4e4b 00ad ld $ad ;0383 PEEK 4e4c 00f0 ld $f0 ;0384 POKE 4e4d 0058 ld $58 ;0384 'p' 4e4e 0093 ld $93 ;0386 INC 4e4f 0058 ld $58 ;0386 'p' 4e50 00f0 ld $f0 ;0388 POKE 4e51 005a ld $5a ;0388 'q' 4e52 0093 ld $93 ;038a INC 4e53 005a ld $5a ;038a 'q' 4e54 0093 ld $93 ;038c INC 4e55 005e ld $5e ;038c 's' 4e56 0021 ld $21 ;038e LDW 4e57 005e ld $5e ;038e 's' 4e58 00ad ld $ad ;0390 PEEK 4e59 0035 ld $35 ;0391 BCC 4e5a 0072 ld $72 ;0392 NE 4e5b 0076 ld $76 4e5c 0059 ld $59 ;0394 LDI 4e5d 0000 ld $00 4e5e 005e ld $5e ;0396 ST 4e5f 005a ld $5a ;0396 'q' 4e60 001a ld $1a ;0398 LD 4e61 0058 ld $58 ;0398 'p' 4e62 00f0 ld $f0 ;039a POKE 4e63 005a ld $5a ;039a 'q' 4e64 0021 ld $21 ;039c LDW 4e65 0056 ld $56 ;039c 'Video' 4e66 00e3 ld $e3 ;039e ADDI 4e67 0003 ld $03 4e68 002b ld $2b ;03a0 STW 4e69 0056 ld $56 ;03a0 'Video' 4e6a 00ff ld $ff ;03a2 RET 4e6b 002b ld $2b ;03a3 STW 4e6c 0064 ld $64 ;03a3 'DrawPixels' 4e6d 00cd ld $cd ;03a5 DEF 4e6e 00da ld $da 4e6f 0011 ld $11 ;03a7 LDWI 4e70 00fd ld $fd 4e71 0001 ld $01 4e72 002b ld $2b ;03aa STW 4e73 0058 ld $58 ;03aa 'p' 4e74 0021 ld $21 ;03ac LDW 4e75 0040 ld $40 ;03ac 'Speed' 4e76 0099 ld $99 ;03ae ADDW 4e77 0040 ld $40 ;03ae 'Speed' 4e78 001a ld $1a ;03b0 LD 4e79 0019 ld $19 4e7a 00f0 ld $f0 ;03b2 POKE 4e7b 0058 ld $58 ;03b2 'p' 4e7c 0093 ld $93 ;03b4 INC 4e7d 0059 ld $59 ;03b4 'p'+1 4e7e 00f0 ld $f0 ;03b6 POKE 4e7f 0058 ld $58 ;03b6 'p' 4e80 0093 ld $93 ;03b8 INC 4e81 0059 ld $59 ;03b8 'p'+1 4e82 00f0 ld $f0 ;03ba POKE 4e83 0058 ld $58 ;03ba 'p' 4e84 0093 ld $93 ;03bc INC 4e85 0059 ld $59 ;03bc 'p'+1 4e86 00f0 ld $f0 ;03be POKE 4e87 0058 ld $58 ;03be 'p' 4e88 0011 ld $11 ;03c0 LDWI 4e89 00fc ld $fc 4e8a 0001 ld $01 4e8b 002b ld $2b ;03c3 STW 4e8c 0058 ld $58 ;03c3 'p' 4e8d 0021 ld $21 ;03c5 LDW 4e8e 0040 ld $40 ;03c5 'Speed' 4e8f 0082 ld $82 ;03c7 ANDI 4e90 007f ld $7f 4e91 00f0 ld $f0 ;03c9 POKE 4e92 0058 ld $58 ;03c9 'p' 4e93 0093 ld $93 ;03cb INC 4e94 0059 ld $59 ;03cb 'p'+1 4e95 00f0 ld $f0 ;03cd POKE 4e96 0058 ld $58 ;03cd 'p' 4e97 0093 ld $93 ;03cf INC 4e98 0059 ld $59 ;03cf 'p'+1 4e99 00f0 ld $f0 ;03d1 POKE 4e9a 0058 ld $58 ;03d1 'p' 4e9b 0093 ld $93 ;03d3 INC 4e9c 0059 ld $59 ;03d3 'p'+1 4e9d 00f0 ld $f0 ;03d5 POKE 4e9e 0058 ld $58 ;03d5 'p' 4e9f 0059 ld $59 ;03d7 LDI 4ea0 000a ld $0a 4ea1 005e ld $5e ;03d9 ST 4ea2 002c ld $2c 4ea3 00ff ld $ff ;03db RET 4ea4 002b ld $2b ;03dc STW 4ea5 0066 ld $66 ;03dc 'PlayEngineSound' 4ea6 0093 ld $93 ;03de INC 4ea7 001b ld $1b ;03de '_vLR'+1 4ea8 00ff ld $ff ;03e0 RET 4ea9 0004 ld $04 ;| RAM segment address (high byte first) 4eaa 0000 ld $00 ;| 4eab 00ef ld $ef ;| Length (1..256) 4eac 00cd ld $cd ;0400 DEF 4ead 003e ld $3e 4eae 0075 ld $75 ;0402 PUSH 4eaf 0011 ld $11 ;0403 LDWI 4eb0 0080 ld $80 4eb1 0020 ld $20 4eb2 002b ld $2b ;0406 STW 4eb3 0038 ld $38 ;0406 'Pos' 4eb4 0011 ld $11 ;0408 LDWI 4eb5 0003 ld $03 4eb6 000b ld $0b 4eb7 002b ld $2b ;040b STW 4eb8 0022 ld $22 4eb9 0059 ld $59 ;040d LDI 4eba 0000 ld $00 4ebb 002b ld $2b ;040f STW 4ebc 0068 ld $68 ;040f 'Width' 4ebd 0021 ld $21 ;0411 LDW 4ebe 0068 ld $68 ;0411 'Width' 4ebf 00e3 ld $e3 ;0413 ADDI 4ec0 0001 ld $01 4ec1 002b ld $2b ;0415 STW 4ec2 0068 ld $68 ;0415 'Width' 4ec3 0059 ld $59 ;0417 LDI 4ec4 003f ld $3f 4ec5 002b ld $2b ;0419 STW 4ec6 006a ld $6a ;0419 'CurbColor' 4ec7 0059 ld $59 ;041b LDI 4ec8 000c ld $0c 4ec9 002b ld $2b ;041d STW 4eca 006c ld $6c ;041d 'GrassColor' 4ecb 00cf ld $cf ;041f CALL 4ecc 006e ld $6e ;041f 'SetupSegment' 4ecd 0093 ld $93 ;0421 INC 4ece 0039 ld $39 ;0421 'Pos'+1 4ecf 0059 ld $59 ;0423 LDI 4ed0 0003 ld $03 4ed1 002b ld $2b ;0425 STW 4ed2 006a ld $6a ;0425 'CurbColor' 4ed3 0059 ld $59 ;0427 LDI 4ed4 0008 ld $08 4ed5 002b ld $2b ;0429 STW 4ed6 006c ld $6c ;0429 'GrassColor' 4ed7 00cf ld $cf ;042b CALL 4ed8 006e ld $6e ;042b 'SetupSegment' 4ed9 0093 ld $93 ;042d INC 4eda 0039 ld $39 ;042d 'Pos'+1 4edb 0021 ld $21 ;042f LDW 4edc 0038 ld $38 ;042f 'Pos' 4edd 0035 ld $35 ;0431 BCC 4ede 0053 ld $53 ;0432 GE 4edf 000f ld $0f 4ee0 0011 ld $11 ;0434 LDWI 4ee1 0000 ld $00 4ee2 0074 ld $74 4ee3 00f0 ld $f0 ;0437 1008 4ee4 0018 ld $18 ;0