Add base address for IO ports to easily allow multiple instance of the same device.

This commit is contained in:
Godzil
2022-06-27 17:57:03 +01:00
parent 37e4b219d4
commit e9d7f1aa04
4 changed files with 45 additions and 40 deletions

View File

@@ -30,12 +30,12 @@ static uint8_t IC_IO_read(void *pdata, uint8_t port)
switch(port)
{
case 0xB0: return params->address_base;
case 0xB2: return params->int_enable_mask;
case 0xB4: return params->int_status;
case 0x0: return params->address_base;
case 0x2: return params->int_enable_mask;
case 0x4: return params->int_status;
}
return 0x00;
return 0x90;
}
static void IC_IO_write(void *pdata, uint8_t port, uint8_t value)
@@ -44,8 +44,8 @@ static void IC_IO_write(void *pdata, uint8_t port, uint8_t value)
switch(port)
{
case 0xB0: params->address_base = value; break;
case 0xB2: params->int_enable_mask = value; break;
case 0x0: params->address_base = value; break;
case 0x2: params->int_enable_mask = value; break;
}
}
@@ -57,14 +57,14 @@ static void IC_IO_write_ack(void *pdata, uint8_t port, uint8_t value)
}
static void IC_init(void *params)
static void IC_init(uint8_t baseAddress, void *params)
{
UNUSED_PARAMETER(params);
register_io_hook(0xB0, IC_IO_read, IC_IO_write, &interrupt_controller);
register_io_hook(0xB2, IC_IO_read, IC_IO_write, &interrupt_controller);
register_io_hook(0xB4, IC_IO_read, NULL, &interrupt_controller);
register_io_hook(0xB6, NULL, IC_IO_write_ack, &interrupt_controller);
register_io_hook(baseAddress, 0x0, IC_IO_read, IC_IO_write, &interrupt_controller);
register_io_hook(baseAddress, 0x2, IC_IO_read, IC_IO_write, &interrupt_controller);
register_io_hook(baseAddress, 0x4, IC_IO_read, NULL, &interrupt_controller);
register_io_hook(baseAddress, 0x6, NULL, IC_IO_write_ack, &interrupt_controller);
}
static void IC_reset()
@@ -73,16 +73,11 @@ static void IC_reset()
interrupt_controller.address_base = 0;
}
static void IC_free()
{
}
device_t InterruptController =
{
.init = IC_init,
.reset = IC_reset,
.free = IC_free,
.free = NULL,
.deviceType = DT_INTERRUPT_CONTROLLER,
};