static unsigned hw_pal_io_write_buffer (struct hw *me, const void *source, int space, unsigned_word addr, unsigned nr_bytes) { hw_pal_device *hw_pal = (hw_pal_device*) hw_data (me); unsigned_1 *byte = (unsigned_1 *) source; switch (addr & hw_pal_address_mask) { case hw_pal_reset_register: hw_halt (me, sim_exited, byte[0]); break; case hw_pal_int_register: hw_port_event (me, INT_PORT + byte[0], /*port*/ (nr_bytes > 1 ? byte[1] : 0)); /* val */ break; case hw_pal_read_fifo: hw_pal->input.buffer = byte[0]; HW_TRACE ((me, "write - input-fifo %d\n", byte[0])); break; case hw_pal_read_status: hw_pal->input.status = byte[0]; HW_TRACE ((me, "write - input-status %d\n", byte[0])); break; case hw_pal_write_fifo: write_hw_pal (me, byte[0]); HW_TRACE ((me, "write - output-fifo %d\n", byte[0])); break; case hw_pal_write_status: hw_pal->output.status = byte[0]; HW_TRACE ((me, "write - output-status %d\n", byte[0])); break; case hw_pal_countdown: do_counter_write (me, hw_pal, "countdown", &hw_pal->countdown, source, nr_bytes); break; case hw_pal_timer: do_counter_write (me, hw_pal, "timer", &hw_pal->timer, source, nr_bytes); break; } return nr_bytes; }
static int hw_pal_instance_write_callback (hw_instance *instance, const void *buf, unsigned_word len) { int i; const char *chp = buf; hw_pal_device *hw_pal = hw_instance_data (instance); DITRACE (pal, ("write - %s (%ld)", (const char*) buf, (long int) len)); for (i = 0; i < len; i++) write_hw_pal (hw_pal, chp[i]); sim_io_flush_stdoutput (); return i; }
static unsigned hw_pal_io_write_buffer_callback(device *me, const void *source, int space, unsigned_word addr, unsigned nr_bytes, cpu *processor, unsigned_word cia) { hw_pal_device *hw_pal = (hw_pal_device*)device_data(me); unsigned_1 *byte = (unsigned_1*)source; switch (addr & hw_pal_address_mask) { case hw_pal_reset_register: cpu_halt(processor, cia, was_exited, byte[0]); break; case hw_pal_int_register: device_interrupt_event(me, byte[0], /*port*/ (nr_bytes > 1 ? byte[1] : 0), /* val */ processor, cia); break; case hw_pal_read_fifo: hw_pal->input.buffer = byte[0]; DTRACE(pal, ("write - input-fifo %d\n", byte[0])); break; case hw_pal_read_status: hw_pal->input.status = byte[0]; DTRACE(pal, ("write - input-status %d\n", byte[0])); break; case hw_pal_write_fifo: write_hw_pal(hw_pal, byte[0]); DTRACE(pal, ("write - output-fifo %d\n", byte[0])); break; case hw_pal_write_status: hw_pal->output.status = byte[0]; DTRACE(pal, ("write - output-status %d\n", byte[0])); break; } return nr_bytes; }