//use kickassembler to assemble :BasicUpstart2(Main) .pc = * "Code Segment" Main: sei lda $d011 and #%01111111 sta $d011 // clear top bit of raster register lda #$7f sta $d012 // raster register lda #<Interrupt sta $0314 lda #>Interrupt sta $0315 lda #$01 // current raster count = wanted position. We handle the interrupt. sta $d019 // interrupt status byte sta $d01a // interrupt enable byte lda #$7f sta $dc0d // disable cia 1 sta $dd0d // disable cia 2 ldx #39 !loop: lda #' ' sta $400+$190-40, x // regel erboven vullen met spaties sta $400+$190, x // scrollregel zelf vullen met spaties sta $400+$190+40, x // regel eronder vullen met spaties lda #1 sta $d800+$190,x // kleuren zetten in de scrollregel dex bpl !loop- lda $d020 sta old_colors lda $d021 sta old_colors+1 lda $dc0d // acknowledge pending interrupts from CIA-1 lda $dd0d // acknowledge pending interrupts from CIA-2 cli rts Interrupt: ldx #3 // vertraging om de zwarte kleur niet midden in je scherm te krijgen !loop: dex bne !loop- lda #0 sta $d020 sta $d021 lda scrollposition sta $d016 !loop: lda $d012 cmp #$8c // wacht totdat het raster een aantal regels verder is. bne !loop- lda #$08 // scrolling weer uitzetten sta $d016 ldx #8 // vertraging om de zwarte kleur niet midden in je scherm te krijgen !loop: dex bne !loop- lda old_colors sta $d020 lda old_colors+1 sta $d021 dec scrollposition bpl no_scrollposition_reset lda #7 // de volgende scrollpositie wordt weer ver naar rechts sta scrollposition ldx #0 !loop: lda $591, x // copy line to the left sta $590, x inx cpx #39 bne !loop- ldx scrolltext_needle // scrolltext resetten? lda scrolltext, x cmp #0 bne no_scrolltext_reset lda #0 sta scrolltext_needle lda scrolltext no_scrolltext_reset: sta $400+$190+39 inc scrolltext_needle no_scrollposition_reset: lda #$01 // current raster count = wanted position. We handle the interrupt. sta $d019 // interrupt status byte. asl $d019 werkt ook, maar waarom weet ik niet. jmp $ea31 scrollposition: .byte 0 scrolltext: .text "jawel ouwe, een smoothscroller op de commodore 64 in een interrupt! " .byte 0 scrolltext_needle: .byte 0 old_colors: .byte 0,0
zaterdag 28 oktober 2023
C64: Smoothscroller in an interrupt!
Abonneren op:
Reacties posten (Atom)
Geen opmerkingen:
Een reactie posten