diff genesis.s68 @ 9:997690aa0507

Improve method for choosing line palette entries. Read number of global and dynamic colors from image binary. Go back to doing a word, longword, word pattern of writes for turning off display, doing DMA and turning it back on again to make things work correctly on the real hardware.
author Mike Pavone <pavone@retrodev.com>
date Wed, 04 Sep 2013 00:41:52 -0700
parents 4ffd621f1d0c
children
line wrap: on
line diff
--- a/genesis.s68	Tue Sep 03 09:49:29 2013 -0700
+++ b/genesis.s68	Wed Sep 04 00:41:52 2013 -0700
@@ -87,7 +87,7 @@
 PalAddress equ ButtonStateNew+2
 
 CRAMXferSizeCmd equ $9308
-CRAMDMACmd equ $C0100080
+CRAMDMACmd equ $C0000080
 StaticColors equ 8
 
 USE_HINT equ 0
@@ -141,10 +141,17 @@
 	dbra	d2, WriteNamesY
 
 	move.l	#$C0000000, (a5)	;setup writes to CRAM
-	moveq	#(StaticColors-1), d0			;copy first 12 colors (static pallete)
+	move.b  (a0)+, d0			;Number of static colors
+	move.b  (a0)+, d1			;Number of dynamic colors
+	ext.w	d0
+	move.w	d0, -(a7)
+	beq		NoStatic
+	subq.w	#1, d0
 CopyColors:
 	move.w	(a0)+, (a4)
 	dbra	d0, CopyColors
+	move.w	(a7)+, d0
+NoStatic:
 
 	move.l a0, (PalAddress).w
 
@@ -172,11 +179,16 @@
 	moveq	#0, d3
 	;bsr	ChangeFrameBigSprite
 
-
+	move.w	d0, d5
+	ext.l   d5
+	moveq	#17, d2
+	lsl.l	d2, d5
+	or.l	#CRAMDMACmd, d5		;setup DMA command word
 
-	move.l	#CRAMDMACmd, d5		;setup DMA command word
-
-	move.w	#CRAMXferSizeCmd, (a5)		;set Transfer length
+	ext.w	d1
+	beq		NoDynamic
+	or.w	#$9300, d1
+	move.w	d1, (a5)		;set Transfer length
 	move.w	#$9400, (a5)
 
 	move.w	#$8114, d6
@@ -209,12 +221,12 @@
 
 
 HINT:
-	;move.w	d6, (a5)
-	;move.l	d5, (a5)		;start DMA
-	;move.w	d7, (a5)
-	move.l d6, (a5)
-	move.l d7, (a5)
-	move.w	#CRAMXferSizeCmd, (a5)		;set Transfer length
+	move.w	d6, (a5)
+	move.l	d5, (a5)		;start DMA
+	move.w	d7, (a5)
+	;move.l d6, (a5)
+	;move.l d7, (a5)
+	move.w d1, (a5)		;set Transfer length
 	move.w	#$9400, (a5)
 
 	if USE_HINT
@@ -225,8 +237,13 @@
 	beq	WaitTop
 
 	bra	LineDone
-
+NoDynamic:
+	move.w	#$8174, (a5)
+	move #$2300, SR
+.loop
+	bra .loop
 VINT:
+	move.w d1, -(a7)
 	if USE_HINT
 		move.w	#$8144, (a5)
 	endif
@@ -253,16 +270,17 @@
 
 	;move.l	d5, (a5)		;do DMA for first line
 
-	move.w	#CRAMXferSizeCmd, (a5)		;set Transfer length
+	move.w (a7)+, d1
+	move.w	d1, (a5)		;set Transfer length
 	move.w	#$9400, (a5)
 
 	move.w	#$8114, d6		;VDP commands to turn screen on and off during HBlank
-	swap d6
-	swap d5
-	move.w d5, d6
-	swap d5
-	move.w d5, d7
-	swap d7
+	;swap d6
+	;swap d5
+	;move.w d5, d6
+	;swap d5
+	;move.w d5, d7
+	;swap d7
 	move.w	#$8174, d7
 	if USE_HINT
 		move.w	d7, (a5)