From 1fa9828f6a4e30cbaeaa40b4307acd09a237a911 Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Tue, 18 Jun 2024 20:35:38 +0200 Subject: [PATCH] Add additiona raster irq for kernal with potential no IO --- include/c64/rasterirq.c | 99 +++++++++++++++++++++++++++++++++++++++++ include/c64/rasterirq.h | 2 + oscar64/Parser.cpp | 17 ++++--- 3 files changed, 111 insertions(+), 7 deletions(-) diff --git a/include/c64/rasterirq.c b/include/c64/rasterirq.c index ea293ac..e9783d0 100644 --- a/include/c64/rasterirq.c +++ b/include/c64/rasterirq.c @@ -248,6 +248,88 @@ ex2: jmp $ea31 } +__asm irq3 +{ + lda $01 + pha + lda #$36 + sta $01 + + lda $d019 + bpl ex2 + + ldx nextIRQ +l1: + lda rasterIRQNext, x + cmp #$ff + beq e1 + + ldy rasterIRQIndex + 1, x + tax + lda rasterIRQLow, y + sta ji + 1 + lda rasterIRQHigh, y + sta ji + 2 + +ji: + jsr $0000 +jx: + + inc nextIRQ + ldx nextIRQ + + lda rasterIRQNext, x + cmp #$ff + beq e2 + + tay + + sec + sbc #4 + cmp $d012 + bcc l1 + + dey + sty $d012 +w1: + jmp ex + +e2: + ldx npos + stx tpos + inc rirq_count + + bit $d011 + bmi e1 + + sta $d012 + + jmp ex + +e1: + ldx #0 + stx nextIRQ + lda rasterIRQNext, x + sec + sbc #1 + sta $d012 + +ex: + asl $d019 + pla + sta $01 + + jmp $ea81 + +ex2: + LDA $DC0D + cli + pla + sta $01 + + jmp $ea31 +} + // 0 lda #data0 // 2 ldy #data1 // 4 cpx $d012 @@ -410,6 +492,23 @@ void rirq_init_kernal(void) } +void rirq_init_kernal_io(void) +{ + rirq_init_tables(); + + __asm + { + sei + } + + *(void **)0x0314 = irq3; + + vic.intr_enable = 1; + vic.ctrl1 &= 0x7f; + vic.raster = 255; + +} + void rirq_init_io(void) { rirq_init_tables(); diff --git a/include/c64/rasterirq.h b/include/c64/rasterirq.h index 7c17258..1c05d59 100644 --- a/include/c64/rasterirq.h +++ b/include/c64/rasterirq.h @@ -149,6 +149,8 @@ inline void rirq_init(bool kernalIRQ); void rirq_init_kernal(void); +void rirq_init_kernal_io(void); + void rirq_init_io(void); void rirq_init_memmap(void); diff --git a/oscar64/Parser.cpp b/oscar64/Parser.cpp index b3daf03..dbd6151 100644 --- a/oscar64/Parser.cpp +++ b/oscar64/Parser.cpp @@ -1739,14 +1739,17 @@ Expression* Parser::ParseInitExpression(Declaration* dtype) Expression* texp = ParseInitExpression(mdec->mBase); Declaration* cdec = CopyConstantInitializer(mdec->mOffset, mdec->mBase, texp); - cdec->mBits = mdec->mBits; - cdec->mShift = mdec->mShift; + if (cdec) + { + cdec->mBits = mdec->mBits; + cdec->mShift = mdec->mShift; - if (last) - last->mNext = cdec; - else - dec->mParams = cdec; - last = cdec; + if (last) + last->mNext = cdec; + else + dec->mParams = cdec; + last = cdec; + } if (!ConsumeTokenIf(TK_COMMA)) break;