Advertisement
Guest User

Untitled

a guest
Nov 10th, 2013
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.         INCSRC  "memory.asm"
  2.  
  3.         ORG $8000
  4. Start:      SEI         ;disable IRQs
  5.         CLD         ;disable BCD
  6.         LDX #$FF        ;init stack
  7.         TXS
  8.         JSR InitPPU
  9.         JSR InitAPU
  10.         JSR ClearNametable
  11.         JSR LoadPalette
  12.         JSR LoadNametable
  13.         JSR ScreenOn
  14. @gameLoop:  JSR WaitForNMI
  15.         JMP @gameLoop
  16.  
  17. InitPPU:    LDA #$00
  18.         STA $2000       ;disable NMI
  19.         STA $2001       ;disable rendering
  20.         LDA #$FF
  21.         BIT $2002       ;clear vblank flag by reading
  22.                     ;wait two frames to stabilize PPU
  23. @waitForPPU1:   BIT $2002       ;check vblank flag
  24.         BPL @waitForPPU1
  25. @waitForPPU2:   BIT $2002       ;check vblank flag
  26.         BPL @waitForPPU2
  27.         BIT $2002
  28.         JMP ResetScroll
  29.  
  30. InitAPU:    LDA #$00
  31.         STA $4010       ; disable DMC IRQ
  32.         RTS
  33.  
  34. ResetScroll:    LDA #$00
  35.         STA $2005
  36.         STA $2005
  37.         RTS
  38.  
  39. LoadPalette:    LDA #$3F        ;tell PPU to write to $3F00
  40.         STA $2006
  41.         LDA #$00
  42.         STA $2006
  43.         LDA #$0F        ; code for black
  44.         STA $2007       ; write to background
  45.         LDA #$30        ; code for white
  46.         STA $2007       ; fill the first palette with this
  47.         STA $2007
  48.         STA $2007
  49.         RTS
  50.  
  51. ClearNametable: LDA #$20        ; write to VRAM 2000
  52.         STA #$2006
  53.         LDA #$00
  54.         STA #$2006
  55.         LDY #$04        ; write 256 * 4 (clear from 2000-2400)
  56. @writeBlock:    LDX #$00
  57. @writeLoop: STA $2007
  58.         DEX
  59.         BNE @writeLoop
  60.         DEY
  61.         BNE @writeBlock
  62.         RTS
  63.  
  64. HelloTxt:   DB  "HELLO" - "A" + 1, 0
  65. LoadNametable:  LDA #$20        ; write to VRAM 2022 - first visible
  66.         STA $2006
  67.         LDA #$42
  68.         STA $2006
  69.         LDX #$00        ; index into txt
  70. @copyToVRAM:    LDA HelloTxt, X ; fetch char
  71.         BEQ @copyDone   ; stop if 0
  72.         STA $2007       ; write to screen
  73.         INX
  74.         BNE @copyToVRAM ; always loop
  75. @copyDone:  RTS
  76.  
  77. ScreenOn:   LDA #$80        ; enable NMI
  78.         STA $2000
  79.         LDA #$08        ; enable BG
  80.         STA $2001
  81.         RTS
  82.  
  83. NullVector: RTI
  84.  
  85. NMI:        INC retraces
  86.         RTI
  87.  
  88. WaitForNMI: LDA retraces
  89. @loop       CMP retraces
  90.         BEQ @loop
  91.         RTS
  92.  
  93. Vectors:    ORG $BFFA
  94. @nmi:       DW  NMI
  95. @reset:     DW  Start
  96. @irq:       DW  NullVector
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement