"EmuZ-700" - SHARP MZ-700 emulator for Win32
- 6/11/2008
+ 8/27/2022
--- Internal ROM image
IPL.ROM $0000-$0FFF
+ MZ1E14.ROM $E800-$EFFF
+ MZ1R12.ROM $E800-$EFFF
+ MZ1E05.ROM $F000-$FFFF
FONT.ROM 8x8 dots font image
--- Key maps
"EmuZ-80B" - SHARP MZ-80B emulator for Win32
"EmuZ-2200" - SHARP MZ-2200 emulator for Win32
- 4/14/2013
+ 8/30/2022
--- Internal ROM images
HELP F11
INST/DEL DELETE
KANA KATAKANA/HIRAGANA
+ SFTLOCK CTRL
----------------------------------------
TAKEDA, toshiya
"ePC-8001" - NEC PC-8001 emulator for Win32
"ePC-8001mkII" - NEC PC-8001mkII emulator for Win32
"ePC-8001mkIISR" - NEC PC-8001mkIISR emulator for Win32
- 12/18/2020
+ 11/14/2022
--- Internal ROM images
KANJI2.ROM Kanji ROM
JISYO.ROM Dictionary ROM
CDBIOS.ROM CD-ROM BIOS ROM
+ PC-8801-16_I86.ROM
+ PC-8801-16_Z80.ROM
---
N80_1.ROM PC-8001
N80_2.ROM PC-8001mkII
Binary archive of retro pc emulator common source code
- 2/7/2021
+ 7/3/2022
--- What's this ?
CASIO
eFP-200 FP-200
eFP-1100 FP-1100
+ eFX-9000P FX-9000P
ePV-1000 PV-1000
EmuGaki PV-2000
COLECO
yaCOLECOVISION ColecoVision
+ Computer Research
+ eCRC-80 CRC-80
EPOCH
eSCV Super Cassette Vision
EPSON
eHC-40 HC-40/PX-4
eHC-80 HC-80/PX-8/Geneva
eQC-10 QC-10 / QX-10
+ ESP
+ eTRNJunior eTRNJunior
FUJITSU
eFM8 FM-8 (by Mr.Artane.)
eFM7 FM-7 (by Mr.Artane.)
eSMC-777 SMC-777
SORD
Emu5 m5
+ Emu23 M23
SPECTRAVIDEO
yaSVI-3x8 SVI-3x8 (by Mr.tanam)
Systems Formulate
TOMY
ePyuTa PyuTa/PyuTa Jr.
TOSHIBA
- eEX-80 EX-80
+ eEX-80BS EX-80BS
yayaHX-20+ HX-20 + FDD (by Mr.umaiboux)
EmuPIA PASOPIA/PASOPIA5
EmuPIA7 PASOPIA7
MESS PC-8801 driver
- vm/pc9801/display.*
Neko Project 2 by Mr.Yui
- Improved for EGC by Mr.Ryuji Okamoto (qemu/9821改造版)
+ Improved for EGC by Mr.Ryuji Okamoto (qemu/9821\89ü\91¢\94Å)
- vm/pcengine/pce.*
Ootake (joypad)
xpce (psg)
+11/14/2022
+
+[VM/I8255] fix mode #1
+
+[PC8801] support PC-8801-16 (16bit board)
+
+[PC9801] fix to always enable 2HD FDD I/F on first PC-9801
+[PC9801] improve default dipswitch value
+
+
11/12/2022
[PC8801] fix crash issue when 5inch drives are disconnected
<context>
<name>MenuPC6001</name>
<message>
- <location filename="MainWindow.cpp" line="25"/>
+ <location filename="MainWindow.cpp" line="27"/>
<source>Main CPU</source>
<translation>メインCPU</translation>
</message>
<message>
- <location filename="MainWindow.cpp" line="26"/>
+ <location filename="MainWindow.cpp" line="28"/>
<source>Sub CPU</source>
<translation>サブCPU</translation>
</message>
<message>
- <location filename="MainWindow.cpp" line="27"/>
+ <location filename="MainWindow.cpp" line="29"/>
<source>PC-80S31K</source>
<translation>PC-80S31K(外付けドライブ)のCPU</translation>
</message>
<message>
- <location filename="MainWindow.cpp" line="35"/>
+ <location filename="MainWindow.cpp" line="37"/>
<source>NEC PC-PR201 kanji serial printer.</source>
<translation>NEC PC-PR201漢字シリアルプリンタ</translation>
</message>
#endif
actionDebugger[0]->setVisible(true);
actionDebugger[1]->setVisible(true);
-
+#if defined(SUPPORT_PC88_16BIT)
+ actionDebugger[2]->setText(QApplication::translate("MenuPC88", "PC-8801-16", 0));
+ actionDebugger[2]->setVisible(true);
+#else
actionDebugger[2]->setVisible(false);
+#endif
actionDebugger[3]->setVisible(false);
#endif
#if defined(USE_JOYSTICK_TYPE)
actionFDD_8Inch->setText(QApplication::translate("MenuPC88", "8Inch FDD(Need to restart)", 0));
actionFDD_8Inch->setToolTip(QApplication::translate("MenuPC88", "Enable 8 inch FDDs for 3: and 4:.\nThis effects only after restarting this emulator.", 0));
#endif
+#if defined(SUPPORT_PC88_16BIT)
+ action16bit->setText(QApplication::translate("MenuPC88", "PC-8801-16(Need to restart)", 0));
+ action16bit->setToolTip(QApplication::translate("MenuPC88", "Enable PC-8801-16 16bit extra CPU card.\nThis effects only after restarting this emulator.", 0));
+#endif
#if defined(SUPPORT_M88_DISKDRV)
actionM88DRV->setText(QApplication::translate("MenuPC88", "M88 DiskDrv(Need to restart)", 0));
actionM88DRV->setToolTip(QApplication::translate("MenuPC88", "Enable M88 stile Disk Drives.\nThis effects only after restarting this emulator.", 0));
menuMachine->addAction(actionPalette);
menuMachine->addSeparator();
-
+#if defined(SUPPORT_PC88_16BIT)
+ SET_ACTION_SINGLE_DIPSWITCH_CONNECT(action16bit, DIPSWITCH_16BIT, p_config->dipswitch, SIGNAL(toggled(bool)), SLOT(do_set_single_dipswitch(bool)));
+ menuMachine->addAction(action16bit);
+ menuMachine->addSeparator();
+#endif
#if defined(SUPPORT_M88_DISKDRV)
SET_ACTION_SINGLE_DIPSWITCH_CONNECT(actionM88DRV, DIPSWITCH_M88_DISKDRV, p_config->dipswitch, SIGNAL(toggled(bool)), SLOT(do_set_single_dipswitch(bool)));
menuMachine->addAction(actionM88DRV);
#include "commonclasses.h"
#include "mainwidget.h"
// This extends class CSP_MainWindow as Ui_MainWindow.
-// You may use this as
+// You may use this as
QT_BEGIN_NAMESPACE
class Ui_SoundDialog;
class USING_FLAGS;
Action_Control *actionHMB20; //
Action_Control *actionGSX8800; //
Action_Control *actionPCG8100; //
-
+
Action_Control *actionCMD_Sing; //
Action_Control *actionPalette; //
-
+
Action_Control *actionFDD_5Inch; //
Action_Control *actionFDD_8Inch; //
-
+
+ Action_Control *action16bit; //
+
Action_Control *actionM88DRV; //
Action_Control *actionQuasiS88CMT; //
-
+
void setupUI_Emu(void);
void retranslateUi(void);
public:
<source>Use JAST SOUND : PCM sound unit.</source>
<translation>ジャストサウンド(PCM音源)をプリンタポートにつなぎます。</translation>
</message>
+ <message>
+ <source>PC-8801-16</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>PC-8801-16(Need to restart)</source>
+ <translation>PC-8801-16(再起動が必要)</translation>
+ </message>
+ <message>
+ <source>Enable PC-8801-16 16bit extra CPU card.
+This effects only after restarting this emulator.</source>
+ <translation>PC-8801-16 16ビット拡張CPUカードを有効にします。
+エミュレータの再起動が必要です。</translation>
+ </message>
</context>
</TS>
// TEXTINCLUDE\r
//\r
\r
-1 TEXTINCLUDE DISCARDABLE\r
+1 TEXTINCLUDE DISCARDABLE \r
BEGIN\r
"resource.h\0"\r
END\r
\r
-2 TEXTINCLUDE DISCARDABLE\r
+2 TEXTINCLUDE DISCARDABLE \r
BEGIN\r
"#include ""afxres.h""\r\n"\r
"\0"\r
END\r
\r
-3 TEXTINCLUDE DISCARDABLE\r
+3 TEXTINCLUDE DISCARDABLE \r
BEGIN\r
"\r\n"\r
"\0"\r
// Accelerator\r
//\r
\r
-IDR_ACCELERATOR1 ACCELERATORS DISCARDABLE\r
+IDR_ACCELERATOR1 ACCELERATORS DISCARDABLE \r
BEGIN\r
VK_RETURN, ID_ACCEL_MOUSE, VIRTKEY, CONTROL, NOINVERT\r
VK_RETURN, ID_ACCEL_SCREEN, VIRTKEY, ALT, NOINVERT\r
// Menu\r
//\r
\r
-IDR_MENU1 MENU DISCARDABLE\r
+IDR_MENU1 MENU DISCARDABLE \r
BEGIN\r
POPUP "Control"\r
BEGIN\r
MENUITEM SEPARATOR\r
MENUITEM "Debug Main CPU", ID_OPEN_DEBUGGER0\r
MENUITEM "Debug PC-80S31K CPU", ID_OPEN_DEBUGGER1\r
+ MENUITEM "Debug PC-8801-16 CPU", ID_OPEN_DEBUGGER2\r
MENUITEM "Close Debugger", ID_CLOSE_DEBUGGER\r
MENUITEM SEPARATOR\r
MENUITEM "Exit", ID_EXIT\r
BEGIN\r
MENUITEM "N88 mode" ID_VM_BOOT_MODE0\r
MENUITEM "N mode" ID_VM_BOOT_MODE3\r
+ MENUITEM SEPARATOR\r
+ MENUITEM "PC-8801-16", ID_VM_DIPSWITCH10\r
END\r
POPUP "Floppy Drive"\r
BEGIN\r
\r
/////////////////////////////////////////////////////////////////////////////\r
#endif // not APSTUDIO_INVOKED\r
+\r
// TEXTINCLUDE\r
//\r
\r
-1 TEXTINCLUDE DISCARDABLE\r
+1 TEXTINCLUDE DISCARDABLE \r
BEGIN\r
"resource.h\0"\r
END\r
\r
-2 TEXTINCLUDE DISCARDABLE\r
+2 TEXTINCLUDE DISCARDABLE \r
BEGIN\r
"#include ""afxres.h""\r\n"\r
"\0"\r
END\r
\r
-3 TEXTINCLUDE DISCARDABLE\r
+3 TEXTINCLUDE DISCARDABLE \r
BEGIN\r
"\r\n"\r
"\0"\r
// Accelerator\r
//\r
\r
-IDR_ACCELERATOR1 ACCELERATORS DISCARDABLE\r
+IDR_ACCELERATOR1 ACCELERATORS DISCARDABLE \r
BEGIN\r
VK_RETURN, ID_ACCEL_MOUSE, VIRTKEY, CONTROL, NOINVERT\r
VK_RETURN, ID_ACCEL_SCREEN, VIRTKEY, ALT, NOINVERT\r
// Menu\r
//\r
\r
-IDR_MENU1 MENU DISCARDABLE\r
+IDR_MENU1 MENU DISCARDABLE \r
BEGIN\r
POPUP "Control"\r
BEGIN\r
MENUITEM SEPARATOR\r
MENUITEM "Debug Main CPU", ID_OPEN_DEBUGGER0\r
MENUITEM "Debug PC-80S31K CPU", ID_OPEN_DEBUGGER1\r
+ MENUITEM "Debug PC-8801-16 CPU", ID_OPEN_DEBUGGER2\r
MENUITEM "Close Debugger", ID_CLOSE_DEBUGGER\r
MENUITEM SEPARATOR\r
MENUITEM "Exit", ID_EXIT\r
BEGIN\r
MENUITEM "N88 mode" ID_VM_BOOT_MODE0\r
MENUITEM "N mode" ID_VM_BOOT_MODE3\r
+ MENUITEM SEPARATOR\r
+ MENUITEM "PC-8801-16", ID_VM_DIPSWITCH10\r
END\r
POPUP "Floppy Drive"\r
BEGIN\r
\r
/////////////////////////////////////////////////////////////////////////////\r
#endif // not APSTUDIO_INVOKED\r
+\r
void I8255::write_io8(uint32_t addr, uint32_t data)
{
int ch = addr & 3;
-
+
switch(ch) {
case 0:
case 1:
val &= ~BIT_INTR_A;
}
if(port[1].mode == 1) {
- if(port[1].mode == 0xff) {
+ if(port[1].rmask == 0xff) {
val &= ~BIT_IBF_B;
} else {
val |= BIT_OBF_B;
uint32_t I8255::read_io8(uint32_t addr)
{
int ch = addr & 3;
-
+
switch(ch) {
case 0:
case 1:
}
}
if(port[1].mode == 1) {
- if(port[0].rmask == 0xff) {
+ if(port[1].rmask == 0xff) {
if(mask & BIT_STB_B) {
if((port[2].rreg & BIT_STB_B) && !(data & BIT_STB_B)) {
write_io8(2, port[2].wreg | BIT_IBF_B);
#include "../scsi_host.h"
#endif
+#ifdef SUPPORT_PC88_16BIT
+#include "../i8255.h"
+#endif
+
#define DEVICE_JOYSTICK 0
#define DEVICE_MOUSE 1
#define DEVICE_JOYMOUSE 2 // not supported yet
#define Port53_G5DS (port[0x53] & 0x40) // PC-8001
#endif
+#ifdef SUPPORT_PC88_16BIT
+#define Port82_BOOT16 (!(port[0x82] & 0x01))
+#endif
+
#if defined(PC8801_VARIANT)
#define Port70_TEXTWND port[0x70]
#endif
memset(cdbios, 0xff, sizeof(cdbios));
cdbios_loaded = false;
#endif
+#ifdef SUPPORT_PC88_16BIT
+ memset(boot_16bit, 0xff, sizeof(boot_16bit));
+ boot_16bit_loaded = false;
+#endif
#endif
// load rom images
cdbios_loaded = true;
}
#endif
+#ifdef SUPPORT_PC88_16BIT
+ if(config.dipswitch & DIPSWITCH_16BIT) {
+ if(fio->Fopen(create_local_path(_T("PC-8801-16_Z80.ROM")), FILEIO_READ_BINARY)) {
+ fio->Fread(boot_16bit, 0x2000, 1);
+ fio->Fclose();
+ boot_16bit_loaded = true;
+ }
+ }
+#endif
#endif
delete fio;
cdda_volume = 100.0;
d_scsi_cdrom->set_volume((int)cdda_volume);
#endif
+#ifdef SUPPORT_PC88_16BIT
+ porta_16bit = 0;
+ portc_16bit = 0x80; // OBF_A(PC7)=1, IBF_B(PC1)=0
+#endif
#ifdef NIPPY_PATCH
// dirty patch for NIPPY
nippy_patch = false;
case 0x78:
Port70_TEXTWND++;
break;
+#ifdef SUPPORT_PC88_16BIT
+ case 0x80:
+ if(d_pio_16bit != NULL) {
+ d_pio_16bit->write_signal(SIG_I8255_PORT_C, 0x04, 0x04); // STB_B(PC2): H->L->H
+ d_pio_16bit->write_signal(SIG_I8255_PORT_B, data, 0xff);
+ d_pio_16bit->write_signal(SIG_I8255_PORT_C, 0x00, 0x04);
+ d_pio_16bit->write_signal(SIG_I8255_PORT_C, 0x04, 0x04);
+ }
+ break;
+ case 0x82:
+ if(boot_16bit_loaded && (mod & 0x01)) {
+ update_low_write();
+ update_low_read();
+ }
+ break;
+#endif
#ifdef SUPPORT_PC88_HMB20
case 0x88:
case 0x89:
if(addr == 0x0e) {
val &= ~0x80; // http://www.maroon.dti.ne.jp/youkan/pc88/iomap.html
}
+/*
+#ifdef SUPPORT_PC88_16BIT
+ if(boot_16bit_loaded && Port82_BOOT16) {
+ if(addr == 0x08 && d_cpu->get_pc() == 0x0004) {
+ val &= ~0x10;
+ }
+ }
+#endif
+*/
return val;
case 0x20:
case 0x21:
case 0x71:
return port[0x71];
#endif
+#ifdef SUPPORT_PC88_16BIT
+ case 0x80:
+ if(d_pio_16bit != NULL) {
+ d_pio_16bit->write_signal(SIG_I8255_PORT_C, 0x40, 0x40); // ACK_A(PC6): H->L->H
+ val = porta_16bit;
+ d_pio_16bit->write_signal(SIG_I8255_PORT_C, 0x00, 0x40);
+ d_pio_16bit->write_signal(SIG_I8255_PORT_C, 0x40, 0x40);
+ return val;
+ }
+ break;
+ case 0x81:
+ if(d_pio_16bit != NULL) {
+ // bit0: OBF_A(PC7)
+ // bit1: IBF_B(PC1)
+ return ((portc_16bit >> 7) & 0x01) | (portc_16bit & 0x02);
+ }
+ break;
+#endif
#ifdef SUPPORT_PC88_HMB20
// case 0x88:
case 0x89:
#else
void PC88::update_low_read()
{
+ update_low_read_sub();
+#ifdef SUPPORT_PC88_16BIT
+ if(boot_16bit_loaded && Port82_BOOT16) {
+ SET_BANK_R(0x0000, 0x1fff, boot_16bit);
+ }
+#endif
+}
+
+void PC88::update_low_read_sub()
+{
#if defined(PC88_EXRAM_BANKS)
if(PortE2_RDEN) {
if(PortE3_ERAMSL < PC88_EXRAM_BANKS) {
void PC88::update_low_write()
{
+ update_low_write_sub();
+#ifdef SUPPORT_PC88_16BIT
+ if(boot_16bit_loaded && Port82_BOOT16) {
+ SET_BANK_W(0x0000, 0x1fff, wdmy);
+ }
+#endif
+}
+
+void PC88::update_low_write_sub()
+{
#if defined(PC88_EXRAM_BANKS)
if(PortE2_WREN) {
if(PortE3_ERAMSL < PC88_EXRAM_BANKS) {
SET_BANK_W(0x0000, 0x7fff, ram);
}
+
#if defined(PC8801SR_VARIANT)
void PC88::update_tvram_memmap()
{
} else {
// send to rs-232c
}
+#ifdef SUPPORT_PC88_16BIT
+ } else if(id == SIG_PC88_16BIT_PORTA) {
+ porta_16bit = (data & mask) | (porta_16bit & ~mask);
+ } else if(id == SIG_PC88_16BIT_PORTC) {
+ portc_16bit = (data & mask) | (portc_16bit & ~mask);
+#endif
}
}
}
}
-#define STATE_VERSION 13
+#define STATE_VERSION 14
bool PC88::process_state(FILEIO* state_fio, bool loading)
{
state_fio->StateValue(cdda_register_id);
state_fio->StateValue(cdda_volume);
#endif
+#ifdef SUPPORT_PC88_16BIT
+ state_fio->StateValue(porta_16bit);
+ state_fio->StateValue(portc_16bit);
+#endif
#ifdef NIPPY_PATCH
state_fio->StateValue(nippy_patch);
#endif
#define SIG_PC88_GSX_IRQ 6
#endif
#define SIG_PC88_USART_OUT 7
+#ifdef SUPPORT_PC88_16BIT
+#define SIG_PC88_16BIT_PORTA 8
+#define SIG_PC88_16BIT_PORTC 9
+#endif
#define CMT_BUFFER_SIZE 0x40000
#ifdef SUPPORT_PC88_PCG8100
DEVICE *d_pcg_pit, *d_pcg_pcm1, *d_pcg_pcm2, *d_pcg_pcm3;
#endif
+#ifdef SUPPORT_PC88_16BIT
+ DEVICE *d_pio_16bit;
+#endif
#ifdef SUPPORT_M88_DISKDRV
DEVICE *d_diskio;
#endif
uint8_t cdbios[0x10000];
bool cdbios_loaded;
#endif
+#ifdef SUPPORT_PC88_16BIT
+ uint8_t boot_16bit[0x2000];
+ bool boot_16bit_loaded;
+#endif
// i/o port
uint8_t port[256];
void update_n80_read();
#else
void update_low_write();
+ void update_low_write_sub();
void update_low_read();
+ void update_low_read_sub();
#if defined(PC8801SR_VARIANT)
void update_tvram_memmap();
#endif
double cdda_volume;
#endif
+#ifdef SUPPORT_PC88_16BIT
+ uint8_t porta_16bit;
+ uint8_t portc_16bit;
+#endif
+
#ifdef NIPPY_PATCH
// dirty patch for NIPPY
bool nippy_patch;
d_pcg_pcm2 = NULL;
d_pcg_pcm3 = NULL;
#endif
+#ifdef SUPPORT_PC88_16BIT
+ d_pio_16bit = NULL;
+#endif
#ifdef SUPPORT_M88_DISKDRV
d_diskio = NULL;
#endif
d_pcg_pcm3 = device;
}
#endif
+#ifdef SUPPORT_PC88_16BIT
+ void set_context_pio_16bit(DEVICE* device)
+ {
+ d_pio_16bit = device;
+ }
+#endif
#ifdef SUPPORT_M88_DISKDRV
void set_context_diskio(DEVICE* device)
{
#include "../ay_3_891x.h"
#endif
-#if defined(SUPPORT_PC88_GSX8800) || defined(SUPPORT_PC88_PCG8100)
+#if defined(SUPPORT_PC88_GSX8800) || defined(SUPPORT_PC88_PCG8100) || defined(SUPPORT_PC88_16BIT)
#include "../i8253.h"
#endif
#include "../pcm8bit.h"
#endif
+#if defined(SUPPORT_PC88_16BIT)
+#include "../i8259.h"
+#include "../i86.h"
+#include "../io.h"
+#include "../memory.h"
+#endif
+
#ifdef SUPPORT_M88_DISKDRV
#include "diskio.h"
#endif
pc88pcg_pcm1 = pc88pcg_pcm2 = pc88pcg_pcm3 = NULL;
}
#endif
+#ifdef SUPPORT_PC88_16BIT
+ if(config.dipswitch & DIPSWITCH_16BIT) {
+ pc88pit_16bit = new I8253(this, emu);
+ pc88pio_16bit = new I8255(this, emu);
+ pc88pic_16bit = new I8259(this, emu);
+ pc88cpu_16bit = new I86(this, emu);
+ pc88cpu_16bit->device_model = INTEL_8086;
+ pc88io_16bit = new IO(this, emu);
+ pc88mem_16bit = new MEMORY(this, emu);
+ } else {
+ pc88cpu_16bit = NULL;
+ }
+#endif
#ifdef SUPPORT_M88_DISKDRV
if(config.dipswitch & DIPSWITCH_M88_DISKDRV) {
pc88diskio = new DiskIO(this, emu);
if(pc88cpu_sub != NULL) {
pc88event->set_context_cpu(pc88cpu_sub, 3993624);
}
+#ifdef SUPPORT_PC88_16BIT
+ if(pc88cpu_16bit != NULL) {
+ pc88event->set_context_cpu(pc88cpu_16bit, 7987248);
+ }
+#endif
// set sound device contexts
pc88event->set_context_sound(pc88pcm);
pc88->set_context_pcg_pcm3(pc88pcg_pcm3);
}
#endif
+#ifdef SUPPORT_PC88_16BIT
+ if(config.dipswitch & DIPSWITCH_16BIT) {
+ pc88->set_context_pio_16bit(pc88pio_16bit);
+ }
+#endif
#ifdef SUPPORT_M88_DISKDRV
if(config.dipswitch & DIPSWITCH_M88_DISKDRV) {
pc88->set_context_diskio(pc88diskio);
pc88pcg_pit->set_constant_clock(2, 3993624);
}
#endif
+#ifdef SUPPORT_PC88_16BIT
+ if(config.dipswitch & DIPSWITCH_16BIT) {
+ memset(pc88rom_16bit, 0xff, sizeof(pc88rom_16bit));
+ memset(pc88ram_16bit, 0x00, sizeof(pc88ram_16bit));
+
+ FILEIO* fio = new FILEIO();
+ if(fio->Fopen(create_local_path(_T("PC-8801-16_I86.ROM")), FILEIO_READ_BINARY)) {
+ fio->Fread(pc88rom_16bit, sizeof(pc88rom_16bit), 1);
+ fio->Fclose();
+ }
+ delete fio;
+
+ pc88mem_16bit->set_memory_rw(0, sizeof(pc88ram_16bit) - 1, pc88ram_16bit);
+ pc88mem_16bit->set_memory_r(0xff000, 0xfffff, pc88rom_16bit);
+
+ pc88io_16bit->set_iomap_alias_rw(0x00, pc88pit_16bit, 0);
+ pc88io_16bit->set_iomap_alias_rw(0x02, pc88pit_16bit, 1);
+ pc88io_16bit->set_iomap_alias_rw(0x04, pc88pit_16bit, 2);
+ pc88io_16bit->set_iomap_alias_w (0x06, pc88pit_16bit, 3);
+ pc88io_16bit->set_iomap_alias_rw(0x10, pc88pio_16bit, 0);
+ pc88io_16bit->set_iomap_alias_rw(0x12, pc88pio_16bit, 1);
+ pc88io_16bit->set_iomap_alias_rw(0x14, pc88pio_16bit, 2);
+ pc88io_16bit->set_iomap_alias_w (0x16, pc88pio_16bit, 3);
+ pc88io_16bit->set_iomap_alias_rw(0x20, pc88pic_16bit, 0);
+ pc88io_16bit->set_iomap_alias_rw(0x22, pc88pic_16bit, 1);
+
+ pc88pit_16bit->set_context_ch0(pc88pic_16bit, SIG_I8259_IR0, 1);
+ pc88pit_16bit->set_context_ch1(pc88pit_16bit, SIG_I8253_CLOCK_2, 1);
+ pc88pit_16bit->set_context_ch2(pc88pic_16bit, SIG_I8259_IR7, 1);
+ pc88pit_16bit->set_constant_clock(0, 2995218);
+ pc88pit_16bit->set_constant_clock(1, 2995218);
+ pc88pio_16bit->set_context_port_a(pc88, SIG_PC88_16BIT_PORTA, 0xff, 0);
+ pc88pio_16bit->set_context_port_c(pc88, SIG_PC88_16BIT_PORTC, 0x82, 0); // PC7+PC1
+ pc88pio_16bit->set_context_port_c(pc88pic_16bit, SIG_I8259_IR1, 0x01, 0); // PC0
+ pc88pio_16bit->set_context_port_c(pc88pic_16bit, SIG_I8259_IR2, 0x08, 0); // PC3
+ pc88pic_16bit->set_context_cpu(pc88cpu_16bit);
+ pc88cpu_16bit->set_context_mem(pc88mem_16bit);
+ pc88cpu_16bit->set_context_io(pc88io_16bit);
+ pc88cpu_16bit->set_context_intr(pc88pic_16bit);
+#ifdef USE_DEBUGGER
+ pc88cpu_16bit->set_context_debugger(new DEBUGGER(this, emu));
+#endif
+
+ }
+#endif
// initialize all devices
#if defined(__GIT_REPO_VERSION)
return pc88cpu;
} else if(index == 1) {
return pc88cpu_sub;
+#ifdef SUPPORT_PC88_16BIT
+ } else if(index == 2) {
+ return pc88cpu_16bit;
+#endif
}
return NULL;
}
return pc88event->get_current_clock_uint64();
}
-#define STATE_VERSION 12
+#define STATE_VERSION 13
bool VM::process_state(FILEIO* state_fio, bool loading)
{
return false;
}
// Machine specified.
+#ifdef SUPPORT_PC88_16BIT
+ state_fio->StateArray(pc88ram_16bit, sizeof(pc88ram_16bit), 1);
+#endif
state_fio->StateValue(boot_mode);
return true;
}
#define SUPPORT_PC88_OPN2
#define SUPPORT_PC88_JAST
#define SUPPORT_PC88_FDD_8INCH
+ #define SUPPORT_PC88_16BIT
#define SUPPORT_M88_DISKDRV
#elif defined(_PC8801)
#define SUPPORT_PC88_KANJI1
#define SUPPORT_PC88_OPN2
#define SUPPORT_PC88_JAST
#define SUPPORT_PC88_FDD_8INCH
+ #define SUPPORT_PC88_16BIT
#define SUPPORT_M88_DISKDRV
#elif defined(_PC8001SR)
#define SUPPORT_PC88_KANJI1
#define SCREEN_HEIGHT 400
#define WINDOW_HEIGHT_ASPECT 480
#define MAX_DRIVE 2
+#if defined(SUPPORT_PC88_16BIT)
+#define I8259_MAX_CHIPS 1
+#define IO_ADDR_MAX 0x100
+#define MEMORY_ADDR_MAX 0x100000
+#endif
#define UPD765A_NO_ST1_EN_OR_FOR_RESULT7
#if defined(_PC8801MA)
#define PC80S31K_NO_WAIT
#define DIPSWITCH_FDD_8INCH 0x80
#define DIPSWITCH_M88_DISKDRV 0x100
#define DIPSWITCH_QUASIS88_CMT 0x200
+#define DIPSWITCH_16BIT 0x400
#define DIPSWITCH_DEFAULT (DIPSWITCH_HMB20 + DIPSWITCH_GSX8800 + DIPSWITCH_PCG8100 + DIPSWITCH_CMDSING + DIPSWITCH_FDD_5INCH)
#define USE_JOYSTICK_TYPE 2
#if defined(SUPPORT_PC88_FDD_8INCH)
class AY_3_891X;
#endif
-#if defined(SUPPORT_PC88_GSX8800) || defined(SUPPORT_PC88_PCG8100)
+#if defined(SUPPORT_PC88_GSX8800) || defined(SUPPORT_PC88_PCG8100) || defined(SUPPORT_PC88_16BIT)
class I8253;
#endif
+
+#if defined(SUPPORT_PC88_16BIT)
+class I8259;
+class I86;
+class IO;
+class MEMORY;
+#endif
namespace PC88DEV {
class PC88;
#ifdef SUPPORT_M88_DISKDRV
protected:
//EMU* emu;
//csp_state_utils* state_entry;
-
+
// devices
EVENT* pc88event;
-
+
DEVICE* pc88prn;
I8251* pc88sio;
I8255* pc88pio;
#endif
DEVICE* dummycpu;
Z80* pc88cpu;
-
+
PC80S31K* pc88sub;
I8255* pc88pio_sub;
UPD765A* pc88fdc_sub;
#ifdef SUPPORT_PC88_HMB20
YM2151* pc88opm;
#endif
-
+
#ifdef SUPPORT_PC88_GSX8800
// I8253* pc88gsx_pit;
AY_3_891X* pc88gsx_psg1;
AY_3_891X* pc88gsx_psg3;
AY_3_891X* pc88gsx_psg4;
#endif
-
+
#ifdef SUPPORT_PC88_PCG8100
I8253* pc88pcg_pit;
PCM1BIT* pc88pcg_pcm1;
PCM1BIT* pc88pcg_pcm2;
PCM1BIT* pc88pcg_pcm3;
#endif
-
+
+#ifdef SUPPORT_PC88_16BIT
+ I8253* pc88pit_16bit;
+ I8255* pc88pio_16bit;
+ I8259* pc88pic_16bit;
+ I86* pc88cpu_16bit;
+ IO* pc88io_16bit;
+ MEMORY* pc88mem_16bit;
+ uint8_t pc88rom_16bit[0x1000];
+ uint8_t pc88ram_16bit[0x20000];
+#endif
+
#ifdef SUPPORT_M88_DISKDRV
PC88DEV::DiskIO* pc88diskio;
#endif
-
+
PC88DEV::PC88* pc88;
-
+
int boot_mode;
-
+
// drives
UPD765A *get_floppy_disk_controller(int drv);
DISK *get_floppy_disk_handler(int drv);
-
+
public:
// ----------------------------------------
// initialize
// ----------------------------------------
-
+
VM(EMU_TEMPLATE* parent_emu);
~VM();
-
+
// ----------------------------------------
// for emulation class
// ----------------------------------------
-
+
// drive virtual machine
void reset() override;
void run() override;
double get_frame_rate() override;
-
+
#ifdef USE_DEBUGGER
// debugger
DEVICE *get_cpu(int index) override;
#endif
// draw screen
void draw_screen() override;
-
+
// sound generation
void initialize_sound(int rate, int samples) override;
uint16_t* create_sound(int* extra_frames) override;
#ifdef USE_SOUND_VOLUME
void set_sound_device_volume(int ch, int decibel_l, int decibel_r) override;
#endif
-
+
// notify key
void key_down(int code, bool repeat) override;
void key_up(int code) override;
bool get_caps_locked() override;
bool get_kana_locked() override;
-
+
// user interface
void open_floppy_disk(int drv, const _TCHAR* file_path, int bank) override;
void close_floppy_disk(int drv) override;
uint32_t is_compact_disc_accessed() override;
#endif
bool is_frame_skippable() override;
-
+
double get_current_usec() override;
uint64_t get_current_clock_uint64() override;
-
+
void update_config() override;
bool process_state(FILEIO* state_fio, bool loading);
-
+
// ----------------------------------------
// for each device
// ----------------------------------------
-
+
// devices
//DEVICE* get_device(int id) override;
//DEVICE* dummy;
#endif
rtc = new UPD1990A(this, emu);
#if defined(SUPPORT_2HD_FDD_IF)
-#if defined(_PC9801) || defined(_PC9801E)
+#if /*defined(_PC9801) || */ defined(_PC9801E)
if((config.dipswitch & DIPSWITCH_2HD) && FILEIO::IsFileExisting(create_local_path(_T("2HDIF.ROM")))) {
#endif
fdc_2hd = new UPD765A(this, emu);
fdc_2hd->set_device_name(_T("uPD765A FDC (2HD I/F)"));
-#if defined(_PC9801) || defined(_PC9801E)
+#if /*defined(_PC9801) || */ defined(_PC9801E)
} else {
fdc_2hd = NULL;
}
#endif
#define USE_DIPSWITCH
-#define DIPSWITCH_DEFAULT_HI (4 | 8)
+#define DIPSWITCH_DEFAULT_HI (4 | 8 | 16)
#define DIPSWITCH_DEFAULT (DIPSWITCH_DEFAULT_LO | (DIPSWITCH_DEFAULT_HI << 16))
#if defined(SUPPORT_SASI_IF) || defined(SUPPORT_SCSI_IF) || defined(SUPPORT_IDE_IF)
}
//_fdc_debug_log = osd->check_feature(_T("_FDC_DEBUG_LOG"));
_fdc_debug_log = config.special_debug_fdc;
-
+
_upd765a_dma_mode = osd->check_feature(_T("UPD765A_DMA_MODE"));
_upd765a_ext_drvsel = osd->check_feature(_T("UPD765A_EXT_DRVSEL"));
_upd765a_sence_intstat_result = osd->check_feature(_T("UPD765A_SENCE_INTSTAT_RESULT"));
_upd765a_no_st0_at_for_seek = osd->check_feature(_T("UPD765A_NO_ST0_AT_FOR_SEEK"));
_upd765a_wait_result7 = osd->check_feature(_T("UPD765A_WAIT_RESULT7"));
_upd765a_no_st1_en_or_for_result7 = osd->check_feature(_T("UPD765A_NO_ST1_EN_OR_FOR_RESULT7"));
-
+
// initialize d88 handler
for(int i = 0; i < 4; i++) {
disk[i] = new DISK(emu);
disk[i]->set_device_name(_T("%s/Disk #%d"), this_device_name, i + 1);
}
-
+
// initialize noise
if(d_noise_seek != NULL) {
d_noise_seek->set_device_name(_T("Noise Player (FDD Seek)"));
d_noise_head_up->load_wav_file(_T("HEADUP.WAV"));
d_noise_head_up->set_mute(!config.sound_noise_fdd);
}
-
+
// initialize fdc
memset(fdc, 0, sizeof(fdc));
memset(buffer, 0, sizeof(buffer));
-
+
phase = prevphase = PHASE_IDLE;
status = S_RQM;
seekstat = 0;
//#ifdef UPD765A_DMA_MODE
dma_data_lost = false;
//#endif
-
+
set_irq(false);
set_drq(false);
//#ifdef UPD765A_EXT_DRVSEL
set_hdu(0);
}
//#endif
-
+
// index hole event
if(outputs_index.count) {
register_event(this, EVENT_INDEX, 4, true, NULL);
static const _TCHAR* get_command_name(uint8_t data)
{
static _TCHAR name[16];
-
+
switch(data & 0x1f) {
case 0x02:
my_stprintf_s(name, 16, _T("RD DIAGNOSTIC"));
// fdc data
if((status & (S_RQM | S_DIO)) == S_RQM) {
status &= ~S_RQM;
-
+
switch(phase) {
case PHASE_IDLE:
//#ifdef _FDC_DEBUG_LOG
process_cmd(command & 0x1f);
}
break;
-
+
case PHASE_WRITE:
//#ifdef _FDC_DEBUG_LOG
if(_fdc_debug_log) this->force_out_debug_log(_T("FDC: WRITE=%2x\n"), data); // emu->force_out_debug_log()
}
fdc[hdu & DRIVE_MASK].access = true;
break;
-
+
case PHASE_SCAN:
if(data != 0xff) {
if(((command & 0x1f) == 0x11 && *bufptr != data) ||
if((status & (S_RQM | S_DIO)) == (S_RQM | S_DIO)) {
uint8_t data;
status &= ~S_RQM;
-
+
switch(phase) {
case PHASE_RESULT:
data = *bufptr++;
shift_to_idle();
}
return data;
-
+
case PHASE_READ:
data = *bufptr++;
//#ifdef _FDC_DEBUG_LOG
} else if(event_id == EVENT_DRQ) {
drq_id = -1;
status |= S_RQM;
-
+
int drv = hdu & DRIVE_MASK;
fdc[drv].cur_position = (fdc[drv].cur_position + 1) % disk[drv]->get_track_size();
fdc[drv].prev_clock = prev_drq_clock = get_current_clock();
steptime /= 2;
}
int seektime = (trk == fdc[drv].track) ? 120 : steptime * abs(trk - fdc[drv].track) + 500; // usec
-
+
if(drv >= _max_drive) {
// invalid drive number
fdc[drv].result = (drv & DRIVE_MASK) | ST0_SE | ST0_NR | ST0_AT;
void UPD765A::seek_event(int drv)
{
int trk = fdc[drv].track;
-
+
if(drv >= _max_drive) {
fdc[drv].result = (drv & DRIVE_MASK) | ST0_SE | ST0_NR | ST0_AT;
} else if(force_ready || disk[drv]->inserted) {
}
set_irq(true);
seekstat &= ~(1 << drv);
-
+
// reset dsch flag
disk[drv]->changed = false;
}
int drv = hdu & DRIVE_MASK;
int trk = fdc[drv].track;
int side = (hdu >> 2) & 1;
-
+
result = check_cond(false);
if(result & ST1_MA) {
REGISTER_PHASE_EVENT(PHASE_EXEC, 10000);
result = ST1_ND;
}
}
-
+
// FIXME: we need to consider the case that the first sector does not have a data field
// start reading at the first sector data
memcpy(buffer, disk[drv]->track + disk[drv]->data_position[0], disk[drv]->get_track_size() - disk[drv]->data_position[0]);
memcpy(buffer + disk[drv]->get_track_size() - disk[drv]->data_position[0], disk[drv]->track, disk[drv]->data_position[0]);
fdc[drv].next_trans_position = disk[drv]->data_position[0];
-
+
shift_to_read(0x80 << min(id[3], (uint8_t)7));
return;
}
int drv = hdu & DRIVE_MASK;
int trk = fdc[drv].track;
int side = (hdu >> 2) & 1;
-
+
// get sector counts in the current track
if(!disk[drv]->make_track(trk, side)) {
//#ifdef _FDC_DEBUG_LOG
memcpy(buffer + disk[drv]->get_track_size() - disk[drv]->data_position[i], disk[drv]->track, disk[drv]->data_position[i]);
}
fdc[drv].next_trans_position = disk[drv]->data_position[i];
-
+
if((disk[drv]->addr_crc_error || disk[drv]->data_crc_error) && !disk[drv]->ignore_crc()) {
return ST0_AT | ST1_DE | (disk[drv]->data_crc_error ? ST2_DD : 0);
}
int drv = hdu & DRIVE_MASK;
int trk = fdc[drv].track;
int side = (hdu >> 2) & 1;
-
+
if(disk[drv]->write_protected) {
return ST0_AT | ST1_NW;
}
int drv = hdu & DRIVE_MASK;
int trk = fdc[drv].track;
int side = (hdu >> 2) & 1;
-
+
// get sector counts in the current track
if(!disk[drv]->get_track(trk, side)) {
return ST0_AT | ST1_MA;
int drv = hdu & DRIVE_MASK;
int trk = fdc[drv].track;
int side = (hdu >> 2) & 1;
-
+
// get sector counts in the current track
if(!disk[drv]->get_track(trk, side)) {
return ST0_AT | ST1_MA;
if(!secnum) {
return ST0_AT | ST1_MA;
}
-
+
// first found sector
int position = get_cur_position(drv), first_sector = 0;
if(position > disk[drv]->sync_position[secnum - 1]) {
int trk = fdc[drv].track;
int side = (hdu >> 2) & 1;
int length = 0x80 << min(id[3], (uint8_t)7);
-
+
if((result = check_cond(true)) != 0) {
return result;
}
if(disk[drv]->write_protected) {
return ST0_AT | ST1_NW;
}
-
+
disk[drv]->format_track(trk, side);
disk[drv]->track_mfm = ((command & 0x40) != 0);
-
+
for(int i = 0; i < eot && i < 256; i++) {
for(int j = 0; j < 4; j++) {
id[j] = buffer[4 * i + j];
head_unload_time = buffer[1] >> 1;
no_dma_mode = ((buffer[1] & 1) != 0);
shift_to_idle();
- status = 0x80;//0xff;
+ status = S_RQM;//0xff;
break;
}
}
status = S_RQM | S_DIO | S_NDM | S_CB;
bufptr = buffer;
count = length;
-
+
int drv = hdu & DRIVE_MASK;
fdc[drv].cur_position = fdc[drv].next_trans_position;
fdc[drv].prev_clock = prev_drq_clock = get_current_clock();
status = S_RQM | S_NDM | S_CB;
bufptr = buffer;
count = length;
-
+
int drv = hdu & DRIVE_MASK;
fdc[drv].cur_position = fdc[drv].next_trans_position;
fdc[drv].prev_clock = prev_drq_clock = get_current_clock();
result = ST2_SH;
bufptr = buffer;
count = length;
-
+
int drv = hdu & DRIVE_MASK;
fdc[drv].cur_position = fdc[drv].next_trans_position;
fdc[drv].prev_clock = prev_drq_clock = get_current_clock();
}
} else {
shift_to_result7_event();
- }
+ }
finish_transfer();
}
void UPD765A::start_transfer()
{
int drv = hdu & DRIVE_MASK;
-
+
if(head_unload_id[drv] != -1) {
cancel_event(this, head_unload_id[drv]);
head_unload_id[drv] = -1;
void UPD765A::finish_transfer()
{
int drv = hdu & DRIVE_MASK;
-
+
if(fdc[drv].head_load) {
if(head_unload_id[drv] != -1) {
cancel_event(this, head_unload_id[drv]);
int drv = hdu & DRIVE_MASK;
int trk = fdc[drv].track;
int side = (hdu >> 2) & 1;
-
+
if(/*disk[drv]->no_skew &&*/ !disk[drv]->correct_timing()) {
// XXX: this image may be a standard image or coverted from a standard image and skew may be incorrect,
// so use the constant period to go to exec phase
return 100;
}
-
+
// search target sector
int position = get_cur_position(drv);
int trans_position = -1, sync_position;
-
+
if(disk[drv]->get_track(trk, side) && disk[drv]->sector_num.sd != 0) {
if((command & 0x1f) == 0x02) {
// read diagnotics
// sector not found
return 100;
}
-
+
// get current position
int bytes = trans_position - position;
if(sync_position < position) {
int drv = hdu & DRIVE_MASK;
int side = (hdu >> 2) & 1;
int position = get_cur_position(drv);
-
+
my_stprintf_s(buffer, buffer_len,
_T("CMD=%02X (%s) HDU=%02X C=%02X H=%02X R=%02X N=%02X EOT=%02X GPL=%02X DTL=%02X\n")
_T("UNIT: DRIVE=%d TRACK=%2d(%2d) SIDE=%d POSITION=%5d/%d"),
command, get_command_name(command), hdu,id[0], id[1], id[2], id[3], eot, gpl, dtl,
drv, fdc[drv].track, fdc[drv].cur_track, side,
position, disk[drv]->get_track_size());
-
+
for(int i = 0; i < disk[drv]->sector_num.sd; i++) {
uint8_t c, h, r, n;
int length;
state_fio->StateValue(prev_drq_clock);
return true;
}
-
}
#endif
#endif
-#ifdef USE_BOOT_MODE
+#if defined(USE_BOOT_MODE) || defined(USE_DIPSWITCH)
else if(id >= ID_VM_BOOT_MENU_START && id <= ID_VM_BOOT_MENU_END) {
- update_vm_boot_menu(hMenu);
+ #ifdef USE_BOOT_MODE
+ update_vm_boot_menu(hMenu);
+ #endif
+ #ifdef USE_DIPSWITCH
+ // dipswitch may be in sound menu
+ update_vm_dipswitch_menu(hMenu);
+ #endif
}
#endif
#ifdef USE_CPU_TYPE
</FileConfiguration>\r
</File>\r
<File\r
+ RelativePath="..\src\vm\i386_dasm.cpp"\r
+ >\r
+ <FileConfiguration\r
+ Name="Debug|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ PreprocessorDefinitions=""\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ PreprocessorDefinitions=""\r
+ />\r
+ </FileConfiguration>\r
+ </File>\r
+ <File\r
RelativePath="..\src\vm\i8251.cpp"\r
>\r
<FileConfiguration\r
</FileConfiguration>\r
</File>\r
<File\r
+ RelativePath="..\src\vm\i8259.cpp"\r
+ >\r
+ <FileConfiguration\r
+ Name="Debug|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ PreprocessorDefinitions=""\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ PreprocessorDefinitions=""\r
+ />\r
+ </FileConfiguration>\r
+ </File>\r
+ <File\r
+ RelativePath="..\src\vm\i86.cpp"\r
+ >\r
+ <FileConfiguration\r
+ Name="Debug|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ PreprocessorDefinitions=""\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ PreprocessorDefinitions=""\r
+ />\r
+ </FileConfiguration>\r
+ </File>\r
+ <File\r
+ RelativePath="..\src\vm\io.cpp"\r
+ >\r
+ <FileConfiguration\r
+ Name="Debug|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ PreprocessorDefinitions=""\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ PreprocessorDefinitions=""\r
+ />\r
+ </FileConfiguration>\r
+ </File>\r
+ <File\r
+ RelativePath="..\src\vm\memory.cpp"\r
+ >\r
+ <FileConfiguration\r
+ Name="Debug|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ PreprocessorDefinitions=""\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ PreprocessorDefinitions=""\r
+ />\r
+ </FileConfiguration>\r
+ </File>\r
+ <File\r
RelativePath="..\src\vm\noise.cpp"\r
>\r
<FileConfiguration\r
</FileConfiguration>\r
</File>\r
<File\r
+ RelativePath="..\src\vm\v30_dasm.cpp"\r
+ >\r
+ <FileConfiguration\r
+ Name="Debug|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ PreprocessorDefinitions=""\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ PreprocessorDefinitions=""\r
+ />\r
+ </FileConfiguration>\r
+ </File>\r
+ <File\r
RelativePath="..\src\vm\ym2203.cpp"\r
>\r
<FileConfiguration\r
>\r
</File>\r
<File\r
+ RelativePath="..\src\vm\i386_dasm.h"\r
+ >\r
+ </File>\r
+ <File\r
RelativePath="..\src\vm\i8251.h"\r
>\r
</File>\r
>\r
</File>\r
<File\r
+ RelativePath="..\src\vm\i8259.h"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\src\vm\i86.h"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\src\vm\io.h"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\src\vm\memory.h"\r
+ >\r
+ </File>\r
+ <File\r
RelativePath="..\src\vm\noise.h"\r
>\r
</File>\r
>\r
</File>\r
<File\r
+ RelativePath="..\src\vm\v30_dasm.h"\r
+ >\r
+ </File>\r
+ <File\r
RelativePath="..\src\vm\vm.h"\r
>\r
</File>\r
</FileConfiguration>\r
</File>\r
<File\r
+ RelativePath="..\src\vm\i386_dasm.cpp"\r
+ >\r
+ <FileConfiguration\r
+ Name="Debug|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ PreprocessorDefinitions=""\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ PreprocessorDefinitions=""\r
+ />\r
+ </FileConfiguration>\r
+ </File>\r
+ <File\r
RelativePath="..\src\vm\i8251.cpp"\r
>\r
<FileConfiguration\r
</FileConfiguration>\r
</File>\r
<File\r
+ RelativePath="..\src\vm\i8259.cpp"\r
+ >\r
+ <FileConfiguration\r
+ Name="Debug|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ PreprocessorDefinitions=""\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ PreprocessorDefinitions=""\r
+ />\r
+ </FileConfiguration>\r
+ </File>\r
+ <File\r
+ RelativePath="..\src\vm\i86.cpp"\r
+ >\r
+ <FileConfiguration\r
+ Name="Debug|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ PreprocessorDefinitions=""\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ PreprocessorDefinitions=""\r
+ />\r
+ </FileConfiguration>\r
+ </File>\r
+ <File\r
+ RelativePath="..\src\vm\io.cpp"\r
+ >\r
+ <FileConfiguration\r
+ Name="Debug|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ PreprocessorDefinitions=""\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ PreprocessorDefinitions=""\r
+ />\r
+ </FileConfiguration>\r
+ </File>\r
+ <File\r
+ RelativePath="..\src\vm\memory.cpp"\r
+ >\r
+ <FileConfiguration\r
+ Name="Debug|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ PreprocessorDefinitions=""\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ PreprocessorDefinitions=""\r
+ />\r
+ </FileConfiguration>\r
+ </File>\r
+ <File\r
RelativePath="..\src\vm\noise.cpp"\r
>\r
<FileConfiguration\r
</FileConfiguration>\r
</File>\r
<File\r
+ RelativePath="..\src\vm\v30_dasm.cpp"\r
+ >\r
+ <FileConfiguration\r
+ Name="Debug|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ PreprocessorDefinitions=""\r
+ />\r
+ </FileConfiguration>\r
+ <FileConfiguration\r
+ Name="Release|Win32"\r
+ >\r
+ <Tool\r
+ Name="VCCLCompilerTool"\r
+ PreprocessorDefinitions=""\r
+ />\r
+ </FileConfiguration>\r
+ </File>\r
+ <File\r
RelativePath="..\src\vm\ym2203.cpp"\r
>\r
<FileConfiguration\r
>\r
</File>\r
<File\r
+ RelativePath="..\src\vm\i386_dasm.h"\r
+ >\r
+ </File>\r
+ <File\r
RelativePath="..\src\vm\i8251.h"\r
>\r
</File>\r
>\r
</File>\r
<File\r
+ RelativePath="..\src\vm\i8259.h"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\src\vm\i86.h"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\src\vm\io.h"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath="..\src\vm\memory.h"\r
+ >\r
+ </File>\r
+ <File\r
RelativePath="..\src\vm\noise.h"\r
>\r
</File>\r
>\r
</File>\r
<File\r
+ RelativePath="..\src\vm\v30_dasm.h"\r
+ >\r
+ </File>\r
+ <File\r
RelativePath="..\src\vm\vm.h"\r
>\r
</File>\r
<ClCompile Include="..\src\vm\fmgen\fmtimer.cpp" />\r
<ClCompile Include="..\src\vm\fmgen\opna.cpp" />\r
<ClCompile Include="..\src\vm\fmgen\psg.cpp" />\r
+ <ClCompile Include="..\src\vm\i386_dasm.cpp" />\r
<ClCompile Include="..\src\vm\i8251.cpp" />\r
<ClCompile Include="..\src\vm\i8253.cpp" />\r
<ClCompile Include="..\src\vm\i8255.cpp" />\r
+ <ClCompile Include="..\src\vm\i8259.cpp" />\r
+ <ClCompile Include="..\src\vm\i86.cpp" />\r
+ <ClCompile Include="..\src\vm\io.cpp" />\r
+ <ClCompile Include="..\src\vm\memory.cpp" />\r
<ClCompile Include="..\src\vm\noise.cpp" />\r
<ClCompile Include="..\src\vm\pc80s31k.cpp" />\r
<ClCompile Include="..\src\vm\pc8801\diskio.cpp" />\r
<ClCompile Include="..\src\vm\prnfile.cpp" />\r
<ClCompile Include="..\src\vm\upd1990a.cpp" />\r
<ClCompile Include="..\src\vm\upd765a.cpp" />\r
+ <ClCompile Include="..\src\vm\v30_dasm.cpp" />\r
<ClCompile Include="..\src\vm\ym2203.cpp" />\r
<ClCompile Include="..\src\vm\z80.cpp" />\r
<ClCompile Include="..\src\win32\osd.cpp" />\r
<ClInclude Include="..\src\vm\fmgen\misc.h" />\r
<ClInclude Include="..\src\vm\fmgen\opna.h" />\r
<ClInclude Include="..\src\vm\fmgen\psg.h" />\r
+ <ClInclude Include="..\src\vm\i386_dasm.h" />\r
<ClInclude Include="..\src\vm\i8251.h" />\r
<ClInclude Include="..\src\vm\i8253.h" />\r
<ClInclude Include="..\src\vm\i8255.h" />\r
+ <ClInclude Include="..\src\vm\i8259.h" />\r
+ <ClInclude Include="..\src\vm\i86.h" />\r
+ <ClInclude Include="..\src\vm\io.h" />\r
+ <ClInclude Include="..\src\vm\memory.h" />\r
<ClInclude Include="..\src\vm\noise.h" />\r
<ClInclude Include="..\src\vm\pc80s31k.h" />\r
<ClInclude Include="..\src\vm\pc8801\diskio.h" />\r
<ClInclude Include="..\src\vm\prnfile.h" />\r
<ClInclude Include="..\src\vm\upd1990a.h" />\r
<ClInclude Include="..\src\vm\upd765a.h" />\r
+ <ClInclude Include="..\src\vm\v30_dasm.h" />\r
<ClInclude Include="..\src\vm\vm.h" />\r
<ClInclude Include="..\src\vm\vm_template.h" />\r
<ClInclude Include="..\src\vm\ym2203.h" />\r
<ClCompile Include="..\src\vm\i8251.cpp">\r
<Filter>Source Files\VM Common Source Files</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\src\vm\i386_dasm.cpp">\r
+ <Filter>Source Files\VM Common Source Files</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\src\vm\i8253.cpp">\r
<Filter>Source Files\VM Common Source Files</Filter>\r
</ClCompile>\r
<ClCompile Include="..\src\vm\i8255.cpp">\r
<Filter>Source Files\VM Common Source Files</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\src\vm\i8259.cpp">\r
+ <Filter>Source Files\VM Common Source Files</Filter>\r
+ </ClCompile>\r
+ <ClCompile Include="..\src\vm\i86.cpp">\r
+ <Filter>Source Files\VM Common Source Files</Filter>\r
+ </ClCompile>\r
+ <ClCompile Include="..\src\vm\io.cpp">\r
+ <Filter>Source Files\VM Common Source Files</Filter>\r
+ </ClCompile>\r
+ <ClCompile Include="..\src\vm\memory.cpp">\r
+ <Filter>Source Files\VM Common Source Files</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\src\vm\noise.cpp">\r
<Filter>Source Files\VM Common Source Files</Filter>\r
</ClCompile>\r
<ClCompile Include="..\src\vm\upd765a.cpp">\r
<Filter>Source Files\VM Common Source Files</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\src\vm\v30_dasm.cpp">\r
+ <Filter>Source Files\VM Common Source Files</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\src\vm\ym2203.cpp">\r
<Filter>Source Files\VM Common Source Files</Filter>\r
</ClCompile>\r
<ClInclude Include="..\src\vm\event.h">\r
<Filter>Header Files\VM Common Header Files</Filter>\r
</ClInclude>\r
+ <ClInclude Include="..\src\vm\i386_dasm.h">\r
+ <Filter>Header Files\VM Common Header Files</Filter>\r
+ </ClInclude>\r
<ClInclude Include="..\src\vm\i8251.h">\r
<Filter>Header Files\VM Common Header Files</Filter>\r
</ClInclude>\r
<ClInclude Include="..\src\vm\i8255.h">\r
<Filter>Header Files\VM Common Header Files</Filter>\r
</ClInclude>\r
+ <ClInclude Include="..\src\vm\i8259.h">\r
+ <Filter>Header Files\VM Common Header Files</Filter>\r
+ </ClInclude>\r
+ <ClInclude Include="..\src\vm\i86.h">\r
+ <Filter>Header Files\VM Common Header Files</Filter>\r
+ </ClInclude>\r
+ <ClInclude Include="..\src\vm\io.h">\r
+ <Filter>Header Files\VM Common Header Files</Filter>\r
+ </ClInclude>\r
+ <ClInclude Include="..\src\vm\memory.h">\r
+ <Filter>Header Files\VM Common Header Files</Filter>\r
+ </ClInclude>\r
<ClInclude Include="..\src\vm\noise.h">\r
<Filter>Header Files\VM Common Header Files</Filter>\r
</ClInclude>\r
<ClInclude Include="..\src\vm\upd765a.h">\r
<Filter>Header Files\VM Common Header Files</Filter>\r
</ClInclude>\r
+ <ClInclude Include="..\src\vm\v30_dasm.h">\r
+ <Filter>Header Files\VM Common Header Files</Filter>\r
+ </ClInclude>\r
<ClInclude Include="..\src\vm\vm.h">\r
<Filter>Header Files\VM Common Header Files</Filter>\r
</ClInclude>\r
<ClCompile Include="..\src\vm\fmgen\fmtimer.cpp" />\r
<ClCompile Include="..\src\vm\fmgen\opna.cpp" />\r
<ClCompile Include="..\src\vm\fmgen\psg.cpp" />\r
+ <ClCompile Include="..\src\vm\i386_dasm.cpp" />\r
<ClCompile Include="..\src\vm\i8251.cpp" />\r
<ClCompile Include="..\src\vm\i8253.cpp" />\r
<ClCompile Include="..\src\vm\i8255.cpp" />\r
+ <ClCompile Include="..\src\vm\i8259.cpp" />\r
+ <ClCompile Include="..\src\vm\i86.cpp" />\r
+ <ClCompile Include="..\src\vm\io.cpp" />\r
+ <ClCompile Include="..\src\vm\memory.cpp" />\r
<ClCompile Include="..\src\vm\noise.cpp" />\r
<ClCompile Include="..\src\vm\pc80s31k.cpp" />\r
<ClCompile Include="..\src\vm\pc8801\diskio.cpp" />\r
<ClCompile Include="..\src\vm\prnfile.cpp" />\r
<ClCompile Include="..\src\vm\upd1990a.cpp" />\r
<ClCompile Include="..\src\vm\upd765a.cpp" />\r
+ <ClCompile Include="..\src\vm\v30_dasm.cpp" />\r
<ClCompile Include="..\src\vm\ym2203.cpp" />\r
<ClCompile Include="..\src\vm\z80.cpp" />\r
<ClCompile Include="..\src\win32\osd.cpp" />\r
<ClInclude Include="..\src\vm\fmgen\misc.h" />\r
<ClInclude Include="..\src\vm\fmgen\opna.h" />\r
<ClInclude Include="..\src\vm\fmgen\psg.h" />\r
+ <ClInclude Include="..\src\vm\i386_dasm.h" />\r
<ClInclude Include="..\src\vm\i8251.h" />\r
<ClInclude Include="..\src\vm\i8253.h" />\r
<ClInclude Include="..\src\vm\i8255.h" />\r
+ <ClInclude Include="..\src\vm\i8259.h" />\r
+ <ClInclude Include="..\src\vm\i86.h" />\r
+ <ClInclude Include="..\src\vm\io.h" />\r
+ <ClInclude Include="..\src\vm\memory.h" />\r
<ClInclude Include="..\src\vm\noise.h" />\r
<ClInclude Include="..\src\vm\pc80s31k.h" />\r
<ClInclude Include="..\src\vm\pc8801\diskio.h" />\r
<ClInclude Include="..\src\vm\prnfile.h" />\r
<ClInclude Include="..\src\vm\upd1990a.h" />\r
<ClInclude Include="..\src\vm\upd765a.h" />\r
+ <ClInclude Include="..\src\vm\v30_dasm.h" />\r
<ClInclude Include="..\src\vm\vm.h" />\r
<ClInclude Include="..\src\vm\vm_template.h" />\r
<ClInclude Include="..\src\vm\ym2203.h" />\r
<ClCompile Include="..\src\vm\i8251.cpp">\r
<Filter>Source Files\VM Common Source Files</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\src\vm\i386_dasm.cpp">\r
+ <Filter>Source Files\VM Common Source Files</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\src\vm\i8253.cpp">\r
<Filter>Source Files\VM Common Source Files</Filter>\r
</ClCompile>\r
<ClCompile Include="..\src\vm\i8255.cpp">\r
<Filter>Source Files\VM Common Source Files</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\src\vm\i8259.cpp">\r
+ <Filter>Source Files\VM Common Source Files</Filter>\r
+ </ClCompile>\r
+ <ClCompile Include="..\src\vm\i86.cpp">\r
+ <Filter>Source Files\VM Common Source Files</Filter>\r
+ </ClCompile>\r
+ <ClCompile Include="..\src\vm\io.cpp">\r
+ <Filter>Source Files\VM Common Source Files</Filter>\r
+ </ClCompile>\r
+ <ClCompile Include="..\src\vm\memory.cpp">\r
+ <Filter>Source Files\VM Common Source Files</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\src\vm\noise.cpp">\r
<Filter>Source Files\VM Common Source Files</Filter>\r
</ClCompile>\r
<ClCompile Include="..\src\vm\upd765a.cpp">\r
<Filter>Source Files\VM Common Source Files</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\src\vm\v30_dasm.cpp">\r
+ <Filter>Source Files\VM Common Source Files</Filter>\r
+ </ClCompile>\r
<ClCompile Include="..\src\vm\ym2203.cpp">\r
<Filter>Source Files\VM Common Source Files</Filter>\r
</ClCompile>\r
<ClInclude Include="..\src\vm\event.h">\r
<Filter>Header Files\VM Common Header Files</Filter>\r
</ClInclude>\r
+ <ClInclude Include="..\src\vm\i386_dasm.h">\r
+ <Filter>Header Files\VM Common Header Files</Filter>\r
+ </ClInclude>\r
<ClInclude Include="..\src\vm\i8251.h">\r
<Filter>Header Files\VM Common Header Files</Filter>\r
</ClInclude>\r
<ClInclude Include="..\src\vm\i8255.h">\r
<Filter>Header Files\VM Common Header Files</Filter>\r
</ClInclude>\r
+ <ClInclude Include="..\src\vm\i8259.h">\r
+ <Filter>Header Files\VM Common Header Files</Filter>\r
+ </ClInclude>\r
+ <ClInclude Include="..\src\vm\i86.h">\r
+ <Filter>Header Files\VM Common Header Files</Filter>\r
+ </ClInclude>\r
+ <ClInclude Include="..\src\vm\io.h">\r
+ <Filter>Header Files\VM Common Header Files</Filter>\r
+ </ClInclude>\r
+ <ClInclude Include="..\src\vm\memory.h">\r
+ <Filter>Header Files\VM Common Header Files</Filter>\r
+ </ClInclude>\r
<ClInclude Include="..\src\vm\noise.h">\r
<Filter>Header Files\VM Common Header Files</Filter>\r
</ClInclude>\r
<ClInclude Include="..\src\vm\upd765a.h">\r
<Filter>Header Files\VM Common Header Files</Filter>\r
</ClInclude>\r
+ <ClInclude Include="..\src\vm\v30_dasm.h">\r
+ <Filter>Header Files\VM Common Header Files</Filter>\r
+ </ClInclude>\r
<ClInclude Include="..\src\vm\vm.h">\r
<Filter>Header Files\VM Common Header Files</Filter>\r
</ClInclude>\r