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  
  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]
  |   
 |