From bc87587330e9265b23861d0f763fdb1612e5f632 Mon Sep 17 00:00:00 2001 From: Miquel Sabaté Solà Date: Fri, 22 Sep 2023 14:05:19 +0200 Subject: Initial commit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add the basic structure and the first example: managing controller input. Signed-off-by: Miquel Sabaté Solà --- examples/wrapper.s | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 examples/wrapper.s (limited to 'examples/wrapper.s') diff --git a/examples/wrapper.s b/examples/wrapper.s new file mode 100644 index 0000000..673c697 --- /dev/null +++ b/examples/wrapper.s @@ -0,0 +1,90 @@ +;;; +;; This is an empty wrapper for the NES. It does some basic hardware +;; initialization and finally calls a `Main` subroutine that is to be provided +;; by another file. After that, it loops indefinitely. +;; +;; There are some variations of this file already, I just took it from +;; NESHacker: https://github.com/NesHacker (definitely check his Youtube +;; channel, it's extra-dope!); originally licensed under the MIT License. +;;; + +.import Main + +.segment "HEADER" + .byte $4E, $45, $53, $1A ; iNES header identifier + .byte 2 ; 2x 16KB PRG-ROM Banks + .byte 1 ; 1x 8KB CHR-ROM + .byte $01, $00 ; mapper 0, vertical mirroring + +.segment "VECTORS" + .addr nmi + .addr reset + .addr 0 + +.segment "STARTUP" + +.segment "CHARS" + +.segment "CODE" + +.proc nmi + bit $2002 + lda #0 + sta $2006 + sta $2006 + rti +.endproc + +.proc ResetPalettes + bit $2002 + lda #$3f + sta $2006 + lda #$00 + sta $2006 + lda #$0F + ldx #$20 +@paletteLoadLoop: + sta $2007 + dex + bne @paletteLoadLoop + rts +.endproc + +.proc reset + sei + cld + ldx #%01000000 + stx $4017 + ldx #$ff + txs + ldx #0 + stx $2000 + stx $2001 + stx $4010 + bit $2002 +@vblankWait1: + bit $2002 + bpl @vblankWait1 +@clearMemory: + lda #$00 + sta $0000, x + sta $0100, x + sta $0200, x + sta $0300, x + sta $0400, x + sta $0500, x + sta $0600, x + sta $0700, x + inx + bne @clearMemory +@vblankWait2: + bit $2002 + bpl @vblankWait2 + jsr ResetPalettes +main: + jsr Main + lda #%00001000 + sta $2001 +endlessLoop: + jmp endlessLoop +.endproc -- cgit v1.2.3