Autore Topic: Multisprite Display  (Letto 1583 volte)

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Multisprite Display
« il: 08 Dicembre 2006, 18:35:56 »
 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.
Codice: [Seleziona]
;----------------------------------------------------------------
; 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
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

cepsanta

  • Neo-iscritto
  • *
  • Post: 16
  • Gioco Preferito: Pitfall II
Multisprite Display
« Risposta #1 il: 11 Dicembre 2006, 00:17:43 »
 Ueilà!
Bravissimo, che velocità! Un visualizzatore già pronto pochi attimi dopo che il mio sprite ha fatto la comparsa nell'email di Roberto!
L'ho provato con Vice, funziona perfettamente! grazie mille!
 :ciauz:  
Carlo Santagostino.

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Multisprite Display
« Risposta #2 il: 11 Dicembre 2006, 00:33:55 »
 Sono il coding slave preferito di rob. :D
Lieto di aver reso un servigio.  
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -