/* * SYSTEM 16 ARCADE EMULATOR SOURCE CODE * * Copyright 1996/97 Thierry Lescot */ #include "cpudefs.h" #include #include "shinobi.h" #ifdef SEARCH extern int strace; extern unsigned char *TilesROM1, vid_bank, txt_bank; extern ULONG base_brq_page; extern char ws[80]; void affiche_brique_simple(int bx, int by, int banque, int brique) { int x, y; rectfill(screen, bx, by, bx+7, by+7, brique); } int base_color=0; UBYTE *brq_page; void affiche_brique_pixels(int bx, int by, int banque, int brique, int f) { int x, y, p=*brq_page; long a=(((long)banque)*16384)+(((long)brique)*64); // if (f) a+=((ULONG)RAM[0xFF][0xF095])<<18; if (f) { if (p>15) p=(p>>4); a+=((ULONG)p)<<18; } for (y=0;y!=8;y++) { for (x=0;x!=8;x++) { _putpixel(screen, bx+x, by+y, base_color+TilesROM1[a++]); } } } void dump_video(int p) { int x, y, touche, op=p; RGB pal; if (!strace) TraceOn(); set_gfx_mode(GFX_VESA2L, 1024, 768, 0, 0); pal.r=pal.g=pal.b=63; for (x=1;x!=256;x++) set_color(x, (RGB *)&pal); for (x=0;x!=8;x++) { pal.r=pal.g=9*x; pal.b=0; set_color(x*2, (RGB *)&pal); pal.r=0; set_color(32+(x*2), (RGB *)&pal); } brq_page=base_brq_page; for (y=0;y!=0x20;y++) { for (x=0;x!=0x40;x++) { base_color=((RAM[vid_bank][p]&0x20)==0x20)? 32:0; affiche_brique_pixels(x*8, y*8, RAM[vid_bank][p]&0xF, RAM[vid_bank][p+1], RAM[vid_bank][p]&0x10); p+=2; } } for (y=0;y!=0x20;y++) { for (x=0;x!=0x40;x++) { base_color=((RAM[vid_bank][p]&0x20)==0x20)? 32:0; affiche_brique_pixels(512+x*8, y*8, RAM[vid_bank][p]&0xF, RAM[vid_bank][p+1], RAM[vid_bank][p]&0x10); p+=2; } } for (y=0;y!=0x20;y++) { for (x=0;x!=0x40;x++) { base_color=((RAM[vid_bank][p]&0x20)==0x20)? 32:0; affiche_brique_pixels(x*8, 300+y*8, RAM[vid_bank][p]&0xF, RAM[vid_bank][p+1], RAM[vid_bank][p]&0x10); p+=2; } } for (y=0;y!=0x20;y++) { for (x=0;x!=0x40;x++) { base_color=((RAM[vid_bank][p]&0x20)==0x20)? 32:0; affiche_brique_pixels(512+x*8, 300+y*8, RAM[vid_bank][p]&0xF, RAM[vid_bank][p+1], RAM[vid_bank][p]&0x10); p+=2; } } rect(screen, 0, 0, 512, 257, 255); rect(screen, 0, 300, 512, 557, 255); rect(screen, 512, 0, 1024, 257, 255); rect(screen, 512, 300, 1024, 557, 255); p=op; for (y=0;y!=2;y++) for (x=0;x!=2;x++) { sprintf(ws, "PAGE %01x", (p>>12)&0xF); textout(screen, font, ws, 512*x, 260+(300*y), 255); p+=0x1000; } clear_keybuf(); touche=(readkey()>>8); set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); /* if ((touche>=KEY_F1)&&(touche<=KEY_F8)) { if (touche>KEY_F4) op=op+(32*(touche-KEY_F5))+0x1000; else op+=32*(touche-KEY_F1); for (y=0;y!=20;y++) { for (x=0;x!=0x10;x++) { printf("%02x:", RAM[vid_bank][op+(2*x)]); } printf("\n"); op+=0x80; } while (!keypressed()); clear_keybuf(); }*/ TraceOff(); } void dump_text_video() { int x, y, p=0; RGB pal; if (!strace) TraceOn(); set_gfx_mode(GFX_VESA2B, 800, 600, 0, 0); pal.r=pal.g=pal.b=63; set_color(255, (RGB *)&pal); rect(screen, 0, 0, 513, 513, 255); base_color=0; brq_page=base_brq_page; for (y=0;y!=0x40;y++) { for (x=0;x!=0x40;x++) { affiche_brique_pixels(1+x*8, 1+y*8, /*RAM[txt_bank][p]&1*/0, RAM[txt_bank][p+1], 0); p+=2; } } clear_keybuf(); while (!keypressed()); clear_keybuf(); set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); TraceOff(); } unsigned long hex2int(char *s) { int i, v=0, m=1, p; p=strlen(s); do { p--; if ((s[p]>='A')&&(s[p]<='Z')) v+=(m*(10+(s[p]-'A'))); else if ((s[p]>='a')&&(s[p]<='z')) v+=(m*(10+(s[p]-'a'))); else v+=(m*(s[p]-'0')); m*=16; } while (p); return(v); } #endif