home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of A1200
/
World_Of_A1200.iso
/
programs
/
develop
/
as65
/
demo
/
s1
/
led_update.asm
< prev
next >
Wrap
Assembly Source File
|
1995-02-27
|
2KB
|
109 lines
;**************************************************************************
;
; Filename : LED_UPDATE.ASM
; -------------------------
;
; (c) 1990 by Thomas Lehmann
;
;
; Jackophone V5.00
;
;
; Zyklisches Update der LED Matrix
;
;
;**************************************************************************
MODUL_START set * ; Größe des Moduls berechnen
; =========================================================================
;
; Type : Hauptprg. IRQ
; : zyklisches Update der LED Matrix
;
; Eingang : ------
;
; Ausgang : Refresh einer YL-Achse und 16 X-Achsen
;
; Register : Accu, Y, X
;
; (c) by Thomas Lehmann Feb. 1990
;
; =========================================================================
led_update lda #$ff
sta Port_yl ; YL0-7 Achsen auschalten
; =============
; Refresh XL8-F
; =============
ldy #$0f ; Offset auf LED-RAM laden
ldx #$08 ; Schleifenzähler
phx
refresh stz led_xl ; XL-Achsen clr
refresh_1 lda (led_po),y ; LED-Blinkfrequenz aus LED-RAM holen
clc
and blink_bit ; ist Bit gesetzt ?
beq refresh_2 ; nein, LED aus
sec ; BIT setzen
refresh_2 rol led_xl ; und LED eingeschaltet setzen
dey ; nächste X-Achse einstellen
dex ; alle Achsen getestet ?
bne refresh_1 ; nein, nächste testen
plx
lda #00 ; 2. Durchgang einstellen
pha
lda led_xl ; LED zustand laden
cpx #00 ; war es XL0-7 ?
beq refresh_3 ; ja, XL0-7 setzen
sta Port_xl2 ; XL8-F Achsen setzen
bra refresh ; 2. Durchgang
refresh_3 sta Port_xl1 ; XL0-7 Achsen setzen
pla ; Stack korrigieren
; ========================================
; YL-Achse einschalten, LED`s ein bzw. aus
; ========================================
lda led_yl ; aktuelle YL-Achse laden
eor #$ff ; 0=einschalten
sta Port_yl ; und Port einschalten
; ===================================================
; Pointer auf LED-RAM für nächste YL-Achse einstellen
; ===================================================
?add16 led_po,16 ; Offset auf nächste YL-Achse addieren
; ===========================
; nächste YL-Achse einstellen
; ===========================
asl led_yl ; YL=YL+1
bcc led_upd_end ; letzte Achse war nicht YL7
rol led_yl ; aktuelle Achse = YL1, carry=1
lda #<led_ram ; Pointer auf LED-RAM für YL0 einstellen
sta led_po
lda #>led_ram
sta led_po+1
led_upd_end rts
; --------------------------------------------------------------------------
HLP set *
_LED_UPDATE equ HLP-MODUL_START ; Größe des Moduls