trunk/src/mess/drivers/tk80bs.c
| r20231 | r20232 | |
| 16 | 16 | schematics etc are available. Thanks to 'Nama' who dumped the rom. |
| 17 | 17 | It has 25 keys, so a few aren't defined yet. |
| 18 | 18 | |
| 19 | ND-80Z : http://www.alles.or.jp/~thisida/nd80z3syokai.html (newer version) |
| 20 | Like the TK85, it has a 2KB rom. Thanks again to 'Nama' who dumped it. |
| 21 | |
| 19 | 22 | When booted, the system begins at 0000 which is ROM. You need to change the |
| 20 | 23 | address to 8000 before entering a program. Here is a test to paste in: |
| 21 | 24 | 8000-11^22^33^44^55^66^77^88^99^8000- |
| r20231 | r20232 | |
| 68 | 71 | DECLARE_READ8_MEMBER(ppi_custom_r); |
| 69 | 72 | DECLARE_WRITE8_MEMBER(ppi_custom_w); |
| 70 | 73 | DECLARE_READ8_MEMBER(key_matrix_r); |
| 74 | DECLARE_READ8_MEMBER(nd80z_key_r); |
| 71 | 75 | DECLARE_READ8_MEMBER(serial_r); |
| 72 | 76 | DECLARE_WRITE8_MEMBER(serial_w); |
| 73 | 77 | DECLARE_WRITE8_MEMBER(mikrolab_serial_w); |
| r20231 | r20232 | |
| 132 | 136 | AM_RANGE(0xf8, 0xfb) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write) |
| 133 | 137 | ADDRESS_MAP_END |
| 134 | 138 | |
| 139 | static ADDRESS_MAP_START(nd80z_io, AS_IO, 8, tk80bs_state) |
| 140 | ADDRESS_MAP_UNMAP_HIGH |
| 141 | ADDRESS_MAP_GLOBAL_MASK(0xff) // possibly should be 3 |
| 142 | AM_RANGE(0xf8, 0xfb) AM_DEVREADWRITE("ppi8255_3", i8255_device, read, write) |
| 143 | ADDRESS_MAP_END |
| 144 | |
| 135 | 145 | /* Input ports */ |
| 136 | 146 | static INPUT_PORTS_START( tk80 ) |
| 137 | 147 | PORT_START("X0") /* KEY ROW 0 */ |
| r20231 | r20232 | |
| 187 | 197 | // PA0-7 keyscan in |
| 188 | 198 | |
| 189 | 199 | UINT8 data = 0xff; |
| 200 | |
| 190 | 201 | if (BIT(m_ppi_portc, 4)) |
| 191 | 202 | data &= ioport("X0")->read(); |
| 192 | 203 | if (BIT(m_ppi_portc, 5)) |
| r20231 | r20232 | |
| 197 | 208 | return data; |
| 198 | 209 | } |
| 199 | 210 | |
| 211 | READ8_MEMBER( tk80bs_state::nd80z_key_r ) |
| 212 | { |
| 213 | // PA0-7 keyscan in |
| 214 | |
| 215 | UINT8 data = 0xff, row = m_ppi_portc & 7; |
| 216 | if (row == 6) |
| 217 | data &= ioport("X0")->read(); |
| 218 | else |
| 219 | if (row == 5) |
| 220 | data &= ioport("X1")->read(); |
| 221 | else |
| 222 | if (row == 3) |
| 223 | data &= ioport("X2")->read(); |
| 224 | |
| 225 | return data; |
| 226 | } |
| 227 | |
| 200 | 228 | READ8_MEMBER( tk80bs_state::serial_r ) |
| 201 | 229 | { |
| 202 | 230 | // PB0 - serial in |
| r20231 | r20232 | |
| 241 | 269 | DEVCB_DRIVER_MEMBER(tk80bs_state, mikrolab_serial_w) /* Port C write */ |
| 242 | 270 | }; |
| 243 | 271 | |
| 272 | static I8255_INTERFACE( ppi8255_intf_3 ) |
| 273 | { |
| 274 | DEVCB_DRIVER_MEMBER(tk80bs_state, nd80z_key_r), /* Port A read */ |
| 275 | DEVCB_NULL, /* Port A write */ |
| 276 | DEVCB_DRIVER_MEMBER(tk80bs_state, serial_r), /* Port B read */ |
| 277 | DEVCB_NULL, /* Port B write */ |
| 278 | DEVCB_NULL, /* Port C read */ |
| 279 | DEVCB_DRIVER_MEMBER(tk80bs_state, mikrolab_serial_w) /* Port C write */ |
| 280 | }; |
| 244 | 281 | |
| 282 | |
| 245 | 283 | static MACHINE_CONFIG_START( tk80, tk80bs_state ) |
| 246 | 284 | /* basic machine hardware */ |
| 247 | 285 | MCFG_CPU_ADD("maincpu",I8080, XTAL_1MHz) // 18.432 / 9 |
| r20231 | r20232 | |
| 266 | 304 | MCFG_I8255_ADD( "ppi8255_1", ppi8255_intf_1 ) |
| 267 | 305 | MACHINE_CONFIG_END |
| 268 | 306 | |
| 307 | static MACHINE_CONFIG_DERIVED( nd80z, tk80 ) |
| 308 | MCFG_CPU_MODIFY("maincpu") |
| 309 | MCFG_CPU_PROGRAM_MAP(tk85_mem) |
| 310 | MCFG_CPU_IO_MAP(nd80z_io) |
| 311 | /* Devices */ |
| 312 | MCFG_DEVICE_REMOVE("ppi8255_0") |
| 313 | MCFG_I8255_ADD( "ppi8255_3", ppi8255_intf_3 ) |
| 314 | MACHINE_CONFIG_END |
| 315 | |
| 269 | 316 | static MACHINE_CONFIG_DERIVED( tk85, tk80 ) |
| 270 | 317 | MCFG_CPU_MODIFY("maincpu") |
| 271 | 318 | MCFG_CPU_PROGRAM_MAP(tk85_mem) |
| r20231 | r20232 | |
| 455 | 502 | ROM_LOAD( "tk85.bin", 0x0000, 0x0800, CRC(8a0b6d7e) SHA1(6acc8c04990692b08929043ccf638761b7301def)) |
| 456 | 503 | ROM_END |
| 457 | 504 | |
| 505 | ROM_START( nd80z ) |
| 506 | ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) |
| 507 | ROM_LOAD( "nd80z.bin", 0x0000, 0x0800, CRC(fe829f1d) SHA1(6fff31884b8d984076d4450ca3a3e48efadeb648)) |
| 508 | ROM_END |
| 509 | |
| 458 | 510 | ROM_START( tk80bs ) |
| 459 | 511 | ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) |
| 460 | 512 | /* all of these aren't taken from an original machine*/ |
| r20231 | r20232 | |
| 486 | 538 | COMP( 1976, tk80, 0, 0, tk80, tk80, driver_device, 0, "Nippon Electronic Company", "TK-80", GAME_NO_SOUND_HW) |
| 487 | 539 | COMP( 1980, tk80bs, tk80, 0, tk80bs, tk80bs, driver_device, 0, "Nippon Electronic Company", "TK-80BS", GAME_NOT_WORKING | GAME_NO_SOUND_HW) |
| 488 | 540 | COMP( 19??, nectk85, tk80, 0, tk85, tk80, driver_device, 0, "Nippon Electronic Company", "TK-85", GAME_NO_SOUND_HW) |
| 541 | COMP( 19??, nd80z, tk80, 0, nd80z, tk80, driver_device, 0, "Chunichi", "ND-80Z", GAME_NO_SOUND_HW) |
| 489 | 542 | COMP( 19??, mikrolab, tk80, 0, mikrolab, mikrolab, driver_device, 0, "<unknown>", "Mikrolab KR580IK80", GAME_NO_SOUND_HW) |