Autore Topic: Color Mixing  (Letto 2636 volte)

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Color Mixing
« il: 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
;---------------------------------------
« Ultima modifica: 21 Gennaio 2015, 22:41:54 da eregil »
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -