summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile7
-rw-r--r--init.inc82
-rw-r--r--link.asm1
-rw-r--r--macros.inc20
-rw-r--r--main.asm173
-rw-r--r--maps.asm42
-rw-r--r--tiles.asm1
-rw-r--r--vram-usage6
8 files changed, 241 insertions, 91 deletions
diff --git a/Makefile b/Makefile
index 9c0a07b..a530129 100644
--- a/Makefile
+++ b/Makefile
@@ -1,14 +1,17 @@
TARGET = tll-snes.sfc
-LIBS = main.lib tiles.lib
+LIBS = main.lib tiles.lib maps.lib
$(TARGET): $(LIBS) link.asm
casm link.asm
-main.lib: main.asm
+main.lib: main.asm macros.inc snes.inc tiles.lib maps.lib
casm main.asm
tiles.lib: tiles.asm
casm tiles.asm
+maps.lib: maps.asm
+ casm maps.asm
+
clean:
rm -f $(TARGET) $(LIBS)
diff --git a/init.inc b/init.inc
deleted file mode 100644
index b276cac..0000000
--- a/init.inc
+++ /dev/null
@@ -1,82 +0,0 @@
- lda #$8F
- sta INIDISP
- stz OBSEL
- stz OAMADDL
- stz OAMADDH
- stz BGMODE
- stz MOSAIC
- stz BG1SC
- stz BG2SC
- stz BG3SC
- stz BG4SC
- stz BG12NBA
- stz BG34NBA
- stz BG1VOFS
- stz BG1VOFS
- stz BG2VOFS
- stz BG2VOFS
- stz BG3VOFS
- stz BG3VOFS
- stz BG4VOFS
- stz BG4VOFS
- stz BG1HOFS
- stz BG1HOFS
- stz BG2HOFS
- stz BG2HOFS
- stz BG3HOFS
- stz BG3HOFS
- stz BG4HOFS
- stz BG4HOFS
- lda #$80
- sta VMAIN
- stz VMADDL
- stz VMADDH
- stz M7SEL
- stz M7A
- lda #$01
- sta M7A
- stz M7B
- stz M7B
- stz M7C
- stz M7C
- stz M7D
- sta M7D
- stz M7X
- stz M7X
- stz M7Y
- stz M7Y
- stz CGADD
- stz W12SEL
- stz W34SEL
- stz WOBJSEL
- stz WH0
- stz WH1
- stz WH2
- stz WH3
- stz WBGLOG
- stz WOBJLOG
- sta TM
- stz TS
- stz TMW
- stz TSW
- lda #$30
- sta CGWSEL
- stz CGADSUB
- lda #$E0
- sta COLDATA
- stz SETINI
- stz NMITIMEN
- lda #$FF
- sta WRIO
- stz WRMPYA
- stz WRMPYB
- stz WRDIVL
- stz WRDIVH
- stz WRDIVB
- stz HTIMEL
- stz HTIMEH
- stz VTIMEL
- stz VTIMEH
- stz MDMAEN
- stz HDMAEN
- stz MEMSEL
diff --git a/link.asm b/link.asm
index 91e381a..bd19b49 100644
--- a/link.asm
+++ b/link.asm
@@ -8,3 +8,4 @@
import "main.lib"
import "tiles.lib"
+ import "maps.lib"
diff --git a/macros.inc b/macros.inc
index 78bbfad..d50c96f 100644
--- a/macros.inc
+++ b/macros.inc
@@ -22,3 +22,23 @@ DMA: macro mode,source,dest,len
pla
endm
+
+ACC16: macro
+ .m16
+ rep #$20
+ endm
+
+ACC8: macro
+ .m8
+ sep #$20
+ endm
+
+INDEX16:macro
+ .x16
+ rep #$10
+ endm
+
+INDEX8: macro
+ .x8
+ sep #$10
+ endm
diff --git a/main.asm b/main.asm
index 057bd9b..d16f991 100644
--- a/main.asm
+++ b/main.asm
@@ -2,6 +2,7 @@
option output-file,"main.lib"
option output-format,lib
+ option +address24
org $8000
bank 0
@@ -10,28 +11,183 @@
;
include "snes.inc"
include "macros.inc"
+ import "tiles.lib",labels
+ import "maps.lib",labels
sei
clc
xce
- .x16
- rep #$10
+ INDEX16
ldx #$1fff
txs
- .x8
- .m8
- sep #$30 ; X,Y,A are 8 bit numbers
+ ACC8
+ INDEX8
+ jsr InitSNES
+ cli
- include "init.inc"
+ ; Clear VRAM
+ ;
+ lda #$80
+ sta VMAIN
+ stz VMADDL
+ stz VMADDH
+ DMA 9,zero,$18,0
- cli
+ ; Copy 4-colour tiles
+ ;
+ stz VMADDL
+ stz VMADDH
+ DMA 1,Col4Tiles,$18,Col4TilesLen
+
+ ; Copy 16-colour tiles
+ ;
+ stz VMADDL
+ lda #$10
+ sta VMADDH
+ DMA 1,Col16Tiles,$18,Col16TilesLen
+
+ ; Copy sprites
+ ;
+ stz VMADDL
+ lda #$a0
+ sta VMADDH
+ DMA 1,SpriteData,$18,SpriteDataLen
+
+ ; Copy palette
+ ;
+ stz CGADD
+ DMA 0,PaletteData,$22,PaletteDataLen
+
+ ; Copy BG3
+ ;
+copybg3:
+ INDEX16
+ ldx #$0
+ ldy #32*32
+ stz VMADDL
+ lda #$40
+ sta VMADDH
+.loop
+ lda BG3Map,x
+ sta VMDATAL
+ stz VMDATAH
+ inx
+ dey
+ bne loop
+ X8
+
+ ; Initialise the screen
+ ;
+ lda #$01
+ sta BGMODE
+ lda #$1f
+ sta TM
+
+ lda #$44
+ sta BG12NBA
+ stz BG34NBA
+
+ lda #$60
+ sta BG1SC
+ lda #$80
+ sta BG2SC
+ lda #$40
+ sta BG3SC
+
+ lda #$0f
+ sta INIDISP
; Loop forever.
Forever:
jmp Forever
+InitSNES:
+ lda #$8F
+ sta INIDISP
+ stz OBSEL
+ stz OAMADDL
+ stz OAMADDH
+ stz BGMODE
+ stz MOSAIC
+ stz BG1SC
+ stz BG2SC
+ stz BG3SC
+ stz BG4SC
+ stz BG12NBA
+ stz BG34NBA
+ stz BG1VOFS
+ stz BG1VOFS
+ stz BG2VOFS
+ stz BG2VOFS
+ stz BG3VOFS
+ stz BG3VOFS
+ stz BG4VOFS
+ stz BG4VOFS
+ stz BG1HOFS
+ stz BG1HOFS
+ stz BG2HOFS
+ stz BG2HOFS
+ stz BG3HOFS
+ stz BG3HOFS
+ stz BG4HOFS
+ stz BG4HOFS
+ lda #$80
+ sta VMAIN
+ stz VMADDL
+ stz VMADDH
+ stz M7SEL
+ stz M7A
+ lda #$01
+ sta M7A
+ stz M7B
+ stz M7B
+ stz M7C
+ stz M7C
+ stz M7D
+ sta M7D
+ stz M7X
+ stz M7X
+ stz M7Y
+ stz M7Y
+ stz CGADD
+ stz W12SEL
+ stz W34SEL
+ stz WOBJSEL
+ stz WH0
+ stz WH1
+ stz WH2
+ stz WH3
+ stz WBGLOG
+ stz WOBJLOG
+ sta TM
+ stz TS
+ stz TMW
+ stz TSW
+ lda #$30
+ sta CGWSEL
+ stz CGADSUB
+ lda #$E0
+ sta COLDATA
+ stz SETINI
+ stz NMITIMEN
+ lda #$FF
+ sta WRIO
+ stz WRMPYA
+ stz WRMPYB
+ stz WRDIVL
+ stz WRDIVH
+ stz WRDIVB
+ stz HTIMEL
+ stz HTIMEH
+ stz VTIMEL
+ stz VTIMEH
+ stz MDMAEN
+ stz HDMAEN
+ stz MEMSEL
+ rts
+
; IRQ vectors
;
@@ -41,3 +197,6 @@ vbl_handler:
irq_handler:
rti
+
+zero:
+ db 0
diff --git a/maps.asm b/maps.asm
new file mode 100644
index 0000000..c83f538
--- /dev/null
+++ b/maps.asm
@@ -0,0 +1,42 @@
+ processor 65c816
+
+ option output-file,"maps.lib"
+ option output-format,lib
+ option +address24
+
+ org $8000
+ bank 2
+
+BG3Map:
+ db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,0,1,40,40,40,40,0,0,40,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,0,0,1,40,0,40,0,0,40,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,0,0,1,40,0,40,0,0,40,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,0,0,1,40,0,40,40,40,40,40,40,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,21,16,19,15,2,5,16,0,13,16,24,0,13,6,23,6,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,0,0,30,28,29,36,0,10,2,15,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,15,16,5,5,26,3,16,25,39,4,16,39,22,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,16,19,10,8,10,15,2,13,0,8,2,14,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,38,29,37,36,32,0,4,16,20,21,2,0,17,2,15,2,26,10,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+ db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/tiles.asm b/tiles.asm
index 0ed84df..805e763 100644
--- a/tiles.asm
+++ b/tiles.asm
@@ -2,6 +2,7 @@
option output-file,"tiles.lib"
option output-format,lib
+ option +address24
org $8000
bank 1
diff --git a/vram-usage b/vram-usage
new file mode 100644
index 0000000..304fe8b
--- /dev/null
+++ b/vram-usage
@@ -0,0 +1,6 @@
+0x0000 4-colour character set
+0x1000 16-colour character set
+0x4000 4-color map
+0x6000 16-colour map (background)
+0x8000 16-colour map (foreground)
+0xa000 Sprites