Previous 199869 Revisions Next

r44512 Wednesday 27th January, 2016 at 07:12:00 UTC by Miodrag Milanović
Cleanups and version bump
[hash]casloopy.xml database.xml dim68k.xml pc1000.xml tutor.xml
[src]version.cpp
[src/devices/bus/cbm2]hrg.cpp hrg.h
[src/devices/bus/pet]hsg.cpp hsg.h
[src/devices/cpu/hphybrid]hphybrid.cpp hphybrid.h
[src/devices/cpu/i86]i86.cpp
[src/devices/cpu/m68000]m68kops.cpp
[src/devices/cpu/tlcs900]tlcs900.cpp tlcs900.h
[src/devices/cpu/tms32051]32051ops.inc
[src/devices/machine]tms6100.cpp tms6100.h
[src/devices/sound]beep.cpp fm.cpp rf5c400.cpp s14001a.cpp s14001a.h scsp.cpp sn76477.cpp upd7759.h
[src/devices/video]pcd8544.cpp pcd8544.h voodoo.cpp voodoo_rast.inc
[src/emu]bookkeeping.cpp bookkeeping.h config.h diimage.cpp image.cpp image.h luaengine.cpp machine.h output.cpp uiinput.cpp uiinput.h
[src/emu/ui]ui.cpp
[src/lib/util]corealloc.h
[src/mame]arcade.lst mess.lst
[src/mame/audio]carnival.cpp dcs.h
[src/mame/drivers]20pacgal.cpp 40love.cpp 8080bw.cpp arkanoid.cpp atom.cpp barata.cpp bfm_sc1.cpp bfm_sc2.cpp bfmsys85.cpp casloopy.cpp cobra.cpp dccons.cpp didact.cpp dynax.cpp fastinvaders.cpp fidel6502.cpp fidelz80.cpp funworld.cpp gaelco2.cpp gkigt.cpp hp9845.cpp jpmimpct.cpp jpmmps.cpp jpmsys5.cpp kaneko16.cpp liberatr.cpp marywu.cpp megasys1.cpp metro.cpp mpu3.cpp mpu4hw.cpp naomi.cpp neogeo.cpp neogeo_noslot.cpp nokia_3310.cpp nova2001.cpp pacman.cpp proconn.cpp prophet600.cpp psychic5.cpp rsc55.cpp seattle.cpp sfkick.cpp snk.cpp spc1500.cpp taitopjc.cpp taitotz.cpp ticalc1x.cpp tourvis.cpp ts803.cpp wildpkr.cpp williams.cpp witch.cpp
[src/mame/includes]40love.h arkanoid.h cps3.h dkong.h fm7.h gaelco2.h harddriv.h jaguar.h
[src/mame/layout]fidel_vcc.lay marywu.lay
[src/mame/machine]arkanoid.cpp gaelco2.cpp meters.cpp meters.h xbox.cpp
[src/mame/video]40love.cpp battlex.cpp chihiro.cpp m107.cpp m58.cpp n64.cpp n64.h
[src/osd/modules/debugger]debugint.cpp
[src/osd/modules/render/d3d]d3dhlsl.cpp
[src/osd/modules/sound]xaudio2_sound.cpp
[src/osd/sdl]sdlfile.cpp
[src/osd/windows]output.cpp winmain.h

trunk/hash/casloopy.xml
r253023r253024
8989   <software name="loopytwn">
9090      <description>Loopy Town no Oheya ga Hoshii!</description>
9191      <year>1996</year>
92       <publisher>Casio</publisher>
93      <info name="serial" value="XK-504"/>
94    <info name="alt_name" value="ルーピータウンのおへやがほしい!"/>
92      <publisher>Casio</publisher>
93      <info name="serial" value="XK-504"/>
94   <info name="alt_name" value="ルーピータウンのおへやがほしい!"/>
9595      <part name="cart" interface="loopy_cart">
9696         <dataarea name="rom" size="0x300000">
9797            <rom name="CHIP1.IC104" size="0x200000" crc="bae71d45" sha1="79628715ccedd9bc3fd72d21fa9ea6513b88cf51" offset="0x000000" />
98             <rom name="CHIP2.IC105" size="0x100000" crc="e0514d03" sha1="4dd02faa1ebf6754da0ade417e488512f3502620" offset="0x200000" />
98            <rom name="CHIP2.IC105" size="0x100000" crc="e0514d03" sha1="4dd02faa1ebf6754da0ade417e488512f3502620" offset="0x200000" />
9999         </dataarea>
100100      </part>
101101   </software>
trunk/hash/database.xml
r253023r253024
261261            <rom name="leapfrog.bin" size="4096" crc="105eb530" sha1="7211b0b1c6e8798399f4f6d2a942db4e8379c691" offset="0" />
262262         </dataarea>
263263      </part>
264   </software>   
265   
264   </software>
265
266266</softwarelist>
trunk/hash/dim68k.xml
r253023r253024
171171      <description>Dimension 68000 Burnin Test</description>
172172      <year>1984</year>
173173      <publisher>Micro Craft Corporation</publisher>
174     
174
175175      <part name="flop1" interface="floppy_5_25">
176176         <feature name="part_id" value="Disk 1"/>
177177         <dataarea name="flop" size="181726">
r253023r253024
184184      <description>Fortran 68K</description>
185185      <year>1983</year>
186186      <publisher>Silicon Valley Software</publisher>
187     
187
188188      <part name="flop1" interface="floppy_5_25">
189189         <feature name="part_id" value="Disk 1"/>
190190         <dataarea name="flop" size="391735">
191191            <rom name="d68fort1.imd" size="391735" crc="db27dc48" sha1="b912b91ed49e828c91863d3f71d3a7d673ac08b1" offset="0"/>
192192         </dataarea>
193193      </part>
194     
194
195195      <part name="flop2" interface="floppy_5_25">
196196         <feature name="part_id" value="Disk 2"/>
197197         <dataarea name="flop" size="386625">
r253023r253024
199199         </dataarea>
200200      </part>
201201   </software>
202   
202
203203</softwarelist>
trunk/hash/pc1000.xml
r253023r253024
116116      </part>
117117   </software>
118118
119   <software name="cgen2">    <!-- cart for Ordisavant -->
119   <software name="cgen2">     <!-- cart for Ordisavant -->
120120      <description>Connaissances Generales II</description>
121121      <year>1988</year>
122122      <publisher>VTech</publisher>
r253023r253024
127127      </part>
128128   </software>
129129
130   <software name="encyclop">    <!-- cart for Ordisavant -->
130   <software name="encyclop"> <!-- cart for Ordisavant -->
131131      <description>Encyclopedie</description>
132132      <year>1988</year>
133133      <publisher>VTech</publisher>
trunk/hash/tutor.xml
r253023r253024
205205            <rom name="tron.bin" size="8192" crc="280f191d" sha1="0d8b5c43db89a438f6036794be7628793643818b" offset="0" />
206206         </dataarea>
207207      </part>
208   </software>   
209   
208   </software>
209
210210   <software name="jungler"> <!-- US and Japan confirmed to be the same -->
211211   <!-- Stock No: 8202, (Japanese 015E)-->
212212      <description>Jungler</description>
trunk/src/devices/bus/cbm2/hrg.cpp
r253023r253024
9090   MCFG_SCREEN_SIZE(512, 512)
9191   MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 512-1)
9292   MCFG_SCREEN_REFRESH_RATE(25)
93    MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
93   MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
9494
9595   MCFG_DEVICE_ADD(EF9365_TAG, EF9365, 1750000)
9696   MCFG_VIDEO_SET_SCREEN(SCREEN_TAG)
r253023r253024
111111   MCFG_SCREEN_SIZE(512, 256)
112112   MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1)
113113   MCFG_SCREEN_REFRESH_RATE(50)
114    MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
114   MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
115115
116116   MCFG_DEVICE_ADD(EF9366_TAG, EF9365, 1750000)
117117   MCFG_VIDEO_SET_SCREEN(SCREEN_TAG)
trunk/src/devices/bus/cbm2/hrg.h
r253023r253024
2424// ======================> cbm2_hrg_t
2525
2626class cbm2_hrg_t : public device_t,
27               public device_cbm2_expansion_card_interface
27               public device_cbm2_expansion_card_interface
2828{
2929public:
3030   // construction/destruction
trunk/src/devices/bus/pet/hsg.cpp
r253023r253024
9292   MCFG_SCREEN_SIZE(512, 512)
9393   MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 512-1)
9494   MCFG_SCREEN_REFRESH_RATE(25)
95    MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
95   MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
9696
9797   MCFG_DEVICE_ADD(EF9365_TAG, EF9365, 1750000)
9898   MCFG_VIDEO_SET_SCREEN(SCREEN_TAG)
r253023r253024
113113   MCFG_SCREEN_SIZE(512, 256)
114114   MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1)
115115   MCFG_SCREEN_REFRESH_RATE(50)
116    MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
116   MCFG_PALETTE_ADD_MONOCHROME_GREEN("palette")
117117
118118   MCFG_DEVICE_ADD(EF9366_TAG, EF9365, 1750000)
119119   MCFG_VIDEO_SET_SCREEN(SCREEN_TAG)
trunk/src/devices/bus/pet/hsg.h
r253023r253024
2424// ======================> cbm8000_hsg_t
2525
2626class cbm8000_hsg_t : public device_t,
27                 public device_pet_expansion_card_interface
27                  public device_pet_expansion_card_interface
2828{
2929public:
3030   // construction/destruction
trunk/src/devices/cpu/hphybrid/hphybrid.cpp
r253023r253024
14851485            bsc_reg = HP_REG_R37_ADDR;
14861486            break;
14871487
1488                case AEC_CASE_I:
1489                                // Behaviour of AEC during interrupt vector fetch is undocumented but it can be guessed from 9845B firmware.
1490                                // Basically in this case the integrated AEC seems to do what the discrete implementation in 9845A does:
1491                                // top half of memory is mapped to block 0 (fixed) and bottom half is mapped according to content of R35
1492                                // (see pg 334 of patent).
1493                                bsc_reg = top_half ? 0 : HP_REG_R35_ADDR;
1494                                break;
1488            case AEC_CASE_I:
1489                        // Behaviour of AEC during interrupt vector fetch is undocumented but it can be guessed from 9845B firmware.
1490                        // Basically in this case the integrated AEC seems to do what the discrete implementation in 9845A does:
1491                        // top half of memory is mapped to block 0 (fixed) and bottom half is mapped according to content of R35
1492                        // (see pg 334 of patent).
1493                        bsc_reg = top_half ? 0 : HP_REG_R35_ADDR;
1494                        break;
14951495
1496                default:
1497                                logerror("hphybrid: aec_case=%d\n" , aec_case);
1498                                return 0;
1499                }
1496            default:
1497                        logerror("hphybrid: aec_case=%d\n" , aec_case);
1498                        return 0;
1499            }
15001500
1501                UINT16 aec_reg = (bsc_reg != 0) ? (m_reg_aec[ bsc_reg - HP_REG_R32_ADDR ] & BSC_REG_MASK) : 0;
1501            UINT16 aec_reg = (bsc_reg != 0) ? (m_reg_aec[ bsc_reg - HP_REG_R32_ADDR ] & BSC_REG_MASK) : 0;
15021502
15031503      if (m_forced_bsc_25) {
15041504            aec_reg = (aec_reg & 0xf) | 0x20;
trunk/src/devices/cpu/hphybrid/hphybrid.h
r253023r253024
9090      template<class _Object> static devcb_base &set_pa_changed_func(device_t &device, _Object object) { return downcast<hp_hybrid_cpu_device &>(device).m_pa_changed_func.set_callback(object); }
9191
9292protected:
93        hp_hybrid_cpu_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname , UINT8 addrwidth);
93      hp_hybrid_cpu_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname , UINT8 addrwidth);
9494
95                // device-level overrides
96                virtual void device_start() override;
97                virtual void device_reset() override;
95            // device-level overrides
96            virtual void device_start() override;
97            virtual void device_reset() override;
9898
99                // device_execute_interface overrides
100                virtual UINT32 execute_min_cycles() const override { return 6; }
101                virtual UINT32 execute_input_lines() const override { return 2; }
102                virtual UINT32 execute_default_irq_vector() const  override { return 0xffff; }
103                virtual void execute_run() override;
104                virtual void execute_set_input(int inputnum, int state) override;
99            // device_execute_interface overrides
100            virtual UINT32 execute_min_cycles() const override { return 6; }
101            virtual UINT32 execute_input_lines() const override { return 2; }
102            virtual UINT32 execute_default_irq_vector() const  override { return 0xffff; }
103            virtual void execute_run() override;
104            virtual void execute_set_input(int inputnum, int state) override;
105105
106                UINT16 execute_one(UINT16 opcode);
107                UINT16 execute_one_sub(UINT16 opcode);
108        // Execute an instruction that doesn't belong to either BPC or IOC
109        virtual UINT16 execute_no_bpc_ioc(UINT16 opcode) = 0;
106            UINT16 execute_one(UINT16 opcode);
107            UINT16 execute_one_sub(UINT16 opcode);
108      // Execute an instruction that doesn't belong to either BPC or IOC
109      virtual UINT16 execute_no_bpc_ioc(UINT16 opcode) = 0;
110110
111                // device_memory_interface overrides
112                virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override { return (spacenum == AS_PROGRAM) ? &m_program_config : ( (spacenum == AS_IO) ? &m_io_config : NULL ); }
111            // device_memory_interface overrides
112            virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override { return (spacenum == AS_PROGRAM) ? &m_program_config : ( (spacenum == AS_IO) ? &m_io_config : NULL ); }
113113
114                // device_state_interface overrides
115                void state_string_export(const device_state_entry &entry, std::string &str) const override;
114            // device_state_interface overrides
115            void state_string_export(const device_state_entry &entry, std::string &str) const override;
116116
117                // device_disasm_interface overrides
118                virtual UINT32 disasm_min_opcode_bytes() const override { return 2; }
119                virtual UINT32 disasm_max_opcode_bytes() const override { return 2; }
120                virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options) override;
117            // device_disasm_interface overrides
118            virtual UINT32 disasm_min_opcode_bytes() const override { return 2; }
119            virtual UINT32 disasm_max_opcode_bytes() const override { return 2; }
120            virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options) override;
121121
122        // Different cases of memory access
123        // See patent @ pg 361
124        typedef enum {
125                AEC_CASE_A,     // Instr. fetches, non-base page fetches of link pointers, BPC direct non-base page accesses
126                AEC_CASE_B,     // Base page fetches of link pointers, BPC direct base page accesses
127                AEC_CASE_C,     // IOC, EMC & BPC indirect final destination accesses
128                AEC_CASE_D,     // DMA accesses
129                AEC_CASE_I      // Interrupt vector fetches
130        } aec_cases_t;
122      // Different cases of memory access
123      // See patent @ pg 361
124      typedef enum {
125            AEC_CASE_A,     // Instr. fetches, non-base page fetches of link pointers, BPC direct non-base page accesses
126            AEC_CASE_B,     // Base page fetches of link pointers, BPC direct base page accesses
127            AEC_CASE_C,     // IOC, EMC & BPC indirect final destination accesses
128            AEC_CASE_D,     // DMA accesses
129            AEC_CASE_I      // Interrupt vector fetches
130      } aec_cases_t;
131131
132        // do memory address extension
133        virtual UINT32 add_mae(aec_cases_t aec_case , UINT16 addr) = 0;
132      // do memory address extension
133      virtual UINT32 add_mae(aec_cases_t aec_case , UINT16 addr) = 0;
134134
135        UINT16 remove_mae(UINT32 addr);
135      UINT16 remove_mae(UINT32 addr);
136136
137        UINT16 RM(aec_cases_t aec_case , UINT16 addr);
138        UINT16 RM(UINT32 addr);
139        virtual UINT16 read_non_common_reg(UINT16 addr) = 0;
137      UINT16 RM(aec_cases_t aec_case , UINT16 addr);
138      UINT16 RM(UINT32 addr);
139      virtual UINT16 read_non_common_reg(UINT16 addr) = 0;
140140
141        void   WM(aec_cases_t aec_case , UINT16 addr , UINT16 v);
142        void   WM(UINT32 addr , UINT16 v);
143        virtual void write_non_common_reg(UINT16 addr , UINT16 v) = 0;
141      void   WM(aec_cases_t aec_case , UINT16 addr , UINT16 v);
142      void   WM(UINT32 addr , UINT16 v);
143      virtual void write_non_common_reg(UINT16 addr , UINT16 v) = 0;
144144
145        UINT16 fetch(void);
145      UINT16 fetch(void);
146146
147        UINT16 get_skip_addr(UINT16 opcode , bool condition) const;
147      UINT16 get_skip_addr(UINT16 opcode , bool condition) const;
148148
149        devcb_write8 m_pa_changed_func;
149      devcb_write8 m_pa_changed_func;
150150
151                int m_icount;
152        bool m_forced_bsc_25;
151            int m_icount;
152      bool m_forced_bsc_25;
153153
154                // State of processor
155                UINT16 m_reg_A;     // Register A
156                UINT16 m_reg_B;     // Register B
157                UINT16 m_reg_P;     // Register P
158                UINT16 m_reg_R;     // Register R
159                UINT16 m_reg_C;     // Register C
160                UINT16 m_reg_D;     // Register D
161                UINT16 m_reg_IV;    // Register IV
162        UINT16 m_reg_W; // Register W
163                UINT8  m_reg_PA[ HPHYBRID_INT_LVLS + 1 ];   // Stack of register PA (4 bit-long)
164                UINT16 m_flags;     // Flags
165                UINT8  m_dmapa;     // DMA peripheral address (4 bits)
166                UINT16 m_dmama;     // DMA address
167                UINT16 m_dmac;      // DMA counter
168                UINT16 m_reg_I;     // Instruction register
169        UINT32 m_genpc; // Full PC
154            // State of processor
155            UINT16 m_reg_A;     // Register A
156            UINT16 m_reg_B;     // Register B
157            UINT16 m_reg_P;     // Register P
158            UINT16 m_reg_R;     // Register R
159            UINT16 m_reg_C;     // Register C
160            UINT16 m_reg_D;     // Register D
161            UINT16 m_reg_IV;    // Register IV
162      UINT16 m_reg_W; // Register W
163            UINT8  m_reg_PA[ HPHYBRID_INT_LVLS + 1 ];   // Stack of register PA (4 bit-long)
164            UINT16 m_flags;     // Flags
165            UINT8  m_dmapa;     // DMA peripheral address (4 bits)
166            UINT16 m_dmama;     // DMA address
167            UINT16 m_dmac;      // DMA counter
168            UINT16 m_reg_I;     // Instruction register
169      UINT32 m_genpc; // Full PC
170170
171171private:
172172            address_space_config m_program_config;
trunk/src/devices/cpu/i86/i86.cpp
r253023r253024
159159            }
160160         }
161161
162         /* Trap should allow one instruction to be executed.
162         /* Trap should allow one instruction to be executed.
163163            CPUID.ASM (by Bob Smith, 1985) suggests that in situations where m_no_interrupt is 1,
164164            (directly after POP SS / MOV_SREG), single step IRQs don't fire.
165165         */
r253023r253024
167167         {
168168            if ( (m_fire_trap >= 2) && (m_no_interrupt == 0) )
169169            {
170               m_fire_trap = 0; // reset trap flag upon entry
170               m_fire_trap = 0; // reset trap flag upon entry
171171               interrupt(1);
172172            }
173173            else
r253023r253024
14081408         m_src = GetRMWord();
14091409         m_sregs[(m_modrm & 0x18) >> 3] = m_src; // confirmed on hw: modrm bit 5 ignored
14101410         CLKM(MOV_SR,MOV_SM);
1411         m_no_interrupt = 1; // Disable IRQ after load segment register.
1411         m_no_interrupt = 1; // Disable IRQ after load segment register.
14121412         break;
14131413
14141414      case 0x8f: // i_popw
trunk/src/devices/cpu/m68000/m68kops.cpp
r253023r253024
3487234872/* ======================================================================== */
3487334873/* ============================== END OF FILE ============================= */
3487434874/* ======================================================================== */
34875
34876
trunk/src/devices/cpu/tlcs900/tlcs900.cpp
r253023r253024
17481748         int ad_value;
17491749
17501750         /* Store A/D converted value */
1751         if ((m_reg[TMP95C063_ADMOD1] & 0x10) == 0)      // conversion channel fixed
1751         if ((m_reg[TMP95C063_ADMOD1] & 0x10) == 0)      // conversion channel fixed
17521752         {
17531753            switch( m_reg[TMP95C063_ADMOD2] & 0x07 )
17541754            {
1755            case 0x00:   // AN0
1755            case 0x00:  // AN0
17561756               ad_value = m_an0_read(0) & 0x3ff;
17571757               m_reg[TMP95C063_ADREG04L] = (ad_value & 0x3) << 6;
17581758               m_reg[TMP95C063_ADREG04H] = (ad_value >> 2) & 0xff;
17591759               break;
1760            case 0x01:   // AN1
1760            case 0x01:  // AN1
17611761               ad_value = m_an1_read(0) & 0x3ff;
17621762               m_reg[TMP95C063_ADREG15L] = (ad_value & 0x3) << 6;
17631763               m_reg[TMP95C063_ADREG15H] = (ad_value >> 2) & 0xff;
17641764               break;
1765            case 0x02:   // AN2
1765            case 0x02:  // AN2
17661766               ad_value = m_an2_read(0) & 0x3ff;
17671767               m_reg[TMP95C063_ADREG26L] = (ad_value & 0x3) << 6;
17681768               m_reg[TMP95C063_ADREG26H] = (ad_value >> 2) & 0xff;
17691769               break;
1770            case 0x03:   // AN3
1770            case 0x03:  // AN3
17711771               ad_value = m_an3_read(0) & 0x3ff;
17721772               m_reg[TMP95C063_ADREG37L] = (ad_value & 0x3) << 6;
17731773               m_reg[TMP95C063_ADREG37H] = (ad_value >> 2) & 0xff;
17741774               break;
1775            case 0x04:   // AN4           
1775            case 0x04:  // AN4
17761776               ad_value = m_an4_read(0) & 0x3ff;
17771777               m_reg[TMP95C063_ADREG04L] = (ad_value & 0x3) << 6;
17781778               m_reg[TMP95C063_ADREG04H] = (ad_value >> 2) & 0xff;
17791779               break;
1780            case 0x05:   // AN5
1780            case 0x05:  // AN5
17811781               ad_value = m_an5_read(0) & 0x3ff;
17821782               m_reg[TMP95C063_ADREG15L] = (ad_value & 0x3) << 6;
17831783               m_reg[TMP95C063_ADREG15H] = (ad_value >> 2) & 0xff;
17841784               break;
1785            case 0x06:   // AN6
1785            case 0x06:  // AN6
17861786               ad_value = m_an6_read(0) & 0x3ff;
17871787               m_reg[TMP95C063_ADREG26L] = (ad_value & 0x3) << 6;
17881788               m_reg[TMP95C063_ADREG26H] = (ad_value >> 2) & 0xff;
17891789               break;
1790            case 0x07:   // AN7
1790            case 0x07:  // AN7
17911791               ad_value = m_an7_read(0) & 0x3ff;
17921792               m_reg[TMP95C063_ADREG37L] = (ad_value & 0x3) << 6;
17931793               m_reg[TMP95C063_ADREG37H] = (ad_value >> 2) & 0xff;
17941794               break;
17951795            }
17961796         }
1797         else         // conversion channel sweep
1797         else            // conversion channel sweep
17981798         {
17991799            switch( m_reg[TMP95C063_ADMOD2] & 0x07 )
18001800            {
1801               case 0x00:      // AN0
1801               case 0x00:      // AN0
18021802                  ad_value = m_an0_read(0) & 0x3ff;
18031803                  m_reg[TMP95C063_ADREG04L] = (ad_value & 0x3) << 6;
18041804                  m_reg[TMP95C063_ADREG04H] = (ad_value >> 2) & 0xff;
18051805                  break;
1806               case 0x01:      // AN0 -> AN1
1806               case 0x01:      // AN0 -> AN1
18071807                  ad_value = m_an0_read(0) & 0x3ff;
18081808                  m_reg[TMP95C063_ADREG04L] = (ad_value & 0x3) << 6;
18091809                  m_reg[TMP95C063_ADREG04H] = (ad_value >> 2) & 0xff;
r253023r253024
18111811                  m_reg[TMP95C063_ADREG15L] = (ad_value & 0x3) << 6;
18121812                  m_reg[TMP95C063_ADREG15H] = (ad_value >> 2) & 0xff;
18131813                  break;
1814               case 0x02:      // AN0 -> AN1 -> AN2
1814               case 0x02:      // AN0 -> AN1 -> AN2
18151815                  ad_value = m_an0_read(0) & 0x3ff;
18161816                  m_reg[TMP95C063_ADREG04L] = (ad_value & 0x3) << 6;
18171817                  m_reg[TMP95C063_ADREG04H] = (ad_value >> 2) & 0xff;
r253023r253024
18221822                  m_reg[TMP95C063_ADREG26L] = (ad_value & 0x3) << 6;
18231823                  m_reg[TMP95C063_ADREG26H] = (ad_value >> 2) & 0xff;
18241824                  break;
1825               case 0x03:      // AN0 -> AN1 -> AN2 -> AN3
1825               case 0x03:      // AN0 -> AN1 -> AN2 -> AN3
18261826                  ad_value = m_an0_read(0) & 0x3ff;
18271827                  m_reg[TMP95C063_ADREG04L] = (ad_value & 0x3) << 6;
18281828                  m_reg[TMP95C063_ADREG04H] = (ad_value >> 2) & 0xff;
r253023r253024
18361836                  m_reg[TMP95C063_ADREG37L] = (ad_value & 0x3) << 6;
18371837                  m_reg[TMP95C063_ADREG37H] = (ad_value >> 2) & 0xff;
18381838                  break;
1839               case 0x04:      // AN4
1839               case 0x04:      // AN4
18401840                  ad_value = m_an4_read(0) & 0x3ff;
18411841                  m_reg[TMP95C063_ADREG04L] = (ad_value & 0x3) << 6;
18421842                  m_reg[TMP95C063_ADREG04H] = (ad_value >> 2) & 0xff;
18431843                  break;
1844               case 0x05:      // AN4 -> AN5
1844               case 0x05:      // AN4 -> AN5
18451845                  ad_value = m_an4_read(0) & 0x3ff;
18461846                  m_reg[TMP95C063_ADREG04L] = (ad_value & 0x3) << 6;
18471847                  m_reg[TMP95C063_ADREG04H] = (ad_value >> 2) & 0xff;
r253023r253024
18491849                  m_reg[TMP95C063_ADREG15L] = (ad_value & 0x3) << 6;
18501850                  m_reg[TMP95C063_ADREG15H] = (ad_value >> 2) & 0xff;
18511851                  break;
1852               case 0x06:      // AN4 -> AN5 -> AN6
1852               case 0x06:      // AN4 -> AN5 -> AN6
18531853                  ad_value = m_an4_read(0) & 0x3ff;
18541854                  m_reg[TMP95C063_ADREG04L] = (ad_value & 0x3) << 6;
18551855                  m_reg[TMP95C063_ADREG04H] = (ad_value >> 2) & 0xff;
r253023r253024
18601860                  m_reg[TMP95C063_ADREG26L] = (ad_value & 0x3) << 6;
18611861                  m_reg[TMP95C063_ADREG26H] = (ad_value >> 2) & 0xff;
18621862                  break;
1863               case 0x07:      // AN4 -> AN5 -> AN6 -> AN7
1863               case 0x07:      // AN4 -> AN5 -> AN6 -> AN7
18641864                  ad_value = m_an4_read(0) & 0x3ff;
18651865                  m_reg[TMP95C063_ADREG04L] = (ad_value & 0x3) << 6;
18661866                  m_reg[TMP95C063_ADREG04H] = (ad_value >> 2) & 0xff;
trunk/src/devices/cpu/tlcs900/tlcs900.h
r253023r253024
852852   devcb_write8   m_porte_write;
853853
854854   // analogue inputs, sampled at 10 bits
855   devcb_read16      m_an0_read;
856   devcb_read16      m_an1_read;
857   devcb_read16      m_an2_read;
858   devcb_read16      m_an3_read;
859   devcb_read16      m_an4_read;
860   devcb_read16      m_an5_read;
861   devcb_read16      m_an6_read;
862   devcb_read16      m_an7_read;
855   devcb_read16       m_an0_read;
856   devcb_read16       m_an1_read;
857   devcb_read16       m_an2_read;
858   devcb_read16       m_an3_read;
859   devcb_read16       m_an4_read;
860   devcb_read16       m_an5_read;
861   devcb_read16       m_an6_read;
862   devcb_read16       m_an7_read;
863863};
864864
865865#endif
trunk/src/devices/cpu/tms32051/32051ops.inc
r253023r253024
198198
199199bool tms32051_device::GET_ZLVC_CONDITION(int zlvc, int zlvc_mask)
200200{
201   if (zlvc_mask & 0x2)         // OV-bit
201   if (zlvc_mask & 0x2)            // OV-bit
202202   {
203      if ((zlvc & 0x2) && m_st0.ov == 0)         // OV
203      if ((zlvc & 0x2) && m_st0.ov == 0)          // OV
204204         return false;
205      if (((zlvc & 0x2) == 0) && m_st0.ov != 0)   // NOV
205      if (((zlvc & 0x2) == 0) && m_st0.ov != 0)   // NOV
206206         return false;
207207   }
208   if (zlvc_mask & 0x1)         // C-bit
208   if (zlvc_mask & 0x1)            // C-bit
209209   {
210      if ((zlvc & 0x1) && m_st1.c == 0)         // C
210      if ((zlvc & 0x1) && m_st1.c == 0)           // C
211211         return false;
212      if (((zlvc & 0x1) == 0) && m_st1.c != 0)      // NC
212      if (((zlvc & 0x1) == 0) && m_st1.c != 0)        // NC
213213         return false;
214214   }
215215
216216   switch ((zlvc_mask & 0xc) | ((zlvc >> 2) & 0x3))
217217   {
218      case 0x00: break;                                 // MZ=0, ML=0, Z=0, L=0
219      case 0x01: break;                                 // MZ=0, ML=0, Z=0, L=1
220      case 0x02: break;                                 // MZ=0, ML=0, Z=1, L=0
221      case 0x03: break;                                 // MZ=0, ML=0, Z=1, L=1
222      case 0x04: if ((INT32)(m_acc) <= 0) return false; break;      // MZ=0, ML=1, Z=0, L=0  (GT)
223      case 0x05: if ((INT32)(m_acc) >= 0) return false; break;      // MZ=0, ML=1, Z=0, L=1  (LT)
224      case 0x06: if ((INT32)(m_acc) <= 0) return false; break;      // MZ=0, ML=1, Z=1, L=0  (GT)
225      case 0x07: if ((INT32)(m_acc) >= 0) return false; break;      // MZ=0, ML=1, Z=1, L=1  (LT)
226      case 0x08: if ((INT32)(m_acc) == 0) return false; break;      // MZ=1, ML=0, Z=0, L=0  (NEQ)
227      case 0x09: if ((INT32)(m_acc) == 0) return false; break;      // MZ=1, ML=0, Z=0, L=1  (NEQ)
228      case 0x0a: if ((INT32)(m_acc) != 0) return false; break;      // MZ=1, ML=0, Z=1, L=0  (EQ)
229      case 0x0b: if ((INT32)(m_acc) != 0) return false; break;      // MZ=1, ML=0, Z=1, L=1  (EQ)
230      case 0x0c: if ((INT32)(m_acc) <= 0) return false; break;      // MZ=1, ML=1, Z=0, L=0  (GT)
231      case 0x0d: if ((INT32)(m_acc) >= 0) return false; break;      // MZ=1, ML=1, Z=0, L=1  (LT)
232      case 0x0e: if ((INT32)(m_acc) < 0) return false;    break;      // MZ=1, ML=1, Z=1, L=0  (GEQ)
233      case 0x0f: if ((INT32)(m_acc) > 0) return false;    break;      // MZ=1, ML=1, Z=1, L=1  (LEQ)
218      case 0x00: break;                                           // MZ=0, ML=0, Z=0, L=0
219      case 0x01: break;                                           // MZ=0, ML=0, Z=0, L=1
220      case 0x02: break;                                           // MZ=0, ML=0, Z=1, L=0
221      case 0x03: break;                                           // MZ=0, ML=0, Z=1, L=1
222      case 0x04: if ((INT32)(m_acc) <= 0) return false; break;        // MZ=0, ML=1, Z=0, L=0  (GT)
223      case 0x05: if ((INT32)(m_acc) >= 0) return false; break;        // MZ=0, ML=1, Z=0, L=1  (LT)
224      case 0x06: if ((INT32)(m_acc) <= 0) return false; break;        // MZ=0, ML=1, Z=1, L=0  (GT)
225      case 0x07: if ((INT32)(m_acc) >= 0) return false; break;        // MZ=0, ML=1, Z=1, L=1  (LT)
226      case 0x08: if ((INT32)(m_acc) == 0) return false; break;        // MZ=1, ML=0, Z=0, L=0  (NEQ)
227      case 0x09: if ((INT32)(m_acc) == 0) return false; break;        // MZ=1, ML=0, Z=0, L=1  (NEQ)
228      case 0x0a: if ((INT32)(m_acc) != 0) return false; break;        // MZ=1, ML=0, Z=1, L=0  (EQ)
229      case 0x0b: if ((INT32)(m_acc) != 0) return false; break;        // MZ=1, ML=0, Z=1, L=1  (EQ)
230      case 0x0c: if ((INT32)(m_acc) <= 0) return false; break;        // MZ=1, ML=1, Z=0, L=0  (GT)
231      case 0x0d: if ((INT32)(m_acc) >= 0) return false; break;        // MZ=1, ML=1, Z=0, L=1  (LT)
232      case 0x0e: if ((INT32)(m_acc) < 0) return false;     break;     // MZ=1, ML=1, Z=1, L=0  (GEQ)
233      case 0x0f: if ((INT32)(m_acc) > 0) return false;     break;     // MZ=1, ML=1, Z=1, L=1  (LEQ)
234234   }
235235   return true;
236236}
r253023r253024
239239{
240240   switch (tp)
241241   {
242      case 0:      // BIO pin low
242      case 0:     // BIO pin low
243243         // TODO
244244         return false;
245     
246      case 1:      // TC == 1
245
246      case 1:     // TC == 1
247247         return m_st1.tc != 0;
248248
249      case 2:      // TC == 0
249      case 2:     // TC == 0
250250         return m_st1.tc == 0;
251251
252252      case 3:
r253023r253024
13761376{
13771377   UINT16 port = ROPCODE();
13781378   UINT16 ea = GET_ADDRESS();
1379   
1379
13801380   UINT16 data = DM_READ16(ea);
13811381   m_io->write_word(port << 1, data);
13821382
r253023r253024
14381438{
14391439   UINT16 ea = GET_ADDRESS();
14401440   UINT16 data = DM_READ16(ea);
1441   
1441
14421442   data &= m_dbmr;
14431443
14441444   m_st1.tc = (data == 0) ? 1 : 0;
r253023r253024
14521452   UINT16 ea = GET_ADDRESS();
14531453   UINT16 imm = ROPCODE();
14541454   UINT16 data = DM_READ16(ea);
1455   
1455
14561456   data &= imm;
14571457
14581458   m_st1.tc = (data == 0) ? 1 : 0;
trunk/src/devices/machine/tms6100.cpp
r253023r253024
33/**********************************************************************************************
44
55    Texas Instruments TMS6100 Voice Synthesis Memory (VSM)
6   
6
77    References:
88    - TMS 6100 Voice Synthesis Memory Data Manual
99    - TMS 6125 Voice Synthesis Memory Data Manual
r253023r253024
147147         UINT8 m = m_m1 << 1 | m_m0;
148148         if ((m & ~m_prev_m & 1) || (m & ~m_prev_m & 2))
149149            handle_command(m);
150         
150
151151         m_prev_m = m;
152152      }
153153   }
154   
154
155155   m_clk = (state) ? 1 : 0;
156156}
157157
r253023r253024
190190               // or shift(rotate) right
191191               m_sa = (m_sa >> 1) | (m_sa << 7 & 0x80);
192192            }
193           
193
194194            // output to DATA pin(s)
195195            if (!m_4bit_mode)
196196            {
r253023r253024
205205               else
206206                  m_data = m_sa & 0xf;
207207            }
208           
208
209209            // 8 bits in 1-bit mode, otherwise 2 nybbles
210210            m_count = (m_count + 1) & (m_4bit_mode ? 1 : 7);
211           
211
212212            // TB8
213213            if (m_count == 0)
214214               m_address++; // CS bits too
215215         }
216216         break;
217     
217
218218      // LA: load address
219219      case M_LA:
220220         if (m_prev_cmd == M_TB)
r253023r253024
232232               const UINT8 shift = 4 * (m_count+1);
233233               m_address = (m_address & ~(0xf << shift)) | (m_add << shift);
234234            }
235           
235
236236            m_count = (m_count + 1) & 7;
237237         }
238238         break;
r253023r253024
251251            m_address = (m_address & ~0x3fff) | (rb & 0x3fff);
252252         }
253253         break;
254     
254
255255      default:
256256         break;
257257   }
258   
258
259259   m_prev_cmd = cmd;
260260}
trunk/src/devices/machine/tms6100.h
r253023r253024
5656       DATA/ADD8 | 6    11 |  CS          NC        | 6    11 |  /CS
5757       NC        | 7    10 |  M1          NC        | 7    10 |  M1
5858       M0        | 8     9 |  VSS         M0        | 8     9 |  VSS
59                 +---------+                        +---------+         
59                 +---------+                        +---------+
6060
6161
6262    Mitsubishi M58819S EPROM Interface:
r253023r253024
112112protected:
113113   // device-level overrides
114114   virtual void device_start() override;
115   
115
116116   void handle_command(UINT8 cmd);
117117
118118   // internal state
119119   required_region_ptr<UINT8> m_rom;
120120   bool m_reverse_bits;
121121   bool m_4bit_mode;
122   
122
123123   UINT32 m_rommask;
124124   UINT32 m_address;   // internal address + chipselect
125125   UINT8 m_sa;         // romdata shift register
trunk/src/devices/sound/beep.cpp
r253023r253024
5050   m_stream = stream_alloc(0, 1, BEEP_RATE);
5151   m_enable = 0;
5252   m_signal = 0x07fff;
53   
53
5454   // register for savestates
5555   save_item(NAME(m_enable));
5656   save_item(NAME(m_frequency));
trunk/src/devices/sound/fm.cpp
r253023r253024
24232423   UINT8       flagmask;           /* YM2608 only */
24242424   UINT8       irqmask;            /* YM2608 only */
24252425
2426   device_t   *device;
2426   device_t    *device;
24272427};
24282428
24292429/* here is the virtual YM2608 */
trunk/src/devices/sound/rf5c400.cpp
r253023r253024
355355         return 0;
356356      }
357357
358      case 0x13:      // memory read
358      case 0x13:      // memory read
359359      {
360360         return m_rom[m_ext_mem_address];
361361      }
trunk/src/devices/sound/s14001a.cpp
r253023r253024
132132   // resolve callbacks
133133   m_ext_read_handler.resolve();
134134   m_bsy_handler.resolve();
135   
135
136136   // note: zerofill is done already by MAME core
137137   ClearStatistics();
138138   m_uOutputP1 = m_uOutputP2 = 7;
139   
139
140140   // register for savestates
141141   save_item(NAME(m_bPhase1));
142142   save_item(NAME(m_uStateP1));
trunk/src/devices/sound/s14001a.h
r253023r253024
3030   DECLARE_READ_LINE_MEMBER(romen_r);  // ROM /EN (pin 9)
3131   DECLARE_WRITE_LINE_MEMBER(start_w); // START (pin 10)
3232   DECLARE_WRITE8_MEMBER(data_w);      // 6-bit word
33   
33
3434   void set_clock(UINT32 clock);       // set new CLK frequency
3535   void force_update();                // update stream, eg. before external ROM bankswitch
3636
r253023r253024
8080
8181   UINT16 m_uDAR13To05P1;      // 9 MSBs of delta address register
8282   UINT16 m_uDAR13To05P2;      // incrementing uDAR05To13 advances ROM address by 8 bytes
83   
83
8484   UINT16 m_uDAR04To00P1;      // 5 LSBs of delta address register
8585   UINT16 m_uDAR04To00P2;      // 3 address ROM, 2 mux 8 bits of data into 2 bit delta
86                               // carry indicates end of quarter pitch period (32 cycles)
86                        // carry indicates end of quarter pitch period (32 cycles)
8787
8888   UINT16 m_uCWARP1;           // 12 bits Control Word Address Register (syllable)
8989   UINT16 m_uCWARP2;
r253023r253024
9696   bool m_bSilenceP2;
9797   UINT8 m_uLengthP1;          // 7 bits, upper three loaded from ROM length
9898   UINT8 m_uLengthP2;          // middle two loaded from ROM repeat and/or uXRepeat
99                               // bit 0 indicates mirror in voiced mode
100                               // bit 1 indicates internal silence in voiced mode
101                               // incremented each pitch period quarter
99                        // bit 0 indicates mirror in voiced mode
100                        // bit 1 indicates internal silence in voiced mode
101                        // incremented each pitch period quarter
102102
103103   UINT8 m_uXRepeatP1;         // 2 bits, loaded from ROM repeat
104104   UINT8 m_uXRepeatP2;
trunk/src/devices/sound/scsp.cpp
r253023r253024
516516   }
517517
518518   memory_region* ram_region = memregion(tag());
519   
519
520520   // coolridr.c defines a region for the RAM, stv.c doesn't (uses set_ram_base instead, which seems to be more correct anyway?)
521521   if (ram_region != NULL)
522522   {
trunk/src/devices/sound/sn76477.cpp
r253023r253024
957957   {
958958      m_channel->update();
959959
960       m_enable = state;
960      m_enable = state;
961961
962          /* if falling edge */
963       if (!m_enable)
964       {
965          /* start the attack phase */
966          m_attack_decay_cap_voltage = AD_CAP_VOLTAGE_MIN;
962         /* if falling edge */
963      if (!m_enable)
964      {
965         /* start the attack phase */
966         m_attack_decay_cap_voltage = AD_CAP_VOLTAGE_MIN;
967967
968          /* one-shot runs regardless of envelope mode */
969          m_one_shot_running_ff = 1;
970       }
968         /* one-shot runs regardless of envelope mode */
969         m_one_shot_running_ff = 1;
970      }
971971
972972      log_enable_line();
973973   }
r253023r253024
13921392   {
13931393      m_channel->update();
13941394
1395       if (data == 0)
1396       {
1397          m_noise_clock_ext = 1;
1398       }
1399       else
1400       {
1401          m_noise_clock_ext = 0;
1395      if (data == 0)
1396      {
1397         m_noise_clock_ext = 1;
1398      }
1399      else
1400      {
1401         m_noise_clock_ext = 0;
14021402
1403          m_noise_clock_res = data;
1404       }
1403         m_noise_clock_res = data;
1404      }
14051405
14061406      log_noise_gen_freq();
14071407   }
r253023r253024
17111711
17121712   stream_sample_t *buffer = outputs[0];
17131713
1714    /* compute charging values, doing it here ensures that we always use the latest values */
1714   /* compute charging values, doing it here ensures that we always use the latest values */
17151715   one_shot_cap_charging_step = compute_one_shot_cap_charging_rate() / m_our_sample_rate;
17161716   one_shot_cap_discharging_step = compute_one_shot_cap_discharging_rate() / m_our_sample_rate;
17171717
trunk/src/devices/sound/upd7759.h
r253023r253024
9595   INT16       m_sample;                     /* current sample value */
9696
9797   /* ROM access */
98   optional_region_ptr<UINT8> m_rombase;     /* pointer to ROM data or NULL for slave mode */
98   optional_region_ptr<UINT8> m_rombase;     /* pointer to ROM data or NULL for slave mode */
9999   UINT8 *     m_rom;                        /* pointer to ROM data or NULL for slave mode */
100100   UINT32      m_romoffset;                  /* ROM offset to make save/restore easier */
101101   UINT32      m_rommask;                    /* maximum address offset */
trunk/src/devices/video/pcd8544.cpp
r253023r253024
6161
6262void pcd8544_device::device_reset()
6363{
64   m_mode      = 0x04;   // PD=1, V=0, H=0
65   m_control   = 0x00;   // E=0, D=0
64   m_mode      = 0x04; // PD=1, V=0, H=0
65   m_control   = 0x00; // E=0, D=0
6666   m_addr_y    = 0;
6767   m_addr_x    = 0;
6868   m_bias      = 0;
r253023r253024
207207   {
208208      switch (m_control)
209209      {
210         case 0:      // display blank
211         case 1:      // all display segments on
210         case 0:     // display blank
211         case 1:     // all display segments on
212212            bitmap.fill(m_control & 1, cliprect);
213213            break;
214214
215         case 2:      // normal mode
216         case 3:      // inverse video mode
215         case 2:     // normal mode
216         case 3:     // inverse video mode
217217            if (!m_screen_update_cb.isnull())
218218               m_screen_update_cb(screen, bitmap, cliprect, m_vram, m_control & 1);
219219            break;
trunk/src/devices/video/pcd8544.h
r253023r253024
5050   void write_data(UINT8 data);
5151
5252private:
53   pcd8544_screen_update_delegate m_screen_update_cb;   // screen update callback
54   int      m_sdin;
55   int      m_sclk;
56   int      m_dc;
57   int      m_bits;
58   UINT8   m_mode;
59   UINT8   m_control;
60   UINT8   m_op_vol;
61   UINT8   m_bias;
62   UINT8   m_temp_coef;
63   UINT8   m_indata;
64   UINT8   m_addr_y;
65   UINT8   m_addr_x;
66   UINT8   m_vram[6*84];      // 4032 bit video ram
53   pcd8544_screen_update_delegate m_screen_update_cb;  // screen update callback
54   int     m_sdin;
55   int     m_sclk;
56   int     m_dc;
57   int     m_bits;
58   UINT8   m_mode;
59   UINT8   m_control;
60   UINT8   m_op_vol;
61   UINT8   m_bias;
62   UINT8   m_temp_coef;
63   UINT8   m_indata;
64   UINT8   m_addr_y;
65   UINT8   m_addr_x;
66   UINT8   m_vram[6*84];       // 4032 bit video ram
6767};
6868
6969// device type definition
trunk/src/devices/video/voodoo.cpp
r253023r253024
33263326
33273327            rgbaint_t color, preFog;
33283328            rgbaint_t iterargb(0);
3329         
33303329
3330
33313331            /* pixel pipeline part 1 handles depth testing and stippling */
33323332            //PIXEL_PIPELINE_BEGIN(v, stats, x, y, v->reg[fbzColorPath].u, v->reg[fbzMode].u, iterz, iterw);
33333333// Start PIXEL_PIPE_BEGIN copy
r253023r253024
33873387            /* handle alpha test */
33883388            if (!alphaTest(v, stats, v->reg[alphaMode].u, color.get_a()))
33893389               goto nextpixel;
3390           
33913390
3391
33923392            /* wait for any outstanding work to finish */
33933393            poly_wait(v->poly, "LFB Write");
33943394
r253023r253024
60166016
60176017RASTERIZER(generic_2tmu, 2, v->reg[fbzColorPath].u, v->reg[fbzMode].u, v->reg[alphaMode].u,
60186018         v->reg[fogMode].u, v->tmu[0].reg[textureMode].u, v->tmu[1].reg[textureMode].u)
6019
6020
trunk/src/devices/video/voodoo_rast.inc
r253023r253024
491491//RASTERIZER_ENTRY( 0x00000001, 0x00000000, 0x00000000, 0x00000300, 0x00000800, 0x00000800 ) /* * 87        2         72 */
492492//RASTERIZER_ENTRY( 0x00000001, 0x00000000, 0x00000000, 0x00000200, 0x08241A00, 0x08241A00 ) /* * 92        2          8 */
493493//RASTERIZER_ENTRY( 0x00000001, 0x00000000, 0x00000000, 0x00000200, 0x00000000, 0x08241A00 ) /* * 93        2          8 */
494
trunk/src/emu/bookkeeping.cpp
r253023r253024
2222
2323bookkeeping_manager::bookkeeping_manager(running_machine &machine)
2424   : m_machine(machine),
25     m_dispensed_tickets(0)
25      m_dispensed_tickets(0)
2626{
27
2827   /* reset coin counters */
2928   for (int counternum = 0; counternum < COIN_COUNTERS; counternum++)
3029   {
r253023r253024
3332      m_coin_count[counternum] = 0;
3433   }
3534
36   // register coin save state
35   // register coin save state
3736   machine.save().save_item(NAME(m_coin_count));
3837   machine.save().save_item(NAME(m_coinlockedout));
3938   machine.save().save_item(NAME(m_lastcoin));
trunk/src/emu/bookkeeping.h
r253023r253024
4444   // increment the number of dispensed tickets
4545   void increment_dispensed_tickets(int delta);
4646
47   // ----- coin counters -----
47   // ----- coin counters -----
4848   // write to a particular coin counter (clocks on active high edge)
4949   void coin_counter_w(int num, int on);
5050
5151   // return the coin count for a given coin
5252   int coin_counter_get_count(int num);
5353
54   // enable/disable coin lockout for a particular coin
54   // enable/disable coin lockout for a particular coin
5555   void coin_lockout_w(int num, int on);
5656
5757   // return current lockout state for a particular coin
trunk/src/emu/config.h
r253023r253024
4545{
4646   struct config_element
4747   {
48      std::string              name;              /* node name */
48      std::string              name;              /* node name */
4949      config_saveload_delegate load;              /* load callback */
5050      config_saveload_delegate save;              /* save callback */
5151   };
trunk/src/emu/diimage.cpp
r253023r253024
6161      m_mame_file(nullptr),
6262      m_software_info_ptr(nullptr),
6363      m_software_part_ptr(nullptr),
64       m_supported(0),
64      m_supported(0),
6565      m_readonly(false),
6666      m_created(false),
67       m_init_phase(false),
68       m_from_swlist(false),
69       m_create_format(0),
70       m_create_args(nullptr),
67      m_init_phase(false),
68      m_from_swlist(false),
69      m_create_format(0),
70      m_create_args(nullptr),
7171      m_is_loading(FALSE)
7272{
7373}
r253023r253024
14201420   image_fwrite_thunk,
14211421   image_fsize_thunk
14221422};
1423
trunk/src/emu/image.cpp
r253023r253024
231231         {
232232            /* retrieve image error message */
233233            std::string image_err = std::string(image->error());
234           
234
235235            /* unload all images */
236236            unload_all();
237237
r253023r253024
243243   /* add a callback for when we shut down */
244244   machine().add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(image_manager::unload_all), this));
245245}
246
trunk/src/emu/image.h
r253023r253024
2020public:
2121   // construction/destruction
2222   image_manager(running_machine &machine);
23     
23
2424   void unload_all();
2525   void postdevice_init();
2626   std::string &mandatory_scan(std::string &mandatory);
trunk/src/emu/luaengine.cpp
r253023r253024
863863
864864static void *serve_lua(void *param)
865865{
866    lua_engine *engine = (lua_engine *)param;
867    engine->serve_lua();
868    return NULL;
866   lua_engine *engine = (lua_engine *)param;
867   engine->serve_lua();
868   return NULL;
869869}
870870
871871//-------------------------------------------------
trunk/src/emu/machine.h
r253023r253024
294294   std::unique_ptr<network_manager> m_network;        // internal data from network.cpp
295295   std::unique_ptr<bookkeeping_manager> m_bookkeeping;// internal data from bookkeeping.cpp
296296   std::unique_ptr<configuration_manager> m_configuration; // internal data from config.cpp
297   std::unique_ptr<output_manager> m_output;         // internal data from output.cpp
298   std::unique_ptr<crosshair_manager> m_crosshair;      // internal data from crsshair.cpp
299   std::unique_ptr<image_manager> m_image;              // internal data from image.cpp
300   std::unique_ptr<rom_load_manager> m_rom_load;      // internal data from romload.cpp
301   std::unique_ptr<debugger_manager> m_debugger;      // internal data from debugger.cpp
297   std::unique_ptr<output_manager> m_output;          // internal data from output.cpp
298   std::unique_ptr<crosshair_manager> m_crosshair;    // internal data from crsshair.cpp
299   std::unique_ptr<image_manager> m_image;            // internal data from image.cpp
300   std::unique_ptr<rom_load_manager> m_rom_load;      // internal data from romload.cpp
301   std::unique_ptr<debugger_manager> m_debugger;      // internal data from debugger.cpp
302302
303303   // system state
304304   machine_phase           m_current_phase;        // current execution phase
trunk/src/emu/output.cpp
r253023r253024
2020
2121output_manager::output_manager(running_machine &machine)
2222   : m_machine(machine),
23     m_uniqueid(12345)
23      m_uniqueid(12345)
2424{
2525   /* add pause callback */
2626   machine.add_notifier(MACHINE_NOTIFY_PAUSE, machine_notify_delegate(FUNC(output_manager::pause), this));
r253023r253024
4949output_manager::output_item *output_manager::create_new_item(const char *outname, INT32 value)
5050{
5151   output_item item;
52   
52
5353   /* fill in the data */
5454   item.name = outname;
5555   item.id = m_uniqueid++;
r253023r253024
197197      /* if no item of that name, create a new one */
198198      if (item == nullptr)
199199         item = create_new_item(outname, 0);
200     
200
201201      item->notifylist.push_back(notify);
202202   }
203203   else
trunk/src/emu/ui/ui.cpp
r253023r253024
10911091         str.append(emulator_info::get_gamenoun());
10921092         str.append(" was never completed. It may exhibit strange behavior or missing elements that are not bugs in the emulation.\n");
10931093      }
1094     
1094
10951095      if (machine().system().flags & MACHINE_NO_SOUND_HW )
10961096      {
10971097         str.append("This ");
10981098         str.append(emulator_info::get_gamenoun());
10991099         str.append(" has no sound hardware, MAME will produce no sounds, this is expected behaviour.\n");
11001100      }
1101     
1101
11021102      // if there's a NOT WORKING, UNEMULATED PROTECTION or GAME MECHANICAL warning, make it stronger
11031103      if (machine().system().flags & (MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION | MACHINE_MECHANICAL))
11041104      {
trunk/src/emu/uiinput.cpp
r253023r253024
3333//-------------------------------------------------
3434
3535ui_input_manager::ui_input_manager(running_machine &machine)
36   : m_machine(machine),
37     m_current_mouse_target(nullptr),
38     m_current_mouse_down(false),
39     m_events_start(0),
40     m_events_end(0)
36   : m_machine(machine),
37      m_current_mouse_target(nullptr),
38      m_current_mouse_down(false),
39      m_events_start(0),
40      m_events_end(0)
4141{
4242   /* create the private data */
4343   m_current_mouse_x = -1;
r253023r253024
7878
7979bool ui_input_manager::push_event(ui_event evt)
8080{
81
8281   /* some pre-processing (this is an icky place to do this stuff!) */
8382   switch (evt.event_type)
8483   {
r253023r253024
241240}
242241
243242/*-------------------------------------------------
244   push_mouse_move_event - pushes a mouse
245   move event to the specified render_target
243    push_mouse_move_event - pushes a mouse
244    move event to the specified render_target
246245-------------------------------------------------*/
247246
248247void ui_input_manager::push_mouse_move_event(render_target* target, INT32 x, INT32 y)
r253023r253024
256255}
257256
258257/*-------------------------------------------------
259   push_mouse_leave_event - pushes a
260   mouse leave event to the specified render_target
258    push_mouse_leave_event - pushes a
259    mouse leave event to the specified render_target
261260-------------------------------------------------*/
262261
263262void ui_input_manager::push_mouse_leave_event(render_target* target)
r253023r253024
269268}
270269
271270/*-------------------------------------------------
272   push_mouse_down_event - pushes a mouse
273   down event to the specified render_target
271    push_mouse_down_event - pushes a mouse
272    down event to the specified render_target
274273-------------------------------------------------*/
275274
276275void ui_input_manager::push_mouse_down_event(render_target* target, INT32 x, INT32 y)
r253023r253024
284283}
285284
286285/*-------------------------------------------------
287   push_mouse_down_event - pushes a mouse
288   down event to the specified render_target
286    push_mouse_down_event - pushes a mouse
287    down event to the specified render_target
289288-------------------------------------------------*/
290289
291290void ui_input_manager::push_mouse_up_event(render_target* target, INT32 x, INT32 y)
r253023r253024
299298}
300299
301300/*-------------------------------------------------
302   push_mouse_double_click_event - pushes
303   a mouse double-click event to the specified
304   render_target
301    push_mouse_double_click_event - pushes
302    a mouse double-click event to the specified
303    render_target
305304-------------------------------------------------*/
306305void ui_input_manager::push_mouse_double_click_event(render_target* target, INT32 x, INT32 y)
307306{
r253023r253024
314313}
315314
316315/*-------------------------------------------------
317   push_char_event - pushes a char event
318   to the specified render_target
316    push_char_event - pushes a char event
317    to the specified render_target
319318-------------------------------------------------*/
320319void ui_input_manager::push_char_event(render_target* target, unicode_char ch)
321320{
trunk/src/emu/uiinput.h
r253023r253024
1616
1717
1818/***************************************************************************
19   CONSTANTS
19    CONSTANTS
2020***************************************************************************/
2121
2222#define EVENT_QUEUE_SIZE        128
trunk/src/lib/util/corealloc.h
r253023r253024
3535
3636template<typename _Tp, typename... _Args>
3737inline _Tp* global_alloc_clear(_Args&&... __args)
38{
38{
3939   unsigned char * ptr = new unsigned char[sizeof(_Tp)]; // allocate memory
4040   memset(ptr, 0, sizeof(_Tp));
41   return new(ptr) _Tp(std::forward<_Args>(__args)...);
41   return new(ptr) _Tp(std::forward<_Args>(__args)...);
4242}
4343
4444template<typename _Tp>
4545inline _Tp* global_alloc_array_clear(size_t __num)
46{
46{
4747   auto size = sizeof(_Tp) * __num;
4848   unsigned char* ptr = new unsigned char[size]; // allocate memory
4949   memset(ptr, 0, size);
trunk/src/mame/arcade.lst
r253023r253024
26102610taitotz
26112611batlgear        // E68 (c) 1999 Taito
26122612pwrshovl        // E74 (c) 1999 Taito
2613pwrshovla      //
2613pwrshovla       //
26142614landhigh        // E82 (c) 1999 Taito
26152615batlgr2         // E87 (c) 2000 Taito (2.04J)
26162616batlgr2a        // E87 (c) 2000 Taito (2.01J)
26172617styphp          // E98 (c) 2000 Taito
26182618raizpin         // F14 (c) 2002 Taito
2619raizpinj      //
2619raizpinj        //
26202620
26212621invqix          // F34 (c) 2003 Taito Corporation
26222622
r253023r253024
27172717honeydol        // (c) 1995 Barko Corp
27182718twinadv         // (c) 1995 Barko Corp
27192719twinadvk        // (c) 1995 Barko Corp
2720multi96         // (c) 1996 Barko Corp
2720multi96         // (c) 1996 Barko Corp
27212721snowbro3        // (c) 2002 Syrmex
27222722ballboy         // bootleg
27232723// SemiCom games on "SnowBros"-like hardware
r253023r253024
31463146daimakair       // 12/1988 (c) 1988 (Japan)
31473147strider         //  3/1989 (c) 1989 (not explicitly stated but should be USA)
31483148striderua       //  3/1989 (c) 1989 (not explicitly stated but should be USA)
3149strideruc      // conversion
3149strideruc       // conversion
31503150striderj        //  3/1989 (c) 1989 (Japan)
31513151striderjr       //  3/1989 (c) 1989 (Japan)
31523152dynwar          //  4/1989 (c) 1989 (USA)
r253023r253024
41944194grmatch         // (c) 1989 Yankee Game Technology
41954195stratab         // (c) 1990 Strata/Incredible Technologies
41964196stratab1        // (c) 1990 Strata/Incredible Technologies
4197stratabs      // (c) 1990 Strata/Incredible Technologies
4197stratabs        // (c) 1990 Strata/Incredible Technologies
41984198sstrike         // (c) 1990 Strata/Incredible Technologies
41994199gtg             // (c) 1990 Strata/Incredible Technologies
42004200gtgt            // (c) 1990 Strata/Incredible Technologies
r253023r253024
48404840mwalkj          // 1990.08 Micheal Jackson's Moonwalker (Japan, FD1094+8751)
48414841mwalk           // 1990.?? Micheal Jackson's Moonwalker (World, FD1094+8751)
48424842lghost          // 1990.?? Laser Ghost (World, FD1094)
4843lghostj         // 1990.12 Laser Ghost (Japan)
4843lghostj         // 1990.12 Laser Ghost (Japan)
48444844lghostu         // 1991.01 Laser Ghost (US, FD1094)
48454845cltchitr        // 1991.02 Clutch Hitter (US, FD1094)
48464846cltchitrj       // 1991.05 Clutch Hitter (Japan, FD1094)
r253023r253024
55445544            // 1999.?? Pocket Shooting
55455545sambap          // 1999.?? Samba de Amigo (prototype)
55465546spawn           // 1999.?? Spawn In the Demon's Hand
5547tokyobus      // 1999.?? Tokyo Bus Guide (Rev A)
5547tokyobus        // 1999.?? Tokyo Bus Guide (Rev A)
55485548vtennisg        // 1999.?? Virtua Tennis / Power Smash (GD-ROM)
5549554918wheelr        // 2000.01 18 Wheeler Deluxe (Rev A)
5550555018wheels        // 2000.01 18 Wheeler (Standard)
r253023r253024
76877687ikarinc         // A5004 'IW' (c) 1986
76887688ikarijp         // A5004 'IW' (c) 1986 (Japan)
76897689ikarijpb        // bootleg
7690ikariram      // bootleg
7690ikariram        // bootleg
76917691victroad        // A6002      (c) 1986
76927692dogosoke        // A6002      (c) 1986
76937693dogosokb        // bootleg
r253023r253024
82438243mouser          // UPL-83001 (c) 1983
82448244mouserc         // UPL-83001 (c) 1983
82458245nova2001        // UPL-83005 (c) 1983
8246nova2001h      // hack?
8246nova2001h       // hack?
82478247nova2001u       // UPL-83005 (c) [1983] + Universal license
82488248ninjakun        // UPL-84003 (c) 1984 Taito Corporation
82498249raiders5        // UPL-85004 (c) 1985
r253023r253024
88378837skysmash        // (c) 1990 Nihon System Inc.
88388838legionna        // (c) 1992 Tad (World)
88398839legionnau       // (c) 1992 Tad + Fabtek license (US)
8840legionnaj      // (c) 1992 Tad (Japan)
8840legionnaj       // (c) 1992 Tad (Japan)
88418841heatbrl         // (c) 1992 Tad (World version 3)
88428842heatbrl2        // (c) 1992 Tad (World version 2)
88438843heatbrlo        // (c) 1992 Tad (World)
r253023r253024
91799179wrally2         // (c) 1995 - Ref 950510
91809180maniacsp        // (c) 1996 - Ref 922804/2 - (prototype)
91819181maniacsq        // (c) 1996 - Ref 940411 - (unprotected)
9182maniacsqa      // (c) 1996 - Ref 940411
9182maniacsqa       // (c) 1996 - Ref 940411
91839183snowboar        // (c) 1996 - Ref 960419/1
91849184snowboara       // (c) 1996 - Ref 960419/1
91859185bang            // (c) 1998 - Ref ???
r253023r253024
1345913459kas89           // 1989, SFC S.R.L.
1346013460caspoker        // 1987, PM / Beck Elektronik.
1346113461wildpkr         // 199?, TAB Austria.
13462tabpkr         // 199?, TAB Austira
13462tabpkr          // 199?, TAB Austira
1346313463subhuntr        // 1979 Model Racing
1346413464
1346513465manohman        // 199?, Merkur.
r253023r253024
3268032680
3268132681fi6845
3268232682fi8275
32683
trunk/src/mame/audio/carnival.cpp
r253023r253024
203203
204204
205205MACHINE_CONFIG_FRAGMENT( carnival_audio )
206   
206
207207   /* music board */
208208   MCFG_CPU_ADD("audiocpu", I8039, XTAL_3_579545MHz)
209209   MCFG_CPU_PROGRAM_MAP(mboard_map)
trunk/src/mame/audio/dcs.h
r253023r253024
165165   UINT32      m_sounddata_banks;
166166   UINT16      m_sounddata_bank;
167167
168   optional_memory_bank   m_data_bank;
169   memory_bank *         m_rom_page;
170   memory_bank *         m_dram_page;
168   optional_memory_bank    m_data_bank;
169   memory_bank *           m_rom_page;
170   memory_bank *           m_dram_page;
171171
172172   /* I/O with the host */
173173   UINT8       m_auto_ack;
trunk/src/mame/drivers/20pacgal.cpp
r253023r253024
363363void _20pacgal_state::machine_start()
364364{
365365   common_save_state();
366   
366
367367   // membank currently used only by 20pacgal
368368   membank("bank1")->configure_entry(0, memregion("maincpu")->base() + 0x08000);
369369   membank("bank1")->configure_entry(1, m_ram_48000);
trunk/src/mame/drivers/40love.cpp
r253023r253024
996996   m_pix2[0] = 0;
997997   m_pix2[1] = 0;
998998   m_color_bank = false;
999   
999
10001000   /* sound */
10011001   m_sound_nmi_enable = 0;
10021002   m_pending_nmi = 0;
trunk/src/mame/drivers/8080bw.cpp
r253023r253024
33003300   // decrypt rom
33013301   for (int i = 0; i < len; i++)
33023302      dest[i] = BITSWAP8(src[(i & 0x100ff) | (BITSWAP8(i >> 8 & 0xff, 7,3,4,5,0,6,1,2) << 8)],0,6,5,7,4,3,1,2);
3303   
3303
33043304   membank("bank1")->configure_entries(0, 8, memregion("maincpu")->base(), 0x4000);
33053305   membank("bank1")->set_entry(0);
33063306   membank("bank2")->configure_entries(0, 8, memregion("maincpu")->base() + 0x2000, 0x4000);
trunk/src/mame/drivers/arkanoid.cpp
r253023r253024
900900ic46 = 74ls08
901901ic87 = 74ls74
902902~VCC = 'pulled to vcc through a resistor'
903icxx.y = ic xx pin y                                 
903icxx.y = ic xx pin y
904904                                                                               +--------\_/--------+
905905                                                        GND -- =   VSS(GND) -- |  1             28 | <- /RESET  = <- ~VCC & ic32.9 (4Q) & ic26.13 (/reset2) & ic26.1 (/reset1)
906906                         ~VCC & ic26.6 (/1Q) & ic9.10 (I1C) -> =       /INT -> |  2             27 | <> PA7     = -> ic27.18 (8D)
r253023r253024
15271527   ROM_LOAD( "a75-07.ic24",    0x0000, 0x0200, CRC(0af8b289) SHA1(6bc589e8a609b4cf450aebedc8ce02d5d45c970f) )  /* Chip Silkscreen: "A75-07"; red component */
15281528   ROM_LOAD( "a75-08.ic23",    0x0200, 0x0200, CRC(abb002fb) SHA1(c14f56b8ef103600862e7930709d293b0aa97a73) )  /* Chip Silkscreen: "A75-08"; green component */
15291529   ROM_LOAD( "a75-09.ic22",    0x0400, 0x0200, CRC(a7c6c277) SHA1(adaa003dcd981576ea1cc5f697d709b2d6b2ea29) )  /* Chip Silkscreen: "A75-09"; blue component */
1530   
1530
15311531   ROM_REGION( 0x8000, "altgfx", 0 )
15321532   ROM_LOAD( "a75__03(alternate).ic64",   0x00000, 0x8000, CRC(983d4485) SHA1(603a8798d1f531a70a527a5c6122f0ffd6adcfb6) ) // this was found on a legit v1.1 Romstar USA pcb with serial number 29342; the only difference seems to be the first 32 tiles are all 0xFF instead of 0x00. Those tiles don't seem to be used by the game at all. This is likely another incidence of "Taito forgot to clear programmer ram before burning a rom from a sparse s-record/ihex file"
15331533ROM_END
trunk/src/mame/drivers/atom.cpp
r253023r253024
291291-------------------------------------------------*/
292292
293293//static ADDRESS_MAP_START( prophet2_mem, AS_PROGRAM, 8, atom_state )
294//   AM_RANGE(0x0000, 0x09ff) AM_RAM
295//   AM_RANGE(0x0a00, 0x7fff) AM_RAM
296//   AM_RANGE(0x8000, 0x97ff) AM_RAM AM_SHARE("video_ram")
297//   AM_RANGE(0x9800, 0x9fff) AM_RAM
298//   AM_RANGE(0xb000, 0xb003) AM_MIRROR(0x3fc) AM_DEVREADWRITE(INS8255_TAG, i8255_device, read, write)
294//  AM_RANGE(0x0000, 0x09ff) AM_RAM
295//  AM_RANGE(0x0a00, 0x7fff) AM_RAM
296//  AM_RANGE(0x8000, 0x97ff) AM_RAM AM_SHARE("video_ram")
297//  AM_RANGE(0x9800, 0x9fff) AM_RAM
298//  AM_RANGE(0xb000, 0xb003) AM_MIRROR(0x3fc) AM_DEVREADWRITE(INS8255_TAG, i8255_device, read, write)
299299////  AM_RANGE(0xb400, 0xb403) AM_DEVREADWRITE(MC6854_TAG, mc6854_device, read, write)
300300////  AM_RANGE(0xb404, 0xb404) AM_READ_PORT("ECONET")
301//   AM_RANGE(0xb800, 0xb80f) AM_MIRROR(0x3f0) AM_DEVREADWRITE(R6522_TAG, via6522_device, read, write)
302//   AM_RANGE(0xc000, 0xffff) AM_ROM AM_REGION(SY6502_TAG, 0)
301//  AM_RANGE(0xb800, 0xb80f) AM_MIRROR(0x3f0) AM_DEVREADWRITE(R6522_TAG, via6522_device, read, write)
302//  AM_RANGE(0xc000, 0xffff) AM_ROM AM_REGION(SY6502_TAG, 0)
303303//ADDRESS_MAP_END
304304
305305/***************************************************************************
r253023r253024
859859-------------------------------------------------*/
860860
861861//static MACHINE_CONFIG_DERIVED( prophet2, atom )
862//   /* basic machine hardware */
863//   MCFG_CPU_MODIFY(SY6502_TAG)
864//   MCFG_CPU_PROGRAM_MAP(prophet2_mem)
862//  /* basic machine hardware */
863//  MCFG_CPU_MODIFY(SY6502_TAG)
864//  MCFG_CPU_PROGRAM_MAP(prophet2_mem)
865865//
866//   /* fdc */
867//   MCFG_DEVICE_REMOVE(I8271_TAG)
868//   MCFG_DEVICE_REMOVE(I8271_TAG ":0")
869//   MCFG_DEVICE_REMOVE(I8271_TAG ":1")
866//  /* fdc */
867//  MCFG_DEVICE_REMOVE(I8271_TAG)
868//  MCFG_DEVICE_REMOVE(I8271_TAG ":0")
869//  MCFG_DEVICE_REMOVE(I8271_TAG ":1")
870870//
871//   /* Software lists */
872//   MCFG_SOFTWARE_LIST_REMOVE("flop_list")
871//  /* Software lists */
872//  MCFG_SOFTWARE_LIST_REMOVE("flop_list")
873873//MACHINE_CONFIG_END
874874
875875/*-------------------------------------------------
r253023r253024
885885-------------------------------------------------*/
886886
887887//static MACHINE_CONFIG_DERIVED( atommc, atom )
888//   /* Software lists */
889//   MCFG_SOFTWARE_LIST_ADD("mmc_list","atom_mmc")
890//   MCFG_SOFTWARE_LIST_REMOVE("flop_list")
888//  /* Software lists */
889//  MCFG_SOFTWARE_LIST_ADD("mmc_list","atom_mmc")
890//  MCFG_SOFTWARE_LIST_REMOVE("flop_list")
891891//MACHINE_CONFIG_END
892892
893893/***************************************************************************
r253023r253024
938938-------------------------------------------------*/
939939
940940//ROM_START( atommc )
941//   ROM_REGION( 0x4000, SY6502_TAG, 0 )
942//   ROM_LOAD( "abasic.ic20", 0x0000, 0x1000, CRC(289b7791) SHA1(0072c83458a9690a3ea1f6094f0f38cf8e96a445) )
943//   ROM_CONTINUE(            0x3000, 0x1000 )
944//   ROM_LOAD( "afloat.ic21", 0x1000, 0x1000, CRC(81d86af7) SHA1(ebcde5b36cb3a3344567cbba4c7b9fde015f4802) )
945//   ROM_LOAD( "atommc2-2.9-a000.rom", 0x2000, 0x1000, CRC(ba73e36c) SHA1(ea9739e96f3283c90b5306288c796fc01144b771) )
941//  ROM_REGION( 0x4000, SY6502_TAG, 0 )
942//  ROM_LOAD( "abasic.ic20", 0x0000, 0x1000, CRC(289b7791) SHA1(0072c83458a9690a3ea1f6094f0f38cf8e96a445) )
943//  ROM_CONTINUE(            0x3000, 0x1000 )
944//  ROM_LOAD( "afloat.ic21", 0x1000, 0x1000, CRC(81d86af7) SHA1(ebcde5b36cb3a3344567cbba4c7b9fde015f4802) )
945//  ROM_LOAD( "atommc2-2.9-a000.rom", 0x2000, 0x1000, CRC(ba73e36c) SHA1(ea9739e96f3283c90b5306288c796fc01144b771) )
946946//ROM_END
947947
948948DRIVER_INIT_MEMBER(atomeb_state, atomeb)
trunk/src/mame/drivers/barata.cpp
r253023r253024
5454   DECLARE_WRITE8_MEMBER(port2_w);
5555   DECLARE_READ8_MEMBER(port2_r);
5656   void fpga_send(unsigned char cmd);
57   
57
5858   required_device<cpu_device> m_maincpu;
5959   required_device<dac_device> m_dac;
6060private:
trunk/src/mame/drivers/bfm_sc1.cpp
r253023r253024
10891089   MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfm_sc1_state, reel4_optic_cb))
10901090   MCFG_STARPOINT_48STEP_ADD("reel5")
10911091   MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfm_sc1_state, reel5_optic_cb))
1092   
1092
10931093   MCFG_DEVICE_ADD("meters", METERS, 0)
10941094   MCFG_METERS_NUMBER(8)
10951095MACHINE_CONFIG_END
trunk/src/mame/drivers/bfm_sc2.cpp
r253023r253024
605605         }
606606      }
607607   }
608   
608
609609   if ( data & 0x1F ) m_maincpu->set_input_line(M6809_FIRQ_LINE, ASSERT_LINE );
610610}
611611
r253023r253024
36563656   MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfm_sc2_state, reel4_optic_cb))
36573657   MCFG_STARPOINT_48STEP_ADD("reel5")
36583658   MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfm_sc2_state, reel5_optic_cb))
3659   
3659
36603660   MCFG_FRAGMENT_ADD(_8meters)
36613661MACHINE_CONFIG_END
36623662
r253023r253024
36693669static MACHINE_CONFIG_DERIVED( scorpion3, scorpion2 )
36703670   MCFG_CPU_MODIFY("maincpu")
36713671   MCFG_CPU_PROGRAM_MAP(memmap_no_vid)
3672   
3672
36733673   MCFG_DEVICE_REMOVE("meters")
36743674   MCFG_FRAGMENT_ADD(_5meters)
36753675MACHINE_CONFIG_END
r253023r253024
37153715   MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfm_sc2_state, reel4_optic_cb))
37163716   MCFG_STARPOINT_48STEP_ADD("reel5")
37173717   MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(bfm_sc2_state, reel5_optic_cb))
3718   
3718
37193719   MCFG_FRAGMENT_ADD( _8meters)
37203720MACHINE_CONFIG_END
37213721
trunk/src/mame/drivers/bfmsys85.cpp
r253023r253024
754754   b85_find_project_string();
755755}
756756
757#define MACHINE_FLAGS                 MACHINE_NOT_WORKING|MACHINE_SUPPORTS_SAVE|MACHINE_REQUIRES_ARTWORK
758#define MACHINE_FLAGS_MECHANICAL       MACHINE_FLAGS|MACHINE_MECHANICAL
757#define MACHINE_FLAGS                   MACHINE_NOT_WORKING|MACHINE_SUPPORTS_SAVE|MACHINE_REQUIRES_ARTWORK
758#define MACHINE_FLAGS_MECHANICAL        MACHINE_FLAGS|MACHINE_MECHANICAL
759759
760760// PROJECT NUMBER 5539  2P CASH EXPLOSION  GAME No 39-350-190 -   29-MAR-1989 11:45:25
761761GAME( 1989, b85cexpl    , 0         , bfmsys85, bfmsys85, bfmsys85_state,       decode  ,     0,       "BFM",   "Cash Explosion (System 85)", MACHINE_FLAGS )
trunk/src/mame/drivers/casloopy.cpp
r253023r253024
320320
321321WRITE16_MEMBER(casloopy_state::vregs_w)
322322{
323//   if(offset != 6/2)
324//      printf("%08x %08x\n",offset*2,data);
323//  if(offset != 6/2)
324//      printf("%08x %08x\n",offset*2,data);
325325}
326326
327327READ16_MEMBER(casloopy_state::pal_r)
trunk/src/mame/drivers/cobra.cpp
r253023r253024
22882288               // GFX register select
22892289               m_gfx_register_select = w[3];
22902290
2291            //   printf("GFX: register select %08X\n", m_gfx_register_select);
2291            //  printf("GFX: register select %08X\n", m_gfx_register_select);
22922292            }
22932293            else if (w2 == 0x10500018)
22942294            {
22952295               // register write to the register selected above?
22962296               // 64-bit registers, top 32-bits in word 2, low 32-bit in word 3
2297            //   printf("GFX: register write %08X: %08X %08X\n", m_gfx_register_select, w[2], w[3]);
2297            //  printf("GFX: register write %08X: %08X %08X\n", m_gfx_register_select, w[2], w[3]);
22982298
22992299               gfx_write_reg(((UINT64)(w[2]) << 32) | w[3]);
23002300            }
trunk/src/mame/drivers/dccons.cpp
r253023r253024
681681   DREAMCAST_COMMON_BIOS
682682
683683   ROM_REGION(0x020000, "dcflash", 0)
684   ROM_LOAD( "dcus_ntsc.bin", 0x000000, 0x020000, BAD_DUMP CRC(e6862dd0) SHA1(24875ce85c011600e73b1c3fd2b341824cbf8544) )   // dumped from VA2.4 mobo with 1.022 BIOS
684   ROM_LOAD( "dcus_ntsc.bin", 0x000000, 0x020000, BAD_DUMP CRC(e6862dd0) SHA1(24875ce85c011600e73b1c3fd2b341824cbf8544) )  // dumped from VA2.4 mobo with 1.022 BIOS
685685ROM_END
686686
687687ROM_START( dceu )
r253023r253024
693693
694694ROM_START( dcjp )
695695   DREAMCAST_COMMON_BIOS
696   ROM_SYSTEM_BIOS(4, "1004", "v1.004 (Japan)")   // oldest known mass production version, supports Japan region only
696   ROM_SYSTEM_BIOS(4, "1004", "v1.004 (Japan)")    // oldest known mass production version, supports Japan region only
697697   ROM_LOAD_BIOS(4, "mpr-21068.ic501", 0x000000, 0x200000, CRC(5454841f) SHA1(1ea132c0fbbf07ef76789eadc07908045c089bd6) )
698698
699699   ROM_REGION(0x020000, "dcflash", 0)
r253023r253024
706706// otherwise it boots from EPROM which contain system checker software (last dump)
707707ROM_START( dcdev )
708708   ROM_REGION(0x200000, "maincpu", 0)
709   ROM_SYSTEM_BIOS(0, "1011", "Katana Set5 v1.011 (World)")   // BOOT flash rom update from Katana SDK R9-R11, WinCE SDK v2.1
709   ROM_SYSTEM_BIOS(0, "1011", "Katana Set5 v1.011 (World)")    // BOOT flash rom update from Katana SDK R9-R11, WinCE SDK v2.1
710710   ROM_LOAD_BIOS(0, "set5v1.011.ic507", 0x000000, 0x200000, CRC(2186e0e5) SHA1(6bd18fb83f8fdb56f1941e079580e5dd672a6dad) )
711   ROM_SYSTEM_BIOS(1, "1001", "Katana Set5 v1.001 (Japan)")   // BOOT flash rom update from WinCE SDK v1.0
711   ROM_SYSTEM_BIOS(1, "1001", "Katana Set5 v1.001 (Japan)")    // BOOT flash rom update from WinCE SDK v1.0
712712   ROM_LOAD_BIOS(1, "set5v1.001.ic507", 0x000000, 0x200000, CRC(5702d38f) SHA1(ea7a3ae1de73683008dd795c252941a4fc81b42e) )
713713
714714   // 27C160 EPROM (DIP42) IC??? labeled
trunk/src/mame/drivers/didact.cpp
r253023r253024
4141 * |____________________________________________________________________________________________________________|        |______ |  _|||_  |___________________________________|
4242 *
4343 *  _____________________________________________________________________________________________   ___________________________________________________________________________
44 * |The Didact Mikrodator 6802 CPU board by Lars Björklund 1983                            (  ) |  |The Didact Mikrodator 6802 TB16 board by Lars Björklund 1983               |
44 * |The Didact Mikrodator 6802 CPU board by Lars Bjorklund 1983                            (  ) |  |The Didact Mikrodator 6802 TB16 board by Lars Bj??rklund 1983               |
4545 * |                                                                                     +----= |  |             +-|||||||-+                                         ______    |
4646 * |                                                                                     |    = |  | CA2 Tx      |terminal |                                        |  ()  |   |
4747 * |                                                                                     |    = |  | PA7 Rx      +---------+               +----------+  C1nF,<=R18k|      |   |
r253023r253024
7777 *
7878 * History of Didact
7979 *------------------
80 * Didact Läromedelsproduktion was started in Linköping in Sweden by Anders Andersson, Arne Kullbjer and
81 * Lars Björklund. They constructed a series of microcomputers for educational purposes such as "Mikrodator 6802",
80 * Didact Laromedelsproduktion was started in Linkoping in Sweden by Anders Andersson, Arne Kullbjer and
81 * Lars Bjorklund. They constructed a series of microcomputers for educational purposes such as "Mikrodator 6802",
8282 * Esselte 100 and the Candela computer for the swedish schools to educate the students in assembly programming
8383 * and BASIC for electro mechanical applications such as stepper motors, simple process control, buttons
8484 * and LED:s. Didact designs were marketed by Esselte Studium to the swedish schools. The Candela computer
r253023r253024
9292 * http://elektronikforumet.com/forum/download/file.php?id=63988&mode=view
9393 * http://elektronikforumet.com/forum/viewtopic.php?f=2&t=79576&start=150#p1203915
9494 *
95 *   TODO:
95 *  TODO:
9696 *  Didact designs:    mp68a, md6802, md6802v3, Esselte 100, Candela
9797 * --------------------------------------------------------------------------
9898 *  - Add PCB layouts   OK     OK
r253023r253024
110110#include "emu.h"
111111#include "cpu/m6800/m6800.h"
112112#include "machine/6821pia.h" // For all boards
113#include "video/dm9368.h"    // For the mp68a
113#include "video/dm9368.h"    // For the mp68a
114114#include "machine/74145.h"   // For the md6802
115115// Generated artwork includes
116116#include "mp68a.lh"
r253023r253024
132132/* Didact base class */
133133class didact_state : public driver_device
134134{
135 public:
135   public:
136136   didact_state(const machine_config &mconfig, device_type type, const char * tag)
137    : driver_device(mconfig, type, tag)
137      : driver_device(mconfig, type, tag)
138138      ,m_io_line0(*this, "LINE0")
139139      ,m_io_line1(*this, "LINE1")
140140      ,m_io_line2(*this, "LINE2")
r253023r253024
166166/* Esselte 100 driver class */
167167class e100_state : public didact_state
168168{
169 public:
169   public:
170170   e100_state(const machine_config &mconfig, device_type type, const char * tag)
171    : didact_state(mconfig, type, tag),
171      : didact_state(mconfig, type, tag),
172172      m_maincpu(*this, "maincpu"),
173173      m_pia1(*this, "pia1"),
174174      m_pia2(*this, "pia2")
175      { }
175      { }
176176   required_device<m6802_cpu_device> m_maincpu;
177177   virtual void machine_reset() override { m_maincpu->reset(); LOG(("--->%s()\n", FUNCNAME)); };
178178protected:
r253023r253024
183183/* Mikrodator 6802 driver class */
184184class md6802_state : public didact_state
185185{
186 public:
186   public:
187187   md6802_state(const machine_config &mconfig, device_type type, const char * tag)
188    : didact_state(mconfig, type, tag)
188      : didact_state(mconfig, type, tag)
189189      ,m_maincpu(*this, "maincpu")
190190      ,m_tb16_74145(*this, "tb16_74145")
191191      ,m_segments(0)
192192      ,m_pia1(*this, "pia1")
193193      ,m_pia2(*this, "pia2")
194      { }
194      { }
195195   required_device<m6802_cpu_device> m_maincpu;
196196   required_device<ttl74145_device> m_tb16_74145;
197197   UINT8 m_segments;
r253023r253024
228228      LOG(("%s()-->%02x %02x %02x %02x modified by %02x displaying %02x\n", FUNCNAME, m_line0, m_line1, m_line2, m_line3, m_shift, ls145));
229229#endif
230230
231    // Mask out those rows that has a button pressed
231   // Mask out those rows that has a button pressed
232232   pa &= ~(((~m_line0 & ls145 ) != 0) ? 1 : 0);
233233   pa &= ~(((~m_line1 & ls145 ) != 0) ? 2 : 0);
234234   pa &= ~(((~m_line2 & ls145 ) != 0) ? 4 : 0);
r253023r253024
236236
237237   if (m_shift)
238238   {
239      pa &= 0x7f;     // Clear shift bit if button being pressed (PA7) to ground (internal pullup)
239      pa &= 0x7f;   // Clear shift bit if button being pressed (PA7) to ground (internal pullup)
240240      LOG( ("SHIFT is pressed\n") );
241241   }
242242
r253023r253024
253253{
254254   UINT8 digit_nbr;
255255
256//   LOG(("--->%s(%02x)\n", FUNCNAME, data));
256//  LOG(("--->%s(%02x)\n", FUNCNAME, data));
257257
258258   digit_nbr = (data >> 4) & 0x07;
259    m_tb16_74145->write( digit_nbr );
259   m_tb16_74145->write( digit_nbr );
260260   if (digit_nbr < 6)
261261   {
262262      output().set_digit_value( digit_nbr, m_segments);
r253023r253024
266266/* PIA 2 Port B is all outputs to drive the display so it is very unlikelly that this function is called */
267267READ8_MEMBER( md6802_state::pia2_kbB_r )
268268{
269    LOG( ("Warning, trying to read from Port B designated to drive the display, please check why\n") );
270    logerror("Warning, trying to read from Port B designated to drive the display, please check why\n");
269   LOG( ("Warning, trying to read from Port B designated to drive the display, please check why\n") );
270   logerror("Warning, trying to read from Port B designated to drive the display, please check why\n");
271271   return 0;
272272}
273273
274274/* Port B is fully used ouputting the segment pattern to the display */
275275WRITE8_MEMBER( md6802_state::pia2_kbB_w )
276276{
277//   LOG(("--->%s(%02x)\n", FUNCNAME, data));
277//  LOG(("--->%s(%02x)\n", FUNCNAME, data));
278278
279279   /* Store the segment pattern but do not lit up the digit here, done by pulling the correct cathode low on Port A */
280280   m_segments = BITSWAP8(data, 0, 4, 5, 3, 2, 1, 7, 6);
r253023r253024
299299{
300300   LOG(("--->%s()\n", FUNCNAME));
301301   m_led = 1;
302   m_maincpu->reset();
302   m_maincpu->reset();
303303}
304304
305305/* Didact mp68a driver class */
r253023r253024
310310#define PIA6820 PIA6821
311311class mp68a_state : public didact_state
312312{
313 public:
313   public:
314314   mp68a_state(const machine_config &mconfig, device_type type, const char * tag)
315    : didact_state(mconfig, type, tag)
315      : didact_state(mconfig, type, tag)
316316      ,m_maincpu(*this, "maincpu")
317317      ,m_digit0(*this, "digit0")
318318      ,m_digit1(*this, "digit1")
r253023r253024
322322      ,m_digit5(*this, "digit5")
323323      ,m_pia1(*this, "pia1")
324324      ,m_pia2(*this, "pia2")
325      { }
325      { }
326326
327327   required_device<m6800_cpu_device> m_maincpu;
328328
r253023r253024
367367      but we are using data read from the port. */
368368   digit_nbr = (data >> 4) & 0x07;
369369
370    /* There is actually only one 9368 and a 74145 to drive the cathode of the right digit low */
371    /* This can be emulated by prentending there are one 9368 per digit, at least for now      */
370   /* There is actually only one 9368 and a 74145 to drive the cathode of the right digit low */
371   /* This can be emulated by prentending there are one 9368 per digit, at least for now      */
372372   switch (digit_nbr)
373373   {
374374   case 0: m_digit0->a_w(data & 0x0f); break;
r253023r253024
406406      while (a012 > 0 && !(line & (1 << --a012)));
407407   }
408408
409   pb   = a012;        // A0-A2 -> PB0-PB3
409   pb  = a012;       // A0-A2 -> PB0-PB3
410410
411411   if (m_shift)
412412   {
413      pb |= 0x80;     // Set shift bit (PB7)
413      pb |= 0x80;   // Set shift bit (PB7)
414414      m_shift = 0;  // Reset flip flop
415415      output().set_led_value(m_led, m_shift);
416416      LOG( ("SHIFT is released\n") );
r253023r253024
489489
490490static INPUT_PORTS_START( md6802 )
491491   PORT_START("LINE0") /* KEY ROW 0 */
492   PORT_BIT(0x01, 0x01, IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0)   PORT_CHAR('0')
493   PORT_BIT(0x02, 0x02, IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1)   PORT_CHAR('1')
494   PORT_BIT(0x04, 0x04, IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2)   PORT_CHAR('2')
495   PORT_BIT(0x08, 0x08, IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3)   PORT_CHAR('3')
492   PORT_BIT(0x01, 0x01, IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0)  PORT_CHAR('0')
493   PORT_BIT(0x02, 0x02, IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1)  PORT_CHAR('1')
494   PORT_BIT(0x04, 0x04, IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2)  PORT_CHAR('2')
495   PORT_BIT(0x08, 0x08, IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3)  PORT_CHAR('3')
496496   PORT_BIT(0xf0, 0x00, IPT_UNUSED )
497497
498498   PORT_START("LINE1") /* KEY ROW 1 */
499   PORT_BIT(0x01, 0x01, IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4)   PORT_CHAR('4')
500   PORT_BIT(0x02, 0x02, IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5)   PORT_CHAR('5')
501   PORT_BIT(0x04, 0x04, IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6)   PORT_CHAR('6')
502   PORT_BIT(0x08, 0x08, IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7)   PORT_CHAR('7')
499   PORT_BIT(0x01, 0x01, IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4)  PORT_CHAR('4')
500   PORT_BIT(0x02, 0x02, IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5)  PORT_CHAR('5')
501   PORT_BIT(0x04, 0x04, IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6)  PORT_CHAR('6')
502   PORT_BIT(0x08, 0x08, IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7)  PORT_CHAR('7')
503503   PORT_BIT(0xf0, 0x00, IPT_UNUSED )
504504
505505   PORT_START("LINE2") /* KEY ROW 2 */
506   PORT_BIT(0x01, 0x01, IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8)   PORT_CHAR('8')
507   PORT_BIT(0x02, 0x02, IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9)   PORT_CHAR('9')
508   PORT_BIT(0x04, 0x04, IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A)   PORT_CHAR('A')
509   PORT_BIT(0x08, 0x08, IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B)   PORT_CHAR('B')
506   PORT_BIT(0x01, 0x01, IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8)  PORT_CHAR('8')
507   PORT_BIT(0x02, 0x02, IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9)  PORT_CHAR('9')
508   PORT_BIT(0x04, 0x04, IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A)  PORT_CHAR('A')
509   PORT_BIT(0x08, 0x08, IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B)  PORT_CHAR('B')
510510   PORT_BIT(0xf0, 0x00, IPT_UNUSED )
511511
512512   PORT_START("LINE3") /* KEY ROW 3 */
513   PORT_BIT(0x01, 0x01, IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C)   PORT_CHAR('C')
514   PORT_BIT(0x02, 0x02, IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D)   PORT_CHAR('D')
515   PORT_BIT(0x04, 0x04, IPT_KEYBOARD) PORT_NAME("E") PORT_CODE(KEYCODE_E)   PORT_CHAR('E')
516   PORT_BIT(0x08, 0x08, IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F)   PORT_CHAR('F')
513   PORT_BIT(0x01, 0x01, IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C)  PORT_CHAR('C')
514   PORT_BIT(0x02, 0x02, IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D)  PORT_CHAR('D')
515   PORT_BIT(0x04, 0x04, IPT_KEYBOARD) PORT_NAME("E") PORT_CODE(KEYCODE_E)  PORT_CHAR('E')
516   PORT_BIT(0x08, 0x08, IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F)  PORT_CHAR('F')
517517   PORT_BIT(0xf0, 0x00, IPT_UNUSED )
518518
519519   PORT_START("LINE4") /* Special KEY ROW for reset and Shift/'*' keys */
r253023r253024
524524
525525static INPUT_PORTS_START( mp68a )
526526   PORT_START("LINE0") /* KEY ROW 0 */
527   PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C)   PORT_CHAR('C')
528   PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D)   PORT_CHAR('D')
529   PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("E") PORT_CODE(KEYCODE_E)   PORT_CHAR('E')
530   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F)   PORT_CHAR('F')
527   PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("C") PORT_CODE(KEYCODE_C)    PORT_CHAR('C')
528   PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("D") PORT_CODE(KEYCODE_D)    PORT_CHAR('D')
529   PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("E") PORT_CODE(KEYCODE_E)    PORT_CHAR('E')
530   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F") PORT_CODE(KEYCODE_F)    PORT_CHAR('F')
531531   PORT_BIT(0x0f, IP_ACTIVE_HIGH, IPT_UNUSED )
532532
533533   PORT_START("LINE1") /* KEY ROW 1 */
534   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8)   PORT_CHAR('8')
535   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9)   PORT_CHAR('9')
536   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A)   PORT_CHAR('A')
537   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B)   PORT_CHAR('B')
534   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8)    PORT_CHAR('8')
535   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9)    PORT_CHAR('9')
536   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("A") PORT_CODE(KEYCODE_A)    PORT_CHAR('A')
537   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("B") PORT_CODE(KEYCODE_B)    PORT_CHAR('B')
538538   PORT_BIT(0xf0, IP_ACTIVE_HIGH, IPT_UNUSED )
539539
540540   PORT_START("LINE2") /* KEY ROW 2 */
541   PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4)   PORT_CHAR('4')
542   PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5)   PORT_CHAR('5')
543   PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6)   PORT_CHAR('6')
544   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7)   PORT_CHAR('7')
541   PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4)    PORT_CHAR('4')
542   PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5)    PORT_CHAR('5')
543   PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6)    PORT_CHAR('6')
544   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7)    PORT_CHAR('7')
545545   PORT_BIT(0x0f, IP_ACTIVE_HIGH, IPT_UNUSED )
546546
547547   PORT_START("LINE3") /* KEY ROW 3 */
548   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0)   PORT_CHAR('0')
549   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1)   PORT_CHAR('1')
550   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2)   PORT_CHAR('2')
551   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3)   PORT_CHAR('3')
548   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0)    PORT_CHAR('0')
549   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1)    PORT_CHAR('1')
550   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2)    PORT_CHAR('2')
551   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3)    PORT_CHAR('3')
552552   PORT_BIT(0xf0, IP_ACTIVE_HIGH, IPT_UNUSED )
553553
554554   PORT_START("LINE4") /* Special KEY ROW for reset and Shift/'*' keys */
r253023r253024
559559
560560TIMER_DEVICE_CALLBACK_MEMBER(didact_state::scan_artwork)
561561{
562   //   LOG(("--->%s()\n", FUNCNAME));
562   //  LOG(("--->%s()\n", FUNCNAME));
563563
564564   // Poll the artwork Reset key
565565   if ( (m_io_line4->read() & 0x04) )
r253023r253024
567567      LOG( ("RESET is pressed, resetting the CPU\n") );
568568      m_shift = 0;
569569      output().set_led_value(m_led, m_shift); // For mp68a only
570      if (m_reset == 0)
570      if (m_reset == 0)
571571      {
572572         machine_reset();
573573      }
574574      m_reset = 1; // Inhibit multiple resets
575575   }
576576
577    // Poll the artwork SHIFT/* key
577      // Poll the artwork SHIFT/* key
578578   else if ( (m_io_line4->read() & 0x08) )
579579   {
580580      LOG( ("%s", !m_shift ? "SHIFT is set\n" : "") );
r253023r253024
631631MACHINE_CONFIG_END
632632
633633static MACHINE_CONFIG_START( mp68a, mp68a_state )
634   // Clock source is based on a N9602N Dual Retriggerable Resettable Monostable Multivibrator oscillator at aprox 505KHz.
634   // Clock source is based on a N9602N Dual Retriggerable Resettable Monostable Multivibrator oscillator at aprox 505KHz.
635635   // Trimpot seems broken/stuck at 5K Ohm thu. ROM code 1Ms delay loops suggest 1MHz+
636   MCFG_CPU_ADD("maincpu", M6800, 505000)
636   MCFG_CPU_ADD("maincpu", M6800, 505000)
637637   MCFG_CPU_PROGRAM_MAP(mp68a_map)
638638   MCFG_DEFAULT_LAYOUT(layout_mp68a)
639639
r253023r253024
646646   /* --init----------------------- */
647647   /* 0x0BAF 0x601 (Control A) = 0x30 - CA2 is low and enable DDRA */
648648   /* 0x0BB1 0x603 (Control B) = 0x30 - CB2 is low and enable DDRB */
649   /* 0x0BB5 0x600 (DDR A)      = 0xFF - Port A all outputs and set to 0 (zero) */
650   /* 0x0BB9 0x602 (DDR B)      = 0x50 - Port B two outputs and set to 0 (zero) */
649   /* 0x0BB5 0x600 (DDR A)     = 0xFF - Port A all outputs and set to 0 (zero) */
650   /* 0x0BB9 0x602 (DDR B)     = 0x50 - Port B two outputs and set to 0 (zero) */
651651   /* 0x0BBD 0x601 (Control A) = 0x34 - CA2 is low and lock DDRA */
652652   /* 0x0BBF 0x603 (Control B) = 0x34 - CB2 is low and lock DDRB */
653   /* 0x0BC3 0x602 (Port B)   = 0x40 - Turn on display via RBI* on  */
653   /* 0x0BC3 0x602 (Port B)    = 0x40 - Turn on display via RBI* on  */
654654   /* --execution-wait for key loop-- */
655   /* 0x086B Update display sequnc, see below                       */
656   /* 0x0826 CB1 read         = 0x603 (Control B)    - is a key presssed? */
655   /* 0x086B Update display sequnc, see below                            */
656   /* 0x0826 CB1 read          = 0x603 (Control B)  - is a key presssed? */
657657   MCFG_PIA_WRITEPA_HANDLER(WRITE8(mp68a_state, pia2_kbA_w))
658658   MCFG_PIA_READPA_HANDLER(READ8(mp68a_state, pia2_kbA_r))
659659   MCFG_PIA_WRITEPB_HANDLER(WRITE8(mp68a_state, pia2_kbB_w))
r253023r253024
663663   MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("maincpu", m6800_cpu_device, irq_line)) /* Not used by ROM. Combined trace to CPU IRQ with IRQA */
664664
665665   /* Display - sequence outputting all '0':s at start */
666   /* 0x086B 0x600 (Port A)   = 0x00 */
667   /* 0x086B 0x600 (Port A)   = 0x70 */
668   /* 0x086B 0x600 (Port A)   = 0x10 */
669   /* 0x086B 0x600 (Port A)   = 0x70 */
670   /* 0x086B 0x600 (Port A)   = 0x20 */
671   /* 0x086B 0x600 (Port A)   = 0x70 */
672   /* 0x086B 0x600 (Port A)   = 0x30 */
673   /* 0x086B 0x600 (Port A)   = 0x70 */
674   /* 0x086B 0x600 (Port A)   = 0x40 */
675   /* 0x086B 0x600 (Port A)   = 0x70 */
676   /* 0x086B 0x600 (Port A)   = 0x50 */
677   /* 0x086B 0x600 (Port A)   = 0x70 */
666   /* 0x086B 0x600 (Port A)    = 0x00 */
667   /* 0x086B 0x600 (Port A)    = 0x70 */
668   /* 0x086B 0x600 (Port A)    = 0x10 */
669   /* 0x086B 0x600 (Port A)    = 0x70 */
670   /* 0x086B 0x600 (Port A)    = 0x20 */
671   /* 0x086B 0x600 (Port A)    = 0x70 */
672   /* 0x086B 0x600 (Port A)    = 0x30 */
673   /* 0x086B 0x600 (Port A)    = 0x70 */
674   /* 0x086B 0x600 (Port A)    = 0x40 */
675   /* 0x086B 0x600 (Port A)    = 0x70 */
676   /* 0x086B 0x600 (Port A)    = 0x50 */
677   /* 0x086B 0x600 (Port A)    = 0x70 */
678678   MCFG_DEVICE_ADD("digit0", DM9368, 0)
679679   MCFG_OUTPUT_INDEX(0)
680680   MCFG_DEVICE_ADD("digit1", DM9368, 0)
r253023r253024
715715ROM_END
716716
717717//    YEAR  NAME        PARENT      COMPAT  MACHINE     INPUT   CLASS            INIT        COMPANY             FULLNAME           FLAGS
718COMP( 1979, mp68a,       0,          0,      mp68a,      mp68a,  driver_device,   0,          "Didact AB",        "mp68a",           MACHINE_NO_SOUND_HW )
719COMP( 1982, e100,       0,          0,      e100,       e100,   driver_device,   0,          "Didact AB",        "Esselte 100",     MACHINE_IS_SKELETON )
720COMP( 1983, md6802,       0,          0,      md6802,     md6802, driver_device,   0,          "Didact AB",        "Mikrodator 6802", MACHINE_NO_SOUND_HW )
718COMP( 1979, mp68a,      0,          0,      mp68a,      mp68a,  driver_device,   0,          "Didact AB",        "mp68a",           MACHINE_NO_SOUND_HW )
719COMP( 1982, e100,       0,          0,      e100,       e100,   driver_device,   0,          "Didact AB",        "Esselte 100",     MACHINE_IS_SKELETON )
720COMP( 1983, md6802,     0,          0,      md6802,     md6802, driver_device,   0,          "Didact AB",        "Mikrodator 6802", MACHINE_NO_SOUND_HW )
trunk/src/mame/drivers/dynax.cpp
r253023r253024
43344334{
43354335   UINT8 *ROM = memregion("maincpu")->base();
43364336   int bank_n = (memregion("maincpu")->bytes() - 0x10000) / 0x8000;
4337   
4337
43384338   m_hnoridur_ptr = &ROM[0x10000 + 0x18 * 0x8000];
43394339   save_pointer(NAME(m_hnoridur_ptr), 0x8000);
43404340
trunk/src/mame/drivers/fastinvaders.cpp
r253023r253024
3636   required_device<cpu_device> m_maincpu;
3737   required_device<gfxdecode_device> m_gfxdecode;
3838   required_shared_ptr<UINT8> m_videoram;
39   
39
4040   optional_device<i8275_device> m_crtc8275;
4141   optional_device<mc6845_device> m_crtc6845;
4242   required_device<pic8259_device> m_pic8259;
r253023r253024
5252   UINT8 m_scudi;
5353   UINT8 m_cannone;
5454   UINT8 m_riga_inf;
55   
55
5656   UINT8 m_irq0;
5757   UINT8 m_irq1;
5858   UINT8 m_irq2;
r253023r253024
6161   UINT8 m_irq5;
6262   UINT8 m_irq6;
6363   UINT8 m_irq7;
64   
65   
64
65
6666   UINT8 m_start2_value;
6767   UINT8 m_dma1;
6868   UINT8 m_io_40;
6969   UINT8 m_hsync;
70   
70
7171   DECLARE_WRITE8_MEMBER(io_40_w);
72   
72
7373   DECLARE_READ8_MEMBER(io_60_r);
7474   DECLARE_WRITE8_MEMBER(io_70_w);
7575   DECLARE_WRITE8_MEMBER(io_90_w);
r253023r253024
7979   DECLARE_WRITE8_MEMBER(io_d0_w);
8080   DECLARE_WRITE8_MEMBER(io_e0_w);
8181   DECLARE_WRITE8_MEMBER(io_f0_w);
82     
83   
84   DECLARE_INPUT_CHANGED_MEMBER(coin_inserted);   
85   DECLARE_INPUT_CHANGED_MEMBER(start);   
86   DECLARE_INPUT_CHANGED_MEMBER(start2);   
87   DECLARE_INPUT_CHANGED_MEMBER(tilt);   
88   DECLARE_INPUT_CHANGED_MEMBER(in0);   
89   DECLARE_INPUT_CHANGED_MEMBER(in1);   
90   DECLARE_INPUT_CHANGED_MEMBER(in2);   
91   DECLARE_INPUT_CHANGED_MEMBER(in3);   
92   DECLARE_INPUT_CHANGED_MEMBER(in4);   
93   DECLARE_INPUT_CHANGED_MEMBER(in5);   
94   DECLARE_INPUT_CHANGED_MEMBER(in6);   
95   
82
83
84   DECLARE_INPUT_CHANGED_MEMBER(coin_inserted);
85   DECLARE_INPUT_CHANGED_MEMBER(start);
86   DECLARE_INPUT_CHANGED_MEMBER(start2);
87   DECLARE_INPUT_CHANGED_MEMBER(tilt);
88   DECLARE_INPUT_CHANGED_MEMBER(in0);
89   DECLARE_INPUT_CHANGED_MEMBER(in1);
90   DECLARE_INPUT_CHANGED_MEMBER(in2);
91   DECLARE_INPUT_CHANGED_MEMBER(in3);
92   DECLARE_INPUT_CHANGED_MEMBER(in4);
93   DECLARE_INPUT_CHANGED_MEMBER(in5);
94   DECLARE_INPUT_CHANGED_MEMBER(in6);
95
9696   DECLARE_READ_LINE_MEMBER(sid_read);
9797
98   
98
9999   virtual void video_start() override;
100100
101101   TIMER_DEVICE_CALLBACK_MEMBER(scanline_timer);
r253023r253024
107107   DECLARE_WRITE8_MEMBER(dark_1_clr);
108108   DECLARE_WRITE8_MEMBER(dark_2_clr);
109109   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
110   
111   
110
111
112112   DECLARE_DRIVER_INIT(fi6845);
113   
113
114114};
115115
116116
117117TIMER_DEVICE_CALLBACK_MEMBER(fastinvaders_state::scanline_timer)
118118{
119/*   int scanline = param;
119/*  int scanline = param;
120120
121121
122122
123123
124   if(scanline == 16){
125      //logerror("scanline\n");
126      m_dma8257->dreq1_w(0x01);
127   m_dma8257->hlda_w(1);
128      }
129   */   
124    if(scanline == 16){
125        //logerror("scanline\n");
126        m_dma8257->dreq1_w(0x01);
127    m_dma8257->hlda_w(1);
128        }
129    */
130130}
131131
132132TIMER_DEVICE_CALLBACK_MEMBER(fastinvaders_state::count_ar)
133133{
134134   if (m_ar<255){
135     
136135      m_riga_sup= ((m_prom[m_ar]&0x08)>>3)&0x01;
137      m_scudi=    ((m_prom[m_ar]&0x04)>>2)&0x01;
138      m_cannone=    ((m_prom[m_ar]&0x02)>>1)&0x01;
136      m_scudi=    ((m_prom[m_ar]&0x04)>>2)&0x01;
137      m_cannone=  ((m_prom[m_ar]&0x02)>>1)&0x01;
139138      m_riga_inf= ((m_prom[m_ar]&0x01))&0x01;
140139      //logerror("m_ar = %02X m_riga_sup %02X, m_scudi %02X, m_cannone %02X, m_riga_inf %02X\n",m_ar,m_riga_sup,m_scudi,m_cannone,m_riga_inf);
141   
140
142141      if(m_riga_sup==0x01){
143142         if(((m_prom[m_ar-1]&0x08)>>3)==0x01){
144            //logerror("         DMA1         \n");
143            //logerror("            DMA1            \n");
145144            //logerror("m_prom[m_ar]=%d m_prom[m_ar-1]= %d ar = %d r_s %d, sc %d, ca %d, ri %d\n",m_prom[m_ar],m_prom[m_ar-1],m_ar,m_riga_sup,m_scudi,m_cannone,m_riga_inf);
146145            m_dma8257->dreq1_w(0x01);
147146            m_dma8257->hlda_w(1);
r253023r253024
151150      }
152151      m_ar++;
153152   }
154   
153
155154   if (m_av<255){
156155      m_av++;
157156      //logerror("m_av=%02X\n",m_av);
158157      if (m_av == m_io_40){
159158         if (m_hsync==1){
160            logerror("         DMA2         \n");
159            logerror("          DMA2            \n");
161160            m_dma8257->dreq2_w(0x01);
162161            m_dma8257->hlda_w(1);
163162            //m_pic8259->ir3_w(HOLD_LINE);
164163         }
165     
164
166165      }
167   }   
166   }
168167}
169168
170169WRITE8_MEMBER(fastinvaders_state::dark_1_clr)
r253023r253024
176175   if(!data){
177176      m_dma1=0;
178177   }
179   
178
180179//logerror("dma 1 clr\n");
181180   //m_maincpu->set_input_line(I8085_RST75_LINE, ASSERT_LINE);
182181   //m_maincpu->set_input_line(I8085_RST75_LINE, CLEAR_LINE);
r253023r253024
190189   if(data){
191190      m_dma8257->dreq2_w(0x00);
192191   }
193/*   if(!data){
194      m_dma1=0;
195   }
196   */
192/*  if(!data){
193        m_dma1=0;
194    }
195    */
197196}
198197
199198/***************************************************************************
r253023r253024
231230            );
232231
233232         count++;
234     
233
235234      }
236235
237236   }
r253023r253024
256255{
257256   UINT8 tmp=0;
258257   //0x60 ds6 input bit 0 DX or SX
259   //             bit 1 DX or SX
260//             bit 2-7 dip switch
258   //               bit 1 DX or SX
259//               bit 2-7 dip switch
261260
262261   tmp=ioport("IN1")->read()&0x03;
263262   tmp=tmp | (ioport("DSW1")->read()&0xfc);
r253023r253024
269268
270269WRITE8_MEMBER(fastinvaders_state::io_70_w)
271270{
272//bit 0   rest55 clear
271//bit 0 rest55 clear
273272//bit 1 rest65 clear
274273//bit 2 trap clear
275//bit 3   coin counter
274//bit 3 coin counter
276275
277276//bit 4 irq0 clear
278//bit 5   8085 reset
279//bit 6            TODO
280//bit 7   both used    TODO
277//bit 5 8085 reset
278//bit 6             TODO
279//bit 7 both used   TODO
281280
282281//IRQ clear
283282   if (data&0x01){
r253023r253024
285284      m_maincpu->set_input_line(I8085_RST55_LINE, CLEAR_LINE);
286285   }
287286   if (data&0x02){
288     
289287      if (m_rest65){
290288         //logerror("clear");
291289         m_rest65=0;
292290         m_maincpu->set_input_line(I8085_RST65_LINE, CLEAR_LINE);
293291      }
294   }   
292   }
295293   if (data&0x04){
296294      m_trap=0;
297295      m_maincpu->set_input_line(INPUT_LINE_NMI,  CLEAR_LINE);
298   }   
296   }
299297   if (data&0x10){
300298      m_irq0=0;
301299      m_pic8259->ir0_w(CLEAR_LINE);
302   }     
300   }
303301
304302//self reset
305303   if (data&0x20){
306304      logerror("RESET!!!!!\n");
307   }   
305   }
308306
309   
307
310308//coin counter
311//   if (data&0x08){
312//      coin_counter_w(machine(), offset,0x01);
313//   }         
309//  if (data&0x08){
310//      coin_counter_w(machine(), offset,0x01);
311//  }
314312
315313}
316314
r253023r253024
355353{
356354   UINT8 tmp= m_start2_value ? ASSERT_LINE : CLEAR_LINE;
357355   m_start2_value=0;
358   return tmp;
356   return tmp;
359357}
360358
361359INPUT_CHANGED_MEMBER(fastinvaders_state::tilt)
r253023r253024
420418INPUT_CHANGED_MEMBER(fastinvaders_state::in4)
421419{
422420   m_irq4=1;
423   if (newval)
421   if (newval)
424422      m_pic8259->ir4_w(HOLD_LINE);
425423}
426424
r253023r253024
434432INPUT_CHANGED_MEMBER(fastinvaders_state::in6)
435433{
436434   m_irq6=1;
437   if (newval)   
435   if (newval)
438436      m_pic8259->ir6_w(HOLD_LINE);
439437}
440438
r253023r253024
447445   if (!state){
448446      m_dma8257->dreq0_w(0x01);
449447      m_dma8257->hlda_w(1);
450   
448
451449      m_maincpu->set_input_line(I8085_RST75_LINE, ASSERT_LINE);
452450      m_maincpu->set_input_line(I8085_RST75_LINE, CLEAR_LINE);
453451   //machine().scheduler().abort_timeslice(); // transfer occurs immediately
r253023r253024
456454   }
457455
458456   if (state){
459
460   }   
457   }
461458}
462459
463460DECLARE_WRITE_LINE_MEMBER( fastinvaders_state::hsync)
r253023r253024
470467
471468   if (state){
472469      m_hsync=1;
473   }   
470   }
474471}
475472
476473
r253023r253024
503500***************************************************************************/
504501
505502static ADDRESS_MAP_START( fastinvaders_map, AS_PROGRAM, 8, fastinvaders_state )
506   //AM_RANGE(0x0000, 0x1fff) AM_ROM   AM_MIRROR(0x8000)
507   AM_RANGE(0x0000, 0x27ff) AM_ROM   AM_MIRROR(0x8000)
503   //AM_RANGE(0x0000, 0x1fff) AM_ROM   AM_MIRROR(0x8000)
504   AM_RANGE(0x0000, 0x27ff) AM_ROM AM_MIRROR(0x8000)
508505   AM_RANGE(0x2800, 0x2fff) AM_RAM AM_MIRROR(0x8000) AM_SHARE("videoram")
509506   AM_RANGE(0x3000, 0x33ff) AM_RAM AM_MIRROR(0x8000)
510507ADDRESS_MAP_END
r253023r253024
517514   AM_RANGE(0x20, 0x20) AM_DEVWRITE("6845", mc6845_device, address_w)
518515   AM_RANGE(0x21, 0x21) AM_DEVREADWRITE("6845", mc6845_device, register_r, register_w)
519516   AM_RANGE(0x30, 0x33) AM_DEVREADWRITE("pic8259", pic8259_device, read, write)
520   AM_RANGE(0x40, 0x4f) AM_WRITE(io_40_w)   //ds4   //latch
521   //AM_RANGE(0x50, 0x50) AM_READ(io_50_r)   //ds5   //latch
517   AM_RANGE(0x40, 0x4f) AM_WRITE(io_40_w)  //ds4   //latch
518   //AM_RANGE(0x50, 0x50) AM_READ(io_50_r) //ds5   //latch
522519   AM_RANGE(0x60, 0x60) AM_READ(io_60_r)
523   AM_RANGE(0x70, 0x70) AM_WRITE(io_70_w)   //ds7   rest55,rest65,trap, irq0 clear
524   AM_RANGE(0x80, 0x80) AM_NOP   //ds8  write here a LOT ?????
525   AM_RANGE(0x90, 0x90) AM_WRITE(io_90_w)   //ds9      sound command
526   AM_RANGE(0xa0, 0xa0) AM_WRITE(io_a0_w)   //ds10 irq1 clear
527   AM_RANGE(0xb0, 0xb0) AM_WRITE(io_b0_w)   //ds11 irq2 clear
528   AM_RANGE(0xc0, 0xc0) AM_WRITE(io_c0_w)   //ds12 irq3 clear
529   AM_RANGE(0xd0, 0xd0) AM_WRITE(io_d0_w)   //ds13 irq5 clear
530   AM_RANGE(0xe0, 0xe0) AM_WRITE(io_e0_w)   //ds14 irq4 clear
531   AM_RANGE(0xf0, 0xf0) AM_WRITE(io_f0_w)   //ds15 irq6 clear
532   
520   AM_RANGE(0x70, 0x70) AM_WRITE(io_70_w)  //ds7   rest55,rest65,trap, irq0 clear
521   AM_RANGE(0x80, 0x80) AM_NOP //ds8  write here a LOT ?????
522   AM_RANGE(0x90, 0x90) AM_WRITE(io_90_w)  //ds9       sound command
523   AM_RANGE(0xa0, 0xa0) AM_WRITE(io_a0_w)  //ds10 irq1 clear
524   AM_RANGE(0xb0, 0xb0) AM_WRITE(io_b0_w)  //ds11 irq2 clear
525   AM_RANGE(0xc0, 0xc0) AM_WRITE(io_c0_w)  //ds12 irq3 clear
526   AM_RANGE(0xd0, 0xd0) AM_WRITE(io_d0_w)  //ds13 irq5 clear
527   AM_RANGE(0xe0, 0xe0) AM_WRITE(io_e0_w)  //ds14 irq4 clear
528   AM_RANGE(0xf0, 0xf0) AM_WRITE(io_f0_w)  //ds15 irq6 clear
529
533530   AM_IMPORT_FROM(fastinvaders_io_base)
534531ADDRESS_MAP_END
535532
536533
537534static ADDRESS_MAP_START( fastinvaders_8275_io, AS_IO, 8, fastinvaders_state )
538   AM_RANGE( 0x20, 0x21 ) AM_DEVREADWRITE("8275", i8275_device, read, write)
539   
540AM_RANGE(0x10, 0x1f) AM_DEVREADWRITE("dma8257", i8257_device, read, write)   
535   AM_RANGE( 0x20, 0x21 ) AM_DEVREADWRITE("8275", i8275_device, read, write)
536
537AM_RANGE(0x10, 0x1f) AM_DEVREADWRITE("dma8257", i8257_device, read, write)
541538   AM_RANGE(0x30, 0x33) AM_DEVREADWRITE("pic8259", pic8259_device, read, write)
542   AM_RANGE(0x40, 0x4f) AM_WRITE(io_40_w)   //ds4   //latch
543   //AM_RANGE(0x50, 0x50) AM_READ(io_50_r)   //ds5   //latch
539   AM_RANGE(0x40, 0x4f) AM_WRITE(io_40_w)  //ds4   //latch
540   //AM_RANGE(0x50, 0x50) AM_READ(io_50_r) //ds5   //latch
544541   AM_RANGE(0x60, 0x60) AM_READ(io_60_r)
545   AM_RANGE(0x70, 0x70) AM_WRITE(io_70_w)   //ds7   rest55,rest65,trap, irq0 clear
546   AM_RANGE(0x80, 0x80) AM_NOP   //write here a LOT
547   //AM_RANGE(0x80, 0x80) AM_WRITE(io_80_w)   //ds8 ????
548   AM_RANGE(0x90, 0x90) AM_WRITE(io_90_w)   //ds9      sound command
549   AM_RANGE(0xa0, 0xa0) AM_WRITE(io_a0_w)   //ds10 irq1 clear
550   AM_RANGE(0xb0, 0xb0) AM_WRITE(io_b0_w)   //ds11 irq2 clear
551   AM_RANGE(0xc0, 0xc0) AM_WRITE(io_c0_w)   //ds12 irq3 clear
552   AM_RANGE(0xd0, 0xd0) AM_WRITE(io_d0_w)   //ds13 irq5 clear
553   AM_RANGE(0xe0, 0xe0) AM_WRITE(io_e0_w)   //ds14 irq4 clear
554   AM_RANGE(0xf0, 0xf0) AM_WRITE(io_f0_w)   //ds15 irq6 clear   
542   AM_RANGE(0x70, 0x70) AM_WRITE(io_70_w)  //ds7   rest55,rest65,trap, irq0 clear
543   AM_RANGE(0x80, 0x80) AM_NOP //write here a LOT
544   //AM_RANGE(0x80, 0x80) AM_WRITE(io_80_w)    //ds8 ????
545   AM_RANGE(0x90, 0x90) AM_WRITE(io_90_w)  //ds9       sound command
546   AM_RANGE(0xa0, 0xa0) AM_WRITE(io_a0_w)  //ds10 irq1 clear
547   AM_RANGE(0xb0, 0xb0) AM_WRITE(io_b0_w)  //ds11 irq2 clear
548   AM_RANGE(0xc0, 0xc0) AM_WRITE(io_c0_w)  //ds12 irq3 clear
549   AM_RANGE(0xd0, 0xd0) AM_WRITE(io_d0_w)  //ds13 irq5 clear
550   AM_RANGE(0xe0, 0xe0) AM_WRITE(io_e0_w)  //ds14 irq4 clear
551   AM_RANGE(0xf0, 0xf0) AM_WRITE(io_f0_w)  //ds15 irq6 clear
555552   AM_IMPORT_FROM(fastinvaders_io_base)
556553ADDRESS_MAP_END
557554
r253023r253024
565562
566563static INPUT_PORTS_START( fastinvaders )
567564
568PORT_START("COIN")  /* FAKE async input */   
569   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, fastinvaders_state, coin_inserted, 0)   //I8085_RST65_LINE
570   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, fastinvaders_state, start, 0)         //I8085_RST55_LINE
571   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 ) PORT_CHANGED_MEMBER(DEVICE_SELF, fastinvaders_state, start2, 0)         //I8085_RST55_LINE
572   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Z) PORT_CHANGED_MEMBER(DEVICE_SELF, fastinvaders_state,in0, 0)   // int0, sparo
573   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_X) PORT_CHANGED_MEMBER(DEVICE_SELF, fastinvaders_state,tilt, 0)   //INPUT_LINE_NMI tilt
574   
565PORT_START("COIN")  /* FAKE async input */
566   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, fastinvaders_state, coin_inserted, 0)   //I8085_RST65_LINE
567   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, fastinvaders_state, start, 0)          //I8085_RST55_LINE
568   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 ) PORT_CHANGED_MEMBER(DEVICE_SELF, fastinvaders_state, start2, 0)         //I8085_RST55_LINE
569   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Z) PORT_CHANGED_MEMBER(DEVICE_SELF, fastinvaders_state,in0, 0) // int0, sparo
570   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_X) PORT_CHANGED_MEMBER(DEVICE_SELF, fastinvaders_state,tilt, 0)    //INPUT_LINE_NMI tilt
575571
572
576573   PORT_START("IN0")
577   
574
578575   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_S) PORT_NAME("1") PORT_CHANGED_MEMBER(DEVICE_SELF, fastinvaders_state,in1, 0)
579576   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_D) PORT_NAME("2") PORT_CHANGED_MEMBER(DEVICE_SELF, fastinvaders_state,in2, 0)
580577   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_F) PORT_NAME("3") PORT_CHANGED_MEMBER(DEVICE_SELF, fastinvaders_state,in3, 0)
581578   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_G) PORT_NAME("4") PORT_CHANGED_MEMBER(DEVICE_SELF, fastinvaders_state,in4, 0)
582579   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_H) PORT_NAME("5") PORT_CHANGED_MEMBER(DEVICE_SELF, fastinvaders_state,in5, 0)
583580   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_J) PORT_NAME("6") PORT_CHANGED_MEMBER(DEVICE_SELF, fastinvaders_state,in6, 0)
584   
585   
586   PORT_START("IN1")   //0x60 io port
581
582
583   PORT_START("IN1")   //0x60 io port
587584   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
588585   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
589586
590   
591   PORT_START("DSW1")   //0x60 io port
587
588   PORT_START("DSW1")  //0x60 io port
592589   PORT_DIPNAME(   0x04, 0x04, DEF_STR( Unknown ) )
593590   PORT_DIPSETTING(      0x04, DEF_STR( Off ) )
594591   PORT_DIPSETTING(      0x00, DEF_STR( On ) )
r253023r253024
598595   PORT_DIPNAME(   0xf0, 0x80, "Ships/lives number" )
599596   PORT_DIPSETTING(      0x10, "1 Ship"  )
600597   PORT_DIPSETTING(      0x20, "2 Ships" )
601   PORT_DIPSETTING(      0x30, "3 Ships"  )   
598   PORT_DIPSETTING(      0x30, "3 Ships"  )
602599   PORT_DIPSETTING(      0x40, "4 Ships" )
603   PORT_DIPSETTING(      0x50, "5 Ships" )
604   PORT_DIPSETTING(      0x60, "6 Ships" )
605   PORT_DIPSETTING(      0x70, "7 Ships" )
606   PORT_DIPSETTING(      0x80, "8 Ships" )
607   PORT_DIPSETTING(      0x90, "9 Ships" )
608   
600   PORT_DIPSETTING(      0x50, "5 Ships" )
601   PORT_DIPSETTING(      0x60, "6 Ships" )
602   PORT_DIPSETTING(      0x70, "7 Ships" )
603   PORT_DIPSETTING(      0x80, "8 Ships" )
604   PORT_DIPSETTING(      0x90, "9 Ships" )
609605
610   
606
607
611608INPUT_PORTS_END
612609
613610
r253023r253024
637634   /* basic machine hardware */
638635   MCFG_CPU_ADD("maincpu", I8085A, 6144100/2 ) // 6144100 Xtal /2 internaly
639636   MCFG_CPU_PROGRAM_MAP(fastinvaders_map)
640//   MCFG_CPU_IO_MAP(fastinvaders_io_map)
641//   MCFG_CPU_VBLANK_INT_DRIVER("screen", fastinvaders_state, irq0_line_hold)
642   MCFG_I8085A_SID(READLINE(fastinvaders_state, sid_read))
637//  MCFG_CPU_IO_MAP(fastinvaders_io_map)
638//  MCFG_CPU_VBLANK_INT_DRIVER("screen", fastinvaders_state, irq0_line_hold)
639   MCFG_I8085A_SID(READLINE(fastinvaders_state, sid_read))
643640MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259", pic8259_device, inta_cb)
644641MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", fastinvaders_state, scanline_timer, "screen", 0, 1)
645   
642
646643   MCFG_PIC8259_ADD( "pic8259", INPUTLINE("maincpu", 0), VCC, NULL)
647644
648645   MCFG_DEVICE_ADD("dma8257", I8257, 6144100)
r253023r253024
650647   MCFG_I8257_OUT_MEMW_CB(WRITE8(fastinvaders_state, memory_write_byte))
651648   MCFG_I8257_OUT_DACK_1_CB(WRITE8(fastinvaders_state, dark_1_clr))
652649   MCFG_I8257_OUT_DACK_2_CB(WRITE8(fastinvaders_state, dark_2_clr))
653   
654   
650
651
655652   MCFG_TIMER_DRIVER_ADD_PERIODIC("count_ar", fastinvaders_state, count_ar,  attotime::from_hz(11500000/2))
656   
653
657654   /* video hardware */
658655   MCFG_SCREEN_ADD("screen", RASTER)
659656   MCFG_SCREEN_REFRESH_RATE(60)
660657   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
661   MCFG_SCREEN_SIZE(64*16, 32*16)   
662   MCFG_SCREEN_VISIBLE_AREA(0*16, 40*16-1, 0*14, 19*14-1)     
658   MCFG_SCREEN_SIZE(64*16, 32*16)
659   MCFG_SCREEN_VISIBLE_AREA(0*16, 40*16-1, 0*14, 19*14-1)
663660   MCFG_SCREEN_UPDATE_DRIVER(fastinvaders_state, screen_update)
664661   MCFG_SCREEN_PALETTE("palette")
665662
r253023r253024
673670static MACHINE_CONFIG_DERIVED( fastinvaders_8275, fastinvaders )
674671   MCFG_CPU_MODIFY("maincpu" ) // guess
675672   MCFG_CPU_IO_MAP(fastinvaders_8275_io)
676   
673
677674   MCFG_DEVICE_ADD("8275", I8275, 10000000 ) /* guess */ // does not configure a very useful resolution(!)
678675   MCFG_I8275_CHARACTER_WIDTH(16)
679//   MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(apogee_state, display_pixels)
680//   MCFG_I8275_DRQ_CALLBACK(DEVWRITELINE("dma8257",i8257_device, dreq2_w))
676//  MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(apogee_state, display_pixels)
677//  MCFG_I8275_DRQ_CALLBACK(DEVWRITELINE("dma8257",i8257_device, dreq2_w))
681678MACHINE_CONFIG_END
682679
683680static MACHINE_CONFIG_DERIVED( fastinvaders_6845, fastinvaders )
r253023r253024
736733   ROM_LOAD( "R2.2A",     0x2400, 0x0200, CRC(f446ef0d) SHA1(2be337c1197d14e5ffc33ea05b5262f1ea17d442) )
737734   ROM_LOAD( "R2.2B",     0x2600, 0x0200, CRC(b97e35a3) SHA1(0878a83c7f9f0645749fdfb1ff372d0e04833c9e) )
738735
739   
736
740737   ROM_REGION( 0x0c00, "gfx1", 0 )
741738   ROM_LOAD( "C2.1F",     0x0000, 0x0200, CRC(9feca88a) SHA1(14a8c46eb51eed01b7b537a9931cd092cec2019f) )
742739   ROM_LOAD( "C2.1G",     0x0200, 0x0200, CRC(79fc3963) SHA1(25651d1031895a01a2a4751b355ff1200a899ac5) )
r253023r253024
744741   ROM_LOAD( "C2.2F",     0x0600, 0x0200, CRC(3bb16f55) SHA1(b1cc1e2346acd0e5c84861b414b4677871079844) )
745742   ROM_LOAD( "C2.2G",     0x0800, 0x0200, CRC(19828c47) SHA1(f215ce55be32b3564e1b7cc19500d38a93117051) )
746743   ROM_LOAD( "C2.2H",     0x0a00, 0x0200, CRC(284ae4eb) SHA1(6e28fcd9d481d37f47728f22f6048b29266f4346) )
747   
744
748745   ROM_REGION( 0x0100, "prom", 0 )
749746   ROM_LOAD( "93427.bin",     0x0000, 0x0100, CRC(f59c8573) SHA1(5aed4866abe1690fd0f088af1cfd99b3c85afe9a) )
750747ROM_END
r253023r253024
774771   ROM_LOAD( "C1.1A",     0x0600, 0x0200, CRC(3bb16f55) SHA1(b1cc1e2346acd0e5c84861b414b4677871079844) )
775772   ROM_LOAD( "C1.2A",     0x0800, 0x0200, CRC(19828c47) SHA1(f215ce55be32b3564e1b7cc19500d38a93117051) )
776773   ROM_LOAD( "C1.3A",     0x0a00, 0x0200, CRC(284ae4eb) SHA1(6e28fcd9d481d37f47728f22f6048b29266f4346) )
777   
774
778775   ROM_REGION( 0x0100, "prom", 0 )
779776   ROM_LOAD( "93427.bin",     0x0000, 0x0100, CRC(f59c8573) SHA1(5aed4866abe1690fd0f088af1cfd99b3c85afe9a) )
780777ROM_END
781778
782/*    YEAR  NAME    PARENT   MACHINE            INPUT       STATE          INIT    ROT     COMPANY              FULLNAME                            FLAGS*/
779/*   YEAR  NAME    PARENT   MACHINE             INPUT       STATE          INIT    ROT     COMPANY              FULLNAME                                    FLAGS*/
783780GAME( 1979, fi6845, 0,      fastinvaders_6845, fastinvaders, fastinvaders_state, fi6845, ROT270, "Fiberglass", "Fast Invaders (6845 version)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
784GAME( 1979, fi8275, fi6845, fastinvaders_8275, fastinvaders, fastinvaders_state,fi6845,    ROT270, "Fiberglass", "Fast Invaders (8275 version)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
No newline at end of file
781GAME( 1979, fi8275, fi6845, fastinvaders_8275, fastinvaders, fastinvaders_state,fi6845,     ROT270, "Fiberglass", "Fast Invaders (8275 version)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
trunk/src/mame/drivers/fidel6502.cpp
r253023r253024
11// license:BSD-3-Clause
22// copyright-holders:Kevin Horton,Jonathan Gevaryahu,Sandro Ronco,hap
33/******************************************************************************
4
4
55    Fidelity Electronics 6502 based board driver
66    See drivers/fidelz80.cpp for hardware description
77
r253023r253024
7777{
7878   // 7442 output, also update input mux (9 is unused)
7979   m_inp_mux = (1 << m_led_select) & 0x1ff;
80   
80
8181   // 4 7seg leds + H
8282   for (int i = 0; i < 4; i++)
8383   {
8484      m_display_segmask[i] = 0x7f;
8585      m_display_state[i] = (m_inp_mux >> i & 1) ? m_7seg_data : 0;
8686   }
87   
87
8888   // 8*8 chessboard leds
8989   for (int i = 0; i < 8; i++)
9090      m_display_state[i+4] = (m_inp_mux >> i & 1) ? m_led_data : 0;
r253023r253024
136136   // d5: button row 8 (active low)
137137   if (!(read_inputs(9) & 0x100))
138138      data |= 0x20;
139   
139
140140   // d6,d7: language switches
141141   data|=0xc0;
142142
r253023r253024
228228
229229   // 7442 9: speaker out
230230   m_speaker->level_w(sel >> 9 & 1);
231   
231
232232   // d6,d7: led select (active low)
233233   display_matrix(9, 2, sel & 0x1ff, ~data >> 6 & 3);
234   
234
235235   // d4,d5: printer
236236   //..
237237}
trunk/src/mame/drivers/fidelz80.cpp
r253023r253024
11// license:BSD-3-Clause
22// copyright-holders:Kevin Horton,Jonathan Gevaryahu,Sandro Ronco,hap
33/******************************************************************************
4
4
55    Fidelity Electronics Z80 based board driver
66    for 6502 based boards, see drivers/fidel6502.cpp
77
r253023r253024
897897{
898898   // when RE button is directly wired to RESET pin(s)
899899   m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE);
900   
900
901901   if (m_mcu)
902902      m_mcu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE);
903903}
r253023r253024
917917   // 4 7seg leds
918918   for (int i = 0; i < 4; i++)
919919      m_display_segmask[i] = 0x7f;
920   
920
921921   // note: sel d0 for extra leds
922922   UINT8 outdata = (m_7seg_data & 0x7f) | (m_led_select << 7 & 0x80);
923923   display_matrix(8, 4, outdata, m_led_select >> 2 & 0xf);
r253023r253024
10161016      m_display_segmask[i] = 0x7f;
10171017      m_display_state[i] = (m_led_select >> i & 1) ? m_7seg_data : 0;
10181018   }
1019   
1019
10201020   // 8*8 chessboard leds
10211021   for (int i = 0; i < 8; i++)
10221022      m_display_state[i+4] = (m_led_select >> i & 1) ? m_led_data : 0;
r253023r253024
10661066READ8_MEMBER(fidelz80_state::vsc_pio_portb_r)
10671067{
10681068   UINT8 ret = 0;
1069   
1069
10701070   // d4: TSI BUSY line
10711071   ret |= (m_speech->busy_r()) ? 0 : 0x10;
1072   
1072
10731073   return ret;
10741074}
10751075
r253023r253024
11351135   // T0: card scanner?
11361136   if (offset == 0)
11371137      return 0;
1138   
1138
11391139   // T1: ?
11401140   else
11411141      return rand() & 1;
r253023r253024
11841184      ret &= m_ppi8255->read(space, offset & 3);
11851185   if (~offset & 8)
11861186      ret &= m_z80pio->read(space, offset & 3);
1187   
1187
11881188   return ret;
11891189}
11901190
r253023r253024
12071207WRITE8_MEMBER(fidelz80_state::vbrc_speech_w)
12081208{
12091209   //printf("%X ",data);
1210   
1210
12111211   // todo: HALT THE z80 here, and set up a callback to poll the s14001a BUSY line to resume z80
12121212   m_speech->data_w(space, 0, data & 0x3f);
12131213   m_speech->start_w(1);
12141214   m_speech->start_w(0);
1215   
1215
12161216   //m_speech->start_w(BIT(data, 7));
12171217}
12181218
trunk/src/mame/drivers/funworld.cpp
r253023r253024
57405740   ROM_LOAD( "82s147.bin",    0x0000, 0x0200, CRC(5377c680) SHA1(33857bbbfebfce28b8a68c69e030bf560a701e83) )
57415741
57425742   // and this is just an untouched NES multigame..
5743   ROM_REGION( 0x0100000, "nes_prg", 0 )
5743   ROM_REGION( 0x0100000, "nes_prg", 0 )
57445744   ROM_LOAD( "me0.bin",    0x0000, 0x0100000, CRC(83a4e841) SHA1(280e1a26737fe0b90dd19be706df89e09ef84c77) ) // == 64 in 1 [a1][p1].prg  nes:mc_64a 64 in 1 (Alt Games)
5745   ROM_REGION( 0x80000, "nes_chr", 0 )
5745   ROM_REGION( 0x80000, "nes_chr", 0 )
57465746   ROM_LOAD( "me1.bin",    0x0000, 0x80000, CRC(7114b404) SHA1(0f5a206af25725b2e97c404a616e341f15925431) ) // == 64 in 1 [a1][p1].chr  nes:mc_64a 64 in 1 (Alt Games)
57475747ROM_END
57485748
r253023r253024
57595759   ROM_LOAD( "24c04.bin",    0x0000, 0x0200, CRC(2a1e8abe) SHA1(639a704f25af02597ead2e69d15ac47953c27f09) )
57605760
57615761   // some kind of MSX multigame?
5762   ROM_REGION( 0x0100000, "msx_prg", 0 )
5762   ROM_REGION( 0x0100000, "msx_prg", 0 )
57635763   ROM_LOAD( "me0.bin",    0x0000, 0x10000, CRC(bd5be18b) SHA1(b43a176db0522bcda0a17dd0c210c987dc380c97) ) // weird pattern? might be bad if not a lookup table?  BADADDR        -------xxxxxxxxx
57645764   ROM_LOAD( "me1.bin",    0x0000, 0x40000, CRC(2152c6b7) SHA1(e512e29f4a899cc3f91a446141fd4432a487228f) )
57655765ROM_END
trunk/src/mame/drivers/gaelco2.cpp
r253023r253024
202202   ROM_REGION( 0x040000, "maincpu", 0 )    /* 68000 code */
203203   ROM_LOAD16_BYTE( "MS_U_45.U45",   0x000000, 0x020000, CRC(98f4fdc0) SHA1(1e4d5b0a8a432de885c96319c21280d304b38db0) )
204204   ROM_LOAD16_BYTE( "MS_U_44.U44",   0x000001, 0x020000, CRC(1785dd41) SHA1(5c6a65c00248971ce54c8185858393f2c52cc583) )
205     
205
206206   ROM_REGION( 0x10000, "mcu", 0 ) /* DS5002FP code */
207207   ROM_LOAD( "ms_ds5002fp.bin", 0x00000, 0x8000, NO_DUMP )
208208
r253023r253024
217217   ROM_FILL(          0x0200000, 0x0080000, 0x00 )         /* to decode GFX as 5bpp */
218218ROM_END
219219
220 
221220
221
222222/*============================================================================
223223                                BANG
224224  ============================================================================*/
r253023r253024
14571457READ16_MEMBER(gaelco2_state::maniacsqa_prot_r)
14581458{
14591459   int pc = space.device().safe_pc();
1460   
1460
14611461   // if -1 is returned at any point on these checks the game instantly reports 'power failure'
14621462   // these are generally done right before the other checks
14631463   if (pc == 0x3dbc) return 0x0000; // must not be -1
r253023r253024
14711471   if (pc == 0x3dce) return 0x0000; // must be 0
14721472
14731473   if (pc == 0x25c2) return 0x0000; // writes 0 to 0xfe45fa then expects this to be 0
1474   
1474
14751475   if (pc == 0x5cf6) return 0x0000; // must be 0
14761476   if (pc == 0x5d1a) return 0x0000; // must be 0
14771477   if (pc == 0xaaa0) return 0x0000; // must be 0?
r253023r253024
14801480   if (pc == 0xaad0) return 0x0a00; // if above ISN'T 0 this must be 0x0a00 (but code then dies, probably wants some data filled?)
14811481   // other code path just results in no more pieces dropping? maybe the MCU does the matching algorithm?
14821482
1483   
1484   
14851483
14861484
1485
1486
14871487   printf("read at PC %08x\n", pc);
14881488   return m_shareram[(0xfedaa2 - 0xfe0000) / 2];
14891489
trunk/src/mame/drivers/gkigt.cpp
r253023r253024
4545MULTIMEDIA LITE boards:
4646 Multimedia Lite 1 - uses up to 4MB on EPROMs to store sound
4747 Multimedia Lite 2 - uses up to 16MB of SIMM to store sound
48
48
4949 Boards contain:
5050 Custom programmed Cypress CY37032-125JC CPLD
5151    32 Macrocells
r253023r253024
108108   {
109109      return rand();
110110   };
111   
112111
112
113113};
114114
115115static INPUT_PORTS_START( igt_gameking )
r253023r253024
140140   AM_RANGE(0x00000000, 0x0007ffff) AM_ROM
141141   AM_RANGE(0x08000000, 0x081fffff) AM_ROM AM_REGION("game", 0)
142142
143   AM_RANGE(0x10000000, 0x1000001f) AM_RAM
143   AM_RANGE(0x10000000, 0x1000001f) AM_RAM
144144   AM_RANGE(0x10000020, 0x1000021f) AM_RAM // strange range to test, correct or CPU issue?
145   AM_RANGE(0x10000220, 0x1003ffff) AM_RAM
145   AM_RANGE(0x10000220, 0x1003ffff) AM_RAM
146146
147147   AM_RANGE(0x28010008, 0x2801000b) AM_READ(igt_gk_28010008_r)
148148   AM_RANGE(0x28030000, 0x28030003) AM_READ(igt_gk_28030000_r)
149149
150   
151150
151
152152ADDRESS_MAP_END
153153
154154static const gfx_layout igt_gameking_layout =
r253023r253024
174174   /* basic machine hardware */
175175   MCFG_CPU_ADD("maincpu", I960, 20000000) // ?? Mhz
176176   MCFG_CPU_PROGRAM_MAP(igt_gameking_mem)
177   
178177
178
179179   MCFG_GFXDECODE_ADD("gfxdecode", "palette", igt_gameking)
180180
181181   MCFG_SCREEN_ADD("screen", RASTER)
r253023r253024
201201
202202ROM_START( gkigt4 )
203203   ROM_REGION( 0x80000, "maincpu", 0 )
204   ROM_LOAD( "M0000527 BASE (1-4002).bin", 0x00000, 0x80000, CRC(73981260) SHA1(24b42ae2796034815d35294efe0ac3d5c33100bd) )
204   ROM_LOAD( "M0000527 BASE (1-4002).bin", 0x00000, 0x80000, CRC(73981260) SHA1(24b42ae2796034815d35294efe0ac3d5c33100bd) )
205205
206206   ROM_REGION32_LE( 0x200000, "game", 0 )
207   ROM_LOAD16_BYTE( "G0001777 GME1 1 of 2 (2-80).bin", 0x000000, 0x100000, CRC(99d5829d) SHA1(b2ec16f35503ba6a0a41221fb3f52c5d2223ad79) )
208   ROM_LOAD16_BYTE( "G0001777 GME2 2 of 2 (2-80).bin", 0x000001, 0x100000, CRC(3b7dfcc0) SHA1(2aeb35125c4320ba3198c44418c90fa6fd6270a9) )
207   ROM_LOAD16_BYTE( "G0001777 GME1 1 of 2 (2-80).bin", 0x000000, 0x100000, CRC(99d5829d) SHA1(b2ec16f35503ba6a0a41221fb3f52c5d2223ad79) )
208   ROM_LOAD16_BYTE( "G0001777 GME2 2 of 2 (2-80).bin", 0x000001, 0x100000, CRC(3b7dfcc0) SHA1(2aeb35125c4320ba3198c44418c90fa6fd6270a9) )
209209
210210   ROM_REGION( 0x100000, "cg", 0 )
211   ROM_LOAD16_BYTE( "C0000330 CG1 1 of 4 (2-40).bin", 0x000000, 0x80000, CRC(b92b8aa4) SHA1(05a1feac4012a73777eb28ab6e66e1dcadb9430f) )
212   ROM_LOAD16_BYTE( "C0000330 CG2 2 of 4 (2-40).bin", 0x000001, 0x80000, CRC(4e0560b5) SHA1(109f0bd47cfb0ed593fc34c5904bc639b0097d12))
211   ROM_LOAD16_BYTE( "C0000330 CG1 1 of 4 (2-40).bin", 0x000000, 0x80000, CRC(b92b8aa4) SHA1(05a1feac4012a73777eb28ab6e66e1dcadb9430f) )
212   ROM_LOAD16_BYTE( "C0000330 CG2 2 of 4 (2-40).bin", 0x000001, 0x80000, CRC(4e0560b5) SHA1(109f0bd47cfb0ed593fc34c5904bc639b0097d12))
213213
214214   ROM_REGION( 0x200000, "plx", 0 )
215   ROM_LOAD16_BYTE( "C0000330 PLX1 3 of 4 (2-80).bin", 0x000000, 0x100000, CRC(806ec7d4) SHA1(b9263f942b3d7101797bf87ad18cfddac9582791) )
216   ROM_LOAD16_BYTE( "C0000330 PLX2 4 of 4 (2-80).bin", 0x000001, 0x100000, CRC(c4ce5dc5) SHA1(cc5d090e88551550787b87d80aafe18ee1661dd7) )
215   ROM_LOAD16_BYTE( "C0000330 PLX1 3 of 4 (2-80).bin", 0x000000, 0x100000, CRC(806ec7d4) SHA1(b9263f942b3d7101797bf87ad18cfddac9582791) )
216   ROM_LOAD16_BYTE( "C0000330 PLX2 4 of 4 (2-80).bin", 0x000001, 0x100000, CRC(c4ce5dc5) SHA1(cc5d090e88551550787b87d80aafe18ee1661dd7) )
217217
218218   ROM_REGION( 0x200000, "snd", 0 )
219   ROM_LOAD( "SWC00046 SND1 1 of 2 (2-80).rom1", 0x000000, 0x100000, CRC(8213aeac) SHA1(4beff02fed64e607270e0e8e322a96f112bd2093) )
220   ROM_LOAD( "SWC00046 SND2 2 of 2 (2-80).rom2", 0x100000, 0x100000, CRC(a7ef9b46) SHA1(031373fb8e39c4ed828a58bb63a9395a205c6b6b) )
219   ROM_LOAD( "SWC00046 SND1 1 of 2 (2-80).rom1", 0x000000, 0x100000, CRC(8213aeac) SHA1(4beff02fed64e607270e0e8e322a96f112bd2093) )
220   ROM_LOAD( "SWC00046 SND2 2 of 2 (2-80).rom2", 0x100000, 0x100000, CRC(a7ef9b46) SHA1(031373fb8e39c4ed828a58bb63a9395a205c6b6b) )
221221ROM_END
222222
223223
224224
225225ROM_START( gkigt4ms )
226226   ROM_REGION( 0x80000, "maincpu", 0 )
227   ROM_LOAD( "M000526 BASE  (1-4002) MS.u39", 0x00000, 0x80000, CRC(4d095df5) SHA1(bd0cdc4c1b07ef2723ba22b14abaf581b017f190) )
227   ROM_LOAD( "M000526 BASE  (1-4002) MS.u39", 0x00000, 0x80000, CRC(4d095df5) SHA1(bd0cdc4c1b07ef2723ba22b14abaf581b017f190) )
228228
229229   ROM_REGION32_LE( 0x200000, "game", 0 ) // same as gkigt4
230   ROM_LOAD16_BYTE( "G0001777 GME1 1 of 2 (2-80).bin", 0x000000, 0x100000, CRC(99d5829d) SHA1(b2ec16f35503ba6a0a41221fb3f52c5d2223ad79) )
231   ROM_LOAD16_BYTE( "G0001777 GME2 2 of 2 (2-80).bin", 0x000001, 0x100000, CRC(3b7dfcc0) SHA1(2aeb35125c4320ba3198c44418c90fa6fd6270a9) )
230   ROM_LOAD16_BYTE( "G0001777 GME1 1 of 2 (2-80).bin", 0x000000, 0x100000, CRC(99d5829d) SHA1(b2ec16f35503ba6a0a41221fb3f52c5d2223ad79) )
231   ROM_LOAD16_BYTE( "G0001777 GME2 2 of 2 (2-80).bin", 0x000001, 0x100000, CRC(3b7dfcc0) SHA1(2aeb35125c4320ba3198c44418c90fa6fd6270a9) )
232232
233233   ROM_REGION( 0x100000, "cg", 0 )
234   ROM_LOAD16_BYTE( "C000351 CG1 1 of 4 (2-40) MS.u30", 0x000000, 0x80000, CRC(2e841b28) SHA1(492b54e092b0d4028fd8edcb981bd1fd25dca47d) )
235   ROM_LOAD16_BYTE( "C000351 CG2 2 of 4 (2-40) MS.u53", 0x000001, 0x80000, CRC(673fc86c) SHA1(4d844330c5602d725253b4f78781fa9e213b8556) )
234   ROM_LOAD16_BYTE( "C000351 CG1 1 of 4 (2-40) MS.u30", 0x000000, 0x80000, CRC(2e841b28) SHA1(492b54e092b0d4028fd8edcb981bd1fd25dca47d) )
235   ROM_LOAD16_BYTE( "C000351 CG2 2 of 4 (2-40) MS.u53", 0x000001, 0x80000, CRC(673fc86c) SHA1(4d844330c5602d725253b4f78781fa9e213b8556) )
236236
237237   ROM_REGION( 0x200000, "plx", 0 )
238   ROM_LOAD16_BYTE( "C000351 PXL1 3 of 4 (2-80) MS.u14", 0x000000, 0x100000, CRC(438fb625) SHA1(369c860dffa323c2e9be155da1989252f6b0e694) )
239   ROM_LOAD16_BYTE( "C000351 PXL2 4 of 4 (2-80) MS.u37", 0x000001, 0x100000, CRC(22ec9c65) SHA1(bd944ae79faa8ceb73ed8f6f244fce6ff543ccd1) )
238   ROM_LOAD16_BYTE( "C000351 PXL1 3 of 4 (2-80) MS.u14", 0x000000, 0x100000, CRC(438fb625) SHA1(369c860dffa323c2e9be155da1989252f6b0e694) )
239   ROM_LOAD16_BYTE( "C000351 PXL2 4 of 4 (2-80) MS.u37", 0x000001, 0x100000, CRC(22ec9c65) SHA1(bd944ae79faa8ceb73ed8f6f244fce6ff543ccd1) )
240240
241241   ROM_REGION( 0x200000, "snd", 0 ) // same as gkigt4
242   ROM_LOAD( "SWC00046 SND1 1 of 2 (2-80).rom1", 0x000000, 0x100000, CRC(8213aeac) SHA1(4beff02fed64e607270e0e8e322a96f112bd2093) )
243   ROM_LOAD( "SWC00046 SND2 2 of 2 (2-80).rom2", 0x100000, 0x100000, CRC(a7ef9b46) SHA1(031373fb8e39c4ed828a58bb63a9395a205c6b6b) )
242   ROM_LOAD( "SWC00046 SND1 1 of 2 (2-80).rom1", 0x000000, 0x100000, CRC(8213aeac) SHA1(4beff02fed64e607270e0e8e322a96f112bd2093) )
243   ROM_LOAD( "SWC00046 SND2 2 of 2 (2-80).rom2", 0x100000, 0x100000, CRC(a7ef9b46) SHA1(031373fb8e39c4ed828a58bb63a9395a205c6b6b) )
244244ROM_END
245245
246246ROM_START( gkigt43 )
247247   ROM_REGION( 0x80000, "maincpu", 0 )
248   ROM_LOAD( "M0000837 BASE (1-4002).bin", 0x00000, 0x80000, CRC(98841e5c) SHA1(3b04bc9bc170cfcc6145dc601a63bd1394a62897) )
248   ROM_LOAD( "M0000837 BASE (1-4002).bin", 0x00000, 0x80000, CRC(98841e5c) SHA1(3b04bc9bc170cfcc6145dc601a63bd1394a62897) )
249249
250250   ROM_REGION32_LE( 0x200000, "game", 0 )
251   ROM_LOAD16_BYTE( "G0002142 GME1 1 of 2 (2-80).bin", 0x000000, 0x100000, CRC(704ef406) SHA1(3f8f719342874243d479011372786a9b6b14f5b1) )
252   ROM_LOAD16_BYTE( "G0002142 GME2 2 of 2 (2-80).bin", 0x000001, 0x100000, CRC(3a576a75) SHA1(d2de1b61808412fb2fe68400387dcdcb7910a770) )
251   ROM_LOAD16_BYTE( "G0002142 GME1 1 of 2 (2-80).bin", 0x000000, 0x100000, CRC(704ef406) SHA1(3f8f719342874243d479011372786a9b6b14f5b1) )
252   ROM_LOAD16_BYTE( "G0002142 GME2 2 of 2 (2-80).bin", 0x000001, 0x100000, CRC(3a576a75) SHA1(d2de1b61808412fb2fe68400387dcdcb7910a770) )
253253
254254   ROM_REGION( 0x100000, "cg", 0 )
255   ROM_LOAD16_BYTE( "C0000793 CG1 1 of 4 (2-40).bin", 0x000000, 0x80000, CRC(582137cc) SHA1(66686a2332a3844f816cf7e988a346f5f593d8f6) )
256   ROM_LOAD16_BYTE( "C0000793 CG2 2 of 4 (2-40).bin", 0x000001, 0x80000, CRC(5e0b6310) SHA1(4bf718dc9859e8c10c9dca967185c57738249319) )
255   ROM_LOAD16_BYTE( "C0000793 CG1 1 of 4 (2-40).bin", 0x000000, 0x80000, CRC(582137cc) SHA1(66686a2332a3844f816cf7e988a346f5f593d8f6) )
256   ROM_LOAD16_BYTE( "C0000793 CG2 2 of 4 (2-40).bin", 0x000001, 0x80000, CRC(5e0b6310) SHA1(4bf718dc9859e8c10c9dca967185c57738249319) )
257257
258258   ROM_REGION( 0x200000, "plx", 0 )
259   ROM_LOAD16_BYTE( "C0000793 PLX1 3 of 4 (2-80).bin", 0x000000, 0x100000, CRC(6327a76e) SHA1(01ad5747788389d3d9d71a1c37472d33db3ba5fb) )
260   ROM_LOAD16_BYTE( "C0000793 PLX2 4 of 4 (2-80).bin", 0x000001, 0x100000, CRC(5a400e90) SHA1(c01be47d03e9ec418d0e4e1293fcf2c890301430) )
259   ROM_LOAD16_BYTE( "C0000793 PLX1 3 of 4 (2-80).bin", 0x000000, 0x100000, CRC(6327a76e) SHA1(01ad5747788389d3d9d71a1c37472d33db3ba5fb) )
260   ROM_LOAD16_BYTE( "C0000793 PLX2 4 of 4 (2-80).bin", 0x000001, 0x100000, CRC(5a400e90) SHA1(c01be47d03e9ec418d0e4e1293fcf2c890301430) )
261261
262262   ROM_REGION( 0x200000, "snd", 0 ) // same as gkigt4
263   ROM_LOAD( "SWC00046 SND1 1 of 2 (2-80).rom1", 0x000000, 0x100000, CRC(8213aeac) SHA1(4beff02fed64e607270e0e8e322a96f112bd2093) )
264   ROM_LOAD( "SWC00046 SND2 2 of 2 (2-80).rom2", 0x100000, 0x100000, CRC(a7ef9b46) SHA1(031373fb8e39c4ed828a58bb63a9395a205c6b6b) )
263   ROM_LOAD( "SWC00046 SND1 1 of 2 (2-80).rom1", 0x000000, 0x100000, CRC(8213aeac) SHA1(4beff02fed64e607270e0e8e322a96f112bd2093) )
264   ROM_LOAD( "SWC00046 SND2 2 of 2 (2-80).rom2", 0x100000, 0x100000, CRC(a7ef9b46) SHA1(031373fb8e39c4ed828a58bb63a9395a205c6b6b) )
265265ROM_END
266266
267267ROM_START( gkigt43n )
268268   ROM_REGION( 0x80000, "maincpu", 0 )
269   ROM_LOAD( "M0000811 BASE (1-4002) NJ.bin", 0x00000, 0x80000,  CRC(4c659923) SHA1(4624179320cb284516980e2d3caea6fd45c3f967) )
269   ROM_LOAD( "M0000811 BASE (1-4002) NJ.bin", 0x00000, 0x80000,  CRC(4c659923) SHA1(4624179320cb284516980e2d3caea6fd45c3f967) )
270270
271271   ROM_REGION32_LE( 0x200000, "game", 0 )
272   ROM_LOAD16_BYTE( "G0001624 GME1 1 of 2 (2-80) NJ.bin", 0x000000, 0x100000, CRC(4aa4139b) SHA1(c3e13c84cc13d44de90a03d0b5d45f46d4f794ce) )
273   ROM_LOAD16_BYTE( "G0001624 GME2 2 of 2 (2-80) NJ.bin", 0x000001, 0x100000, CRC(5b3bb8bf) SHA1(271131f06944074bedab7fe7c80fce1e2136c385) )
272   ROM_LOAD16_BYTE( "G0001624 GME1 1 of 2 (2-80) NJ.bin", 0x000000, 0x100000, CRC(4aa4139b) SHA1(c3e13c84cc13d44de90a03d0b5d45f46d4f794ce) )
273   ROM_LOAD16_BYTE( "G0001624 GME2 2 of 2 (2-80) NJ.bin", 0x000001, 0x100000, CRC(5b3bb8bf) SHA1(271131f06944074bedab7fe7c80fce1e2136c385) )
274274
275275   ROM_REGION( 0x100000, "cg", 0 )
276   ROM_LOAD16_BYTE( "C0000770 CG1 1 of 4 (2-40) NJ.bin", 0x000000, 0x80000, CRC(35847c45) SHA1(9f6192a9cb43df1a32d13d09248f10d62cd5ad3c) )
277   ROM_LOAD16_BYTE( "C0000770 CG2 2 of 4 (2-40) NJ.bin", 0x000001, 0x80000, CRC(2207af01) SHA1(6f59d624fbbae56af081f2a2f4eb3f7a6e6c0ec1) )
276   ROM_LOAD16_BYTE( "C0000770 CG1 1 of 4 (2-40) NJ.bin", 0x000000, 0x80000, CRC(35847c45) SHA1(9f6192a9cb43df1a32d13d09248f10d62cd5ad3c) )
277   ROM_LOAD16_BYTE( "C0000770 CG2 2 of 4 (2-40) NJ.bin", 0x000001, 0x80000, CRC(2207af01) SHA1(6f59d624fbbae56af081f2a2f4eb3f7a6e6c0ec1) )
278278
279279   ROM_REGION( 0x200000, "plx", 0 )
280   ROM_LOAD16_BYTE( "C0000770 PLX1 3 of 4 (2-80) NJ.bin", 0x000000, 0x100000, CRC(d1e673cd) SHA1(22d0234e3efb5238d60c9aab4ffc171f28f5abac) )
281   ROM_LOAD16_BYTE( "C0000770 PLX2 4 of 4 (2-80) NJ.bin", 0x000001, 0x100000, CRC(d99074f3) SHA1(a5829761f558f8e543a1442128c0ae3520d42318) )
280   ROM_LOAD16_BYTE( "C0000770 PLX1 3 of 4 (2-80) NJ.bin", 0x000000, 0x100000, CRC(d1e673cd) SHA1(22d0234e3efb5238d60c9aab4ffc171f28f5abac) )
281   ROM_LOAD16_BYTE( "C0000770 PLX2 4 of 4 (2-80) NJ.bin", 0x000001, 0x100000, CRC(d99074f3) SHA1(a5829761f558f8e543a1442128c0ae3520d42318) )
282282
283283   ROM_REGION( 0x200000, "snd", 0 ) // same as gkigt4
284   ROM_LOAD( "SWC00046 SND1 1 of 2 (2-80).rom1", 0x000000, 0x100000, CRC(8213aeac) SHA1(4beff02fed64e607270e0e8e322a96f112bd2093) )
285   ROM_LOAD( "SWC00046 SND2 2 of 2 (2-80).rom2", 0x100000, 0x100000, CRC(a7ef9b46) SHA1(031373fb8e39c4ed828a58bb63a9395a205c6b6b) )
284   ROM_LOAD( "SWC00046 SND1 1 of 2 (2-80).rom1", 0x000000, 0x100000, CRC(8213aeac) SHA1(4beff02fed64e607270e0e8e322a96f112bd2093) )
285   ROM_LOAD( "SWC00046 SND2 2 of 2 (2-80).rom2", 0x100000, 0x100000, CRC(a7ef9b46) SHA1(031373fb8e39c4ed828a58bb63a9395a205c6b6b) )
286286ROM_END
287287
288288ROM_START( gkigtez )
289289   ROM_REGION( 0x80000, "maincpu", 0 ) // same as gkigt4ms
290   ROM_LOAD( "M000526 BASE  (1-4002) MS.u39", 0x00000, 0x80000, CRC(4d095df5) SHA1(bd0cdc4c1b07ef2723ba22b14abaf581b017f190) )
290   ROM_LOAD( "M000526 BASE  (1-4002) MS.u39", 0x00000, 0x80000, CRC(4d095df5) SHA1(bd0cdc4c1b07ef2723ba22b14abaf581b017f190) )
291291
292292   ROM_REGION32_LE( 0x200000, "game", 0 )
293   ROM_LOAD16_BYTE( "G0002955 GME1 1 of 2 (2-80) MS.u13", 0x000000, 0x100000, CRC(472c04a1) SHA1(00b7784d254390475c9aa1beac1700c42514cbed) )
294   ROM_LOAD16_BYTE( "G0002955 GME2 2 of 2 (2-80) MS.u36", 0x000001, 0x100000, CRC(16903e65) SHA1(eb01c0f88212e8e35c35f897f17e12e859255270) )
293   ROM_LOAD16_BYTE( "G0002955 GME1 1 of 2 (2-80) MS.u13", 0x000000, 0x100000, CRC(472c04a1) SHA1(00b7784d254390475c9aa1beac1700c42514cbed) )
294   ROM_LOAD16_BYTE( "G0002955 GME2 2 of 2 (2-80) MS.u36", 0x000001, 0x100000, CRC(16903e65) SHA1(eb01c0f88212e8e35c35f897f17e12e859255270) )
295295
296296   ROM_REGION( 0x100000, "cg", 0 ) // same as gkigt4ms
297   ROM_LOAD16_BYTE( "C000351 CG1 1 of 4 (2-40) MS.u30", 0x000000, 0x80000, CRC(2e841b28) SHA1(492b54e092b0d4028fd8edcb981bd1fd25dca47d) )
298   ROM_LOAD16_BYTE( "C000351 CG2 2 of 4 (2-40) MS.u53", 0x000001, 0x80000, CRC(673fc86c) SHA1(4d844330c5602d725253b4f78781fa9e213b8556) )
297   ROM_LOAD16_BYTE( "C000351 CG1 1 of 4 (2-40) MS.u30", 0x000000, 0x80000, CRC(2e841b28) SHA1(492b54e092b0d4028fd8edcb981bd1fd25dca47d) )
298   ROM_LOAD16_BYTE( "C000351 CG2 2 of 4 (2-40) MS.u53", 0x000001, 0x80000, CRC(673fc86c) SHA1(4d844330c5602d725253b4f78781fa9e213b8556) )
299299
300300   ROM_REGION( 0x200000, "plx", 0 ) // same as gkigt4ms
301   ROM_LOAD16_BYTE( "C000351 PXL1 3 of 4 (2-80) MS.u14", 0x000000, 0x100000, CRC(438fb625) SHA1(369c860dffa323c2e9be155da1989252f6b0e694) )
302   ROM_LOAD16_BYTE( "C000351 PXL2 4 of 4 (2-80) MS.u37", 0x000001, 0x100000, CRC(22ec9c65) SHA1(bd944ae79faa8ceb73ed8f6f244fce6ff543ccd1) )
301   ROM_LOAD16_BYTE( "C000351 PXL1 3 of 4 (2-80) MS.u14", 0x000000, 0x100000, CRC(438fb625) SHA1(369c860dffa323c2e9be155da1989252f6b0e694) )
302   ROM_LOAD16_BYTE( "C000351 PXL2 4 of 4 (2-80) MS.u37", 0x000001, 0x100000, CRC(22ec9c65) SHA1(bd944ae79faa8ceb73ed8f6f244fce6ff543ccd1) )
303303
304304   ROM_REGION( 0x200000, "snd", 0 ) // same as gkigt4
305   ROM_LOAD( "SWC00046 SND1 1 of 2 (2-80).rom1", 0x000000, 0x100000, CRC(8213aeac) SHA1(4beff02fed64e607270e0e8e322a96f112bd2093) )
306   ROM_LOAD( "SWC00046 SND2 2 of 2 (2-80).rom2", 0x100000, 0x100000, CRC(a7ef9b46) SHA1(031373fb8e39c4ed828a58bb63a9395a205c6b6b) )
305   ROM_LOAD( "SWC00046 SND1 1 of 2 (2-80).rom1", 0x000000, 0x100000, CRC(8213aeac) SHA1(4beff02fed64e607270e0e8e322a96f112bd2093) )
306   ROM_LOAD( "SWC00046 SND2 2 of 2 (2-80).rom2", 0x100000, 0x100000, CRC(a7ef9b46) SHA1(031373fb8e39c4ed828a58bb63a9395a205c6b6b) )
307307ROM_END
308308
309309ROM_START( gkigt5p )
310310   ROM_REGION( 0x80000, "maincpu", 0 )
311   ROM_LOAD( "M0000761 BASE (1-4002).bin", 0x00000, 0x80000, CRC(efac4e4f) SHA1(0cf5b3eead66a791701a504330d9154e8f4d657d) )
311   ROM_LOAD( "M0000761 BASE (1-4002).bin", 0x00000, 0x80000, CRC(efac4e4f) SHA1(0cf5b3eead66a791701a504330d9154e8f4d657d) )
312312
313313   ROM_REGION32_LE( 0x200000, "game", 0 )
314   ROM_LOAD16_BYTE( "G0001783 GME1 1 of 2 (2-80).bin", 0x000000, 0x100000, CRC(f6672841) SHA1(1f8fe98b931e7fd67e5cd56e193c44acabcb7c0a) )
315   ROM_LOAD16_BYTE( "G0001783 GME1 2 of 2 (2-80).bin", 0x000001, 0x100000, CRC(639de8c0) SHA1(ad4fb79f12bf19b4b39691cda9f5e61f32fa2dd5) )
314   ROM_LOAD16_BYTE( "G0001783 GME1 1 of 2 (2-80).bin", 0x000000, 0x100000, CRC(f6672841) SHA1(1f8fe98b931e7fd67e5cd56e193c44acabcb7c0a) )
315   ROM_LOAD16_BYTE( "G0001783 GME1 2 of 2 (2-80).bin", 0x000001, 0x100000, CRC(639de8c0) SHA1(ad4fb79f12bf19b4b39691cda9f5e61f32fa2dd5) )
316316
317317   ROM_REGION( 0x100000, "cg", 0 )
318   ROM_LOAD16_BYTE( "C0000517 CG1 1 of 4 (2-40).bin", 0x000000, 0x80000, CRC(26db44c9) SHA1(8afe145d1fb7535c651d78b23872b71c2c946509) )
319   ROM_LOAD16_BYTE( "C0000517 CG2 2 of 4 (2-40).bin", 0x000001, 0x80000, CRC(3554ba38) SHA1(6e0b8506943559dbee4cfa7c9e4b60590c6529fb) )
318   ROM_LOAD16_BYTE( "C0000517 CG1 1 of 4 (2-40).bin", 0x000000, 0x80000, CRC(26db44c9) SHA1(8afe145d1fb7535c651d78b23872b71c2c946509) )
319   ROM_LOAD16_BYTE( "C0000517 CG2 2 of 4 (2-40).bin", 0x000001, 0x80000, CRC(3554ba38) SHA1(6e0b8506943559dbee4cfa7c9e4b60590c6529fb) )
320320
321321   ROM_REGION( 0x200000, "plx", 0 )
322   ROM_LOAD16_BYTE( "C0000517 PLX1 3 of 4 (2-80).bin", 0x000000, 0x100000, CRC(956ba40c) SHA1(7d8ae934ef663ea6b3f342455d1e8c70a1ca4581) )
323   ROM_LOAD16_BYTE( "C0000517 PLX2 4 of 4 (2-80).bin", 0x000001, 0x100000, CRC(dff43975) SHA1(e1ca212e4e51175bcbab2af447863605f74ba77f) )
322   ROM_LOAD16_BYTE( "C0000517 PLX1 3 of 4 (2-80).bin", 0x000000, 0x100000, CRC(956ba40c) SHA1(7d8ae934ef663ea6b3f342455d1e8c70a1ca4581) )
323   ROM_LOAD16_BYTE( "C0000517 PLX2 4 of 4 (2-80).bin", 0x000001, 0x100000, CRC(dff43975) SHA1(e1ca212e4e51175bcbab2af447863605f74ba77f) )
324324
325325   ROM_REGION( 0x200000, "snd", 0 ) // same as gkigt4
326   ROM_LOAD( "SWC00046 SND1 1 of 2 (2-80).rom1", 0x000000, 0x100000, CRC(8213aeac) SHA1(4beff02fed64e607270e0e8e322a96f112bd2093) )
327   ROM_LOAD( "SWC00046 SND2 2 of 2 (2-80).rom2", 0x100000, 0x100000, CRC(a7ef9b46) SHA1(031373fb8e39c4ed828a58bb63a9395a205c6b6b) )
326   ROM_LOAD( "SWC00046 SND1 1 of 2 (2-80).rom1", 0x000000, 0x100000, CRC(8213aeac) SHA1(4beff02fed64e607270e0e8e322a96f112bd2093) )
327   ROM_LOAD( "SWC00046 SND2 2 of 2 (2-80).rom2", 0x100000, 0x100000, CRC(a7ef9b46) SHA1(031373fb8e39c4ed828a58bb63a9395a205c6b6b) )
328328ROM_END
329329
330330
331331ROM_START( igtsc )
332332   ROM_REGION( 0x80000, "maincpu", 0 )
333   ROM_LOAD( "I0000838 BASE (1-4002).bin", 0x00000, 0x80000, CRC(7b66f0d5) SHA1(a13e7fa4062668ff7acb15e58025eeb401754898) )
333   ROM_LOAD( "I0000838 BASE (1-4002).bin", 0x00000, 0x80000, CRC(7b66f0d5) SHA1(a13e7fa4062668ff7acb15e58025eeb401754898) )
334334
335335   ROM_REGION32_LE( 0x200000, "game", 0 )
336   ROM_LOAD16_BYTE( "G0001175 GME1 1 of 2 (2-80).bin", 0x000000, 0x100000, CRC(674e0172) SHA1(e7bfe13781988b9193f22ad93502e303ba9427eb) )
337   ROM_LOAD16_BYTE( "G0001175 GME2 2 of 2 (2-80).bin", 0x000001, 0x100000, CRC(db76db22) SHA1(e389b11a05f0ef0dcee303ba91578f4cd56beba0) )
336   ROM_LOAD16_BYTE( "G0001175 GME1 1 of 2 (2-80).bin", 0x000000, 0x100000, CRC(674e0172) SHA1(e7bfe13781988b9193f22ad93502e303ba9427eb) )
337   ROM_LOAD16_BYTE( "G0001175 GME2 2 of 2 (2-80).bin", 0x000001, 0x100000, CRC(db76db22) SHA1(e389b11a05f0ef0dcee303ba91578f4cd56beba0) )
338338
339339   // all these SIMM files are bad dumps, they never contains the byte value 0x0d (uploaded in ASCII mode with carriage return stripped out?)
340340   ROM_REGION( 0x0800000, "cg", 0 )
r253023r253024
353353
354354ROM_START( gkkey )
355355   ROM_REGION( 0x80000, "maincpu", 0 )
356   ROM_LOAD( "KEY00017 (1-4002).bin", 0x00000, 0x80000, CRC(1579739f) SHA1(7b6257d17f74599a4ada3014d02a2e7c6686ab3f) )
357   ROM_LOAD( "KEY00028 (1-4002).bin", 0x00000, 0x80000, CRC(bf06b98b) SHA1(5c46afb560bb5c0f7540b714c0dea851c6b18fe6) )
356   ROM_LOAD( "KEY00017 (1-4002).bin", 0x00000, 0x80000, CRC(1579739f) SHA1(7b6257d17f74599a4ada3014d02a2e7c6686ab3f) )
357   ROM_LOAD( "KEY00028 (1-4002).bin", 0x00000, 0x80000, CRC(bf06b98b) SHA1(5c46afb560bb5c0f7540b714c0dea851c6b18fe6) )
358358
359359   ROM_REGION( 0x80000, "miscbad", 0 )
360360   // these are also bad dumps, again they never contains the byte value 0x0d (uploaded in ASCII mode with carriage return stripped out?)
r253023r253024
377377GAME( 2003, gkigt5p,  gkigt4,       igt_gameking, igt_gameking, driver_device,  0, ROT0, "IGT", "Game King (Triple-Five Play)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
378378GAME( 2003, igtsc,    0,            igt_gameking, igt_gameking, driver_device,  0, ROT0, "IGT", "Super Cherry", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // SIMM dumps are bad.
379379GAME( 2003, gkkey,    0,            igt_gameking, igt_gameking, driver_device,  0, ROT0, "IGT", "Game King (Set Chips)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // only 2 are good dumps
380
trunk/src/mame/drivers/hp9845.cpp
r253023r253024
156156   PORT_BIT(BIT_MASK(2)  , IP_ACTIVE_HIGH , IPT_KEYBOARD)  PORT_NAME("KP+")        // KP +
157157   PORT_BIT(BIT_MASK(3)  , IP_ACTIVE_HIGH , IPT_KEYBOARD)  PORT_NAME("KP,")        // KP ,
158158   PORT_BIT(BIT_MASK(4)  , IP_ACTIVE_HIGH , IPT_KEYBOARD)  PORT_NAME("KP.")        // KP .
159        PORT_BIT(BIT_MASK(5)  , IP_ACTIVE_HIGH , IPT_KEYBOARD)  PORT_NAME("KP0")        // KP 0
159      PORT_BIT(BIT_MASK(5)  , IP_ACTIVE_HIGH , IPT_KEYBOARD)  PORT_NAME("KP0")        // KP 0
160160   PORT_BIT(BIT_MASK(6)  , IP_ACTIVE_HIGH , IPT_KEYBOARD)  PORT_CODE(KEYCODE_F12)  PORT_NAME("Execute")    // Execute
161161   PORT_BIT(BIT_MASK(7)  , IP_ACTIVE_HIGH , IPT_KEYBOARD)  PORT_CODE(KEYCODE_F11)  PORT_NAME("Cont")       // Cont
162162   PORT_BIT(BIT_MASK(8)  , IP_ACTIVE_HIGH , IPT_KEYBOARD)  PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))        // Right
r253023r253024
261261   PORT_BIT(BIT_MASK(5)  , IP_ACTIVE_HIGH , IPT_KEYBOARD)  PORT_NAME("K12")        // K12
262262   PORT_BIT(BIT_MASK(6)  , IP_ACTIVE_HIGH , IPT_KEYBOARD)  PORT_NAME("K11")        // K11
263263   PORT_BIT(BIT_MASK(7)  , IP_ACTIVE_HIGH , IPT_KEYBOARD)  PORT_NAME("K10")        // K10
264        PORT_BIT(BIT_MASK(8)  , IP_ACTIVE_HIGH , IPT_KEYBOARD)  PORT_NAME("K9")         // K9
264      PORT_BIT(BIT_MASK(8)  , IP_ACTIVE_HIGH , IPT_KEYBOARD)  PORT_NAME("K9")         // K9
265265   PORT_BIT(BIT_MASK(9)  , IP_ACTIVE_HIGH , IPT_KEYBOARD)  PORT_NAME("K8")         // K8
266266   PORT_BIT(BIT_MASK(10)  , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_0)     PORT_CHAR('0') // 0
267267   PORT_BIT(BIT_MASK(11)  , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_8)     PORT_CHAR('8') PORT_CHAR('(')  // 8
r253023r253024
270270   PORT_BIT(BIT_MASK(14)  , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_2)     PORT_CHAR('2') PORT_CHAR('"')  // 2
271271   PORT_BIT(BIT_MASK(15)  , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_TAB)   PORT_CHAR('\t')        // Tab
272272   PORT_BIT(BIT_MASK(16)  , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("Tab clr")    // Tab clr
273        PORT_BIT(BIT_MASK(17)  , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("Step")  // Step
273      PORT_BIT(BIT_MASK(17)  , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_NAME("Step")  // Step
274274   PORT_BIT(BIT_MASK(18)  , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_F7)   PORT_NAME("K7") // K7
275275   PORT_BIT(BIT_MASK(19)  , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_F6)   PORT_NAME("K6") // K6
276276   PORT_BIT(BIT_MASK(20)  , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_F5)   PORT_NAME("K5") // K5
277        PORT_BIT(BIT_MASK(21)  , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_F4)   PORT_NAME("K4") // K4
278        PORT_BIT(BIT_MASK(22)  , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_F3)   PORT_NAME("K3") // K3
277      PORT_BIT(BIT_MASK(21)  , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_F4)   PORT_NAME("K4") // K4
278      PORT_BIT(BIT_MASK(22)  , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_F3)   PORT_NAME("K3") // K3
279279   PORT_BIT(BIT_MASK(23)  , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_F2)   PORT_NAME("K2") // K2
280280   PORT_BIT(BIT_MASK(24)  , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_F1)   PORT_NAME("K1") // K1
281281   PORT_BIT(BIT_MASK(25)  , IP_ACTIVE_HIGH , IPT_KEYBOARD) PORT_CODE(KEYCODE_ESC)  PORT_NAME("K0") // K0
r253023r253024
621621MACHINE_CONFIG_END
622622
623623static ADDRESS_MAP_START(global_mem_map , AS_PROGRAM , 16 , hp9845b_state)
624        ADDRESS_MAP_GLOBAL_MASK(0x3f7fff)
625        ADDRESS_MAP_UNMAP_LOW
626        AM_RANGE(0x000000 , 0x007fff) AM_RAM AM_SHARE("lpu_ram")
627        AM_RANGE(0x014000 , 0x017fff) AM_RAM AM_SHARE("ppu_ram")
628        AM_RANGE(0x030000 , 0x037fff) AM_ROM AM_REGION("lpu" , 0)
629        AM_RANGE(0x050000 , 0x057fff) AM_ROM AM_REGION("ppu" , 0)
624      ADDRESS_MAP_GLOBAL_MASK(0x3f7fff)
625      ADDRESS_MAP_UNMAP_LOW
626      AM_RANGE(0x000000 , 0x007fff) AM_RAM AM_SHARE("lpu_ram")
627      AM_RANGE(0x014000 , 0x017fff) AM_RAM AM_SHARE("ppu_ram")
628      AM_RANGE(0x030000 , 0x037fff) AM_ROM AM_REGION("lpu" , 0)
629      AM_RANGE(0x050000 , 0x057fff) AM_ROM AM_REGION("ppu" , 0)
630630//AM_RANGE(0x250000 , 0x251fff) AM_ROM AM_REGION("test_rom" , 0)
631631ADDRESS_MAP_END
632632
trunk/src/mame/drivers/jpmimpct.cpp
r253023r253024
862862   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
863863
864864   MCFG_VIDEO_START_OVERRIDE(jpmimpct_state,jpmimpct)
865   
865
866866   MCFG_DEVICE_ADD("meters", METERS, 0)
867867   MCFG_METERS_NUMBER(5)
868868MACHINE_CONFIG_END
r253023r253024
13391339   MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(jpmimpct_state, reel4_optic_cb))
13401340   MCFG_STARPOINT_48STEP_ADD("reel5")
13411341   MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(jpmimpct_state, reel5_optic_cb))
1342   
1342
13431343   MCFG_DEVICE_ADD("meters", METERS, 0)
13441344   MCFG_METERS_NUMBER(5)
13451345
trunk/src/mame/drivers/jpmmps.cpp
r253023r253024
169169
170170   MCFG_SOUND_ADD("sn", SN76489, SOUND_CLOCK)
171171   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
172   
172
173173   MCFG_DEVICE_ADD("meters", METERS, 0)
174   MCFG_METERS_NUMBER(9) // TODO: meters.cpp sets a max of 8
174   MCFG_METERS_NUMBER(9) // TODO: meters.cpp sets a max of 8
175175
176176   MCFG_DEFAULT_LAYOUT(layout_jpmmps)
177177MACHINE_CONFIG_END
trunk/src/mame/drivers/jpmsys5.cpp
r253023r253024
473473READ8_MEMBER(jpmsys5_state::u29_porta_r)
474474{
475475   int meter_bit =0;
476   
476
477477   if (m_meters != nullptr)
478478   {
479479      int combined_meter = m_meters->GetActivity(0) | m_meters->GetActivity(1) |
r253023r253024
492492
493493      return m_direct_port->read() | meter_bit;
494494   }
495   
495
496496   else
497497      return m_direct_port->read() | meter_bit;
498498}
r253023r253024
880880   MCFG_PTM6840_OUT0_CB(WRITE8(jpmsys5_state, u26_o1_callback))
881881   MCFG_PTM6840_IRQ_CB(WRITELINE(jpmsys5_state, ptm_irq))
882882   MCFG_DEFAULT_LAYOUT(layout_jpmsys5)
883   
883
884884   MCFG_DEVICE_ADD("meters", METERS, 0)
885885   MCFG_METERS_NUMBER(8)
886886MACHINE_CONFIG_END
r253023r253024
933933   MCFG_PTM6840_OUT0_CB(WRITE8(jpmsys5_state, u26_o1_callback))
934934   MCFG_PTM6840_IRQ_CB(WRITELINE(jpmsys5_state, ptm_irq))
935935   MCFG_DEFAULT_LAYOUT(layout_jpmsys5)
936   
936
937937   MCFG_DEVICE_ADD("meters", METERS, 0)
938938   MCFG_METERS_NUMBER(8)
939939MACHINE_CONFIG_END
trunk/src/mame/drivers/kaneko16.cpp
r253023r253024
785785
786786static ADDRESS_MAP_START( wingforc_soundport, AS_IO, 8, kaneko16_state )
787787   ADDRESS_MAP_GLOBAL_MASK(0xff)
788//   AM_RANGE(0x00, 0x00) // 02 written at boot
788//  AM_RANGE(0x00, 0x00) // 02 written at boot
789789   AM_RANGE(0x02, 0x03) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write)
790790   AM_RANGE(0x06, 0x06) AM_READ(soundlatch_byte_r)
791791   AM_RANGE(0x0a, 0x0a) AM_DEVREADWRITE("oki", okim6295_device, read, write)
r253023r253024
11431143   PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN )
11441144   PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN )
11451145   PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
1146   PORT_SERVICE_NO_TOGGLE( 0x2000, IP_ACTIVE_LOW )      // unused
1147   PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_TILT )         // unused
1146   PORT_SERVICE_NO_TOGGLE( 0x2000, IP_ACTIVE_LOW )     // unused
1147   PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_TILT )         // unused
11481148   PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_SERVICE1 )
11491149INPUT_PORTS_END
11501150
trunk/src/mame/drivers/liberatr.cpp
r253023r253024
158158   // reset the control latch on the EAROM
159159   m_earom->set_control(0, 1, 1, 0, 0);
160160}
161   
162161
163162
163
164164/*************************************
165165 *
166166 *  Output ports
trunk/src/mame/drivers/marywu.cpp
r253023r253024
11// license:GPL2+
22// copyright-holders:Felipe Sanches
33/*************************************************************************
4 
4
55  This is a driver for a gambling board with a yet unknown name.
66  The PCB is labeled with: WU- MARY-1A
77  And there's a text string in the ROM that says: "Music by: SunKiss Chen"
r253023r253024
2525class marywu_state : public driver_device
2626{
2727public:
28    marywu_state(const machine_config &mconfig, device_type type, const char *tag)
29        : driver_device(mconfig, type, tag)
30    { }
28   marywu_state(const machine_config &mconfig, device_type type, const char *tag)
29      : driver_device(mconfig, type, tag)
30   { }
3131
32    DECLARE_WRITE8_MEMBER(display_7seg_data_w);
33    DECLARE_WRITE8_MEMBER(multiplex_7seg_w);
34    DECLARE_WRITE8_MEMBER(ay1_port_a_w);
35    DECLARE_WRITE8_MEMBER(ay1_port_b_w);
36    DECLARE_WRITE8_MEMBER(ay2_port_a_w);
37    DECLARE_WRITE8_MEMBER(ay2_port_b_w);
38    DECLARE_READ8_MEMBER(keyboard_r);
39    DECLARE_READ8_MEMBER(port_r);
32   DECLARE_WRITE8_MEMBER(display_7seg_data_w);
33   DECLARE_WRITE8_MEMBER(multiplex_7seg_w);
34   DECLARE_WRITE8_MEMBER(ay1_port_a_w);
35   DECLARE_WRITE8_MEMBER(ay1_port_b_w);
36   DECLARE_WRITE8_MEMBER(ay2_port_a_w);
37   DECLARE_WRITE8_MEMBER(ay2_port_b_w);
38   DECLARE_READ8_MEMBER(keyboard_r);
39   DECLARE_READ8_MEMBER(port_r);
4040private:
41    uint8_t m_selected_7seg_module;
41   uint8_t m_selected_7seg_module;
4242};
4343
4444static INPUT_PORTS_START( marywu )
45    PORT_START("KEYS1")
46    PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1)
47    PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2)
48    PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3)
49    PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4)
50    PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5)
51    PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6)
52    PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7)
53    PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8)
45   PORT_START("KEYS1")
46   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1)
47   PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2)
48   PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3)
49   PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4)
50   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5)
51   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6)
52   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7)
53   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8)
5454
55    PORT_START("KEYS2")
56    PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q)
57    PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W)
58    PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E)
59    PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R)
60    PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T)
61    PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y)
62    PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U)
63    PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I)
55   PORT_START("KEYS2")
56   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q)
57   PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W)
58   PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E)
59   PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R)
60   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T)
61   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y)
62   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U)
63   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I)
6464
65    PORT_START("DSW")
66    PORT_DIPNAME( 0x01, 0x01, "Unknown bit #0" )    PORT_DIPLOCATION("DSW:0")
67        PORT_DIPSETTING(0x01, DEF_STR( On ) )
68        PORT_DIPSETTING(0x00, DEF_STR( Off ) )
69    PORT_DIPNAME( 0x02, 0x02, "Unknown bit #1" )    PORT_DIPLOCATION("DSW:1")
70        PORT_DIPSETTING(0x02, DEF_STR( On ) )
71        PORT_DIPSETTING(0x00, DEF_STR( Off ) )
72    PORT_DIPNAME( 0x04, 0x04, "Unknown bit #2" )    PORT_DIPLOCATION("DSW:2")
73        PORT_DIPSETTING(0x04, DEF_STR( On ) )
74        PORT_DIPSETTING(0x00, DEF_STR( Off ) )
75    PORT_DIPNAME( 0x08, 0x08, "Unknown bit #3" )    PORT_DIPLOCATION("DSW:3")
76        PORT_DIPSETTING(0x08, DEF_STR( On ) )
77        PORT_DIPSETTING(0x00, DEF_STR( Off ) )
78    PORT_DIPNAME( 0x10, 0x10, "Unknown bit #4" )    PORT_DIPLOCATION("DSW:4")
79        PORT_DIPSETTING(0x10, DEF_STR( On ) )
80        PORT_DIPSETTING(0x00, DEF_STR( Off ) )
81    PORT_DIPNAME( 0x20, 0x20, "Unknown bit #5" )    PORT_DIPLOCATION("DSW:5")
82        PORT_DIPSETTING(0x20, DEF_STR( On ) )
83        PORT_DIPSETTING(0x00, DEF_STR( Off ) )
84    PORT_DIPNAME( 0x40, 0x40, "Unknown bit #6" )    PORT_DIPLOCATION("DSW:6")
85        PORT_DIPSETTING(0x40, DEF_STR( On ) )
86        PORT_DIPSETTING(0x00, DEF_STR( Off ) )
87    PORT_DIPNAME( 0x80, 0x80, "Unknown bit #7" )    PORT_DIPLOCATION("DSW:7")
88        PORT_DIPSETTING(0x80, DEF_STR( On ) )
89        PORT_DIPSETTING(0x00, DEF_STR( Off ) )
65   PORT_START("DSW")
66   PORT_DIPNAME( 0x01, 0x01, "Unknown bit #0" )    PORT_DIPLOCATION("DSW:0")
67      PORT_DIPSETTING(0x01, DEF_STR( On ) )
68      PORT_DIPSETTING(0x00, DEF_STR( Off ) )
69   PORT_DIPNAME( 0x02, 0x02, "Unknown bit #1" )    PORT_DIPLOCATION("DSW:1")
70      PORT_DIPSETTING(0x02, DEF_STR( On ) )
71      PORT_DIPSETTING(0x00, DEF_STR( Off ) )
72   PORT_DIPNAME( 0x04, 0x04, "Unknown bit #2" )    PORT_DIPLOCATION("DSW:2")
73      PORT_DIPSETTING(0x04, DEF_STR( On ) )
74      PORT_DIPSETTING(0x00, DEF_STR( Off ) )
75   PORT_DIPNAME( 0x08, 0x08, "Unknown bit #3" )    PORT_DIPLOCATION("DSW:3")
76      PORT_DIPSETTING(0x08, DEF_STR( On ) )
77      PORT_DIPSETTING(0x00, DEF_STR( Off ) )
78   PORT_DIPNAME( 0x10, 0x10, "Unknown bit #4" )    PORT_DIPLOCATION("DSW:4")
79      PORT_DIPSETTING(0x10, DEF_STR( On ) )
80      PORT_DIPSETTING(0x00, DEF_STR( Off ) )
81   PORT_DIPNAME( 0x20, 0x20, "Unknown bit #5" )    PORT_DIPLOCATION("DSW:5")
82      PORT_DIPSETTING(0x20, DEF_STR( On ) )
83      PORT_DIPSETTING(0x00, DEF_STR( Off ) )
84   PORT_DIPNAME( 0x40, 0x40, "Unknown bit #6" )    PORT_DIPLOCATION("DSW:6")
85      PORT_DIPSETTING(0x40, DEF_STR( On ) )
86      PORT_DIPSETTING(0x00, DEF_STR( Off ) )
87   PORT_DIPNAME( 0x80, 0x80, "Unknown bit #7" )    PORT_DIPLOCATION("DSW:7")
88      PORT_DIPSETTING(0x80, DEF_STR( On ) )
89      PORT_DIPSETTING(0x00, DEF_STR( Off ) )
9090
91    PORT_START("PUSHBUTTONS")
92    PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
93    PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
94    PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
95    PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
96    PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A)
97    PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S)
98    PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D)
99    PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F)
91   PORT_START("PUSHBUTTONS")
92   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
93   PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
94   PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
95   PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
96   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A)
97   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S)
98   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D)
99   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F)
100100INPUT_PORTS_END
101101
102102WRITE8_MEMBER( marywu_state::ay1_port_a_w )
103103{
104    for (uint8_t i=0; i<8; i++){
105        output().set_led_value(i, (data & (1 << i)) ? 1 : 0);
106    }
104   for (uint8_t i=0; i<8; i++){
105      output().set_led_value(i, (data & (1 << i)) ? 1 : 0);
106   }
107107}
108108
109109WRITE8_MEMBER( marywu_state::ay1_port_b_w )
110110{
111    for (uint8_t i=0; i<8; i++){
112        output().set_led_value(i+8, (data & (1 << i)) ? 1 : 0);
113    }
111   for (uint8_t i=0; i<8; i++){
112      output().set_led_value(i+8, (data & (1 << i)) ? 1 : 0);
113   }
114114}
115115
116116WRITE8_MEMBER( marywu_state::ay2_port_a_w )
117117{
118    for (uint8_t i=0; i<8; i++){
119        output().set_led_value(i+16, (data & (1 << i)) ? 1 : 0);
120    }
118   for (uint8_t i=0; i<8; i++){
119      output().set_led_value(i+16, (data & (1 << i)) ? 1 : 0);
120   }
121121}
122122
123123WRITE8_MEMBER( marywu_state::ay2_port_b_w )
124124{
125    for (uint8_t i=0; i<6; i++){
126        /* we only have 30 LEDs. The last 2 bits in this port are unused.  */
127        output().set_led_value(i+24, (data & (1 << i)) ? 1 : 0);
128    }
125   for (uint8_t i=0; i<6; i++){
126      /* we only have 30 LEDs. The last 2 bits in this port are unused.  */
127      output().set_led_value(i+24, (data & (1 << i)) ? 1 : 0);
128   }
129129}
130130
131131WRITE8_MEMBER( marywu_state::multiplex_7seg_w )
132132{
133    m_selected_7seg_module = data;
133   m_selected_7seg_module = data;
134134}
135135
136136READ8_MEMBER( marywu_state::port_r )
137137{
138138//TODO: figure out what each bit is mapped to in the 80c31 ports P1 and P3
139    switch(offset){
140        //case 1:
141   //   return (1 << 6);
139   switch(offset){
140      //case 1:
141   //  return (1 << 6);
142142   default:
143143      return 0x00;
144    }
144   }
145145}
146146
147147READ8_MEMBER( marywu_state::keyboard_r )
148148{
149    switch(m_selected_7seg_module % 8){
149   switch(m_selected_7seg_module % 8){
150150   case 0: return ioport("KEYS1")->read();
151        case 1: return ioport("KEYS2")->read();
152        case 2: return ioport("DSW")->read();
153        case 3: return ioport("PUSHBUTTONS")->read();
151      case 1: return ioport("KEYS2")->read();
152      case 2: return ioport("DSW")->read();
153      case 3: return ioport("PUSHBUTTONS")->read();
154154   default:
155            return 0x00;
156    }
155         return 0x00;
156   }
157157}
158158
159159WRITE8_MEMBER( marywu_state::display_7seg_data_w )
160160{
161    static const UINT8 patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0, 0, 0, 0, 0, 0 }; // HEF4511BP (7 seg display driver)
161   static const UINT8 patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0, 0, 0, 0, 0, 0 }; // HEF4511BP (7 seg display driver)
162162
163    output().set_digit_value(2 * m_selected_7seg_module + 0, patterns[data & 0x0F]);
164    output().set_digit_value(2 * m_selected_7seg_module + 1, patterns[(data >> 4) & 0x0F]);
163   output().set_digit_value(2 * m_selected_7seg_module + 0, patterns[data & 0x0F]);
164   output().set_digit_value(2 * m_selected_7seg_module + 1, patterns[(data >> 4) & 0x0F]);
165165}
166166
167167static ADDRESS_MAP_START( program_map, AS_PROGRAM, 8, marywu_state )
168    AM_RANGE(0x0000, 0x7fff) AM_ROM
168   AM_RANGE(0x0000, 0x7fff) AM_ROM
169169ADDRESS_MAP_END
170170
171171static ADDRESS_MAP_START( io_map, AS_IO, 8, marywu_state )
172    AM_RANGE(0x8000, 0x87ff) AM_MIRROR(0x0100) AM_RAM /* HM6116: 2kbytes of Static RAM */
173    AM_RANGE(0xb000, 0xb000) AM_MIRROR(0x0ffe) AM_DEVREADWRITE("i8279", i8279_device, data_r, data_w)
174    AM_RANGE(0xb001, 0xb001) AM_MIRROR(0x0ffe) AM_DEVREADWRITE("i8279", i8279_device, status_r, cmd_w)
175    AM_RANGE(0x9000, 0x9000) AM_MIRROR(0x0ffc) AM_DEVWRITE("ay1", ay8910_device, data_address_w)
176    AM_RANGE(0x9001, 0x9001) AM_MIRROR(0x0ffc) AM_DEVREADWRITE("ay1", ay8910_device, data_r, data_w)
177    AM_RANGE(0x9002, 0x9002) AM_MIRROR(0x0ffc) AM_DEVWRITE("ay2", ay8910_device, data_address_w)
178    AM_RANGE(0x9003, 0x9003) AM_MIRROR(0x0ffc) AM_DEVREADWRITE("ay2", ay8910_device, data_r, data_w)
179    AM_RANGE(0xf000, 0xf000) AM_NOP /* TODO: Investigate this. There's something going on at this address range. */
180    AM_RANGE(MCS51_PORT_P0, MCS51_PORT_P3) AM_READ(port_r)
172   AM_RANGE(0x8000, 0x87ff) AM_MIRROR(0x0100) AM_RAM /* HM6116: 2kbytes of Static RAM */
173   AM_RANGE(0xb000, 0xb000) AM_MIRROR(0x0ffe) AM_DEVREADWRITE("i8279", i8279_device, data_r, data_w)
174   AM_RANGE(0xb001, 0xb001) AM_MIRROR(0x0ffe) AM_DEVREADWRITE("i8279", i8279_device, status_r, cmd_w)
175   AM_RANGE(0x9000, 0x9000) AM_MIRROR(0x0ffc) AM_DEVWRITE("ay1", ay8910_device, data_address_w)
176   AM_RANGE(0x9001, 0x9001) AM_MIRROR(0x0ffc) AM_DEVREADWRITE("ay1", ay8910_device, data_r, data_w)
177   AM_RANGE(0x9002, 0x9002) AM_MIRROR(0x0ffc) AM_DEVWRITE("ay2", ay8910_device, data_address_w)
178   AM_RANGE(0x9003, 0x9003) AM_MIRROR(0x0ffc) AM_DEVREADWRITE("ay2", ay8910_device, data_r, data_w)
179   AM_RANGE(0xf000, 0xf000) AM_NOP /* TODO: Investigate this. There's something going on at this address range. */
180   AM_RANGE(MCS51_PORT_P0, MCS51_PORT_P3) AM_READ(port_r)
181181ADDRESS_MAP_END
182182
183183static MACHINE_CONFIG_START( marywu , marywu_state )
184    /* basic machine hardware */
185    MCFG_CPU_ADD("maincpu", I80C31, XTAL_10_738635MHz) //actual CPU is a Winbond w78c31b-24
186    MCFG_CPU_PROGRAM_MAP(program_map)
187    MCFG_CPU_IO_MAP(io_map)
184   /* basic machine hardware */
185   MCFG_CPU_ADD("maincpu", I80C31, XTAL_10_738635MHz) //actual CPU is a Winbond w78c31b-24
186   MCFG_CPU_PROGRAM_MAP(program_map)
187   MCFG_CPU_IO_MAP(io_map)
188188
189    /* Keyboard & display interface */
190    MCFG_DEVICE_ADD("i8279", I8279, XTAL_10_738635MHz) /* should it be perhaps a fraction of the XTAL clock ? */
191    MCFG_I8279_OUT_SL_CB(WRITE8(marywu_state, multiplex_7seg_w))          // select  block of 7seg modules by multiplexing the SL scan lines
192    MCFG_I8279_IN_RL_CB(READ8(marywu_state, keyboard_r))                  // keyboard Return Lines
193    MCFG_I8279_OUT_DISP_CB(WRITE8(marywu_state, display_7seg_data_w))
189   /* Keyboard & display interface */
190   MCFG_DEVICE_ADD("i8279", I8279, XTAL_10_738635MHz) /* should it be perhaps a fraction of the XTAL clock ? */
191   MCFG_I8279_OUT_SL_CB(WRITE8(marywu_state, multiplex_7seg_w))          // select  block of 7seg modules by multiplexing the SL scan lines
192   MCFG_I8279_IN_RL_CB(READ8(marywu_state, keyboard_r))                  // keyboard Return Lines
193   MCFG_I8279_OUT_DISP_CB(WRITE8(marywu_state, display_7seg_data_w))
194194
195    /* Video */
196    MCFG_DEFAULT_LAYOUT(layout_marywu)
195   /* Video */
196   MCFG_DEFAULT_LAYOUT(layout_marywu)
197197
198    /* sound hardware */
199    MCFG_SPEAKER_STANDARD_MONO("mono")
200    MCFG_SOUND_ADD("ay1", AY8910, XTAL_10_738635MHz) /* should it be perhaps a fraction of the XTAL clock ? */
201    MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
202    MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(marywu_state, ay1_port_a_w))
203    MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(marywu_state, ay1_port_b_w))
204   
205    MCFG_SOUND_ADD("ay2", AY8910, XTAL_10_738635MHz) /* should it be perhaps a fraction of the XTAL clock ? */
206    MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
207    MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(marywu_state, ay2_port_a_w))
208    MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(marywu_state, ay2_port_b_w))
198   /* sound hardware */
199   MCFG_SPEAKER_STANDARD_MONO("mono")
200   MCFG_SOUND_ADD("ay1", AY8910, XTAL_10_738635MHz) /* should it be perhaps a fraction of the XTAL clock ? */
201   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
202   MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(marywu_state, ay1_port_a_w))
203   MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(marywu_state, ay1_port_b_w))
204
205   MCFG_SOUND_ADD("ay2", AY8910, XTAL_10_738635MHz) /* should it be perhaps a fraction of the XTAL clock ? */
206   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
207   MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(marywu_state, ay2_port_a_w))
208   MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(marywu_state, ay2_port_b_w))
209209MACHINE_CONFIG_END
210210
211211ROM_START( marywu )
212212   ROM_REGION( 0x8000, "maincpu", 0 )
213    ROM_LOAD( "marywu_sunkiss_chen.rom", 0x0000, 0x8000, CRC(11f67c7d) SHA1(9c1fd1a5cc6e2b0d675f0217aa8ff21c30609a0c) )
213   ROM_LOAD( "marywu_sunkiss_chen.rom", 0x0000, 0x8000, CRC(11f67c7d) SHA1(9c1fd1a5cc6e2b0d675f0217aa8ff21c30609a0c) )
214214ROM_END
215215
216216/*    YEAR  NAME       PARENT   MACHINE   INPUT     STATE          INIT   ROT    COMPANY       FULLNAME          FLAGS  */
trunk/src/mame/drivers/megasys1.cpp
r253023r253024
199199   int scanline = param;
200200
201201   // TODO: there's more than one hint that MCU controls IRQ signals via work RAM buffers.
202   //      This is a bare miminum guessing for this specific game, it definitely don't like neither lv 1 nor 2.
202   //      This is a bare miminum guessing for this specific game, it definitely don't like neither lv 1 nor 2.
203203   //       Of course MCU is probably doing a lot more to mask and probably set a specific line too.
204204   if(m_ram[0] == 0)
205205      return;
trunk/src/mame/drivers/metro.cpp
r253023r253024
50665066***************************************************************************/
50675067
50685068ROM_START( karatour )
5069  ROM_REGION( 0x080000, "maincpu", 0 )        /* 68000 Code */
5070  ROM_LOAD16_BYTE( "2.2FAB.8G",  0x000000, 0x040000, CRC(199a28d4) SHA1(ae880b5d5a1703c54e0ef27015039c7bb05eb185) )  // Hand-written label "(2) 2FAB"
5071  ROM_LOAD16_BYTE( "3.0560.10G", 0x000001, 0x040000, CRC(b054e683) SHA1(51e28a99f87684f3e56c7a168523f94717903d79) )  // Hand-written label "(3) 0560"
5069   ROM_REGION( 0x080000, "maincpu", 0 )        /* 68000 Code */
5070   ROM_LOAD16_BYTE( "2.2FAB.8G",  0x000000, 0x040000, CRC(199a28d4) SHA1(ae880b5d5a1703c54e0ef27015039c7bb05eb185) )  // Hand-written label "(2) 2FAB"
5071   ROM_LOAD16_BYTE( "3.0560.10G", 0x000001, 0x040000, CRC(b054e683) SHA1(51e28a99f87684f3e56c7a168523f94717903d79) )  // Hand-written label "(3) 0560"
50725072
5073  ROM_REGION( 0x02c000, "audiocpu", 0 )       /* NEC78C10 Code */
5074  ROM_LOAD( "KT001.1I", 0x000000, 0x004000, CRC(1dd2008c) SHA1(488b6f5d15bdbc069ee2cd6d7a0980a228d2f790) )    // 11xxxxxxxxxxxxxxx = 0xFF
5075  ROM_CONTINUE(         0x010000, 0x01c000 )
5073   ROM_REGION( 0x02c000, "audiocpu", 0 )       /* NEC78C10 Code */
5074   ROM_LOAD( "KT001.1I", 0x000000, 0x004000, CRC(1dd2008c) SHA1(488b6f5d15bdbc069ee2cd6d7a0980a228d2f790) )    // 11xxxxxxxxxxxxxxx = 0xFF
5075   ROM_CONTINUE(         0x010000, 0x01c000 )
50765076
5077  ROM_REGION( 0x400000, "gfx1", 0 )   /* Gfx + Data (Addressable by CPU & Blitter) */
5078  ROMX_LOAD( "361A04.15F", 0x000000, 0x100000, CRC(f6bf20a5) SHA1(cb4cb249eb1c106fe7ef0ace735c0cc3106f1ab7) , ROM_GROUPWORD | ROM_SKIP(6))
5079  ROMX_LOAD( "361A07.17D", 0x000002, 0x100000, CRC(794cc1c0) SHA1(ecfdec5874a95846c0fb7966fdd1da625d85531f) , ROM_GROUPWORD | ROM_SKIP(6))
5080  ROMX_LOAD( "361A05.17F", 0x000004, 0x100000, CRC(ea9c11fc) SHA1(176c4419cfe13ff019654a93cd7b0befa238bbc3) , ROM_GROUPWORD | ROM_SKIP(6))
5081  ROMX_LOAD( "361A06.15D", 0x000006, 0x100000, CRC(7e15f058) SHA1(267f0a5acb874d4fff3556ffa405e24724174667) , ROM_GROUPWORD | ROM_SKIP(6))
5077   ROM_REGION( 0x400000, "gfx1", 0 )   /* Gfx + Data (Addressable by CPU & Blitter) */
5078   ROMX_LOAD( "361A04.15F", 0x000000, 0x100000, CRC(f6bf20a5) SHA1(cb4cb249eb1c106fe7ef0ace735c0cc3106f1ab7) , ROM_GROUPWORD | ROM_SKIP(6))
5079   ROMX_LOAD( "361A07.17D", 0x000002, 0x100000, CRC(794cc1c0) SHA1(ecfdec5874a95846c0fb7966fdd1da625d85531f) , ROM_GROUPWORD | ROM_SKIP(6))
5080   ROMX_LOAD( "361A05.17F", 0x000004, 0x100000, CRC(ea9c11fc) SHA1(176c4419cfe13ff019654a93cd7b0befa238bbc3) , ROM_GROUPWORD | ROM_SKIP(6))
5081   ROMX_LOAD( "361A06.15D", 0x000006, 0x100000, CRC(7e15f058) SHA1(267f0a5acb874d4fff3556ffa405e24724174667) , ROM_GROUPWORD | ROM_SKIP(6))
50825082
5083  ROM_REGION( 0x040000, "oki", 0 )    /* Samples */
5084  ROM_LOAD( "8.4A06.1D", 0x000000, 0x040000, CRC(8d208179) SHA1(54a27ef155828435bc5eba60790a8584274c8b4a) )  // Hand-written label "(8) 4A06"
5083   ROM_REGION( 0x040000, "oki", 0 )    /* Samples */
5084   ROM_LOAD( "8.4A06.1D", 0x000000, 0x040000, CRC(8d208179) SHA1(54a27ef155828435bc5eba60790a8584274c8b4a) )  // Hand-written label "(8) 4A06"
50855085ROM_END
50865086
50875087ROM_START( karatourj )
trunk/src/mame/drivers/mpu3.cpp
r253023r253024
856856   MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu3_state, reel2_optic_cb))
857857   MCFG_MPU3_REEL_ADD("reel3")
858858   MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(mpu3_state, reel3_optic_cb))
859   
859
860860   MCFG_DEVICE_ADD("meters", METERS, 0)
861861   MCFG_METERS_NUMBER(8)
862862
trunk/src/mame/drivers/mpu4hw.cpp
r253023r253024
26342634   MCFG_PIA_CB2_HANDLER(WRITELINE(mpu4_state, pia_ic8_cb2_w))
26352635   MCFG_PIA_IRQA_HANDLER(WRITELINE(mpu4_state, cpu0_irq))
26362636   MCFG_PIA_IRQB_HANDLER(WRITELINE(mpu4_state, cpu0_irq))
2637   
2637
26382638   MCFG_DEVICE_ADD("meters", METERS, 0)
26392639   MCFG_METERS_NUMBER(8)
26402640
trunk/src/mame/drivers/naomi.cpp
r253023r253024
18611861   if (reg == 0x280/4)
18621862   {
18631863   /*
1864             0x00600280 r  0000dcba
1865                 a/b/c/d - coin inputs 1-4, active low
1866                 (ab == 0) -> BIOS skip RAM test
1867        */
1864            0x00600280 r  0000dcba
1865                a/b/c/d - coin inputs 1-4, active low
1866                (ab == 0) -> BIOS skip RAM test
1867       */
18681868      return U64(0xffffffff00000000) | (ioport("COINS")->read() & 0x0F);
18691869   } else
18701870      if (reg == 0x284/4)
r253023r253024
18881888      aw_ctrl_type = dat & 0xF0;
18891889   }
18901890   /*
1891            0x00600284 rw ddcc0000
1892                cc/dd - set type of Maple devices at ports 2/3 (EX. IO board)
1893            0 - regular Atomiswave controller
1894            1 - DC lightgun
1895            2 - DC mouse/trackball
1896            TODO: hook this then MAME have such devices emulated
1891           0x00600284 rw ddcc0000
1892               cc/dd - set type of Maple devices at ports 2/3 (EX. IO board)
1893           0 - regular Atomiswave controller
1894           1 - DC lightgun
1895           2 - DC mouse/trackball
1896           TODO: hook this then MAME have such devices emulated
18971897
1898            0x00600288 rw 0000dcba
1899                a - 1P coin couner
1900                b - 2P coin couner
1901                c - 1P coin lockout
1902                d - 2P coin lockout
1898           0x00600288 rw 0000dcba
1899               a - 1P coin couner
1900               b - 2P coin couner
1901               c - 1P coin lockout
1902               d - 2P coin lockout
19031903
1904            0x0060028C rw POUT CN304 (EX. IO board)
1904           0x0060028C rw POUT CN304 (EX. IO board)
19051905   */
19061906
19071907   osd_printf_verbose("MODEM: [%08x=%x] write %" I64FMT "x to %x, mask %" I64FMT "x\n", 0x600000+reg*4, dat, data, offset, mem_mask);
trunk/src/mame/drivers/neogeo.cpp
r253023r253024
308308    MVS CHA:
309309    GIGA CHAR Board 1.0 Rev. A
310310    GIGA CHAR Board 1.5 Rev. 0
311   GIGA CHAR Board 1.5 Rev. C
311    GIGA CHAR Board 1.5 Rev. C
312312
313313    MVS PROG:
314314    GIGA PROG Board 1.0 Rev. B
315315    GIGA PROG Board 1.5 Rev. A
316   GIGA PROG Board 1.5 Rev. C
316    GIGA PROG Board 1.5 Rev. C
317317
318318
319319    Unofficial pcb's from NEOBITZ:
trunk/src/mame/drivers/neogeo_noslot.cpp
r253023r253024
33293329   NEO_SFIX_128K( "d96-04.s1", CRC(9caae538) SHA1(cf2d90a7c1a42107c0bb8b9a61397634286dbe0a) ) /* mask rom TC531000 */
33303330
33313331   NEO_BIOS_AUDIO_128K( "d96-06.m1", CRC(f424368a) SHA1(5e5bbcaeb82bed2ee17df08f005ca20ad1030723) ) /* M27C1001 */
3332   /* M1 on eprom with sticker; label is D96-06 */
3332   /* M1 on eprom with sticker; label is D96-06 */
33333333
33343334   ROM_REGION( 0x380000, "ymsnd", 0 )
33353335   ROM_LOAD( "068-v1.v1", 0x000000, 0x100000, CRC(2ced86df) SHA1(d6b73d1f31efbd74fb745200d4dade5f80b71541) ) /* unused */ /* mask rom TC538200 */
r253023r253024
46014601 . NGM-222
46024602 NEO-MVS PROGBK1 / NEO-MVS CHA256B
46034603 NEO-MVS PROGBK1 / NEO-MVS CHA256
4604 . NGH-222
4604 . NGH-222
46054605 NEO-AEG PROGBK1Y / NEO-AEG CHA256RY
46064606****************************************/
46074607
r253023r253024
96109610                                                                                                NEOGEO ROM-cart:2004/07/15
96119611****************************************************************************/
96129612
9613/*    YEAR  NAME        PARENT    MACHINE         INPUT   INIT            MONITOR */
9613/*    YEAR  NAME        PARENT    MACHINE          INPUT   INIT            MONITOR */
96149614/* SNK */
96159615GAME( 1990, nam1975,    neogeo,   neogeo_noslot,   neogeo, neogeo_state,   neogeo,   ROT0, "SNK", "NAM-1975 (NGM-001)(NGH-001)", MACHINE_SUPPORTS_SAVE )
96169616GAME( 1990, bstars,     neogeo,   neogeo_noslot,   neogeo, neogeo_state,   neogeo,   ROT0, "SNK", "Baseball Stars Professional (NGM-002)", MACHINE_SUPPORTS_SAVE )
trunk/src/mame/drivers/nokia_3310.cpp
r253023r253024
11// license:BSD-3-Clause
22// copyright-holders:Sandro Ronco
33/*
4   Driver for Nokia phones based on Texas Instrument MAD2WD1 (ARM7TDMI + DSP)
4    Driver for Nokia phones based on Texas Instrument MAD2WD1 (ARM7TDMI + DSP)
55
6   Driver based on documentations found here:
7      http://nokix.sourceforge.net/help/blacksphere/sub_050main.htm
8      http://tudor.rdslink.ro/MADos/
6    Driver based on documentations found here:
7        http://nokix.sourceforge.net/help/blacksphere/sub_050main.htm
8        http://tudor.rdslink.ro/MADos/
99
1010*/
1111
r253023r253024
1919#include "debugger.h"
2020
2121
22#define LOG_MAD2_REGISTER_ACCESS   (0)
23#define LOG_CCONT_REGISTER_ACCESS   (0)
22#define LOG_MAD2_REGISTER_ACCESS    (0)
23#define LOG_CCONT_REGISTER_ACCESS   (0)
2424
2525
2626class noki3310_state : public driver_device
r253023r253024
5656   TIMER_CALLBACK_MEMBER(timer_watchdog);
5757   TIMER_CALLBACK_MEMBER(timer_fiq8);
5858
59   DECLARE_READ16_MEMBER(ram_r)      { return m_ram[offset] & mem_mask; }
60   DECLARE_WRITE16_MEMBER(ram_w)      { COMBINE_DATA(&m_ram[offset]); }
59   DECLARE_READ16_MEMBER(ram_r)        { return m_ram[offset] & mem_mask; }
60   DECLARE_WRITE16_MEMBER(ram_w)       { COMBINE_DATA(&m_ram[offset]); }
6161   DECLARE_READ16_MEMBER(dsp_ram_r);
6262   DECLARE_WRITE16_MEMBER(dsp_ram_w);
6363   DECLARE_INPUT_CHANGED_MEMBER(key_irq);
r253023r253024
7272
7373   std::unique_ptr<UINT16[]>   m_ram;
7474   std::unique_ptr<UINT16[]>   m_dsp_ram;
75   UINT8      m_power_on;
76   UINT16      m_fiq_status;
77   UINT16      m_irq_status;
78   UINT16      m_timer1_counter;
79   UINT16      m_timer0_counter;
75   UINT8       m_power_on;
76   UINT16      m_fiq_status;
77   UINT16      m_irq_status;
78   UINT16      m_timer1_counter;
79   UINT16      m_timer0_counter;
8080
81   emu_timer *   m_timer0;
82   emu_timer *   m_timer1;
83   emu_timer *   m_timer_watchdog;
84   emu_timer *   m_timer_fiq8;
81   emu_timer * m_timer0;
82   emu_timer * m_timer1;
83   emu_timer * m_timer_watchdog;
84   emu_timer * m_timer_fiq8;
8585
8686   // CCONT
8787   struct nokia_ccont
8888   {
89      bool   dc;
90      UINT8   cmd;
91      UINT8   watchdog;
92      UINT8   regs[0x10];
89      bool    dc;
90      UINT8   cmd;
91      UINT8   watchdog;
92      UINT8   regs[0x10];
9393   } m_ccont;
9494
95   UINT8      m_mad2_regs[0x100];
95   UINT8       m_mad2_regs[0x100];
9696};
9797
9898
r253023r253024
101101{
102102   switch(offset)
103103   {
104   case 0x00:   return "[CTSI] DCT3 ASIC version Primary hardware version (r)";
105   case 0x01:   return "[CTSI] MCU reset control register (rw)";
106   case 0x02:   return "[CTSI] DSP reset control register (rw)";
107   case 0x03:   return "[CTSI] ASIC watchdog write register (w)";
108   case 0x04:   return "[CTSI] Sleep clock counter (MSB) (r)";
109   case 0x05:   return "[CTSI] Sleep clock counter (LSB) (r)";
110   case 0x06:   return "[CTSI] ? (sleep) clock destination (LSB) (r)";
111   case 0x07:   return "[CTSI] ? (sleep) clock destination (MSB) (r)";
112   case 0x08:   return "[CTSI] FIQ lines active (rw)";
113   case 0x09:   return "[CTSI] IRQ lines active (rw)";
114   case 0x0A:   return "[CTSI] FIQ lines mask (rw)";
115   case 0x0B:   return "[CTSI] IRQ lines mask (rw)";
116   case 0x0C:   return "[CTSI] Interrupt control register (rw)";
117   case 0x0D:   return "[CTSI] Clock control register (rw)";
118   case 0x0E:   return "[CTSI] Interrupt trigger register (r)";
119   case 0x0F:   return "[CTSI] Programmable timer clock divider (rw)";
120   case 0x10:   return "[CTSI] Programmable timer counter (MSB) (r)";
121   case 0x11:   return "[CTSI] Programmable timer counter (LSB) (r)";
122   case 0x12:   return "[CTSI] Programmable timer destination (MSB) (rw)";
123   case 0x13:   return "[CTSI] Programmable timer destination (LSB) (rw)";
124   case 0x15:   return "[PUP] PUP control (rw)";
125   case 0x16:   return "[PUP] FIQ 8 (timer?) interrupt control (rw)";
126   case 0x18:   return "[PUP] MBUS control (rw)";
127   case 0x19:   return "[PUP] MBUS status (rw)";
128   case 0x1A:   return "[PUP] MBUS RX/TX (rw)";
129   case 0x1B:   return "[PUP] Vibrator (w)";
130   case 0x1C:   return "[PUP] Buzzer clock divider (w)";
131   case 0x1E:   return "[PUP] Buzzer volume (w)";
132   case 0x20:   return "[PUP] McuGenIO signal lines (rw)";
133   case 0x22:   return "[PUP] ? (?)";
134   case 0x24:   return "[PUP] McuGenIO I/O direction (rw)";
135   case 0x28:   return "[UIF/KBGPIO] Keyboard ROW signal lines (rw)";
136   case 0x29:   return "[UIF/KBGPIO] Keyboard ROW ?? (rw)";
137   case 0x2A:   return "[UIF/KBGPIO] Keyboard COL signal lines (rw)";
138   case 0x2B:   return "[UIF/KBGPIO] Keyboard COL ?? (rw)";
139   case 0x2C:   return "[UIF/GENSIO] CCont write (w)";
140   case 0x2D:   return "[UIF/GENSIO] GENSIO start transaction (w)";
141   case 0x2E:   return "[UIF/GENSIO] LCD data write (w)";
142   case 0x32:   return "[UIF] CTRL I/O 2 (rw)";
143   case 0x33:   return "[UIF] CTRL I/O 3 (rw)";
144   case 0x36:   return "[SIMI] SIM UART TxD (w)";
145   case 0x37:   return "[SIMI] SIM UART RxD (r)";
146   case 0x38:   return "[SIMI] SIM UART Interrupt Identification (r)";
147   case 0x39:   return "[SIMI] SIM Control (rw)";
148   case 0x3A:   return "[SIMI] SIM Clock Control (rw)";
149   case 0x3B:   return "[SIMI] SIM UART TxD Low Water Mark (?)";
150   case 0x3C:   return "[SIMI] SIM UART RxD queue fill (r)";
151   case 0x3D:   return "[SIMI] SIM RxD flags (?)";
152   case 0x3E:   return "[SIMI] SIM TxD flags (?)";
153   case 0x3F:   return "[SIMI] SIM UART TxD queue fill (r)";
154   case 0x68:   return "[UIF/KBGPIO] Keyboard ROW ?? 2 (rw)";
155   case 0x69:   return "[UIF/KBGPIO] Keyboard ROW interrupt (rw)";
156   case 0x6A:   return "[UIF/KBGPIO] Keyboard COL ?? 2 (rw)";
157   case 0x6B:   return "[UIF/KBGPIO] Keyboard COL interrupt mask (rw)";
158   case 0x6C:   return "[UIF/GENSIO] CCont read (r)";
159   case 0x6D:   return "[UIF/GENSIO] GENSIO status (r)";
160   case 0x6E:   return "[UIF/GENSIO] LCD command write (w)";
161   case 0x6F:   return "[UIF/GENSIO] GENSIO ?? (3/SELECT1) (?)";
162   case 0x70:   return "[UIF] CTRL I/O 0 I/O direction (1) (rw)";
163   case 0x71:   return "[UIF] CTRL I/O 1 I/O direction (1) (rw)";
164   case 0x72:   return "[UIF] CTRL I/O 2 I/O direction (1) (rw)";
165   case 0x73:   return "[UIF] CTRL I/O 3 I/O direction (1) (rw)";
166   case 0xA8:   return "[UIF/KBGPIO] Keyboard ROW I/O direction (rw)";
167   case 0xA9:   return "[UIF/KBGPIO] Keyboard ROW ?? 3 (rw)";
168   case 0xAA:   return "[UIF/KBGPIO] Keyboard COL I/O direction 0=in 1=out (rw)";
169   case 0xAB:   return "[UIF/KBGPIO] Keyboard COL ?? 3 (rw)";
170   case 0xAD:   return "[UIF/GENSIO] GENSIO ?? (1/SELECT2) (?)";
171   case 0xAE:   return "[UIF/GENSIO] GENSIO ?? (2/SELECT2) (?)";
172   case 0xAF:   return "[UIF/GENSIO] GENSIO ?? (3/SELECT2) (?)";
173   case 0xB0:   return "[UIF] CTRL I/O 0 I/O direction (2) (rw)";
174   case 0xB1:   return "[UIF] CTRL I/O 1 I/O direction (2) (rw)";
175   case 0xB2:   return "[UIF] CTRL I/O 2 I/O direction (2) (rw)";
176   case 0xB3:   return "[UIF] CTRL I/O 3 I/O direction (2) (rw)";
177   case 0xED:   return "[UIF/GENSIO] GENSIO ?? (1/SELECT3) (?)";
178   case 0xEE:   return "[UIF/GENSIO] GENSIO ?? (2/SELECT3) (?)";
179   case 0xEF:   return "[UIF/GENSIO] GENSIO ?? (3/SELECT3) (?)";
180   case 0xF0:   return "[UIF] CTRL I/O 0 input (r)";
181   case 0xF1:   return "[UIF] CTRL I/O 1 input (r)";
182   case 0xF2:   return "[UIF] CTRL I/O 2 input (r)";
183   case 0xF3:   return "[UIF] CTRL I/O 3 input (r)";
184   default:   return "<Unknown>";
104   case 0x00:  return "[CTSI] DCT3 ASIC version Primary hardware version (r)";
105   case 0x01:  return "[CTSI] MCU reset control register (rw)";
106   case 0x02:  return "[CTSI] DSP reset control register (rw)";
107   case 0x03:  return "[CTSI] ASIC watchdog write register (w)";
108   case 0x04:  return "[CTSI] Sleep clock counter (MSB) (r)";
109   case 0x05:  return "[CTSI] Sleep clock counter (LSB) (r)";
110   case 0x06:  return "[CTSI] ? (sleep) clock destination (LSB) (r)";
111   case 0x07:  return "[CTSI] ? (sleep) clock destination (MSB) (r)";
112   case 0x08:  return "[CTSI] FIQ lines active (rw)";
113   case 0x09:  return "[CTSI] IRQ lines active (rw)";
114   case 0x0A:  return "[CTSI] FIQ lines mask (rw)";
115   case 0x0B:  return "[CTSI] IRQ lines mask (rw)";
116   case 0x0C:  return "[CTSI] Interrupt control register (rw)";
117   case 0x0D:  return "[CTSI] Clock control register (rw)";
118   case 0x0E:  return "[CTSI] Interrupt trigger register (r)";
119   case 0x0F:  return "[CTSI] Programmable timer clock divider (rw)";
120   case 0x10:  return "[CTSI] Programmable timer counter (MSB) (r)";
121   case 0x11:  return "[CTSI] Programmable timer counter (LSB) (r)";
122   case 0x12:  return "[CTSI] Programmable timer destination (MSB) (rw)";
123   case 0x13:  return "[CTSI] Programmable timer destination (LSB) (rw)";
124   case 0x15:  return "[PUP] PUP control (rw)";
125   case 0x16:  return "[PUP] FIQ 8 (timer?) interrupt control (rw)";
126   case 0x18:  return "[PUP] MBUS control (rw)";
127   case 0x19:  return "[PUP] MBUS status (rw)";
128   case 0x1A:  return "[PUP] MBUS RX/TX (rw)";
129   case 0x1B:  return "[PUP] Vibrator (w)";
130   case 0x1C:  return "[PUP] Buzzer clock divider (w)";
131   case 0x1E:  return "[PUP] Buzzer volume (w)";
132   case 0x20:  return "[PUP] McuGenIO signal lines (rw)";
133   case 0x22:  return "[PUP] ? (?)";
134   case 0x24:  return "[PUP] McuGenIO I/O direction (rw)";
135   case 0x28:  return "[UIF/KBGPIO] Keyboard ROW signal lines (rw)";
136   case 0x29:  return "[UIF/KBGPIO] Keyboard ROW ?? (rw)";
137   case 0x2A:  return "[UIF/KBGPIO] Keyboard COL signal lines (rw)";
138   case 0x2B:  return "[UIF/KBGPIO] Keyboard COL ?? (rw)";
139   case 0x2C:  return "[UIF/GENSIO] CCont write (w)";
140   case 0x2D:  return "[UIF/GENSIO] GENSIO start transaction (w)";
141   case 0x2E:  return "[UIF/GENSIO] LCD data write (w)";
142   case 0x32:  return "[UIF] CTRL I/O 2 (rw)";
143   case 0x33:  return "[UIF] CTRL I/O 3 (rw)";
144   case 0x36:  return "[SIMI] SIM UART TxD (w)";
145   case 0x37:  return "[SIMI] SIM UART RxD (r)";
146   case 0x38:  return "[SIMI] SIM UART Interrupt Identification (r)";
147   case 0x39:  return "[SIMI] SIM Control (rw)";
148   case 0x3A:  return "[SIMI] SIM Clock Control (rw)";
149   case 0x3B:  return "[SIMI] SIM UART TxD Low Water Mark (?)";
150   case 0x3C:  return "[SIMI] SIM UART RxD queue fill (r)";
151   case 0x3D:  return "[SIMI] SIM RxD flags (?)";
152   case 0x3E:  return "[SIMI] SIM TxD flags (?)";
153   case 0x3F:  return "[SIMI] SIM UART TxD queue fill (r)";
154   case 0x68:  return "[UIF/KBGPIO] Keyboard ROW ?? 2 (rw)";
155   case 0x69:  return "[UIF/KBGPIO] Keyboard ROW interrupt (rw)";
156   case 0x6A:  return "[UIF/KBGPIO] Keyboard COL ?? 2 (rw)";
157   case 0x6B:  return "[UIF/KBGPIO] Keyboard COL interrupt mask (rw)";
158   case 0x6C:  return "[UIF/GENSIO] CCont read (r)";
159   case 0x6D:  return "[UIF/GENSIO] GENSIO status (r)";
160   case 0x6E:  return "[UIF/GENSIO] LCD command write (w)";
161   case 0x6F:  return "[UIF/GENSIO] GENSIO ?? (3/SELECT1) (?)";
162   case 0x70:  return "[UIF] CTRL I/O 0 I/O direction (1) (rw)";
163   case 0x71:  return "[UIF] CTRL I/O 1 I/O direction (1) (rw)";
164   case 0x72:  return "[UIF] CTRL I/O 2 I/O direction (1) (rw)";
165   case 0x73:  return "[UIF] CTRL I/O 3 I/O direction (1) (rw)";
166   case 0xA8:  return "[UIF/KBGPIO] Keyboard ROW I/O direction (rw)";
167   case 0xA9:  return "[UIF/KBGPIO] Keyboard ROW ?? 3 (rw)";
168   case 0xAA:  return "[UIF/KBGPIO] Keyboard COL I/O direction 0=in 1=out (rw)";
169   case 0xAB:  return "[UIF/KBGPIO] Keyboard COL ?? 3 (rw)";
170   case 0xAD:  return "[UIF/GENSIO] GENSIO ?? (1/SELECT2) (?)";
171   case 0xAE:  return "[UIF/GENSIO] GENSIO ?? (2/SELECT2) (?)";
172   case 0xAF:  return "[UIF/GENSIO] GENSIO ?? (3/SELECT2) (?)";
173   case 0xB0:  return "[UIF] CTRL I/O 0 I/O direction (2) (rw)";
174   case 0xB1:  return "[UIF] CTRL I/O 1 I/O direction (2) (rw)";
175   case 0xB2:  return "[UIF] CTRL I/O 2 I/O direction (2) (rw)";
176   case 0xB3:  return "[UIF] CTRL I/O 3 I/O direction (2) (rw)";
177   case 0xED:  return "[UIF/GENSIO] GENSIO ?? (1/SELECT3) (?)";
178   case 0xEE:  return "[UIF/GENSIO] GENSIO ?? (2/SELECT3) (?)";
179   case 0xEF:  return "[UIF/GENSIO] GENSIO ?? (3/SELECT3) (?)";
180   case 0xF0:  return "[UIF] CTRL I/O 0 input (r)";
181   case 0xF1:  return "[UIF] CTRL I/O 1 input (r)";
182   case 0xF2:  return "[UIF] CTRL I/O 2 input (r)";
183   case 0xF3:  return "[UIF] CTRL I/O 3 input (r)";
184   default:    return "<Unknown>";
185185   }
186186}
187187#endif
r253023r253024
191191{
192192   switch(offset)
193193   {
194   case 0x0:   return "Control register (w)";
195   case 0x1:   return "PWM (charger) (w)";
196   case 0x2:   return "A/D read (LSB) (r)";
197   case 0x3:   return "A/D read (MSB) (rw)";
198   case 0x4:   return "?";
199   case 0x5:   return "Watchdog (WDReg) (w)";
200   case 0x6:   return "RTC enabled (w)";
201   case 0x7:   return "RTC second (rw)";
202   case 0x8:   return "RTC minute (r)";
203   case 0x9:   return "RTC hour (r)";
204   case 0xA:   return "RTC day (rw)";
205   case 0xB:   return "RTC alarm minute (rw)";
206   case 0xC:   return "RTC alarm hour (rw)";
207   case 0xD:   return "RTC calibration value (rw)";
208   case 0xE:   return "Interrupt lines (rw)";
209   case 0xF:   return "Interrupt mask (rw)";
210   default:   return "<Unknown>";
194   case 0x0:   return "Control register (w)";
195   case 0x1:   return "PWM (charger) (w)";
196   case 0x2:   return "A/D read (LSB) (r)";
197   case 0x3:   return "A/D read (MSB) (rw)";
198   case 0x4:   return "?";
199   case 0x5:   return "Watchdog (WDReg) (w)";
200   case 0x6:   return "RTC enabled (w)";
201   case 0x7:   return "RTC second (rw)";
202   case 0x8:   return "RTC minute (r)";
203   case 0x9:   return "RTC hour (r)";
204   case 0xA:   return "RTC day (rw)";
205   case 0xB:   return "RTC alarm minute (rw)";
206   case 0xC:   return "RTC alarm hour (rw)";
207   case 0xD:   return "RTC calibration value (rw)";
208   case 0xE:   return "Interrupt lines (rw)";
209   case 0xF:   return "Interrupt mask (rw)";
210   default:    return "<Unknown>";
211211   }
212212}
213213#endif
r253023r253024
215215void noki3310_state::machine_start()
216216{
217217   m_ram = std::make_unique<UINT16[]>(0x40000);
218   m_dsp_ram = std::make_unique<UINT16[]>(0x800);      // DSP shared RAM
218   m_dsp_ram = std::make_unique<UINT16[]>(0x800);      // DSP shared RAM
219219
220220   // allocate timers
221221   m_timer0 = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(noki3310_state::timer0), this));
r253023r253024
231231   m_maincpu->set_state_int(ARM7_R15, 0x200040);
232232
233233   memset(m_mad2_regs, 0, 0x100);
234   m_mad2_regs[0x01] = 0x01;   // power-on flag
235   m_mad2_regs[0x0c] = 0x0a;   // disable FIQ and IRQ
236   m_mad2_regs[0x03] = 0xff;   // disable MAD2 watchdog
237   m_ccont.watchdog  = 0;      // disable CCONT watchdog
234   m_mad2_regs[0x01] = 0x01;   // power-on flag
235   m_mad2_regs[0x0c] = 0x0a;   // disable FIQ and IRQ
236   m_mad2_regs[0x03] = 0xff;   // disable MAD2 watchdog
237   m_ccont.watchdog  = 0;      // disable CCONT watchdog
238238   m_ccont.dc  = false;
239239
240240   m_fiq_status = 0;
r253023r253024
242242   m_timer1_counter = 0;
243243   m_timer0_counter = 0;
244244
245   m_timer0->adjust(attotime::from_hz(33055 / (255 + 1)), 0, attotime::from_hz(33055 / (255 + 1)));   // programmable through port 0x0f
245   m_timer0->adjust(attotime::from_hz(33055 / (255 + 1)), 0, attotime::from_hz(33055 / (255 + 1)));    // programmable through port 0x0f
246246   m_timer1->adjust(attotime::from_hz(1057), 0, attotime::from_hz(1057));
247247   m_timer_watchdog->adjust(attotime::from_hz(1), 0, attotime::from_hz(1));
248248   m_timer_fiq8->adjust(attotime::from_hz(1000), 0, attotime::from_hz(1000));
r253023r253024
256256
257257void noki3310_state::assert_fiq(int num)
258258{
259   if ((m_mad2_regs[0x0c] & 0x01) == 0)   // check if FIQ is globally enabled
259   if ((m_mad2_regs[0x0c] & 0x01) == 0)    // check if FIQ is globally enabled
260260      return;
261261
262262   if (num < 8)
r253023r253024
277277
278278void noki3310_state::assert_irq(int num)
279279{
280   if ((m_mad2_regs[0x0c] & 0x04) == 0)   // check if IRQ is globally enabled
280   if ((m_mad2_regs[0x0c] & 0x04) == 0)    // check if IRQ is globally enabled
281281      return;
282282
283283   if (num < 8)
r253023r253024
327327
328328      switch(addr)
329329      {
330         case 0x0:   // ADC
330         case 0x0:   // ADC
331331         {
332332            UINT16 ad_id = (data >> 4) & 0x07;
333333            UINT16 ad_value = 0;
334334            switch(ad_id)
335335            {
336               case 0:      ad_value = 0x000;   break;   // Accessory Detect
337               case 1:      ad_value = 0x3ff;   break;   // Received signal strength
338               case 2:      ad_value = 0x3ff;   break;   // Battery voltage
339               case 3:      ad_value = 0x280;   break;   // Battery type
340               case 4:      ad_value = 0x000;   break;   // Battery temperature
341               case 5:      ad_value = 0x000;   break;   // Charger voltage
342               case 6:      ad_value = 0x000;   break;   // VCX0 (Voltage controlled oscilator) temperature
343               case 7:      ad_value = 0x000;   break;   // Charging current
336               case 0:     ad_value = 0x000;   break;  // Accessory Detect
337               case 1:     ad_value = 0x3ff;   break;  // Received signal strength
338               case 2:     ad_value = 0x3ff;   break;  // Battery voltage
339               case 3:     ad_value = 0x280;   break;  // Battery type
340               case 4:     ad_value = 0x000;   break;  // Battery temperature
341               case 5:     ad_value = 0x000;   break;  // Charger voltage
342               case 6:     ad_value = 0x000;   break;  // VCX0 (Voltage controlled oscilator) temperature
343               case 7:     ad_value = 0x000;   break;  // Charging current
344344            }
345345
346346            m_ccont.regs[addr] = data;
r253023r253024
348348            m_ccont.regs[3] = ((ad_value >> 8) & 0x03);
349349            break;
350350         }
351         case 0x5:   // CCONT watchdog
351         case 0x5:   // CCONT watchdog
352352            if (data == 0x20)
353353               m_ccont.regs[addr] = data;
354354            else if (data == 0x31)
r253023r253024
382382
383383   switch(addr)
384384   {
385      case 0x3:      data = 0xb0 | (m_ccont.regs[addr] & 0x03);   break;
386      case 0x7:      data = systime.local_time.second;         break;
387      case 0x8:      data = systime.local_time.minute;         break;
388      case 0x9:      data = systime.local_time.hour;            break;
389      case 0xa:      data = systime.local_time.mday;            break;
390      case 0xe:      data |= 0x01;                        break;
385      case 0x3:       data = 0xb0 | (m_ccont.regs[addr] & 0x03);  break;
386      case 0x7:       data = systime.local_time.second;           break;
387      case 0x8:       data = systime.local_time.minute;           break;
388      case 0x9:       data = systime.local_time.hour;             break;
389      case 0xa:       data = systime.local_time.mday;             break;
390      case 0xe:       data |= 0x01;                               break;
391391   }
392392
393393   m_ccont.dc = !m_ccont.dc;
r253023r253024
460460      {
461461         m_maincpu->reset();
462462         machine_reset();
463         m_mad2_regs[0x01] |= 0x02;   // Last reset was by watchdog
463         m_mad2_regs[0x01] |= 0x02;  // Last reset was by watchdog
464464      }
465465   }
466466}
r253023r253024
468468READ16_MEMBER(noki3310_state::dsp_ram_r)
469469{
470470   // HACK: avoid hangs when ARM try to communicate with the DSP
471   if (offset <= 0x004 >> 1)   return 0x01;
472   if (offset == 0x0e0 >> 1)   return 0x00;
473   if (offset == 0x0fe >> 1)   return 0x01;
474   if (offset == 0x100 >> 1)   return 0x01;
471   if (offset <= 0x004 >> 1)   return 0x01;
472   if (offset == 0x0e0 >> 1)   return 0x00;
473   if (offset == 0x0fe >> 1)   return 0x01;
474   if (offset == 0x100 >> 1)   return 0x01;
475475
476476   return m_dsp_ram[offset & 0x7ff];
477477}
r253023r253024
488488   switch(offset)
489489   {
490490      case 0x00:
491         data = 0x40;   // ASIC version
491         data = 0x40;    // ASIC version
492492         break;
493493      case 0x04:
494494         data = m_timer1_counter >> 8;
r253023r253024
535535         data = nokia_ccont_r();
536536         break;
537537      case 0x6d:
538         data = 0x07;   // GENSIO ready
538         data = 0x07;    // GENSIO ready
539539         break;
540540   }
541541
r253023r253024
553553   {
554554      case 0x02:
555555         //printf("DSP %s\n", data & 1 ? "RUN" : "HOLD");
556         //if (data & 0x01)   debugger_break(machine());
556         //if (data & 0x01)  debugger_break(machine());
557557         break;
558558      case 0x08:
559559         ack_fiq(data);
r253023r253024
624624
625625static ADDRESS_MAP_START( noki3310_map, AS_PROGRAM, 32, noki3310_state )
626626   ADDRESS_MAP_GLOBAL_MASK(0x00ffffff)
627   AM_RANGE(0x00000000, 0x0000ffff) AM_MIRROR(0x80000) AM_READWRITE16(ram_r, ram_w, 0xffffffff)            // boot ROM / RAM
628   AM_RANGE(0x00010000, 0x00010fff) AM_MIRROR(0x8f000) AM_READWRITE16(dsp_ram_r, dsp_ram_w, 0xffffffff)      // DSP shared memory
629   AM_RANGE(0x00020000, 0x000200ff) AM_MIRROR(0x8ff00) AM_READWRITE8(mad2_io_r, mad2_io_w, 0xffffffff)         // IO (Primary I/O range, configures peripherals)
630   AM_RANGE(0x00030000, 0x00030003) AM_MIRROR(0x8fffc) AM_READWRITE8(mad2_dspif_r, mad2_dspif_w, 0xffffffff)   // DSPIF (API control register)
631   AM_RANGE(0x00040000, 0x00040003) AM_MIRROR(0x8fffc) AM_READWRITE8(mad2_mcuif_r, mad2_mcuif_w, 0xffffffff)   // MCUIF (Secondary I/O range, configures memory ranges)
632   AM_RANGE(0x00100000, 0x0017ffff) AM_READWRITE16(ram_r, ram_w, 0xffffffff)                           // RAMSelX
633   AM_RANGE(0x00200000, 0x005fffff) AM_DEVREADWRITE16("flash", intelfsh16_device, read, write, 0xffffffff)      // ROM1SelX
634   AM_RANGE(0x00600000, 0x009fffff) AM_UNMAP                                                    // ROM2SelX
635   AM_RANGE(0x00a00000, 0x00dfffff) AM_UNMAP                                                   // EEPROMSelX
636   AM_RANGE(0x00e00000, 0x00ffffff) AM_UNMAP                                                   // Reserved
627   AM_RANGE(0x00000000, 0x0000ffff) AM_MIRROR(0x80000) AM_READWRITE16(ram_r, ram_w, 0xffffffff)                // boot ROM / RAM
628   AM_RANGE(0x00010000, 0x00010fff) AM_MIRROR(0x8f000) AM_READWRITE16(dsp_ram_r, dsp_ram_w, 0xffffffff)        // DSP shared memory
629   AM_RANGE(0x00020000, 0x000200ff) AM_MIRROR(0x8ff00) AM_READWRITE8(mad2_io_r, mad2_io_w, 0xffffffff)         // IO (Primary I/O range, configures peripherals)
630   AM_RANGE(0x00030000, 0x00030003) AM_MIRROR(0x8fffc) AM_READWRITE8(mad2_dspif_r, mad2_dspif_w, 0xffffffff)   // DSPIF (API control register)
631   AM_RANGE(0x00040000, 0x00040003) AM_MIRROR(0x8fffc) AM_READWRITE8(mad2_mcuif_r, mad2_mcuif_w, 0xffffffff)   // MCUIF (Secondary I/O range, configures memory ranges)
632   AM_RANGE(0x00100000, 0x0017ffff) AM_READWRITE16(ram_r, ram_w, 0xffffffff)                                   // RAMSelX
633   AM_RANGE(0x00200000, 0x005fffff) AM_DEVREADWRITE16("flash", intelfsh16_device, read, write, 0xffffffff)     // ROM1SelX
634   AM_RANGE(0x00600000, 0x009fffff) AM_UNMAP                                                                   // ROM2SelX
635   AM_RANGE(0x00a00000, 0x00dfffff) AM_UNMAP                                                                   // EEPROMSelX
636   AM_RANGE(0x00e00000, 0x00ffffff) AM_UNMAP                                                                   // Reserved
637637ADDRESS_MAP_END
638638
639639
640640INPUT_CHANGED_MEMBER( noki3310_state::key_irq )
641641{
642   if (!newval)   // TODO: COL/ROW IRQ mask
642   if (!newval)    // TODO: COL/ROW IRQ mask
643643      assert_irq(0);
644644}
645645
646646static INPUT_PORTS_START( noki3310 )
647647   PORT_START("COL.0")
648648   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
649   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD )   PORT_CODE(KEYCODE_UP)      PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
650   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD )   PORT_CODE(KEYCODE_0)      PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
649   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_UP)       PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
650   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_0)        PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
651651   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
652   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD )   PORT_CODE(KEYCODE_DEL)      PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
652   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_DEL)      PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
653653
654654   PORT_START("COL.1")
655655   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
656   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD )   PORT_CODE(KEYCODE_DOWN)      PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
656   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_DOWN)     PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
657657   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
658   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD )   PORT_CODE(KEYCODE_2)      PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
659   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD )   PORT_CODE(KEYCODE_1)      PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
658   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_2)        PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
659   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_1)        PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
660660
661661   PORT_START("COL.2")
662662   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
663663   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
664   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD )   PORT_CODE(KEYCODE_6)      PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
665   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD )   PORT_CODE(KEYCODE_5)      PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
666   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD )   PORT_CODE(KEYCODE_4)      PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
664   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_6)        PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
665   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_5)        PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
666   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_4)        PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
667667
668668   PORT_START("COL.3")
669669   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
670670   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
671   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD )   PORT_CODE(KEYCODE_9)      PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
672   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD )   PORT_CODE(KEYCODE_8)      PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
673   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD )   PORT_CODE(KEYCODE_7)      PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
671   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_9)        PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
672   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_8)        PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
673   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_7)        PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
674674
675675   PORT_START("COL.4")
676676   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
677   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD )   PORT_CODE(KEYCODE_3)      PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
678   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD )   PORT_CODE(KEYCODE_MINUS)   PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
679   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD )   PORT_CODE(KEYCODE_ENTER)   PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
680   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD )   PORT_CODE(KEYCODE_ASTERISK)   PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
677   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_3)        PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
678   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_MINUS)    PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
679   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_ENTER)    PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
680   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_ASTERISK) PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
681681
682682   PORT_START("PWR")
683   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD )   PORT_CODE(KEYCODE_SPACE)    PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
683   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_SPACE)    PORT_CHANGED_MEMBER(DEVICE_SELF, noki3310_state, key_irq, 0)
684684   PORT_BIT( 0x1d, IP_ACTIVE_LOW, IPT_UNUSED )
685685INPUT_PORTS_END
686686
r253023r253024
688688static MACHINE_CONFIG_START( noki3310, noki3310_state )
689689
690690   /* basic machine hardware */
691   MCFG_CPU_ADD("maincpu", ARM7_BE, 26000000 / 2)   // MAD2WD1 13 MHz, clock internally supplied to ARM core can be divided by 2, in sleep mode a 32768 Hz clock is used
691   MCFG_CPU_ADD("maincpu", ARM7_BE, 26000000 / 2)  // MAD2WD1 13 MHz, clock internally supplied to ARM core can be divided by 2, in sleep mode a 32768 Hz clock is used
692692   MCFG_CPU_PROGRAM_MAP(noki3310_map)
693693
694694   /* video hardware */
r253023r253024
719719static MACHINE_CONFIG_DERIVED( noki3410, noki3330 )
720720
721721   MCFG_SCREEN_MODIFY("screen")
722   MCFG_SCREEN_SIZE(96, 65)   // Philips OM6206
722   MCFG_SCREEN_SIZE(96, 65)    // Philips OM6206
723723
724724MACHINE_CONFIG_END
725725
726726static MACHINE_CONFIG_DERIVED( noki7110, noki3330 )
727727
728728   MCFG_SCREEN_MODIFY("screen")
729   MCFG_SCREEN_SIZE(96, 65)   // Epson SED1565
729   MCFG_SCREEN_SIZE(96, 65)    // Epson SED1565
730730
731731MACHINE_CONFIG_END
732732
r253023r253024
740740
741741// MAD2 internal ROMS
742742#define MAD2_INTERNAL_ROMS \
743   ROM_REGION16_BE(0x10000, "boot_rom", ROMREGION_ERASE00 )   \
744   ROM_LOAD("boot_rom", 0x00000, 0x10000, NO_DUMP)            \
743   ROM_REGION16_BE(0x10000, "boot_rom", ROMREGION_ERASE00 )    \
744   ROM_LOAD("boot_rom", 0x00000, 0x10000, NO_DUMP)             \
745745                                                \
746   ROM_REGION16_BE(0x20000, "dsp", ROMREGION_ERASE00 )         \
747   ROM_LOAD("dsp_prom" , 0x00000, 0xc000, NO_DUMP)            \
748   ROM_LOAD("dsp_drom" , 0x0c000, 0x4000, NO_DUMP)            \
749   ROM_LOAD("dsp_pdrom", 0x10000, 0x1000, NO_DUMP)            \
746   ROM_REGION16_BE(0x20000, "dsp", ROMREGION_ERASE00 )         \
747   ROM_LOAD("dsp_prom" , 0x00000, 0xc000, NO_DUMP)             \
748   ROM_LOAD("dsp_drom" , 0x0c000, 0x4000, NO_DUMP)             \
749   ROM_LOAD("dsp_pdrom", 0x10000, 0x1000, NO_DUMP)
750750
751
752751ROM_START( noki3210 )
753752   MAD2_INTERNAL_ROMS
754753
755754   ROM_REGION16_BE(0x200000, "flash", ROMREGION_ERASEFF )
756   ROM_SYSTEM_BIOS(0, "600", "v6.00")   // A 03-10-2000
755   ROM_SYSTEM_BIOS(0, "600", "v6.00")  // A 03-10-2000
757756   ROMX_LOAD("3210F600A.fls", 0x000000, 0x200000, CRC(6a978478) SHA1(6bdec2ec76aca15bc12b621be4402e455562454b), ROM_BIOS(1))
758757
759758   ROM_REGION16_BE(0x04000, "eeprom", 0 )
r253023r253024
764763   MAD2_INTERNAL_ROMS
765764
766765   ROM_REGION16_BE(0x200000, "flash", ROMREGION_ERASEFF )
767   ROM_SYSTEM_BIOS(0, "607", "v6.07")   // C 17-06-2003
768   ROM_SYSTEM_BIOS(1, "579", "v5.79")   // N 11-11-2002
769   ROM_SYSTEM_BIOS(2, "513", "v5.13")   // C 11-01-2002
766   ROM_SYSTEM_BIOS(0, "607", "v6.07")  // C 17-06-2003
767   ROM_SYSTEM_BIOS(1, "579", "v5.79")  // N 11-11-2002
768   ROM_SYSTEM_BIOS(2, "513", "v5.13")  // C 11-01-2002
770769   ROMX_LOAD("3310_607_PPM_C.fls", 0x000000, 0x200000, CRC(5743f6ba) SHA1(0e80b5f1698909c9850be770c1289566582aa77a), ROM_BIOS(1))
771770   ROMX_LOAD("3310 NR1 v5.79.fls", 0x000000, 0x200000, CRC(26b4f0df) SHA1(649de05ed88205a080693b918cd1295ac691dff1), ROM_BIOS(2))
772771   ROMX_LOAD("3310 v. 5.13 C.fls", 0x000000, 0x1d0000, CRC(0f66d256) SHA1(04d8dabe2c454d6a1161f352d85c69c409895000), ROM_BIOS(3))
r253023r253024
782781   MAD2_INTERNAL_ROMS
783782
784783   ROM_REGION16_BE(0x0400000, "flash", ROMREGION_ERASEFF )
785   ROM_SYSTEM_BIOS(0, "450", "v4.50")   // C 12-10-2001
784   ROM_SYSTEM_BIOS(0, "450", "v4.50")  // C 12-10-2001
786785   ROMX_LOAD("3330F450C.fls", 0x000000, 0x350000, CRC(259313e7) SHA1(88bcc39d9358fd8a8562fe3a0280f0ce82f5897f), ROM_BIOS(1))
787786   ROM_LOAD("3330 virgin eeprom 005F0000.fls", 0x3f0000, 0x010000, CRC(23459c10) SHA1(68481effb39d90a1639e8f261009c66e97d3e668))
788787ROM_END
r253023r253024
791790   MAD2_INTERNAL_ROMS
792791
793792   ROM_REGION16_BE(0x0400000, "flash", ROMREGION_ERASEFF )
794   ROM_SYSTEM_BIOS(0, "506", "v5.06")   // C 29-11-2002
793   ROM_SYSTEM_BIOS(0, "506", "v5.06")  // C 29-11-2002
795794   ROMX_LOAD("3410_5-06c.fls", 0x000000, 0x370000, CRC(1483e094) SHA1(ef26026297c779de7b01923a364ded822e720c38), ROM_BIOS(1))
796795ROM_END
797796
r253023r253024
799798   MAD2_INTERNAL_ROMS
800799
801800   ROM_REGION16_BE(0x0400000, "flash", ROMREGION_ERASEFF )
802   ROM_SYSTEM_BIOS(0, "540", "v5.40")   // C 11-10-2003
803   ROM_SYSTEM_BIOS(1, "525", "v5.25")   // C 26-02-2003
804   ROM_SYSTEM_BIOS(2, "520", "v5.20")   // C 12-08-2002
801   ROM_SYSTEM_BIOS(0, "540", "v5.40")  // C 11-10-2003
802   ROM_SYSTEM_BIOS(1, "525", "v5.25")  // C 26-02-2003
803   ROM_SYSTEM_BIOS(2, "520", "v5.20")  // C 12-08-2002
805804   ROMX_LOAD("5210_5.40_PPM_C.FLS", 0x000000, 0x380000, CRC(e37d5beb) SHA1(726f000780dd67750b7d2859687f846ce17a1bf7), ROM_BIOS(1))
806805   ROMX_LOAD("5210_5.25_PPM_C.FLS", 0x000000, 0x380000, CRC(13bba458) SHA1(3b5244244743fba48f9061e158f95fc46b86446e), ROM_BIOS(2))
807806   ROMX_LOAD("5210_520_C.fls", 0x000000, 0x380000, CRC(38648cd3) SHA1(9210e15e6bd780f86c467bec33ef54d6393abe5a), ROM_BIOS(3))
r253023r253024
811810   MAD2_INTERNAL_ROMS
812811
813812   ROM_REGION16_BE(0x0400000, "flash", ROMREGION_ERASEFF )
814   ROM_SYSTEM_BIOS(0, "556", "v5.56")   // C 25-01-2002
813   ROM_SYSTEM_BIOS(0, "556", "v5.56")  // C 25-01-2002
815814   ROMX_LOAD("6210_556C.fls", 0x000000, 0x3a0000, CRC(203fb962) SHA1(3d9ea319503e78ec69b60d72cda23e461e118ea9), ROM_BIOS(1))
816815   ROM_LOAD("6210 virgin eeprom 005FA000.fls", 0x3fa000, 0x006000, CRC(3c6d3437) SHA1(b3a527ede1be87bd715fb3741a81eef5bd422efa))
817816ROM_END
r253023r253024
820819   MAD2_INTERNAL_ROMS
821820
822821   ROM_REGION16_BE(0x0400000, "flash", ROMREGION_ERASEFF )
823   ROM_SYSTEM_BIOS(0, "503", "v5.03")   // C 06-12-2001
822   ROM_SYSTEM_BIOS(0, "503", "v5.03")  // C 06-12-2001
824823   ROMX_LOAD("6250-503mcuPPMC.fls", 0x000000, 0x3a0000, CRC(8dffb91b) SHA1(95607ce39c383bda75f1e6aeae67a214b787b0a1), ROM_BIOS(1))
825824   ROM_LOAD("6250 virgin eeprom 005FA000.fls", 0x3fa000, 0x006000, CRC(6087ce70) SHA1(57c29c8387caf864603d94a22bfb63ace427b7f9))
826825ROM_END
r253023r253024
829828   MAD2_INTERNAL_ROMS
830829
831830   ROM_REGION16_BE(0x0400000, "flash", ROMREGION_ERASEFF )
832   ROM_SYSTEM_BIOS(0, "501", "v5.01")   // C 08-12-2000
831   ROM_SYSTEM_BIOS(0, "501", "v5.01")  // C 08-12-2000
833832   ROMX_LOAD("7110F501_ppmC.fls", 0x000000, 0x390000, CRC(919ac753) SHA1(53af8324919f455ba8199d2c05f7a921cfb811d5), ROM_BIOS(1))
834833   ROM_LOAD("7110 virgin eeprom 005FA000.fls", 0x3fa000, 0x006000, CRC(78e7d8c1) SHA1(8b4dd782fc9d1306268ba63124ee463ac646912b))
835834ROM_END
r253023r253024
838837   MAD2_INTERNAL_ROMS
839838
840839   ROM_REGION16_BE(0x200000, "flash", ROMREGION_ERASEFF )
841   ROM_SYSTEM_BIOS(0, "531", "v5.31")   // C 08-03-2002
840   ROM_SYSTEM_BIOS(0, "531", "v5.31")  // C 08-03-2002
842841   ROMX_LOAD("8210_5.31PPM_C.FLS", 0x000000, 0x1d0000, CRC(927022b1) SHA1(c1a0fe95cedb89a92b19654208cc4855e1a4988e), ROM_BIOS(1))
843842   ROM_LOAD("8210 virgin eeprom 003D0000.fls", 0x1d0000, 0x030000, CRC(37fddeea) SHA1(1c01ad3948ff9919890498a84f31052369d93e1d))
844843ROM_END
r253023r253024
847846   MAD2_INTERNAL_ROMS
848847
849848   ROM_REGION16_BE(0x200000, "flash", ROMREGION_ERASEFF )
850   ROM_SYSTEM_BIOS(0, "502", "v5.02")   // K 28-01-2002
849   ROM_SYSTEM_BIOS(0, "502", "v5.02")  // K 28-01-2002
851850   ROMX_LOAD("8250-502mcuPPMK.fls", 0x000000, 0x1d0000, CRC(2c58e48b) SHA1(f26c98ffcfffbbd5714889e10cfa41c5f6dd2529), ROM_BIOS(1))
852851   ROM_LOAD("8250 virgin eeprom 003D0000.fls", 0x1d0000, 0x030000, CRC(7ca585e0) SHA1(a974fb5fddcd0438ac4aaf32b431f1453e8d923c))
853852ROM_END
r253023r253024
856855   MAD2_INTERNAL_ROMS
857856
858857   ROM_REGION16_BE(0x200000, "flash", ROMREGION_ERASEFF )
859   ROM_SYSTEM_BIOS(0, "531", "v5.31")   // C 08-03-2002
858   ROM_SYSTEM_BIOS(0, "531", "v5.31")  // C 08-03-2002
860859   ROMX_LOAD("8850v531.fls", 0x000000, 0x1d0000, CRC(8864fcb3) SHA1(9f966787403b68a09530680ad911302403eb1521), ROM_BIOS(1))
861860   ROM_LOAD("8850 virgin eeprom 003D0000.fls", 0x1d0000, 0x030000, CRC(4823f27e) SHA1(b09455302d98fbedf35072c9ecfd7721a04924b0))
862861ROM_END
r253023r253024
865864   MAD2_INTERNAL_ROMS
866865
867866   ROM_REGION16_BE(0x200000, "flash", ROMREGION_ERASEFF )
868   ROM_SYSTEM_BIOS(0, "1220", "v12.20")   // C 19-03-2001
867   ROM_SYSTEM_BIOS(0, "1220", "v12.20")    // C 19-03-2001
869868   ROMX_LOAD("8890_12.20_ppmC.FLS", 0x000000, 0x1d0000, CRC(77206f78) SHA1(a214a0d69760ecd8eeca0b9d82f95c94bdfe70ed), ROM_BIOS(1))
870869   ROM_LOAD("8890 virgin eeprom 003D0000.fls", 0x1d0000, 0x030000, CRC(1d8ef3b5) SHA1(cc0924cfd4c0ce796fca157c640fc3183c2b5f2c))
871870ROM_END
trunk/src/mame/drivers/nova2001.cpp
r253023r253024
314314   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
315315
316316   PORT_START("IN2")
317    PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(4)
317   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(4)
318318   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START1 )
319319   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 )
320320   PORT_BIT( 0x78, IP_ACTIVE_LOW, IPT_UNUSED )
r253023r253024
10201020// many of these don't explicitly state Japan, eg. Nova 2001 could easily be used anywhere.
10211021
10221022//    YEAR, NAME,      PARENT,   MACHINE,  INPUT,    INIT,     MONITOR,COMPANY,FULLNAME,FLAGS
1023GAME( 1983, nova2001,  0,        nova2001, nova2001, driver_device, 0,        ROT0,   "UPL", "Nova 2001 (Japan)", MACHINE_SUPPORTS_SAVE )
1023GAME( 1983, nova2001,  0,        nova2001, nova2001, driver_device, 0,        ROT0,   "UPL", "Nova 2001 (Japan)", MACHINE_SUPPORTS_SAVE )
10241024GAME( 1983, nova2001h, nova2001, nova2001, nova2001, driver_device, 0,        ROT0,   "UPL", "Nova 2001 (Japan, hack?)", MACHINE_SUPPORTS_SAVE )
10251025GAME( 1983, nova2001u, nova2001, nova2001, nova2001, driver_device, 0,        ROT0,   "UPL (Universal license)", "Nova 2001 (US)", MACHINE_SUPPORTS_SAVE )
10261026GAME( 1984, ninjakun,  0,        ninjakun, ninjakun, driver_device, 0,        ROT0,   "UPL (Taito license)", "Ninjakun Majou no Bouken", MACHINE_SUPPORTS_SAVE )
trunk/src/mame/drivers/pacman.cpp
r253023r253024
41564156   ROM_LOAD( "13.5f",   0x1000, 0x0800, CRC(22b0188a) SHA1(a9ed9ca8b36a60081fd364abc9bc23963932cc0b) )
41574157   ROM_LOAD( "15.5j",   0x1800, 0x0800, CRC(50c7477d) SHA1(c04ec282a8cb528df5e38ad750d12ee71612695d) )
41584158
4159   // Color PROMs have been dumped. They match the pacman/mspacman ones
4159   // Color PROMs have been dumped. They match the pacman/mspacman ones
41604160   ROM_REGION( 0x0120, "proms", 0 )
41614161   ROM_LOAD( "n82s123n.7f",  0x0000, 0x0020, CRC(2fc650bd) SHA1(8d0268dee78e47c712202b0ec4f1f51109b1f2a5) )
41624162   ROM_LOAD( "m7611.4a",     0x0020, 0x0100, CRC(3eb3a8e4) SHA1(19097b5f60d1030f8b82d9f1d3a241f93e5c75d6) )
r253023r253024
41774177   ROM_LOAD( "13.5f",   0x1000, 0x0800, CRC(22b0188a) SHA1(a9ed9ca8b36a60081fd364abc9bc23963932cc0b) )
41784178   ROM_LOAD( "15.5j",   0x1800, 0x0800, CRC(50c7477d) SHA1(c04ec282a8cb528df5e38ad750d12ee71612695d) )
41794179
4180   // Color PROMs have been dumped. They match the pacman/mspacman ones
4180   // Color PROMs have been dumped. They match the pacman/mspacman ones
41814181   ROM_REGION( 0x0120, "proms", 0 )
41824182   ROM_LOAD( "n82s123n.7f",  0x0000, 0x0020, CRC(2fc650bd) SHA1(8d0268dee78e47c712202b0ec4f1f51109b1f2a5) )
41834183   ROM_LOAD( "m7611.4a",     0x0020, 0x0100, CRC(3eb3a8e4) SHA1(19097b5f60d1030f8b82d9f1d3a241f93e5c75d6) )
trunk/src/mame/drivers/proconn.cpp
r253023r253024
189189   required_device<z80dart_device> m_z80sio;
190190   required_device<ay8910_device> m_ay;
191191   required_device<meters_device> m_meters;
192   
192
193193public:
194194   int m_meter;
195195   DECLARE_DRIVER_INIT(proconn);
r253023r253024
379379   MCFG_SOUND_ADD("aysnd", AY8910, 1000000) /* ?? Mhz */ // YM2149F on PC92?
380380   MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(proconn_state, meter_w))
381381   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.33)
382   
382
383383   MCFG_DEVICE_ADD("meters", METERS, 0)
384384   MCFG_METERS_NUMBER(8)
385385MACHINE_CONFIG_END
trunk/src/mame/drivers/prophet600.cpp
r253023r253024
33/***************************************************************************
44
55    prophet600.cpp - Sequential Circuits Prophet-600, designed by Dave Smith
6 
7   This was the first commercial synthesizer with built-in MIDI.
8 
6
7    This was the first commercial synthesizer with built-in MIDI.
8
99    Skeleton driver by R. Belmont
1010
1111    Hardware:
r253023r253024
1818    0x4000-0x4001: DAC for CV/gate drive
1919    0x6000-0x6001: 6850 writes
2020    0xe000-0xe001: 6850 reads
21
21
2222    I/O map:
23    00-07:   8253 PIT
23    00-07:  8253 PIT
2424    08: set row to scan for keyboard/panel input and LED / lamp output
2525    09: read: analog comparitor, some value vs. the DAC.  write: output for LEDs/lamps
26       comparitor bits:
27       bit 1: FFFStatus
28       bit 2: output of 8253 channel 2
29       bit 3: ADCCompare: returns sign of if current value is > or < the DAC value
30   
31   0a: read: keyboard/panel input scan bits, write: select a pot on the panel for the comparitor
26        comparitor bits:
27        bit 1: FFFStatus
28        bit 2: output of 8253 channel 2
29        bit 3: ADCCompare: returns sign of if current value is > or < the DAC value
30
31    0a: read: keyboard/panel input scan bits, write: select a pot on the panel for the comparitor
3232    0b: write: update all gate signals
3333    0c: ???
3434    0d: write: select which CV signal will be updated with the current DAC value
3535    0e: write: mask, masks
36       bit 0: FFFP -FF P
37       bit 1: mask gate from 8253
38       bit 3: FFFD FF D
39       bit 4: FFFCL -FF CL
40 
41 
36        bit 0: FFFP -FF P
37        bit 1: mask gate from 8253
38        bit 3: FFFD FF D
39        bit 4: FFFCL -FF CL
40
41
4242    Info:
4343    - Prophet 600 Technical Manual
44
44
4545    - https://github.com/gligli/p600fw - GPLv3 licensed complete replacement firmware
4646    for the Prophet 600, but written in C and runs on an AVR that replaces the original
4747    Z80.
48
48
4949***************************************************************************/
5050
5151#include "emu.h"
r253023r253024
5757
5858#include "prophet600.lh"
5959
60#define MAINCPU_TAG   "z80"
61#define PIT_TAG      "pit"
62#define UART_TAG   "uart"
60#define MAINCPU_TAG "z80"
61#define PIT_TAG     "pit"
62#define UART_TAG    "uart"
6363
6464enum
6565{
66   CV_CV_Osc1A = 0, CV_Osc2A, CV_Osc3A, CV_Osc4A, CV_Osc5A, CV_Osc6A,           
67   CV_Osc1B, CV_Osc2B, CV_Osc3B, CV_Osc4B, CV_Osc5B, CV_Osc6B,           
68   CV_Flt1, CV_Flt2, CV_Flt3, CV_Flt4, CV_Flt5, CV_Flt6,               
69   CV_Amp1, CV_Amp2, CV_Amp3, CV_Amp4, CV_Amp5, CV_Amp6,               
66   CV_CV_Osc1A = 0, CV_Osc2A, CV_Osc3A, CV_Osc4A, CV_Osc5A, CV_Osc6A,
67   CV_Osc1B, CV_Osc2B, CV_Osc3B, CV_Osc4B, CV_Osc5B, CV_Osc6B,
68   CV_Flt1, CV_Flt2, CV_Flt3, CV_Flt4, CV_Flt5, CV_Flt6,
69   CV_Amp1, CV_Amp2, CV_Amp3, CV_Amp4, CV_Amp5, CV_Amp6,
7070   CV_PModOscB, CV_VolA, CV_VolB, CV_MasterVol, CV_APW, CV_ExtFilter, CV_Resonance, CV_BPW,
7171
7272   CV_MAX
r253023r253024
188188WRITE8_MEMBER(prophet600_state::mask_w)
189189{
190190   m_nmi_gate = (data & 0x02) ? true : false;
191   if (m_nmi_gate)   // gate is set, comparitor line is pulled up to Vcc
191   if (m_nmi_gate) // gate is set, comparitor line is pulled up to Vcc
192192   {
193193      m_comparitor |= 0x04;
194194   }
r253023r253024
197197      m_comparitor &= ~0x04;
198198   }
199199
200//   printf("8253 gate = %x\n", data & 0x02);
200//  printf("8253 gate = %x\n", data & 0x02);
201201}
202202
203203WRITE8_MEMBER(prophet600_state::cv_w)
r253023r253024
222222}
223223
224224/* Pots: Mixer=0,Cutoff=1,Resonance=2,FilEnvAmt=3,FilRel=4,FilSus=5,
225   FilDec=6,FilAtt=7,AmpRel=8,AmpSus=9,AmpDec=10,AmpAtt=11,
226   Glide=12,BPW=13,MVol=14,MTune=15,PitchWheel=16,ModWheel=22,
225    FilDec=6,FilAtt=7,AmpRel=8,AmpSus=9,AmpDec=10,AmpAtt=11,
226    Glide=12,BPW=13,MVol=14,MTune=15,PitchWheel=16,ModWheel=22,
227227    Speed,APW,PModFilEnv,LFOFreq,PModOscB,LFOAmt,FreqB,FreqA,FreqBFine
228228*/
229229WRITE8_MEMBER(prophet600_state::potmux_w)
r253023r253024
232232
233233READ8_MEMBER(prophet600_state::comparitor_r)
234234{
235//   m_comparitor ^= 0x04;
235//  m_comparitor ^= 0x04;
236236   return m_comparitor;
237237}
238238
r253023r253024
274274   MCFG_PIT8253_CLK1(XTAL_8MHz/4)
275275   MCFG_PIT8253_CLK2(XTAL_8MHz/4)
276276   MCFG_PIT8253_OUT0_HANDLER(WRITELINE(prophet600_state, pit_ch0_tick_w))
277   MCFG_PIT8253_OUT2_HANDLER(WRITELINE(prophet600_state, pit_ch2_tick_w))
277   MCFG_PIT8253_OUT2_HANDLER(WRITELINE(prophet600_state, pit_ch2_tick_w))
278278
279279   MCFG_DEVICE_ADD(UART_TAG, ACIA6850, 0)
280280   MCFG_ACIA6850_TXD_HANDLER(DEVWRITELINE("mdout", midi_port_device, write_txd))
r253023r253024
285285
286286   MCFG_MIDI_PORT_ADD("mdout", midiout_slot, "midiout")
287287
288   MCFG_DEVICE_ADD("acia_clock", CLOCK, XTAL_8MHz/16)   // 500kHz = 16 times the MIDI rate
288   MCFG_DEVICE_ADD("acia_clock", CLOCK, XTAL_8MHz/16)  // 500kHz = 16 times the MIDI rate
289289   MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(prophet600_state, acia_clock_w))
290290
291291MACHINE_CONFIG_END
trunk/src/mame/drivers/psychic5.cpp
r253023r253024
321321- Bombs Away sports following issues, which indicates it's a unfinished product:
322322  - missing bullets (missing data from ROMs);
323323  - missing levels above 4 (missing data from ROMs);
324  - occasionally wrong flip x when the player route is from up to down;
324  - occasionally wrong flip x when the player route is from up to down;
325325  - enemy counter stops entirely when the S is collected;
326326  - boss fights uses always the same pattern;
327327  - single BGM repeated over and over, for every level;
trunk/src/mame/drivers/rsc55.cpp
r253023r253024
7171MACHINE_CONFIG_END
7272
7373ROM_START( sc55 )
74   ROM_REGION( 0x40000, "maincpu", 0 )   // additional H8/532 code and patch data - revisions match main CPU revisions
74   ROM_REGION( 0x40000, "maincpu", 0 ) // additional H8/532 code and patch data - revisions match main CPU revisions
7575   ROM_LOAD( "roland_r15209363.ic23", 0x000000, 0x040000, CRC(2dc58549) SHA1(9c17f85e784dc1549ac1f98d457b353393331f6b) )
7676
7777   ROM_REGION( 0x300000, "la", 0 )
trunk/src/mame/drivers/seattle.cpp
r253023r253024
28642864   ROM_SYSTEM_BIOS( 3, "up16_3",       "Disk Update 1.0x to 2.1a (1.25) Step 3 of 3" )
28652865   ROMX_LOAD("eprom #3 2.1A 3286", 0x000000, 0x100000, CRC(e7d8c88f) SHA1(06c11241ac439527b361826784aef4c58689892e), ROM_BIOS(4))
28662866
2867     
2867
28682868   DISK_REGION( "ide:0:hdd:image" )    /* Release version 1.0r8a (4/10/98) (Guts 4/10/98, Main 4/10/98) */
28692869   DISK_IMAGE( "cs_10r8a", 0, SHA1(ba4e7589740e0647938c81c5082bb71d8826bad4) )
28702870
trunk/src/mame/drivers/sfkick.cpp
r253023r253024
8585           GND | e | 27| GND
8686           GND | f | 28| GND
8787
88         ____
88         ____
8989        /    \
9090       | Dial |
9191        \____/
92       /|   |\
92       /|   |\
9393     /  |   | \
9494 Blue Red Black Yellow
9595  /     |   |    \
r253023r253024
510510   PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(25) PORT_KEYDELTA(-20)
511511
512512   PORT_START("DSW1") /* bitswapped at read! 76543210 -> 45673210 */
513   PORT_DIPNAME( 0x10, 0x10, DEF_STR( Cabinet ) )   PORT_DIPLOCATION("SW1:1")
513   PORT_DIPNAME( 0x10, 0x10, DEF_STR( Cabinet ) )  PORT_DIPLOCATION("SW1:1")
514514   PORT_DIPSETTING(    0x10, DEF_STR( Upright ) )
515515   PORT_DIPSETTING(    0x00, DEF_STR( Cocktail ) )
516   PORT_DIPNAME( 0x01, 0x01,  "Stage Select" )   PORT_DIPLOCATION("SW1:2") /* How does this work?? */
516   PORT_DIPNAME( 0x01, 0x01,  "Stage Select" ) PORT_DIPLOCATION("SW1:2") /* How does this work?? */
517517   PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
518518   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
519   PORT_DIPNAME( 0x20, 0x20,  "Freeze" )   PORT_DIPLOCATION("SW1:3")
519   PORT_DIPNAME( 0x20, 0x20,  "Freeze" )   PORT_DIPLOCATION("SW1:3")
520520   PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
521521   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
522   PORT_DIPNAME( 0x02, 0x02,  "Test Mode" )   PORT_DIPLOCATION("SW1:4")
522   PORT_DIPNAME( 0x02, 0x02,  "Test Mode" )    PORT_DIPLOCATION("SW1:4")
523523   PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
524524   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
525   PORT_DIPNAME( 0x40, 0x00, DEF_STR( Allow_Continue ) )   PORT_DIPLOCATION("SW1:5")
525   PORT_DIPNAME( 0x40, 0x00, DEF_STR( Allow_Continue ) )   PORT_DIPLOCATION("SW1:5")
526526   PORT_DIPSETTING(    0x40, DEF_STR( No ) )
527527   PORT_DIPSETTING(    0x00, DEF_STR( Yes ) )
528   PORT_DIPNAME( 0x8c, 0x8c, DEF_STR( Coinage ) )   PORT_DIPLOCATION("SW1:6,8,7")
528   PORT_DIPNAME( 0x8c, 0x8c, DEF_STR( Coinage ) )  PORT_DIPLOCATION("SW1:6,8,7")
529529   PORT_DIPSETTING(    0x04, DEF_STR( 3C_1C ) )
530530   PORT_DIPSETTING(    0x84, DEF_STR( 2C_1C ) )
531531   PORT_DIPSETTING(    0x00, DEF_STR( 3C_2C ) )
r253023r253024
537537
538538   PORT_START("DSW2") /* bitswapped at read! 76543210 -> 45673210 */
539539   PORT_DIPUNUSED_DIPLOC( 0x10, IP_ACTIVE_LOW, "SW2:1" ) /* Manual states "No Comment" */
540   PORT_DIPNAME( 0x20, 0x20, DEF_STR( Demo_Sounds ) )   PORT_DIPLOCATION("SW2:2")
540   PORT_DIPNAME( 0x20, 0x20, DEF_STR( Demo_Sounds ) )  PORT_DIPLOCATION("SW2:2")
541541   PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
542542   PORT_DIPSETTING(    0x20, DEF_STR( On ) )
543   PORT_DIPNAME( 0x41, 0x01, DEF_STR( Lives ) )   PORT_DIPLOCATION("SW2:3,4")
543   PORT_DIPNAME( 0x41, 0x01, DEF_STR( Lives ) )    PORT_DIPLOCATION("SW2:3,4")
544544   PORT_DIPSETTING(    0x41, "1" )
545545   PORT_DIPSETTING(    0x40, "2" )
546546   PORT_DIPSETTING(    0x01, "3" )
547547   PORT_DIPSETTING(    0x00, "5" )
548   PORT_DIPNAME( 0x82, 0x02, DEF_STR( Bonus_Life ) )   PORT_DIPLOCATION("SW2:5,6")
548   PORT_DIPNAME( 0x82, 0x02, DEF_STR( Bonus_Life ) )   PORT_DIPLOCATION("SW2:5,6")
549549   PORT_DIPSETTING(    0x80, "Every 20,000" )
550550   PORT_DIPSETTING(    0x02, "20,000 & 50,000" )
551551   PORT_DIPSETTING(    0x00, "Every 50,000" )
552552   PORT_DIPSETTING(    0x82, DEF_STR( None ) )
553   PORT_DIPNAME( 0x0c, 0x08, DEF_STR( Difficulty ) )   PORT_DIPLOCATION("SW2:7,8")
553   PORT_DIPNAME( 0x0c, 0x08, DEF_STR( Difficulty ) )   PORT_DIPLOCATION("SW2:7,8")
554554   PORT_DIPSETTING(    0x0c, DEF_STR( Easy ) )
555555   PORT_DIPSETTING(    0x08, DEF_STR( Normal ) )
556556   PORT_DIPSETTING(    0x04, DEF_STR( Hard ) )
trunk/src/mame/drivers/snk.cpp
r253023r253024
49824982   ROM_LOAD( "15.rom", 0x18000, 0x8000, CRC(65a61c99) SHA1(767694c919180de208b6211b593db68fc5a66ff1) )
49834983   ROM_LOAD( "13.rom", 0x20000, 0x8000, CRC(315383d7) SHA1(1c1c5931e3447c4dcbd54fc8ae383b03cb5fbf5b) )
49844984   ROM_LOAD( "16.rom", 0x28000, 0x8000, CRC(e9b03e07) SHA1(124e5328a965ea2af28c4d74934a82394a2ffd72) )
4985   
4985
49864986   ROM_REGION( 0x30000, "bootleg_proms", 0 )
4987   ROM_LOAD( "82s191.bin", 0x00000, 0x800, CRC(072f8622) SHA1(43b0d48656263e88067cddea1d01188755a2023d) )   //prom from a bootleg pcb
4987   ROM_LOAD( "82s191.bin", 0x00000, 0x800, CRC(072f8622) SHA1(43b0d48656263e88067cddea1d01188755a2023d) )  //prom from a bootleg pcb
49884988ROM_END
49894989
49904990
trunk/src/mame/drivers/spc1500.cpp
r253023r253024
77  2015-12-16 preliminary driver initialized
88  2015-12-18 cassette tape supported
99  2015-12-26 80/40 column mode supported
10  2015-12-28 double access mode supported for I/O
10  2015-12-28 double access mode supported for I/O
1111  2016-01-02 Korean character input method and display enabled
12  2016-01-03 user defined char (PCG, Programmable Character Generator) support   
13  2016-01-05 detection of color palette initialization
12  2016-01-03 user defined char (PCG, Programmable Character Generator) support
13  2016-01-05 detection of color palette initialization
1414  2016-01-06 80x16 mode graphic mode support
1515  2016-01-10 double character support
1616  2016-01-12 PCG adressing improved
1717  2016-01-13 Cassette tape motor improved
18   
18
1919TODO:
2020  - Verify PCG ram read for Korean character (english character is fine)
2121  - Support floppy disk drive with SD-1500A controller card
22   
22
2323****************************************************************************/
2424
2525/*
r253023r253024
3232 * Market price 365,000 won ($430) on 04-01-1987
3333
3434 Hardware Specification
35
35
3636 1) SPC-1500
3737 RAM 122KB
3838  - Main Memory: 64KB
r253023r253024
5959 Two external power connector for FDD connection
6060  - DIP switch settings for the screen
6161  - Volume control
62 
62
6363 2) SPC-1500A
6464  July 1987 Release
6565  RF modulator only remove the product from an existing model
66 
66
6767 3) SPC-1500V
6868  This product can not confirm the release date because of PCB level modification.
6969  It equiped SPC-1500V VLSI chip embedded products and removed a lot of TTLs and the memory expansion card.
7070  - IOCS ROM Version: 1.6
7171  - Two internal 50-pin expension slots
72 
72
7373 Firmware
74 
74
7575  IOCS ROM
7676    The various versions with 32KB of capacity existed to date has confirmed the final version number 1.8
7777  - Version 1.3:
r253023r253024
7979  - Version 1.5:
8080  - Version 1.6:
8181  - Version 1.8: supports a variety of peripherals such as external hard disk, FM-Sound, RS-232C from Static soft (C)
82                 various memu appears on the initial screen.
83 
82                 various memu appears on the initial screen.
83
8484  BASIC ROM
8585   Capacity and the final version number of the currently identified 32KB 1.3
86 
86
8787  English ROM
8888   The final version of the verification of the capacity 8KB SS150-1222
8989   The character set of a 8x8 size, and are stored with the size 8x16 8x16 is a part of the size of the font data are written differently and 8x8.
90 
90
9191  Hangul ROM
9292   8KB each is divided by a consonant and consonant and neutral.
9393   - Inital (Choseong)  SS151-1223: 8 types of intial character (actual 6 types)
9494   - Middle (Jungseong) SS152-1224: 2 types of middle character
9595   - Final  (Jongseong) SS153-1225: 2 types of final character
96 
96
9797  Periperials - Monitor
9898   - , high-resolution monitor SM, color monitor model was to distinguish it from CD.
99 
99
100100  1) MD-1255H (Low resolution monitors MD)
101101   - 12 inches Composite 15.734KHz / 60Hz
102102   - N displayed after the model name in the model is non - CRT scanning products
103103   - Stand adopted: if you put the rest on the bottom that can be placed slightly tilted back.
104 
104
105105  2) MD-9052H (Low resolution monitors MD)
106106   - 9 inches Composite 15.734KHz / 60Hz
107   - N from model name means 'anti-glare'
107   - N from model name means 'anti-glare'
108108   - All parts except for the appearance and size is the same as the CRT 1255H.
109 
109
110110  3) MD-2563 (color monitor SM)
111111  4) SM-1439A (high-resolution monitor SM)
112112  5) SM-1422 (high-resolution monitor SM)
r253023r253024
115115   - High-resolution monochrome monitor
116116  7) SM-1231A (high-resolution monitor SM)
117117   - The other part is other than the appearance of the stand is attached to the same as the model SM-1231
118 
119  8) CD-1451D (color monitor SM)
118
119  8) CD-1451D (color monitor SM)
120120   - Composite color monitors
121121  9) CD-1462X (color monitor SM)
122122  10)CD-1464W (color monitor SM)
123  11)CW-4644
124 
123  11)CW-4644
124
125125  FDD (floppy disk drive)
126 
126
127127  1) SD-1500A
128128   - 5.25 "floppy drive for 2D composed of external disk drives diskettes
129  2) SD-1500B
129 2) SD-1500B
130130   - Dual external disk drives
131131   - The two models are idential except the number of FDD. They need the expension controller card named by SFC-1500.
132132   - IBM PC XT compatible FDD can be quipped. SFD-5x0 model is a genuine FDD from Samsung Electronics.
133133
134134  HDD (Hard Disk Drive)
135 
135
136136  1) STH-20
137137   - External hard disk drive set having a capacity of 20MB SCSI controller and the way
138138   - The controller had not solved alone but the controller can be used to mount another hard disk products.
139139   - Release price: 450,000 won ($530).
140 
140
141141  Joysticks
142   - Joystick was limited to 1 as possible (The PCB was designed by supporting two joysticks.
143 
142   - Joystick was limited to 1 as possible (The PCB was designed by supporting two joysticks.
143
144144  1) SJ-1500
145145   - Release price: 8,000 won ($9.4)
146146   - SPC-1000A, MSX-compatible
147 
147
148148  Printer
149 
149
150150  1) SP-510S
151151   - Bitmap image output method Hangul support
152152   - Recommanded 80 columns dot-matrix printer
r253023r253024
157157  5) SP-570B
158158
159159  Expansion Cards
160 
160
161161  1) SFC-1500
162162   - External FDD capacity of the floppy disk controller 5.25 inches / 320KB can connect up to two.
163 
163
164164  2) Multi-controller
165165   - Floppy disk controllers and hard disk controllers on the same PCB.
166 
166
167167  3) ST-PAC
168168   - FM sound card can play with up to 9 simultaneous sound or 5 simultaneous sound and 5 drum tones at the same time (FM-PAC compatible MSX)
169169   - Line output and speaker output volume, tone adjustment built-in volume
170   - it can be used as a synthesizer by connecting the ST-KEY2 product
170   - it can be used as a synthesizer by connecting the ST-KEY2 product
171171   - Release price: 60,000won ($71)
172 
172
173173  SPC-1500 VDP card
174   - MSX game support
174   - MSX game support
175175   - Release price: 35,000won ($41) with composite output only
176176   - Release price: 60,000won ($71) with composite and RGB outputs simultaneously
177 
177
178178  VDP UNIT I
179179   - Composite video output with built-in card expansion card using the same video chip and MSX (static soft)
180180   - Release price: 40,000won ($47).
181 
181
182182  VDP UNIT II
183183   - Expansion using the same video chip and video card with built-in card MSX with an RGB output (static soft)
184184   - Release price: 55,000won ($59).
185 
185
186186  LAN card (SAMNET-K)
187187   - It uses serial communication instead of an Ethernet network card has a way with two serial ports.
188188   - There are two kinds of host card without a DIP switch and the DIP switch is in the client card.
189189   - It was mainly supplied to the teacher / student in an educational institution.
190 
190
191191  Super Pack Card
192192   - Expansion cards that enable the external expansion slot, etc.
193 
193
194194  RS-232C card
195   - At least 300bps, an external modem connected to the serial communication card that supports up to 19,200bps
196     additionally available communications services using the PSTN network (general switched telephone network)
197    and may also be connected to a 9-pin serial mouse.
198   - Support for common serial communications functions,
195   - At least 300bps, an external modem connected to the serial communication card that supports up to 19,200bps
196     additionally available communications services using the PSTN network (general switched telephone network)
197     and may also be connected to a 9-pin serial mouse.
198   - Support for common serial communications functions,
199199     and if IOCS ROM version 1.8 or higher to connect an external modem to the PC communication card is available.
200   - When used in this communication program is super soft static net programs (XMODEM protocol, FS 220-6 compatible
200   - When used in this communication program is super soft static net programs (XMODEM protocol, FS 220-6 compatible
201201     and supporting Samsung/Sambo combination korean character code, and an 8-bit code completion support Hangul) is used.
202202   - Release price: 60,000won ($71).
203 
203
204204  SS-1 ROM pack unit
205205   - The VDP unit containing 1 cartridge slot card and ROM pack
206206   - ROM pack was not compatible with original MSX ROM pack
207207   - Release price: 49,900won ($58)
208 
208
209209  Super Pack
210210   - External ROM cartrige from Static Soft (C)
211211   - 1 cartridge slot and 3 expansion slots (up to five expansion slots available)
212212   - It is available to use the MSX ROM packs without any modification with the static soft VDP card
213213   - Release price: 60,000won ($71)
214 
214
215215  ST-KEY2
216216   - For synthesizer external keyboard
217 
217
218218  * Compatiblity with X1 series of Sharp Electronics
219219   - Almost the key components is the same as X1 models of Sharp Electronics and except for the keyboard input.
220220   - To port the X1 software to SPC-1500, Text attribute, keyboard input and DMA related code should be modified
221   
221
222222*/
223223
224224#include "emu.h"
r253023r253024
247247      , m_pcgram(*this, "pcgram")
248248      , m_io_kb(*this, "LINE")
249249      , m_io_joy(*this, "JOY")
250      , m_dipsw(*this, "DIP_SWITCH")     
250      , m_dipsw(*this, "DIP_SWITCH")
251251      , m_centronics(*this, "centronics")
252252      , m_pio(*this, "ppi8255")
253253      , m_sound(*this, "ay8910")
254254      , m_palette(*this, "palette")
255255      , m_timer(nullptr)
256256   {}
257   DECLARE_READ8_MEMBER(psga_r);   
257   DECLARE_READ8_MEMBER(psga_r);
258258   DECLARE_READ8_MEMBER(porta_r);
259259   DECLARE_WRITE_LINE_MEMBER( centronics_busy_w ) { m_centronics_busy = state; }
260260   DECLARE_READ8_MEMBER(mc6845_videoram_r);
r253023r253024
281281   DECLARE_READ8_MEMBER(io_r);
282282   DECLARE_PALETTE_INIT(spc);
283283   DECLARE_VIDEO_START(spc);
284   MC6845_UPDATE_ROW(crtc_update_row);
284   MC6845_UPDATE_ROW(crtc_update_row);
285285   MC6845_RECONFIGURE(crtc_reconfig);
286286   TIMER_DEVICE_CALLBACK_MEMBER(timer);
287287private:
r253023r253024
315315   required_device<centronics_device> m_centronics;
316316   required_device<i8255_device> m_pio;
317317   required_device<ay8910_device> m_sound;
318   required_device<palette_device> m_palette;   
319   UINT8 *m_font;       
318   required_device<palette_device> m_palette;
319   UINT8 *m_font;
320320   UINT8 m_priority;
321321   emu_timer *m_timer;
322322   void get_pcg_addr();
r253023r253024
338338   if (m_ipl)
339339      membank("bank1")->set_entry(0);
340340   else
341      membank("bank1")->set_entry(1);     
341      membank("bank1")->set_entry(1);
342342}
343343
344344WRITE8_MEMBER( spc1500_state::ramsel)
r253023r253024
349349
350350WRITE8_MEMBER( spc1500_state::portb_w)
351351{
352//   m_ipl = data & (1 << 1);
352//  m_ipl = data & (1 << 1);
353353}
354354
355355WRITE8_MEMBER( spc1500_state::psgb_w)
r253023r253024
381381READ8_MEMBER( spc1500_state::portb_r)
382382{
383383   UINT8 data = 0;
384    data |= ((m_cass->get_state() & CASSETTE_MASK_UISTATE) == CASSETTE_STOPPED || ((m_cass->get_state() & CASSETTE_MASK_MOTOR) == CASSETTE_MOTOR_DISABLED));
385    data |= (m_dipsw->read() & 1) << 4;
386    data |= (m_cass->input() > 0.0038)<<1;
387    data |= m_vdg->vsync_r()<<7;
388    data &= ~((m_centronics_busy==0)<<3);
389    return data;
384   data |= ((m_cass->get_state() & CASSETTE_MASK_UISTATE) == CASSETTE_STOPPED || ((m_cass->get_state() & CASSETTE_MASK_MOTOR) == CASSETTE_MOTOR_DISABLED));
385   data |= (m_dipsw->read() & 1) << 4;
386   data |= (m_cass->input() > 0.0038)<<1;
387   data |= m_vdg->vsync_r()<<7;
388   data &= ~((m_centronics_busy==0)<<3);
389   return data;
390390}
391391
392392WRITE8_MEMBER( spc1500_state::crtc_w)
r253023r253024
444444      m_pcg_offset[0] = 0;
445445      m_pcg_offset[1] = 0;
446446      m_pcg_offset[2] = 0;
447   }   
447   }
448448}
449449
450450WRITE8_MEMBER( spc1500_state::pcg_w)
r253023r253024
506506
507507VIDEO_START_MEMBER(spc1500_state, spc)
508508{
509   
510509}
511510
512511MC6845_RECONFIGURE(spc1500_state::crtc_reconfig)
513512{
514//   printf("reconfig. w:%d, h:%d, %f (%d,%d,%d,%d)\n", width, height, (float)frame_period, visarea.left(), visarea.top(), visarea.right(), visarea.bottom());
515//   printf("register. m_vert_disp:%d, m_horiz_disp:%d, m_max_ras_addr:%d, m_vert_char_total:%d\n", m_crtc_vreg[6], m_crtc_vreg[1],  m_crtc_vreg[9], m_crtc_vreg[0x4]);
513//  printf("reconfig. w:%d, h:%d, %f (%d,%d,%d,%d)\n", width, height, (float)frame_period, visarea.left(), visarea.top(), visarea.right(), visarea.bottom());
514//  printf("register. m_vert_disp:%d, m_horiz_disp:%d, m_max_ras_addr:%d, m_vert_char_total:%d\n", m_crtc_vreg[6], m_crtc_vreg[1],  m_crtc_vreg[9], m_crtc_vreg[0x4]);
516515}
517516
518517MC6845_UPDATE_ROW(spc1500_state::crtc_update_row)
r253023r253024
524523   int j;
525524   int h1, h2, h3;
526525   UINT32  *p = &bitmap.pix32(y);
527   
526
528527   unsigned char cho[] ={1,1,1,1,1,1,1,1,0,0,1,1,1,3,5,5,0,0,5,3,3,5,5,5,0,0,3,3,5,1};
529528   unsigned char jong[]={0,0,0,1,1,1,1,1,0,0,1,1,1,2,2,2,0,0,2,2,2,2,2,2,0,0,2,2,1,1};
530529   bool inv = false;
r253023r253024
564563            hfnt = hfnt & ((*pf << 8) | (*(pf+16)));
565564            pf = &m_font[0x6000+(h3 * 32) + (jong[h2]-1) * 16 * 2 * 32 + n];
566565            hfnt = hfnt & ((*pf << 8) | (*(pf+16)));
567         }           
566         }
568567         else
569568         {
570569            ascii = *(pv+0x1001);
r253023r253024
639638      if (offset < 0x1e00) { romsel(space, offset, data);} else
640639      if (offset < 0x1f00) { ramsel(space, offset, data);} else
641640      if (offset < 0x2000) {} else
642      if (offset < 0x10000)
643      {
644         if (offset < 0x4000)
641      if (offset < 0x10000)
642      {
643         if (offset < 0x4000)
645644         {
646645            offset &= 0xf7ff;
647646            m_p_videoram[offset-0x1800] = m_p_videoram[offset-0x2000] = data;
648647         }
649648         else
650            m_p_videoram[offset-0x2000] = data;
649            m_p_videoram[offset-0x2000] = data;
651650      };
652651   }
653652}
r253023r253024
655654READ8_MEMBER( spc1500_state::io_r)
656655{
657656   m_double_mode = false;
658   if (offset < 0x1000) {} else
657   if (offset < 0x1000) {} else
659658   if (offset < 0x1400) {} else
660659   if (offset < 0x1800) { return pcg_r(space, offset); } else
661660   if (offset < 0x1900) { return crtc_r(space, offset); } else
r253023r253024
663662   if (offset < 0x1b00) { return m_pio->read(space, offset); } else
664663   if (offset < 0x1c00) { return m_sound->data_r(space, offset); } else
665664   if (offset < 0x2000) {} else
666   if (offset < 0x10000){
665   if (offset < 0x10000){
667666      if (offset < 0x4000)
668667         offset &= 0xf7ff;
669668      return m_p_videoram[offset - 0x2000]; }
r253023r253024
680679#if 0
681680static ADDRESS_MAP_START( spc1500_io , AS_IO, 8, spc1500_state )
682681   ADDRESS_MAP_UNMAP_HIGH
683//   AM_RANGE(0x0000, 0x03ff) AM_DEVREADWRITE("userio", user_device, userio_r, userio_w)
684//   AM_RANGE(0x0400, 0x05ff) AM_DEVREADWRITE("lanio", lan_device, lanio_r, lanio_w)
685//   AM_RANGE(0x0600, 0x07ff) AM_DEVREADWRITE("rs232c", rs232c_device, rs232c_r, rs232c_w)
686//   AM_RANGE(0x0800, 0x09ff) AM_DEVREADWRITE("fdcx", fdcx_device, fdcx_r, fdcx_w)
687//   AM_RANGE(0x0a00, 0x0bff) AM_DEVREADWRITE("userio", user_device, userio_r, userio_w)
688//   AM_RANGE(0x0c00, 0x0dff) AM_DEVREADWRITE("fdc", fdc_device, fdc_r, fdc_w)
689//   AM_RANGE(0x0e00, 0x0fff) AM_DEVREADWRITE("extram", extram_device, extram_r, extram_w)
682//  AM_RANGE(0x0000, 0x03ff) AM_DEVREADWRITE("userio", user_device, userio_r, userio_w)
683//  AM_RANGE(0x0400, 0x05ff) AM_DEVREADWRITE("lanio", lan_device, lanio_r, lanio_w)
684//  AM_RANGE(0x0600, 0x07ff) AM_DEVREADWRITE("rs232c", rs232c_device, rs232c_r, rs232c_w)
685//  AM_RANGE(0x0800, 0x09ff) AM_DEVREADWRITE("fdcx", fdcx_device, fdcx_r, fdcx_w)
686//  AM_RANGE(0x0a00, 0x0bff) AM_DEVREADWRITE("userio", user_device, userio_r, userio_w)
687//  AM_RANGE(0x0c00, 0x0dff) AM_DEVREADWRITE("fdc", fdc_device, fdc_r, fdc_w)
688//  AM_RANGE(0x0e00, 0x0fff) AM_DEVREADWRITE("extram", extram_device, extram_r, extram_w)
690689   AM_RANGE(0x1000, 0x10ff) AM_WRITE(paletb_w)
691690   AM_RANGE(0x1100, 0x11ff) AM_WRITE(paletr_w)
692691   AM_RANGE(0x1200, 0x12ff) AM_WRITE(paletg_w)
r253023r253024
696695   AM_RANGE(0x1600, 0x16ff) AM_READWRITE(pcgr_r, pcgr_w)
697696   AM_RANGE(0x1700, 0x17ff) AM_WRITE(pcgg_w)
698697   AM_RANGE(0x1800, 0x18ff) AM_READWRITE(crtc_r, crtc_w)
699//   AM_RANGE(0x1800, 0x1800) AM_DEVWRITE("mc6845", mc6845_device, address_w)
700//   AM_RANGE(0x1801, 0x1801) AM_DEVREADWRITE("mc6845", mc6845_device, register_r, register_w)
701//   AM_RANGE(0x1800, 0x1801) AM_READWRITE(crtc_r, crtc_w)
698//  AM_RANGE(0x1800, 0x1800) AM_DEVWRITE("mc6845", mc6845_device, address_w)
699//  AM_RANGE(0x1801, 0x1801) AM_DEVREADWRITE("mc6845", mc6845_device, register_r, register_w)
700//  AM_RANGE(0x1800, 0x1801) AM_READWRITE(crtc_r, crtc_w)
702701   AM_RANGE(0x1900, 0x1909) AM_READ(keyboard_r)
703    AM_RANGE(0x1a00, 0x1a03) AM_DEVREADWRITE("ppi8255", i8255_device, read, write)
702   AM_RANGE(0x1a00, 0x1a03) AM_DEVREADWRITE("ppi8255", i8255_device, read, write)
704703   AM_RANGE(0x1b00, 0x1bff) AM_DEVREADWRITE("ay8910", ay8910_device, data_r, data_w)
705704   AM_RANGE(0x1c00, 0x1cff) AM_DEVWRITE("ay8910", ay8910_device, address_w)
706705   AM_RANGE(0x1d00, 0x1d00) AM_WRITE(romsel)
707706   AM_RANGE(0x1e00, 0x1e00) AM_WRITE(ramsel)
708707   AM_RANGE(0x2000, 0xffff) AM_RAM AM_SHARE("videoram")
709708ADDRESS_MAP_END
710#endif
709#endif
711710
712711/* Input ports */
713712static INPUT_PORTS_START( spc1500 )
714713
715    PORT_START("DIP_SWITCH")
716    PORT_DIPNAME( 0x01, 0x00, "40/80" )
717    PORT_DIPSETTING(    0x00, "40COL" )
718    PORT_DIPSETTING(    0x01, "80COL" )
719    PORT_DIPNAME( 0x02, 0x02, "Language" )
720    PORT_DIPSETTING(    0x02, "Korean" )
721    PORT_DIPSETTING(    0x00, "English" )
714   PORT_START("DIP_SWITCH")
715   PORT_DIPNAME( 0x01, 0x00, "40/80" )
716   PORT_DIPSETTING(    0x00, "40COL" )
717   PORT_DIPSETTING(    0x01, "80COL" )
718   PORT_DIPNAME( 0x02, 0x02, "Language" )
719   PORT_DIPSETTING(    0x02, "Korean" )
720   PORT_DIPSETTING(    0x00, "English" )
722721   PORT_DIPNAME( 0x04, 0x00, "V-Res" )
723    PORT_DIPSETTING(    0x04, "400" )
722   PORT_DIPSETTING(    0x04, "400" )
724723   PORT_DIPSETTING(    0x00, "200" )
725724   PORT_DIPNAME( 0x08, 0x08, "X1" )
726    PORT_DIPSETTING(    0x08, "Compatible Mode" )
725   PORT_DIPSETTING(    0x08, "Compatible Mode" )
727726   PORT_DIPSETTING(    0x00, "Non Compatible" )
728
727
729728   PORT_START("LINE.0")
730   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
729   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
731730   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_RSHIFT) PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
732731   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_RCONTROL) PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_SHIFT_2)
733   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_UNUSED)
732   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_UNUSED)
734733   PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Break") PORT_CODE(KEYCODE_PAUSE)
735734   PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("\\ |") PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|') PORT_CHAR(0x1c)
736735   PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Graph") PORT_CODE(KEYCODE_LALT)
737736   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED)
738737
739738   PORT_START("LINE.1")
740   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("= +") PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+')
739   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("= +") PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+')
741740   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT)
742741   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Space") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
743742   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Return") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
r253023r253024
768767
769768   PORT_START("LINE.4")
770769   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Del Ins") PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD)) PORT_CHAR(8)
771   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN)   
770   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN)
772771   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Tab") PORT_CODE(KEYCODE_TAB) PORT_CHAR('\t')
773772   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Home") PORT_CODE(KEYCODE_HOME)
774773   PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("N") PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N') PORT_CHAR(0x0e)
r253023r253024
777776   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("4 $") PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
778777
779778   PORT_START("LINE.5")
780   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
779   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
781780   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F1") PORT_CODE(KEYCODE_F1)
782   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED)
781   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED)
783782   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_UNUSED)
784783   PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("M") PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M') PORT_CHAR(0x0d)
785784   PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("G") PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G') PORT_CHAR(0x07)
r253023r253024
787786   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("5 %") PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
788787
789788   PORT_START("LINE.6")
790   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
789   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
791790   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F2") PORT_CODE(KEYCODE_F2)
792791   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("[ {") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{') PORT_CHAR(0x1b)
793792   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("X") PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X') PORT_CHAR(0x18)
r253023r253024
797796   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("6 ^") PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^')
798797
799798   PORT_START("LINE.7")
800   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
799   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
801800   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F3") PORT_CODE(KEYCODE_F3)
802   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED)
801   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED)
803802   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("P") PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P') PORT_CHAR(0x10)
804803   PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(". >") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
805804   PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("J") PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J') PORT_CHAR(0x0a)
r253023r253024
807806   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("7 &") PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&')
808807
809808   PORT_START("LINE.8")
810   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
809   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
811810   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F4") PORT_CODE(KEYCODE_F4)
812   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED)
811   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED)
813812   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("\' \"") PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CHAR('\"')
814813   PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("/ ?") PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
815814   PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("K") PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K') PORT_CHAR(0x0b)
r253023r253024
817816   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("8 *") PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('*')
818817
819818   PORT_START("LINE.9")
820   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Hangul") PORT_CODE(KEYCODE_RALT)   
819   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Hangul") PORT_CODE(KEYCODE_RALT)
821820   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F5") PORT_CODE(KEYCODE_F5)
822821   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("- _") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_')
823822   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("0 )") PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')')
r253023r253024
834833   PORT_BIT(0x10, IP_ACTIVE_HIGH,IPT_UNUSED) // DIP SW2 for Korean/English
835834   PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
836835   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
837   PORT_BIT(0x80, IP_ACTIVE_HIGH,IPT_UNUSED) // DIP SW3 for 200/400 line
836   PORT_BIT(0x80, IP_ACTIVE_HIGH,IPT_UNUSED) // DIP SW3 for 200/400 line
838837INPUT_PORTS_END
839838
840839static ADDRESS_MAP_START(spc1500_mem, AS_PROGRAM, 8, spc1500_state )
841840   ADDRESS_MAP_UNMAP_HIGH
842   AM_RANGE(0x0000, 0x7fff) AM_READ_BANK("bank1") AM_WRITE_BANK("bank2")
841   AM_RANGE(0x0000, 0x7fff) AM_READ_BANK("bank1") AM_WRITE_BANK("bank2")
843842   AM_RANGE(0x8000, 0xffff) AM_READWRITE_BANK("bank4")
844843ADDRESS_MAP_END
845844
r253023r253024
848847   UINT8 *mem_basic = memregion("basic")->base();
849848   UINT8 *mem_ipl = memregion("ipl")->base();
850849   m_p_ram = m_ram->pointer();
851   m_font = memregion("font1")->base();   
850   m_font = memregion("font1")->base();
852851   // configure and intialize banks 1 (read banks)
853852   membank("bank1")->configure_entry(0, mem_ipl);
854853   membank("bank1")->configure_entry(1, mem_basic);
r253023r253024
859858   set_address_space(AS_IO, m_maincpu->space(AS_IO));
860859   // intialize banks 2, 3, 4 (write banks)
861860   membank("bank2")->set_base(m_p_ram);
862   membank("bank4")->set_base(m_p_ram + 0x8000);   
861   membank("bank4")->set_base(m_p_ram + 0x8000);
863862   m_timer = timer_alloc(0);
864863   m_timer->adjust(attotime::zero);
865864}
r253023r253024
867866void spc1500_state::machine_reset()
868867{
869868   m_motor = false;
870      m_time = machine().scheduler().time();   
869   m_time = machine().scheduler().time();
871870   m_double_mode = false;
872871   memset(&m_paltbl[0], 1, 8);
873872   m_char_count = 0;
r253023r253024
904903   MCFG_CPU_PERIODIC_INT_DRIVER(spc1500_state, irq0_line_hold,  60)
905904
906905   /* video hardware */
907   
906
908907   MCFG_SCREEN_ADD("screen", RASTER)
909908   MCFG_SCREEN_REFRESH_RATE(60)
910909   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
911910   MCFG_SCREEN_SIZE(640, 400)
912911   MCFG_SCREEN_VISIBLE_AREA(0,640-1,0,400-1)
913912   MCFG_SCREEN_UPDATE_DEVICE("mc6845", mc6845_device, screen_update )
914   MCFG_PALETTE_ADD("palette", 8)   
913   MCFG_PALETTE_ADD("palette", 8)
915914   MCFG_PALETTE_INIT_OWNER(spc1500_state, spc)
916915   MCFG_MC6845_ADD("mc6845", MC6845, "screen", (VDP_CLOCK/48)) //unknown divider
917916   MCFG_MC6845_SHOW_BORDER_AREA(false)
918917   MCFG_MC6845_CHAR_WIDTH(8)
919918   MCFG_MC6845_UPDATE_ROW_CB(spc1500_state, crtc_update_row)
920919   MCFG_MC6845_RECONFIGURE_CB(spc1500_state, crtc_reconfig)
921   MCFG_VIDEO_START_OVERRIDE(spc1500_state, spc)   
922   
920   MCFG_VIDEO_START_OVERRIDE(spc1500_state, spc)
921
923922   MCFG_DEVICE_ADD("ppi8255", I8255, 0)
924923   MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("cent_data_out", output_latch_device, write))
925924   MCFG_I8255_IN_PORTB_CB(READ8(spc1500_state, portb_r))
926925   MCFG_I8255_OUT_PORTB_CB(WRITE8(spc1500_state, portb_w))
927926   MCFG_I8255_OUT_PORTC_CB(WRITE8(spc1500_state, portc_w))
928   
927
929928   MCFG_TIMER_DRIVER_ADD_PERIODIC("1hz", spc1500_state, timer, attotime::from_hz(1))
930   
929
931930   /* sound hardware */
932931   MCFG_SPEAKER_STANDARD_MONO("mono")
933932   MCFG_SOUND_ADD("ay8910", AY8910, XTAL_4MHz / 2)
r253023r253024
959958   ROM_LOAD("ipl.rom", 0x0000, 0x8000, CRC(80d0704a) SHA1(01e4cbe8baad72effbbe01addd477c5b0ec85c16))
960959   ROM_REGION(0x8000, "basic", ROMREGION_ERASEFF)
961960   ROM_LOAD("basic.rom", 0x0000, 0x8000, CRC(f48328e1) SHA1(fb874ea7d20078726682f2d0e03ea0d1f8bdbb07))
962   ROM_REGION(0x8000, "font1", 0)
961   ROM_REGION(0x8000, "font1", 0)
963962   ROM_LOAD( "ss150fnt.bin", 0x0000, 0x2000, CRC(affdc5c0) SHA1(2a93582fcccf9e40b99ae238ce585d189afe9a5a) )
964963   ROM_LOAD( "ss151fnt.bin", 0x2000, 0x2000, CRC(83c2eb8d) SHA1(2adf7816206dc74b9f0d32cb3b56cbab31fa6044) )
965964   ROM_LOAD( "ss152fnt.bin", 0x4000, 0x2000, CRC(f4a5a590) SHA1(c9a02756107083bf602ae7c90cfe29b8b964e0df) )
966965   ROM_LOAD( "ss153fnt.bin", 0x6000, 0x2000, CRC(8677d5fa) SHA1(34bfacc855c3846744cd586c150c72e5cbe948b0) )
967   
966
968967ROM_END
969968
970969
trunk/src/mame/drivers/taitopjc.cpp
r253023r253024
236236   m_tilemap[1] = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(taitopjc_state::tile_get_info),this), tilemap_mapper_delegate(FUNC(taitopjc_state::tile_scan_layer1),this), 16, 16, 32, 32);
237237   m_tilemap[0]->set_transparent_pen(0);
238238   m_tilemap[1]->set_transparent_pen(1);
239   
239
240240   m_gfxdecode->set_gfx(0, std::make_unique<gfx_element>(m_palette, char_layout, (UINT8*)m_screen_ram.get(), 0, m_palette->entries() / 256, 0));
241241
242242   machine().add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(taitopjc_state::video_exit), this));
r253023r253024
280280   {
281281      UINT32 addr = address - 0x10000000;
282282      m_screen_ram[addr] = data;
283     
283
284284      if (address >= 0x1003f000)
285285      {
286286         UINT32 a = address - 0x1003f000;
trunk/src/mame/drivers/taitotz.cpp
r253023r253024
13681368      UINT32 alpha = m_tnl_fifo[2];
13691369      render_tnl_object(m_tnl_fifo[0] & 0x1fffff, scale, alpha);
13701370
1371//      printf("TNL FIFO: %08X, %f, %08X, %08X\n", m_tnl_fifo[0], u2f(m_tnl_fifo[1]), m_tnl_fifo[2], m_tnl_fifo[3]);
1371//      printf("TNL FIFO: %08X, %f, %08X, %08X\n", m_tnl_fifo[0], u2f(m_tnl_fifo[1]), m_tnl_fifo[2], m_tnl_fifo[3]);
13721372      m_tnl_fifo_ptr = 0;
13731373   }
13741374}
r253023r253024
13821382   int expected_size;
13831383   switch ((m_direct_fifo[0] >> 8) & 0x7)
13841384   {
1385      case 0: expected_size = 24; break;     
1385      case 0: expected_size = 24; break;
13861386      case 2: expected_size = 16; break;
13871387      case 3: expected_size = 24; break;
13881388      case 4: expected_size = 24; break;
r253023r253024
16501650      {
16511651         case 0x14:
16521652            {
1653               r |= 0xff;      // more busy flags? (value & 0x11ff == 0xff expected)
1653               r |= 0xff;      // more busy flags? (value & 0x11ff == 0xff expected)
16541654               break;
16551655            }
16561656
r253023r253024
26122612//  rom[(0x2c620^4)/4] = 0x48000014;    // ID check skip (not needed with correct serial number)
26132613
26142614#if 0
2615   rom[(0x2c164^4)/4] = 0x39600001;      // enable game debug output
2616   rom[(0x2c174^4)/4] = 0x39200001;      // enable game debug output
2615   rom[(0x2c164^4)/4] = 0x39600001;        // enable game debug output
2616   rom[(0x2c174^4)/4] = 0x39200001;        // enable game debug output
26172617   rom[(0x2c978^4)/4] = 0x48000028;
26182618#endif
26192619}
r253023r253024
27512751Logical Sectors/Track 63
27522752Physical Heads 6
27532753Physical Disks 3
2754Sectors Per Drive 8,418,816   
2755Average Seek Time  10.0 ms (read)   
2756Buffer Size    128K
2754Sectors Per Drive 8,418,816
2755Average Seek Time  10.0 ms (read)
2756Buffer Size     128K
27572757
27582758*/
27592759
trunk/src/mame/drivers/ticalc1x.cpp
r253023r253024
6060  TI SR-16 (1974, first consumer product with TMS1000 series MCU)
6161  * TMS1000 MCU labeled TMS1001NL (die labeled 1000, 1001A)
6262  * 12-digit 7seg LED display
63 
63
6464  TI SR-16 II (1975 version)
6565  * TMS1000 MCU labeled TMS1016NL (die labeled 1000B, 1016A)
6666  * notes: cost-reduced 'sequel', [10^x] was removed, and [pi] was added.
r253023r253024
283283  TI-1250/TI-1200 (1976 version), TI-1400, TI-1450, TI-1205, TI-1255, LADY 1200, ABLE
284284  * TMS0970 MCU labeled TMS0972NL ZA0348, JP0972A (die labeled 0970D-72A)
285285  * 8-digit 7seg LED display, or 9 digits with leftmost unused
286 
286
287287  As seen listed above, the basic 4-function TMS0972 calculator MCU was used
288288  in many calculators. It was licensed to other manufacturers too, one funny
289289  example being a Mattel Barbie handheld calculator.
290 
290
291291  Some cheaper models lacked the memory buttons (the function itself still works).
292292  The ABLE series was for educational purposes, with each having a small subset of
293293  available buttons.
trunk/src/mame/drivers/tourvis.cpp
r253023r253024
2424    Ballistix
2525    Be Ball
2626    Bomberman
27    Chōzetsurinjin Beraboh Man (Super Foolish Man)
27    Chozetsurinjin Beraboh Man (Super Foolish Man)
2828    Chuka Taisen
2929    Columns
3030    Coryoon
r253023r253024
471471
472472
473473
474/* 1943 Kai */
474/* 1943 Kai */
475475ROM_START(tv1943)
476476   ROM_REGION( 0x100000, "maincpu", 0 )
477477   ROM_LOAD( "tourv_1943_kia.bin", 0x00000, 0x100000, CRC(de4672ab) SHA1(2da1ee082bfb920c632a95014208f11fb48c58e1) )
r253023r253024
479479   TOURVISION_BIOS
480480ROM_END
481481
482/* Aero Blasters - Hudson / Kaneko */
482/* Aero Blasters - Hudson / Kaneko */
483483ROM_START(tvablast)
484484   ROM_REGION( 0x100000, "maincpu", 0 )
485485   ROM_LOAD( "tourv_ablast.bin", 0x00000, 0x100000, CRC(9302f6d0) SHA1(76ef27a6d639514ed261b9d65f37217f2989d1c0) )
r253023r253024
487487   TOURVISION_BIOS
488488ROM_END
489489
490/* After Burner */
490/* After Burner */
491491ROM_START(tvaburn)
492492   ROM_REGION( 0x100000, "maincpu", 0 )
493493   ROM_LOAD( "tourv_afterburner.bin", 0x00000, 0x100000, CRC(5ce31322) SHA1(08918d443891bd70f1b0b0c739522b764b16bc96) )
r253023r253024
495495   TOURVISION_BIOS
496496ROM_END
497497
498/* Armed-F */
498/* Armed-F */
499499ROM_START(tvarmedf)
500500   ROM_REGION( 0x100000, "maincpu", 0 )
501501   ROM_LOAD( "tourv_armed-f.bin", 0x00000, 0x100000, CRC(056617f5) SHA1(d10eb80b8436b8d217170309647104181cca750a) )
r253023r253024
503503   TOURVISION_BIOS
504504ROM_END
505505
506/* Ballistix */
506/* Ballistix */
507507ROM_START(tvbalstx)
508508   ROM_REGION( 0x100000, "maincpu", 0 )
509509   ROM_LOAD( "tourv_ballistix.bin", 0x00000, 0x100000, CRC(9d32ed98) SHA1(404cc3695940a7fdc802ac166ec564a858a894d0) )
r253023r253024
511511   TOURVISION_BIOS
512512ROM_END
513513
514/* Be Ball */
514/* Be Ball */
515515ROM_START(tvbeball)
516516   ROM_REGION( 0x100000, "maincpu", 0 )
517517   ROM_LOAD( "tourv_be_ball.bin", 0x00000, 0x100000, CRC(4b1e2861) SHA1(bea449543284bb6f4b33b1fb4156cd18a782ad6a) )
r253023r253024
519519   TOURVISION_BIOS
520520ROM_END
521521
522/* Bomberman */
522/* Bomberman */
523523ROM_START(tvbomber)
524524   ROM_REGION( 0x100000, "maincpu", 0 )
525525   ROM_LOAD( "tourv_bomberman.bin", 0x00000, 0x100000, CRC(cfcabe78) SHA1(bdd1766fad43c6c76e1b0d6e8b4f0ba3363442d6) )
r253023r253024
527527   TOURVISION_BIOS
528528ROM_END
529529
530/* Chōzetsurinjin Beraboh Man (Super Foolist Man) */
530/* Chozetsurinjin Beraboh Man (Super Foolist Man) */
531531ROM_START(tvbrabho)
532532   ROM_REGION( 0x100000, "maincpu", 0 )
533533   ROM_LOAD( "tourv_chozetsurinjin_beraboh_man.bin", 0x00000, 0x100000, CRC(1f80cf04) SHA1(121bfb9ba4de4d047b08442d900b7f351210dd48) )
r253023r253024
535535   TOURVISION_BIOS
536536ROM_END
537537
538/* Chuka Taisen */
538/* Chuka Taisen */
539539ROM_START(tvtaisen)
540540   ROM_REGION( 0x100000, "maincpu", 0 )
541541   ROM_LOAD( "tourv_chuka_taisen.bin", 0x00000, 0x100000, CRC(3b9e9185) SHA1(96f9f82a9fa6ee2b92c0294e71d47886e27fdc06) )
r253023r253024
551551   TOURVISION_BIOS
552552ROM_END
553553
554/* Coryoon */
554/* Coryoon */
555555ROM_START(tvcoryon)
556556   ROM_REGION( 0x100000, "maincpu", 0 )
557557   ROM_LOAD( "tourv_corycoon.bin", 0x00000, 0x100000, CRC(c377db91) SHA1(1585d886f775ed361b2558839e544660533e9297) )
r253023r253024
559559   TOURVISION_BIOS
560560ROM_END
561561
562/* Daisenpu */
562/* Daisenpu */
563563ROM_START(tvdsenpu)
564564   ROM_REGION( 0x100000, "maincpu", 0 )
565565   ROM_LOAD( "tourv_daisenpu.bin", 0x00000, 0x100000, CRC(5a8cef75) SHA1(00f27127114e4f5bf69c81212e66948caaec755d) )
r253023r253024
567567   TOURVISION_BIOS
568568ROM_END
569569
570/* Dead Moon */
570/* Dead Moon */
571571ROM_START(tvdmoon)
572572   ROM_REGION( 0x100000, "maincpu", 0 )
573573   ROM_LOAD( "tourv_dead_moon.bin", 0x00000, 0x100000, CRC(b54793c1) SHA1(8899947092d9a02f3be61ac9c293642e83a015ec) )
r253023r253024
575575   TOURVISION_BIOS
576576ROM_END
577577
578/* Devil Crash */
578/* Devil Crash */
579579ROM_START(tvdevilc)
580580   ROM_REGION( 0x100000, "maincpu", 0 )
581581   ROM_LOAD( "tourv_devil_crash.bin", 0x00000, 0x100000, CRC(c163e5c1) SHA1(2134b3943df87af556694dbe6c77b30723f9175a) )
r253023r253024
583583   TOURVISION_BIOS
584584ROM_END
585585
586/* Dodge Ball */
586/* Dodge Ball */
587587ROM_START(tvdodgeb)
588588   ROM_REGION( 0x100000, "maincpu", 0 )
589589   ROM_LOAD( "tourv_dodge_ball.bin", 0x00000, 0x100000, CRC(7a12cf72) SHA1(c477bc5dae4e82a89766052f185afb73ca2234f3) )
r253023r253024
591591   TOURVISION_BIOS
592592ROM_END
593593
594/* Doraemon Meikyuu Daisakusen */
594/* Doraemon Meikyuu Daisakusen */
595595ROM_START(tvdormon)
596596   ROM_REGION( 0x100000, "maincpu", 0 )
597597   ROM_LOAD( "tourv_doreamon.bin", 0x00000, 0x100000, CRC(22e8b5ba) SHA1(f21101358df8625c39a5078b9f1b1a0215470bed) )
r253023r253024
599599   TOURVISION_BIOS
600600ROM_END
601601
602/* Dragon Spirit */
602/* Dragon Spirit */
603603ROM_START(tvdrgnst)
604604   ROM_REGION( 0x100000, "maincpu", 0 )
605605   ROM_LOAD( "tourv_dragon_spirit.bin", 0x00000, 0x100000, CRC(5733951f) SHA1(0256b4c343a3ad1ca625c316a470cc91a5254e8e) )
r253023r253024
620620   TOURVISION_BIOS
621621ROM_END
622622
623/* Final Blaster */
623/* Final Blaster */
624624ROM_START(tvfblast)
625625   ROM_REGION( 0x100000, "maincpu", 0 )
626626   ROM_LOAD( "tourv_final_blaster.bin", 0x00000, 0x100000, CRC(f5f7483c) SHA1(3933719bdd7a0c73cdad76de78d80463112b475a) )
r253023r253024
636636   TOURVISION_BIOS
637637ROM_END
638638
639/* Final Match Tennis */
639/* Final Match Tennis */
640640ROM_START(tvftenis)
641641   ROM_REGION( 0x100000, "maincpu", 0 )
642642   ROM_LOAD( "tourv_final_match_tennis.bin", 0x00000, 0x100000, CRC(f83ed70f) SHA1(f566bd7a806c11f3d33ba0a976e36026a131e6fd) )
r253023r253024
660660   TOURVISION_BIOS
661661ROM_END
662662
663/* Gunhed */
663/* Gunhed */
664664ROM_START(tvgunhed)
665665   ROM_REGION( 0x100000, "maincpu", 0 )
666666   ROM_LOAD( "tourv_gunhed.bin", 0x00000, 0x100000, CRC(9baace99) SHA1(ab676ba72a80314e8cba3810789041d3cc6298f9) )
r253023r253024
668668   TOURVISION_BIOS
669669ROM_END
670670
671/* Hana Taka Daka (Super Long Nose Goblin) */
671/* Hana Taka Daka (Super Long Nose Goblin) */
672672ROM_START(tvhtdaka)
673673   ROM_REGION( 0x100000, "maincpu", 0 )
674674   ROM_LOAD( "tourv_hana_taka_daka.bin", 0x00000, 0x100000, CRC(0fbfda5c) SHA1(02b2ce93ee5e2aaa11c8640ced15258d0d844e6f) )
r253023r253024
684684   TOURVISION_BIOS
685685ROM_END
686686
687/* jinmu Densho */
687/* jinmu Densho */
688688ROM_START(tvdensho)
689689   ROM_REGION( 0x100000, "maincpu", 0 )
690690   ROM_LOAD( "tourv_dinmu_densho.bin", 0x00000, 0x100000, CRC(411a8643) SHA1(46258042dcf6510404ebccaf47034421928f72a8) )
r253023r253024
692692   TOURVISION_BIOS
693693ROM_END
694694
695/* Kiki Kaikai */
695/* Kiki Kaikai */
696696ROM_START(tvkaikai)
697697   ROM_REGION( 0x100000, "maincpu", 0 )
698698   ROM_LOAD( "tourv_kiki_kaikai.bin", 0x00000, 0x100000, CRC(2bdd93f9) SHA1(9b08606865abb8cc8fa17a22becae34b172ff81a) )
r253023r253024
700700   TOURVISION_BIOS
701701ROM_END
702702
703/* Ledgnd of Hero Tonma */
703/* Ledgnd of Hero Tonma */
704704ROM_START(tvtonma)
705705   ROM_REGION( 0x100000, "maincpu", 0 )
706706   ROM_LOAD( "tourv_legend_of_hero_tonma.bin", 0x00000, 0x100000, CRC(e7c2efe3) SHA1(5767bdfa5600b1586e49c17cebd0fd7ef2c5426c) )
r253023r253024
716716   TOURVISION_BIOS
717717ROM_END
718718
719/* Mizubaku Daibouken Liquid Kids */
719/* Mizubaku Daibouken Liquid Kids */
720720ROM_START(tvlqkids)
721721   ROM_REGION( 0x100000, "maincpu", 0 )
722722   ROM_LOAD( "tourv_liquid_kids.bin", 0x00000, 0x100000, CRC(23a8636d) SHA1(752e03dcf8617b5a39cd250f4db1fe13cd13b761) )
r253023r253024
724724   TOURVISION_BIOS
725725ROM_END
726726
727/* Mr Heli */
727/* Mr Heli */
728728ROM_START(tvmrheli)
729729   ROM_REGION( 0x100000, "maincpu", 0 )
730730   ROM_LOAD( "tourv_mr_heli.bin", 0x00000, 0x100000, CRC(bf197c7a) SHA1(048f91f8ab86220a39ab146e531081950eaf1138) )
r253023r253024
732732   TOURVISION_BIOS
733733ROM_END
734734
735/* Ninja Ryukenden */
735/* Ninja Ryukenden */
736736ROM_START(tvninjar)
737737   ROM_REGION( 0x100000, "maincpu", 0 )
738738   ROM_LOAD( "tourv_ninja_ryukenden.bin", 0x00000, 0x100000, CRC(d9cc00ca) SHA1(42d914d338d7d0073b5cc98a4e85729e86bbfad1) )
r253023r253024
740740   TOURVISION_BIOS
741741ROM_END
742742
743/* Operation Wolf */
743/* Operation Wolf */
744744ROM_START(tvopwolf)
745745   ROM_REGION( 0x100000, "maincpu", 0 )
746746   ROM_LOAD( "tourv_operation_wolf.bin", 0x00000, 0x100000, CRC(d4a755a9) SHA1(cd236ba0c3439ba2356cb270f56a41a52e0d6dc6) )
r253023r253024
748748   TOURVISION_BIOS
749749ROM_END
750750
751/* Override */
751/* Override */
752752ROM_START(tvovride)
753753   ROM_REGION( 0x100000, "maincpu", 0 )
754754   ROM_LOAD( "tourv_override.bin", 0x00000, 0x100000, CRC(4dbbf4ef) SHA1(180a68f87a881db1d01ffa3566e0d2e28303d09e) )
r253023r253024
756756   TOURVISION_BIOS
757757ROM_END
758758
759/* Pac-Land */
759/* Pac-Land */
760760ROM_START(tvpaclnd)
761761   ROM_REGION( 0x100000, "maincpu", 0 )
762762   ROM_LOAD( "tourv_pac-land.bin", 0x00000, 0x100000, CRC(32aee4e2) SHA1(900a918e73aaa1dc5752f851ebd85217e736109b) )
r253023r253024
764764   TOURVISION_BIOS
765765ROM_END
766766
767/* PC Genjin Punkic Cyborg */
767/* PC Genjin Punkic Cyborg */
768768ROM_START(tvpcybrg)
769769   ROM_REGION( 0x100000, "maincpu", 0 )
770770   ROM_LOAD( "tourv_pc_genijin_punkic_cyborg.bin", 0x00000, 0x100000, CRC(5dfdc8fd) SHA1(e4e263cf7c102837c7d669d27894085f3369dd9b) )
r253023r253024
788788   TOURVISION_BIOS
789789ROM_END
790790
791/* Power Drift */
791/* Power Drift */
792792ROM_START(tvpdrift)
793793   ROM_REGION( 0x100000, "maincpu", 0 )
794794   ROM_LOAD( "tourv_power_drift.bin", 0x00000, 0x100000, CRC(eb2fdf0b) SHA1(da2191dd6e9d186c10c1c4d415254b8d7c456159) )
r253023r253024
811811   TOURVISION_BIOS
812812ROM_END
813813
814/* Pro Yakyuu World Stadium '91 */
814/* Pro Yakyuu World Stadium '91 */
815815ROM_START(tvpros91)
816816   ROM_REGION( 0x100000, "maincpu", 0 )
817817   ROM_LOAD( "tourv_pro_yakyuu_world_stadium_91.bin", 0x00000, 0x100000, CRC(2a5f1283) SHA1(e5044e397e6ccbc5c5741fa3f073697b60116325) )
r253023r253024
819819   TOURVISION_BIOS
820820ROM_END
821821
822/* Psycho Chaser */
822/* Psycho Chaser */
823823ROM_START(tvpchasr)
824824   ROM_REGION( 0x100000, "maincpu", 0 )
825825   ROM_LOAD( "tourv_pyscho_chaser.bin", 0x00000, 0x100000, CRC(e0b65280) SHA1(83248975e9bea62e67b5314c663d372c12b08416) )
r253023r253024
827827   TOURVISION_BIOS
828828ROM_END
829829
830/* Puzzle Boy */
830/* Puzzle Boy */
831831ROM_START(tvpzlboy)
832832   ROM_REGION( 0x100000, "maincpu", 0 )
833833   ROM_LOAD( "tourv_puzzle_boy.bin", 0x00000, 0x100000, CRC(0dd96cda) SHA1(652ce8b06f2aef69698d4372ff67b86362655de5) )
r253023r253024
835835   TOURVISION_BIOS
836836ROM_END
837837
838/* Raiden */
838/* Raiden */
839839ROM_START(tvraiden)
840840   ROM_REGION( 0x100000, "maincpu", 0 )
841841   ROM_LOAD( "tourv_raiden.bin", 0x00000, 0x100000, CRC(b99a85b6) SHA1(5c8b103c5a7bfeba20dcc490204d672b55e36452) )
r253023r253024
856856   TOURVISION_BIOS
857857ROM_END
858858
859/* R-Type II */
859/* R-Type II */
860860ROM_START(tvrtype2)
861861   ROM_REGION( 0x100000, "maincpu", 0 )
862862   ROM_LOAD( "tourv_r-type_ii.bin", 0x00000, 0x100000, CRC(b03bfd7a) SHA1(cc8cec1fc4bae3937d0ed60468ff703d07ce9d0c) )
r253023r253024
864864   TOURVISION_BIOS
865865ROM_END
866866
867/* Saiga No Nindou - Ninja Spirit */
867/* Saiga No Nindou - Ninja Spirit */
868868ROM_START(tvninjas)
869869   ROM_REGION( 0x100000, "maincpu", 0 )
870870   ROM_LOAD( "tourv_saiga_no_nindou.bin", 0x00000, 0x100000, CRC(87894514) SHA1(6845c29247f9dd805b7cd8cb046e88526e853a11) )
r253023r253024
872872   TOURVISION_BIOS
873873ROM_END
874874
875/* Salamander */
875/* Salamander */
876876ROM_START(tvslmndr)
877877   ROM_REGION( 0x100000, "maincpu", 0 )
878878   ROM_LOAD( "tourv_salamander.bin", 0x00000, 0x100000, CRC(ae8bcdf1) SHA1(3cc48fa594ab5ce1573c61861ec8e927163b6abb) )
r253023r253024
880880   TOURVISION_BIOS
881881ROM_END
882882
883/* Shinobi */
883/* Shinobi */
884884ROM_START(tvshnobi)
885885   ROM_REGION( 0x100000, "maincpu", 0 )
886886   ROM_LOAD( "tourv_shinobi.bin", 0x00000, 0x100000, CRC(091a2b01) SHA1(aac2d5fadc74f837b73f662456f8a308413de57a) )
r253023r253024
888888   TOURVISION_BIOS
889889ROM_END
890890
891/* Side arms */
891/* Side arms */
892892ROM_START(tvsdarms)
893893   ROM_REGION( 0x100000, "maincpu", 0 )
894894   ROM_LOAD( "tourv_side_arms.bin", 0x00000, 0x100000, CRC(04256267) SHA1(a4ff8f19fa528fc8a7aae5ad7e0c574dc52c3388) )
r253023r253024
896896   TOURVISION_BIOS
897897ROM_END
898898
899/* Skweek */
899/* Skweek */
900900ROM_START(tvskweek)
901901   ROM_REGION( 0x100000, "maincpu", 0 )
902902   ROM_LOAD( "tourv_skweek.bin", 0x00000, 0x100000, CRC(b2a86ecc) SHA1(c1b113132ca6be1b0f3f16f31cc5ba894bee7e91) )
r253023r253024
904904   TOURVISION_BIOS
905905ROM_END
906906
907/* Son Son II */
907/* Son Son II */
908908ROM_START(tvsson2)
909909   ROM_REGION( 0x100000, "maincpu", 0 )
910910   ROM_LOAD( "tourv_son_son_ii.bin", 0x00000, 0x100000, CRC(8fb484cd) SHA1(553838dcb3524fe0b620ea60e926a57cc371068d) )
r253023r253024
943943   TOURVISION_BIOS
944944ROM_END
945945
946/* Tatsujin */
946/* Tatsujin */
947947ROM_START(tvtsujin)
948948   ROM_REGION( 0x100000, "maincpu", 0 )
949949   ROM_LOAD( "tourv_tatsujin.bin", 0x00000, 0x100000, CRC(023adbcc) SHA1(bef7d03fff2e74970a0747c12d31ec8661703deb) )
r253023r253024
951951   TOURVISION_BIOS
952952ROM_END
953953
954/* Terra Cresta II */
954/* Terra Cresta II */
955955ROM_START(tvtcrst2)
956956   ROM_REGION( 0x100000, "maincpu", 0 )
957957   ROM_LOAD( "tourv_terra_cresta_ii.bin", 0x00000, 0x100000, CRC(8e7bb390) SHA1(af13afe006313b0db1273782c977efdad6100291) )
r253023r253024
974974   TOURVISION_BIOS
975975ROM_END
976976
977/* Toy Shop Boys */
977/* Toy Shop Boys */
978978ROM_START(tvtsboys)
979979   ROM_REGION( 0x100000, "maincpu", 0 )
980980   ROM_LOAD( "tourv_toy_shop_boys.bin", 0x00000, 0x100000, CRC(a9ed3440) SHA1(c519744cc16dad7a1455e359020ce95f4ac0b51a) )
r253023r253024
997997   TOURVISION_BIOS
998998ROM_END
999999
1000/* Veigues */
1000/* Veigues */
10011001ROM_START(tveigues)
10021002   ROM_REGION( 0x100000, "maincpu", 0 )
10031003   ROM_LOAD( "tourv_veigues.bin", 0x00000, 0x100000, CRC(64ef8be7) SHA1(634191a181cbccbed8cf7a86e4f074691ba9b715) )
r253023r253024
10131013   TOURVISION_BIOS
10141014ROM_END
10151015
1016/* Winning Shot */
1016/* Winning Shot */
10171017ROM_START(tvwnshot)
10181018   ROM_REGION( 0x100000, "maincpu", 0 )
10191019   ROM_LOAD( "tourv_winning_shot.bin", 0x00000, 0x100000, CRC(7196b2ca) SHA1(a1ae2e875541ad39751a95629d614d2c913b8c02) )
r253023r253024
10211021   TOURVISION_BIOS
10221022ROM_END
10231023
1024/* W-Ring */
1024/* W-Ring */
10251025ROM_START(tvwring)
10261026   ROM_REGION( 0x100000, "maincpu", 0 )
10271027   ROM_LOAD( "tourv_w-ring.bin", 0x00000, 0x100000, CRC(609dc08d) SHA1(191b8751fc5b8700c7d9dae23d194016fe84586c) )
r253023r253024
10291029   TOURVISION_BIOS
10301030ROM_END
10311031
1032/* Xevious */
1032/* Xevious */
10331033ROM_START(tvxvious)
10341034   ROM_REGION( 0x100000, "maincpu", 0 )
10351035   ROM_LOAD( "tourv_xevious.bin", 0x00000, 0x100000, CRC(3c0fb5a9) SHA1(1fd9ff582da83e1b9fee569da4db4de15e912f62) )
r253023r253024
10611061GAME( 1990, tvarmedf, tourvis, tourvision, tourvision, pce_common_state, pce_common, ROT0, "bootleg (Tourvision) / Nichibutsu / Big Don",               "Armed-F (Tourvision PCE bootleg)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
10621062GAME( 1990, tvbeball, tourvis, tourvision, tourvision, pce_common_state, pce_common, ROT0, "bootleg (Tourvision) / Hudson Soft",                        "Be Ball (Tourvision PCE bootleg)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
10631063GAME( 1990, tvbomber, tourvis, tourvision, tourvision, pce_common_state, pce_common, ROT0, "bootleg (Tourvision) / Hudson Soft",                        "Bomberman (Tourvision PCE bootleg)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
1064GAME( 1990, tvbrabho, tourvis, tourvision, tourvision, pce_common_state, pce_common, ROT0, "bootleg (Tourvision) / Namco / Namcot",                     "Chōzetsurinjin Beraboh Man (Tourvision PCE bootleg)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
1064GAME( 1990, tvbrabho, tourvis, tourvision, tourvision, pce_common_state, pce_common, ROT0, "bootleg (Tourvision) / Namco / Namcot",                     "Ch??zetsurinjin Beraboh Man (Tourvision PCE bootleg)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
10651065GAME( 1990, tvdsenpu, tourvis, tourvision, tourvision, pce_common_state, pce_common, ROT0, "bootleg (Tourvision) / Toaplan / Nec Avenue",               "Daisenpu (Tourvision PCE bootleg)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
10661066GAME( 1990, tvdevilc, tourvis, tourvision, tourvision, pce_common_state, pce_common, ROT0, "bootleg (Tourvision) / Naxat / Red",                        "Devil Crash (Tourvision PCE bootleg)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
10671067GAME( 1990, tvdodgeb, tourvis, tourvision, tourvision, pce_common_state, pce_common, ROT0, "bootleg (Tourvision) / Technos Japan Corp / Naxat Soft",    "Dodge Ball (Tourvision PCE bootleg)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
trunk/src/mame/drivers/ts803.cpp
r253023r253024
124124
125125I/0 Port Addresses
126126
127System Status Switch 1                           00
128Diagnostic Indicators 1 and 2                     10
129Diagnostic Indicators 3 and 4                     11
130RS-422 Control and Auto Wait                     12
131Memory Bank Select                              13
132STI Device (modem)                              20-2F
133DART Dual Asynchronous Receiver Transmitter
134Device (keyboard, printer, mouse)                  30-33
135RS-422 SIO Device·                              40-43
136Floppy Disk Controller                           80-83
137Floppy Disk Drive Decoder                        90
138Winchester Disk Controller Reset                  A0
139Winchester Disk Controller                        B0-BF
140Graphics Controller                              C0-CF
127System Status Switch 1                                  00
128Diagnostic Indicators 1 and 2                           10
129Diagnostic Indicators 3 and 4                           11
130RS-422 Control and Auto Wait                            12
131Memory Bank Select                                      13
132STI Device (modem)                                      20-2F
133DART Dual Asynchronous Receiver Transmitter
134Device (keyboard, printer, mouse)                       30-33
135RS-422 SIO Device                                       40-43
136Floppy Disk Controller                                  80-83
137Floppy Disk Drive Decoder                               90
138Winchester Disk Controller Reset                        A0
139Winchester Disk Controller                              B0-BF
140Graphics Controller                                     C0-CF
141141
142142*/
143143static ADDRESS_MAP_START(ts803_io, AS_IO, 8, ts803_state)
r253023r253024
176176      //m_maincpu->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE);
177177
178178      if (data==0x0d) m_maincpu->space(AS_PROGRAM).write_byte(0xf83f,0xC1);
179      else
179      else
180180      {
181181         m_maincpu->space(AS_PROGRAM).write_byte(0xf83f,0x4f);
182182         m_maincpu->space(AS_PROGRAM).write_byte(0xf890,data);
r253023r253024
260260WRITE8_MEMBER( ts803_state::ts803_porthi_w )
261261{
262262   //printf("PortHI write [%2x] [%2x]\n",offset+0x91,data);
263   
263
264264   switch (offset+0x91)
265265   {
266266      case 0xc4:
r253023r253024
416416{
417417/*
418418Bit 0 = 0 alpha mode
419            1 graphics mode
419                1 graphics mode
420420Bit 1 = 0 page 1 (alpha mode only)
421            1 page 2 (alpha mode only)
421                1 page 2 (alpha mode only)
422422Bit 2 = 0 alpha memory access (round off)
423            1 graphics memory access (normal CPU address)
423                1 graphics memory access (normal CPU address)
424424*/
425425
426426   //printf("CRTC::c4 write [%2x]\n",data);
trunk/src/mame/drivers/wildpkr.cpp
r253023r253024
231231   AM_RANGE(0x300000, 0x303fff) AM_RAM
232232   AM_RANGE(0x400000, 0x4007ff) AM_RAM // dallas timekeeper?
233233
234//   AM_RANGE(0x800200, 0x800201) AM_DEVWRITE8("ramdac", ramdac_device, index_w, 0xff00)
235//   AM_RANGE(0x800202, 0x800203) AM_DEVWRITE8("ramdac", ramdac_device, pal_w, 0xff00)
236//   AM_RANGE(0x800204, 0x800205) AM_DEVWRITE8("ramdac", ramdac_device, mask_w, 0xff00)
234//  AM_RANGE(0x800200, 0x800201) AM_DEVWRITE8("ramdac", ramdac_device, index_w, 0xff00)
235//  AM_RANGE(0x800202, 0x800203) AM_DEVWRITE8("ramdac", ramdac_device, pal_w, 0xff00)
236//  AM_RANGE(0x800204, 0x800205) AM_DEVWRITE8("ramdac", ramdac_device, mask_w, 0xff00)
237237ADDRESS_MAP_END
238238
239239/* Unknown R/W:
trunk/src/mame/drivers/williams.cpp
r253023r253024
493493
494494It's a RAM-based palette with 4 bit red, green, blue and brightness/intensity components. It looks like the
495495brightness component (from IC76, the uppermost of the four 2148 SRAMs) should be combined with the color
496components in a more complicated way than simply multiplying them like MAME does.
496components in a more complicated way than simply multiplying them like MAME does.
497497
498498Reference video: https://www.youtube.com/watch?v=R5OeC6Wc_yI
499499
trunk/src/mame/drivers/witch.cpp
r253023r253024
415415      case 0x02: //A002 bit 7&6 = m_bank ????
416416      {
417417         m_reg_a002 = data;
418         
418
419419         membank("bank1")->set_entry((data>>6)&3);
420420      }
421421      break;
r253023r253024
724724   m_gfx0a_tilemap->set_palette_offset(0x100);
725725   m_gfx0b_tilemap->set_palette_offset(0x100);
726726   m_gfx1_tilemap->set_palette_offset(0x200);
727   
727
728728   save_item(NAME(m_scrollx));
729729   save_item(NAME(m_scrolly));
730730   save_item(NAME(m_reg_a002));
trunk/src/mame/includes/40love.h
r253023r253024
4242   bitmap_ind16    *m_pixel_bitmap1;
4343   bitmap_ind16    *m_pixel_bitmap2;
4444   int         m_pixram_sel;
45   bool      m_color_bank;
46   bool      m_screen_disable;
47   
45   bool        m_color_bank;
46   bool        m_screen_disable;
47
4848   /* sound-related */
4949   int         m_sound_nmi_enable;
5050   int         m_pending_nmi;
trunk/src/mame/includes/arkanoid.h
r253023r253024
5454   UINT8    m_toz80;           // byte latch for 68705->z80 comms
5555
5656   /* mcu internal related */
57   UINT8    m_port_a_in;   
57   UINT8    m_port_a_in;
5858   UINT8    m_port_a_out;
5959   UINT8    m_ddr_a;
6060   UINT8    m_port_c_internal;
trunk/src/mame/includes/cps3.h
r253023r253024
5353   required_shared_ptr<UINT32> m_decrypted_gamerom;
5454   required_shared_ptr<UINT32> m_0xc0000000_ram_decrypted;
5555
56   optional_memory_region      m_user4_region;
57   optional_memory_region      m_user5_region;
56   optional_memory_region      m_user4_region;
57   optional_memory_region      m_user5_region;
5858
5959   fujitsu_29f016a_device *m_simm[7][8];
6060   UINT32 m_cram_gfxflash_bank;
trunk/src/mame/includes/dkong.h
r253023r253024
145145   std::unique_ptr<UINT8[]> m_decrypted;
146146
147147   /* sound state */
148   optional_region_ptr<UINT8>   m_snd_rom;
148   optional_region_ptr<UINT8>  m_snd_rom;
149149
150150   /* video state */
151151   tilemap_t           *m_bg_tilemap;
trunk/src/mame/includes/fm7.h
r253023r253024
284284   optional_shared_ptr<UINT8> m_shared_ram;
285285   optional_shared_ptr<UINT8> m_boot_ram;
286286
287   UINT8         m_irq_flags;
288   UINT8         m_irq_mask;
289   emu_timer*      m_timer;
290   emu_timer*      m_subtimer;
291   emu_timer*      m_keyboard_timer;
292   UINT8         m_basic_rom_en;
293   UINT8         m_init_rom_en;
287   UINT8           m_irq_flags;
288   UINT8           m_irq_mask;
289   emu_timer*      m_timer;
290   emu_timer*      m_subtimer;
291   emu_timer*      m_keyboard_timer;
292   UINT8           m_basic_rom_en;
293   UINT8           m_init_rom_en;
294294
295   unsigned int   m_key_delay;
296   unsigned int   m_key_repeat;
297   UINT16          m_current_scancode;
298   UINT32          m_key_data[4];
299   UINT32          m_mod_data;
300   UINT8          m_key_scan_mode;
301   UINT8          m_break_flag;
295   unsigned int    m_key_delay;
296   unsigned int    m_key_repeat;
297   UINT16          m_current_scancode;
298   UINT32          m_key_data[4];
299   UINT32          m_mod_data;
300   UINT8           m_key_scan_mode;
301   UINT8           m_break_flag;
302302
303   UINT8          m_psg_regsel;
304   UINT8          m_psg_data;
303   UINT8           m_psg_regsel;
304   UINT8           m_psg_data;
305305
306   UINT8          m_fdc_side;
307   UINT8          m_fdc_drive;
308   UINT8          m_fdc_irq_flag;
309   UINT8          m_fdc_drq_flag;
306   UINT8           m_fdc_side;
307   UINT8           m_fdc_drive;
308   UINT8           m_fdc_irq_flag;
309   UINT8           m_fdc_drq_flag;
310310
311   UINT8          m_fm77av_ym_irq;
312   UINT8          m_speaker_active;
311   UINT8           m_fm77av_ym_irq;
312   UINT8           m_speaker_active;
313313
314   UINT16          m_kanji_address;
315   fm7_encoder_t   m_encoder;
316   fm7_mmr_t       m_mmr;
317   UINT8          m_cp_prev;
314   UINT16          m_kanji_address;
315   fm7_encoder_t   m_encoder;
316   fm7_mmr_t       m_mmr;
317   UINT8           m_cp_prev;
318318
319   std::unique_ptr<UINT8[]>   m_video_ram;
320   emu_timer*                m_fm77av_vsync_timer;
319   std::unique_ptr<UINT8[]>    m_video_ram;
320   emu_timer*                  m_fm77av_vsync_timer;
321321   UINT8 m_type;
322   fm7_video_t      m_video;
323   fm7_alu_t      m_alu;
324   int            m_sb_prev;
322   fm7_video_t     m_video;
323   fm7_alu_t       m_alu;
324   int             m_sb_prev;
325325
326326   void fm77av_encoder_setup_command();
327327   void fm77av_encoder_handle_command();
trunk/src/mame/includes/gaelco2.h
r253023r253024
3030   required_shared_ptr<UINT16> m_generic_paletteram_16;
3131   optional_shared_ptr<UINT16> m_shareram;
3232
33   
3433
34
3535   UINT32 snowboard_latch;
3636
3737
r253023r253024
3939   tilemap_t *m_pant[2];
4040   int m_dual_monitor;
4141
42   DECLARE_READ16_MEMBER(dallas_kludge_r);   
42   DECLARE_READ16_MEMBER(dallas_kludge_r);
4343   DECLARE_READ16_MEMBER(maniacsqa_prot_r);
4444
4545   DECLARE_WRITE16_MEMBER(gaelco2_coin_w);
trunk/src/mame/includes/harddriv.h
r253023r253024
344344   UINT16                  m_som_memory[0x8000/2];
345345   UINT16 *                m_adsp_pgm_memory_word;
346346
347   optional_region_ptr<UINT16>   m_ds3_sdata_memory;
347   optional_region_ptr<UINT16> m_ds3_sdata_memory;
348348   UINT32                  m_ds3_sdata_memory_size;
349349
350350   UINT8                   m_ds3_gcmd;
trunk/src/mame/includes/jaguar.h
r253023r253024
8484   required_shared_ptr<UINT32> m_shared_ram;
8585   required_shared_ptr<UINT32> m_gpu_ram;
8686   required_shared_ptr<UINT32> m_gpu_clut;
87   optional_memory_region      m_romboard_region;
87   optional_memory_region      m_romboard_region;
8888
8989   // configuration
9090   bool m_is_r3000;
trunk/src/mame/layout/fidel_vcc.lay
r253023r253024
6262      <bezel name="0.7" element="led">
6363         <bounds x="22.25" y="17" width="1.5" height="1.5" />
6464      </bezel>
65   
65
6666   </view>
6767</mamelayout>
trunk/src/mame/layout/marywu.lay
r253023r253024
99      </led7seg>
1010   </element>
1111
12        <element name="led" defstate="0">
13                <text string=""></text>
14                <disk state="0">
15                        <color red="0.1" green="0.025" blue="0.028" />
16                        <bounds x="0.25" y="0.25" width="0.5" height="0.5" />
17                </disk>
18                <disk state="1">
19                        <color red="1.0" green="0.25" blue="0.28" />
20                        <bounds x="0.25" y="0.25" width="0.5" height="0.5" />
21                </disk>
22        </element>
12      <element name="led" defstate="0">
13            <text string=""></text>
14            <disk state="0">
15                  <color red="0.1" green="0.025" blue="0.028" />
16                  <bounds x="0.25" y="0.25" width="0.5" height="0.5" />
17            </disk>
18            <disk state="1">
19                  <color red="1.0" green="0.25" blue="0.28" />
20                  <bounds x="0.25" y="0.25" width="0.5" height="0.5" />
21            </disk>
22      </element>
2323
2424   <element name="background">
2525      <rect>
r253023r253024
3535         <bounds left="0" top="20" right="798" bottom="770" />
3636      </backdrop>
3737
38                <!-- LEDs -->
38            <!-- LEDs -->
3939
40                <bezel name="led4"  element="led"><bounds x="199" y="160" width="40" height="40" /></bezel>
41                <bezel name="led5"  element="led"><bounds x="249" y="160" width="40" height="40" /></bezel>
42                <bezel name="led6"  element="led"><bounds x="324" y="160" width="40" height="40" /></bezel>
43                <bezel name="led7"  element="led"><bounds x="399" y="160" width="40" height="40" /></bezel>
44                <bezel name="led8"  element="led"><bounds x="474" y="160" width="40" height="40" /></bezel>
45                <bezel name="led9"  element="led"><bounds x="549" y="160" width="40" height="40" /></bezel>
46                <bezel name="led10" element="led"><bounds x="599" y="160" width="40" height="40" /></bezel>
40            <bezel name="led4"  element="led"><bounds x="199" y="160" width="40" height="40" /></bezel>
41            <bezel name="led5"  element="led"><bounds x="249" y="160" width="40" height="40" /></bezel>
42            <bezel name="led6"  element="led"><bounds x="324" y="160" width="40" height="40" /></bezel>
43            <bezel name="led7"  element="led"><bounds x="399" y="160" width="40" height="40" /></bezel>
44            <bezel name="led8"  element="led"><bounds x="474" y="160" width="40" height="40" /></bezel>
45            <bezel name="led9"  element="led"><bounds x="549" y="160" width="40" height="40" /></bezel>
46            <bezel name="led10" element="led"><bounds x="599" y="160" width="40" height="40" /></bezel>
4747
48                <bezel name="led3"  element="led"><bounds x="199" y="210" width="40" height="40" /></bezel>
49                <bezel name="led11" element="led"><bounds x="599" y="210" width="40" height="40" /></bezel>
48            <bezel name="led3"  element="led"><bounds x="199" y="210" width="40" height="40" /></bezel>
49            <bezel name="led11" element="led"><bounds x="599" y="210" width="40" height="40" /></bezel>
5050
51                <bezel name="led2"  element="led"><bounds x="199" y="285" width="40" height="40" /></bezel>
52                <bezel name="led12" element="led"><bounds x="599" y="285" width="40" height="40" /></bezel>
51            <bezel name="led2"  element="led"><bounds x="199" y="285" width="40" height="40" /></bezel>
52            <bezel name="led12" element="led"><bounds x="599" y="285" width="40" height="40" /></bezel>
5353
54                <bezel name="led1"  element="led"><bounds x="199" y="360" width="40" height="40" /></bezel>
55                <bezel name="led30" element="led"><bounds x="399" y="360" width="40" height="40" /></bezel>
56                <bezel name="led13" element="led"><bounds x="599" y="360" width="40" height="40" /></bezel>
54            <bezel name="led1"  element="led"><bounds x="199" y="360" width="40" height="40" /></bezel>
55            <bezel name="led30" element="led"><bounds x="399" y="360" width="40" height="40" /></bezel>
56            <bezel name="led13" element="led"><bounds x="599" y="360" width="40" height="40" /></bezel>
5757
58                <bezel name="led0"  element="led"><bounds x="199" y="435" width="40" height="40" /></bezel>
59                <bezel name="led14" element="led"><bounds x="599" y="435" width="40" height="40" /></bezel>
58            <bezel name="led0"  element="led"><bounds x="199" y="435" width="40" height="40" /></bezel>
59            <bezel name="led14" element="led"><bounds x="599" y="435" width="40" height="40" /></bezel>
6060
61                <bezel name="led23" element="led"><bounds x="199" y="510" width="40" height="40" /></bezel>
62                <bezel name="led15" element="led"><bounds x="599" y="510" width="40" height="40" /></bezel>
61            <bezel name="led23" element="led"><bounds x="199" y="510" width="40" height="40" /></bezel>
62            <bezel name="led15" element="led"><bounds x="599" y="510" width="40" height="40" /></bezel>
6363
64                <bezel name="led22" element="led"><bounds x="199" y="560" width="40" height="40" /></bezel>
65                <bezel name="led21" element="led"><bounds x="249" y="560" width="40" height="40" /></bezel>
66                <bezel name="led20" element="led"><bounds x="324" y="560" width="40" height="40" /></bezel>
67                <bezel name="led19" element="led"><bounds x="399" y="560" width="40" height="40" /></bezel>
68                <bezel name="led18" element="led"><bounds x="474" y="560" width="40" height="40" /></bezel>
69                <bezel name="led17" element="led"><bounds x="549" y="560" width="40" height="40" /></bezel>
70                <bezel name="led16" element="led"><bounds x="599" y="560" width="40" height="40" /></bezel>
64            <bezel name="led22" element="led"><bounds x="199" y="560" width="40" height="40" /></bezel>
65            <bezel name="led21" element="led"><bounds x="249" y="560" width="40" height="40" /></bezel>
66            <bezel name="led20" element="led"><bounds x="324" y="560" width="40" height="40" /></bezel>
67            <bezel name="led19" element="led"><bounds x="399" y="560" width="40" height="40" /></bezel>
68            <bezel name="led18" element="led"><bounds x="474" y="560" width="40" height="40" /></bezel>
69            <bezel name="led17" element="led"><bounds x="549" y="560" width="40" height="40" /></bezel>
70            <bezel name="led16" element="led"><bounds x="599" y="560" width="40" height="40" /></bezel>
7171
72                <bezel name="led29" element="led"><bounds x="199" y="660" width="40" height="40" /></bezel>
73                <bezel name="led28" element="led"><bounds x="279" y="660" width="40" height="40" /></bezel>
74                <bezel name="led27" element="led"><bounds x="359" y="660" width="40" height="40" /></bezel>
75                <bezel name="led26" element="led"><bounds x="439" y="660" width="40" height="40" /></bezel>
76                <bezel name="led25" element="led"><bounds x="519" y="660" width="40" height="40" /></bezel>
77                <bezel name="led24" element="led"><bounds x="599" y="660" width="40" height="40" /></bezel>
72            <bezel name="led29" element="led"><bounds x="199" y="660" width="40" height="40" /></bezel>
73            <bezel name="led28" element="led"><bounds x="279" y="660" width="40" height="40" /></bezel>
74            <bezel name="led27" element="led"><bounds x="359" y="660" width="40" height="40" /></bezel>
75            <bezel name="led26" element="led"><bounds x="439" y="660" width="40" height="40" /></bezel>
76            <bezel name="led25" element="led"><bounds x="519" y="660" width="40" height="40" /></bezel>
77            <bezel name="led24" element="led"><bounds x="599" y="660" width="40" height="40" /></bezel>
7878
79                <!-- Top 7seg display modules -->
79            <!-- Top 7seg display modules -->
8080
81                <bezel name="digit23" element="digit">
82                        <bounds left="200" top="45" right="234" bottom="84" />
83                </bezel>
84                <bezel name="digit22" element="digit">
85                        <bounds left="244" top="45" right="278" bottom="84" />
86                </bezel>
87                <bezel name="digit21" element="digit">
88                        <bounds left="288" top="45" right="322" bottom="84" />
89                </bezel>
90                <bezel name="digit20" element="digit">
91                        <bounds left="332" top="45" right="366" bottom="84" />
92                </bezel>
81            <bezel name="digit23" element="digit">
82                  <bounds left="200" top="45" right="234" bottom="84" />
83            </bezel>
84            <bezel name="digit22" element="digit">
85                  <bounds left="244" top="45" right="278" bottom="84" />
86            </bezel>
87            <bezel name="digit21" element="digit">
88                  <bounds left="288" top="45" right="322" bottom="84" />
89            </bezel>
90            <bezel name="digit20" element="digit">
91                  <bounds left="332" top="45" right="366" bottom="84" />
92            </bezel>
9393
9494
95                <bezel name="digit19" element="digit">
96                        <bounds left="432" top="45" right="466" bottom="84" />
97                </bezel>
98                <bezel name="digit18" element="digit">
99                        <bounds left="476" top="45" right="510" bottom="84" />
100                </bezel>
101                <bezel name="digit17" element="digit">
102                        <bounds left="520" top="45" right="554" bottom="84" />
103                </bezel>
104                <bezel name="digit16" element="digit">
105                        <bounds left="564" top="45" right="598" bottom="84" />
106                </bezel>
95            <bezel name="digit19" element="digit">
96                  <bounds left="432" top="45" right="466" bottom="84" />
97            </bezel>
98            <bezel name="digit18" element="digit">
99                  <bounds left="476" top="45" right="510" bottom="84" />
100            </bezel>
101            <bezel name="digit17" element="digit">
102                  <bounds left="520" top="45" right="554" bottom="84" />
103            </bezel>
104            <bezel name="digit16" element="digit">
105                  <bounds left="564" top="45" right="598" bottom="84" />
106            </bezel>
107107
108108
109109
110                <!-- Middle 7seg display module -->
110            <!-- Middle 7seg display module -->
111111
112                <bezel name="digit25" element="digit">
113                        <bounds left="355" top="421" right="389" bottom="460" />
114                </bezel>
115                <bezel name="digit24" element="digit">
116                        <bounds left="399" top="421" right="433" bottom="460" />
117                </bezel>
112            <bezel name="digit25" element="digit">
113                  <bounds left="355" top="421" right="389" bottom="460" />
114            </bezel>
115            <bezel name="digit24" element="digit">
116                  <bounds left="399" top="421" right="433" bottom="460" />
117            </bezel>
118118
119119
120120
121                <!-- Bottom 7seg display modules -->
121            <!-- Bottom 7seg display modules -->
122122
123123      <bezel name="digit15" element="digit">
124124         <bounds left="10" top="721" right="44" bottom="760" />
trunk/src/mame/machine/arkanoid.cpp
r253023r253024
6868WRITE8_MEMBER(arkanoid_state::arkanoid_68705_tcr_w)
6969{
7070/*
71   logerror("arkanoid_68705 TCR written with %02X\n", data);
72   if (data&0x80) logerror("  TIR=1, Timer Interrupt state is set\n"); else logerror("  TIR=0; Timer Interrupt state is cleared\n");
73   if (data&0x40) logerror("  TIM=1, Timer Interrupt is now masked\n"); else logerror("  TIM=0, Timer Interrupt is now unmasked\n");
74   if (data&0x20) logerror("  TIN=1, Timer Clock source is set to external\n"); else logerror("  TIN=0, Timer Clock source is set to internal\n");
75   if (data&0x10) logerror("  TIE=1, Timer External pin is enabled\n"); else logerror("  TIE=0, Timer External pin is disabled\n");
76   if (data&0x08) logerror("  PSC=1, Prescaler counter cleared\n"); else logerror("  PSC=0, Prescaler counter left alone\n");
77   logerror("  Prescaler: %d\n", (1<<(data&0x7)));
71    logerror("arkanoid_68705 TCR written with %02X\n", data);
72    if (data&0x80) logerror("  TIR=1, Timer Interrupt state is set\n"); else logerror("  TIR=0; Timer Interrupt state is cleared\n");
73    if (data&0x40) logerror("  TIM=1, Timer Interrupt is now masked\n"); else logerror("  TIM=0, Timer Interrupt is now unmasked\n");
74    if (data&0x20) logerror("  TIN=1, Timer Clock source is set to external\n"); else logerror("  TIN=0, Timer Clock source is set to internal\n");
75    if (data&0x10) logerror("  TIE=1, Timer External pin is enabled\n"); else logerror("  TIE=0, Timer External pin is disabled\n");
76    if (data&0x08) logerror("  PSC=1, Prescaler counter cleared\n"); else logerror("  PSC=0, Prescaler counter left alone\n");
77    logerror("  Prescaler: %d\n", (1<<(data&0x7)));
7878*/
7979   // if timer was enabled but now isn't, shut it off.
8080   // below is a hack assuming the TIMER pin isn't going anywhere except tied to +5v, so basically TIN is acting as an active-low timer enable, and TIE is ignored even in the case where TIE=1, the timer will end up being 5v ANDED against the internal timer clock which == the internal timer clock.
r253023r253024
9595   // if int state is set, and TIM is unmasked, assert an interrupt. otherwise clear it.
9696   if ((m_tcr&0xC0) == 0x80)
9797      m_mcu->set_input_line(M68705_INT_TIMER, ASSERT_LINE);
98   else
98   else
9999      m_mcu->set_input_line(M68705_INT_TIMER, CLEAR_LINE);
100100
101101}
r253023r253024
118118   if (m_tdr == 0x00) m_tcr |= 0x80; // if we overflowed, set the int bit
119119   if ((m_tcr&0xC0) == 0x80)
120120      m_mcu->set_input_line(M68705_INT_TIMER, ASSERT_LINE);
121   else
121   else
122122      m_mcu->set_input_line(M68705_INT_TIMER, CLEAR_LINE);
123123   timer_set(attotime::from_hz(((XTAL_12MHz/4)/4)/(1<<(m_tcr&0x7))), TIMER_68705_PRESCALER_EXPIRED);
124124}
r253023r253024
178178   {
179179      UINT8 changed_m_port_c_out = (m_port_c_out^(m_port_c_internal|(~(data|0xF0))));
180180      m_port_c_out = (m_port_c_internal|(~(data|0xF0)));
181   
181
182182      /* bits 0 and 1 are inputs, should never be set as outputs here. if they are, ignore them. */
183183      /* bit 2 is an output, to clear latch 1(m_z80HasWritten) on rising edge, and enable the z80->68705 communication latch on level low */
184184      // if 0x04 rising edge, clear m_z80HasWritten/latch 1 (and clear the irq line)
r253023r253024
187187         m_z80HasWritten = 0;
188188         m_mcu->set_input_line(M68705_IRQ_LINE, CLEAR_LINE);
189189      }
190   
190
191191      // if 0x04 low, enable the m_port_a_in latch, otherwise set the latch value to 0xFF
192192      if (~m_port_c_out&0x04)
193193         m_port_a_in = m_fromz80;
194194      else
195195         m_port_a_in = 0xFF;
196   
196
197197      /* bit 3 is an output, to set latch 2(m_68705HasWritten) and latch the port_a value into the 68705->z80 latch, on falling edge or low level */
198198      // if 0x08 low, set m_68705HasWritten/latch 2
199199      if (~m_port_c_out&0x08)
trunk/src/mame/machine/gaelco2.cpp
r253023r253024
289289
290290READ16_MEMBER(gaelco2_state::snowboar_protection_r)
291291{
292
293292   chd_file * table = machine().rom_load().get_disk_handle(":decrypt");
294293   UINT8 temp[1024];
295294   table->read_hunk(snowboard_latch>>9, &temp[0]);
trunk/src/mame/machine/meters.cpp
r253023r253024
4141      m_meter_info[i].on        = 0;
4242      m_meter_info[i].meter_timer = timer_alloc(i);
4343      m_meter_info[i].meter_timer->reset();
44     
44
4545      //save_item(NAME(m_meter_info[i].reacttime), i); //enable if void ReactTime(int id, INT32 cycles) gets used
4646      save_item(NAME(m_meter_info[i].state), i);
4747      save_item(NAME(m_meter_info[i].count), i);
r253023r253024
6565{
6666   if (id >= m_number_mtr)
6767         assert_always(FALSE, "Unknown id in meters_device::device_timer");
68   
68
6969   m_meter_info[param].count++;
7070}
7171
trunk/src/mame/machine/meters.h
r253023r253024
1818
1919
2020#define MCFG_METERS_NUMBER(_number) \
21   meters_device::static_set_number_meters(*device, _number); \
22
21   meters_device::static_set_number_meters(*device, _number);
2322#define MAXMECHMETERS 8
2423
2524#define METERREACTTIME 0.025 // number of seconds meter has to be active to tick
r253023r253024
5655      bool state;     // state 0/1
5756      emu_timer *meter_timer;
5857   };
59   
58
6059   meter_info m_meter_info[MAXMECHMETERS];
6160
6261   int m_number_mtr;
trunk/src/mame/machine/xbox.cpp
r253023r253024
15211521         superiost.configuration_mode = true;
15221522      return;
15231523   }
1524   if ((offset == 0) && (data == 0xaa))
1524   if ((offset == 0) && (data == 0xaa))
15251525   {
15261526      // config port 0x2e
15271527      superiost.configuration_mode = false;
r253023r253024
15431543      {
15441544         superiost.registers[superiost.selected][superiost.index] = data;
15451545         //if ((superiost.selected == 4) && (superiost.index == 0x30) && (data != 0))
1546         //   ; // add handlers 0x3f8- +7
1546         //  ; // add handlers 0x3f8- +7
15471547      }
15481548   }
15491549}
trunk/src/mame/mess.lst
r253023r253024
120120svmu     // 1998 Sega Visual Memory Unit
121121
122122// Sequential Circuits
123prpht600   // 1983 Sequential Circuits
123prpht600    // 1983 Sequential Circuits
124124
125125// Sony
126126psj    // 1994 Sony PlayStation (Japan)
trunk/src/mame/video/40love.cpp
r253023r253024
164164
165165   if(data & 0xd2)
166166      popmessage("pixram sel = %02x, contact MAMEdev",data);
167   
167
168168   m_pixram_sel = (data & 0x04) >> 2;
169169   m_screen_disable = bool(data & 0x20); // Undoukai
170   
170
171171   if(cur_col_bank != m_color_bank)
172172   {
173173      m_color_bank = cur_col_bank;
174174      redraw_pixels();
175175   }
176   
176
177177   if (m_flipscreen != f)
178178   {
179179      m_flipscreen = f;
r253023r253024
372372      bitmap.fill(m_palette->black_pen(), cliprect);
373373      return 0;
374374   }
375   
375
376376   draw_pixram(bitmap, cliprect);
377377
378378   m_bg_tilemap->set_scrolldy(- m_video_ctrl[1] + 1, - m_video_ctrl[1] - 1 );
trunk/src/mame/video/battlex.cpp
r253023r253024
9696      m_bg_tilemap->set_scrollx(0, m_scroll_lsb | (m_scroll_msb << 8));
9797   else
9898      m_bg_tilemap->set_scrollx(0, m_scroll_lsb | m_scroll_msb);
99     
99
100100   m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
101101   draw_sprites(bitmap, cliprect);
102102
trunk/src/mame/video/chihiro.cpp
r253023r253024
23182318         };
23192319         /*
23202320         for (int i = 0; i < 4; i++) {
2321            v[i] *= matrix.scale[i];
2321             v[i] *= matrix.scale[i];
23222322         }
23232323         for (int i = 0; i < 4; i++) {
2324            v[i] += matrix.translate[i];
2324             v[i] += matrix.translate[i];
23252325         }
23262326         */
23272327         destination[m].x = v[0] / v[3]; // source[m].attribute[0].fv[0];
trunk/src/mame/video/m107.cpp
r253023r253024
162162   UINT16 *spriteram = m_buffered_spriteram.get();
163163   int offs;
164164   UINT8 *rom = m_user1_ptr;
165   
165
166166   for (offs = 0;offs < 0x800;offs += 4)
167167   {
168168      int x,y,sprite,colour,fx,fy,y_multi,i,s_ptr,pri_mask;
trunk/src/mame/video/m58.cpp
r253023r253024
245245      {
246246         sy2 = sy1 + 0x10;
247247      }
248     
248
249249      m_gfxdecode->gfx(1)->transmask(bitmap, cliprect,
250250         code1 + 256 * bank, color,
251251         flipx, flipy, sx, visarea.min_y + sy1,
trunk/src/mame/video/n64.cpp
r253023r253024
22992299   // ewdata[29] = 0;                                             w frac
23002300   ewdata[30] = ((dsdx & 0x1f) << 11) << 16;                   // dsdx frac, dtdx frac
23012301   // ewdata[31] = 0;                                             dwdx frac
2302   ewdata[32] = (dtdy >> 5) & 0xffff;                     // dsde, dtde
2303   // ewdata[33] = 0;                                    dwde
2304   ewdata[34] = (dtdy >> 5) & 0xffff;                     // dsdy, dtdy
2305   // ewdata[35] = 0;                                    dwdy
2306   ewdata[36] = (dtdy & 0x1f) << 11;                     // dsde frac, dtde frac
2307   // ewdata[37] = 0;                                    dwde frac
2308   ewdata[38] = (dtdy & 0x1f) << 11;                     // dsdy frac, dtdy frac
2309   // ewdata[39] = 0;                                 // dwdy frac
2310   // ewdata[40-43] = 0;                              // depth
2302   ewdata[32] = (dtdy >> 5) & 0xffff;                          // dsde, dtde
2303   // ewdata[33] = 0;                                             dwde
2304   ewdata[34] = (dtdy >> 5) & 0xffff;                          // dsdy, dtdy
2305   // ewdata[35] = 0;                                             dwdy
2306   ewdata[36] = (dtdy & 0x1f) << 11;                           // dsde frac, dtde frac
2307   // ewdata[37] = 0;                                             dwde frac
2308   ewdata[38] = (dtdy & 0x1f) << 11;                           // dsdy frac, dtdy frac
2309   // ewdata[39] = 0;                                          // dwdy frac
2310   // ewdata[40-43] = 0;                                       // depth
23112311
23122312   draw_triangle(true, true, false, true);
23132313}
r253023r253024
23392339   const INT32 xhint = (xh >> 2) & 0x3ff;
23402340
23412341   UINT32* ewdata = m_temp_rect_data;
2342   ewdata[0] = (0x25 << 24) | ((0x80 | tilenum) << 16) | yl;   // command, flipped, tile, yl
2343   ewdata[1] = (yl << 16) | yh;                        // ym, yh
2344   ewdata[2] = (xlint << 16) | ((xl & 3) << 14);            // xl, xl frac
2345   // ewdata[3] = 0;                                    dxldy, dxldy frac
2346   ewdata[4] = (xhint << 16) | ((xh & 3) << 14);            // xh, xh frac
2347   // ewdata[5] = 0;                                    dxhdy, dxhdy frac
2348   ewdata[6] = (xlint << 16) | ((xl & 3) << 14);            // xm, xm frac
2349   // ewdata[7] = 0;                                    dxmdy, dxmdy frac
2350   memset(&ewdata[8], 0, 16 * sizeof(UINT32));               // shade
2351   ewdata[24] = (s << 16) | t;                           // s, t
2352   // ewdata[25] = 0;                                 // w
2353   ewdata[26] = (dtdy >> 5) & 0xffff;                     // dsdx, dtdx
2354   // ewdata[27] = 0;                                    dwdx
2355   // ewdata[28] = 0;                                    s frac, t frac
2356   // ewdata[29] = 0;                                    w frac
2357   ewdata[30] = ((dtdy & 0x1f) << 11);                     // dsdx frac, dtdx frac
2358   // ewdata[31] = 0;                                    dwdx frac
2359   ewdata[32] = (dsdx >> 5) << 16;                        // dsde, dtde
2360   // ewdata[33] = 0;                                    dwde
2361   ewdata[34] = (dsdx >> 5) << 16;                        // dsdy, dtdy
2362   // ewdata[35] = 0;                                    dwdy
2363   ewdata[36] = (dsdx & 0x1f) << 27;                     // dsde frac, dtde frac
2364   // ewdata[37] = 0;                                    dwde frac
2365   ewdata[38] = (dsdx & 0x1f) << 27;                     // dsdy frac, dtdy frac
2366   // ewdata[39] = 0;                                 // dwdy frac
2367   // ewdata[40-43] = 0;                              // depth
2342   ewdata[0] = (0x25 << 24) | ((0x80 | tilenum) << 16) | yl;   // command, flipped, tile, yl
2343   ewdata[1] = (yl << 16) | yh;                                // ym, yh
2344   ewdata[2] = (xlint << 16) | ((xl & 3) << 14);               // xl, xl frac
2345   // ewdata[3] = 0;                                              dxldy, dxldy frac
2346   ewdata[4] = (xhint << 16) | ((xh & 3) << 14);               // xh, xh frac
2347   // ewdata[5] = 0;                                              dxhdy, dxhdy frac
2348   ewdata[6] = (xlint << 16) | ((xl & 3) << 14);               // xm, xm frac
2349   // ewdata[7] = 0;                                              dxmdy, dxmdy frac
2350   memset(&ewdata[8], 0, 16 * sizeof(UINT32));                 // shade
2351   ewdata[24] = (s << 16) | t;                                 // s, t
2352   // ewdata[25] = 0;                                          // w
2353   ewdata[26] = (dtdy >> 5) & 0xffff;                          // dsdx, dtdx
2354   // ewdata[27] = 0;                                             dwdx
2355   // ewdata[28] = 0;                                             s frac, t frac
2356   // ewdata[29] = 0;                                             w frac
2357   ewdata[30] = ((dtdy & 0x1f) << 11);                         // dsdx frac, dtdx frac
2358   // ewdata[31] = 0;                                             dwdx frac
2359   ewdata[32] = (dsdx >> 5) << 16;                             // dsde, dtde
2360   // ewdata[33] = 0;                                             dwde
2361   ewdata[34] = (dsdx >> 5) << 16;                             // dsdy, dtdy
2362   // ewdata[35] = 0;                                             dwdy
2363   ewdata[36] = (dsdx & 0x1f) << 27;                           // dsde frac, dtde frac
2364   // ewdata[37] = 0;                                             dwde frac
2365   ewdata[38] = (dsdx & 0x1f) << 27;                           // dsdy frac, dtdy frac
2366   // ewdata[39] = 0;                                          // dwdy frac
2367   // ewdata[40-43] = 0;                                       // depth
23682368
23692369   draw_triangle(true, true, false, true);
23702370}
trunk/src/mame/video/n64.h
r253023r253024
331331   compute_cvg_t   m_compute_cvg[2];
332332
333333   running_machine* m_machine;
334   UINT32*         m_rdram;
335   UINT32*         m_dmem;
334   UINT32*         m_rdram;
335   UINT32*         m_dmem;
336336
337337   combine_modes_t m_combine;
338338   bool            m_pending_mode_block;
trunk/src/osd/modules/debugger/debugint.cpp
r253023r253024
14951495         debug_cpu_get_visible_cpu(machine)->debug()->go();
14961496      }
14971497   }
1498   
1498
14991499   if(machine.input().code_pressed_once(KEYCODE_F5))
15001500      debug_cpu_get_visible_cpu(machine)->debug()->go();
15011501   if(machine.input().code_pressed_once(KEYCODE_F6))
r253023r253024
15561556
15571557         set_focus_view(ndv);
15581558      }
1559   }   
1559   }
15601560   if(machine.input().code_pressed_once(KEYCODE_L))
15611561   {
15621562      if(machine.input().code_pressed(KEYCODE_LCONTROL))
r253023r253024
16191619      }
16201620   }
16211621
1622   
1622
16231623   // pass keypresses to debug view with focus
16241624   if(machine.input().code_pressed_once(KEYCODE_UP))
16251625      focus_view->view->process_char(DCH_UP);
trunk/src/osd/modules/render/d3d/d3dhlsl.cpp
r253023r253024
27792779
27802780// static INT32 slider_ntsc_phase_count(running_machine &machine, void *arg, std::string *str, INT32 newval)
27812781// {
2782//    hlsl_options *options = (hlsl_options*)arg;
2783//    if (newval != SLIDER_NOCHANGE)
2784//    {
2785//       options->yiq_phase_count = newval;
2786//    }
2787//    if (str != NULL)
2788//    {
2789//       strprintf(*str, "%d", options->yiq_phase_count);
2790//    }
2791//    options->params_dirty = true;
2782//  hlsl_options *options = (hlsl_options*)arg;
2783//  if (newval != SLIDER_NOCHANGE)
2784//  {
2785//      options->yiq_phase_count = newval;
2786//  }
2787//  if (str != NULL)
2788//  {
2789//      strprintf(*str, "%d", options->yiq_phase_count);
2790//  }
2791//  options->params_dirty = true;
27922792
2793//    return options->yiq_phase_count;
2793// return options->yiq_phase_count;
27942794// }
27952795
27962796static INT32 slider_ntsc_jitter(running_machine &machine, void *arg, std::string *str, INT32 newval)
r253023r253024
30913091         if (shadersys->curr_render_target != NULL)
30923092         {
30933093            float targetdims[2] = {
3094               static_cast<float>(shadersys->curr_render_target->target_width),
3094               static_cast<float>(shadersys->curr_render_target->target_width),
30953095               static_cast<float>(shadersys->curr_render_target->target_height) };
30963096            m_shader->set_vector("TargetDims", 2, targetdims);
30973097         }
trunk/src/osd/modules/sound/xaudio2_sound.cpp
r253023r253024
5151
5252// Check HRESULT result and log if error, then take an optional action on failure
5353#define HR_LOG( CALL, LOGFN, ONFAIL ) do { \
54    result = CALL; \
55    if (FAILED(result)) { \
56        LOGFN(#CALL " failed with error 0x%X\n", (unsigned int)result); \
57        ONFAIL; } \
54   result = CALL; \
55   if (FAILED(result)) { \
56      LOGFN(#CALL " failed with error 0x%X\n", (unsigned int)result); \
57      ONFAIL; } \
5858} while (0)
5959
6060// Variant of HR_LOG to log using osd_printf_error
r253023r253024
9191// A stucture to hold a pointer and the count of bytes of the data it points to
9292struct xaudio2_buffer
9393{
94    std::unique_ptr<BYTE[]> AudioData;
95    DWORD                   AudioSize;
94   std::unique_ptr<BYTE[]> AudioData;
95   DWORD                   AudioSize;
9696};
9797
9898// Custom deleter with overloads to free smart pointer types used in the implementations
9999struct xaudio2_custom_deleter
100100{
101101public:
102    void operator()(IXAudio2* obj) const
103    {
104        if (obj != nullptr)
105        {
106            obj->Release();
107        }
108    }
102   void operator()(IXAudio2* obj) const
103   {
104      if (obj != nullptr)
105      {
106         obj->Release();
107      }
108   }
109109
110    void operator()(IXAudio2MasteringVoice* obj) const
111    {
112        if (obj != nullptr)
113        {
114            obj->DestroyVoice();
115        }
116    }
110   void operator()(IXAudio2MasteringVoice* obj) const
111   {
112      if (obj != nullptr)
113      {
114         obj->DestroyVoice();
115      }
116   }
117117
118    void operator()(IXAudio2SourceVoice* obj) const
119    {
120        if (obj != nullptr)
121        {
122            obj->Stop(0);
123            obj->FlushSourceBuffers();
124            obj->DestroyVoice();
125        }
126    }
118   void operator()(IXAudio2SourceVoice* obj) const
119   {
120      if (obj != nullptr)
121      {
122         obj->Stop(0);
123         obj->FlushSourceBuffers();
124         obj->DestroyVoice();
125      }
126   }
127127
128    void operator()(osd_lock* obj) const
129    {
130        if (obj != nullptr)
131        {
132            osd_lock_free(obj);
133        }
134    }
128   void operator()(osd_lock* obj) const
129   {
130      if (obj != nullptr)
131      {
132         osd_lock_free(obj);
133      }
134   }
135135};
136136
137137// Typedefs for smart pointers used with customer deleters
r253023r253024
151151class osd_scoped_lock
152152{
153153private:
154    osd_lock *  m_lock;
154   osd_lock *  m_lock;
155155public:
156    osd_scoped_lock(osd_lock* lock)
157    {
158        m_lock = lock;
159        osd_lock_acquire(m_lock);
160    }
156   osd_scoped_lock(osd_lock* lock)
157   {
158      m_lock = lock;
159      osd_lock_acquire(m_lock);
160   }
161161
162    ~osd_scoped_lock()
163    {
164        if (m_lock != nullptr)
165        {
166            osd_lock_release(m_lock);
167        }
168    }
162   ~osd_scoped_lock()
163   {
164      if (m_lock != nullptr)
165      {
166         osd_lock_release(m_lock);
167      }
168   }
169169};
170170
171171// Provides a pool of buffers
172172class bufferpool
173173{
174174private:
175    int m_initial;
176    int m_buffersize;
177    std::queue<std::unique_ptr<BYTE[]>> m_queue;
175   int m_initial;
176   int m_buffersize;
177   std::queue<std::unique_ptr<BYTE[]>> m_queue;
178178
179179public:
180    // constructor
181    bufferpool(int capacity, int bufferSize) :
182        m_initial(capacity),
183        m_buffersize(bufferSize)
184    {
185        for (int i = 0; i < m_initial; i++)
186        {
187            auto newBuffer = std::make_unique<BYTE[]>(m_buffersize);
188            memset(newBuffer.get(), 0, m_buffersize);
189            m_queue.push(std::move(newBuffer));
190        }
191    }
180   // constructor
181   bufferpool(int capacity, int bufferSize) :
182      m_initial(capacity),
183      m_buffersize(bufferSize)
184   {
185      for (int i = 0; i < m_initial; i++)
186      {
187         auto newBuffer = std::make_unique<BYTE[]>(m_buffersize);
188         memset(newBuffer.get(), 0, m_buffersize);
189         m_queue.push(std::move(newBuffer));
190      }
191   }
192192
193    // get next buffer element from the pool
194    BYTE* next()
195    {
196        BYTE* next_buffer;
197        if (!m_queue.empty())
198        {
199            next_buffer = m_queue.front().release();
200            m_queue.pop();
201        }
202        else
203        {
204            next_buffer = new BYTE[m_buffersize];
205            memset(next_buffer, 0, m_buffersize);
206        }
193   // get next buffer element from the pool
194   BYTE* next()
195   {
196      BYTE* next_buffer;
197      if (!m_queue.empty())
198      {
199         next_buffer = m_queue.front().release();
200         m_queue.pop();
201      }
202      else
203      {
204         next_buffer = new BYTE[m_buffersize];
205         memset(next_buffer, 0, m_buffersize);
206      }
207207
208        return next_buffer;
209    }
208      return next_buffer;
209   }
210210
211    // release element, make it available back in the pool
212    void return_to_pool(BYTE* buffer)
213    {
214        auto returned_buf = std::unique_ptr<BYTE[]>(buffer);
215        memset(returned_buf.get(), 0, m_buffersize);
216        m_queue.push(std::move(returned_buf));
217    }
211   // release element, make it available back in the pool
212   void return_to_pool(BYTE* buffer)
213   {
214      auto returned_buf = std::unique_ptr<BYTE[]>(buffer);
215      memset(returned_buf.get(), 0, m_buffersize);
216      m_queue.push(std::move(returned_buf));
217   }
218218};
219219
220220//============================================================
r253023r253024
225225class sound_xaudio2 : public osd_module, public sound_module, public IXAudio2VoiceCallback
226226{
227227private:
228    xaudio2_ptr                                 m_xAudio2;
229    mastering_voice_ptr                         m_masterVoice;
230    src_voice_ptr                               m_sourceVoice;
231    DWORD                                       m_sample_bytes;
232    std::unique_ptr<BYTE[]>                     m_buffer;
233    DWORD                                       m_buffer_size;
234    DWORD                                       m_buffer_count;
235    DWORD                                       m_writepos;
236    osd_lock_ptr                                m_buffer_lock;
237    HANDLE                                      m_hEventBufferCompleted;
238    HANDLE                                      m_hEventDataAvailable;
239    HANDLE                                      m_hEventExiting;
240    std::thread                                 m_audioThread;
241    std::queue<xaudio2_buffer>                  m_queue;
242    std::unique_ptr<bufferpool>                 m_buffer_pool;
243    HMODULE                                     m_xaudio2_module;
244    PFN_XAUDIO2CREATE                           m_pfnxaudio2create;
245    UINT32                                      m_overflows;
246    UINT32                                      m_underflows;
247    BOOL                                        m_in_underflow;
228   xaudio2_ptr                                 m_xAudio2;
229   mastering_voice_ptr                         m_masterVoice;
230   src_voice_ptr                               m_sourceVoice;
231   DWORD                                       m_sample_bytes;
232   std::unique_ptr<BYTE[]>                     m_buffer;
233   DWORD                                       m_buffer_size;
234   DWORD                                       m_buffer_count;
235   DWORD                                       m_writepos;
236   osd_lock_ptr                                m_buffer_lock;
237   HANDLE                                      m_hEventBufferCompleted;
238   HANDLE                                      m_hEventDataAvailable;
239   HANDLE                                      m_hEventExiting;
240   std::thread                                 m_audioThread;
241   std::queue<xaudio2_buffer>                  m_queue;
242   std::unique_ptr<bufferpool>                 m_buffer_pool;
243   HMODULE                                     m_xaudio2_module;
244   PFN_XAUDIO2CREATE                           m_pfnxaudio2create;
245   UINT32                                      m_overflows;
246   UINT32                                      m_underflows;
247   BOOL                                        m_in_underflow;
248248
249249public:
250    sound_xaudio2() :
251        osd_module(OSD_SOUND_PROVIDER, "xaudio2"),
252        sound_module(),
253        m_xAudio2(nullptr),
254        m_masterVoice(nullptr),
255        m_sourceVoice(nullptr),
256        m_sample_bytes(0),
257        m_buffer(nullptr),
258        m_buffer_size(0),
259        m_buffer_count(0),
260        m_writepos(0),
261        m_buffer_lock(osd_lock_alloc()),
262        m_hEventBufferCompleted(NULL),
263        m_hEventDataAvailable(NULL),
264        m_hEventExiting(NULL),
265        m_buffer_pool(nullptr),
266        m_xaudio2_module(NULL),
267        m_pfnxaudio2create(nullptr),
268        m_overflows(0),
269        m_underflows(0),
270        m_in_underflow(FALSE)
271    {
272    }
250   sound_xaudio2() :
251      osd_module(OSD_SOUND_PROVIDER, "xaudio2"),
252      sound_module(),
253      m_xAudio2(nullptr),
254      m_masterVoice(nullptr),
255      m_sourceVoice(nullptr),
256      m_sample_bytes(0),
257      m_buffer(nullptr),
258      m_buffer_size(0),
259      m_buffer_count(0),
260      m_writepos(0),
261      m_buffer_lock(osd_lock_alloc()),
262      m_hEventBufferCompleted(NULL),
263      m_hEventDataAvailable(NULL),
264      m_hEventExiting(NULL),
265      m_buffer_pool(nullptr),
266      m_xaudio2_module(NULL),
267      m_pfnxaudio2create(nullptr),
268      m_overflows(0),
269      m_underflows(0),
270      m_in_underflow(FALSE)
271   {
272   }
273273
274    virtual int init(osd_options const &options) override;
275    virtual void exit() override;
274   virtual int init(osd_options const &options) override;
275   virtual void exit() override;
276276
277    // sound_module
278    virtual void update_audio_stream(bool is_throttled, INT16 const *buffer, int samples_this_frame) override;
279    virtual void set_mastervolume(int attenuation) override;
277   // sound_module
278   virtual void update_audio_stream(bool is_throttled, INT16 const *buffer, int samples_this_frame) override;
279   virtual void set_mastervolume(int attenuation) override;
280280
281    // Xaudio callbacks
282    void OnVoiceProcessingPassStart(UINT32 bytes_required) override;
283    void OnVoiceProcessingPassEnd() override {}
284    void OnStreamEnd() override {}
285    void OnBufferStart(void* pBufferContext) override {}
286    void OnLoopEnd(void* pBufferContext) override {}
287    void OnVoiceError(void* pBufferContext, HRESULT error) override {}
288    void OnBufferEnd(void *pBufferContext) override;
289   
281   // Xaudio callbacks
282   void OnVoiceProcessingPassStart(UINT32 bytes_required) override;
283   void OnVoiceProcessingPassEnd() override {}
284   void OnStreamEnd() override {}
285   void OnBufferStart(void* pBufferContext) override {}
286   void OnLoopEnd(void* pBufferContext) override {}
287   void OnVoiceError(void* pBufferContext, HRESULT error) override {}
288   void OnBufferEnd(void *pBufferContext) override;
289
290290private:
291    void create_buffers(const WAVEFORMATEX &format);
292    HRESULT create_voices(const WAVEFORMATEX &format);
293    void process_audio();
294    void submit_buffer(std::unique_ptr<BYTE[]> audioData, DWORD audioLength);
295    void submit_needed();
296    HRESULT xaudio2_create(IXAudio2 ** xaudio2_interface);
297    void roll_buffer();
298    BOOL submit_next_queued();
291   void create_buffers(const WAVEFORMATEX &format);
292   HRESULT create_voices(const WAVEFORMATEX &format);
293   void process_audio();
294   void submit_buffer(std::unique_ptr<BYTE[]> audioData, DWORD audioLength);
295   void submit_needed();
296   HRESULT xaudio2_create(IXAudio2 ** xaudio2_interface);
297   void roll_buffer();
298   BOOL submit_next_queued();
299299};
300300
301301//============================================================
r253023r253024
304304
305305int sound_xaudio2::init(osd_options const &options)
306306{
307    HRESULT result = S_OK;
307   HRESULT result = S_OK;
308308
309    // Create the IXAudio2 object
310    IXAudio2 *temp_xaudio2 = nullptr;
311    HR_RET1(xaudio2_create(&temp_xaudio2));
312    m_xAudio2 = xaudio2_ptr(temp_xaudio2);
309   // Create the IXAudio2 object
310   IXAudio2 *temp_xaudio2 = nullptr;
311   HR_RET1(xaudio2_create(&temp_xaudio2));
312   m_xAudio2 = xaudio2_ptr(temp_xaudio2);
313313
314    // make a format description for what we want
315    WAVEFORMATEX format = { 0 };
316    format.wBitsPerSample = 16;
317    format.wFormatTag = WAVE_FORMAT_PCM;
318    format.nChannels = 2;
319    format.nSamplesPerSec = sample_rate();
320    format.nBlockAlign = format.wBitsPerSample * format.nChannels / 8;
321    format.nAvgBytesPerSec = format.nSamplesPerSec * format.nBlockAlign;
314   // make a format description for what we want
315   WAVEFORMATEX format = { 0 };
316   format.wBitsPerSample = 16;
317   format.wFormatTag = WAVE_FORMAT_PCM;
318   format.nChannels = 2;
319   format.nSamplesPerSec = sample_rate();
320   format.nBlockAlign = format.wBitsPerSample * format.nChannels / 8;
321   format.nAvgBytesPerSec = format.nSamplesPerSec * format.nBlockAlign;
322322
323    m_sample_bytes = format.nBlockAlign;
323   m_sample_bytes = format.nBlockAlign;
324324
325325#if defined(_DEBUG)
326    XAUDIO2_DEBUG_CONFIGURATION debugConfig = { 0 };
327    debugConfig.TraceMask = XAUDIO2_LOG_WARNINGS | XAUDIO2_LOG_TIMING | XAUDIO2_LOG_STREAMING;
328    debugConfig.LogFunctionName = TRUE;
329    m_xAudio2->SetDebugConfiguration(&debugConfig);
326   XAUDIO2_DEBUG_CONFIGURATION debugConfig = { 0 };
327   debugConfig.TraceMask = XAUDIO2_LOG_WARNINGS | XAUDIO2_LOG_TIMING | XAUDIO2_LOG_STREAMING;
328   debugConfig.LogFunctionName = TRUE;
329   m_xAudio2->SetDebugConfiguration(&debugConfig);
330330#endif
331331
332    // Create the buffers
333    create_buffers(format);
332   // Create the buffers
333   create_buffers(format);
334334
335    // Initialize our events
336    m_hEventBufferCompleted = CreateEvent(NULL, FALSE, FALSE, NULL);
337    m_hEventDataAvailable = CreateEvent(NULL, FALSE, FALSE, NULL);
338    m_hEventExiting = CreateEvent(NULL, FALSE, FALSE, NULL);
335   // Initialize our events
336   m_hEventBufferCompleted = CreateEvent(NULL, FALSE, FALSE, NULL);
337   m_hEventDataAvailable = CreateEvent(NULL, FALSE, FALSE, NULL);
338   m_hEventExiting = CreateEvent(NULL, FALSE, FALSE, NULL);
339339
340    // create the voices and start them
341    HR_RET1(create_voices(format));
342    HR_RET1(m_sourceVoice->Start());
340   // create the voices and start them
341   HR_RET1(create_voices(format));
342   HR_RET1(m_sourceVoice->Start());
343343
344    // Start the thread listening
345    m_audioThread = std::thread([](sound_xaudio2* self) { self->process_audio(); }, this);
344   // Start the thread listening
345   m_audioThread = std::thread([](sound_xaudio2* self) { self->process_audio(); }, this);
346346
347    osd_printf_verbose("Sound: XAudio2 initialized\n");
347   osd_printf_verbose("Sound: XAudio2 initialized\n");
348348
349    return 0;
349   return 0;
350350}
351351
352352//============================================================
r253023r253024
355355
356356void sound_xaudio2::exit()
357357{
358    // Wait on processing thread to end
359    SetEvent(m_hEventExiting);
360    m_audioThread.join();
358   // Wait on processing thread to end
359   SetEvent(m_hEventExiting);
360   m_audioThread.join();
361361
362    CloseHandle(m_hEventBufferCompleted);
363    CloseHandle(m_hEventDataAvailable);
364    CloseHandle(m_hEventExiting);
362   CloseHandle(m_hEventBufferCompleted);
363   CloseHandle(m_hEventDataAvailable);
364   CloseHandle(m_hEventExiting);
365365
366    m_sourceVoice.reset();
367    m_masterVoice.reset();
368    m_xAudio2.reset();
369    m_buffer.reset();
370    m_buffer_pool.reset();
366   m_sourceVoice.reset();
367   m_masterVoice.reset();
368   m_xAudio2.reset();
369   m_buffer.reset();
370   m_buffer_pool.reset();
371371
372    if (m_overflows != 0 || m_underflows != 0)
373        osd_printf_verbose("Sound: overflows=%u, underflows=%u\n", m_overflows, m_underflows);
372   if (m_overflows != 0 || m_underflows != 0)
373      osd_printf_verbose("Sound: overflows=%u, underflows=%u\n", m_overflows, m_underflows);
374374
375    osd_printf_verbose("Sound: XAudio2 deinitialized\n");
375   osd_printf_verbose("Sound: XAudio2 deinitialized\n");
376376}
377377
378378//============================================================
r253023r253024
380380//============================================================
381381
382382void sound_xaudio2::update_audio_stream(
383    bool is_throttled,
384    INT16 const *buffer,
385    int samples_this_frame)
383   bool is_throttled,
384   INT16 const *buffer,
385   int samples_this_frame)
386386{
387    if ((sample_rate() == 0) || !m_buffer)
388        return;
387   if ((sample_rate() == 0) || !m_buffer)
388      return;
389389
390    UINT32 const bytes_this_frame = samples_this_frame * m_sample_bytes;
390   UINT32 const bytes_this_frame = samples_this_frame * m_sample_bytes;
391391
392    osd_scoped_lock scope_lock(m_buffer_lock.get());
392   osd_scoped_lock scope_lock(m_buffer_lock.get());
393393
394    UINT32 bytes_left = bytes_this_frame;
394   UINT32 bytes_left = bytes_this_frame;
395395
396    while (bytes_left > 0)
397    {
398        UINT32 chunk = MIN(m_buffer_size, bytes_left);
396   while (bytes_left > 0)
397   {
398      UINT32 chunk = MIN(m_buffer_size, bytes_left);
399399
400        // Roll the buffer if needed
401        if (m_writepos + chunk >= m_buffer_size)
402        {
403            roll_buffer();
404        }
400      // Roll the buffer if needed
401      if (m_writepos + chunk >= m_buffer_size)
402      {
403         roll_buffer();
404      }
405405
406        // Copy in the data
407        memcpy(m_buffer.get() + m_writepos, buffer, chunk);
408        m_writepos += chunk;
409        bytes_left -= chunk;
410    }
406      // Copy in the data
407      memcpy(m_buffer.get() + m_writepos, buffer, chunk);
408      m_writepos += chunk;
409      bytes_left -= chunk;
410   }
411411
412    // Signal data available
413    SetEvent(m_hEventDataAvailable);
412   // Signal data available
413   SetEvent(m_hEventDataAvailable);
414414}
415415
416416//============================================================
r253023r253024
419419
420420void sound_xaudio2::set_mastervolume(int attenuation)
421421{
422    assert(m_sourceVoice);
423   
424    HRESULT result;
425   
426    // clamp the attenuation to 0-32 range
427    attenuation = MAX(MIN(attenuation, 0), -32);
422   assert(m_sourceVoice);
428423
429    // Ranges from 1.0 to XAUDIO2_MAX_VOLUME_LEVEL indicate additional gain
430    // Ranges from 0 to 1.0 indicate a reduced volume level
431    // 0 indicates silence
432    // We only support a reduction from 1.0, so we generate values in the range 0.0 to 1.0
433    float scaledVolume = (32.0f + attenuation) / 32.0f;
434   
435    // set the master volume
436    HR_RETV(m_sourceVoice->SetVolume(scaledVolume));
424   HRESULT result;
425
426   // clamp the attenuation to 0-32 range
427   attenuation = MAX(MIN(attenuation, 0), -32);
428
429   // Ranges from 1.0 to XAUDIO2_MAX_VOLUME_LEVEL indicate additional gain
430   // Ranges from 0 to 1.0 indicate a reduced volume level
431   // 0 indicates silence
432   // We only support a reduction from 1.0, so we generate values in the range 0.0 to 1.0
433   float scaledVolume = (32.0f + attenuation) / 32.0f;
434
435   // set the master volume
436   HR_RETV(m_sourceVoice->SetVolume(scaledVolume));
437437}
438438
439439//============================================================
r253023r253024
443443// The XAudio2 voice callback triggered when a buffer finishes playing
444444void sound_xaudio2::OnBufferEnd(void *pBufferContext)
445445{
446    BYTE* completed_buffer = (BYTE*)pBufferContext;
447    if (completed_buffer != nullptr)
448    {
449        auto scoped_lock = osd_scoped_lock(m_buffer_lock.get());
450        m_buffer_pool->return_to_pool(completed_buffer);
451    }
446   BYTE* completed_buffer = (BYTE*)pBufferContext;
447   if (completed_buffer != nullptr)
448   {
449      auto scoped_lock = osd_scoped_lock(m_buffer_lock.get());
450      m_buffer_pool->return_to_pool(completed_buffer);
451   }
452452
453    SetEvent(m_hEventBufferCompleted);
453   SetEvent(m_hEventBufferCompleted);
454454}
455455
456456//============================================================
r253023r253024
460460// The XAudio2 voice callback triggered on every pass
461461void sound_xaudio2::OnVoiceProcessingPassStart(UINT32 bytes_required)
462462{
463    if (bytes_required == 0)
464    {
465        // Reset underflow indicator if we're caught up
466        if (m_in_underflow) m_in_underflow = FALSE;
463   if (bytes_required == 0)
464   {
465      // Reset underflow indicator if we're caught up
466      if (m_in_underflow) m_in_underflow = FALSE;
467467
468        return;
469    }
468      return;
469   }
470470
471    // Since there are bytes required, we're going to be in underflow
472    if (!m_in_underflow)
473    {
474        m_underflows++;
475        m_in_underflow = TRUE;
476    }
471   // Since there are bytes required, we're going to be in underflow
472   if (!m_in_underflow)
473   {
474      m_underflows++;
475      m_in_underflow = TRUE;
476   }
477477}
478478
479479//============================================================
r253023r253024
483483// Dynamically loads the XAudio2 DLL and calls the exported XAudio2Create()
484484HRESULT sound_xaudio2::xaudio2_create(IXAudio2 ** ppxaudio2_interface)
485485{
486    HRESULT result;
486   HRESULT result;
487487
488    if (nullptr == m_pfnxaudio2create)
489    {
490        if (nullptr == m_xaudio2_module)
491        {
492            m_xaudio2_module = LoadLibrary(XAUDIO2_DLL);
493            if (nullptr == m_xaudio2_module)
494            {
495                osd_printf_error("Failed to load module '%S', error: 0x%X\n", XAUDIO2_DLL, (unsigned int)GetLastError());
496                HR_RETHR(E_FAIL);
497            }
498        }
488   if (nullptr == m_pfnxaudio2create)
489   {
490      if (nullptr == m_xaudio2_module)
491      {
492         m_xaudio2_module = LoadLibrary(XAUDIO2_DLL);
493         if (nullptr == m_xaudio2_module)
494         {
495            osd_printf_error("Failed to load module '%S', error: 0x%X\n", XAUDIO2_DLL, (unsigned int)GetLastError());
496            HR_RETHR(E_FAIL);
497         }
498      }
499499
500        m_pfnxaudio2create = (PFN_XAUDIO2CREATE)GetProcAddress(m_xaudio2_module, "XAudio2Create");
501        if (nullptr == m_pfnxaudio2create)
502        {
503            osd_printf_error("Failed to get adddress of exported function XAudio2Create, error: 0x%X\n", (unsigned int)GetLastError());
504            HR_RETHR(E_FAIL);
505        }
506    }
500      m_pfnxaudio2create = (PFN_XAUDIO2CREATE)GetProcAddress(m_xaudio2_module, "XAudio2Create");
501      if (nullptr == m_pfnxaudio2create)
502      {
503         osd_printf_error("Failed to get adddress of exported function XAudio2Create, error: 0x%X\n", (unsigned int)GetLastError());
504         HR_RETHR(E_FAIL);
505      }
506   }
507507
508    HR_RETHR(m_pfnxaudio2create(ppxaudio2_interface, 0, XAUDIO2_DEFAULT_PROCESSOR));
508   HR_RETHR(m_pfnxaudio2create(ppxaudio2_interface, 0, XAUDIO2_DEFAULT_PROCESSOR));
509509
510    return S_OK;
510   return S_OK;
511511}
512512
513513//============================================================
r253023r253024
516516
517517void sound_xaudio2::create_buffers(const WAVEFORMATEX &format)
518518{
519    // Compute the buffer size
520    // buffer size is equal to the bytes we need to hold in memory per X tenths of a second where X is audio_latency
521    float audio_latency_in_seconds = m_audio_latency / 10.0f;
522    UINT32 format_bytes_per_second = format.nSamplesPerSec * format.nBlockAlign;
523    UINT32 total_buffer_size = format_bytes_per_second * audio_latency_in_seconds;
519   // Compute the buffer size
520   // buffer size is equal to the bytes we need to hold in memory per X tenths of a second where X is audio_latency
521   float audio_latency_in_seconds = m_audio_latency / 10.0f;
522   UINT32 format_bytes_per_second = format.nSamplesPerSec * format.nBlockAlign;
523   UINT32 total_buffer_size = format_bytes_per_second * audio_latency_in_seconds;
524524
525    // We want to be able to submit buffers every X milliseconds
526    // I want to divide these up into "packets" so figure out how many buffers we need
527    m_buffer_count = (audio_latency_in_seconds * 1000.0f) / SUBMIT_FREQUENCY_TARGET_MS;
525   // We want to be able to submit buffers every X milliseconds
526   // I want to divide these up into "packets" so figure out how many buffers we need
527   m_buffer_count = (audio_latency_in_seconds * 1000.0f) / SUBMIT_FREQUENCY_TARGET_MS;
528528
529    // Now record the size of the individual buffers
530    m_buffer_size = MAX(1024, total_buffer_size / m_buffer_count);
529   // Now record the size of the individual buffers
530   m_buffer_size = MAX(1024, total_buffer_size / m_buffer_count);
531531
532    // Make the buffer a multiple of the format size bytes (rounding up)
533    UINT32 remainder = m_buffer_size % format.nBlockAlign;
534    if (remainder != 0)
535        m_buffer_size += format.nBlockAlign - remainder;
532   // Make the buffer a multiple of the format size bytes (rounding up)
533   UINT32 remainder = m_buffer_size % format.nBlockAlign;
534   if (remainder != 0)
535      m_buffer_size += format.nBlockAlign - remainder;
536536
537    // get our initial buffer pool and our first buffer
538    m_buffer_pool = std::make_unique<bufferpool>(m_buffer_count + 1, m_buffer_size);
539    m_buffer = std::unique_ptr<BYTE[]>(m_buffer_pool->next());
537   // get our initial buffer pool and our first buffer
538   m_buffer_pool = std::make_unique<bufferpool>(m_buffer_count + 1, m_buffer_size);
539   m_buffer = std::unique_ptr<BYTE[]>(m_buffer_pool->next());
540540
541    osd_printf_verbose(
542        "Sound: XAudio2 created initial buffers. total size: %u, count %u, size each %u\n",
543        (unsigned int)total_buffer_size,
544        (unsigned int)m_buffer_count,
545        (unsigned int)m_buffer_size);
541   osd_printf_verbose(
542      "Sound: XAudio2 created initial buffers. total size: %u, count %u, size each %u\n",
543      (unsigned int)total_buffer_size,
544      (unsigned int)m_buffer_count,
545      (unsigned int)m_buffer_size);
546546
547    // reset buffer states
548    m_writepos = 0;
549    m_overflows = 0;
550    m_underflows = 0;
547   // reset buffer states
548   m_writepos = 0;
549   m_overflows = 0;
550   m_underflows = 0;
551551}
552552
553553//============================================================
r253023r253024
556556
557557HRESULT sound_xaudio2::create_voices(const WAVEFORMATEX &format)
558558{
559    assert(m_xAudio2);
560    assert(!m_masterVoice);
561    HRESULT result;
559   assert(m_xAudio2);
560   assert(!m_masterVoice);
561   HRESULT result;
562562
563    IXAudio2MasteringVoice *temp_master_voice = nullptr;
564    HR_RET1(
565        m_xAudio2->CreateMasteringVoice(
566            &temp_master_voice,
567            format.nChannels,
568            sample_rate()));
563   IXAudio2MasteringVoice *temp_master_voice = nullptr;
564   HR_RET1(
565      m_xAudio2->CreateMasteringVoice(
566         &temp_master_voice,
567         format.nChannels,
568         sample_rate()));
569569
570    m_masterVoice = mastering_voice_ptr(temp_master_voice);
570   m_masterVoice = mastering_voice_ptr(temp_master_voice);
571571
572    // create the source voice
573    IXAudio2SourceVoice *temp_source_voice = nullptr;
574    HR_RET1(m_xAudio2->CreateSourceVoice(
575        &temp_source_voice,
576        &format,
577        XAUDIO2_VOICE_NOSRC | XAUDIO2_VOICE_NOPITCH,
578        1.0,
579        this));
572   // create the source voice
573   IXAudio2SourceVoice *temp_source_voice = nullptr;
574   HR_RET1(m_xAudio2->CreateSourceVoice(
575      &temp_source_voice,
576      &format,
577      XAUDIO2_VOICE_NOSRC | XAUDIO2_VOICE_NOPITCH,
578      1.0,
579      this));
580580
581    m_sourceVoice = src_voice_ptr(temp_source_voice);
581   m_sourceVoice = src_voice_ptr(temp_source_voice);
582582
583    return S_OK;
583   return S_OK;
584584}
585585
586586//============================================================
r253023r253024
590590// submits audio events on another thread in a loop
591591void sound_xaudio2::process_audio()
592592{
593    BOOL exiting = FALSE;
594    HANDLE hEvents[] = { m_hEventBufferCompleted, m_hEventDataAvailable, m_hEventExiting };
595    while (!exiting)
596    {
597        DWORD wait_result = WaitForMultipleObjects(3, hEvents, FALSE, INFINITE);
598        switch (wait_result)
599        {
600            // Buffer is complete or new data is available
601        case 0:
602        case 1:
603            submit_needed();
604            break;
605        case 2:
606            // exiting
607            exiting = TRUE;
608            break;
609        }
610    }
593   BOOL exiting = FALSE;
594   HANDLE hEvents[] = { m_hEventBufferCompleted, m_hEventDataAvailable, m_hEventExiting };
595   while (!exiting)
596   {
597      DWORD wait_result = WaitForMultipleObjects(3, hEvents, FALSE, INFINITE);
598      switch (wait_result)
599      {
600         // Buffer is complete or new data is available
601      case 0:
602      case 1:
603         submit_needed();
604         break;
605      case 2:
606         // exiting
607         exiting = TRUE;
608         break;
609      }
610   }
611611}
612612
613613//============================================================
614614//  submit_needed
615615//============================================================
616616
617// Submits any buffers that have currently been queued,
617// Submits any buffers that have currently been queued,
618618// assuming they are needed based on current queue depth
619619void sound_xaudio2::submit_needed()
620620{
621    XAUDIO2_VOICE_STATE state;
622    m_sourceVoice->GetState(&state, XAUDIO2_VOICE_NOSAMPLESPLAYED);
621   XAUDIO2_VOICE_STATE state;
622   m_sourceVoice->GetState(&state, XAUDIO2_VOICE_NOSAMPLESPLAYED);
623623
624    // If we have a buffer on the queue, no reason to submit
625    if (state.BuffersQueued >= 1)
626        return;
624   // If we have a buffer on the queue, no reason to submit
625   if (state.BuffersQueued >= 1)
626      return;
627627
628    osd_scoped_lock lock_scope(m_buffer_lock.get());
628   osd_scoped_lock lock_scope(m_buffer_lock.get());
629629
630    // Roll the buffer
631    roll_buffer();
630   // Roll the buffer
631   roll_buffer();
632632
633    // Submit the next buffer
634    submit_next_queued();
633   // Submit the next buffer
634   submit_next_queued();
635635}
636636
637637//============================================================
r253023r253024
640640
641641void sound_xaudio2::submit_buffer(std::unique_ptr<BYTE[]> audioData, DWORD audioLength)
642642{
643    assert(audioLength != 0);
643   assert(audioLength != 0);
644644
645    XAUDIO2_BUFFER buf = { 0 };
646    buf.AudioBytes = audioLength;
647    buf.pAudioData = audioData.get();
648    buf.PlayBegin = 0;
649    buf.PlayLength = audioLength / m_sample_bytes;
650    buf.Flags = XAUDIO2_END_OF_STREAM;
651    buf.pContext = audioData.get();
645   XAUDIO2_BUFFER buf = { 0 };
646   buf.AudioBytes = audioLength;
647   buf.pAudioData = audioData.get();
648   buf.PlayBegin = 0;
649   buf.PlayLength = audioLength / m_sample_bytes;
650   buf.Flags = XAUDIO2_END_OF_STREAM;
651   buf.pContext = audioData.get();
652652
653    HRESULT result;
654    if (FAILED(result = m_sourceVoice->SubmitSourceBuffer(&buf)))
655    {
656        osd_printf_verbose("Sound: XAudio2 failed to submit source buffer (non-fatal). Error: 0x%X\n", (unsigned int)result);
657        m_buffer_pool->return_to_pool(audioData.release());
658        return;
659    }
653   HRESULT result;
654   if (FAILED(result = m_sourceVoice->SubmitSourceBuffer(&buf)))
655   {
656      osd_printf_verbose("Sound: XAudio2 failed to submit source buffer (non-fatal). Error: 0x%X\n", (unsigned int)result);
657      m_buffer_pool->return_to_pool(audioData.release());
658      return;
659   }
660660
661    // If we succeeded, relinquish the buffer allocation to the XAudio2 runtime
662    // The buffer will be freed on the OnBufferCompleted callback
663    audioData.release();
661   // If we succeeded, relinquish the buffer allocation to the XAudio2 runtime
662   // The buffer will be freed on the OnBufferCompleted callback
663   audioData.release();
664664}
665665
666666//============================================================
r253023r253024
669669
670670BOOL sound_xaudio2::submit_next_queued()
671671{
672    if (!m_queue.empty())
673    {
674        // Get a reference to the buffer
675        auto buf = &m_queue.front();
672   if (!m_queue.empty())
673   {
674      // Get a reference to the buffer
675      auto buf = &m_queue.front();
676676
677        // submit the buffer data
678        submit_buffer(std::move(buf->AudioData), buf->AudioSize);
677      // submit the buffer data
678      submit_buffer(std::move(buf->AudioData), buf->AudioSize);
679679
680        // Remove it from the queue
681        assert(buf->AudioSize > 0);
682        m_queue.pop();
680      // Remove it from the queue
681      assert(buf->AudioSize > 0);
682      m_queue.pop();
683683
684        return !m_queue.empty();
685    }
684      return !m_queue.empty();
685   }
686686
687    // queue was already empty
688    return FALSE;
687   // queue was already empty
688   return FALSE;
689689}
690690
691691//============================================================
r253023r253024
695695// Queues the current buffer, and gets a new write buffer
696696void sound_xaudio2::roll_buffer()
697697{
698    // Don't queue a buffer if it is empty
699    if (m_writepos == 0)
700        return;
698   // Don't queue a buffer if it is empty
699   if (m_writepos == 0)
700      return;
701701
702    // Queue the current buffer
703    xaudio2_buffer buf;
704    buf.AudioData = std::move(m_buffer);
705    buf.AudioSize = m_writepos;
706    m_queue.push(std::move(buf));
702   // Queue the current buffer
703   xaudio2_buffer buf;
704   buf.AudioData = std::move(m_buffer);
705   buf.AudioSize = m_writepos;
706   m_queue.push(std::move(buf));
707707
708    // Get a new buffer
709    m_buffer = std::unique_ptr<BYTE[]>(m_buffer_pool->next());
710    m_writepos = 0;
708   // Get a new buffer
709   m_buffer = std::unique_ptr<BYTE[]>(m_buffer_pool->next());
710   m_writepos = 0;
711711
712    // We only want to keep a maximum number of buffers at any given time
713    // so remove any from queue greater than MAX_QUEUED_BUFFERS
714    if (m_queue.size() > m_buffer_count)
715    {
716        xaudio2_buffer *next_buffer = &m_queue.front();
712   // We only want to keep a maximum number of buffers at any given time
713   // so remove any from queue greater than MAX_QUEUED_BUFFERS
714   if (m_queue.size() > m_buffer_count)
715   {
716      xaudio2_buffer *next_buffer = &m_queue.front();
717717
718        // return the oldest buffer to the pool, and remove it from queue
719        m_buffer_pool->return_to_pool(next_buffer->AudioData.release());
720        m_queue.pop();
718      // return the oldest buffer to the pool, and remove it from queue
719      m_buffer_pool->return_to_pool(next_buffer->AudioData.release());
720      m_queue.pop();
721721
722        m_overflows++;
723    }
722      m_overflows++;
723   }
724724}
725725
726726
r253023r253024
728728MODULE_NOT_SUPPORTED(sound_xaudio2, OSD_SOUND_PROVIDER, "xaudio2")
729729#endif
730730
731MODULE_DEFINITION(SOUND_XAUDIO2, sound_xaudio2)
No newline at end of file
731MODULE_DEFINITION(SOUND_XAUDIO2, sound_xaudio2)
trunk/src/osd/sdl/sdlfile.cpp
r253023r253024
576576   // start with an environment variable?
577577   if (*dst[0] == '$')
578578   {
579
580579      envstr = (char *) osd_malloc_array(strlen(src)+1);
581580      strcpy(envstr, src);
582581
trunk/src/osd/windows/output.cpp
r253023r253024
309309
310310static void notifier_callback(const char *outname, INT32 value, void *param)
311311{
312   registered_client *client;   
312   registered_client *client;
313313   // loop over clients and notify them
314   for (client = clientlist; client != nullptr; client = client->next)
314   for (client = clientlist; client != nullptr; client = client->next)
315315   {
316316      printf("there are clients\n");
317317      if (param == nullptr || param == client)
trunk/src/osd/windows/winmain.h
r253023r253024
156156   float screen_scanline_height() const { return float_value(WINOPTION_SCANLINE_HEIGHT); }
157157   float screen_scanline_bright_scale() const { return float_value(WINOPTION_SCANLINE_BRIGHT_SCALE); }
158158   float screen_scanline_bright_offset() const { return float_value(WINOPTION_SCANLINE_BRIGHT_OFFSET); }
159   float screen_scanline_jitter() const { return float_value(WINOPTION_SCANLINE_JITTER); }   
160   float screen_hum_bar_alpha() const { return float_value(WINOPTION_HUM_BAR_ALPHA); }   
159   float screen_scanline_jitter() const { return float_value(WINOPTION_SCANLINE_JITTER); }
160   float screen_hum_bar_alpha() const { return float_value(WINOPTION_HUM_BAR_ALPHA); }
161161   float screen_reflection() const { return float_value(WINOPTION_REFLECTION); }
162162   float screen_curvature() const { return float_value(WINOPTION_CURVATURE); }
163163   float screen_round_corner() const { return float_value(WINOPTION_ROUND_CORNER); }
trunk/src/version.cpp
r253023r253024
88
99***************************************************************************/
1010
11#define BARE_BUILD_VERSION "0.169"
11#define BARE_BUILD_VERSION "0.170"
1212
1313extern const char bare_build_version[];
1414extern const char build_version[];


Previous 199869 Revisions Next


© 1997-2024 The MAME Team