From cee8fa0ae40287561be6dda9677aeeb76be1af1e Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Mon, 22 Sep 2025 00:22:32 -0400 Subject: [PATCH] Allow PCjr FDC to be disabled --- src/include/86box/m_pcjr.h | 3 +++ src/machine/m_pcjr.c | 10 +++++++++- src/machine/machine_table.c | 4 ++-- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/include/86box/m_pcjr.h b/src/include/86box/m_pcjr.h index 6fb0ee2ed..9b4a7cbaf 100644 --- a/src/include/86box/m_pcjr.h +++ b/src/include/86box/m_pcjr.h @@ -66,6 +66,9 @@ typedef struct pcjr_s { int serial_pos; uint8_t pa; uint8_t pb; + + uint8_t option_fdc; + pc_timer_t send_delay_timer; } pcjr_t; diff --git a/src/machine/m_pcjr.c b/src/machine/m_pcjr.c index 519933b23..c1b7aba9b 100644 --- a/src/machine/m_pcjr.c +++ b/src/machine/m_pcjr.c @@ -41,6 +41,7 @@ #include <86box/rom.h> #include <86box/fdd.h> #include <86box/fdc.h> +#include <86box/fdc_ext.h> #include <86box/sound.h> #include <86box/snd_speaker.h> #include <86box/snd_sn76489.h> @@ -653,6 +654,8 @@ kbd_read(uint16_t port, void *priv) case 0x62: ret = (pcjr->latched ? 1 : 0); ret |= 0x02; /* Modem card not installed */ + if (!pcjr->option_fdc) + ret |= 0x04; /* Diskette card not installed */ if (mem_size < 128) ret |= 0x08; /* 64k expansion card not installed */ if ((pcjr->pb & 0x08) || (cassette == NULL)) @@ -846,6 +849,8 @@ machine_pcjr_init(UNUSED(const machine_t *model)) pcjr = calloc(1, sizeof(pcjr_t)); + pcjr->option_fdc = 0; + is_pcjr = 1; pic_init_pcjr(); @@ -877,7 +882,10 @@ machine_pcjr_init(UNUSED(const machine_t *model)) nmi_mask = 0x80; - device_add(&fdc_pcjr_device); + if (fdc_current[0] == FDC_INTERNAL) { + device_add(&fdc_pcjr_device); + pcjr->option_fdc = 1; + } device_add(&ns8250_pcjr_device); /* So that serial_standalone_init() won't do anything. */ diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 6bb120b03..8816ce42c 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -300,7 +300,7 @@ const machine_t machines[] = { .max_multi = 0 }, .bus_flags = MACHINE_PCJR, - .flags = MACHINE_VIDEO_FIXED | MACHINE_KEYBOARD | MACHINE_CARTRIDGE, + .flags = MACHINE_VIDEO_FIXED | MACHINE_KEYBOARD | MACHINE_CARTRIDGE | MACHINE_FDC, .ram = { .min = 64, .max = 640, @@ -316,7 +316,7 @@ const machine_t machines[] = { .gpio_acpi = 0xffffffff, .device = NULL, .kbd_device = NULL, - .fdc_device = NULL, + .fdc_device = &fdc_pcjr_device, .sio_device = NULL, .vid_device = &pcjr_device, .snd_device = NULL,