--- np2/pccore.h 2003/12/04 13:54:28 1.9 +++ np2/pccore.h 2007/11/11 12:46:06 1.28 @@ -1,5 +1,6 @@ #include "nevent.h" +#include "statsave.h" enum { PCBASECLOCK25 = 2457600, @@ -7,117 +8,156 @@ enum { }; enum { - PCMODEL_VM = 0, - PCMODEL_VX = 1 + CPUMODE_8MHZ = 0x20, + + PCMODEL_VF = 0, + PCMODEL_VM = 1, + PCMODEL_VX = 2, + PCMODELMASK = 0x3f, + PCMODEL_PC9821 = 0x40, + PCMODEL_EPSON = 0x80, + + PCHDD_SASI = 0x01, + PCHDD_SCSI = 0x02, + PCHDD_IDE = 0x04, + + PCROM_BIOS = 0x01, + PCROM_SOUND = 0x02, + PCROM_SASI = 0x04, + PCROM_SCSI = 0x08, + PCROM_BIOS9821 = 0x10, + + PCSOUND_NONE = 0x00, + + PCCBUS_PC9861K = 0x0001, + PCCBUS_MPU98 = 0x0002 }; -#define CPUMODE_8MHz 0x20 typedef struct { // エミュレート中によく参照される奴 - BYTE uPD72020; - BYTE DISPSYNC; - BYTE RASTER; - BYTE realpal; - BYTE LCD_MODE; - BYTE skipline; + UINT8 uPD72020; + UINT8 DISPSYNC; + UINT8 RASTER; + UINT8 realpal; + UINT8 LCD_MODE; + UINT8 skipline; UINT16 skiplight; - BYTE KEY_MODE; - BYTE XSHIFT; - BYTE BTN_RAPID; - BYTE BTN_MODE; - - BYTE dipsw[3]; - BYTE MOUSERAPID; - - BYTE calendar; - BYTE usefd144; - BYTE wait[6]; - + UINT8 KEY_MODE; + UINT8 XSHIFT; + UINT8 BTN_RAPID; + UINT8 BTN_MODE; + + UINT8 dipsw[3]; + UINT8 MOUSERAPID; + + UINT8 calendar; + UINT8 usefd144; + UINT8 wait[6]; // リセット時とかあんまり参照されない奴 - char model[8]; + OEMCHAR model[8]; UINT baseclock; UINT multiple; - BYTE memsw[8]; + UINT8 memsw[8]; - BYTE ITF_WORK; - BYTE EXTMEM; - BYTE grcg; - BYTE color16; + UINT8 ITF_WORK; + UINT8 EXTMEM; + UINT8 grcg; + UINT8 color16; UINT32 BG_COLOR; UINT32 FG_COLOR; UINT16 samplingrate; UINT16 delayms; - BYTE SOUND_SW; - BYTE snd_x; + UINT8 SOUND_SW; + UINT8 snd_x; - BYTE snd14opt[3]; - BYTE snd26opt; - BYTE snd86opt; - BYTE spbopt; - BYTE spb_vrc; // ver0.30 - BYTE spb_vrl; // ver0.30 - BYTE spb_x; // ver0.30 - - BYTE BEEP_VOL; - BYTE vol14[6]; - BYTE vol_fm; - BYTE vol_ssg; - BYTE vol_adpcm; - BYTE vol_pcm; - BYTE vol_rhythm; - - BYTE mpuenable; - BYTE mpuopt; - - BYTE pc9861enable; - BYTE pc9861sw[3]; - BYTE pc9861jmp[6]; - - BYTE MOTOR; - BYTE MOTORVOL; - BYTE PROTECTMEM; - - char hddfile[2][MAX_PATH]; // ver0.30 - char fontfile[MAX_PATH]; - char biospath[MAX_PATH]; + UINT8 snd14opt[3]; + UINT8 snd26opt; + UINT8 snd86opt; + UINT8 spbopt; + UINT8 spb_vrc; // ver0.30 + UINT8 spb_vrl; // ver0.30 + UINT8 spb_x; // ver0.30 + + UINT8 BEEP_VOL; + UINT8 vol14[6]; + UINT8 vol_fm; + UINT8 vol_ssg; + UINT8 vol_adpcm; + UINT8 vol_pcm; + UINT8 vol_rhythm; + + UINT8 mpuenable; + UINT8 mpuopt; + + UINT8 pc9861enable; + UINT8 pc9861sw[3]; + UINT8 pc9861jmp[6]; + + UINT8 fddequip; + UINT8 MOTOR; + UINT8 MOTORVOL; + UINT8 PROTECTMEM; + UINT8 hdrvacc; + + OEMCHAR sasihdd[2][MAX_PATH]; // ver0.74 +#if defined(SUPPORT_SCSI) + OEMCHAR scsihdd[4][MAX_PATH]; // ver0.74 +#endif + OEMCHAR fontfile[MAX_PATH]; + OEMCHAR biospath[MAX_PATH]; + OEMCHAR hdrvroot[MAX_PATH]; } NP2CFG; typedef struct { UINT32 baseclock; UINT multiple; + + UINT8 cpumode; + UINT8 model; + UINT8 hddif; + UINT8 extmem; + UINT8 dipsw[3]; // リセット時のDIPSW + UINT8 rom; + + UINT32 sound; + UINT32 device; + UINT32 realclock; - UINT32 dispclock; - UINT32 vsyncclock; - UINT32 mouseclock; - UINT32 keyboardclock; - UINT32 midiclock; - UINT32 frame1000; - UINT32 raster; - UINT32 hsync; - BYTE cpumode; - BYTE model; } PCCORE; +enum { + COREEVENT_SHUT = 0, + COREEVENT_RESET = 1, + COREEVENT_EXIT = 2 +}; + +typedef struct +{ + UINT8 screenupdate; + UINT8 screendispflag; + UINT8 drawframe; + UINT8 hardwarereset; +} PCSTAT; + #ifdef __cplusplus extern "C" { #endif -extern const char np2version[]; +extern const OEMCHAR np2version[]; extern NP2CFG np2cfg; -extern PCCORE pc; -extern BYTE screenupdate; -extern int soundrenewal; -extern BOOL drawframe; +extern PCCORE pccore; +extern PCSTAT pcstat; +extern UINT8 soundrenewal; extern UINT drawcount; -void getbiospath(char *path, const char *fname, int maxlen); +void getbiospath(OEMCHAR *path, const OEMCHAR *fname, int maxlen); void screendisp(NEVENTITEM item); void screenvsync(NEVENTITEM item); @@ -129,6 +169,8 @@ void pccore_term(void); void pccore_reset(void); void pccore_exec(BOOL draw); +void pccore_postevent(UINT32 event); + #ifdef __cplusplus } #endif