void fill(int addr, unsigned char v, unsigned int count) { __wstart(addr); while (count--) spi_transfer(v); __end(); }
void GDClass::fill(int addr, byte v, unsigned int count) { __wstart(addr); while (count--) SPI.transfer(v); __end(); }
void GDClass::wr16(unsigned int addr, unsigned int v) { __wstart(addr); SPI.transfer(lowByte(v)); SPI.transfer(highByte(v)); __end(); }
void wr16(unsigned int addr, unsigned int v) { __wstart(addr); spi_transfer(low_byte(v)); spi_transfer(high_byte(v)); __end(); }
void copy(unsigned int addr, unsigned char *src, int count) { __wstart(addr); while (count--) { spi_transfer(*src); src++; } __end(); }
void GDClass::voice(int v, byte wave, unsigned int freq, byte lamp, byte ramp) { __wstart(VOICES + (v << 2)); SPI.transfer(lowByte(freq)); SPI.transfer(highByte(freq) | (wave << 7)); SPI.transfer(lamp); SPI.transfer(ramp); __end(); }
void GDClass::sprite2x2(int spr, int x, int y, byte image, byte palette, byte rot, byte jk) { __wstart(0x3000 + (spr << 2)); GD.xsprite(x, y, -16, -16, image + 0, palette, rot, jk); GD.xsprite(x, y, 0, -16, image + 1, palette, rot, jk); GD.xsprite(x, y, -16, 0, image + 2, palette, rot, jk); GD.xsprite(x, y, 0, 0, image + 3, palette, rot, jk); __end(); }
void GDClass::sprite(int spr, int x, int y, byte image, byte palette, byte rot, byte jk) { __wstart(RAM_SPR + (spr << 2)); SPI.transfer(lowByte(x)); SPI.transfer((palette << 4) | (rot << 1) | (highByte(x) & 1)); SPI.transfer(lowByte(y)); SPI.transfer((jk << 7) | (image << 1) | (highByte(y) & 1)); __end(); }
void GDClass::copy(unsigned int addr, uint_farptr_t src, int count) { __wstart(addr); while (count--) { SPI.transfer(pgm_read_byte_far(src)); src++; } __end(); }
void GDClass::copy(unsigned int addr, PROGMEM prog_uchar *src, int count) { __wstart(addr); while (count--) { SPI.transfer(pgm_read_byte_near(src)); src++; } __end(); }
void terminal_putchar(char character, int x, int y) { __wstart((y << 6) + x); //screen_buffer[x+y] = character; spi_transfer(character); __end(); }
void GDClass::begin() { delay(250); // give Gameduino time to boot pinMode(SS_PIN, OUTPUT); #ifdef BOARD_maple SPI.begin(SPI_4_5MHZ, MSBFIRST, 0); #else SPI.begin(); SPI.setClockDivider(SPI_CLOCK_DIV2); SPI.setBitOrder(MSBFIRST); SPI.setDataMode(SPI_MODE0); SPSR = (1 << SPI2X); #endif digitalWrite(SS_PIN, HIGH); GD.wr(J1_RESET, 1); // HALT coprocessor __wstart(RAM_SPR); // Hide all sprites for (int i = 0; i < 512; i++) GD.xhide(); __end(); fill(RAM_PIC, 0, 1024 * 10); // Zero all character RAM fill(RAM_SPRPAL, 0, 2048); // Sprite palletes black fill(RAM_SPRIMG, 0, 64 * 256); // Clear all sprite data fill(VOICES, 0, 256); // Silence fill(PALETTE16A, 0, 128); // Black 16-, 4-palletes and COMM GD.wr16(SCROLL_X, 0); GD.wr16(SCROLL_Y, 0); GD.wr(JK_MODE, 0); GD.wr(SPR_DISABLE, 0); GD.wr(SPR_PAGE, 0); GD.wr(IOMODE, 0); GD.wr16(BG_COLOR, 0); GD.wr16(SAMPLE_L, 0); GD.wr16(SAMPLE_R, 0); GD.wr16(SCREENSHOT_Y, 0); GD.wr(MODULATOR, 64); }
//set : |= ou juste = ? void terminal_init() { //Already done in InitSPI() //rFIO0DIR |= (1<<16); //Set cs pin for terminal as output //__end(); int i; wr(J1_RESET, 1); // HALT coprocessor __wstart(RAM_SPR); // Hide all sprites for (i = 0; i < 512; i++) { xhide(); } __end(); //release Select Pin fill(RAM_PIC, 0, 1024 * 10); // Zero all character RAM fill(RAM_SPRPAL, 0, 2048); // Sprite palletes black fill(RAM_SPRIMG, 0, 64 * 256); // Clear all sprite data fill(VOICES, 0, 256); // Silence fill(PALETTE16A, 0, 128); // Black 16-, 4-palletes and COMM wr16(SCROLL_X, 0); wr16(SCROLL_Y, 0); wr(JK_MODE, 0); wr(SPR_DISABLE, 0); wr(SPR_PAGE, 0); wr(IOMODE, 0); wr16(BG_COLOR, 0); wr16(SAMPLE_L, 0); wr16(SAMPLE_R, 0); wr16(SCREENSHOT_Y, 0); wr(MODULATOR, 64); init_ascii(); }
void wr(unsigned int addr, char v) { __wstart(addr); spi_transfer(v); __end(); }
void GDClass::wr(unsigned int addr, byte v) { __wstart(addr); SPI.transfer(v); __end(); }