|
|
| version 1.1, 2004/08/01 05:31:29 | version 1.35, 2004/08/20 23:01:13 |
|---|---|
| Line 4 | Line 4 |
| #include "soundmng.h" | #include "soundmng.h" |
| #include "sysmng.h" | #include "sysmng.h" |
| #include "timemng.h" | #include "timemng.h" |
| #include "xmilver.h" | |
| #include "z80core.h" | #include "z80core.h" |
| #include "pccore.h" | #include "pccore.h" |
| #include "iocore.h" | #include "iocore.h" |
| #include "x1_io.h" | #include "nevent.h" |
| #include "x1_crtc.h" | #include "ievent.h" |
| #include "x1_vram.h" | #include "timing.h" |
| #include "x1_fdc.h" | #include "calendar.h" |
| #include "draw.h" | #include "keystat.h" |
| #include "palettes.h" | |
| #include "makescrn.h" | |
| #include "sound.h" | #include "sound.h" |
| #include "sndctrl.h" | #include "sndctrl.h" |
| #include "menu.h" | |
| #include "font.h" | #include "font.h" |
| #include "juliet.h" | |
| #include "xmilver.h" | |
| #include "fddfile.h" | #include "fddfile.h" |
| #include "calendar.h" | |
| #include "timing.h" | |
| #include "defrom.res" | #include "defrom.res" |
| #include "keystat.h" | |
| const OEMCHAR xmilversion[] = OEMTEXT(XMILVER_CORE); | const OEMCHAR xmilversion[] = OEMTEXT(XMILVER_CORE); |
| XMILCFG xmilcfg = { 0, 0, 1, 0, 1, 2, 0, 1, | XMILCFG xmilcfg = { 2, 1, 0x03, |
| 22050, 1000, 0, 80, | 1, 0, 0, 0, |
| 0, 0, | 22050, 500, 0, 64, 64, 0, 80, |
| 0, 0, | 0, 0, 0, 0}; |
| 0, 0, 0, | |
| 1, | |
| 1, 0}; | |
| PCCORE pccore = {250, 0, 1, 1, 0}; | |
| BYTE mMAIN[0x10000]; | |
| BYTE mBIOS[0x8000]; | |
| BYTE mBANK[16][0x8000]; | |
| // BYTE KNJ_FNT[0x4bc00]; | |
| BYTE GRP_RAM[0x20000]; | |
| BYTE TXT_RAM[0x01800]; | |
| WORD v_cnt; | |
| int s_cnt; | |
| BYTE *RAM0r; | |
| BYTE *RAM0w; | |
| BYTE lastmem; | |
| DWORD h_cntbase; | |
| BRESULT soundrenewal; | |
| PCCORE pccore; | |
| CORESTAT corestat; | |
| /*********************************************************************** | // ---- |
| IPL-ROM LOAD | |
| ***********************************************************************/ | |
| void ipl_load(void) { | static void ipl_load(void) { |
| FILEH hdl; | FILEH hdl; |
| ZeroMemory(mBIOS, sizeof(mBIOS)); | ZeroMemory(biosmem, 0x8000); |
| memcpy(mBIOS, DEFROM, sizeof(DEFROM)); | CopyMemory(biosmem, DEFROM, sizeof(DEFROM)); |
| if (pccore.ROM_TYPE >= 2) { | if (pccore.ROM_TYPE >= 2) { |
| if ((hdl = file_open_c("IPLROM.X1T")) != FILEH_INVALID) { | if ((hdl = file_open_c(OEMTEXT("IPLROM.X1T"))) != FILEH_INVALID) { |
| file_read(hdl, mBIOS, 0x8000); | file_read(hdl, biosmem, 0x8000); |
| file_close(hdl); | file_close(hdl); |
| } | } |
| } | } |
| else if (pccore.ROM_TYPE == 1) { | else if (pccore.ROM_TYPE == 1) { |
| if ((hdl = file_open_c("IPLROM.X1")) != FILEH_INVALID) { | if ((hdl = file_open_c(OEMTEXT("IPLROM.X1"))) != FILEH_INVALID) { |
| file_read(hdl, mBIOS, 0x8000); | file_read(hdl, biosmem, 0x8000); |
| file_close(hdl); | file_close(hdl); |
| } | } |
| } | } |
| } | } |
| /*********************************************************************** | // ---- |
| FONT-ROM LOAD | |
| ***********************************************************************/ | void pccore_initialize(void) { |
| void fnt_load(void) { | Z80_INITIALIZE(); |
| fddfile_initialize(); | |
| sndctrl_initialize(); | |
| makescrn_initialize(); | |
| font_load(NULL, TRUE); | font_load(NULL, TRUE); |
| crtc_initialize(); | |
| pcg_initialize(); | |
| ppi_initialize(); | |
| } | |
| void pccore_deinitialize(void) { | |
| sndctrl_deinitialize(); | |
| fddfile_eject(0); | |
| fddfile_eject(1); | |
| fddfile_eject(2); | |
| fddfile_eject(3); | |
| } | } |
| void pccore_reset(void) { | |
| soundmng_stop(); | |
| if (corestat.soundrenewal) { | |
| corestat.soundrenewal = 0; | |
| sndctrl_deinitialize(); | |
| sndctrl_initialize(); | |
| } | |
| /*********************************************************************** | pccore.baseclock = 2000000; |
| 初期化 | pccore.multiple = 2; |
| ***********************************************************************/ | pccore.realclock = pccore.baseclock * pccore.multiple; |
| BYTE reset_x1(BYTE ROM_TYPE, BYTE SOUND_SW, BYTE DIP_SW) { | pccore.ROM_TYPE = xmilcfg.ROM_TYPE; |
| pccore.SOUND_SW = xmilcfg.SOUND_SW; | |
| pccore.HSYNC_CLK = 250; | pccore.DIP_SW = xmilcfg.DIP_SW; |
| pccore.ROM_SW = 1; | |
| pccore.ROM_TYPE = ROM_TYPE; | |
| pccore.SOUND_SW = SOUND_SW; | |
| pccore.DIP_SW = DIP_SW; | |
| // スクリーンモードの変更... | // スクリーンモードの変更... |
| if (pccore.ROM_TYPE >= 3) { | if (pccore.ROM_TYPE >= 3) { |
| Line 111 BYTE reset_x1(BYTE ROM_TYPE, BYTE SOUND_ | Line 110 BYTE reset_x1(BYTE ROM_TYPE, BYTE SOUND_ |
| scrnmng_setcolormode(FALSE); | scrnmng_setcolormode(FALSE); |
| } | } |
| textdrawproc_renewal(); | |
| ipl_load(); | |
| Z80_RESET(); | |
| lastmem = 0x78; | |
| RAM0r = mBIOS; | |
| RAM0w = mMAIN; | |
| h_cntbase = 0; | |
| sysmng_cpureset(); | sysmng_cpureset(); |
| calendar_initialize(); | sound_changeclock(); |
| sound_reset(); | |
| init_fdc(); | |
| subcpu_reset(); | |
| ppi_reset(); | |
| init_crtc(); | |
| init_vram(); | |
| cgrom_reset(); | |
| cmt_reset(); | |
| ctc_reset(); | |
| dmac_reset(); | |
| pcg_reset(); | |
| sio_reset(); | |
| sndboard_reset(); | |
| timing_reset(); | |
| return(SUCCESS); | |
| } | |
| /*********************************************************************** | |
| 実行/終了 | |
| ***********************************************************************/ | |
| static BYTE keyintcnt = 0; | |
| static BYTE flame = 0; | |
| static BYTE inttiming = 0; | |
| void pccore_initialize(void) { | |
| sndctrl_initialize(); | |
| init_draw(); | |
| fnt_load(); | |
| pcg_initialize(); | Z80_RESET(); |
| ppi_initialize(); | nevent_allreset(); |
| ievent_reset(); | |
| reset_x1(xmilcfg.ROM_TYPE, xmilcfg.SOUND_SW, xmilcfg.DIP_SW); | calendar_reset(); |
| iocore_reset(); | |
| // keystat_initialize(); | ipl_load(); |
| // keystat_reset(); | |
| } | |
| void pccore_reset(void) { | pal_reset(); |
| makescrn_reset(); | |
| timing_reset(); | |
| soundmng_stop(); | |
| if (soundrenewal) { | |
| soundrenewal = 0; | |
| sndctrl_deinitialize(); | |
| sndctrl_initialize(); | |
| } | |
| reset_x1(xmilcfg.ROM_TYPE, xmilcfg.SOUND_SW, xmilcfg.DIP_SW); | |
| soundmng_play(); | soundmng_play(); |
| } | } |
| void pccore_deinitialize(void) { | |
| sndctrl_deinitialize(); | |
| // keyboard_term(); | |
| fdd_eject(0); | |
| fdd_eject(1); | |
| fdd_eject(2); | |
| fdd_eject(3); | |
| } | |
| // ---- | // ---- |
| Line 227 void iptrace_out(void) { | Line 165 void iptrace_out(void) { |
| #endif | #endif |
| void neitem_disp(UINT id) { | |
| void x1r_exec(void) { | corestat.vsync = 1; |
| if (xmilcfg.DISPSYNC & 1) { | |
| scrnupdate(); | |
| } | |
| nevent_set(id, corestat.syncclock, neitem_vsync, NEVENT_RELATIVE); | |
| } | |
| extern BYTE disp_flashscreen; | void neitem_vsync(UINT id) { |
| v_cnt = 0; | corestat.vsync = 2; |
| s_cnt = 0; | (void)id; |
| xmilcfg.DISPSYNC &= 1; | } |
| inttiming = xmilcfg.CPU8MHz & 1; | |
| while(s_cnt < 266) { | // ---- |
| while(h_cnt < pccore.HSYNC_CLK) { | |
| #if IPTRACE | // #define SINGLESTEPONLY |
| void pccore_exec(BRESULT draw) { | |
| SINT32 frameclock; | |
| SINT32 dispclock; | |
| corestat.drawframe = draw; | |
| pal_eventclear(); | |
| soundmng_sync(); | |
| timing_setrate(crtc.e.frameclock); | |
| frameclock = crtc.e.frameclock * pccore.multiple / 2; | |
| dispclock = min(frameclock, crtc.e.dispclock); | |
| corestat.dispclock = dispclock; | |
| corestat.syncclock = frameclock - dispclock; | |
| corestat.vsync = 0; | |
| nevent_set(NEVENT_FRAMES, dispclock, neitem_disp, NEVENT_RELATIVE); | |
| do { | |
| #if !defined(SINGLESTEPONLY) | |
| if (CPU_REMCLOCK > 0) { | |
| Z80_EXECUTE(); | |
| } | |
| #else | |
| while(CPU_REMCLOCK > 0) { | |
| // TRACEOUT(("%.4x", Z80_PC)); | |
| #if defined(TRACE) && IPTRACE | |
| treip[trpos & (IPTRACE - 1)] = Z80_PC; | treip[trpos & (IPTRACE - 1)] = Z80_PC; |
| trpos++; | trpos++; |
| #endif | #endif |
| Z80_EXECUTE(); | Z80_STEP(); |
| z80dmap(); | |
| } | |
| h_cnt -= pccore.HSYNC_CLK; | |
| h_cntbase += pccore.HSYNC_CLK; | |
| inttiming ^= 2; | |
| if (inttiming != 3) { | |
| if (xmilcfg.SOUNDPLY) { | |
| sound_makesample(pcmbufsize[s_cnt]); | |
| juliet2_exec(); | |
| } | |
| s_cnt++; | |
| x1_ctc_int(); | |
| if (!((++keyintcnt) & 15)) { | |
| x1_sub_int(); | |
| if (xmilcfg.MOUSE_SW) { | |
| sio_int(); | |
| } | |
| } | |
| } | } |
| v_cnt++; | #endif |
| if (crtc.CRT_YL == v_cnt) { | nevent_progress(); |
| pcg.r.vsync = 1; | ievent_progress(); |
| if (xmilcfg.DISPSYNC == 1) { | } while(corestat.vsync < 2); |
| xmilcfg.DISPSYNC |= 0x80; | |
| scrnupdate(); | scrnupdate(); |
| } | sound_sync(); |
| } | fdc_callback(); |
| } | |
| if (++flame >= 60) { | |
| flame = 0; | |
| calendar_inc(); | |
| } | |
| if (!xmilcfg.SOUNDPLY) { | |
| sound_makesample(framesoundcnt); | |
| } | |
| if (!(xmilcfg.DISPSYNC & 0x80)) { | |
| scrnupdate(); | |
| } | |
| } | } |