Ready64 Forum

Commodore 64 => Programmazione, Grafica e Musica => Topic aperto da: iAN CooG - 04 Gennaio 2007, 16:39:24

Titolo: Color Mixing
Inserito da: iAN CooG - 04 Gennaio 2007, 16:39:24
Banale esempio per ottenere delle tonalita' nuove mixando 2 colori. La routine rimpiazza i colori nelle righe occupate dal messaggio di accensione del C64, flasha un pochino ma rende l'idea.

Codice: [Seleziona]
;---------------------------------------
; iAN CooG/HokutoForce
;---------------------------------------
        * = $801
        word eop
        word 7102
        byte $9e
        byte "2061"
        byte 0
eop
        word 0
;---------------------------------------
        sei
        lda #<irq1
        ldx #>irq1
        sta $0314
        stx $0315
        lda #$01
        sta $d01a
        sta $d019
        lda #$7f
        sta $dc0d
        lda $dc0d
        lda #$20
        sta $d012
        sta $d020
        sta $d021
        lda #$1b
        sta $d011
        cli
        rts
;---------------------------------------
irq1
        lsr $d019
        bit $24
        bit $24
        bit $24
        bit $24
        inc $d020;debug
        ldx #$27
        lda $02
        and #$01
        asl
        tay
lp1     lda table,y
        sta $d828,x
        lda table+1,y
        sta $d878,x
        dex
        bpl lp1

        inc $02
        dec $d020;debug
        jmp $ea31
;---------------------------------------
table
        byte #$05
        byte #$04
        byte #$03
        byte #$02

La banda bianca indica il tempo impiegato dalla routine per essere eseguita. Srotolando il codice otteniamo un programma lungo il triplo ma la routine impiega un terzo ad essere eseguita.
Codice: [Seleziona]
;---------------------------------------
irq1
        lsr $d019
        bit $24
        bit $24
        bit $24
        bit $24
        inc $d020;debug
        lda $02
        and #$01
        asl
        tay
        lda table,y
M SET  0
REPEAT 40
        sta $d828+ M
M SET  M+1
REPEND
        lda table+1,y
M SET  0
REPEAT 40
        sta $d878+ M
M SET  M+1
REPEND
        inc $02
        dec $d020;debug
        jmp $ea31
;---------------------------------------