diff options
Diffstat (limited to 'src/mame/drivers/nightmare.cpp')
-rw-r--r-- | src/mame/drivers/nightmare.cpp | 483 |
1 files changed, 0 insertions, 483 deletions
diff --git a/src/mame/drivers/nightmare.cpp b/src/mame/drivers/nightmare.cpp deleted file mode 100644 index 5ec73035356..00000000000 --- a/src/mame/drivers/nightmare.cpp +++ /dev/null @@ -1,483 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Tomasz Slanina, Roberto Fresca - -/****************************************************************************** - - Night Mare / Clean Octopus. - - E.F.O. S.A. Video IV System. - Barcelona, Spain. - - This is a multi board system based on 2x RCA CDP1802 COSMAC (main & sound CPU), - and two graphics devices (VDP) similar to TMS9928 (Texas Instruments), marked - as EFO 90501. Also has an On-Screen settings instead of regular DIP switches, - saving the config into a SDA2006 NV EEPROM. A big design for 1982. - - The game was designed by EFO/Playmatic in 1982, then dissappeared and remained - lost till now. - - The name of the game for the local market was "Night Mare" (misspelled in - some cases as "Nigth Mare"), but for the international market they changed the - name to "Clean Octopus". - - --------------------------------------------------------------------------------- - - Main board: - - 1x CPU RCA 1802 @ 3.60398 MHz. - - 2x EFO 90501 (remarked TMS9928 VDP) - - 16x TMS4116 (16384 x 1 DRAM) (for VDPs). - 2x MM2114N (1024 x 4 SRAM) (1024 KB for working RAM). - 1x SDA2006 (non volatile 512-bit EEPROM) (for settings). - - 3x TMS2564 EPROMs. - - 3x CDP1852 (I/O). - - 1x Xtal @ 10.816 MHz. - - - Sound board: - - 1x CPU RCA 1802 @ 2.95008 MHz. - - 1x EFO 90503 (seems a remarked TMS5220, speech synthesizer IC). - - 1x CDP1824 (32 x 8) RAM. - - 2x CDP1852 (I/O). - - 1x Xtal @ 2.9500 MHz. - - Sound ROM is missing. - Overall the board is pretty much dead, no interruptions observed, no video sync output. - - PCBs layout: - - .---------------------------------------------------.----------------------------------------------------------------------. - | SOUND-3 | O O O O | | .-------. .-------. | O O O O O O O O O O O | .---| - | '---------' | IC32 |TMS4116| |TMS4116| IC18 '-----------------------' | O | - | [ FUSE ] | '-------' '-------' J3 | O | - | .---| .-------. .-------. MALE CONNECTORS | O | - | [ FUSE ] S O U N D GND| O | IC33 |TMS4116| |TMS4116| IC19 J | O | - | SPK| O | '-------' '-------' 1 | O | - | B O A R D '---| .-------. .-------. .-------------. | O | - | | IC34 |TMS4116| |TMS4116| IC20 | CDP 1852 CE | IC8 | O | - | IC10 | '-------' '-------' | RCA | | O | - | .----------. | .-------. .-------. '-------------' >---| - | |CD40106BE | | IC35 |TMS4116| |TMS4116| IC21 | O | - | IC2 IC6 '----------' | '-------' '-------' .-------------. | O | - | .----------. .----------. | .-------. .-------. | CDP 1852 CE | IC9 J | O | - | |CDP1859CE | |CDP1824CE | | IC36 |TMS4116| |TMS4116| IC22 | RCA | 2 | O | - | '----------' '----------' IC9 | '-------' '-------' '-------------' | O | - | IC1 .--------------. .--------------. | .-------. .-------. | O | - | .----------. | MISSING | | EFO 90503 | | IC37 |TMS4116| |TMS4116| IC23 .-------------. | O | - | |CDP1859CE | | EPROM | | | | '-------' '-------' | CDP 1852 CE | IC10 '---| - | '----------' '--------------' '--------------' O=O .-------. .-------. | RCA | | - | IC5 IC8 O=O IC38 |TMS4116| |TMS4116| IC24 '-------------' | - | .-------------. O=O '-------' '-------' | - | [2.9500] | CDP 1852 CE | O=O J .-------. .-------. .-----IC11------. | - | [ XTAL ] | RCA | O=O 5 IC39 |TMS4116| |TMS4116| IC25 | TMS 2564 | .---IC1---. | - | '-------------' O=O '-------' '-------' | NM1-1A1 | |CDP1859CE| | - | IC6 IC7 O=O '---------------' '---------' | - | .-------------------. .-------------. O=O .-------. .-------. .---IC2---. | - | | CDP 1802 ACE | | CDP 1852 CE | O=O IC40 |74LS04N| |74LS04N| IC26 .-----IC12------. |CD4042BE | | - | | RCA | | RCA | O=O '-------' '-------' | TMS 2564 | '---------' | - | '-------------------' '-------------' | .---------. .---------. | NM1-1B1 | .---IC3---. | - | | IC41 |74LS373N | |74LS373N | IC27 '---------------' |CD4011UBE| | - '---------------------------------------------------| '---------' '---------' '---------' | - | .-------------------. .-----IC13------. .---IC4---. | - | IC28 | EFO 90501 | | TMS 2564 | |CD4071BE | | - .---------------------------------------------------| | | | NM1-1C1 | '---------' | - | | '-------------------' '---------------' .---IC5---. | - | P.S.U. - V. IV | .-------------------. |CD4001UBE| | - | | IC29 | EFO 90501 | '---------' | - | | | | .---------. .---IC6---. | - | P O W E R | '-------------------' | MM2114N | IC15 |CDP1853CE| | - | | [10.816] '---------' '---------' | - | S U P P L Y O=O +12 [ XTAL ] .---------. .---IC7---. | - | O=O GND | MM2114N | IC16 | SDA2006 | | - | B O A R D O=O -5 J .---------. '---------' '---------' | - | O=O +5 6 IC30 | 74LS04N | | - | O=O +15 '---------' | - | O=O +33 .-------------------. | - | O=O CLK .---------. | CDP 1802 ACE | IC17 | - | O=O +C IC31 |74LS107N | | RCA | | - | | J4 '---------' '-------------------' | - | | .-----------. | - | | | O O O O O | VIDEO IV | - '---------------------------------------------------'----------------------------------------------------------------------' - - - PINOUTS - ------- - - Main Board: - - - J1: Pin marked 0 ---> IC9 CDP1852CE, pin 3. J2: Pin marked +C --> Vcc for external use. - J1: Pin marked 1 ---> IC9 CDP1852CE, pin 5. J2: Pin marked +C --> Vcc for external use. - J1: Pin marked 2 ---> IC9 CDP1852CE, pin 7. J2: Pin marked 1 ---> IC10 CDP1852CE, pin 6. - J1: Pin marked 3 ---> IC9 CDP1852CE, pin 9. J2: Pin marked 2 ---> IC10 CDP1852CE, pin 8. - J1: Pin marked 4 ---> IC9 CDP1852CE, pin 16. J2: Pin marked 3 ---> IC10 CDP1852CE, pin 10. - J1: Pin marked 5 ---> IC9 CDP1852CE, pin 18. J2: Pin marked 4 ---> IC10 CDP1852CE, pin 17. - J1: Pin marked 6 ---> IC9 CDP1852CE, pin 20. J2: Pin marked 5 ---> IC10 CDP1852CE, pin 14. - J1: Pin marked 7 ---> IC9 CDP1852CE, pin 22. - - - J3: Pin marked 0 ---> IC8 CDP1852CE, pin 3. J4: Pin marked SY --> Video Sync. - J3: Pin marked 1 ---> IC8 CDP1852CE, pin 5. J4: Pin marked R ---> Red. - J3: Pin marked 2 ---> IC8 CDP1852CE, pin 7. J4: Pin marked G ---> Green. - J3: Pin marked 3 ---> IC8 CDP1852CE, pin 9. J4: Pin marked B ---> Blue. - J3: Pin marked 4 ---> IC8 CDP1852CE, pin 16. J4: Pin marked GND -> GND. - J3: Pin marked 5 ---> IC8 CDP1852CE, pin 18. - J3: Pin marked 6 ---> IC8 CDP1852CE, pin 20. - J3: Pin marked 7 ---> IC8 CDP1852CE, pin 22. J5: Pin marked GND --> GND. - J3: Pin marked D ---> IC7 CDP1802ACE, pin 21. J5: Pins marked 1-8 -> CPU data bus. - J3: Pin marked GND -> GND . J5: Pin marked 9 ----> Mainboard IC5 CD4001, pin 11. - J3: Pin marked T ---> IC7 CDP1802ACE, pin 22. - - - IC7, SDA2006 512-bit NV EEPROM: - - .----v----. - -5V -|01 18|- N/C - +12V -|02 S 17|- N/C - +33V -|03 D 16|- IC17 CD1802, pin 04 - GND -|04 A 15|- IC17 CD1802, pin 24 - N/C -|05 2 14|- IC17 CD1802, pin 23 - IC17 CD1802, pin 03 -|06 0 13|- GND - N/C -|07 0 12|- IC10 CDP1852, pin 19 - IC10 CDP1852, pin 21 -|08 6 11|- GND - GND -|09 10|- +15V - '---------' - - 01: Ubb (Substrate vias). 10) CS2 (Chip select inputs: 12 bits CW). - 02: Udd (Supply voltage). 11) CS2 (Chip select inputs: 12 bits CW). - 03: Uph (Programming voltage). 12) Φ (Clock input). - 04: STWL (Lenght of Control Word: 8/12 bits). 13) L (Programming signal output) (load). - 05: N/C. 14) Dq (Data output). - 06: /RES (Reset input). 15) INV (Invert input signals). - 07: N/C. 16) REC (Data input control) (receive). - 08: Di (Data input). 17) Uss (Ground). - 09: CS3 (Chip select inputs: 8 or 12 bits CW). 18) Upi (Write voltage). - - - Since STWL is connected to GND, the control word is set to 8-bit lenght. - - - - Sound Board: - (also used on some Pinball machines) - - IC9, EFO 90503 (seems a remarked TMS5220, speech synthesizer IC). - - .-----v-----. - D0 -|01 28|- /RS - -|02 27|- /WS - -|03 E 26|- D1 - .--- VBB -|04 F 25|- - (*)| VCC -|05 O 24|- D2 - '--- OSC -|06 23|- - -|07 9 22|- D3 - SPK -|08 0 21|- - -|09 5 20|- - -|10 0 19|- D4 - GND -|11 3 18|- /RCI - D5 -|12 17|- /INT - D6 -|13 16|- - D7 -|14 15|- - '-----------' - - (*) Pin 4 is wired to a pot + resistor, and then connected to pin 6. - This is surely to sync the 160 kHz needed for the device. - - - TODO: - - - Soft reset doesn't work. - - Verify video mixing (Press F2 to enter service mode, then press 1 + 2 to continue - to settings screen. There's diagnostic color pattern at the top of screen) - - Add sound hardware (ROM is missing) - - Quitting MAME while in service mode settings screen will invalidate settings - -******************************************************************************/ - -#include "emu.h" -#include "video/tms9928a.h" -#include "cpu/cosmac/cosmac.h" -#include "machine/cdp1852.h" -#include "machine/sda2006.h" - - -#define MASTER_CLOCK XTAL(10'816'000) -#define SOUND_CLOCK XTAL( 2'950'000) - -class nightmare_state : public driver_device -{ -public: - enum - { - TIMER_SET_CPU_MODE - }; - - nightmare_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag) - , m_maincpu(*this, "cdp1802") - , m_soundcpu(*this,"cdp1802_sound") - , m_vdc(*this, "vdc") - , m_vdc2(*this, "vdc2") - , m_eeprom(*this,"eeprom") - { } - - void nightmare(machine_config &config); - -protected: - DECLARE_READ_LINE_MEMBER( clear_r ); - DECLARE_READ_LINE_MEMBER( ef1_r ); - DECLARE_READ_LINE_MEMBER( ef2_r ); - DECLARE_WRITE_LINE_MEMBER( q_w ); - DECLARE_WRITE8_MEMBER( ic10_w ); - DECLARE_WRITE8_MEMBER( unkout_w ); - - void nightmare_map(address_map &map); - void nightmare_io_map(address_map &map); - void nightmare_sound_map(address_map &map); - void nightmare_sound_io_map(address_map &map); - uint32_t screen_update_nightmare(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; - virtual void machine_start() override; - virtual void machine_reset() override; - - required_device<cosmac_device> m_maincpu; - required_device<cosmac_device> m_soundcpu; - required_device<tms9928a_device> m_vdc; - required_device<tms9928a_device> m_vdc2; - required_device<sda2006_device> m_eeprom; - - // cpu state - int m_reset; -}; - -void nightmare_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) -{ - switch (id) - { - case TIMER_SET_CPU_MODE: - m_reset = 1; - break; - default: - throw emu_fatalerror("Unknown id in nightmare_state::device_timer"); - } -} - -void nightmare_state::machine_start() -{ - save_item(NAME(m_reset)); - -} - -/* Machine Reset */ - -void nightmare_state::machine_reset() -{ - m_reset = 0; - timer_set(attotime::from_msec(200), TIMER_SET_CPU_MODE); -} - -/* CDP1802 Interface */ - -READ_LINE_MEMBER( nightmare_state::clear_r ) -{ - return m_reset; -} - -WRITE_LINE_MEMBER( nightmare_state::q_w ) -{ - m_eeprom->write_clock(state); -} - -READ_LINE_MEMBER( nightmare_state::ef1_r ) -{ - //EEPROM Inv ??? - - return 0; -} - - -READ_LINE_MEMBER( nightmare_state::ef2_r ) -{ - //EEPROM Dq data read; - return m_eeprom->read_data(); -} - - -WRITE8_MEMBER( nightmare_state::ic10_w ) -{ - /* - 7 - EEPROM Di - 6 - EEPROM Clock - 5 - J2 - 4 - J2 - 3 - J2 - 2 - J2 - 1 - J2 - 0 - ? - */ - - m_eeprom->write_data((data&0x80) ?1:0); - m_eeprom->write_enable((data&0x40) ?1:0); -} - - -WRITE8_MEMBER( nightmare_state::unkout_w ) -{ - // J3 -} - -void nightmare_state::nightmare_map(address_map &map) -{ - map(0x0000, 0x5fff).rom(); - map(0x8000, 0x83ff).ram(); -} - -void nightmare_state::nightmare_io_map(address_map &map) -{ - map(1, 1).r("ic8", FUNC(cdp1852_device::read)).w(FUNC(nightmare_state::unkout_w)); - map(2, 2).r("ic9", FUNC(cdp1852_device::read)).w("ic10", FUNC(cdp1852_device::write)); - - map(4, 5).rw(m_vdc, FUNC(tms9928a_device::read), FUNC(tms9928a_device::write)); - map(6, 7).rw(m_vdc2, FUNC(tms9928a_device::read), FUNC(tms9928a_device::write)); -} - -void nightmare_state::nightmare_sound_map(address_map &map) -{ - map(0x0000, 0x3fff).rom(); -} - -void nightmare_state::nightmare_sound_io_map(address_map &map) -{ - -} - -uint32_t nightmare_state::screen_update_nightmare(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) -{ - // combine two buffers (additive?) - for (int y = cliprect.top(); y <= cliprect.bottom(); y++) - { - uint32_t *const bitmap1 = &m_vdc2->get_bitmap().pix32(y); - uint32_t *const bitmap2 = &m_vdc->get_bitmap().pix32(y); - uint32_t *dst = &bitmap.pix32(y); - - for (int x = cliprect.left(); x <= cliprect.right(); x++) - { - uint32_t p1 = bitmap1[x]; - uint32_t p2 = bitmap2[x]; - uint32_t result = 0; - - for(int shift=0; shift<32;shift+=8) - { - uint32_t data = ((p2>>shift)&0xff)+((p1>>shift)&0xff); - result|=((data>0xff)?0xff:data)<<shift; - } - dst[x]=result; - } - } - - return 0; -} - -static INPUT_PORTS_START( nightmare ) - PORT_START("IN0") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_COCKTAIL - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL - - PORT_START("IN1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL - - PORT_START("EF") - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_WRITE_LINE_DEVICE_MEMBER("cdp1802", cosmac_device, ef3_w) //ic17 - cpu - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_TILT ) PORT_WRITE_LINE_DEVICE_MEMBER("cdp1802", cosmac_device, ef4_w) -INPUT_PORTS_END - - -void nightmare_state::nightmare(machine_config &config) -{ - /* main cpu */ - CDP1802(config, m_maincpu, MASTER_CLOCK/3); - m_maincpu->set_addrmap(AS_PROGRAM, &nightmare_state::nightmare_map); - m_maincpu->set_addrmap(AS_IO, &nightmare_state::nightmare_io_map); - m_maincpu->wait_cb().set_constant(1); - m_maincpu->clear_cb().set(FUNC(nightmare_state::clear_r)); - m_maincpu->q_cb().set(FUNC(nightmare_state::q_w)); - m_maincpu->ef1_cb().set(FUNC(nightmare_state::ef1_r)); - m_maincpu->ef2_cb().set(FUNC(nightmare_state::ef2_r)); - m_maincpu->tpb_cb().set("ic10", FUNC(cdp1852_device::clock_w)); - - /* sound cpu */ - CDP1802(config, m_soundcpu, SOUND_CLOCK); - m_soundcpu->set_addrmap(AS_PROGRAM, &nightmare_state::nightmare_sound_map); - m_soundcpu->set_addrmap(AS_IO, &nightmare_state::nightmare_sound_io_map); - m_soundcpu->set_disable(); - - /* i/o hardware */ - cdp1852_device &ic8(CDP1852(config, "ic8")); - ic8.mode_cb().set_constant(0); - ic8.di_cb().set_ioport("IN0"); - - cdp1852_device &ic9(CDP1852(config, "ic9")); - ic9.mode_cb().set_constant(0); - ic9.di_cb().set_ioport("IN1"); - - cdp1852_device &ic10(CDP1852(config, "ic10")); - ic10.mode_cb().set_constant(1); - ic10.do_cb().set(FUNC(nightmare_state::ic10_w)); - - SDA2006(config, m_eeprom); - - /* video hardware */ - EFO90501( config, m_vdc, MASTER_CLOCK ); - m_vdc->set_screen("screen"); - m_vdc->set_vram_size(0x4000); - - EFO90501( config, m_vdc2, MASTER_CLOCK ); - m_vdc2->set_screen("screen"); - m_vdc2->set_vram_size(0x4000); - m_vdc2->int_callback().set_inputline(m_maincpu, COSMAC_INPUT_LINE_INT); - - screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); - screen.set_screen_update(FUNC(nightmare_state::screen_update_nightmare)); -} - - -ROM_START( nightmare ) - ROM_REGION( 0x6000, "cdp1802", 0 ) - ROM_LOAD( "nm1-ia1.bin", 0x0000, 0x2000, CRC(5d648f62) SHA1(028a47d4b1b4910d0d4e00f81d4e94a5478834d3) ) - ROM_LOAD( "nm1-ib1.bin", 0x2000, 0x2000, CRC(c10695f7) SHA1(929467fe7529782e8181d3caae3a67bb0a8d8753) ) - ROM_LOAD( "nm1-ic1.bin", 0x4000, 0x2000, CRC(a3117246) SHA1(ca9601401f7ab34200c969e41ffae50bee0aca4d) ) - - ROM_REGION( 0x10000, "cdp1802_sound", 0 ) - ROM_LOAD( "sound.bin", 0x0000, 0x4000, NO_DUMP ) - - ROM_REGION( 0x40, "eeprom", 0 ) - ROM_LOAD( "eeprom", 0x00, 0x40, CRC(7824e1f8) SHA1(2ccac62b4e8abcb2b3d66fa4025947fea184664e) ) -ROM_END - -GAME( 1982, nightmare, 0, nightmare, nightmare, nightmare_state, empty_init, ROT90, "E.F.O.", "Night Mare (Spain)", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) |