User Tools

Site Tools


base:stable_irq_with_dma

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

base:stable_irq_with_dma [2015-04-17 04:34] (current)
Line 1: Line 1:
 +====== Stable IRQ with DMA ======
  
 +ChristopherJam'​s stable IRQ routine using DMA, posted on http://​noname.c64.org/​csdb/​forums/?​roomid=11&​topicid=88971 (cleaned up and converted to ca65 syntax).
 +
 +<code asm>
 + .segment "​STARTUP"​
 +
 + .word basicstub ;​ load address
 +
 +basicstub:
 + .word @nextline
 + .word 1970 + (.time / 31557600)
 + .byte $9e
 + .byte <(((init / 1000) .mod 10) + $30)
 + .byte <(((init / 100 ) .mod 10) + $30)
 + .byte <(((init / 10  ) .mod 10) + $30)
 + .byte <​(((init ​      ) .mod 10) + $30)
 + .byte 0
 +@nextline:
 + .word 0
 +
 +init:
 + lda #$04
 + sta $d021
 + sta 646
 + lda #147
 + jsr $ffd2
 + lda #0
 + sta $d021
 + lda #1 ; something to see
 + sta $0400
 + lda #2
 + sta $0428
 +
 + lda #$7f ; kill CIA irq
 + sta $dc0d
 +
 + sei
 +
 + lda #$35 ; disable ROM
 + sta $01
 +
 + lda #$01 ; enable VIC irq
 + sta $d01a
 + lda #$1b ; clear high bit of irq rasterline
 + sta $d011
 + lda #$32 ; last invisible line
 + sta $d012
 +
 + lda #<irq1 ; set irq vector
 + sta $fffe
 + lda #>irq1
 + sta $ffff
 +
 + cli
 +
 +loop:
 + inc $07e7 ; a nice untidy main loop to ensure instability!
 + bpl loop
 + jmp loop
 +
 +irq1:
 + pha
 + lda $d019
 + sta $d019
 + txa
 + pha
 + tya
 + pha
 +
 + lda #$0f   ; this is unstable!
 + sta $d020
 + lda #$1a   ; force partial badline before screen starts
 + sta $d011
 + lda #$0b   ; this is stable ^_^
 + sta $d020
 + lda #$1b   ; trigger normal re-fetch of first row of chars
 + sta $d011
 + lda #$ff   ; set end-of-screen irq
 + sta $d012
 +
 + lda #<irq2
 + sta $fffe
 + lda #>irq2
 + sta $ffff
 +
 + pla
 + tay
 + pla
 + tax
 + pla
 + rti
 +
 +irq2:
 + pha
 + lda $d019
 + sta $d019
 + txa
 + pha
 + tya
 + pha
 +
 + ;ensure first row of chars is already being displayed when badline forced by irq1
 + lda #$18
 + sta $d011
 + lda #$32
 + sta $d012
 +
 + lda #<irq1
 + sta $fffe
 + lda #>irq1
 + sta $ffff
 +
 + pla
 + tay
 + pla
 + tax
 + pla
 + rti
 +</​code>​
base/stable_irq_with_dma.txt ยท Last modified: 2015-04-17 04:34 (external edit)