DOSBox-X
|
00001 #include "np2glue.h" 00002 //#include "compiler.h" 00003 #include "dosio.h" 00004 //#include "cpucore.h" 00005 //#include "pccore.h" 00006 #include "soundrom.h" 00007 00008 #define mem CGetMemBase() 00009 00010 SOUNDROM soundrom; 00011 00012 00013 static const OEMCHAR file_sound[] = OEMTEXT("sound"); 00014 static const OEMCHAR file_extrom[] = OEMTEXT(".rom"); 00015 static const UINT8 defsoundrom[9] = { 00016 0x01,0x00,0x00,0x00,0xd2,0x00,0x08,0x00,0xcb}; 00017 00018 00019 static BRESULT loadsoundrom(UINT address, const OEMCHAR *name) { 00020 00021 OEMCHAR romname[24]; 00022 OEMCHAR path[MAX_PATH]; 00023 FILEH fh; 00024 UINT rsize; 00025 00026 file_cpyname(romname, file_sound, NELEMENTS(romname)); 00027 if (name) { 00028 file_catname(romname, name, NELEMENTS(romname)); 00029 } 00030 file_catname(romname, file_extrom, NELEMENTS(romname)); 00031 getbiospath(path, romname, NELEMENTS(path)); 00032 fh = file_open_rb(path); 00033 if (fh == FILEH_INVALID) { 00034 goto lsr_err; 00035 } 00036 rsize = file_read(fh, mem + address, 0x4000); 00037 file_close(fh); 00038 if (rsize != 0x4000) { 00039 goto lsr_err; 00040 } 00041 file_cpyname(soundrom.name, romname, NELEMENTS(soundrom.name)); 00042 soundrom.address = address; 00043 if (address == 0xd0000) { 00044 // CPU_RAM_D000 &= ~(0x0f << 0); 00045 } 00046 else if (address == 0xd4000) { 00047 // CPU_RAM_D000 &= ~(0x0f << 4); 00048 } 00049 return(SUCCESS); 00050 00051 lsr_err: 00052 return(FAILURE); 00053 } 00054 00055 00056 // ---- 00057 00058 void soundrom_reset(void) { 00059 00060 ZeroMemory(&soundrom, sizeof(soundrom)); 00061 } 00062 00063 void soundrom_load(UINT32 address, const OEMCHAR *primary) { 00064 00065 if (primary != NULL) { 00066 if (loadsoundrom(address, primary) == SUCCESS) { 00067 return; 00068 } 00069 } 00070 if (loadsoundrom(address, NULL) == SUCCESS) { 00071 return; 00072 } 00073 CopyMemory(mem + address + 0x2e00, defsoundrom, sizeof(defsoundrom)); 00074 soundrom.name[0] = '\0'; 00075 soundrom.address = address; 00076 } 00077 00078 void soundrom_loadex(UINT sw, const OEMCHAR *primary) { 00079 00080 if (sw < 4) { 00081 soundrom_load((0xc8000 + ((UINT32)sw << 14)), primary); 00082 } 00083 else { 00084 ZeroMemory(&soundrom, sizeof(soundrom)); 00085 } 00086 } 00087