DOSBox-X
|
00001 #include "np2glue.h" 00002 //#include "compiler.h" 00003 //#include "pccore.h" 00004 //#include "iocore.h" 00005 //#include "cbuscore.h" 00006 #include "board26k.h" 00007 #include "sound.h" 00008 #include "fmboard.h" 00009 #include "s98.h" 00010 00011 00012 static void IOOUTCALL opn_o188(UINT port, REG8 dat) { 00013 00014 opn.addr = dat; 00015 opn.data = dat; 00016 (void)port; 00017 } 00018 00019 static void IOOUTCALL opn_o18a(UINT port, REG8 dat) { 00020 00021 UINT addr; 00022 00023 opn.data = dat; 00024 addr = opn.addr; 00025 S98_put(NORMAL2608, addr, dat); 00026 if (addr < 0x10) { 00027 if (addr != 0x0e) { 00028 psggen_setreg(&psg1, addr, dat); 00029 } 00030 } 00031 else if (addr < 0x100) { 00032 if (addr < 0x30) { 00033 if (addr == 0x28) { 00034 if ((dat & 0x0f) < 3) { 00035 opngen_keyon(dat & 0x0f, dat); 00036 } 00037 } 00038 else { 00039 fmtimer_setreg(addr, dat); 00040 if (addr == 0x27) { 00041 opnch[2].extop = dat & 0xc0; 00042 } 00043 } 00044 } 00045 else if (addr < 0xc0) { 00046 opngen_setreg(0, addr, dat); 00047 } 00048 opn.reg[addr] = dat; 00049 } 00050 (void)port; 00051 } 00052 00053 static REG8 IOINPCALL opn_i188(UINT port) { 00054 00055 (void)port; 00056 return(fmtimer.status); 00057 } 00058 00059 static REG8 IOINPCALL opn_i18a(UINT port) { 00060 00061 UINT addr; 00062 00063 addr = opn.addr; 00064 if (addr == 0x0e) { 00065 return(fmboard_getjoy(&psg1)); 00066 } 00067 else if (addr < 0x10) { 00068 return(psggen_getreg(&psg1, addr)); 00069 } 00070 (void)port; 00071 return(opn.data); 00072 } 00073 00074 00075 // ---- 00076 00077 static const IOOUT opn_o[4] = { 00078 opn_o188, opn_o18a, NULL, NULL}; 00079 00080 static const IOINP opn_i[4] = { 00081 opn_i188, opn_i18a, NULL, NULL}; 00082 00083 00084 void board26k_reset(const NP2CFG *pConfig) { 00085 00086 opngen_setcfg(3, 0); 00087 fmtimer_reset(pConfig->snd26opt & 0xc0); 00088 soundrom_loadex(pConfig->snd26opt & 7, OEMTEXT("26")); 00089 opn.base = (pConfig->snd26opt & 0x10)?0x000:0x100; 00090 } 00091 00092 void board26k_bind(void) { 00093 00094 fmboard_fmrestore(0, 0); 00095 psggen_restore(&psg1); 00096 // sound_streamregist(&opngen, (SOUNDCB)opngen_getpcm); 00097 // sound_streamregist(&psg1, (SOUNDCB)psggen_getpcm); 00098 cbuscore_attachsndex(0x188 - opn.base, opn_o, opn_i); 00099 } 00100