This commit is contained in:
OBattler
2024-08-07 05:08:49 +02:00
7 changed files with 28 additions and 24 deletions

View File

@@ -890,7 +890,7 @@ extern int machine_ps2_model_70_type4_init(const machine_t *);
/* m_tandy.c */
extern int tandy1k_eeprom_read(void);
extern int machine_tandy_init(const machine_t *);
extern int machine_tandy1000sx_init(const machine_t *);
extern int machine_tandy1000hx_init(const machine_t *);
extern int machine_tandy1000sl2_init(const machine_t *);

View File

@@ -19,6 +19,8 @@
#ifndef EMU_PIT_H
#define EMU_PIT_H
#define NUM_COUNTERS 3
typedef struct ctr_t {
uint8_t m;
uint8_t ctrl;
@@ -68,7 +70,7 @@ typedef struct PIT {
int clock;
pc_timer_t callback_timer;
ctr_t counters[3];
ctr_t counters[NUM_COUNTERS];
uint8_t ctrl;

View File

@@ -68,7 +68,7 @@ typedef struct ctrf_t {
typedef struct pitf_t {
int flags;
ctrf_t counters[3];
ctrf_t counters[NUM_COUNTERS];
uint8_t ctrl;

View File

@@ -52,6 +52,7 @@ enum {
enum {
TYPE_TANDY = 0,
TYPE_TANDY1000SX,
TYPE_TANDY1000HX,
TYPE_TANDY1000SL2
};
@@ -1756,6 +1757,7 @@ machine_tandy1k_init(const machine_t *model, int type)
switch (type) {
case TYPE_TANDY:
case TYPE_TANDY1000SX:
keyboard_set_table(scancode_tandy);
io_sethandler(0x00a0, 1,
tandy_read, NULL, NULL, tandy_write, NULL, NULL, dev);
@@ -1802,7 +1804,7 @@ tandy1k_eeprom_read(void)
}
int
machine_tandy_init(const machine_t *model)
machine_tandy1000sx_init(const machine_t *model)
{
int ret;
@@ -1812,7 +1814,7 @@ machine_tandy_init(const machine_t *model)
if (bios_only || !ret)
return ret;
machine_tandy1k_init(model, TYPE_TANDY);
machine_tandy1k_init(model, TYPE_TANDY1000SX);
return ret;
}

View File

@@ -1503,7 +1503,7 @@ const machine_t machines[] = {
.internal_name = "tandy",
.type = MACHINE_TYPE_8088,
.chipset = MACHINE_CHIPSET_PROPRIETARY,
.init = machine_tandy_init,
.init = machine_tandy1000sx_init,
.p1_handler = NULL,
.gpio_handler = NULL,
.available_flag = MACHINE_AVAILABLE,
@@ -1521,7 +1521,7 @@ const machine_t machines[] = {
.bus_flags = MACHINE_PC,
.flags = MACHINE_VIDEO_FIXED,
.ram = {
.min = 128,
.min = 384,
.max = 640,
.step = 128
},
@@ -1560,7 +1560,7 @@ const machine_t machines[] = {
.bus_flags = MACHINE_PC,
.flags = MACHINE_VIDEO_FIXED,
.ram = {
.min = 384,
.min = 256,
.max = 640,
.step = 128
},

View File

@@ -526,7 +526,7 @@ pit_timer_over(void *priv)
dev->clock ^= 1;
for (uint8_t i = 0; i < 3; i++)
for (uint8_t i = 0; i < NUM_COUNTERS; i++)
pit_ctr_set_clock_common(&dev->counters[i], dev->clock, dev);
timer_advance_u64(&dev->callback_timer, dev->pit_const >> 1ULL);
@@ -874,7 +874,7 @@ pit_device_reset(pit_t *dev)
{
dev->clock = 0;
for (uint8_t i = 0; i < 3; i++)
for (uint8_t i = 0; i < NUM_COUNTERS; i++)
ctr_reset(&dev->counters[i]);
}
@@ -885,7 +885,7 @@ pit_reset(pit_t *dev)
dev->clock = 0;
for (uint8_t i = 0; i < 3; i++)
for (uint8_t i = 0; i < NUM_COUNTERS; i++)
ctr_reset(&dev->counters[i]);
/* Disable speaker gate. */

View File

@@ -47,22 +47,22 @@
#define PIT_CUSTOM_CLOCK 64 /* The PIT uses custom clock inputs provided by another provider. */
#define PIT_SECONDARY 128 /* The PIT is secondary (ports 0048-004B). */
#ifdef ENABLE_PIT_LOG
int pit_do_log = ENABLE_PIT_LOG;
#ifdef ENABLE_PIT_FAST_LOG
int pit_fast_do_log = ENABLE_PIT_FAST_LOG;
static void
pit_log(const char *fmt, ...)
pit_fast_log(const char *fmt, ...)
{
va_list ap;
if (pit_do_log) {
if (pit_fast_do_log) {
va_start(ap, fmt);
pclog_ex(fmt, ap);
va_end(ap);
}
}
#else
# define pit_log(fmt, ...)
# define pit_fast_log(fmt, ...)
#endif
static void
@@ -420,7 +420,7 @@ pitf_write(uint16_t addr, uint8_t val, void *priv)
int t = (addr & 3);
ctrf_t *ctr;
pit_log("[%04X:%08X] pit_write(%04X, %02X, %08X)\n", CS, cpu_state.pc, addr, val, priv);
pit_fast_log("[%04X:%08X] pit_write(%04X, %02X, %08X)\n", CS, cpu_state.pc, addr, val, priv);
cycles -= ISA_CYCLES(8);
@@ -438,7 +438,7 @@ pitf_write(uint16_t addr, uint8_t val, void *priv)
pitf_ctr_latch_count(&dev->counters[1]);
if (val & 8)
pitf_ctr_latch_count(&dev->counters[2]);
pit_log("PIT %i: Initiated readback command\n", t);
pit_fast_log("PIT %i: Initiated readback command\n", t);
}
if (!(val & 0x10)) {
if (val & 2)
@@ -456,7 +456,7 @@ pitf_write(uint16_t addr, uint8_t val, void *priv)
if (!(dev->ctrl & 0x30)) {
pitf_ctr_latch_count(ctr);
dev->ctrl |= 0x30;
pit_log("PIT %i: Initiated latched read, %i bytes latched\n",
pit_fast_log("PIT %i: Initiated latched read, %i bytes latched\n",
t, ctr->latched);
} else {
ctr->ctrl = val;
@@ -476,7 +476,7 @@ pitf_write(uint16_t addr, uint8_t val, void *priv)
pitf_ctr_set_out(ctr, 1, dev);
ctr->disabled = 1;
pit_log("PIT %i: M = %i, RM/WM = %i, State = %i, Out = %i\n", t, ctr->m, ctr->rm, ctr->state, ctr->out);
pit_fast_log("PIT %i: M = %i, RM/WM = %i, Out = %i\n", t, ctr->m, ctr->rm, ctr->out);
}
ctr->thit = 0;
}
@@ -619,7 +619,7 @@ pitf_read(uint16_t addr, void *priv)
break;
}
pit_log("[%04X:%08X] pit_read(%04X, %08X) = %02X\n", CS, cpu_state.pc, addr, priv, ret);
pit_fast_log("[%04X:%08X] pit_read(%04X, %08X) = %02X\n", CS, cpu_state.pc, addr, priv, ret);
return ret;
}
@@ -670,7 +670,7 @@ pitf_reset(pitf_t *dev)
{
memset(dev, 0, sizeof(pitf_t));
for (uint8_t i = 0; i < 3; i++)
for (uint8_t i = 0; i < NUM_COUNTERS; i++)
ctr_reset(&dev->counters[i]);
/* Disable speaker gate. */
@@ -683,7 +683,7 @@ pitf_set_pit_const(void *data, uint64_t pit_const)
pitf_t *pit = (pitf_t *) data;
ctrf_t *ctr;
for (uint8_t i = 0; i < 3; i++) {
for (uint8_t i = 0; i < NUM_COUNTERS; i++) {
ctr = &pit->counters[i];
ctr->pit_const = pit_const;
}
@@ -728,7 +728,7 @@ pitf_init(const device_t *info)
dev->flags = info->local;
if (!(dev->flags & PIT_PS2) && !(dev->flags & PIT_CUSTOM_CLOCK)) {
for (int i = 0; i < 3; i++) {
for (int i = 0; i < NUM_COUNTERS; i++) {
ctrf_t *ctr = &dev->counters[i];
ctr->priv = dev;
timer_add(&ctr->timer, pitf_timer_over, (void *) ctr, 0);