Autore Topic: Koala Viewer  (Letto 5110 volte)

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Koala Viewer
« il: 28 Aprile 2005, 02:09:47 »
 Ma come, non c'e' ancora una routine di visualizzazione di files KoalaPaint sul forum?
Eccola:
Codice: [Seleziona]
;---------------------------------
;Koalaview by iAN CooG/HokutoForce
;C64ASM version
;---------------------------------

scrpos  = $7f40
scr     = $5c00
colpos  = $8328
col     = $d800
bkgcol  = $8710

;---------------------------------
;sysline
;---------------------------------
        *= $0801
        .word eop
        .word 7102
        .byte $9e
        .byte $32,$30,$36,$31,$00
eop    
        .word 0
;---------------------------------
;to avoid unnecessary waste of mem
;stick the routine just after
;the koalapic, comment the above
;sysline and set *= $8711 instead
;---------------------------------
      ;*= $8711
        sei
        lda #$00
        sta $d011
        sta $d020
        ldx #$00
copy    
        lda scrpos     ,x
        sta scr        ,x
        lda scrpos+$100,x
        sta scr   +$100,x
        lda scrpos+$200,x
        sta scr   +$200,x
        lda scrpos+$300,x
        sta scr   +$300,x
        lda colpos     ,x
        sta col        ,x
        lda colpos+$100,x
        sta col   +$100,x
        lda colpos+$200,x
        sta col   +$200,x
        lda colpos+$300,x
        sta col   +$300,x
        dex
        bne copy
        lda bkgcol
        sta $d021
        lda #$2e
        sta $d012
        lda #$78
        sta $d018
        lda #$02
        sta $dd00
        lda #$d8
        sta $d016
        lda #$3b
        sta $d011

kmain
;wait for any fire/space
        lda $dc01
        and $dc00
        and #$10
        bne kmain
        cli
;remove the space from buffer, if any
;cyclewaste, to wait $C6
        beq *+2
        sta $c6
        jsr $fda3
        jsr $e5a0
        lda $0286
        ldx #$00
cram    
        sta col        ,x
        sta col+$0100  ,x
        sta col+$0200  ,x
        sta col+$0300  ,x
        dex
        bne cram
        rts

        *= $6000
        .incbin nomefile.KOA

Con la sysline si viene a creare un file di 32Kb (129blocchi!) e inutilmente, dato che il codice e' meno di 150 byte, e l'immagine di 10001 bytes. Pero' ai fini di una prova veloce puo' andare.
Rinunciando alla sysline invece si ottiene un file grande 10149 (rimane di 40 blocchi come un immagine koala), lo stretto necessario.

Inutile dire che occorre sempre compattare i files, per ottenere la minima occupazione.

Edit: ridotta all'osso la pulizia del buffer in caso di pressione di spazio/fire 1; dopo un attenta osservazione con il debugger mi sono accorto che e' sufficiente perdere qualche ciclo (con una beq *-2) affinche' le routine del kernal riempiano $c6 con il valore 1...  e solo a quel punto vale la pena azzerarlo.
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

Fabbroz75

  • Utente
  • **
  • Post: 65
  • Gioco Preferito: Aufwiedersehen Monty
Koala Viewer
« Risposta #1 il: 10 Luglio 2006, 15:25:12 »
 Ho notato che per caricare un .koa fatto con ConGo v5, è necessario caricare il file a *=indirizzo-2 altrimenti si vede un po sballato.

Oppure, basta utilizzare INCPRG nomefile.koa al posto di .incbin
C64/C64c/C128/C16/Vic20 | 64SD Infinity 2.0 |

Fox Cunning

  • Neo-iscritto
  • *
  • Post: 11
  • Gioco Preferito: Lazy Jones
Koala Viewer
« Risposta #2 il: 10 Luglio 2006, 19:38:58 »
 
Citazione da: "Fabbroz75"
Ho notato che per caricare un .koa fatto con ConGo v5, è necessario caricare il file a *=indirizzo-2 altrimenti si vede un po sballato.

Oppure, basta utilizzare INCPRG nomefile.koa al posto di .incbin
Questo perché il file è un tipico "PRG", con i primi due byte contenenti l'indirizzo di default nel quale caricare lo stesso (low byte - hi byte).

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Koala Viewer
« Risposta #3 il: 10 Luglio 2006, 21:29:37 »
 Giusto per chiarire
Codice: [Seleziona]
;C64ASM version
Come specificato, il sorgente lo realizzai per C64asm e non Dasm, da qui il comportamento diverso.
In C64asm .Incbin tiene conto del load address (ma carica SOLO al load address indicato nel file) mentre in Dasm carica TUTTO il file binario all'org attuale, compresi i primi 2 byte se non li si e' eliminati preventivamente con un hexeditor.
In Dasm ho implementato Incprg cercando di ovviare al noioso comportamento di incbin, ma ho dovuto mantenere il vecchio comando per compatibilita' anziche' rimpiazzarlo con la nuova routine.
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

Fox Cunning

  • Neo-iscritto
  • *
  • Post: 11
  • Gioco Preferito: Lazy Jones
Koala Viewer
« Risposta #4 il: 10 Luglio 2006, 21:30:44 »
 Mi permetto (ma come mi permetto?) di provare ad operare una piccola e banalissima modifica che consentirà di visualizzare le immagini di un altro popolare (?) formato, ovvero quello di OCP ArtStudio (hi-res, due colori):
Codice: [Seleziona]
;---------------------------------
;ArtView, based on:
;Koalaview by iAN CooG/HokutoForce
;(Do not blame iAN for bugs)
;C64ASM version
;---------------------------------

scrpos  = $7f40
scr     = $5c00
bkgcol  = $832e

;---------------------------------
;sysline
;---------------------------------
        *= $0801
        .word eop
        .word 7102
        .byte $9e
        .byte $32,$30,$36,$31,$00
eop    
        .word 0
;---------------------------------
;to avoid unnecessary waste of mem
;stick the routine just after
;the artapic, comment the above
;sysline and set *= $832f instead
;---------------------------------
    ;*= $832f
        sei
        lda #$00
        sta $d011
        sta $d020
        ldx #$00
copy    
        lda scrpos     ,x
        sta scr        ,x
        lda scrpos+$100,x
        sta scr   +$100,x
        lda scrpos+$200,x
        sta scr   +$200,x
        lda scrpos+$300,x
        sta scr   +$300,x
        dex
        bne copy
        lda bkgcol
        sta $d021
        lda #$2e
        sta $d012
        lda #$78
        sta $d018
        lda #$02
        sta $dd00
        lda #$c8  ;<--- no multi-colour!
        sta $d016
        lda #$3b
        sta $d011

kmain
;wait for any fire/space
        lda $dc01
        and $dc00
        and #$10
        bne kmain
        cli
;remove the space from buffer, if any
;cyclewaste, to wait $C6
        beq *+2
        sta $c6
        jsr $fda3
        jsr $e5a0

;insert some other cool routine here

        rts

        *= $6000
        .incbin nomefile.ART
       ;OR, for DASM:
       ;.incprg nomefile.ART.PRG
Notare che tipicamente, nonché per default, i file di Art Paint vengono caricati in $2000 (anziché $6000), ma per semplicità (leggasi pigrizia) ho tenuto invariato l'indirizzo.




N.B.: non ho compilato questo codice, perché uso un diverso assembler e sono troppo pigro/assonnato per convertirlo. Il che significa che potrebbe non funzionare, causare danni permanenti al vostro PC/C64, provocare improvvise variazioni climatiche e/o farvi crescere ciuffi di peli in posti strani.