Add PS/2 Model 50 emulation.
This commit also adds basic MCA emulation. This commit also adds emulation of the PS/2 Type 1 DMA controller.
This commit is contained in:
parent
2ad4ebc253
commit
9c1d8e5022
29 changed files with 911 additions and 95 deletions
60
src/mca.c
Normal file
60
src/mca.c
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
#include "ibm.h"
|
||||
#include "io.h"
|
||||
#include "mem.h"
|
||||
|
||||
#include "mca.h"
|
||||
|
||||
void (*mca_card_write[8])(int addr, uint8_t val, void *priv);
|
||||
uint8_t (*mca_card_read[8])(int addr, void *priv);
|
||||
void *mca_priv[8];
|
||||
static int mca_index;
|
||||
static int mca_nr_cards;
|
||||
|
||||
void mca_init(int nr_cards)
|
||||
{
|
||||
int c;
|
||||
|
||||
for (c = 0; c < 8; c++)
|
||||
mca_card_read[c] = mca_card_write[c] = mca_priv[c] = NULL;
|
||||
|
||||
mca_index = 0;
|
||||
mca_nr_cards = nr_cards;
|
||||
}
|
||||
|
||||
void mca_set_index(int index)
|
||||
{
|
||||
mca_index = index;
|
||||
}
|
||||
|
||||
uint8_t mca_read(uint16_t port)
|
||||
{
|
||||
if (mca_index >= mca_nr_cards)
|
||||
return 0xff;
|
||||
if (!mca_card_read[mca_index])
|
||||
return 0xff;
|
||||
return mca_card_read[mca_index](port, mca_priv[mca_index]);
|
||||
}
|
||||
|
||||
void mca_write(uint16_t port, uint8_t val)
|
||||
{
|
||||
if (mca_index >= mca_nr_cards)
|
||||
return;
|
||||
if (mca_card_write[mca_index])
|
||||
mca_card_write[mca_index](port, val, mca_priv[mca_index]);
|
||||
}
|
||||
|
||||
void mca_add(uint8_t (*read)(int addr, void *priv), void (*write)(int addr, uint8_t val, void *priv), void *priv)
|
||||
{
|
||||
int c;
|
||||
|
||||
for (c = 0; c < mca_nr_cards; c++)
|
||||
{
|
||||
if (!mca_card_read[c] && !mca_card_write[c])
|
||||
{
|
||||
mca_card_read[c] = read;
|
||||
mca_card_write[c] = write;
|
||||
mca_priv[c] = priv;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue