Set "motor on" flag by fdc's rdy signal.
Before reading this flag from FDC by accessing MAINIO $FD1D.
fdc_drvsel = 0x7c | fdc->read_signal(SIG_MB8877_DRIVEREG);
irqreg_fdc = 0x00; //0b00000000;
}
- //fdc_motor = (fdc->read_signal(SIG_MB8877_MOTOR) != 0);
- fdc_motor = false;
#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
defined(_FM77AV20) || defined(_FM77AV20EX)
irqstat_fdc = false;
irqmask_mfd = true;
if(connect_fdc) {
- set_fdc_motor(fdc_motor);
+ set_fdc_motor(false);
}
}
} else {
d = fdc_drvsel & 0x03;
}
-#if 1
+
DISK *disk = fdc->get_disk_handler(d);
if(disk->media_type != MEDIA_TYPE_2D){
if(config.special_debug_fdc) out_debug_log(_T("NOTE: MEDIA TYPE IS 2DD"));
if(config.special_debug_fdc) out_debug_log(_T("NOTE: MEDIA TYPE IS 2D"));
//if(disk->drive_type != DRIVE_TYPE_2D) val >>= 1;
}
-#endif
+
#endif
fdc->write_io8(1, val);
//#ifdef _FM7_FDC_DEBUG
bool bv;
if(!connect_fdc) return 0xff;
- fdc_motor = (fdc->read_signal(SIG_MB8877_MOTOR) != 0) ? true : false;
//fdc_drvsel = fdc->read_signal(SIG_MB8877_READ_DRIVE_REG);
drv = fdc_drvsel & 0x03;
val = val | (fdc_drvsel & 0x03);
if((fdc_drvsel & 0x40) != 0) {
drv = fdc_drive_table[drv & 0x03];
}
-#endif
- fdc_motor = fdc_motor & (fdc->get_drive_type(drv) != DRIVE_TYPE_UNK);
+#endif
+ // Note: OK? 2022-12-15 K.O
if(fdc_motor) val |= 0x80;
//#ifdef _FM7_FDC_DEBUG
if(config.special_debug_fdc) out_debug_log(_T("FDC: Get motor/Drive: $%02x"), val);
void FM7_MAINIO::set_fdc_fd1d(uint8_t val)
{
- bool backup_motor = fdc_motor;
bool f;
+ uint8_t drv = val & 0x03;
if(!connect_fdc) return;
if((val & 0x80) != 0) {
f = true;
} else {
f = false;
}
-
+ fdc_drvsel = val;
#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
defined(_FM77AV20) || defined(_FM77AV20EX)
if((val & 0x40) == 0) {
- fdc->write_signal(SIG_MB8877_DRIVEREG, fdc_drive_table[val & 0x03], 0x03);
- } else {
- fdc->write_signal(SIG_MB8877_DRIVEREG, val, 0x03);
+ drv = fdc_drive_table[drv];
}
- fdc_drvsel = val;
-#else
- fdc->write_signal(SIG_MB8877_DRIVEREG, val, 0x03);
- fdc_drvsel = val;
-#endif
-
- if(f != backup_motor) {
+#endif
+ bool mdrv_flag = fdc->is_drive_ready(drv);
+ fdc->write_signal(SIG_MB8877_DRIVEREG, drv, 0x03);
+
+ if(f != mdrv_flag) {
if(event_fdc_motor >= 0) cancel_event(this, event_fdc_motor);
if(f) {
register_event(this, EVENT_FD_MOTOR_ON, 1000.0 * 300.0, false, &event_fdc_motor); // Motor ON After 0.3Sec.
{
if(!connect_fdc) return;
uint8_t val;
- fdc->write_signal(SIG_MB8877_MOTOR, flag ? 0x01 : 0x00, 0x01);
- val = fdc_drvsel & 0x03;
-#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || \
- defined(_FM77AV20) || defined(_FM77AV20EX)
- if((fdc_drvsel & 0x40) == 0) {
- val = fdc_drive_table[val & 0x03];
- }
-#endif
- fdc_motor = (fdc->read_signal(SIG_MB8877_MOTOR) != 0);
- fdc_motor = fdc_motor & (fdc->get_drive_type(val) != DRIVE_TYPE_UNK);
+ // OK? 2022-12-15 K.O
+ fdc->write_signal(SIG_MB8877_MOTOR, flag ? 0xffffffff : 0x00, 0xffffffff);
+
if(config.special_debug_fdc) out_debug_log(_T("FDC: MOTOR=%d VAL=$%02x"), flag, val);
}
fdc_2HD_drvsel = 0x7c | (fdc_2HD->read_signal(SIG_MB8877_DRIVEREG) & 0x03);
irqreg_fdc_2HD = 0x00; //0b00000000;
//fdc_2HD_motor = (fdc_2HD->read_signal(SIG_MB8877_MOTOR) != 0);
- fdc_2HD_motor = false;
+ //fdc_2HD_motor = false;
if(event_fdc_motor_2HD >= 0) cancel_event(this, event_fdc_motor_2HD);
event_fdc_motor_2HD = -1;
//irqstat_2HD_fdc = false;
//irqmask_2HD_mfd = true;
if(connect_fdc_2HD) {
- set_fdc_motor_2HD(fdc_2HD_motor);
+ set_fdc_motor_2HD(false);
}
#endif
}
#if defined(HAS_2HD)
uint8_t val = 0x7c; //0b01111100;
if(!(connect_fdc_2HD) || (fdc_2HD == NULL)) return 0xff;
- fdc_2HD_motor = (fdc_2HD->read_signal(SIG_MB8877_MOTOR) != 0) ? true : false;
- fdc_2HD_motor = fdc_2HD_motor & (fdc_2HD->get_drive_type(fdc_2HD_drvsel & 3) != DRIVE_TYPE_UNK);
+ // 20221215 K.O OK?
if(fdc_2HD_motor) val |= 0x80;
val = val | (fdc_2HD_drvsel & 0x03);
// OK?
void FM7_MAINIO::set_fdc_fd1d_2HD(uint8_t val)
{
#if defined(HAS_2HD)
- bool backup_motor = fdc_2HD_motor;
bool f;
if(!(connect_fdc_2HD) || (fdc_2HD == NULL)) return;
if((val & 0x80) != 0) {
} else {
f = false;
}
-
- fdc_2HD->write_signal(SIG_MB8877_DRIVEREG, val, 0x03);
+ drv = val & 0x03;
+ bool mdrv_flag = fdc_2HD->is_drive_ready(drv);
+ fdc_2HD->write_signal(SIG_MB8877_DRIVEREG, drv, 0x03);
fdc_2HD_drvsel = val;
- if(f != backup_motor) {
+ if(f != mdrv_flag) {
if(event_fdc_motor_2HD >= 0) cancel_event(this, event_fdc_motor_2HD);
// OK?
if(f) {
{
#if defined(HAS_2HD)
if(!(connect_fdc_2HD) || (fdc_2HD == NULL)) return;
- fdc_2HD->write_signal(SIG_MB8877_MOTOR, flag ? 0x01 : 0x00, 0x01);
- fdc_2HD_motor = (fdc_2HD->read_signal(SIG_MB8877_MOTOR) != 0);
- fdc_2HD_motor = fdc_2HD_motor & (fdc_2HD->get_drive_type(fdc_2HD_drvsel & 3) != DRIVE_TYPE_UNK);
+ // OK? 20221215 K.O
+ fdc_2HD->write_signal(SIG_MB8877_MOTOR, flag ? 0xffffffff : 0x00, 0xffffffff);
#endif
}
mainmem = new FM7_MAINMEM(this, emu);
display = new DISPLAY(this, emu);
-
# if defined(_FM77AV20) || defined(_FM77AV40) || defined(_FM77AV20EX) || defined(_FM77AV40EX) || defined(_FM77AV40SX)
g_rs232c_dtr = new AND(this, emu);
g_rs232c_dtr->set_mask(SIG_AND_BIT_0);
//FDC
fdc->set_context_irq(mainio, FM7_MAINIO_FDC_IRQ, 0x1);
fdc->set_context_drq(mainio, FM7_MAINIO_FDC_DRQ, 0x1);
+ fdc->set_context_rdy(mainio, SIG_FM7_MAINIO_FDC_MOTOR, 0xffffffff); // OK?
mainio->set_context_fdc(fdc);
}
#if defined(_FM8) || (_FM7) || (_FMNEW7)
//FDC
fdc_2HD->set_context_irq(mainio, FM7_MAINIO_FDC_IRQ_2HD, 0x1);
fdc_2HD->set_context_drq(mainio, FM7_MAINIO_FDC_DRQ_2HD, 0x1);
+ fdc_2HD->set_context_rdy(mainio, SIG_FM7_MAINIO_FDC_MOTOR_2HD, 0xffffffff);
mainio->set_context_fdc_2HD(fdc_2HD);
}
#endif
#define USE_PRINTER_TYPE 4
#define USE_AY_3_8910_AS_PSG
-#define INDEPENDENT_CAPS_KANA_LED
+//#define INDEPENDENT_CAPS_KANA_LED
#define USE_KEY_LOCKED
#define USE_AUTO_KEY 5
#define USE_AUTO_KEY_RELEASE 6
_T("Button #2(2nd)"),
};
#endif
+#ifdef USE_LED_DEVICE
+static const _TCHAR *led_device_caption[] = {
+ _T("INS:"),
+ _T("KANA:"),
+ _T("CAP:"),
+};
+#endif
/*
* NOTE:
FM7_MAINIO_FDC_DRQ_2HD,
FM7_MAINIO_FDC_IRQ_2HD,
+ SIG_FM7_MAINIO_FDC_MOTOR,
+ SIG_FM7_MAINIO_FDC_MOTOR_2HD,
};
// SUB
enum {
#if defined(HAS_2HD)
drqstat_fdc_2hd = false;
irqstat_fdc_2hd = false;
+
#endif
// FD05
extdet_neg = false;
event_beep_oneshot = -1;
event_timerirq = -1;
event_fdc_motor = -1;
+ fdc_motor = false;
lpt_type = config.printer_type;
fdc_cmdreg = 0x00;
#if defined(HAS_2HD)
event_fdc_motor_2HD = -1;
+ fdc_2HD_motor = false;
+
#endif
#if defined(_FM77_VARIANTS) || defined(_FM77AV_VARIANTS)
boot_ram = false;
// FD17
intstat_opn = false;
intstat_mouse = false;
-
+#if defined(HAS_2HD)
+ reset_fdc_2HD();
+#endif
do_irq();
//#if !defined(_FM8)
case FM7_MAINIO_FDC_IRQ:
set_irq_mfd(val_b);
break;
+ case SIG_FM7_MAINIO_FDC_MOTOR:
+ fdc_motor = ((data & mask) != 0) ? true : false;
+ break;
#if defined(HAS_2HD)
case FM7_MAINIO_FDC_DRQ_2HD:
set_drq_mfd_2HD(val_b);
case FM7_MAINIO_FDC_IRQ_2HD:
set_irq_mfd_2HD(val_b);
break;
+ case SIG_FM7_MAINIO_FDC_MOTOR_2HD:
+ fdc_2HD_motor = ((data & mask) != 0) ? true : false;
+ break;
#endif
#if defined(HAS_DMA)
case FM7_MAINIO_DMA_INT: