1 2 processor 6502 3 4; TIA (Stella) write-only registers 5; 6Vsync equ $00 7Vblank equ $01 8Wsync equ $02 9Rsync equ $03 10Nusiz0 equ $04 11Nusiz1 equ $05 12ColuP0 equ $06 13ColuP1 equ $07 14Colupf equ $08 15ColuBK equ $09 16Ctrlpf equ $0A 17Refp0 equ $0B 18Refp1 equ $0C 19Pf0 equ $0D 20Pf1 equ $0E 21Pf2 equ $0F 22RESP0 equ $10 23RESP1 equ $11 24Resm0 equ $12 25Resm1 equ $13 26Resbl equ $14 27Audc0 equ $15 28Audc1 equ $16 29Audf0 equ $17 30Audf1 equ $18 31Audv0 equ $19 32Audv1 equ $1A 33GRP0 equ $1B 34GRP1 equ $1C 35Enam0 equ $1D 36Enam1 equ $1E 37Enabl equ $1F 38HMP0 equ $20 39HMP1 equ $21 40Hmm0 equ $22 41Hmm1 equ $23 42Hmbl equ $24 43VdelP0 equ $25 44VdelP1 equ $26 45Vdelbl equ $27 46Resmp0 equ $28 47Resmp1 equ $29 48HMOVE equ $2A 49Hmclr equ $2B 50Cxclr equ $2C 51; 52; TIA (Stella) read-only registers 53; 54Cxm0p equ $00 55Cxm1p equ $01 56Cxp0fb equ $02 57Cxp1fb equ $03 58Cxm0fb equ $04 59Cxm1fb equ $05 60Cxblpf equ $06 61Cxppmm equ $07 62Inpt0 equ $08 63Inpt1 equ $09 64Inpt2 equ $0A 65Inpt3 equ $0B 66Inpt4 equ $0C 67Inpt5 equ $0D 68; 69; RAM definitions 70; Note: The system RAM maps in at 0080-00FF and also at 0180-01FF. It is 71; used for variables and the system stack. The programmer must make sure 72; the stack never grows so deep as to overwrite the variables. 73; 74RamStart equ $0080 75RamEnd equ $00FF 76StackBottom equ $00FF 77StackTop equ $0080 78; 79; 6532 (RIOT) registers 80; 81SWCHA equ $0280 82Swacnt equ $0281 83SWCHB equ $0282 84Swbcnt equ $0283 85Intim equ $0284 86Tim1t equ $0294 87Tim8t equ $0295 88Tim64t equ $0296 89T1024t equ $0297 90; 91; ROM definitions 92; 93RomStart equ $F000 94RomEnd equ $FFFF 95IntVectors equ $FFFA 96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 97 98s1 EQU $80 99s2 EQU $82 100s3 EQU $84 101s4 EQU $86 102s5 EQU $88 103s6 EQU $8A 104DelayPTR EQU $8C 105LoopCount EQU $8E 106TopDelay EQU $8F 107BottomDelay EQU $90 108MoveCount EQU $91 109Temp EQU $92 110RotateDir EQU $93 111SkipFrame EQU $94 112VerticalDir EQU $95 113HorizontalDir EQU $96 114VerticalPos EQU $97 115HorizontalPos EQU $98 116SoundQ EQU $99 117SkipMove EQU $9a 118EggMode EQU $9b 119FrameCycle EQU $9c 120EggMusic EQU $9d 121 122 123 ORG $F000 124 125 126Cart_Init: 127 SEI ; Disable interrupts.: 128 CLD ; Clear "decimal" mode. 129 130 LDX #$FF 131 TXS ; Clear the stack 132 133Common_Init: 134 LDX #$28 ; Clear the TIA registers ($04-$2C) 135 LDA #$00 136TIAClear: 137 STA $04,X 138 DEX 139 BPL TIAClear ; loop exits with X=$FF 140 141 LDX #$FF 142RAMClear: 143 STA $00,X ; Clear the RAM ($FF-$80) 144 DEX 145 BMI RAMClear ; loop exits with X=$7F 146 147 LDX #$FF 148 TXS ; Reset the stack 149 150IOClear: 151 STA Swbcnt ; console I/O always set to INPUT 152 STA Swacnt ; set controller I/O to INPUT 153 154DemoInit: LDA #$01 155 STA VdelP0 156 STA VdelP1 157 LDA #$03 158 STA Nusiz0 159 STA Nusiz1 160 LDA #$36 ; a nice shade of red 161 STA ColuP0 162 STA ColuP1 163 LDA #$ff ; page to get gfx from initially 164 STA s1+1 165 STA s2+1 166 STA s3+1 167 STA s4+1 168 STA s5+1 169 STA s6+1 170 LDA #0 ; offset in the gfx data 171 STA s1 172 LDA #50 ; offset in the gfx data 173 STA s2 174 LDA #100 ; offset in the gfx data 175 STA s3 176 LDA #150 ; offset in the gfx data 177 STA s4 178 LDA #200 ; offset in the gfx data 179 STA s5 180 LDA #0 ; vestigial! 181 STA s6 182 LDA #$01 ; +1 or -1, rotating the ball 183 STA RotateDir 184 LDA #$01 ; Vertical direction, +1 or -1 185 STA VerticalDir 186 LDA #$01 ; Same for horizontal 187 STA HorizontalDir 188 STA SoundQ ; Start out by making a noise 189 LDA #1 190 STA SkipFrame 191 STA SkipMove 192 LDA #0 193 STA TopDelay 194 STA MoveCount 195 LDA #120 196 STA BottomDelay 197 LDA #$f2 198 STA DelayPTR+1 199 LDA #$1d+36 ;????? 200 STA DelayPTR 201 STA Wsync 202 NOP 203 NOP 204 NOP 205 NOP 206 NOP 207 NOP 208 NOP 209 NOP 210 NOP 211 NOP 212 STA RESP0 213 STA RESP1 214 LDA #$50 ;????? 215 STA HMP1 216 LDA #$40 ;????? 217 STA HMP0 218 STA Wsync 219 STA HMOVE 220 STA Wsync 221 LDA #$0f 222 STA ColuBK 223 224NewScreen: 225 LDA #$02 226 STA Wsync ; Wait for horizontal sync 227 STA Vblank ; Turn on Vblank 228 STA Vsync ; Turn on Vsync 229 STA Wsync ; Leave Vsync on for 3 lines 230 STA Wsync 231 STA Wsync 232 LDA #$00 233 STA Vsync ; Turn Vsync off 234 235 LDA #43 ; Vblank for 37 lines 236 ; changed from 43 to 53 for 45 lines PAL 237 STA Tim64t ; 43*64intvls=2752=8256colclks=36.2lines 238 239 JSR DoSound ; was too big to leave inline :P 240 241 INC FrameCycle ; we'll use this for color cycling and 242 ; possibly for sound 243 244 DEC SkipFrame 245 BNE Movement ; skip the animation most of the time 246 LDA #3 ; number of frames to skip 247 STA SkipFrame ; if it's zero, reset it 248 249SkipSkip: LDA EggMode ; check for easter egg :) 250 CMP #0 ; no? how sad. 251 BNE Movement 252 LDA RotateDir ; which direction to rotate it in? 253 CLC 254 ADC s1+1 ; add that to the gfx page 255 ORA #$F8 ; there are only 8 so mask the rest 256 STA s1+1 257 STA s2+1 258 STA s3+1 259 STA s4+1 260 STA s5+1 261 262 263 264 265Movement: LDA #$1 266 BIT SWCHB ; is someone pushing reset? 267 BNE NoReset ; no? how sad. 268 STA EggMode ; set egg mode 269 JMP MoveDelay 270NoReset: LDA #0 271 STA EggMode ; no select = no easter egg. 272 ; yes, I could have made it harder to find. 273 ; gimme a break, I'm feeling good ;) 274 275MoveDelay: JSR CheckEgg ; override animation if necessary 276 LDA SkipMove 277 INC SkipMove 278 AND #1 ; basically i lamed out and said 279 BNE MoveHorizontal ; "skip every other frame" 280 JMP VblankLoop 281 282MoveHorizontal: LDA HorizontalPos ; i couldn't figure out how to use HMOVE 283 CLC ; without blowing up yet, so let's glom 284 ADC HorizontalDir ; onto the joystick routines 285 STA HorizontalPos 286 LDA HorizontalDir 287 CMP #0 288 BMI GoLeft 289GoRight: JSR Right 290 LDA HorizontalPos 291 CMP #112 ; i also haven't figured out how to make the 292 BNE MoveVertical ; sprite go all the way to the right edge! 293 LDA HorizontalDir ; since we're not using the 6th copy 294 LDA #$FF 295 STA HorizontalDir 296 LDA #1 ; if we're reversing direction, we've hit a wall 297 STA SoundQ ; so make a sound 298 LDA RotateDir 299 EOR #$FE 300 STA RotateDir ; and change 1 into -1 (255) 301 JMP MoveVertical 302GoLeft: JSR Left 303 LDA HorizontalPos 304 CMP #1 305 BNE MoveVertical 306 LDA #$01 307 STA HorizontalDir 308 STA SoundQ 309 LDA RotateDir 310 EOR #$FE 311 STA RotateDir 312MoveVertical: LDA VerticalPos 313 CLC 314 ADC VerticalDir 315 STA VerticalPos 316 LDA VerticalDir 317 CMP #0 318 BMI GoUp 319GoDown: JSR Down 320 LDA VerticalPos 321 CMP #120 ; kind of a rough approximation, yeah 322 BNE EndMove 323 LDA #$FF 324 STA VerticalDir 325 LDA #1 326 STA SoundQ 327 LDA RotateDir 328 EOR #$FE 329 STA RotateDir 330 JMP EndMove 331GoUp: JSR UP 332 LDA VerticalPos 333 CMP #1 334 BNE EndMove 335 LDA #$01 336 STA VerticalDir 337 STA SoundQ 338 LDA RotateDir 339 EOR #$FE 340 STA RotateDir 341EndMove: JMP VblankLoop 342 343 344 345UP: LDA TopDelay 346 BEQ U1 347 DEC TopDelay 348 INC BottomDelay 349U1: RTS ; was JMP VblankLoop 350 351Down: LDA BottomDelay 352 BEQ D1 353 INC TopDelay 354 DEC BottomDelay 355D1: RTS; was JMP VblankLoop 356 357Right: LDX MoveCount 358 INX 359 STX MoveCount 360 CPX #3 361 BNE R2 362 LDX DelayPTR 363 DEX 364 STX DelayPTR 365 CPX #$1c ;????? 366 BNE R1 367 LDA #$1d ;????? 368 STA DelayPTR 369 LDA #2 370 STA MoveCount 371 RTS; was JMP VblankLoop 372R1: LDA #0 373 STA MoveCount 374R2: LDA #$f0 375 STA HMP0 376 STA HMP1 377 STA Wsync 378 STA HMOVE 379 RTS; was JMP VblankLoop 380 381Left: LDX MoveCount 382 DEX 383 STX MoveCount 384 CPX #$ff 385 BNE L2 386 LDX DelayPTR 387 INX 388 STX DelayPTR 389 CPX #$1d+37 ; indexing into a code segment with a literal - naughty 390 BNE L1 391 LDA #$1d+36 ; indexing into a code segment with a literal - naughty 392 STA DelayPTR 393 LDA #0 394 STA MoveCount 395 RTS; was JMP VblankLoop 396L1: LDA #2 397 STA MoveCount 398L2: LDA #$10 399 STA HMP0 400 STA HMP1 401 STA Wsync 402 STA HMOVE 403 RTS; was JMP VblankLoop 404 405 ORG $F200 406VblankLoop: 407 LDA Intim 408 BNE VblankLoop ; wait for vblank timer 409 STA Wsync ; finish waiting for the current line 410 STA Vblank ; Turn off Vblank 411 412;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 413ScreenStart: 414 LDY TopDelay 415 INY ;????? 416X1: STA Wsync 417 DEY 418 BNE X1 419 LDY #4 ;????? 420X2: DEY 421 BPL X2 422 LDA #49 ; 50 pixels high 423 STA LoopCount 424 JMP (DelayPTR) 425JNDelay: .byte $c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9 426 .byte $c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9 427 .byte $c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9 428 .byte $c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c5 429 NOP 430X3: NOP 431 NOP 432 NOP 433 LDY LoopCount 434 LDA (s1),Y 435 STA GRP0 436 LDA (s2),Y 437 STA GRP1 438 LDA (s3),Y 439 STA GRP0 440; LDA (s6),Y 441 lda $00 442 LDA #$00 443 STA Temp 444 LDA (s5),Y 445 TAX 446 LDA (s4),Y 447 LDY Temp 448 STA GRP1 449 STX GRP0 450 STY GRP1 451 STA GRP0 452 DEC LoopCount 453 BPL X3 454 LDA #0 455 STA GRP0 456 STA GRP1 457 STA GRP0 458 STA GRP1 459 NOP 460 NOP 461 NOP 462 NOP 463 NOP 464 NOP 465 NOP 466 LDY BottomDelay 467 INY ;????? 468X4: STA Wsync 469 DEY 470 BNE X4 471 LDA #$02 472 STA Vblank 473 STA Wsync 474;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 475OverscanStart: LDA #34 ;skip 30 lines (overscan) 476 STA Tim64t 477 478OverscanLoop: 479 LDA Intim 480 BNE OverscanLoop ; wait for Overscan timer 481 482OverscanDone: STA Wsync ; finish waiting for the current line 483 484 485 JMP NewScreen 486 487 488; sound routine 489;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 490 491DoSound: LDA EggMode ; if egg mode is set, we do it differently 492 CMP #0 493 BEQ StartSound 494 LDA EggMusic 495 AND #$7F ; we're doing 16 bars of 8th notes 496 TAY 497 LDA FrameCycle 498 AND #1 499 BEQ UseSet2 500UseSet1: LDA EggMusic1,Y ; channel 1 notes 501 CMP #0 502 BEQ SetVol1 503 STA Audf0 504 LDA #5 ; I guess we'll try this for now 505 STA Audc0 506 LDA #3 507SetVol1: STA Audv0 508 LDA EggMusic2,Y ; channel 2 notes 509 CMP #0 510 BEQ SetVol2 511 STA Audf1 512 LDA #8 ; I guess we'll try this for now 513 STA Audc1 514 LDA #5 ; left hand s/b quieter 515SetVol2: STA Audv1 516 JMP ChangeNote 517UseSet2: LDA EggMusic3,Y ; channel 1 notes 518 CMP #0 519 BEQ SetVol1a 520 STA Audf0 521 LDA #5 ; I guess we'll try this for now 522 STA Audc0 523 LDA #15 524SetVol1a: STA Audv0 525 LDA EggMusic4,Y ; channel 2 notes 526 CMP #0 527 BEQ SetVol2a 528 STA Audf1 529 LDA #1 ; I guess we'll try this for now 530 STA Audc1 531 LDA #12 ; left hand s/b quieter 532SetVol2a: STA Audv1 533ChangeNote: LDA FrameCycle ; so we can skip every 3, 7 or 15 frames 534 AND #$07 ; let's try 15 535 BNE EndSound 536 INY 537 STY EggMusic 538 BNE EndSound 539StartSound: LDA FrameCycle ; so we can skip every 3, 7 or 15 frames 540 AND #$03 ; let's try 15 541 BNE EndSound 542 LDA SoundQ ; is there sound to be played? 543 CMP #0 544 BEQ EndSound ; no? how sad. 545 TAY 546 CPY #1 ; if it's note #1 we can't do the cheezy echo. 547 BEQ DoVoice1 548 DEY 549DoVoice2: LDA SoundFData,Y ; basically you just set SoundQ to an 550 STA Audf1 ; offset and put frequency, control and 551 LDA SoundCData,Y ; volume data in the data segment below 552 STA Audc1 ; with zero termination. I was gonna do 553 LDA SoundVData,Y ; a channel multiplexing music thing 554 ; but I'm too lame. 555 LSR ; Divide volume in half for the cheezy echo 556 STA Audv1 557 INY 558DoVoice1: LDA SoundFData,Y ; see above 559 STA Audf0 560 LDA SoundCData,Y 561 STA Audc0 562 LDA SoundVData,Y 563 STA Audv0 564 CMP #0 565 BNE NextNote ; if it's not zero there's more 566 STA Audf0 567 STA Audc0 568 STA Audv1 569 STA SoundQ ; otherwise we turn off the sound and empty the Q 570 JMP EndSound 571NextNote: INC SoundQ 572EndSound: RTS 573 574 575CheckEgg: LDA EggMode 576 CMP #0 577 BEQ NoEgg ; no egg? how sad! 578 LDA FrameCycle ; hey, it works in adventure 579 STA ColuP0 580 STA ColuP1 581 LDA #$F6 582 STA s1+1 583 STA s2+1 584 STA s3+1 585 STA s4+1 586 STA s5+1 587 LDA #1 588 STA SoundQ 589 RTS 590NoEgg: LDA #$36 ; otherwise set the color back to the 591 STA ColuP0 ; lovely shade of red. this egg works much 592 STA ColuP1 ; more smoothly than I expected. 593 LDA #0 594 STA EggMusic 595 RTS 596 597 598; egg sound data 599;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 600 601 ORG $F400 602EggMusic3: 603 .byte 23,0,23,0,23,23,0,0 604 .byte 23,0,23,0,23,23,0,0 605 .byte 23,0,19,0,29,0,26,0 606 .byte 23,23,23,23,0,0,0,0 607 .byte 22,0,22,0,22,0,22,0 608 .byte 22,0,23,0,23,0,23,0 609 .byte 23,0,26,0,26,0,23,0 610 .byte 26,26,26,26,19,19,19,19 611 .byte 23,0,23,0,23,23,0,0 612 .byte 23,0,23,0,23,23,0,0 613 .byte 23,0,19,0,29,0,26,0 614 .byte 23,23,23,23,0,0,0,0 615 .byte 22,0,22,0,22,0,22,0 616 .byte 22,0,23,0,23,0,23,0 617 .byte 19,0,19,0,22,0,28,0 618 .byte 29,29,29,29,14,14,14,14 619 620EggMusic4: 621 .byte 15,15,$00,$00,21,21,$00,$00 622 .byte 15,15,$00,$00,21,21,$00,$00 623 .byte 15,15,$00,$00,21,21,$00,$00 624 .byte 15,15,$00,$00,21,21,$00,$00 625 .byte 11,11,$00,$00,15,15,$00,$00 626 .byte 15,15,$00,$00,21,21,$00,$00 627 .byte 21,21,$00,$00,13,13,$00,$00 628 .byte 21,21,$00,$00,18,18,16,16 629 .byte 15,15,$00,$00,21,21,$00,$00 630 .byte 15,15,$00,$00,21,21,$00,$00 631 .byte 15,15,$00,$00,21,21,$00,$00 632 .byte 15,15,$00,$00,21,21,$00,$00 633 .byte 11,11,$00,$00,15,15,$00,$00 634 .byte 15,15,$00,$00,21,21,$00,$00 635 .byte 21,21,$00,$00,13,13,$00,$00 636 .byte 15,15,21,21,18,18,16,16 637 638 ORG $F500 639EggMusic1: 640 .byte 19,0,19,0,19,19,0,0 641 .byte 19,0,19,0,19,19,0,0 642 .byte 19,0,14,0,23,0,22,0 643 .byte 19,19,19,19,0,0,0,0 644 .byte 17,0,17,0,17,0,17,0 645 .byte 17,0,19,0,19,0,19,0 646 .byte 19,0,20,0,20,0,17,0 647 .byte 19,19,19,19,15,15,15,15 648 .byte 19,0,19,0,19,19,0,0 649 .byte 19,0,19,0,19,19,0,0 650 .byte 19,0,14,0,23,0,22,0 651 .byte 19,19,19,19,0,0,0,0 652 .byte 17,0,17,0,17,0,17,0 653 .byte 17,0,19,0,19,0,19,0 654 .byte 15,0,15,0,17,0,22,0 655 .byte 23,23,23,23,23,23,23,23 656 657 658EggMusic2: 659 .byte 28,0,1,$00,28,0,1,$00 660 .byte 28,0,1,$00,28,0,1,$00 661 .byte 28,0,1,$00,28,0,1,$00 662 .byte 28,0,1,$00,28,0,1,$00 663 .byte 28,0,1,$00,28,0,1,$00 664 .byte 28,0,1,$00,28,0,1,$00 665 .byte 28,0,1,$00,28,0,1,$00 666 .byte 28,0,1,$00,28,0,1,$00 667 .byte 28,0,1,$00,28,0,1,$00 668 .byte 28,0,1,$00,28,0,1,$00 669 .byte 28,0,1,$00,28,0,1,$00 670 .byte 28,0,1,$00,28,0,1,$00 671 .byte 28,0,1,$00,28,0,1,$00 672 .byte 28,0,1,$00,28,0,1,$00 673 .byte 28,0,1,$00,28,0,1,$00 674 .byte 28,0,1,$00,28,0,1,$00 675 676; graphics data (boing ball) 677;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 678 ORG $F600 679; first column 680 681 .byte $33,$37,$3e,$3c,$36,$33,$31,$00 682 .byte $00,$00,$00,$00,$00,$00,$00,$00 683 .byte $03,$03,$03,$03,$03,$03,$03,$00 684 .byte $3f,$00,$1f,$06,$06,$06,$06,$0e 685 .byte $06,$00,$03,$03,$01,$00,$01,$03 686 .byte $03,$00,$31,$31,$31,$3f,$31,$31 687 .byte $31,$00 688 689; second column 690 691 .byte $9f,$31,$31,$31,$31,$31,$b1,$00 692 .byte $33,$37,$3e,$33,$31,$31,$3f,$00 693 .byte $03,$03,$03,$f3,$03,$03,$fb,$00 694 .byte $ff,$00,$9e,$03,$01,$1f,$31,$31 695 .byte $1f,$00,$1b,$bb,$f3,$e3,$f3,$bb 696 .byte $1b,$00,$b1,$b1,$bf,$b1,$b1,$9b 697 .byte $8e,$00 698 699; third column 700 701 .byte $3e,$b3,$b1,$b1,$b1,$b3,$be,$00 702 .byte $9f,$31,$31,$b1,$b1,$b1,$1f,$00 703 .byte $39,$73,$e3,$3b,$1b,$1b,$f1,$00 704 .byte $ff,$00,$1e,$03,$81,$9f,$b1,$b1 705 .byte $1f,$00,$1b,$1b,$5b,$fb,$fb,$b9 706 .byte $18,$00,$b0,$b0,$bf,$b1,$b1,$31 707 .byte $3f,$00 708 709; fourth column 710 711 .byte $3f,$30,$b0,$b0,$b0,$30,$30,$00 712 .byte $3f,$b1,$b1,$bf,$b1,$b1,$3f,$00 713 .byte $f3,$1b,$1b,$1b,$1b,$1b,$f3,$00 714 .byte $ff,$00,$1e,$03,$81,$9f,$b1,$b1 715 .byte $1f,$00,$19,$1b,$f8,$19,$1b,$b3 716 .byte $e1,$00,$30,$30,$3f,$b1,$b1,$b1 717 .byte $3f,$00 718 719; fifth column 720 721 .byte $63,$63,$7f,$63,$63,$36,$1c,$00 722 .byte $00,$80,$80,$00,$80,$80,$00,$00 723 .byte $18,$18,$58,$f8,$f8,$b8,$18,$00 724 .byte $ff,$00,$20,$00,$90,$98,$9c,$8e 725 .byte $0e,$00,$f0,$18,$18,$f0,$00,$30 726 .byte $e0,$00,$0c,$0c,$0c,$9e,$b3,$b3 727 .byte $33,$00 728 729; sound data (bounce noise) 730;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 731 ORG $F700 732SoundFData: .byte $1f,$19,$1a,$1b,$1c,$1d,$1e,$1f 733 ORG $F750 734SoundCData: .byte $07,$06,$06,$06,$06,$06,$06,$06 735 ORG $F7A0 736SoundVData: .byte $0f,$0b,$0a,$08,$06,$04,$02,$00 737 738 739 ORG $F800 740; first column 741 742 .byte $00,$00,$00,$00,$00,$00,$00,$00 743 .byte $01,$01,$03,$06,$06,$0d,$03,$23 744 .byte $23,$23,$23,$27,$47,$46,$48,$f8 745 .byte $38,$38,$38,$3c,$3c,$3c,$3c,$3d 746 .byte $19,$01,$21,$20,$10,$10,$18,$08 747 .byte $0c,$0d,$01,$00,$00,$00,$00,$00 748 .byte $00,$00 749 750; second column 751 752 .byte $00,$00,$03,$03,$0e,$0e,$8e,$8e 753 .byte $9f,$1f,$18,$00,$60,$e0,$e0,$e0 754 .byte $e0,$e0,$e3,$ef,$9f,$1f,$1f,$1f 755 .byte $1f,$0f,$0f,$0f,$0e,$10,$38,$f8 756 .byte $f8,$fc,$fc,$fc,$fe,$fe,$79,$60 757 .byte $40,$e0,$e0,$f0,$78,$3c,$1d,$08 758 .byte $00,$00 759 760; third column 761 762 .byte $00,$40,$78,$3e,$1f,$0f,$06,$08 763 .byte $3c,$fc,$fc,$fe,$fe,$7f,$7e,$78 764 .byte $60,$40,$c0,$c0,$c0,$e0,$e0,$e0 765 .byte $e1,$e7,$ff,$0f,$0f,$0f,$0f,$07 766 .byte $07,$07,$02,$04,$3c,$fc,$fe,$fe 767 .byte $fe,$7e,$7f,$38,$00,$70,$f8,$78 768 .byte $1c,$0e 769 770; fourth column 771 772 .byte $00,$00,$00,$00,$98,$fc,$1e,$1f 773 .byte $0f,$07,$03,$00,$0e,$7e,$fe,$7f 774 .byte $7f,$7f,$3f,$3f,$3f,$3c,$00,$60 775 .byte $e0,$e0,$e0,$e0,$f0,$f0,$f0,$f1 776 .byte $ff,$cf,$0f,$0f,$07,$07,$07,$06 777 .byte $08,$38,$f0,$f1,$72,$70,$60,$60 778 .byte $40,$00 779 780; fifth column 781 782 .byte $00,$00,$00,$00,$00,$00,$00,$00 783 .byte $80,$d0,$b8,$18,$18,$0c,$0c,$06 784 .byte $06,$06,$84,$9c,$7c,$7c,$7c,$3c 785 .byte $3c,$3c,$3e,$3e,$3c,$22,$42,$c2 786 .byte $c2,$c4,$c4,$c4,$c0,$88,$f0,$60 787 .byte $c0,$c0,$80,$80,$00,$00,$00,$00 788 .byte $00,$00 789 790 791 ORG $F900 792 793; first column 794 795 .byte $00,$00,$00,$00,$00,$00,$00,$00 796 .byte $01,$01,$02,$06,$04,$0b,$17,$27 797 .byte $27,$27,$07,$0f,$4f,$4e,$40,$b0 798 .byte $70,$70,$30,$30,$30,$30,$38,$39 799 .byte $3f,$27,$07,$23,$01,$11,$11,$00 800 .byte $08,$09,$03,$01,$00,$00,$00,$00 801 .byte $00,$00 802 803; second column 804 805 .byte $00,$00,$01,$01,$18,$1c,$dc,$9c 806 .byte $3c,$3c,$3b,$61,$01,$81,$81,$81 807 .byte $81,$81,$83,$8f,$ff,$7f,$7f,$7f 808 .byte $3f,$3f,$3f,$3f,$3e,$20,$00,$e0 809 .byte $e0,$e0,$f0,$f0,$f8,$f8,$ff,$e3 810 .byte $81,$81,$c0,$e0,$f0,$78,$3f,$10 811 .byte $00,$00 812 813; third column 814 815 .byte $00,$01,$c0,$fc,$7e,$3f,$1e,$00 816 .byte $30,$f0,$f8,$f8,$f8,$fc,$fd,$fb 817 .byte $e3,$81,$01,$01,$00,$00,$00,$00 818 .byte $81,$87,$9f,$7f,$7f,$3f,$3f,$3f 819 .byte $1f,$1f,$1e,$08,$30,$f0,$f0,$f8 820 .byte $f8,$f8,$fc,$fb,$61,$41,$f0,$f8 821 .byte $1c,$00 822 823; fourth column 824 825 .byte $00,$80,$60,$18,$00,$7c,$7c,$3e 826 .byte $3f,$1f,$1f,$0c,$08,$78,$fc,$fc 827 .byte $fc,$fe,$fe,$fe,$ff,$fc,$60,$00 828 .byte $80,$80,$80,$c0,$c0,$c0,$c0,$c1 829 .byte $ef,$df,$1f,$1f,$1f,$1f,$1f,$1e 830 .byte $10,$21,$e1,$e1,$e3,$e4,$e0,$c0 831 .byte $80,$00 832 833; fifth column 834 835 .byte $00,$00,$00,$00,$00,$00,$00,$00 836 .byte $00,$90,$b8,$38,$38,$1c,$1c,$0e 837 .byte $0e,$0e,$00,$19,$f8,$f8,$f8,$f8 838 .byte $f8,$f8,$f8,$fc,$ff,$66,$06,$86 839 .byte $86,$84,$8c,$0c,$0c,$00,$60,$c0 840 .byte $c0,$80,$80,$00,$00,$00,$00,$00 841 .byte $00,$00 842 843 844 845;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 846 ORG $FA00 847; first column 848 849 .byte $00,$00,$00,$00,$00,$00,$00,$00 850 .byte $01,$02,$06,$04,$08,$0b,$17,$2f 851 .byte $2f,$0f,$0f,$0e,$5e,$5f,$10,$a0 852 .byte $60,$60,$60,$60,$60,$60,$60,$31 853 .byte $37,$2f,$0f,$07,$07,$03,$13,$01 854 .byte $01,$09,$03,$01,$00,$00,$00,$00 855 .byte $00,$00 856 857; second column 858 859 .byte $00,$00,$00,$03,$18,$38,$38,$38 860 .byte $38,$78,$7f,$e7,$87,$07,$07,$07 861 .byte $07,$03,$00,$0c,$7c,$fc,$fc,$fe 862 .byte $fe,$fe,$fe,$fe,$ff,$60,$40,$80 863 .byte $80,$c0,$c0,$c0,$e0,$e0,$e7,$ef 864 .byte $87,$03,$83,$81,$c1,$60,$33,$0b 865 .byte $00,$00 866 867; third column 868 869 .byte $00,$06,$c1,$f0,$f8,$7c,$7f,$30 870 .byte $20,$c0,$e0,$e0,$e0,$f0,$f1,$f7 871 .byte $e7,$87,$07,$07,$03,$03,$03,$03 872 .byte $00,$06,$1e,$fe,$fe,$ff,$ff,$ff 873 .byte $7f,$7f,$7e,$78,$00,$c0,$e0,$e0 874 .byte $f0,$f0,$f0,$ff,$e7,$83,$c1,$e1 875 .byte $f1,$10 876 877; fourth column 878 879 .byte $00,$00,$80,$60,$10,$70,$f8,$fc 880 .byte $fc,$7e,$3f,$3c,$10,$60,$e0,$f0 881 .byte $f0,$f0,$f8,$f8,$fc,$ff,$e3,$83 882 .byte $03,$01,$01,$01,$01,$01,$01,$00 883 .byte $0e,$be,$7e,$7e,$7e,$7e,$7e,$3f 884 .byte $31,$03,$c3,$c3,$c2,$e4,$e0,$e0 885 .byte $c0,$00 886 887; fifth column 888 889 .byte $00,$00,$00,$00,$00,$00,$80,$40 890 .byte $30,$00,$70,$f0,$78,$78,$38,$3c 891 .byte $3c,$1e,$18,$11,$f1,$f1,$f1,$f1 892 .byte $f1,$f0,$f0,$f8,$fa,$e6,$8e,$0e 893 .byte $0c,$0c,$0c,$0c,$18,$10,$40,$c0 894 .byte $80,$80,$00,$00,$00,$00,$00,$00 895 .byte $00,$00 896 897 898 ORG $FB00 899 900; first column 901 902 .byte $00,$00,$00,$00,$00,$00,$00,$01 903 .byte $01,$02,$06,$04,$09,$12,$1e,$0e 904 .byte $1e,$1c,$1c,$1c,$1c,$3d,$33,$03 905 .byte $c3,$c3,$c3,$41,$41,$61,$61,$60 906 .byte $66,$7f,$0f,$0f,$0f,$07,$07,$03 907 .byte $03,$00,$07,$03,$01,$00,$00,$00 908 .byte $00,$00 909 910; second column 911 912 .byte $00,$00,$01,$03,$01,$11,$70,$70 913 .byte $70,$70,$e7,$ff,$9f,$1f,$1f,$1f 914 .byte $1f,$1f,$1c,$10,$70,$f0,$f0,$f0 915 .byte $f8,$f8,$f8,$f8,$f9,$e7,$c3,$03 916 .byte $03,$01,$01,$01,$80,$80,$87,$df 917 .byte $bf,$1f,$0f,$87,$c3,$61,$33,$13 918 .byte $00,$00 919 920; third column 921 922 .byte $00,$02,$e3,$e1,$f0,$f0,$f9,$f3 923 .byte $c3,$01,$81,$80,$80,$80,$c1,$c7 924 .byte $df,$9f,$1f,$1f,$1f,$0f,$0f,$0f 925 .byte $0e,$00,$18,$f8,$f8,$f8,$fc,$fc 926 .byte $fc,$fc,$ff,$f9,$c1,$01,$00,$80 927 .byte $80,$c0,$e0,$e7,$ef,$87,$07,$c3 928 .byte $f3,$32 929 930; fourth column 931 932 .byte $00,$00,$c0,$f0,$62,$41,$e0,$f0 933 .byte $f8,$fc,$fe,$fd,$70,$00,$80,$c0 934 .byte $c0,$c0,$e0,$e0,$e0,$f3,$ef,$8f 935 .byte $0f,$0f,$0f,$07,$07,$07,$07,$02 936 .byte $0c,$3c,$fc,$fc,$fc,$fc,$fc,$fd 937 .byte $f3,$47,$87,$87,$86,$8e,$c8,$d0 938 .byte $80,$00 939 940; fifth column 941 942 .byte $00,$00,$00,$00,$00,$00,$80,$c0 943 .byte $70,$20,$60,$e0,$f0,$f0,$f8,$78 944 .byte $78,$7c,$3a,$23,$c3,$c3,$c3,$c1 945 .byte $e1,$e1,$e1,$e1,$e2,$fe,$9c,$1c 946 .byte $1c,$1c,$3c,$38,$38,$30,$48,$90 947 .byte $90,$a0,$40,$00,$00,$00,$00,$00 948 .byte $00,$00 949 950 951;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 952 ORG $FC00 953; first column 954 955 .byte $00,$00,$00,$00,$00,$00,$00,$00 956 .byte $02,$00,$01,$01,$0b,$12,$0c,$18 957 .byte $18,$18,$38,$38,$38,$31,$3f,$4f 958 .byte $87,$c7,$c7,$47,$47,$47,$47,$46 959 .byte $44,$5c,$1e,$1e,$0e,$0f,$0f,$07 960 .byte $07,$02,$06,$03,$01,$00,$00,$00 961 .byte $00,$00 962 963; second column 964 965 .byte $00,$00,$01,$03,$07,$23,$61,$61 966 .byte $e1,$e1,$c6,$de,$be,$3f,$3f,$3f 967 .byte $3f,$3f,$3c,$30,$40,$c0,$c0,$c0 968 .byte $c0,$c0,$e0,$e0,$e1,$ff,$df,$0f 969 .byte $0f,$07,$07,$07,$03,$03,$04,$9e 970 .byte $fe,$3f,$1f,$1f,$8f,$47,$24,$0f 971 .byte $01,$00 972 973; third column 974 975 .byte $00,$08,$07,$83,$c0,$e0,$f1,$ff 976 .byte $c7,$07,$07,$03,$03,$01,$00,$06 977 .byte $1f,$7f,$7f,$7f,$7f,$7f,$7f,$3f 978 .byte $3e,$38,$20,$e0,$e0,$e0,$e0,$f0 979 .byte $f0,$f0,$f1,$ff,$c7,$07,$03,$03 980 .byte $03,$01,$01,$86,$9f,$9f,$0f,$87 981 .byte $e3,$3c 982 983; fourth column 984 985 .byte $00,$00,$80,$f0,$e6,$43,$c1,$c0 986 .byte $e0,$e0,$f0,$fb,$f3,$83,$03,$01 987 .byte $01,$01,$00,$80,$80,$83,$df,$bf 988 .byte $3f,$3f,$3f,$3f,$1f,$1f,$1f,$1e 989 .byte $10,$20,$e0,$f0,$f0,$f0,$f0,$f1 990 .byte $ff,$cf,$0e,$0e,$0e,$0e,$88,$80 991 .byte $40,$00 992 993; fifth column 994 995 .byte $00,$00,$00,$00,$00,$00,$80,$c0 996 .byte $f0,$60,$40,$c0,$e0,$e0,$f0,$f0 997 .byte $f8,$f8,$fe,$e6,$07,$03,$83,$83 998 .byte $83,$83,$83,$83,$82,$dc,$bc,$38 999 .byte $78,$78,$78,$78,$70,$78,$08,$90 1000 .byte $30,$20,$40,$00,$00,$00,$00,$00 1001 .byte $00,$00 1002 1003 1004 ORG $FD00 1005 1006; first column 1007 1008 .byte $00,$00,$00,$00,$00,$00,$00,$00 1009 .byte $00,$00,$01,$01,$03,$14,$08,$18 1010 .byte $18,$10,$30,$30,$30,$31,$6f,$5f 1011 .byte $8f,$8f,$8f,$0f,$0f,$0f,$0f,$4e 1012 .byte $48,$58,$38,$38,$1c,$1c,$0e,$0e 1013 .byte $0e,$06,$04,$02,$01,$00,$00,$00 1014 .byte $00,$00 1015 1016; second column 1017 1018 .byte $00,$00,$00,$03,$07,$23,$23,$43 1019 .byte $c3,$c3,$84,$9c,$fc,$7c,$7c,$7c 1020 .byte $7c,$fc,$ff,$f1,$81,$01,$81,$81 1021 .byte $80,$80,$80,$80,$81,$9f,$bf,$3f 1022 .byte $3f,$3f,$1f,$1f,$1f,$0f,$08,$18 1023 .byte $7c,$fc,$7e,$3e,$1f,$1f,$04,$0e 1024 .byte $01,$00 1025 1026; third column 1027 1028 .byte $00,$0c,$0f,$07,$83,$81,$c1,$ef 1029 .byte $df,$1f,$0f,$0f,$0f,$07,$06,$00 1030 .byte $1c,$7c,$fc,$fc,$fe,$fe,$fe,$ff 1031 .byte $fe,$f8,$e0,$00,$00,$80,$80,$80 1032 .byte $c0,$c0,$e1,$e7,$df,$1f,$0f,$0f 1033 .byte $0f,$07,$07,$00,$1c,$fe,$3e,$0f 1034 .byte $85,$7c 1035 1036; fourth column 1037 1038 .byte $00,$00,$00,$c0,$fe,$8f,$07,$83 1039 .byte $81,$c0,$e0,$e3,$ff,$8f,$0f,$07 1040 .byte $07,$03,$03,$03,$01,$02,$1e,$7e 1041 .byte $fe,$fe,$fe,$7f,$7f,$7f,$7f,$7e 1042 .byte $70,$00,$c0,$c0,$c0,$c0,$c0,$c1 1043 .byte $ee,$de,$1e,$1c,$1c,$1e,$1c,$10 1044 .byte $20,$00 1045 1046; fifth column 1047 1048 .byte $00,$00,$00,$00,$00,$00,$80,$c0 1049 .byte $e0,$e0,$08,$80,$80,$c4,$c0,$e2 1050 .byte $e0,$f0,$f6,$ee,$0e,$06,$06,$06 1051 .byte $06,$07,$07,$07,$05,$19,$78,$f8 1052 .byte $f0,$f2,$f0,$f0,$f0,$f8,$90,$30 1053 .byte $20,$40,$40,$80,$00,$00,$00,$00 1054 .byte $00,$00 1055 1056 1057 1058 1059;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1060;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1061 ORG $FE00 1062; first column 1063 1064 .byte $00,$00,$00,$00,$00,$00,$00,$01 1065 .byte $01,$03,$03,$07,$07,$04,$08,$10 1066 .byte $10,$30,$30,$31,$21,$20,$6f,$5f 1067 .byte $9f,$9f,$9f,$1f,$1f,$1f,$1f,$4e 1068 .byte $48,$50,$30,$38,$18,$1c,$0c,$0e 1069 .byte $0e,$07,$04,$00,$00,$00,$00,$00 1070 .byte $00,$00 1071 1072; second column 1073 1074 .byte $00,$00,$01,$03,$07,$07,$47,$cf 1075 .byte $cf,$8f,$88,$18,$78,$f8,$f8,$f8 1076 .byte $f8,$fc,$ff,$f3,$83,$03,$03,$01 1077 .byte $01,$01,$01,$01,$00,$9f,$bf,$7f 1078 .byte $7f,$3f,$3f,$3f,$1f,$1f,$18,$10 1079 .byte $78,$fc,$fc,$7e,$3e,$1f,$0c,$00 1080 .byte $00,$00 1081 1082; third column 1083 1084 .byte $00,$3c,$9e,$8f,$07,$83,$80,$8f 1085 .byte $ff,$3f,$1f,$1f,$1f,$0f,$0e,$08 1086 .byte $18,$78,$f8,$f8,$fc,$fc,$fc,$fc 1087 .byte $ff,$f9,$e1,$01,$01,$00,$00,$00 1088 .byte $80,$80,$81,$87,$ff,$3f,$1f,$1f 1089 .byte $0f,$0f,$0f,$00,$18,$7c,$3e,$1e 1090 .byte $0f,$06 1091 1092; fourth column 1093 1094 .byte $00,$00,$00,$80,$fe,$8f,$07,$03 1095 .byte $03,$81,$c0,$c3,$ef,$9f,$1f,$0f 1096 .byte $0f,$0f,$07,$07,$03,$00,$1c,$7c 1097 .byte $fc,$fe,$fe,$fe,$fe,$fe,$fe,$ff 1098 .byte $f1,$41,$81,$81,$81,$81,$81,$c0 1099 .byte $ce,$fc,$3c,$3c,$3c,$38,$38,$30 1100 .byte $20,$00 1101 1102; fifth column 1103 1104 .byte $00,$00,$00,$00,$00,$00,$00,$80 1105 .byte $c0,$f0,$88,$08,$80,$84,$c4,$c2 1106 .byte $c2,$e0,$e6,$ee,$0e,$0e,$0e,$0e 1107 .byte $0e,$0f,$0f,$07,$05,$19,$70,$f0 1108 .byte $f0,$f0,$f0,$f0,$e4,$e8,$b0,$30 1109 .byte $60,$40,$c0,$80,$00,$00,$00,$00 1110 .byte $00,$00 1111 1112 1113 ORG $FF00 1114; first column 1115 1116 .byte $00,$00,$00,$00,$00,$00,$00,$00 1117 .byte $00,$01,$01,$03,$07,$04,$01,$31 1118 .byte $31,$31,$21,$21,$61,$60,$4e,$fe 1119 .byte $3e,$1e,$1e,$1e,$1f,$1f,$1f,$1e 1120 .byte $18,$10,$30,$30,$18,$18,$1c,$0c 1121 .byte $0e,$0f,$00,$00,$00,$00,$00,$00 1122 .byte $00,$00 1123 1124; second column 1125 1126 .byte $00,$00,$03,$03,$07,$07,$87,$cf 1127 .byte $8f,$8f,$88,$10,$70,$f0,$f0,$f8 1128 .byte $f8,$f8,$fb,$f7,$87,$07,$07,$07 1129 .byte $03,$03,$03,$03,$02,$1e,$3e,$fe 1130 .byte $fe,$7f,$7f,$7f,$3f,$3f,$38,$00 1131 .byte $60,$f0,$f8,$7c,$3c,$1e,$0c,$0c 1132 .byte $00,$00 1133 1134; third column 1135 1136 .byte $00,$20,$fe,$8f,$07,$07,$02,$8e 1137 .byte $be,$7f,$3f,$3f,$3f,$1f,$1e,$18 1138 .byte $00,$70,$f0,$f0,$f0,$f8,$f8,$f8 1139 .byte $fd,$fb,$e3,$03,$03,$03,$01,$01 1140 .byte $01,$01,$00,$07,$bf,$7f,$7f,$3f 1141 .byte $3f,$1f,$1f,$08,$10,$78,$7c,$1e 1142 .byte $0f,$00 1143 1144; fourth column 1145 1146 .byte $00,$00,$00,$00,$dc,$be,$0f,$07 1147 .byte $03,$01,$81,$83,$cf,$bf,$3f,$1f 1148 .byte $1f,$1f,$0f,$0f,$0f,$04,$18,$78 1149 .byte $f8,$fc,$fc,$fc,$fc,$fc,$fc,$fd 1150 .byte $f3,$c3,$03,$03,$03,$03,$83,$82 1151 .byte $8c,$bc,$7c,$38,$39,$38,$38,$60 1152 .byte $40,$00 1153 1154; fifth column 1155 1156 .byte $00,$00,$00,$00,$00,$00,$00,$80 1157 .byte $c0,$f0,$98,$08,$08,$84,$84,$86 1158 .byte $c2,$c2,$c4,$fe,$1e,$1e,$1e,$1e 1159 .byte $0e,$0e,$0e,$0e,$0d,$11,$70,$f2 1160 .byte $e2,$e2,$e0,$e0,$e0,$c8,$b0,$30 1161 .byte $60,$40,$c0,$80,$00,$00,$00,$00 1162 .byte $00,$00 1163 1164 1165 1166 1167 1168 1169 1170;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1171; 1172; Set up the 6502 interrupt vector table 1173; 1174 ORG IntVectors 1175NMI .word Cart_Init 1176Reset .word Cart_Init 1177IRQ .word Cart_Init 1178 1179; END 1180