src/mame/machine/konamiic.c
| r6852 | r6853 | |
| 1 | | #include "driver.h" |
| 2 | | #include "konamiic.h" |
| 3 | | |
| 4 | | /* Konami K056800 (MIRAC) */ |
| 5 | | |
| 6 | | static UINT8 K056800_host_reg[8]; |
| 7 | | static UINT8 K056800_sound_reg[8]; |
| 8 | | |
| 9 | | static emu_timer *K056800_sound_cpu_timer; |
| 10 | | static UINT8 K056800_sound_cpu_irq1_enable; |
| 11 | | static void (*K056800_sound_irq_callback)(running_machine *, int); |
| 12 | | |
| 13 | | static UINT8 K056800_host_reg_r(int reg) |
| 14 | | { |
| 15 | | UINT8 value = 0; |
| 16 | | |
| 17 | | value = K056800_host_reg[reg]; |
| 18 | | if (reg == 2) value &= ~3; // suppress VOLWR busy flags |
| 19 | | |
| 20 | | return value; |
| 21 | | } |
| 22 | | |
| 23 | | static void K056800_host_reg_w(const address_space *space, int reg, UINT8 data) |
| 24 | | { |
| 25 | | K056800_sound_reg[reg] = data; |
| 26 | | |
| 27 | | if (reg == 7) |
| 28 | | { |
| 29 | | K056800_sound_irq_callback(space->machine, 1); |
| 30 | | } |
| 31 | | } |
| 32 | | |
| 33 | | static UINT8 K056800_sound_reg_r(int reg) |
| 34 | | { |
| 35 | | return K056800_sound_reg[reg]; |
| 36 | | } |
| 37 | | |
| 38 | | static void K056800_sound_reg_w(int reg, UINT8 data) |
| 39 | | { |
| 40 | | if (reg == 4) |
| 41 | | { |
| 42 | | K056800_sound_cpu_irq1_enable = data & 0x01; |
| 43 | | } |
| 44 | | |
| 45 | | K056800_host_reg[reg] = data; |
| 46 | | } |
| 47 | | |
| 48 | | static TIMER_CALLBACK( K056800_sound_cpu_timer_tick ) |
| 49 | | { |
| 50 | | if (K056800_sound_cpu_irq1_enable) |
| 51 | | { |
| 52 | | K056800_sound_irq_callback(machine, 0); |
| 53 | | } |
| 54 | | } |
| 55 | | |
| 56 | | void K056800_init(running_machine *machine, void (* irq_callback)(running_machine *, int)) |
| 57 | | { |
| 58 | | attotime timer_period; |
| 59 | | K056800_sound_irq_callback = irq_callback; |
| 60 | | |
| 61 | | memset(K056800_host_reg, 0, sizeof(K056800_host_reg)); |
| 62 | | memset(K056800_sound_reg, 0, sizeof(K056800_sound_reg)); |
| 63 | | |
| 64 | | timer_period = attotime_mul(ATTOTIME_IN_HZ(44100), 128); // roughly 2.9us |
| 65 | | |
| 66 | | K056800_sound_cpu_timer = timer_alloc(machine, K056800_sound_cpu_timer_tick, NULL); |
| 67 | | timer_adjust_periodic(K056800_sound_cpu_timer, timer_period, 0, timer_period); |
| 68 | | |
| 69 | | state_save_register_item_array(machine, "K056800", NULL, 0, K056800_host_reg); |
| 70 | | state_save_register_item_array(machine, "K056800", NULL, 0, K056800_sound_reg); |
| 71 | | state_save_register_item(machine, "K056800", NULL, 0, K056800_sound_cpu_irq1_enable); |
| 72 | | } |
| 73 | | |
| 74 | | READ32_HANDLER(K056800_host_r) |
| 75 | | { |
| 76 | | UINT32 r = 0; |
| 77 | | |
| 78 | | if (ACCESSING_BITS_24_31) |
| 79 | | { |
| 80 | | r |= K056800_host_reg_r((offset*4)+0) << 24; |
| 81 | | } |
| 82 | | if (ACCESSING_BITS_16_23) |
| 83 | | { |
| 84 | | r |= K056800_host_reg_r((offset*4)+1) << 16; |
| 85 | | } |
| 86 | | if (ACCESSING_BITS_8_15) |
| 87 | | { |
| 88 | | r |= K056800_host_reg_r((offset*4)+2) << 8; |
| 89 | | } |
| 90 | | if (ACCESSING_BITS_0_7) |
| 91 | | { |
| 92 | | r |= K056800_host_reg_r((offset*4)+3) << 0; |
| 93 | | } |
| 94 | | |
| 95 | | return r; |
| 96 | | } |
| 97 | | |
| 98 | | WRITE32_HANDLER(K056800_host_w) |
| 99 | | { |
| 100 | | if (ACCESSING_BITS_24_31) |
| 101 | | { |
| 102 | | K056800_host_reg_w(space, (offset*4)+0, (data >> 24) & 0xff); |
| 103 | | } |
| 104 | | if (ACCESSING_BITS_16_23) |
| 105 | | { |
| 106 | | K056800_host_reg_w(space, (offset*4)+1, (data >> 16) & 0xff); |
| 107 | | } |
| 108 | | if (ACCESSING_BITS_8_15) |
| 109 | | { |
| 110 | | K056800_host_reg_w(space, (offset*4)+2, (data >> 8) & 0xff); |
| 111 | | } |
| 112 | | if (ACCESSING_BITS_0_7) |
| 113 | | { |
| 114 | | K056800_host_reg_w(space, (offset*4)+3, (data >> 0) & 0xff); |
| 115 | | } |
| 116 | | } |
| 117 | | |
| 118 | | READ16_HANDLER(K056800_sound_r) |
| 119 | | { |
| 120 | | return K056800_sound_reg_r(offset); |
| 121 | | } |
| 122 | | |
| 123 | | WRITE16_HANDLER(K056800_sound_w) |
| 124 | | { |
| 125 | | K056800_sound_reg_w(offset, data); |
| 126 | | } |
src/mame/machine/mb14241.c
| r6852 | r6853 | |
| 1 | | /*************************************************************************** |
| 2 | | |
| 3 | | Midway 8080-based black and white hardware |
| 4 | | |
| 5 | | ****************************************************************************/ |
| 6 | | |
| 7 | | #include "driver.h" |
| 8 | | #include "mb14241.h" |
| 9 | | |
| 10 | | |
| 11 | | #define MAX_MB14241 1 |
| 12 | | |
| 13 | | struct MB14241 |
| 14 | | { |
| 15 | | UINT16 shift_data; /* 15 bits only */ |
| 16 | | UINT8 shift_count; /* 3 bits */ |
| 17 | | }; |
| 18 | | |
| 19 | | static struct MB14241 chips[MAX_MB14241]; |
| 20 | | |
| 21 | | |
| 22 | | static void mb14241_shift_count_w(int num, UINT8 data) |
| 23 | | { |
| 24 | | chips[num].shift_count = ~data & 0x07; |
| 25 | | } |
| 26 | | |
| 27 | | WRITE8_HANDLER( mb14241_0_shift_count_w ) { mb14241_shift_count_w(0, data); } |
| 28 | | |
| 29 | | |
| 30 | | static void mb14241_shift_data_w(int num, UINT8 data) |
| 31 | | { |
| 32 | | chips[num].shift_data = (chips[num].shift_data >> 8) | ((UINT16)data << 7); |
| 33 | | } |
| 34 | | |
| 35 | | WRITE8_HANDLER( mb14241_0_shift_data_w ) { mb14241_shift_data_w(0, data); } |
| 36 | | |
| 37 | | |
| 38 | | static UINT8 mb14241_shift_result_r(int num) |
| 39 | | { |
| 40 | | return chips[num].shift_data >> chips[num].shift_count; |
| 41 | | } |
| 42 | | |
| 43 | | READ8_HANDLER( mb14241_0_shift_result_r ) { return mb14241_shift_result_r(0); } |
| 44 | | |
| 45 | | |
| 46 | | void mb14241_init(running_machine *machine,int num) |
| 47 | | { |
| 48 | | state_save_register_item(machine, "mb14241", NULL, num, chips[num].shift_data); |
| 49 | | state_save_register_item(machine, "mb14241", NULL, num, chips[num].shift_count); |
| 50 | | } |
src/mame/includes/8080bw.h
| r6852 | r6853 | |
| 1 | | /************************************************************************* |
| 2 | | |
| 3 | | 8080bw.h |
| 4 | | |
| 5 | | *************************************************************************/ |
| 6 | | |
| 7 | | #include "sound/discrete.h" |
| 8 | | #include "sound/sn76477.h" |
| 9 | | #include "sound/samples.h" |
| 10 | | |
| 11 | | |
| 12 | | |
| 13 | | #define CABINET_PORT_TAG "CAB" |
| 14 | | |
| 15 | | |
| 16 | | /*----------- defined in drivers/8080bw.c -----------*/ |
| 17 | | |
| 18 | | UINT8 polaris_get_cloud_pos(void); |
| 19 | | |
| 20 | | |
| 21 | | /*----------- defined in audio/8080bw.c -----------*/ |
| 22 | | |
| 23 | | MACHINE_START( extra_8080bw_sh ); |
| 24 | | |
| 25 | | WRITE8_HANDLER( invadpt2_sh_port_1_w ); |
| 26 | | WRITE8_HANDLER( invadpt2_sh_port_2_w ); |
| 27 | | |
| 28 | | WRITE8_HANDLER( spcewars_sh_port_w ); |
| 29 | | |
| 30 | | WRITE8_HANDLER( lrescue_sh_port_1_w ); |
| 31 | | WRITE8_HANDLER( lrescue_sh_port_2_w ); |
| 32 | | extern const samples_interface lrescue_samples_interface; |
| 33 | | |
| 34 | | WRITE8_HANDLER( cosmo_sh_port_2_w ); |
| 35 | | |
| 36 | | WRITE8_HANDLER( ballbomb_sh_port_1_w ); |
| 37 | | WRITE8_HANDLER( ballbomb_sh_port_2_w ); |
| 38 | | |
| 39 | | WRITE8_HANDLER( indianbt_sh_port_1_w ); |
| 40 | | WRITE8_HANDLER( indianbt_sh_port_2_w ); |
| 41 | | WRITE8_DEVICE_HANDLER( indianbt_sh_port_3_w ); |
| 42 | | DISCRETE_SOUND_EXTERN( indianbt ); |
| 43 | | |
| 44 | | WRITE8_DEVICE_HANDLER( polaris_sh_port_1_w ); |
| 45 | | WRITE8_DEVICE_HANDLER( polaris_sh_port_2_w ); |
| 46 | | WRITE8_DEVICE_HANDLER( polaris_sh_port_3_w ); |
| 47 | | DISCRETE_SOUND_EXTERN( polaris ); |
| 48 | | |
| 49 | | MACHINE_RESET( schaser ); |
| 50 | | MACHINE_START( schaser ); |
| 51 | | WRITE8_HANDLER( schaser_sh_port_1_w ); |
| 52 | | WRITE8_HANDLER( schaser_sh_port_2_w ); |
| 53 | | extern const sn76477_interface schaser_sn76477_interface; |
| 54 | | DISCRETE_SOUND_EXTERN( schaser ); |
| 55 | | |
| 56 | | WRITE8_HANDLER( rollingc_sh_port_w ); |
| 57 | | |
| 58 | | WRITE8_HANDLER( invrvnge_sh_port_w ); |
| 59 | | |
| 60 | | WRITE8_HANDLER( lupin3_sh_port_1_w ); |
| 61 | | WRITE8_HANDLER( lupin3_sh_port_2_w ); |
| 62 | | |
| 63 | | WRITE8_HANDLER( schasrcv_sh_port_1_w ); |
| 64 | | WRITE8_HANDLER( schasrcv_sh_port_2_w ); |
| 65 | | |
| 66 | | WRITE8_HANDLER( yosakdon_sh_port_1_w ); |
| 67 | | WRITE8_HANDLER( yosakdon_sh_port_2_w ); |
| 68 | | |
| 69 | | WRITE8_HANDLER( shuttlei_sh_port_1_w ); |
| 70 | | WRITE8_HANDLER( shuttlei_sh_port_2_w ); |
| 71 | | |
| 72 | | /*----------- defined in video/8080bw.c -----------*/ |
| 73 | | |
| 74 | | extern UINT8 *c8080bw_colorram; |
| 75 | | |
| 76 | | MACHINE_START( extra_8080bw_vh ); |
| 77 | | |
| 78 | | void c8080bw_flip_screen_w(const address_space *space, int data); |
| 79 | | void lupin3_flip_screen_w(const address_space *space, int data); |
| 80 | | void c8080bw_screen_red_w(int data); |
| 81 | | void schaser_background_control_w(int data); |
| 82 | | |
| 83 | | VIDEO_UPDATE( invadpt2 ); |
| 84 | | VIDEO_UPDATE( ballbomb ); |
| 85 | | VIDEO_UPDATE( schaser ); |
| 86 | | VIDEO_UPDATE( schasrcv ); |
| 87 | | VIDEO_UPDATE( rollingc ); |
| 88 | | VIDEO_UPDATE( polaris ); |
| 89 | | VIDEO_UPDATE( lupin3 ); |
| 90 | | VIDEO_UPDATE( cosmo ); |
| 91 | | VIDEO_UPDATE( indianbt ); |
| 92 | | VIDEO_UPDATE( shuttlei ); |
| 93 | | VIDEO_UPDATE( sflush ); |