src/mess/machine/poly88.c
| r4791 | r4792 | |
| 9 | 9 | #include "driver.h" |
| 10 | 10 | #include "includes/poly88.h" |
| 11 | 11 | #include "cpu/i8085/i8085.h" |
| 12 | #include "devices/cassette.h" |
| 13 | #include "includes/serial.h" |
| 12 | 14 | |
| 13 | 15 | static UINT8 intr = 0; |
| 14 | 16 | static UINT8 last_code = 0; |
| 15 | 17 | static UINT8 int_vector = 0; |
| 18 | static emu_timer * poly88_cassette_timer; |
| 16 | 19 | |
| 17 | 20 | WRITE8_HANDLER(poly_baud_rate_w) |
| 18 | 21 | { |
| r4791 | r4792 | |
| 121 | 124 | return int_vector; |
| 122 | 125 | } |
| 123 | 126 | |
| 127 | |
| 128 | static struct serial_connection poly88_cassette_serial_connection; |
| 129 | |
| 130 | static void poly88_cassette_write(running_machine *machine, int id, unsigned long state) |
| 131 | { |
| 132 | poly88_cassette_serial_connection.input_state = state; |
| 133 | } |
| 134 | |
| 135 | static TIMER_CALLBACK(poly88_cassette_timer_callback) |
| 136 | { |
| 137 | int data; |
| 138 | // int current_level; |
| 139 | // static int previous_level = 0; |
| 140 | static int clk_level = 1; |
| 141 | static int clk_level_tape = 1; |
| 142 | |
| 143 | //int_vector = 0xe7; |
| 144 | //cpu_set_input_line(cputag_get_cpu(machine, "maincpu"), 0, HOLD_LINE); |
| 145 | |
| 146 | // if (!(input_port_read(machine, "DSW0") & 0x02)) /* V.24 / Tape Switch */ |
| 147 | //{ |
| 148 | /* tape reading */ |
| 149 | /* if (cassette_get_state(devtag_get_device(machine, "cassette"))&CASSETTE_PLAY) |
| 150 | { |
| 151 | if (clk_level_tape) |
| 152 | { |
| 153 | previous_level = (cassette_input(devtag_get_device(machine, "cassette")) > 0.038) ? 1 : 0; |
| 154 | clk_level_tape = 0; |
| 155 | } |
| 156 | else |
| 157 | { |
| 158 | current_level = (cassette_input(devtag_get_device(machine, "cassette")) > 0.038) ? 1 : 0; |
| 159 | |
| 160 | if (previous_level!=current_level) |
| 161 | { |
| 162 | data = (!previous_level && current_level) ? 1 : 0; |
| 163 | |
| 164 | set_out_data_bit(pmd85_cassette_serial_connection.State, data); |
| 165 | serial_connection_out(machine, &pmd85_cassette_serial_connection); |
| 166 | msm8251_receive_clock(devtag_get_device(machine, "uart")); |
| 167 | |
| 168 | clk_level_tape = 1; |
| 169 | } |
| 170 | } |
| 171 | } |
| 172 | */ |
| 173 | /* tape writing */ |
| 174 | if (cassette_get_state(devtag_get_device(machine, "cassette"))&CASSETTE_RECORD) |
| 175 | { |
| 176 | data = get_in_data_bit(poly88_cassette_serial_connection.input_state); |
| 177 | data ^= clk_level_tape; |
| 178 | cassette_output(devtag_get_device(machine, "cassette"), data&0x01 ? 1 : -1); |
| 179 | |
| 180 | if (!clk_level_tape) |
| 181 | msm8251_transmit_clock(devtag_get_device(machine, "uart")); |
| 182 | |
| 183 | clk_level_tape = clk_level_tape ? 0 : 1; |
| 184 | |
| 185 | return; |
| 186 | } |
| 187 | |
| 188 | clk_level_tape = 1; |
| 189 | |
| 190 | if (!clk_level) |
| 191 | msm8251_transmit_clock(devtag_get_device(machine, "uart")); |
| 192 | clk_level = clk_level ? 0 : 1; |
| 193 | // } |
| 194 | } |
| 195 | |
| 196 | |
| 197 | static TIMER_CALLBACK( setup_machine_state ) |
| 198 | { |
| 199 | msm8251_connect(devtag_get_device(machine, "uart"), &poly88_cassette_serial_connection); |
| 200 | } |
| 201 | |
| 202 | DRIVER_INIT ( poly88 ) |
| 203 | { |
| 204 | poly88_cassette_timer = timer_alloc(machine, poly88_cassette_timer_callback, NULL); |
| 205 | timer_adjust_periodic(poly88_cassette_timer, attotime_zero, 0, ATTOTIME_IN_HZ(2400)); |
| 206 | |
| 207 | serial_connection_init(machine, &poly88_cassette_serial_connection); |
| 208 | serial_connection_set_in_callback(machine, &poly88_cassette_serial_connection, poly88_cassette_write); |
| 209 | } |
| 210 | |
| 124 | 211 | MACHINE_RESET(poly88) |
| 125 | 212 | { |
| 126 | 213 | cpu_set_irq_callback(cputag_get_cpu(machine, "maincpu"), poly88_irq_callback); |
| 127 | | timer_pulse(machine, ATTOTIME_IN_HZ(2400), NULL, 0, keyboard_callback); |
| 214 | timer_pulse(machine, ATTOTIME_IN_HZ(24000), NULL, 0, keyboard_callback); |
| 128 | 215 | intr = 0; |
| 129 | 216 | last_code = 0; |
| 217 | |
| 218 | timer_set(machine, attotime_zero, NULL, 0, setup_machine_state ); |
| 130 | 219 | } |
| 131 | 220 | |
| 132 | 221 | INTERRUPT_GEN( poly88_interrupt ) |
| r4791 | r4792 | |
| 136 | 225 | } |
| 137 | 226 | static void poly88_usart_rxready (const device_config *device, int state) |
| 138 | 227 | { |
| 139 | | int_vector = 0xe7; |
| 228 | //int_vector = 0xe7; |
| 140 | 229 | //cpu_set_input_line(device, 0, HOLD_LINE); |
| 141 | 230 | } |
| 142 | 231 | const msm8251_interface poly88_usart_interface= |
src/mess/drivers/poly88.c
| r4791 | r4792 | |
| 8 | 8 | |
| 9 | 9 | #include "driver.h" |
| 10 | 10 | #include "cpu/i8085/i8085.h" |
| 11 | #include "devices/cassette.h" |
| 11 | 12 | #include "includes/poly88.h" |
| 12 | 13 | |
| 13 | 14 | static ADDRESS_MAP_START(poly88_mem, ADDRESS_SPACE_PROGRAM, 8) |
| r4791 | r4792 | |
| 113 | 114 | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LF") PORT_CODE(KEYCODE_RALT) |
| 114 | 115 | INPUT_PORTS_END |
| 115 | 116 | |
| 117 | static const struct CassetteOptions poly88_cassette_options = |
| 118 | { |
| 119 | 1, /* channels */ |
| 120 | 16, /* bits per sample */ |
| 121 | 7200 /* sample frequency */ |
| 122 | }; |
| 123 | |
| 124 | static const cassette_config poly88_cassette_config = |
| 125 | { |
| 126 | cassette_default_formats, |
| 127 | &poly88_cassette_options, |
| 128 | CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED |
| 129 | }; |
| 130 | |
| 131 | |
| 116 | 132 | static MACHINE_DRIVER_START( poly88 ) |
| 117 | 133 | /* basic machine hardware */ |
| 118 | 134 | MDRV_CPU_ADD("maincpu",8080, 1853000) |
| r4791 | r4792 | |
| 135 | 151 | MDRV_VIDEO_START(poly88) |
| 136 | 152 | MDRV_VIDEO_UPDATE(poly88) |
| 137 | 153 | |
| 154 | /* cassette */ |
| 155 | MDRV_CASSETTE_ADD( "cassette", poly88_cassette_config ) |
| 156 | |
| 138 | 157 | /* uart */ |
| 139 | 158 | MDRV_MSM8251_ADD("uart", poly88_usart_interface) |
| 140 | 159 | |
| r4791 | r4792 | |
| 156 | 175 | /* Driver */ |
| 157 | 176 | |
| 158 | 177 | /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT CONFIG COMPANY FULLNAME FLAGS */ |
| 159 | | COMP( 1976, poly88, 0, 0, poly88, poly88, 0, poly88,"PolyMorphic Systems", "Poly-88", GAME_NOT_WORKING) |
| 178 | COMP( 1976, poly88, 0, 0, poly88, poly88, poly88, poly88,"PolyMorphic Systems", "Poly-88", GAME_NOT_WORKING) |
| 160 | 179 | |