1 ##################################################
4 # --register-prefix-optional --bitwise-or #
6 ##################################################
11 ##################################################
13 # Register and bitmask definitions #
15 ##################################################
17 .equ GFXDATA, 0xc00000
18 .equ GFXCNTL, 0xc00004
21 .equ VDP0_E_DISPLAY, 0x02
22 .equ VDP0_PLTT_FULL, 0x04
24 .equ VDP1_SMS_MODE, 0x80
25 .equ VDP1_E_DISPLAY, 0x40
30 .equ VDP1_RESERVED, 0x04
32 .equ VDP12_SPR_SHADOWS, 0x08
33 .equ VDP12_SCREEN_V224, 0x00
34 .equ VDP12_SCREEN_V448, 0x04
35 .equ VDP12_PROGRESSIVE, 0x00
36 .equ VDP12_INTERLACED, 0x02
37 .equ VDP12_SCREEN_H256, 0x00
38 .equ VDP12_SCREEN_H320, 0x81
40 .equ VDP16_MAP_V32, 0x00
41 .equ VDP16_MAP_V64, 0x10
42 .equ VDP16_MAP_V128, 0x30
43 .equ VDP16_MAP_H32, 0x00
44 .equ VDP16_MAP_H64, 0x01
45 .equ VDP16_MAP_H128, 0x03
49 ##################################################
53 ##################################################
56 /* Write val to VDP register reg */
57 .macro write_vdp_reg reg val
58 move.w #((\reg << 8) + 0x8000 + \val),(a3)
62 /* For immediate addresses */
63 .macro VRAM_ADDR reg adr
64 move.l #(((0x4000 + (\adr & 0x3fff)) << 16) + (\adr >> 14)),\reg
68 # make VDP word from address adr to d0
70 .macro VRAM_ADDR_var adr
84 .macro CRAM_ADDR reg adr
85 move.l #(((0xc000 + (\adr & 0x3fff)) << 16) + (\adr >> 14)),\reg
89 /* For indirect (variable) addresses */
90 .macro CRAM_ADDR_var reg adr
105 .macro VSCROLL_ADDR reg adr
106 move.l #(((0x4000 + (\adr & 0x3fff)) << 16) + ((\adr >> 14) | 0x10)),\reg
110 .macro HSCROLL_ADDR reg adr
111 move.l #(((0x4000 + (\adr & 0x3fff)) << 16) + (\adr >> 14)),\reg
115 #################################################
119 #################################################
129 /* Y size link attr X */
130 dc.w 0; dc.b 0x05; dc.b 0; dc.w 0x6002; dc.w 0
136 ##################################################
140 ##################################################
148 /* Load color data */
151 moveq.l #(colors_end-colors)/2,d4
160 /* generate A layer map */
168 0: move.l #0x00000000,(a3)
174 /* generate B layer map */
179 0: move.l #0x00000000,(a3)
182 /* upload sprite data */
185 movea.l #sprite_data,a0
187 move.l #(sprite_data_end-sprite_data)/2-1,d3
198 ##################################################
202 ##################################################
212 #################################################
214 # Initialize VDP registers #
216 #################################################
220 write_vdp_reg 0,(VDP0_E_DISPLAY | VDP0_PLTT_FULL)
221 write_vdp_reg 1,(VDP1_E_VBI | VDP1_E_DISPLAY | VDP1_E_DMA | VDP1_RESERVED)
222 write_vdp_reg 2,(0xe000 >> 10) /* Screen map a adress */
223 write_vdp_reg 3,(0xe000 >> 10) /* Window address */
224 write_vdp_reg 4,(0xc000 >> 13) /* Screen map b address */
225 write_vdp_reg 5,(0xfc00 >> 9) /* Sprite address */
227 write_vdp_reg 7,0 /* Backdrop color */
228 write_vdp_reg 10,1 /* Lines per hblank interrupt */
229 write_vdp_reg 11,0 /* 2-cell vertical scrolling */
230 write_vdp_reg 12,(VDP12_SCREEN_V224 | VDP12_SCREEN_H320)
231 write_vdp_reg 13,(0x8000 >> 10) /* Horizontal scroll address */
233 write_vdp_reg 16,(VDP16_MAP_V32 | VDP16_MAP_H64) /* layer size */
235 write_vdp_reg 18,0xff
240 #################################################
242 # Load tile data from ROM #
246 # a4: pattern address #
247 # d4: number of tiles to load #
248 # Destroys a2,d0,d7... #
250 #################################################
262 dbra d4,_copy_tile_data
267 # Prepare to write to VDP RAM @a3
269 # a3 set to VDP data port for convenience
281 #################################################
283 # Load color data from ROM #
287 # a4: color list address #
288 # d4: number of colors to load #
290 #################################################
301 dbra d4,_copy_color_data
305 #################################################
334 #################################################
336 # Wait for next VBlank interrupt #
338 #################################################
350 #################################################
354 #################################################
370 # vim:filetype=asmM68k