Login
Forum Help



Post Your Message
Username: (Login)

Topic:
Message:
 


Previous Messages
Posted By

Fuzzweed
on 2024-10-29
13:22:43
 Re: Checking interrupt status

yes I just saw that register when I looked in the PG
Soooo glad I hadn't quite got onto that as I was thinking about lots of very clever timing otherwise.

Posted By

Csabo
on 2024-10-29
12:23:14
 Re: Checking interrupt status

One small thing to add: waiting for a given vertical position (raster line) by checking $FF1D is very common, and there's a C64 equivalent of this as well. However, on Plus/4 we also have this for the horizontal position: $FF1E (which can be both read and written). This is often used for simple raster bars:

        ldx #17                     ; 18 colors
ldy #$A8 ; horizontal position check
loop06 lda colors,x ; get next color
loop05 cpy $FF1E ; wait for horizontal position
bcs loop05 ; keep waiting **
;
sta $FF19 ; change border and...
sta $FF15 ; background color
dex
bpl loop06


Posted By

Fuzzweed
on 2024-10-29
10:07:45
 Re: Checking interrupt status

Thankyou. I will look at this. I've only been learning 6502 a few weeks, I don't know if it's complicated or not yet happy

Edit. Yes that has worked very nicely thanks again

Posted By

gerliczer
on 2024-10-29
07:03:10
 Re: Checking interrupt status

What's the point of overcomplicating it like that? Clear all interrupts then poll and compare $FF1D in a busy loop, done. You don't have to wait for the raster to pass the active display area. All you have to do is taking care not to overtake the beam during screen update.

Posted By

Fuzzweed
on 2024-10-29
05:27:46
 Checking interrupt status

Hi, I'm trying to understand the logic of using the interrupt register for timing, but without causing an interrupt.
The programmers guide says bits in $FF09 are set even if device interrupt is not enabled. Is this also true if 'global' interrupts are not set (sei)? And I guess I would also need to clear $FF09 quite regularly still?

The application is to update screen without flickering, so I guess I need to wait for the raster to pass before moving any screen data. I tried something like this, but I don't think it's working

sei ;disable int.
lda #$CB ;last onscreen raster
sta $FF0B ;raster compare
lda $FF09
sta $FF09 ;clear status register
lda #$02 ;raster interrupt is bit 1
-
bit $FF09 ;loop until bit one is set
beq - ;if bit 1 = 0, AND #$02 = 0 Z=1, loop
[MOVE SCREEN DATA]


Copyright © Plus/4 World Team, 2001-2024. Support Plus/4 World on Patreon