trunk/src/mame/drivers/cobra.cpp
| r252983 | r252984 | |
| 493 | 493 | public: |
| 494 | 494 | cobra_jvs(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| 495 | 495 | |
| 496 | | DECLARE_WRITE_LINE_MEMBER(coin_1_w); |
| 497 | | DECLARE_WRITE_LINE_MEMBER(coin_2_w); |
| 498 | | |
| 499 | 496 | protected: |
| 500 | 497 | virtual bool switches(UINT8 *&buf, UINT8 count_players, UINT8 bytes_per_switch) override; |
| 501 | 498 | virtual bool coin_counters(UINT8 *&buf, UINT8 count) override; |
| 502 | | virtual void function_list(UINT8 *&buf) override; |
| 503 | | |
| 504 | | private: |
| 505 | | int m_coin_counter[2]; |
| 506 | 499 | }; |
| 507 | 500 | |
| 508 | 501 | const device_type COBRA_JVS = &device_creator<cobra_jvs>; |
| r252983 | r252984 | |
| 510 | 503 | cobra_jvs::cobra_jvs(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 511 | 504 | : jvs_device(mconfig, COBRA_JVS, "JVS (COBRA)", tag, owner, clock, "cobra_jvs", __FILE__) |
| 512 | 505 | { |
| 513 | | m_coin_counter[0] = 0; |
| 514 | | m_coin_counter[1] = 0; |
| 515 | 506 | } |
| 516 | 507 | |
| 517 | | WRITE_LINE_MEMBER(cobra_jvs::coin_1_w) |
| 518 | | { |
| 519 | | if(state) |
| 520 | | m_coin_counter[0]++; |
| 521 | | } |
| 522 | | |
| 523 | | WRITE_LINE_MEMBER(cobra_jvs::coin_2_w) |
| 524 | | { |
| 525 | | if(state) |
| 526 | | m_coin_counter[1]++; |
| 527 | | } |
| 528 | | |
| 529 | | void cobra_jvs::function_list(UINT8 *&buf) |
| 530 | | { |
| 531 | | // SW input - 2 players, 13 bits |
| 532 | | *buf++ = 0x01; *buf++ = 2; *buf++ = 13; *buf++ = 0; |
| 533 | | |
| 534 | | // Coin input - 2 slots |
| 535 | | *buf++ = 0x02; *buf++ = 2; *buf++ = 0; *buf++ = 0; |
| 536 | | |
| 537 | | // Analog input - 8 channels |
| 538 | | *buf++ = 0x03; *buf++ = 8; *buf++ = 16; *buf++ = 0; |
| 539 | | |
| 540 | | // Driver out - 6 channels |
| 541 | | *buf++ = 0x12; *buf++ = 6; *buf++ = 0; *buf++ = 0; |
| 542 | | } |
| 543 | | |
| 544 | 508 | bool cobra_jvs::switches(UINT8 *&buf, UINT8 count_players, UINT8 bytes_per_switch) |
| 545 | 509 | { |
| 546 | 510 | #if LOG_JVS |
| r252983 | r252984 | |
| 574 | 538 | if (count > 2) |
| 575 | 539 | return false; |
| 576 | 540 | |
| 577 | | *buf++ = m_coin_counter[0] >> 8; *buf++ = m_coin_counter[0]; |
| 541 | *buf++ = 0x00; |
| 542 | *buf++ = 0x01; |
| 578 | 543 | |
| 579 | | if(count > 1) |
| 580 | | *buf++ = m_coin_counter[1] >> 8; *buf++ = m_coin_counter[1]; |
| 581 | | |
| 582 | 544 | return true; |
| 583 | 545 | } |
| 584 | 546 | |
| r252983 | r252984 | |
| 782 | 744 | DECLARE_DRIVER_INIT(racjamdx); |
| 783 | 745 | DECLARE_DRIVER_INIT(bujutsu); |
| 784 | 746 | DECLARE_DRIVER_INIT(cobra); |
| 785 | | virtual void machine_start() override; |
| 786 | 747 | virtual void machine_reset() override; |
| 787 | 748 | virtual void video_start() override; |
| 788 | 749 | UINT32 screen_update_cobra(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); |
| r252983 | r252984 | |
| 2288 | 2249 | // GFX register select |
| 2289 | 2250 | m_gfx_register_select = w[3]; |
| 2290 | 2251 | |
| 2291 | | // printf("GFX: register select %08X\n", m_gfx_register_select); |
| 2252 | printf("GFX: register select %08X\n", m_gfx_register_select); |
| 2292 | 2253 | } |
| 2293 | 2254 | else if (w2 == 0x10500018) |
| 2294 | 2255 | { |
| 2295 | 2256 | // register write to the register selected above? |
| 2296 | 2257 | // 64-bit registers, top 32-bits in word 2, low 32-bit in word 3 |
| 2297 | | // printf("GFX: register write %08X: %08X %08X\n", m_gfx_register_select, w[2], w[3]); |
| 2258 | printf("GFX: register write %08X: %08X %08X\n", m_gfx_register_select, w[2], w[3]); |
| 2298 | 2259 | |
| 2299 | 2260 | gfx_write_reg(((UINT64)(w[2]) << 32) | w[3]); |
| 2300 | 2261 | } |
| r252983 | r252984 | |
| 3135 | 3096 | |
| 3136 | 3097 | INPUT_PORTS_START( cobra ) |
| 3137 | 3098 | PORT_START("TEST") |
| 3138 | | PORT_SERVICE_NO_TOGGLE( 0x80, IP_ACTIVE_HIGH) /* Test Button */ |
| 3139 | | PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 3140 | | PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 3141 | | PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN ) |
| 3142 | | PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 3143 | | PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 3144 | | PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 3145 | | PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 3099 | PORT_SERVICE_NO_TOGGLE( 0x80, IP_ACTIVE_LOW) /* Test Button */ |
| 3100 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Service") PORT_CODE(KEYCODE_7) |
| 3101 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE2 ) |
| 3102 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 3103 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 3104 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 3105 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 3106 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 3146 | 3107 | |
| 3147 | 3108 | PORT_START("P1") |
| 3148 | | PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_START1 ) |
| 3149 | | PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_NAME("P1 Service") PORT_CODE(KEYCODE_7) |
| 3150 | | PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) |
| 3151 | | PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) |
| 3152 | | PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) |
| 3153 | | PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) |
| 3154 | | PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) |
| 3155 | | PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) |
| 3156 | | PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(1) |
| 3157 | | PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1) |
| 3158 | | PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(1) |
| 3159 | | PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(1) |
| 3109 | PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START1 ) |
| 3110 | PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_PLAYER(1) |
| 3111 | PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) |
| 3112 | PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) |
| 3113 | PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) |
| 3114 | PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) |
| 3115 | PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) |
| 3116 | PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) |
| 3117 | PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) |
| 3118 | PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) |
| 3119 | PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) |
| 3120 | PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1) |
| 3160 | 3121 | PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_PLAYER(1) |
| 3161 | 3122 | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_PLAYER(1) |
| 3162 | 3123 | PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_PLAYER(1) |
| 3163 | 3124 | PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_PLAYER(1) |
| 3164 | 3125 | |
| 3165 | 3126 | PORT_START("P2") |
| 3166 | | PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_START2 ) |
| 3167 | | PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_NAME("P2 Service") PORT_CODE(KEYCODE_8) |
| 3168 | | PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) |
| 3169 | | PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) |
| 3170 | | PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) |
| 3171 | | PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) |
| 3172 | | PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) |
| 3173 | | PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2) |
| 3174 | | PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(2) |
| 3175 | | PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2) |
| 3176 | | PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(2) |
| 3177 | | PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(2) |
| 3178 | | PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(2) |
| 3179 | | PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(2) |
| 3180 | | PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(2) |
| 3181 | | PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(2) |
| 3182 | | |
| 3183 | | PORT_START("COINS") |
| 3184 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_COIN1) PORT_WRITE_LINE_DEVICE_MEMBER("cobra_jvs1", cobra_jvs, coin_1_w) |
| 3185 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_COIN2) PORT_WRITE_LINE_DEVICE_MEMBER("cobra_jvs1", cobra_jvs, coin_2_w) |
| 3127 | PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START2 ) |
| 3128 | PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_PLAYER(2) |
| 3129 | PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) |
| 3130 | PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) |
| 3131 | PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) |
| 3132 | PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) |
| 3133 | PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) |
| 3134 | PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) |
| 3135 | PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) |
| 3136 | PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) |
| 3137 | PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2) |
| 3138 | PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(2) |
| 3139 | PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_PLAYER(2) |
| 3140 | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_PLAYER(2) |
| 3141 | PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_PLAYER(2) |
| 3142 | PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_PLAYER(2) |
| 3186 | 3143 | INPUT_PORTS_END |
| 3187 | 3144 | |
| 3188 | 3145 | WRITE_LINE_MEMBER(cobra_state::ide_interrupt) |
| r252983 | r252984 | |
| 3207 | 3164 | } |
| 3208 | 3165 | } |
| 3209 | 3166 | |
| 3210 | | void cobra_state::machine_start() |
| 3211 | | { |
| 3212 | | /* configure fast RAM regions for DRC */ |
| 3213 | | m_maincpu->ppcdrc_add_fastram(0x00000000, 0x003fffff, FALSE, m_main_ram); |
| 3214 | | |
| 3215 | | m_subcpu->ppcdrc_add_fastram(0x00000000, 0x003fffff, FALSE, m_sub_ram); |
| 3216 | | |
| 3217 | | m_gfxcpu->ppcdrc_add_fastram(0x00000000, 0x003fffff, FALSE, m_gfx_ram0); |
| 3218 | | m_gfxcpu->ppcdrc_add_fastram(0x07c00000, 0x07ffffff, FALSE, m_gfx_ram1); |
| 3219 | | } |
| 3220 | | |
| 3221 | 3167 | void cobra_state::machine_reset() |
| 3222 | 3168 | { |
| 3223 | 3169 | m_sub_interrupt = 0xff; |
| r252983 | r252984 | |
| 3300 | 3246 | MCFG_K001604_PALETTE("palette") |
| 3301 | 3247 | |
| 3302 | 3248 | MCFG_DEVICE_ADD("cobra_jvs_host", COBRA_JVS_HOST, 4000000) |
| 3303 | | MCFG_JVS_DEVICE_ADD("cobra_jvs1", COBRA_JVS, "cobra_jvs_host") |
| 3304 | | MCFG_JVS_DEVICE_ADD("cobra_jvs2", COBRA_JVS, "cobra_jvs_host") |
| 3305 | | MCFG_JVS_DEVICE_ADD("cobra_jvs3", COBRA_JVS, "cobra_jvs_host") |
| 3249 | MCFG_JVS_DEVICE_ADD("cobra_jvs", COBRA_JVS, "cobra_jvs_host") |
| 3306 | 3250 | |
| 3307 | 3251 | MACHINE_CONFIG_END |
| 3308 | 3252 | |
trunk/src/mame/drivers/didact.cpp
| r252983 | r252984 | |
| 1 | 1 | // license:BSD-3-Clause |
| 2 | 2 | // copyright-holders:Joakim Larsson Edstrom |
| 3 | 3 | /* |
| 4 | * The Didact Esselte 100 CPU board |
| 4 | 5 | *__________________________________________________________________________________________________________ |
| 5 | | * The Didact Esselte 100 CPU board | |
| 6 | * | |
| 6 | 7 | *__________________________________________________________________________________________________________| |
| 7 | 8 | * |
| 8 | | * ___________________________________________________________________________________________________________ _____________________________________________________ |
| 9 | | * | The Didact Mp68A CPU board, by Anders Andersson 1979 | |The Didact Mp68A keypad/display PB6 +oooo+ | |
| 10 | | * | +------+ +-------+ +--+ | | by Anders Andersson 1979 +-------+ |cass| | |
| 11 | | * | | 7402 | | 74490 | | | +-------+ +--+ | | +--+ | 9368 | +----+ +--+| |
| 12 | | * | +-------+ +------+ +-------+ | | | | | | | |+-------+ 2x5082-|B | +-------+ | || |
| 13 | | * | | | 2112 2112 | | | EXP | | | | || 74132 | 7433|CD| 145 PA0-PA3 |E || |
| 14 | | * | | ROM | +--+ +--+ +--+ | ANS | |P | | |+-------+ |DI| +--+ 132 |X || |
| 15 | | * | | 7641 | | | | | | ION | |I | | |+------+------+ | S| | | +--+ |P || |
| 16 | | * | | | |A | |B | +-----+ | BUSES | |A | | || |SHIFT | | P| | | PA4-PA6 | | |A || |
| 17 | | * | | 512x8 | | | | | | | | (2 x) | | | | || RES |(led) | +--+ | | | | |N || |
| 18 | | * | | | +--+ +--+ | | | FOR | |A | | || | * | +--+ | | |S || |
| 19 | | * | +-------+ RAMS 4x256x4 | | | | | | | |+------+------+------+------+ +--+ |I || |
| 20 | | * | ROMS 2x512x8 2112 2112 | | | KEY | |E | | || | | | | |O || |
| 21 | | * | +-------+ +--+ +--+ |CPU | | BOARD | +------+ |X | | || ADR | RUN | SST | REG | |N || |
| 22 | | * | | | | | | | |6800 | | | | | |P | | || 0 | 4 | 8 | C | | || |
| 23 | | * | | ROM | |A | |B | | | | AND | | | |A | | |+------+------+------+------+ |C || |
| 24 | | * | | 7641 | | | | | | | | | | | |N | | || | | | | |O || |
| 25 | | * | | | +--+ +--+ | | | I/O | | 6820 | |S | | || STA | STO | BPR | BPS | |N || |
| 26 | | * | | 512x8 | 512 bytes RAM | | | BOARDS| | PIA | |I | | || 1 | 5 | 9 | D | |N || |
| 27 | | * | +-------+ | | | | | #1 | |O | +-----+ |+------+------+------+------+ +------+ |E || |
| 28 | | * | 1024 bytes ROM | | | | | | |N | | | || | | | | | | |C || |
| 29 | | * | +-----+ | | | | | | PIA A | | || EXF | EXB | MOV | PRM | | | |T || |
| 30 | | * | 7402 7412 | | | | |B | EXPANSION| | || 2 | 6 | A | E | | | |O || |
| 31 | | * | +--+ +--+ | | | | |U | CONNECTOR| | |+------+------+------+------+ | 6820 | |R || |
| 32 | | * | | | | | | | | | |S | | _| || | | | | | PIA | | || |
| 33 | | * | | | | | | | | | | | J4 | | || CLR | REL | REC | PLA | | #2 | | || |
| 34 | | * | | | | | | | +------+ | | | |_ || 3 | 7 | B | F | | | | || |
| 35 | | * | +--+ +--+ +--------+ | | | | | | |+------+------+------+------+ | | | || |
| 36 | | * | +-+ | 96LS02 | | | | | | | | +-------+ +-------+ +------+ | | | || |
| 37 | | * | R * * * R |T| +--------+ | | | | | | | | 74148 | | 74148 | | 7400 | | | | || |
| 38 | | * | O X A |R| | | | | | | | +-------+ +-------+ +------+ | | +--+| |
| 39 | | * | M * * * M |M| Oscillator circuits +-------+ +--+ | | | PB3 PB0-PB2 | | | |
| 40 | | * | |_| J1 J2 J3 +-----+ | +---------+ +------+ J1 | |
| 41 | | * |____________________________________________________________________________________________________________| |______ | _|||_ |___________________________________| |
| 9 | * The Didact Mikrodator 6802 CPU board by lars Björklund 1983 |
| 10 | *__________________________________________________________________________________________________________ |
| 11 | * | |
| 12 | *__________________________________________________________________________________________________________| |
| 42 | 13 | * |
| 43 | | * _____________________________________________________________________________________________ ___________________________________________________________________________ |
| 44 | | * |The Didact Mikrodator 6802 CPU board by Lars Björklund 1983 ( ) | |The Didact Mikrodator 6802 TB16 board by Lars Björklund 1983 | |
| 45 | | * | +----= | | +-|||||||-+ ______ | |
| 46 | | * | | = | | CA2 Tx |terminal | | () | | |
| 47 | | * | | = | | PA7 Rx +---------+ +----------+ C1nF,<=R18k| | | |
| 48 | | * | Photo of CPU board mainly covered by TB16 Keypad/Display board +--- = | | CA1 DTR +-----------+ | | CB2->CB1 | E | | |
| 49 | | * | | | PA4-PA6 | | 1 | BCD | +----+ | X | | |
| 50 | | * | | | ------->| 74LS145 | | digit 5 | |LS | | P | | |
| 51 | | * | | | +-----------+ |----------| | 122| | A | | |
| 52 | | * | +-----=| | | | | | | | N | | |
| 53 | | * | +-------+ | =| |------ +--------+ | 2 | BCD | | | | S | | |
| 54 | | * | | | | =| | RES* | SHIFT | LED( ) | | digit 4 | | | | I | | |
| 55 | | * | | | | =| | | '*' | CA2 v |----------| +----+ | O | | |
| 56 | | * | | 6821 | | =| | PA3 |PA7 PA2 | PA1 PA0 | | +----| N | | |
| 57 | | * | | PIA | | =| |----|--+-----|--+--|-----+--|---+ 3 | | PB0-|LS | | | |
| 58 | | * | | | | =| | v | v | v | v | | BCD | PB7| 244| C | | |
| 59 | | * | | | | =| | ADR | RUN | SST | CON | 1 | digit 3 | --->| | O | | |
| 60 | | * | | | | =| | 0 | 4 | 8 | C | |----------| | | N | | |
| 61 | | * | | | | =| |-------+--------+--------+------+ | |<-------| | N | | |
| 62 | | * | | | | =| | | | | | 4 | | +----| E | | |
| 63 | | * | | | | =| | STA | BPS | USERV | | 2 | BCD | | C | | |
| 64 | | * | | | | =| | 1 | 5 | 9 | D | | digit 2 | | T | | |
| 65 | | * | | | | =| |-------+--------+--------+------+ |----------| | O | | |
| 66 | | * | | | | =| | | | | | | | | R | | |
| 67 | | * | | | | =| | EXF | EXB | MOV | LOAD | 3 5 | BCD | | | | |
| 68 | | * | | | | =| | 2 | 6 | A | E | | digit 1 | | | | |
| 69 | | * | +-------+ | =| |-------+--------+--------+------+ |----------| | | | |
| 70 | | * | | =| | | | | | | | | | | |
| 71 | | * | +-----=| | CLR | SP | USERJ | FLAG | 4 6 | BCD | | | | |
| 72 | | * | | | 3 | 7 | B | F | | digit 0 | | () | | |
| 73 | | * | | |-------+--------+--------+------+ +----------+ +------+ | |
| 74 | | * | | | | |
| 75 | | * | | | | |
| 76 | | * |____________________________________________________________________________________________| |___________________________________________________________________________| |
| 14 | * The Didact Mp68A CPU board, by Anders Andersson 1979 |
| 15 | *__________________________________________________________________________________________________________ |
| 16 | * 74138 | |
| 17 | * +------+ +-------+ +--+ | |
| 18 | * | 7402 | | 74490 | | | +-------+ +--+ | |
| 19 | * +-------+ +------+ +-------+ | | | | | | | |
| 20 | * | | 2112 2112 | | | EXP | | | | |
| 21 | * | ROM | +--+ +--+ +--+ | ANS | |P | | |
| 22 | * | 7641 | | | | | | ION | |I | | |
| 23 | * | | |A | |B | +-----+ | BUSES | |A | | |
| 24 | * | 512x8 | | | | | | | | (2 x) | | | | |
| 25 | * | | +--+ +--+ | | | FOR | |A | | |
| 26 | * +-------+ RAMS 4x256x4 | | | | | | | |
| 27 | * ROMS 2x512x8 2112 2112 | | | KEY | |E | | |
| 28 | * +-------+ +--+ +--+ |CPU | | BOARD | +------+ |X | | |
| 29 | * | | | | | | |6800 | | | | | |P | | |
| 30 | * | ROM | |A | |B | | | | AND | | | |A | | |
| 31 | * | 7641 | | | | | | | | | | | |N | | |
| 32 | * | | +--+ +--+ | | | I/O | | 6820 | |S | | |
| 33 | * | 512x8 | 512 bytes RAM | | | BOARDS| | PIA | |I | | |
| 34 | * +-------+ | | | | | #1 | |O | +-----+ |
| 35 | * 1024 bytes ROM | | | | | | |N | | | |
| 36 | * +-----+ | | | | | | PIA A | | |
| 37 | * 7402 7412 | | | | |B | EXPANSION| | |
| 38 | * +--+ +--+ | | | | |U | CONNECTOR| | |
| 39 | * | | | | | | | | |S | | _| |
| 40 | * | | | | | | | | | | J4 | | |
| 41 | * | | | | | | +------+ | | | |_ |
| 42 | * +--+ +--+ +--------+ | | | | | | |
| 43 | * +-+ | 96LS02 | | | | | | | |
| 44 | * R * * * R |T| +--------+ | | | | | | |
| 45 | * O X A |R| | | | | | | |
| 46 | * M * * * M |M| Oscillator circuits +-------+ +--+ | | |
| 47 | * |_| J1 J2 J3 +-----+ |
| 48 | *__________________________________________________________________________________________________________| |
| 77 | 49 | * |
| 50 | * The Didact Mp68A Keypad and Display board, tb16a, Anders Andersson 1979 |
| 51 | *______________________________________________________ |
| 52 | * +oooo+ | |
| 53 | * 6064 +-------+ |cass| | |
| 54 | * +--+ | 9368 | +----+ +--+| |
| 55 | * +-------+ |B | +-------+ | || |
| 56 | * | 74132 | |CD| 145 |E || |
| 57 | * +-------+ |DI| +--+ 132 |X || |
| 58 | * +------+------+ | S| | | +--+ |P || |
| 59 | * | | | | P| | | | | |A || |
| 60 | * | RES |(led) | +--+ | | | | |N || |
| 61 | * | | * | +--+ | | |S || |
| 62 | * +------+------+------+------+ +--+ |I || |
| 63 | * | | | | | |O || |
| 64 | * | ADR | RUN | SST | REG | |N || |
| 65 | * | 0 | 4 | 8 | C | | || |
| 66 | * +------+------+------+------+ |C || |
| 67 | * | | | | | |O || |
| 68 | * | STA | STO | BPR | BPS | |N || |
| 69 | * | 1 | 5 | 9 | D | |N || |
| 70 | * +------+------+------+------+ +------+ |E || |
| 71 | * | | | | | | | |C || |
| 72 | * | EXF | EXB | MOV | PRM | | | |T || |
| 73 | * | 2 | 6 | A | E | | | |O || |
| 74 | * +------+------+------+------+ | 6820 | |R || |
| 75 | * | | | | | | PIA | | || |
| 76 | * | CLR | REL | REC | PLA | | #2 | | || |
| 77 | * | 3 | 7 | B | F | | | | || |
| 78 | * +------+------+------+------+ | | | || |
| 79 | * +-------+ +-------+ +------+ | | | || |
| 80 | * | 74148 | | 74148 | | 7400 | | | | || |
| 81 | * +-------+ +-------+ +------+ | | +--+| |
| 82 | * | | | |
| 83 | * +---------+ +------+ J1 | |
| 84 | *________| ___ |___________________________________| |
| 85 | * | _|||_ | |
| 86 | * /|_| |_|\ |
| 87 | * |
| 88 | * |
| 78 | 89 | * History of Didact |
| 79 | 90 | *------------------ |
| 80 | 91 | * Didact Läromedelsproduktion was started in Linköping in Sweden by Anders Andersson, Arne Kullbjer and |
| r252983 | r252984 | |
| 87 | 98 | * |
| 88 | 99 | * Misc links about the boards supported by this driver. |
| 89 | 100 | *----------------------------------------------------- |
| 90 | | * http://elektronikforumet.com/forum/viewtopic.php?f=11&t=51424 |
| 101 | * http://www.elektronikforumet.com/forum/viewtopic.php?f=11&t=51424 |
| 91 | 102 | * http://kilroy71.fastmail.fm/gallery/Miscellaneous/20120729_019.jpg |
| 92 | 103 | * http://elektronikforumet.com/forum/download/file.php?id=63988&mode=view |
| 93 | 104 | * http://elektronikforumet.com/forum/viewtopic.php?f=2&t=79576&start=150#p1203915 |
| 94 | 105 | * |
| 95 | | * TODO: |
| 96 | | * Didact designs: mp68a, md6802, md6802v3, Esselte 100, Candela |
| 106 | * TODO: |
| 107 | * Didact designs: mp68a, md6802, Esselte 100, Candela |
| 97 | 108 | * -------------------------------------------------------------------------- |
| 98 | | * - Add PCB layouts OK OK |
| 109 | * - Add PCB layouts OK |
| 99 | 110 | * - Dump ROM:s, OK OK |
| 100 | | * - Keyboard OK OK |
| 101 | | * - Display/CRT OK OK |
| 102 | | * - Clickable Artwork RQ RQ |
| 103 | | * - Sound NA NA |
| 111 | * - Keyboard OK |
| 112 | * - Display/CRT OK |
| 113 | * - Clickable Artwork RQ |
| 114 | * - Sound NA |
| 104 | 115 | * - Cassette i/f |
| 105 | 116 | * - Expansion bus |
| 106 | 117 | * - Expansion overlay |
| 107 | 118 | * |
| 108 | | * - The md6802 has a strange delay in keyboard input that needs to be investigated |
| 109 | | * |
| 110 | 119 | ****************************************************************************/ |
| 111 | 120 | |
| 112 | 121 | #include "emu.h" |
| 113 | 122 | #include "cpu/m6800/m6800.h" |
| 114 | 123 | #include "machine/6821pia.h" // For all boards |
| 115 | 124 | #include "video/dm9368.h" // For the mp68a |
| 116 | | #include "machine/74145.h" // For the md6802 |
| 117 | | // Generated artwork includes |
| 118 | | #include "mp68a.lh" |
| 119 | | #include "md6802.lh" |
| 120 | 125 | |
| 121 | 126 | #define VERBOSE 0 |
| 122 | 127 | |
| 123 | 128 | #define LOG(x) do { if (VERBOSE) logerror x; } while (0) |
| 124 | | #if VERBOSE >= 2 |
| 129 | #if VERBOSE == 2 |
| 125 | 130 | #define logerror printf |
| 126 | 131 | #endif |
| 127 | 132 | |
| r252983 | r252984 | |
| 131 | 136 | #define FUNCNAME __PRETTY_FUNCTION__ |
| 132 | 137 | #endif |
| 133 | 138 | |
| 134 | | /* Didact base class */ |
| 135 | | class didact_state : public driver_device |
| 136 | | { |
| 137 | | public: |
| 138 | | didact_state(const machine_config &mconfig, device_type type, const char * tag) |
| 139 | | : driver_device(mconfig, type, tag) |
| 140 | | ,m_io_line0(*this, "LINE0") |
| 141 | | ,m_io_line1(*this, "LINE1") |
| 142 | | ,m_io_line2(*this, "LINE2") |
| 143 | | ,m_io_line3(*this, "LINE3") |
| 144 | | ,m_io_line4(*this, "LINE4") |
| 145 | | ,m_line0(0) |
| 146 | | ,m_line1(0) |
| 147 | | ,m_line2(0) |
| 148 | | ,m_line3(0) |
| 149 | | ,m_reset(0) |
| 150 | | ,m_shift(0) |
| 151 | | ,m_led(0) |
| 152 | | { } |
| 153 | | required_ioport m_io_line0; |
| 154 | | required_ioport m_io_line1; |
| 155 | | required_ioport m_io_line2; |
| 156 | | required_ioport m_io_line3; |
| 157 | | required_ioport m_io_line4; |
| 158 | | UINT8 m_line0; |
| 159 | | UINT8 m_line1; |
| 160 | | UINT8 m_line2; |
| 161 | | UINT8 m_line3; |
| 162 | | UINT8 m_reset; |
| 163 | | UINT8 m_shift; |
| 164 | | UINT8 m_led; |
| 165 | | TIMER_DEVICE_CALLBACK_MEMBER(scan_artwork); |
| 166 | | }; |
| 167 | | |
| 168 | 139 | /* Esselte 100 driver class */ |
| 169 | | class e100_state : public didact_state |
| 140 | class e100_state : public driver_device |
| 170 | 141 | { |
| 171 | 142 | public: |
| 172 | | e100_state(const machine_config &mconfig, device_type type, const char * tag) |
| 173 | | : didact_state(mconfig, type, tag), |
| 143 | e100_state(const machine_config &mconfig, device_type type, const char *tag) |
| 144 | : driver_device(mconfig, type, tag), |
| 174 | 145 | m_maincpu(*this, "maincpu"), |
| 175 | 146 | m_pia1(*this, "pia1"), |
| 176 | 147 | m_pia2(*this, "pia2") |
| 177 | 148 | { } |
| 178 | 149 | required_device<m6802_cpu_device> m_maincpu; |
| 179 | | virtual void machine_reset() override { m_maincpu->reset(); LOG(("--->%s()\n", FUNCNAME)); }; |
| 150 | |
| 180 | 151 | protected: |
| 181 | 152 | required_device<pia6821_device> m_pia1; |
| 182 | 153 | required_device<pia6821_device> m_pia2; |
| 183 | 154 | }; |
| 184 | 155 | |
| 185 | 156 | /* Mikrodator 6802 driver class */ |
| 186 | | class md6802_state : public didact_state |
| 157 | class md6802_state : public driver_device |
| 187 | 158 | { |
| 188 | 159 | public: |
| 189 | | md6802_state(const machine_config &mconfig, device_type type, const char * tag) |
| 190 | | : didact_state(mconfig, type, tag) |
| 191 | | ,m_maincpu(*this, "maincpu") |
| 192 | | ,m_tb16_74145(*this, "tb16_74145") |
| 193 | | ,m_segments(0) |
| 194 | | ,m_pia1(*this, "pia1") |
| 195 | | ,m_pia2(*this, "pia2") |
| 160 | md6802_state(const machine_config &mconfig, device_type type, const char *tag) |
| 161 | : driver_device(mconfig, type, tag), |
| 162 | m_maincpu(*this, "maincpu"), |
| 163 | m_pia1(*this, "pia1"), |
| 164 | m_pia2(*this, "pia2") |
| 196 | 165 | { } |
| 197 | 166 | required_device<m6802_cpu_device> m_maincpu; |
| 198 | | required_device<ttl74145_device> m_tb16_74145; |
| 199 | | UINT8 m_segments; |
| 200 | | DECLARE_READ8_MEMBER( pia2_kbA_r ); |
| 201 | | DECLARE_WRITE8_MEMBER( pia2_kbA_w ); |
| 202 | | DECLARE_READ8_MEMBER( pia2_kbB_r ); |
| 203 | | DECLARE_WRITE8_MEMBER( pia2_kbB_w ); |
| 204 | | DECLARE_WRITE_LINE_MEMBER( pia2_ca2_w); |
| 205 | 167 | |
| 206 | | virtual void machine_reset() override; |
| 207 | | virtual void machine_start() override; |
| 208 | 168 | protected: |
| 209 | 169 | required_device<pia6821_device> m_pia1; |
| 210 | 170 | required_device<pia6821_device> m_pia2; |
| 211 | 171 | }; |
| 212 | 172 | |
| 213 | | /* Keyboard */ |
| 214 | | READ8_MEMBER( md6802_state::pia2_kbA_r ) |
| 215 | | { |
| 216 | | UINT8 ls145; |
| 217 | | UINT8 pa = 0xff; |
| 218 | 173 | |
| 219 | | // Read out the selected column |
| 220 | | ls145 = m_tb16_74145->read() & 0x0f; |
| 221 | | |
| 222 | | // read out the artwork, line04 is handled by the timer |
| 223 | | m_line0 = m_io_line0->read(); |
| 224 | | m_line1 = m_io_line1->read(); |
| 225 | | m_line2 = m_io_line2->read(); |
| 226 | | m_line3 = m_io_line3->read(); |
| 227 | | |
| 228 | | #if VERBOSE > 2 |
| 229 | | if ((m_line0 | m_line1 | m_line2 | m_line3) != 0) |
| 230 | | LOG(("%s()-->%02x %02x %02x %02x modified by %02x displaying %02x\n", FUNCNAME, m_line0, m_line1, m_line2, m_line3, m_shift, ls145)); |
| 231 | | #endif |
| 232 | | |
| 233 | | // Mask out those rows that has a button pressed |
| 234 | | pa &= ~(((~m_line0 & ls145 ) != 0) ? 1 : 0); |
| 235 | | pa &= ~(((~m_line1 & ls145 ) != 0) ? 2 : 0); |
| 236 | | pa &= ~(((~m_line2 & ls145 ) != 0) ? 4 : 0); |
| 237 | | pa &= ~(((~m_line3 & ls145 ) != 0) ? 8 : 0); |
| 238 | | |
| 239 | | if (m_shift) |
| 240 | | { |
| 241 | | pa &= 0x7f; // Clear shift bit if button being pressed (PA7) to ground (internal pullup) |
| 242 | | LOG( ("SHIFT is pressed\n") ); |
| 243 | | } |
| 244 | | |
| 245 | | #if VERBOSE > 2 |
| 246 | | if ((m_line0 | m_line1 | m_line2 | m_line3) != 0) |
| 247 | | LOG(("%s()-->LINE: 0:%02x 1:%02x 2:%02x 3:%02x SHIFT:%02x LS145:%02x PA:%02x\n", FUNCNAME, m_line0, m_line1, m_line2, m_line3, m_shift, ls145, pa)); |
| 248 | | #endif |
| 249 | | |
| 250 | | return pa; |
| 251 | | } |
| 252 | | |
| 253 | | /* Pull the cathodes low enabling the correct digit and lit the segments held by port B */ |
| 254 | | WRITE8_MEMBER( md6802_state::pia2_kbA_w ) |
| 255 | | { |
| 256 | | UINT8 digit_nbr; |
| 257 | | |
| 258 | | // LOG(("--->%s(%02x)\n", FUNCNAME, data)); |
| 259 | | |
| 260 | | digit_nbr = (data >> 4) & 0x07; |
| 261 | | m_tb16_74145->write( digit_nbr ); |
| 262 | | if (digit_nbr < 6) |
| 263 | | { |
| 264 | | output().set_digit_value( digit_nbr, m_segments); |
| 265 | | } |
| 266 | | } |
| 267 | | |
| 268 | | /* PIA 2 Port B is all outputs to drive the display so it is very unlikelly that this function is called */ |
| 269 | | READ8_MEMBER( md6802_state::pia2_kbB_r ) |
| 270 | | { |
| 271 | | LOG( ("Warning, trying to read from Port B designated to drive the display, please check why\n") ); |
| 272 | | logerror("Warning, trying to read from Port B designated to drive the display, please check why\n"); |
| 273 | | return 0; |
| 274 | | } |
| 275 | | |
| 276 | | /* Port B is fully used ouputting the segment pattern to the display */ |
| 277 | | WRITE8_MEMBER( md6802_state::pia2_kbB_w ) |
| 278 | | { |
| 279 | | // LOG(("--->%s(%02x)\n", FUNCNAME, data)); |
| 280 | | |
| 281 | | /* Store the segment pattern but do not lit up the digit here, done by pulling the correct cathode low on Port A */ |
| 282 | | m_segments = BITSWAP8(data, 0, 4, 5, 3, 2, 1, 7, 6); |
| 283 | | } |
| 284 | | |
| 285 | | WRITE_LINE_MEMBER( md6802_state::pia2_ca2_w ) |
| 286 | | { |
| 287 | | LOG(("--->%s(%02x) LED is connected through resisitor to +5v so logical 0 will lit it\n", FUNCNAME, state)); |
| 288 | | output().set_led_value(m_led, !state); |
| 289 | | m_shift = !state; |
| 290 | | } |
| 291 | | |
| 292 | | void md6802_state::machine_start() |
| 293 | | { |
| 294 | | LOG(("--->%s()\n", FUNCNAME)); |
| 295 | | save_item(NAME(m_shift)); |
| 296 | | save_item(NAME(m_led)); |
| 297 | | save_item(NAME(m_reset)); |
| 298 | | } |
| 299 | | |
| 300 | | void md6802_state::machine_reset() |
| 301 | | { |
| 302 | | LOG(("--->%s()\n", FUNCNAME)); |
| 303 | | m_led = 1; |
| 304 | | m_maincpu->reset(); |
| 305 | | } |
| 306 | | |
| 307 | 174 | /* Didact mp68a driver class */ |
| 308 | | |
| 309 | 175 | // Just a statement that the real mp68a hardware was designed with 6820 and not 6821 |
| 310 | 176 | // They are functional equivalents BUT has different electrical characteristics. |
| 311 | 177 | #define pia6820_device pia6821_device |
| 312 | 178 | #define PIA6820 PIA6821 |
| 313 | | class mp68a_state : public didact_state |
| 179 | class mp68a_state : public driver_device |
| 314 | 180 | { |
| 315 | 181 | public: |
| 316 | | mp68a_state(const machine_config &mconfig, device_type type, const char * tag) |
| 317 | | : didact_state(mconfig, type, tag) |
| 318 | | ,m_maincpu(*this, "maincpu") |
| 182 | mp68a_state(const machine_config &mconfig, device_type type, const char *tag) |
| 183 | : driver_device(mconfig, type, tag) |
| 184 | ,m_maincpu(*this, "maincpu") |
| 185 | ,m_io_line0(*this, "LINE0") |
| 186 | ,m_io_line1(*this, "LINE1") |
| 187 | ,m_io_line2(*this, "LINE2") |
| 188 | ,m_io_line3(*this, "LINE3") |
| 189 | ,m_io_line4(*this, "LINE4") |
| 190 | ,m_line0(0) |
| 191 | ,m_line1(0) |
| 192 | ,m_line2(0) |
| 193 | ,m_line3(0) |
| 194 | ,m_shift(0) |
| 319 | 195 | ,m_digit0(*this, "digit0") |
| 320 | 196 | ,m_digit1(*this, "digit1") |
| 321 | 197 | ,m_digit2(*this, "digit2") |
| r252983 | r252984 | |
| 328 | 204 | |
| 329 | 205 | required_device<m6800_cpu_device> m_maincpu; |
| 330 | 206 | |
| 331 | | // The display segment driver device (there is actually just one, needs rewrite to be correct) |
| 207 | required_ioport m_io_line0; |
| 208 | required_ioport m_io_line1; |
| 209 | required_ioport m_io_line2; |
| 210 | required_ioport m_io_line3; |
| 211 | required_ioport m_io_line4; |
| 212 | UINT8 m_line0; |
| 213 | UINT8 m_line1; |
| 214 | UINT8 m_line2; |
| 215 | UINT8 m_line3; |
| 216 | UINT8 m_shift; |
| 217 | |
| 218 | // The display segment driver device |
| 332 | 219 | required_device<dm9368_device> m_digit0; |
| 333 | 220 | required_device<dm9368_device> m_digit1; |
| 334 | 221 | required_device<dm9368_device> m_digit2; |
| r252983 | r252984 | |
| 342 | 229 | DECLARE_WRITE8_MEMBER( pia2_kbB_w ); |
| 343 | 230 | DECLARE_READ_LINE_MEMBER( pia2_cb1_r ); |
| 344 | 231 | |
| 345 | | virtual void machine_reset() override; |
| 346 | 232 | virtual void machine_start() override; |
| 233 | TIMER_DEVICE_CALLBACK_MEMBER(scan_artwork); |
| 347 | 234 | protected: |
| 348 | 235 | required_device<pia6820_device> m_pia1; |
| 349 | 236 | required_device<pia6820_device> m_pia2; |
| r252983 | r252984 | |
| 358 | 245 | |
| 359 | 246 | WRITE8_MEMBER( mp68a_state::pia2_kbA_w ) |
| 360 | 247 | { |
| 361 | | UINT8 digit_nbr; |
| 248 | UINT8 m_lednum; |
| 362 | 249 | |
| 363 | 250 | #if VERBOSE > 1 |
| 364 | 251 | static UINT8 display[] = {' ',' ',' ',' ',' ',' ',' ',' ','\0'}; |
| r252983 | r252984 | |
| 367 | 254 | |
| 368 | 255 | /* Display memory is at $702 to $708 in AAAADD format (A=address digit, D=Data digit) |
| 369 | 256 | but we are using data read from the port. */ |
| 370 | | digit_nbr = (data >> 4) & 0x07; |
| 257 | m_lednum = (data >> 4) & 0x07; |
| 371 | 258 | |
| 372 | | /* There is actually only one 9368 and a 74145 to drive the cathode of the right digit low */ |
| 373 | | /* This can be emulated by prentending there are one 9368 per digit, at least for now */ |
| 374 | | switch (digit_nbr) |
| 259 | switch (m_lednum) |
| 375 | 260 | { |
| 376 | 261 | case 0: m_digit0->a_w(data & 0x0f); break; |
| 377 | 262 | case 1: m_digit1->a_w(data & 0x0f); break; |
| r252983 | r252984 | |
| 380 | 265 | case 4: m_digit4->a_w(data & 0x0f); break; |
| 381 | 266 | case 5: m_digit5->a_w(data & 0x0f); break; |
| 382 | 267 | case 7: break; // used as an 'unselect' by the ROM between digit accesses. |
| 383 | | default: logerror("Invalid digit index %d\n", digit_nbr); |
| 268 | default: logerror("Wrong digit index %d\n", m_lednum); |
| 384 | 269 | } |
| 385 | 270 | |
| 386 | 271 | #if VERBOSE > 1 |
| r252983 | r252984 | |
| 392 | 277 | READ8_MEMBER( mp68a_state::pia2_kbB_r ) |
| 393 | 278 | { |
| 394 | 279 | UINT8 a012, line, pb; |
| 395 | | |
| 280 | |
| 396 | 281 | LOG(("--->%s %02x %02x %02x %02x %02x => ", FUNCNAME, m_line0, m_line1, m_line2, m_line3, m_shift)); |
| 397 | 282 | |
| 398 | 283 | a012 = 0; |
| r252983 | r252984 | |
| 409 | 294 | } |
| 410 | 295 | |
| 411 | 296 | pb = a012; // A0-A2 -> PB0-PB3 |
| 412 | | |
| 413 | 297 | if (m_shift) |
| 414 | 298 | { |
| 415 | 299 | pb |= 0x80; // Set shift bit (PB7) |
| 416 | 300 | m_shift = 0; // Reset flip flop |
| 417 | | output().set_led_value(m_led, m_shift); |
| 301 | output().set_led_value(0, m_shift); |
| 418 | 302 | LOG( ("SHIFT is released\n") ); |
| 419 | 303 | } |
| 420 | 304 | |
| r252983 | r252984 | |
| 443 | 327 | return (m_line0 | m_line1 | m_line2 | m_line3) != 0 ? 0 : 1; |
| 444 | 328 | } |
| 445 | 329 | |
| 446 | | void mp68a_state::machine_reset() |
| 447 | | { |
| 448 | | LOG(("--->%s()\n", FUNCNAME)); |
| 449 | | m_maincpu->reset(); |
| 450 | | } |
| 451 | | |
| 452 | 330 | void mp68a_state::machine_start() |
| 453 | 331 | { |
| 454 | 332 | LOG(("--->%s()\n", FUNCNAME)); |
| 455 | 333 | |
| 456 | 334 | /* register for state saving */ |
| 457 | 335 | save_item(NAME(m_shift)); |
| 458 | | save_item(NAME(m_led)); |
| 459 | | save_item(NAME(m_reset)); |
| 460 | 336 | } |
| 461 | 337 | |
| 462 | 338 | // This map is derived from info in "TEMAL 100 - teknisk manual Esselte 100" |
| r252983 | r252984 | |
| 465 | 341 | AM_RANGE(0xc000, 0xc3ff) AM_RAM AM_SHARE("videoram") |
| 466 | 342 | AM_RANGE(0xc808, 0xc80b) AM_DEVREADWRITE("pia1", pia6821_device, read, write) |
| 467 | 343 | AM_RANGE(0xc810, 0xc813) AM_DEVREADWRITE("pia2", pia6821_device, read, write) |
| 468 | | AM_RANGE(0xd000, 0xffff) AM_ROM AM_REGION("maincpu", 0xd000) |
| 344 | AM_RANGE(0xd000, 0xffff) AM_ROM AM_REGION("maincpu", 0xd0000) |
| 469 | 345 | ADDRESS_MAP_END |
| 470 | 346 | |
| 471 | 347 | // This address map is traced from schema |
| r252983 | r252984 | |
| 490 | 366 | INPUT_PORTS_END |
| 491 | 367 | |
| 492 | 368 | static INPUT_PORTS_START( md6802 ) |
| 493 | | PORT_START("LINE0") /* KEY ROW 0 */ |
| 494 | | PORT_BIT(0x01, 0x01, IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CHAR('0') |
| 495 | | PORT_BIT(0x02, 0x02, IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1) PORT_CHAR('1') |
| 496 | | PORT_BIT(0x04, 0x04, IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2) PORT_CHAR('2') |
| 497 | | PORT_BIT(0x08, 0x08, IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3) PORT_CHAR('3') |
| 498 | | PORT_BIT(0xf0, 0x00, IPT_UNUSED ) |
| 499 | | |
| 500 | | PORT_START("LINE1") /* KEY ROW 1 */ |
| 501 | | PORT_BIT(0x01, 0x01, IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4) PORT_CHAR('4') |
| 502 | | PORT_BIT(0x02, 0x02, IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5) PORT_CHAR('5') |
| 503 | | PORT_BIT(0x04, 0x04, IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6) PORT_CHAR('6') |
| 504 | | PORT_BIT(0x08, 0x08, IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7) PORT_CHAR('7') |
| 505 | | PORT_BIT(0xf0, 0x00, IPT_UNUSED ) |
| 506 | | |
| 507 | | PORT_START("LINE2") /* KEY ROW 2 */ |
| 508 | | PORT_BIT(0x01, 0x01, IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8) PORT_CHAR('8') |
| 509 | | PORT_BIT(0x02, 0x02, IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9) PORT_CHAR('9') |
| 510 | | PORT_BIT(0x04, 0x04, IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_CHAR('A') |
| 511 | | PORT_BIT(0x08, 0x08, IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('B') |
| 512 | | PORT_BIT(0xf0, 0x00, IPT_UNUSED ) |
| 513 | | |
| 514 | | PORT_START("LINE3") /* KEY ROW 3 */ |
| 515 | | PORT_BIT(0x01, 0x01, IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C) PORT_CHAR('C') |
| 516 | | PORT_BIT(0x02, 0x02, IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D) PORT_CHAR('D') |
| 517 | | PORT_BIT(0x04, 0x04, IPT_KEYBOARD) PORT_NAME("E") PORT_CODE(KEYCODE_E) PORT_CHAR('E') |
| 518 | | PORT_BIT(0x08, 0x08, IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_CHAR('F') |
| 519 | | PORT_BIT(0xf0, 0x00, IPT_UNUSED ) |
| 520 | | |
| 521 | | PORT_START("LINE4") /* Special KEY ROW for reset and Shift/'*' keys */ |
| 522 | | PORT_BIT(0x08, 0x00, IPT_KEYBOARD) PORT_NAME("*") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR('*') |
| 523 | | PORT_BIT(0x04, 0x00, IPT_KEYBOARD) PORT_NAME("Reset") PORT_CODE(KEYCODE_F12) |
| 524 | | PORT_BIT(0xf3, 0x00, IPT_UNUSED ) |
| 525 | 369 | INPUT_PORTS_END |
| 526 | 370 | |
| 527 | 371 | static INPUT_PORTS_START( mp68a ) |
| r252983 | r252984 | |
| 559 | 403 | PORT_BIT(0xf3, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 560 | 404 | INPUT_PORTS_END |
| 561 | 405 | |
| 562 | | TIMER_DEVICE_CALLBACK_MEMBER(didact_state::scan_artwork) |
| 406 | TIMER_DEVICE_CALLBACK_MEMBER(mp68a_state::scan_artwork) |
| 563 | 407 | { |
| 564 | 408 | // LOG(("--->%s()\n", FUNCNAME)); |
| 565 | 409 | |
| r252983 | r252984 | |
| 568 | 412 | { |
| 569 | 413 | LOG( ("RESET is pressed, resetting the CPU\n") ); |
| 570 | 414 | m_shift = 0; |
| 571 | | output().set_led_value(m_led, m_shift); // For mp68a only |
| 572 | | if (m_reset == 0) |
| 573 | | { |
| 574 | | machine_reset(); |
| 575 | | } |
| 576 | | m_reset = 1; // Inhibit multiple resets |
| 415 | output().set_led_value(0, m_shift); |
| 416 | m_maincpu->reset(); |
| 417 | |
| 577 | 418 | } |
| 578 | 419 | |
| 579 | 420 | // Poll the artwork SHIFT/* key |
| 580 | 421 | else if ( (m_io_line4->read() & 0x08) ) |
| 581 | 422 | { |
| 582 | | LOG( ("%s", !m_shift ? "SHIFT is set\n" : "") ); |
| 423 | LOG( ("SHIFT is set\n") ); |
| 583 | 424 | m_shift = 1; |
| 584 | | output().set_led_value(m_led, m_shift); // For mp68a only |
| 425 | output().set_led_value(0, m_shift); |
| 585 | 426 | } |
| 586 | | else |
| 587 | | { |
| 588 | | if (m_reset == 1) |
| 589 | | { |
| 590 | | m_reset = 0; // Enable reset again |
| 591 | | } |
| 592 | | } |
| 593 | 427 | } |
| 594 | 428 | |
| 595 | 429 | static MACHINE_CONFIG_START( e100, e100_state ) |
| r252983 | r252984 | |
| 604 | 438 | static MACHINE_CONFIG_START( md6802, md6802_state ) |
| 605 | 439 | MCFG_CPU_ADD("maincpu", M6802, XTAL_4MHz/4) |
| 606 | 440 | MCFG_CPU_PROGRAM_MAP(md6802_map) |
| 607 | | MCFG_DEFAULT_LAYOUT(layout_md6802) |
| 608 | 441 | |
| 609 | | /* Devices */ |
| 610 | | MCFG_DEVICE_ADD("tb16_74145", TTL74145, 0) |
| 611 | | /* PIA #1 0xA000-0xA003 - used differently by laborations and loaded software */ |
| 442 | /* devices */ |
| 612 | 443 | MCFG_DEVICE_ADD("pia1", PIA6821, 0) |
| 613 | | |
| 614 | | /* PIA #2 Keyboard & Display 0xC000-0xC003 */ |
| 615 | 444 | MCFG_DEVICE_ADD("pia2", PIA6821, 0) |
| 616 | | /* --init----------------------- */ |
| 617 | | /* 0xE007 0xC002 (DDR B) = 0xFF - Port B all outputs and set to 0 (zero) */ |
| 618 | | /* 0xE00B 0xC000 (DDR A) = 0x70 - Port A three outputs and set to 0 (zero) */ |
| 619 | | /* 0xE00F 0xC001 (Control A) = 0x3C - */ |
| 620 | | /* 0xE013 0xC003 (Control B) = 0x3C - */ |
| 621 | | /* --execution-wait for key loop-- */ |
| 622 | | /* 0xE026 0xC000 = (Reading Port A) */ |
| 623 | | /* 0xE033 0xC000 = (Reading Port A) */ |
| 624 | | /* 0xE068 0xC000 (Port A) = 0x60 */ |
| 625 | | /* 0xE08A 0xC002 (Port B) = 0xEE - updating display */ |
| 626 | | /* 0xE090 0xC000 (Port A) = 0x00 - looping in 0x10,0x20,0x30,0x40,0x50 */ |
| 627 | | MCFG_PIA_WRITEPA_HANDLER(WRITE8(md6802_state, pia2_kbA_w)) |
| 628 | | MCFG_PIA_READPA_HANDLER(READ8(md6802_state, pia2_kbA_r)) |
| 629 | | MCFG_PIA_WRITEPB_HANDLER(WRITE8(md6802_state, pia2_kbB_w)) |
| 630 | | MCFG_PIA_READPB_HANDLER(READ8(md6802_state, pia2_kbB_r)) |
| 631 | | MCFG_PIA_CA2_HANDLER(WRITELINE(md6802_state, pia2_ca2_w)) |
| 632 | | MCFG_TIMER_DRIVER_ADD_PERIODIC("artwork_timer", md6802_state, scan_artwork, attotime::from_hz(10)) |
| 633 | 445 | MACHINE_CONFIG_END |
| 634 | 446 | |
| 635 | 447 | static MACHINE_CONFIG_START( mp68a, mp68a_state ) |
| 636 | | // Clock source is based on a N9602N Dual Retriggerable Resettable Monostable Multivibrator oscillator at aprox 505KHz. |
| 637 | | // Trimpot seems broken/stuck at 5K Ohm thu. ROM code 1Ms delay loops suggest 1MHz+ |
| 638 | | MCFG_CPU_ADD("maincpu", M6800, 505000) |
| 448 | MCFG_CPU_ADD("maincpu", M6800, XTAL_4MHz/4) |
| 639 | 449 | MCFG_CPU_PROGRAM_MAP(mp68a_map) |
| 640 | | MCFG_DEFAULT_LAYOUT(layout_mp68a) |
| 641 | 450 | |
| 642 | 451 | /* Devices */ |
| 643 | 452 | /* PIA #1 0x500-0x503 - used differently by laborations and loaded software */ |
| r252983 | r252984 | |
| 649 | 458 | /* 0x0BAF 0x601 (Control A) = 0x30 - CA2 is low and enable DDRA */ |
| 650 | 459 | /* 0x0BB1 0x603 (Control B) = 0x30 - CB2 is low and enable DDRB */ |
| 651 | 460 | /* 0x0BB5 0x600 (DDR A) = 0xFF - Port A all outputs and set to 0 (zero) */ |
| 652 | | /* 0x0BB9 0x602 (DDR B) = 0x50 - Port B two outputs and set to 0 (zero) */ |
| 461 | /* 0x0BB9 0x602 (DDR B) = 0x50 - Port B two outputs and set to 0 (zero9 */ |
| 653 | 462 | /* 0x0BBD 0x601 (Control A) = 0x34 - CA2 is low and lock DDRA */ |
| 654 | 463 | /* 0x0BBF 0x603 (Control B) = 0x34 - CB2 is low and lock DDRB */ |
| 655 | 464 | /* 0x0BC3 0x602 (Port B) = 0x40 - Turn on display via RBI* on */ |
| r252983 | r252984 | |
| 691 | 500 | MCFG_OUTPUT_INDEX(5) |
| 692 | 501 | |
| 693 | 502 | MCFG_TIMER_DRIVER_ADD_PERIODIC("artwork_timer", mp68a_state, scan_artwork, attotime::from_hz(10)) |
| 503 | |
| 694 | 504 | MACHINE_CONFIG_END |
| 695 | 505 | |
| 696 | 506 | // TODO: Get a ROM set |
| r252983 | r252984 | |
| 708 | 518 | ROM_START( md6802 ) // ROM image from http://elektronikforumet.com/forum/viewtopic.php?f=2&t=79576&start=135#p1203640 |
| 709 | 519 | ROM_REGION(0x10000, "maincpu", 0) |
| 710 | 520 | ROM_LOAD( "DIDACT.bin", 0xe000, 0x0800, CRC(50430b1d) SHA1(8e2172a9ae95b04f20aa14177df2463a286c8465) ) |
| 521 | // ROM_LOAD( "md6802-1.bin", 0xf800, 0xf9ff, CRC(0ff53e1f) SHA1(52002ee22c032775dac383d408c44abe9244724f) ) |
| 522 | // ROM_LOAD( "md6802-2.bin", 0xfa00, 0xfbff, CRC(0ff53e1f) SHA1(52002ee22c032775dac383d408c44abe9244724f) ) |
| 523 | // ROM_LOAD( "md6802-3.bin", 0xfc00, 0xfdff, CRC(0ff53e1f) SHA1(52002ee22c032775dac383d408c44abe9244724f) ) |
| 524 | // ROM_LOAD( "md6802-4.bin", 0xfe00, 0xffff, CRC(0ff53e1f) SHA1(52002ee22c032775dac383d408c44abe9244724f) ) |
| 711 | 525 | ROM_END |
| 712 | 526 | |
| 713 | 527 | ROM_START( mp68a ) // ROM image from http://elektronikforumet.com/forum/viewtopic.php?f=2&t=79576&start=135#p1203640 |
| r252983 | r252984 | |
| 719 | 533 | // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS |
| 720 | 534 | COMP( 1979, mp68a, 0, 0, mp68a, mp68a, driver_device, 0, "Didact AB", "mp68a", MACHINE_NO_SOUND_HW ) |
| 721 | 535 | COMP( 1982, e100, 0, 0, e100, e100, driver_device, 0, "Didact AB", "Esselte 100", MACHINE_IS_SKELETON ) |
| 722 | | COMP( 1983, md6802, 0, 0, md6802, md6802, driver_device, 0, "Didact AB", "Mikrodator 6802", MACHINE_NO_SOUND_HW ) |
| 536 | COMP( 1983, md6802, 0, 0, md6802, md6802, driver_device, 0, "Didact AB", "Mikrodator 6802", MACHINE_IS_SKELETON ) |
trunk/src/mame/drivers/fidel6502.cpp
| r252983 | r252984 | |
| 6 | 6 | See drivers/fidelz80.cpp for hardware description |
| 7 | 7 | |
| 8 | 8 | TODO: |
| 9 | | - x |
| 9 | - speech doesn't work |
| 10 | 10 | |
| 11 | 11 | ******************************************************************************/ |
| 12 | 12 | |
| 13 | 13 | #include "emu.h" |
| 14 | 14 | #include "cpu/m6502/m6502.h" |
| 15 | | #include "cpu/m6502/r65c02.h" |
| 16 | | #include "cpu/m6502/m65sc02.h" |
| 17 | 15 | #include "machine/6821pia.h" |
| 18 | | #include "sound/speaker.h" |
| 19 | 16 | |
| 20 | 17 | #include "includes/fidelz80.h" |
| 21 | 18 | |
| 22 | | // internal artwork |
| 23 | | #include "fidel_sc12.lh" |
| 24 | | #include "fidel_fev.lh" |
| 25 | 19 | |
| 26 | | extern const char layout_fidel_vsc[]; // same layout as fidelz80/vsc |
| 27 | 20 | |
| 21 | // same layout of Sensory Chess Challenger |
| 22 | //extern const char layout_vsc[]; |
| 28 | 23 | |
| 29 | 24 | class fidel6502_state : public fidelz80base_state |
| 30 | 25 | { |
| 31 | 26 | public: |
| 32 | 27 | fidel6502_state(const machine_config &mconfig, device_type type, const char *tag) |
| 33 | 28 | : fidelz80base_state(mconfig, type, tag), |
| 34 | | m_6821pia(*this, "6821pia"), |
| 35 | | m_speaker(*this, "speaker") |
| 29 | m_6821pia(*this, "6821pia") |
| 36 | 30 | { } |
| 37 | 31 | |
| 38 | 32 | // devices/pointers |
| 39 | 33 | optional_device<pia6821_device> m_6821pia; |
| 40 | | optional_device<speaker_sound_device> m_speaker; |
| 41 | 34 | |
| 42 | | // model CSC |
| 43 | | void csc_prepare_display(); |
| 44 | | DECLARE_READ8_MEMBER(csc_speech_r); |
| 45 | | DECLARE_WRITE8_MEMBER(csc_pia0_pa_w); |
| 46 | | DECLARE_WRITE8_MEMBER(csc_pia0_pb_w); |
| 47 | | DECLARE_READ8_MEMBER(csc_pia0_pb_r); |
| 48 | | DECLARE_WRITE_LINE_MEMBER(csc_pia0_ca2_w); |
| 49 | | DECLARE_WRITE8_MEMBER(csc_pia1_pa_w); |
| 50 | | DECLARE_WRITE8_MEMBER(csc_pia1_pb_w); |
| 51 | | DECLARE_READ8_MEMBER(csc_pia1_pa_r); |
| 52 | | DECLARE_WRITE_LINE_MEMBER(csc_pia1_ca2_w); |
| 53 | | DECLARE_WRITE_LINE_MEMBER(csc_pia1_cb2_w); |
| 54 | | DECLARE_READ_LINE_MEMBER(csc_pia1_ca1_r); |
| 55 | | DECLARE_READ_LINE_MEMBER(csc_pia1_cb1_r); |
| 35 | UINT16 input_read(int index); |
| 36 | DECLARE_WRITE8_MEMBER( pia0_pa_w ); |
| 37 | DECLARE_WRITE8_MEMBER( pia0_pb_w ); |
| 38 | DECLARE_READ8_MEMBER( pia0_pb_r ); |
| 39 | DECLARE_WRITE_LINE_MEMBER( pia0_ca2_w ); |
| 40 | DECLARE_WRITE8_MEMBER( pia1_pa_w ); |
| 41 | DECLARE_WRITE8_MEMBER( pia1_pb_w ); |
| 42 | DECLARE_READ8_MEMBER( pia1_pa_r ); |
| 43 | DECLARE_WRITE_LINE_MEMBER( pia1_ca2_w ); |
| 44 | DECLARE_WRITE_LINE_MEMBER( pia1_cb2_w ); |
| 45 | DECLARE_READ_LINE_MEMBER( pia1_ca1_r ); |
| 46 | DECLARE_READ_LINE_MEMBER( pia1_cb1_r ); |
| 56 | 47 | |
| 48 | UINT8 m_selector; |
| 57 | 49 | TIMER_DEVICE_CALLBACK_MEMBER(irq_timer); |
| 58 | 50 | |
| 59 | 51 | protected: |
| r252983 | r252984 | |
| 62 | 54 | |
| 63 | 55 | |
| 64 | 56 | |
| 65 | | // Devices, I/O |
| 66 | 57 | |
| 67 | | /****************************************************************************** |
| 68 | | CSC |
| 69 | | ******************************************************************************/ |
| 70 | 58 | |
| 71 | | // misc handlers |
| 72 | | |
| 73 | | void fidel6502_state::csc_prepare_display() |
| 59 | UINT16 fidel6502_state::input_read(int index) |
| 74 | 60 | { |
| 75 | | // 7442 output, also update input mux (9 is unused) |
| 76 | | m_inp_mux = (1 << m_led_select) & 0x1ff; |
| 77 | | |
| 78 | | // 4 7seg leds + H |
| 79 | | for (int i = 0; i < 4; i++) |
| 61 | static const char *const col_tag[] = |
| 80 | 62 | { |
| 81 | | m_display_segmask[i] = 0x7f; |
| 82 | | m_display_state[i] = (m_inp_mux >> i & 1) ? m_7seg_data : 0; |
| 83 | | } |
| 84 | | |
| 85 | | // 8*8 chessboard leds |
| 86 | | for (int i = 0; i < 8; i++) |
| 87 | | m_display_state[i+4] = (m_inp_mux >> i & 1) ? m_led_data : 0; |
| 63 | "IN.0", "IN.1", "IN.2", "IN.3", "IN.4", |
| 64 | "IN.5", "IN.6", "IN.7", "IN.8" |
| 65 | }; |
| 88 | 66 | |
| 89 | | set_display_size(8, 12); |
| 90 | | display_update(); |
| 67 | return ioport(col_tag[index])->read(); |
| 91 | 68 | } |
| 92 | 69 | |
| 93 | | READ8_MEMBER(fidel6502_state::csc_speech_r) |
| 70 | |
| 71 | WRITE8_MEMBER( fidel6502_state::pia0_pa_w ) |
| 94 | 72 | { |
| 95 | | return m_speech_rom[m_speech_bank << 12 | offset]; |
| 96 | | } |
| 73 | UINT8 out_digit = BITSWAP8(data,0,1,5,6,7,2,3,4 ); |
| 97 | 74 | |
| 75 | switch (m_selector) |
| 76 | { |
| 77 | case 0: |
| 78 | output().set_digit_value(0, out_digit & 0x7f); |
| 79 | output().set_value("pm_led", BIT(out_digit, 7)); |
| 80 | break; |
| 81 | case 1: |
| 82 | output().set_digit_value(1, out_digit & 0x7f); |
| 83 | break; |
| 84 | case 2: |
| 85 | output().set_digit_value(2, out_digit & 0x7f); |
| 86 | output().set_value("up_dot", BIT(out_digit, 7)); |
| 87 | break; |
| 88 | case 3: |
| 89 | output().set_digit_value(3, out_digit & 0x7f); |
| 90 | output().set_value("low_dot", BIT(out_digit, 7)); |
| 91 | break; |
| 92 | } |
| 98 | 93 | |
| 99 | | // 6821 PIA 0 |
| 94 | // m_speech->data_w(space, 0, data & 0x3f); |
| 100 | 95 | |
| 101 | | WRITE8_MEMBER(fidel6502_state::csc_pia0_pa_w) |
| 102 | | { |
| 103 | | // d0-d5: TSI C0-C5 |
| 104 | | m_speech->data_w(space, 0, data & 0x3f); |
| 105 | | |
| 106 | | // d0-d7: data for the 4 7seg leds, bits are ABFGHCDE (H is extra led) |
| 107 | | m_7seg_data = BITSWAP8(data,0,1,5,6,7,2,3,4); |
| 108 | | csc_prepare_display(); |
| 96 | // for avoid the digit flashing |
| 97 | m_selector |= 0x80; |
| 109 | 98 | } |
| 110 | 99 | |
| 111 | | WRITE8_MEMBER(fidel6502_state::csc_pia0_pb_w) |
| 100 | WRITE8_MEMBER( fidel6502_state::pia0_pb_w ) |
| 112 | 101 | { |
| 113 | | // d0: speech ROM A12 |
| 114 | | m_speech->force_update(); // update stream to now |
| 115 | | m_speech_bank = data & 1; |
| 116 | | |
| 117 | | // d1: TSI START line |
| 118 | | m_speech->start_w(data >> 1 & 1); |
| 119 | | |
| 120 | | // d4: tone line |
| 121 | | m_speaker->level_w(data >> 4 & 1); |
| 102 | // m_speech->start_w(BIT(data, 1)); |
| 122 | 103 | } |
| 123 | 104 | |
| 124 | | READ8_MEMBER(fidel6502_state::csc_pia0_pb_r) |
| 105 | READ8_MEMBER( fidel6502_state::pia0_pb_r ) |
| 125 | 106 | { |
| 126 | | // d2: printer? |
| 127 | 107 | UINT8 data = 0x04; |
| 128 | 108 | |
| 129 | | // d3: TSI BUSY line |
| 130 | | if (m_speech->busy_r()) |
| 109 | if(m_speech->busy_r()) |
| 131 | 110 | data |= 0x08; |
| 132 | 111 | |
| 133 | | // d5: button row 8 (active low) |
| 134 | | if (!(read_inputs(9) & 0x100)) |
| 135 | | data |= 0x20; |
| 136 | | |
| 137 | | // d6,d7: language switches |
| 138 | | data|=0xc0; |
| 112 | if (m_selector<9) |
| 113 | if (input_read(m_selector) & 0x100) |
| 114 | data |= 0x20; |
| 139 | 115 | |
| 140 | 116 | return data; |
| 141 | 117 | } |
| 142 | 118 | |
| 143 | | WRITE_LINE_MEMBER(fidel6502_state::csc_pia0_ca2_w) |
| 119 | WRITE_LINE_MEMBER( fidel6502_state::pia0_ca2_w ) |
| 144 | 120 | { |
| 145 | | // printer? |
| 146 | 121 | } |
| 147 | 122 | |
| 148 | | |
| 149 | | // 6821 PIA 1 |
| 150 | | |
| 151 | | READ8_MEMBER(fidel6502_state::csc_pia1_pa_r) |
| 123 | WRITE8_MEMBER( fidel6502_state::pia1_pa_w ) |
| 152 | 124 | { |
| 153 | | // d0-d5: button row 0-5 (active low) |
| 154 | | return (read_inputs(9) & 0x3f) ^ 0xff; |
| 125 | m_selector = (m_selector & 0x0c) | ((data>>6) & 0x03); |
| 155 | 126 | } |
| 156 | 127 | |
| 157 | | WRITE8_MEMBER(fidel6502_state::csc_pia1_pa_w) |
| 128 | WRITE8_MEMBER( fidel6502_state::pia1_pb_w ) |
| 158 | 129 | { |
| 159 | | // d6,d7: 7442 A0,A1 |
| 160 | | m_led_select = (m_led_select & ~3) | (data >> 6 & 3); |
| 161 | | csc_prepare_display(); |
| 130 | static const char *const row_tag[] = |
| 131 | { |
| 132 | "led_a", "led_b", "led_c", "led_d", |
| 133 | "led_e", "led_f", "led_g", "led_h" |
| 134 | }; |
| 135 | |
| 136 | if (m_selector < 8) |
| 137 | for (int i=0; i<8; i++) |
| 138 | output().set_indexed_value(row_tag[m_selector], i+1, BIT(data, 7-i)); |
| 162 | 139 | } |
| 163 | 140 | |
| 164 | | WRITE8_MEMBER(fidel6502_state::csc_pia1_pb_w) |
| 141 | READ8_MEMBER( fidel6502_state::pia1_pa_r ) |
| 165 | 142 | { |
| 166 | | // d0-d7: led row data |
| 167 | | m_led_data = data; |
| 168 | | csc_prepare_display(); |
| 143 | UINT8 data = 0xff; |
| 144 | |
| 145 | if (m_selector<9) |
| 146 | data = input_read(m_selector); |
| 147 | |
| 148 | return data & 0x3f; |
| 169 | 149 | } |
| 170 | 150 | |
| 171 | | READ_LINE_MEMBER(fidel6502_state::csc_pia1_ca1_r) |
| 151 | WRITE_LINE_MEMBER( fidel6502_state::pia1_ca2_w ) |
| 172 | 152 | { |
| 173 | | // button row 6 (active low) |
| 174 | | return ~read_inputs(9) >> 6 & 1; |
| 153 | m_selector = (m_selector & 0x07) | (state ? 8 : 0); |
| 175 | 154 | } |
| 176 | 155 | |
| 177 | | READ_LINE_MEMBER(fidel6502_state::csc_pia1_cb1_r) |
| 156 | WRITE_LINE_MEMBER( fidel6502_state::pia1_cb2_w ) |
| 178 | 157 | { |
| 179 | | // button row 7 (active low) |
| 180 | | return ~read_inputs(9) >> 7 & 1; |
| 158 | m_selector = (m_selector & 0x0b) | (state ? 4 : 0); |
| 181 | 159 | } |
| 182 | 160 | |
| 183 | | WRITE_LINE_MEMBER(fidel6502_state::csc_pia1_cb2_w) |
| 161 | READ_LINE_MEMBER( fidel6502_state::pia1_ca1_r ) |
| 184 | 162 | { |
| 185 | | // 7442 A2 |
| 186 | | m_led_select = (m_led_select & ~4) | (state ? 4 : 0); |
| 187 | | csc_prepare_display(); |
| 163 | int data = 0x01; |
| 164 | |
| 165 | if (m_selector<9) |
| 166 | data = BIT(input_read(m_selector), 6); |
| 167 | |
| 168 | return data; |
| 188 | 169 | } |
| 189 | 170 | |
| 190 | | WRITE_LINE_MEMBER(fidel6502_state::csc_pia1_ca2_w) |
| 171 | READ_LINE_MEMBER( fidel6502_state::pia1_cb1_r ) |
| 191 | 172 | { |
| 192 | | // 7442 A3 |
| 193 | | m_led_select = (m_led_select & ~8) | (state ? 8 : 0); |
| 194 | | csc_prepare_display(); |
| 195 | | } |
| 173 | int data = 0x01; |
| 196 | 174 | |
| 175 | if (m_selector<9) |
| 176 | data = BIT(input_read(m_selector),7); |
| 197 | 177 | |
| 178 | return data; |
| 179 | } |
| 198 | 180 | |
| 199 | 181 | |
| 200 | 182 | TIMER_DEVICE_CALLBACK_MEMBER(fidel6502_state::irq_timer) |
| r252983 | r252984 | |
| 202 | 184 | m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE); |
| 203 | 185 | } |
| 204 | 186 | |
| 205 | | /****************************************************************************** |
| 206 | | Address Maps |
| 207 | | ******************************************************************************/ |
| 208 | | |
| 209 | | static ADDRESS_MAP_START( csc_map, AS_PROGRAM, 8, fidel6502_state ) |
| 187 | /* Address maps */ |
| 188 | static ADDRESS_MAP_START(csc_mem, AS_PROGRAM, 8, fidel6502_state) |
| 210 | 189 | ADDRESS_MAP_UNMAP_HIGH |
| 211 | | AM_RANGE(0x0000, 0x07ff) AM_RAM AM_MIRROR(0x4000) |
| 212 | | AM_RANGE(0x0800, 0x0bff) AM_RAM AM_MIRROR(0x4400) |
| 213 | | AM_RANGE(0x1000, 0x1003) AM_DEVREADWRITE("pia0", pia6821_device, read, write) AM_MIRROR(0x47fc) |
| 214 | | AM_RANGE(0x1800, 0x1803) AM_DEVREADWRITE("pia1", pia6821_device, read, write) AM_MIRROR(0x47fc) |
| 215 | | AM_RANGE(0x2000, 0x3fff) AM_ROM AM_MIRROR(0x4000) |
| 216 | | AM_RANGE(0xa000, 0xffff) AM_ROM |
| 190 | AM_RANGE( 0x0000, 0x07ff) AM_RAM AM_MIRROR(0x4000) //2K RAM |
| 191 | AM_RANGE( 0x0800, 0x0bff) AM_RAM AM_MIRROR(0x4400) //1K RAM |
| 192 | AM_RANGE( 0x1000, 0x1003) AM_DEVREADWRITE("pia0", pia6821_device, read, write) AM_MIRROR(0x47fc) |
| 193 | AM_RANGE( 0x1800, 0x1803) AM_DEVREADWRITE("pia1", pia6821_device, read, write) AM_MIRROR(0x47fc) |
| 194 | AM_RANGE( 0x2000, 0x3fff) AM_ROM AM_MIRROR(0x4000) |
| 195 | AM_RANGE( 0x8000, 0x9fff) AM_NOP |
| 196 | AM_RANGE( 0xa000, 0xffff) AM_ROM |
| 217 | 197 | ADDRESS_MAP_END |
| 218 | 198 | |
| 219 | | |
| 220 | | static ADDRESS_MAP_START( sc12_map, AS_PROGRAM, 8, fidel6502_state ) |
| 221 | | ADDRESS_MAP_UNMAP_HIGH |
| 222 | | AM_RANGE(0x0000, 0x0fff) AM_RAM |
| 223 | | AM_RANGE(0x8000, 0x9fff) AM_ROM |
| 224 | | AM_RANGE(0xc000, 0xcfff) AM_ROM AM_MIRROR(0x1000) |
| 225 | | AM_RANGE(0xe000, 0xffff) AM_ROM |
| 226 | | ADDRESS_MAP_END |
| 227 | | |
| 228 | | static ADDRESS_MAP_START( fev_map, AS_PROGRAM, 8, fidel6502_state ) |
| 229 | | ADDRESS_MAP_UNMAP_HIGH |
| 230 | | AM_RANGE(0x0000, 0x1fff) AM_RAM |
| 231 | | AM_RANGE(0x8000, 0xffff) AM_ROM |
| 232 | | ADDRESS_MAP_END |
| 233 | | |
| 234 | | |
| 235 | | /****************************************************************************** |
| 236 | | Input Ports |
| 237 | | ******************************************************************************/ |
| 238 | | |
| 199 | /* Input ports */ |
| 239 | 200 | static INPUT_PORTS_START( csc ) |
| 240 | 201 | PORT_START("IN.0") |
| 241 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 242 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 243 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 244 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 245 | | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 246 | | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 247 | | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 248 | | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 249 | | PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Speak") PORT_CODE(KEYCODE_SPACE) |
| 202 | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 203 | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 204 | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 205 | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 206 | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 207 | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 208 | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 209 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 210 | PORT_BIT(0x100,IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Speak") PORT_CODE(KEYCODE_SPACE) |
| 250 | 211 | |
| 251 | 212 | PORT_START("IN.1") |
| 252 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 253 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 254 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 255 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 256 | | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 257 | | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 258 | | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 259 | | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 260 | | PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RV") PORT_CODE(KEYCODE_V) |
| 213 | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 214 | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 215 | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 216 | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 217 | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 218 | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 219 | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 220 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 221 | PORT_BIT(0x100,IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("RV") PORT_CODE(KEYCODE_V) |
| 261 | 222 | |
| 262 | 223 | PORT_START("IN.2") |
| 263 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 264 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 265 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 266 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 267 | | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 268 | | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 269 | | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 270 | | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 271 | | PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("TM") PORT_CODE(KEYCODE_T) |
| 224 | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 225 | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 226 | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 227 | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 228 | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 229 | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 230 | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 231 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 232 | PORT_BIT(0x100,IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("TM") PORT_CODE(KEYCODE_T) |
| 272 | 233 | |
| 273 | 234 | PORT_START("IN.3") |
| 274 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 275 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 276 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 277 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 278 | | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 279 | | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 280 | | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 281 | | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 282 | | PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LV") PORT_CODE(KEYCODE_L) // level |
| 235 | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 236 | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 237 | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 238 | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 239 | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 240 | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 241 | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 242 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 243 | PORT_BIT(0x100,IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("LV") PORT_CODE(KEYCODE_L) |
| 283 | 244 | |
| 284 | 245 | PORT_START("IN.4") |
| 285 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 286 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 287 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 288 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 289 | | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 290 | | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 291 | | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 292 | | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 293 | | PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("DM") PORT_CODE(KEYCODE_M) |
| 246 | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 247 | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 248 | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 249 | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 250 | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 251 | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 252 | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 253 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 254 | PORT_BIT(0x100,IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("DM") PORT_CODE(KEYCODE_M) |
| 294 | 255 | |
| 295 | 256 | PORT_START("IN.5") |
| 296 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 297 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 298 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 299 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 300 | | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 301 | | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 302 | | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 303 | | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 304 | | PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("ST") PORT_CODE(KEYCODE_S) |
| 257 | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 258 | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 259 | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 260 | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 261 | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 262 | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 263 | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 264 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 265 | PORT_BIT(0x100,IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("ST") PORT_CODE(KEYCODE_S) |
| 305 | 266 | |
| 306 | 267 | PORT_START("IN.6") |
| 307 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 308 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 309 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 310 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 311 | | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 312 | | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 313 | | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 314 | | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 315 | | PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_UNUSED) |
| 268 | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 269 | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 270 | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 271 | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 272 | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 273 | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 274 | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 275 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 276 | PORT_BIT(0x100,IP_ACTIVE_LOW, IPT_UNUSED) PORT_UNUSED |
| 316 | 277 | |
| 317 | 278 | PORT_START("IN.7") |
| 318 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 319 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 320 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 321 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 322 | | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 323 | | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 324 | | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 325 | | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) |
| 326 | | PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_UNUSED) |
| 279 | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 280 | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 281 | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 282 | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 283 | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 284 | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 285 | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 286 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) |
| 287 | PORT_BIT(0x100,IP_ACTIVE_LOW, IPT_UNUSED) PORT_UNUSED |
| 327 | 288 | |
| 328 | 289 | PORT_START("IN.8") |
| 329 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Pawn") PORT_CODE(KEYCODE_1) |
| 330 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Rook") PORT_CODE(KEYCODE_2) |
| 331 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Knight") PORT_CODE(KEYCODE_3) |
| 332 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Bishop") PORT_CODE(KEYCODE_4) |
| 333 | | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Queen") PORT_CODE(KEYCODE_5) |
| 334 | | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("King") PORT_CODE(KEYCODE_6) |
| 335 | | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_DEL) // clear |
| 336 | | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RE") PORT_CODE(KEYCODE_R) // reset |
| 337 | | PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_UNUSED) PORT_UNUSED |
| 290 | PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Pawn") PORT_CODE(KEYCODE_1) |
| 291 | PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Rook") PORT_CODE(KEYCODE_2) |
| 292 | PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Knight") PORT_CODE(KEYCODE_3) |
| 293 | PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Bishop") PORT_CODE(KEYCODE_4) |
| 294 | PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Queen") PORT_CODE(KEYCODE_5) |
| 295 | PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("King") PORT_CODE(KEYCODE_6) |
| 296 | PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_DEL) |
| 297 | PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("RE") PORT_CODE(KEYCODE_R) |
| 298 | PORT_BIT(0x100,IP_ACTIVE_LOW, IPT_UNUSED) PORT_UNUSED |
| 338 | 299 | INPUT_PORTS_END |
| 339 | 300 | |
| 340 | 301 | |
| 341 | 302 | void fidel6502_state::machine_start() |
| 342 | 303 | { |
| 343 | 304 | fidelz80base_state::machine_start(); |
| 305 | save_item(NAME(m_selector)); |
| 344 | 306 | } |
| 345 | 307 | |
| 346 | | |
| 347 | | /****************************************************************************** |
| 348 | | Machine Drivers |
| 349 | | ******************************************************************************/ |
| 350 | | |
| 308 | /* Machine driver */ |
| 351 | 309 | static MACHINE_CONFIG_START( csc, fidel6502_state ) |
| 352 | | |
| 353 | 310 | /* basic machine hardware */ |
| 354 | 311 | MCFG_CPU_ADD("maincpu", M6502, 3900000/2) |
| 355 | | MCFG_CPU_PROGRAM_MAP(csc_map) |
| 312 | MCFG_CPU_PROGRAM_MAP(csc_mem) |
| 356 | 313 | |
| 314 | //MCFG_DEFAULT_LAYOUT(layout_vsc) |
| 357 | 315 | |
| 358 | 316 | MCFG_TIMER_DRIVER_ADD_PERIODIC("irq_timer", fidel6502_state, irq_timer, attotime::from_hz(38400/64)) |
| 359 | 317 | |
| 360 | 318 | MCFG_DEVICE_ADD("pia0", PIA6821, 0) |
| 361 | | MCFG_PIA_READPB_HANDLER(READ8(fidel6502_state, csc_pia0_pb_r)) |
| 362 | | MCFG_PIA_WRITEPA_HANDLER(WRITE8(fidel6502_state, csc_pia0_pa_w)) |
| 363 | | MCFG_PIA_WRITEPB_HANDLER(WRITE8(fidel6502_state, csc_pia0_pb_w)) |
| 364 | | MCFG_PIA_CA2_HANDLER(WRITELINE(fidel6502_state, csc_pia0_ca2_w)) |
| 319 | MCFG_PIA_READPB_HANDLER(READ8(fidel6502_state, pia0_pb_r)) |
| 320 | MCFG_PIA_WRITEPA_HANDLER(WRITE8(fidel6502_state, pia0_pa_w)) |
| 321 | MCFG_PIA_WRITEPB_HANDLER(WRITE8(fidel6502_state, pia0_pb_w)) |
| 322 | MCFG_PIA_CA2_HANDLER(WRITELINE(fidel6502_state, pia0_ca2_w)) |
| 365 | 323 | |
| 366 | 324 | MCFG_DEVICE_ADD("pia1", PIA6821, 0) |
| 367 | | MCFG_PIA_READPA_HANDLER(READ8(fidel6502_state, csc_pia1_pa_r)) |
| 368 | | MCFG_PIA_READCA1_HANDLER(READLINE(fidel6502_state, csc_pia1_ca1_r)) |
| 369 | | MCFG_PIA_READCB1_HANDLER(READLINE(fidel6502_state, csc_pia1_cb1_r)) |
| 370 | | MCFG_PIA_WRITEPA_HANDLER(WRITE8(fidel6502_state, csc_pia1_pa_w)) |
| 371 | | MCFG_PIA_WRITEPB_HANDLER(WRITE8(fidel6502_state, csc_pia1_pb_w)) |
| 372 | | MCFG_PIA_CA2_HANDLER(WRITELINE(fidel6502_state, csc_pia1_ca2_w)) |
| 373 | | MCFG_PIA_CB2_HANDLER(WRITELINE(fidel6502_state, csc_pia1_cb2_w)) |
| 325 | MCFG_PIA_READPA_HANDLER(READ8(fidel6502_state, pia1_pa_r)) |
| 326 | MCFG_PIA_READCA1_HANDLER(READLINE(fidel6502_state, pia1_ca1_r)) |
| 327 | MCFG_PIA_READCB1_HANDLER(READLINE(fidel6502_state, pia1_cb1_r)) |
| 328 | MCFG_PIA_WRITEPA_HANDLER(WRITE8(fidel6502_state, pia1_pa_w)) |
| 329 | MCFG_PIA_WRITEPB_HANDLER(WRITE8(fidel6502_state, pia1_pb_w)) |
| 330 | MCFG_PIA_CA2_HANDLER(WRITELINE(fidel6502_state, pia1_ca2_w)) |
| 331 | MCFG_PIA_CB2_HANDLER(WRITELINE(fidel6502_state, pia1_cb2_w)) |
| 374 | 332 | |
| 375 | | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelz80base_state, display_decay_tick, attotime::from_msec(1)) |
| 376 | | MCFG_DEFAULT_LAYOUT(layout_fidel_vsc) |
| 377 | | |
| 378 | 333 | /* sound hardware */ |
| 379 | 334 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 380 | | MCFG_SOUND_ADD("speech", S14001A, 25000) // R/C circuit, around 25khz |
| 381 | | MCFG_S14001A_EXT_READ_HANDLER(READ8(fidel6502_state, csc_speech_r)) |
| 335 | MCFG_SOUND_ADD("speech", S14001A, 25000) // around 25khz |
| 382 | 336 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) |
| 383 | | |
| 384 | | MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) |
| 385 | | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) |
| 386 | 337 | MACHINE_CONFIG_END |
| 387 | 338 | |
| 339 | /* ROM definition */ |
| 340 | ROM_START(csc) |
| 341 | ROM_REGION(0x10000, "maincpu", 0) |
| 342 | ROM_LOAD("101-64109.bin", 0x2000, 0x2000, CRC(08a3577c) SHA1(69fe379d21a9d4b57c84c3832d7b3e7431eec341)) |
| 343 | ROM_LOAD("1025a03.bin", 0xa000, 0x2000, CRC(63982c07) SHA1(5ed4356323d5c80df216da55994abe94ba4aa94c)) |
| 344 | ROM_LOAD("1025a02.bin", 0xc000, 0x2000, CRC(9e6e7c69) SHA1(4f1ed9141b6596f4d2b1217d7a4ba48229f3f1b0)) |
| 345 | ROM_LOAD("1025a01.bin", 0xe000, 0x2000, CRC(57f068c3) SHA1(7d2ac4b9a2fba19556782863bdd89e2d2d94e97b)) |
| 388 | 346 | |
| 389 | | static MACHINE_CONFIG_START( sc12, fidel6502_state ) |
| 347 | ROM_LOAD("74s474.bin", 0xfe00, 0x0200, CRC(4511ba31) SHA1(e275b1739f8c3aa445cccb6a2b597475f507e456)) |
| 390 | 348 | |
| 391 | | /* basic machine hardware */ |
| 392 | | MCFG_CPU_ADD("maincpu", R65C02, XTAL_4MHz) |
| 393 | | MCFG_CPU_PROGRAM_MAP(sc12_map) |
| 394 | | |
| 395 | | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelz80base_state, display_decay_tick, attotime::from_msec(1)) |
| 396 | | MCFG_DEFAULT_LAYOUT(layout_fidel_sc12) |
| 397 | | |
| 398 | | /* sound hardware */ |
| 399 | | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 400 | | MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) |
| 401 | | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) |
| 402 | | MACHINE_CONFIG_END |
| 403 | | |
| 404 | | |
| 405 | | |
| 406 | | static MACHINE_CONFIG_START( fev, fidel6502_state ) |
| 407 | | |
| 408 | | /* basic machine hardware */ |
| 409 | | MCFG_CPU_ADD("maincpu", M65SC02, XTAL_3MHz) // M65SC102 (CMD) |
| 410 | | MCFG_CPU_PROGRAM_MAP(fev_map) |
| 411 | | |
| 412 | | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelz80base_state, display_decay_tick, attotime::from_msec(1)) |
| 413 | | MCFG_DEFAULT_LAYOUT(layout_fidel_fev) |
| 414 | | |
| 415 | | /* sound hardware */ |
| 416 | | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 417 | | MCFG_SOUND_ADD("speech", S14001A, 25000) // R/C circuit, around 25khz |
| 418 | | MCFG_S14001A_EXT_READ_HANDLER(READ8(fidel6502_state, csc_speech_r)) |
| 419 | | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) |
| 420 | | MACHINE_CONFIG_END |
| 421 | | |
| 422 | | |
| 423 | | /****************************************************************************** |
| 424 | | ROM Definitions |
| 425 | | ******************************************************************************/ |
| 426 | | |
| 427 | | ROM_START( csc ) |
| 428 | | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 429 | | ROM_LOAD("101-64109.bin", 0x2000, 0x2000, CRC(08a3577c) SHA1(69fe379d21a9d4b57c84c3832d7b3e7431eec341) ) |
| 430 | | ROM_LOAD("1025a03.bin", 0xa000, 0x2000, CRC(63982c07) SHA1(5ed4356323d5c80df216da55994abe94ba4aa94c) ) |
| 431 | | ROM_LOAD("1025a02.bin", 0xc000, 0x2000, CRC(9e6e7c69) SHA1(4f1ed9141b6596f4d2b1217d7a4ba48229f3f1b0) ) |
| 432 | | ROM_LOAD("1025a01.bin", 0xe000, 0x2000, CRC(57f068c3) SHA1(7d2ac4b9a2fba19556782863bdd89e2d2d94e97b) ) |
| 433 | | ROM_LOAD("74s474.bin", 0xfe00, 0x0200, CRC(4511ba31) SHA1(e275b1739f8c3aa445cccb6a2b597475f507e456) ) |
| 434 | | |
| 435 | | ROM_REGION( 0x2000, "speech", 0 ) |
| 436 | | ROM_LOAD("101-32107.bin", 0x0000, 0x1000, CRC(f35784f9) SHA1(348e54a7fa1e8091f89ac656b4da22f28ca2e44d) ) |
| 437 | | ROM_RELOAD( 0x1000, 0x1000) |
| 349 | ROM_REGION(0x2000, "speech", 0) |
| 350 | ROM_LOAD("101-32107.bin", 0x0000, 0x1000, CRC(f35784f9) SHA1(348e54a7fa1e8091f89ac656b4da22f28ca2e44d)) |
| 438 | 351 | ROM_END |
| 439 | 352 | |
| 440 | | ROM_START( fscc12 ) |
| 441 | | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 442 | | ROM_LOAD("101-1068a01", 0x8000, 0x2000, CRC(63c76cdd) SHA1(e0771c98d4483a6b1620791cb99a7e46b0db95c4) ) // SSS SCM23C65E4 |
| 443 | | ROM_LOAD("tms2732ajl-45", 0xc000, 0x1000, CRC(45070a71) SHA1(8aeecff828f26fb7081902c757559903be272649) ) // TI TMS2732AJL-45 |
| 444 | | ROM_LOAD("tmm2764d-2", 0xe000, 0x2000, CRC(183d3edc) SHA1(3296a4c3bce5209587d4a1694fce153558544e63) ) // Toshiba TMM2764D-2 |
| 445 | | ROM_END |
| 446 | | |
| 447 | 353 | ROM_START( fexcelv ) |
| 448 | 354 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 449 | | ROM_LOAD("101-1080a01.ic5", 0x8000, 0x8000, CRC(846f8e40) SHA1(4e1d5b08d5ff3422192b54fa82cb3f505a69a971) ) |
| 355 | ROM_LOAD("101-1080a01.ic5", 0x0000, 0x8000, CRC(846f8e40) SHA1(4e1d5b08d5ff3422192b54fa82cb3f505a69a971) ) |
| 450 | 356 | |
| 451 | 357 | ROM_REGION( 0x8000, "speech", 0 ) |
| 452 | 358 | ROM_LOAD("101-1081a01.ic2", 0x0000, 0x8000, CRC(c8ae1607) SHA1(6491ce6be60ed77f3dd931c0ca17616f13af943e) ) |
| 453 | 359 | ROM_END |
| 454 | 360 | |
| 455 | | /****************************************************************************** |
| 456 | | Drivers |
| 457 | | ******************************************************************************/ |
| 361 | /* Driver */ |
| 458 | 362 | |
| 459 | | /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */ |
| 460 | | COMP( 1981, csc, 0, 0, csc, csc, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) |
| 363 | /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ |
| 364 | COMP( 1981, csc, 0, 0, csc, csc, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK) |
| 461 | 365 | |
| 462 | | COMP( 1984, fscc12, 0, 0, sc12, csc, driver_device, 0, "Fidelity Electronics", "Sensory Chess Challenger 12-B", MACHINE_NOT_WORKING ) |
| 463 | | |
| 464 | | COMP( 1987, fexcelv, 0, 0, fev, csc, driver_device, 0, "Fidelity Electronics", "Voice Excellence", MACHINE_NOT_WORKING ) |
| 366 | COMP( 1987, fexcelv, 0, 0, csc, csc, driver_device, 0, "Fidelity Electronics", "Voice Excellence", MACHINE_NOT_WORKING ) |
trunk/src/mame/drivers/fidelz80.cpp
| r252983 | r252984 | |
| 5 | 5 | Fidelity Electronics Z80 based board driver |
| 6 | 6 | for 6502 based boards, see drivers/fidel6502.cpp |
| 7 | 7 | |
| 8 | | Detailed RE work done by Kevin 'kevtris' Horton, except where noted |
| 8 | All detailed RE work done by Kevin 'kevtris' Horton |
| 9 | 9 | |
| 10 | 10 | TODO: |
| 11 | 11 | - Figure out why it says the first speech line twice; it shouldn't? |
| r252983 | r252984 | |
| 235 | 235 | PROG - I/O expander |
| 236 | 236 | |
| 237 | 237 | T0 - optical card sensor (high = bright/reflective, low = dark/non reflective) |
| 238 | | T1 - connects to inverter, then nothing? |
| 238 | T1 - connects to inverter, then nothing |
| 239 | 239 | |
| 240 | 240 | |
| 241 | 241 | D8243C I/O expander: |
| r252983 | r252984 | |
| 332 | 332 | PIA 0: |
| 333 | 333 | ------ |
| 334 | 334 | |
| 335 | | PA0 - 7seg segments E, TSI A0 |
| 336 | | PA1 - 7seg segments D, TSI A1 |
| 335 | PA0 - 7seg segments H, TSI A0 |
| 336 | PA1 - 7seg segments G, TSI A1 |
| 337 | 337 | PA2 - 7seg segments C, TSI A2 |
| 338 | | PA3 - 7seg segments H, TSI A3 |
| 339 | | PA4 - 7seg segments G, TSI A4 |
| 338 | PA3 - 7seg segments B, TSI A3 |
| 339 | PA4 - 7seg segments A, TSI A4 |
| 340 | 340 | PA5 - 7seg segments F, TSI A5 |
| 341 | | PA6 - 7seg segments B |
| 342 | | PA7 - 7seg segments A |
| 341 | PA6 - 7seg segments E |
| 342 | PA7 - 7seg segments D |
| 343 | 343 | |
| 344 | 344 | PB0 - A12 on speech ROM (if used... not used on this model, ROM is 4K) |
| 345 | 345 | PB1 - START line on S14001A |
| 346 | 346 | PB2 - white wire |
| 347 | 347 | PB3 - BUSY line from S14001A |
| 348 | 348 | PB4 - Tone line (toggle to make a tone in the speaker) |
| 349 | | PB5 - button row 9 |
| 349 | PB5 - button column I |
| 350 | 350 | PB6 - selection jumper (resistor to 5V) |
| 351 | 351 | PB7 - selection jumper (resistor to ground) |
| 352 | 352 | |
| r252983 | r252984 | |
| 568 | 568 | PA.7 - button row 8 |
| 569 | 569 | |
| 570 | 570 | PB.0 - button column I |
| 571 | | PB.1 - button column J |
| 571 | PB.1 - button row 9 |
| 572 | 572 | PB.2 - Tone line (toggle to make tone in the speaker) |
| 573 | 573 | PB.3 - violet wire |
| 574 | 574 | PB.4 - white wire (and TSI BUSY line) |
| r252983 | r252984 | |
| 593 | 593 | |
| 594 | 594 | ****************************************************************************** |
| 595 | 595 | |
| 596 | | Sensory Chess Challenger (SC12-B) (6502 based -> fidel6502.cpp driver) |
| 597 | | --------------------------------- |
| 598 | | |
| 599 | | RE information by Berger |
| 600 | | |
| 601 | | |
| 602 | | |
| 603 | | |
| 604 | | |
| 605 | | |
| 606 | | ****************************************************************************** |
| 607 | | |
| 608 | 596 | Voice Excellence (FEV, model 6092) (6502 based -> fidel6502.cpp driver) |
| 609 | 597 | ---------------------------------- |
| 610 | 598 | |
| r252983 | r252984 | |
| 875 | 863 | // Devices, I/O |
| 876 | 864 | |
| 877 | 865 | /****************************************************************************** |
| 878 | | CC10 and VCC/UVC |
| 866 | I8255 Device, for VCC/UVC |
| 879 | 867 | ******************************************************************************/ |
| 880 | 868 | |
| 881 | | // misc handlers |
| 882 | | |
| 883 | 869 | void fidelz80_state::vcc_prepare_display() |
| 884 | 870 | { |
| 885 | 871 | // 4 7seg leds |
| r252983 | r252984 | |
| 896 | 882 | return m_speech_rom[m_speech_bank << 12 | offset]; |
| 897 | 883 | } |
| 898 | 884 | |
| 899 | | |
| 900 | | // I8255 PPI |
| 901 | | |
| 902 | 885 | WRITE8_MEMBER(fidelz80_state::vcc_ppi_porta_w) |
| 903 | 886 | { |
| 904 | 887 | // d0-d6: digit segment data, bits are xABCDEFG |
| r252983 | r252984 | |
| 935 | 918 | |
| 936 | 919 | READ8_MEMBER(fidelz80_state::vcc_ppi_portc_r) |
| 937 | 920 | { |
| 938 | | // d0-d3: multiplexed inputs (active low), also language switches |
| 921 | // d0-d3: multiplexed inputs (inverted), also language switches |
| 939 | 922 | UINT8 lan = (~m_led_select & 0x40) ? m_inp_matrix[4]->read() : 0; |
| 940 | 923 | return ~(lan | read_inputs(4)) & 0xf; |
| 941 | 924 | } |
| r252983 | r252984 | |
| 946 | 929 | m_inp_mux = ~data >> 4 & 0xf; |
| 947 | 930 | } |
| 948 | 931 | |
| 949 | | |
| 950 | 932 | // CC10-specific (no speech chip, 1-bit beeper instead) |
| 951 | 933 | |
| 952 | 934 | TIMER_DEVICE_CALLBACK_MEMBER(fidelz80_state::beeper_off_callback) |
| r252983 | r252984 | |
| 969 | 951 | } |
| 970 | 952 | |
| 971 | 953 | |
| 972 | | |
| 973 | 954 | /****************************************************************************** |
| 974 | | VSC |
| 955 | I8255 Device, for VSC |
| 975 | 956 | ******************************************************************************/ |
| 976 | 957 | |
| 977 | | // misc handlers |
| 978 | | |
| 979 | 958 | void fidelz80_state::vsc_prepare_display() |
| 980 | 959 | { |
| 981 | 960 | // 4 7seg leds + H |
| r252983 | r252984 | |
| 993 | 972 | display_update(); |
| 994 | 973 | } |
| 995 | 974 | |
| 996 | | |
| 997 | | // I8255 PPI |
| 998 | | |
| 999 | 975 | WRITE8_MEMBER(fidelz80_state::vsc_ppi_porta_w) |
| 1000 | 976 | { |
| 1001 | 977 | // d0-d5: TSI C0-C5 |
| r252983 | r252984 | |
| 1023 | 999 | } |
| 1024 | 1000 | |
| 1025 | 1001 | |
| 1026 | | // Z80 PIO |
| 1002 | /****************************************************************************** |
| 1003 | Z80 PIO Device, for VSC |
| 1004 | ******************************************************************************/ |
| 1027 | 1005 | |
| 1028 | 1006 | READ8_MEMBER(fidelz80_state::vsc_pio_porta_r) |
| 1029 | 1007 | { |
| r252983 | r252984 | |
| 1054 | 1032 | } |
| 1055 | 1033 | |
| 1056 | 1034 | |
| 1057 | | |
| 1058 | 1035 | /****************************************************************************** |
| 1059 | | VBRC |
| 1036 | I8243 I/O Expander Device, for VBRC |
| 1060 | 1037 | ******************************************************************************/ |
| 1061 | 1038 | |
| 1062 | | // misc handlers |
| 1063 | | |
| 1064 | 1039 | void fidelz80_state::vbrc_prepare_display() |
| 1065 | 1040 | { |
| 1066 | 1041 | // 14seg led segments, d15 is extra led, d14 is unused (tone on prototype?) |
| r252983 | r252984 | |
| 1071 | 1046 | display_matrix(16, 8, outdata, m_led_select); |
| 1072 | 1047 | } |
| 1073 | 1048 | |
| 1074 | | |
| 1075 | | // I8243 I/O expander |
| 1076 | | |
| 1077 | 1049 | WRITE8_MEMBER(fidelz80_state::vbrc_ioexp_port_w) |
| 1078 | 1050 | { |
| 1079 | 1051 | // P4-P7: digit segment data |
| r252983 | r252984 | |
| 1082 | 1054 | } |
| 1083 | 1055 | |
| 1084 | 1056 | |
| 1085 | | // I8041 MCU |
| 1057 | /****************************************************************************** |
| 1058 | I8041 MCU, for VBRC |
| 1059 | ******************************************************************************/ |
| 1086 | 1060 | |
| 1087 | 1061 | WRITE8_MEMBER(fidelz80_state::vbrc_mcu_p1_w) |
| 1088 | 1062 | { |
| r252983 | r252984 | |
| 1094 | 1068 | READ8_MEMBER(fidelz80_state::vbrc_mcu_p2_r) |
| 1095 | 1069 | { |
| 1096 | 1070 | // d0-d3: I8243 P2 |
| 1097 | | // d4-d7: multiplexed inputs (active low) |
| 1071 | // d4-d7: multiplexed inputs (inverted) |
| 1098 | 1072 | return (m_i8243->i8243_p2_r(space, offset) & 0x0f) | (read_inputs(8) << 4 ^ 0xf0); |
| 1099 | 1073 | } |
| 1100 | 1074 | |
| r252983 | r252984 | |
| 1213 | 1187 | static INPUT_PORTS_START( fidelz80 ) |
| 1214 | 1188 | PORT_START("IN.0") |
| 1215 | 1189 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED) |
| 1216 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LV") PORT_CODE(KEYCODE_L) |
| 1190 | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LV") PORT_CODE(KEYCODE_V) |
| 1217 | 1191 | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("A1") PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_A) |
| 1218 | 1192 | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("E5") PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_E) |
| 1219 | 1193 | |
| r252983 | r252984 | |
| 1342 | 1316 | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("King") PORT_CODE(KEYCODE_6) |
| 1343 | 1317 | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_DEL) |
| 1344 | 1318 | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RE") PORT_CODE(KEYCODE_R) |
| 1319 | PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_UNUSED) |
| 1345 | 1320 | |
| 1346 | 1321 | PORT_START("IN.9") // buttons beside the display |
| 1347 | 1322 | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("TM") PORT_CODE(KEYCODE_T) |
| r252983 | r252984 | |
| 1426 | 1401 | MCFG_I8255_IN_PORTC_CB(READ8(fidelz80_state, vcc_ppi_portc_r)) |
| 1427 | 1402 | MCFG_I8255_OUT_PORTC_CB(WRITE8(fidelz80_state, vcc_ppi_portc_w)) |
| 1428 | 1403 | |
| 1429 | | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelz80base_state, display_decay_tick, attotime::from_msec(1)) |
| 1404 | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelz80_state, display_decay_tick, attotime::from_msec(1)) |
| 1430 | 1405 | MCFG_DEFAULT_LAYOUT(layout_fidel_cc) |
| 1431 | 1406 | |
| 1432 | 1407 | /* sound hardware */ |
| r252983 | r252984 | |
| 1450 | 1425 | MCFG_I8255_IN_PORTC_CB(READ8(fidelz80_state, vcc_ppi_portc_r)) |
| 1451 | 1426 | MCFG_I8255_OUT_PORTC_CB(WRITE8(fidelz80_state, vcc_ppi_portc_w)) |
| 1452 | 1427 | |
| 1453 | | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelz80base_state, display_decay_tick, attotime::from_msec(1)) |
| 1428 | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelz80_state, display_decay_tick, attotime::from_msec(1)) |
| 1454 | 1429 | MCFG_DEFAULT_LAYOUT(layout_fidel_vcc) |
| 1455 | 1430 | |
| 1456 | 1431 | /* sound hardware */ |
| r252983 | r252984 | |
| 1466 | 1441 | MCFG_CPU_ADD("maincpu", Z80, XTAL_4MHz) |
| 1467 | 1442 | MCFG_CPU_PROGRAM_MAP(vsc_map) |
| 1468 | 1443 | MCFG_CPU_IO_MAP(vsc_io) |
| 1469 | | MCFG_CPU_PERIODIC_INT_DRIVER(fidelz80base_state, nmi_line_pulse, 600) // 555 timer, approx 600hz |
| 1444 | MCFG_CPU_PERIODIC_INT_DRIVER(fidelz80_state, nmi_line_pulse, 600) // 555 timer, approx 600hz |
| 1470 | 1445 | |
| 1471 | 1446 | MCFG_DEVICE_ADD("ppi8255", I8255, 0) |
| 1472 | 1447 | MCFG_I8255_OUT_PORTA_CB(WRITE8(fidelz80_state, vsc_ppi_porta_w)) |
| r252983 | r252984 | |
| 1478 | 1453 | MCFG_Z80PIO_IN_PB_CB(READ8(fidelz80_state, vsc_pio_portb_r)) |
| 1479 | 1454 | MCFG_Z80PIO_OUT_PB_CB(WRITE8(fidelz80_state, vsc_pio_portb_w)) |
| 1480 | 1455 | |
| 1481 | | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelz80base_state, display_decay_tick, attotime::from_msec(1)) |
| 1456 | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelz80_state, display_decay_tick, attotime::from_msec(1)) |
| 1482 | 1457 | MCFG_DEFAULT_LAYOUT(layout_fidel_vsc) |
| 1483 | 1458 | |
| 1484 | 1459 | /* sound hardware */ |
| r252983 | r252984 | |
| 1503 | 1478 | |
| 1504 | 1479 | MCFG_I8243_ADD("i8243", NOOP, WRITE8(fidelz80_state, vbrc_ioexp_port_w)) |
| 1505 | 1480 | |
| 1506 | | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelz80base_state, display_decay_tick, attotime::from_msec(1)) |
| 1481 | MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelz80_state, display_decay_tick, attotime::from_msec(1)) |
| 1507 | 1482 | MCFG_DEFAULT_LAYOUT(layout_fidel_vbrc) |
| 1508 | 1483 | |
| 1509 | 1484 | /* sound hardware */ |
| r252983 | r252984 | |
| 1520 | 1495 | |
| 1521 | 1496 | ROM_START( cc10 ) |
| 1522 | 1497 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 1523 | | ROM_LOAD( "cc10b", 0x0000, 0x1000, CRC(afd3ca99) SHA1(870d09b2b52ccb8572d69642c59b5215d5fb26ab) ) // 2332 |
| 1498 | ROM_LOAD( "cc10.bin", 0x0000, 0x1000, BAD_DUMP CRC(bb9e6055) SHA1(18276e57cf56465a6352239781a828c5f3d5ba63) ) // second half empty |
| 1524 | 1499 | ROM_END |
| 1525 | 1500 | |
| 1526 | 1501 | |
| r252983 | r252984 | |
| 1622 | 1597 | ******************************************************************************/ |
| 1623 | 1598 | |
| 1624 | 1599 | /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */ |
| 1625 | | COMP( 1978, cc10, 0, 0, cc10, fidelz80, driver_device, 0, "Fidelity Electronics", "Chess Challenger 10 (version B)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) |
| 1600 | COMP( 1978, cc10, 0, 0, cc10, fidelz80, driver_device, 0, "Fidelity Electronics", "Chess Challenger 10 (version B?)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) |
| 1626 | 1601 | COMP( 1979, vcc, 0, 0, vcc, fidelz80, driver_device, 0, "Fidelity Electronics", "Voice Chess Challenger (English)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) |
| 1627 | 1602 | COMP( 1979, vccg, vcc, 0, vcc, fidelz80, driver_device, 0, "Fidelity Electronics", "Voice Chess Challenger (German)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) |
| 1628 | 1603 | COMP( 1979, vccfr, vcc, 0, vcc, fidelz80, driver_device, 0, "Fidelity Electronics", "Voice Chess Challenger (French)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) |
trunk/src/mame/drivers/gaelco2.cpp
| r252983 | r252984 | |
| 15 | 15 | World Rally 2 | 1995 | GAE1 506 | 950510-1 | DS5002FP |
| 16 | 16 | Touch & Go | 1995 | GAE1 501 | 950906 | DS5002FP |
| 17 | 17 | Touch & Go | 1995 | GAE1 501 | 950510-1 | DS5002FP |
| 18 | | Maniac Square | 1996 | GAE1 501 | 940411 | DS5002FP, but unprotected version available |
| 18 | Maniac Square | 1996 | Unknown | ??? | DS5002FP, but unprotected version available |
| 19 | 19 | Snow Board | 1996 | CG-1V 366 | 960419/1 | Lattice IspLSI 1016-80LJ |
| 20 | 20 | Bang! | 1998 | CG-1V 388 | 980921/1 | No |
| 21 | 21 | |
| r252983 | r252984 | |
| 67 | 67 | AM_RANGE(0x30004a, 0x30004b) AM_WRITENOP /* Sound muting? */ |
| 68 | 68 | AM_RANGE(0x320000, 0x320001) AM_READ_PORT("COIN") /* COINSW + SERVICESW */ |
| 69 | 69 | AM_RANGE(0x500000, 0x500001) AM_WRITE(gaelco2_coin_w) /* Coin lockout + counters */ |
| 70 | | AM_RANGE(0xfe0000, 0xfeffff) AM_RAM AM_SHARE("shareram") /* Work RAM */ |
| 70 | AM_RANGE(0xfe0000, 0xfeffff) AM_RAM /* Work RAM */ |
| 71 | 71 | ADDRESS_MAP_END |
| 72 | 72 | |
| 73 | 73 | |
| r252983 | r252984 | |
| 198 | 198 | ROM_FILL( 0x0200000, 0x0080000, 0x00 ) /* to decode GFX as 5bpp */ |
| 199 | 199 | ROM_END |
| 200 | 200 | |
| 201 | | ROM_START( maniacsqa ) // REF 940411 |
| 202 | | ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 code */ |
| 203 | | ROM_LOAD16_BYTE( "MS_U_45.U45", 0x000000, 0x020000, CRC(98f4fdc0) SHA1(1e4d5b0a8a432de885c96319c21280d304b38db0) ) |
| 204 | | ROM_LOAD16_BYTE( "MS_U_44.U44", 0x000001, 0x020000, CRC(1785dd41) SHA1(5c6a65c00248971ce54c8185858393f2c52cc583) ) |
| 205 | | |
| 206 | | ROM_REGION( 0x10000, "mcu", 0 ) /* DS5002FP code */ |
| 207 | | ROM_LOAD( "ms_ds5002fp.bin", 0x00000, 0x8000, NO_DUMP ) |
| 208 | 201 | |
| 209 | | ROM_REGION( 0x0280000, "gfx1", 0 ) /* GFX + Sound */ |
| 210 | | // all 4 roms on a sub-board, no IC positions marked |
| 211 | | ROM_LOAD( "MS1", 0x0000000, 0x0080000, CRC(d8551b2f) SHA1(78b5b07112bd89fed18055180e7cc64f8e0bd0b1) ) /* GFX + Sound */ |
| 212 | | ROM_LOAD( "MS2", 0x0080000, 0x0080000, CRC(b269c427) SHA1(b7f9501529fbb7ee82700cff82740ba5770cf3c5) ) /* GFX + Sound */ |
| 213 | | ROM_LOAD( "MS3", 0x0100000, 0x0020000, CRC(af4ea5e7) SHA1(ffaf09dc2588e32c124e7dd2f86ba009f1b8b176) ) /* GFX only */ |
| 214 | | ROM_FILL( 0x0120000, 0x0060000, 0x00 ) /* Empty */ |
| 215 | | ROM_LOAD( "MS4", 0x0180000, 0x0020000, CRC(578c3588) SHA1(c2e1fba29f21d6822677886fb2d26e050b336c14) ) /* GFX only */ |
| 216 | | ROM_FILL( 0x01a0000, 0x0060000, 0x00 ) /* Empty */ |
| 217 | | ROM_FILL( 0x0200000, 0x0080000, 0x00 ) /* to decode GFX as 5bpp */ |
| 218 | | ROM_END |
| 219 | 202 | |
| 220 | | |
| 221 | | |
| 222 | 203 | /*============================================================================ |
| 223 | 204 | BANG |
| 224 | 205 | ============================================================================*/ |
| r252983 | r252984 | |
| 596 | 577 | ROM_LOAD16_BYTE( "u45", 0x000000, 0x080000, CRC(61c47c56) SHA1(6dd3fc6fdab252e0fb43c0793eef70203c888d7f) ) |
| 597 | 578 | ROM_LOAD16_BYTE( "u44", 0x000001, 0x080000, CRC(f0be007a) SHA1(2112b2e5f020028b50c8f2c72c83c9fee7a78224) ) |
| 598 | 579 | |
| 599 | | ROM_REGION( 0x10000, "mcu", 0 ) /* DS5002FP code */ |
| 600 | | ROM_LOAD( "aligator_ds5002fp.bin", 0x00000, 0x8000, NO_DUMP ) |
| 601 | | |
| 602 | 580 | ROM_REGION( 0x1400000, "gfx1", 0 ) /* GFX + Sound */ |
| 603 | 581 | /* 0x0000000-0x0ffffff filled in in the DRIVER_INIT */ |
| 604 | 582 | ROM_FILL( 0x1000000, 0x0400000, 0x00 ) /* to decode GFX as 5 bpp */ |
| r252983 | r252984 | |
| 853 | 831 | ROM_LOAD16_BYTE( "tg_56", 0x000000, 0x080000, CRC(8ab065f3) SHA1(7664abd7e5f66ffca4a2865bba56ac36bd04f4e9) ) |
| 854 | 832 | ROM_LOAD16_BYTE( "tg_57", 0x000001, 0x080000, CRC(0dfd3f65) SHA1(afb2ce8988c84f211ac71b84928ce4c421de7fee) ) |
| 855 | 833 | |
| 856 | | ROM_REGION( 0x10000, "mcu", 0 ) /* DS5002FP code */ |
| 857 | | ROM_LOAD( "touchgo_ds5002fp.bin", 0x00000, 0x8000, NO_DUMP ) |
| 858 | | |
| 859 | 834 | ROM_REGION( 0x1400000, "gfx1", 0 ) /* GFX + Sound */ |
| 860 | 835 | /* 0x0000000-0x0ffffff filled in in the DRIVER_INIT */ |
| 861 | 836 | ROM_LOAD( "ic69", 0x1000000, 0x0200000, CRC(18bb12d4) SHA1(ee6e7a63b86c56d71e62db0ae5892ab3ab94b0a0) ) /* GFX only */ |
| r252983 | r252984 | |
| 872 | 847 | ROM_LOAD16_BYTE( "tg56.bin", 0x000000, 0x080000, CRC(fd3b4642) SHA1(3cab42aecad5ee641711763c6047b56784c2bcf3) ) |
| 873 | 848 | ROM_LOAD16_BYTE( "tg57.bin", 0x000001, 0x080000, CRC(ee891835) SHA1(9f8c60e5e3696b70f756c3521e10313005053cc7) ) |
| 874 | 849 | |
| 875 | | ROM_REGION( 0x10000, "mcu", 0 ) /* DS5002FP code */ |
| 876 | | ROM_LOAD( "touchgo_ds5002fp.bin", 0x00000, 0x8000, NO_DUMP ) |
| 877 | | |
| 878 | 850 | ROM_REGION( 0x1400000, "gfx1", 0 ) /* GFX + Sound */ |
| 879 | 851 | /* 0x0000000-0x0ffffff filled in in the DRIVER_INIT */ |
| 880 | 852 | ROM_LOAD( "ic69", 0x1000000, 0x0200000, CRC(18bb12d4) SHA1(ee6e7a63b86c56d71e62db0ae5892ab3ab94b0a0) ) /* GFX only */ |
| r252983 | r252984 | |
| 891 | 863 | ROM_LOAD16_BYTE( "tg56", 0x000000, 0x080000, CRC(6d0f5c65) SHA1(00db7a7da3ec1676169aa78fe4f08a7746c3accf) ) |
| 892 | 864 | ROM_LOAD16_BYTE( "tg57", 0x000001, 0x080000, CRC(845787b5) SHA1(27c9910cd9f38328326ecb5cd093dfeb6d4f6244) ) |
| 893 | 865 | |
| 894 | | ROM_REGION( 0x10000, "mcu", 0 ) /* DS5002FP code */ |
| 895 | | ROM_LOAD( "touchgo_ds5002fp.bin", 0x00000, 0x8000, NO_DUMP ) |
| 896 | | |
| 897 | 866 | ROM_REGION( 0x1400000, "gfx1", 0 ) /* GFX + Sound */ |
| 898 | 867 | /* 0x0000000-0x0ffffff filled in in the DRIVER_INIT */ |
| 899 | 868 | ROM_LOAD( "ic69", 0x1000000, 0x0200000, CRC(18bb12d4) SHA1(ee6e7a63b86c56d71e62db0ae5892ab3ab94b0a0) ) /* GFX only */ |
| r252983 | r252984 | |
| 1356 | 1325 | ROM_LOAD16_BYTE( "wr2.64", 0x000000, 0x080000, CRC(4cdf4e1e) SHA1(a3b3ff4a70336b61c7bba5d518527bf4bd901867) ) |
| 1357 | 1326 | ROM_LOAD16_BYTE( "wr2.63", 0x000001, 0x080000, CRC(94887c9f) SHA1(ad09f1fbeff4c3ba47f72346d261b22fa6a51457) ) |
| 1358 | 1327 | |
| 1359 | | ROM_REGION( 0x10000, "mcu", 0 ) /* DS5002FP code */ |
| 1360 | | ROM_LOAD( "wr2_dallas.bin", 0x00000, 0x8000, NO_DUMP ) |
| 1361 | | |
| 1362 | | |
| 1363 | 1328 | ROM_REGION( 0x0a00000, "gfx1", 0 ) /* GFX + Sound */ |
| 1364 | 1329 | ROM_LOAD( "wr2.16d", 0x0000000, 0x0080000, CRC(ad26086b) SHA1(487ffaaca57c9d030fc486b8cae6735ee40a0ac3) ) /* GFX only */ |
| 1365 | 1330 | ROM_LOAD( "wr2.17d", 0x0080000, 0x0080000, CRC(c1ec0745) SHA1(a6c3ce9c889e6a53f4155f54d6655825af34a35b) ) /* GFX only */ |
| r252983 | r252984 | |
| 1420 | 1385 | ROM_LOAD16_BYTE( "2.u39", 0x000000, 0x020000, BAD_DUMP CRC(9939299e) SHA1(55303a2adf199f4b5a60f57be7480b0e119f8624) ) |
| 1421 | 1386 | ROM_LOAD16_BYTE( "1.u40", 0x000001, 0x020000, BAD_DUMP CRC(311c2f94) SHA1(963d6b5f479598145146fcb8b7c6ce77fbc92b07) ) |
| 1422 | 1387 | |
| 1423 | | ROM_REGION( 0x10000, "mcu", 0 ) /* DS5002FP code */ |
| 1424 | | ROM_LOAD( "ds5002fp.bin", 0x00000, 0x8000, NO_DUMP ) |
| 1425 | | |
| 1426 | 1388 | ROM_REGION( 0x0300000, "gfx1", 0 ) /* GFX + Sound */ |
| 1427 | 1389 | ROM_LOAD( "3.u54", 0x0000000, 0x0080000, CRC(085008ed) SHA1(06eb4f972d79eab13b1b3b6829ef280e079abdb6) ) |
| 1428 | 1390 | ROM_LOAD( "4.u53", 0x0080000, 0x0080000, CRC(94dc37a7) SHA1(28f9832b61541b292682a6e2d2264abccd138a2e) ) |
| r252983 | r252984 | |
| 1439 | 1401 | ROM_LOAD16_BYTE( "2.u39_v4", 0x000000, 0x020000, CRC(fff16141) SHA1(8493c3e58a231c03b152b336f43422a9a2d2618c) ) |
| 1440 | 1402 | ROM_LOAD16_BYTE( "1.u40_v4", 0x000001, 0x020000, CRC(39f9d58e) SHA1(1cbdae2adc570f2a2e10a707075312ef717e2643) ) |
| 1441 | 1403 | |
| 1442 | | ROM_REGION( 0x10000, "mcu", 0 ) /* DS5002FP code */ |
| 1443 | | ROM_LOAD( "ds5002fp.bin", 0x00000, 0x8000, NO_DUMP ) |
| 1444 | | |
| 1445 | 1404 | ROM_REGION( 0x0300000, "gfx1", 0 ) /* GFX + Sound */ |
| 1446 | 1405 | ROM_LOAD( "3.u54", 0x0000000, 0x0080000, CRC(085008ed) SHA1(06eb4f972d79eab13b1b3b6829ef280e079abdb6) ) |
| 1447 | 1406 | ROM_LOAD( "4.u53", 0x0080000, 0x0080000, CRC(94dc37a7) SHA1(28f9832b61541b292682a6e2d2264abccd138a2e) ) |
| r252983 | r252984 | |
| 1453 | 1412 | ROM_LOAD( "palce16v8h.u29", 0x0000, 0x0117, BAD_DUMP CRC(4a0a6f39) SHA1(57351e471649391c9abf110828fe2f128fe84eee) ) |
| 1454 | 1413 | ROM_END |
| 1455 | 1414 | |
| 1456 | | |
| 1457 | | READ16_MEMBER(gaelco2_state::maniacsqa_prot_r) |
| 1458 | | { |
| 1459 | | int pc = space.device().safe_pc(); |
| 1460 | | |
| 1461 | | // if -1 is returned at any point on these checks the game instantly reports 'power failure' |
| 1462 | | // these are generally done right before the other checks |
| 1463 | | if (pc == 0x3dbc) return 0x0000; // must not be -1 |
| 1464 | | if (pc == 0x5ce4) return 0x0000; // must not be -1 |
| 1465 | | if (pc == 0x5d08) return 0x0000; // must not be -1 (stores 5 here just before) |
| 1466 | | if (pc == 0xaa90) return 0x0000; // must not be -1 |
| 1467 | | if (pc == 0xaab2) return 0x0000; // must not be -1 |
| 1468 | | if (pc == 0x9f10) return 0x0000; // must not be -1 |
| 1469 | | if (pc == 0x3b86) return 0x0000; // must not be -1 |
| 1470 | | |
| 1471 | | if (pc == 0x3dce) return 0x0000; // must be 0 |
| 1472 | | |
| 1473 | | if (pc == 0x25c2) return 0x0000; // writes 0 to 0xfe45fa then expects this to be 0 |
| 1474 | | |
| 1475 | | if (pc == 0x5cf6) return 0x0000; // must be 0 |
| 1476 | | if (pc == 0x5d1a) return 0x0000; // must be 0 |
| 1477 | | if (pc == 0xaaa0) return 0x0000; // must be 0? |
| 1478 | | |
| 1479 | | if (pc == 0xaac4) return 0x0000; // checks for 0, 2 possible code paths after - happens when piece is dropped |
| 1480 | | if (pc == 0xaad0) return 0x0a00; // if above ISN'T 0 this must be 0x0a00 (but code then dies, probably wants some data filled?) |
| 1481 | | // other code path just results in no more pieces dropping? maybe the MCU does the matching algorithm? |
| 1482 | | |
| 1483 | | |
| 1484 | | |
| 1485 | | |
| 1486 | | |
| 1487 | | printf("read at PC %08x\n", pc); |
| 1488 | | return m_shareram[(0xfedaa2 - 0xfe0000) / 2]; |
| 1489 | | |
| 1490 | | } |
| 1491 | | |
| 1492 | | DRIVER_INIT_MEMBER(gaelco2_state,maniacsqa) |
| 1493 | | { |
| 1494 | | m_maincpu->space(AS_PROGRAM).install_read_handler(0xfedaa2, 0xfedaa3, read16_delegate(FUNC(gaelco2_state::maniacsqa_prot_r), this) ); |
| 1495 | | } |
| 1496 | | |
| 1497 | | |
| 1498 | 1415 | GAME( 1994, aligator, 0, alighunt, alighunt, gaelco2_state, alighunt, ROT0, "Gaelco", "Alligator Hunt", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) |
| 1499 | 1416 | GAME( 1994, aligatorun,aligator,alighunt, alighunt, gaelco2_state, alighunt, ROT0, "Gaelco", "Alligator Hunt (unprotected)", 0 ) |
| 1500 | 1417 | GAME( 1995, touchgo, 0, touchgo, touchgo, gaelco2_state, touchgo, ROT0, "Gaelco", "Touch & Go (World)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) |
| r252983 | r252984 | |
| 1502 | 1419 | GAME( 1995, touchgoe, touchgo, touchgo, touchgo, gaelco2_state, touchgo, ROT0, "Gaelco", "Touch & Go (earlier revision)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) |
| 1503 | 1420 | GAME( 1995, wrally2, 0, wrally2, wrally2, driver_device, 0, ROT0, "Gaelco", "World Rally 2: Twin Racing", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) |
| 1504 | 1421 | GAME( 1996, maniacsq, 0, maniacsq, maniacsq, driver_device, 0, ROT0, "Gaelco", "Maniac Square (unprotected)", 0 ) |
| 1505 | | GAME( 1996, maniacsqa,maniacsq, maniacsq, maniacsq, gaelco2_state, maniacsqa,ROT0, "Gaelco", "Maniac Square (protected)", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) |
| 1506 | 1422 | GAME( 1996, snowboar, 0, snowboar, snowboar, driver_device, 0, ROT0, "Gaelco", "Snow Board Championship (Version 2.1)", 0 ) |
| 1507 | 1423 | GAME( 1996, snowboara,snowboar, snowboar, snowboar, gaelco2_state, snowboar, ROT0, "Gaelco", "Snow Board Championship (Version 2.0)", 0 ) |
| 1508 | 1424 | GAME( 1998, bang, 0, bang, bang, bang_state, bang, ROT0, "Gaelco", "Bang!", 0 ) |
trunk/src/mame/drivers/itech8.cpp
| r252983 | r252984 | |
| 1090 | 1090 | PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(25) PORT_KEYDELTA(32) PORT_RESET PORT_REVERSE PORT_COCKTAIL PORT_PLAYER(2) |
| 1091 | 1091 | INPUT_PORTS_END |
| 1092 | 1092 | |
| 1093 | | static INPUT_PORTS_START( stratabs ) |
| 1094 | | PORT_INCLUDE( stratab ) |
| 1095 | 1093 | |
| 1096 | | PORT_START("FAKEX") /* fake */ |
| 1097 | | PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_RESET PORT_PLAYER(1) |
| 1098 | | |
| 1099 | | PORT_START("FAKEY") /* fake */ |
| 1100 | | PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(50) PORT_KEYDELTA(100) PORT_RESET PORT_REVERSE PORT_PLAYER(1) |
| 1101 | | INPUT_PORTS_END |
| 1102 | | |
| 1103 | | |
| 1104 | | |
| 1105 | 1094 | CUSTOM_INPUT_MEMBER(itech8_state::gtg_mux) |
| 1106 | 1095 | { |
| 1107 | 1096 | const char *tag1 = (const char *)param; |
| r252983 | r252984 | |
| 2246 | 2235 | ROM_END |
| 2247 | 2236 | |
| 2248 | 2237 | |
| 2249 | | |
| 2250 | | |
| 2251 | 2238 | ROM_START( dynobop ) |
| 2252 | 2239 | ROM_REGION( 0x1c000, "maincpu", 0 ) |
| 2253 | 2240 | ROM_LOAD( "dynobop.u5", 0x04000, 0x4000, CRC(98452c40) SHA1(9b9316fc258792e0d825f16e0fadf8e0c35a864e) ) |
| r252983 | r252984 | |
| 2296 | 2283 | ROM_END |
| 2297 | 2284 | |
| 2298 | 2285 | |
| 2299 | | ROM_START( stratabs ) |
| 2300 | | ROM_REGION( 0x1c000, "maincpu", 0 ) |
| 2301 | | ROM_LOAD( "sb_prog-v4t.u5", 0x08000, 0x8000, CRC(38ddae75) SHA1(71a9cbd36cf7b180a88bab3ab92a4dff93ce365f) ) |
| 2302 | | ROM_COPY( "maincpu", 0x8000, 0x14000, 0x8000 ) |
| 2303 | | |
| 2304 | | ROM_REGION( 0x10000, "soundcpu", 0 ) |
| 2305 | | ROM_LOAD( "sb_snds_1.4.u27", 0x08000, 0x8000, CRC(526ef093) SHA1(884f9149b3d5eb33e47258e466ad9cd9ce5ffddb) ) |
| 2306 | | |
| 2307 | | ROM_REGION( 0x10000, "sub", 0 ) |
| 2308 | | ROM_LOAD( "z80_prg_v1.0t.u53", 0x00000, 0x0800, CRC(08203f9f) SHA1(be5044938c73bf6fc1a6130dc473997e8c219b24) ) |
| 2309 | | ROM_CONTINUE( 0x00000, 0x0800 ) |
| 2310 | | ROM_CONTINUE( 0x00000, 0x0800 ) |
| 2311 | | ROM_CONTINUE( 0x00000, 0x0800 ) |
| 2312 | | |
| 2313 | | ROM_REGION( 0xc0000, "grom", 0 ) |
| 2314 | | ROM_LOAD( "sb_grom00", 0x00000, 0x20000, CRC(22f6ce56) SHA1(8e423122384257d9c5d8f48192ff6fa1f544fd97) ) |
| 2315 | | ROM_LOAD( "sb_grom01", 0x20000, 0x20000, CRC(6cc7ad6f) SHA1(d601b9bb81f26ad86e5cc053cab055831331ccde) ) |
| 2316 | | ROM_LOAD( "sb_grom02", 0x40000, 0x20000, CRC(475134ef) SHA1(5920e7a211f1b2234e8a3f51e570303c3787d8fd) ) |
| 2317 | | |
| 2318 | | ROM_REGION( 0x40000, "oki", 0 ) |
| 2319 | | ROM_LOAD( "sb_srom0", 0x00000, 0x20000, CRC(6ff390b9) SHA1(f31dae9e31f3fc83b9253e49fd4204820db3587e) ) |
| 2320 | | ROM_END |
| 2321 | | |
| 2322 | | |
| 2323 | 2286 | ROM_START( pokrdice ) |
| 2324 | 2287 | ROM_REGION( 0x1c000, "maincpu", 0 ) |
| 2325 | 2288 | ROM_LOAD( "pd-v17.u5", 0x04000, 0x4000, CRC(5e24be82) SHA1(97e50cc023ff651fb09cc5e85a1bef1bc234ccb9) ) |
| r252983 | r252984 | |
| 2746 | 2709 | GAME( 1989, grmatch, 0, grmatch, grmatch, itech8_state, grmatch, ROT0, "Yankee Game Technology", "Grudge Match (Yankee Game Technology)", 0 ) |
| 2747 | 2710 | |
| 2748 | 2711 | /* Strata Bowling-style PCB */ |
| 2749 | | GAME( 1990, stratab, 0, stratab_hi, stratab, driver_device, 0, ROT270, "Strata/Incredible Technologies", "Strata Bowling (V3)", 0 ) // still says V1 in service mode? |
| 2712 | GAME( 1990, stratab, 0, stratab_hi, stratab, driver_device, 0, ROT270, "Strata/Incredible Technologies", "Strata Bowling (V3)", 0 ) |
| 2750 | 2713 | GAME( 1990, stratab1, stratab, stratab_hi, stratab, driver_device, 0, ROT270, "Strata/Incredible Technologies", "Strata Bowling (V1)", 0 ) |
| 2751 | 2714 | GAME( 1990, gtg, 0, stratab_hi, gtg, driver_device, 0, ROT0, "Strata/Incredible Technologies", "Golden Tee Golf (Joystick, v3.1)", 0 ) |
| 2752 | 2715 | GAME( 1989, gtgt, gtg, stratab_hi, gtgt, driver_device, 0, ROT0, "Strata/Incredible Technologies", "Golden Tee Golf (Trackball, v2.0)", 0 ) |
| r252983 | r252984 | |
| 2758 | 2721 | GAME( 1990, slikshot, 0, slikshot_hi, slikshot, itech8_state, slikshot, ROT90, "Grand Products/Incredible Technologies", "Slick Shot (V2.2)", MACHINE_MECHANICAL ) |
| 2759 | 2722 | GAME( 1990, slikshot17,slikshot, slikshot_hi, slikshot, itech8_state, slikshot, ROT90, "Grand Products/Incredible Technologies", "Slick Shot (V1.7)", MACHINE_MECHANICAL ) |
| 2760 | 2723 | GAME( 1990, slikshot16,slikshot, slikshot_hi, slikshot, itech8_state, slikshot, ROT90, "Grand Products/Incredible Technologies", "Slick Shot (V1.6)", MACHINE_MECHANICAL ) |
| 2761 | | GAME( 1990, dynobop, 0, slikshot_hi, dynobop, itech8_state, slikshot, ROT90, "Grand Products/Incredible Technologies", "Dyno Bop", MACHINE_MECHANICAL ) |
| 2762 | | GAME( 1990, sstrike, 0, sstrike, sstrike, itech8_state, sstrike, ROT270, "Strata/Incredible Technologies", "Super Strike Bowling", MACHINE_MECHANICAL ) |
| 2763 | | GAME( 1991, pokrdice, 0, slikshot_lo_noz80, pokrdice, driver_device,0, ROT90, "Strata/Incredible Technologies", "Poker Dice", 0 ) |
| 2764 | | GAME( 1990, stratabs, stratab, sstrike, stratabs, itech8_state, sstrike, ROT270, "Strata/Incredible Technologies", "Strata Bowling (V1 4T, Super Strike Bowling type PCB)", MACHINE_NOT_WORKING ) // need to figure out the control hookup for this set, service mode indicates it's still a trackball like stratab |
| 2724 | GAME( 1990, dynobop, 0, slikshot_hi, dynobop, itech8_state, slikshot, ROT90, "Grand Products/Incredible Technologies", "Dyno Bop", MACHINE_MECHANICAL ) |
| 2725 | GAME( 1990, sstrike, 0, sstrike, sstrike, itech8_state, sstrike, ROT270, "Strata/Incredible Technologies", "Super Strike Bowling", MACHINE_MECHANICAL ) |
| 2726 | GAME( 1991, pokrdice, 0, slikshot_lo_noz80, pokrdice, driver_device, 0, ROT90, "Strata/Incredible Technologies", "Poker Dice", 0 ) |
| 2765 | 2727 | |
| 2766 | 2728 | /* Hot Shots Tennis-style PCB */ |
| 2767 | 2729 | GAME( 1990, hstennis, 0, hstennis_hi, hstennis, itech8_state, hstennis, ROT90, "Strata/Incredible Technologies", "Hot Shots Tennis (V1.1)", 0 ) |
trunk/src/mame/drivers/marywu.cpp
| r252983 | r252984 | |
| 10 | 10 | |
| 11 | 11 | TODO: |
| 12 | 12 | * Figure out where exactly all devices are mapped to (the devices are |
| 13 | | 2 sound chips, the 2kb SRAM, the 8bit dipswitches, |
| 13 | 2 sound chips, the KC8279 controller the 2kb SRAM, the 8bit dipswitches, |
| 14 | 14 | 31 LEDs, 13 modules of double-digit 7-seg displays and 4 push-buttons). |
| 15 | 15 | * we may also have user inputs from the coin slot and from the |
| 16 | 16 | cabinet buttons, for making bets. |
| r252983 | r252984 | |
| 19 | 19 | #include "emu.h" |
| 20 | 20 | #include "cpu/mcs51/mcs51.h" |
| 21 | 21 | #include "sound/ay8910.h" |
| 22 | | #include "machine/i8279.h" |
| 23 | | #include "marywu.lh" |
| 24 | 22 | |
| 25 | 23 | class marywu_state : public driver_device |
| 26 | 24 | { |
| r252983 | r252984 | |
| 28 | 26 | marywu_state(const machine_config &mconfig, device_type type, const char *tag) |
| 29 | 27 | : driver_device(mconfig, type, tag) |
| 30 | 28 | { } |
| 31 | | |
| 32 | | DECLARE_WRITE8_MEMBER(display_7seg_data_w); |
| 33 | | DECLARE_WRITE8_MEMBER(multiplex_7seg_w); |
| 34 | | DECLARE_WRITE8_MEMBER(ay1_port_a_w); |
| 35 | | DECLARE_WRITE8_MEMBER(ay1_port_b_w); |
| 36 | | DECLARE_WRITE8_MEMBER(ay2_port_a_w); |
| 37 | | DECLARE_WRITE8_MEMBER(ay2_port_b_w); |
| 38 | | DECLARE_READ8_MEMBER(keyboard_r); |
| 39 | | DECLARE_READ8_MEMBER(port_r); |
| 40 | | private: |
| 41 | | uint8_t m_selected_7seg_module; |
| 42 | 29 | }; |
| 43 | 30 | |
| 44 | | static INPUT_PORTS_START( marywu ) |
| 45 | | PORT_START("KEYS1") |
| 46 | | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) |
| 47 | | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) |
| 48 | | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) |
| 49 | | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) |
| 50 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) |
| 51 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) |
| 52 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) |
| 53 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) |
| 54 | | |
| 55 | | PORT_START("KEYS2") |
| 56 | | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) |
| 57 | | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) |
| 58 | | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) |
| 59 | | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) |
| 60 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) |
| 61 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) |
| 62 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) |
| 63 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) |
| 64 | | |
| 65 | | PORT_START("DSW") |
| 66 | | PORT_DIPNAME( 0x01, 0x01, "Unknown bit #0" ) PORT_DIPLOCATION("DSW:0") |
| 67 | | PORT_DIPSETTING(0x01, DEF_STR( On ) ) |
| 68 | | PORT_DIPSETTING(0x00, DEF_STR( Off ) ) |
| 69 | | PORT_DIPNAME( 0x02, 0x02, "Unknown bit #1" ) PORT_DIPLOCATION("DSW:1") |
| 70 | | PORT_DIPSETTING(0x02, DEF_STR( On ) ) |
| 71 | | PORT_DIPSETTING(0x00, DEF_STR( Off ) ) |
| 72 | | PORT_DIPNAME( 0x04, 0x04, "Unknown bit #2" ) PORT_DIPLOCATION("DSW:2") |
| 73 | | PORT_DIPSETTING(0x04, DEF_STR( On ) ) |
| 74 | | PORT_DIPSETTING(0x00, DEF_STR( Off ) ) |
| 75 | | PORT_DIPNAME( 0x08, 0x08, "Unknown bit #3" ) PORT_DIPLOCATION("DSW:3") |
| 76 | | PORT_DIPSETTING(0x08, DEF_STR( On ) ) |
| 77 | | PORT_DIPSETTING(0x00, DEF_STR( Off ) ) |
| 78 | | PORT_DIPNAME( 0x10, 0x10, "Unknown bit #4" ) PORT_DIPLOCATION("DSW:4") |
| 79 | | PORT_DIPSETTING(0x10, DEF_STR( On ) ) |
| 80 | | PORT_DIPSETTING(0x00, DEF_STR( Off ) ) |
| 81 | | PORT_DIPNAME( 0x20, 0x20, "Unknown bit #5" ) PORT_DIPLOCATION("DSW:5") |
| 82 | | PORT_DIPSETTING(0x20, DEF_STR( On ) ) |
| 83 | | PORT_DIPSETTING(0x00, DEF_STR( Off ) ) |
| 84 | | PORT_DIPNAME( 0x40, 0x40, "Unknown bit #6" ) PORT_DIPLOCATION("DSW:6") |
| 85 | | PORT_DIPSETTING(0x40, DEF_STR( On ) ) |
| 86 | | PORT_DIPSETTING(0x00, DEF_STR( Off ) ) |
| 87 | | PORT_DIPNAME( 0x80, 0x80, "Unknown bit #7" ) PORT_DIPLOCATION("DSW:7") |
| 88 | | PORT_DIPSETTING(0x80, DEF_STR( On ) ) |
| 89 | | PORT_DIPSETTING(0x00, DEF_STR( Off ) ) |
| 90 | | |
| 91 | | PORT_START("PUSHBUTTONS") |
| 92 | | PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 93 | | PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 94 | | PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 95 | | PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_UNUSED ) |
| 96 | | PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) |
| 97 | | PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) |
| 98 | | PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) |
| 99 | | PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) |
| 100 | | INPUT_PORTS_END |
| 101 | | |
| 102 | | WRITE8_MEMBER( marywu_state::ay1_port_a_w ) |
| 103 | | { |
| 104 | | for (uint8_t i=0; i<8; i++){ |
| 105 | | output_set_led_value(i, (data & (1 << i)) ? 1 : 0); |
| 106 | | } |
| 107 | | } |
| 108 | | |
| 109 | | WRITE8_MEMBER( marywu_state::ay1_port_b_w ) |
| 110 | | { |
| 111 | | for (uint8_t i=0; i<8; i++){ |
| 112 | | output_set_led_value(i+8, (data & (1 << i)) ? 1 : 0); |
| 113 | | } |
| 114 | | } |
| 115 | | |
| 116 | | WRITE8_MEMBER( marywu_state::ay2_port_a_w ) |
| 117 | | { |
| 118 | | for (uint8_t i=0; i<8; i++){ |
| 119 | | output_set_led_value(i+16, (data & (1 << i)) ? 1 : 0); |
| 120 | | } |
| 121 | | } |
| 122 | | |
| 123 | | WRITE8_MEMBER( marywu_state::ay2_port_b_w ) |
| 124 | | { |
| 125 | | for (uint8_t i=0; i<6; i++){ |
| 126 | | /* we only have 30 LEDs. The last 2 bits in this port are unused. */ |
| 127 | | output_set_led_value(i+24, (data & (1 << i)) ? 1 : 0); |
| 128 | | } |
| 129 | | } |
| 130 | | |
| 131 | | WRITE8_MEMBER( marywu_state::multiplex_7seg_w ) |
| 132 | | { |
| 133 | | m_selected_7seg_module = data; |
| 134 | | } |
| 135 | | |
| 136 | | READ8_MEMBER( marywu_state::port_r ) |
| 137 | | { |
| 138 | | //TODO: figure out what each bit is mapped to in the 80c31 ports P1 and P3 |
| 139 | | switch(offset){ |
| 140 | | //case 1: |
| 141 | | // return (1 << 6); |
| 142 | | default: |
| 143 | | return 0x00; |
| 144 | | } |
| 145 | | } |
| 146 | | |
| 147 | | READ8_MEMBER( marywu_state::keyboard_r ) |
| 148 | | { |
| 149 | | switch(m_selected_7seg_module % 8){ |
| 150 | | case 0: return ioport("KEYS1")->read(); |
| 151 | | case 1: return ioport("KEYS2")->read(); |
| 152 | | case 2: return ioport("DSW")->read(); |
| 153 | | case 3: return ioport("PUSHBUTTONS")->read(); |
| 154 | | default: |
| 155 | | return 0x00; |
| 156 | | } |
| 157 | | } |
| 158 | | |
| 159 | | WRITE8_MEMBER( marywu_state::display_7seg_data_w ) |
| 160 | | { |
| 161 | | static const UINT8 patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0, 0, 0, 0, 0, 0 }; // HEF4511BP (7 seg display driver) |
| 162 | | |
| 163 | | output_set_digit_value(2 * m_selected_7seg_module + 0, patterns[data & 0x0F]); |
| 164 | | output_set_digit_value(2 * m_selected_7seg_module + 1, patterns[(data >> 4) & 0x0F]); |
| 165 | | } |
| 166 | | |
| 167 | 31 | static ADDRESS_MAP_START( program_map, AS_PROGRAM, 8, marywu_state ) |
| 168 | 32 | AM_RANGE(0x0000, 0x7fff) AM_ROM |
| 169 | 33 | ADDRESS_MAP_END |
| 170 | 34 | |
| 171 | 35 | static ADDRESS_MAP_START( io_map, AS_IO, 8, marywu_state ) |
| 172 | | AM_RANGE(0x8000, 0x87ff) AM_MIRROR(0x0100) AM_RAM /* HM6116: 2kbytes of Static RAM */ |
| 173 | | AM_RANGE(0xb000, 0xb000) AM_MIRROR(0x0ffe) AM_DEVREADWRITE("i8279", i8279_device, data_r, data_w) |
| 174 | | AM_RANGE(0xb001, 0xb001) AM_MIRROR(0x0ffe) AM_DEVREADWRITE("i8279", i8279_device, status_r, cmd_w) |
| 175 | | AM_RANGE(0x9000, 0x9000) AM_MIRROR(0x0ffc) AM_DEVWRITE("ay1", ay8910_device, data_address_w) |
| 176 | | AM_RANGE(0x9001, 0x9001) AM_MIRROR(0x0ffc) AM_DEVREADWRITE("ay1", ay8910_device, data_r, data_w) |
| 177 | | AM_RANGE(0x9002, 0x9002) AM_MIRROR(0x0ffc) AM_DEVWRITE("ay2", ay8910_device, data_address_w) |
| 178 | | AM_RANGE(0x9003, 0x9003) AM_MIRROR(0x0ffc) AM_DEVREADWRITE("ay2", ay8910_device, data_r, data_w) |
| 179 | | AM_RANGE(0xf000, 0xf000) AM_NOP /* TODO: Investigate this. There's something going on at this address range. */ |
| 180 | | AM_RANGE(MCS51_PORT_P0, MCS51_PORT_P3) AM_READ(port_r) |
| 36 | AM_RANGE(0x8000, 0x87ff) AM_RAM //HM6116: 2kbytes of Static RAM /* This is a guess. Maybe it is also mirrored? */ |
| 37 | //AM_RANGE(0xB000, 0xB001) AM_NOP /*maybe this is where the keyboard/display "KC8279" controller is hooked up ? */ |
| 38 | AM_RANGE(0x9001, 0x9002) AM_DEVREADWRITE("ay1", ay8910_device, data_r, address_data_w) /* This is a guess */ |
| 39 | AM_RANGE(0x9003, 0x9004) AM_DEVREADWRITE("ay2", ay8910_device, data_r, address_data_w) /* This is a guess */ |
| 181 | 40 | ADDRESS_MAP_END |
| 182 | 41 | |
| 183 | 42 | static MACHINE_CONFIG_START( marywu , marywu_state ) |
| r252983 | r252984 | |
| 186 | 45 | MCFG_CPU_PROGRAM_MAP(program_map) |
| 187 | 46 | MCFG_CPU_IO_MAP(io_map) |
| 188 | 47 | |
| 189 | | /* Keyboard & display interface */ |
| 190 | | MCFG_DEVICE_ADD("i8279", I8279, XTAL_10_738635MHz) /* should it be perhaps a fraction of the XTAL clock ? */ |
| 191 | | MCFG_I8279_OUT_SL_CB(WRITE8(marywu_state, multiplex_7seg_w)) // select block of 7seg modules by multiplexing the SL scan lines |
| 192 | | MCFG_I8279_IN_RL_CB(READ8(marywu_state, keyboard_r)) // keyboard Return Lines |
| 193 | | MCFG_I8279_OUT_DISP_CB(WRITE8(marywu_state, display_7seg_data_w)) |
| 194 | | |
| 195 | | /* Video */ |
| 196 | | MCFG_DEFAULT_LAYOUT(layout_marywu) |
| 197 | | |
| 198 | 48 | /* sound hardware */ |
| 199 | 49 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 200 | 50 | MCFG_SOUND_ADD("ay1", AY8910, XTAL_10_738635MHz) /* should it be perhaps a fraction of the XTAL clock ? */ |
| 201 | 51 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) |
| 202 | | MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(marywu_state, ay1_port_a_w)) |
| 203 | | MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(marywu_state, ay1_port_b_w)) |
| 204 | 52 | |
| 205 | 53 | MCFG_SOUND_ADD("ay2", AY8910, XTAL_10_738635MHz) /* should it be perhaps a fraction of the XTAL clock ? */ |
| 206 | 54 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) |
| 207 | | MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(marywu_state, ay2_port_a_w)) |
| 208 | | MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(marywu_state, ay2_port_b_w)) |
| 209 | 55 | MACHINE_CONFIG_END |
| 210 | 56 | |
| 211 | 57 | ROM_START( marywu ) |
| r252983 | r252984 | |
| 214 | 60 | ROM_END |
| 215 | 61 | |
| 216 | 62 | /* YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS */ |
| 217 | | GAME( ????, marywu, 0, marywu, marywu, driver_device, 0, ROT0, "<unknown>", "<unknown> Labeled 'WU- MARY-1A' Music by: SunKiss Chen", MACHINE_NOT_WORKING ) |
| 63 | GAME( ????, marywu, 0, marywu, 0, driver_device, 0, ROT0, "<unknown>", "<unknown> Labeled 'WU- MARY-1A' Music by: SunKiss Chen", MACHINE_NOT_WORKING ) |
trunk/src/mame/drivers/metro.cpp
| r252983 | r252984 | |
| 21 | 21 | Other : Memory Blitter |
| 22 | 22 | |
| 23 | 23 | ------------------------------------------------------------------------------------------------ |
| 24 | | Year + Game PCB Video Sub CPU Sound Issues / Notes |
| 24 | Year + Game PCB Video Sub CPU Sound Issues / Notes |
| 25 | 25 | ------------------------------------------------------------------------------------------------ |
| 26 | | 92 Last Fortress - Toride VG420 I4100 uPD7810 YM2413+M6295 |
| 27 | | 92 Last Fortress - Toride (Ger) VG460-(A) I4100 uPD7810 YM2413+M6295 |
| 28 | | 92 Pang Pom's VG420 I4100 uPD7810 YM2413+M6295 |
| 29 | | 92 Sky Alert VG420 I4100 uPD7810 YM2413+M6295 |
| 30 | | 92 The Karate Tournament VG460-(A) I4100 uPD7810 YM2413+M6295 |
| 31 | | 92 The Karate Tournament (Japan) VG460-(A) I4100 uPD7810 YM2413+M6295 |
| 32 | | 93? Lady Killer / Moeyo Gonta!! VG460-B I4100 uPD7810 YM2413+M6295 |
| 33 | | 93 Poitto! MTR5260-A I4100 uPD7810 YM2413+M6295 |
| 26 | 92 Last Fortress - Toride VG420 I4100 uPD7810 YM2413+M6295 |
| 27 | 92 Last Fortress - Toride (Ger)VG460-(A) I4100 uPD7810 YM2413+M6295 |
| 28 | 92 Pang Pom's VG420 I4100 uPD7810 YM2413+M6295 |
| 29 | 92 Sky Alert VG420 I4100 uPD7810 YM2413+M6295 |
| 30 | 92 The Karate Tournament VG460-B I4100 uPD7810 YM2413+M6295 |
| 31 | 93? Lady Killer / Moeyo Gonta!! VG460-B I4100 uPD7810 YM2413+M6295 |
| 32 | 93 Poitto! MTR5260-A I4100 uPD7810 YM2413+M6295 |
| 34 | 33 | |
| 35 | | 94 Dharma Doujou MTR5260-A I4220 uPD7810 YM2413+M6295 |
| 36 | | 94 Dharma Doujou (Korea) MTR527 I4220 uPD7810 YM2413+M6295 |
| 37 | | 94 Toride II Adauchi Gaiden MTR5260-A I4220 uPD7810 YM2413+M6295 |
| 38 | | 94 Toride II Adauchi Gaiden(Kr) MTR5260-A I4220 uPD7810 YM2413+M6295 |
| 39 | | 94 Gun Master MTR5260-A I4220 uPD7810 YM2151+M6295 |
| 40 | | 95 Daitoride MTR5260-A I4220 uPD7810 YM2151+M6295 |
| 41 | | 95 Pururun MTR5260-A I4220 uPD7810 YM2151+M6295 |
| 42 | | 95 Puzzli MTR5260-A I4220 uPD7810 YM2151+M6295 |
| 43 | | 96 Sankokushi MTR5260-A I4220 uPD7810 YM2413+M6295 |
| 34 | 94 Dharma Doujou MTR5260-A I4220 uPD7810 YM2413+M6295 |
| 35 | 94 Dharma Doujou (Korea) MTR527 I4220 uPD7810 YM2413+M6295 |
| 36 | 94 Toride II Adauchi Gaiden MTR5260-A I4220 uPD7810 YM2413+M6295 |
| 37 | 94 Toride II Adauchi Gaiden(Kr)MTR5260-A I4220 uPD7810 YM2413+M6295 |
| 38 | 94 Gun Master MTR5260-A I4220 uPD7810 YM2151+M6295 |
| 39 | 95 Daitoride MTR5260-A I4220 uPD7810 YM2151+M6295 |
| 40 | 95 Pururun MTR5260-A I4220 uPD7810 YM2151+M6295 |
| 41 | 95 Puzzli MTR5260-A I4220 uPD7810 YM2151+M6295 |
| 42 | 96 Sankokushi MTR5260-A I4220 uPD7810 YM2413+M6295 |
| 44 | 43 | |
| 45 | | 95 Mouse Shooter GoGo - I4220 - YMF278B GFX ROM data lines swapped |
| 46 | | 96 Bal Cube - I4220 - YMF278B GFX ROM data lines swapped |
| 47 | | 96 Daitoride (YMF278B) - I4220 - YMF278B GFX ROM data lines swapped |
| 48 | | 96 Bang Bang Ball - I4220 - YMF278B GFX ROM data lines swapped |
| 49 | | 99 Battle Bubble v2.00 LM2D-Y I4220 - YMF278B GFX ROM data lines swapped |
| 44 | 95 Mouse Shooter GoGo - I4220 - YMF278B GFX ROM data lines swapped |
| 45 | 96 Bal Cube - I4220 - YMF278B GFX ROM data lines swapped |
| 46 | 96 Daitoride (YMF278B) - I4220 - YMF278B GFX ROM data lines swapped |
| 47 | 96 Bang Bang Ball - I4220 - YMF278B GFX ROM data lines swapped |
| 48 | 99 Battle Bubble v2.00 LM2D-Y I4220 - YMF278B GFX ROM data lines swapped |
| 50 | 49 | |
| 51 | | 94 Blazing Tornado HUM-002-A-(B) I4220 Z80 YM2610 Konami 053936 PSAC2 |
| 52 | | 96 Grand Striker 2 HUM-003(A) I4220 Z80 YM2610 Konami 053936 PSAC2 |
| 50 | 94 Blazing Tornado HUM-002-A-(B) I4220 Z80 YM2610 Konami 053936 PSAC2 |
| 51 | 96 Grand Striker 2 HUM-003(A) I4220 Z80 YM2610 Konami 053936 PSAC2 |
| 53 | 52 | |
| 54 | | 95 Varia Metal ES-9309B-B I4220 - ES8712+M6295+M6585 |
| 53 | 95 Varia Metal ES-9309B-B I4220 - ES8712+M6295+M6585 |
| 55 | 54 | |
| 56 | | 95 Mahjong Doukyuusei VG330-B I4300 - YM2413+M6295 |
| 57 | | 95 Mahjong Doukyuusei Special VG340-A I4300 - YM2413+M6295 |
| 58 | | 96 Mouja VG410-B I4300 - YM2413+M6295 |
| 59 | | 97 Mahjong Gakuensai VG340-A I4300 - YM2413+M6295 |
| 60 | | 98 Mahjong Gakuensai 2 VG340-A I4300 - YM2413+M6295 |
| 55 | 95 Mahjong Doukyuusei VG330-B I4300 - YM2413+M6295 |
| 56 | 95 Mahjong Doukyuusei Special VG340-A I4300 - YM2413+M6295 |
| 57 | 96 Mouja VG410-B I4300 - YM2413+M6295 |
| 58 | 97 Mahjong Gakuensai VG340-A I4300 - YM2413+M6295 |
| 59 | 98 Mahjong Gakuensai 2 VG340-A I4300 - YM2413+M6295 |
| 61 | 60 | |
| 62 | | 00 Puzzlet VG2200-(B) I4300 Z86E02 YM2413+M6295 H8/3007 CPU |
| 61 | 00 Puzzlet VG2200-(B) I4300 Z86E02 YM2413+M6295 H8/3007 CPU |
| 63 | 62 | ------------------------------------------------------------------------------------------------ |
| 64 | 63 | |
| 65 | 64 | Mouse Shooter GoGo, Bal Cube, Bang Bang Ball & Daitoride (YMF278B) PCBs have |
| r252983 | r252984 | |
| 5066 | 5065 | ***************************************************************************/ |
| 5067 | 5066 | |
| 5068 | 5067 | ROM_START( karatour ) |
| 5069 | | ROM_REGION( 0x080000, "maincpu", 0 ) /* 68000 Code */ |
| 5070 | | ROM_LOAD16_BYTE( "2.2FAB.8G", 0x000000, 0x040000, CRC(199a28d4) SHA1(ae880b5d5a1703c54e0ef27015039c7bb05eb185) ) // Hand-written label "(2) 2FAB" |
| 5071 | | ROM_LOAD16_BYTE( "3.0560.10G", 0x000001, 0x040000, CRC(b054e683) SHA1(51e28a99f87684f3e56c7a168523f94717903d79) ) // Hand-written label "(3) 0560" |
| 5072 | | |
| 5073 | | ROM_REGION( 0x02c000, "audiocpu", 0 ) /* NEC78C10 Code */ |
| 5074 | | ROM_LOAD( "KT001.1I", 0x000000, 0x004000, CRC(1dd2008c) SHA1(488b6f5d15bdbc069ee2cd6d7a0980a228d2f790) ) // 11xxxxxxxxxxxxxxx = 0xFF |
| 5075 | | ROM_CONTINUE( 0x010000, 0x01c000 ) |
| 5076 | | |
| 5077 | | ROM_REGION( 0x400000, "gfx1", 0 ) /* Gfx + Data (Addressable by CPU & Blitter) */ |
| 5078 | | ROMX_LOAD( "361A04.15F", 0x000000, 0x100000, CRC(f6bf20a5) SHA1(cb4cb249eb1c106fe7ef0ace735c0cc3106f1ab7) , ROM_GROUPWORD | ROM_SKIP(6)) |
| 5079 | | ROMX_LOAD( "361A07.17D", 0x000002, 0x100000, CRC(794cc1c0) SHA1(ecfdec5874a95846c0fb7966fdd1da625d85531f) , ROM_GROUPWORD | ROM_SKIP(6)) |
| 5080 | | ROMX_LOAD( "361A05.17F", 0x000004, 0x100000, CRC(ea9c11fc) SHA1(176c4419cfe13ff019654a93cd7b0befa238bbc3) , ROM_GROUPWORD | ROM_SKIP(6)) |
| 5081 | | ROMX_LOAD( "361A06.15D", 0x000006, 0x100000, CRC(7e15f058) SHA1(267f0a5acb874d4fff3556ffa405e24724174667) , ROM_GROUPWORD | ROM_SKIP(6)) |
| 5082 | | |
| 5083 | | ROM_REGION( 0x040000, "oki", 0 ) /* Samples */ |
| 5084 | | ROM_LOAD( "8.4A06.1D", 0x000000, 0x040000, CRC(8d208179) SHA1(54a27ef155828435bc5eba60790a8584274c8b4a) ) // Hand-written label "(8) 4A06" |
| 5085 | | ROM_END |
| 5086 | | |
| 5087 | | ROM_START( karatourj ) |
| 5088 | 5068 | ROM_REGION( 0x080000, "maincpu", 0 ) /* 68000 Code */ |
| 5089 | 5069 | ROM_LOAD16_BYTE( "kt002.8g", 0x000000, 0x040000, CRC(316a97ec) SHA1(4b099d2fa91822c9c85d647aab3d6779fc400250) ) |
| 5090 | 5070 | ROM_LOAD16_BYTE( "kt003.10g", 0x000001, 0x040000, CRC(abe1b991) SHA1(9b6327169d66717dd9dd74816bc33eb208c3763c) ) |
| r252983 | r252984 | |
| 5103 | 5083 | ROM_LOAD( "kt008.1d", 0x000000, 0x040000, CRC(47cf9fa1) SHA1(88923ace550154c58c066f859cadfa7864c5344c) ) |
| 5104 | 5084 | ROM_END |
| 5105 | 5085 | |
| 5086 | |
| 5106 | 5087 | /*************************************************************************** |
| 5107 | 5088 | |
| 5108 | 5089 | Moeyo Gonta!! (Lady Killer) |
| r252983 | r252984 | |
| 6311 | 6292 | |
| 6312 | 6293 | ***************************************************************************/ |
| 6313 | 6294 | |
| 6314 | | GAME( 1992, karatour, 0, karatour, karatour, metro_state, karatour, ROT0, "Mitchell", "The Karate Tournament", MACHINE_SUPPORTS_SAVE ) |
| 6315 | | GAME( 1992, karatourj, karatour, karatour, karatour, metro_state, karatour, ROT0, "Mitchell", "The Karate Tournament (Japan)", MACHINE_SUPPORTS_SAVE ) |
| 6295 | GAME( 1992, karatour, 0, karatour, karatour, metro_state, karatour, ROT0, "Mitchell", "The Karate Tournament", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) |
| 6316 | 6296 | GAME( 1992, pangpoms, 0, pangpoms, pangpoms, metro_state, metro, ROT0, "Metro", "Pang Pom's", MACHINE_SUPPORTS_SAVE ) |
| 6317 | 6297 | GAME( 1992, pangpomsm, pangpoms, pangpoms, pangpoms, metro_state, metro, ROT0, "Metro (Mitchell license)", "Pang Pom's (Mitchell)", MACHINE_SUPPORTS_SAVE ) |
| 6318 | 6298 | GAME( 1992, skyalert, 0, skyalert, skyalert, metro_state, metro, ROT270, "Metro", "Sky Alert", MACHINE_SUPPORTS_SAVE ) |
trunk/src/mame/drivers/segaybd.cpp
| r252983 | r252984 | |
| 739 | 739 | AM_RANGE(0x084000, 0x08401f) AM_MIRROR(0x001fe0) AM_DEVREADWRITE("divider_suby", sega_315_5249_divider_device, read, write) |
| 740 | 740 | AM_RANGE(0x0c0000, 0x0cffff) AM_RAM AM_SHARE("shareram") |
| 741 | 741 | AM_RANGE(0x180000, 0x1807ff) AM_MIRROR(0x007800) AM_RAM AM_SHARE("rotateram") |
| 742 | | AM_RANGE(0x188000, 0x188fff) AM_MIRROR(0x007000) AM_RAM AM_SHARE("sprites") |
| 742 | AM_RANGE(0x188000, 0x188fff) AM_MIRROR(0x007000) AM_RAM AM_SHARE("bsprites") |
| 743 | 743 | AM_RANGE(0x190000, 0x193fff) AM_MIRROR(0x004000) AM_RAM_WRITE(paletteram_w) AM_SHARE("paletteram") |
| 744 | 744 | AM_RANGE(0x198000, 0x19ffff) AM_DEVREAD("segaic16vid", segaic16_video_device, rotate_control_r) |
| 745 | 745 | AM_RANGE(0x1f0000, 0x1fffff) AM_RAM |
| r252983 | r252984 | |
| 1397 | 1397 | |
| 1398 | 1398 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", empty) |
| 1399 | 1399 | |
| 1400 | | MCFG_SEGA_SYS16B_SPRITES_ADD("sprites") |
| 1400 | MCFG_SEGA_SYS16B_SPRITES_ADD("bsprites") |
| 1401 | 1401 | MCFG_SEGA_YBOARD_SPRITES_ADD("ysprites") |
| 1402 | 1402 | MCFG_SEGAIC16VID_ADD("segaic16vid") |
| 1403 | 1403 | MCFG_SEGAIC16VID_GFXDECODE("gfxdecode") |
| r252983 | r252984 | |
| 1479 | 1479 | ROM_LOAD16_BYTE( "epr-11816b.54", 0x000000, 0x20000, CRC(317dd0c2) SHA1(7f1c7dcfb111385e2a94912975c2f9bfe78445ac) ) |
| 1480 | 1480 | ROM_LOAD16_BYTE( "epr-11815b.53", 0x000001, 0x20000, CRC(f1fb22f1) SHA1(da3ce521b0a19b391913c35af34084d29edceca7) ) |
| 1481 | 1481 | |
| 1482 | | ROM_REGION16_BE( 0x080000, "sprites", 0 ) |
| 1482 | ROM_REGION16_BE( 0x080000, "bsprites", 0 ) |
| 1483 | 1483 | ROM_LOAD16_BYTE( "mpr-11467.16", 0x000000, 0x20000, CRC(6e60e736) SHA1(73086744cb2fe1ce162f851cb879755c21819b33) ) |
| 1484 | 1484 | ROM_LOAD16_BYTE( "mpr-11468.14", 0x000001, 0x20000, CRC(74ca9ca5) SHA1(c6f27ce43ef270088e6155c8240fd15afa5729fd) ) |
| 1485 | 1485 | ROM_LOAD16_BYTE( "epr-11694.17", 0x040000, 0x20000, CRC(7e297b84) SHA1(bbf1aa2b0b6b1f9fdaf9bea77d24b7f4f9320696) ) |
| r252983 | r252984 | |
| 1553 | 1553 | ROM_LOAD16_BYTE( "epr-11816b.54", 0x000000, 0x20000, CRC(317dd0c2) SHA1(7f1c7dcfb111385e2a94912975c2f9bfe78445ac) ) |
| 1554 | 1554 | ROM_LOAD16_BYTE( "epr-11815b.53", 0x000001, 0x20000, CRC(f1fb22f1) SHA1(da3ce521b0a19b391913c35af34084d29edceca7) ) |
| 1555 | 1555 | |
| 1556 | | ROM_REGION16_BE( 0x080000, "sprites", 0 ) |
| 1556 | ROM_REGION16_BE( 0x080000, "bsprites", 0 ) |
| 1557 | 1557 | ROM_LOAD16_BYTE( "mpr-11467.16", 0x000000, 0x20000, CRC(6e60e736) SHA1(73086744cb2fe1ce162f851cb879755c21819b33) ) |
| 1558 | 1558 | ROM_LOAD16_BYTE( "mpr-11468.14", 0x000001, 0x20000, CRC(74ca9ca5) SHA1(c6f27ce43ef270088e6155c8240fd15afa5729fd) ) |
| 1559 | 1559 | ROM_LOAD16_BYTE( "epr-11694.17", 0x040000, 0x20000, CRC(7e297b84) SHA1(bbf1aa2b0b6b1f9fdaf9bea77d24b7f4f9320696) ) |
| r252983 | r252984 | |
| 1631 | 1631 | ROM_LOAD16_BYTE( "epr-11690a.54", 0x000000, 0x20000, CRC(e18bc177) SHA1(3fb179c9074954fc9b64da1463f542d60a99ec84) ) |
| 1632 | 1632 | ROM_LOAD16_BYTE( "epr-11689a.53", 0x000001, 0x20000, CRC(6010e63e) SHA1(00aa5e8516f094409a407744b84ef183393b8b19) ) |
| 1633 | 1633 | |
| 1634 | | ROM_REGION16_BE( 0x080000, "sprites", 0 ) |
| 1634 | ROM_REGION16_BE( 0x080000, "bsprites", 0 ) |
| 1635 | 1635 | ROM_LOAD16_BYTE( "mpr-11467.16", 0x000000, 0x20000, CRC(6e60e736) SHA1(73086744cb2fe1ce162f851cb879755c21819b33) ) |
| 1636 | 1636 | ROM_LOAD16_BYTE( "mpr-11468.14", 0x000001, 0x20000, CRC(74ca9ca5) SHA1(c6f27ce43ef270088e6155c8240fd15afa5729fd) ) |
| 1637 | 1637 | ROM_LOAD16_BYTE( "epr-11694.17", 0x040000, 0x20000, CRC(7e297b84) SHA1(bbf1aa2b0b6b1f9fdaf9bea77d24b7f4f9320696) ) |
| r252983 | r252984 | |
| 1706 | 1706 | ROM_LOAD16_BYTE( "epr-11513.54", 0x000000, 0x20000, CRC(e18bc177) SHA1(3fb179c9074954fc9b64da1463f542d60a99ec84) ) |
| 1707 | 1707 | ROM_LOAD16_BYTE( "epr-11512.53", 0x000001, 0x20000, CRC(6010e63e) SHA1(00aa5e8516f094409a407744b84ef183393b8b19) ) |
| 1708 | 1708 | |
| 1709 | | ROM_REGION16_BE( 0x080000, "sprites", 0 ) |
| 1709 | ROM_REGION16_BE( 0x080000, "bsprites", 0 ) |
| 1710 | 1710 | ROM_LOAD16_BYTE( "mpr-11467.16", 0x000000, 0x20000, CRC(6e60e736) SHA1(73086744cb2fe1ce162f851cb879755c21819b33) ) |
| 1711 | 1711 | ROM_LOAD16_BYTE( "mpr-11468.14", 0x000001, 0x20000, CRC(74ca9ca5) SHA1(c6f27ce43ef270088e6155c8240fd15afa5729fd) ) |
| 1712 | 1712 | ROM_LOAD16_BYTE( "epr-11694.17", 0x040000, 0x20000, CRC(7e297b84) SHA1(bbf1aa2b0b6b1f9fdaf9bea77d24b7f4f9320696) ) |
| r252983 | r252984 | |
| 1789 | 1789 | ROM_LOAD16_BYTE( "epr-13030.54", 0x000000, 0x20000, CRC(81abcabf) SHA1(cb4e817d66a7f384aa9757758c51cd1bf7347dd0) ) |
| 1790 | 1790 | ROM_LOAD16_BYTE( "epr-13029.53", 0x000001, 0x20000, CRC(f3638efb) SHA1(f82a46fc8616cbe0235746161c587e54adecfe50) ) |
| 1791 | 1791 | |
| 1792 | | ROM_REGION16_BE( 0x200000, "sprites", 0) |
| 1792 | ROM_REGION16_BE( 0x200000, "bsprites", 0) |
| 1793 | 1793 | ROM_LOAD16_BYTE( "epr-13039.16", 0x000000, 0x80000, CRC(d7e1266d) SHA1(b0fc4cc60a7e876ae2af343bba6da3fb926ea9c5) ) |
| 1794 | 1794 | ROM_LOAD16_BYTE( "epr-13037.14", 0x000001, 0x80000, CRC(b801a250) SHA1(7d1f6a1f2022a4f302f22d11fa79057cf8134ad2) ) |
| 1795 | 1795 | ROM_LOAD16_BYTE( "epr-13040.17", 0x100000, 0x80000, CRC(4aeb3a85) SHA1(5521fd2d3956839bdbe7b70a9e60cd9fb72a42f1) ) |
| r252983 | r252984 | |
| 1864 | 1864 | ROM_LOAD16_BYTE( "epr-13030.54", 0x000000, 0x20000, CRC(81abcabf) SHA1(cb4e817d66a7f384aa9757758c51cd1bf7347dd0) ) |
| 1865 | 1865 | ROM_LOAD16_BYTE( "epr-13029.53", 0x000001, 0x20000, CRC(f3638efb) SHA1(f82a46fc8616cbe0235746161c587e54adecfe50) ) |
| 1866 | 1866 | |
| 1867 | | ROM_REGION16_BE( 0x200000, "sprites", 0) |
| 1867 | ROM_REGION16_BE( 0x200000, "bsprites", 0) |
| 1868 | 1868 | ROM_LOAD16_BYTE( "epr-13039.16", 0x000000, 0x80000, CRC(d7e1266d) SHA1(b0fc4cc60a7e876ae2af343bba6da3fb926ea9c5) ) |
| 1869 | 1869 | ROM_LOAD16_BYTE( "epr-13037.14", 0x000001, 0x80000, CRC(b801a250) SHA1(7d1f6a1f2022a4f302f22d11fa79057cf8134ad2) ) |
| 1870 | 1870 | ROM_LOAD16_BYTE( "epr-13040.17", 0x100000, 0x80000, CRC(4aeb3a85) SHA1(5521fd2d3956839bdbe7b70a9e60cd9fb72a42f1) ) |
| r252983 | r252984 | |
| 1933 | 1933 | ROM_LOAD16_BYTE( "epr-13325a.54", 0x000000, 0x20000, CRC(aba307e5) SHA1(a27a7d3699a95d7c6265a23157b2fefd362003dd) ) |
| 1934 | 1934 | ROM_LOAD16_BYTE( "epr-13324a.53", 0x000001, 0x20000, CRC(eb1b19e5) SHA1(3d1d7299cb3befc22afc0db0376d7f94dec37367) ) |
| 1935 | 1935 | |
| 1936 | | ROM_REGION16_BE( 0x200000, "sprites", 0) |
| 1936 | ROM_REGION16_BE( 0x200000, "bsprites", 0) |
| 1937 | 1937 | ROM_LOAD16_BYTE( "epr-13039.16", 0x000000, 0x80000, CRC(d7e1266d) SHA1(b0fc4cc60a7e876ae2af343bba6da3fb926ea9c5) ) |
| 1938 | 1938 | ROM_LOAD16_BYTE( "epr-13037.14", 0x000001, 0x80000, CRC(b801a250) SHA1(7d1f6a1f2022a4f302f22d11fa79057cf8134ad2) ) |
| 1939 | 1939 | ROM_LOAD16_BYTE( "epr-13040.17", 0x100000, 0x80000, CRC(4aeb3a85) SHA1(5521fd2d3956839bdbe7b70a9e60cd9fb72a42f1) ) |
| r252983 | r252984 | |
| 2009 | 2009 | ROM_LOAD16_BYTE( "epr-12019a.54", 0x000000, 0x20000, CRC(11188a30) SHA1(42dd0344d92529848b53a8cec4c145237ccd5b51) ) |
| 2010 | 2010 | ROM_LOAD16_BYTE( "epr-12018a.53", 0x000001, 0x20000, CRC(1c582e1f) SHA1(c32d2f921554bddd7dedcb81e231aa91f50fa27b) ) |
| 2011 | 2011 | |
| 2012 | | ROM_REGION16_BE( 0x080000, "sprites", 0 ) |
| 2012 | ROM_REGION16_BE( 0x080000, "bsprites", 0 ) |
| 2013 | 2013 | ROM_LOAD16_BYTE( "epr-11789.16", 0x000000, 0x20000, CRC(b86f8d2b) SHA1(a053f2021841fd0ef89fd3f28050a698b36c435e) ) |
| 2014 | 2014 | ROM_LOAD16_BYTE( "epr-11791.14", 0x000001, 0x20000, CRC(36b2910a) SHA1(9948b91837f944a7a606542fa685525e74bbe398) ) |
| 2015 | 2015 | ROM_LOAD16_BYTE( "epr-11790.17", 0x040000, 0x20000, CRC(2a564e66) SHA1(5f30fc15bfd017d75cfffe1e9e62ed0bcf32a98e) ) |
| r252983 | r252984 | |
| 2092 | 2092 | ROM_LOAD16_BYTE( "epr-12019.54", 0x000000, 0x20000, CRC(e514d7b6) SHA1(27ae99f5f3e8d2f248916f7a252e2c0686638df5) ) |
| 2093 | 2093 | ROM_LOAD16_BYTE( "epr-12018.53", 0x000001, 0x20000, CRC(0a3f7faf) SHA1(fe20a164a7a2c9e9bf0e7aade75b0488bdc93d79) ) |
| 2094 | 2094 | |
| 2095 | | ROM_REGION16_BE( 0x080000, "sprites", 0 ) |
| 2095 | ROM_REGION16_BE( 0x080000, "bsprites", 0 ) |
| 2096 | 2096 | ROM_LOAD16_BYTE( "epr-11789.16", 0x000000, 0x20000, CRC(b86f8d2b) SHA1(a053f2021841fd0ef89fd3f28050a698b36c435e) ) |
| 2097 | 2097 | ROM_LOAD16_BYTE( "epr-11791.14", 0x000001, 0x20000, CRC(36b2910a) SHA1(9948b91837f944a7a606542fa685525e74bbe398) ) |
| 2098 | 2098 | ROM_LOAD16_BYTE( "epr-11790.17", 0x040000, 0x20000, CRC(2a564e66) SHA1(5f30fc15bfd017d75cfffe1e9e62ed0bcf32a98e) ) |
| r252983 | r252984 | |
| 2176 | 2176 | ROM_LOAD16_BYTE( "epr-11903.54", 0x000000, 0x20000, CRC(d004f411) SHA1(212a985275647fae24b580ebaffc1230c06318ac) ) |
| 2177 | 2177 | ROM_LOAD16_BYTE( "epr-11902.53", 0x000001, 0x20000, CRC(e8028e08) SHA1(de4ee5011e9552e624b6223e0e1ef00bc271a811) ) |
| 2178 | 2178 | |
| 2179 | | ROM_REGION16_BE( 0x080000, "sprites", 0 ) |
| 2179 | ROM_REGION16_BE( 0x080000, "bsprites", 0 ) |
| 2180 | 2180 | ROM_LOAD16_BYTE( "epr-11789.16", 0x000000, 0x20000, CRC(b86f8d2b) SHA1(a053f2021841fd0ef89fd3f28050a698b36c435e) ) |
| 2181 | 2181 | ROM_LOAD16_BYTE( "epr-11791.14", 0x000001, 0x20000, CRC(36b2910a) SHA1(9948b91837f944a7a606542fa685525e74bbe398) ) |
| 2182 | 2182 | ROM_LOAD16_BYTE( "epr-11790.17", 0x040000, 0x20000, CRC(2a564e66) SHA1(5f30fc15bfd017d75cfffe1e9e62ed0bcf32a98e) ) |
| r252983 | r252984 | |
| 2262 | 2262 | ROM_LOAD16_BYTE( "epr-11750b.54", 0x000000, 0x20000, CRC(bc14ce30) SHA1(9bbadee0946e0abaac4f0d2625ba5550f11fa8a9) ) |
| 2263 | 2263 | ROM_LOAD16_BYTE( "epr-11749b.53", 0x000001, 0x20000, CRC(9e385568) SHA1(74e22eaed645cc80b1eb0c52912186066e58b9d2) ) |
| 2264 | 2264 | |
| 2265 | | ROM_REGION16_BE( 0x080000, "sprites", 0 ) |
| 2265 | ROM_REGION16_BE( 0x080000, "bsprites", 0 ) |
| 2266 | 2266 | ROM_LOAD16_BYTE( "epr-11789.16", 0x000000, 0x20000, CRC(b86f8d2b) SHA1(a053f2021841fd0ef89fd3f28050a698b36c435e) ) |
| 2267 | 2267 | ROM_LOAD16_BYTE( "epr-11791.14", 0x000001, 0x20000, CRC(36b2910a) SHA1(9948b91837f944a7a606542fa685525e74bbe398) ) |
| 2268 | 2268 | ROM_LOAD16_BYTE( "epr-11790.17", 0x040000, 0x20000, CRC(2a564e66) SHA1(5f30fc15bfd017d75cfffe1e9e62ed0bcf32a98e) ) |
| r252983 | r252984 | |
| 2347 | 2347 | ROM_LOAD16_BYTE("epr-12109.54", 0x000000, 0x20000, CRC(256350b8) SHA1(72b05d3583d63766690fed4827ec586e832168d1) ) |
| 2348 | 2348 | ROM_LOAD16_BYTE("epr-12108.53", 0x000001, 0x20000, CRC(a3a56771) SHA1(f41d466f31a1b833d21a7011314c48d5056409eb) ) |
| 2349 | 2349 | |
| 2350 | | ROM_REGION16_BE(0x080000, "sprites", 0) |
| 2350 | ROM_REGION16_BE(0x080000, "bsprites", 0) |
| 2351 | 2351 | ROM_LOAD16_BYTE("epr-12114.16", 0x000000, 0x20000, CRC(8b07e8eb) SHA1(22a4aff968d6de52372b7b2b5322d353f7b835ef) ) |
| 2352 | 2352 | ROM_LOAD16_BYTE("epr-12115.14", 0x000001, 0x20000, CRC(045b2912) SHA1(697c8eff69bf1a23745d24171f0b50635cf8513e) ) |
| 2353 | 2353 | ROM_LOAD16_BYTE("epr-12112.17", 0x040000, 0x20000, CRC(5dd13e81) SHA1(74ced668a36480a2ce9e3667e4915bfee2391534) ) |
| r252983 | r252984 | |
| 2440 | 2440 | ROM_LOAD16_BYTE( "epr-14092.54", 0x000000, 0x20000, CRC(18eb23c5) SHA1(53e5681c7450a3879ed80c1680168d6295caa887) ) // same as epr-13990.54 below |
| 2441 | 2441 | ROM_LOAD16_BYTE( "epr-14091.53", 0x000001, 0x20000, CRC(72a56f71) SHA1(d45d3072ea92b5dde5c70138e56e7f0ca248880e) ) // 1 byte difference between regions |
| 2442 | 2442 | |
| 2443 | | ROM_REGION16_BE( 0x080000, "sprites", 0 ) |
| 2443 | ROM_REGION16_BE( 0x080000, "bsprites", 0 ) |
| 2444 | 2444 | ROM_LOAD16_BYTE( "mpr-13999.16", 0x000000, 0x40000, CRC(9a1dd53c) SHA1(cb01f2c64554914ea693879dfcb498181a1e7a9a) ) |
| 2445 | 2445 | ROM_LOAD16_BYTE( "mpr-13997.14", 0x000001, 0x40000, CRC(1fdf1b87) SHA1(ed46af0f72081d545015b73a8d12240664f29506) ) |
| 2446 | 2446 | |
| r252983 | r252984 | |
| 2500 | 2500 | ROM_LOAD16_BYTE( "epr-13990.54", 0x000000, 0x20000, CRC(18eb23c5) SHA1(53e5681c7450a3879ed80c1680168d6295caa887) ) |
| 2501 | 2501 | ROM_LOAD16_BYTE( "epr-13989.53", 0x000001, 0x20000, CRC(8f4f824e) SHA1(d470f23ce2dca4e75b7b714175d47338c41bb721) ) |
| 2502 | 2502 | |
| 2503 | | ROM_REGION16_BE( 0x080000, "sprites", 0 ) |
| 2503 | ROM_REGION16_BE( 0x080000, "bsprites", 0 ) |
| 2504 | 2504 | ROM_LOAD16_BYTE( "mpr-13999.16", 0x000000, 0x40000, CRC(9a1dd53c) SHA1(cb01f2c64554914ea693879dfcb498181a1e7a9a) ) |
| 2505 | 2505 | ROM_LOAD16_BYTE( "mpr-13997.14", 0x000001, 0x40000, CRC(1fdf1b87) SHA1(ed46af0f72081d545015b73a8d12240664f29506) ) |
| 2506 | 2506 | |
| r252983 | r252984 | |
| 2565 | 2565 | ROM_LOAD16_BYTE( "epr-13828.54", 0x000000, 0x20000, CRC(2470cf5f) SHA1(eb1a732228fe7ad9cf0747d2b53e391c5a733667) ) |
| 2566 | 2566 | ROM_LOAD16_BYTE( "epr-13827.53", 0x000001, 0x20000, CRC(a9d0cf7d) SHA1(c40c73c9e9105ed6503b77b65a6423a26057d810) ) |
| 2567 | 2567 | |
| 2568 | | ROM_REGION16_BE( 0x200000, "sprites", 0) |
| 2568 | ROM_REGION16_BE( 0x200000, "bsprites", 0) |
| 2569 | 2569 | ROM_LOAD16_BYTE( "epr-13833.16", 0x000000, 0x80000, CRC(6148e11a) SHA1(5802208cf0415f6af39de162e9f12e7c205915f7) ) |
| 2570 | 2570 | ROM_LOAD16_BYTE( "epr-13832.14", 0x000001, 0x80000, CRC(41679754) SHA1(58d46f33a4318bbc9e2a20eb5550a66ee0b2e62f) ) |
| 2571 | 2571 | ROM_LOAD16_BYTE( "epr-13040.17", 0x100000, 0x80000, CRC(4aeb3a85) SHA1(5521fd2d3956839bdbe7b70a9e60cd9fb72a42f1) ) |
| r252983 | r252984 | |
| 2636 | 2636 | ROM_LOAD16_BYTE( "epr-13828.54", 0x000000, 0x20000, CRC(2470cf5f) SHA1(eb1a732228fe7ad9cf0747d2b53e391c5a733667) ) |
| 2637 | 2637 | ROM_LOAD16_BYTE( "epr-13827.53", 0x000001, 0x20000, CRC(a9d0cf7d) SHA1(c40c73c9e9105ed6503b77b65a6423a26057d810) ) |
| 2638 | 2638 | |
| 2639 | | ROM_REGION16_BE( 0x200000, "sprites", 0) |
| 2639 | ROM_REGION16_BE( 0x200000, "bsprites", 0) |
| 2640 | 2640 | ROM_LOAD16_BYTE( "epr-13833.16", 0x000000, 0x80000, CRC(6148e11a) SHA1(5802208cf0415f6af39de162e9f12e7c205915f7) ) |
| 2641 | 2641 | ROM_LOAD16_BYTE( "epr-13832.14", 0x000001, 0x80000, CRC(41679754) SHA1(58d46f33a4318bbc9e2a20eb5550a66ee0b2e62f) ) |
| 2642 | 2642 | ROM_LOAD16_BYTE( "epr-13040.17", 0x100000, 0x80000, CRC(4aeb3a85) SHA1(5521fd2d3956839bdbe7b70a9e60cd9fb72a42f1) ) |