OSDN Git Service

[VM][General] Merge Upstream 2021-05-06. Some variants of PC-6001 are temporally...
authorK.Ohta <whatisthis.sowhat@gmail.com>
Sun, 16 May 2021 07:36:06 +0000 (16:36 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Sun, 16 May 2021 07:36:06 +0000 (16:36 +0900)
60 files changed:
doc/VMs/bx1.txt [new file with mode: 0644]
doc/VMs/readme.txt
source/cmake/config_misccom.cmake
source/cmake/config_pc6001.cmake
source/history.txt
source/readme.txt
source/src/emu.h
source/src/qt/common/qrc/ax1.qrc [new file with mode: 0644]
source/src/qt/common/qrc/bx1.qrc
source/src/qt/machines/bx1/CMakeLists.txt
source/src/qt/machines/bx1/MainWindow.cpp
source/src/qt/machines/bx1/menuclasses.h
source/src/qt/machines/mz700/MainWindow.cpp
source/src/res/bx1.rc
source/src/res/mz1500.rc
source/src/res/mz700.rc
source/src/vm/bx1/CMakeLists.txt
source/src/vm/bx1/bx1.cpp
source/src/vm/bx1/bx1.h
source/src/vm/bx1/display.cpp
source/src/vm/bx1/floppy.cpp [new file with mode: 0644]
source/src/vm/bx1/floppy.h [new file with mode: 0644]
source/src/vm/bx1/keyboard.cpp
source/src/vm/bx1/keyboard.h
source/src/vm/bx1/printer.cpp
source/src/vm/bx1/printer.h
source/src/vm/common_vm/CMakeLists.txt
source/src/vm/datarec.cpp
source/src/vm/hd46505.cpp
source/src/vm/hd46505.h
source/src/vm/mc6843.cpp
source/src/vm/mc6844.cpp
source/src/vm/mcs48.h
source/src/vm/mz700/CMakeLists.txt
source/src/vm/mz700/joystick.cpp [new file with mode: 0644]
source/src/vm/mz700/joystick.h [new file with mode: 0644]
source/src/vm/mz700/memory.cpp
source/src/vm/mz700/memory.h
source/src/vm/mz700/mz700.cpp
source/src/vm/mz700/mz700.h
source/src/vm/pc6001/CMakeLists.txt
source/src/vm/pc6001/memory.cpp
source/src/vm/pc6001/memory.h
source/src/vm/pc6001/memory_draw.cpp [deleted file]
source/src/vm/pc6001/pc6001.cpp
source/src/vm/x1/display.cpp
source/src/vm/x1/display.h
source/src/vm/z80ctc.cpp
source/src/vm/z80ctc.h
source/src/vm/z80dma.cpp
source/src/vm/z80dma.h
source/vc++2008/bx1.vcproj
source/vc++2008/mz1500.vcproj
source/vc++2008/mz700.vcproj
source/vc++2017/bx1.vcxproj
source/vc++2017/bx1.vcxproj.filters
source/vc++2017/mz1500.vcxproj
source/vc++2017/mz1500.vcxproj.filters
source/vc++2017/mz700.vcxproj
source/vc++2017/mz700.vcxproj.filters

diff --git a/doc/VMs/bx1.txt b/doc/VMs/bx1.txt
new file mode 100644 (file)
index 0000000..b9d9c90
--- /dev/null
@@ -0,0 +1,50 @@
+"eBX-1" - CANON BX-1 emulator for Win32
+                                                               5/2/2021
+
+--- Internal ROM image
+
+       BIOS_5000.ROM   ROM CART #1 ($5000 - $5FFF)
+       BIOS_6000.ROM   ROM CART #2 ($6000 - $6FFF)
+       BIOS_7000.ROM   ROM CART #3 ($7000 - $7FFF)
+       BIOS_8000.ROM   ROM CART #4 ($8000 - $8FFF)
+       BIOS_9000.ROM   INTEGRATED BIOS ($9000 - $DFFF)
+       BIOS_F000.ROM   INTEGRATED BIOS ($F000 - $FFFF)
+
+--- Key maps
+
+       PC              Virtual
+       --------------------------------
+       Left Ctrl       CAP
+       Right Ctrl      UC
+       Left Shift      SML
+       Caps            CTRL
+       Tab             INST
+       Escape          CLEAR
+       F1              RUN
+       + Righit Shift  PROGRAM
+       F2              RENAME
+       + Righit Shift  NEW
+       F3              PROTECT
+       + Righit Shift  SECURE
+       F4              PROG-LIST
+       + Righit Shift  OPERATE
+       F5              STOP
+       + Righit Shift  TRACE
+       F6              CONDENSE
+       + Righit Shift  DISK LIST
+       F7              LINE-NO.
+       + Righit Shift  RECALL
+       F9              EXP
+       F10             SIGH CHG
+       F11             CE
+       F12             START
+       Home            ALPHA^X
+       End             (
+       Page Up         SQR
+       Page Down       )
+       Scroll Lock     PAPER FEED
+
+----------------------------------------
+TAKEDA, toshiya
+t-takeda@m1.interq.or.jp
+http://takeda-toshiya.my.coocan.jp/
index ab19903..941ba59 100644 (file)
@@ -1,5 +1,5 @@
 Binary archive of retro pc emulator common source code
-                                                               1/24/2021
+                                                               2/7/2021
 
 --- What's this ?
 
@@ -12,6 +12,7 @@ This archive includes the binaries of the emulators listed below:
        BANDAI
                eRX-78          RX-78
        CANON
+               eBX-1           BX-1
                eX-07           X-07
        CASIO
                eFP-200         FP-200
@@ -495,7 +496,7 @@ Save/Load State info:
        MESS PC-8801 driver
 - vm/pc9801/display.*
        Neko Project 2 by Mr.Yui
-       Improved for EGC by Mr.Ryuji Okamoto (qemu/9821\89ü\91¢\94Å)
+       Improved for EGC by Mr.Ryuji Okamoto (qemu/9821改造版)
 - vm/pcengine/pce.*
        Ootake (joypad)
        xpce (psg)
index a4985da..fbd4c77 100644 (file)
@@ -1,5 +1,6 @@
 set(BUILD_BMJR ON CACHE BOOL "Build for Hitachi BASIC MASTER Jr.")
 set(BUILD_BUBCOM80 ON CACHE BOOL "Build for Systems Formulate BUBCOM-80.")
+set(BUILD_AX1 OFF CACHE BOOL "Build CANON AX-1")
 set(BUILD_BX1 ON CACHE BOOL "Build CANON BX-1")
 
 set(BUILD_CEFUCOM21 ON CACHE BOOL "Build Hino Electronics CEFUCOM-21.")
@@ -42,6 +43,10 @@ if(BUILD_BUBCOM80)
        set(RESOURCE ${PROJECT_SOURCE_DIR}/src/qt/common/qrc/bubcom80.qrc)
        ADD_VM(bubcom80 emububcom80 _BUBCOM80)
 endif()
+if(BUILD_AX1)
+       set(RESOURCE ${PROJECT_SOURCE_DIR}/src/qt/common/qrc/ax1.qrc)
+       ADD_VM(bx1 emuax1 _AX1)
+endif()
 if(BUILD_BX1)
        set(RESOURCE ${PROJECT_SOURCE_DIR}/src/qt/common/qrc/bx1.qrc)
        ADD_VM(bx1 emubx1 _BX1)
index 58c1388..e986317 100644 (file)
@@ -1,8 +1,9 @@
 set(BUILD_PC6001 ON CACHE BOOL "Build for NEC PC-6001")
-set(BUILD_PC6001MK2 ON CACHE BOOL "Build for NEC PC-6001mk2")
-set(BUILD_PC6001MK2SR ON CACHE BOOL "Build for NEC PC-6001mk2SR")
-set(BUILD_PC6601 ON CACHE BOOL "Build for NEC PC-6601")
-set(BUILD_PC6601SR ON CACHE BOOL "Build for NEC PC-6601SR")
+# temporally disable to build from Upstream 2021-05-06; 20210516 K.O
+set(BUILD_PC6001MK2 OFF CACHE BOOL "Build for NEC PC-6001mk2")
+set(BUILD_PC6001MK2SR OFF CACHE BOOL "Build for NEC PC-6001mk2SR")
+set(BUILD_PC6601 OFF CACHE BOOL "Build for NEC PC-6601")
+set(BUILD_PC6601SR OFF CACHE BOOL "Build for NEC PC-6601SR")
 
 if(BUILD_PC6001)
        set(RESOURCE ${PROJECT_SOURCE_DIR}/src/qt/common/qrc/pc6001.qrc)
index 69a8884..93be4ec 100644 (file)
@@ -1,3 +1,23 @@
+5/2/2021
+
+[VM/DATAREC] fix mixing sound track
+[VM/HD46505] support smooth vertical scroll
+[VM/MC6843] fix seek command
+[VM/MC6844] fix data chain register to consider 2/4 channel select bit
+[VM/MC6844] fix to transfer 64K when byte count register is zero
+[VM/Z80CTC] fix to apply written time constant just after reset bit is cleared
+
+[BX1] fix memory map around ram
+[BX1] support cartridge rom images
+[BX1/DISPLAY] add missing font patterns
+[BX1/FLOPPY] support i/o ports around fdc
+[BX1/KEYBOARD] support PROG.SELECT switch
+[BX1/PRINTER] support AUTO PRINT switch
+[MZ1500/JOTSTICK] support joystick (thanks Mr.Koucha-Youkan)
+[PC6001] remove some codes from iP6 Plus
+[X1TURBO/DISPLAY] support smooth vertical scroll
+
+
 2/7/2021
 
 [WINMAIN] improve WM_KEYDOW/WM_KEYUP events for VK_PROCESSKEY case
index aa4fb5f..b01cf7e 100644 (file)
@@ -1,9 +1,9 @@
-retro pc emulator common source code
-                                                               1/24/2021
+Binary archive of retro pc emulator common source code
+                                                               2/7/2021
 
 --- What's this ?
 
-This archive includes the all source codes of emulators listed below:
+This archive includes the binaries of the emulators listed below:
 
        ASCII
                yayaMSX1        MSX1 (by Mr.tanam and Mr.umaiboux)
@@ -49,8 +49,6 @@ This archive includes the all source codes of 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
@@ -95,7 +93,6 @@ This archive includes the all source codes of emulators listed below:
                ePC-100         PC-100
                eTK-80BS        TK-80BS / COMPO BS/80
                eTK-85          TK-85
-               eN5200          N5200 (work in progress)
        NEC-HE
                ePCEngine       PC Engine / SuperGrafx + CD-ROM^2
        Nintendo
@@ -127,7 +124,6 @@ This archive includes the all source codes of emulators listed below:
                EmuZ-3500       MZ-3500
                EmuZ-5500       MZ-5500
                EmuZ-6500       MZ-6500
-               EmuZ-6550       MZ-6550 (work in progress)
                eSM-B-80TE      SM-B-80TE
                eX1             X1
                eX1twin         X1twin
@@ -151,43 +147,191 @@ This archive includes the all source codes of emulators listed below:
                yayaHX-20+      HX-20 + FDD (by Mr.umaiboux)
                EmuPIA          PASOPIA/PASOPIA5
                EmuPIA7         PASOPIA7
-               eJ-3100GT       J-3100GT (work in progress)
-               eJ-3100SL       J-3100SL (work in progress)
        YAMAHA
                eYIS            YIS
        Yuasa Kyouiku System
                eYALKY          YALKY
 
+These binaries are for Windows XP/Vista/7.
+DirectX9 and GDI+ are required.
+They are tested on Windows 7 Home Premium with SP1.
 
---- How to build
 
-Build the projects with the Microsoft Visual C++ 2008 with Service Pack 1 or
-the Microsoft Visual C++ 2017.
+--- How to use
 
-The DirectX SDK is required.
-I recommend the DirectX 9.0 SDK Update (December 2004),
-and dinput.lib included in the DirectX 9.0 SDK Update (October 2004).
+Common menus:
 
-If you install the newer DirectX SDK, for example DirectX SDK (June 2010),
-and it does not contain dinput.lib, pelase modify src/win32/osd.h to change
-the definition of DIRECTINPUT_VERSION from 0x500 to 0x800 as follows:
+Control
+       Reset                   Reset the virtual machine
+       --------
+       CPU x1                  Set CPU clock multipler
+       CPU x2
+       CPU x4
+       CPU x8
+       CPU x16
+       Full Speed              Run simulation at full speed
+       --------
+       Paste                   Auto key hitting from the clip board text
+       Stop                    Stop the auto key hitting
+       Romaji to Kana          Enter kana letters with alphabet keys
+       --------
+       Save State              Save the virtual machine state
+       Load State              Load the virtual machine state
+       --------
+       Debug Main CPU          Open console and debug target CPU like SYMDEB
+       Close Debugger          Close debugger console
+       --------
+       Exit                    Terminate the emulator
 
-//#define DIRECTINPUT_VERSION  0x500
-#define DIRECTINPUT_VERSION    0x800
+Cart
+       Insert                  Insert the cart image
+       Eject                   Eject the cart image
+       --------
+       History                 Insert the cart image
 
-When you use the Microsoft Visual C++ 2017, the dir macros,
-WindowsSDK_IncludePath, WindowsSDK_LibraryPath_x86, and DXSDK_DIR shoud be
-defined and should specifies the install directories of the Windows SDK
-and the DirectX SDK.
-They are usually defined automatically when you install the SDKs.
+FD
+       Insert                  Insert the floppy disk image
+       Eject                   Eject the floppy disk image
+       --------
+       Write Protected         Set the write protection of the inserted disk
+       Correct Timing          Emulate FDC with correct timing
+       Ignore CRC Errors       Ignore crc error status
+       ----
+       History                 Insert the floppy disk image
 
+CMT
+       Play                    Insert the cassette tape image to play
+       Rec                     Insert the cassette tape image to record
+       Eject                   Eject the cassette tape image
+       --------
+       Play Button             Control the cassette tape recorder
+       Stop Button
+       Fast Foward
+       Fast Rewind
+       --------
+       Waveform Shaper         Enable waveform shaping for *.wav data
+       --------
+       History                 Insert the cassette tape image to play
 
---- License
+Device
+       Sound
+               Sound Device Types
+               --------
+               Play FDD Noise  Enable playing FDD noise (seek, head up/down)
+               Play CMT Noise  Enable playing CMT noise (relay on/off)
+               Play CMT Sound  Enable playing CMT signal sound
+       Display
+               Monitor Types
+               --------
+               Scanline        Draw scanline
 
-The copyright belongs to the author, but you can use the source codes
-under the GNU GENERAL PUBLIC LICENSE Version 2.
+Host
+       Rec Movie 60fps         Record the movie to avi and wav files
+       Rec Movie 30fps
+       Rec Movie 15fps
+       Rec Sound               Record the wave file
+       Stop                    Stop recording
+       Capture Screen          Capture the screen to png file
+       --------
+       Screen
+               -
+               Window x1       Set the window size
+                       :
+               Window x8
+               Fullscreen ?x?  Set the fullscreen size
+               --------
+               Dot By Dot      Set the stretch screen mode in the fullscreen
+               Stretch (Aspect)
+               Stretch (Fill)
+               --------
+               Rotate 0deg     Rotate the screen
+               Rotate +90deg
+               Rotate 180deg
+               Rotate -90deg
+       Filter
+               RGB Filter      Enable the RGB CRT filter
+               None
+       Sound
+               2000Hz          Set the sound frequency
+               4000Hz          You need to restart the emulator
+               8000Hz
+               11025Hz
+               22050Hz
+               44100Hz
+               48000Hz
+               96000Hz
+               --------
+               50msec          Set the sound buffer size (latency)
+               100msec         You need to restart the emulator
+               200msec
+               300msec
+               400msec
+               --------
+               Realtime Mix    Mix the sound in realtime
+               Light Weight Mix
+               --------
+               Volume          Set the volume of each sound device
+       Input
+               Joystcik #1/#2  Setup Joystick buttons
+       --------
+       Use Direct2D1           Enable Direct2D1 to render screen
+       Use Direct3D9           Enable Direct3D9 to render screen
+       Wait Vsync              Wait Vsync when Direct3D9 is enabled
+       Use DirectInput         Enable DirectInput for keyboard
+       Disable Windows8 DWM    Disable the Desktop Window Manager
+       Show Status Bar         Show/Hide the status bar in windwo mode
 
-See also COPYING.txt for more details about the license.
+
+--- Note
+
+For Windows PC environment:
+
+       Support Windows PC compatible mouse and joystick devices.
+
+       Accelerator key:
+               ALT+RETURN  - Switch window / fullscreen
+               CTRL+RETURN - Enable/Disenable mouse control
+               APPLICATION - Enable/Disable full speed emulation
+               CTR+APPLICATION - Enable/Disable roman to kana conversion
+
+       *) While the mouse control is enabled, the mouse cursor is hidden.
+
+Floppy disk images:
+
+       P88SR D88       (*.d88;*.d77;*.1dd)
+       TeleDisk        (*.td0)
+       ImageDisk       (*.imd)
+       CPDRead         (*.dsk)
+       T98-NEXT r0     (*.nfd)
+       Anex86          (*.fdi)
+       BKDSK           (*.hdm;*.hd5;*.hd4;*.hdb;*.dd9;*.dd6)
+
+       and any other solid images (*.tfd;*.xdf;*.2d;*.sf7;*.img;*.ima;*.vfd)
+
+Cassette tape images:
+
+       Support wav files (PCM only) or special format images for each machine.
+
+CD-ROM images:
+
+       Support BIN/IMG+CUE or IMG+CCD (CloneCD) format images.
+
+FDD noise:
+
+       Place the wave files below: FDDSEEK.WAV. HEADDOWN.WAV. HEADUP.WAV
+
+CMT noise:
+
+       Place the wave files below: RELAY_ON.WAV, RELAYOFF.WAV, FAST_FWD.WAV
+
+Save/Load State info:
+
+       The state file contains any disk or other images.
+       Please NEVER upload your state files on the web.
+
+       The state file format will be often changed.
+       Please don't invite your state file can be loaded after you update
+       the emulator binary.
 
 
 --- Thanks
@@ -219,7 +363,9 @@ See also COPYING.txt for more details about the license.
 - vm/i386_np21.*
        Neko Project 21/W i386 core
 - vm/i8259.*
-       Neko Project 2 and MESS 8259 core
+       Neko Project 2 and MESS i8259 core
+- vm/i8279.*
+       MAME i8279 core
 - vm/ld700.*
        openMSX LD-700
 - vm/m6502.*
index dddbb5e..d63ac5e 100644 (file)
@@ -19,6 +19,8 @@
 //     #define _FDC_DEBUG_LOG
        // output scsi debug log
 //     #define _SCSI_DEBUG_LOG
+       // output dma debug log
+//     #define _DMA_DEBUG_LOG
        // output i/o debug log
 //     #define _IO_DEBUG_LOG
 #endif
diff --git a/source/src/qt/common/qrc/ax1.qrc b/source/src/qt/common/qrc/ax1.qrc
new file mode 100644 (file)
index 0000000..d623fb4
--- /dev/null
@@ -0,0 +1,6 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+    <file alias="default.ico">../../../res/bx1.ico</file>
+    <file alias="bios_and_keys.txt">../../../../../doc/VMs/bx1.txt</file>
+</qresource>
+</RCC>
index 76bd3a0..d623fb4 100644 (file)
@@ -1,6 +1,6 @@
 <!DOCTYPE RCC><RCC version="1.0">
 <qresource>
     <file alias="default.ico">../../../res/bx1.ico</file>
-    <file alias="bios_and_keys.txt">../../../../../doc/VMs/00_still_not_written.txt</file>
+    <file alias="bios_and_keys.txt">../../../../../doc/VMs/bx1.txt</file>
 </qresource>
 </RCC>
index 10c02fa..8006747 100644 (file)
@@ -1,14 +1,14 @@
 message("* qt/emux07")
 
-set(s_qt_bx1_headers
+set(s_qt_${EXE_NAME}_headers
          menuclasses.h
 )
 
-QT5_WRAP_CPP(s_qt_emubx1_headers_MOC ${s_qt_bx1_headers})
+QT5_WRAP_CPP(s_qt_${EXE_NAME}_headers_MOC ${s_qt_${EXE_NAME}_headers})
   
-add_library(qt_emubx1
+add_library(qt_${EXE_NAME}
          MainWindow.cpp
-         ${s_qt_emubx1_headers_MOC}
+         ${s_qt_${EXE_NAME}_headers_MOC}
 )
 
 
index d4e91a0..cd1b09a 100644 (file)
@@ -10,6 +10,8 @@
 #include <QApplication>
 #include <QVariant>
 #include <QtGui>
+#include <QMenu>
+
 #include "commonclasses.h"
 #include "menuclasses.h"
 #include "emu.h"
 
 //QT_BEGIN_NAMESPACE
        
+Object_Menu_Control_BX1::Object_Menu_Control_BX1(QObject *parent, USING_FLAGS *p) : Object_Menu_Control(parent, p)
+{
+}
+
+Object_Menu_Control_BX1::~Object_Menu_Control_BX1()
+{
+}
+
+void Object_Menu_Control_BX1::do_set_dipsw(bool flag)
+{
+       int bitpos = getValue1();
+       uint32_t bit = 0x00000001;
+       if((bitpos < 0) || (bitpos >= 32)) return;
+       bit = bit << bitpos;
+       if(flag) {
+               config.dipswitch = config.dipswitch | bit;
+       } else {
+               config.dipswitch = config.dipswitch & ((uint32_t)~bit);
+       }
+}
+
+Action_Control_BX1::Action_Control_BX1(QObject *parent, USING_FLAGS *p, int num) : Action_Control(parent, p)
+{
+       bx1_binds = new Object_Menu_Control_BX1(parent, p);
+       bx1_binds->setValue1(num);
+}
+
+Action_Control_BX1::~Action_Control_BX1()
+{
+       delete bx1_binds;
+}
 
 void META_MainWindow::setupUI_Emu(void)
 {
-   int i;
+       menuMachine->addSeparator();
+       uint32_t _bit = 0x00000001;
+       for(int i = 0; i < 4; i++) {
+               action_DipSWs[i] = new Action_Control_BX1(this, using_flags, i);
+               action_DipSWs[i]->setCheckable(true);
+               action_DipSWs[i]->setVisible(true);
+               action_DipSWs[i]->setEnabled(true);
+               menuMachine->addAction(action_DipSWs[i]);
+               if((config.dipswitch & _bit) != 0) action_DipSWs[i]->setChecked(true);
+
+               connect(action_DipSWs[i], SIGNAL(toggled(bool)), action_DipSWs[i]->binds, SLOT(do_set_dipsw(bool)));
+               connect(action_DipSWs[i]->binds, SIGNAL(sig_emu_update_config()), this, SLOT(do_emu_update_config()));
+               _bit <<= 1;
+       }
 }
 
 void META_MainWindow::retranslateUi(void)
 {
        Ui_MainWindowBase::retranslateUi();
        retranslateControlMenu("",  false);
+       action_DipSWs[0]->setText(QApplication::translate("MachineBX1", "AUTO PRINT Switch", 0));
+       action_DipSWs[1]->setText(QApplication::translate("MachineBX1", "PROG.SELECT Switch", 0));
+       action_DipSWs[2]->setText(QApplication::translate("MachineBX1", "JPN/ENG Jumper", 0));
+       action_DipSWs[0]->setVisible(true);
+       action_DipSWs[1]->setVisible(true);
+       action_DipSWs[2]->setVisible(true);
+       action_DipSWs[3]->setVisible(false);
+
+       actionPrintDevice[3]->setText(QApplication::translate("MachineBX1", "None", 0));
+       
+       actionPrintDevice[0]->setVisible(true);
+       actionPrintDevice[1]->setVisible(false);
+       actionPrintDevice[2]->setVisible(false);
+       actionPrintDevice[3]->setVisible(true);
+
+
+       actionPrintDevice[0]->setEnabled(true);
+       actionPrintDevice[1]->setEnabled(false);
+       actionPrintDevice[1]->setEnabled(false);
+       actionPrintDevice[3]->setEnabled(true);
+
 #ifdef USE_DEBUGGER
        actionDebugger[0]->setVisible(true);
        actionDebugger[1]->setVisible(false);
@@ -39,6 +106,9 @@ void META_MainWindow::retranslateUi(void)
 
 META_MainWindow::META_MainWindow(USING_FLAGS *p, CSP_Logger *logger, QWidget *parent) : Ui_MainWindow(p, logger, parent)
 {
+       for(int i = 0; i < 4; i++) {
+               action_DipSWs[i] = NULL;
+       }
        setupUI_Emu();
        retranslateUi();
 }
index 860d5ba..4e86ef3 100644 (file)
@@ -2,19 +2,43 @@
 #ifndef _CSP_QT_MENUCLASSES_H
 #define _CSP_QT_MENUCLASSES_H
 
-//#include "commonclasses.h"
+#include "commonclasses.h"
 #include "mainwidget.h"
+#include "vm.h"
 // This extends class CSP_MainWindow as Ui_MainWindow.
 // You may use this as 
+class USING_FLAGS;
+class CSP_Logger;
+
 QT_BEGIN_NAMESPACE
 
+class Object_Menu_Control_BX1: public Object_Menu_Control
+{
+       Q_OBJECT
+public:
+       Object_Menu_Control_BX1(QObject *parent, USING_FLAGS *p);
+       ~Object_Menu_Control_BX1();
+signals:
+       //  int sig_sound_device(int);
+       int sig_emu_update_config(void);
+public slots:
+       void do_set_dipsw(bool flag);
+};
+
+class Action_Control_BX1 : public Action_Control
+{
+       Q_OBJECT
+public:
+       Object_Menu_Control_BX1 *bx1_binds;
+       Action_Control_BX1(QObject *parent, USING_FLAGS *p, int num);
+       ~Action_Control_BX1();
+public slots:
+};
 
-class Ui_MainWindow;
-class USING_FLAGS;
-class CSP_Logger;
 class META_MainWindow : public Ui_MainWindow {
        Q_OBJECT
 protected:
+       Action_Control_BX1 *action_DipSWs[4];
        void setupUI_Emu(void);
        void retranslateUi(void);
 public:
index f11f8eb..a668241 100644 (file)
@@ -70,6 +70,14 @@ void META_MainWindow::retranslateUi(void)
 {
        Ui_MainWindowBase::retranslateUi();
        retranslateControlMenu(" ",  true);
+#if defined(USE_JOYSTICK_TYPE)
+       actionJoystickType[0]->setText(QApplication::translate("MachineMZ700", "MZ-1X03", 0));
+       actionJoystickType[0]->setToolTip(QApplication::translate("MachineMZ700", "Use Sharp MZ-1X03 Joystick unit.", 0));
+       actionJoystickType[1]->setText(QApplication::translate("MachineMZ700", "JOY-700", 0));
+       actionJoystickType[1]->setToolTip(QApplication::translate("MachineMZ700", "Use Tsukumo JOY-700 Joystick unit.", 0));
+       actionJoystickType[2]->setText(QApplication::translate("MachineMZ700", "AM7J", 0));
+       actionJoystickType[2]->setToolTip(QApplication::translate("MachineMZ700", "Use AM7J ATARI-Joystick adapter.", 0));
+#endif
 #if defined(_MZ800)
        menuBootMode->setTitle(QApplication::translate("Machine", "BOOT Mode", 0));
        actionBootMode[0]->setText(QString::fromUtf8("MZ-800"));
@@ -90,6 +98,11 @@ void META_MainWindow::retranslateUi(void)
 #if defined(_MZ1500)
        actionPrintDevice[1]->setText(QString::fromUtf8("MZ-1P17"));
        actionPrintDevice[1]->setToolTip(QApplication::translate("MachineMZ700", "Sharp MZ-1P17 kanji thermal printer.", 0));
+       actionPrintDevice[2]->setText(QString::fromUtf8("PC-PR201"));
+       actionPrintDevice[2]->setToolTip(QApplication::translate("MenuMZ700", "NEC PC-PR201 kanji serial printer.", 0));
+       actionPrintDevice[2]->setEnabled(false);
+       
+       actionPrintDevice[3]->setText(QString::fromUtf8("None"));
 #endif
 #if defined(USE_DRIVE_TYPE)
        menuDriveType->setTitle(QApplication::translate("MachineMZ700", "Floppy Type", 0));
index 7d09fd0..2f8b21e 100644 (file)
@@ -139,6 +139,12 @@ BEGIN
     END
     POPUP "Device"
     BEGIN
+        POPUP "Mode Switch"
+        BEGIN
+            MENUITEM "AUTO PRINT Switch",       ID_VM_DIPSWITCH0
+            MENUITEM "PROG.SELECT Switch",      ID_VM_DIPSWITCH1
+            MENUITEM "JPN/ENG Jumper",          ID_VM_DIPSWITCH2
+        END
         POPUP "Sound"
         BEGIN
             MENUITEM "Play FDD Noise",          ID_VM_SOUND_NOISE_FDD, GRAYED
index 666953f..7576346 100644 (file)
@@ -176,6 +176,12 @@ BEGIN
     END
     POPUP "Device"
     BEGIN
+        POPUP "Joystick"
+        BEGIN
+            MENUITEM "MZ-1X03"                  ID_VM_JOYSTICK_TYPE0
+            MENUITEM "Tsukumo JOY-700"          ID_VM_JOYSTICK_TYPE1
+            MENUITEM "AM7J adapter"             ID_VM_JOYSTICK_TYPE2
+        END
         POPUP "Sound"
         BEGIN
             MENUITEM "Play FDD Noise",          ID_VM_SOUND_NOISE_FDD
@@ -248,6 +254,12 @@ BEGIN
             MENUITEM SEPARATOR
             MENUITEM "Volume",                  ID_SOUND_VOLUME
         END
+        POPUP "Input"
+        BEGIN
+            MENUITEM "Joystick #1",                 ID_INPUT_JOYSTICK0
+            MENUITEM "Joystick #2",                 ID_INPUT_JOYSTICK1
+            MENUITEM "Joystick To Keyboard",        ID_INPUT_JOYTOKEY
+        END
         MENUITEM SEPARATOR
         MENUITEM "Use Direct2D1",               ID_HOST_USE_D2D1
         MENUITEM "Use Direct3D9",               ID_HOST_USE_D3D9
@@ -312,6 +324,60 @@ BEGIN
     DEFPUSHBUTTON   "Reset",IDC_VOLUME_RESET,130,190,50,14
 END
 
+IDD_JOYSTICK DIALOG DISCARDABLE  0, 0, 175, 150
+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
+    LTEXT           "Button #6",IDC_JOYSTICK_CAPTION5,6,81,40,8
+    EDITTEXT        IDC_JOYSTICK_PARAM5,50,79,120,14,ES_MULTILINE
+    LTEXT           "Button #7",IDC_JOYSTICK_CAPTION6,6,96,40,8
+    EDITTEXT        IDC_JOYSTICK_PARAM6,50,94,120,14,ES_MULTILINE
+    LTEXT           "Button #8",IDC_JOYSTICK_CAPTION7,6,111,40,8
+    EDITTEXT        IDC_JOYSTICK_PARAM7,50,109,120,14,ES_MULTILINE
+    DEFPUSHBUTTON   "OK",IDOK,35,130,50,14
+    DEFPUSHBUTTON   "Reset",IDC_JOYSTICK_RESET,90,130,50,14
+END
+
+IDD_JOYTOKEY DIALOG DISCARDABLE  0, 0, 175, 235
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Joystick To Keyboard"
+FONT 9, "MS PGothic"
+BEGIN
+    CONTROL         "Enable Joystick To Keyboard",IDC_JOYTOKEY_CHECK0,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,6,164,8
+    CONTROL         "Cursor Key",IDC_JOYTOKEY_RADIO0,"Button",BS_AUTORADIOBUTTON,6,26,164,7
+    CONTROL         "NumPad Key (4-Directions)",IDC_JOYTOKEY_RADIO1,"Button",BS_AUTORADIOBUTTON,6,41,164,7
+    CONTROL         "NumPad Key (8-Directions)",IDC_JOYTOKEY_RADIO2,"Button",BS_AUTORADIOBUTTON,6,56,164,7
+    CONTROL         "Press NumPad 5 To Release Stick",IDC_JOYTOKEY_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,71,164,8
+    LTEXT           "Button #1",IDC_JOYSTICK_CAPTION0,6,91,40,8
+    EDITTEXT        IDC_JOYSTICK_PARAM0,50,89,120,14,ES_MULTILINE
+    LTEXT           "Button #2",IDC_JOYSTICK_CAPTION1,6,106,40,8
+    EDITTEXT        IDC_JOYSTICK_PARAM1,50,104,120,14,ES_MULTILINE
+    LTEXT           "Button #3",IDC_JOYSTICK_CAPTION2,6,121,40,8
+    EDITTEXT        IDC_JOYSTICK_PARAM2,50,119,120,14,ES_MULTILINE
+    LTEXT           "Button #4",IDC_JOYSTICK_CAPTION3,6,136,40,8
+    EDITTEXT        IDC_JOYSTICK_PARAM3,50,134,120,14,ES_MULTILINE
+    LTEXT           "Button #5",IDC_JOYSTICK_CAPTION4,6,151,40,8
+    EDITTEXT        IDC_JOYSTICK_PARAM4,50,149,120,14,ES_MULTILINE
+    LTEXT           "Button #6",IDC_JOYSTICK_CAPTION5,6,166,40,8
+    EDITTEXT        IDC_JOYSTICK_PARAM5,50,164,120,14,ES_MULTILINE
+    LTEXT           "Button #7",IDC_JOYSTICK_CAPTION6,6,181,40,8
+    EDITTEXT        IDC_JOYSTICK_PARAM6,50,179,120,14,ES_MULTILINE
+    LTEXT           "Button #8",IDC_JOYSTICK_CAPTION7,6,196,40,8
+    EDITTEXT        IDC_JOYSTICK_PARAM7,50,194,120,14,ES_MULTILINE
+    DEFPUSHBUTTON   "OK",IDOK,35,215,50,14
+    DEFPUSHBUTTON   "Reset",IDC_JOYSTICK_RESET,90,215,50,14
+END
 
 
 #ifndef APSTUDIO_INVOKED
index aec633d..b8d60c5 100644 (file)
@@ -147,6 +147,12 @@ BEGIN
         BEGIN
             MENUITEM "PCG-700",                 ID_VM_DIPSWITCH0
         END
+        POPUP "Joystick"
+        BEGIN
+            MENUITEM "MZ-1X03"                  ID_VM_JOYSTICK_TYPE0
+            MENUITEM "Tsukumo JOY-700"          ID_VM_JOYSTICK_TYPE1
+            MENUITEM "AM7J adapter"             ID_VM_JOYSTICK_TYPE2
+        END
         POPUP "Sound"
         BEGIN
             MENUITEM "Play CMT Noise",          ID_VM_SOUND_NOISE_CMT
@@ -211,6 +217,12 @@ BEGIN
             MENUITEM SEPARATOR
             MENUITEM "Volume",                  ID_SOUND_VOLUME
         END
+        POPUP "Input"
+        BEGIN
+            MENUITEM "Joystick #1",                 ID_INPUT_JOYSTICK0
+            MENUITEM "Joystick #2",                 ID_INPUT_JOYSTICK1
+            MENUITEM "Joystick To Keyboard",        ID_INPUT_JOYTOKEY
+        END
         MENUITEM SEPARATOR
         MENUITEM "Use Direct2D1",               ID_HOST_USE_D2D1
         MENUITEM "Use Direct3D9",               ID_HOST_USE_D3D9
@@ -257,6 +269,60 @@ BEGIN
     DEFPUSHBUTTON   "Reset",IDC_VOLUME_RESET,130,100,50,14
 END
 
+IDD_JOYSTICK DIALOG DISCARDABLE  0, 0, 175, 150
+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
+    LTEXT           "Button #6",IDC_JOYSTICK_CAPTION5,6,81,40,8
+    EDITTEXT        IDC_JOYSTICK_PARAM5,50,79,120,14,ES_MULTILINE
+    LTEXT           "Button #7",IDC_JOYSTICK_CAPTION6,6,96,40,8
+    EDITTEXT        IDC_JOYSTICK_PARAM6,50,94,120,14,ES_MULTILINE
+    LTEXT           "Button #8",IDC_JOYSTICK_CAPTION7,6,111,40,8
+    EDITTEXT        IDC_JOYSTICK_PARAM7,50,109,120,14,ES_MULTILINE
+    DEFPUSHBUTTON   "OK",IDOK,35,130,50,14
+    DEFPUSHBUTTON   "Reset",IDC_JOYSTICK_RESET,90,130,50,14
+END
+
+IDD_JOYTOKEY DIALOG DISCARDABLE  0, 0, 175, 235
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Joystick To Keyboard"
+FONT 9, "MS PGothic"
+BEGIN
+    CONTROL         "Enable Joystick To Keyboard",IDC_JOYTOKEY_CHECK0,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,6,164,8
+    CONTROL         "Cursor Key",IDC_JOYTOKEY_RADIO0,"Button",BS_AUTORADIOBUTTON,6,26,164,7
+    CONTROL         "NumPad Key (4-Directions)",IDC_JOYTOKEY_RADIO1,"Button",BS_AUTORADIOBUTTON,6,41,164,7
+    CONTROL         "NumPad Key (8-Directions)",IDC_JOYTOKEY_RADIO2,"Button",BS_AUTORADIOBUTTON,6,56,164,7
+    CONTROL         "Press NumPad 5 To Release Stick",IDC_JOYTOKEY_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,71,164,8
+    LTEXT           "Button #1",IDC_JOYSTICK_CAPTION0,6,91,40,8
+    EDITTEXT        IDC_JOYSTICK_PARAM0,50,89,120,14,ES_MULTILINE
+    LTEXT           "Button #2",IDC_JOYSTICK_CAPTION1,6,106,40,8
+    EDITTEXT        IDC_JOYSTICK_PARAM1,50,104,120,14,ES_MULTILINE
+    LTEXT           "Button #3",IDC_JOYSTICK_CAPTION2,6,121,40,8
+    EDITTEXT        IDC_JOYSTICK_PARAM2,50,119,120,14,ES_MULTILINE
+    LTEXT           "Button #4",IDC_JOYSTICK_CAPTION3,6,136,40,8
+    EDITTEXT        IDC_JOYSTICK_PARAM3,50,134,120,14,ES_MULTILINE
+    LTEXT           "Button #5",IDC_JOYSTICK_CAPTION4,6,151,40,8
+    EDITTEXT        IDC_JOYSTICK_PARAM4,50,149,120,14,ES_MULTILINE
+    LTEXT           "Button #6",IDC_JOYSTICK_CAPTION5,6,166,40,8
+    EDITTEXT        IDC_JOYSTICK_PARAM5,50,164,120,14,ES_MULTILINE
+    LTEXT           "Button #7",IDC_JOYSTICK_CAPTION6,6,181,40,8
+    EDITTEXT        IDC_JOYSTICK_PARAM6,50,179,120,14,ES_MULTILINE
+    LTEXT           "Button #8",IDC_JOYSTICK_CAPTION7,6,196,40,8
+    EDITTEXT        IDC_JOYSTICK_PARAM7,50,194,120,14,ES_MULTILINE
+    DEFPUSHBUTTON   "OK",IDOK,35,215,50,14
+    DEFPUSHBUTTON   "Reset",IDC_JOYSTICK_RESET,90,215,50,14
+END
 
 
 #ifndef APSTUDIO_INVOKED
index 030cafa..94665a5 100644 (file)
@@ -1,10 +1,11 @@
 cmake_minimum_required (VERSION 2.6)
 
-message("* vm/emubx1")
+message("* vm/${EXE_NAME}")
 
-add_library(vm_emubx1
+add_library(vm_${EXE_NAME}
        bx1.cpp
        display.cpp
+       floppy.cpp
        keyboard.cpp
        printer.cpp
 )
index 6fea276..7ece826 100644 (file)
 #endif
 
 #include "display.h"
+#include "floppy.h"
 #include "keyboard.h"
 #include "printer.h"
 
 using BX1::DISPLAY;
+using BX1::FLOPPY;
 using BX1::KEYBOARD;
 using BX1::PRINTER;
 
@@ -53,6 +55,7 @@ VM::VM(EMU_TEMPLATE* parent_emu) : VM_TEMPLATE(parent_emu)
        dma = new MC6844(this, emu);    // HD46504
        
        display = new DISPLAY(this, emu);
+       floppy = new FLOPPY(this, emu);
        keyboard = new KEYBOARD(this, emu);
        printer = new PRINTER(this, emu);
        
@@ -62,13 +65,13 @@ VM::VM(EMU_TEMPLATE* parent_emu) : VM_TEMPLATE(parent_emu)
        event->set_context_sound(fdc->get_context_noise_head_down());
        event->set_context_sound(fdc->get_context_noise_head_up());
        
-//     fdc->set_context_irq(cpu, SIG_CPU_IRQ, 1);
        fdc->set_context_drq(dma, SIG_MC6844_TX_RQ_0, 1);
        dma->set_context_memory(memory);
        dma->set_context_ch0(fdc);
        dma->set_context_ch1(display);
        
        display->set_context_dma(dma);
+       floppy->set_context_fdc(fdc);
        printer->set_context_ram(ram);
        
        // cpu bus
@@ -77,7 +80,8 @@ VM::VM(EMU_TEMPLATE* parent_emu) : VM_TEMPLATE(parent_emu)
        DEBUGGER *debugger = new DEBUGGER(this, emu);
        cpu->set_context_debugger(debugger);
        
-//     debugger->add_symbol(0x015c, _T("VRAM_TOP"));
+       debugger->add_symbol(0x015c, _T("VRAM_TOP"));
+       
        debugger->add_symbol(0xe121, _T("KEY_DOWN"));
        debugger->add_symbol(0xe122, _T("KEY_UP"));
        debugger->add_symbol(0xe140, _T("DMA[0].ADDR_HI"));
@@ -111,25 +115,44 @@ VM::VM(EMU_TEMPLATE* parent_emu) : VM_TEMPLATE(parent_emu)
        debugger->add_symbol(0xe185, _T("FDC.GEN_COUNT"));
        debugger->add_symbol(0xe186, _T("FDC.CRC_CTRL"));
        debugger->add_symbol(0xe187, _T("FDC.LOGIC_TRACK"));
+       debugger->add_symbol(0xe18a, _T("FDD.MOTOR_ON")); // ???
 #endif
        
        // memory bus
        memset(ram, 0x00, sizeof(ram));
+       memset(cart_5000, 0xff, sizeof(cart_5000));
+       memset(cart_6000, 0xff, sizeof(cart_6000));
+       memset(cart_7000, 0xff, sizeof(cart_7000));
+       memset(cart_8000, 0xff, sizeof(cart_8000));
        memset(bios_9000, 0xff, sizeof(bios_9000));
        memset(bios_f000, 0xff, sizeof(bios_f000));
        
+       memory->read_bios(_T("CART_5000.ROM"), cart_5000, sizeof(cart_5000));
+       memory->read_bios(_T("CART_6000.ROM"), cart_6000, sizeof(cart_6000));
+       memory->read_bios(_T("CART_7000.ROM"), cart_7000, sizeof(cart_7000));
+       memory->read_bios(_T("CART_8000.ROM"), cart_8000, sizeof(cart_8000));
        memory->read_bios(_T("BIOS_9000.ROM"), bios_9000, sizeof(bios_9000));
        memory->read_bios(_T("BIOS_F000.ROM"), bios_f000, sizeof(bios_f000));
        
-       memory->set_memory_rw(0x0000, 0x3fff, ram);
+#if defined(_AX1)
+       memory->set_memory_rw(0x0000, 0x07ff, ram + 0x0000);
+#elif defined(_BX1)
+       memory->set_memory_rw(0x0000, 0x03ff, ram + 0x0000);
+#endif
+       memory->set_memory_rw(0x1000, 0x4fff, ram + 0x1000);
+       memory->set_memory_r(0x5000, 0x5fff, cart_5000);
+       memory->set_memory_r(0x6000, 0x6fff, cart_6000);
+       memory->set_memory_r(0x7000, 0x7fff, cart_7000);
+       memory->set_memory_r(0x8000, 0x8fff, cart_8000);
        memory->set_memory_r(0x9000, 0xdfff, bios_9000);
        memory->set_memory_mapped_io_rw(0xe000, 0xefff, io);
        memory->set_memory_r(0xf000, 0xffff, bios_f000);
        
        // io bus
-       io->set_iomap_range_rw(0xe121, 0xe122, keyboard);
+       io->set_iomap_range_r (0xe121, 0xe122, keyboard);
        io->set_iomap_range_rw(0xe140, 0xe156, dma);
        io->set_iomap_range_rw(0xe180, 0xe187, fdc);
+       io->set_iomap_range_rw(0xe188, 0xe18f, floppy);
        io->set_iomap_range_rw(0xe210, 0xe212, printer); // ?????
 
 //! @note Not remove below comment. 20210511 K.O       
@@ -305,14 +328,11 @@ void VM::key_down(int code, bool repeat)
 {
        if(!repeat) {
                keyboard->key_down(code);
-//             printer->key_down(code);
        }
 }
 
 void VM::key_up(int code)
 {
-       keyboard->key_up(code);
-//     printer->key_up(code);
 }
 
 // ----------------------------------------------------------------------------
@@ -322,6 +342,30 @@ void VM::key_up(int code)
 void VM::open_floppy_disk(int drv, const _TCHAR* file_path, int bank)
 {
        fdc->open_disk(drv, file_path, bank);
+       
+       // unformatted disk image is inserted
+       if(fdc->is_disk_inserted(drv)) {
+               DISK *disk = fdc->get_disk_handler(drv);
+               bool formatted = false;
+               
+               for(int trk = 0; trk < 35; trk++) {
+                       if(disk->get_track(trk, 0)) {
+                               formatted = true;
+                               break;
+                       }
+               }
+               if(!formatted) {
+                       // format disk image
+                       for(int trk = 0; trk < 35; trk++) {
+                               disk->format_track(trk, 0);
+                               disk->track_mfm = false;
+                               
+                               for(int sec = 1; sec <= 16; sec++) {
+                                       disk->insert_sector(trk, 0, sec, 0, false, false, 0x00, 128);
+                               }
+                       }
+               }
+       }
 }
 
 void VM::close_floppy_disk(int drv)
@@ -361,7 +405,7 @@ void VM::update_config()
        }
 }
 
-#define STATE_VERSION  1
+#define STATE_VERSION  2
 
 bool VM::process_state(FILEIO* state_fio, bool loading)
 {
index 9542d22..b2a4248 100644 (file)
@@ -8,8 +8,13 @@
 #ifndef _BX1_H_
 #define _BX1_H_
 
+#if defined(_AX1)
+#define DEVICE_NAME            "CANON AX-1"
+#define CONFIG_NAME            "ax1"
+#elif defined(_BX1)
 #define DEVICE_NAME            "CANON BX-1"
 #define CONFIG_NAME            "bx1"
+#endif
 
 // device informations for virtual machine
 #define FRAMES_PER_SEC         30
 #define SCREEN_HEIGHT          (7 * 5)
 #define MAX_DRIVE              1
 #define MEMORY_ADDR_MAX                0x10000
-#define MEMORY_BANK_SIZE       0x1000
+#define MEMORY_BANK_SIZE       0x400
 #define IO_ADDR_MAX            0x10000
 #define HAS_MC6800
 
 // device informations for win32
+#define USE_DIPSWITCH
 #define USE_FLOPPY_DISK                1
 #define USE_NUMPAD_ENTER
 #define USE_AUTO_KEY           6
@@ -31,6 +37,8 @@
 #define USE_AUTO_KEY_CAPS
 #define DONT_KEEEP_KEY_PRESSED
 #define USE_SOUND_VOLUME       2
+#define USE_PRINTER
+#define USE_PRINTER_TYPE       4
 #define USE_DEBUGGER
 #define USE_STATE
 
@@ -56,6 +64,7 @@ class MC6844;
 
 namespace BX1 {
        class DISPLAY;
+       class FLOPPY;
        class KEYBOARD;
        class PRINTER;
 }
@@ -74,12 +83,17 @@ protected:
        MC6844* dma;
        
        BX1::DISPLAY* display;
+       BX1::FLOPPY* floppy;
        BX1::KEYBOARD* keyboard;
        BX1::PRINTER* printer;
        
-       uint8_t bios_9000[0x5000]; // 9000h-DFFFh
-       uint8_t bios_f000[0x1000]; // F000h-FFFFh
-       uint8_t ram[0x4000];
+       uint8_t cart_5000[0x1000]; // 5000h-5FFFh
+       uint8_t cart_6000[0x1000]; // 6000h-6FFFh
+       uint8_t cart_7000[0x1000]; // 7000h-7FFFh
+       uint8_t cart_8000[0x1000]; // 8000h-8FFFh
+       uint8_t bios_9000[0x5000]; // 9000h-DFFFh (Integrated)
+       uint8_t bios_f000[0x1000]; // F000h-FFFFh (Integrated)
+       uint8_t ram[0x5000];
        
 public:
        // ----------------------------------------
index 9e44a6a..f151c2c 100644 (file)
@@ -18,7 +18,7 @@ static const BYTE font[0x80][7] = {
        {0x04, 0x0F, 0x14, 0x0E, 0x05, 0x1E, 0x04}, {0x19, 0x1A, 0x02, 0x04, 0x08, 0x0B, 0x13},
        {0x0C, 0x12, 0x14, 0x08, 0x15, 0x12, 0x0D}, {0x0C, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00},
        {0x02, 0x04, 0x08, 0x08, 0x08, 0x04, 0x02}, {0x08, 0x04, 0x02, 0x02, 0x02, 0x04, 0x08},
-       {0x04, 0x15, 0x0E, 0x04, 0x0E, 0x15, 0x04}, {0x04, 0x04, 0x04, 0x1F, 0x04, 0x04, 0x04},
+       {0x04, 0x15, 0x0E, 0x04, 0x0E, 0x15, 0x04}, {0x00, 0x04, 0x04, 0x1F, 0x04, 0x04, 0x00},
        {0x00, 0x00, 0x00, 0x00, 0x0C, 0x04, 0x08}, {0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00},
        {0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C}, {0x01, 0x02, 0x02, 0x04, 0x08, 0x08, 0x10},
 
@@ -65,29 +65,45 @@ static const BYTE font[0x80][7] = {
        {0x00, 0x00, 0x11, 0x0A, 0x04, 0x0A, 0x11}, {0x00, 0x00, 0x11, 0x11, 0x0F, 0x01, 0x0E},
        {0x00, 0x00, 0x1F, 0x02, 0x04, 0x08, 0x1F}, {0x03, 0x04, 0x04, 0x18, 0x04, 0x04, 0x03},
        {0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04}, {0x18, 0x04, 0x04, 0x03, 0x04, 0x04, 0x18},
-       {0x09, 0x15, 0x12, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
-
-       {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x04, 0x0E, 0x0E, 0x04, 0x04, 0x00, 0x04},
-       {0x1B, 0x09, 0x12, 0x00, 0x00, 0x00, 0x00}, {0x0A, 0x0A, 0x1F, 0x0A, 0x1F, 0x0A, 0x0A},
-       {0x04, 0x0F, 0x14, 0x0E, 0x05, 0x1E, 0x04}, {0x19, 0x1A, 0x02, 0x04, 0x08, 0x0B, 0x13},
-       {0x0C, 0x12, 0x14, 0x08, 0x15, 0x12, 0x0D}, {0x0C, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00},
-       {0x02, 0x04, 0x08, 0x08, 0x08, 0x04, 0x02}, {0x08, 0x04, 0x02, 0x02, 0x02, 0x04, 0x08},
-       {0x04, 0x15, 0x0E, 0x04, 0x0E, 0x15, 0x04}, {0x04, 0x04, 0x04, 0x1F, 0x04, 0x04, 0x04},
-       {0x00, 0x00, 0x00, 0x00, 0x0C, 0x04, 0x08}, {0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00},
-       {0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C}, {0x01, 0x02, 0x02, 0x04, 0x08, 0x08, 0x10},
-
-       {0x0E, 0x11, 0x13, 0x15, 0x19, 0x11, 0x0E}, {0x04, 0x0C, 0x04, 0x04, 0x04, 0x04, 0x0E},
-       {0x0E, 0x11, 0x01, 0x02, 0x04, 0x08, 0x1F}, {0x0E, 0x11, 0x01, 0x0E, 0x01, 0x11, 0x0E},
-       {0x02, 0x06, 0x0A, 0x12, 0x1F, 0x02, 0x02}, {0x1F, 0x10, 0x10, 0x1E, 0x01, 0x11, 0x0E},
-       {0x06, 0x08, 0x10, 0x1E, 0x11, 0x11, 0x0E}, {0x1F, 0x11, 0x11, 0x02, 0x02, 0x04, 0x04},
-       {0x0E, 0x11, 0x11, 0x0E, 0x11, 0x11, 0x0E}, {0x0E, 0x11, 0x11, 0x0F, 0x01, 0x11, 0x0E},
-       {0x00, 0x0C, 0x0C, 0x00, 0x0C, 0x0C, 0x00}, {0x00, 0x0C, 0x0C, 0x00, 0x0C, 0x04, 0x08},
-       {0x01, 0x02, 0x04, 0x08, 0x04, 0x02, 0x01}, {0x00, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x00},
-       {0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10}, {0x0E, 0x11, 0x01, 0x02, 0x04, 0x00, 0x04},
+       {0x09, 0x15, 0x12, 0x00, 0x00, 0x00, 0x00}, {0x15, 0x0A, 0x15, 0x0A, 0x15, 0x0A, 0x15},
+
+       {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x04, 0x0E, 0x15, 0x04, 0x04, 0x00},
+       {0x00, 0x04, 0x04, 0x15, 0x0E, 0x04, 0x00}, {0x00, 0x04, 0x02, 0x1F, 0x02, 0x04, 0x00},
+       {0x00, 0x04, 0x08, 0x1F, 0x08, 0x04, 0x00}, {0x00, 0x04, 0x1F, 0x04, 0x1F, 0x04, 0x00},
+       {0x01, 0x06, 0x18, 0x06, 0x01, 0x00, 0x1F}, {0x10, 0x0C, 0x03, 0x0C, 0x10, 0x00, 0x1F},
+       {0x00, 0x11, 0x0A, 0x04, 0x0A, 0x11, 0x00}, {0x00, 0x04, 0x00, 0x1F, 0x00, 0x04, 0x00},
+       {0x07, 0x04, 0x04, 0x04, 0x14, 0x14, 0x0C}, {0x0A, 0x04, 0x0A, 0x00, 0x00, 0x00, 0x00},
+       {0x00, 0x00, 0x1F, 0x0A, 0x0A, 0x13, 0x00}, {0x1F, 0x11, 0x08, 0x04, 0x08, 0x11, 0x1F},
+       {0x04, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00}, {0x15, 0x0A, 0x15, 0x0A, 0x15, 0x0A, 0x15},
+
+       {0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x0E, 0x0A, 0x0E, 0x00, 0x00},
+       {0x00, 0x00, 0x0A, 0x04, 0x0A, 0x00, 0x00}, {0x00, 0x00, 0x04, 0x0E, 0x04, 0x00, 0x00},
+       {0x00, 0x00, 0x04, 0x0A, 0x04, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00},
+       {0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04}, {0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x04},
+       {0x00, 0x00, 0x00, 0x1C, 0x04, 0x04, 0x04}, {0x04, 0x04, 0x04, 0x1C, 0x00, 0x00, 0x00},
+       {0x0A, 0x15, 0x0A, 0x15, 0x0A, 0x15, 0x0A}, {0x00, 0x01, 0x03, 0x05, 0x09, 0x1F, 0x00},
+       {0x0E, 0x0A, 0x0E, 0x00, 0x00, 0x00, 0x00}, {0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00},
+       {0x05, 0x08, 0x08, 0x1E, 0x08, 0x10, 0x1F}, {0x00, 0x00, 0x15, 0x0A, 0x15, 0x0A, 0x15},
 };
 
 void DISPLAY::initialize()
 {
+#if 0
+       // test font pattern
+       for(int i = 0; i < 0x80; i++) {
+               for(int j = 0; j < 7; j++) {
+                       this->out_debug_log(create_string(_T("%02X:%d\t%c%c%c%c%c\n"),
+                               i, j,
+                               font[i][j] & 0x10 ? _T('#') : _T(' '),
+                               font[i][j] & 0x08 ? _T('#') : _T(' '),
+                               font[i][j] & 0x04 ? _T('#') : _T(' '),
+                               font[i][j] & 0x02 ? _T('#') : _T(' '),
+                               font[i][j] & 0x01 ? _T('#') : _T(' ')
+                       ));
+               }
+               this->out_debug_log(_T("\n"));
+       }
+#endif 
        // register event
        
        register_frame_event(this);
diff --git a/source/src/vm/bx1/floppy.cpp b/source/src/vm/bx1/floppy.cpp
new file mode 100644 (file)
index 0000000..803a1d7
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+       CANON BX-1 Emulator 'eBX-1'
+
+       Author : Takeda.Toshiya
+       Date   : 2021.02.14-
+
+       [ floppy ]
+*/
+
+#include "floppy.h"
+#include "../mc6843.h"
+
+namespace BX1 {
+uint32_t FLOPPY::read_io8(uint32_t addr)
+{
+       uint32_t value = 0xff;
+       
+       switch(addr & 0xffff) {
+       case 0xe189:
+               value  = d_fdc->is_disk_inserted(0) && d_fdc->is_disk_protected(0) ? 1 : 0;
+               value |= d_fdc->is_disk_inserted(1) && d_fdc->is_disk_protected(1) ? 2 : 0;
+               break;
+       default:
+               break;
+       }
+       return value;
+}
+
+void FLOPPY::write_io8(uint32_t addr, uint32_t data)
+{
+       switch(addr & 0xffff) {
+       case 0xe18a:
+               // drive reg
+               switch(data & 0x0f) {
+               case 0x01:
+                       d_fdc->write_signal(SIG_MC6843_DRIVEREG, 0, 3);
+                       break;
+               case 0x02:
+                       d_fdc->write_signal(SIG_MC6843_DRIVEREG, 1, 3);
+                       break;
+               case 0x04:
+                       d_fdc->write_signal(SIG_MC6843_DRIVEREG, 2, 3);
+                       break;
+               case 0x08:
+//                     d_fdc->write_signal(SIG_MC6843_DRIVEREG, 3, 3);
+                       break;
+               }
+               break;
+       case 0xe18c:
+               // ??? only clear
+               break;
+       default:
+               break;
+       }
+}
+
+}
diff --git a/source/src/vm/bx1/floppy.h b/source/src/vm/bx1/floppy.h
new file mode 100644 (file)
index 0000000..5813710
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+       CANON BX-1 Emulator 'eBX-1'
+
+       Author : Takeda.Toshiya
+       Date   : 2021.02.14-
+
+       [ floppy ]
+*/
+
+#ifndef _FLOPPY_H_
+#define _FLOPPY_H_
+
+#include "../vm.h"
+#include "../../emu_template.h"
+#include "../device.h"
+
+class MC6843;
+
+namespace BX1 {
+class FLOPPY : public DEVICE
+{
+private:
+       MC6843* d_fdc;
+       
+public:
+       FLOPPY(VM_TEMPLATE* parent_vm, EMU_TEMPLATE* parent_emu) : DEVICE(parent_vm, parent_emu)
+       {
+               set_device_name(_T("Floppy I/F"));
+       }
+       ~FLOPPY() {}
+       
+       // common functions
+       virtual void __FASTCALL write_io8(uint32_t addr, uint32_t data);
+       virtual uint32_t __FASTCALL read_io8(uint32_t addr);
+       
+       // unique function
+       void set_context_fdc(MC6843* device)
+       {
+               d_fdc = device;
+       }
+};
+}
+
+#endif
+
index 0f72a05..a1a180b 100644 (file)
 
 namespace BX1 {
 
-static const int table[256][2] = {
-       {  -1,   -1},   // 00 
-       {  -1,   -1},   // 01 
-       {  -1,   -1},   // 02 
-       {  -1,   -1},   // 03 
-       {  -1,   -1},   // 04 
-       {  -1,   -1},   // 05 
-       {  -1,   -1},   // 06 
-       {  -1,   -1},   // 07 
-       {  -1,   -1},   // 08 Back
-       {0x13, 0x13},   // 09 Tab       INST
-       {  -1,   -1},   // 0A 
-       {  -1,   -1},   // 0B 
-       {  -1,   -1},   // 0C 
-       {0x42, 0x42},   // 0D Enter     CR/LF
-       {  -1,   -1},   // 0E 
-       {  -1,   -1},   // 0F 
-       {  -1,   -1},   // 10 Shift
-       {  -1,   -1},   // 11 Ctrl
-       {  -1,   -1},   // 12 Alt
-       {  -1,   -1},   // 13 Pause
-       {0x12, 0x12},   // 14 Caps      CTRL
-       {  -1,   -1},   // 15 Kana
-       {  -1,   -1},   // 16 
-       {  -1,   -1},   // 17 
-       {  -1,   -1},   // 18 
-       {  -1,   -1},   // 19 Kanji
-       {  -1,   -1},   // 1A 
-       {0x4F, 0x4F},   // 1B Escape    CLEAR
-       {  -1,   -1},   // 1C Convert
-       {  -1,   -1},   // 1D NonConv
-       {  -1,   -1},   // 1E 
-       {  -1,   -1},   // 1F 
-       {0x41, 0x41},   // 20 Space     SPACE
-       {0x49, 0x49},   // 21 PgUp      SQR
-       {0x4A, 0x4A},   // 22 PgDwn     )
-       {0x46, 0x46},   // 23 End       (
-       {0x45, 0x45},   // 24 Home      alpha^x
-       {0x63, 0x63},   // 25 Left
-       {0x62, 0x62},   // 26 Up
-       {0x65, 0x65},   // 27 Right
-       {0x64, 0x64},   // 28 Down
-       {  -1,   -1},   // 29 
-       {  -1,   -1},   // 2A 
-       {  -1,   -1},   // 2B 
-       {  -1,   -1},   // 2C 
-       {0x60, 0x60},   // 2D Ins       INSERT
-       {0x61, 0x61},   // 2E Del       DELETE
-       {  -1,   -1},   // 2F 
-       {0x3B, 0x3B},   // 30 0
-       {0x17, 0x17},   // 31 1
-       {0x1B, 0x1B},   // 32 2
-       {0x1F, 0x1F},   // 33 3
-       {0x23, 0x23},   // 34 4
-       {0x27, 0x27},   // 35 5
-       {0x2B, 0x2B},   // 36 6
-       {0x2F, 0x2F},   // 37 7
-       {0x33, 0x33},   // 38 8
-       {0x37, 0x37},   // 39 9
-       {  -1,   -1},   // 3A 
-       {  -1,   -1},   // 3B 
-       {  -1,   -1},   // 3C 
-       {  -1,   -1},   // 3D 
-       {  -1,   -1},   // 3E 
-       {  -1,   -1},   // 3F 
-       {  -1,   -1},   // 40 
-       {0x15, 0x15},   // 41 A
-       {0x24, 0x24},   // 42 B
-       {0x1C, 0x1C},   // 43 C
-       {0x1D, 0x1D},   // 44 D
-       {0x1E, 0x1E},   // 45 E
-       {0x21, 0x21},   // 46 F
-       {0x25, 0x25},   // 47 G
-       {0x29, 0x29},   // 48 H
-       {0x32, 0x32},   // 49 I
-       {0x2D, 0x2D},   // 4A J
-       {0x31, 0x31},   // 4B K
-       {0x35, 0x35},   // 4C L
-       {0x2C, 0x2C},   // 4D M
-       {0x28, 0x28},   // 4E N
-       {0x36, 0x36},   // 4F O
-       {0x3A, 0x3A},   // 50 P
-       {0x16, 0x16},   // 51 Q
-       {0x22, 0x22},   // 52 R
-       {0x19, 0x19},   // 53 S
-       {0x26, 0x26},   // 54 T
-       {0x2E, 0x2E},   // 55 U
-       {0x20, 0x20},   // 56 V
-       {0x1A, 0x1A},   // 57 W
-       {0x18, 0x18},   // 58 X
-       {0x2A, 0x2A},   // 59 Y
-       {0x14, 0x14},   // 5A Z
-       {  -1,   -1},   // 5B 
-       {  -1,   -1},   // 5C 
-       {  -1,   -1},   // 5D 
-       {  -1,   -1},   // 5E 
-       {  -1,   -1},   // 5F 
-       {0x0D, 0x0D},   // 60 NUM 0
-       {0x01, 0x01},   // 61 NUM 1
-       {0x02, 0x02},   // 62 NUM 2
-       {0x03, 0x03},   // 63 NUM 3
-       {0x04, 0x04},   // 64 NUM 4
-       {0x05, 0x05},   // 65 NUM 5
-       {0x06, 0x06},   // 66 NUM 6
-       {0x07, 0x07},   // 67 NUM 7
-       {0x08, 0x08},   // 68 NUM 8
-       {0x09, 0x09},   // 69 NUM 9
-       {0x47, 0x47},   // 6A NUM *
-       {0x48, 0x48},   // 6B NUM +
-       {0x4D, 0x4D},   // 6C NUM Ent   =
-       {0x4C, 0x4C},   // 6D NUM -
-       {0x0E, 0x0E},   // 6E NUM .
-       {0x4B, 0x4B},   // 6F NUM /
-       {0x51, 0x50},   // 70 F1        RUN             PROGRAM
-       {0x53, 0x52},   // 71 F2        RENAME          NEW
-       {0x55, 0x54},   // 72 F3        PROTECT         SECURE
-       {0x57, 0x56},   // 73 F4        PROG-LIST       OPERATE
-       {0x59, 0x58},   // 74 F5        STOP            TRACE
-       {0x5B, 0x5A},   // 75 F6        CONDENSE        DISK-LIST
-       {0x5D, 0x5C},   // 76 F7        LINE-NO.        RECALL
-       {0x5F, 0x5E},   // 77 F8        PROG.SELECT     AUTO PRINT
-       {0x0A, 0x0A},   // 78 F9        EXP
-       {0x0B, 0x0B},   // 79 F10       SIGN CHG
-       {0x0C, 0x0C},   // 7A F11       CE
-       {0x0F, 0x0F},   // 7B F12       START ?
-       {  -1,   -1},   // 7C 
-       {  -1,   -1},   // 7D 
-       {  -1,   -1},   // 7E 
-       {  -1,   -1},   // 7F 
-       {  -1,   -1},   // 80 
-       {  -1,   -1},   // 81 
-       {  -1,   -1},   // 82 
-       {  -1,   -1},   // 83 
-       {  -1,   -1},   // 84 
-       {  -1,   -1},   // 85 
-       {  -1,   -1},   // 86 
-       {  -1,   -1},   // 87 
-       {  -1,   -1},   // 88 
-       {  -1,   -1},   // 89 
-       {  -1,   -1},   // 8A 
-       {  -1,   -1},   // 8B 
-       {  -1,   -1},   // 8C 
-       {  -1,   -1},   // 8D 
-       {  -1,   -1},   // 8E 
-       {  -1,   -1},   // 8F 
-       {  -1,   -1},   // 90 
-       {0x66, 0x66},   // 91 ScrLk     PAPER FEED
-       {  -1,   -1},   // 92 
-       {  -1,   -1},   // 93 
-       {  -1,   -1},   // 94 
-       {  -1,   -1},   // 95 
-       {  -1,   -1},   // 96 
-       {  -1,   -1},   // 97 
-       {  -1,   -1},   // 98 
-       {  -1,   -1},   // 99 
-       {  -1,   -1},   // 9A 
-       {  -1,   -1},   // 9B 
-       {  -1,   -1},   // 9C 
-       {  -1,   -1},   // 9D 
-       {  -1,   -1},   // 9E 
-       {  -1,   -1},   // 9F 
-       {0x11, 0x11},   // A0 L Shift   SML
-       {  -1,   -1},   // A1 R Shift   (Switch F1-F8)
-       {0x10, 0x10},   // A2 L Ctrl    CAP
-       {0x3C, 0x3C},   // A3 R Ctrl    UC
-       {  -1,   -1},   // A4 L Alt
-       {  -1,   -1},   // A5 R Alt
-       {  -1,   -1},   // A6 
-       {  -1,   -1},   // A7 
-       {  -1,   -1},   // A8 
-       {  -1,   -1},   // A9 
-       {  -1,   -1},   // AA 
-       {  -1,   -1},   // AB 
-       {  -1,   -1},   // AC 
-       {  -1,   -1},   // AD 
-       {  -1,   -1},   // AE 
-       {  -1,   -1},   // AF 
-       {  -1,   -1},   // B0 
-       {  -1,   -1},   // B1 
-       {  -1,   -1},   // B2 
-       {  -1,   -1},   // B3 
-       {  -1,   -1},   // B4 
-       {  -1,   -1},   // B5 
-       {  -1,   -1},   // B6 
-       {  -1,   -1},   // B7 
-       {  -1,   -1},   // B8 
-       {  -1,   -1},   // B9 
-       {0x3D, 0x3D},   // BA :
-       {0x39, 0x39},   // BB ;
-       {0x30, 0x30},   // BC ,
-       {0x3F, 0x3F},   // BD -
-       {0x34, 0x34},   // BE .
-       {0x38, 0x38},   // BF /
-       {0x3E, 0x3E},   // C0 @
-       {  -1,   -1},   // C1 
-       {  -1,   -1},   // C2 
-       {  -1,   -1},   // C3 
-       {  -1,   -1},   // C4 
-       {  -1,   -1},   // C5 
-       {  -1,   -1},   // C6 
-       {  -1,   -1},   // C7 
-       {  -1,   -1},   // C8 
-       {  -1,   -1},   // C9 
-       {  -1,   -1},   // CA 
-       {  -1,   -1},   // CB 
-       {  -1,   -1},   // CC 
-       {  -1,   -1},   // CD 
-       {  -1,   -1},   // CE 
-       {  -1,   -1},   // CF 
-       {  -1,   -1},   // D0 
-       {  -1,   -1},   // D1 
-       {  -1,   -1},   // D2 
-       {  -1,   -1},   // D3 
-       {  -1,   -1},   // D4 
-       {  -1,   -1},   // D5 
-       {  -1,   -1},   // D6 
-       {  -1,   -1},   // D7 
-       {  -1,   -1},   // D8 
-       {  -1,   -1},   // D9 
-       {  -1,   -1},   // DA 
-       {0x46, 0x46},   // DB [
-       {0x44, 0x44},   // DC Yen
-       {0x4A, 0x4A},   // DD ]
-       {0x43, 0x43},   // DE ^
-       {  -1,   -1},   // DF 
-       {  -1,   -1},   // E0 
-       {  -1,   -1},   // E1 
-       {  -1,   -1},   // E2 _
-       {  -1,   -1},   // E3 
-       {  -1,   -1},   // E4 
-       {  -1,   -1},   // E5 
-       {  -1,   -1},   // E6 
-       {  -1,   -1},   // E7 
-       {  -1,   -1},   // E8 
-       {  -1,   -1},   // E9 
-       {  -1,   -1},   // EA 
-       {  -1,   -1},   // EB 
-       {  -1,   -1},   // EC 
-       {  -1,   -1},   // ED 
-       {  -1,   -1},   // EE 
-       {  -1,   -1},   // EF 
-       {  -1,   -1},   // F0 
-       {  -1,   -1},   // F1 
-       {  -1,   -1},   // F2 
-       {  -1,   -1},   // F3 
-       {  -1,   -1},   // F4 
-       {  -1,   -1},   // F5 
-       {  -1,   -1},   // F6 
-       {  -1,   -1},   // F7 
-       {  -1,   -1},   // F8 
-       {  -1,   -1},   // F9 
-       {  -1,   -1},   // FA 
-       {  -1,   -1},   // FB 
-       {  -1,   -1},   // FC 
-       {  -1,   -1},   // FD 
-       {  -1,   -1},   // FE 
-       {  -1,   -1},   // FF 
+static const int table[256] = {
+         -1,   // 00 
+         -1,   // 01 
+         -1,   // 02 
+         -1,   // 03 
+         -1,   // 04 
+         -1,   // 05 
+         -1,   // 06 
+         -1,   // 07 
+         -1,   // 08 Back
+       0x13,   // 09 Tab       INST
+         -1,   // 0A 
+         -1,   // 0B 
+         -1,   // 0C 
+       0x42,   // 0D Enter     CR/LF
+         -1,   // 0E 
+         -1,   // 0F 
+         -1,   // 10 Shift
+         -1,   // 11 Ctrl
+         -1,   // 12 Alt
+         -1,   // 13 Pause
+       0x12,   // 14 Caps      CTRL
+         -1,   // 15 Kana
+         -1,   // 16 
+         -1,   // 17 
+         -1,   // 18 
+         -1,   // 19 Kanji
+         -1,   // 1A 
+       0x4F,   // 1B Escape    CLEAR
+         -1,   // 1C Convert
+         -1,   // 1D NonConv
+         -1,   // 1E 
+         -1,   // 1F 
+       0x41,   // 20 Space     SPACE
+       0x49,   // 21 PgUp      SQR
+       0x4A,   // 22 PgDwn     )
+       0x46,   // 23 End       (
+       0x45,   // 24 Home      alpha^x
+       0x63,   // 25 Left
+       0x62,   // 26 Up
+       0x65,   // 27 Right
+       0x64,   // 28 Down
+         -1,   // 29 
+         -1,   // 2A 
+         -1,   // 2B 
+         -1,   // 2C 
+       0x60,   // 2D Ins       INSERT
+       0x61,   // 2E Del       DELETE
+         -1,   // 2F 
+       0x3B,   // 30 0
+       0x17,   // 31 1
+       0x1B,   // 32 2
+       0x1F,   // 33 3
+       0x23,   // 34 4
+       0x27,   // 35 5
+       0x2B,   // 36 6
+       0x2F,   // 37 7
+       0x33,   // 38 8
+       0x37,   // 39 9
+         -1,   // 3A 
+         -1,   // 3B 
+         -1,   // 3C 
+         -1,   // 3D 
+         -1,   // 3E 
+         -1,   // 3F 
+         -1,   // 40 
+       0x15,   // 41 A
+       0x24,   // 42 B
+       0x1C,   // 43 C
+       0x1D,   // 44 D
+       0x1E,   // 45 E
+       0x21,   // 46 F
+       0x25,   // 47 G
+       0x29,   // 48 H
+       0x32,   // 49 I
+       0x2D,   // 4A J
+       0x31,   // 4B K
+       0x35,   // 4C L
+       0x2C,   // 4D M
+       0x28,   // 4E N
+       0x36,   // 4F O
+       0x3A,   // 50 P
+       0x16,   // 51 Q
+       0x22,   // 52 R
+       0x19,   // 53 S
+       0x26,   // 54 T
+       0x2E,   // 55 U
+       0x20,   // 56 V
+       0x1A,   // 57 W
+       0x18,   // 58 X
+       0x2A,   // 59 Y
+       0x14,   // 5A Z
+         -1,   // 5B 
+         -1,   // 5C 
+         -1,   // 5D 
+         -1,   // 5E 
+         -1,   // 5F 
+       0x0D,   // 60 NUM 0
+       0x01,   // 61 NUM 1
+       0x02,   // 62 NUM 2
+       0x03,   // 63 NUM 3
+       0x04,   // 64 NUM 4
+       0x05,   // 65 NUM 5
+       0x06,   // 66 NUM 6
+       0x07,   // 67 NUM 7
+       0x08,   // 68 NUM 8
+       0x09,   // 69 NUM 9
+       0x47,   // 6A NUM *
+       0x48,   // 6B NUM +
+       0x4D,   // 6C NUM Ent   =
+       0x4C,   // 6D NUM -
+       0x0E,   // 6E NUM .
+       0x4B,   // 6F NUM /
+       0x51,   // 70 F1        RUN
+       0x53,   // 71 F2        RENAME
+       0x55,   // 72 F3        PROTECT
+       0x57,   // 73 F4        PROG-LIST
+       0x59,   // 74 F5        STOP
+       0x5B,   // 75 F6        CONDENSE
+       0x5D,   // 76 F7        LINE-NO.
+         -1,   // 77 F8
+       0x0A,   // 78 F9        EXP
+       0x0B,   // 79 F10       SIGN CHG
+       0x0C,   // 7A F11       CE
+       0x0F,   // 7B F12       START ?
+       0x50,   // 7C F13       PROGRAM
+       0x52,   // 7D F14       NEW
+       0x54,   // 7E F15       SECURE
+       0x56,   // 7F F16       OPERATE
+       0x58,   // 80 F17       TRACE
+       0x5A,   // 81 F18       DISK-LIST
+       0x5C,   // 82 F19       RECALL
+         -1,   // 83 F20
+         -1,   // 84 F21
+         -1,   // 85 F22
+         -1,   // 86 F23
+         -1,   // 87 F24
+         -1,   // 88 
+         -1,   // 89 
+         -1,   // 8A 
+         -1,   // 8B 
+         -1,   // 8C 
+         -1,   // 8D 
+         -1,   // 8E 
+         -1,   // 8F 
+         -1,   // 90 
+       0x4E,   // 91 ScrLk     PAPER FEED
+         -1,   // 92 
+         -1,   // 93 
+         -1,   // 94 
+         -1,   // 95 
+         -1,   // 96 
+         -1,   // 97 
+         -1,   // 98 
+         -1,   // 99 
+         -1,   // 9A 
+         -1,   // 9B 
+         -1,   // 9C 
+         -1,   // 9D 
+         -1,   // 9E 
+         -1,   // 9F 
+       0x11,   // A0 L Shift   SML
+         -1,   // A1 R Shift   (Switch F1-F8)
+       0x10,   // A2 L Ctrl    CAP
+       0x3C,   // A3 R Ctrl    UC
+         -1,   // A4 L Alt
+         -1,   // A5 R Alt
+         -1,   // A6 
+         -1,   // A7 
+         -1,   // A8 
+         -1,   // A9 
+         -1,   // AA 
+         -1,   // AB 
+         -1,   // AC 
+         -1,   // AD 
+         -1,   // AE 
+         -1,   // AF 
+         -1,   // B0 
+         -1,   // B1 
+         -1,   // B2 
+         -1,   // B3 
+         -1,   // B4 
+         -1,   // B5 
+         -1,   // B6 
+         -1,   // B7 
+         -1,   // B8 
+         -1,   // B9 
+       0x3D,   // BA :
+       0x39,   // BB ;
+       0x30,   // BC ,
+       0x3F,   // BD -
+       0x34,   // BE .
+       0x38,   // BF /
+       0x3E,   // C0 @
+         -1,   // C1 
+         -1,   // C2 
+         -1,   // C3 
+         -1,   // C4 
+         -1,   // C5 
+         -1,   // C6 
+         -1,   // C7 
+         -1,   // C8 
+         -1,   // C9 
+         -1,   // CA 
+         -1,   // CB 
+         -1,   // CC 
+         -1,   // CD 
+         -1,   // CE 
+         -1,   // CF 
+         -1,   // D0 
+         -1,   // D1 
+         -1,   // D2 
+         -1,   // D3 
+         -1,   // D4 
+         -1,   // D5 
+         -1,   // D6 
+         -1,   // D7 
+         -1,   // D8 
+         -1,   // D9 
+         -1,   // DA 
+       0x46,   // DB [
+       0x44,   // DC Yen
+       0x4A,   // DD ]
+       0x43,   // DE ^
+         -1,   // DF 
+         -1,   // E0 
+         -1,   // E1 
+         -1,   // E2 _
+         -1,   // E3 
+         -1,   // E4 
+         -1,   // E5 
+         -1,   // E6 
+         -1,   // E7 
+         -1,   // E8 
+         -1,   // E9 
+         -1,   // EA 
+         -1,   // EB 
+         -1,   // EC 
+         -1,   // ED 
+         -1,   // EE 
+         -1,   // EF 
+         -1,   // F0 
+         -1,   // F1 
+         -1,   // F2 
+         -1,   // F3 
+         -1,   // F4 
+         -1,   // F5 
+         -1,   // F6 
+         -1,   // F7 
+         -1,   // F8 
+         -1,   // F9 
+         -1,   // FA 
+         -1,   // FB 
+         -1,   // FC 
+         -1,   // FD 
+         -1,   // FE 
+         -1,   // FF 
 };
 
 void KEYBOARD::initialize()
 {
        fifo_down = new FIFO(8);
-       fifo_up = new FIFO(8);
 }
 
 void KEYBOARD::release()
 {
        fifo_down->release();
        delete fifo_down;
-       fifo_up->release();
-       delete fifo_up;
 }
 
 void KEYBOARD::reset()
 {
        fifo_down->clear();
-       fifo_up->clear();
-}
-
-void KEYBOARD::write_io8(uint32_t addr, uint32_t data)
-{
 }
 
 uint32_t KEYBOARD::read_io8(uint32_t addr)
@@ -308,12 +300,11 @@ uint32_t KEYBOARD::read_io8(uint32_t addr)
                }
                break;
        case 0xe122:
-               if(!fifo_up->empty()) {
-                       value = fifo_up->read();
-               } else {
-                       value = 0xff;
-               }
+               // bit7: JPN/ENG Jumper?
+               // bit5: PROG.SELECT
                fifo_down->read();
+               value  = (config.dipswitch & 2) ? 0 : 0x20;
+               value |= (config.dipswitch & 4) ? 0 : 0x80;
                break;
        }
        return value;
@@ -321,25 +312,20 @@ uint32_t KEYBOARD::read_io8(uint32_t addr)
 
 void KEYBOARD::key_down(int code)
 {
-       const uint8_t* key_stat = emu->get_key_buffer();
-       int rshift = key_stat[0xa1] ? 1 : 0;
-       
-       if(table[code & 255][rshift] != -1) {
-               fifo_down->write(table[code & 255][rshift]);
+       if(code >= 0x70 && code <= 0x7b && emu->get_key_buffer()[0xa1]) {
+               // Right Shift + F1-F12 -> F13-F24
+               code += 12;
+       }
+       if(table[code & 0xff] != -1) {
+               fifo_down->write(table[code & 0xff]);
        }
 }
 
 void KEYBOARD::key_up(int code)
 {
-       const uint8_t* key_stat = emu->get_key_buffer();
-       int rshift = key_stat[0xa1] ? 1 : 0;
-       
-       if(table[code & 255][rshift] != -1) {
-               fifo_up->write(table[code & 255][rshift]);
-       }
 }
 
-#define STATE_VERSION  1
+#define STATE_VERSION  2
 
 bool KEYBOARD::process_state(FILEIO* state_fio, bool loading)
 {
@@ -352,9 +338,6 @@ bool KEYBOARD::process_state(FILEIO* state_fio, bool loading)
        if(!fifo_down->process_state((void *)state_fio, loading)) {
                return false;
        }
-       if(!fifo_up->process_state((void *)state_fio, loading)) {
-               return false;
-       }
        return true;
 }
 }
index 51f0371..18c8aee 100644 (file)
@@ -21,13 +21,11 @@ class KEYBOARD : public DEVICE
 {
 private:
        FIFO *fifo_down;
-       FIFO *fifo_up;
        
 public:
        KEYBOARD(VM_TEMPLATE* parent_vm, EMU_TEMPLATE* parent_emu) : DEVICE(parent_vm, parent_emu)
        {
                fifo_down = NULL;
-               fifo_up = NULL;
                set_device_name(_T("Keyboard"));
        }
        ~KEYBOARD() {}
@@ -36,7 +34,6 @@ public:
        virtual void initialize();
        virtual void release();
        virtual void reset();
-       virtual void __FASTCALL write_io8(uint32_t addr, uint32_t data);
        virtual uint32_t __FASTCALL read_io8(uint32_t addr);
        virtual bool process_state(FILEIO* state_fio, bool loading);
        
index 1d66a8c..0c9232d 100644 (file)
@@ -17,8 +17,7 @@ void PRINTER::initialize()
        fio = new FILEIO();
 
        osd->open_console(80, 30, create_string(_T("Printer - %s"), osd->get_vm_device_name()));
-                                         
-       register_frame_event(this);
+
        register_vline_event(this);
 }
 
@@ -38,7 +37,7 @@ void PRINTER::reset()
        }
        column = htab = 0;
        
-       e210 = e211 = 0;//0xff;
+       strobe = outdata = 0;
 }
 
 /*
@@ -51,11 +50,14 @@ void PRINTER::write_io8(uint32_t addr, uint32_t data)
 {
        switch(addr & 0xffff) {
        case 0xe210:
-       case 0xe212:
-               e210 = data;
+               // C1 -> A1\82Å$E211\82Ì\83f\81[\83^\82ª\8fo\97Í\82³\82ê\82é\81H
+               if((strobe & 0xe1) == 0xc1 && (data & 0xe1) == 0xa1) {
+//                     output(outdata);
+               }
+               strobe = data;
                break;
        case 0xe211:
-               e211 = data;
+               outdata = data;
                break;
        }
 }
@@ -66,25 +68,21 @@ uint32_t PRINTER::read_io8(uint32_t addr)
        
        switch(addr & 0xffff) {
        case 0xe210:
-               value = e210;
+               // 0x00, 0x80, 0x81 ?
+               // bit7: 1=AUTO PRINT ?
+               // bit0: PE or BUSY ?
+               value = (config.dipswitch & 1) ? 0 : 0x80;
                break;
        case 0xe211:
-//             value = e211;
+               value = outdata;
                break;
        case 0xe212:
-               value = e210;
-//             e210 ^= 1;
+               value = strobe;
                break;
        }
        return value;
 }
 
-void PRINTER::event_frame()
-{
-       // ?????
-       e210 ^= 1;
-}
-
 void PRINTER::event_vline(int v, int clock)
 {
        // ugly patch for printer :-(
@@ -134,13 +132,14 @@ void PRINTER::event_vline(int v, int clock)
 
 void PRINTER::output(uint8_t value)
 {
-       if(!fio->IsOpened()) {
-               _TCHAR file_path[_MAX_PATH];
-               create_date_file_path(file_path, _MAX_PATH, _T("txt"));
-               fio->Fopen(file_path, FILEIO_WRITE_BINARY);
+       if(config.printer_type == 0) {
+               if(!fio->IsOpened()) {
+                       _TCHAR file_path[_MAX_PATH];
+                       create_date_file_path(file_path, _MAX_PATH, _T("txt"));
+                       fio->Fopen(file_path, FILEIO_WRITE_BINARY);
+               }
+               fio->Fputc(value);
        }
-       fio->Fputc(value);
-       
        char temp[2];
        temp[0] = (char)value;
        temp[1] = 0;
@@ -150,8 +149,9 @@ void PRINTER::output(uint8_t value)
 void PRINTER::key_down(int code)
 {
        // ugly patch for PAPER FEED
-       if(code == 0x66) {
+       if(code == 0x91) {
                output(0x0d);
+               output(0x0a);
        }
 }
 
@@ -171,8 +171,8 @@ bool PRINTER::process_state(FILEIO* state_fio, bool loading)
        }
        state_fio->StateValue(column);
        state_fio->StateValue(htab);
-       state_fio->StateValue(e210);
-       state_fio->StateValue(e211);
+       state_fio->StateValue(strobe);
+       state_fio->StateValue(outdata);
        return true;
 }
 
index 5614a34..d1e9def 100644 (file)
@@ -24,7 +24,7 @@ private:
        uint8_t *ram;
        FILEIO *fio;
        uint8_t column, htab;
-       uint8_t e210, e211;
+       uint8_t strobe, outdata;
        
        void output(uint8_t);
        
@@ -39,7 +39,6 @@ public:
        void initialize();
        void release();
        void reset();
-       void event_frame();
        void event_vline(int v, int clock);
        void __FASTCALL write_io8(uint32_t addr, uint32_t data);
        uint32_t __FASTCALL read_io8(uint32_t addr);
index 81c2c0f..911bbe1 100644 (file)
@@ -1,6 +1,6 @@
 message("* vm/common_vm")
 
-SET(THIS_LIB_VERSION 3.6.0)
+SET(THIS_LIB_VERSION 3.7.0)
 
 #include(cotire)
 set(s_vm_common_vm_srcs
index 1420801..f3fef02 100644 (file)
@@ -797,7 +797,7 @@ int DATAREC::load_wav_image(int offset)
                                        pair.b.h = tmp_buffer[tmp_ptr++]; \
                                        sample[ch] = pair.s16; \
                                } else { \
-                                       sample[ch] = (tmp_buffer[tmp_ptr++] - 128) * 256; \
+                                       sample[ch] = ((int)tmp_buffer[tmp_ptr++] - 128) * 256; \
                                } \
                        } \
                        if(tmp_ptr == TMP_LENGTH) { \
@@ -1762,11 +1762,12 @@ void DATAREC::mix(int32_t* buffer, int cnt)
                        sound_last_vol_r = apply_volume(sound_sample, sound_volume_r);
                        buffer = buffer_tmp; // restore
                        for(int i = 0; i < cnt; i++) {
-                               *buffer += sound_last_vol_l; // L
-                               *buffer += sound_last_vol_r; // R
+                               *buffer++ += sound_last_vol_l; // L
+                               *buffer++ += sound_last_vol_r; // R
                        }
                } else if(sound_last_vol_l || sound_last_vol_r) {
                        // suppress petite noise when go to mute
+                       buffer = buffer_tmp; // restore
                        for(int i = 0; i < cnt; i++) {
                                *buffer++ += sound_last_vol_l; // L
                                *buffer++ += sound_last_vol_r; // R
index f6d0d9c..47aaa06 100644 (file)
@@ -98,6 +98,12 @@ void HD46505::write_io8(uint32_t addr, uint32_t data)
                        if(ch < 10 && regs[ch] != data) {
                                timing_changed = true;
                        }
+                       if(ch == 5 && !regs_written[5]) {
+                               reg5_bottom = data;
+                       }
+                       if(ch == 9 && !regs_written[9]) {
+                               reg9_bottom = data;
+                       }
                        regs[ch] = data;
                        regs_written[ch] = true;
                }
@@ -120,13 +126,15 @@ void HD46505::event_pre_frame()
        if(timing_changed) {
                if(regs_written[0] && regs_written[1] && regs_written[2] && regs_written[3] && regs_written[4] && regs_written[5] && regs_written[6] && regs_written[7] && regs_written[9]) {
                        int ch_height = (regs[9] & 0x1f) + 1;
+                       int ch_height_bottom = (reg9_bottom & 0x1f) + 1;
                        
                        hz_total = regs[0] + 1;
                        hz_disp = regs[1];
                        hs_start = regs[2];
                        hs_end = hs_start + (regs[3] & 0x0f);
                        
-                       vt_total = ((regs[4] & 0x7f) + 1) * ch_height + (regs[5] & 0x1f);
+//                     vt_total = ((regs[4] & 0x7f) + 1) * ch_height + (regs[5] & 0x1f);
+                       vt_total = (regs[4] & 0x7f) * ch_height + ch_height_bottom + (reg5_bottom & 0x1f);
                        vt_disp = (regs[6] & 0x7f) * ch_height;
                        vs_start = ((regs[7] & 0x7f) + 1) * ch_height;
                        vs_end = vs_start + ((regs[3] & 0xf0) ? (regs[3] >> 4) : 16);
@@ -201,6 +209,12 @@ void HD46505::event_vline(int v, int clock)
                new_vblank = false;
        }
        
+       // virtical smooth scroll
+       if(v == vt_disp) {
+               reg5_bottom = regs[5];
+               reg9_bottom = regs[9];
+       }
+       
        // display
        if(outputs_disp.count) {
                set_display(new_vblank);
@@ -266,7 +280,7 @@ void HD46505::set_hsync(bool val)
        }
 }
 
-#define STATE_VERSION  3
+#define STATE_VERSION  4
 
 bool HD46505::process_state(FILEIO* state_fio, bool loading)
 {
@@ -278,6 +292,8 @@ bool HD46505::process_state(FILEIO* state_fio, bool loading)
        }
        state_fio->StateArray(regs, sizeof(regs), 1);
        state_fio->StateArray(regs_written, sizeof(regs_written), 1);
+       state_fio->StateValue(reg5_bottom);
+       state_fio->StateValue(reg9_bottom);
        state_fio->StateValue(ch);
        state_fio->StateValue(timing_changed);
        state_fio->StateValue(cpu_clocks);
index ab2481b..1f6f601 100644 (file)
@@ -24,7 +24,7 @@ private:
        outputs_t outputs_vsync;
        outputs_t outputs_hsync;
        
-       uint8_t regs[18];
+       uint8_t regs[18], reg5_bottom, reg9_bottom;
        bool regs_written[18];
        int ch;
        bool timing_changed;
index 63d76aa..9751d33 100644 (file)
@@ -319,7 +319,11 @@ int MC6843::address_search( chrn_id* id )
 
        fdc[m_drive].searching = false;
 
-       if ( !disk[m_drive]->get_track(fdc[m_drive].track, m_side) )
+#if 0
+       if ( !(fdc[m_drive].track >= 0 && fdc[m_drive].track < 70 && disk[m_drive]->get_track(fdc[m_drive].track >> 1, m_side)) )
+#else
+       if ( !disk[m_drive]->get_track(m_LTAR, m_side) )
+#endif
        {
                m_STRB |= 0x08; /* set Sector Address Undetected */
                cmd_end( );
@@ -331,7 +335,11 @@ int MC6843::address_search( chrn_id* id )
                // fixme: need to get current head position to determin next sector
                int sector = (fdc[m_drive].sector++) % disk[m_drive]->sector_num.sd;
 
-               if ( !disk[m_drive]->get_sector(fdc[m_drive].track, m_side, sector) )
+#if 0
+               if ( !disk[m_drive]->get_sector(fdc[m_drive].track >> 1, m_side, sector) )
+#else
+               if ( !disk[m_drive]->get_sector(m_LTAR, m_side, sector) )
+#endif
                {
                        /* read address error */
 //                     LOG( "%f mc6843_address_search: get_next_id failed\n", machine().time().as_double() );
@@ -872,7 +880,11 @@ void MC6843::write(offs_t offset, uint8_t data)
                                }
                                register_event(this, EVENT_SEEK, 64 * ((m_SUR >> 4) + 1), false, &m_seek_id);
                                // set target track number
-                               fdc[m_drive].target_track = (cmd == CMD_STZ) ? 0 : m_GCR - (m_CTAR & 0x7F);
+                               if(cmd == CMD_STZ) {
+                                       fdc[m_drive].target_track = 0;
+                               } else {
+                                       fdc[m_drive].target_track = fdc[m_drive].track + m_GCR - (m_CTAR & 0x7F);
+                               }
                                if(__FDC_DEBUG_LOG) {
                                        this->out_debug_log(_T("FDC: SEEK DRIVE=%d TARGET=%d\n"), m_drive, fdc[m_drive].target_track);
                                }
index 4def3dc..3665e0a 100644 (file)
@@ -47,24 +47,36 @@ void MC6844::write_io8(uint32_t addr, uint32_t data)
        case 0x08:
        case 0x0c:
                dma[(addr >> 2) & 3].address_reg.b.h = data;
+#ifdef _DMA_DEBUG_LOG
+               this->out_debug_log(_T("DMA: OUT CH=%d ADDRESS=%04X\n"), (addr >> 2) & 3, dma[(addr >> 2) & 3].address_reg.w.l);
+#endif
                break;
        case 0x01:
        case 0x05:
        case 0x09:
        case 0x0d:
                dma[(addr >> 2) & 3].address_reg.b.l = data;
+#ifdef _DMA_DEBUG_LOG
+               this->out_debug_log(_T("DMA: OUT CH=%d ADDRESS=%04X\n"), (addr >> 2) & 3, dma[(addr >> 2) & 3].address_reg.w.l);
+#endif
                break;
        case 0x02:
        case 0x06:
        case 0x0a:
        case 0x0e:
                dma[(addr >> 2) & 3].byte_count_reg.b.h = data;
+#ifdef _DMA_DEBUG_LOG
+               this->out_debug_log(_T("DMA: OUT CH=%d BYTECOUNT=%04X\n"), (addr >> 2) & 3, dma[(addr >> 2) & 3].byte_count_reg.w.l);
+#endif
                break;
        case 0x03:
        case 0x07:
        case 0x0b:
        case 0x0f:
                dma[(addr >> 2) & 3].byte_count_reg.b.l = data;
+#ifdef _DMA_DEBUG_LOG
+               this->out_debug_log(_T("DMA: OUT CH=%d BYTECOUNT=%04X\n"), (addr >> 2) & 3, dma[(addr >> 2) & 3].byte_count_reg.w.l);
+#endif
                break;
        case 0x10:
        case 0x11:
@@ -72,16 +84,28 @@ void MC6844::write_io8(uint32_t addr, uint32_t data)
        case 0x13:
                dma[addr & 3].channel_ctrl_reg &= (STAT_BUSY | STAT_DEND);
                dma[addr & 3].channel_ctrl_reg |= data & ~(STAT_BUSY | STAT_DEND);
+#ifdef _DMA_DEBUG_LOG
+               this->out_debug_log(_T("DMA: OUT CH=%d CH_CTRL=%02X\n"), addr & 3, dma[addr & 3].channel_ctrl_reg);
+#endif
                break;
        case 0x14:
                priority_ctrl_reg = data;
+#ifdef _DMA_DEBUG_LOG
+               this->out_debug_log(_T("DMA: OUT PRI_CTRL=%02X\n"), priority_ctrl_reg);
+#endif
                break;
        case 0x15:
                interrupt_ctrl_reg &= IRQ_FLAG;
                interrupt_ctrl_reg |= data & ~IRQ_FLAG;
+#ifdef _DMA_DEBUG_LOG
+               this->out_debug_log(_T("DMA: OUT INT_CTRL=%02X\n"), interrupt_ctrl_reg);
+#endif
                break;
        case 0x16:
                data_chain_reg = data;
+#ifdef _DMA_DEBUG_LOG
+               this->out_debug_log(_T("DMA: OUT DAT_CHAIN=%02X\n"), data_chain_reg);
+#endif
                break;
        }
 }
@@ -156,7 +180,7 @@ uint32_t MC6844::read_via_debugger_data8(uint32_t addr)
 void MC6844::transfer(int ch)
 {
        if(priority_ctrl_reg & (1 << ch)) {
-               if(dma[ch].byte_count_reg.w.l != 0) {
+//             if(dma[ch].byte_count_reg.w.l != 0) {
                        if(dma[ch].channel_ctrl_reg & 0x01) {
                                uint8_t data;
                                if(d_debugger != NULL && d_debugger->now_device_debugging) {
@@ -179,9 +203,10 @@ void MC6844::transfer(int ch)
                                dma[ch].address_reg.d++;
                        }
                        if(--dma[ch].byte_count_reg.w.l == 0) {
-                               if(data_chain_reg & 0x01) {
-                                       dma[(data_chain_reg >> 1) & 3].address_reg.w.l = dma[3].address_reg.w.l;
-                                       dma[(data_chain_reg >> 1) & 3].byte_count_reg.w.l = dma[3].byte_count_reg.w.l;
+                               static const int dest[8] = {0, 1, 0, 1, 0, 1, 2, 3};
+                               if((data_chain_reg & 0x01) && ch == dest[(data_chain_reg >> 1) & 3]) {
+                                       dma[ch].address_reg.w.l = dma[3].address_reg.w.l;
+                                       dma[ch].byte_count_reg.w.l = dma[3].byte_count_reg.w.l;
                                }
                                dma[ch].channel_ctrl_reg |=  STAT_DEND;
                                update_irq();
@@ -189,7 +214,7 @@ void MC6844::transfer(int ch)
                        } else {
                                dma[ch].channel_ctrl_reg |=  STAT_BUSY;
                        }
-               }
+//             }
        }
 }
 
index 51ba48f..d6295a5 100644 (file)
@@ -8,7 +8,7 @@
        [ MCS48 ]
 */
 
-#ifndef _MCS84_H_ 
+#ifndef _MCS48_H_ 
 #define _MCS48_H_
 
 //#include "vm.h"
index 1afb63a..098a888 100644 (file)
@@ -9,6 +9,7 @@ add_library(vm_${EXE_NAME}
        ./cmos.cpp
        ./emm.cpp
        ./kanji.cpp
+       ./joystick.cpp
        ./keyboard.cpp
        ./memory.cpp
        ./ramfile.cpp
@@ -23,6 +24,7 @@ add_library(vm_${EXE_NAME}
 
        ./cmos.cpp
        ./emm.cpp
+       ./joystick.cpp
        ./kanji.cpp
        ./keyboard.cpp
        ./memory.cpp
@@ -39,6 +41,7 @@ else()
 add_library(vm_${EXE_NAME}
        ./cmos.cpp
        ./emm.cpp
+       ./joystick.cpp
        ./kanji.cpp
        ./keyboard.cpp
        ./memory.cpp
diff --git a/source/src/vm/mz700/joystick.cpp b/source/src/vm/mz700/joystick.cpp
new file mode 100644 (file)
index 0000000..22fdc35
--- /dev/null
@@ -0,0 +1,186 @@
+/*
+       SHARP MZ-700 Emulator 'EmuZ-700'
+       SHARP MZ-1500 Emulator 'EmuZ-1500'
+
+       Author : Takeda.Toshiya
+       Date   : 2006.11.24 -
+
+       [ joystick ]
+*/
+
+#include "joystick.h"
+
+namespace MZ700 {
+
+void JOYSTICK::initialize()
+{
+       val_1x03 = 0x7e;
+       joy_stat = emu->get_joy_buffer();
+
+       // register event
+       register_vline_event(this);
+}
+
+//             __           _______________________
+//     JA2       \_________/__y1___/__y0___/       \__ JA2は上下方向の状態をPWMする
+//             __ _________ _______ _______ _______ __
+//     JA1     __X____A____X___B___X___R___X___L___X__ JA1は左右とボタンの状態をそのまま送る
+//
+//                |←  38 →|← 30→|← 30→|← 30→|  (3.579545MHz)
+//
+//     y1y0    UD
+//      0 0    01
+//      0 1    10
+//      1 1    11
+//
+uint32_t JOYSTICK::read_AM7J(int jnum)
+{
+       uint32_t js;
+       uint32_t val = ~0;
+       uint32_t clk;
+       bool y0, y1;
+
+       clk = get_current_clock() & 0x007f;
+       js = joy_stat[jnum];
+       y0 = y1 = false;
+
+       switch (js & 0xc0) {
+               case 0x40: // RUN
+                       y1 = true;
+                       y0 = true;
+                       js |= 0x0c;  // LEFT+RIGHT
+                       break;
+               case 0x80: // SELECT
+                       y0 = true;
+                       js |= 0x0c;  // LEFT+RIGHT
+                       break;
+               case 0xc0: // RUN+SELECT
+                       js |= 0x0c;  // LEFT+RIGHT
+                       break;
+               default:
+                       switch (js & 0x03) {
+                               case 0x01: // UP
+                                       break;
+                               case 0x02: // DOWN
+                                       y0 = true;
+                                       break;
+                               default: // center
+                                       y1 = true;
+                                       y0 = true;
+                                       break;
+                       }
+                       break;
+       }
+
+       if (clk < 38) {
+               // JA2 = 0,  JA1 = TRG-A
+               val &= ~0x10;
+               if(js & 0x10) val &= ~0x08;  // trigger A
+       } else if (clk < 68) {
+               // JA2 = y1,  JA1 = TRG-B
+               if(!y1) val &= ~0x10;
+               if(js & 0x20) val &= ~0x08;  // trigger B
+       } else if (clk < 98) {
+               // JA2 = y0,  JA1 = RIGHT
+               if(!y0) val &= ~0x10;
+               if(js & 0x08) val &= ~0x08;  // right
+       } else {
+               // JA2 = 1,  JA1 = LEFT
+               if(js & 0x04) val &= ~0x08;  // left
+       }
+       if (jnum == 0) {
+               val >>= 2;
+       }
+
+       return val;
+}
+
+uint32_t JOYSTICK::read_io8(uint32_t addr)
+{
+       uint32_t val = 0x7e;
+
+       switch (config.joystick_type) {
+
+               case DEVICE_JOYSTICK_1X03:              // SHARP MZ-1X03
+                       val = val_1x03;
+                       break;
+
+               case DEVICE_JOYSTICK_JOY700:            // TSUKUMO JOY-700
+                       if(joy_stat[0] & 0x01) val &= ~0x10;  // up    : JB2
+                       if(joy_stat[0] & 0x02) val &= ~0x08;  // down  : JB1
+                       if(joy_stat[0] & 0x04) val &= ~0x02;  // left  : JA1
+                       if(joy_stat[0] & 0x08) val &= ~0x04;  // right : JA2
+                       if(joy_stat[0] & 0x10) val &= ~0x1e;  // trigger A : ALL
+                       if(joy_stat[0] & 0x20) val &= ~0x1e;  // trigger B : ALL
+                       break;
+
+               case DEVICE_JOYSTICK_AM7J:              // AM7J ATARI Joystick adaptor
+                       val &= read_AM7J(0);
+                       val &= read_AM7J(1);
+                       break;
+
+               default:
+                       break;
+        }
+
+       return val;
+}
+
+//
+// MZ-1X03 は /VBLK=H でボタンの状態(押されていればL)
+//            /VBLK=L でスティックの傾き(PWM, 127.841kHz, (0〜255)+10のLowパルス) を出力する
+//            /VBLKが立ち下がってから 302 CPU clock待った後、28 CPU clock 単位のLowパルスを出力
+//
+uint64_t JOYSTICK::pulse_width_1x03(uint32_t js, uint32_t mmin, uint32_t mmax)
+{
+       if (js & mmin) return 192;
+       if (js & mmax) return 10000;
+       return 4192;
+}
+
+void JOYSTICK::event_vline(int v, int clock)
+{
+       if (config.joystick_type == DEVICE_JOYSTICK_1X03) {
+               if (v == 0) {
+                       // trigger
+                       val_1x03 = 0x7e;
+                       if(joy_stat[0] & 0x10) val_1x03 &= ~0x02;
+                       if(joy_stat[0] & 0x20) val_1x03 &= ~0x04;
+                       if(joy_stat[1] & 0x10) val_1x03 &= ~0x08;
+                       if(joy_stat[1] & 0x20) val_1x03 &= ~0x10;
+               } else if (v == 200) {
+                       // stick (PWM)
+                       val_1x03 &= ~(0x06 | 0x18);
+                       register_event_by_clock(this, EVENT_1X03_X1, pulse_width_1x03(joy_stat[0], 0x04, 0x08), false, NULL);
+                       register_event_by_clock(this, EVENT_1X03_Y1, pulse_width_1x03(joy_stat[0], 0x01, 0x02), false, NULL);
+                       register_event_by_clock(this, EVENT_1X03_X2, pulse_width_1x03(joy_stat[1], 0x04, 0x08), false, NULL);
+                       register_event_by_clock(this, EVENT_1X03_Y2, pulse_width_1x03(joy_stat[1], 0x01, 0x02), false, NULL);
+               }
+       }
+}
+
+void JOYSTICK::event_callback(int event_id, int err)
+{
+       switch (event_id) {
+               case EVENT_1X03_X1:  val_1x03 |= 0x02; break;
+               case EVENT_1X03_Y1:  val_1x03 |= 0x04; break;
+               case EVENT_1X03_X2:  val_1x03 |= 0x08; break;
+               case EVENT_1X03_Y2:  val_1x03 |= 0x10; break;
+       }
+}
+
+#define STATE_VERSION  2
+
+bool JOYSTICK::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->StateValue(val_1x03);
+       return true;
+}
+
+}
diff --git a/source/src/vm/mz700/joystick.h b/source/src/vm/mz700/joystick.h
new file mode 100644 (file)
index 0000000..15bdeac
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+       SHARP MZ-700 Emulator 'EmuZ-700'
+       SHARP MZ-1500 Emulator 'EmuZ-1500'
+
+       Author : Takeda.Toshiya
+       Date   : 2006.11.24 -
+
+       [ joystick ]
+*/
+
+#ifndef _JOYSTICK_H_
+#define _JOYSTICK_H_
+
+#include "../vm.h"
+#include "../../emu.h"
+#include "../device.h"
+
+#define DEVICE_JOYSTICK_1X03   0       // SHARP MZ-1X03
+#define DEVICE_JOYSTICK_JOY700 1       // TSUKUMO JOY-700
+#define DEVICE_JOYSTICK_AM7J   2       // AM7J ATARI Joystick adaptor
+
+#define EVENT_1X03_X1          0
+#define EVENT_1X03_Y1          1
+#define EVENT_1X03_X2          2
+#define EVENT_1X03_Y2          3
+
+namespace MZ700 {
+       
+class JOYSTICK : public DEVICE
+{
+protected:
+       uint32_t val_1x03;
+       const uint32_t* joy_stat;
+
+       uint64_t pulse_width_1x03(uint32_t js, uint32_t mmin, uint32_t mmax);
+       uint32_t read_AM7J(int jnum);
+
+public:
+       JOYSTICK(VM_TEMPLATE* parent_vm, EMU_TEMPLATE* parent_emu) : DEVICE(parent_vm, parent_emu)
+       {
+               set_device_name(_T("Joystick I/F"));
+       }
+       ~JOYSTICK() {}
+       
+       // common functions
+       virtual void initialize();
+       virtual void event_vline(int v, int clock);
+       virtual void __FASTCALL event_callback(int event_id, int err);
+       virtual uint32_t __FASTCALL read_io8(uint32_t addr);
+       virtual bool process_state(FILEIO* state_fio, bool loading);
+};
+}
+
+#endif
index 5f2f044..1d169e8 100644 (file)
@@ -509,7 +509,7 @@ uint32_t MEMORY::read_data8(uint32_t addr)
                                case 4: case 5: case 6: case 7:
                                        return d_pit->read_io8(addr & 3);
                                case 8:
-                                       return (hblank ? 0 : 0x80) | (tempo ? 1 : 0) | 0x7e;
+                                       return (hblank ? 0 : 0x80) | (tempo ? 1 : 0) | d_joystick->read_io8(0);
                                }
                                return 0xff;
                        }
index aaa6d80..42601a5 100644 (file)
@@ -29,6 +29,9 @@ private:
 #if defined(_MZ800)
        DEVICE *d_pio_int;
 #endif
+#if defined(_MZ700) || defined(_MZ1500)
+       DEVICE *d_joystick;
+#endif
        
        // memory
        uint8_t* rbank[32];
@@ -158,6 +161,12 @@ public:
                d_pio_int = device;
        }
 #endif
+#if defined(_MZ700) || defined(_MZ1500)
+       void set_context_joystick(DEVICE* device)
+       {
+               d_joystick = device;
+       }
+#endif
        void draw_screen();
 };
 
index ea925cd..5c4d2bd 100644 (file)
@@ -49,6 +49,9 @@
 #endif
 #include "quickdisk.h"
 #endif
+#if defined(_MZ700) || defined(_MZ1500)
+#include "joystick.h"
+#endif
 
 //using        MZ700::CMOS* cmos;
 using MZ700::EMM;
@@ -56,6 +59,9 @@ using MZ700::KANJI;
 using MZ700::KEYBOARD;
 using MZ700::MEMORY;
 using MZ700::RAMFILE;
+#if defined(_MZ700) || defined(_MZ1500)
+using MZ700::JOYSTICK;
+#endif
 #if defined(_MZ800) || defined(_MZ1500)
 using MZ700::FLOPPY;
   #if defined(_MZ1500)
@@ -141,6 +147,9 @@ VM::VM(EMU_TEMPLATE* parent_emu) : VM_TEMPLATE(parent_emu)
 #endif
        qd = new QUICKDISK(this, emu);
 #endif
+#if defined(_MZ700) || defined(_MZ1500)
+       joystick = new JOYSTICK(this, emu);
+#endif
        
        // set contexts
        event->set_context_cpu(cpu);
@@ -180,6 +189,7 @@ VM::VM(EMU_TEMPLATE* parent_emu) : VM_TEMPLATE(parent_emu)
 #else
        // 8253:CLK#0 <- 895KHz
        pit->set_constant_clock(0, CPU_CLOCKS / 4);
+       memory->set_context_joystick(joystick);
 #endif
        
 #if defined(_MZ800) || defined(_MZ1500)
index 14a9d58..9e4ae01 100644 (file)
@@ -64,6 +64,9 @@
 #if defined(_MZ700) || defined(_MZ1500)
 #define USE_AUTO_KEY_NUMPAD
 #define USE_VM_AUTO_KEY_TABLE
+#define USE_JOYSTICK
+#define USE_JOYSTICK_TYPE      3
+#define USE_JOY_BUTTON_CAPTIONS
 #endif
 #if defined(_MZ800)
 #define USE_MONITOR_TYPE       2
 #if defined(_MZ700) || defined(_MZ1500)
 static const int vm_auto_key_table_base[][2] = {
        // thanks Mr.Koucha Youkan
-       {0xa1,  0x300 | 0xbe},  // '¡'    *** MODIFIED ***
-       {0xa2,  0x300 | 0x38},  // '¢'    *** MODIFIED ***
-       {0xa3,  0x300 | 0x39},  // '£'    *** MODIFIED ***
-       {0xa4,  0x300 | 0xbc},  // '¤'    *** MODIFIED ***
-       {0xa5,  0x300 | 0x30},  // '¥'    *** MODIFIED ***
-       {0xa6,  0x200 | 0xdb},  // '¦'    *** MODIFIED ***
-       {0xa7,  0x300 | 0x31},  // '§'
-       {0xa8,  0x300 | 0x32},  // '¨'
-       {0xa9,  0x300 | 0x33},  // '©'
-       {0xaa,  0x300 | 0x34},  // 'ª'
-       {0xab,  0x300 | 0x35},  // '«'
-       {0xac,  0x300 | 0xbd},  // '¬'    *** MODIFIED ***
-       {0xad,  0x300 | 0xde},  // '­'    *** MODIFIED ***
-       {0xae,  0x300 | 0xdc},  // '®'    *** MODIFIED ***
-       {0xaf,  0x300 | 0x43},  // '¯'
-       {0xb0,  0x200 | 0xe2},  // '°'    *** MODIFIED ***
-       {0xb1,  0x200 | 0x31},  // '±'
-       {0xb2,  0x200 | 0x32},  // '²'
-       {0xb3,  0x200 | 0x33},  // '³'
-       {0xb4,  0x200 | 0x34},  // '´'
-       {0xb5,  0x200 | 0x35},  // 'µ'
-       {0xb6,  0x200 | 0x51},  // '¶'
-       {0xb7,  0x200 | 0x57},  // '·'
-       {0xb8,  0x200 | 0x45},  // '¸'
-       {0xb9,  0x200 | 0x52},  // '¹'
-       {0xba,  0x200 | 0x54},  // 'º'
-       {0xbb,  0x200 | 0x41},  // '»'
-       {0xbc,  0x200 | 0x53},  // '¼'
-       {0xbd,  0x200 | 0x44},  // '½'
-       {0xbe,  0x200 | 0x46},  // '¾'
-       {0xbf,  0x200 | 0x47},  // '¿'
-       {0xc0,  0x200 | 0x5a},  // 'À'
-       {0xc1,  0x200 | 0x58},  // 'Á'
-       {0xc2,  0x200 | 0x43},  // 'Â'
-       {0xc3,  0x200 | 0x56},  // 'Ã'
-       {0xc4,  0x200 | 0x42},  // 'Ä'
-       {0xc5,  0x200 | 0x36},  // 'Å'
-       {0xc6,  0x200 | 0x37},  // 'Æ'
-       {0xc7,  0x200 | 0x38},  // 'Ç'
-       {0xc8,  0x200 | 0x39},  // 'È'
-       {0xc9,  0x200 | 0x30},  // 'É'
-       {0xca,  0x200 | 0x59},  // 'Ê'
-       {0xcb,  0x200 | 0x55},  // 'Ë'
-       {0xcc,  0x200 | 0x49},  // 'Ì'
-       {0xcd,  0x200 | 0x4f},  // 'Í'
-       {0xce,  0x200 | 0x50},  // 'Î'
-       {0xcf,  0x200 | 0x48},  // 'Ï'
-       {0xd0,  0x200 | 0x4a},  // 'Ð'
-       {0xd1,  0x200 | 0x4b},  // 'Ñ'
-       {0xd2,  0x200 | 0x4c},  // 'Ò'
-       {0xd3,  0x200 | 0xbb},  // 'Ó'
-       {0xd4,  0x200 | 0xbd},  // 'Ô'    *** MODIFIED ***
-       {0xd5,  0x200 | 0xde},  // 'Õ'    *** MODIFIED ***
-       {0xd6,  0x200 | 0xdc},  // 'Ö'    *** MODIFIED ***
-       {0xd7,  0x200 | 0x4e},  // '×'    *** MODIFIED ***
-       {0xd8,  0x200 | 0x4d},  // 'Ø'    *** MODIFIED ***
-       {0xd9,  0x200 | 0xbc},  // 'Ù'    *** MODIFIED ***
-       {0xda,  0x200 | 0xbe},  // 'Ú'    *** MODIFIED ***
-       {0xdb,  0x200 | 0xbf},  // 'Û'    *** MODIFIED ***
-       {0xdc,  0x200 | 0xc0},  // 'Ü'    *** MODIFIED ***
-       {0xdd,  0x200 | 0x78},  // 'Ý'    *** MODIFIED ***
-       {0xde,  0x200 | 0xba},  // 'Þ'    *** MODIFIED ***
-       {0xdf,  0x200 | 0xdd},  // 'ß'    *** MODIFIED ***
+       {0xa1,  0x300 | 0xbe},  // '。'    *** MODIFIED ***
+       {0xa2,  0x300 | 0x38},  // 'ï½¢'    *** MODIFIED ***
+       {0xa3,  0x300 | 0x39},  // 'ï½£'    *** MODIFIED ***
+       {0xa4,  0x300 | 0xbc},  // '、'    *** MODIFIED ***
+       {0xa5,  0x300 | 0x30},  // 'ï½¥'    *** MODIFIED ***
+       {0xa6,  0x200 | 0xdb},  // 'ヲ'    *** MODIFIED ***
+       {0xa7,  0x300 | 0x31},  // 'ァ'
+       {0xa8,  0x300 | 0x32},  // 'ィ'
+       {0xa9,  0x300 | 0x33},  // 'ゥ'
+       {0xaa,  0x300 | 0x34},  // 'ェ'
+       {0xab,  0x300 | 0x35},  // 'ォ'
+       {0xac,  0x300 | 0xbd},  // 'ャ'    *** MODIFIED ***
+       {0xad,  0x300 | 0xde},  // 'ï½­'    *** MODIFIED ***
+       {0xae,  0x300 | 0xdc},  // 'ï½®'    *** MODIFIED ***
+       {0xaf,  0x300 | 0x43},  // 'ッ'
+       {0xb0,  0x200 | 0xe2},  // 'ï½°'    *** MODIFIED ***
+       {0xb1,  0x200 | 0x31},  // 'ï½±'
+       {0xb2,  0x200 | 0x32},  // 'ï½²'
+       {0xb3,  0x200 | 0x33},  // 'ï½³'
+       {0xb4,  0x200 | 0x34},  // 'ï½´'
+       {0xb5,  0x200 | 0x35},  // 'ï½µ'
+       {0xb6,  0x200 | 0x51},  // 'カ'
+       {0xb7,  0x200 | 0x57},  // 'ï½·'
+       {0xb8,  0x200 | 0x45},  // 'ク'
+       {0xb9,  0x200 | 0x52},  // 'ï½¹'
+       {0xba,  0x200 | 0x54},  // 'コ'
+       {0xbb,  0x200 | 0x41},  // 'ï½»'
+       {0xbc,  0x200 | 0x53},  // 'ï½¼'
+       {0xbd,  0x200 | 0x44},  // 'ï½½'
+       {0xbe,  0x200 | 0x46},  // 'ï½¾'
+       {0xbf,  0x200 | 0x47},  // 'ソ'
+       {0xc0,  0x200 | 0x5a},  // ''
+       {0xc1,  0x200 | 0x58},  // ''
+       {0xc2,  0x200 | 0x43},  // ''
+       {0xc3,  0x200 | 0x56},  // ''
+       {0xc4,  0x200 | 0x42},  // ''
+       {0xc5,  0x200 | 0x36},  // ''
+       {0xc6,  0x200 | 0x37},  // ''
+       {0xc7,  0x200 | 0x38},  // ''
+       {0xc8,  0x200 | 0x39},  // ''
+       {0xc9,  0x200 | 0x30},  // ''
+       {0xca,  0x200 | 0x59},  // ''
+       {0xcb,  0x200 | 0x55},  // ''
+       {0xcc,  0x200 | 0x49},  // ''
+       {0xcd,  0x200 | 0x4f},  // ''
+       {0xce,  0x200 | 0x50},  // ''
+       {0xcf,  0x200 | 0x48},  // ''
+       {0xd0,  0x200 | 0x4a},  // ''
+       {0xd1,  0x200 | 0x4b},  // ''
+       {0xd2,  0x200 | 0x4c},  // ''
+       {0xd3,  0x200 | 0xbb},  // ''
+       {0xd4,  0x200 | 0xbd},  // ''    *** MODIFIED ***
+       {0xd5,  0x200 | 0xde},  // ''    *** MODIFIED ***
+       {0xd6,  0x200 | 0xdc},  // ''    *** MODIFIED ***
+       {0xd7,  0x200 | 0x4e},  // ''    *** MODIFIED ***
+       {0xd8,  0x200 | 0x4d},  // ''    *** MODIFIED ***
+       {0xd9,  0x200 | 0xbc},  // ''    *** MODIFIED ***
+       {0xda,  0x200 | 0xbe},  // ''    *** MODIFIED ***
+       {0xdb,  0x200 | 0xbf},  // ''    *** MODIFIED ***
+       {0xdc,  0x200 | 0xc0},  // ''    *** MODIFIED ***
+       {0xdd,  0x200 | 0x78},  // ''    *** MODIFIED ***
+       {0xde,  0x200 | 0xba},  // ''    *** MODIFIED ***
+       {0xdf,  0x200 | 0xdd},  // ''    *** MODIFIED ***
        {-1,    -1},
 };
 #endif
@@ -175,6 +178,19 @@ static const _TCHAR *sound_device_caption[] = {
 };
 #endif
 
+#ifdef USE_JOY_BUTTON_CAPTIONS
+static const _TCHAR *joy_button_captions[] = {
+       _T("Up"),
+       _T("Down"),
+       _T("Left"),
+       _T("Right"),
+       _T("Button #1"),
+       _T("Button #2"),
+       _T("Run"),
+       _T("Select"),
+};
+#endif
+
 class EMU;
 class DEVICE;
 class EVENT;
@@ -190,6 +206,9 @@ class Z80;
 namespace MZ700 {
 //class CMOS;
        class EMM;
+#if defined(_MZ700) || defined(_MZ1500)
+       class JOYSTICK;
+#endif
        class KANJI;
        class KEYBOARD;
        class MEMORY;
@@ -258,6 +277,9 @@ protected:
 #endif
        MZ700::QUICKDISK* qd;
 #endif
+#if defined(_MZ700) || defined(_MZ1500)
+       MZ700::JOYSTICK* joystick;
+#endif
        
 #if defined(_MZ800)
        int boot_mode;
index 6177628..002e597 100644 (file)
@@ -9,8 +9,10 @@ set(BASIC_VM_FILES_PC6001
        psub.cpp
        sub.cpp
        timer.cpp
+       
        pc6001.cpp
 )
+
 if(${EXE_NAME} STREQUAL emupc6001)
        add_library(vm_${EXE_NAME}
                ../mc6847.cpp
@@ -19,19 +21,16 @@ if(${EXE_NAME} STREQUAL emupc6001)
        )
 elseif(${EXE_NAME} STREQUAL emupc6601)
        add_library(vm_${EXE_NAME}
-               floppy.cpp
-               memory_draw.cpp
+               ./floppy.cpp
                ${BASIC_VM_FILES_PC6001}
        )
 elseif(${EXE_NAME} STREQUAL emupc6601sr)
        add_library(vm_${EXE_NAME}
-               floppy.cpp
-               memory_draw.cpp
+               ./floppy.cpp
                ${BASIC_VM_FILES_PC6001}
        )
 else()
        add_library(vm_${EXE_NAME}
-               memory_draw.cpp
                ${BASIC_VM_FILES_PC6001}
        )
 endif()
index ad4d63f..c8c2e4b 100644 (file)
@@ -1,13 +1,3 @@
-/** iP6: PC-6000/6600 series emualtor ************************/
-/**                                                         **/
-/**                         Refresh.c                       **/
-/**                                                         **/
-/** modified by Windy 2002-2004                             **/
-/** by ISHIOKA Hiroshi 1998,1999                            **/
-/** This code is based on fMSX written by Marat Fayzullin   **/
-/** and Adaptions for any X-terminal by Arnold Metselaar    **/
-/*************************************************************/
-
 /*
        NEC PC-6001 Emulator 'yaPC-6001'
        NEC PC-6001mkII Emulator 'yaPC-6201'
 */
 
 #include "./memory.h"
-#include "timer.h"
+#include "./timer.h"
 
 #define RAM            (MEMORY_BASE + RAM_BASE)
 #define BASICROM       (MEMORY_BASE + BASICROM_BASE)
 #define EXTROM         (MEMORY_BASE + EXTROM_BASE)
 #define CGROM1         (MEMORY_BASE + CGROM1_BASE)
 #define EmptyRAM       (MEMORY_BASE + EmptyRAM_BASE)
-// PC-6001mkII, PC-6601
-#define VOICEROM       (MEMORY_BASE + VOICEROM_BASE)
-#define KANJIROM       (MEMORY_BASE + KANJIROM_BASE)
-#define CGROM5         (MEMORY_BASE + CGROM5_BASE)
-// PC-6001mkIISR, PC-6601SR
-#define EXTRAM         (MEMORY_BASE + EXTRAM_BASE)
-#define SYSTEMROM1     (MEMORY_BASE + SYSTEMROM1_BASE)
-#define SYSTEMROM2     (MEMORY_BASE + SYSTEMROM2_BASE)
-#define CGROM6         (MEMORY_BASE + CGROM6_BASE)
 
 namespace PC6001 {
 
 void MEMORY::initialize()
 {
        FILEIO* fio = new FILEIO();
-#if defined(_PC6001)
        if(fio->Fopen(create_local_path(_T("BASICROM.60")), FILEIO_READ_BINARY)) {
                fio->Fread(BASICROM, 0x4000, 1);
                fio->Fclose();
@@ -53,128 +33,15 @@ void MEMORY::initialize()
                fio->Fread(CGROM1, 0x1000, 1);
                fio->Fclose();
        }
-#elif defined(_PC6001MK2)
-       if (fio->Fopen(create_local_path(_T("CGROM62.62")), FILEIO_READ_BINARY)) {
-               fio->Fread(CGROM5, 0x2000, 1);
-               fio->Fclose();
-       }
-       else if (fio->Fopen(create_local_path(_T("CGROM60m.62")), FILEIO_READ_BINARY)) {
-               fio->Fread(CGROM5, 0x2000, 1);
-               fio->Fclose();
-       }
-       if (fio->Fopen(create_local_path(_T("BASICROM.62")), FILEIO_READ_BINARY)) {
-               fio->Fread(BASICROM, 0x8000, 1);
-               fio->Fclose();
-       }
-       if (fio->Fopen(create_local_path(_T("CGROM60.62")), FILEIO_READ_BINARY)) {
-               fio->Fread(CGROM1, 0x2000, 1);
-               fio->Fclose();
-       }
-       if (fio->Fopen(create_local_path(_T("KANJIROM.62")), FILEIO_READ_BINARY)) {
-               fio->Fread(KANJIROM, 0x8000, 1);
-               fio->Fclose();
-       }
-       if (fio->Fopen(create_local_path(_T("VOICEROM.62")), FILEIO_READ_BINARY)) {
-               fio->Fread(VOICEROM, 0x4000, 1);
-               fio->Fclose();
-       }
-#elif defined(_PC6601)
-       if (fio->Fopen(create_local_path(_T("CGROM66.66")), FILEIO_READ_BINARY)) {
-               fio->Fread(CGROM5, 0x2000, 1);
-               fio->Fclose();
-       }
-       if (fio->Fopen(create_local_path(_T("BASICROM.66")), FILEIO_READ_BINARY)) {
-               fio->Fread(BASICROM, 0x8000, 1);
-               fio->Fclose();
-       }
-       if (fio->Fopen(create_local_path(_T("CGROM60.66")), FILEIO_READ_BINARY)) {
-               fio->Fread(CGROM1, 0x2000, 1);
-               fio->Fclose();
-       }
-       if (fio->Fopen(create_local_path(_T("KANJIROM.66")), FILEIO_READ_BINARY)) {
-               fio->Fread(KANJIROM, 0x8000, 1);
-               fio->Fclose();
-       }
-       if (fio->Fopen(create_local_path(_T("VOICEROM.66")), FILEIO_READ_BINARY)) {
-               fio->Fread(VOICEROM, 0x4000, 1);
-               fio->Fclose();
-       }
-#elif defined(_PC6601SR) || defined(_PC6001MK2SR)
-       if (fio->Fopen(create_local_path(_T("CGROM68.68")), FILEIO_READ_BINARY)) {
-               fio->Fread(CGROM6, 0x4000, 1);
-               fio->Fclose();
-       }
-       memcpy(CGROM1, CGROM6, 0x2400);
-       memcpy(CGROM5, CGROM6+0x2000, 0x2000);
-       if (fio->Fopen(create_local_path(_T("SYSTEMROM1.68")), FILEIO_READ_BINARY)) {
-               fio->Fread(SYSTEMROM1, 0x10000, 1);
-               fio->Fclose();
-       }
-       memcpy(BASICROM, SYSTEMROM1, 0x8000);
-       if (fio->Fopen(create_local_path(_T("SYSTEMROM2.68")), FILEIO_READ_BINARY)) {
-               fio->Fread(SYSTEMROM2, 0x10000, 1);
-               fio->Fclose();
-       }
-       memcpy(VOICEROM, SYSTEMROM2+0x4000, 0x4000);
-       memcpy(KANJIROM, SYSTEMROM2+0x8000, 0x8000);
-#endif
        delete fio;
        
-#ifndef _PC6001
-       int i;
-       // for mkII/66
-       int Pal11[ 4] = { 15, 8,10, 8 };
-       int Pal12[ 8] = { 10,11,12, 9,15,14,13, 1 };
-       int Pal13[ 8] = { 10,11,12, 9,15,14,13, 1 };
-       int Pal14[ 4] = {  8,10, 8,15 };
-       int Pal15[ 8] = {  8,9,11,14, 8,9,14,15 };
-       int Pal53[32] = {  0, 4, 1, 5, 2, 6, 3, 7, 8,12, 9,13,10,14,11,15,
-               10,11,12, 9,15,14,13, 1,10,11,12, 9,15,14,13, 1 };
-       
-       for(i=0;i<32;i++) {
-               BPal53[i]=Pal53[i];
-               if (i>15) continue;
-               BPal[i]=i;
-               if (i>7) continue;
-               BPal12[i]=Pal12[i];
-               BPal13[i]=Pal13[i];
-               BPal15[i]=Pal15[i];
-               if (i>3) continue;
-               BPal11[i]=Pal11[i];
-               BPal14[i]=Pal14[i];
-       }
-       for (i=0;i<32;i++) BPal62[i] = BPal53[i];       // for RefreshScr62/63
-       for (i=0;i<16;i++) BPal61[i] = BPal[i];         // for RefreshScr61
-
-       // mk2\81` palette
-       palette_pc[ 0] = RGB_COLOR(0x14,0x14,0x14); // COL065                   = 141414                        ;mk2\81\93§\96¾(\8d\95)
-       palette_pc[ 1] = RGB_COLOR(0xFF,0xAC,0x00); // COL066                   = FFAC00                        ;mk2\81\9eò
-       palette_pc[ 2] = RGB_COLOR(0x00,0xFF,0xAC); // COL067                   = 00FFAC                        ;mk2\81\90Â\97Î
-       palette_pc[ 3] = RGB_COLOR(0xAC,0xFF,0x00); // COL068                   = ACFF00                        ;mk2\81\89©\97Î
-       palette_pc[ 4] = RGB_COLOR(0xAC,0x00,0xFF); // COL069                   = AC00FF                        ;mk2\81\90Â\8e\87
-       palette_pc[ 5] = RGB_COLOR(0xFF,0x00,0xAC); // COL070                   = FF00AC                        ;mk2\81\90Ô\8e\87
-       palette_pc[ 6] = RGB_COLOR(0x00,0xAC,0xFF); // COL071                   = 00ACFF                        ;mk2\81\8bó\90F
-       palette_pc[ 7] = RGB_COLOR(0xAC,0xAC,0xAC); // COL072                   = ACACAC                        ;mk2\81\8aD\90F
-       palette_pc[ 8] = RGB_COLOR(0x14,0x14,0x14); // COL073                   = 141414                        ;mk2\81\8d\95
-       palette_pc[ 9] = RGB_COLOR(0xFF,0x00,0x00); // COL074                   = FF0000                        ;mk2\81\90Ô
-       palette_pc[10] = RGB_COLOR(0x00,0xFF,0x00); // COL075                   = 00FF00                        ;mk2\81\97Î
-       palette_pc[11] = RGB_COLOR(0xFF,0xFF,0x00); // COL076                   = FFFF00                        ;mk2\81\89©
-       palette_pc[12] = RGB_COLOR(0x00,0x00,0xFF); // COL077                   = 0000FF                        ;mk2\81\90Â
-       palette_pc[13] = RGB_COLOR(0xFF,0x00,0xFF); // COL078                   = FF00FF                        ;mk2\81\83}\83[\83\93\83^
-       palette_pc[14] = RGB_COLOR(0x00,0xFF,0xFF); // COL079                   = 00FFFF                        ;mk2\81\83V\83A\83\93
-       palette_pc[15] = RGB_COLOR(0xFF,0xFF,0xFF); // COL080                   = FFFFFF                        ;mk2\81\94\92
-       
-       // register event
-#endif
        register_vline_event(this);
 }
 
 void MEMORY::reset()
 {
-#ifdef _PC6001
        int J;
        if (!inserted) {
-///            EXTROM1 = EXTROM2 = EmptyRAM;
                EXTROM1 = RAM + 0x4000;
                EXTROM2 = RAM + 0x6000;
                FILEIO* fio = new FILEIO();
@@ -196,76 +63,11 @@ void MEMORY::reset()
        RdMem[2] = EXTROM1; RdMem[3] = EXTROM2;
        for(J=4;J<8;J++) {RdMem[J]=RAM+0x2000*J;WrMem[J]=RAM+0x2000*J;};
        EnWrite[0]=0; EnWrite[1]=EnWrite[2]=EnWrite[3]=1;
-#else
-       int I, J;
-       uint8_t *addr=RAM;
-       memset(RAM ,0,0x10000);
-       memset(EmptyRAM, 0, 0x2000);
-       for(I=0; I<256; I++ ){
-               for( J=0; J<64; J++ ){
-                       *addr++ = 0x00;
-                       *addr++ = 0xff;
-               }
-               for( J=0; J<64; J++ ){
-                       *addr++ = 0xff;
-                       *addr++ = 0x00;
-               }
-       }
-       if (!inserted) {
-               EXTROM1 = EXTROM2 = EmptyRAM;
-       }
-#if defined(_PC6001MK2) || defined(_PC6601)
-       static_cast<VM *>(vm)->sr_mode=0;
-       CGROM = CGROM1;
-       VRAM = RAM+0xE000;
-       for (I=0; I<0x200; I++ ) *(VRAM+I)=0xde;
-       for(J=0;J<4;J++) {RdMem[J]=BASICROM+0x2000*J;WrMem[J]=RAM+0x2000*J;};
-       for(J=4;J<8;J++) {RdMem[J]=RAM+0x2000*J;WrMem[J]=RAM+0x2000*J;};
-       EnWrite[0]=EnWrite[1]=0; EnWrite[2]=EnWrite[3]=1;
-#elif defined(_PC6601SR) || defined(_PC6001MK2SR)
-       static_cast<VM *>(vm)->sr_mode=1;
-       bitmap=1;
-       cols=40;
-       rows=20;
-       lines=200;
-       memset(EXTRAM ,0,0x10000);
-       for (int i=0; i<16; i++) palet[i] = i;
-       port60[0]= 0xf8;                                        //I/O[60..67] READ  MEMORY MAPPING
-       for (I=1; I<15; I++) port60[I]=0;       //I/O[68-6f]  WRITE MEMORY MAPPING
-       portC1 = 0x00;                                          //I/O[C1]     CRT CONTROLLER MODE
-       portC8 = 0x00;                                          //I/O[C8]     CRT CONTROLLER TYPE
-       portCA = 0x00;                                          //I/O[CA]     X GEOMETORY low  HARDWARE SCROLL
-       portCB = 0x00;                                          //I/O[CB]     X GEOMETORY high HARDWARE SCROLL
-       portCC = 0x00;                                          //I/O[CC]     Y GEOMETORY      HARDWARE SCROLL
-       portCE = 0x00;                                          //I/O[CE]     LINE SETTING  BITMAP (low) */
-       portCF = 0x00;                                          //I/O[CF]     LINE SETTING  BITMAP (High) */
-       CGROM=CGROM6;
-       make_semigraph();
-       for(J=0;J<4;J++) {RdMem[J]=SYSTEMROM1+0x2000*J+0x8000;WrMem[J]=RAM+0x2000*J;};
-       RdMem[2] = EXTROM1; RdMem[3] = EXTROM2;
-       for(J=4;J<8;J++) {RdMem[J]=RAM+0x2000*J;WrMem[J]=RAM+0x2000*J;};
-       EnWrite[0]=EnWrite[1]=0; EnWrite[2]=EnWrite[3]=1;
-       VRAM=RAM;
-       TEXTVRAM=RAM;
-       SYSROM2=EmptyRAM;
-#endif
-       portF0 = 0x11;
-       portF1 = 0xdd;
-       CRTMode1 = CRTMode2 = CRTMode3 = 0;
-       CSS3=CSS2=CSS1=0;
-       CurKANJIROM = KANJIROM;
-#endif
        CGSW93 = CRTKILL = 0;
 }
 
 void MEMORY::write_data8(uint32_t addr, uint32_t data)
 {
-#if defined(_PC6601SR) || defined(_PC6001MK2SR)
-       /* Graphics Vram Write (SR basic) */
-       if(static_cast<VM *>(vm)->sr_mode && chk_gvram(addr ,8)) 
-               gvram_write(addr, data);
-       else
-#endif
        /* normal memory write */
        if(EnWrite[addr >> 14]) 
                WrMem[addr >> 13][addr & 0x1FFF] = data;
@@ -273,72 +75,23 @@ void MEMORY::write_data8(uint32_t addr, uint32_t data)
 
 uint32_t MEMORY::read_data8(uint32_t addr)
 {
-#if defined(_PC6601SR) || defined(_PC6001MK2SR)
-       /* Graphics Vram Read (SR basic) */
-       if(static_cast<VM *>(vm)->sr_mode && chk_gvram(addr, 0))
-               return(gvram_read(addr));
-#endif
        return(RdMem[addr >> 13][addr & 0x1FFF]);
 }
 
 void MEMORY::write_data8w(uint32_t addr, uint32_t data, int *wait)
 {
-#ifdef _PC6001
        *wait = addr < 0x8000 ? 1 : 0;
-#else
-       bool is_rom;
-       uint32_t portF3 = d_timer->read_io8(0xf3);
-#if defined(_PC6601SR) || defined(_PC6001MK2SR)
-       if (static_cast<VM *>(vm)->sr_mode) {
-               is_rom = (port60[8 + (addr >> 13)] & 0xf0) > 0x20 ? true: false;
-       } else
-#endif
-       {
-               is_rom = EnWrite[addr >> 14] ? false : true;
-       }
-       *wait = is_rom && (portF3 & 0x40) || !is_rom && (portF3 & 0x20) ? 1 : 0;
-#endif
        write_data8(addr, data);
 }
 
 uint32_t MEMORY::read_data8w(uint32_t addr, int *wait)
 {
-#ifdef _PC6001
        *wait = addr < 0x8000 ? 1 : 0;
-#else
-       bool is_rom;
-       uint32_t portF3 = d_timer->read_io8(0xf3);
-#if defined(_PC6601SR) || defined(_PC6001MK2SR)
-       if (static_cast<VM *>(vm)->sr_mode) {
-               is_rom = (port60[addr >> 13] & 0xf0) > 0x20 ? true : false;
-       } else
-#endif
-       {
-               if (CGSW93 && 0x6000 <= addr && addr < 0x8000) {
-                       is_rom = true;
-               } else if (addr < 0x4000) {
-                       is_rom = (portF0 & 0x0f) == 0x0d || (portF0 & 0x0f) == 0x0e ? false : true;
-               } else if (addr < 0x8000) {
-                       is_rom = (portF0 & 0xf0) == 0xd0 || (portF0 & 0xf0) == 0xe0 ? false : true;
-               } else if (addr < 0xc000) {
-                       is_rom = (portF1 & 0x0f) == 0x0d || (portF1 & 0x0f) == 0x0e ? false : true;
-               } else {
-                       is_rom = (portF1 & 0xf0) == 0xd0 || (portF1 & 0xf0) == 0xe0 ? false : true;
-               }
-       }
-       *wait = is_rom && (portF3 & 0x40) || !is_rom && (portF3 & 0x20) ? 1 : 0;
-#endif
        return read_data8(addr);
 }
 
 uint32_t MEMORY::fetch_op(uint32_t addr, int *wait)
 {
-#ifndef _PC6001
-       uint32_t portF3 = d_timer->read_io8(0xf3);
-       if ((portF3 & 0x80) == 0) {
-               return read_data8w(addr, wait);
-       }
-#endif
        *wait = 1;
        return read_data8(addr);
 }
@@ -353,7 +106,6 @@ void MEMORY::write_io8(uint32_t addr, uint32_t data)
        uint8_t Value=data;
        switch(port)
        {
-#ifdef _PC6001
        /// 64K RAM ///
        case 0x00:
                if (Value & 1) {
@@ -382,291 +134,10 @@ void MEMORY::write_io8(uint32_t addr, uint32_t data)
                        EnWrite[0]=EnWrite[1]=0;
                }
                break;
-#else
-#if defined(_PC6601SR) || defined(_PC6001MK2SR)
-       case 0x40:
-       case 0x41:
-       case 0x42:
-       case 0x43:
-               int reg,val;
-               reg= 15-(port-0x40);
-               val= 15-Value;
-               palet[ reg]= val;
-               do_palet( reg,val);
-               break;
-       case 0x60:
-       case 0x61:
-       case 0x62:
-       case 0x63:
-       case 0x64:
-       case 0x65:
-       case 0x66:
-       case 0x67:
-               int start_adr;
-               start_adr= Value & 0xe;
-               port60[port-0x60]= Value;
-               switch( Value & 0xf0) {
-               case 0xf0: RdMem[(port& 0xf)]=SYSTEMROM1+(start_adr)*0x1000;break;
-               case 0xe0: RdMem[(port& 0xf)]=SYSTEMROM2+(start_adr)*0x1000;break;
-               case 0xd0: RdMem[(port& 0xf)]=    CGROM6+(start_adr)*0x1000;break;
-               case 0xc0: RdMem[(port& 0xf)]=   EXTROM2; /*+(start_adr)*0x1000; */break;
-               case 0xb0: RdMem[(port& 0xf)]=   EXTROM1; /*+(start_adr)*0x1000; */break;
-               case 0x00: RdMem[(port& 0xf)]=       RAM+(start_adr)*0x1000;break;
-               case 0x20: if (EXTRAM) RdMem[ port & 0xf]=  EXTRAM+((start_adr)*0x1000); break;
-               }
-               return;
-       case 0x68:
-       case 0x69:
-       case 0x6a:
-       case 0x6b:
-       case 0x6c:
-       case 0x6d:
-       case 0x6e:
-       case 0x6f:
-               port60[port-0x60]= Value;
-               if ((Value & 0xf0)==0x00) {
-                       WrMem[ (port& 0xf)-8]= RAM+((Value & 0xe)*0x1000);
-                       EnWrite[ ((port & 0xe)-8)/2 ]= 1;
-               }
-               if (EXTRAM) {
-                       if((Value & 0xf0)==0x20) {
-                               WrMem[ (port& 0xf)-8]= EXTRAM+((Value & 0xe)*0x1000);
-                       }
-               }
-               break;
-#endif
-       case 0xB0:
-               if (static_cast<VM *>(vm)->sr_mode) {
-                       d_timer->set_portB0(Value);
-               } else {
-                       VRAM=(RAM+VRAMHead[CRTMode1][(data&0x06)>>1]);
-                       if (CRTMode1 && Value == 6) d_timer->set_portB0(Value | 0x01); /// Colony Oddysey
-                       else d_timer->set_portB0(Value);
-               }
-               break;
-       case 0xC0: // CSS
-               CSS3=(Value&0x04)<<2;CSS2=(Value&0x02)<<2;CSS1=(Value&0x01)<<2;
-               break;
-       case 0xC1: // CRT controller mode
-               CRTMode1=(Value&0x02) ? 0 : 1;
-               CRTMode2=(Value&0x04) ? 0 : 1;
-               CRTMode3=(Value&0x08) ? 0 : 1;
-#if defined(_PC6601SR) || defined(_PC6001MK2SR)
-               portC1 = Value;
-               if (static_cast<VM *>(vm)->sr_mode)
-                       lines=(Value&0x01) ? 200 : 204;
-               if (static_cast<VM *>(vm)->sr_mode)
-                       CGROM = CGROM6;    // N66SR BASIC use CGROM6
-               else
-                       CGROM = ((CRTMode1 == 0) ? CGROM1 : CGROM5);
-               if (static_cast<VM *>(vm)->sr_mode) {
-                       if (CRTMode1==1 && CRTMode2==0 && !bitmap) { /* width 80 */
-                               cols=80;
-                       } else if(CRTMode1==0 && CRTMode2==0 && !bitmap) { /* Width 40  */
-                               cols=40;
-                       }
-               }
-#else
-               CGROM = ((CRTMode1 == 0) ? CGROM1 : CGROM5);
-#endif
-               break;
-       case 0xC2: // ROM swtich
-               if (static_cast<VM *>(vm)->sr_mode) return;     /* sr_mode do nothing! */
-               if ((Value&0x02)==0x00) CurKANJIROM=KANJIROM;
-               else CurKANJIROM=KANJIROM+0x4000;
-               if ((Value&0x01)==0x00) {
-///                    if(RdMem[0]!=BASICROM) RdMem[0]=VOICEROM;
-///                    if(RdMem[1]!=BASICROM+0x2000) RdMem[1]=VOICEROM+0x2000;
-///                    if(RdMem[0]!=BASICROM)        RdMem[0]=SYSTEMROM2;
-///                    if(RdMem[1]!=BASICROM+0x2000) RdMem[1]=SYSTEMROM2+0x2000;
-                       if(RdMem[2]!=BASICROM+0x4000) RdMem[2]=VOICEROM;
-                       if(RdMem[3]!=BASICROM+0x6000) RdMem[3]=VOICEROM+0x2000;
-               }
-               else {
-                       write_io8(0xF0,portF0);         
-               };
-               break;
-       case 0xC3: break; // C2H in/out switch
-#if defined(_PC6601SR) || defined(_PC6001MK2SR)
-       case 0xC8:
-               portC8  = Value;
-               bitmap  = (Value & 8)? 0:1;
-               rows    = (Value & 4)? 20:25;
-///            busreq  = (Value & 2)? 0:1;
-               static_cast<VM *>(vm)->sr_mode = ((Value & 1)==1) ? 0 : 1;
-               if (bitmap && static_cast<VM *>(vm)->sr_mode)
-               {
-                       VRAM = (Value & 0x10) ? RAM+0x8000:RAM+0x0000;
-               }
-               if (static_cast<VM *>(vm)->sr_mode) {
-                       CGROM=CGROM6; 
-                       portF0=0x11;
-               }
-               break;  
-       case 0xC9:
-               if (static_cast<VM *>(vm)->sr_mode && !bitmap ) 
-               {               
-                       TEXTVRAM=RAM+(Value & 0xf)*0x1000;
-               }
-               break;  
-       case 0xCA: portCA=Value; break; // Graphics scroll X low
-       case 0xCB: portCB=Value; break;// Graphics scroll X high
-       case 0xCC: portCC=Value; break; // Graphics scroll Y
-       case 0xCE: portCE=Value; break; /* Graphics Y zahyou SR-BASIC add 2002/2 */
-       case 0xCF: portCF=0; break;
-#endif
-       case 0xF0: // read block set 
-               if (static_cast<VM *>(vm)->sr_mode) return;     /* sr_mode do nothing! */
-               portF0 = Value;
-               switch(data & 0x0f)
-               {
-               case 0x00: RdMem[0]=RdMem[1]=EmptyRAM; break;
-               case 0x01: RdMem[0]=BASICROM;RdMem[1]=BASICROM+0x2000; break;
-               case 0x02: RdMem[0]=CurKANJIROM;RdMem[1]=CurKANJIROM+0x2000; break;
-               case 0x03: RdMem[0]=RdMem[1]=EXTROM2; break;
-               case 0x04: RdMem[0]=RdMem[1]=EXTROM1; break;
-               case 0x05: RdMem[0]=CurKANJIROM;RdMem[1]=BASICROM+0x2000; break;
-#if defined(_PC6601SR) || defined(_PC6001MK2SR)
-               case 0x06: RdMem[0]=BASICROM;RdMem[1]=(SYSROM2==EmptyRAM ? CurKANJIROM+0x2000 : SYSROM2); break;
-#else
-               case 0x06: RdMem[0]=BASICROM;RdMem[1]=CurKANJIROM+0x2000;break;
-#endif
-               case 0x07: RdMem[0]=EXTROM1;RdMem[1]=EXTROM2; break;
-               case 0x08: RdMem[0]=EXTROM2;RdMem[1]=EXTROM1; break;
-               case 0x09: RdMem[0]=EXTROM2;RdMem[1]=BASICROM+0x2000; break;
-               case 0x0a: RdMem[0]=BASICROM;RdMem[1]=EXTROM2; break;
-               case 0x0b: RdMem[0]=EXTROM1;RdMem[1]=CurKANJIROM+0x2000; break;
-               case 0x0c: RdMem[0]=CurKANJIROM;RdMem[1]=EXTROM1; break;
-               case 0x0d: RdMem[0]=RAM;RdMem[1]=RAM+0x2000; break;
-#if defined(_PC6601SR) || defined(_PC6001MK2SR)
-               case 0x0e: if (EXTRAM) {RdMem[0]=EXTRAM; RdMem[1]=EXTRAM+0x2000;break;}
-#else
-               case 0x0e: RdMem[0]=RdMem[1]=EmptyRAM; break;
-#endif
-               case 0x0f: RdMem[0]=RdMem[1]=EmptyRAM; break;
-               };
-               switch(data & 0xf0)
-               {
-               case 0x00: RdMem[2]=RdMem[3]=EmptyRAM; break;
-               case 0x10: RdMem[2]=BASICROM+0x4000;RdMem[3]=BASICROM+0x6000; break;
-               case 0x20: RdMem[2]=VOICEROM;RdMem[3]=VOICEROM+0x2000; break;
-               case 0x30: RdMem[2]=RdMem[3]=EXTROM2; break;
-               case 0x40: RdMem[2]=RdMem[3]=EXTROM1; break;
-               case 0x50: RdMem[2]=VOICEROM;RdMem[3]=BASICROM+0x6000; break;
-               case 0x60: RdMem[2]=BASICROM+0x4000;RdMem[3]=VOICEROM+0x2000; break;
-               case 0x70: RdMem[2]=EXTROM1;RdMem[3]=EXTROM2; break;
-               case 0x80: RdMem[2]=EXTROM2;RdMem[3]=EXTROM1; break;
-               case 0x90: RdMem[2]=EXTROM2;RdMem[3]=BASICROM+0x6000; break;
-               case 0xa0: RdMem[2]=BASICROM+0x4000;RdMem[3]=EXTROM2; break;
-               case 0xb0: RdMem[2]=EXTROM1;RdMem[3]=VOICEROM+0x2000; break;
-               case 0xc0: RdMem[2]=VOICEROM;RdMem[3]=EXTROM1; break;
-               case 0xd0: RdMem[2]=RAM+0x4000;RdMem[3]=RAM+0x6000; break;
-#if defined(_PC6601SR) || defined(_PC6001MK2SR)
-               case 0xe0: if (EXTRAM) {RdMem[2]=EXTRAM+0x4000; RdMem[3]=EXTRAM+0x6000; break;}
-#else
-               case 0xe0: RdMem[2]=RdMem[3]=EmptyRAM; break;
-#endif
-               case 0xf0: RdMem[2]=RdMem[3]=EmptyRAM; break;
-               };
-               if (CGSW93)     RdMem[3] = CGROM;
-               break;
-       case 0xF1: // read block set
-               if (static_cast<VM *>(vm)->sr_mode) return;     /* sr_mode do nothing! */
-               portF1 = Value;
-               switch(data & 0x0f)
-               {
-               case 0x00: RdMem[4]=RdMem[5]=EmptyRAM; break;
-               case 0x01: RdMem[4]=BASICROM;RdMem[5]=BASICROM+0x2000; break;
-               case 0x02: RdMem[4]=CurKANJIROM;RdMem[5]=CurKANJIROM+0x2000; break;
-               case 0x03: RdMem[4]=RdMem[5]=EXTROM2; break;
-               case 0x04: RdMem[4]=RdMem[5]=EXTROM1; break;
-               case 0x05: RdMem[4]=CurKANJIROM;RdMem[5]=BASICROM+0x2000; break;
-               case 0x06: RdMem[4]=BASICROM;RdMem[5]=CurKANJIROM+0x2000; break;
-               case 0x07: RdMem[4]=EXTROM1;RdMem[5]=EXTROM2; break;
-               case 0x08: RdMem[4]=EXTROM2;RdMem[5]=EXTROM1; break;
-               case 0x09: RdMem[4]=EXTROM2;RdMem[5]=BASICROM+0x2000; break;
-               case 0x0a: RdMem[4]=BASICROM;RdMem[5]=EXTROM2; break;
-               case 0x0b: RdMem[4]=EXTROM1;RdMem[5]=CurKANJIROM+0x2000; break;
-               case 0x0c: RdMem[4]=CurKANJIROM;RdMem[5]=EXTROM1; break;
-               case 0x0d: RdMem[4]=RAM+0x8000;RdMem[5]=RAM+0xa000; break;
-#if defined(_PC6601SR) || defined(_PC6001MK2SR)
-               case 0x0e: if (EXTRAM) {RdMem[4]=EXTRAM+0x8000; RdMem[5]=EXTRAM+0xa000; break;}
-#else
-               case 0x0e: RdMem[4]=RdMem[5]=EmptyRAM; break;
-#endif
-               case 0x0f: RdMem[4]=RdMem[5]=EmptyRAM; break;
-               };
-               switch(data & 0xf0)
-               {
-               case 0x00: RdMem[6]=RdMem[7]=EmptyRAM; break;
-               case 0x10: RdMem[6]=BASICROM+0x4000;RdMem[7]=BASICROM+0x6000; break;
-               case 0x20: RdMem[6]=CurKANJIROM;RdMem[7]=CurKANJIROM+0x2000; break;
-               case 0x30: RdMem[6]=RdMem[7]=EXTROM2; break;
-               case 0x40: RdMem[6]=RdMem[7]=EXTROM1; break;
-               case 0x50: RdMem[6]=CurKANJIROM;RdMem[7]=BASICROM+0x6000; break;
-               case 0x60: RdMem[6]=BASICROM+0x4000;RdMem[7]=CurKANJIROM+0x2000; break;
-               case 0x70: RdMem[6]=EXTROM1;RdMem[7]=EXTROM2; break;
-               case 0x80: RdMem[6]=EXTROM2;RdMem[7]=EXTROM1; break;
-               case 0x90: RdMem[6]=EXTROM2;RdMem[7]=BASICROM+0x6000; break;
-               case 0xa0: RdMem[6]=BASICROM+0x4000;RdMem[7]=EXTROM2; break;
-               case 0xb0: RdMem[6]=EXTROM1;RdMem[7]=CurKANJIROM+0x2000; break;
-               case 0xc0: RdMem[6]=CurKANJIROM;RdMem[7]=EXTROM1; break;
-               case 0xd0: RdMem[6]=RAM+0xc000;RdMem[7]=RAM+0xe000; break;
-#if defined(_PC6601SR) || defined(_PC6001MK2SR)
-               case 0xe0: if (EXTRAM) {RdMem[6]=EXTRAM+0xc000;RdMem[7]=EXTRAM+0xe000; break;}
-#else
-               case 0xe0: RdMem[6]=RdMem[7]=EmptyRAM; break;
-#endif
-               case 0xf0: RdMem[6]=RdMem[7]=EmptyRAM; break;
-               };
-               break;
-       case 0xF2: // write ram block set
-               if (static_cast<VM *>(vm)->sr_mode) return;     /* sr_mode do nothing! */
-               if (data & 0x40) {EnWrite[3]=1;WrMem[6]=RAM+0xc000;WrMem[7]=RAM+0xe000;}
-               else EnWrite[3]=0;
-               if (data & 0x010) {EnWrite[2]=1;WrMem[4]=RAM+0x8000;WrMem[5]=RAM+0xa000;}
-               else EnWrite[2]=0;
-               if (data & 0x04) {EnWrite[1]=1;WrMem[2]=RAM+0x4000;WrMem[3]=RAM+0x6000;}
-               else EnWrite[1]=0;
-               if (data & 0x01) {EnWrite[0]=1;WrMem[0]=RAM;WrMem[1]=RAM+0x2000;}
-               else EnWrite[0]=0;
-#if defined(_PC6601SR) || defined(_PC6001MK2SR)
-               if (EXTRAM) {
-                       if (Value&0x80) {EnWrite[3]=2;WrMem[6]=EXTRAM+0xc000;WrMem[7]=EXTRAM+0xe000;}
-                       if (Value&0x20) {EnWrite[2]=2;WrMem[4]=EXTRAM+0x8000;WrMem[5]=EXTRAM+0xa000;}
-                       if (Value&0x08) {EnWrite[1]=2;WrMem[2]=EXTRAM+0x4000;WrMem[3]=EXTRAM+0x6000;}
-                       if (Value&0x02) {EnWrite[0]=2;WrMem[0]=EXTRAM+0x0000;WrMem[1]=EXTRAM+0x2000;}
-               }
-#endif
-               break;
-#endif
        }
        return;
 }
 
-#ifndef _PC6001
-uint32_t MEMORY::read_io8(uint32_t addr)
-{
-       uint16_t port=(addr & 0x00ff);
-       uint8_t Value=0xff;
-
-       switch(port)
-       {
-#if defined(_PC6601SR) || defined(_PC6001MK2SR)
-       case 0x60:case 0x61:case 0x62:case 0x63:case 0x64:case 0x65:case 0x66:case 0x67:
-       case 0x68:case 0x69:case 0x6a:case 0x6b:case 0x6c:case 0x6d:case 0x6e:case 0x6f:
-               Value=port60[ port-0x60 ];
-               break;
-       case 0xC0: Value=0xff;break;
-       case 0xC2: Value=0xff;break;
-#endif
-       case 0xF0: if (!static_cast<VM *>(vm)->sr_mode) Value=portF0;break;
-       case 0xF1: if (!static_cast<VM *>(vm)->sr_mode) Value=portF1;break;
-       }
-       return(Value);
-}
-#endif
-
 void MEMORY::write_io8w(uint32_t addr, uint32_t data, int* wait)
 {
        *wait = (addr & 0xf0) == 0xa0 ? 1 : 0;
@@ -683,29 +154,12 @@ uint32_t MEMORY::read_io8w(uint32_t addr, int* wait)
 
 void MEMORY::event_vline(int v, int clock)
 {
-#if defined(_PC6601SR) || defined(_PC6001MK2SR)
-       if(static_cast<VM *>(vm)->sr_mode) {
-               if(v == (CRTMode1 ? 200 : 192)) {
-                       d_timer->write_signal(SIG_TIMER_IRQ_VRTC, 1, 1);
-               }
-               if(!CRTKILL) {
-                       // SR\83\82\81[\83h\82ÌBUSRQ\82É\82Â\82¢\82Ä\82Í\81A\82¦\82Ñ\82·\97l\82Ì\8fî\95ñ\91Ò\82¿
-               }
-       } else
-#endif
        {
                if (!CRTKILL) {
-#ifdef _PC6001
                        if (v < 192) {
                                d_cpu->write_signal(SIG_CPU_BUSREQ, 1, 1);
                                register_event_by_clock(this, EVENT_HBLANK, (uint64_t)((double)CPU_CLOCKS / FRAMES_PER_SEC / LINES_PER_FRAME * 296 / 455), false, NULL);
                        }
-#else
-                       if (v < (CRTMode1 ? 200 : 192)) {
-                               d_cpu->write_signal(SIG_CPU_BUSREQ, 1, 1);
-                               register_event_by_clock(this, EVENT_HBLANK, (uint64_t)((double)CPU_CLOCKS / FRAMES_PER_SEC / LINES_PER_FRAME * (CRTMode1 ? 368 : 304) / 456), false, NULL);
-                       }
-#endif
                }
        }
 }
@@ -720,19 +174,11 @@ void MEMORY::event_callback(int event_id, int err)
 void MEMORY::write_signal(int id, uint32_t data, uint32_t mask)
 {
        if(id == SIG_MEMORY_PIO_PORT_C) {
-#ifdef _PC6001
                if(data & 4) {
                        CGSW93=0;RdMem[3]=EXTROM2;
                } else {
                        CGSW93=1; RdMem[3]=CGROM1;
                }
-#else
-               if(data & 4) {
-                       CGSW93=0; if (!static_cast<VM *>(vm)->sr_mode) write_io8(0xf0, portF0);
-               } else {
-                       CGSW93=1; RdMem[3]=CGROM;
-               }
-#endif
                CRTKILL = (data & 2) ? 0 : 1;
                if (CRTKILL) {
                        d_cpu->write_signal(SIG_CPU_BUSREQ, 0, 0);
@@ -751,7 +197,6 @@ void MEMORY::open_cart(const _TCHAR* file_path)
                EnWrite[1]=0;
                inserted = true;
        } else {
-///            EXTROM1 = EXTROM2 = EmptyRAM;
                EXTROM1 = RAM + 0x4000;
                EXTROM2 = RAM + 0x6000;
                EnWrite[1]=1;
@@ -762,14 +207,13 @@ void MEMORY::open_cart(const _TCHAR* file_path)
 
 void MEMORY::close_cart()
 {
-///    EXTROM1 = EXTROM2 = EmptyRAM;
        EXTROM1 = RAM + 0x4000;
        EXTROM2 = RAM + 0x6000;
        EnWrite[1]=1;
        inserted = false;
 }
 
-#define STATE_VERSION  1
+#define STATE_VERSION  2
 
 bool MEMORY::process_state(FILEIO* state_fio, bool loading)
 {
@@ -802,46 +246,6 @@ bool MEMORY::process_state(FILEIO* state_fio, bool loading)
        state_fio->StateArray(EnWrite, sizeof(EnWrite), 1);
        state_fio->StateValue(CGSW93);
        state_fio->StateValue(inserted);
-#ifndef _PC6001
-       state_fio->StateValue(CRTKILL);
-       if(loading) {
-               CurKANJIROM = MEMORY_BASE + state_fio->FgetInt32_LE();
-       } else {
-               state_fio->FputInt32_LE((int)(CurKANJIROM - MEMORY_BASE));
-       }
-       state_fio->StateValue(CRTMode1);
-       state_fio->StateValue(CRTMode2);
-       state_fio->StateValue(CRTMode3);
-       state_fio->StateValue(CSS1);
-       state_fio->StateValue(CSS2);
-       state_fio->StateValue(CSS3);
-       state_fio->StateValue(portF0);
-       state_fio->StateValue(portF1);
-#if defined(_PC6601SR) || defined(_PC6001MK2SR)
-       state_fio->StateValue(bitmap);
-       state_fio->StateValue(cols);
-       state_fio->StateValue(rows);
-       state_fio->StateValue(lines);
-       if(loading) {
-               TEXTVRAM = MEMORY_BASE + state_fio->FgetInt32_LE();
-               SYSROM2 = MEMORY_BASE + state_fio->FgetInt32_LE();
-       } else {
-               state_fio->FputInt32_LE((int)(TEXTVRAM - MEMORY_BASE));
-               state_fio->FputInt32_LE((int)(SYSROM2 - MEMORY_BASE));
-       }
-       state_fio->StateArray(EXTRAM, EXTRAM_SIZE, 1);
-       state_fio->StateArray(port60, sizeof(port60), 1);
-       state_fio->StateValue(portC1);
-       state_fio->StateValue(portC8);
-       state_fio->StateValue(portCA);
-       state_fio->StateValue(portCB);
-       state_fio->StateValue(portCC);
-       state_fio->StateValue(portCE);
-       state_fio->StateValue(portCF);
-       state_fio->StateArray(palet, sizeof(palet), 1);
-#endif
-#endif
        return true;
 }
-
 }
index 8696b86..a92e523 100644 (file)
@@ -1,9 +1,3 @@
-//
-// refresh screen by Koichi Nishida 2006
-// based on Marat Fayzullin's fMSX
-// and Hiroshi Ishioka's iP6
-//
-
 /*
        NEC PC-6001 Emulator 'yaPC-6001'
        NEC PC-6001mkII Emulator 'yaPC-6201'
 
 #define SIG_MEMORY_PIO_PORT_C  0
 
-#ifndef _PC6001
-namespace PC6001 {
-       class TIMER;
-}
-#endif
-
 // memory offset
 #define RAM_BASE               0
 #define RAM_SIZE               0x10000
@@ -43,29 +31,8 @@ namespace PC6001 {
 #define CGROM1_SIZE            0x4000
 #define EmptyRAM_BASE          (CGROM1_BASE + CGROM1_SIZE)
 #define EmptyRAM_SIZE          0x2000
-#if defined(_PC6001)
+
 #define MEMORY_SIZE            (EmptyRAM_BASE + EmptyRAM_SIZE)
-#endif
-#define VOICEROM_BASE          (EmptyRAM_BASE + EmptyRAM_SIZE)
-#define VOICEROM_SIZE          0x4000
-#define KANJIROM_BASE          (VOICEROM_BASE + VOICEROM_SIZE)
-#define KANJIROM_SIZE          0x8000
-#define CGROM5_BASE            (KANJIROM_BASE + KANJIROM_SIZE)
-#define CGROM5_SIZE            0x2000
-#if defined(_PC6601) || defined(_PC6001MK2)
-#define MEMORY_SIZE            (CGROM5_BASE + CGROM5_SIZE)
-#endif
-#define EXTRAM_BASE            (CGROM5_BASE + CGROM5_SIZE)
-#define EXTRAM_SIZE            0x10000
-#define SYSTEMROM1_BASE                (EXTRAM_BASE + EXTRAM_SIZE)
-#define SYSTEMROM1_SIZE                0x10000
-#define SYSTEMROM2_BASE                (SYSTEMROM1_BASE + SYSTEMROM1_SIZE)
-#define SYSTEMROM2_SIZE                0x10000
-#define CGROM6_BASE            (SYSTEMROM2_BASE + SYSTEMROM2_SIZE)
-#define CGROM6_SIZE            0x8000
-#if defined(_PC6601SR) || defined(_PC6001MK2SR)
-#define MEMORY_SIZE            (CGROM6_BASE + CGROM6_SIZE)
-#endif
 
 namespace PC6001 {
 
@@ -73,100 +40,17 @@ class MEMORY : public DEVICE
 {
 private:
        DEVICE *d_cpu;
-#ifndef _PC6001
-       PC6001::TIMER *d_timer;
-#endif
        uint8_t MEMORY_BASE[MEMORY_SIZE];
-//     uint8_t RAM[0x10000];
-//     uint8_t EXTROM[0x4000];         // CURRENT EXTEND ROM
-//     uint8_t BASICROM[0x8000];               // BASICROM
        uint8_t *CGROM;
-//     uint8_t CGROM1[0x4000];         // CGROM1
        uint8_t *EXTROM1;                               // EXTEND ROM 1
        uint8_t *EXTROM2;                               // EXTEND ROM 2
        uint8_t *RdMem[8];                      // READ  MEMORY MAPPING ADDRESS
        uint8_t *WrMem[8];                      // WRITE MEMORY MAPPING ADDRESS
        uint8_t *VRAM;
-//     uint8_t EmptyRAM[0x2000];
        uint8_t EnWrite[4];                     // MEMORY MAPPING WRITE ENABLE [N60/N66]
        uint8_t CGSW93;
        bool inserted;
        uint8_t CRTKILL;
-#ifndef _PC6001
-//     uint8_t VOICEROM[0x4000];
-//     uint8_t KANJIROM[0x8000];
-       uint8_t *CurKANJIROM;
-//     uint8_t CGROM5[0x2000];         // CGROM5
-       uint8_t CRTMode1,CRTMode2,CRTMode3;
-       uint8_t CSS1,CSS2,CSS3;
-       uint8_t portF0;
-       uint8_t portF1;
-       uint8_t* dest;
-       scrntype_t palette_pc[16];
-       int BPal[16],BPal11[4],BPal12[8],BPal13[8],BPal14[4],BPal15[8],BPal53[32],BPal61[16],BPal62[32];
-       uint8_t W;
-#if defined(_PC6601SR) || defined(_PC6001MK2SR)
-       int bitmap;
-       int cols;                                       // text cols
-       int rows;                                       // text rows
-       int lines;
-       uint8_t *TEXTVRAM;
-       uint8_t *SYSROM2;
-//     uint8_t CGROM6[0x8000];         // CGROM6
-//     uint8_t SYSTEMROM1[0x10000];    // SYSTEMROM1
-//     uint8_t SYSTEMROM2[0x10000];    // SYSTEMROM2
-//     uint8_t EXTRAM[0x10000];
-       uint8_t port60[16];
-       uint8_t portC1;                                 //I/O[C1]     CRT CONTROLLER MODE
-       uint8_t portC8;                                 //I/O[C8]     CRT CONTROLLER TYPE
-       uint8_t portCA;                                 //I/O[CA]     X GEOMETORY low  HARDWARE SCROLL
-       uint8_t portCB;                                 //I/O[CB]     X GEOMETORY high HARDWARE SCROLL
-       uint8_t portCC;                                 //I/O[CC]     Y GEOMETORY      HARDWARE SCROLL
-       uint8_t portCE;                                 //I/O[CE]     LINE SETTING  BITMAP (low) */
-       uint8_t portCF;                                 //I/O[CF]     LINE SETTING  BITMAP (High) */
-       int palet[16];                          // SR PALET
-       uint8_t screen[204][640];
-#else
-       uint8_t screen[200][320];
-#endif
-       
-       void RefreshScr10();
-       void RefreshScr11();
-       void RefreshScr13();
-       void RefreshScr13a();
-       void RefreshScr13b();
-       void RefreshScr13c();
-       void RefreshScr13d();
-       void RefreshScr13e();
-       void RefreshScr51();
-       void RefreshScr53();
-       void RefreshScr54();
-#if defined(_PC6601SR) || defined(_PC6001MK2SR)
-       void RefreshScr61();
-       void RefreshScr62();
-       void RefreshScr63();
-       void __FASTCALL do_palet(int dest,int src);
-       void make_semigraph(void);
-       int __FASTCALL chk_gvram(uint32_t A,int flag);
-       uint8_t __FASTCALL gvram_read(uint32_t A);
-       void __FASTCALL gvram_write(uint32_t A, uint32_t V);
-#endif
-#endif
-       
-       // Pointer Values
-       int tmp_cgrom_ptr;
-       int tmp_extrom1_ptr;
-       int tmp_extrom2_ptr;
-       int tmp_rdmem_ptr[8];
-       int tmp_wrmem_ptr[8];
-       int tmp_vram_ptr;
-#ifndef _PC6001
-       int tmp_kanjirom_ptr;
-#if defined(_PC6601SR) || defined(_PC6001MK2SR)
-       int tmp_textvram_ptr;
-       int tmp_sysrom2_ptr;
-#endif
-#endif
 
 public:
        MEMORY(VM_TEMPLATE* parent_vm, EMU_TEMPLATE* parent_emu) : DEVICE(parent_vm, parent_emu)
@@ -185,9 +69,6 @@ public:
        uint32_t __FASTCALL read_data8w(uint32_t addr, int *wait);
        uint32_t __FASTCALL fetch_op(uint32_t addr, int *wait);
        void __FASTCALL write_io8(uint32_t addr, uint32_t data);
-#ifndef _PC6001
-       uint32_t __FASTCALL read_io8(uint32_t addr);
-#endif
        void __FASTCALL write_io8w(uint32_t addr, uint32_t data, int* wait);
        uint32_t __FASTCALL read_io8w(uint32_t addr, int* wait);
        void event_vline(int v, int clock);
@@ -196,19 +77,10 @@ public:
        bool process_state(FILEIO* state_fio, bool loading);
        
        // unique functions
-#ifndef _PC6001
-       void draw_screen();
-#endif
        void set_context_cpu(DEVICE* device)
        {
                d_cpu = device;
        }
-#ifndef _PC6001
-       void set_context_timer(PC6001::TIMER* device)
-       {
-               d_timer = device;
-       }
-#endif
        void open_cart(const _TCHAR* file_path);
        void close_cart();
        bool is_cart_inserted()
@@ -219,12 +91,6 @@ public:
        {
                return MEMORY_BASE + RAM_BASE;
        }
-#ifndef _PC6001
-       int get_CRTMode2()
-       {
-               return CRTMode2;
-       }
-#endif
 };
 
 }
diff --git a/source/src/vm/pc6001/memory_draw.cpp b/source/src/vm/pc6001/memory_draw.cpp
deleted file mode 100644 (file)
index 455325e..0000000
+++ /dev/null
@@ -1,699 +0,0 @@
-/** iP6: PC-6000/6600 series emualtor ************************/
-/**                                                         **/
-/**                         Refresh.c                       **/
-/**                                                         **/
-/** modified by Windy 2002-2004                             **/
-/** by ISHIOKA Hiroshi 1998,1999                            **/
-/** This code is based on fMSX written by Marat Fayzullin   **/
-/** and Adaptions for any X-terminal by Arnold Metselaar    **/
-/*************************************************************/
-
-/*
-       NEC PC-6001 Emulator 'yaPC-6001'
-       NEC PC-6001mkII Emulator 'yaPC-6201'
-       NEC PC-6001mkIISR Emulator 'yaPC-6401'
-       NEC PC-6601 Emulator 'yaPC-6601'
-       NEC PC-6601SR Emulator 'yaPC-6801'
-
-       Author : tanam
-       Date   : 2013.07.15-
-
-       [ draw ]
-*/
-
-#include "memory.h"
-
-#define CGROM1         (MEMORY_BASE + CGROM1_BASE)
-#define CGROM5         (MEMORY_BASE + CGROM5_BASE)
-#define CGROM6         (MEMORY_BASE + CGROM6_BASE)
-
-#define SETSCRVARM1(y1)        dest = &screen[y1][0];W=0;
-#define SETSCRVARM5(y1)        dest = &screen[y1][0];W=0;
-#define M1HEIGHT 192
-#define M5HEIGHT 200
-#define M6HEIGHT 204
-#define SeqPix21(c) dest[X*8+W]=c;W++;
-#define SeqPix41(c) dest[X*8+W]=c;W++;dest[X*8+W]=c;W++;
-
-namespace PC6001 {
-
-void MEMORY::draw_screen()
-{
-       if (CRTKILL) {
-               for(int y = 0; y < 400; y++) {
-                       scrntype_t* dest = emu->get_screen_buffer(y);
-                       memset(dest, 0, 640 * sizeof(scrntype_t));
-               }
-#if defined(_PC6601SR) || defined(_PC6001MK2SR)
-       } else if (static_cast<VM *>(vm)->sr_mode) {
-               if (CRTMode2) {
-                       if (CRTMode3) RefreshScr63();
-                       else RefreshScr62();
-               } else RefreshScr61();
-               // copy to screen
-               emu->set_vm_screen_lines(200);
-               if (bitmap) {
-                       for(int y = 0; y < 200; y++) {
-                               scrntype_t* dest = emu->get_screen_buffer(y*2);
-                               scrntype_t* dest1 = emu->get_screen_buffer(y*2+1);
-                               for(int x = 0; x < 320; x++) {
-                                       dest[x*2] = dest[x*2+1] = palette_pc[screen[y][x*2]];
-                               }
-                               if(config.scan_line) {
-                                       memset(dest1, 0, 640 * sizeof(scrntype_t));
-                               } else {
-                                       my_memcpy(dest1, dest, 640 * sizeof(scrntype_t));
-                               }
-                       }
-               } else if (cols==40) {
-                       for(int y = 0; y < 200; y++) {
-                               scrntype_t* dest = emu->get_screen_buffer(y*2);
-                               scrntype_t* dest1 = emu->get_screen_buffer(y*2+1);
-                               for(int x = 0; x < 320; x++) {
-                                       dest[x*2] = dest[x*2+1] = palette_pc[screen[y][x]];
-                               }
-                               if(config.scan_line) {
-                                       memset(dest1, 0, 640 * sizeof(scrntype_t));
-                               } else {
-                                       my_memcpy(dest1, dest, 640 * sizeof(scrntype_t));
-                               }
-                       }
-               } else {
-                       for(int y = 0; y < 200; y++) {
-                               scrntype_t* dest = emu->get_screen_buffer(y*2);
-                               scrntype_t* dest1 = emu->get_screen_buffer(y*2+1);
-                               for(int x = 0; x < 640; x++) {
-                                       dest[x] = palette_pc[screen[y][x]];
-                               }
-                               if(config.scan_line) {
-                                       memset(dest1, 0, 640 * sizeof(scrntype_t));
-                               } else {
-                                       my_memcpy(dest1, dest, 640 * sizeof(scrntype_t));
-                               }
-                       }
-               }
-#endif
-       } else {
-               if (CRTMode1) {
-                       if (CRTMode2)
-                               if (CRTMode3) RefreshScr54();
-                               else RefreshScr53();
-                       else RefreshScr51();
-                       // copy to screen
-                       emu->set_vm_screen_lines(200);
-                       for(int y = 0; y < 200; y++) {
-                               scrntype_t* dest = emu->get_screen_buffer(y*2);
-                               scrntype_t* dest1 = emu->get_screen_buffer(y*2+1);
-                               for(int x = 0; x < 320; x++) {
-                                       dest[x*2] = dest[x*2+1] = palette_pc[screen[y][x]];
-                               }
-                               if(config.scan_line) {
-                                       memset(dest1, 0, 640 * sizeof(scrntype_t));
-                               } else {
-                                       my_memcpy(dest1, dest, 640 * sizeof(scrntype_t));
-                               }
-                       }
-               } else {
-                       RefreshScr10();
-                       // copy to screen
-                       emu->set_vm_screen_lines(200);
-                       for(int y = 0; y < 200; y++) {
-                               scrntype_t* dest = emu->get_screen_buffer(y*2);
-                               scrntype_t* dest1 = emu->get_screen_buffer(y*2+1);
-                               for(int x = 0; x < 320; x++) {
-                                       if (x >= 32 && x < 288 && y >=4 && y < 196) {
-                                               dest[x*2] = dest[x*2+1] = palette_pc[screen[y-4][x-32]];
-                                       } else {
-                                               dest[x*2] = dest[x*2+1] = palette_pc[8];
-                                       }
-                               }
-                               if(config.scan_line) {
-                                       memset(dest1, 0, 640 * sizeof(scrntype_t));
-                               } else {
-                                       my_memcpy(dest1, dest, 640 * sizeof(scrntype_t));
-                               }
-                       }
-               }
-       }
-       emu->screen_skip_line(true);
-}
-
-// RefreshScr10: N60-BASIC select function
-void MEMORY::RefreshScr10()
-{
-       if ((*VRAM&0x80) == 0x00)
-               RefreshScr11();
-       else
-               switch (*(VRAM)&0x1C) {
-               case 0x00: case 0x10: //  64x 64 color / 128x 64
-                       RefreshScr13a(); break;
-               case 0x08: // 128x 64 color
-                       RefreshScr13b(); break;
-               case 0x18: // 128x 96
-                       RefreshScr13c(); break;
-               case 0x04: // 128x 96 color
-                       RefreshScr13d(); break;
-               case 0x14: // 128x192
-                       RefreshScr13e(); break;
-               default: // 128x192 color / 256x192
-                       RefreshScr13(); break;
-               }
-}
-
-// RefreshScr11: N60-BASIC screen 1,2
-void MEMORY::RefreshScr11()
-{
-       uint8_t X,Y,K;
-       int FC,BC;
-       uint8_t *S,*T1,*T2;
-       uint8_t *G;
-
-       G = CGROM;              /* CGROM */ 
-       T1 = VRAM;              /* attribute data */
-       T2 = VRAM+0x0200;       /* ascii/semi-graphic data */
-       for(Y=0; Y<M1HEIGHT; Y++) {
-               SETSCRVARM1(Y); /* Drawing area */
-               for(X=0; X<32; X++, T1++, T2++) {
-                       /* get CGROM address and color */
-                       if (*T1&0x40) { /* if semi-graphic */
-                               if (*T1&0x20) {         /* semi-graphic 6 */
-                                       S = G+((*T2&0x3f)<<4)+0x1000;
-                                       FC = BPal12[(*T1&0x02)<<1|(*T2)>>6]; BC = BPal[8];
-                               } else {                /* semi-graphic 4 */
-                                       S = G+((*T2&0x0f)<<4)+0x2000;
-                                       FC = BPal12[(*T2&0x70)>>4]; BC = BPal[8];
-                               }
-                       } else {                /* if normal character */
-                               S = G+((*T2)<<4); 
-                               FC = BPal11[(*T1&0x03)]; BC = BPal11[(*T1&0x03)^0x01];
-                       }
-                       K=*(S+Y%12);
-W=0;
-                       SeqPix21(K&0x80? FC:BC); SeqPix21(K&0x40? FC:BC);
-                       SeqPix21(K&0x20? FC:BC); SeqPix21(K&0x10? FC:BC);
-                       SeqPix21(K&0x08? FC:BC); SeqPix21(K&0x04? FC:BC);
-                       SeqPix21(K&0x02? FC:BC); SeqPix21(K&0x01? FC:BC);
-               }
-               if (Y%12!=11) { T1-=32; T2-=32; }
-       }
-}
-
-// RefreshScr13: N60-BASIC screen 3,4
-void MEMORY::RefreshScr13()
-{
-       uint8_t X,Y;
-       uint8_t *T1,*T2;
-       uint8_t attr;
-
-       T1 = VRAM;              /* attribute data */
-       T2 = VRAM+0x0200;       /* graphic data */
-       for (Y=0; Y<M1HEIGHT; Y++) {
-               SETSCRVARM1(Y); /* Drawing area */
-               for (X=0; X<32; X++,T1++,T2++) {
-                       if (*T1&0x10) { /* 256x192 (SCREEN 4) */
-                               attr = *T1&0x02;
-W=0;
-                               SeqPix21(BPal14[attr|(*T2&0x80)>>7]);
-                               SeqPix21(BPal14[attr|(*T2&0x40)>>6]);
-                               SeqPix21(BPal14[attr|(*T2&0x20)>>5]);
-                               SeqPix21(BPal14[attr|(*T2&0x10)>>4]);
-                               SeqPix21(BPal14[attr|(*T2&0x08)>>3]);
-                               SeqPix21(BPal14[attr|(*T2&0x04)>>2]);
-                               SeqPix21(BPal14[attr|(*T2&0x02)>>1]);
-                               SeqPix21(BPal14[attr|(*T2&0x01)   ]);
-                       } else { /* 128x192 color (SCREEN 3) */
-                               attr = (*T1&0x02)<<1;
-W=0;
-                               SeqPix41(BPal13[attr|(*T2&0xC0)>>6]);
-                               SeqPix41(BPal13[attr|(*T2&0x30)>>4]);
-                               SeqPix41(BPal13[attr|(*T2&0x0C)>>2]);
-                               SeqPix41(BPal13[attr|(*T2&0x03)   ]);
-                       }
-               }
-               if (T1 == VRAM+0x200) T1=VRAM;
-       }
-}
-
-// RefreshScr13a: N60-BASIC screen 3,4
-void MEMORY::RefreshScr13a() /*  64x 64 color / 128x 64 */
-{
-       uint8_t X,Y;
-       uint8_t *T1,*T2;
-       uint8_t attr;
-       int L;
-
-       T1 = VRAM;              /* attribute data */
-       T2 = VRAM+0x0200;       /* graphic data */
-       for (Y=0; Y<M1HEIGHT; Y++) {
-               SETSCRVARM1(Y); /* Drawing area */
-               for (X=0; X<16; X++,T1++,T2++) {
-                       if (*T1&0x10) { /* 128x 64 */
-                               attr = *T1&0x02;
-W=0;
-                               SeqPix41(BPal14[attr|(*T2&0x80)>>7]);
-                               SeqPix41(BPal14[attr|(*T2&0x40)>>6]);
-                               SeqPix41(BPal14[attr|(*T2&0x20)>>5]);
-                               SeqPix41(BPal14[attr|(*T2&0x10)>>4]);
-                               SeqPix41(BPal14[attr|(*T2&0x08)>>3]);
-                               SeqPix41(BPal14[attr|(*T2&0x04)>>2]);
-                               SeqPix41(BPal14[attr|(*T2&0x02)>>1]);
-                               SeqPix41(BPal14[attr|(*T2&0x01)   ]);
-                       } else { /*  64x 64 color */
-                               attr = (*T1&0x02)<<1;
-W=0;
-                               SeqPix41(L=BPal13[attr|(*T2&0xC0)>>6]);
-                               SeqPix41(L);
-                               SeqPix41(L=BPal13[attr|(*T2&0x30)>>4]);
-                               SeqPix41(L);
-                               SeqPix41(L=BPal13[attr|(*T2&0x0C)>>2]);
-                               SeqPix41(L);
-                               SeqPix41(L=BPal13[attr|(*T2&0x03)   ]);
-                               SeqPix41(L);
-                       }
-               }
-               if (Y%3 != 2) { T1-=16; T2-=16; }
-               else if (T1 == VRAM+0x200) T1=VRAM;
-       }
-}
-
-// RefreshScr13b: N60-BASIC screen 3,4
-void MEMORY::RefreshScr13b() /* 128x 64 color */
-{
-       uint8_t X,Y;
-       uint8_t *T1,*T2;
-       uint8_t attr;
-
-       T1 = VRAM;              /* attribute data */
-       T2 = VRAM+0x0200;       /* graphic data */
-       for (Y=0; Y<M1HEIGHT; Y++) {
-               SETSCRVARM1(Y); /* Drawing area */
-               for (X=0; X<32; X++,T1++,T2++) {
-W=0;
-                       attr = (*T1&0x02)<<1;
-                       SeqPix41(BPal13[attr|(*T2&0xC0)>>6]);
-                       SeqPix41(BPal13[attr|(*T2&0x30)>>4]);
-                       SeqPix41(BPal13[attr|(*T2&0x0C)>>2]);
-                       SeqPix41(BPal13[attr|(*T2&0x03)   ]);
-               }
-               if (Y%3 != 2) { T1-=32; T2-=32; }
-               else if (T1 == VRAM+0x200) T1=VRAM;
-       }
-}
-
-// RefreshScr13c: N60-BASIC screen 3,4
-void MEMORY::RefreshScr13c() /* 128x 96 */
-{
-       uint8_t X,Y;
-       uint8_t *T1,*T2;
-       uint8_t attr;
-
-       T1 = VRAM;              /* attribute data */
-       T2 = VRAM+0x0200;       /* graphic data */
-       for (Y=0; Y<M1HEIGHT; Y++) {
-               SETSCRVARM1(Y); /* Drawing area */
-               for (X=0; X<16; X++,T1++,T2++) {
-                       attr = *T1&0x02;
-W=0;
-                       SeqPix41(BPal14[attr|(*T2&0x80)>>7]);
-                       SeqPix41(BPal14[attr|(*T2&0x40)>>6]);
-                       SeqPix41(BPal14[attr|(*T2&0x20)>>5]);
-                       SeqPix41(BPal14[attr|(*T2&0x10)>>4]);
-                       SeqPix41(BPal14[attr|(*T2&0x08)>>3]);
-                       SeqPix41(BPal14[attr|(*T2&0x04)>>2]);
-                       SeqPix41(BPal14[attr|(*T2&0x02)>>1]);
-                       SeqPix41(BPal14[attr|(*T2&0x01)   ]);
-               }
-               if (!(Y&1)) { T1-=16; T2-=16; }
-               else if (T1 == VRAM+0x200) T1=VRAM;
-       }
-}
-
-// RefreshScr13d: N60-BASIC screen 3,4
-void MEMORY::RefreshScr13d() /* 128x 96 color */
-{
-       uint8_t X,Y;
-       uint8_t *T1,*T2;
-       uint8_t attr;
-
-       T1 = VRAM;              /* attribute data */
-       T2 = VRAM+0x0200;       /* graphic data */
-       for (Y=0; Y<M1HEIGHT; Y++) {
-               SETSCRVARM1(Y); /* Drawing area */
-               for (X=0; X<32; X++,T1++,T2++) {
-                       attr = (*T1&0x02)<<1;
-W=0;
-                       SeqPix41(BPal13[attr|(*T2&0xC0)>>6]);
-                       SeqPix41(BPal13[attr|(*T2&0x30)>>4]);
-                       SeqPix41(BPal13[attr|(*T2&0x0C)>>2]);
-                       SeqPix41(BPal13[attr|(*T2&0x03)   ]);
-               }
-               if (!(Y&1)) { T1-=32; T2-=32; }
-               else if (T1 == VRAM+0x200) T1=VRAM;
-       }
-}
-
-// RefreshScr13e: N60-BASIC screen 3,4
-void MEMORY::RefreshScr13e() /* 128x192 */
-{
-       uint8_t X,Y;
-       uint8_t *T1,*T2;
-       uint8_t attr;
-
-       T1 = VRAM;              /* attribute data */
-       T2 = VRAM+0x0200;       /* graphic data */
-       for (Y=0; Y<M1HEIGHT; Y++) {
-               SETSCRVARM1(Y); /* Drawing area */
-               for (X=0; X<16; X++,T1++,T2++) {
-                       attr = *T1&0x02;
-W=0;
-                       SeqPix41(BPal14[attr|(*T2&0x80)>>7]);
-                       SeqPix41(BPal14[attr|(*T2&0x40)>>6]);
-                       SeqPix41(BPal14[attr|(*T2&0x20)>>5]);
-                       SeqPix41(BPal14[attr|(*T2&0x10)>>4]);
-                       SeqPix41(BPal14[attr|(*T2&0x08)>>3]);
-                       SeqPix41(BPal14[attr|(*T2&0x04)>>2]);
-                       SeqPix41(BPal14[attr|(*T2&0x02)>>1]);
-                       SeqPix41(BPal14[attr|(*T2&0x01)   ]);
-               }
-               if (T1 == VRAM+0x200) T1=VRAM;
-       }
-}
-
-// RefreshScr51: N60m/66-BASIC screen 1,2
-void MEMORY::RefreshScr51()
-{
-       uint8_t X,Y,K;
-       int FC,BC;
-       uint8_t *S,*T1,*T2;
-       uint8_t *G;
-
-       G = CGROM;              /* CGROM */ 
-       T1 = VRAM;              /* attribute data */
-       T2 = VRAM+0x0400;       /* ascii/semi-graphic data */
-       for(Y=0; Y<M5HEIGHT; Y++) {
-               SETSCRVARM5(Y); /* Drawing area */
-               for(X=0; X<40; X++, T1++, T2++) {
-                       /* get CGROM address and color */
-                       S = G+(*T2<<4)+(*T1&0x80?0x1000:0);
-                       FC = BPal[(*T1)&0x0F]; BC = BPal[(((*T1)&0x70)>>4)|CSS2];
-                       K=*(S+Y%10);
-W=0;
-                       SeqPix21(K&0x80? FC:BC); SeqPix21(K&0x40? FC:BC);
-                       SeqPix21(K&0x20? FC:BC); SeqPix21(K&0x10? FC:BC);
-                       SeqPix21(K&0x08? FC:BC); SeqPix21(K&0x04? FC:BC);
-                       SeqPix21(K&0x02? FC:BC); SeqPix21(K&0x01? FC:BC);
-               }
-               if (Y%10!=9) { T1-=40; T2-=40; }
-       }
-}
-
-// RefreshScr53: N60m/66-BASIC screen 3
-void MEMORY::RefreshScr53()
-{
-       uint8_t X,Y;
-       uint8_t *T1,*T2;
-
-       T1 = VRAM;              /* attribute data */
-       T2 = VRAM+0x2000;       /* graphic data */
-       for(Y=0; Y<M5HEIGHT; Y++) {
-               SETSCRVARM5(Y); /* Drawing area */
-               for(X=0; X<40; X++) {
-W=0;
-                       SeqPix41(BPal53[CSS3|((*T1)&0xC0)>>6|((*T2)&0xC0)>>4]);
-                       SeqPix41(BPal53[CSS3|((*T1)&0x30)>>4|((*T2)&0x30)>>2]);
-                       SeqPix41(BPal53[CSS3|((*T1)&0x0C)>>2|((*T2)&0x0C)   ]);
-                       SeqPix41(BPal53[CSS3|((*T1)&0x03)   |((*T2)&0x03)<<2]);
-                       T1++; T2++;
-               }
-       }
-}
-
-// RefreshScr54: N60m/66-BASIC screen 4
-void MEMORY::RefreshScr54()
-{
-       uint8_t X,Y;
-       uint8_t *T1,*T2;
-       uint8_t cssor;
-
-       T1 = VRAM;              /* attribute data */
-       T2 = VRAM+0x2000;       /* graphic data */
-       /* CSS OR */
-       cssor = CSS3|CSS2|CSS1;
-       for(Y=0; Y<M5HEIGHT; Y++) {
-               SETSCRVARM5(Y); /* Drawing area */
-               for(X=0; X<40; X++) {
-W=0;
-                       SeqPix21(BPal53[cssor|((*T1)&0x80)>>7|((*T2)&0x80)>>6]);
-                       SeqPix21(BPal53[cssor|((*T1)&0x40)>>6|((*T2)&0x40)>>5]);
-                       SeqPix21(BPal53[cssor|((*T1)&0x20)>>5|((*T2)&0x20)>>4]);
-                       SeqPix21(BPal53[cssor|((*T1)&0x10)>>4|((*T2)&0x10)>>3]);
-                       SeqPix21(BPal53[cssor|((*T1)&0x08)>>3|((*T2)&0x08)>>2]);
-                       SeqPix21(BPal53[cssor|((*T1)&0x04)>>2|((*T2)&0x04)>>1]);
-                       SeqPix21(BPal53[cssor|((*T1)&0x02)>>1|((*T2)&0x02)   ]);
-                       SeqPix21(BPal53[cssor|((*T1)&0x01)   |((*T2)&0x01)<<1]);
-                       T1++;T2++;
-               }
-       }
-}
-
-#if defined(_PC6601SR) || defined(_PC6001MK2SR)
-// RefreshScr61: N66-SR BASIC screen 1
-void MEMORY::RefreshScr61()
-{
-       uint8_t X,Y,K;
-       register int FC,BC;
-       uint8_t *S,*T1,*T2;
-       uint8_t *G;
-       int high;
-       int addr;
-       int semi_addr;
-
-       G = CGROM;              /* CGROM */
-       T1 = TEXTVRAM+1;                /* attribute data */
-       T2 = TEXTVRAM;                  /* ascii/semi-graphic data */
-       high= (rows==20)? 10:8;       /* charactor's high   SR BASIC 2002/2/23 */
-       addr= (rows==20)? 0x2000: 0x1000; /* CGROM address  SR BASIC 2002/2/23 */
-       semi_addr= (rows==20)? 0x3000: 0x4000; /* semi address 2003/7/8 */
-       for(Y=0; Y<M5HEIGHT; Y++) {
-               SETSCRVARM5(Y); /* Drawing area */
-               for(X=0; X< cols; X++, T1+=2, T2+=2) {
-W=0;
-                       S= G+(*T2<<4)+(*T1&0x80?semi_addr:addr); /*for CGROM6 SR semi graph 2002/2/23*//* 2003/7/8 */
-                       FC = BPal[ (*T1)&0x0F];                                    /* fast Palet (2002/9/27) */
-                       BC = BPal[ (((*T1)&0x70)>>4) |CSS2];
-                       K=*(S+Y%high);                  /* character high 2002/2/23 */
-                       SeqPix21(K&0x80? FC:BC); SeqPix21(K&0x40? FC:BC);
-                       SeqPix21(K&0x20? FC:BC); SeqPix21(K&0x10? FC:BC);
-                       SeqPix21(K&0x08? FC:BC); SeqPix21(K&0x04? FC:BC);
-                       SeqPix21(K&0x02? FC:BC); SeqPix21(K&0x01? FC:BC);
-               }
-               if (Y% high!=high-1) { T1-=cols*2; T2-=cols*2; } /* character high  2002/2/23 */
-       }
-}
-
-// RefreshScr62  N66-SR BASIC screen 2
-void MEMORY::RefreshScr62()
-{
-       uint8_t X,Y;
-       uint8_t *T1,*T2;
-       T1 = VRAM+ 0x1a00;
-       T2 = VRAM;
-       for(Y=0; Y<M6HEIGHT; Y++) {
-               SETSCRVARM5(Y); /* Drawing area */
-               for(X=0; X< 64; X++) {
-W=0;
-                       SeqPix41(BPal53[ CSS3|((*T1)&0x0f) ]);
-                       SeqPix41(BPal53[ CSS3|((*T1)&0xf0)>>4 ]);
-                       T1++;
-                       SeqPix41(BPal53[ CSS3|((*T1)&0x0f) ]);
-                       SeqPix41(BPal53[ CSS3|((*T1)&0xf0)>>4 ]);
-                       T1+=3;
-               }
-               for(X=64 ;X<80 ; X++) {
-W=0;
-                       SeqPix41(BPal53[ CSS3|((*T2)&0x0f) ]);
-                       SeqPix41(BPal53[ CSS3|((*T2)&0xf0)>>4 ]);
-                       T2++;
-                       SeqPix41(BPal53[ CSS3|((*T2)&0x0f) ]);
-                       SeqPix41(BPal53[ CSS3|((*T2)&0xf0)>>4 ]);
-                       T2+=3;
-               }
-               if( (Y & 1)==0)
-                       { T1-=(254);  T2-=(62);}
-               else
-                       { T1-=2; T2-=2; }
-       }
-}
-
-// RefreshScr63  N66-SR BASIC screen 3
-void MEMORY::RefreshScr63()
-{
-       uint8_t X,Y;
-       uint8_t *T1,*T2;
-       uint8_t cssor;
-
-       T1 = VRAM+ 0x1a00;
-       T2 = VRAM;
-       cssor = CSS3|CSS2|CSS1;
-       for(Y=0; Y<M6HEIGHT; Y++) {
-               SETSCRVARM5(Y);         /* Drawing area */
-               for(X=0; X< 64; X++) {
-W=0;
-                       SeqPix41(BPal53[cssor|((*T1)&0x80)>>7|((*(T1+1))&0x80)>>6]);
-                       SeqPix41(BPal53[cssor|((*T1)&0x40)>>6|((*(T1+1))&0x40)>>5]);
-                       SeqPix41(BPal53[cssor|((*T1)&0x20)>>5|((*(T1+1))&0x20)>>4]);
-                       SeqPix41(BPal53[cssor|((*T1)&0x10)>>4|((*(T1+1))&0x10)>>3]);
-                       SeqPix41(BPal53[cssor|((*T1)&0x08)>>3|((*(T1+1))&0x08)>>2]);
-                       SeqPix41(BPal53[cssor|((*T1)&0x04)>>2|((*(T1+1))&0x04)>>1]);
-                       SeqPix41(BPal53[cssor|((*T1)&0x02)>>1|((*(T1+1))&0x02)   ]);
-                       SeqPix41(BPal53[cssor|((*T1)&0x01)   |((*(T1+1))&0x01)<<1]);
-                       T1+=4;
-               }
-               for(X=64 ;X<80 ; X++) {
-W=0;
-                       SeqPix41(BPal53[cssor|((*T2)&0x80)>>7|((*(T2+1))&0x80)>>6]);
-                       SeqPix41(BPal53[cssor|((*T2)&0x40)>>6|((*(T2+1))&0x40)>>5]);
-                       SeqPix41(BPal53[cssor|((*T2)&0x20)>>5|((*(T2+1))&0x20)>>4]);
-                       SeqPix41(BPal53[cssor|((*T2)&0x10)>>4|((*(T2+1))&0x10)>>3]);
-                       SeqPix41(BPal53[cssor|((*T2)&0x08)>>3|((*(T2+1))&0x08)>>2]);
-                       SeqPix41(BPal53[cssor|((*T2)&0x04)>>2|((*(T2+1))&0x04)>>1]);
-                       SeqPix41(BPal53[cssor|((*T2)&0x02)>>1|((*(T2+1))&0x02)   ]);
-                       SeqPix41(BPal53[cssor|((*T2)&0x01)   |((*(T2+1))&0x01)<<1]);
-                       T2+=4;
-               }
-               if( (Y & 1)==0)
-                       { T1-=(254);  T2-=(62);}
-               else
-                       { T1-=2; T2-=2; }
-       }
-}
-
-void MEMORY::do_palet(int dest,int src)
-{
-       int textpalet2[16]={0,4,1,5,2,6,3,7,8,12,9,13,10,14,11,15}; /*  color code-> VRAM code*/
-       // *************** for RefreshScr 53/54/62/63 ***************************
-       if ((CSS3 & 0x10) ==0 ) // CSS3 =0
-       {
-               if(dest>=0 && dest<32 && src>=0 && src<32)
-               {
-                       BPal53[dest]= BPal62[src];
-               }
-       } else {                                // CSS3 =1
-               if (dest>=0 && dest<32 && src>=0 && src<32)
-               {
-                       int dest1,dest2;
-                       switch( dest+1)
-                       {
-                       case 16: dest1 =13; dest2 = 5; break;
-                       case 15: dest1 =10; dest2 = 2; break;
-                       case 14: dest1 =14; dest2 = 6; break;
-                       case 13: dest1 = 1; dest2 = 9; break;
-                       }
-                       BPal53[16+dest1-1]= BPal62[src];
-                       BPal53[16+dest2-1]= BPal62[src];
-               }
-       }
-       // ************** for RefreshScr51/61 **************************
-       if(dest>=0 && dest<16 && src>=0 && src<16)
-               BPal[textpalet2[dest]]= BPal61[ textpalet2[src]];  
-}
-
-void MEMORY::make_semigraph(void)
-{
-       uint8_t *P;
-       unsigned int i, j, m1, m2;
-       P = CGROM1+0x1000;
-       for(i=0; i<64; i++) {
-               for(j=0; j<16; j++) {
-                       switch (j/4) {
-                       case 0: m1=0x20; m2=0x10; break;
-                       case 1: m1=0x08; m2=0x04; break;
-                       case 2: m1=0x02; m2=0x01; break;
-                       default: m1=m2=0;
-                       };
-                       *P++=(i&m1 ? 0xF0: 0) | (i&m2 ? 0x0F: 0);
-               }
-       }
-       P = CGROM1+0x2000;
-       for(i=0; i<16; i++) {
-               for(j=0; j<16; j++) {
-                       switch (j/6) {
-                       case 0: m1=0x08; m2=0x04; break;
-                       case 1: m1=0x02; m2=0x01; break;
-                       default: m1=m2=0;
-                       };
-                       *P++=(i&m1 ? 0xF0: 0) | (i&m2 ? 0x0F: 0);
-               }
-       }
-       P = CGROM6+0x4000;
-       for(i=0; i<256; i++) {
-               for(j=0; j<16; j++) {
-                       switch (j/2) {
-                       case 0: m1=0x80; m2=0x40; break;
-                       case 1: m1=0x20; m2=0x10; break;
-                       case 2: m1=0x08; m2=0x04; break;
-                       case 3: m1=0x02; m2=0x01; break;
-                       default: m1=m2=0;
-                       };
-                       *P++=(i&m1 ? 0xF0: 0) | (i&m2 ? 0x0F: 0);
-               }
-       }
-}
-
-int MEMORY::chk_gvram(uint32_t A,int flag)
-{
-       if (port60[ (A>>13)+flag ]==0x00 && bitmap)     // VRAM \82Ì\90æ\93ª\82©\82Â\81ACRT\82ª BITMAP mode
-               return 1;
-       return 0;
-}
-
-uint8_t MEMORY::gvram_read(uint32_t A)
-{
-       uint8_t* adr;
-       uint8_t  ret;
-       int x,y,z,w,off;
-
-       x = A & 0x1fff;
-       y = portCF*16+portCE;                 /* y\8dÀ\95W */
-       if( y >=204) y-=204;                  /* Y\8dÀ\95W 204 \88È\8fã\82¾\82Æ 204 \88ø\82­ add 2003/10/22 */
-       w = (x <256) ? 256: 64;          /* width:0..255 \82È\82ç256 / 256..319\82È\82ç 64\82É\82·\82é*/
-       off=(x <256) ? 0x1a00: 0x0000;   /* offset: Vram offset address */
-       x = (x <256) ? x: x-256;              /* x:256..319 \82È\82ç 256\82ð\88ø\82­\81@ */
-       z = ((y & 1 )==1) ? 2: 0;        /* z:Y\8dÀ\95W\82ª\8aï\90\94\82È\82ç\81A2\82ð\91«\82·  */
-       adr = (VRAM+ (off+ (y>>1)*w + (x&0xffc)+z));
-       switch(x & 3)
-       {
-       case 0: ret=  *(adr);      break;
-       case 1: ret=  *(adr)>>4;   break;
-       case 2: ret=  *(adr+1);    break;
-       case 3: ret=  *(adr+1)>>4; break;
-       }
-       return (ret);
-}
-
-void MEMORY::gvram_write(uint32_t A, uint32_t V)
-{
-       uint8_t* adr;
-       int x,y,z,w,off;
-
-       x = A & 0x1fff;
-       y = portCF*16+portCE;           /* y\8dÀ\95W */
-       if( y >=204) y-=204;                    /* Y\8dÀ\95W 204 \88È\8fã\82¾\82Æ 204 \88ø\82­ */
-       w = (x <256) ? 256: 64;         /* width:0..255 \82È\82ç256 / 256..319\82È\82ç 64\82É\82·\82é*/
-       off=(x <256) ? 0x1a00: 0x0000;  /* offset: Vram offset address */
-       x = (x <256) ? x: x-256;            /* x:256..319 \82È\82ç 256\82ð\88ø\82­\81@ */
-       z = ((y & 1 )==1) ? 2: 0;       /* z:Y\8dÀ\95W\82ª\8aï\90\94\82È\82ç\81A2\82ð\91«\82·  */
-       V&= 0x0f;
-       adr = VRAM+(off+ (y>>1)*(w) + (x&0xffc)+z);
-       switch(x & 3)
-       {
-       case 0: *(adr)=(*(adr)  &0xf0)  |V;    break;
-       case 1: *(adr)=(*(adr)  &0x0f)  |V<<4; break;
-       case 2: *(adr+1)=(*(adr+1)&0xf0)|V;    break;
-       case 3: *(adr+1)=(*(adr+1)&0x0f)|V<<4; break;
-       }
-}
-#endif
-
-}
-
index 2a7ec01..3bd075c 100644 (file)
@@ -743,7 +743,7 @@ uint64_t VM::get_current_clock_uint64()
                return event->get_current_clock_uint64();
 }
 
-#define STATE_VERSION  7
+#define STATE_VERSION  8
 
 bool VM::process_state(FILEIO* state_fio, bool loading)
 {
index fa5ecec..3f21b23 100644 (file)
@@ -599,11 +599,13 @@ void DISPLAY::event_frame()
        hz_total = regs[0] + 1;
        hz_disp = regs[1];
        vt_disp = regs[6] & 0x7f;
+       vt_ofs = regs[5] & 0x1f;
        st_addr = (regs[12] << 8) | regs[13];
 #ifdef _X1TURBO_FEATURE
        int vt_total = ((regs[4] & 0x7f) + 1) * ch_height + (regs[5] & 0x1f);
        bool hireso_old = hireso;
        hireso = (vt_total >= 400);
+       if(!hireso) vt_ofs = max(vt_ofs - 2, 0);
 #endif
        int vlen;
 #ifdef _X1TURBO_FEATURE
@@ -889,6 +891,16 @@ void DISPLAY::draw_screen()
 #endif
        }
 
+       // total raster_adjust
+#ifdef _X1TURBO_FEATURE
+       for(int y = 0; y < vt_ofs * (hireso ? 1 : 2); y++) {
+#else
+       for(int y = 0; y < vt_ofs * 2; y++) {
+#endif
+               scrntype_t* dest = emu->get_screen_buffer(y);
+               memset(dest, 0, 640 * sizeof(scrntype_t));
+       }
+       
        // copy to real screen
        __DECL_ALIGNED(16) scrntype_t dbuf[640];
 #ifdef _X1TURBO_FEATURE
@@ -897,8 +909,8 @@ void DISPLAY::draw_screen()
 //             emu->set_vm_screen_lines(400);
                if(column40) {
                        // 40 columns
-                       for(int y = 0; y < 400; y++) {
-                               scrntype_t* dest = emu->get_screen_buffer(y);
+                       for(int y = 0; (y + vt_ofs) < 400; y++) {
+                               scrntype_t* dest = emu->get_screen_buffer(y + vt_ofs);
                                uint8_t* src_text = dr_text[y];
 #ifdef _X1TURBOZ
                                if(dr_aen_line[y]) {
@@ -930,8 +942,8 @@ __DECL_VECTORIZED_LOOP
                        }
                } else {
                        // 80 columns
-                       for(int y = 0; y < 400; y++) {
-                               scrntype_t* dest = emu->get_screen_buffer(y);
+                       for(int y = 0; (y + vt_ofs) < 400; y++) {
+                               scrntype_t* dest = emu->get_screen_buffer(y + vt_ofs);
                                uint8_t* src_text = dr_text[y];
 #ifdef _X1TURBOZ
                                if(dr_aen_line[y]) {
@@ -971,10 +983,10 @@ __DECL_VECTORIZED_LOOP
                
                if(column40) {
                        // 40 columns
-                       for(int y = 0; y < 200; y++) {
+                       for(int y = 0; (y + vt_ofs) < 200; y++) {
+                               scrntype_t* dest0 = emu->get_screen_buffer((y + vt_ofs) * 2 + 0);
+                               scrntype_t* dest1 = emu->get_screen_buffer((y + vt_ofs) * 2 + 1);
                                uint8_t* src_text = dr_text[y];
-                               scrntype_t* dest0 = emu->get_screen_buffer(y * 2 + 0);
-                               scrntype_t* dest1 = emu->get_screen_buffer(y * 2 + 1);
 #ifdef _X1TURBOZ
                                if(dr_aen_line[y]) {
                                        uint16_t* src_cg0 = dr_zcg[0][y];
@@ -1025,9 +1037,9 @@ __DECL_VECTORIZED_LOOP
                        }
                } else {
                        // 80 columns
-                       for(int y = 0; y < 200; y++) {
-                               scrntype_t* dest0 = emu->get_screen_buffer(y * 2 + 0);
-                               scrntype_t* dest1 = emu->get_screen_buffer(y * 2 + 1);
+                       for(int y = 0; (y + vt_ofs) < 200; y++) {
+                               scrntype_t* dest0 = emu->get_screen_buffer((y + vt_ofs) * 2 + 0);
+                               scrntype_t* dest1 = emu->get_screen_buffer((y + vt_ofs) * 2 + 1);
                                uint8_t* src_text = dr_text[y];
 #ifdef _X1TURBOZ
                                if(aen_line[y]) {
@@ -1666,7 +1678,7 @@ uint16_t DISPLAY::jis2sjis(uint16_t jis)
        return (c1 << 8) | c2;
 }
 
-#define STATE_VERSION  5
+#define STATE_VERSION  6
 
 bool DISPLAY::process_state(FILEIO* state_fio, bool loading)
 {
@@ -1735,6 +1747,7 @@ bool DISPLAY::process_state(FILEIO* state_fio, bool loading)
        state_fio->StateValue(hz_total);
        state_fio->StateValue(hz_disp);
        state_fio->StateValue(vt_disp);
+       state_fio->StateValue(vt_ofs);
        state_fio->StateValue(st_addr);
        state_fio->StateValue(vblank_clock);
        state_fio->StateValue(cur_blank);
index 1c56d2d..1a4011c 100644 (file)
@@ -117,7 +117,7 @@ private:
        int raster, cblink;
        
        int ch_height; // HD46505
-       int hz_total, hz_disp, vt_disp;
+       int hz_total, hz_disp, vt_disp, vt_ofs;
        int st_addr;
        uint32_t vblank_clock;
        int cur_vline;
index db3f0dc..15abcdd 100644 (file)
@@ -29,7 +29,8 @@ void Z80CTC::reset()
                counter[ch].control = 0;
                counter[ch].slope = false;
                counter[ch].prescaler = 256;
-               counter[ch].freeze = counter[ch].start = counter[ch].latch = false;
+               counter[ch].freeze = counter[ch].freezed = false;
+               counter[ch].start = counter[ch].latch = false;
                counter[ch].clock_id = counter[ch].sysclock_id = -1;
                counter[ch].first_constant = true;
                // interrupt
@@ -47,10 +48,11 @@ void Z80CTC::write_io8(uint32_t addr, uint32_t data)
                // time constant
                counter[ch].constant = data ? data : 256;
                counter[ch].latch = false;
-               if(counter[ch].freeze || counter[ch].first_constant) {
+               if(counter[ch].freezed || counter[ch].first_constant) {
                        counter[ch].count = counter[ch].constant;
                        counter[ch].clocks = 0;
                        counter[ch].freeze = false;
+//                     counter[ch].freezed = false;
                        counter[ch].first_constant = false;
                        update_event(ch, 0);
                }
@@ -60,6 +62,9 @@ void Z80CTC::write_io8(uint32_t addr, uint32_t data)
                        counter[ch].prescaler = (data & 0x20) ? 256 : 16;
                        counter[ch].latch = ((data & 0x04) != 0);
                        counter[ch].freeze = ((data & 0x02) != 0);
+                       if(counter[ch].freeze) {
+                               counter[ch].freezed = true;
+                       }
                        counter[ch].start = (counter[ch].freq || !(data & 0x08));
                        counter[ch].control = data;
                        counter[ch].slope = ((data & 0x10) != 0);
@@ -173,6 +178,7 @@ void Z80CTC::input_clock(int ch, int clock)
        if(counter[ch].freeze) {
                return;
        }
+       counter[ch].freezed = false;
        
        // update counter
        counter[ch].count -= clock;
@@ -196,6 +202,8 @@ void Z80CTC::input_sysclock(int ch, int clock)
        if(!counter[ch].start || counter[ch].freeze) {
                return;
        }
+       counter[ch].freezed = false;
+       
        counter[ch].clocks += clock;
        int input = counter[ch].clocks >> (counter[ch].prescaler == 256 ? 8 : 4);
        counter[ch].clocks &= counter[ch].prescaler - 1;
@@ -351,7 +359,7 @@ void Z80CTC::notify_intr_reti()
        }
 }
 
-#define STATE_VERSION  1
+#define STATE_VERSION  2
 
 bool Z80CTC::process_state(FILEIO* state_fio, bool loading)
 {
@@ -370,6 +378,7 @@ bool Z80CTC::process_state(FILEIO* state_fio, bool loading)
                state_fio->StateValue(counter[i].clocks);
                state_fio->StateValue(counter[i].prescaler);
                state_fio->StateValue(counter[i].freeze);
+               state_fio->StateValue(counter[i].freezed);
                state_fio->StateValue(counter[i].start);
                state_fio->StateValue(counter[i].latch);
                state_fio->StateValue(counter[i].prev_in);
index e9b6a62..a7e39e6 100644 (file)
@@ -31,6 +31,7 @@ private:
                int clocks;
                int prescaler;
                bool freeze;
+               bool freezed;
                bool start;
                bool latch;
                bool prev_in;
index 5dc2d86..ec632c3 100644 (file)
@@ -115,7 +115,6 @@ void Z80DMA::initialize()
        DEVICE::initialize();
        _SINGLE_MODE_DMA = osd->check_feature(_T("SINGLE_MODE_DMA"));
        _DMA_DEBUG = osd->check_feature(_T("DMA_DEBUG"));
-       _X1TURBO_FEATURE = osd->check_feature(_T("_X1TURBO_FEATURE"));
 //     _DMA_DEBUG = true; // TMP
        if(d_debugger != NULL) {
                d_debugger->set_device_name(_T("Debugger (Z80DMA)"));
index c7ef4e1..2bece9e 100644 (file)
@@ -60,7 +60,7 @@ private:
 
        bool _SINGLE_MODE_DMA;
        bool _DMA_DEBUG;
-       bool _X1TURBO_FEATURE;
+
        bool now_ready();
        void request_bus();
        void release_bus();
index 91a1f14..6c972c0 100644 (file)
                                        </FileConfiguration>
                                </File>
                                <File
+                                       RelativePath="..\src\vm\bx1\floppy.cpp"
+                                       >
+                                       <FileConfiguration
+                                               Name="Debug|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                                       <FileConfiguration
+                                               Name="Release|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                               </File>
+                               <File
                                        RelativePath="..\src\vm\bx1\keyboard.cpp"
                                        >
                                        <FileConfiguration
                                        >
                                </File>
                                <File
+                                       RelativePath="..\src\vm\bx1\floppy.h"
+                                       >
+                               </File>
+                               <File
                                        RelativePath="..\src\vm\bx1\keyboard.h"
                                        >
                                </File>
index f5718d2..0a322cd 100644 (file)
                                        </FileConfiguration>
                                </File>
                                <File
+                                       RelativePath="..\src\vm\mz700\joystick.cpp"
+                                       >
+                                       <FileConfiguration
+                                               Name="Debug|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                                       <FileConfiguration
+                                               Name="Release|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                               </File>
+                               <File
                                        RelativePath="..\src\vm\mz700\kanji.cpp"
                                        >
                                        <FileConfiguration
                                        >
                                </File>
                                <File
+                                       RelativePath="..\src\vm\mz700\joystick.h"
+                                       >
+                               </File>
+                               <File
                                        RelativePath="..\src\vm\mz700\kanji.h"
                                        >
                                </File>
index 818846e..2ec4314 100644 (file)
                                        </FileConfiguration>
                                </File>
                                <File
+                                       RelativePath="..\src\vm\mz700\joystick.cpp"
+                                       >
+                                       <FileConfiguration
+                                               Name="Debug|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                                       <FileConfiguration
+                                               Name="Release|Win32"
+                                               >
+                                               <Tool
+                                                       Name="VCCLCompilerTool"
+                                                       PreprocessorDefinitions=""
+                                               />
+                                       </FileConfiguration>
+                               </File>
+                               <File
                                        RelativePath="..\src\vm\mz700\kanji.cpp"
                                        >
                                        <FileConfiguration
                                        >
                                </File>
                                <File
+                                       RelativePath="..\src\vm\mz700\joystick.h"
+                                       >
+                               </File>
+                               <File
                                        RelativePath="..\src\vm\mz700\kanji.h"
                                        >
                                </File>
index c436b54..f40fdb1 100644 (file)
     <ClCompile Include="..\src\fileio.cpp" />
     <ClCompile Include="..\src\vm\bx1\bx1.cpp" />
     <ClCompile Include="..\src\vm\bx1\display.cpp" />
+    <ClCompile Include="..\src\vm\bx1\floppy.cpp" />
     <ClCompile Include="..\src\vm\bx1\keyboard.cpp" />
     <ClCompile Include="..\src\vm\bx1\printer.cpp" />
     <ClCompile Include="..\src\vm\disk.cpp" />
     <ClInclude Include="..\src\res\resource.h" />
     <ClInclude Include="..\src\vm\bx1\bx1.h" />
     <ClInclude Include="..\src\vm\bx1\display.h" />
+    <ClInclude Include="..\src\vm\bx1\floppy.h" />
     <ClInclude Include="..\src\vm\bx1\keyboard.h" />
     <ClInclude Include="..\src\vm\bx1\printer.h" />
     <ClInclude Include="..\src\vm\debugger.h" />
index b972ab9..675f706 100644 (file)
     <ClCompile Include="..\src\vm\bx1\display.cpp">
       <Filter>Source Files\VM Driver Source Files</Filter>
     </ClCompile>
+    <ClCompile Include="..\src\vm\bx1\floppy.cpp">
+      <Filter>Source Files\VM Driver Source Files</Filter>
+    </ClCompile>
     <ClCompile Include="..\src\vm\bx1\keyboard.cpp">
       <Filter>Source Files\VM Driver Source Files</Filter>
     </ClCompile>
     <ClInclude Include="..\src\vm\bx1\display.h">
       <Filter>Header Files\VM Driver Header Files</Filter>
     </ClInclude>
+    <ClInclude Include="..\src\vm\bx1\floppy.h">
+      <Filter>Header Files\VM Driver Header Files</Filter>
+    </ClInclude>
     <ClInclude Include="..\src\vm\bx1\keyboard.h">
       <Filter>Header Files\VM Driver Header Files</Filter>
     </ClInclude>
index 9b5f7bd..46ec196 100644 (file)
     <ClCompile Include="..\src\vm\mz700\cmos.cpp" />
     <ClCompile Include="..\src\vm\mz700\emm.cpp" />
     <ClCompile Include="..\src\vm\mz700\floppy.cpp" />
+    <ClCompile Include="..\src\vm\mz700\joystick.cpp" />
     <ClCompile Include="..\src\vm\mz700\kanji.cpp" />
     <ClCompile Include="..\src\vm\mz700\keyboard.cpp" />
     <ClCompile Include="..\src\vm\mz700\memory.cpp" />
     <ClInclude Include="..\src\vm\mz700\cmos.h" />
     <ClInclude Include="..\src\vm\mz700\emm.h" />
     <ClInclude Include="..\src\vm\mz700\floppy.h" />
+    <ClInclude Include="..\src\vm\mz700\joystick.h" />
     <ClInclude Include="..\src\vm\mz700\kanji.h" />
     <ClInclude Include="..\src\vm\mz700\keyboard.h" />
     <ClInclude Include="..\src\vm\mz700\memory.h" />
index 4423983..c9093e0 100644 (file)
     <ClCompile Include="..\src\vm\mz700\floppy.cpp">
       <Filter>Source Files\VM Driver Source Files</Filter>
     </ClCompile>
+    <ClCompile Include="..\src\vm\mz700\joystick.cpp">
+      <Filter>Source Files\VM Driver Source Files</Filter>
+    </ClCompile>
     <ClCompile Include="..\src\vm\mz700\kanji.cpp">
       <Filter>Source Files\VM Driver Source Files</Filter>
     </ClCompile>
     <ClInclude Include="..\src\vm\mz700\floppy.h">
       <Filter>Header Files\VM Driver Header Files</Filter>
     </ClInclude>
+    <ClInclude Include="..\src\vm\mz700\joystick.h">
+      <Filter>Header Files\VM Driver Header Files</Filter>
+    </ClInclude>
     <ClInclude Include="..\src\vm\mz700\kanji.h">
       <Filter>Header Files\VM Driver Header Files</Filter>
     </ClInclude>
index aef5733..4ae10d8 100644 (file)
     <ClCompile Include="..\src\vm\io.cpp" />
     <ClCompile Include="..\src\vm\mz700\cmos.cpp" />
     <ClCompile Include="..\src\vm\mz700\emm.cpp" />
+    <ClCompile Include="..\src\vm\mz700\joystick.cpp" />
     <ClCompile Include="..\src\vm\mz700\kanji.cpp" />
     <ClCompile Include="..\src\vm\mz700\keyboard.cpp" />
     <ClCompile Include="..\src\vm\mz700\memory.cpp" />
     <ClInclude Include="..\src\vm\io.h" />
     <ClInclude Include="..\src\vm\mz700\cmos.h" />
     <ClInclude Include="..\src\vm\mz700\emm.h" />
+    <ClInclude Include="..\src\vm\mz700\joystick.h" />
     <ClInclude Include="..\src\vm\mz700\kanji.h" />
     <ClInclude Include="..\src\vm\mz700\keyboard.h" />
     <ClInclude Include="..\src\vm\mz700\memory.h" />
index 1a5f4d7..b2ed1c6 100644 (file)
     <ClCompile Include="..\src\vm\mz700\emm.cpp">
       <Filter>Source Files\VM Driver Source Files</Filter>
     </ClCompile>
+    <ClCompile Include="..\src\vm\mz700\joystick.cpp">
+      <Filter>Source Files\VM Driver Source Files</Filter>
+    </ClCompile>
     <ClCompile Include="..\src\vm\mz700\kanji.cpp">
       <Filter>Source Files\VM Driver Source Files</Filter>
     </ClCompile>
     <ClInclude Include="..\src\vm\mz700\emm.h">
       <Filter>Header Files\VM Driver Header Files</Filter>
     </ClInclude>
+    <ClInclude Include="..\src\vm\mz700\joystick.h">
+      <Filter>Header Files\VM Driver Header Files</Filter>
+    </ClInclude>
     <ClInclude Include="..\src\vm\mz700\kanji.h">
       <Filter>Header Files\VM Driver Header Files</Filter>
     </ClInclude>