Trned the LPT ports into device_t's.

This commit is contained in:
OBattler
2025-08-02 14:51:28 +02:00
parent 43a4bd7903
commit b9e294b781
52 changed files with 723 additions and 524 deletions

View File

@@ -155,7 +155,9 @@ typedef struct amstrad_t {
/* Video stuff. */
amsvid_t *vid;
fdc_t *fdc;
lpt_t *lpt;
} amstrad_t;
uint32_t amstrad_latch;
@@ -2884,8 +2886,10 @@ machine_amstrad_init(const machine_t *model, int type)
nmi_init();
lpt1_remove_ams();
lpt2_remove();
ams->lpt = device_add_inst(&lpt_port_device, 1);
lpt1_remove_ams(ams->lpt);
lpt_set_next_inst(255);
io_sethandler(0x0378, 3,
ams_read, NULL, NULL, ams_write, NULL, NULL, ams);

View File

@@ -55,22 +55,22 @@
#include <86box/plat_unused.h>
static serial_t *cmd_uart;
static lpt_t *cmd_lpt;
static void
cbm_io_write(UNUSED(uint16_t port), uint8_t val, UNUSED(void *priv))
{
lpt1_remove();
lpt2_remove();
lpt_port_remove(cmd_lpt);
switch (val & 3) {
case 1:
lpt1_setup(LPT_MDA_ADDR);
lpt_port_setup(cmd_lpt, LPT_MDA_ADDR);
break;
case 2:
lpt1_setup(LPT1_ADDR);
lpt_port_setup(cmd_lpt, LPT1_ADDR);
break;
case 3:
lpt1_setup(LPT2_ADDR);
lpt_port_setup(cmd_lpt, LPT2_ADDR);
break;
default:
@@ -116,6 +116,10 @@ machine_at_cmdpc_init(const machine_t *model)
device_add(&fdc_at_device);
cmd_uart = device_add(&ns8250_device);
serial_set_next_inst(1);
cmd_lpt = device_add(&lpt_port_device);
lpt_set_next_inst(1);
cbm_io_init();

View File

@@ -82,6 +82,7 @@ typedef struct {
uint8_t ps1_e0_regs[256];
serial_t *uart;
lpt_t *lpt;
} ps1_t;
static void
@@ -135,7 +136,7 @@ ps1_write(uint16_t port, uint8_t val, void *priv)
case 0x0102:
if (!(ps->ps1_94 & 0x80)) {
lpt1_remove();
lpt_port_remove(ps->lpt);
serial_remove(ps->uart);
if (val & 0x04) {
if (val & 0x08)
@@ -146,13 +147,13 @@ ps1_write(uint16_t port, uint8_t val, void *priv)
if (val & 0x10) {
switch ((val >> 5) & 3) {
case 0:
lpt1_setup(LPT_MDA_ADDR);
lpt_port_setup(ps->lpt, LPT_MDA_ADDR);
break;
case 1:
lpt1_setup(LPT1_ADDR);
lpt_port_setup(ps->lpt, LPT1_ADDR);
break;
case 2:
lpt1_setup(LPT2_ADDR);
lpt_port_setup(ps->lpt, LPT2_ADDR);
break;
default:
@@ -314,9 +315,9 @@ ps1_setup(int model)
ps1_read, NULL, NULL, ps1_write, NULL, NULL, ps);
ps->uart = device_add_inst(&ns16450_device, 1);
lpt1_remove();
lpt1_setup(LPT_MDA_ADDR);
ps->lpt = device_add_inst(&lpt_port_device, 1);
lpt_port_remove(ps->lpt);
lpt_port_setup(ps->lpt, LPT_MDA_ADDR);
mem_remap_top(384);
@@ -345,7 +346,7 @@ ps1_setup(int model)
0xfc0000, 0x40000, 0x3ffff, 0, MEM_MAPPING_EXTERNAL);
}
lpt2_remove();
lpt_set_next_inst(255);
device_add(&ps1snd_device);

View File

@@ -39,6 +39,7 @@
#include <86box/nmi.h>
#include <86box/mem.h>
#include <86box/device.h>
#include <86box/lpt.h>
#include <86box/nvr.h>
#include <86box/keyboard.h>
#include <86box/mouse.h>

View File

@@ -129,7 +129,8 @@ machine_zenith_init(const machine_t *model)
int
machine_xt_z184_init(const machine_t *model)
{
int ret;
lpt_t *lpt = NULL;
int ret;
ret = bios_load_linear("roms/machines/zdsupers/z184m v3.1d.10d",
0x000f8000, 32768, 0);
@@ -142,9 +143,11 @@ machine_xt_z184_init(const machine_t *model)
if (fdc_current[0] == FDC_INTERNAL)
device_add(&fdc_xt_device);
lpt1_remove(); /* only one parallel port */
lpt2_remove();
lpt1_setup(LPT2_ADDR);
lpt = device_add_inst(&lpt_port_device, 1);
lpt_port_remove(lpt);
lpt_port_setup(lpt, LPT2_ADDR);
lpt_set_next_inst(255);
device_add(&ns8250_device);
/* So that serial_standalone_init() won't do anything. */
serial_set_next_inst(SERIAL_MAX - 1);
@@ -183,7 +186,8 @@ machine_xt_z151_init(const machine_t *model)
int
machine_xt_z159_init(const machine_t *model)
{
int ret;
lpt_t *lpt = NULL;
int ret;
ret = bios_load_linear("roms/machines/zdsz159/z159m v2.9e.10d",
0x000f8000, 32768, 0);
@@ -197,9 +201,10 @@ machine_xt_z159_init(const machine_t *model)
device_add(&fdc_xt_tandy_device);
/* parallel port is on the memory board */
lpt1_remove(); /* only one parallel port */
lpt2_remove();
lpt1_setup(LPT2_ADDR);
lpt = device_add_inst(&lpt_port_device, 1);
lpt_port_remove(lpt);
lpt_port_setup(lpt, LPT2_ADDR);
lpt_set_next_inst(255);
return ret;
}

View File

@@ -98,8 +98,6 @@ machine_init_ex(int m)
mem_reset();
smbase = is_am486dxl ? 0x00060000 : 0x00030000;
lpt_init();
if (cassette_enable)
device_add(&cassette_device);