sd2snes/snes/main.a65
2009-11-09 11:15:06 +01:00

250 lines
4.0 KiB
Plaintext

#include "memmap.i65"
#include "dma.i65"
GAME_MAIN:
sep #$20 : .as
jsr snes_init
jsr setup_gfx
jsr setup_hdma
jsr tests
jsr colortest
sep #$20 : .as
lda #$00
sta @AVR_CMD
sta @AVR_PARAM
rep #$20 : .al
sta @AVR_PARAM+1
jsr menu_init
sep #$20 : .as
jsr menuloop
cli
stz $4200
jmp @infloop ;infinite loop in WRAM
colortest:
sep #$20 : .as
rep #$10 : .xl
stz $2130
rts
setup_gfx:
sep #$20 : .as
rep #$10 : .xl
stz $420b
stz $420c
;clear tilemap buffers
ldx #$0000
stx $2181
lda #$01
sta $2183
DMA0(#$08, #0, #^zero, #!zero, #$80)
;copy 2bpp font (can be used as 4-bit lores font!)
ldx #$4000
stx $2116
DMA0(#$01, #$2000, #^font2, #!font2, #$18)
;copy 4bpp font
ldx #$0000
stx $2116
DMA0(#$01, #$4000, #^font4, #!font4, #$18)
;clear BG1 tilemap
ldx #BG1_TILE_BASE
stx $2116
DMA0(#$09, #$800, #^zero, #!zero, #$18)
;clear BG2 tilemap
ldx #BG2_TILE_BASE
stx $2116
DMA0(#$09, #$800, #^zero, #!zero, #$18)
;copy logo tiles
ldx #$2000
stx $2116
DMA0(#$01, #$3480, #^logo, #!logo, #$18)
;copy logo tilemap
ldx #BG1_TILE_BASE
stx $2116
DMA0(#$01, #$280, #^logomap, #!logomap, #$18)
;set palette
stz $2121
DMA0(#$00, #$200, #^palette, #!palette, #$22)
;copy hdma tables so we can work "without" the cartridge
;palette
lda #^hdma_pal
ldx #!hdma_pal
stx $2181
sta $2183
DMA0(#$00, #52, #^hdma_pal_src, #!hdma_pal_src, #$80)
;CG addr for palette
lda #^hdma_cg_addr
ldx #!hdma_cg_addr
stx $2181
sta $2183
DMA0(#$00, #227, #^hdma_cg_addr_src, #!hdma_cg_addr_src, #$80)
;screen mode
lda #^hdma_mode
ldx #!hdma_mode
stx $2181
sta $2183
DMA0(#$00, #5, #^hdma_mode_src, #!hdma_mode_src, #$80)
;bg scroll
lda #^hdma_scroll
ldx #!hdma_scroll
stx $2181
sta $2183
DMA0(#$00, #11, #^hdma_scroll_src, #!hdma_scroll_src, #$80);
;color math
lda #^hdma_math
ldx #!hdma_math
stx $2181
sta $2183
DMA0(#$00, #19, #^hdma_math_src, #!hdma_math_src, #$80);
;copy infinite loop to WRAM
lda #$80
sta infloop
lda #$fe
sta infloop+1
rts
tests:
sep #$20 : .as ;8-bit accumulator
rep #$10 : .xl ;16-bit index
lda #$03 ;mode 3, mode 5 via HDMA :D
sta $2105
lda #$54 ;Tilemap addr 0xA800
sta $2107 ;for BG1
lda #$50 ;Tilemap addr 0xA000
sta $2108 ;for BG2
lda #$40 ;chr base addr:
sta $210b ;BG1=0x0000, BG2=0x8000
lda #$03 ;enable BG1+BG2
sta $212c ;BG Main
sta $212d ;BG Sub
lda #$00 ;224 (01=448)
sta $2133 ;
lda #$00
sta $2130
stz $2121
lda #$0f
sta $2100 ;screen on, full brightness
lda #9
sta bar_yl
rts
snes_init:
sep #$20 : .as ;8-bit accumulator
rep #$10 : .xl ;16-bit index
lda #$01
sta $420d ; FAAAAAST
lda #$8f
sta $2100 ;INIDISP: force blank
stz $2101 ;
stz $2102 ;
stz $2103 ;
stz $2104 ; (OAM Data?!)
stz $2104 ; (OAM Data?!)
stz $2105 ;
stz $2106 ;
stz $2107 ;
stz $2108 ;
stz $2109 ;
stz $210a ;
stz $210b ;
stz $210c ;
stz $210d ;
stz $210d ;
stz $210e ;
stz $210e ;
stz $210f ;
stz $210f ;
lda #$05
sta $2110 ;
stz $2110 ;
stz $2111 ;
stz $2111 ;
stz $2112 ;
stz $2112 ;
stz $2113 ;
stz $2113 ;
stz $2114 ;
stz $2114 ;
lda #$80
sta $2115 ;
stz $2116 ;
stz $2117 ;
stz $2118 ;(VRAM Data?!)
stz $2119 ;(VRAM Data?!)
stz $211a ;
stz $211b ;
lda #$01
sta $211b ;
stz $211c ;
stz $211c ;
stz $211d ;
stz $211d ;
stz $211e ;
sta $211e ;
stz $211f ;
stz $211f ;
stz $2120 ;
stz $2120 ;
stz $2121 ;
stz $2122 ; (CG Data?!)
stz $2123 ;
stz $2124 ;
stz $2125 ;
stz $2126 ;
stz $2127 ;
stz $2128 ;
stz $2129 ;
stz $212a ;
stz $212b ;
stz $212c ;
stz $212d ;
stz $212e ;
lda #$30
sta $2130 ;
stz $2131 ;
lda #$e0
sta $2132 ;
stz $2133 ;
stz $4200 ;
lda #$ff
sta $4201 ;
stz $4202 ;
stz $4203 ;
stz $4204 ;
stz $4205 ;
stz $4206 ;
stz $4207 ;
stz $4208 ;
stz $4209 ;
stz $420a ;
stz $420b ;
stz $420c ;
;clear WRAM lower page
; ldx #$0200
; stx $2181
; lda #$00
; sta $2183
; DMA0(#$08, #$FF00, #^zero, #!zero, #$80)
; ldx #$0000
; stx $2181
; lda #$00
; sta $2183
; DMA0(#$08, #$1e0, #^zero, #!zero, #$80)
rts