Advertisement
booker

The Most Elaborate Hello, World! I've Ever Written

Jul 31st, 2011
323
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;ASM6 NROM template from http://nesdev.parodius.com/bbs/viewtopic.php?t=6160
  2. ;----------------------------------------------------------------
  3. ; constants
  4. ;----------------------------------------------------------------
  5.  
  6. ;iNES constants
  7.  
  8. PRG_COUNT = 1 ;1 = 16KB
  9. CHR_COUNT = 1 ;1 = 8KB,  0 = CHR_RAM
  10. MIRRORING = %0001 ;%0000 = horizontal, %0001 = vertical, %1000 = four-screen
  11.  
  12. ;--- Initial Values --------------------------------------------
  13.  
  14. IFDEF PAL
  15.     FPS = 55
  16. ELSE
  17.     FPS = 60
  18. ENDIF
  19.  
  20. SPEED = 2
  21. HORZ_SCROLL = $00 ; These scroll values show the screen "logically"
  22. VERT_SCROLL = $F8 ; (tiles are clipped by default)
  23.  
  24. INIT_PRINT_RATE = 8
  25. INIT_MESSAGE_POINTER = MessageHello
  26. MAX_TILE_STACK = #$20 ; copy at most this many tiles
  27.  
  28. PPU_MASK = %00111010
  29.  
  30. ;---------------------------------------------------------------
  31.  
  32. ;; Global Constants
  33. ;; For enabling the sound channels
  34. APU_SQ1 = %00000001
  35. APU_SQ2 = %00000010
  36. APU_TRI = %00000100
  37. APU_NOI = %00001000
  38. APU_DPC = %00010000
  39. ; May want to add more APU constants
  40.  
  41. ;; Button constants
  42. BUTTON_A        = %00000001
  43. BUTTON_B        = %00000010
  44. BUTTON_SELECT   = %00000100
  45. BUTTON_START    = %00001000
  46. BUTTON_UP       = %00010000
  47. BUTTON_DOWN     = %00100000
  48. BUTTON_LEFT     = %01000000
  49. BUTTON_RIGHT    = %10000000
  50.  
  51. ;  Super cool text-engine functions
  52. TXT_CHANGE_RATE_TO  = $80 ; frames between each character
  53. TXT_PAUSE_FOR       = $81 ; # of frames
  54. TXT_ADVANCE_CURSOR  = $82
  55. ;TXT_PLAY_MUSIC_TRACK= $82 ; track number
  56. ;TXT_CARRIAGE_RETURN = $84
  57. ;TXT_CR              = TXT_CARRIAGE_RETURN
  58. ;TXT_END_OF_MESSAGE  = $85
  59. TXT_END_OF_TEXT     = $00 ; or just end with 0
  60.  
  61.  
  62. ;----------------------------------------------------------------
  63. ; variables
  64. ;----------------------------------------------------------------
  65.  
  66.     .enum $0000  ; Zero-Page; Put most used variables here
  67.  
  68.     ;NOTE: declare variables using the DSB and DSW directives, like this:
  69.  
  70.     PPUReady    .dsb 1
  71.  
  72.     FrameCount  .dsb 1
  73.     SecondCount .dsb 1
  74.     MinuteCount .dsb 1 ; just to be thorough
  75.  
  76.     Joy1Buttons .dsb 1
  77.     Joy1Old     .dsb 1
  78.     Joy1Down    .dsb 1
  79.  
  80.     tb_MessagePointer  .dsw 1 ; A note about pointers:
  81.     tb_MessagePosition .dsb 1 ; subroutine pointers *must*
  82.     tb_FramesTillPrint .dsb 1 ; be stored in the zero-page
  83.     tb_PrintRate       .dsb 1
  84.     tb_PauseFor        .dsb 1
  85.  
  86.     tb_TilePointer     .dsb 1
  87.     tb_ScreenPosition  .dsb 1
  88.     tb_TextBoxWidth    .dsb 1
  89.     tb_TextBoxHeight   .dsb 1
  90.     .ende
  91.  
  92.  
  93.    .enum $0100
  94.    ; be careful here; the stack resides in the upper portions of this page
  95.    ; Do not put many things here!
  96.    .ende
  97.  
  98.  
  99.    .enum $0200
  100.    ; This page is typically meant for OAM sprite memory transfer
  101.    ; The ENTIRE page is transfered verbatim, so use this as a mirror
  102.    .ende
  103.  
  104.    tb_TileQueue = $0300
  105.  
  106. ;----------------------------------------------------------------
  107. ; iNES header
  108. ;----------------------------------------------------------------
  109.  
  110.    .db "NES", $1a ;identification of the iNES header
  111.    .db PRG_COUNT ;number of 16KB PRG-ROM pages
  112.    .db $01 ;number of 8KB CHR-ROM pages
  113.    .db $00|MIRRORING ;mapper 0 and mirroring
  114.    .dsb 9, $00 ;clear the remaining bytes
  115.  
  116. ;----------------------------------------------------------------
  117. ; program bank(s)
  118. ;----------------------------------------------------------------
  119.  
  120.    .base $10000-(PRG_COUNT*$4000) ; PRG-ROM bank 2; constant in UNROM
  121.  
  122. Reset:
  123.     ;NOTE: initialization code goes here
  124.     ;The following init code stolen from
  125.     ;http://wiki.nesdev.com/w/index.php/Init_code
  126.     sei        ; ignore IRQs
  127.     cld        ; disable the non-existant decimal mode
  128.     ldx #$40
  129.     stx $4017  ; disable APU frame IRQ
  130.     ldx #$ff
  131.     txs        ; Set up stack
  132.     inx        ; now X = 0
  133.     stx $2000  ; disable NMI
  134.     stx $2001  ; disable rendering
  135.     stx $4010  ; disable DMC IRQs
  136.  
  137.     ; Clear the vblank flag, so we know that we are waiting for the
  138.     ; start of a vertical blank and not powering on with the
  139.     ; vblank flag spuriously set
  140.     bit $2002
  141.  
  142.     ; First of two waits for vertical blank to make sure that the
  143.     ; PPU has stabilized
  144.     jsr WaitForVBlank
  145.  
  146.     ; We now have about 30,000 cycles to burn before the PPU stabilizes.
  147.     ; One thing we can do with this time is put RAM in a known state.
  148.     ; Here we fill it with $00, which matches what (say) a C compiler
  149.     ; expects for BSS.  Conveniently, X is still 0.
  150.     txa
  151. @clrmem:
  152.     sta $000,x
  153.     sta $100,x
  154.     sta $300,x
  155.     sta $400,x
  156.     sta $500,x
  157.     sta $600,x
  158.     sta $700,x  ; Remove this if you're storing reset-persistent data
  159.  
  160.     ; We skipped $200,x on purpose.  Usually, RAM page 2 is used for the
  161.     ; display list to be copied to OAM.  OAM needs to be initialized to
  162.     ; $EF-$FF, not 0, or you'll get a bunch of garbage sprites at (0, 0).
  163.  
  164.     inx
  165.     bne @clrmem
  166.  
  167.     ; Other things you can do between vblank waits are set up audio
  168.     ; or set up other mapper registers.
  169.    
  170.     jsr WaitForVBlank
  171.  
  172. Start:
  173.     jsr LoadPalettes
  174.     jsr LoadSprites
  175.     jsr LoadInitialScreen
  176.  
  177. InitVars:
  178.     lda #FPS
  179.     sta FrameCount
  180.  
  181.     lda #INIT_PRINT_RATE
  182.     sta tb_PrintRate
  183.     ;sta tb_FramesTillPrint
  184.     lda #<INIT_MESSAGE_POINTER
  185.     sta <tb_MessagePointer
  186.     lda #>INIT_MESSAGE_POINTER
  187.     sta tb_MessagePointer+1 ; note to self: ASM6 is bugged ;_;
  188.                          ; OR maybe it's just a feature!
  189.  
  190.     lda #$00
  191.     sta tb_MessagePosition
  192.  
  193.     ; Turn on the PPU to draw the first frame
  194.     lda #%10010000
  195.     sta $2000
  196.     lda #PPU_MASK ;turn this off if changing mid-frame
  197.     sta $2001
  198.  
  199. ; -- MAIN LOOP OMG! -------------------------------------------
  200.  
  201. GameLoop:
  202.     jsr WaitForPPUReady
  203.     jsr UpdatePPU
  204.     jsr ReadJoy1
  205.     jsr MakeTextBox
  206.     jsr UpdateFrameCounter
  207.     jmp GameLoop
  208.  
  209.  
  210. ; -- END MAIN LOOP! -------------------------------------------
  211.  
  212.  
  213. UpdatePPU:
  214.     lda #$00    ; turn PPU off for memory transfers
  215.     sta $2001
  216.  
  217.     ; Sprite DMA
  218.     lda #$00
  219.     sta $2003
  220.     lda #$02
  221.     sta $4014
  222.  
  223.     ; Store debug values in the background.
  224.     DebugVar1 = tb_FramesTillPrint
  225.     DebugVar2 = tb_PrintRate
  226.     ;------------------------------------------
  227.     lda $2002 ; unlatch the address lock
  228.     lda #$20  ; cool hand-coded address, bro!
  229.     sta $2006
  230.     lda #$44
  231.     sta $2006
  232.     lda DebugVar1
  233.     and #$0f
  234.     ora #$30
  235.     sta $2007
  236.     lda DebugVar2
  237.     and #$0f
  238.     ora #$30
  239.     sta $2007
  240.  
  241.     jsr LoadTilesIntoPPU
  242.  
  243.     ; Set the scroll (probably to zero)
  244.     ldx #HORZ_SCROLL
  245.     stx $2005
  246.     ldx #VERT_SCROLL
  247.     stx $2005
  248.  
  249.     ; Turn PPU on again
  250.     lda #PPU_MASK
  251.     sta $2001
  252.  
  253.     ;; PPU Update done
  254.     rts
  255.  
  256.  
  257. UpdateFrameCounter:
  258.     ; Handle the frame counter
  259.     dec FrameCount
  260.     bne @FrameCountDone
  261.     ;reset timer
  262.     lda #FPS
  263.     sta FrameCount
  264.     inc SecondCount
  265.     lda SecondCount
  266.     cmp #$60
  267.     bne @FrameCountDone
  268.     lda #$00
  269.     sta SecondCount
  270.     inc MinuteCount
  271.     @FrameCountDone:
  272.     rts
  273.  
  274.  
  275. ;; Initialization Subroutines
  276. LoadPalettes:
  277.     lda $2002 ; read PPU status to reset the high/low latch
  278.     lda #$3f
  279.     sta $2006
  280.     lda #$00
  281.     sta $2006
  282.     @LoadPalettesLoop:
  283.         lda InitialPalette, x
  284.         sta $2007
  285.         inx
  286.         cpx #$20
  287.         bne @LoadPalettesLoop
  288.     rts
  289.  
  290. LoadSprites:
  291.     rts
  292.  
  293. LoadInitialScreen:
  294.     lda $2002 ; unlock addresses, as always
  295.     lda #$20
  296.     sta $2006
  297.     lda #$00
  298.     sta $2006
  299.     tax
  300.     ldy #14
  301.     lda #$00  ; the tile desired
  302.     @LoadScreenLoop:
  303.         sta $2007
  304.         inx
  305.         bpl @LoadScreenLoop
  306.     ldx #$40
  307.     dey
  308.     bne @LoadScreenLoop
  309.     lda #$00
  310.     @LoadColorLoop:
  311.         sta $2007
  312.         dex
  313.         bne @LoadColorLoop
  314.     rts
  315.  
  316. MakeTextBox:
  317.     @CheckForPause
  318.         ldx tb_PauseFor
  319.         beq @NoPause
  320.         dec tb_PauseFor
  321.         rts
  322.  
  323.     @NoPause:
  324.         ldx tb_FramesTillPrint
  325.         beq @Print
  326.         dec tb_FramesTillPrint
  327.         rts
  328.  
  329.     @Print:
  330.         ldy tb_MessagePosition
  331.         lda (tb_MessagePointer),y
  332.         bne @CheckForOpcode
  333.         rts
  334.  
  335.     @CheckForOpcode:
  336.         bmi @HandleOpcode
  337.  
  338.     @UpdateTileStack:
  339.         ldx tb_TilePointer
  340.         sta tb_TileQueue,x
  341.         inc tb_TilePointer
  342.  
  343.     @CheckForSpace:
  344.         inc tb_MessagePosition ; it's safe to increment here
  345.         cmp #$20  ; 0x20 is the space character in ASCII
  346.         beq @Print
  347.         jsr sfx_Click
  348.         lda tb_PrintRate
  349.         sta tb_FramesTillPrint
  350.         rts
  351.      
  352.     @HandleOpcode
  353.         jsr tb_HandleOpcode
  354.         rts
  355.  
  356. LoadTilesIntoPPU:
  357.     lda tb_TilePointer
  358.     bne @PopTiles
  359.     rts
  360.     @PopTiles:
  361.         lda #$21
  362.         ldy tb_ScreenPosition
  363.         sta $2006
  364.         sty $2006
  365.         ldx #$00
  366.     @TileLoop:
  367.         lda tb_TileQueue,x
  368.         sta $2007
  369.         iny
  370.         inx
  371.         cpx tb_TilePointer
  372.         bne @TileLoop
  373.      lda #$00
  374.      sta tb_TilePointer
  375.      sty tb_ScreenPosition
  376.      rts
  377.        
  378. sfx_Click:
  379.     lda #APU_NOI
  380.     sta $4015
  381.     lda #%10010000 | $8
  382.     sta $400C ;$4000
  383.     lda #$4 ;#$7B
  384.     sta $400E ;$4002
  385.     lda #($05 << 3) ;| $1; That would be 4... lengths...
  386.     sta $400F ;$4003             ; This register's weird.
  387.     rts
  388.        
  389.  
  390. ;--- Text box functions. Woo! ---------------------------------
  391.  
  392. tb_HandleOpcode:
  393.     ; Prepares the RTS trick by taking the opcode,
  394.     ; doubling its value (while chopping off its MSB)
  395.     ; then loading and storing the address index by
  396.     ; that opcode in the jumptable
  397.     asl A
  398.     tax
  399.     lda tb_Jumptable+1, x
  400.     pha
  401.     lda tb_Jumptable, x
  402.     pha
  403.     rts ; does not actually return. goes to opcode function (which returns)
  404.  
  405. tb_SetPause:
  406.     inc tb_MessagePosition
  407.     ldy tb_MessagePosition
  408.     lda (tb_MessagePointer),y
  409.     sta tb_PauseFor
  410.     inc tb_MessagePosition
  411.     rts
  412.  
  413. tb_SetRate:
  414.     ldy tb_MessagePosition
  415.     iny
  416.     lda (tb_MessagePointer),y
  417.     sta tb_PrintRate
  418.     sta tb_FramesTillPrint
  419.     iny
  420.     sty tb_MessagePosition
  421.     rts
  422.  
  423. tb_AdvanceCursor:
  424.     ldy tb_MessagePosition
  425.     iny
  426.     lda (tb_MessagePointer),y
  427.     clc
  428.     adc tb_ScreenPosition
  429.     sta tb_ScreenPosition
  430.     iny
  431.     sty tb_MessagePosition
  432.     rts
  433.  
  434.  
  435. ;--- General purpose subroutines -------------------------------
  436.  
  437. ReadJoy1:
  438.     ; Note the constant: the gamepad only reads the first 3 bits
  439.     ; so this process can shave a few extra cycles
  440.     ; I'm doing it here for the lulz, mostly; Efficiency is soooo 1994
  441.  
  442.     lda Joy1Buttons
  443.     sta Joy1Old
  444.  
  445.     ldy #%00001001  
  446.     ; tell the controller to save state
  447.     sty $4016  
  448.     dey
  449.     ; now tell it to give us all its precious button info. MWUHAHAHAH!
  450.     sty $4016      
  451.    
  452.     ldx #$08
  453.     @ButtonLoop
  454.         lda $4016
  455.         lsr A     ; Load the button into carry
  456.         ; rotate the carry's--and button's--state into memory
  457.         ror Joy1Buttons
  458.         dex
  459.         bne @ButtonLoop
  460.  
  461.     lda Joy1Old
  462.     eor #$ff        ; invert bits
  463.     and Joy1Buttons
  464.     sta Joy1Down    ; yay! ButtonDown events!
  465.     rts
  466.  
  467. WaitForVBlank:
  468.     ; For use during reset
  469.     ; or when NMI is disabled
  470.     bit $2002
  471.     bpl WaitForVBlank
  472.     rts
  473.  
  474. WaitForPPUReady:
  475.     ; For use with "NMI Thread"
  476.     lda PPUReady
  477.     @CheckNMI:
  478.         cmp PPUReady
  479.         beq @CheckNMI
  480.     rts
  481.  
  482. ;; Interupt handlers
  483. NMI:
  484.     inc PPUReady
  485.     rti
  486.  
  487. IRQ:
  488.    rti
  489.  
  490. ;----------------------------------------------------------------
  491. ; Constant Data
  492. ;----------------------------------------------------------------
  493.  
  494.     .org $E000 ; initial graphics data
  495. InitialPalette:
  496.     ; Background palettes
  497.     .db $0F,$30,$10,$00
  498.     .db $0F,$30,$16,$36
  499.     .db $0F,$10,$00,$28
  500.     .db $0F,$02,$06,$0A
  501.     ; Sprite palettes
  502.     .db $0F,$30,$16,$36
  503.     .db $0F,$10,$00,$28
  504.     .db $0F,$20,$06,$37
  505.     .db $0F,$02,$38,$3C
  506.  
  507.  
  508.     .org $E200 ; Textbox jumptable!
  509. tb_Jumptable:
  510.     .dw tb_SetRate-1 ; -1 for RTS trick; normal for RTI
  511.     .dw tb_SetPause-1
  512.     .dw tb_AdvanceCursor-1
  513.    
  514.  
  515.     .org $E300 ; MESSAGES!
  516. MessageHello:
  517.     .db TXT_ADVANCE_CURSOR, 9
  518.     .db "Hello, ", TXT_PAUSE_FOR,20
  519.     .db TXT_CHANGE_RATE_TO, 2
  520.     .db "world!"
  521.     .db 0
  522.  
  523. MessageSpektor:
  524.     .db TXT_PAUSE_FOR, 45
  525.     .db TXT_CHANGE_RATE_TO, 4
  526.     .db " I",TXT_PAUSE_FOR, 16, TXT_CHANGE_RATE_TO, 1
  527.     .db " (OH!)",TXT_PAUSE_FOR, 11, TXT_CHANGE_RATE_TO, 4
  528.     .db " must", TXT_PAUSE_FOR, 26
  529.     .db " go on stand",TXT_PAUSE_FOR, 34
  530.     .db "ing    ",TXT_PAUSE_FOR, 42, TXT_CHANGE_RATE_TO, 3
  531.     .db " You can't", TXT_PAUSE_FOR, 36
  532.     .db " break that",TXT_PAUSE_FOR, 36
  533.     .db " which     "
  534.     .db " isn't ",TXT_PAUSE_FOR, 48
  535.     .db "yours"
  536.     .db 0
  537.  
  538.  
  539.  
  540. ;----------------------------------------------------------------
  541. ; interrupt vectors
  542. ;----------------------------------------------------------------
  543.  
  544.     .org $fffa
  545.  
  546.     .dw NMI
  547.     .dw Reset
  548.     .dw IRQ
  549.  
  550. ;----------------------------------------------------------------
  551. ; CHR-ROM bank
  552. ;----------------------------------------------------------------
  553.  
  554. SpriteNROMCHR:
  555.     .dsb 4096, 0
  556. BGNROMCHR:
  557.     .dsb 8*66, 0
  558.     .db $30,$78,$78,$78,$30,$30,$00,$30
  559.     .db $00,$00,$00,$00,$00,$00,$00,$00
  560.     .db $CC,$CC,$88,$00,$00,$00,$00,$00
  561.     .dsb 8*3, 0
  562.     .db $18,$14,$10,$10,$70,$F0,$60,$00
  563.     .dsb 8*5, 0
  564.     .db $30,$30,$20,$00,$00,$00,$00,$00
  565.     .db $00,$00,$00,$00,$00,$00,$00,$00
  566.     .db $06,$0C,$18,$18,$18,$0C,$06,$00
  567.     .db $00,$00,$00,$00,$00,$00,$00,$00
  568.     .db $C0,$60,$30,$30,$30,$60,$C0,$00
  569.     .dsb 8*5, 0
  570.     .db $00,$00,$00,$00,$00,$C0,$C0,$40
  571.     .dsb 8*3, 0
  572.     .db $00,$00,$00,$00,$00,$C0,$C0,$00
  573.     .dsb 8*3, 0
  574.     .db $38,$4C,$C6,$C6,$C6,$64,$38,$00
  575.     .db $00,$00,$00,$00,$00,$00,$00,$00
  576.     .db $30,$70,$30,$30,$30,$30,$FC,$00
  577.     .db $00,$00,$00,$00,$00,$00,$00,$00
  578.     .db $7C,$C6,$0E,$3C,$78,$E0,$FE,$00
  579.     .db $00,$00,$00,$00,$00,$00,$00,$00
  580.     .db $7E,$0C,$18,$3C,$06,$C6,$7C,$00
  581.     .db $00,$00,$00,$00,$00,$00,$00,$00
  582.     .db $1C,$3C,$6C,$CC,$FE,$0C,$0C,$00
  583.     .db $00,$00,$00,$00,$00,$00,$00,$00
  584.     .db $FC,$C0,$FC,$06,$06,$C6,$7C,$00
  585.     .db $00,$00,$00,$00,$00,$00,$00,$00
  586.     .db $3C,$60,$C0,$FC,$C6,$C6,$7C,$00
  587.     .db $00,$00,$00,$00,$00,$00,$00,$00
  588.     .db $FE,$C6,$0C,$18,$30,$30,$30,$00
  589.     .db $00,$00,$00,$00,$00,$00,$00,$00
  590.     .db $7C,$C6,$C6,$7C,$C6,$C6,$7C,$00
  591.     .db $00,$00,$00,$00,$00,$00,$00,$00
  592.     .db $7C,$C6,$C6,$7E,$06,$0C,$78,$00
  593.     .db $00,$00,$00,$00,$00,$00,$00,$00
  594.     .db $00,$C0,$C0,$00,$00,$C0,$C0,$00
  595.     .db $00,$00,$00,$00,$00,$00,$00,$00
  596.     .db $00,$C0,$C0,$00,$00,$C0,$C0,$40
  597.     .dsb 8*7, 0
  598.     .db $78,$CC,$0C,$0C,$38,$30,$00,$30
  599.     .dsb 8*3, 0
  600.     .db $38,$6C,$C6,$C6,$FE,$C6,$C6,$00
  601.     .db $00,$00,$00,$00,$00,$00,$00,$00
  602.     .db $FC,$C6,$C6,$FC,$C6,$C6,$FC,$00
  603.     .db $00,$00,$00,$00,$00,$00,$00,$00
  604.     .db $3C,$66,$C0,$C0,$C0,$66,$3C,$00
  605.     .db $00,$00,$00,$00,$00,$00,$00,$00
  606.     .db $F8,$CC,$C6,$C6,$C6,$CC,$F8,$00
  607.     .db $00,$00,$00,$00,$00,$00,$00,$00
  608.     .db $FE,$C0,$C0,$FC,$C0,$C0,$FE,$00
  609.     .db $00,$00,$00,$00,$00,$00,$00,$00
  610.     .db $FE,$C0,$C0,$FC,$C0,$C0,$C0,$00
  611.     .db $00,$00,$00,$00,$00,$00,$00,$00
  612.     .db $3E,$60,$C0,$CE,$C6,$66,$3E,$00
  613.     .db $00,$00,$00,$00,$00,$00,$00,$00
  614.     .db $C6,$C6,$C6,$FE,$C6,$C6,$C6,$00
  615.     .db $00,$00,$00,$00,$00,$00,$00,$00
  616.     .db $FC,$30,$30,$30,$30,$30,$FC,$00
  617.     .db $00,$00,$00,$00,$00,$00,$00,$00
  618.     .db $1E,$06,$06,$06,$C6,$C6,$7C,$00
  619.     .db $00,$00,$00,$00,$00,$00,$00,$00
  620.     .db $C6,$CC,$D8,$F0,$F8,$DC,$CE,$00
  621.     .db $00,$00,$00,$00,$00,$00,$00,$00
  622.     .db $C0,$C0,$C0,$C0,$C0,$C0,$FC,$00
  623.     .db $00,$00,$00,$00,$00,$00,$00,$00
  624.     .db $C6,$EE,$FE,$FE,$D6,$C6,$C6,$00
  625.     .db $00,$00,$00,$00,$00,$00,$00,$00
  626.     .db $C6,$E6,$F6,$FE,$DE,$CE,$C6,$00
  627.     .db $00,$00,$00,$00,$00,$00,$00,$00
  628.     .db $7C,$C6,$C6,$C6,$C6,$C6,$7C,$00
  629.     .db $00,$00,$00,$00,$00,$00,$00,$00
  630.     .db $FC,$C6,$C6,$C6,$FC,$C0,$C0,$00
  631.     .db $00,$00,$00,$00,$00,$00,$00,$00
  632.     .db $7C,$C6,$C6,$C6,$DE,$CC,$7A,$00
  633.     .db $00,$00,$00,$00,$00,$00,$00,$00
  634.     .db $FC,$C6,$C6,$CE,$F8,$DC,$CE,$00
  635.     .db $00,$00,$00,$00,$00,$00,$00,$00
  636.     .db $78,$CC,$C0,$7C,$06,$C6,$7C,$00
  637.     .db $00,$00,$00,$00,$00,$00,$00,$00
  638.     .db $7E,$18,$18,$18,$18,$18,$18,$00
  639.     .db $00,$00,$00,$00,$00,$00,$00,$00
  640.     .db $C6,$C6,$C6,$C6,$C6,$C6,$7C,$00
  641.     .db $00,$00,$00,$00,$00,$00,$00,$00
  642.     .db $C6,$C6,$C6,$EE,$7C,$38,$10,$00
  643.     .db $00,$00,$00,$00,$00,$00,$00,$00
  644.     .db $C6,$C6,$D6,$FE,$FE,$EE,$C6,$00
  645.     .db $00,$00,$00,$00,$00,$00,$00,$00
  646.     .db $C6,$EE,$7C,$38,$7C,$EE,$C6,$00
  647.     .db $00,$00,$00,$00,$00,$00,$00,$00
  648.     .db $CC,$CC,$CC,$78,$30,$30,$30,$00
  649.     .db $00,$00,$00,$00,$00,$00,$00,$00
  650.     .db $FE,$0E,$1C,$38,$70,$E0,$FE,$00
  651.     .dsb 8*11, 0
  652.     .db $30,$18,$0C,$00,$00,$00,$00,$00
  653.     .db $00,$00,$00,$00,$00,$00,$00,$00
  654.     .db $00,$00,$78,$0C,$7C,$CC,$76,$00
  655.     .db $00,$00,$00,$00,$00,$00,$00,$00
  656.     .db $E0,$60,$7C,$66,$66,$66,$DC,$00
  657.     .db $00,$00,$00,$00,$00,$00,$00,$00
  658.     .db $00,$00,$7C,$C6,$C0,$C6,$7C,$00
  659.     .db $00,$00,$00,$00,$00,$00,$00,$00
  660.     .db $1C,$0C,$7C,$CC,$CC,$CC,$76,$00
  661.     .db $00,$00,$00,$00,$00,$00,$00,$00
  662.     .db $00,$00,$7C,$C6,$FE,$C0,$7C,$00
  663.     .db $00,$00,$00,$00,$00,$00,$00,$00
  664.     .db $3C,$66,$60,$F8,$60,$60,$F0,$00
  665.     .db $00,$00,$00,$00,$00,$00,$00,$00
  666.     .db $00,$00,$76,$CC,$CC,$7C,$0C,$F8
  667.     .db $00,$00,$00,$00,$00,$00,$00,$00
  668.     .db $E0,$60,$6C,$76,$66,$66,$E6,$00
  669.     .db $00,$00,$00,$00,$00,$00,$00,$00
  670.     .db $18,$00,$38,$18,$18,$18,$3C,$00
  671.     .db $00,$00,$00,$00,$00,$00,$00,$00
  672.     .db $06,$00,$06,$06,$06,$66,$66,$3C
  673.     .db $00,$00,$00,$00,$00,$00,$00,$00
  674.     .db $E0,$60,$66,$6C,$78,$6C,$E6,$00
  675.     .db $00,$00,$00,$00,$00,$00,$00,$00
  676.     .db $38,$18,$18,$18,$18,$18,$3C,$00
  677.     .db $00,$00,$00,$00,$00,$00,$00,$00
  678.     .db $00,$00,$EC,$FE,$D6,$D6,$D6,$00
  679.     .db $00,$00,$00,$00,$00,$00,$00,$00
  680.     .db $00,$00,$DC,$66,$66,$66,$66,$00
  681.     .db $00,$00,$00,$00,$00,$00,$00,$00
  682.     .db $00,$00,$7C,$C6,$C6,$C6,$7C,$00
  683.     .db $00,$00,$00,$00,$00,$00,$00,$00
  684.     .db $00,$00,$DC,$66,$66,$7C,$60,$F0
  685.     .db $00,$00,$00,$00,$00,$00,$00,$00
  686.     .db $00,$00,$76,$CC,$CC,$7C,$0C,$1E
  687.     .db $00,$00,$00,$00,$00,$00,$00,$00
  688.     .db $00,$00,$DC,$76,$60,$60,$F0,$00
  689.     .db $00,$00,$00,$00,$00,$00,$00,$00
  690.     .db $00,$00,$7E,$C0,$7C,$06,$FC,$00
  691.     .db $00,$00,$00,$00,$00,$00,$00,$00
  692.     .db $30,$30,$FC,$30,$30,$36,$1C,$00
  693.     .db $00,$00,$00,$00,$00,$00,$00,$00
  694.     .db $00,$00,$CC,$CC,$CC,$CC,$76,$00
  695.     .db $00,$00,$00,$00,$00,$00,$00,$00
  696.     .db $00,$00,$C6,$C6,$C6,$6C,$38,$00
  697.     .db $00,$00,$00,$00,$00,$00,$00,$00
  698.     .db $00,$00,$C6,$D6,$D6,$FE,$6C,$00
  699.     .db $00,$00,$00,$00,$00,$00,$00,$00
  700.     .db $00,$00,$C6,$6C,$38,$6C,$C6,$00
  701.     .db $00,$00,$00,$00,$00,$00,$00,$00
  702.     .db $00,$00,$C6,$C6,$C6,$7E,$06,$FC
  703.     .db $00,$00,$00,$00,$00,$00,$00,$00
  704.     .db $00,$00,$7E,$4C,$18,$32,$7E,$00
  705.     .db $00,$00,$00,$00,$00,$00,$00,$00
  706.     .db $0E,$18,$18,$70,$18,$18,$0E,$00
  707.     .db $00,$00,$00,$00,$00,$00,$00,$00
  708.     .db $18,$18,$18,$18,$18,$18,$18,$00
  709.     .db $00,$00,$00,$00,$00,$00,$00,$00
  710.     .db $70,$18,$18,$0E,$18,$18,$70,$00
  711.     .db $00,$00,$00,$00,$00,$00,$00,$00
  712.     .db $76,$DC,$00,$00,$00,$00,$00,$00
  713.     .dsb 8*3, 0
  714.     .db $00,$38,$44,$40,$49,$43,$33,$03
  715.     .db $FF,$C7,$B8,$B8,$B1,$B3,$C3,$F3
  716.     .db $03,$01,$00,$13,$39,$3F,$37,$33
  717.     .db $F3,$E1,$C0,$80,$80,$80,$80,$80
  718.     .db $00,$00,$00,$C0,$E0,$E0,$50,$F0
  719.     .db $FF,$FF,$1F,$CF,$EF,$E7,$57,$F7
  720.     .db $F0,$20,$C0,$00,$E8,$F8,$FC,$E8
  721.     .db $F7,$27,$C7,$07,$03,$03,$01,$01
  722.     .db $00,$00,$00,$07,$1F,$00,$10,$18
  723.     .db $FF,$F8,$E0,$E0,$E0,$E0,$E0,$E0
  724.     .db $1F,$0F,$0F,$1F,$18,$38,$70,$60
  725.     .db $E0,$F0,$F7,$FE,$D8,$B8,$70,$60
  726.     .db $00,$00,$00,$E0,$F8,$00,$80,$88
  727.     .db $FF,$0F,$07,$07,$07,$07,$07,$07
  728.     .db $F8,$FC,$3E,$F6,$42,$63,$63,$63
  729.     .db $07,$0F,$3F,$CF,$47,$63,$63,$63
  730.     .db $00,$00,$00,$00,$00,$00,$00,$01
  731.     .db $00,$00,$00,$00,$00,$00,$01,$02
  732.     .db $00,$00,$00,$00,$00,$00,$00,$80
  733.     .db $00,$00,$00,$00,$00,$00,$80,$C0
  734.     .db $01,$00,$00,$00,$00,$00,$00,$00
  735.     .db $02,$01,$00,$00,$00,$00,$00,$00
  736.     .db $80,$00,$00,$00,$00,$00,$00,$00
  737.     .db $C0,$80,$00,$00,$00,$00,$00,$00
  738.     .db $00,$00,$00,$00,$00,$00,$00,$FF
  739.     .db $00,$00,$00,$00,$00,$00,$FF,$00
  740.     .db $FF,$00,$00,$00,$00,$00,$00,$00
  741.     .db $FF,$FF,$00,$00,$00,$00,$00,$00
  742.     .db $01,$01,$01,$01,$01,$01,$01,$01
  743.     .db $02,$02,$02,$02,$02,$02,$02,$02
  744.     .db $80,$80,$80,$80,$80,$80,$80,$80
  745.     .db $C0,$C0,$C0,$C0,$C0,$C0,$C0,$C0
  746.     .dsb 8*224, 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement