src/mess/drivers/esq5505.c
| r15365 | r15366 | |
| 41 | 41 | #include "machine/esqvfd.h" |
| 42 | 42 | |
| 43 | 43 | #define GENERIC (0) |
| 44 | | #define EPS16 (1) |
| 44 | #define EPS (1) |
| 45 | 45 | #define SQ1 (2) |
| 46 | 46 | |
| 47 | 47 | class esq5505_state : public driver_device |
| r15365 | r15366 | |
| 209 | 209 | AM_RANGE(0x2c0000, 0x2c0007) AM_DEVREADWRITE8("wd1772", wd1772_t, read, write, 0x00ff) |
| 210 | 210 | AM_RANGE(0x340000, 0x3bffff) AM_RAM // sequencer memory? |
| 211 | 211 | AM_RANGE(0xc00000, 0xc3ffff) AM_ROM AM_REGION("osrom", 0) |
| 212 | | AM_RANGE(0xff0000, 0xffffff) AM_RAM |
| 212 | AM_RANGE(0xff0000, 0xffffff) AM_RAM AM_SHARE("osram") |
| 213 | 213 | ADDRESS_MAP_END |
| 214 | 214 | |
| 215 | | static ADDRESS_MAP_START( eps16_map, AS_PROGRAM, 16, esq5505_state ) |
| 216 | | AM_RANGE(0x000000, 0x03ffff) AM_RAM AM_SHARE("osram") |
| 215 | static ADDRESS_MAP_START( eps_map, AS_PROGRAM, 16, esq5505_state ) |
| 216 | AM_RANGE(0x000000, 0x00ffff) AM_RAM AM_MIRROR(0x30000) AM_SHARE("osram") |
| 217 | 217 | AM_RANGE(0x200000, 0x20001f) AM_DEVREADWRITE_LEGACY("ensoniq", es5505_r, es5505_w) |
| 218 | 218 | AM_RANGE(0x280000, 0x28001f) AM_DEVREADWRITE8_LEGACY("duart", duart68681_r, duart68681_w, 0x00ff) |
| 219 | 219 | AM_RANGE(0x2c0000, 0x2c0007) AM_DEVREADWRITE8("wd1772", wd1772_t, read, write, 0x00ff) |
| 220 | 220 | AM_RANGE(0x580000, 0x77ffff) AM_RAM // sample RAM? |
| 221 | 221 | AM_RANGE(0xc00000, 0xc0ffff) AM_ROM AM_REGION("osrom", 0) |
| 222 | AM_RANGE(0xff0000, 0xffffff) AM_RAM AM_SHARE("osram") |
| 222 | 223 | ADDRESS_MAP_END |
| 223 | 224 | |
| 224 | 225 | static UINT16 esq5505_read_adc(device_t *device) |
| r15365 | r15366 | |
| 281 | 282 | state->m_vfd->write_char(data); |
| 282 | 283 | break; |
| 283 | 284 | |
| 284 | | case EPS16: |
| 285 | case EPS: |
| 285 | 286 | state->m_epsvfd->write_char(data); |
| 286 | 287 | break; |
| 287 | 288 | |
| r15365 | r15366 | |
| 307 | 308 | { |
| 308 | 309 | // EPS-16+ wants a throwaway reply byte for each byte sent to the KPC |
| 309 | 310 | // VFX-SD and SD-1 definitely don't :) |
| 310 | | if (state->m_system_type == EPS16) |
| 311 | if (state->m_system_type == EPS) |
| 311 | 312 | { |
| 312 | 313 | // 0xe7 must respond with any byte that isn't 0xc8 or the ROM dies. |
| 313 | 314 | // 0x71 must respond with anything (return not checked) |
| r15365 | r15366 | |
| 356 | 357 | MCFG_ESQ2x40_SQ1_ADD("sq1vfd") |
| 357 | 358 | MACHINE_CONFIG_END |
| 358 | 359 | |
| 359 | | static MACHINE_CONFIG_DERIVED(eps16, vfx) |
| 360 | static MACHINE_CONFIG_DERIVED(eps, vfx) |
| 360 | 361 | MCFG_CPU_MODIFY( "maincpu" ) |
| 361 | | MCFG_CPU_PROGRAM_MAP(eps16_map) |
| 362 | MCFG_CPU_PROGRAM_MAP(eps_map) |
| 362 | 363 | |
| 363 | 364 | MCFG_ESQ2x40_REMOVE("vfd") |
| 364 | 365 | MCFG_ESQ1x22_ADD("epsvfd") |
| r15365 | r15366 | |
| 428 | 429 | ROM_LOAD16_BYTE( "sq1-u26.bin", 0x100001, 0x080000, CRC(2edaa9dc) SHA1(72fead505c4f44e5736ff7d545d72dfa37d613e2) ) |
| 429 | 430 | ROM_END |
| 430 | 431 | |
| 431 | | ROM_START( eps16 ) |
| 432 | ROM_START( eps ) |
| 432 | 433 | ROM_REGION(0x10000, "osrom", 0) |
| 433 | 434 | ROM_LOAD16_BYTE( "eps-l.bin", 0x000000, 0x008000, CRC(382beac1) SHA1(110e31edb03fcf7bbde3e17423b21929e5b32db2) ) |
| 434 | 435 | ROM_LOAD16_BYTE( "eps-h.bin", 0x000001, 0x008000, CRC(d8747420) SHA1(460597751386eb5f08465699b61381c4acd78065) ) |
| r15365 | r15366 | |
| 452 | 453 | } |
| 453 | 454 | } |
| 454 | 455 | |
| 455 | | static DRIVER_INIT(eps16) |
| 456 | static DRIVER_INIT(eps) |
| 456 | 457 | { |
| 457 | 458 | esq5505_state *state = machine.driver_data<esq5505_state>(); |
| 458 | 459 | |
| 459 | 460 | DRIVER_INIT_CALL(common); |
| 460 | | state->m_system_type = EPS16; |
| 461 | state->m_system_type = EPS; |
| 461 | 462 | } |
| 462 | 463 | |
| 463 | 464 | static DRIVER_INIT(sq1) |
| r15365 | r15366 | |
| 468 | 469 | state->m_system_type = SQ1; |
| 469 | 470 | } |
| 470 | 471 | |
| 472 | CONS( 1988, eps, 0, 0, eps, vfx, eps, "Ensoniq", "EPS", GAME_NOT_WORKING ) // custom VFD: one alphanumeric 22-char row, one graphics-capable row (alpha row can also do bar graphs) |
| 471 | 473 | CONS( 1989, vfx, 0, 0, vfx, vfx, common, "Ensoniq", "VFX", GAME_NOT_WORKING ) // 2x40 VFD |
| 472 | 474 | CONS( 1989, vfxsd, 0, 0, vfxsd, vfx, common, "Ensoniq", "VFX-SD", GAME_NOT_WORKING ) // 2x40 VFD |
| 473 | 475 | CONS( 1990, sd1, 0, 0, vfxsd, vfx, common, "Ensoniq", "SD-1", GAME_NOT_WORKING ) // 2x40 VFD |
| 474 | 476 | CONS( 1990, sd132, 0, 0, vfxsd, vfx, common, "Ensoniq", "SD-1 32", GAME_NOT_WORKING ) // 2x40 VFD |
| 475 | 477 | CONS( 1990, sq1, 0, 0, sq1, vfx, sq1, "Ensoniq", "SQ-1", GAME_NOT_WORKING ) // LCD of some sort |
| 476 | | CONS( 1990, eps16, 0, 0, eps16, vfx, eps16, "Ensoniq", "EPS-16 Plus", GAME_NOT_WORKING ) // custom VFD: one alphanumeric 22-char row, one graphics-capable row (alpha row can also do bar graphs) |
| 477 | 478 | |