home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / develop / as65 / demo / s1 / led_update.asm < prev    next >
Assembly Source File  |  1995-02-27  |  2KB  |  109 lines

  1. ;**************************************************************************
  2. ;
  3. ; Filename : LED_UPDATE.ASM
  4. ; -------------------------
  5. ;
  6. ; (c) 1990 by Thomas Lehmann
  7. ;
  8. ;
  9. ; Jackophone V5.00
  10. ;
  11. ;
  12. ; Zyklisches Update der LED Matrix
  13. ;
  14. ;
  15. ;**************************************************************************
  16.  
  17. MODUL_START    set    *    ; Größe des Moduls berechnen
  18.  
  19. ; =========================================================================
  20. ;
  21. ; Type    : Hauptprg. IRQ
  22. ;    : zyklisches Update der LED Matrix
  23. ;
  24. ; Eingang    : ------
  25. ;
  26. ; Ausgang    : Refresh einer YL-Achse und 16 X-Achsen
  27. ;
  28. ; Register    : Accu, Y, X
  29. ;
  30. ; (c) by Thomas Lehmann Feb. 1990
  31. ;
  32. ; =========================================================================
  33.  
  34. led_update    lda #$ff
  35.     sta Port_yl    ; YL0-7 Achsen auschalten
  36.  
  37.     ; =============
  38.     ; Refresh XL8-F
  39.     ; =============
  40.  
  41.     ldy #$0f    ; Offset auf LED-RAM laden
  42.     ldx #$08    ; Schleifenzähler
  43.     phx
  44.  
  45. refresh    stz led_xl    ; XL-Achsen clr
  46.  
  47. refresh_1    lda (led_po),y    ; LED-Blinkfrequenz aus LED-RAM holen
  48.     clc
  49.     and blink_bit    ; ist Bit gesetzt ?
  50.     beq refresh_2    ; nein, LED aus
  51.     sec        ; BIT setzen
  52. refresh_2    rol led_xl    ; und LED eingeschaltet setzen
  53.  
  54.     dey        ; nächste X-Achse einstellen
  55.     dex        ; alle Achsen getestet ?
  56.     bne refresh_1    ; nein, nächste testen
  57.  
  58.     plx
  59.     lda #00        ; 2. Durchgang einstellen
  60.     pha
  61.  
  62.     lda led_xl    ; LED zustand laden
  63.     cpx #00        ; war es XL0-7 ?
  64.     beq refresh_3    ; ja, XL0-7 setzen
  65.     sta Port_xl2    ; XL8-F Achsen setzen
  66.     bra refresh    ; 2. Durchgang
  67.  
  68. refresh_3    sta Port_xl1    ; XL0-7 Achsen setzen
  69.     pla        ; Stack korrigieren
  70.  
  71.  
  72.     ; ========================================
  73.     ; YL-Achse einschalten, LED`s ein bzw. aus
  74.     ; ========================================
  75.  
  76.     lda led_yl    ; aktuelle YL-Achse laden
  77.     eor #$ff    ; 0=einschalten
  78.     sta Port_yl    ; und Port einschalten
  79.  
  80.     ; ===================================================
  81.     ; Pointer auf LED-RAM für nächste YL-Achse einstellen
  82.     ; ===================================================
  83.  
  84.     ?add16 led_po,16    ; Offset auf nächste YL-Achse addieren
  85.  
  86.     ; ===========================
  87.     ; nächste YL-Achse einstellen
  88.     ; ===========================
  89.  
  90.     asl led_yl    ; YL=YL+1
  91.     bcc led_upd_end    ; letzte Achse war nicht YL7
  92.  
  93.     rol led_yl    ; aktuelle Achse = YL1, carry=1
  94.     lda #<led_ram    ; Pointer auf LED-RAM für YL0 einstellen
  95.     sta led_po
  96.     lda #>led_ram
  97.     sta led_po+1
  98.  
  99. led_upd_end    rts
  100.  
  101.  
  102.  
  103.  
  104. ; --------------------------------------------------------------------------
  105.  
  106. HLP    set    *
  107. _LED_UPDATE    equ    HLP-MODUL_START        ; Größe des Moduls
  108.  
  109.