OSDN Git Service

[GENERAL] Add FX-9000P, still not buildable.
authorK.Ohta <whatisthis.sowhat@gmail.com>
Thu, 24 Nov 2022 15:28:42 +0000 (00:28 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Thu, 24 Nov 2022 15:28:42 +0000 (00:28 +0900)
source/revision.txt
source/src/res/credits.html
source/src/res/fx9000p.rc [new file with mode: 0644]
source/src/vm/fx9000p/fx9000p.cpp [new file with mode: 0644]
source/src/vm/fx9000p/fx9000p.h [new file with mode: 0644]
source/src/vm/fx9000p/io.cpp [new file with mode: 0644]
source/src/vm/fx9000p/io.h [new file with mode: 0644]
source/vc++2008/fx9000p.vcproj [new file with mode: 0644]
source/vc++2017/fx9000p.vcxproj [new file with mode: 0644]
source/vc++2017/fx9000p.vcxproj.filters [new file with mode: 0644]

index fb4c986..8643529 100644 (file)
@@ -1,3 +1,3 @@
-<B><FONT SIZE=-1>Upstream 2021-12-30<BR>
-Qt Port and FM7 series 2022-01-23-tmp<BR>
+<B><FONT SIZE=-1>Upstream 2022-04-05<BR>
+Qt Port and FM7 series 2022-11-25-tmp<BR>
 </FONT></B>
index 80f0273..60975eb 100644 (file)
@@ -18,8 +18,8 @@
 </FONT>
 
 <DIV ALIGN=RIGHT><FONT SIZE=4>
-Upstream Version: 2021-12-30<BR>
-Qt Port and FM7 series 2022-01-23-tmp<BR>
+Upstream Version: 2022-04-05<BR>
+Qt Port and FM7 series 2022-11-25-tmp<BR>
 FFMPEG 4.3 + liblame 3.100 + libx264-161<BR>
 @@RevisionString@@
 </FONT></DIV>
diff --git a/source/src/res/fx9000p.rc b/source/src/res/fx9000p.rc
new file mode 100644 (file)
index 0000000..4bf7383
--- /dev/null
@@ -0,0 +1,255 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// Japanese resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN)
+#ifdef _WIN32
+LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
+#pragma code_page(932)
+#endif //_WIN32
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "#include ""afxres.h""\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+#endif    // Japanese resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Accelerator
+//
+
+IDR_ACCELERATOR1 ACCELERATORS DISCARDABLE 
+BEGIN
+    VK_RETURN,      ID_ACCEL_SCREEN,        VIRTKEY, ALT, NOINVERT
+    VK_APPS,        ID_ACCEL_SPEED,         VIRTKEY, NOINVERT
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Menu
+//
+
+IDR_MENU1 MENU DISCARDABLE 
+BEGIN
+    POPUP "Control"
+    BEGIN
+        MENUITEM "Reset",                       ID_RESET
+        MENUITEM SEPARATOR
+        MENUITEM "CPU x1",                      ID_CPU_POWER0
+        MENUITEM "CPU x2",                      ID_CPU_POWER1
+        MENUITEM "CPU x4",                      ID_CPU_POWER2
+        MENUITEM "CPU x8",                      ID_CPU_POWER3
+        MENUITEM "CPU x16",                     ID_CPU_POWER4
+        MENUITEM "Full Speed",                  ID_FULL_SPEED
+        MENUITEM SEPARATOR
+        MENUITEM "Paste",                       ID_AUTOKEY_START
+        MENUITEM "Stop",                        ID_AUTOKEY_STOP
+        MENUITEM SEPARATOR
+        POPUP "Save State"
+        BEGIN
+            MENUITEM "State 0",                 ID_SAVE_STATE0
+            MENUITEM "State 1",                 ID_SAVE_STATE1
+            MENUITEM "State 2",                 ID_SAVE_STATE2
+            MENUITEM "State 3",                 ID_SAVE_STATE3
+            MENUITEM "State 4",                 ID_SAVE_STATE4
+            MENUITEM "State 5",                 ID_SAVE_STATE5
+            MENUITEM "State 6",                 ID_SAVE_STATE6
+            MENUITEM "State 7",                 ID_SAVE_STATE7
+            MENUITEM "State 8",                 ID_SAVE_STATE8
+            MENUITEM "State 9",                 ID_SAVE_STATE9
+        END
+        POPUP "Load State"
+        BEGIN
+            MENUITEM "State 0",                 ID_LOAD_STATE0
+            MENUITEM "State 1",                 ID_LOAD_STATE1
+            MENUITEM "State 2",                 ID_LOAD_STATE2
+            MENUITEM "State 3",                 ID_LOAD_STATE3
+            MENUITEM "State 4",                 ID_LOAD_STATE4
+            MENUITEM "State 5",                 ID_LOAD_STATE5
+            MENUITEM "State 6",                 ID_LOAD_STATE6
+            MENUITEM "State 7",                 ID_LOAD_STATE7
+            MENUITEM "State 8",                 ID_LOAD_STATE8
+            MENUITEM "State 9",                 ID_LOAD_STATE9
+        END
+        MENUITEM SEPARATOR
+        MENUITEM "Debug Main CPU",              ID_OPEN_DEBUGGER0
+        MENUITEM "Close Debugger",              ID_CLOSE_DEBUGGER
+        MENUITEM SEPARATOR
+        MENUITEM "Exit",                        ID_EXIT
+    END
+    POPUP "CMT", GRAYED
+    BEGIN
+        MENUITEM "Play",                        ID_PLAY_TAPE1
+        MENUITEM "Rec",                         ID_REC_TAPE1
+        MENUITEM "Eject",                       ID_CLOSE_TAPE1
+        MENUITEM SEPARATOR
+        MENUITEM "Play Button",                 ID_PLAY_BUTTON1
+        MENUITEM "Stop Button",                 ID_STOP_BUTTON1
+        MENUITEM "Fast Forward",                ID_FAST_FORWARD1
+        MENUITEM "Fast Rewind",                 ID_FAST_REWIND1
+        MENUITEM SEPARATOR
+        MENUITEM "Waveform Shaper",             ID_USE_WAVE_SHAPER1
+        MENUITEM SEPARATOR
+        MENUITEM "Recent",                      ID_RECENT_TAPE1
+    END
+    POPUP "Device"
+    BEGIN
+        POPUP "Sound"
+        BEGIN
+            MENUITEM "Play CMT Noise",          ID_VM_SOUND_NOISE_CMT
+            MENUITEM "Play CMT Signal",         ID_VM_SOUND_TAPE_SIGNAL
+            MENUITEM "Play CMT Voice",          ID_VM_SOUND_TAPE_VOICE
+        END
+        POPUP "Printer"
+        BEGIN
+            MENUITEM "Write Printer to File",   ID_VM_PRINTER_TYPE0
+            MENUITEM "None",                    ID_VM_PRINTER_TYPE3
+        END
+    END
+    POPUP "Host"
+    BEGIN
+        MENUITEM "Rec Movie 60fps",             ID_HOST_REC_MOVIE_60FPS
+        MENUITEM "Rec Movie 30fps",             ID_HOST_REC_MOVIE_30FPS
+        MENUITEM "Rec Movie 15fps",             ID_HOST_REC_MOVIE_15FPS
+        MENUITEM "Rec Sound",                   ID_HOST_REC_SOUND
+        MENUITEM "Stop",                        ID_HOST_REC_STOP
+        MENUITEM "Capture Screen",              ID_HOST_CAPTURE_SCREEN
+        MENUITEM SEPARATOR
+        POPUP "Screen"
+        BEGIN
+            MENUITEM "Window x1",               ID_SCREEN_WINDOW
+            MENUITEM "Fullscreen 640x400",      ID_SCREEN_FULLSCREEN
+            MENUITEM SEPARATOR
+            MENUITEM "Fullscreen Stretch 1",    ID_SCREEN_FULLSCREEN_DOTBYDOT
+            MENUITEM "Fullscreen Stretch 2",    ID_SCREEN_FULLSCREEN_STRETCH
+            MENUITEM "Fullscreen Stretch 4",    ID_SCREEN_FULLSCREEN_FILL
+            MENUITEM SEPARATOR
+            MENUITEM "Rotate 0deg",             ID_SCREEN_ROTATE_0
+            MENUITEM "Rotate +90deg",           ID_SCREEN_ROTATE_90
+            MENUITEM "Rotate 180deg",           ID_SCREEN_ROTATE_180
+            MENUITEM "Rotate -90deg",           ID_SCREEN_ROTATE_270
+        END
+        POPUP "Sound"
+        BEGIN
+            MENUITEM "2000Hz",                  ID_SOUND_FREQ0
+            MENUITEM "4000Hz",                  ID_SOUND_FREQ1
+            MENUITEM "8000Hz",                  ID_SOUND_FREQ2
+            MENUITEM "11025Hz",                 ID_SOUND_FREQ3
+            MENUITEM "22050Hz",                 ID_SOUND_FREQ4
+            MENUITEM "44100Hz",                 ID_SOUND_FREQ5
+            MENUITEM "48000Hz",                 ID_SOUND_FREQ6
+            MENUITEM "96000Hz",                 ID_SOUND_FREQ7
+            MENUITEM SEPARATOR
+            MENUITEM "50msec",                  ID_SOUND_LATE0
+            MENUITEM "100msec",                 ID_SOUND_LATE1
+            MENUITEM "200msec",                 ID_SOUND_LATE2
+            MENUITEM "300msec",                 ID_SOUND_LATE3
+            MENUITEM "400msec",                 ID_SOUND_LATE4
+            MENUITEM SEPARATOR
+            MENUITEM "Realtime Mix",            ID_SOUND_STRICT_RENDER
+            MENUITEM "Light Weight Mix",        ID_SOUND_LIGHT_RENDER
+            MENUITEM SEPARATOR
+            MENUITEM "Volume",                  ID_SOUND_VOLUME
+        END
+        MENUITEM SEPARATOR
+        MENUITEM "Use Direct2D1",               ID_HOST_USE_D2D1
+        MENUITEM "Use Direct3D9",               ID_HOST_USE_D3D9
+        MENUITEM "Wait Vsync",                  ID_HOST_WAIT_VSYNC
+        MENUITEM "Use DirectInput",             ID_HOST_USE_DINPUT
+        MENUITEM "Disable Windows 8 DWM",       ID_HOST_DISABLE_DWM
+        MENUITEM "Show Status Bar",             ID_HOST_SHOW_STATUS_BAR
+    END
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_ICON1               ICON    DISCARDABLE     "fx9000p.ico"
+#endif    // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_VOLUME DIALOG DISCARDABLE  0, 0, 250, 90
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Volume"
+FONT 9, "MS PGothic"
+BEGIN
+    LTEXT           "Sound Device #1",IDC_VOLUME_CAPTION0,6,6,60,8
+    CONTROL         "",IDC_VOLUME_PARAM_L0,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,70,6,175,12
+    CONTROL         "",IDC_VOLUME_PARAM_R0,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,70,21,175,12
+    LTEXT           "Sound Device #2",IDC_VOLUME_CAPTION1,6,36,60,8
+    CONTROL         "",IDC_VOLUME_PARAM_L1,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,70,36,175,12
+    CONTROL         "",IDC_VOLUME_PARAM_R1,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,70,51,175,12
+    DEFPUSHBUTTON   "OK",IDOK,70,70,50,14
+    DEFPUSHBUTTON   "Reset",IDC_VOLUME_RESET,130,70,50,14
+END
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
diff --git a/source/src/vm/fx9000p/fx9000p.cpp b/source/src/vm/fx9000p/fx9000p.cpp
new file mode 100644 (file)
index 0000000..a4c1f18
--- /dev/null
@@ -0,0 +1,337 @@
+/*
+       CASIO FX-9000P Emulator 'eFX-9000P'
+
+       Author : Takeda.Toshiya
+       Date   : 2022.03.25-
+
+       [ virtual machine ]
+*/
+
+#include "fx9000p.h"
+#include "../../emu.h"
+#include "../device.h"
+#include "../event.h"
+
+#include "../datarec.h"
+#include "../hd46505.h"
+#include "../memory.h"
+#include "../noise.h"
+#include "../z80.h"
+
+#ifdef USE_DEBUGGER
+#include "../debugger.h"
+#endif
+
+#include "io.h"
+
+// ----------------------------------------------------------------------------
+// initialize
+// ----------------------------------------------------------------------------
+
+VM::VM(EMU* parent_emu) : VM_TEMPLATE(parent_emu)
+{
+       // create devices
+       first_device = last_device = NULL;
+       dummy = new DEVICE(this, emu);  // must be 1st device
+       event = new EVENT(this, emu);   // must be 2nd device
+       
+       drec = new DATAREC(this, emu);
+       drec->set_context_noise_play(new NOISE(this, emu));
+       drec->set_context_noise_stop(new NOISE(this, emu));
+       drec->set_context_noise_fast(new NOISE(this, emu));
+       crtc = new HD46505(this, emu);
+       memory = new MEMORY(this, emu);
+       cpu = new Z80(this, emu);
+       
+       io = new IO(this, emu);
+       
+       // set contexts
+       event->set_context_cpu(cpu);
+       event->set_context_sound(drec);
+       event->set_context_sound(drec->get_context_noise_play());
+       event->set_context_sound(drec->get_context_noise_stop());
+       event->set_context_sound(drec->get_context_noise_fast());
+       
+       drec->set_context_ear(io, SIG_IO_EAR, 1);
+       crtc->set_context_disp(io, SIG_IO_DISP, 1);
+       
+       io->set_context_cpu(cpu);
+       io->set_context_crtc(crtc);
+       io->set_context_drec(drec);
+       
+       // cpu bus
+       cpu->set_context_mem(memory);
+       cpu->set_context_io(io);
+       cpu->set_context_intr(dummy);
+#ifdef USE_DEBUGGER
+       cpu->set_context_debugger(new DEBUGGER(this, emu));
+#endif
+       
+       // memory bus
+       memset(basic, 0xff, sizeof(basic));
+       memset(op1, 0xff, sizeof(op1));
+       memset(vram, 0x00, sizeof(vram));
+#if 0
+       memset(dram, 0x00, sizeof(dram));
+       memset(cmos, 0x00, sizeof(cmos));
+#else
+       // initial ram contents ???
+       for(int i = 0; i < sizeof(dram); i++) {
+               dram[i] = (0x2e + i) & 0xff;
+       }
+       for(int i = 0; i < sizeof(cmos); i++) {
+               cmos[i] = (0x2e + i) & 0xff;
+       }
+#endif
+       
+       memory->read_bios(_T("BASIC.ROM"), basic, sizeof(basic));
+       memory->read_bios(_T("OP1.ROM"), op1, sizeof(op1));
+       memory->read_bios(_T("RAM.BIN"), cmos, sizeof(cmos));
+       
+       memory->set_memory_r(0x0000, 0x2fff, basic);
+       memory->set_memory_r(0x5000, 0x5fff, op1);
+       memory->set_memory_mapped_io_rw(0x6000, 0x6fff, io);
+       memory->set_memory_rw(0x7000, 0x7fff, vram);
+       memory->set_memory_rw(0x8000, 0xbfff, dram);
+       memory->set_memory_rw(0xc000, 0xefff, cmos);
+       
+       // initialize all devices
+       for(DEVICE* device = first_device; device; device = device->next_device) {
+               device->initialize();
+       }
+}
+
+VM::~VM()
+{
+       memory->write_bios(_T("RAM.BIN"), cmos, sizeof(cmos));
+       
+       // delete all devices
+       for(DEVICE* device = first_device; device;) {
+               DEVICE *next_device = device->next_device;
+               device->release();
+               delete device;
+               device = next_device;
+       }
+}
+
+DEVICE* VM::get_device(int id)
+{
+       for(DEVICE* device = first_device; device; device = device->next_device) {
+               if(device->this_device_id == id) {
+                       return device;
+               }
+       }
+       return NULL;
+}
+
+// ----------------------------------------------------------------------------
+// drive virtual machine
+// ----------------------------------------------------------------------------
+
+void VM::reset()
+{
+       // reset all devices
+       for(DEVICE* device = first_device; device; device = device->next_device) {
+               device->reset();
+       }
+}
+
+void VM::run()
+{
+       event->drive();
+}
+
+// ----------------------------------------------------------------------------
+// debugger
+// ----------------------------------------------------------------------------
+
+#ifdef USE_DEBUGGER
+DEVICE *VM::get_cpu(int index)
+{
+       if(index == 0) {
+               return cpu;
+       }
+       return NULL;
+}
+#endif
+
+// ----------------------------------------------------------------------------
+// draw screen
+// ----------------------------------------------------------------------------
+
+void VM::draw_screen()
+{
+       io->draw_screen(vram);
+}
+
+
+// ----------------------------------------------------------------------------
+// notify key
+// ----------------------------------------------------------------------------
+
+void VM::key_down(int code, bool repeat)
+{
+       if(!repeat) {
+               io->key_down(code);
+       }
+}
+
+void VM::key_up(int code)
+{
+}
+
+// ----------------------------------------------------------------------------
+// soud manager
+// ----------------------------------------------------------------------------
+
+void VM::initialize_sound(int rate, int samples)
+{
+       // init sound manager
+       event->initialize_sound(rate, samples);
+}
+
+uint16_t* VM::create_sound(int* extra_frames)
+{
+       return event->create_sound(extra_frames);
+}
+
+int VM::get_sound_buffer_ptr()
+{
+       return event->get_sound_buffer_ptr();
+}
+
+#ifdef USE_SOUND_VOLUME
+void VM::set_sound_device_volume(int ch, int decibel_l, int decibel_r)
+{
+       if(ch == 0) {
+               drec->set_volume(0, decibel_l, decibel_r);
+       } else if(ch == 1) {
+               drec->get_context_noise_play()->set_volume(0, decibel_l, decibel_r);
+               drec->get_context_noise_stop()->set_volume(0, decibel_l, decibel_r);
+               drec->get_context_noise_fast()->set_volume(0, decibel_l, decibel_r);
+       }
+}
+#endif
+
+// ----------------------------------------------------------------------------
+// user interface
+// ----------------------------------------------------------------------------
+
+void VM::play_tape(int drv, const _TCHAR* file_path)
+{
+       bool remote = drec->get_remote();
+       
+       if(drec->play_tape(file_path) && remote) {
+               // if machine already sets remote on, start playing now
+               push_play(drv);
+       }
+}
+
+void VM::rec_tape(int drv, const _TCHAR* file_path)
+{
+       bool remote = drec->get_remote();
+       
+       if(drec->rec_tape(file_path) && remote) {
+               // if machine already sets remote on, start recording now
+               push_play(drv);
+       }
+}
+
+void VM::close_tape(int drv)
+{
+       emu->lock_vm();
+       drec->close_tape();
+       emu->unlock_vm();
+       drec->set_remote(false);
+}
+
+bool VM::is_tape_inserted(int drv)
+{
+       return drec->is_tape_inserted();
+}
+
+bool VM::is_tape_playing(int drv)
+{
+       return drec->is_tape_playing();
+}
+
+bool VM::is_tape_recording(int drv)
+{
+       return drec->is_tape_recording();
+}
+
+int VM::get_tape_position(int drv)
+{
+       return drec->get_tape_position();
+}
+
+const _TCHAR* VM::get_tape_message(int drv)
+{
+       return drec->get_message();
+}
+
+void VM::push_play(int drv)
+{
+       drec->set_remote(false);
+       drec->set_ff_rew(0);
+       drec->set_remote(true);
+}
+
+void VM::push_stop(int drv)
+{
+       drec->set_remote(false);
+}
+
+void VM::push_fast_forward(int drv)
+{
+       drec->set_remote(false);
+       drec->set_ff_rew(1);
+       drec->set_remote(true);
+}
+
+void VM::push_fast_rewind(int drv)
+{
+       drec->set_remote(false);
+       drec->set_ff_rew(-1);
+       drec->set_remote(true);
+}
+
+bool VM::is_frame_skippable()
+{
+       return event->is_frame_skippable();
+}
+
+void VM::update_config()
+{
+       for(DEVICE* device = first_device; device; device = device->next_device) {
+               device->update_config();
+       }
+}
+
+#define STATE_VERSION  1
+
+bool VM::process_state(FILEIO* state_fio, bool loading)
+{
+       if(!state_fio->StateCheckUint32(STATE_VERSION)) {
+               return false;
+       }
+       for(DEVICE* device = first_device; device; device = device->next_device) {
+               const _TCHAR *name = char_to_tchar(typeid(*device).name() + 6); // skip "class "
+               int len = (int)_tcslen(name);
+               
+               if(!state_fio->StateCheckInt32(len)) {
+                       return false;
+               }
+               if(!state_fio->StateCheckBuffer(name, len, 1)) {
+                       return false;
+               }
+               if(!device->process_state(state_fio, loading)) {
+                       return false;
+               }
+       }
+       state_fio->StateArray(vram, sizeof(vram), 1);
+       state_fio->StateArray(dram, sizeof(dram), 1);
+       state_fio->StateArray(cmos, sizeof(cmos), 1);
+       return true;
+}
+
diff --git a/source/src/vm/fx9000p/fx9000p.h b/source/src/vm/fx9000p/fx9000p.h
new file mode 100644 (file)
index 0000000..55b8ca7
--- /dev/null
@@ -0,0 +1,152 @@
+/*
+       CASIO FX-9000P Emulator 'eFX-9000P'
+
+       Author : Takeda.Toshiya
+       Date   : 2022.03.25-
+
+       [ virtual machine ]
+*/
+
+#ifndef _FX9000P_H_
+#define _FX9000P_H_
+
+#define DEVICE_NAME            "CASIO FX-9000P"
+#define CONFIG_NAME            "fx9000p"
+
+// device informations for virtual machine
+#define FRAMES_PER_SEC         60
+#define LINES_PER_FRAME                261
+#define CHARS_PER_LINE         44
+//#define HD46505_HORIZ_FREQ   15734
+#define CPU_CLOCKS             2750000
+#define SCREEN_WIDTH           256
+#define SCREEN_HEIGHT          128
+#define MEMORY_ADDR_MAX                0x10000
+#define MEMORY_BANK_SIZE       0x1000
+#define IO_ADDR_MAX            0x10000
+
+// device informations for win32
+#define USE_TAPE               1
+#define USE_AUTO_KEY           5
+#define USE_AUTO_KEY_RELEASE   8
+#define USE_SOUND_VOLUME       2
+#define USE_PRINTER
+#define USE_PRINTER_TYPE       4
+#define USE_DEBUGGER
+#define USE_STATE
+
+#include "../../common.h"
+#include "../../fileio.h"
+#include "../vm_template.h"
+
+#ifdef USE_SOUND_VOLUME
+static const _TCHAR *sound_device_caption[] = {
+       _T("CMT (Signal)"), _T("Noise (CMT)"),
+};
+#endif
+
+class EMU;
+class DEVICE;
+class EVENT;
+
+class DATAREC;
+class HD46505;
+class MEMORY;
+class Z80;
+
+class IO;
+
+class VM : public VM_TEMPLATE
+{
+protected:
+//     EMU* emu;
+       
+       // devices
+       EVENT* event;
+       
+       DATAREC* drec;
+       HD46505* crtc;
+       MEMORY* memory;
+       Z80* cpu;
+       
+       IO* io;
+       
+       // memory
+       uint8_t basic[0x3000];  // 0000h-2FFFh: BASIC ROM
+       uint8_t op1[0x1000];    // 5000h-5FFFh: OP-1 ROM
+       uint8_t vram[0x1000];   // 7000h-7FFFh: VRAM
+       uint8_t dram[0x4000];   // 8000h-BFFFh: DRAM 16KB (Slot #1)
+       uint8_t cmos[0x3000];   // C000h-EFFFh: CMOS 12KB (Slot #2-#4)
+       
+public:
+       // ----------------------------------------
+       // initialize
+       // ----------------------------------------
+       
+       VM(EMU* parent_emu);
+       ~VM();
+       
+       // ----------------------------------------
+       // for emulation class
+       // ----------------------------------------
+       
+       // drive virtual machine
+       void reset();
+       void run();
+       double get_frame_rate()
+       {
+               return FRAMES_PER_SEC;
+       }
+       
+#ifdef USE_DEBUGGER
+       // debugger
+       DEVICE *get_cpu(int index);
+#endif
+       
+       // draw screen
+       void draw_screen();
+       
+       // sound generation
+       void initialize_sound(int rate, int samples);
+       uint16_t* create_sound(int* extra_frames);
+       int get_sound_buffer_ptr();
+#ifdef USE_SOUND_VOLUME
+       void set_sound_device_volume(int ch, int decibel_l, int decibel_r);
+#endif
+       
+       // notify key
+       void key_down(int code, bool repeat);
+       void key_up(int code);
+       
+       // user interface
+       void play_tape(int drv, const _TCHAR* file_path);
+       void rec_tape(int drv, const _TCHAR* file_path);
+       void close_tape(int drv);
+       bool is_tape_inserted(int drv);
+       bool is_tape_playing(int drv);
+       bool is_tape_recording(int drv);
+       int get_tape_position(int drv);
+       const _TCHAR* get_tape_message(int drv);
+       void push_play(int drv);
+       void push_stop(int drv);
+       void push_fast_forward(int drv);
+       void push_fast_rewind(int drv);
+       void push_apss_forward(int drv) {}
+       void push_apss_rewind(int drv) {}
+       bool is_frame_skippable();
+       
+       void update_config();
+       bool process_state(FILEIO* state_fio, bool loading);
+       
+       // ----------------------------------------
+       // for each device
+       // ----------------------------------------
+       
+       // devices
+       DEVICE* get_device(int id);
+//     DEVICE* dummy;
+//     DEVICE* first_device;
+//     DEVICE* last_device;
+};
+
+#endif
diff --git a/source/src/vm/fx9000p/io.cpp b/source/src/vm/fx9000p/io.cpp
new file mode 100644 (file)
index 0000000..373b4ee
--- /dev/null
@@ -0,0 +1,583 @@
+/*
+       CASIO FX-9000P Emulator 'eFX-9000P'
+
+       Author : Takeda.Toshiya
+       Date   : 2022.03.25-
+
+       [ i/o ]
+*/
+
+#include "io.h"
+#include "../hd46505.h"
+#include "../../fifo.h"
+
+#define EVENT_1SEC     0
+
+/*
+       0       1       2       3       4       5       6       7       8       9       A       B       C       D       E       F
+00     "       $       (       =       >       UP      ANS     CLS     #       %       )       <       LEFT    DOWN    STAT    RIGHT
+10     Q       E       T       U       O       7       9       ;       W       R       Y       I       P       8       /       :
+20     A       D       G       J       L       4       6       C/S     S       F       H       K       ENTER   5       *       COMP
+30     X       V       N       ,       SPACE   1       -       +       Z       C       B       M       .       2       3       0
+*/
+
+static const int table[256] = {
+         -1,   // 00 
+         -1,   // 01 
+         -1,   // 02 
+         -1,   // 03 
+         -1,   // 04 
+         -1,   // 05 
+         -1,   // 06 
+         -1,   // 07 
+         -1,   // 08 Back
+         -1,   // 09 Tab
+         -1,   // 0A 
+         -1,   // 0B 
+         -1,   // 0C 
+       0x2c,   // 0D Enter
+         -1,   // 0E 
+         -1,   // 0F 
+         -1,   // 10 Shift
+         -1,   // 11 Ctrl
+         -1,   // 12 Alt
+         -1,   // 13 Pause
+         -1,   // 14 Caps
+         -1,   // 15 Kana
+         -1,   // 16 
+         -1,   // 17 
+         -1,   // 18 
+         -1,   // 19 Kanji
+         -1,   // 1A 
+         -1,   // 1B Escape
+         -1,   // 1C Convert
+         -1,   // 1D NonConv
+         -1,   // 1E 
+         -1,   // 1F 
+       0x34,   // 20 Space
+       0x06,   // 21 PgUp      ANS
+       0x0e,   // 22 PgDwn     STAT
+       0x27,   // 23 End       C/S
+       0x07,   // 24 Home      CLS
+       0x0c,   // 25 Left
+       0x05,   // 26 Up
+       0x0f,   // 27 Right
+       0x0d,   // 28 Down
+         -1,   // 29 
+         -1,   // 2A 
+         -1,   // 2B 
+         -1,   // 2C 
+         -1,   // 2D Ins
+         -1,   // 2E Del
+         -1,   // 2F 
+       0x04,   // 30 0         >
+         -1,   // 31 1
+       0x00,   // 32 2         "
+       0x08,   // 33 3         #
+       0x01,   // 34 4         $
+       0x09,   // 35 5         %
+       0x02,   // 36 6         (
+       0x0a,   // 37 7         )
+       0x03,   // 38 8         =
+       0x0b,   // 39 9         <
+         -1,   // 3A 
+         -1,   // 3B 
+         -1,   // 3C 
+         -1,   // 3D 
+         -1,   // 3E 
+         -1,   // 3F 
+         -1,   // 40 
+       0x20,   // 41 A
+       0x3a,   // 42 B
+       0x39,   // 43 C
+       0x21,   // 44 D
+       0x11,   // 45 E
+       0x29,   // 46 F
+       0x22,   // 47 G
+       0x2a,   // 48 H
+       0x1b,   // 49 I
+       0x23,   // 4A J
+       0x2b,   // 4B K
+       0x24,   // 4C L
+       0x3b,   // 4D M
+       0x32,   // 4E N
+       0x14,   // 4F O
+       0x1c,   // 50 P
+       0x10,   // 51 Q
+       0x19,   // 52 R
+       0x28,   // 53 S
+       0x12,   // 54 T
+       0x13,   // 55 U
+       0x31,   // 56 V
+       0x18,   // 57 W
+       0x30,   // 58 X
+       0x1a,   // 59 Y
+       0x38,   // 5A Z
+         -1,   // 5B 
+         -1,   // 5C 
+         -1,   // 5D 
+         -1,   // 5E 
+         -1,   // 5F 
+       0x3f,   // 60 NUM 0
+       0x35,   // 61 NUM 1
+       0x3d,   // 62 NUM 2
+       0x3e,   // 63 NUM 3
+       0x25,   // 64 NUM 4
+       0x2d,   // 65 NUM 5
+       0x26,   // 66 NUM 6
+       0x15,   // 67 NUM 7
+       0x1d,   // 68 NUM 8
+       0x16,   // 69 NUM 9
+       0x2e,   // 6A NUM *
+       0x37,   // 6B NUM +
+       0x2f,   // 6C NUM Ent   COMP
+       0x36,   // 6D NUM -
+       0x3c,   // 6E NUM .
+       0x1e,   // 6F NUM /
+#if 1
+       0x35,   // 70 F1        1
+       0x3d,   // 71 F2        2
+       0x3e,   // 72 F3        3
+       0x25,   // 73 F4        4
+       0x2d,   // 74 F5        5
+       0x26,   // 75 F6        6
+       0x15,   // 76 F7        7
+       0x1d,   // 77 F8        8
+       0x16,   // 78 F9        9
+       0x3f,   // 79 F10       0
+#else
+         -1,   // 70 F1
+         -1,   // 71 F2
+         -1,   // 72 F3
+         -1,   // 73 F4
+         -1,   // 74 F5
+         -1,   // 75 F6
+         -1,   // 76 F7
+         -1,   // 77 F8
+         -1,   // 78 F9
+         -1,   // 79 F10
+#endif
+         -1,   // 7A F11
+         -1,   // 7B F12
+         -1,   // 7C F13
+         -1,   // 7D F14
+         -1,   // 7E F15
+         -1,   // 7F F16
+         -1,   // 80 F17
+         -1,   // 81 F18
+         -1,   // 82 F19
+         -1,   // 83 F20
+         -1,   // 84 F21
+         -1,   // 85 F22
+         -1,   // 86 F23
+         -1,   // 87 F24
+         -1,   // 88 
+         -1,   // 89 
+         -1,   // 8A 
+         -1,   // 8B 
+         -1,   // 8C 
+         -1,   // 8D 
+         -1,   // 8E 
+         -1,   // 8F 
+         -1,   // 90 
+         -1,   // 91 ScrLk
+         -1,   // 92 
+         -1,   // 93 
+         -1,   // 94 
+         -1,   // 95 
+         -1,   // 96 
+         -1,   // 97 
+         -1,   // 98 
+         -1,   // 99 
+         -1,   // 9A 
+         -1,   // 9B 
+         -1,   // 9C 
+         -1,   // 9D 
+         -1,   // 9E 
+         -1,   // 9F 
+         -1,   // A0 L Shift
+         -1,   // A1 R Shift
+         -1,   // A2 L Ctrl
+       0x2f,   // A3 R Ctrl    COMP
+         -1,   // A4 L Alt
+         -1,   // A5 R Alt
+         -1,   // A6 
+         -1,   // A7 
+         -1,   // A8 
+         -1,   // A9 
+         -1,   // AA 
+         -1,   // AB 
+         -1,   // AC 
+         -1,   // AD 
+         -1,   // AE 
+         -1,   // AF 
+         -1,   // B0 
+         -1,   // B1 
+         -1,   // B2 
+         -1,   // B3 
+         -1,   // B4 
+         -1,   // B5 
+         -1,   // B6 
+         -1,   // B7 
+         -1,   // B8 
+         -1,   // B9 
+       0x1f,   // BA :
+       0x17,   // BB ;
+       0x33,   // BC ,
+         -1,   // BD -
+       0x3c,   // BE .
+         -1,   // BF /
+         -1,   // C0 @
+         -1,   // C1 
+         -1,   // C2 
+         -1,   // C3 
+         -1,   // C4 
+         -1,   // C5 
+         -1,   // C6 
+         -1,   // C7 
+         -1,   // C8 
+         -1,   // C9 
+         -1,   // CA 
+         -1,   // CB 
+         -1,   // CC 
+         -1,   // CD 
+         -1,   // CE 
+         -1,   // CF 
+         -1,   // D0 
+         -1,   // D1 
+         -1,   // D2 
+         -1,   // D3 
+         -1,   // D4 
+         -1,   // D5 
+         -1,   // D6 
+         -1,   // D7 
+         -1,   // D8 
+         -1,   // D9 
+         -1,   // DA 
+         -1,   // DB [
+         -1,   // DC Yen
+         -1,   // DD ]
+         -1,   // DE ^
+         -1,   // DF 
+         -1,   // E0 
+         -1,   // E1 
+         -1,   // E2 _
+         -1,   // E3 
+         -1,   // E4 
+         -1,   // E5 
+         -1,   // E6 
+         -1,   // E7 
+         -1,   // E8 
+         -1,   // E9 
+         -1,   // EA 
+         -1,   // EB 
+         -1,   // EC 
+         -1,   // ED 
+         -1,   // EE 
+         -1,   // EF 
+         -1,   // F0 
+         -1,   // F1 
+         -1,   // F2 
+         -1,   // F3 
+         -1,   // F4 
+         -1,   // F5 
+         -1,   // F6 
+         -1,   // F7 
+         -1,   // F8 
+         -1,   // F9 
+         -1,   // FA 
+         -1,   // FB 
+         -1,   // FC 
+         -1,   // FD 
+         -1,   // FE 
+         -1,   // FF 
+};
+
+void IO::initialize()
+{
+       key_fifo = new FIFO(8);
+       register_frame_event(this);
+       
+       get_host_time(&cur_time);
+       register_event(this, EVENT_1SEC, 1000000, true, NULL);
+}
+
+void IO::release()
+{
+       key_fifo->release();
+       delete key_fifo;
+}
+
+void IO::reset()
+{
+       key_fifo->clear();
+       key_data = 0xff;
+       
+       crtc_blink = crtc_disp = 0;
+       
+       cmt_ear = false;
+       op1_addr = op1_data = 0;
+}
+
+void IO::event_frame()
+{
+       if(!key_fifo->empty()) {
+               key_data = key_fifo->read();
+               d_cpu->write_signal(SIG_CPU_IRQ, 1, 1);
+       }
+       crtc_blink++;
+}
+
+void IO::event_callback(int event_id, int err)
+{
+       if(event_id == EVENT_1SEC) {
+               if(cur_time.initialized) {
+                       cur_time.increment();
+               } else {
+                       get_host_time(&cur_time);       // resync
+                       cur_time.initialized = true;
+               }
+       }
+}
+
+void IO::write_signal(int id, uint32_t data, uint32_t mask)
+{
+       if(id == SIG_IO_DISP) {
+               crtc_disp = ((data & mask) != 0);
+       } else if(id == SIG_IO_EAR) {
+               cmt_ear = ((data & mask) != 0);
+       }
+}
+
+void IO::write_io8(uint32_t addr, uint32_t data)
+{
+       bool unknown = false;
+       
+       switch(addr) {
+       case 0x6002:
+               d_crtc->write_io8(1, data);
+               break;
+       case 0x6003:
+               d_crtc->write_io8(0, data);
+               break;
+       default:
+               // OP-1
+               if((addr & 0xf000) == 0x6000 && (addr & 0xff00) != 0x6000) {
+                       switch(addr & 0xff00) {
+                       case 0x6300:
+                               // RTC: A4-A6 seems to be used for strobe signals ???
+                               if((op1_data & 0xf0) == 0x30 && (data & 0xf0) == 0x10) {
+                                       set_rtc(addr, data);
+                               }
+                               break;
+                       default:
+                               unknown = true;
+                               break;
+                       }
+                       op1_addr = addr;
+                       op1_data = data;
+               } else {
+                       unknown = true;
+               }
+               break;
+       }
+#ifdef _IO_DEBUG_LOG
+       _TCHAR tmp[256] = {0};
+       if(unknown) {
+               my_sprintf_s(tmp + _tcslen(tmp), array_length(tmp) - _tcslen(tmp), _T("UNKNOWN:\t"));
+       }
+       my_sprintf_s(tmp + _tcslen(tmp), array_length(tmp) - _tcslen(tmp), _T("%04x\tOUT8\t%04x,%02x\n"), get_cpu_pc(0), addr, data & 0xff);
+       this->out_debug_log(tmp);
+#endif
+}
+
+uint32_t IO::read_io8(uint32_t addr)
+{
+       uint32_t value = 0xff;
+       bool unknown = false;
+       
+       switch(addr) {
+       case 0x6001:
+               // bit7: CRTC DISP
+               // bit0: SHIFT
+               value = (crtc_disp ? 0 : 0x80) | 0x7e | (key_data & 1);
+               break;
+       case 0x6002:
+               value = d_crtc->read_io8(1);
+               break;
+       case 0x6003:
+               value = d_crtc->read_io8(0);
+               break;
+       case 0x6004:
+               value = key_data & ~3;
+               break;
+       case 0x6500:
+               // OP-1
+               switch(op1_addr & 0xff00) {
+               case 0x6300:
+                       // RTC
+                       value = get_rtc(op1_addr);
+                       break;
+               default:
+                       unknown = true;
+                       break;
+               }
+               break;
+       default:
+               unknown = true;
+               break;
+       }
+#ifdef _IO_DEBUG_LOG
+       _TCHAR tmp[256] = {0};
+       if(unknown) {
+               my_sprintf_s(tmp + _tcslen(tmp), array_length(tmp) - _tcslen(tmp), _T("UNKNOWN:\t"));
+       }
+       my_sprintf_s(tmp + _tcslen(tmp), array_length(tmp) - _tcslen(tmp), _T("%04x\tIN8\t%04x = %02x\n"), get_cpu_pc(0), addr, value & 0xff);
+       this->out_debug_log(tmp);
+#endif
+       return value;
+}
+
+void IO::key_down(int code)
+{
+       if((code = table[code]) != -1) {
+               key_fifo->write((code << 2) | (emu->get_key_buffer()[0x10] ? 0 : 1));
+       }
+}
+
+void IO::draw_screen(uint8_t *vram)
+{
+       scrntype_t green = RGB_COLOR(0, 255, 0);
+       uint8_t screen[128][256];
+       uint8_t *regs = d_crtc->get_regs();
+       uint32_t addr = regs[12] * 256 + regs[13];
+       int cursor_x = -1, cursor_y = -1;
+       
+       if((regs[8] & 0xc0) != 0xc0) {
+               uint8_t bp = regs[10] & 0x60;
+               if(bp == 0x00 || (bp == 0x40 && (crtc_blink & 0x08) != 0) || (bp == 0x60 && (crtc_blink & 0x10) != 0)) {
+                       uint32_t cursor_addr = regs[14] * 256 + regs[15];
+                       cursor_x = cursor_addr & 31;
+                       cursor_y = cursor_addr >> 7;
+               }
+       }
+       for(int y = 0; y < 16; y++) {
+               for(int x = 0; x < 32; x++) {
+                       bool cursor_hit = (x == cursor_x && y == cursor_y);
+                       for(int l = 0; l < 8; l++) {
+                               uint8_t pat = (cursor_hit && l == 7) ? 0xff : vram[0xfff - (addr & 0xfff)];
+                               for(int b = 0; b < 8; b++) {
+                                       screen[y * 8 + l][x * 8 + b] = pat & (0x80 >> b);
+                               }
+                               addr++;
+                       }
+               }
+       }
+       for(int y = 0; y < 128; y++) {
+               scrntype_t *dest = emu->get_screen_buffer(y);
+               for(int x = 0; x < 256; x++) {
+                       dest[x] = screen[y][x] ? green : 0;
+               }
+       }
+}
+
+uint32_t IO::get_rtc(uint32_t addr)
+{
+       switch(addr & 0xff0f) {
+       case 0x6300:
+               return TO_BCD_LO(cur_time.second);
+       case 0x6301:
+               return TO_BCD_HI(cur_time.second);
+       case 0x6302:
+               return TO_BCD_LO(cur_time.minute);
+       case 0x6303:
+               return TO_BCD_HI(cur_time.minute);
+       case 0x6304:
+               return TO_BCD_LO(cur_time.hour);
+       case 0x6305:
+               return TO_BCD_HI(cur_time.hour);
+       case 0x6306:
+               return TO_BCD_LO(cur_time.day);
+       case 0x6307:
+               return TO_BCD_HI(cur_time.day);
+       case 0x6308:
+               return TO_BCD_LO(cur_time.month);
+       case 0x6309:
+               return TO_BCD_HI(cur_time.month);
+       case 0x630a:
+               return TO_BCD_LO(cur_time.year);
+       case 0x630b:
+               return TO_BCD_HI(cur_time.year);
+       }
+       return 0;
+}
+
+void IO::set_rtc(uint32_t addr, uint32_t data)
+{
+       // NOTE: this code does not consider the case rtc is incremented while setting registers
+       switch(addr & 0xff0f) {
+       case 0x6300:
+               cur_time.second = TO_BCD_HI(cur_time.second) * 10 + (data & 0x0f);
+               break;
+       case 0x6301:
+               cur_time.second = TO_BCD_LO(cur_time.second) + (data & 0x0f) * 10;
+               break;
+       case 0x6302:
+               cur_time.minute = TO_BCD_HI(cur_time.minute) * 10 + (data & 0x0f);
+               break;
+       case 0x6303:
+               cur_time.minute = TO_BCD_LO(cur_time.minute) + (data & 0x0f) * 10;
+               break;
+       case 0x6304:
+               cur_time.hour = TO_BCD_HI(cur_time.hour) * 10 + (data & 0x0f);
+               break;
+       case 0x6305:
+               cur_time.hour = TO_BCD_LO(cur_time.hour) + (data & 0x0f) * 10;
+               break;
+       case 0x6306:
+               cur_time.day = TO_BCD_HI(cur_time.day) * 10 + (data & 0x0f);
+               break;
+       case 0x6307:
+               cur_time.day = TO_BCD_LO(cur_time.day) + (data & 0x0f) * 10;
+               break;
+       case 0x6308:
+               cur_time.month = TO_BCD_HI(cur_time.month) * 10 + (data & 0x0f);
+               break;
+       case 0x6309:
+               cur_time.month = TO_BCD_LO(cur_time.month) + (data & 0x0f) * 10;
+               break;
+       case 0x630a:
+               cur_time.year = TO_BCD_HI(cur_time.year) * 10 + (data & 0x0f);
+               cur_time.update_year();
+               break;
+       case 0x630b:
+               cur_time.year = TO_BCD_LO(cur_time.year) + (data & 0x0f) * 10;
+               cur_time.update_year();
+               break;
+       }
+}
+
+#define STATE_VERSION  1
+
+bool IO::process_state(FILEIO* state_fio, bool loading)
+{
+       if(!state_fio->StateCheckUint32(STATE_VERSION)) {
+               return false;
+       }
+       if(!state_fio->StateCheckInt32(this_device_id)) {
+               return false;
+       }
+       if(!key_fifo->process_state((void *)state_fio, loading)) {
+               return false;
+       }
+       if(!cur_time.process_state((void *)state_fio, loading)) {
+               return false;
+       }
+       state_fio->StateValue(key_data);
+       state_fio->StateValue(crtc_blink);
+       state_fio->StateValue(crtc_disp);
+       state_fio->StateValue(cmt_ear);
+       state_fio->StateValue(op1_addr);
+       state_fio->StateValue(op1_data);
+       return true;
+}
diff --git a/source/src/vm/fx9000p/io.h b/source/src/vm/fx9000p/io.h
new file mode 100644 (file)
index 0000000..4948147
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+       CASIO FX-9000P Emulator 'eFX-9000P'
+
+       Author : Takeda.Toshiya
+       Date   : 2022.03.25-
+
+       [ i/o ]
+*/
+
+#ifndef _IO_H_
+#define _IO_H_
+
+#include "../vm.h"
+#include "../../emu.h"
+#include "../device.h"
+
+class HD46505;
+class FIFO;
+
+#define SIG_IO_DISP    0
+#define SIG_IO_EAR     1
+
+class IO : public DEVICE
+{
+private:
+       DEVICE *d_cpu;
+       HD46505 *d_crtc;
+       DEVICE *d_drec;
+       
+       // keyboard
+       FIFO *key_fifo;
+       uint8_t key_data;
+       
+       // display
+       uint8_t crtc_blink, crtc_disp;
+       
+       // OP-1 rtc
+       dll_cur_time_t cur_time;
+       uint8_t cmt_ear;
+       uint32_t op1_addr, op1_data;
+       
+       uint32_t get_rtc(uint32_t addr);
+       void set_rtc(uint32_t addr, uint32_t data);
+       
+public:
+       IO(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       {
+               set_device_name(_T("I/O"));
+       }
+       ~IO() {}
+       
+       // common functions
+       void initialize();
+       void release();
+       void reset();
+       void write_io8(uint32_t addr, uint32_t data);
+       uint32_t read_io8(uint32_t addr);
+       void write_signal(int id, uint32_t data, uint32_t mask);
+       void event_frame();
+       void event_callback(int event_id, int err);
+       bool process_state(FILEIO* state_fio, bool loading);
+       
+       // unique functions
+       void set_context_cpu(DEVICE* device)
+       {
+               d_cpu = device;
+       }
+       void set_context_crtc(HD46505* device)
+       {
+               d_crtc = device;
+       }
+       void set_context_drec(DEVICE* device)
+       {
+               d_drec = device;
+       }
+       void key_down(int code);
+       void draw_screen(uint8_t *vram);
+};
+
+#endif
diff --git a/source/vc++2008/fx9000p.vcproj b/source/vc++2008/fx9000p.vcproj
new file mode 100644 (file)
index 0000000..d75a25f
--- /dev/null
@@ -0,0 +1,774 @@
+<?xml version="1.0" encoding="shift_jis"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="9.00"
+       Name="fx9000p"
+       ProjectGUID="{C8ECB2A1-4C61-417E-B499-94FF8CC90187}"
+       RootNamespace="fx9000p"
+       TargetFrameworkVersion="131072"
+       >
+       <Platforms>
+               <Platform
+                       Name="Win32"
+               />
+       </Platforms>
+       <ToolFiles>
+       </ToolFiles>
+       <Configurations>
+               <Configuration
+                       Name="Debug|Win32"
+                       OutputDirectory=".\Debug"
+                       IntermediateDirectory=".\Debug"
+                       ConfigurationType="1"
+                       InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+                       UseOfMFC="0"
+                       ATLMinimizesCRunTimeLibraryUsage="false"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               PreprocessorDefinitions="_DEBUG"
+                               MkTypLibCompatible="true"
+                               SuppressStartupBanner="true"
+                               TargetEnvironment="1"
+                               TypeLibraryName=".\Debug/fx9000p.tlb"
+                               HeaderFileName=""
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_FX9000P"
+                               MinimalRebuild="true"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="1"
+                               PrecompiledHeaderFile=".\Debug/fx9000p.pch"
+                               AssemblerListingLocation=".\Debug/"
+                               ObjectFile=".\Debug/"
+                               ProgramDataBaseFileName=".\Debug/"
+                               BrowseInformation="1"
+                               WarningLevel="3"
+                               SuppressStartupBanner="true"
+                               DebugInformationFormat="4"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                               PreprocessorDefinitions="_DEBUG"
+                               Culture="1041"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="odbc32.lib odbccp32.lib winmm.lib imm32.lib"
+                               OutputFile=".\Debug/fx9000p.exe"
+                               LinkIncremental="2"
+                               SuppressStartupBanner="true"
+                               GenerateManifest="false"
+                               GenerateDebugInformation="true"
+                               ProgramDatabaseFile=".\Debug/fx9000p.pdb"
+                               SubSystem="2"
+                               RandomizedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                               SuppressStartupBanner="true"
+                               OutputFile=".\Debug/fx9000p.bsc"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+               <Configuration
+                       Name="Release|Win32"
+                       OutputDirectory=".\Release"
+                       IntermediateDirectory=".\Release"
+                       ConfigurationType="1"
+                       InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+                       UseOfMFC="0"
+                       ATLMinimizesCRunTimeLibraryUsage="false"
+                       CharacterSet="2"
+                       >
+                       <Tool
+                               Name="VCPreBuildEventTool"
+                       />
+                       <Tool
+                               Name="VCCustomBuildTool"
+                       />
+                       <Tool
+                               Name="VCXMLDataGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCWebServiceProxyGeneratorTool"
+                       />
+                       <Tool
+                               Name="VCMIDLTool"
+                               PreprocessorDefinitions="NDEBUG"
+                               MkTypLibCompatible="true"
+                               SuppressStartupBanner="true"
+                               TargetEnvironment="1"
+                               TypeLibraryName=".\Release/fx9000p.tlb"
+                               HeaderFileName=""
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="2"
+                               InlineFunctionExpansion="2"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_FX9000P"
+                               StringPooling="true"
+                               RuntimeLibrary="0"
+                               EnableFunctionLevelLinking="true"
+                               EnableEnhancedInstructionSet="2"
+                               PrecompiledHeaderFile=".\Release/fx9000p.pch"
+                               AssemblerListingLocation=".\Release/"
+                               ObjectFile=".\Release/"
+                               ProgramDataBaseFileName=".\Release/"
+                               BrowseInformation="1"
+                               WarningLevel="3"
+                               SuppressStartupBanner="true"
+                       />
+                       <Tool
+                               Name="VCManagedResourceCompilerTool"
+                       />
+                       <Tool
+                               Name="VCResourceCompilerTool"
+                               PreprocessorDefinitions="NDEBUG"
+                               Culture="1033"
+                       />
+                       <Tool
+                               Name="VCPreLinkEventTool"
+                       />
+                       <Tool
+                               Name="VCLinkerTool"
+                               AdditionalDependencies="odbc32.lib odbccp32.lib winmm.lib imm32.lib"
+                               OutputFile=".\Release/fx9000p.exe"
+                               LinkIncremental="1"
+                               SuppressStartupBanner="true"
+                               GenerateManifest="false"
+                               ProgramDatabaseFile=".\Release/fx9000p.pdb"
+                               SubSystem="2"
+                               RandomizedBaseAddress="1"
+                               DataExecutionPrevention="0"
+                               TargetMachine="1"
+                       />
+                       <Tool
+                               Name="VCALinkTool"
+                       />
+                       <Tool
+                               Name="VCManifestTool"
+                       />
+                       <Tool
+                               Name="VCXDCMakeTool"
+                       />
+                       <Tool
+                               Name="VCBscMakeTool"
+                               SuppressStartupBanner="true"
+                               OutputFile=".\Release/fx9000p.bsc"
+                       />
+                       <Tool
+                               Name="VCFxCopTool"
+                       />
+                       <Tool
+                               Name="VCAppVerifierTool"
+                       />
+                       <Tool
+                               Name="VCPostBuildEventTool"
+                       />
+               </Configuration>
+       </Configurations>
+       <References>
+       </References>
+       <Files>
+               <Filter
+                       Name="Source Files"
+                       Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+                       >
+                       <File
+                               RelativePath="..\src\common.cpp"
+                               >
+                               <FileConfiguration
+                                       Name="Debug|Win32"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               PreprocessorDefinitions=""
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release|Win32"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               PreprocessorDefinitions=""
+                                       />
+                               </FileConfiguration>
+                       </File>
+                       <File
+                               RelativePath="..\src\config.cpp"
+                               >
+                               <FileConfiguration
+                                       Name="Debug|Win32"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               PreprocessorDefinitions=""
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release|Win32"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               PreprocessorDefinitions=""
+                                       />
+                               </FileConfiguration>
+                       </File>
+                       <File
+                               RelativePath="..\src\fifo.cpp"
+                               >
+                               <FileConfiguration
+                                       Name="Debug|Win32"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               PreprocessorDefinitions=""
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release|Win32"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               PreprocessorDefinitions=""
+                                       />
+                               </FileConfiguration>
+                       </File>
+                       <File
+                               RelativePath="..\src\fileio.cpp"
+                               >
+                               <FileConfiguration
+                                       Name="Debug|Win32"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               PreprocessorDefinitions=""
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release|Win32"
+                                       >
+                                       <Tool
+                                               Name="VCCLCompilerTool"
+                                               PreprocessorDefinitions=""
+                                       />
+                               </FileConfiguration>
+                       </File>
+                       <Filter
+                               Name="EMU Source Files"
+                               Filter="cpp"
+                               >
+                               <File
+                                       RelativePath="..\src\debugger.cpp"
+                                       >
+                                       <FileConfiguration
+                                               Name="Debug|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                                       <FileConfiguration
+                                               Name="Release|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                               </File>
+                               <File
+                                       RelativePath="..\src\emu.cpp"
+                                       >
+                                       <FileConfiguration
+                                               Name="Debug|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                                       <FileConfiguration
+                                               Name="Release|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                               </File>
+                       </Filter>
+                       <Filter
+                               Name="OSD Source Files"
+                               Filter="cpp"
+                               >
+                               <File
+                                       RelativePath="..\src\win32\osd.cpp"
+                                       >
+                                       <FileConfiguration
+                                               Name="Debug|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                                       <FileConfiguration
+                                               Name="Release|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                               </File>
+                               <File
+                                       RelativePath="..\src\win32\osd_console.cpp"
+                                       >
+                                       <FileConfiguration
+                                               Name="Debug|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                                       <FileConfiguration
+                                               Name="Release|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                               </File>
+                               <File
+                                       RelativePath="..\src\win32\osd_input.cpp"
+                                       >
+                                       <FileConfiguration
+                                               Name="Debug|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                                       <FileConfiguration
+                                               Name="Release|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                               </File>
+                               <File
+                                       RelativePath="..\src\win32\osd_screen.cpp"
+                                       >
+                                       <FileConfiguration
+                                               Name="Debug|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                                       <FileConfiguration
+                                               Name="Release|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                               </File>
+                               <File
+                                       RelativePath="..\src\win32\osd_sound.cpp"
+                                       >
+                                       <FileConfiguration
+                                               Name="Debug|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                                       <FileConfiguration
+                                               Name="Release|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                               </File>
+                               <File
+                                       RelativePath="..\src\win32\winmain.cpp"
+                                       >
+                                       <FileConfiguration
+                                               Name="Debug|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                                       <FileConfiguration
+                                               Name="Release|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                               </File>
+                       </Filter>
+                       <Filter
+                               Name="VM Common Source Files"
+                               Filter="cpp"
+                               >
+                               <File
+                                       RelativePath="..\src\vm\datarec.cpp"
+                                       >
+                                       <FileConfiguration
+                                               Name="Debug|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                                       <FileConfiguration
+                                               Name="Release|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\event.cpp"
+                                       >
+                                       <FileConfiguration
+                                               Name="Debug|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                                       <FileConfiguration
+                                               Name="Release|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\hd46505.cpp"
+                                       >
+                                       <FileConfiguration
+                                               Name="Debug|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                                       <FileConfiguration
+                                               Name="Release|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\memory.cpp"
+                                       >
+                                       <FileConfiguration
+                                               Name="Debug|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                                       <FileConfiguration
+                                               Name="Release|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\noise.cpp"
+                                       >
+                                       <FileConfiguration
+                                               Name="Debug|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                                       <FileConfiguration
+                                               Name="Release|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\z80.cpp"
+                                       >
+                                       <FileConfiguration
+                                               Name="Debug|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                                       <FileConfiguration
+                                               Name="Release|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                               </File>
+                       </Filter>
+                       <Filter
+                               Name="VM Driver Source Files"
+                               Filter="cpp"
+                               >
+                               <File
+                                       RelativePath="..\src\vm\fx9000p\fx9000p.cpp"
+                                       >
+                                       <FileConfiguration
+                                               Name="Debug|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                                       <FileConfiguration
+                                               Name="Release|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\fx9000p\io.cpp"
+                                       >
+                                       <FileConfiguration
+                                               Name="Debug|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                                       <FileConfiguration
+                                               Name="Release|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                               </File>
+                       </Filter>
+               </Filter>
+               <Filter
+                       Name="Header Files"
+                       Filter="h;hpp;hxx;hm;inl"
+                       >
+                       <File
+                               RelativePath="..\src\common.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\config.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\fifo.h"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\fileio.h"
+                               >
+                       </File>
+                       <Filter
+                               Name="EMU Header Files"
+                               Filter="h"
+                               >
+                               <File
+                                       RelativePath="..\src\emu.h"
+                                       >
+                               </File>
+                       </Filter>
+                       <Filter
+                               Name="OSD Header Files"
+                               Filter="h"
+                               >
+                               <File
+                                       RelativePath="..\src\win32\osd.h"
+                                       >
+                               </File>
+                       </Filter>
+                       <Filter
+                               Name="VM Common Header Files"
+                               Filter="h"
+                               >
+                               <File
+                                       RelativePath="..\src\vm\datarec.h"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\debugger.h"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\device.h"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\event.h"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\hd46505.h"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\memory.h"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\noise.h"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\vm.h"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\vm_template.h"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\z80.h"
+                                       >
+                               </File>
+                       </Filter>
+                       <Filter
+                               Name="VM Driver Header Files"
+                               Filter="h"
+                               >
+                               <File
+                                       RelativePath="..\src\vm\fx9000p\fx9000p.h"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\fx9000p\io.h"
+                                       >
+                               </File>
+                       </Filter>
+               </Filter>
+               <Filter
+                       Name="Resource Files"
+                       Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+                       >
+                       <File
+                               RelativePath="..\src\res\fx9000p.ico"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\res\fx9000p.rc"
+                               >
+                               <FileConfiguration
+                                       Name="Debug|Win32"
+                                       >
+                                       <Tool
+                                               Name="VCResourceCompilerTool"
+                                               PreprocessorDefinitions=""
+                                               AdditionalIncludeDirectories="..\src\res"
+                                       />
+                               </FileConfiguration>
+                               <FileConfiguration
+                                       Name="Release|Win32"
+                                       >
+                                       <Tool
+                                               Name="VCResourceCompilerTool"
+                                               PreprocessorDefinitions=""
+                                               AdditionalIncludeDirectories="..\src\res"
+                                       />
+                               </FileConfiguration>
+                       </File>
+                       <File
+                               RelativePath="..\src\res\resource.h"
+                               >
+                       </File>
+               </Filter>
+       </Files>
+       <Globals>
+       </Globals>
+</VisualStudioProject>
diff --git a/source/vc++2017/fx9000p.vcxproj b/source/vc++2017/fx9000p.vcxproj
new file mode 100644 (file)
index 0000000..dafc3f1
--- /dev/null
@@ -0,0 +1,380 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{C8ECB2A1-4C61-417E-B499-94FF8CC90187}</ProjectGuid>
+    <RootNamespace>fx9000p</RootNamespace>
+    <Keyword>Win32Proj</Keyword>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v141</PlatformToolset>
+    <UseOfMfc>false</UseOfMfc>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v141</PlatformToolset>
+    <UseOfMfc>false</UseOfMfc>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v141</PlatformToolset>
+    <UseOfMfc>false</UseOfMfc>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v141</PlatformToolset>
+    <UseOfMfc>false</UseOfMfc>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.21005.1</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(SolutionDir)bin\$(PlatformTarget)\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)obj\$(PlatformTarget)\$(Configuration)\$(ProjectName)\</IntDir>
+    <LinkIncremental>true</LinkIncremental>
+    <IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);$(DXSDK_DIR)Include</IncludePath>
+    <LibraryPath>$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);$(DXSDK_DIR)Lib\x86</LibraryPath>
+    <ExcludePath />
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);$(DXSDK_DIR)Include</IncludePath>
+    <LibraryPath>$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(DXSDK_DIR)Lib\x64</LibraryPath>
+    <ExcludePath />
+    <OutDir>$(SolutionDir)bin\$(PlatformTarget)\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)obj\$(PlatformTarget)\$(Configuration)\$(ProjectName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(SolutionDir)bin\$(PlatformTarget)\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)obj\$(PlatformTarget)\$(Configuration)\$(ProjectName)\</IntDir>
+    <LinkIncremental>false</LinkIncremental>
+    <IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath)</IncludePath>
+    <LibraryPath>$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86)</LibraryPath>
+    <ExcludePath />
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>false</LinkIncremental>
+    <IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath)</IncludePath>
+    <LibraryPath>$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64)</LibraryPath>
+    <ExcludePath />
+    <OutDir>$(SolutionDir)bin\$(PlatformTarget)\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)obj\$(PlatformTarget)\$(Configuration)\$(ProjectName)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <VcpkgEnabled>false</VcpkgEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Vcpkg">
+    <VcpkgEnabled>false</VcpkgEnabled>
+  </PropertyGroup>
+  <PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <VcpkgEnabled>false</VcpkgEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Vcpkg">
+    <VcpkgEnabled>false</VcpkgEnabled>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Midl>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MkTypLibCompatible>true</MkTypLibCompatible>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TargetEnvironment>Win32</TargetEnvironment>
+      <TypeLibraryName>$(IntDir)vc$(PlatformToolsetVersion)\$(targetname).tlb</TypeLibraryName>
+      <HeaderFileName />
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_FX9000P;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <PrecompiledHeaderOutputFile>$(IntDir)$(TargetName).pch</PrecompiledHeaderOutputFile>
+      <AssemblerListingLocation>$(IntDir)%(RelativeDir)</AssemblerListingLocation>
+      <ObjectFileName>$(IntDir)%(RelativeDir)</ObjectFileName>
+      <ProgramDataBaseFileName>$(IntDir)%(RelativeDir)\vc$(PlatformToolsetVersion)\$(TargetName).pdb</ProgramDataBaseFileName>
+      <BrowseInformation>true</BrowseInformation>
+      <WarningLevel>Level3</WarningLevel>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+      <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0411</Culture>
+    </ResourceCompile>
+    <Link>
+      <AdditionalDependencies>winmm.lib;imm32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <ProgramDatabaseFile>$(OutDir)$(TargetName).pdb</ProgramDatabaseFile>
+      <SubSystem>Windows</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention />
+      <TargetMachine>MachineX86</TargetMachine>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+      <IgnoreSpecificDefaultLibraries>Libcmt.lib</IgnoreSpecificDefaultLibraries>
+      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories);</AdditionalLibraryDirectories>
+      <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+    </Link>
+    <Bscmake>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <OutputFile>$(IntDir)vc$(PlatformToolsetVersion)\$(targetname).bsc</OutputFile>
+    </Bscmake>
+    <Manifest>
+      <AdditionalManifestFiles>..\src\res\vista.manifest</AdditionalManifestFiles>
+    </Manifest>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Midl>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MkTypLibCompatible>true</MkTypLibCompatible>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TypeLibraryName>$(IntDir)vc$(PlatformToolsetVersion)\$(targetname).tlb</TypeLibraryName>
+      <HeaderFileName />
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_FX9000P;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <PrecompiledHeaderOutputFile>$(IntDir)$(TargetName).pch</PrecompiledHeaderOutputFile>
+      <AssemblerListingLocation>$(IntDir)%(RelativeDir)</AssemblerListingLocation>
+      <ObjectFileName>$(IntDir)%(RelativeDir)</ObjectFileName>
+      <ProgramDataBaseFileName>$(IntDir)%(RelativeDir)\vc$(PlatformToolsetVersion)\$(TargetName).pdb</ProgramDataBaseFileName>
+      <BrowseInformation>true</BrowseInformation>
+      <WarningLevel>Level3</WarningLevel>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0411</Culture>
+    </ResourceCompile>
+    <Link>
+      <AdditionalDependencies>winmm.lib;imm32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <ProgramDatabaseFile>$(OutDir)$(TargetName).pdb</ProgramDatabaseFile>
+      <SubSystem>Windows</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+      <IgnoreSpecificDefaultLibraries>Libcmt.lib</IgnoreSpecificDefaultLibraries>
+      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories);</AdditionalLibraryDirectories>
+      <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+    </Link>
+    <Bscmake>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <OutputFile>$(IntDir)vc$(PlatformToolsetVersion)\$(targetname).bsc</OutputFile>
+    </Bscmake>
+    <Manifest>
+      <AdditionalManifestFiles>..\src\res\vista.manifest</AdditionalManifestFiles>
+    </Manifest>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Midl>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MkTypLibCompatible>true</MkTypLibCompatible>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TargetEnvironment>Win32</TargetEnvironment>
+      <TypeLibraryName>$(IntDir)vc$(PlatformToolsetVersion)\$(targetname).tlb</TypeLibraryName>
+      <HeaderFileName />
+    </Midl>
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_FX9000P;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>true</StringPooling>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <PrecompiledHeaderOutputFile>$(IntDir)$(TargetName).pch</PrecompiledHeaderOutputFile>
+      <AssemblerListingLocation>$(IntDir)%(RelativeDir)</AssemblerListingLocation>
+      <ObjectFileName>$(IntDir)%(RelativeDir)</ObjectFileName>
+      <ProgramDataBaseFileName>$(IntDir)%(RelativeDir)\vc$(PlatformToolsetVersion)\$(TargetName).pdb</ProgramDataBaseFileName>
+      <BrowseInformation>true</BrowseInformation>
+      <WarningLevel>Level3</WarningLevel>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0409</Culture>
+    </ResourceCompile>
+    <Link>
+      <AdditionalDependencies>winmm.lib;imm32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <ProgramDatabaseFile>$(OutDir)$(TargetName).pdb</ProgramDatabaseFile>
+      <SubSystem>Windows</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention />
+      <TargetMachine>MachineX86</TargetMachine>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories);</AdditionalLibraryDirectories>
+      <IgnoreSpecificDefaultLibraries>
+      </IgnoreSpecificDefaultLibraries>
+    </Link>
+    <Bscmake>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <OutputFile>$(IntDir)vc$(PlatformToolsetVersion)\$(targetname).bsc</OutputFile>
+    </Bscmake>
+    <Manifest>
+      <AdditionalManifestFiles>..\src\res\vista.manifest</AdditionalManifestFiles>
+    </Manifest>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Midl>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MkTypLibCompatible>true</MkTypLibCompatible>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TypeLibraryName>$(IntDir)vc$(PlatformToolsetVersion)\$(targetname).tlb</TypeLibraryName>
+      <HeaderFileName />
+    </Midl>
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_FX9000P;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>true</StringPooling>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
+      <PrecompiledHeaderOutputFile>$(IntDir)$(TargetName).pch</PrecompiledHeaderOutputFile>
+      <AssemblerListingLocation>$(IntDir)%(RelativeDir)</AssemblerListingLocation>
+      <ObjectFileName>$(IntDir)%(RelativeDir)</ObjectFileName>
+      <ProgramDataBaseFileName>$(IntDir)%(RelativeDir)\vc$(PlatformToolsetVersion)\$(TargetName).pdb</ProgramDataBaseFileName>
+      <BrowseInformation>true</BrowseInformation>
+      <WarningLevel>Level3</WarningLevel>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0409</Culture>
+    </ResourceCompile>
+    <Link>
+      <AdditionalDependencies>winmm.lib;imm32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <ProgramDatabaseFile>$(OutDir)$(TargetName).pdb</ProgramDatabaseFile>
+      <SubSystem>Windows</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention>
+      </DataExecutionPrevention>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories);</AdditionalLibraryDirectories>
+      <IgnoreSpecificDefaultLibraries>
+      </IgnoreSpecificDefaultLibraries>
+    </Link>
+    <Bscmake>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <OutputFile>$(IntDir)vc$(PlatformToolsetVersion)\$(targetname).bsc</OutputFile>
+    </Bscmake>
+    <Manifest>
+      <AdditionalManifestFiles>..\src\res\vista.manifest</AdditionalManifestFiles>
+    </Manifest>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\common.cpp" />
+    <ClCompile Include="..\src\config.cpp" />
+    <ClCompile Include="..\src\debugger.cpp" />
+    <ClCompile Include="..\src\emu.cpp" />
+    <ClCompile Include="..\src\fifo.cpp" />
+    <ClCompile Include="..\src\fileio.cpp" />
+    <ClCompile Include="..\src\vm\datarec.cpp" />
+    <ClCompile Include="..\src\vm\event.cpp" />
+    <ClCompile Include="..\src\vm\fx9000p\fx9000p.cpp" />
+    <ClCompile Include="..\src\vm\fx9000p\io.cpp" />
+    <ClCompile Include="..\src\vm\hd46505.cpp" />
+    <ClCompile Include="..\src\vm\memory.cpp" />
+    <ClCompile Include="..\src\vm\noise.cpp" />
+    <ClCompile Include="..\src\vm\z80.cpp" />
+    <ClCompile Include="..\src\win32\osd.cpp" />
+    <ClCompile Include="..\src\win32\osd_console.cpp" />
+    <ClCompile Include="..\src\win32\osd_input.cpp" />
+    <ClCompile Include="..\src\win32\osd_screen.cpp" />
+    <ClCompile Include="..\src\win32\osd_sound.cpp" />
+    <ClCompile Include="..\src\win32\winmain.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\common.h" />
+    <ClInclude Include="..\src\config.h" />
+    <ClInclude Include="..\src\emu.h" />
+    <ClInclude Include="..\src\fifo.h" />
+    <ClInclude Include="..\src\fileio.h" />
+    <ClInclude Include="..\src\res\resource.h" />
+    <ClInclude Include="..\src\vm\datarec.h" />
+    <ClInclude Include="..\src\vm\debugger.h" />
+    <ClInclude Include="..\src\vm\device.h" />
+    <ClInclude Include="..\src\vm\event.h" />
+    <ClInclude Include="..\src\vm\fx9000p\fx9000p.h" />
+    <ClInclude Include="..\src\vm\fx9000p\io.h" />
+    <ClInclude Include="..\src\vm\hd46505.h" />
+    <ClInclude Include="..\src\vm\memory.h" />
+    <ClInclude Include="..\src\vm\noise.h" />
+    <ClInclude Include="..\src\vm\vm.h" />
+    <ClInclude Include="..\src\vm\vm_template.h" />
+    <ClInclude Include="..\src\vm\z80.h" />
+    <ClInclude Include="..\src\win32\osd.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <Image Include="..\src\res\fx9000p.ico" />
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\src\res\fx9000p.rc">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\src\res;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\src\res;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\src\res;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\src\res;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ResourceCompile>
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/source/vc++2017/fx9000p.vcxproj.filters b/source/vc++2017/fx9000p.vcxproj.filters
new file mode 100644 (file)
index 0000000..cd1b57f
--- /dev/null
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{3bf62c27-f4cd-4d5b-81f1-fc15c313e0f0}</UniqueIdentifier>
+      <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
+    </Filter>
+    <Filter Include="Source Files\EMU Source Files">
+      <UniqueIdentifier>{67680450-6fda-4fed-9b88-308ea949545a}</UniqueIdentifier>
+      <Extensions>cpp</Extensions>
+    </Filter>
+    <Filter Include="Source Files\OSD Source Files">
+      <UniqueIdentifier>{bfb9817c-9b88-4e6b-bd61-775c20e2410b}</UniqueIdentifier>
+      <Extensions>cpp</Extensions>
+    </Filter>
+    <Filter Include="Source Files\VM Common Source Files">
+      <UniqueIdentifier>{a659f678-beda-4295-8e0c-175cb5ba80e5}</UniqueIdentifier>
+      <Extensions>cpp</Extensions>
+    </Filter>
+    <Filter Include="Source Files\VM Driver Source Files">
+      <UniqueIdentifier>{93c349a3-387f-4f68-8249-08d4f9b79ba4}</UniqueIdentifier>
+      <Extensions>cpp</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{058e17b9-93f2-4a36-b53b-1b24decdffda}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl</Extensions>
+    </Filter>
+    <Filter Include="Header Files\EMU Header Files">
+      <UniqueIdentifier>{5e89f5f6-153f-4b3c-a8ef-36b4b085f944}</UniqueIdentifier>
+      <Extensions>h</Extensions>
+    </Filter>
+    <Filter Include="Header Files\OSD Header Files">
+      <UniqueIdentifier>{0588f095-bf3e-49b4-a2ea-8bdd7d47c3d6}</UniqueIdentifier>
+      <Extensions>h</Extensions>
+    </Filter>
+    <Filter Include="Header Files\VM Common Header Files">
+      <UniqueIdentifier>{add1ed6b-4660-440d-84a2-1d7c5eb210d8}</UniqueIdentifier>
+      <Extensions>h</Extensions>
+    </Filter>
+    <Filter Include="Header Files\VM Driver Header Files">
+      <UniqueIdentifier>{b2780e51-b0db-4878-b25e-8884bffa0fd5}</UniqueIdentifier>
+      <Extensions>h</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{b1c1f290-0b94-4933-b845-7c2667e0144a}</UniqueIdentifier>
+      <Extensions>ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\common.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\config.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\fifo.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\fileio.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\debugger.cpp">
+      <Filter>Source Files\EMU Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\emu.cpp">
+      <Filter>Source Files\EMU Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\win32\osd.cpp">
+      <Filter>Source Files\OSD Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\win32\osd_console.cpp">
+      <Filter>Source Files\OSD Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\win32\osd_input.cpp">
+      <Filter>Source Files\OSD Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\win32\osd_screen.cpp">
+      <Filter>Source Files\OSD Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\win32\osd_sound.cpp">
+      <Filter>Source Files\OSD Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\win32\winmain.cpp">
+      <Filter>Source Files\OSD Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\vm\datarec.cpp">
+      <Filter>Source Files\VM Common Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\vm\event.cpp">
+      <Filter>Source Files\VM Common Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\vm\hd46505.cpp">
+      <Filter>Source Files\VM Common Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\vm\memory.cpp">
+      <Filter>Source Files\VM Common Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\vm\noise.cpp">
+      <Filter>Source Files\VM Common Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\vm\z80.cpp">
+      <Filter>Source Files\VM Common Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\vm\fx9000p\fx9000p.cpp">
+      <Filter>Source Files\VM Driver Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\vm\fx9000p\io.cpp">
+      <Filter>Source Files\VM Driver Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\common.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\config.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\fifo.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\fileio.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\emu.h">
+      <Filter>Header Files\EMU Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\win32\osd.h">
+      <Filter>Header Files\OSD Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\vm\datarec.h">
+      <Filter>Header Files\VM Common Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\vm\debugger.h">
+      <Filter>Header Files\VM Common Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\vm\device.h">
+      <Filter>Header Files\VM Common Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\vm\event.h">
+      <Filter>Header Files\VM Common Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\vm\hd46505.h">
+      <Filter>Header Files\VM Common Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\vm\memory.h">
+      <Filter>Header Files\VM Common Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\vm\noise.h">
+      <Filter>Header Files\VM Common Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\vm\vm.h">
+      <Filter>Header Files\VM Common Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\vm\vm_template.h">
+      <Filter>Header Files\VM Common Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\vm\z80.h">
+      <Filter>Header Files\VM Common Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\vm\fx9000p\fx9000p.h">
+      <Filter>Header Files\VM Driver Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\vm\fx9000p\io.h">
+      <Filter>Header Files\VM Driver Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\res\resource.h">
+      <Filter>Resource Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <Image Include="..\src\res\fx9000p.ico">
+      <Filter>Resource Files</Filter>
+    </Image>
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\src\res\fx9000p.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file