* source: Core/ROMv6.asm.py 178 enableListing() 179 #----------------------------------------------------------------------- 180 # 181 # Start of core 182 # 183 #----------------------------------------------------------------------- 184 185 # Pre-loading the formal interface as a way to get warnings when 186 # accidentally redefined with a different value 187 loadBindings('interface.json') 188 loadBindings('Core/interface-dev.json') # Provisional values for DEVROM 189 190 # Gigatron clock 191 cpuClock = 6.250e+06 192 193 # Output pin assignment for VGA 194 R, G, B, hSync, vSync = 1, 4, 16, 64, 128 195 syncBits = hSync+vSync # Both pulses negative 196 197 # When the XOUT register is in the circuit, the rising edge triggers its update. 198 # The loop can therefore not be agnostic to the horizontal pulse polarity. 199 assert syncBits & hSync != 0 200 201 # VGA 640x480 defaults (to be adjusted below!) 202 vFront = 10 # Vertical front porch 203 vPulse = 2 # Vertical sync pulse 204 vBack = 33 # Vertical back porch 205 vgaLines = vFront + vPulse + vBack + 480 206 vgaClock = 25.175e+06 207 208 # Video adjustments for Gigatron 209 # 1. Our clock is (slightly) slower than 1/4th VGA clock. Not all monitors will 210 # accept the decreased frame rate, so we restore the frame rate to above 211 # minimum 59.94 Hz by cutting some lines from the vertical front porch. 212 vFrontAdjust = vgaLines - int(4 * cpuClock / vgaClock * vgaLines) 213 vFront -= vFrontAdjust 214 # 2. Extend vertical sync pulse so we can feed the game controller the same 215 # signal. This is needed for controllers based on the 4021 instead of 74165 216 vPulseExtension = max(0, 8-vPulse) 217 vPulse += vPulseExtension 218 # 3. Borrow these lines from the back porch so the refresh rate remains 219 # unaffected 220 vBack -= vPulseExtension 221 222 # Start value of vertical blank counter 223 videoYline0 = 1-2*(vFront+vPulse+vBack-2) 224 225 # Mismatch between video lines and sound channels 226 soundDiscontinuity = (vFront+vPulse+vBack) % 4 227 228 # QQVGA resolution 229 qqVgaWidth = 160 230 qqVgaHeight = 120 231 232 # Game controller bits (actual controllers in kit have negative output) 233 # +----------------------------------------+ 234 # | Up B* | 235 # | Left Right B A* | 236 # | Down Select Start A | 237 # +----------------------------------------+ *=Auto fire 238 buttonRight = 1 239 buttonLeft = 2 240 buttonDown = 4 241 buttonUp = 8 242 buttonStart = 16 243 buttonSelect = 32 244 buttonB = 64 245 buttonA = 128 246 247 #----------------------------------------------------------------------- 248 # 249 # RAM page 0: zero-page variables 250 # 251 #----------------------------------------------------------------------- 252 253 # Memory size in pages from auto-detect 254 memSize = zpByte() 255 256 # The current channel number for sound generation. Advanced every scan line 257 # and independent of the vertical refresh to maintain constant oscillation. 258 channel = zpByte() 259 260 # Next sound sample being synthesized 261 sample = zpByte() 262 # To save one instruction in the critical inner loop, `sample' is always 263 # reset with its own address instead of, for example, the value 0. Compare: 264 # 1 instruction reset 265 # st sample,[sample] 266 # 2 instruction reset: 267 # ld 0 268 # st [sample] 269 # The difference is not audible. This is fine when the reset/address 270 # value is low and doesn't overflow with 4 channels added to it. 271 # There is an alternative, but it requires pull-down diodes on the data bus: 272 # st [sample],[sample] 273 assert 4*63 + sample < 256 274 # We pin this reset/address value to 3, so `sample' swings from 3 to 255 275 assert sample == 3 276 277 # Former bootCount and bootCheck (<= ROMv3) 278 zpReserved = zpByte() # Recycled and still unused. Candidate future uses: 279 # - Video driver high address (for alternative video modes) 280 # - v6502: ADH offset ("MMU") 281 # - v8080: ??? 282 vCpuSelect = zpByte() # Active interpreter page 283 284 # Entropy harvested from SRAM startup and controller input 285 entropy = zpByte(3) 286 287 # Visible video 288 videoY = zpByte() # Counts up from 0 to 238 in steps of 2 289 # Counts up (and is odd) during vertical blank 290 videoModeB = zpByte() # Handler for every 2nd line (pixel burst or vCPU) 291 videoModeC = zpByte() # Handler for every 3rd line (pixel burst or vCPU) 292 videoModeD = zpByte() # Handler for every 4th line (pixel burst or vCPU) 293 294 nextVideo = zpByte() # Jump offset to scan line handler (videoA, B, C...) 295 videoPulse = nextVideo # Used for pulse width modulation 296 297 # Frame counter is good enough as system clock 298 frameCount = zpByte(1) 299 300 # Serial input (game controller) 301 serialRaw = zpByte() # New raw serial read 302 serialLast = zpByte() # Previous serial read 303 buttonState = zpByte() # Clearable button state 304 resetTimer = zpByte() # After 2 seconds of holding 'Start', do a soft reset 305 # XXX move to page 1 to free up space 306 307 # Extended output (blinkenlights in bit 0:3 and audio in bit 4:7). This 308 # value must be present in AC during a rising hSync edge. It then gets 309 # copied to the XOUT register by the hardware. The XOUT register is only 310 # accessible in this indirect manner because it isn't part of the core 311 # CPU architecture. 312 xout = zpByte() 313 xoutMask = zpByte() # The blinkenlights and sound on/off state 314 315 # vCPU interpreter 316 vTicks = zpByte() # Interpreter ticks are units of 2 clocks 317 vPC = zpByte(2) # Interpreter program counter, points into RAM 318 vAC = zpByte(2) # Interpreter accumulator, 16-bits 319 vLR = zpByte(2) # Return address, for returning after CALL 320 vSP = zpByte(1) # Stack pointer 321 vTmp = zpByte() 322 vReturn = zpByte() # Return into video loop (in page of vBlankStart) 323 324 # Scratch 325 frameX = zpByte() # Starting byte within page 326 frameY = zpByte() # Page of current pixel line (updated by videoA) 327 328 # Vertical blank (reuse some variables used in the visible part) 329 videoSync0 = frameX # Vertical sync type on current line (0xc0 or 0x40) 330 videoSync1 = frameY # Same during horizontal pulse (0x80 or 0x00) 331 332 # Versioning for GT1 compatibility 333 # Please refer to Docs/GT1-files.txt for interpreting this variable 334 romType = zpByte(1) 335 336 # The low 3 bits are repurposed to select the actively updated sound channels. 337 # Valid bit combinations are: 338 # xxxxx011 Default after reset: 4 channels (page 1,2,3,4) 339 # xxxxx001 2 channels at double update rate (page 1,2) 340 # xxxxx000 1 channel at quadruple update rate (page 1) 341 # The main application for this is to free up the high bytes of page 2,3,4. 342 channelMask = symbol('channelMask_v4') 343 assert romType == channelMask 344 345 # SYS function arguments and results/scratch 346 sysFn = zpByte(2) 347 sysArgs = zpByte(8) 348 349 # Play sound if non-zero, count down and stop sound when zero 350 soundTimer = zpByte() 351 352 # Fow now the LED state machine itself is hard-coded in the program ROM 353 ledTimer = zpByte() # Number of ticks until next LED change 354 ledState_v2 = zpByte() # Current LED state 355 ledTempo = zpByte() # Next value for ledTimer after LED state change 356 357 358 # Management of free space in page zero (userVars) 359 # * Programs that only use the features of ROMvx can 360 # safely use all bytes above userVars_vx except 0x80. 361 # * Programs that use some but not all features of ROMvx 362 # may exceptionally use bytes between userVars 363 # and userVars_vx if they avoid using ROM features 364 # that need them. This is considerably riskier. 365 userVars = zpByte(0) 366 userVars_v4 = zpByte(0) 367 # Saved vCPU context during vIRQ 368 # Code that uses vCPU interrupts should not use these locations. 369 vIrqSave = zpByte(6) 370 # Start of safely usable bytes under ROMv5 371 userVars_v5 = zpByte(0) 372 # Start of safely usable bytes under ROMv6 373 userVars_v6 = zpByte(0) 374 375 # [0x80] 376 # Constant 0x01. 377 zpReset(0x80) 378 oneConst = zpByte(1) 379 userVars2 = zpByte(0) 380 381 # Warning: One should avoid using SYS_ExpanderControl 382 # under ROMv4 overwrites becauses it overwrites 0x81. 383 384 385 #----------------------------------------------------------------------- 386 # 387 # RAM page 1: video line table 388 # 389 #----------------------------------------------------------------------- 390 391 # Byte 0-239 define the video lines 392 videoTable = 0x0100 # Indirection table: Y[0] dX[0] ..., Y[119] dX[119] 393 394 vReset = 0x01f0 395 vIRQ_v5 = 0x01f6 396 ctrlBits = 0x01f8 397 videoTop_v5 = 0x01f9 # Number of skip lines 398 399 # Highest bytes are for sound channel variables 400 wavA = 250 # Waveform modulation with `adda' 401 wavX = 251 # Waveform modulation with `xora' 402 keyL = 252 # Frequency low 7 bits (bit7 == 0) 403 keyH = 253 # Frequency high 8 bits 404 oscL = 254 # Phase low 7 bits 405 oscH = 255 # Phase high 8 bits 406 407 #----------------------------------------------------------------------- 408 # Memory layout 409 #----------------------------------------------------------------------- 410 411 userCode = 0x0200 # Application vCPU code 412 soundTable = 0x0700 # Wave form tables (doubles as right-shift-2 table) 413 screenMemory = 0x0800 # Default start of screen memory: 0x0800 to 0x7fff 414 415 #----------------------------------------------------------------------- 416 # Application definitions 417 #----------------------------------------------------------------------- 418 419 maxTicks = 28//2 # Duration of vCPU's slowest virtual opcode (ticks) 420 minTicks = 14//2 # vcPU's fastest instruction 421 v6502_maxTicks = 38//2 # Max duration of v6502 processing phase (ticks) 422 423 runVcpu_overhead = 5 # Caller overhead (cycles) 424 vCPU_overhead = 9 # Callee overhead of jumping in and out (cycles) 425 v6502_overhead = 11 # Callee overhead for v6502 (cycles) 426 427 v6502_adjust = (v6502_maxTicks - maxTicks) + (v6502_overhead - vCPU_overhead)//2 428 assert v6502_adjust >= 0 # v6502's overhead is a bit more than vCPU 429 430 def runVcpu(n, ref=None, returnTo=None): 431 """Macro to run interpreter for exactly n cycles. Returns 0 in AC. 432 433 - `n' is the number of available Gigatron cycles including overhead. 434 This is converted into interpreter ticks and takes into account 435 the vCPU calling overheads. A `nop' is inserted when necessary 436 for alignment between cycles and ticks. 437 - `returnTo' is where program flow continues after return. If not set 438 explicitely, it will be the first instruction behind the expansion. 439 - If another interpreter than vCPU is active (v6502...), that one 440 must adjust for the timing differences, because runVcpu wouldn't know.""" 441 442 overhead = runVcpu_overhead + vCPU_overhead 443 if returnTo == 0x100: # Special case for videoZ 444 overhead -= 2 445 446 if n is None: 447 # (Clumsily) create a maximum time slice, corresponding to a vTicks 448 # value of 127 (giving 282 cycles). A higher value doesn't work because 449 # then SYS functions that just need 28 cycles (0 excess) won't start. 450 n = (127 + maxTicks) * 2 + overhead 451 452 n -= overhead 453 assert n > 0 454 455 if n % 2 == 1: 456 nop() # Tick alignment 457 n -= 1 458 assert n % 2 == 0 459 460 print('runVcpu at $%04x net cycles %3s info %s' % (pc(), n, ref)) 461 462 if returnTo != 0x100: 463 if returnTo is None: 464 returnTo = pc() + 5 # Next instruction 465 ld(lo(returnTo)) #0 466 st([vReturn]) #1 467 468 n //= 2 469 n -= maxTicks # First instruction always runs 470 assert n < 128 471 assert n >= v6502_adjust 472 473 ld([vCpuSelect],Y) #2 474 jmp(Y,'ENTER') #3 475 ld(n) #4 476 assert runVcpu_overhead == 5 477 478 #----------------------------------------------------------------------- 479 # v6502 definitions 480 #----------------------------------------------------------------------- 481 482 # Registers are zero page variables 483 v6502_PC = vLR # Program Counter 484 v6502_PCL = vLR+0 # Program Counter Low 485 v6502_PCH = vLR+1 # Program Counter High 486 v6502_S = vSP # Stack Pointer (kept as "S+1") 487 v6502_A = vAC+0 # Accumulator 488 v6502_BI = vAC+1 # B Input Register (used by SBC) 489 v6502_ADL = sysArgs+0 # Low Address Register 490 v6502_ADH = sysArgs+1 # High Address Register 491 v6502_IR = sysArgs+2 # Instruction Register 492 v6502_P = sysArgs+3 # Processor Status Register (V flag in bit 7) 493 v6502_Qz = sysArgs+4 # Quick Status Register for Z flag 494 v6502_Qn = sysArgs+5 # Quick Status Register for N flag 495 v6502_X = sysArgs+6 # Index Register X 496 v6502_Y = sysArgs+7 # Index Register Y 497 v6502_Tmp = vTmp # Scratch (may be clobbered outside v6502) 498 499 # MOS 6502 definitions for P register 500 v6502_Cflag = 1 # Carry Flag (unsigned overflow) 501 v6502_Zflag = 2 # Zero Flag (all bits zero) 502 v6502_Iflag = 4 # Interrupt Enable Flag (1=Disable) 503 v6502_Dflag = 8 # Decimal Enable Flag (aka BCD mode, 1=Enable) 504 v6502_Bflag = 16 # Break (or PHP) Instruction Flag 505 v6502_Uflag = 32 # Unused (always 1) 506 v6502_Vflag = 64 # Overflow Flag (signed overflow) 507 v6502_Nflag = 128 # Negative Flag (bit 7 of result) 508 509 # In emulation it is much faster to keep the V flag in bit 7 510 # This can be corrected when importing/exporting with PHP, PLP, etc 511 v6502_Vemu = 128 512 513 # On overflow: 514 # """Overflow is set if two inputs with the same sign produce 515 # a result with a different sign. Otherwise it is clear.""" 516 # Formula (without carry/borrow in!): 517 # (A ^ (A+B)) & (B ^ (A+B)) & 0x80 518 # References: 519 # http://www.righto.com/2012/12/the-6502-overflow-flag-explained.html 520 # http://6502.org/tutorials/vflag.html 521 522 # Memory layout 523 v6502_Stack = 0x0000 # 0x0100 is already used in the Gigatron 524 #v6502_NMI = 0xfffa 525 #v6502_RESET = 0xfffc 526 #v6502_IRQ = 0xfffe 527 528 #----------------------------------------------------------------------- 529 # 530 # $0000 ROM page 0: Boot 531 # 532 #----------------------------------------------------------------------- 533 534 align(0x100, size=0x80) 535 536 # 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 537 ld(0b0000) # LEDs |OOOO| 0001 1880 ld $80,out 538 ld(syncBits^hSync,OUT) # Prepare XOUT update, hSync goes down, RGB to black 0002 18c0 ld $c0,out 539 ld(syncBits,OUT) # hSync goes up, updating XOUT 540 541 # Setup I/O and RAM expander 0003 c17f ctrl $7f 542 ctrl(0b01111111) # Reset signal (default state | 0x3) 0004 c17c ctrl $7c 543 ctrl(0b01111100) # Disable SPI slaves, enable RAM, bank 1 544 # ^^^^^^^^ 545 # |||||||`-- SCLK 546 # ||||||`--- Not connected 547 # |||||`---- /SS0 548 # ||||`----- /SS1 549 # |||`------ /SS2 550 # ||`------- /SS3 551 # |`-------- B0 552 # `--------- B1 553 # bit15 --------- MOSI = 0 554 555 # Simple RAM test and size check by writing to [1<>8) 003d d617 st [$17],y 635 st([vPC+1],Y) 003e dc59 st $59,[y,x++] 636 st('LDI', [Y,Xpp]) 003f dc5f st $5f,[y,x++] 637 st('SYS_Reset_88', [Y,Xpp]) 0040 dc2b st $2b,[y,x++] 638 st('STW', [Y,Xpp]) 0041 dc22 st $22,[y,x++] 639 st(sysFn, [Y,Xpp]) 0042 dcb4 st $b4,[y,x++] 640 st('SYS', [Y,Xpp]) # SYS -> SYS_Reset_88 -> SYS_Exec_88 0043 dce2 st $e2,[y,x++] 641 st(256-88//2+maxTicks,[Y,Xpp]) 0044 dc00 st $00,[y,x++] 642 st(0, [Y,Xpp]) # vIRQ_v5: Disable interrupts 0045 dc00 st $00,[y,x++] 643 st(0, [Y,Xpp]) # vIRQ_v5 0046 dcfc st $fc,[y,x++] 644 st(0b11111100, [Y,Xpp]) # Control register 0047 dc00 st $00,[y,x++] 645 st(0, [Y,Xpp]) # videoTop 646 0048 0002 ld $02 647 ld(hi('ENTER')) # Active interpreter (vCPU,v6502) = vCPU 0049 c205 st [$05] 648 st([vCpuSelect]) 649 004a 00ff ld $ff 650 ld(255) # Setup serial input 004b c20e st [$0e] 651 st([frameCount]) 004c c20f st [$0f] 652 st([serialRaw]) 004d c210 st [$10] 653 st([serialLast]) 004e c211 st [$11] 654 st([buttonState]) 004f c212 st [$12] 655 st([resetTimer]) # resetTimer<0 when entering Main.gcl 656 0050 0007 ld $07 657 ld(0b0111) # LEDs |***O| 0051 1880 ld $80,out 658 ld(syncBits^hSync,OUT) 0052 18c0 ld $c0,out 659 ld(syncBits,OUT) 660 0053 0000 ld $00 661 ld(0) 0054 c200 st [$00] 662 st([0]) # Carry lookup ([0x80] in 1st line of vBlank) 0055 c202 st [$02] 663 st([channel]) 0056 c22c st [$2c] 664 st([soundTimer]) 665 0057 000f ld $0f 666 ld(0b1111) # LEDs |****| 0058 1880 ld $80,out 667 ld(syncBits^hSync,OUT) 0059 18c0 ld $c0,out 668 ld(syncBits,OUT) 005a c213 st [$13] 669 st([xout]) # Setup for control by video loop 005b c214 st [$14] 670 st([xoutMask]) 671 005c 1401 ld $01,y 672 ld(hi('startVideo'),Y) # Enter video loop at vertical blank 005d e003 jmp y,$03 673 jmp(Y,'startVideo') 005e c22e st [$2e] 674 st([ledState_v2]) # Setting to 1..126 means "stopped" 675 676 #----------------------------------------------------------------------- 677 # Extension SYS_Reset_88: Soft reset 678 #----------------------------------------------------------------------- 679 680 # SYS_Reset_88 initiates an immediate Gigatron reset from within the vCPU. 681 # The reset sequence itself is mostly implemented in GCL by Reset.gcl, 682 # which must first be loaded into RAM. But as that takes more than 1 scanline, 683 # some vCPU bootstrapping code gets loaded with SYS_Exec_88. 684 # !!! This function was REMOVED from interface.json 685 # !!! Better use vReset as generic entry point for soft reset 686 687 # ROM type (see also Docs/GT1-files.txt) 688 romTypeValue = symbol('romTypeValue_ROMv6') 689 690 label('SYS_Reset_88') 691 assert pc()>>8 == 0 692 assert (romTypeValue & 7) == 0 SYS_Reset_88: 005f 0048 ld $48 693 ld(romTypeValue) #15 Set ROM type/version and clear channel mask 0060 c221 st [$21] 694 st([romType]) #16 0061 0000 ld $00 695 ld(0) #17 0062 c21c st [$1c] 696 st([vSP]) #18 vSP 0063 1401 ld $01,y 697 ld(hi('videoTop_v5'),Y) #19 0064 caf9 st [y,$f9] 698 st([Y,lo('videoTop_v5')]) #20 Show all 120 pixel lines 0065 caf6 st [y,$f6] 699 st([Y,vIRQ_v5]) #21 Disable vIRQ dispatch 0066 caf7 st [y,$f7] 700 st([Y,vIRQ_v5+1]) #22 0067 c22c st [$2c] 701 st([soundTimer]) #23 soundTimer 702 assert userCode&255 == 0 0068 c21a st [$1a] 703 st([vLR]) #24 vLR 0069 0002 ld $02 704 ld(userCode>>8) #25 006a c21b st [$1b] 705 st([vLR+1]) #26 006b 00f6 ld $f6 706 ld('nopixels') #27 Video mode 3 (fast) 006c c20a st [$0a] 707 st([videoModeB]) #28 006d c20b st [$0b] 708 st([videoModeC]) #29 006e c20c st [$0c] 709 st([videoModeD]) #30 006f 00ad ld $ad 710 ld('SYS_Exec_88') #31 SYS_Exec_88 0070 c222 st [$22] 711 st([sysFn]) #32 High byte (remains) 0 0071 00bd ld $bd 712 ld('Reset') #33 Reset.gt1 from EPROM 0072 c224 st [$24] 713 st([sysArgs+0]) #34 0073 00f3 ld $f3 714 ld(hi('Reset')) #35 0074 c225 st [$25] 715 st([sysArgs+1]) #36 0075 0116 ld [$16] 716 ld([vPC]) #37 Force second SYS call 0076 a002 suba $02 717 suba(2) #38 0077 c216 st [$16] 718 st([vPC]) #39 719 # Reset expansion board 0078 c17f ctrl $7f 720 ctrl(0b01111111) #40 Reset signal (default state | 0x3) 0079 c17c ctrl $7c 721 ctrl(0b01111100) #41 Default state. 007a 011d ld [$1d] 722 ld([vTmp]) #42 Always load after ctrl 723 # Return to interpreter 007b 1403 ld $03,y 724 ld(hi('REENTER'),Y) #43 007c e0cb jmp y,$cb 725 jmp(Y,'REENTER') #44 007d 00e8 ld $e8 726 ld(-48/2) #45 727 728 #----------------------------------------------------------------------- 729 # Placeholders for future SYS functions. This works as a kind of jump 730 # table. The indirection allows SYS implementations to be moved around 731 # between ROM versions, at the expense of 2 clock cycles (or 1). When 732 # the function is not present it just acts as a NOP. Of course, when a 733 # SYS function must be patched or extended it needs to have budget for 734 # that in its declared maximum cycle count. 735 # 736 # Technically the same goal can be achieved by starting each function 737 # with 2 nop's, or by overdeclaring their duration in the first place 738 # (a bit is still wise to do). But this can result in fragmentation 739 # of future ROM images. The indirection avoids that. 740 # 741 # An added advantage of having these in ROM page 0 is that it saves one 742 # byte when setting sysFn: LDI+STW (4 bytes) instead of LDWI+STW (5 bytes) 743 #----------------------------------------------------------------------- 744 007e 0200 nop 745 align(0x80, size=0x80) 007f 0200 nop 746 assert pc() == 0x80 747 0080 1403 ld $03,y 748 ld(hi('REENTER'),Y) #15 slot 0x80 0081 e0cb jmp y,$cb 749 jmp(Y,'REENTER') #16 0082 00f6 ld $f6 750 ld(-20/2) #17 751 0083 1403 ld $03,y 752 ld(hi('REENTER'),Y) #15 slot 0x83 0084 e0cb jmp y,$cb 753 jmp(Y,'REENTER') #16 0085 00f6 ld $f6 754 ld(-20/2) #17 755 0086 1403 ld $03,y 756 ld(hi('REENTER'),Y) #15 slot 0x86 0087 e0cb jmp y,$cb 757 jmp(Y,'REENTER') #16 0088 00f6 ld $f6 758 ld(-20/2) #17 759 0089 1403 ld $03,y 760 ld(hi('REENTER'),Y) #15 slot 0x89 008a e0cb jmp y,$cb 761 jmp(Y,'REENTER') #16 008b 00f6 ld $f6 762 ld(-20/2) #17 763 008c 1403 ld $03,y 764 ld(hi('REENTER'),Y) #15 slot 0x8c 008d e0cb jmp y,$cb 765 jmp(Y,'REENTER') #16 008e 00f6 ld $f6 766 ld(-20/2) #17 767 008f 1403 ld $03,y 768 ld(hi('REENTER'),Y) #15 slot 0x8f 0090 e0cb jmp y,$cb 769 jmp(Y,'REENTER') #16 0091 00f6 ld $f6 770 ld(-20/2) #17 771 0092 1403 ld $03,y 772 ld(hi('REENTER'),Y) #15 slot 0x92 0093 e0cb jmp y,$cb 773 jmp(Y,'REENTER') #16 0094 00f6 ld $f6 774 ld(-20/2) #17 775 0095 1403 ld $03,y 776 ld(hi('REENTER'),Y) #15 slot 0x95 0096 e0cb jmp y,$cb 777 jmp(Y,'REENTER') #16 0097 00f6 ld $f6 778 ld(-20/2) #17 779 0098 1403 ld $03,y 780 ld(hi('REENTER'),Y) #15 slot 0x98 0099 e0cb jmp y,$cb 781 jmp(Y,'REENTER') #16 009a 00f6 ld $f6 782 ld(-20/2) #17 783 009b 1403 ld $03,y 784 ld(hi('REENTER'),Y) #15 slot 0x9b 009c e0cb jmp y,$cb 785 jmp(Y,'REENTER') #16 009d 00f6 ld $f6 786 ld(-20/2) #17 787 788 #----------------------------------------------------------------------- 789 # Extension SYS_Multiply_s16_v6_66: 16 bit multiplication 790 #----------------------------------------------------------------------- 791 # 792 # Computes C = C + A * B where A,B,C are 16 bits integers. 793 # Returns 16 bits result in vAC as well 794 # 795 # sysArgs[0:1] Multiplicand A (in) 796 # sysArgs[2:3] Multiplicand B (in) 797 # sysArgs[4:5] C (inout) 798 # sysArgs[6:7] Must be set to 1 (in) 799 # 800 # Credits: at67 801 802 label('SYS_Multiply_s16_v6_66') SYS_Multiply_s16_v6_66: 009e 1414 ld $14,y 803 ld(hi('sys_Multiply_s16'),Y) #15 slot 0x9e 009f e05c jmp y,$5c 804 jmp(Y,'sys_Multiply_s16') #16 00a0 012a ld [$2a] 805 ld([sysArgs+6]) #17 load mask.lo 806 807 #----------------------------------------------------------------------- 808 # Extension SYS_Divide_s16_v6_80: 15 bit division 809 #----------------------------------------------------------------------- 810 # 811 # Computes the Euclidean division of 0<=A<=32767 and 0 n*]* 0 852 # on top of lookup tables. 853 # 854 # Variables: 855 # sysArgs[0:1] ROM pointer (in) 856 # sysArgs[2:3] RAM pointer (changed) 857 # sysArgs[4] State counter (changed) 858 # vLR vCPU continues here (in) 859 860 label('SYS_Exec_88') SYS_Exec_88: 00ad 1412 ld $12,y 861 ld(hi('sys_Exec'),Y) #15 00ae e042 jmp y,$42 862 jmp(Y,'sys_Exec') #16 00af 0000 ld $00 863 ld(0) #17 Address of loader on zero page 864 865 #----------------------------------------------------------------------- 866 # More placeholders for future SYS functions 867 #----------------------------------------------------------------------- 868 00b0 1403 ld $03,y 869 ld(hi('REENTER'),Y) #15 slot 0xb0 00b1 e0cb jmp y,$cb 870 jmp(Y,'REENTER') #16 00b2 00f6 ld $f6 871 ld(-20/2) #17 872 00b3 1403 ld $03,y 873 ld(hi('REENTER'),Y) #15 slot 0xb3 00b4 e0cb jmp y,$cb 874 jmp(Y,'REENTER') #16 00b5 00f6 ld $f6 875 ld(-20/2) #17 876 00b6 1403 ld $03,y 877 ld(hi('REENTER'),Y) #15 slot 0xb6 00b7 e0cb jmp y,$cb 878 jmp(Y,'REENTER') #16 00b8 00f6 ld $f6 879 ld(-20/2) #17 880 00b9 1403 ld $03,y 881 ld(hi('REENTER'),Y) #15 slot 0xb9 00ba e0cb jmp y,$cb 882 jmp(Y,'REENTER') #16 00bb 00f6 ld $f6 883 ld(-20/2) #17 884 00bc 1403 ld $03,y 885 ld(hi('REENTER'),Y) #15 slot 0xbc 00bd e0cb jmp y,$cb 886 jmp(Y,'REENTER') #16 00be 00f6 ld $f6 887 ld(-20/2) #17 888 00bf 1403 ld $03,y 889 ld(hi('REENTER'),Y) #15 slot 0xbf 00c0 e0cb jmp y,$cb 890 jmp(Y,'REENTER') #16 00c1 00f6 ld $f6 891 ld(-20/2) #17 892 00c2 1403 ld $03,y 893 ld(hi('REENTER'),Y) #15 slot 0xc2 00c3 e0cb jmp y,$cb 894 jmp(Y,'REENTER') #16 00c4 00f6 ld $f6 895 ld(-20/2) #17 896 00c5 1403 ld $03,y 897 ld(hi('REENTER'),Y) #15 slot 0xc5 00c6 e0cb jmp y,$cb 898 jmp(Y,'REENTER') #16 00c7 00f6 ld $f6 899 ld(-20/2) #17 900 00c8 1403 ld $03,y 901 ld(hi('REENTER'),Y) #15 slot 0xc8 00c9 e0cb jmp y,$cb 902 jmp(Y,'REENTER') #16 00ca 00f6 ld $f6 903 ld(-20/2) #17 904 00cb 1403 ld $03,y 905 ld(hi('REENTER'),Y) #15 slot 0xcb 00cc e0cb jmp y,$cb 906 jmp(Y,'REENTER') #16 00cd 00f6 ld $f6 907 ld(-20/2) #17 908 00ce 1403 ld $03,y 909 ld(hi('REENTER'),Y) #15 slot 0xce 00cf e0cb jmp y,$cb 910 jmp(Y,'REENTER') #16 00d0 00f6 ld $f6 911 ld(-20/2) #17 912 00d1 1403 ld $03,y 913 ld(hi('REENTER'),Y) #15 slot 0xd1 00d2 e0cb jmp y,$cb 914 jmp(Y,'REENTER') #16 00d3 00f6 ld $f6 915 ld(-20/2) #17 916 00d4 1403 ld $03,y 917 ld(hi('REENTER'),Y) #15 slot 0xd4 00d5 e0cb jmp y,$cb 918 jmp(Y,'REENTER') #16 00d6 00f6 ld $f6 919 ld(-20/2) #17 920 00d7 1403 ld $03,y 921 ld(hi('REENTER'),Y) #15 slot 0xd7 00d8 e0cb jmp y,$cb 922 jmp(Y,'REENTER') #16 00d9 00f6 ld $f6 923 ld(-20/2) #17 924 00da 1403 ld $03,y 925 ld(hi('REENTER'),Y) #15 slot 0xda 00db e0cb jmp y,$cb 926 jmp(Y,'REENTER') #16 00dc 00f6 ld $f6 927 ld(-20/2) #17 928 00dd 1403 ld $03,y 929 ld(hi('REENTER'),Y) #15 slot 0xdd 00de e0cb jmp y,$cb 930 jmp(Y,'REENTER') #16 00df 00f6 ld $f6 931 ld(-20/2) #17 932 00e0 1403 ld $03,y 933 ld(hi('REENTER'),Y) #15 slot 0xe0 00e1 e0cb jmp y,$cb 934 jmp(Y,'REENTER') #16 00e2 00f6 ld $f6 935 ld(-20/2) #17 936 937 #----------------------------------------------------------------------- 938 # Extension SYS_ScanMemoryExt_v6_50 939 #----------------------------------------------------------------------- 940 941 # SYS function for searching a byte in a 0 to 256 bytes string located 942 # in a different bank. Doesn't cross page boundaries. Returns a 943 # pointer to the target if found or zero. Temporarily deselects SPI 944 # devices. 945 # 946 # sysArgs[0:1] Start address 947 # sysArgs[2], sysArgs[3] Bytes to locate in the string 948 # vACL Length of the string (0 means 256) 949 # vACH Bit 6 and 7 contain the bank number 950 951 label('SYS_ScanMemoryExt_v6_50') SYS_ScanMemoryExt_v6_50: 00e3 1414 ld $14,y 952 ld(hi('sys_ScanMemoryExt'),Y) #15 slot 0xe3 00e4 e027 jmp y,$27 953 jmp(Y,'sys_ScanMemoryExt') #16 00e5 0119 ld [$19] 954 ld([vAC+1]) #17 955 956 957 #----------------------------------------------------------------------- 958 # Extension SYS_ScanMemory_v6_50 959 #----------------------------------------------------------------------- 960 961 # SYS function for searching a byte in a 0 to 256 bytes string. 962 # Returns a pointer to the target if found or zero. Doesn't cross 963 # page boundaries. 964 # 965 # sysArgs[0:1] Start address 966 # sysArgs[2], sysArgs[3] Bytes to locate in the string 967 # vACL Length of the string (0 means 256) 968 969 label('SYS_ScanMemory_v6_50') SYS_ScanMemory_v6_50: 00e6 1414 ld $14,y 970 ld(hi('sys_ScanMemory'),Y) #15 slot 0xe6 00e7 e000 jmp y,$00 971 jmp(Y,'sys_ScanMemory') #16 00e8 1525 ld [$25],y 972 ld([sysArgs+1],Y) #17 973 974 #----------------------------------------------------------------------- 975 # Extension SYS_CopyMemory_v6_80 976 #----------------------------------------------------------------------- 977 978 # SYS function for copying 1..256 bytes 979 # 980 # sysArgs[0:1] Destination address 981 # sysArgs[2:3] Source address 982 # vAC[0] Count (0 means 256) 983 # 984 # Doesn't cross page boundaries. 985 # Overwrites sysArgs[4:7] and vLR. 986 987 label('SYS_CopyMemory_v6_80') SYS_CopyMemory_v6_80: 00e9 1413 ld $13,y 988 ld(hi('sys_CopyMemory'),Y) # 15 slot 0xe9 00ea e000 jmp y,$00 989 jmp(Y, 'sys_CopyMemory') # 16 00eb 0118 ld [$18] 990 ld([vAC]) # 17 991 992 #----------------------------------------------------------------------- 993 # Extension SYS_CopyMemoryExt_v6_100 994 #----------------------------------------------------------------------- 995 996 # SYS function for copying 1..256 bytes across banks 997 # 998 # sysArgs[0:1] Destination address 999 # sysArgs[2:3] Source address 1000 # vAC[0] Count (0 means 256) 1001 # vAC[1] Bits 7 and 6 contain the destination bank number, 1002 # and bits 5 and 4 the source bank number. 1003 # 1004 # Doesn't cross page boundaries. 1005 # Overwrites sysArgs[4:7], vLR, and vTmp. 1006 # Temporarily deselect all SPI devices. 1007 # Should not call without expansion board 1008 1009 label('SYS_CopyMemoryExt_v6_100') SYS_CopyMemoryExt_v6_100: 00ec 1413 ld $13,y 1010 ld(hi('sys_CopyMemoryExt'),Y) # 15 slot 0xec 00ed e078 jmp y,$78 1011 jmp(Y, 'sys_CopyMemoryExt') # 16 00ee 0119 ld [$19] 1012 ld([vAC+1]) # 17 1013 1014 #----------------------------------------------------------------------- 1015 # Extension SYS_ReadRomDir_v5_80 1016 #----------------------------------------------------------------------- 1017 1018 # Get next entry from ROM file system. Use vAC=0 to get the first entry. 1019 1020 # Variables: 1021 # vAC Start address of current entry (inout) 1022 # sysArgs[0:7] File name, padded with zeroes (out) 1023 1024 label('SYS_ReadRomDir_v5_80') SYS_ReadRomDir_v5_80: 00ef 14f7 ld $f7,y 1025 ld(hi('sys_ReadRomDir'),Y) #15 00f0 e06c jmp y,$6c 1026 jmp(Y,'sys_ReadRomDir') #16 00f1 0119 ld [$19] 1027 ld([vAC+1]) #17 1028 00f2 0200 nop 1029 fillers(until=symbol('SYS_Out_22') & 255) 00f3 0200 nop 1030 1031 #----------------------------------------------------------------------- 1032 # Extension SYS_Out_22 1033 #----------------------------------------------------------------------- 1034 1035 # Send byte to output port 1036 # 1037 # Variables: 1038 # vAC 1039 1040 label('SYS_Out_22') SYS_Out_22: 00f4 1924 ld [$24],out 1041 ld([sysArgs+0],OUT) #15 00f5 0200 nop 1042 nop() #16 00f6 1403 ld $03,y 1043 ld(hi('REENTER'),Y) #17 00f7 e0cb jmp y,$cb 1044 jmp(Y,'REENTER') #18 00f8 00f5 ld $f5 1045 ld(-22/2) #19 1046 1047 #----------------------------------------------------------------------- 1048 # Extension SYS_In_24 1049 #----------------------------------------------------------------------- 1050 1051 # Read a byte from the input port 1052 # 1053 # Variables: 1054 # vAC 1055 1056 label('SYS_In_24') SYS_In_24: 00f9 c318 st in,[$18] 1057 st(IN, [vAC]) #15 00fa 0000 ld $00 1058 ld(0) #16 00fb c219 st [$19] 1059 st([vAC+1]) #17 00fc 0200 nop 1060 nop() #18 00fd 1403 ld $03,y 1061 ld(hi('REENTER'),Y) #19 00fe e0cb jmp y,$cb 1062 jmp(Y,'REENTER') #20 00ff 00f4 ld $f4 1063 ld(-24/2) #21 1064 1065 assert pc()&255 == 0 1066 1067 #----------------------------------------------------------------------- 1068 # 1069 # $0100 ROM page 1: Video loop vertical blank 1070 # 1071 #----------------------------------------------------------------------- 1072 align(0x100, size=0x100) 1073 1074 # Video off mode (also no sound, serial, timer, blinkenlights, ...). 1075 # For benchmarking purposes. This still has the overhead for the vTicks 1076 # administration, time slice granularity etc. 1077 label('videoZ') 1078 videoZ = pc() videoZ: 0100 1505 ld [$05],y 1079 runVcpu(None, '---- novideo', returnTo=videoZ) 0101 e0ff jmp y,$ff 0102 007f ld $7f 1080 1081 label('startVideo') # (Re)start of video signal from idle state startVideo: 0103 00c0 ld $c0 1082 ld(syncBits) 1083 1084 # Start of vertical blank interval 1085 label('vBlankStart') vBlankStart: 0104 c21f st [$1f] 1086 st([videoSync0]) #32 Start of vertical blank interval 0105 0080 ld $80 1087 ld(syncBits^hSync) #33 0106 c220 st [$20] 1088 st([videoSync1]) #34 1089 1090 # Reset line counter before vCPU can see it 0107 00b3 ld $b3 1091 ld(videoYline0) #35 0108 c209 st [$09] 1092 st([videoY]) #36 1093 1094 # Update frame count and [0x80] (4 cycles) 0109 0001 ld $01 1095 ld(1) #37 Reinitialize carry lookup, for robustness 010a c280 st [$80] 1096 st([0x80]) #38 010b 810e adda [$0e] 1097 adda([frameCount]) #39 Frame counter 010c c20e st [$0e] 1098 st([frameCount]) #40 1099 1100 # Mix entropy (11 cycles) 010d 6107 xora [$07] 1101 xora([entropy+1]) #41 Mix entropy 010e 610f xora [$0f] 1102 xora([serialRaw]) #42 Mix in serial input 010f 8106 adda [$06] 1103 adda([entropy+0]) #43 0110 c206 st [$06] 1104 st([entropy+0]) #44 0111 8108 adda [$08] 1105 adda([entropy+2]) #45 Some hidden state 0112 c208 st [$08] 1106 st([entropy+2]) #46 0113 e816 blt $0116 1107 bmi(pc()+3) #47 0114 fc17 bra $0117 1108 bra(pc()+3) #48 0115 6053 xora $53 1109 xora(64+16+2+1) #49 0116 606c xora $6c 1110 xora(64+32+8+4) #49(!) 0117 8107 adda [$07] 1111 adda([entropy+1]) #50 0118 c207 st [$07] 1112 st([entropy+1]) #51 1113 1114 # LED sequencer (18 cycles) 0119 012d ld [$2d] 1115 ld([ledTimer]) #52 Blinkenlight sequencer 011a f01d beq $011d 1116 beq(pc()+3) #53 011b fc1e bra $011e 1117 bra(pc()+3) #54 011c a001 suba $01 1118 suba(1) #55 011d 012f ld [$2f] 1119 ld([ledTempo]) #55(!) 011e c22d st [$2d] 1120 st([ledTimer]) #56 011f f022 beq $0122 1121 beq(pc()+3) #57 0120 fc23 bra $0123 1122 bra(pc()+3) #58 0121 0000 ld $00 1123 ld(0) #59 Don't advance state 0122 0001 ld $01 1124 ld(1) #59(!) Advance state when timer passes through 0 0123 812e adda [$2e] 1125 adda([ledState_v2]) #60 0124 ec27 bne $0127 1126 bne(pc()+3) #61 0125 fc28 bra $0128 1127 bra(pc()+3) #62 0126 00e8 ld $e8 1128 ld(-24) #63 State 0 becomes -24, start of sequence 0127 e42c bgt .leds#65 1129 bgt('.leds#65') #63(!) Catch the stopped state (>0) 0128 c22e st [$2e] 1130 st([ledState_v2]) #64 0129 8048 adda $48 1131 adda('.leds#69') #65 012a fe00 bra ac 1132 bra(AC) #66 Jump to lookup table 012b fc48 bra .leds#69 1133 bra('.leds#69') #67 Single-instruction subroutine 1134 1135 label('.leds#65') .leds#65: 012c 000f ld $0f 1136 ld(0x0f) #65 Maintain stopped state 012d c22e st [$2e] 1137 st([ledState_v2]) #66 012e fc48 bra .leds#69 1138 bra('.leds#69') #67 012f 2114 anda [$14] 1139 anda([xoutMask]) #68 Always clear sound bits (this is why AC=0x0f) 1140 0130 000f ld $0f 1141 ld(0b1111) #68 LEDs |****| offset -24 Low 4 bits are the LED output 0131 0007 ld $07 1142 ld(0b0111) #68 LEDs |***O| 0132 0003 ld $03 1143 ld(0b0011) #68 LEDs |**OO| 0133 0001 ld $01 1144 ld(0b0001) #68 LEDs |*OOO| 0134 0002 ld $02 1145 ld(0b0010) #68 LEDs |O*OO| 0135 0004 ld $04 1146 ld(0b0100) #68 LEDs |OO*O| 0136 0008 ld $08 1147 ld(0b1000) #68 LEDs |OOO*| 0137 0004 ld $04 1148 ld(0b0100) #68 LEDs |OO*O| 0138 0002 ld $02 1149 ld(0b0010) #68 LEDs |O*OO| 0139 0001 ld $01 1150 ld(0b0001) #68 LEDs |*OOO| 013a 0003 ld $03 1151 ld(0b0011) #68 LEDs |**OO| 013b 0007 ld $07 1152 ld(0b0111) #68 LEDs |***O| 013c 000f ld $0f 1153 ld(0b1111) #68 LEDs |****| 013d 000e ld $0e 1154 ld(0b1110) #68 LEDs |O***| 013e 000c ld $0c 1155 ld(0b1100) #68 LEDs |OO**| 013f 0008 ld $08 1156 ld(0b1000) #68 LEDs |OOO*| 0140 0004 ld $04 1157 ld(0b0100) #68 LEDs |OO*O| 0141 0002 ld $02 1158 ld(0b0010) #68 LEDs |O*OO| 0142 0001 ld $01 1159 ld(0b0001) #68 LEDs |*OOO| 0143 0002 ld $02 1160 ld(0b0010) #68 LEDs |O*OO| 0144 0004 ld $04 1161 ld(0b0100) #68 LEDs |OO*O| 0145 0008 ld $08 1162 ld(0b1000) #68 LEDs |OOO*| 0146 000c ld $0c 1163 ld(0b1100) #68 LEDs |OO**| 0147 000e ld $0e 1164 ld(0b1110) #68 LEDs |O***| offset -1 1165 label('.leds#69') .leds#69: 0148 c214 st [$14] 1166 st([xoutMask]) #69 Sound bits will be re-enabled below 0149 0010 ld $10 1167 ld(vPulse*2) #70 vPulse default length when not modulated 014a c20d st [$0d] 1168 st([videoPulse]) #71 1169 1170 # When the total number of scan lines per frame is not an exact multiple of the 1171 # (4) channels, there will be an audible discontinuity if no measure is taken. 1172 # This static noise can be suppressed by swallowing the first `lines mod 4' 1173 # partial samples after transitioning into vertical blank. This is easiest if 1174 # the modulo is 0 (do nothing), 1 (reset sample when entering the last visible 1175 # scan line), or 2 (reset sample while in the first blank scan line). For the 1176 # last case there is no solution yet: give a warning. 1177 extra = 0 1178 if soundDiscontinuity == 2: 1179 st(sample, [sample]) # Sound continuity 1180 extra += 1 1181 if soundDiscontinuity > 2: 1182 highlight('Warning: sound discontinuity not suppressed') 1183 1184 # vCPU interrupt 014b 010e ld [$0e] 1185 ld([frameCount]) #72 1186 beq('vBlankFirst#75') #73 014c f052 beq vBlankFirst#75 1187 014d 0055 ld $55 1188 runVcpu(186-74-extra, #74 Application cycles (scan line 0) 014e c21e st [$1e] 014f 1505 ld [$05],y 0150 e0ff jmp y,$ff 0151 0023 ld $23 1189 '---D line 0 no timeout', 1190 returnTo='vBlankFirst#186') 1191 1192 label('vBlankFirst#75') vBlankFirst#75: 0152 1412 ld $12,y 1193 ld(hi('vBlankFirst#78'),Y) #75 0153 e000 jmp y,$00 1194 jmp(Y,'vBlankFirst#78') #76 0154 1401 ld $01,y 1195 ld(hi(vIRQ_v5),Y) #77 1196 label('vBlankFirst#186') 1197 1198 # Mitigation for rogue channelMask (3 cycles) vBlankFirst#186: 0155 0121 ld [$21] 1199 ld([channelMask]) #186 Normalize channelMask, for robustness 0156 20fb anda $fb 1200 anda(0b11111011) #187 0157 c221 st [$21] 1201 st([channelMask]) #188 1202 1203 # Sound on/off (6 cycles) 0158 012c ld [$2c] 1204 ld([soundTimer]) #189 Sound on/off 0159 ec5c bne $015c 1205 bne(pc()+3) #190 015a fc5d bra $015d 1206 bra(pc()+3) #191 015b 0000 ld $00 1207 ld(0) #192 Keeps sound unchanged (should be off here) 015c 00f0 ld $f0 1208 ld(0xf0) #192(!) Turns sound back on 015d 4114 ora [$14] 1209 ora([xoutMask]) #193 015e c214 st [$14] 1210 st([xoutMask]) #194 1211 1212 # Sound timer count down (5 cycles) 015f 012c ld [$2c] 1213 ld([soundTimer]) #195 Sound timer 0160 f063 beq $0163 1214 beq(pc()+3) #196 0161 fc64 bra $0164 1215 bra(pc()+3) #197 0162 a001 suba $01 1216 suba(1) #198 0163 0000 ld $00 1217 ld(0) #198 0164 c22c st [$2c] 1218 st([soundTimer]) #199 1219 0165 191f ld [$1f],out 1220 ld([videoSync0],OUT) #0 1221 label('sound1') sound1: 0166 0102 ld [$02] 1222 ld([channel]) #1 Advance to next sound channel 0167 2121 anda [$21] 1223 anda([channelMask]) #2 0168 8001 adda $01 1224 adda(1) #3 0169 1920 ld [$20],out 1225 ld([videoSync1],OUT) #4 Start horizontal pulse 016a d602 st [$02],y 1226 st([channel],Y) #5 016b 007f ld $7f 1227 ld(0x7f) #6 Update sound channel 016c 29fe anda [y,$fe] 1228 anda([Y,oscL]) #7 016d 89fc adda [y,$fc] 1229 adda([Y,keyL]) #8 016e cafe st [y,$fe] 1230 st([Y,oscL]) #9 016f 3080 anda $80,x 1231 anda(0x80,X) #10 0170 0500 ld [x] 1232 ld([X]) #11 0171 89ff adda [y,$ff] 1233 adda([Y,oscH]) #12 0172 89fd adda [y,$fd] 1234 adda([Y,keyH]) #13 0173 caff st [y,$ff] 1235 st([Y,oscH]) #14 0174 20fc anda $fc 1236 anda(0xfc) #15 0175 69fb xora [y,$fb] 1237 xora([Y,wavX]) #16 0176 1200 ld ac,x 1238 ld(AC,X) #17 0177 09fa ld [y,$fa] 1239 ld([Y,wavA]) #18 0178 1407 ld $07,y 1240 ld(soundTable>>8,Y) #19 0179 8d00 adda [y,x] 1241 adda([Y,X]) #20 017a e87d blt $017d 1242 bmi(pc()+3) #21 017b fc7e bra $017e 1243 bra(pc()+3) #22 017c 203f anda $3f 1244 anda(63) #23 017d 003f ld $3f 1245 ld(63) #23(!) 017e 8103 adda [$03] 1246 adda([sample]) #24 017f c203 st [$03] 1247 st([sample]) #25 1248 0180 0113 ld [$13] 1249 ld([xout]) #26 Gets copied to XOUT 0181 1412 ld $12,y 1250 ld(hi('vBlankLast#34'),Y) #27 Prepare jumping out of page in last line 0182 191f ld [$1f],out 1251 ld([videoSync0],OUT) #28 End horizontal pulse 1252 1253 # Count through the vertical blank interval until its last scan line 0183 0109 ld [$09] 1254 ld([videoY]) #29 1255 bpl('.vBlankLast#32') #30 0184 f4b1 bge .vBlankLast#32 0185 8002 adda $02 1256 adda(2) #31 0186 c209 st [$09] 1257 st([videoY]) #32 1258 1259 # Determine if we're in the vertical sync pulse 0187 a0bd suba $bd 1260 suba(1-2*(vBack+vPulse-1)) #33 Prepare sync values 0188 ec8d bne .prepSync36 1261 bne('.prepSync36') #34 Tests for start of vPulse 0189 a10d suba [$0d] 1262 suba([videoPulse]) #35 018a 0040 ld $40 1263 ld(syncBits^vSync) #36 Entering vertical sync pulse 018b fc92 bra .prepSync39 1264 bra('.prepSync39') #37 018c c21f st [$1f] 1265 st([videoSync0]) #38 1266 label('.prepSync36') .prepSync36: 018d ec91 bne .prepSync38 1267 bne('.prepSync38') #36 Tests for end of vPulse 018e 00c0 ld $c0 1268 ld(syncBits) #37 018f fc93 bra .prepSync40 1269 bra('.prepSync40') #38 Entering vertical back porch 0190 c21f st [$1f] 1270 st([videoSync0]) #39 1271 label('.prepSync38') .prepSync38: 0191 011f ld [$1f] 1272 ld([videoSync0]) #38 Load current value 1273 label('.prepSync39') .prepSync39: 0192 0200 nop 1274 nop() #39 1275 label('.prepSync40') .prepSync40: 0193 6040 xora $40 1276 xora(hSync) #40 Precompute, as during the pulse there is no time 0194 c220 st [$20] 1277 st([videoSync1]) #41 1278 1279 # Capture the serial input before the '595 shifts it out 0195 0109 ld [$09] 1280 ld([videoY]) #42 Capture serial input 0196 60cf xora $cf 1281 xora(1-2*(vBack-1-1)) #43 Exactly when the 74HC595 has captured all 8 controller bits 0197 ec9a bne $019a 1282 bne(pc()+3) #44 0198 fc9b bra $019b 1283 bra(pc()+3) #45 0199 c30f st in,[$0f] 1284 st(IN, [serialRaw]) #46 019a c000 st $00,[$00] 1285 st(0,[0]) #46(!) Reinitialize carry lookup, for robustness 1286 1287 # Update [xout] with the next sound sample every 4 scan lines. 1288 # Keep doing this on 'videoC equivalent' scan lines in vertical blank. 019b 0109 ld [$09] 1289 ld([videoY]) #47 019c 2006 anda $06 1290 anda(6) #48 1291 beq('vBlankSample') #49 019d f0a6 beq vBlankSample 019e 0103 ld [$03] 1292 ld([sample]) #50 1293 1294 label('vBlankNormal') vBlankNormal: 019f 00a4 ld $a4 1295 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 1296 bra('sound1') #199 01a5 191f ld [$1f],out 1297 ld([videoSync0],OUT) #0 1298 1299 label('vBlankSample') vBlankSample: 01a6 400f ora $0f 1300 ora(0x0f) #51 New sound sample is ready 01a7 2114 anda [$14] 1301 anda([xoutMask]) #52 01a8 c213 st [$13] 1302 st([xout]) #53 01a9 c003 st $03,[$03] 1303 st(sample, [sample]) #54 Reset for next sample 1304 01aa 00af ld $af 1305 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 1306 bra('sound1') #199 01b0 191f ld [$1f],out 1307 ld([videoSync0],OUT) #0 1308 1309 #----------------------------------------------------------------------- 1310 1311 label('.vBlankLast#32') .vBlankLast#32: 01b1 e025 jmp y,$25 1312 jmp(Y,'vBlankLast#34') #32 Jump out of page for space reasons 1313 #assert hi(controllerType) == hi(pc()) # Assume these share the high address 01b2 1401 ld $01,y 1314 ld(hi(pc()),Y) #33 1315 1316 label('vBlankLast#52') 1317 1318 # Respond to reset button (14 cycles) 1319 # - ResetTimer decrements as long as just [Start] is pressed down 1320 # - Reaching 0 (normal) or 128 (extended) triggers the soft reset sequence 1321 # - Initial value is 128 (or 255 at boot), first decrement, then check 1322 # - This starts vReset -> SYS_Reset_88 -> SYS_Exec_88 -> Reset.gcl -> Main.gcl 1323 # - Main.gcl then recognizes extended presses if resetTimer is 0..127 ("paasei") 1324 # - This requires a full cycle (4s) in the warm boot scenario 1325 # - Or a half cycle (2s) when pressing [Select] down during hard reset 1326 # - This furthermore requires >=1 frame (and <=128) to have passed between 1327 # reaching 128 and getting through Reset and the start of Main, while [Start] 1328 # was still pressed so the count reaches <128. Two reasonable expectations. 1329 # - The unintended power-up scenarios of ROMv1 (pulling SER_DATA low, or 1330 # pressing [Select] together with another button) now don't trigger anymore. 1331 vBlankLast#52: 01b3 0111 ld [$11] 1332 ld([buttonState]) #52 Check [Start] for soft reset 01b4 60ef xora $ef 1333 xora(~buttonStart) #53 01b5 ecbe bne .restart#56 1334 bne('.restart#56') #54 01b6 0112 ld [$12] 1335 ld([resetTimer]) #55 As long as button pressed 01b7 a001 suba $01 1336 suba(1) #56 ... count down the timer 01b8 c212 st [$12] 1337 st([resetTimer]) #57 01b9 207f anda $7f 1338 anda(127) #58 01ba f0c6 beq .restart#61 1339 beq('.restart#61') #59 Reset at 0 (normal 2s) or 128 (extended 4s) 01bb 00ee ld $ee 1340 ld((vReset&255)-2) #60 Start force reset when hitting 0 01bc fcc5 bra .restart#63 1341 bra('.restart#63') #61 ... otherwise do nothing yet 01bd fcc4 bra .restart#64 1342 bra('.restart#64') #62 1343 label('.restart#56') .restart#56: 01be 0001 ld $01 1344 wait(62-56) #56 01bf ecbf bne $01bf 01c0 a001 suba $01 01c1 0200 nop 01c2 0080 ld $80 1345 ld(128) #62 Not pressed, reset the timer 01c3 c212 st [$12] 1346 st([resetTimer]) #63 1347 label('.restart#64') .restart#64: 01c4 fccb bra .restart#66 1348 bra('.restart#66') #64 1349 label('.restart#63') .restart#63: 01c5 0200 nop 1350 nop() #63,65 1351 label('.restart#61') .restart#61: 01c6 c216 st [$16] 1352 st([vPC]) #61 Point vPC at vReset 01c7 0001 ld $01 1353 ld(vReset>>8) #62 01c8 c217 st [$17] 1354 st([vPC+1]) #63 01c9 0002 ld $02 1355 ld(hi('ENTER')) #64 Set active interpreter to vCPU 01ca c205 st [$05] 1356 st([vCpuSelect]) #65 1357 label('.restart#66') 1358 1359 # Switch video mode when (only) select is pressed (16 cycles) 1360 # XXX We could make this a vCPU interrupt .restart#66: 01cb 0111 ld [$11] 1361 ld([buttonState]) #66 Check [Select] to switch modes 01cc 60df xora $df 1362 xora(~buttonSelect) #67 Only trigger when just [Select] is pressed 01cd ece2 bne .select#70 1363 bne('.select#70') #68 01ce 010b ld [$0b] 1364 ld([videoModeC]) #69 01cf e8d5 blt .select#72 1365 bmi('.select#72') #70 Branch when line C is off 01d0 010a ld [$0a] 1366 ld([videoModeB]) #71 Rotate: Off->D->B->C 01d1 c20b st [$0b] 1367 st([videoModeC]) #72 01d2 010c ld [$0c] 1368 ld([videoModeD]) #73 01d3 c20a st [$0a] 1369 st([videoModeB]) #74 01d4 fcda bra .select#77 1370 bra('.select#77') #75 1371 label('.select#72') .select#72: 01d5 00f6 ld $f6 1372 ld('nopixels') #72,76 01d6 000a ld $0a 1373 ld('pixels') #73 Reset: On->D->B->C 01d7 c20b st [$0b] 1374 st([videoModeC]) #74 01d8 c20a st [$0a] 1375 st([videoModeB]) #75 01d9 0200 nop 1376 nop() #76 1377 label('.select#77') .select#77: 01da c20c st [$0c] 1378 st([videoModeD]) #77 01db 0035 ld $35 1379 wait(188-78) #78 Don't waste code space expanding runVcpu here 01dc ecdc bne $01dc 01dd a001 suba $01 01de 0200 nop 1380 # AC==255 now 01df c211 st [$11] 1381 st([buttonState]) #188 1382 bra('vBlankEnd#191') #189 01e0 fcea bra vBlankEnd#191 01e1 0000 ld $00 1383 ld(0) #190 1384 label('.select#70') 1385 1386 # Mitigation of runaway channel variable .select#70: 01e2 0102 ld [$02] 1387 ld([channel]) #70 Normalize channel, for robustness 01e3 2003 anda $03 1388 anda(0b00000011) #71 01e4 c202 st [$02] 1389 st([channel]) #72 Stop wild channel updates 1390 01e5 00ea ld $ea 1391 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 1392 1393 # AC==0 now 1394 label('vBlankEnd#191') vBlankEnd#191: 01ea 1401 ld $01,y 1395 ld(videoTop_v5>>8,Y) #191 01eb 09f9 ld [y,$f9] 1396 ld([Y,videoTop_v5]) #192 01ec c209 st [$09] 1397 st([videoY]) #193 01ed c21f st [$1f] 1398 st([frameX]) #194 01ee ecf1 bne $01f1 1399 bne(pc()+3) #195 01ef fcf2 bra $01f2 1400 bra(pc()+3) #196 01f0 0001 ld $01 1401 ld('videoA') #197 01f1 00ec ld $ec 1402 ld('videoF') #197(!) 01f2 c20d st [$0d] 1403 st([nextVideo]) #198 01f3 0102 ld [$02] 1404 ld([channel]) #199 Advance to next sound channel 01f4 2121 anda [$21] 1405 anda([channelMask]) #0 01f5 8001 adda $01 1406 adda(1) #1 01f6 1402 ld $02,y 1407 ld(hi('sound2'),Y) #2 01f7 e0b1 jmp y,$b1 1408 jmp(Y,'sound2') #3 01f8 1880 ld $80,out 1409 ld(syncBits^hSync,OUT) #4 Start horizontal pulse 1410 01f9 0200 nop 1411 fillers(until=0xff) 01fa 0200 nop 01fb 0200 nop * 6 times 1412 1413 #----------------------------------------------------------------------- 1414 # Return point for vCPU slices during visible screen area 1415 #----------------------------------------------------------------------- 1416 1417 assert pc() == 0x1ff # Enables runVcpu() to re-enter into the next page 01ff fcae bra sound3 1418 bra('sound3') #200,0 1419 1420 #----------------------------------------------------------------------- 1421 # 1422 # $0200 ROM page 2: Video loop visible scanlines 1423 # 1424 #----------------------------------------------------------------------- 1425 align(0x100, size=0x100) 0200 0102 ld [$02] 1426 ld([channel]) #1 Advance to next sound channel 1427 1428 # Back porch A: first of 4 repeated scan lines 1429 # - Fetch next Yi and store it for retrieval in the next scan lines 1430 # - Calculate Xi from dXi, but there is no cycle time left to store it as well 1431 label('videoA') videoA: 0201 00ca ld $ca 1432 ld('videoB') #29 1st scanline of 4 (always visible) 0202 c20d st [$0d] 1433 st([nextVideo]) #30 0203 1401 ld $01,y 1434 ld(videoTable>>8,Y) #31 0204 1109 ld [$09],x 1435 ld([videoY],X) #32 0205 0d00 ld [y,x] 1436 ld([Y,X]) #33 0206 de00 st [y,x++] 1437 st([Y,Xpp]) #34 Just X++ 0207 c220 st [$20] 1438 st([frameY]) #35 0208 0d00 ld [y,x] 1439 ld([Y,X]) #36 0209 911f adda [$1f],x 1440 adda([frameX],X) #37 1441 label('pixels') pixels: 020a 1520 ld [$20],y 1442 ld([frameY],Y) #38 020b 00c0 ld $c0 1443 ld(syncBits) #39 1444 1445 # Stream 160 pixels from memory location onwards 1446 # Superimpose the sync signal bits to be robust against misprogramming 1447 for i in range(qqVgaWidth): 020c 5d00 ora [y,x++],out 1448 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 1449 ld(syncBits,OUT) #0 Back to black 1450 1451 # Front porch 02ad 0102 ld [$02] 1452 ld([channel]) #1 Advance to next sound channel 1453 label('sound3') # Return from vCPU interpreter sound3: 02ae 2121 anda [$21] 1454 anda([channelMask]) #2 02af 8001 adda $01 1455 adda(1) #3 02b0 1880 ld $80,out 1456 ld(syncBits^hSync,OUT) #4 Start horizontal pulse 1457 1458 # Horizontal sync and sound channel update for scanlines outside vBlank 1459 label('sound2') sound2: 02b1 d602 st [$02],y 1460 st([channel],Y) #5 02b2 007f ld $7f 1461 ld(0x7f) #6 02b3 29fe anda [y,$fe] 1462 anda([Y,oscL]) #7 02b4 89fc adda [y,$fc] 1463 adda([Y,keyL]) #8 02b5 cafe st [y,$fe] 1464 st([Y,oscL]) #9 02b6 3080 anda $80,x 1465 anda(0x80,X) #10 02b7 0500 ld [x] 1466 ld([X]) #11 02b8 89ff adda [y,$ff] 1467 adda([Y,oscH]) #12 02b9 89fd adda [y,$fd] 1468 adda([Y,keyH]) #13 02ba caff st [y,$ff] 1469 st([Y,oscH] ) #14 02bb 20fc anda $fc 1470 anda(0xfc) #15 02bc 69fb xora [y,$fb] 1471 xora([Y,wavX]) #16 02bd 1200 ld ac,x 1472 ld(AC,X) #17 02be 09fa ld [y,$fa] 1473 ld([Y,wavA]) #18 02bf 1407 ld $07,y 1474 ld(soundTable>>8,Y) #19 02c0 8d00 adda [y,x] 1475 adda([Y,X]) #20 02c1 e8c4 blt $02c4 1476 bmi(pc()+3) #21 02c2 fcc5 bra $02c5 1477 bra(pc()+3) #22 02c3 203f anda $3f 1478 anda(63) #23 02c4 003f ld $3f 1479 ld(63) #23(!) 02c5 8103 adda [$03] 1480 adda([sample]) #24 02c6 c203 st [$03] 1481 st([sample]) #25 1482 02c7 0113 ld [$13] 1483 ld([xout]) #26 Gets copied to XOUT 02c8 fd0d bra [$0d] 1484 bra([nextVideo]) #27 02c9 18c0 ld $c0,out 1485 ld(syncBits,OUT) #28 End horizontal pulse 1486 1487 # Back porch B: second of 4 repeated scan lines 1488 # - Recompute Xi from dXi and store for retrieval in the next scan lines 1489 label('videoB') videoB: 02ca 00d3 ld $d3 1490 ld('videoC') #29 2nd scanline of 4 02cb c20d st [$0d] 1491 st([nextVideo]) #30 02cc 1401 ld $01,y 1492 ld(videoTable>>8,Y) #31 02cd 0109 ld [$09] 1493 ld([videoY]) #32 02ce 9001 adda $01,x 1494 adda(1,X) #33 02cf 011f ld [$1f] 1495 ld([frameX]) #34 02d0 8d00 adda [y,x] 1496 adda([Y,X]) #35 02d1 fd0a bra [$0a] 1497 bra([videoModeB]) #36 02d2 d21f st [$1f],x 1498 st([frameX],X) #37 Store in RAM and X 1499 1500 # Back porch C: third of 4 repeated scan lines 1501 # - Nothing new to for video do as Yi and Xi are known, 1502 # - This is the time to emit and reset the next sound sample 1503 label('videoC') videoC: 02d3 00dc ld $dc 1504 ld('videoD') #29 3rd scanline of 4 02d4 c20d st [$0d] 1505 st([nextVideo]) #30 02d5 0103 ld [$03] 1506 ld([sample]) #31 New sound sample is ready (didn't fit in the audio loop) 02d6 400f ora $0f 1507 ora(0x0f) #32 02d7 2114 anda [$14] 1508 anda([xoutMask]) #33 02d8 c213 st [$13] 1509 st([xout]) #34 Update [xout] with new sample (4 channels just updated) 02d9 c003 st $03,[$03] 1510 st(sample, [sample]) #35 Reset for next sample 02da fd0b bra [$0b] 1511 bra([videoModeC]) #36 02db 111f ld [$1f],x 1512 ld([frameX],X) #37 1513 1514 # Back porch D: last of 4 repeated scan lines 1515 # - Calculate the next frame index 1516 # - Decide if this is the last line or not 1517 label('videoD') # Default video mode videoD: 02dc 111f ld [$1f],x 1518 ld([frameX], X) #29 4th scanline of 4 02dd 0109 ld [$09] 1519 ld([videoY]) #30 02de a0ee suba $ee 1520 suba((120-1)*2) #31 1521 beq('.lastpixels#34') #32 02df f0e5 beq .lastpixels#34 02e0 80f0 adda $f0 1522 adda(120*2) #33 More pixel lines to go 02e1 c209 st [$09] 1523 st([videoY]) #34 02e2 0001 ld $01 1524 ld('videoA') #35 02e3 fd0c bra [$0c] 1525 bra([videoModeD]) #36 02e4 c20d st [$0d] 1526 st([nextVideo]) #37 1527 1528 label('.lastpixels#34') 1529 if soundDiscontinuity == 1: .lastpixels#34: 02e5 c003 st $03,[$03] 1530 st(sample, [sample]) #34 Sound continuity 1531 else: 1532 nop() #34 02e6 00e9 ld $e9 1533 ld('videoE') #35 No more pixel lines to go 02e7 fd0c bra [$0c] 1534 bra([videoModeD]) #36 02e8 c20d st [$0d] 1535 st([nextVideo]) #37 1536 1537 # Back porch "E": after the last line 1538 # - Go back and and enter vertical blank (program page 2) 1539 label('videoE') # Exit visible area videoE: 02e9 1401 ld $01,y 1540 ld(hi('vBlankStart'),Y) #29 Return to vertical blank interval 02ea e004 jmp y,$04 1541 jmp(Y,'vBlankStart') #30 02eb 00c0 ld $c0 1542 ld(syncBits) #31 1543 1544 # Video mode that blacks out one or more pixel lines from the top of screen. 1545 # This yields some speed, but also frees up screen memory for other purposes. 1546 # Note: Sound output becomes choppier the more pixel lines are skipped 1547 # Note: The vertical blank driver leaves 0x80 behind in [videoSync1] 1548 label('videoF') videoF: 02ec 0120 ld [$20] 1549 ld([videoSync1]) #29 Completely black pixel line 02ed 8080 adda $80 1550 adda(0x80) #30 02ee d220 st [$20],x 1551 st([videoSync1],X) #31 02ef 011f ld [$1f] 1552 ld([frameX]) #32 02f0 a500 suba [x] 1553 suba([X]) #33 Decrements every two VGA scanlines 02f1 f0f4 beq .videoF#36 1554 beq('.videoF#36') #34 02f2 c21f st [$1f] 1555 st([frameX]) #35 02f3 fcf6 bra nopixels 1556 bra('nopixels') #36 1557 label('.videoF#36') .videoF#36: 02f4 0001 ld $01 1558 ld('videoA') #36,37 Transfer to visible screen area 02f5 c20d st [$0d] 1559 st([nextVideo]) #37 1560 # 1561 # Alternative for pixel burst: faster application mode 1562 label('nopixels') nopixels: 02f6 00ff ld $ff 1563 runVcpu(200-38, 'ABCD line 40-520', 02f7 c21e st [$1e] 02f8 1505 ld [$05],y 02f9 e0ff jmp y,$ff 02fa 003c ld $3c 1564 returnTo=0x1ff) #38 Application interpreter (black scanlines) 1565 1566 #----------------------------------------------------------------------- 1567 # 1568 # $0300 ROM page 3: Application interpreter primary page 1569 # 1570 #----------------------------------------------------------------------- 1571 1572 # Enter the timing-aware application interpreter (aka virtual CPU, vCPU) 1573 # 1574 # This routine will execute as many as possible instructions in the 1575 # allotted time. When time runs out, it synchronizes such that the total 1576 # duration matches the caller's request. Durations are counted in `ticks', 1577 # which are multiples of 2 clock cycles. 1578 # 1579 # Synopsis: Use the runVcpu() macro as entry point 1580 1581 # We let 'ENTER' begin one word before the page boundary, for a bit extra 1582 # precious space in the packed interpreter code page. Although ENTER's 1583 # first instruction is bra() which normally doesn't cross page boundaries, 1584 # in this case it will still jump into the right space, because branches 1585 # from $xxFF land in the next page anyway. 1586 while pc()&255 < 255: 02fb 0200 nop 1587 nop() 02fc 0200 nop 02fd 0200 nop 02fe 0200 nop 1588 label('ENTER') ENTER: 02ff fc03 bra .next2 1589 bra('.next2') #0 Enter at '.next2' (so no startup overhead) 1590 # --- Page boundary --- 1591 align(0x100,size=0x100) 1592 label('NEXTY') # Alternative for REENTER NEXTY: 0300 1517 ld [$17],y 1593 ld([vPC+1],Y) #1 1594 1595 # Fetch next instruction and execute it, but only if there are sufficient 1596 # ticks left for the slowest instruction. 1597 label('NEXT') NEXT: 0301 8115 adda [$15] 1598 adda([vTicks]) #0 Track elapsed ticks (actually counting down: AC<0) 0302 e80b blt EXIT 1599 blt('EXIT') #1 Escape near time out 1600 label('.next2') .next2: 0303 c215 st [$15] 1601 st([vTicks]) #2 0304 0116 ld [$16] 1602 ld([vPC]) #3 Advance vPC 0305 8002 adda $02 1603 adda(2) #4 0306 d216 st [$16],x 1604 st([vPC],X) #5 0307 0d00 ld [y,x] 1605 ld([Y,X]) #6 Fetch opcode (actually a branch target) 0308 de00 st [y,x++] 1606 st([Y,Xpp]) #7 Just X++ 0309 fe00 bra ac 1607 bra(AC) #8 Dispatch 030a 0d00 ld [y,x] 1608 ld([Y,X]) #9 Prefetch operand 1609 1610 # Resync with video driver and transfer control 1611 label('EXIT') EXIT: 030b 800e adda $0e 1612 adda(maxTicks) #3 1613 label('RESYNC') RESYNC: 030c e40c bgt RESYNC 1614 bgt(pc()&255) #4 Resync 030d a001 suba $01 1615 suba(1) #5 030e 1401 ld $01,y 1616 ld(hi('vBlankStart'),Y) #6 030f e11e jmp y,[$1e] 1617 jmp(Y,[vReturn]) #7 To video driver 0310 0000 ld $00 1618 ld(0) #8 AC should be 0 already. Still.. 1619 assert vCPU_overhead == 9 1620 1621 # Instruction LDWI: Load immediate word constant (vAC=D), 20 cycles 1622 label('LDWI') LDWI: 0311 c218 st [$18] 1623 st([vAC]) #10 0312 de00 st [y,x++] 1624 st([Y,Xpp]) #11 Just X++ 0313 0d00 ld [y,x] 1625 ld([Y,X]) #12 Fetch second operand 0314 c219 st [$19] 1626 st([vAC+1]) #13 0315 0116 ld [$16] 1627 ld([vPC]) #14 Advance vPC one more 0316 8001 adda $01 1628 adda(1) #15 0317 c216 st [$16] 1629 st([vPC]) #16 0318 00f6 ld $f6 1630 ld(-20/2) #17 0319 fc01 bra NEXT 1631 bra('NEXT') #18 1632 #dummy() #19 Overlap 1633 # 1634 # Instruction LD: Load byte from zero page (vAC=[D]), 22 cycles 1635 label('LD') LD: 031a 1200 ld ac,x 1636 ld(AC,X) #10,19 031b 0500 ld [x] 1637 ld([X]) #11 031c 1404 ld $04,y 1638 ld(hi('ld#15'),Y) #12 031d e013 jmp y,$13 1639 jmp(Y,'ld#15') #13 031e c218 st [$18] 1640 st([vAC]) #14 1641 1642 # Instruction CMPHS: Adjust high byte for signed compare (vACH=XXX), 28 cycles 1643 label('CMPHS_v5') CMPHS_v5: 031f 140b ld $0b,y 1644 ld(hi('cmphs#13'),Y) #10 0320 e0d2 jmp y,$d2 1645 jmp(Y,'cmphs#13') #11 1646 #ld(AC,X) #12 Overlap 1647 # 1648 # Instruction LDW: Load word from zero page (vAC=[D]+256*[D+1]), 20 cycles 1649 label('LDW') LDW: 0321 1200 ld ac,x 1650 ld(AC,X) #10,12 0322 8001 adda $01 1651 adda(1) #11 0323 c21d st [$1d] 1652 st([vTmp]) #12 Address of high byte 0324 0500 ld [x] 1653 ld([X]) #13 0325 c218 st [$18] 1654 st([vAC]) #14 0326 111d ld [$1d],x 1655 ld([vTmp],X) #15 0327 0500 ld [x] 1656 ld([X]) #16 0328 c219 st [$19] 1657 st([vAC+1]) #17 0329 fc01 bra NEXT 1658 bra('NEXT') #18 032a 00f6 ld $f6 1659 ld(-20/2) #19 1660 1661 # Instruction STW: Store word in zero page ([D],[D+1]=vAC&255,vAC>>8), 20 cycles 1662 label('STW') STW: 032b 1200 ld ac,x 1663 ld(AC,X) #10,20 032c 8001 adda $01 1664 adda(1) #11 032d c21d st [$1d] 1665 st([vTmp]) #12 Address of high byte 032e 0118 ld [$18] 1666 ld([vAC]) #13 032f c600 st [x] 1667 st([X]) #14 0330 111d ld [$1d],x 1668 ld([vTmp],X) #15 0331 0119 ld [$19] 1669 ld([vAC+1]) #16 0332 c600 st [x] 1670 st([X]) #17 0333 fc01 bra NEXT 1671 bra('NEXT') #18 0334 00f6 ld $f6 1672 ld(-20/2) #19 1673 1674 # Instruction BCC: Test AC sign and branch conditionally, 28 cycles 1675 label('BCC') BCC: 0335 0119 ld [$19] 1676 ld([vAC+1]) #10 First inspect high byte of vAC 0336 ec40 bne .bcc#13 1677 bne('.bcc#13') #11 0337 c21d st [$1d] 1678 st([vTmp]) #12 0338 0118 ld [$18] 1679 ld([vAC]) #13 Additionally inspect low byte of vAC 0339 f043 beq .bcc#16 1680 beq('.bcc#16') #14 033a 0001 ld $01 1681 ld(1) #15 033b c21d st [$1d] 1682 st([vTmp]) #16 033c 0d00 ld [y,x] 1683 ld([Y,X]) #17 Operand is the conditional 1684 label('.bcc#18') .bcc#18: 033d fe00 bra ac 1685 bra(AC) #18 033e 011d ld [$1d] 1686 ld([vTmp]) #19 1687 1688 # Conditional EQ: Branch if zero (if(vACL==0)vPCL=D) 1689 label('EQ') EQ: 033f ec45 bne .bcc#22 1690 bne('.bcc#22') #20 1691 label('.bcc#13') .bcc#13: 0340 f048 beq .bcc#23 1692 beq('.bcc#23') #21,13 AC=0 in EQ, AC!=0 from BCC... Overlap with BCC 0341 0d00 ld [y,x] 1693 ld([Y,X]) #22,14 Overlap with BCC 1694 # 1695 # (continue BCC) 1696 #label('.bcc#13') 1697 #dummy() #13 1698 #dummy() #14 0342 0200 nop 1699 nop() #15 1700 label('.bcc#16') .bcc#16: 0343 fc3d bra .bcc#18 1701 bra('.bcc#18') #16 0344 0d00 ld [y,x] 1702 ld([Y,X]) #17 Operand is the conditional 1703 label('.bcc#22') .bcc#22: 0345 0116 ld [$16] 1704 ld([vPC]) #22 False condition 0346 fc4a bra .bcc#25 1705 bra('.bcc#25') #23 0347 8001 adda $01 1706 adda(1) #24 1707 label('.bcc#23') .bcc#23: 0348 de00 st [y,x++] 1708 st([Y,Xpp]) #23 Just X++ True condition 0349 0d00 ld [y,x] 1709 ld([Y,X]) #24 1710 label('.bcc#25') .bcc#25: 034a c216 st [$16] 1711 st([vPC]) #25 034b fc01 bra NEXT 1712 bra('NEXT') #26 034c 00f2 ld $f2 1713 ld(-28/2) #27 1714 1715 # Conditional GT: Branch if positive (if(vACL>0)vPCL=D) 1716 label('GT') GT: 034d f845 ble .bcc#22 1717 ble('.bcc#22') #20 034e e448 bgt .bcc#23 1718 bgt('.bcc#23') #21 034f 0d00 ld [y,x] 1719 ld([Y,X]) #22 1720 1721 # Conditional LT: Branch if negative (if(vACL<0)vPCL=D) 1722 label('LT') LT: 0350 f445 bge .bcc#22 1723 bge('.bcc#22') #20 0351 e848 blt .bcc#23 1724 blt('.bcc#23') #21 0352 0d00 ld [y,x] 1725 ld([Y,X]) #22 1726 1727 # Conditional GE: Branch if positive or zero (if(vACL>=0)vPCL=D) 1728 label('GE') GE: 0353 e845 blt .bcc#22 1729 blt('.bcc#22') #20 0354 f448 bge .bcc#23 1730 bge('.bcc#23') #21 0355 0d00 ld [y,x] 1731 ld([Y,X]) #22 1732 1733 # Conditional LE: Branch if negative or zero (if(vACL<=0)vPCL=D) 1734 label('LE') LE: 0356 e445 bgt .bcc#22 1735 bgt('.bcc#22') #20 0357 f848 ble .bcc#23 1736 ble('.bcc#23') #21 0358 0d00 ld [y,x] 1737 ld([Y,X]) #22 1738 1739 # Instruction LDI: Load immediate small positive constant (vAC=D), 16 cycles 1740 label('LDI') LDI: 0359 c218 st [$18] 1741 st([vAC]) #10 035a 0000 ld $00 1742 ld(0) #11 035b c219 st [$19] 1743 st([vAC+1]) #12 035c fc00 bra NEXTY 1744 bra('NEXTY') #13 035d 00f8 ld $f8 1745 ld(-16/2) #14 1746 1747 # Instruction ST: Store byte in zero page ([D]=vAC&255), 16 cycles 1748 label('ST') ST: 035e 1200 ld ac,x 1749 ld(AC,X) #10,15 035f 0118 ld [$18] 1750 ld([vAC]) #11 0360 c600 st [x] 1751 st([X]) #12 0361 fc00 bra NEXTY 1752 bra('NEXTY') #13 0362 00f8 ld $f8 1753 ld(-16/2) #14 1754 1755 # Instruction POP: Pop address from stack (vLR,vSP==[vSP]+256*[vSP+1],vSP+2), 26 cycles 1756 label('POP') POP: 0363 111c ld [$1c],x 1757 ld([vSP],X) #10,15 0364 0500 ld [x] 1758 ld([X]) #11 0365 c21a st [$1a] 1759 st([vLR]) #12 0366 011c ld [$1c] 1760 ld([vSP]) #13 0367 9001 adda $01,x 1761 adda(1,X) #14 0368 0500 ld [x] 1762 ld([X]) #15 0369 c21b st [$1b] 1763 st([vLR+1]) #16 036a 011c ld [$1c] 1764 ld([vSP]) #17 036b 8002 adda $02 1765 adda(2) #18 036c c21c st [$1c] 1766 st([vSP]) #19 1767 label('.pop#20') .pop#20: 036d 0116 ld [$16] 1768 ld([vPC]) #20 036e a001 suba $01 1769 suba(1) #21 036f c216 st [$16] 1770 st([vPC]) #22 0370 fc00 bra NEXTY 1771 bra('NEXTY') #23 0371 00f3 ld $f3 1772 ld(-26/2) #24 1773 1774 # Conditional NE: Branch if not zero (if(vACL!=0)vPCL=D) 1775 label('NE') NE: 0372 f045 beq .bcc#22 1776 beq('.bcc#22') #20,25 0373 ec48 bne .bcc#23 1777 bne('.bcc#23') #21 0374 0d00 ld [y,x] 1778 ld([Y,X]) #22 1779 1780 # Instruction PUSH: Push vLR on stack ([vSP-2],v[vSP-1],vSP=vLR&255,vLR>>8,vLR-2), 26 cycles 1781 label('PUSH') PUSH: 0375 011c ld [$1c] 1782 ld([vSP]) #10 0376 b001 suba $01,x 1783 suba(1,X) #11 0377 011b ld [$1b] 1784 ld([vLR+1]) #12 0378 c600 st [x] 1785 st([X]) #13 0379 011c ld [$1c] 1786 ld([vSP]) #14 037a a002 suba $02 1787 suba(2) #15 037b d21c st [$1c],x 1788 st([vSP],X) #16 037c 011a ld [$1a] 1789 ld([vLR]) #17 037d fc6d bra .pop#20 1790 bra('.pop#20') #18 037e c600 st [x] 1791 st([X]) #19 1792 1793 # Instruction LUP: ROM lookup (vAC=ROM[vAC+D]), 26 cycles 1794 label('LUP') LUP: 037f 1519 ld [$19],y 1795 ld([vAC+1],Y) #10 0380 e0fb jmp y,$fb 1796 jmp(Y,251) #11 Trampoline offset 0381 8118 adda [$18] 1797 adda([vAC]) #12 1798 1799 # Instruction ANDI: Logical-AND with small constant (vAC&=D), 22 cycles 1800 label('ANDI') ANDI: 0382 1404 ld $04,y 1801 ld(hi('andi#13'),Y) #10 0383 e011 jmp y,$11 1802 jmp(Y,'andi#13') #11 0384 2118 anda [$18] 1803 anda([vAC]) #12 1804 1805 # Instruction CALLI: Goto immediate address and remember vPC (vLR,vPC=vPC+3,$HHLL-2), 28 cycles 1806 label('CALLI_v5') CALLI_v5: 0385 140b ld $0b,y 1807 ld(hi('calli#13'),Y) #10 0386 e0c6 jmp y,$c6 1808 jmp(Y,'calli#13') #11 0387 0116 ld [$16] 1809 ld([vPC]) #12 1810 1811 # Instruction ORI: Logical-OR with small constant (vAC|=D), 14 cycles 1812 label('ORI') ORI: 0388 4118 ora [$18] 1813 ora([vAC]) #10 0389 c218 st [$18] 1814 st([vAC]) #11 038a fc01 bra NEXT 1815 bra('NEXT') #12 038b 00f9 ld $f9 1816 ld(-14/2) #13 1817 1818 # Instruction XORI: Logical-XOR with small constant (vAC^=D), 14 cycles 1819 label('XORI') XORI: 038c 6118 xora [$18] 1820 xora([vAC]) #10 038d c218 st [$18] 1821 st([vAC]) #11 038e fc01 bra NEXT 1822 bra('NEXT') #12 038f 00f9 ld $f9 1823 ld(-14/2) #13 1824 1825 # Instruction BRA: Branch unconditionally (vPC=(vPC&0xff00)+D), 14 cycles 1826 label('BRA') BRA: 0390 c216 st [$16] 1827 st([vPC]) #10 0391 fc00 bra NEXTY 1828 bra('NEXTY') #11 0392 00f9 ld $f9 1829 ld(-14/2) #12 1830 1831 # Instruction INC: Increment zero page byte ([D]++), 20 cycles 1832 label('INC') INC: 0393 1200 ld ac,x 1833 ld(AC,X) #10,13 0394 1404 ld $04,y 1834 ld(hi('inc#14'),Y) #11 0395 e0e4 jmp y,$e4 1835 jmp(Y,'inc#14') #12 0396 0001 ld $01 1836 ld(1) #13 1837 1838 # Instruction CMPHU: Adjust high byte for unsigned compare (vACH=XXX), 28 cycles 1839 label('CMPHU_v5') CMPHU_v5: 0397 140b ld $0b,y 1840 ld(hi('cmphu#13'),Y) #10 0398 e0de jmp y,$de 1841 jmp(Y,'cmphu#13') #11 1842 #ld(AC,X) #12 Overlap 1843 # 1844 # Instruction ADDW: Word addition with zero page (vAC+=[D]+256*[D+1]), 28 cycles 1845 label('ADDW') 1846 # The non-carry paths could be 26 cycles at the expense of (much) more code. 1847 # But a smaller size is better so more instructions fit in this code page. 1848 # 28 cycles is still 4.5 usec. The 6502 equivalent takes 20 cycles or 20 usec. ADDW: 0399 1200 ld ac,x 1849 ld(AC,X) #10,12 Address of low byte to be added 039a 8001 adda $01 1850 adda(1) #11 039b c21d st [$1d] 1851 st([vTmp]) #12 Address of high byte to be added 039c 0118 ld [$18] 1852 ld([vAC]) #13 Add the low bytes 039d 8500 adda [x] 1853 adda([X]) #14 039e c218 st [$18] 1854 st([vAC]) #15 Store low result 039f e8a3 blt .addw#18 1855 bmi('.addw#18') #16 Now figure out if there was a carry 03a0 a500 suba [x] 1856 suba([X]) #17 Gets back the initial value of vAC 03a1 fca5 bra .addw#20 1857 bra('.addw#20') #18 03a2 4500 ora [x] 1858 ora([X]) #19 Carry in bit 7 1859 label('.addw#18') .addw#18: 03a3 2500 anda [x] 1860 anda([X]) #18 Carry in bit 7 03a4 0200 nop 1861 nop() #19 1862 label('.addw#20') .addw#20: 03a5 3080 anda $80,x 1863 anda(0x80,X) #20 Move carry to bit 0 03a6 0500 ld [x] 1864 ld([X]) #21 03a7 8119 adda [$19] 1865 adda([vAC+1]) #22 Add the high bytes with carry 03a8 111d ld [$1d],x 1866 ld([vTmp],X) #23 03a9 8500 adda [x] 1867 adda([X]) #24 03aa c219 st [$19] 1868 st([vAC+1]) #25 Store high result 03ab fc01 bra NEXT 1869 bra('NEXT') #26 03ac 00f2 ld $f2 1870 ld(-28/2) #27 1871 1872 # Instruction PEEK: Read byte from memory (vAC=[vAC]), 26 cycles 1873 label('PEEK') PEEK: 03ad 1404 ld $04,y 1874 ld(hi('peek'),Y) #10 03ae e062 jmp y,$62 1875 jmp(Y,'peek') #11 1876 #ld([vPC]) #12 Overlap 1877 # 1878 # Instruction SYS: Native call, <=256 cycles (<=128 ticks, in reality less) 1879 # 1880 # The 'SYS' vCPU instruction first checks the number of desired ticks given by 1881 # the operand. As long as there are insufficient ticks available in the current 1882 # time slice, the instruction will be retried. This will effectively wait for 1883 # the next scan line if the current slice is almost out of time. Then a jump to 1884 # native code is made. This code can do whatever it wants, but it must return 1885 # to the 'REENTER' label when done. When returning, AC must hold (the negative 1886 # of) the actual consumed number of whole ticks for the entire virtual 1887 # instruction cycle (from NEXT to NEXT). This duration may not exceed the prior 1888 # declared duration in the operand + 28 (or maxTicks). The operand specifies the 1889 # (negative) of the maximum number of *extra* ticks that the native call will 1890 # need. The GCL compiler automatically makes this calculation from gross number 1891 # of cycles to excess number of ticks. 1892 # SYS functions can modify vPC to implement repetition. For example to split 1893 # up work into multiple chucks. 1894 label('.sys#13') .sys#13: 03af 0116 ld [$16] 1895 ld([vPC]) #13,12 Retry until sufficient time 03b0 a002 suba $02 1896 suba(2) #14 03b1 c216 st [$16] 1897 st([vPC]) #15 03b2 fccb bra REENTER 1898 bra('REENTER') #16 03b3 00f6 ld $f6 1899 ld(-20/2) #17 1900 label('SYS') SYS: 03b4 8115 adda [$15] 1901 adda([vTicks]) #10 03b5 e8af blt .sys#13 1902 blt('.sys#13') #11 03b6 1523 ld [$23],y 1903 ld([sysFn+1],Y) #12 03b7 e122 jmp y,[$22] 1904 jmp(Y,[sysFn]) #13 1905 #dummy() #14 Overlap 1906 # 1907 # Instruction SUBW: Word subtract with zero page (AC-=[D]+256*[D+1]), 28 cycles 1908 # All cases can be done in 26 cycles, but the code will become much larger 1909 label('SUBW') SUBW: 03b8 1200 ld ac,x 1910 ld(AC,X) #10,14 Address of low byte to be subtracted 03b9 8001 adda $01 1911 adda(1) #11 03ba c21d st [$1d] 1912 st([vTmp]) #12 Address of high byte to be subtracted 03bb 0118 ld [$18] 1913 ld([vAC]) #13 03bc e8c1 blt .subw#16 1914 bmi('.subw#16') #14 03bd a500 suba [x] 1915 suba([X]) #15 03be c218 st [$18] 1916 st([vAC]) #16 Store low result 03bf fcc4 bra .subw#19 1917 bra('.subw#19') #17 03c0 4500 ora [x] 1918 ora([X]) #18 Carry in bit 7 1919 label('.subw#16') .subw#16: 03c1 c218 st [$18] 1920 st([vAC]) #16 Store low result 03c2 2500 anda [x] 1921 anda([X]) #17 Carry in bit 7 03c3 0200 nop 1922 nop() #18 1923 label('.subw#19') .subw#19: 03c4 3080 anda $80,x 1924 anda(0x80,X) #19 Move carry to bit 0 03c5 0119 ld [$19] 1925 ld([vAC+1]) #20 03c6 a500 suba [x] 1926 suba([X]) #21 03c7 111d ld [$1d],x 1927 ld([vTmp],X) #22 03c8 a500 suba [x] 1928 suba([X]) #23 03c9 c219 st [$19] 1929 st([vAC+1]) #24 1930 label('REENTER_28') REENTER_28: 03ca 00f2 ld $f2 1931 ld(-28/2) #25 1932 label('REENTER') REENTER: 03cb fc01 bra NEXT 1933 bra('NEXT') #26 Return from SYS calls 03cc 1517 ld [$17],y 1934 ld([vPC+1],Y) #27 1935 1936 # Instruction DEF: Define data or code (vAC,vPC=vPC+2,(vPC&0xff00)+D), 24 cycles 1937 label('DEF') DEF: 03cd 1404 ld $04,y 1938 ld(hi('def#13'),Y) #10 03ce e007 jmp y,$07 1939 jmp(Y,'def#13') #11 1940 #st([vTmp]) #12 Overlap 1941 # 1942 # Instruction CALL: Goto address and remember vPC (vLR,vPC=vPC+2,[D]+256*[D+1]-2), 26 cycles 1943 label('CALL') CALL: 03cf c21d st [$1d] 1944 st([vTmp]) #10,12 03d0 0116 ld [$16] 1945 ld([vPC]) #11 03d1 8002 adda $02 1946 adda(2) #12 Point to instruction after CALL 03d2 c21a st [$1a] 1947 st([vLR]) #13 03d3 0117 ld [$17] 1948 ld([vPC+1]) #14 03d4 c21b st [$1b] 1949 st([vLR+1]) #15 03d5 111d ld [$1d],x 1950 ld([vTmp],X) #16 03d6 0500 ld [x] 1951 ld([X]) #17 03d7 a002 suba $02 1952 suba(2) #18 Because NEXT will add 2 03d8 c216 st [$16] 1953 st([vPC]) #19 03d9 011d ld [$1d] 1954 ld([vTmp]) #20 03da 9001 adda $01,x 1955 adda(1,X) #21 03db 0500 ld [x] 1956 ld([X]) #22 03dc d617 st [$17],y 1957 st([vPC+1],Y) #23 03dd fc01 bra NEXT 1958 bra('NEXT') #24 03de 00f3 ld $f3 1959 ld(-26/2) #25 1960 1961 # Instruction ALLOC: Create or destroy stack frame (vSP+=D), 14 cycles 1962 label('ALLOC') ALLOC: 03df 811c adda [$1c] 1963 adda([vSP]) #10 03e0 c21c st [$1c] 1964 st([vSP]) #11 03e1 fc01 bra NEXT 1965 bra('NEXT') #12 03e2 00f9 ld $f9 1966 ld(-14/2) #13 1967 1968 # The instructions below are all implemented in the second code page. Jumping 1969 # back and forth makes each 6 cycles slower, but it also saves space in the 1970 # primary page for the instructions above. Most of them are in fact not very 1971 # critical, as evidenced by the fact that they weren't needed for the first 1972 # Gigatron applications (Snake, Racer, Mandelbrot, Loader). By providing them 1973 # in this way, at least they don't need to be implemented as a SYS extension. 1974 1975 # Instruction ADDI: Add small positive constant (vAC+=D), 28 cycles 1976 label('ADDI') ADDI: 03e3 1404 ld $04,y 1977 ld(hi('addi'),Y) #10 03e4 e018 jmp y,$18 1978 jmp(Y,'addi') #11 03e5 c21d st [$1d] 1979 st([vTmp]) #12 1980 1981 # Instruction SUBI: Subtract small positive constant (vAC+=D), 28 cycles 1982 label('SUBI') SUBI: 03e6 1404 ld $04,y 1983 ld(hi('subi'),Y) #10 03e7 e026 jmp y,$26 1984 jmp(Y,'subi') #11 03e8 c21d st [$1d] 1985 st([vTmp]) #12 1986 1987 # Instruction LSLW: Logical shift left (vAC<<=1), 28 cycles 1988 # Useful, because ADDW can't add vAC to itself. Also more compact. 1989 label('LSLW') LSLW: 03e9 1404 ld $04,y 1990 ld(hi('lslw'),Y) #10 03ea e035 jmp y,$35 1991 jmp(Y,'lslw') #11 03eb 0118 ld [$18] 1992 ld([vAC]) #12 1993 1994 # Instruction STLW: Store word in stack frame ([vSP+D],[vSP+D+1]=vAC&255,vAC>>8), 26 cycles 1995 label('STLW') STLW: 03ec 1404 ld $04,y 1996 ld(hi('stlw'),Y) #10 03ed e041 jmp y,$41 1997 jmp(Y,'stlw') #11 1998 #dummy() #12 Overlap 1999 # 2000 # Instruction LDLW: Load word from stack frame (vAC=[vSP+D]+256*[vSP+D+1]), 26 cycles 2001 label('LDLW') LDLW: 03ee 1404 ld $04,y 2002 ld(hi('ldlw'),Y) #10,12 03ef e04c jmp y,$4c 2003 jmp(Y,'ldlw') #11 2004 #dummy() #12 Overlap 2005 # 2006 # Instruction POKE: Write byte in memory ([[D+1],[D]]=vAC&255), 28 cycles 2007 label('POKE') POKE: 03f0 1404 ld $04,y 2008 ld(hi('poke'),Y) #10,12 03f1 e057 jmp y,$57 2009 jmp(Y,'poke') #11 03f2 c21d st [$1d] 2010 st([vTmp]) #12 2011 2012 # Instruction DOKE: Write word in memory ([[D+1],[D]],[[D+1],[D]+1]=vAC&255,vAC>>8), 28 cycles 2013 label('DOKE') DOKE: 03f3 1404 ld $04,y 2014 ld(hi('doke'),Y) #10 03f4 e06d jmp y,$6d 2015 jmp(Y,'doke') #11 03f5 c21d st [$1d] 2016 st([vTmp]) #12 2017 2018 # Instruction DEEK: Read word from memory (vAC=[vAC]+256*[vAC+1]), 28 cycles 2019 label('DEEK') DEEK: 03f6 1404 ld $04,y 2020 ld(hi('deek'),Y) #10 03f7 e07a jmp y,$7a 2021 jmp(Y,'deek') #11 2022 #dummy() #12 Overlap 2023 # 2024 # Instruction ANDW: Word logical-AND with zero page (vAC&=[D]+256*[D+1]), 28 cycles 2025 label('ANDW') ANDW: 03f8 1404 ld $04,y 2026 ld(hi('andw'),Y) #10,12 03f9 e086 jmp y,$86 2027 jmp(Y,'andw') #11 2028 #dummy() #12 Overlap 2029 # 2030 # Instruction ORW: Word logical-OR with zero page (vAC|=[D]+256*[D+1]), 28 cycles 2031 label('ORW') ORW: 03fa 1404 ld $04,y 2032 ld(hi('orw'),Y) #10,12 03fb e091 jmp y,$91 2033 jmp(Y,'orw') #11 2034 #dummy() #12 Overlap 2035 # 2036 # Instruction XORW: Word logical-XOR with zero page (vAC^=[D]+256*[D+1]), 26 cycles 2037 label('XORW') XORW: 03fc 1404 ld $04,y 2038 ld(hi('xorw'),Y) #10,12 03fd e09c jmp y,$9c 2039 jmp(Y,'xorw') #11 03fe c21d st [$1d] 2040 st([vTmp]) #12 2041 # We keep XORW 2 cycles faster than ANDW/ORW, because that 2042 # can be useful for comparing numbers for equality a tiny 2043 # bit faster than with SUBW 2044 2045 # Instruction RET: Function return (vPC=vLR-2), 16 cycles 2046 label('RET') RET: 03ff 011a ld [$1a] 2047 ld([vLR]) #10 2048 assert pc()&255 == 0 2049 2050 #----------------------------------------------------------------------- 2051 # 2052 # $0400 ROM page 4: Application interpreter extension 2053 # 2054 #----------------------------------------------------------------------- 2055 align(0x100, size=0x100) 2056 2057 # (Continue RET) 0400 a002 suba $02 2058 suba(2) #11 0401 c216 st [$16] 2059 st([vPC]) #12 0402 011b ld [$1b] 2060 ld([vLR+1]) #13 0403 c217 st [$17] 2061 st([vPC+1]) #14 0404 1403 ld $03,y 2062 ld(hi('REENTER'),Y) #15 0405 e0cb jmp y,$cb 2063 jmp(Y,'REENTER') #16 0406 00f6 ld $f6 2064 ld(-20/2) #17 2065 2066 # DEF implementation 2067 label('def#13') def#13: 0407 0116 ld [$16] 2068 ld([vPC]) #13 0408 8002 adda $02 2069 adda(2) #14 0409 c218 st [$18] 2070 st([vAC]) #15 040a 0117 ld [$17] 2071 ld([vPC+1]) #16 040b c219 st [$19] 2072 st([vAC+1]) #17 040c 011d ld [$1d] 2073 ld([vTmp]) #18 040d c216 st [$16] 2074 st([vPC]) #19 040e 1403 ld $03,y 2075 ld(hi('NEXTY'),Y) #20 040f e000 jmp y,$00 2076 jmp(Y,'NEXTY') #21 0410 00f4 ld $f4 2077 ld(-24/2) #22 2078 2079 # Clear vACH (continuation of ANDI and LD instructions) 2080 label('andi#13') andi#13: 0411 0200 nop 2081 nop() #13 0412 c218 st [$18] 2082 st([vAC]) #14 2083 # 2084 label('ld#15') ld#15: 0413 0000 ld $00 2085 ld(0) #15 Clear high byte 0414 c219 st [$19] 2086 st([vAC+1]) #16 0415 1403 ld $03,y 2087 ld(hi('REENTER'),Y) #17 0416 e0cb jmp y,$cb 2088 jmp(Y,'REENTER') #18 0417 00f5 ld $f5 2089 ld(-22/2) #19 2090 2091 # ADDI implementation 2092 label('addi') addi: 0418 8118 adda [$18] 2093 adda([vAC]) #13 0419 c218 st [$18] 2094 st([vAC]) #14 Store low result 041a e81e blt .addi#17 2095 bmi('.addi#17') #15 Now figure out if there was a carry 041b a11d suba [$1d] 2096 suba([vTmp]) #16 Gets back the initial value of vAC 041c fc20 bra .addi#19 2097 bra('.addi#19') #17 041d 411d ora [$1d] 2098 ora([vTmp]) #18 Carry in bit 7 2099 label('.addi#17') .addi#17: 041e 211d anda [$1d] 2100 anda([vTmp]) #17 Carry in bit 7 041f 0200 nop 2101 nop() #18 2102 label('.addi#19') .addi#19: 0420 3080 anda $80,x 2103 anda(0x80,X) #19 Move carry to bit 0 0421 0500 ld [x] 2104 ld([X]) #20 0422 8119 adda [$19] 2105 adda([vAC+1]) #21 Add the high bytes with carry 0423 1403 ld $03,y 2106 ld(hi('REENTER_28'),Y) #22 0424 e0ca jmp y,$ca 2107 jmp(Y,'REENTER_28') #23 0425 c219 st [$19] 2108 st([vAC+1]) #24 Store high result 2109 2110 # SUBI implementation 2111 label('subi') subi: 0426 0118 ld [$18] 2112 ld([vAC]) #13 0427 e82c blt .subi#16 2113 bmi('.subi#16') #14 0428 a11d suba [$1d] 2114 suba([vTmp]) #15 0429 c218 st [$18] 2115 st([vAC]) #16 Store low result 042a fc2f bra .subi#19 2116 bra('.subi#19') #17 042b 411d ora [$1d] 2117 ora([vTmp]) #18 Carry in bit 7 2118 label('.subi#16') .subi#16: 042c c218 st [$18] 2119 st([vAC]) #16 Store low result 042d 211d anda [$1d] 2120 anda([vTmp]) #17 Carry in bit 7 042e 0200 nop 2121 nop() #18 2122 label('.subi#19') .subi#19: 042f 3080 anda $80,x 2123 anda(0x80,X) #19 Move carry to bit 0 0430 0119 ld [$19] 2124 ld([vAC+1]) #20 0431 a500 suba [x] 2125 suba([X]) #21 0432 1403 ld $03,y 2126 ld(hi('REENTER_28'),Y) #22 0433 e0ca jmp y,$ca 2127 jmp(Y,'REENTER_28') #23 0434 c219 st [$19] 2128 st([vAC+1]) #24 2129 2130 # LSLW implementation 2131 label('lslw') lslw: 0435 3080 anda $80,x 2132 anda(128,X) #13 0436 8118 adda [$18] 2133 adda([vAC]) #14 0437 c218 st [$18] 2134 st([vAC]) #15 0438 0500 ld [x] 2135 ld([X]) #16 0439 8119 adda [$19] 2136 adda([vAC+1]) #17 043a 8119 adda [$19] 2137 adda([vAC+1]) #18 043b c219 st [$19] 2138 st([vAC+1]) #19 043c 0116 ld [$16] 2139 ld([vPC]) #20 043d a001 suba $01 2140 suba(1) #21 043e 1403 ld $03,y 2141 ld(hi('REENTER_28'),Y) #22 043f e0ca jmp y,$ca 2142 jmp(Y,'REENTER_28') #23 0440 c216 st [$16] 2143 st([vPC]) #24 2144 2145 # STLW implementation 2146 label('stlw') stlw: 0441 811c adda [$1c] 2147 adda([vSP]) #13 0442 c21d st [$1d] 2148 st([vTmp]) #14 0443 9001 adda $01,x 2149 adda(1,X) #15 0444 0119 ld [$19] 2150 ld([vAC+1]) #16 0445 c600 st [x] 2151 st([X]) #17 0446 111d ld [$1d],x 2152 ld([vTmp],X) #18 0447 0118 ld [$18] 2153 ld([vAC]) #19 0448 c600 st [x] 2154 st([X]) #20 0449 1403 ld $03,y 2155 ld(hi('REENTER'),Y) #21 044a e0cb jmp y,$cb 2156 jmp(Y,'REENTER') #22 044b 00f3 ld $f3 2157 ld(-26/2) #23 2158 2159 # LDLW implementation 2160 label('ldlw') ldlw: 044c 811c adda [$1c] 2161 adda([vSP]) #13 044d c21d st [$1d] 2162 st([vTmp]) #14 044e 9001 adda $01,x 2163 adda(1,X) #15 044f 0500 ld [x] 2164 ld([X]) #16 0450 c219 st [$19] 2165 st([vAC+1]) #17 0451 111d ld [$1d],x 2166 ld([vTmp],X) #18 0452 0500 ld [x] 2167 ld([X]) #19 0453 c218 st [$18] 2168 st([vAC]) #20 0454 1403 ld $03,y 2169 ld(hi('REENTER'),Y) #21 0455 e0cb jmp y,$cb 2170 jmp(Y,'REENTER') #22 0456 00f3 ld $f3 2171 ld(-26/2) #23 2172 2173 # POKE implementation 2174 label('poke') poke: 0457 9001 adda $01,x 2175 adda(1,X) #13 0458 0500 ld [x] 2176 ld([X]) #14 0459 1600 ld ac,y 2177 ld(AC,Y) #15 045a 111d ld [$1d],x 2178 ld([vTmp],X) #16 045b 0500 ld [x] 2179 ld([X]) #17 045c 1200 ld ac,x 2180 ld(AC,X) #18 045d 0118 ld [$18] 2181 ld([vAC]) #19 045e ce00 st [y,x] 2182 st([Y,X]) #20 045f 1403 ld $03,y 2183 ld(hi('REENTER'),Y) #21 0460 e0cb jmp y,$cb 2184 jmp(Y,'REENTER') #22 0461 00f3 ld $f3 2185 ld(-26/2) #23 2186 2187 # PEEK implementation 2188 label('peek') peek: 0462 a001 suba $01 2189 suba(1) #13 0463 c216 st [$16] 2190 st([vPC]) #14 0464 1118 ld [$18],x 2191 ld([vAC],X) #15 0465 1519 ld [$19],y 2192 ld([vAC+1],Y) #16 0466 0d00 ld [y,x] 2193 ld([Y,X]) #17 0467 c218 st [$18] 2194 st([vAC]) #18 2195 label('lupReturn#19') #Nice coincidence that lupReturn can be here lupReturn#19: 0468 0000 ld $00 2196 ld(0) #19 0469 c219 st [$19] 2197 st([vAC+1]) #20 046a 1403 ld $03,y 2198 ld(hi('REENTER'),Y) #21 046b e0cb jmp y,$cb 2199 jmp(Y,'REENTER') #22 046c 00f3 ld $f3 2200 ld(-26/2) #23 2201 2202 # DOKE implementation 2203 label('doke') doke: 046d 9001 adda $01,x 2204 adda(1,X) #13 046e 0500 ld [x] 2205 ld([X]) #14 046f 1600 ld ac,y 2206 ld(AC,Y) #15 0470 111d ld [$1d],x 2207 ld([vTmp],X) #16 0471 0500 ld [x] 2208 ld([X]) #17 0472 1200 ld ac,x 2209 ld(AC,X) #18 0473 0118 ld [$18] 2210 ld([vAC]) #19 0474 de00 st [y,x++] 2211 st([Y,Xpp]) #20 0475 0119 ld [$19] 2212 ld([vAC+1]) #21 0476 ce00 st [y,x] 2213 st([Y,X]) #22 Incompatible with REENTER_28 0477 1403 ld $03,y 2214 ld(hi('REENTER'),Y) #23 0478 e0cb jmp y,$cb 2215 jmp(Y,'REENTER') #24 0479 00f2 ld $f2 2216 ld(-28/2) #25 2217 2218 # DEEK implementation 2219 label('deek') deek: 047a 0116 ld [$16] 2220 ld([vPC]) #13 047b a001 suba $01 2221 suba(1) #14 047c c216 st [$16] 2222 st([vPC]) #15 047d 1118 ld [$18],x 2223 ld([vAC],X) #16 047e 1519 ld [$19],y 2224 ld([vAC+1],Y) #17 047f 0d00 ld [y,x] 2225 ld([Y,X]) #18 0480 de00 st [y,x++] 2226 st([Y,Xpp]) #19 Just X++ 0481 c218 st [$18] 2227 st([vAC]) #20 0482 0d00 ld [y,x] 2228 ld([Y,X]) #21 0483 1403 ld $03,y 2229 ld(hi('REENTER_28'),Y) #22 0484 e0ca jmp y,$ca 2230 jmp(Y,'REENTER_28') #23 0485 c219 st [$19] 2231 st([vAC+1]) #24 2232 2233 # ANDW implementation 2234 label('andw') andw: 0486 c21d st [$1d] 2235 st([vTmp]) #13 0487 9001 adda $01,x 2236 adda(1,X) #14 0488 0500 ld [x] 2237 ld([X]) #15 0489 2119 anda [$19] 2238 anda([vAC+1]) #16 048a c219 st [$19] 2239 st([vAC+1]) #17 048b 111d ld [$1d],x 2240 ld([vTmp],X) #18 048c 0500 ld [x] 2241 ld([X]) #19 048d 2118 anda [$18] 2242 anda([vAC]) #20 048e c218 st [$18] 2243 st([vAC]) #21 048f 1403 ld $03,y 2244 ld(hi('REENTER_28'),Y) #22 0490 e0ca jmp y,$ca 2245 jmp(Y,'REENTER_28') #23 2246 #dummy() #24 Overlap 2247 # 2248 # ORW implementation 2249 label('orw') orw: 0491 c21d st [$1d] 2250 st([vTmp]) #13,24 0492 9001 adda $01,x 2251 adda(1,X) #14 0493 0500 ld [x] 2252 ld([X]) #15 0494 4119 ora [$19] 2253 ora([vAC+1]) #16 0495 c219 st [$19] 2254 st([vAC+1]) #17 0496 111d ld [$1d],x 2255 ld([vTmp],X) #18 0497 0500 ld [x] 2256 ld([X]) #19 0498 4118 ora [$18] 2257 ora([vAC]) #20 0499 c218 st [$18] 2258 st([vAC]) #21 049a 1403 ld $03,y 2259 ld(hi('REENTER_28'),Y) #22 049b e0ca jmp y,$ca 2260 jmp(Y,'REENTER_28') #23 2261 #dummy() #24 Overlap 2262 # 2263 # XORW implementation 2264 label('xorw') xorw: 049c 9001 adda $01,x 2265 adda(1,X) #13,24 049d 0500 ld [x] 2266 ld([X]) #14 049e 6119 xora [$19] 2267 xora([vAC+1]) #15 049f c219 st [$19] 2268 st([vAC+1]) #16 04a0 111d ld [$1d],x 2269 ld([vTmp],X) #17 04a1 0500 ld [x] 2270 ld([X]) #18 04a2 6118 xora [$18] 2271 xora([vAC]) #19 04a3 c218 st [$18] 2272 st([vAC]) #20 04a4 1403 ld $03,y 2273 ld(hi('REENTER'),Y) #21 04a5 e0cb jmp y,$cb 2274 jmp(Y,'REENTER') #22 04a6 00f3 ld $f3 2275 ld(-26/2) #23 2276 2277 #----------------------------------------------------------------------- 2278 # 2279 # vCPU extension functions (for acceleration and compaction) follow below. 2280 # 2281 # The naming convention is: SYS_[_v]_ 2282 # 2283 # With the maximum number of cycles the function will run 2284 # (counted from NEXT to NEXT). This is the same number that must 2285 # be passed to the 'SYS' vCPU instruction as operand, and it will 2286 # appear in the GCL code upon use. 2287 # 2288 # If a SYS extension got introduced after ROM v1, the version number of 2289 # introduction is included in the name. This helps the programmer to be 2290 # reminded to verify the acutal ROM version and fail gracefully on older 2291 # ROMs than required. See also Docs/GT1-files.txt on using [romType]. 2292 # 2293 #----------------------------------------------------------------------- 2294 2295 #----------------------------------------------------------------------- 2296 # Extension SYS_Random_34: Update entropy and copy to vAC 2297 #----------------------------------------------------------------------- 2298 2299 # This same algorithm runs automatically once per vertical blank. 2300 # Use this function to get numbers at a higher rate. 2301 # 2302 # Variables: 2303 # vAC 2304 2305 label('SYS_Random_34') SYS_Random_34: 04a7 010e ld [$0e] 2306 ld([frameCount]) #15 04a8 6107 xora [$07] 2307 xora([entropy+1]) #16 04a9 610f xora [$0f] 2308 xora([serialRaw]) #17 04aa 8106 adda [$06] 2309 adda([entropy+0]) #18 04ab c206 st [$06] 2310 st([entropy+0]) #19 04ac c218 st [$18] 2311 st([vAC+0]) #20 04ad 8108 adda [$08] 2312 adda([entropy+2]) #21 04ae c208 st [$08] 2313 st([entropy+2]) #22 04af e8b2 blt .sysRnd0 2314 bmi('.sysRnd0') #23 04b0 fcb3 bra .sysRnd1 2315 bra('.sysRnd1') #24 04b1 6053 xora $53 2316 xora(64+16+2+1) #25 2317 label('.sysRnd0') .sysRnd0: 04b2 606c xora $6c 2318 xora(64+32+8+4) #25 2319 label('.sysRnd1') .sysRnd1: 04b3 8107 adda [$07] 2320 adda([entropy+1]) #26 04b4 c207 st [$07] 2321 st([entropy+1]) #27 04b5 c219 st [$19] 2322 st([vAC+1]) #28 04b6 1403 ld $03,y 2323 ld(hi('REENTER'),Y) #29 04b7 e0cb jmp y,$cb 2324 jmp(Y,'REENTER') #30 04b8 00ef ld $ef 2325 ld(-34/2) #31 2326 2327 label('SYS_LSRW7_30') SYS_LSRW7_30: 04b9 0118 ld [$18] 2328 ld([vAC]) #15 04ba 3080 anda $80,x 2329 anda(128,X) #16 04bb 0119 ld [$19] 2330 ld([vAC+1]) #17 04bc 8200 adda ac 2331 adda(AC) #18 04bd 4500 ora [x] 2332 ora([X]) #19 04be c218 st [$18] 2333 st([vAC]) #20 04bf 0119 ld [$19] 2334 ld([vAC+1]) #21 04c0 3080 anda $80,x 2335 anda(128,X) #22 04c1 0500 ld [x] 2336 ld([X]) #23 04c2 c219 st [$19] 2337 st([vAC+1]) #24 04c3 1403 ld $03,y 2338 ld(hi('REENTER'),Y) #25 04c4 e0cb jmp y,$cb 2339 jmp(Y,'REENTER') #26 04c5 00f1 ld $f1 2340 ld(-30/2) #27 2341 2342 label('SYS_LSRW8_24') SYS_LSRW8_24: 04c6 0119 ld [$19] 2343 ld([vAC+1]) #15 04c7 c218 st [$18] 2344 st([vAC]) #16 04c8 0000 ld $00 2345 ld(0) #17 04c9 c219 st [$19] 2346 st([vAC+1]) #18 04ca 1403 ld $03,y 2347 ld(hi('REENTER'),Y) #19 04cb e0cb jmp y,$cb 2348 jmp(Y,'REENTER') #20 04cc 00f4 ld $f4 2349 ld(-24/2) #21 2350 2351 label('SYS_LSLW8_24') SYS_LSLW8_24: 04cd 0118 ld [$18] 2352 ld([vAC]) #15 04ce c219 st [$19] 2353 st([vAC+1]) #16 04cf 0000 ld $00 2354 ld(0) #17 04d0 c218 st [$18] 2355 st([vAC]) #18 04d1 1403 ld $03,y 2356 ld(hi('REENTER'),Y) #19 04d2 e0cb jmp y,$cb 2357 jmp(Y,'REENTER') #20 04d3 00f4 ld $f4 2358 ld(-24/2) #21 2359 2360 #----------------------------------------------------------------------- 2361 # Extension SYS_Draw4_30 2362 #----------------------------------------------------------------------- 2363 2364 # Draw 4 pixels on screen, horizontally next to each other 2365 # 2366 # Variables: 2367 # sysArgs[0:3] Pixels (in) 2368 # sysArgs[4:5] Position on screen (in) 2369 2370 label('SYS_Draw4_30') SYS_Draw4_30: 04d4 1128 ld [$28],x 2371 ld([sysArgs+4],X) #15 04d5 1529 ld [$29],y 2372 ld([sysArgs+5],Y) #16 04d6 0124 ld [$24] 2373 ld([sysArgs+0]) #17 04d7 de00 st [y,x++] 2374 st([Y,Xpp]) #18 04d8 0125 ld [$25] 2375 ld([sysArgs+1]) #19 04d9 de00 st [y,x++] 2376 st([Y,Xpp]) #20 04da 0126 ld [$26] 2377 ld([sysArgs+2]) #21 04db de00 st [y,x++] 2378 st([Y,Xpp]) #22 04dc 0127 ld [$27] 2379 ld([sysArgs+3]) #23 04dd de00 st [y,x++] 2380 st([Y,Xpp]) #24 04de 1403 ld $03,y 2381 ld(hi('REENTER'),Y) #25 04df e0cb jmp y,$cb 2382 jmp(Y,'REENTER') #26 04e0 00f1 ld $f1 2383 ld(-30/2) #27 2384 2385 #----------------------------------------------------------------------- 2386 # Extension SYS_VDrawBits_134: 2387 #----------------------------------------------------------------------- 2388 2389 # Draw slice of a character, 8 pixels vertical 2390 # 2391 # Variables: 2392 # sysArgs[0] Color 0 "background" (in) 2393 # sysArgs[1] Color 1 "pen" (in) 2394 # sysArgs[2] 8 bits, highest bit first (in, changed) 2395 # sysArgs[4:5] Position on screen (in) 2396 2397 label('SYS_VDrawBits_134') SYS_VDrawBits_134: 04e1 1412 ld $12,y 2398 ld(hi('sys_VDrawBits'),Y) #15 04e2 e086 jmp y,$86 2399 jmp(Y,'sys_VDrawBits') #16 04e3 1128 ld [$28],x 2400 ld([sysArgs+4],X) #17 2401 2402 #----------------------------------------------------------------------- 2403 2404 # INC implementation 2405 label('inc#14') inc#14: 04e4 8500 adda [x] 2406 adda([X]) #14 04e5 c600 st [x] 2407 st([X]) #15 04e6 1403 ld $03,y 2408 ld(hi('NEXTY'),Y) #16 04e7 e000 jmp y,$00 2409 jmp(Y,'NEXTY') #17 04e8 00f6 ld $f6 2410 ld(-20/2) #18 2411 2412 2413 # Interrupt handler: 2414 # ... IRQ payload ... 2415 # LDWI $400 2416 # LUP $xx ==> vRTI 04e9 0200 nop 2417 fillers(until=251-17) 2418 2419 label('vRTI#18') vRTI#18: 04ea 00ea ld $ea 2420 ld(-32//2-v6502_adjust) #18 04eb 8115 adda [$15] 2421 adda([vTicks]) #19 04ec f4f8 bge vRTI#22 2422 bge('vRTI#22') #20 04ed 0132 ld [$32] 2423 ld([vIrqSave+2]) #21 04ee c218 st [$18] 2424 st([vAC]) #22 04ef 0133 ld [$33] 2425 ld([vIrqSave+3]) #23 04f0 c219 st [$19] 2426 st([vAC+1]) #24 04f1 0134 ld [$34] 2427 ld([vIrqSave+4]) #25 04f2 c205 st [$05] 2428 st([vCpuSelect]) #26 04f3 0115 ld [$15] 2429 ld([vTicks]) #27 04f4 8000 adda $00 2430 adda(maxTicks-28//2) #28-28=0 04f5 1403 ld $03,y 2431 ld(hi('RESYNC'),Y) #1 04f6 e00c jmp y,$0c 2432 jmp(Y,'RESYNC') #2 04f7 0200 nop 2433 nop() #3 2434 2435 label('vRTI#22') vRTI#22: 04f8 1412 ld $12,y 2436 ld(hi('vRTI#25'),Y) #22 04f9 e01e jmp y,$1e 2437 jmp(Y,'vRTI#25') #23 04fa c218 st [$18] 2438 st([vAC]) #24 2439 2440 # vRTI entry point 2441 assert(pc()&255 == 251) # The landing offset 251 for LUP trampoline is fixed 04fb 0130 ld [$30] 2442 ld([vIrqSave+0]) #13 04fc c216 st [$16] 2443 st([vPC]) #14 04fd 0131 ld [$31] 2444 ld([vIrqSave+1]) #15 04fe fcea bra vRTI#18 2445 bra('vRTI#18') #16 04ff c217 st [$17] 2446 st([vPC+1]) #17 2447 2448 2449 2450 #----------------------------------------------------------------------- 2451 # 2452 # $0500 ROM page 5-6: Shift table and code 2453 # 2454 #----------------------------------------------------------------------- 2455 2456 align(0x100, size=0x200) 2457 2458 # Lookup table for i>>n, with n in 1..6 2459 # Indexing ix = i & ~b | (b-1), where b = 1<<(n-1) 2460 # ... 2461 # ld <.ret 2462 # st [vTmp] 2463 # ld >shiftTable,y 2464 # 2465 # jmp y,ac 2466 # bra $ff 2467 # .ret: ... 2468 # 2469 # i >> 7 can be always be done with RAM: [i&128] 2470 # ... 2471 # anda $80,x 2472 # ld [x] 2473 # ... 2474 2475 label('shiftTable') 2476 shiftTable = pc() 2477 2478 for ix in range(255): 2479 for n in range(1,7): # Find first zero 2480 if ~ix & (1 << (n-1)): 2481 break 2482 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 2484 2485 assert pc()&255 == 255 05ff fd1d bra [$1d] 2486 bra([vTmp]) # Jumps back into next page 2487 2488 label('SYS_LSRW1_48') 2489 assert pc()&255 == 0 # First instruction on this page *must* be a nop SYS_LSRW1_48: 0600 0200 nop 2490 nop() #15 0601 1405 ld $05,y 2491 ld(hi('shiftTable'),Y) #16 Logical shift right 1 bit (X >> 1) 0602 0008 ld $08 2492 ld('.sysLsrw1a') #17 Shift low byte 0603 c21d st [$1d] 2493 st([vTmp]) #18 0604 0118 ld [$18] 2494 ld([vAC]) #19 0605 20fe anda $fe 2495 anda(0b11111110) #20 0606 e200 jmp y,ac 2496 jmp(Y,AC) #21 0607 fcff bra $ff 2497 bra(255) #22 bra shiftTable+255 2498 label('.sysLsrw1a') .sysLsrw1a: 0608 c218 st [$18] 2499 st([vAC]) #26 0609 0119 ld [$19] 2500 ld([vAC+1]) #27 Transfer bit 8 060a 2001 anda $01 2501 anda(1) #28 060b 807f adda $7f 2502 adda(127) #29 060c 2080 anda $80 2503 anda(128) #30 060d 4118 ora [$18] 2504 ora([vAC]) #31 060e c218 st [$18] 2505 st([vAC]) #32 060f 0015 ld $15 2506 ld('.sysLsrw1b') #33 Shift high byte 0610 c21d st [$1d] 2507 st([vTmp]) #34 0611 0119 ld [$19] 2508 ld([vAC+1]) #35 0612 20fe anda $fe 2509 anda(0b11111110) #36 0613 e200 jmp y,ac 2510 jmp(Y,AC) #37 0614 fcff bra $ff 2511 bra(255) #38 bra shiftTable+255 2512 label('.sysLsrw1b') .sysLsrw1b: 0615 c219 st [$19] 2513 st([vAC+1]) #42 0616 1403 ld $03,y 2514 ld(hi('REENTER'),Y) #43 0617 e0cb jmp y,$cb 2515 jmp(Y,'REENTER') #44 0618 00e8 ld $e8 2516 ld(-48/2) #45 2517 2518 label('SYS_LSRW2_52') SYS_LSRW2_52: 0619 1405 ld $05,y 2519 ld(hi('shiftTable'),Y) #15 Logical shift right 2 bit (X >> 2) 061a 0021 ld $21 2520 ld('.sysLsrw2a') #16 Shift low byte 061b c21d st [$1d] 2521 st([vTmp]) #17 061c 0118 ld [$18] 2522 ld([vAC]) #18 061d 20fc anda $fc 2523 anda(0b11111100) #19 061e 4001 ora $01 2524 ora( 0b00000001) #20 061f e200 jmp y,ac 2525 jmp(Y,AC) #21 0620 fcff bra $ff 2526 bra(255) #22 bra shiftTable+255 2527 label('.sysLsrw2a') .sysLsrw2a: 0621 c218 st [$18] 2528 st([vAC]) #26 0622 0119 ld [$19] 2529 ld([vAC+1]) #27 Transfer bit 8:9 0623 8200 adda ac 2530 adda(AC) #28 0624 8200 adda ac 2531 adda(AC) #29 0625 8200 adda ac 2532 adda(AC) #30 0626 8200 adda ac 2533 adda(AC) #31 0627 8200 adda ac 2534 adda(AC) #32 0628 8200 adda ac 2535 adda(AC) #33 0629 4118 ora [$18] 2536 ora([vAC]) #34 062a c218 st [$18] 2537 st([vAC]) #35 062b 0032 ld $32 2538 ld('.sysLsrw2b') #36 Shift high byte 062c c21d st [$1d] 2539 st([vTmp]) #37 062d 0119 ld [$19] 2540 ld([vAC+1]) #38 062e 20fc anda $fc 2541 anda(0b11111100) #39 062f 4001 ora $01 2542 ora( 0b00000001) #40 0630 e200 jmp y,ac 2543 jmp(Y,AC) #41 0631 fcff bra $ff 2544 bra(255) #42 bra shiftTable+255 2545 label('.sysLsrw2b') .sysLsrw2b: 0632 c219 st [$19] 2546 st([vAC+1]) #46 0633 1403 ld $03,y 2547 ld(hi('REENTER'),Y) #47 0634 e0cb jmp y,$cb 2548 jmp(Y,'REENTER') #48 0635 00e6 ld $e6 2549 ld(-52/2) #49 2550 2551 label('SYS_LSRW3_52') SYS_LSRW3_52: 0636 1405 ld $05,y 2552 ld(hi('shiftTable'),Y) #15 Logical shift right 3 bit (X >> 3) 0637 003e ld $3e 2553 ld('.sysLsrw3a') #16 Shift low byte 0638 c21d st [$1d] 2554 st([vTmp]) #17 0639 0118 ld [$18] 2555 ld([vAC]) #18 063a 20f8 anda $f8 2556 anda(0b11111000) #19 063b 4003 ora $03 2557 ora( 0b00000011) #20 063c e200 jmp y,ac 2558 jmp(Y,AC) #21 063d fcff bra $ff 2559 bra(255) #22 bra shiftTable+255 2560 label('.sysLsrw3a') .sysLsrw3a: 063e c218 st [$18] 2561 st([vAC]) #26 063f 0119 ld [$19] 2562 ld([vAC+1]) #27 Transfer bit 8:10 0640 8200 adda ac 2563 adda(AC) #28 0641 8200 adda ac 2564 adda(AC) #29 0642 8200 adda ac 2565 adda(AC) #30 0643 8200 adda ac 2566 adda(AC) #31 0644 8200 adda ac 2567 adda(AC) #32 0645 4118 ora [$18] 2568 ora([vAC]) #33 0646 c218 st [$18] 2569 st([vAC]) #34 0647 004e ld $4e 2570 ld('.sysLsrw3b') #35 Shift high byte 0648 c21d st [$1d] 2571 st([vTmp]) #36 0649 0119 ld [$19] 2572 ld([vAC+1]) #37 064a 20f8 anda $f8 2573 anda(0b11111000) #38 064b 4003 ora $03 2574 ora( 0b00000011) #39 064c e200 jmp y,ac 2575 jmp(Y,AC) #40 064d fcff bra $ff 2576 bra(255) #41 bra shiftTable+255 2577 label('.sysLsrw3b') .sysLsrw3b: 064e c219 st [$19] 2578 st([vAC+1]) #45 064f 00e6 ld $e6 2579 ld(-52/2) #46 0650 1403 ld $03,y 2580 ld(hi('REENTER'),Y) #47 0651 e0cb jmp y,$cb 2581 jmp(Y,'REENTER') #48 2582 #nop() #49 2583 2584 label('SYS_LSRW4_50') SYS_LSRW4_50: 0652 1405 ld $05,y 2585 ld(hi('shiftTable'),Y) #15,49 Logical shift right 4 bit (X >> 4) 0653 005a ld $5a 2586 ld('.sysLsrw4a') #16 Shift low byte 0654 c21d st [$1d] 2587 st([vTmp]) #17 0655 0118 ld [$18] 2588 ld([vAC]) #18 0656 20f0 anda $f0 2589 anda(0b11110000) #19 0657 4007 ora $07 2590 ora( 0b00000111) #20 0658 e200 jmp y,ac 2591 jmp(Y,AC) #21 0659 fcff bra $ff 2592 bra(255) #22 bra shiftTable+255 2593 label('.sysLsrw4a') .sysLsrw4a: 065a c218 st [$18] 2594 st([vAC]) #26 065b 0119 ld [$19] 2595 ld([vAC+1]) #27 Transfer bit 8:11 065c 8200 adda ac 2596 adda(AC) #28 065d 8200 adda ac 2597 adda(AC) #29 065e 8200 adda ac 2598 adda(AC) #30 065f 8200 adda ac 2599 adda(AC) #31 0660 4118 ora [$18] 2600 ora([vAC]) #32 0661 c218 st [$18] 2601 st([vAC]) #33 0662 0069 ld $69 2602 ld('.sysLsrw4b') #34 Shift high byte' 0663 c21d st [$1d] 2603 st([vTmp]) #35 0664 0119 ld [$19] 2604 ld([vAC+1]) #36 0665 20f0 anda $f0 2605 anda(0b11110000) #37 0666 4007 ora $07 2606 ora( 0b00000111) #38 0667 e200 jmp y,ac 2607 jmp(Y,AC) #39 0668 fcff bra $ff 2608 bra(255) #40 bra shiftTable+255 2609 label('.sysLsrw4b') .sysLsrw4b: 0669 c219 st [$19] 2610 st([vAC+1]) #44 066a 1403 ld $03,y 2611 ld(hi('REENTER'),Y) #45 066b e0cb jmp y,$cb 2612 jmp(Y,'REENTER') #46 066c 00e7 ld $e7 2613 ld(-50/2) #47 2614 2615 label('SYS_LSRW5_50') SYS_LSRW5_50: 066d 1405 ld $05,y 2616 ld(hi('shiftTable'),Y) #15 Logical shift right 5 bit (X >> 5) 066e 0075 ld $75 2617 ld('.sysLsrw5a') #16 Shift low byte 066f c21d st [$1d] 2618 st([vTmp]) #17 0670 0118 ld [$18] 2619 ld([vAC]) #18 0671 20e0 anda $e0 2620 anda(0b11100000) #19 0672 400f ora $0f 2621 ora( 0b00001111) #20 0673 e200 jmp y,ac 2622 jmp(Y,AC) #21 0674 fcff bra $ff 2623 bra(255) #22 bra shiftTable+255 2624 label('.sysLsrw5a') .sysLsrw5a: 0675 c218 st [$18] 2625 st([vAC]) #26 0676 0119 ld [$19] 2626 ld([vAC+1]) #27 Transfer bit 8:13 0677 8200 adda ac 2627 adda(AC) #28 0678 8200 adda ac 2628 adda(AC) #29 0679 8200 adda ac 2629 adda(AC) #30 067a 4118 ora [$18] 2630 ora([vAC]) #31 067b c218 st [$18] 2631 st([vAC]) #32 067c 0083 ld $83 2632 ld('.sysLsrw5b') #33 Shift high byte 067d c21d st [$1d] 2633 st([vTmp]) #34 067e 0119 ld [$19] 2634 ld([vAC+1]) #35 067f 20e0 anda $e0 2635 anda(0b11100000) #36 0680 400f ora $0f 2636 ora( 0b00001111) #37 0681 e200 jmp y,ac 2637 jmp(Y,AC) #38 0682 fcff bra $ff 2638 bra(255) #39 bra shiftTable+255 2639 label('.sysLsrw5b') .sysLsrw5b: 0683 c219 st [$19] 2640 st([vAC+1]) #44 0684 00e7 ld $e7 2641 ld(-50/2) #45 0685 1403 ld $03,y 2642 ld(hi('REENTER'),Y) #46 0686 e0cb jmp y,$cb 2643 jmp(Y,'REENTER') #47 2644 #nop() #48 2645 2646 label('SYS_LSRW6_48') SYS_LSRW6_48: 0687 1405 ld $05,y 2647 ld(hi('shiftTable'),Y) #15,44 Logical shift right 6 bit (X >> 6) 0688 008f ld $8f 2648 ld('.sysLsrw6a') #16 Shift low byte 0689 c21d st [$1d] 2649 st([vTmp]) #17 068a 0118 ld [$18] 2650 ld([vAC]) #18 068b 20c0 anda $c0 2651 anda(0b11000000) #19 068c 401f ora $1f 2652 ora( 0b00011111) #20 068d e200 jmp y,ac 2653 jmp(Y,AC) #21 068e fcff bra $ff 2654 bra(255) #22 bra shiftTable+255 2655 label('.sysLsrw6a') .sysLsrw6a: 068f c218 st [$18] 2656 st([vAC]) #26 0690 0119 ld [$19] 2657 ld([vAC+1]) #27 Transfer bit 8:13 0691 8200 adda ac 2658 adda(AC) #28 0692 8200 adda ac 2659 adda(AC) #29 0693 4118 ora [$18] 2660 ora([vAC]) #30 0694 c218 st [$18] 2661 st([vAC]) #31 0695 009c ld $9c 2662 ld('.sysLsrw6b') #32 Shift high byte 0696 c21d st [$1d] 2663 st([vTmp]) #33 0697 0119 ld [$19] 2664 ld([vAC+1]) #34 0698 20c0 anda $c0 2665 anda(0b11000000) #35 0699 401f ora $1f 2666 ora( 0b00011111) #36 069a e200 jmp y,ac 2667 jmp(Y,AC) #37 069b fcff bra $ff 2668 bra(255) #38 bra shiftTable+255 2669 label('.sysLsrw6b') .sysLsrw6b: 069c c219 st [$19] 2670 st([vAC+1]) #42 069d 1403 ld $03,y 2671 ld(hi('REENTER'),Y) #43 069e e0cb jmp y,$cb 2672 jmp(Y,'REENTER') #44 069f 00e8 ld $e8 2673 ld(-48/2) #45 2674 2675 label('SYS_LSLW4_46') SYS_LSLW4_46: 06a0 1405 ld $05,y 2676 ld(hi('shiftTable'),Y) #15 Logical shift left 4 bit (X << 4) 06a1 00ae ld $ae 2677 ld('.sysLsrl4') #16 06a2 c21d st [$1d] 2678 st([vTmp]) #17 06a3 0119 ld [$19] 2679 ld([vAC+1]) #18 06a4 8200 adda ac 2680 adda(AC) #19 06a5 8200 adda ac 2681 adda(AC) #20 06a6 8200 adda ac 2682 adda(AC) #21 06a7 8200 adda ac 2683 adda(AC) #22 06a8 c219 st [$19] 2684 st([vAC+1]) #23 06a9 0118 ld [$18] 2685 ld([vAC]) #24 06aa 20f0 anda $f0 2686 anda(0b11110000) #25 06ab 4007 ora $07 2687 ora( 0b00000111) #26 06ac e200 jmp y,ac 2688 jmp(Y,AC) #27 06ad fcff bra $ff 2689 bra(255) #28 bra shiftTable+255 2690 label('.sysLsrl4') .sysLsrl4: 06ae 4119 ora [$19] 2691 ora([vAC+1]) #32 06af c219 st [$19] 2692 st([vAC+1]) #33 06b0 0118 ld [$18] 2693 ld([vAC]) #34 06b1 8200 adda ac 2694 adda(AC) #35 06b2 8200 adda ac 2695 adda(AC) #36 06b3 8200 adda ac 2696 adda(AC) #37 06b4 8200 adda ac 2697 adda(AC) #38 06b5 c218 st [$18] 2698 st([vAC]) #39 06b6 00e9 ld $e9 2699 ld(-46/2) #40 06b7 1403 ld $03,y 2700 ld(hi('REENTER'),Y) #41 06b8 e0cb jmp y,$cb 2701 jmp(Y,'REENTER') #42 2702 #nop() #43 2703 2704 #----------------------------------------------------------------------- 2705 # Extension SYS_Read3_40 2706 #----------------------------------------------------------------------- 2707 2708 # Read 3 consecutive bytes from ROM 2709 # 2710 # Note: This function a bit obsolete, as it has very limited use. It's 2711 # effectively an application-specific SYS function for the Pictures 2712 # application from ROM v1. It requires the ROM data be organized 2713 # with trampoline3a and trampoline3b fragments, and their address 2714 # in ROM to be known. Better avoid using this. 2715 # 2716 # Variables: 2717 # sysArgs[0:2] Bytes (out) 2718 # sysArgs[6:7] ROM pointer (in) 2719 2720 label('SYS_Read3_40') SYS_Read3_40: 06b9 152b ld [$2b],y 2721 ld([sysArgs+7],Y) #15,32 06ba e079 jmp y,$79 2722 jmp(Y,128-7) #16 trampoline3a 06bb 012a ld [$2a] 2723 ld([sysArgs+6]) #17 2724 label('txReturn') txReturn: 06bc c226 st [$26] 2725 st([sysArgs+2]) #34 06bd 1403 ld $03,y 2726 ld(hi('REENTER'),Y) #35 06be e0cb jmp y,$cb 2727 jmp(Y,'REENTER') #36 06bf 00ec ld $ec 2728 ld(-40/2) #37 2729 2730 def trampoline3a(): 2731 """Read 3 bytes from ROM page""" 2732 while pc()&255 < 128-7: 2733 nop() 2734 bra(AC) #18 2735 C('Trampoline for page $%02x00 reading (entry)' % (pc()>>8)) 2736 bra(123) #19 2737 st([sysArgs+0]) #21 2738 ld([sysArgs+6]) #22 2739 adda(1) #23 2740 bra(AC) #24 2741 bra(250) #25 trampoline3b 2742 align(1, size=0x80) 2743 2744 def trampoline3b(): 2745 """Read 3 bytes from ROM page (continue)""" 2746 while pc()&255 < 256-6: 2747 nop() 2748 st([sysArgs+1]) #27 2749 C('Trampoline for page $%02x00 reading (continue)' % (pc()>>8)) 2750 ld([sysArgs+6]) #28 2751 adda(2) #29 2752 ld(hi('txReturn'),Y) #30 2753 bra(AC) #31 2754 jmp(Y,'txReturn') #32 2755 align(1, size=0x100) 2756 2757 #----------------------------------------------------------------------- 2758 # Extension SYS_Unpack_56 2759 #----------------------------------------------------------------------- 2760 2761 # Unpack 3 bytes into 4 pixels 2762 # 2763 # Variables: 2764 # sysArgs[0:2] Packed bytes (in) 2765 # sysArgs[0:3] Pixels (out) 2766 2767 label('SYS_Unpack_56') SYS_Unpack_56: 06c0 1407 ld $07,y 2768 ld(soundTable>>8,Y) #15 06c1 0126 ld [$26] 2769 ld([sysArgs+2]) #16 a[2]>>2 06c2 5003 ora $03,x 2770 ora(0x03,X) #17 06c3 0d00 ld [y,x] 2771 ld([Y,X]) #18 06c4 c227 st [$27] 2772 st([sysArgs+3]) #19 -> Pixel 3 2773 06c5 0126 ld [$26] 2774 ld([sysArgs+2]) #20 (a[2]&3)<<4 06c6 2003 anda $03 2775 anda(0x03) #21 06c7 8200 adda ac 2776 adda(AC) #22 06c8 8200 adda ac 2777 adda(AC) #23 06c9 8200 adda ac 2778 adda(AC) #24 06ca 8200 adda ac 2779 adda(AC) #25 06cb c226 st [$26] 2780 st([sysArgs+2]) #26 06cc 0125 ld [$25] 2781 ld([sysArgs+1]) #27 | a[1]>>4 06cd 5003 ora $03,x 2782 ora(0x03,X) #28 06ce 0d00 ld [y,x] 2783 ld([Y,X]) #29 06cf 5003 ora $03,x 2784 ora(0x03,X) #30 06d0 0d00 ld [y,x] 2785 ld([Y,X]) #31 06d1 4126 ora [$26] 2786 ora([sysArgs+2]) #32 06d2 c226 st [$26] 2787 st([sysArgs+2]) #33 -> Pixel 2 2788 06d3 0125 ld [$25] 2789 ld([sysArgs+1]) #34 (a[1]&15)<<2 06d4 200f anda $0f 2790 anda(0x0f) #35 06d5 8200 adda ac 2791 adda(AC) #36 06d6 8200 adda ac 2792 adda(AC) #37 06d7 c225 st [$25] 2793 st([sysArgs+1]) #38 2794 06d8 0124 ld [$24] 2795 ld([sysArgs+0]) #39 | a[0]>>6 06d9 5003 ora $03,x 2796 ora(0x03,X) #40 06da 0d00 ld [y,x] 2797 ld([Y,X]) #41 06db 5003 ora $03,x 2798 ora(0x03,X) #42 06dc 0d00 ld [y,x] 2799 ld([Y,X]) #43 06dd 5003 ora $03,x 2800 ora(0x03,X) #44 06de 0d00 ld [y,x] 2801 ld([Y,X]) #45 06df 4125 ora [$25] 2802 ora([sysArgs+1]) #46 06e0 c225 st [$25] 2803 st([sysArgs+1]) #47 -> Pixel 1 2804 06e1 0124 ld [$24] 2805 ld([sysArgs+0]) #48 a[1]&63 06e2 203f anda $3f 2806 anda(0x3f) #49 06e3 c224 st [$24] 2807 st([sysArgs+0]) #50 -> Pixel 0 2808 06e4 1403 ld $03,y 2809 ld(hi('REENTER'),Y) #51 06e5 e0cb jmp y,$cb 2810 jmp(Y,'REENTER') #52 06e6 00e4 ld $e4 2811 ld(-56/2) #53 2812 2813 #----------------------------------------------------------------------- 2814 # v6502 right shift instruction 2815 #----------------------------------------------------------------------- 2816 2817 label('v6502_lsr#30') v6502_lsr#30: 06e7 1525 ld [$25],y 2818 ld([v6502_ADH],Y) #30 Result 06e8 ce00 st [y,x] 2819 st([Y,X]) #31 06e9 c228 st [$28] 2820 st([v6502_Qz]) #32 Z flag 06ea c229 st [$29] 2821 st([v6502_Qn]) #33 N flag 06eb 140e ld $0e,y 2822 ld(hi('v6502_next'),Y) #34 06ec 00ed ld $ed 2823 ld(-38/2) #35 06ed e020 jmp y,$20 2824 jmp(Y,'v6502_next') #36 2825 #nop() #37 Overlap 2826 # 2827 label('v6502_ror#38') v6502_ror#38: 06ee 1525 ld [$25],y 2828 ld([v6502_ADH],Y) #38,38 Result 06ef 4119 ora [$19] 2829 ora([v6502_BI]) #39 Transfer bit 8 06f0 ce00 st [y,x] 2830 st([Y,X]) #40 06f1 c228 st [$28] 2831 st([v6502_Qz]) #41 Z flag 06f2 c229 st [$29] 2832 st([v6502_Qn]) #42 N flag 06f3 140e ld $0e,y 2833 ld(hi('v6502_next'),Y) #43 06f4 e020 jmp y,$20 2834 jmp(Y,'v6502_next') #44 06f5 00e9 ld $e9 2835 ld(-46/2) #45 2836 2837 #----------------------------------------------------------------------- 2838 # Reserved 2839 #----------------------------------------------------------------------- 2840 2841 # XXX Reserve space for LSRW? 2842 2843 #----------------------------------------------------------------------- 2844 # 2845 # $0700 ROM page 7-8: Gigatron font data 2846 # 2847 #----------------------------------------------------------------------- 2848 06f6 0200 nop 2849 align(0x100, size=0x100) 06f7 0200 nop 06f8 0200 nop * 10 times 2850 2851 label('font32up') 2852 for ch in range(32, 32+50): 2853 comment = 'Char %s' % repr(chr(ch)) 2854 for byte in font.font[ch-32]: 2855 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 2856 comment = C(comment) 2857 07fa 0200 nop 2858 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] ;+-----------------------------------+ 2859 2860 #----------------------------------------------------------------------- 2861 2862 align(0x100, size=0x100) 2863 2864 label('font82up') 2865 for ch in range(32+50, 132): 2866 comment = 'Char %s' % repr(chr(ch)) 2867 for byte in font.font[ch-32]: 2868 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 2869 comment = C(comment) 2870 08fa 0200 nop 2871 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] ;+-----------------------------------+ 2872 2873 #----------------------------------------------------------------------- 2874 # 2875 # $0900 ROM page 9: Key table for music 2876 # 2877 #----------------------------------------------------------------------- 2878 2879 align(0x100, size=0x100) 2880 notes = 'CCDDEFFGGAAB' 2881 sampleRate = cpuClock / 200.0 / 4 2882 label('notesTable') notesTable: 0900 0000 ld $00 2883 ld(0) 0901 0000 ld $00 2884 ld(0) 2885 for i in range(0, 250, 2): 2886 j = i//2-1 2887 freq = 440.0*2.0**((j-57)/12.0) 2888 if j>=0 and freq <= sampleRate/2.0: 2889 key = int(round(32768 * freq / sampleRate)) 2890 octave, note = j//12, notes[j%12] 2891 sharp = '-' if notes[j%12-1] != note else '#' 2892 comment = '%s%s%s (%0.1f Hz)' % (note, sharp, octave, freq) 2893 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 2894 09c0 0200 nop 2895 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] ;+-----------------------------------+ 2896 2897 #----------------------------------------------------------------------- 2898 # 2899 # $0a00 ROM page 10: Inversion table 2900 # 2901 #----------------------------------------------------------------------- 2902 2903 align(0x100, size=0x100) 2904 label('invTable') 2905 2906 # Unit 64, table offset 16 (=1/4), value offset 1: (x+16)*(y+1) == 64*64 - e 2907 for i in range(251): invTable: 0a00 00ff ld $ff 2908 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 2909 2910 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] ;+-----------------------------------+ 2911 2912 #----------------------------------------------------------------------- 2913 # 2914 # $0d00 ROM page 11: More SYS functions 2915 # 2916 #----------------------------------------------------------------------- 2917 2918 align(0x100, size=0x100) 2919 2920 #----------------------------------------------------------------------- 2921 # Extension SYS_SetMode_v2_80 2922 #----------------------------------------------------------------------- 2923 2924 # Set video mode to 0 to 3 black scanlines per pixel line. 2925 # 2926 # Mainly for making the MODE command available in Tiny BASIC, so that 2927 # the user can experiment. It's adviced to refrain from using 2928 # SYS_SetMode_v2_80 in regular applications. Video mode is a deeply 2929 # personal preference, and the programmer shouldn't overrule the user 2930 # in that choice. The Gigatron philisophy is that the end user has 2931 # the final say on what happens on the system, not the application, 2932 # even if that implies a degraded performance. This doesn't mean that 2933 # all applications must work well in all video modes: mode 1 is still 2934 # the default. If an application really doesn't work at all in that 2935 # mode, it's acceptable to change mode once after loading. 2936 # 2937 # There's no "SYS_GetMode" function. 2938 # 2939 # Variables: 2940 # vAC bit 0:1 Mode: 2941 # 0 "ABCD" -> Full mode (slowest) 2942 # 1 "ABC-" -> Default mode after reset 2943 # 2 "A-C-" -> at67's mode 2944 # 3 "A---" -> HGM's mode 2945 # vAC bit 2:15 Ignored bits and should be 0 2946 # 2947 # Special values (ROM v4): 2948 # vAC = 1975 Zombie mode (no video signals, no input, 2949 # no blinkenlights). 2950 # vAC = -1 Leave zombie mode and restore previous mode. 2951 2952 # Actual duration is <80 cycles, but keep some room for future extensions 2953 label('SYS_SetMode_v2_80') SYS_SetMode_v2_80: 0b00 140b ld $0b,y 2954 ld(hi('sys_SetMode'),Y) #15 0b01 e056 jmp y,$56 2955 jmp(Y,'sys_SetMode') #16 0b02 011e ld [$1e] 2956 ld([vReturn]) #17 2957 2958 #----------------------------------------------------------------------- 2959 # Extension SYS_SetMemory_v2_54 2960 #----------------------------------------------------------------------- 2961 2962 # SYS function for setting 1..256 bytes 2963 # 2964 # sysArgs[0] Copy count (in, changed) 2965 # sysArgs[1] Copy value (in) 2966 # sysArgs[2:3] Destination address (in, changed) 2967 # 2968 # Sets up to 8 bytes per invocation before restarting itself through vCPU. 2969 # Doesn't wrap around page boundary. Can run 3 times per 148-cycle time slice. 2970 # All combined that gives a 300% speedup over ROMv4 and before. 2971 2972 label('SYS_SetMemory_v2_54') SYS_SetMemory_v2_54: 0b03 0124 ld [$24] 2973 ld([sysArgs+0]) #15 2974 bra('sys_SetMemory#18') #16 0b04 fc1a bra sys_SetMemory#18 0b05 1126 ld [$26],x 2975 ld([sysArgs+2],X) #17 2976 2977 #----------------------------------------------------------------------- 2978 # Extension SYS_SendSerial1_v3_80 2979 #----------------------------------------------------------------------- 2980 2981 # SYS function for sending data over serial controller port using 2982 # pulse width modulation of the vertical sync signal. 2983 # 2984 # Variables: 2985 # sysArgs[0:1] Source address (in, changed) 2986 # sysArgs[2] Start bit mask (typically 1) (in, changed) 2987 # sysArgs[3] Number of send frames X (in, changed) 2988 # 2989 # The sending will abort if input data is detected on the serial port. 2990 # Returns 0 in case of all bits sent, or <>0 in case of abort 2991 # 2992 # This modulates the next upcoming X vertical pulses with the supplied 2993 # data. A zero becomes a 7 line vPulse, a one will be 9 lines. 2994 # After that, the vPulse width falls back to 8 lines (idle). 2995 2996 label('SYS_SendSerial1_v3_80') SYS_SendSerial1_v3_80: 0b06 0109 ld [$09] 2997 ld([videoY]) #15 2998 bra('sys_SendSerial1') #16 0b07 fc85 bra sys_SendSerial1 0b08 60b3 xora $b3 2999 xora(videoYline0) #17 First line of vertical blank 3000 3001 #----------------------------------------------------------------------- 3002 # Extension SYS_ExpanderControl_v4_40 3003 #----------------------------------------------------------------------- 3004 3005 # Sets the I/O and RAM expander's control register 3006 # 3007 # Variables: 3008 # vAC bit 2 Device enable /SS0 3009 # bit 3 Device enable /SS1 3010 # bit 4 Device enable /SS2 3011 # bit 5 Device enable /SS3 3012 # bit 6 Banking B0 3013 # bit 7 Banking B1 3014 # bit 15 Data out MOSI 3015 # sysArgs[7] Cache for control state (written to) 3016 # 3017 # Intended for prototyping, and probably too low-level for most applications 3018 # Still there's a safeguard: it's not possible to disable RAM using this 3019 3020 label('SYS_ExpanderControl_v4_40') SYS_ExpanderControl_v4_40: 0b09 140d ld $0d,y 3021 ld(hi('sys_ExpanderControl'),Y) #15 0b0a e000 jmp y,$00 3022 jmp(Y,'sys_ExpanderControl') #16 0b0b 000c ld $0c 3023 ld(0b00001100) #17 3024 # ^^^^^^^^ 3025 # |||||||`-- SCLK 3026 # ||||||`--- Not connected 3027 # |||||`---- /SS0 3028 # ||||`----- /SS1 3029 # |||`------ /SS2 or /CPOL 3030 # ||`------- /SS3 or /ZPBANK 3031 # |`-------- B0 3032 # `--------- B1 3033 3034 #----------------------------------------------------------------------- 3035 # Extension SYS_Run6502_v4_80 3036 #----------------------------------------------------------------------- 3037 3038 # Transfer control to v6502 3039 # 3040 # Calling 6502 code from vCPU goes (only) through this SYS function. 3041 # Directly modifying the vCpuSelect variable is unreliable. The 3042 # control transfer is immediate, without waiting for the current 3043 # time slice to end or first returning to vCPU. 3044 # 3045 # vCPU code and v6502 code can interoperate without much hassle: 3046 # - The v6502 program counter is vLR, and v6502 doesn't touch vPC 3047 # - Returning to vCPU is with the BRK instruction 3048 # - BRK doesn't dump process state on the stack 3049 # - vCPU can save/restore the vLR with PUSH/POP 3050 # - Stacks are shared, vAC is shared 3051 # - vAC can indicate what the v6502 code wants. vAC+1 will be cleared 3052 # - Alternative is to leave a word in sysArgs[6:7] (v6502 X and Y registers) 3053 # - Another way is to set vPC before BRK, and vCPU will continue there(+2) 3054 # 3055 # Calling v6502 code from vCPU looks like this: 3056 # LDWI SYS_Run6502_v4_80 3057 # STW sysFn 3058 # LDWI $6502_start_address 3059 # STW vLR 3060 # SYS 80 3061 # 3062 # Variables: 3063 # vAC Accumulator 3064 # vLR Program Counter 3065 # vSP Stack Pointer (+1) 3066 # sysArgs[6] Index Register X 3067 # sysArgs[7] Index Register Y 3068 # For info: 3069 # sysArgs[0:1] Address Register, free to clobber 3070 # sysArgs[2] Instruction Register, free to clobber 3071 # sysArgs[3:5] Flags, don't touch 3072 # 3073 # Implementation details:: 3074 # 3075 # The time to reserve for this transition is the maximum time 3076 # between NEXT and v6502_check. This is 3077 # SYS call duration + 2*v6502_maxTicks + (v6502_overhead - vCPU_overhead) 3078 # = 22 + 28 + (11 - 9) = 62 cycles. 3079 # So reserving 80 cycles is future proof. This isn't overhead, as it includes 3080 # the fetching of the first 6502 opcode and its operands.. 3081 # 3082 # 0 10 28=0 9 3083 # ---+----+---------+------------+------------------+-----------+--- 3084 # video | nop| runVcpu | ENTER | At least one ins | EXIT | video 3085 # ---+----+---------+------------+------------------+-----------+--- 3086 # sync prelude ENTER-to-ins ins-to-NEXT NEXT-to-video 3087 # |<-->| 3088 # 0/1 |<------->| 3089 # 5 |<----------------------------->| 3090 # runVCpu_overhead 28 |<--------->| 3091 # 2*maxTicks 9 3092 # vCPU_overhead 3093 # 3094 # 0 21 38=0 11 3095 # ---+----+---------+----------------+--------------------+-----------+--- 3096 # video | nop| runVcpu | v6502_ENTER | At least one fetch |v6502_exitB| video 3097 # ---+----+---------+----------------+--------------------+-----------+--- 3098 # sync prelude enter-to-fetch fetch-to-check check-to-video 3099 # |<-->| 3100 # 0/1 |<------->| 3101 # 5 |<----------------------------------->| 3102 # runVcpu_overhead 38 |<--------->| 3103 # 2*v6520_maxTicks 11 3104 # v6502_overhead 3105 3106 label('SYS_Run6502_v4_80') SYS_Run6502_v4_80: 0b0c 140d ld $0d,y 3107 ld(hi('sys_v6502'),Y) #15 0b0d e08b jmp y,$8b 3108 jmp(Y,'sys_v6502') #16 0b0e 000d ld $0d 3109 ld(hi('v6502_ENTER')) #17 Activate v6502 3110 3111 #----------------------------------------------------------------------- 3112 # Extension SYS_ResetWaveforms_v4_50 3113 #----------------------------------------------------------------------- 3114 3115 # soundTable[4x+0] = sawtooth, to be modified into metallic/noise 3116 # soundTable[4x+1] = pulse 3117 # soundTable[4x+2] = triangle 3118 # soundTable[4x+3] = sawtooth, also useful to right shift 2 bits 3119 3120 label('SYS_ResetWaveforms_v4_50') SYS_ResetWaveforms_v4_50: 0b0f 1412 ld $12,y 3121 ld(hi('sys_ResetWaveforms'),Y) #15 Initial setup of waveforms. [vAC+0]=i 0b10 e0a5 jmp y,$a5 3122 jmp(Y,'sys_ResetWaveforms') #16 0b11 1407 ld $07,y 3123 ld(soundTable>>8,Y) #17 3124 3125 #----------------------------------------------------------------------- 3126 # Extension SYS_ShuffleNoise_v4_46 3127 #----------------------------------------------------------------------- 3128 3129 # Use simple 6-bits variation of RC4 to permutate waveform 0 in soundTable 3130 3131 label('SYS_ShuffleNoise_v4_46') SYS_ShuffleNoise_v4_46: 0b12 1412 ld $12,y 3132 ld(hi('sys_ShuffleNoise'),Y) #15 Shuffle soundTable[4i+0]. [vAC+0]=4j, [vAC+1]=4i 0b13 e0c6 jmp y,$c6 3133 jmp(Y,'sys_ShuffleNoise') #16 0b14 1407 ld $07,y 3134 ld(soundTable>>8,Y) #17 3135 3136 #----------------------------------------------------------------------- 3137 # Extension SYS_SpiExchangeBytes_v4_134 3138 #----------------------------------------------------------------------- 3139 3140 # Send AND receive 1..256 bytes over SPI interface 3141 3142 # Variables: 3143 # sysArgs[0] Page index start, for both send/receive (in, changed) 3144 # sysArgs[1] Memory page for send data (in) 3145 # sysArgs[2] Page index stop (in) 3146 # sysArgs[3] Memory page for receive data (in) 3147 # sysArgs[4] Scratch (changed) 3148 3149 label('SYS_SpiExchangeBytes_v4_134') SYS_SpiExchangeBytes_v4_134: 0b15 140d ld $0d,y 3150 ld(hi('sys_SpiExchangeBytes'),Y)#15 0b16 e015 jmp y,$15 3151 jmp(Y,'sys_SpiExchangeBytes') #16 0b17 1401 ld $01,y 3152 ld(hi(ctrlBits),Y) #17 Control state as saved by SYS_ExpanderControl 3153 3154 3155 #----------------------------------------------------------------------- 3156 # Extension SYS_ReceiveSerial1_v6_32 3157 #----------------------------------------------------------------------- 3158 3159 # SYS function for receiving one byte over the serial controller port. 3160 # This is a public version of SYS_NextByteIn from the loader private 3161 # extension. A byte is read from IN when videoY reaches 3162 # sysArgs[3]. The byte is added to the checksum sysArgs[2] then stored 3163 # at address sysArgs[0:1] which gets incremented. 3164 # 3165 # The 65 bytes of a serial frame can be read for the following values 3166 # of videoY: 207 (protocol byte) 219 (length, 6 bits only) 235, 251 3167 # (address) then 2, 6, 10, .. 238 stepping by four, then 185. 3168 # 3169 # Variables: 3170 # sysArgs[0:1] Address 3171 # sysArgs[2] Checksum 3172 # sysArgs[3] Wait value (videoY) 3173 3174 label('SYS_ReceiveSerial1_v6_32') SYS_ReceiveSerial1_v6_32: 3175 bra('sys_ReceiveSerial1') #15 0b18 fcb2 bra sys_ReceiveSerial1 0b19 0127 ld [$27] 3176 ld([sysArgs+3]) #16 3177 3178 #----------------------------------------------------------------------- 3179 # Implementations 3180 #----------------------------------------------------------------------- 3181 3182 # SYS_SetMemory_54 implementation 3183 label('sys_SetMemory#18') sys_SetMemory#18: 0b1a 1527 ld [$27],y 3184 ld([sysArgs+3],Y) #18 0b1b f83e ble .sysSb#21 3185 ble('.sysSb#21') #19 Enter fast lane if >=128 or at 0 (-> 256) 0b1c a008 suba $08 3186 suba(8) #20 0b1d f440 bge .sysSb#23 3187 bge('.sysSb#23') #21 Or when >=8 0b1e c224 st [$24] 3188 st([sysArgs+0]) #22 0b1f 2004 anda $04 3189 anda(4) #23 0b20 f027 beq .sysSb#26 3190 beq('.sysSb#26') #24 0b21 0125 ld [$25] 3191 ld([sysArgs+1]) #25 Set 4 pixels 0b22 de00 st [y,x++] 3192 st([Y,Xpp]) #26 0b23 de00 st [y,x++] 3193 st([Y,Xpp]) #27 0b24 de00 st [y,x++] 3194 st([Y,Xpp]) #28 0b25 fc2a bra .sysSb#31 3195 bra('.sysSb#31') #29 0b26 de00 st [y,x++] 3196 st([Y,Xpp]) #30 3197 label('.sysSb#26') .sysSb#26: 0b27 0001 ld $01 3198 wait(31-26) #26 0b28 ec28 bne $0b28 0b29 a001 suba $01 3199 label('.sysSb#31') .sysSb#31: 0b2a 0124 ld [$24] 3200 ld([sysArgs+0]) #31 0b2b 2002 anda $02 3201 anda(2) #32 0b2c f031 beq .sysSb#35 3202 beq('.sysSb#35') #33 0b2d 0125 ld [$25] 3203 ld([sysArgs+1]) #34 Set 2 pixels 0b2e de00 st [y,x++] 3204 st([Y,Xpp]) #35 0b2f fc34 bra .sysSb#38 3205 bra('.sysSb#38') #36 0b30 de00 st [y,x++] 3206 st([Y,Xpp]) #37 3207 label('.sysSb#35') .sysSb#35: 0b31 0200 nop 3208 wait(38-35) #35 0b32 0200 nop 0b33 0200 nop 3209 label('.sysSb#38') .sysSb#38: 0b34 0124 ld [$24] 3210 ld([sysArgs+0]) #38 0b35 2001 anda $01 3211 anda(1) #39 0b36 f039 beq $0b39 3212 beq(pc()+3) #40 0b37 fc3a bra $0b3a 3213 bra(pc()+3) #41 0b38 0125 ld [$25] 3214 ld([sysArgs+1]) #42 Set 1 pixel 0b39 0d00 ld [y,x] 3215 ld([Y,X]) #42(!) No change 0b3a ce00 st [y,x] 3216 st([Y,X]) #43 0b3b 1403 ld $03,y 3217 ld(hi('NEXTY'),Y) #44 Return 0b3c e000 jmp y,$00 3218 jmp(Y,'NEXTY') #45 All done 0b3d 00e8 ld $e8 3219 ld(-48/2) #46 3220 label('.sysSb#21') .sysSb#21: 0b3e 0200 nop 3221 nop() #21 0b3f c224 st [$24] 3222 st([sysArgs+0]) #22 3223 label('.sysSb#23') .sysSb#23: 0b40 0125 ld [$25] 3224 ld([sysArgs+1]) #23 Set 8 pixels 0b41 de00 st [y,x++] 3225 st([Y,Xpp]) #24 0b42 de00 st [y,x++] 3226 st([Y,Xpp]) #25 0b43 de00 st [y,x++] 3227 st([Y,Xpp]) #26 0b44 de00 st [y,x++] 3228 st([Y,Xpp]) #27 0b45 de00 st [y,x++] 3229 st([Y,Xpp]) #28 0b46 de00 st [y,x++] 3230 st([Y,Xpp]) #29 0b47 de00 st [y,x++] 3231 st([Y,Xpp]) #30 0b48 de00 st [y,x++] 3232 st([Y,Xpp]) #31 0b49 0126 ld [$26] 3233 ld([sysArgs+2]) #32 Advance write pointer 0b4a 8008 adda $08 3234 adda(8) #33 0b4b c226 st [$26] 3235 st([sysArgs+2]) #34 0b4c 0124 ld [$24] 3236 ld([sysArgs+0]) #35 0b4d f050 beq $0b50 3237 beq(pc()+3) #36 0b4e fc51 bra $0b51 3238 bra(pc()+3) #37 0b4f 00fe ld $fe 3239 ld(-2) #38 Self-restart when more to do 0b50 0000 ld $00 3240 ld(0) #38(!) 0b51 8116 adda [$16] 3241 adda([vPC]) #39 0b52 c216 st [$16] 3242 st([vPC]) #40 0b53 1403 ld $03,y 3243 ld(hi('REENTER'),Y) #41 0b54 e0cb jmp y,$cb 3244 jmp(Y,'REENTER') #42 0b55 00e9 ld $e9 3245 ld(-46/2) #43 3246 3247 # SYS_SetMode_80 implementation 3248 label('sys_SetMode') sys_SetMode: 0b56 ec59 bne $0b59 3249 bne(pc()+3) #18 0b57 fc59 bra $0b59 3250 bra(pc()+2) #19 0b58 0003 ld $03 3251 ld('startVideo') #20 First enable video if disabled 0b59 c21e st [$1e] 3252 st([vReturn]) #20,21 0b5a 0119 ld [$19] 3253 ld([vAC+1]) #22 0b5b f065 beq .sysSm#25 3254 beq('.sysSm#25') #23 0b5c 1403 ld $03,y 3255 ld(hi('REENTER'),Y) #24 0b5d 6118 xora [$18] 3256 xora([vAC]) #25 0b5e 60b0 xora $b0 3257 xora((1975>>8)^(1975&255)) #26 Poor man\'s 1975 detection 0b5f ec62 bne $0b62 3258 bne(pc()+3) #27 0b60 fc63 bra $0b63 3259 bra(pc()+3) #28 3260 assert videoZ == 0x0100 0b61 c21e st [$1e] 3261 st([vReturn]) #29 DISABLE video/audio/serial/etc 0b62 0200 nop 3262 nop() #29(!) Ignore and return 0b63 e0cb jmp y,$cb 3263 jmp(Y,'REENTER') #30 0b64 00ef ld $ef 3264 ld(-34/2) #31 3265 label('.sysSm#25') .sysSm#25: 0b65 0118 ld [$18] 3266 ld([vAC]) #25 Mode 0,1,2,3 0b66 2003 anda $03 3267 anda(3) #26 0b67 806a adda $6a 3268 adda('.sysSm#30') #27 0b68 fe00 bra ac 3269 bra(AC) #28 0b69 fc6e bra .sysSm#31 3270 bra('.sysSm#31') #29 3271 label('.sysSm#30') .sysSm#30: 0b6a 000a ld $0a 3272 ld('pixels') #30 videoB lines 0b6b 000a ld $0a 3273 ld('pixels') #30 0b6c 00f6 ld $f6 3274 ld('nopixels') #30 0b6d 00f6 ld $f6 3275 ld('nopixels') #30 3276 label('.sysSm#31') .sysSm#31: 0b6e c20a st [$0a] 3277 st([videoModeB]) #31 0b6f 0118 ld [$18] 3278 ld([vAC]) #32 0b70 2003 anda $03 3279 anda(3) #33 0b71 8074 adda $74 3280 adda('.sysSm#37') #34 0b72 fe00 bra ac 3281 bra(AC) #35 0b73 fc78 bra .sysSm#38 3282 bra('.sysSm#38') #36 3283 label('.sysSm#37') .sysSm#37: 0b74 000a ld $0a 3284 ld('pixels') #37 videoC lines 0b75 000a ld $0a 3285 ld('pixels') #37 0b76 000a ld $0a 3286 ld('pixels') #37 0b77 00f6 ld $f6 3287 ld('nopixels') #37 3288 label('.sysSm#38') .sysSm#38: 0b78 c20b st [$0b] 3289 st([videoModeC]) #38 0b79 0118 ld [$18] 3290 ld([vAC]) #39 0b7a 2003 anda $03 3291 anda(3) #40 0b7b 807e adda $7e 3292 adda('.sysSm#44') #41 0b7c fe00 bra ac 3293 bra(AC) #42 0b7d fc82 bra .sysSm#45 3294 bra('.sysSm#45') #43 3295 label('.sysSm#44') .sysSm#44: 0b7e 000a ld $0a 3296 ld('pixels') #44 videoD lines 0b7f 00f6 ld $f6 3297 ld('nopixels') #44 0b80 00f6 ld $f6 3298 ld('nopixels') #44 0b81 00f6 ld $f6 3299 ld('nopixels') #44 3300 label('.sysSm#45') .sysSm#45: 0b82 c20c st [$0c] 3301 st([videoModeD]) #45 0b83 e0cb jmp y,$cb 3302 jmp(Y,'REENTER') #46 0b84 00e7 ld $e7 3303 ld(-50/2) #47 3304 3305 # SYS_SendSerial1_v3_80 implementation 3306 label('sys_SendSerial1') sys_SendSerial1: 0b85 f08c beq .sysSs#20 3307 beq('.sysSs#20') #18 0b86 1124 ld [$24],x 3308 ld([sysArgs+0],X) #19 0b87 0116 ld [$16] 3309 ld([vPC]) #20 Wait for vBlank 0b88 a002 suba $02 3310 suba(2) #21 0b89 1403 ld $03,y 3311 ld(hi('REENTER_28'),Y) #22 0b8a e0ca jmp y,$ca 3312 jmp(Y,'REENTER_28') #23 0b8b c216 st [$16] 3313 st([vPC]) #24 3314 label('.sysSs#20') .sysSs#20: 0b8c 1525 ld [$25],y 3315 ld([sysArgs+1],Y) #20 Synchronized with vBlank 0b8d 0d00 ld [y,x] 3316 ld([Y,X]) #21 Copy next bit 0b8e 2126 anda [$26] 3317 anda([sysArgs+2]) #22 0b8f ec92 bne $0b92 3318 bne(pc()+3) #23 0b90 fc93 bra $0b93 3319 bra(pc()+3) #24 0b91 000e ld $0e 3320 ld(7*2) #25 0b92 0012 ld $12 3321 ld(9*2) #25 0b93 c20d st [$0d] 3322 st([videoPulse]) #26 0b94 0126 ld [$26] 3323 ld([sysArgs+2]) #27 Rotate input bit 0b95 8200 adda ac 3324 adda(AC) #28 0b96 ec99 bne $0b99 3325 bne(pc()+3) #29 0b97 fc99 bra $0b99 3326 bra(pc()+2) #30 0b98 0001 ld $01 3327 ld(1) #31 0b99 c226 st [$26] 3328 st([sysArgs+2]) #31,32 (must be idempotent) 0b9a 2001 anda $01 3329 anda(1) #33 Optionally increment pointer 0b9b 8124 adda [$24] 3330 adda([sysArgs+0]) #34 0b9c d224 st [$24],x 3331 st([sysArgs+0],X) #35 0b9d 0127 ld [$27] 3332 ld([sysArgs+3]) #36 Frame counter 0b9e a001 suba $01 3333 suba(1) #37 0b9f f0ae beq .sysSs#40 3334 beq('.sysSs#40') #38 0ba0 1403 ld $03,y 3335 ld(hi('REENTER'),Y) #39 0ba1 c227 st [$27] 3336 st([sysArgs+3]) #40 0ba2 010f ld [$0f] 3337 ld([serialRaw]) #41 Test for anything being sent back 0ba3 60ff xora $ff 3338 xora(255) #42 0ba4 f0a9 beq .sysSs#45 3339 beq('.sysSs#45') #43 0ba5 c218 st [$18] 3340 st([vAC]) #44 Abort after key press with non-zero error 0ba6 c219 st [$19] 3341 st([vAC+1]) #45 0ba7 e0cb jmp y,$cb 3342 jmp(Y,'REENTER') #46 0ba8 00e7 ld $e7 3343 ld(-50/2) #47 3344 label('.sysSs#45') .sysSs#45: 0ba9 0116 ld [$16] 3345 ld([vPC]) #45 Continue sending bits 0baa a002 suba $02 3346 suba(2) #46 0bab c216 st [$16] 3347 st([vPC]) #47 0bac e0cb jmp y,$cb 3348 jmp(Y,'REENTER') #48 0bad 00e6 ld $e6 3349 ld(-52/2) #49 3350 label('.sysSs#40') .sysSs#40: 0bae c218 st [$18] 3351 st([vAC]) #40 Stop sending bits, no error 0baf c219 st [$19] 3352 st([vAC+1]) #41 0bb0 e0cb jmp y,$cb 3353 jmp(Y,'REENTER') #42 0bb1 00e9 ld $e9 3354 ld(-46/2) #43 3355 3356 # SYS_ReceiveSerialByte implementation 3357 label('sys_ReceiveSerial1') sys_ReceiveSerial1: 0bb2 6109 xora [$09] 3358 xora([videoY]) #17 0bb3 ecc0 bne .sysRsb#20 3359 bne('.sysRsb#20') #18 0bb4 1124 ld [$24],x 3360 ld([sysArgs+0],X) #19 0bb5 1525 ld [$25],y 3361 ld([sysArgs+1],Y) #20 0bb6 0300 ld in 3362 ld(IN) #21 0bb7 ce00 st [y,x] 3363 st([Y,X]) #22 0bb8 8126 adda [$26] 3364 adda([sysArgs+2]) #23 0bb9 c226 st [$26] 3365 st([sysArgs+2]) #24 0bba 0124 ld [$24] 3366 ld([sysArgs+0]) #25 0bbb 8001 adda $01 3367 adda(1) #26 0bbc c224 st [$24] 3368 st([sysArgs+0]) #27 0bbd 1403 ld $03,y 3369 ld(hi('NEXTY'),Y) #28 0bbe e000 jmp y,$00 3370 jmp(Y,'NEXTY') #29 0bbf 00f0 ld $f0 3371 ld(-32/2) #30 3372 # Restart the instruction in the next timeslice 3373 label('.sysRsb#20') .sysRsb#20: 0bc0 0116 ld [$16] 3374 ld([vPC]) #20 0bc1 a002 suba $02 3375 suba(2) #21 0bc2 c216 st [$16] 3376 st([vPC]) #22 0bc3 1403 ld $03,y 3377 ld(hi('REENTER'),Y) #23 0bc4 e0cb jmp y,$cb 3378 jmp(Y,'REENTER') #24 0bc5 00f2 ld $f2 3379 ld(-28/2) #25 3380 3381 # CALLI implementation (vCPU instruction) 3382 label('calli#13') calli#13: 0bc6 8003 adda $03 3383 adda(3) #13,43 0bc7 c21a st [$1a] 3384 st([vLR]) #14 0bc8 0117 ld [$17] 3385 ld([vPC+1]) #15 0bc9 d61b st [$1b],y 3386 st([vLR+1],Y) #16 0bca 0d00 ld [y,x] 3387 ld([Y,X]) #17 0bcb de00 st [y,x++] 3388 st([Y,Xpp]) #18 Just X++ 0bcc a002 suba $02 3389 suba(2) #19 0bcd c216 st [$16] 3390 st([vPC]) #20 0bce 0d00 ld [y,x] 3391 ld([Y,X]) #21 0bcf 1403 ld $03,y 3392 ld(hi('REENTER_28'),Y) #22 0bd0 e0ca jmp y,$ca 3393 jmp(Y,'REENTER_28') #23 0bd1 c217 st [$17] 3394 st([vPC+1]) #24 3395 3396 # ------------------------------------------------------------- 3397 # vCPU instructions for comparisons between two 16-bit operands 3398 # ------------------------------------------------------------- 3399 # 3400 # vCPU's conditional branching (BCC) always compares vAC against 0, 3401 # treating vAC as a two's complement 16-bit number. When we need to 3402 # compare two arbitrary numnbers we normally first take their difference 3403 # with SUBW. However, when this difference is too large, the subtraction 3404 # overflows and we get the wrong outcome. To get it right over the 3405 # entire range, an elaborate sequence is needed. TinyBASIC uses this 3406 # blurp for its relational operators. (It compares stack variable $02 3407 # with zero page variable $3a.) 3408 # 3409 # 0461 ee 02 LDLW $02 3410 # 0463 fc 3a XORW $3a 3411 # 0465 35 53 6a BGE $046c 3412 # 0468 ee 02 LDLW $02 3413 # 046a 90 6e BRA $0470 3414 # 046c ee 02 LDLW $02 3415 # 046e b8 3a SUBW $3a 3416 # 0470 35 56 73 BLE $0475 3417 # 3418 # The CMPHS and CMPHU instructions were introduced to simplify this. 3419 # They inspect both operands to see if there is an overflow risk. If 3420 # so, they modify vAC such that their difference gets smaller, while 3421 # preserving the relation between the two operands. After that, the 3422 # SUBW instruction can't overflow and we achieve a correct comparison. 3423 # Use CMPHS for signed comparisons and CMPHU for unsigned. With these, 3424 # the sequence above becomes: 3425 # 3426 # 0461 ee 02 LDLW $02 3427 # 0463 1f 3b CMPHS $3b Note: high byte of operand 3428 # 0465 b8 3a SUBW $3a 3429 # 0467 35 56 73 BLE $0475 3430 # 3431 # CMPHS/CMPHU don't make much sense other than in combination with 3432 # SUBW. These modify vACH, if needed, as given in the following table: 3433 # 3434 # vACH varH | vACH 3435 # bit7 bit7 | CMPHS CMPHU 3436 # --------------------------- 3437 # 0 0 | vACH vACH no change needed 3438 # 0 1 | varH+1 varH-1 narrowing the range 3439 # 1 0 | varH-1 varH+1 narrowing the range 3440 # 1 1 | vACH vACH no change needed 3441 # --------------------------- 3442 3443 # CMPHS implementation (vCPU instruction) 3444 label('cmphs#13') cmphs#13: 0bd2 1403 ld $03,y 3445 ld(hi('REENTER'),Y) #13 0bd3 0500 ld [x] 3446 ld([X]) #14 0bd4 6119 xora [$19] 3447 xora([vAC+1]) #15 0bd5 f4e6 bge .cmphu#18 3448 bpl('.cmphu#18') #16 Skip if same sign 0bd6 0119 ld [$19] 3449 ld([vAC+1]) #17 0bd7 e8da blt $0bda 3450 bmi(pc()+3) #18 0bd8 fcdb bra .cmphs#21 3451 bra(pc()+3) #19 3452 label('.cmphs#20') .cmphs#20: 0bd9 0001 ld $01 3453 ld(+1) #20 vAC < variable 0bda 00ff ld $ff 3454 ld(-1) #20(!) vAC > variable 3455 label('.cmphs#21') .cmphs#21: 0bdb 8500 adda [x] 3456 adda([X]) #21 0bdc c219 st [$19] 3457 st([vAC+1]) #22 0bdd e0ca jmp y,$ca 3458 jmp(Y,'REENTER_28') #23 3459 #dummy() #24 Overlap 3460 # 3461 # CMPHS implementation (vCPU instruction) 3462 label('cmphu#13') cmphu#13: 0bde 1403 ld $03,y 3463 ld(hi('REENTER'),Y) #13,24 0bdf 0500 ld [x] 3464 ld([X]) #14 0be0 6119 xora [$19] 3465 xora([vAC+1]) #15 0be1 f4e6 bge .cmphu#18 3466 bpl('.cmphu#18') #16 Skip if same sign 0be2 0119 ld [$19] 3467 ld([vAC+1]) #17 0be3 e8d9 blt .cmphs#20 3468 bmi('.cmphs#20') #18 0be4 fcdb bra .cmphs#21 3469 bra('.cmphs#21') #19 0be5 00ff ld $ff 3470 ld(-1) #20 vAC > variable 3471 3472 # No-operation for CMPHS/CMPHU when high bits are equal 3473 label('.cmphu#18') .cmphu#18: 0be6 e0cb jmp y,$cb 3474 jmp(Y,'REENTER') #18 0be7 00f5 ld $f5 3475 ld(-22/2) #19 3476 3477 #----------------------------------------------------------------------- 3478 # 3479 # $0c00 ROM page 12: More SYS functions (sprites) 3480 # 3481 # Page 1: vertical blank interval 3482 # Page 2: visible scanlines 3483 # 3484 #----------------------------------------------------------------------- 3485 0be8 0200 nop 3486 align(0x100, size=0x100) 0be9 0200 nop 0bea 0200 nop * 24 times 3487 3488 #----------------------------------------------------------------------- 3489 # Extension SYS_Sprite6_v3_64 3490 # Extension SYS_Sprite6x_v3_64 3491 # Extension SYS_Sprite6y_v3_64 3492 # Extension SYS_Sprite6xy_v3_64 3493 #----------------------------------------------------------------------- 3494 3495 # Blit sprite in screen memory 3496 # 3497 # Variables 3498 # vAC Destination address in screen 3499 # sysArgs[0:1] Source address of 6xY pixels (colors 0..63) terminated 3500 # by negative byte value N (typically N = -Y) 3501 # sysArgs[2:7] Scratch (user as copy buffer) 3502 # 3503 # This SYS function draws a sprite of 6 pixels wide and Y pixels high. 3504 # The pixel data is read sequentually from RAM, in horizontal chunks 3505 # of 6 pixels at a time, and then written to the screen through the 3506 # destination pointer (each chunk underneath the previous), thus 3507 # drawing a 6xY stripe. Pixel values should be non-negative. The first 3508 # negative byte N after a chunk signals the end of the sprite data. 3509 # So the sprite's height Y is determined by the source data and is 3510 # therefore flexible. This negative byte value, typically N == -Y, 3511 # is then used to adjust the destination pointer's high byte, to make 3512 # it easier to draw sprites wider than 6 pixels: just repeat the SYS 3513 # call for as many 6-pixel wide stripes you need. All arguments are 3514 # already left in place to facilitate this. After one call, the source 3515 # pointer will point past that source data, effectively: 3516 # src += Y * 6 + 1 3517 # The destination pointer will have been adjusted as: 3518 # dst += (Y + N) * 256 + 6 3519 # (With arithmetic wrapping around on the same memory page) 3520 # 3521 # Y is only limited by source memory, not by CPU cycles. The 3522 # implementation is such that the SYS function self-repeats, each 3523 # time drawing the next 6-pixel chunk. It can typically draw 12 3524 # pixels per scanline this way. 3525 3526 label('SYS_Sprite6_v3_64') 3527 SYS_Sprite6_v3_64: 0c00 1124 ld [$24],x 3528 ld([sysArgs+0],X) #15 Pixel data source address 0c01 1525 ld [$25],y 3529 ld([sysArgs+1],Y) #16 0c02 0d00 ld [y,x] 3530 ld([Y,X]) #17 Next pixel or stop 0c03 f411 bge .sysDpx0 3531 bpl('.sysDpx0') #18 0c04 de00 st [y,x++] 3532 st([Y,Xpp]) #19 Just X++ 3533 0c05 8119 adda [$19] 3534 adda([vAC+1]) #20 Adjust dst for convenience 0c06 c219 st [$19] 3535 st([vAC+1]) #21 0c07 0118 ld [$18] 3536 ld([vAC]) #22 0c08 8006 adda $06 3537 adda(6) #23 0c09 c218 st [$18] 3538 st([vAC]) #24 0c0a 0124 ld [$24] 3539 ld([sysArgs+0]) #25 Adjust src for convenience 0c0b 8001 adda $01 3540 adda(1) #26 0c0c c224 st [$24] 3541 st([sysArgs+0]) #27 0c0d 0200 nop 3542 nop() #28 0c0e 1403 ld $03,y 3543 ld(hi('REENTER'),Y) #29 Normal exit (no self-repeat) 0c0f e0cb jmp y,$cb 3544 jmp(Y,'REENTER') #30 0c10 00ef ld $ef 3545 ld(-34/2) #31 3546 3547 label('.sysDpx0') .sysDpx0: 0c11 c226 st [$26] 3548 st([sysArgs+2]) #20 Gobble 6 pixels into buffer 0c12 0d00 ld [y,x] 3549 ld([Y,X]) #21 0c13 de00 st [y,x++] 3550 st([Y,Xpp]) #22 Just X++ 0c14 c227 st [$27] 3551 st([sysArgs+3]) #23 0c15 0d00 ld [y,x] 3552 ld([Y,X]) #24 0c16 de00 st [y,x++] 3553 st([Y,Xpp]) #25 Just X++ 0c17 c228 st [$28] 3554 st([sysArgs+4]) #26 0c18 0d00 ld [y,x] 3555 ld([Y,X]) #27 0c19 de00 st [y,x++] 3556 st([Y,Xpp]) #28 Just X++ 0c1a c229 st [$29] 3557 st([sysArgs+5]) #29 0c1b 0d00 ld [y,x] 3558 ld([Y,X]) #30 0c1c de00 st [y,x++] 3559 st([Y,Xpp]) #31 Just X++ 0c1d c22a st [$2a] 3560 st([sysArgs+6]) #32 0c1e 0d00 ld [y,x] 3561 ld([Y,X]) #33 0c1f de00 st [y,x++] 3562 st([Y,Xpp]) #34 Just X++ 0c20 c22b st [$2b] 3563 st([sysArgs+7]) #35 3564 0c21 1118 ld [$18],x 3565 ld([vAC],X) #36 Screen memory destination address 0c22 1519 ld [$19],y 3566 ld([vAC+1],Y) #37 0c23 0126 ld [$26] 3567 ld([sysArgs+2]) #38 Write 6 pixels 0c24 de00 st [y,x++] 3568 st([Y,Xpp]) #39 0c25 0127 ld [$27] 3569 ld([sysArgs+3]) #40 0c26 de00 st [y,x++] 3570 st([Y,Xpp]) #41 0c27 0128 ld [$28] 3571 ld([sysArgs+4]) #42 0c28 de00 st [y,x++] 3572 st([Y,Xpp]) #43 0c29 0129 ld [$29] 3573 ld([sysArgs+5]) #44 0c2a de00 st [y,x++] 3574 st([Y,Xpp]) #45 0c2b 012a ld [$2a] 3575 ld([sysArgs+6]) #46 0c2c de00 st [y,x++] 3576 st([Y,Xpp]) #47 0c2d 012b ld [$2b] 3577 ld([sysArgs+7]) #48 0c2e de00 st [y,x++] 3578 st([Y,Xpp]) #49 3579 0c2f 0124 ld [$24] 3580 ld([sysArgs+0]) #50 src += 6 0c30 8006 adda $06 3581 adda(6) #51 0c31 c224 st [$24] 3582 st([sysArgs+0]) #52 0c32 0119 ld [$19] 3583 ld([vAC+1]) #53 dst += 256 0c33 8001 adda $01 3584 adda(1) #54 0c34 c219 st [$19] 3585 st([vAC+1]) #55 3586 0c35 0116 ld [$16] 3587 ld([vPC]) #56 Self-repeating SYS call 0c36 a002 suba $02 3588 suba(2) #57 0c37 c216 st [$16] 3589 st([vPC]) #58 0c38 1403 ld $03,y 3590 ld(hi('REENTER'),Y) #59 0c39 e0cb jmp y,$cb 3591 jmp(Y,'REENTER') #60 0c3a 00e0 ld $e0 3592 ld(-64/2) #61 3593 0c3b 0200 nop 3594 align(64) 0c3c 0200 nop 0c3d 0200 nop * 5 times 3595 label('SYS_Sprite6x_v3_64') 3596 SYS_Sprite6x_v3_64: 0c40 1124 ld [$24],x 3597 ld([sysArgs+0],X) #15 Pixel data source address 0c41 1525 ld [$25],y 3598 ld([sysArgs+1],Y) #16 0c42 0d00 ld [y,x] 3599 ld([Y,X]) #17 Next pixel or stop 0c43 f451 bge .sysDpx1 3600 bpl('.sysDpx1') #18 0c44 de00 st [y,x++] 3601 st([Y,Xpp]) #19 Just X++ 3602 0c45 8119 adda [$19] 3603 adda([vAC+1]) #20 Adjust dst for convenience 0c46 c219 st [$19] 3604 st([vAC+1]) #21 0c47 0118 ld [$18] 3605 ld([vAC]) #22 0c48 a006 suba $06 3606 suba(6) #23 0c49 c218 st [$18] 3607 st([vAC]) #24 0c4a 0124 ld [$24] 3608 ld([sysArgs+0]) #25 Adjust src for convenience 0c4b 8001 adda $01 3609 adda(1) #26 0c4c c224 st [$24] 3610 st([sysArgs+0]) #27 0c4d 0200 nop 3611 nop() #28 0c4e 1403 ld $03,y 3612 ld(hi('REENTER'),Y) #29 Normal exit (no self-repeat) 0c4f e0cb jmp y,$cb 3613 jmp(Y,'REENTER') #30 0c50 00ef ld $ef 3614 ld(-34/2) #31 3615 3616 label('.sysDpx1') .sysDpx1: 0c51 c22b st [$2b] 3617 st([sysArgs+7]) #20 Gobble 6 pixels into buffer (backwards) 0c52 0d00 ld [y,x] 3618 ld([Y,X]) #21 0c53 de00 st [y,x++] 3619 st([Y,Xpp]) #22 Just X++ 0c54 c22a st [$2a] 3620 st([sysArgs+6]) #23 0c55 0d00 ld [y,x] 3621 ld([Y,X]) #24 0c56 de00 st [y,x++] 3622 st([Y,Xpp]) #25 Just X++ 0c57 c229 st [$29] 3623 st([sysArgs+5]) #26 0c58 0d00 ld [y,x] 3624 ld([Y,X]) #27 0c59 de00 st [y,x++] 3625 st([Y,Xpp]) #28 Just X++ 0c5a c228 st [$28] 3626 st([sysArgs+4]) #29 0c5b 0d00 ld [y,x] 3627 ld([Y,X]) #30 0c5c de00 st [y,x++] 3628 st([Y,Xpp]) #31 Just X++ 0c5d c227 st [$27] 3629 st([sysArgs+3]) #32 0c5e 0d00 ld [y,x] 3630 ld([Y,X]) #33 0c5f de00 st [y,x++] 3631 st([Y,Xpp]) #34 Just X++ 3632 0c60 1118 ld [$18],x 3633 ld([vAC],X) #35 Screen memory destination address 0c61 1519 ld [$19],y 3634 ld([vAC+1],Y) #36 0c62 de00 st [y,x++] 3635 st([Y,Xpp]) #37 Write 6 pixels 0c63 0127 ld [$27] 3636 ld([sysArgs+3]) #38 0c64 de00 st [y,x++] 3637 st([Y,Xpp]) #39 0c65 0128 ld [$28] 3638 ld([sysArgs+4]) #40 0c66 de00 st [y,x++] 3639 st([Y,Xpp]) #41 0c67 0129 ld [$29] 3640 ld([sysArgs+5]) #42 0c68 de00 st [y,x++] 3641 st([Y,Xpp]) #43 0c69 012a ld [$2a] 3642 ld([sysArgs+6]) #44 0c6a de00 st [y,x++] 3643 st([Y,Xpp]) #45 0c6b 012b ld [$2b] 3644 ld([sysArgs+7]) #46 0c6c de00 st [y,x++] 3645 st([Y,Xpp]) #47 3646 0c6d 0124 ld [$24] 3647 ld([sysArgs+0]) #48 src += 6 0c6e 8006 adda $06 3648 adda(6) #49 0c6f c224 st [$24] 3649 st([sysArgs+0]) #50 0c70 0119 ld [$19] 3650 ld([vAC+1]) #51 dst += 256 0c71 8001 adda $01 3651 adda(1) #52 0c72 c219 st [$19] 3652 st([vAC+1]) #53 3653 0c73 0116 ld [$16] 3654 ld([vPC]) #54 Self-repeating SYS call 0c74 a002 suba $02 3655 suba(2) #55 0c75 c216 st [$16] 3656 st([vPC]) #56 0c76 1403 ld $03,y 3657 ld(hi('REENTER'),Y) #57 0c77 e0cb jmp y,$cb 3658 jmp(Y,'REENTER') #58 0c78 00e1 ld $e1 3659 ld(-62/2) #59 3660 0c79 0200 nop 3661 align(64) 0c7a 0200 nop 0c7b 0200 nop * 7 times 3662 label('SYS_Sprite6y_v3_64') 3663 SYS_Sprite6y_v3_64: 0c80 1124 ld [$24],x 3664 ld([sysArgs+0],X) #15 Pixel data source address 0c81 1525 ld [$25],y 3665 ld([sysArgs+1],Y) #16 0c82 0d00 ld [y,x] 3666 ld([Y,X]) #17 Next pixel or stop 0c83 f493 bge .sysDpx2 3667 bpl('.sysDpx2') #18 0c84 de00 st [y,x++] 3668 st([Y,Xpp]) #19 Just X++ 3669 0c85 60ff xora $ff 3670 xora(255) #20 Adjust dst for convenience 0c86 8001 adda $01 3671 adda(1) #21 0c87 8119 adda [$19] 3672 adda([vAC+1]) #22 0c88 c219 st [$19] 3673 st([vAC+1]) #23 0c89 0118 ld [$18] 3674 ld([vAC]) #24 0c8a 8006 adda $06 3675 adda(6) #25 0c8b c218 st [$18] 3676 st([vAC]) #26 0c8c 0124 ld [$24] 3677 ld([sysArgs+0]) #27 Adjust src for convenience 0c8d 8001 adda $01 3678 adda(1) #28 0c8e c224 st [$24] 3679 st([sysArgs+0]) #29 0c8f 0200 nop 3680 nop() #30 0c90 1403 ld $03,y 3681 ld(hi('REENTER'),Y) #31 Normal exit (no self-repeat) 0c91 e0cb jmp y,$cb 3682 jmp(Y,'REENTER') #32 0c92 00ee ld $ee 3683 ld(-36/2) #33 3684 3685 label('.sysDpx2') .sysDpx2: 0c93 c226 st [$26] 3686 st([sysArgs+2]) #20 Gobble 6 pixels into buffer 0c94 0d00 ld [y,x] 3687 ld([Y,X]) #21 0c95 de00 st [y,x++] 3688 st([Y,Xpp]) #22 Just X++ 0c96 c227 st [$27] 3689 st([sysArgs+3]) #23 0c97 0d00 ld [y,x] 3690 ld([Y,X]) #24 0c98 de00 st [y,x++] 3691 st([Y,Xpp]) #25 Just X++ 0c99 c228 st [$28] 3692 st([sysArgs+4]) #26 0c9a 0d00 ld [y,x] 3693 ld([Y,X]) #27 0c9b de00 st [y,x++] 3694 st([Y,Xpp]) #28 Just X++ 0c9c c229 st [$29] 3695 st([sysArgs+5]) #29 0c9d 0d00 ld [y,x] 3696 ld([Y,X]) #30 0c9e de00 st [y,x++] 3697 st([Y,Xpp]) #31 Just X++ 0c9f c22a st [$2a] 3698 st([sysArgs+6]) #32 0ca0 0d00 ld [y,x] 3699 ld([Y,X]) #33 0ca1 de00 st [y,x++] 3700 st([Y,Xpp]) #34 Just X++ 0ca2 c22b st [$2b] 3701 st([sysArgs+7]) #35 3702 0ca3 1118 ld [$18],x 3703 ld([vAC],X) #36 Screen memory destination address 0ca4 1519 ld [$19],y 3704 ld([vAC+1],Y) #37 0ca5 0126 ld [$26] 3705 ld([sysArgs+2]) #38 Write 6 pixels 0ca6 de00 st [y,x++] 3706 st([Y,Xpp]) #39 0ca7 0127 ld [$27] 3707 ld([sysArgs+3]) #40 0ca8 de00 st [y,x++] 3708 st([Y,Xpp]) #41 0ca9 0128 ld [$28] 3709 ld([sysArgs+4]) #42 0caa de00 st [y,x++] 3710 st([Y,Xpp]) #43 0cab 0129 ld [$29] 3711 ld([sysArgs+5]) #44 0cac de00 st [y,x++] 3712 st([Y,Xpp]) #45 0cad 012a ld [$2a] 3713 ld([sysArgs+6]) #46 0cae de00 st [y,x++] 3714 st([Y,Xpp]) #47 0caf 012b ld [$2b] 3715 ld([sysArgs+7]) #48 0cb0 de00 st [y,x++] 3716 st([Y,Xpp]) #49 3717 0cb1 0124 ld [$24] 3718 ld([sysArgs+0]) #50 src += 6 0cb2 8006 adda $06 3719 adda(6) #51 0cb3 c224 st [$24] 3720 st([sysArgs+0]) #52 0cb4 0119 ld [$19] 3721 ld([vAC+1]) #53 dst -= 256 0cb5 a001 suba $01 3722 suba(1) #54 0cb6 c219 st [$19] 3723 st([vAC+1]) #55 3724 0cb7 0116 ld [$16] 3725 ld([vPC]) #56 Self-repeating SYS call 0cb8 a002 suba $02 3726 suba(2) #57 0cb9 c216 st [$16] 3727 st([vPC]) #58 0cba 1403 ld $03,y 3728 ld(hi('REENTER'),Y) #59 0cbb e0cb jmp y,$cb 3729 jmp(Y,'REENTER') #60 0cbc 00e0 ld $e0 3730 ld(-64/2) #61 3731 0cbd 0200 nop 3732 align(64) 0cbe 0200 nop 0cbf 0200 nop 3733 label('SYS_Sprite6xy_v3_64') 3734 SYS_Sprite6xy_v3_64: 0cc0 1124 ld [$24],x 3735 ld([sysArgs+0],X) #15 Pixel data source address 0cc1 1525 ld [$25],y 3736 ld([sysArgs+1],Y) #16 0cc2 0d00 ld [y,x] 3737 ld([Y,X]) #17 Next pixel or stop 0cc3 f4d3 bge .sysDpx3 3738 bpl('.sysDpx3') #18 0cc4 de00 st [y,x++] 3739 st([Y,Xpp]) #19 Just X++ 3740 0cc5 60ff xora $ff 3741 xora(255) #20 Adjust dst for convenience 0cc6 8001 adda $01 3742 adda(1) #21 0cc7 8119 adda [$19] 3743 adda([vAC+1]) #22 0cc8 c219 st [$19] 3744 st([vAC+1]) #23 0cc9 0118 ld [$18] 3745 ld([vAC]) #24 0cca a006 suba $06 3746 suba(6) #25 0ccb c218 st [$18] 3747 st([vAC]) #26 0ccc 0124 ld [$24] 3748 ld([sysArgs+0]) #27 Adjust src for convenience 0ccd 8001 adda $01 3749 adda(1) #28 0cce c224 st [$24] 3750 st([sysArgs+0]) #29 0ccf 0200 nop 3751 nop() #30 0cd0 1403 ld $03,y 3752 ld(hi('REENTER'),Y) #31 Normal exit (no self-repeat) 0cd1 e0cb jmp y,$cb 3753 jmp(Y,'REENTER') #32 0cd2 00ee ld $ee 3754 ld(-36/2) #33 3755 3756 label('.sysDpx3') .sysDpx3: 0cd3 c22b st [$2b] 3757 st([sysArgs+7]) #20 Gobble 6 pixels into buffer (backwards) 0cd4 0d00 ld [y,x] 3758 ld([Y,X]) #21 0cd5 de00 st [y,x++] 3759 st([Y,Xpp]) #22 Just X++ 0cd6 c22a st [$2a] 3760 st([sysArgs+6]) #23 0cd7 0d00 ld [y,x] 3761 ld([Y,X]) #24 0cd8 de00 st [y,x++] 3762 st([Y,Xpp]) #25 Just X++ 0cd9 c229 st [$29] 3763 st([sysArgs+5]) #26 0cda 0d00 ld [y,x] 3764 ld([Y,X]) #27 0cdb de00 st [y,x++] 3765 st([Y,Xpp]) #28 Just X++ 0cdc c228 st [$28] 3766 st([sysArgs+4]) #29 0cdd 0d00 ld [y,x] 3767 ld([Y,X]) #30 0cde de00 st [y,x++] 3768 st([Y,Xpp]) #31 Just X++ 0cdf c227 st [$27] 3769 st([sysArgs+3]) #32 0ce0 0d00 ld [y,x] 3770 ld([Y,X]) #33 0ce1 de00 st [y,x++] 3771 st([Y,Xpp]) #34 Just X++ 3772 0ce2 1118 ld [$18],x 3773 ld([vAC],X) #35 Screen memory destination address 0ce3 1519 ld [$19],y 3774 ld([vAC+1],Y) #36 0ce4 de00 st [y,x++] 3775 st([Y,Xpp]) #37 Write 6 pixels 0ce5 0127 ld [$27] 3776 ld([sysArgs+3]) #38 0ce6 de00 st [y,x++] 3777 st([Y,Xpp]) #39 0ce7 0128 ld [$28] 3778 ld([sysArgs+4]) #40 0ce8 de00 st [y,x++] 3779 st([Y,Xpp]) #41 0ce9 0129 ld [$29] 3780 ld([sysArgs+5]) #42 0cea de00 st [y,x++] 3781 st([Y,Xpp]) #43 0ceb 012a ld [$2a] 3782 ld([sysArgs+6]) #44 0cec de00 st [y,x++] 3783 st([Y,Xpp]) #45 0ced 012b ld [$2b] 3784 ld([sysArgs+7]) #46 0cee de00 st [y,x++] 3785 st([Y,Xpp]) #47 3786 0cef 0124 ld [$24] 3787 ld([sysArgs+0]) #48 src += 6 0cf0 8006 adda $06 3788 adda(6) #49 0cf1 c224 st [$24] 3789 st([sysArgs+0]) #50 0cf2 0119 ld [$19] 3790 ld([vAC+1]) #51 dst -= 256 0cf3 a001 suba $01 3791 suba(1) #52 0cf4 c219 st [$19] 3792 st([vAC+1]) #53 3793 0cf5 0116 ld [$16] 3794 ld([vPC]) #54 Self-repeating SYS call 0cf6 a002 suba $02 3795 suba(2) #55 0cf7 c216 st [$16] 3796 st([vPC]) #56 0cf8 1403 ld $03,y 3797 ld(hi('REENTER'),Y) #57 0cf9 e0cb jmp y,$cb 3798 jmp(Y,'REENTER') #58 0cfa 00e1 ld $e1 3799 ld(-62/2) #59 3800 3801 #----------------------------------------------------------------------- 3802 0cfb 0200 nop 3803 align(0x100) 0cfc 0200 nop 0cfd 0200 nop * 5 times 3804 3805 label('sys_ExpanderControl') sys_ExpanderControl: 0d00 1401 ld $01,y 3806 ld(hi(ctrlBits),Y) #18 0d01 2118 anda [$18] 3807 anda([vAC]) #19 check for special ctrl code space 0d02 f009 beq sysEx#22 3808 beq('sysEx#22') #20 0d03 0118 ld [$18] 3809 ld([vAC]) #21 load low byte of ctrl code in delay slot 0d04 20fc anda $fc 3810 anda(0xfc) #22 sanitize normal ctrl code 0d05 caf8 st [y,$f8] 3811 st([Y,ctrlBits]) #23 store in ctrlBits 0d06 c21d st [$1d] 3812 st([vTmp]) #24 store in vTmp 0d07 fc0e bra sysEx#27 3813 bra('sysEx#27') #25 jump to issuing normal ctrl code 0d08 1519 ld [$19],y 3814 ld([vAC+1],Y) #26 load high byte of ctrl code in delay slot 3815 label('sysEx#22') sysEx#22: 0d09 30fc anda $fc,x 3816 anda(0xfc,X) #22 * special ctrl code 0d0a 09f8 ld [y,$f8] 3817 ld([Y,ctrlBits]) #23 get previous normal code from ctrlBits 0d0b c21d st [$1d] 3818 st([vTmp]) #24 save it in vTmp 0d0c 1519 ld [$19],y 3819 ld([vAC+1],Y) #25 load high byte of ctrl code 0d0d cd00 ctrl y,x 3820 ctrl(Y,X) #26 issue special ctrl code 3821 label('sysEx#27') sysEx#27: 0d0e 011d ld [$1d] 3822 ld([vTmp]) #27 load saved normal ctrl code 0d0f 30fc anda $fc,x 3823 anda(0xfc,X) #28 sanitize ctrlBits 0d10 cd00 ctrl y,x 3824 ctrl(Y,X) #29 issue normal ctrl code 0d11 011d ld [$1d] 3825 ld([vTmp]) #30 always load something after ctrl 0d12 1403 ld $03,y 3826 ld(hi('REENTER'),Y) #31 0d13 e0cb jmp y,$cb 3827 jmp(Y,'REENTER') #32 0d14 00ee ld $ee 3828 ld(-36/2) #33 3829 3830 3831 #----------------------------------------------------------------------- 3832 3833 label('sys_SpiExchangeBytes') 3834 sys_SpiExchangeBytes: 0d15 09f8 ld [y,$f8] 3835 ld([Y,ctrlBits]) #18 0d16 c228 st [$28] 3836 st([sysArgs+4]) #19 3837 0d17 1124 ld [$24],x 3838 ld([sysArgs+0],X) #20 Fetch byte to send 0d18 1525 ld [$25],y 3839 ld([sysArgs+1],Y) #21 0d19 0d00 ld [y,x] 3840 ld([Y,X]) #22 3841 3842 for i in range(8): 3843 st([vTmp],Y);C('Bit %d'%(7-i))#23+i*12 0d1a d61d st [$1d],y ;Bit 7 0d1b 1128 ld [$28],x 3844 ld([sysArgs+4],X) #24+i*12 0d1c dd00 ctrl y,x++ 3845 ctrl(Y,Xpp) #25+i*12 Set MOSI 0d1d dd00 ctrl y,x++ 3846 ctrl(Y,Xpp) #26+i*12 Raise SCLK, disable RAM! 0d1e 0100 ld [$00] 3847 ld([0]) #27+i*12 Get MISO 3848 if 1 <= WITH_SPI_BITS <= 4: 0d1f 2003 anda $03 3849 anda((1<= v6502_adjust 3891 3892 #----------------------------------------------------------------------- 3893 # MOS 6502 emulator 3894 #----------------------------------------------------------------------- 3895 3896 # Some quirks: 3897 # - Stack in zero page instead of page 1 3898 # - No interrupts 3899 # - No decimal mode (may never be added). D flag is emulated but ignored. 3900 # - BRK switches back to running 16-bits vCPU 3901 # - Illegal opcodes map to BRK, but can read ghost operands before trapping 3902 # - Illegal opcode $ff won't be trapped and cause havoc instead 3903 3904 # Big things TODO: 3905 # XXX Tuning, put most frequent instructions in the primary page 3906 3907 label('v6502_ror') 3908 assert v6502_Cflag == 1 v6502_ror: 0d8f 1525 ld [$25],y 3909 ld([v6502_ADH],Y) #12 0d90 00fc ld $fc 3910 ld(-46//2+v6502_maxTicks) #13 Is there enough time for the excess ticks? 0d91 8115 adda [$15] 3911 adda([vTicks]) #14 0d92 e8a6 blt .recheck17 3912 blt('.recheck17') #15 0d93 0127 ld [$27] 3913 ld([v6502_P]) #16 Transfer C to "bit 8" 0d94 2001 anda $01 3914 anda(1) #17 0d95 807f adda $7f 3915 adda(127) #18 0d96 2080 anda $80 3916 anda(128) #19 0d97 c219 st [$19] 3917 st([v6502_BI]) #20 The real 6502 wouldn't use BI for this 0d98 0127 ld [$27] 3918 ld([v6502_P]) #21 Transfer bit 0 to C 0d99 20fe anda $fe 3919 anda(~1) #22 0d9a c227 st [$27] 3920 st([v6502_P]) #23 0d9b 0d00 ld [y,x] 3921 ld([Y,X]) #24 0d9c 2001 anda $01 3922 anda(1) #25 0d9d 4127 ora [$27] 3923 ora([v6502_P]) #26 0d9e c227 st [$27] 3924 st([v6502_P]) #27 0d9f 00ee ld $ee 3925 ld('v6502_ror#38') #28 Shift table lookup 0da0 c21d st [$1d] 3926 st([vTmp]) #29 0da1 0d00 ld [y,x] 3927 ld([Y,X]) #30 0da2 20fe anda $fe 3928 anda(~1) #31 0da3 1405 ld $05,y 3929 ld(hi('shiftTable'),Y) #32 0da4 e200 jmp y,ac 3930 jmp(Y,AC) #33 0da5 fcff bra $ff 3931 bra(255) #34 bra shiftTable+255 3932 label('.recheck17') .recheck17: 0da6 140e ld $0e,y 3933 ld(hi('v6502_check'),Y) #17 Go back to time check before dispatch 0da7 e0f2 jmp y,$f2 3934 jmp(Y,'v6502_check') #18 0da8 00f6 ld $f6 3935 ld(-20/2) #19 3936 3937 label('v6502_lsr') 3938 assert v6502_Cflag == 1 v6502_lsr: 0da9 1525 ld [$25],y 3939 ld([v6502_ADH],Y) #12 0daa 0127 ld [$27] 3940 ld([v6502_P]) #13 Transfer bit 0 to C 0dab 20fe anda $fe 3941 anda(~1) #14 0dac c227 st [$27] 3942 st([v6502_P]) #15 0dad 0d00 ld [y,x] 3943 ld([Y,X]) #16 0dae 2001 anda $01 3944 anda(1) #17 0daf 4127 ora [$27] 3945 ora([v6502_P]) #18 0db0 c227 st [$27] 3946 st([v6502_P]) #19 0db1 00e7 ld $e7 3947 ld('v6502_lsr#30') #20 Shift table lookup 0db2 c21d st [$1d] 3948 st([vTmp]) #21 0db3 0d00 ld [y,x] 3949 ld([Y,X]) #22 0db4 20fe anda $fe 3950 anda(~1) #23 0db5 1405 ld $05,y 3951 ld(hi('shiftTable'),Y) #24 0db6 e200 jmp y,ac 3952 jmp(Y,AC) #25 0db7 fcff bra $ff 3953 bra(255) #26 bra shiftTable+255 3954 3955 label('v6502_rol') 3956 assert v6502_Cflag == 1 v6502_rol: 0db8 1525 ld [$25],y 3957 ld([v6502_ADH],Y) #12 0db9 0d00 ld [y,x] 3958 ld([Y,X]) #13 0dba 2080 anda $80 3959 anda(0x80) #14 0dbb c21d st [$1d] 3960 st([v6502_Tmp]) #15 0dbc 0127 ld [$27] 3961 ld([v6502_P]) #16 0dbd 2001 anda $01 3962 anda(1) #17 3963 label('.rol#18') .rol#18: 0dbe 8d00 adda [y,x] 3964 adda([Y,X]) #18 0dbf 8d00 adda [y,x] 3965 adda([Y,X]) #19 0dc0 ce00 st [y,x] 3966 st([Y,X]) #20 0dc1 c228 st [$28] 3967 st([v6502_Qz]) #21 Z flag 0dc2 c229 st [$29] 3968 st([v6502_Qn]) #22 N flag 0dc3 0127 ld [$27] 3969 ld([v6502_P]) #23 C Flag 0dc4 20fe anda $fe 3970 anda(~1) #24 0dc5 111d ld [$1d],x 3971 ld([v6502_Tmp],X) #25 0dc6 4500 ora [x] 3972 ora([X]) #26 0dc7 c227 st [$27] 3973 st([v6502_P]) #27 0dc8 140e ld $0e,y 3974 ld(hi('v6502_next'),Y) #28 0dc9 00f0 ld $f0 3975 ld(-32/2) #29 0dca e020 jmp y,$20 3976 jmp(Y,'v6502_next') #30 3977 #nop() #31 Overlap 3978 # 3979 label('v6502_asl') v6502_asl: 0dcb 1525 ld [$25],y 3980 ld([v6502_ADH],Y) #12,32 0dcc 0d00 ld [y,x] 3981 ld([Y,X]) #13 0dcd 2080 anda $80 3982 anda(0x80) #14 0dce c21d st [$1d] 3983 st([v6502_Tmp]) #15 0dcf fcbe bra .rol#18 3984 bra('.rol#18') #16 0dd0 0000 ld $00 3985 ld(0) #17 3986 3987 label('v6502_jmp1') v6502_jmp1: 0dd1 0200 nop 3988 nop() #12 0dd2 0124 ld [$24] 3989 ld([v6502_ADL]) #13 0dd3 c21a st [$1a] 3990 st([v6502_PCL]) #14 0dd4 0125 ld [$25] 3991 ld([v6502_ADH]) #15 0dd5 c21b st [$1b] 3992 st([v6502_PCH]) #16 0dd6 140e ld $0e,y 3993 ld(hi('v6502_next'),Y) #17 0dd7 e020 jmp y,$20 3994 jmp(Y,'v6502_next') #18 0dd8 00f6 ld $f6 3995 ld(-20/2) #19 3996 3997 label('v6502_jmp2') v6502_jmp2: 0dd9 0200 nop 3998 nop() #12 0dda 1525 ld [$25],y 3999 ld([v6502_ADH],Y) #13 0ddb 0d00 ld [y,x] 4000 ld([Y,X]) #14 0ddc de00 st [y,x++] 4001 st([Y,Xpp]) #15 (Just X++) Wrap around: bug compatible with NMOS 0ddd c21a st [$1a] 4002 st([v6502_PCL]) #16 0dde 0d00 ld [y,x] 4003 ld([Y,X]) #17 0ddf c21b st [$1b] 4004 st([v6502_PCH]) #18 0de0 140e ld $0e,y 4005 ld(hi('v6502_next'),Y) #19 0de1 e020 jmp y,$20 4006 jmp(Y,'v6502_next') #20 0de2 00f5 ld $f5 4007 ld(-22/2) #21 4008 4009 label('v6502_pla') v6502_pla: 0de3 011c ld [$1c] 4010 ld([v6502_S]) #12 0de4 1200 ld ac,x 4011 ld(AC,X) #13 0de5 8001 adda $01 4012 adda(1) #14 0de6 c21c st [$1c] 4013 st([v6502_S]) #15 0de7 0500 ld [x] 4014 ld([X]) #16 0de8 c218 st [$18] 4015 st([v6502_A]) #17 0de9 c228 st [$28] 4016 st([v6502_Qz]) #18 Z flag 0dea c229 st [$29] 4017 st([v6502_Qn]) #19 N flag 0deb 140e ld $0e,y 4018 ld(hi('v6502_next'),Y) #20 0dec 00f4 ld $f4 4019 ld(-24/2) #21 0ded e020 jmp y,$20 4020 jmp(Y,'v6502_next') #22 4021 #nop() #23 Overlap 4022 # 4023 label('v6502_pha') v6502_pha: 0dee 140e ld $0e,y 4024 ld(hi('v6502_next'),Y) #12,24 0def 011c ld [$1c] 4025 ld([v6502_S]) #13 0df0 a001 suba $01 4026 suba(1) #14 0df1 d21c st [$1c],x 4027 st([v6502_S],X) #15 0df2 0118 ld [$18] 4028 ld([v6502_A]) #16 0df3 c600 st [x] 4029 st([X]) #17 0df4 e020 jmp y,$20 4030 jmp(Y,'v6502_next') #18 0df5 00f6 ld $f6 4031 ld(-20/2) #19 4032 4033 label('v6502_brk') v6502_brk: 0df6 0002 ld $02 4034 ld(hi('ENTER')) #12 Switch to vCPU 0df7 c205 st [$05] 4035 st([vCpuSelect]) #13 4036 assert v6502_A == vAC 0df8 0000 ld $00 4037 ld(0) #14 0df9 c219 st [$19] 4038 st([vAC+1]) #15 0dfa 1403 ld $03,y 4039 ld(hi('REENTER'),Y) #16 Switch in the current time slice 0dfb 00fb ld $fb 4040 ld(-22//2+v6502_adjust) #17 0dfc e0cb jmp y,$cb 4041 jmp(Y,'REENTER') #18 0dfd 0200 nop 4042 nop() #19 4043 4044 # All interpreter entry points must share the same page offset, because 4045 # this offset is hard-coded as immediate operand in the video driver. 4046 # The Gigatron's original vCPU's 'ENTER' label is already at $2ff, so we 4047 # just use $dff for 'v6502_ENTER'. v6502 actually has two entry points. 4048 # The other is 'v6502_RESUME' at $10ff. It is used for instructions 4049 # that were fetched but not yet executed. Allowing the split gives finer 4050 # granulariy, and hopefully more throughput for the simpler instructions. 4051 # (There is no "overhead" for allowing instruction splitting, because 4052 # both emulation phases must administer [vTicks] anyway.) 4053 while pc()&255 < 255: 0dfe 0200 nop 4054 nop() 4055 label('v6502_ENTER') v6502_ENTER: 0dff fc22 bra v6502_next2 4056 bra('v6502_next2') #0 v6502 primary entry point 4057 # --- Page boundary --- 0e00 a006 suba $06 4058 suba(v6502_adjust) #1,19 Adjust for vCPU/v6520 timing differences 4059 4060 #19 Addressing modes 4061 ( '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 4062 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 4063 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 4064 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 4065 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 4066 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 4067 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 4068 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 4069 4070 # Special encoding cases for emulator: 4071 # $00 BRK - but gets mapped to #$DD handled in v6502_mode0 4072 # $20 JSR $DDDD but gets mapped to #$DD handled in v6502_mode0 and v6502_JSR 4073 # $40 RTI - but gets mapped to #$DD handled in v6502_mode0 4074 # $60 RTS - but gets mapped to #$DD handled in v6502_mode0 4075 # $6C JMP ($DDDD) but gets mapped to $DDDD handled in v6502_JMP2 4076 # $96 STX $DD,Y but gets mapped to $DD,X handled in v6502_STX2 4077 # $B6 LDX $DD,Y but gets mapped to $DD,X handled in v6502_LDX2 4078 # $BE LDX $DDDD,Y but gets mapped to $DDDD,X handled in v6502_modeABX 4079 4080 label('v6502_next') v6502_next: 0e20 8115 adda [$15] 4081 adda([vTicks]) #0 4082 blt('v6502_exitBefore') #1 No more ticks 0e21 e83a blt v6502_exitBefore 4083 label('v6502_next2') v6502_next2: 0e22 c215 st [$15] 4084 st([vTicks]) #2 4085 # 4086 # Fetch opcode 0e23 111a ld [$1a],x 4087 ld([v6502_PCL],X) #3 0e24 151b ld [$1b],y 4088 ld([v6502_PCH],Y) #4 0e25 0d00 ld [y,x] 4089 ld([Y,X]) #5 Fetch IR 0e26 c226 st [$26] 4090 st([v6502_IR]) #6 0e27 011a ld [$1a] 4091 ld([v6502_PCL]) #7 PC++ 0e28 8001 adda $01 4092 adda(1) #8 0e29 d21a st [$1a],x 4093 st([v6502_PCL],X) #9 0e2a f02d beq $0e2d 4094 beq(pc()+3) #10 0e2b fc2e bra $0e2e 4095 bra(pc()+3) #11 0e2c 0000 ld $00 4096 ld(0) #12 0e2d 0001 ld $01 4097 ld(1) #12(!) 0e2e 811b adda [$1b] 4098 adda([v6502_PCH]) #13 0e2f d61b st [$1b],y 4099 st([v6502_PCH],Y) #14 4100 # 4101 # Get addressing mode and fetch operands 0e30 0126 ld [$26] 4102 ld([v6502_IR]) #15 Get addressing mode 0e31 201f anda $1f 4103 anda(31) #16 0e32 fe00 bra ac 4104 bra(AC) #17 0e33 fc34 bra .next20 4105 bra('.next20') #18 4106 # (jump table) #19 4107 label('.next20') .next20: 0e34 0d00 ld [y,x] 4108 ld([Y,X]) #20 Fetch L 4109 # Most opcodes branch away at this point, but IR & 31 == 0 falls through 4110 # 4111 # Implicit Mode for BRK JSR RTI RTS (< 0x80) -- 26 cycles 4112 # Immediate Mode for LDY CPY CPX (>= 0x80) -- 36 cycles 4113 label('v6502_mode0') v6502_mode0: 0e35 0126 ld [$26] 4114 ld([v6502_IR]) #21 'xxx0000' 0e36 e845 blt .imm24 4115 bmi('.imm24') #22 0e37 011b ld [$1b] 4116 ld([v6502_PCH]) #23 0e38 fcf2 bra v6502_check 4117 bra('v6502_check') #24 0e39 00f3 ld $f3 4118 ld(-26/2) #25 4119 4120 # Resync with video driver. At this point we're returning BEFORE 4121 # fetching and executing the next instruction. 4122 label('v6502_exitBefore') v6502_exitBefore: 0e3a 8013 adda $13 4123 adda(v6502_maxTicks) #3 Exit BEFORE fetch 0e3b e43b bgt $0e3b 4124 bgt(pc()&255) #4 Resync 0e3c a001 suba $01 4125 suba(1) #5 0e3d 000d ld $0d 4126 ld(hi('v6502_ENTER')) #6 Set entry point to before 'fetch' 0e3e c205 st [$05] 4127 st([vCpuSelect]) #7 0e3f 1401 ld $01,y 4128 ld(hi('vBlankStart'),Y) #8 0e40 e11e jmp y,[$1e] 4129 jmp(Y,[vReturn]) #9 To video driver 0e41 0000 ld $00 4130 ld(0) #10 4131 assert v6502_overhead == 11 4132 4133 # Immediate Mode: #$FF -- 36 cycles 4134 label('v6502_modeIMM') v6502_modeIMM: 0e42 0200 nop 4135 nop() #21 Wait for v6502_mode0 to join 0e43 0200 nop 4136 nop() #22 0e44 011b ld [$1b] 4137 ld([v6502_PCH]) #23 Copy PC 4138 label('.imm24') .imm24: 0e45 c225 st [$25] 4139 st([v6502_ADH]) #24 0e46 011a ld [$1a] 4140 ld([v6502_PCL]) #25 0e47 d224 st [$24],x 4141 st([v6502_ADL],X) #26 0e48 8001 adda $01 4142 adda(1) #27 PC++ 0e49 c21a st [$1a] 4143 st([v6502_PCL]) #28 0e4a f04d beq $0e4d 4144 beq(pc()+3) #29 0e4b fc4e bra $0e4e 4145 bra(pc()+3) #30 0e4c 0000 ld $00 4146 ld(0) #31 0e4d 0001 ld $01 4147 ld(1) #31(!) 0e4e 811b adda [$1b] 4148 adda([v6502_PCH]) #32 0e4f c21b st [$1b] 4149 st([v6502_PCH]) #33 0e50 fcf2 bra v6502_check 4150 bra('v6502_check') #34 0e51 00ee ld $ee 4151 ld(-36/2) #35 4152 4153 # Accumulator Mode: ROL ROR LSL ASR -- 28 cycles 4154 label('v6502_modeACC') v6502_modeACC: 0e52 0018 ld $18 4155 ld(v6502_A&255) #21 Address of AC 0e53 d224 st [$24],x 4156 st([v6502_ADL],X) #22 0e54 0000 ld $00 4157 ld(v6502_A>>8) #23 0e55 c225 st [$25] 4158 st([v6502_ADH]) #24 0e56 00f2 ld $f2 4159 ld(-28/2) #25 0e57 fcf2 bra v6502_check 4160 bra('v6502_check') #26 4161 #nop() #27 Overlap 4162 # 4163 # Implied Mode: no operand -- 24 cycles 4164 label('v6502_modeILL') 4165 label('v6502_modeIMP') v6502_modeILL: v6502_modeIMP: 0e58 0200 nop 4166 nop() #21,27 0e59 fcf2 bra v6502_check 4167 bra('v6502_check') #22 0e5a 00f4 ld $f4 4168 ld(-24/2) #23 4169 4170 # Zero Page Modes: $DD $DD,X $DD,Y -- 36 cycles 4171 label('v6502_modeZPX') v6502_modeZPX: 0e5b fc5f bra .zp23 4172 bra('.zp23') #21 0e5c 812a adda [$2a] 4173 adda([v6502_X]) #22 4174 label('v6502_modeZP') v6502_modeZP: 0e5d fc5f bra .zp23 4175 bra('.zp23') #21 0e5e 0200 nop 4176 nop() #22 4177 label('.zp23') .zp23: 0e5f d224 st [$24],x 4178 st([v6502_ADL],X) #23 0e60 0000 ld $00 4179 ld(0) #24 H=0 0e61 c225 st [$25] 4180 st([v6502_ADH]) #25 0e62 0001 ld $01 4181 ld(1) #26 PC++ 0e63 811a adda [$1a] 4182 adda([v6502_PCL]) #27 0e64 c21a st [$1a] 4183 st([v6502_PCL]) #28 0e65 f068 beq $0e68 4184 beq(pc()+3) #29 0e66 fc69 bra $0e69 4185 bra(pc()+3) #30 0e67 0000 ld $00 4186 ld(0) #31 0e68 0001 ld $01 4187 ld(1) #31(!) 0e69 811b adda [$1b] 4188 adda([v6502_PCH]) #32 0e6a c21b st [$1b] 4189 st([v6502_PCH]) #33 0e6b fcf2 bra v6502_check 4190 bra('v6502_check') #34 0e6c 00ee ld $ee 4191 ld(-36/2) #35 4192 4193 # Possible retry loop for modeABS and modeIZY. Because these need 4194 # more time than the v6502_maxTicks of 38 Gigatron cycles, we may 4195 # have to restart them after the next horizontal pulse. 4196 label('.retry28') .retry28: 0e6d f070 beq $0e70 4197 beq(pc()+3) #28,37 PC-- 0e6e fc71 bra $0e71 4198 bra(pc()+3) #29 0e6f 0000 ld $00 4199 ld(0) #30 0e70 00ff ld $ff 4200 ld(-1) #30(!) 0e71 811b adda [$1b] 4201 adda([v6502_PCH]) #31 0e72 c21b st [$1b] 4202 st([v6502_PCH]) #32 0e73 011a ld [$1a] 4203 ld([v6502_PCL]) #33 0e74 a001 suba $01 4204 suba(1) #34 0e75 c21a st [$1a] 4205 st([v6502_PCL]) #35 0e76 fc20 bra v6502_next 4206 bra('v6502_next') #36 Retry until sufficient time 0e77 00ed ld $ed 4207 ld(-38/2) #37 4208 4209 # Absolute Modes: $DDDD $DDDD,X $DDDD,Y -- 64 cycles 4210 label('v6502_modeABS') v6502_modeABS: 0e78 fc7d bra .abs23 4211 bra('.abs23') #21 0e79 0000 ld $00 4212 ld(0) #22 4213 label('v6502_modeABX') v6502_modeABX: 0e7a fc7d bra .abs23 4214 bra('.abs23') #21 4215 label('v6502_modeABY') v6502_modeABY: 0e7b 012a ld [$2a] 4216 ld([v6502_X]) #21,22 0e7c 012b ld [$2b] 4217 ld([v6502_Y]) #22 4218 label('.abs23') .abs23: 0e7d c224 st [$24] 4219 st([v6502_ADL]) #23 0e7e 00f3 ld $f3 4220 ld(-64//2+v6502_maxTicks) #24 Is there enough time for the excess ticks? 0e7f 8115 adda [$15] 4221 adda([vTicks]) #25 0e80 e86d blt .retry28 4222 blt('.retry28') #26 0e81 011a ld [$1a] 4223 ld([v6502_PCL]) #27 0e82 0126 ld [$26] 4224 ld([v6502_IR]) #28 Special case $BE: LDX $DDDD,Y (we got X in ADL) 0e83 60be xora $be 4225 xora(0xbe) #29 0e84 f087 beq $0e87 4226 beq(pc()+3) #30 0e85 fc88 bra $0e88 4227 bra(pc()+3) #31 0e86 0124 ld [$24] 4228 ld([v6502_ADL]) #32 0e87 012b ld [$2b] 4229 ld([v6502_Y]) #32(!) 0e88 8d00 adda [y,x] 4230 adda([Y,X]) #33 Fetch and add L 0e89 c224 st [$24] 4231 st([v6502_ADL]) #34 0e8a e88e blt .abs37 4232 bmi('.abs37') #35 Carry? 0e8b ad00 suba [y,x] 4233 suba([Y,X]) #36 Gets back original operand 0e8c fc90 bra .abs39 4234 bra('.abs39') #37 0e8d 4d00 ora [y,x] 4235 ora([Y,X]) #38 Carry in bit 7 4236 label('.abs37') .abs37: 0e8e 2d00 anda [y,x] 4237 anda([Y,X]) #37 Carry in bit 7 0e8f 0200 nop 4238 nop() #38 4239 label('.abs39') .abs39: 0e90 3080 anda $80,x 4240 anda(0x80,X) #39 Move carry to bit 0 0e91 0500 ld [x] 4241 ld([X]) #40 0e92 c225 st [$25] 4242 st([v6502_ADH]) #41 0e93 011a ld [$1a] 4243 ld([v6502_PCL]) #42 PC++ 0e94 8001 adda $01 4244 adda(1) #43 0e95 d21a st [$1a],x 4245 st([v6502_PCL],X) #44 0e96 f099 beq $0e99 4246 beq(pc()+3) #45 0e97 fc9a bra $0e9a 4247 bra(pc()+3) #46 0e98 0000 ld $00 4248 ld(0) #47 0e99 0001 ld $01 4249 ld(1) #47(!) 0e9a 811b adda [$1b] 4250 adda([v6502_PCH]) #48 0e9b d61b st [$1b],y 4251 st([v6502_PCH],Y) #49 0e9c 0d00 ld [y,x] 4252 ld([Y,X]) #50 Fetch H 0e9d 8125 adda [$25] 4253 adda([v6502_ADH]) #51 0e9e c225 st [$25] 4254 st([v6502_ADH]) #52 0e9f 011a ld [$1a] 4255 ld([v6502_PCL]) #53 PC++ 0ea0 8001 adda $01 4256 adda(1) #54 0ea1 c21a st [$1a] 4257 st([v6502_PCL]) #55 0ea2 f0a5 beq $0ea5 4258 beq(pc()+3) #56 0ea3 fca6 bra $0ea6 4259 bra(pc()+3) #57 0ea4 0000 ld $00 4260 ld(0) #58 0ea5 0001 ld $01 4261 ld(1) #58(!) 0ea6 811b adda [$1b] 4262 adda([v6502_PCH]) #59 0ea7 c21b st [$1b] 4263 st([v6502_PCH]) #60 0ea8 1124 ld [$24],x 4264 ld([v6502_ADL],X) #61 0ea9 fcf2 bra v6502_check 4265 bra('v6502_check') #62 0eaa 00e0 ld $e0 4266 ld(-64/2) #63 4267 4268 # Indirect Indexed Mode: ($DD),Y -- 54 cycles 4269 label('v6502_modeIZY') v6502_modeIZY: 0eab 1200 ld ac,x 4270 ld(AC,X) #21 $DD 0eac 1400 ld $00,y 4271 ld(0,Y) #22 $00DD 0ead 00f8 ld $f8 4272 ld(-54//2+v6502_maxTicks) #23 Is there enough time for the excess ticks? 0eae 8115 adda [$15] 4273 adda([vTicks]) #24 0eaf 0200 nop 4274 nop() #25 0eb0 e86d blt .retry28 4275 blt('.retry28') #26 0eb1 011a ld [$1a] 4276 ld([v6502_PCL]) #27 0eb2 8001 adda $01 4277 adda(1) #28 PC++ 0eb3 c21a st [$1a] 4278 st([v6502_PCL]) #29 0eb4 f0b7 beq $0eb7 4279 beq(pc()+3) #30 0eb5 fcb8 bra $0eb8 4280 bra(pc()+3) #31 0eb6 0000 ld $00 4281 ld(0) #32 0eb7 0001 ld $01 4282 ld(1) #32(!) 0eb8 811b adda [$1b] 4283 adda([v6502_PCH]) #33 0eb9 c21b st [$1b] 4284 st([v6502_PCH]) #34 0eba 0d00 ld [y,x] 4285 ld([Y,X]) #35 Read word from zero-page 0ebb de00 st [y,x++] 4286 st([Y,Xpp]) #36 (Just X++) Wrap-around is correct 0ebc c224 st [$24] 4287 st([v6502_ADL]) #37 0ebd 0d00 ld [y,x] 4288 ld([Y,X]) #38 0ebe c225 st [$25] 4289 st([v6502_ADH]) #39 0ebf 012b ld [$2b] 4290 ld([v6502_Y]) #40 Add Y 0ec0 8124 adda [$24] 4291 adda([v6502_ADL]) #41 0ec1 c224 st [$24] 4292 st([v6502_ADL]) #42 0ec2 e8c6 blt .izy45 4293 bmi('.izy45') #43 Carry? 0ec3 a12b suba [$2b] 4294 suba([v6502_Y]) #44 Gets back original operand 0ec4 fcc8 bra .izy47 4295 bra('.izy47') #45 0ec5 412b ora [$2b] 4296 ora([v6502_Y]) #46 Carry in bit 7 4297 label('.izy45') .izy45: 0ec6 212b anda [$2b] 4298 anda([v6502_Y]) #45 Carry in bit 7 0ec7 0200 nop 4299 nop() #46 4300 label('.izy47') .izy47: 0ec8 3080 anda $80,x 4301 anda(0x80,X) #47 Move carry to bit 0 0ec9 0500 ld [x] 4302 ld([X]) #48 0eca 8125 adda [$25] 4303 adda([v6502_ADH]) #49 0ecb c225 st [$25] 4304 st([v6502_ADH]) #50 0ecc 1124 ld [$24],x 4305 ld([v6502_ADL],X) #51 0ecd fcf2 bra v6502_check 4306 bra('v6502_check') #52 0ece 00e5 ld $e5 4307 ld(-54/2) #53 4308 4309 # Relative Mode: BEQ BNE BPL BMI BCC BCS BVC BVS -- 36 cycles 4310 label('v6502_modeREL') v6502_modeREL: 0ecf d224 st [$24],x 4311 st([v6502_ADL],X) #21 Offset (Only needed for branch) 0ed0 e8d3 blt $0ed3 4312 bmi(pc()+3) #22 Sign extend 0ed1 fcd4 bra $0ed4 4313 bra(pc()+3) #23 0ed2 0000 ld $00 4314 ld(0) #24 0ed3 00ff ld $ff 4315 ld(255) #24(!) 0ed4 c225 st [$25] 4316 st([v6502_ADH]) #25 0ed5 011a ld [$1a] 4317 ld([v6502_PCL]) #26 PC++ (Needed for both cases) 0ed6 8001 adda $01 4318 adda(1) #27 0ed7 c21a st [$1a] 4319 st([v6502_PCL]) #28 0ed8 f0db beq $0edb 4320 beq(pc()+3) #29 0ed9 fcdc bra $0edc 4321 bra(pc()+3) #30 0eda 0000 ld $00 4322 ld(0) #31 0edb 0001 ld $01 4323 ld(1) #31(!) 0edc 811b adda [$1b] 4324 adda([v6502_PCH]) #32 0edd c21b st [$1b] 4325 st([v6502_PCH]) #33 0ede fcf2 bra v6502_check 4326 bra('v6502_check') #34 0edf 00ee ld $ee 4327 ld(-36/2) #53 4328 4329 # Indexed Indirect Mode: ($DD,X) -- 38 cycles 4330 label('v6502_modeIZX') v6502_modeIZX: 0ee0 812a adda [$2a] 4331 adda([v6502_X]) #21 Add X 0ee1 c21d st [$1d] 4332 st([v6502_Tmp]) #22 0ee2 9001 adda $01,x 4333 adda(1,X) #23 Read word from zero-page 0ee3 0500 ld [x] 4334 ld([X]) #24 0ee4 c225 st [$25] 4335 st([v6502_ADH]) #25 0ee5 111d ld [$1d],x 4336 ld([v6502_Tmp],X) #26 0ee6 0500 ld [x] 4337 ld([X]) #27 0ee7 d224 st [$24],x 4338 st([v6502_ADL],X) #28 0ee8 011a ld [$1a] 4339 ld([v6502_PCL]) #29 PC++ 0ee9 8001 adda $01 4340 adda(1) #30 0eea c21a st [$1a] 4341 st([v6502_PCL]) #31 0eeb f0ee beq $0eee 4342 beq(pc()+3) #32 0eec fcef bra $0eef 4343 bra(pc()+3) #33 0eed 0000 ld $00 4344 ld(0) #34 0eee 0001 ld $01 4345 ld(1) #34(!) 0eef 811b adda [$1b] 4346 adda([v6502_PCH]) #35 0ef0 c21b st [$1b] 4347 st([v6502_PCH]) #36 0ef1 00ed ld $ed 4348 ld(-38/2) #37 !!! Fall through to v6502_check !!! 4349 # 4350 # Update elapsed time for the addressing mode processing. 4351 # Then check if we can immediately execute this instruction. 4352 # Otherwise transfer control to the video driver. 4353 label('v6502_check') v6502_check: 0ef2 8115 adda [$15] 4354 adda([vTicks]) #0 4355 blt('v6502_exitAfter') #1 No more ticks 0ef3 e8f8 blt v6502_exitAfter 0ef4 c215 st [$15] 4356 st([vTicks]) #2 0ef5 140f ld $0f,y 4357 ld(hi('v6502_execute'),Y) #3 0ef6 e126 jmp y,[$26] 4358 jmp(Y,[v6502_IR]) #4 0ef7 fcff bra $ff 4359 bra(255) #5 4360 4361 # Otherwise resync with video driver. At this point we're returning AFTER 4362 # addressing mode decoding, but before executing the instruction. 4363 label('v6502_exitAfter') v6502_exitAfter: 0ef8 8013 adda $13 4364 adda(v6502_maxTicks) #3 Exit AFTER fetch 0ef9 e4f9 bgt $0ef9 4365 bgt(pc()&255) #4 Resync 0efa a001 suba $01 4366 suba(1) #5 0efb 0010 ld $10 4367 ld(hi('v6502_RESUME')) #6 Set entry point to before 'execute' 0efc c205 st [$05] 4368 st([vCpuSelect]) #7 0efd 1401 ld $01,y 4369 ld(hi('vBlankStart'),Y) #8 0efe e11e jmp y,[$1e] 4370 jmp(Y,[vReturn]) #9 To video driver 0eff 0000 ld $00 4371 ld(0) #10 4372 assert v6502_overhead == 11 4373 4374 align(0x100,size=0x100) 4375 label('v6502_execute') 4376 # This page works as a 255-entry (0..254) jump table for 6502 opcodes. 4377 # Jumping into this page must have 'bra 255' in the branch delay slot 4378 # in order to get out again and dispatch to the right continuation. 4379 # X must hold [v6502_ADL], 4380 # Y will hold hi('v6502_execute'), 4381 # A will be loaded with the code offset (this is skipped at offset $ff) v6502_execute: 0f00 00fd ld $fd 4382 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 4383 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 4384 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 4385 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 4386 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 4387 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 4388 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 4389 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 4390 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 4391 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 4392 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 4393 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 4394 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 4395 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 4396 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 4397 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 4398 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 4399 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 4400 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 4401 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 4402 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 4403 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 4404 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 4405 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 4406 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 4407 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 4408 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 4409 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 4410 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 4411 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 4412 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 4413 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 4414 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 4415 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 4416 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 4417 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 4418 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 4419 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 4420 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 4421 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 4422 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 4423 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 4424 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 4425 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 4426 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 4427 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 4428 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 4429 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 4430 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 4431 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 4432 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 4433 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 4434 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 4435 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 4436 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 4437 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 4438 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 4439 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 4440 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 4441 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 4442 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 4443 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 4444 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 4445 ld('v6502_ILL'); ld('v6502_SBC'); ld('v6502_INC') #6 0ffd 0029 ld $29 0ffe 00b7 ld $b7 0fff fe00 bra ac 4446 bra(AC) #6,7 Dispatch into next page 4447 # --- Page boundary --- 4448 align(0x100,size=0x100) 1000 140e ld $0e,y 4449 ld(hi('v6502_next'),Y) #8 Handy for instructions that don't clobber Y 4450 4451 label('v6502_ADC') 4452 assert pc()&255 == 1 4453 assert v6502_Cflag == 1 4454 assert v6502_Vemu == 128 v6502_ADC: 1001 1525 ld [$25],y 4455 ld([v6502_ADH],Y) #9 Must be at page offset 1, so A=1 1002 2127 anda [$27] 4456 anda([v6502_P]) #10 Carry in (AC=1 because lo('v6502_ADC')=1) 1003 8118 adda [$18] 4457 adda([v6502_A]) #11 Sum 1004 f020 beq .adc14 4458 beq('.adc14') #12 Danger zone for dropping a carry 1005 8d00 adda [y,x] 4459 adda([Y,X]) #13 1006 c228 st [$28] 4460 st([v6502_Qz]) #14 Z flag, don't overwrite left-hand side (A) yet 1007 c229 st [$29] 4461 st([v6502_Qn]) #15 N flag 1008 6118 xora [$18] 4462 xora([v6502_A]) #16 V flag, (Q^A) & (B^Q) & 0x80 1009 c218 st [$18] 4463 st([v6502_A]) #17 100a 0d00 ld [y,x] 4464 ld([Y,X]) #18 100b 6128 xora [$28] 4465 xora([v6502_Qz]) #19 100c 2118 anda [$18] 4466 anda([v6502_A]) #20 100d 2080 anda $80 4467 anda(0x80) #21 100e c21d st [$1d] 4468 st([v6502_Tmp]) #22 100f 0128 ld [$28] 4469 ld([v6502_Qz]) #23 Update A 1010 c218 st [$18] 4470 st([v6502_A]) #24 1011 e815 blt .adc27 4471 bmi('.adc27') #25 C flag 1012 ad00 suba [y,x] 4472 suba([Y,X]) #26 1013 fc17 bra .adc29 4473 bra('.adc29') #27 1014 4d00 ora [y,x] 4474 ora([Y,X]) #28 4475 label('.adc27') .adc27: 1015 2d00 anda [y,x] 4476 anda([Y,X]) #27 1016 0200 nop 4477 nop() #28 4478 label('.adc29') .adc29: 1017 3080 anda $80,x 4479 anda(0x80,X) #29 1018 0127 ld [$27] 4480 ld([v6502_P]) #30 Update P 1019 207e anda $7e 4481 anda(~v6502_Vemu&~v6502_Cflag) #31 101a 4500 ora [x] 4482 ora([X]) #32 101b 411d ora [$1d] 4483 ora([v6502_Tmp]) #33 101c c227 st [$27] 4484 st([v6502_P]) #34 101d 140e ld $0e,y 4485 ld(hi('v6502_next'),Y) #35 101e e020 jmp y,$20 4486 jmp(Y,'v6502_next') #36 101f 00ed ld $ed 4487 ld(-38/2) #37 4488 # Cin=1, A=$FF, B=$DD --> Result=$DD, Cout=1, V=0 4489 # Cin=0, A=$00, B=$DD --> Result=$DD, Cout=0, V=0 4490 label('.adc14') .adc14: 1020 c218 st [$18] 4491 st([v6502_A]) #14 Special case 1021 c228 st [$28] 4492 st([v6502_Qz]) #15 Z flag 1022 c229 st [$29] 4493 st([v6502_Qn]) #16 N flag 1023 0127 ld [$27] 4494 ld([v6502_P]) #17 1024 207f anda $7f 4495 anda(0x7f) #18 V=0, keep C 1025 c227 st [$27] 4496 st([v6502_P]) #19 1026 140e ld $0e,y 4497 ld(hi('v6502_next'),Y) #20 1027 00f4 ld $f4 4498 ld(-24/2) #21 1028 e020 jmp y,$20 4499 jmp(Y,'v6502_next') #22 4500 #nop() #23 Overlap 4501 # 4502 label('v6502_SBC') 4503 # No matter how hard we try, v6502_SBC always comes out a lot clumsier 4504 # than v6502_ADC. And that one already barely fits in 38 cycles and is 4505 # hard to follow. So we use a hack: transmorph our SBC into an ADC with 4506 # inverted operand, and then dispatch again. Simple and effective. v6502_SBC: 1029 1525 ld [$25],y 4507 ld([v6502_ADH],Y) #9,24 102a 0d00 ld [y,x] 4508 ld([Y,X]) #10 102b 60ff xora $ff 4509 xora(255) #11 Invert right-hand side operand 102c c219 st [$19] 4510 st([v6502_BI]) #12 Park modified operand for v6502_ADC 102d 0019 ld $19 4511 ld(v6502_BI&255) #13 Address of BI 102e d224 st [$24],x 4512 st([v6502_ADL],X) #14 102f 0000 ld $00 4513 ld(v6502_BI>>8) #15 1030 c225 st [$25] 4514 st([v6502_ADH]) #16 1031 0069 ld $69 4515 ld(0x69) #17 ADC #$xx (Any ADC opcode will do) 1032 c226 st [$26] 4516 st([v6502_IR]) #18 1033 140e ld $0e,y 4517 ld(hi('v6502_check'),Y) #20 Go back to time check before dispatch 1034 e0f2 jmp y,$f2 4518 jmp(Y,'v6502_check') #20 1035 00f5 ld $f5 4519 ld(-22/2) #21 4520 4521 # Carry calculation table 4522 # L7 R7 C7 RX UC SC 4523 # -- -- -- | -- -- -- 4524 # 0 0 0 | 0 0 0 4525 # 0 0 1 | 0 0 0 4526 # 1 0 0 | 0 1 +1 4527 # 1 0 1 | 0 0 0 4528 # 0 1 0 | -1 1 0 4529 # 0 1 1 | -1 0 -1 4530 # 1 1 0 | -1 1 0 4531 # 1 1 1 | -1 1 0 4532 # -- -- -- | -- -- -- 4533 # ^ ^ ^ ^ ^ ^ 4534 # | | | | | `--- Carry of unsigned L + signed R: SC = RX + UC 4535 # | | | | `----- Carry of unsigned L + unsigned R: UC = C7 ? L7&R7 : L7|R7 4536 # | | | `------- Sign extension of signed R 4537 # | | `--------- MSB of unextended L + R 4538 # | `----------- MSB of right operand R 4539 # `------------- MSB of left operand L 4540 4541 label('v6502_CLC') v6502_CLC: 1036 0127 ld [$27] 4542 ld([v6502_P]) #9 1037 fc3b bra .sec12 4543 bra('.sec12') #10 4544 label('v6502_SEC') v6502_SEC: 1038 20fe anda $fe 4545 anda(~v6502_Cflag) #9,11 Overlap 1039 0127 ld [$27] 4546 ld([v6502_P]) #10 103a 4001 ora $01 4547 ora(v6502_Cflag) #11 4548 label('.sec12') .sec12: 103b c227 st [$27] 4549 st([v6502_P]) #12 103c 0200 nop 4550 nop() #13 4551 label('.next14') .next14: 103d e020 jmp y,$20 4552 jmp(Y,'v6502_next') #14 103e 00f8 ld $f8 4553 ld(-16/2) #15 4554 4555 label('v6502_BPL') v6502_BPL: 103f 0129 ld [$29] 4556 ld([v6502_Qn]) #9 1040 e875 blt .next12 4557 bmi('.next12') #10 1041 f45b bge .branch13 4558 bpl('.branch13') #11 4559 #nop() #12 Overlap 4560 label('v6502_BMI') v6502_BMI: 1042 0129 ld [$29] 4561 ld([v6502_Qn]) #9,12 1043 f475 bge .next12 4562 bpl('.next12') #10 1044 e85b blt .branch13 4563 bmi('.branch13') #11 4564 #nop() #12 Overlap 4565 label('v6502_BVC') v6502_BVC: 1045 0127 ld [$27] 4566 ld([v6502_P]) #9,12 1046 2080 anda $80 4567 anda(v6502_Vemu) #10 1047 f05b beq .branch13 4568 beq('.branch13') #11 1048 ec3d bne .next14 4569 bne('.next14') #12 4570 #nop() #13 Overlap 4571 label('v6502_BVS') v6502_BVS: 1049 0127 ld [$27] 4572 ld([v6502_P]) #9,13 104a 2080 anda $80 4573 anda(v6502_Vemu) #10 104b ec5b bne .branch13 4574 bne('.branch13') #11 104c f03d beq .next14 4575 beq('.next14') #12 4576 #nop() #13 Overlap 4577 label('v6502_BCC') v6502_BCC: 104d 0127 ld [$27] 4578 ld([v6502_P]) #9,13 104e 2001 anda $01 4579 anda(v6502_Cflag) #10 104f f05b beq .branch13 4580 beq('.branch13') #11 1050 ec3d bne .next14 4581 bne('.next14') #12 4582 #nop() #13 Overlap 4583 label('v6502_BCS') v6502_BCS: 1051 0127 ld [$27] 4584 ld([v6502_P]) #9,13 1052 2001 anda $01 4585 anda(v6502_Cflag) #10 1053 ec5b bne .branch13 4586 bne('.branch13') #11 1054 f03d beq .next14 4587 beq('.next14') #12 4588 #nop() #13 Overlap 4589 label('v6502_BNE') v6502_BNE: 1055 0128 ld [$28] 4590 ld([v6502_Qz]) #9,13 1056 f075 beq .next12 4591 beq('.next12') #10 1057 ec5b bne .branch13 4592 bne('.branch13') #11 4593 #nop() #12 Overlap 4594 label('v6502_BEQ') v6502_BEQ: 1058 0128 ld [$28] 4595 ld([v6502_Qz]) #9,12 1059 ec75 bne .next12 4596 bne('.next12') #10 105a f05b beq .branch13 4597 beq('.branch13') #11 4598 #nop() #12 Overlap 4599 label('.branch13') .branch13: 105b 0124 ld [$24] 4600 ld([v6502_ADL]) #13,12 PC + offset 105c 811a adda [$1a] 4601 adda([v6502_PCL]) #14 105d c21a st [$1a] 4602 st([v6502_PCL]) #15 105e e862 blt .bra0 4603 bmi('.bra0') #16 Carry 105f a124 suba [$24] 4604 suba([v6502_ADL]) #17 1060 fc64 bra .bra1 4605 bra('.bra1') #18 1061 4124 ora [$24] 4606 ora([v6502_ADL]) #19 4607 label('.bra0') .bra0: 1062 2124 anda [$24] 4608 anda([v6502_ADL]) #18 1063 0200 nop 4609 nop() #19 4610 label('.bra1') .bra1: 1064 3080 anda $80,x 4611 anda(0x80,X) #20 1065 0500 ld [x] 4612 ld([X]) #21 1066 8125 adda [$25] 4613 adda([v6502_ADH]) #22 1067 811b adda [$1b] 4614 adda([v6502_PCH]) #23 1068 c21b st [$1b] 4615 st([v6502_PCH]) #24 1069 0200 nop 4616 nop() #25 106a e020 jmp y,$20 4617 jmp(Y,'v6502_next') #26 106b 00f2 ld $f2 4618 ld(-28/2) #27 4619 4620 label('v6502_INX') v6502_INX: 106c 0200 nop 4621 nop() #9 106d 012a ld [$2a] 4622 ld([v6502_X]) #10 106e 8001 adda $01 4623 adda(1) #11 106f c22a st [$2a] 4624 st([v6502_X]) #12 4625 label('.inx13') .inx13: 1070 c228 st [$28] 4626 st([v6502_Qz]) #13 Z flag 1071 c229 st [$29] 4627 st([v6502_Qn]) #14 N flag 1072 00f7 ld $f7 4628 ld(-18/2) #15 1073 e020 jmp y,$20 4629 jmp(Y,'v6502_next') #16 1074 0200 nop 4630 nop() #17 4631 4632 label('.next12') .next12: 1075 e020 jmp y,$20 4633 jmp(Y,'v6502_next') #12 1076 00f9 ld $f9 4634 ld(-14/2) #13 4635 4636 label('v6502_DEX') v6502_DEX: 1077 012a ld [$2a] 4637 ld([v6502_X]) #9 1078 a001 suba $01 4638 suba(1) #10 1079 fc70 bra .inx13 4639 bra('.inx13') #11 107a c22a st [$2a] 4640 st([v6502_X]) #12 4641 4642 label('v6502_INY') v6502_INY: 107b 012b ld [$2b] 4643 ld([v6502_Y]) #9 107c 8001 adda $01 4644 adda(1) #10 107d fc70 bra .inx13 4645 bra('.inx13') #11 107e c22b st [$2b] 4646 st([v6502_Y]) #12 4647 4648 label('v6502_DEY') v6502_DEY: 107f 012b ld [$2b] 4649 ld([v6502_Y]) #9 1080 a001 suba $01 4650 suba(1) #10 1081 fc70 bra .inx13 4651 bra('.inx13') #11 1082 c22b st [$2b] 4652 st([v6502_Y]) #12 4653 4654 label('v6502_NOP') v6502_NOP: 1083 00fa ld $fa 4655 ld(-12/2) #9 1084 e020 jmp y,$20 4656 jmp(Y,'v6502_next') #10 4657 #nop() #11 Overlap 4658 # 4659 label('v6502_AND') v6502_AND: 1085 1525 ld [$25],y 4660 ld([v6502_ADH],Y) #9,11 1086 0118 ld [$18] 4661 ld([v6502_A]) #10 1087 fc90 bra .eor13 4662 bra('.eor13') #11 1088 2d00 anda [y,x] 4663 anda([Y,X]) #12 4664 4665 label('v6502_ORA') v6502_ORA: 1089 1525 ld [$25],y 4666 ld([v6502_ADH],Y) #9 108a 0118 ld [$18] 4667 ld([v6502_A]) #10 108b fc90 bra .eor13 4668 bra('.eor13') #11 4669 label('v6502_EOR') v6502_EOR: 108c 4d00 ora [y,x] 4670 ora([Y,X]) #12,9 4671 # 4672 #label('v6502_EOR') 4673 #nop() #9 Overlap 108d 1525 ld [$25],y 4674 ld([v6502_ADH],Y) #10 108e 0118 ld [$18] 4675 ld([v6502_A]) #11 108f 6d00 xora [y,x] 4676 xora([Y,X]) #12 4677 label('.eor13') .eor13: 1090 c218 st [$18] 4678 st([v6502_A]) #13 1091 c228 st [$28] 4679 st([v6502_Qz]) #14 Z flag 1092 c229 st [$29] 4680 st([v6502_Qn]) #15 N flag 1093 140e ld $0e,y 4681 ld(hi('v6502_next'),Y) #16 1094 00f6 ld $f6 4682 ld(-20/2) #17 1095 e020 jmp y,$20 4683 jmp(Y,'v6502_next') #18 4684 #nop() #19 Overlap 4685 # 4686 label('v6502_JMP1') v6502_JMP1: 1096 140d ld $0d,y 4687 ld(hi('v6502_jmp1'),Y) #9,19 JMP $DDDD 1097 e0d1 jmp y,$d1 4688 jmp(Y,'v6502_jmp1') #10 4689 #nop() #11 Overlap 4690 label('v6502_JMP2') v6502_JMP2: 1098 140d ld $0d,y 4691 ld(hi('v6502_jmp2'),Y) #9 JMP ($DDDD) 1099 e0d9 jmp y,$d9 4692 jmp(Y,'v6502_jmp2') #10 4693 #nop() #11 Overlap 4694 label('v6502_JSR') v6502_JSR: 109a 011c ld [$1c] 4695 ld([v6502_S]) #9,11 109b a002 suba $02 4696 suba(2) #10 109c d21c st [$1c],x 4697 st([v6502_S],X) #11 109d 1400 ld $00,y 4698 ld(v6502_Stack>>8,Y) #12 109e 011b ld [$1b] 4699 ld([v6502_PCH]) #13 Let ADL,ADH point to L operand 109f c225 st [$25] 4700 st([v6502_ADH]) #14 10a0 011a ld [$1a] 4701 ld([v6502_PCL]) #15 10a1 c224 st [$24] 4702 st([v6502_ADL]) #16 10a2 8001 adda $01 4703 adda(1) #17 Push ++PC 10a3 c21a st [$1a] 4704 st([v6502_PCL]) #18 Let PCL,PCH point to H operand 10a4 de00 st [y,x++] 4705 st([Y,Xpp]) #19 10a5 f0a8 beq $10a8 4706 beq(pc()+3) #20 10a6 fca9 bra $10a9 4707 bra(pc()+3) #21 10a7 0000 ld $00 4708 ld(0) #22 10a8 0001 ld $01 4709 ld(1) #22(!) 10a9 811b adda [$1b] 4710 adda([v6502_PCH]) #23 10aa c21b st [$1b] 4711 st([v6502_PCH]) #24 10ab ce00 st [y,x] 4712 st([Y,X]) #25 10ac 1124 ld [$24],x 4713 ld([v6502_ADL],X) #26 Fetch L 10ad 1525 ld [$25],y 4714 ld([v6502_ADH],Y) #27 10ae 0d00 ld [y,x] 4715 ld([Y,X]) #28 10af 111a ld [$1a],x 4716 ld([v6502_PCL],X) #29 Fetch H 10b0 c21a st [$1a] 4717 st([v6502_PCL]) #30 10b1 151b ld [$1b],y 4718 ld([v6502_PCH],Y) #31 10b2 0d00 ld [y,x] 4719 ld([Y,X]) #32 10b3 c21b st [$1b] 4720 st([v6502_PCH]) #33 10b4 140e ld $0e,y 4721 ld(hi('v6502_next'),Y) #34 10b5 00ed ld $ed 4722 ld(-38/2) #35 10b6 e020 jmp y,$20 4723 jmp(Y,'v6502_next') #36 4724 #nop() #37 Overlap 4725 # 4726 label('v6502_INC') v6502_INC: 10b7 1411 ld $11,y 4727 ld(hi('v6502_inc'),Y) #9,37 10b8 e00e jmp y,$0e 4728 jmp(Y,'v6502_inc') #10 4729 #nop() #11 Overlap 4730 label('v6502_LDA') v6502_LDA: 10b9 1411 ld $11,y 4731 ld(hi('v6502_lda'),Y) #9,11 10ba e018 jmp y,$18 4732 jmp(Y,'v6502_lda') #10 4733 #nop() #11 Overlap 4734 label('v6502_LDX') v6502_LDX: 10bb 1411 ld $11,y 4735 ld(hi('v6502_ldx'),Y) #9,11 10bc e022 jmp y,$22 4736 jmp(Y,'v6502_ldx') #10 4737 #nop() #11 Overlap 4738 label('v6502_LDX2') v6502_LDX2: 10bd 1411 ld $11,y 4739 ld(hi('v6502_ldx2'),Y) #9,11 10be e02a jmp y,$2a 4740 jmp(Y,'v6502_ldx2') #10 4741 #nop() #11 Overlap 4742 label('v6502_LDY') v6502_LDY: 10bf 1411 ld $11,y 4743 ld(hi('v6502_ldy'),Y) #9,11 10c0 e026 jmp y,$26 4744 jmp(Y,'v6502_ldy') #10 4745 #nop() #11 Overlap 4746 label('v6502_STA') v6502_STA: 10c1 1411 ld $11,y 4747 ld(hi('v6502_sta'),Y) #9,11 10c2 e034 jmp y,$34 4748 jmp(Y,'v6502_sta') #10 4749 #nop() #11 Overlap 4750 label('v6502_STX') v6502_STX: 10c3 1411 ld $11,y 4751 ld(hi('v6502_stx'),Y) #9,11 10c4 e03a jmp y,$3a 4752 jmp(Y,'v6502_stx') #10 4753 #nop() #11 Overlap 4754 label('v6502_STX2') v6502_STX2: 10c5 1411 ld $11,y 4755 ld(hi('v6502_stx2'),Y) #9,11 10c6 e040 jmp y,$40 4756 jmp(Y,'v6502_stx2') #10 4757 #nop() #11 Overlap 4758 label('v6502_STY') v6502_STY: 10c7 1411 ld $11,y 4759 ld(hi('v6502_sty'),Y) #9,11 10c8 e048 jmp y,$48 4760 jmp(Y,'v6502_sty') #10 4761 #nop() #11 Overlap 4762 label('v6502_TAX') v6502_TAX: 10c9 1411 ld $11,y 4763 ld(hi('v6502_tax'),Y) #9,11 10ca e04d jmp y,$4d 4764 jmp(Y,'v6502_tax') #10 4765 #nop() #11 Overlap 4766 label('v6502_TAY') v6502_TAY: 10cb 1411 ld $11,y 4767 ld(hi('v6502_tay'),Y) #9,11 10cc e062 jmp y,$62 4768 jmp(Y,'v6502_tay') #10 4769 #nop() #11 Overlap 4770 label('v6502_TXA') v6502_TXA: 10cd 1411 ld $11,y 4771 ld(hi('v6502_txa'),Y) #9,11 10ce e065 jmp y,$65 4772 jmp(Y,'v6502_txa') #10 4773 #nop() #11 Overlap 4774 label('v6502_TYA') v6502_TYA: 10cf 1411 ld $11,y 4775 ld(hi('v6502_tya'),Y) #9,11 10d0 e068 jmp y,$68 4776 jmp(Y,'v6502_tya') #10 4777 #nop() #11 Overlap 4778 label('v6502_CLV') v6502_CLV: 10d1 1411 ld $11,y 4779 ld(hi('v6502_clv'),Y) #9,11 10d2 e076 jmp y,$76 4780 jmp(Y,'v6502_clv') #10 4781 #nop() #11 Overlap 4782 label('v6502_RTI') v6502_RTI: 10d3 1411 ld $11,y 4783 ld(hi('v6502_rti'),Y) #9,11 10d4 e0e4 jmp y,$e4 4784 jmp(Y,'v6502_rti') #10 4785 #nop() #11 Overlap 4786 label('v6502_ROR') v6502_ROR: 10d5 140d ld $0d,y 4787 ld(hi('v6502_ror'),Y) #9,11 10d6 e08f jmp y,$8f 4788 jmp(Y,'v6502_ror') #10 4789 #nop() #11 Overlap 4790 label('v6502_LSR') v6502_LSR: 10d7 140d ld $0d,y 4791 ld(hi('v6502_lsr'),Y) #9,11 10d8 e0a9 jmp y,$a9 4792 jmp(Y,'v6502_lsr') #10 4793 #nop() #11 Overlap 4794 label('v6502_PHA') v6502_PHA: 10d9 140d ld $0d,y 4795 ld(hi('v6502_pha'),Y) #9,11 10da e0ee jmp y,$ee 4796 jmp(Y,'v6502_pha') #10 4797 #nop() #11 Overlap 4798 label('v6502_CLI') v6502_CLI: 10db 1411 ld $11,y 4799 ld(hi('v6502_cli'),Y) #9,11 10dc e06b jmp y,$6b 4800 jmp(Y,'v6502_cli') #10 4801 #nop() #11 Overlap 4802 label('v6502_RTS') v6502_RTS: 10dd 1411 ld $11,y 4803 ld(hi('v6502_rts'),Y) #9,11 10de e08f jmp y,$8f 4804 jmp(Y,'v6502_rts') #10 4805 #nop() #11 Overlap 4806 label('v6502_PLA') v6502_PLA: 10df 140d ld $0d,y 4807 ld(hi('v6502_pla'),Y) #9,11 10e0 e0e3 jmp y,$e3 4808 jmp(Y,'v6502_pla') #10 4809 #nop() #11 Overlap 4810 label('v6502_SEI') v6502_SEI: 10e1 1411 ld $11,y 4811 ld(hi('v6502_sei'),Y) #9,11 10e2 e06e jmp y,$6e 4812 jmp(Y,'v6502_sei') #10 4813 #nop() #11 Overlap 4814 label('v6502_TXS') v6502_TXS: 10e3 1411 ld $11,y 4815 ld(hi('v6502_txs'),Y) #9,11 10e4 e05e jmp y,$5e 4816 jmp(Y,'v6502_txs') #10 4817 #nop() #11 Overlap 4818 label('v6502_TSX') v6502_TSX: 10e5 1411 ld $11,y 4819 ld(hi('v6502_tsx'),Y) #9,11 10e6 e054 jmp y,$54 4820 jmp(Y,'v6502_tsx') #10 4821 #nop() #11 Overlap 4822 label('v6502_CPY') v6502_CPY: 10e7 1411 ld $11,y 4823 ld(hi('v6502_cpy'),Y) #9,11 10e8 e0bd jmp y,$bd 4824 jmp(Y,'v6502_cpy') #10 4825 #nop() #11 Overlap 4826 label('v6502_CMP') v6502_CMP: 10e9 1411 ld $11,y 4827 ld(hi('v6502_cmp'),Y) #9,11 10ea e0be jmp y,$be 4828 jmp(Y,'v6502_cmp') #10 4829 #nop() #11 Overlap 4830 label('v6502_DEC') v6502_DEC: 10eb 1411 ld $11,y 4831 ld(hi('v6502_dec'),Y) #9,11 10ec e005 jmp y,$05 4832 jmp(Y,'v6502_dec') #10 4833 #nop() #11 Overlap 4834 label('v6502_CLD') v6502_CLD: 10ed 1411 ld $11,y 4835 ld(hi('v6502_cld'),Y) #9,11 10ee e071 jmp y,$71 4836 jmp(Y,'v6502_cld') #10 4837 #nop() #11 Overlap 4838 label('v6502_CPX') v6502_CPX: 10ef 1411 ld $11,y 4839 ld(hi('v6502_cpx'),Y) #9,11 10f0 e0bb jmp y,$bb 4840 jmp(Y,'v6502_cpx') #10 4841 #nop() #11 Overlap 4842 label('v6502_ASL') v6502_ASL: 10f1 140d ld $0d,y 4843 ld(hi('v6502_asl'),Y) #9,11 10f2 e0cb jmp y,$cb 4844 jmp(Y,'v6502_asl') #10 4845 #nop() #11 Overlap 4846 label('v6502_PHP') v6502_PHP: 10f3 1411 ld $11,y 4847 ld(hi('v6502_php'),Y) #9,11 10f4 e0a2 jmp y,$a2 4848 jmp(Y,'v6502_php') #10 4849 #nop() #11 Overlap 4850 label('v6502_BIT') v6502_BIT: 10f5 1411 ld $11,y 4851 ld(hi('v6502_bit'),Y) #9 10f6 e07d jmp y,$7d 4852 jmp(Y,'v6502_bit') #10 4853 #nop() #11 Overlap 4854 label('v6502_ROL') v6502_ROL: 10f7 140d ld $0d,y 4855 ld(hi('v6502_rol'),Y) #9 10f8 e0b8 jmp y,$b8 4856 jmp(Y,'v6502_rol') #10 4857 #nop() #11 Overlap 4858 label('v6502_PLP') v6502_PLP: 10f9 1411 ld $11,y 4859 ld(hi('v6502_plp'),Y) #9 10fa e0d4 jmp y,$d4 4860 jmp(Y,'v6502_plp') #10 4861 #nop() #11 Overlap 4862 label('v6502_SED') # Decimal mode not implemented v6502_SED: 10fb 1411 ld $11,y 4863 ld(hi('v6502_sed'),Y) #9,11 10fc e074 jmp y,$74 4864 jmp(Y,'v6502_sed') #10 4865 #nop() #11 Overlap 4866 label('v6502_ILL') # All illegal opcodes map to BRK, except $FF which will crash 4867 label('v6502_BRK') v6502_ILL: v6502_BRK: 10fd 140d ld $0d,y 4868 ld(hi('v6502_brk'),Y) #9 10fe e0f6 jmp y,$f6 4869 jmp(Y,'v6502_brk') #10 4870 #nop() #11 Overlap 4871 4872 while pc()&255 < 255: 4873 nop() 4874 4875 # `v6502_RESUME' is the interpreter's secondary entry point for when 4876 # the opcode and operands were already fetched, just before the last hPulse. 4877 # It must be at $xxff, prefably somewhere in v6502's own code pages. 4878 label('v6502_RESUME') 4879 assert (pc()&255) == 255 v6502_RESUME: 10ff a006 suba $06 4880 suba(v6502_adjust) #0,11 v6502 secondary entry point 4881 # --- Page boundary --- 4882 align(0x100,size=0x200) 1100 c215 st [$15] 4883 st([vTicks]) #1 1101 1124 ld [$24],x 4884 ld([v6502_ADL],X) #2 1102 140f ld $0f,y 4885 ld(hi('v6502_execute'),Y) #3 1103 e126 jmp y,[$26] 4886 jmp(Y,[v6502_IR]) #4 1104 fcff bra $ff 4887 bra(255) #5 4888 4889 label('v6502_dec') v6502_dec: 1105 1525 ld [$25],y 4890 ld([v6502_ADH],Y) #12 1106 0d00 ld [y,x] 4891 ld([Y,X]) #13 1107 a001 suba $01 4892 suba(1) #14 1108 ce00 st [y,x] 4893 st([Y,X]) #15 1109 c228 st [$28] 4894 st([v6502_Qz]) #16 Z flag 110a c229 st [$29] 4895 st([v6502_Qn]) #17 N flag 110b 140e ld $0e,y 4896 ld(hi('v6502_next'),Y) #18 110c 00f5 ld $f5 4897 ld(-22/2) #19 110d e020 jmp y,$20 4898 jmp(Y,'v6502_next') #20 4899 #nop() #21 Overlap 4900 # 4901 label('v6502_inc') v6502_inc: 110e 1525 ld [$25],y 4902 ld([v6502_ADH],Y) #12,22 110f 0d00 ld [y,x] 4903 ld([Y,X]) #13 1110 8001 adda $01 4904 adda(1) #14 1111 ce00 st [y,x] 4905 st([Y,X]) #15 1112 c228 st [$28] 4906 st([v6502_Qz]) #16 Z flag 1113 c229 st [$29] 4907 st([v6502_Qn]) #17 N flag 1114 140e ld $0e,y 4908 ld(hi('v6502_next'),Y) #18 1115 00f5 ld $f5 4909 ld(-22/2) #19 1116 e020 jmp y,$20 4910 jmp(Y,'v6502_next') #20 1117 0200 nop 4911 nop() #21 4912 4913 label('v6502_lda') v6502_lda: 1118 0200 nop 4914 nop() #12 1119 1525 ld [$25],y 4915 ld([v6502_ADH],Y) #13 111a 0d00 ld [y,x] 4916 ld([Y,X]) #14 111b c218 st [$18] 4917 st([v6502_A]) #15 4918 label('.lda16') .lda16: 111c c228 st [$28] 4919 st([v6502_Qz]) #16 Z flag 111d c229 st [$29] 4920 st([v6502_Qn]) #17 N flag 111e 0200 nop 4921 nop() #18 111f 140e ld $0e,y 4922 ld(hi('v6502_next'),Y) #19 1120 e020 jmp y,$20 4923 jmp(Y,'v6502_next') #20 1121 00f5 ld $f5 4924 ld(-22/2) #21 4925 4926 label('v6502_ldx') v6502_ldx: 1122 1525 ld [$25],y 4927 ld([v6502_ADH],Y) #12 1123 0d00 ld [y,x] 4928 ld([Y,X]) #13 1124 fc1c bra .lda16 4929 bra('.lda16') #14 1125 c22a st [$2a] 4930 st([v6502_X]) #15 4931 4932 label('v6502_ldy') v6502_ldy: 1126 1525 ld [$25],y 4933 ld([v6502_ADH],Y) #12 1127 0d00 ld [y,x] 4934 ld([Y,X]) #13 1128 fc1c bra .lda16 4935 bra('.lda16') #14 1129 c22b st [$2b] 4936 st([v6502_Y]) #15 4937 4938 label('v6502_ldx2') v6502_ldx2: 112a 0124 ld [$24] 4939 ld([v6502_ADL]) #12 Special case $B6: LDX $DD,Y 112b a12a suba [$2a] 4940 suba([v6502_X]) #13 Undo X offset 112c 912b adda [$2b],x 4941 adda([v6502_Y],X) #14 Apply Y instead 112d 0500 ld [x] 4942 ld([X]) #15 112e c22a st [$2a] 4943 st([v6502_X]) #16 112f c228 st [$28] 4944 st([v6502_Qz]) #17 Z flag 1130 c229 st [$29] 4945 st([v6502_Qn]) #18 N flag 1131 140e ld $0e,y 4946 ld(hi('v6502_next'),Y) #19 1132 e020 jmp y,$20 4947 jmp(Y,'v6502_next') #20 1133 00f5 ld $f5 4948 ld(-22/2) #21 4949 4950 label('v6502_sta') v6502_sta: 1134 1525 ld [$25],y 4951 ld([v6502_ADH],Y) #12 1135 0118 ld [$18] 4952 ld([v6502_A]) #13 1136 ce00 st [y,x] 4953 st([Y,X]) #14 1137 140e ld $0e,y 4954 ld(hi('v6502_next'),Y) #15 1138 e020 jmp y,$20 4955 jmp(Y,'v6502_next') #16 1139 00f7 ld $f7 4956 ld(-18/2) #17 4957 4958 label('v6502_stx') v6502_stx: 113a 1525 ld [$25],y 4959 ld([v6502_ADH],Y) #12 113b 012a ld [$2a] 4960 ld([v6502_X]) #13 113c ce00 st [y,x] 4961 st([Y,X]) #14 113d 140e ld $0e,y 4962 ld(hi('v6502_next'),Y) #15 113e e020 jmp y,$20 4963 jmp(Y,'v6502_next') #16 113f 00f7 ld $f7 4964 ld(-18/2) #17 4965 4966 label('v6502_stx2') v6502_stx2: 1140 0124 ld [$24] 4967 ld([v6502_ADL]) #12 Special case $96: STX $DD,Y 1141 a12a suba [$2a] 4968 suba([v6502_X]) #13 Undo X offset 1142 912b adda [$2b],x 4969 adda([v6502_Y],X) #14 Apply Y instead 1143 012a ld [$2a] 4970 ld([v6502_X]) #15 1144 c600 st [x] 4971 st([X]) #16 1145 140e ld $0e,y 4972 ld(hi('v6502_next'),Y) #17 1146 e020 jmp y,$20 4973 jmp(Y,'v6502_next') #18 1147 00f6 ld $f6 4974 ld(-20/2) #19 4975 4976 label('v6502_sty') v6502_sty: 1148 1525 ld [$25],y 4977 ld([v6502_ADH],Y) #12 1149 012b ld [$2b] 4978 ld([v6502_Y]) #13 114a ce00 st [y,x] 4979 st([Y,X]) #14 114b 140e ld $0e,y 4980 ld(hi('v6502_next'),Y) #15 114c e020 jmp y,$20 4981 jmp(Y,'v6502_next') #16 4982 label('v6502_tax') v6502_tax: 114d 00f7 ld $f7 4983 ld(-18/2) #17,12 4984 # 4985 #label('v6502_tax') 4986 #nop() #12 Overlap 114e 0118 ld [$18] 4987 ld([v6502_A]) #13 114f c22a st [$2a] 4988 st([v6502_X]) #14 4989 label('.tax15') .tax15: 1150 c228 st [$28] 4990 st([v6502_Qz]) #15 Z flag 1151 c229 st [$29] 4991 st([v6502_Qn]) #16 N flag 1152 140e ld $0e,y 4992 ld(hi('v6502_next'),Y) #17 1153 e020 jmp y,$20 4993 jmp(Y,'v6502_next') #18 4994 label('v6502_tsx') v6502_tsx: 1154 00f6 ld $f6 4995 ld(-20/2) #19 4996 # 4997 #label('v6502_tsx') 4998 #nop() #12 Overlap 1155 011c ld [$1c] 4999 ld([v6502_S]) #13 1156 a001 suba $01 5000 suba(1) #14 Shift down on export 1157 c22a st [$2a] 5001 st([v6502_X]) #15 5002 label('.tsx16') .tsx16: 1158 c228 st [$28] 5003 st([v6502_Qz]) #16 Z flag 1159 c229 st [$29] 5004 st([v6502_Qn]) #17 N flag 115a 0200 nop 5005 nop() #18 115b 140e ld $0e,y 5006 ld(hi('v6502_next'),Y) #19 115c e020 jmp y,$20 5007 jmp(Y,'v6502_next') #20 115d 00f5 ld $f5 5008 ld(-22/2) #21 5009 5010 label('v6502_txs') v6502_txs: 115e 012a ld [$2a] 5011 ld([v6502_X]) #12 115f 8001 adda $01 5012 adda(1) #13 Shift up on import 1160 fc58 bra .tsx16 5013 bra('.tsx16') #14 1161 c21c st [$1c] 5014 st([v6502_S]) #15 5015 5016 label('v6502_tay') v6502_tay: 1162 0118 ld [$18] 5017 ld([v6502_A]) #12 1163 fc50 bra .tax15 5018 bra('.tax15') #13 1164 c22b st [$2b] 5019 st([v6502_Y]) #14 5020 5021 label('v6502_txa') v6502_txa: 1165 012a ld [$2a] 5022 ld([v6502_X]) #12 1166 fc50 bra .tax15 5023 bra('.tax15') #13 1167 c218 st [$18] 5024 st([v6502_A]) #14 5025 5026 label('v6502_tya') v6502_tya: 1168 012b ld [$2b] 5027 ld([v6502_Y]) #12 1169 fc50 bra .tax15 5028 bra('.tax15') #13 116a c218 st [$18] 5029 st([v6502_A]) #14 5030 5031 label('v6502_cli') v6502_cli: 116b 0127 ld [$27] 5032 ld([v6502_P]) #12 116c fc79 bra .clv15 5033 bra('.clv15') #13 116d 20fb anda $fb 5034 anda(~v6502_Iflag) #14 5035 5036 label('v6502_sei') v6502_sei: 116e 0127 ld [$27] 5037 ld([v6502_P]) #12 116f fc79 bra .clv15 5038 bra('.clv15') #13 1170 4004 ora $04 5039 ora(v6502_Iflag) #14 5040 5041 label('v6502_cld') v6502_cld: 1171 0127 ld [$27] 5042 ld([v6502_P]) #12 1172 fc79 bra .clv15 5043 bra('.clv15') #13 1173 20f7 anda $f7 5044 anda(~v6502_Dflag) #14 5045 5046 label('v6502_sed') v6502_sed: 1174 0127 ld [$27] 5047 ld([v6502_P]) #12 1175 fc79 bra .clv15 5048 bra('.clv15') #13 5049 label('v6502_clv') v6502_clv: 1176 4008 ora $08 5050 ora(v6502_Dflag) #14,12 Overlap 5051 # 5052 #label('v6502_clv') 5053 #nop() #12 1177 0127 ld [$27] 5054 ld([v6502_P]) #13 1178 207f anda $7f 5055 anda(~v6502_Vemu) #14 5056 label('.clv15') .clv15: 1179 c227 st [$27] 5057 st([v6502_P]) #15 117a 140e ld $0e,y 5058 ld(hi('v6502_next'),Y) #16 117b 00f6 ld $f6 5059 ld(-20/2) #17 117c e020 jmp y,$20 5060 jmp(Y,'v6502_next') #18 5061 label('v6502_bit') v6502_bit: 117d 0200 nop 5062 nop() #19,12 5063 # 5064 #label('v6502_bit') 5065 #nop() #12 Overlap 117e 1124 ld [$24],x 5066 ld([v6502_ADL],X) #13 117f 1525 ld [$25],y 5067 ld([v6502_ADH],Y) #14 1180 0d00 ld [y,x] 5068 ld([Y,X]) #15 1181 c229 st [$29] 5069 st([v6502_Qn]) #16 N flag 1182 2118 anda [$18] 5070 anda([v6502_A]) #17 This is a reason we keep N and Z in separate bytes 1183 c228 st [$28] 5071 st([v6502_Qz]) #18 Z flag 1184 0127 ld [$27] 5072 ld([v6502_P]) #19 1185 207f anda $7f 5073 anda(~v6502_Vemu) #20 1186 c227 st [$27] 5074 st([v6502_P]) #21 1187 0d00 ld [y,x] 5075 ld([Y,X]) #22 1188 8200 adda ac 5076 adda(AC) #23 1189 2080 anda $80 5077 anda(v6502_Vemu) #24 118a 4127 ora [$27] 5078 ora([v6502_P]) #25 118b c227 st [$27] 5079 st([v6502_P]) #26 Update V 118c 140e ld $0e,y 5080 ld(hi('v6502_next'),Y) #27 118d e020 jmp y,$20 5081 jmp(Y,'v6502_next') #28 118e 00f1 ld $f1 5082 ld(-30/2) #29 5083 5084 label('v6502_rts') v6502_rts: 118f 011c ld [$1c] 5085 ld([v6502_S]) #12 1190 1200 ld ac,x 5086 ld(AC,X) #13 1191 8002 adda $02 5087 adda(2) #14 1192 c21c st [$1c] 5088 st([v6502_S]) #15 1193 1400 ld $00,y 5089 ld(0,Y) #16 1194 0d00 ld [y,x] 5090 ld([Y,X]) #17 1195 de00 st [y,x++] 5091 st([Y,Xpp]) #18 Just X++ 1196 8001 adda $01 5092 adda(1) #19 1197 c21a st [$1a] 5093 st([v6502_PCL]) #20 1198 f09b beq $119b 5094 beq(pc()+3) #21 1199 fc9c bra $119c 5095 bra(pc()+3) #22 119a 0000 ld $00 5096 ld(0) #23 119b 0001 ld $01 5097 ld(1) #23(!) 119c 8d00 adda [y,x] 5098 adda([Y,X]) #24 119d c21b st [$1b] 5099 st([v6502_PCH]) #25 119e 0200 nop 5100 nop() #26 119f 140e ld $0e,y 5101 ld(hi('v6502_next'),Y) #27 11a0 e020 jmp y,$20 5102 jmp(Y,'v6502_next') #28 11a1 00f1 ld $f1 5103 ld(-30/2) #29 5104 5105 label('v6502_php') v6502_php: 11a2 011c ld [$1c] 5106 ld([v6502_S]) #12 11a3 a001 suba $01 5107 suba(1) #13 11a4 d21c st [$1c],x 5108 st([v6502_S],X) #14 11a5 0127 ld [$27] 5109 ld([v6502_P]) #15 11a6 20bd anda $bd 5110 anda(~v6502_Vflag&~v6502_Zflag) #16 Keep Vemu,B,D,I,C 11a7 f4aa bge $11aa 5111 bpl(pc()+3) #17 V to bit 6 and clear N 11a8 fcaa bra $11aa 5112 bra(pc()+2) #18 11a9 60c0 xora $c0 5113 xora(v6502_Vflag^v6502_Vemu) #19 11aa c600 st [x] 5114 st([X]) #19,20 11ab 0128 ld [$28] 5115 ld([v6502_Qz]) #21 Z flag 11ac f0af beq $11af 5116 beq(pc()+3) #22 11ad fcb0 bra $11b0 5117 bra(pc()+3) #23 11ae 0000 ld $00 5118 ld(0) #24 11af 0002 ld $02 5119 ld(v6502_Zflag) #24(!) 11b0 4500 ora [x] 5120 ora([X]) #25 11b1 c600 st [x] 5121 st([X]) #26 11b2 0129 ld [$29] 5122 ld([v6502_Qn]) #27 N flag 11b3 2080 anda $80 5123 anda(0x80) #28 11b4 4500 ora [x] 5124 ora([X]) #29 11b5 4020 ora $20 5125 ora(v6502_Uflag) #30 Unused bit 11b6 c600 st [x] 5126 st([X]) #31 11b7 0200 nop 5127 nop() #32 11b8 140e ld $0e,y 5128 ld(hi('v6502_next'),Y) #33 11b9 e020 jmp y,$20 5129 jmp(Y,'v6502_next') #34 11ba 00ee ld $ee 5130 ld(-36/2) #35 5131 5132 label('v6502_cpx') v6502_cpx: 11bb fcc0 bra .cmp14 5133 bra('.cmp14') #12 11bc 012a ld [$2a] 5134 ld([v6502_X]) #13 5135 5136 label('v6502_cpy') v6502_cpy: 11bd fcc0 bra .cmp14 5137 bra('.cmp14') #12 5138 label('v6502_cmp') v6502_cmp: 11be 012b ld [$2b] 5139 ld([v6502_Y]) #13,12 5140 # 5141 #label('v6502_cmp') #12 Overlap 5142 assert v6502_Cflag == 1 11bf 0118 ld [$18] 5143 ld([v6502_A]) #13 5144 label('.cmp14') .cmp14: 11c0 1525 ld [$25],y 5145 ld([v6502_ADH],Y) #14 11c1 e8c7 blt .cmp17 5146 bmi('.cmp17') #15 Carry? 11c2 ad00 suba [y,x] 5147 suba([Y,X]) #16 11c3 c228 st [$28] 5148 st([v6502_Qz]) #17 Z flag 11c4 c229 st [$29] 5149 st([v6502_Qn]) #18 N flag 11c5 fccb bra .cmp21 5150 bra('.cmp21') #19 11c6 4d00 ora [y,x] 5151 ora([Y,X]) #20 5152 label('.cmp17') .cmp17: 11c7 c228 st [$28] 5153 st([v6502_Qz]) #17 Z flag 11c8 c229 st [$29] 5154 st([v6502_Qn]) #18 N flag 11c9 2d00 anda [y,x] 5155 anda([Y,X]) #19 11ca 0200 nop 5156 nop() #20 5157 label('.cmp21') .cmp21: 11cb 6080 xora $80 5158 xora(0x80) #21 11cc 3080 anda $80,x 5159 anda(0x80,X) #22 Move carry to bit 0 11cd 0127 ld [$27] 5160 ld([v6502_P]) #23 C flag 11ce 20fe anda $fe 5161 anda(~1) #24 11cf 4500 ora [x] 5162 ora([X]) #25 11d0 c227 st [$27] 5163 st([v6502_P]) #26 11d1 140e ld $0e,y 5164 ld(hi('v6502_next'),Y) #27 11d2 e020 jmp y,$20 5165 jmp(Y,'v6502_next') #28 11d3 00f1 ld $f1 5166 ld(-30/2) #29 5167 5168 label('v6502_plp') 5169 assert v6502_Nflag == 128 5170 assert 2*v6502_Vflag == v6502_Vemu v6502_plp: 11d4 011c ld [$1c] 5171 ld([v6502_S]) #12 11d5 1200 ld ac,x 5172 ld(AC,X) #13 11d6 8001 adda $01 5173 adda(1) #14 11d7 c21c st [$1c] 5174 st([v6502_S]) #15 11d8 0500 ld [x] 5175 ld([X]) #16 11d9 c229 st [$29] 5176 st([v6502_Qn]) #17 N flag 11da 2002 anda $02 5177 anda(v6502_Zflag) #18 11db 6002 xora $02 5178 xora(v6502_Zflag) #19 11dc c228 st [$28] 5179 st([v6502_Qz]) #20 Z flag 11dd 0500 ld [x] 5180 ld([X]) #21 11de 207f anda $7f 5181 anda(~v6502_Vemu) #22 V to bit 7 11df 8040 adda $40 5182 adda(v6502_Vflag) #23 11e0 c227 st [$27] 5183 st([v6502_P]) #24 All other flags 11e1 140e ld $0e,y 5184 ld(hi('v6502_next'),Y) #25 11e2 e020 jmp y,$20 5185 jmp(Y,'v6502_next') #26 11e3 00f2 ld $f2 5186 ld(-28/2) #27 5187 5188 label('v6502_rti') v6502_rti: 11e4 011c ld [$1c] 5189 ld([v6502_S]) #12 11e5 1200 ld ac,x 5190 ld(AC,X) #13 11e6 8003 adda $03 5191 adda(3) #14 11e7 c21c st [$1c] 5192 st([v6502_S]) #15 11e8 0500 ld [x] 5193 ld([X]) #16 11e9 c229 st [$29] 5194 st([v6502_Qn]) #17 N flag 11ea 2002 anda $02 5195 anda(v6502_Zflag) #18 11eb 6002 xora $02 5196 xora(v6502_Zflag) #19 11ec c228 st [$28] 5197 st([v6502_Qz]) #20 Z flag 11ed 1400 ld $00,y 5198 ld(0,Y) #21 11ee 0d00 ld [y,x] 5199 ld([Y,X]) #22 11ef de00 st [y,x++] 5200 st([Y,Xpp]) #23 Just X++ 11f0 207f anda $7f 5201 anda(~v6502_Vemu) #24 V to bit 7 11f1 8040 adda $40 5202 adda(v6502_Vflag) #25 11f2 c227 st [$27] 5203 st([v6502_P]) #26 All other flags 11f3 0d00 ld [y,x] 5204 ld([Y,X]) #27 11f4 de00 st [y,x++] 5205 st([Y,Xpp]) #28 Just X++ 11f5 c21a st [$1a] 5206 st([v6502_PCL]) #29 11f6 0d00 ld [y,x] 5207 ld([Y,X]) #30 11f7 c21b st [$1b] 5208 st([v6502_PCH]) #31 11f8 0200 nop 5209 nop() #32 11f9 140e ld $0e,y 5210 ld(hi('v6502_next'),Y) #33 11fa e020 jmp y,$20 5211 jmp(Y,'v6502_next') #34 11fb 00ee ld $ee 5212 ld(-36/2) #35 5213 5214 #----------------------------------------------------------------------- 5215 # Extended vertical blank logic: interrupts 5216 #----------------------------------------------------------------------- 11fc 0200 nop 5217 align(0x100) 11fd 0200 nop 11fe 0200 nop 11ff 0200 nop 5218 5219 # Check if an IRQ handler is defined 5220 label('vBlankFirst#78') vBlankFirst#78: 1200 09f6 ld [y,$f6] 5221 ld([Y,vIRQ_v5]) #78 1201 49f7 ora [y,$f7] 5222 ora([Y,vIRQ_v5+1]) #79 5223 bne('vBlankFirst#82') #80 1202 ec09 bne vBlankFirst#82 1203 0116 ld [$16] 5224 ld([vPC]) #81 1204 0055 ld $55 5225 runVcpu(186-82-extra, #82 Application cycles (scan line 0) 1205 c21e st [$1e] 1206 1505 ld [$05],y 1207 e0ff jmp y,$ff 1208 001f ld $1f 5226 '---D line 0 timeout but no irq', 5227 returnTo='vBlankFirst#186') 5228 5229 label('vBlankFirst#82') vBlankFirst#82: 1209 c230 st [$30] 5230 st([vIrqSave+0]) #82 Save vPC 120a 0117 ld [$17] 5231 ld([vPC+1]) #83 120b c231 st [$31] 5232 st([vIrqSave+1]) #84 120c 0118 ld [$18] 5233 ld([vAC]) #85 Save vAC 120d c232 st [$32] 5234 st([vIrqSave+2]) #86 120e 0119 ld [$19] 5235 ld([vAC+1]) #87 120f c233 st [$33] 5236 st([vIrqSave+3]) #88 1210 09f6 ld [y,$f6] 5237 ld([Y,vIRQ_v5]) #89 Set vPC to vIRQ 1211 a002 suba $02 5238 suba(2) #90 1212 c216 st [$16] 5239 st([vPC]) #91 1213 09f7 ld [y,$f7] 5240 ld([Y,vIRQ_v5+1]) #92 1214 c217 st [$17] 5241 st([vPC+1]) #93 1215 0105 ld [$05] 5242 ld([vCpuSelect]) #94 Save vCpuSelect 1216 c234 st [$34] 5243 st([vIrqSave+4]) #95 1217 0002 ld $02 5244 ld(hi('ENTER')) #96 Set vCpuSelect to ENTER (=regular vCPU) 1218 c205 st [$05] 5245 st([vCpuSelect]) #97 1219 0055 ld $55 5246 runVcpu(186-98-extra, #98 Application cycles (scan line 0) 121a c21e st [$1e] 121b 1505 ld [$05],y 121c e0ff jmp y,$ff 121d 0017 ld $17 5247 '---D line 0 timeout with irq', 5248 returnTo='vBlankFirst#186') 5249 5250 # vRTI immediate resume 5251 label('vRTI#25') vRTI#25: 121e 0133 ld [$33] 5252 ld([vIrqSave+3]) #25 121f c219 st [$19] 5253 st([vAC+1]) #26 1220 0134 ld [$34] 5254 ld([vIrqSave+4]) #27 1221 d605 st [$05],y 5255 st([vCpuSelect],Y) #28 1222 00f0 ld $f0 5256 ld(-32//2) #29 1223 e0ff jmp y,$ff 5257 jmp(Y,'ENTER') #30 1224 8115 adda [$15] 5258 adda([vTicks]) #31-32=-1 5259 5260 5261 # Entered last line of vertical blank (line 40) 5262 label('vBlankLast#34') 5263 5264 #----------------------------------------------------------------------- 5265 # Extended vertical blank logic: game controller decoding 5266 #----------------------------------------------------------------------- 5267 5268 # Game controller types 5269 # TypeA: Based on 74LS165 shift register (not supported) 5270 # TypeB: Based on CD4021B shift register (standard) 5271 # TypeC: Based on priority encoder 5272 # 5273 # Notes: 5274 # - TypeA was only used during development and first beta test, before ROM v1 5275 # - TypeB appears as type A with negative logic levels 5276 # - TypeB is the game controller type that comes with the original kit and ROM v1 5277 # - TypeB is mimicked by BabelFish / Pluggy McPlugface 5278 # - TypeB requires a prolonged /SER_LATCH, therefore vPulse is 8 scanlines, not 2 5279 # - TypeB and TypeC can be sampled in the same scanline 5280 # - TypeA is 1 scanline shifted as it looks at a different edge (XXX up or down?) 5281 # - TypeC gives incomplete information: lower buttons overshadow higher ones 5282 # 5283 # TypeC Alias Button TypeB 5284 # 00000000 ^@ -> Right 11111110 5285 # 00000001 ^A -> Left 11111101 5286 # 00000011 ^C -> Down 11111011 5287 # 00000111 ^G -> Up 11110111 5288 # 00001111 ^O -> Start 11101111 5289 # 00011111 ^_ -> Select 11011111 5290 # 00111111 ? -> B 10111111 5291 # 01111111 DEL -> A 01111111 5292 # 11111111 -> (None) 11111111 5293 # 5294 # Conversion formula: 5295 # f(x) := 254 - x 5296 5297 # Detect controller TypeC codes vBlankLast#34: 1225 010f ld [$0f] 5298 ld([serialRaw]) #34 if serialRaw in [0,1,3,7,15,31,63,127,255] 1226 8001 adda $01 5299 adda(1) #35 1227 210f anda [$0f] 5300 anda([serialRaw]) #36 1228 ec39 bne .buttons#39 5301 bne('.buttons#39') #37 5302 5303 # TypeC 1229 010f ld [$0f] 5304 ld([serialRaw]) #38 [TypeC] if serialRaw < serialLast 122a 8001 adda $01 5305 adda(1) #39 122b 2110 anda [$10] 5306 anda([serialLast]) #40 122c ec30 bne .buttons#43 5307 bne('.buttons#43') #41 122d 00fe ld $fe 5308 ld(254) #42 then clear the selected bit 122e 0200 nop 5309 nop() #43 122f fc33 bra .buttons#46 5310 bra('.buttons#46') #44 5311 label('.buttons#43') .buttons#43: 1230 a10f suba [$0f] 5312 suba([serialRaw]) #43,45 1231 2111 anda [$11] 5313 anda([buttonState]) #44 1232 c211 st [$11] 5314 st([buttonState]) #45 5315 label('.buttons#46') .buttons#46: 1233 010f ld [$0f] 5316 ld([serialRaw]) #46 Set the lower bits 1234 4111 ora [$11] 5317 ora([buttonState]) #47 5318 label('.buttons#48') .buttons#48: 1235 c211 st [$11] 5319 st([buttonState]) #48 1236 010f ld [$0f] 5320 ld([serialRaw]) #49 Update serialLast for next pass 1237 e0b3 jmp y,$b3 5321 jmp(Y,'vBlankLast#52') #50 1238 c210 st [$10] 5322 st([serialLast]) #51 5323 5324 # TypeB 5325 # pChange = pNew & ~pOld 5326 # nChange = nNew | ~nOld {DeMorgan} 5327 label('.buttons#39') .buttons#39: 1239 00ff ld $ff 5328 ld(255) #39 [TypeB] Bitwise edge-filter to detect button presses 123a 6110 xora [$10] 5329 xora([serialLast]) #40 123b 410f ora [$0f] 5330 ora([serialRaw]) #41 Catch button-press events 123c 2111 anda [$11] 5331 anda([buttonState]) #42 Keep active button presses 123d 410f ora [$0f] 5332 ora([serialRaw]) #43 123e 0200 nop 5333 nop() #44 123f 0200 nop 5334 nop() #45 1240 fc35 bra .buttons#48 5335 bra('.buttons#48') #46 1241 0200 nop 5336 nop() #47 5337 5338 5339 #----------------------------------------------------------------------- 5340 # More SYS functions 5341 #----------------------------------------------------------------------- 5342 5343 # SYS_Exec_88 implementation 5344 label('sys_Exec') sys_Exec: 1242 d617 st [$17],y 5345 st([vPC+1],Y) #18 Clear vPCH and Y 1243 011c ld [$1c] 5346 ld([vSP]) #19 Place ROM loader below current stack pointer 1244 a037 suba $37 5347 suba(53+2) #20 (AC -> *+0) One extra word for PUSH 1245 d21d st [$1d],x 5348 st([vTmp],X) #21 1246 80fe adda $fe 5349 adda(-2) #22 (AC -> *-2) 1247 c216 st [$16] 5350 st([vPC]) #23 5351 # Start of manually compiled vCPU section 1248 dc75 st $75,[y,x++] 5352 st('PUSH', [Y,Xpp]) #24 *+0 1249 dccf st $cf,[y,x++] 5353 st('CALL', [Y,Xpp]) #25 *+26 Fetch first byte 124a 8023 adda $23 5354 adda(33-(-2)) #26 (AC -> *+33) 124b de00 st [y,x++] 5355 st( [Y,Xpp]) #27 *+27 124c dc5e st $5e,[y,x++] 5356 st('ST', [Y,Xpp]) #28 *+3 Chunk copy loop 124d dc27 st $27,[y,x++] 5357 st(sysArgs+3, [Y,Xpp]) #29 *+4 High-address comes first 124e dccf st $cf,[y,x++] 5358 st('CALL', [Y,Xpp]) #30 *+5 124f de00 st [y,x++] 5359 st( [Y,Xpp]) #31 *+6 1250 dc5e st $5e,[y,x++] 5360 st('ST', [Y,Xpp]) #32 *+7 1251 dc26 st $26,[y,x++] 5361 st(sysArgs+2, [Y,Xpp]) #33 *+8 Then the low address 1252 dccf st $cf,[y,x++] 5362 st('CALL', [Y,Xpp]) #34 *+9 1253 de00 st [y,x++] 5363 st( [Y,Xpp]) #35 *+10 1254 dc5e st $5e,[y,x++] 5364 st('ST', [Y,Xpp]) #36 *+11 Byte copy loop 1255 dc28 st $28,[y,x++] 5365 st(sysArgs+4, [Y,Xpp]) #37 *+12 Byte count (0 means 256) 1256 dccf st $cf,[y,x++] 5366 st('CALL', [Y,Xpp]) #38 *+13 1257 de00 st [y,x++] 5367 st( [Y,Xpp]) #39 *+14 1258 dcf0 st $f0,[y,x++] 5368 st('POKE', [Y,Xpp]) #40 *+15 1259 dc26 st $26,[y,x++] 5369 st(sysArgs+2, [Y,Xpp]) #41 *+16 125a dc93 st $93,[y,x++] 5370 st('INC', [Y,Xpp]) #42 *+17 125b dc26 st $26,[y,x++] 5371 st(sysArgs+2, [Y,Xpp]) #43 *+18 125c dc1a st $1a,[y,x++] 5372 st('LD', [Y,Xpp]) #44 *+19 125d dc28 st $28,[y,x++] 5373 st(sysArgs+4, [Y,Xpp]) #45 *+20 125e dce6 st $e6,[y,x++] 5374 st('SUBI', [Y,Xpp]) #46 *+21 125f dc01 st $01,[y,x++] 5375 st(1, [Y,Xpp]) #47 *+22 1260 dc35 st $35,[y,x++] 5376 st('BCC', [Y,Xpp]) #48 *+23 1261 dc72 st $72,[y,x++] 5377 st('NE', [Y,Xpp]) #49 *+24 1262 80e8 adda $e8 5378 adda(11-2-33) #50 (AC -> *+9) 1263 de00 st [y,x++] 5379 st( [Y,Xpp]) #51 *+25 1264 dccf st $cf,[y,x++] 5380 st('CALL', [Y,Xpp]) #52 *+26 Go to next block 1265 8018 adda $18 5381 adda(33-9) #53 (AC -> *+33) 1266 de00 st [y,x++] 5382 st( [Y,Xpp]) #54 *+27 1267 dc35 st $35,[y,x++] 5383 st('BCC', [Y,Xpp]) #55 *+28 1268 dc72 st $72,[y,x++] 5384 st('NE', [Y,Xpp]) #56 *+29 1269 80e0 adda $e0 5385 adda(3-2-33) #57 (AC -> *+1) 126a de00 st [y,x++] 5386 st( [Y,Xpp]) #58 *+30 126b dc63 st $63,[y,x++] 5387 st('POP', [Y,Xpp]) #59 *+31 End 126c dcff st $ff,[y,x++] 5388 st('RET', [Y,Xpp]) #60 *+32 5389 # Pointer constant pointing to the routine below (for use by CALL) 126d 8022 adda $22 5390 adda(35-1) #61 (AC -> *+35) 126e de00 st [y,x++] 5391 st( [Y,Xpp]) #62 *+33 126f dc00 st $00,[y,x++] 5392 st(0, [Y,Xpp]) #63 *+34 5393 # Routine to read next byte from ROM and advance read pointer 1270 dc1a st $1a,[y,x++] 5394 st('LD', [Y,Xpp]) #64 *+35 Test for end of ROM table 1271 dc24 st $24,[y,x++] 5395 st(sysArgs+0, [Y,Xpp]) #65 *+36 1272 dc8c st $8c,[y,x++] 5396 st('XORI', [Y,Xpp]) #66 *+37 1273 dcfb st $fb,[y,x++] 5397 st(251, [Y,Xpp]) #67 *+38 1274 dc35 st $35,[y,x++] 5398 st('BCC', [Y,Xpp]) #68 *+39 1275 dc72 st $72,[y,x++] 5399 st('NE', [Y,Xpp]) #69 *+40 1276 8009 adda $09 5400 adda(46-2-35) #70 (AC -> *+44) 1277 de00 st [y,x++] 5401 st( [Y,Xpp]) #71 *+41 1278 dc5e st $5e,[y,x++] 5402 st('ST', [Y,Xpp]) #72 *+42 Wrap to next ROM page 1279 dc24 st $24,[y,x++] 5403 st(sysArgs+0, [Y,Xpp]) #73 *+43 127a dc93 st $93,[y,x++] 5404 st('INC', [Y,Xpp]) #74 *+44 127b dc25 st $25,[y,x++] 5405 st(sysArgs+1, [Y,Xpp]) #75 *+45 127c dc21 st $21,[y,x++] 5406 st('LDW', [Y,Xpp]) #76 *+46 Read next byte from ROM table 127d dc24 st $24,[y,x++] 5407 st(sysArgs+0, [Y,Xpp]) #77 *+47 127e dc7f st $7f,[y,x++] 5408 st('LUP', [Y,Xpp]) #78 *+48 127f dc00 st $00,[y,x++] 5409 st(0, [Y,Xpp]) #79 *+49 1280 dc93 st $93,[y,x++] 5410 st('INC', [Y,Xpp]) #80 *+50 Increment read pointer 1281 dc24 st $24,[y,x++] 5411 st(sysArgs+0, [Y,Xpp]) #81 *+51 1282 dcff st $ff,[y,x++] 5412 st('RET', [Y,Xpp]) #82 *+52 Return 5413 # Return to interpreter 1283 1403 ld $03,y 5414 ld(hi('REENTER'),Y) #83 1284 e0cb jmp y,$cb 5415 jmp(Y,'REENTER') #84 1285 00d4 ld $d4 5416 ld(-88/2) #85 5417 5418 # SYS_VDrawBits_134 implementation 5419 label('sys_VDrawBits') sys_VDrawBits: 1286 0000 ld $00 5420 ld(0) #18 5421 label('.sysVdb0') .sysVdb0: 1287 c21d st [$1d] 5422 st([vTmp]) #19+i*25 1288 9529 adda [$29],y 5423 adda([sysArgs+5],Y) #20+i*25 Y=[sysPos+1]+[vTmp] 1289 0126 ld [$26] 5424 ld([sysArgs+2]) #21+i*25 Select color 128a e88d blt $128d 5425 bmi(pc()+3) #22+i*25 128b fc8e bra $128e 5426 bra(pc()+3) #23+i*25 128c 0124 ld [$24] 5427 ld([sysArgs+0]) #24+i*25 128d 0125 ld [$25] 5428 ld([sysArgs+1]) #24+i*25(!) 128e ce00 st [y,x] 5429 st([Y,X]) #25+i*25 Draw pixel 128f 0126 ld [$26] 5430 ld([sysArgs+2]) #26+i*25 Shift byte left 1290 8200 adda ac 5431 adda(AC) #27+i*25 1291 c226 st [$26] 5432 st([sysArgs+2]) #28+i*25 1292 011d ld [$1d] 5433 ld([vTmp]) #29+i*25 Unrolled loop (once) 1293 8129 adda [$29] 5434 adda([sysArgs+5]) #31+i*25 1294 9401 adda $01,y 5435 adda(1,Y) #30+i*25 Y=[sysPos+1]+[vTmp]+1 1295 0126 ld [$26] 5436 ld([sysArgs+2]) #32+i*25 Select color 1296 e899 blt $1299 5437 bmi(pc()+3) #33+i*25 1297 fc9a bra $129a 5438 bra(pc()+3) #34+i*25 1298 0124 ld [$24] 5439 ld([sysArgs+0]) #35+i*25 1299 0125 ld [$25] 5440 ld([sysArgs+1]) #35+i*25(!) 129a ce00 st [y,x] 5441 st([Y,X]) #36+i*25 Draw pixel 129b 0126 ld [$26] 5442 ld([sysArgs+2]) #37+i*25 Shift byte left 129c 8200 adda ac 5443 adda(AC) #38+i*25 129d c226 st [$26] 5444 st([sysArgs+2]) #39+i*25 129e 011d ld [$1d] 5445 ld([vTmp]) #40+i*25 Loop counter 129f a006 suba $06 5446 suba(6) #41+i*25 12a0 ec87 bne .sysVdb0 5447 bne('.sysVdb0') #42+i*25 12a1 8008 adda $08 5448 adda(8) #43+i*25 Steps of 2 12a2 1403 ld $03,y 5449 ld(hi('REENTER'),Y) #119 12a3 e0cb jmp y,$cb 5450 jmp(Y,'REENTER') #120 12a4 00c2 ld $c2 5451 ld(-124/2) #121 5452 5453 # SYS_ResetWaveforms_v4_50 implementation 5454 label('sys_ResetWaveforms') sys_ResetWaveforms: 12a5 0118 ld [$18] 5455 ld([vAC+0]) #18 X=4i 12a6 8200 adda ac 5456 adda(AC) #19 12a7 9200 adda ac,x 5457 adda(AC,X) #20 12a8 0118 ld [$18] 5458 ld([vAC+0]) #21 12a9 de00 st [y,x++] 5459 st([Y,Xpp]) #22 Sawtooth: T[4i+0] = i 12aa 2020 anda $20 5460 anda(0x20) #23 Triangle: T[4i+1] = 2i if i<32 else 127-2i 12ab ecae bne $12ae 5461 bne(pc()+3) #24 12ac 0118 ld [$18] 5462 ld([vAC+0]) #25 12ad fcb0 bra $12b0 5463 bra(pc()+3) #26 12ae 8118 adda [$18] 5464 adda([vAC+0]) #26,27 12af 607f xora $7f 5465 xora(127) #27 12b0 de00 st [y,x++] 5466 st([Y,Xpp]) #28 12b1 0118 ld [$18] 5467 ld([vAC+0]) #29 Pulse: T[4i+2] = 0 if i<32 else 63 12b2 2020 anda $20 5468 anda(0x20) #30 12b3 ecb6 bne $12b6 5469 bne(pc()+3) #31 12b4 fcb7 bra $12b7 5470 bra(pc()+3) #32 12b5 0000 ld $00 5471 ld(0) #33 12b6 003f ld $3f 5472 ld(63) #33(!) 12b7 de00 st [y,x++] 5473 st([Y,Xpp]) #34 12b8 0118 ld [$18] 5474 ld([vAC+0]) #35 Sawtooth: T[4i+3] = i 12b9 ce00 st [y,x] 5475 st([Y,X]) #36 12ba 8001 adda $01 5476 adda(1) #37 i += 1 12bb c218 st [$18] 5477 st([vAC+0]) #38 12bc 6040 xora $40 5478 xora(64) #39 For 64 iterations 12bd f0c0 beq $12c0 5479 beq(pc()+3) #40 12be fcc1 bra $12c1 5480 bra(pc()+3) #41 12bf 00fe ld $fe 5481 ld(-2) #42 12c0 0000 ld $00 5482 ld(0) #42(!) 12c1 8116 adda [$16] 5483 adda([vPC]) #43 12c2 c216 st [$16] 5484 st([vPC]) #44 12c3 1403 ld $03,y 5485 ld(hi('REENTER'),Y) #45 12c4 e0cb jmp y,$cb 5486 jmp(Y,'REENTER') #46 12c5 00e7 ld $e7 5487 ld(-50/2) #47 5488 5489 # SYS_ShuffleNoise_v4_46 implementation 5490 label('sys_ShuffleNoise') sys_ShuffleNoise: 12c6 1118 ld [$18],x 5491 ld([vAC+0],X) #18 tmp = T[4j] 12c7 0d00 ld [y,x] 5492 ld([Y,X]) #19 12c8 c21d st [$1d] 5493 st([vTmp]) #20 12c9 1119 ld [$19],x 5494 ld([vAC+1],X) #21 T[4j] = T[4i] 12ca 0d00 ld [y,x] 5495 ld([Y,X]) #22 12cb 1118 ld [$18],x 5496 ld([vAC+0],X) #23 12cc ce00 st [y,x] 5497 st([Y,X]) #24 12cd 8200 adda ac 5498 adda(AC) #25 j += T[4i] 12ce 8200 adda ac 5499 adda(AC,) #26 12cf 8118 adda [$18] 5500 adda([vAC+0]) #27 12d0 c218 st [$18] 5501 st([vAC+0]) #28 12d1 1119 ld [$19],x 5502 ld([vAC+1],X) #29 T[4i] = tmp 12d2 011d ld [$1d] 5503 ld([vTmp]) #30 12d3 ce00 st [y,x] 5504 st([Y,X]) #31 12d4 0119 ld [$19] 5505 ld([vAC+1]) #32 i += 1 12d5 8004 adda $04 5506 adda(4) #33 12d6 c219 st [$19] 5507 st([vAC+1]) #34 12d7 f0da beq $12da 5508 beq(pc()+3) #35 For 64 iterations 12d8 fcdb bra $12db 5509 bra(pc()+3) #36 12d9 00fe ld $fe 5510 ld(-2) #37 12da 0000 ld $00 5511 ld(0) #37(!) 12db 8116 adda [$16] 5512 adda([vPC]) #38 12dc c216 st [$16] 5513 st([vPC]) #39 12dd 1403 ld $03,y 5514 ld(hi('NEXTY'),Y) #40 12de e000 jmp y,$00 5515 jmp(Y,'NEXTY') #41 12df 00ea ld $ea 5516 ld(-44/2) #42 5517 5518 5519 #----------------------------------------------------------------------- 5520 # 5521 # $1300 ROM page 19/20: SYS calls 5522 # 5523 #----------------------------------------------------------------------- 5524 12e0 0200 nop 5525 align(0x100, size=0x100) 12e1 0200 nop 12e2 0200 nop * 32 times 5526 5527 # SYS_CopyMemory_v6_80 implementation 5528 5529 label('sys_CopyMemory') sys_CopyMemory: 1300 f83e ble .sysCm#20 5530 ble('.sysCm#20') #18 goto burst6 1301 a006 suba $06 5531 suba(6) #19 1302 f440 bge .sysCm#22 5532 bge('.sysCm#22') #20 goto burst6 1303 1527 ld [$27],y 5533 ld([sysArgs+3],Y) #21 1304 8003 adda $03 5534 adda(3) #22 1305 f41d bge .sysCm#25 5535 bge('.sysCm#25') #23 goto burst3 1306 1126 ld [$26],x 5536 ld([sysArgs+2],X) #24 5537 1307 8002 adda $02 5538 adda(2) #25 single 1308 c218 st [$18] 5539 st([vAC]) #26 1309 0d00 ld [y,x] 5540 ld([Y,X]) #27 130a 1525 ld [$25],y 5541 ld([sysArgs+1],Y) #28 130b 1124 ld [$24],x 5542 ld([sysArgs+0],X) #29 130c ce00 st [y,x] 5543 st([Y,X]) #30 130d 0124 ld [$24] 5544 ld([sysArgs+0]) #31 130e 8001 adda $01 5545 adda(1) #32 130f c224 st [$24] 5546 st([sysArgs+0]) #33 1310 0126 ld [$26] 5547 ld([sysArgs+2]) #34 1311 8001 adda $01 5548 adda(1) #35 1312 c226 st [$26] 5549 st([sysArgs+2]) #36 1313 0118 ld [$18] 5550 ld([vAC]) #37 1314 f017 beq $1317 5551 beq(pc()+3) #38 1315 fc18 bra $1318 5552 bra(pc()+3) #39 1316 00fe ld $fe 5553 ld(-2) #40 1317 0000 ld $00 5554 ld(0) #40! 1318 8116 adda [$16] 5555 adda([vPC]) #41 1319 c216 st [$16] 5556 st([vPC]) #42 131a 1403 ld $03,y 5557 ld(hi('REENTER'),Y) #43 131b e0cb jmp y,$cb 5558 jmp(Y,'REENTER') #44 131c 00e8 ld $e8 5559 ld(-48/2) #45 5560 5561 label('.sysCm#25') .sysCm#25: 131d c218 st [$18] 5562 st([vAC]) #25 burst3 5563 for i in range(3): 131e 0d00 ld [y,x] 5564 ld([Y,X]) #26+3*i 131f c228 st [$28] 5565 st([sysArgs+4+i]) #27+3*i 1320 de00 st [y,x++] 5566 st([Y,Xpp]) if i<2 else None #28+3*i 1321 0d00 ld [y,x] 1322 c229 st [$29] 1323 de00 st [y,x++] 1324 0d00 ld [y,x] 1325 c22a st [$2a] 1326 1525 ld [$25],y 5567 ld([sysArgs+1],Y) #34 1327 1124 ld [$24],x 5568 ld([sysArgs+0],X) #35 5569 for i in range(3): 1328 0128 ld [$28] 5570 ld([sysArgs+4+i]) #36+2*i 1329 de00 st [y,x++] 5571 st([Y,Xpp]) #37+2*i 132a 0129 ld [$29] 132b de00 st [y,x++] 132c 012a ld [$2a] 132d de00 st [y,x++] 132e 0124 ld [$24] 5572 ld([sysArgs+0]) #42 132f 8003 adda $03 5573 adda(3) #43 1330 c224 st [$24] 5574 st([sysArgs+0]) #44 1331 0126 ld [$26] 5575 ld([sysArgs+2]) #45 1332 8003 adda $03 5576 adda(3) #46 1333 c226 st [$26] 5577 st([sysArgs+2]) #47 1334 0118 ld [$18] 5578 ld([vAC]) #48 1335 f038 beq $1338 5579 beq(pc()+3) #49 1336 fc39 bra $1339 5580 bra(pc()+3) #50 1337 00fe ld $fe 5581 ld(-2) #51 1338 0000 ld $00 5582 ld(0) #51! 1339 8116 adda [$16] 5583 adda([vPC]) #52 133a c216 st [$16] 5584 st([vPC]) #53 133b 1403 ld $03,y 5585 ld(hi('NEXTY'),Y) #54 133c e000 jmp y,$00 5586 jmp(Y,'NEXTY') #55 133d 00e3 ld $e3 5587 ld(-58/2) #56 5588 5589 label('.sysCm#20') .sysCm#20: 133e 0200 nop 5590 nop() #20 burst6 133f 1527 ld [$27],y 5591 ld([sysArgs+3],Y) #21 5592 label('.sysCm#22') .sysCm#22: 1340 c218 st [$18] 5593 st([vAC]) #22 burst6 1341 1126 ld [$26],x 5594 ld([sysArgs+2],X) #23 5595 for i in range(6): 1342 0d00 ld [y,x] 5596 ld([Y,X]) #24+i*3 1343 c21a st [$1a] 5597 st([vLR+i if i<2 else sysArgs+2+i]) #25+i*3 1344 de00 st [y,x++] 5598 st([Y,Xpp]) if i<5 else None #26+i*3 if i<5 1345 0d00 ld [y,x] 1346 c21b st [$1b] 1347 de00 st [y,x++] 1348 0d00 ld [y,x] 1349 c228 st [$28] 134a de00 st [y,x++] 134b 0d00 ld [y,x] 134c c229 st [$29] 134d de00 st [y,x++] 134e 0d00 ld [y,x] 134f c22a st [$2a] 1350 de00 st [y,x++] 1351 0d00 ld [y,x] 1352 c22b st [$2b] 1353 1525 ld [$25],y 5599 ld([sysArgs+1],Y) #41 1354 1124 ld [$24],x 5600 ld([sysArgs+0],X) #42 5601 for i in range(6): 1355 011a ld [$1a] 5602 ld([vLR+i if i<2 else sysArgs+2+i]) #43+i*2 1356 de00 st [y,x++] 5603 st([Y,Xpp]) #44+i*2 1357 011b ld [$1b] 1358 de00 st [y,x++] 1359 0128 ld [$28] 135a de00 st [y,x++] 135b 0129 ld [$29] 135c de00 st [y,x++] 135d 012a ld [$2a] 135e de00 st [y,x++] 135f 012b ld [$2b] 1360 de00 st [y,x++] 1361 0124 ld [$24] 5604 ld([sysArgs+0]) #55 1362 8006 adda $06 5605 adda(6) #56 1363 c224 st [$24] 5606 st([sysArgs+0]) #57 1364 0126 ld [$26] 5607 ld([sysArgs+2]) #58 1365 8006 adda $06 5608 adda(6) #59 1366 c226 st [$26] 5609 st([sysArgs+2]) #60 5610 1367 0118 ld [$18] 5611 ld([vAC]) #61 1368 ec6c bne .sysCm#64 5612 bne('.sysCm#64') #62 1369 1403 ld $03,y 5613 ld(hi('REENTER'),Y) #63 136a e0cb jmp y,$cb 5614 jmp(Y,'REENTER') #64 136b 00de ld $de 5615 ld(-68/2) #65 5616 5617 label('.sysCm#64') .sysCm#64: 136c 00e6 ld $e6 5618 ld(-52/2) #64 136d 8115 adda [$15] 5619 adda([vTicks]) #13 = 65 - 52 136e c215 st [$15] 5620 st([vTicks]) #14 136f 80e7 adda $e7 5621 adda(min(0,maxTicks-(26+52)/2)) #15 could probably be min(0,maxTicks-(26+52)/2) 5622 bge('sys_CopyMemory') #16 1370 f400 bge sys_CopyMemory 1371 0118 ld [$18] 5623 ld([vAC]) #17 1372 00fe ld $fe 5624 ld(-2) #18 notime 1373 8116 adda [$16] 5625 adda([vPC]) #19 1374 c216 st [$16] 5626 st([vPC]) #20 1375 1403 ld $03,y 5627 ld(hi('REENTER'),Y) #21 1376 e0cb jmp y,$cb 5628 jmp(Y,'REENTER') #22 1377 00f3 ld $f3 5629 ld(-26/2) #23 5630 5631 #----------------------------------------------------------------------- 5632 # SYS_CopyMemoryExt_v6_100 implementation 5633 5634 label('sys_CopyMemoryExt') 5635 sys_CopyMemoryExt: 1378 8200 adda ac 5636 adda(AC) #18 1379 8200 adda ac 5637 adda(AC) #19 137a 403c ora $3c 5638 ora(0x3c) #20 137b c21d st [$1d] 5639 st([vTmp]) #21 [vTmp] = src ctrl value 137c 0119 ld [$19] 5640 ld([vAC+1]) #22 137d 20fc anda $fc 5641 anda(0xfc) #23 137e 403c ora $3c 5642 ora(0x3c) #24 137f c21a st [$1a] 5643 st([vLR]) #25 [vLR] = dest ctrl value 5644 5645 label('.sysCme#26') .sysCme#26: 1380 0118 ld [$18] 5646 ld([vAC]) #26 1381 f8a4 ble .sysCme#29 5647 ble('.sysCme#29') #27 goto burst5 1382 a005 suba $05 5648 suba(5) #28 1383 f4a6 bge .sysCme#31 5649 bge('.sysCme#31') #29 goto burst5 1384 1527 ld [$27],y 5650 ld([sysArgs+3],Y) #30 1385 8004 adda $04 5651 adda(4) #31 5652 1386 c218 st [$18] 5653 st([vAC]) #32 single 1387 111d ld [$1d],x 5654 ld([vTmp],X) #33 1388 c500 ctrl x 5655 ctrl(X) #34 1389 1126 ld [$26],x 5656 ld([sysArgs+2],X) #35 138a 0d00 ld [y,x] 5657 ld([Y,X]) #36 138b 111a ld [$1a],x 5658 ld([vLR],X) #37 138c c500 ctrl x 5659 ctrl(X) #38 138d 1525 ld [$25],y 5660 ld([sysArgs+1],Y) #39 138e 1124 ld [$24],x 5661 ld([sysArgs+0],X) #40 138f ce00 st [y,x] 5662 st([Y,X]) #41 1390 1401 ld $01,y 5663 ld(hi(ctrlBits), Y) #42 1391 09f8 ld [y,$f8] 5664 ld([Y,ctrlBits]) #43 1392 1200 ld ac,x 5665 ld(AC,X) #44 1393 c500 ctrl x 5666 ctrl(X) #45 1394 0124 ld [$24] 5667 ld([sysArgs+0]) #46 1395 8001 adda $01 5668 adda(1) #47 1396 c224 st [$24] 5669 st([sysArgs+0]) #48 1397 0126 ld [$26] 5670 ld([sysArgs+2]) #49 1398 8001 adda $01 5671 adda(1) #50 1399 c226 st [$26] 5672 st([sysArgs+2]) #51 139a 0118 ld [$18] 5673 ld([vAC]) #52 done? 139b f09e beq $139e 5674 beq(pc()+3) #53 139c fc9f bra $139f 5675 bra(pc()+3) #54 139d 00fe ld $fe 5676 ld(-2) #55 restart 139e 0000 ld $00 5677 ld(0) #55! finished 139f 8116 adda [$16] 5678 adda([vPC]) #56 13a0 c216 st [$16] 5679 st([vPC]) #57 13a1 1403 ld $03,y 5680 ld(hi('NEXTY'),Y) #58 13a2 e000 jmp y,$00 5681 jmp(Y,'NEXTY') #59 13a3 00e1 ld $e1 5682 ld(-62/2) #60 5683 5684 label('.sysCme#29') .sysCme#29: 13a4 0200 nop 5685 nop() #29 burst5 13a5 1527 ld [$27],y 5686 ld([sysArgs+3],Y) #30 5687 label('.sysCme#31') .sysCme#31: 13a6 c218 st [$18] 5688 st([vAC]) #31 burst5 13a7 111d ld [$1d],x 5689 ld([vTmp],X) #32 13a8 c500 ctrl x 5690 ctrl(X) #33 13a9 1126 ld [$26],x 5691 ld([sysArgs+2],X) #34 5692 for i in range(5): 13aa 0d00 ld [y,x] 5693 ld([Y,X]) #35+i*3 13ab c21b st [$1b] 5694 st([vLR+1 if i<1 else sysArgs+3+i]) #36+i*3 13ac de00 st [y,x++] 5695 st([Y,Xpp]) if i<4 else None #37+i*3 if i<4 13ad 0d00 ld [y,x] 13ae c228 st [$28] 13af de00 st [y,x++] 13b0 0d00 ld [y,x] 13b1 c229 st [$29] 13b2 de00 st [y,x++] 13b3 0d00 ld [y,x] 13b4 c22a st [$2a] 13b5 de00 st [y,x++] 13b6 0d00 ld [y,x] 13b7 c22b st [$2b] 13b8 111a ld [$1a],x 5696 ld([vLR],X) #49 13b9 c500 ctrl x 5697 ctrl(X) #50 13ba 1525 ld [$25],y 5698 ld([sysArgs+1],Y) #51 13bb 1124 ld [$24],x 5699 ld([sysArgs+0],X) #52 5700 for i in range(5): 13bc 011b ld [$1b] 5701 ld([vLR+1 if i<1 else sysArgs+3+i]) #53+i*2 13bd de00 st [y,x++] 5702 st([Y,Xpp]) #54+i*2 13be 0128 ld [$28] 13bf de00 st [y,x++] 13c0 0129 ld [$29] 13c1 de00 st [y,x++] 13c2 012a ld [$2a] 13c3 de00 st [y,x++] 13c4 012b ld [$2b] 13c5 de00 st [y,x++] 13c6 0124 ld [$24] 5703 ld([sysArgs+0]) #63 13c7 8005 adda $05 5704 adda(5) #64 13c8 c224 st [$24] 5705 st([sysArgs+0]) #65 13c9 0126 ld [$26] 5706 ld([sysArgs+2]) #66 13ca 8005 adda $05 5707 adda(5) #67 13cb c226 st [$26] 5708 st([sysArgs+2]) #68 5709 13cc 0118 ld [$18] 5710 ld([vAC]) #69 13cd ecd6 bne .sysCme#72 5711 bne('.sysCme#72') #70 13ce 1401 ld $01,y 5712 ld(hi(ctrlBits), Y) #71 we're done! 13cf 09f8 ld [y,$f8] 5713 ld([Y,ctrlBits]) #72 13d0 30fc anda $fc,x 5714 anda(0xfc,X) #73 13d1 c500 ctrl x 5715 ctrl(X) #74 13d2 011d ld [$1d] 5716 ld([vTmp]) #75 always read after ctrl 13d3 1403 ld $03,y 5717 ld(hi('NEXTY'),Y) #76 13d4 e000 jmp y,$00 5718 jmp(Y,'NEXTY') #77 13d5 00d8 ld $d8 5719 ld(-80/2) #78 5720 5721 label('.sysCme#72') .sysCme#72: 13d6 00e6 ld $e6 5722 ld(-52/2) #72 13d7 8115 adda [$15] 5723 adda([vTicks]) #21 = 72 - 52 13d8 c215 st [$15] 5724 st([vTicks]) #22 13d9 80e0 adda $e0 5725 adda(min(0,maxTicks-(40+52)/2)) #23 13da f480 bge .sysCme#26 5726 bge('.sysCme#26') #24 enough time for another loop 13db 00fe ld $fe 5727 ld(-2) #25 13dc 8116 adda [$16] 5728 adda([vPC]) #26 restart 13dd c216 st [$16] 5729 st([vPC]) #27 13de 1401 ld $01,y 5730 ld(hi(ctrlBits), Y) #28 13df 09f8 ld [y,$f8] 5731 ld([Y,ctrlBits]) #29 13e0 30fc anda $fc,x 5732 anda(0xfc,X) #30 13e1 c500 ctrl x 5733 ctrl(X) #31 13e2 011d ld [$1d] 5734 ld([vTmp]) #32 always read after ctrl 13e3 1403 ld $03,y 5735 ld(hi('REENTER'),Y) #33 13e4 e0cb jmp y,$cb 5736 jmp(Y,'REENTER') #34 13e5 00ed ld $ed 5737 ld(-38/2) #35 max: 38 + 52 = 90 cycles 5738 13e6 0200 nop 5739 align(0x100, size=0x100) 13e7 0200 nop 13e8 0200 nop * 26 times 5740 5741 #----------------------------------------------------------------------- 5742 # SYS_ScanMemory_v6_50 implementation 5743 5744 label('sys_ScanMemory') sys_ScanMemory: 1400 1124 ld [$24],x 5745 ld([sysArgs+0],X) #18 1401 0d00 ld [y,x] 5746 ld([Y,X]) #19 5747 label('.sysSme#20') .sysSme#20: 1402 6126 xora [$26] 5748 xora([sysArgs+2]) #20 1403 f01e beq .sysSme#23 5749 beq('.sysSme#23') #21 1404 0d00 ld [y,x] 5750 ld([Y,X]) #22 1405 6127 xora [$27] 5751 xora([sysArgs+3]) #23 1406 f021 beq .sysSme#26 5752 beq('.sysSme#26') #24 1407 0124 ld [$24] 5753 ld([sysArgs+0]) #25 1408 8001 adda $01 5754 adda(1); #26 1409 d224 st [$24],x 5755 st([sysArgs+0],X) #27 140a 0118 ld [$18] 5756 ld([vAC]) #28 140b a001 suba $01 5757 suba(1) #29 140c f01a beq .sysSme#32 5758 beq('.sysSme#32') #30 return zero 140d c218 st [$18] 5759 st([vAC]) #31 140e 00f7 ld $f7 5760 ld(-18/2) #14 = 32 - 18 140f 8115 adda [$15] 5761 adda([vTicks]) #15 1410 c215 st [$15] 5762 st([vTicks]) #16 1411 80f7 adda $f7 5763 adda(min(0,maxTicks -(28+18)/2)) #17 1412 f402 bge .sysSme#20 5764 bge('.sysSme#20') #18 1413 0d00 ld [y,x] 5765 ld([Y,X]) #19 1414 00fe ld $fe 5766 ld(-2) #20 restart 1415 8116 adda [$16] 5767 adda([vPC]) #21 1416 c216 st [$16] 5768 st([vPC]) #22 1417 1403 ld $03,y 5769 ld(hi('REENTER'),Y) #23 1418 e0cb jmp y,$cb 5770 jmp(Y,'REENTER') #24 1419 00f2 ld $f2 5771 ld(-28/2) #25 5772 5773 label('.sysSme#32') .sysSme#32: 141a c219 st [$19] 5774 st([vAC+1]) #32 return zero 141b 1403 ld $03,y 5775 ld(hi('REENTER'),Y) #33 141c e0cb jmp y,$cb 5776 jmp(Y,'REENTER') #34 141d 00ed ld $ed 5777 ld(-38/2) #35 5778 5779 label('.sysSme#23') .sysSme#23: 141e 0200 nop 5780 nop() #23 success 141f 0200 nop 5781 nop() #24 1420 0124 ld [$24] 5782 ld([sysArgs+0]) #25 5783 label('.sysSme#26') .sysSme#26: 1421 c218 st [$18] 5784 st([vAC]) #26 success 1422 0125 ld [$25] 5785 ld([sysArgs+1]) #27 1423 c219 st [$19] 5786 st([vAC+1]) #28 1424 1403 ld $03,y 5787 ld(hi('REENTER'),Y) #29 1425 e0cb jmp y,$cb 5788 jmp(Y,'REENTER') #30 1426 00ef ld $ef 5789 ld(-34/2) #31 5790 5791 5792 #----------------------------------------------------------------------- 5793 # SYS_ScanMemoryExt_v6_50 implementation 5794 5795 label('sys_ScanMemoryExt') sys_ScanMemoryExt: 1427 503c ora $3c,x 5796 ora(0x3c,X) #18 1428 c500 ctrl x 5797 ctrl(X) #19 1429 1525 ld [$25],y 5798 ld([sysArgs+1],Y) #20 142a 1124 ld [$24],x 5799 ld([sysArgs+0],X) #21 142b 0d00 ld [y,x] 5800 ld([Y,X]) #22 142c 0200 nop 5801 nop() #23 5802 label('.sysSmx#24') .sysSmx#24: 142d 6126 xora [$26] 5803 xora([sysArgs+2]) #24 142e f04a beq .sysSmx#27 5804 beq('.sysSmx#27') #25 142f 0d00 ld [y,x] 5805 ld([Y,X]) #26 1430 6127 xora [$27] 5806 xora([sysArgs+3]) #27 1431 f04d beq .sysSmx#30 5807 beq('.sysSmx#30') #28 1432 0124 ld [$24] 5808 ld([sysArgs+0]) #29 1433 8001 adda $01 5809 adda(1); #30 1434 d224 st [$24],x 5810 st([sysArgs+0],X) #31 1435 0118 ld [$18] 5811 ld([vAC]) #32 1436 a001 suba $01 5812 suba(1) #33 1437 f053 beq .sysSmx#36 5813 beq('.sysSmx#36') #34 return zero 1438 c218 st [$18] 5814 st([vAC]) #35 1439 00f7 ld $f7 5815 ld(-18/2) #18 = 36 - 18 143a 8115 adda [$15] 5816 adda([vTicks]) #19 143b c215 st [$15] 5817 st([vTicks]) #20 143c 80f6 adda $f6 5818 adda(min(0,maxTicks -(30+18)/2)) #21 143d f42d bge .sysSmx#24 5819 bge('.sysSmx#24') #22 143e 0d00 ld [y,x] 5820 ld([Y,X]) #23 143f 0116 ld [$16] 5821 ld([vPC]) #24 1440 a002 suba $02 5822 suba(2) #25 restart 1441 c216 st [$16] 5823 st([vPC]) #26 1442 1401 ld $01,y 5824 ld(hi(ctrlBits),Y) #27 restore and return 1443 09f8 ld [y,$f8] 5825 ld([Y,ctrlBits]) #28 1444 30fc anda $fc,x 5826 anda(0xfc,X) #29 1445 c500 ctrl x 5827 ctrl(X) #30 1446 011d ld [$1d] 5828 ld([vTmp]) #31 1447 1403 ld $03,y 5829 ld(hi('NEXTY'),Y) #32 1448 e000 jmp y,$00 5830 jmp(Y,'NEXTY') #33 1449 00ee ld $ee 5831 ld(-36/2) #34 5832 5833 label('.sysSmx#27') .sysSmx#27: 144a 0200 nop 5834 nop() #27 success 144b 0200 nop 5835 nop() #28 144c 0124 ld [$24] 5836 ld([sysArgs+0]) #29 5837 label('.sysSmx#30') .sysSmx#30: 144d c218 st [$18] 5838 st([vAC]) #30 success 144e 0125 ld [$25] 5839 ld([sysArgs+1]) #31 144f 0200 nop 5840 nop() #32 1450 0200 nop 5841 nop() #33 1451 0200 nop 5842 nop() #34 1452 0200 nop 5843 nop() #35 5844 label('.sysSmx#36') .sysSmx#36: 1453 c219 st [$19] 5845 st([vAC+1]) #36 1454 1401 ld $01,y 5846 ld(hi(ctrlBits),Y) #37 restore and return 1455 09f8 ld [y,$f8] 5847 ld([Y,ctrlBits]) #38 1456 30fc anda $fc,x 5848 anda(0xfc,X) #39 1457 c500 ctrl x 5849 ctrl(X) #40 1458 011d ld [$1d] 5850 ld([vTmp]) #41 1459 1403 ld $03,y 5851 ld(hi('NEXTY'),Y) #42 145a e000 jmp y,$00 5852 jmp(Y,'NEXTY') #43 145b 00e9 ld $e9 5853 ld(-46/2) #44 5854 5855 5856 #----------------------------------------------------------------------- 5857 # sys_Multiply_s16, sum:s16 = x:s16 * y:s16 5858 # x:args0:1 y:args2:3 sum:args4:5 mask:args6:7 5859 # 5860 # Written by at67 for early ROMvX0. 5861 5862 label('sys_Multiply_s16') sys_Multiply_s16: 145c 2126 anda [$26] 5863 anda([sysArgs+2]) #18, 145d c218 st [$18] 5864 st([vAC]) #19, AC.lo = mask.lo AND y.lo 145e 012b ld [$2b] 5865 ld([sysArgs+7]) #20, load mask.hio 145f 2127 anda [$27] 5866 anda([sysArgs+3]) #21, 1460 c219 st [$19] 5867 st([vAC+1]) #22, AC.hi = mask.hi AND y.hi 1461 4118 ora [$18] 5868 ora([vAC]) #23, 5869 beq('.sys_ms16_26') #24, AC = 0 then skip 1462 f06a beq .sys_ms16_26 1463 0128 ld [$28] 5870 ld([sysArgs+4]) #25, load sum.lo 1464 8124 adda [$24] 5871 adda([sysArgs+0]) #26, load x.lo 1465 c228 st [$28] 5872 st([sysArgs+4]) #27, sum.lo = sum.lo + x.lo 5873 blt('.sys_ms16_30') #28, check for carry 1466 e86c blt .sys_ms16_30 1467 a124 suba [$24] 5874 suba([sysArgs+0]) #29, get original sum.lo back 5875 bra('.sys_ms16_32') #30, 1468 fc6e bra .sys_ms16_32 1469 4124 ora [$24] 5876 ora([sysArgs+0]) #31, carry in bit 7 5877 5878 label('.sys_ms16_26') 5879 bra('.sys_ms16_28') #26, .sys_ms16_26: 146a fc74 bra .sys_ms16_28 146b 00e4 ld $e4 5880 ld(-56/2) #27, no accumulate sys ticks 5881 5882 label('.sys_ms16_30') .sys_ms16_30: 146c 2124 anda [$24] 5883 anda([sysArgs+0]) #30, carry in bit 7 146d 0200 nop 5884 nop() #31, 5885 5886 label('.sys_ms16_32') .sys_ms16_32: 146e 3080 anda $80,x 5887 anda(0x80,X) #32, 146f 0500 ld [x] 5888 ld([X]) #33, move carry to bit 0 1470 8129 adda [$29] 5889 adda([sysArgs+5]) #34, 1471 8125 adda [$25] 5890 adda([sysArgs+1]) #35, 1472 c229 st [$29] 5891 st([sysArgs+5]) #36, sum.hi = sum.hi + x.hi 1473 00df ld $df 5892 ld(-66/2) #37, accumulate sys ticks 5893 5894 label('.sys_ms16_28') .sys_ms16_28: 1474 c21d st [$1d] 5895 st([vTmp]) #28,#38, 1475 0124 ld [$24] 5896 ld([sysArgs+0]) #29,#39, AC = x.lo 1476 3080 anda $80,x 5897 anda(0x80,X) #30,#40, X = AC & 0x80 1477 8124 adda [$24] 5898 adda([sysArgs+0]) #31,#41, AC = x.lo <<1 1478 c224 st [$24] 5899 st([sysArgs+0]) #32,#42, x.lo = AC 1479 0500 ld [x] 5900 ld([X]) #33,#43, AC = X >>7 147a 8125 adda [$25] 5901 adda([sysArgs+1]) #34,#44, 147b 8125 adda [$25] 5902 adda([sysArgs+1]) #35,#45, 147c c225 st [$25] 5903 st([sysArgs+1]) #36,#46, x.hi = x.hi <<1 + AC 147d 012a ld [$2a] 5904 ld([sysArgs+6]) #37,#47, AC = mask.lo 147e 3080 anda $80,x 5905 anda(0x80,X) #38,#48, X = AC & 0x80 147f 812a adda [$2a] 5906 adda([sysArgs+6]) #39,#49, AC = mask.lo <<1 1480 c22a st [$2a] 5907 st([sysArgs+6]) #40,#50, mask.lo = AC 1481 0500 ld [x] 5908 ld([X]) #41,#51, AC = X >>7 1482 812b adda [$2b] 5909 adda([sysArgs+7]) #42,#52, 1483 812b adda [$2b] 5910 adda([sysArgs+7]) #43,#53, 1484 c22b st [$2b] 5911 st([sysArgs+7]) #44,#54, mask.hi = mask.hi <<1 + AC 1485 412a ora [$2a] 5912 ora([sysArgs+6]) #45,#55, 5913 beq('.sys_ms16_48') #46,#56, if mask = 0 1486 f08e beq .sys_ms16_48 1487 0128 ld [$28] 5914 ld([sysArgs+4]) #47,#57 1488 0116 ld [$16] 5915 ld([vPC]) #48,#58, 1489 a002 suba $02 5916 suba(2) #49,#59, 148a c216 st [$16] 5917 st([vPC]) #50,#60, restart SYS function 148b 1403 ld $03,y 5918 ld(hi('REENTER'),Y) #51,#61, 148c e0cb jmp y,$cb 5919 jmp(Y,'REENTER') #52,#62, 148d 011d ld [$1d] 5920 ld([vTmp]) #53,#63, 5921 5922 label('.sys_ms16_48') .sys_ms16_48: 148e c218 st [$18] 5923 st([vAC]) #48,#58, 148f 0129 ld [$29] 5924 ld([sysArgs+5]) #49,#59, 1490 c219 st [$19] 5925 st([vAC+1]) #50,#60, 1491 1403 ld $03,y 5926 ld(hi('REENTER'),Y) #51,#61, 1492 e0cb jmp y,$cb 5927 jmp(Y,'REENTER') #52,#62, 1493 011d ld [$1d] 5928 ld([vTmp]) #53,#63, 5929 5930 5931 #----------------------------------------------------------------------- 5932 # sys_Divide_s16, x:s16 = x:s16 / y:s16, rem:s16 = x:s16 % y:s16 5933 # x:args0:1 y:args2:3 rem:args4:5 mask:args6:7 5934 # 5935 # Written by at67 for early ROMvX0. 5936 5937 5938 label('sys_Divide_s16') sys_Divide_s16: 1494 3080 anda $80,x 5939 anda(0x80,X) #18, X = AC & 0x80 1495 8128 adda [$28] 5940 adda([sysArgs+4]) #19, AC = rem.lo <<1 1496 c228 st [$28] 5941 st([sysArgs+4]) #20, rem.lo = AC 1497 0500 ld [x] 5942 ld([X]) #21, AC = X >>7 1498 8129 adda [$29] 5943 adda([sysArgs+5]) #22, 1499 8129 adda [$29] 5944 adda([sysArgs+5]) #23, 149a c229 st [$29] 5945 st([sysArgs+5]) #24, rem.hi = rem.hi <<1 + AC 149b 0125 ld [$25] 5946 ld([sysArgs+1]) #25, 149c 2080 anda $80 5947 anda(0x80) #26, sign of x 5948 beq('.sys_ds16_29') #27, if x >= 0 149d f0a2 beq .sys_ds16_29 149e 0128 ld [$28] 5949 ld([sysArgs+4]) #28, 149f 8001 adda $01 5950 adda(1) #29, 5951 bra('.sys_ds16_32') #30, 14a0 fca5 bra .sys_ds16_32 14a1 c228 st [$28] 5952 st([sysArgs+4]) #31, rem.lo++ 5953 5954 label('.sys_ds16_29') .sys_ds16_29: 14a2 0200 nop 5955 nop() #29 14a3 0200 nop 5956 nop() #30 14a4 0200 nop 5957 nop() #31 5958 label('.sys_ds16_32') .sys_ds16_32: 14a5 0124 ld [$24] 5959 ld([sysArgs+0]) #32, AC = x.lo 14a6 3080 anda $80,x 5960 anda(0x80,X) #33, X = AC & 0x80 14a7 8124 adda [$24] 5961 adda([sysArgs+0]) #34, AC = x.lo <<1 14a8 c224 st [$24] 5962 st([sysArgs+0]) #35, x.lo = AC 14a9 0500 ld [x] 5963 ld([X]) #36, AC = X >>7 14aa 8125 adda [$25] 5964 adda([sysArgs+1]) #37, 14ab 8125 adda [$25] 5965 adda([sysArgs+1]) #38, 14ac c225 st [$25] 5966 st([sysArgs+1]) #39, x.hi = x.hi <<1 + AC 14ad 0128 ld [$28] 5967 ld([sysArgs+4]) #40, load rem.lo 5968 blt('.sys_ds16_43') #41, check for borrow 14ae e8b3 blt .sys_ds16_43 14af a126 suba [$26] 5969 suba([sysArgs+2]) #42, 14b0 c218 st [$18] 5970 st([vAC]) #43, vAC.lo = rem.lo - y.lo 5971 bra('.sys_ds16_46') #44, 14b1 fcb6 bra .sys_ds16_46 14b2 4126 ora [$26] 5972 ora([sysArgs+2]) #45, 5973 5974 label('.sys_ds16_43') .sys_ds16_43: 14b3 c218 st [$18] 5975 st([vAC]) #43, 14b4 2126 anda [$26] 5976 anda([sysArgs+2]) #44, 14b5 0200 nop 5977 nop() #45, 5978 label('.sys_ds16_46') .sys_ds16_46: 14b6 3080 anda $80,x 5979 anda(0x80,X) #46, move borrow to bit 0 14b7 0129 ld [$29] 5980 ld([sysArgs+5]) #47, load rem.hi 14b8 a500 suba [x] 5981 suba([X]) #48, 14b9 a127 suba [$27] 5982 suba([sysArgs+3]) #49, 14ba c219 st [$19] 5983 st([vAC+1]) #50, vAC.hi = rem.hi - y.hi 5984 blt('.sys_ds16_53') #51, 14bb e8c5 blt .sys_ds16_53 14bc 00dc ld $dc 5985 ld(-72/2) #52 14bd 0118 ld [$18] 5986 ld([vAC]) #53, 14be c228 st [$28] 5987 st([sysArgs+4]) #54, 14bf 0119 ld [$19] 5988 ld([vAC+1]) #55, 14c0 c229 st [$29] 5989 st([sysArgs+5]) #56, rem = vAC 14c1 0124 ld [$24] 5990 ld([sysArgs+0]) #57, 14c2 8001 adda $01 5991 adda(1) #58, 14c3 c224 st [$24] 5992 st([sysArgs+0]) #59, x.lo++ 14c4 00d8 ld $d8 5993 ld(-80/2) #60, 5994 5995 label('.sys_ds16_53') .sys_ds16_53: 14c5 c21d st [$1d] 5996 st([vTmp]) #53, #61, 14c6 012a ld [$2a] 5997 ld([sysArgs+6]) #54, #62, AC = mask.lo 14c7 3080 anda $80,x 5998 anda(0x80,X) #55, #63, X = AC & 0x80 14c8 812a adda [$2a] 5999 adda([sysArgs+6]) #56, #64, AC = mask.lo <<1 14c9 c22a st [$2a] 6000 st([sysArgs+6]) #57, #65, mask.lo = AC 14ca 0500 ld [x] 6001 ld([X]) #58, #66, AC = X >>7 14cb 812b adda [$2b] 6002 adda([sysArgs+7]) #59, #67, 14cc 812b adda [$2b] 6003 adda([sysArgs+7]) #60, #68, 14cd c22b st [$2b] 6004 st([sysArgs+7]) #61, #69, mask.hi = mask.hi <<1 + AC 14ce 412a ora [$2a] 6005 ora([sysArgs+6]) #62, #70, 6006 bne('.sys_ds16_65') #63, #71, 14cf ecd6 bne .sys_ds16_65 14d0 0116 ld [$16] 6007 ld([vPC]) #64, #72, 14d1 0200 nop 6008 nop() #65, #73, 14d2 0200 nop 6009 nop() #66, #74, 14d3 1403 ld $03,y 6010 ld(hi('REENTER'),Y) #67, #75, 14d4 e0cb jmp y,$cb 6011 jmp(Y,'REENTER') #68, #76, 14d5 011d ld [$1d] 6012 ld([vTmp]) #69, #77, 6013 label('.sys_ds16_65') .sys_ds16_65: 14d6 a002 suba $02 6014 suba(2) #65, #73, 14d7 c216 st [$16] 6015 st([vPC]) #66, #74, restart SYS function 14d8 1403 ld $03,y 6016 ld(hi('REENTER'),Y) #67, #75, 14d9 e0cb jmp y,$cb 6017 jmp(Y,'REENTER') #68, #76, 14da 011d ld [$1d] 6018 ld([vTmp]) #69, #77, 6019 6020 6021 #----------------------------------------------------------------------- 6022 # 6023 # End of core 6024 # 6025 #----------------------------------------------------------------------- 6026 14db 0200 nop 6027 align(0x100) 14dc 0200 nop 14dd 0200 nop * 36 times 14ff 0200 nop 6027 align(0x100) 6028 6029 disableListing() ;+-----------------------------------+ ;| Apps/Pictures/packedPictures.rgb | ;+-----------------------------------+ packedPictures: 1500 00ff ld $ff 1501 00ff ld $ff 1502 00ff ld $ff * 15 times 150f 00fa ld $fa 1510 00ff ld $ff 1511 00ff ld $ff 1512 00ff ld $ff * 5 times 1515 00fe ld $fe 1516 00ff ld $ff 1517 00ff ld $ff 1518 00ff ld $ff * 5 times 151b 00ba ld $ba 151c 00be ld $be 151d 00ff ld $ff 151e 00ff ld $ff 151f 00fe ld $fe 1520 00eb ld $eb 1521 00ff ld $ff 1522 00fe ld $fe 1523 00fb ld $fb 1524 00fb ld $fb 1525 00bf ld $bf 1526 00ff ld $ff 1527 00fa ld $fa 1528 00af ld $af 1529 00ff ld $ff 152a 00ff ld $ff 152b 00ae ld $ae 152c 00ef ld $ef 152d 00ba ld $ba 152e 00fe ld $fe 152f 00ff ld $ff 1530 00ff ld $ff 1531 00ff ld $ff * 12 times 153b 00eb ld $eb 153c 00bf ld $bf 153d 00ee ld $ee 153e 00ef ld $ef 153f 00fe ld $fe 1540 00ae ld $ae 1541 00ff ld $ff 1542 00fe ld $fe 1543 00ee ld $ee 1544 00af ld $af 1545 00ff ld $ff 1546 00ff ld $ff 1547 00ff ld $ff 1548 00ff ld $ff 1549 00af ld $af 154a 00ff ld $ff 154b 00ff ld $ff 154c 00ef ld $ef 154d 00ff ld $ff 154e 00bf ld $bf 154f 00ff ld $ff 1550 00ff ld $ff 1551 00ff ld $ff * 5 times 1554 00bb ld $bb 1555 00be ld $be 1556 00eb ld $eb 1557 00ff ld $ff 1558 00fa ld $fa 1559 00ff ld $ff 155a 00bf ld $bf 155b 006f ld $6f 155c 00ea ld $ea 155d 00bb ld $bb 155e 005a ld $5a 155f 00a9 ld $a9 1560 00ff ld $ff 1561 00ff ld $ff 1562 00ff ld $ff * 12 times 156c 00ef ld $ef 156d 00ff ld $ff 156e 00ff ld $ff 156f 00ff ld $ff * 6 times 1573 00af ld $af 1574 00fe ld $fe 1575 00ff ld $ff 1576 00ff ld $ff 1577 00ff ld $ff 1578 00bf ld $bf 1579 00ff ld $ff 157a 00ff ld $ff 157b 00bb ld $bb 157c 00fa ld $fa 157d 00ff ld $ff 157e 00ff ld $ff 157f 00bf ld $bf 1580 00fa ld $fa 1581 00ff ld $ff 1582 00ff ld $ff 1583 00eb ld $eb 1584 00bb ld $bb 1585 00be ld $be 1586 00ff ld $ff 1587 00bf ld $bf 1588 00ff ld $ff 1589 00ff ld $ff 158a 00ff ld $ff 158b 00be ld $be 158c 00eb ld $eb 158d 00fb ld $fb 158e 00af ld $af 158f 009a ld $9a 1590 00ff ld $ff 1591 00ff ld $ff 1592 00ff ld $ff * 7 times 1597 00af ld $af 1598 00ff ld $ff 1599 00ff ld $ff 159a 00ff ld $ff 159b 00fb ld $fb 159c 00ff ld $ff 159d 00ff ld $ff 159e 00bb ld $bb 159f 00ba ld $ba 15a0 00aa ld $aa 15a1 00ba ld $ba 15a2 00fa ld $fa 15a3 00ff ld $ff 15a4 00ff ld $ff 15a5 00fe ld $fe 15a6 00ff ld $ff 15a7 00ff ld $ff 15a8 00ff ld $ff * 5 times 15ab 00fe ld $fe 15ac 00ff ld $ff 15ad 00fb ld $fb 15ae 00ff ld $ff 15af 00ef ld $ef 15b0 00ab ld $ab 15b1 00aa ld $aa 15b2 00fb ld $fb 15b3 00ef ld $ef 15b4 00bb ld $bb 15b5 00be ld $be 15b6 00eb ld $eb 15b7 00ff ld $ff 15b8 00ff ld $ff 15b9 00ff ld $ff 15ba 00bf ld $bf 15bb 00ae ld $ae 15bc 00eb ld $eb 15bd 00ff ld $ff 15be 00bf ld $bf 15bf 00ff ld $ff 15c0 00ff ld $ff 15c1 00bf ld $bf 15c2 00fb ld $fb 15c3 00ff ld $ff 15c4 00ff ld $ff 15c5 00ff ld $ff * 8 times 15cb 00ef ld $ef 15cc 006a ld $6a 15cd 0049 ld $49 15ce 0096 ld $96 15cf 0010 ld $10 15d0 0008 ld $08 15d1 0041 ld $41 15d2 0015 ld $15 15d3 0055 ld $55 15d4 0096 ld $96 15d5 00aa ld $aa 15d6 00aa ld $aa 15d7 00ab ld $ab 15d8 006a ld $6a 15d9 005a ld $5a 15da 0056 ld $56 15db 0065 ld $65 15dc 00a9 ld $a9 15dd 00ea ld $ea 15de 00aa ld $aa 15df 00aa ld $aa 15e0 00ff ld $ff 15e1 00ff ld $ff 15e2 00ae ld $ae 15e3 00eb ld $eb 15e4 00bf ld $bf 15e5 00be ld $be 15e6 00bf ld $bf 15e7 00ff ld $ff 15e8 00ff ld $ff 15e9 00ff ld $ff 15ea 00fb ld $fb 15eb 00aa ld $aa 15ec 00ef ld $ef 15ed 00af ld $af 15ee 00ff ld $ff 15ef 00ff ld $ff 15f0 00ff ld $ff * 11 times 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 00be ld $be 1601 009a ld $9a 1602 0092 ld $92 1603 0024 ld $24 1604 0048 ld $48 1605 0092 ld $92 1606 0010 ld $10 1607 0009 ld $09 1608 0092 ld $92 1609 0020 ld $20 160a 0008 ld $08 160b 0041 ld $41 160c 0010 ld $10 160d 0004 ld $04 160e 0041 ld $41 160f 0010 ld $10 1610 0004 ld $04 1611 0041 ld $41 1612 0010 ld $10 1613 0004 ld $04 1614 0042 ld $42 1615 0010 ld $10 1616 0054 ld $54 1617 00aa ld $aa 1618 00e9 ld $e9 1619 00ff ld $ff 161a 00eb ld $eb 161b 00ef ld $ef 161c 00ff ld $ff 161d 00eb ld $eb 161e 00ff ld $ff 161f 00ff ld $ff 1620 00ff ld $ff 1621 00fe ld $fe 1622 00ff ld $ff 1623 00ff ld $ff 1624 00ff ld $ff 1625 00bf ld $bf 1626 00eb ld $eb 1627 00ff ld $ff 1628 00ff ld $ff 1629 00ff ld $ff * 8 times 162f 00e6 ld $e6 1630 0028 ld $28 1631 004a ld $4a 1632 0092 ld $92 1633 0024 ld $24 1634 0049 ld $49 1635 0092 ld $92 1636 0020 ld $20 1637 0049 ld $49 1638 0082 ld $82 1639 0024 ld $24 163a 0008 ld $08 163b 0042 ld $42 163c 0010 ld $10 163d 0004 ld $04 163e 0042 ld $42 163f 0010 ld $10 1640 0008 ld $08 1641 0081 ld $81 1642 0020 ld $20 1643 0004 ld $04 1644 0081 ld $81 1645 0010 ld $10 1646 0009 ld $09 1647 0091 ld $91 1648 0050 ld $50 1649 00f9 ld $f9 164a 00ef ld $ef 164b 00ff ld $ff 164c 00ff ld $ff 164d 00ff ld $ff 164e 00ff ld $ff 164f 00bf ld $bf 1650 00ff ld $ff 1651 00ff ld $ff 1652 00ee ld $ee 1653 00ef ld $ef 1654 00bf ld $bf 1655 00bf ld $bf 1656 00fe ld $fe 1657 00ff ld $ff 1658 00ff ld $ff 1659 00ff ld $ff * 7 times 165e 00df ld $df 165f 00e3 ld $e3 1660 0028 ld $28 1661 008f ld $8f 1662 00e3 ld $e3 1663 0028 ld $28 1664 004a ld $4a 1665 0092 ld $92 1666 0028 ld $28 1667 004d ld $4d 1668 0092 ld $92 1669 0020 ld $20 166a 0049 ld $49 166b 0082 ld $82 166c 0024 ld $24 166d 0048 ld $48 166e 0082 ld $82 166f 0010 ld $10 1670 0009 ld $09 1671 0092 ld $92 1672 0024 ld $24 1673 0008 ld $08 1674 0091 ld $91 1675 0024 ld $24 1676 0048 ld $48 1677 0082 ld $82 1678 0024 ld $24 1679 0055 ld $55 167a 00a6 ld $a6 167b 00bf ld $bf 167c 00ff ld $ff 167d 00ff ld $ff 167e 00fa ld $fa 167f 00ef ld $ef 1680 00bf ld $bf 1681 00ff ld $ff 1682 00ff ld $ff 1683 00ab ld $ab 1684 00ff ld $ff 1685 00ee ld $ee 1686 00ee ld $ee 1687 00ea ld $ea 1688 00ff ld $ff 1689 00ff ld $ff 168a 00ff ld $ff * 6 times 168e 009f ld $9f 168f 00f2 ld $f2 1690 003d ld $3d 1691 00db ld $db 1692 00a3 ld $a3 1693 0038 ld $38 1694 0089 ld $89 1695 0093 ld $93 1696 0024 ld $24 1697 0085 ld $85 1698 0092 ld $92 1699 0024 ld $24 169a 0049 ld $49 169b 0092 ld $92 169c 0024 ld $24 169d 0009 ld $09 169e 0092 ld $92 169f 0024 ld $24 16a0 0048 ld $48 16a1 0092 ld $92 16a2 0020 ld $20 16a3 0009 ld $09 16a4 0092 ld $92 16a5 0020 ld $20 16a6 0009 ld $09 16a7 0041 ld $41 16a8 0020 ld $20 16a9 0004 ld $04 16aa 0041 ld $41 16ab 00e5 ld $e5 16ac 00ff ld $ff 16ad 00ab ld $ab 16ae 00ff ld $ff 16af 00bf ld $bf 16b0 009b ld $9b 16b1 00fa ld $fa 16b2 00ae ld $ae 16b3 00ef ld $ef 16b4 00aa ld $aa 16b5 00ae ld $ae 16b6 00ee ld $ee 16b7 00ea ld $ea 16b8 00ff ld $ff 16b9 00ff ld $ff 16ba 00ff ld $ff 16bb 00ff ld $ff 16bc 00af ld $af 16bd 00ff ld $ff 16be 00ff ld $ff 16bf 00f7 ld $f7 16c0 0069 ld $69 16c1 00cf ld $cf 16c2 00f7 ld $f7 16c3 0069 ld $69 16c4 0056 ld $56 16c5 0051 ld $51 16c6 0015 ld $15 16c7 0011 ld $11 16c8 0010 ld $10 16c9 0014 ld $14 16ca 0085 ld $85 16cb 0092 ld $92 16cc 0024 ld $24 16cd 0009 ld $09 16ce 0092 ld $92 16cf 0020 ld $20 16d0 0048 ld $48 16d1 0092 ld $92 16d2 0024 ld $24 16d3 008d ld $8d 16d4 0092 ld $92 16d5 0024 ld $24 16d6 0049 ld $49 16d7 0042 ld $42 16d8 0010 ld $10 16d9 0004 ld $04 16da 0052 ld $52 16db 0010 ld $10 16dc 00a4 ld $a4 16dd 00fb ld $fb 16de 00bb ld $bb 16df 00af ld $af 16e0 00ab ld $ab 16e1 00a6 ld $a6 16e2 0059 ld $59 16e3 00aa ld $aa 16e4 00bb ld $bb 16e5 00ba ld $ba 16e6 00ef ld $ef 16e7 00ff ld $ff 16e8 00ff ld $ff 16e9 00ff ld $ff * 6 times 16ed 00bf ld $bf 16ee 00fe ld $fe 16ef 00ab ld $ab 16f0 0044 ld $44 16f1 00da ld $da 16f2 00f7 ld $f7 16f3 0029 ld $29 16f4 0010 ld $10 16f5 0050 ld $50 16f6 0044 ld $44 16f7 0055 ld $55 16f8 0041 ld $41 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 0004 ld $04 1701 0044 ld $44 1702 0050 ld $50 1703 0024 ld $24 1704 0049 ld $49 1705 0092 ld $92 1706 0024 ld $24 1707 0049 ld $49 1708 0092 ld $92 1709 0024 ld $24 170a 0089 ld $89 170b 00e2 ld $e2 170c 0034 ld $34 170d 004a ld $4a 170e 0092 ld $92 170f 0024 ld $24 1710 0009 ld $09 1711 0091 ld $91 1712 0024 ld $24 1713 0009 ld $09 1714 0052 ld $52 1715 00bb ld $bb 1716 00bf ld $bf 1717 00eb ld $eb 1718 00ba ld $ba 1719 006e ld $6e 171a 0097 ld $97 171b 00a5 ld $a5 171c 0059 ld $59 171d 00ea ld $ea 171e 00ff ld $ff 171f 00ff ld $ff 1720 00ef ld $ef 1721 00bf ld $bf 1722 00fa ld $fa 1723 00ef ld $ef 1724 00fe ld $fe 1725 00ff ld $ff 1726 00ab ld $ab 1727 0080 ld $80 1728 0010 ld $10 1729 00a5 ld $a5 172a 007d ld $7d 172b 004a ld $4a 172c 0011 ld $11 172d 0001 ld $01 172e 0055 ld $55 172f 0011 ld $11 1730 0015 ld $15 1731 0011 ld $11 1732 0040 ld $40 1733 0014 ld $14 1734 0048 ld $48 1735 0091 ld $91 1736 0020 ld $20 1737 0049 ld $49 1738 0092 ld $92 1739 0034 ld $34 173a 0009 ld $09 173b 0092 ld $92 173c 0024 ld $24 173d 0008 ld $08 173e 0092 ld $92 173f 0024 ld $24 1740 0089 ld $89 1741 0093 ld $93 1742 0024 ld $24 1743 0048 ld $48 1744 0096 ld $96 1745 00be ld $be 1746 00ff ld $ff 1747 00bf ld $bf 1748 00bb ld $bb 1749 00bf ld $bf 174a 00eb ld $eb 174b 00a6 ld $a6 174c 00a9 ld $a9 174d 00ff ld $ff 174e 00ff ld $ff 174f 00ff ld $ff 1750 00ff ld $ff 1751 00fa ld $fa 1752 00bf ld $bf 1753 00fb ld $fb 1754 00eb ld $eb 1755 00ff ld $ff 1756 00a7 ld $a7 1757 0080 ld $80 1758 0040 ld $40 1759 0054 ld $54 175a 00aa ld $aa 175b 004a ld $4a 175c 0045 ld $45 175d 0080 ld $80 175e 0040 ld $40 175f 0040 ld $40 1760 0080 ld $80 1761 0000 ld $00 1762 0051 ld $51 1763 0024 ld $24 1764 0049 ld $49 1765 0096 ld $96 1766 0024 ld $24 1767 0049 ld $49 1768 00d2 ld $d2 1769 0024 ld $24 176a 0049 ld $49 176b 0082 ld $82 176c 0050 ld $50 176d 0089 ld $89 176e 00e2 ld $e2 176f 0028 ld $28 1770 0049 ld $49 1771 0092 ld $92 1772 0028 ld $28 1773 0049 ld $49 1774 0042 ld $42 1775 0041 ld $41 1776 00f9 ld $f9 1777 00fb ld $fb 1778 00fa ld $fa 1779 00fb ld $fb 177a 00eb ld $eb 177b 00ff ld $ff 177c 00ae ld $ae 177d 00aa ld $aa 177e 00fa ld $fa 177f 00ff ld $ff 1780 00ff ld $ff 1781 00ff ld $ff 1782 00fb ld $fb 1783 00ff ld $ff 1784 00ff ld $ff 1785 00bf ld $bf 1786 0057 ld $57 1787 0040 ld $40 1788 0040 ld $40 1789 0001 ld $01 178a 0041 ld $41 178b 00e5 ld $e5 178c 00aa ld $aa 178d 0015 ld $15 178e 0051 ld $51 178f 0050 ld $50 1790 0040 ld $40 1791 0010 ld $10 1792 0000 ld $00 1793 0001 ld $01 1794 0001 ld $01 1795 0051 ld $51 1796 0024 ld $24 1797 0049 ld $49 1798 0051 ld $51 1799 0024 ld $24 179a 0048 ld $48 179b 00a2 ld $a2 179c 0025 ld $25 179d 0049 ld $49 179e 0092 ld $92 179f 0038 ld $38 17a0 008a ld $8a 17a1 00a3 ld $a3 17a2 0024 ld $24 17a3 0049 ld $49 17a4 0092 ld $92 17a5 0024 ld $24 17a6 0049 ld $49 17a7 0001 ld $01 17a8 0001 ld $01 17a9 0044 ld $44 17aa 0055 ld $55 17ab 00a5 ld $a5 17ac 00bf ld $bf 17ad 00eb ld $eb 17ae 00bf ld $bf 17af 00ae ld $ae 17b0 0056 ld $56 17b1 0066 ld $66 17b2 00f4 ld $f4 17b3 00ff ld $ff 17b4 00bf ld $bf 17b5 00bf ld $bf 17b6 00ff ld $ff 17b7 00bf ld $bf 17b8 00fe ld $fe 17b9 00ff ld $ff 17ba 0015 ld $15 17bb 0015 ld $15 17bc 0040 ld $40 17bd 0095 ld $95 17be 00ea ld $ea 17bf 0057 ld $57 17c0 0040 ld $40 17c1 0000 ld $00 17c2 0001 ld $01 17c3 0002 ld $02 17c4 0001 ld $01 17c5 0008 ld $08 17c6 0004 ld $04 17c7 0009 ld $09 17c8 0052 ld $52 17c9 0024 ld $24 17ca 0009 ld $09 17cb 0052 ld $52 17cc 0024 ld $24 17cd 0049 ld $49 17ce 0092 ld $92 17cf 0038 ld $38 17d0 008a ld $8a 17d1 00e3 ld $e3 17d2 0028 ld $28 17d3 008e ld $8e 17d4 0093 ld $93 17d5 0028 ld $28 17d6 0049 ld $49 17d7 0092 ld $92 17d8 0010 ld $10 17d9 0005 ld $05 17da 0001 ld $01 17db 0001 ld $01 17dc 0044 ld $44 17dd 00a6 ld $a6 17de 0065 ld $65 17df 00aa ld $aa 17e0 00ea ld $ea 17e1 00ba ld $ba 17e2 0069 ld $69 17e3 00ea ld $ea 17e4 00ff ld $ff 17e5 00ff ld $ff 17e6 00ff ld $ff * 7 times 17eb 009f ld $9f 17ec 0041 ld $41 17ed 0054 ld $54 17ee 0095 ld $95 17ef 00fe ld $fe 17f0 00bb ld $bb 17f1 005f ld $5f 17f2 0000 ld $00 17f3 0003 ld $03 17f4 0004 ld $04 17f5 000c ld $0c 17f6 0010 ld $10 17f7 0045 ld $45 17f8 0092 ld $92 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 0024 ld $24 1801 0049 ld $49 1802 0092 ld $92 1803 0024 ld $24 1804 0089 ld $89 1805 0092 ld $92 1806 0024 ld $24 1807 0049 ld $49 1808 00e2 ld $e2 1809 0028 ld $28 180a 0059 ld $59 180b 00e2 ld $e2 180c 0028 ld $28 180d 0049 ld $49 180e 0011 ld $11 180f 0040 ld $40 1810 0040 ld $40 1811 0091 ld $91 1812 0024 ld $24 1813 004a ld $4a 1814 0092 ld $92 1815 0010 ld $10 1816 0054 ld $54 1817 00ea ld $ea 1818 00b6 ld $b6 1819 00ae ld $ae 181a 00ff ld $ff 181b 00ff ld $ff 181c 00ff ld $ff * 7 times 1821 00bf ld $bf 1822 004a ld $4a 1823 0055 ld $55 1824 0095 ld $95 1825 00da ld $da 1826 00a7 ld $a7 1827 007f ld $7f 1828 0005 ld $05 1829 000c ld $0c 182a 0005 ld $05 182b 0051 ld $51 182c 0041 ld $41 182d 0014 ld $14 182e 0045 ld $45 182f 0092 ld $92 1830 0024 ld $24 1831 008a ld $8a 1832 00e2 ld $e2 1833 0028 ld $28 1834 004e ld $4e 1835 00a2 ld $a2 1836 0024 ld $24 1837 0049 ld $49 1838 00a2 ld $a2 1839 0024 ld $24 183a 0089 ld $89 183b 00a2 ld $a2 183c 0064 ld $64 183d 008a ld $8a 183e 0042 ld $42 183f 0040 ld $40 1840 0000 ld $00 1841 0061 ld $61 1842 0028 ld $28 1843 008e ld $8e 1844 0092 ld $92 1845 0014 ld $14 1846 0054 ld $54 1847 00a6 ld $a6 1848 00bb ld $bb 1849 00ae ld $ae 184a 00fe ld $fe 184b 00ff ld $ff 184c 00ff ld $ff 184d 00ff ld $ff 184e 00ff ld $ff 184f 00af ld $af 1850 00fe ld $fe 1851 00ff ld $ff 1852 005f ld $5f 1853 0052 ld $52 1854 0059 ld $59 1855 009f ld $9f 1856 00aa ld $aa 1857 00a9 ld $a9 1858 00aa ld $aa 1859 0056 ld $56 185a 0015 ld $15 185b 0010 ld $10 185c 0050 ld $50 185d 0040 ld $40 185e 0040 ld $40 185f 0051 ld $51 1860 0024 ld $24 1861 0049 ld $49 1862 00a2 ld $a2 1863 0038 ld $38 1864 0089 ld $89 1865 00e2 ld $e2 1866 0028 ld $28 1867 008a ld $8a 1868 0092 ld $92 1869 0064 ld $64 186a 008f ld $8f 186b 00a3 ld $a3 186c 0028 ld $28 186d 009e ld $9e 186e 0056 ld $56 186f 0028 ld $28 1870 004a ld $4a 1871 0052 ld $52 1872 0040 ld $40 1873 0000 ld $00 1874 00a1 ld $a1 1875 0039 ld $39 1876 008a ld $8a 1877 0092 ld $92 1878 0024 ld $24 1879 0045 ld $45 187a 0099 ld $99 187b 00ba ld $ba 187c 00fd ld $fd 187d 00ff ld $ff 187e 00ff ld $ff 187f 00ff ld $ff 1880 00ff ld $ff 1881 00bf ld $bf 1882 00af ld $af 1883 00fe ld $fe 1884 00ff ld $ff 1885 009b ld $9b 1886 00a6 ld $a6 1887 00a9 ld $a9 1888 00a6 ld $a6 1889 00be ld $be 188a 00ba ld $ba 188b 00eb ld $eb 188c 00ab ld $ab 188d 006a ld $6a 188e 0055 ld $55 188f 00a1 ld $a1 1890 0024 ld $24 1891 0049 ld $49 1892 00a6 ld $a6 1893 0028 ld $28 1894 008a ld $8a 1895 0092 ld $92 1896 0068 ld $68 1897 008e ld $8e 1898 00a3 ld $a3 1899 0078 ld $78 189a 009b ld $9b 189b 00f3 ld $f3 189c 0039 ld $39 189d 004a ld $4a 189e 0056 ld $56 189f 0014 ld $14 18a0 0089 ld $89 18a1 0092 ld $92 18a2 0024 ld $24 18a3 0004 ld $04 18a4 0004 ld $04 18a5 0014 ld $14 18a6 008a ld $8a 18a7 00a6 ld $a6 18a8 0028 ld $28 18a9 004a ld $4a 18aa 0096 ld $96 18ab 0094 ld $94 18ac 00fe ld $fe 18ad 00ff ld $ff 18ae 00bf ld $bf 18af 00fe ld $fe 18b0 00ff ld $ff 18b1 00ff ld $ff 18b2 00bf ld $bf 18b3 00fb ld $fb 18b4 00fb ld $fb 18b5 009f ld $9f 18b6 0096 ld $96 18b7 0064 ld $64 18b8 00da ld $da 18b9 00eb ld $eb 18ba 00fe ld $fe 18bb 00eb ld $eb 18bc 00af ld $af 18bd 00fe ld $fe 18be 00ef ld $ef 18bf 00a7 ld $a7 18c0 0028 ld $28 18c1 008a ld $8a 18c2 00a2 ld $a2 18c3 0024 ld $24 18c4 008a ld $8a 18c5 00e3 ld $e3 18c6 0039 ld $39 18c7 00ce ld $ce 18c8 00f2 ld $f2 18c9 0038 ld $38 18ca 008e ld $8e 18cb 00fa ld $fa 18cc 007a ld $7a 18cd 005a ld $5a 18ce 0052 ld $52 18cf 0028 ld $28 18d0 0049 ld $49 18d1 0091 ld $91 18d2 0028 ld $28 18d3 0049 ld $49 18d4 0042 ld $42 18d5 0014 ld $14 18d6 0089 ld $89 18d7 00a2 ld $a2 18d8 0028 ld $28 18d9 0045 ld $45 18da 0066 ld $66 18db 0024 ld $24 18dc 00aa ld $aa 18dd 0057 ld $57 18de 0095 ld $95 18df 0059 ld $59 18e0 0099 ld $99 18e1 00ff ld $ff 18e2 00ff ld $ff 18e3 00ff ld $ff 18e4 002a ld $2a 18e5 0049 ld $49 18e6 0091 ld $91 18e7 0028 ld $28 18e8 0099 ld $99 18e9 00b3 ld $b3 18ea 0079 ld $79 18eb 00ea ld $ea 18ec 00fb ld $fb 18ed 00ae ld $ae 18ee 00de ld $de 18ef 00a3 ld $a3 18f0 0078 ld $78 18f1 008a ld $8a 18f2 00e2 ld $e2 18f3 0028 ld $28 18f4 00ce ld $ce 18f5 00a3 ld $a3 18f6 003c ld $3c 18f7 009a ld $9a 18f8 00f3 ld $f3 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 0029 ld $29 1901 009e ld $9e 1902 00f6 ld $f6 1903 0028 ld $28 1904 008a ld $8a 1905 0092 ld $92 1906 0028 ld $28 1907 008e ld $8e 1908 0092 ld $92 1909 0028 ld $28 190a 008a ld $8a 190b 0092 ld $92 190c 0024 ld $24 190d 008a ld $8a 190e 00b7 ld $b7 190f 0028 ld $28 1910 0089 ld $89 1911 0092 ld $92 1912 0029 ld $29 1913 0099 ld $99 1914 0096 ld $96 1915 00a2 ld $a2 1916 0059 ld $59 1917 009a ld $9a 1918 00ff ld $ff 1919 00ff ld $ff 191a 00a7 ld $a7 191b 0014 ld $14 191c 0044 ld $44 191d 0092 ld $92 191e 0028 ld $28 191f 008a ld $8a 1920 00a2 ld $a2 1921 0028 ld $28 1922 009a ld $9a 1923 00fa ld $fa 1924 007d ld $7d 1925 009f ld $9f 1926 00a3 ld $a3 1927 007e ld $7e 1928 008e ld $8e 1929 00a2 ld $a2 192a 0068 ld $68 192b 00da ld $da 192c 00a3 ld $a3 192d 0079 ld $79 192e 008f ld $8f 192f 00a3 ld $a3 1930 0038 ld $38 1931 00ca ld $ca 1932 00a3 ld $a3 1933 0038 ld $38 1934 008a ld $8a 1935 00e6 ld $e6 1936 0028 ld $28 1937 008e ld $8e 1938 00e2 ld $e2 1939 0038 ld $38 193a 008e ld $8e 193b 00e2 ld $e2 193c 0028 ld $28 193d 008a ld $8a 193e 00f6 ld $f6 193f 0028 ld $28 1940 008a ld $8a 1941 0092 ld $92 1942 0024 ld $24 1943 004a ld $4a 1944 00da ld $da 1945 00a6 ld $a6 1946 00be ld $be 1947 00ff ld $ff 1948 00ff ld $ff 1949 009f ld $9f 194a 0042 ld $42 194b 0024 ld $24 194c 0049 ld $49 194d 0091 ld $91 194e 0028 ld $28 194f 00de ld $de 1950 00a7 ld $a7 1951 0068 ld $68 1952 009a ld $9a 1953 00f6 ld $f6 1954 00ad ld $ad 1955 00ef ld $ef 1956 00fb ld $fb 1957 00be ld $be 1958 009f ld $9f 1959 00e2 ld $e2 195a 006d ld $6d 195b 00df ld $df 195c 00a7 ld $a7 195d 007d ld $7d 195e 00df ld $df 195f 00a3 ld $a3 1960 007d ld $7d 1961 009f ld $9f 1962 00f7 ld $f7 1963 0028 ld $28 1964 009e ld $9e 1965 00f3 ld $f3 1966 007d ld $7d 1967 00de ld $de 1968 00b3 ld $b3 1969 0039 ld $39 196a 008a ld $8a 196b 00a3 ld $a3 196c 0024 ld $24 196d 004a ld $4a 196e 00a2 ld $a2 196f 0038 ld $38 1970 009a ld $9a 1971 00a2 ld $a2 1972 0064 ld $64 1973 00aa ld $aa 1974 00eb ld $eb 1975 00ba ld $ba 1976 00fa ld $fa 1977 00ff ld $ff 1978 00ff ld $ff 1979 004f ld $4f 197a 00a1 ld $a1 197b 0029 ld $29 197c 0089 ld $89 197d 00a2 ld $a2 197e 0039 ld $39 197f 009a ld $9a 1980 00ea ld $ea 1981 0069 ld $69 1982 00aa ld $aa 1983 00f7 ld $f7 1984 00b9 ld $b9 1985 00ef ld $ef 1986 00ab ld $ab 1987 00be ld $be 1988 009f ld $9f 1989 00f6 ld $f6 198a 007d ld $7d 198b 00de ld $de 198c 00f7 ld $f7 198d 007d ld $7d 198e 00ef ld $ef 198f 00f7 ld $f7 1990 007d ld $7d 1991 00df ld $df 1992 00f7 ld $f7 1993 007d ld $7d 1994 00df ld $df 1995 00b7 ld $b7 1996 0039 ld $39 1997 008b ld $8b 1998 00e3 ld $e3 1999 0028 ld $28 199a 008e ld $8e 199b 00e2 ld $e2 199c 0028 ld $28 199d 008a ld $8a 199e 00a3 ld $a3 199f 006d ld $6d 19a0 008a ld $8a 19a1 00a2 ld $a2 19a2 0068 ld $68 19a3 00a9 ld $a9 19a4 00aa ld $aa 19a5 00aa ld $aa 19a6 00aa ld $aa 19a7 00ef ld $ef 19a8 007e ld $7e 19a9 0045 ld $45 19aa 00a5 ld $a5 19ab 0028 ld $28 19ac 009a ld $9a 19ad 00f6 ld $f6 19ae 0069 ld $69 19af 008b ld $8b 19b0 00f6 ld $f6 19b1 00aa ld $aa 19b2 00ef ld $ef 19b3 00fb ld $fb 19b4 00be ld $be 19b5 00de ld $de 19b6 00fb ld $fb 19b7 00bd ld $bd 19b8 00ef ld $ef 19b9 00e7 ld $e7 19ba 006e ld $6e 19bb 00ef ld $ef 19bc 00f7 ld $f7 19bd 00be ld $be 19be 009f ld $9f 19bf 00f7 ld $f7 19c0 0079 ld $79 19c1 00da ld $da 19c2 00fb ld $fb 19c3 0079 ld $79 19c4 008f ld $8f 19c5 00e3 ld $e3 19c6 0028 ld $28 19c7 008e ld $8e 19c8 00e2 ld $e2 19c9 0028 ld $28 19ca 008a ld $8a 19cb 00a3 ld $a3 19cc 0028 ld $28 19cd 008a ld $8a 19ce 00e2 ld $e2 19cf 0078 ld $78 19d0 005f ld $5f 19d1 00e6 ld $e6 19d2 0028 ld $28 19d3 0069 ld $69 19d4 009a ld $9a 19d5 0062 ld $62 19d6 0015 ld $15 19d7 00a9 ld $a9 19d8 0029 ld $29 19d9 0099 ld $99 19da 00e6 ld $e6 19db 0028 ld $28 19dc 004a ld $4a 19dd 00a2 ld $a2 19de 0068 ld $68 19df 00de ld $de 19e0 00e7 ld $e7 19e1 00bd ld $bd 19e2 00ee ld $ee 19e3 00fb ld $fb 19e4 0069 ld $69 19e5 00df ld $df 19e6 00e7 ld $e7 19e7 00ad ld $ad 19e8 00ee ld $ee 19e9 00f7 ld $f7 19ea 00bd ld $bd 19eb 00df ld $df 19ec 00eb ld $eb 19ed 006d ld $6d 19ee 00ef ld $ef 19ef 00f7 ld $f7 19f0 007d ld $7d 19f1 00df ld $df 19f2 00a3 ld $a3 19f3 003d ld $3d 19f4 008a ld $8a 19f5 00e2 ld $e2 19f6 002c ld $2c 19f7 008e ld $8e 19f8 00a2 ld $a2 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 003c ld $3c 1a01 008a ld $8a 1a02 00a3 ld $a3 1a03 0038 ld $38 1a04 008e ld $8e 1a05 00a3 ld $a3 1a06 0068 ld $68 1a07 009f ld $9f 1a08 001a ld $1a 1a09 0069 ld $69 1a0a 00a5 ld $a5 1a0b 009a ld $9a 1a0c 00ba ld $ba 1a0d 00be ld $be 1a0e 00eb ld $eb 1a0f 0066 ld $66 1a10 00da ld $da 1a11 00a3 ld $a3 1a12 0028 ld $28 1a13 008a ld $8a 1a14 00a2 ld $a2 1a15 0068 ld $68 1a16 00de ld $de 1a17 00a7 ld $a7 1a18 006c ld $6c 1a19 00ee ld $ee 1a1a 00f7 ld $f7 1a1b 00bd ld $bd 1a1c 009f ld $9f 1a1d 00fb ld $fb 1a1e 00be ld $be 1a1f 00ef ld $ef 1a20 00f6 ld $f6 1a21 007a ld $7a 1a22 009b ld $9b 1a23 00fb ld $fb 1a24 007d ld $7d 1a25 00de ld $de 1a26 00f7 ld $f7 1a27 006d ld $6d 1a28 009e ld $9e 1a29 00e3 ld $e3 1a2a 0028 ld $28 1a2b 00de ld $de 1a2c 00e2 ld $e2 1a2d 0068 ld $68 1a2e 008f ld $8f 1a2f 00f2 ld $f2 1a30 0028 ld $28 1a31 008e ld $8e 1a32 00a2 ld $a2 1a33 0029 ld $29 1a34 00df ld $df 1a35 00e2 ld $e2 1a36 0068 ld $68 1a37 00ef ld $ef 1a38 006b ld $6b 1a39 0086 ld $86 1a3a 00a6 ld $a6 1a3b 0096 ld $96 1a3c 00a6 ld $a6 1a3d 00fe ld $fe 1a3e 00ee ld $ee 1a3f 0039 ld $39 1a40 008a ld $8a 1a41 0092 ld $92 1a42 0068 ld $68 1a43 008e ld $8e 1a44 00e6 ld $e6 1a45 0068 ld $68 1a46 00da ld $da 1a47 00f7 ld $f7 1a48 0078 ld $78 1a49 00da ld $da 1a4a 00fb ld $fb 1a4b 0079 ld $79 1a4c 00ef ld $ef 1a4d 00f6 ld $f6 1a4e 00be ld $be 1a4f 00ef ld $ef 1a50 00fb ld $fb 1a51 007d ld $7d 1a52 00df ld $df 1a53 00f6 ld $f6 1a54 0079 ld $79 1a55 00df ld $df 1a56 00e6 ld $e6 1a57 007d ld $7d 1a58 00df ld $df 1a59 00b7 ld $b7 1a5a 007c ld $7c 1a5b 008f ld $8f 1a5c 00f3 ld $f3 1a5d 0038 ld $38 1a5e 008a ld $8a 1a5f 00b3 ld $b3 1a60 0038 ld $38 1a61 008a ld $8a 1a62 00e2 ld $e2 1a63 0068 ld $68 1a64 00cf ld $cf 1a65 00e7 ld $e7 1a66 00bd ld $bd 1a67 009b ld $9b 1a68 006b ld $6b 1a69 0085 ld $85 1a6a 00a5 ld $a5 1a6b 0099 ld $99 1a6c 0055 ld $55 1a6d 00a4 ld $a4 1a6e 00fb ld $fb 1a6f 0064 ld $64 1a70 0056 ld $56 1a71 00a2 ld $a2 1a72 0069 ld $69 1a73 00de ld $de 1a74 00b3 ld $b3 1a75 0078 ld $78 1a76 009a ld $9a 1a77 00b7 ld $b7 1a78 007d ld $7d 1a79 00df ld $df 1a7a 00f7 ld $f7 1a7b 00bd ld $bd 1a7c 00ef ld $ef 1a7d 00eb ld $eb 1a7e 00fe ld $fe 1a7f 00ef ld $ef 1a80 00e7 ld $e7 1a81 006e ld $6e 1a82 00ee ld $ee 1a83 00f7 ld $f7 1a84 0069 ld $69 1a85 00df ld $df 1a86 00f7 ld $f7 1a87 003d ld $3d 1a88 00de ld $de 1a89 00f7 ld $f7 1a8a 0079 ld $79 1a8b 00db ld $db 1a8c 00b3 ld $b3 1a8d 0038 ld $38 1a8e 008b ld $8b 1a8f 00e2 ld $e2 1a90 0028 ld $28 1a91 008f ld $8f 1a92 00e2 ld $e2 1a93 0078 ld $78 1a94 008b ld $8b 1a95 00b3 ld $b3 1a96 007d ld $7d 1a97 00de ld $de 1a98 006b ld $6b 1a99 0086 ld $86 1a9a 00a6 ld $a6 1a9b 00da ld $da 1a9c 00a6 ld $a6 1a9d 00fa ld $fa 1a9e 00fe ld $fe 1a9f 0065 ld $65 1aa0 00a1 ld $a1 1aa1 00f9 ld $f9 1aa2 007e ld $7e 1aa3 00da ld $da 1aa4 00a3 ld $a3 1aa5 0068 ld $68 1aa6 009f ld $9f 1aa7 00e6 ld $e6 1aa8 00b9 ld $b9 1aa9 00ee ld $ee 1aaa 00b7 ld $b7 1aab 007a ld $7a 1aac 00ef ld $ef 1aad 00fb ld $fb 1aae 00ff ld $ff 1aaf 00db ld $db 1ab0 00bb ld $bb 1ab1 0039 ld $39 1ab2 00df ld $df 1ab3 00a7 ld $a7 1ab4 003c ld $3c 1ab5 00da ld $da 1ab6 00e3 ld $e3 1ab7 007d ld $7d 1ab8 009b ld $9b 1ab9 00b7 ld $b7 1aba 003d ld $3d 1abb 00df ld $df 1abc 00e3 ld $e3 1abd 002d ld $2d 1abe 008e ld $8e 1abf 00f7 ld $f7 1ac0 0078 ld $78 1ac1 008f ld $8f 1ac2 00e2 ld $e2 1ac3 0069 ld $69 1ac4 008f ld $8f 1ac5 00a2 ld $a2 1ac6 007c ld $7c 1ac7 00da ld $da 1ac8 00ab ld $ab 1ac9 0086 ld $86 1aca 00a6 ld $a6 1acb 00e9 ld $e9 1acc 00a6 ld $a6 1acd 006e ld $6e 1ace 00aa ld $aa 1acf 009a ld $9a 1ad0 00a1 ld $a1 1ad1 00a6 ld $a6 1ad2 0068 ld $68 1ad3 009f ld $9f 1ad4 00a2 ld $a2 1ad5 00a8 ld $a8 1ad6 009e ld $9e 1ad7 00f6 ld $f6 1ad8 0078 ld $78 1ad9 009f ld $9f 1ada 00f7 ld $f7 1adb 007e ld $7e 1adc 009f ld $9f 1add 00fa ld $fa 1ade 007e ld $7e 1adf 00ee ld $ee 1ae0 00a6 ld $a6 1ae1 007d ld $7d 1ae2 00da ld $da 1ae3 00a3 ld $a3 1ae4 007d ld $7d 1ae5 008b ld $8b 1ae6 00b7 ld $b7 1ae7 003d ld $3d 1ae8 00df ld $df 1ae9 00f3 ld $f3 1aea 003d ld $3d 1aeb 00da ld $da 1aec 00b3 ld $b3 1aed 003c ld $3c 1aee 00de ld $de 1aef 00a2 ld $a2 1af0 007c ld $7c 1af1 00ca ld $ca 1af2 00f3 ld $f3 1af3 007d ld $7d 1af4 008f ld $8f 1af5 00a2 ld $a2 1af6 0068 ld $68 1af7 008f ld $8f 1af8 00a7 ld $a7 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 008a ld $8a 1b01 00a6 ld $a6 1b02 00ee ld $ee 1b03 00ba ld $ba 1b04 0059 ld $59 1b05 0055 ld $55 1b06 0085 ld $85 1b07 00a6 ld $a6 1b08 00a2 ld $a2 1b09 0068 ld $68 1b0a 00ce ld $ce 1b0b 00e6 ld $e6 1b0c 0068 ld $68 1b0d 00ae ld $ae 1b0e 00e6 ld $e6 1b0f 00aa ld $aa 1b10 00ef ld $ef 1b11 00b7 ld $b7 1b12 0079 ld $79 1b13 00df ld $df 1b14 00fb ld $fb 1b15 007e ld $7e 1b16 009b ld $9b 1b17 00f7 ld $f7 1b18 0039 ld $39 1b19 009f ld $9f 1b1a 00e6 ld $e6 1b1b 006c ld $6c 1b1c 00ce ld $ce 1b1d 00f3 ld $f3 1b1e 003d ld $3d 1b1f 00de ld $de 1b20 00a3 ld $a3 1b21 007d ld $7d 1b22 00cf ld $cf 1b23 00f7 ld $f7 1b24 007d ld $7d 1b25 00ca ld $ca 1b26 00e3 ld $e3 1b27 0028 ld $28 1b28 009f ld $9f 1b29 00a3 ld $a3 1b2a 0079 ld $79 1b2b 008f ld $8f 1b2c 00e2 ld $e2 1b2d 0028 ld $28 1b2e 00da ld $da 1b2f 00bb ld $bb 1b30 0096 ld $96 1b31 00aa ld $aa 1b32 00da ld $da 1b33 00a6 ld $a6 1b34 006e ld $6e 1b35 0006 ld $06 1b36 0086 ld $86 1b37 0086 ld $86 1b38 00a3 ld $a3 1b39 0029 ld $29 1b3a 008a ld $8a 1b3b 00f6 ld $f6 1b3c 0068 ld $68 1b3d 00ae ld $ae 1b3e 00fb ld $fb 1b3f 00be ld $be 1b40 00fe ld $fe 1b41 00f7 ld $f7 1b42 00be ld $be 1b43 009f ld $9f 1b44 00fa ld $fa 1b45 007e ld $7e 1b46 00df ld $df 1b47 00b7 ld $b7 1b48 0078 ld $78 1b49 00da ld $da 1b4a 00f3 ld $f3 1b4b 003c ld $3c 1b4c 00ca ld $ca 1b4d 00a7 ld $a7 1b4e 003c ld $3c 1b4f 00db ld $db 1b50 00f7 ld $f7 1b51 007c ld $7c 1b52 009b ld $9b 1b53 00f3 ld $f3 1b54 0068 ld $68 1b55 00cf ld $cf 1b56 00a7 ld $a7 1b57 007c ld $7c 1b58 00ce ld $ce 1b59 00e2 ld $e2 1b5a 007d ld $7d 1b5b 008f ld $8f 1b5c 00a2 ld $a2 1b5d 0028 ld $28 1b5e 008e ld $8e 1b5f 00a7 ld $a7 1b60 008a ld $8a 1b61 00ba ld $ba 1b62 009a ld $9a 1b63 00ba ld $ba 1b64 00ad ld $ad 1b65 0017 ld $17 1b66 0056 ld $56 1b67 008a ld $8a 1b68 00a6 ld $a6 1b69 0039 ld $39 1b6a 008a ld $8a 1b6b 00a3 ld $a3 1b6c 0078 ld $78 1b6d 009a ld $9a 1b6e 00ea ld $ea 1b6f 00be ld $be 1b70 00eb ld $eb 1b71 00ef ld $ef 1b72 00be ld $be 1b73 00ef ld $ef 1b74 00fb ld $fb 1b75 007d ld $7d 1b76 00ca ld $ca 1b77 00e7 ld $e7 1b78 007c ld $7c 1b79 008f ld $8f 1b7a 00e2 ld $e2 1b7b 002d ld $2d 1b7c 00de ld $de 1b7d 00e2 ld $e2 1b7e 006c ld $6c 1b7f 008e ld $8e 1b80 00b3 ld $b3 1b81 0039 ld $39 1b82 00df ld $df 1b83 00f6 ld $f6 1b84 007c ld $7c 1b85 00df ld $df 1b86 00f3 ld $f3 1b87 006d ld $6d 1b88 008f ld $8f 1b89 00f7 ld $f7 1b8a 006c ld $6c 1b8b 00df ld $df 1b8c 00a3 ld $a3 1b8d 0038 ld $38 1b8e 008b ld $8b 1b8f 00a6 ld $a6 1b90 009a ld $9a 1b91 006a ld $6a 1b92 00ff ld $ff 1b93 00ff ld $ff 1b94 00bf ld $bf 1b95 0016 ld $16 1b96 001a ld $1a 1b97 004a ld $4a 1b98 00aa ld $aa 1b99 0029 ld $29 1b9a 008b ld $8b 1b9b 00a3 ld $a3 1b9c 0028 ld $28 1b9d 00ae ld $ae 1b9e 00e6 ld $e6 1b9f 00fa ld $fa 1ba0 00ff ld $ff 1ba1 00fb ld $fb 1ba2 00bf ld $bf 1ba3 00eb ld $eb 1ba4 00fb ld $fb 1ba5 0079 ld $79 1ba6 00df ld $df 1ba7 00b3 ld $b3 1ba8 0029 ld $29 1ba9 00de ld $de 1baa 00b3 ld $b3 1bab 0038 ld $38 1bac 008b ld $8b 1bad 00f3 ld $f3 1bae 0039 ld $39 1baf 00db ld $db 1bb0 00f3 ld $f3 1bb1 003d ld $3d 1bb2 00de ld $de 1bb3 00f7 ld $f7 1bb4 0029 ld $29 1bb5 008f ld $8f 1bb6 00f6 ld $f6 1bb7 0078 ld $78 1bb8 00df ld $df 1bb9 00f2 ld $f2 1bba 0039 ld $39 1bbb 009f ld $9f 1bbc 00f7 ld $f7 1bbd 003d ld $3d 1bbe 008a ld $8a 1bbf 00a3 ld $a3 1bc0 00aa ld $aa 1bc1 00be ld $be 1bc2 00eb ld $eb 1bc3 00fa ld $fa 1bc4 00ff ld $ff 1bc5 001b ld $1b 1bc6 005a ld $5a 1bc7 008a ld $8a 1bc8 00a6 ld $a6 1bc9 0039 ld $39 1bca 00ca ld $ca 1bcb 00e6 ld $e6 1bcc 0065 ld $65 1bcd 009a ld $9a 1bce 00a7 ld $a7 1bcf 00ba ld $ba 1bd0 00fe ld $fe 1bd1 00fe ld $fe 1bd2 00fe ld $fe 1bd3 00ff ld $ff 1bd4 00fb ld $fb 1bd5 007d ld $7d 1bd6 00ce ld $ce 1bd7 00f6 ld $f6 1bd8 0078 ld $78 1bd9 008f ld $8f 1bda 00f6 ld $f6 1bdb 0028 ld $28 1bdc 00ce ld $ce 1bdd 00a7 ld $a7 1bde 006c ld $6c 1bdf 00ce ld $ce 1be0 00a3 ld $a3 1be1 003d ld $3d 1be2 00db ld $db 1be3 00b3 ld $b3 1be4 007d ld $7d 1be5 00df ld $df 1be6 00f7 ld $f7 1be7 003d ld $3d 1be8 009f ld $9f 1be9 00f7 ld $f7 1bea 0078 ld $78 1beb 00db ld $db 1bec 00e7 ld $e7 1bed 002c ld $2c 1bee 008e ld $8e 1bef 00a3 ld $a3 1bf0 00a9 ld $a9 1bf1 005d ld $5d 1bf2 009a ld $9a 1bf3 00ea ld $ea 1bf4 00ee ld $ee 1bf5 001a ld $1a 1bf6 0029 ld $29 1bf7 009e ld $9e 1bf8 00a6 ld $a6 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 0028 ld $28 1c01 0089 ld $89 1c02 00a7 ld $a7 1c03 007e ld $7e 1c04 0099 ld $99 1c05 00e6 ld $e6 1c06 00aa ld $aa 1c07 00ef ld $ef 1c08 00ef ld $ef 1c09 00ff ld $ff 1c0a 00ef ld $ef 1c0b 00b7 ld $b7 1c0c 0079 ld $79 1c0d 00cb ld $cb 1c0e 00e3 ld $e3 1c0f 002d ld $2d 1c10 00ce ld $ce 1c11 00a3 ld $a3 1c12 007c ld $7c 1c13 00ca ld $ca 1c14 00f7 ld $f7 1c15 007c ld $7c 1c16 00cf ld $cf 1c17 00f6 ld $f6 1c18 0078 ld $78 1c19 00df ld $df 1c1a 00e7 ld $e7 1c1b 007c ld $7c 1c1c 009f ld $9f 1c1d 00f2 ld $f2 1c1e 0068 ld $68 1c1f 00ef ld $ef 1c20 00f6 ld $f6 1c21 00ac ld $ac 1c22 00ef ld $ef 1c23 00fb ld $fb 1c24 007e ld $7e 1c25 00ce ld $ce 1c26 00a2 ld $a2 1c27 00ba ld $ba 1c28 005e ld $5e 1c29 0096 ld $96 1c2a 00a6 ld $a6 1c2b 00be ld $be 1c2c 006a ld $6a 1c2d 0078 ld $78 1c2e 009a ld $9a 1c2f 00e6 ld $e6 1c30 0028 ld $28 1c31 004a ld $4a 1c32 00e6 ld $e6 1c33 0069 ld $69 1c34 005a ld $5a 1c35 0096 ld $96 1c36 00b9 ld $b9 1c37 00fe ld $fe 1c38 00ff ld $ff 1c39 00ff ld $ff 1c3a 00af ld $af 1c3b 00fb ld $fb 1c3c 003d ld $3d 1c3d 009f ld $9f 1c3e 00b7 ld $b7 1c3f 0038 ld $38 1c40 009b ld $9b 1c41 00b3 ld $b3 1c42 0038 ld $38 1c43 008a ld $8a 1c44 00b7 ld $b7 1c45 0078 ld $78 1c46 008b ld $8b 1c47 00f7 ld $f7 1c48 006c ld $6c 1c49 00ce ld $ce 1c4a 00f6 ld $f6 1c4b 006d ld $6d 1c4c 00df ld $df 1c4d 00e3 ld $e3 1c4e 007d ld $7d 1c4f 00ef ld $ef 1c50 00a7 ld $a7 1c51 00b8 ld $b8 1c52 00ef ld $ef 1c53 00af ld $af 1c54 00fe ld $fe 1c55 009f ld $9f 1c56 00ea ld $ea 1c57 00fb ld $fb 1c58 00ae ld $ae 1c59 00a7 ld $a7 1c5a 00ea ld $ea 1c5b 00fe ld $fe 1c5c 006a ld $6a 1c5d 007d ld $7d 1c5e 0085 ld $85 1c5f 00a2 ld $a2 1c60 0028 ld $28 1c61 009a ld $9a 1c62 00aa ld $aa 1c63 0069 ld $69 1c64 009a ld $9a 1c65 0096 ld $96 1c66 00b9 ld $b9 1c67 00aa ld $aa 1c68 00ff ld $ff 1c69 00bf ld $bf 1c6a 00aa ld $aa 1c6b 00a6 ld $a6 1c6c 007d ld $7d 1c6d 008b ld $8b 1c6e 00f3 ld $f3 1c6f 0068 ld $68 1c70 00cf ld $cf 1c71 00e3 ld $e3 1c72 002d ld $2d 1c73 00de ld $de 1c74 00f7 ld $f7 1c75 003d ld $3d 1c76 00db ld $db 1c77 00f7 ld $f7 1c78 0069 ld $69 1c79 00df ld $df 1c7a 00f7 ld $f7 1c7b 007d ld $7d 1c7c 00de ld $de 1c7d 00b7 ld $b7 1c7e 007c ld $7c 1c7f 00ee ld $ee 1c80 00a3 ld $a3 1c81 00bc ld $bc 1c82 00ee ld $ee 1c83 00ff ld $ff 1c84 00bf ld $bf 1c85 00ba ld $ba 1c86 00db ld $db 1c87 00ba ld $ba 1c88 00ba ld $ba 1c89 009b ld $9b 1c8a 00fa ld $fa 1c8b 00af ld $af 1c8c 006a ld $6a 1c8d 0068 ld $68 1c8e 008a ld $8a 1c8f 00a2 ld $a2 1c90 0038 ld $38 1c91 008a ld $8a 1c92 00eb ld $eb 1c93 006a ld $6a 1c94 009a ld $9a 1c95 00a6 ld $a6 1c96 00a5 ld $a5 1c97 00aa ld $aa 1c98 00fb ld $fb 1c99 00bf ld $bf 1c9a 009a ld $9a 1c9b 00f7 ld $f7 1c9c 007c ld $7c 1c9d 00ce ld $ce 1c9e 00f6 ld $f6 1c9f 007c ld $7c 1ca0 009f ld $9f 1ca1 00f6 ld $f6 1ca2 0028 ld $28 1ca3 00df ld $df 1ca4 00b7 ld $b7 1ca5 007c ld $7c 1ca6 00ce ld $ce 1ca7 00e6 ld $e6 1ca8 007c ld $7c 1ca9 00df ld $df 1caa 00e7 ld $e7 1cab 007c ld $7c 1cac 00cf ld $cf 1cad 00f7 ld $f7 1cae 00ad ld $ad 1caf 00ff ld $ff 1cb0 00e7 ld $e7 1cb1 00ae ld $ae 1cb2 00fe ld $fe 1cb3 00ea ld $ea 1cb4 00e9 ld $e9 1cb5 00ae ld $ae 1cb6 009b ld $9b 1cb7 00ba ld $ba 1cb8 0069 ld $69 1cb9 00ea ld $ea 1cba 00bb ld $bb 1cbb 00ae ld $ae 1cbc 00aa ld $aa 1cbd 0068 ld $68 1cbe 009a ld $9a 1cbf 00a3 ld $a3 1cc0 0039 ld $39 1cc1 00ae ld $ae 1cc2 00a6 ld $a6 1cc3 0065 ld $65 1cc4 005a ld $5a 1cc5 0096 ld $96 1cc6 00a9 ld $a9 1cc7 00ee ld $ee 1cc8 00ff ld $ff 1cc9 00ab ld $ab 1cca 00da ld $da 1ccb 00e7 ld $e7 1ccc 002d ld $2d 1ccd 008f ld $8f 1cce 00f7 ld $f7 1ccf 0068 ld $68 1cd0 00df ld $df 1cd1 00fb ld $fb 1cd2 007e ld $7e 1cd3 009f ld $9f 1cd4 00f2 ld $f2 1cd5 0039 ld $39 1cd6 00db ld $db 1cd7 00f3 ld $f3 1cd8 002d ld $2d 1cd9 00ce ld $ce 1cda 00f6 ld $f6 1cdb 002c ld $2c 1cdc 00de ld $de 1cdd 00e6 ld $e6 1cde 00fd ld $fd 1cdf 00ff ld $ff 1ce0 00fb ld $fb 1ce1 00bf ld $bf 1ce2 00fe ld $fe 1ce3 00ea ld $ea 1ce4 00fa ld $fa 1ce5 00ae ld $ae 1ce6 009b ld $9b 1ce7 00b6 ld $b6 1ce8 00be ld $be 1ce9 00db ld $db 1cea 00a5 ld $a5 1ceb 001a ld $1a 1cec 0069 ld $69 1ced 0039 ld $39 1cee 009e ld $9e 1cef 00a2 ld $a2 1cf0 0079 ld $79 1cf1 00aa ld $aa 1cf2 00ea ld $ea 1cf3 00a9 ld $a9 1cf4 0099 ld $99 1cf5 00a6 ld $a6 1cf6 00a5 ld $a5 1cf7 00ae ld $ae 1cf8 00eb ld $eb 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 00be ld $be 1d01 009a ld $9a 1d02 00f3 ld $f3 1d03 007d ld $7d 1d04 00df ld $df 1d05 00f2 ld $f2 1d06 007d ld $7d 1d07 00ef ld $ef 1d08 00ea ld $ea 1d09 006e ld $6e 1d0a 00cf ld $cf 1d0b 00f7 ld $f7 1d0c 006c ld $6c 1d0d 00ce ld $ce 1d0e 00e2 ld $e2 1d0f 0038 ld $38 1d10 008b ld $8b 1d11 00f3 ld $f3 1d12 0069 ld $69 1d13 00ef ld $ef 1d14 00f7 ld $f7 1d15 00fe ld $fe 1d16 00ff ld $ff 1d17 00ff ld $ff 1d18 00ea ld $ea 1d19 00aa ld $aa 1d1a 00ab ld $ab 1d1b 00ff ld $ff 1d1c 00ae ld $ae 1d1d 0097 ld $97 1d1e 00e6 ld $e6 1d1f 00fe ld $fe 1d20 00eb ld $eb 1d21 0076 ld $76 1d22 0008 ld $08 1d23 0055 ld $55 1d24 007f ld $7f 1d25 009a ld $9a 1d26 00e2 ld $e2 1d27 0079 ld $79 1d28 0059 ld $59 1d29 00ea ld $ea 1d2a 006a ld $6a 1d2b 005a ld $5a 1d2c 0096 ld $96 1d2d 00a9 ld $a9 1d2e 00ae ld $ae 1d2f 00fb ld $fb 1d30 007f ld $7f 1d31 00de ld $de 1d32 00b7 ld $b7 1d33 0039 ld $39 1d34 009f ld $9f 1d35 00f7 ld $f7 1d36 0069 ld $69 1d37 0055 ld $55 1d38 0055 ld $55 1d39 0095 ld $95 1d3a 00ea ld $ea 1d3b 00a7 ld $a7 1d3c 007d ld $7d 1d3d 00ef ld $ef 1d3e 00fb ld $fb 1d3f 00ae ld $ae 1d40 00af ld $af 1d41 00bb ld $bb 1d42 00be ld $be 1d43 00ef ld $ef 1d44 00f7 ld $f7 1d45 00be ld $be 1d46 00fb ld $fb 1d47 00ab ld $ab 1d48 00aa ld $aa 1d49 00bf ld $bf 1d4a 00ef ld $ef 1d4b 00fa ld $fa 1d4c 00ff ld $ff 1d4d 00eb ld $eb 1d4e 00f6 ld $f6 1d4f 00ef ld $ef 1d50 0097 ld $97 1d51 0076 ld $76 1d52 0059 ld $59 1d53 0085 ld $85 1d54 006a ld $6a 1d55 009a ld $9a 1d56 00a7 ld $a7 1d57 0069 ld $69 1d58 005a ld $5a 1d59 00e6 ld $e6 1d5a 00ba ld $ba 1d5b 00aa ld $aa 1d5c 00ea ld $ea 1d5d 00a9 ld $a9 1d5e 00ae ld $ae 1d5f 00ff ld $ff 1d60 007f ld $7f 1d61 009a ld $9a 1d62 00f7 ld $f7 1d63 007d ld $7d 1d64 00df ld $df 1d65 00a7 ld $a7 1d66 0055 ld $55 1d67 0095 ld $95 1d68 0055 ld $55 1d69 0015 ld $15 1d6a 00a5 ld $a5 1d6b 00fe ld $fe 1d6c 00bf ld $bf 1d6d 00fa ld $fa 1d6e 00ab ld $ab 1d6f 00aa ld $aa 1d70 00aa ld $aa 1d71 00aa ld $aa 1d72 00ff ld $ff 1d73 00ef ld $ef 1d74 00eb ld $eb 1d75 00be ld $be 1d76 00af ld $af 1d77 00ab ld $ab 1d78 00fe ld $fe 1d79 00be ld $be 1d7a 00eb ld $eb 1d7b 00bb ld $bb 1d7c 00fd ld $fd 1d7d 00ef ld $ef 1d7e 00fb ld $fb 1d7f 00bf ld $bf 1d80 00eb ld $eb 1d81 0076 ld $76 1d82 0069 ld $69 1d83 0096 ld $96 1d84 00ba ld $ba 1d85 009a ld $9a 1d86 00a6 ld $a6 1d87 0065 ld $65 1d88 0085 ld $85 1d89 0096 ld $96 1d8a 00ba ld $ba 1d8b 009a ld $9a 1d8c 00ab ld $ab 1d8d 00ba ld $ba 1d8e 009e ld $9e 1d8f 00ab ld $ab 1d90 007f ld $7f 1d91 00de ld $de 1d92 00f7 ld $f7 1d93 006d ld $6d 1d94 009f ld $9f 1d95 0055 ld $55 1d96 0099 ld $99 1d97 00aa ld $aa 1d98 0056 ld $56 1d99 0045 ld $45 1d9a 0055 ld $55 1d9b 00a9 ld $a9 1d9c 009a ld $9a 1d9d 00aa ld $aa 1d9e 00aa ld $aa 1d9f 0055 ld $55 1da0 00aa ld $aa 1da1 0095 ld $95 1da2 00aa ld $aa 1da3 00aa ld $aa 1da4 00aa ld $aa * 5 times 1da7 006a ld $6a 1da8 00b6 ld $b6 1da9 00ae ld $ae 1daa 00ef ld $ef 1dab 00ff ld $ff 1dac 00ae ld $ae 1dad 00bf ld $bf 1dae 00ff ld $ff 1daf 00ff ld $ff 1db0 00ef ld $ef 1db1 00ba ld $ba 1db2 00ae ld $ae 1db3 00ef ld $ef 1db4 007f ld $7f 1db5 00a5 ld $a5 1db6 0096 ld $96 1db7 0069 ld $69 1db8 005a ld $5a 1db9 00a6 ld $a6 1dba 00a9 ld $a9 1dbb 00af ld $af 1dbc 00e6 ld $e6 1dbd 00b9 ld $b9 1dbe 00aa ld $aa 1dbf 00fb ld $fb 1dc0 00bf ld $bf 1dc1 009a ld $9a 1dc2 00e7 ld $e7 1dc3 007a ld $7a 1dc4 005a ld $5a 1dc5 0055 ld $55 1dc6 0056 ld $56 1dc7 0065 ld $65 1dc8 0055 ld $55 1dc9 0055 ld $55 1dca 0055 ld $55 1dcb 0055 ld $55 1dcc 00a5 ld $a5 1dcd 0065 ld $65 1dce 00a9 ld $a9 1dcf 0056 ld $56 1dd0 0095 ld $95 1dd1 0055 ld $55 1dd2 00aa ld $aa 1dd3 00a5 ld $a5 1dd4 0099 ld $99 1dd5 009a ld $9a 1dd6 0065 ld $65 1dd7 0055 ld $55 1dd8 0056 ld $56 1dd9 0065 ld $65 1dda 0095 ld $95 1ddb 00ab ld $ab 1ddc 00fe ld $fe 1ddd 00ff ld $ff 1dde 00ff ld $ff 1ddf 00ff ld $ff 1de0 00ab ld $ab 1de1 00aa ld $aa 1de2 006d ld $6d 1de3 00fb ld $fb 1de4 00af ld $af 1de5 0096 ld $96 1de6 00a6 ld $a6 1de7 0066 ld $66 1de8 005a ld $5a 1de9 00a6 ld $a6 1dea 00b9 ld $b9 1deb 00aa ld $aa 1dec 00ab ld $ab 1ded 00ba ld $ba 1dee 00ee ld $ee 1def 00ff ld $ff 1df0 00bf ld $bf 1df1 006a ld $6a 1df2 0055 ld $55 1df3 0055 ld $55 1df4 0051 ld $51 1df5 0055 ld $55 1df6 0095 ld $95 1df7 00a5 ld $a5 1df8 006a ld $6a 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 00a5 ld $a5 1e01 00a6 ld $a6 1e02 0056 ld $56 1e03 009a ld $9a 1e04 00a9 ld $a9 1e05 00a9 ld $a9 1e06 006a ld $6a 1e07 00a5 ld $a5 1e08 009a ld $9a 1e09 00aa ld $aa 1e0a 006a ld $6a 1e0b 00a5 ld $a5 1e0c 0056 ld $56 1e0d 006a ld $6a 1e0e 0065 ld $65 1e0f 0056 ld $56 1e10 00a5 ld $a5 1e11 0055 ld $55 1e12 0056 ld $56 1e13 0066 ld $66 1e14 00aa ld $aa 1e15 00ff ld $ff 1e16 00ff ld $ff 1e17 00db ld $db 1e18 00ba ld $ba 1e19 006e ld $6e 1e1a 00da ld $da 1e1b 00bf ld $bf 1e1c 00aa ld $aa 1e1d 00aa ld $aa 1e1e 006a ld $6a 1e1f 009a ld $9a 1e20 00a6 ld $a6 1e21 00a5 ld $a5 1e22 00ae ld $ae 1e23 00e6 ld $e6 1e24 00aa ld $aa 1e25 00ae ld $ae 1e26 006a ld $6a 1e27 0055 ld $55 1e28 0054 ld $54 1e29 0054 ld $54 1e2a 0056 ld $56 1e2b 0065 ld $65 1e2c 0059 ld $59 1e2d 0056 ld $56 1e2e 0065 ld $65 1e2f 00a9 ld $a9 1e30 006a ld $6a 1e31 00e5 ld $e5 1e32 00af ld $af 1e33 00fa ld $fa 1e34 00ea ld $ea 1e35 00eb ld $eb 1e36 00bf ld $bf 1e37 005a ld $5a 1e38 0069 ld $69 1e39 00bf ld $bf 1e3a 00af ld $af 1e3b 00bb ld $bb 1e3c 00bb ld $bb 1e3d 00aa ld $aa 1e3e 00aa ld $aa 1e3f 00a6 ld $a6 1e40 0066 ld $66 1e41 005a ld $5a 1e42 0095 ld $95 1e43 0055 ld $55 1e44 0055 ld $55 1e45 00a6 ld $a6 1e46 00fa ld $fa 1e47 00d7 ld $d7 1e48 00ba ld $ba 1e49 005e ld $5e 1e4a 0097 ld $97 1e4b 00ba ld $ba 1e4c 00aa ld $aa 1e4d 00aa ld $aa 1e4e 00aa ld $aa 1e4f 009a ld $9a 1e50 00a6 ld $a6 1e51 00a9 ld $a9 1e52 00ae ld $ae 1e53 00ab ld $ab 1e54 0065 ld $65 1e55 0055 ld $55 1e56 0044 ld $44 1e57 0045 ld $45 1e58 0065 ld $65 1e59 0055 ld $55 1e5a 0056 ld $56 1e5b 0065 ld $65 1e5c 00a5 ld $a5 1e5d 00aa ld $aa 1e5e 00aa ld $aa 1e5f 00fe ld $fe 1e60 0059 ld $59 1e61 00a5 ld $a5 1e62 00fe ld $fe 1e63 00fe ld $fe 1e64 00af ld $af 1e65 00ea ld $ea 1e66 00bf ld $bf 1e67 009a ld $9a 1e68 00ea ld $ea 1e69 00bf ld $bf 1e6a 00fb ld $fb 1e6b 00ff ld $ff 1e6c 00ba ld $ba 1e6d 00be ld $be 1e6e 00ef ld $ef 1e6f 00bf ld $bf 1e70 00ae ld $ae 1e71 00aa ld $aa 1e72 00aa ld $aa 1e73 0065 ld $65 1e74 0059 ld $59 1e75 0099 ld $99 1e76 0055 ld $55 1e77 0085 ld $85 1e78 00a6 ld $a6 1e79 00ae ld $ae 1e7a 0097 ld $97 1e7b 00b6 ld $b6 1e7c 005a ld $5a 1e7d 00a9 ld $a9 1e7e 00be ld $be 1e7f 006e ld $6e 1e80 00e6 ld $e6 1e81 006a ld $6a 1e82 006a ld $6a 1e83 0055 ld $55 1e84 0045 ld $45 1e85 0051 ld $51 1e86 0055 ld $55 1e87 0096 ld $96 1e88 0055 ld $55 1e89 0059 ld $59 1e8a 00aa ld $aa 1e8b 00aa ld $aa 1e8c 006a ld $6a 1e8d 00aa ld $aa 1e8e 00aa ld $aa 1e8f 00fe ld $fe 1e90 006a ld $6a 1e91 0066 ld $66 1e92 00f9 ld $f9 1e93 00ab ld $ab 1e94 00aa ld $aa 1e95 00aa ld $aa 1e96 00ff ld $ff 1e97 00ff ld $ff 1e98 00fe ld $fe 1e99 00be ld $be 1e9a 00fe ld $fe 1e9b 00eb ld $eb 1e9c 00ae ld $ae 1e9d 006e ld $6e 1e9e 00fb ld $fb 1e9f 00fa ld $fa 1ea0 00be ld $be 1ea1 00eb ld $eb 1ea2 00bb ld $bb 1ea3 00ae ld $ae 1ea4 006a ld $6a 1ea5 0066 ld $66 1ea6 0065 ld $65 1ea7 00e9 ld $e9 1ea8 00f5 ld $f5 1ea9 00fe ld $fe 1eaa 0097 ld $97 1eab 00f5 ld $f5 1eac 005b ld $5b 1ead 0055 ld $55 1eae 00aa ld $aa 1eaf 00ef ld $ef 1eb0 00aa ld $aa 1eb1 0055 ld $55 1eb2 0054 ld $54 1eb3 0044 ld $44 1eb4 0095 ld $95 1eb5 0065 ld $65 1eb6 0059 ld $59 1eb7 00a5 ld $a5 1eb8 00a6 ld $a6 1eb9 00a6 ld $a6 1eba 0069 ld $69 1ebb 00ef ld $ef 1ebc 00ab ld $ab 1ebd 00aa ld $aa 1ebe 00ea ld $ea 1ebf 00ea ld $ea 1ec0 00fa ld $fa 1ec1 00af ld $af 1ec2 00aa ld $aa 1ec3 006a ld $6a 1ec4 00b5 ld $b5 1ec5 00fe ld $fe 1ec6 00bf ld $bf 1ec7 00ff ld $ff 1ec8 00fb ld $fb 1ec9 00fb ld $fb 1eca 00ef ld $ef 1ecb 00eb ld $eb 1ecc 00ea ld $ea 1ecd 00fe ld $fe 1ece 00af ld $af 1ecf 00b6 ld $b6 1ed0 006e ld $6e 1ed1 00ef ld $ef 1ed2 00b6 ld $b6 1ed3 006e ld $6e 1ed4 00eb ld $eb 1ed5 00aa ld $aa 1ed6 006a ld $6a 1ed7 00ad ld $ad 1ed8 00ff ld $ff 1ed9 00ff ld $ff 1eda 00ef ld $ef 1edb 00ff ld $ff 1edc 009e ld $9e 1edd 0056 ld $56 1ede 0069 ld $69 1edf 006a ld $6a 1ee0 0045 ld $45 1ee1 0041 ld $41 1ee2 0051 ld $51 1ee3 0059 ld $59 1ee4 0099 ld $99 1ee5 0055 ld $55 1ee6 006a ld $6a 1ee7 00aa ld $aa 1ee8 00ae ld $ae 1ee9 00ea ld $ea 1eea 0069 ld $69 1eeb 00ee ld $ee 1eec 00eb ld $eb 1eed 009a ld $9a 1eee 00aa ld $aa 1eef 00aa ld $aa 1ef0 00ba ld $ba 1ef1 00ea ld $ea 1ef2 00ab ld $ab 1ef3 00aa ld $aa 1ef4 00ea ld $ea 1ef5 00ff ld $ff 1ef6 00ea ld $ea 1ef7 00bf ld $bf 1ef8 00fb ld $fb 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 00bf ld $bf 1f01 00ee ld $ee 1f02 00ea ld $ea 1f03 00bf ld $bf 1f04 00fe ld $fe 1f05 00ab ld $ab 1f06 00a6 ld $a6 1f07 00a9 ld $a9 1f08 00db ld $db 1f09 00b7 ld $b7 1f0a 007e ld $7e 1f0b 00db ld $db 1f0c 00f6 ld $f6 1f0d 00af ld $af 1f0e 00ea ld $ea 1f0f 00bb ld $bb 1f10 00ff ld $ff 1f11 00ff ld $ff 1f12 00fe ld $fe 1f13 00af ld $af 1f14 0056 ld $56 1f15 0055 ld $55 1f16 0054 ld $54 1f17 0010 ld $10 1f18 0095 ld $95 1f19 0059 ld $59 1f1a 0059 ld $59 1f1b 0056 ld $56 1f1c 00aa ld $aa 1f1d 00fb ld $fb 1f1e 006a ld $6a 1f1f 009a ld $9a 1f20 00b6 ld $b6 1f21 007a ld $7a 1f22 00eb ld $eb 1f23 00ff ld $ff 1f24 00aa ld $aa 1f25 00a6 ld $a6 1f26 00aa ld $aa 1f27 00ae ld $ae 1f28 00aa ld $aa 1f29 00aa ld $aa 1f2a 009a ld $9a 1f2b 00fa ld $fa 1f2c 00fb ld $fb 1f2d 00fa ld $fa 1f2e 00ef ld $ef 1f2f 00fe ld $fe 1f30 00be ld $be 1f31 00ee ld $ee 1f32 00ff ld $ff 1f33 00ff ld $ff 1f34 00fe ld $fe 1f35 00ef ld $ef 1f36 00fe ld $fe 1f37 006f ld $6f 1f38 00db ld $db 1f39 00fa ld $fa 1f3a 00fe ld $fe 1f3b 00eb ld $eb 1f3c 00eb ld $eb 1f3d 00ff ld $ff 1f3e 00ab ld $ab 1f3f 00ea ld $ea 1f40 00ba ld $ba 1f41 00ef ld $ef 1f42 00ab ld $ab 1f43 009a ld $9a 1f44 0045 ld $45 1f45 0045 ld $45 1f46 0050 ld $50 1f47 0059 ld $59 1f48 005a ld $5a 1f49 0065 ld $65 1f4a 00a9 ld $a9 1f4b 00fa ld $fa 1f4c 00af ld $af 1f4d 00eb ld $eb 1f4e 00bb ld $bb 1f4f 00ab ld $ab 1f50 00ea ld $ea 1f51 007d ld $7d 1f52 00fe ld $fe 1f53 00fa ld $fa 1f54 00aa ld $aa 1f55 0095 ld $95 1f56 0069 ld $69 1f57 00a5 ld $a5 1f58 009a ld $9a 1f59 005a ld $5a 1f5a 009a ld $9a 1f5b 00ea ld $ea 1f5c 00ab ld $ab 1f5d 00aa ld $aa 1f5e 00ef ld $ef 1f5f 00ff ld $ff 1f60 00be ld $be 1f61 00fa ld $fa 1f62 00ff ld $ff 1f63 00fb ld $fb 1f64 00ff ld $ff 1f65 00ff ld $ff 1f66 00ff ld $ff 1f67 00bf ld $bf 1f68 00ab ld $ab 1f69 00e6 ld $e6 1f6a 00ff ld $ff 1f6b 00ff ld $ff 1f6c 00fa ld $fa 1f6d 00ff ld $ff 1f6e 00eb ld $eb 1f6f 00ea ld $ea 1f70 00ef ld $ef 1f71 00ef ld $ef 1f72 006a ld $6a 1f73 0014 ld $14 1f74 0004 ld $04 1f75 0055 ld $55 1f76 0065 ld $65 1f77 0095 ld $95 1f78 0096 ld $96 1f79 00aa ld $aa 1f7a 00e7 ld $e7 1f7b 00fa ld $fa 1f7c 00eb ld $eb 1f7d 00ff ld $ff 1f7e 00fe ld $fe 1f7f 009e ld $9e 1f80 00ba ld $ba 1f81 00b9 ld $b9 1f82 00af ld $af 1f83 00fb ld $fb 1f84 006a ld $6a 1f85 0066 ld $66 1f86 0055 ld $55 1f87 006a ld $6a 1f88 0065 ld $65 1f89 0055 ld $55 1f8a 009a ld $9a 1f8b 00af ld $af 1f8c 00ea ld $ea 1f8d 00e9 ld $e9 1f8e 00bf ld $bf 1f8f 00fb ld $fb 1f90 00ea ld $ea 1f91 00ff ld $ff 1f92 00ff ld $ff 1f93 00ff ld $ff * 9 times 1f9a 00bf ld $bf 1f9b 00ef ld $ef 1f9c 00ff ld $ff 1f9d 00ff ld $ff 1f9e 00ef ld $ef 1f9f 00fb ld $fb 1fa0 00ff ld $ff 1fa1 005b ld $5b 1fa2 0055 ld $55 1fa3 0050 ld $50 1fa4 0054 ld $54 1fa5 005a ld $5a 1fa6 0069 ld $69 1fa7 0069 ld $69 1fa8 006a ld $6a 1fa9 00ae ld $ae 1faa 00ab ld $ab 1fab 00ba ld $ba 1fac 00fe ld $fe 1fad 00ff ld $ff 1fae 00fa ld $fa 1faf 009b ld $9b 1fb0 00a6 ld $a6 1fb1 0079 ld $79 1fb2 00ea ld $ea 1fb3 00ab ld $ab 1fb4 00aa ld $aa 1fb5 0056 ld $56 1fb6 0055 ld $55 1fb7 0099 ld $99 1fb8 0095 ld $95 1fb9 0015 ld $15 1fba 00aa ld $aa 1fbb 00ee ld $ee 1fbc 00a6 ld $a6 1fbd 00aa ld $aa 1fbe 00ef ld $ef 1fbf 00ab ld $ab 1fc0 00ff ld $ff 1fc1 00ff ld $ff 1fc2 00ff ld $ff * 5 times 1fc5 00ef ld $ef 1fc6 00bf ld $bf 1fc7 00fe ld $fe 1fc8 00ff ld $ff 1fc9 00ff ld $ff 1fca 00ef ld $ef 1fcb 00ef ld $ef 1fcc 00fe ld $fe 1fcd 00bf ld $bf 1fce 009b ld $9b 1fcf 00ba ld $ba 1fd0 006e ld $6e 1fd1 0001 ld $01 1fd2 0041 ld $41 1fd3 0050 ld $50 1fd4 0055 ld $55 1fd5 0096 ld $96 1fd6 0055 ld $55 1fd7 00a9 ld $a9 1fd8 00b9 ld $b9 1fd9 00af ld $af 1fda 00ea ld $ea 1fdb 00be ld $be 1fdc 00ae ld $ae 1fdd 00bf ld $bf 1fde 00fa ld $fa 1fdf 00af ld $af 1fe0 00a6 ld $a6 1fe1 007e ld $7e 1fe2 00de ld $de 1fe3 00ab ld $ab 1fe4 00aa ld $aa 1fe5 009a ld $9a 1fe6 0059 ld $59 1fe7 0095 ld $95 1fe8 0055 ld $55 1fe9 0015 ld $15 1fea 005a ld $5a 1feb 009a ld $9a 1fec 00aa ld $aa 1fed 00a9 ld $a9 1fee 00ea ld $ea 1fef 00ff ld $ff 1ff0 00ff ld $ff 1ff1 00ff ld $ff * 6 times 1ff5 00fb ld $fb 1ff6 00ff ld $ff 1ff7 00bf ld $bf 1ff8 00bf ld $bf 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 00fb ld $fb 2001 00ff ld $ff 2002 00af ld $af 2003 00ff ld $ff 2004 00ff ld $ff 2005 00fb ld $fb 2006 00bb ld $bb 2007 005a ld $5a 2008 0004 ld $04 2009 0045 ld $45 200a 00a5 ld $a5 200b 0059 ld $59 200c 0056 ld $56 200d 00aa ld $aa 200e 00e6 ld $e6 200f 00ad ld $ad 2010 00ee ld $ee 2011 00eb ld $eb 2012 00fa ld $fa 2013 00ab ld $ab 2014 00fb ld $fb 2015 00ba ld $ba 2016 00af ld $af 2017 00a6 ld $a6 2018 0069 ld $69 2019 009e ld $9e 201a 00f6 ld $f6 201b 00aa ld $aa 201c 00aa ld $aa 201d 0055 ld $55 201e 0045 ld $45 201f 0056 ld $56 2020 0054 ld $54 2021 006a ld $6a 2022 00ea ld $ea 2023 00a6 ld $a6 2024 00a5 ld $a5 2025 00ab ld $ab 2026 00ff ld $ff 2027 00bf ld $bf 2028 00fe ld $fe 2029 00ff ld $ff 202a 00ff ld $ff 202b 00eb ld $eb 202c 00ef ld $ef 202d 00ef ld $ef 202e 00ff ld $ff 202f 00fb ld $fb 2030 00ff ld $ff 2031 00ef ld $ef 2032 00ff ld $ff 2033 00ff ld $ff 2034 00ff ld $ff 2035 00ff ld $ff 2036 006a ld $6a 2037 0010 ld $10 2038 0054 ld $54 2039 0095 ld $95 203a 0059 ld $59 203b 0059 ld $59 203c 0069 ld $69 203d 00aa ld $aa 203e 00a6 ld $a6 203f 00b9 ld $b9 2040 00ab ld $ab 2041 00bb ld $bb 2042 00ba ld $ba 2043 00ee ld $ee 2044 00ab ld $ab 2045 00fe ld $fe 2046 00af ld $af 2047 00a2 ld $a2 2048 0069 ld $69 2049 009a ld $9a 204a 00a7 ld $a7 204b 00ba ld $ba 204c 009a ld $9a 204d 0019 ld $19 204e 0045 ld $45 204f 0055 ld $55 2050 00a8 ld $a8 2051 0069 ld $69 2052 009a ld $9a 2053 00a6 ld $a6 2054 00a9 ld $a9 2055 0069 ld $69 2056 00ea ld $ea 2057 00a6 ld $a6 2058 00a9 ld $a9 2059 00eb ld $eb 205a 00fb ld $fb 205b 00fe ld $fe 205c 00ff ld $ff 205d 00ff ld $ff 205e 00ff ld $ff 205f 00ef ld $ef 2060 00ff ld $ff 2061 00ff ld $ff 2062 00ff ld $ff * 6 times 2066 0045 ld $45 2067 0050 ld $50 2068 0055 ld $55 2069 005a ld $5a 206a 0065 ld $65 206b 00aa ld $aa 206c 0025 ld $25 206d 00aa ld $aa 206e 00e7 ld $e7 206f 00a9 ld $a9 2070 009f ld $9f 2071 00bb ld $bb 2072 00ba ld $ba 2073 00af ld $af 2074 00fb ld $fb 2075 00ba ld $ba 2076 009a ld $9a 2077 0092 ld $92 2078 0069 ld $69 2079 009a ld $9a 207a 00a7 ld $a7 207b 00a9 ld $a9 207c 006b ld $6b 207d 0065 ld $65 207e 0056 ld $56 207f 0061 ld $61 2080 0065 ld $65 2081 0069 ld $69 2082 00aa ld $aa 2083 00a2 ld $a2 2084 0095 ld $95 2085 006d ld $6d 2086 00db ld $db 2087 00ba ld $ba 2088 00be ld $be 2089 00ea ld $ea 208a 00bb ld $bb 208b 00be ld $be 208c 00ff ld $ff 208d 00ff ld $ff 208e 00af ld $af 208f 00bf ld $bf 2090 00ff ld $ff 2091 00ff ld $ff 2092 00ff ld $ff 2093 00ff ld $ff 2094 00fe ld $fe 2095 00ff ld $ff 2096 0041 ld $41 2097 0055 ld $55 2098 0059 ld $59 2099 0096 ld $96 209a 00aa ld $aa 209b 00ef ld $ef 209c 0069 ld $69 209d 00aa ld $aa 209e 00aa ld $aa 209f 0079 ld $79 20a0 00ab ld $ab 20a1 00ab ld $ab 20a2 00bd ld $bd 20a3 00aa ld $aa 20a4 00fb ld $fb 20a5 00ab ld $ab 20a6 009b ld $9b 20a7 0056 ld $56 20a8 0039 ld $39 20a9 009a ld $9a 20aa 00e6 ld $e6 20ab 00aa ld $aa 20ac 00aa ld $aa 20ad 0055 ld $55 20ae 009a ld $9a 20af 0096 ld $96 20b0 0066 ld $66 20b1 0065 ld $65 20b2 00aa ld $aa 20b3 0092 ld $92 20b4 00a9 ld $a9 20b5 00ae ld $ae 20b6 00ff ld $ff 20b7 00ff ld $ff 20b8 00ef ld $ef 20b9 00ef ld $ef 20ba 00ea ld $ea 20bb 00fe ld $fe 20bc 00fb ld $fb 20bd 00ff ld $ff 20be 00ff ld $ff 20bf 00ef ld $ef 20c0 00ff ld $ff 20c1 00bf ld $bf 20c2 00ff ld $ff 20c3 00ff ld $ff 20c4 00ff ld $ff 20c5 00ff ld $ff 20c6 0095 ld $95 20c7 00a5 ld $a5 20c8 0056 ld $56 20c9 00ea ld $ea 20ca 00be ld $be 20cb 00da ld $da 20cc 006a ld $6a 20cd 009a ld $9a 20ce 00f7 ld $f7 20cf 0069 ld $69 20d0 00ea ld $ea 20d1 00b7 ld $b7 20d2 00aa ld $aa 20d3 00ee ld $ee 20d4 00eb ld $eb 20d5 00be ld $be 20d6 009a ld $9a 20d7 0096 ld $96 20d8 0068 ld $68 20d9 009a ld $9a 20da 00a6 ld $a6 20db 00a9 ld $a9 20dc 00aa ld $aa 20dd 0055 ld $55 20de 0056 ld $56 20df 005a ld $5a 20e0 00a5 ld $a5 20e1 0069 ld $69 20e2 009a ld $9a 20e3 0056 ld $56 20e4 009a ld $9a 20e5 00ed ld $ed 20e6 00ef ld $ef 20e7 00af ld $af 20e8 00fe ld $fe 20e9 00ee ld $ee 20ea 00ba ld $ba 20eb 00be ld $be 20ec 00ff ld $ff 20ed 00ea ld $ea 20ee 00fa ld $fa 20ef 00ff ld $ff 20f0 00fe ld $fe 20f1 00ff ld $ff 20f2 00fb ld $fb 20f3 00ff ld $ff 20f4 00ff ld $ff 20f5 00ff ld $ff 20f6 0056 ld $56 20f7 0066 ld $66 20f8 00a9 ld $a9 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 00ff ld $ff 2101 00ff ld $ff 2102 00eb ld $eb 2103 006a ld $6a 2104 00aa ld $aa 2105 00ea ld $ea 2106 0069 ld $69 2107 009a ld $9a 2108 00ab ld $ab 2109 00a9 ld $a9 210a 00eb ld $eb 210b 00eb ld $eb 210c 006e ld $6e 210d 005a ld $5a 210e 00a1 ld $a1 210f 0025 ld $25 2110 009a ld $9a 2111 00a7 ld $a7 2112 0065 ld $65 2113 00aa ld $aa 2114 0025 ld $25 2115 0059 ld $59 2116 009a ld $9a 2117 0095 ld $95 2118 0059 ld $59 2119 009a ld $9a 211a 0092 ld $92 211b 00aa ld $aa 211c 006e ld $6e 211d 00eb ld $eb 211e 00a6 ld $a6 211f 00aa ld $aa 2120 00eb ld $eb 2121 00bb ld $bb 2122 00ae ld $ae 2123 00ee ld $ee 2124 00a6 ld $a6 2125 00be ld $be 2126 00bf ld $bf 2127 00ff ld $ff 2128 00fe ld $fe 2129 00fe ld $fe 212a 00ff ld $ff 212b 00ff ld $ff 212c 00ff ld $ff 212d 00a9 ld $a9 212e 00b5 ld $b5 212f 00ff ld $ff 2130 00ff ld $ff 2131 00af ld $af 2132 00eb ld $eb 2133 007b ld $7b 2134 00ea ld $ea 2135 00a7 ld $a7 2136 007a ld $7a 2137 009a ld $9a 2138 00b7 ld $b7 2139 007a ld $7a 213a 00aa ld $aa 213b 00fe ld $fe 213c 006a ld $6a 213d 005a ld $5a 213e 00a5 ld $a5 213f 0064 ld $64 2140 009a ld $9a 2141 00a6 ld $a6 2142 0059 ld $59 2143 00ea ld $ea 2144 005a ld $5a 2145 0055 ld $55 2146 0056 ld $56 2147 0066 ld $66 2148 0065 ld $65 2149 004a ld $4a 214a 0056 ld $56 214b 00aa ld $aa 214c 00be ld $be 214d 00eb ld $eb 214e 00ba ld $ba 214f 00ad ld $ad 2150 00eb ld $eb 2151 00fb ld $fb 2152 00be ld $be 2153 00eb ld $eb 2154 00fb ld $fb 2155 00ff ld $ff 2156 00ff ld $ff 2157 00ff ld $ff * 6 times 215b 00ae ld $ae 215c 00ff ld $ff 215d 0000 ld $00 215e 0000 ld $00 215f 0000 ld $00 2160 00aa ld $aa 2161 00ae ld $ae 2162 00aa ld $aa 2163 00a5 ld $a5 2164 0099 ld $99 2165 009b ld $9b 2166 00a9 ld $a9 2167 00a9 ld $a9 2168 0096 ld $96 2169 006a ld $6a 216a 0069 ld $69 216b 0095 ld $95 216c 0096 ld $96 216d 006a ld $6a 216e 00aa ld $aa 216f 00a6 ld $a6 2170 005a ld $5a 2171 0099 ld $99 2172 009a ld $9a 2173 00a9 ld $a9 2174 00aa ld $aa 2175 00aa ld $aa 2176 00a5 ld $a5 2177 009a ld $9a 2178 00aa ld $aa 2179 00a5 ld $a5 217a 005a ld $5a 217b 00aa ld $aa 217c 00a5 ld $a5 217d 00aa ld $aa 217e 00a6 ld $a6 217f 00aa ld $aa 2180 00aa ld $aa 2181 00a6 ld $a6 2182 0056 ld $56 2183 0059 ld $59 2184 006a ld $6a 2185 0065 ld $65 2186 0056 ld $56 2187 0066 ld $66 2188 0055 ld $55 2189 0056 ld $56 218a 0065 ld $65 218b 0069 ld $69 218c 0096 ld $96 218d 0066 ld $66 218e 00a9 ld $a9 218f 00aa ld $aa 2190 006a ld $6a 2191 00ae ld $ae 2192 0096 ld $96 2193 00b9 ld $b9 2194 005a ld $5a 2195 0096 ld $96 2196 0066 ld $66 2197 00a9 ld $a9 2198 0096 ld $96 2199 00a6 ld $a6 219a 0099 ld $99 219b 009a ld $9a 219c 00a9 ld $a9 219d 00a5 ld $a5 219e 005a ld $5a 219f 00a9 ld $a9 21a0 00aa ld $aa 21a1 00aa ld $aa 21a2 00aa ld $aa * 11 times 21ab 00a6 ld $a6 21ac 006a ld $6a 21ad 00a9 ld $a9 21ae 00aa ld $aa 21af 00a5 ld $a5 21b0 005a ld $5a 21b1 005a ld $5a 21b2 0065 ld $65 21b3 0055 ld $55 21b4 0096 ld $96 21b5 0099 ld $99 21b6 00aa ld $aa 21b7 0099 ld $99 21b8 00a9 ld $a9 21b9 0096 ld $96 21ba 006a ld $6a 21bb 0055 ld $55 21bc 0056 ld $56 21bd 0069 ld $69 21be 0059 ld $59 21bf 00aa ld $aa 21c0 00ba ld $ba 21c1 006a ld $6a 21c2 0097 ld $97 21c3 0066 ld $66 21c4 0059 ld $59 21c5 009a ld $9a 21c6 0069 ld $69 21c7 0069 ld $69 21c8 0096 ld $96 21c9 00aa ld $aa 21ca 006a ld $6a 21cb 0069 ld $69 21cc 0096 ld $96 21cd 005a ld $5a 21ce 00aa ld $aa 21cf 00aa ld $aa 21d0 00aa ld $aa * 5 times 21d3 00a9 ld $a9 21d4 00aa ld $aa 21d5 00aa ld $aa 21d6 00aa ld $aa * 5 times 21d9 0065 ld $65 21da 0055 ld $55 21db 0085 ld $85 21dc 0095 ld $95 21dd 006a ld $6a 21de 0056 ld $56 21df 0055 ld $55 21e0 0059 ld $59 21e1 00a5 ld $a5 21e2 00a5 ld $a5 21e3 0056 ld $56 21e4 00aa ld $aa 21e5 00aa ld $aa 21e6 009a ld $9a 21e7 0066 ld $66 21e8 005a ld $5a 21e9 0095 ld $95 21ea 0095 ld $95 21eb 0099 ld $99 21ec 0096 ld $96 21ed 00a6 ld $a6 21ee 005a ld $5a 21ef 009a ld $9a 21f0 00aa ld $aa 21f1 009e ld $9e 21f2 009a ld $9a 21f3 0069 ld $69 21f4 0059 ld $59 21f5 00aa ld $aa 21f6 00a5 ld $a5 21f7 0059 ld $59 21f8 00aa ld $aa 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 00aa ld $aa 2202 0096 ld $96 2203 00aa ld $aa 2204 00a5 ld $a5 2205 006a ld $6a 2206 00a6 ld $a6 2207 006a ld $6a 2208 00aa ld $aa 2209 00aa ld $aa 220a 006a ld $6a 220b 0059 ld $59 220c 0095 ld $95 220d 00a5 ld $a5 220e 005a ld $5a 220f 0056 ld $56 2210 0055 ld $55 2211 0059 ld $59 2212 00aa ld $aa 2213 00aa ld $aa 2214 009a ld $9a 2215 00aa ld $aa 2216 00aa ld $aa 2217 00aa ld $aa * 7 times 221c 00a9 ld $a9 221d 00a6 ld $a6 221e 00aa ld $aa 221f 00aa ld $aa 2220 00aa ld $aa 2221 0065 ld $65 2222 0069 ld $69 2223 0095 ld $95 2224 0055 ld $55 2225 00a9 ld $a9 2226 00aa ld $aa 2227 00ba ld $ba 2228 005a ld $5a 2229 0096 ld $96 222a 006a ld $6a 222b 0059 ld $59 222c 009a ld $9a 222d 00a5 ld $a5 222e 00aa ld $aa 222f 00ea ld $ea 2230 00aa ld $aa 2231 00a9 ld $a9 2232 00ab ld $ab 2233 00ba ld $ba 2234 00aa ld $aa 2235 00ea ld $ea 2236 00aa ld $aa 2237 00aa ld $aa 2238 00ea ld $ea 2239 00aa ld $aa 223a 00aa ld $aa 223b 00aa ld $aa 223c 0096 ld $96 223d 006a ld $6a 223e 00aa ld $aa 223f 00aa ld $aa 2240 00aa ld $aa * 5 times 2243 00ae ld $ae 2244 00aa ld $aa 2245 00ea ld $ea 2246 00ae ld $ae 2247 00aa ld $aa 2248 00ba ld $ba 2249 00aa ld $aa 224a 00ab ld $ab 224b 00aa ld $aa 224c 00aa ld $aa 224d 00aa ld $aa 224e 00aa ld $aa 224f 0059 ld $59 2250 009a ld $9a 2251 0055 ld $55 2252 0059 ld $59 2253 0096 ld $96 2254 006a ld $6a 2255 0069 ld $69 2256 00a6 ld $a6 2257 00a9 ld $a9 2258 006a ld $6a 2259 00ab ld $ab 225a 0065 ld $65 225b 00a9 ld $a9 225c 0096 ld $96 225d 006a ld $6a 225e 00a9 ld $a9 225f 00aa ld $aa 2260 00aa ld $aa 2261 00ae ld $ae 2262 00fa ld $fa 2263 00aa ld $aa 2264 00af ld $af 2265 00fe ld $fe 2266 00ea ld $ea 2267 00ef ld $ef 2268 00af ld $af 2269 00fe ld $fe 226a 00ea ld $ea 226b 00ab ld $ab 226c 00ba ld $ba 226d 00aa ld $aa 226e 00aa ld $aa 226f 00aa ld $aa 2270 00aa ld $aa 2271 00fe ld $fe 2272 00ba ld $ba 2273 00ba ld $ba 2274 00aa ld $aa 2275 007a ld $7a 2276 00aa ld $aa 2277 00eb ld $eb 2278 00ea ld $ea 2279 00af ld $af 227a 00ae ld $ae 227b 00fa ld $fa 227c 00ab ld $ab 227d 00ab ld $ab 227e 006a ld $6a 227f 006a ld $6a 2280 00a5 ld $a5 2281 00a5 ld $a5 2282 0059 ld $59 2283 0055 ld $55 2284 00a5 ld $a5 2285 005a ld $5a 2286 00aa ld $aa 2287 00aa ld $aa 2288 009d ld $9d 2289 0096 ld $96 228a 00a5 ld $a5 228b 0059 ld $59 228c 0096 ld $96 228d 00a5 ld $a5 228e 0099 ld $99 228f 00aa ld $aa 2290 00aa ld $aa 2291 00aa ld $aa 2292 00ae ld $ae 2293 00ea ld $ea 2294 00fe ld $fe 2295 00aa ld $aa 2296 00b9 ld $b9 2297 009a ld $9a 2298 00eb ld $eb 2299 00aa ld $aa 229a 00aa ld $aa 229b 00fe ld $fe 229c 00aa ld $aa 229d 00af ld $af 229e 00ea ld $ea 229f 00ea ld $ea 22a0 00aa ld $aa 22a1 00ab ld $ab 22a2 00aa ld $aa 22a3 00aa ld $aa 22a4 00e6 ld $e6 22a5 0075 ld $75 22a6 009a ld $9a 22a7 00d7 ld $d7 22a8 00aa ld $aa 22a9 00aa ld $aa 22aa 00aa ld $aa * 6 times 22ae 0066 ld $66 22af 0065 ld $65 22b0 00a6 ld $a6 22b1 0056 ld $56 22b2 0059 ld $59 22b3 0096 ld $96 22b4 0066 ld $66 22b5 006a ld $6a 22b6 0096 ld $96 22b7 0069 ld $69 22b8 0059 ld $59 22b9 00aa ld $aa 22ba 0065 ld $65 22bb 0059 ld $59 22bc 0056 ld $56 22bd 0065 ld $65 22be 00a9 ld $a9 22bf 00ea ld $ea 22c0 00aa ld $aa 22c1 00ea ld $ea 22c2 00ab ld $ab 22c3 00aa ld $aa 22c4 00aa ld $aa 22c5 0097 ld $97 22c6 00b8 ld $b8 22c7 009e ld $9e 22c8 00e6 ld $e6 22c9 00e9 ld $e9 22ca 00aa ld $aa 22cb 00aa ld $aa 22cc 00fe ld $fe 22cd 00ae ld $ae 22ce 00ee ld $ee 22cf 00aa ld $aa 22d0 00ae ld $ae 22d1 00a6 ld $a6 22d2 00a6 ld $a6 22d3 00bf ld $bf 22d4 00a6 ld $a6 22d5 0075 ld $75 22d6 009e ld $9e 22d7 0093 ld $93 22d8 00aa ld $aa 22d9 005a ld $5a 22da 0095 ld $95 22db 00aa ld $aa 22dc 00aa ld $aa 22dd 009a ld $9a 22de 006a ld $6a 22df 0066 ld $66 22e0 0056 ld $56 22e1 0065 ld $65 22e2 00a9 ld $a9 22e3 009a ld $9a 22e4 0055 ld $55 22e5 00a9 ld $a9 22e6 00aa ld $aa 22e7 00aa ld $aa 22e8 00ae ld $ae 22e9 0096 ld $96 22ea 006a ld $6a 22eb 0059 ld $59 22ec 009a ld $9a 22ed 0055 ld $55 22ee 0069 ld $69 22ef 0095 ld $95 22f0 009a ld $9a 22f1 00aa ld $aa 22f2 009a ld $9a 22f3 00a6 ld $a6 22f4 00fa ld $fa 22f5 00ea ld $ea 22f6 0035 ld $35 22f7 005e ld $5e 22f8 00a7 ld $a7 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 00aa ld $aa 2301 00af ld $af 2302 009a ld $9a 2303 00fe ld $fe 2304 00af ld $af 2305 00ea ld $ea 2306 00ea ld $ea 2307 00ae ld $ae 2308 00aa ld $aa 2309 00aa ld $aa 230a 00aa ld $aa 230b 00af ld $af 230c 0039 ld $39 230d 005d ld $5d 230e 00ab ld $ab 230f 00aa ld $aa 2310 006a ld $6a 2311 005a ld $5a 2312 00aa ld $aa 2313 0059 ld $59 2314 0069 ld $69 2315 0065 ld $65 2316 0069 ld $69 2317 00a6 ld $a6 2318 0066 ld $66 2319 0055 ld $55 231a 0056 ld $56 231b 00aa ld $aa 231c 0059 ld $59 231d 00aa ld $aa 231e 0075 ld $75 231f 00a9 ld $a9 2320 0097 ld $97 2321 00a9 ld $a9 2322 0059 ld $59 2323 00a6 ld $a6 2324 00a5 ld $a5 2325 005a ld $5a 2326 006a ld $6a 2327 00a5 ld $a5 2328 0069 ld $69 2329 006a ld $6a 232a 0095 ld $95 232b 00a9 ld $a9 232c 00bf ld $bf 232d 00aa ld $aa 232e 009e ld $9e 232f 00eb ld $eb 2330 00bf ld $bf 2331 00ae ld $ae 2332 00aa ld $aa 2333 00aa ld $aa 2334 00ee ld $ee 2335 00ab ld $ab 2336 00ba ld $ba 2337 009a ld $9a 2338 009a ld $9a 2339 00aa ld $aa 233a 00aa ld $aa 233b 00bf ld $bf 233c 00fa ld $fa 233d 00ab ld $ab 233e 00aa ld $aa 233f 006a ld $6a 2340 0059 ld $59 2341 00a9 ld $a9 2342 00aa ld $aa 2343 00a6 ld $a6 2344 009a ld $9a 2345 00a5 ld $a5 2346 0055 ld $55 2347 0095 ld $95 2348 0055 ld $55 2349 0059 ld $59 234a 0095 ld $95 234b 00a5 ld $a5 234c 005a ld $5a 234d 00aa ld $aa 234e 00aa ld $aa 234f 005a ld $5a 2350 009a ld $9a 2351 0065 ld $65 2352 0059 ld $59 2353 0096 ld $96 2354 0066 ld $66 2355 0059 ld $59 2356 00aa ld $aa 2357 0095 ld $95 2358 00aa ld $aa 2359 00aa ld $aa 235a 0066 ld $66 235b 0066 ld $66 235c 00aa ld $aa 235d 00fa ld $fa 235e 00ab ld $ab 235f 00be ld $be 2360 00aa ld $aa 2361 0055 ld $55 2362 00aa ld $aa 2363 00aa ld $aa 2364 00aa ld $aa 2365 00ab ld $ab 2366 007a ld $7a 2367 00aa ld $aa 2368 00ea ld $ea 2369 00aa ld $aa 236a 00a5 ld $a5 236b 009a ld $9a 236c 00aa ld $aa 236d 00aa ld $aa 236e 005a ld $5a 236f 0095 ld $95 2370 00a6 ld $a6 2371 00aa ld $aa 2372 0066 ld $66 2373 006a ld $6a 2374 006a ld $6a 2375 0055 ld $55 2376 0065 ld $65 2377 0056 ld $56 2378 00a5 ld $a5 2379 0055 ld $55 237a 009a ld $9a 237b 0065 ld $65 237c 00a9 ld $a9 237d 0096 ld $96 237e 00a9 ld $a9 237f 005e ld $5e 2380 009a ld $9a 2381 0069 ld $69 2382 0069 ld $69 2383 0096 ld $96 2384 0065 ld $65 2385 0059 ld $59 2386 0095 ld $95 2387 006a ld $6a 2388 0065 ld $65 2389 0056 ld $56 238a 00aa ld $aa 238b 00a9 ld $a9 238c 00aa ld $aa 238d 0096 ld $96 238e 006a ld $6a 238f 005a ld $5a 2390 00a9 ld $a9 2391 00a5 ld $a5 2392 00aa ld $aa 2393 00bf ld $bf 2394 00aa ld $aa 2395 00a7 ld $a7 2396 0069 ld $69 2397 006a ld $6a 2398 00a9 ld $a9 2399 00aa ld $aa 239a 006a ld $6a 239b 00a5 ld $a5 239c 0096 ld $96 239d 005a ld $5a 239e 0095 ld $95 239f 00aa ld $aa 23a0 006a ld $6a 23a1 00aa ld $aa 23a2 00aa ld $aa 23a3 00a9 ld $a9 23a4 0095 ld $95 23a5 006a ld $6a 23a6 0059 ld $59 23a7 0095 ld $95 23a8 0055 ld $55 23a9 0059 ld $59 23aa 0095 ld $95 23ab 0095 ld $95 23ac 005a ld $5a 23ad 009a ld $9a 23ae 007a ld $7a 23af 00a9 ld $a9 23b0 00a6 ld $a6 23b1 0065 ld $65 23b2 0099 ld $99 23b3 0095 ld $95 23b4 00a6 ld $a6 23b5 005a ld $5a 23b6 009a ld $9a 23b7 0055 ld $55 23b8 00aa ld $aa 23b9 00a9 ld $a9 23ba 0056 ld $56 23bb 00aa ld $aa 23bc 00aa ld $aa 23bd 00a9 ld $a9 23be 0099 ld $99 23bf 00aa ld $aa 23c0 00aa ld $aa 23c1 00aa ld $aa 23c2 00aa ld $aa 23c3 006a ld $6a 23c4 00aa ld $aa 23c5 00a6 ld $a6 23c6 00a9 ld $a9 23c7 006e ld $6e 23c8 0099 ld $99 23c9 00aa ld $aa 23ca 006a ld $6a 23cb 0059 ld $59 23cc 0056 ld $56 23cd 00a5 ld $a5 23ce 00aa ld $aa 23cf 00aa ld $aa 23d0 00a9 ld $a9 23d1 0095 ld $95 23d2 006a ld $6a 23d3 00a5 ld $a5 23d4 009a ld $9a 23d5 0095 ld $95 23d6 00a9 ld $a9 23d7 0056 ld $56 23d8 00a5 ld $a5 23d9 0055 ld $55 23da 0056 ld $56 23db 0066 ld $66 23dc 0059 ld $59 23dd 00aa ld $aa 23de 007a ld $7a 23df 005a ld $5a 23e0 009a ld $9a 23e1 00a5 ld $a5 23e2 0059 ld $59 23e3 00aa ld $aa 23e4 0065 ld $65 23e5 0055 ld $55 23e6 0056 ld $56 23e7 00a5 ld $a5 23e8 006a ld $6a 23e9 0096 ld $96 23ea 00aa ld $aa 23eb 00aa ld $aa 23ec 00ae ld $ae 23ed 00aa ld $aa 23ee 00a6 ld $a6 23ef 006a ld $6a 23f0 0096 ld $96 23f1 00a5 ld $a5 23f2 00ae ld $ae 23f3 0056 ld $56 23f4 00aa ld $aa 23f5 00a7 ld $a7 23f6 0065 ld $65 23f7 00aa ld $aa 23f8 00ba ld $ba 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 00aa ld $aa 2401 0050 ld $50 2402 0014 ld $14 2403 0085 ld $85 2404 0061 ld $61 2405 0069 ld $69 2406 00aa ld $aa 2407 00aa ld $aa 2408 00aa ld $aa 2409 00a6 ld $a6 240a 009a ld $9a 240b 009a ld $9a 240c 0055 ld $55 240d 0055 ld $55 240e 0055 ld $55 240f 0055 ld $55 2410 0059 ld $59 2411 0095 ld $95 2412 0095 ld $95 2413 005a ld $5a 2414 00aa ld $aa 2415 00a6 ld $a6 2416 00aa ld $aa 2417 0096 ld $96 2418 00a5 ld $a5 2419 005a ld $5a 241a 0096 ld $96 241b 0065 ld $65 241c 00a9 ld $a9 241d 0096 ld $96 241e 006a ld $6a 241f 00a9 ld $a9 2420 006a ld $6a 2421 00aa ld $aa 2422 00a9 ld $a9 2423 00aa ld $aa 2424 00aa ld $aa 2425 0061 ld $61 2426 0008 ld $08 2427 0045 ld $45 2428 0051 ld $51 2429 00a9 ld $a9 242a 0069 ld $69 242b 00aa ld $aa 242c 0067 ld $67 242d 0039 ld $39 242e 005a ld $5a 242f 00ee ld $ee 2430 005a ld $5a 2431 0011 ld $11 2432 0019 ld $19 2433 0096 ld $96 2434 0065 ld $65 2435 0058 ld $58 2436 009a ld $9a 2437 006a ld $6a 2438 00a9 ld $a9 2439 00aa ld $aa 243a 0059 ld $59 243b 0069 ld $69 243c 00a5 ld $a5 243d 0059 ld $59 243e 0056 ld $56 243f 0066 ld $66 2440 0055 ld $55 2441 005a ld $5a 2442 00a5 ld $a5 2443 006a ld $6a 2444 0096 ld $96 2445 007a ld $7a 2446 0099 ld $99 2447 009a ld $9a 2448 0069 ld $69 2449 0059 ld $59 244a 0096 ld $96 244b 006a ld $6a 244c 0055 ld $55 244d 00aa ld $aa 244e 0065 ld $65 244f 0066 ld $66 2450 00aa ld $aa 2451 00aa ld $aa 2452 00ba ld $ba 2453 006a ld $6a 2454 0096 ld $96 2455 0065 ld $65 2456 0015 ld $15 2457 0095 ld $95 2458 0051 ld $51 2459 00a9 ld $a9 245a 0065 ld $65 245b 009a ld $9a 245c 0096 ld $96 245d 0078 ld $78 245e 009a ld $9a 245f 00aa ld $aa 2460 0055 ld $55 2461 0050 ld $50 2462 0015 ld $15 2463 0041 ld $41 2464 0061 ld $61 2465 0058 ld $58 2466 0096 ld $96 2467 00aa ld $aa 2468 009a ld $9a 2469 00aa ld $aa 246a 00aa ld $aa 246b 0096 ld $96 246c 006a ld $6a 246d 0065 ld $65 246e 0096 ld $96 246f 0055 ld $55 2470 0059 ld $59 2471 0099 ld $99 2472 0055 ld $55 2473 0059 ld $59 2474 00aa ld $aa 2475 00aa ld $aa 2476 005a ld $5a 2477 00aa ld $aa 2478 00a5 ld $a5 2479 005a ld $5a 247a 00aa ld $aa 247b 0065 ld $65 247c 00a9 ld $a9 247d 0096 ld $96 247e 00a6 ld $a6 247f 00aa ld $aa 2480 00aa ld $aa 2481 00aa ld $aa 2482 00aa ld $aa 2483 005a ld $5a 2484 0086 ld $86 2485 0061 ld $61 2486 0015 ld $15 2487 0041 ld $41 2488 0051 ld $51 2489 00e5 ld $e5 248a 0069 ld $69 248b 009a ld $9a 248c 00a7 ld $a7 248d 0028 ld $28 248e 005e ld $5e 248f 00a6 ld $a6 2490 0095 ld $95 2491 0051 ld $51 2492 0009 ld $09 2493 0085 ld $85 2494 0065 ld $65 2495 0055 ld $55 2496 0086 ld $86 2497 00a5 ld $a5 2498 00a9 ld $a9 2499 00a6 ld $a6 249a 006a ld $6a 249b 00a6 ld $a6 249c 0056 ld $56 249d 0059 ld $59 249e 0055 ld $55 249f 0066 ld $66 24a0 0055 ld $55 24a1 0096 ld $96 24a2 0066 ld $66 24a3 00a9 ld $a9 24a4 009a ld $9a 24a5 00a9 ld $a9 24a6 00aa ld $aa 24a7 00a7 ld $a7 24a8 0066 ld $66 24a9 0059 ld $59 24aa 00a6 ld $a6 24ab 0066 ld $66 24ac 00a9 ld $a9 24ad 0096 ld $96 24ae 00a9 ld $a9 24af 00aa ld $aa 24b0 009a ld $9a 24b1 00aa ld $aa 24b2 0066 ld $66 24b3 0058 ld $58 24b4 0096 ld $96 24b5 0050 ld $50 24b6 0058 ld $58 24b7 0045 ld $45 24b8 0054 ld $54 24b9 00a5 ld $a5 24ba 0028 ld $28 24bb 009a ld $9a 24bc 00a7 ld $a7 24bd 0028 ld $28 24be 008e ld $8e 24bf 00a6 ld $a6 24c0 0056 ld $56 24c1 0054 ld $54 24c2 0004 ld $04 24c3 0085 ld $85 24c4 0065 ld $65 24c5 0018 ld $18 24c6 0086 ld $86 24c7 0066 ld $66 24c8 0066 ld $66 24c9 0056 ld $56 24ca 0066 ld $66 24cb 006a ld $6a 24cc 00a5 ld $a5 24cd 0055 ld $55 24ce 009a ld $9a 24cf 0055 ld $55 24d0 0069 ld $69 24d1 0055 ld $55 24d2 00a9 ld $a9 24d3 0055 ld $55 24d4 00aa ld $aa 24d5 0066 ld $66 24d6 006a ld $6a 24d7 00aa ld $aa 24d8 00a9 ld $a9 24d9 00a9 ld $a9 24da 0096 ld $96 24db 0065 ld $65 24dc 00a5 ld $a5 24dd 009a ld $9a 24de 006a ld $6a 24df 0059 ld $59 24e0 00aa ld $aa 24e1 00aa ld $aa 24e2 0065 ld $65 24e3 0014 ld $14 24e4 0056 ld $56 24e5 0051 ld $51 24e6 0005 ld $05 24e7 0055 ld $55 24e8 0051 ld $51 24e9 00e5 ld $e5 24ea 0068 ld $68 24eb 008e ld $8e 24ec 00a2 ld $a2 24ed 0038 ld $38 24ee 008a ld $8a 24ef 00a6 ld $a6 24f0 0045 ld $45 24f1 0011 ld $11 24f2 0015 ld $15 24f3 0056 ld $56 24f4 0060 ld $60 24f5 0014 ld $14 24f6 0056 ld $56 24f7 0065 ld $65 24f8 00a9 ld $a9 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 00a6 ld $a6 2501 0055 ld $55 2502 005a ld $5a 2503 0065 ld $65 2504 0065 ld $65 2505 0095 ld $95 2506 0055 ld $55 2507 0055 ld $55 2508 0056 ld $56 2509 0066 ld $66 250a 0059 ld $59 250b 00aa ld $aa 250c 00ba ld $ba 250d 00aa ld $aa 250e 0097 ld $97 250f 006a ld $6a 2510 0099 ld $99 2511 009a ld $9a 2512 00a9 ld $a9 2513 0099 ld $99 2514 0096 ld $96 2515 0095 ld $95 2516 00a5 ld $a5 2517 005a ld $5a 2518 00aa ld $aa 2519 002a ld $2a 251a 0014 ld $14 251b 0096 ld $96 251c 0051 ld $51 251d 0058 ld $58 251e 0041 ld $41 251f 0051 ld $51 2520 00a2 ld $a2 2521 0028 ld $28 2522 009a ld $9a 2523 00a3 ld $a3 2524 0029 ld $29 2525 004e ld $4e 2526 00a6 ld $a6 2527 0055 ld $55 2528 0050 ld $50 2529 0054 ld $54 252a 0046 ld $46 252b 0021 ld $21 252c 0058 ld $58 252d 0096 ld $96 252e 0061 ld $61 252f 0059 ld $59 2530 006a ld $6a 2531 00a5 ld $a5 2532 0055 ld $55 2533 005a ld $5a 2534 0055 ld $55 2535 0056 ld $56 2536 0065 ld $65 2537 0065 ld $65 2538 0096 ld $96 2539 006a ld $6a 253a 00a9 ld $a9 253b 009a ld $9a 253c 006a ld $6a 253d 006a ld $6a 253e 00aa ld $aa 253f 00a5 ld $a5 2540 005a ld $5a 2541 00aa ld $aa 2542 0065 ld $65 2543 0069 ld $69 2544 00a6 ld $a6 2545 0066 ld $66 2546 005a ld $5a 2547 00a9 ld $a9 2548 009a ld $9a 2549 0065 ld $65 254a 0014 ld $14 254b 0081 ld $81 254c 0015 ld $15 254d 0018 ld $18 254e 0055 ld $55 254f 0050 ld $50 2550 00e1 ld $e1 2551 0068 ld $68 2552 008e ld $8e 2553 00a2 ld $a2 2554 0038 ld $38 2555 008e ld $8e 2556 00a6 ld $a6 2557 0055 ld $55 2558 0011 ld $11 2559 0015 ld $15 255a 0081 ld $81 255b 0051 ld $51 255c 0018 ld $18 255d 0081 ld $81 255e 0061 ld $61 255f 0069 ld $69 2560 0095 ld $95 2561 0055 ld $55 2562 0099 ld $99 2563 0095 ld $95 2564 0059 ld $59 2565 0059 ld $59 2566 0065 ld $65 2567 0055 ld $55 2568 005a ld $5a 2569 00a5 ld $a5 256a 0099 ld $99 256b 009a ld $9a 256c 00aa ld $aa 256d 00aa ld $aa 256e 00e6 ld $e6 256f 006a ld $6a 2570 00a9 ld $a9 2571 0096 ld $96 2572 006a ld $6a 2573 005a ld $5a 2574 0099 ld $99 2575 0099 ld $99 2576 00a9 ld $a9 2577 00aa ld $aa 2578 0056 ld $56 2579 0065 ld $65 257a 0058 ld $58 257b 0085 ld $85 257c 0055 ld $55 257d 0054 ld $54 257e 0046 ld $46 257f 0091 ld $91 2580 00a2 ld $a2 2581 0028 ld $28 2582 008e ld $8e 2583 00a2 ld $a2 2584 0029 ld $29 2585 008e ld $8e 2586 0066 ld $66 2587 0051 ld $51 2588 0011 ld $11 2589 0018 ld $18 258a 0055 ld $55 258b 0060 ld $60 258c 0015 ld $15 258d 0086 ld $86 258e 0051 ld $51 258f 0098 ld $98 2590 0096 ld $96 2591 006a ld $6a 2592 0055 ld $55 2593 0055 ld $55 2594 0055 ld $55 2595 0095 ld $95 2596 0095 ld $95 2597 0056 ld $56 2598 0056 ld $56 2599 0066 ld $66 259a 0066 ld $66 259b 00aa ld $aa 259c 006a ld $6a 259d 00a9 ld $a9 259e 00aa ld $aa 259f 0065 ld $65 25a0 006a ld $6a 25a1 00a6 ld $a6 25a2 0066 ld $66 25a3 0055 ld $55 25a4 00a6 ld $a6 25a5 00a6 ld $a6 25a6 00aa ld $aa 25a7 00aa ld $aa 25a8 009a ld $9a 25a9 0061 ld $61 25aa 0004 ld $04 25ab 0085 ld $85 25ac 0011 ld $11 25ad 0015 ld $15 25ae 0041 ld $41 25af 0055 ld $55 25b0 00a1 ld $a1 25b1 0039 ld $39 25b2 008e ld $8e 25b3 0096 ld $96 25b4 0028 ld $28 25b5 008e ld $8e 25b6 00a7 ld $a7 25b7 0045 ld $45 25b8 0055 ld $55 25b9 0004 ld $04 25ba 0085 ld $85 25bb 0055 ld $55 25bc 0004 ld $04 25bd 0086 ld $86 25be 0065 ld $65 25bf 0058 ld $58 25c0 006a ld $6a 25c1 00a9 ld $a9 25c2 0055 ld $55 25c3 0066 ld $66 25c4 0065 ld $65 25c5 0095 ld $95 25c6 0095 ld $95 25c7 0059 ld $59 25c8 00aa ld $aa 25c9 00a5 ld $a5 25ca 006a ld $6a 25cb 00aa ld $aa 25cc 00a9 ld $a9 25cd 00aa ld $aa 25ce 00ab ld $ab 25cf 00a9 ld $a9 25d0 00a9 ld $a9 25d1 0096 ld $96 25d2 0065 ld $65 25d3 00a9 ld $a9 25d4 0096 ld $96 25d5 006a ld $6a 25d6 00a9 ld $a9 25d7 00aa ld $aa 25d8 0056 ld $56 25d9 0060 ld $60 25da 0058 ld $58 25db 0042 ld $42 25dc 0055 ld $55 25dd 0044 ld $44 25de 0046 ld $46 25df 0051 ld $51 25e0 00e1 ld $e1 25e1 0068 ld $68 25e2 008e ld $8e 25e3 00a2 ld $a2 25e4 0028 ld $28 25e5 008e ld $8e 25e6 00a2 ld $a2 25e7 0051 ld $51 25e8 0011 ld $11 25e9 0015 ld $15 25ea 0055 ld $55 25eb 0011 ld $11 25ec 0058 ld $58 25ed 0085 ld $85 25ee 0050 ld $50 25ef 0058 ld $58 25f0 00aa ld $aa 25f1 0055 ld $55 25f2 0099 ld $99 25f3 006a ld $6a 25f4 0055 ld $55 25f5 0059 ld $59 25f6 0065 ld $65 25f7 0065 ld $65 25f8 0066 ld $66 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 0066 ld $66 2601 00a9 ld $a9 2602 00ab ld $ab 2603 00aa ld $aa 2604 0099 ld $99 2605 00aa ld $aa 2606 006a ld $6a 2607 00a9 ld $a9 2608 00a6 ld $a6 2609 0066 ld $66 260a 0056 ld $56 260b 005a ld $5a 260c 00a9 ld $a9 260d 00a5 ld $a5 260e 00aa ld $aa 260f 0086 ld $86 2610 0061 ld $61 2611 0015 ld $15 2612 0046 ld $46 2613 0061 ld $61 2614 0015 ld $15 2615 0041 ld $41 2616 0055 ld $55 2617 00a1 ld $a1 2618 0038 ld $38 2619 008e ld $8e 261a 0056 ld $56 261b 0068 ld $68 261c 008e ld $8e 261d 00a7 ld $a7 261e 0045 ld $45 261f 0061 ld $61 2620 0044 ld $44 2621 0046 ld $46 2622 0050 ld $50 2623 0019 ld $19 2624 0082 ld $82 2625 0065 ld $65 2626 0058 ld $58 2627 00aa ld $aa 2628 0069 ld $69 2629 0065 ld $65 262a 0056 ld $56 262b 0069 ld $69 262c 00a5 ld $a5 262d 0095 ld $95 262e 005a ld $5a 262f 0099 ld $99 2630 00a9 ld $a9 2631 00a9 ld $a9 2632 009a ld $9a 2633 00aa ld $aa 2634 006a ld $6a 2635 00ab ld $ab 2636 00ba ld $ba 2637 00aa ld $aa 2638 0096 ld $96 2639 00aa ld $aa 263a 0059 ld $59 263b 00aa ld $aa 263c 00a5 ld $a5 263d 00aa ld $aa 263e 00aa ld $aa 263f 0046 ld $46 2640 0061 ld $61 2641 0058 ld $58 2642 0041 ld $41 2643 0015 ld $15 2644 0014 ld $14 2645 0055 ld $55 2646 0090 ld $90 2647 00a2 ld $a2 2648 0038 ld $38 2649 009a ld $9a 264a 0092 ld $92 264b 0028 ld $28 264c 008e ld $8e 264d 00a2 ld $a2 264e 0042 ld $42 264f 0015 ld $15 2650 0014 ld $14 2651 0055 ld $55 2652 0021 ld $21 2653 0014 ld $14 2654 0085 ld $85 2655 0011 ld $11 2656 0058 ld $58 2657 00aa ld $aa 2658 00aa ld $aa 2659 005a ld $5a 265a 00a5 ld $a5 265b 0055 ld $55 265c 0056 ld $56 265d 00a6 ld $a6 265e 0056 ld $56 265f 009a ld $9a 2660 00aa ld $aa 2661 0069 ld $69 2662 00aa ld $aa 2663 00a9 ld $a9 2664 00aa ld $aa 2665 00aa ld $aa 2666 00a5 ld $a5 2667 009a ld $9a 2668 009a ld $9a 2669 00a9 ld $a9 266a 0059 ld $59 266b 0095 ld $95 266c 00aa ld $aa 266d 00aa ld $aa 266e 006b ld $6b 266f 0086 ld $86 2670 0015 ld $15 2671 0058 ld $58 2672 0085 ld $85 2673 0050 ld $50 2674 0015 ld $15 2675 0081 ld $81 2676 0081 ld $81 2677 00a2 ld $a2 2678 0038 ld $38 2679 008e ld $8e 267a 0065 ld $65 267b 0028 ld $28 267c 008a ld $8a 267d 00a7 ld $a7 267e 0045 ld $45 267f 0011 ld $11 2680 0015 ld $15 2681 0046 ld $46 2682 0054 ld $54 2683 0058 ld $58 2684 0056 ld $56 2685 0061 ld $61 2686 0058 ld $58 2687 00aa ld $aa 2688 00a9 ld $a9 2689 0056 ld $56 268a 0066 ld $66 268b 0056 ld $56 268c 0099 ld $99 268d 0095 ld $95 268e 0099 ld $99 268f 00aa ld $aa 2690 0066 ld $66 2691 00aa ld $aa 2692 009a ld $9a 2693 0066 ld $66 2694 0099 ld $99 2695 00ea ld $ea 2696 00aa ld $aa 2697 00ae ld $ae 2698 00aa ld $aa 2699 00a9 ld $a9 269a 00aa ld $aa 269b 0096 ld $96 269c 00aa ld $aa 269d 00aa ld $aa 269e 005a ld $5a 269f 0056 ld $56 26a0 0061 ld $61 26a1 0014 ld $14 26a2 0056 ld $56 26a3 0051 ld $51 26a4 0044 ld $44 26a5 0045 ld $45 26a6 0055 ld $55 26a7 00a1 ld $a1 26a8 0078 ld $78 26a9 008a ld $8a 26aa 0056 ld $56 26ab 0068 ld $68 26ac 008e ld $8e 26ad 00a3 ld $a3 26ae 0085 ld $85 26af 0055 ld $55 26b0 0054 ld $54 26b1 0041 ld $41 26b2 0061 ld $61 26b3 0014 ld $14 26b4 0046 ld $46 26b5 0060 ld $60 26b6 0098 ld $98 26b7 00aa ld $aa 26b8 00a9 ld $a9 26b9 005a ld $5a 26ba 00a5 ld $a5 26bb 0065 ld $65 26bc 0056 ld $56 26bd 006a ld $6a 26be 0069 ld $69 26bf 00a5 ld $a5 26c0 00a6 ld $a6 26c1 006a ld $6a 26c2 00aa ld $aa 26c3 00aa ld $aa 26c4 006a ld $6a 26c5 00aa ld $aa 26c6 00aa ld $aa 26c7 00ae ld $ae 26c8 009a ld $9a 26c9 00ba ld $ba 26ca 00aa ld $aa 26cb 00aa ld $aa 26cc 00aa ld $aa 26cd 00aa ld $aa 26ce 006a ld $6a 26cf 0086 ld $86 26d0 0055 ld $55 26d1 0058 ld $58 26d2 0045 ld $45 26d3 0054 ld $54 26d4 0054 ld $54 26d5 0041 ld $41 26d6 0051 ld $51 26d7 00a2 ld $a2 26d8 0038 ld $38 26d9 008e ld $8e 26da 0055 ld $55 26db 0024 ld $24 26dc 008a ld $8a 26dd 00a7 ld $a7 26de 0041 ld $41 26df 0011 ld $11 26e0 0015 ld $15 26e1 0055 ld $55 26e2 0050 ld $50 26e3 0059 ld $59 26e4 0045 ld $45 26e5 0061 ld $61 26e6 00a9 ld $a9 26e7 00aa ld $aa 26e8 005a ld $5a 26e9 00a9 ld $a9 26ea 0066 ld $66 26eb 0066 ld $66 26ec 00aa ld $aa 26ed 00a6 ld $a6 26ee 00aa ld $aa 26ef 009a ld $9a 26f0 006a ld $6a 26f1 00a9 ld $a9 26f2 0096 ld $96 26f3 0069 ld $69 26f4 00aa ld $aa 26f5 00ea ld $ea 26f6 00aa ld $aa 26f7 00aa ld $aa 26f8 00ab ld $ab 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 00aa ld $aa 2701 00aa ld $aa 2702 00aa ld $aa 2703 00ba ld $ba 2704 00fa ld $fa 2705 00ab ld $ab 2706 0086 ld $86 2707 0025 ld $25 2708 0054 ld $54 2709 0046 ld $46 270a 0015 ld $15 270b 0014 ld $14 270c 0055 ld $55 270d 0081 ld $81 270e 00a2 ld $a2 270f 0038 ld $38 2710 008a ld $8a 2711 0056 ld $56 2712 0028 ld $28 2713 008e ld $8e 2714 00a6 ld $a6 2715 0045 ld $45 2716 0055 ld $55 2717 0044 ld $44 2718 0045 ld $45 2719 0060 ld $60 271a 0054 ld $54 271b 0046 ld $46 271c 0060 ld $60 271d 00a8 ld $a8 271e 00aa ld $aa 271f 00aa ld $aa 2720 0056 ld $56 2721 00aa ld $aa 2722 0059 ld $59 2723 0066 ld $66 2724 0066 ld $66 2725 006a ld $6a 2726 00aa ld $aa 2727 00aa ld $aa 2728 006a ld $6a 2729 00aa ld $aa 272a 006a ld $6a 272b 00a9 ld $a9 272c 00aa ld $aa 272d 00aa ld $aa 272e 00ae ld $ae 272f 00aa ld $aa 2730 00ba ld $ba 2731 00aa ld $aa 2732 00ea ld $ea 2733 00aa ld $aa 2734 00ea ld $ea 2735 00af ld $af 2736 0086 ld $86 2737 0065 ld $65 2738 0014 ld $14 2739 0095 ld $95 273a 0011 ld $11 273b 0015 ld $15 273c 0051 ld $51 273d 0091 ld $91 273e 00e2 ld $e2 273f 007c ld $7c 2740 009a ld $9a 2741 0051 ld $51 2742 0029 ld $29 2743 008a ld $8a 2744 00a3 ld $a3 2745 0042 ld $42 2746 0051 ld $51 2747 0015 ld $15 2748 0055 ld $55 2749 0061 ld $61 274a 0005 ld $05 274b 0085 ld $85 274c 0065 ld $65 274d 00a9 ld $a9 274e 00a6 ld $a6 274f 00a9 ld $a9 2750 009a ld $9a 2751 00a5 ld $a5 2752 0066 ld $66 2753 009a ld $9a 2754 00aa ld $aa 2755 00aa ld $aa 2756 009a ld $9a 2757 00aa ld $aa 2758 00aa ld $aa 2759 00aa ld $aa 275a 006a ld $6a 275b 0059 ld $59 275c 0096 ld $96 275d 0066 ld $66 275e 00aa ld $aa 275f 00ea ld $ea 2760 00aa ld $aa 2761 00ae ld $ae 2762 00ba ld $ba 2763 00ba ld $ba 2764 00ba ld $ba 2765 00bb ld $bb 2766 0046 ld $46 2767 0061 ld $61 2768 0019 ld $19 2769 0041 ld $41 276a 0055 ld $55 276b 0018 ld $18 276c 0055 ld $55 276d 0090 ld $90 276e 00e2 ld $e2 276f 0038 ld $38 2770 009e ld $9e 2771 0015 ld $15 2772 0028 ld $28 2773 008e ld $8e 2774 00a7 ld $a7 2775 0045 ld $45 2776 0015 ld $15 2777 0014 ld $14 2778 0041 ld $41 2779 0055 ld $55 277a 0054 ld $54 277b 0042 ld $42 277c 0061 ld $61 277d 00a9 ld $a9 277e 00aa ld $aa 277f 006a ld $6a 2780 00aa ld $aa 2781 00aa ld $aa 2782 00a9 ld $a9 2783 00a6 ld $a6 2784 00aa ld $aa 2785 005a ld $5a 2786 00aa ld $aa 2787 00a6 ld $a6 2788 006a ld $6a 2789 00aa ld $aa 278a 0065 ld $65 278b 0099 ld $99 278c 0095 ld $95 278d 00a9 ld $a9 278e 00a9 ld $a9 278f 0096 ld $96 2790 00ba ld $ba 2791 00aa ld $aa 2792 00ef ld $ef 2793 00aa ld $aa 2794 00aa ld $aa 2795 00ff ld $ff 2796 0096 ld $96 2797 0061 ld $61 2798 0015 ld $15 2799 0085 ld $85 279a 0055 ld $55 279b 0044 ld $44 279c 0045 ld $45 279d 0091 ld $91 279e 00e2 ld $e2 279f 0028 ld $28 27a0 009e ld $9e 27a1 0051 ld $51 27a2 0015 ld $15 27a3 008a ld $8a 27a4 0067 ld $67 27a5 0041 ld $41 27a6 0065 ld $65 27a7 0054 ld $54 27a8 0081 ld $81 27a9 0055 ld $55 27aa 0014 ld $14 27ab 0086 ld $86 27ac 0061 ld $61 27ad 00a9 ld $a9 27ae 00aa ld $aa 27af 00a9 ld $a9 27b0 009a ld $9a 27b1 006a ld $6a 27b2 00aa ld $aa 27b3 009a ld $9a 27b4 00aa ld $aa 27b5 00a9 ld $a9 27b6 00aa ld $aa 27b7 00aa ld $aa 27b8 00aa ld $aa 27b9 00aa ld $aa 27ba 0065 ld $65 27bb 0059 ld $59 27bc 009a ld $9a 27bd 0065 ld $65 27be 0099 ld $99 27bf 0096 ld $96 27c0 00ea ld $ea 27c1 00ee ld $ee 27c2 00aa ld $aa 27c3 00fa ld $fa 27c4 00ab ld $ab 27c5 00fe ld $fe 27c6 005a ld $5a 27c7 0051 ld $51 27c8 0019 ld $19 27c9 0051 ld $51 27ca 0051 ld $51 27cb 0015 ld $15 27cc 0055 ld $55 27cd 0051 ld $51 27ce 00e1 ld $e1 27cf 003c ld $3c 27d0 004a ld $4a 27d1 0055 ld $55 27d2 0029 ld $29 27d3 008a ld $8a 27d4 0057 ld $57 27d5 0045 ld $45 27d6 0011 ld $11 27d7 0015 ld $15 27d8 0045 ld $45 27d9 0015 ld $15 27da 0058 ld $58 27db 0081 ld $81 27dc 00a1 ld $a1 27dd 00ea ld $ea 27de 00aa ld $aa 27df 00aa ld $aa 27e0 0056 ld $56 27e1 00aa ld $aa 27e2 00a9 ld $a9 27e3 009a ld $9a 27e4 006a ld $6a 27e5 006a ld $6a 27e6 00aa ld $aa 27e7 00a6 ld $a6 27e8 00aa ld $aa 27e9 00ab ld $ab 27ea 0065 ld $65 27eb 0099 ld $99 27ec 0096 ld $96 27ed 0065 ld $65 27ee 0059 ld $59 27ef 00aa ld $aa 27f0 00ba ld $ba 27f1 00bb ld $bb 27f2 00ea ld $ea 27f3 00ae ld $ae 27f4 00be ld $be 27f5 00fa ld $fa 27f6 009b ld $9b 27f7 0061 ld $61 27f8 0015 ld $15 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 0045 ld $45 2801 0015 ld $15 2802 0054 ld $54 2803 0045 ld $45 2804 0054 ld $54 2805 00a1 ld $a1 2806 0078 ld $78 2807 008a ld $8a 2808 0066 ld $66 2809 0028 ld $28 280a 008a ld $8a 280b 0056 ld $56 280c 0045 ld $45 280d 0055 ld $55 280e 0044 ld $44 280f 0055 ld $55 2810 0051 ld $51 2811 0004 ld $04 2812 0096 ld $96 2813 00a5 ld $a5 2814 00ae ld $ae 2815 00aa ld $aa 2816 00aa ld $aa 2817 00aa ld $aa 2818 00aa ld $aa 2819 00a9 ld $a9 281a 00aa ld $aa 281b 00aa ld $aa 281c 00a9 ld $a9 281d 00aa ld $aa 281e 00aa ld $aa 281f 00aa ld $aa 2820 00aa ld $aa 2821 0069 ld $69 2822 0059 ld $59 2823 0056 ld $56 2824 00a5 ld $a5 2825 00aa ld $aa 2826 00aa ld $aa 2827 00ea ld $ea 2828 00ea ld $ea 2829 00ab ld $ab 282a 00bb ld $bb 282b 00ab ld $ab 282c 00ee ld $ee 282d 00aa ld $aa 282e 0051 ld $51 282f 0019 ld $19 2830 0051 ld $51 2831 0061 ld $61 2832 0005 ld $05 2833 0055 ld $55 2834 0051 ld $51 2835 00a4 ld $a4 2836 0038 ld $38 2837 008f ld $8f 2838 0056 ld $56 2839 0028 ld $28 283a 009e ld $9e 283b 0016 ld $16 283c 0091 ld $91 283d 0011 ld $11 283e 0015 ld $15 283f 0045 ld $45 2840 0054 ld $54 2841 0018 ld $18 2842 0085 ld $85 2843 00a5 ld $a5 2844 00aa ld $aa 2845 00aa ld $aa 2846 00a9 ld $a9 2847 009a ld $9a 2848 00aa ld $aa 2849 009a ld $9a 284a 009a ld $9a 284b 00aa ld $aa 284c 00aa ld $aa 284d 00aa ld $aa 284e 00aa ld $aa 284f 00a9 ld $a9 2850 00ab ld $ab 2851 0025 ld $25 2852 0059 ld $59 2853 0096 ld $96 2854 0069 ld $69 2855 0099 ld $99 2856 00ea ld $ea 2857 00ba ld $ba 2858 00be ld $be 2859 00fa ld $fa 285a 00ab ld $ab 285b 00fe ld $fe 285c 00fe ld $fe 285d 00aa ld $aa 285e 0065 ld $65 285f 0054 ld $54 2860 0046 ld $46 2861 0055 ld $55 2862 0054 ld $54 2863 0045 ld $45 2864 0055 ld $55 2865 00a0 ld $a0 2866 0078 ld $78 2867 008a ld $8a 2868 00a6 ld $a6 2869 0038 ld $38 286a 009e ld $9e 286b 0015 ld $15 286c 0055 ld $55 286d 0051 ld $51 286e 0054 ld $54 286f 0056 ld $56 2870 0051 ld $51 2871 0058 ld $58 2872 0086 ld $86 2873 00f5 ld $f5 2874 00ab ld $ab 2875 00ab ld $ab 2876 00aa ld $aa 2877 009a ld $9a 2878 00aa ld $aa 2879 006a ld $6a 287a 00aa ld $aa 287b 00aa ld $aa 287c 00a9 ld $a9 287d 009a ld $9a 287e 00aa ld $aa 287f 00aa ld $aa 2880 00aa ld $aa 2881 0064 ld $64 2882 0059 ld $59 2883 0092 ld $92 2884 0065 ld $65 2885 0069 ld $69 2886 00aa ld $aa 2887 00aa ld $aa 2888 00ea ld $ea 2889 00af ld $af 288a 00be ld $be 288b 00aa ld $aa 288c 00aa ld $aa 288d 00af ld $af 288e 006a ld $6a 288f 0018 ld $18 2890 0055 ld $55 2891 0061 ld $61 2892 0055 ld $55 2893 0081 ld $81 2894 0055 ld $55 2895 00a4 ld $a4 2896 0038 ld $38 2897 009a ld $9a 2898 00a2 ld $a2 2899 0028 ld $28 289a 009a ld $9a 289b 0006 ld $06 289c 0056 ld $56 289d 0051 ld $51 289e 0019 ld $19 289f 0055 ld $55 28a0 0060 ld $60 28a1 0054 ld $54 28a2 0086 ld $86 28a3 00aa ld $aa 28a4 00aa ld $aa 28a5 00aa ld $aa 28a6 00aa ld $aa 28a7 00a9 ld $a9 28a8 00a6 ld $a6 28a9 00aa ld $aa 28aa 00ab ld $ab 28ab 00a5 ld $a5 28ac 00aa ld $aa 28ad 00a6 ld $a6 28ae 00aa ld $aa 28af 00aa ld $aa 28b0 00ab ld $ab 28b1 0065 ld $65 28b2 0049 ld $49 28b3 00a6 ld $a6 28b4 0075 ld $75 28b5 009a ld $9a 28b6 009b ld $9b 28b7 00ba ld $ba 28b8 00ba ld $ba 28b9 00fa ld $fa 28ba 00ab ld $ab 28bb 00bf ld $bf 28bc 00aa ld $aa 28bd 00bb ld $bb 28be 0066 ld $66 28bf 0015 ld $15 28c0 0056 ld $56 28c1 0061 ld $61 28c2 0015 ld $15 28c3 0055 ld $55 28c4 0051 ld $51 28c5 00a1 ld $a1 28c6 0038 ld $38 28c7 009a ld $9a 28c8 0062 ld $62 28c9 0038 ld $38 28ca 009e ld $9e 28cb 0005 ld $05 28cc 0055 ld $55 28cd 0011 ld $11 28ce 0068 ld $68 28cf 0085 ld $85 28d0 0061 ld $61 28d1 0019 ld $19 28d2 0096 ld $96 28d3 00aa ld $aa 28d4 00ae ld $ae 28d5 00aa ld $aa 28d6 006a ld $6a 28d7 00aa ld $aa 28d8 00aa ld $aa 28d9 00aa ld $aa * 5 times 28dc 006a ld $6a 28dd 00aa ld $aa 28de 00ba ld $ba 28df 00aa ld $aa 28e0 00da ld $da 28e1 0025 ld $25 28e2 0059 ld $59 28e3 0096 ld $96 28e4 00b9 ld $b9 28e5 0059 ld $59 28e6 00a6 ld $a6 28e7 00aa ld $aa 28e8 00af ld $af 28e9 00aa ld $aa 28ea 00aa ld $aa 28eb 00aa ld $aa 28ec 00af ld $af 28ed 00aa ld $aa 28ee 00aa ld $aa 28ef 0019 ld $19 28f0 0096 ld $96 28f1 0055 ld $55 28f2 0059 ld $59 28f3 0045 ld $45 28f4 0055 ld $55 28f5 00a1 ld $a1 28f6 0039 ld $39 28f7 008e ld $8e 28f8 00a2 ld $a2 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 0029 ld $29 2901 008e ld $8e 2902 0055 ld $55 2903 0056 ld $56 2904 0061 ld $61 2905 0059 ld $59 2906 0095 ld $95 2907 0051 ld $51 2908 0059 ld $59 2909 009a ld $9a 290a 00a5 ld $a5 290b 00aa ld $aa 290c 00ba ld $ba 290d 00aa ld $aa 290e 00aa ld $aa 290f 00aa ld $aa 2910 006a ld $6a 2911 00aa ld $aa 2912 00aa ld $aa 2913 00a9 ld $a9 2914 00a6 ld $a6 2915 00a6 ld $a6 2916 00ae ld $ae 2917 00aa ld $aa 2918 0064 ld $64 2919 0099 ld $99 291a 0096 ld $96 291b 0079 ld $79 291c 0099 ld $99 291d 00da ld $da 291e 00ea ld $ea 291f 00ea ld $ea 2920 00ef ld $ef 2921 00ae ld $ae 2922 00aa ld $aa 2923 00ba ld $ba 2924 00ab ld $ab 2925 00aa ld $aa 2926 0059 ld $59 2927 0096 ld $96 2928 0066 ld $66 2929 0068 ld $68 292a 0045 ld $45 292b 0095 ld $95 292c 00e1 ld $e1 292d 0028 ld $28 292e 009a ld $9a 292f 00a2 ld $a2 2930 0028 ld $28 2931 009a ld $9a 2932 0056 ld $56 2933 0056 ld $56 2934 0061 ld $61 2935 0069 ld $69 2936 0096 ld $96 2937 0055 ld $55 2938 0068 ld $68 2939 0096 ld $96 293a 00a6 ld $a6 293b 00aa ld $aa 293c 00ea ld $ea 293d 00aa ld $aa 293e 00aa ld $aa 293f 00a6 ld $a6 2940 00aa ld $aa 2941 00aa ld $aa 2942 00a5 ld $a5 2943 00aa ld $aa 2944 009a ld $9a 2945 00aa ld $aa 2946 00aa ld $aa 2947 00aa ld $aa 2948 0064 ld $64 2949 0049 ld $49 294a 0097 ld $97 294b 0064 ld $64 294c 0059 ld $59 294d 00ea ld $ea 294e 00be ld $be 294f 00aa ld $aa 2950 00aa ld $aa 2951 00bb ld $bb 2952 00aa ld $aa 2953 00ea ld $ea 2954 00ea ld $ea 2955 006a ld $6a 2956 0069 ld $69 2957 0096 ld $96 2958 0056 ld $56 2959 0055 ld $55 295a 0046 ld $46 295b 0085 ld $85 295c 00e2 ld $e2 295d 0028 ld $28 295e 008e ld $8e 295f 00a2 ld $a2 2960 0028 ld $28 2961 008e ld $8e 2962 0066 ld $66 2963 0045 ld $45 2964 00a5 ld $a5 2965 0015 ld $15 2966 0085 ld $85 2967 00a5 ld $a5 2968 0059 ld $59 2969 0096 ld $96 296a 0066 ld $66 296b 00a9 ld $a9 296c 009a ld $9a 296d 006a ld $6a 296e 00aa ld $aa 296f 00aa ld $aa 2970 00aa ld $aa * 8 times 2976 005a ld $5a 2977 00aa ld $aa 2978 0025 ld $25 2979 0059 ld $59 297a 0092 ld $92 297b 0025 ld $25 297c 0099 ld $99 297d 00a6 ld $a6 297e 00aa ld $aa 297f 00aa ld $aa 2980 00aa ld $aa 2981 00aa ld $aa 2982 00a5 ld $a5 2983 00aa ld $aa 2984 00aa ld $aa 2985 00aa ld $aa 2986 0059 ld $59 2987 009a ld $9a 2988 0066 ld $66 2989 0059 ld $59 298a 0015 ld $15 298b 008a ld $8a 298c 00e6 ld $e6 298d 0068 ld $68 298e 008a ld $8a 298f 00a6 ld $a6 2990 0068 ld $68 2991 008a ld $8a 2992 0097 ld $97 2993 0085 ld $85 2994 0065 ld $65 2995 0055 ld $55 2996 009a ld $9a 2997 00a5 ld $a5 2998 0059 ld $59 2999 009a ld $9a 299a 006a ld $6a 299b 00a9 ld $a9 299c 00aa ld $aa 299d 00aa ld $aa 299e 006a ld $6a 299f 00a6 ld $a6 29a0 00aa ld $aa 29a1 00ea ld $ea 29a2 00aa ld $aa 29a3 0099 ld $99 29a4 00aa ld $aa 29a5 00a5 ld $a5 29a6 00aa ld $aa 29a7 00aa ld $aa 29a8 0064 ld $64 29a9 0049 ld $49 29aa 0096 ld $96 29ab 0064 ld $64 29ac 0099 ld $99 29ad 009b ld $9b 29ae 00aa ld $aa 29af 00aa ld $aa 29b0 0056 ld $56 29b1 0055 ld $55 29b2 0065 ld $65 29b3 00a9 ld $a9 29b4 00aa ld $aa 29b5 00a6 ld $a6 29b6 00aa ld $aa 29b7 005a ld $5a 29b8 009a ld $9a 29b9 00a2 ld $a2 29ba 0028 ld $28 29bb 008e ld $8e 29bc 00a3 ld $a3 29bd 0038 ld $38 29be 008a ld $8a 29bf 00a2 ld $a2 29c0 0028 ld $28 29c1 008e ld $8e 29c2 00a2 ld $a2 29c3 0068 ld $68 29c4 0056 ld $56 29c5 0019 ld $19 29c6 009a ld $9a 29c7 00a5 ld $a5 29c8 00a9 ld $a9 29c9 0096 ld $96 29ca 00a6 ld $a6 29cb 0099 ld $99 29cc 00aa ld $aa 29cd 006a ld $6a 29ce 0066 ld $66 29cf 0066 ld $66 29d0 006a ld $6a 29d1 00aa ld $aa 29d2 00aa ld $aa 29d3 00aa ld $aa * 5 times 29d6 0099 ld $99 29d7 009a ld $9a 29d8 0064 ld $64 29d9 004c ld $4c 29da 0092 ld $92 29db 0060 ld $60 29dc 0099 ld $99 29dd 0096 ld $96 29de 00ba ld $ba 29df 006a ld $6a 29e0 0056 ld $56 29e1 0055 ld $55 29e2 0059 ld $59 29e3 00a9 ld $a9 29e4 00ab ld $ab 29e5 006a ld $6a 29e6 0069 ld $69 29e7 0029 ld $29 29e8 008a ld $8a 29e9 00a2 ld $a2 29ea 0028 ld $28 29eb 008a ld $8a 29ec 00a7 ld $a7 29ed 0028 ld $28 29ee 009a ld $9a 29ef 00a2 ld $a2 29f0 0038 ld $38 29f1 008a ld $8a 29f2 00a3 ld $a3 29f3 0038 ld $38 29f4 008a ld $8a 29f5 00a6 ld $a6 29f6 0096 ld $96 29f7 0066 ld $66 29f8 0069 ld $69 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 009a ld $9a 2a01 006a ld $6a 2a02 006a ld $6a 2a03 0096 ld $96 2a04 00a5 ld $a5 2a05 009a ld $9a 2a06 005a ld $5a 2a07 00a9 ld $a9 2a08 00a9 ld $a9 2a09 00a6 ld $a6 2a0a 00aa ld $aa 2a0b 00ab ld $ab 2a0c 006a ld $6a 2a0d 006a ld $6a 2a0e 00aa ld $aa 2a0f 0025 ld $25 2a10 0059 ld $59 2a11 00d2 ld $d2 2a12 0025 ld $25 2a13 0059 ld $59 2a14 00a7 ld $a7 2a15 00aa ld $aa 2a16 005a ld $5a 2a17 0095 ld $95 2a18 0066 ld $66 2a19 0055 ld $55 2a1a 00a9 ld $a9 2a1b 00aa ld $aa 2a1c 00a9 ld $a9 2a1d 00a5 ld $a5 2a1e 0039 ld $39 2a1f 009a ld $9a 2a20 00a2 ld $a2 2a21 0029 ld $29 2a22 009a ld $9a 2a23 00a1 ld $a1 2a24 0028 ld $28 2a25 008a ld $8a 2a26 00a2 ld $a2 2a27 0028 ld $28 2a28 009a ld $9a 2a29 0091 ld $91 2a2a 0058 ld $58 2a2b 0089 ld $89 2a2c 00a2 ld $a2 2a2d 0099 ld $99 2a2e 0095 ld $95 2a2f 0059 ld $59 2a30 0096 ld $96 2a31 0066 ld $66 2a32 0069 ld $69 2a33 00aa ld $aa 2a34 00aa ld $aa 2a35 0055 ld $55 2a36 00aa ld $aa 2a37 0095 ld $95 2a38 009a ld $9a 2a39 00a9 ld $a9 2a3a 00aa ld $aa 2a3b 00aa ld $aa 2a3c 00aa ld $aa 2a3d 00a9 ld $a9 2a3e 00a6 ld $a6 2a3f 0064 ld $64 2a40 0009 ld $09 2a41 0096 ld $96 2a42 0064 ld $64 2a43 009d ld $9d 2a44 00aa ld $aa 2a45 00a6 ld $a6 2a46 005a ld $5a 2a47 0056 ld $56 2a48 0055 ld $55 2a49 0055 ld $55 2a4a 0099 ld $99 2a4b 00aa ld $aa 2a4c 00a6 ld $a6 2a4d 00a6 ld $a6 2a4e 0028 ld $28 2a4f 008e ld $8e 2a50 00e6 ld $e6 2a51 0069 ld $69 2a52 004a ld $4a 2a53 0066 ld $66 2a54 0058 ld $58 2a55 0085 ld $85 2a56 0056 ld $56 2a57 0058 ld $58 2a58 0089 ld $89 2a59 00a6 ld $a6 2a5a 0039 ld $39 2a5b 008a ld $8a 2a5c 00a2 ld $a2 2a5d 0078 ld $78 2a5e 00a5 ld $a5 2a5f 0059 ld $59 2a60 009a ld $9a 2a61 00a9 ld $a9 2a62 0099 ld $99 2a63 005a ld $5a 2a64 0065 ld $65 2a65 006a ld $6a 2a66 0066 ld $66 2a67 00aa ld $aa 2a68 006a ld $6a 2a69 00a6 ld $a6 2a6a 005a ld $5a 2a6b 00aa ld $aa 2a6c 00a5 ld $a5 2a6d 005a ld $5a 2a6e 009a ld $9a 2a6f 0025 ld $25 2a70 0059 ld $59 2a71 00d2 ld $d2 2a72 0024 ld $24 2a73 0059 ld $59 2a74 00e6 ld $e6 2a75 007a ld $7a 2a76 00aa ld $aa 2a77 0096 ld $96 2a78 0065 ld $65 2a79 0055 ld $55 2a7a 0059 ld $59 2a7b 00aa ld $aa 2a7c 00aa ld $aa 2a7d 00a6 ld $a6 2a7e 0038 ld $38 2a7f 008e ld $8e 2a80 00a2 ld $a2 2a81 0069 ld $69 2a82 009e ld $9e 2a83 00a2 ld $a2 2a84 0028 ld $28 2a85 0095 ld $95 2a86 0091 ld $91 2a87 0068 ld $68 2a88 009a ld $9a 2a89 00a6 ld $a6 2a8a 0068 ld $68 2a8b 008a ld $8a 2a8c 00e2 ld $e2 2a8d 0068 ld $68 2a8e 00aa ld $aa 2a8f 0095 ld $95 2a90 009a ld $9a 2a91 00aa ld $aa 2a92 0095 ld $95 2a93 009a ld $9a 2a94 0099 ld $99 2a95 0059 ld $59 2a96 0095 ld $95 2a97 00a5 ld $a5 2a98 009a ld $9a 2a99 00a9 ld $a9 2a9a 00a6 ld $a6 2a9b 009a ld $9a 2a9c 005a ld $5a 2a9d 00a9 ld $a9 2a9e 0095 ld $95 2a9f 0064 ld $64 2aa0 0009 ld $09 2aa1 0096 ld $96 2aa2 0074 ld $74 2aa3 0059 ld $59 2aa4 00a6 ld $a6 2aa5 0066 ld $66 2aa6 0059 ld $59 2aa7 0056 ld $56 2aa8 0055 ld $55 2aa9 0059 ld $59 2aaa 0055 ld $55 2aab 00aa ld $aa 2aac 00aa ld $aa 2aad 00a5 ld $a5 2aae 0029 ld $29 2aaf 009a ld $9a 2ab0 00a2 ld $a2 2ab1 0028 ld $28 2ab2 009a ld $9a 2ab3 00a6 ld $a6 2ab4 0068 ld $68 2ab5 008a ld $8a 2ab6 00a2 ld $a2 2ab7 0068 ld $68 2ab8 008e ld $8e 2ab9 00a2 ld $a2 2aba 0028 ld $28 2abb 008a ld $8a 2abc 00e2 ld $e2 2abd 0069 ld $69 2abe 006a ld $6a 2abf 0069 ld $69 2ac0 00a6 ld $a6 2ac1 0066 ld $66 2ac2 006a ld $6a 2ac3 00aa ld $aa 2ac4 00a5 ld $a5 2ac5 0095 ld $95 2ac6 0056 ld $56 2ac7 0055 ld $55 2ac8 0099 ld $99 2ac9 00aa ld $aa 2aca 005a ld $5a 2acb 006a ld $6a 2acc 00a5 ld $a5 2acd 005a ld $5a 2ace 0099 ld $99 2acf 0064 ld $64 2ad0 0049 ld $49 2ad1 0093 ld $93 2ad2 0025 ld $25 2ad3 0059 ld $59 2ad4 00a7 ld $a7 2ad5 00ba ld $ba 2ad6 009a ld $9a 2ad7 0096 ld $96 2ad8 0069 ld $69 2ad9 0059 ld $59 2ada 0069 ld $69 2adb 0095 ld $95 2adc 00a5 ld $a5 2add 00aa ld $aa 2ade 0028 ld $28 2adf 008e ld $8e 2ae0 0066 ld $66 2ae1 0028 ld $28 2ae2 008a ld $8a 2ae3 00e6 ld $e6 2ae4 0028 ld $28 2ae5 004a ld $4a 2ae6 00a6 ld $a6 2ae7 0028 ld $28 2ae8 008a ld $8a 2ae9 00a2 ld $a2 2aea 0028 ld $28 2aeb 008e ld $8e 2aec 00e2 ld $e2 2aed 0068 ld $68 2aee 00aa ld $aa 2aef 00a9 ld $a9 2af0 006a ld $6a 2af1 00a5 ld $a5 2af2 00aa ld $aa 2af3 006a ld $6a 2af4 006a ld $6a 2af5 0055 ld $55 2af6 0056 ld $56 2af7 00a5 ld $a5 2af8 0056 ld $56 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 006a ld $6a 2b01 00a5 ld $a5 2b02 009a ld $9a 2b03 005a ld $5a 2b04 00a9 ld $a9 2b05 0095 ld $95 2b06 0025 ld $25 2b07 0059 ld $59 2b08 0096 ld $96 2b09 0064 ld $64 2b0a 004d ld $4d 2b0b 00a6 ld $a6 2b0c 0065 ld $65 2b0d 0059 ld $59 2b0e 00aa ld $aa 2b0f 0065 ld $65 2b10 0055 ld $55 2b11 0055 ld $55 2b12 0095 ld $95 2b13 00aa ld $aa 2b14 00a6 ld $a6 2b15 0029 ld $29 2b16 008a ld $8a 2b17 00e2 ld $e2 2b18 0028 ld $28 2b19 008a ld $8a 2b1a 00a2 ld $a2 2b1b 0029 ld $29 2b1c 009a ld $9a 2b1d 00a1 ld $a1 2b1e 0028 ld $28 2b1f 009a ld $9a 2b20 00a2 ld $a2 2b21 0028 ld $28 2b22 008e ld $8e 2b23 00a3 ld $a3 2b24 0069 ld $69 2b25 006a ld $6a 2b26 00a9 ld $a9 2b27 00aa ld $aa 2b28 0056 ld $56 2b29 00a9 ld $a9 2b2a 0095 ld $95 2b2b 0055 ld $55 2b2c 0095 ld $95 2b2d 0055 ld $55 2b2e 0055 ld $55 2b2f 0055 ld $55 2b30 00a6 ld $a6 2b31 00aa ld $aa 2b32 0066 ld $66 2b33 0066 ld $66 2b34 0065 ld $65 2b35 0066 ld $66 2b36 0015 ld $15 2b37 0059 ld $59 2b38 0092 ld $92 2b39 0025 ld $25 2b3a 0059 ld $59 2b3b 00a7 ld $a7 2b3c 0076 ld $76 2b3d 005a ld $5a 2b3e 0096 ld $96 2b3f 0064 ld $64 2b40 0055 ld $55 2b41 0056 ld $56 2b42 0056 ld $56 2b43 0055 ld $55 2b44 0069 ld $69 2b45 0029 ld $29 2b46 008e ld $8e 2b47 00e2 ld $e2 2b48 0068 ld $68 2b49 008e ld $8e 2b4a 00e2 ld $e2 2b4b 0028 ld $28 2b4c 008a ld $8a 2b4d 00e2 ld $e2 2b4e 0028 ld $28 2b4f 008a ld $8a 2b50 00a2 ld $a2 2b51 0038 ld $38 2b52 008a ld $8a 2b53 00a3 ld $a3 2b54 00a9 ld $a9 2b55 00a5 ld $a5 2b56 00aa ld $aa 2b57 0095 ld $95 2b58 005a ld $5a 2b59 0055 ld $55 2b5a 0099 ld $99 2b5b 0099 ld $99 2b5c 0055 ld $55 2b5d 0056 ld $56 2b5e 0055 ld $55 2b5f 005a ld $5a 2b60 0069 ld $69 2b61 006a ld $6a 2b62 0066 ld $66 2b63 0066 ld $66 2b64 006a ld $6a 2b65 0095 ld $95 2b66 0065 ld $65 2b67 0009 ld $09 2b68 0096 ld $96 2b69 0025 ld $25 2b6a 0059 ld $59 2b6b 00a6 ld $a6 2b6c 0065 ld $65 2b6d 006a ld $6a 2b6e 0096 ld $96 2b6f 0065 ld $65 2b70 005a ld $5a 2b71 0055 ld $55 2b72 0059 ld $59 2b73 0055 ld $55 2b74 0099 ld $99 2b75 0059 ld $59 2b76 009a ld $9a 2b77 00b2 ld $b2 2b78 0038 ld $38 2b79 00ca ld $ca 2b7a 00e3 ld $e3 2b7b 0029 ld $29 2b7c 008a ld $8a 2b7d 00a3 ld $a3 2b7e 0039 ld $39 2b7f 008a ld $8a 2b80 00a3 ld $a3 2b81 0029 ld $29 2b82 008e ld $8e 2b83 00a6 ld $a6 2b84 00a9 ld $a9 2b85 0095 ld $95 2b86 00a9 ld $a9 2b87 0056 ld $56 2b88 0095 ld $95 2b89 0055 ld $55 2b8a 00a6 ld $a6 2b8b 005a ld $5a 2b8c 0055 ld $55 2b8d 0055 ld $55 2b8e 0059 ld $59 2b8f 0095 ld $95 2b90 00a6 ld $a6 2b91 00aa ld $aa 2b92 0096 ld $96 2b93 0056 ld $56 2b94 006a ld $6a 2b95 0055 ld $55 2b96 0064 ld $64 2b97 0055 ld $55 2b98 0095 ld $95 2b99 0064 ld $64 2b9a 005a ld $5a 2b9b 0097 ld $97 2b9c 0075 ld $75 2b9d 0059 ld $59 2b9e 00e6 ld $e6 2b9f 0069 ld $69 2ba0 0055 ld $55 2ba1 0056 ld $56 2ba2 0055 ld $55 2ba3 0055 ld $55 2ba4 0055 ld $55 2ba5 0055 ld $55 2ba6 0085 ld $85 2ba7 00a6 ld $a6 2ba8 0028 ld $28 2ba9 008e ld $8e 2baa 00e2 ld $e2 2bab 0068 ld $68 2bac 008a ld $8a 2bad 00a2 ld $a2 2bae 0038 ld $38 2baf 008e ld $8e 2bb0 00e2 ld $e2 2bb1 0028 ld $28 2bb2 009e ld $9e 2bb3 00a6 ld $a6 2bb4 005a ld $5a 2bb5 0069 ld $69 2bb6 0055 ld $55 2bb7 0069 ld $69 2bb8 0055 ld $55 2bb9 006a ld $6a 2bba 0095 ld $95 2bbb 0055 ld $55 2bbc 0055 ld $55 2bbd 0065 ld $65 2bbe 0055 ld $55 2bbf 0056 ld $56 2bc0 00a5 ld $a5 2bc1 0056 ld $56 2bc2 00aa ld $aa 2bc3 006a ld $6a 2bc4 0069 ld $69 2bc5 0095 ld $95 2bc6 0055 ld $55 2bc7 0049 ld $49 2bc8 0096 ld $96 2bc9 0025 ld $25 2bca 0059 ld $59 2bcb 0092 ld $92 2bcc 0069 ld $69 2bcd 0099 ld $99 2bce 00aa ld $aa 2bcf 0065 ld $65 2bd0 0059 ld $59 2bd1 0095 ld $95 2bd2 0095 ld $95 2bd3 0055 ld $55 2bd4 0055 ld $55 2bd5 0055 ld $55 2bd6 0055 ld $55 2bd7 00a5 ld $a5 2bd8 0029 ld $29 2bd9 009a ld $9a 2bda 00a2 ld $a2 2bdb 0029 ld $29 2bdc 008a ld $8a 2bdd 00e2 ld $e2 2bde 0028 ld $28 2bdf 008f ld $8f 2be0 00a2 ld $a2 2be1 0068 ld $68 2be2 009a ld $9a 2be3 0056 ld $56 2be4 006a ld $6a 2be5 0055 ld $55 2be6 0055 ld $55 2be7 0095 ld $95 2be8 005a ld $5a 2be9 00a9 ld $a9 2bea 0055 ld $55 2beb 0055 ld $55 2bec 0059 ld $59 2bed 0065 ld $65 2bee 0055 ld $55 2bef 00a6 ld $a6 2bf0 00a5 ld $a5 2bf1 0099 ld $99 2bf2 005a ld $5a 2bf3 00a5 ld $a5 2bf4 0056 ld $56 2bf5 006a ld $6a 2bf6 0061 ld $61 2bf7 0055 ld $55 2bf8 0095 ld $95 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 0065 ld $65 2c01 0059 ld $59 2c02 00e6 ld $e6 2c03 0065 ld $65 2c04 005a ld $5a 2c05 0096 ld $96 2c06 0069 ld $69 2c07 0059 ld $59 2c08 0055 ld $55 2c09 0055 ld $55 2c0a 0065 ld $65 2c0b 0055 ld $55 2c0c 0055 ld $55 2c0d 0055 ld $55 * 5 times 2c10 009a ld $9a 2c11 00a6 ld $a6 2c12 0059 ld $59 2c13 009a ld $9a 2c14 00a6 ld $a6 2c15 0029 ld $29 2c16 009a ld $9a 2c17 00a2 ld $a2 2c18 0069 ld $69 2c19 005a ld $5a 2c1a 0055 ld $55 2c1b 0055 ld $55 2c1c 0055 ld $55 2c1d 0055 ld $55 2c1e 0095 ld $95 2c1f 00a6 ld $a6 2c20 0056 ld $56 2c21 0099 ld $99 2c22 0055 ld $55 2c23 0056 ld $56 2c24 0065 ld $65 2c25 005a ld $5a 2c26 009a ld $9a 2c27 006a ld $6a 2c28 00a5 ld $a5 2c29 00aa ld $aa 2c2a 0095 ld $95 2c2b 0099 ld $99 2c2c 0099 ld $99 2c2d 0055 ld $55 2c2e 0055 ld $55 2c2f 0056 ld $56 2c30 0065 ld $65 2c31 0049 ld $49 2c32 0096 ld $96 2c33 0065 ld $65 2c34 0099 ld $99 2c35 0096 ld $96 2c36 0065 ld $65 2c37 005a ld $5a 2c38 00a5 ld $a5 2c39 0055 ld $55 2c3a 005a ld $5a 2c3b 0055 ld $55 2c3c 0055 ld $55 2c3d 0055 ld $55 * 11 times 2c46 0095 ld $95 2c47 0056 ld $56 2c48 0055 ld $55 2c49 0055 ld $55 2c4a 0055 ld $55 2c4b 0054 ld $54 2c4c 0055 ld $55 2c4d 00a5 ld $a5 2c4e 0055 ld $55 2c4f 00a9 ld $a9 2c50 0059 ld $59 2c51 0055 ld $55 2c52 0055 ld $55 2c53 0059 ld $59 2c54 0065 ld $65 2c55 00a5 ld $a5 2c56 0096 ld $96 2c57 00a9 ld $a9 2c58 005a ld $5a 2c59 005a ld $5a 2c5a 006a ld $6a 2c5b 0065 ld $65 2c5c 0056 ld $56 2c5d 0065 ld $65 2c5e 0055 ld $55 2c5f 0095 ld $95 2c60 0055 ld $55 2c61 0099 ld $99 2c62 0096 ld $96 2c63 0065 ld $65 2c64 005a ld $5a 2c65 0096 ld $96 2c66 006a ld $6a 2c67 005a ld $5a 2c68 0095 ld $95 2c69 0055 ld $55 2c6a 0055 ld $55 2c6b 0055 ld $55 2c6c 005a ld $5a 2c6d 0059 ld $59 2c6e 0055 ld $55 2c6f 0058 ld $58 2c70 0055 ld $55 2c71 0051 ld $51 2c72 0055 ld $55 2c73 0055 ld $55 2c74 0055 ld $55 2c75 0054 ld $54 2c76 0055 ld $55 2c77 0065 ld $65 2c78 0055 ld $55 2c79 0045 ld $45 2c7a 0055 ld $55 2c7b 0055 ld $55 2c7c 005a ld $5a 2c7d 00a9 ld $a9 2c7e 0095 ld $95 2c7f 0056 ld $56 2c80 0099 ld $99 2c81 0095 ld $95 2c82 005a ld $5a 2c83 0095 ld $95 2c84 00a9 ld $a9 2c85 0099 ld $99 2c86 0096 ld $96 2c87 00aa ld $aa 2c88 00a9 ld $a9 2c89 00aa ld $aa 2c8a 00a5 ld $a5 2c8b 0066 ld $66 2c8c 006a ld $6a 2c8d 0055 ld $55 2c8e 0055 ld $55 2c8f 0056 ld $56 2c90 0065 ld $65 2c91 0059 ld $59 2c92 005a ld $5a 2c93 0065 ld $65 2c94 00a9 ld $a9 2c95 00d6 ld $d6 2c96 0069 ld $69 2c97 00a5 ld $a5 2c98 00a6 ld $a6 2c99 0055 ld $55 2c9a 0059 ld $59 2c9b 0055 ld $55 2c9c 0055 ld $55 2c9d 0055 ld $55 2c9e 0055 ld $55 2c9f 0065 ld $65 2ca0 008a ld $8a 2ca1 00a6 ld $a6 2ca2 0068 ld $68 2ca3 008a ld $8a 2ca4 0056 ld $56 2ca5 0068 ld $68 2ca6 004a ld $4a 2ca7 00a2 ld $a2 2ca8 0064 ld $64 2ca9 009a ld $9a 2caa 0056 ld $56 2cab 0059 ld $59 2cac 00a9 ld $a9 2cad 0095 ld $95 2cae 006a ld $6a 2caf 00a5 ld $a5 2cb0 0056 ld $56 2cb1 0055 ld $55 2cb2 0059 ld $59 2cb3 0095 ld $95 2cb4 0056 ld $56 2cb5 00a9 ld $a9 2cb6 00aa ld $aa 2cb7 00a9 ld $a9 2cb8 0095 ld $95 2cb9 005a ld $5a 2cba 00a9 ld $a9 2cbb 0095 ld $95 2cbc 0099 ld $99 2cbd 00a5 ld $a5 2cbe 0055 ld $55 2cbf 0095 ld $95 2cc0 0055 ld $55 2cc1 0059 ld $59 2cc2 0055 ld $55 2cc3 0065 ld $65 2cc4 005a ld $5a 2cc5 009a ld $9a 2cc6 00a9 ld $a9 2cc7 0099 ld $99 2cc8 0096 ld $96 2cc9 0065 ld $65 2cca 0055 ld $55 2ccb 0045 ld $45 2ccc 0055 ld $55 2ccd 0055 ld $55 2cce 0055 ld $55 2ccf 0055 ld $55 2cd0 0095 ld $95 2cd1 00a6 ld $a6 2cd2 0068 ld $68 2cd3 008a ld $8a 2cd4 0092 ld $92 2cd5 0068 ld $68 2cd6 008a ld $8a 2cd7 0055 ld $55 2cd8 0069 ld $69 2cd9 009a ld $9a 2cda 0056 ld $56 2cdb 0095 ld $95 2cdc 009a ld $9a 2cdd 0056 ld $56 2cde 00aa ld $aa 2cdf 0055 ld $55 2ce0 0055 ld $55 2ce1 006a ld $6a 2ce2 0055 ld $55 2ce3 00aa ld $aa 2ce4 00a9 ld $a9 2ce5 0099 ld $99 2ce6 0096 ld $96 2ce7 006a ld $6a 2ce8 00a9 ld $a9 2ce9 00aa ld $aa 2cea 0095 ld $95 2ceb 006a ld $6a 2cec 006a ld $6a 2ced 0055 ld $55 2cee 0066 ld $66 2cef 0066 ld $66 2cf0 0065 ld $65 2cf1 0055 ld $55 2cf2 0099 ld $99 2cf3 0095 ld $95 2cf4 0099 ld $99 2cf5 00a5 ld $a5 2cf6 0066 ld $66 2cf7 00aa ld $aa 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 0065 ld $65 2d01 0059 ld $59 2d02 0055 ld $55 2d03 0055 ld $55 2d04 0055 ld $55 * 5 times 2d07 005a ld $5a 2d08 00a2 ld $a2 2d09 0029 ld $29 2d0a 009a ld $9a 2d0b 00a6 ld $a6 2d0c 0029 ld $29 2d0d 0099 ld $99 2d0e 0096 ld $96 2d0f 0069 ld $69 2d10 0095 ld $95 2d11 0056 ld $56 2d12 0099 ld $99 2d13 0059 ld $59 2d14 0055 ld $55 2d15 0055 ld $55 2d16 0055 ld $55 2d17 00aa ld $aa 2d18 00a5 ld $a5 2d19 005a ld $5a 2d1a 0096 ld $96 2d1b 006a ld $6a 2d1c 006a ld $6a 2d1d 00aa ld $aa 2d1e 00aa ld $aa 2d1f 005a ld $5a 2d20 006a ld $6a 2d21 0066 ld $66 2d22 00aa ld $aa 2d23 0095 ld $95 2d24 0096 ld $96 2d25 0059 ld $59 2d26 0099 ld $99 2d27 0095 ld $95 2d28 0099 ld $99 2d29 0059 ld $59 2d2a 0065 ld $65 2d2b 0056 ld $56 2d2c 009a ld $9a 2d2d 00a9 ld $a9 2d2e 006a ld $6a 2d2f 00ea ld $ea 2d30 0069 ld $69 2d31 0055 ld $55 2d32 0056 ld $56 2d33 0015 ld $15 2d34 0054 ld $54 2d35 0055 ld $55 2d36 0015 ld $15 2d37 0055 ld $55 2d38 00a5 ld $a5 2d39 0055 ld $55 2d3a 0049 ld $49 2d3b 00a5 ld $a5 2d3c 0055 ld $55 2d3d 005a ld $5a 2d3e 0055 ld $55 2d3f 0059 ld $59 2d40 0055 ld $55 2d41 0099 ld $99 2d42 0055 ld $55 2d43 0056 ld $56 2d44 0055 ld $55 2d45 0055 ld $55 2d46 005a ld $5a 2d47 0055 ld $55 2d48 0065 ld $65 2d49 00aa ld $aa 2d4a 009a ld $9a 2d4b 00a9 ld $a9 2d4c 00a9 ld $a9 2d4d 00aa ld $aa 2d4e 006a ld $6a 2d4f 006a ld $6a 2d50 00a5 ld $a5 2d51 00aa ld $aa 2d52 00aa ld $aa 2d53 00aa ld $aa 2d54 0095 ld $95 2d55 0056 ld $56 2d56 0055 ld $55 2d57 0056 ld $56 2d58 0055 ld $55 2d59 0059 ld $59 2d5a 0099 ld $99 2d5b 0059 ld $59 2d5c 00a9 ld $a9 2d5d 00a5 ld $a5 2d5e 009a ld $9a 2d5f 00aa ld $aa 2d60 006a ld $6a 2d61 0059 ld $59 2d62 0052 ld $52 2d63 0055 ld $55 2d64 0055 ld $55 2d65 0041 ld $41 2d66 0055 ld $55 2d67 0055 ld $55 2d68 0051 ld $51 2d69 0055 ld $55 2d6a 0055 ld $55 2d6b 0055 ld $55 2d6c 0014 ld $14 2d6d 0055 ld $55 2d6e 0091 ld $91 2d6f 0015 ld $15 2d70 0055 ld $55 2d71 0055 ld $55 2d72 0055 ld $55 * 6 times 2d76 0059 ld $59 2d77 00aa ld $aa 2d78 00a5 ld $a5 2d79 00a9 ld $a9 2d7a 00a7 ld $a7 2d7b 00aa ld $aa 2d7c 009a ld $9a 2d7d 009a ld $9a 2d7e 00aa ld $aa 2d7f 006a ld $6a 2d80 00aa ld $aa 2d81 00aa ld $aa 2d82 00a9 ld $a9 2d83 00aa ld $aa 2d84 00aa ld $aa 2d85 00a5 ld $a5 2d86 009a ld $9a 2d87 0099 ld $99 2d88 006a ld $6a 2d89 0055 ld $55 2d8a 00a6 ld $a6 2d8b 0056 ld $56 2d8c 00aa ld $aa 2d8d 00aa ld $aa 2d8e 00ad ld $ad 2d8f 00aa ld $aa 2d90 00b9 ld $b9 2d91 009a ld $9a 2d92 0096 ld $96 2d93 0065 ld $65 2d94 0055 ld $55 2d95 0055 ld $55 2d96 0055 ld $55 * 6 times 2d9a 0095 ld $95 2d9b 0056 ld $56 2d9c 0055 ld $55 2d9d 0059 ld $59 2d9e 0055 ld $55 2d9f 0055 ld $55 2da0 0055 ld $55 2da1 0056 ld $56 2da2 0055 ld $55 2da3 0059 ld $59 2da4 0095 ld $95 2da5 0065 ld $65 2da6 0059 ld $59 2da7 00aa ld $aa 2da8 00b9 ld $b9 2da9 00aa ld $aa 2daa 00ea ld $ea 2dab 00ba ld $ba 2dac 00aa ld $aa 2dad 00ab ld $ab 2dae 00aa ld $aa 2daf 009a ld $9a 2db0 00aa ld $aa 2db1 00aa ld $aa 2db2 00aa ld $aa 2db3 00aa ld $aa 2db4 0000 ld $00 2db5 0000 ld $00 2db6 0000 ld $00 2db7 00ff ld $ff 2db8 00ff ld $ff 2db9 00ff ld $ff * 66 times 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 00ff ld $ff 2e01 00ff ld $ff 2e02 00ff ld $ff 2e03 00ea ld $ea 2e04 00af ld $af 2e05 00fa ld $fa 2e06 00aa ld $aa 2e07 00fe ld $fe 2e08 00ea ld $ea 2e09 00ff ld $ff 2e0a 00ff ld $ff 2e0b 00ff ld $ff * 38 times 2e2f 00ab ld $ab 2e30 006a ld $6a 2e31 009a ld $9a 2e32 00a6 ld $a6 2e33 0065 ld $65 2e34 009a ld $9a 2e35 009a ld $9a 2e36 00a9 ld $a9 2e37 009a ld $9a 2e38 00aa ld $aa 2e39 00a9 ld $a9 2e3a 00aa ld $aa 2e3b 00ea ld $ea 2e3c 00ef ld $ef 2e3d 00ff ld $ff 2e3e 00ff ld $ff 2e3f 00ff ld $ff * 32 times 2e5d 006a ld $6a 2e5e 009a ld $9a 2e5f 0096 ld $96 2e60 0069 ld $69 2e61 0059 ld $59 2e62 00a6 ld $a6 2e63 00a5 ld $a5 2e64 005a ld $5a 2e65 00a6 ld $a6 2e66 0065 ld $65 2e67 005a ld $5a 2e68 00aa ld $aa 2e69 00a9 ld $a9 2e6a 009a ld $9a 2e6b 00aa ld $aa 2e6c 00a9 ld $a9 2e6d 00aa ld $aa 2e6e 00fa ld $fa 2e6f 00ff ld $ff 2e70 00ff ld $ff 2e71 00ff ld $ff * 28 times 2e8b 00af ld $af 2e8c 00a6 ld $a6 2e8d 0065 ld $65 2e8e 005a ld $5a 2e8f 00a6 ld $a6 2e90 0055 ld $55 2e91 005a ld $5a 2e92 00a6 ld $a6 2e93 0065 ld $65 2e94 009a ld $9a 2e95 0096 ld $96 2e96 006a ld $6a 2e97 009a ld $9a 2e98 00aa ld $aa 2e99 00b9 ld $b9 2e9a 009a ld $9a 2e9b 00ab ld $ab 2e9c 00ba ld $ba 2e9d 00ae ld $ae 2e9e 00ea ld $ea 2e9f 00ea ld $ea 2ea0 00ff ld $ff 2ea1 00ff ld $ff 2ea2 00ff ld $ff * 26 times 2eba 006a ld $6a 2ebb 005a ld $5a 2ebc 00a6 ld $a6 2ebd 0065 ld $65 2ebe 005a ld $5a 2ebf 00a6 ld $a6 2ec0 0065 ld $65 2ec1 005a ld $5a 2ec2 00a6 ld $a6 2ec3 0065 ld $65 2ec4 005a ld $5a 2ec5 00a6 ld $a6 2ec6 0069 ld $69 2ec7 0099 ld $99 2ec8 0096 ld $96 2ec9 00a9 ld $a9 2eca 009e ld $9e 2ecb 00ea ld $ea 2ecc 0069 ld $69 2ecd 00aa ld $aa 2ece 00ea ld $ea 2ecf 00ae ld $ae 2ed0 00ae ld $ae 2ed1 00fa ld $fa 2ed2 00ff ld $ff 2ed3 00ff ld $ff 2ed4 00ff ld $ff * 22 times 2ee8 00af ld $af 2ee9 00a6 ld $a6 2eea 0065 ld $65 2eeb 005a ld $5a 2eec 00a2 ld $a2 2eed 0065 ld $65 2eee 009a ld $9a 2eef 0096 ld $96 2ef0 0065 ld $65 2ef1 005a ld $5a 2ef2 0096 ld $96 2ef3 0059 ld $59 2ef4 0099 ld $99 2ef5 0096 ld $96 2ef6 0069 ld $69 2ef7 0099 ld $99 2ef8 00a6 ld $a6 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 0066 ld $66 2f01 009a ld $9a 2f02 00ea ld $ea 2f03 00a9 ld $a9 2f04 00ae ld $ae 2f05 00e6 ld $e6 2f06 00aa ld $aa 2f07 00ae ld $ae 2f08 00fa ld $fa 2f09 00eb ld $eb 2f0a 00ff ld $ff 2f0b 00ff ld $ff 2f0c 00ff ld $ff * 20 times 2f1e 00bf ld $bf 2f1f 009a ld $9a 2f20 0096 ld $96 2f21 0025 ld $25 2f22 0059 ld $59 2f23 00a6 ld $a6 2f24 0065 ld $65 2f25 0049 ld $49 2f26 0096 ld $96 2f27 0068 ld $68 2f28 0089 ld $89 2f29 0095 ld $95 2f2a 0065 ld $65 2f2b 005a ld $5a 2f2c 0096 ld $96 2f2d 0065 ld $65 2f2e 005a ld $5a 2f2f 0096 ld $96 2f30 0069 ld $69 2f31 009e ld $9e 2f32 0096 ld $96 2f33 006a ld $6a 2f34 009a ld $9a 2f35 00aa ld $aa 2f36 00a9 ld $a9 2f37 00aa ld $aa 2f38 00ab ld $ab 2f39 00ba ld $ba 2f3a 00ea ld $ea 2f3b 00ff ld $ff 2f3c 00ff ld $ff 2f3d 00ff ld $ff * 19 times 2f4e 0025 ld $25 2f4f 0059 ld $59 2f50 0052 ld $52 2f51 0054 ld $54 2f52 0049 ld $49 2f53 0092 ld $92 2f54 0025 ld $25 2f55 005a ld $5a 2f56 00a6 ld $a6 2f57 0065 ld $65 2f58 0049 ld $49 2f59 00a6 ld $a6 2f5a 0064 ld $64 2f5b 0049 ld $49 2f5c 00a5 ld $a5 2f5d 0065 ld $65 2f5e 005a ld $5a 2f5f 00a6 ld $a6 2f60 0065 ld $65 2f61 0099 ld $99 2f62 00a6 ld $a6 2f63 00a5 ld $a5 2f64 005a ld $5a 2f65 00ea ld $ea 2f66 00a9 ld $a9 2f67 009a ld $9a 2f68 00ea ld $ea 2f69 00aa ld $aa 2f6a 00ae ld $ae 2f6b 00fa ld $fa 2f6c 00ff ld $ff 2f6d 00ff ld $ff 2f6e 00ff ld $ff * 16 times 2f7c 00ef ld $ef 2f7d 0096 ld $96 2f7e 0015 ld $15 2f7f 0045 ld $45 2f80 0096 ld $96 2f81 0024 ld $24 2f82 0059 ld $59 2f83 0091 ld $91 2f84 0069 ld $69 2f85 0099 ld $99 2f86 0052 ld $52 2f87 0064 ld $64 2f88 0099 ld $99 2f89 0096 ld $96 2f8a 0025 ld $25 2f8b 0099 ld $99 2f8c 0096 ld $96 2f8d 0065 ld $65 2f8e 0099 ld $99 2f8f 0096 ld $96 2f90 0069 ld $69 2f91 005a ld $5a 2f92 00ea ld $ea 2f93 0069 ld $69 2f94 009e ld $9e 2f95 00a6 ld $a6 2f96 006a ld $6a 2f97 00ae ld $ae 2f98 00e6 ld $e6 2f99 00aa ld $aa 2f9a 00af ld $af 2f9b 00ea ld $ea 2f9c 00ea ld $ea 2f9d 00ff ld $ff 2f9e 00ff ld $ff 2f9f 00ff ld $ff * 15 times 2fac 005f ld $5f 2fad 0052 ld $52 2fae 0024 ld $24 2faf 0049 ld $49 2fb0 0091 ld $91 2fb1 0025 ld $25 2fb2 0045 ld $45 2fb3 00a6 ld $a6 2fb4 0024 ld $24 2fb5 0059 ld $59 2fb6 00a2 ld $a2 2fb7 0025 ld $25 2fb8 005a ld $5a 2fb9 0092 ld $92 2fba 0069 ld $69 2fbb 0049 ld $49 2fbc 00a6 ld $a6 2fbd 0064 ld $64 2fbe 005a ld $5a 2fbf 00a6 ld $a6 2fc0 0075 ld $75 2fc1 009a ld $9a 2fc2 00e6 ld $e6 2fc3 0066 ld $66 2fc4 00aa ld $aa 2fc5 00eb ld $eb 2fc6 00a9 ld $a9 2fc7 00ae ld $ae 2fc8 00ea ld $ea 2fc9 00aa ld $aa 2fca 00ae ld $ae 2fcb 00fb ld $fb 2fcc 00fa ld $fa 2fcd 00ff ld $ff 2fce 00ff ld $ff 2fcf 00ff ld $ff * 14 times 2fdb 007f ld $7f 2fdc 0049 ld $49 2fdd 0091 ld $91 2fde 0025 ld $25 2fdf 0059 ld $59 2fe0 0096 ld $96 2fe1 0024 ld $24 2fe2 0059 ld $59 2fe3 0092 ld $92 2fe4 0064 ld $64 2fe5 0049 ld $49 2fe6 0092 ld $92 2fe7 0069 ld $69 2fe8 0099 ld $99 2fe9 0092 ld $92 2fea 0025 ld $25 2feb 0055 ld $55 2fec 0096 ld $96 2fed 0079 ld $79 2fee 005a ld $5a 2fef 00a6 ld $a6 2ff0 0069 ld $69 2ff1 009d ld $9d 2ff2 0096 ld $96 2ff3 0069 ld $69 2ff4 0099 ld $99 2ff5 0096 ld $96 2ff6 006a ld $6a 2ff7 00ae ld $ae 2ff8 00e6 ld $e6 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 00a9 ld $a9 3001 00ae ld $ae 3002 00ea ld $ea 3003 00ae ld $ae 3004 00ae ld $ae 3005 00fe ld $fe 3006 00ff ld $ff 3007 00ff ld $ff 3008 00ff ld $ff * 12 times 3012 0025 ld $25 3013 0045 ld $45 3014 0096 ld $96 3015 0014 ld $14 3016 0045 ld $45 3017 0051 ld $51 3018 0014 ld $14 3019 0045 ld $45 301a 0051 ld $51 301b 0015 ld $15 301c 0045 ld $45 301d 0052 ld $52 301e 0025 ld $25 301f 0049 ld $49 3020 0056 ld $56 3021 0064 ld $64 3022 0049 ld $49 3023 0055 ld $55 3024 0065 ld $65 3025 0049 ld $49 3026 0096 ld $96 3027 0069 ld $69 3028 0099 ld $99 3029 0096 ld $96 302a 0069 ld $69 302b 0099 ld $99 302c 0096 ld $96 302d 00a9 ld $a9 302e 009a ld $9a 302f 00aa ld $aa 3030 00a9 ld $a9 3031 00aa ld $aa 3032 00ab ld $ab 3033 00ba ld $ba 3034 00ae ld $ae 3035 00fa ld $fa 3036 00ff ld $ff 3037 00ff ld $ff 3038 00ff ld $ff * 11 times 3041 00ab ld $ab 3042 0014 ld $14 3043 0044 ld $44 3044 0041 ld $41 3045 0014 ld $14 3046 0004 ld $04 3047 0051 ld $51 3048 0010 ld $10 3049 0005 ld $05 304a 0041 ld $41 304b 0010 ld $10 304c 0005 ld $05 304d 0051 ld $51 304e 0010 ld $10 304f 0005 ld $05 3050 0051 ld $51 3051 0014 ld $14 3052 0045 ld $45 3053 0091 ld $91 3054 0014 ld $14 3055 0055 ld $55 3056 0052 ld $52 3057 0065 ld $65 3058 0055 ld $55 3059 0096 ld $96 305a 0065 ld $65 305b 0059 ld $59 305c 00a6 ld $a6 305d 0065 ld $65 305e 0099 ld $99 305f 0096 ld $96 3060 00a9 ld $a9 3061 009a ld $9a 3062 00aa ld $aa 3063 00aa ld $aa 3064 00aa ld $aa 3065 00ab ld $ab 3066 00ea ld $ea 3067 00ff ld $ff 3068 00ff ld $ff 3069 00ff ld $ff * 9 times 3070 00af ld $af 3071 0042 ld $42 3072 0010 ld $10 3073 0005 ld $05 3074 0041 ld $41 3075 0010 ld $10 3076 0005 ld $05 3077 0041 ld $41 3078 0010 ld $10 3079 0044 ld $44 307a 0041 ld $41 307b 0014 ld $14 307c 0004 ld $04 307d 0051 ld $51 307e 0010 ld $10 307f 0045 ld $45 3080 0041 ld $41 3081 0054 ld $54 3082 0044 ld $44 3083 0045 ld $45 3084 0054 ld $54 3085 0059 ld $59 3086 0055 ld $55 3087 0064 ld $64 3088 0045 ld $45 3089 0066 ld $66 308a 0065 ld $65 308b 0056 ld $56 308c 0096 ld $96 308d 00a9 ld $a9 308e 0099 ld $99 308f 009a ld $9a 3090 00a9 ld $a9 3091 009a ld $9a 3092 00ea ld $ea 3093 00aa ld $aa 3094 00af ld $af 3095 00ea ld $ea 3096 00ea ld $ea 3097 00ff ld $ff 3098 00ff ld $ff 3099 00ff ld $ff * 9 times 30a0 000f ld $0f 30a1 0051 ld $51 30a2 0010 ld $10 30a3 0010 ld $10 30a4 0040 ld $40 30a5 0014 ld $14 30a6 0004 ld $04 30a7 0041 ld $41 30a8 0010 ld $10 30a9 0005 ld $05 30aa 0041 ld $41 30ab 0010 ld $10 30ac 0004 ld $04 30ad 0051 ld $51 30ae 0010 ld $10 30af 0004 ld $04 30b0 0051 ld $51 30b1 0010 ld $10 30b2 0005 ld $05 30b3 0051 ld $51 30b4 0054 ld $54 30b5 0005 ld $05 30b6 0051 ld $51 30b7 0054 ld $54 30b8 0045 ld $45 30b9 0056 ld $56 30ba 0065 ld $65 30bb 0055 ld $55 30bc 0096 ld $96 30bd 0055 ld $55 30be 005a ld $5a 30bf 00a5 ld $a5 30c0 0065 ld $65 30c1 006a ld $6a 30c2 00a6 ld $a6 30c3 006a ld $6a 30c4 00aa ld $aa 30c5 00aa ld $aa 30c6 00aa ld $aa 30c7 00aa ld $aa 30c8 00fe ld $fe 30c9 00ff ld $ff 30ca 00ff ld $ff 30cb 00ff ld $ff * 7 times 30d0 005f ld $5f 30d1 0051 ld $51 30d2 0010 ld $10 30d3 0010 ld $10 30d4 0050 ld $50 30d5 0010 ld $10 30d6 0010 ld $10 30d7 0050 ld $50 30d8 0040 ld $40 30d9 0040 ld $40 30da 0001 ld $01 30db 0001 ld $01 30dc 0044 ld $44 30dd 0041 ld $41 30de 0014 ld $14 30df 0044 ld $44 30e0 0041 ld $41 30e1 0014 ld $14 30e2 0055 ld $55 30e3 0041 ld $41 30e4 0054 ld $54 30e5 0005 ld $05 30e6 0095 ld $95 30e7 0010 ld $10 30e8 0055 ld $55 30e9 0056 ld $56 30ea 0025 ld $25 30eb 0055 ld $55 30ec 0095 ld $95 30ed 0054 ld $54 30ee 0099 ld $99 30ef 0095 ld $95 30f0 0069 ld $69 30f1 0095 ld $95 30f2 009a ld $9a 30f3 00a9 ld $a9 30f4 009a ld $9a 30f5 00aa ld $aa 30f6 00a9 ld $a9 30f7 00aa ld $aa 30f8 00ea ld $ea 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 00aa ld $aa 3101 00ae ld $ae 3102 00fa ld $fa 3103 00ff ld $ff 3104 00ff ld $ff 3105 00ff ld $ff * 6 times 3109 00bf ld $bf 310a 004a ld $4a 310b 0041 ld $41 310c 0014 ld $14 310d 0005 ld $05 310e 0051 ld $51 310f 0014 ld $14 3110 0044 ld $44 3111 0041 ld $41 3112 0014 ld $14 3113 0005 ld $05 3114 0051 ld $51 3115 0010 ld $10 3116 0045 ld $45 3117 0051 ld $51 3118 0011 ld $11 3119 0005 ld $05 311a 0051 ld $51 311b 0054 ld $54 311c 0049 ld $49 311d 0051 ld $51 311e 0025 ld $25 311f 0055 ld $55 3120 0051 ld $51 3121 0054 ld $54 3122 0055 ld $55 3123 0056 ld $56 3124 0069 ld $69 3125 0059 ld $59 3126 0066 ld $66 3127 0065 ld $65 3128 005a ld $5a 3129 00aa ld $aa 312a 0065 ld $65 312b 006a ld $6a 312c 00a6 ld $a6 312d 00aa ld $aa 312e 009a ld $9a 312f 00ab ld $ab 3130 00aa ld $aa 3131 00aa ld $aa 3132 00aa ld $aa 3133 00ff ld $ff 3134 00ff ld $ff 3135 00ff ld $ff * 6 times 3139 007f ld $7f 313a 0005 ld $05 313b 0051 ld $51 313c 0010 ld $10 313d 0004 ld $04 313e 0004 ld $04 313f 0010 ld $10 3140 0004 ld $04 3141 0041 ld $41 3142 0010 ld $10 3143 0004 ld $04 3144 0015 ld $15 3145 0010 ld $10 3146 0004 ld $04 3147 0041 ld $41 3148 0010 ld $10 3149 0005 ld $05 314a 0051 ld $51 314b 0010 ld $10 314c 0044 ld $44 314d 0041 ld $41 314e 0015 ld $15 314f 0005 ld $05 3150 0051 ld $51 3151 0015 ld $15 3152 0059 ld $59 3153 0051 ld $51 3154 0064 ld $64 3155 0055 ld $55 3156 0055 ld $55 3157 0065 ld $65 3158 0055 ld $55 3159 0066 ld $66 315a 0065 ld $65 315b 006a ld $6a 315c 00a6 ld $a6 315d 006a ld $6a 315e 00aa ld $aa 315f 00aa ld $aa 3160 00aa ld $aa 3161 00af ld $af 3162 00ea ld $ea 3163 00aa ld $aa 3164 00fa ld $fa 3165 00ff ld $ff 3166 00ff ld $ff 3167 00ff ld $ff 3168 00ff ld $ff 3169 00bf ld $bf 316a 004a ld $4a 316b 0041 ld $41 316c 0010 ld $10 316d 0010 ld $10 316e 0040 ld $40 316f 0040 ld $40 3170 0040 ld $40 3171 0001 ld $01 3172 0003 ld $03 3173 0001 ld $01 3174 0004 ld $04 3175 0010 ld $10 3176 0010 ld $10 3177 0040 ld $40 3178 0040 ld $40 3179 0040 ld $40 317a 0040 ld $40 317b 0004 ld $04 317c 0044 ld $44 317d 0001 ld $01 317e 0001 ld $01 317f 0005 ld $05 3180 0051 ld $51 3181 0010 ld $10 3182 0005 ld $05 3183 0055 ld $55 3184 0010 ld $10 3185 0015 ld $15 3186 0051 ld $51 3187 0054 ld $54 3188 0045 ld $45 3189 0056 ld $56 318a 0064 ld $64 318b 0055 ld $55 318c 0066 ld $66 318d 0065 ld $65 318e 0055 ld $55 318f 0066 ld $66 3190 0065 ld $65 3191 006a ld $6a 3192 00a6 ld $a6 3193 00ba ld $ba 3194 00aa ld $aa 3195 00a6 ld $a6 3196 00aa ld $aa 3197 00aa ld $aa 3198 00fe ld $fe 3199 00ff ld $ff 319a 00ff ld $ff 319b 00ff ld $ff 319c 00ff ld $ff 319d 009f ld $9f 319e 0042 ld $42 319f 0040 ld $40 31a0 0050 ld $50 31a1 0041 ld $41 31a2 0040 ld $40 31a3 0000 ld $00 31a4 0041 ld $41 31a5 0040 ld $40 31a6 0000 ld $00 31a7 0041 ld $41 31a8 0010 ld $10 31a9 0010 ld $10 31aa 0040 ld $40 31ab 0010 ld $10 31ac 0001 ld $01 31ad 0041 ld $41 31ae 0010 ld $10 31af 0044 ld $44 31b0 0001 ld $01 31b1 0001 ld $01 31b2 0044 ld $44 31b3 0041 ld $41 31b4 0014 ld $14 31b5 0044 ld $44 31b6 0051 ld $51 31b7 0050 ld $50 31b8 0045 ld $45 31b9 0055 ld $55 31ba 0054 ld $54 31bb 0055 ld $55 31bc 0051 ld $51 31bd 0065 ld $65 31be 0055 ld $55 31bf 0056 ld $56 31c0 0065 ld $65 31c1 0095 ld $95 31c2 00aa ld $aa 31c3 00a5 ld $a5 31c4 00aa ld $aa 31c5 00a6 ld $a6 31c6 00aa ld $aa 31c7 009a ld $9a 31c8 00ea ld $ea 31c9 00aa ld $aa 31ca 00ae ld $ae 31cb 00aa ld $aa 31cc 00fe ld $fe 31cd 00ff ld $ff 31ce 00ff ld $ff 31cf 00ff ld $ff 31d0 00ff ld $ff 31d1 0047 ld $47 31d2 0014 ld $14 31d3 0004 ld $04 31d4 0041 ld $41 31d5 0010 ld $10 31d6 0005 ld $05 31d7 0041 ld $41 31d8 0014 ld $14 31d9 0004 ld $04 31da 0051 ld $51 31db 0010 ld $10 31dc 0005 ld $05 31dd 0041 ld $41 31de 0014 ld $14 31df 0044 ld $44 31e0 0041 ld $41 31e1 0014 ld $14 31e2 0044 ld $44 31e3 0041 ld $41 31e4 0054 ld $54 31e5 0044 ld $44 31e6 0045 ld $45 31e7 0014 ld $14 31e8 0005 ld $05 31e9 0095 ld $95 31ea 0054 ld $54 31eb 0049 ld $49 31ec 0095 ld $95 31ed 0015 ld $15 31ee 0059 ld $59 31ef 00a5 ld $a5 31f0 0055 ld $55 31f1 005a ld $5a 31f2 0096 ld $96 31f3 0069 ld $69 31f4 0099 ld $99 31f5 009a ld $9a 31f6 00a9 ld $a9 31f7 00aa ld $aa 31f8 00aa ld $aa 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 00aa ld $aa 3201 00aa ld $aa 3202 00ab ld $ab 3203 00ea ld $ea 3204 00ff ld $ff 3205 00ff ld $ff 3206 00ff ld $ff 3207 00af ld $af 3208 0092 ld $92 3209 0014 ld $14 320a 0044 ld $44 320b 0051 ld $51 320c 0014 ld $14 320d 0045 ld $45 320e 0041 ld $41 320f 0015 ld $15 3210 0044 ld $44 3211 0041 ld $41 3212 0015 ld $15 3213 0005 ld $05 3214 0051 ld $51 3215 0014 ld $14 3216 0054 ld $54 3217 0051 ld $51 3218 0060 ld $60 3219 0045 ld $45 321a 0052 ld $52 321b 0014 ld $14 321c 0045 ld $45 321d 0091 ld $91 321e 0054 ld $54 321f 0059 ld $59 3220 0052 ld $52 3221 0025 ld $25 3222 0059 ld $59 3223 0096 ld $96 3224 0069 ld $69 3225 0099 ld $99 3226 0096 ld $96 3227 0069 ld $69 3228 0099 ld $99 3229 00aa ld $aa 322a 00aa ld $aa 322b 009a ld $9a 322c 00aa ld $aa 322d 00a9 ld $a9 322e 00aa ld $aa 322f 00ab ld $ab 3230 007a ld $7a 3231 00ab ld $ab 3232 00ab ld $ab 3233 00fa ld $fa 3234 00ff ld $ff 3235 00ff ld $ff 3236 00ff ld $ff 3237 00af ld $af 3238 0092 ld $92 3239 0025 ld $25 323a 0049 ld $49 323b 0091 ld $91 323c 0064 ld $64 323d 0049 ld $49 323e 0096 ld $96 323f 0024 ld $24 3240 0005 ld $05 3241 0052 ld $52 3242 0014 ld $14 3243 0048 ld $48 3244 0095 ld $95 3245 0024 ld $24 3246 0005 ld $05 3247 0052 ld $52 3248 0025 ld $25 3249 0044 ld $44 324a 0052 ld $52 324b 0021 ld $21 324c 0059 ld $59 324d 0052 ld $52 324e 0025 ld $25 324f 0049 ld $49 3250 0096 ld $96 3251 0065 ld $65 3252 0099 ld $99 3253 0096 ld $96 3254 0069 ld $69 3255 005a ld $5a 3256 00e6 ld $e6 3257 0069 ld $69 3258 00aa ld $aa 3259 00a6 ld $a6 325a 0079 ld $79 325b 00aa ld $aa 325c 00ab ld $ab 325d 007a ld $7a 325e 00ae ld $ae 325f 00ea ld $ea 3260 00be ld $be 3261 00aa ld $aa 3262 00bb ld $bb 3263 00ba ld $ba 3264 00fb ld $fb 3265 00ff ld $ff 3266 00ff ld $ff 3267 009f ld $9f 3268 00a7 ld $a7 3269 0039 ld $39 326a 0049 ld $49 326b 0096 ld $96 326c 0014 ld $14 326d 0049 ld $49 326e 0092 ld $92 326f 0069 ld $69 3270 0099 ld $99 3271 0053 ld $53 3272 0020 ld $20 3273 0055 ld $55 3274 0092 ld $92 3275 0065 ld $65 3276 0049 ld $49 3277 0092 ld $92 3278 0024 ld $24 3279 005a ld $5a 327a 0092 ld $92 327b 0014 ld $14 327c 0059 ld $59 327d 0092 ld $92 327e 0065 ld $65 327f 0099 ld $99 3280 00a6 ld $a6 3281 0068 ld $68 3282 005a ld $5a 3283 00a2 ld $a2 3284 0065 ld $65 3285 009a ld $9a 3286 00a7 ld $a7 3287 007a ld $7a 3288 00ae ld $ae 3289 00a7 ld $a7 328a 006a ld $6a 328b 00aa ld $aa 328c 00a7 ld $a7 328d 00ba ld $ba 328e 00ea ld $ea 328f 00fb ld $fb 3290 00ba ld $ba 3291 00af ld $af 3292 00eb ld $eb 3293 00be ld $be 3294 00fe ld $fe 3295 00ff ld $ff 3296 00bf ld $bf 3297 009f ld $9f 3298 00a7 ld $a7 3299 0078 ld $78 329a 005a ld $5a 329b 0092 ld $92 329c 0024 ld $24 329d 0099 ld $99 329e 00a6 ld $a6 329f 0034 ld $34 32a0 009a ld $9a 32a1 00a7 ld $a7 32a2 0065 ld $65 32a3 009e ld $9e 32a4 00a2 ld $a2 32a5 0079 ld $79 32a6 009e ld $9e 32a7 00a6 ld $a6 32a8 0065 ld $65 32a9 009a ld $9a 32aa 00a7 ld $a7 32ab 0079 ld $79 32ac 004a ld $4a 32ad 0092 ld $92 32ae 0025 ld $25 32af 004a ld $4a 32b0 0096 ld $96 32b1 0079 ld $79 32b2 0099 ld $99 32b3 00a7 ld $a7 32b4 0079 ld $79 32b5 00aa ld $aa 32b6 00a7 ld $a7 32b7 00b9 ld $b9 32b8 00aa ld $aa 32b9 00eb ld $eb 32ba 00b9 ld $b9 32bb 009e ld $9e 32bc 00ea ld $ea 32bd 00ae ld $ae 32be 00ee ld $ee 32bf 00eb ld $eb 32c0 00be ld $be 32c1 00ee ld $ee 32c2 00bb ld $bb 32c3 00bb ld $bb 32c4 00ff ld $ff 32c5 00ff ld $ff 32c6 00bf ld $bf 32c7 009b ld $9b 32c8 00e7 ld $e7 32c9 0029 ld $29 32ca 008d ld $8d 32cb 00e6 ld $e6 32cc 0068 ld $68 32cd 009d ld $9d 32ce 0093 ld $93 32cf 0068 ld $68 32d0 0049 ld $49 32d1 00e2 ld $e2 32d2 0079 ld $79 32d3 009a ld $9a 32d4 00e7 ld $e7 32d5 0029 ld $29 32d6 009a ld $9a 32d7 00e7 ld $e7 32d8 0079 ld $79 32d9 009e ld $9e 32da 00e7 ld $e7 32db 0079 ld $79 32dc 00ae ld $ae 32dd 00e6 ld $e6 32de 0069 ld $69 32df 009a ld $9a 32e0 00e6 ld $e6 32e1 0069 ld $69 32e2 009e ld $9e 32e3 00d6 ld $d6 32e4 0069 ld $69 32e5 009e ld $9e 32e6 00ea ld $ea 32e7 0069 ld $69 32e8 00ae ld $ae 32e9 00e6 ld $e6 32ea 00ba ld $ba 32eb 00aa ld $aa 32ec 00e7 ld $e7 32ed 00ba ld $ba 32ee 00af ld $af 32ef 00fe ld $fe 32f0 00ba ld $ba 32f1 00bf ld $bf 32f2 00fb ld $fb 32f3 00be ld $be 32f4 00fa ld $fa 32f5 00ff ld $ff 32f6 00bf ld $bf 32f7 009e ld $9e 32f8 00e6 ld $e6 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 0024 ld $24 3301 005a ld $5a 3302 0092 ld $92 3303 0024 ld $24 3304 005a ld $5a 3305 00a2 ld $a2 3306 0035 ld $35 3307 009a ld $9a 3308 0093 ld $93 3309 0029 ld $29 330a 0049 ld $49 330b 0092 ld $92 330c 0010 ld $10 330d 0054 ld $54 330e 00a2 ld $a2 330f 0079 ld $79 3310 005e ld $5e 3311 00a2 ld $a2 3312 0065 ld $65 3313 008a ld $8a 3314 00e6 ld $e6 3315 0069 ld $69 3316 009e ld $9e 3317 00a7 ld $a7 3318 0079 ld $79 3319 009a ld $9a 331a 00a7 ld $a7 331b 00b9 ld $b9 331c 0099 ld $99 331d 00a7 ld $a7 331e 007a ld $7a 331f 009a ld $9a 3320 00ab ld $ab 3321 00ba ld $ba 3322 00af ld $af 3323 00fb ld $fb 3324 00aa ld $aa 3325 00ee ld $ee 3326 00fb ld $fb 3327 00ba ld $ba 3328 00ab ld $ab 3329 00ab ld $ab 332a 00ba ld $ba 332b 00ee ld $ee 332c 00ff ld $ff 332d 007f ld $7f 332e 004a ld $4a 332f 0092 ld $92 3330 0024 ld $24 3331 0049 ld $49 3332 0092 ld $92 3333 0024 ld $24 3334 0049 ld $49 3335 0092 ld $92 3336 0024 ld $24 3337 0049 ld $49 3338 0092 ld $92 3339 0024 ld $24 333a 0049 ld $49 333b 0041 ld $41 333c 0010 ld $10 333d 0044 ld $44 333e 0095 ld $95 333f 0024 ld $24 3340 0059 ld $59 3341 0092 ld $92 3342 0025 ld $25 3343 0059 ld $59 3344 0092 ld $92 3345 0064 ld $64 3346 0059 ld $59 3347 0096 ld $96 3348 0065 ld $65 3349 0099 ld $99 334a 0096 ld $96 334b 0069 ld $69 334c 005a ld $5a 334d 00e6 ld $e6 334e 0065 ld $65 334f 00aa ld $aa 3350 00a6 ld $a6 3351 0069 ld $69 3352 00aa ld $aa 3353 00e6 ld $e6 3354 00ba ld $ba 3355 00aa ld $aa 3356 00ab ld $ab 3357 00ba ld $ba 3358 00ae ld $ae 3359 00fa ld $fa 335a 00ba ld $ba 335b 00fa ld $fa 335c 00fe ld $fe 335d 007f ld $7f 335e 0049 ld $49 335f 0096 ld $96 3360 0020 ld $20 3361 0005 ld $05 3362 0041 ld $41 3363 0014 ld $14 3364 0044 ld $44 3365 0092 ld $92 3366 0014 ld $14 3367 0048 ld $48 3368 0091 ld $91 3369 0014 ld $14 336a 0049 ld $49 336b 0041 ld $41 336c 0014 ld $14 336d 0045 ld $45 336e 0092 ld $92 336f 0025 ld $25 3370 0049 ld $49 3371 0091 ld $91 3372 0024 ld $24 3373 0045 ld $45 3374 0052 ld $52 3375 0015 ld $15 3376 0049 ld $49 3377 0095 ld $95 3378 0064 ld $64 3379 005a ld $5a 337a 00a6 ld $a6 337b 0065 ld $65 337c 009d ld $9d 337d 0096 ld $96 337e 0069 ld $69 337f 0059 ld $59 3380 00aa ld $aa 3381 00b5 ld $b5 3382 009a ld $9a 3383 00ab ld $ab 3384 00aa ld $aa 3385 00aa ld $aa 3386 00ea ld $ea 3387 00aa ld $aa 3388 00aa ld $aa 3389 00aa ld $aa 338a 00be ld $be 338b 00aa ld $aa 338c 00ff ld $ff 338d 007f ld $7f 338e 0049 ld $49 338f 0052 ld $52 3390 0024 ld $24 3391 0044 ld $44 3392 0042 ld $42 3393 0024 ld $24 3394 0049 ld $49 3395 0092 ld $92 3396 0024 ld $24 3397 0005 ld $05 3398 0092 ld $92 3399 0025 ld $25 339a 0048 ld $48 339b 0041 ld $41 339c 0024 ld $24 339d 0045 ld $45 339e 0092 ld $92 339f 0014 ld $14 33a0 0049 ld $49 33a1 0041 ld $41 33a2 0015 ld $15 33a3 0058 ld $58 33a4 0091 ld $91 33a5 0064 ld $64 33a6 0045 ld $45 33a7 0096 ld $96 33a8 0065 ld $65 33a9 0059 ld $59 33aa 00a6 ld $a6 33ab 0065 ld $65 33ac 009a ld $9a 33ad 0096 ld $96 33ae 0069 ld $69 33af 0099 ld $99 33b0 00a6 ld $a6 33b1 006a ld $6a 33b2 00aa ld $aa 33b3 00a7 ld $a7 33b4 00ba ld $ba 33b5 00ae ld $ae 33b6 00bb ld $bb 33b7 00ba ld $ba 33b8 00aa ld $aa 33b9 00eb ld $eb 33ba 00aa ld $aa 33bb 00ee ld $ee 33bc 00fe ld $fe 33bd 007f ld $7f 33be 004a ld $4a 33bf 0092 ld $92 33c0 0014 ld $14 33c1 0009 ld $09 33c2 0091 ld $91 33c3 0024 ld $24 33c4 0049 ld $49 33c5 0052 ld $52 33c6 0020 ld $20 33c7 0049 ld $49 33c8 0091 ld $91 33c9 0024 ld $24 33ca 0049 ld $49 33cb 0092 ld $92 33cc 0015 ld $15 33cd 0049 ld $49 33ce 0096 ld $96 33cf 0024 ld $24 33d0 0055 ld $55 33d1 0092 ld $92 33d2 0014 ld $14 33d3 0009 ld $09 33d4 0091 ld $91 33d5 0015 ld $15 33d6 0059 ld $59 33d7 0096 ld $96 33d8 0069 ld $69 33d9 0089 ld $89 33da 0097 ld $97 33db 0069 ld $69 33dc 009d ld $9d 33dd 009a ld $9a 33de 0079 ld $79 33df 00aa ld $aa 33e0 00a7 ld $a7 33e1 007a ld $7a 33e2 00ae ld $ae 33e3 00ea ld $ea 33e4 00ba ld $ba 33e5 00af ld $af 33e6 00ab ld $ab 33e7 00ba ld $ba 33e8 00ee ld $ee 33e9 00fa ld $fa 33ea 00ba ld $ba 33eb 00aa ld $aa 33ec 00ff ld $ff 33ed 007f ld $7f 33ee 004a ld $4a 33ef 0096 ld $96 33f0 0024 ld $24 33f1 0059 ld $59 33f2 0092 ld $92 33f3 0024 ld $24 33f4 0049 ld $49 33f5 0096 ld $96 33f6 0024 ld $24 33f7 0059 ld $59 33f8 0092 ld $92 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 0024 ld $24 3401 0049 ld $49 3402 0092 ld $92 3403 0024 ld $24 3404 0045 ld $45 3405 0096 ld $96 3406 0064 ld $64 3407 0049 ld $49 3408 0096 ld $96 3409 0064 ld $64 340a 0059 ld $59 340b 0092 ld $92 340c 0065 ld $65 340d 009a ld $9a 340e 0092 ld $92 340f 0069 ld $69 3410 0099 ld $99 3411 0096 ld $96 3412 0079 ld $79 3413 009a ld $9a 3414 00e7 ld $e7 3415 006a ld $6a 3416 00ae ld $ae 3417 00e6 ld $e6 3418 00ba ld $ba 3419 009a ld $9a 341a 00eb ld $eb 341b 00be ld $be 341c 00ee ld $ee 341d 00eb ld $eb 341e 00be ld $be 341f 00ee ld $ee 3420 00eb ld $eb 3421 00be ld $be 3422 00ea ld $ea 3423 00ff ld $ff 3424 007f ld $7f 3425 005a ld $5a 3426 00a2 ld $a2 3427 0064 ld $64 3428 0049 ld $49 3429 0092 ld $92 342a 0025 ld $25 342b 0059 ld $59 342c 00a2 ld $a2 342d 0025 ld $25 342e 004a ld $4a 342f 00a6 ld $a6 3430 0064 ld $64 3431 0049 ld $49 3432 0096 ld $96 3433 0064 ld $64 3434 0049 ld $49 3435 00a6 ld $a6 3436 0064 ld $64 3437 009e ld $9e 3438 00a6 ld $a6 3439 0065 ld $65 343a 009a ld $9a 343b 00e6 ld $e6 343c 0069 ld $69 343d 005e ld $5e 343e 00e6 ld $e6 343f 0069 ld $69 3440 009e ld $9e 3441 00a7 ld $a7 3442 0079 ld $79 3443 00aa ld $aa 3444 00ab ld $ab 3445 00b9 ld $b9 3446 009e ld $9e 3447 00ab ld $ab 3448 00b9 ld $b9 3449 00ae ld $ae 344a 00fb ld $fb 344b 00ba ld $ba 344c 00ab ld $ab 344d 00fb ld $fb 344e 00be ld $be 344f 00ea ld $ea 3450 00eb ld $eb 3451 00be ld $be 3452 00fe ld $fe 3453 00ff ld $ff 3454 007f ld $7f 3455 008a ld $8a 3456 0097 ld $97 3457 0029 ld $29 3458 009e ld $9e 3459 00a2 ld $a2 345a 0064 ld $64 345b 004a ld $4a 345c 00e6 ld $e6 345d 0024 ld $24 345e 0099 ld $99 345f 0093 ld $93 3460 0029 ld $29 3461 005a ld $5a 3462 00e6 ld $e6 3463 0068 ld $68 3464 008d ld $8d 3465 00d6 ld $d6 3466 0039 ld $39 3467 005a ld $5a 3468 00e3 ld $e3 3469 0029 ld $29 346a 009d ld $9d 346b 0096 ld $96 346c 0079 ld $79 346d 009a ld $9a 346e 00e7 ld $e7 346f 0079 ld $79 3470 009e ld $9e 3471 00ea ld $ea 3472 00b9 ld $b9 3473 009a ld $9a 3474 00e7 ld $e7 3475 006a ld $6a 3476 00ae ld $ae 3477 00eb ld $eb 3478 00be ld $be 3479 00ea ld $ea 347a 00eb ld $eb 347b 00be ld $be 347c 00ee ld $ee 347d 00eb ld $eb 347e 00be ld $be 347f 00fe ld $fe 3480 00eb ld $eb 3481 00ae ld $ae 3482 00ee ld $ee 3483 00ff ld $ff 3484 00bf ld $bf 3485 004e ld $4e 3486 00e6 ld $e6 3487 0064 ld $64 3488 004a ld $4a 3489 0097 ld $97 348a 0024 ld $24 348b 0049 ld $49 348c 0092 ld $92 348d 0024 ld $24 348e 0049 ld $49 348f 00a2 ld $a2 3490 0025 ld $25 3491 009d ld $9d 3492 0092 ld $92 3493 0064 ld $64 3494 0089 ld $89 3495 0097 ld $97 3496 0068 ld $68 3497 0049 ld $49 3498 00a6 ld $a6 3499 0064 ld $64 349a 005a ld $5a 349b 00a3 ld $a3 349c 0079 ld $79 349d 009a ld $9a 349e 00a7 ld $a7 349f 00b9 ld $b9 34a0 009a ld $9a 34a1 00a7 ld $a7 34a2 0079 ld $79 34a3 009a ld $9a 34a4 00ab ld $ab 34a5 00b9 ld $b9 34a6 009a ld $9a 34a7 00ab ld $ab 34a8 00b9 ld $b9 34a9 00ee ld $ee 34aa 00eb ld $eb 34ab 00ba ld $ba 34ac 00ab ld $ab 34ad 00ab ld $ab 34ae 00ba ld $ba 34af 00ab ld $ab 34b0 00fb ld $fb 34b1 00ba ld $ba 34b2 00bb ld $bb 34b3 00ff ld $ff 34b4 00bf ld $bf 34b5 009a ld $9a 34b6 00e7 ld $e7 34b7 0029 ld $29 34b8 005e ld $5e 34b9 00a2 ld $a2 34ba 0039 ld $39 34bb 005a ld $5a 34bc 00a3 ld $a3 34bd 0069 ld $69 34be 004e ld $4e 34bf 00e6 ld $e6 34c0 0068 ld $68 34c1 005e ld $5e 34c2 00e2 ld $e2 34c3 0069 ld $69 34c4 004a ld $4a 34c5 00e6 ld $e6 34c6 0065 ld $65 34c7 008e ld $8e 34c8 00d6 ld $d6 34c9 0069 ld $69 34ca 009e ld $9e 34cb 00e6 ld $e6 34cc 0069 ld $69 34cd 009e ld $9e 34ce 00a7 ld $a7 34cf 0079 ld $79 34d0 009a ld $9a 34d1 00eb ld $eb 34d2 00a9 ld $a9 34d3 009e ld $9e 34d4 00e6 ld $e6 34d5 006a ld $6a 34d6 00ae ld $ae 34d7 00fa ld $fa 34d8 00ba ld $ba 34d9 00ab ld $ab 34da 00fb ld $fb 34db 00ba ld $ba 34dc 00ae ld $ae 34dd 00fa ld $fa 34de 00aa ld $aa 34df 00ae ld $ae 34e0 00ea ld $ea 34e1 00aa ld $aa 34e2 00ef ld $ef 34e3 00ff ld $ff 34e4 00bf ld $bf 34e5 00af ld $af 34e6 00f7 ld $f7 34e7 0079 ld $79 34e8 009e ld $9e 34e9 00e7 ld $e7 34ea 0079 ld $79 34eb 00ee ld $ee 34ec 00e7 ld $e7 34ed 0079 ld $79 34ee 00ee ld $ee 34ef 00e7 ld $e7 34f0 007a ld $7a 34f1 00ef ld $ef 34f2 00eb ld $eb 34f3 00bd ld $bd 34f4 00ee ld $ee 34f5 00e7 ld $e7 34f6 007e ld $7e 34f7 00af ld $af 34f8 00fb ld $fb 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 00b9 ld $b9 3501 00ef ld $ef 3502 00eb ld $eb 3503 00be ld $be 3504 00ee ld $ee 3505 00eb ld $eb 3506 00b9 ld $b9 3507 00ae ld $ae 3508 00e7 ld $e7 3509 00ba ld $ba 350a 00af ld $af 350b 00fb ld $fb 350c 00ba ld $ba 350d 00ef ld $ef 350e 00eb ld $eb 350f 00be ld $be 3510 00af ld $af 3511 00fb ld $fb 3512 00be ld $be 3513 00ab ld $ab 3514 00ab ld $ab 3515 00ba ld $ba 3516 00ae ld $ae 3517 00ea ld $ea 3518 00bf ld $bf 3519 00fe ld $fe 351a 00ff ld $ff 351b 00ff ld $ff 351c 00df ld $df 351d 00ab ld $ab 351e 00bd ld $bd 351f 00de ld $de 3520 00a7 ld $a7 3521 0069 ld $69 3522 009e ld $9e 3523 00e6 ld $e6 3524 0069 ld $69 3525 009e ld $9e 3526 00e6 ld $e6 3527 007a ld $7a 3528 009a ld $9a 3529 00f7 ld $f7 352a 007a ld $7a 352b 009f ld $9f 352c 00ea ld $ea 352d 0069 ld $69 352e 009e ld $9e 352f 00a6 ld $a6 3530 0079 ld $79 3531 009a ld $9a 3532 00a7 ld $a7 3533 0079 ld $79 3534 009a ld $9a 3535 00f7 ld $f7 3536 00ba ld $ba 3537 009b ld $9b 3538 00fb ld $fb 3539 007a ld $7a 353a 00ee ld $ee 353b 00eb ld $eb 353c 00be ld $be 353d 00af ld $af 353e 00fb ld $fb 353f 00fe ld $fe 3540 00ef ld $ef 3541 00ff ld $ff 3542 00bf ld $bf 3543 00ee ld $ee 3544 00eb ld $eb 3545 00be ld $be 3546 00eb ld $eb 3547 00fb ld $fb 3548 00fe ld $fe 3549 00ff ld $ff 354a 00ff ld $ff 354b 00ff ld $ff 354c 00af ld $af 354d 00f7 ld $f7 354e 0079 ld $79 354f 009e ld $9e 3550 0092 ld $92 3551 0024 ld $24 3552 0045 ld $45 3553 0092 ld $92 3554 0024 ld $24 3555 0049 ld $49 3556 0092 ld $92 3557 0064 ld $64 3558 004a ld $4a 3559 0096 ld $96 355a 0064 ld $64 355b 0099 ld $99 355c 00e6 ld $e6 355d 0069 ld $69 355e 009d ld $9d 355f 00e6 ld $e6 3560 0069 ld $69 3561 009e ld $9e 3562 00e6 ld $e6 3563 0079 ld $79 3564 009f ld $9f 3565 00ab ld $ab 3566 0079 ld $79 3567 00aa ld $aa 3568 00e7 ld $e7 3569 007a ld $7a 356a 00aa ld $aa 356b 00fb ld $fb 356c 00b9 ld $b9 356d 00ea ld $ea 356e 00fb ld $fb 356f 00aa ld $aa 3570 00ee ld $ee 3571 00eb ld $eb 3572 00be ld $be 3573 00bf ld $bf 3574 00fb ld $fb 3575 00bf ld $bf 3576 00fe ld $fe 3577 00ef ld $ef 3578 00be ld $be 3579 00fe ld $fe 357a 00ff ld $ff 357b 00ff ld $ff 357c 00af ld $af 357d 00a6 ld $a6 357e 00b9 ld $b9 357f 004a ld $4a 3580 0052 ld $52 3581 0010 ld $10 3582 0049 ld $49 3583 0095 ld $95 3584 0014 ld $14 3585 0055 ld $55 3586 00a6 ld $a6 3587 0079 ld $79 3588 008a ld $8a 3589 0096 ld $96 358a 0068 ld $68 358b 0049 ld $49 358c 00a2 ld $a2 358d 0075 ld $75 358e 009a ld $9a 358f 00e7 ld $e7 3590 0069 ld $69 3591 009e ld $9e 3592 00a7 ld $a7 3593 007a ld $7a 3594 009a ld $9a 3595 00e6 ld $e6 3596 0069 ld $69 3597 009a ld $9a 3598 00a6 ld $a6 3599 00b9 ld $b9 359a 009a ld $9a 359b 00a6 ld $a6 359c 007a ld $7a 359d 00aa ld $aa 359e 00ab ld $ab 359f 00ba ld $ba 35a0 00af ld $af 35a1 00ea ld $ea 35a2 00ee ld $ee 35a3 00ef ld $ef 35a4 00fb ld $fb 35a5 00bb ld $bb 35a6 00ef ld $ef 35a7 00fb ld $fb 35a8 00bb ld $bb 35a9 00fb ld $fb 35aa 00ff ld $ff 35ab 00ff ld $ff 35ac 00af ld $af 35ad 00a7 ld $a7 35ae 0039 ld $39 35af 0049 ld $49 35b0 0041 ld $41 35b1 0014 ld $14 35b2 0045 ld $45 35b3 0052 ld $52 35b4 0065 ld $65 35b5 009e ld $9e 35b6 00e7 ld $e7 35b7 0069 ld $69 35b8 009e ld $9e 35b9 00e7 ld $e7 35ba 0029 ld $29 35bb 009e ld $9e 35bc 0092 ld $92 35bd 0079 ld $79 35be 009a ld $9a 35bf 00a7 ld $a7 35c0 00b9 ld $b9 35c1 009e ld $9e 35c2 00e6 ld $e6 35c3 0069 ld $69 35c4 009e ld $9e 35c5 00e6 ld $e6 35c6 0065 ld $65 35c7 009e ld $9e 35c8 00e7 ld $e7 35c9 006a ld $6a 35ca 00ae ld $ae 35cb 00e7 ld $e7 35cc 006a ld $6a 35cd 00ae ld $ae 35ce 00fb ld $fb 35cf 00ba ld $ba 35d0 00af ld $af 35d1 00ff ld $ff 35d2 00ba ld $ba 35d3 00af ld $af 35d4 00ab ld $ab 35d5 00fe ld $fe 35d6 00ee ld $ee 35d7 00ff ld $ff 35d8 00fe ld $fe 35d9 00ff ld $ff 35da 00ff ld $ff 35db 00ff ld $ff 35dc 00ef ld $ef 35dd 0096 ld $96 35de 0025 ld $25 35df 0045 ld $45 35e0 0056 ld $56 35e1 0024 ld $24 35e2 0049 ld $49 35e3 0095 ld $95 35e4 0039 ld $39 35e5 004a ld $4a 35e6 0092 ld $92 35e7 0024 ld $24 35e8 0089 ld $89 35e9 00e6 ld $e6 35ea 0079 ld $79 35eb 009e ld $9e 35ec 00e7 ld $e7 35ed 0029 ld $29 35ee 009d ld $9d 35ef 0096 ld $96 35f0 0069 ld $69 35f1 005a ld $5a 35f2 00a7 ld $a7 35f3 0065 ld $65 35f4 005e ld $5e 35f5 00e6 ld $e6 35f6 006a ld $6a 35f7 00ae ld $ae 35f8 00ea ld $ea 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 00b9 ld $b9 3601 00ee ld $ee 3602 00ea ld $ea 3603 00be ld $be 3604 00ee ld $ee 3605 00eb ld $eb 3606 00be ld $be 3607 00ee ld $ee 3608 00eb ld $eb 3609 00fe ld $fe 360a 00ee ld $ee 360b 00fb ld $fb 360c 00bf ld $bf 360d 00ef ld $ef 360e 00eb ld $eb 360f 00ff ld $ff 3610 00ff ld $ff 3611 00ff ld $ff * 5 times 3614 00a7 ld $a7 3615 0024 ld $24 3616 0055 ld $55 3617 0092 ld $92 3618 0054 ld $54 3619 0049 ld $49 361a 00a2 ld $a2 361b 0039 ld $39 361c 0049 ld $49 361d 00a2 ld $a2 361e 0024 ld $24 361f 0049 ld $49 3620 0092 ld $92 3621 0069 ld $69 3622 009f ld $9f 3623 00e7 ld $e7 3624 0079 ld $79 3625 009a ld $9a 3626 00a7 ld $a7 3627 0079 ld $79 3628 009e ld $9e 3629 00e6 ld $e6 362a 0079 ld $79 362b 00aa ld $aa 362c 00fb ld $fb 362d 00b9 ld $b9 362e 009e ld $9e 362f 00fb ld $fb 3630 007a ld $7a 3631 00af ld $af 3632 00f7 ld $f7 3633 00ba ld $ba 3634 00af ld $af 3635 00fb ld $fb 3636 00be ld $be 3637 00ef ld $ef 3638 00fa ld $fa 3639 00be ld $be 363a 00ef ld $ef 363b 00ff ld $ff 363c 00fa ld $fa 363d 00ef ld $ef 363e 00ef ld $ef 363f 00fe ld $fe 3640 00ff ld $ff 3641 00ff ld $ff 3642 00ff ld $ff 3643 00ff ld $ff 3644 00eb ld $eb 3645 0065 ld $65 3646 0049 ld $49 3647 0092 ld $92 3648 0025 ld $25 3649 0059 ld $59 364a 00e6 ld $e6 364b 0024 ld $24 364c 0059 ld $59 364d 00a2 ld $a2 364e 0025 ld $25 364f 0049 ld $49 3650 0092 ld $92 3651 0064 ld $64 3652 0099 ld $99 3653 00e6 ld $e6 3654 007e ld $7e 3655 009e ld $9e 3656 00e7 ld $e7 3657 00be ld $be 3658 00ef ld $ef 3659 00fb ld $fb 365a 00be ld $be 365b 00ef ld $ef 365c 00eb ld $eb 365d 00be ld $be 365e 00ea ld $ea 365f 00e7 ld $e7 3660 006a ld $6a 3661 00aa ld $aa 3662 00ab ld $ab 3663 00be ld $be 3664 00ea ld $ea 3665 00eb ld $eb 3666 00ea ld $ea 3667 00af ld $af 3668 00ff ld $ff 3669 00bb ld $bb 366a 00ff ld $ff 366b 00eb ld $eb 366c 00be ld $be 366d 00af ld $af 366e 00fa ld $fa 366f 00ff ld $ff 3670 00ff ld $ff 3671 00ff ld $ff * 6 times 3675 0059 ld $59 3676 0049 ld $49 3677 0095 ld $95 3678 0014 ld $14 3679 0099 ld $99 367a 00a3 ld $a3 367b 0074 ld $74 367c 008a ld $8a 367d 00e7 ld $e7 367e 0078 ld $78 367f 009e ld $9e 3680 0092 ld $92 3681 0028 ld $28 3682 008d ld $8d 3683 00a6 ld $a6 3684 0079 ld $79 3685 009a ld $9a 3686 00ab ld $ab 3687 0079 ld $79 3688 009a ld $9a 3689 00a7 ld $a7 368a 007a ld $7a 368b 009e ld $9e 368c 00e6 ld $e6 368d 0069 ld $69 368e 009e ld $9e 368f 00aa ld $aa 3690 00a9 ld $a9 3691 009e ld $9e 3692 00aa ld $aa 3693 0079 ld $79 3694 00aa ld $aa 3695 00ab ld $ab 3696 00ba ld $ba 3697 00af ld $af 3698 00fb ld $fb 3699 00aa ld $aa 369a 00af ld $af 369b 00bb ld $bb 369c 00aa ld $aa 369d 00aa ld $aa 369e 00ab ld $ab 369f 00ff ld $ff 36a0 00ff ld $ff 36a1 00ff ld $ff * 6 times 36a5 002a ld $2a 36a6 0045 ld $45 36a7 0051 ld $51 36a8 0054 ld $54 36a9 0059 ld $59 36aa 00a6 ld $a6 36ab 0028 ld $28 36ac 009d ld $9d 36ad 00e6 ld $e6 36ae 0079 ld $79 36af 009e ld $9e 36b0 0093 ld $93 36b1 0025 ld $25 36b2 005a ld $5a 36b3 00a7 ld $a7 36b4 0079 ld $79 36b5 0089 ld $89 36b6 00a6 ld $a6 36b7 0079 ld $79 36b8 009a ld $9a 36b9 00e6 ld $e6 36ba 0069 ld $69 36bb 005a ld $5a 36bc 00a6 ld $a6 36bd 00a9 ld $a9 36be 009a ld $9a 36bf 00e7 ld $e7 36c0 006a ld $6a 36c1 00ae ld $ae 36c2 00e6 ld $e6 36c3 00aa ld $aa 36c4 00ae ld $ae 36c5 00fa ld $fa 36c6 00ba ld $ba 36c7 00aa ld $aa 36c8 00bb ld $bb 36c9 00ba ld $ba 36ca 00aa ld $aa 36cb 00ea ld $ea 36cc 00ba ld $ba 36cd 00ea ld $ea 36ce 00fe ld $fe 36cf 00ff ld $ff 36d0 00ff ld $ff 36d1 00ff ld $ff * 6 times 36d5 007f ld $7f 36d6 0019 ld $19 36d7 0095 ld $95 36d8 0010 ld $10 36d9 0045 ld $45 36da 0091 ld $91 36db 0069 ld $69 36dc 009e ld $9e 36dd 00a7 ld $a7 36de 0078 ld $78 36df 009a ld $9a 36e0 00a7 ld $a7 36e1 0064 ld $64 36e2 009e ld $9e 36e3 0092 ld $92 36e4 0069 ld $69 36e5 005a ld $5a 36e6 00a7 ld $a7 36e7 0065 ld $65 36e8 0059 ld $59 36e9 0096 ld $96 36ea 0069 ld $69 36eb 0099 ld $99 36ec 0096 ld $96 36ed 0069 ld $69 36ee 00a9 ld $a9 36ef 0096 ld $96 36f0 00a9 ld $a9 36f1 009a ld $9a 36f2 00aa ld $aa 36f3 00b9 ld $b9 36f4 00ea ld $ea 36f5 00eb ld $eb 36f6 00ba ld $ba 36f7 00ab ld $ab 36f8 00ab ld $ab 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 00ba ld $ba 3701 00ee ld $ee 3702 00ab ld $ab 3703 00ba ld $ba 3704 00aa ld $aa 3705 00ff ld $ff 3706 00ff ld $ff 3707 00ff ld $ff * 7 times 370c 00bf ld $bf 370d 005b ld $5b 370e 0052 ld $52 370f 0065 ld $65 3710 0049 ld $49 3711 0091 ld $91 3712 0064 ld $64 3713 0089 ld $89 3714 00e6 ld $e6 3715 0079 ld $79 3716 009e ld $9e 3717 00e7 ld $e7 3718 0029 ld $29 3719 0059 ld $59 371a 00a6 ld $a6 371b 0064 ld $64 371c 0099 ld $99 371d 0096 ld $96 371e 0065 ld $65 371f 005a ld $5a 3720 00a6 ld $a6 3721 0065 ld $65 3722 0099 ld $99 3723 0096 ld $96 3724 006a ld $6a 3725 0099 ld $99 3726 00a6 ld $a6 3727 006a ld $6a 3728 00ae ld $ae 3729 00aa ld $aa 372a 006a ld $6a 372b 00ae ld $ae 372c 00fa ld $fa 372d 00aa ld $aa 372e 00ae ld $ae 372f 00ea ld $ea 3730 00aa ld $aa 3731 00aa ld $aa 3732 00ab ld $ab 3733 00ba ld $ba 3734 00fb ld $fb 3735 00ff ld $ff 3736 00ff ld $ff 3737 00ff ld $ff * 8 times 373d 00af ld $af 373e 0096 ld $96 373f 0029 ld $29 3740 0059 ld $59 3741 0056 ld $56 3742 0025 ld $25 3743 005a ld $5a 3744 0092 ld $92 3745 0029 ld $29 3746 005a ld $5a 3747 00a2 ld $a2 3748 0064 ld $64 3749 0049 ld $49 374a 0096 ld $96 374b 0025 ld $25 374c 0055 ld $55 374d 0052 ld $52 374e 0065 ld $65 374f 0055 ld $55 3750 0056 ld $56 3751 0065 ld $65 3752 005a ld $5a 3753 00a6 ld $a6 3754 0065 ld $65 3755 00aa ld $aa 3756 0096 ld $96 3757 006a ld $6a 3758 00a9 ld $a9 3759 00a6 ld $a6 375a 00ba ld $ba 375b 00aa ld $aa 375c 00ea ld $ea 375d 00be ld $be 375e 00ee ld $ee 375f 00ea ld $ea 3760 00be ld $be 3761 00af ld $af 3762 00fa ld $fa 3763 00fa ld $fa 3764 00ff ld $ff 3765 00ff ld $ff 3766 00ff ld $ff * 10 times 376e 00a7 ld $a7 376f 0065 ld $65 3770 005a ld $5a 3771 00a6 ld $a6 3772 0064 ld $64 3773 0099 ld $99 3774 0096 ld $96 3775 0064 ld $64 3776 0049 ld $49 3777 0056 ld $56 3778 0025 ld $25 3779 0056 ld $56 377a 0056 ld $56 377b 0068 ld $68 377c 0055 ld $55 377d 0066 ld $66 377e 0065 ld $65 377f 009a ld $9a 3780 0096 ld $96 3781 00a9 ld $a9 3782 0095 ld $95 3783 009a ld $9a 3784 0069 ld $69 3785 00a9 ld $a9 3786 00a6 ld $a6 3787 00aa ld $aa 3788 009e ld $9e 3789 00ea ld $ea 378a 00aa ld $aa 378b 00ae ld $ae 378c 00fa ld $fa 378d 00aa ld $aa 378e 00af ld $af 378f 00ab ld $ab 3790 00ba ld $ba 3791 00af ld $af 3792 00bb ld $bb 3793 00fb ld $fb 3794 00ff ld $ff 3795 00ff ld $ff 3796 00ff ld $ff * 11 times 379f 0069 ld $69 37a0 0099 ld $99 37a1 0096 ld $96 37a2 0069 ld $69 37a3 0049 ld $49 37a4 0056 ld $56 37a5 0065 ld $65 37a6 005a ld $5a 37a7 00a2 ld $a2 37a8 0065 ld $65 37a9 0099 ld $99 37aa 0095 ld $95 37ab 0065 ld $65 37ac 005a ld $5a 37ad 00a6 ld $a6 37ae 0055 ld $55 37af 0099 ld $99 37b0 0095 ld $95 37b1 0069 ld $69 37b2 005a ld $5a 37b3 00a6 ld $a6 37b4 00a9 ld $a9 37b5 009a ld $9a 37b6 00ea ld $ea 37b7 00a9 ld $a9 37b8 00aa ld $aa 37b9 00a6 ld $a6 37ba 00ba ld $ba 37bb 00aa ld $aa 37bc 00aa ld $aa 37bd 00ba ld $ba 37be 00ee ld $ee 37bf 00ea ld $ea 37c0 00fe ld $fe 37c1 00ea ld $ea 37c2 00eb ld $eb 37c3 00ff ld $ff 37c4 00ff ld $ff 37c5 00ff ld $ff * 12 times 37cf 006a ld $6a 37d0 005a ld $5a 37d1 00a6 ld $a6 37d2 0065 ld $65 37d3 005a ld $5a 37d4 0091 ld $91 37d5 0055 ld $55 37d6 005a ld $5a 37d7 00a6 ld $a6 37d8 0065 ld $65 37d9 005a ld $5a 37da 00a6 ld $a6 37db 0065 ld $65 37dc 005a ld $5a 37dd 00a6 ld $a6 37de 0069 ld $69 37df 006a ld $6a 37e0 00a6 ld $a6 37e1 006a ld $6a 37e2 00a9 ld $a9 37e3 00aa ld $aa 37e4 006a ld $6a 37e5 00aa ld $aa 37e6 00aa ld $aa 37e7 00ba ld $ba 37e8 00aa ld $aa 37e9 00eb ld $eb 37ea 00aa ld $aa 37eb 009b ld $9b 37ec 00ab ld $ab 37ed 00be ld $be 37ee 00aa ld $aa 37ef 00fb ld $fb 37f0 00aa ld $aa 37f1 00ee ld $ee 37f2 00fe ld $fe 37f3 00ff ld $ff 37f4 00ff ld $ff 37f5 00ff ld $ff * 6 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 * 6 times 3806 00bf ld $bf 3807 009a ld $9a 3808 0096 ld $96 3809 0069 ld $69 380a 0099 ld $99 380b 0096 ld $96 380c 0065 ld $65 380d 005a ld $5a 380e 00a6 ld $a6 380f 0025 ld $25 3810 0099 ld $99 3811 0096 ld $96 3812 0069 ld $69 3813 0099 ld $99 3814 0096 ld $96 3815 0069 ld $69 3816 0099 ld $99 3817 0096 ld $96 3818 00a9 ld $a9 3819 009a ld $9a 381a 00a6 ld $a6 381b 0076 ld $76 381c 00aa ld $aa 381d 00a7 ld $a7 381e 007a ld $7a 381f 00aa ld $aa 3820 00bb ld $bb 3821 00ba ld $ba 3822 00ae ld $ae 3823 00ea ld $ea 3824 00aa ld $aa 3825 00af ld $af 3826 00ab ld $ab 3827 00be ld $be 3828 00fe ld $fe 3829 00ff ld $ff 382a 00ff ld $ff 382b 00ff ld $ff * 14 times 3837 00ef ld $ef 3838 0097 ld $97 3839 0069 ld $69 383a 005a ld $5a 383b 00a6 ld $a6 383c 0069 ld $69 383d 009a ld $9a 383e 00a6 ld $a6 383f 00a9 ld $a9 3840 005a ld $5a 3841 00a6 ld $a6 3842 0069 ld $69 3843 009a ld $9a 3844 00aa ld $aa 3845 00ba ld $ba 3846 009a ld $9a 3847 00aa ld $aa 3848 00b9 ld $b9 3849 009a ld $9a 384a 00ab ld $ab 384b 00ba ld $ba 384c 00aa ld $aa 384d 00eb ld $eb 384e 00aa ld $aa 384f 00af ld $af 3850 00ab ld $ab 3851 00be ld $be 3852 00ee ld $ee 3853 00ab ld $ab 3854 00be ld $be 3855 00fe ld $fe 3856 00eb ld $eb 3857 00fe ld $fe 3858 00fb ld $fb 3859 00ff ld $ff 385a 00ff ld $ff 385b 00ff ld $ff * 16 times 3869 006a ld $6a 386a 00aa ld $aa 386b 00a7 ld $a7 386c 0065 ld $65 386d 00aa ld $aa 386e 00eb ld $eb 386f 0075 ld $75 3870 00aa ld $aa 3871 00a7 ld $a7 3872 00a9 ld $a9 3873 0099 ld $99 3874 00ea ld $ea 3875 0069 ld $69 3876 00aa ld $aa 3877 00e7 ld $e7 3878 006a ld $6a 3879 00ae ld $ae 387a 00ea ld $ea 387b 00be ld $be 387c 00ae ld $ae 387d 00fa ld $fa 387e 00be ld $be 387f 00aa ld $aa 3880 00fb ld $fb 3881 00ea ld $ea 3882 00af ld $af 3883 00fb ld $fb 3884 00aa ld $aa 3885 00ee ld $ee 3886 00ab ld $ab 3887 00ff ld $ff 3888 00ff ld $ff 3889 00ff ld $ff * 18 times 3899 00ba ld $ba 389a 009a ld $9a 389b 00ea ld $ea 389c 00a9 ld $a9 389d 009e ld $9e 389e 00a6 ld $a6 389f 006a ld $6a 38a0 00ae ld $ae 38a1 00ea ld $ea 38a2 00b9 ld $b9 38a3 009e ld $9e 38a4 00ab ld $ab 38a5 00b9 ld $b9 38a6 00aa ld $aa 38a7 00ab ld $ab 38a8 00ba ld $ba 38a9 00aa ld $aa 38aa 00eb ld $eb 38ab 00aa ld $aa 38ac 00af ld $af 38ad 00eb ld $eb 38ae 00be ld $be 38af 00bf ld $bf 38b0 00fb ld $fb 38b1 00ba ld $ba 38b2 00bf ld $bf 38b3 00ea ld $ea 38b4 00bf ld $bf 38b5 00fe ld $fe 38b6 00fe ld $fe 38b7 00ff ld $ff 38b8 00ff ld $ff 38b9 00ff ld $ff * 19 times 38ca 00af ld $af 38cb 00ab ld $ab 38cc 00a9 ld $a9 38cd 005a ld $5a 38ce 00ea ld $ea 38cf 00a9 ld $a9 38d0 009e ld $9e 38d1 00e6 ld $e6 38d2 00aa ld $aa 38d3 009a ld $9a 38d4 00aa ld $aa 38d5 007a ld $7a 38d6 00aa ld $aa 38d7 00e6 ld $e6 38d8 006a ld $6a 38d9 00ae ld $ae 38da 00ea ld $ea 38db 00be ld $be 38dc 00aa ld $aa 38dd 00bb ld $bb 38de 00ba ld $ba 38df 00aa ld $aa 38e0 00ab ld $ab 38e1 00ba ld $ba 38e2 00ea ld $ea 38e3 00eb ld $eb 38e4 00aa ld $aa 38e5 00ff ld $ff 38e6 00ff ld $ff 38e7 00ff ld $ff * 20 times 38f9 0000 ld $00 38fa 0000 ld $00 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] ;+-----------------------------------+ 3900 00ff ld $ff 3901 00ff ld $ff 3902 00eb ld $eb 3903 006a ld $6a 3904 00aa ld $aa 3905 00a6 ld $a6 3906 0066 ld $66 3907 00aa ld $aa 3908 00a6 ld $a6 3909 0066 ld $66 390a 00ae ld $ae 390b 00a6 ld $a6 390c 006a ld $6a 390d 00aa ld $aa 390e 00ab ld $ab 390f 00aa ld $aa 3910 00ae ld $ae 3911 00a6 ld $a6 3912 00ba ld $ba 3913 00ea ld $ea 3914 00ab ld $ab 3915 00ba ld $ba 3916 00af ld $af 3917 00fa ld $fa 3918 00ba ld $ba 3919 00ab ld $ab 391a 00bb ld $bb 391b 00ff ld $ff 391c 00ff ld $ff 391d 00ff ld $ff * 24 times 3933 00bf ld $bf 3934 00ae ld $ae 3935 00e6 ld $e6 3936 006a ld $6a 3937 00a9 ld $a9 3938 00e6 ld $e6 3939 006a ld $6a 393a 006a ld $6a 393b 00aa ld $aa 393c 00b9 ld $b9 393d 00aa ld $aa 393e 00a6 ld $a6 393f 00ba ld $ba 3940 00ea ld $ea 3941 00ab ld $ab 3942 00ba ld $ba 3943 00af ld $af 3944 00ea ld $ea 3945 00aa ld $aa 3946 00ab ld $ab 3947 00fb ld $fb 3948 00ab ld $ab 3949 00fe ld $fe 394a 00ff ld $ff 394b 00ff ld $ff 394c 00ff ld $ff * 28 times 3966 00aa ld $aa 3967 00ae ld $ae 3968 00aa ld $aa 3969 00ba ld $ba 396a 00ae ld $ae 396b 00ab ld $ab 396c 00ba ld $ba 396d 00ae ld $ae 396e 00ea ld $ea 396f 00aa ld $aa 3970 00af ld $af 3971 00ea ld $ea 3972 00be ld $be 3973 00ea ld $ea 3974 00eb ld $eb 3975 00fe ld $fe 3976 00ae ld $ae 3977 00fe ld $fe 3978 00fe ld $fe 3979 00ff ld $ff 397a 00ff ld $ff 397b 00ff ld $ff * 30 times 3997 00ef ld $ef 3998 00fb ld $fb 3999 00aa ld $aa 399a 00ab ld $ab 399b 00fb ld $fb 399c 00aa ld $aa 399d 00af ld $af 399e 00fb ld $fb 399f 00be ld $be 39a0 00ee ld $ee 39a1 00fb ld $fb 39a2 00ab ld $ab 39a3 00af ld $af 39a4 00ff ld $ff 39a5 00ea ld $ea 39a6 00ff ld $ff 39a7 00ff ld $ff 39a8 00ff ld $ff * 37 times 39cb 00bf ld $bf 39cc 00fa ld $fa 39cd 00af ld $af 39ce 00fe ld $fe 39cf 00ea ld $ea 39d0 00af ld $af 39d1 00fe ld $fe 39d2 00fe ld $fe 39d3 00ff ld $ff 39d4 00ff ld $ff 39d5 00ff ld $ff * 5 times 39d8 00ef ld $ef 39d9 00ff ld $ff 39da 00ff ld $ff 39db 00ff ld $ff * 32 times 39f9 0000 ld $00 39fa 0000 ld $00 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 00ff ld $ff 3a01 00ff ld $ff 3a02 00ff ld $ff * 30 times 3a1e 0000 ld $00 3a1f 0000 ld $00 3a20 0000 ld $00 * 221 times 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] ;+-----------------------------------+ ;End of Apps/Pictures/packedPictures.rgb, size 9728 ;+-----------------------------------+ ;| Apps/Snake/Snake_v3.gcl | ;+-----------------------------------+ 3b00 dc00 st $00,[y,x++] ;'\x00' 3b01 dc00 st $00,[y,x++] ;'\x00' 3b02 dc00 st $00,[y,x++] ;'\x00' 3b03 dc00 st $00,[y,x++] ;'\x00' 3b04 dc00 st $00,[y,x++] ;'\x00' 3b05 dc00 st $00,[y,x++] ;'\x00' 3b06 dc00 st $00,[y,x++] ;'\x00' 3b07 dc00 st $00,[y,x++] ;'\x00' 3b08 0000 ld $00 3b09 c218 st [$18] 3b0a 0000 ld $00 3b0b 14f7 ld $f7,y 3b0c e085 jmp y,$85 3b0d c219 st [$19] Snake: 3b0e 0002 ld $02 ;| RAM segment address (high byte first) 3b0f 0000 ld $00 ;| 3b10 00e5 ld $e5 ;| Length (1..256) 3b11 001a ld $1a ;0200 LD 3b12 0021 ld $21 3b13 00e6 ld $e6 ;0202 SUBI 3b14 0020 ld $20 3b15 0035 ld $35 ;0204 BCC 3b16 0053 ld $53 ;0205 GE 3b17 000b ld $0b 3b18 0021 ld $21 ;0207 LDW 3b19 000e ld $0e ;0207 '_frameCount' 3b1a 00f3 ld $f3 ;0209 DOKE 3b1b 0017 ld $17 ;0209 '_vPCH' 3b1c 0090 ld $90 ;020b BRA 3b1d 0005 ld $05 3b1e 0059 ld $59 ;020d LDI 3b1f 0000 ld $00 3b20 002b ld $2b ;020f STW 3b21 0030 ld $30 ;020f 'HighScore' 3b22 00cd ld $cd ;0211 DEF 3b23 005f ld $5f 3b24 0021 ld $21 ;0213 LDW 3b25 0032 ld $32 ;0213 'Char' 3b26 00e6 ld $e6 ;0215 SUBI 3b27 0052 ld $52 3b28 0035 ld $35 ;0217 BCC 3b29 0053 ld $53 ;0218 GE 3b2a 0021 ld $21 3b2b 00e3 ld $e3 ;021a ADDI 3b2c 0032 ld $32 3b2d 002b ld $2b ;021c STW 3b2e 0034 ld $34 ;021c 'i' 3b2f 0011 ld $11 ;021e LDWI 3b30 0000 ld $00 3b31 0007 ld $07 3b32 0090 ld $90 ;0221 BRA 3b33 0026 ld $26 3b34 002b ld $2b ;0223 STW 3b35 0034 ld $34 ;0223 'i' 3b36 0011 ld $11 ;0225 LDWI 3b37 0000 ld $00 3b38 0008 ld $08 3b39 002b ld $2b ;0228 STW 3b3a 0036 ld $36 ;0228 'fontData' 3b3b 0021 ld $21 ;022a LDW 3b3c 0034 ld $34 ;022a 'i' 3b3d 00e9 ld $e9 ;022c LSLW 3b3e 00e9 ld $e9 ;022d LSLW 3b3f 0099 ld $99 ;022e ADDW 3b40 0034 ld $34 ;022e 'i' 3b41 0099 ld $99 ;0230 ADDW 3b42 0036 ld $36 ;0230 'fontData' 3b43 002b ld $2b ;0232 STW 3b44 0036 ld $36 ;0232 'fontData' 3b45 0021 ld $21 ;0234 LDW 3b46 0038 ld $38 ;0234 'BgColor' 3b47 005e ld $5e ;0236 ST 3b48 0024 ld $24 3b49 0021 ld $21 ;0238 LDW 3b4a 003a ld $3a ;0238 'Color' 3b4b 005e ld $5e ;023a ST 3b4c 0025 ld $25 3b4d 0021 ld $21 ;023c LDW 3b4e 003c ld $3c ;023c 'Pos' 3b4f 002b ld $2b ;023e STW 3b50 0028 ld $28 3b51 00e3 ld $e3 ;0240 ADDI 3b52 0006 ld $06 3b53 002b ld $2b ;0242 STW 3b54 003c ld $3c ;0242 'Pos' 3b55 0011 ld $11 ;0244 LDWI 3b56 00e1 ld $e1 3b57 0004 ld $04 3b58 002b ld $2b ;0247 STW 3b59 0022 ld $22 3b5a 0059 ld $59 ;0249 LDI 3b5b 00fb ld $fb 3b5c 002b ld $2b ;024b STW 3b5d 0034 ld $34 ;024b 'i' 3b5e 0021 ld $21 ;024d LDW 3b5f 0036 ld $36 ;024d 'fontData' 3b60 007f ld $7f ;024f LUP 3b61 0000 ld $00 3b62 0093 ld $93 ;0251 INC 3b63 0036 ld $36 ;0251 'fontData' 3b64 005e ld $5e ;0253 ST 3b65 0026 ld $26 3b66 00b4 ld $b4 ;0255 SYS 3b67 00cb ld $cb 3b68 0093 ld $93 ;0257 INC 3b69 0028 ld $28 3b6a 0093 ld $93 ;0259 INC 3b6b 0034 ld $34 ;0259 'i' 3b6c 0021 ld $21 ;025b LDW 3b6d 0034 ld $34 ;025b 'i' 3b6e 0035 ld $35 ;025d BCC 3b6f 0072 ld $72 ;025e NE 3b70 004b ld $4b 3b71 00ff ld $ff ;0260 RET 3b72 002b ld $2b ;0261 STW 3b73 003e ld $3e ;0261 'PrintChar' 3b74 00cd ld $cd ;0263 DEF 3b75 0076 ld $76 3b76 0075 ld $75 ;0265 PUSH 3b77 002b ld $2b ;0266 STW 3b78 0040 ld $40 ;0266 'Text' 3b79 0021 ld $21 ;0268 LDW 3b7a 0040 ld $40 ;0268 'Text' 3b7b 00ad ld $ad ;026a PEEK 3b7c 002b ld $2b ;026b STW 3b7d 0032 ld $32 ;026b 'Char' 3b7e 0093 ld $93 ;026d INC 3b7f 0040 ld $40 ;026d 'Text' 3b80 0035 ld $35 ;026f BCC 3b81 003f ld $3f ;0270 EQ 3b82 0074 ld $74 3b83 00cf ld $cf ;0272 CALL 3b84 003e ld $3e ;0272 'PrintChar' 3b85 0090 ld $90 ;0274 BRA 3b86 0066 ld $66 3b87 0063 ld $63 ;0276 POP 3b88 00ff ld $ff ;0277 RET 3b89 002b ld $2b ;0278 STW 3b8a 0042 ld $42 ;0278 'PrintText' 3b8b 00cd ld $cd ;027a DEF 3b8c 0090 ld $90 3b8d 0035 ld $35 ;027c BCC 3b8e 0056 ld $56 ;027d LE 3b8f 008f ld $8f 3b90 002b ld $2b ;027f STW 3b91 0034 ld $34 ;027f 'i' 3b92 0021 ld $21 ;0281 LDW 3b93 003a ld $3a ;0281 'Color' 3b94 00f0 ld $f0 ;0283 POKE 3b95 003c ld $3c ;0283 'Pos' 3b96 0021 ld $21 ;0285 LDW 3b97 003c ld $3c ;0285 'Pos' 3b98 0099 ld $99 ;0287 ADDW 3b99 0044 ld $44 ;0287 'Step' 3b9a 002b ld $2b ;0289 STW 3b9b 003c ld $3c ;0289 'Pos' 3b9c 0021 ld $21 ;028b LDW 3b9d 0034 ld $34 ;028b 'i' 3b9e 00e6 ld $e6 ;028d SUBI 3b9f 0001 ld $01 3ba0 0090 ld $90 ;028f BRA 3ba1 007a ld $7a 3ba2 00ff ld $ff ;0291 RET 3ba3 002b ld $2b ;0292 STW 3ba4 0046 ld $46 ;0292 'DrawLine' 3ba5 00cd ld $cd ;0294 DEF 3ba6 00bc ld $bc 3ba7 0075 ld $75 ;0296 PUSH 3ba8 001a ld $1a ;0297 LD 3ba9 000e ld $0e 3baa 00b8 ld $b8 ;0299 SUBW 3bab 0048 ld $48 ;0299 'TimeOut' 3bac 0082 ld $82 ;029b ANDI 3bad 0080 ld $80 3bae 0035 ld $35 ;029d BCC 3baf 0072 ld $72 ;029e NE 3bb0 00a9 ld $a9 3bb1 0021 ld $21 ;02a0 LDW 3bb2 004a ld $4a ;02a0 'Timer' 3bb3 0035 ld $35 ;02a2 BCC 3bb4 0056 ld $56 ;02a3 LE 3bb5 00a7 ld $a7 3bb6 00e6 ld $e6 ;02a5 SUBI 3bb7 0001 ld $01 3bb8 002b ld $2b ;02a7 STW 3bb9 004a ld $4a ;02a7 'Timer' 3bba 00cf ld $cf ;02a9 CALL 3bbb 004c ld $4c ;02a9 'DrawTimer' 3bbc 001a ld $1a ;02ab LD 3bbd 0011 ld $11 3bbe 0082 ld $82 ;02ad ANDI 3bbf 0080 ld $80 3bc0 0035 ld $35 ;02af BCC 3bc1 0072 ld $72 ;02b0 NE 3bc2 00b4 ld $b4 3bc3 00e6 ld $e6 ;02b2 SUBI 3bc4 0001 ld $01 3bc5 0090 ld $90 ;02b4 BRA 3bc6 00b6 ld $b6 3bc7 0059 ld $59 ;02b6 LDI 3bc8 0000 ld $00 3bc9 0099 ld $99 ;02b8 ADDW 3bca 004e ld $4e ;02b8 'Delay' 3bcb 00cf ld $cf ;02ba CALL 3bcc 0050 ld $50 ;02ba 'Wait' 3bcd 0063 ld $63 ;02bc POP 3bce 00ff ld $ff ;02bd RET 3bcf 002b ld $2b ;02be STW 3bd0 0052 ld $52 ;02be 'TimeStep' 3bd1 00cd ld $cd ;02c0 DEF 3bd2 00de ld $de 3bd3 0075 ld $75 ;02c2 PUSH 3bd4 0011 ld $11 ;02c3 LDWI 3bd5 0020 ld $20 3bd6 0008 ld $08 3bd7 002b ld $2b ;02c6 STW 3bd8 003c ld $3c ;02c6 'Pos' 3bd9 0059 ld $59 ;02c8 LDI 3bda 0008 ld $08 3bdb 002b ld $2b ;02ca STW 3bdc 003a ld $3a ;02ca 'Color' 3bdd 0059 ld $59 ;02cc LDI 3bde 0000 ld $00 3bdf 002b ld $2b ;02ce STW 3be0 0038 ld $38 ;02ce 'BgColor' 3be1 0021 ld $21 ;02d0 LDW 3be2 004a ld $4a ;02d0 'Timer' 3be3 002b ld $2b ;02d2 STW 3be4 0054 ld $54 ;02d2 'Value' 3be5 00cf ld $cf ;02d4 CALL 3be6 0056 ld $56 ;02d4 'DrawNumber2' 3be7 0021 ld $21 ;02d6 LDW 3be8 0048 ld $48 ;02d6 'TimeOut' 3be9 00e3 ld $e3 ;02d8 ADDI 3bea 003c ld $3c 3beb 0082 ld $82 ;02da ANDI 3bec 00ff ld $ff 3bed 002b ld $2b ;02dc STW 3bee 0048 ld $48 ;02dc 'TimeOut' 3bef 0063 ld $63 ;02de POP 3bf0 00ff ld $ff ;02df RET 3bf1 002b ld $2b ;02e0 STW 3bf2 004c ld $4c ;02e0 'DrawTimer' 3bf3 0093 ld $93 ;02e2 INC 3bf4 001b ld $1b ;02e2 '_vLR'+1 3bf5 00ff ld $ff ;02e4 RET 3bf6 0003 ld $03 ;| RAM segment address (high byte first) 3bf7 0000 ld $00 ;| 3bf8 00f7 ld $f7 ;| Length (1..256) 3bf9 00cd ld $cd ;0300 DEF 3bfa 000b ld $0b 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 ;0302 PUSH 3c01 0059 ld $59 ;0303 LDI 3c02 000f ld $0f 3c03 002b ld $2b ;0305 STW 3c04 003a ld $3a ;0305 'Color' 3c05 0021 ld $21 ;0307 LDW 3c06 0058 ld $58 ;0307 'Head' 3c07 00cf ld $cf ;0309 CALL 3c08 005a ld $5a ;0309 'DrawBlock' 3c09 0063 ld $63 ;030b POP 3c0a 00ff ld $ff ;030c RET 3c0b 002b ld $2b ;030d STW 3c0c 005c ld $5c ;030d 'DrawHead' 3c0d 00cd ld $cd ;030f DEF 3c0e 0043 ld $43 3c0f 0075 ld $75 ;0311 PUSH 3c10 0011 ld $11 ;0312 LDWI 3c11 0035 ld $35 3c12 0044 ld $44 3c13 002b ld $2b ;0315 STW 3c14 003c ld $3c ;0315 'Pos' 3c15 0059 ld $59 ;0317 LDI 3c16 0004 ld $04 3c17 002b ld $2b ;0319 STW 3c18 0038 ld $38 ;0319 'BgColor' 3c19 00cd ld $cd ;031b DEF 3c1a 0025 ld $25 3c1b 0047 ld $47 ;031d 'G' 3c1c 0041 ld $41 ;031e 'A' 3c1d 004d ld $4d ;031f 'M' 3c1e 0045 ld $45 ;0320 'E' 3c1f 0020 ld $20 ;0321 ' ' 3c20 004f ld $4f ;0322 'O' 3c21 0056 ld $56 ;0323 'V' 3c22 0045 ld $45 ;0324 'E' 3c23 0052 ld $52 ;0325 'R' 3c24 0000 ld $00 ;0326 0 3c25 00cf ld $cf ;0327 CALL 3c26 0042 ld $42 ;0327 'PrintText' 3c27 0021 ld $21 ;0329 LDW 3c28 005e ld $5e ;0329 'Score' 3c29 00b8 ld $b8 ;032b SUBW 3c2a 0030 ld $30 ;032b 'HighScore' 3c2b 0035 ld $35 ;032d BCC 3c2c 0056 ld $56 ;032e LE 3c2d 003f ld $3f 3c2e 0021 ld $21 ;0330 LDW 3c2f 0060 ld $60 ;0330 'Control' 3c30 00fc ld $fc ;0332 XORW 3c31 0062 ld $62 ;0332 'PlayerControl' 3c32 0035 ld $35 ;0334 BCC 3c33 0072 ld $72 ;0335 NE 3c34 003f ld $3f 3c35 0021 ld $21 ;0337 LDW 3c36 005e ld $5e ;0337 'Score' 3c37 002b ld $2b ;0339 STW 3c38 0030 ld $30 ;0339 'HighScore' 3c39 0059 ld $59 ;033b LDI 3c3a 001e ld $1e 3c3b 002b ld $2b ;033d STW 3c3c 003a ld $3a ;033d 'Color' 3c3d 00cf ld $cf ;033f CALL 3c3e 0064 ld $64 ;033f 'DrawHighScore' 3c3f 00cf ld $cf ;0341 CALL 3c40 0066 ld $66 ;0341 'PlayGameOverSound' 3c41 0063 ld $63 ;0343 POP 3c42 00ff ld $ff ;0344 RET 3c43 002b ld $2b ;0345 STW 3c44 0068 ld $68 ;0345 'GameOver' 3c45 00cd ld $cd ;0347 DEF 3c46 0059 ld $59 3c47 002b ld $2b ;0349 STW 3c48 006a ld $6a ;0349 'tmp' 3c49 001a ld $1a ;034b LD 3c4a 000e ld $0e 3c4b 0099 ld $99 ;034d ADDW 3c4c 006a ld $6a ;034d 'tmp' 3c4d 0082 ld $82 ;034f ANDI 3c4e 00ff ld $ff 3c4f 002b ld $2b ;0351 STW 3c50 006a ld $6a ;0351 'tmp' 3c51 001a ld $1a ;0353 LD 3c52 000e ld $0e 3c53 00b8 ld $b8 ;0355 SUBW 3c54 006a ld $6a ;0355 'tmp' 3c55 0035 ld $35 ;0357 BCC 3c56 0072 ld $72 ;0358 NE 3c57 0051 ld $51 3c58 00ff ld $ff ;035a RET 3c59 002b ld $2b ;035b STW 3c5a 0050 ld $50 ;035b 'Wait' 3c5b 00cd ld $cd ;035d DEF 3c5c 007f ld $7f 3c5d 0075 ld $75 ;035f PUSH 3c5e 0059 ld $59 ;0360 LDI 3c5f 0008 ld $08 3c60 002b ld $2b ;0362 STW 3c61 003a ld $3a ;0362 'Color' 3c62 0059 ld $59 ;0364 LDI 3c63 0000 ld $00 3c64 002b ld $2b ;0366 STW 3c65 0038 ld $38 ;0366 'BgColor' 3c66 0011 ld $11 ;0368 LDWI 3c67 0000 ld $00 3c68 0008 ld $08 3c69 00cf ld $cf ;036b CALL 3c6a 006c ld $6c ;036b 'ClearScreen' 3c6b 0011 ld $11 ;036d LDWI 3c6c 0038 ld $38 3c6d 0008 ld $08 3c6e 002b ld $2b ;0370 STW 3c6f 003c ld $3c ;0370 'Pos' 3c70 00cd ld $cd ;0372 DEF 3c71 007b ld $7b 3c72 0047 ld $47 ;0374 'G' 3c73 0069 ld $69 ;0375 'i' 3c74 0067 ld $67 ;0376 'g' 3c75 0061 ld $61 ;0377 'a' 3c76 0074 ld $74 ;0378 't' 3c77 0072 ld $72 ;0379 'r' 3c78 006f ld $6f ;037a 'o' 3c79 006e ld $6e ;037b 'n' 3c7a 0000 ld $00 ;037c 0 3c7b 00cf ld $cf ;037d CALL 3c7c 0042 ld $42 ;037d 'PrintText' 3c7d 0063 ld $63 ;037f POP 3c7e 00ff ld $ff ;0380 RET 3c7f 002b ld $2b ;0381 STW 3c80 006e ld $6e ;0381 'Intro' 3c81 00cd ld $cd ;0383 DEF 3c82 00a3 ld $a3 3c83 002b ld $2b ;0385 STW 3c84 0070 ld $70 ;0385 'p' 3c85 0011 ld $11 ;0387 LDWI 3c86 0003 ld $03 3c87 000b ld $0b 3c88 002b ld $2b ;038a STW 3c89 0022 ld $22 3c8a 0021 ld $21 ;038c LDW 3c8b 0038 ld $38 ;038c 'BgColor' 3c8c 005e ld $5e ;038e ST 3c8d 0025 ld $25 3c8e 0021 ld $21 ;0390 LDW 3c8f 0070 ld $70 ;0390 'p' 3c90 002b ld $2b ;0392 STW 3c91 0026 ld $26 3c92 0059 ld $59 ;0394 LDI 3c93 00a0 ld $a0 3c94 005e ld $5e ;0396 ST 3c95 0024 ld $24 3c96 00b4 ld $b4 ;0398 SYS 3c97 00f3 ld $f3 3c98 0011 ld $11 ;039a LDWI 3c99 0000 ld $00 3c9a 0001 ld $01 3c9b 0099 ld $99 ;039d ADDW 3c9c 0070 ld $70 ;039d 'p' 3c9d 002b ld $2b ;039f STW 3c9e 0070 ld $70 ;039f 'p' 3c9f 0035 ld $35 ;03a1 BCC 3ca0 004d ld $4d ;03a2 GT 3ca1 0090 ld $90 3ca2 00ff ld $ff ;03a4 RET 3ca3 002b ld $2b ;03a5 STW 3ca4 006c ld $6c ;03a5 'ClearScreen' 3ca5 00cd ld $cd ;03a7 DEF 3ca6 00c1 ld $c1 3ca7 0059 ld $59 ;03a9 LDI 3ca8 0000 ld $00 3ca9 00b8 ld $b8 ;03ab SUBW 3caa 0072 ld $72 ;03ab 'stepV' 3cab 002b ld $2b ;03ad STW 3cac 006a ld $6a ;03ad 'tmp' 3cad 0021 ld $21 ;03af LDW 3cae 0074 ld $74 ;03af 'stepU' 3caf 002b ld $2b ;03b1 STW 3cb0 0072 ld $72 ;03b1 'stepV' 3cb1 0021 ld $21 ;03b3 LDW 3cb2 006a ld $6a ;03b3 'tmp' 3cb3 002b ld $2b ;03b5 STW 3cb4 0074 ld $74 ;03b5 'stepU' 3cb5 0021 ld $21 ;03b7 LDW 3cb6 0076 ld $76 ;03b7 'Bias' 3cb7 0035 ld $35 ;03b9 BCC 3cb8 0053 ld $53 ;03ba GE 3cb9 00bc ld $bc 3cba 0059 ld $59 ;03bc LDI 3cbb 0000 ld $00 3cbc 00e3 ld $e3 ;03be ADDI 3cbd 003c ld $3c 3cbe 002b ld $2b ;03c0 STW 3cbf 0076 ld $76 ;03c0 'Bias' 3cc0 00ff ld $ff ;03c2 RET 3cc1 002b ld $2b ;03c3 STW 3cc2 0078 ld $78 ;03c3 'TurnL' 3cc3 00cd ld $cd ;03c5 DEF 3cc4 00df ld $df 3cc5 0059 ld $59 ;03c7 LDI 3cc6 0000 ld $00 3cc7 00b8 ld $b8 ;03c9 SUBW 3cc8 0074 ld $74 ;03c9 'stepU' 3cc9 002b ld $2b ;03cb STW 3cca 006a ld $6a ;03cb 'tmp' 3ccb 0021 ld $21 ;03cd LDW 3ccc 0072 ld $72 ;03cd 'stepV' 3ccd 002b ld $2b ;03cf STW 3cce 0074 ld $74 ;03cf 'stepU' 3ccf 0021 ld $21 ;03d1 LDW 3cd0 006a ld $6a ;03d1 'tmp' 3cd1 002b ld $2b ;03d3 STW 3cd2 0072 ld $72 ;03d3 'stepV' 3cd3 0021 ld $21 ;03d5 LDW 3cd4 0076 ld $76 ;03d5 'Bias' 3cd5 0035 ld $35 ;03d7 BCC 3cd6 0056 ld $56 ;03d8 LE 3cd7 00da ld $da 3cd8 0059 ld $59 ;03da LDI 3cd9 0000 ld $00 3cda 00e6 ld $e6 ;03dc SUBI 3cdb 003c ld $3c 3cdc 002b ld $2b ;03de STW 3cdd 0076 ld $76 ;03de 'Bias' 3cde 00ff ld $ff ;03e0 RET 3cdf 002b ld $2b ;03e1 STW 3ce0 007a ld $7a ;03e1 'TurnR' 3ce1 00cd ld $cd ;03e3 DEF 3ce2 00f0 ld $f0 3ce3 002b ld $2b ;03e5 STW 3ce4 003c ld $3c ;03e5 'Pos' 3ce5 0021 ld $21 ;03e7 LDW 3ce6 003a ld $3a ;03e7 'Color' 3ce7 005e ld $5e ;03e9 ST 3ce8 0019 ld $19 3ce9 00f3 ld $f3 ;03eb DOKE 3cea 003c ld $3c ;03eb 'Pos' 3ceb 0093 ld $93 ;03ed INC 3cec 003d ld $3d ;03ed 'Pos'+1 3ced 00f3 ld $f3 ;03ef DOKE 3cee 003c ld $3c ;03ef 'Pos' 3cef 00ff ld $ff ;03f1 RET 3cf0 002b ld $2b ;03f2 STW 3cf1 005a ld $5a ;03f2 'DrawBlock' 3cf2 0093 ld $93 ;03f4 INC 3cf3 001b ld $1b ;03f4 '_vLR'+1 3cf4 00ff ld $ff ;03f6 RET 3cf5 0004 ld $04 ;| RAM segment address (high byte first) 3cf6 0000 ld $00 ;| 3cf7 00f9 ld $f9 ;| Length (1..256) 3cf8 00cd ld $cd ;0400 DEF 3cf9 00ae ld $ae 3cfa 0075 ld $75 ;0402 PUSH 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 00cf ld $cf ;0403 CALL 3d01 0060 ld $60 ;0403 'Control' 3d02 001a ld $1a ;0405 LD 3d03 0075 ld $75 ;0405 'stepU'+1 3d04 0082 ld $82 ;0407 ANDI 3d05 0080 ld $80 3d06 002b ld $2b ;0409 STW 3d07 006a ld $6a ;0409 'tmp' 3d08 0021 ld $21 ;040b LDW 3d09 0074 ld $74 ;040b 'stepU' 3d0a 0082 ld $82 ;040d ANDI 3d0b 0002 ld $02 3d0c 0035 ld $35 ;040f BCC 3d0d 003f ld $3f ;0410 EQ 3d0e 0012 ld $12 3d0f 0059 ld $59 ;0412 LDI 3d10 0040 ld $40 3d11 0099 ld $99 ;0414 ADDW 3d12 006a ld $6a ;0414 'tmp' 3d13 00e3 ld $e3 ;0416 ADDI 3d14 001b ld $1b 3d15 002b ld $2b ;0418 STW 3d16 003a ld $3a ;0418 'Color' 3d17 001a ld $1a ;041a LD 3d18 0059 ld $59 ;041a 'Head'+1 3d19 00fc ld $fc ;041c XORW 3d1a 0058 ld $58 ;041c 'Head' 3d1b 0082 ld $82 ;041e ANDI 3d1c 0002 ld $02 3d1d 0035 ld $35 ;0420 BCC 3d1e 003f ld $3f ;0421 EQ 3d1f 0023 ld $23 3d20 0059 ld $59 ;0423 LDI 3d21 0001 ld $01 3d22 00fc ld $fc ;0425 XORW 3d23 003a ld $3a ;0425 'Color' 3d24 002b ld $2b ;0427 STW 3d25 003a ld $3a ;0427 'Color' 3d26 0021 ld $21 ;0429 LDW 3d27 0058 ld $58 ;0429 'Head' 3d28 00cf ld $cf ;042b CALL 3d29 005a ld $5a ;042b 'DrawBlock' 3d2a 0021 ld $21 ;042d LDW 3d2b 0058 ld $58 ;042d 'Head' 3d2c 0099 ld $99 ;042f ADDW 3d2d 0074 ld $74 ;042f 'stepU' 3d2e 002b ld $2b ;0431 STW 3d2f 0058 ld $58 ;0431 'Head' 3d30 0021 ld $21 ;0433 LDW 3d31 0058 ld $58 ;0433 'Head' 3d32 00ad ld $ad ;0435 PEEK 3d33 0082 ld $82 ;0436 ANDI 3d34 0003 ld $03 3d35 0035 ld $35 ;0438 BCC 3d36 003f ld $3f ;0439 EQ 3d37 003b ld $3b 3d38 0063 ld $63 ;043b POP 3d39 00ff ld $ff ;043c RET 3d3a 0021 ld $21 ;043d LDW 3d3b 0058 ld $58 ;043d 'Head' 3d3c 00ad ld $ad ;043f PEEK 3d3d 008c ld $8c ;0440 XORI 3d3e 0018 ld $18 3d3f 0035 ld $35 ;0442 BCC 3d40 0072 ld $72 ;0443 NE 3d41 005d ld $5d 3d42 0059 ld $59 ;0445 LDI 3d43 0040 ld $40 3d44 0099 ld $99 ;0447 ADDW 3d45 004a ld $4a ;0447 'Timer' 3d46 00cf ld $cf ;0449 CALL 3d47 007c ld $7c ;0449 'SetNote' 3d48 0059 ld $59 ;044b LDI 3d49 0002 ld $02 3d4a 005e ld $5e ;044d ST 3d4b 002c ld $2c 3d4c 0021 ld $21 ;044f LDW 3d4d 005e ld $5e ;044f 'Score' 3d4e 0099 ld $99 ;0451 ADDW 3d4f 004a ld $4a ;0451 'Timer' 3d50 002b ld $2b ;0453 STW 3d51 005e ld $5e ;0453 'Score' 3d52 00cf ld $cf ;0455 CALL 3d53 007e ld $7e ;0455 'DrawScore' 3d54 0059 ld $59 ;0457 LDI 3d55 0005 ld $05 3d56 00cf ld $cf ;0459 CALL 3d57 0081 ld $81 ;0459 'AddTimer' 3d58 0093 ld $93 ;045b INC 3d59 0083 ld $83 ;045b 'Grow' 3d5a 0093 ld $93 ;045d INC 3d5b 0085 ld $85 ;045d 'Drops' 3d5c 00cf ld $cf ;045f CALL 3d5d 005c ld $5c ;045f 'DrawHead' 3d5e 0021 ld $21 ;0461 LDW 3d5f 0083 ld $83 ;0461 'Grow' 3d60 0035 ld $35 ;0463 BCC 3d61 0056 ld $56 ;0464 LE 3d62 006c ld $6c 3d63 00e6 ld $e6 ;0466 SUBI 3d64 0001 ld $01 3d65 002b ld $2b ;0468 STW 3d66 0083 ld $83 ;0468 'Grow' 3d67 00cf ld $cf ;046a CALL 3d68 0087 ld $87 ;046a 'AddFood' 3d69 0090 ld $90 ;046c BRA 3d6a 00aa ld $aa 3d6b 0021 ld $21 ;046e LDW 3d6c 0089 ld $89 ;046e 'Tail' 3d6d 00ad ld $ad ;0470 PEEK 3d6e 002b ld $2b ;0471 STW 3d6f 006a ld $6a ;0471 'tmp' 3d70 0021 ld $21 ;0473 LDW 3d71 0085 ld $85 ;0473 'Drops' 3d72 0035 ld $35 ;0475 BCC 3d73 0056 ld $56 ;0476 LE 3d74 007e ld $7e 3d75 00e6 ld $e6 ;0478 SUBI 3d76 0001 ld $01 3d77 002b ld $2b ;047a STW 3d78 0085 ld $85 ;047a 'Drops' 3d79 0059 ld $59 ;047c LDI 3d7a 003e ld $3e 3d7b 0090 ld $90 ;047e BRA 3d7c 0080 ld $80 3d7d 0059 ld $59 ;0480 LDI 3d7e 0004 ld $04 3d7f 002b ld $2b ;0482 STW 3d80 003a ld $3a ;0482 'Color' 3d81 0021 ld $21 ;0484 LDW 3d82 0089 ld $89 ;0484 'Tail' 3d83 00cf ld $cf ;0486 CALL 3d84 005a ld $5a ;0486 'DrawBlock' 3d85 0021 ld $21 ;0488 LDW 3d86 006a ld $6a ;0488 'tmp' 3d87 0082 ld $82 ;048a ANDI 3d88 0040 ld $40 3d89 0035 ld $35 ;048c BCC 3d8a 0072 ld $72 ;048d NE 3d8b 0092 ld $92 3d8c 0011 ld $11 ;048f LDWI 3d8d 0000 ld $00 3d8e 0001 ld $01 3d8f 0090 ld $90 ;0492 BRA 3d90 0094 ld $94 3d91 0059 ld $59 ;0494 LDI 3d92 0001 ld $01 3d93 002b ld $2b ;0496 STW 3d94 008b ld $8b ;0496 'x' 3d95 0021 ld $21 ;0498 LDW 3d96 006a ld $6a ;0498 'tmp' 3d97 0082 ld $82 ;049a ANDI 3d98 0080 ld $80 3d99 0035 ld $35 ;049c BCC 3d9a 0072 ld $72 ;049d NE 3d9b 00a1 ld $a1 3d9c 0021 ld $21 ;049f LDW 3d9d 008b ld $8b ;049f 'x' 3d9e 0090 ld $90 ;04a1 BRA 3d9f 00a5 ld $a5 3da0 0059 ld $59 ;04a3 LDI 3da1 0000 ld $00 3da2 00b8 ld $b8 ;04a5 SUBW 3da3 008b ld $8b ;04a5 'x' 3da4 00e9 ld $e9 ;04a7 LSLW 3da5 0099 ld $99 ;04a8 ADDW 3da6 0089 ld $89 ;04a8 'Tail' 3da7 002b ld $2b ;04aa STW 3da8 0089 ld $89 ;04aa 'Tail' 3da9 00cf ld $cf ;04ac CALL 3daa 0052 ld $52 ;04ac 'TimeStep' 3dab 0090 ld $90 ;04ae BRA 3dac 0001 ld $01 3dad 002b ld $2b ;04b0 STW 3dae 008d ld $8d ;04b0 'RunGame' 3daf 00cd ld $cd ;04b2 DEF 3db0 00ee ld $ee 3db1 0075 ld $75 ;04b4 PUSH 3db2 0059 ld $59 ;04b5 LDI 3db3 0018 ld $18 3db4 002b ld $2b ;04b7 STW 3db5 003a ld $3a ;04b7 'Color' 3db6 0011 ld $11 ;04b9 LDWI 3db7 00a7 ld $a7 3db8 0004 ld $04 3db9 002b ld $2b ;04bc STW 3dba 0022 ld $22 3dbb 00b4 ld $b4 ;04be SYS 3dbc 00fd ld $fd 3dbd 002b ld $2b ;04c0 STW 3dbe 003c ld $3c ;04c0 'Pos' 3dbf 001a ld $1a ;04c2 LD 3dc0 003c ld $3c ;04c2 'Pos' 3dc1 00e6 ld $e6 ;04c4 SUBI 3dc2 0080 ld $80 3dc3 0035 ld $35 ;04c6 BCC 3dc4 0053 ld $53 ;04c7 GE 3dc5 00c9 ld $c9 3dc6 00e3 ld $e3 ;04c9 ADDI 3dc7 0096 ld $96 3dc8 00e3 ld $e3 ;04cb ADDI 3dc9 0005 ld $05 3dca 0082 ld $82 ;04cd ANDI 3dcb 00fe ld $fe 3dcc 005e ld $5e ;04cf ST 3dcd 003c ld $3c ;04cf 'Pos' 3dce 001a ld $1a ;04d1 LD 3dcf 003d ld $3d ;04d1 'Pos'+1 3dd0 0082 ld $82 ;04d3 ANDI 3dd1 007f ld $7f 3dd2 00e6 ld $e6 ;04d5 SUBI 3dd3 0040 ld $40 3dd4 0035 ld $35 ;04d7 BCC 3dd5 0053 ld $53 ;04d8 GE 3dd6 00da ld $da 3dd7 00e3 ld $e3 ;04da ADDI 3dd8 0066 ld $66 3dd9 00e3 ld $e3 ;04dc ADDI 3dda 0015 ld $15 3ddb 0082 ld $82 ;04de ANDI 3ddc 00fe ld $fe 3ddd 005e ld $5e ;04e0 ST 3dde 003d ld $3d ;04e0 'Pos'+1 3ddf 0021 ld $21 ;04e2 LDW 3de0 003c ld $3c ;04e2 'Pos' 3de1 00ad ld $ad ;04e4 PEEK 3de2 008c ld $8c ;04e5 XORI 3de3 0004 ld $04 3de4 0035 ld $35 ;04e7 BCC 3de5 0072 ld $72 ;04e8 NE 3de6 00b7 ld $b7 3de7 0021 ld $21 ;04ea LDW 3de8 003c ld $3c ;04ea 'Pos' 3de9 00cf ld $cf ;04ec CALL 3dea 005a ld $5a ;04ec 'DrawBlock' 3deb 0063 ld $63 ;04ee POP 3dec 00ff ld $ff ;04ef RET 3ded 002b ld $2b ;04f0 STW 3dee 0087 ld $87 ;04f0 'AddFood' 3def 0059 ld $59 ;04f2 LDI 3df0 0000 ld $00 3df1 002b ld $2b ;04f4 STW 3df2 0076 ld $76 ;04f4 'Bias' 3df3 0093 ld $93 ;04f6 INC 3df4 001b ld $1b ;04f6 '_vLR'+1 3df5 00ff ld $ff ;04f8 RET 3df6 0005 ld $05 ;| RAM segment address (high byte first) 3df7 0000 ld $00 ;| 3df8 00ed ld $ed ;| Length (1..256) 3df9 00cd ld $cd ;0500 DEF 3dfa 00e6 ld $e6 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 0075 ld $75 ;0502 PUSH 3e01 001a ld $1a ;0503 LD 3e02 0011 ld $11 3e03 0082 ld $82 ;0505 ANDI 3e04 00cf ld $cf 3e05 008c ld $8c ;0507 XORI 3e06 00cf ld $cf 3e07 0035 ld $35 ;0509 BCC 3e08 003f ld $3f ;050a EQ 3e09 000e ld $0e 3e0a 00cf ld $cf ;050c CALL 3e0b 008f ld $8f ;050c 'SetupGame' 3e0c 0063 ld $63 ;050e POP 3e0d 00ff ld $ff ;050f RET 3e0e 0021 ld $21 ;0510 LDW 3e0f 0078 ld $78 ;0510 'TurnL' 3e10 002b ld $2b ;0512 STW 3e11 0070 ld $70 ;0512 'p' 3e12 0021 ld $21 ;0514 LDW 3e13 007a ld $7a ;0514 'TurnR' 3e14 002b ld $2b ;0516 STW 3e15 0091 ld $91 ;0516 'q' 3e16 0021 ld $21 ;0518 LDW 3e17 0058 ld $58 ;0518 'Head' 3e18 0099 ld $99 ;051a ADDW 3e19 0074 ld $74 ;051a 'stepU' 3e1a 00ad ld $ad ;051c PEEK 3e1b 008c ld $8c ;051d XORI 3e1c 0004 ld $04 3e1d 002b ld $2b ;051f STW 3e1e 006a ld $6a ;051f 'tmp' 3e1f 0035 ld $35 ;0521 BCC 3e20 003f ld $3f ;0522 EQ 3e21 002b ld $2b 3e22 008c ld $8c ;0524 XORI 3e23 001c ld $1c 3e24 0035 ld $35 ;0526 BCC 3e25 0072 ld $72 ;0527 NE 3e26 0029 ld $29 3e27 002b ld $2b ;0529 STW 3e28 006a ld $6a ;0529 'tmp' 3e29 0090 ld $90 ;052b BRA 3e2a 0039 ld $39 3e2b 0021 ld $21 ;052d LDW 3e2c 0058 ld $58 ;052d 'Head' 3e2d 0099 ld $99 ;052f ADDW 3e2e 0074 ld $74 ;052f 'stepU' 3e2f 0099 ld $99 ;0531 ADDW 3e30 0074 ld $74 ;0531 'stepU' 3e31 00ad ld $ad ;0533 PEEK 3e32 008c ld $8c ;0534 XORI 3e33 003e ld $3e 3e34 0035 ld $35 ;0536 BCC 3e35 0072 ld $72 ;0537 NE 3e36 0039 ld $39 3e37 0093 ld $93 ;0539 INC 3e38 006b ld $6b ;0539 'tmp'+1 3e39 0021 ld $21 ;053b LDW 3e3a 0058 ld $58 ;053b 'Head' 3e3b 00b8 ld $b8 ;053d SUBW 3e3c 0072 ld $72 ;053d 'stepV' 3e3d 00ad ld $ad ;053f PEEK 3e3e 008c ld $8c ;0540 XORI 3e3f 0004 ld $04 3e40 0035 ld $35 ;0542 BCC 3e41 003f ld $3f ;0543 EQ 3e42 0054 ld $54 3e43 008c ld $8c ;0545 XORI 3e44 001c ld $1c 3e45 0035 ld $35 ;0547 BCC 3e46 0072 ld $72 ;0548 NE 3e47 004e ld $4e 3e48 002b ld $2b ;054a STW 3e49 0091 ld $91 ;054a 'q' 3e4a 0093 ld $93 ;054c INC 3e4b 006b ld $6b ;054c 'tmp'+1 3e4c 0090 ld $90 ;054e BRA 3e4d 0052 ld $52 3e4e 0059 ld $59 ;0550 LDI 3e4f 0000 ld $00 3e50 002b ld $2b ;0552 STW 3e51 0070 ld $70 ;0552 'p' 3e52 0090 ld $90 ;0554 BRA 3e53 0071 ld $71 3e54 0021 ld $21 ;0556 LDW 3e55 0058 ld $58 ;0556 'Head' 3e56 00b8 ld $b8 ;0558 SUBW 3e57 0072 ld $72 ;0558 'stepV' 3e58 00b8 ld $b8 ;055a SUBW 3e59 0072 ld $72 ;055a 'stepV' 3e5a 00ad ld $ad ;055c PEEK 3e5b 008c ld $8c ;055d XORI 3e5c 0004 ld $04 3e5d 0035 ld $35 ;055f BCC 3e5e 003f ld $3f ;0560 EQ 3e5f 0071 ld $71 3e60 008c ld $8c ;0562 XORI 3e61 001c ld $1c 3e62 0035 ld $35 ;0564 BCC 3e63 0072 ld $72 ;0565 NE 3e64 006b ld $6b 3e65 002b ld $2b ;0567 STW 3e66 0091 ld $91 ;0567 'q' 3e67 0093 ld $93 ;0569 INC 3e68 006b ld $6b ;0569 'tmp'+1 3e69 0090 ld $90 ;056b BRA 3e6a 0071 ld $71 3e6b 0021 ld $21 ;056d LDW 3e6c 0076 ld $76 ;056d 'Bias' 3e6d 00e3 ld $e3 ;056f ADDI 3e6e 000f ld $0f 3e6f 0021 ld $21 ;0571 LDW 3e70 0076 ld $76 ;0571 'Bias' 3e71 0021 ld $21 ;0573 LDW 3e72 0058 ld $58 ;0573 'Head' 3e73 0099 ld $99 ;0575 ADDW 3e74 0072 ld $72 ;0575 'stepV' 3e75 00ad ld $ad ;0577 PEEK 3e76 008c ld $8c ;0578 XORI 3e77 0004 ld $04 3e78 0035 ld $35 ;057a BCC 3e79 003f ld $3f ;057b EQ 3e7a 008c ld $8c 3e7b 008c ld $8c ;057d XORI 3e7c 001c ld $1c 3e7d 0035 ld $35 ;057f BCC 3e7e 0072 ld $72 ;0580 NE 3e7f 0086 ld $86 3e80 002b ld $2b ;0582 STW 3e81 0070 ld $70 ;0582 'p' 3e82 0093 ld $93 ;0584 INC 3e83 006b ld $6b ;0584 'tmp'+1 3e84 0090 ld $90 ;0586 BRA 3e85 008a ld $8a 3e86 0059 ld $59 ;0588 LDI 3e87 0000 ld $00 3e88 002b ld $2b ;058a STW 3e89 0091 ld $91 ;058a 'q' 3e8a 0090 ld $90 ;058c BRA 3e8b 00a9 ld $a9 3e8c 0021 ld $21 ;058e LDW 3e8d 0058 ld $58 ;058e 'Head' 3e8e 0099 ld $99 ;0590 ADDW 3e8f 0072 ld $72 ;0590 'stepV' 3e90 0099 ld $99 ;0592 ADDW 3e91 0072 ld $72 ;0592 'stepV' 3e92 00ad ld $ad ;0594 PEEK 3e93 008c ld $8c ;0595 XORI 3e94 0004 ld $04 3e95 0035 ld $35 ;0597 BCC 3e96 003f ld $3f ;0598 EQ 3e97 00a9 ld $a9 3e98 008c ld $8c ;059a XORI 3e99 001c ld $1c 3e9a 0035 ld $35 ;059c BCC 3e9b 0072 ld $72 ;059d NE 3e9c 00a3 ld $a3 3e9d 002b ld $2b ;059f STW 3e9e 0070 ld $70 ;059f 'p' 3e9f 0093 ld $93 ;05a1 INC 3ea0 006b ld $6b ;05a1 'tmp'+1 3ea1 0090 ld $90 ;05a3 BRA 3ea2 00a9 ld $a9 3ea3 0021 ld $21 ;05a5 LDW 3ea4 0076 ld $76 ;05a5 'Bias' 3ea5 00e6 ld $e6 ;05a7 SUBI 3ea6 000f ld $0f 3ea7 0021 ld $21 ;05a9 LDW 3ea8 0076 ld $76 ;05a9 'Bias' 3ea9 0021 ld $21 ;05ab LDW 3eaa 006a ld $6a ;05ab 'tmp' 3eab 0035 ld $35 ;05ad BCC 3eac 0072 ld $72 ;05ae NE 3ead 00bb ld $bb 3eae 001a ld $1a ;05b0 LD 3eaf 0006 ld $06 3eb0 00e6 ld $e6 ;05b2 SUBI 3eb1 000d ld $0d 3eb2 0035 ld $35 ;05b4 BCC 3eb3 0053 ld $53 ;05b5 GE 3eb4 00b9 ld $b9 3eb5 0059 ld $59 ;05b7 LDI 3eb6 0001 ld $01 3eb7 0090 ld $90 ;05b9 BRA 3eb8 00bb ld $bb 3eb9 0059 ld $59 ;05bb LDI 3eba 0000 ld $00 3ebb 0035 ld $35 ;05bd BCC 3ebc 003f ld $3f ;05be EQ 3ebd 00e4 ld $e4 3ebe 0021 ld $21 ;05c0 LDW 3ebf 0070 ld $70 ;05c0 'p' 3ec0 0035 ld $35 ;05c2 BCC 3ec1 0072 ld $72 ;05c3 NE 3ec2 00c7 ld $c7 3ec3 0021 ld $21 ;05c5 LDW 3ec4 0091 ld $91 ;05c5 'q' 3ec5 0090 ld $90 ;05c7 BRA 3ec6 00df ld $df 3ec7 0021 ld $21 ;05c9 LDW 3ec8 0091 ld $91 ;05c9 'q' 3ec9 0035 ld $35 ;05cb BCC 3eca 0072 ld $72 ;05cc NE 3ecb 00d0 ld $d0 3ecc 0021 ld $21 ;05ce LDW 3ecd 0070 ld $70 ;05ce 'p' 3ece 0090 ld $90 ;05d0 BRA 3ecf 00df ld $df 3ed0 001a ld $1a ;05d2 LD 3ed1 0006 ld $06 3ed2 00e6 ld $e6 ;05d4 SUBI 3ed3 0080 ld $80 3ed4 0099 ld $99 ;05d6 ADDW 3ed5 0076 ld $76 ;05d6 'Bias' 3ed6 0035 ld $35 ;05d8 BCC 3ed7 0053 ld $53 ;05d9 GE 3ed8 00dd ld $dd 3ed9 0021 ld $21 ;05db LDW 3eda 0070 ld $70 ;05db 'p' 3edb 0090 ld $90 ;05dd BRA 3edc 00df ld $df 3edd 0021 ld $21 ;05df LDW 3ede 0091 ld $91 ;05df 'q' 3edf 0035 ld $35 ;05e1 BCC 3ee0 003f ld $3f ;05e2 EQ 3ee1 00e4 ld $e4 3ee2 00cf ld $cf ;05e4 CALL 3ee3 0018 ld $18 ;05e4 vAC 3ee4 0063 ld $63 ;05e6 POP 3ee5 00ff ld $ff ;05e7 RET 3ee6 002b ld $2b ;05e8 STW 3ee7 0093 ld $93 ;05e8 'AutoControl' 3ee8 0093 ld $93 ;05ea INC 3ee9 001b ld $1b ;05ea '_vLR'+1 3eea 00ff ld $ff ;05ec RET 3eeb 0006 ld $06 ;| RAM segment address (high byte first) 3eec 0000 ld $00 ;| 3eed 00fa ld $fa ;| Length (1..256) 3eee 00cd ld $cd ;0600 DEF 3eef 0016 ld $16 3ef0 0075 ld $75 ;0602 PUSH 3ef1 0099 ld $99 ;0603 ADDW 3ef2 004a ld $4a ;0603 'Timer' 3ef3 002b ld $2b ;0605 STW 3ef4 004a ld $4a ;0605 'Timer' 3ef5 00e6 ld $e6 ;0607 SUBI 3ef6 000f ld $0f 3ef7 0035 ld $35 ;0609 BCC 3ef8 0056 ld $56 ;060a LE 3ef9 000e ld $0e 3efa 0059 ld $59 ;060c LDI 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 000f ld $0f 3f01 002b ld $2b ;060e STW 3f02 004a ld $4a ;060e 'Timer' 3f03 001a ld $1a ;0610 LD 3f04 000e ld $0e 3f05 002b ld $2b ;0612 STW 3f06 0048 ld $48 ;0612 'TimeOut' 3f07 00cf ld $cf ;0614 CALL 3f08 004c ld $4c ;0614 'DrawTimer' 3f09 0063 ld $63 ;0616 POP 3f0a 00ff ld $ff ;0617 RET 3f0b 002b ld $2b ;0618 STW 3f0c 0081 ld $81 ;0618 'AddTimer' 3f0d 00cd ld $cd ;061a DEF 3f0e 00b3 ld $b3 3f0f 0075 ld $75 ;061c PUSH 3f10 0059 ld $59 ;061d LDI 3f11 0000 ld $00 3f12 002b ld $2b ;061f STW 3f13 005e ld $5e ;061f 'Score' 3f14 002b ld $2b ;0621 STW 3f15 004a ld $4a ;0621 'Timer' 3f16 00cf ld $cf ;0623 CALL 3f17 007e ld $7e ;0623 'DrawScore' 3f18 0059 ld $59 ;0625 LDI 3f19 000f ld $0f 3f1a 002b ld $2b ;0627 STW 3f1b 004a ld $4a ;0627 'Timer' 3f1c 00cf ld $cf ;0629 CALL 3f1d 004c ld $4c ;0629 'DrawTimer' 3f1e 00cf ld $cf ;062b CALL 3f1f 0064 ld $64 ;062b 'DrawHighScore' 3f20 0059 ld $59 ;062d LDI 3f21 0004 ld $04 3f22 002b ld $2b ;062f STW 3f23 0038 ld $38 ;062f 'BgColor' 3f24 0011 ld $11 ;0631 LDWI 3f25 0000 ld $00 3f26 0010 ld $10 3f27 002b ld $2b ;0634 STW 3f28 003c ld $3c ;0634 'Pos' 3f29 00cf ld $cf ;0636 CALL 3f2a 006c ld $6c ;0636 'ClearScreen' 3f2b 0059 ld $59 ;0638 LDI 3f2c 001a ld $1a 3f2d 002b ld $2b ;063a STW 3f2e 003a ld $3a ;063a 'Color' 3f2f 0059 ld $59 ;063c LDI 3f30 0001 ld $01 3f31 002b ld $2b ;063e STW 3f32 0044 ld $44 ;063e 'Step' 3f33 0059 ld $59 ;0640 LDI 3f34 009f ld $9f 3f35 00cf ld $cf ;0642 CALL 3f36 0046 ld $46 ;0642 'DrawLine' 3f37 0011 ld $11 ;0644 LDWI 3f38 0000 ld $00 3f39 0001 ld $01 3f3a 002b ld $2b ;0647 STW 3f3b 0044 ld $44 ;0647 'Step' 3f3c 0059 ld $59 ;0649 LDI 3f3d 006f ld $6f 3f3e 00cf ld $cf ;064b CALL 3f3f 0046 ld $46 ;064b 'DrawLine' 3f40 0011 ld $11 ;064d LDWI 3f41 00ff ld $ff 3f42 00ff ld $ff 3f43 002b ld $2b ;0650 STW 3f44 0044 ld $44 ;0650 'Step' 3f45 0059 ld $59 ;0652 LDI 3f46 009f ld $9f 3f47 00cf ld $cf ;0654 CALL 3f48 0046 ld $46 ;0654 'DrawLine' 3f49 0011 ld $11 ;0656 LDWI 3f4a 0000 ld $00 3f4b 00ff ld $ff 3f4c 002b ld $2b ;0659 STW 3f4d 0044 ld $44 ;0659 'Step' 3f4e 0059 ld $59 ;065b LDI 3f4f 006e ld $6e 3f50 00cf ld $cf ;065d CALL 3f51 0046 ld $46 ;065d 'DrawLine' 3f52 0059 ld $59 ;065f LDI 3f53 0001 ld $01 3f54 002b ld $2b ;0661 STW 3f55 0044 ld $44 ;0661 'Step' 3f56 0059 ld $59 ;0663 LDI 3f57 009e ld $9e 3f58 00cf ld $cf ;0665 CALL 3f59 0046 ld $46 ;0665 'DrawLine' 3f5a 0011 ld $11 ;0667 LDWI 3f5b 0000 ld $00 3f5c 0001 ld $01 3f5d 002b ld $2b ;066a STW 3f5e 0044 ld $44 ;066a 'Step' 3f5f 0059 ld $59 ;066c LDI 3f60 006d ld $6d 3f61 00cf ld $cf ;066e CALL 3f62 0046 ld $46 ;066e 'DrawLine' 3f63 0011 ld $11 ;0670 LDWI 3f64 00ff ld $ff 3f65 00ff ld $ff 3f66 002b ld $2b ;0673 STW 3f67 0044 ld $44 ;0673 'Step' 3f68 0059 ld $59 ;0675 LDI 3f69 009d ld $9d 3f6a 00cf ld $cf ;0677 CALL 3f6b 0046 ld $46 ;0677 'DrawLine' 3f6c 0011 ld $11 ;0679 LDWI 3f6d 0000 ld $00 3f6e 00ff ld $ff 3f6f 002b ld $2b ;067c STW 3f70 0044 ld $44 ;067c 'Step' 3f71 0059 ld $59 ;067e LDI 3f72 006d ld $6d 3f73 00cf ld $cf ;0680 CALL 3f74 0046 ld $46 ;0680 'DrawLine' 3f75 00cf ld $cf ;0682 CALL 3f76 0095 ld $95 ;0682 'GetReady' 3f77 0011 ld $11 ;0684 LDWI 3f78 0030 ld $30 3f79 0044 ld $44 3f7a 002b ld $2b ;0687 STW 3f7b 0058 ld $58 ;0687 'Head' 3f7c 002b ld $2b ;0689 STW 3f7d 0089 ld $89 ;0689 'Tail' 3f7e 00cf ld $cf ;068b CALL 3f7f 005c ld $5c ;068b 'DrawHead' 3f80 0059 ld $59 ;068d LDI 3f81 0000 ld $00 3f82 002b ld $2b ;068f STW 3f83 0083 ld $83 ;068f 'Grow' 3f84 002b ld $2b ;0691 STW 3f85 0085 ld $85 ;0691 'Drops' 3f86 002b ld $2b ;0693 STW 3f87 004a ld $4a ;0693 'Timer' 3f88 0059 ld $59 ;0695 LDI 3f89 000f ld $0f 3f8a 00cf ld $cf ;0697 CALL 3f8b 0081 ld $81 ;0697 'AddTimer' 3f8c 0059 ld $59 ;0699 LDI 3f8d 0002 ld $02 3f8e 002b ld $2b ;069b STW 3f8f 0074 ld $74 ;069b 'stepU' 3f90 0011 ld $11 ;069d LDWI 3f91 0000 ld $00 3f92 0002 ld $02 3f93 002b ld $2b ;06a0 STW 3f94 0072 ld $72 ;06a0 'stepV' 3f95 0059 ld $59 ;06a2 LDI 3f96 0019 ld $19 3f97 002b ld $2b ;06a4 STW 3f98 0034 ld $34 ;06a4 'i' 3f99 00cf ld $cf ;06a6 CALL 3f9a 0087 ld $87 ;06a6 'AddFood' 3f9b 0021 ld $21 ;06a8 LDW 3f9c 0034 ld $34 ;06a8 'i' 3f9d 00e6 ld $e6 ;06aa SUBI 3f9e 0001 ld $01 3f9f 0035 ld $35 ;06ac BCC 3fa0 004d ld $4d ;06ad GT 3fa1 00a2 ld $a2 3fa2 0021 ld $21 ;06af LDW 3fa3 0097 ld $97 ;06af 'LaunchControl' 3fa4 002b ld $2b ;06b1 STW 3fa5 0060 ld $60 ;06b1 'Control' 3fa6 0063 ld $63 ;06b3 POP 3fa7 00ff ld $ff ;06b4 RET 3fa8 002b ld $2b ;06b5 STW 3fa9 008f ld $8f ;06b5 'SetupGame' 3faa 00cd ld $cd ;06b7 DEF 3fab 00f0 ld $f0 3fac 0075 ld $75 ;06b9 PUSH 3fad 0011 ld $11 ;06ba LDWI 3fae 0002 ld $02 3faf 0008 ld $08 3fb0 002b ld $2b ;06bd STW 3fb1 003c ld $3c ;06bd 'Pos' 3fb2 0021 ld $21 ;06bf LDW 3fb3 005e ld $5e ;06bf 'Score' 3fb4 00b8 ld $b8 ;06c1 SUBW 3fb5 0030 ld $30 ;06c1 'HighScore' 3fb6 0035 ld $35 ;06c3 BCC 3fb7 0056 ld $56 ;06c4 LE 3fb8 00c8 ld $c8 3fb9 0059 ld $59 ;06c6 LDI 3fba 001e ld $1e 3fbb 0090 ld $90 ;06c8 BRA 3fbc 00ca ld $ca 3fbd 0059 ld $59 ;06ca LDI 3fbe 0008 ld $08 3fbf 002b ld $2b ;06cc STW 3fc0 003a ld $3a ;06cc 'Color' 3fc1 0059 ld $59 ;06ce LDI 3fc2 0000 ld $00 3fc3 002b ld $2b ;06d0 STW 3fc4 0038 ld $38 ;06d0 'BgColor' 3fc5 0021 ld $21 ;06d2 LDW 3fc6 005e ld $5e ;06d2 'Score' 3fc7 002b ld $2b ;06d4 STW 3fc8 0054 ld $54 ;06d4 'Value' 3fc9 00cf ld $cf ;06d6 CALL 3fca 0099 ld $99 ;06d6 'DrawNumber4' 3fcb 0021 ld $21 ;06d8 LDW 3fcc 005e ld $5e ;06d8 'Score' 3fcd 00e6 ld $e6 ;06da SUBI 3fce 0064 ld $64 3fcf 0035 ld $35 ;06dc BCC 3fd0 0053 ld $53 ;06dd GE 3fd1 00e1 ld $e1 3fd2 0059 ld $59 ;06df LDI 3fd3 0004 ld $04 3fd4 0090 ld $90 ;06e1 BRA 3fd5 00ec ld $ec 3fd6 00e6 ld $e6 ;06e3 SUBI 3fd7 00c8 ld $c8 3fd8 0035 ld $35 ;06e5 BCC 3fd9 0053 ld $53 ;06e6 GE 3fda 00ea ld $ea 3fdb 0059 ld $59 ;06e8 LDI 3fdc 0003 ld $03 3fdd 0090 ld $90 ;06ea BRA 3fde 00ec ld $ec 3fdf 0059 ld $59 ;06ec LDI 3fe0 0002 ld $02 3fe1 002b ld $2b ;06ee STW 3fe2 004e ld $4e ;06ee 'Delay' 3fe3 0063 ld $63 ;06f0 POP 3fe4 00ff ld $ff ;06f1 RET 3fe5 002b ld $2b ;06f2 STW 3fe6 007e ld $7e ;06f2 'DrawScore' 3fe7 0011 ld $11 ;06f4 LDWI 3fe8 00a0 ld $a0 3fe9 0008 ld $08 3fea 002b ld $2b ;06f7 STW 3feb 001a ld $1a 3fec 00ff ld $ff ;06f9 RET 3fed 0008 ld $08 ;| RAM segment address (high byte first) 3fee 00a0 ld $a0 ;| 3fef 0056 ld $56 ;| Length (1..256) 3ff0 00cd ld $cd ;08a0 DEF 3ff1 00d4 ld $d4 3ff2 0075 ld $75 ;08a2 PUSH 3ff3 0011 ld $11 ;08a3 LDWI 3ff4 009c ld $9c 3ff5 0044 ld $44 3ff6 00b8 ld $b8 ;08a6 SUBW 3ff7 0058 ld $58 ;08a6 'Head' 3ff8 0035 ld $35 ;08a8 BCC 3ff9 0072 ld $72 ;08a9 NE 3ffa 00c3 ld $c3 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 0059 ld $59 ;08ab LDI 4001 001e ld $1e 4002 002b ld $2b ;08ad STW 4003 003a ld $3a ;08ad 'Color' 4004 0011 ld $11 ;08af LDWI 4005 0002 ld $02 4006 0008 ld $08 4007 002b ld $2b ;08b2 STW 4008 003c ld $3c ;08b2 'Pos' 4009 00cd ld $cd ;08b4 DEF 400a 00b9 ld $b9 400b 0041 ld $41 ;08b6 'A' 400c 0055 ld $55 ;08b7 'U' 400d 0054 ld $54 ;08b8 'T' 400e 004f ld $4f ;08b9 'O' 400f 0000 ld $00 ;08ba 0 4010 00cf ld $cf ;08bb CALL 4011 0042 ld $42 ;08bb 'PrintText' 4012 0021 ld $21 ;08bd LDW 4013 0093 ld $93 ;08bd 'AutoControl' 4014 002b ld $2b ;08bf STW 4015 0060 ld $60 ;08bf 'Control' 4016 00cf ld $cf ;08c1 CALL 4017 0018 ld $18 ;08c1 vAC 4018 0090 ld $90 ;08c3 BRA 4019 00d2 ld $d2 401a 001a ld $1a ;08c5 LD 401b 0011 ld $11 401c 0082 ld $82 ;08c7 ANDI 401d 00cf ld $cf 401e 008c ld $8c ;08c9 XORI 401f 00cf ld $cf 4020 0035 ld $35 ;08cb BCC 4021 003f ld $3f ;08cc EQ 4022 00d2 ld $d2 4023 0021 ld $21 ;08ce LDW 4024 0062 ld $62 ;08ce 'PlayerControl' 4025 002b ld $2b ;08d0 STW 4026 0060 ld $60 ;08d0 'Control' 4027 00cf ld $cf ;08d2 CALL 4028 0018 ld $18 ;08d2 vAC 4029 0063 ld $63 ;08d4 POP 402a 00ff ld $ff ;08d5 RET 402b 002b ld $2b ;08d6 STW 402c 0097 ld $97 ;08d6 'LaunchControl' 402d 00cd ld $cd ;08d8 DEF 402e 00ef ld $ef 402f 0075 ld $75 ;08da PUSH 4030 0059 ld $59 ;08db LDI 4031 0020 ld $20 4032 002b ld $2b ;08dd STW 4033 0032 ld $32 ;08dd 'Char' 4034 0059 ld $59 ;08df LDI 4035 000a ld $0a 4036 002b ld $2b ;08e1 STW 4037 009b ld $9b ;08e1 'Radix' 4038 00cf ld $cf ;08e3 CALL 4039 009d ld $9d ;08e3 'DrawNextDigit' 403a 0059 ld $59 ;08e5 LDI 403b 0030 ld $30 403c 002b ld $2b ;08e7 STW 403d 0032 ld $32 ;08e7 'Char' 403e 0059 ld $59 ;08e9 LDI 403f 0001 ld $01 4040 002b ld $2b ;08eb STW 4041 009b ld $9b ;08eb 'Radix' 4042 00cf ld $cf ;08ed CALL 4043 009d ld $9d ;08ed 'DrawNextDigit' 4044 0063 ld $63 ;08ef POP 4045 00ff ld $ff ;08f0 RET 4046 002b ld $2b ;08f1 STW 4047 0056 ld $56 ;08f1 'DrawNumber2' 4048 0093 ld $93 ;08f3 INC 4049 001b ld $1b ;08f3 '_vLR'+1 404a 00ff ld $ff ;08f5 RET 404b 0009 ld $09 ;| RAM segment address (high byte first) 404c 00a0 ld $a0 ;| 404d 0056 ld $56 ;| Length (1..256) 404e 00cd ld $cd ;09a0 DEF 404f 00c7 ld $c7 4050 0075 ld $75 ;09a2 PUSH 4051 0021 ld $21 ;09a3 LDW 4052 0054 ld $54 ;09a3 'Value' 4053 00b8 ld $b8 ;09a5 SUBW 4054 009b ld $9b ;09a5 'Radix' 4055 0035 ld $35 ;09a7 BCC 4056 0050 ld $50 ;09a8 LT 4057 00c3 ld $c3 4058 002b ld $2b ;09aa STW 4059 0054 ld $54 ;09aa 'Value' 405a 0059 ld $59 ;09ac LDI 405b 0031 ld $31 405c 002b ld $2b ;09ae STW 405d 0032 ld $32 ;09ae 'Char' 405e 0021 ld $21 ;09b0 LDW 405f 0054 ld $54 ;09b0 'Value' 4060 00b8 ld $b8 ;09b2 SUBW 4061 009b ld $9b ;09b2 'Radix' 4062 0035 ld $35 ;09b4 BCC 4063 0050 ld $50 ;09b5 LT 4064 00bb ld $bb 4065 002b ld $2b ;09b7 STW 4066 0054 ld $54 ;09b7 'Value' 4067 0093 ld $93 ;09b9 INC 4068 0032 ld $32 ;09b9 'Char' 4069 0090 ld $90 ;09bb BRA 406a 00b0 ld $b0 406b 00cf ld $cf ;09bd CALL 406c 003e ld $3e ;09bd 'PrintChar' 406d 0059 ld $59 ;09bf LDI 406e 0030 ld $30 406f 002b ld $2b ;09c1 STW 4070 0032 ld $32 ;09c1 'Char' 4071 0090 ld $90 ;09c3 BRA 4072 00c5 ld $c5 4073 00cf ld $cf ;09c5 CALL 4074 003e ld $3e ;09c5 'PrintChar' 4075 0063 ld $63 ;09c7 POP 4076 00ff ld $ff ;09c8 RET 4077 002b ld $2b ;09c9 STW 4078 009d ld $9d ;09c9 'DrawNextDigit' 4079 00cd ld $cd ;09cb DEF 407a 00ef ld $ef 407b 0075 ld $75 ;09cd PUSH 407c 0059 ld $59 ;09ce LDI 407d 0020 ld $20 407e 002b ld $2b ;09d0 STW 407f 0032 ld $32 ;09d0 'Char' 4080 0011 ld $11 ;09d2 LDWI 4081 00e8 ld $e8 4082 0003 ld $03 4083 002b ld $2b ;09d5 STW 4084 009b ld $9b ;09d5 'Radix' 4085 00cf ld $cf ;09d7 CALL 4086 009d ld $9d ;09d7 'DrawNextDigit' 4087 0059 ld $59 ;09d9 LDI 4088 0064 ld $64 4089 002b ld $2b ;09db STW 408a 009b ld $9b ;09db 'Radix' 408b 00cf ld $cf ;09dd CALL 408c 009d ld $9d ;09dd 'DrawNextDigit' 408d 0059 ld $59 ;09df LDI 408e 000a ld $0a 408f 002b ld $2b ;09e1 STW 4090 009b ld $9b ;09e1 'Radix' 4091 00cf ld $cf ;09e3 CALL 4092 009d ld $9d ;09e3 'DrawNextDigit' 4093 0059 ld $59 ;09e5 LDI 4094 0030 ld $30 4095 002b ld $2b ;09e7 STW 4096 0032 ld $32 ;09e7 'Char' 4097 0059 ld $59 ;09e9 LDI 4098 0001 ld $01 4099 002b ld $2b ;09eb STW 409a 009b ld $9b ;09eb 'Radix' 409b 00cf ld $cf ;09ed CALL 409c 009d ld $9d ;09ed 'DrawNextDigit' 409d 0063 ld $63 ;09ef POP 409e 00ff ld $ff ;09f0 RET 409f 002b ld $2b ;09f1 STW 40a0 0099 ld $99 ;09f1 'DrawNumber4' 40a1 0093 ld $93 ;09f3 INC 40a2 001b ld $1b ;09f3 '_vLR'+1 40a3 00ff ld $ff ;09f5 RET 40a4 000a ld $0a ;| RAM segment address (high byte first) 40a5 00a0 ld $a0 ;| 40a6 0056 ld $56 ;| Length (1..256) 40a7 00cd ld $cd ;0aa0 DEF 40a8 00ba ld $ba 40a9 0075 ld $75 ;0aa2 PUSH 40aa 0011 ld $11 ;0aa3 LDWI 40ab 0074 ld $74 40ac 0008 ld $08 40ad 002b ld $2b ;0aa6 STW 40ae 003c ld $3c ;0aa6 'Pos' 40af 0059 ld $59 ;0aa8 LDI 40b0 0000 ld $00 40b1 002b ld $2b ;0aaa STW 40b2 0038 ld $38 ;0aaa 'BgColor' 40b3 00cd ld $cd ;0aac DEF 40b4 00b0 ld $b0 40b5 0048 ld $48 ;0aae 'H' 40b6 0049 ld $49 ;0aaf 'I' 40b7 0020 ld $20 ;0ab0 ' ' 40b8 0000 ld $00 ;0ab1 0 40b9 00cf ld $cf ;0ab2 CALL 40ba 0042 ld $42 ;0ab2 'PrintText' 40bb 0021 ld $21 ;0ab4 LDW 40bc 0030 ld $30 ;0ab4 'HighScore' 40bd 002b ld $2b ;0ab6 STW 40be 0054 ld $54 ;0ab6 'Value' 40bf 00cf ld $cf ;0ab8 CALL 40c0 0099 ld $99 ;0ab8 'DrawNumber4' 40c1 0063 ld $63 ;0aba POP 40c2 00ff ld $ff ;0abb RET 40c3 002b ld $2b ;0abc STW 40c4 0064 ld $64 ;0abc 'DrawHighScore' 40c5 00cd ld $cd ;0abe DEF 40c6 00ef ld $ef 40c7 002b ld $2b ;0ac0 STW 40c8 0034 ld $34 ;0ac0 'i' 40c9 0088 ld $88 ;0ac2 ORI 40ca 00ff ld $ff 40cb 008c ld $8c ;0ac4 XORI 40cc 00ff ld $ff 40cd 0088 ld $88 ;0ac6 ORI 40ce 00fa ld $fa 40cf 002b ld $2b ;0ac8 STW 40d0 0070 ld $70 ;0ac8 'p' 40d1 001a ld $1a ;0aca LD 40d2 0034 ld $34 ;0aca 'i' 40d3 002b ld $2b ;0acc STW 40d4 0034 ld $34 ;0acc 'i' 40d5 0059 ld $59 ;0ace LDI 40d6 0000 ld $00 40d7 00f0 ld $f0 ;0ad0 POKE 40d8 0070 ld $70 ;0ad0 'p' 40d9 0093 ld $93 ;0ad2 INC 40da 0070 ld $70 ;0ad2 'p' 40db 0059 ld $59 ;0ad4 LDI 40dc 0001 ld $01 40dd 00f0 ld $f0 ;0ad6 POKE 40de 0070 ld $70 ;0ad6 'p' 40df 0093 ld $93 ;0ad8 INC 40e0 0070 ld $70 ;0ad8 'p' 40e1 0011 ld $11 ;0ada LDWI 40e2 0000 ld $00 40e3 0009 ld $09 40e4 0099 ld $99 ;0add ADDW 40e5 0034 ld $34 ;0add 'i' 40e6 007f ld $7f ;0adf LUP 40e7 0000 ld $00 40e8 00f0 ld $f0 ;0ae1 POKE 40e9 0070 ld $70 ;0ae1 'p' 40ea 0093 ld $93 ;0ae3 INC 40eb 0070 ld $70 ;0ae3 'p' 40ec 0011 ld $11 ;0ae5 LDWI 40ed 0000 ld $00 40ee 0009 ld $09 40ef 0099 ld $99 ;0ae8 ADDW 40f0 0034 ld $34 ;0ae8 'i' 40f1 007f ld $7f ;0aea LUP 40f2 0001 ld $01 40f3 00f0 ld $f0 ;0aec POKE 40f4 0070 ld $70 ;0aec 'p' 40f5 0093 ld $93 ;0aee INC 40f6 0070 ld $70 ;0aee 'p' 40f7 00ff ld $ff ;0af0 RET 40f8 002b ld $2b ;0af1 STW 40f9 009f ld $9f ;0af1 'SetupChannel' 40fa 0093 ld $93 ;0af3 INC 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 001b ld $1b ;0af3 '_vLR'+1 4101 00ff ld $ff ;0af5 RET 4102 000b ld $0b ;| RAM segment address (high byte first) 4103 00a0 ld $a0 ;| 4104 004c ld $4c ;| Length (1..256) 4105 00cd ld $cd ;0ba0 DEF 4106 00c2 ld $c2 4107 0075 ld $75 ;0ba2 PUSH 4108 00e9 ld $e9 ;0ba3 LSLW 4109 002b ld $2b ;0ba4 STW 410a 006a ld $6a ;0ba4 'tmp' 410b 0011 ld $11 ;0ba6 LDWI 410c 0000 ld $00 410d 0001 ld $01 410e 00fa ld $fa ;0ba9 ORW 410f 006a ld $6a ;0ba9 'tmp' 4110 00cf ld $cf ;0bab CALL 4111 009f ld $9f ;0bab 'SetupChannel' 4112 0011 ld $11 ;0bad LDWI 4113 0000 ld $00 4114 0002 ld $02 4115 00fa ld $fa ;0bb0 ORW 4116 006a ld $6a ;0bb0 'tmp' 4117 00cf ld $cf ;0bb2 CALL 4118 009f ld $9f ;0bb2 'SetupChannel' 4119 0011 ld $11 ;0bb4 LDWI 411a 0000 ld $00 411b 0003 ld $03 411c 00fa ld $fa ;0bb7 ORW 411d 006a ld $6a ;0bb7 'tmp' 411e 00cf ld $cf ;0bb9 CALL 411f 009f ld $9f ;0bb9 'SetupChannel' 4120 0011 ld $11 ;0bbb LDWI 4121 0000 ld $00 4122 0004 ld $04 4123 00fa ld $fa ;0bbe ORW 4124 006a ld $6a ;0bbe 'tmp' 4125 00cf ld $cf ;0bc0 CALL 4126 009f ld $9f ;0bc0 'SetupChannel' 4127 0063 ld $63 ;0bc2 POP 4128 00ff ld $ff ;0bc3 RET 4129 002b ld $2b ;0bc4 STW 412a 007c ld $7c ;0bc4 'SetNote' 412b 00cd ld $cd ;0bc6 DEF 412c 00e5 ld $e5 412d 0075 ld $75 ;0bc8 PUSH 412e 0059 ld $59 ;0bc9 LDI 412f 0049 ld $49 4130 002b ld $2b ;0bcb STW 4131 00a1 ld $a1 ;0bcb 'j' 4132 0021 ld $21 ;0bcd LDW 4133 00a1 ld $a1 ;0bcd 'j' 4134 00cf ld $cf ;0bcf CALL 4135 007c ld $7c ;0bcf 'SetNote' 4136 0059 ld $59 ;0bd1 LDI 4137 0005 ld $05 4138 005e ld $5e ;0bd3 ST 4139 002c ld $2c 413a 001a ld $1a ;0bd5 LD 413b 002c ld $2c 413c 0035 ld $35 ;0bd7 BCC 413d 0072 ld $72 ;0bd8 NE 413e 00d3 ld $d3 413f 0021 ld $21 ;0bda LDW 4140 00a1 ld $a1 ;0bda 'j' 4141 00e6 ld $e6 ;0bdc SUBI 4142 0001 ld $01 4143 002b ld $2b ;0bde STW 4144 00a1 ld $a1 ;0bde 'j' 4145 008c ld $8c ;0be0 XORI 4146 0030 ld $30 4147 0035 ld $35 ;0be2 BCC 4148 0072 ld $72 ;0be3 NE 4149 00cb ld $cb 414a 0063 ld $63 ;0be5 POP 414b 00ff ld $ff ;0be6 RET 414c 002b ld $2b ;0be7 STW 414d 0066 ld $66 ;0be7 'PlayGameOverSound' 414e 0093 ld $93 ;0be9 INC 414f 001b ld $1b ;0be9 '_vLR'+1 4150 00ff ld $ff ;0beb RET 4151 000c ld $0c ;| RAM segment address (high byte first) 4152 00a0 ld $a0 ;| 4153 0045 ld $45 ;| Length (1..256) 4154 00cd ld $cd ;0ca0 DEF 4155 00de ld $de 4156 0075 ld $75 ;0ca2 PUSH 4157 0011 ld $11 ;0ca3 LDWI 4158 0033 ld $33 4159 0045 ld $45 415a 002b ld $2b ;0ca6 STW 415b 0070 ld $70 ;0ca6 'p' 415c 002b ld $2b ;0ca8 STW 415d 003c ld $3c ;0ca8 'Pos' 415e 0059 ld $59 ;0caa LDI 415f 0018 ld $18 4160 002b ld $2b ;0cac STW 4161 003a ld $3a ;0cac 'Color' 4162 0021 ld $21 ;0cae LDW 4163 00a3 ld $a3 ;0cae 'Messages' 4164 00cf ld $cf ;0cb0 CALL 4165 0042 ld $42 ;0cb0 'PrintText' 4166 0059 ld $59 ;0cb2 LDI 4167 002d ld $2d 4168 00cf ld $cf ;0cb4 CALL 4169 0050 ld $50 ;0cb4 'Wait' 416a 0021 ld $21 ;0cb6 LDW 416b 0070 ld $70 ;0cb6 'p' 416c 002b ld $2b ;0cb8 STW 416d 003c ld $3c ;0cb8 'Pos' 416e 0059 ld $59 ;0cba LDI 416f 003e ld $3e 4170 002b ld $2b ;0cbc STW 4171 003a ld $3a ;0cbc 'Color' 4172 0021 ld $21 ;0cbe LDW 4173 0040 ld $40 ;0cbe 'Text' 4174 00cf ld $cf ;0cc0 CALL 4175 0042 ld $42 ;0cc0 'PrintText' 4176 0059 ld $59 ;0cc2 LDI 4177 002d ld $2d 4178 00cf ld $cf ;0cc4 CALL 4179 0050 ld $50 ;0cc4 'Wait' 417a 0021 ld $21 ;0cc6 LDW 417b 0070 ld $70 ;0cc6 'p' 417c 002b ld $2b ;0cc8 STW 417d 003c ld $3c ;0cc8 'Pos' 417e 0059 ld $59 ;0cca LDI 417f 000f ld $0f 4180 002b ld $2b ;0ccc STW 4181 003a ld $3a ;0ccc 'Color' 4182 0021 ld $21 ;0cce LDW 4183 0040 ld $40 ;0cce 'Text' 4184 00cf ld $cf ;0cd0 CALL 4185 0042 ld $42 ;0cd0 'PrintText' 4186 0059 ld $59 ;0cd2 LDI 4187 002d ld $2d 4188 00cf ld $cf ;0cd4 CALL 4189 0050 ld $50 ;0cd4 'Wait' 418a 0021 ld $21 ;0cd6 LDW 418b 0070 ld $70 ;0cd6 'p' 418c 002b ld $2b ;0cd8 STW 418d 003c ld $3c ;0cd8 'Pos' 418e 0021 ld $21 ;0cda LDW 418f 0040 ld $40 ;0cda 'Text' 4190 00cf ld $cf ;0cdc CALL 4191 0042 ld $42 ;0cdc 'PrintText' 4192 0063 ld $63 ;0cde POP 4193 00ff ld $ff ;0cdf RET 4194 002b ld $2b ;0ce0 STW 4195 0095 ld $95 ;0ce0 'GetReady' 4196 0093 ld $93 ;0ce2 INC 4197 001b ld $1b ;0ce2 '_vLR'+1 4198 00ff ld $ff ;0ce4 RET 4199 000d ld $0d ;| RAM segment address (high byte first) 419a 00a0 ld $a0 ;| 419b 0046 ld $46 ;| Length (1..256) 419c 00cd ld $cd ;0da0 DEF 419d 00df ld $df 419e 0021 ld $21 ;0da2 LDW 419f 0074 ld $74 ;0da2 'stepU' 41a0 002b ld $2b ;0da4 STW 41a1 006a ld $6a ;0da4 'tmp' 41a2 001a ld $1a ;0da6 LD 41a3 0011 ld $11 41a4 008c ld $8c ;0da8 XORI 41a5 00fe ld $fe 41a6 0035 ld $35 ;0daa BCC 41a7 0072 ld $72 ;0dab NE 41a8 00af ld $af 41a9 0059 ld $59 ;0dad LDI 41aa 0002 ld $02 41ab 002b ld $2b ;0daf STW 41ac 006a ld $6a ;0daf 'tmp' 41ad 001a ld $1a ;0db1 LD 41ae 0011 ld $11 41af 008c ld $8c ;0db3 XORI 41b0 00fd ld $fd 41b1 0035 ld $35 ;0db5 BCC 41b2 0072 ld $72 ;0db6 NE 41b3 00bb ld $bb 41b4 0011 ld $11 ;0db8 LDWI 41b5 00fe ld $fe 41b6 00ff ld $ff 41b7 002b ld $2b ;0dbb STW 41b8 006a ld $6a ;0dbb 'tmp' 41b9 001a ld $1a ;0dbd LD 41ba 0011 ld $11 41bb 008c ld $8c ;0dbf XORI 41bc 00fb ld $fb 41bd 0035 ld $35 ;0dc1 BCC 41be 0072 ld $72 ;0dc2 NE 41bf 00c7 ld $c7 41c0 0011 ld $11 ;0dc4 LDWI 41c1 0000 ld $00 41c2 0002 ld $02 41c3 002b ld $2b ;0dc7 STW 41c4 006a ld $6a ;0dc7 'tmp' 41c5 001a ld $1a ;0dc9 LD 41c6 0011 ld $11 41c7 008c ld $8c ;0dcb XORI 41c8 00f7 ld $f7 41c9 0035 ld $35 ;0dcd BCC 41ca 0072 ld $72 ;0dce NE 41cb 00d3 ld $d3 41cc 0011 ld $11 ;0dd0 LDWI 41cd 0000 ld $00 41ce 00fe ld $fe 41cf 002b ld $2b ;0dd3 STW 41d0 006a ld $6a ;0dd3 'tmp' 41d1 0021 ld $21 ;0dd5 LDW 41d2 006a ld $6a ;0dd5 'tmp' 41d3 0099 ld $99 ;0dd7 ADDW 41d4 0074 ld $74 ;0dd7 'stepU' 41d5 0035 ld $35 ;0dd9 BCC 41d6 003f ld $3f ;0dda EQ 41d7 00de ld $de 41d8 0021 ld $21 ;0ddc LDW 41d9 006a ld $6a ;0ddc 'tmp' 41da 002b ld $2b ;0dde STW 41db 0074 ld $74 ;0dde 'stepU' 41dc 00ff ld $ff ;0de0 RET 41dd 002b ld $2b ;0de1 STW 41de 0062 ld $62 ;0de1 'PlayerControl' 41df 0093 ld $93 ;0de3 INC 41e0 001b ld $1b ;0de3 '_vLR'+1 41e1 00ff ld $ff ;0de5 RET 41e2 000e ld $0e ;| RAM segment address (high byte first) 41e3 00a0 ld $a0 ;| 41e4 004d ld $4d ;| Length (1..256) 41e5 00cd ld $cd ;0ea0 DEF 41e6 00cb ld $cb 41e7 0020 ld $20 ;0ea2 ' ' 41e8 0045 ld $45 ;0ea3 'E' 41e9 0041 ld $41 ;0ea4 'A' 41ea 0054 ld $54 ;0ea5 'T' 41eb 0020 ld $20 ;0ea6 ' ' 41ec 0046 ld $46 ;0ea7 'F' 41ed 004f ld $4f ;0ea8 'O' 41ee 004f ld $4f ;0ea9 'O' 41ef 0044 ld $44 ;0eaa 'D' 41f0 0000 ld $00 ;0eab 0 41f1 004e ld $4e ;0eac 'N' 41f2 004f ld $4f ;0ead 'O' 41f3 0054 ld $54 ;0eae 'T' 41f4 0020 ld $20 ;0eaf ' ' 41f5 0050 ld $50 ;0eb0 'P' 41f6 004f ld $4f ;0eb1 'O' 41f7 0049 ld $49 ;0eb2 'I' 41f8 0053 ld $53 ;0eb3 'S' 41f9 004f ld $4f ;0eb4 'O' 41fa 004e ld $4e ;0eb5 'N' 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 0000 ld $00 ;0eb6 0 4201 0047 ld $47 ;0eb7 'G' 4202 0045 ld $45 ;0eb8 'E' 4203 0054 ld $54 ;0eb9 'T' 4204 0020 ld $20 ;0eba ' ' 4205 0052 ld $52 ;0ebb 'R' 4206 0045 ld $45 ;0ebc 'E' 4207 0041 ld $41 ;0ebd 'A' 4208 0044 ld $44 ;0ebe 'D' 4209 0059 ld $59 ;0ebf 'Y' 420a 0021 ld $21 ;0ec0 '!' 420b 0000 ld $00 ;0ec1 0 420c 0020 ld $20 ;0ec2 ' ' 420d 0020 ld $20 ;0ec3 ' ' 420e 0020 ld $20 ;0ec4 ' ' 420f 0020 ld $20 ;0ec5 ' ' 4210 0020 ld $20 ;0ec6 ' ' 4211 0020 ld $20 ;0ec7 ' ' 4212 0020 ld $20 ;0ec8 ' ' 4213 0020 ld $20 ;0ec9 ' ' 4214 0020 ld $20 ;0eca ' ' 4215 0020 ld $20 ;0ecb ' ' 4216 0000 ld $00 ;0ecc 0 4217 002b ld $2b ;0ecd STW 4218 00a3 ld $a3 ;0ecd 'Messages' 4219 00cf ld $cf ;0ecf CALL 421a 006e ld $6e ;0ecf 'Intro' 421b 0059 ld $59 ;0ed1 LDI 421c 0049 ld $49 421d 00cf ld $cf ;0ed3 CALL 421e 007c ld $7c ;0ed3 'SetNote' 421f 00cf ld $cf ;0ed5 CALL 4220 008f ld $8f ;0ed5 'SetupGame' 4221 00cf ld $cf ;0ed7 CALL 4222 008d ld $8d ;0ed7 'RunGame' 4223 0059 ld $59 ;0ed9 LDI 4224 0078 ld $78 4225 005e ld $5e ;0edb ST 4226 002c ld $2c 4227 0059 ld $59 ;0edd LDI 4228 0007 ld $07 4229 002b ld $2b ;0edf STW 422a 003a ld $3a ;0edf 'Color' 422b 0021 ld $21 ;0ee1 LDW 422c 0058 ld $58 ;0ee1 'Head' 422d 00cf ld $cf ;0ee3 CALL 422e 005a ld $5a ;0ee3 'DrawBlock' 422f 00cf ld $cf ;0ee5 CALL 4230 0068 ld $68 ;0ee5 'GameOver' 4231 0059 ld $59 ;0ee7 LDI 4232 003c ld $3c 4233 00cf ld $cf ;0ee9 CALL 4234 0050 ld $50 ;0ee9 'Wait' 4235 0090 ld $90 ;0eeb BRA 4236 00d3 ld $d3 4237 0000 ld $00 ;End of Apps/Snake/Snake_v3.gcl, size 1834 ;+-----------------------------------+ ;| SYS_Racer_v1.py | ;+-----------------------------------+ SYS_Racer_v1: SYS_RacerUpdateVideoX_40: 4238 1126 ld [$26],x 4239 1527 ld [$27],y 423a 0d00 ld [y,x] 423b c21d st [$1d] 423c a128 suba [$28] 423d 1124 ld [$24],x 423e 1525 ld [$25],y 423f ce00 st [y,x] 4240 0124 ld [$24] 4241 a004 suba $04 4242 c224 st [$24] 4243 011d ld [$1d] 4244 c228 st [$28] 4245 0126 ld [$26] 4246 8001 adda $01 4247 c226 st [$26] 4248 ec4c bne .sysRacer0 4249 0116 ld [$16] 424a fc4e bra .sysRacer1 424b 0200 nop .sysRacer0: 424c a002 suba $02 424d c216 st [$16] .sysRacer1: 424e 1403 ld $03,y 424f e0cb jmp y,$cb 4250 00ec ld $ec SYS_RacerUpdateVideoY_40: 4251 0127 ld [$27] 4252 2008 anda $08 4253 ec56 bne $4256 4254 fc57 bra $4257 4255 0000 ld $00 4256 0001 ld $01 4257 c21d st [$1d] 4258 1525 ld [$25],y 4259 0124 ld [$24] 425a 8002 adda $02 425b d224 st [$24],x 425c 60ee xora $ee 425d c218 st [$18] 425e c219 st [$19] 425f 0126 ld [$26] 4260 20fe anda $fe 4261 811d adda [$1d] 4262 ce00 st [y,x] 4263 0126 ld [$26] 4264 8001 adda $01 4265 c226 st [$26] 4266 1403 ld $03,y 4267 e0cb jmp y,$cb 4268 00ec ld $ec ;End of SYS_Racer_v1.py, size 49 ;+-----------------------------------+ ;| Apps/Racer/Horizon-256x16.rgb | ;+-----------------------------------+ 4269 dc53 st $53,[y,x++] ;'S' 426a dc6e st $6e,[y,x++] ;'n' 426b dc61 st $61,[y,x++] ;'a' 426c dc6b st $6b,[y,x++] ;'k' 426d dc65 st $65,[y,x++] ;'e' 426e dc00 st $00,[y,x++] ;'\x00' 426f dc00 st $00,[y,x++] ;'\x00' 4270 dc00 st $00,[y,x++] ;'\x00' 4271 000e ld $0e 4272 c218 st [$18] 4273 003b ld $3b 4274 14f7 ld $f7,y 4275 e085 jmp y,$85 4276 c219 st [$19] zippedRacerHorizon: 4277 0041 ld $41 4278 0000 ld $00 4279 00c3 ld $c3 427a 0030 ld $30 427b 000c ld $0c 427c 00c3 ld $c3 427d 0030 ld $30 427e 000c ld $0c 427f 00c3 ld $c3 4280 0030 ld $30 4281 000c ld $0c 4282 00c3 ld $c3 4283 0030 ld $30 4284 000c ld $0c 4285 00c3 ld $c3 4286 0030 ld $30 4287 000c ld $0c 4288 00c3 ld $c3 4289 0030 ld $30 428a 000c ld $0c 428b 00c3 ld $c3 428c 0030 ld $30 428d 000c ld $0c 428e 00c3 ld $c3 428f 0000 ld $00 4290 000c ld $0c 4291 00c3 ld $c3 4292 0030 ld $30 4293 000c ld $0c 4294 00c3 ld $c3 4295 0030 ld $30 4296 00fc ld $fc 4297 0002 ld $02 4298 0030 ld $30 4299 000c ld $0c 429a 00c3 ld $c3 429b 0030 ld $30 429c 000c ld $0c 429d 00c3 ld $c3 429e 0030 ld $30 429f 000c ld $0c 42a0 00c3 ld $c3 42a1 0030 ld $30 42a2 000c ld $0c 42a3 00c3 ld $c3 42a4 0030 ld $30 42a5 000c ld $0c 42a6 00c3 ld $c3 42a7 0030 ld $30 42a8 000c ld $0c 42a9 00c3 ld $c3 42aa 0030 ld $30 42ab 000c ld $0c 42ac 00c3 ld $c3 42ad 0030 ld $30 42ae 000c ld $0c 42af 00c3 ld $c3 42b0 0030 ld $30 42b1 000c ld $0c 42b2 00c3 ld $c3 42b3 0030 ld $30 42b4 000c ld $0c 42b5 00c3 ld $c3 42b6 0030 ld $30 42b7 000c ld $0c 42b8 00c3 ld $c3 42b9 0030 ld $30 42ba 000c ld $0c 42bb 00c3 ld $c3 42bc 0030 ld $30 42bd 000c ld $0c 42be 00c3 ld $c3 42bf 0030 ld $30 42c0 000c ld $0c 42c1 00c3 ld $c3 42c2 0030 ld $30 42c3 000c ld $0c 42c4 00c3 ld $c3 42c5 0030 ld $30 42c6 000c ld $0c 42c7 00c3 ld $c3 42c8 0030 ld $30 42c9 000c ld $0c 42ca 00c3 ld $c3 42cb 0013 ld $13 42cc 000c ld $0c 42cd 00c3 ld $c3 42ce 0030 ld $30 42cf 000c ld $0c 42d0 00c3 ld $c3 42d1 002a ld $2a 42d2 000c ld $0c 42d3 00c3 ld $c3 42d4 0030 ld $30 42d5 000c ld $0c 42d6 00c3 ld $c3 42d7 0030 ld $30 42d8 000c ld $0c 42d9 00c3 ld $c3 42da 0030 ld $30 42db 000c ld $0c 42dc 00c3 ld $c3 42dd 0030 ld $30 42de 000c ld $0c 42df 00c3 ld $c3 42e0 0030 ld $30 42e1 000c ld $0c 42e2 00c3 ld $c3 42e3 0030 ld $30 42e4 000c ld $0c 42e5 00c3 ld $c3 42e6 0030 ld $30 42e7 000c ld $0c 42e8 00c3 ld $c3 42e9 0030 ld $30 42ea 000c ld $0c 42eb 00c3 ld $c3 42ec 0030 ld $30 42ed 000c ld $0c 42ee 00c3 ld $c3 42ef 0030 ld $30 42f0 000c ld $0c 42f1 00c3 ld $c3 42f2 0030 ld $30 42f3 000c ld $0c 42f4 00c3 ld $c3 42f5 0030 ld $30 42f6 000c ld $0c 42f7 00ab ld $ab 42f8 002a ld $2a 42f9 000c ld $0c 42fa 00c3 ld $c3 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 0030 ld $30 4301 000c ld $0c 4302 00c3 ld $c3 4303 0030 ld $30 4304 000c ld $0c 4305 00c3 ld $c3 4306 0030 ld $30 4307 000c ld $0c 4308 00c3 ld $c3 4309 0030 ld $30 430a 000c ld $0c 430b 00c3 ld $c3 430c 00f0 ld $f0 430d 000f ld $0f 430e 00c3 ld $c3 430f 0030 ld $30 4310 000c ld $0c 4311 00c3 ld $c3 4312 00f0 ld $f0 4313 000f ld $0f 4314 00c3 ld $c3 4315 0030 ld $30 4316 000c ld $0c 4317 00c3 ld $c3 4318 003f ld $3f 4319 000c ld $0c 431a 00c3 ld $c3 431b 0030 ld $30 431c 000c ld $0c 431d 00c3 ld $c3 431e 0030 ld $30 431f 000c ld $0c 4320 00c3 ld $c3 4321 0030 ld $30 4322 000c ld $0c 4323 00c3 ld $c3 4324 0030 ld $30 4325 000c ld $0c 4326 00c3 ld $c3 4327 0030 ld $30 4328 000c ld $0c 4329 00c3 ld $c3 432a 0030 ld $30 432b 000c ld $0c 432c 00c3 ld $c3 432d 0030 ld $30 432e 000c ld $0c 432f 00c3 ld $c3 4330 0015 ld $15 4331 000c ld $0c 4332 00c3 ld $c3 4333 0030 ld $30 4334 000c ld $0c 4335 00c3 ld $c3 4336 0030 ld $30 4337 000c ld $0c 4338 00c3 ld $c3 4339 0030 ld $30 433a 001c ld $1c 433b 0004 ld $04 433c 006b ld $6b 433d 0000 ld $00 433e 00c3 ld $c3 433f 0030 ld $30 4340 000c ld $0c 4341 00c3 ld $c3 4342 0030 ld $30 4343 000c ld $0c 4344 00c3 ld $c3 4345 0030 ld $30 4346 000c ld $0c 4347 00c3 ld $c3 4348 0030 ld $30 4349 000c ld $0c 434a 00c3 ld $c3 434b 0030 ld $30 434c 000c ld $0c 434d 00c3 ld $c3 434e 0030 ld $30 434f 000c ld $0c 4350 00c3 ld $c3 4351 0030 ld $30 4352 000c ld $0c 4353 00c3 ld $c3 4354 003f ld $3f 4355 0000 ld $00 4356 00c3 ld $c3 4357 0030 ld $30 4358 000c ld $0c 4359 00c3 ld $c3 435a 00f0 ld $f0 435b 000f ld $0f 435c 00c0 ld $c0 435d 0030 ld $30 435e 000c ld $0c 435f 00c3 ld $c3 4360 0030 ld $30 4361 000c ld $0c 4362 00c3 ld $c3 4363 0030 ld $30 4364 000c ld $0c 4365 00c3 ld $c3 4366 0030 ld $30 4367 000c ld $0c 4368 00c3 ld $c3 4369 0030 ld $30 436a 000c ld $0c 436b 00c3 ld $c3 436c 0030 ld $30 436d 000c ld $0c 436e 00c3 ld $c3 436f 0030 ld $30 4370 000c ld $0c 4371 00c3 ld $c3 4372 0030 ld $30 4373 000c ld $0c 4374 00c3 ld $c3 4375 0030 ld $30 4376 000c ld $0c 4377 00c3 ld $c3 4378 0030 ld $30 4379 000c ld $0c 437a 00c3 ld $c3 437b 0030 ld $30 437c 000c ld $0c 437d 00c3 ld $c3 437e 0030 ld $30 437f 000c ld $0c 4380 00c3 ld $c3 4381 0030 ld $30 4382 000c ld $0c 4383 00c3 ld $c3 4384 0030 ld $30 4385 000c ld $0c 4386 00c3 ld $c3 4387 0030 ld $30 4388 000c ld $0c 4389 00c3 ld $c3 438a 0030 ld $30 438b 000c ld $0c 438c 00c3 ld $c3 438d 0030 ld $30 438e 000c ld $0c 438f 00c3 ld $c3 4390 002a ld $2a 4391 000c ld $0c 4392 00c3 ld $c3 4393 0030 ld $30 4394 000c ld $0c 4395 00ab ld $ab 4396 002a ld $2a 4397 000c ld $0c 4398 00c3 ld $c3 4399 0030 ld $30 439a 000c ld $0c 439b 00c3 ld $c3 439c 0030 ld $30 439d 000c ld $0c 439e 00c3 ld $c3 439f 0030 ld $30 43a0 000c ld $0c 43a1 00c3 ld $c3 43a2 0030 ld $30 43a3 000c ld $0c 43a4 00c3 ld $c3 43a5 00ff ld $ff 43a6 00fb ld $fb 43a7 00bf ld $bf 43a8 003f ld $3f 43a9 000c ld $0c 43aa 00c3 ld $c3 43ab 0030 ld $30 43ac 000c ld $0c 43ad 00c3 ld $c3 43ae 0030 ld $30 43af 000c ld $0c 43b0 00c3 ld $c3 43b1 0030 ld $30 43b2 000c ld $0c 43b3 00c3 ld $c3 43b4 0030 ld $30 43b5 000c ld $0c 43b6 00c3 ld $c3 43b7 0030 ld $30 43b8 000c ld $0c 43b9 00c3 ld $c3 43ba 0030 ld $30 43bb 00ac ld $ac 43bc 0056 ld $56 43bd 0095 ld $95 43be 000a ld $0a 43bf 00c3 ld $c3 43c0 0030 ld $30 43c1 000c ld $0c 43c2 00c3 ld $c3 43c3 0030 ld $30 43c4 000c ld $0c 43c5 00c3 ld $c3 43c6 0030 ld $30 43c7 000c ld $0c 43c8 00c3 ld $c3 43c9 0030 ld $30 43ca 000c ld $0c 43cb 00c3 ld $c3 43cc 00f0 ld $f0 43cd 00ff ld $ff 43ce 00c3 ld $c3 43cf 0030 ld $30 43d0 000c ld $0c 43d1 00c3 ld $c3 43d2 00f0 ld $f0 43d3 00ff ld $ff 43d4 00c3 ld $c3 43d5 0030 ld $30 43d6 000c ld $0c 43d7 00c3 ld $c3 43d8 00ff ld $ff 43d9 000f ld $0f 43da 00c3 ld $c3 43db 0030 ld $30 43dc 000c ld $0c 43dd 00c3 ld $c3 43de 0030 ld $30 43df 000c ld $0c 43e0 00c3 ld $c3 43e1 0030 ld $30 43e2 000c ld $0c 43e3 00c3 ld $c3 43e4 0030 ld $30 43e5 000c ld $0c 43e6 00c3 ld $c3 43e7 0030 ld $30 43e8 000c ld $0c 43e9 00c3 ld $c3 43ea 0030 ld $30 43eb 000c ld $0c 43ec 00c3 ld $c3 43ed 0030 ld $30 43ee 000c ld $0c 43ef 00c3 ld $c3 43f0 0015 ld $15 43f1 000c ld $0c 43f2 00c3 ld $c3 43f3 0030 ld $30 43f4 000c ld $0c 43f5 00c3 ld $c3 43f6 0030 ld $30 43f7 000c ld $0c 43f8 00c3 ld $c3 43f9 0030 ld $30 43fa 001c ld $1c 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 00ac ld $ac 4401 0056 ld $56 4402 0060 ld $60 4403 0059 ld $59 4404 0030 ld $30 4405 000c ld $0c 4406 00c3 ld $c3 4407 0070 ld $70 4408 0055 ld $55 4409 00fd ld $fd 440a 0055 ld $55 440b 00f5 ld $f5 440c 0057 ld $57 440d 00d5 ld $d5 440e 005f ld $5f 440f 0055 ld $55 4410 007f ld $7f 4411 0055 ld $55 4412 00fd ld $fd 4413 0055 ld $55 4414 0005 ld $05 4415 00c3 ld $c3 4416 0030 ld $30 4417 000c ld $0c 4418 00c3 ld $c3 4419 00f0 ld $f0 441a 000b ld $0b 441b 00c0 ld $c0 441c 0030 ld $30 441d 000c ld $0c 441e 00c3 ld $c3 441f 002f ld $2f 4420 0000 ld $00 4421 00c3 ld $c3 4422 0030 ld $30 4423 000c ld $0c 4424 00c3 ld $c3 4425 0030 ld $30 4426 000c ld $0c 4427 00c3 ld $c3 4428 0030 ld $30 4429 000c ld $0c 442a 00c3 ld $c3 442b 0030 ld $30 442c 000c ld $0c 442d 00c3 ld $c3 442e 0030 ld $30 442f 000c ld $0c 4430 00c3 ld $c3 4431 0030 ld $30 4432 000c ld $0c 4433 00c3 ld $c3 4434 0030 ld $30 4435 000c ld $0c 4436 00c3 ld $c3 4437 0030 ld $30 4438 000c ld $0c 4439 00c3 ld $c3 443a 0030 ld $30 443b 000c ld $0c 443c 00c3 ld $c3 443d 0030 ld $30 443e 000c ld $0c 443f 00c3 ld $c3 4440 0030 ld $30 4441 000c ld $0c 4442 00c3 ld $c3 4443 0030 ld $30 4444 000c ld $0c 4445 00c3 ld $c3 4446 0030 ld $30 4447 000c ld $0c 4448 00c3 ld $c3 4449 0030 ld $30 444a 000c ld $0c 444b 00c3 ld $c3 444c 0030 ld $30 444d 000c ld $0c 444e 00c3 ld $c3 444f 0030 ld $30 4450 000c ld $0c 4451 00c3 ld $c3 4452 0030 ld $30 4453 000c ld $0c 4454 00c3 ld $c3 4455 002a ld $2a 4456 000c ld $0c 4457 00c3 ld $c3 4458 00b0 ld $b0 4459 00aa ld $aa 445a 00aa ld $aa 445b 002a ld $2a 445c 000c ld $0c 445d 00c3 ld $c3 445e 0030 ld $30 445f 000c ld $0c 4460 00c3 ld $c3 4461 0030 ld $30 4462 000c ld $0c 4463 00c3 ld $c3 4464 0030 ld $30 4465 000c ld $0c 4466 00c3 ld $c3 4467 0030 ld $30 4468 000c ld $0c 4469 00bf ld $bf 446a 0091 ld $91 446b 00f4 ld $f4 446c 0046 ld $46 446d 00d2 ld $d2 446e 000b ld $0b 446f 00c3 ld $c3 4470 0030 ld $30 4471 000c ld $0c 4472 00c3 ld $c3 4473 0030 ld $30 4474 000c ld $0c 4475 00c3 ld $c3 4476 0030 ld $30 4477 000c ld $0c 4478 00c3 ld $c3 4479 0030 ld $30 447a 000c ld $0c 447b 00c3 ld $c3 447c 0030 ld $30 447d 00ac ld $ac 447e 00c2 ld $c2 447f 00b0 ld $b0 4480 00aa ld $aa 4481 00aa ld $aa 4482 00aa ld $aa 4483 00aa ld $aa 4484 00c2 ld $c2 4485 00b0 ld $b0 4486 000a ld $0a 4487 00c3 ld $c3 4488 0030 ld $30 4489 000c ld $0c 448a 00c3 ld $c3 448b 0030 ld $30 448c 000c ld $0c 448d 00c3 ld $c3 448e 0030 ld $30 448f 000c ld $0c 4490 00c3 ld $c3 4491 0030 ld $30 4492 00ac ld $ac 4493 00fe ld $fe 4494 00ff ld $ff 4495 003f ld $3f 4496 00c0 ld $c0 4497 0030 ld $30 4498 00ac ld $ac 4499 00fe ld $fe 449a 00ff ld $ff 449b 003f ld $3f 449c 00c0 ld $c0 449d 00b0 ld $b0 449e 00fa ld $fa 449f 00ff ld $ff 44a0 00ff ld $ff 44a1 0000 ld $00 44a2 00c3 ld $c3 44a3 0030 ld $30 44a4 000c ld $0c 44a5 00c3 ld $c3 44a6 0030 ld $30 44a7 000c ld $0c 44a8 00c3 ld $c3 44a9 0030 ld $30 44aa 000c ld $0c 44ab 00c3 ld $c3 44ac 0030 ld $30 44ad 000c ld $0c 44ae 00c3 ld $c3 44af 0030 ld $30 44b0 000c ld $0c 44b1 00c3 ld $c3 44b2 0030 ld $30 44b3 000c ld $0c 44b4 0057 ld $57 44b5 0055 ld $55 44b6 0005 ld $05 44b7 00c3 ld $c3 44b8 0030 ld $30 44b9 000c ld $0c 44ba 00c3 ld $c3 44bb 0030 ld $30 44bc 000c ld $0c 44bd 00c3 ld $c3 44be 0096 ld $96 44bf 0015 ld $15 44c0 0058 ld $58 44c1 006b ld $6b 44c2 00b0 ld $b0 44c3 00ae ld $ae 44c4 0030 ld $30 44c5 000c ld $0c 44c6 00c3 ld $c3 44c7 00f0 ld $f0 44c8 00ff ld $ff 44c9 00ff ld $ff 44ca 00ff ld $ff * 12 times 44d4 000f ld $0f 44d5 00c3 ld $c3 44d6 0030 ld $30 44d7 000c ld $0c 44d8 00c3 ld $c3 44d9 0030 ld $30 44da 00fc ld $fc 44db 0003 ld $03 44dc 0030 ld $30 44dd 000c ld $0c 44de 00ff ld $ff 44df 0000 ld $00 44e0 000c ld $0c 44e1 00c3 ld $c3 44e2 0030 ld $30 44e3 000c ld $0c 44e4 00c3 ld $c3 44e5 0030 ld $30 44e6 00fc ld $fc 44e7 00bf ld $bf 44e8 0030 ld $30 44e9 000c ld $0c 44ea 00c3 ld $c3 44eb 0030 ld $30 44ec 000c ld $0c 44ed 00c3 ld $c3 44ee 0030 ld $30 44ef 000c ld $0c 44f0 00c3 ld $c3 44f1 0030 ld $30 44f2 000c ld $0c 44f3 00c3 ld $c3 44f4 0030 ld $30 44f5 000c ld $0c 44f6 00c3 ld $c3 44f7 0030 ld $30 44f8 000c ld $0c 44f9 00c3 ld $c3 44fa 0030 ld $30 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 000c ld $0c 4501 00c3 ld $c3 4502 0030 ld $30 4503 000c ld $0c 4504 00c3 ld $c3 4505 0030 ld $30 4506 000c ld $0c 4507 00c3 ld $c3 4508 0030 ld $30 4509 000c ld $0c 450a 00c3 ld $c3 450b 0030 ld $30 450c 000c ld $0c 450d 00c3 ld $c3 450e 0030 ld $30 450f 000c ld $0c 4510 00c3 ld $c3 4511 0030 ld $30 4512 000c ld $0c 4513 00c3 ld $c3 4514 0030 ld $30 4515 000c ld $0c 4516 00c3 ld $c3 4517 00f0 ld $f0 4518 00ff ld $ff 4519 00ab ld $ab 451a 00ff ld $ff 451b 000f ld $0f 451c 00c3 ld $c3 451d 006a ld $6a 451e 00a5 ld $a5 451f 0056 ld $56 4520 002a ld $2a 4521 000c ld $0c 4522 00c3 ld $c3 4523 0030 ld $30 4524 000c ld $0c 4525 00c3 ld $c3 4526 0030 ld $30 4527 000c ld $0c 4528 00c3 ld $c3 4529 0030 ld $30 452a 000c ld $0c 452b 00c3 ld $c3 452c 0030 ld $30 452d 00fc ld $fc 452e 004a ld $4a 452f 0030 ld $30 4530 00fc ld $fc 4531 00c2 ld $c2 4532 0070 ld $70 4533 00f4 ld $f4 4534 00c2 ld $c2 4535 0030 ld $30 4536 000c ld $0c 4537 00c3 ld $c3 4538 0030 ld $30 4539 000c ld $0c 453a 00c3 ld $c3 453b 0030 ld $30 453c 000c ld $0c 453d 00c3 ld $c3 453e 0030 ld $30 453f 000c ld $0c 4540 00c3 ld $c3 4541 00f0 ld $f0 4542 00af ld $af 4543 00fe ld $fe 4544 00aa ld $aa 4545 00aa ld $aa 4546 00aa ld $aa * 6 times 454a 00bf ld $bf 454b 00fa ld $fa 454c 00c3 ld $c3 454d 0030 ld $30 454e 000c ld $0c 454f 00c3 ld $c3 4550 0030 ld $30 4551 000c ld $0c 4552 00c3 ld $c3 4553 0030 ld $30 4554 000c ld $0c 4555 00c3 ld $c3 4556 00f0 ld $f0 4557 00ff ld $ff 4558 00ff ld $ff 4559 0030 ld $30 455a 000c ld $0c 455b 00c3 ld $c3 455c 00f0 ld $f0 455d 00ff ld $ff 455e 00ff ld $ff 455f 0030 ld $30 4560 000c ld $0c 4561 00c3 ld $c3 4562 00ff ld $ff 4563 00ff ld $ff 4564 00c3 ld $c3 4565 0030 ld $30 4566 000c ld $0c 4567 00c3 ld $c3 4568 0030 ld $30 4569 000c ld $0c 456a 00c3 ld $c3 456b 0030 ld $30 456c 000c ld $0c 456d 00c3 ld $c3 456e 0030 ld $30 456f 000c ld $0c 4570 00c3 ld $c3 4571 0030 ld $30 4572 000c ld $0c 4573 00c3 ld $c3 4574 0030 ld $30 4575 000c ld $0c 4576 00c3 ld $c3 4577 0030 ld $30 4578 000c ld $0c 4579 00c3 ld $c3 457a 0015 ld $15 457b 000c ld $0c 457c 00c3 ld $c3 457d 0030 ld $30 457e 000c ld $0c 457f 00c3 ld $c3 4580 0030 ld $30 4581 000c ld $0c 4582 00c3 ld $c3 4583 00eb ld $eb 4584 001a ld $1a 4585 00ac ld $ac 4586 0056 ld $56 4587 00b0 ld $b0 4588 00a6 ld $a6 4589 0030 ld $30 458a 000c ld $0c 458b 00c3 ld $c3 458c 0070 ld $70 458d 0055 ld $55 458e 00fd ld $fd 458f 0055 ld $55 4590 00f5 ld $f5 4591 0057 ld $57 4592 00d5 ld $d5 4593 005f ld $5f 4594 0055 ld $55 4595 007f ld $7f 4596 0055 ld $55 4597 00fd ld $fd 4598 0055 ld $55 4599 0005 ld $05 459a 00c3 ld $c3 459b 0030 ld $30 459c 000c ld $0c 459d 00c3 ld $c3 459e 0030 ld $30 459f 000c ld $0c 45a0 00bf ld $bf 45a1 0000 ld $00 45a2 00fc ld $fc 45a3 0002 ld $02 45a4 0030 ld $30 45a5 000c ld $0c 45a6 00c3 ld $c3 45a7 0030 ld $30 45a8 000c ld $0c 45a9 00c3 ld $c3 45aa 0030 ld $30 45ab 006c ld $6c 45ac 00fc ld $fc 45ad 0030 ld $30 45ae 000c ld $0c 45af 00c3 ld $c3 45b0 0030 ld $30 45b1 000c ld $0c 45b2 00c3 ld $c3 45b3 0030 ld $30 45b4 000c ld $0c 45b5 00c3 ld $c3 45b6 0030 ld $30 45b7 000c ld $0c 45b8 00c3 ld $c3 45b9 0030 ld $30 45ba 000c ld $0c 45bb 00c3 ld $c3 45bc 0030 ld $30 45bd 000c ld $0c 45be 00c3 ld $c3 45bf 0030 ld $30 45c0 000c ld $0c 45c1 00c3 ld $c3 45c2 0030 ld $30 45c3 000c ld $0c 45c4 00c3 ld $c3 45c5 0030 ld $30 45c6 000c ld $0c 45c7 00c3 ld $c3 45c8 0030 ld $30 45c9 000c ld $0c 45ca 00c3 ld $c3 45cb 0030 ld $30 45cc 000c ld $0c 45cd 00c3 ld $c3 45ce 0030 ld $30 45cf 000c ld $0c 45d0 00c3 ld $c3 45d1 0030 ld $30 45d2 000c ld $0c 45d3 00c3 ld $c3 45d4 0030 ld $30 45d5 000c ld $0c 45d6 00c3 ld $c3 45d7 00f0 ld $f0 45d8 00af ld $af 45d9 00fe ld $fe 45da 00ea ld $ea 45db 000f ld $0f 45dc 00ab ld $ab 45dd 00aa ld $aa 45de 00aa ld $aa 45df 00aa ld $aa 45e0 002a ld $2a 45e1 000c ld $0c 45e2 00c3 ld $c3 45e3 0030 ld $30 45e4 000c ld $0c 45e5 00c3 ld $c3 45e6 0030 ld $30 45e7 000c ld $0c 45e8 00c3 ld $c3 45e9 0030 ld $30 45ea 000c ld $0c 45eb 00c3 ld $c3 45ec 00f0 ld $f0 45ed 001b ld $1b 45ee 00bd ld $bd 45ef 0030 ld $30 45f0 00fc ld $fc 45f1 00c2 ld $c2 45f2 00f0 ld $f0 45f3 002b ld $2b 45f4 00bd ld $bd 45f5 0030 ld $30 45f6 000c ld $0c 45f7 00c3 ld $c3 45f8 0030 ld $30 45f9 000c ld $0c 45fa 00c3 ld $c3 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 0030 ld $30 4601 000c ld $0c 4602 00c3 ld $c3 4603 0030 ld $30 4604 000c ld $0c 4605 00c3 ld $c3 4606 00f0 ld $f0 4607 00af ld $af 4608 00ab ld $ab 4609 0095 ld $95 460a 005a ld $5a 460b 0055 ld $55 460c 006a ld $6a 460d 00a5 ld $a5 460e 0056 ld $56 460f 00aa ld $aa 4610 00fe ld $fe 4611 00c3 ld $c3 4612 0030 ld $30 4613 000c ld $0c 4614 00c3 ld $c3 4615 0030 ld $30 4616 000c ld $0c 4617 00c3 ld $c3 4618 0030 ld $30 4619 000c ld $0c 461a 00c3 ld $c3 461b 00ff ld $ff 461c 00af ld $af 461d 00fe ld $fe 461e 0030 ld $30 461f 000c ld $0c 4620 00c3 ld $c3 4621 00ff ld $ff 4622 00af ld $af 4623 00fe ld $fe 4624 0030 ld $30 4625 000c ld $0c 4626 00ff ld $ff 4627 00bf ld $bf 4628 00fa ld $fa 4629 00c3 ld $c3 462a 0030 ld $30 462b 000c ld $0c 462c 00c3 ld $c3 462d 0030 ld $30 462e 000c ld $0c 462f 00c3 ld $c3 4630 0030 ld $30 4631 000c ld $0c 4632 00c3 ld $c3 4633 0030 ld $30 4634 000c ld $0c 4635 00c3 ld $c3 4636 0030 ld $30 4637 000c ld $0c 4638 00c3 ld $c3 4639 0030 ld $30 463a 000c ld $0c 463b 00c3 ld $c3 463c 0030 ld $30 463d 000c ld $0c 463e 00ab ld $ab 463f 0095 ld $95 4640 000a ld $0a 4641 00c3 ld $c3 4642 0030 ld $30 4643 000c ld $0c 4644 00c3 ld $c3 4645 0030 ld $30 4646 000c ld $0c 4647 00c3 ld $c3 4648 00e9 ld $e9 4649 001a ld $1a 464a 0058 ld $58 464b 0041 ld $41 464c 00b0 ld $b0 464d 00ae ld $ae 464e 0030 ld $30 464f 000c ld $0c 4650 00c3 ld $c3 4651 00b0 ld $b0 4652 00ae ld $ae 4653 00fe ld $fe 4654 00aa ld $aa 4655 00fe ld $fe 4656 00ab ld $ab 4657 00ea ld $ea 4658 00af ld $af 4659 00ab ld $ab 465a 00bf ld $bf 465b 00aa ld $aa 465c 00ff ld $ff 465d 00aa ld $aa 465e 000e ld $0e 465f 00c3 ld $c3 4660 0030 ld $30 4661 000c ld $0c 4662 00c3 ld $c3 4663 0030 ld $30 4664 000c ld $0c 4665 00c3 ld $c3 4666 007f ld $7f 4667 0005 ld $05 4668 00c0 ld $c0 4669 0030 ld $30 466a 000c ld $0c 466b 00c3 ld $c3 466c 0030 ld $30 466d 000c ld $0c 466e 00c3 ld $c3 466f 0030 ld $30 4670 00bc ld $bc 4671 00bc ld $bc 4672 0030 ld $30 4673 000c ld $0c 4674 00c3 ld $c3 4675 0030 ld $30 4676 000c ld $0c 4677 00c3 ld $c3 4678 0030 ld $30 4679 000c ld $0c 467a 00c3 ld $c3 467b 0030 ld $30 467c 000c ld $0c 467d 00c3 ld $c3 467e 0030 ld $30 467f 000c ld $0c 4680 00c3 ld $c3 4681 0030 ld $30 4682 000c ld $0c 4683 00c3 ld $c3 4684 0030 ld $30 4685 000c ld $0c 4686 00c3 ld $c3 4687 0030 ld $30 4688 000c ld $0c 4689 00c3 ld $c3 468a 0030 ld $30 468b 000c ld $0c 468c 00c3 ld $c3 468d 0030 ld $30 468e 000c ld $0c 468f 00c3 ld $c3 4690 0030 ld $30 4691 000c ld $0c 4692 00c3 ld $c3 4693 0030 ld $30 4694 000c ld $0c 4695 00c3 ld $c3 4696 0030 ld $30 4697 000c ld $0c 4698 00c3 ld $c3 4699 0030 ld $30 469a 000c ld $0c 469b 00c3 ld $c3 469c 00b0 ld $b0 469d 00fa ld $fa 469e 00ab ld $ab 469f 00bf ld $bf 46a0 000a ld $0a 46a1 00ab ld $ab 46a2 0095 ld $95 46a3 005a ld $5a 46a4 00a9 ld $a9 46a5 002a ld $2a 46a6 000c ld $0c 46a7 00c3 ld $c3 46a8 0012 ld $12 46a9 005c ld $5c 46aa 00c2 ld $c2 46ab 0030 ld $30 46ac 000c ld $0c 46ad 00c3 ld $c3 46ae 0030 ld $30 46af 000c ld $0c 46b0 00c3 ld $c3 46b1 00bf ld $bf 46b2 0004 ld $04 46b3 00c3 ld $c3 46b4 002f ld $2f 46b5 00fc ld $fc 46b6 00c2 ld $c2 46b7 002f ld $2f 46b8 000c ld $0c 46b9 0047 ld $47 46ba 003f ld $3f 46bb 000c ld $0c 46bc 00c3 ld $c3 46bd 0030 ld $30 46be 000c ld $0c 46bf 00c3 ld $c3 46c0 0030 ld $30 46c1 000c ld $0c 46c2 00c3 ld $c3 46c3 0030 ld $30 46c4 000c ld $0c 46c5 00c3 ld $c3 46c6 00b0 ld $b0 46c7 00aa ld $aa 46c8 00aa ld $aa 46c9 0095 ld $95 46ca 005a ld $5a 46cb 00a9 ld $a9 46cc 006a ld $6a 46cd 00a5 ld $a5 46ce 0056 ld $56 46cf 00aa ld $aa 46d0 00aa ld $aa 46d1 00c2 ld $c2 46d2 0030 ld $30 46d3 000c ld $0c 46d4 00c3 ld $c3 46d5 0030 ld $30 46d6 000c ld $0c 46d7 00c3 ld $c3 46d8 0030 ld $30 46d9 000c ld $0c 46da 000f ld $0f 46db 003f ld $3f 46dc 00ac ld $ac 46dd 00fe ld $fe 46de 0030 ld $30 46df 000c ld $0c 46e0 000f ld $0f 46e1 003f ld $3f 46e2 00ac ld $ac 46e3 00fe ld $fe 46e4 0030 ld $30 46e5 003c ld $3c 46e6 00fc ld $fc 46e7 00b0 ld $b0 46e8 00fa ld $fa 46e9 00c3 ld $c3 46ea 0030 ld $30 46eb 000c ld $0c 46ec 00c3 ld $c3 46ed 0030 ld $30 46ee 000c ld $0c 46ef 00c3 ld $c3 46f0 0030 ld $30 46f1 000c ld $0c 46f2 00c3 ld $c3 46f3 0030 ld $30 46f4 000c ld $0c 46f5 00c3 ld $c3 46f6 0030 ld $30 46f7 000c ld $0c 46f8 00c3 ld $c3 46f9 0030 ld $30 46fa 000c ld $0c 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 00c3 ld $c3 4701 0030 ld $30 4702 000c ld $0c 4703 00c3 ld $c3 4704 0015 ld $15 4705 000c ld $0c 4706 00c3 ld $c3 4707 0030 ld $30 4708 000c ld $0c 4709 00c3 ld $c3 470a 0030 ld $30 470b 000c ld $0c 470c 00c3 ld $c3 470d 00eb ld $eb 470e 001a ld $1a 470f 0004 ld $04 4710 0069 ld $69 4711 00b0 ld $b0 4712 00a6 ld $a6 4713 0030 ld $30 4714 000c ld $0c 4715 00c3 ld $c3 4716 0070 ld $70 4717 0055 ld $55 4718 00fd ld $fd 4719 0055 ld $55 471a 00f5 ld $f5 471b 0057 ld $57 471c 00d5 ld $d5 471d 005f ld $5f 471e 0055 ld $55 471f 007f ld $7f 4720 0055 ld $55 4721 00fd ld $fd 4722 0055 ld $55 4723 0005 ld $05 4724 00c3 ld $c3 4725 0030 ld $30 4726 000c ld $0c 4727 00c3 ld $c3 4728 0030 ld $30 4729 000c ld $0c 472a 00c3 ld $c3 472b 0030 ld $30 472c 0050 ld $50 472d 00fd ld $fd 472e 0030 ld $30 472f 000c ld $0c 4730 00c3 ld $c3 4731 0030 ld $30 4732 000c ld $0c 4733 00c3 ld $c3 4734 0030 ld $30 4735 006c ld $6c 4736 00fc ld $fc 4737 0030 ld $30 4738 000c ld $0c 4739 00c3 ld $c3 473a 0030 ld $30 473b 000c ld $0c 473c 00c3 ld $c3 473d 0030 ld $30 473e 000c ld $0c 473f 00c3 ld $c3 4740 0030 ld $30 4741 000c ld $0c 4742 00c3 ld $c3 4743 0030 ld $30 4744 000c ld $0c 4745 00c3 ld $c3 4746 0030 ld $30 4747 000c ld $0c 4748 00c3 ld $c3 4749 0030 ld $30 474a 000c ld $0c 474b 00c3 ld $c3 474c 0030 ld $30 474d 000c ld $0c 474e 00c3 ld $c3 474f 0030 ld $30 4750 000c ld $0c 4751 00c3 ld $c3 4752 0030 ld $30 4753 000c ld $0c 4754 00c3 ld $c3 4755 0030 ld $30 4756 000c ld $0c 4757 00c3 ld $c3 4758 0030 ld $30 4759 000c ld $0c 475a 00c3 ld $c3 475b 0030 ld $30 475c 000c ld $0c 475d 00c3 ld $c3 475e 0030 ld $30 475f 000c ld $0c 4760 00c3 ld $c3 4761 0070 ld $70 4762 00a5 ld $a5 4763 00fe ld $fe 4764 00ea ld $ea 4765 000f ld $0f 4766 00ab ld $ab 4767 006a ld $6a 4768 00a5 ld $a5 4769 0056 ld $56 476a 002a ld $2a 476b 000c ld $0c 476c 004b ld $4b 476d 0092 ld $92 476e 0054 ld $54 476f 0096 ld $96 4770 0030 ld $30 4771 000c ld $0c 4772 00c3 ld $c3 4773 0030 ld $30 4774 000c ld $0c 4775 00c3 ld $c3 4776 006f ld $6f 4777 0004 ld $04 4778 00c3 ld $c3 4779 00f0 ld $f0 477a 000b ld $0b 477b 00bf ld $bf 477c 0030 ld $30 477d 000c ld $0c 477e 004b ld $4b 477f 002f ld $2f 4780 000c ld $0c 4781 00c3 ld $c3 4782 0030 ld $30 4783 000c ld $0c 4784 00c3 ld $c3 4785 0030 ld $30 4786 00fc ld $fc 4787 00ff ld $ff 4788 00ff ld $ff 4789 00ff ld $ff 478a 00ff ld $ff 478b 00aa ld $aa 478c 0065 ld $65 478d 00a9 ld $a9 478e 00aa ld $aa 478f 00aa ld $aa 4790 00aa ld $aa * 7 times 4795 0065 ld $65 4796 00a9 ld $a9 4797 00ff ld $ff 4798 00ff ld $ff 4799 00ff ld $ff 479a 00ff ld $ff 479b 000f ld $0f 479c 00c3 ld $c3 479d 0030 ld $30 479e 000c ld $0c 479f 00c3 ld $c3 47a0 0030 ld $30 47a1 00ac ld $ac 47a2 00fe ld $fe 47a3 0030 ld $30 47a4 000c ld $0c 47a5 00c3 ld $c3 47a6 0030 ld $30 47a7 00ac ld $ac 47a8 00fe ld $fe 47a9 0030 ld $30 47aa 000c ld $0c 47ab 00c3 ld $c3 47ac 00b0 ld $b0 47ad 00fa ld $fa 47ae 00c3 ld $c3 47af 0030 ld $30 47b0 000c ld $0c 47b1 00c3 ld $c3 47b2 0030 ld $30 47b3 000c ld $0c 47b4 00c3 ld $c3 47b5 0030 ld $30 47b6 000c ld $0c 47b7 00c3 ld $c3 47b8 0030 ld $30 47b9 000c ld $0c 47ba 00c3 ld $c3 47bb 0030 ld $30 47bc 000c ld $0c 47bd 00c3 ld $c3 47be 0030 ld $30 47bf 000c ld $0c 47c0 00c3 ld $c3 47c1 0030 ld $30 47c2 000c ld $0c 47c3 00c3 ld $c3 47c4 0015 ld $15 47c5 000c ld $0c 47c6 00c3 ld $c3 47c7 0030 ld $30 47c8 000c ld $0c 47c9 00c3 ld $c3 47ca 0030 ld $30 47cb 000c ld $0c 47cc 00c3 ld $c3 47cd 00e9 ld $e9 47ce 001a ld $1a 47cf 00a4 ld $a4 47d0 0041 ld $41 47d1 00b0 ld $b0 47d2 00ae ld $ae 47d3 0030 ld $30 47d4 000c ld $0c 47d5 00c3 ld $c3 47d6 00b0 ld $b0 47d7 00aa ld $aa 47d8 00ff ld $ff 47d9 00ba ld $ba 47da 00fa ld $fa 47db 00ab ld $ab 47dc 00fa ld $fa 47dd 00af ld $af 47de 00aa ld $aa 47df 00bf ld $bf 47e0 00ae ld $ae 47e1 00fe ld $fe 47e2 00ba ld $ba 47e3 000a ld $0a 47e4 00c3 ld $c3 47e5 0030 ld $30 47e6 000c ld $0c 47e7 00c3 ld $c3 47e8 0030 ld $30 47e9 000c ld $0c 47ea 00c3 ld $c3 47eb 00c0 ld $c0 47ec 006b ld $6b 47ed 0001 ld $01 47ee 002f ld $2f 47ef 000c ld $0c 47f0 00c3 ld $c3 47f1 0030 ld $30 47f2 000c ld $0c 47f3 00c3 ld $c3 47f4 0030 ld $30 47f5 00bc ld $bc 47f6 00bc ld $bc 47f7 0030 ld $30 47f8 000c ld $0c 47f9 00c3 ld $c3 47fa 0030 ld $30 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 000c ld $0c 4801 00c3 ld $c3 4802 0030 ld $30 4803 000c ld $0c 4804 00c3 ld $c3 4805 0030 ld $30 4806 000c ld $0c 4807 00c3 ld $c3 4808 0030 ld $30 4809 000c ld $0c 480a 00c3 ld $c3 480b 0030 ld $30 480c 000c ld $0c 480d 00c3 ld $c3 480e 0030 ld $30 480f 000c ld $0c 4810 00c3 ld $c3 4811 0030 ld $30 4812 000c ld $0c 4813 00c3 ld $c3 4814 0030 ld $30 4815 000c ld $0c 4816 00c3 ld $c3 4817 0030 ld $30 4818 000c ld $0c 4819 00c3 ld $c3 481a 0030 ld $30 481b 000c ld $0c 481c 00c3 ld $c3 481d 0030 ld $30 481e 000c ld $0c 481f 00c3 ld $c3 4820 0030 ld $30 4821 000c ld $0c 4822 00c3 ld $c3 4823 0030 ld $30 4824 000c ld $0c 4825 00c3 ld $c3 4826 00b0 ld $b0 4827 005a ld $5a 4828 00a9 ld $a9 4829 00bf ld $bf 482a 000a ld $0a 482b 00ab ld $ab 482c 0095 ld $95 482d 005a ld $5a 482e 00a9 ld $a9 482f 002a ld $2a 4830 000c ld $0c 4831 004b ld $4b 4832 00a3 ld $a3 4833 0094 ld $94 4834 0097 ld $97 4835 0030 ld $30 4836 000c ld $0c 4837 00c3 ld $c3 4838 0030 ld $30 4839 000c ld $0c 483a 00c3 ld $c3 483b 00ff ld $ff 483c 00fb ld $fb 483d 00be ld $be 483e 002f ld $2f 483f 00fc ld $fc 4840 00c3 ld $c3 4841 00ef ld $ef 4842 00fb ld $fb 4843 00be ld $be 4844 003f ld $3f 4845 000c ld $0c 4846 00c3 ld $c3 4847 0030 ld $30 4848 000c ld $0c 4849 00c3 ld $c3 484a 0030 ld $30 484b 00ac ld $ac 484c 0069 ld $69 484d 009a ld $9a 484e 00a6 ld $a6 484f 0069 ld $69 4850 0096 ld $96 4851 00aa ld $aa 4852 001a ld $1a 4853 0096 ld $96 4854 0065 ld $65 4855 0059 ld $59 4856 0096 ld $96 4857 0065 ld $65 4858 0059 ld $59 4859 0086 ld $86 485a 00aa ld $aa 485b 005a ld $5a 485c 009a ld $9a 485d 00a6 ld $a6 485e 0069 ld $69 485f 009a ld $9a 4860 0006 ld $06 4861 00c3 ld $c3 4862 0030 ld $30 4863 000c ld $0c 4864 00c3 ld $c3 4865 0030 ld $30 4866 00ac ld $ac 4867 00fe ld $fe 4868 0030 ld $30 4869 000c ld $0c 486a 00c3 ld $c3 486b 0030 ld $30 486c 00ac ld $ac 486d 00fe ld $fe 486e 0030 ld $30 486f 000c ld $0c 4870 00c3 ld $c3 4871 00b0 ld $b0 4872 00fa ld $fa 4873 00c3 ld $c3 4874 0030 ld $30 4875 000c ld $0c 4876 00c3 ld $c3 4877 0030 ld $30 4878 000c ld $0c 4879 00c3 ld $c3 487a 0030 ld $30 487b 000c ld $0c 487c 00c3 ld $c3 487d 0030 ld $30 487e 000c ld $0c 487f 00c3 ld $c3 4880 0030 ld $30 4881 00ac ld $ac 4882 00aa ld $aa 4883 00ff ld $ff 4884 00ff ld $ff 4885 00ff ld $ff * 5 times 4888 00c3 ld $c3 4889 0015 ld $15 488a 000c ld $0c 488b 00c3 ld $c3 488c 0030 ld $30 488d 000c ld $0c 488e 00c3 ld $c3 488f 0030 ld $30 4890 000c ld $0c 4891 00c3 ld $c3 4892 00eb ld $eb 4893 001a ld $1a 4894 0004 ld $04 4895 0069 ld $69 4896 00b0 ld $b0 4897 00a6 ld $a6 4898 0030 ld $30 4899 000c ld $0c 489a 00c3 ld $c3 489b 0070 ld $70 489c 0055 ld $55 489d 00fd ld $fd 489e 0055 ld $55 489f 00f5 ld $f5 48a0 0057 ld $57 48a1 00d5 ld $d5 48a2 005f ld $5f 48a3 0055 ld $55 48a4 007f ld $7f 48a5 0055 ld $55 48a6 00fd ld $fd 48a7 0055 ld $55 48a8 0005 ld $05 48a9 00c3 ld $c3 48aa 0030 ld $30 48ab 000c ld $0c 48ac 00c3 ld $c3 48ad 0030 ld $30 48ae 000c ld $0c 48af 0003 ld $03 48b0 007f ld $7f 48b1 0010 ld $10 48b2 0004 ld $04 48b3 00c0 ld $c0 48b4 000f ld $0f 48b5 00c3 ld $c3 48b6 0030 ld $30 48b7 000c ld $0c 48b8 00c3 ld $c3 48b9 0030 ld $30 48ba 006c ld $6c 48bb 00fc ld $fc 48bc 0041 ld $41 48bd 0010 ld $10 48be 0004 ld $04 48bf 0041 ld $41 48c0 0010 ld $10 48c1 0004 ld $04 48c2 0041 ld $41 48c3 0010 ld $10 48c4 0004 ld $04 48c5 0041 ld $41 48c6 0010 ld $10 48c7 0004 ld $04 48c8 0041 ld $41 48c9 0010 ld $10 48ca 0004 ld $04 48cb 0030 ld $30 48cc 000c ld $0c 48cd 00c3 ld $c3 48ce 0030 ld $30 48cf 000c ld $0c 48d0 00c3 ld $c3 48d1 0030 ld $30 48d2 000c ld $0c 48d3 00c3 ld $c3 48d4 0030 ld $30 48d5 000c ld $0c 48d6 00c3 ld $c3 48d7 0030 ld $30 48d8 000c ld $0c 48d9 00c3 ld $c3 48da 0030 ld $30 48db 000c ld $0c 48dc 00c3 ld $c3 48dd 0030 ld $30 48de 000c ld $0c 48df 00c3 ld $c3 48e0 0030 ld $30 48e1 000c ld $0c 48e2 00c3 ld $c3 48e3 0030 ld $30 48e4 000c ld $0c 48e5 00c3 ld $c3 48e6 0070 ld $70 48e7 00a5 ld $a5 48e8 00fe ld $fe 48e9 00ea ld $ea 48ea 000f ld $0f 48eb 00ab ld $ab 48ec 006a ld $6a 48ed 00a5 ld $a5 48ee 0056 ld $56 48ef 002a ld $2a 48f0 001c ld $1c 48f1 0058 ld $58 48f2 0081 ld $81 48f3 0015 ld $15 48f4 0058 ld $58 48f5 0011 ld $11 48f6 000c ld $0c 48f7 00c3 ld $c3 48f8 0030 ld $30 48f9 000c ld $0c 48fa 00c3 ld $c3 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 00af ld $af 4901 0004 ld $04 4902 00c3 ld $c3 4903 00f0 ld $f0 4904 000f ld $0f 4905 00ff ld $ff 4906 0030 ld $30 4907 000c ld $0c 4908 0047 ld $47 4909 002f ld $2f 490a 000c ld $0c 490b 00c3 ld $c3 490c 0030 ld $30 490d 000c ld $0c 490e 00c3 ld $c3 490f 0030 ld $30 4910 005c ld $5c 4911 0055 ld $55 4912 0055 ld $55 4913 0055 ld $55 4914 0055 ld $55 4915 00d6 ld $d6 4916 00fa ld $fa 4917 005a ld $5a 4918 0069 ld $69 4919 009a ld $9a 491a 00a6 ld $a6 491b 0069 ld $69 491c 009a ld $9a 491d 00a6 ld $a6 491e 00d6 ld $d6 491f 00bb ld $bb 4920 005a ld $5a 4921 0055 ld $55 4922 0055 ld $55 4923 0055 ld $55 4924 0055 ld $55 4925 0005 ld $05 4926 00c3 ld $c3 4927 0030 ld $30 4928 000c ld $0c 4929 00c3 ld $c3 492a 0030 ld $30 492b 00ac ld $ac 492c 00fe ld $fe 492d 0030 ld $30 492e 000c ld $0c 492f 00c3 ld $c3 4930 0030 ld $30 4931 00ac ld $ac 4932 00fe ld $fe 4933 0030 ld $30 4934 000c ld $0c 4935 00c3 ld $c3 4936 00b0 ld $b0 4937 00fa ld $fa 4938 00c3 ld $c3 4939 0030 ld $30 493a 000c ld $0c 493b 00c3 ld $c3 493c 0030 ld $30 493d 000c ld $0c 493e 00c3 ld $c3 493f 0030 ld $30 4940 000c ld $0c 4941 00c3 ld $c3 4942 0030 ld $30 4943 000c ld $0c 4944 00ab ld $ab 4945 00aa ld $aa 4946 00aa ld $aa 4947 00aa ld $aa 4948 00aa ld $aa 4949 00fa ld $fa 494a 00ff ld $ff 494b 00ff ld $ff 494c 00ff ld $ff * 5 times 494f 000f ld $0f 4950 00c3 ld $c3 4951 0030 ld $30 4952 000c ld $0c 4953 00c3 ld $c3 4954 0030 ld $30 4955 000c ld $0c 4956 00c3 ld $c3 4957 00e9 ld $e9 4958 001a ld $1a 4959 00a4 ld $a4 495a 0041 ld $41 495b 00b0 ld $b0 495c 00ae ld $ae 495d 0030 ld $30 495e 000c ld $0c 495f 00c3 ld $c3 4960 00b0 ld $b0 4961 00aa ld $aa 4962 00ff ld $ff 4963 00aa ld $aa 4964 00fe ld $fe 4965 00ab ld $ab 4966 00ea ld $ea 4967 00af ld $af 4968 00ea ld $ea 4969 00bf ld $bf 496a 00aa ld $aa 496b 00ff ld $ff 496c 00aa ld $aa 496d 000e ld $0e 496e 00c3 ld $c3 496f 0030 ld $30 4970 000c ld $0c 4971 00c3 ld $c3 4972 0030 ld $30 4973 000c ld $0c 4974 00bc ld $bc 4975 0081 ld $81 4976 0065 ld $65 4977 0005 ld $05 4978 0020 ld $20 4979 00f0 ld $f0 497a 00c2 ld $c2 497b 0030 ld $30 497c 000c ld $0c 497d 00c3 ld $c3 497e 0030 ld $30 497f 00bc ld $bc 4980 00bc ld $bc 4981 00ff ld $ff 4982 00fb ld $fb 4983 00bf ld $bf 4984 00ff ld $ff 4985 00fb ld $fb 4986 00bf ld $bf 4987 00ff ld $ff 4988 00fb ld $fb 4989 00bf ld $bf 498a 00ff ld $ff 498b 00fb ld $fb 498c 00bf ld $bf 498d 00ff ld $ff 498e 00fb ld $fb 498f 0007 ld $07 4990 0030 ld $30 4991 000c ld $0c 4992 00c3 ld $c3 4993 0030 ld $30 4994 000c ld $0c 4995 00c3 ld $c3 4996 0030 ld $30 4997 000c ld $0c 4998 00c3 ld $c3 4999 0030 ld $30 499a 000c ld $0c 499b 00c3 ld $c3 499c 0030 ld $30 499d 000c ld $0c 499e 00c3 ld $c3 499f 0030 ld $30 49a0 000c ld $0c 49a1 00c3 ld $c3 49a2 0030 ld $30 49a3 000c ld $0c 49a4 00c3 ld $c3 49a5 0030 ld $30 49a6 000c ld $0c 49a7 00c3 ld $c3 49a8 0030 ld $30 49a9 000c ld $0c 49aa 00c3 ld $c3 49ab 00b0 ld $b0 49ac 005a ld $5a 49ad 00a9 ld $a9 49ae 00bf ld $bf 49af 000a ld $0a 49b0 00ab ld $ab 49b1 0095 ld $95 49b2 005a ld $5a 49b3 00a9 ld $a9 49b4 002a ld $2a 49b5 001c ld $1c 49b6 0004 ld $04 49b7 0041 ld $41 49b8 0010 ld $10 49b9 0044 ld $44 49ba 0011 ld $11 49bb 000c ld $0c 49bc 00c3 ld $c3 49bd 0030 ld $30 49be 000c ld $0c 49bf 00c3 ld $c3 49c0 007f ld $7f 49c1 0004 ld $04 49c2 00c3 ld $c3 49c3 00ef ld $ef 49c4 00ff ld $ff 49c5 00fe ld $fe 49c6 003f ld $3f 49c7 000c ld $0c 49c8 004b ld $4b 49c9 003f ld $3f 49ca 000c ld $0c 49cb 00c3 ld $c3 49cc 0030 ld $30 49cd 000c ld $0c 49ce 00c3 ld $c3 49cf 0030 ld $30 49d0 00ac ld $ac 49d1 00aa ld $aa 49d2 0095 ld $95 49d3 00aa ld $aa 49d4 0056 ld $56 49d5 00d6 ld $d6 49d6 00fa ld $fa 49d7 005a ld $5a 49d8 006a ld $6a 49d9 00a5 ld $a5 49da 00aa ld $aa 49db 006a ld $6a 49dc 00a5 ld $a5 49dd 00aa ld $aa 49de 00d6 ld $d6 49df 00bb ld $bb 49e0 005a ld $5a 49e1 0095 ld $95 49e2 00aa ld $aa 49e3 0056 ld $56 49e4 00aa ld $aa 49e5 000a ld $0a 49e6 00c3 ld $c3 49e7 0030 ld $30 49e8 000c ld $0c 49e9 00c3 ld $c3 49ea 0030 ld $30 49eb 00ac ld $ac 49ec 00fe ld $fe 49ed 0030 ld $30 49ee 000c ld $0c 49ef 00c3 ld $c3 49f0 0030 ld $30 49f1 00ac ld $ac 49f2 00fe ld $fe 49f3 0030 ld $30 49f4 000c ld $0c 49f5 00c3 ld $c3 49f6 00b0 ld $b0 49f7 00fa ld $fa 49f8 00c3 ld $c3 49f9 0030 ld $30 49fa 000c ld $0c 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 00c3 ld $c3 4a01 0030 ld $30 4a02 000c ld $0c 4a03 00c3 ld $c3 4a04 0030 ld $30 4a05 000c ld $0c 4a06 00c3 ld $c3 4a07 0055 ld $55 4a08 0055 ld $55 4a09 0055 ld $55 * 6 times 4a0d 00aa ld $aa 4a0e 00aa ld $aa 4a0f 00aa ld $aa 4a10 00ea ld $ea 4a11 00ff ld $ff 4a12 00ff ld $ff 4a13 00ff ld $ff * 5 times 4a16 003f ld $3f 4a17 000c ld $0c 4a18 00c3 ld $c3 4a19 0030 ld $30 4a1a 000c ld $0c 4a1b 00c3 ld $c3 4a1c 00eb ld $eb 4a1d 001a ld $1a 4a1e 0004 ld $04 4a1f 0069 ld $69 4a20 00b0 ld $b0 4a21 00a6 ld $a6 4a22 0030 ld $30 4a23 000c ld $0c 4a24 00c3 ld $c3 4a25 0070 ld $70 4a26 0055 ld $55 4a27 00fd ld $fd 4a28 0055 ld $55 4a29 00f5 ld $f5 4a2a 0057 ld $57 4a2b 00d5 ld $d5 4a2c 005f ld $5f 4a2d 0055 ld $55 4a2e 007f ld $7f 4a2f 0055 ld $55 4a30 00fd ld $fd 4a31 0055 ld $55 4a32 0005 ld $05 4a33 00c3 ld $c3 4a34 0030 ld $30 4a35 000c ld $0c 4a36 00c3 ld $c3 4a37 0030 ld $30 4a38 00f0 ld $f0 4a39 0083 ld $83 4a3a 0081 ld $81 4a3b 0065 ld $65 4a3c 0005 ld $05 4a3d 0020 ld $20 4a3e 0008 ld $08 4a3f 00fc ld $fc 4a40 0030 ld $30 4a41 000c ld $0c 4a42 00c3 ld $c3 4a43 0030 ld $30 4a44 006c ld $6c 4a45 00fc ld $fc 4a46 006f ld $6f 4a47 0060 ld $60 4a48 0004 ld $04 4a49 0046 ld $46 4a4a 0060 ld $60 4a4b 0004 ld $04 4a4c 0046 ld $46 4a4d 0060 ld $60 4a4e 0004 ld $04 4a4f 00c6 ld $c6 4a50 006f ld $6f 4a51 002c ld $2c 4a52 0056 ld $56 4a53 00f0 ld $f0 4a54 0006 ld $06 4a55 0030 ld $30 4a56 000c ld $0c 4a57 00c3 ld $c3 4a58 0030 ld $30 4a59 000c ld $0c 4a5a 00c3 ld $c3 4a5b 0030 ld $30 4a5c 000c ld $0c 4a5d 00c3 ld $c3 4a5e 0030 ld $30 4a5f 000c ld $0c 4a60 00c3 ld $c3 4a61 0030 ld $30 4a62 000c ld $0c 4a63 00c3 ld $c3 4a64 0030 ld $30 4a65 000c ld $0c 4a66 00c3 ld $c3 4a67 0030 ld $30 4a68 000c ld $0c 4a69 00c3 ld $c3 4a6a 0030 ld $30 4a6b 000c ld $0c 4a6c 00c3 ld $c3 4a6d 0030 ld $30 4a6e 000c ld $0c 4a6f 00c3 ld $c3 4a70 0070 ld $70 4a71 00a5 ld $a5 4a72 00fe ld $fe 4a73 00ea ld $ea 4a74 000f ld $0f 4a75 00ab ld $ab 4a76 006a ld $6a 4a77 00a5 ld $a5 4a78 0056 ld $56 4a79 002a ld $2a 4a7a 001c ld $1c 4a7b 0058 ld $58 4a7c 0081 ld $81 4a7d 0015 ld $15 4a7e 0058 ld $58 4a7f 0011 ld $11 4a80 000c ld $0c 4a81 00c3 ld $c3 4a82 0030 ld $30 4a83 000c ld $0c 4a84 00c3 ld $c3 4a85 00f0 ld $f0 4a86 000b ld $0b 4a87 00bf ld $bf 4a88 003f ld $3f 4a89 00fc ld $fc 4a8a 00c2 ld $c2 4a8b 00ff ld $ff 4a8c 000f ld $0f 4a8d 00bf ld $bf 4a8e 0030 ld $30 4a8f 000c ld $0c 4a90 00c3 ld $c3 4a91 0030 ld $30 4a92 000c ld $0c 4a93 00c3 ld $c3 4a94 0030 ld $30 4a95 00ac ld $ac 4a96 0069 ld $69 4a97 0055 ld $55 4a98 0055 ld $55 4a99 0055 ld $55 4a9a 0096 ld $96 4a9b 00aa ld $aa 4a9c 005a ld $5a 4a9d 00aa ld $aa 4a9e 006a ld $6a 4a9f 00a9 ld $a9 4aa0 0096 ld $96 4aa1 00aa ld $aa 4aa2 00aa ld $aa 4aa3 0096 ld $96 4aa4 00aa ld $aa 4aa5 005a ld $5a 4aa6 0055 ld $55 4aa7 0055 ld $55 4aa8 0055 ld $55 4aa9 009a ld $9a 4aaa 0006 ld $06 4aab 00c3 ld $c3 4aac 0030 ld $30 4aad 000c ld $0c 4aae 00c3 ld $c3 4aaf 0030 ld $30 4ab0 00ac ld $ac 4ab1 00fe ld $fe 4ab2 0030 ld $30 4ab3 000c ld $0c 4ab4 00c3 ld $c3 4ab5 0030 ld $30 4ab6 00ac ld $ac 4ab7 00fe ld $fe 4ab8 0030 ld $30 4ab9 000c ld $0c 4aba 00c3 ld $c3 4abb 00b0 ld $b0 4abc 00fa ld $fa 4abd 00c3 ld $c3 4abe 0030 ld $30 4abf 000c ld $0c 4ac0 00c3 ld $c3 4ac1 0030 ld $30 4ac2 000c ld $0c 4ac3 00c3 ld $c3 4ac4 0030 ld $30 4ac5 0000 ld $00 4ac6 0000 ld $00 4ac7 0000 ld $00 * 5 times 4aca 0055 ld $55 4acb 0055 ld $55 4acc 0055 ld $55 4acd 0055 ld $55 4ace 00a5 ld $a5 4acf 00aa ld $aa 4ad0 00aa ld $aa 4ad1 00aa ld $aa 4ad2 00fe ld $fe 4ad3 00ff ld $ff 4ad4 00ff ld $ff 4ad5 00ff ld $ff * 6 times 4ad9 0030 ld $30 4ada 000c ld $0c 4adb 00c3 ld $c3 4adc 00e9 ld $e9 4add 001a ld $1a 4ade 00a4 ld $a4 4adf 0041 ld $41 4ae0 00b0 ld $b0 4ae1 00ae ld $ae 4ae2 0030 ld $30 4ae3 000c ld $0c 4ae4 00c3 ld $c3 4ae5 00b0 ld $b0 4ae6 00ae ld $ae 4ae7 00fe ld $fe 4ae8 00ba ld $ba 4ae9 00fa ld $fa 4aea 00ab ld $ab 4aeb 00fa ld $fa 4aec 00af ld $af 4aed 00aa ld $aa 4aee 00bf ld $bf 4aef 00ae ld $ae 4af0 00fe ld $fe 4af1 00aa ld $aa 4af2 000e ld $0e 4af3 00c3 ld $c3 4af4 0030 ld $30 4af5 000c ld $0c 4af6 00c3 ld $c3 4af7 00c0 ld $c0 4af8 001b ld $1b 4af9 0004 ld $04 4afa 0041 ld $41 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 0010 ld $10 4b01 0004 ld $04 4b02 0041 ld $41 4b03 0000 ld $00 4b04 0003 ld $03 4b05 0030 ld $30 4b06 000c ld $0c 4b07 00c3 ld $c3 4b08 0030 ld $30 4b09 00bc ld $bc 4b0a 00bc ld $bc 4b0b 00bf ld $bf 4b0c 00f1 ld $f1 4b0d 001a ld $1a 4b0e 008b ld $8b 4b0f 00b1 ld $b1 4b10 0018 ld $18 4b11 008b ld $8b 4b12 00b1 ld $b1 4b13 0018 ld $18 4b14 00c1 ld $c1 4b15 00bb ld $bb 4b16 0058 ld $58 4b17 0046 ld $46 4b18 00f0 ld $f0 4b19 0007 ld $07 4b1a 0030 ld $30 4b1b 000c ld $0c 4b1c 00c3 ld $c3 4b1d 0030 ld $30 4b1e 000c ld $0c 4b1f 00c3 ld $c3 4b20 0030 ld $30 4b21 000c ld $0c 4b22 00c3 ld $c3 4b23 0030 ld $30 4b24 0