home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / programs / emulaton / asm6503 / examples / c64irq < prev    next >
Text File  |  1998-08-25  |  2KB  |  60 lines

  1. ;Alain BROBECKER (aka baah/Arm's Tech), ??sep1997
  2. ;This c64 proggy uses interrupt to draw a raster bar while BASIC is available
  3.             #name       c64IrqX
  4.             #type       &064
  5.             #list
  6.             #base       &801-2
  7.  
  8. ;---- C64 specific part... loading adress+BASIC stuff --------------------------
  9.   #rw       &0801                   ; Load adress (C64)
  10.   #rw       BasicEnd,1997           ; Adress of next line + line number
  11.   #b        &9e,&32,&30,&36,&32     ; Basic "SYS2062" instruction
  12.   #b        0                       ; End of basic line
  13. .BasicEnd
  14.   #b        0,0,0                   ; End of basic program
  15. ;---- Assembly language ForEVER ------------------------------------------------
  16.   sei
  17.   lda       #&7f        ; Enable Timer A & B, Clock, Serial Port ... IRQs
  18.   sta       &dc0d       ; CIA Interrupt Control Register
  19.   lda       #&1b        ; 7th bit=bit 8 of raster compare, set to 0
  20.   sta       &d011       ; VIC Control Register
  21.   lda       #1          ; Enable Raster Compare interrupt
  22.   sta       &d01a       ; IRQ Mask Register
  23.   lda       #128        ; Compare IRQ at line 128
  24.   sta       &d012       ; Raster Value for Compare IRQ
  25.   lda       #irq AND &ff ; Low byte of IRQ routine
  26.   sta       &314        ; Hardware IRQ Interrupt Address ($EA31)
  27.   lda       #irq>>8     ; High byte of IRQ routine
  28.   sta       &315
  29.   cli
  30.   rts                   ; Return to BASIC
  31.  
  32. .irq
  33.   sei
  34.   pha
  35.   lda       &d019       ; A Raster Compare IRQ occured?
  36.   and       #1
  37.   beq       end_irq
  38.   lda       &d019       ; Reset VIC's IRQ flags.
  39.   and       #&fe
  40.   sta       &d019
  41.   lda       &d012       ; Raster value
  42.   cmp       #128        ; IRQ at line 128?
  43.   beq       raster128
  44. .raster138
  45.   lda       #128        ; Compare IRQ at line 128
  46.   sta       &d012       ; Raster Value for Compare IRQ
  47.   lda       #0          ; Border=black
  48. .end_raster
  49.   sta       &d020
  50.   sta       &d021
  51. .end_irq
  52.   pla
  53.   jmp       &ea31       ; Kernal routine to return from an interrupt.
  54.  
  55. .raster128
  56.   lda       #138        ; Compare IRQ at line 138
  57.   sta       &d012       ; Raster Value for Compare IRQ
  58.   lda       #6          ; Border=light blue
  59.   bne       end_raster  ; We always branch
  60.