int main() { // INT_IE |= ( 1 << 13 ); // cart-remove-interrupt (handled by crt0) // CST_ROM0_1ST_3WAIT | CST_ROM0_2ND_1WAIT | CST_PREFETCH_ENABLE // REG_WSCNT = ( 5 << 2 ) | ( 1 << 14 ); // set rom-timing irqInit(); irqSet( IRQ_TIMER1, kradInterrupt ); irqEnable( IRQ_TIMER1 ); // midi setup irqSet( IRQ_TIMER3, midiInterrupt ); irqEnable( IRQ_TIMER3 ); midiInit(); REG_IME = 1; SetMode( MODE_0 | BG1_ON ); // starting SetBG(10, 10, 0); // create the globals object globals = new GlobalData(); // starting SetBG(0, 10, 10); globals->LoadSongs(); // starting SetBG(10, 0, 10); u16 i = 0; Keys *keys = new Keys(); First *firstpage = new First(keys); Page *selected = firstpage; // init krawall kragInit( KRAG_INIT_STEREO ); // make it so we can see the background REG_BG1CNT = BIT(7) | BIT(8) | BIT(9) | BIT(10) | BIT(11) | BIT(12); // high priority, 256 colour, point the banks at the right place etc // load the splash screen DMA3COPY((void*)splash_tiles, (u16*)VideoBuffer, SPLASH_TILESIZE | DMA16 | DMA_IMMEDIATE | DMA_SRC_INC | DMA_DST_INC); DMA3COPY((void*)splash_palette, (u16*)&BG_PALETTE[5], SPLASH_PALSIZE | DMA16 | DMA_IMMEDIATE | DMA_SRC_INC | DMA_DST_INC); DMA3COPY((void*)splash_map, (u16*)&VideoBuffer[0x7C00], 640 | DMA16 | DMA_IMMEDIATE | DMA_SRC_INC | DMA_DST_INC); // check keys while (keys->TestKey(keyA) != pressed) { keys->Jiffie(); } keys->Jiffie(); // load the krawall splash screen DMA3COPY((void*)krawall_splash_tiles, (u16*)VideoBuffer, KRAWALL_SPLASH_TILESIZE| DMA16 | DMA_IMMEDIATE | DMA_SRC_INC | DMA_DST_INC); DMA3COPY((void*)krawall_splash_palette, (u16*)&BG_PALETTE[5], KRAWALL_SPLASH_PALSIZE | DMA16 | DMA_IMMEDIATE | DMA_SRC_INC | DMA_DST_INC); DMA3COPY((void*)krawall_splash_map, (u16*)&VideoBuffer[0x7C00], 640 | DMA16 | DMA_IMMEDIATE | DMA_SRC_INC | DMA_DST_INC); // check keys while (keys->TestKey(keyA) != pressed) { keys->Jiffie(); } keys->Jiffie(); // load charset into memory as a demo tileset DMA3COPY((void*)font::tiles, (u16*)VideoBuffer, 3232 | DMA16 | DMA_IMMEDIATE | DMA_SRC_INC | DMA_DST_INC); DMA3COPY((void*)font::tiles_color, (u16*)&VideoBuffer[3232], 3232 | DMA16 | DMA_IMMEDIATE | DMA_SRC_INC | DMA_DST_INC); // set up the background palette for (i=0;i<7;i++) BG_PALETTE[i] = RGB(0, 0, 0); // this starts from 7 becuase the kludgy legacy converter used a 7-color offset (for parallax-starfield reasons) BG_PALETTE[7] = RGB(0x1F, 0x1F, 0x1F); BG_PALETTE[8] = RGB(0, 0, 0); // set the H and V offset of our background to zero // REG_BG1HOFS = 0; // REG_BG1VOFS = 0; // clear out the whole area BlankScreen(); while (1) { // this is zerosync SetBG(0, 0, 10); // figure out all our latest song positions globals->Tick(); // calculate audio stuff kramWorker(); // update midi progression midiUpdateBeat(globals->beat); // check keys keys->Jiffie(); // automatically cascades all pages and processes them firstpage->Process(); SetBG(0, 0, 0); // this is vsync //while( !REG_VCOUNT ); //while( REG_VCOUNT ); // try and fit the drawing stuff into the off-screen sync while(REG_VCOUNT != 160); SetBG(10, 0, 0); // do all the display shit in here BlankScreen(); selected = selected->Cycle(); selected->Draw(); SetBG(0, 0, 0); } return 1; }