summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Aaron Giles <aaron@aarongiles.com>2008-12-14 23:47:30 +0000
committer Aaron Giles <aaron@aarongiles.com>2008-12-14 23:47:30 +0000
commit60b43c1d69f0f0f4f86796eb1d7c8a20d40e51ca (patch)
tree1dc5e9b43927f119f404c76262ee152d7ebfed0d /src
parent04fbf4f825ba5b1cc58394319278fd645ebbae61 (diff)
Removed hack for setting mcs51 serial callbacks. Updated micro3d to use
new functions. Fixes regression.
Diffstat (limited to 'src')
-rw-r--r--src/emu/cpu/mcs51/mcs51.c32
-rw-r--r--src/emu/cpu/mcs51/mcs51.h7
-rw-r--r--src/mame/drivers/micro3d.c12
3 files changed, 21 insertions, 30 deletions
diff --git a/src/emu/cpu/mcs51/mcs51.c b/src/emu/cpu/mcs51/mcs51.c
index 7f9bce22bd2..f1d37c214ce 100644
--- a/src/emu/cpu/mcs51/mcs51.c
+++ b/src/emu/cpu/mcs51/mcs51.c
@@ -290,8 +290,8 @@ struct _mcs51_state_t
/* Serial Port TX/RX Callbacks */
// TODO: Move to special port r/w
- void (*serial_tx_callback)(int data); //Call back funciton when sending data out of serial port
- int (*serial_rx_callback)(void); //Call back function to retrieve data when receiving serial port data
+ mcs51_serial_tx_func serial_tx_callback; //Call back funciton when sending data out of serial port
+ mcs51_serial_rx_func serial_rx_callback; //Call back function to retrieve data when receiving serial port data
/* DS5002FP */
struct {
@@ -632,13 +632,6 @@ struct _mcs51_state_t
#define CLEAR_CURRENT_IRQ() clear_current_irq(mcs51_state)
/***************************************************************************
- GLOBAL VARIABLES
-***************************************************************************/
-
-static void (*hold_serial_tx_callback)(int data);
-static int (*hold_serial_rx_callback)(void);
-
-/***************************************************************************
FUNCTION PROTOTYPES
***************************************************************************/
@@ -910,7 +903,7 @@ INLINE void transmit_receive(mcs51_state_t *mcs51_state, int source)
if(mcs51_state->uart.bits_to_send == 0) {
//Call the callback function
if(mcs51_state->serial_tx_callback)
- mcs51_state->serial_tx_callback(mcs51_state->uart.data_out);
+ mcs51_state->serial_tx_callback(mcs51_state->device, mcs51_state->uart.data_out);
//Set Interrupt Flag
SET_TI(1);
}
@@ -929,7 +922,7 @@ INLINE void transmit_receive(mcs51_state_t *mcs51_state, int source)
int data = 0;
//Call our callball function to retrieve the data
if(mcs51_state->serial_rx_callback)
- data = mcs51_state->serial_rx_callback();
+ data = mcs51_state->serial_rx_callback(mcs51_state->device);
LOG(("RX Deliver %d\n", data));
SET_SBUF(data);
//Flag the IRQ
@@ -1264,16 +1257,16 @@ INLINE void update_irq_prio(mcs51_state_t *mcs51_state, UINT8 ipl, UINT8 iph)
***************************************************************************/
-void i8051_set_serial_tx_callback(void (*callback)(int data))
+void i8051_set_serial_tx_callback(const device_config *device, mcs51_serial_tx_func tx_func)
{
- //Hold in static variable since this function can get called before reset has run, which wipes i8051 memory clean
- hold_serial_tx_callback = callback;
+ mcs51_state_t *mcs51_state = device->token;
+ mcs51_state->serial_tx_callback = tx_func;
}
-void i8051_set_serial_rx_callback(int (*callback)(void))
+void i8051_set_serial_rx_callback(const device_config *device, mcs51_serial_rx_func rx_func)
{
- //Hold in static variable since this function can get called before reset has run, which wipes i8051 memory clean
- hold_serial_rx_callback = callback;
+ mcs51_state_t *mcs51_state = device->token;
+ mcs51_state->serial_rx_callback = rx_func;
}
/***************************************************************************
@@ -2099,11 +2092,6 @@ static CPU_RESET( mcs51 )
mcs51_state_t *mcs51_state = device->token;
update_ptrs(mcs51_state);
- //Set up serial call back handlers
- mcs51_state->serial_tx_callback = hold_serial_tx_callback;
- hold_serial_tx_callback = NULL;
- mcs51_state->serial_rx_callback = hold_serial_rx_callback;
- hold_serial_rx_callback = NULL;
mcs51_state->last_line_state = 0;
mcs51_state->t0_cnt = 0;
diff --git a/src/emu/cpu/mcs51/mcs51.h b/src/emu/cpu/mcs51/mcs51.h
index 9c33d76984b..951bb93fe6e 100644
--- a/src/emu/cpu/mcs51/mcs51.h
+++ b/src/emu/cpu/mcs51/mcs51.h
@@ -90,8 +90,11 @@ struct _ds5002fp_config
FUNCTION PROTOTYPES
***************************************************************************/
-extern void i8051_set_serial_tx_callback(void (*callback)(int data));
-extern void i8051_set_serial_rx_callback(int (*callback)(void));
+typedef void (*mcs51_serial_tx_func)(const device_config *device, int data);
+typedef int (*mcs51_serial_rx_func)(const device_config *device);
+
+extern void i8051_set_serial_tx_callback(const device_config *device, mcs51_serial_tx_func tx_func);
+extern void i8051_set_serial_rx_callback(const device_config *device, mcs51_serial_rx_func rx_func);
/* variants with no internal rom and 128 byte internal memory */
CPU_GET_INFO( i8031 );
diff --git a/src/mame/drivers/micro3d.c b/src/mame/drivers/micro3d.c
index 4a976b61a9f..0fd37ace079 100644
--- a/src/mame/drivers/micro3d.c
+++ b/src/mame/drivers/micro3d.c
@@ -105,25 +105,25 @@ enum{ RX=0,TX,STATUS,SYN1,SYN2,DLE,MODE1,MODE2,COMMAND
/* Probably wrong and a bit crap */
-static int data_to_i8031(void)
+static int data_to_i8031(const device_config *device)
{
mame_printf_debug("68k sent data: %x\n",M68681.TBB);
M68681.SRB |=0x0400; // Data has been sent - TX ready for more.
// Write to sound board
if(M68681.IMR & 0x1000)
{
- cpu_set_input_line_and_vector(Machine->cpu[0],3, HOLD_LINE, M68681.IVR); // Generate an interrupt, if allowed.
+ cpu_set_input_line_and_vector(device->machine->cpu[0],3, HOLD_LINE, M68681.IVR); // Generate an interrupt, if allowed.
}
return M68681.TBB;
}
-static void data_from_i8031(int data)
+static void data_from_i8031(const device_config *device, int data)
{
M68681.RBB = data<<8; // Put into receive buffer.
M68681.SRB |= 0x0100; // Set Receiver B ready.
if(M68681.IMR & 0x1000)
{
- cpu_set_input_line_and_vector(Machine->cpu[0],3, HOLD_LINE, M68681.IVR); // Generate a receiver interrupt.
+ cpu_set_input_line_and_vector(device->machine->cpu[0],3, HOLD_LINE, M68681.IVR); // Generate a receiver interrupt.
mame_printf_debug("INTERRUPT!!!\n");
}
mame_printf_debug("8031 sent data: %x\n",data);
@@ -169,8 +169,8 @@ static void micro3d_scanline_update(const device_config *screen, bitmap_t *bitma
static MACHINE_RESET( micro3d )
{
- i8051_set_serial_tx_callback(data_from_i8031);
- i8051_set_serial_rx_callback(data_to_i8031);
+ i8051_set_serial_tx_callback(machine->cpu[2], data_from_i8031);
+ i8051_set_serial_rx_callback(machine->cpu[2], data_to_i8031);
ti_uart[STATUS]=1;
M68681.SRA=0x0500;
M68681.SRB=0x0500;