2022-12-05 04:13:27 +00:00
.include "consts.inc"
.include "header.inc"
.include "actor.inc"
.include "reset.inc"
.include "utils.inc"
.segment "ZEROPAGE"
2022-12-09 03:34:44 +00:00
Buttons: .res 1 ; Pressed buttons (A|B|Select|Start|Up|Dwn|Lft|Rgt)
PrevButtons: .res 1 ; Pressed buttons (A|B|Select|Start|Up|Dwn|Lft|Rgt) PREVIOUSLY
2022-12-05 04:13:27 +00:00
2022-12-09 03:34:44 +00:00
XPos: .res 1 ; Player X 16-bit position (8.8 fixed-point): hi+lo/256px
YPos: .res 1 ; Player Y 16-bit position (8.8 fixed-point): hi+lo/256px
2022-12-05 04:13:27 +00:00
2022-12-09 03:34:44 +00:00
XVel: .res 1 ; Player X (signed) velocity (in pixels per 256 frames)
YVel: .res 1 ; Player Y (signed) velocity (in pixels per 256 frames)
2022-12-05 04:13:27 +00:00
2022-12-09 03:34:44 +00:00
PrevSubmarine: .res 1 ; how long ago we added previous submarine in seconds
2022-12-05 04:13:27 +00:00
2022-12-09 03:34:44 +00:00
Frame: .res 1 ; Counts frames (0 to 255 and repeats)
IsDrawComplete: .res 1 ; Flag to indicate when vblank is done drawing
Clock60: .res 1 ; Counter that increments per second (60 frames)
2022-12-05 04:13:27 +00:00
2022-12-09 03:34:44 +00:00
BgPtr: .res 2 ; Pointer to background address - 16bits (lo,hi)
SprPtr: .res 2 ; pointer to the sprite address - 16bits (lo,hi)
XScroll: .res 1 ; Store the horizontal scroll position
CurrNametable: .res 1 ; Store the current starting nametable (0 or 1)
Column: .res 1 ; Stores the column (of tiles) we are in the level
NewColAddr: .res 2 ; The destination address of the new column in PPU
SourceAddr: .res 2 ; The source address in ROM of the new column tiles
ParamType: .res 1 ; Used as param to subrouting
ParamXPos: .res 1 ; Used as param to subrouting
ParamYPos: .res 1 ; Used as param to subrouting
ParamTileNum: .res 1 ; Used as param to subrouting
ParamNumTiles: .res 1 ; Used as param to subrouting
ParamAttribs: .res 1 ; Used as param to subrouting
PrevOAMCount: .res 1 ; Store previous number of bytes sent to the OAM
2022-12-05 04:13:27 +00:00
; Store enough space for an array of actors
ActorsArray: .res MAX_ACTORS * .sizeof ( Actor )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; PRG-ROM code located at $8000
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.segment "CODE"
;ReadControllers
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Routine to read controller state and store it inside "Buttons" in RAM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.proc ReadControllers
lda # 1 ; A = 1
sta Buttons ; Buttons = 1
sta JOYPAD1 ; Set Latch=1 to begin 'Input'/collection mode
lsr ; A = 0
sta JOYPAD1 ; Set Latch=0 to begin 'Output' mode
LoopButtons:
lda JOYPAD1 ; This reads a bit from the controller data line and inverts its value,
; And also sends a signal to the Clock line to shift the bits
lsr ; We shift-right to place that 1-bit we just read into the Carry flag
rol Buttons ; Rotate bits left, placing the Carry value into the 1st bit of 'Buttons' in RAM
bcc LoopButtons ; Loop until Carry is set (from that initial 1 we loaded inside Buttons)
rts
.endproc
;LoadPalette
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Subroutine to load all 32 color palette values from ROM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.proc LoadPalette
PPU_SETADDR $ 3 F00
ldy # 0 ; Y = 0
: lda PaletteData , y ; Lookup byte in ROM
sta PPU_DATA ; Set value to send to PPU_DATA
iny ; Y++
cpy # 32 ; Is Y equal to 32?
bne : - ; Not yet, keep looping
rts ; Return from subroutine
.endproc
;DrawNewColumn
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Routine to draw a new column of tiles off-screen as we scroll horizontally
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.proc DrawNewColumn
; [ Destination ]
lda XScroll ;Set newColAddr low and hi byte
lsr
lsr
lsr ; shift left three times to divide Xscroll by 3
sta NewColAddr ; set the lo byte
lda CurrNametable ; hi byte comes from nametable
eor # 1 ; invert low bit (0 or 1)
asl
asl ; multiply by 4 (A is $00 or $04)
clc
adc # $ 20 ; add $20 (A is $20 or $24) for nametable 0 or 1
sta NewColAddr + 1 ; set the hi0-byte of the column address ($20xx or $24xx)
;;;;;;;;;;;
; [SourceAddr low and hi byte]
lda Column ; Multiply by 32 to compute the offset
asl ; *2
asl ; *4
asl ; *8
asl ; *16
asl ; *32
sta SourceAddr ; store lo byte of column source address
lda Column
lsr ; /2
lsr ; /4
lsr ; Divide current column by 8 using 3 shift rights
sta SourceAddr + 1 ; store hi byte of column source address
; here we'll add the offset the column source address with the address where the backggroun
lda SourceAddr ; lo byte of the column data + offset = address to load column data from
clc
adc # < BackgroundData ; Add lo-byte
sta SourceAddr ; save result of offset back to the source address low byte
lda SourceAddr + 1 ; hibyte of the column source address
adc # > BackgroundData ; add the hi byte
sta SourceAddr + 1 ; add the result of the offset back to the source address hi byte
;;; Loop all tiles from column, sending them to destination
DrawColumn:
lda # % 00000100 ;
sta PPU_CTRL ; Tell the PPU that the increments will be +32 mode
lda PPU_STATUS ; reset latch
lda NewColAddr + 1 ;
sta PPU_ADDR ; set hi-byte of start address
lda NewColAddr ;
sta PPU_ADDR ; set lo-byte of start address
ldx # 30 ; Looping 30 times
ldy # 0 ;
DrawColumnLoop: ;
lda ( SourceAddr ), y ; Copy from the address of the column source + y offset
sta PPU_DATA ;
iny ; Y++
dex ; X--
bne DrawColumnLoop ; loop 30 times
rts
.endproc
;DrawNewAttribs
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Routine to draw a attributes off-screen eveery 32 pixels
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.proc DrawNewAttribs
lda CurrNametable
eor # 1 ; invert low bit
asl ; Multiply by 2 (00 or 02)
asl ; multiply by 2 again (00, or 04)
clc
adc # $ 23 ; Add high byte of attribute 23-- or 27--
sta NewColAddr + 1
lda XScroll
lsr
lsr
lsr
lsr
lsr
clc
adc # $ C0
sta NewColAddr ; Low Byte
;; Source Address
lda Column ; Column/4 *8 since each row is 8bytes
and # % 11111100 ; mask the lowest two bits to get the closest lowest multiple of 4
asl ; one shift left - multiply by 2
sta SourceAddr ; store low byte of offset in rom
lda Column ; compute high
lsr ;/2
lsr
lsr
lsr
lsr
lsr
lsr ; /128
sta SourceAddr + 1 ; store high byte
lda SourceAddr
clc
adc # < AttributeData ; lo byte of where attrib is in rom
sta SourceAddr
lda SourceAddr + 1
adc # > AttributeData ; hi byte of where attrib is in rom
sta SourceAddr + 1
DrawAttribute:
bit PPU_STATUS
ldy # 0 ; reset latch and back to 0
DrawAttribLoop:
lda NewColAddr + 1
sta PPU_ADDR ; high byte of ppu dest
lda NewColAddr
sta PPU_ADDR ; low byte
lda ( SourceAddr ), y ; fetch attribute data
sta PPU_DATA ; store new data into ppu memory
iny
cpy # 8
beq : + ; loop 8 times
lda NewColAddr
clc
adc # 8
sta NewColAddr ; next addr will be at NewColAddr +8
jmp DrawAttribLoop
:
rts
.endproc
;AddNewActor
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Subroutine to add new actor to the array in the first empty slot found
2022-12-09 03:34:44 +00:00
;; Params: ParamType, ParamXPos, ParamYPos, ParamYVel
2022-12-05 04:13:27 +00:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.proc AddNewActor
ldx # 0
ArrayLoop:
cpx # MAX_ACTORS * .sizeof ( Actor ) ; too many actors, skip
beq EndRoutine
lda ActorsArray + Actor :: Type , x
cmp # ActorType :: NULL
beq AddNewActorToArray ; If found empty slot, add to position
NextActor:
txa
clc
adc # .sizeof ( Actor )
tax
jmp ArrayLoop
2022-12-09 03:34:44 +00:00
2022-12-05 04:13:27 +00:00
AddNewActorToArray:
lda ParamType
sta ActorsArray + Actor :: Type , x
lda ParamXPos
sta ActorsArray + Actor :: XPos , x
lda ParamYPos
sta ActorsArray + Actor :: YPos , x
EndRoutine:
rts
.endproc
2022-12-09 03:34:44 +00:00
.proc Sp awnActors
SpawnSubmarine:
lda Cl ock60 ; Submarines added in 3 second intervals
sec ;
sbc PrevSubmarine ;
cmp # 3 ; Only add if 3 seconds have pased
bne : + ;
lda # ActorType :: SUBMARINE ;
sta ParamType ; Load Param for the actor type
lda # 223 ;
sta ParamXPos ; Load X Pos
lda # 185 ;
sta ParamYPos ;
;
jsr AddNewActor ; Call subroutine
;
lda Cl ock60 ;
sta PrevSubmarine ; Save the current clocktime as the submarine clock spawn time
:
rts
.endproc
.proc UpdateActors
ldx # 0 ; counter of how many actors
ActorsLoop:
lda ActorsArray + Actor :: Type , x
cmp # ActorType :: MISSILE
bne : +
;;Update y Pos
;; y--
lda ActorsArray + Actor :: YPos , x
sec
sbc # 1 ; Decrement Y Position
sta ActorsArray + Actor :: YPos , x ;
bcs SkipMissile
;; Delete Missile
lda # ActorType :: NULL
sta ActorsArray + Actor :: Type , x ;
SkipMissile:
jmp NextActor
:
cmp # ActorType :: SUBMARINE
bne : +
;;Update x Pos
;; x--
lda ActorsArray + Actor :: XPos , x
sec
sbc # 1 ; Decrement X Position
sta ActorsArray + Actor :: XPos , x ;
bcs SkipSubmarine
;; Delete SUB
lda # ActorType :: NULL
sta ActorsArray + Actor :: Type , x ;
SkipSubmarine:
jmp NextActor
:
NextActor:
txa
clc
adc # .sizeof ( Actor )
tax
cmp # MAX_ACTORS * .sizeof ( Actor )
bne ActorsLoop
rts
.endproc
.proc RenderActors
lda # $ 02 ;
sta Sp rPtr + 1 ;
lda # $ 00 ;
sta Sp rPtr ; set SprPtr to $0200
ldy # 0 ; counter of how many tiles
ldx # 0 ; counter of how many actors
ActorsLoop:
lda ActorsArray + Actor :: Type , x
cmp # ActorType :: SP RITE0
bne : +
;; Load Params with Y, TileNumber, Attribs, X,NumTiles=4
lda ActorsArray + Actor :: XPos , x
sta ParamXPos
lda ActorsArray + Actor :: YPos , x
sta ParamYPos
lda # $ 70
sta ParamTileNum
lda # % 00100000
sta ParamAttribs
lda # 1
sta ParamNumTiles
jsr DrawSprite
jmp NextActor
:
cmp # ActorType :: PLAYER
bne : +
;; Load Params with Y, TileNumber, Attribs, X,NumTiles=4
lda ActorsArray + Actor :: XPos , x
sta ParamXPos
lda ActorsArray + Actor :: YPos , x
sta ParamYPos
lda # $ 60
sta ParamTileNum
lda # % 00000000
sta ParamAttribs
lda # 4
sta ParamNumTiles
jsr DrawSprite
jmp NextActor
:
cmp # ActorType :: MISSILE
bne : +
;; Load Params with Y, TileNumber, Attribs, X,NumTiles=1
lda ActorsArray + Actor :: XPos , x
sta ParamXPos
lda ActorsArray + Actor :: YPos , x
sta ParamYPos
lda # $ 50
sta ParamTileNum
lda # % 00000001
sta ParamAttribs
lda # 1
sta ParamNumTiles
jsr DrawSprite
jmp NextActor
:
cmp # ActorType :: SUBMARINE
bne : +
;; Load Params with Y, TileNumber, Attribs, X,NumTiles=1
lda ActorsArray + Actor :: XPos , x
sta ParamXPos
lda ActorsArray + Actor :: YPos , x
sta ParamYPos
lda # $ 04
sta ParamTileNum
lda # % 00000000
sta ParamAttribs
lda # 4
sta ParamNumTiles
jsr DrawSprite
jmp NextActor
:
NextActor:
txa
clc
adc # .sizeof ( Actor )
tax
cmp # MAX_ACTORS * .sizeof ( Actor )
beq : +
jmp ActorsLoop
:
tya
pha ; Save Y to the Stack
LoopTrailingTiles:
;; Loop all bytes until we reach PrevOAMCount
cpy PrevOAMCount
bcs : +
lda # $ FF
sta ( Sp rPtr ), y ; set Y position to $ff to hide
iny ;
sta ( Sp rPtr ), y ; Set tile number as $FF
iny ;
sta ( Sp rPtr ), y ; Set attribs as $FF
iny ;
sta ( Sp rPtr ), y ; Setr X Position to $FF to hide tile
iny ;
jmp LoopTrailingTiles
:
pla
sta PrevOAMCount
rts
.endproc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Routine to loop "NumTiles" times, sending bytes to the OAM-RAM
;; Params = ParamXPos, ParamYPos, ParamTileNum, ParamAttribs, ParamNumTiles
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.proc DrawSprite
txa ;push x to stack
pha ; save value of X register before anything
ldx # 0
TileLoop:
lda ParamYPos
sta ( Sp rPtr ), y ; Send Y Position to Ram
iny
lda ParamTileNum ; Send Tile# to the OAM
sta ( Sp rPtr ), y ;
inc ParamTileNum ; ParamTileNum++
iny
lda ParamAttribs ; Send Attribs to the OAM
sta ( Sp rPtr ), y
iny
lda ParamXPos ; Send X Position to the OAM
sta ( Sp rPtr ), y
clc
adc # 8
sta ParamXPos ; increment X Pos 8 pixels
iny
inx ; X++
cpx ParamNumTiles ; loop NumTiles times
bne TileLoop
; pop x from stack
pla
tax ; pull value of X from stack and transfer to x
rts
.endproc
2022-12-05 04:13:27 +00:00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Reset handler (called when the NES resets or powers on)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Reset:
INIT_NES ; Macro to initialize the NES to a known state
InitVariables:
lda # 0
sta Frame ; Frame = 0
sta Cl ock60 ; Clock60 = 0
sta XScroll ; XScroll = 0
sta CurrNametable ; CurrNametable = 0
sta Column ; Column = 0
lda # 113
sta XPos
lda # 165
sta YPos
Main:
jsr LoadPalette ; Call LoadPalette subroutine to load 32 colors into our palette
AddSprite0:
lda # ActorType :: SP RITE0
sta ParamType
lda # 0
sta ParamXPos
lda # 27
sta ParamYPos
jsr AddNewActor
AddPlayer:
lda # ActorType :: PLAYER
sta ParamType
lda XPos
sta ParamXPos
lda YPos
sta ParamYPos
jsr AddNewActor
InitBackgroundTiles:
lda # 1
sta CurrNametable ;current nametable= 1
lda # 0
sta XScroll
sta Column
InitBackgroundLoop:
jsr DrawNewColumn ; draw all rows of new column
lda XScroll
clc
adc # 8
sta XScroll ; xscroll += 8
inc Column ;column++
lda Column
cmp # 32
bne InitBackgroundLoop ; loop 32 times to repeat all 32 columns of the first nametable
lda # 0
sta CurrNametable ;current nametable = 0
lda # 1
sta XScroll ;Scroll = 1
jsr DrawNewColumn ; draw first column of 2nd nametable
inc Column ; Column ++
lda # % 00000000
sta PPU_CTRL ; PPU back to +1 mode
InitAttribs:
lda # 1
sta CurrNametable ;current nametable= 1
lda # 0
sta XScroll
sta Column
InitAttribsLoop:
jsr DrawNewAttribs ; draw all rows of new column
lda XScroll
clc
adc # 32
sta XScroll ; xscroll += 32
lda Column
clc
adc # 4
sta Column
cmp # 32
bne InitAttribsLoop ; loop 32 times to repeat all 32 columns of the first nametable
lda # 0
sta CurrNametable ;current nametable = 0
lda # 1
sta XScroll ;Scroll = 1
jsr DrawNewAttribs ; draw first column of 2nd nametable
inc Column
EnableRendering:
lda # % 10010000 ; Enable NMI and set background to use the 2nd pattern table (at $1000)
sta PPU_CTRL
lda # 0
sta PPU_SCROLL ; Disable scroll in X
sta PPU_SCROLL ; Disable scroll in Y
lda # % 00011110
sta PPU_MASK ; Set PPU_MASK bits to render the background
;;;;;;; START GAME LOOP
GameLoop:
2022-12-09 03:34:44 +00:00
lda Buttons
sta PrevButtons
2022-12-05 04:13:27 +00:00
;Perform Game Logic Here
jsr ReadControllers
CheckAButton:
lda Buttons
and # BUTTON_A
beq : +
2022-12-09 03:34:44 +00:00
lda Buttons
and # BUTTON_A ; DEBOUNCE A PRESS
cmp PrevButtons ; Compare current buttons and check if A was previously pressed
beq: +
lda # ActorType :: MISSILE
sta ParamType
lda XPos
sta ParamXPos
lda YPos
jsr AddNewActor
2022-12-05 04:13:27 +00:00
:
2022-12-09 03:34:44 +00:00
jsr Sp awnActors
jsr UpdateActors
jsr RenderActors
2022-12-05 04:13:27 +00:00
WaitForVBlank: ; we lock execution
lda IsDrawComplete ; check and only perform game loop call once NMI is done drawing
beq WaitForVBlank ; otherwise keep looping
lda # 0 ;
sta IsDrawComplete ; set back to 0
jmp GameLoop ; Force an infinite execution loop
;;;;;;; END GAME LOOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; NMI interrupt handler
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
NMI:
PUSH_REGS ; push registers to the stack
inc Frame ; Frame++
OAMStartDMACopy: ; DMA copy of OAM data from RAM to PPU
lda # $ 02 ; Every frame, we copy spite data starting at $02**
sta PPU_OAM_DMA ; The OAM-DMA copy starts when we write to $4014
NewColumnCheck:
lda XScroll
and # % 00000111 ; Check if the scroll a multiple of 8
bne EndColCheck ; If it isn't, we still don't need to draw a new column
jsr DrawNewColumn ; If it is a multiple of 8, we proceed to draw a new column of tiles!
Clamp128Cols:
lda Column
clc
adc # 1
and # % 01111111 ; drop left most bit to wrap around 128
sta Column ; clamping the value to never go over 128
EndColCheck:
NewAttribsCheck:
lda XScroll
and # % 00011111
bne : +
jsr DrawNewAttribs
:
2022-12-09 03:34:44 +00:00
SetPPUNoScroll:
lda # 0
sta PPU_SCROLL
sta PPU_SCROLL
EnablePPUSprite0:
lda # % 10010000
sta PPU_CTRL
lda # % 00011110
sta PPU_MASK
WaitForNoSprite0:
lda PPU_STATUS
and # % 01000000
bne WaitForNoSprite0
WaitForSprite0:
lda PPU_STATUS
and # % 01000000 ; PPU address $2002 bit 6 is the sprite hit flag
beq WaitForSprite0 ; loop until we do NOT have a sprite 0 hit
2022-12-05 04:13:27 +00:00
ScrollBackground:
inc XScroll ; XScroll++
lda XScroll
bne : + ; Check if XScroll rolled back to 0, then we swap nametables!
lda CurrNametable
eor # 1 ; An XOR with %00000001 will flip the right-most bit.
sta CurrNametable ; If it was 0, it becomes 1. If it was 1, it becomes 0.
:
lda XScroll
sta PPU_SCROLL ; Set the horizontal X scroll first
lda # 0
sta PPU_SCROLL ; No vertical scrolling
RefreshRendering:
lda # % 10010000 ; Enable NMI, sprites from Pattern Table 0, background from Pattern Table 1
ora CurrNametable ; OR with CurrNametable (0 or 1) to set PPU_CTRL bit-0 (starting nametable)
sta PPU_CTRL
lda # % 00011110 ; Enable sprites, enable background, no clipping on left side
sta PPU_MASK
SetGameClock:
lda Frame ; Increment Clock60 every time we reach 60 frames (NTSC = 60Hz)
cmp # 60 ; Is Frame equal to #60?
bne : + ; If not, bypass Clock60 increment
inc Cl ock60 ; But if it is 60, then increment Clock60 and zero Frame counter
lda # 0
sta Frame
:
SetDrawComplete:
lda # 1
sta IsDrawComplete
inc Frame
PULL_REGS
rti ; Return from interrupt
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; IRQ interrupt handler
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
IRQ:
rti ; Return from interrupt
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Hardcoded list of color values in ROM to be loaded by the PPU
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PaletteData:
.byte $ 1 C , $ 0 F , $ 22 , $ 1 C , $ 1 C , $ 37 , $ 3 D , $ 0 F , $ 1 C , $ 37 , $ 3 D , $ 30 , $ 1 C , $ 0 F , $ 3 D , $ 30 ; Background palette
.byte $ 1 C , $ 0 F , $ 2 D , $ 10 , $ 1 C , $ 0 F , $ 20 , $ 27 , $ 1 C , $ 2 D , $ 38 , $ 18 , $ 1 C , $ 0 F , $ 1 A , $ 32 ; Sprite palette
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Background data (contains 4 screens that should scroll horizontally)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BackgroundData:
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 23 , $ 33 , $ 15 , $ 21 , $ 12 , $ 00 , $ 31 , $ 31 , $ 31 , $ 55 , $ 56 , $ 00 , $ 00 ; ---> screen column 1 (from top to bottom)
.byte $ 13 , $ 13 , $ 75 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 42 , $ 21 , $ 21 , $ 21 , $ 24 , $ 34 , $ 15 , $ 15 , $ 12 , $ 00 , $ 31 , $ 31 , $ 53 , $ 56 , $ 56 , $ 00 , $ 00 ; ---> screen column 2 (from top to bottom)
.byte $ 13 , $ 13 , $ 6 e , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 43 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 3 e , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 31 , $ 52 , $ 56 , $ 00 , $ 00 ; ---> screen column 3 (from top to bottom)
.byte $ 13 , $ 13 , $ 7 f , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 42 , $ 21 , $ 21 , $ 44 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 3 f , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 31 , $ 5 a , $ 56 , $ 00 , $ 00 ; ...
.byte $ 13 , $ 13 , $ 6 e , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 44 , $ 21 , $ 21 , $ 45 , $ 21 , $ 21 , $ 21 , $ 22 , $ 32 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 31 , $ 58 , $ 56 , $ 00 , $ 00 ; ...
.byte $ 13 , $ 13 , $ 75 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 45 , $ 21 , $ 21 , $ 46 , $ 21 , $ 21 , $ 21 , $ 26 , $ 36 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 51 , $ 5 c , $ 56 , $ 00 , $ 00 ; ...
.byte $ 13 , $ 13 , $ 84 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 27 , $ 37 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ 00 , $ 00
.byte $ 13 , $ 13 , $ 61 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 28 , $ 38 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 5 c , $ 56 , $ 00 , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 57 , $ 56 , $ 00 , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 47 , $ 21 , $ 21 , $ 21 , $ 48 , $ 21 , $ 21 , $ 22 , $ 32 , $ 3 e , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ 00 , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 42 , $ 21 , $ 21 , $ 21 , $ 4 a , $ 21 , $ 21 , $ 23 , $ 33 , $ 4 e , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 59 , $ 56 , $ 00 , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 43 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 24 , $ 34 , $ 3 f , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ 00 , $ 00
.byte $ 13 , $ 13 , $ 7 c , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 44 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 57 , $ 56 , $ 00 , $ 00
.byte $ 13 , $ 13 , $ 6 c , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 45 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 59 , $ 56 , $ 00 , $ 00
.byte $ 13 , $ 13 , $ 78 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 15 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ 00 , $ 00
.byte $ 13 , $ 13 , $ 7 b , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 15 , $ 15 , $ 21 , $ 21 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 53 , $ 56 , $ 00 , $ 00
.byte $ 13 , $ 13 , $ 6 e , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 21 , $ 15 , $ 21 , $ 21 , $ 25 , $ 35 , $ 15 , $ 15 , $ 12 , $ 00 , $ 60 , $ 00 , $ 00 , $ 54 , $ 56 , $ 00 , $ 00
.byte $ 13 , $ 13 , $ 84 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 21 , $ 21 , $ 21 , $ 26 , $ 36 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ 00 , $ 00
.byte $ 13 , $ 13 , $ 60 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 27 , $ 37 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ 00 , $ 00
.byte $ 13 , $ 13 , $ 60 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 48 , $ 21 , $ 21 , $ 15 , $ 27 , $ 37 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 5 d , $ 55 , $ 00 , $ 00
.byte $ 13 , $ 13 , $ 60 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 49 , $ 21 , $ 21 , $ 21 , $ 28 , $ 38 , $ 3 e , $ 21 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ 00 , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 49 , $ 21 , $ 21 , $ 21 , $ 22 , $ 35 , $ 3 f , $ 21 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ 00 , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 49 , $ 21 , $ 21 , $ 21 , $ 26 , $ 36 , $ 3 f , $ 21 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 57 , $ 56 , $ 00 , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 4 a , $ 21 , $ 21 , $ 21 , $ 27 , $ 37 , $ 21 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ 00 , $ 00
.byte $ 13 , $ 13 , $ 76 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 42 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 28 , $ 38 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ 00 , $ 00
.byte $ 13 , $ 13 , $ 72 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 44 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 3 e , $ 21 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 59 , $ 56 , $ 00 , $ 00
.byte $ 13 , $ 13 , $ 7 c , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 43 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 4 e , $ 21 , $ 12 , $ 00 , $ 00 , $ 00 , $ 51 , $ 59 , $ 56 , $ 00 , $ 00
.byte $ 13 , $ 13 , $ 7 c , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 44 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 3 f , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 5 c , $ 56 , $ 00 , $ 00
.byte $ 13 , $ 13 , $ 75 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 44 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 29 , $ 39 , $ 21 , $ 21 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 55 , $ 56 , $ 00 , $ 00
.byte $ 13 , $ 13 , $ 84 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 45 , $ 21 , $ 21 , $ 21 , $ 48 , $ 21 , $ 2 c , $ 2 a , $ 3 a , $ 3 c , $ 21 , $ 12 , $ 00 , $ 00 , $ 00 , $ 54 , $ 56 , $ 56 , $ 00 , $ 00
.byte $ 13 , $ 13 , $ 65 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 46 , $ 21 , $ 21 , $ 21 , $ 4 a , $ 21 , $ 2 d , $ 2 a , $ 3 a , $ 3 d , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 52 , $ 56 , $ 00 , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 2 b , $ 3 b , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 57 , $ 56 , $ 00 , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 15 , $ 21 , $ 12 , $ 00 , $ 31 , $ 31 , $ 31 , $ 55 , $ 56 , $ ff , $ 9 a
.byte $ 13 , $ 13 , $ 75 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 21 , $ 15 , $ 21 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 31 , $ 31 , $ 53 , $ 56 , $ 56 , $ ff , $ 5 a
.byte $ 13 , $ 13 , $ 6 e , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 15 , $ 15 , $ 21 , $ 14 , $ 11 , $ 3 e , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 31 , $ 52 , $ 56 , $ ff , $ 5 a
.byte $ 13 , $ 13 , $ 7 f , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 42 , $ 21 , $ 21 , $ 15 , $ 15 , $ 15 , $ 21 , $ 14 , $ 11 , $ 3 f , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 31 , $ 5 a , $ 56 , $ ff , $ 56
.byte $ 13 , $ 13 , $ 6 e , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 44 , $ 21 , $ 21 , $ 15 , $ 15 , $ 15 , $ 21 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 31 , $ 58 , $ 56 , $ ff , $ 59
.byte $ 13 , $ 13 , $ 75 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 45 , $ 21 , $ 21 , $ 15 , $ 15 , $ 21 , $ 21 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 51 , $ 5 c , $ 56 , $ ff , $ 5 a
.byte $ 13 , $ 13 , $ 84 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 15 , $ 21 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ ff , $ 5 a
.byte $ 13 , $ 13 , $ 61 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 5 c , $ 56 , $ ff , $ 5 a
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 57 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 47 , $ 21 , $ 21 , $ 21 , $ 48 , $ 21 , $ 21 , $ 14 , $ 11 , $ 3 e , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 42 , $ 21 , $ 21 , $ 21 , $ 4 a , $ 21 , $ 21 , $ 14 , $ 11 , $ 4 e , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 59 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 43 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 25 , $ 35 , $ 3 f , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 7 c , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 44 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 26 , $ 36 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 57 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 6 c , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 45 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 27 , $ 37 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 59 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 78 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 15 , $ 21 , $ 21 , $ 21 , $ 28 , $ 38 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 7 b , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 15 , $ 15 , $ 21 , $ 21 , $ 29 , $ 39 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 53 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 6 e , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 21 , $ 15 , $ 21 , $ 1 f , $ 2 a , $ 3 a , $ 3 c , $ 15 , $ 12 , $ 00 , $ 61 , $ 00 , $ 00 , $ 54 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 84 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 21 , $ 21 , $ 21 , $ 28 , $ 3 b , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 60 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 60 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 48 , $ 21 , $ 21 , $ 15 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 5 d , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 60 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 49 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 3 e , $ 21 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 49 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 3 f , $ 21 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 49 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 3 f , $ 21 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 57 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 4 a , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 21 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 76 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 42 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ 5 a , $ 00
.byte $ 13 , $ 13 , $ 72 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 44 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 3 e , $ 21 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 59 , $ 56 , $ 9 a , $ 00
.byte $ 13 , $ 13 , $ 7 c , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 43 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 22 , $ 32 , $ 4 e , $ 21 , $ 12 , $ 00 , $ 00 , $ 00 , $ 51 , $ 59 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 7 c , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 44 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 23 , $ 33 , $ 3 f , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 5 c , $ 56 , $ 6 a , $ 00
.byte $ 13 , $ 13 , $ 75 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 44 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 24 , $ 34 , $ 21 , $ 21 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 55 , $ 56 , $ 9 a , $ 00
.byte $ 13 , $ 13 , $ 84 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 45 , $ 21 , $ 21 , $ 21 , $ 48 , $ 15 , $ 15 , $ 14 , $ 11 , $ 15 , $ 21 , $ 12 , $ 00 , $ 00 , $ 00 , $ 54 , $ 56 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 65 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 46 , $ 21 , $ 21 , $ 21 , $ 4 a , $ 21 , $ 15 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 52 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 57 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 15 , $ 21 , $ 12 , $ 00 , $ 31 , $ 31 , $ 31 , $ 58 , $ 56 , $ ff , $ 9 a
.byte $ 13 , $ 13 , $ 75 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 42 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 31 , $ 31 , $ 00 , $ 5 d , $ 56 , $ ff , $ 5 a
.byte $ 13 , $ 13 , $ 6 e , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 43 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 3 e , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 31 , $ 58 , $ 56 , $ ff , $ 5 a
.byte $ 13 , $ 13 , $ 7 f , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 42 , $ 21 , $ 21 , $ 44 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 3 f , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 31 , $ 58 , $ 56 , $ ff , $ aa
.byte $ 13 , $ 13 , $ 6 e , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 44 , $ 21 , $ 21 , $ 45 , $ 21 , $ 21 , $ 21 , $ 22 , $ 32 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 31 , $ 58 , $ 56 , $ ff , $ 56
.byte $ 13 , $ 13 , $ 75 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 45 , $ 21 , $ 21 , $ 46 , $ 21 , $ 21 , $ 21 , $ 26 , $ 36 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 51 , $ 58 , $ 56 , $ ff , $ 9 a
.byte $ 13 , $ 13 , $ 84 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 27 , $ 37 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ ff , $ 59
.byte $ 13 , $ 13 , $ 61 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 28 , $ 38 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 55 , $ 56 , $ ff , $ 5 a
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 57 , $ 56 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 47 , $ 21 , $ 21 , $ 21 , $ 48 , $ 21 , $ 21 , $ 22 , $ 32 , $ 3 e , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 52 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 42 , $ 21 , $ 21 , $ 21 , $ 4 a , $ 21 , $ 21 , $ 23 , $ 33 , $ 4 e , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 53 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 43 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 24 , $ 34 , $ 3 f , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 7 c , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 44 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 6 c , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 45 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 78 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 7 b , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 59 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 6 e , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 62 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 84 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 29 , $ 39 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 59 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 60 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 1 f , $ 2 a , $ 3 a , $ 3 d , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 60 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 48 , $ 21 , $ 15 , $ 2 d , $ 2 a , $ 3 a , $ 3 c , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 5 b , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 60 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 49 , $ 21 , $ 21 , $ 2 f , $ 2 a , $ 3 a , $ 3 d , $ 21 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 49 , $ 21 , $ 21 , $ 21 , $ 28 , $ 3 b , $ 3 e , $ 21 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 49 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 4 e , $ 21 , $ 12 , $ 00 , $ 00 , $ 00 , $ 51 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 4 a , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 21 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 51 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 76 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 42 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 29 , $ 39 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 72 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 44 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 2 c , $ 2 a , $ 3 a , $ 3 e , $ 21 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 7 c , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 43 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 2 e , $ 2 a , $ 3 a , $ 4 e , $ 21 , $ 12 , $ 00 , $ 00 , $ 00 , $ 51 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 7 c , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 44 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 1 f , $ 2 a , $ 3 a , $ 3 f , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 5 d , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 75 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 44 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 28 , $ 3 b , $ 3 f , $ 21 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 57 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 84 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 45 , $ 21 , $ 21 , $ 21 , $ 48 , $ 21 , $ 15 , $ 14 , $ 11 , $ 15 , $ 21 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 65 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 46 , $ 21 , $ 21 , $ 21 , $ 4 a , $ 21 , $ 15 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 15 , $ 21 , $ 12 , $ 00 , $ 31 , $ 31 , $ 31 , $ 58 , $ 56 , $ ff , $ 9 a
.byte $ 13 , $ 13 , $ 75 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 31 , $ 31 , $ 00 , $ 58 , $ 56 , $ ff , $ 5 a
.byte $ 13 , $ 13 , $ 6 e , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 31 , $ 58 , $ 56 , $ ff , $ 5 a
.byte $ 13 , $ 13 , $ 7 f , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 21 , $ 21 , $ 15 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 31 , $ 54 , $ 56 , $ ff , $ 59
.byte $ 13 , $ 13 , $ 6 e , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 21 , $ 21 , $ 15 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 3 e , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 31 , $ 54 , $ 56 , $ ff , $ 56
.byte $ 13 , $ 13 , $ 75 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 42 , $ 15 , $ 21 , $ 21 , $ 15 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 4 e , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 51 , $ 58 , $ 56 , $ ff , $ 5 a
.byte $ 13 , $ 13 , $ 84 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 43 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 4 e , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ ff , $ 59
.byte $ 13 , $ 13 , $ 61 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 44 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 3 f , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ ff , $ 5 a
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 45 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 47 , $ 15 , $ 21 , $ 21 , $ 21 , $ 15 , $ 21 , $ 21 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 53 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 21 , $ 21 , $ 21 , $ 15 , $ 21 , $ 21 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 57 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 7 c , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 29 , $ 39 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 6 c , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 48 , $ 21 , $ 15 , $ 21 , $ 21 , $ 21 , $ 21 , $ 1 d , $ 1 e , $ 2 a , $ 3 a , $ 3 c , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 78 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 49 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 2 b , $ 3 b , $ 3 e , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 7 b , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 4 a , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 4 e , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 6 e , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 48 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 4 e , $ 15 , $ 12 , $ 00 , $ 63 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 84 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 49 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 14 , $ 11 , $ 3 f , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 60 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 4 a , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 15 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 59 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 60 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 21 , $ 15 , $ 15 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 59 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 60 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 21 , $ 21 , $ 15 , $ 21 , $ 21 , $ 15 , $ 14 , $ 11 , $ 15 , $ 21 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 42 , $ 21 , $ 21 , $ 21 , $ 15 , $ 21 , $ 21 , $ 21 , $ 29 , $ 39 , $ 15 , $ 21 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 43 , $ 21 , $ 21 , $ 21 , $ 15 , $ 21 , $ 21 , $ 2 c , $ 2 a , $ 3 a , $ 3 c , $ 21 , $ 12 , $ 00 , $ 00 , $ 00 , $ 50 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 44 , $ 15 , $ 21 , $ 21 , $ 15 , $ 21 , $ 21 , $ 2 d , $ 2 a , $ 3 a , $ 3 e , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 50 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 76 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 45 , $ 15 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 2 b , $ 3 b , $ 3 f , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 54 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 72 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 46 , $ 15 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 15 , $ 14 , $ 11 , $ 3 f , $ 21 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 59 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 7 c , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 14 , $ 11 , $ 15 , $ 21 , $ 12 , $ 00 , $ 00 , $ 00 , $ 51 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 7 c , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 75 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 14 , $ 11 , $ 15 , $ 21 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 5 d , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 84 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 21 , $ 21 , $ 21 , $ 15 , $ 21 , $ 15 , $ 14 , $ 11 , $ 15 , $ 21 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 65 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 15 , $ 21 , $ 21 , $ 21 , $ 15 , $ 15 , $ 15 , $ 14 , $ 11 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
.byte $ 13 , $ 13 , $ 13 , $ 13 , $ 20 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 21 , $ 22 , $ 32 , $ 15 , $ 15 , $ 12 , $ 00 , $ 00 , $ 00 , $ 00 , $ 58 , $ 56 , $ aa , $ 00
AttributeData:
.byte $ FF , $ AA , $ AA , $ AA , $ 9 A , $ 00 , $ 00 , $ 00
.byte $ FF , $ AA , $ AA , $ AA , $ 5 A , $ 00 , $ 00 , $ 00
.byte $ FF , $ AA , $ AA , $ AA , $ 5 A , $ 00 , $ 00 , $ 00
.byte $ FF , $ AA , $ AA , $ 6 A , $ A6 , $ 00 , $ 00 , $ 00
.byte $ FF , $ AA , $ AA , $ 9 A , $ 59 , $ 00 , $ 00 , $ 00
.byte $ FF , $ AA , $ AA , $ AA , $ 5 A , $ 00 , $ 00 , $ 00
.byte $ FF , $ AA , $ AA , $ AA , $ 9 A , $ 00 , $ 00 , $ 00
.byte $ FF , $ AA , $ AA , $ AA , $ 5 A , $ 00 , $ 00 , $ 00
.byte $ FF , $ AA , $ AA , $ 5 A , $ 9 A , $ 00 , $ 00 , $ 00
.byte $ FF , $ AA , $ AA , $ 9 A , $ 5 A , $ 00 , $ 00 , $ 00
.byte $ FF , $ AA , $ AA , $ AA , $ 5 A , $ 00 , $ 00 , $ 00
.byte $ FF , $ AA , $ AA , $ 6 A , $ 56 , $ 00 , $ 00 , $ 00
.byte $ FF , $ AA , $ AA , $ 9 A , $ 59 , $ 00 , $ 00 , $ 00
.byte $ FF , $ AA , $ AA , $ AA , $ 5 A , $ 00 , $ 00 , $ 00
.byte $ FF , $ AA , $ AA , $ AA , $ 5 A , $ 00 , $ 00 , $ 00
.byte $ FF , $ AA , $ AA , $ AA , $ 5 A , $ 00 , $ 00 , $ 00
.byte $ FF , $ AA , $ AA , $ AA , $ 9 A , $ 00 , $ 00 , $ 00
.byte $ FF , $ AA , $ AA , $ AA , $ 5 A , $ 00 , $ 00 , $ 00
.byte $ FF , $ AA , $ AA , $ AA , $ 5 A , $ 00 , $ 00 , $ 00
.byte $ FF , $ AA , $ AA , $ AA , $ AA , $ 00 , $ 00 , $ 00
.byte $ FF , $ AA , $ AA , $ AA , $ 56 , $ 00 , $ 00 , $ 00
.byte $ FF , $ AA , $ AA , $ AA , $ 9 A , $ 00 , $ 00 , $ 00
.byte $ FF , $ AA , $ AA , $ AA , $ 59 , $ 00 , $ 00 , $ 00
.byte $ FF , $ AA , $ AA , $ AA , $ 5 A , $ 00 , $ 00 , $ 00
.byte $ FF , $ AA , $ AA , $ AA , $ 9 A , $ 00 , $ 00 , $ 00
.byte $ FF , $ AA , $ AA , $ AA , $ 5 A , $ 00 , $ 00 , $ 00
.byte $ FF , $ AA , $ AA , $ AA , $ 5 A , $ 00 , $ 00 , $ 00
.byte $ FF , $ AA , $ AA , $ AA , $ 59 , $ 00 , $ 00 , $ 00
.byte $ FF , $ AA , $ AA , $ AA , $ 56 , $ 00 , $ 00 , $ 00
.byte $ FF , $ AA , $ AA , $ AA , $ 5 A , $ 00 , $ 00 , $ 00
.byte $ FF , $ AA , $ AA , $ AA , $ 59 , $ 00 , $ 00 , $ 00
.byte $ FF , $ AA , $ AA , $ AA , $ 5 A , $ 00 , $ 00 , $ 00
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; This is the OAM sprite attribute data data we will use in our game.
;; We have only one big metasprite that is composed of 2x4 hardware sprites.
;; The OAM is organized in sets of 4 bytes per tile.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SpriteData:
; Y tile# attributes
.byte $ 27 , $ 70 , % 00100001 , $ 6 ; [] Sprite 0, used to split screen
; Y tile# attributes X
.byte $ A6 , $ 60 , % 00000000 , $ 70 ; _______________
.byte $ A6 , $ 61 , % 00000000 , $ 78 ; \ o o o o o / <-- Ship (4 tiles)
.byte $ A6 , $ 62 , % 00000000 , $ 80 ; \___________/
.byte $ A6 , $ 63 , % 00000000 , $ 88 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Here we add the CHR-ROM data, included from an external .CHR file
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.segment "CHARS"
.incbin "atlantico.chr"
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Vectors with the addresses of the handlers that we always add at $FFFA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.segment "VECTORS"
.word NMI ; Address (2 bytes) of the NMI handler
.word Reset ; Address (2 bytes) of the Reset handler
.word IRQ ; Address (2 bytes) of the IRQ handler