8bitworkshop/presets/nes/tint.c

75 lines
1.6 KiB
C

/*
Demonstrates the PPU's tint and monochrome bits.
Use the controller to see different combinations.
*/
#include <stdlib.h>
#include <string.h>
// include NESLIB header
#include "neslib.h"
// link the pattern table into CHR ROM
//#link "chr_generic.s"
/*{pal:"nes",layout:"nes"}*/
const char PALETTE[32] = {
0x2D, // screen color
0x00,0x30,0x30,0x00, // background palette 0
0x0C,0x20,0x2C,0x00, // background palette 1
0x14,0x10,0x25,0x00, // background palette 2
0x17,0x16,0x28,0x00, // background palette 3
0x16,0x35,0x24,0x00, // sprite palette 0
0x00,0x37,0x25,0x00, // sprite palette 1
0x0D,0x2D,0x3A,0x00, // sprite palette 2
0x0D,0x27,0x2A // sprite palette 3
};
// setup PPU and tables
void setup_graphics() {
// clear sprites
oam_clear();
// set palette colors
pal_all(PALETTE);
}
void main(void)
{
byte i;
setup_graphics();
// draw message
for (i=0; i<30; i++) {
vram_adr(NTADR_A(1,i));
// vram_write("\x18\x18 USE CONTROLLER FOR TINT \x18\x18\x18", 30);
vram_write(" A:red B:green \x1e\x1f:blue \x1c\x1d:mono", 30);
}
// attributes
vram_adr(0x23c0);
vram_fill(0x00, 8);
vram_fill(0x55, 8);
vram_fill(0xaa, 8);
vram_fill(0xff, 8);
vram_fill(0x11, 8);
vram_fill(0x33, 8);
vram_fill(0xdd, 8);
// enable rendering
ppu_on_all();
// infinite loop
while(1) {
byte pad = pad_poll(0);
byte mask = MASK_BG;
if (pad & PAD_A)
mask |= MASK_TINT_RED;
if (pad & PAD_B)
mask |= MASK_TINT_GREEN;
if (pad & (PAD_LEFT|PAD_RIGHT))
mask |= MASK_TINT_BLUE;
if (pad & (PAD_UP|PAD_DOWN))
mask |= MASK_MONO;
ppu_mask(mask);
}
}