From 03a5882df17ea42aa0b4039173f85ea1e7ce99fe Mon Sep 17 00:00:00 2001 From: Miquel Sabaté Solà Date: Fri, 13 Feb 2026 00:03:07 +0100 Subject: Remove vector.s MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instead of this, the 'reset' function can go into 'jetpac.s', as we could consider it's part of the 'main' work. As a bonus, doing this alignment gives us 3 bytes back from ROM space. Not that we care too much about space, but it's amusing nonetheless. The debug scope has been moved into its own file in include/. Admittedly it's not the most crucial file in the project, but it makes things more logical and it opens the door to more debugging utilities. This leaves us with a vector.s file only containing interrupt code. Thus, it just makes sense to rename it to interrupts.s, which in the end makes things more organized. Signed-off-by: Miquel Sabaté Solà --- src/interrupts.s | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 src/interrupts.s (limited to 'src/interrupts.s') diff --git a/src/interrupts.s b/src/interrupts.s new file mode 100644 index 0000000..8c53af7 --- /dev/null +++ b/src/interrupts.s @@ -0,0 +1,101 @@ +.segment "CODE" + +.proc nmi + ;; Should we skip it? + bit Globals::zp_flags + + ;; If we are on a dev environment, account for any frame drops. + .ifdef PARTIAL + bpl @account_for_frame_drop + .else + bpl @end + .endif + + ;; Save registers. + pha + txa + pha + tya + pha + + ;; Sprite DMA. + lda #$00 + sta OAM::m_address + lda #$02 + sta OAM::m_dma + + ;; Are we paused? If so skip timers, PAL handler and the likes. + lda #%00001000 + and Globals::zp_flags + bne @ppu_registers + + ;; PAL-specific code + .ifdef PAL + jsr Driver::pal_handler + .endif + + ;; TODO: some actions here will depend on the status of the game... + lda Globals::zp_flags + and #%00000001 + bne @ppu_registers + + ;; Increase the random seed. + inc Prng::zp_rand + + ;; Decrease title timer. + lda Title::zp_title_timer + beq @ppu_registers + dec Title::zp_title_timer + +@ppu_registers: + ;; Should we update PPU registers? + bit Globals::zp_flags + bvc @scroll + + ;; Zero out the `ppu` flag. + lda #%10111111 + and Globals::zp_flags + sta Globals::zp_flags + + bit PPU::m_status + + ;; Update the PPU control/mask registers with shadowed values. + lda PPU::zp_mask + sta PPU::m_mask + lda PPU::zp_control + sta PPU::m_control + +@scroll: + ;; Always reset the scroll just in case. + bit PPU::m_status + lda #$00 + sta PPU::m_scroll + sta PPU::m_scroll + + ;; Unblock the main code. + lda #%01111111 + and Globals::zp_flags + sta Globals::zp_flags + + ;; Restore registers. + pla + tay + pla + tax + pla + +@end: + rti + + ;; If we are on a dev environment, account for any frame drops. +.ifdef PARTIAL +@account_for_frame_drop: + inc Debug::zp_frame_drops + rti +.endif +.endproc + +;; Unused. +.proc irq + rti +.endproc -- cgit v1.2.3