371 lines
6.4 KiB
Plaintext
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
|