nuclear@1: #include "hwregs.h" nuclear@1: #include "intr.h" nuclear@1: #include "copper.h" nuclear@1: nuclear@1: void wait_vpos(int x); nuclear@1: void wait_vblank(void); nuclear@1: nuclear@1: #define BPLSZ (320 / 8 * 256) nuclear@1: static unsigned char fb0[BPLSZ]; nuclear@1: nuclear@1: int main(void) nuclear@1: { nuclear@1: uint32_t fb0_addr = (uint32_t)fb0; nuclear@1: nuclear@1: REG_INTENA = SETBITS(INTEN_VERTB | INTEN_MASTER); nuclear@1: nuclear@1: REG_DMACON = CLRBITS(DMA_ALL); nuclear@1: REG_BPLCON0 = BPLCON0_COUNT(0) | BPLCON0_COLOR; nuclear@1: REG_BPLCON1 = 0; nuclear@1: REG_DIWSTART = 0x2981; nuclear@1: REG_DIWSTOP = 0x29c1; nuclear@1: REG_DDFSTART = 0x38; nuclear@1: REG_DDFSTOP = 0xd0; nuclear@1: nuclear@1: REG_COLOR0 = 0x00f; nuclear@1: REG_COLOR1 = 0xff0; nuclear@1: nuclear@1: init_copper(0, 0); nuclear@1: nuclear@1: wait_vblank(); nuclear@1: add_copper(COPPER_MOVE(REGN_BPL1PTH, fb0_addr >> 16)); nuclear@1: add_copper(COPPER_MOVE(REGN_BPL1PTL, fb0_addr)); nuclear@1: nuclear@1: add_copper(COPPER_VWAIT(64)); nuclear@1: add_copper(COPPER_MOVE(REGN_COLOR0, 0xf00)); nuclear@1: add_copper(COPPER_VWAIT(70)); nuclear@1: add_copper(COPPER_MOVE(REGN_COLOR0, 0x00f)); nuclear@1: nuclear@1: add_copper(COPPER_END); nuclear@1: nuclear@1: fb0[128 * 320 / 8] = 8; nuclear@1: nuclear@1: REG_DMACON = SETBITS(DMA_COPPER | DMA_MASTER); nuclear@1: enable_intr(); nuclear@1: nuclear@1: for(;;); nuclear@1: return 0; nuclear@1: } nuclear@1: nuclear@1: void wait_vpos(int x) nuclear@1: { nuclear@1: x <<= 8; nuclear@1: while((REG32_VPOSR & 0x1ff00) < x); nuclear@1: } nuclear@1: nuclear@1: void wait_vblank(void) nuclear@1: { nuclear@1: wait_vpos(300); nuclear@1: }