#define SIG_DUMMYDEVICE_BIT1 1
#define SIG_DUMMYDEVICE_BIT2 2
#endif
-
+#if defined(USE_SOUND_FILES)
+#include "../wav_sounder.h"
+#endif
#include "./fm7_mainio.h"
#include "./fm7_mainmem.h"
#include "./fm7_display.h"
#else
led_terminate = new DEVICE(this, emu);
#endif
-
+#if defined(USE_SOUND_FILES)
+ fdd_seek = new WAV_SOUNDER(this, emu);
+ cmt_relay_on = new WAV_SOUNDER(this, emu);
+ cmt_relay_off = new WAV_SOUNDER(this, emu);
+#endif
#if defined(_USE_QT)
event->set_device_name(_T("EVENT"));
dummy->set_device_name(_T("1st Dummy"));
event->set_context_sound(psg);
# endif
event->set_context_sound(drec);
+#if defined(USE_SOUND_FILES)
+ fdd_seek->load_data(_T("FDDSEEK.WAV"));
+ event->set_context_sound(fdd_seek);
+
+ cmt_relay_on->load_data(_T("RELAY_ON.WAV"));
+ cmt_relay_off->load_data(_T("RELAYOFF.WAV"));
+ event->set_context_sound(cmt_relay_on);
+ event->set_context_sound(cmt_relay_off);
+#endif
# if defined(_FM77AV_VARIANTS)
event->set_context_sound(keyboard_beep);
# endif
fdc->set_context_irq(mainio, FM7_MAINIO_FDC_IRQ, 0x1);
fdc->set_context_drq(mainio, FM7_MAINIO_FDC_DRQ, 0x1);
mainio->set_context_fdc(fdc);
+#if defined(USE_SOUND_FILES)
+ fdc->set_context_seek(fdd_seek);
+ mainio->set_context_relay_on(cmt_relay_on);
+ mainio->set_context_relay_off(cmt_relay_off);
+#endif
#if defined(_FM8) || (_FM7) || (_FMNEW7)
}
#endif
else if(ch-- == 0) {
keyboard_beep->set_volume(0, decibel_l, decibel_r);
}
-#endif
+#endif
+#if defined(USE_SOUND_FILES)
+ else if(ch-- == 0) {
+ fdd_seek->set_volume(0, decibel_l, decibel_r);
+ } else if(ch-- == 0) {
+ cmt_relay_on->set_volume(0, decibel_l, decibel_r);
+ cmt_relay_off->set_volume(0, decibel_l, decibel_r);
+ }
+#endif
}
#endif
#define USE_DEBUGGER
#define DATAREC_SOUND
#define USE_DIG_RESOLUTION
-
+#if defined(_USE_QT)
+#define USE_SOUND_FILES 3
+#endif
#if defined(_FM8)
#define DEVICE_NAME "FUJITSU FM-8"
#define CONFIG_NAME "fm8"
#define SOUND_DEVICE_TYPE_DEFAULT 1
#endif
-#if defined(_FM8)
-#define USE_SOUND_VOLUME 3
+#if defined(USE_SOUND_FILES)
+# if defined(_FM8)
+#define USE_SOUND_VOLUME 5
+# else
+#define USE_SOUND_VOLUME 11
+# endif
#else
+# if defined(_FM8)
+#define USE_SOUND_VOLUME 3
+# else
#define USE_SOUND_VOLUME 9
+# endif
#endif
+
#define IGNORE_DISK_CRC_DEFAULT true
// device informations for virtual machine
_T("PSG(Hack)"),
_T("Beep"),
_T("CMT"),
+# if defined(USE_SOUND_FILES)
+ _T("FDD SEEK"), _T("RELAY"),
+# endif
#else
# if !defined(_FM77AV_VARIANTS)
_T("PSG"),
# if defined(_FM77AV_VARIANTS)
_T("Keyboard"),
# endif
+#if defined(USE_SOUND_FILES)
+ _T("FDD SEEK"), _T("RELAY"),
+#endif
#endif
};
#endif
#if WITH_Z80
class Z80;
#endif
-
+#if defined(USE_SOUND_FILES)
+class WAV_SOUNDER;
+#endif
class VM {
protected:
EMU* emu;
#ifdef CAPABLE_KANJI_CLASS2
KANJIROM *kanjiclass2;
#endif
+#if defined(USE_SOUND_FILES)
+ WAV_SOUNDER *fdd_seek;
+ WAV_SOUNDER *cmt_relay_on;
+ WAV_SOUNDER *cmt_relay_off;
+#endif
bool connect_320kfdc;
bool connect_1Mfdc;
public:
#if defined(_FM8)
#include "bubblecasette.h"
#endif
+#if defined(USE_SOUND_FILES)
+#include "../wav_sounder.h"
+#endif
FM7_MAINIO::FM7_MAINIO(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
{
bubble_casette[0] = NULL;
bubble_casette[1] = NULL;
#endif
+#if defined(USE_SOUND_FILES)
+ dev_relay_sound_on = NULL;
+ dev_relay_sound_off = NULL;
+#endif
// FD00
clock_fast = true;
lpt_strobe = false; // bit6
lpt_slctin = false; // bit7
+ drec_flag = 0x00;
// FD01
lpt_outdata = 0x00;
// FD02
irqreq_keyboard = false;
// FD00
drec->write_signal(SIG_DATAREC_MIC, 0x00, 0x01);
- drec->set_remote(false);
+ drec->write_signal(SIG_DATAREC_REMOTE, 0x00, 0x02);
+#if defined(USE_SOUND_FILES)
+ if(drec_flag != 0x00) {
+ if(dev_relay_sound_off != NULL) {
+ dev_relay_sound_off->write_signal(SIG_WAV_SOUNDER_ADD, 0x01, 0x01);
+ }
+ }
+#endif
+ drec_flag = 0x00;
reset_fdc();
reset_sound();
void FM7_MAINIO::set_port_fd00(uint8_t data)
{
drec->write_signal(SIG_DATAREC_MIC, data, 0x01);
- drec->set_remote(((data & 0x02) != 0));
+
+ uint8_t drec_flag_b = data & 0x02;
+ drec->write_signal(SIG_DATAREC_REMOTE, drec_flag_b, 0x02);
+#if defined(USE_SOUND_FILES)
+ if(drec_flag != drec_flag_b) {
+ if(drec_flag_b == 0x02) {
+ if(dev_relay_sound_on != NULL) {
+ dev_relay_sound_on->write_signal(SIG_WAV_SOUNDER_ADD, 0x01, 0x01);
+ }
+ } else {
+ if(dev_relay_sound_off != NULL) {
+ dev_relay_sound_off->write_signal(SIG_WAV_SOUNDER_ADD, 0x01, 0x01);
+ }
+ }
+ }
+#endif
+ drec_flag = drec_flag_b;
+
lpt_slctin = ((data & 0x80) == 0);
lpt_strobe = ((data & 0x40) != 0);
this->write_signals(&printer_strobe_bus, lpt_strobe ? 0xffffffff : 0);
{
}
-#define STATE_VERSION 6
+#define STATE_VERSION 7
void FM7_MAINIO::save_state(FILEIO *state_fio)
{
int ch;
#if defined(_FM77AV_VARIANTS)
state_fio->FputUint8(reg_fd12);
#endif
- }
+ }
+ {
+ state_fio->FputUint8(drec_flag);
+ }
}
bool FM7_MAINIO::load_state(FILEIO *state_fio)
reg_fd12 = state_fio->FgetUint8();
#endif
}
+ {
+ drec_flag = state_fio->FgetUint8();
+ }
if(version != STATE_VERSION) return false;
return true;
}
/* FD00: W */
bool lpt_strobe; // bit6
bool lpt_slctin; // bit7
+ uint8_t drec_flag;
/* FD01: W */
uint8_t lpt_outdata; //
#if defined(_FM8)
BUBBLECASETTE *bubble_casette[2];
#endif
- public:
+#if defined(USE_SOUND_FILES)
+ DEVICE *dev_relay_sound_on;
+ DEVICE *dev_relay_sound_off;
+#endif
+public:
FM7_MAINIO(VM* parent_vm, EMU* parent_emu);
~FM7_MAINIO();
void event_vline(int v, int clock);
void set_context_printer_select(DEVICE *p, int id, uint32_t mask) {
register_output_signal(&printer_select_bus, p, id, mask);
}
+#if defined(USE_SOUND_FILES)
+ void set_context_relay_on(DEVICE *p) {
+ dev_relay_sound_on = p;
+ }
+ void set_context_relay_off(DEVICE *p) {
+ dev_relay_sound_off = p;
+ }
+#endif
#if defined(_FM8)
void set_context_bubble(BUBBLECASETTE *p, int drive) {
if(drive > 2) return;