Headland: Add some basic logging

This commit is contained in:
win2kgamer
2026-02-09 19:40:56 -06:00
parent e6f73ce2b1
commit ba5e89a996

View File

@@ -18,11 +18,17 @@
* Copyright 2017-2019 Miran Grca.
* Copyright 2017-2019 GreatPsycho.
*/
#ifdef ENABLE_HEADLAND_LOG
#include <stdarg.h>
#endif
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <wchar.h>
#ifdef ENABLE_HEADLAND_LOG
#define HAVE_STDARG_H
#endif
#include <86box/86box.h>
#include "cpu.h"
#include "x86.h"
@@ -35,6 +41,24 @@
#include <86box/plat_unused.h>
#include <86box/port_92.h>
#include <86box/chipset.h>
#include <86box/log.h>
#ifdef ENABLE_HEADLAND_LOG
int headland_do_log = ENABLE_HEADLAND_LOG;
static void
headland_log(void *priv, const char *fmt, ...)
{
if (headland_do_log) {
va_list ap;
va_start(ap, fmt);
log_out(priv, fmt, ap);
va_end(ap);
}
}
#else
# define headland_log(fmt, ...)
#endif
enum {
HEADLAND_GC103 = 0x00,
@@ -82,6 +106,8 @@ typedef struct headland_t {
mem_mapping_t high_mapping;
mem_mapping_t shadow_mapping[2];
mem_mapping_t upper_mapping[24];
void * log; /* New logging system */
} headland_t;
/* TODO - Headland chipset's memory address mapping emulation isn't fully implemented yet,
@@ -125,6 +151,8 @@ get_addr(headland_t *dev, uint32_t addr, headland_mr_t *mr)
other_shift = (dev->cr[0] & 0x80) ? 21 : 19;
}
headland_log(dev->log, "Headland shift values: shift = %i, other_shift = %i\n", shift, other_shift);
/* Bank size = 1 << (bank shift + 2) . */
bank_shift[0] = bank_shift[1] = shift;
@@ -248,6 +276,7 @@ memmap_state_update(headland_t *dev)
memmap_state_default(dev, ht_romcs);
headland_log(dev->log, "Headland 384K Remap %sabled\n", ht_cr0 & 0x04 ? "Dis" : "En");
if (mem_size > 640) {
if (ht_cr0 & 0x04) {
mem_mapping_set_addr(&dev->mid_mapping, 0xA0000, 0x40000);
@@ -273,6 +302,7 @@ memmap_state_update(headland_t *dev)
}
}
headland_log(dev->log, "Headland shadow RAM val = %02X\n", ht_cr0 & 0x18);
switch (ht_cr0 & 0x18) {
case 0x18:
if ((mem_size << 10) > 0xe0000) {
@@ -331,6 +361,8 @@ hl_write(uint16_t addr, uint8_t val, void *priv)
{
headland_t *dev = (headland_t *) priv;
headland_log(dev->log, "[%04X:%08X] Headland: [W] addr = %04X, val = %02X\n", CS, cpu_state.pc, addr, val);
switch (addr) {
case 0x01ec:
dev->ems_mr[dev->ems_mar & 0x3f].mr = val | 0xff00;
@@ -401,6 +433,8 @@ hl_writew(uint16_t addr, uint16_t val, void *priv)
{
headland_t *dev = (headland_t *) priv;
headland_log(dev->log, "[%04X:%08X] Headland: [W] addr = %04X, val = %04X\n", CS, cpu_state.pc, addr, val);
switch (addr) {
case 0x01ec:
dev->ems_mr[dev->ems_mar & 0x3f].mr = val;
@@ -470,6 +504,8 @@ hl_read(uint16_t addr, void *priv)
break;
}
headland_log(dev->log, "[%04X:%08X] Headland [R] addr = %04X, val = %02X\n", CS, cpu_state.pc, addr, ret);
return ret;
}
@@ -490,6 +526,8 @@ hl_readw(uint16_t addr, void *priv)
break;
}
headland_log(dev->log, "[%04X:%08X] Headland [R] addr = %04X, val = %04X\n", CS, cpu_state.pc, addr, ret);
return ret;
}
@@ -584,6 +622,11 @@ headland_close(void *priv)
{
headland_t *dev = (headland_t *) priv;
if (dev->log != NULL) {
log_close(dev->log);
dev->log = NULL;
}
free(dev);
}
@@ -621,6 +664,8 @@ headland_init(const device_t *info)
dev->ems_mr[i].headland = dev;
}
dev->log = log_open("Headland");
/* Turn off mem.c mappings. */
mem_mapping_disable(&ram_low_mapping);
mem_mapping_disable(&ram_mid_mapping);