Advertisement
Guest User

Untitled

a guest
Dec 27th, 2014
328
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.   .inesprg  1
  2.   .ineschr  1
  3.   .inesmap  0
  4.   .inesmir  1
  5.  
  6.   .org $0000
  7. AddrLow:    .rs 1
  8. AddrHigh:   .rs 1
  9. nametable:  .rs 1
  10. scroll:     .rs 1
  11.   .bank 0
  12.   .org $C000
  13. ;---constants---
  14. sprite_RAM = $0200
  15. controller_RAM = $4016
  16.  
  17. speed = $01
  18. ;---------------
  19.  
  20. RESET:
  21.   sei
  22.   cld
  23.   ldx #$40
  24.   stx $4017
  25.   ldx #$FF
  26.   txs
  27.   inx
  28.   stx $2000
  29.   stx $2001
  30.   stx $4010
  31.  
  32. vblankwait1:    ;wait for first vblank to make sure ppu is ready
  33.   bit $2002
  34.   bpl vblankwait1
  35.  
  36. clrmem:
  37.   lda #$00
  38.   sta $0000, x
  39.   sta $0100, x
  40.   sta $0200, x
  41.   sta $0400, x
  42.   sta $0500, x
  43.   sta $0600, x
  44.   sta $0700, x
  45.   lda #$FE
  46.   sta $0300, x
  47.   inx
  48.   bne clrmem
  49.  
  50. vblankwait2:    ;ppu is ready after second vblank
  51.   bit $2002
  52.   bpl vblankwait2
  53.  
  54. ;---sprites, controllers---
  55. load_palettes:
  56.   lda $2002
  57.   lda #$3F
  58.   sta $2006
  59.   lda #$00
  60.   sta $2006
  61.   ldx #$00
  62. load_palettes_loop:
  63.   lda palette,x
  64.   sta $2007
  65.   inx
  66.   cpx #$20
  67.   bne load_palettes_loop
  68.  
  69. load_sprites:
  70.   ldx #$00
  71. load_sprites_loop:
  72.   lda sprite,x
  73.   sta sprite_RAM,x
  74.   inx
  75.   cpx #$20
  76.   bne load_sprites_loop
  77.  
  78.   lda $2002             ;read PPU to reset latch
  79.   lda #$20
  80.   sta $2006             ; write the high byte of $2000 address (NT 0)
  81.   lda #$00
  82.   sta $2006             ; write the low byte of $2000 address
  83.  
  84.   lda #low(nametable0)
  85.   sta AddrLow
  86.   lda #high(nametable0)
  87.   sta AddrHigh
  88.  
  89.   ldy #$00              ;start at background row 0
  90.   ldx #$08
  91.  
  92. FillNametablesLoop:
  93.   lda [AddrLow],y       ;load data from address
  94.   sta $2007
  95.   iny
  96.   bne FillNametablesLoop
  97.   inc AddrHigh
  98.   dex
  99.   bne FillNametablesLoop
  100.  
  101.   lda #low(nametable0)
  102.   sta AddrLow
  103.   lda #high(nametable0)
  104.   sta AddrHigh
  105.  
  106.   ;make PPU render properly next frame
  107.   lda #%10010000    ;enable NMI, sprites from pattern 0, backgrounds from pattern 1
  108.   sta $2000
  109.   lda #%00011110    ;enable sprites, enable background
  110.   sta $2001
  111.  
  112. ;(meta sprite code)
  113.  
  114. Forever:
  115.   jmp Forever
  116.  
  117. NMI:
  118.   inc scroll
  119. NTSwapCheck:        ;swap nametables
  120.   lda scroll
  121.   bne NTSwapCheckDone
  122.  
  123. NTSwap:
  124.   lda nametable
  125.   eor #$01
  126.   sta nametable
  127.  
  128. NTSwapCheckDone:
  129.   lda #$00
  130.   sta $2003         ;set low byte (00) of ram address
  131.   lda #$02
  132.   sta $4014         ;set high byte (02) of address, start transfer
  133.   ;run other game graphics updating code here
  134.   lda #$00
  135.   sta $2006         ;clean up PPU registers
  136.   sta $2006
  137.  
  138.   lda scroll
  139.   sta $2005         ;horiz scroll
  140.   lda #$00
  141.   sta $2005         ;no verti scroll
  142.  
  143.   ;Make PPU render properly next frame
  144.   lda #%10010000    ;enable NMI, sprites from pattern 0, backgrounds from pattern 1
  145.   sta $2000
  146.   lda #%00011110    ;enable sprites, enable background
  147.   sta $2001
  148.  
  149. ;(controller code)
  150.  
  151.   rti
  152.  
  153.   .bank 1
  154.   .org $E000
  155. ;(pallete, sprite, and background data)
  156.  
  157.   .org $FFFA
  158.   .dw NMI
  159.  
  160.   .dw RESET
  161.  
  162.   .dw 0
  163.  
  164.   .bank 2
  165.   .org $0000
  166.   .incbin "background.chr"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement