diff options
-rw-r--r-- | init.asm | 95 | ||||
-rw-r--r-- | init.inc | 82 | ||||
-rw-r--r-- | main.asm | 37 | ||||
-rwxr-xr-x | snes.inc | 200 |
4 files changed, 302 insertions, 112 deletions
diff --git a/init.asm b/init.asm deleted file mode 100644 index bf71bde..0000000 --- a/init.asm +++ /dev/null @@ -1,95 +0,0 @@ - ; Initialise SNES - ; - sei - clc - xce - ldx #$1fff - txs - - sep #$30 ; X,Y,A are 8 bit numbers - lda #$8F ; screen off, full brightness - sta $2100 ; brightness + screen enable register - stz $2101 ; Sprite register (size + address in VRAM) - stz $2102 ; Sprite registers (address of sprite memory [OAM]) - stz $2103 ; "" "" - stz $2105 ; Mode 0, = Graphic mode register - stz $2106 ; noplanes, no mosaic, = Mosaic register - stz $2107 ; Plane 0 map VRAM location - stz $2108 ; Plane 1 map VRAM location - stz $2109 ; Plane 2 map VRAM location - stz $210A ; Plane 3 map VRAM location - stz $210B ; Plane 0+1 Tile data location - stz $210C ; Plane 2+3 Tile data location - stz $210D ; Plane 0 scroll x (first 8 bits) - stz $210D ; Plane 0 scroll x (last 3 bits) #$0 - #$07ff - lda #$FF ; The top pixel drawn on the screen isn't the top one in the tilemap, it's the one above that. - sta $210E ; Plane 0 scroll y (first 8 bits) - sta $2110 ; Plane 1 scroll y (first 8 bits) - sta $2112 ; Plane 2 scroll y (first 8 bits) - sta $2114 ; Plane 3 scroll y (first 8 bits) - lda #$07 ; Since this could get quite annoying, it's better to edit the scrolling registers to fix this. - sta $210E ; Plane 0 scroll y (last 3 bits) #$0 - #$07ff - sta $2110 ; Plane 1 scroll y (last 3 bits) #$0 - #$07ff - sta $2112 ; Plane 2 scroll y (last 3 bits) #$0 - #$07ff - sta $2114 ; Plane 3 scroll y (last 3 bits) #$0 - #$07ff - stz $210F ; Plane 1 scroll x (first 8 bits) - stz $210F ; Plane 1 scroll x (last 3 bits) #$0 - #$07ff - stz $2111 ; Plane 2 scroll x (first 8 bits) - stz $2111 ; Plane 2 scroll x (last 3 bits) #$0 - #$07ff - stz $2113 ; Plane 3 scroll x (first 8 bits) - stz $2113 ; Plane 3 scroll x (last 3 bits) #$0 - #$07ff - lda #$80 ; increase VRAM address after writing to $2119 - sta $2115 ; VRAM address increment register - stz $2116 ; VRAM address low - stz $2117 ; VRAM address high - stz $211A ; Initial Mode 7 setting register - stz $211B ; Mode 7 matrix parameter A register (low) - lda #$01 - sta $211B ; Mode 7 matrix parameter A register (high) - stz $211C ; Mode 7 matrix parameter B register (low) - stz $211C ; Mode 7 matrix parameter B register (high) - stz $211D ; Mode 7 matrix parameter C register (low) - stz $211D ; Mode 7 matrix parameter C register (high) - stz $211E ; Mode 7 matrix parameter D register (low) - sta $211E ; Mode 7 matrix parameter D register (high) - stz $211F ; Mode 7 center position X register (low) - stz $211F ; Mode 7 center position X register (high) - stz $2120 ; Mode 7 center position Y register (low) - stz $2120 ; Mode 7 center position Y register (high) - stz $2121 ; Color number register ($0-ff) - stz $2123 ; BG1 & BG2 Window mask setting register - stz $2124 ; BG3 & BG4 Window mask setting register - stz $2125 ; OBJ & Color Window mask setting register - stz $2126 ; Window 1 left position register - stz $2127 ; Window 2 left position register - stz $2128 ; Window 3 left position register - stz $2129 ; Window 4 left position register - stz $212A ; BG1, BG2, BG3, BG4 Window Logic register - stz $212B ; OBJ, Color Window Logic Register (or,and,xor,xnor) - sta $212C ; Main Screen designation (planes, sprites enable) - stz $212D ; Sub Screen designation - stz $212E ; Window mask for Main Screen - stz $212F ; Window mask for Sub Screen - lda #$30 - sta $2130 ; Color addition & screen addition init setting - stz $2131 ; Add/Sub sub designation for screen, sprite, color - lda #$E0 - sta $2132 ; color data for addition/subtraction - stz $2133 ; Screen setting (interlace x,y/enable SFX data) - stz $4200 ; Enable V-blank, interrupt, Joypad register - lda #$FF - sta $4201 ; Programmable I/O port - stz $4202 ; Multiplicand A - stz $4203 ; Multiplier B - stz $4204 ; Multiplier C - stz $4205 ; Multiplicand C - stz $4206 ; Divisor B - stz $4207 ; Horizontal Count Timer - stz $4208 ; Horizontal Count Timer MSB (most significant bit) - stz $4209 ; Vertical Count Timer - stz $420A ; Vertical Count Timer MSB - stz $420B ; General DMA enable (bits 0-7) - stz $420C ; Horizontal DMA (HDMA) enable (bits 0-7) - stz $420D ; Access cycle designation (slow/fast rom) - - cli ; Enable interrupts diff --git a/init.inc b/init.inc new file mode 100644 index 0000000..b276cac --- /dev/null +++ b/init.inc @@ -0,0 +1,82 @@ + 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
@@ -3,26 +3,29 @@ option output-file,"main.lib" option output-format,lib - option snes-irq,vbl,vbl_handler - option snes-irq,irq,irq_handler - - ; Initialise SNES - ; org $8000 bank 0 - include init.asm - - ; Set the background color to green. - sep #$20 ; Set the A register to 8-bit. - lda #%10000000 ; Force VBlank by turning off the screen. - sta $2100 - lda #%11100000 ; Load the low byte of the green color. - sta $2122 - lda #%00000000 ; Load the high byte of the green color. - sta $2122 - lda #%00001111 ; End VBlank, setting brightness to 15 (100%). - sta $2100 + ; Initialise SNES + ; + include "snes.inc" + + sei + clc + xce + + .x16 + rep #$10 + ldx #$1fff + txs + + .x8 + .m8 + sep #$30 ; X,Y,A are 8 bit numbers + + include "init.inc" + + cli ; Loop forever. Forever: diff --git a/snes.inc b/snes.inc new file mode 100755 index 0000000..9e10e57 --- /dev/null +++ b/snes.inc @@ -0,0 +1,200 @@ +INIDISP equ $2100
+OBSEL equ $2101
+OAMADDL equ $2102
+OAMADDH equ $2103
+OAMDATA equ $2104
+BGMODE equ $2105
+MOSAIC equ $2106
+BG1SC equ $2107
+BG2SC equ $2108
+BG3SC equ $2109
+BG4SC equ $210A
+BG12NBA equ $210B
+BG34NBA equ $210C
+BG1HOFS equ $210D
+BG1VOFS equ $210E
+BG2HOFS equ $210F
+BG2VOFS equ $2110
+BG3HOFS equ $2111
+BG3VOFS equ $2112
+BG4HOFS equ $2113
+BG4VOFS equ $2114
+VMAIN equ $2115
+VMADDL equ $2116
+VMADDH equ $2117
+VMDATAL equ $2118
+VMDATAH equ $2119
+M7SEL equ $211A
+M7A equ $211B
+M7B equ $211C
+M7C equ $211D
+M7D equ $211E
+M7X equ $211F
+M7Y equ $2120
+CGADD equ $2121
+CGDATA equ $2122
+W12SEL equ $2123
+W34SEL equ $2124
+WOBJSEL equ $2125
+WH0 equ $2126
+WH1 equ $2127
+WH2 equ $2128
+WH3 equ $2129
+WBGLOG equ $212A
+WOBJLOG equ $212B
+TM equ $212C
+TS equ $212D
+TMW equ $212E
+TSW equ $212F
+CGWSEL equ $2130
+CGADSUB equ $2131
+COLDATA equ $2132
+SETINI equ $2133
+MPYL equ $2134
+MPYM equ $2135
+MPYH equ $2136
+SLHV equ $2137
+OAMDATAREAD equ $2138
+VMDATALREAD equ $2139
+VMDATAHREAD equ $213A
+CGDATAREAD equ $213B
+OPHCT equ $213C
+OPVCT equ $213D
+STAT77 equ $213E
+STAT78 equ $213F
+APUIO0 equ $2140
+APUIO1 equ $2141
+APUIO2 equ $2142
+APUIO3 equ $2143
+WMDATA equ $2180
+WMADDL equ $2181
+WMADDM equ $2182
+WMADDH equ $2183
+JOYSER0 equ $4016
+JOYSER1 equ $4017
+NMITIMEN equ $4200
+WRIO equ $4201
+WRMPYA equ $4202
+WRMPYB equ $4203
+WRDIVL equ $4204
+WRDIVH equ $4205
+WRDIVB equ $4206
+HTIMEL equ $4207
+HTIMEH equ $4208
+VTIMEL equ $4209
+VTIMEH equ $420A
+MDMAEN equ $420B
+HDMAEN equ $420C
+MEMSEL equ $420D
+RDNMI equ $4210
+TIMEUP equ $4211
+HVBJOY equ $4212
+RDIO equ $4213
+RDDIVL equ $4214
+RDDIVH equ $4215
+RDMPYL equ $4216
+RDMPYH equ $4217
+JOY1L equ $4218
+JOY1H equ $4219
+JOY2L equ $421A
+JOY2H equ $421B
+JOY3L equ $421C
+JOY3H equ $421D
+JOY4L equ $421E
+JOY4H equ $421F
+
+DMAP0 equ $4300
+BBAD0 equ $4301
+A1T0L equ $4302
+A1T0H equ $4303
+A1B0 equ $4304
+DAS0L equ $4305
+DAS0H equ $4306
+DASB0 equ $4307
+A2A0L equ $4308
+A2A0H equ $4309
+NTLR0 equ $430A
+
+DMAP1 equ $4310
+BBAD1 equ $4311
+A1T1L equ $4312
+A1T1H equ $4313
+A1B1 equ $4314
+DAS1L equ $4315
+DAS1H equ $4316
+DASB1 equ $4317
+A2A1L equ $4318
+A2A1H equ $4319
+NTLR1 equ $431A
+
+DMAP2 equ $4320
+BBAD2 equ $4321
+A1T2L equ $4322
+A1T2H equ $4323
+A1B2 equ $4324
+DAS2L equ $4325
+DAS2H equ $4326
+DASB2 equ $4327
+A2A2L equ $4328
+A2A2H equ $4329
+NTLR2 equ $432A
+
+DMAP3 equ $4330
+BBAD3 equ $4331
+A1T3L equ $4332
+A1T3H equ $4333
+A1B3 equ $4334
+DAS3L equ $4335
+DAS3H equ $4336
+DASB3 equ $4337
+A2A3L equ $4338
+A2A3H equ $4339
+NTLR3 equ $433A
+
+DMAP4 equ $4340
+BBAD4 equ $4341
+A1T4L equ $4342
+A1T4H equ $4343
+A1B4 equ $4344
+DAS4L equ $4345
+DAS4H equ $4346
+DASB4 equ $4347
+A2A4L equ $4348
+A2A4H equ $4349
+NTLR4 equ $434A
+
+DMAP5 equ $4350
+BBAD5 equ $4351
+A1T5L equ $4352
+A1T5H equ $4353
+A1B5 equ $4354
+DAS5L equ $4355
+DAS5H equ $4356
+DASB5 equ $4357
+A2A5L equ $4358
+A2A5H equ $4359
+NTLR5 equ $435A
+
+DMAP6 equ $4360
+BBAD6 equ $4361
+A1T6L equ $4362
+A1T6H equ $4363
+A1B6 equ $4364
+DAS6L equ $4365
+DAS6H equ $4366
+DASB6 equ $4367
+A2A6L equ $4368
+A2A6H equ $4369
+NTLR6 equ $436A
+
+DMAP7 equ $4370
+BBAD7 equ $4371
+A1T7L equ $4372
+A1T7H equ $4373
+A1B7 equ $4374
+DAS7L equ $4375
+DAS7H equ $4376
+DASB7 equ $4377
+A2A7L equ $4378
+A2A7H equ $4379
+NTLR7 equ $437A
|