Autore Topic: Piacevole Effetto Raster  (Letto 1854 volte)

Alberto

  • Utente
  • **
  • Post: 589
  • Gioco Preferito: Grand Prix Circuit
Piacevole Effetto Raster
« il: 09 Luglio 2006, 13:38:19 »
 Altra routine riadattata da CCC (n.60,pag.63 "A scuola di raster II").
Chi volesse ottimizzarla può ridurre quella gigantesca tabella messa per motivi di leggibilità
Codice: [Seleziona]
;Uso: SYS 49253

* = $c000
wedge

sei
lda #<intro
sta $314
lda #>intro
sta $315       ;interrupt
lda #$32
sta $d012
lda $d011
and #$7f
sta $d011
lda #1
sta $d01a     ;raster IRQ  
cli
rts

byt .byte 0
color1 .byte 3
color2 .byte 1
count .byte 0  ;quadro video

intro

lda $d019
sta $d019
bmi $c031
lda $dc0d
cli
jmp $ea31   ;IRQ standard,esce

lda color2
sta $d021
ldx #39

loop

dex
bne loop     ;colora 3 scanlines
lda color1
sta $d021   ;colora il resto
inc byt
lda byt
cmp #25
bne cont     ;ultima riga?
lda #0
sta byt
inc count    ;sì,aggiorna linea IRQ

cont

asl
asl
asl
clc

ldx count
adc row,x
sta $d012
jmp $febc

;entry-point del programma

sei
lda #$83
sta $01
lda #0
ldy #$d0
sta $fb
sty $fc
ldy #48
sta $fd
sty $fe       ;sposta il charset in RAM
tay
ldx #$10

loop2

lda ($fb),y
eor #255    ;reverse del charset
sta ($fd),y
dey
bne loop2

inc $fc
inc $fe
dex
bne loop2

lda #$87
sta $01
cli
lda #29
sta $d018   ;usa il nuovo charset
jmp wedge

row

.byte 50,50,51,51,52,52,53,53,54,54,55,55,56,56,57,57
.byte 50,50,51,51,52,52,53,53,54,54,55,55,56,56,57,57
.byte 50,50,51,51,52,52,53,53,54,54,55,55,56,56,57,57
.byte 50,50,51,51,52,52,53,53,54,54,55,55,56,56,57,57
.byte 50,50,51,51,52,52,53,53,54,54,55,55,56,56,57,57
.byte 50,50,51,51,52,52,53,53,54,54,55,55,56,56,57,57
.byte 50,50,51,51,52,52,53,53,54,54,55,55,56,56,57,57
.byte 50,50,51,51,52,52,53,53,54,54,55,55,56,56,57,57
.byte 50,50,51,51,52,52,53,53,54,54,55,55,56,56,57,57
.byte 50,50,51,51,52,52,53,53,54,54,55,55,56,56,57,57
.byte 50,50,51,51,52,52,53,53,54,54,55,55,56,56,57,57
.byte 50,50,51,51,52,52,53,53,54,54,55,55,56,56,57,57
.byte 50,50,51,51,52,52,53,53,54,54,55,55,56,56,57,57
.byte 50,50,51,51,52,52,53,53,54,54,55,55,56,56,57,57
.byte 50,50,51,51,52,52,53,53,54,54,55,55,56,56,57,57
.byte 50,50,51,51,52,52,53,53,54,54,55,55,56,56,57,57

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Piacevole Effetto Raster
« Risposta #1 il: 09 Luglio 2006, 15:52:20 »
 Ho provato a ridurlo.
Notare che la BMI $C031 che c'era prima era sbagliata, non tanto perche' non usava una label, ma perche' puntava all'EA della JMP $EA31; non succede niente di male perche' e' l'opcode di NOP :)

Codice: [Seleziona]
;--------------------------------------
;adattato da iAN CooG/HokutoForce
;Uso: SYS 49152/49155
;--------------------------------------
color1  = 3
color2  = 1
byt     = $fb
count   = $fc  ;quadro video
row     = $fd
;--------------------------------------
        * = $c000

        jsr inverse
; se non si vuole, basta sys49155
wedge
        sei
        lda #<intro
        sta $314
        lda #>intro
        sta $315      ;interrupt
        lda #$32
        sta $d012
        lda $d011
        and #$7f
        sta $d011
        lda #1
        sta $d01a    ;raster IRQ
        cli
        rts
;--------------------------------------
intro
        lda $d019
        sta $d019
        bmi continue
        lda $dc0d
        cli
        jmp $ea31  ;IRQ standard,esce
;--------------------------------------
continue

        lda #color2
        sta $d021

        ldx #$27
loop
        dex
        bne loop   ;colora 3 scanlines

        lda #color1
        sta $d021  ;colora il resto
        inc byt
        lda byt
        cmp #$19
        bne cont   ;ultima riga?
        lda #0
        sta byt
        inc count  ;sì,aggiorna linea IRQ

cont
        asl
        asl
        asl
;calcoliamo anziche' usare la tabella
;piu' lento ma occupa meno spazio
        sta row  ; row ora e' solo un temp
        lda count
        and #$0f
        sta count
        lsr      ;0-f -> 0-7
        clc
        adc #$32
        adc row

        sta $d012
        jmp $febc
;--------------------------------------
;entry-point del programma
inverse

        sei
        lda #$33
        sta $01
        lda #0
        ldy #>$d000
        sta $fb
        sty $fc
        ldy #>$3000
        sta $fd
        sty $fe    ;sposta il charset in RAM
        tay
        ldx #$10

loop2

        lda ($fb),y
        eor #$ff   ;reverse del charset
        sta ($fd),y
        dey
        bne loop2

        inc $fc
        inc $fe
        dex
        bne loop2
       ;stx byt
        stx count  ; l'unico da riazzerare
       ;stx row
        lda #$37
        sta $01
        cli
        lda #$1c   ;Charset $3000 screen $0400
        sta $d018  ;usa il nuovo charset
        rts
;--------------------------------------
I raster sono molto spettinati perche' non c'e' nessun tentativo di timing, e non mi riesce proprio di farne uno corretto, forse perche' ritorna alla irq normale, e per un timing perfetto occorre sempre preferire EA81/FEBC.
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

Alberto

  • Utente
  • **
  • Post: 589
  • Gioco Preferito: Grand Prix Circuit
Piacevole Effetto Raster
« Risposta #2 il: 09 Luglio 2006, 23:03:26 »
 
Citazione
Notare che la BMI $C031 che c'era prima era sbagliata, non tanto perche' non usava una label, ma perche' puntava all'EA della JMP $EA31; non succede niente di male perche' e' l'opcode di NOP
Acc...questo non l'avevo notato,sarà sicuramente perchè ho aggiunto qualche byte quando ho riadattato il codice :lol:
Citazione
I raster sono molto spettinati perche' non c'e' nessun tentativo di timing, e non mi riesce proprio di farne uno corretto, forse perche' ritorna alla irq normale, e per un timing perfetto occorre sempre preferire EA81/FEBC.
Ehp...occhio però:lo scopo della routine è di illustrare una tecnica per flashare i caratteri;per questo è necessario che l'entry-point del programma sia sempre la routine di reverse,in modo che poi sia sufficiente cambiare il colore del bordo per creare l'effetto flash,senza stare a modificare tutta la color-memory.Quindi quel
Codice: [Seleziona]
;se non si vuole, basta sys49155
Va omesso,altrimenti cade tutto il discorso. :D

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Piacevole Effetto Raster
« Risposta #3 il: 18 Luglio 2006, 23:58:47 »
Citazione da: "Alberto"
Ehp...occhio però:lo scopo della routine è di illustrare una tecnica per flashare i caratteri;per questo è necessario che l'entry-point del programma sia sempre la routine di reverse
Lo so, ma una routine nata per uno scopo puo' sempre diventare qualcos'altro con delle semplici modifiche. Che poi faccia schifo per le evidenti spettinature e' un altro paio di maniche :P
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -