sd2snes/snes/main.a65
2009-10-19 01:17:43 +02:00

371 lines
6.4 KiB
Plaintext

#include "memmap.i65"
GAME_MAIN:
jsr snes_init
jsr setup_gfx
jsr tests
jsr setup_hdma
- bra -
setup_hdma:
sep #$20 : .as
rep #$10 : .xl
stz $420b
stz $420c
lda #$02 ;A to B; direct; 2x single reg
sta $4320 ;we use ch. 2 for color data
lda #$22 ;2122 = CG RAM
sta $4321 ;dest: CG RAM
lda #^hdma_pal
ldy #!hdma_pal
sty $4322
sta $4324
lda #$00 ;A to B; direct; 1x single reg
sta $4310 ;ch. 1 for color address
lda #$21 ;2121 = CG addr
sta $4311 ;dest: CG Address
lda #^hdma_cg_addr
ldy #!hdma_cg_addr
sty $4312
sta $4314
lda #$00 ;A to B; direct; 1x single reg
sta $4330 ;ch. 3 for mode switch
lda #$05 ;2105 = BG mode
sta $4331
lda #^hdma_mode
ldy #!hdma_mode
sty $4332
sta $4334
lda #$03 ;A to B; direct; 2x 2x single reg
sta $4340 ;ch. 4 for scroll
lda #$0d ;210e = BG1VOFS
sta $4341
lda #^hdma_scroll
ldy #!hdma_scroll
sty $4342
sta $4344
; lda #$06
; sta $420c ;enable HDMA ch. 1+2
lda #$80
sta $4200 ;enable V-BLANK NMI
rts
setup_gfx:
sep #$20 : .as
rep #$10 : .xl
stz $420b
stz $420c
;clear tilemap buffers
lda #$08 ;A to B; fixed, one reg
sta $4300
lda #^zero
ldy #!zero
sty $4302
sta $4304
ldx #$0 ;65536
stx $4305
ldx #$0000
stx $2181
lda #$01
sta $2183
lda #$80
sta $4301
lda #$01
sta $420b
lda #$01 ;A to B; (direct); non-fixed, inc, two reg
sta $4300 ;to DMA ch.0 ctrl
lda #^font2 ;font source bank
ldy #!font2 ;font source address
sty $4302 ;address -> 4302,4303
sta $4304 ;bank -> 4304
ldx #$2000 ;transfer size
stx $4305 ;to reg
ldx #$4000 ;BG2 chr
stx $2116 ;VRAM address 0x8000
lda #$18 ;VRAM data port
sta $4301 ;to channel 0 tgt address
lda #$01 ;ch 0 enable
sta $420b ;GPDMA GO!
lda #$01 ;A to B; (direct); non-fixed, inc, two reg
sta $4300 ;to DMA ch.0 ctrl
lda #^font4 ;font source bank
ldy #!font4 ;font source address
sty $4302 ;address -> 4302,4303
sta $4304 ;bank -> 4304
ldx #$4000 ;transfer size
stx $4305 ;to reg
ldx #$0000 ;BG1 chr
stx $2116 ;VRAM address 0x0000
lda #$18 ;VRAM data port
sta $4301 ;to channel 0 tgt address
lda #$01 ;ch 0 enable
sta $420b ;GPDMA GO!
lda #$09 ;A to B; fixed, two reg
sta $4300
lda #^zero
ldy #!zero
sty $4302
sta $4304
ldx #$1000
stx $4305 ;zero 4096b of VRAM
ldx #$5000
stx $2116 ;from 0xa000-0xafff
lda #$18 ;VRAM data port
sta $4301 ;to channel 0 tgt address
lda #$01
sta $420b
; copy logo
lda #$01 ;A to B; (direct); non-fixed, inc, two reg
sta $4300 ;to DMA ch.0 ctrl
lda #^logo ;font source bank
ldy #!logo ;font source address
sty $4302 ;address -> 4302,4303
sta $4304 ;bank -> 4304
ldx #$3480 ;transfer size
stx $4305 ;to reg
ldx #$2000 ;after font
stx $2116 ;VRAM address 0x4000
lda #$18 ;VRAM data port
sta $4301 ;to channel 0 tgt address
lda #$01 ;ch 0 enable
sta $420b ;GPDMA GO!
; copy logo tilemap
lda #$01 ;A to B; (direct); non-fixed, inc, two reg
sta $4300 ;to DMA ch.0 ctrl
lda #^logomap ;font source bank
ldy #!logomap ;font source address
sty $4302 ;address -> 4302,4303
sta $4304 ;bank -> 4304
ldx #$280 ;transfer size
stx $4305 ;to reg
ldx #$5400 ;BG1 tilemap
stx $2116 ;VRAM address 0x6800
lda #$18 ;VRAM data port
sta $4301 ;to channel 0 tgt address
lda #$01 ;ch 0 enable
sta $420b ;GPDMA GO!
stz $2121 ;palette index 0
lda #$00
sta $4300
lda #^palette
ldy #!palette
sty $4302
sta $4304
ldx #$200
stx $4305
lda #$22 ;CG RAM port
sta $4301
lda #$01
sta $420b
rts
tests:
sep #$20 : .as ;8-bit accumulator
rep #$10 : .xl ;16-bit index
lda #$0f
sta $2100 ;screen on, full brightness
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
sta $2133 ;
lda #$00
sta $2130
stz $2121
lda #$0
ldx #$0
ldy #$0
lda #$44
sta @AVR_CMD
lda #0
sta print_x
lda #10
sta print_y
lda #^hello
ldx #!hello
sta print_bank
stx print_src
jsr print
rts
snes_init:
sep #$20 : .as ;8-bit accumulator
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 ;
rts
texttest:
rep #$10 : .xl
sep #$20 : .as
;copy test text
lda #$00 ;A->B, inc, 1 reg
sta $4300
lda #^hello
ldy #!hello
sty $4302
sta $4304
ldx #31 ;26 bytes
stx $4305
ldx #$5140
stx $2116
lda #$18
sta $4301
stz $2115 ;increment after LOW byte (write to 2118)
lda #$01
sta $420b
lda #$08 ;A->B, fixed, 1 reg
sta $4300
lda #^bg2tile
ldy #!bg2tile
sty $4302
sta $4304
ldx #31 ;26 bytes
stx $4305
ldx #$5140
stx $2116
lda #$19
sta $4301
lda #$80
sta $2115 ;increment after HIGH byte (write to 2119)
lda #$01
sta $420b
lda #$00 ;A->B, inc, 1 reg
sta $4300
lda #^hello
ldy #!hello+4
sty $4302
sta $4304
ldx #$c ;24 bytes
stx $4305
ldx #$5540
stx $2116
lda #$18
sta $4301
stz $2115 ;increment after LOW byte (write to 2118)
lda #$01
sta $420b
lda #$08 ;A->B, fixed, 1 reg
sta $4300
lda #^bg2tile
ldy #!bg2tile
sty $4302
sta $4304
ldx #$c ;24 bytes
stx $4305
ldx #$5540
stx $2116
lda #$19
sta $4301
lda #$80
sta $2115 ;increment after HIGH byte (write to 2119)
lda #$01
sta $420b
rts