In riferimento al multisprite di Cepsanta in
QUESTA discussione, ho realizzato il visualizzatore; in pratica si tratta di visualizzare 8 sprites hires sovrapposti.
Grazie a Rob che mi ha fornito il vice snapshot per estrarne i dati.
;----------------------------------------------------------------
; visualizzare un multisprite (editor di Poacher)
; iAN CooG/HokutoForce
;----------------------------------------------------------------
; Quel che sappiamo e' il formato dei dati:
;
; sprite datas: ¦color datas:
; ¦
; $3e00-$3e3e - spr#1 ¦ $3e3f - spr#1
; $3e40-$3e7e - spr#2 ¦ $3e7f - spr#2
; $3e80-$3ebe - spr#3 ¦ $3ebf - spr#3
; $3ec0-$3efe - spr#4 ¦ $3eff - spr#4
; $3f00-$3f3e - spr#5 ¦ $3f3f - spr#5
; $3f40-$3f7e - spr#6 ¦ $3f7f - spr#6
; $3f80-$3fbe - spr#7 ¦ $3fbf - spr#7
; $3fc0-$3ffe - spr#8 ¦ $3fff - spr#8
;
; da cui si deduce che sono dati contigui e che
; il 64esimo byte di ogni sprite contiene il colore
; praticamente come in Spritepad
;----------------------------------------------------------------
*=$0801
word eop
word 7102
byte $9e,"2061",0
eop
word 0
;----------------------------------------------------------------
;schermo uniforme
lda #$0e
sta $d020
sta $d021
jsr $e544
;attiva tutti gli sprites
lda #$ff
sta $D015
sta $D017;y-expand
sta $D01d;x-expand
;disposizione 4x2
ldy #0
sty $D010
lda #$50
sta $fb
setp2
lda $fb
sta $d000,y
sta $d008,y
clc
adc #$30
sta $fb
lda #$6e
sta $d001,y
lda #$b4
sta $d009,y
iny
iny
cpy #$08
bne setp2
;setta i puntatori e i colori
ldy #$07
setptr
lda sprptrs,y
sta $07f8,y
lda colorslo,y
sta pat+1
lda colorshi,y
sta pat+2
pat
lda $ffff
sta $D027,y
dey
bpl setptr
;attendi pressione spazio
k1
lda $dc01
and #$10
bne k1
;raggruppa gli sprites in un punto centrale
ldx #$5f
dec2
ldy #$0f
dec1
lda $d000,y
cmp #150
beq next
bcs decit
;se minore incrementa, se maggiore decrementa
adc #1
byte $2c
decit
sbc #1
sta $d000,y
next
dey
bpl dec1
;attendi un frame dopo aver spostato 8 sprites
lda $d012
bpl *-3
lda $d012
bmi *-3
dex
bne dec2
;esci pulendo il keybuffer e cursore nero
lda #$00
sta $c6
jmp $e536
;----------------------------------------------------------------
sprptrs
byte [spritedata+$0000]/$40
byte [spritedata+$0040]/$40
byte [spritedata+$0080]/$40
byte [spritedata+$00c0]/$40
byte [spritedata+$0100]/$40
byte [spritedata+$0140]/$40
byte [spritedata+$0180]/$40
byte [spritedata+$01c0]/$40
colorslo
byte <[spritedata+$003f]
byte <[spritedata+$007f]
byte <[spritedata+$00bf]
byte <[spritedata+$00ff]
byte <[spritedata+$013f]
byte <[spritedata+$017f]
byte <[spritedata+$01bf]
byte <[spritedata+$01ff]
colorshi
byte >[spritedata+$003f]
byte >[spritedata+$007f]
byte >[spritedata+$00bf]
byte >[spritedata+$00ff]
byte >[spritedata+$013f]
byte >[spritedata+$017f]
byte >[spritedata+$01bf]
byte >[spritedata+$01ff]
eoc
;----------------------------------------------------------------
;allinea i dati al prossimo multiplo di 64
*=[[eoc/$40]+1]*$40
spritedata
incprg cepsanta.prg
Link al file compilato:
QUA