X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libsrc%2Fnes%2Fppu.s;h=06dc10a65695c94571183e0660144c95d2fc5db2;hb=1354e1265fd8353af51ab3275a833681c293c345;hp=344a1071ae0a5fadfeefa92e4eb3b27a14b16095;hpb=eae262b7c322c2985b22a20fb98a37adfabfcc7e;p=cc65 diff --git a/libsrc/nes/ppu.s b/libsrc/nes/ppu.s index 344a1071a..06dc10a65 100644 --- a/libsrc/nes/ppu.s +++ b/libsrc/nes/ppu.s @@ -3,130 +3,130 @@ ; Cleanup by Ullrich von Bassewitz ; - .export ppuinit - .export paletteinit, paldata + .export ppuinit + .export paletteinit, paldata - .include "nes.inc" + .include "nes.inc" ;+---------+----------------------------------------------------------+ -;| $2000 | PPU Control Register #1 (W) | -;| | | -;| | D7: Execute NMI on VBlank | -;| | 0 = Disabled | -;| | 1 = Enabled | -;| | D6: PPU Master/Slave Selection --+ | -;| | 0 = Master +-- UNUSED | -;| | 1 = Slave --+ | -;| | D5: Sprite Size | -;| | 0 = 8x8 | -;| | 1 = 8x16 | -;| | D4: Background Pattern Table Address | -;| | 0 = $0000 (VRAM) | -;| | 1 = $1000 (VRAM) | -;| | D3: Sprite Pattern Table Address | -;| | 0 = $0000 (VRAM) | -;| | 1 = $1000 (VRAM) | -;| | D2: PPU Address Increment | -;| | 0 = Increment by 1 | -;| | 1 = Increment by 32 | -;| | D1-D0: Name Table Address | -;| | 00 = $2000 (VRAM) | -;| | 01 = $2400 (VRAM) | -;| | 10 = $2800 (VRAM) | -;| | 11 = $2C00 (VRAM) | +;| $2000 | PPU Control Register #1 (W) | +;| | | +;| | D7: Execute NMI on VBlank | +;| | 0 = Disabled | +;| | 1 = Enabled | +;| | D6: PPU Master/Slave Selection --+ | +;| | 0 = Master +-- UNUSED | +;| | 1 = Slave --+ | +;| | D5: Sprite Size | +;| | 0 = 8x8 | +;| | 1 = 8x16 | +;| | D4: Background Pattern Table Address | +;| | 0 = $0000 (VRAM) | +;| | 1 = $1000 (VRAM) | +;| | D3: Sprite Pattern Table Address | +;| | 0 = $0000 (VRAM) | +;| | 1 = $1000 (VRAM) | +;| | D2: PPU Address Increment | +;| | 0 = Increment by 1 | +;| | 1 = Increment by 32 | +;| | D1-D0: Name Table Address | +;| | 00 = $2000 (VRAM) | +;| | 01 = $2400 (VRAM) | +;| | 10 = $2800 (VRAM) | +;| | 11 = $2C00 (VRAM) | ;+---------+----------------------------------------------------------+ ;+---------+----------------------------------------------------------+ -;| $2001 | PPU Control Register #2 (W) | -;| | | -;| | D7-D5: Full Background Colour (when D0 == 1) | -;| | 000 = None +------------+ | -;| | 001 = Green | NOTE: Do not use more | -;| | 010 = Blue | than one type | -;| | 100 = Red +------------+ | -;| | D7-D5: Colour Intensity (when D0 == 0) | -;| | 000 = None +--+ | -;| | 001 = Intensify green | NOTE: Do not use more | -;| | 010 = Intensify blue | than one type | -;| | 100 = Intensify red +--+ | -;| | D4: Sprite Visibility | -;| | 0 = Sprites not displayed | -;| | 1 = Sprites visible | -;| | D3: Background Visibility | -;| | 0 = Background not displayed | -;| | 1 = Background visible | -;| | D2: Sprite Clipping | -;| | 0 = Sprites invisible in left 8-pixel column | -;| | 1 = No clipping | -;| | D1: Background Clipping | -;| | 0 = BG invisible in left 8-pixel column | -;| | 1 = No clipping | -;| | D0: Display Type | -;| | 0 = Colour display | -;| | 1 = Monochrome display | +;| $2001 | PPU Control Register #2 (W) | +;| | | +;| | D7-D5: Full Background Colour (when D0 == 1) | +;| | 000 = None +------------+ | +;| | 001 = Green | NOTE: Do not use more | +;| | 010 = Blue | than one type | +;| | 100 = Red +------------+ | +;| | D7-D5: Colour Intensity (when D0 == 0) | +;| | 000 = None +--+ | +;| | 001 = Intensify green | NOTE: Do not use more | +;| | 010 = Intensify blue | than one type | +;| | 100 = Intensify red +--+ | +;| | D4: Sprite Visibility | +;| | 0 = Sprites not displayed | +;| | 1 = Sprites visible | +;| | D3: Background Visibility | +;| | 0 = Background not displayed | +;| | 1 = Background visible | +;| | D2: Sprite Clipping | +;| | 0 = Sprites invisible in left 8-pixel column | +;| | 1 = No clipping | +;| | D1: Background Clipping | +;| | 0 = BG invisible in left 8-pixel column | +;| | 1 = No clipping | +;| | D0: Display Type | +;| | 0 = Colour display | +;| | 1 = Monochrome display | ;+---------+----------------------------------------------------------+ ;----------------------------------------------------------------------------- -.proc ppuinit +.proc ppuinit - lda #%10101000 - sta PPU_CTRL1 + lda #%10101000 + sta PPU_CTRL1 - lda #%00011110 - sta PPU_CTRL2 + lda #%00011110 + sta PPU_CTRL2 ; Wait for vblank -@wait: lda PPU_STATUS - bpl @wait +@wait: lda PPU_STATUS + bpl @wait ; reset scrolling - lda #0 - sta PPU_VRAM_ADDR1 - sta PPU_VRAM_ADDR1 + lda #0 + sta PPU_VRAM_ADDR1 + sta PPU_VRAM_ADDR1 ; Make all sprites invisible - lda #$00 - ldy #$f0 - sta PPU_SPR_ADDR - ldx #$40 -@loop: sty PPU_SPR_IO - sta PPU_SPR_IO - sta PPU_SPR_IO - sty PPU_SPR_IO - dex - bne @loop + lda #$00 + ldy #$f0 + sta PPU_SPR_ADDR + ldx #$40 +@loop: sty PPU_SPR_IO + sta PPU_SPR_IO + sta PPU_SPR_IO + sty PPU_SPR_IO + dex + bne @loop - rts + rts .endproc ;----------------------------------------------------------------------------- -.proc paletteinit +.proc paletteinit ; Wait for v-blank -@wait: lda PPU_STATUS - bpl @wait - - lda #$3F - sta PPU_VRAM_ADDR2 - lda #$00 - sta PPU_VRAM_ADDR2 - - ldx #0 -@loop: lda paldata,x - sta PPU_VRAM_IO - inx - cpx #(16*2) - bne @loop - - rts - +@wait: lda PPU_STATUS + bpl @wait + + lda #$3F + sta PPU_VRAM_ADDR2 + lda #$00 + sta PPU_VRAM_ADDR2 + + ldx #0 +@loop: lda paldata,x + sta PPU_VRAM_IO + inx + cpx #(16*2) + bne @loop + + rts + .endproc ;----------------------------------------------------------------------------- @@ -134,24 +134,24 @@ .rodata paldata: - .repeat 2 - .byte $0f ; 0 black - .byte $14 ; 4 violett - .byte $3b ; 3 cyan - .byte $3d ; 1 white - - .byte $38 ; 7 yellow - .byte $2d ; b dark grey - .byte $22 ; e light blue - .byte $04 ; 2 red - - .byte $18 ; 8 orange - .byte $08 ; 9 brown - .byte $35 ; a light red - .byte $01 ; 6 blue - - .byte $10 ; c middle grey - .byte $2b ; d light green - .byte $3d ; f light gray - .byte $1a ; 5 green - .endrepeat + .repeat 2 + .byte $0f ; 0 black + .byte $14 ; 4 violett + .byte $3b ; 3 cyan + .byte $3d ; 1 white + + .byte $38 ; 7 yellow + .byte $2d ; b dark grey + .byte $22 ; e light blue + .byte $04 ; 2 red + + .byte $18 ; 8 orange + .byte $08 ; 9 brown + .byte $35 ; a light red + .byte $01 ; 6 blue + + .byte $10 ; c middle grey + .byte $2b ; d light green + .byte $3d ; f light gray + .byte $1a ; 5 green + .endrepeat