/* * refresh game area */ static void refresh(void) { struct console * con = get_console_stdout(); s32_t w, h; s32_t x, y, xp, yp; if(!con) return; for(y=0; y < GAME_AREA_HEIGHT; y++) { if(map.dirty[y] == FALSE) continue; for(x=0; x < GAME_AREA_WIDTH; x++) { console_getwh(con, &w, &h); xp = (w - GAME_AREA_WIDTH) / 2; yp = (h - GAME_AREA_HEIGHT) / 2; console_gotoxy(con, xp + x, yp + y); if(map.screen[x][y] != TCOLOR_BLACK) console_setcolor(con, TCOLOR_BLACK, map.screen[x][y]); else console_setcolor(con, TCOLOR_WHITE, TCOLOR_BLACK); console_putcode(con, UNICODE_SPACE); } map.dirty[y] = FALSE; } }
/* * print xboot's character logo. */ void xboot_char_logo(struct console * console, u32_t x0, u32_t y0) { u32_t i, len; s32_t w, h; char buf[64]; if(!console) return; if(!console_getwh(console, &w, &h)) return; if(x0 + 1 > w || y0 + 1 > h) return; for(i = 0; i < 6; i++) { len = strlen(&xboot[i][0]); if( len <= w - x0 ) sprintf(buf, "%s", &xboot[i][0]); else { strncpy(buf, &xboot[i][0], w - x0); buf[w - x0] = 0; } console_gotoxy(console, x0, y0 + i); console_print(console, (const char *)buf); } }
bool_t console_hline(struct console * console, u32_t code, u32_t x0, u32_t y0, u32_t x) { s32_t w, h; s32_t i; if(console && console->putcode) { if(!console_getwh(console, &w, &h)) return FALSE; if(x0 >= w || y0 >= h) return FALSE; if(x0 + x >= w) x = w - x0; if(!console_gotoxy(console, x0, y0)) return FALSE; for(i = 0; i < x; i++) console->putcode(console, code); return TRUE; } return FALSE; }
void console_clearstatusline() { int rows = 0; int cols = 0; console_size(&rows, &cols); console_gotoxy(0, rows); printf("\033[K\033[0m"); }
void console_statusline(const char *text1, const char *text2) { int rows = 0; int cols = 0; console_size(&rows, &cols); console_gotoxy(0, rows); printf("\033[1m\033[7m%s%s\033[K\033[0m", text1, text2); }
bool_t console_rect(struct console * console, u32_t hline, u32_t vline, u32_t lt, u32_t rt, u32_t lb, u32_t rb, u32_t x, u32_t y, u32_t w, u32_t h) { s32_t width, height; if(console && console->putcode) { if(!console_getwh(console, &width, &height)) return FALSE; if(x < 0 || y < 0 || w < 2 || h < 2) return FALSE; if(x >= width || y >= height) return FALSE; if(x + w - 1 >= width) return FALSE; if(y + h - 1 >= height) return FALSE; console_gotoxy(console, x, y); console_putcode(console, lt); console_gotoxy(console, x + w - 1, y); console_putcode(console, rt); console_gotoxy(console, x, y + h - 1); console_putcode(console, lb); console_gotoxy(console, x + w - 1, y + h - 1); console_putcode(console, rb); console_hline(console, hline, x + 1, y, w - 1 - 1); console_hline(console, hline, x + 1, y + h - 1, w - 1 - 1); console_vline(console, vline, x, y + 1, h - 1 - 1); console_vline(console, vline, x + w - 1, y + 1, h - 1 - 1); return TRUE; } return FALSE; }
void choose_mode(int sd_ok) { int i = 0; console_gotoxy(9,10); if (sd_ok) { //console_puts("load from SD card"); pick_and_load_rom(); } else { console_puts("retry SD/MMC card"); } //console_gotoxy(9,12); //console_puts("boot SRAM"); for (;;) { int key; console_gotoxy(6,10); if (i==0) { console_puts(">"); } else { console_puts(" "); } console_gotoxy(6,12); if (i==1) { console_puts(">"); } else { console_puts(" "); } key = wait_key(); switch (key) { case JOY_UP: i = 0; break; // case JOY_DOWN: // i = 1; // break; case JOY_FIREA: case JOY_FIREB: if (i==0) { if (sd_ok) { pick_and_load_rom(); } } else { start_rom(); } return; } } }
void load_rom(file_descr_t *entry) { file_t file; int i; DWORD size; console_clear(); console_puts("Loading "); for (i=0; i<8; i++) { console_putc(entry->name[i]); } console_putc('.'); for (i=8; i<11; i++) { console_putc(entry->name[i]); } console_puts("\n\n"); fat_open_file(&file, entry->cluster); size = 0; while (1) { UBYTE* data; if ((size&0x3fff)==0) { // switch page 1 *((UBYTE*)0xffff) = (size>>14)&0xff; } // write to page 2 data = 0x8000+(size&0x3fff); data = fat_load_file_sector(&file,data); if (data==0) { console_puts("Error while reading file\n"); } else if (data==FAT_EOF) { console_gotoxy(0,2); return; } else { // process data size += 0x200; if ((size)%16384 == 0) console_puts("."); //console_gotoxy(0,3); //console_print_dword(size); //console_puts(" bytes loaded"); } }
void main() { int i; char *ptr; vdp_set_address(0x8004); // mode 4, disable hbl irq vdp_set_address(0x8160); // screen on, enable vbl irq vdp_set_address(0x820e); // name table @ $3800 vdp_set_address(0x85ff); // sprite table @ $3f00 vdp_set_address(0x8700); // backdrop is color 0 vdp_set_address(0x8800); // scrollx is 0 vdp_set_address(0x8900); // scrolly is 0 vdp_set_address(0xc000); ptr = pal; for (i=0; i<32; i++) { vdp_write(*ptr++); } // turn off sprites vdp_set_address(0x3f00); vdp_write(0xd0); //Sound off - if resetted from a prior game set_sound_volume(0,0); set_sound_volume(1,0); set_sound_volume(2,0); set_sound_volume(3,0); while (1) { console_init(); console_clear(); console_gotoxy(3,0); console_puts("MASTER SYSTEM ROM LOADER\n"); console_gotoxy(3,1); console_puts("------------------------\n"); //console_gotoxy(3,3); i = 0; if (!sd_init()) { console_puts("Error initializing SD/MMC card\n"); } else { #ifdef DEBUG2 console_puts("SD card initialized\n"); #endif if (!fat_init()) { //console_puts("could not initialize FAT system\n"); //qq } else { #ifdef DEBUG2 console_puts("FAT system initialized\n"); #endif i = 1; } } choose_mode(i); } }