| Previous | 199869 Revisions | Next |
| r39869 Wednesday 22nd July, 2015 at 01:15:33 UTC by David Haywood |
|---|
| Merge pull request #264 from JoakimLarsson/force68k Force68k |
| [/trunk] | .travis.yml |
| [3rdparty/mongoose] | mongoose.c |
| [nl_examples] | congo_bongo.c |
| [src/emu/bus/msx_cart] | moonsound.c moonsound.h |
| [src/emu/cpu/ucom4] | ucom4.c ucom4.h ucom4op.c |
| [src/emu/machine] | smpc.c stvcd.c |
| [src/emu/netlist] | nl_factory.c nl_factory.h nl_parser.c nl_setup.c nl_setup.h |
| [src/emu/netlist/analog] | nld_bjt.c nld_bjt.h nld_opamps.c nld_opamps.h nld_twoterm.c nld_twoterm.h |
| [src/emu/netlist/devices] | net_lib.c nld_system.h |
| [src/emu/netlist/plib] | plists.h |
| [src/emu/sound] | scsp.c ymf278b.c ymf278b.h |
| [src/mame] | arcade.lst |
| [src/mame/audio] | scramble.c |
| [src/mame/drivers] | ddenlovr.c dec0.c fuukifg3.c paranoia.c scramble.c seta2.c system1.c system16.c taitoair.c tnzs.c wecleman.c |
| [src/mame/includes] | scramble.h system1.h system16.h |
| [src/mame/machine] | scramble.c |
| [src/mess/drivers] | hh_tms1k.c sdk80.c tb303.c vk100.c |
| [src/mess/layout] | tb303.lay |
| [src/tools] | nltool.c |
| r248380 | r248381 | |
|---|---|---|
| 16 | 16 | - sudo add-apt-repository ppa:shahar-evron/qt-backports -y |
| 17 | 17 | - sudo apt-get update -qq |
| 18 | 18 | - sudo apt-get install -y libsdl2-dev libsdl2-ttf-dev libasound2-dev libqt4-dev libqt4-dev-bin |
| 19 | notifications: | |
| 20 | email: | |
| 21 | - secure: "sK8JJcn1A0yLnbDJ/7vmJgESuXmP6D4QlvQvsYLp1xAx5eTVSJ5Z+GSXLBJ9CnoeJ5AlPVPX4rXdRV93UyxYlTh1O97x8VZZQtYBNPRjk/VCflsOOg7C+jcJKX/knMu/QG2MVEDE5G2b8mHSAgWljG/7Z2N0rYZlWppwklYafOkyW4uE0E7PU5XpmKim4ra6Y1eDSbap+XJiDwgUm9moDZrgAv7eom9NIWGNMRIozSRyR2IkYimlWE92FOy5PzLJtFGK02iumbYN+39mTux59v/h/m6HD6cD7Wf10Lco9+Fnmi9Bs+VvIReJIP9pDABRvJ3MkUV4I9BjUT9xk48lzxqjGtdfUwOMDOTABd4Pb/5cmNtyNUQIosy5oiplR6USBnqD7/gmJw+mfn3A+jdQHGne+akypwzUjSM6XrezjTiZLlDDG+QpA0kwAnxSXw8H2SpVyynMSn4nu0iZmOiOZMtFY0jKlt/W7OFC5wTuJFrky+bBGlVIv3KGOTJNJNgasXV4u0NXOjHyeBFpFYCIf0FZLfYyf7ITu94JxUzXGcVi5D0lBwvKY9HfJ4yJxciyfH6V7yU1+o23E/Meqe/tjt6dTW8DM5xIokrnusfzE5b0zw5GFyg54nbpazXpcPnrMdxhp+t2C7xKrxcZXhBECRYegj+Z86D9BJP/yum1YrQ=" |
| r248380 | r248381 | |
|---|---|---|
| 5479 | 5479 | (void) ev; |
| 5480 | 5480 | |
| 5481 | 5481 | //DBG(("%p [%s]", conn, msg)); |
| 5482 | if (sscanf(msg, "%p %n", &func, &n) && func != NULL && conn != NULL) { | |
| 5482 | if (sscanf(msg, "%p %n", (void **) &func, &n) && func != NULL && conn != NULL) { | |
| 5483 | 5483 | conn->mg_conn.callback_param = (void *) (msg + n); |
| 5484 | 5484 | func(&conn->mg_conn, MG_POLL); |
| 5485 | 5485 | } |
| r248380 | r248381 | |
|---|---|---|
| 78 | 78 | /* The opamp actually has an FPF of about 500k. This doesn't work here and causes oscillations. |
| 79 | 79 | * FPF here therefore about half the Solver clock. |
| 80 | 80 | */ |
| 81 | PARAM(XU16.B.model, "MB3614_SLOW") | |
| 82 | PARAM(XU17.C.model, "MB3614_SLOW") | |
| 81 | PARAM(XU16.B.MODEL, "MB3614_SLOW") | |
| 82 | PARAM(XU17.C.MODEL, "MB3614_SLOW") | |
| 83 | 83 | |
| 84 | 84 | OPTIMIZE_FRONTIER(C51.1, RES_K(20), 50) |
| 85 | 85 | OPTIMIZE_FRONTIER(R77.2, RES_K(20), 50) |
| r248380 | r248381 | |
|---|---|---|
| 5 | 5 | TODO: |
| 6 | 6 | - Properly hook up correct SRAM sizes for different moonsound compatible |
| 7 | 7 | cartridges. (Original moonsound has 128KB SRAM) |
| 8 | - Fix FM support (ymf262 support needs to be added to ymf278b). | |
| 9 | 8 | |
| 10 | 9 | **********************************************************************************/ |
| 11 | 10 | |
| r248380 | r248381 | |
| 42 | 41 | MCFG_YMF278B_IRQ_HANDLER(WRITELINE(msx_cart_moonsound,irq_w)) |
| 43 | 42 | MCFG_SOUND_ROUTE(0, "lspeaker", 0.50) |
| 44 | 43 | MCFG_SOUND_ROUTE(1, "rspeaker", 0.50) |
| 44 | MCFG_SOUND_ROUTE(2, "lspeaker", 0.40) | |
| 45 | MCFG_SOUND_ROUTE(3, "rspeaker", 0.40) | |
| 46 | MCFG_SOUND_ROUTE(4, "lspeaker", 0.40) | |
| 47 | MCFG_SOUND_ROUTE(5, "rspeaker", 0.40) | |
| 45 | 48 | MACHINE_CONFIG_END |
| 46 | 49 | |
| 47 | 50 |
| r248380 | r248381 | |
|---|---|---|
| 31 | 31 | |
| 32 | 32 | private: |
| 33 | 33 | required_device<ymf278b_device> m_ymf278b; |
| 34 | ||
| 35 | 34 | }; |
| 36 | 35 | |
| 37 | 36 |
| r248380 | r248381 | |
|---|---|---|
| 12 | 12 | TODO: |
| 13 | 13 | - what happens with uCOM-43 opcodes on an uCOM-44/45 MCU? |
| 14 | 14 | - what's the data after the ROM data for? (eg. 2000-2047, official ROM size is 2000) |
| 15 | - is DPh internally 3-bit or 4-bit? (currently assume 4-bit, it could have effect | |
| 16 | on specific uCOM-43 exchange opcodes) | |
| 17 | - RAM access from 0x50-0x7f on data_96x4 | |
| 18 | - invalid port accesses via DPl | |
| 19 | - documentation is conflicting if IRQ is level or edge triggered | |
| 15 | 20 | |
| 16 | 21 | */ |
| 17 | 22 | |
| r248380 | r248381 | |
| 116 | 121 | m_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ucom4_cpu_device::simple_timer_cb), this)); |
| 117 | 122 | |
| 118 | 123 | // resolve callbacks |
| 119 | m_read_a.resolve_safe(0xf); | |
| 120 | m_read_b.resolve_safe(0xf); | |
| 121 | m_read_c.resolve_safe(0xf); | |
| 122 | m_read_d.resolve_safe(0xf); | |
| 124 | m_read_a.resolve_safe(0); | |
| 125 | m_read_b.resolve_safe(0); | |
| 126 | m_read_c.resolve_safe(0); | |
| 127 | m_read_d.resolve_safe(0); | |
| 123 | 128 | |
| 124 | 129 | m_write_c.resolve_safe(); |
| 125 | 130 | m_write_d.resolve_safe(); |
| r248380 | r248381 | |
|---|---|---|
| 216 | 216 | void ram_w(UINT8 data); |
| 217 | 217 | void pop_stack(); |
| 218 | 218 | void push_stack(); |
| 219 | UINT8 input_r(int index); | |
| 220 | void output_w(int index, UINT8 data); | |
| 219 | virtual UINT8 input_r(int index); | |
| 220 | virtual void output_w(int index, UINT8 data); | |
| 221 | 221 | |
| 222 | 222 | bool check_op_43(); |
| 223 | 223 | TIMER_CALLBACK_MEMBER( simple_timer_cb ); |
| r248380 | r248381 | |
| 322 | 322 | { |
| 323 | 323 | public: |
| 324 | 324 | upd650_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| 325 | ||
| 326 | protected: | |
| 327 | virtual UINT8 input_r(int index); | |
| 325 | 328 | }; |
| 326 | 329 | |
| 327 | 330 |
| r248380 | r248381 | |
|---|---|---|
| 43 | 43 | { |
| 44 | 44 | case NEC_UCOM4_PORTA: inp = m_read_a(index, 0xff); break; |
| 45 | 45 | case NEC_UCOM4_PORTB: inp = m_read_b(index, 0xff); break; |
| 46 | case NEC_UCOM4_PORTC: inp = m_read_c(index, 0xff); break; | |
| 47 | case NEC_UCOM4_PORTD: inp = m_read_d(index, 0xff); break; | |
| 46 | case NEC_UCOM4_PORTC: inp = m_read_c(index, 0xff) | m_port_out[index]; break; | |
| 47 | case NEC_UCOM4_PORTD: inp = m_read_d(index, 0xff) | m_port_out[index]; break; | |
| 48 | 48 | |
| 49 | 49 | default: |
| 50 | 50 | logerror("%s read from unknown port %c at $%03X\n", tag(), 'A' + index, m_prev_pc); |
| r248380 | r248381 | |
| 54 | 54 | return inp & 0xf; |
| 55 | 55 | } |
| 56 | 56 | |
| 57 | UINT8 upd650_cpu_device::input_r(int index) | |
| 58 | { | |
| 59 | // bidirectional ports are 'push-pull', meaning it will output 0 when it's read | |
| 60 | if ((index & 0xf) == NEC_UCOM4_PORTC || (index & 0xf) == NEC_UCOM4_PORTD) | |
| 61 | output_w(index, 0); | |
| 62 | ||
| 63 | return ucom4_cpu_device::input_r(index); | |
| 64 | } | |
| 65 | ||
| 57 | 66 | void ucom4_cpu_device::output_w(int index, UINT8 data) |
| 58 | 67 | { |
| 59 | 68 | index &= 0xf; |
| r248380 | r248381 | |
|---|---|---|
| 686 | 686 | case 0x0a: |
| 687 | 687 | case 0x0b: |
| 688 | 688 | popmessage ("SMPC: NETLINK %s, contact MAMEdev",(data & 1) ? "off" : "on"); |
| 689 | break; | |
| 690 | case 0x0d: | |
| 689 | break; case 0x0d: | |
| 691 | 690 | if(LOG_SMPC) printf ("SMPC: System Reset\n"); |
| 692 | 691 | smpc_system_reset(); |
| 693 | 692 | break; |
| r248380 | r248381 | |
| 926 | 925 | case 2: |
| 927 | 926 | res = th<<6; |
| 928 | 927 | // 1 C B Right Left Down Up |
| 928 | // WHP actually has a very specific code at 0x6015f30, doesn't like bits 0-1 active here ... | |
| 929 | 929 | res|= (((machine().root_device().ioport(padnames[pad_n])->read()>>4)) & 0x30); // C & B |
| 930 | res|= (((machine().root_device().ioport(padnames[pad_n])->read()>>12)) & 0x | |
| 930 | res|= (((machine().root_device().ioport(padnames[pad_n])->read()>>12)) & 0xc); | |
| 931 | 931 | break; |
| 932 | 932 | case 1: |
| 933 | 933 | res = th<<6; |
| r248380 | r248381 | |
| 939 | 939 | // 0 Start A 0 0 Down Up |
| 940 | 940 | res|= (((machine().root_device().ioport(padnames[pad_n])->read()>>6)) & 0x30); // Start & A |
| 941 | 941 | res|= (((machine().root_device().ioport(padnames[pad_n])->read()>>12)) & 0x3); |
| 942 | // ... and actually wants bits 2 - 3 active here. | |
| 943 | res|= 0xc; | |
| 942 | 944 | break; |
| 943 | 945 | } |
| 944 | ||
| 946 | ||
| 945 | 947 | return res; |
| 946 | 948 | } |
| 947 | 949 | |
| r248380 | r248381 | |
| 1025 | 1027 | { |
| 1026 | 1028 | if(data & 0x40) |
| 1027 | 1029 | { |
| 1028 | if(LOG_PAD_CMD) printf("SMPC: BREAK request\n"); | |
| 1030 | if(LOG_PAD_CMD) printf("SMPC: BREAK request %02x\n",data); | |
| 1029 | 1031 | m_smpc.SR &= 0x0f; |
| 1030 | 1032 | m_smpc.intback_stage = 0; |
| 1031 | 1033 | } |
| 1032 | 1034 | else if(data & 0x80) |
| 1033 | 1035 | { |
| 1034 | if(LOG_PAD_CMD) printf("SMPC: CONTINUE request\n"); | |
| 1036 | if(LOG_PAD_CMD) printf("SMPC: CONTINUE request %02x\n",data); | |
| 1035 | 1037 | machine().scheduler().timer_set(attotime::from_usec(700), timer_expired_delegate(FUNC(saturn_state::intback_peripheral),this),0); /* TODO: is timing correct? */ |
| 1036 | 1038 | m_smpc.OREG[31] = 0x10; |
| 1037 | 1039 | m_smpc.SF = 0x01; //TODO: set hand-shake flag? |
| r248380 | r248381 | |
|---|---|---|
| 862 | 862 | //printf("Partition %08x %04x\n",bufnum,cr4); |
| 863 | 863 | } |
| 864 | 864 | |
| 865 | hirqreg |= (CMOK|DRDY); | |
| 865 | printf("%04x\n",cr4); | |
| 866 | if(cr4 == 0) | |
| 867 | hirqreg |= (CMOK); | |
| 868 | else | |
| 869 | hirqreg |= (CMOK|DRDY); | |
| 866 | 870 | status_type = 1; |
| 867 | 871 | } |
| 868 | 872 | break; |
| r248380 | r248381 | |
| 1908 | 1912 | cr1 = data; |
| 1909 | 1913 | cd_stat &= ~CD_STAT_PERI; |
| 1910 | 1914 | cmd_pending |= 1; |
| 1915 | sh1_timer->adjust(attotime::never); | |
| 1911 | 1916 | break; |
| 1912 | 1917 | case 0x001c: |
| 1913 | 1918 | case 0x001e: |
| r248380 | r248381 | |
|---|---|---|
| 55 | 55 | |
| 56 | 56 | NETLIB_START(Q) |
| 57 | 57 | { |
| 58 | register_param(" | |
| 58 | register_param("MODEL", m_model, ""); | |
| 59 | 59 | } |
| 60 | 60 | |
| 61 | 61 | NETLIB_RESET(Q) |
| r248380 | r248381 | |
|---|---|---|
| 11 | 11 | #include "../nl_base.h" |
| 12 | 12 | #include "nld_twoterm.h" |
| 13 | 13 | |
| 14 | // ----------------------------------------------------------------------------- | |
| 14 | // ----------------------------------------------------------------------------- | |
| 15 | 15 | // Macros |
| 16 | // ----------------------------------------------------------------------------- | |
| 16 | // ----------------------------------------------------------------------------- | |
| 17 | 17 | |
| 18 | #define QBJT_SW(_name, _model) \ | |
| 19 | NET_REGISTER_DEV(QBJT_SW, _name) \ | |
| 20 | NETDEV_PARAMI(_name, model, _model) | |
| 18 | #define QBJT_SW(_name, _model) \ | |
| 19 | NET_REGISTER_DEV(QBJT_SW, _name) \ | |
| 20 | NETDEV_PARAMI(_name, MODEL, _model) | |
| 21 | 21 | |
| 22 | #define QBJT_EB(_name, _model) \ | |
| 23 | NET_REGISTER_DEV(QBJT_EB, _name) \ | |
| 24 | NETDEV_PARAMI(_name, model, _model) | |
| 22 | #define QBJT_EB(_name, _model) \ | |
| 23 | NET_REGISTER_DEV(QBJT_EB, _name) \ | |
| 24 | NETDEV_PARAMI(_name, MODEL, _model) | |
| 25 | 25 | |
| 26 | 26 | |
| 27 | 27 | NETLIB_NAMESPACE_DEVICES_START() |
| 28 | 28 | |
| 29 | // ----------------------------------------------------------------------------- | |
| 29 | // ----------------------------------------------------------------------------- | |
| 30 | 30 | // nld_Q - Base classes |
| 31 | // ----------------------------------------------------------------------------- | |
| 31 | // ----------------------------------------------------------------------------- | |
| 32 | 32 | |
| 33 | 33 | // Have a common start for transistors |
| 34 | 34 | |
| r248380 | r248381 | |
| 73 | 73 | |
| 74 | 74 | |
| 75 | 75 | |
| 76 | // ----------------------------------------------------------------------------- | |
| 76 | // ----------------------------------------------------------------------------- | |
| 77 | 77 | // nld_QBJT_switch |
| 78 | // ----------------------------------------------------------------------------- | |
| 78 | // ----------------------------------------------------------------------------- | |
| 79 | 79 | |
| 80 | 80 | |
| 81 | 81 | /* |
| r248380 | r248381 | |
| 126 | 126 | private: |
| 127 | 127 | }; |
| 128 | 128 | |
| 129 | // ----------------------------------------------------------------------------- | |
| 129 | // ----------------------------------------------------------------------------- | |
| 130 | 130 | // nld_QBJT_EB |
| 131 | // ----------------------------------------------------------------------------- | |
| 131 | // ----------------------------------------------------------------------------- | |
| 132 | 132 | |
| 133 | 133 | |
| 134 | 134 | class NETLIB_NAME(QBJT_EB) : public NETLIB_NAME(QBJT) |
| r248380 | r248381 | |
|---|---|---|
| 64 | 64 | register_output("VH", m_VH); |
| 65 | 65 | register_output("VREF", m_VREF); |
| 66 | 66 | |
| 67 | register_param(" | |
| 67 | register_param("MODEL", m_model, ""); | |
| 68 | 68 | |
| 69 | 69 | m_type = m_model.model_value("TYPE"); |
| 70 | 70 |
| r248380 | r248381 | |
|---|---|---|
| 21 | 21 | |
| 22 | 22 | #define OPAMP(_name, _model) \ |
| 23 | 23 | NET_REGISTER_DEV(OPAMP, _name) \ |
| 24 | NETDEV_PARAMI(_name, | |
| 24 | NETDEV_PARAMI(_name, MODEL, _model) | |
| 25 | 25 | |
| 26 | 26 | #define LM3900(_name) \ |
| 27 | 27 | SUBMODEL(opamp_lm3900, _name) |
| r248380 | r248381 | |
|---|---|---|
| 264 | 264 | { |
| 265 | 265 | register_terminal("A", m_P); |
| 266 | 266 | register_terminal("K", m_N); |
| 267 | register_param(" | |
| 267 | register_param("MODEL", m_model, ""); | |
| 268 | 268 | |
| 269 | 269 | m_D.save("m_D", *this); |
| 270 | 270 |
| r248380 | r248381 | |
|---|---|---|
| 24 | 24 | * +-----T-----+ |
| 25 | 25 | * (l) |
| 26 | 26 | * |
| 27 | * This is a resistance in series to a voltage source and paralleled by a current source. | |
| 28 | * This is suitable to model voltage sources, current sources, resistors, capacitors, | |
| 29 | * inductances and diodes. | |
| 27 | * This is a resistance in series to a voltage source and paralleled by a | |
| 28 | * current source. This is suitable to model voltage sources, current sources, | |
| 29 | * resistors, capacitors, inductances and diodes. | |
| 30 | 30 | * |
| 31 | 31 | */ |
| 32 | 32 | |
| r248380 | r248381 | |
| 35 | 35 | |
| 36 | 36 | #include "../nl_base.h" |
| 37 | 37 | |
| 38 | // ----------------------------------------------------------------------------- | |
| 38 | // ----------------------------------------------------------------------------- | |
| 39 | 39 | // Macros |
| 40 | // ----------------------------------------------------------------------------- | |
| 40 | // ----------------------------------------------------------------------------- | |
| 41 | 41 | |
| 42 | 42 | #define RES(_name, _R) \ |
| 43 | NET_REGISTER_DEV(RES, _name) | |
| 43 | NET_REGISTER_DEV(RES, _name) \ | |
| 44 | 44 | NETDEV_PARAMI(_name, R, _R) |
| 45 | 45 | |
| 46 | 46 | #define POT(_name, _R) \ |
| r248380 | r248381 | |
| 54 | 54 | |
| 55 | 55 | |
| 56 | 56 | #define CAP(_name, _C) \ |
| 57 | NET_REGISTER_DEV(CAP, _name) | |
| 57 | NET_REGISTER_DEV(CAP, _name) \ | |
| 58 | 58 | NETDEV_PARAMI(_name, C, _C) |
| 59 | 59 | |
| 60 | 60 | /* Generic Diode */ |
| 61 | 61 | #define DIODE(_name, _model) \ |
| 62 | NET_REGISTER_DEV(DIODE, _name) \ | |
| 63 | NETDEV_PARAMI(_name, model, _model) | |
| 62 | NET_REGISTER_DEV(DIODE, _name) \ | |
| 63 | NETDEV_PARAMI(_name, MODEL, _model) | |
| 64 | 64 | |
| 65 | 65 | #define VS(_name, _V) \ |
| 66 | 66 | NET_REGISTER_DEV(VS, _name) \ |
| r248380 | r248381 | |
| 70 | 70 | NET_REGISTER_DEV(CS, _name) \ |
| 71 | 71 | NETDEV_PARAMI(_name, I, _I) |
| 72 | 72 | |
| 73 | // ----------------------------------------------------------------------------- | |
| 73 | // ----------------------------------------------------------------------------- | |
| 74 | 74 | // Generic macros |
| 75 | // ----------------------------------------------------------------------------- | |
| 75 | // ----------------------------------------------------------------------------- | |
| 76 | 76 | |
| 77 | 77 | |
| 78 | 78 | #ifdef RES_R |
| r248380 | r248381 | |
| 90 | 90 | #define IND_N(ind) ((double)(ind) * 1e-9) |
| 91 | 91 | #define IND_P(ind) ((double)(ind) * 1e-12) |
| 92 | 92 | |
| 93 | // ----------------------------------------------------------------------------- | |
| 93 | // ----------------------------------------------------------------------------- | |
| 94 | 94 | // Implementation |
| 95 | // ----------------------------------------------------------------------------- | |
| 95 | // ----------------------------------------------------------------------------- | |
| 96 | 96 | |
| 97 | 97 | NETLIB_NAMESPACE_DEVICES_START() |
| 98 | 98 | |
| 99 | // ----------------------------------------------------------------------------- | |
| 99 | // ----------------------------------------------------------------------------- | |
| 100 | 100 | // nld_twoterm |
| 101 | // ----------------------------------------------------------------------------- | |
| 101 | // ----------------------------------------------------------------------------- | |
| 102 | 102 | |
| 103 | 103 | class NETLIB_NAME(twoterm) : public device_t |
| 104 | 104 | { |
| r248380 | r248381 | |
| 140 | 140 | private: |
| 141 | 141 | }; |
| 142 | 142 | |
| 143 | // ----------------------------------------------------------------------------- | |
| 143 | // ----------------------------------------------------------------------------- | |
| 144 | 144 | // nld_R |
| 145 | // ----------------------------------------------------------------------------- | |
| 145 | // ----------------------------------------------------------------------------- | |
| 146 | 146 | |
| 147 | 147 | class NETLIB_NAME(R_base) : public NETLIB_NAME(twoterm) |
| 148 | 148 | { |
| r248380 | r248381 | |
| 164 | 164 | param_double_t m_R; |
| 165 | 165 | ); |
| 166 | 166 | |
| 167 | // ----------------------------------------------------------------------------- | |
| 167 | // ----------------------------------------------------------------------------- | |
| 168 | 168 | // nld_POT |
| 169 | // ----------------------------------------------------------------------------- | |
| 169 | // ----------------------------------------------------------------------------- | |
| 170 | 170 | |
| 171 | 171 | NETLIB_DEVICE_WITH_PARAMS(POT, |
| 172 | 172 | NETLIB_NAME(R_base) m_R1; |
| r248380 | r248381 | |
| 187 | 187 | ); |
| 188 | 188 | |
| 189 | 189 | |
| 190 | // ----------------------------------------------------------------------------- | |
| 190 | // ----------------------------------------------------------------------------- | |
| 191 | 191 | // nld_C |
| 192 | // ----------------------------------------------------------------------------- | |
| 192 | // ----------------------------------------------------------------------------- | |
| 193 | 193 | |
| 194 | 194 | class NETLIB_NAME(C) : public NETLIB_NAME(twoterm) |
| 195 | 195 | { |
| r248380 | r248381 | |
| 212 | 212 | }; |
| 213 | 213 | |
| 214 | 214 | |
| 215 | // ----------------------------------------------------------------------------- | |
| 215 | // ----------------------------------------------------------------------------- | |
| 216 | 216 | // A generic diode model to be used in other devices (Diode, BJT ...) |
| 217 | // ----------------------------------------------------------------------------- | |
| 217 | // ----------------------------------------------------------------------------- | |
| 218 | 218 | |
| 219 | 219 | class generic_diode |
| 220 | 220 | { |
| r248380 | r248381 | |
| 285 | 285 | nl_double m_Vcrit; |
| 286 | 286 | }; |
| 287 | 287 | |
| 288 | // ----------------------------------------------------------------------------- | |
| 288 | // ----------------------------------------------------------------------------- | |
| 289 | 289 | // nld_D |
| 290 | // ----------------------------------------------------------------------------- | |
| 290 | // ----------------------------------------------------------------------------- | |
| 291 | 291 | |
| 292 | 292 | class NETLIB_NAME(D) : public NETLIB_NAME(twoterm) |
| 293 | 293 | { |
| r248380 | r248381 | |
| 306 | 306 | generic_diode m_D; |
| 307 | 307 | }; |
| 308 | 308 | |
| 309 | // ----------------------------------------------------------------------------- | |
| 309 | // ----------------------------------------------------------------------------- | |
| 310 | 310 | // nld_VS - Voltage source |
| 311 | 311 | // |
| 312 | 312 | // netlist voltage source must have inner resistance |
| 313 | // ----------------------------------------------------------------------------- | |
| 313 | // ----------------------------------------------------------------------------- | |
| 314 | 314 | |
| 315 | 315 | class NETLIB_NAME(VS) : public NETLIB_NAME(twoterm) |
| 316 | 316 | { |
| r248380 | r248381 | |
| 326 | 326 | param_double_t m_V; |
| 327 | 327 | }; |
| 328 | 328 | |
| 329 | // ----------------------------------------------------------------------------- | |
| 329 | // ----------------------------------------------------------------------------- | |
| 330 | 330 | // nld_CS - Current source |
| 331 | // ----------------------------------------------------------------------------- | |
| 331 | // ----------------------------------------------------------------------------- | |
| 332 | 332 | |
| 333 | 333 | class NETLIB_NAME(CS) : public NETLIB_NAME(twoterm) |
| 334 | 334 | { |
| r248380 | r248381 | |
|---|---|---|
| 59 | 59 | ENTRY(POT, POT, "R") |
| 60 | 60 | ENTRY(POT2, POT2, "R") |
| 61 | 61 | ENTRY(C, CAP, "C") |
| 62 | ENTRY(D, DIODE, " | |
| 62 | ENTRY(D, DIODE, "MODEL") | |
| 63 | 63 | ENTRY(VCVS, VCVS, "-") |
| 64 | 64 | ENTRY(VCCS, VCCS, "-") |
| 65 | 65 | ENTRY(CCCS, CCCS, "-") |
| 66 | 66 | ENTRY(LVCCS, LVCCS, "-") |
| 67 | 67 | ENTRY(VS, VS, "V") |
| 68 | 68 | ENTRY(CS, CS, "I") |
| 69 | ENTRY(OPAMP, OPAMP, " | |
| 69 | ENTRY(OPAMP, OPAMP, "MODEL") | |
| 70 | 70 | ENTRY(dummy_input, DUMMY_INPUT, "-") |
| 71 | 71 | ENTRY(frontier, FRONTIER_DEV, "+I,G,Q") // not intended to be used directly |
| 72 | 72 | ENTRY(function, AFUNC, "N,FUNC") // only for macro devices - NO FEEDBACK loops |
| 73 | ENTRY(QBJT_EB, QBJT_EB, "model") | |
| 74 | ENTRY(QBJT_switch, QBJT_SW, "model") | |
| 73 | ENTRY(QBJT_EB, QBJT_EB, "MODEL") | |
| 74 | ENTRY(QBJT_switch, QBJT_SW, "MODEL") | |
| 75 | 75 | ENTRY(logic_input, TTL_INPUT, "IN") |
| 76 | 76 | ENTRY(logic_input, LOGIC_INPUT, "IN,FAMILY") |
| 77 | 77 | ENTRY(analog_input, ANALOG_INPUT, "IN") |
| r248380 | r248381 | |
|---|---|---|
| 294 | 294 | SUB, |
| 295 | 295 | DIV, |
| 296 | 296 | PUSH_CONST, |
| 297 | PUSH_INPUT | |
| 297 | PUSH_INPUT | |
| 298 | 298 | }; |
| 299 | 299 | |
| 300 | 300 | struct rpn_inst |
| r248380 | r248381 | |
|---|---|---|
| 34 | 34 | } |
| 35 | 35 | |
| 36 | 36 | |
| 37 | factory_list_t::factory_list_t() | |
| 37 | factory_list_t::factory_list_t( setup_t &setup) | |
| 38 | : m_setup(setup) | |
| 38 | 39 | { |
| 39 | 40 | } |
| 40 | 41 | |
| 41 | 42 | factory_list_t::~factory_list_t() |
| 42 | 43 | { |
| 43 | for (std::size_t i=0; i < | |
| 44 | for (std::size_t i=0; i < size(); i++) | |
| 44 | 45 | { |
| 45 | base_factory_t *p = | |
| 46 | base_factory_t *p = value_at(i); | |
| 46 | 47 | pfree(p); |
| 47 | 48 | } |
| 48 | | |
| 49 | clear(); | |
| 49 | 50 | } |
| 50 | 51 | |
| 51 | 52 | #if 0 |
| r248380 | r248381 | |
| 65 | 66 | } |
| 66 | 67 | #endif |
| 67 | 68 | |
| 68 | ||
| 69 | void factory_list_t::error(const pstring &s) | |
| 69 | 70 | { |
| 70 | base_factory_t *f = factory_by_name(name, setup); | |
| 71 | m_setup.netlist().error("%s", s.cstr()); | |
| 72 | } | |
| 73 | ||
| 74 | device_t *factory_list_t::new_device_by_name(const pstring &name) | |
| 75 | { | |
| 76 | base_factory_t *f = factory_by_name(name); | |
| 71 | 77 | return f->Create(); |
| 72 | 78 | } |
| 73 | 79 | |
| 74 | base_factory_t * factory_list_t::factory_by_name(const pstring &name | |
| 80 | base_factory_t * factory_list_t::factory_by_name(const pstring &name) | |
| 75 | 81 | { |
| 76 | for (std::size_t i=0; i < m_list.size(); i++) | |
| 82 | if (contains(name)) | |
| 83 | return (*this)[name]; | |
| 84 | else | |
| 77 | 85 | { |
| 78 | base_factory_t *p = m_list[i]; | |
| 79 | if (p->name() == name) | |
| 80 | { | |
| 81 | return p; | |
| 82 | } | |
| 83 | p++; | |
| 86 | m_setup.netlist().error("Class %s not found!\n", name.cstr()); | |
| 87 | return NULL; // appease code analysis | |
| 84 | 88 | } |
| 85 | setup.netlist().error("Class %s not found!\n", name.cstr()); | |
| 86 | return NULL; // appease code analysis | |
| 87 | 89 | } |
| 88 | 90 | |
| 89 | 91 | } |
| r248380 | r248381 | |
|---|---|---|
| 62 | 62 | } |
| 63 | 63 | }; |
| 64 | 64 | |
| 65 | class factory_list_t | |
| 65 | class factory_list_t : public phashmap_t<pstring, base_factory_t *> | |
| 66 | 66 | { |
| 67 | 67 | public: |
| 68 | typedef plist_t<base_factory_t *> list_t; | |
| 69 | ||
| 70 | factory_list_t(); | |
| 68 | factory_list_t(setup_t &m_setup); | |
| 71 | 69 | ~factory_list_t(); |
| 72 | 70 | |
| 73 | 71 | template<class _C> |
| 74 | 72 | ATTR_COLD void register_device(const pstring &name, const pstring &classname, |
| 75 | 73 | const pstring &def_param) |
| 76 | 74 | { |
| 77 | m_list.add(palloc(factory_t< _C >(name, classname, def_param))); | |
| 75 | if (!add(name, palloc(factory_t< _C >(name, classname, def_param)))) | |
| 76 | error(pstring::sprintf("factory already contains %s", name.cstr())); | |
| 78 | 77 | } |
| 79 | 78 | |
| 80 | 79 | ATTR_COLD void register_device(base_factory_t *factory) |
| 81 | 80 | { |
| 82 | m_list.add(factory); | |
| 81 | if (!add(factory->name(), factory)) | |
| 82 | error(pstring::sprintf("factory already contains %s", factory->name().cstr())); | |
| 83 | 83 | } |
| 84 | 84 | |
| 85 | 85 | //ATTR_COLD device_t *new_device_by_classname(const pstring &classname) const; |
| 86 | ATTR_COLD device_t *new_device_by_name(const pstring &name, setup_t &setup) const; | |
| 87 | ATTR_COLD base_factory_t * factory_by_name(const pstring &name, setup_t &setup) const; | |
| 86 | ATTR_COLD device_t *new_device_by_name(const pstring &name); | |
| 87 | ATTR_COLD base_factory_t * factory_by_name(const pstring &name); | |
| 88 | 88 | |
| 89 | const list_t &list() { return m_list; } | |
| 90 | ||
| 91 | 89 | private: |
| 92 | | |
| 90 | void error(const pstring &s); | |
| 93 | 91 | |
| 92 | setup_t &m_setup; | |
| 94 | 93 | }; |
| 95 | 94 | |
| 96 | 95 | } |
| r248380 | r248381 | |
|---|---|---|
| 360 | 360 | } |
| 361 | 361 | else |
| 362 | 362 | { |
| 363 | base_factory_t *f = m_setup.factory().factory_by_name(dev_type | |
| 363 | base_factory_t *f = m_setup.factory().factory_by_name(dev_type); | |
| 364 | 364 | device_t *dev; |
| 365 | 365 | pstring_list_t termlist = f->term_param_list(); |
| 366 | 366 | pstring_list_t def_params = f->def_params(); |
| r248380 | r248381 | |
|---|---|---|
| 52 | 52 | , m_proxy_cnt(0) |
| 53 | 53 | { |
| 54 | 54 | netlist->set_setup(this); |
| 55 | m_factory = palloc(factory_list_t); | |
| 55 | m_factory = palloc(factory_list_t(*this)); | |
| 56 | 56 | } |
| 57 | 57 | |
| 58 | 58 | void setup_t::init() |
| r248380 | r248381 | |
| 129 | 129 | } |
| 130 | 130 | else |
| 131 | 131 | { |
| 132 | device_t *dev = factory().new_device_by_name(classname | |
| 132 | device_t *dev = factory().new_device_by_name(classname); | |
| 133 | 133 | //device_t *dev = factory().new_device_by_classname(classname); |
| 134 | 134 | if (dev == NULL) |
| 135 | 135 | netlist().error("Class %s not found!\n", classname.cstr()); |
| r248380 | r248381 | |
| 235 | 235 | else |
| 236 | 236 | term.init_object(dev, dev.name() + "." + name); |
| 237 | 237 | |
| 238 | if (! | |
| 238 | if (!m_terminals.add(term.name(), &term)) | |
| 239 | 239 | netlist().error("Error adding %s %s to terminal list\n", objtype_as_astr(term).cstr(), term.name().cstr()); |
| 240 | 240 | NL_VERBOSE_OUT(("%s %s\n", objtype_as_astr(term).cstr(), name.cstr())); |
| 241 | 241 | } |
| r248380 | r248381 | |
| 412 | 412 | core_terminal_t *setup_t::find_terminal(const pstring &terminal_in, bool required) |
| 413 | 413 | { |
| 414 | 414 | const pstring &tname = resolve_alias(terminal_in); |
| 415 | | |
| 415 | int ret; | |
| 416 | 416 | |
| 417 | ret = m_terminals. | |
| 417 | ret = m_terminals.index_of(tname); | |
| 418 | 418 | /* look for default */ |
| 419 | if (ret | |
| 419 | if (ret < 0) | |
| 420 | 420 | { |
| 421 | 421 | /* look for ".Q" std output */ |
| 422 | pstring s = tname + ".Q"; | |
| 423 | ret = m_terminals.find_by_name(s); | |
| 422 | ret = m_terminals.index_of(tname + ".Q"); | |
| 424 | 423 | } |
| 425 | if (ret == NULL && required) | |
| 424 | ||
| 425 | core_terminal_t *term = (ret < 0 ? NULL : m_terminals.value_at(ret)); | |
| 426 | ||
| 427 | if (term == NULL && required) | |
| 426 | 428 | netlist().error("terminal %s(%s) not found!\n", terminal_in.cstr(), tname.cstr()); |
| 427 | if ( | |
| 429 | if (term != NULL) | |
| 428 | 430 | NL_VERBOSE_OUT(("Found input %s\n", tname.cstr())); |
| 429 | return | |
| 431 | return term; | |
| 430 | 432 | } |
| 431 | 433 | |
| 432 | 434 | core_terminal_t *setup_t::find_terminal(const pstring &terminal_in, object_t::type_t atype, bool required) |
| 433 | 435 | { |
| 434 | 436 | const pstring &tname = resolve_alias(terminal_in); |
| 435 | | |
| 437 | int ret; | |
| 436 | 438 | |
| 437 | ret = m_terminals. | |
| 439 | ret = m_terminals.index_of(tname); | |
| 438 | 440 | /* look for default */ |
| 439 | if (ret | |
| 441 | if (ret < 0 && atype == object_t::OUTPUT) | |
| 440 | 442 | { |
| 441 | 443 | /* look for ".Q" std output */ |
| 442 | pstring s = tname + ".Q"; | |
| 443 | ret = m_terminals.find_by_name(s); | |
| 444 | ret = m_terminals.index_of(tname + ".Q"); | |
| 444 | 445 | } |
| 445 | if (ret | |
| 446 | if (ret < 0 && required) | |
| 446 | 447 | netlist().error("terminal %s(%s) not found!\n", terminal_in.cstr(), tname.cstr()); |
| 447 | if (ret != NULL && ret->type() != atype) | |
| 448 | ||
| 449 | core_terminal_t *term = (ret < 0 ? NULL : m_terminals.value_at(ret)); | |
| 450 | ||
| 451 | if (term != NULL && term->type() != atype) | |
| 448 | 452 | { |
| 449 | 453 | if (required) |
| 450 | 454 | netlist().error("object %s(%s) found but wrong type\n", terminal_in.cstr(), tname.cstr()); |
| 451 | 455 | else |
| 452 | | |
| 456 | term = NULL; | |
| 453 | 457 | } |
| 454 | if ( | |
| 458 | if (term != NULL) | |
| 455 | 459 | NL_VERBOSE_OUT(("Found input %s\n", tname.cstr())); |
| 456 | return ret; | |
| 460 | ||
| 461 | return term; | |
| 457 | 462 | } |
| 458 | 463 | |
| 459 | 464 | param_t *setup_t::find_param(const pstring ¶m_in, bool required) |
| r248380 | r248381 | |
| 807 | 812 | netlist().log("looking for terminals not connected ..."); |
| 808 | 813 | for (std::size_t i = 0; i < m_terminals.size(); i++) |
| 809 | 814 | { |
| 810 | if (!m_terminals[i]->has_net()) | |
| 815 | core_terminal_t *term = m_terminals.value_at(i); | |
| 816 | if (!term->has_net()) | |
| 811 | 817 | errstr += pstring::sprintf("Found terminal %s without a net\n", |
| 812 | m_terminals[i]->name().cstr()); | |
| 813 | else if (m_terminals[i]->net().num_cons() == 0) | |
| 818 | term->name().cstr()); | |
| 819 | else if (term->net().num_cons() == 0) | |
| 814 | 820 | netlist().warning("Found terminal %s without connections", |
| 815 | | |
| 821 | term->name().cstr()); | |
| 816 | 822 | } |
| 817 | 823 | if (errstr != "") |
| 818 | 824 | netlist().error("%s", errstr.cstr()); |
| r248380 | r248381 | |
| 861 | 867 | { |
| 862 | 868 | NL_VERBOSE_OUT(("%d: <%s>\n",i, ll[i].cstr())); |
| 863 | 869 | NL_VERBOSE_OUT(("%d: <%s>\n",i, ll[i].cstr())); |
| 864 | device_t *nc = factory().new_device_by_name("LOG" | |
| 870 | device_t *nc = factory().new_device_by_name("LOG"); | |
| 865 | 871 | pstring name = "log_" + ll[i]; |
| 866 | 872 | register_dev(nc, name); |
| 867 | 873 | register_link(name + ".I", ll[i]); |
| r248380 | r248381 | |
|---|---|---|
| 127 | 127 | const pstring &name() const { return e1; } |
| 128 | 128 | }; |
| 129 | 129 | |
| 130 | //typedef pnamedlist_t<link_t> tagmap_nstring_t; | |
| 131 | typedef pnamedlist_t<core_terminal_t *> tagmap_terminal_t; | |
| 132 | ||
| 133 | 130 | setup_t(netlist_t *netlist); |
| 134 | 131 | ~setup_t(); |
| 135 | 132 | |
| r248380 | r248381 | |
| 193 | 190 | |
| 194 | 191 | bool is_library_item(const pstring &name) const { return m_lib.contains(name); } |
| 195 | 192 | |
| 196 | /* not ideal, but needed for save_state */ | |
| 197 | tagmap_terminal_t m_terminals; | |
| 198 | ||
| 199 | 193 | void print_stats() const; |
| 200 | 194 | |
| 201 | 195 | /* static support functions */ |
| r248380 | r248381 | |
| 207 | 201 | |
| 208 | 202 | private: |
| 209 | 203 | |
| 204 | void connect_terminals(core_terminal_t &in, core_terminal_t &out); | |
| 205 | void connect_input_output(core_terminal_t &in, core_terminal_t &out); | |
| 206 | void connect_terminal_output(terminal_t &in, core_terminal_t &out); | |
| 207 | void connect_terminal_input(terminal_t &term, core_terminal_t &inp); | |
| 208 | bool connect_input_input(core_terminal_t &t1, core_terminal_t &t2); | |
| 209 | ||
| 210 | // helpers | |
| 211 | pstring objtype_as_astr(object_t &in) const; | |
| 212 | ||
| 213 | const pstring resolve_alias(const pstring &name) const; | |
| 214 | devices::nld_base_proxy *get_d_a_proxy(core_terminal_t &out); | |
| 215 | ||
| 210 | 216 | netlist_t *m_netlist; |
| 211 | 217 | |
| 212 | 218 | phashmap_t<pstring, pstring> m_alias; |
| 213 | 219 | phashmap_t<pstring, param_t *> m_params; |
| 214 | 220 | phashmap_t<pstring, pstring> m_params_temp; |
| 221 | phashmap_t<pstring, core_terminal_t *> m_terminals; | |
| 215 | 222 | |
| 216 | 223 | plist_t<link_t> m_links; |
| 217 | 224 | |
| r248380 | r248381 | |
| 225 | 232 | source_t::list_t m_sources; |
| 226 | 233 | plist_t<pstring> m_lib; |
| 227 | 234 | |
| 228 | ||
| 229 | void connect_terminals(core_terminal_t &in, core_terminal_t &out); | |
| 230 | void connect_input_output(core_terminal_t &in, core_terminal_t &out); | |
| 231 | void connect_terminal_output(terminal_t &in, core_terminal_t &out); | |
| 232 | void connect_terminal_input(terminal_t &term, core_terminal_t &inp); | |
| 233 | bool connect_input_input(core_terminal_t &t1, core_terminal_t &t2); | |
| 234 | ||
| 235 | // helpers | |
| 236 | pstring objtype_as_astr(object_t &in) const; | |
| 237 | ||
| 238 | const pstring resolve_alias(const pstring &name) const; | |
| 239 | devices::nld_base_proxy *get_d_a_proxy(core_terminal_t &out); | |
| 240 | ||
| 241 | 235 | #if 0 |
| 242 | 236 | template <class T> |
| 243 | 237 | void remove_start_with(T &hm, pstring &sw) |
| r248380 | r248381 | |
|---|---|---|
| 620 | 620 | template <class C> |
| 621 | 621 | struct phash_functor |
| 622 | 622 | { |
| 623 | unsigned hash(const C &v) const { return (unsigned) v; } | |
| 623 | phash_functor() | |
| 624 | {} | |
| 625 | phash_functor(const C &v) | |
| 626 | { | |
| 627 | m_hash = v; | |
| 628 | } | |
| 629 | friend unsigned operator%(const phash_functor &lhs, const unsigned &rhs) { return lhs.m_hash % rhs; } | |
| 630 | bool operator==(const phash_functor &lhs) const { return (m_hash == lhs.m_hash); } | |
| 631 | private: | |
| 632 | unsigned m_hash; | |
| 624 | 633 | }; |
| 625 | 634 | |
| 626 | 635 | template <> |
| 627 | 636 | struct phash_functor<pstring> |
| 628 | 637 | { |
| 629 | #if 1 | |
| 630 | #if 1 | |
| 631 | unsigned hash(const pstring &v) const | |
| 638 | phash_functor() | |
| 639 | {} | |
| 640 | phash_functor(const pstring &v) | |
| 632 | 641 | { |
| 642 | /* modified djb2 */ | |
| 633 | 643 | const char *string = v.cstr(); |
| 634 | unsigned result = *string++; | |
| 635 | for (UINT8 c = *string++; c != 0; c = *string++) | |
| 636 | result = (result*33) ^ c; | |
| 637 | return result; | |
| 644 | unsigned result = 5381; | |
| 645 | for (UINT8 c = *string; c != 0; c = *string++) | |
| 646 | result = ((result << 5) + result ) ^ (result >> (32 - 5)) ^ c; | |
| 647 | //result = (result*33) ^ c; | |
| 648 | m_hash = result; | |
| 638 | 649 | } |
| 639 | #else | |
| 650 | friend unsigned operator%(const phash_functor<pstring> &lhs, const unsigned &rhs) { return lhs.m_hash % rhs; } | |
| 651 | bool operator==(const phash_functor<pstring> &lhs) const { return (m_hash == lhs.m_hash); } | |
| 652 | private: | |
| 653 | unsigned m_hash; | |
| 654 | }; | |
| 655 | ||
| 656 | #if 0 | |
| 657 | #if 0 | |
| 640 | 658 | unsigned hash(const pstring &v) const |
| 641 | 659 | { |
| 642 | 660 | /* Fowler–Noll–Vo hash - FNV-1 */ |
| r248380 | r248381 | |
| 647 | 665 | // result = (result ^ c) * 16777619; FNV 1a |
| 648 | 666 | return result; |
| 649 | 667 | } |
| 650 | #endif | |
| 651 | 668 | #else |
| 652 | 669 | unsigned hash(const pstring &v) const |
| 653 | 670 | { |
| r248380 | r248381 | |
| 667 | 684 | return result; |
| 668 | 685 | } |
| 669 | 686 | #endif |
| 670 | ||
| 687 | #endif | |
| 671 | 688 | |
| 672 | 689 | template <class K, class V, class H = phash_functor<K> > |
| 673 | 690 | class phashmap_t |
| 674 | 691 | { |
| 675 | 692 | public: |
| 676 | phashmap_t() : m_hash( | |
| 693 | phashmap_t() : m_hash(37) | |
| 677 | 694 | { |
| 678 | 695 | for (unsigned i=0; i<m_hash.size(); i++) |
| 679 | 696 | m_hash[i] = -1; |
| r248380 | r248381 | |
| 686 | 703 | struct element_t |
| 687 | 704 | { |
| 688 | 705 | element_t() { } |
| 689 | element_t(K key, | |
| 706 | element_t(const K &key, const H &hash, const V &value) | |
| 690 | 707 | : m_key(key), m_hash(hash), m_value(value), m_next(-1) |
| 691 | 708 | {} |
| 692 | 709 | K m_key; |
| 693 | | |
| 710 | H m_hash; | |
| 694 | 711 | V m_value; |
| 695 | 712 | int m_next; |
| 696 | 713 | }; |
| r248380 | r248381 | |
| 736 | 753 | * and accept that outside we will not have a prime |
| 737 | 754 | * |
| 738 | 755 | */ |
| 739 | if (m_values.size() > m_hash.size()) | |
| 756 | if (m_values.size() * 3 / 2 > m_hash.size()) | |
| 740 | 757 | { |
| 741 | 758 | unsigned n = std::sqrt( 2 * m_hash.size()); |
| 742 | 759 | n = n * n + n + 41; |
| 743 | 760 | m_hash.resize(n); |
| 744 | 761 | rebuild(); |
| 745 | 762 | } |
| 746 | const H h; | |
| 747 | const unsigned hash=h.hash(key); | |
| 763 | const H hash(key); | |
| 748 | 764 | const unsigned pos = hash % m_hash.size(); |
| 749 | 765 | if (m_hash[pos] == -1) |
| 750 | 766 | { |
| r248380 | r248381 | |
| 780 | 796 | return m_values[p].m_value; |
| 781 | 797 | } |
| 782 | 798 | |
| 783 | const V& operator[](const K &key) const | |
| 784 | { | |
| 785 | int p = get_idx(key); | |
| 786 | if (p == -1) | |
| 787 | { | |
| 788 | p = m_values.size(); | |
| 789 | add(key, V()); | |
| 790 | } | |
| 791 | return m_values[p].m_value; | |
| 792 | } | |
| 793 | ||
| 794 | 799 | V& value_at(const unsigned pos) { return m_values[pos].m_value; } |
| 795 | 800 | const V& value_at(const unsigned pos) const { return m_values[pos].m_value; } |
| 796 | 801 | |
| r248380 | r248381 | |
| 799 | 804 | |
| 800 | 805 | int get_idx(const K &key) const |
| 801 | 806 | { |
| 802 | H h; | |
| 803 | const unsigned hash=h.hash(key); | |
| 807 | H hash(key); | |
| 804 | 808 | const unsigned pos = hash % m_hash.size(); |
| 805 | 809 | |
| 806 | 810 | for (int ep = m_hash[pos]; ep != -1; ep = m_values[ep].m_next) |
| r248380 | r248381 | |
|---|---|---|
| 30 | 30 | */ |
| 31 | 31 | |
| 32 | 32 | #include "emu.h" |
| 33 | #include "sound/cdda.h" | |
| 33 | 34 | #include "scsp.h" |
| 34 | 35 | |
| 35 | 36 | |
| r248380 | r248381 | |
| 1010 | 1011 | v= *((unsigned short *) (m_DSP.EFREG+(addr-0xec0)/2)); |
| 1011 | 1012 | else |
| 1012 | 1013 | { |
| 1013 | /* | |
| 1014 | TODO: Kyuutenkai reads from 0xee0/0xee2, it's an undocumented "DSP internal buffer" register ... | |
| 1014 | /**! | |
| 1015 | @todo Kyuutenkai reads from 0xee0/0xee2, it's tied with EXTS register(s) also used for CD-Rom Player equalizer. | |
| 1016 | This port is actually an external parallel port, directly connected from the CD Block device, hence code is a bit of an hack. | |
| 1017 | Kyuutenkai code snippet for reference: | |
| 1015 | 1018 | 004A3A: 207C 0010 0EE0 movea.l #$100ee0, A0 |
| 1016 | 1019 | 004A40: 43EA 0090 lea ($90,A2), A1 ;A2=0x700 |
| 1017 | 1020 | 004A44: 6100 0254 bsr $4c9a |
| r248380 | r248381 | |
| 1044 | 1047 | 004CB0: 4CDF 0002 movem.l (A7)+, D1 |
| 1045 | 1048 | 004CB4: 4E75 rts |
| 1046 | 1049 | */ |
| 1047 | logerror("SCSP: Reading from | |
| 1050 | logerror("SCSP: Reading from EXTS register %08x\n",addr); | |
| 1048 | 1051 | if(addr == 0xee0) |
| 1049 | v | |
| 1052 | v = space.machine().device<cdda_device>("cdda")->get_channel_volume(0); | |
| 1050 | 1053 | if(addr == 0xee2) |
| 1051 | v= m | |
| 1054 | v = space.machine().device<cdda_device>("cdda")->get_channel_volume(1); | |
| 1052 | 1055 | } |
| 1053 | 1056 | } |
| 1054 | 1057 | return v; |
| r248380 | r248381 | |
|---|---|---|
| 43 | 43 | TODO: |
| 44 | 44 | - accurate timing of envelopes |
| 45 | 45 | - LFO (vibrato, tremolo) |
| 46 | - integrate YMF262 (used by Fuuki games, not used by Psikyo and Metro games) | |
| 47 | - able to hook up "Moonsound", supporting mixed ROM+RAM (for MSX driver in MESS) | |
| 48 | (this should be possible now by using a custom address map?) | |
| 46 | - integrate YMF262 mixing (used by Fuuki games, not used by Psikyo and Metro games) | |
| 49 | 47 | */ |
| 50 | 48 | |
| 51 | 49 | #include "emu.h" |
| 52 | 50 | #include "ymf278b.h" |
| 51 | #include "ymf262.h" | |
| 53 | 52 | |
| 54 | 53 | #define VERBOSE 0 |
| 55 | 54 | #define LOG(x) do { if (VERBOSE) logerror x; } while (0) |
| r248380 | r248381 | |
| 226 | 225 | INT32 *mixp; |
| 227 | 226 | INT32 vl, vr; |
| 228 | 227 | |
| 228 | if (&stream == m_stream_ymf262) | |
| 229 | { | |
| 230 | ymf262_update_one(m_ymf262, outputs, samples); | |
| 231 | return; | |
| 232 | } | |
| 233 | ||
| 229 | 234 | memset(m_mix_buffer, 0, sizeof(m_mix_buffer[0])*samples*2); |
| 230 | 235 | |
| 231 | 236 | for (i = 0; i < 24; i++) |
| r248380 | r248381 | |
| 683 | 688 | timer_busy_start(0); |
| 684 | 689 | m_port_AB = data; |
| 685 | 690 | m_lastport = offset>>1 & 1; |
| 691 | ymf262_write(m_ymf262, offset, data); | |
| 686 | 692 | break; |
| 687 | 693 | |
| 688 | 694 | case 1: |
| r248380 | r248381 | |
| 691 | 697 | if (m_lastport) B_w(m_port_AB, data); |
| 692 | 698 | else A_w(m_port_AB, data); |
| 693 | 699 | m_last_fm_data = data; |
| 700 | ymf262_write(m_ymf262, offset, data); | |
| 694 | 701 | break; |
| 695 | 702 | |
| 696 | 703 | case 4: |
| r248380 | r248381 | |
| 830 | 837 | m_current_irq = 0; |
| 831 | 838 | if (!m_irq_handler.isnull()) |
| 832 | 839 | m_irq_handler(0); |
| 840 | ||
| 841 | ymf262_reset_chip(m_ymf262); | |
| 833 | 842 | } |
| 834 | 843 | |
| 844 | void ymf278b_device::device_stop() | |
| 845 | { | |
| 846 | ymf262_shutdown(m_ymf262); | |
| 847 | m_ymf262 = NULL; | |
| 848 | } | |
| 849 | ||
| 835 | 850 | void ymf278b_device::precompute_rate_tables() |
| 836 | 851 | { |
| 837 | 852 | int i; |
| r248380 | r248381 | |
| 928 | 943 | // device_start - device-specific startup |
| 929 | 944 | //------------------------------------------------- |
| 930 | 945 | |
| 946 | static void ymf278b_ymf262_irq_handler(void *param,int irq) | |
| 947 | { | |
| 948 | } | |
| 949 | ||
| 950 | ||
| 951 | static void ymf278b_ymf262_timer_handler(void *param, int c, const attotime &period) | |
| 952 | { | |
| 953 | } | |
| 954 | ||
| 955 | static void ymf278b_ymf262_update_request(void *param, int interval) | |
| 956 | { | |
| 957 | ymf278b_device *ymf278b = (ymf278b_device *) param; | |
| 958 | ymf278b->ymf262_update_request(); | |
| 959 | } | |
| 960 | ||
| 961 | ||
| 962 | void ymf278b_device::ymf262_update_request() | |
| 963 | { | |
| 964 | m_stream_ymf262->update(); | |
| 965 | } | |
| 966 | ||
| 967 | ||
| 931 | 968 | void ymf278b_device::device_start() |
| 932 | 969 | { |
| 933 | 970 | int i; |
| r248380 | r248381 | |
| 973 | 1010 | |
| 974 | 1011 | // Register state for saving |
| 975 | 1012 | register_save_state(); |
| 1013 | ||
| 1014 | // YMF262 related | |
| 1015 | ||
| 1016 | /* stream system initialize */ | |
| 1017 | int ymf262_clock = clock() / (19/8.0); | |
| 1018 | m_ymf262 = ymf262_init(this, ymf262_clock, ymf262_clock / 288); | |
| 1019 | assert_always(m_ymf262 != NULL, "Error creating YMF262 chip"); | |
| 1020 | ||
| 1021 | m_stream_ymf262 = machine().sound().stream_alloc(*this, 0, 4, ymf262_clock / 288); | |
| 1022 | ||
| 1023 | /* YMF262 setup */ | |
| 1024 | ymf262_set_timer_handler (m_ymf262, ymf278b_ymf262_timer_handler, this); | |
| 1025 | ymf262_set_irq_handler (m_ymf262, ymf278b_ymf262_irq_handler, this); | |
| 1026 | ymf262_set_update_handler(m_ymf262, ymf278b_ymf262_update_request, this); | |
| 976 | 1027 | } |
| 977 | 1028 | |
| 978 | 1029 |
| r248380 | r248381 | |
|---|---|---|
| 25 | 25 | DECLARE_READ8_MEMBER( read ); |
| 26 | 26 | DECLARE_WRITE8_MEMBER( write ); |
| 27 | 27 | |
| 28 | void ymf262_update_request(); | |
| 29 | ||
| 28 | 30 | protected: |
| 29 | 31 | // device-level overrides |
| 30 | 32 | virtual void device_config_complete(); |
| 31 | 33 | virtual void device_start(); |
| 32 | 34 | virtual void device_reset(); |
| 35 | virtual void device_stop(); | |
| 33 | 36 | |
| 34 | 37 | virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); |
| 35 | 38 | |
| r248380 | r248381 | |
| 132 | 135 | const address_space_config m_space_config; |
| 133 | 136 | devcb_write_line m_irq_handler; |
| 134 | 137 | UINT8 m_last_fm_data; |
| 138 | ||
| 139 | // ymf262 | |
| 140 | void *m_ymf262; | |
| 141 | sound_stream * m_stream_ymf262; | |
| 135 | 142 | }; |
| 136 | 143 | |
| 137 | 144 | extern const device_type YMF278B; |
| r248380 | r248381 | |
|---|---|---|
| 4688 | 4688 | passshtb // bootleg |
| 4689 | 4689 | shinoblb // (c) 1987 (but bootleg) |
| 4690 | 4690 | shinobld // (c) 1987 (but bootleg) |
| 4691 | shinoblda // | |
| 4691 | 4692 | tetrisbl // (c) 1988 (but bootleg) |
| 4692 | 4693 | beautyb // (c) 1991 AMT |
| 4693 | 4694 | iqpipe // (c) 1991 AMT |
| r248380 | r248381 | |
| 6020 | 6021 | midres // (c) 1989 Data East Corporation (World) |
| 6021 | 6022 | midresu // (c) 1989 Data East USA (US) |
| 6022 | 6023 | midresj // (c) 1989 Data East Corporation (Japan) |
| 6023 | midresb // (c) 1989 Data East Corporation (Japan) | |
| 6024 | midresb // bootleg | |
| 6025 | midresbj // bootleg | |
| 6024 | 6026 | bouldash // (c) 1990 Data East Corporation (World) |
| 6025 | 6027 | bouldashj // (c) 1990 Data East Corporation (Japan) |
| 6026 | 6028 | // end of similar hardware |
| r248380 | r248381 | |
| 6480 | 6482 | wecleman // GX602 (c) 1986 |
| 6481 | 6483 | wecleman2 // GX602?(c) 1988 |
| 6482 | 6484 | hotchase // GX763 (c) 1988 |
| 6485 | hotchasea | |
| 6483 | 6486 | chqflag // GX717 (c) 1988 |
| 6484 | 6487 | chqflagj // GX717 (c) 1988 (Japan) |
| 6485 | 6488 | ultraman // GX910 (c) 1991 Banpresto/Bandai |
| r248380 | r248381 | |
| 9722 | 9725 | ddenlovj // "112" (c) 1995 Dynax (Japan) |
| 9723 | 9726 | ddenlovrk // "113" (c) 1995 Dynax (Korea) |
| 9724 | 9727 | ddenlovr // "113" (c) 1996 Dynax (Hong Kong) |
| 9728 | mjschuka // "115" (c) 1995 Dynax | |
| 9725 | 9729 | mjchuuka // "121" (c) 1998 Dynax |
| 9726 | 9730 | ddenlovrb // bootleg |
| 9727 | 9731 | mjflove // "500" 1996 Dynax |
| r248380 | r248381 | |
|---|---|---|
| 162 | 162 | } |
| 163 | 163 | |
| 164 | 164 | |
| 165 | // Harem | |
| 165 | // Harem (same as scorpion) | |
| 166 | 166 | |
| 167 | ||
| 167 | READ8_MEMBER(scramble_state::harem_digitalker_intr_r) | |
| 168 | 168 | { |
| 169 | | |
| 169 | return m_digitalker->digitalker_0_intr_r(); | |
| 170 | 170 | } |
| 171 | WRITE8_MEMBER( scramble_state::harem_portB_w ) | |
| 171 | ||
| 172 | WRITE8_MEMBER(scramble_state::harem_digitalker_control_w) | |
| 172 | 173 | { |
| 173 | // Speech? | |
| 174 | m_digitalker->digitalker_0_cs_w (data & 1 ? ASSERT_LINE : CLEAR_LINE); | |
| 175 | m_digitalker->digitalker_0_cms_w(data & 2 ? ASSERT_LINE : CLEAR_LINE); | |
| 176 | m_digitalker->digitalker_0_wr_w (data & 4 ? ASSERT_LINE : CLEAR_LINE); | |
| 174 | 177 | } |
| 175 | 178 | |
| 176 | 179 |
| r248380 | r248381 | |
|---|---|---|
| 26 | 26 | 94 Hf Hana Ginga D8102048L1 Z80 YM2149 YM2413 M6295 NL-002 1108F0405 1427F0071 4L02? |
| 27 | 27 | 94 Super Hana Paradise N8010178L1+N73RSUB Z80 YM2413 M6295 NL-002 1108F0406 1427F0071 4L02F2637 |
| 28 | 28 | 95 Mj Dai Chuuka Ken D11107218L1 Z80 AY8910 YM2413 M6295 70C160F009 |
| 29 | 95 Mj Super Dai Chuuka Ken D11510198L1 Z80 AY8910 YM2413 M6295 | |
| 29 | 30 | 95 Hf Hana Gokou N83061581L1 Z80 AY8910 YM2413 M6295 NL-002 1108? 1427? 4L02? |
| 30 | 31 | 95 Hf Hana Gokou Bangaihen N10805078L1 Z80 AY8910 YM2413 M6295 NL-002 1108? 1427? 4L02? |
| 31 | 32 | 95 Nettoh Quiz Champion 68000 AY8910 YM2413 M6295 |
| r248380 | r248381 | |
| 340 | 341 | DECLARE_READ8_MEMBER(hanakanz_rand_r); |
| 341 | 342 | DECLARE_WRITE8_MEMBER(mjreach1_protection_w); |
| 342 | 343 | DECLARE_READ8_MEMBER(mjreach1_protection_r); |
| 344 | DECLARE_WRITE8_MEMBER(mjschuka_protection_w); | |
| 345 | DECLARE_READ8_MEMBER(mjschuka_protection_r); | |
| 343 | 346 | DECLARE_READ8_MEMBER(mjchuuka_keyb_r); |
| 344 | 347 | DECLARE_WRITE8_MEMBER(mjchuuka_blitter_w); |
| 345 | 348 | DECLARE_READ8_MEMBER(mjchuuka_gfxrom_0_r); |
| r248380 | r248381 | |
| 3038 | 3041 | |
| 3039 | 3042 | |
| 3040 | 3043 | /*************************************************************************** |
| 3044 | Mahjong Super Dai Chuuka Ken | |
| 3045 | ***************************************************************************/ | |
| 3046 | ||
| 3047 | // 255F: 13 34 7A 96 A8 | |
| 3048 | // 2564: 13 34 7A 96 13 | |
| 3049 | ||
| 3050 | WRITE8_MEMBER(ddenlovr_state::mjschuka_protection_w) | |
| 3051 | { | |
| 3052 | m_prot_val = data; | |
| 3053 | } | |
| 3054 | ||
| 3055 | READ8_MEMBER(ddenlovr_state::mjschuka_protection_r) | |
| 3056 | { | |
| 3057 | switch (m_prot_val) | |
| 3058 | { | |
| 3059 | case 0xa8: return 0x13; | |
| 3060 | } | |
| 3061 | return m_prot_val; | |
| 3062 | } | |
| 3063 | ||
| 3064 | static ADDRESS_MAP_START( mjschuka_portmap, AS_IO, 8, ddenlovr_state ) | |
| 3065 | ADDRESS_MAP_GLOBAL_MASK(0xff) | |
| 3066 | AM_RANGE(0x00, 0x0f) AM_DEVREADWRITE("rtc", msm6242_device, read, write) | |
| 3067 | AM_RANGE(0x1c, 0x1c) AM_READNOP AM_WRITE(sryudens_rambank_w) // ? ack on RTC int | |
| 3068 | AM_RANGE(0x1e, 0x1e) AM_WRITE(mjflove_rombank_w) | |
| 3069 | ||
| 3070 | AM_RANGE(0x20, 0x23) AM_WRITE(ddenlovr_palette_base_w) | |
| 3071 | AM_RANGE(0x24, 0x27) AM_WRITE(ddenlovr_palette_mask_w) | |
| 3072 | AM_RANGE(0x28, 0x2b) AM_WRITE(ddenlovr_transparency_pen_w) | |
| 3073 | AM_RANGE(0x2c, 0x2f) AM_WRITE(ddenlovr_transparency_mask_w) | |
| 3074 | AM_RANGE(0x34, 0x34) AM_WRITE(ddenlovr_bgcolor_w) | |
| 3075 | AM_RANGE(0x35, 0x35) AM_WRITE(ddenlovr_priority_w) | |
| 3076 | AM_RANGE(0x36, 0x36) AM_WRITE(ddenlovr_layer_enable_w) | |
| 3077 | AM_RANGE(0x38, 0x38) AM_READNOP // ? ack or watchdog | |
| 3078 | ||
| 3079 | AM_RANGE(0x40, 0x41) AM_WRITE(mjmyster_blitter_w) | |
| 3080 | AM_RANGE(0x43, 0x43) AM_READ(rongrong_gfxrom_r) | |
| 3081 | AM_RANGE(0x50, 0x50) AM_WRITE(mjflove_okibank_w) | |
| 3082 | ||
| 3083 | AM_RANGE(0x54, 0x54) AM_READWRITE(mjschuka_protection_r, mjschuka_protection_w) | |
| 3084 | // 58 writes ? (0/1) | |
| 3085 | AM_RANGE(0x5c, 0x5c) AM_READ(hanakanz_rand_r) | |
| 3086 | ||
| 3087 | AM_RANGE(0x60, 0x60) AM_WRITE(sryudens_coincounter_w) | |
| 3088 | AM_RANGE(0x61, 0x61) AM_WRITE(hanakanz_keyb_w) | |
| 3089 | AM_RANGE(0x62, 0x62) AM_READ_PORT("SYSTEM") | |
| 3090 | AM_RANGE(0x63, 0x64) AM_READ(sryudens_keyb_r) | |
| 3091 | ||
| 3092 | AM_RANGE(0x68, 0x68) AM_READ_PORT("DSW1") | |
| 3093 | AM_RANGE(0x69, 0x69) AM_READ_PORT("DSW2") | |
| 3094 | AM_RANGE(0x6a, 0x6a) AM_READ_PORT("DSW3") | |
| 3095 | AM_RANGE(0x6b, 0x6b) AM_READ_PORT("DSW4") | |
| 3096 | AM_RANGE(0x6c, 0x6c) AM_READ_PORT("DSW5") // DSW 1-4 high bits | |
| 3097 | AM_RANGE(0x70, 0x71) AM_DEVWRITE("aysnd", ay8910_device, address_data_w) | |
| 3098 | AM_RANGE(0x74, 0x74) AM_DEVREADWRITE("oki", okim6295_device, read, write) | |
| 3099 | AM_RANGE(0x78, 0x79) AM_DEVWRITE("ym2413", ym2413_device, write) | |
| 3100 | ADDRESS_MAP_END | |
| 3101 | ||
| 3102 | ||
| 3103 | /*************************************************************************** | |
| 3041 | 3104 | Mahjong The Mysterious World |
| 3042 | 3105 | ***************************************************************************/ |
| 3043 | 3106 | |
| r248380 | r248381 | |
| 6691 | 6754 | INPUT_PORTS_END |
| 6692 | 6755 | |
| 6693 | 6756 | |
| 6757 | static INPUT_PORTS_START( mjschuka ) | |
| 6758 | ||
| 6759 | PORT_START("SYSTEM") | |
| 6760 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE3 ) // medal out | |
| 6761 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) | |
| 6762 | PORT_SERVICE(0x04, IP_ACTIVE_LOW) | |
| 6763 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 ) // analyzer | |
| 6764 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE2 ) // data clear | |
| 6765 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 ) // note | |
| 6766 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1) | |
| 6767 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN) | |
| 6768 | ||
| 6769 | PORT_START("KEY0") | |
| 6770 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_PLAYER(2) // A | |
| 6771 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_PLAYER(2) // E | |
| 6772 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) PORT_PLAYER(2) // I | |
| 6773 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M ) PORT_PLAYER(2) // M | |
| 6774 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) PORT_PLAYER(2) // Kan | |
| 6775 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 ) // Start 2 | |
| 6776 | ||
| 6777 | PORT_START("KEY1") | |
| 6778 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_PLAYER(2) // B | |
| 6779 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_PLAYER(2) // F | |
| 6780 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) PORT_PLAYER(2) // J | |
| 6781 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N ) PORT_PLAYER(2) // N | |
| 6782 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) PORT_PLAYER(2) // Reach | |
| 6783 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) PORT_PLAYER(2) // BET | |
| 6784 | ||
| 6785 | PORT_START("KEY2") | |
| 6786 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_PLAYER(2) // C | |
| 6787 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_PLAYER(2) // G | |
| 6788 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) PORT_PLAYER(2) // K | |
| 6789 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) PORT_PLAYER(2) // Chi | |
| 6790 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) PORT_PLAYER(2) // Ron | |
| 6791 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) // nothing | |
| 6792 | ||
| 6793 | PORT_START("KEY3") | |
| 6794 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_PLAYER(2) // D | |
| 6795 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_PLAYER(2) // H | |
| 6796 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) PORT_PLAYER(2) // L | |
| 6797 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) PORT_PLAYER(2) // Pon | |
| 6798 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) // nothing | |
| 6799 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) // nothing | |
| 6800 | ||
| 6801 | PORT_START("KEY4") | |
| 6802 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) PORT_PLAYER(2) // "l" | |
| 6803 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE ) PORT_PLAYER(2) // "t" | |
| 6804 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) PORT_PLAYER(2) // "w" | |
| 6805 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) PORT_PLAYER(2) // Flip Flop | |
| 6806 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG ) PORT_PLAYER(2) // "b" | |
| 6807 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL ) PORT_PLAYER(2) // "s" | |
| 6808 | ||
| 6809 | PORT_START("KEY5") | |
| 6810 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) // A | |
| 6811 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) // E | |
| 6812 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) // I | |
| 6813 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_M ) // M | |
| 6814 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) // Kan | |
| 6815 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 ) // Start 1 | |
| 6816 | ||
| 6817 | PORT_START("KEY6") | |
| 6818 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) // B | |
| 6819 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) // F | |
| 6820 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) // J | |
| 6821 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_N ) // N | |
| 6822 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) // Reach | |
| 6823 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) // BET | |
| 6824 | ||
| 6825 | PORT_START("KEY7") | |
| 6826 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) // C | |
| 6827 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) // G | |
| 6828 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) // K | |
| 6829 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) // Chi | |
| 6830 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) // Ron | |
| 6831 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) // nothing | |
| 6832 | ||
| 6833 | PORT_START("KEY8") | |
| 6834 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) // D | |
| 6835 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) // H | |
| 6836 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) // L | |
| 6837 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) // Pon | |
| 6838 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) // nothing | |
| 6839 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) // nothing | |
| 6840 | ||
| 6841 | PORT_START("KEY9") | |
| 6842 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) // "l" | |
| 6843 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE ) // "t" | |
| 6844 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) // "w" | |
| 6845 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) // Flip Flop | |
| 6846 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_BIG ) // "b" | |
| 6847 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL ) // "s" | |
| 6848 | ||
| 6849 | PORT_START("DSW1") | |
| 6850 | PORT_DIPNAME( 0x0f, 0x07, "Pay Out Rate (%)" ) | |
| 6851 | PORT_DIPSETTING( 0x00, "50" ) | |
| 6852 | PORT_DIPSETTING( 0x01, "53" ) | |
| 6853 | PORT_DIPSETTING( 0x02, "56" ) | |
| 6854 | PORT_DIPSETTING( 0x03, "59" ) | |
| 6855 | PORT_DIPSETTING( 0x04, "62" ) | |
| 6856 | PORT_DIPSETTING( 0x05, "65" ) | |
| 6857 | PORT_DIPSETTING( 0x06, "68" ) | |
| 6858 | PORT_DIPSETTING( 0x07, "71" ) | |
| 6859 | PORT_DIPSETTING( 0x08, "75" ) | |
| 6860 | PORT_DIPSETTING( 0x09, "78" ) | |
| 6861 | PORT_DIPSETTING( 0x0a, "81" ) | |
| 6862 | PORT_DIPSETTING( 0x0b, "84" ) | |
| 6863 | PORT_DIPSETTING( 0x0c, "87" ) | |
| 6864 | PORT_DIPSETTING( 0x0d, "90" ) | |
| 6865 | PORT_DIPSETTING( 0x0e, "93" ) | |
| 6866 | PORT_DIPSETTING( 0x0f, "96" ) | |
| 6867 | PORT_DIPNAME( 0x30, 0x30, "Odds Rate" ) | |
| 6868 | PORT_DIPSETTING( 0x20, "1 2 3 4 6 8 10 15" ) | |
| 6869 | PORT_DIPSETTING( 0x30, "1 2 4 8 12 16 24 32" ) | |
| 6870 | PORT_DIPSETTING( 0x00, "1 2 3 5 8 15 30 50" ) | |
| 6871 | PORT_DIPSETTING( 0x10, "1 2 3 5 10 25 50 100" ) | |
| 6872 | PORT_DIPNAME( 0xc0, 0xc0, "Max Bet" ) | |
| 6873 | PORT_DIPSETTING( 0xc0, "1" ) | |
| 6874 | PORT_DIPSETTING( 0x80, "5" ) | |
| 6875 | PORT_DIPSETTING( 0x40, "10" ) | |
| 6876 | PORT_DIPSETTING( 0x00, "20" ) | |
| 6877 | ||
| 6878 | PORT_START("DSW2") | |
| 6879 | PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) | |
| 6880 | PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) | |
| 6881 | PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) ) | |
| 6882 | PORT_DIPSETTING( 0x01, DEF_STR( 1C_5C ) ) | |
| 6883 | PORT_DIPSETTING( 0x00, "1 Coin/10 Credits" ) | |
| 6884 | PORT_DIPNAME( 0x0c, 0x0c, "Min Rate To Play" ) | |
| 6885 | PORT_DIPSETTING( 0x0c, "1" ) | |
| 6886 | PORT_DIPSETTING( 0x08, "2" ) | |
| 6887 | PORT_DIPSETTING( 0x04, "3" ) | |
| 6888 | PORT_DIPSETTING( 0x00, "5" ) | |
| 6889 | PORT_DIPNAME( 0x30, 0x30, "Payout" ) | |
| 6890 | PORT_DIPSETTING( 0x30, "300" ) | |
| 6891 | PORT_DIPSETTING( 0x20, "500" ) | |
| 6892 | PORT_DIPSETTING( 0x10, "700" ) | |
| 6893 | PORT_DIPSETTING( 0x00, "1000" ) | |
| 6894 | PORT_DIPNAME( 0x40, 0x40, "W-BET" ) | |
| 6895 | PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) | |
| 6896 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) | |
| 6897 | PORT_DIPNAME( 0x80, 0x80, "Last Chance" ) | |
| 6898 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) | |
| 6899 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) | |
| 6900 | ||
| 6901 | PORT_START("DSW3") | |
| 6902 | PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) ) | |
| 6903 | PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) | |
| 6904 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) | |
| 6905 | PORT_DIPNAME( 0x02, 0x00, "In Game Music" ) | |
| 6906 | PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) | |
| 6907 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) | |
| 6908 | PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) | |
| 6909 | PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) | |
| 6910 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) | |
| 6911 | PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) | |
| 6912 | PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) | |
| 6913 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) | |
| 6914 | PORT_DIPNAME( 0x10, 0x00, "Girls" ) | |
| 6915 | PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) | |
| 6916 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) | |
| 6917 | PORT_DIPNAME( 0x20, 0x00, "Girls Speech" ) | |
| 6918 | PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) | |
| 6919 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) | |
| 6920 | PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) | |
| 6921 | PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) | |
| 6922 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) | |
| 6923 | PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) | |
| 6924 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) | |
| 6925 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) | |
| 6926 | ||
| 6927 | PORT_START("DSW4") | |
| 6928 | PORT_DIPNAME( 0x07, 0x07, "YAKUMAN Bonus" ) | |
| 6929 | PORT_DIPSETTING( 0x07, "Cut" ) | |
| 6930 | PORT_DIPSETTING( 0x06, "1 T" ) | |
| 6931 | PORT_DIPSETTING( 0x05, "300" ) | |
| 6932 | PORT_DIPSETTING( 0x04, "500" ) | |
| 6933 | PORT_DIPSETTING( 0x03, "700" ) | |
| 6934 | PORT_DIPSETTING( 0x02, "1000" ) | |
| 6935 | PORT_DIPSETTING( 0x01, "1000?" ) | |
| 6936 | PORT_DIPSETTING( 0x00, "1000?" ) | |
| 6937 | PORT_DIPNAME( 0x08, 0x08, "YAKUMAN Times?" ) | |
| 6938 | PORT_DIPSETTING( 0x00, "1" ) | |
| 6939 | PORT_DIPSETTING( 0x08, "2" ) | |
| 6940 | PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) | |
| 6941 | PORT_DIPSETTING( 0x00, "140" ) | |
| 6942 | PORT_DIPSETTING( 0x10, "160" ) | |
| 6943 | PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) | |
| 6944 | PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) | |
| 6945 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) | |
| 6946 | PORT_DIPNAME( 0x40, 0x40, "DonDen Key" ) | |
| 6947 | PORT_DIPSETTING( 0x40, "Start" ) | |
| 6948 | PORT_DIPSETTING( 0x00, "Flip Flop" ) | |
| 6949 | PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) | |
| 6950 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) | |
| 6951 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) | |
| 6952 | ||
| 6953 | PORT_START("DSW5") | |
| 6954 | PORT_DIPNAME( 0x01, 0x01, "Credits Per Note" ) | |
| 6955 | PORT_DIPSETTING( 0x01, "5" ) | |
| 6956 | PORT_DIPSETTING( 0x00, "10" ) | |
| 6957 | PORT_DIPNAME( 0x02, 0x02, DEF_STR( Flip_Screen ) ) | |
| 6958 | PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) | |
| 6959 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) | |
| 6960 | PORT_DIPNAME( 0x0c, 0x0c, "Computer Strength?" ) | |
| 6961 | PORT_DIPSETTING( 0x0c, "Weak" ) | |
| 6962 | PORT_DIPSETTING( 0x08, DEF_STR( Normal )) | |
| 6963 | PORT_DIPSETTING( 0x04, "Strong" ) | |
| 6964 | PORT_DIPSETTING( 0x00, "Very Strong" ) | |
| 6965 | PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) | |
| 6966 | PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) | |
| 6967 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) | |
| 6968 | PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) | |
| 6969 | PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) | |
| 6970 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) | |
| 6971 | PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) | |
| 6972 | PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) | |
| 6973 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) | |
| 6974 | PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) | |
| 6975 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) | |
| 6976 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) | |
| 6977 | ||
| 6978 | PORT_START("BET") | |
| 6979 | PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) | |
| 6980 | PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) | |
| 6981 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) | |
| 6982 | ||
| 6983 | PORT_START("HOPPER") | |
| 6984 | PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) | |
| 6985 | PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) | |
| 6986 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) | |
| 6987 | ||
| 6988 | INPUT_PORTS_END | |
| 6989 | ||
| 6990 | ||
| 6694 | 6991 | static INPUT_PORTS_START( funkyfig ) |
| 6695 | 6992 | PORT_START("IN0") /* Keys (port 83 with port 80 = 20) */ |
| 6696 | 6993 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) |
| r248380 | r248381 | |
| 9911 | 10208 | |
| 9912 | 10209 | |
| 9913 | 10210 | /*************************************************************************** |
| 10211 | Mahjong Super Dai Chuuka Ken | |
| 10212 | ***************************************************************************/ | |
| 10213 | ||
| 10214 | static MACHINE_CONFIG_START( mjschuka, ddenlovr_state ) | |
| 10215 | ||
| 10216 | /* basic machine hardware */ | |
| 10217 | MCFG_CPU_ADD("maincpu",Z80,XTAL_16MHz/2) | |
| 10218 | MCFG_CPU_PROGRAM_MAP(mjmyster_map) | |
| 10219 | MCFG_CPU_IO_MAP(mjschuka_portmap) | |
| 10220 | MCFG_CPU_VBLANK_INT_DRIVER("screen", ddenlovr_state, hginga_irq) | |
| 10221 | ||
| 10222 | MCFG_MACHINE_START_OVERRIDE(ddenlovr_state,hanakanz) | |
| 10223 | MCFG_MACHINE_RESET_OVERRIDE(ddenlovr_state,ddenlovr) | |
| 10224 | ||
| 10225 | /* video hardware */ | |
| 10226 | MCFG_SCREEN_ADD("screen", RASTER) | |
| 10227 | MCFG_SCREEN_REFRESH_RATE(60) | |
| 10228 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) | |
| 10229 | MCFG_SCREEN_SIZE(336, 256+22) | |
| 10230 | MCFG_SCREEN_VISIBLE_AREA(0, 336-1, 5, 256-11-1) | |
| 10231 | MCFG_SCREEN_UPDATE_DRIVER(ddenlovr_state, screen_update_ddenlovr) | |
| 10232 | MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE) | |
| 10233 | MCFG_SCREEN_PALETTE("palette") | |
| 10234 | ||
| 10235 | MCFG_PALETTE_ADD("palette", 0x200) | |
| 10236 | ||
| 10237 | MCFG_VIDEO_START_OVERRIDE(ddenlovr_state,mjflove) // blitter commands in the roms are shuffled around | |
| 10238 | ||
| 10239 | /* sound hardware */ | |
| 10240 | MCFG_SPEAKER_STANDARD_MONO("mono") | |
| 10241 | ||
| 10242 | MCFG_SOUND_ADD("ym2413", YM2413, XTAL_28_63636MHz / 8) | |
| 10243 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) | |
| 10244 | ||
| 10245 | MCFG_SOUND_ADD("aysnd", AY8910, XTAL_28_63636MHz / 8) | |
| 10246 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30) | |
| 10247 | ||
| 10248 | MCFG_OKIM6295_ADD("oki", XTAL_28_63636MHz / 28, OKIM6295_PIN7_HIGH) | |
| 10249 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80) | |
| 10250 | ||
| 10251 | /* devices */ | |
| 10252 | MCFG_DEVICE_ADD("rtc", MSM6242, XTAL_32_768kHz) | |
| 10253 | MCFG_MSM6242_OUT_INT_HANDLER(WRITELINE(ddenlovr_state, hginga_rtc_irq)) | |
| 10254 | MACHINE_CONFIG_END | |
| 10255 | ||
| 10256 | ||
| 10257 | /*************************************************************************** | |
| 9914 | 10258 | Mahjong The Mysterious World |
| 9915 | 10259 | ***************************************************************************/ |
| 9916 | 10260 | |
| r248380 | r248381 | |
| 11496 | 11840 | |
| 11497 | 11841 | /*************************************************************************** |
| 11498 | 11842 | |
| 11843 | Mahjong Super Dai Chuuka Ken (Dynax, 1995) | |
| 11844 | ||
| 11845 | PCB Layout | |
| 11846 | ---------- | |
| 11847 | ||
| 11848 | Dynax Inc. Nagoya Japan D11510198L1 | |
| 11849 | sticker: D11509208L1 | |
| 11850 | |----------------------------------------| | |
| 11851 | | MB3714A TA7535(x2) M6295 1151 3V_BATT| | |
| 11852 | | VOL YMZ284-D YM2413 1152 | | |
| 11853 | | DSW5 16MHz PAL | | |
| 11854 | | CPU 62256 | | |
| 11855 | | ULN2003 1153 62421RTC| | |
| 11856 | | PLCC44/68 | | |
| 11857 | | | | |
| 11858 | | 28.63636MHz M514262 | | |
| 11859 | | M514262 | | |
| 11860 | | QFP208 M514262 | | |
| 11861 | | CXK5863 M514262 | | |
| 11862 | | PAL | | |
| 11863 | |DSW1 DSW2 1154 | | |
| 11864 | |DSW3 DSW4 1155 | | |
| 11865 | |----------------------------------------| | |
| 11866 | Notes: | |
| 11867 | PLCC44 and QFP208 unknown (surface scratched), location has alternative pads for PLCC68 | |
| 11868 | CPU - surface scratched. clock input 16MHz, looks like TMPZ8400 | |
| 11869 | M6295 - clock 1.0227MHz (28.63636/28). Pin 7 HIGH | |
| 11870 | YMZ284 - clock 3.579545MHz (28.63636/8) | |
| 11871 | YM2413 - clock 3.579545MHz (28.63636/8) | |
| 11872 | DSW1-4 - 10-position DIP switches | |
| 11873 | DSW5 - 4-position DIP switch | |
| 11874 | TA7535 - = LM358 | |
| 11875 | VSync - 60.8529Hz | |
| 11876 | HSync - 15.2790kHz | |
| 11877 | EPROM 1152 is M27C1001, others are MX27C4000 | |
| 11878 | ||
| 11879 | ***************************************************************************/ | |
| 11880 | ||
| 11881 | ROM_START( mjschuka ) | |
| 11882 | ROM_REGION( 0x90000+16*0x1000, "maincpu", 0 ) /* Z80 Code */ | |
| 11883 | ROM_LOAD( "1153.5c", 0x00000, 0x80000, CRC(67cf10db) SHA1(a813f44578eb2d67b4346ffd9c15e44e7fa91ca7) ) | |
| 11884 | ROM_RELOAD( 0x10000, 0x80000 ) | |
| 11885 | ||
| 11886 | ROM_REGION( 0x100000, "blitter", 0 ) /* blitter data */ | |
| 11887 | ROM_LOAD( "1154.11b", 0x00000, 0x80000, CRC(b8d04189) SHA1(1acac851c21e1055843e1398087d7afd8b9201b8) ) | |
| 11888 | ROM_LOAD( "1155.12b", 0x80000, 0x80000, CRC(4208edcf) SHA1(444472107dac548956d2749cd892214efb6ff2f6) ) | |
| 11889 | ||
| 11890 | ROM_REGION( 0x200000, "oki", 0 ) /* Samples */ | |
| 11891 | ROM_LOAD( "1151.1c", 0x000000, 0x80000, CRC(c92065a9) SHA1(65c38c3a31d3f4b8240a16fdcdf376acdf5c17d2) ) | |
| 11892 | ROM_RELOAD( 0x100000, 0x20000 ) | |
| 11893 | ROM_LOAD( "1152.2c", 0x080000, 0x20000, CRC(f9244532) SHA1(b502d8d3569c4b4d655af3baf05a3c79831a84ff) ) | |
| 11894 | ROM_RELOAD( 0x180000, 0x20000 ) | |
| 11895 | ROM_RELOAD( 0x0a0000, 0x20000 ) | |
| 11896 | ROM_RELOAD( 0x1a0000, 0x20000 ) | |
| 11897 | ROM_RELOAD( 0x0c0000, 0x20000 ) | |
| 11898 | ROM_RELOAD( 0x1c0000, 0x20000 ) | |
| 11899 | ROM_END | |
| 11900 | ||
| 11901 | ||
| 11902 | /*************************************************************************** | |
| 11903 | ||
| 11499 | 11904 | The First Funky Fighter |
| 11500 | 11905 | Nakanihon, 1994 |
| 11501 | 11906 | |
| r248380 | r248381 | |
| 12616 | 13021 | GAME( 1994, hparadis, 0, hparadis, hparadis, driver_device, 0, ROT0, "Dynax", "Super Hana Paradise (Japan)", GAME_NO_COCKTAIL ) |
| 12617 | 13022 | GAME( 1995, hgokou, 0, hgokou, hgokou, driver_device, 0, ROT0, "Dynax (Alba license)", "Hanafuda Hana Gokou (Japan)", GAME_NO_COCKTAIL ) |
| 12618 | 13023 | GAME( 1995, hgokbang, hgokou, hgokbang, hgokou, driver_device, 0, ROT0, "Dynax", "Hanafuda Hana Gokou Bangaihen (Japan)", GAME_NO_COCKTAIL ) |
| 12619 | GAME( 1995, mjdchuka, 0, mjchuuka, mjchuuka, driver_device, 0, ROT0, "Dynax", "Mahjong The Dai Chuuka Ken (China, v. D111)", GAME_NO_COCKTAIL ) | |
| 13024 | GAME( 1995, mjdchuka, 0, mjchuuka, mjchuuka, driver_device, 0, ROT0, "Dynax", "Mahjong The Dai Chuuka Ken (China, D111)", GAME_NO_COCKTAIL ) | |
| 13025 | GAME( 1995, mjschuka, 0, mjschuka, mjschuka, driver_device, 0, ROT0, "Dynax", "Mahjong Super Dai Chuuka Ken (Japan, D115)", GAME_NO_COCKTAIL ) | |
| 12620 | 13026 | GAME( 1995, nettoqc, 0, nettoqc, nettoqc, driver_device, 0, ROT0, "Nakanihon", "Nettoh Quiz Champion (Japan)", GAME_NO_COCKTAIL | GAME_IMPERFECT_COLORS ) |
| 12621 | 13027 | GAME( 1995, ultrchmp, nettoqc, ultrchmp, ultrchmp, driver_device, 0, ROT0, "Nakanihon", "Se Gye Hweng Dan Ultra Champion (Korea)", GAME_NO_COCKTAIL | GAME_IMPERFECT_COLORS ) |
| 12622 | 13028 | GAME( 1995, ultrchmph, nettoqc, ultrchmp, ultrchmp, driver_device, 0, ROT0, "Nakanihon", "Cheng Ba Shi Jie - Chao Shi Kong Guan Jun (Taiwan)", GAME_NO_COCKTAIL | GAME_IMPERFECT_COLORS ) |
| r248380 | r248381 | |
| 12636 | 13042 | GAME( 1997, hkagerou, 0, hkagerou, hkagerou, driver_device, 0, ROT0, "Nakanihon / Dynax", "Hana Kagerou [BET] (Japan)", GAME_NO_COCKTAIL ) |
| 12637 | 13043 | GAME( 1998, mjchuuka, 0, mjchuuka, mjchuuka, driver_device, 0, ROT0, "Dynax", "Mahjong Chuukanejyo (China)", GAME_NO_COCKTAIL ) |
| 12638 | 13044 | GAME( 1998, mjreach1, 0, mjreach1, mjreach1, driver_device, 0, ROT0, "Nihon System", "Mahjong Reach Ippatsu (Japan)", GAME_NO_COCKTAIL ) |
| 12639 | GAME( 1999, jongtei, 0, jongtei, jongtei, driver_device, 0, ROT0, "Dynax", "Mahjong Jong-Tei (Japan, | |
| 13045 | GAME( 1999, jongtei, 0, jongtei, jongtei, driver_device, 0, ROT0, "Dynax", "Mahjong Jong-Tei (Japan, NM532-01)", GAME_NO_COCKTAIL ) | |
| 12640 | 13046 | GAME( 2002, daimyojn, 0, daimyojn, daimyojn, driver_device, 0, ROT0, "Dynax / Techno-Top / Techno-Planning", "Mahjong Daimyojin (Japan, T017-PB-00)", GAME_NO_COCKTAIL ) |
| 12641 | GAME( 2004, momotaro, 0, daimyojn, daimyojn, ddenlovr_state, | |
| 13047 | GAME( 2004, momotaro, 0, daimyojn, daimyojn, ddenlovr_state,momotaro, ROT0, "Techno-Top", "Mahjong Momotarou (Japan)", GAME_NO_COCKTAIL | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
| r248380 | r248381 | |
|---|---|---|
| 2941 | 2941 | ROM_END |
| 2942 | 2942 | |
| 2943 | 2943 | |
| 2944 | ROM_START( midresbj ) | |
| 2945 | ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 code */ | |
| 2946 | ROM_LOAD16_BYTE( "14", 0x00000, 0x10000, CRC(6b3bc886) SHA1(998ef6ae89565148bcb8909f21acbec378ed5f4f) ) | |
| 2947 | ROM_LOAD16_BYTE( "11", 0x00001, 0x10000, CRC(9b6faab3) SHA1(b60e41972f52df910bfa09accd5fde7d858b55bf) ) | |
| 2948 | ROM_LOAD16_BYTE( "13", 0x20000, 0x10000, CRC(d1bb2cd6) SHA1(6d4afd8dd8c4c3e90de199358da27108286637e2) ) | |
| 2949 | ROM_LOAD16_BYTE( "10", 0x20001, 0x10000, CRC(42ccdd0d) SHA1(ef17cc984a8d57e9c52877f4e9b78e9976f99033) ) | |
| 2950 | ROM_LOAD16_BYTE( "12", 0x40000, 0x10000, CRC(258b10b2) SHA1(f0849801ab2c72bc6e929b230d0c6d41823f18ae) ) | |
| 2951 | ROM_LOAD16_BYTE( "9", 0x40001, 0x10000, CRC(dd6985d5) SHA1(bd58a1da2c5152464d7660f5b931d6257cb87c4e) ) | |
| 2952 | ||
| 2953 | ROM_REGION( 0x10000, "audiocpu", 0 ) /* 6502 sound */ | |
| 2954 | ROM_LOAD( "15", 0x0000, 0x10000, CRC(99d47166) SHA1(a9a1adfe47be8dd3e4d6f8c783447e09be1747b2) ) | |
| 2955 | ||
| 2956 | ROM_REGION( 0x10000, "cpu2", ROMREGION_ERASE00 ) /* 68705 MCU */ | |
| 2957 | //ROM_LOAD( "68705r3.bin", 0x00000, 0x1000, CRC(ad5b1c13) SHA1(3616dc5969323a54e3e171d169f76250ae4e711a) ) // unpopulated socket | |
| 2958 | ||
| 2959 | ROM_REGION( 0x20000, "gfx1", 0 ) /* chars */ | |
| 2960 | ROM_LOAD( "23", 0x08000, 0x08000, CRC(d75aba06) SHA1(cb3b969db3dd8e0c5c3729482f7461cde3a961f3) ) | |
| 2961 | ROM_CONTINUE( 0x00000, 0x08000 ) /* the two halves are swapped */ | |
| 2962 | ROM_LOAD( "24", 0x18000, 0x08000, CRC(8f5bbb79) SHA1(cb10f68787606111ba5e9967bf0b0cd21269a902) ) | |
| 2963 | ROM_CONTINUE( 0x10000, 0x08000 ) | |
| 2964 | ||
| 2965 | ROM_REGION( 0x80000, "gfx2", 0 ) /* tiles */ | |
| 2966 | ROM_LOAD( "19", 0x00000, 0x20000, CRC(fd9ba1bd) SHA1(a105a4335eeed19662c89ab0f90485f1029cf03f) ) | |
| 2967 | ROM_LOAD( "18", 0x20000, 0x20000, CRC(a936c03c) SHA1(293e69874ce9b2dfb1d605c9f988fa736b12bbcf) ) | |
| 2968 | ROM_LOAD( "20", 0x40000, 0x20000, CRC(4d8e3cf1) SHA1(db804a608f6ba9ce4cedfec2581bcbb00de3f2ba) ) | |
| 2969 | ROM_LOAD( "17", 0x60000, 0x20000, CRC(b7241ab9) SHA1(3e83f9285ff4c476f1287bf73b514eace482dccc) ) | |
| 2970 | ||
| 2971 | ROM_REGION( 0x40000, "gfx3", 0 ) /* tiles */ | |
| 2972 | ROM_LOAD( "22", 0x10000, 0x10000, CRC(35a54bb4) SHA1(1869eb77a060e9df42b761b02e7fa5ecb7c414d1) ) | |
| 2973 | ROM_CONTINUE(0x00000,0x10000) | |
| 2974 | ROM_LOAD( "21", 0x30000, 0x10000, CRC(4b9227b3) SHA1(7059f2d07fffa0468a45a42b87bf561da5e9c5a4) ) | |
| 2975 | ROM_CONTINUE(0x20000,0x10000) | |
| 2976 | ||
| 2977 | ROM_REGION( 0x80000, "gfx4", 0 ) /* sprites */ | |
| 2978 | ROM_LOAD( "4", 0x00000, 0x10000, CRC(3f499acb) SHA1(1a22cfeed0497ddc2d571114d9f246b3ae18ede9) ) | |
| 2979 | ROM_LOAD( "8", 0x10000, 0x10000, CRC(5e7a6800) SHA1(8dd5c9005b6804a30627644053f14e4477fe0074) ) | |
| 2980 | ROM_LOAD( "2", 0x20000, 0x10000, CRC(897ba6e4) SHA1(70fd9cba3922751cb317770d6effdc2fb94c1324) ) | |
| 2981 | ROM_LOAD( "6", 0x30000, 0x10000, CRC(9fefb810) SHA1(863a81540261e78de5c612dea807ba29b12054d4) ) | |
| 2982 | ROM_LOAD( "3", 0x40000, 0x10000, CRC(ebafe720) SHA1(b9f76d2f1b59f1d028e6156b831c5c8ada033641) ) | |
| 2983 | ROM_LOAD( "7", 0x50000, 0x10000, CRC(bb8cf641) SHA1(a22e47a15d38d4f33e5a2c90f3a90a16a4231d2c) ) // slight changes, check (equivalent to 3.bin in above) | |
| 2984 | ROM_LOAD( "1", 0x60000, 0x10000, CRC(fd0bd8d3) SHA1(d6b19869ddc2a8ed4f38ba9d613b71853f2d13c0) ) | |
| 2985 | ROM_LOAD( "5", 0x70000, 0x10000, CRC(fc46d5ed) SHA1(20ddf3f67f0dfb222ad8d3fd464b892ec9c9e4f5) ) | |
| 2986 | ||
| 2987 | ROM_REGION( 0x40000, "oki", 0 ) /* ADPCM samples */ | |
| 2988 | ROM_LOAD( "16", 0x00000, 0x10000, CRC(ccf24b52) SHA1(39b2663c548b30684197284cb8e7a6ca803330c9)) | |
| 2989 | ROM_END | |
| 2990 | ||
| 2944 | 2991 | ROM_START( bouldash ) |
| 2945 | 2992 | ROM_REGION( 0x60000, "maincpu", 0 ) /* 68000 code */ |
| 2946 | 2993 | ROM_LOAD16_BYTE( "fw-15-2.17l", 0x00000, 0x10000, CRC(ca19a967) SHA1(b9dc2b1323f19b6239e550ed020943bf13de8db0) ) |
| r248380 | r248381 | |
| 3082 | 3129 | GAME( 1988, drgninjab, baddudes, baddudes, drgninja, dec0_state, baddudes, ROT0, "bootleg", "Dragonninja (bootleg)", GAME_SUPPORTS_SAVE ) |
| 3083 | 3130 | |
| 3084 | 3131 | // this is a common bootleg board |
| 3085 | GAME( 1989, midresb, midres, midresb, midresb, dec0_state, midresb, ROT0, "bootleg", "Midnight Resistance (bootleg with 68705)", GAME_SUPPORTS_SAVE ) // need to hook up 68705? | |
| 3132 | GAME( 1989, midresb, midres, midresb, midresb, dec0_state, midresb, ROT0, "bootleg", "Midnight Resistance (bootleg with 68705)", GAME_SUPPORTS_SAVE ) // need to hook up 68705? (probably unused) | |
| 3133 | GAME( 1989, midresbj, midres, midresb, midresb, dec0_state, midresb, ROT0, "bootleg", "Midnight Resistance (Joystick bootleg)", GAME_SUPPORTS_SAVE ) | |
| 3086 | 3134 | GAME( 1989, ffantasybl, hippodrm, ffantasybl, ffantasybl, dec0_state, ffantasybl, ROT0, "bootleg", "Fighting Fantasy (bootleg with 68705)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) // 68705 not dumped, might be the same as midresb |
| 3087 | 3135 | /* A Bad Dudes bootleg with 68705 like the midres and ffantasy ones exists, but is not dumped */ |
| 3088 | 3136 |
| r248380 | r248381 | |
|---|---|---|
| 38 | 38 | - PCM channels of music in asurabus is sometimes off-tune, check Chen-Mao's stage for example |
| 39 | 39 | note: srom.u7 (z80 prg) is a good dump |
| 40 | 40 | |
| 41 | - YMF278B and YMF262 are hooked up in an awkward way (real chip has YMF262 integrated) | |
| 42 | ||
| 43 | 41 | Asura Blade |
| 44 | 42 | Fuuki Co. Ltd., 1998 |
| 45 | 43 | |
| r248380 | r248381 | |
| 162 | 160 | #include "cpu/z80/z80.h" |
| 163 | 161 | #include "cpu/m68000/m68000.h" |
| 164 | 162 | #include "sound/ymf278b.h" |
| 165 | #include "sound/262intf.h" | |
| 166 | 163 | #include "includes/fuukifg3.h" |
| 167 | 164 | |
| 168 | 165 | |
| r248380 | r248381 | |
| 258 | 255 | WRITE8_MEMBER(fuuki32_state::snd_ymf278b_w) |
| 259 | 256 | { |
| 260 | 257 | machine().device<ymf278b_device>("ymf1")->write(space, offset, data); |
| 261 | ||
| 262 | // also write to ymf262 | |
| 263 | if (offset < 4) | |
| 264 | machine().device<ymf262_device>("ymf2")->write(space, offset, data); | |
| 265 | 258 | } |
| 266 | 259 | |
| 267 | 260 | static ADDRESS_MAP_START( fuuki32_sound_map, AS_PROGRAM, 8, fuuki32_state ) |
| r248380 | r248381 | |
| 584 | 577 | MCFG_YMF278B_IRQ_HANDLER(INPUTLINE("soundcpu", 0)) |
| 585 | 578 | MCFG_SOUND_ROUTE(0, "lspeaker", 0.50) |
| 586 | 579 | MCFG_SOUND_ROUTE(1, "rspeaker", 0.50) |
| 587 | ||
| 588 | MCFG_SOUND_ADD("ymf2", YMF262, YMF278B_STD_CLOCK / (19/8.0)) | |
| 589 | MCFG_SOUND_ROUTE(0, "lspeaker", 0.40) | |
| 590 | MCFG_SOUND_ROUTE(1, "rspeaker", 0.40) | |
| 591 | 580 | MCFG_SOUND_ROUTE(2, "lspeaker", 0.40) |
| 592 | 581 | MCFG_SOUND_ROUTE(3, "rspeaker", 0.40) |
| 582 | MCFG_SOUND_ROUTE(4, "lspeaker", 0.40) | |
| 583 | MCFG_SOUND_ROUTE(5, "rspeaker", 0.40) | |
| 593 | 584 | |
| 594 | 585 | MACHINE_CONFIG_END |
| 595 | 586 |
| r248380 | r248381 | |
|---|---|---|
| 51 | 51 | paranoia_state(const machine_config &mconfig, device_type type, const char *tag) |
| 52 | 52 | : pce_common_state(mconfig, type, tag) { } |
| 53 | 53 | |
| 54 | DECLARE_WRITE8_MEMBER(paranoia_8085_d000_w); | |
| 55 | DECLARE_READ8_MEMBER(paranoia_z80_io_01_r); | |
| 56 | DECLARE_READ8_MEMBER(paranoia_z80_io_02_r); | |
| 57 | DECLARE_WRITE8_MEMBER(paranoia_z80_io_17_w); | |
| 58 | DECLARE_WRITE8_MEMBER(paranoia_z80_io_37_w); | |
| 59 | DECLARE_WRITE8_MEMBER(paranoia_i8155_a_w); | |
| 60 | DECLARE_WRITE8_MEMBER(paranoia_i8155_b_w); | |
| 61 | DECLARE_WRITE8_MEMBER(paranoia_i8155_c_w); | |
| 62 | DECLARE_WRITE_LINE_MEMBER(paranoia_i8155_timer_out); | |
| 54 | DECLARE_WRITE8_MEMBER(i8085_d000_w); | |
| 55 | DECLARE_READ8_MEMBER(z80_io_01_r); | |
| 56 | DECLARE_READ8_MEMBER(z80_io_02_r); | |
| 57 | DECLARE_WRITE8_MEMBER(z80_io_17_w); | |
| 58 | DECLARE_WRITE8_MEMBER(z80_io_37_w); | |
| 59 | DECLARE_WRITE8_MEMBER(i8155_a_w); | |
| 60 | DECLARE_WRITE8_MEMBER(i8155_b_w); | |
| 61 | DECLARE_WRITE8_MEMBER(i8155_c_w); | |
| 62 | DECLARE_WRITE_LINE_MEMBER(i8155_timer_out); | |
| 63 | 63 | }; |
| 64 | 64 | |
| 65 | 65 | |
| r248380 | r248381 | |
| 90 | 90 | AM_RANGE( 0x00, 0x03) AM_DEVREADWRITE( "huc6270", huc6270_device, read, write ) |
| 91 | 91 | ADDRESS_MAP_END |
| 92 | 92 | |
| 93 | WRITE8_MEMBER(paranoia_state:: | |
| 93 | WRITE8_MEMBER(paranoia_state::i8085_d000_w) | |
| 94 | 94 | { |
| 95 | 95 | //logerror( "D000 (8085) write %02x\n", data ); |
| 96 | 96 | } |
| r248380 | r248381 | |
| 99 | 99 | AM_RANGE( 0x0000, 0x7fff) AM_ROM |
| 100 | 100 | AM_RANGE( 0x8000, 0x80ff) AM_DEVREADWRITE("i8155", i8155_device, memory_r, memory_w) |
| 101 | 101 | AM_RANGE( 0x8100, 0x8107) AM_DEVREADWRITE("i8155", i8155_device, io_r, io_w) |
| 102 | AM_RANGE( 0xd000, 0xd000) AM_WRITE( | |
| 102 | AM_RANGE( 0xd000, 0xd000) AM_WRITE(i8085_d000_w ) | |
| 103 | 103 | AM_RANGE( 0xe000, 0xe1ff) AM_RAM |
| 104 | 104 | ADDRESS_MAP_END |
| 105 | 105 | |
| r248380 | r248381 | |
| 112 | 112 | AM_RANGE( 0x7000, 0x73ff) AM_RAM |
| 113 | 113 | ADDRESS_MAP_END |
| 114 | 114 | |
| 115 | READ8_MEMBER(paranoia_state:: | |
| 115 | READ8_MEMBER(paranoia_state::z80_io_01_r) | |
| 116 | 116 | { |
| 117 | 117 | return 0; |
| 118 | 118 | } |
| 119 | 119 | |
| 120 | READ8_MEMBER(paranoia_state:: | |
| 120 | READ8_MEMBER(paranoia_state::z80_io_02_r) | |
| 121 | 121 | { |
| 122 | 122 | return 0; |
| 123 | 123 | } |
| 124 | 124 | |
| 125 | WRITE8_MEMBER(paranoia_state:: | |
| 125 | WRITE8_MEMBER(paranoia_state::z80_io_17_w) | |
| 126 | 126 | { |
| 127 | 127 | } |
| 128 | 128 | |
| 129 | WRITE8_MEMBER(paranoia_state:: | |
| 129 | WRITE8_MEMBER(paranoia_state::z80_io_37_w) | |
| 130 | 130 | { |
| 131 | 131 | } |
| 132 | 132 | |
| 133 | 133 | static ADDRESS_MAP_START(paranoia_z80_io_map, AS_IO, 8, paranoia_state ) |
| 134 | 134 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 135 | AM_RANGE( 0x01, 0x01 ) AM_READ(paranoia_z80_io_01_r ) | |
| 136 | AM_RANGE( 0x02, 0x02 ) AM_READ(paranoia_z80_io_02_r ) | |
| 137 | AM_RANGE( 0x17, 0x17 ) AM_WRITE(paranoia_z80_io_17_w ) | |
| 138 | AM_RANGE( 0x37, 0x37 ) AM_WRITE(paranoia_z80_io_37_w ) | |
| 135 | AM_RANGE( 0x01, 0x01 ) AM_READ(z80_io_01_r ) | |
| 136 | AM_RANGE( 0x02, 0x02 ) AM_READ(z80_io_02_r ) | |
| 137 | AM_RANGE( 0x17, 0x17 ) AM_WRITE(z80_io_17_w ) | |
| 138 | AM_RANGE( 0x37, 0x37 ) AM_WRITE(z80_io_37_w ) | |
| 139 | 139 | ADDRESS_MAP_END |
| 140 | 140 | |
| 141 | WRITE8_MEMBER(paranoia_state:: | |
| 141 | WRITE8_MEMBER(paranoia_state::i8155_a_w) | |
| 142 | 142 | { |
| 143 | 143 | //logerror("i8155 Port A: %02X\n", data); |
| 144 | 144 | } |
| 145 | 145 | |
| 146 | WRITE8_MEMBER(paranoia_state:: | |
| 146 | WRITE8_MEMBER(paranoia_state::i8155_b_w) | |
| 147 | 147 | { |
| 148 | 148 | //logerror("i8155 Port B: %02X\n", data); |
| 149 | 149 | } |
| 150 | 150 | |
| 151 | WRITE8_MEMBER(paranoia_state:: | |
| 151 | WRITE8_MEMBER(paranoia_state::i8155_c_w) | |
| 152 | 152 | { |
| 153 | 153 | //logerror("i8155 Port C: %02X\n", data); |
| 154 | 154 | } |
| 155 | 155 | |
| 156 | WRITE_LINE_MEMBER(paranoia_state:: | |
| 156 | WRITE_LINE_MEMBER(paranoia_state::i8155_timer_out) | |
| 157 | 157 | { |
| 158 | 158 | //m_subcpu->set_input_line(I8085_RST55_LINE, state ? CLEAR_LINE : ASSERT_LINE ); |
| 159 | 159 | //logerror("Timer out %d\n", state); |
| r248380 | r248381 | |
| 175 | 175 | MCFG_CPU_IO_MAP(paranoia_z80_io_map) |
| 176 | 176 | |
| 177 | 177 | MCFG_DEVICE_ADD("i8155", I8155, 1000000 /*?*/) |
| 178 | MCFG_I8155_OUT_PORTA_CB(WRITE8(paranoia_state, paranoia_i8155_a_w)) | |
| 179 | MCFG_I8155_OUT_PORTB_CB(WRITE8(paranoia_state, paranoia_i8155_b_w)) | |
| 180 | MCFG_I8155_OUT_PORTC_CB(WRITE8(paranoia_state, paranoia_i8155_c_w)) | |
| 181 | MCFG_I8155_OUT_TIMEROUT_CB(WRITELINE(paranoia_state, paranoia_i8155_timer_out)) | |
| 178 | MCFG_I8155_OUT_PORTA_CB(WRITE8(paranoia_state, i8155_a_w)) | |
| 179 | MCFG_I8155_OUT_PORTB_CB(WRITE8(paranoia_state, i8155_b_w)) | |
| 180 | MCFG_I8155_OUT_PORTC_CB(WRITE8(paranoia_state, i8155_c_w)) | |
| 181 | MCFG_I8155_OUT_TIMEROUT_CB(WRITELINE(paranoia_state, i8155_timer_out)) | |
| 182 | 182 | |
| 183 | 183 | /* video hardware */ |
| 184 | 184 | MCFG_SCREEN_ADD("screen", RASTER) |
| r248380 | r248381 | |
| 217 | 217 | ROM_LOAD( "4.352", 0x18000, 0x8000, CRC(11297fed) SHA1(17a294e65ba1c4806307602dee4c7c627ad1fcfd) ) |
| 218 | 218 | ROM_END |
| 219 | 219 | |
| 220 | GAME( 1990, paranoia, 0, paranoia, paranoia, pce_common_state, pce_common, ROT0, "Naxat Soft", "Paranoia", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING ) | |
| 220 | GAME( 1990, paranoia, 0, paranoia, paranoia, pce_common_state, pce_common, ROT0, "Naxat Soft", "Paranoia", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) |
| r248380 | r248381 | |
|---|---|---|
| 412 | 412 | |
| 413 | 413 | static ADDRESS_MAP_START( harem_sound_map, AS_PROGRAM, 8, scramble_state ) |
| 414 | 414 | AM_RANGE(0x0000, 0x2fff) AM_ROM |
| 415 | AM_RANGE(0x6000, 0x6000) AM_READ | |
| 415 | AM_RANGE(0x6000, 0x6000) AM_READ(harem_digitalker_intr_r) | |
| 416 | 416 | AM_RANGE(0x8000, 0x83ff) AM_RAM |
| 417 | 417 | AM_RANGE(0xa000, 0xafff) AM_WRITE(scramble_filter_w) |
| 418 | 418 | ADDRESS_MAP_END |
| r248380 | r248381 | |
| 420 | 420 | static ADDRESS_MAP_START( harem_sound_io_map, AS_IO, 8, scramble_state ) |
| 421 | 421 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 422 | 422 | |
| 423 | // ports->speech | |
| 423 | // ports->speech: | |
| 424 | 424 | AM_RANGE(0x04, 0x04) AM_DEVWRITE("8910.3", ay8910_device, address_w) |
| 425 | 425 | AM_RANGE(0x08, 0x08) AM_DEVREADWRITE("8910.3", ay8910_device, data_r, data_w) |
| 426 | 426 | // same as scramble: |
| r248380 | r248381 | |
| 1688 | 1688 | |
| 1689 | 1689 | MCFG_VIDEO_START_OVERRIDE(scramble_state,harem) |
| 1690 | 1690 | |
| 1691 | /* | |
| 1691 | /* extra AY8910 with I/O ports */ | |
| 1692 | 1692 | MCFG_SOUND_ADD("8910.3", AY8910, 14318000/8) |
| 1693 | 1693 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.16) |
| 1694 | MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(scramble_state, harem_portA_w)) // Port A write | |
| 1695 | MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(scramble_state, harem_portB_w)) // Port B write | |
| 1694 | MCFG_AY8910_PORT_A_WRITE_CB(DEVWRITE8("digitalker", digitalker_device, digitalker_data_w)) | |
| 1695 | MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(scramble_state, harem_digitalker_control_w)) | |
| 1696 | ||
| 1697 | MCFG_DIGITALKER_ADD("digitalker", 4000000) | |
| 1698 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.16) | |
| 1696 | 1699 | MACHINE_CONFIG_END |
| 1697 | 1700 | |
| 1698 | 1701 | /*************************************************************************** |
| r248380 | r248381 | |
| 2218 | 2221 | ROM_LOAD( "harem_sound1.ic12", 0x0000, 0x2000, CRC(b54799dd) SHA1(b6aeb010257cba48a52afd33b4f8031c7d99550c) ) |
| 2219 | 2222 | ROM_LOAD( "harem_sound2.ic13", 0x2000, 0x1000, CRC(2d5573a4) SHA1(1fdcd99d89e078509634742b2116a35bb199fe4b) ) |
| 2220 | 2223 | |
| 2221 | ROM_REGION( 0x2000, " | |
| 2224 | ROM_REGION( 0x2000, "digitalker", 0 ) // DigiTalker ROM (same exact sound PCB as Scorpion (galaxian.c)) | |
| 2222 | 2225 | ROM_LOAD( "harem_h1+h2.ic25", 0x0000, 0x2000, CRC(279f923a) SHA1(166b1b625997766f0de7cc18af52c42268022fcb) ) |
| 2223 | 2226 | |
| 2224 | 2227 | ROM_REGION( 0x4000, "gfx1", 0 ) |
| r248380 | r248381 | |
| 2268 | 2271 | |
| 2269 | 2272 | GAME( 1981, turpins, turtles, turpins, turpins, driver_device, 0, ROT90, "bootleg", "Turpin (bootleg on Scramble hardware)", GAME_NO_SOUND | GAME_SUPPORTS_SAVE ) // haven't hooked up the sound CPU yet |
| 2270 | 2273 | |
| 2271 | GAME( 1983, harem, 0, harem, harem, scramble_state, harem, ROT90, "I.G.R.", "Harem", GAME_ | |
| 2274 | GAME( 1983, harem, 0, harem, harem, scramble_state, harem, ROT90, "I.G.R.", "Harem", GAME_SUPPORTS_SAVE ) |
| r248380 | r248381 | |
|---|---|---|
| 2123 | 2123 | MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB) |
| 2124 | 2124 | |
| 2125 | 2125 | // sound hardware |
| 2126 | MCFG_SPEAKER_STANDARD_ | |
| 2126 | MCFG_SPEAKER_STANDARD_MONO("mono") | |
| 2127 | 2127 | |
| 2128 | 2128 | MCFG_SOUND_ADD("x1snd", X1_010, XTAL_50MHz/3) // clock? |
| 2129 | MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) | |
| 2130 | MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) | |
| 2129 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) | |
| 2131 | 2130 | MACHINE_CONFIG_END |
| 2132 | 2131 | |
| 2133 | 2132 |
| r248380 | r248381 | |
|---|---|---|
| 47 | 47 | thetogyu 3x16k 1x8k 6x8k 2x16k no pio 6073 |
| 48 | 48 | |
| 49 | 49 | spatter 3x16k 1x8k 6x8k 4x16k no pio 6394 6306 |
| 50 | spattera 3x16k 1x8k 6x8k 4x16k no pio 6599 6306 | |
| 50 | 51 | ssanchan 3x16k 1x8k 6x8k 4x16k no pio 6312 |
| 51 | 52 | |
| 52 | 53 | pitfall2 3x16k 1x8k 6x8k 2x16k no pio 6458(a) 6454 |
| r248380 | r248381 | |
| 121 | 122 | |
| 122 | 123 | ******************************************************************************* |
| 123 | 124 | |
| 125 | Spatter (315-5099) | |
| 126 | Sega 1984 | |
| 127 | ||
| 128 | This game runs on Sega System 1 hardware. | |
| 129 | ||
| 130 | 834-5583-12 SPATTER (sticker) | |
| 131 | 834-5542 daughter board with 4 eproms (EPR6306, EPR6307, EPR6308, EPR6309) | |
| 132 | 834-5540 daughter board with logic ICs | |
| 133 | 315-5099 custom Z80 CPU w/security | |
| 134 | ||
| 135 | ******************************************************************************* | |
| 136 | ||
| 124 | 137 | Chop Lifter |
| 125 | 138 | Sega 1985 |
| 126 | 139 | |
| r248380 | r248381 | |
| 2808 | 2821 | |
| 2809 | 2822 | ROM_START( spattera ) |
| 2810 | 2823 | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 2811 | ROM_LOAD( "epr-6597.116", 0x0000, 0x4000, | |
| 2824 | ROM_LOAD( "epr-6597.116", 0x0000, 0x4000, CRC(fb928b9d) SHA1(0a9bede7a147009b9ebb8a0b73681359da665982) ) /* encrypted */ | |
| 2812 | 2825 | ROM_LOAD( "epr-6598.109", 0x4000, 0x4000, CRC(5dff037a) SHA1(8e6f6b75a89609ab0498d317c11e6d653343ffbe) ) /* encrypted */ |
| 2813 | 2826 | ROM_LOAD( "epr-6599.96", 0x8000, 0x4000, CRC(7ba9de5b) SHA1(f18542c95e8241433ed995c213924ad1ce03cd5b) ) |
| 2814 | 2827 | |
| r248380 | r248381 | |
| 4958 | 4971 | sega_decode(m_maincpu_region->base(), m_decrypted_opcodes, 0x8000, convtable); |
| 4959 | 4972 | } |
| 4960 | 4973 | |
| 4974 | DRIVER_INIT_MEMBER(system1_state,spattera) | |
| 4975 | { | |
| 4976 | static const UINT8 convtable[32][4] = | |
| 4977 | { | |
| 4978 | /* opcode data address */ | |
| 4979 | /* A B C D A B C D */ | |
| 4980 | { 0xa0,0xa8,0x20,0x28 }, { 0x80,0xa0,0x00,0x20 }, /* ...0...0...0...0 */ | |
| 4981 | { 0x20,0x28,0x00,0x08 }, { 0x20,0x28,0x00,0x08 }, /* ...0...0...0...1 */ | |
| 4982 | { 0xa0,0xa8,0x20,0x28 }, { 0x08,0x28,0x00,0x20 }, /* ...0...0...1...0 */ | |
| 4983 | { 0x88,0x08,0xa8,0x28 }, { 0x88,0x08,0xa8,0x28 }, /* ...0...0...1...1 */ | |
| 4984 | { 0xa0,0xa8,0x20,0x28 }, { 0x20,0x28,0x00,0x08 }, /* ...0...1...0...0 */ | |
| 4985 | { 0x28,0xa8,0x20,0xa0 }, { 0x20,0x28,0x00,0x08 }, /* ...0...1...0...1 */ | |
| 4986 | { 0xa0,0xa8,0x20,0x28 }, { 0x08,0x28,0x00,0x20 }, /* ...0...1...1...0 */ | |
| 4987 | { 0x88,0x08,0xa8,0x28 }, { 0x88,0x08,0xa8,0x28 }, /* ...0...1...1...1 */ | |
| 4988 | { 0x28,0xa8,0x20,0xa0 }, { 0xa0,0xa8,0x20,0x28 }, /* ...1...0...0...0 */ | |
| 4989 | { 0x88,0x08,0xa8,0x28 }, { 0x80,0xa0,0x00,0x20 }, /* ...1...0...0...1 */ | |
| 4990 | { 0x28,0xa8,0x20,0xa0 }, { 0x08,0x28,0x00,0x20 }, /* ...1...0...1...0 */ | |
| 4991 | { 0x28,0xa8,0x20,0xa0 }, { 0x80,0xa0,0x00,0x20 }, /* ...1...0...1...1 */ | |
| 4992 | { 0x20,0x28,0x00,0x08 }, { 0x20,0x28,0x00,0x08 }, /* ...1...1...0...0 */ | |
| 4993 | { 0x88,0x08,0xa8,0x28 }, { 0x20,0x28,0x00,0x08 }, /* ...1...1...0...1 */ | |
| 4994 | { 0x08,0x28,0x00,0x20 }, { 0x80,0xa0,0x00,0x20 }, /* ...1...1...1...0 */ | |
| 4995 | { 0x08,0x28,0x00,0x20 }, { 0x88,0x08,0xa8,0x28 } /* ...1...1...1...1 */ | |
| 4996 | }; | |
| 4997 | ||
| 4998 | DRIVER_INIT_CALL(bank00); | |
| 4999 | sega_decode(m_maincpu_region->base(), m_decrypted_opcodes, 0x8000, convtable); | |
| 5000 | } | |
| 5001 | ||
| 4961 | 5002 | DRIVER_INIT_MEMBER(system1_state,pitfall2) |
| 4962 | 5003 | { |
| 4963 | 5004 | static const UINT8 convtable[32][4] = |
| r248380 | r248381 | |
| 5615 | 5656 | GAME( 1984, flickys2, flicky, sys1pio, flickys2, system1_state, bank00, ROT0, "Sega", "Flicky (128k Version, System 2, not encrypted)", GAME_SUPPORTS_SAVE ) |
| 5616 | 5657 | GAME( 1984, thetogyu, bullfgt, sys1piox, bullfgt, system1_state, bullfgtj, ROT0, "Coreland / Sega", "The Togyu (315-5065, Japan)", GAME_SUPPORTS_SAVE ) |
| 5617 | 5658 | GAME( 1984, spatter, 0, sys1piosx, spatter, system1_state, spatter, ROT0, "Sega", "Spatter (set 1)", GAME_SUPPORTS_SAVE ) |
| 5618 | GAME( 1984, spattera, spatter, sys1piosx, spatter, system1_state, spatter, | |
| 5659 | GAME( 1984, spattera, spatter, sys1piosx, spatter, system1_state, spattera, ROT0, "Sega", "Spatter (315-5099)", GAME_SUPPORTS_SAVE ) | |
| 5619 | 5660 | GAME( 1984, ssanchan, spatter, sys1piosx, spatter, system1_state, spatter, ROT0, "Sega", "Sanrin San Chan (Japan)", GAME_SUPPORTS_SAVE ) |
| 5620 | 5661 | GAME( 1985, pitfall2, 0, sys1piox, pitfall2, system1_state, pitfall2, ROT0, "Sega", "Pitfall II (315-5093)", GAME_SUPPORTS_SAVE ) |
| 5621 | 5662 | GAME( 1985, pitfall2a, pitfall2, sys1piox, pitfall2, system1_state, pitfall2, ROT0, "Sega", "Pitfall II (315-5093, Flicky Conversion)", GAME_SUPPORTS_SAVE ) |
| r248380 | r248381 | |
|---|---|---|
| 97 | 97 | #include "sound/2612intf.h" |
| 98 | 98 | #include "sound/rf5c68.h" |
| 99 | 99 | #include "video/segaic16.h" |
| 100 | #include "sound/2203intf.h" | |
| 100 | 101 | |
| 101 | 102 | #define SHADOW_COLORS_MULTIPLIER 3 |
| 102 | 103 | |
| r248380 | r248381 | |
| 118 | 119 | } |
| 119 | 120 | } |
| 120 | 121 | |
| 122 | WRITE16_MEMBER(segas1x_bootleg_state::sound_command_irq_w) | |
| 123 | { | |
| 124 | if (ACCESSING_BITS_0_7) | |
| 125 | { | |
| 126 | soundlatch_byte_w(space, 0, data & 0xff); | |
| 127 | m_soundcpu->set_input_line(0, HOLD_LINE); | |
| 128 | } | |
| 129 | } | |
| 121 | 130 | |
| 131 | ||
| 122 | 132 | static ADDRESS_MAP_START( shinobib_map, AS_PROGRAM, 16, segas1x_bootleg_state ) |
| 123 | 133 | AM_RANGE(0x000000, 0x03ffff) AM_ROM |
| 124 | 134 | AM_RANGE(0x400000, 0x40ffff) AM_RAM // tilemap ram on the original, used as a buffer on the bootlegs |
| r248380 | r248381 | |
| 127 | 137 | AM_RANGE(0x412000, 0x412fff) AM_RAM AM_SHARE("bg1_tileram") |
| 128 | 138 | AM_RANGE(0x440000, 0x440fff) AM_RAM AM_SHARE("sprites") |
| 129 | 139 | AM_RANGE(0x840000, 0x840fff) AM_RAM_WRITE(paletteram_w) AM_SHARE("paletteram") |
| 130 | AM_RANGE(0xc40000, 0xc40001) AM_WRITE(sound_command_nmi_w) | |
| 140 | // AM_RANGE(0xc40000, 0xc40001) AM_WRITE(sound_command_irq_w) | |
| 141 | AM_RANGE(0xC42006, 0xC42007) AM_WRITE(sound_command_irq_w) | |
| 142 | ||
| 143 | AM_RANGE(0xC44000, 0xC44001) AM_READNOP | |
| 131 | 144 | AM_RANGE(0xc41000, 0xc41001) AM_READ_PORT("SERVICE") |
| 132 | 145 | AM_RANGE(0xc41002, 0xc41003) AM_READ_PORT("P1") |
| 133 | 146 | AM_RANGE(0xc41006, 0xc41007) AM_READ_PORT("P2") |
| r248380 | r248381 | |
| 146 | 159 | |
| 147 | 160 | /***************************************************************************/ |
| 148 | 161 | |
| 149 | WRITE16_MEMBER(segas1x_bootleg_state::sound_command_w) | |
| 150 | { | |
| 151 | if (ACCESSING_BITS_0_7) | |
| 152 | { | |
| 153 | soundlatch_byte_w(space, 0, data & 0xff); | |
| 154 | m_soundcpu->set_input_line(0, HOLD_LINE); | |
| 155 | } | |
| 156 | } | |
| 157 | ||
| 158 | 162 | WRITE16_MEMBER(segas1x_bootleg_state::sys16_coinctrl_w) |
| 159 | 163 | { |
| 160 | 164 | if (ACCESSING_BITS_0_7) |
| r248380 | r248381 | |
| 187 | 191 | AM_RANGE(0xc41000, 0xc41001) AM_READ_PORT("SERVICE") |
| 188 | 192 | AM_RANGE(0xc42002, 0xc42003) AM_READ_PORT("DSW1") |
| 189 | 193 | AM_RANGE(0xc42000, 0xc42001) AM_READ_PORT("DSW2") |
| 190 | AM_RANGE(0xc42006, 0xc42007) AM_WRITE(sound_command_w) | |
| 194 | AM_RANGE(0xc42006, 0xc42007) AM_WRITE(sound_command_irq_w) | |
| 191 | 195 | AM_RANGE(0xc46000, 0xc46001) AM_WRITE(s16a_bootleg_bgscrolly_w) |
| 192 | 196 | AM_RANGE(0xc46002, 0xc46003) AM_WRITE(s16a_bootleg_bgscrollx_w) |
| 193 | 197 | AM_RANGE(0xc46004, 0xc46005) AM_WRITE(s16a_bootleg_fgscrolly_w) |
| r248380 | r248381 | |
| 265 | 269 | AM_RANGE(0xc41006, 0xc41007) AM_READ(passht4b_io3_r) |
| 266 | 270 | AM_RANGE(0xc42000, 0xc42001) AM_READ_PORT("DSW2") |
| 267 | 271 | AM_RANGE(0xc42002, 0xc42003) AM_READ_PORT("DSW1") |
| 268 | AM_RANGE(0xc42006, 0xc42007) AM_WRITE(sound_command_w) | |
| 272 | AM_RANGE(0xc42006, 0xc42007) AM_WRITE(sound_command_irq_w) | |
| 269 | 273 | AM_RANGE(0xc43000, 0xc43001) AM_READ_PORT("P1") // test mode only |
| 270 | 274 | AM_RANGE(0xc43002, 0xc43003) AM_READ_PORT("P2") |
| 271 | 275 | AM_RANGE(0xc43004, 0xc43005) AM_READ_PORT("P3") |
| r248380 | r248381 | |
| 313 | 317 | AM_RANGE(0xc41004, 0xc41005) AM_READ_PORT("P2") |
| 314 | 318 | AM_RANGE(0xc42000, 0xc42001) AM_READ_PORT("DSW2") |
| 315 | 319 | AM_RANGE(0xc42002, 0xc42003) AM_READ_PORT("DSW1") |
| 316 | AM_RANGE(0xc42006, 0xc42007) AM_WRITE(sound_command_w) | |
| 320 | AM_RANGE(0xc42006, 0xc42007) AM_WRITE(sound_command_irq_w) | |
| 317 | 321 | AM_RANGE(0xC44000, 0xC44001) AM_WRITENOP |
| 318 | 322 | AM_RANGE(0xc46000, 0xc46001) AM_WRITE(s16a_bootleg_bgscrolly_w) |
| 319 | 323 | AM_RANGE(0xc46002, 0xc46003) AM_WRITE(s16a_bootleg_bgscrollx_w) |
| r248380 | r248381 | |
| 424 | 428 | |
| 425 | 429 | /*******************************************************************************/ |
| 426 | 430 | |
| 431 | static ADDRESS_MAP_START(shinobi_datsu_sound_map, AS_PROGRAM, 8, segas1x_bootleg_state ) | |
| 432 | AM_RANGE(0x0000, 0x7fff) AM_ROM | |
| 433 | ||
| 434 | AM_RANGE(0xe000, 0xe001) AM_DEVREADWRITE("ym1", ym2203_device, read, write) | |
| 435 | AM_RANGE(0xe400, 0xe401) AM_DEVREADWRITE("ym2", ym2203_device, read, write) | |
| 436 | AM_RANGE(0xe800, 0xe800) AM_READ(soundlatch_byte_r) | |
| 437 | ||
| 438 | AM_RANGE(0xf800, 0xffff) AM_RAM | |
| 439 | ADDRESS_MAP_END | |
| 440 | ||
| 441 | static ADDRESS_MAP_START( shinobi_datsu_sound_io, AS_IO, 8, segas1x_bootleg_state ) | |
| 442 | ADDRESS_MAP_GLOBAL_MASK(0xff) | |
| 443 | ADDRESS_MAP_END | |
| 444 | ||
| 445 | ||
| 446 | ||
| 447 | /*******************************************************************************/ | |
| 448 | ||
| 427 | 449 | static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, segas1x_bootleg_state ) |
| 428 | 450 | AM_RANGE(0x0000, 0x7fff) AM_ROM |
| 429 | 451 | AM_RANGE(0xe800, 0xe800) AM_READ(soundlatch_byte_r) |
| r248380 | r248381 | |
| 504 | 526 | AM_RANGE(0x901000, 0x901001) AM_READ_PORT("SERVICE") |
| 505 | 527 | AM_RANGE(0x902002, 0x902003) AM_READ_PORT("DSW1") |
| 506 | 528 | AM_RANGE(0x902000, 0x902001) AM_READ_PORT("DSW2") |
| 507 | AM_RANGE(0xff0006, 0xff0007) AM_WRITE(sound_command_w) | |
| 529 | AM_RANGE(0xff0006, 0xff0007) AM_WRITE(sound_command_irq_w) | |
| 508 | 530 | AM_RANGE(0xff0020, 0xff003f) AM_WRITENOP // config regs |
| 509 | 531 | ADDRESS_MAP_END |
| 510 | 532 | #endif |
| r248380 | r248381 | |
| 691 | 713 | AM_RANGE(0x800000, 0x800fff) AM_RAM_WRITE(paletteram_w) AM_SHARE("paletteram") |
| 692 | 714 | AM_RANGE(0x900000, 0x900001) AM_READ_PORT("DSW1") |
| 693 | 715 | AM_RANGE(0x900002, 0x900003) AM_READ_PORT("DSW2") |
| 694 | AM_RANGE(0x900006, 0x900007) AM_WRITE(sound_command_w) | |
| 716 | AM_RANGE(0x900006, 0x900007) AM_WRITE(sound_command_irq_w) | |
| 695 | 717 | AM_RANGE(0x901000, 0x901001) AM_READ_PORT("SERVICE") AM_WRITE(sys16_coinctrl_w) |
| 696 | 718 | AM_RANGE(0x901002, 0x901003) AM_READ_PORT("P1") |
| 697 | 719 | AM_RANGE(0x901006, 0x901007) AM_READ_PORT("P2") |
| r248380 | r248381 | |
| 705 | 727 | AM_RANGE(0x440000, 0x440fff) AM_RAM AM_SHARE("sprites") |
| 706 | 728 | AM_RANGE(0x840000, 0x840fff) AM_RAM_WRITE(paletteram_w) AM_SHARE("paletteram") |
| 707 | 729 | AM_RANGE(0xc40000, 0xc40001) AM_WRITE(sys16_coinctrl_w) |
| 708 | AM_RANGE(0xc40006, 0xc40007) AM_WRITE(sound_command_w) | |
| 730 | AM_RANGE(0xc40006, 0xc40007) AM_WRITE(sound_command_irq_w) | |
| 709 | 731 | AM_RANGE(0xc41002, 0xc41003) AM_READ_PORT("P1") |
| 710 | 732 | AM_RANGE(0xc41004, 0xc41005) AM_READ_PORT("P2") |
| 711 | 733 | AM_RANGE(0xc41000, 0xc41001) AM_READ_PORT("SERVICE") |
| r248380 | r248381 | |
| 825 | 847 | AM_RANGE(0x410000, 0x410fff) AM_RAM_WRITE(sys16_textram_w) AM_SHARE("textram") |
| 826 | 848 | AM_RANGE(0x440000, 0x440fff) AM_RAM AM_SHARE("sprites") |
| 827 | 849 | |
| 828 | AM_RANGE(0x600006, 0x600007) AM_WRITE(sound_command_w) | |
| 850 | AM_RANGE(0x600006, 0x600007) AM_WRITE(sound_command_irq_w) | |
| 829 | 851 | AM_RANGE(0x601000, 0x601001) AM_READ_PORT("SERVICE") |
| 830 | 852 | AM_RANGE(0x601002, 0x601003) AM_READ_PORT("P1") |
| 831 | 853 | AM_RANGE(0x601004, 0x601005) AM_READ_PORT("P2") |
| r248380 | r248381 | |
| 879 | 901 | AM_RANGE(0xc41000, 0xc41001) AM_READ_PORT("SERVICE") |
| 880 | 902 | AM_RANGE(0xc42002, 0xc42003) AM_READ_PORT("DSW1") |
| 881 | 903 | AM_RANGE(0xc42000, 0xc42001) AM_READ_PORT("DSW2") |
| 882 | AM_RANGE(0xc42006, 0xc42007) AM_WRITE(sound_command_w) | |
| 904 | AM_RANGE(0xc42006, 0xc42007) AM_WRITE(sound_command_irq_w) | |
| 883 | 905 | AM_RANGE(0xc80000, 0xc80001) AM_WRITENOP |
| 884 | 906 | AM_RANGE(0xffc000, 0xffffff) AM_RAM // work ram |
| 885 | 907 | ADDRESS_MAP_END |
| r248380 | r248381 | |
| 906 | 928 | AM_RANGE(0xc41006, 0xc41007) AM_READ_PORT("P2") |
| 907 | 929 | AM_RANGE(0xc42000, 0xc42001) AM_READ_PORT("DSW2") |
| 908 | 930 | AM_RANGE(0xc42002, 0xc42003) AM_READ_PORT("DSW1") |
| 909 | AM_RANGE(0xc42006, 0xc42007) AM_WRITE(sound_command_w) | |
| 931 | AM_RANGE(0xc42006, 0xc42007) AM_WRITE(sound_command_irq_w) | |
| 910 | 932 | AM_RANGE(0xc43034, 0xc43035) AM_WRITENOP |
| 911 | 933 | AM_RANGE(0xc80000, 0xc80001) AM_NOP |
| 912 | 934 | AM_RANGE(0xffc000, 0xffffff) AM_RAM // work ram |
| r248380 | r248381 | |
| 943 | 965 | AM_RANGE(0xc41000, 0xc41001) AM_READ_PORT("SERVICE") |
| 944 | 966 | AM_RANGE(0xc41002, 0xc41003) AM_READ_PORT("P1") |
| 945 | 967 | AM_RANGE(0xc41004, 0xc41005) AM_READ_PORT("P2") |
| 946 | AM_RANGE(0xc42006, 0xc42007) AM_WRITE(sound_command_w) | |
| 968 | AM_RANGE(0xc42006, 0xc42007) AM_WRITE(sound_command_irq_w) | |
| 947 | 969 | |
| 948 | 970 | AM_RANGE(0xc40000, 0xc40001) AM_WRITENOP |
| 949 | 971 | AM_RANGE(0xc80000, 0xc80001) AM_WRITENOP // vblank irq ack |
| r248380 | r248381 | |
| 963 | 985 | AM_RANGE(0x600000, 0x600001) AM_WRITE(sys16_coinctrl_w) |
| 964 | 986 | AM_RANGE(0x600000, 0x600001) AM_READ_PORT("DSW2") |
| 965 | 987 | AM_RANGE(0x600002, 0x600003) AM_READ_PORT("DSW1") |
| 966 | AM_RANGE(0x600006, 0x600007) AM_WRITE(sound_command_w) | |
| 988 | AM_RANGE(0x600006, 0x600007) AM_WRITE(sound_command_irq_w) | |
| 967 | 989 | AM_RANGE(0x601000, 0x601001) AM_READ_PORT("SERVICE") |
| 968 | 990 | AM_RANGE(0x601002, 0x601003) AM_READ_PORT("P1") |
| 969 | 991 | AM_RANGE(0x601004, 0x601005) AM_READ_PORT("P2") |
| r248380 | r248381 | |
| 1083 | 1105 | |
| 1084 | 1106 | ***************************************************************************/ |
| 1085 | 1107 | |
| 1086 | WRITE16_MEMBER(segas1x_bootleg_state::sound_command_irq_w) | |
| 1087 | { | |
| 1088 | if (ACCESSING_BITS_0_7) | |
| 1089 | { | |
| 1090 | soundlatch_byte_w(space, 0, data & 0xff); | |
| 1091 | m_soundcpu->set_input_line(0, HOLD_LINE); | |
| 1092 | } | |
| 1093 | } | |
| 1094 | 1108 | |
| 1095 | 1109 | static ADDRESS_MAP_START( shdancbl_map, AS_PROGRAM, 16, segas1x_bootleg_state ) |
| 1096 | 1110 | AM_RANGE(0x000000, 0x07ffff) AM_ROM |
| r248380 | r248381 | |
| 2016 | 2030 | *************************************/ |
| 2017 | 2031 | |
| 2018 | 2032 | /* System 16A/B Bootlegs */ |
| 2019 | static MACHINE_CONFIG_START( system16, segas1x_bootleg_state ) | |
| 2033 | static MACHINE_CONFIG_START( system16_base, segas1x_bootleg_state ) | |
| 2020 | 2034 | |
| 2021 | 2035 | /* basic machine hardware */ |
| 2022 | 2036 | MCFG_CPU_ADD("maincpu", M68000, 10000000) |
| 2023 | 2037 | MCFG_CPU_VBLANK_INT_DRIVER("screen", segas1x_bootleg_state, sys16_interrupt) |
| 2024 | 2038 | |
| 2025 | MCFG_CPU_ADD("soundcpu", Z80, 4000000) | |
| 2026 | MCFG_CPU_PROGRAM_MAP(sound_map) | |
| 2027 | MCFG_CPU_IO_MAP(sound_io_map) | |
| 2028 | ||
| 2029 | 2039 | /* video hardware */ |
| 2030 | 2040 | MCFG_SCREEN_ADD("screen", RASTER) |
| 2031 | 2041 | MCFG_SCREEN_REFRESH_RATE(60) |
| r248380 | r248381 | |
| 2039 | 2049 | MCFG_PALETTE_ADD("palette", 2048*SHADOW_COLORS_MULTIPLIER) |
| 2040 | 2050 | |
| 2041 | 2051 | MCFG_VIDEO_START_OVERRIDE(segas1x_bootleg_state,system16) |
| 2052 | MACHINE_CONFIG_END | |
| 2042 | 2053 | |
| 2054 | static MACHINE_CONFIG_DERIVED( system16, system16_base ) | |
| 2055 | ||
| 2056 | MCFG_CPU_ADD("soundcpu", Z80, 4000000) | |
| 2057 | MCFG_CPU_PROGRAM_MAP(sound_map) | |
| 2058 | MCFG_CPU_IO_MAP(sound_io_map) | |
| 2059 | ||
| 2043 | 2060 | /* sound hardware */ |
| 2044 | 2061 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| 2045 | 2062 | |
| r248380 | r248381 | |
| 2048 | 2065 | MCFG_SOUND_ROUTE(1, "rspeaker", 0.32) |
| 2049 | 2066 | MACHINE_CONFIG_END |
| 2050 | 2067 | |
| 2051 | ||
| 2052 | 2068 | WRITE_LINE_MEMBER(segas1x_bootleg_state::sound_cause_nmi) |
| 2053 | 2069 | { |
| 2054 | 2070 | /* upd7759 callback */ |
| r248380 | r248381 | |
| 2094 | 2110 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.80) |
| 2095 | 2111 | MACHINE_CONFIG_END |
| 2096 | 2112 | |
| 2113 | static MACHINE_CONFIG_DERIVED( shinobi_datsu, system16_base ) | |
| 2097 | 2114 | |
| 2098 | static MACHINE_CONFIG_DERIVED( shinobib, system16 ) | |
| 2099 | ||
| 2100 | 2115 | /* basic machine hardware */ |
| 2101 | 2116 | MCFG_CPU_MODIFY("maincpu") |
| 2102 | 2117 | MCFG_CPU_PROGRAM_MAP(shinobib_map) |
| r248380 | r248381 | |
| 2107 | 2122 | MCFG_VIDEO_START_OVERRIDE(segas1x_bootleg_state, s16a_bootleg_shinobi ) |
| 2108 | 2123 | MCFG_SCREEN_MODIFY("screen") |
| 2109 | 2124 | MCFG_SCREEN_UPDATE_DRIVER(segas1x_bootleg_state, screen_update_s16a_bootleg) |
| 2125 | ||
| 2126 | MCFG_CPU_ADD("soundcpu", Z80, 4000000) | |
| 2127 | MCFG_CPU_PERIODIC_INT_DRIVER(segas1x_bootleg_state, nmi_line_pulse, 3000) // or from the YM2203? | |
| 2128 | MCFG_CPU_PROGRAM_MAP(shinobi_datsu_sound_map) | |
| 2129 | MCFG_CPU_IO_MAP(shinobi_datsu_sound_io) | |
| 2130 | ||
| 2131 | /* sound hardware */ | |
| 2132 | MCFG_SPEAKER_STANDARD_MONO("mono") | |
| 2133 | ||
| 2134 | // 2x YM2203C, one at U57, one at U56 | |
| 2135 | MCFG_SOUND_ADD("ym1", YM2203, 4000000) | |
| 2136 | // MCFG_YM2203_IRQ_HANDLER(WRITELINE(segas1x_bootleg_state, datsu_irq_handler)) | |
| 2137 | MCFG_SOUND_ROUTE(0, "mono", 0.50) | |
| 2138 | MCFG_SOUND_ROUTE(1, "mono", 0.50) | |
| 2139 | MCFG_SOUND_ROUTE(2, "mono", 0.50) | |
| 2140 | MCFG_SOUND_ROUTE(3, "mono", 0.80) | |
| 2141 | ||
| 2142 | MCFG_SOUND_ADD("ym2", YM2203, 4000000) | |
| 2143 | MCFG_SOUND_ROUTE(0, "mono", 0.50) | |
| 2144 | // MCFG_YM2203_IRQ_HANDLER(WRITELINE(segas1x_bootleg_state, datsu_irq_handler)) | |
| 2145 | MCFG_SOUND_ROUTE(1, "mono", 0.50) | |
| 2146 | MCFG_SOUND_ROUTE(2, "mono", 0.50) | |
| 2147 | MCFG_SOUND_ROUTE(3, "mono", 0.80) | |
| 2148 | ||
| 2110 | 2149 | MACHINE_CONFIG_END |
| 2111 | 2150 | |
| 2151 | ||
| 2112 | 2152 | static MACHINE_CONFIG_DERIVED( passshtb, system16_7759 ) |
| 2113 | 2153 | |
| 2114 | 2154 | /* basic machine hardware */ |
| r248380 | r248381 | |
| 2431 | 2471 | ROM_LOAD( "16.bin", 0x0000, 0x10000, CRC(52c8364e) SHA1(01d30b82f92498d155d2e31d43d58dff0285cce3) ) |
| 2432 | 2472 | ROM_END |
| 2433 | 2473 | |
| 2474 | ROM_START( shinoblda ) | |
| 2475 | ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 code */ | |
| 2476 | ROM_LOAD16_BYTE( "12.bin", 0x000001, 0x10000, CRC(68c91fd5) SHA1(54dc1d26711c73b30cbb5387dde27ba21cc102f4) ) // sldh | |
| 2477 | ROM_LOAD16_BYTE( "14.bin", 0x000000, 0x10000, CRC(9e887c80) SHA1(798a3dc499ef14b362bc37ff91b247e367f42ab9) ) // sldh | |
| 2478 | ROM_LOAD16_BYTE( "13.bin", 0x020001, 0x10000, CRC(c4334bcd) SHA1(ea1dd23ca6fbf632d8e10bbb9ced6515a69bd14a) ) | |
| 2479 | ROM_LOAD16_BYTE( "15.bin", 0x020000, 0x10000, CRC(b70a6ec1) SHA1(79db41c36d6a053bcdc355b46b19ae938a7755a9) ) | |
| 2480 | ||
| 2481 | ROM_REGION( 0x30000, "gfx1", ROMREGION_INVERT ) /* tiles */ | |
| 2482 | ROM_LOAD( "9.bin", 0x00000, 0x10000, CRC(565e11c6) SHA1(e063400b3d0470b932d75da0be9cd4b446189dea) ) | |
| 2483 | ROM_LOAD( "10.bin", 0x10000, 0x10000, CRC(7cc40b6c) SHA1(ffad7eef7ab2ff9a2e49a8d71b5785a61fa3c675) ) | |
| 2484 | ROM_LOAD( "11.bin", 0x20000, 0x10000, CRC(0f6c7b1c) SHA1(defc76592c285b3396e89a3cff7a73f3a948117f) ) | |
| 2485 | ||
| 2486 | ROM_REGION16_BE( 0x080000, "sprites", ROMREGION_ERASEFF ) /* sprites */ | |
| 2487 | ROM_LOAD16_BYTE( "5.bin", 0x00001, 0x10000, CRC(611f413a) SHA1(180f83216e2dfbfd77b0fb3be83c3042954d12df) ) | |
| 2488 | ROM_LOAD16_BYTE( "3.bin", 0x00000, 0x10000, CRC(5eb00fc1) SHA1(97e02eee74f61fabcad2a9e24f1868cafaac1d51) ) | |
| 2489 | ROM_LOAD16_BYTE( "8.bin", 0x20001, 0x10000, CRC(3c0797c0) SHA1(df18c7987281bd9379026c6cf7f96f6ae49fd7f9) ) | |
| 2490 | ROM_LOAD16_BYTE( "2.bin", 0x20000, 0x10000, CRC(25307ef8) SHA1(91ffbe436f80d583524ee113a8b7c0cf5d8ab286) ) | |
| 2491 | ROM_LOAD16_BYTE( "6.bin", 0x40001, 0x10000, CRC(c29ac34e) SHA1(b5e9b8c3233a7d6797f91531a0d9123febcf1660) ) | |
| 2492 | ROM_LOAD16_BYTE( "4.bin", 0x40000, 0x10000, CRC(04a437f8) SHA1(ea5fed64443236e3404fab243761e60e2e48c84c) ) | |
| 2493 | ROM_LOAD16_BYTE( "7.bin", 0x60001, 0x10000, CRC(41f41063) SHA1(5cc461e9738dddf9eea06831fce3702d94674163) ) | |
| 2494 | ROM_LOAD16_BYTE( "1.bin", 0x60000, 0x10000, CRC(b6e1fd72) SHA1(eb86e4bf880bd1a1d9bcab3f2f2e917bcaa06172) ) | |
| 2495 | ||
| 2496 | ROM_REGION( 0x10000, "soundcpu", 0 ) /* sound CPU + data */ | |
| 2497 | ROM_LOAD( "16.bin", 0x0000, 0x10000, CRC(52c8364e) SHA1(01d30b82f92498d155d2e31d43d58dff0285cce3) ) | |
| 2498 | ROM_END | |
| 2499 | ||
| 2434 | 2500 | /* Passing Shot Bootleg is a decrypted version of Passing Shot Japanese (passshtj). It has been heavily modified */ |
| 2435 | 2501 | ROM_START( passshtb ) |
| 2436 | 2502 | ROM_REGION( 0x020000, "maincpu", 0 ) /* 68000 code */ |
| r248380 | r248381 | |
| 3702 | 3768 | *************************************/ |
| 3703 | 3769 | |
| 3704 | 3770 | /* System 16A based bootlegs (less complex tilemap system) */ |
| 3705 | GAME( 1987, shinobld, shinobi, shinobib, shinobi, segas1x_bootleg_state, shinobl, ROT0, "bootleg (Datsu)", "Shinobi (Datsu bootleg)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_NO_SOUND ) | |
| 3771 | GAME( 1987, shinobld, shinobi, shinobi_datsu, shinobi, segas1x_bootleg_state, shinobl, ROT0, "bootleg (Datsu)", "Shinobi (Datsu bootleg, set 1)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_NO_SOUND ) | |
| 3772 | GAME( 1987, shinoblda, shinobi, shinobi_datsu, shinobi, segas1x_bootleg_state, shinobl, ROT0, "bootleg (Datsu)", "Shinobi (Datsu bootleg, set 2)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_NO_SOUND ) | |
| 3773 | ||
| 3774 | ||
| 3775 | ||
| 3706 | 3776 | GAME( 1988, passshtb, passsht, passshtb, passsht, segas1x_bootleg_state, passsht, ROT270, "bootleg", "Passing Shot (2 Players) (bootleg)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 3707 | 3777 | GAME( 1988, passht4b, passsht, passsht4b, passht4b, segas1x_bootleg_state, shinobl, ROT270, "bootleg", "Passing Shot (4 Players) (bootleg)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_NO_SOUND ) |
| 3708 | 3778 | GAME( 1988, wb3bbl, wb3, wb3bb, wb3b, segas1x_bootleg_state, wb3bbl, ROT0, "bootleg", "Wonder Boy III - Monster Lair (bootleg)", GAME_NOT_WORKING ) |
| r248380 | r248381 | |
|---|---|---|
| 184 | 184 | |
| 185 | 185 | ****************************************************************************/ |
| 186 | 186 | /*! |
| 187 | @todo - Framebuffer DMA requires palette switch to be selected dynamically, see at first stage Course Select in Top Landing. | |
| 187 | @todo - Framebuffer DMA requires palette switch to be selected dynamically, see at first stage Course Select in Top Landing. | |
| 188 | 188 | My gut feeling is that 3d poly fill operation actually copies to internal buffer then a DMA op actually do the buffer-to-screen copy, including gradiation ROZ too; |
| 189 | 189 | - Air Inferno: missing landing monitor camera (blackened); |
| 190 | 190 | - Air Inferno: missing 3d HUD graphics; |
| 191 | 191 | - Air Inferno: Expert course has wrong 3d geometry; |
| 192 | - Air Inferno: Almost surely crashing during replay has missing smoke effect, looks quit odd atm. | |
| 192 | - Air Inferno: Almost surely crashing during replay has missing smoke effect, looks quite odd atm. | |
| 193 | 193 | - Top Landing: Night stages might have wrong priority for stars-above-sea; |
| 194 | 194 | - Input limiters / analog thresholds for both games; |
| 195 | - Special thanks to syq for being a cunt. | |
| 196 | 195 | */ |
| 197 | 196 | |
| 198 | 197 | #include "emu.h" |
| r248380 | r248381 | |
| 355 | 354 | [3] both games uses 0xb7, most likely a register setting. |
| 356 | 355 | */ |
| 357 | 356 | WRITE16_MEMBER(taitoair_state::dma_regs_w) |
| 358 | { | |
| 357 | { | |
| 359 | 358 | printf("%08x %04x\n",offset,data); |
| 360 | ||
| 359 | ||
| 361 | 360 | if(offset == 0 && ACCESSING_BITS_8_15) |
| 362 | 361 | { |
| 363 | 362 | if(data == 0x1fff) |
| r248380 | r248381 | |
| 481 | 480 | { |
| 482 | 481 | if(m_dsp_muldiv_c_1 == 0) |
| 483 | 482 | return 0xffff; /**< @todo true value? */ |
| 484 | ||
| 483 | ||
| 485 | 484 | return m_dsp_muldiv_a_1*m_dsp_muldiv_b_1/m_dsp_muldiv_c_1; |
| 486 | 485 | } |
| 487 | 486 | |
| r248380 | r248381 | |
| 504 | 503 | { |
| 505 | 504 | if(m_dsp_muldiv_c_2 == 0) |
| 506 | 505 | return 0xffff; /**< @todo true value? */ |
| 507 | ||
| 506 | ||
| 508 | 507 | return m_dsp_muldiv_a_2*m_dsp_muldiv_b_2/m_dsp_muldiv_c_2; |
| 509 | 508 | } |
| 510 | 509 |
| r248380 | r248381 | |
|---|---|---|
| 2195 | 2195 | ROM_END |
| 2196 | 2196 | |
| 2197 | 2197 | /* M6100309A PCB |
| 2198 | P | |
| 2198 | P0-0038A */ | |
| 2199 | 2199 | ROM_START( kageki ) |
| 2200 | 2200 | ROM_REGION( 0x20000, "maincpu", 0 ) |
| 2201 | 2201 | ROM_LOAD( "b35-16.11c", 0x00000, 0x10000, CRC(a4e6fd58) SHA1(7cfe5b3fa6c88cdab45719f5b58541270825ad30) ) /* US ver */ |
| r248380 | r248381 | |
| 2502 | 2502 | Taito ID: K1100356A |
| 2503 | 2503 | J1100156A |
| 2504 | 2504 | MAIN PCB |
| 2505 | Seta ID: P | |
| 2505 | Seta ID: P0-041A | |
| 2506 | 2506 | */ |
| 2507 | 2507 | /* This pcb is similar but not identical to the Chuka Taisen pcb above; |
| 2508 | 2508 | there is an M-chip i8742 (with Taito silkscreen) and no 3rd z80. |
| r248380 | r248381 | |
|---|---|---|
| 1405 | 1405 | ROM_LOAD( "763a12", 0x000000, 0x008000, CRC(05f1e553) SHA1(8aaeb7374bd93038c24e6470398936f22cabb0fe) ) |
| 1406 | 1406 | ROM_END |
| 1407 | 1407 | |
| 1408 | /* | |
| 1409 | ||
| 1410 | Hot Chase | |
| 1411 | Konami 1988 | |
| 1412 | ||
| 1413 | ||
| 1414 | ||
| 1415 | E08D E08B E09D E09B E10D E10B | |
| 1416 | E08A E08C E09A E09C E10A E10C | |
| 1417 | ||
| 1418 | GX763 350861 | |
| 1419 | ||
| 1420 | E09 E10 E11 | |
| 1421 | E08 07232 07232 | |
| 1422 | 07232 3.579MHz 2128 | |
| 1423 | 6809 P01.R10 | |
| 1424 | SW1 | |
| 1425 | SW2 2128 2128 | |
| 1426 | 6264 6264 6264 6264 | |
| 1427 | R02.P14 R03.R14 | |
| 1428 | 07770 R04.P16 R05.R16 | |
| 1429 | 2018-45 D06.E18 D07.H18 10MHz | |
| 1430 | 2018-45 68000-10 07641 68000-10 | |
| 1431 | ||
| 1432 | GX763 350860 | |
| 1433 | ||
| 1434 | 051316 PSAC 051316 PSAC A13.H5 A14.J5 | |
| 1435 | 2018-45 2018-R6 | |
| 1436 | 2018-45 | |
| 1437 | 2018-45 07558 | |
| 1438 | 051316 PSAC 2018-45 A12.R13 | |
| 1439 | ||
| 1440 | A15.H14 | |
| 1441 | ||
| 1442 | A23.B17 07634 | |
| 1443 | 07635 | |
| 1444 | 2018-45 2018-45 | |
| 1445 | 2018-45 2018-45 07557 | |
| 1446 | 2018-45 2018-45 25.2MHz | |
| 1447 | 2018-45 2018-45 | |
| 1448 | ||
| 1449 | ||
| 1450 | Left EPROM board | |
| 1451 | ||
| 1452 | E19A.A8 E19B.A7 E19C.A6 E19D.A5 | |
| 1453 | E22E.B12 E22F.B11 E22G.B10 E22H.B9 E19E.B8 E19F.B7 E19G.B6 E19H.B5 | |
| 1454 | E22A.D9 E22B.D7 E22C.D6 E22D.D5 | |
| 1455 | ||
| 1456 | Right EPROM board | |
| 1457 | ||
| 1458 | E21E E21F E21G E21H E17A E17B E17C E17D E18A E18B E18C E18D | |
| 1459 | E20E E20F E20G E20H E17E E17F E17G E17H E18E E18F E18G E18H | |
| 1460 | E20A E20B E20C E20D E21A E21B E21C E21D | |
| 1461 | ||
| 1462 | */ | |
| 1463 | ||
| 1464 | // uses EPROM sub-boards in place of some of the MASK roms, different program too | |
| 1465 | ROM_START( hotchasea ) | |
| 1466 | ROM_REGION( 0x40000, "maincpu", 0 ) /* Main Code */ | |
| 1467 | ROM_LOAD16_BYTE( "763r05.r16", 0x000000, 0x010000, CRC(c880d5e4) SHA1(3c3ab3ad5496cfbc8de76620eedc06601ee7a8c7) ) | |
| 1468 | ROM_LOAD16_BYTE( "763r04.p16", 0x000001, 0x010000, CRC(b732ee2c) SHA1(b3d73cf5039980ac74927eef656326515fd2026b) ) | |
| 1469 | ROM_LOAD16_BYTE( "763r03.r14", 0x020000, 0x010000, CRC(13dd71de) SHA1(4b86b81ef79e0e92a1e458010b0b9574183a9c29) ) | |
| 1470 | ROM_LOAD16_BYTE( "763r02.p14", 0x020001, 0x010000, CRC(6cd1a18e) SHA1(0ddfe6a46e95052534325f228b7f0faba121950e) ) | |
| 1471 | ||
| 1472 | ROM_REGION( 0x20000, "sub", 0 ) /* Sub Code */ | |
| 1473 | ROM_LOAD16_BYTE( "763d07.h18", 0x000000, 0x010000, CRC(ae12fa90) SHA1(7f76f09916fe152411b5af3c504ee7be07497ef4) ) | |
| 1474 | ROM_LOAD16_BYTE( "763d06.e18", 0x000001, 0x010000, CRC(b77e0c07) SHA1(98bf492ac889d31419df706029fdf3d51b85c936) ) | |
| 1475 | ||
| 1476 | ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound Code */ | |
| 1477 | ROM_LOAD( "763p01.r10", 0x8000, 0x8000, CRC(15dbca7b) SHA1(ac0c965b72a8579a3b60dbadfb942248d2cff2d8) ) | |
| 1478 | ||
| 1479 | ROM_REGION( 0x300000 * 2, "gfx1", 0 ) /* x2, do not dispose, zooming sprites */ | |
| 1480 | ROM_LOAD16_BYTE( "763e17a", 0x000000, 0x010000, CRC(8542d7d7) SHA1(a7c8aa7d8e0cabdc5269eb7adff944aaa0f819b6) ) | |
| 1481 | ROM_LOAD16_BYTE( "763e17e", 0x000001, 0x010000, CRC(4b4d919c) SHA1(0364eb74da8db7238888274d12011de876662d5a) ) | |
| 1482 | ROM_LOAD16_BYTE( "763e17b", 0x020000, 0x010000, CRC(ba9d7e72) SHA1(3af618087dcc66552ffabaf655f97b20e597122c) ) | |
| 1483 | ROM_LOAD16_BYTE( "763e17f", 0x020001, 0x010000, CRC(582400bb) SHA1(9479e45087d908c9b20392dba2a752a7ec1482e2) ) | |
| 1484 | ROM_LOAD16_BYTE( "763e17c", 0x040000, 0x010000, CRC(0ed292f8) SHA1(8c161e73c7f27925377799f67585b888bade6d82) ) | |
| 1485 | ROM_LOAD16_BYTE( "763e17g", 0x040001, 0x010000, CRC(35b27ed7) SHA1(e17e7674ee210ff340482a16dce3439b55c29f72) ) | |
| 1486 | ROM_LOAD16_BYTE( "763e17d", 0x060000, 0x010000, CRC(0166d00d) SHA1(e58f6deabc5743f6610252242f97bd5e973316ae) ) | |
| 1487 | ROM_LOAD16_BYTE( "763e17h", 0x060001, 0x010000, CRC(e5b8e8e6) SHA1(ae1349977559ff24dcd1678d6fd3a3e118612d07) ) | |
| 1488 | ROM_LOAD16_BYTE( "763e20a", 0x080000, 0x010000, CRC(256fe63c) SHA1(414325f2ff9abc411e2401dddd216e1a4de8a01e) ) | |
| 1489 | ROM_LOAD16_BYTE( "763e20e", 0x080001, 0x010000, CRC(ee8ca7e1) SHA1(fee544d6508f4106176f39e3765961e9f80fe620) ) | |
| 1490 | ROM_LOAD16_BYTE( "763e20b", 0x0a0000, 0x010000, CRC(b6714c24) SHA1(88f6437e181f36b7e44f1c70872314d8c0cc30e7) ) | |
| 1491 | ROM_LOAD16_BYTE( "763e20f", 0x0a0001, 0x010000, CRC(9dbc4b21) SHA1(31559903707a4f8ba3b044e8aad928de38403dcf) ) | |
| 1492 | ROM_LOAD16_BYTE( "763e20c", 0x0c0000, 0x010000, CRC(5173ad9b) SHA1(afe82c69f7036c7595f1a56b22176ba202b00b5c) ) | |
| 1493 | ROM_LOAD16_BYTE( "763e20g", 0x0c0001, 0x010000, CRC(b8c77f99) SHA1(e3bea1481c5b1c4733130651f9cf18587d3efc46) ) | |
| 1494 | ROM_LOAD16_BYTE( "763e20d", 0x0e0000, 0x010000, CRC(4ebdba32) SHA1(ac7daa291c82f75b09faf7bc5f6257870cc46061) ) | |
| 1495 | ROM_LOAD16_BYTE( "763e20h", 0x0e0001, 0x010000, CRC(0a428654) SHA1(551026f6f57d38aedd3498cce33af7bb2cf07184) ) | |
| 1496 | ROM_LOAD16_BYTE( "763e18a", 0x100000, 0x010000, CRC(09748099) SHA1(1821e2067b9a50a0638c8d105c617f4030d61877) ) | |
| 1497 | ROM_LOAD16_BYTE( "763e18e", 0x100001, 0x010000, CRC(049d4fcf) SHA1(aed18297677a3bb0b7197f59ea329aef9b678c01) ) | |
| 1498 | ROM_LOAD16_BYTE( "763e18b", 0x120000, 0x010000, CRC(ed0c3369) SHA1(84f336546dee01fec31c9c256ee00a9f8448cea4) ) | |
| 1499 | ROM_LOAD16_BYTE( "763e18f", 0x120001, 0x010000, CRC(b596a9ce) SHA1(dea0fe1c3386b5f0d19df4467f42d077678ae220) ) | |
| 1500 | ROM_LOAD16_BYTE( "763e18c", 0x140000, 0x010000, CRC(5a278291) SHA1(05c529baa68ef5877a28901c6f221e3d3593735f) ) | |
| 1501 | ROM_LOAD16_BYTE( "763e18g", 0x140001, 0x010000, CRC(aa7263cd) SHA1(b2acf66c02faf7777c5cb947aaf8e038f29c0f2e) ) | |
| 1502 | ROM_LOAD16_BYTE( "763e18d", 0x160000, 0x010000, CRC(b0b79a71) SHA1(46d0f17b7a6e4fb94ac9b8335bc598339d7707a5) ) | |
| 1503 | ROM_LOAD16_BYTE( "763e18h", 0x160001, 0x010000, CRC(a18b9127) SHA1(890971d2922a59ff4beea00238e710c8d3e0f19d) ) | |
| 1504 | ROM_LOAD16_BYTE( "763e21a", 0x180000, 0x010000, CRC(60788c29) SHA1(4faaa192d07f6acac0e7d11676146ecd0e71541f) ) | |
| 1505 | ROM_LOAD16_BYTE( "763e21e", 0x180001, 0x010000, CRC(844799ff) SHA1(8dc3ae3bb30ecb4e921a5b2068d3cd9421577844) ) | |
| 1506 | ROM_LOAD16_BYTE( "763e21b", 0x1a0000, 0x010000, CRC(1eefed61) SHA1(9c09dbff073d63384bf1ec9df4db4833afa33826) ) | |
| 1507 | ROM_LOAD16_BYTE( "763e21f", 0x1a0001, 0x010000, CRC(3aacfb10) SHA1(fb3eebf1f0850ed2f8f02cd4b5b564524e391afd) ) | |
| 1508 | ROM_LOAD16_BYTE( "763e21c", 0x1c0000, 0x010000, CRC(97e48b37) SHA1(864c73f48d839c2afeecec99605be6111f450ddd) ) | |
| 1509 | ROM_LOAD16_BYTE( "763e21g", 0x1c0001, 0x010000, CRC(74fefb12) SHA1(7746918c3ea8981c9cb2ead79a252939ba8bde3f) ) | |
| 1510 | ROM_LOAD16_BYTE( "763e21d", 0x1e0000, 0x010000, CRC(dd41569e) SHA1(065ee2de9ad6980788807cb563feccef1c3d1b9d) ) | |
| 1511 | ROM_LOAD16_BYTE( "763e21h", 0x1e0001, 0x010000, CRC(7ea52bf6) SHA1(2be93f88ccdea989b05beca13ebbfb77626ea41f) ) | |
| 1512 | ROM_LOAD16_BYTE( "763e19a", 0x200000, 0x010000, CRC(8c912c46) SHA1(e314edc39c32471c6fa2969e7c5c771c19fda88c) ) | |
| 1513 | ROM_LOAD16_BYTE( "763e19e", 0x200001, 0x010000, CRC(0eb34787) SHA1(9b8145dae210a177585e672fce30339b39c3c0f3) ) | |
| 1514 | ROM_LOAD16_BYTE( "763e19b", 0x220000, 0x010000, CRC(79960729) SHA1(f5c20ed7683aad8a435c292fbd5a1acc2a97ecee) ) | |
| 1515 | ROM_LOAD16_BYTE( "763e19f", 0x220001, 0x010000, CRC(1764ec5f) SHA1(4f7a0a3667087523a1ccdfc2d0e54a520f1216b3) ) | |
| 1516 | ROM_LOAD16_BYTE( "763e19c", 0x240000, 0x010000, CRC(f13377ac) SHA1(89f8d730cb457cc9cf55049b7002514302b2b04f) ) | |
| 1517 | ROM_LOAD16_BYTE( "763e19g", 0x240001, 0x010000, CRC(f2102e89) SHA1(41ff5d8904618a77c7c3c78c52c6f1b9c5a318fd) ) | |
| 1518 | ROM_LOAD16_BYTE( "763e19d", 0x260000, 0x010000, CRC(0b2a19f4) SHA1(3689b2c1f6227224fbcecc0d2470048a99510794) ) | |
| 1519 | ROM_LOAD16_BYTE( "763e19h", 0x260001, 0x010000, CRC(cd6d08a5) SHA1(ce13a8bba84f24e7d1fb25254e2e95f591fe1d67) ) | |
| 1520 | ROM_LOAD16_BYTE( "763e22a", 0x280000, 0x010000, CRC(16eec250) SHA1(f50375f207575e9d280285aca493902afbb7d729) ) | |
| 1521 | ROM_LOAD16_BYTE( "763e22e", 0x280001, 0x010000, CRC(c184b1c0) SHA1(d765e6eb2631b77dff5331840ac2a99cf1250362) ) | |
| 1522 | ROM_LOAD16_BYTE( "763e22b", 0x2a0000, 0x010000, CRC(1afe4b0c) SHA1(ce5a855291b443c1e16dbf54730960600c754fee) ) | |
| 1523 | ROM_LOAD16_BYTE( "763e22f", 0x2a0001, 0x010000, CRC(61f27c98) SHA1(d80af1a3e424c8dbab4fd21d494a0580ab96cd8d) ) | |
| 1524 | ROM_LOAD16_BYTE( "763e22c", 0x2c0000, 0x010000, CRC(c19b4b63) SHA1(93708b8769c44d5b93dcd2928a0d1120cc52c6ee) ) | |
| 1525 | ROM_LOAD16_BYTE( "763e22g", 0x2c0001, 0x010000, CRC(5bcbaf29) SHA1(621aa19606a15abb1539c07a033b32fc374a2d6a) ) | |
| 1526 | ROM_LOAD16_BYTE( "763e22d", 0x2e0000, 0x010000, CRC(fd5b669d) SHA1(fd5d82886708187e53c204c574ee252fc8a793af) ) | |
| 1527 | ROM_LOAD16_BYTE( "763e22h", 0x2e0001, 0x010000, CRC(9a9f45d8) SHA1(24fa9425b00441fff124eae7b40df7e65c920323) ) | |
| 1528 | ||
| 1529 | ROM_REGION( 0x20000, "k051316_1", 0 ) /* bg */ | |
| 1530 | ROM_LOAD( "763a14", 0x000000, 0x020000, CRC(60392aa1) SHA1(8499eb40a246587e24f6fd00af2eaa6d75ee6363) ) | |
| 1531 | ||
| 1532 | ROM_REGION( 0x08000, "k051316_2", 0 ) /* fg */ | |
| 1533 | /* first half empty - PCB silkscreen reads "27256/27512" */ | |
| 1534 | ROM_LOAD( "763a13", 0x000000, 0x008000, CRC(8bed8e0d) SHA1(ccff330abc23fe499e76c16cab5783c3daf155dd) ) | |
| 1535 | ROM_CONTINUE( 0x000000, 0x008000 ) | |
| 1536 | ||
| 1537 | ROM_REGION( 0x20000, "gfx4", 0 ) /* road */ | |
| 1538 | ROM_LOAD( "763a15", 0x000000, 0x020000, CRC(7110aa43) SHA1(639dc002cc1580f0530bb5bb17f574e2258d5954) ) | |
| 1539 | ||
| 1540 | ROM_REGION( 0x40000, "k007232_1", 0 ) /* Samples, 2 banks */ | |
| 1541 | ROM_LOAD( "763e11a", 0x000000, 0x010000, CRC(a60a93c8) SHA1(ce319f2b30c82f66fee0bab65d091ef4bef58a89) ) | |
| 1542 | ROM_LOAD( "763e11b", 0x010000, 0x010000, CRC(7750feb5) SHA1(e0900b8af400a50a22907ffa514847003cef342d) ) | |
| 1543 | ROM_LOAD( "763e11c", 0x020000, 0x010000, CRC(78b89bf8) SHA1(b74427e363a486d4be003df39f4ca8d10b9d5fc9) ) | |
| 1544 | ROM_LOAD( "763e11d", 0x030000, 0x010000, CRC(5f38d054) SHA1(ce0c87a7b7c0806e09cce5d48a651f12f790dd27) ) | |
| 1545 | ||
| 1546 | ROM_REGION( 0x40000, "k007232_2", 0 ) /* Samples, 2 banks */ | |
| 1547 | ROM_LOAD( "763e10a", 0x000000, 0x010000, CRC(2b1cbefc) SHA1(f23fb943c277a05f2aa4d25de692d1fb3bb752ac) ) | |
| 1548 | ROM_LOAD( "763e10b", 0x010000, 0x010000, CRC(8209c950) SHA1(944c2afb4cfc67bd243de499f5ca6a7982980f45) ) | |
| 1549 | ROM_LOAD( "763e10c", 0x020000, 0x010000, CRC(b91d6c07) SHA1(ef90457cb495750c5793cd1716d0dc44d33d0a95) ) | |
| 1550 | ROM_LOAD( "763e10d", 0x030000, 0x010000, CRC(5b465d20) SHA1(66f10b58873e738f5539b960468c7f92d07c28bc) ) | |
| 1551 | ||
| 1552 | ROM_REGION( 0x100000, "k007232_3", 0 ) /* Samples, 4 banks for each ROM */ | |
| 1553 | ROM_LOAD( "763e08a", 0x000000, 0x020000, CRC(02e4e7ef) SHA1(1622e4d85a333acae6e5f9304a037389bfeb71dc) ) | |
| 1554 | ROM_LOAD( "763e08b", 0x020000, 0x020000, CRC(94edde2f) SHA1(b124f83f271dab710d5ecb67a70cac7b4b41931c) ) | |
| 1555 | ROM_LOAD( "763e08c", 0x040000, 0x020000, CRC(b1ab1529) SHA1(962ad45fdccf6431e05eaec65d1b2f7842bddc02) ) | |
| 1556 | ROM_LOAD( "763e08d", 0x060000, 0x020000, CRC(ee8d14db) SHA1(098ba4f27b8cbb0ce017b28e5b69d6a3d2efa1df) ) | |
| 1557 | ||
| 1558 | ROM_LOAD( "763e09a", 0x080000, 0x020000, CRC(1e6628ec) SHA1(9d24da1d32cb39dcbe3d0633045054d398ca8eb8) ) | |
| 1559 | ROM_LOAD( "763e09b", 0x0a0000, 0x020000, CRC(f0c2feb8) SHA1(9454d45a97dc2e823baf68dce85acce8e82a18f2) ) | |
| 1560 | ROM_LOAD( "763e09c", 0x0c0000, 0x020000, CRC(a0ade3e4) SHA1(1c94cede76f9350769a589625fadaee855c38866) ) | |
| 1561 | ROM_LOAD( "763e09d", 0x0e0000, 0x020000, CRC(c74e484d) SHA1(dd7ef64c30443847c638291f6cd2b45a5f0b2310) ) | |
| 1562 | ||
| 1563 | ROM_REGION( 0x08000, "user1", 0 ) /* extra data for road effects? */ | |
| 1564 | ROM_LOAD( "763a12", 0x000000, 0x008000, CRC(05f1e553) SHA1(8aaeb7374bd93038c24e6470398936f22cabb0fe) ) | |
| 1565 | ||
| 1566 | ROM_REGION( 0x200, "user2", 0 ) | |
| 1567 | ROM_LOAD( "763a23.b17", 0x00000, 0x200, CRC(81c30352) SHA1(20700aed065929835ef5c3b564a6f531f0a8fedf) ) | |
| 1568 | ROM_END | |
| 1569 | ||
| 1570 | ||
| 1408 | 1571 | /* Important: you must leave extra space when listing sprite ROMs |
| 1409 | 1572 | in a ROM module definition. This routine unpacks each sprite nibble |
| 1410 | 1573 | into a byte, doubling the memory consumption. */ |
| r248380 | r248381 | |
| 1474 | 1637 | |
| 1475 | 1638 | GAMEL( 1986, wecleman, 0, wecleman, wecleman, wecleman_state, wecleman, ROT0, "Konami", "WEC Le Mans 24 (set 1)", 0, layout_wecleman ) |
| 1476 | 1639 | GAMEL( 1986, wecleman2, wecleman, wecleman, wecleman, wecleman_state, wecleman, ROT0, "Konami", "WEC Le Mans 24 (set 2)", 0, layout_wecleman ) // 1988 release |
| 1477 | GAMEL( 1988, hotchase, 0, hotchase, hotchase, wecleman_state, hotchase, ROT0, "Konami", "Hot Chase", 0, layout_wecleman ) | |
| 1640 | ||
| 1641 | GAMEL( 1988, hotchase, 0, hotchase, hotchase, wecleman_state, hotchase, ROT0, "Konami", "Hot Chase (set 1)", 0, layout_wecleman ) | |
| 1642 | GAMEL( 1988, hotchasea, hotchase, hotchase, hotchase, wecleman_state, hotchase, ROT0, "Konami", "Hot Chase (set 2)", 0, layout_wecleman ) |
| r248380 | r248381 | |
|---|---|---|
| 3 | 3 | #include "machine/i8255.h" |
| 4 | 4 | #include "includes/galaxold.h" |
| 5 | 5 | #include "sound/tms5110.h" |
| 6 | #include "sound/digitalk.h" | |
| 6 | 7 | |
| 7 | 8 | class scramble_state : public galaxold_state |
| 8 | 9 | { |
| r248380 | r248381 | |
| 13 | 14 | m_ppi8255_0(*this, "ppi8255_0"), |
| 14 | 15 | m_ppi8255_1(*this, "ppi8255_1"), |
| 15 | 16 | m_tmsprom(*this, "tmsprom"), |
| 16 | m_soundram(*this, "soundram") | |
| 17 | m_soundram(*this, "soundram"), | |
| 18 | m_digitalker(*this, "digitalker") | |
| 17 | 19 | { |
| 18 | 20 | } |
| 19 | 21 | |
| r248380 | r248381 | |
| 22 | 24 | optional_device<i8255_device> m_ppi8255_1; |
| 23 | 25 | optional_device<tmsprom_device> m_tmsprom; |
| 24 | 26 | optional_shared_ptr<UINT8> m_soundram; |
| 27 | optional_device<digitalker_device> m_digitalker; | |
| 25 | 28 | |
| 26 | 29 | UINT8 m_cavelon_bank; |
| 27 | 30 | |
| r248380 | r248381 | |
| 50 | 53 | DECLARE_WRITE8_MEMBER(mars_ppi8255_1_w); |
| 51 | 54 | DECLARE_WRITE8_MEMBER(ad2083_tms5110_ctrl_w); |
| 52 | 55 | |
| 53 | DECLARE_WRITE8_MEMBER(harem_portA_w); | |
| 54 | DECLARE_WRITE8_MEMBER(harem_portB_w); | |
| 55 | ||
| 56 | // harem | |
| 56 | 57 | DECLARE_WRITE8_MEMBER(harem_decrypt_bit_w); |
| 57 | 58 | DECLARE_WRITE8_MEMBER(harem_decrypt_clk_w); |
| 58 | 59 | DECLARE_WRITE8_MEMBER(harem_decrypt_rst_w); |
| 60 | DECLARE_READ8_MEMBER(harem_digitalker_intr_r); | |
| 61 | DECLARE_WRITE8_MEMBER(harem_digitalker_control_w); | |
| 59 | 62 | |
| 60 | 63 | DECLARE_DRIVER_INIT(cavelon); |
| 61 | 64 | DECLARE_DRIVER_INIT(mariner); |
| r248380 | r248381 | |
|---|---|---|
| 115 | 115 | DECLARE_DRIVER_INIT(seganinj); |
| 116 | 116 | DECLARE_DRIVER_INIT(gardia); |
| 117 | 117 | DECLARE_DRIVER_INIT(spatter); |
| 118 | DECLARE_DRIVER_INIT(spattera); | |
| 118 | 119 | TILE_GET_INFO_MEMBER(tile_get_info); |
| 119 | 120 | virtual void machine_start(); |
| 120 | 121 | virtual void machine_reset(); |
| r248380 | r248381 | |
|---|---|---|
| 125 | 125 | optional_shared_ptr<UINT16> m_decrypted_opcodes; |
| 126 | 126 | |
| 127 | 127 | DECLARE_WRITE16_MEMBER(sound_command_nmi_w); |
| 128 | DECLARE_WRITE16_MEMBER(sound_command_w); | |
| 128 | DECLARE_WRITE16_MEMBER(sound_command_irq_w); | |
| 129 | 129 | DECLARE_WRITE16_MEMBER(sys16_coinctrl_w); |
| 130 | 130 | DECLARE_READ16_MEMBER(passht4b_service_r); |
| 131 | 131 | DECLARE_READ16_MEMBER(passht4b_io1_r); |
| r248380 | r248381 | |
| 159 | 159 | DECLARE_WRITE16_MEMBER(sys18_tilebank_w); |
| 160 | 160 | DECLARE_READ8_MEMBER(system18_bank_r); |
| 161 | 161 | DECLARE_WRITE8_MEMBER(sys18_soundbank_w); |
| 162 | DECLARE_WRITE16_MEMBER(sound_command_irq_w); | |
| 163 | 162 | DECLARE_WRITE8_MEMBER(shdancbl_msm5205_data_w); |
| 164 | 163 | DECLARE_READ8_MEMBER(shdancbl_soundbank_r); |
| 165 | 164 | DECLARE_WRITE8_MEMBER(shdancbl_bankctrl_w); |
| r248380 | r248381 | |
|---|---|---|
| 675 | 675 | |
| 676 | 676 | membank("rombank")->set_base (m_harem_decrypted_data); |
| 677 | 677 | membank("rombank_decrypted")->set_base (m_harem_decrypted_opcodes); |
| 678 | ||
| 679 | save_item(NAME(m_harem_decrypt_mode)); | |
| 680 | save_item(NAME(m_harem_decrypt_bit)); | |
| 681 | save_item(NAME(m_harem_decrypt_clk)); | |
| 682 | save_item(NAME(m_harem_decrypt_count)); | |
| 678 | 683 | } |
| r248380 | r248381 | |
|---|---|---|
| 40 | 40 | MP3403 TMS1100 1978, Marx Electronic Bowling -> elecbowl.c |
| 41 | 41 | @MP3404 TMS1100 1978, Parker Brothers Merlin |
| 42 | 42 | @MP3405 TMS1100 1979, Coleco Amaze-A-Tron |
| 43 | *MP3415 TMS1100 1978, Coleco Electronic Quarterback | |
| 43 | 44 | @MP3438A TMS1100 1979, Kenner Star Wars Electronic Battle Command |
| 44 | 45 | MP3450A TMS1100 1979, MicroVision cartridge: Blockbuster |
| 45 | 46 | MP3454 TMS1100 1979, MicroVision cartridge: Star Trek Phaser Strike |
| r248380 | r248381 | |
|---|---|---|
| 195 | 195 | /* 512-byte Signetics 2513 character generator ROM at location D2-D3 */ |
| 196 | 196 | ROM_REGION(0x0200, "gfx1",0) |
| 197 | 197 | ROM_LOAD("s2513.d2", 0x0000, 0x0200, CRC(a7e567fc) SHA1(b18aae0a2d4f92f5a7e22640719bbc4652f3f4ee)) |
| 198 | ||
| 199 | /* 256x4 PROM located on the video board, schematic location P7, to be moved into separate device later */ | |
| 200 | ROM_REGION( 0x0120, "proms", 0 ) | |
| 201 | ROM_LOAD( "6300__d7.p7", 0x0020, 0x0100, CRC(3eb3a8e4) SHA1(19097b5f60d1030f8b82d9f1d3a241f93e5c75d6) ) | |
| 198 | 202 | ROM_END |
| 199 | 203 | |
| 200 | 204 | /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ |
| r248380 | r248381 | |
|---|---|---|
| 35 | 35 | |
| 36 | 36 | DECLARE_WRITE8_MEMBER(ram_w); |
| 37 | 37 | DECLARE_READ8_MEMBER(ram_r); |
| 38 | DECLARE_WRITE8_MEMBER(strobe_w); | |
| 38 | 39 | void refresh_ram(); |
| 39 | 40 | |
| 40 | DECLARE_WRITE8_MEMBER(led_w); | |
| 41 | 41 | DECLARE_WRITE8_MEMBER(switch_w); |
| 42 | DECLARE_WRITE8_MEMBER(strobe_w); | |
| 43 | 42 | DECLARE_READ8_MEMBER(input_r); |
| 43 | void update_leds(); | |
| 44 | 44 | |
| 45 | 45 | TIMER_DEVICE_CALLBACK_MEMBER(t3_clock); |
| 46 | 46 | TIMER_DEVICE_CALLBACK_MEMBER(t3_off); |
| r248380 | r248381 | |
| 81 | 81 | |
| 82 | 82 | ***************************************************************************/ |
| 83 | 83 | |
| 84 | // external ram | |
| 85 | ||
| 84 | 86 | void tb303_state::refresh_ram() |
| 85 | 87 | { |
| 86 | 88 | // MCU E2,E3 goes through a 4556 IC(pin 14,13) to one of uPD444 _CE: |
| r248380 | r248381 | |
| 103 | 105 | else |
| 104 | 106 | m_ram[m_ram_address] = m_port[NEC_UCOM4_PORTC]; |
| 105 | 107 | } |
| 106 | ||
| 107 | // to switchboard pin 19-22 | |
| 108 | //.. | |
| 109 | 108 | } |
| 110 | 109 | |
| 111 | 110 | WRITE8_MEMBER(tb303_state::ram_w) |
| r248380 | r248381 | |
| 128 | 127 | return 0; |
| 129 | 128 | } |
| 130 | 129 | |
| 131 | WRITE8_MEMBER(tb303_state::led_w) | |
| 132 | { | |
| 133 | // MCU G: leds state | |
| 134 | display_matrix(4, 4, data, m_inp_mux); | |
| 135 | } | |
| 136 | ||
| 137 | WRITE8_MEMBER(tb303_state::switch_w) | |
| 138 | { | |
| 139 | // MCU H: input/led mux | |
| 140 | m_inp_mux = data; | |
| 141 | } | |
| 142 | ||
| 143 | 130 | WRITE8_MEMBER(tb303_state::strobe_w) |
| 144 | 131 | { |
| 145 | 132 | // MCU I0: RAM _WE |
| r248380 | r248381 | |
| 148 | 135 | |
| 149 | 136 | // MCU I1: pitch data latch strobe |
| 150 | 137 | // MCU I2: gate signal |
| 138 | ||
| 139 | m_port[offset] = data; | |
| 151 | 140 | } |
| 152 | 141 | |
| 142 | ||
| 143 | // switch board | |
| 144 | ||
| 145 | void tb303_state::update_leds() | |
| 146 | { | |
| 147 | // 4*4 LED matrix from port G/H: | |
| 148 | /* | |
| 149 | 0.0 D204 1.0 D211 2.0 D217 3.0 D205 | |
| 150 | 0.1 D206 1.1 D213 2.1 D218 3.1 D207 | |
| 151 | 0.2 D208 1.2 D215 2.2 D220 3.2 D210 | |
| 152 | 0.3 D209 1.3 D216 2.3 D221 3.3 D212 | |
| 153 | */ | |
| 154 | display_matrix(4, 4, m_port[NEC_UCOM4_PORTG], m_port[NEC_UCOM4_PORTH]); | |
| 155 | ||
| 156 | // todo: battery led | |
| 157 | // todo: 4 more leds(see top-left part) | |
| 158 | } | |
| 159 | ||
| 160 | WRITE8_MEMBER(tb303_state::switch_w) | |
| 161 | { | |
| 162 | // MCU G: leds state | |
| 163 | // MCU H: input/led mux | |
| 164 | if (offset == NEC_UCOM4_PORTH) | |
| 165 | m_inp_mux = data; | |
| 166 | ||
| 167 | m_port[offset] = data; | |
| 168 | update_leds(); | |
| 169 | } | |
| 170 | ||
| 153 | 171 | READ8_MEMBER(tb303_state::input_r) |
| 154 | 172 | { |
| 155 | 173 | // MCU A,B: multiplexed inputs |
| r248380 | r248381 | |
| 259 | 277 | MCFG_UCOM4_WRITE_D_CB(WRITE8(tb303_state, ram_w)) |
| 260 | 278 | MCFG_UCOM4_WRITE_E_CB(WRITE8(tb303_state, ram_w)) |
| 261 | 279 | MCFG_UCOM4_WRITE_F_CB(WRITE8(tb303_state, ram_w)) |
| 262 | MCFG_UCOM4_WRITE_G_CB(WRITE8(tb303_state, | |
| 280 | MCFG_UCOM4_WRITE_G_CB(WRITE8(tb303_state, switch_w)) | |
| 263 | 281 | MCFG_UCOM4_WRITE_H_CB(WRITE8(tb303_state, switch_w)) |
| 264 | 282 | MCFG_UCOM4_WRITE_I_CB(WRITE8(tb303_state, strobe_w)) |
| 265 | 283 |
| r248380 | r248381 | |
|---|---|---|
| 37 | 37 | |
| 38 | 38 | Tony DiCenzo, now the director of standards and architecture at Oracle, was on the team that developed the VK100 |
| 39 | 39 | see http://startup.nmnaturalhistory.org/visitorstories/view.php?ii=79 |
| 40 | Robert "Bob" C. Quinn was definitely lead engineer on the VT125 and may have been lead engineer on the VK100 as well | |
| 40 | Robert "Bob" C. Quinn was definitely lead engineer on the VT125 | |
| 41 | Robert "Bob" T. Collins was the lead engineer on the VK100 | |
| 42 | Pedro Ortiz (https://www.linkedin.com/pub/pedro-ortiz/16/68b/196) did the drafting for the enclosure and case | |
| 41 | 43 | |
| 42 | 44 | The prototype name for the VK100 was 'SMAKY' (Smart Keyboard) |
| 43 | 45 | |
| r248380 | r248381 | |
| 220 | 222 | UINT8 m_VG_MODE; // 2 bits, latched on EXEC |
| 221 | 223 | UINT8 m_vgGO; // activated on next SYNC pulse after EXEC |
| 222 | 224 | UINT8 m_ACTS; |
| 225 | UINT8 m_ADSR; | |
| 223 | 226 | ioport_port* m_col_array[16]; |
| 224 | 227 | |
| 225 | 228 | DECLARE_WRITE8_MEMBER(vgLD_X); |
| r248380 | r248381 | |
| 244 | 247 | DECLARE_WRITE_LINE_MEMBER(i8251_txrdy_int); |
| 245 | 248 | DECLARE_WRITE_LINE_MEMBER(i8251_rts); |
| 246 | 249 | UINT8 vram_read(); |
| 250 | UINT8 vram_attr_read(); | |
| 247 | 251 | MC6845_UPDATE_ROW(crtc_update_row); |
| 248 | 252 | void vram_write(UINT8 data); |
| 249 | 253 | |
| r248380 | r248381 | |
| 286 | 290 | return (block>>(4*nybbleNum))&0xF; |
| 287 | 291 | } |
| 288 | 292 | |
| 293 | // returns the attribute nybble for the current pixel based on X and Y regs | |
| 294 | UINT8 vk100_state::vram_attr_read() | |
| 295 | { | |
| 296 | // XFinal is (X'&0x3FC)|(X&0x3) | |
| 297 | UINT16 XFinal = m_trans[(m_vgX&0x3FC)>>2]<<2|(m_vgX&0x3); // appears correct | |
| 298 | // EA is the effective ram address for a 16-bit block | |
| 299 | UINT16 EA = ((m_vgY&0x1FE)<<5)|(XFinal>>4); // appears correct | |
| 300 | // block is the 16 bit block directly (note EA has to be <<1 to correctly index a byte) | |
| 301 | UINT16 block = m_vram[(EA<<1)+1] | (m_vram[(EA<<1)]<<8); | |
| 302 | // nybbleNum is the attribute nybble, which in this case is always 3 | |
| 303 | UINT8 nybbleNum = 3; | |
| 304 | return (block>>(4*nybbleNum))&0xF; | |
| 305 | } | |
| 306 | ||
| 307 | // writes one nybble to vram array based on X and Y regs, and updates the attrib ram if needed | |
| 289 | 308 | void vk100_state::vram_write(UINT8 data) |
| 290 | 309 | { |
| 291 | 310 | // XFinal is (X'&0x3FC)|(X&0x3) |
| r248380 | r248381 | |
| 430 | 449 | } |
| 431 | 450 | |
| 432 | 451 | /* port 0x45: "SOPS" screen options |
| 433 | * Blink --Background color-- Blink Serial Select Reverse | |
| 434 | * Enable Green Red Blue Control BG/FG | |
| 435 | * d7 d6 d5 d4 d3 d2 d1 d0 | |
| 436 | * apparently, 00 = rs232/eia, 01 = 20ma, 10 = hardcopy, 11 = test/loopback | |
| 452 | * (handled by 74LS273 @ E55, schematic sheet 10, all signals called 'VVG1 BDx' where x is 7 to 0) | |
| 453 | * Blink --Background color-- Blink Serial Serial Reverse | |
| 454 | * Enable Green Red Blue Control SL1 SL0 BG/FG | |
| 455 | * d7 d6 d5 d4 d3 d2 d1 d0 | |
| 456 | * apparently, SLx: 00 = rs232/eia(J6), 01 = 20ma(J1), 10 = hardcopy(J7), 11 = test/loopback | |
| 457 | * Serial Select (SLx) routing controls are rather complex, shown on schematic | |
| 458 | * page 9: | |
| 459 | * VDC2 | I8251 pins | SYSTAT_B bits | |
| 460 | * SL1 SL0 | 8251RXD 8251RTS 8251TXD 8251/DTR 8251/DSR 8251CTS | SYSTATB_ACTS SYSTATB_ADSR | |
| 461 | * 0 0 J6 /RXD J6 /RTS J6 TXD J6 /DTR J7 URTS GND J6 /CTS J6 /DSR | |
| 462 | * 0 1 J1 +-R ACTS(loop) J1 +-T J6 /DTR J7 URTS GND 8251RTS(loop) J6 /DSR | |
| 463 | * 1 0 J7 DRXD J7 DRTS* J7 DTXD J6 /DTR J7 URTS GND J7 /DCTS J6 /DSR | |
| 464 | * 1 1 8251TXD ACTS(loop) 8251RXD J6 /DTR J7 URTS GND 8251RTS(loop) J6 /DSR | |
| 465 | * * and UCTS, the pin drives both pins on J7 | |
| 437 | 466 | */ |
| 438 | 467 | WRITE8_MEMBER(vk100_state::vgSOPS) |
| 439 | 468 | { |
| r248380 | r248381 | |
| 586 | 615 | } |
| 587 | 616 | |
| 588 | 617 | /* port 0x40-0x47: "SYSTAT A"; various status bits, poorly documented in the tech manual |
| 589 | * /GO BIT3 BIT2 BIT1 BIT0 Dip RST7.5 GND | |
| 590 | * Switch VSYNC | |
| 618 | * /GO VDM1 VDM1 VDM1 VDM1 Dip RST7.5 GND*** | |
| 619 | * BIT3 BIT2 BIT1 BIT0 Switch VSYNC | |
| 591 | 620 | * d7 d6 d5 d4 d3 d2 d1 d0 |
| 592 | 621 | bit3, 2, 1, 0 are the 4 bits output from the VRAM 12->4 multiplexer |
| 593 | 622 | which are also inputs to the pattern rom; they are constantly updated |
| r248380 | r248381 | |
| 597 | 626 | d6,5,4,3 are from the 74ls298 at ic4 (right edge of pcb) |
| 598 | 627 | d2 is where the dipswitch values are read from, based on the offset |
| 599 | 628 | d1 is connected to 8085 rst7.5 (pin 7) and crtc pin 40 (VSYNC) [verified via tracing] |
| 600 | d0 is tied to GND [verified via tracing] | |
| 629 | d0 is tied to GND [verified via tracing] but the schematics both tie it to GND | |
| 630 | and call it LP FLAG, may be a leftover from development. | |
| 601 | 631 | |
| 602 | 632 | 31D reads and checks d7 in a loop |
| 603 | 633 | 205 reads, xors with 0x55 (from reg D), ANDS result with 0x78 and branches if it is not zero (checking for bit pattern 1010?) |
| r248380 | r248381 | |
| 623 | 653 | * after this it does something and waits for an rxrdy interrupt |
| 624 | 654 | |
| 625 | 655 | shows the results of: |
| 626 | * ACTS (/CTS) ? ? ? ? ? ? ? | |
| 627 | * d7 d6 d5 d4 d3 d2 d1 d0 | |
| 656 | * ACTS (/CTS) ADSR (/DSR) GND GND ATTR3 ATTR2 ATTR1 ATTR0 | |
| 657 | * d7 d6 d5 d4 d3 d2 d1 d0 | |
| 628 | 658 | * the ACTS (inverse of DCTS) signal lives in one of these bits (see 5-62) |
| 629 | 659 | * it XORs the read of systat_b with the E register (which holds 0x6) |
| 630 | 660 | * and checks the result |
| 661 | * The 4 attribute ram bits for the cell being pointed at by the X and Y regs are readable as the low nybble. | |
| 662 | * The DSR pin is readable as bit 6. | |
| 631 | 663 | */ |
| 632 | 664 | READ8_MEMBER(vk100_state::SYSTAT_B) |
| 633 | 665 | { |
| 634 | 666 | #ifdef SYSTAT_B_VERBOSE |
| 635 | 667 | logerror("0x%04X: SYSTAT_B Read!\n", m_maincpu->pc()); |
| 636 | 668 | #endif |
| 637 | return (m_ACTS<<7)| | |
| 669 | return (m_ACTS<<7)|(m_ADSR<<6)|vram_attr_read(); | |
| 638 | 670 | } |
| 639 | 671 | |
| 640 | 672 | READ8_MEMBER(vk100_state::vk100_keyboard_column_r) |
| r248380 | r248381 | |
| 913 | 945 | m_VG_MODE = 0; |
| 914 | 946 | m_vgGO = 0; |
| 915 | 947 | m_ACTS = 1; |
| 948 | m_ADSR = 1; | |
| 916 | 949 | char kbdcol[8]; |
| 917 | 950 | // look up all 16 tags 'the slow way' but only once on reset |
| 918 | 951 | for (int i = 0; i < 16; i++) |
| r248380 | r248381 | |
| 1132 | 1165 | * |\-------- Y11 (D out of ls191 left of hd46505) [verified via tracing] |
| 1133 | 1166 | * \--------- ERASE L/d5 on the vector rom [verified via tracing] |
| 1134 | 1167 | * data bits: 3210 |
| 1135 | * |||\-- ? wr_1? | |
| 1136 | * ||\--- ? wr_2? | |
| 1137 | * |\---- ? wr_3? | |
| 1138 | * \----- ? wr_4? | |
| 1168 | * |||\-- /WE for VRAM Attribute bits | |
| 1169 | * ||\--- /WE for VRAM bits 0-3 (leftmost bits, first to be shifted out) | |
| 1170 | * |\---- /WE for VRAM bits 4-7 | |
| 1171 | * \----- /WE for VRAM bits 8-11 (rightmost bits, last to be shifted out) | |
| 1139 | 1172 | * The VT125 prom E93 is mostly equivalent to the ras/erase prom; On the vt125 version, the inputs are: |
| 1140 | 1173 | * (X'10 NOR X'11) |
| 1141 | 1174 | * (Y9 NOR Y10) |
| r248380 | r248381 | |
|---|---|---|
| 4 | 4 | <!-- define elements --> |
| 5 | 5 | |
| 6 | 6 | <element name="led" defstate="0"> |
| 7 | <disk state="0"><color red="0.15" green="0.03" blue="0.03" /></disk> | |
| 8 | <disk state="1"><color red="1.0" green="0.3" blue="0.3" /></disk> | |
| 7 | <disk state="0"><color red="0.2" green="0.04" blue="0.046" /></disk> | |
| 8 | <disk state="1"><color red="1.0" green="0.2" blue="0.23" /></disk> | |
| 9 | 9 | </element> |
| 10 | 10 | |
| 11 | 11 | |
| 12 | ||
| 13 | 12 | <!-- build screen --> |
| 14 | 13 | |
| 15 | 14 | <view name="Internal Layout"> |
| 16 | 15 | <bounds left="0" right="100" top="0" bottom="100" /> |
| 17 | 16 | |
| 17 | <!-- 21 LEDs: D201-D221 --> | |
| 18 | ||
| 19 | <bezel name="x.0" element="led"><bounds x="1" y="10" width="1" height="1" /></bezel> <!-- d201 --> | |
| 18 | 20 | |
| 21 | <bezel name="x.0" element="led"><bounds x="10" y="2" width="1" height="1" /></bezel> <!-- d202 --> | |
| 22 | <bezel name="x.0" element="led"><bounds x="14" y="10" width="1" height="1" /></bezel> <!-- d203 --> | |
| 23 | ||
| 24 | <bezel name="0.0" element="led"><bounds x="20" y="10" width="1" height="1" /></bezel> | |
| 25 | <bezel name="3.0" element="led"><bounds x="23" y="2" width="1" height="1" /></bezel> | |
| 26 | <bezel name="0.1" element="led"><bounds x="26" y="10" width="1" height="1" /></bezel> | |
| 27 | <bezel name="3.1" element="led"><bounds x="29" y="2" width="1" height="1" /></bezel> | |
| 28 | <bezel name="0.2" element="led"><bounds x="32" y="10" width="1" height="1" /></bezel> | |
| 29 | <bezel name="0.3" element="led"><bounds x="38" y="10" width="1" height="1" /></bezel> | |
| 30 | <bezel name="3.2" element="led"><bounds x="41" y="2" width="1" height="1" /></bezel> | |
| 31 | <bezel name="1.0" element="led"><bounds x="44" y="10" width="1" height="1" /></bezel> | |
| 32 | <bezel name="3.3" element="led"><bounds x="47" y="2" width="1" height="1" /></bezel> | |
| 33 | <bezel name="1.1" element="led"><bounds x="50" y="10" width="1" height="1" /></bezel> | |
| 34 | <bezel name="x.0" element="led"><bounds x="53" y="2" width="1" height="1" /></bezel> <!-- d214 --> | |
| 35 | <bezel name="1.2" element="led"><bounds x="56" y="10" width="1" height="1" /></bezel> | |
| 36 | <bezel name="1.3" element="led"><bounds x="62" y="10" width="1" height="1" /></bezel> | |
| 37 | ||
| 38 | <bezel name="2.0" element="led"><bounds x="68" y="10" width="1" height="1" /></bezel> | |
| 39 | <bezel name="2.1" element="led"><bounds x="74" y="10" width="1" height="1" /></bezel> | |
| 40 | <bezel name="x.0" element="led"><bounds x="77" y="2" width="1" height="1" /></bezel> <!-- d219 --> | |
| 41 | <bezel name="2.2" element="led"><bounds x="80" y="10" width="1" height="1" /></bezel> | |
| 42 | <bezel name="2.3" element="led"><bounds x="86" y="10" width="1" height="1" /></bezel> | |
| 43 | ||
| 19 | 44 | </view> |
| 20 | 45 | </mamelayout> |
| r248380 | r248381 | |
|---|---|---|
| 105 | 105 | opt_type("y", "type", "spice", "spice:eagle", "type of file to be converted: spice,eagle", this), |
| 106 | 106 | opt_cmd ("c", "cmd", "run", "run|convert|listdevices", this), |
| 107 | 107 | opt_verb("v", "verbose", "be verbose - this produces lots of output", this), |
| 108 | opt_quiet("q", "quiet", "be quiet - no warnings", this), | |
| 108 | 109 | opt_help("h", "help", "display help", this) |
| 109 | 110 | {} |
| 110 | 111 | |
| r248380 | r248381 | |
| 115 | 116 | poption_str_limit opt_type; |
| 116 | 117 | poption_str opt_cmd; |
| 117 | 118 | poption_bool opt_verb; |
| 119 | poption_bool opt_quiet; | |
| 118 | 120 | poption_bool opt_help; |
| 119 | 121 | }; |
| 120 | 122 | |
| r248380 | r248381 | |
| 171 | 173 | public: |
| 172 | 174 | |
| 173 | 175 | netlist_tool_t() |
| 174 | : netlist::netlist_t(), m_ | |
| 176 | : netlist::netlist_t(), m_opts(NULL), m_setup(NULL) | |
| 175 | 177 | { |
| 176 | 178 | } |
| 177 | 179 | |
| r248380 | r248381 | |
| 206 | 208 | void log_setup() |
| 207 | 209 | { |
| 208 | 210 | NL_VERBOSE_OUT(("Creating dynamic logs ...\n")); |
| 209 | pstring_list_t ll(m_logs, ":"); | |
| 211 | pstring_list_t ll(m_opts ? m_opts->opt_logs() : "" , ":"); | |
| 210 | 212 | for (int i=0; i < ll.size(); i++) |
| 211 | 213 | { |
| 212 | 214 | pstring name = "log_" + ll[i]; |
| r248380 | r248381 | |
| 215 | 217 | } |
| 216 | 218 | } |
| 217 | 219 | |
| 218 | p | |
| 220 | tool_options_t *m_opts; | |
| 219 | 221 | |
| 220 | bool m_verbose; | |
| 221 | ||
| 222 | 222 | protected: |
| 223 | 223 | |
| 224 | 224 | void verror(const loglevel_e level, const char *format, va_list ap) const |
| r248380 | r248381 | |
| 226 | 226 | switch (level) |
| 227 | 227 | { |
| 228 | 228 | case NL_LOG: |
| 229 | if (m_verb | |
| 229 | if (m_opts ? m_opts->opt_verb() : false) | |
| 230 | 230 | { |
| 231 | 231 | vprintf(format, ap); |
| 232 | 232 | printf("\n"); |
| 233 | 233 | } |
| 234 | 234 | break; |
| 235 | 235 | case NL_WARNING: |
| 236 | vprintf(format, ap); | |
| 237 | printf("\n"); | |
| 236 | if (!(m_opts ? m_opts->opt_quiet() : false)) | |
| 237 | { | |
| 238 | vprintf(format, ap); | |
| 239 | printf("\n"); | |
| 240 | } | |
| 238 | 241 | break; |
| 239 | 242 | case NL_ERROR: |
| 240 | 243 | vprintf(format, ap); |
| r248380 | r248381 | |
| 265 | 268 | netlist_tool_t nt; |
| 266 | 269 | osd_ticks_t t = osd_ticks(); |
| 267 | 270 | |
| 271 | nt.m_opts = &opts; | |
| 268 | 272 | nt.init(); |
| 269 | nt.m_logs = opts.opt_logs(); | |
| 270 | nt.m_verbose = opts.opt_verb(); | |
| 271 | 273 | nt.read_netlist(filetobuf(opts.opt_file()), opts.opt_name()); |
| 272 | 274 | double ttr = opts.opt_ttr(); |
| 273 | 275 | |
| r248380 | r248381 | |
| 290 | 292 | { |
| 291 | 293 | netlist_tool_t nt; |
| 292 | 294 | nt.init(); |
| 293 | const netlist::factory_list_t | |
| 295 | const netlist::factory_list_t &list = nt.setup().factory(); | |
| 294 | 296 | |
| 295 | 297 | nt.setup().register_source(palloc(netlist::source_proc_t("dummy", &netlist_dummy))); |
| 296 | 298 | nt.setup().include("dummy"); |
| r248380 | r248381 | |
| 300 | 302 | |
| 301 | 303 | for (int i=0; i < list.size(); i++) |
| 302 | 304 | { |
| 303 | pstring out = pstring::sprintf("%-20s %s(<id>", list[i]->classname().cstr(), | |
| 304 | list[i]->name().cstr() ); | |
| 305 | netlist::base_factory_t *f = list.value_at(i); | |
| 306 | pstring out = pstring::sprintf("%-20s %s(<id>", f->classname().cstr(), | |
| 307 | f->name().cstr() ); | |
| 305 | 308 | pstring terms(""); |
| 306 | 309 | |
| 307 | netlist::base_factory_t *f = list[i]; | |
| 308 | 310 | netlist::device_t *d = f->Create(); |
| 309 | 311 | d->init(nt, pstring::sprintf("dummy%d", i)); |
| 310 | 312 | d->start_dev(); |
| r248380 | r248381 | |
| 318 | 320 | terms += "," + inp; |
| 319 | 321 | } |
| 320 | 322 | |
| 321 | if ( | |
| 323 | if (f->param_desc().startsWith("+")) | |
| 322 | 324 | { |
| 323 | out += "," + | |
| 325 | out += "," + f->param_desc().substr(1); | |
| 324 | 326 | terms = ""; |
| 325 | 327 | } |
| 326 | else if ( | |
| 328 | else if (f->param_desc() == "-") | |
| 327 | 329 | { |
| 328 | 330 | /* no params at all */ |
| 329 | 331 | } |
| 330 | 332 | else |
| 331 | 333 | { |
| 332 | out += "," + | |
| 334 | out += "," + f->param_desc(); | |
| 333 | 335 | } |
| 334 | 336 | out += ")"; |
| 335 | 337 | printf("%s\n", out.cstr()); |
| https://github.com/mamedev/mame/commit/e147f99abe9806bfaf24db85838cc5ca99161b6a |
| Previous | 199869 Revisions | Next |