.pc = $0801 "Basic Program" :BasicUpstart($1000) .pc = $1000 jmp start irq0: dec $d019 inc $d012 lda #<irq1 sta $fffe // set up 2nd IRQ to get a stable IRQ cli // Following here: A bunch of NOPs which allow the 2nd IRQ // to be triggered with either 0 or 1 clock cycle delay // resulting in an "almost" stable IRQ. nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop irq1: nop nop nop nop nop nop nop nop nop bit $ea lda #$2d sta $d012 lda #<irq0 sta $fffe // switch IRQ back to first stabilizer IRQ lda $d012 cmp $d012 // stabilize last jittering cycle beq delay2 // if equal, 2 cycles delay. else 3 cycles delay delay2: ldx #$00 //2 v: lda rastercols,x //4 sta $d020 //4 // sta $d021 //4 //nop //nop bit $ea ldy delay,x //4 dey //2 bne *-1 //2 or 3 inx //2 cpx #48 //2 bne v //2 or 3 = 30 bit $ea /* ldx #$10 wait: dex bne wait */ // Following here is the main FLI loop which forces the VIC-II to read // new color data each rasterline. The loop is exactly 23 clock cycles // long so together with 40 cycles of color DMA this will result in // 63 clock cycles which is exactly the length of a PAL C64 rasterline. asl $d019 nmi: rti start: sei lda #$35 sta $01 // disable all ROMs lda #$7f sta $dc0d // no timer IRQs lda $dc0d // clear timer IRQ flags lda #$1b sta $d011 lda #$2d sta $d012 lda #$00 //Set Background ldx #BLACK //and Border colors sta $d020 //turn off sprites stx $d021 lda #<irq0 sta $fffe lda #>irq0 sta $ffff lda #<nmi sta $fffa lda #>nmi sta $fffb // dummy NMI to avoid crashing due to RESTORE lda #$01 sta $d01a // enable raster IRQs dec $d019 // clear raster IRQ flag cli jmp * // that's it, no more action needed .pc = $0c00 rastercols: .byte BLUE, PURPLE, GREEN, LIGHT_RED, PURPLE, BLACK, WHITE, ORANGE .byte BLUE, PURPLE, GREEN, LIGHT_RED, PURPLE, BLACK, WHITE, ORANGE .byte BLUE, PURPLE, GREEN, LIGHT_RED, PURPLE, BLACK, WHITE, BLACK .byte BLUE, PURPLE, GREEN, LIGHT_RED, PURPLE, BLACK, WHITE, ORANGE .byte BLUE, PURPLE, GREEN, LIGHT_RED, PURPLE, BLACK, WHITE, ORANGE .byte BLUE, PURPLE, GREEN, LIGHT_RED, PURPLE, BLACK, WHITE, BLACK .pc = $0d00 delay: .byte $08,$01,$08,$08,$08,$08, $08, $08 .byte $08,$01,$08,$08,$08,$08, $08, $08 .byte $08,$01,$08,$08,$08,$08, $08, $08 .byte $08,$01,$08,$08,$08,$08, $08, $08 .byte $08,$01,$08,$08,$08,$08, $08, $08 .byte $08,$01,$08,$08,$08,$08, $08, $08 .byte $08,$01,$08,$08,$08,$08, $08, $08 .byte $08,$01,$08,$08,$08,$08, $08, $08
//--------------------------------------------------------------- // This is how you write your stable raster irq //--------------------------------------------------------------- irq1: :irqStart_stableRaster // Do your rasterbars here :irqEnd //--------------------------------------------------------------- // Defining irq start and end //--------------------------------------------------------------- .pseudocommand irqStart_stableRaster { sta _ds_irqa stx _ds_irqx sty _ds_irqy lsr $d019 inc $d012 :mov16 #irq2;$fffe cli :nop #8 irq2: :nop #14 :pla #3 lsr $d019 lda $d012 cmp $d012 beq *+2 } .pseudocommand irqEnd nextIrqYpos ; nextIrq { .if (nextIrqYpos.getType()!=AT_NONE) { :mov nextIrqYpos ; $d012 } .if (nextIrq.getType()!=AT_NONE) { :mov16 nextIrq ; $fffe } lda _ds_irqa ldx _ds_irqx ldy _ds_irqy rti }
SEI LDA #$35 STA $01 LDA #<STAGE1_IRQ1 STA $FFFE LDA #>STAGE1_IRQ1 STA $FFFF LDA #$30 STA $D012 LDA #$7F STA $DC0D LDA #$1B STA $D011 LDA #$01 STA $D01A LDA $DC0D LSR $D019 CLI LOOP LDA #0 STA SYNC WAITSYNC CMP SYNC BEQ SYNCWAIT JSR GAMELOOP JMP LOOP STAGE1_IRQ1: PHA TXA PHA TYA PHA LSR $D019 LDA #$01 STA SYNC ; LDA #$35 ; STA $01 JSR $E003 LDA #$47 STA $D012 LDA #$18 STA $D016 LDA #$0f STA $D021 LDA #$01 STA $D022 LDA #$09 STA $D023 LDA #$00 STA $D015 ;LDA #$01 ;STA $D020 LDA #<STAGE1_IRQ2 STA $FFFE LDA #>STAGE1_IRQ2 STA $FFFF ; LDA #$37 ; STA $01 PLA TAY PLA TAX PLA RTI STAGE1_IRQ2: PHA TXA PHA TYA PHA LSR $D019 LDA #$48 STA $D012 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP LDA #$0f STA $D021 LDA #$09 STA $D022 LDA #$03 STA $D023 LDA #$10 STA $D016 LDA #$FF STA $D015 ;LDA #$02 ;STA $D020 LDA #<STAGE1_IRQ3 STA $FFFE LDA #>STAGE1_IRQ3 STA $FFFF PLA TAY PLA TAX PLA RTI STAGE1_IRQ3: PHA TXA PHA TYA PHA LSR $D019 LDA #$6A STA $D012 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP LDA TEMP1 ORA #$10 STA $D016 ;LDA #$03 ;STA $D020 LDA #$0E STA $D021 LDA #$01 STA $D022 LDA #$0E STA $D023 LDA #<STAGE1_IRQ4 STA $FFFE LDA #>STAGE1_IRQ4 STA $FFFF PLA TAY PLA TAX PLA RTI STAGE1_IRQ4: PHA TXA PHA TYA PHA LSR $D019 LDA #$7A STA $D012 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP LDA TEMP2 ORA #$10 STA $D016 ;LDA #$04 ;STA $D020 LDA #$0E STA $D021 LDA #<STAGE1_IRQ5 STA $FFFE LDA #>STAGE1_IRQ5 STA $FFFF PLA TAY PLA TAX PLA RTI ;JMP $EA7E STAGE1_IRQ5: PHA TXA PHA TYA PHA LSR $D019 LDA #$84 STA $D012 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP LDA TEMP2 ORA #$10 STA $D016 ;LDA #$06 ;STA $D020 LDA #$00 STA $D022 LDA #$0B STA $D021 LDA #$0B STA $D023 LDA #<STAGE1_IRQ6 STA $FFFE LDA #>STAGE1_IRQ6 STA $FFFF PLA TAY PLA TAX PLA RTI ;JMP $EA7E ;JMP $EA7E STAGE1_IRQ6: PHA TXA PHA TYA PHA LSR $D019 LDA #$98 STA $D012 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP LDA TEMP6 ORA #$10 STA $D016 ;LDA #$07 ;STA $D020 LDA #$0B STA $D021 STA $D022 STA $D023 LDA #<STAGE1_IRQ7 STA $FFFE LDA #>STAGE1_IRQ7 STA $FFFF PLA TAY PLA TAX PLA RTI ;JMP $EA7E ;JMP $EA7E STAGE1_IRQ7: PHA TXA PHA TYA PHA LSR $D019 LDA #$AA STA $D012 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP ;LDA #$08 ;STA $D020 LDA TEMP6 ORA #$10 STA $D016 LDA #$0B STA $D021 LDA #$0B STA $D022 LDA #$0B STA $D023 LDA #<STAGE1_IRQ8 STA $FFFE LDA #>STAGE1_IRQ8 STA $FFFF PLA TAY PLA TAX PLA RTI ;JMP $EA7E STAGE1_IRQ8: PHA TXA PHA TYA PHA LSR $D019 LDA #$C2 STA $D012 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP LDA #$0E STA $D021 LDA #$0B STA $D023 LDA #$01 STA $D022 LDA TEMP7 ORA #$10 STA $D016 LDA #<STAGE1_IRQ9 STA $FFFE LDA #>STAGE1_IRQ9 STA $FFFF PLA TAY PLA TAX PLA RTI STAGE1_IRQ9: PHA TXA PHA TYA PHA LSR $D019 LDA #$E3 STA $D012 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP ;LDA #$0B ;STA $D020 LDA TEMP8 ORA #$10 STA $D016 LDA #<STAGE1_IRQ10 STA $FFFE LDA #>STAGE1_IRQ10 STA $FFFF PLA TAY PLA TAX PLA NMI: RTI STAGE1_IRQ10: PHA TXA PHA TYA PHA LSR $D019 LDA #$F2 STA $D012 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP LDA #$18 STA $D016 LDA #$09 STA $D023 LDA #$0F STA $D021 LDA #$01 STA $D022 LDA #0 STA $D015 LDA #<STAGE1_IRQ1 STA $FFFE LDA #>STAGE1_IRQ1 STA $FFFF PLA TAY PLA TAX PLA RTI
you can do only one pha at the start and only one pla rti at the end when you destroy the val of A only
STAGE1_IRQ1: STA I1+1 LSR $D019 LDA #$42 STA $D012 ;TSX NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP ;TSX LDA #$00 STA $D015 LDA #$18 STA $D016 LDA #$0F STA $D021 LDA #$01 STA $D022 LDA #$09 STA $D023 LDA #<STAGE1_IRQ2 STA $FFFE LDA #>STAGE1_IRQ2 STA $FFFF I1 LDA #0 NMI RTI STAGE1_IRQ2 STA I2+1 LSR $D019 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP LDA #$4A STA $D012 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP LDA #$FF STA $D015 LDA #$10 STA $D016 LDA #$0F STA $D021 LDA #$09 STA $D022 LDA #$03 STA $D023 LDA #<STAGE1_IRQ3 STA $FFFE LDA #>STAGE1_IRQ3 STA $FFFF I2 LDA #0 RTI STAGE1_IRQ3 STA I3+1 LSR $D019 CLI LDA #$6A STA $D012 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP LDA TEMP1 ORA #$10 STA $D016 LDA #$0E STA $D021 LDA #$01 STA $D022 LDA #$0E STA $D023 LDA #<STAGE1_IRQ4 STA $FFFE LDA #>STAGE1_IRQ4 STA $FFFF I3 LDA #0 RTI STAGE1_IRQ4 STA I4+1 LSR $D019 CLI LDA #$82 STA $D012 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP LDA TEMP2 ORA #$10 STA $D016 LDA #$0E STA $D021 LDA #$01 STA $D022 LDA #$0b STA $D023 LDA #<STAGE1_IRQ5 STA $FFFE LDA #>STAGE1_IRQ5 STA $FFFF I4 LDA #0 RTI STAGE1_IRQ5 STA I5+1 LSR $D019 LDA #$8a STA $D012 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP LDA TEMP3 ORA #$10 STA $D016 LDA #$0B STA $D021 LDA #$00 STA $D022 LDA #$0B STA $D023 LDA #<STAGE1_IRQ6 STA $FFFE LDA #>STAGE1_IRQ6 STA $FFFF I5 LDA #0 RTI STAGE1_IRQ6 STA I6+1 LSR $D019 CLI LDA #$98 STA $D012 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP LDA TEMP6 ORA #$10 STA $D016 LDA #$0B STA $D021 LDA #$0B STA $D022 LDA #$0B STA $D023 LDA #<STAGE1_IRQ7 STA $FFFE LDA #>STAGE1_IRQ7 STA $FFFF I6 LDA #0 RTI STAGE1_IRQ7 STA I7+1 LSR $D019 CLI LDA #$aa STA $D012 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP LDA TEMP6 ORA #$10 STA $D016 LDA #$0B STA $D021 LDA #$0B STA $D022 LDA #$0B STA $D023 LDA #<STAGE1_IRQ8 STA $FFFE LDA #>STAGE1_IRQ8 STA $FFFF I7 LDA #0 RTI STAGE1_IRQ8 STA I8+1 STX I8X+1 STY I8X+1 DEC $D019 ;DEC $D011 LDA #$C2 STA $D012 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP LDA TEMP7 ORA #$10 STA $D016 LDA #$0E STA $D021 LDA #$01 STA $D022 LDA #$0B STA $D023 LDA #<STAGE1_IRQ9 STA $FFFE LDA #>STAGE1_IRQ9 STA $FFFF I8 LDA #0 I8X LDX #0 I8Y LDY #0 RTI STAGE1_IRQ9 STA I9+1 LSR $D019 LDA #$E2 STA $D012 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP LDA TEMP8 ORA #$10 STA $D016 LDA #$0E STA $D021 LDA #$01 STA $D022 LDA #$0B STA $D023 LDA #<STAGE1_IRQ10 STA $FFFE LDA #>STAGE1_IRQ10 STA $FFFF I9 LDA #0 RTI STAGE1_IRQ10 STA I10+1 LSR $D019 LDA #$F2 STA $D012 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP LDA #$00 STA $D015 LDA #$18 STA $D016 LDA #$0F STA $D021 LDA #$01 STA $D022 LDA #$09 STA $D023 LDA #<STAGE1_IRQ1 STA $FFFE LDA #>STAGE1_IRQ1 STA $FFFF LDA #$01 STA SYNC JSR $E003 I10 LDA #0 RTI