comparison menu.s68 @ 827:35f5658d141f

Add selection arrow to menu
author Michael Pavone <pavone@retrodev.com>
date Wed, 05 Aug 2015 23:23:15 -0700
parents 109ac52ffecd
children 69a6ec208111
comparison
equal deleted inserted replaced
826:9060946ce219 827:35f5658d141f
92 dc.b " " 92 dc.b " "
93 dc.b " " 93 dc.b " "
94 dc.b "JUE " 94 dc.b "JUE "
95 95
96 ;register addresses 96 ;register addresses
97 VDP_DATA equ $C00000 97 VDP_DATA equ $C00000
98 VDP_CTRL equ $C00004 98 VDP_CTRL equ $C00004
99 VDP_HV equ $C00008 99 VDP_HV equ $C00008
100 Z80_RAM equ $A00000 100 Z80_RAM equ $A00000
101 IO_AREA equ $A10000 101 IO_AREA equ $A10000
102 102 PAD1_DATA equ (IO_AREA + 3)
103 MODE_0 equ 0 103 PAD2_DATA equ (IO_AREA + 5)
104 MODE_1 equ 1 104 EXT_DATA equ (IO_AREA + 7)
105 PAD1_CTRL equ (IO_AREA + 9)
106 PAD2_CTRL equ (IO_AREA + 11)
107 EXT_CTRL equ (IO_AREA + 13)
108
109 MODE_1 equ 0
110 MODE_2 equ 1
105 SCROLL_A equ 2 111 SCROLL_A equ 2
106 WINDOW equ 3 112 WINDOW equ 3
107 SCROLL_B equ 4 113 SCROLL_B equ 4
108 SAT equ 5 114 SAT equ 5
109 BG_COLOR equ 7 115 BG_COLOR equ 7
139 ;\2 - Access type 145 ;\2 - Access type
140 vdpaccess macro 146 vdpaccess macro
141 move.l #((\2) | (\1) << 16 & $3FFF0000 | (\1) >> 14 & 3), (a1) 147 move.l #((\2) | (\1) << 16 & $3FFF0000 | (\1) >> 14 & 3), (a1)
142 endm 148 endm
143 149
150 ;Writes a DMA command to the control port
151 ;\1 - Destination address
152 ;\2 - Destination type
153 startdma macro
154 move.l #(\2 | VDP_DMA_FLAG | (\1 << 16) & $3FFF0000 | (\1 >> 14) & 3), (a1)
155 endm
156
157 DMA_SRC_68K equ 0
158 DMA_SRC_VRAM equ $C0
159 DMA_SRC_FILL equ $80
160
161 dmasrc macro
162 move.l #($95009600 + (\1) << 15 & $FF0000 + (\1) >> 9 & $FF), (a1)
163 move.w #($9700 + (\1) >> 17 & $7F | (\2)), (a1)
164 endm
165
166 rsset $FFFF8000
167 x_pos rs.w 1
168 base_cmd rs.l 1
169 sprite_list rs.l 160
170 num_sprites rs.b 1
171 last_pad rs.b 1
172
173 int_6:
174 dmasrc sprite_list, DMA_SRC_68K
175 ;set DMA length
176 move.l #$94009300, d0
177 moveq #0, d1
178 move.b num_sprites.w, d1
179 add.w d1, d1
180 add.w d1, d1
181 move.b d1, d0
182 swap d0
183 lsr.w #8, d1
184 move.b d1, d0
185 move.l d0, (a1)
186 startdma $C000, VDP_VRAM_WRITE
187
188 lea PAD1_DATA, a2
189 move.b #$40, (a2)
190 move.b (a2), d0
191 and.b #$3F, d0
192 move.b d0, (a2)
193 move.b (a2), d1
194 and.b #$30, d1
195 add.b d1, d1
196 add.b d1, d1
197 or.b d1, d0
198 not.b d0
199 move.b (last_pad).w, d1
200 eor.b d0, d1
201 and.b d0, d1
202 move.b d0, (last_pad).w
203
204 moveq #16, d2
205 btst #1, d1
206 bne down
207 btst #0, d1
208 bne up
209 rte
210
211 down:
212 add.w d2, (sprite_list).w
213 add.w d2, (sprite_list+8).w
214 rte
215 up:
216 sub.w d2, (sprite_list).w
217 sub.w d2, (sprite_list+8).w
218 rte
219
220 int_4:
144 empty_handler: 221 empty_handler:
145 int_6:
146 rte 222 rte
147 int_4: 223
148 rte 224
149
150 rsset $FFFF8000
151 x_pos rs.w 1
152 base_cmd rs.l 1
153 225
154 initial_regs: 226 initial_regs:
155 vdpreg MODE_1, $4 ;Mode 5, everything turned off 227 vdpreg MODE_2, $4 ;Mode 5, everything turned off
156 vdpreg MODE_0, $4 228 vdpreg MODE_1, $4
157 vdpreg SCROLL_A, $20 ;Scroll a table $8000 229 vdpreg SCROLL_A, $20 ;Scroll a table $8000
158 vdpreg SCROLL_B, $05 ;Scroll b table $A000 230 vdpreg SCROLL_B, $05 ;Scroll b table $A000
159 vdpreg SAT, $60 ;SAT table $C000 231 vdpreg SAT, $60 ;SAT table $C000
160 vdpreg BG_COLOR, 0 232 vdpreg BG_COLOR, 0
161 vdpreg HINT, $FF 233 vdpreg HINT, $FF
175 .regloop 247 .regloop
176 move.w (a2)+, (a1) 248 move.w (a2)+, (a1)
177 dbra d0, .regloop 249 dbra d0, .regloop
178 250
179 vdpaccess $0, VDP_CRAM_WRITE 251 vdpaccess $0, VDP_CRAM_WRITE
180 move.w #$000, (a0) 252 move.w #$020, (a0)
181 move.w #$EEE, (a0) 253 move.w #$EEE, (a0)
254 move.w #$222, (a0)
182 255
183 ;init scroll table 256 ;init scroll table
184 vdpaccess $0, VDP_VRAM_WRITE 257 vdpaccess $0, VDP_VRAM_WRITE
185 move.w #0, (a0) 258 move.w #0, (a0)
186 move.w #4, (a0) 259 move.w #4, (a0)
187 260
188 ;load tiles 261 ;load tiles
189 vdpaccess $800, VDP_VRAM_WRITE 262 vdpaccess $800, VDP_VRAM_WRITE
190 lea font(pc), a2 263 lea font(pc), a2
191 move.w #((fontend-font)/4 - 1), d0 264 move.w #((arrowend-font)/4 - 1), d0
192 tloop: 265 tloop:
193 move.l (a2)+, (a0) 266 move.l (a2)+, (a0)
194 dbra d0, tloop 267 dbra d0, tloop
195 268
196 269
197 270
198 ;clear name tables 271 ;clear name tables
199 vdpaccess $8000, VDP_VRAM_WRITE 272 vdpaccess $8000, VDP_VRAM_WRITE
200 moveq #32, d0 273 moveq #32, d0
274 swap d0
275 move.b #32, d0
201 move.w #(64*64-1), d1 276 move.w #(64*64-1), d1
202 ploop: 277 ploop:
203 move.l d0, (a0) 278 move.l d0, (a0)
204 dbra d1, ploop 279 dbra d1, ploop
205 280
206 move.l #$40000002, d3 281 ;setup SAT
282 ;;vdpaccess $C000, VDP_VRAM_WRITE
283
284 lea sprite_list.w, a2
285 ;left arrow
286 move.l #$01080501, (a2)+
287 move.l #$807F0086, (a2)+
288
289 ;right arrow
290 move.l #$01080500, (a2)+
291 move.l #$887F01AA, (a2)+
292 move.b #2, num_sprites.w
293
294 move.l #$40860002, d3
207 move.l d3, (a1) 295 move.l d3, (a1)
208 move.l d3, base_cmd.w 296 move.l d3, base_cmd.w
209 297
210 lea Message(pc), a6 298 lea Message(pc), a6
211 moveq #0, d0 299 moveq #0, d0
212 bsr print_string 300 bsr print_string
213 301
214 302 ;setup gamepad in port 1
215 303 move.b #$40, PAD1_CTRL
216 move.w #$8144, (a1) ;enable display 304
217 move #$2300, sr 305 move.w #$8174, (a1) ;enable display, vertical interrupts, DMA
218 306
219 307
220 wait_forever 308 wait_forever
221 stop #2500 309 stop #2500
222 bra wait_forever 310 bra wait_forever
258 move.l d2, d1 346 move.l d2, d1
259 ;switch to other plane 347 ;switch to other plane
260 and.w #$FFFE, d1 348 and.w #$FFFE, d1
261 swap d1 349 swap d1
262 eor.l #$20000000, d3 350 eor.l #$20000000, d3
263 or.l d3, d1 351 add.l d3, d1
264 move.l d1, (a1) 352 move.l d1, (a1)
265 bra .loop 353 bra .loop
266 .newline 354 .newline
267 moveq #0, d2 355 moveq #0, d2
268 ;switch back to plane A 356 ;switch back to plane A
278 366
279 align 1 367 align 1
280 font: 368 font:
281 incbin font_interlace_variable.tiles 369 incbin font_interlace_variable.tiles
282 fontend 370 fontend
371 arrow:
372 incbin arrow.tiles
373 arrowend:
283 374
284 widths: 375 widths:
285 dc.b 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1 376 dc.b 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1
286 dc.b 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0 377 dc.b 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0
287 dc.b 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1 378 dc.b 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1