Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- INCSRC "memory.asm"
- ORG $8000
- Start: SEI ;disable IRQs
- CLD ;disable BCD
- LDX #$FF ;init stack
- TXS
- JSR InitPPU
- JSR InitAPU
- JSR ClearNametable
- JSR LoadPalette
- JSR LoadNametable
- JSR ScreenOn
- @gameLoop: JSR WaitForNMI
- JMP @gameLoop
- InitPPU: LDA #$00
- STA $2000 ;disable NMI
- STA $2001 ;disable rendering
- LDA #$FF
- BIT $2002 ;clear vblank flag by reading
- ;wait two frames to stabilize PPU
- @waitForPPU1: BIT $2002 ;check vblank flag
- BPL @waitForPPU1
- @waitForPPU2: BIT $2002 ;check vblank flag
- BPL @waitForPPU2
- BIT $2002
- JMP ResetScroll
- InitAPU: LDA #$00
- STA $4010 ; disable DMC IRQ
- RTS
- ResetScroll: LDA #$00
- STA $2005
- STA $2005
- RTS
- LoadPalette: LDA #$3F ;tell PPU to write to $3F00
- STA $2006
- LDA #$00
- STA $2006
- LDA #$0F ; code for black
- STA $2007 ; write to background
- LDA #$30 ; code for white
- STA $2007 ; fill the first palette with this
- STA $2007
- STA $2007
- RTS
- ClearNametable: LDA #$20 ; write to VRAM 2000
- STA #$2006
- LDA #$00
- STA #$2006
- LDY #$04 ; write 256 * 4 (clear from 2000-2400)
- @writeBlock: LDX #$00
- @writeLoop: STA $2007
- DEX
- BNE @writeLoop
- DEY
- BNE @writeBlock
- RTS
- HelloTxt: DB "HELLO" - "A" + 1, 0
- LoadNametable: LDA #$20 ; write to VRAM 2022 - first visible
- STA $2006
- LDA #$42
- STA $2006
- LDX #$00 ; index into txt
- @copyToVRAM: LDA HelloTxt, X ; fetch char
- BEQ @copyDone ; stop if 0
- STA $2007 ; write to screen
- INX
- BNE @copyToVRAM ; always loop
- @copyDone: RTS
- ScreenOn: LDA #$80 ; enable NMI
- STA $2000
- LDA #$08 ; enable BG
- STA $2001
- RTS
- NullVector: RTI
- NMI: INC retraces
- RTI
- WaitForNMI: LDA retraces
- @loop CMP retraces
- BEQ @loop
- RTS
- Vectors: ORG $BFFA
- @nmi: DW NMI
- @reset: DW Start
- @irq: DW NullVector
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement