OSDN Git Service

[VM][General] Apply Upstream 2019-04-30.
authorK.Ohta <whatisthis.sowhat@gmail.com>
Sat, 18 May 2019 07:47:05 +0000 (16:47 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Sat, 18 May 2019 07:47:05 +0000 (16:47 +0900)
40 files changed:
source/history.txt
source/readme.txt
source/revision.txt
source/src/qt/machines/pc9801/MainWindow.cpp
source/src/res/cefucom21.ico [new file with mode: 0644]
source/src/res/cefucom21.rc [new file with mode: 0644]
source/src/res/icon.txt
source/src/res/mz2800.ico
source/src/res/pc8001.rc
source/src/res/pc8001mk2.rc
source/src/res/pc8001mk2sr.rc
source/src/res/pc8801.rc
source/src/res/pc8801ma.rc
source/src/res/pc8801mk2.rc
source/src/vm/cefucom21/cefucom21.cpp [new file with mode: 0644]
source/src/vm/cefucom21/cefucom21.h [new file with mode: 0644]
source/src/vm/cefucom21/mcu.cpp [new file with mode: 0644]
source/src/vm/cefucom21/mcu.h [new file with mode: 0644]
source/src/vm/cefucom21/pcu.cpp [new file with mode: 0644]
source/src/vm/cefucom21/pcu.h [new file with mode: 0644]
source/src/vm/common_vm/CMakeLists.txt
source/src/vm/i8259.cpp
source/src/vm/io.cpp
source/src/vm/mz2500/crtc.cpp
source/src/vm/mz2500/crtc.h
source/src/vm/mz2500/memory.cpp
source/src/vm/pc8801/pc88.cpp
source/src/vm/pc8801/pc8801.h
source/src/vm/pc9801/display.cpp
source/src/vm/pc9801/pc9801.cpp
source/src/vm/pc9801/pc9801.h
source/src/vm/scsi_host.cpp
source/src/vm/vm.h
source/src/vm/z80.h
source/src/vm/z80_base.cpp
source/src/vm/z80pio.cpp
source/src/win32/winmain.cpp
source/vc++2008/cefucom21.vcproj [new file with mode: 0644]
source/vc++2013/cefucom21.vcxproj [new file with mode: 0644]
source/vc++2013/cefucom21.vcxproj.filters [new file with mode: 0644]

index d64b196..b271589 100644 (file)
@@ -1,3 +1,17 @@
+4/30/2019
+
+[VM/DEVICE] add is_primary_cpu() and update_extra_event()
+[VM/EVENT] support to udpate event while cpu is running one opecode
+[VM/I8259] fix reading isr register (thanks Mr.rednow)
+[VM/SCSI_HOST] fix to raise irq at command/message phase
+[VM/Z80] improve to update event in every read/write cycle
+
+[CEFUCOM21] support Hino Electronics CEFUCOM-21 (not work)
+[MZ2500/CRTC] apply crtc patch (thanks Mr.Koucha-Youkan)
+[PC8801MA] improve to enable/disable cmdsing and pcg
+[PC8801MA] improve to enable/disable changing palette for each scan line
+
+
 2/19/2019
 
 [VM/DEVICE] add is_primary_cpu() and update_extra_event()
index c31a7e0..02b5d87 100644 (file)
@@ -1,5 +1,5 @@
 Binary archive of retro pc emulator common source code
-                                                               1/11/2019
+                                                               4/30/2019
 
 --- What's this ?
 
@@ -46,6 +46,8 @@ This archive includes the binaries of the emulators listed below:
                eBabbage-2nd    Babbage-2nd
        HITACHI
                eBASICMasterJr  BASIC Master Jr
+       Hino Electronics
+               eCEFUCOM-21     CEFUCOM-21
        Homebrew
                eZ80TVGAME      Homebrew Z80 TV GAME SYSTEM
        IBM Japan Ltd
index bb0126b..44f24fb 100644 (file)
@@ -1,3 +1,3 @@
-<B><FONT SIZE=-1>Upstream 2019-02-19-2<BR>
+<B><FONT SIZE=-1>Upstream 2019-04-30<BR>
 Qt Port and FM7 series 2019-05-18<BR>
 </FONT></B>
index d632960..41140cf 100644 (file)
@@ -37,25 +37,25 @@ void Object_Menu_Control_98::do_set_memory_wait(bool flag)
 
 void Object_Menu_Control_98::do_set_egc(bool flag)
 {
-       emit sig_set_dipsw(DIPSW_POSITION_EGC, flag);
+       emit sig_set_dipsw(DIPSWITCH_POSITION_EGC, flag);
        emit sig_emu_update_config();
 }
 
 void Object_Menu_Control_98::do_set_gdc_fast(bool flag)
 {
-       emit sig_set_dipsw(DIPSW_POSITION_GDC_FAST, flag);
+       emit sig_set_dipsw(DIPSWITCH_POSITION_GDC_FAST, flag);
        emit sig_emu_update_config();
 }
 
 void Object_Menu_Control_98::do_set_ram_512k(bool flag)
 {
-       emit sig_set_dipsw(DIPSW_POSITION_RAM512K, flag);
+       emit sig_set_dipsw(DIPSWITCH_POSITION_RAM512K, flag);
        emit sig_emu_update_config();
 }
 
 void Object_Menu_Control_98::do_set_init_memsw(bool flag)
 {
-       emit sig_set_dipsw(DIPSW_POSITION_NOINIT_MEMSW, !flag);
+       emit sig_set_dipsw(DIPSWITCH_POSITION_NOINIT_MEMSW, !flag);
        emit sig_emu_update_config();
 }
 
@@ -213,7 +213,7 @@ void META_MainWindow::setupUI_Emu(void)
        actionRAM_512K->setCheckable(true);
        actionRAM_512K->setVisible(true);
        menuMachine->addAction(actionRAM_512K);
-       if((config.dipswitch & ((0x1) << DIPSW_POSITION_RAM512K)) != 0) actionRAM_512K->setChecked(true); // DipSW 1-8
+       if((config.dipswitch & ((0x1) << DIPSWITCH_POSITION_RAM512K)) != 0) actionRAM_512K->setChecked(true); // DipSW 1-8
        connect(actionRAM_512K, SIGNAL(toggled(bool)),
                        actionRAM_512K->pc98_binds, SLOT(do_set_ram_512k(bool)));
        connect(actionRAM_512K->pc98_binds, SIGNAL(sig_set_dipsw(int, bool)),
@@ -225,7 +225,7 @@ void META_MainWindow::setupUI_Emu(void)
        actionINIT_MEMSW->setCheckable(true);
        actionINIT_MEMSW->setVisible(true);
        menuMachine->addAction(actionINIT_MEMSW);
-       if((config.dipswitch & ((0x1) << DIPSW_POSITION_NOINIT_MEMSW)) == 0) actionINIT_MEMSW->setChecked(true); // DipSW 1-8
+       if((config.dipswitch & ((0x1) << DIPSWITCH_POSITION_NOINIT_MEMSW)) == 0) actionINIT_MEMSW->setChecked(true); // DipSW 1-8
        connect(actionINIT_MEMSW, SIGNAL(toggled(bool)),
                        actionINIT_MEMSW->pc98_binds, SLOT(do_set_init_memsw(bool)));
        connect(actionINIT_MEMSW->pc98_binds, SIGNAL(sig_set_dipsw(int, bool)),
@@ -237,7 +237,7 @@ void META_MainWindow::setupUI_Emu(void)
        actionGDC_FAST->setCheckable(true);
        actionGDC_FAST->setVisible(true);
        menuMachine->addAction(actionGDC_FAST);
-       if((config.dipswitch & ((0x1) << DIPSW_POSITION_GDC_FAST)) != 0) actionGDC_FAST->setChecked(true); // DipSW 1-8
+       if((config.dipswitch & ((0x1) << DIPSWITCH_POSITION_GDC_FAST)) != 0) actionGDC_FAST->setChecked(true); // DipSW 1-8
        connect(actionGDC_FAST, SIGNAL(toggled(bool)),
                        actionGDC_FAST->pc98_binds, SLOT(do_set_gdc_fast(bool)));
        connect(actionGDC_FAST->pc98_binds, SIGNAL(sig_set_dipsw(int, bool)),
@@ -250,7 +250,7 @@ void META_MainWindow::setupUI_Emu(void)
        actionEGC->setCheckable(true);
        actionEGC->setVisible(true);
        menuMachine->addAction(actionEGC);
-       if((config.dipswitch & ((0x1) << DIPSW_POSITION_EGC)) != 0) actionEGC->setChecked(true); // DipSW 1-8
+       if((config.dipswitch & ((0x1) << DIPSWITCH_POSITION_EGC)) != 0) actionEGC->setChecked(true); // DipSW 1-8
        connect(actionEGC, SIGNAL(toggled(bool)),
                        actionEGC->pc98_binds, SLOT(do_set_egc(bool)));
        connect(actionEGC->pc98_binds, SIGNAL(sig_set_dipsw(int, bool)),
diff --git a/source/src/res/cefucom21.ico b/source/src/res/cefucom21.ico
new file mode 100644 (file)
index 0000000..8168a32
Binary files /dev/null and b/source/src/res/cefucom21.ico differ
diff --git a/source/src/res/cefucom21.rc b/source/src/res/cefucom21.rc
new file mode 100644 (file)
index 0000000..027e22a
--- /dev/null
@@ -0,0 +1,278 @@
+// 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
+    VK_APPS,        ID_ACCEL_ROMAJI,        VIRTKEY, CONTROL, 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 "Romaji to Kana",              ID_ROMAJI_TO_KANA
+        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 MPU02 CPU",             ID_OPEN_DEBUGGER0
+        MENUITEM "Debug PPU-I CPU",             ID_OPEN_DEBUGGER1
+        MENUITEM "Close Debugger",              ID_CLOSE_DEBUGGER
+        MENUITEM SEPARATOR
+        MENUITEM "Exit",                        ID_EXIT
+    END
+    POPUP "CMT"
+    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 Sound",          ID_VM_SOUND_PLAY_TAPE
+        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
+        POPUP "Input"
+        BEGIN
+            MENUITEM "Joystick #1",             ID_INPUT_JOYSTICK0
+            MENUITEM "Joystick #2",             ID_INPUT_JOYSTICK1
+        END
+        MENUITEM SEPARATOR
+        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     "cefucom21.ico"
+#endif    // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_VOLUME DIALOG DISCARDABLE  0, 0, 250, 120
+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
+    LTEXT           "Sound Device #3",IDC_VOLUME_CAPTION2,6,66,60,8
+    CONTROL         "",IDC_VOLUME_PARAM_L2,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,70,66,175,12
+    CONTROL         "",IDC_VOLUME_PARAM_R2,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,70,81,175,12
+    DEFPUSHBUTTON   "OK",IDOK,70,100,50,14
+    DEFPUSHBUTTON   "Reset",IDC_VOLUME_RESET,130,100,50,14
+END
+
+IDD_JOYSTICK DIALOG DISCARDABLE  0, 0, 175, 105
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Joystick #1"
+FONT 9, "MS PGothic"
+BEGIN
+    LTEXT           "Button #1",IDC_JOYSTICK_CAPTION0,6,6,40,8
+    EDITTEXT        IDC_JOYSTICK_PARAM0,50,4,120,14,ES_MULTILINE
+    LTEXT           "Button #2",IDC_JOYSTICK_CAPTION1,6,21,40,8
+    EDITTEXT        IDC_JOYSTICK_PARAM1,50,19,120,14,ES_MULTILINE
+    LTEXT           "Button #3",IDC_JOYSTICK_CAPTION2,6,36,40,8
+    EDITTEXT        IDC_JOYSTICK_PARAM2,50,34,120,14,ES_MULTILINE
+    LTEXT           "Button #4",IDC_JOYSTICK_CAPTION3,6,51,40,8
+    EDITTEXT        IDC_JOYSTICK_PARAM3,50,49,120,14,ES_MULTILINE
+    LTEXT           "Button #5",IDC_JOYSTICK_CAPTION4,6,66,40,8
+    EDITTEXT        IDC_JOYSTICK_PARAM4,50,64,120,14,ES_MULTILINE
+    DEFPUSHBUTTON   "OK",IDOK,35,85,50,14
+    DEFPUSHBUTTON   "Reset",IDC_JOYSTICK_RESET,90,85,50,14
+END
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
index 7abe7cf..4d630dc 100644 (file)
@@ -32,6 +32,7 @@ MZ1500
 MZ2000
 MZ2200
 MZ2500 (SUPER_MZ)
+MZ2800
 MZ3500
 PASOPIA5
 PASOPIA7
@@ -92,7 +93,6 @@ HC40 (HC20)
 HC80 (HC20)
 MYCOMZ80A (MBLVL2)
 MZ80B (MZ2000)
-MZ2800 (SUPER_MZ)
 MZ5500 (MZ3500)
 MZ6500
 MZ6550 (PC88MC)
index e73c168..a321e4c 100644 (file)
Binary files a/source/src/res/mz2800.ico and b/source/src/res/mz2800.ico differ
index b6bdba1..4ef9edb 100644 (file)
@@ -174,6 +174,7 @@ BEGIN
         POPUP "Display"
         BEGIN
             MENUITEM "Scanline",                    ID_VM_MONITOR_SCANLINE
+            MENUITEM "Real Palettes",               ID_VM_DIPSWITCH5
         END
         POPUP "Printer"
         BEGIN
index 8e25640..aa15266 100644 (file)
@@ -182,6 +182,7 @@ BEGIN
         POPUP "Display"
         BEGIN
             MENUITEM "Scanline",                    ID_VM_MONITOR_SCANLINE
+            MENUITEM "Real Palettes",               ID_VM_DIPSWITCH5
         END
         POPUP "Printer"
         BEGIN
index fdf95ed..34f0da4 100644 (file)
@@ -187,6 +187,7 @@ BEGIN
         POPUP "Display"
         BEGIN
             MENUITEM "Scanline",                    ID_VM_MONITOR_SCANLINE
+            MENUITEM "Real Palettes",               ID_VM_DIPSWITCH5
         END
         POPUP "Printer"
         BEGIN
index 41dd4a0..0ec7e26 100644 (file)
@@ -174,6 +174,7 @@ BEGIN
             MENUITEM SEPARATOR
             MENUITEM "GSX-8800",                    ID_VM_DIPSWITCH2
             MENUITEM "PCG-8100",                    ID_VM_DIPSWITCH3
+            MENUITEM "CMD SING",                    ID_VM_DIPSWITCH4
             MENUITEM SEPARATOR
             MENUITEM "Play FDD Noise",              ID_VM_SOUND_NOISE_FDD
             MENUITEM "Play CMT Noise",              ID_VM_SOUND_NOISE_CMT, GRAYED
@@ -182,6 +183,7 @@ BEGIN
         POPUP "Display"
         BEGIN
             MENUITEM "Scanline",                    ID_VM_MONITOR_SCANLINE
+            MENUITEM "Real Palettes",               ID_VM_DIPSWITCH5
         END
         POPUP "Printer"
         BEGIN
index 7d53f4d..8c81cf0 100644 (file)
@@ -206,6 +206,7 @@ BEGIN
             MENUITEM "HMB-20",                      ID_VM_DIPSWITCH1
             MENUITEM "GSX-8800",                    ID_VM_DIPSWITCH2
             MENUITEM "PCG-8100",                    ID_VM_DIPSWITCH3
+            MENUITEM "CMD SING",                    ID_VM_DIPSWITCH4
             MENUITEM SEPARATOR
             MENUITEM "Play FDD Noise",              ID_VM_SOUND_NOISE_FDD
             MENUITEM "Play CMT Noise",              ID_VM_SOUND_NOISE_CMT, GRAYED
@@ -217,6 +218,7 @@ BEGIN
             MENUITEM "Standard",                    ID_VM_MONITOR_TYPE1
             MENUITEM SEPARATOR
             MENUITEM "Scanline",                    ID_VM_MONITOR_SCANLINE
+            MENUITEM "Real Palettes",               ID_VM_DIPSWITCH5
         END
         POPUP "Printer"
         BEGIN
index 724d49f..7e05a92 100644 (file)
@@ -174,6 +174,7 @@ BEGIN
             MENUITEM SEPARATOR
             MENUITEM "GSX-8800",                    ID_VM_DIPSWITCH2
             MENUITEM "PCG-8100",                    ID_VM_DIPSWITCH3
+            MENUITEM "CMD SING",                    ID_VM_DIPSWITCH4
             MENUITEM SEPARATOR
             MENUITEM "Play FDD Noise",              ID_VM_SOUND_NOISE_FDD
             MENUITEM "Play CMT Noise",              ID_VM_SOUND_NOISE_CMT, GRAYED
@@ -182,6 +183,7 @@ BEGIN
         POPUP "Display"
         BEGIN
             MENUITEM "Scanline",                    ID_VM_MONITOR_SCANLINE
+            MENUITEM "Real Palettes",               ID_VM_DIPSWITCH5
         END
         POPUP "Printer"
         BEGIN
diff --git a/source/src/vm/cefucom21/cefucom21.cpp b/source/src/vm/cefucom21/cefucom21.cpp
new file mode 100644 (file)
index 0000000..f1cfaba
--- /dev/null
@@ -0,0 +1,437 @@
+/*
+       Hino Electronics CEFUCOM-21 Emulator 'eCEFUCOM-21'
+
+       Author : Takeda.Toshiya
+       Date   : 2019.03.28-
+
+       [ virtual machine ]
+*/
+
+#include "cefucom21.h"
+#include "../../emu.h"
+#include "../device.h"
+#include "../event.h"
+
+#include "../ay_3_891x.h"
+#include "../datarec.h"
+#include "../i8255.h"
+#include "../io.h"
+#include "../mc6847.h"
+#include "../noise.h"
+#include "../memory.h"
+#include "../not.h"
+#include "../rp5c01.h"
+#include "../z80.h"
+#include "../z80ctc.h"
+#include "../z80pio.h"
+
+#ifdef USE_DEBUGGER
+#include "../debugger.h"
+#endif
+
+#include "mcu.h"
+#include "pcu.h"
+
+//#define BOOT_BASIC
+
+// ----------------------------------------------------------------------------
+// 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
+       
+       mcu_psg = new AY_3_891X(this, emu);
+#ifdef USE_DEBUGGER
+       mcu_psg->set_context_debugger(new DEBUGGER(this, emu));
+#endif
+       mcu_drec = new DATAREC(this, emu);
+       mcu_drec->set_context_noise_play(new NOISE(this, emu));
+       mcu_drec->set_context_noise_stop(new NOISE(this, emu));
+       mcu_drec->set_context_noise_fast(new NOISE(this, emu));
+       mcu_io = new IO(this, emu);
+       mcu_vdp = new MC6847(this, emu);
+       mcu_mem = new MEMORY(this, emu);
+       mcu_not = new NOT(this, emu);
+       mcu_cpu = new Z80(this, emu);
+       mcu_pio = new Z80PIO(this, emu);
+       mcu = new MCU(this, emu);
+       
+       pcu_pio1 = new I8255(this, emu);
+       pcu_pio2 = new I8255(this, emu);
+       pcu_pio3 = new I8255(this, emu);
+       pcu_io = new IO(this, emu);
+       pcu_mem = new MEMORY(this, emu);
+       pcu_rtc = new RP5C01(this, emu);
+       pcu_cpu = new Z80(this, emu);
+       pcu_ctc1 = new Z80CTC(this, emu);
+       pcu_ctc2 = new Z80CTC(this, emu);
+       pcu_pio = new Z80PIO(this, emu);
+       pcu = new PCU(this, emu);
+       
+       // set contexts
+       event->set_context_cpu(mcu_cpu);
+       event->set_context_cpu(pcu_cpu);
+       event->set_context_sound(mcu_psg);
+       event->set_context_sound(mcu_drec);
+       event->set_context_sound(mcu_drec->get_context_noise_play());
+       event->set_context_sound(mcu_drec->get_context_noise_stop());
+       event->set_context_sound(mcu_drec->get_context_noise_fast());
+       
+       mcu_vdp->load_font_image(create_local_path(_T("FONT.ROM")));
+       mcu_vdp->set_vram_ptr(vram, 0x1800);
+#ifdef BOOT_BASIC
+       mcu_vdp->set_context_vsync(mcu_not, SIG_NOT_INPUT, 1);
+       mcu_not->set_context_out(mcu_cpu, SIG_CPU_IRQ, 1);
+#endif
+       
+       mcu_vdp->set_context_vsync(mcu, SIG_MCU_SYSPORT, 0x10);
+       mcu_drec->set_context_ear(mcu, SIG_MCU_SYSPORT, 0x20);
+       // bit6: printer busy
+       mcu_vdp->set_context_hsync(mcu, SIG_MCU_SYSPORT, 0x80);
+       
+//     mcu_vdp->set_context_vsync(pcu_ctc1, SIG_Z80CTC_TRIG_1, 1);
+//     mcu_vdp->set_context_vsync(pcu_ctc2, SIG_Z80CTC_TRIG_1, 1);
+       mcu_vdp->set_context_vsync(mcu_pio, SIG_Z80PIO_PORT_A, 0x40);
+       
+       mcu_pio->set_context_port_a(pcu_pio, SIG_Z80PIO_PORT_A, 0x38, -3);
+       mcu_pio->set_context_port_b(pcu_pio, SIG_Z80PIO_PORT_B, 0xff,  0);
+       mcu_pio->set_context_ready_a(pcu_pio, SIG_Z80PIO_STROBE_A, 1);
+       mcu_pio->set_context_ready_b(pcu_pio, SIG_Z80PIO_STROBE_B, 1);
+       mcu_pio->set_hand_shake(0, true);
+       mcu_pio->set_hand_shake(1, true);
+       
+       mcu->set_context_drec(mcu_drec);
+       mcu->set_context_psg(mcu_psg);
+       mcu->set_context_vdp(mcu_vdp);
+       
+       pcu_pio->set_context_port_a(mcu_pio, SIG_Z80PIO_PORT_A, 0x38, -3);
+       pcu_pio->set_context_port_b(mcu_pio, SIG_Z80PIO_PORT_B, 0xff,  0);
+       pcu_pio->set_context_ready_a(mcu_pio, SIG_Z80PIO_STROBE_A, 1);
+       pcu_pio->set_context_ready_b(mcu_pio, SIG_Z80PIO_STROBE_B, 1);
+       pcu_pio->set_hand_shake(0, true);
+       pcu_pio->set_hand_shake(1, true);
+       
+       // cpu bus
+       mcu_cpu->set_context_mem(mcu_mem);
+       mcu_cpu->set_context_io(mcu_io);
+       mcu_cpu->set_context_intr(dummy);
+#ifdef USE_DEBUGGER
+       mcu_cpu->set_context_debugger(new DEBUGGER(this, emu));
+#endif
+       
+       pcu_cpu->set_context_mem(pcu_mem);
+       pcu_cpu->set_context_io(pcu_io);
+       pcu_cpu->set_context_intr(dummy);
+#ifdef USE_DEBUGGER
+       pcu_cpu->set_context_debugger(new DEBUGGER(this, emu));
+#endif
+       
+       // z80 family daisy chain
+       DEVICE* parent_dev = NULL;
+       int level = 0;
+       
+       #define Z80_DAISY_CHAIN(cpu, dev) { \
+               if(parent_dev == NULL) { \
+                       cpu->set_context_intr(dev); \
+               } else { \
+                       parent_dev->set_context_child(dev); \
+               } \
+               dev->set_context_intr(cpu, level++); \
+               parent_dev = dev; \
+       }
+       Z80_DAISY_CHAIN(pcu_cpu, pcu_ctc1);
+       Z80_DAISY_CHAIN(pcu_cpu, pcu_ctc2);
+       Z80_DAISY_CHAIN(pcu_cpu, pcu_pio );
+#ifndef BOOT_BASIC
+       parent_dev = NULL;
+       Z80_DAISY_CHAIN(mcu_cpu, mcu_pio );
+#endif
+       
+       // memory bus
+       memset(mcu_rom, 0xff, sizeof(mcu_rom));
+       memset(mcu_ram, 0x00, sizeof(mcu_ram));
+       memset(pcu_rom, 0xff, sizeof(pcu_rom));
+       memset(pcu_ram, 0x00, sizeof(pcu_ram));
+       
+       memset(vram, 0x00, sizeof(vram));
+       memset(cram, 0x00, sizeof(cram));
+       
+       mcu_mem->read_bios(_T("BASIC.ROM"), mcu_rom, sizeof(mcu_rom));
+#ifdef BOOT_BASIC
+       memset(mcu_rom + 0x7800, 0, 0x800);
+#else
+//     memset(mcu_rom, 0, 0x8000);
+#endif
+       mcu_mem->set_memory_r (0x0000, 0x6fff, mcu_rom);
+       mcu_mem->set_memory_rw(0x6000, 0x77ff, vram);
+       mcu_mem->set_memory_r (0x7800, 0x7fff, mcu_rom + 0x7800);
+//     mcu_mem->set_memory_rw(0x8000, 0xffff, mcu_ram);
+       mcu_mem->set_memory_rw(0x8000, 0xefff, mcu_ram);
+       mcu_mem->set_memory_rw(0xf000, 0xffff, cram);
+       
+       pcu_mem->read_bios(_T("MENU.ROM"), pcu_rom, sizeof(pcu_rom));
+#ifdef BOOT_BASIC
+       memset(pcu_rom, 0, 0x8000);
+#endif
+       pcu_mem->set_memory_r (0x0000, 0x7fff, pcu_rom);
+       pcu_mem->set_memory_rw(0x8000, 0xffff, pcu_ram);
+       pcu_mem->set_memory_rw(0xc000, 0xcfff, cram);
+       
+       // i/o bus
+       mcu_io->set_iomap_single_rw(0x40, mcu);
+       mcu_io->set_iomap_range_r  (0x80, 0x89, mcu);
+       mcu_io->set_iomap_alias_w  (0xc0, mcu_psg, 1);  // PSG data
+       mcu_io->set_iomap_alias_w  (0xc1, mcu_psg, 0);  // PSG ch
+//     mcu_io->set_iomap_alias_r  (0xc0, mcu_psg, 1);
+       mcu_io->set_iomap_alias_r  (0xc1, mcu_psg, 1);  // PSG data
+       mcu_io->set_iomap_range_rw (0xe0, 0xe3, mcu_pio);
+       
+       pcu_io->cpu_index = 1;
+       pcu_io->set_iomap_range_rw (0x00, 0x03, pcu_ctc1);
+       pcu_io->set_iomap_range_rw (0x08, 0x0b, pcu_ctc2);
+       pcu_io->set_iomap_alias_rw (0x10, pcu_pio, 0);
+       pcu_io->set_iomap_alias_rw (0x11, pcu_pio, 2);
+       pcu_io->set_iomap_alias_rw (0x12, pcu_pio, 1);
+       pcu_io->set_iomap_alias_rw (0x13, pcu_pio, 3);
+       pcu_io->set_iomap_range_rw (0x20, 0x2f, pcu_rtc);
+       pcu_io->set_iomap_range_rw (0x38, 0x39, pcu);
+       pcu_io->set_iomap_range_rw (0x60, 0x63, pcu_pio1);
+       pcu_io->set_iomap_range_rw (0x64, 0x67, pcu_pio2);
+       pcu_io->set_iomap_range_rw (0x68, 0x6b, pcu_pio3);
+       
+       // initialize all devices
+       for(DEVICE* device = first_device; device; device = device->next_device) {
+               device->initialize();
+       }
+}
+
+VM::~VM()
+{
+       // 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();
+       }
+       mcu_vdp->write_signal(SIG_MC6847_GM,  6, 7);
+       mcu_vdp->write_signal(SIG_MC6847_CSS, 0, 0);
+       mcu_vdp->write_signal(SIG_MC6847_AG,  0, 0);
+
+//     pcu_cpu->write_signal(SIG_CPU_BUSREQ, 1, 1);
+}
+
+void VM::run()
+{
+       event->drive();
+}
+
+// ----------------------------------------------------------------------------
+// debugger
+// ----------------------------------------------------------------------------
+
+#ifdef USE_DEBUGGER
+DEVICE *VM::get_cpu(int index)
+{
+       if(index == 0) {
+               return mcu_cpu;
+       } else if(index == 1) {
+               return pcu_cpu;
+       }
+       return NULL;
+}
+#endif
+
+// ----------------------------------------------------------------------------
+// draw screen
+// ----------------------------------------------------------------------------
+
+void VM::draw_screen()
+{
+       mcu_vdp->draw_screen();
+}
+
+// ----------------------------------------------------------------------------
+// soud manager
+// ----------------------------------------------------------------------------
+
+void VM::initialize_sound(int rate, int samples)
+{
+       // init sound manager
+       event->initialize_sound(rate, samples);
+       
+       // init sound gen
+       mcu_psg->initialize_sound(rate, 1996750, samples, 0, 0);
+}
+
+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) {
+               mcu_psg->set_volume(1, decibel_l, decibel_r);
+       } else if(ch == 1) {
+               mcu_drec->set_volume(0, decibel_l, decibel_r);
+       } else if(ch == 2) {
+               mcu_drec->get_context_noise_play()->set_volume(0, decibel_l, decibel_r);
+               mcu_drec->get_context_noise_stop()->set_volume(0, decibel_l, decibel_r);
+               mcu_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 = mcu_drec->get_remote();
+       
+       if(mcu_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 = mcu_drec->get_remote();
+       
+       if(mcu_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();
+       mcu_drec->close_tape();
+       emu->unlock_vm();
+       mcu_drec->set_remote(false);
+}
+
+bool VM::is_tape_inserted(int drv)
+{
+       return mcu_drec->is_tape_inserted();
+}
+
+bool VM::is_tape_playing(int drv)
+{
+       return mcu_drec->is_tape_playing();
+}
+
+bool VM::is_tape_recording(int drv)
+{
+       return mcu_drec->is_tape_recording();
+}
+
+int VM::get_tape_position(int drv)
+{
+       return mcu_drec->get_tape_position();
+}
+
+const _TCHAR* VM::get_tape_message(int drv)
+{
+       return mcu_drec->get_message();
+}
+
+void VM::push_play(int drv)
+{
+       mcu_drec->set_remote(false);
+       mcu_drec->set_ff_rew(0);
+       mcu_drec->set_remote(true);
+}
+
+void VM::push_stop(int drv)
+{
+       mcu_drec->set_remote(false);
+}
+
+void VM::push_fast_forward(int drv)
+{
+       mcu_drec->set_remote(false);
+       mcu_drec->set_ff_rew(1);
+       mcu_drec->set_remote(true);
+}
+
+void VM::push_fast_rewind(int drv)
+{
+       mcu_drec->set_remote(false);
+       mcu_drec->set_ff_rew(-1);
+       mcu_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  5
+
+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 char *name = typeid(*device).name() + 6; // skip "class "
+               int len = strlen(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;
+               }
+       }
+       return true;
+}
+
diff --git a/source/src/vm/cefucom21/cefucom21.h b/source/src/vm/cefucom21/cefucom21.h
new file mode 100644 (file)
index 0000000..05f29d9
--- /dev/null
@@ -0,0 +1,189 @@
+/*
+       Hino Electronics CEFUCOM-21 Emulator 'eCEFUCOM-21'
+
+       Author : Takeda.Toshiya
+       Date   : 2019.03.28-
+
+       [ virtual machine ]
+*/
+
+#ifndef _CEFUCOM21_H_
+#define _CEFUCOM21_H_
+
+#define DEVICE_NAME            "Hino Electronics CEFUCOM-21"
+#define CONFIG_NAME            "cefucom21"
+
+// device informations for virtual machine
+#define FRAMES_PER_SEC         60
+#define LINES_PER_FRAME                262
+#define CPU_CLOCKS             4000000
+#define SCREEN_WIDTH           256
+#define SCREEN_HEIGHT          192
+
+#define MC6847_ATTR_OFS                0x800
+#define MC6847_ATTR_INV                0x01
+#define MC6847_ATTR_AS         0x02
+#define MC6847_ATTR_CSS                0x04
+#define HAS_AY_3_8910
+#define MEMORY_BANK_SIZE       0x400
+#define IO_ADDR_MAX            0x100
+
+// device informations for win32
+#define USE_TAPE               1
+#define USE_AUTO_KEY           6
+#define USE_AUTO_KEY_RELEASE   10
+#define USE_AUTO_KEY_CAPS
+#define USE_SOUND_VOLUME       3
+#define USE_JOYSTICK
+#define USE_DEBUGGER
+#define USE_STATE
+
+#include "../../common.h"
+#include "../../fileio.h"
+#include "../vm_template.h"
+
+static const uint8_t key_map[10][8] = {
+       {0x31, 0x57, 0x53, 0x58, 0x26, 0x2e, 0xba, 0x00},
+       {0x1b, 0x51, 0x41, 0x5a, 0x28, 0x0d, 0xbb, 0xbf},
+       {0x33, 0x52, 0x46, 0x56, 0x25, 0xde, 0xdb, 0x00},
+       {0x32, 0x45, 0x44, 0x43, 0x27, 0xdc, 0xdd, 0x20},
+       {0x35, 0x59, 0x48, 0x4e, 0x72, 0x30, 0x50, 0x00},
+       {0x34, 0x54, 0x47, 0x42, 0x73, 0xbd, 0xc0, 0x00},
+       {0x36, 0x55, 0x4a, 0x4d, 0x71, 0x39, 0x4f, 0x00},
+       {0x37, 0x49, 0x4b, 0xbc, 0x70, 0x38, 0x4c, 0xbe},
+       {0x00, 0x12, 0x10, 0x11, 0x00, 0xf0, 0x00, 0x00},
+       {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
+};
+
+#ifdef USE_SOUND_VOLUME
+static const _TCHAR *sound_device_caption[] = {
+       _T("PSG"), _T("CMT (Signal)"), _T("Noise (CMT)"),
+};
+#endif
+
+class EMU;
+class DEVICE;
+class EVENT;
+
+class AY_3_891X;
+class DATAREC;
+class I8255;
+class IO;
+class MC6847;
+class MEMORY;
+class NOT;
+class RP5C01;
+class Z80;
+class Z80CTC;
+class Z80PIO;
+
+class MCU;
+class PCU;
+
+class VM : public VM_TEMPLATE
+{
+protected:
+//     EMU* emu;
+       
+       // devices
+       EVENT* event;
+       
+       AY_3_891X *mcu_psg;
+       DATAREC *mcu_drec;
+       IO *mcu_io;
+       MC6847 *mcu_vdp;
+       MEMORY *mcu_mem;
+       NOT *mcu_not;
+       Z80 *mcu_cpu;
+       Z80PIO *mcu_pio;
+       
+       MCU *mcu;
+       
+       I8255 *pcu_pio1;
+       I8255 *pcu_pio2;
+       I8255 *pcu_pio3;
+       IO *pcu_io;
+       MEMORY *pcu_mem;
+       RP5C01 *pcu_rtc;
+       Z80 *pcu_cpu;
+       Z80CTC *pcu_ctc1;
+       Z80CTC *pcu_ctc2;
+       Z80PIO *pcu_pio;
+       
+       PCU *pcu;
+       
+       uint8_t mcu_rom[0x8000];
+       uint8_t mcu_ram[0x8000];
+       uint8_t pcu_rom[0x8000];
+       uint8_t pcu_ram[0x8000];
+       uint8_t vram[0x1800];
+       uint8_t cram[0x1000];
+       
+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
+       
+       // 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/cefucom21/mcu.cpp b/source/src/vm/cefucom21/mcu.cpp
new file mode 100644 (file)
index 0000000..1eb80ca
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+       Hino Electronics CEFUCOM-21 Emulator 'eCEFUCOM-21'
+
+       Author : Takeda.Toshiya
+       Date   : 2019.03.28-
+
+       [ MCU02 (main control unit ???) ]
+*/
+
+#include "mcu.h"
+#include "../ay_3_891x.h"
+#include "../datarec.h"
+#include "../mc6847.h"
+
+void MCU::initialize()
+{
+       system_port = 0;
+       
+       // register event to update the key status
+       register_frame_event(this);
+}
+
+void MCU::reset()
+{
+       memset(key_status, 0, sizeof(key_status));
+       d_vdp->write_signal(SIG_MC6847_INTEXT, 1, 1);
+}
+
+void MCU::write_io8(uint32_t addr, uint32_t data)
+{
+       switch(addr & 0xff) {
+       case 0x40:
+               d_drec->write_signal(SIG_DATAREC_MIC, data, 0x01);
+               d_drec->write_signal(SIG_DATAREC_REMOTE, ~data, 0x02);
+               // bit2 : kana lock led ???
+               // bit3 : printer strobe
+               d_vdp->write_signal(SIG_MC6847_GM, (data & 0x20) ? 7 : 6, 7);
+               d_vdp->write_signal(SIG_MC6847_CSS, data, 0x40);
+               d_vdp->write_signal(SIG_MC6847_AG, data, 0x80);
+               break;
+       }
+}
+
+uint32_t MCU::read_io8(uint32_t addr)
+{
+       switch(addr & 0xff) {
+       case 0x40:
+               return system_port;
+       case 0x80:
+       case 0x81:
+       case 0x82:
+       case 0x83:
+       case 0x84:
+       case 0x85:
+       case 0x86:
+       case 0x87:
+       case 0x88:
+       case 0x89:
+               return ~key_status[addr & 0x0f];
+       }
+       return 0xff;
+}
+
+void MCU::event_frame()
+{
+       const uint8_t  *key_stat = emu->get_key_buffer();
+       const uint32_t *joy_stat = emu->get_joy_buffer();
+       
+       for(int i = 0; i < 10; i++) {
+               uint8_t val = 0;
+               for(int j = 0; j < 8; j++) {
+                       val |= key_stat[key_map[i][j]] ? (1 << j) : 0;
+               }
+               key_status[i] = val;
+       }
+       d_psg->write_signal(SIG_AY_3_891X_PORT_A, ~(joy_stat[0] & 0x1f), 0xff);
+       d_psg->write_signal(SIG_AY_3_891X_PORT_B, ~(joy_stat[1] & 0x1f), 0xff);
+}
+
+void MCU::write_signal(int id, uint32_t data, uint32_t mask)
+{
+       if(id == SIG_MCU_SYSPORT) {
+               system_port = (system_port & ~mask) | (system_port & mask);
+       }
+}
+
+#define STATE_VERSION  1
+
+bool MCU::process_state(FILEIO* state_fio, bool loading)
+{
+       if(!state_fio->StateCheckUint32(STATE_VERSION)) {
+               return false;
+       }
+       if(!state_fio->StateCheckInt32(this_device_id)) {
+               return false;
+       }
+       state_fio->StateArray(key_status, sizeof(key_status), 1);
+       state_fio->StateValue(system_port);
+       return true;
+}
+
diff --git a/source/src/vm/cefucom21/mcu.h b/source/src/vm/cefucom21/mcu.h
new file mode 100644 (file)
index 0000000..6339f44
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+       Hino Electronics CEFUCOM-21 Emulator 'eCEFUCOM-21'
+
+       Author : Takeda.Toshiya
+       Date   : 2019.03.28-
+
+       [ MCU02 (main control unit ???) ]
+*/
+
+#ifndef _MCU_H_
+#define _MCU_H_
+
+#include "../vm.h"
+#include "../../emu.h"
+#include "../device.h"
+
+#define SIG_MCU_SYSPORT        0
+
+class MCU : public DEVICE
+{
+private:
+       DEVICE *d_drec, *d_psg, *d_vdp;
+       
+       uint8_t key_status[16];
+       uint8_t system_port;
+       
+public:
+       MCU(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       {
+               set_device_name(_T("MCU02"));
+       }
+       ~MCU() {}
+       
+       // common functions
+       void initialize();
+       void reset();
+       void write_io8(uint32_t addr, uint32_t data);
+       uint32_t read_io8(uint32_t addr);
+       void event_frame();
+       void write_signal(int id, uint32_t data, uint32_t mask);
+       bool process_state(FILEIO* state_fio, bool loading);
+       
+       // unique functions
+       void set_context_drec(DEVICE* device)
+       {
+               d_drec = device;
+       }
+       void set_context_psg(DEVICE* device)
+       {
+               d_psg = device;
+       }
+       void set_context_vdp(DEVICE* device)
+       {
+               d_vdp = device;
+       }
+};
+
+#endif
+
diff --git a/source/src/vm/cefucom21/pcu.cpp b/source/src/vm/cefucom21/pcu.cpp
new file mode 100644 (file)
index 0000000..dd13eb4
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+       Hino Electronics CEFUCOM-21 Emulator 'eCEFUCOM-21'
+
+       Author : Takeda.Toshiya
+       Date   : 2019.03.28-
+
+       [ PCU-I (peripheral control unit ???) ]
+*/
+
+#include "pcu.h"
+#include "../z80pio.h"
+
+void PCU::initialize()
+{
+}
+
+void PCU::reset()
+{
+}
+
+void PCU::write_io8(uint32_t addr, uint32_t data)
+{
+}
+
+uint32_t PCU::read_io8(uint32_t addr)
+{
+       return 0xff;
+}
+
+void PCU::event_frame()
+{
+}
+
+void PCU::write_signal(int id, uint32_t data, uint32_t mask)
+{
+}
+
+#define STATE_VERSION  1
+
+bool PCU::process_state(FILEIO* state_fio, bool loading)
+{
+       if(!state_fio->StateCheckUint32(STATE_VERSION)) {
+               return false;
+       }
+       if(!state_fio->StateCheckInt32(this_device_id)) {
+               return false;
+       }
+       return true;
+}
+
diff --git a/source/src/vm/cefucom21/pcu.h b/source/src/vm/cefucom21/pcu.h
new file mode 100644 (file)
index 0000000..24b1d6e
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+       Hino Electronics CEFUCOM-21 Emulator 'eCEFUCOM-21'
+
+       Author : Takeda.Toshiya
+       Date   : 2019.03.28-
+
+       [ PCU-I (peripheral control unit ???) ]
+*/
+
+#ifndef _PCU_H_
+#define _PCU_H_
+
+#include "../vm.h"
+#include "../../emu.h"
+#include "../device.h"
+
+class PCU : public DEVICE
+{
+private:
+       
+public:
+       PCU(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       {
+               set_device_name(_T("PCU-I"));
+       }
+       ~PCU() {}
+       
+       // common functions
+       void initialize();
+       void reset();
+       void write_io8(uint32_t addr, uint32_t data);
+       uint32_t read_io8(uint32_t addr);
+       void event_frame();
+       void write_signal(int id, uint32_t data, uint32_t mask);
+       bool process_state(FILEIO* state_fio, bool loading);
+};
+
+#endif
+
index 496b9b5..96fe8e6 100644 (file)
@@ -1,6 +1,6 @@
 message("* vm/common_vm")
 
-SET(THIS_LIB_VERSION 2.14.1)
+SET(THIS_LIB_VERSION 2.15.0)
 
 #include(cotire)
 set(s_vm_common_vm_srcs
index 98032dc..6ce880a 100644 (file)
@@ -162,7 +162,7 @@ uint32_t I8259::read_io8(uint32_t addr)
                } else if((pic[c].ocw3 & 3) == 2) {
                        return pic[c].irr;
                } else if((pic[c].ocw3 & 3) == 3) {
-                       return pic[c].isr & ~pic[c].imr;
+                       return pic[c].isr;// & ~pic[c].imr;
                }
                return 0;
        }
index 26c1b6c..2ede417 100644 (file)
@@ -137,6 +137,9 @@ void IO::write_port8(uint32_t addr, uint32_t data, bool is_dma)
        if(!wr_table[laddr].dev->this_device_id && !wr_table[laddr].is_flipflop) {
                this->out_debug_log(_T("UNKNOWN:\t"));
        }
+       if(cpu_index != 0) {
+               this->out_debug_log(_T("CPU=%d\t"), cpu_index);
+       }
        this->out_debug_log(_T("%06x\tOUT8\t%04x,%02x\n"), get_cpu_pc(cpu_index), addr, data & 0xff);
 #endif
        if(wr_table[laddr].is_flipflop) {
@@ -157,6 +160,9 @@ uint32_t IO::read_port8(uint32_t addr, bool is_dma)
        if(!rd_table[laddr].dev->this_device_id && !rd_table[laddr].value_registered) {
                this->out_debug_log(_T("UNKNOWN:\t"));
        }
+       if(cpu_index != 0) {
+               this->out_debug_log(_T("CPU=%d\t"), cpu_index);
+       }
        this->out_debug_log(_T("%06x\tIN8\t%04x = %02x\n"), get_cpu_pc(cpu_index), addr, val & 0xff);
 #endif
        return val & 0xff;
@@ -170,6 +176,9 @@ void IO::write_port16(uint32_t addr, uint32_t data, bool is_dma)
        if(!wr_table[laddr].dev->this_device_id && !wr_table[laddr].is_flipflop) {
                this->out_debug_log(_T("UNKNOWN:\t"));
        }
+       if(cpu_index != 0) {
+               this->out_debug_log(_T("CPU=%d\t"), cpu_index);
+       }
        this->out_debug_log(_T("%06x\tOUT16\t%04x,%04x\n"), get_cpu_pc(cpu_index), addr, data & 0xffff);
 #endif
        if(wr_table[laddr].is_flipflop) {
@@ -190,6 +199,9 @@ uint32_t IO::read_port16(uint32_t addr, bool is_dma)
        if(!rd_table[laddr].dev->this_device_id && !rd_table[laddr].value_registered) {
                this->out_debug_log(_T("UNKNOWN:\t"));
        }
+       if(cpu_index != 0) {
+               this->out_debug_log(_T("CPU=%d\t"), cpu_index);
+       }
        this->out_debug_log(_T("%06x\tIN16\t%04x = %04x\n"), get_cpu_pc(cpu_index), addr, val & 0xffff);
 #endif
        return val & 0xffff;
@@ -203,6 +215,9 @@ void IO::write_port32(uint32_t addr, uint32_t data, bool is_dma)
        if(!wr_table[laddr].dev->this_device_id && !wr_table[laddr].is_flipflop) {
                this->out_debug_log(_T("UNKNOWN:\t"));
        }
+       if(cpu_index != 0) {
+               this->out_debug_log(_T("CPU=%d\t"), cpu_index);
+       }
        this->out_debug_log(_T("%06x\tOUT32\t%04x,%08x\n"), get_cpu_pc(cpu_index), addr, data);
 #endif
        if(wr_table[laddr].is_flipflop) {
@@ -223,6 +238,9 @@ uint32_t IO::read_port32(uint32_t addr, bool is_dma)
        if(!rd_table[laddr].dev->this_device_id && !rd_table[laddr].value_registered) {
                this->out_debug_log(_T("UNKNOWN:\t"));
        }
+       if(cpu_index != 0) {
+               this->out_debug_log(_T("CPU=%d\t"), cpu_index);
+       }
        this->out_debug_log(_T("%06x\tIN32\t%04x = %08x\n"), get_cpu_pc(cpu_index), laddr | haddr, val);
 #endif
        return val;
index c6198c4..6047ed3 100644 (file)
@@ -18,6 +18,7 @@
 #define SCRN_640x400   1
 #define SCRN_640x200   2
 #define SCRN_320x200   3
+#define SCRN_320x400   4
 
 namespace MZ2500 {
 
@@ -83,17 +84,19 @@ void CRTC::initialize()
        
        // set 256 palette
        for(int i = 0; i < 256; i++) {
-               palette256[i] = RGB_COLOR(((i & 0x20) ? 128 : 0) | ((i & 2) ? 64 : 0) | ((i & 0x80) ? 32 : 0),
-                                         ((i & 0x40) ? 128 : 0) | ((i & 4) ? 64 : 0) | ((i & 0x80) ? 32 : 0),
-                                         ((i & 0x10) ? 128 : 0) | ((i & 1) ? 64 : 0) | ((i & 0x80) ? 32 : 0));
+               uint16_t b = ((i & 0x20) ? 128 : 0) | ((i & 2) ? 64 : 0) | ((i & 0x80) ? 32 : 0);
+               uint16_t r = ((i & 0x40) ? 128 : 0) | ((i & 4) ? 64 : 0) | ((i & 0x80) ? 32 : 0);
+               uint16_t g = ((i & 0x10) ? 128 : 0) | ((i & 1) ? 64 : 0) | ((i & 0x80) ? 32 : 0);
+               b |= (b >> 3) | (b >> 6);
+               r |= (r >> 3) | (r >> 6);
+               g |= (g >> 3) | (g >> 6);
+               palette256[i] = RGB_COLOR(b,r,g);
        }
        for(int i = 0; i < 8; i++) {
                palette256[i + 256] = RGB_COLOR(((i & 2) ? 255 : 0), ((i & 4) ? 255 : 0), ((i & 1) ? 255 : 0));
        }
        for(int i = 0; i < 64; i++) {
-               palette256[i + 256 + 16] = RGB_COLOR(((i & 2) ? 64 : 0) | ((i & 0x10) ? 128 : 0), 
-                                                    ((i & 4) ? 64 : 0) | ((i & 0x20) ? 128 : 0), 
-                                                    ((i & 1) ? 64 : 0) | ((i & 0x08) ? 128 : 0));
+               palette256[i + 256 + 16] = palette256[((i & 0x38) << 1) | (i & 0x07)];
        }
        for(int i = 0; i < 256; i++) {
                for(int j = 1; j < 16 + 64; j++) {
@@ -395,6 +398,10 @@ void CRTC::write_io8(uint32_t addr, uint32_t data)
                                map_init |= (scrn_size != SCRN_640x400);
                                scrn_size = SCRN_640x400;
                                break;
+                       case 0x19: case 0x99:
+                               map_init |= (scrn_size != SCRN_320x400);
+                               scrn_size = SCRN_320x400;
+                               break;
                        }
                        break;
                // scroll
@@ -439,6 +446,9 @@ void CRTC::write_io8(uint32_t addr, uint32_t data)
                                                uint16_t b = ((i & 0x10) ? 128 : 0) | ((i & 1) ? 64 : 0) | ((b0 == 0 && (i & 0x80)) || (b0 == 1 && (i & 8)) || (b0 == 2) ? 32 : 0);
                                                uint16_t r = ((i & 0x20) ? 128 : 0) | ((i & 2) ? 64 : 0) | ((r0 == 0 && (i & 0x80)) || (r0 == 1 && (i & 8)) || (r0 == 2) ? 32 : 0);
                                                uint16_t g = ((i & 0x40) ? 128 : 0) | ((i & 4) ? 64 : 0) | ((g0 == 0 && (i & 0x80)) || (g0 == 1 && (i & 8)) || (g0 == 2) ? 32 : 0);
+                                               b |= (b >> 3) | (b >> 6);
+                                               r |= (r >> 3) | (r >> 6);
+                                               g |= (g >> 3) | (g >> 6);
                                                palette256[i] = RGB_COLOR(r, g, b);
                                        }
                                        update256 = true;
@@ -583,16 +593,12 @@ void CRTC::event_vline(int v, int clock)
                clear_flag = 0;
        }
        // register hsync events
-       if(!GDEHS) {
-               set_hsync(0);
-       } else if(GDEHS < chars_per_line) {
-               register_event_by_clock(this, GDEHS, GDEHSC, false, NULL);
-       }
-       if(!GDEHE) {
-               set_hsync(0);
-       } else if(GDEHE < chars_per_line) {
-               register_event_by_clock(this, GDEHE, GDEHEC, false, NULL);
+       int clocks_per_line = (int)(CPU_CLOCKS / frames_per_sec / lines_per_frame);
+       if(GDEHSC < GDEHEC && (GDEHEC + 10) < clocks_per_line) {
+               register_event_by_clock(this, GDEHS, GDEHSC + 10, false, NULL);
+               register_event_by_clock(this, GDEHE, GDEHEC + 10, false, NULL);
        }
+       set_hsync(0);
 }
 
 void CRTC::set_hsync(int h)
@@ -705,8 +711,8 @@ void CRTC::draw_screen()
        draw_text();
        
        // view port
-       int vs = (GDEVS <= GDEVE) ? GDEVS * (scrn_size == SCRN_640x400 ? 1 : 2) : 0;
-       int ve = (GDEVS <= GDEVE) ? GDEVE * (scrn_size == SCRN_640x400 ? 1 : 2) : 400;
+       int vs = (GDEVS <= GDEVE) ? GDEVS * ((scrn_size == SCRN_640x400 || scrn_size == SCRN_320x400) ? 1 : 2) : 0;
+       int ve = (GDEVS <= GDEVE) ? GDEVE * ((scrn_size == SCRN_640x400 || scrn_size == SCRN_320x400) ? 1 : 2) : 400;
        int hs = (GDEHS <= GDEHE && GDEHS < 80) ? (GDEHS << 3) : 0;
        int he = (GDEHS <= GDEHE && GDEHE < 80) ? (GDEHE << 3) : 640;
 
@@ -721,7 +727,8 @@ void CRTC::draw_screen()
                        scrntype_t *dest = emu->get_screen_buffer(y);
                        memset(dest, 0, sizeof(scrntype_t) * 640);
                }
-       } else if(cgreg[0x0e] == 0x1d || cgreg[0x0e] == 0x9d) {
+       } else if(cgreg[0x0e] == 0x1d || cgreg[0x0e] == 0x9d ||
+                 cgreg[0x0e] == 0x19 || cgreg[0x0e] == 0x99) {
                // 256 colors
                for(int y = 0; y < vs && y < 400; y++) {
                        scrntype_t *dest = emu->get_screen_buffer(y);
@@ -917,6 +924,19 @@ void CRTC::draw_80column_screen()
                        dest += 8;
                }
        }
+       
+       //
+       // if in 256 color mode but 40-column function is not set as 64 color mode,
+       // convert its color as the bottom plane is forced to 0.
+       //
+       if ((textreg[0] & 0x01) == 0x00) {
+               for(int y = line; y < 400; y++) {
+                       uint8_t* tdest = &text[y * 640];
+                       for(int x = 0; x < 640; x++) {
+                               if (!(tdest[x] & 8)) tdest[x] = ((tdest[x] & 7) << 3) + 16;
+                       }
+               }
+       }
 }
 
 void CRTC::draw_40column_screen()
@@ -1004,6 +1024,19 @@ void CRTC::draw_40column_screen()
                }
                break;
        }
+       
+       //
+       // if in 256 color mode but 40-column function is not set as 64 color mode,
+       // convert its color as the bottom plane is forced to 0.
+       //
+       if ((textreg[0] & 0x0c) != 0x00 && (textreg[0] & 0x01) == 0x00) {
+               for(int y = line; y < 400; y++) {
+                       uint8_t* tdest = &text[y * 640];
+                       for(int x = 0; x < 640; x++) {
+                               if (!(tdest[x] & 8)) tdest[x] = ((tdest[x] & 7) << 3) + 16;
+                       }
+               }
+       }
 }
 
 void CRTC::draw_80column_font(uint16_t src, int dest, int y)
@@ -1455,7 +1488,8 @@ void CRTC::draw_cg()
                draw_640x200x16screen(0);
                break;
        case 0x1d:
-               draw_320x200x256screen(0);
+       case 0x9d:
+               draw_320x200x256screen(200);
                break;
        case 0x93:
                draw_640x400x16screen();
@@ -1471,13 +1505,14 @@ void CRTC::draw_cg()
        case 0x97:
                draw_640x200x16screen(1);
                break;
-       case 0x9d:
-               draw_320x200x256screen(1);
+       case 0x19:
+       case 0x99:
+               draw_320x200x256screen(400);
                break;
        }
        
        // fill scan line
-       if(!scan_line && !(cgreg[0x0e] == 0x03 || cgreg[0x0e] == 0x93)) {
+       if(!scan_line && (cgreg[0x0e] & 0x04) != 0) {
                for(int y = 0; y < 400; y += 2) {
                        memcpy(cg + (y + 1) * 640, cg + y * 640, 640);
                }
@@ -1488,13 +1523,17 @@ void CRTC::draw_320x200x16screen(uint8_t pl)
 {
        uint8_t B, R, G, I, col;
        uint32_t dest = 0;
+       uint16_t ex;
+       uint16_t subplane;
        
        if(map_init) {
                create_addr_map(40, 200);
        }
+       ex = (cgreg[0x0e] & 0x80) << 7;
+       subplane = (pl & 1) ? 0x2000 : 0x0000;
        for(int y = 0; y < 200; y++) {
                for(int x = 0; x < 40; x++) {
-                       uint16_t src = (map_addr[y][x] + (0x2000 * pl)) & 0x7fff;
+                       uint16_t src = (map_addr[y][x] ^ subplane) | ex;
                        uint32_t dest2 = dest + map_hdsc[y][x];
                        dest += 16;
                        
@@ -1523,13 +1562,14 @@ void CRTC::draw_320x200x16screen(uint8_t pl)
        }
 }
 
-void CRTC::draw_320x200x256screen(uint8_t pl)
+void CRTC::draw_320x200x256screen(int ymax)
 {
        uint8_t B0, B1, R0, R1, G0, G1, I0, I1;
-       uint32_t dest = 0;
+       uint32_t dest = 0, to_nextline;
+       uint16_t ex;
        
        if(map_init) {
-               create_addr_map(40, 200);
+               create_addr_map(40, ymax);
        }
        if(cg_mask256_init) {
                cg_mask256 = cgreg[0x18];
@@ -1544,10 +1584,12 @@ void CRTC::draw_320x200x256screen(uint8_t pl)
                }
                cg_mask256_init = false;
        }
-       for(int y = 0; y < 200; y++) {
+       to_nextline = (ymax == 200) ? 640 : 0;
+       ex = (cgreg[0x0e] & 0x80) << 7;
+       for(int y = 0; y < ymax; y++) {
                for(int x = 0; x < 40; x++) {
-                       uint16_t src1 = (map_addr[y][x] + (0x4000 * pl)) & 0x7fff;
-                       uint16_t src2 = (src1 + 0x2000) & 0x7fff;
+                       uint16_t src1 = (map_addr[y][x]         ) | ex;
+                       uint16_t src2 = (map_addr[y][x] ^ 0x2000) | ex;
                        uint32_t dest2 = dest + map_hdsc[y][x];
                        dest += 16;
                        
@@ -1569,7 +1611,7 @@ void CRTC::draw_320x200x256screen(uint8_t pl)
                        cg[dest2 + 12] = cg[dest2 + 13] = cg_matrix0[B0][R0][6] | cg_matrix1[G0][I0][6] | cg_matrix2[B1][R1][6] | cg_matrix3[G1][I1][6];
                        cg[dest2 + 14] = cg[dest2 + 15] = cg_matrix0[B0][R0][7] | cg_matrix1[G0][I0][7] | cg_matrix2[B1][R1][7] | cg_matrix3[G1][I1][7];
                }
-               dest += 640;
+               dest += to_nextline;
        }
 }
 
@@ -1577,13 +1619,17 @@ void CRTC::draw_640x200x16screen(uint8_t pl)
 {
        uint8_t B, R, G, I;
        uint32_t dest = 0;
+       uint16_t ex;
+       uint16_t subplane;
        
        if(map_init) {
                create_addr_map(80, 200);
        }
+       ex = (cgreg[0x0e] & 0x80) << 7;
+       subplane = (pl & 1) ? 0x2000 : 0x0000;
        for(int y = 0; y < 200; y++) {
                for(int x = 0; x < 80; x++) {
-                       uint16_t src = (map_addr[y][x] + (0x4000 * pl)) & 0x7fff;
+                       uint16_t src = (map_addr[y][x] ^ subplane) | ex;
                        uint32_t dest2 = dest + map_hdsc[y][x];
                        dest += 8;
                        
@@ -1686,7 +1732,8 @@ void CRTC::create_addr_map(int xmax, int ymax)
        for(int y = SLN1; y < ymax; y++) {
                for(int x = 0; x < xmax; x++) {
                        map_hdsc[y][x] = 0;
-                       map_addr[y][x] = (SAD2++) & 0x7fff;
+                       map_addr[y][x] = SAD2;
+                       SAD2 = (SAD2 == SAD1) ? 0 : ((SAD2 + 1) & 0x7fff);
                }
        }
        map_init = false;
index 6d75801..62fd0fa 100644 (file)
@@ -84,7 +84,7 @@ private:
        // draw cg
        void draw_cg();
        void draw_320x200x16screen(uint8_t pl);
-       void draw_320x200x256screen(uint8_t pl);
+       void draw_320x200x256screen(int ymax);
        void draw_640x200x16screen(uint8_t pl);
        void draw_640x400x4screen();
        void draw_640x400x16screen();
index b172ba7..94fa2ad 100644 (file)
@@ -240,6 +240,8 @@ void MEMORY::write_io8(uint32_t addr, uint32_t data)
                }
                break;
        }
+*/
+       *wait = page_wait[b];
 }
 
 uint32_t MEMORY::read_io8(uint32_t addr)
index 8eed6e2..6797e4c 100644 (file)
@@ -528,7 +528,7 @@ void PC88::reset()
        
        // memory wait
 #if defined(_PC8001SR) || defined(PC8801SR_VARIANT)
-       mem_wait_on = ((config.dipswitch & 1) != 0);
+       mem_wait_on = ((config.dipswitch & DIPSWITCH_MEMWAIT) != 0);
 #else
        mem_wait_on = true;
 #endif
@@ -1045,8 +1045,12 @@ void PC88::write_io8(uint32_t addr, uint32_t data)
                        mouse_strobe_clock = get_current_clock();
                }
 #endif
-               sing_signal = ((data & 0x80) != 0);
-               d_pcm->write_signal(SIG_PCM1BIT_SIGNAL, ((beep_on && beep_signal) || sing_signal) ? 1 : 0, 1);
+#if defined(PC8801_VARIANT)
+               if(config.dipswitch & DIPSWITCH_CMDSING) {
+                       sing_signal = ((data & 0x80) != 0);
+                       d_pcm->write_signal(SIG_PCM1BIT_SIGNAL, ((beep_on && beep_signal) || sing_signal) ? 1 : 0, 1);
+               }
+#endif
                break;
 #ifdef SUPPORT_PC88_OPN1
        case 0x44:
@@ -2676,6 +2680,9 @@ void PC88::draw_screen()
 #endif
                        }
                }
+               if(y == 0 && (config.dipswitch & DIPSWITCH_PALETTE) != 0) {
+                       break;
+               }
        }
        
        // copy to screen buffer
@@ -2711,17 +2718,18 @@ void PC88::draw_screen()
                        uint8_t* src_g = graph[y];
                        scrntype_t* pal_t;
                        scrntype_t* pal_g;
+                       int yy = ((config.dipswitch & DIPSWITCH_PALETTE) != 0) ? 0 : y;
                        
 //                     if(Port31_HCOLOR) {
-//                             pal_t = palette_line_digital_text_pc [y];
-//                             pal_g = palette_line_analog_graph_pc [y];
+//                             pal_t = palette_line_digital_text_pc [yy];
+//                             pal_g = palette_line_analog_graph_pc [yy];
 //                     } else
                        if(Port32_PMODE) {
-                               pal_t = palette_line_analog_text_pc  [y];
-                               pal_g = palette_line_analog_graph_pc [y];
+                               pal_t = palette_line_analog_text_pc  [yy];
+                               pal_g = palette_line_analog_graph_pc [yy];
                        } else {
-                               pal_t = palette_line_digital_text_pc [y];
-                               pal_g = palette_line_digital_graph_pc[y];
+                               pal_t = palette_line_digital_text_pc [yy];
+                               pal_g = palette_line_digital_graph_pc[yy];
                        }
                        for(int x = 0; x < 640; x++) {
                                uint32_t t = src_t[x];
@@ -2738,9 +2746,11 @@ void PC88::draw_screen()
                        uint8_t* src_g = graph[y];
                        scrntype_t* pal_t;
                        scrntype_t* pal_g;
+                       int yy = ((config.dipswitch & DIPSWITCH_PALETTE) != 0) ? 0 : y;
+                       
 #if defined(PC8001_VARIANT)
-                       pal_t = palette_line_digital_text_pc[y];
-                       pal_g = palette_line_analog_graph_pc[y];
+                       pal_t = palette_line_digital_text_pc[yy];
+                       pal_g = palette_line_analog_graph_pc[yy];
                        
 #if defined(_PC8001SR)
                        if(Port33_PR2) {
@@ -2759,14 +2769,14 @@ void PC88::draw_screen()
                        }
 #else
                        if(Port31_HCOLOR) {
-                               pal_t = palette_line_digital_text_pc [y];
-                               pal_g = palette_line_analog_graph_pc [y];
+                               pal_t = palette_line_digital_text_pc [yy];
+                               pal_g = palette_line_analog_graph_pc [yy];
                        } else if(Port32_PMODE) {
-                               pal_t = palette_line_analog_text_pc  [y];
-                               pal_g = palette_line_analog_graph_pc [y];
+                               pal_t = palette_line_analog_text_pc  [yy];
+                               pal_g = palette_line_analog_graph_pc [yy];
                        } else {
-                               pal_t = palette_line_digital_text_pc [y];
-                               pal_g = palette_line_digital_graph_pc[y];
+                               pal_t = palette_line_digital_text_pc [yy];
+                               pal_g = palette_line_digital_graph_pc[yy];
                        }
                        for(int x = 0; x < 640; x++) {
                                uint32_t t = src_t[x];
@@ -2925,11 +2935,13 @@ void PC88::draw_text()
                                }
                        }
                        uint8_t code = secret ? 0 : code_expand;//crtc.text.expand[cy][cx];
+                       uint8_t *pattern;
 #ifdef SUPPORT_PC88_PCG8100
-                       uint8_t *pattern = ((attrib & 0x10) ? sg_pattern : pcg_pattern) + code * 8;
-#else
-                       uint8_t *pattern = ((attrib & 0x10) ? sg_pattern : kanji1 + 0x1000) + code * 8;
+                       if(config.dipswitch & DIPSWITCH_PCG8100) {
+                               pattern = ((attrib & 0x10) ? sg_pattern : pcg_pattern) + code * 8;
+                       } else
 #endif
+                       pattern = ((attrib & 0x10) ? sg_pattern : kanji1 + 0x1000) + code * 8;
                        
                        for(int l = 0, y = ytop; l < char_height / 2 && y < 400; l++, y += 2) {
                                uint8_t pat = (l < 8) ? pattern[l] : 0;
index 4706dee..35c203d 100644 (file)
 #define CPU_TYPE_DEFAULT       1
 #endif
 #define USE_DIPSWITCH
-#define DIPSWITCH_HMB20                2
-#define DIPSWITCH_GSX8800      4
-#define DIPSWITCH_PCG8100      8
-#define DIPSWITCH_DEFAULT      (DIPSWITCH_HMB20 + DIPSWITCH_GSX8800 + DIPSWITCH_PCG8100)
+#define DIPSWITCH_MEMWAIT      0x01
+#define DIPSWITCH_HMB20                0x02
+#define DIPSWITCH_GSX8800      0x04
+#define DIPSWITCH_PCG8100      0x08
+#define DIPSWITCH_CMDSING      0x10
+#define DIPSWITCH_DEFAULT      (DIPSWITCH_HMB20 + DIPSWITCH_GSX8800 + DIPSWITCH_PCG8100 + DIPSWITCH_CMDSING)
+#define DIPSWITCH_PALETTE      0x20
 #define USE_JOYSTICK_TYPE      2
 #define USE_FLOPPY_DISK                2
 #define USE_TAPE               1
index 9b3f16c..3951d24 100644 (file)
@@ -228,7 +228,7 @@ void DISPLAY::initialize()
        
 // WIP: MEMSW
        bool memsw_stat = false;
-       if((config.dipswitch & (1 << DIPSW_POSITION_NOINIT_MEMSW)) != 0) {
+       if((config.dipswitch & (1 << DIPSWITCH_POSITION_NOINIT_MEMSW)) != 0) {
                if(fio->Fopen(create_local_path(_T("MEMSW.BIN")), FILEIO_READ_BINARY)) {
                        if(fio->IsOpened()) {
                                for(int i = 0; i < 16; i++) {
@@ -264,7 +264,7 @@ void DISPLAY::initialize()
 
 void DISPLAY::release()
 {
-       if((config.dipswitch & (1 << DIPSW_POSITION_NOINIT_MEMSW)) == 0) {
+       if((config.dipswitch & (1 << DIPSWITCH_POSITION_NOINIT_MEMSW)) == 0) {
                init_memsw();
        }
        save_memsw();
@@ -347,7 +347,7 @@ void DISPLAY::reset()
        }
 #endif
 #if defined(SUPPORT_EGC)
-       is_use_egc = ((config.dipswitch & (1 << DIPSW_POSITION_EGC)) != 0);
+       is_use_egc = ((config.dipswitch & (1 << DIPSWITCH_POSITION_EGC)) != 0);
 
        #if defined(SUPPORT_EGC)
        enable_egc = false;
@@ -385,7 +385,7 @@ void DISPLAY::reset()
        egc_srcmask.w = 0xffff;
 #endif
        
-       if((config.dipswitch & (1 << DIPSW_POSITION_NOINIT_MEMSW)) == 0) {
+       if((config.dipswitch & (1 << DIPSWITCH_POSITION_NOINIT_MEMSW)) == 0) {
                init_memsw();
        }
        save_memsw();
index 7a90b3d..198063f 100644 (file)
@@ -1119,10 +1119,10 @@ void VM::reset()
 //     port_a |= 0x04; // DIP SW 2-3, 1 = 40 columns, 0 = 80 columns
        port_a |= 0x02; // DIP SW 2-2, 1 = BASIC mode, 0 = Terminal mode
        port_a |= 0x01; // DIP SW 2-1, 1 = Normal mode, 0 = LT mode
-       if((config.dipswitch & (1 << DIPSW_POSITION_GDC_FAST)) == 0) {
+       if((config.dipswitch & (1 << DIPSWITCH_POSITION_GDC_FAST)) == 0) {
                port_a = port_a | 0x80;
        }
-       if((config.dipswitch & (1 << DIPSW_POSITION_NOINIT_MEMSW)) != 0) {
+       if((config.dipswitch & (1 << DIPSWITCH_POSITION_NOINIT_MEMSW)) != 0) {
                port_a = port_a | 0x10;
        }
        gdc_gfx->set_clock_freq(((port_a & 0x80) != 0) ? (2500 * 1000) : (5000 * 1000));
@@ -1173,7 +1173,7 @@ void VM::reset()
        port_b2 |= 0x10; // DIP SW 1-3, 1 = Don't use LCD
 #if !defined(SUPPORT_16_COLORS) || defined(SUPPORT_EGC)
        #if defined(SUPPORT_EGC)
-       if((config.dipswitch & (1 << DIPSW_POSITION_EGC)) == 0) {
+       if((config.dipswitch & (1 << DIPSWITCH_POSITION_EGC)) == 0) {
                port_b2 = port_b2 | 0x08;
        }
        #else
@@ -1197,7 +1197,7 @@ void VM::reset()
 #if defined(SUPPORT_HIRESO)
        port_b |= 0x80; // DIP SW 1-4, 1 = External FDD #3/#4, 0 = #1/#2
 #endif
-       port_b |= ((config.dipswitch & (1 << DIPSW_POSITION_RAM512K)) == 0) ? 0x40 : 0x00; // DIP SW 3-6, 1 = Enable internal RAM 80000h-9FFFFh
+       port_b |= ((config.dipswitch & (1 << DIPSWITCH_POSITION_RAM512K)) == 0) ? 0x40 : 0x00; // DIP SW 3-6, 1 = Enable internal RAM 80000h-9FFFFh
 #if defined(_PC98RL)
        port_b |= 0x10; // DIP SW 3-3, 1 = DMA ch.0 for SASI-HDD
 #endif
@@ -1717,7 +1717,7 @@ void VM::update_config()
        {
                uint8_t mouse_port_b = pio_mouse->read_signal(SIG_I8255_PORT_B);
                mouse_port_b = mouse_port_b & ~0x40;
-               if((config.dipswitch & (1 << DIPSW_POSITION_RAM512K)) == 0) {
+               if((config.dipswitch & (1 << DIPSWITCH_POSITION_RAM512K)) == 0) {
                        mouse_port_b = mouse_port_b | 0x40;
                }
                pio_mouse->write_signal(SIG_I8255_PORT_B, mouse_port_b, 0xff);
@@ -1725,11 +1725,11 @@ void VM::update_config()
        {
                uint8_t sys_port_a = pio_sys->read_signal(SIG_I8255_PORT_A);
                //sys_port_a = sys_port_a & ~0x80;
-               //if((config.dipswitch & (1 << DIPSW_POSITION_GDC_FAST)) != 0) {
+               //if((config.dipswitch & (1 << DIPSWITCH_POSITION_GDC_FAST)) != 0) {
                //      sys_port_a = sys_port_a | 0x80;
                //}
                sys_port_a = sys_port_a & ~0x10;
-               if((config.dipswitch & (1 << DIPSW_POSITION_NOINIT_MEMSW)) != 0) {
+               if((config.dipswitch & (1 << DIPSWITCH_POSITION_NOINIT_MEMSW)) != 0) {
                        sys_port_a = sys_port_a | 0x10;
                }
                pio_sys->write_signal(SIG_I8255_PORT_A, sys_port_a, 0xff);
@@ -1739,7 +1739,7 @@ void VM::update_config()
                uint8_t prn_port_b = pio_prn->read_signal(SIG_I8255_PORT_B);
 #if defined(SUPPORT_EGC)
                prn_port_b = prn_port_b & ~0x08;
-               if((config.dipswitch & (1 << DIPSW_POSITION_EGC)) == 0) {
+               if((config.dipswitch & (1 << DIPSWITCH_POSITION_EGC)) == 0) {
                        prn_port_b = prn_port_b | 0x08;
                }
 #endif
index 91bf63a..b6f59b4 100644 (file)
 
 // DIPSW POSITION
 // DIPSW1: 8-15
-#define DIPSW_POSITION_HIGH_RESO       (8 + 1 - 1)
-#define DIPSW_POSITION_SUPER_IMPOSE    (8 + 2 - 1)
-#define DIPSW_POSITION_PLASMA_DISPLAY  (8 + 3 - 1)
-#define DIPSW_POSITION_SWAP_FDD        (8 + 4 - 1)
-#define DIPSW_POSITION_RS232C_SW1      (8 + 5 - 1)
-#define DIPSW_POSITION_RS232C_SW2      (8 + 6 - 1)
-#define DIPSW_POSITION_HDD_SECTOR_SIZE (8 + 7 - 1)
-#define DIPSW_POSITION_EGC             (8 + 8 - 1)
+#define DIPSWITCH_POSITION_HIGH_RESO       (8 + 1 - 1)
+#define DIPSWITCH_POSITION_SUPER_IMPOSE    (8 + 2 - 1)
+#define DIPSWITCH_POSITION_PLASMA_DISPLAY  (8 + 3 - 1)
+#define DIPSWITCH_POSITION_SWAP_FDD        (8 + 4 - 1)
+#define DIPSWITCH_POSITION_RS232C_SW1      (8 + 5 - 1)
+#define DIPSWITCH_POSITION_RS232C_SW2      (8 + 6 - 1)
+#define DIPSWITCH_POSITION_HDD_SECTOR_SIZE (8 + 7 - 1)
+#define DIPSWITCH_POSITION_EGC             (8 + 8 - 1)
 
 // DIPSW-2
-#define DIPSW_POSITION_LT_MODE       (16 + 1 - 1)
-#define DIPSW_POSITION_TERMINAL_MODE (16 + 2 - 1)
-#define DIPSW_POSITION_TEXT_WIDTH80  (16 + 3 - 1)
-#define DIPSW_POSITION_TEXT_HEIGHT25 (16 + 4 - 1)
-#define DIPSW_POSITION_NOINIT_MEMSW  (16 + 5 - 1)
-#define DIPSW_POSITION_INTFDD_OFF    (16 + 6 - 1)
-#define DIPSW_POSITION_DISABLE_VFKEY (16 + 7 - 1)
-#define DIPSW_POSITION_GDC_FAST      (16 + 8 - 1)
+#define DIPSWITCH_POSITION_LT_MODE       (16 + 1 - 1)
+#define DIPSWITCH_POSITION_TERMINAL_MODE (16 + 2 - 1)
+#define DIPSWITCH_POSITION_TEXT_WIDTH80  (16 + 3 - 1)
+#define DIPSWITCH_POSITION_TEXT_HEIGHT25 (16 + 4 - 1)
+#define DIPSWITCH_POSITION_NOINIT_MEMSW  (16 + 5 - 1)
+#define DIPSWITCH_POSITION_INTFDD_OFF    (16 + 6 - 1)
+#define DIPSWITCH_POSITION_DISABLE_VFKEY (16 + 7 - 1)
+#define DIPSWITCH_POSITION_GDC_FAST      (16 + 8 - 1)
 
 // SW3
-#define DIPSW_POSITION_FDD_MODE1      (24 + 1 - 1)
-#define DIPSW_POSITION_FDD_MODE2      (24 + 2 - 1)
-#define DIPSW_POSITION_FDD_DMA_CH     (24 + 3 - 1)
-#define DIPSW_POSITION_FDD_MOTOR_CTL  (24 + 4 - 1)
-#define DIPSW_POSITION_DMA_FAST       (24 + 5 - 1)
-#define DIPSW_POSITION_RAM512K        (24 + 6 - 1)
-#define DIPSW_POSITION_CPU_MODE       (24 + 8 - 1)
+#define DIPSWITCH_POSITION_FDD_MODE1      (24 + 1 - 1)
+#define DIPSWITCH_POSITION_FDD_MODE2      (24 + 2 - 1)
+#define DIPSWITCH_POSITION_FDD_DMA_CH     (24 + 3 - 1)
+#define DIPSWITCH_POSITION_FDD_MOTOR_CTL  (24 + 4 - 1)
+#define DIPSWITCH_POSITION_DMA_FAST       (24 + 5 - 1)
+#define DIPSWITCH_POSITION_RAM512K        (24 + 6 - 1)
+#define DIPSWITCH_POSITION_CPU_MODE       (24 + 8 - 1)
 
 
 
 #define USE_FLOPPY_DISK                6
 #elif defined(_PC98DO) || defined(_PC98DOPLUS)
 #define USE_BOOT_MODE          5
-//#define USE_DIPSWITCH
+#define DIPSWITCH_MEMWAIT      0x01
+#define DIPSWITCH_CMDSING      0x10
+#define DIPSWITCH_DEFAULT      (/*DIPSWITCH_HMB20 + DIPSWITCH_GSX8800 + DIPSWITCH_PCG8100 + */DIPSWITCH_CMDSING)
+#define DIPSWITCH_PALETTE      0x20
 #define USE_FLOPPY_DISK                4
 #else
 #define USE_FLOPPY_DISK                2
index 82773a2..7a51221 100644 (file)
@@ -129,12 +129,12 @@ void SCSI_HOST::write_signal(int id, uint32_t data, uint32_t mask)
                        if(!prev_status && req_status) {
                                // L -> H
 //                             if(bsy_status) {
-                                       if(!cd_status) {
+                                       if(!cd_status && !msg_status) {
                                                // data phase
                                                set_drq(true);
                                                access = true;
-                                       } else if(!msg_status && io_status) {
-                                               // status phase
+                                       } else if(cd_status) {
+                                               // command/status/message phase
                                                set_irq(true);
                                        }
 //                             }
index 71b4e6c..10726ad 100644 (file)
 #include "bubcom80/bubcom80.h"
 #endif
 
+// Hino Electronics CEFUCOM-21
+#ifdef _CEFUCOM21
+#include "cefucom21/cefucom21.h"
+#endif
+
 // COLECO ColecoVision
 #ifdef _COLECOVISION
 #include "colecovision/colecovision.h"
index 9959907..bce15ca 100644 (file)
@@ -58,6 +58,8 @@ protected:
        
        bool is_primary;
        
+       bool is_primary;
+       
        /* ---------------------------------------------------------------------------
        registers
        --------------------------------------------------------------------------- */
index 5675f81..1606d0a 100644 (file)
 Z80_INLINE uint8_t Z80_BASE::RM8(uint32_t addr)
 {
 //#ifdef Z80_MEMORY_WAIT
+       UPDATE_EXTRA_EVENT(1);
        if(has_memory_wait) {
                int wait;
                uint8_t val = d_mem->read_data8w(addr, &wait);
                icount -= wait;
-               UPDATE_EXTRA_EVENT(3 + wait);
+               UPDATE_EXTRA_EVENT(2 + wait);
                return val;
        } else {
 //#else
                uint8_t val = d_mem->read_data8(addr);
-               UPDATE_EXTRA_EVENT(3);
+               UPDATE_EXTRA_EVENT(2);
                return val;
        }
 //#endif
@@ -131,15 +132,16 @@ Z80_INLINE uint8_t Z80_BASE::RM8(uint32_t addr)
 Z80_INLINE void Z80_BASE::WM8(uint32_t addr, uint8_t val)
 {
 //#ifdef Z80_MEMORY_WAIT
+       UPDATE_EXTRA_EVENT(1);
        if(has_memory_wait) {
                int wait;
                d_mem->write_data8w(addr, val, &wait);
                icount -= wait;
-               UPDATE_EXTRA_EVENT(3 + wait);
+               UPDATE_EXTRA_EVENT(2 + wait);
        } else {
 //#else
                d_mem->write_data8(addr, val);
-               UPDATE_EXTRA_EVENT(3);
+               UPDATE_EXTRA_EVENT(2);
        }
 //#endif
 }
@@ -163,10 +165,11 @@ Z80_INLINE uint8_t Z80_BASE::FETCHOP()
        R++;
        
        // consider m1 cycle wait
+       UPDATE_EXTRA_EVENT(1);
        int wait;
        uint8_t val = d_mem->fetch_op(pctmp, &wait);
        icount -= wait;
-       UPDATE_EXTRA_EVENT(4 + wait);
+       UPDATE_EXTRA_EVENT(3 + wait);
        return val;
 }
 
@@ -187,17 +190,17 @@ Z80_INLINE uint32_t Z80_BASE::FETCH16()
 Z80_INLINE uint8_t Z80_BASE::IN8(uint32_t addr)
 {
 //#ifdef Z80_IO_WAIT
-       UPDATE_EXTRA_EVENT(1);
+       UPDATE_EXTRA_EVENT(2);
        if(has_io_wait) {
                int wait;
                uint8_t val = d_io->read_io8w(addr, &wait);
                icount -= wait;
-               UPDATE_EXTRA_EVENT(3 + wait);
+               UPDATE_EXTRA_EVENT(2 + wait);
                return val;
        } else {
 //#else
                uint8_t val = d_io->read_io8(addr);
-               UPDATE_EXTRA_EVENT(3);
+               UPDATE_EXTRA_EVENT(2);
                return val;
        }
 //#endif
@@ -206,11 +209,11 @@ Z80_INLINE uint8_t Z80_BASE::IN8(uint32_t addr)
 Z80_INLINE void Z80_BASE::OUT8(uint32_t addr, uint8_t val)
 {
 //#ifdef HAS_NSC800
-       UPDATE_EXTRA_EVENT(1);
+       UPDATE_EXTRA_EVENT(2);
        if(has_nsc800) {
                if((addr & 0xff) == 0xbb) {
                        icr = val;
-                       UPDATE_EXTRA_EVENT(3);
+                       UPDATE_EXTRA_EVENT(2);
                        return;
                }
        }
@@ -220,11 +223,11 @@ Z80_INLINE void Z80_BASE::OUT8(uint32_t addr, uint8_t val)
                int wait;
                d_io->write_io8w(addr, val, &wait);
                icount -= wait;
-               UPDATE_EXTRA_EVENT(3 + wait);
+               UPDATE_EXTRA_EVENT(2 + wait);
        } else {
 //#else
                d_io->write_io8(addr, val);
-               UPDATE_EXTRA_EVENT(3);
+               UPDATE_EXTRA_EVENT(2);
        }
 //#endif
 }
@@ -2018,7 +2021,7 @@ void Z80_BASE::reset()
        after_ei = after_ldair = false;
        intr_req_bit = intr_pend_bit = 0;
        
-       icount = extra_icount = 0;
+       icount = extra_icount = busreq_icount = 0;
 }
 
 void Z80_BASE::write_signal(int id, uint32_t data, uint32_t mask)
@@ -2068,6 +2071,7 @@ int Z80_BASE::run(int clock)
                extra_tmp_count += extra_icount;
        }
        if(clock == -1) {
+               // this is primary cpu
                if(busreq) {
                        // run dma once
                        //#ifdef SINGLE_MODE_DMA
index 35b3d5c..9ba5307 100644 (file)
@@ -144,7 +144,7 @@ uint32_t Z80PIO::read_io8(uint32_t addr)
                        port[ch].input_empty = true;
                        update_ready();
                }
-               return (port[ch].rreg & port[ch].dir) | (port[ch].wreg & ~port[ch].dir);break;
+               return (port[ch].rreg & port[ch].dir) | (port[ch].wreg & ~port[ch].dir);
        case 1:
        case 3:
                // status (sharp z-80pio special function)
index bfb26f8..0711253 100644 (file)
@@ -1438,7 +1438,7 @@ void update_control_menu(HMENU hMenu)
        for(int i = 0; i < 8; i++) {
                EnableMenuItem(hMenu, ID_OPEN_DEBUGGER0 + i, emu && !emu->now_debugging && emu->is_debugger_enabled(i) ? MF_ENABLED : MF_GRAYED);
        }
-       EnableMenuItem(hMenu, ID_CLOSE_DEBUGGER, emu &&  emu->now_debugging                                ? MF_ENABLED : MF_GRAYED);
+       EnableMenuItem(hMenu, ID_CLOSE_DEBUGGER, emu && emu->now_debugging ? MF_ENABLED : MF_GRAYED);
 #endif
 }
 
@@ -2178,15 +2178,23 @@ void update_menu(HWND hWnd, HMENU hMenu)
 #endif
 #if defined(USE_SOUND_TYPE) || defined(USE_FLOPPY_DISK) || defined(USE_TAPE) || defined(USE_DIPSWITCH)
        } else if(id >= ID_VM_SOUND_MENU_START && id <= ID_VM_SOUND_MENU_END) {
-                update_vm_sound_menu(hMenu);
+#if defined(USE_SOUND_TYPE) || defined(USE_FLOPPY_DISK) || defined(USE_TAPE)
+               update_vm_sound_menu(hMenu);
+#endif
 #ifdef USE_DIPSWITCH
                // dipswitch may be in sound menu
                 update_vm_dipswitch_menu(hMenu);
 #endif
 #endif
-#if defined(USE_MONITOR_TYPE) || defined(USE_SCANLINE)
+#if defined(USE_MONITOR_TYPE) || defined(USE_SCANLINE) || defined(USE_DIPSWITCH)
        } else if(id >= ID_VM_MONITOR_MENU_START && id <= ID_VM_MONITOR_MENU_END) {
-                update_vm_monitor_menu(hMenu);
+#if defined(USE_MONITOR_TYPE) || defined(USE_SCANLINE)
+               update_vm_monitor_menu(hMenu);
+#endif
+#ifdef USE_DIPSWITCH
+               // dipswitch may be in monitor menu
+                update_vm_dipswitch_menu(hMenu);
+#endif
 #endif
 #ifdef USE_PRINTER_TYPE
        } else if(id >= ID_VM_PRINTER_MENU_START && id <= ID_VM_PRINTER_MENU_START) {
diff --git a/source/vc++2008/cefucom21.vcproj b/source/vc++2008/cefucom21.vcproj
new file mode 100644 (file)
index 0000000..becc577
--- /dev/null
@@ -0,0 +1,1087 @@
+<?xml version="1.0" encoding="shift_jis"?>
+<VisualStudioProject
+       ProjectType="Visual C++"
+       Version="9.00"
+       Name="cefucom21"
+       ProjectGUID="{F62D036D-7569-431B-9C55-C056A4D3145A}"
+       RootNamespace="cefucom21"
+       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/cefucom21.tlb"
+                               HeaderFileName=""
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="0"
+                               PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_CEFUCOM21"
+                               MinimalRebuild="true"
+                               BasicRuntimeChecks="3"
+                               RuntimeLibrary="1"
+                               PrecompiledHeaderFile=".\Debug/cefucom21.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/cefucom21.exe"
+                               LinkIncremental="2"
+                               SuppressStartupBanner="true"
+                               GenerateManifest="false"
+                               GenerateDebugInformation="true"
+                               ProgramDatabaseFile=".\Debug/cefucom21.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/cefucom21.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/cefucom21.tlb"
+                               HeaderFileName=""
+                       />
+                       <Tool
+                               Name="VCCLCompilerTool"
+                               Optimization="2"
+                               InlineFunctionExpansion="2"
+                               PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_CEFUCOM21"
+                               StringPooling="true"
+                               RuntimeLibrary="0"
+                               EnableFunctionLevelLinking="true"
+                               EnableEnhancedInstructionSet="2"
+                               PrecompiledHeaderFile=".\Release/cefucom21.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/cefucom21.exe"
+                               LinkIncremental="1"
+                               SuppressStartupBanner="true"
+                               GenerateManifest="false"
+                               ProgramDatabaseFile=".\Release/cefucom21.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/cefucom21.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\ay_3_891x.cpp"
+                                       >
+                                       <FileConfiguration
+                                               Name="Debug|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                                       <FileConfiguration
+                                               Name="Release|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                               </File>
+                               <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\i8255.cpp"
+                                       >
+                                       <FileConfiguration
+                                               Name="Debug|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                                       <FileConfiguration
+                                               Name="Release|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\io.cpp"
+                                       >
+                                       <FileConfiguration
+                                               Name="Debug|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                                       <FileConfiguration
+                                               Name="Release|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\mc6847.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\not.cpp"
+                                       >
+                                       <FileConfiguration
+                                               Name="Debug|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                                       <FileConfiguration
+                                               Name="Release|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\rp5c01.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>
+                               <File
+                                       RelativePath="..\src\vm\z80ctc.cpp"
+                                       >
+                                       <FileConfiguration
+                                               Name="Debug|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                                       <FileConfiguration
+                                               Name="Release|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\z80pio.cpp"
+                                       >
+                                       <FileConfiguration
+                                               Name="Debug|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                                       <FileConfiguration
+                                               Name="Release|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                               </File>
+                               <Filter
+                                       Name="fmgen Source Files"
+                                       Filter="cpp"
+                                       >
+                                       <File
+                                               RelativePath="..\src\vm\fmgen\fmgen.cpp"
+                                               >
+                                               <FileConfiguration
+                                                       Name="Debug|Win32"
+                                                       >
+                                                       <Tool
+                                                               Name="VCCLCompilerTool"
+                                                               PreprocessorDefinitions=""
+                                                       />
+                                               </FileConfiguration>
+                                               <FileConfiguration
+                                                       Name="Release|Win32"
+                                                       >
+                                                       <Tool
+                                                               Name="VCCLCompilerTool"
+                                                               PreprocessorDefinitions=""
+                                                       />
+                                               </FileConfiguration>
+                                       </File>
+                                       <File
+                                               RelativePath="..\src\vm\fmgen\fmtimer.cpp"
+                                               >
+                                               <FileConfiguration
+                                                       Name="Debug|Win32"
+                                                       >
+                                                       <Tool
+                                                               Name="VCCLCompilerTool"
+                                                               PreprocessorDefinitions=""
+                                                       />
+                                               </FileConfiguration>
+                                               <FileConfiguration
+                                                       Name="Release|Win32"
+                                                       >
+                                                       <Tool
+                                                               Name="VCCLCompilerTool"
+                                                               PreprocessorDefinitions=""
+                                                       />
+                                               </FileConfiguration>
+                                       </File>
+                                       <File
+                                               RelativePath="..\src\vm\fmgen\opna.cpp"
+                                               >
+                                               <FileConfiguration
+                                                       Name="Debug|Win32"
+                                                       >
+                                                       <Tool
+                                                               Name="VCCLCompilerTool"
+                                                               PreprocessorDefinitions=""
+                                                       />
+                                               </FileConfiguration>
+                                               <FileConfiguration
+                                                       Name="Release|Win32"
+                                                       >
+                                                       <Tool
+                                                               Name="VCCLCompilerTool"
+                                                               PreprocessorDefinitions=""
+                                                       />
+                                               </FileConfiguration>
+                                       </File>
+                                       <File
+                                               RelativePath="..\src\vm\fmgen\psg.cpp"
+                                               >
+                                               <FileConfiguration
+                                                       Name="Debug|Win32"
+                                                       >
+                                                       <Tool
+                                                               Name="VCCLCompilerTool"
+                                                               PreprocessorDefinitions=""
+                                                       />
+                                               </FileConfiguration>
+                                               <FileConfiguration
+                                                       Name="Release|Win32"
+                                                       >
+                                                       <Tool
+                                                               Name="VCCLCompilerTool"
+                                                               PreprocessorDefinitions=""
+                                                       />
+                                               </FileConfiguration>
+                                       </File>
+                               </Filter>
+                       </Filter>
+                       <Filter
+                               Name="VM Driver Source Files"
+                               Filter="cpp"
+                               >
+                               <File
+                                       RelativePath="..\src\vm\cefucom21\cefucom21.cpp"
+                                       >
+                                       <FileConfiguration
+                                               Name="Debug|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                                       <FileConfiguration
+                                               Name="Release|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\cefucom21\mcu.cpp"
+                                       >
+                                       <FileConfiguration
+                                               Name="Debug|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                                       <FileConfiguration
+                                               Name="Release|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\cefucom21\pcu.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\ay_3_891x.h"
+                                       >
+                               </File>
+                               <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\i8255.h"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\io.h"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\mc6847.h"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\memory.h"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\noise.h"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\not.h"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\rp5c01.h"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\vm.h"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\vm_template.h"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\z80.h"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\z80ctc.h"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\z80pio.h"
+                                       >
+                               </File>
+                               <Filter
+                                       Name="fmgen Header Files"
+                                       >
+                                       <File
+                                               RelativePath="..\src\vm\fmgen\diag.h"
+                                               >
+                                       </File>
+                                       <File
+                                               RelativePath="..\src\vm\fmgen\fmgen.h"
+                                               >
+                                       </File>
+                                       <File
+                                               RelativePath="..\src\vm\fmgen\fmgeninl.h"
+                                               >
+                                       </File>
+                                       <File
+                                               RelativePath="..\src\vm\fmgen\fmtimer.h"
+                                               >
+                                       </File>
+                                       <File
+                                               RelativePath="..\src\vm\fmgen\headers.h"
+                                               >
+                                       </File>
+                                       <File
+                                               RelativePath="..\src\vm\fmgen\misc.h"
+                                               >
+                                       </File>
+                                       <File
+                                               RelativePath="..\src\vm\fmgen\opna.h"
+                                               >
+                                       </File>
+                                       <File
+                                               RelativePath="..\src\vm\fmgen\psg.h"
+                                               >
+                                       </File>
+                               </Filter>
+                       </Filter>
+                       <Filter
+                               Name="VM Driver Header Files"
+                               Filter="h"
+                               >
+                               <File
+                                       RelativePath="..\src\vm\cefucom21\cefucom21.h"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\cefucom21\mcu.h"
+                                       >
+                               </File>
+                               <File
+                                       RelativePath="..\src\vm\cefucom21\pcu.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\cefucom21.ico"
+                               >
+                       </File>
+                       <File
+                               RelativePath="..\src\res\cefucom21.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++2013/cefucom21.vcxproj b/source/vc++2013/cefucom21.vcxproj
new file mode 100644 (file)
index 0000000..ee11d83
--- /dev/null
@@ -0,0 +1,239 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.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="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{F62D036D-7569-431B-9C55-C056A4D3145A}</ProjectGuid>
+    <RootNamespace>cefucom21</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120_xp</PlatformToolset>
+    <UseOfMfc>false</UseOfMfc>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <PlatformToolset>v120_xp</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" />
+    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
+  </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" />
+    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup>
+    <_ProjectFileVersion>12.0.21005.1</_ProjectFileVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>.\Debug\</OutDir>
+    <IntDir>.\Debug\</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>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>.\Release\</OutDir>
+    <IntDir>.\Release\</IntDir>
+    <LinkIncremental>false</LinkIncremental>
+    <IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);$(DXSDK_DIR)Include</IncludePath>
+    <LibraryPath>$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);$(DXSDK_DIR)Lib\x86</LibraryPath>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Midl>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MkTypLibCompatible>true</MkTypLibCompatible>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <TargetEnvironment>Win32</TargetEnvironment>
+      <TypeLibraryName>.\Debug/cefucom21.tlb</TypeLibraryName>
+      <HeaderFileName />
+    </Midl>
+    <ClCompile>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_CEFUCOM21;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <MinimalRebuild>true</MinimalRebuild>
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+      <PrecompiledHeaderOutputFile>.\Debug/cefucom21.pch</PrecompiledHeaderOutputFile>
+      <AssemblerListingLocation>.\Debug/</AssemblerListingLocation>
+      <ObjectFileName>.\Debug/</ObjectFileName>
+      <ProgramDataBaseFileName>.\Debug/</ProgramDataBaseFileName>
+      <BrowseInformation>true</BrowseInformation>
+      <WarningLevel>Level3</WarningLevel>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0411</Culture>
+    </ResourceCompile>
+    <Link>
+      <AdditionalDependencies>odbc32.lib;odbccp32.lib;winmm.lib;imm32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <OutputFile>.\Debug/cefucom21.exe</OutputFile>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <ProgramDatabaseFile>.\Debug/cefucom21.pdb</ProgramDatabaseFile>
+      <SubSystem>Windows</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention />
+      <TargetMachine>MachineX86</TargetMachine>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+      <IgnoreSpecificDefaultLibraries>Libcmtd.lib</IgnoreSpecificDefaultLibraries>
+    </Link>
+    <Bscmake>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <OutputFile>.\Debug/cefucom21.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>.\Release/cefucom21.tlb</TypeLibraryName>
+      <HeaderFileName />
+    </Midl>
+    <ClCompile>
+      <Optimization>MaxSpeed</Optimization>
+      <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_CEFUCOM21;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>true</StringPooling>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+      <PrecompiledHeaderOutputFile>.\Release/cefucom21.pch</PrecompiledHeaderOutputFile>
+      <AssemblerListingLocation>.\Release/</AssemblerListingLocation>
+      <ObjectFileName>.\Release/</ObjectFileName>
+      <ProgramDataBaseFileName>.\Release/</ProgramDataBaseFileName>
+      <BrowseInformation>true</BrowseInformation>
+      <WarningLevel>Level3</WarningLevel>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+    </ClCompile>
+    <ResourceCompile>
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <Culture>0x0409</Culture>
+    </ResourceCompile>
+    <Link>
+      <AdditionalDependencies>odbc32.lib;odbccp32.lib;winmm.lib;imm32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <OutputFile>.\Release/cefucom21.exe</OutputFile>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <ProgramDatabaseFile>.\Release/cefucom21.pdb</ProgramDatabaseFile>
+      <SubSystem>Windows</SubSystem>
+      <RandomizedBaseAddress>false</RandomizedBaseAddress>
+      <DataExecutionPrevention />
+      <TargetMachine>MachineX86</TargetMachine>
+      <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+    </Link>
+    <Bscmake>
+      <SuppressStartupBanner>true</SuppressStartupBanner>
+      <OutputFile>.\Release/cefucom21.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\fifo.cpp" />
+    <ClCompile Include="..\src\fileio.cpp" />
+    <ClCompile Include="..\src\debugger.cpp" />
+    <ClCompile Include="..\src\emu.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" />
+    <ClCompile Include="..\src\vm\ay_3_891x.cpp" />
+    <ClCompile Include="..\src\vm\datarec.cpp" />
+    <ClCompile Include="..\src\vm\event.cpp" />
+    <ClCompile Include="..\src\vm\i8255.cpp" />
+    <ClCompile Include="..\src\vm\io.cpp" />
+    <ClCompile Include="..\src\vm\mc6847.cpp" />
+    <ClCompile Include="..\src\vm\memory.cpp" />
+    <ClCompile Include="..\src\vm\noise.cpp" />
+    <ClCompile Include="..\src\vm\not.cpp" />
+    <ClCompile Include="..\src\vm\rp5c01.cpp" />
+    <ClCompile Include="..\src\vm\z80.cpp" />
+    <ClCompile Include="..\src\vm\z80ctc.cpp" />
+    <ClCompile Include="..\src\vm\z80pio.cpp" />
+    <ClCompile Include="..\src\vm\fmgen\fmgen.cpp" />
+    <ClCompile Include="..\src\vm\fmgen\fmtimer.cpp" />
+    <ClCompile Include="..\src\vm\fmgen\opna.cpp" />
+    <ClCompile Include="..\src\vm\fmgen\psg.cpp" />
+    <ClCompile Include="..\src\vm\cefucom21\cefucom21.cpp" />
+    <ClCompile Include="..\src\vm\cefucom21\mcu.cpp" />
+    <ClCompile Include="..\src\vm\cefucom21\pcu.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\common.h" />
+    <ClInclude Include="..\src\config.h" />
+    <ClInclude Include="..\src\fifo.h" />
+    <ClInclude Include="..\src\fileio.h" />
+    <ClInclude Include="..\src\emu.h" />
+    <ClInclude Include="..\src\win32\osd.h" />
+    <ClInclude Include="..\src\vm\ay_3_891x.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\i8255.h" />
+    <ClInclude Include="..\src\vm\io.h" />
+    <ClInclude Include="..\src\vm\mc6847.h" />
+    <ClInclude Include="..\src\vm\memory.h" />
+    <ClInclude Include="..\src\vm\noise.h" />
+    <ClInclude Include="..\src\vm\not.h" />
+    <ClInclude Include="..\src\vm\rp5c01.h" />
+    <ClInclude Include="..\src\vm\vm.h" />
+    <ClInclude Include="..\src\vm\vm_template.h" />
+    <ClInclude Include="..\src\vm\z80.h" />
+    <ClInclude Include="..\src\vm\z80ctc.h" />
+    <ClInclude Include="..\src\vm\z80pio.h" />
+    <ClInclude Include="..\src\vm\fmgen\diag.h" />
+    <ClInclude Include="..\src\vm\fmgen\fmgen.h" />
+    <ClInclude Include="..\src\vm\fmgen\fmgeninl.h" />
+    <ClInclude Include="..\src\vm\fmgen\fmtimer.h" />
+    <ClInclude Include="..\src\vm\fmgen\headers.h" />
+    <ClInclude Include="..\src\vm\fmgen\misc.h" />
+    <ClInclude Include="..\src\vm\fmgen\opna.h" />
+    <ClInclude Include="..\src\vm\fmgen\psg.h" />
+    <ClInclude Include="..\src\vm\cefucom21\cefucom21.h" />
+    <ClInclude Include="..\src\vm\cefucom21\mcu.h" />
+    <ClInclude Include="..\src\vm\cefucom21\pcu.h" />
+    <ClInclude Include="..\src\res\resource.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <Image Include="..\src\res\cefucom21.ico" />
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\src\res\cefucom21.rc">
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\src\res;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\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++2013/cefucom21.vcxproj.filters b/source/vc++2013/cefucom21.vcxproj.filters
new file mode 100644 (file)
index 0000000..94afb94
--- /dev/null
@@ -0,0 +1,271 @@
+<?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>{16e067c7-4b27-424c-b115-19a9deaa16ef}</UniqueIdentifier>
+      <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
+    </Filter>
+    <Filter Include="Source Files\EMU Source Files">
+      <UniqueIdentifier>{898909f7-af9e-4528-a651-b2458ac65caa}</UniqueIdentifier>
+      <Extensions>cpp</Extensions>
+    </Filter>
+    <Filter Include="Source Files\OSD Source Files">
+      <UniqueIdentifier>{4d8cbe87-0ca2-4844-874b-593aadf2028e}</UniqueIdentifier>
+      <Extensions>cpp</Extensions>
+    </Filter>
+    <Filter Include="Source Files\VM Common Source Files">
+      <UniqueIdentifier>{ac026dbb-c496-4e39-b38c-e1699fda355a}</UniqueIdentifier>
+      <Extensions>cpp</Extensions>
+    </Filter>
+    <Filter Include="Source Files\VM Common Source Files\fmgen Source Files">
+      <UniqueIdentifier>{daa3ed04-4edd-4964-8ad9-94331bbcde6a}</UniqueIdentifier>
+      <Extensions>cpp</Extensions>
+    </Filter>
+    <Filter Include="Source Files\VM Driver Source Files">
+      <UniqueIdentifier>{25cdc18e-d40b-4233-b69f-e690c8d0dfe9}</UniqueIdentifier>
+      <Extensions>cpp</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{009eaa46-9bf6-4264-bfe0-8170020c232e}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl</Extensions>
+    </Filter>
+    <Filter Include="Header Files\EMU Header Files">
+      <UniqueIdentifier>{2c811020-8ad5-4345-b584-df7d66348e25}</UniqueIdentifier>
+      <Extensions>h</Extensions>
+    </Filter>
+    <Filter Include="Header Files\OSD Header Files">
+      <UniqueIdentifier>{69e6922a-bcc1-41b4-84e8-277fe2fe473e}</UniqueIdentifier>
+      <Extensions>h</Extensions>
+    </Filter>
+    <Filter Include="Header Files\VM Common Header Files">
+      <UniqueIdentifier>{764517f3-cd02-4436-a65e-ca376cc72013}</UniqueIdentifier>
+      <Extensions>h</Extensions>
+    </Filter>
+    <Filter Include="Header Files\VM Common Header Files\fmgen Header Files">
+      <UniqueIdentifier>{6223a48e-0496-4f3e-a218-172096d7db21}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Header Files\VM Driver Header Files">
+      <UniqueIdentifier>{de7aa1b1-3f65-4411-94b8-19f4ad859402}</UniqueIdentifier>
+      <Extensions>h</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{4ab36c18-c36b-432d-97ae-86a835f215f0}</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\ay_3_891x.cpp">
+      <Filter>Source Files\VM Common 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\i8255.cpp">
+      <Filter>Source Files\VM Common Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\vm\io.cpp">
+      <Filter>Source Files\VM Common Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\vm\mc6847.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\not.cpp">
+      <Filter>Source Files\VM Common Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\vm\rp5c01.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\z80ctc.cpp">
+      <Filter>Source Files\VM Common Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\vm\z80pio.cpp">
+      <Filter>Source Files\VM Common Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\vm\fmgen\fmgen.cpp">
+      <Filter>Source Files\VM Common Source Files\fmgen Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\vm\fmgen\fmtimer.cpp">
+      <Filter>Source Files\VM Common Source Files\fmgen Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\vm\fmgen\opna.cpp">
+      <Filter>Source Files\VM Common Source Files\fmgen Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\vm\fmgen\psg.cpp">
+      <Filter>Source Files\VM Common Source Files\fmgen Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\vm\cefucom21\cefucom21.cpp">
+      <Filter>Source Files\VM Driver Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\vm\cefucom21\mcu.cpp">
+      <Filter>Source Files\VM Driver Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\vm\cefucom21\pcu.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\ay_3_891x.h">
+      <Filter>Header Files\VM Common 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\i8255.h">
+      <Filter>Header Files\VM Common Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\vm\io.h">
+      <Filter>Header Files\VM Common Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\vm\mc6847.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\not.h">
+      <Filter>Header Files\VM Common Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\vm\rp5c01.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\z80ctc.h">
+      <Filter>Header Files\VM Common Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\vm\z80pio.h">
+      <Filter>Header Files\VM Common Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\vm\fmgen\diag.h">
+      <Filter>Header Files\VM Common Header Files\fmgen Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\vm\fmgen\fmgen.h">
+      <Filter>Header Files\VM Common Header Files\fmgen Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\vm\fmgen\fmgeninl.h">
+      <Filter>Header Files\VM Common Header Files\fmgen Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\vm\fmgen\fmtimer.h">
+      <Filter>Header Files\VM Common Header Files\fmgen Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\vm\fmgen\headers.h">
+      <Filter>Header Files\VM Common Header Files\fmgen Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\vm\fmgen\misc.h">
+      <Filter>Header Files\VM Common Header Files\fmgen Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\vm\fmgen\opna.h">
+      <Filter>Header Files\VM Common Header Files\fmgen Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\vm\fmgen\psg.h">
+      <Filter>Header Files\VM Common Header Files\fmgen Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\vm\cefucom21\cefucom21.h">
+      <Filter>Header Files\VM Driver Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\vm\cefucom21\mcu.h">
+      <Filter>Header Files\VM Driver Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\vm\cefucom21\pcu.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\cefucom21.ico">
+      <Filter>Resource Files</Filter>
+    </Image>
+  </ItemGroup>
+  <ItemGroup>
+    <ResourceCompile Include="..\src\res\cefucom21.rc">
+      <Filter>Resource Files</Filter>
+    </ResourceCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file