Fixed background save/restore for 6-byte sprites

Also added interesting background test image and utility functions
This commit is contained in:
Quinn Dunki 2016-12-22 14:28:46 -08:00
parent 7eb3f6fdd7
commit 56e75f426e
7 changed files with 513 additions and 193 deletions

View File

@ -123,11 +123,9 @@ def layoutSpriteChunk(pixeldata,width,height,shift):
for chunkIndex in range(len(byteSplits)):
# Store byte into video memory
if (not byteSplits[chunkIndex].endswith("0000000")): # Optimization- don't render all-black bytes
spriteChunks[chunkIndex][row] = \
"\tlda #%%%s\n" % byteSplits[chunkIndex] + \
"\tora (SCRATCH0),y\n" + \
"\tsta (SCRATCH0),y\n";
spriteChunks[chunkIndex][row] = \
"\tlda #%%%s\n" % byteSplits[chunkIndex] + \
"\tsta (SCRATCH0),y\n";
# Increment indices
if chunkIndex == len(byteSplits)-1:

BIN
KOLTitle.bin Normal file

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 204 B

After

Width:  |  Height:  |  Size: 242 B

View File

@ -43,11 +43,15 @@ saveBackground_loop:
sta saveBackground_smc1+2
sta saveBackground_smc2+2
sta saveBackground_smc3+2
sta saveBackground_smc4+2
sta saveBackground_smc5+2
lda HGRROWS_L,x
sta saveBackground_smc0+1
sta saveBackground_smc1+1
sta saveBackground_smc2+1
sta saveBackground_smc3+1
sta saveBackground_smc4+1
sta saveBackground_smc5+1
ldx PARAM0 ; Compute hires column
lda DIV7_2,x
@ -72,6 +76,16 @@ saveBackground_smc3:
lda $2000,x
sta (PARAM2),y
iny
inx
saveBackground_smc4:
lda $2000,x
sta (PARAM2),y
iny
inx
saveBackground_smc5:
lda $2000,x
sta (PARAM2),y
iny
pla
inc
@ -112,11 +126,15 @@ restoreBackground_loop:
sta restoreBackground_smc1+2
sta restoreBackground_smc2+2
sta restoreBackground_smc3+2
sta restoreBackground_smc4+2
sta restoreBackground_smc5+2
lda HGRROWS_L,x
sta restoreBackground_smc0+1
sta restoreBackground_smc1+1
sta restoreBackground_smc2+1
sta restoreBackground_smc3+1
sta restoreBackground_smc4+1
sta restoreBackground_smc5+1
ldx PARAM0 ; Compute hires column
lda DIV7_2,x
@ -144,6 +162,18 @@ restoreBackground_smc2:
restoreBackground_smc3:
sta $2000,x
iny
inx
lda (PARAM2),y
restoreBackground_smc4:
sta $2000,x
iny
inx
lda (PARAM2),y
restoreBackground_smc5:
sta $2000,x
iny
pla
inc
@ -203,3 +233,75 @@ venetianFill_inner:
bne venetianFill_outer
rts
INBUF = $0200
DOSCMD = $be03
KBD = $c000
KBDSTRB = $c010
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; CommandLine
;
; PARAM0: Command line string (LSB)
; PARAM1: Command line string (MSB)
;
CommandLine:
SAVE_AXY
ldx #0
ldy #0
CommandLine_loop:
lda (PARAM0),y
beq CommandLine_done
sta $0200,x ; Keyboard input buffer
inx
iny
bra CommandLine_loop
CommandLine_done:
lda #$8d ; Terminate with return and null
sta $0200,x
inx
lda #0
sta $0200,x
jsr $be03 ; ProDOS 8 entry point
RESTORE_AXY
rts
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; BloadHires
;
; PARAM0: Filename (LSB)
; PARAM1: Filename (MSB)
;
; Max filename length: 16 chars!
;
BloadHires:
SAVE_AXY
ldx #0
ldy #0
BloadHires_loop:
lda (PARAM0),y ; Copy filename into BLOAD buffer
beq BloadHires_done
sta BloadHires_buffer+6,x
inx
iny
bra BloadHires_loop
BloadHires_done:
lda #<BloadHires_buffer
sta PARAM0
lda #>BloadHires_buffer
sta PARAM1
jsr CommandLine
RESTORE_AXY
rts
BloadHires_buffer:
.byte "BLOAD ",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

Binary file not shown.

View File

@ -64,24 +64,31 @@ SCRATCH1 = $1a
main:
jsr EnableHires
lda #$00
jsr VenetianFill
; lda #$00
; jsr VenetianFill
lda #<bgFilename
sta PARAM0
lda #>bgFilename
sta PARAM1
jsr BloadHires
ldx #0
;;;;
stz PARAM0
stz PARAM1
jsr BOXW_MAG
lda #10
sta PARAM1
jsr BOXW_MIX
lda #20
sta PARAM1
jsr BOXW_ORG
rts
; stz PARAM0
; stz PARAM1
; jsr BOXW_MAG
;
; lda #10
; sta PARAM1
; jsr BOXW_MIX
;
; lda #20
; sta PARAM1
; jsr BOXW_ORG
;
; rts
;;;;
loop:
@ -104,7 +111,7 @@ loop:
inx
cpx #133
; bne loop
bne loop
rts
bgBuffer:
@ -157,6 +164,9 @@ bgBuffer:
.byte 0
.byte 0
bgFilename:
.byte "KOL",0
.include "graphics.s"
.include "hgrtableX.s"
.include "hgrtableY.s"

File diff suppressed because it is too large Load Diff