Previous 15994 Revisions Next

r14964 Thursday 19th April, 2012 at 11:44:11 UTC by Miodrag Milanović
Sync with MAME r16029 and more driver modernization (no whatsnew)
[src/emu]device.c device.h diexec.c diexec.h disound.c disound.h memory.c memory.h
[src/emu/sound]2151intf.c 2151intf.h i5000.c i5000.h okim6295.c okim6295.h
[src/mame]mame.lst mame.mak
[src/mame/audio]atarijsa.c mcr.c mcr.h midway.c* midway.h* seibu.c t5182.c williams.c williams.h
[src/mame/drivers]aliens.c amspdwy.c aquarium.c asuka.c atarig42.c atarisy1.c atarisy2.c bfm_sc4.c bfm_sc4h.c blockout.c bmcbowl.c boogwing.c byvid.c cabal.c cave.c cbuster.c chinagat.c chqflag.c cninja.c cps1.c cps3.c crimfght.c cyberbal.c darkseal.c dassault.c dblewing.c dbz.c ddragon.c ddragon3.c deco32.c dietgo.c dlair.c dooyong.c exzisus.c fantland.c fitfight.c funkyjet.c galaga.c gotcha.c hng64.c hornet.c hyprduel.c igs017.c lemmings.c m107.c m72.c m90.c m92.c madmotor.c mcr.c mcr3.c mcr68.c megasys1.c merit.c metro.c midtunit.c midyunit.c missile.c mjkjidai.c mlanding.c mpu4.c mugsmash.c namcos1.c namcos10.c nemesis.c ninjaw.c nmk16.c nova2001.c opwolf.c photon2.c plygonet.c rabbit.c rainbow.c rastan.c renegade.c rohga.c rpunch.c segahang.c segas16a.c segas24.c segaxbd.c segaybd.c seta.c sf.c shadfrce.c shisen.c sidearms.c sigmab98.c silvmil.c snowbros.c srmp6.c starwars.c subsino.c subsino2.c supbtime.c surpratk.c taito_x.c tatsumi.c tecmo16.c tickee.c tmmjprd.c tmnt.c topspeed.c tourtabl.c tumbleb.c tumblep.c vaportra.c vball.c vcombat.c vigilant.c williams.c wwfsstar.c wwfwfest.c
[src/mame/includes]aerofgt.h alpha68k.h argus.h astrocde.h atarig42.h atarigt.h atarisy2.h bfm_sc45.h bloodbro.h cclimber.h centiped.h cischeat.h cninja.h cps3.h dooyong.h fantland.h fastfred.h fitfight.h flstory.h galpani2.h galpanic.h gberet.h gottlieb.h hng64.h itech32.h kaneko16.h liberate.h m72.h m90.h mcr.h mcr68.h meadows.h midtunit.h midvunit.h midwunit.h midyunit.h model2.h moo.h mystwarr.h n8080.h ninjakd2.h nmk16.h nova2001.h offtwall.h ojankohs.h pktgaldx.h plygonet.h qix.h rainbow.h realbrk.h scramble.h segas32.h seta2.h snes.h starwars.h suna8.h system16.h tatsumi.h tmnt.h toaplan1.h tubep.h unico.h wecleman.h williams.h
[src/mame/layout]bfm_sc4.lay
[src/mame/machine]atarigen.c atarigen.h bfm_bd1.c mcr.c mcr68.c midtunit.c midyunit.c opwolf.c snes.c williams.c
[src/mame/video]decospr.c fastfred.c galpanic.c gotcha.c mcr68.c suna8.c tia.c tia.h zaxxon.c
[src/mess/drivers]a2600.c a7800.c ami1200.c amstr_pc.c amstrad.c apollo.c apple1.c apple3.c aquarius.c atm.c b2m.c bbc.c bk.c busicom.c cbmb.c comquest.c concept.c craft.c dai.c einstein.c electron.c elwro800.c enterp.c fm7.c galaxy.c galeb.c gb.c gba.c glasgow.c gmaster.c gp32.c hec2hrp.c interact.c ip22.c irisha.c lisa.c llc.c lviv.c lynx.c mbc55x.c microtan.c mikro80.c mikrosha.c msx.c mtx.c mz700.c nascom1.c nc.c nes.c ng_aes.c odyssey2.c ondra.c orao.c oric.c orion.c partner.c pc.c pce.c pcw.c pcw16.c pecom.c pentagon.c pmd85.c poly88.c pp01.c primo.c psx.c radio86.c rmnimbus.c samcoupe.c sapi1.c scorpion.c sms.c spec128.c specpls3.c spectrum.c svi318.c svision.c ti85.c ti99_2.c timex.c vtech2.c x68k.c z80ne.c
[src/mess/formats]m65_snqk.c
[src/mess/includes]a7800.h amstrad.h apollo.h apple1.h apple3.h aquarius.h at.h b2m.h bbc.h bk.h busicom.h cbmb.h comquest.h concept.h dai.h einstein.h electron.h enterp.h fm7.h galaxy.h galeb.h gb.h gba.h gmaster.h gp32.h hec2hrp.h irisha.h lisa.h llc.h lviv.h lynx.h mbc55x.h microtan.h mikro80.h msx.h mtx.h mz700.h nascom1.h nc.h nes.h odyssey2.h ondra.h orao.h oric.h orion.h partner.h pc.h pce.h pcw.h pcw16.h pecom.h pk8020.h pmd85.h poly88.h pp01.h primo.h radio86.h rmnimbus.h samcoupe.h sapi1.h sms.h spectrum.h svi318.h svision.h ti85.h vtech2.h z80ne.h zx.h
[src/mess/machine]a7800.c amstrad.c apollo.c apple1.c apple3.c at.c b2m.c bbc.c bk.c cbmb.c concept.c dai.c ecb_grip.c electron.c galaxy.c gb.c hec2hrp.c irisha.c isa_ibm_mfc.c isa_ibm_mfc.h lisa.c llc.c lviv.c lynx.c mbc55x.c microtan.c mikro80.c msx.c mtx.c mz700.c nascom1.c nes.c odyssey2.c ondra.c orao.c oric.c orion.c partner.c pc.c pce.c pecom.c pk8020.c pmd85.c poly88.c pp01.c primo.c radio86.c rmnimbus.c samcoupe.c sapi1.c sms.c svi318.c ti85.c vtech2.c z80ne.c zx.c
[src/mess/video]a7800.c aquarius.c bbc.c fm7.c gb.c microtan.c mz700.c odyssey2.c pecom.c rmnimbus.c vtech2.c
[src/osd/windows]windows.mak

src/mame/mame.lst
r14963r14964
1007910079fitfight      // bootleg of Art of Fighting
1008010080histryma      // bootleg of Fighter's History
1008110081bbprot         // unfinished prototype
10082hotmindff      // (c) Playmark
1008210083beaminv         // (c) 1979 Tekunon Kougyou (Arcade TV Game List - P.95, Left, 9 from top)
1008310084pacominv      // (c) 1979 Pacom Corporation
1008410085mcatadv         // (c) 1993 Wintechno
r14963r14964
1391413915sc4mclbe   //
1391513916sc4mdlx      // Monopoly Deluxe (Mazooma)
1391613917sc4mondxg   //
13917sc4mowowd   //
1391813918sc4mont      // Montego Pay (Qps)
1391913919sc4monta   //
1392013920sc4montb   //
r14963r14964
1395613956sc4pacmn   // Pac Man (Mazooma)
1395713957sc4pacmna   //
1395813958sc4pacmnb   //
13959sc4pacmnc   //
13960sc4pacmnd   //
13961sc4pacmne   //
13959sc4pacqp   //
13960sc4pacqpa   //
13961sc4pacqpb   //
1396213962sc4paccs   // Pac Man Casino (Mazooma)
1396313963sc4paccsa   //
1396413964sc4paccsb   //
r14963r14964
1509415094sc4gballa   //
1509515095sc4gballb   //
1509615096sc4gballc   //
15097sc4ggame   // Golden Game (Mazooma)
15097sc4ggtb       // Golden Game (Mazooma) Top Box
15098sc4ggtba   //
15099sc4ggtbb   //
15100sc4ggame   // Golden Game
1509815101sc4ggamea   //
1509915102sc4ggameb   //
1510015103sc4ggamec   //
1510115104sc4ggamed   //
15102sc4ggamee   //
1510315105sc4ggamef   //
1510415106sc4ggameg   //
15105sc4ggameh   //
1510615107sc4ggamei   //
1510715108sc4ggamej   //
1510815109sc4ggamek   //
1510915110sc4ggamel   //
1511015111sc4ggamem   //
1511115112sc4ggamen   //
15112sc4ggameo   //
1511315113sc4ggamep   //
1511415114sc4ggameq   //
1511515115sc4ggamer   //
r14963r14964
1514415144sc4ggdlxe   //
1514515145sc4ggdlxf   //
1514615146sc4ggdlxg   //
15147sc4ggg      // Grand Golden Game (Mazooma)
15148sc4ggga      //
15147sc4gggtb   // Grand Golden Game (Mazooma)
15148sc4gggtba   //
15149sc4ggg      //
1514915150sc4gggb      //
1515015151sc4gggc      //
1515115152sc4gggd      //
r14963r14964
1515415155sc4gggg      //
1515515156sc4gggh      //
1515615157sc4gggi      //
15157sc4gggj      //
1515815158sc4gggk      //
1515915159sc4gggl      //
1516015160sc4gggm      //
r14963r14964
1565315653sc4dndben   //
1565415654sc4dndbc   // Deal Or No Deal Box Clever (Bellfruit)
1565515655sc4dndbca   //
15656sc4bwow     // Wheel of Wealth (Bellfruit)
15657sc4bwowa   //
1565615658sc4mowow   // Monopoly Wheel Of Wealth (Mazooma)
1565715659sc4mowowa   //
1565815660sc4mowowb   //
1565915661sc4mowowc   //
15660sc4mowowe   //
15661sc4mowowf   //
15662sc4mowowg   //
15663sc4mowowh   //
15664sc4mowowi   //
15665sc4mowowj   //
15662sc4mwwtb   //
15663sc4mwwtba   //
15664sc4mwwtbb   //
15665sc4mwwtbc   //
15666sc4mwwtbd   //
1566615667sc4nunsm   // Nuns 'n' Roses (Mazooma)
1566715668sc4nunsmb   //
1566815669sc4nunsmc   //
src/mame/audio/mcr.c
r14963r14964
1/***************************************************************************
2
3    audio/mcr.c
4
5    Functions to emulate general the various MCR sound cards.
6
7***************************************************************************/
8
9#include "emu.h"
10#include "cpu/z80/z80.h"
11#include "cpu/m68000/m68000.h"
12#include "cpu/m6800/m6800.h"
13#include "cpu/m6809/m6809.h"
14#include "sound/tms5220.h"
15#include "sound/ay8910.h"
16#include "sound/dac.h"
17#include "audio/williams.h"
18#include "includes/mcr.h"
19#include "audio/mcr.h"
20
21
22
23/*************************************
24 *
25 *  Constants
26 *
27 *************************************/
28
29#define SSIO_CLOCK         XTAL_16MHz
30#define CSDELUXE_CLOCK      XTAL_16MHz
31#define SOUNDSGOOD_CLOCK   XTAL_16MHz
32#define TURBOCS_CLOCK      XTAL_8MHz
33#define SQUAWKTALK_CLOCK   XTAL_3_579545MHz
34
35
36
37/*************************************
38 *
39 *  Global variables
40 *
41 *************************************/
42
43static UINT8 mcr_sound_config;
44
45
46
47/*************************************
48 *
49 *  Statics
50 *
51 *************************************/
52
53static UINT16 dacval;
54
55/* SSIO-specific globals */
56static device_t *ssio_sound_cpu;
57static UINT8 ssio_data[4];
58static UINT8 ssio_status;
59static UINT8 ssio_14024_count;
60static UINT8 ssio_mute;
61static UINT8 ssio_overall[2];
62static UINT8 ssio_duty_cycle[2][3];
63static UINT8 ssio_ayvolume_lookup[16];
64static UINT8 ssio_custom_input_mask[5];
65static UINT8 ssio_custom_output_mask[2];
66static read8_delegate ssio_custom_input[5];
67static write8_delegate ssio_custom_output[2];
68
69/* Chip Squeak Deluxe-specific globals */
70static device_t *csdeluxe_sound_cpu;
71static UINT8 csdeluxe_status;
72
73/* Turbo Chip Squeak-specific globals */
74static device_t *turbocs_sound_cpu;
75static UINT8 turbocs_status;
76
77/* Sounds Good-specific globals */
78static device_t *soundsgood_sound_cpu;
79static UINT8 soundsgood_status;
80
81/* Squawk n' Talk-specific globals */
82static device_t *squawkntalk_sound_cpu;
83static UINT8 squawkntalk_tms_command;
84static UINT8 squawkntalk_tms_strobes;
85
86
87
88/*************************************
89 *
90 *  Prototypes
91 *
92 *************************************/
93
94static void ssio_compute_ay8910_modulation(running_machine &machine);
95
96
97
98/*************************************
99 *
100 *  Generic MCR sound initialization
101 *
102 *************************************/
103
104void mcr_sound_init(running_machine &machine, UINT8 config)
105{
106   mcr_sound_config = config;
107
108   /* SSIO */
109   if (mcr_sound_config & MCR_SSIO)
110   {
111      ssio_sound_cpu = machine.device("ssiocpu");
112      ssio_compute_ay8910_modulation(machine);
113      state_save_register_global_array(machine, ssio_data);
114      state_save_register_global(machine, ssio_status);
115      state_save_register_global(machine, ssio_14024_count);
116      state_save_register_global(machine, ssio_mute);
117      state_save_register_global_array(machine, ssio_overall);
118      state_save_register_global_2d_array(machine, ssio_duty_cycle);
119   }
120
121   /* Turbo Chip Squeak */
122   if (mcr_sound_config & MCR_TURBO_CHIP_SQUEAK)
123   {
124      turbocs_sound_cpu = machine.device("tcscpu");
125      state_save_register_global(machine, turbocs_status);
126   }
127
128   /* Chip Squeak Deluxe */
129   if (mcr_sound_config & MCR_CHIP_SQUEAK_DELUXE)
130   {
131      csdeluxe_sound_cpu = machine.device("csdcpu");
132      state_save_register_global(machine, csdeluxe_status);
133   }
134
135   /* Sounds Good */
136   if (mcr_sound_config & MCR_SOUNDS_GOOD)
137   {
138      soundsgood_sound_cpu = machine.device("sgcpu");
139      state_save_register_global(machine, soundsgood_status);
140   }
141
142   /* Squawk n Talk */
143   if (mcr_sound_config & MCR_SQUAWK_N_TALK)
144   {
145      squawkntalk_sound_cpu = machine.device("sntcpu");
146      state_save_register_global(machine, squawkntalk_tms_command);
147      state_save_register_global(machine, squawkntalk_tms_strobes);
148   }
149
150   /* Advanced Audio */
151   if (mcr_sound_config & MCR_WILLIAMS_SOUND)
152      williams_cvsd_init(machine);
153}
154
155
156void mcr_sound_reset(running_machine &machine)
157{
158   /* SSIO */
159   if (mcr_sound_config & MCR_SSIO)
160   {
161      ssio_reset_w(machine, 1);
162      ssio_reset_w(machine, 0);
163   }
164
165   /* Turbo Chip Squeak */
166   if (mcr_sound_config & MCR_TURBO_CHIP_SQUEAK)
167   {
168      turbocs_reset_w(machine, 1);
169      turbocs_reset_w(machine, 0);
170   }
171
172   /* Chip Squeak Deluxe */
173   if (mcr_sound_config & MCR_CHIP_SQUEAK_DELUXE)
174   {
175      csdeluxe_reset_w(machine, 1);
176      csdeluxe_reset_w(machine, 0);
177   }
178
179   /* Sounds Good */
180   if (mcr_sound_config & MCR_SOUNDS_GOOD)
181   {
182      soundsgood_reset_w(machine, 1);
183      soundsgood_reset_w(machine, 0);
184   }
185
186   /* Squawk n Talk */
187   if (mcr_sound_config & MCR_SQUAWK_N_TALK)
188   {
189      squawkntalk_reset_w(machine, 1);
190      squawkntalk_reset_w(machine, 0);
191   }
192
193   /* Advanced Audio */
194   if (mcr_sound_config & MCR_WILLIAMS_SOUND)
195   {
196      williams_cvsd_reset_w(machine, 1);
197      williams_cvsd_reset_w(machine, 0);
198   }
199}
200
201
202
203/*************************************
204 *
205 *  MCR SSIO communications
206 *
207 *  Z80, 2 AY-8910
208 *
209 *************************************/
210
211/*
212    AY-8910 modulation:
213
214        Starts with a 16MHz oscillator
215            /2 via 7474 flip-flip @ F11
216
217        This signal clocks the binary counter @ E11 which
218        cascades into the decade counter @ D11. This combo
219        effectively counts from 0-159 and then wraps. The
220        value from these counters is input to an 82S123 PROM,
221        which appears to be standard on all games.
222
223        One bit at a time from this PROM is clocked at a time
224        and the resulting inverted signal becomes a clock for
225        the down counters at F3, F4, F5, F8, F9, and F10. The
226        value in these down counters are reloaded after the 160
227        counts from the binary/decade counter combination.
228
229        When these down counters are loaded, the TC signal is
230        clear, which mutes the voice. When the down counters
231        cross through 0, the TC signal goes high and the 4016
232        multiplexers allow the AY-8910 voice to go through.
233        Thus, writing a 0 to the counters will enable the
234        voice for the longest period of time, while writing
235        a 15 enables it for the shortest period of time.
236        This creates an effective duty cycle for the voice.
237
238        Given that the down counters are reset 50000 times per
239        second (SSIO_CLOCK/2/160), which is above the typical
240        frequency of sound output. So we simply apply a volume
241        adjustment to each voice according to the duty cycle.
242*/
243static void ssio_compute_ay8910_modulation(running_machine &machine)
244{
245   UINT8 *prom = machine.region("proms")->base();
246   int volval;
247
248   /* loop over all possible values of the duty cycle */
249   for (volval = 0; volval < 16; volval++)
250   {
251      int remaining_clocks = volval;
252      int clock, cur = 0, prev = 1;
253
254      /* loop over all the clocks until we run out; look up in the PROM */
255      /* to find out when the next clock should fire */
256      for (clock = 0; clock < 160 && remaining_clocks; clock++)
257      {
258         cur = prom[clock / 8] & (0x80 >> (clock % 8));
259
260         /* check for a high -> low transition */
261         if (cur == 0 && prev != 0)
262            remaining_clocks--;
263
264         prev = cur;
265      }
266
267      /* treat the duty cycle as a volume */
268      ssio_ayvolume_lookup[15-volval] = clock * 100 / 160;
269   }
270}
271
272/********* internal interfaces ***********/
273static INTERRUPT_GEN( ssio_14024_clock )
274{
275   /*
276        /SINT is generated as follows:
277
278        Starts with a 16MHz oscillator
279            /2 via 7474 flip-flop @ F11
280            /16 via 74161 binary counter @ E11
281            /10 via 74190 decade counter @ D11
282
283        Bit 3 of the decade counter clocks a 14024 7-bit async counter @ C12.
284        This routine is called to clock this 7-bit counter.
285        Bit 6 of the output is inverted and connected to /SINT.
286    */
287   ssio_14024_count = (ssio_14024_count + 1) & 0x7f;
288
289   /* if the low 5 bits clocked to 0, bit 6 has changed state */
290   if ((ssio_14024_count & 0x3f) == 0)
291      device_set_input_line(device, 0, (ssio_14024_count & 0x40) ? ASSERT_LINE : CLEAR_LINE);
292}
293
294READ8_MEMBER(mcr_state::ssio_irq_clear)
295{
296   /* a read here asynchronously resets the 14024 count, clearing /SINT */
297   ssio_14024_count = 0;
298   device_set_input_line(ssio_sound_cpu, 0, CLEAR_LINE);
299   return 0xff;
300}
301
302WRITE8_MEMBER(mcr_state::ssio_status_w)
303{
304   ssio_status = data;
305}
306
307READ8_MEMBER(mcr_state::ssio_data_r)
308{
309   return ssio_data[offset];
310}
311
312static TIMER_CALLBACK( ssio_delayed_data_w )
313{
314   ssio_data[param >> 8] = param & 0xff;
315}
316
317static void ssio_update_volumes(running_machine &machine)
318{
319   device_t *ay0 = machine.device("ssio.1");
320   device_t *ay1 = machine.device("ssio.2");
321   ay8910_set_volume(ay0, 0, ssio_mute ? 0 : ssio_ayvolume_lookup[ssio_duty_cycle[0][0]]);
322   ay8910_set_volume(ay0, 1, ssio_mute ? 0 : ssio_ayvolume_lookup[ssio_duty_cycle[0][1]]);
323   ay8910_set_volume(ay0, 2, ssio_mute ? 0 : ssio_ayvolume_lookup[ssio_duty_cycle[0][2]]);
324   ay8910_set_volume(ay1, 0, ssio_mute ? 0 : ssio_ayvolume_lookup[ssio_duty_cycle[1][0]]);
325   ay8910_set_volume(ay1, 1, ssio_mute ? 0 : ssio_ayvolume_lookup[ssio_duty_cycle[1][1]]);
326   ay8910_set_volume(ay1, 2, ssio_mute ? 0 : ssio_ayvolume_lookup[ssio_duty_cycle[1][2]]);
327}
328
329static WRITE8_DEVICE_HANDLER( ssio_porta0_w )
330{
331   ssio_duty_cycle[0][0] = data & 15;
332   ssio_duty_cycle[0][1] = data >> 4;
333   ssio_update_volumes(device->machine());
334}
335
336static WRITE8_DEVICE_HANDLER( ssio_portb0_w )
337{
338   ssio_duty_cycle[0][2] = data & 15;
339   ssio_overall[0] = (data >> 4) & 7;
340   ssio_update_volumes(device->machine());
341}
342
343static WRITE8_DEVICE_HANDLER( ssio_porta1_w )
344{
345   ssio_duty_cycle[1][0] = data & 15;
346   ssio_duty_cycle[1][1] = data >> 4;
347   ssio_update_volumes(device->machine());
348}
349
350static WRITE8_DEVICE_HANDLER( ssio_portb1_w )
351{
352   ssio_duty_cycle[1][2] = data & 15;
353   ssio_overall[1] = (data >> 4) & 7;
354   ssio_mute = data & 0x80;
355   ssio_update_volumes(device->machine());
356}
357
358/********* external interfaces ***********/
359WRITE8_MEMBER(mcr_state::ssio_data_w)
360{
361   machine().scheduler().synchronize(FUNC(ssio_delayed_data_w), (offset << 8) | (data & 0xff));
362}
363
364READ8_MEMBER(mcr_state::ssio_status_r)
365{
366   return ssio_status;
367}
368
369void ssio_reset_w(running_machine &machine, int state)
370{
371   /* going high halts the CPU */
372   if (state)
373   {
374      int i;
375
376      device_set_input_line(ssio_sound_cpu, INPUT_LINE_RESET, ASSERT_LINE);
377
378      /* latches also get reset */
379      for (i = 0; i < 4; i++)
380         ssio_data[i] = 0;
381      ssio_status = 0;
382      ssio_14024_count = 0;
383   }
384   /* going low resets and reactivates the CPU */
385   else
386      device_set_input_line(ssio_sound_cpu, INPUT_LINE_RESET, CLEAR_LINE);
387}
388
389READ8_MEMBER(mcr_state::ssio_input_port_r)
390{
391   static const char *const port[] = { "SSIO.IP0", "SSIO.IP1", "SSIO.IP2", "SSIO.IP3", "SSIO.IP4" };
392   UINT8 result = input_port_read_safe(machine(), port[offset], 0xff);
393   if (!ssio_custom_input[offset].isnull())
394      result = (result & ~ssio_custom_input_mask[offset]) |
395               (ssio_custom_input[offset](*&space, offset, 0xff) & ssio_custom_input_mask[offset]);
396   return result;
397}
398
399WRITE8_MEMBER(mcr_state::ssio_output_port_w)
400{
401   int which = offset >> 2;
402   if (which == 0)
403      mcr_control_port_w(*&space, offset, data);
404   if (!ssio_custom_output[which].isnull())
405      ssio_custom_output[which](*&space, offset, data & ssio_custom_output_mask[which],0xff);
406}
407
408void ssio_set_custom_input(int which, int mask, read8_delegate handler)
409{
410   ssio_custom_input[which] = handler;
411   ssio_custom_input_mask[which] = mask;
412}
413
414void ssio_set_custom_output(int which, int mask, write8_delegate handler)
415{
416   ssio_custom_output[which/4] = handler;
417   ssio_custom_output_mask[which/4] = mask;
418}
419
420
421/********* sound interfaces ***********/
422static const ay8910_interface ssio_ay8910_interface_1 =
423{
424   AY8910_LEGACY_OUTPUT,
425   AY8910_DEFAULT_LOADS,
426   DEVCB_NULL,
427   DEVCB_NULL,
428   DEVCB_HANDLER(ssio_porta0_w),
429   DEVCB_HANDLER(ssio_portb0_w)
430};
431
432static const ay8910_interface ssio_ay8910_interface_2 =
433{
434   AY8910_LEGACY_OUTPUT,
435   AY8910_DEFAULT_LOADS,
436   DEVCB_NULL,
437   DEVCB_NULL,
438   DEVCB_HANDLER(ssio_porta1_w),
439   DEVCB_HANDLER(ssio_portb1_w)
440};
441
442
443/********* memory interfaces ***********/
444
445/* address map verified from schematics */
446static ADDRESS_MAP_START( ssio_map, AS_PROGRAM, 8, mcr_state )
447   ADDRESS_MAP_UNMAP_HIGH
448   AM_RANGE(0x0000, 0x3fff) AM_ROM
449   AM_RANGE(0x8000, 0x83ff) AM_MIRROR(0x0c00) AM_RAM
450   AM_RANGE(0x9000, 0x9003) AM_MIRROR(0x0ffc) AM_READ(ssio_data_r)
451   AM_RANGE(0xa000, 0xa000) AM_MIRROR(0x0ffc) AM_DEVWRITE_LEGACY("ssio.1", ay8910_address_w)
452   AM_RANGE(0xa001, 0xa001) AM_MIRROR(0x0ffc) AM_DEVREAD_LEGACY("ssio.1", ay8910_r)
453   AM_RANGE(0xa002, 0xa002) AM_MIRROR(0x0ffc) AM_DEVWRITE_LEGACY("ssio.1", ay8910_data_w)
454   AM_RANGE(0xb000, 0xb000) AM_MIRROR(0x0ffc) AM_DEVWRITE_LEGACY("ssio.2", ay8910_address_w)
455   AM_RANGE(0xb001, 0xb001) AM_MIRROR(0x0ffc) AM_DEVREAD_LEGACY("ssio.2", ay8910_r)
456   AM_RANGE(0xb002, 0xb002) AM_MIRROR(0x0ffc) AM_DEVWRITE_LEGACY("ssio.2", ay8910_data_w)
457   AM_RANGE(0xc000, 0xcfff) AM_READNOP AM_WRITE(ssio_status_w)
458   AM_RANGE(0xd000, 0xdfff) AM_WRITENOP   /* low bit controls yellow LED */
459   AM_RANGE(0xe000, 0xefff) AM_READ(ssio_irq_clear)
460   AM_RANGE(0xf000, 0xffff) AM_READ_PORT("SSIO.DIP")   /* 6 DIP switches */
461ADDRESS_MAP_END
462
463
464/********* machine driver ***********/
465MACHINE_CONFIG_FRAGMENT(mcr_ssio)
466   MCFG_CPU_ADD("ssiocpu", Z80, SSIO_CLOCK/2/4)
467   MCFG_CPU_PROGRAM_MAP(ssio_map)
468   MCFG_CPU_PERIODIC_INT(ssio_14024_clock, SSIO_CLOCK/2/16/10)
469
470   MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
471   MCFG_SOUND_ADD("ssio.1", AY8910, SSIO_CLOCK/2/4)
472   MCFG_SOUND_CONFIG(ssio_ay8910_interface_1)
473   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.33)
474
475   MCFG_SOUND_ADD("ssio.2", AY8910, SSIO_CLOCK/2/4)
476   MCFG_SOUND_CONFIG(ssio_ay8910_interface_2)
477   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.33)
478MACHINE_CONFIG_END
479
480
481
482/*************************************
483 *
484 *  Chip Squeak Deluxe communications
485 *
486 *  MC68000, 1 PIA, 10-bit DAC
487 *
488 *************************************/
489
490/********* internal interfaces ***********/
491static WRITE8_DEVICE_HANDLER( csdeluxe_porta_w )
492{
493   dacval = (dacval & ~0x3fc) | (data << 2);
494   dac_signed_data_16_w(device->machine().device("csddac"), dacval << 6);
495}
496
497static WRITE8_DEVICE_HANDLER( csdeluxe_portb_w )
498{
499   UINT8 z_mask = downcast<pia6821_device *>(device)->port_b_z_mask();
500
501   dacval = (dacval & ~0x003) | (data >> 6);
502   dac_signed_data_16_w(device->machine().device("csddac"), dacval << 6);
503
504   if (~z_mask & 0x10)  csdeluxe_status = (csdeluxe_status & ~1) | ((data >> 4) & 1);
505   if (~z_mask & 0x20)  csdeluxe_status = (csdeluxe_status & ~2) | ((data >> 4) & 2);
506}
507
508static WRITE_LINE_DEVICE_HANDLER( csdeluxe_irq )
509{
510   pia6821_device *pia = downcast<pia6821_device *>(device);
511   int combined_state = pia->irq_a_state() | pia->irq_b_state();
512
513   device_set_input_line(csdeluxe_sound_cpu, 4, combined_state ? ASSERT_LINE : CLEAR_LINE);
514}
515
516static TIMER_CALLBACK( csdeluxe_delayed_data_w )
517{
518   pia6821_device *pia = machine.device<pia6821_device>("csdpia");
519
520   pia->portb_w(param & 0x0f);
521   pia->ca1_w(~param & 0x10);
522
523   /* oftentimes games will write one nibble at a time; the sync on this is very */
524   /* important, so we boost the interleave briefly while this happens */
525   machine.scheduler().boost_interleave(attotime::zero, attotime::from_usec(100));
526}
527
528static READ16_DEVICE_HANDLER( csdeluxe_pia_r )
529{
530   /* Spy Hunter accesses the MSB; Turbo Tag access via the LSB */
531   /* My guess is that Turbo Tag works through a fluke, whereby the 68000 */
532   /* using the MOVEP instruction outputs the same value on the high and */
533   /* low bytes. */
534   pia6821_device *pia = downcast<pia6821_device *>(device);
535   if (ACCESSING_BITS_8_15)
536      return pia->read_alt(*device->machine().memory().first_space(), offset) << 8;
537   else
538      return pia->read_alt(*device->machine().memory().first_space(), offset);
539}
540
541static WRITE16_DEVICE_HANDLER( csdeluxe_pia_w )
542{
543   pia6821_device *pia = downcast<pia6821_device *>(device);
544   if (ACCESSING_BITS_8_15)
545      pia->write_alt(*device->machine().memory().first_space(), offset, data >> 8);
546   else
547      pia->write_alt(*device->machine().memory().first_space(), offset, data);
548}
549
550
551/********* external interfaces ***********/
552WRITE8_MEMBER(mcr_state::csdeluxe_data_w)
553{
554   machine().scheduler().synchronize(FUNC(csdeluxe_delayed_data_w), data);
555}
556
557READ8_MEMBER(mcr_state::csdeluxe_status_r)
558{
559   return csdeluxe_status;
560}
561
562void csdeluxe_reset_w(running_machine &machine, int state)
563{
564   device_set_input_line(csdeluxe_sound_cpu, INPUT_LINE_RESET, state ? ASSERT_LINE : CLEAR_LINE);
565}
566
567
568/********* memory interfaces ***********/
569
570/* address map determined by PAL; not verified */
571static ADDRESS_MAP_START( csdeluxe_map, AS_PROGRAM, 16, mcr_state )
572   ADDRESS_MAP_UNMAP_HIGH
573   ADDRESS_MAP_GLOBAL_MASK(0x1ffff)
574   AM_RANGE(0x000000, 0x007fff) AM_ROM
575   AM_RANGE(0x018000, 0x018007) AM_DEVREADWRITE_LEGACY("csdpia", csdeluxe_pia_r, csdeluxe_pia_w)
576   AM_RANGE(0x01c000, 0x01cfff) AM_RAM
577ADDRESS_MAP_END
578
579
580/********* PIA interfaces ***********/
581static const pia6821_interface csdeluxe_pia_intf =
582{
583   DEVCB_NULL,      /* port A in */
584   DEVCB_NULL,      /* port B in */
585   DEVCB_NULL,      /* line CA1 in */
586   DEVCB_NULL,      /* line CB1 in */
587   DEVCB_NULL,      /* line CA2 in */
588   DEVCB_NULL,      /* line CB2 in */
589   DEVCB_HANDLER(csdeluxe_porta_w),      /* port A out */
590   DEVCB_HANDLER(csdeluxe_portb_w),      /* port B out */
591   DEVCB_NULL,      /* line CA2 out */
592   DEVCB_NULL,      /* port CB2 out */
593   DEVCB_LINE(csdeluxe_irq),      /* IRQA */
594   DEVCB_LINE(csdeluxe_irq)      /* IRQB */
595};
596
597
598/********* machine driver ***********/
599MACHINE_CONFIG_FRAGMENT(chip_squeak_deluxe)
600   MCFG_CPU_ADD("csdcpu", M68000, CSDELUXE_CLOCK/2)
601   MCFG_CPU_PROGRAM_MAP(csdeluxe_map)
602
603   MCFG_PIA6821_ADD("csdpia", csdeluxe_pia_intf)
604
605   MCFG_SPEAKER_STANDARD_MONO("mono")
606   MCFG_SOUND_ADD("csddac", DAC, 0)
607   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
608MACHINE_CONFIG_END
609
610MACHINE_CONFIG_FRAGMENT(chip_squeak_deluxe_stereo)
611   MCFG_CPU_ADD("csdcpu", M68000, CSDELUXE_CLOCK/2)
612   MCFG_CPU_PROGRAM_MAP(csdeluxe_map)
613
614   MCFG_PIA6821_ADD("csdpia", csdeluxe_pia_intf)
615
616   MCFG_SOUND_ADD("csddac", DAC, 0)
617   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
618   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
619MACHINE_CONFIG_END
620
621
622
623/*************************************
624 *
625 *  MCR Sounds Good communications
626 *
627 *  MC68000, 1 PIA, 10-bit DAC
628 *
629 *************************************/
630
631/********* internal interfaces ***********/
632static WRITE8_DEVICE_HANDLER( soundsgood_porta_w )
633{
634   dacval = (dacval & ~0x3fc) | (data << 2);
635   dac_signed_data_16_w(device->machine().device("sgdac"), dacval << 6);
636}
637
638static WRITE8_DEVICE_HANDLER( soundsgood_portb_w )
639{
640   UINT8 z_mask = downcast<pia6821_device *>(device)->port_b_z_mask();
641
642   dacval = (dacval & ~0x003) | (data >> 6);
643   dac_signed_data_16_w(device->machine().device("sgdac"), dacval << 6);
644
645   if (~z_mask & 0x10)  soundsgood_status = (soundsgood_status & ~1) | ((data >> 4) & 1);
646   if (~z_mask & 0x20)  soundsgood_status = (soundsgood_status & ~2) | ((data >> 4) & 2);
647}
648
649static WRITE_LINE_DEVICE_HANDLER( soundsgood_irq )
650{
651   pia6821_device *pia = downcast<pia6821_device *>(device);
652   int combined_state = pia->irq_a_state() | pia->irq_b_state();
653
654   device_set_input_line(soundsgood_sound_cpu, 4, combined_state ? ASSERT_LINE : CLEAR_LINE);
655}
656
657static TIMER_CALLBACK( soundsgood_delayed_data_w )
658{
659   pia6821_device *pia = machine.device<pia6821_device>("sgpia");
660
661   pia->portb_w((param >> 1) & 0x0f);
662   pia->ca1_w(~param & 0x01);
663
664   /* oftentimes games will write one nibble at a time; the sync on this is very */
665   /* important, so we boost the interleave briefly while this happens */
666   machine.scheduler().boost_interleave(attotime::zero, attotime::from_usec(250));
667}
668
669
670/********* external interfaces ***********/
671WRITE8_MEMBER(mcr_state::soundsgood_data_w)
672{
673   machine().scheduler().synchronize(FUNC(soundsgood_delayed_data_w), data);
674}
675
676READ8_MEMBER(mcr_state::soundsgood_status_r)
677{
678   return soundsgood_status;
679}
680
681void soundsgood_reset_w(running_machine &machine, int state)
682{
683//if (state) mame_printf_debug("SG Reset\n");
684   device_set_input_line(soundsgood_sound_cpu, INPUT_LINE_RESET, state ? ASSERT_LINE : CLEAR_LINE);
685}
686
687
688/********* memory interfaces ***********/
689
690/* address map determined by PAL; not verified */
691static ADDRESS_MAP_START( soundsgood_map, AS_PROGRAM, 16, mcr_state )
692   ADDRESS_MAP_UNMAP_HIGH
693   ADDRESS_MAP_GLOBAL_MASK(0x7ffff)
694   AM_RANGE(0x000000, 0x03ffff) AM_ROM
695   AM_RANGE(0x060000, 0x060007) AM_DEVREADWRITE8("sgpia", pia6821_device, read_alt, write_alt, 0xff00)
696   AM_RANGE(0x070000, 0x070fff) AM_RAM
697ADDRESS_MAP_END
698
699
700/********* PIA interfaces ***********/
701static const pia6821_interface soundsgood_pia_intf =
702{
703   DEVCB_NULL,      /* port A in */
704   DEVCB_NULL,      /* port B in */
705   DEVCB_NULL,      /* line CA1 in */
706   DEVCB_NULL,      /* line CB1 in */
707   DEVCB_NULL,      /* line CA2 in */
708   DEVCB_NULL,      /* line CB2 in */
709   DEVCB_HANDLER(soundsgood_porta_w),      /* port A out */
710   DEVCB_HANDLER(soundsgood_portb_w),      /* port B out */
711   DEVCB_NULL,      /* line CA2 out */
712   DEVCB_NULL,      /* port CB2 out */
713   DEVCB_LINE(soundsgood_irq),      /* IRQA */
714   DEVCB_LINE(soundsgood_irq)      /* IRQB */
715};
716
717
718/********* machine driver ***********/
719MACHINE_CONFIG_FRAGMENT(sounds_good)
720   MCFG_CPU_ADD("sgcpu", M68000, SOUNDSGOOD_CLOCK/2)
721   MCFG_CPU_PROGRAM_MAP(soundsgood_map)
722
723   MCFG_PIA6821_ADD("sgpia", soundsgood_pia_intf)
724
725   MCFG_SPEAKER_STANDARD_MONO("mono")
726   MCFG_SOUND_ADD("sgdac", DAC, 0)
727   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
728MACHINE_CONFIG_END
729
730
731
732/*************************************
733 *
734 *  MCR Turbo Chip Squeak communications
735 *
736 *  MC6809, 1 PIA, 10-bit DAC
737 *
738 *************************************/
739
740/********* internal interfaces ***********/
741static WRITE8_DEVICE_HANDLER( turbocs_porta_w )
742{
743   dacval = (dacval & ~0x3fc) | (data << 2);
744   dac_signed_data_16_w(device->machine().device("tcsdac"), dacval << 6);
745}
746
747static WRITE8_DEVICE_HANDLER( turbocs_portb_w )
748{
749   dacval = (dacval & ~0x003) | (data >> 6);
750   dac_signed_data_16_w(device->machine().device("tcsdac"), dacval << 6);
751   turbocs_status = (data >> 4) & 3;
752}
753
754static WRITE_LINE_DEVICE_HANDLER( turbocs_irq )
755{
756   pia6821_device *pia = downcast<pia6821_device *>(device);
757   int combined_state = pia->irq_a_state() | pia->irq_b_state();
758
759   device_set_input_line(turbocs_sound_cpu, M6809_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
760}
761
762static TIMER_CALLBACK( turbocs_delayed_data_w )
763{
764   pia6821_device *pia = machine.device<pia6821_device>("tcspia");
765
766   pia->portb_w((param >> 1) & 0x0f);
767   pia->ca1_w(~param & 0x01);
768
769   /* oftentimes games will write one nibble at a time; the sync on this is very */
770   /* important, so we boost the interleave briefly while this happens */
771   machine.scheduler().boost_interleave(attotime::zero, attotime::from_usec(100));
772}
773
774
775/********* external interfaces ***********/
776WRITE8_MEMBER(mcr_state::turbocs_data_w)
777{
778   machine().scheduler().synchronize(FUNC(turbocs_delayed_data_w), data);
779}
780
781READ8_MEMBER(mcr_state::turbocs_status_r)
782{
783   return turbocs_status;
784}
785
786void turbocs_reset_w(running_machine &machine, int state)
787{
788   device_set_input_line(turbocs_sound_cpu, INPUT_LINE_RESET, state ? ASSERT_LINE : CLEAR_LINE);
789}
790
791
792/********* memory interfaces ***********/
793
794/* address map verified from schematics */
795static ADDRESS_MAP_START( turbocs_map, AS_PROGRAM, 8, mcr_state )
796   ADDRESS_MAP_UNMAP_HIGH
797   AM_RANGE(0x0000, 0x07ff) AM_MIRROR(0x3800) AM_RAM
798   AM_RANGE(0x4000, 0x4003) AM_MIRROR(0x3ffc) AM_DEVREADWRITE("tcspia", pia6821_device, read_alt, write_alt)
799   AM_RANGE(0x8000, 0xffff) AM_ROM
800ADDRESS_MAP_END
801
802
803/********* PIA interfaces ***********/
804static const pia6821_interface turbocs_pia_intf =
805{
806   DEVCB_NULL,      /* port A in */
807   DEVCB_NULL,      /* port B in */
808   DEVCB_NULL,      /* line CA1 in */
809   DEVCB_NULL,      /* line CB1 in */
810   DEVCB_NULL,      /* line CA2 in */
811   DEVCB_NULL,      /* line CB2 in */
812   DEVCB_HANDLER(turbocs_porta_w),      /* port A out */
813   DEVCB_HANDLER(turbocs_portb_w),      /* port B out */
814   DEVCB_NULL,      /* line CA2 out */
815   DEVCB_NULL,      /* port CB2 out */
816   DEVCB_LINE(turbocs_irq),      /* IRQA */
817   DEVCB_LINE(turbocs_irq)      /* IRQB */
818};
819
820
821/********* machine driver ***********/
822MACHINE_CONFIG_FRAGMENT(turbo_chip_squeak)
823   MCFG_CPU_ADD("tcscpu", M6809E, TURBOCS_CLOCK)
824   MCFG_CPU_PROGRAM_MAP(turbocs_map)
825
826   MCFG_PIA6821_ADD("tcspia", turbocs_pia_intf)
827
828   MCFG_SPEAKER_STANDARD_MONO("mono")
829   MCFG_SOUND_ADD("tcsdac", DAC, 0)
830   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
831MACHINE_CONFIG_END
832
833
834
835/*************************************
836 *
837 *  MCR Squawk n Talk communications
838 *
839 *  MC6802, 2 PIAs, TMS5200, AY8912 (not used), 8-bit DAC (not used)
840 *
841 *************************************/
842
843/********* internal interfaces ***********/
844static WRITE8_DEVICE_HANDLER( squawkntalk_porta1_w )
845{
846   logerror("Write to AY-8912 = %02X\n", data);
847}
848
849WRITE8_MEMBER(mcr_state::squawkntalk_dac_w)
850{
851   logerror("Write to DAC = %02X\n", data);
852}
853
854static WRITE8_DEVICE_HANDLER( squawkntalk_porta2_w )
855{
856   squawkntalk_tms_command = data;
857}
858
859static WRITE8_DEVICE_HANDLER( squawkntalk_portb2_w )
860{
861   device_t *tms = device->machine().device("sntspeech");
862   pia6821_device *pia = downcast<pia6821_device *>(device);
863
864   /* bits 0-1 select read/write strobes on the TMS5200 */
865   data &= 0x03;
866
867   /* write strobe -- pass the current command to the TMS5200 */
868   if (((data ^ squawkntalk_tms_strobes) & 0x02) && !(data & 0x02))
869   {
870      tms5220_data_w(tms, offset, squawkntalk_tms_command);
871
872      /* DoT expects the ready line to transition on a command/write here, so we oblige */
873      pia->ca2_w(1);
874      pia->ca2_w(0);
875   }
876
877   /* read strobe -- read the current status from the TMS5200 */
878   else if (((data ^ squawkntalk_tms_strobes) & 0x01) && !(data & 0x01))
879   {
880      pia->porta_w(tms5220_status_r(tms, offset));
881
882      /* DoT expects the ready line to transition on a command/write here, so we oblige */
883      pia->ca2_w(1);
884      pia->ca2_w(0);
885   }
886
887   /* remember the state */
888   squawkntalk_tms_strobes = data;
889}
890
891static WRITE_LINE_DEVICE_HANDLER( squawkntalk_irq )
892{
893   pia6821_device *pia0 = device->machine().device<pia6821_device>("sntpia0");
894   pia6821_device *pia1 = device->machine().device<pia6821_device>("sntpia1");
895   int combined_state = pia0->irq_a_state() | pia0->irq_b_state() | pia1->irq_a_state() | pia1->irq_b_state();
896
897   device_set_input_line(squawkntalk_sound_cpu, M6800_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
898}
899
900static TIMER_CALLBACK( squawkntalk_delayed_data_w )
901{
902   pia6821_device *pia0 = machine.device<pia6821_device>("sntpia0");
903
904   pia0->porta_w(~param & 0x0f);
905   pia0->cb1_w(~param & 0x10);
906}
907
908
909/********* external interfaces ***********/
910WRITE8_MEMBER(mcr_state::squawkntalk_data_w)
911{
912   machine().scheduler().synchronize(FUNC(squawkntalk_delayed_data_w), data);
913}
914
915void squawkntalk_reset_w(running_machine &machine, int state)
916{
917   device_set_input_line(squawkntalk_sound_cpu, INPUT_LINE_RESET, state ? ASSERT_LINE : CLEAR_LINE);
918}
919
920
921/********* memory interfaces ***********/
922
923/* address map verified from schematics */
924/* note that jumpers control the ROM sizes; if these are changed, use the alternate */
925/* address map below */
926static ADDRESS_MAP_START( squawkntalk_map, AS_PROGRAM, 8, mcr_state )
927   ADDRESS_MAP_UNMAP_HIGH
928   AM_RANGE(0x0000, 0x007f) AM_RAM      /* internal RAM */
929   AM_RANGE(0x0080, 0x0083) AM_MIRROR(0x4f6c) AM_DEVREADWRITE("sntpia0", pia6821_device, read, write)
930   AM_RANGE(0x0090, 0x0093) AM_MIRROR(0x4f6c) AM_DEVREADWRITE("sntpia1", pia6821_device, read, write)
931   AM_RANGE(0x1000, 0x1fff) AM_MIRROR(0x4000) AM_WRITE(squawkntalk_dac_w)
932   AM_RANGE(0x8000, 0xbfff) AM_MIRROR(0x4000) AM_ROM
933ADDRESS_MAP_END
934
935/* alternate address map if the ROM jumpers are changed to support a smaller */
936/* ROM size of 2k */
937#ifdef UNUSED_FUNCTION
938ADDRESS_MAP_START( squawkntalk_alt_map, AS_PROGRAM, 8, mcr_state )
939   ADDRESS_MAP_UNMAP_HIGH
940   AM_RANGE(0x0000, 0x007f) AM_RAM      /* internal RAM */
941   AM_RANGE(0x0080, 0x0083) AM_MIRROR(0x676c) AM_DEVREADWRITE("sntpia0", pia6821_device, read, write)
942   AM_RANGE(0x0090, 0x0093) AM_MIRROR(0x676c) AM_DEVREADWRITE("sntpia1", pia6821_device, read, write)
943   AM_RANGE(0x0800, 0x0fff) AM_MIRROR(0x6000) AM_WRITE(squawkntalk_dac_w)
944   AM_RANGE(0x8000, 0x9fff) AM_MIRROR(0x6000) AM_ROM
945ADDRESS_MAP_END
946#endif
947
948
949/********* PIA interfaces ***********/
950static const pia6821_interface squawkntalk_pia0_intf =
951{
952   DEVCB_NULL,      /* port A in */
953   DEVCB_NULL,      /* port B in */
954   DEVCB_NULL,      /* line CA1 in */
955   DEVCB_NULL,      /* line CB1 in */
956   DEVCB_NULL,      /* line CA2 in */
957   DEVCB_NULL,      /* line CB2 in */
958   DEVCB_HANDLER(squawkntalk_porta1_w),      /* port A out */
959   DEVCB_NULL,      /* port B out */
960   DEVCB_NULL,      /* line CA2 out */
961   DEVCB_NULL,      /* port CB2 out */
962   DEVCB_LINE(squawkntalk_irq),   /* IRQA */
963   DEVCB_LINE(squawkntalk_irq)      /* IRQB */
964};
965
966static const pia6821_interface squawkntalk_pia1_intf =
967{
968   DEVCB_NULL,      /* port A in */
969   DEVCB_NULL,      /* port B in */
970   DEVCB_NULL,      /* line CA1 in */
971   DEVCB_NULL,      /* line CB1 in */
972   DEVCB_NULL,      /* line CA2 in */
973   DEVCB_NULL,      /* line CB2 in */
974   DEVCB_HANDLER(squawkntalk_porta2_w),      /* port A out */
975   DEVCB_HANDLER(squawkntalk_portb2_w),      /* port B out */
976   DEVCB_NULL,      /* line CA2 out */
977   DEVCB_NULL,      /* port CB2 out */
978   DEVCB_LINE(squawkntalk_irq),   /* IRQA */
979   DEVCB_LINE(squawkntalk_irq)      /* IRQB */
980};
981
982
983/********* machine driver ***********/
984MACHINE_CONFIG_FRAGMENT(squawk_n_talk)
985   MCFG_CPU_ADD("sntcpu", M6802, SQUAWKTALK_CLOCK)
986   MCFG_CPU_PROGRAM_MAP(squawkntalk_map)
987
988   MCFG_PIA6821_ADD("sntpia0", squawkntalk_pia0_intf)
989   MCFG_PIA6821_ADD("sntpia1", squawkntalk_pia1_intf)
990
991   /* only used on Discs of Tron, which is stereo */
992   MCFG_SOUND_ADD("sntspeech", TMS5200, 640000)
993   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.60)
994   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.60)
995
996   /* the board also supports an AY-8912 and/or an 8-bit DAC, neither of */
997   /* which are populated on the Discs of Tron board */
998MACHINE_CONFIG_END
src/mame/audio/mcr.h
r14963r14964
1/***************************************************************************
2
3    audio/mcr.h
4
5    Functions to emulate general the various MCR sound cards.
6
7***************************************************************************/
8
9#include "machine/6821pia.h"
10
11
12
13/************ Generic MCR routines ***************/
14
15void mcr_sound_init(running_machine &machine, UINT8 config);
16void mcr_sound_reset(running_machine &machine);
17
18void ssio_reset_w(running_machine &machine, int state);
19void ssio_set_custom_input(int which, int mask, read8_delegate handler);
20void ssio_set_custom_output(int which, int mask, write8_delegate handler);
21
22void csdeluxe_reset_w(running_machine &machine, int state);
23
24void turbocs_reset_w(running_machine &machine, int state);
25
26void soundsgood_reset_w(running_machine &machine, int state);
27
28void squawkntalk_reset_w(running_machine &machine, int state);
29
30
31
32/************ Sound Configuration ***************/
33
34#define MCR_SSIO            0x01
35#define MCR_CHIP_SQUEAK_DELUXE   0x02
36#define MCR_SOUNDS_GOOD         0x04
37#define MCR_TURBO_CHIP_SQUEAK   0x08
38#define MCR_SQUAWK_N_TALK      0x10
39#define MCR_WILLIAMS_SOUND      0x20
40
41
42
43/************ SSIO input ports ***************/
44
45#define SSIO_INPUT_PORTS \
46   AM_RANGE(0x00, 0x04) AM_MIRROR(0x18) AM_READ(ssio_input_port_r) \
47   AM_RANGE(0x07, 0x07) AM_MIRROR(0x18) AM_READ(ssio_status_r) \
48   AM_RANGE(0x00, 0x07) AM_MIRROR(0x03) AM_WRITE(ssio_output_port_w) \
49   AM_RANGE(0x1c, 0x1f) AM_WRITE(ssio_data_w)
50
51
52
53/************ External definitions ***************/
54
55MACHINE_CONFIG_EXTERN( mcr_ssio );
56MACHINE_CONFIG_EXTERN( chip_squeak_deluxe );
57MACHINE_CONFIG_EXTERN( chip_squeak_deluxe_stereo );
58MACHINE_CONFIG_EXTERN( sounds_good );
59MACHINE_CONFIG_EXTERN( turbo_chip_squeak );
60MACHINE_CONFIG_EXTERN( squawk_n_talk );
src/mame/audio/atarijsa.c
r14963r14964
548548
549549         /* update the OKI bank */
550550         if (oki6295 != NULL)
551            memory_set_bank(space->machine(), "bank12", (space->machine().memory().bank("bank12") & 2) | ((data >> 1) & 1));
551            memory_set_bank(space->machine(), "bank12", (space->machine().memory().bank("bank12")->entry() & 2) | ((data >> 1) & 1));
552552
553553         /* update the bank */
554554         memcpy(bank_base, &bank_source_data[0x1000 * ((data >> 6) & 3)], 0x1000);
r14963r14964
572572
573573         /* update the OKI bank */
574574         if (oki6295 != NULL)
575            memory_set_bank(space->machine(), "bank12", (space->machine().memory().bank("bank12") & 1) | ((data >> 3) & 2));
575            memory_set_bank(space->machine(), "bank12", (space->machine().memory().bank("bank12")->entry() & 1) | ((data >> 3) & 2));
576576
577577         /* update the volumes */
578578         ym2151_volume = ((data >> 1) & 7) * 100 / 7;
r14963r14964
681681         if ((data&1) == 0) devtag_reset(space->machine(), "ymsnd");
682682
683683         /* update the OKI bank */
684         memory_set_bank(space->machine(), "bank12", (space->machine().memory().bank("bank12") & 2) | ((data >> 1) & 1));
684         memory_set_bank(space->machine(), "bank12", (space->machine().memory().bank("bank12")->entry() & 2) | ((data >> 1) & 1));
685685
686686         /* update the bank */
687687         memcpy(bank_base, &bank_source_data[0x1000 * ((data >> 6) & 3)], 0x1000);
r14963r14964
705705            */
706706
707707         /* update the OKI bank */
708         memory_set_bank(space->machine(), "bank12", (space->machine().memory().bank("bank12") & 1) | ((data >> 3) & 2));
708         memory_set_bank(space->machine(), "bank12", (space->machine().memory().bank("bank12")->entry() & 1) | ((data >> 3) & 2));
709709         memory_set_bank(space->machine(), "bank14", data >> 6);
710710
711711         /* update the volumes */
r14963r14964
790790
791791static const ym2151_interface ym2151_config =
792792{
793   atarigen_ym2151_irq_gen,
794   ym2151_ctl_w
793   DEVCB_LINE(atarigen_ym2151_irq_gen),
794   DEVCB_HANDLER(ym2151_ctl_w)
795795};
796796
797797
src/mame/audio/seibu.c
r14963r14964
3737#include "sound/3812intf.h"
3838#include "sound/2151intf.h"
3939#include "sound/2203intf.h"
40#include "sound/okiadpcm.h"
4041#include "sound/okim6295.h"
4142
4243
r14963r14964
142143typedef struct _seibu_adpcm_state seibu_adpcm_state;
143144struct _seibu_adpcm_state
144145{
145   adpcm_state m_adpcm;
146   oki_adpcm_state m_adpcm;
146147   sound_stream *m_stream;
147148   UINT32 m_current;
148149   UINT32 m_end;
r14963r14964
190191   state->m_playing = 0;
191192   state->m_stream = device->machine().sound().stream_alloc(*device, 0, 1, device->clock(), state, seibu_adpcm_callback);
192193   state->m_base = machine.region(intf->rom_region)->base();
193
194   // because legacy device tokens are just allocated as a blob, the constructor for adpcm_state
195   // is not called, so use placement new to force it to set up; when this is converted to a
196   // modern device, we can remove this grossness
197   new(&state->m_adpcm) adpcm_state;
198194   state->m_adpcm.reset();
199195}
200196
r14963r14964
474470
475471const ym2151_interface seibu_ym2151_interface =
476472{
477   seibu_ym2151_irqhandler
473   DEVCB_LINE(seibu_ym2151_irqhandler)
478474};
479475
480476const ym2203_interface seibu_ym2203_interface =
src/mame/audio/midway.c
r0r14964
1/***************************************************************************
2
3    audio/mcr.c
4
5    Functions to emulate general the various Midway sound cards.
6
7****************************************************************************
8
9    Copyright Aaron Giles
10    All rights reserved.
11
12    Redistribution and use in source and binary forms, with or without
13    modification, are permitted provided that the following conditions are
14    met:
15
16        * Redistributions of source code must retain the above copyright
17          notice, this list of conditions and the following disclaimer.
18        * Redistributions in binary form must reproduce the above copyright
19          notice, this list of conditions and the following disclaimer in
20          the documentation and/or other materials provided with the
21          distribution.
22        * Neither the name 'MAME' nor the names of its contributors may be
23          used to endorse or promote products derived from this software
24          without specific prior written permission.
25
26    THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR
27    IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
28    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
29    DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT,
30    INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
31    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
32    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
34    STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
35    IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36    POSSIBILITY OF SUCH DAMAGE.
37
38***************************************************************************/
39
40#include "emu.h"
41#include "audio/williams.h"
42#include "includes/mcr.h"
43#include "audio/midway.h"
44
45
46
47//**************************************************************************
48//  CONSTANTS
49//**************************************************************************
50
51#define SSIO_CLOCK         XTAL_16MHz
52#define CSDELUXE_CLOCK      XTAL_16MHz
53#define SOUNDSGOOD_CLOCK   XTAL_16MHz
54#define TURBOCS_CLOCK      XTAL_8MHz
55#define SQUAWKTALK_CLOCK   XTAL_3_579545MHz
56
57
58
59//**************************************************************************
60//  GLOBAL VARIABLES
61//**************************************************************************
62
63extern const device_type MIDWAY_SSIO = &device_creator<midway_ssio_device>;
64extern const device_type MIDWAY_CHIP_SQUEAK_DELUXE = &device_creator<midway_chip_squeak_deluxe_device>;
65extern const device_type MIDWAY_SOUNDS_GOOD = &device_creator<midway_sounds_good_device>;
66extern const device_type MIDWAY_TURBO_CHIP_SQUEAK = &device_creator<midway_turbo_chip_squeak_device>;
67extern const device_type MIDWAY_SQUAWK_N_TALK = &device_creator<midway_squawk_n_talk_device>;
68
69
70
71//**************************************************************************
72//  SUPER SOUND I/O BOARD (SSIO)
73//**************************************************************************
74
75//-------------------------------------------------
76//  midway_ssio_device - constructor
77//-------------------------------------------------
78
79midway_ssio_device::midway_ssio_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
80   : device_t(mconfig, MIDWAY_SSIO, "Midway SSIO Sound Board", "midssio", tag, owner, clock),
81     device_mixer_interface(mconfig, *this, 2),
82     m_cpu(*this, "cpu"),
83     m_ay0(*this, "ay0"),
84     m_ay1(*this, "ay1"),
85     m_status(0),
86     m_14024_count(0),
87     m_mute(0)
88{
89   memset(m_data, 0, sizeof(m_data));
90   memset(m_overall, 0, sizeof(m_overall));
91   memset(m_duty_cycle, 0, sizeof(m_duty_cycle));
92   memset(m_ayvolume_lookup, 0, sizeof(m_ayvolume_lookup));
93   memset(m_custom_input_mask, 0, sizeof(m_custom_input_mask));
94   memset(m_custom_output_mask, 0, sizeof(m_custom_output_mask));
95}
96
97
98//-------------------------------------------------
99//  read - return the status value
100//-------------------------------------------------
101
102READ8_MEMBER(midway_ssio_device::read)
103{
104   return m_status;
105}
106
107
108//-------------------------------------------------
109//  write - handle an external write to one of the
110//   input latches
111//-------------------------------------------------
112
113WRITE8_MEMBER(midway_ssio_device::write)
114{
115   synchronize(0, (offset << 8) | (data & 0xff));
116}
117
118
119//-------------------------------------------------
120//  reset_write - write to the reset line
121//-------------------------------------------------
122
123WRITE_LINE_MEMBER(midway_ssio_device::reset_write)
124{
125   // going high halts the CPU
126   if (state)
127   {
128      device_reset();
129      m_cpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
130   }
131   
132   // going low resets and reactivates the CPU
133   else
134      m_cpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
135}
136
137
138//-------------------------------------------------
139//  ioport_read - read from one of the I/O ports
140//  on the device
141//-------------------------------------------------
142
143READ8_MEMBER(midway_ssio_device::ioport_read)
144{
145   static const char *const port[] = { "IP0", "IP1", "IP2", "IP3", "IP4" };
146   astring tempstr;
147   UINT8 result = input_port_read_safe(machine(), subtag(tempstr, port[offset]), 0xff);
148   if (!m_custom_input[offset].isnull())
149      result = (result & ~m_custom_input_mask[offset]) |
150               (m_custom_input[offset](space, offset, 0xff) & m_custom_input_mask[offset]);
151   return result;
152}
153
154
155//-------------------------------------------------
156//  ioport_write - write to one of the I/O ports
157//  on the device
158//-------------------------------------------------
159
160WRITE8_MEMBER(midway_ssio_device::ioport_write)
161{
162   int which = offset >> 2;
163   if (!m_custom_output[which].isnull())
164      m_custom_output[which](space, offset, data & m_custom_output_mask[which], 0xff);
165}
166
167
168//-------------------------------------------------
169//  set_custom_input - configure a custom port
170//   reader
171//-------------------------------------------------
172
173void midway_ssio_device::set_custom_input(int which, UINT8 mask, read8_delegate handler)
174{
175   m_custom_input[which] = handler;
176   m_custom_input_mask[which] = mask;
177}
178
179
180//-------------------------------------------------
181//  set_custom_output - configure a custom port
182//   writer
183//-------------------------------------------------
184
185void midway_ssio_device::set_custom_output(int which, UINT8 mask, write8_delegate handler)
186{
187   m_custom_output[which/4] = handler;
188   m_custom_output_mask[which/4] = mask;
189}
190
191
192//-------------------------------------------------
193//  compute_ay8910_modulation - precompute
194//   volume modulation tables based on the duty
195//   cycle described by the PROMs
196//-------------------------------------------------
197
198void midway_ssio_device::compute_ay8910_modulation()
199{
200   //
201   // AY-8910 modulation:
202   //
203   // Starts with a 16MHz oscillator
204   //   /2 via 7474 flip-flip @ F11
205   //
206   // This signal clocks the binary counter @ E11 which
207   // cascades into the decade counter @ D11. This combo
208   // effectively counts from 0-159 and then wraps. The
209   // value from these counters is input to an 82S123 PROM,
210   // which appears to be standard on all games.
211   //
212   // One bit at a time from this PROM is clocked at a time
213   // and the resulting inverted signal becomes a clock for
214   // the down counters at F3, F4, F5, F8, F9, and F10. The
215   // value in these down counters are reloaded after the 160
216   // counts from the binary/decade counter combination.
217   //
218   // When these down counters are loaded, the TC signal is
219   // clear, which mutes the voice. When the down counters
220   // cross through 0, the TC signal goes high and the 4016
221   // multiplexers allow the AY-8910 voice to go through.
222   // Thus, writing a 0 to the counters will enable the
223   // voice for the longest period of time, while writing
224   // a 15 enables it for the shortest period of time.
225   // This creates an effective duty cycle for the voice.
226   //
227   // Given that the down counters are reset 50000 times per
228   // second (SSIO_CLOCK/2/160), which is above the typical
229   // frequency of sound output. So we simply apply a volume
230   // adjustment to each voice according to the duty cycle.
231   //
232
233   // loop over all possible values of the duty cycle
234   UINT8 *prom = machine().region("proms")->base();
235   for (int volval = 0; volval < 16; volval++)
236   {
237      // loop over all the clocks until we run out; look up in the PROM
238      // to find out when the next clock should fire
239      int remaining_clocks = volval;
240      int cur = 0, prev = 1;
241      int curclock;
242      for (curclock = 0; curclock < 160 && remaining_clocks; curclock++)
243      {
244         cur = prom[curclock / 8] & (0x80 >> (curclock % 8));
245
246         // check for a high -> low transition
247         if (cur == 0 && prev != 0)
248            remaining_clocks--;
249
250         prev = cur;
251      }
252
253      // treat the duty cycle as a volume
254      m_ayvolume_lookup[15 - volval] = curclock * 100 / 160;
255   }
256}
257
258
259//-------------------------------------------------
260//  clock_14024 - periodic timer to clock the
261//   7-bit async counter at C12
262//-------------------------------------------------
263
264INTERRUPT_GEN_MEMBER(midway_ssio_device::clock_14024)
265{
266   //
267    //  /SINT is generated as follows:
268    //
269    //  Starts with a 16MHz oscillator
270    //      /2 via 7474 flip-flop @ F11
271    //      /16 via 74161 binary counter @ E11
272    //      /10 via 74190 decade counter @ D11
273    //
274    //  Bit 3 of the decade counter clocks a 14024 7-bit async counter @ C12.
275    //  This routine is called to clock this 7-bit counter.
276    //  Bit 6 of the output is inverted and connected to /SINT.
277    //
278   m_14024_count = (m_14024_count + 1) & 0x7f;
279
280   // if the low 5 bits clocked to 0, bit 6 has changed state
281   if ((m_14024_count & 0x3f) == 0)
282      m_cpu->set_input_line(0, (m_14024_count & 0x40) ? ASSERT_LINE : CLEAR_LINE);
283}
284
285
286//-------------------------------------------------
287//  irq_clear - reset the IRQ state and 14024 count
288//-------------------------------------------------
289
290READ8_MEMBER(midway_ssio_device::irq_clear)
291{
292   // a read here asynchronously resets the 14024 count, clearing /SINT
293   m_14024_count = 0;
294   m_cpu->set_input_line(0, CLEAR_LINE);
295   return 0xff;
296}
297
298
299//-------------------------------------------------
300//  status_w - set the outgoing status value
301//-------------------------------------------------
302
303WRITE8_MEMBER(midway_ssio_device::status_w)
304{
305   m_status = data;
306}
307
308
309//-------------------------------------------------
310//  data_r - read incoming data latches
311//-------------------------------------------------
312
313READ8_MEMBER(midway_ssio_device::data_r)
314{
315   return m_data[offset];
316}
317
318
319//-------------------------------------------------
320//  porta0_w - handle writes to AY-8910 #0 port A
321//-------------------------------------------------
322
323WRITE8_MEMBER(midway_ssio_device::porta0_w)
324{
325   m_duty_cycle[0][0] = data & 15;
326   m_duty_cycle[0][1] = data >> 4;
327   update_volumes();
328}
329
330
331//-------------------------------------------------
332//  portb0_w - handle writes to AY-8910 #0 port B
333//-------------------------------------------------
334
335WRITE8_MEMBER(midway_ssio_device::portb0_w)
336{
337   m_duty_cycle[0][2] = data & 15;
338   m_overall[0] = (data >> 4) & 7;
339   update_volumes();
340}
341
342
343//-------------------------------------------------
344//  porta1_w - handle writes to AY-8910 #1 port A
345//-------------------------------------------------
346
347WRITE8_MEMBER(midway_ssio_device::porta1_w)
348{
349   m_duty_cycle[1][0] = data & 15;
350   m_duty_cycle[1][1] = data >> 4;
351   update_volumes();
352}
353
354
355//-------------------------------------------------
356//  portb1_w - handle writes to AY-8910 #1 port B
357//-------------------------------------------------
358
359WRITE8_MEMBER(midway_ssio_device::portb1_w)
360{
361   m_duty_cycle[1][2] = data & 15;
362   m_overall[1] = (data >> 4) & 7;
363   m_mute = data & 0x80;
364   update_volumes();
365}
366
367
368//-------------------------------------------------
369//  update_volumes - update the volumes of each
370//   AY-8910 channel based on modulation and mute
371//-------------------------------------------------
372
373void midway_ssio_device::update_volumes()
374{
375   ay8910_set_volume(m_ay0, 0, m_mute ? 0 : m_ayvolume_lookup[m_duty_cycle[0][0]]);
376   ay8910_set_volume(m_ay0, 1, m_mute ? 0 : m_ayvolume_lookup[m_duty_cycle[0][1]]);
377   ay8910_set_volume(m_ay0, 2, m_mute ? 0 : m_ayvolume_lookup[m_duty_cycle[0][2]]);
378   ay8910_set_volume(m_ay1, 0, m_mute ? 0 : m_ayvolume_lookup[m_duty_cycle[1][0]]);
379   ay8910_set_volume(m_ay1, 1, m_mute ? 0 : m_ayvolume_lookup[m_duty_cycle[1][1]]);
380   ay8910_set_volume(m_ay1, 2, m_mute ? 0 : m_ayvolume_lookup[m_duty_cycle[1][2]]);
381}
382
383
384//-------------------------------------------------
385//  AY-8910 interfaces
386//-------------------------------------------------
387
388static const ay8910_interface ssio_ay8910_interface_1 =
389{
390   AY8910_LEGACY_OUTPUT,
391   AY8910_DEFAULT_LOADS,
392   DEVCB_NULL,
393   DEVCB_NULL,
394   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, midway_ssio_device, porta0_w),
395   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, midway_ssio_device, portb0_w)
396};
397
398static const ay8910_interface ssio_ay8910_interface_2 =
399{
400   AY8910_LEGACY_OUTPUT,
401   AY8910_DEFAULT_LOADS,
402   DEVCB_NULL,
403   DEVCB_NULL,
404   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, midway_ssio_device, porta1_w),
405   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, midway_ssio_device, portb1_w)
406};
407
408
409//-------------------------------------------------
410//  audio CPU map
411//-------------------------------------------------
412
413// address map verified from schematics
414static ADDRESS_MAP_START( ssio_map, AS_PROGRAM, 8, midway_ssio_device )
415   ADDRESS_MAP_UNMAP_HIGH
416   AM_RANGE(0x0000, 0x3fff) AM_ROM
417   AM_RANGE(0x8000, 0x83ff) AM_MIRROR(0x0c00) AM_RAM
418   AM_RANGE(0x9000, 0x9003) AM_MIRROR(0x0ffc) AM_READ(data_r)
419   AM_RANGE(0xa000, 0xa000) AM_MIRROR(0x0ffc) AM_DEVWRITE_LEGACY("ay0", ay8910_address_w)
420   AM_RANGE(0xa001, 0xa001) AM_MIRROR(0x0ffc) AM_DEVREAD_LEGACY("ay0", ay8910_r)
421   AM_RANGE(0xa002, 0xa002) AM_MIRROR(0x0ffc) AM_DEVWRITE_LEGACY("ay0", ay8910_data_w)
422   AM_RANGE(0xb000, 0xb000) AM_MIRROR(0x0ffc) AM_DEVWRITE_LEGACY("ay1", ay8910_address_w)
423   AM_RANGE(0xb001, 0xb001) AM_MIRROR(0x0ffc) AM_DEVREAD_LEGACY("ay1", ay8910_r)
424   AM_RANGE(0xb002, 0xb002) AM_MIRROR(0x0ffc) AM_DEVWRITE_LEGACY("ay1", ay8910_data_w)
425   AM_RANGE(0xc000, 0xcfff) AM_READNOP AM_WRITE(status_w)
426   AM_RANGE(0xd000, 0xdfff) AM_WRITENOP   // low bit controls yellow LED
427   AM_RANGE(0xe000, 0xefff) AM_READ(irq_clear)
428   AM_RANGE(0xf000, 0xffff) AM_READ_PORT("DIP")   // 6 DIP switches
429ADDRESS_MAP_END
430
431
432//-------------------------------------------------
433//  machine configuration
434//-------------------------------------------------
435
436static MACHINE_CONFIG_FRAGMENT( midway_ssio )
437   MCFG_CPU_ADD("cpu", Z80, SSIO_CLOCK/2/4)
438   MCFG_CPU_PROGRAM_MAP(ssio_map)
439   MCFG_DEVICE_PERIODIC_INT_DEVICE(DEVICE_SELF_OWNER, midway_ssio_device, clock_14024, SSIO_CLOCK/2/16/10)
440
441   MCFG_SOUND_ADD("ay0", AY8910, SSIO_CLOCK/2/4)
442   MCFG_SOUND_CONFIG(ssio_ay8910_interface_1)
443   MCFG_MIXER_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 0.33, 0)
444
445   MCFG_SOUND_ADD("ay1", AY8910, SSIO_CLOCK/2/4)
446   MCFG_SOUND_CONFIG(ssio_ay8910_interface_2)
447   MCFG_MIXER_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 0.33, 1)
448MACHINE_CONFIG_END
449
450
451//-------------------------------------------------
452//  device_mconfig_additions - return a pointer to
453//  the device's machine fragment
454//-------------------------------------------------
455
456machine_config_constructor midway_ssio_device::device_mconfig_additions() const
457{
458   return MACHINE_CONFIG_NAME( midway_ssio );
459}
460
461
462//-------------------------------------------------
463//  device_input_ports - return a pointer to
464//  the device's I/O ports
465//-------------------------------------------------
466
467ioport_constructor midway_ssio_device::device_input_ports() const
468{
469   return NULL;
470//   return INPUT_PORTS_NAME( midway_ssio );
471}
472
473
474//-------------------------------------------------
475//  device_start - device-specific startup
476//-------------------------------------------------
477
478void midway_ssio_device::device_start()
479{
480   compute_ay8910_modulation();
481   save_item(NAME(m_data));
482   save_item(NAME(m_status));
483   save_item(NAME(m_14024_count));
484   save_item(NAME(m_mute));
485   save_item(NAME(m_overall));
486   save_item(NAME(m_duty_cycle));
487}
488
489
490//-------------------------------------------------
491//  device_reset - device-specific reset
492//-------------------------------------------------
493
494void midway_ssio_device::device_reset()
495{
496   // latches also get reset
497   memset(m_data, 0, sizeof(m_data));
498   m_status = 0;
499   m_14024_count = 0;
500}
501
502
503//-------------------------------------------------
504//  device_timer - timer callbacks
505//-------------------------------------------------
506
507void midway_ssio_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
508{
509   m_data[param >> 8] = param & 0xff;
510}
511
512
513
514//**************************************************************************
515//  CHIP SQUEAK DELUXE BOARD
516//**************************************************************************
517
518//-------------------------------------------------
519//  midway_chip_squeak_deluxe_device - constructor
520//-------------------------------------------------
521
522midway_chip_squeak_deluxe_device::midway_chip_squeak_deluxe_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
523   : device_t(mconfig, MIDWAY_CHIP_SQUEAK_DELUXE, "Midway Chip Squeak Deluxe Sound Board", "midcsd", tag, owner, clock),
524     device_mixer_interface(mconfig, *this),
525     m_cpu(*this, "cpu"),
526     m_pia(*this, "pia"),
527     m_dac(*this, "dac"),
528     m_status(0),
529     m_dacval(0)
530{
531}
532
533
534//-------------------------------------------------
535//  read - return the status value
536//-------------------------------------------------
537
538READ8_MEMBER(midway_chip_squeak_deluxe_device::read)
539{
540   return m_status;
541}
542
543
544//-------------------------------------------------
545//  write - handle an external write to the input
546//   latch
547//-------------------------------------------------
548
549WRITE8_MEMBER(midway_chip_squeak_deluxe_device::write)
550{
551   synchronize(0, data);
552}
553
554
555//-------------------------------------------------
556//  reset_write - write to the reset line
557//-------------------------------------------------
558
559WRITE_LINE_MEMBER(midway_chip_squeak_deluxe_device::reset_write)
560{
561   m_cpu->set_input_line(INPUT_LINE_RESET, state ? ASSERT_LINE : CLEAR_LINE);
562}
563
564
565//-------------------------------------------------
566//  porta_w - PIA port A writes
567//-------------------------------------------------
568
569WRITE8_MEMBER(midway_chip_squeak_deluxe_device::porta_w)
570{
571   m_dacval = (m_dacval & ~0x3fc) | (data << 2);
572   dac_signed_data_16_w(m_dac, m_dacval << 6);
573}
574
575
576//-------------------------------------------------
577//  portb_w - PIA port B writes
578//-------------------------------------------------
579
580WRITE8_MEMBER(midway_chip_squeak_deluxe_device::portb_w)
581{
582   m_dacval = (m_dacval & ~0x003) | (data >> 6);
583   dac_signed_data_16_w(m_dac, m_dacval << 6);
584
585   UINT8 z_mask = m_pia->port_b_z_mask();
586   if (~z_mask & 0x10)  m_status = (m_status & ~1) | ((data >> 4) & 1);
587   if (~z_mask & 0x20)  m_status = (m_status & ~2) | ((data >> 4) & 2);
588}
589
590
591//-------------------------------------------------
592//  irq_w - IRQ line state changes
593//-------------------------------------------------
594
595WRITE_LINE_MEMBER(midway_chip_squeak_deluxe_device::irq_w)
596{
597   int combined_state = m_pia->irq_a_state() | m_pia->irq_b_state();
598   m_cpu->set_input_line(4, combined_state ? ASSERT_LINE : CLEAR_LINE);
599}
600
601
602//-------------------------------------------------
603//  pia_r - PIA read access
604//-------------------------------------------------
605
606READ16_MEMBER(midway_chip_squeak_deluxe_device::pia_r)
607{
608   // Spy Hunter accesses the MSB; Turbo Tag access via the LSB
609   // My guess is that Turbo Tag works through a fluke, whereby the 68000
610   // using the MOVEP instruction outputs the same value on the high and
611   // low bytes.
612   if (ACCESSING_BITS_8_15)
613      return m_pia->read_alt(space, offset) << 8;
614   else
615      return m_pia->read_alt(space, offset);
616}
617
618
619//-------------------------------------------------
620//  pia_w - PIA write access
621//-------------------------------------------------
622
623WRITE16_MEMBER(midway_chip_squeak_deluxe_device::pia_w)
624{
625   if (ACCESSING_BITS_8_15)
626      m_pia->write_alt(space, offset, data >> 8);
627   else
628      m_pia->write_alt(space, offset, data);
629}
630
631
632//-------------------------------------------------
633//  audio CPU map
634//-------------------------------------------------
635
636// address map determined by PAL; not verified
637static ADDRESS_MAP_START( csdeluxe_map, AS_PROGRAM, 16, midway_chip_squeak_deluxe_device )
638   ADDRESS_MAP_UNMAP_HIGH
639   ADDRESS_MAP_GLOBAL_MASK(0x1ffff)
640   AM_RANGE(0x000000, 0x007fff) AM_ROM
641   AM_RANGE(0x018000, 0x018007) AM_READWRITE(pia_r, pia_w)
642   AM_RANGE(0x01c000, 0x01cfff) AM_RAM
643ADDRESS_MAP_END
644
645
646//-------------------------------------------------
647//  6821 PIA interface
648//-------------------------------------------------
649
650static const pia6821_interface csdeluxe_pia_intf =
651{
652   DEVCB_NULL,      // port A in
653   DEVCB_NULL,      // port B in
654   DEVCB_NULL,      // line CA1 in
655   DEVCB_NULL,      // line CB1 in
656   DEVCB_NULL,      // line CA2 in
657   DEVCB_NULL,      // line CB2 in
658   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, midway_chip_squeak_deluxe_device, porta_w),   // port A out
659   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, midway_chip_squeak_deluxe_device, portb_w),   // port B out
660   DEVCB_NULL,      // line CA2 out
661   DEVCB_NULL,      // port CB2 out
662   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, midway_chip_squeak_deluxe_device, irq_w),   // IRQA
663   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, midway_chip_squeak_deluxe_device, irq_w)   // IRQB
664};
665
666
667//-------------------------------------------------
668//  machine configuration
669//-------------------------------------------------
670
671static MACHINE_CONFIG_FRAGMENT(midway_chip_squeak_deluxe)
672   MCFG_CPU_ADD("cpu", M68000, CSDELUXE_CLOCK/2)
673   MCFG_CPU_PROGRAM_MAP(csdeluxe_map)
674
675   MCFG_PIA6821_ADD("pia", csdeluxe_pia_intf)
676
677   MCFG_SOUND_ADD("dac", DAC, 0)
678   MCFG_SOUND_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 1.0)
679MACHINE_CONFIG_END
680
681
682//-------------------------------------------------
683//  device_mconfig_additions - return a pointer to
684//  the device's machine fragment
685//-------------------------------------------------
686
687machine_config_constructor midway_chip_squeak_deluxe_device::device_mconfig_additions() const
688{
689   return MACHINE_CONFIG_NAME( midway_chip_squeak_deluxe );
690}
691
692
693//-------------------------------------------------
694//  device_start - device-specific startup
695//-------------------------------------------------
696
697void midway_chip_squeak_deluxe_device::device_start()
698{
699   save_item(NAME(m_status));
700   save_item(NAME(m_dacval));
701}
702
703
704//-------------------------------------------------
705//  device_reset - device-specific reset
706//-------------------------------------------------
707
708void midway_chip_squeak_deluxe_device::device_reset()
709{
710}
711
712
713//-------------------------------------------------
714//  device_timer - timer callbacks
715//-------------------------------------------------
716
717void midway_chip_squeak_deluxe_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
718{
719   m_pia->portb_w(param & 0x0f);
720   m_pia->ca1_w(~param & 0x10);
721
722   // oftentimes games will write one nibble at a time; the sync on this is very
723   // important, so we boost the interleave briefly while this happens
724   machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(100));
725}
726
727
728
729//**************************************************************************
730//  SOUNDS GOOD BOARD
731//**************************************************************************
732
733//-------------------------------------------------
734//  midway_sounds_good_device - constructor
735//-------------------------------------------------
736
737midway_sounds_good_device::midway_sounds_good_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
738   : device_t(mconfig, MIDWAY_SOUNDS_GOOD, "Midway Sounds Good Sound Board", "midsg", tag, owner, clock),
739     device_mixer_interface(mconfig, *this),
740     m_cpu(*this, "cpu"),
741     m_pia(*this, "pia"),
742     m_dac(*this, "dac"),
743     m_status(0),
744     m_dacval(0)
745{
746}
747
748
749//-------------------------------------------------
750//  read - return the status value
751//-------------------------------------------------
752
753READ8_MEMBER(midway_sounds_good_device::read)
754{
755   return m_status;
756}
757
758
759//-------------------------------------------------
760//  write - handle an external write to the input
761//   latch
762//-------------------------------------------------
763
764WRITE8_MEMBER(midway_sounds_good_device::write)
765{
766   synchronize(0, data);
767}
768
769
770//-------------------------------------------------
771//  reset_write - write to the reset line
772//-------------------------------------------------
773
774WRITE_LINE_MEMBER(midway_sounds_good_device::reset_write)
775{
776//if (state) mame_printf_debug("SG Reset\n");
777   m_cpu->set_input_line(INPUT_LINE_RESET, state ? ASSERT_LINE : CLEAR_LINE);
778}
779
780
781//-------------------------------------------------
782//  porta_w - PIA port A writes
783//-------------------------------------------------
784
785WRITE8_MEMBER(midway_sounds_good_device::porta_w)
786{
787   m_dacval = (m_dacval & ~0x3fc) | (data << 2);
788   dac_signed_data_16_w(m_dac, m_dacval << 6);
789}
790
791
792//-------------------------------------------------
793//  portb_w - PIA port B writes
794//-------------------------------------------------
795
796WRITE8_MEMBER(midway_sounds_good_device::portb_w)
797{
798   UINT8 z_mask = m_pia->port_b_z_mask();
799
800   m_dacval = (m_dacval & ~0x003) | (data >> 6);
801   dac_signed_data_16_w(m_dac, m_dacval << 6);
802
803   if (~z_mask & 0x10)  m_status = (m_status & ~1) | ((data >> 4) & 1);
804   if (~z_mask & 0x20)  m_status = (m_status & ~2) | ((data >> 4) & 2);
805}
806
807
808//-------------------------------------------------
809//  irq_w - IRQ line state changes
810//-------------------------------------------------
811
812WRITE_LINE_MEMBER(midway_sounds_good_device::irq_w)
813{
814   int combined_state = m_pia->irq_a_state() | m_pia->irq_b_state();
815   m_cpu->set_input_line(4, combined_state ? ASSERT_LINE : CLEAR_LINE);
816}
817
818
819//-------------------------------------------------
820//  audio CPU map
821//-------------------------------------------------
822
823// address map determined by PAL; not verified
824static ADDRESS_MAP_START( soundsgood_map, AS_PROGRAM, 16, midway_sounds_good_device )
825   ADDRESS_MAP_UNMAP_HIGH
826   ADDRESS_MAP_GLOBAL_MASK(0x7ffff)
827   AM_RANGE(0x000000, 0x03ffff) AM_ROM
828   AM_RANGE(0x060000, 0x060007) AM_DEVREADWRITE8("pia", pia6821_device, read_alt, write_alt, 0xff00)
829   AM_RANGE(0x070000, 0x070fff) AM_RAM
830ADDRESS_MAP_END
831
832
833//-------------------------------------------------
834//  6821 PIA interface
835//-------------------------------------------------
836
837static const pia6821_interface soundsgood_pia_intf =
838{
839   DEVCB_NULL,      // port A in
840   DEVCB_NULL,      // port B in
841   DEVCB_NULL,      // line CA1 in
842   DEVCB_NULL,      // line CB1 in
843   DEVCB_NULL,      // line CA2 in
844   DEVCB_NULL,      // line CB2 in
845   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, midway_sounds_good_device, porta_w),   // port A out
846   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, midway_sounds_good_device, portb_w),   // port B out
847   DEVCB_NULL,      // line CA2 out
848   DEVCB_NULL,      // port CB2 out
849   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, midway_sounds_good_device, irq_w),   // IRQA
850   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, midway_sounds_good_device, irq_w)   // IRQB
851};
852
853
854//-------------------------------------------------
855//  machine configuration
856//-------------------------------------------------
857
858static MACHINE_CONFIG_FRAGMENT(midway_sounds_good)
859   MCFG_CPU_ADD("cpu", M68000, SOUNDSGOOD_CLOCK/2)
860   MCFG_CPU_PROGRAM_MAP(soundsgood_map)
861
862   MCFG_PIA6821_ADD("pia", soundsgood_pia_intf)
863
864   MCFG_SOUND_ADD("dac", DAC, 0)
865   MCFG_SOUND_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 1.0)
866MACHINE_CONFIG_END
867
868
869//-------------------------------------------------
870//  device_mconfig_additions - return a pointer to
871//  the device's machine fragment
872//-------------------------------------------------
873
874machine_config_constructor midway_sounds_good_device::device_mconfig_additions() const
875{
876   return MACHINE_CONFIG_NAME( midway_sounds_good );
877}
878
879
880//-------------------------------------------------
881//  device_start - device-specific startup
882//-------------------------------------------------
883
884void midway_sounds_good_device::device_start()
885{
886   save_item(NAME(m_status));
887   save_item(NAME(m_dacval));
888}
889
890
891//-------------------------------------------------
892//  device_reset - device-specific reset
893//-------------------------------------------------
894
895void midway_sounds_good_device::device_reset()
896{
897}
898
899
900//-------------------------------------------------
901//  device_timer - timer callbacks
902//-------------------------------------------------
903
904void midway_sounds_good_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
905{
906   m_pia->portb_w((param >> 1) & 0x0f);
907   m_pia->ca1_w(~param & 0x01);
908
909   // oftentimes games will write one nibble at a time; the sync on this is very
910   // important, so we boost the interleave briefly while this happens
911   machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(250));
912}
913
914
915
916//**************************************************************************
917//  TURBO CHIP SQUEAK BOARD
918//**************************************************************************
919
920//-------------------------------------------------
921//  midway_turbo_chip_squeak_device - constructor
922//-------------------------------------------------
923
924midway_turbo_chip_squeak_device::midway_turbo_chip_squeak_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
925   : device_t(mconfig, MIDWAY_TURBO_CHIP_SQUEAK, "Midway Turbo Chip Squeak Sound Board", "midtcs", tag, owner, clock),
926     device_mixer_interface(mconfig, *this),
927     m_cpu(*this, "cpu"),
928     m_pia(*this, "pia"),
929     m_dac(*this, "dac"),
930     m_status(0),
931     m_dacval(0)
932{
933}
934
935
936//-------------------------------------------------
937//  read - return the status value
938//-------------------------------------------------
939
940READ8_MEMBER(midway_turbo_chip_squeak_device::read)
941{
942   return m_status;
943}
944
945
946//-------------------------------------------------
947//  write - handle an external write to the input
948//   latch
949//-------------------------------------------------
950
951WRITE8_MEMBER(midway_turbo_chip_squeak_device::write)
952{
953   synchronize(0, data);
954}
955
956
957//-------------------------------------------------
958//  reset_write - write to the reset line
959//-------------------------------------------------
960
961WRITE_LINE_MEMBER(midway_turbo_chip_squeak_device::reset_write)
962{
963   m_cpu->set_input_line(INPUT_LINE_RESET, state ? ASSERT_LINE : CLEAR_LINE);
964}
965
966
967//-------------------------------------------------
968//  porta_w - PIA port A writes
969//-------------------------------------------------
970
971WRITE8_MEMBER(midway_turbo_chip_squeak_device::porta_w)
972{
973   m_dacval = (m_dacval & ~0x3fc) | (data << 2);
974   dac_signed_data_16_w(m_dac, m_dacval << 6);
975}
976
977
978//-------------------------------------------------
979//  portb_w - PIA port B writes
980//-------------------------------------------------
981
982WRITE8_MEMBER(midway_turbo_chip_squeak_device::portb_w)
983{
984   m_dacval = (m_dacval & ~0x003) | (data >> 6);
985   dac_signed_data_16_w(m_dac, m_dacval << 6);
986   m_status = (data >> 4) & 3;
987}
988
989
990//-------------------------------------------------
991//  irq_w - IRQ line state changes
992//-------------------------------------------------
993
994WRITE_LINE_MEMBER(midway_turbo_chip_squeak_device::irq_w)
995{
996   int combined_state = m_pia->irq_a_state() | m_pia->irq_b_state();
997   m_cpu->set_input_line(M6809_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
998}
999
1000
1001//-------------------------------------------------
1002//  audio CPU map
1003//-------------------------------------------------
1004
1005// address map verified from schematics
1006static ADDRESS_MAP_START( turbocs_map, AS_PROGRAM, 8, midway_turbo_chip_squeak_device )
1007   ADDRESS_MAP_UNMAP_HIGH
1008   AM_RANGE(0x0000, 0x07ff) AM_MIRROR(0x3800) AM_RAM
1009   AM_RANGE(0x4000, 0x4003) AM_MIRROR(0x3ffc) AM_DEVREADWRITE("pia", pia6821_device, read_alt, write_alt)
1010   AM_RANGE(0x8000, 0xffff) AM_ROM
1011ADDRESS_MAP_END
1012
1013
1014//-------------------------------------------------
1015//  6821 PIA interface
1016//-------------------------------------------------
1017
1018static const pia6821_interface turbocs_pia_intf =
1019{
1020   DEVCB_NULL,      // port A in
1021   DEVCB_NULL,      // port B in
1022   DEVCB_NULL,      // line CA1 in
1023   DEVCB_NULL,      // line CB1 in
1024   DEVCB_NULL,      // line CA2 in
1025   DEVCB_NULL,      // line CB2 in
1026   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, midway_turbo_chip_squeak_device, porta_w),      // port A out
1027   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, midway_turbo_chip_squeak_device, portb_w),      // port B out
1028   DEVCB_NULL,      // line CA2 out
1029   DEVCB_NULL,      // port CB2 out
1030   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, midway_turbo_chip_squeak_device, irq_w),   // IRQA
1031   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, midway_turbo_chip_squeak_device, irq_w)      // IRQB
1032};
1033
1034
1035//-------------------------------------------------
1036//  machine configuration
1037//-------------------------------------------------
1038
1039static MACHINE_CONFIG_FRAGMENT(midway_turbo_chip_squeak)
1040   MCFG_CPU_ADD("cpu", M6809E, TURBOCS_CLOCK)
1041   MCFG_CPU_PROGRAM_MAP(turbocs_map)
1042
1043   MCFG_PIA6821_ADD("pia", turbocs_pia_intf)
1044
1045   MCFG_SOUND_ADD("dac", DAC, 0)
1046   MCFG_SOUND_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 1.0)
1047MACHINE_CONFIG_END
1048
1049
1050//-------------------------------------------------
1051//  device_mconfig_additions - return a pointer to
1052//  the device's machine fragment
1053//-------------------------------------------------
1054
1055machine_config_constructor midway_turbo_chip_squeak_device::device_mconfig_additions() const
1056{
1057   return MACHINE_CONFIG_NAME( midway_turbo_chip_squeak );
1058}
1059
1060
1061//-------------------------------------------------
1062//  device_start - device-specific startup
1063//-------------------------------------------------
1064
1065void midway_turbo_chip_squeak_device::device_start()
1066{
1067   save_item(NAME(m_status));
1068   save_item(NAME(m_dacval));
1069}
1070
1071
1072//-------------------------------------------------
1073//  device_reset - device-specific reset
1074//-------------------------------------------------
1075
1076void midway_turbo_chip_squeak_device::device_reset()
1077{
1078}
1079
1080
1081//-------------------------------------------------
1082//  device_timer - timer callbacks
1083//-------------------------------------------------
1084
1085void midway_turbo_chip_squeak_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
1086{
1087   m_pia->portb_w((param >> 1) & 0x0f);
1088   m_pia->ca1_w(~param & 0x01);
1089
1090   // oftentimes games will write one nibble at a time; the sync on this is very
1091   // important, so we boost the interleave briefly while this happens
1092   machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(100));
1093}
1094
1095
1096//**************************************************************************
1097//  SQUAWK 'N' TALK BOARD
1098//**************************************************************************
1099
1100//-------------------------------------------------
1101//  midway_squawk_n_talk_device - constructor
1102//-------------------------------------------------
1103
1104midway_squawk_n_talk_device::midway_squawk_n_talk_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
1105   : device_t(mconfig, MIDWAY_SQUAWK_N_TALK, "Midway Squawk 'n' Talk Sound Board", "midsnt", tag, owner, clock),
1106     device_mixer_interface(mconfig, *this),
1107     m_cpu(*this, "cpu"),
1108     m_pia0(*this, "pia0"),
1109     m_pia1(*this, "pia1"),
1110     m_tms5200(*this, "tms5200"),
1111     m_tms_command(0),
1112     m_tms_strobes(0)
1113{
1114}
1115
1116
1117//-------------------------------------------------
1118//  write - handle an external write to the input
1119//   latch
1120//-------------------------------------------------
1121
1122WRITE8_MEMBER(midway_squawk_n_talk_device::write)
1123{
1124   synchronize(0, data);
1125}
1126
1127
1128//-------------------------------------------------
1129//  reset_write - write to the reset line
1130//-------------------------------------------------
1131
1132WRITE_LINE_MEMBER(midway_squawk_n_talk_device::reset_write)
1133{
1134   m_cpu->set_input_line(INPUT_LINE_RESET, state ? ASSERT_LINE : CLEAR_LINE);
1135}
1136
1137
1138//-------------------------------------------------
1139//  porta1_w - PIA #1 port A writes
1140//-------------------------------------------------
1141
1142WRITE8_MEMBER(midway_squawk_n_talk_device::porta1_w )
1143{
1144   logerror("Write to AY-8912 = %02X\n", data);
1145}
1146
1147
1148//-------------------------------------------------
1149//  dac_w - DAC data writes
1150//-------------------------------------------------
1151
1152WRITE8_MEMBER(midway_squawk_n_talk_device::dac_w)
1153{
1154   logerror("Write to DAC = %02X\n", data);
1155}
1156
1157
1158//-------------------------------------------------
1159//  porta2_w - PIA #2 port A writes
1160//-------------------------------------------------
1161
1162WRITE8_MEMBER(midway_squawk_n_talk_device::porta2_w)
1163{
1164   m_tms_command = data;
1165}
1166
1167
1168//-------------------------------------------------
1169//  portb2_w - PIA #2 port B writes
1170//-------------------------------------------------
1171
1172WRITE8_MEMBER(midway_squawk_n_talk_device::portb2_w)
1173{
1174   // bits 0-1 select read/write strobes on the TMS5200
1175   data &= 0x03;
1176
1177   // write strobe -- pass the current command to the TMS5200
1178   if (((data ^ m_tms_strobes) & 0x02) && !(data & 0x02))
1179   {
1180      tms5220_data_w(m_tms5200, offset, m_tms_command);
1181
1182      // DoT expects the ready line to transition on a command/write here, so we oblige
1183      m_pia1->ca2_w(1);
1184      m_pia1->ca2_w(0);
1185   }
1186
1187   // read strobe -- read the current status from the TMS5200
1188   else if (((data ^ m_tms_strobes) & 0x01) && !(data & 0x01))
1189   {
1190      m_pia1->porta_w(tms5220_status_r(m_tms5200, offset));
1191
1192      // DoT expects the ready line to transition on a command/write here, so we oblige
1193      m_pia1->ca2_w(1);
1194      m_pia1->ca2_w(0);
1195   }
1196
1197   // remember the state
1198   m_tms_strobes = data;
1199}
1200
1201
1202//-------------------------------------------------
1203//  irq_w - IRQ line state changes
1204//-------------------------------------------------
1205
1206WRITE_LINE_MEMBER(midway_squawk_n_talk_device::irq_w)
1207{
1208   int combined_state = m_pia0->irq_a_state() | m_pia0->irq_b_state() | m_pia1->irq_a_state() | m_pia1->irq_b_state();
1209   m_cpu->set_input_line(M6800_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
1210}
1211
1212
1213//-------------------------------------------------
1214//  audio CPU map
1215//-------------------------------------------------
1216
1217// address map verified from schematics
1218// note that jumpers control the ROM sizes; if these are changed, use the alternate
1219// address map below
1220static ADDRESS_MAP_START( squawkntalk_map, AS_PROGRAM, 8, midway_squawk_n_talk_device )
1221   ADDRESS_MAP_UNMAP_HIGH
1222   AM_RANGE(0x0000, 0x007f) AM_RAM      // internal RAM
1223   AM_RANGE(0x0080, 0x0083) AM_MIRROR(0x4f6c) AM_DEVREADWRITE("pia0", pia6821_device, read, write)
1224   AM_RANGE(0x0090, 0x0093) AM_MIRROR(0x4f6c) AM_DEVREADWRITE("pia1", pia6821_device, read, write)
1225   AM_RANGE(0x1000, 0x1fff) AM_MIRROR(0x4000) AM_WRITE(dac_w)
1226   AM_RANGE(0x8000, 0xbfff) AM_MIRROR(0x4000) AM_ROM
1227ADDRESS_MAP_END
1228
1229// alternate address map if the ROM jumpers are changed to support a smaller
1230// ROM size of 2k
1231#ifdef UNUSED_FUNCTION
1232static ADDRESS_MAP_START( squawkntalk_alt_map, AS_PROGRAM, 8, midway_squawk_n_talk_device )
1233   ADDRESS_MAP_UNMAP_HIGH
1234   AM_RANGE(0x0000, 0x007f) AM_RAM      // internal RAM
1235   AM_RANGE(0x0080, 0x0083) AM_MIRROR(0x676c) AM_DEVREADWRITE("pia0", pia6821_device, read, write)
1236   AM_RANGE(0x0090, 0x0093) AM_MIRROR(0x676c) AM_DEVREADWRITE("pia1", pia6821_device, read, write)
1237   AM_RANGE(0x0800, 0x0fff) AM_MIRROR(0x6000) AM_WRITE(dac_w)
1238   AM_RANGE(0x8000, 0x9fff) AM_MIRROR(0x6000) AM_ROM
1239ADDRESS_MAP_END
1240#endif
1241
1242
1243//-------------------------------------------------
1244//  6821 PIA interfaces
1245//-------------------------------------------------
1246
1247static const pia6821_interface squawkntalk_pia0_intf =
1248{
1249   DEVCB_NULL,      // port A in
1250   DEVCB_NULL,      // port B in
1251   DEVCB_NULL,      // line CA1 in
1252   DEVCB_NULL,      // line CB1 in
1253   DEVCB_NULL,      // line CA2 in
1254   DEVCB_NULL,      // line CB2 in
1255   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, midway_squawk_n_talk_device, porta1_w),   // port A out
1256   DEVCB_NULL,      // port B out
1257   DEVCB_NULL,      // line CA2 out
1258   DEVCB_NULL,      // port CB2 out
1259   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, midway_squawk_n_talk_device, irq_w),   // IRQA
1260   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, midway_squawk_n_talk_device, irq_w)      // IRQB
1261};
1262
1263static const pia6821_interface squawkntalk_pia1_intf =
1264{
1265   DEVCB_NULL,      // port A in
1266   DEVCB_NULL,      // port B in
1267   DEVCB_NULL,      // line CA1 in
1268   DEVCB_NULL,      // line CB1 in
1269   DEVCB_NULL,      // line CA2 in
1270   DEVCB_NULL,      // line CB2 in
1271   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, midway_squawk_n_talk_device, porta2_w),      // port A out
1272   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, midway_squawk_n_talk_device, portb2_w),      // port B out
1273   DEVCB_NULL,      // line CA2 out
1274   DEVCB_NULL,      // port CB2 out
1275   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, midway_squawk_n_talk_device, irq_w),   // IRQA
1276   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, midway_squawk_n_talk_device, irq_w)      // IRQB
1277};
1278
1279
1280//-------------------------------------------------
1281//  machine configuration
1282//-------------------------------------------------
1283
1284static MACHINE_CONFIG_FRAGMENT(midway_squawk_n_talk)
1285   MCFG_CPU_ADD("cpu", M6802, SQUAWKTALK_CLOCK)
1286   MCFG_CPU_PROGRAM_MAP(squawkntalk_map)
1287
1288   MCFG_PIA6821_ADD("pia0", squawkntalk_pia0_intf)
1289   MCFG_PIA6821_ADD("pia1", squawkntalk_pia1_intf)
1290
1291   // only used on Discs of Tron, which is stereo
1292   MCFG_SOUND_ADD("tms5200", TMS5200, 640000)
1293   MCFG_SOUND_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 0.60)
1294
1295   // the board also supports an AY-8912 and/or an 8-bit DAC, neither of
1296   // which are populated on the Discs of Tron board
1297MACHINE_CONFIG_END
1298
1299
1300//-------------------------------------------------
1301//  device_mconfig_additions - return a pointer to
1302//  the device's machine fragment
1303//-------------------------------------------------
1304
1305machine_config_constructor midway_squawk_n_talk_device::device_mconfig_additions() const
1306{
1307   return MACHINE_CONFIG_NAME( midway_squawk_n_talk );
1308}
1309
1310
1311//-------------------------------------------------
1312//  device_start - device-specific startup
1313//-------------------------------------------------
1314
1315void midway_squawk_n_talk_device::device_start()
1316{
1317   save_item(NAME(m_tms_command));
1318   save_item(NAME(m_tms_strobes));
1319}
1320
1321
1322//-------------------------------------------------
1323//  device_reset - device-specific reset
1324//-------------------------------------------------
1325
1326void midway_squawk_n_talk_device::device_reset()
1327{
1328}
1329
1330
1331//-------------------------------------------------
1332//  device_timer - timer callbacks
1333//-------------------------------------------------
1334
1335void midway_squawk_n_talk_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
1336{
1337   m_pia0->porta_w(~param & 0x0f);
1338   m_pia0->cb1_w(~param & 0x10);
1339}
src/mame/audio/midway.h
r0r14964
1/***************************************************************************
2
3    audio/midway.h
4
5    Functions to emulate general the various Midway sound cards.
6
7****************************************************************************
8
9    Copyright Aaron Giles
10    All rights reserved.
11
12    Redistribution and use in source and binary forms, with or without
13    modification, are permitted provided that the following conditions are
14    met:
15
16        * Redistributions of source code must retain the above copyright
17          notice, this list of conditions and the following disclaimer.
18        * Redistributions in binary form must reproduce the above copyright
19          notice, this list of conditions and the following disclaimer in
20          the documentation and/or other materials provided with the
21          distribution.
22        * Neither the name 'MAME' nor the names of its contributors may be
23          used to endorse or promote products derived from this software
24          without specific prior written permission.
25
26    THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR
27    IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
28    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
29    DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT,
30    INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
31    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
32    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
34    STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
35    IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36    POSSIBILITY OF SUCH DAMAGE.
37
38***************************************************************************/
39
40#pragma once
41
42#ifndef __MIDWAY_AUDIO__
43#define __MIDWAY_AUDIO__
44
45#include "cpu/z80/z80.h"
46#include "cpu/m68000/m68000.h"
47#include "cpu/m6800/m6800.h"
48#include "cpu/m6809/m6809.h"
49#include "machine/6821pia.h"
50#include "sound/tms5220.h"
51#include "sound/ay8910.h"
52#include "sound/dac.h"
53
54
55//**************************************************************************
56//  GLOBAL VARIABLES
57//**************************************************************************
58
59extern const device_type MIDWAY_SSIO;
60extern const device_type MIDWAY_CHIP_SQUEAK_DELUXE;
61extern const device_type MIDWAY_SOUNDS_GOOD;
62extern const device_type MIDWAY_TURBO_CHIP_SQUEAK;
63extern const device_type MIDWAY_SQUAWK_N_TALK;
64
65
66
67//**************************************************************************
68//  DEVICE CONFIGURATION MACROS
69//**************************************************************************
70
71#define MCFG_MIDWAY_SSIO_ADD(_tag) \
72   MCFG_DEVICE_ADD(_tag, MIDWAY_SSIO, 0) \
73
74#define MCFG_MIDWAY_CHIP_SQUEAK_DELUXE_ADD(_tag) \
75   MCFG_DEVICE_ADD(_tag, MIDWAY_CHIP_SQUEAK_DELUXE, 0) \
76
77#define MCFG_MIDWAY_SOUNDS_GOOD_ADD(_tag) \
78   MCFG_DEVICE_ADD(_tag, MIDWAY_SOUNDS_GOOD, 0) \
79
80#define MCFG_MIDWAY_TURBO_CHIP_SQUEAK_ADD(_tag) \
81   MCFG_DEVICE_ADD(_tag, MIDWAY_TURBO_CHIP_SQUEAK, 0) \
82
83#define MCFG_MIDWAY_SQUAWK_N_TALK_ADD(_tag) \
84   MCFG_DEVICE_ADD(_tag, MIDWAY_SQUAWK_N_TALK, 0) \
85
86
87
88//**************************************************************************
89//  TYPE DEFINITIONS
90//**************************************************************************
91
92// ======================> midway_ssio_device
93
94class midway_ssio_device :   public device_t,
95                     public device_mixer_interface
96{
97public:
98   // construction/destruction
99   midway_ssio_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
100
101   // read/write
102   DECLARE_READ8_MEMBER(read);
103   DECLARE_WRITE8_MEMBER(write);
104   DECLARE_WRITE_LINE_MEMBER(reset_write);
105   DECLARE_READ8_MEMBER(ioport_read);
106   DECLARE_WRITE8_MEMBER(ioport_write);
107   
108   // configuration
109   void set_custom_input(int which, UINT8 mask, read8_delegate handler);
110   void set_custom_output(int which, UINT8 mask, write8_delegate handler);
111
112   // internal communications
113   INTERRUPT_GEN_MEMBER(clock_14024);
114   READ8_MEMBER(irq_clear);
115   DECLARE_WRITE8_MEMBER(status_w);
116   DECLARE_READ8_MEMBER(data_r);
117   DECLARE_WRITE8_MEMBER(porta0_w);
118   DECLARE_WRITE8_MEMBER(portb0_w);
119   DECLARE_WRITE8_MEMBER(porta1_w);
120   DECLARE_WRITE8_MEMBER(portb1_w);
121
122protected:
123   // device-level overrides
124   virtual machine_config_constructor device_mconfig_additions() const;
125   virtual ioport_constructor device_input_ports() const;
126   virtual void device_start();
127   virtual void device_reset();
128   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
129
130private:
131   // internal helpers
132   void compute_ay8910_modulation();
133   void update_volumes();
134
135   // devices
136   required_device<z80_device> m_cpu;
137   required_device<ay8910_device> m_ay0;
138   required_device<ay8910_device> m_ay1;
139
140   // internal state
141   UINT8 m_data[4];
142   UINT8 m_status;
143   UINT8 m_14024_count;
144   UINT8 m_mute;
145   UINT8 m_overall[2];
146   UINT8 m_duty_cycle[2][3];
147   UINT8 m_ayvolume_lookup[16];
148
149   // I/O port overrides
150   UINT8 m_custom_input_mask[5];
151   read8_delegate m_custom_input[5];
152   UINT8 m_custom_output_mask[2];
153   write8_delegate m_custom_output[2];
154};
155
156
157// ======================> midway_chip_squeak_deluxe_device
158
159class midway_chip_squeak_deluxe_device :   public device_t,
160                                 public device_mixer_interface
161{
162public:
163   // construction/destruction
164   midway_chip_squeak_deluxe_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
165
166   // read/write
167   DECLARE_READ8_MEMBER(read);
168   DECLARE_WRITE8_MEMBER(write);
169   DECLARE_WRITE_LINE_MEMBER(reset_write);
170
171   // internal communications
172   DECLARE_WRITE8_MEMBER(porta_w);
173   DECLARE_WRITE8_MEMBER(portb_w);
174   DECLARE_WRITE_LINE_MEMBER(irq_w);
175   DECLARE_READ16_MEMBER(pia_r);
176   DECLARE_WRITE16_MEMBER(pia_w);
177
178protected:
179   // device-level overrides
180   virtual machine_config_constructor device_mconfig_additions() const;
181   virtual void device_start();
182   virtual void device_reset();
183   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
184
185private:
186   // devices
187   required_device<m68000_device> m_cpu;
188   required_device<pia6821_device> m_pia;
189   required_device<dac_device> m_dac;
190
191   // internal state
192   UINT8 m_status;
193   UINT16 m_dacval;
194};
195
196
197// ======================> midway_sounds_good_device
198
199class midway_sounds_good_device :   public device_t,
200                           public device_mixer_interface
201{
202public:
203   // construction/destruction
204   midway_sounds_good_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
205
206   // read/write
207   DECLARE_READ8_MEMBER(read);
208   DECLARE_WRITE8_MEMBER(write);
209   DECLARE_WRITE_LINE_MEMBER(reset_write);
210
211   // internal communications
212   DECLARE_WRITE8_MEMBER(porta_w);
213   DECLARE_WRITE8_MEMBER(portb_w);
214   DECLARE_WRITE_LINE_MEMBER(irq_w);
215
216protected:
217   // device-level overrides
218   virtual machine_config_constructor device_mconfig_additions() const;
219   virtual void device_start();
220   virtual void device_reset();
221   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
222
223private:
224   // devices
225   required_device<m68000_device> m_cpu;
226   required_device<pia6821_device> m_pia;
227   required_device<dac_device> m_dac;
228
229   // internal state
230   UINT8 m_status;
231   UINT16 m_dacval;
232};
233
234
235// ======================> midway_turbo_chip_squeak_device
236
237class midway_turbo_chip_squeak_device :   public device_t,
238                              public device_mixer_interface
239{
240public:
241   // construction/destruction
242   midway_turbo_chip_squeak_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
243
244   // read/write
245   DECLARE_READ8_MEMBER(read);
246   DECLARE_WRITE8_MEMBER(write);
247   DECLARE_WRITE_LINE_MEMBER(reset_write);
248
249   // internal communications
250   DECLARE_WRITE8_MEMBER(porta_w);
251   DECLARE_WRITE8_MEMBER(portb_w);
252   DECLARE_WRITE_LINE_MEMBER(irq_w);
253
254protected:
255   // device-level overrides
256   virtual machine_config_constructor device_mconfig_additions() const;
257   virtual void device_start();
258   virtual void device_reset();
259   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
260
261private:
262   // devices
263   required_device<m6809e_device> m_cpu;
264   required_device<pia6821_device> m_pia;
265   required_device<dac_device> m_dac;
266
267   // internal state
268   UINT8 m_status;
269   UINT16 m_dacval;
270};
271
272
273// ======================> midway_squawk_n_talk_device
274
275class midway_squawk_n_talk_device :   public device_t,
276                           public device_mixer_interface
277{
278public:
279   // construction/destruction
280   midway_squawk_n_talk_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
281
282   // read/write
283   DECLARE_WRITE8_MEMBER(write);
284   DECLARE_WRITE_LINE_MEMBER(reset_write);
285
286   // internal communications
287   DECLARE_WRITE8_MEMBER(porta1_w);
288   DECLARE_WRITE8_MEMBER(dac_w);
289   DECLARE_WRITE8_MEMBER(porta2_w);
290   DECLARE_WRITE8_MEMBER(portb2_w);
291   DECLARE_WRITE_LINE_MEMBER(irq_w);
292
293protected:
294   // device-level overrides
295   virtual machine_config_constructor device_mconfig_additions() const;
296   virtual void device_start();
297   virtual void device_reset();
298   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
299
300private:
301   // devices
302   required_device<m6802_device> m_cpu;
303   required_device<pia6821_device> m_pia0;
304   required_device<pia6821_device> m_pia1;
305   optional_device<tms5200_device> m_tms5200;
306
307   // internal state
308   UINT8 m_tms_command;
309   UINT8 m_tms_strobes;
310};
311
312
313/************ SSIO input ports ***************/
314
315#define SSIO_INPUT_PORTS(ssio) \
316   AM_RANGE(0x00, 0x04) AM_MIRROR(0x18) AM_DEVREAD(ssio, midway_ssio_device, ioport_read) \
317   AM_RANGE(0x07, 0x07) AM_MIRROR(0x18) AM_DEVREAD(ssio, midway_ssio_device, read) \
318   AM_RANGE(0x00, 0x07) AM_MIRROR(0x03) AM_DEVWRITE(ssio, midway_ssio_device, ioport_write) \
319   AM_RANGE(0x1c, 0x1f) AM_DEVWRITE(ssio, midway_ssio_device, write)
320
321
322#endif /* __MIDWAY_AUDIO__ */
src/mame/audio/t5182.c
r14963r14964
272272
273273const ym2151_interface t5182_ym2151_interface =
274274{
275   t5182_ym2151_irq_handler
275   DEVCB_LINE(t5182_ym2151_irq_handler)
276276};
277277
278278
src/mame/audio/williams.c
r14963r14964
11/***************************************************************************
22
3    audio/williams.h
4
5    Functions to emulate general the various Williams/Midway sound cards.
6
7****************************************************************************
8
9    Copyright Aaron Giles
10    All rights reserved.
11
12    Redistribution and use in source and binary forms, with or without
13    modification, are permitted provided that the following conditions are
14    met:
15
16        * Redistributions of source code must retain the above copyright
17          notice, this list of conditions and the following disclaimer.
18        * Redistributions in binary form must reproduce the above copyright
19          notice, this list of conditions and the following disclaimer in
20          the documentation and/or other materials provided with the
21          distribution.
22        * Neither the name 'MAME' nor the names of its contributors may be
23          used to endorse or promote products derived from this software
24          without specific prior written permission.
25
26    THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR
27    IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
28    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
29    DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT,
30    INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
31    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
32    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
34    STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
35    IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36    POSSIBILITY OF SUCH DAMAGE.
37
38****************************************************************************
39
340    Midway/Williams Audio Boards
441    ----------------------------
542
r14963r14964
4380
4481
4582
46/***************************************************************************
47    STATIC GLOBALS
48****************************************************************************/
83//**************************************************************************
84//  GLOBAL VARIABLES
85//**************************************************************************
4986
50typedef struct _williams_audio_state williams_audio_state;
51struct _williams_audio_state
52{
53   UINT8 sound_int_state;
87extern const device_type WILLIAMS_NARC_SOUND = &device_creator<williams_narc_sound_device>;
88extern const device_type WILLIAMS_CVSD_SOUND = &device_creator<williams_cvsd_sound_device>;
89extern const device_type WILLIAMS_ADPCM_SOUND = &device_creator<williams_adpcm_sound_device>;
5490
55   UINT8 audio_talkback;
56   UINT8 audio_sync;
5791
58   device_t *sound_cpu;
59   device_t *soundalt_cpu;
60};
6192
62static williams_audio_state audio;
93//**************************************************************************
94//  CVSD SOUND BOARD
95//**************************************************************************
6396
64/***************************************************************************
65    FUNCTION PROTOTYPES
66****************************************************************************/
97//-------------------------------------------------
98//  williams_cvsd_sound_device - constructor
99//-------------------------------------------------
67100
68static void init_audio_state(running_machine &machine);
101williams_cvsd_sound_device::williams_cvsd_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
102   : device_t(mconfig, WILLIAMS_CVSD_SOUND, "Williams CVSD Sound Board", "wmscvsd", tag, owner, clock),
103     device_mixer_interface(mconfig, *this),
104     m_cpu(*this, "cpu"),
105     m_pia(*this, "pia"),
106     m_hc55516(*this, "cvsd"),
107     m_talkback(0)
108{
109}
69110
70static void cvsd_ym2151_irq(device_t *device, int state);
71static void adpcm_ym2151_irq(device_t *device, int state);
72static WRITE_LINE_DEVICE_HANDLER( cvsd_irqa );
73static WRITE_LINE_DEVICE_HANDLER( cvsd_irqb );
74111
75static WRITE8_HANDLER( cvsd_bank_select_w );
76static WRITE8_DEVICE_HANDLER( cvsd_talkback_w );
77static WRITE8_DEVICE_HANDLER( cvsd_digit_clock_clear_w );
78static WRITE8_DEVICE_HANDLER( cvsd_clock_set_w );
112//-------------------------------------------------
113//  write - handle an external write to the input
114//   latch
115//-------------------------------------------------
79116
80static READ8_HANDLER( adpcm_command_r );
81static WRITE8_HANDLER( adpcm_bank_select_w );
82static WRITE8_DEVICE_HANDLER( adpcm_6295_bank_select_w );
83static WRITE8_HANDLER( adpcm_talkback_w );
117WRITE16_MEMBER(williams_cvsd_sound_device::write)
118{
119   synchronize(0, data);
120}
84121
85static READ8_HANDLER( narc_command_r );
86static READ8_HANDLER( narc_command2_r );
87static WRITE8_HANDLER( narc_command2_w );
88static WRITE8_HANDLER( narc_master_bank_select_w );
89static WRITE8_HANDLER( narc_slave_bank_select_w );
90static WRITE8_HANDLER( narc_master_talkback_w );
91static WRITE8_HANDLER( narc_master_sync_w );
92static WRITE8_HANDLER( narc_slave_talkback_w );
93static WRITE8_HANDLER( narc_slave_sync_w );
94122
123//-------------------------------------------------
124//  reset_write - write to the reset line
125//-------------------------------------------------
95126
127WRITE_LINE_MEMBER(williams_cvsd_sound_device::reset_write)
128{
129   // going high halts the CPU
130   if (state)
131   {
132      bank_select_w(*m_cpu->space(), 0, 0);
133      device_reset();
134      m_cpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
135   }
96136
97/***************************************************************************
98    PROCESSOR STRUCTURES
99****************************************************************************/
137   // going low resets and reactivates the CPU
138   else
139      m_cpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
140}
100141
101/* CVSD readmem/writemem structures */
102static ADDRESS_MAP_START( williams_cvsd_map, AS_PROGRAM, 8, driver_device )
103   AM_RANGE(0x0000, 0x07ff) AM_MIRROR(0x1800) AM_RAM
104   AM_RANGE(0x2000, 0x2001) AM_MIRROR(0x1ffe) AM_DEVREADWRITE_LEGACY("ymsnd", ym2151_r, ym2151_w)
105   AM_RANGE(0x4000, 0x4003) AM_MIRROR(0x1ffc) AM_DEVREADWRITE("cvsdpia", pia6821_device, read, write)
106   AM_RANGE(0x6000, 0x6000) AM_MIRROR(0x07ff) AM_DEVWRITE_LEGACY("cvsd", cvsd_digit_clock_clear_w)
107   AM_RANGE(0x6800, 0x6800) AM_MIRROR(0x07ff) AM_DEVWRITE_LEGACY("cvsd", cvsd_clock_set_w)
108   AM_RANGE(0x7800, 0x7800) AM_MIRROR(0x07ff) AM_WRITE_LEGACY(cvsd_bank_select_w)
109   AM_RANGE(0x8000, 0xffff) AM_ROMBANK("bank5")
110ADDRESS_MAP_END
111142
143//-------------------------------------------------
144//  bank_select_w - change memory banks
145//-------------------------------------------------
112146
113/* NARC master readmem/writemem structures */
114static ADDRESS_MAP_START( williams_narc_master_map, AS_PROGRAM, 8, driver_device )
115   AM_RANGE(0x0000, 0x1fff) AM_RAM
116   AM_RANGE(0x2000, 0x2001) AM_MIRROR(0x03fe) AM_DEVREADWRITE_LEGACY("ymsnd", ym2151_r, ym2151_w)
117   AM_RANGE(0x2800, 0x2800) AM_MIRROR(0x03ff) AM_WRITE_LEGACY(narc_master_talkback_w)
118   AM_RANGE(0x2c00, 0x2c00) AM_MIRROR(0x03ff) AM_WRITE_LEGACY(narc_command2_w)
119   AM_RANGE(0x3000, 0x3000) AM_MIRROR(0x03ff) AM_DEVWRITE_LEGACY("dac1", dac_w)
120   AM_RANGE(0x3400, 0x3400) AM_MIRROR(0x03ff) AM_READ_LEGACY(narc_command_r)
121   AM_RANGE(0x3800, 0x3800) AM_MIRROR(0x03ff) AM_WRITE_LEGACY(narc_master_bank_select_w)
122   AM_RANGE(0x3c00, 0x3c00) AM_MIRROR(0x03ff) AM_WRITE_LEGACY(narc_master_sync_w)
123   AM_RANGE(0x4000, 0xbfff) AM_ROMBANK("bank5")
124   AM_RANGE(0xc000, 0xffff) AM_ROMBANK("bank6")
125ADDRESS_MAP_END
147WRITE8_MEMBER(williams_cvsd_sound_device::bank_select_w)
148{
149   subbank("rombank")->set_entry(data & 0x0f);
150}
126151
127/* NARC slave readmem/writemem structures */
128static ADDRESS_MAP_START( williams_narc_slave_map, AS_PROGRAM, 8, driver_device )
129   AM_RANGE(0x0000, 0x1fff) AM_RAM
130   AM_RANGE(0x2000, 0x2000) AM_MIRROR(0x03ff) AM_DEVWRITE_LEGACY("cvsd", cvsd_clock_set_w)
131   AM_RANGE(0x2400, 0x2400) AM_MIRROR(0x03ff) AM_DEVWRITE_LEGACY("cvsd", cvsd_digit_clock_clear_w)
132   AM_RANGE(0x2800, 0x2800) AM_MIRROR(0x03ff) AM_WRITE_LEGACY(narc_slave_talkback_w)
133   AM_RANGE(0x3000, 0x3000) AM_MIRROR(0x03ff) AM_DEVWRITE_LEGACY("dac2", dac_w)
134   AM_RANGE(0x3400, 0x3400) AM_MIRROR(0x03ff) AM_READ_LEGACY(narc_command2_r)
135   AM_RANGE(0x3800, 0x3800) AM_MIRROR(0x03ff) AM_WRITE_LEGACY(narc_slave_bank_select_w)
136   AM_RANGE(0x3c00, 0x3c00) AM_MIRROR(0x03ff) AM_WRITE_LEGACY(narc_slave_sync_w)
137   AM_RANGE(0x4000, 0xbfff) AM_ROMBANK("bank7")
138   AM_RANGE(0xc000, 0xffff) AM_ROMBANK("bank8")
139ADDRESS_MAP_END
140152
153//-------------------------------------------------
154//  talkback_w - write to the talkback latch
155//-------------------------------------------------
141156
142/* ADPCM readmem/writemem structures */
143static ADDRESS_MAP_START( williams_adpcm_map, AS_PROGRAM, 8, driver_device )
144   AM_RANGE(0x0000, 0x1fff) AM_RAM
145   AM_RANGE(0x2000, 0x2000) AM_MIRROR(0x03ff) AM_WRITE_LEGACY(adpcm_bank_select_w)
146   AM_RANGE(0x2400, 0x2401) AM_MIRROR(0x03fe) AM_DEVREADWRITE_LEGACY("ymsnd", ym2151_r, ym2151_w)
147   AM_RANGE(0x2800, 0x2800) AM_MIRROR(0x03ff) AM_DEVWRITE_LEGACY("dac", dac_w)
148   AM_RANGE(0x2c00, 0x2c00) AM_MIRROR(0x03ff) AM_DEVREADWRITE("oki", okim6295_device, read, write)
149   AM_RANGE(0x3000, 0x3000) AM_MIRROR(0x03ff) AM_READ_LEGACY(adpcm_command_r)
150   AM_RANGE(0x3400, 0x3400) AM_MIRROR(0x03ff) AM_DEVWRITE_LEGACY("oki", adpcm_6295_bank_select_w)
151   AM_RANGE(0x3c00, 0x3c00) AM_MIRROR(0x03ff) AM_WRITE_LEGACY(adpcm_talkback_w)
152   AM_RANGE(0x4000, 0xbfff) AM_ROMBANK("bank5")
153   AM_RANGE(0xc000, 0xffff) AM_ROMBANK("bank6")
154ADDRESS_MAP_END
157WRITE8_MEMBER(williams_cvsd_sound_device::talkback_w)
158{
159   m_talkback = data;
160   logerror("CVSD Talkback = %02X\n", data);
161}
155162
156163
164//-------------------------------------------------
165//  cvsd_digit_clock_clear_w - clear the clock on
166//  the HC55516 and clock the data
167//-------------------------------------------------
157168
158/* PIA structure */
159static const pia6821_interface cvsd_pia_intf =
169WRITE8_MEMBER(williams_cvsd_sound_device::cvsd_digit_clock_clear_w)
160170{
161   DEVCB_NULL,      /* port A in */
162   DEVCB_NULL,      /* port B in */
163   DEVCB_NULL,      /* line CA1 in */
164   DEVCB_NULL,      /* line CB1 in */
165   DEVCB_NULL,      /* line CA2 in */
166   DEVCB_NULL,      /* line CB2 in */
167   DEVCB_DEVICE_HANDLER("dac", dac_w),      /* port A out */
168   DEVCB_HANDLER(cvsd_talkback_w),      /* port B out */
169   DEVCB_NULL,      /* line CA2 out */
170   DEVCB_NULL,      /* port CB2 out */
171   DEVCB_LINE(cvsd_irqa),      /* IRQA */
172   DEVCB_LINE(cvsd_irqb)      /* IRQB */
173};
171   hc55516_digit_w(m_hc55516, data);
172   hc55516_clock_w(m_hc55516, 0);
173}
174174
175175
176//-------------------------------------------------
177//  cvsd_clock_set_w - set the clock on the HC55516
178//-------------------------------------------------
176179
177/***************************************************************************
178    AUDIO STRUCTURES
179****************************************************************************/
180
181/* YM2151 structure (CVSD variant) */
182static const ym2151_interface cvsd_ym2151_interface =
180WRITE8_MEMBER(williams_cvsd_sound_device::cvsd_clock_set_w)
183181{
184   cvsd_ym2151_irq
185};
182   hc55516_clock_w(m_hc55516, 1);
183}
186184
187185
188/* YM2151 structure (ADPCM variant) */
189static const ym2151_interface adpcm_ym2151_interface =
186//-------------------------------------------------
187//  ym2151_irq_w - process IRQ signal changes from
188//   the YM2151
189//-------------------------------------------------
190
191WRITE_LINE_MEMBER(williams_cvsd_sound_device::ym2151_irq_w)
190192{
191   adpcm_ym2151_irq
192};
193   m_pia->ca1_w(!state);
194}
193195
194196
197//-------------------------------------------------
198//  pia_irqa - process IRQ A signal changes from
199//   the 6821
200//-------------------------------------------------
195201
196/***************************************************************************
197    MACHINE DRIVERS
198****************************************************************************/
202WRITE_LINE_MEMBER(williams_cvsd_sound_device::pia_irqa)
203{
204   m_cpu->set_input_line(M6809_FIRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE);
205}
199206
200MACHINE_CONFIG_FRAGMENT( williams_cvsd_sound )
201   MCFG_CPU_ADD("cvsdcpu", M6809E, CVSD_MASTER_CLOCK)
202   MCFG_CPU_PROGRAM_MAP(williams_cvsd_map)
203207
204   MCFG_PIA6821_ADD("cvsdpia", cvsd_pia_intf)
208//-------------------------------------------------
209//  pia_irqb - process IRQ B signal changes from
210//   the 6821
211//-------------------------------------------------
205212
206   MCFG_SPEAKER_STANDARD_MONO("mono")
213WRITE_LINE_MEMBER(williams_cvsd_sound_device::pia_irqb)
214{
215   m_cpu->set_input_line(INPUT_LINE_NMI, state ? ASSERT_LINE : CLEAR_LINE);
216}
207217
208   MCFG_SOUND_ADD("ymsnd", YM2151, CVSD_FM_CLOCK)
209   MCFG_SOUND_CONFIG(cvsd_ym2151_interface)
210   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
211218
212   MCFG_SOUND_ADD("dac", DAC, 0)
213   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
219//-------------------------------------------------
220//  audio CPU map
221//-------------------------------------------------
214222
215   MCFG_SOUND_ADD("cvsd", HC55516, 0)
216   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
217MACHINE_CONFIG_END
223static ADDRESS_MAP_START( williams_cvsd_map, AS_PROGRAM, 8, williams_cvsd_sound_device )
224   AM_RANGE(0x0000, 0x07ff) AM_MIRROR(0x1800) AM_RAM
225   AM_RANGE(0x2000, 0x2001) AM_MIRROR(0x1ffe) AM_DEVREADWRITE_LEGACY("ym2151", ym2151_r, ym2151_w)
226   AM_RANGE(0x4000, 0x4003) AM_MIRROR(0x1ffc) AM_DEVREADWRITE("pia", pia6821_device, read, write)
227   AM_RANGE(0x6000, 0x6000) AM_MIRROR(0x07ff) AM_WRITE(cvsd_digit_clock_clear_w)
228   AM_RANGE(0x6800, 0x6800) AM_MIRROR(0x07ff) AM_WRITE(cvsd_clock_set_w)
229   AM_RANGE(0x7800, 0x7800) AM_MIRROR(0x07ff) AM_WRITE(bank_select_w)
230   AM_RANGE(0x8000, 0xffff) AM_ROMBANK("rombank")
231ADDRESS_MAP_END
218232
219233
220MACHINE_CONFIG_FRAGMENT( williams_narc_sound )
221   MCFG_CPU_ADD("narc1cpu", M6809E, NARC_MASTER_CLOCK)
222   MCFG_CPU_PROGRAM_MAP(williams_narc_master_map)
234//-------------------------------------------------
235//  6821 PIA interface
236//-------------------------------------------------
223237
224   MCFG_CPU_ADD("narc2cpu", M6809E, NARC_MASTER_CLOCK)
225   MCFG_CPU_PROGRAM_MAP(williams_narc_slave_map)
238static const pia6821_interface cvsd_pia_intf =
239{
240   DEVCB_NULL,      // port A in
241   DEVCB_NULL,      // port B in
242   DEVCB_NULL,      // line CA1 in
243   DEVCB_NULL,      // line CB1 in
244   DEVCB_NULL,      // line CA2 in
245   DEVCB_NULL,      // line CB2 in
246   DEVCB_DEVICE_HANDLER("dac", dac_w),      // port A out
247   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, williams_cvsd_sound_device, talkback_w),      // port B out
248   DEVCB_NULL,      // line CA2 out
249   DEVCB_NULL,      // port CB2 out
250   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, williams_cvsd_sound_device, pia_irqa),   // IRQA
251   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, williams_cvsd_sound_device, pia_irqb)   // IRQB
252};
226253
227   MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
228254
229   MCFG_SOUND_ADD("ymsnd", YM2151, NARC_FM_CLOCK)
230   MCFG_SOUND_CONFIG(adpcm_ym2151_interface)
231   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.10)
232   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.10)
255//-------------------------------------------------
256//  YM2151 configuration
257//-------------------------------------------------
233258
234   MCFG_SOUND_ADD("dac1", DAC, 0)
235   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50)
236   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50)
259static const ym2151_interface cvsd_ym2151_interface =
260{
261   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, williams_cvsd_sound_device, ym2151_irq_w)
262};
237263
238   MCFG_SOUND_ADD("dac2", DAC, 0)
239   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50)
240   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50)
241264
242   MCFG_SOUND_ADD("cvsd", HC55516, 0)
243   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.60)
244   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.60)
245MACHINE_CONFIG_END
265//-------------------------------------------------
266//  machine configuration
267//-------------------------------------------------
246268
269static MACHINE_CONFIG_FRAGMENT( williams_cvsd_sound )
270   MCFG_CPU_ADD("cpu", M6809E, CVSD_MASTER_CLOCK)
271   MCFG_CPU_PROGRAM_MAP(williams_cvsd_map)
247272
248MACHINE_CONFIG_FRAGMENT( williams_adpcm_sound )
249   MCFG_CPU_ADD("adpcm", M6809E, ADPCM_MASTER_CLOCK)
250   MCFG_CPU_PROGRAM_MAP(williams_adpcm_map)
273   MCFG_PIA6821_ADD("pia", cvsd_pia_intf)
251274
252   MCFG_SPEAKER_STANDARD_MONO("mono")
275   MCFG_SOUND_ADD("ym2151", YM2151, CVSD_FM_CLOCK)
276   MCFG_SOUND_CONFIG(cvsd_ym2151_interface)
277   MCFG_SOUND_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 0.10)
253278
254   MCFG_SOUND_ADD("ymsnd", YM2151, ADPCM_FM_CLOCK)
255   MCFG_SOUND_CONFIG(adpcm_ym2151_interface)
256   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
257
258279   MCFG_SOUND_ADD("dac", DAC, 0)
259   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
280   MCFG_SOUND_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 0.50)
260281
261   MCFG_OKIM6295_ADD("oki", ADPCM_MASTER_CLOCK/8, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified
262   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
282   MCFG_SOUND_ADD("cvsd", HC55516, 0)
283   MCFG_SOUND_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 0.60)
263284MACHINE_CONFIG_END
264285
265286
287//-------------------------------------------------
288//  device_mconfig_additions - return a pointer to
289//  the device's machine fragment
290//-------------------------------------------------
266291
267/***************************************************************************
268    INITIALIZATION
269****************************************************************************/
270
271void williams_cvsd_init(running_machine &machine)
292machine_config_constructor williams_cvsd_sound_device::device_mconfig_additions() const
272293{
273   williams_audio_state *state = &audio;
274   UINT8 *ROM;
275   int bank;
294   return MACHINE_CONFIG_NAME( williams_cvsd_sound );
295}
276296
277   /* configure the CPU */
278   state->sound_cpu = machine.device("cvsdcpu");
279   state->soundalt_cpu = NULL;
280297
281   /* configure master CPU banks */
282   ROM = machine.region("cvsdcpu")->base();
283   for (bank = 0; bank < 16; bank++)
298//-------------------------------------------------
299//  device_start - device-specific startup
300//-------------------------------------------------
301
302void williams_cvsd_sound_device::device_start()
303{
304   // configure master CPU banks
305   UINT8 *rom = subregion("cpu")->base();
306   for (int bank = 0; bank < 16; bank++)
284307   {
285      /*
286            D0/D1 -> selects: 0=U4 1=U19 2=U20 3=n/c
287            D2 -> A15
288            D3 -> A16
289         */
308      //
309        //  D0/D1 -> selects: 0=U4 1=U19 2=U20 3=n/c
310        //  D2 -> A15
311        //  D3 -> A16
312        //
290313      offs_t offset = 0x8000 * ((bank >> 2) & 3) + 0x20000 * (bank & 3);
291      memory_configure_bank(machine, "bank5", bank, 1, &ROM[0x10000 + offset], 0);
314      subbank("rombank")->configure_entry(bank, &rom[0x10000 + offset]);
292315   }
293   memory_set_bank(machine, "bank5", 0);
316   subbank("rombank")->set_entry(0);
294317
295   /* reset the IRQ state */
296   machine.device<pia6821_device>("cvsdpia")->ca1_w(1);
318   // reset the IRQ state
319   m_pia->ca1_w(1);
297320
298   /* register for save states */
299   state_save_register_global(machine, state->sound_int_state);
300   state_save_register_global(machine, state->audio_talkback);
321   // register for save states
322   save_item(NAME(m_talkback));
301323}
302324
303325
304void williams_narc_init(running_machine &machine)
326//-------------------------------------------------
327//  device_reset - device-specific reset
328//-------------------------------------------------
329
330void williams_cvsd_sound_device::device_reset()
305331{
306   williams_audio_state *state = &audio;
307   UINT8 *ROM;
308   int bank;
332   // reset interrupt states
333   m_cpu->set_input_line(M6809_FIRQ_LINE, CLEAR_LINE);
334   m_cpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
335   m_cpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
336}
309337
310   /* configure the CPU */
311   state->sound_cpu = machine.device("narc1cpu");
312   state->soundalt_cpu = machine.device("narc2cpu");
313338
314   /* configure master CPU banks */
315   ROM = machine.region("narc1cpu")->base();
316   for (bank = 0; bank < 16; bank++)
317   {
318      /*
319            D0 -> A15
320            D1/D2 -> selects: 0=n/c 1=U3 2=U4 3=U5
321            D3 -> A16
322         */
323      offs_t offset = 0x8000 * (bank & 1) + 0x10000 * ((bank >> 3) & 1) + 0x20000 * ((bank >> 1) & 3);
324      memory_configure_bank(machine, "bank5", bank, 1, &ROM[0x10000 + offset], 0);
325   }
326   memory_set_bankptr(machine, "bank6", &ROM[0x10000 + 0x4000 + 0x8000 + 0x10000 + 0x20000 * 3]);
339//-------------------------------------------------
340//  device_timer - timer callbacks
341//-------------------------------------------------
327342
328   /* configure slave CPU banks */
329   ROM = machine.region("narc2cpu")->base();
330   for (bank = 0; bank < 16; bank++)
331   {
332      /*
333            D0 -> A15
334            D1/D2 -> selects: 0=U35 1=U36 2=U37 3=U38
335            D3 -> A16
336        */
337      offs_t offset = 0x8000 * (bank & 1) + 0x10000 * ((bank >> 3) & 1) + 0x20000 * ((bank >> 1) & 3);
338      memory_configure_bank(machine, "bank7", bank, 1, &ROM[0x10000 + offset], 0);
339   }
340   memory_set_bankptr(machine, "bank8", &ROM[0x10000 + 0x4000 + 0x8000 + 0x10000 + 0x20000 * 3]);
341
342   /* register for save states */
343   state_save_register_global(machine, state->sound_int_state);
344   state_save_register_global(machine, state->audio_talkback);
345   state_save_register_global(machine, state->audio_sync);
343void williams_cvsd_sound_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
344{
345   // process incoming data write
346   m_pia->portb_w(param & 0xff);
347   m_pia->cb1_w((param >> 8) & 1);
348   m_pia->cb2_w((param >> 9) & 1);
346349}
347350
348351
349void williams_adpcm_init(running_machine &machine)
350{
351   williams_audio_state *state = &audio;
352   UINT8 *ROM;
353352
354   /* configure the CPU */
355   state->sound_cpu = machine.device("adpcm");
356   state->soundalt_cpu = NULL;
353//**************************************************************************
354//  NARC SOUND BOARD
355//**************************************************************************
357356
358   /* configure banks */
359   ROM = machine.region("adpcm")->base();
360   memory_configure_bank(machine, "bank5", 0, 8, &ROM[0x10000], 0x8000);
361   memory_set_bankptr(machine, "bank6", &ROM[0x10000 + 0x4000 + 7 * 0x8000]);
357//-------------------------------------------------
358//  williams_narc_sound_device - constructor
359//-------------------------------------------------
362360
363   /* expand ADPCM data */
364   /* it is assumed that U12 is loaded @ 0x00000 and U13 is loaded @ 0x40000 */
365   ROM = machine.region("oki")->base();
366   memcpy(ROM + 0x1c0000, ROM + 0x080000, 0x20000);   /* expand individual banks */
367   memcpy(ROM + 0x180000, ROM + 0x0a0000, 0x20000);
368   memcpy(ROM + 0x140000, ROM + 0x0c0000, 0x20000);
369   memcpy(ROM + 0x100000, ROM + 0x0e0000, 0x20000);
370   memcpy(ROM + 0x0c0000, ROM + 0x000000, 0x20000);
371   memcpy(ROM + 0x000000, ROM + 0x040000, 0x20000);
372   memcpy(ROM + 0x080000, ROM + 0x020000, 0x20000);
361williams_narc_sound_device::williams_narc_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
362   : device_t(mconfig, WILLIAMS_NARC_SOUND, "Williams NARC Sound Board", "wmsnarc", tag, owner, clock),
363     device_mixer_interface(mconfig, *this),
364     m_cpu0(*this, "cpu0"),
365     m_cpu1(*this, "cpu1"),
366     m_hc55516(*this, "cvsd"),
367     m_latch(0),
368     m_latch2(0),
369     m_talkback(0),
370     m_audio_sync(0),
371     m_sound_int_state(0)
372{
373}
373374
374   memcpy(ROM + 0x1e0000, ROM + 0x060000, 0x20000);   /* copy common bank */
375   memcpy(ROM + 0x1a0000, ROM + 0x060000, 0x20000);
376   memcpy(ROM + 0x160000, ROM + 0x060000, 0x20000);
377   memcpy(ROM + 0x120000, ROM + 0x060000, 0x20000);
378   memcpy(ROM + 0x0e0000, ROM + 0x060000, 0x20000);
379   memcpy(ROM + 0x0a0000, ROM + 0x060000, 0x20000);
380   memcpy(ROM + 0x020000, ROM + 0x060000, 0x20000);
381375
382   /* register for save states */
383   state_save_register_global(machine, state->sound_int_state);
384   state_save_register_global(machine, state->audio_talkback);
376//-------------------------------------------------
377//  read - return the talkback register with the
378//   SYNC bits in bits 8 and 9
379//-------------------------------------------------
380
381READ16_MEMBER(williams_narc_sound_device::read)
382{
383   return m_talkback | (m_audio_sync << 8);
385384}
386385
387386
388static void init_audio_state(running_machine &machine)
387//-------------------------------------------------
388//  write - handle an external write to the input
389//   latch
390//-------------------------------------------------
391
392WRITE16_MEMBER(williams_narc_sound_device::write)
389393{
390   williams_audio_state *state = &audio;
391   device_t *sound_cpu = state->sound_cpu;
392   device_t *soundalt_cpu = state->soundalt_cpu;
394   synchronize(TID_MASTER_COMMAND, data);
395}
393396
394   /* reset the YM2151 state */
395   devtag_reset(machine, "ymsnd");
396397
397   /* clear all the interrupts */
398   state->sound_int_state = 0;
399   if (sound_cpu != NULL)
398//-------------------------------------------------
399//  reset_write - write to the reset line
400//-------------------------------------------------
401
402WRITE_LINE_MEMBER(williams_narc_sound_device::reset_write)
403{
404   // going high halts the CPU
405   if (state)
400406   {
401      device_set_input_line(sound_cpu, M6809_FIRQ_LINE, CLEAR_LINE);
402      device_set_input_line(sound_cpu, M6809_IRQ_LINE, CLEAR_LINE);
403      device_set_input_line(sound_cpu, INPUT_LINE_NMI, CLEAR_LINE);
407      master_bank_select_w(*m_cpu0->space(), 0, 0);
408      slave_bank_select_w(*m_cpu1->space(), 0, 0);
409      device_reset();
410      m_cpu0->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
411      m_cpu1->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
404412   }
405   if (soundalt_cpu != NULL)
413
414   // going low resets and reactivates the CPU
415   else
406416   {
407      device_set_input_line(soundalt_cpu, M6809_FIRQ_LINE, CLEAR_LINE);
408      device_set_input_line(soundalt_cpu, M6809_IRQ_LINE, CLEAR_LINE);
409      device_set_input_line(soundalt_cpu, INPUT_LINE_NMI, CLEAR_LINE);
417      m_cpu0->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
418      m_cpu1->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
410419   }
411420}
412421
413422
423//-------------------------------------------------
424//  master_bank_select_w - select the bank for the
425//  master CPU
426//-------------------------------------------------
414427
415/***************************************************************************
416    CVSD IRQ GENERATION CALLBACKS
417****************************************************************************/
418
419static void cvsd_ym2151_irq(device_t *device, int state)
428WRITE8_MEMBER(williams_narc_sound_device::master_bank_select_w)
420429{
421   device->machine().device<pia6821_device>("cvsdpia")->ca1_w(!state);
430   subbank("masterbank")->set_entry(data & 0x0f);
422431}
423432
424433
425static WRITE_LINE_DEVICE_HANDLER( cvsd_irqa )
434//-------------------------------------------------
435//  slave_bank_select_w - select the bank for the
436//  slave CPU
437//-------------------------------------------------
438
439WRITE8_MEMBER(williams_narc_sound_device::slave_bank_select_w)
426440{
427   williams_audio_state *sndstate = &audio;
428
429   device_set_input_line(sndstate->sound_cpu, M6809_FIRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE);
441   subbank("slavebank")->set_entry(data & 0x0f);
430442}
431443
432444
433static WRITE_LINE_DEVICE_HANDLER( cvsd_irqb )
445//-------------------------------------------------
446//  command_r - read command written by external
447//   agent
448//-------------------------------------------------
449
450READ8_MEMBER(williams_narc_sound_device::command_r)
434451{
435   williams_audio_state *sndstate = &audio;
436
437   device_set_input_line(sndstate->sound_cpu, INPUT_LINE_NMI, state ? ASSERT_LINE : CLEAR_LINE);
452   m_cpu0->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
453   m_sound_int_state = 0;
454   return m_latch;
438455}
439456
440457
458//-------------------------------------------------
459//  command2_w - write command from master CPU to
460//   slave CPU
461//-------------------------------------------------
441462
442/***************************************************************************
443    ADPCM IRQ GENERATION CALLBACKS
444****************************************************************************/
445
446static void adpcm_ym2151_irq(device_t *device, int state)
463WRITE8_MEMBER(williams_narc_sound_device::command2_w)
447464{
448   williams_audio_state *sndstate = &audio;
449
450   device_set_input_line(sndstate->sound_cpu, M6809_FIRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE);
465   synchronize(TID_SLAVE_COMMAND, data);
451466}
452467
453468
469//-------------------------------------------------
470//  command2_r - read command written by master
471//   CPU
472//-------------------------------------------------
454473
455/***************************************************************************
456    CVSD READ/WRITE HANDLERS
457****************************************************************************/
458
459static WRITE8_HANDLER( cvsd_bank_select_w )
474READ8_MEMBER(williams_narc_sound_device::command2_r)
460475{
461   memory_set_bank(space->machine(), "bank5", data & 0x0f);
476   m_cpu1->set_input_line(M6809_FIRQ_LINE, CLEAR_LINE);
477   return m_latch2;
462478}
463479
464480
465static WRITE8_DEVICE_HANDLER( cvsd_talkback_w )
481//-------------------------------------------------
482//  master_talkback_w - handle writes to the
483//   talkback latch from the master CPU
484//-------------------------------------------------
485
486WRITE8_MEMBER(williams_narc_sound_device::master_talkback_w)
466487{
467   williams_audio_state *state = &audio;
468
469   state->audio_talkback = data;
470   logerror("CVSD Talkback = %02X\n", data);
488   m_talkback = data;
489   logerror("Master Talkback = %02X\n", data);
471490}
472491
473492
474static WRITE8_DEVICE_HANDLER( cvsd_digit_clock_clear_w )
493//-------------------------------------------------
494//  master_sync_w - handle writes to the master
495//   SYNC register
496//-------------------------------------------------
497
498WRITE8_MEMBER(williams_narc_sound_device::master_sync_w)
475499{
476   hc55516_digit_w(device, data);
477   hc55516_clock_w(device, 0);
500   timer_set(attotime::from_double(TIME_OF_74LS123(180000, 0.000001)), TID_SYNC_CLEAR, 0x01);
501   m_audio_sync |= 0x01;
502   logerror("Master sync = %02X\n", data);
478503}
479504
480505
481static WRITE8_DEVICE_HANDLER( cvsd_clock_set_w )
506//-------------------------------------------------
507//  slave_talkback_w - handle writes to the
508//   talkback latch from the slave CPU
509//-------------------------------------------------
510
511WRITE8_MEMBER(williams_narc_sound_device::slave_talkback_w)
482512{
483   hc55516_clock_w(device, 1);
513   logerror("Slave Talkback = %02X\n", data);
484514}
485515
486516
487/***************************************************************************
488    CVSD COMMUNICATIONS
489****************************************************************************/
517//-------------------------------------------------
518//  slave_sync_w - handle writes to the slave
519//   SYNC register
520//-------------------------------------------------
490521
491static TIMER_CALLBACK( williams_cvsd_delayed_data_w )
522WRITE8_MEMBER(williams_narc_sound_device::slave_sync_w)
492523{
493   pia6821_device *pia = machine.device<pia6821_device>("cvsdpia");
494   pia->portb_w(param & 0xff);
495   pia->cb1_w((param >> 8) & 1);
496   pia->cb2_w((param >> 9) & 1);
524   timer_set(attotime::from_double(TIME_OF_74LS123(180000, 0.000001)), TID_SYNC_CLEAR, 0x02);
525   m_audio_sync |= 0x02;
526   logerror("Slave sync = %02X\n", data);
497527}
498528
499529
500void williams_cvsd_data_w(running_machine &machine, int data)
530//-------------------------------------------------
531//  cvsd_digit_clock_clear_w - clear the clock on
532//  the HC55516 and clock the data
533//-------------------------------------------------
534
535WRITE8_MEMBER(williams_narc_sound_device::cvsd_digit_clock_clear_w)
501536{
502   machine.scheduler().synchronize(FUNC(williams_cvsd_delayed_data_w), data);
537   hc55516_digit_w(m_hc55516, data);
538   hc55516_clock_w(m_hc55516, 0);
503539}
504540
505541
506void williams_cvsd_reset_w(running_machine &machine, int state)
542//-------------------------------------------------
543//  cvsd_clock_set_w - set the clock on the HC55516
544//-------------------------------------------------
545
546WRITE8_MEMBER(williams_narc_sound_device::cvsd_clock_set_w)
507547{
508   williams_audio_state *sndstate = &audio;
509   address_space *space = sndstate->sound_cpu->memory().space(AS_PROGRAM);
510
511   /* going high halts the CPU */
512   if (state)
513   {
514      cvsd_bank_select_w(space, 0, 0);
515      init_audio_state(space->machine());
516      device_set_input_line(&space->device(), INPUT_LINE_RESET, ASSERT_LINE);
517   }
518   /* going low resets and reactivates the CPU */
519   else
520      device_set_input_line(&space->device(), INPUT_LINE_RESET, CLEAR_LINE);
548   hc55516_clock_w(m_hc55516, 1);
521549}
522550
523551
552//-------------------------------------------------
553//  ym2151_irq_w - handle line changes on the
554//   YM2151 IRQ line
555//-------------------------------------------------
524556
525/***************************************************************************
526    NARC READ/WRITE HANDLERS
527****************************************************************************/
528
529static WRITE8_HANDLER( narc_master_bank_select_w )
557WRITE_LINE_MEMBER(williams_narc_sound_device::ym2151_irq_w)
530558{
531   memory_set_bank(space->machine(), "bank5", data & 0x0f);
559   m_cpu0->set_input_line(M6809_FIRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE);
532560}
533561
534562
535static WRITE8_HANDLER( narc_slave_bank_select_w )
536{
537   memory_set_bank(space->machine(), "bank7", data & 0x0f);
538}
563//-------------------------------------------------
564//  master CPU map
565//-------------------------------------------------
539566
567static ADDRESS_MAP_START( williams_narc_master_map, AS_PROGRAM, 8, williams_narc_sound_device )
568   AM_RANGE(0x0000, 0x1fff) AM_RAM
569   AM_RANGE(0x2000, 0x2001) AM_MIRROR(0x03fe) AM_DEVREADWRITE_LEGACY("ym2151", ym2151_r, ym2151_w)
570   AM_RANGE(0x2800, 0x2800) AM_MIRROR(0x03ff) AM_WRITE(master_talkback_w)
571   AM_RANGE(0x2c00, 0x2c00) AM_MIRROR(0x03ff) AM_WRITE(command2_w)
572   AM_RANGE(0x3000, 0x3000) AM_MIRROR(0x03ff) AM_DEVWRITE_LEGACY("dac1", dac_w)
573   AM_RANGE(0x3400, 0x3400) AM_MIRROR(0x03ff) AM_READ(command_r)
574   AM_RANGE(0x3800, 0x3800) AM_MIRROR(0x03ff) AM_WRITE(master_bank_select_w)
575   AM_RANGE(0x3c00, 0x3c00) AM_MIRROR(0x03ff) AM_WRITE(master_sync_w)
576   AM_RANGE(0x4000, 0xbfff) AM_ROMBANK("masterbank")
577   AM_RANGE(0xc000, 0xffff) AM_ROMBANK("masterupper")
578ADDRESS_MAP_END
540579
541static READ8_HANDLER( narc_command_r )
542{
543   williams_audio_state *state = &audio;
544   driver_device *drvstate = space->machine().driver_data<driver_device>();
545   device_set_input_line(state->sound_cpu, M6809_IRQ_LINE, CLEAR_LINE);
546   state->sound_int_state = 0;
547   return drvstate->soundlatch_byte_r(*space, 0);
548}
549580
581//-------------------------------------------------
582//  slave CPU map
583//-------------------------------------------------
550584
551static WRITE8_HANDLER( narc_command2_w )
552{
553   williams_audio_state *state = &audio;
554   driver_device *drvstate = space->machine().driver_data<driver_device>();
555   drvstate->soundlatch2_byte_w(*space, 0, data & 0xff);
556   device_set_input_line(state->soundalt_cpu, M6809_FIRQ_LINE, ASSERT_LINE);
557}
585static ADDRESS_MAP_START( williams_narc_slave_map, AS_PROGRAM, 8, williams_narc_sound_device )
586   AM_RANGE(0x0000, 0x1fff) AM_RAM
587   AM_RANGE(0x2000, 0x2000) AM_MIRROR(0x03ff) AM_WRITE(cvsd_clock_set_w)
588   AM_RANGE(0x2400, 0x2400) AM_MIRROR(0x03ff) AM_WRITE(cvsd_digit_clock_clear_w)
589   AM_RANGE(0x2800, 0x2800) AM_MIRROR(0x03ff) AM_WRITE(slave_talkback_w)
590   AM_RANGE(0x3000, 0x3000) AM_MIRROR(0x03ff) AM_DEVWRITE_LEGACY("dac2", dac_w)
591   AM_RANGE(0x3400, 0x3400) AM_MIRROR(0x03ff) AM_READ(command2_r)
592   AM_RANGE(0x3800, 0x3800) AM_MIRROR(0x03ff) AM_WRITE(slave_bank_select_w)
593   AM_RANGE(0x3c00, 0x3c00) AM_MIRROR(0x03ff) AM_WRITE(slave_sync_w)
594   AM_RANGE(0x4000, 0xbfff) AM_ROMBANK("slavebank")
595   AM_RANGE(0xc000, 0xffff) AM_ROMBANK("slaveupper")
596ADDRESS_MAP_END
558597
559598
560static READ8_HANDLER( narc_command2_r )
599//-------------------------------------------------
600//  YM2151 configuration
601//-------------------------------------------------
602
603static const ym2151_interface narc_ym2151_interface =
561604{
562   williams_audio_state *state = &audio;
563   driver_device *drvstate = space->machine().driver_data<driver_device>();
564   device_set_input_line(state->soundalt_cpu, M6809_FIRQ_LINE, CLEAR_LINE);
565   return drvstate->soundlatch2_byte_r(*space, 0);
566}
605   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, williams_narc_sound_device, ym2151_irq_w)
606};
567607
568608
569static WRITE8_HANDLER( narc_master_talkback_w )
570{
571   williams_audio_state *state = &audio;
609//-------------------------------------------------
610//  machine configuration
611//-------------------------------------------------
572612
573   state->audio_talkback = data;
574   logerror("Master Talkback = %02X\n", data);
575}
613static MACHINE_CONFIG_FRAGMENT( williams_narc_sound )
614   MCFG_CPU_ADD("cpu0", M6809E, NARC_MASTER_CLOCK)
615   MCFG_CPU_PROGRAM_MAP(williams_narc_master_map)
576616
617   MCFG_CPU_ADD("cpu1", M6809E, NARC_MASTER_CLOCK)
618   MCFG_CPU_PROGRAM_MAP(williams_narc_slave_map)
577619
578static TIMER_CALLBACK( narc_sync_clear )
579{
580   williams_audio_state *state = &audio;
620   MCFG_SOUND_ADD("ym2151", YM2151, NARC_FM_CLOCK)
621   MCFG_SOUND_CONFIG(narc_ym2151_interface)
622   MCFG_SOUND_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 0.10)
581623
582   state->audio_sync &= ~param;
583}
624   MCFG_SOUND_ADD("dac1", DAC, 0)
625   MCFG_SOUND_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 0.50)
584626
585static WRITE8_HANDLER( narc_master_sync_w )
586{
587   williams_audio_state *state = &audio;
627   MCFG_SOUND_ADD("dac2", DAC, 0)
628   MCFG_SOUND_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 0.50)
588629
589   space->machine().scheduler().timer_set(attotime::from_double(TIME_OF_74LS123(180000, 0.000001)), FUNC(narc_sync_clear), 0x01);
590   state->audio_sync |= 0x01;
591   logerror("Master sync = %02X\n", data);
592}
630   MCFG_SOUND_ADD("cvsd", HC55516, 0)
631   MCFG_SOUND_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 0.60)
632MACHINE_CONFIG_END
593633
594634
595static WRITE8_HANDLER( narc_slave_talkback_w )
635//-------------------------------------------------
636//  device_mconfig_additions - return a pointer to
637//  the device's machine fragment
638//-------------------------------------------------
639
640machine_config_constructor williams_narc_sound_device::device_mconfig_additions() const
596641{
597   logerror("Slave Talkback = %02X\n", data);
642   return MACHINE_CONFIG_NAME( williams_narc_sound );
598643}
599644
600645
601static WRITE8_HANDLER( narc_slave_sync_w )
646//-------------------------------------------------
647//  device_start - device-specific startup
648//-------------------------------------------------
649
650void williams_narc_sound_device::device_start()
602651{
603   williams_audio_state *state = &audio;
652   // configure master CPU banks
653   UINT8 *rom = subregion("cpu0")->base();
654   for (int bank = 0; bank < 16; bank++)
655   {
656      //
657        //  D0 -> A15
658        //  D1/D2 -> selects: 0=n/c 1=U3 2=U4 3=U5
659        //  D3 -> A16
660        //
661      offs_t offset = 0x8000 * (bank & 1) + 0x10000 * ((bank >> 3) & 1) + 0x20000 * ((bank >> 1) & 3);
662      subbank("masterbank")->configure_entry(bank, &rom[0x10000 + offset]);
663   }
664   subbank("masterupper")->set_base(&rom[0x10000 + 0x4000 + 0x8000 + 0x10000 + 0x20000 * 3]);
604665
605   space->machine().scheduler().timer_set(attotime::from_double(TIME_OF_74LS123(180000, 0.000001)), FUNC(narc_sync_clear), 0x02);
606   state->audio_sync |= 0x02;
607   logerror("Slave sync = %02X\n", data);
666   // configure slave CPU banks
667   rom = subregion("cpu1")->base();
668   for (int bank = 0; bank < 16; bank++)
669   {
670      //
671        //  D0 -> A15
672        //  D1/D2 -> selects: 0=U35 1=U36 2=U37 3=U38
673        //  D3 -> A16
674        //
675      offs_t offset = 0x8000 * (bank & 1) + 0x10000 * ((bank >> 3) & 1) + 0x20000 * ((bank >> 1) & 3);
676      subbank("slavebank")->configure_entry(bank, &rom[0x10000 + offset]);
677   }
678   subbank("slaveupper")->set_base(&rom[0x10000 + 0x4000 + 0x8000 + 0x10000 + 0x20000 * 3]);
679
680   // register for save states
681   save_item(NAME(m_latch));
682   save_item(NAME(m_latch2));
683   save_item(NAME(m_talkback));
684   save_item(NAME(m_audio_sync));
685   save_item(NAME(m_sound_int_state));
608686}
609687
610688
689//-------------------------------------------------
690//  device_reset - device-specific reset
691//-------------------------------------------------
611692
612/***************************************************************************
613    NARC COMMUNICATIONS
614****************************************************************************/
693void williams_narc_sound_device::device_reset()
694{
695   // reset interrupt states
696   m_sound_int_state = 0;
697   m_cpu0->set_input_line(M6809_FIRQ_LINE, CLEAR_LINE);
698   m_cpu0->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
699   m_cpu0->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
700   m_cpu1->set_input_line(M6809_FIRQ_LINE, CLEAR_LINE);
701   m_cpu1->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
702   m_cpu1->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
703}
615704
616void williams_narc_data_w(running_machine &machine, int data)
705
706//-------------------------------------------------
707//  device_timer - timer callbacks
708//-------------------------------------------------
709
710void williams_narc_sound_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
617711{
618   williams_audio_state *state = &audio;
619   device_t *sound_cpu = state->sound_cpu;
620   address_space *space = sound_cpu->memory().space(AS_PROGRAM);
621   driver_device *drvstate = space->machine().driver_data<driver_device>();
622   drvstate->soundlatch_byte_w(*space, 0, data & 0xff);
623   device_set_input_line(sound_cpu, INPUT_LINE_NMI, (data & 0x100) ? CLEAR_LINE : ASSERT_LINE);
624   if (!(data & 0x200))
712   switch (id)
625713   {
626      device_set_input_line(sound_cpu, M6809_IRQ_LINE, ASSERT_LINE);
627      state->sound_int_state = 1;
714      case TID_MASTER_COMMAND:
715         m_latch = param & 0xff;
716         m_cpu0->set_input_line(INPUT_LINE_NMI, (param & 0x100) ? CLEAR_LINE : ASSERT_LINE);
717         if ((param & 0x200) == 0)
718         {
719            m_cpu0->set_input_line(M6809_IRQ_LINE, ASSERT_LINE);
720            m_sound_int_state = 1;
721         }
722         break;
723     
724      case TID_SLAVE_COMMAND:
725         m_latch2 = param & 0xff;
726         m_cpu1->set_input_line(M6809_FIRQ_LINE, ASSERT_LINE);
727         break;
728     
729      case TID_SYNC_CLEAR:
730         m_audio_sync &= ~param;
731         break;
628732   }
629733}
630734
631735
632void williams_narc_reset_w(running_machine &machine, int state)
736//**************************************************************************
737//  ADPCM SOUND BOARD
738//**************************************************************************
739
740//-------------------------------------------------
741//  williams_adpcm_sound_device - constructor
742//-------------------------------------------------
743
744williams_adpcm_sound_device::williams_adpcm_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
745   : device_t(mconfig, WILLIAMS_ADPCM_SOUND, "Williams ADPCM Sound Board", "wmsadpcm", tag, owner, clock),
746     device_mixer_interface(mconfig, *this),
747     m_cpu(*this, "cpu"),
748     m_latch(0),
749     m_talkback(0),
750     m_sound_int_state(0)
633751{
634   williams_audio_state *sndstate = &audio;
635   device_t *sound_cpu = sndstate->sound_cpu;
636   device_t *soundalt_cpu = sndstate->soundalt_cpu;
752}
637753
638   /* going high halts the CPU */
754
755//-------------------------------------------------
756//  write - handle an external write to the input
757//   latch
758//-------------------------------------------------
759
760WRITE16_MEMBER(williams_adpcm_sound_device::write)
761{
762   synchronize(TID_COMMAND, data);
763}
764
765
766//-------------------------------------------------
767//  reset_write - write to the reset line
768//-------------------------------------------------
769
770WRITE_LINE_MEMBER(williams_adpcm_sound_device::reset_write)
771{
772   // going high halts the CPU
639773   if (state)
640774   {
641      address_space *space = sound_cpu->memory().space(AS_PROGRAM);
642      narc_master_bank_select_w(space, 0, 0);
643      narc_slave_bank_select_w(space, 0, 0);
644      init_audio_state(space->machine());
645      device_set_input_line(sound_cpu, INPUT_LINE_RESET, ASSERT_LINE);
646      device_set_input_line(soundalt_cpu, INPUT_LINE_RESET, ASSERT_LINE);
775      bank_select_w(*m_cpu->space(), 0, 0);
776      device_reset();
777      m_cpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
647778   }
648   /* going low resets and reactivates the CPU */
779
780   // going low resets and reactivates the CPU
649781   else
650   {
651      device_set_input_line(sound_cpu, INPUT_LINE_RESET, CLEAR_LINE);
652      device_set_input_line(soundalt_cpu, INPUT_LINE_RESET, CLEAR_LINE);
653   }
782      m_cpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
654783}
655784
656785
657int williams_narc_talkback_r(running_machine &machine)
786//-------------------------------------------------
787//  irq_read - read the sound IRQ state
788//-------------------------------------------------
789
790READ_LINE_MEMBER(williams_adpcm_sound_device::irq_read)
658791{
659   williams_audio_state *state = &audio;
660
661   return state->audio_talkback | (state->audio_sync << 8);
792   return m_sound_int_state;
662793}
663794
664795
796//-------------------------------------------------
797//  bank_select_w - select the sound CPU memory
798//   bank
799//-------------------------------------------------
665800
666/***************************************************************************
667    ADPCM READ/WRITE HANDLERS
668****************************************************************************/
669
670static WRITE8_HANDLER( adpcm_bank_select_w )
801WRITE8_MEMBER(williams_adpcm_sound_device::bank_select_w)
671802{
672   memory_set_bank(space->machine(), "bank5", data & 0x07);
803   subbank("rombank")->set_entry(data & 0x07);
673804}
674805
675806
676static WRITE8_DEVICE_HANDLER( adpcm_6295_bank_select_w )
807//-------------------------------------------------
808//  bank_select_w - select the OKI6295 memory
809//   bank
810//-------------------------------------------------
811
812WRITE8_MEMBER(williams_adpcm_sound_device::oki6295_bank_select_w)
677813{
678   downcast<okim6295_device *>(device)->set_bank_base((data & 7) * 0x40000);
814   subbank("okibank")->set_entry(data & 7);
679815}
680816
681817
682static TIMER_CALLBACK( clear_irq_state )
818//-------------------------------------------------
819//  command_r - read the command from the external
820//   latch
821//-------------------------------------------------
822
823READ8_MEMBER(williams_adpcm_sound_device::command_r)
683824{
684   williams_audio_state *state = &audio;
825   m_cpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
685826
686   state->sound_int_state = 0;
827   // don't clear the external IRQ state for a short while; this allows the
828    // self-tests to pass
829   timer_set(attotime::from_usec(10), TID_IRQ_CLEAR);
830   return m_latch;
687831}
688832
689833
690static READ8_HANDLER( adpcm_command_r )
834//-------------------------------------------------
835//  talkback_w - write to the talkback latch
836//-------------------------------------------------
837
838WRITE8_MEMBER(williams_adpcm_sound_device::talkback_w)
691839{
692   williams_audio_state *state = &audio;
693   device_t *sound_cpu = state->sound_cpu;
694   device_set_input_line(sound_cpu, M6809_IRQ_LINE, CLEAR_LINE);
695
696   /* don't clear the external IRQ state for a short while; this allows the
697       self-tests to pass */
698   space->machine().scheduler().timer_set(attotime::from_usec(10), FUNC(clear_irq_state));
699   driver_device *drvstate = space->machine().driver_data<driver_device>();
700   return drvstate->soundlatch_byte_r(*space, 0);
840   m_talkback = data;
841   logerror("ADPCM Talkback = %02X\n", data);
701842}
702843
703844
704static WRITE8_HANDLER( adpcm_talkback_w )
845//-------------------------------------------------
846//  talkback_w - write to the talkback latch
847//-------------------------------------------------
848
849WRITE_LINE_MEMBER(williams_adpcm_sound_device::ym2151_irq_w)
705850{
706   williams_audio_state *state = &audio;
707   state->audio_talkback = data;
708   logerror("ADPCM Talkback = %02X\n", data);
851   m_cpu->set_input_line(M6809_FIRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE);
709852}
710853
711854
855//-------------------------------------------------
856//  audio CPU map
857//-------------------------------------------------
712858
713/***************************************************************************
714    ADPCM COMMUNICATIONS
715****************************************************************************/
859static ADDRESS_MAP_START( williams_adpcm_map, AS_PROGRAM, 8, williams_adpcm_sound_device )
860   AM_RANGE(0x0000, 0x1fff) AM_RAM
861   AM_RANGE(0x2000, 0x2000) AM_MIRROR(0x03ff) AM_WRITE(bank_select_w)
862   AM_RANGE(0x2400, 0x2401) AM_MIRROR(0x03fe) AM_DEVREADWRITE_LEGACY("ym2151", ym2151_r, ym2151_w)
863   AM_RANGE(0x2800, 0x2800) AM_MIRROR(0x03ff) AM_DEVWRITE_LEGACY("dac", dac_w)
864   AM_RANGE(0x2c00, 0x2c00) AM_MIRROR(0x03ff) AM_DEVREADWRITE("oki", okim6295_device, read, write)
865   AM_RANGE(0x3000, 0x3000) AM_MIRROR(0x03ff) AM_READ(command_r)
866   AM_RANGE(0x3400, 0x3400) AM_MIRROR(0x03ff) AM_WRITE(oki6295_bank_select_w)
867   AM_RANGE(0x3c00, 0x3c00) AM_MIRROR(0x03ff) AM_WRITE(talkback_w)
868   AM_RANGE(0x4000, 0xbfff) AM_ROMBANK("rombank")
869   AM_RANGE(0xc000, 0xffff) AM_ROMBANK("romupper")
870ADDRESS_MAP_END
716871
717void williams_adpcm_data_w(running_machine &machine, int data)
872
873//-------------------------------------------------
874//  OKI6295 map
875//-------------------------------------------------
876
877static ADDRESS_MAP_START( williams_adpcm_oki_map, AS_0, 8, williams_adpcm_sound_device )
878   AM_RANGE(0x00000, 0x1ffff) AM_ROMBANK("okibank")
879   AM_RANGE(0x20000, 0x3ffff) AM_ROM AM_REGION("oki", 0x60000)
880ADDRESS_MAP_END
881
882
883//-------------------------------------------------
884//  YM2151 configuration
885//-------------------------------------------------
886
887static const ym2151_interface adpcm_ym2151_interface =
718888{
719   williams_audio_state *state = &audio;
720   device_t *sound_cpu = state->sound_cpu;
721   address_space *space = sound_cpu->memory().space(AS_PROGRAM);
722   driver_device *drvstate = space->machine().driver_data<driver_device>();
723   drvstate->soundlatch_byte_w(*space, 0, data & 0xff);
724   if (!(data & 0x200))
725   {
726      device_set_input_line(sound_cpu, M6809_IRQ_LINE, ASSERT_LINE);
727      state->sound_int_state = 1;
728      space->machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(100));
729   }
889   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, williams_adpcm_sound_device, ym2151_irq_w)
890};
891
892
893//-------------------------------------------------
894//  machine configuration
895//-------------------------------------------------
896
897static MACHINE_CONFIG_FRAGMENT( williams_adpcm_sound )
898   MCFG_CPU_ADD("cpu", M6809E, ADPCM_MASTER_CLOCK)
899   MCFG_CPU_PROGRAM_MAP(williams_adpcm_map)
900
901   MCFG_SOUND_ADD("ym2151", YM2151, ADPCM_FM_CLOCK)
902   MCFG_SOUND_CONFIG(adpcm_ym2151_interface)
903   MCFG_SOUND_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 0.10)
904
905   MCFG_SOUND_ADD("dac", DAC, 0)
906   MCFG_SOUND_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 0.50)
907
908   MCFG_OKIM6295_ADD("oki", ADPCM_MASTER_CLOCK/8, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified
909   MCFG_DEVICE_ADDRESS_MAP(AS_0, williams_adpcm_oki_map)
910   MCFG_SOUND_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 0.50)
911MACHINE_CONFIG_END
912
913
914//-------------------------------------------------
915//  device_mconfig_additions - return a pointer to
916//  the device's machine fragment
917//-------------------------------------------------
918
919machine_config_constructor williams_adpcm_sound_device::device_mconfig_additions() const
920{
921   return MACHINE_CONFIG_NAME( williams_adpcm_sound );
730922}
731923
732924
733void williams_adpcm_reset_w(running_machine &machine, int state)
925//-------------------------------------------------
926//  device_start - device-specific startup
927//-------------------------------------------------
928
929void williams_adpcm_sound_device::device_start()
734930{
735   williams_audio_state *sndstate = &audio;
736   device_t *sound_cpu = sndstate->sound_cpu;
931   // configure banks
932   UINT8 *rom = subregion("cpu")->base();
933   subbank("rombank")->configure_entries(0, 8, &rom[0x10000], 0x8000);
934   subbank("romupper")->set_base(&rom[0x10000 + 0x4000 + 7 * 0x8000]);
737935
738   /* going high halts the CPU */
739   if (state)
740   {
741      address_space *space = sound_cpu->memory().space(AS_PROGRAM);
742      adpcm_bank_select_w(space, 0, 0);
743      init_audio_state(space->machine());
744      device_set_input_line(sound_cpu, INPUT_LINE_RESET, ASSERT_LINE);
745   }
746   /* going low resets and reactivates the CPU */
747   else
748      device_set_input_line(sound_cpu, INPUT_LINE_RESET, CLEAR_LINE);
936   // expand ADPCM data
937   rom = subregion("oki")->base();
938   // it is assumed that U12 is loaded @ 0x00000 and U13 is loaded @ 0x40000
939   subbank("okibank")->configure_entry(0, &rom[0x40000]);
940   subbank("okibank")->configure_entry(1, &rom[0x40000]);
941   subbank("okibank")->configure_entry(2, &rom[0x20000]);
942   subbank("okibank")->configure_entry(3, &rom[0x00000]);
943   subbank("okibank")->configure_entry(4, &rom[0xe0000]);
944   subbank("okibank")->configure_entry(5, &rom[0xc0000]);
945   subbank("okibank")->configure_entry(6, &rom[0xa0000]);
946   subbank("okibank")->configure_entry(7, &rom[0x80000]);
947
948   // register for save states
949   save_item(NAME(m_latch));
950   save_item(NAME(m_talkback));
951   save_item(NAME(m_sound_int_state));
749952}
750953
751954
752int williams_adpcm_sound_irq_r(running_machine &machine)
955//-------------------------------------------------
956//  device_reset - device-specific reset
957//-------------------------------------------------
958
959void williams_adpcm_sound_device::device_reset()
753960{
754   williams_audio_state *state = &audio;
755   return state->sound_int_state;
961   // reset interrupt states
962   m_sound_int_state = 0;
963   m_cpu->set_input_line(M6809_FIRQ_LINE, CLEAR_LINE);
964   m_cpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
965   m_cpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
756966}
967
968
969//-------------------------------------------------
970//  device_timer - timer callbacks
971//-------------------------------------------------
972
973void williams_adpcm_sound_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
974{
975   switch (id)
976   {
977      case TID_COMMAND:
978         m_latch = param & 0xff;
979         if (!(param & 0x200))
980         {
981            m_cpu->set_input_line(M6809_IRQ_LINE, ASSERT_LINE);
982            m_sound_int_state = 1;
983            machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(100));
984         }
985         break;
986     
987      case TID_IRQ_CLEAR:
988         m_sound_int_state = 0;
989         break;
990   }
991}
src/mame/audio/williams.h
r14963r14964
11/***************************************************************************
22
3    Midway/Williams Audio Boards
3    audio/williams.h
44
5    Functions to emulate general the various Williams/Midway sound cards.
6
7****************************************************************************
8
9    Copyright Aaron Giles
10    All rights reserved.
11
12    Redistribution and use in source and binary forms, with or without
13    modification, are permitted provided that the following conditions are
14    met:
15
16        * Redistributions of source code must retain the above copyright
17          notice, this list of conditions and the following disclaimer.
18        * Redistributions in binary form must reproduce the above copyright
19          notice, this list of conditions and the following disclaimer in
20          the documentation and/or other materials provided with the
21          distribution.
22        * Neither the name 'MAME' nor the names of its contributors may be
23          used to endorse or promote products derived from this software
24          without specific prior written permission.
25
26    THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR
27    IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
28    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
29    DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT,
30    INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
31    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
32    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
34    STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
35    IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36    POSSIBILITY OF SUCH DAMAGE.
37
538****************************************************************************/
639
7MACHINE_CONFIG_EXTERN( williams_cvsd_sound );
8MACHINE_CONFIG_EXTERN( williams_adpcm_sound );
9MACHINE_CONFIG_EXTERN( williams_narc_sound );
40#include "emu.h"
41#include "machine/6821pia.h"
42#include "cpu/m6809/m6809.h"
43#include "sound/2151intf.h"
44#include "sound/okim6295.h"
45#include "sound/hc55516.h"
46#include "sound/dac.h"
1047
11void williams_cvsd_init(running_machine &machine);
12void williams_cvsd_data_w(running_machine &machine, int data);
13void williams_cvsd_reset_w(running_machine &machine, int state);
1448
15void williams_adpcm_init(running_machine &machine);
16void williams_adpcm_data_w(running_machine &machine, int data);
17void williams_adpcm_reset_w(running_machine &machine, int state);
18int williams_adpcm_sound_irq_r(running_machine &machine);
1949
20void williams_narc_init(running_machine &machine);
21void williams_narc_data_w(running_machine &machine, int data);
22void williams_narc_reset_w(running_machine &machine, int state);
23int williams_narc_talkback_r(running_machine &machine);
50//**************************************************************************
51//  GLOBAL VARIABLES
52//**************************************************************************
53
54extern const device_type WILLIAMS_NARC_SOUND;
55extern const device_type WILLIAMS_CVSD_SOUND;
56extern const device_type WILLIAMS_ADPCM_SOUND;
57
58
59
60//**************************************************************************
61//  DEVICE CONFIGURATION MACROS
62//**************************************************************************
63
64#define MCFG_WILLIAMS_NARC_SOUND_ADD(_tag) \
65   MCFG_DEVICE_ADD(_tag, WILLIAMS_NARC_SOUND, 0) \
66
67#define MCFG_WILLIAMS_CVSD_SOUND_ADD(_tag) \
68   MCFG_DEVICE_ADD(_tag, WILLIAMS_CVSD_SOUND, 0) \
69
70#define MCFG_WILLIAMS_ADPCM_SOUND_ADD(_tag) \
71   MCFG_DEVICE_ADD(_tag, WILLIAMS_ADPCM_SOUND, 0) \
72
73
74
75//**************************************************************************
76//  TYPE DEFINITIONS
77//**************************************************************************
78
79// ======================> williams_cvsd_sound_device
80
81class williams_cvsd_sound_device :   public device_t,
82                           public device_mixer_interface
83{
84public:
85   // construction/destruction
86   williams_cvsd_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
87
88   // read/write
89   DECLARE_WRITE16_MEMBER(write);
90   DECLARE_WRITE_LINE_MEMBER(reset_write);
91
92   // internal communications
93   DECLARE_WRITE8_MEMBER(bank_select_w);
94   DECLARE_WRITE8_MEMBER(talkback_w);
95   DECLARE_WRITE8_MEMBER(cvsd_digit_clock_clear_w);
96   DECLARE_WRITE8_MEMBER(cvsd_clock_set_w);
97   DECLARE_WRITE_LINE_MEMBER(ym2151_irq_w);
98   DECLARE_WRITE_LINE_MEMBER(pia_irqa);
99   DECLARE_WRITE_LINE_MEMBER(pia_irqb);
100
101protected:
102   // device-level overrides
103   virtual machine_config_constructor device_mconfig_additions() const;
104   virtual void device_start();
105   virtual void device_reset();
106   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
107
108private:
109   // devices
110   required_device<m6809e_device> m_cpu;
111   required_device<pia6821_device> m_pia;
112   required_device<hc55516_device> m_hc55516;
113
114   // internal state
115   UINT8 m_talkback;
116};
117   
118
119// ======================> williams_narc_sound_device
120
121class williams_narc_sound_device :   public device_t,
122                           public device_mixer_interface
123{
124public:
125   // construction/destruction
126   williams_narc_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
127
128   // read/write
129   DECLARE_READ16_MEMBER(read);
130   DECLARE_WRITE16_MEMBER(write);
131   DECLARE_WRITE_LINE_MEMBER(reset_write);
132
133   // internal communications
134   DECLARE_WRITE8_MEMBER(master_bank_select_w);
135   DECLARE_WRITE8_MEMBER(slave_bank_select_w);
136   DECLARE_READ8_MEMBER(command_r);
137   DECLARE_WRITE8_MEMBER(command2_w);
138   DECLARE_READ8_MEMBER(command2_r);
139   DECLARE_WRITE8_MEMBER(master_talkback_w);
140   DECLARE_WRITE8_MEMBER(master_sync_w);
141   DECLARE_WRITE8_MEMBER(slave_talkback_w);
142   DECLARE_WRITE8_MEMBER(slave_sync_w);
143   DECLARE_WRITE8_MEMBER(cvsd_digit_clock_clear_w);
144   DECLARE_WRITE8_MEMBER(cvsd_clock_set_w);
145   DECLARE_WRITE_LINE_MEMBER(ym2151_irq_w);
146
147protected:
148   // device-level overrides
149   virtual machine_config_constructor device_mconfig_additions() const;
150   virtual void device_start();
151   virtual void device_reset();
152   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
153
154private:
155   // timer IDs
156   enum
157   {
158      TID_MASTER_COMMAND,
159      TID_SLAVE_COMMAND,
160      TID_SYNC_CLEAR
161   };
162
163   // devices
164   required_device<m6809e_device> m_cpu0;
165   required_device<m6809e_device> m_cpu1;
166   required_device<hc55516_device> m_hc55516;
167
168   // internal state
169   UINT8 m_latch;
170   UINT8 m_latch2;
171   UINT8 m_talkback;
172   UINT8 m_audio_sync;
173   UINT8 m_sound_int_state;
174};
175
176
177// ======================> williams_adpcm_sound_device
178
179class williams_adpcm_sound_device :   public device_t,
180                           public device_mixer_interface
181{
182public:
183   // construction/destruction
184   williams_adpcm_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
185
186   // read/write
187   DECLARE_WRITE16_MEMBER(write);
188   DECLARE_WRITE_LINE_MEMBER(reset_write);
189   DECLARE_READ_LINE_MEMBER(irq_read);
190
191   // internal communications
192   DECLARE_WRITE8_MEMBER(bank_select_w);
193   DECLARE_WRITE8_MEMBER(oki6295_bank_select_w);
194   DECLARE_READ8_MEMBER(command_r);
195   DECLARE_WRITE8_MEMBER(talkback_w);
196   DECLARE_WRITE_LINE_MEMBER(ym2151_irq_w);
197
198protected:
199   // timer IDs
200   enum
201   {
202      TID_COMMAND,
203      TID_IRQ_CLEAR
204   };
205
206   // device-level overrides
207   virtual machine_config_constructor device_mconfig_additions() const;
208   virtual void device_start();
209   virtual void device_reset();
210   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
211
212private:
213   // devices
214   required_device<m6809e_device> m_cpu;
215
216   // internal state
217   UINT8 m_latch;
218   UINT8 m_talkback;
219   UINT8 m_sound_int_state;
220};
221   
222
src/mame/machine/midyunit.c
r14963r14964
77#include "emu.h"
88#include "cpu/tms34010/tms34010.h"
99#include "cpu/m6809/m6809.h"
10#include "audio/williams.h"
1110#include "includes/midyunit.h"
1211
1312
r14963r14964
172171   if (offset == 0)
173172      m_term2_analog_select = (data >> 12) & 3;
174173
175   williams_adpcm_reset_w(machine(), (~data & 0x100) >> 1);
176   williams_adpcm_data_w(machine(), data);
174   m_adpcm_sound->reset_write((~data & 0x100) >> 1);
175   m_adpcm_sound->write(space, offset, data);
177176}
178177
179178
r14963r14964
298297   switch (sound)
299298   {
300299      case SOUND_CVSD_SMALL:
301         williams_cvsd_init(machine);
302         machine.device("cvsdcpu")->memory().space(AS_PROGRAM)->install_write_handler(prot_start, prot_end, write8_delegate(FUNC(midyunit_state::cvsd_protection_w),state));
300         machine.device("cvsd:cpu")->memory().space(AS_PROGRAM)->install_write_handler(prot_start, prot_end, write8_delegate(FUNC(midyunit_state::cvsd_protection_w),state));
303301         state->m_cvsd_protection_base = machine.region("cvsdcpu")->base() + 0x10000 + (prot_start - 0x8000);
304302         break;
305303
306304      case SOUND_CVSD:
307         williams_cvsd_init(machine);
308         machine.device("cvsdcpu")->memory().space(AS_PROGRAM)->install_ram(prot_start, prot_end);
305         machine.device("cvsd:cpu")->memory().space(AS_PROGRAM)->install_ram(prot_start, prot_end);
309306         break;
310307
311308      case SOUND_ADPCM:
312         williams_adpcm_init(machine);
313         machine.device("adpcm")->memory().space(AS_PROGRAM)->install_ram(prot_start, prot_end);
309         machine.device("adpcm:cpu")->memory().space(AS_PROGRAM)->install_ram(prot_start, prot_end);
314310         break;
315311
316312      case SOUND_NARC:
317         williams_narc_init(machine);
318         machine.device("narc1cpu")->memory().space(AS_PROGRAM)->install_ram(prot_start, prot_end);
313         machine.device("narcsnd:cpu0")->memory().space(AS_PROGRAM)->install_ram(prot_start, prot_end);
319314         break;
320315
321316      case SOUND_YAWDIM:
r14963r14964
559554   switch (state->m_chip_type)
560555   {
561556      case SOUND_NARC:
562         williams_narc_reset_w(machine, 1);
563         williams_narc_reset_w(machine, 0);
557         state->m_narc_sound->reset_write(1);
558         state->m_narc_sound->reset_write(0);
564559         break;
565560
566561      case SOUND_CVSD:
567562      case SOUND_CVSD_SMALL:
568         williams_cvsd_reset_w(machine, 1);
569         williams_cvsd_reset_w(machine, 0);
563         state->m_cvsd_sound->reset_write(1);
564         state->m_cvsd_sound->reset_write(0);
570565         break;
571566
572567      case SOUND_ADPCM:
573         williams_adpcm_reset_w(machine, 1);
574         williams_adpcm_reset_w(machine, 0);
568         state->m_adpcm_sound->reset_write(1);
569         state->m_adpcm_sound->reset_write(0);
575570         break;
576571
577572      case SOUND_YAWDIM:
r14963r14964
601596      switch (m_chip_type)
602597      {
603598         case SOUND_NARC:
604            williams_narc_data_w(machine(), data);
599            m_narc_sound->write(space, offset, data);
605600            break;
606601
607602         case SOUND_CVSD_SMALL:
608603         case SOUND_CVSD:
609            williams_cvsd_reset_w(machine(), (~data & 0x100) >> 8);
610            williams_cvsd_data_w(machine(), (data & 0xff) | ((data & 0x200) >> 1));
604            m_cvsd_sound->reset_write((~data & 0x100) >> 8);
605            m_cvsd_sound->write(space, offset, (data & 0xff) | ((data & 0x200) >> 1));
611606            break;
612607
613608         case SOUND_ADPCM:
614            williams_adpcm_reset_w(machine(), (~data & 0x100) >> 8);
615            williams_adpcm_data_w(machine(), data);
609            m_adpcm_sound->reset_write((~data & 0x100) >> 8);
610            m_adpcm_sound->write(space, offset, data);
616611            break;
617612
618613         case SOUND_YAWDIM:
src/mame/machine/midtunit.c
r14963r14964
77#include "emu.h"
88#include "cpu/tms34010/tms34010.h"
99#include "cpu/m6809/m6809.h"
10#include "audio/williams.h"
11#include "audio/dcs.h"
1210#include "includes/midtunit.h"
1311
1412
r14963r14964
434432   {
435433      case SOUND_ADPCM:
436434      case SOUND_ADPCM_LARGE:
437         williams_adpcm_init(machine);
438435         break;
439436
440437      case SOUND_DCS:
r14963r14964
466463   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_readwrite_handler(0x1b00000, 0x1b6ffff, read16_delegate(FUNC(midtunit_state::mk_prot_r),state), write16_delegate(FUNC(midtunit_state::mk_prot_w),state));
467464
468465   /* sound chip protection (hidden RAM) */
469   machine.device("adpcm")->memory().space(AS_PROGRAM)->install_ram(0xfb9c, 0xfbc6);
466   machine.device("adpcm:cpu")->memory().space(AS_PROGRAM)->install_ram(0xfb9c, 0xfbc6);
470467}
471468
472469DRIVER_INIT( mkturbo )
r14963r14964
499496
500497   /* sound chip protection (hidden RAM) */
501498   if (!te_protection)
502      machine.device("adpcm")->memory().space(AS_PROGRAM)->install_ram(0xfbaa, 0xfbd4);
499      machine.device("adpcm:cpu")->memory().space(AS_PROGRAM)->install_ram(0xfbaa, 0xfbd4);
503500   else
504      machine.device("adpcm")->memory().space(AS_PROGRAM)->install_ram(0xfbec, 0xfc16);
501      machine.device("adpcm:cpu")->memory().space(AS_PROGRAM)->install_ram(0xfbec, 0xfc16);
505502}
506503
507504DRIVER_INIT( nbajam )
r14963r14964
527524   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_readwrite_handler(0x1b00000, 0x1bfffff, read16_delegate(FUNC(midtunit_state::jdredd_prot_r),state), write16_delegate(FUNC(midtunit_state::jdredd_prot_w),state));
528525
529526   /* sound chip protection (hidden RAM) */
530   machine.device("adpcm")->memory().space(AS_PROGRAM)->install_read_bank(0xfbcf, 0xfbf9, "bank7");
531   machine.device("adpcm")->memory().space(AS_PROGRAM)->install_write_bank(0xfbcf, 0xfbf9, "bank9");
527   machine.device("adpcm:cpu")->memory().space(AS_PROGRAM)->install_read_bank(0xfbcf, 0xfbf9, "bank7");
528   machine.device("adpcm:cpu")->memory().space(AS_PROGRAM)->install_write_bank(0xfbcf, 0xfbf9, "bank9");
532529   memory_set_bankptr(machine, "bank9", auto_alloc_array(machine, UINT8, 0x80));
533530
534531#if ENABLE_ALL_JDREDD_LEVELS
r14963r14964
574571
575572MACHINE_RESET( midtunit )
576573{
574   midtunit_state *state = machine.driver_data<midtunit_state>();
577575   /* reset sound */
578576   switch (chip_type)
579577   {
580578      case SOUND_ADPCM:
581579      case SOUND_ADPCM_LARGE:
582         williams_adpcm_reset_w(machine, 1);
583         williams_adpcm_reset_w(machine, 0);
580         state->m_adpcm_sound->reset_write(1);
581         state->m_adpcm_sound->reset_write(0);
584582         break;
585583
586584      case SOUND_DCS:
r14963r14964
633631   }
634632
635633   /* call through based on the sound type */
634   midtunit_state *state = space.machine().driver_data<midtunit_state>();
636635   if (ACCESSING_BITS_0_7 && ACCESSING_BITS_8_15)
637636      switch (chip_type)
638637      {
639638         case SOUND_ADPCM:
640639         case SOUND_ADPCM_LARGE:
641            williams_adpcm_reset_w(machine(), ~data & 0x100);
642            williams_adpcm_data_w(machine(), data & 0xff);
640            state->m_adpcm_sound->reset_write(~data & 0x100);
641            state->m_adpcm_sound->write(space, offset, data & 0xff);
643642
644643            /* the games seem to check for $82 loops, so this should be just barely enough */
645644            fake_sound_state = 128;
src/mame/machine/mcr68.c
r14963r14964
55***************************************************************************/
66
77#include "emu.h"
8#include "audio/mcr.h"
8#include "audio/midway.h"
99#include "includes/mcr.h"
1010#include "includes/mcr68.h"
1111
r14963r14964
171171
172172   /* initialize the clock */
173173   state->m_m6840_internal_counter_period = attotime::from_hz(machine.device("maincpu")->unscaled_clock() / 10);
174
175   /* initialize the sound */
176   mcr_sound_reset(machine);
177174}
178175
179176
r14963r14964
296293{
297294   mcr68_state *drvstate = device->machine().driver_data<mcr68_state>();
298295   address_space *space = device->machine().device("maincpu")->memory().space(AS_PROGRAM);
299   drvstate->csdeluxe_data_w(*space, 0, (state << 4) | drvstate->m_zwackery_sound_data);
296   drvstate->m_chip_squeak_deluxe->write(*space, 0, (state << 4) | drvstate->m_zwackery_sound_data);
300297}
301298
302299
src/mame/machine/snes.c
r14963r14964
18381838}
18391839
18401840
1841DIRECT_UPDATE_HANDLER( snes_spc_direct )
1841DIRECT_UPDATE_MEMBER(snes_state::snes_spc_direct)
18421842{
1843   direct.explicit_configure(0x0000, 0xffff, 0xffff, spc_get_ram(machine.device("spc700")));
1843   direct.explicit_configure(0x0000, 0xffff, 0xffff, spc_get_ram(machine().device("spc700")));
18441844   return ~0;
18451845}
18461846
1847DIRECT_UPDATE_HANDLER( snes_direct )
1847DIRECT_UPDATE_MEMBER(snes_state::snes_direct)
18481848{
18491849   direct.explicit_configure(0x0000, 0xffff, 0xffff, snes_ram);
18501850   return ~0;
r14963r14964
18601860   state->m_spc700 = machine.device<snes_sound_device>("spc700");
18611861   state->m_superfx = machine.device<cpu_device>("superfx");
18621862
1863   state->m_maincpu->space(AS_PROGRAM)->set_direct_update_handler(direct_update_delegate(FUNC(snes_direct), &machine));
1864   state->m_soundcpu->space(AS_PROGRAM)->set_direct_update_handler(direct_update_delegate(FUNC(snes_spc_direct), &machine));
1863   state->m_maincpu->space(AS_PROGRAM)->set_direct_update_handler(direct_update_delegate(FUNC(snes_state::snes_direct), state));
1864   state->m_soundcpu->space(AS_PROGRAM)->set_direct_update_handler(direct_update_delegate(FUNC(snes_state::snes_spc_direct), state));
18651865
18661866   // power-on sets these registers like this
18671867   snes_ram[WRIO] = 0xff;
src/mame/machine/atarigen.c
r14963r14964
455455}
456456
457457
458DIRECT_UPDATE_HANDLER( atarigen_slapstic_setdirect )
458DIRECT_UPDATE_MEMBER(atarigen_state::atarigen_slapstic_setdirect)
459459{
460   atarigen_state *state = machine.driver_data<atarigen_state>();
461
462460   /* if we jump to an address in the slapstic region, tweak the slapstic
463461       at that address and return ~0; this will cause us to be called on
464462       subsequent fetches as well */
465   address &= ~state->m_slapstic_mirror;
466   if (address >= state->m_slapstic_base && address < state->m_slapstic_base + 0x8000)
463   address &= ~m_slapstic_mirror;
464   if (address >= m_slapstic_base && address < m_slapstic_base + 0x8000)
467465   {
468466      offs_t pc = cpu_get_previouspc(&direct.space().device());
469      if (pc != state->m_slapstic_last_pc || address != state->m_slapstic_last_address)
467      if (pc != m_slapstic_last_pc || address != m_slapstic_last_address)
470468      {
471         state->m_slapstic_last_pc = pc;
472         state->m_slapstic_last_address = address;
469         m_slapstic_last_pc = pc;
470         m_slapstic_last_address = address;
473471         atarigen_slapstic_r(&direct.space(), (address >> 1) & 0x3fff, 0xffff);
474472      }
475473      return ~0;
r14963r14964
514512      state->m_slapstic_mirror = mirror;
515513
516514      address_space *space = downcast<cpu_device *>(device)->space(AS_PROGRAM);
517      space->set_direct_update_handler(direct_update_delegate(FUNC(atarigen_slapstic_setdirect), &device->machine()));
515      space->set_direct_update_handler(direct_update_delegate(FUNC(atarigen_state::atarigen_slapstic_setdirect), state));
518516   }
519517}
520518
src/mame/machine/atarigen.h
r14963r14964
188188   UINT32               m_playfield2_latch;
189189
190190   atarigen_screen_timer   m_screen_timer[2];
191   
192   DECLARE_DIRECT_UPDATE_MEMBER(atarigen_slapstic_setdirect);
191193};
192194
193195
src/mame/machine/mcr.c
r14963r14964
55***************************************************************************/
66
77#include "emu.h"
8#include "audio/mcr.h"
8#include "audio/midway.h"
99#include "includes/mcr.h"
1010
1111#define VERBOSE 0
r14963r14964
174174{
175175   /* reset cocktail flip */
176176   mcr_cocktail_flip = 0;
177
178   /* initialize the sound */
179   mcr_sound_reset(machine);
180177}
181178
182179
r14963r14964
228225
229226/*************************************
230227 *
231 *  Generic MCR port write handlers
232 *
233 *************************************/
234
235WRITE8_MEMBER(mcr_state::mcr_control_port_w)
236{
237   /*
238        Bit layout is as follows:
239            D7 = n/c
240            D6 = cocktail flip
241            D5 = red LED
242            D4 = green LED
243            D3 = n/c
244            D2 = coin meter 3
245            D1 = coin meter 2
246            D0 = coin meter 1
247    */
248
249   coin_counter_w(machine(), 0, (data >> 0) & 1);
250   coin_counter_w(machine(), 1, (data >> 1) & 1);
251   coin_counter_w(machine(), 2, (data >> 2) & 1);
252   mcr_cocktail_flip = (data >> 6) & 1;
253}
254
255
256/*************************************
257 *
258228 *  NFL Football IPU board
259229 *
260230 *************************************/
src/mame/machine/williams.c
r14963r14964
55***************************************************************************/
66
77#include "emu.h"
8#include "audio/williams.h"
98#include "cpu/m6800/m6800.h"
109#include "cpu/m6809/m6809.h"
1110#include "machine/6821pia.h"
r14963r14964
988987{
989988   williams_state *state = machine.driver_data<williams_state>();
990989   MACHINE_START_CALL(williams2);
991   williams_cvsd_init(machine);
992990   state_save_register_global(machine, state->m_joust2_current_sound_data);
993991}
994992
995993
996994MACHINE_RESET( joust2 )
997995{
998   pia6821_device *pia_3 = machine.device<pia6821_device>("cvsdpia");
999
1000   /* standard init */
1001996   MACHINE_RESET_CALL(williams2);
1002   pia_3->ca1_w(1);
1003997}
1004998
1005999
r14963r14964
10131007static WRITE8_DEVICE_HANDLER( joust2_pia_3_cb1_w )
10141008{
10151009   williams_state *state = device->machine().driver_data<williams_state>();
1016   pia6821_device *pia_3 = device->machine().device<pia6821_device>("cvsdpia");
1017
10181010   state->m_joust2_current_sound_data = (state->m_joust2_current_sound_data & ~0x100) | ((data << 8) & 0x100);
1019   pia_3->cb1_w(data);
1011   state->m_cvsd_sound->write(*device->machine().memory().first_space(), 0, state->m_joust2_current_sound_data);
10201012}
10211013
10221014
r14963r14964
10241016{
10251017   williams_state *state = device->machine().driver_data<williams_state>();
10261018   state->m_joust2_current_sound_data = (state->m_joust2_current_sound_data & ~0xff) | (data & 0xff);
1027   williams_cvsd_data_w(device->machine(), state->m_joust2_current_sound_data);
1019   state->m_cvsd_sound->write(*device->machine().memory().first_space(), 0, state->m_joust2_current_sound_data);
10281020   device->machine().scheduler().synchronize(FUNC(joust2_deferred_snd_cmd_w), state->m_joust2_current_sound_data);
10291021}
src/mame/machine/opwolf.c
r14963r14964
718718{
719719   opwolf_state *state = machine.driver_data<opwolf_state>();
720720
721   //TODO:FIX
722   //state->m_cchip_ram = auto_alloc_array_clear(machine, UINT8, 0x400 * 8);
721   state->m_cchip_ram.allocate(0x400 * 8);
723722
724723   state->save_item(NAME(state->m_current_bank));
725724   state->save_item(NAME(state->m_current_cmd));
r14963r14964
732731   state->save_item(NAME(state->m_cchip_coins));
733732   state->save_item(NAME(state->m_cchip_coins_for_credit));
734733   state->save_item(NAME(state->m_cchip_credits_for_coin));
735   //state->save_pointer(NAME(state->m_cchip_ram), 0x400 * 8);
736734
737735   state->m_current_bank = 0;
738736   state->m_current_cmd = 0;
src/mame/machine/bfm_bd1.c
r14963r14964
2626   UINT8   scroll_active,      // flag <>0, scrolling active
2727         display_mode,      // display scroll   mode, 0/1/2/3
2828         display_blanking,   // display blanking mode, 0/1/2/3
29         blank_flag,
2930         flash_rate,         // flash rate 0-F
30         flash_control;      // flash control 0/1/2/3
31         flash_control,      // flash control 0/1/2/3
32         flash_flag;
3133
3234   UINT8   string[18];         // text buffer
3335   UINT32  segments[16],      // segments
r14963r14964
278280   {
279281      case 0x80:   // 0x80 - 0x8F Set display blanking
280282
281      bd1[id].display_blanking = data & 0x0F;
282      change = 1;
283      //TODO: Implement this, MAME artwork not mature enough
284      switch ( data & 0x04 )
285      {
286         case 0x00:   // blank all
287         break;
288         case 0x01:   // blank inside window
289         break;
290 
291         case 0x02:   // blank outside window
292         break;
293
294         case 0x03:   // blank entire display
295         break;
296
297         case 0x04:   // futaba setup
298
299         bd1[id].blank_flag = 1;
300         break;
301      }
283302      break;
284303
285304      case 0x90:   // 0x90 - 0x9F Set cursor pos
r14963r14964
382401
383402      default:
384403
385      change = BD1_setdata(id, BD1charset[data & 0x3F], data);
404      if (bd1[id].blank_flag || bd1[id].flash_flag)
405      {
406         if (bd1[id].blank_flag)
407         {
408            bd1[id].display_blanking = data & 0x0F;
409            change = 1;
410            bd1[id].blank_flag = 0;
411         }
412         if (bd1[id].flash_flag)
413         {
414            //not setting yet
415            bd1[id].blank_flag = 0;
416         }
417      }
418      else
419      {
420         
421         if (data > 0x3F)
422         {
423         //   logerror("Undefined character %x \n", data);
424         }
425         change = BD1_setdata(id, BD1charset[data & 0x3F], data);
426      }
386427      break;
387428   }
388429   return change;
r14963r14964
409450
410451static int BD1_setdata(int id, int segdata, int data)
411452{
453
412454   int change = 0, move = 0;
413455
414456   switch ( data )
src/mame/includes/nmk16.h
r14963r14964
1818
1919   int mask[4*2];
2020   required_shared_ptr<UINT16> m_nmk_bgvideoram0;
21   required_shared_ptr<UINT16> m_nmk_txvideoram;
21   optional_shared_ptr<UINT16> m_nmk_txvideoram;
2222   required_shared_ptr<UINT16> m_mainram;
2323   optional_shared_ptr<UINT16> m_gunnail_scrollram;
2424   optional_shared_ptr<UINT8> m_spriteram;   
src/mame/includes/rainbow.h
r14963r14964
1212      m_spriteram(*this, "spriteram"){ }
1313
1414   /* memory pointers */
15   required_shared_ptr<UINT16> m_spriteram;
15   optional_shared_ptr<UINT16> m_spriteram;
1616//  UINT16 *    paletteram;    // currently this uses generic palette handling
1717
1818   /* video-related */
src/mame/includes/aerofgt.h
r14963r14964
1515
1616   /* memory pointers */
1717   required_shared_ptr<UINT16> m_bg1videoram;
18   required_shared_ptr<UINT16> m_bg2videoram;
19   required_shared_ptr<UINT16> m_rasterram;
18   optional_shared_ptr<UINT16> m_bg2videoram;
19   optional_shared_ptr<UINT16> m_rasterram;
2020   optional_shared_ptr<UINT16> m_bitmapram;
21   required_shared_ptr<UINT16> m_spriteram1;
22   required_shared_ptr<UINT16> m_spriteram2;
21   optional_shared_ptr<UINT16> m_spriteram1;
22   optional_shared_ptr<UINT16> m_spriteram2;
2323   required_shared_ptr<UINT16> m_spriteram3;
2424   optional_shared_ptr<UINT16> m_tx_tilemap_ram;
2525//  UINT16 *  m_paletteram;   // currently this uses generic palette handling
src/mame/includes/midyunit.h
r14963r14964
55**************************************************************************/
66
77#include "cpu/tms34010/tms34010.h"
8#include "audio/williams.h"
89#include "machine/nvram.h"
910
1011/* protection data types */
r14963r14964
3233public:
3334   midyunit_state(const machine_config &mconfig, device_type type, const char *tag)
3435      : driver_device(mconfig, type, tag),
36        m_narc_sound(*this, "narcsnd"),
37        m_cvsd_sound(*this, "cvsd"),
38        m_adpcm_sound(*this, "adpcm"),
3539        m_gfx_rom(*this, "gfx_rom", 16) { }
3640
41   optional_device<williams_narc_sound_device> m_narc_sound;
42   optional_device<williams_cvsd_sound_device> m_cvsd_sound;
43   optional_device<williams_adpcm_sound_device> m_adpcm_sound;
44   
3745   UINT16 *m_cmos_ram;
3846   UINT32 m_cmos_page;
3947   optional_shared_ptr<UINT8> m_gfx_rom;
src/mame/includes/galpani2.h
r14963r14964
55public:
66   galpani2_state(const machine_config &mconfig, device_type type, const char *tag)
77      : kaneko16_state(mconfig, type, tag),
8      m_bg8(*this, "bg8"),
9      m_palette(*this, "palette"),
10      m_bg8_scrollx(*this, "bg8_scrollx"),
11      m_bg8_scrolly(*this, "bg8_scrolly"),
12      m_bg15(*this, "bg15"),
13      m_ram(*this, "ram"),
14      m_ram2(*this, "ram2"),
15      m_rombank(*this, "rombank"),
816      m_maincpu(*this,"maincpu"),
917      m_subcpu(*this,"sub")
1018      { }
1119
12   UINT16 *m_bg8[2];
13   UINT16 *m_palette[2];
14   UINT16 *m_bg8_scrollx[2];
15   UINT16 *m_bg8_scrolly[2];
16   UINT16 *m_bg15;
20   required_shared_ptr_array<UINT16, 2> m_bg8;
21   optional_shared_ptr_array<UINT16, 2> m_palette;
22   required_shared_ptr_array<UINT16, 2> m_bg8_scrollx;
23   required_shared_ptr_array<UINT16, 2> m_bg8_scrolly;
24   required_shared_ptr<UINT16> m_bg15;
1725   UINT16 m_eeprom_word;
18   UINT16 *m_ram;
19   UINT16 *m_ram2;
26   required_shared_ptr<UINT16> m_ram;
27   required_shared_ptr<UINT16> m_ram2;
2028   UINT16 m_old_mcu_nmi1;
2129   UINT16 m_old_mcu_nmi2;
22   UINT16 *m_rombank;
30   required_shared_ptr<UINT16> m_rombank;
2331   bitmap_ind16 *m_bg8_bitmap[2];
2432   bitmap_ind16 *m_bg15_bitmap;
2533
src/mame/includes/midtunit.h
r14963r14964
44
55**************************************************************************/
66
7#include "audio/williams.h"
8#include "audio/dcs.h"
9
710class midtunit_state : public driver_device
811{
912public:
1013   midtunit_state(const machine_config &mconfig, device_type type, const char *tag)
1114      : driver_device(mconfig, type, tag),
12        m_nvram(*this, "nvram") { }
15        m_nvram(*this, "nvram"),
16        m_cvsd_sound(*this, "cvsd"),
17        m_adpcm_sound(*this, "adpcm") { }
1318
1419   required_shared_ptr<UINT16>   m_nvram;
20   optional_device<williams_cvsd_sound_device> m_cvsd_sound;
21   optional_device<williams_adpcm_sound_device> m_adpcm_sound;
22   
1523   DECLARE_WRITE16_MEMBER(midtunit_cmos_enable_w);
1624   DECLARE_WRITE16_MEMBER(midtunit_cmos_w);
1725   DECLARE_READ16_MEMBER(midtunit_cmos_r);
src/mame/includes/seta2.h
r14963r14964
55      : driver_device(mconfig, type, tag),
66        m_maincpu(*this,"maincpu"),
77        m_nvram(*this, "nvram") ,
8      m_spriteram(*this, "spriteram"),
9      m_vregs(*this, "vregs"),
8      m_spriteram(*this, "spriteram", 0),
9      m_vregs(*this, "vregs", 0),
1010      m_coldfire_regs(*this, "coldfire_regs"),
1111      m_funcube_outputs(*this, "funcube_outputs"),
1212      m_funcube_leds(*this, "funcube_leds"){ }
src/mame/includes/itech32.h
r14963r14964
1919public:
2020   itech32_state(const machine_config &mconfig, device_type type, const char *tag)
2121      : driver_device(mconfig, type, tag) ,
22      m_main_ram(*this, "main_ram"),
23      m_nvram(*this, "nvram"),
24      m_video(*this, "video"),
25      m_main_rom(*this, "main_rom"),
22      m_main_ram(*this, "main_ram", 0),
23      m_nvram(*this, "nvram", 0),
24      m_video(*this, "video", 0),
25      m_main_rom(*this, "main_rom", 0),
2626      m_drivedge_zbuf_control(*this, "drivedge_zctl"),
2727      m_tms1_boot(*this, "tms1_boot"),
2828      m_tms1_ram(*this, "tms1_ram"),
src/mame/includes/fitfight.h
r14963r14964
4949   DECLARE_WRITE16_MEMBER(fof_bak_tileram_w);
5050   DECLARE_WRITE16_MEMBER(fof_mid_tileram_w);
5151   DECLARE_WRITE16_MEMBER(fof_txt_tileram_w);
52
53   DECLARE_READ16_MEMBER( hotmindff_unk_r );
5254};
5355
5456
src/mame/includes/argus.h
r14963r14964
1313      m_spriteram(*this, "spriteram"),
1414      m_butasan_bg1ram(*this, "butasan_bg1ram"){ }
1515
16   required_shared_ptr<UINT8> m_bg0_scrollx;
17   required_shared_ptr<UINT8> m_bg0_scrolly;
16   optional_shared_ptr<UINT8> m_bg0_scrollx;
17   optional_shared_ptr<UINT8> m_bg0_scrolly;
1818   required_shared_ptr<UINT8> m_bg1_scrollx;
1919   required_shared_ptr<UINT8> m_bg1_scrolly;
2020   required_shared_ptr<UINT8> m_paletteram;
src/mame/includes/fastfred.h
r14963r14964
1111{
1212public:
1313   fastfred_state(const machine_config &mconfig, device_type type, const char *tag)
14      : galaxold_state(mconfig, type, tag) { }
14      : galaxold_state(mconfig, type, tag),
15        m_videoram(*this, "videoram"),
16        m_spriteram(*this, "spriteram"),
17        m_attributesram(*this, "attributesram"),
18        m_background_color(*this, "bgcolor"),
19        m_imago_fg_videoram(*this, "imago_fg_vram") { }
1520
1621   UINT8 m_imago_sprites[0x800*3];
1722   UINT16 m_imago_sprites_address;
1823   UINT8 m_imago_sprites_bank;
1924   int m_hardware_type;
20   UINT8 *m_videoram;
21   UINT8 *m_spriteram;
22   size_t m_spriteram_size;
23   UINT8 *m_attributesram;
24   UINT8 *m_background_color;
25   UINT8 *m_imago_fg_videoram;
25   required_shared_ptr<UINT8> m_videoram;
26   required_shared_ptr<UINT8> m_spriteram;
27   required_shared_ptr<UINT8> m_attributesram;
28   optional_shared_ptr<UINT8> m_background_color;
29   optional_shared_ptr<UINT8> m_imago_fg_videoram;
2630   UINT16 m_charbank;
2731   UINT8 m_colorbank;
2832   tilemap_t *m_bg_tilemap;
src/mame/includes/galpanic.h
r14963r14964
44{
55public:
66   galpanic_state(const machine_config &mconfig, device_type type, const char *tag)
7      : kaneko16_state(mconfig, type, tag) { }
7      : kaneko16_state(mconfig, type, tag),
8        m_bgvideoram(*this, "bgvideoram"),
9        m_fgvideoram(*this, "fgvideoram"),
10        m_spriteram(*this, "spriteram") { }
811
9   UINT16 *m_bgvideoram;
10   UINT16 *m_fgvideoram;
11   size_t m_fgvideoram_size;
12   required_shared_ptr<UINT16> m_bgvideoram;
13   required_shared_ptr<UINT16> m_fgvideoram;
1214   bitmap_ind16 m_bitmap;
1315   bitmap_ind16 m_sprites_bitmap;
14   UINT16 *m_spriteram;
15   size_t m_spriteram_size;
16   required_shared_ptr<UINT16> m_spriteram;
1617   DECLARE_WRITE16_MEMBER(galpanic_6295_bankswitch_w);
1718   DECLARE_WRITE16_MEMBER(galpanica_6295_bankswitch_w);
1819   DECLARE_WRITE16_MEMBER(galpanica_misc_w);
src/mame/includes/cclimber.h
r14963r14964
1818
1919   required_shared_ptr<UINT8> m_bigsprite_videoram;
2020   required_shared_ptr<UINT8> m_videoram;
21   required_shared_ptr<UINT8> m_column_scroll;
21   optional_shared_ptr<UINT8> m_column_scroll;
2222   required_shared_ptr<UINT8> m_spriteram;
2323   required_shared_ptr<UINT8> m_bigsprite_control;
2424   required_shared_ptr<UINT8> m_colorram;
src/mame/includes/kaneko16.h
r14963r14964
9292   optional_shared_ptr<UINT16> m_spriteram;
9393   optional_shared_ptr<UINT16> m_bg15_reg;
9494   optional_shared_ptr<UINT16> m_bg15_select;
95   required_shared_ptr<UINT16> m_sprites_regs;
95   optional_shared_ptr<UINT16> m_sprites_regs;
9696   optional_shared_ptr_array<UINT16,4> m_vram;
9797   optional_shared_ptr_array<UINT16,4> m_vscroll;
98   required_shared_ptr<UINT16> m_layers_0_regs;
98   optional_shared_ptr<UINT16> m_layers_0_regs;
9999   optional_shared_ptr<UINT16> m_layers_1_regs;
100   required_shared_ptr<UINT16> m_mcu_ram;
101   required_shared_ptr<UINT16> m_mainram;
100   optional_shared_ptr<UINT16> m_mcu_ram;
101   optional_shared_ptr<UINT16> m_mainram;
102102   
103103   UINT8 m_nvram_save[128];
104104   int m_sprite_type;
src/mame/includes/system16.h
r14963r14964
1616   required_shared_ptr<UINT16> m_textram;
1717   optional_shared_ptr<UINT16> m_bg0_tileram;
1818   optional_shared_ptr<UINT16> m_bg1_tileram;
19   required_shared_ptr<UINT16> m_tileram;
19   optional_shared_ptr<UINT16> m_tileram;
2020   optional_shared_ptr<UINT16> m_goldnaxeb2_bgpage;
2121   optional_shared_ptr<UINT16> m_goldnaxeb2_fgpage;
2222
src/mame/includes/suna8.h
r14963r14964
1313      m_wram(*this, "wram"){ }
1414
1515   required_device<cpu_device> m_maincpu;
16   required_shared_ptr<UINT8> m_hardhead_ip;
17   required_shared_ptr<UINT8> m_spriteram;
18   required_shared_ptr<UINT8> m_wram;
16   optional_shared_ptr<UINT8> m_hardhead_ip;
17   optional_shared_ptr<UINT8> m_spriteram;
18   optional_shared_ptr<UINT8> m_wram;
1919
2020   UINT8 m_rombank;
2121   UINT8 m_spritebank;
src/mame/includes/nova2001.h
r14963r14964
88      m_spriteram(*this, "spriteram"){ }
99
1010   UINT8 m_ninjakun_io_a002_ctrl;
11   required_shared_ptr<UINT8> m_fg_videoram;
11   optional_shared_ptr<UINT8> m_fg_videoram;
1212   required_shared_ptr<UINT8> m_bg_videoram;
1313   tilemap_t *m_bg_tilemap;
1414   tilemap_t *m_fg_tilemap;
15   required_shared_ptr<UINT8> m_spriteram;
15   optional_shared_ptr<UINT8> m_spriteram;
1616   DECLARE_WRITE8_MEMBER(ninjakun_cpu1_io_A002_w);
1717   DECLARE_WRITE8_MEMBER(ninjakun_cpu2_io_A002_w);
1818   DECLARE_WRITE8_MEMBER(ninjakun_paletteram_w);
src/mame/includes/flstory.h
r14963r14964
1313   required_shared_ptr<UINT8> m_videoram;
1414   required_shared_ptr<UINT8> m_spriteram;
1515   required_shared_ptr<UINT8> m_scrlram;
16   required_shared_ptr<UINT8> m_workram;
16   optional_shared_ptr<UINT8> m_workram;
1717//  UINT8 *  m_paletteram;    // currently this uses generic palette handling
1818//  UINT8 *  m_paletteram_2;  // currently this uses generic palette handling
1919
src/mame/includes/model2.h
r14963r14964
2929   required_shared_ptr<UINT32> m_textureram0;
3030   required_shared_ptr<UINT32> m_textureram1;
3131   required_shared_ptr<UINT32> m_lumaram;
32   required_shared_ptr<UINT16> m_soundram;
32   optional_shared_ptr<UINT16> m_soundram;
3333   optional_shared_ptr<UINT32> m_tgp_program;
3434   
3535   UINT32 m_intreq;
src/mame/includes/toaplan1.h
r14963r14964
1818   required_shared_ptr<UINT16> m_colorram1;
1919   required_shared_ptr<UINT16> m_colorram2;
2020
21   required_shared_ptr<UINT8> m_sharedram;
21   optional_shared_ptr<UINT8> m_sharedram;
2222
2323   int m_coin_count; /* coin count increments on startup ? , so dont count it */
2424   int m_intenable;
src/mame/includes/tmnt.h
r14963r14964
1111      m_tmnt2_1c0800(*this, "tmnt2_1c0800"){ }
1212
1313   /* memory pointers */
14   required_shared_ptr<UINT16> m_spriteram;
14   optional_shared_ptr<UINT16> m_spriteram;
1515   optional_shared_ptr<UINT16> m_tmnt2_rom;
1616   optional_shared_ptr<UINT16> m_sunset_104000;
1717   optional_shared_ptr<UINT16> m_tmnt2_1c0800;
src/mame/includes/scramble.h
r14963r14964
55{
66public:
77   scramble_state(const machine_config &mconfig, device_type type, const char *tag)
8      : galaxold_state(mconfig, type, tag) { }
8      : galaxold_state(mconfig, type, tag),
9        m_soundram(*this, "soundram") { }
910
10   UINT8 *m_soundram;
11   required_shared_ptr<UINT8> m_soundram;
1112   UINT8 m_cavelon_bank;
1213   UINT8 m_security_2B_counter;
1314   UINT8 m_xb;
src/mame/includes/qix.h
r14963r14964
3333      m_scanline_latch(*this, "scanline_latch") { }
3434
3535   /* machine state */
36   required_shared_ptr<UINT8> m_68705_port_out;
37   required_shared_ptr<UINT8> m_68705_ddr;
36   optional_shared_ptr<UINT8> m_68705_port_out;
37   optional_shared_ptr<UINT8> m_68705_ddr;
3838   UINT8  m_68705_port_in[3];
3939   UINT8  m_coinctrl;
4040
4141   /* video state */
42   required_shared_ptr<UINT8> m_videoram;
42   optional_shared_ptr<UINT8> m_videoram;
4343   required_shared_ptr<UINT8> m_videoram_address;
4444   optional_shared_ptr<UINT8> m_videoram_mask;
4545   required_shared_ptr<UINT8> m_paletteram;
src/mame/includes/snes.h
r14963r14964
487487   cpu_device *m_superfx;
488488   upd7725_device *m_upd7725;
489489   upd96050_device *m_upd96050;
490
491   DECLARE_DIRECT_UPDATE_MEMBER(snes_spc_direct);
492   DECLARE_DIRECT_UPDATE_MEMBER(snes_direct);
490493};
491494
492495/* Special chips, checked at init and used in memory handlers */
src/mame/includes/cps3.h
r14963r14964
9898   DECLARE_WRITE32_MEMBER(cps3_unk_vidregs_w);
9999   DECLARE_READ32_MEMBER(cps3_colourram_r);
100100   DECLARE_WRITE32_MEMBER(cps3_colourram_w);
101   DECLARE_DIRECT_UPDATE_MEMBER(cps3_direct_handler);
101102};
102103
103104
src/mame/includes/wecleman.h
r14963r14964
1111      m_spriteram(*this, "spriteram"),
1212      m_roadram(*this, "roadram"){ }
1313
14   required_shared_ptr<UINT16> m_videostatus;
15   required_shared_ptr<UINT16> m_protection_ram;
14   optional_shared_ptr<UINT16> m_videostatus;
15   optional_shared_ptr<UINT16> m_protection_ram;
1616   required_shared_ptr<UINT16> m_blitter_regs;
17   required_shared_ptr<UINT16> m_pageram;
17   optional_shared_ptr<UINT16> m_pageram;
1818   optional_shared_ptr<UINT16> m_txtram;
1919   required_shared_ptr<UINT16> m_spriteram;
2020   required_shared_ptr<UINT16> m_roadram;
src/mame/includes/alpha68k.h
r14963r14964
1818   required_shared_ptr<UINT16> m_shared_ram;
1919   required_shared_ptr<UINT16> m_spriteram;
2020   required_shared_ptr<UINT16> m_videoram;
21   required_shared_ptr<UINT16> m_paletteram;
21   optional_shared_ptr<UINT16> m_paletteram;
2222
2323   /* video-related */
2424   tilemap_t     *m_fix_tilemap;
src/mame/includes/cischeat.h
r14963r14964
1212      m_f1gpstr2_ioready(*this, "ioready"){ }
1313
1414   required_shared_ptr<UINT16> m_vregs;
15   required_shared_ptr_array<UINT16,3> m_scrollram;
15   optional_shared_ptr_array<UINT16,3> m_scrollram;
1616   required_shared_ptr<UINT16> m_ram;
17   required_shared_ptr_array<UINT16,2> m_roadram;
17   optional_shared_ptr_array<UINT16,2> m_roadram;
1818   optional_shared_ptr<UINT16> m_f1gpstr2_ioready;
1919
2020   UINT16 *m_objectram;
src/mame/includes/centiped.h
r14963r14964
1414      m_spriteram(*this, "spriteram"),
1515      m_bullsdrt_tiles_bankram(*this, "bullsdrt_bank"){ }
1616
17   required_shared_ptr<UINT8> m_rambase;
17   optional_shared_ptr<UINT8> m_rambase;
1818   required_shared_ptr<UINT8> m_videoram;
1919   required_shared_ptr<UINT8> m_spriteram;
2020   optional_shared_ptr<UINT8> m_bullsdrt_tiles_bankram;
src/mame/includes/atarig42.h
r14963r14964
4343   DECLARE_WRITE16_MEMBER(guardians_sloop_data_w);
4444   void roadriot_sloop_tweak(int offset);
4545   void guardians_sloop_tweak(int offset);
46   DECLARE_DIRECT_UPDATE_MEMBER(atarig42_sloop_direct_handler);
4647};
4748
4849
src/mame/includes/midvunit.h
r14963r14964
4242        m_nvram(*this, "nvram"),
4343        m_ram_base(*this, "ram_base"),
4444        m_fastram_base(*this, "fastram_base"),
45        m_tms32031_control(*this, "tms32031_control"),
45        m_tms32031_control(*this, "32031_control"),
4646        m_midvplus_misc(*this, "midvplus_misc"),
47        m_videoram(*this, "videoram"),
47        m_videoram(*this, "videoram", 32),
4848        m_textureram(*this, "textureram") { }
4949
5050   optional_shared_ptr<UINT32>   m_nvram;
5151   required_shared_ptr<UINT32> m_ram_base;
52   required_shared_ptr<UINT32> m_fastram_base;
52   optional_shared_ptr<UINT32> m_fastram_base;
5353   required_shared_ptr<UINT32> m_tms32031_control;
54   required_shared_ptr<UINT32> m_midvplus_misc;
54   optional_shared_ptr<UINT32> m_midvplus_misc;
5555   required_shared_ptr<UINT16> m_videoram;
5656   required_shared_ptr<UINT32> m_textureram;
5757
src/mame/includes/atarisy2.h
r14963r14964
6767   DECLARE_WRITE8_MEMBER(tms5220_w);
6868   DECLARE_WRITE8_MEMBER(tms5220_strobe_w);
6969   DECLARE_WRITE8_MEMBER(coincount_w);
70   DECLARE_DIRECT_UPDATE_MEMBER(atarisy2_direct_handler);
7071};
7172
7273
src/mame/includes/ninjakd2.h
r14963r14964
1111   UINT8 m_omegaf_io_protection[3];
1212   UINT8 m_omegaf_io_protection_input;
1313   int m_omegaf_io_protection_tic;
14   required_shared_ptr<UINT8> m_bg_videoram;
14   optional_shared_ptr<UINT8> m_bg_videoram;
1515   required_shared_ptr<UINT8> m_fg_videoram;
1616   int m_next_sprite_overdraw_enabled;
1717   int (*m_stencil_compare_function) (UINT16 pal);
src/mame/includes/ojankohs.h
r14963r14964
1414      m_paletteram(*this, "paletteram"){ }
1515
1616   /* memory pointers */
17   required_shared_ptr<UINT8> m_videoram;
18   required_shared_ptr<UINT8> m_colorram;
17   optional_shared_ptr<UINT8> m_videoram;
18   optional_shared_ptr<UINT8> m_colorram;
1919   optional_shared_ptr<UINT8> m_paletteram;
2020
2121   /* video-related */
src/mame/includes/n8080.h
r14963r14964
99
1010   /* memory pointers */
1111   required_shared_ptr<UINT8> m_videoram;
12   required_shared_ptr<UINT8> m_colorram;     // for helifire
12   optional_shared_ptr<UINT8> m_colorram;     // for helifire
1313
1414   /* video-related */
1515   emu_timer* m_cannon_timer;
src/mame/includes/liberate.h
r14963r14964
1010      m_spriteram(*this, "spriteram"),
1111      m_scratchram(*this, "scratchram"){ }
1212
13   required_shared_ptr<UINT8> m_paletteram;
13   optional_shared_ptr<UINT8> m_paletteram;
1414   optional_shared_ptr<UINT8> m_bg_vram; /* prosport */
1515   required_shared_ptr<UINT8> m_colorram;
1616   required_shared_ptr<UINT8> m_videoram;
src/mame/includes/plygonet.h
r14963r14964
6363   DECLARE_WRITE32_MEMBER(polygonet_ttl_ram_w);
6464   DECLARE_READ32_MEMBER(polygonet_roz_ram_r);
6565   DECLARE_WRITE32_MEMBER(polygonet_roz_ram_w);
66   DIRECT_UPDATE_MEMBER(plygonet_dsp56k_direct_handler);
6667};
6768
6869/*----------- defined in video/plygonet.c -----------*/
src/mame/includes/bfm_sc45.h
r14963r14964
4646   bool m_dochk41;
4747
4848
49   DECLARE_WRITE8_MEMBER(mux_output_w);
50   DECLARE_WRITE8_MEMBER(mux_output2_w);
4951
5052   DECLARE_READ16_MEMBER(sc4_mem_r);
5153   DECLARE_WRITE16_MEMBER(sc4_mem_w);
r14963r14964
7880   PORT_DIPSETTING(    0x06, "6" ) \
7981   PORT_DIPSETTING(    0x07, "500GBP (club)" ) \
8082   PORT_DIPSETTING(    0x08, "5GBP" ) \
81   PORT_DIPSETTING(    0x09, "9" ) \
82   PORT_DIPSETTING(    0x0a, "4GBP / 25GBP" ) \
83   PORT_DIPSETTING(    0x09, "15GBP" ) \
84   PORT_DIPSETTING(    0x0a, "25GBP (4GBP, Maz)" ) \
8385   PORT_DIPSETTING(    0x0b, "11" ) \
8486   PORT_DIPSETTING(    0x0c, "35GBP" ) \
8587   PORT_DIPSETTING(    0x0d, "70GBP" ) \
r14963r14964
141143   ROM_LOAD( "95008527.bin", 0x0000, 0x0ff5c3, CRC(6fac2014) SHA1(5b364406f7b5d8f4c54561e3977571e4a47273a0) ) \
142144
143145#define sc_adwta_others \
144   ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) \
146   ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) /* PR1940 ADSNT SHOWTIME SOUNDS11 */ \
147   ROM_LOAD( "95008656.bin", 0x000000, 0x100000, CRC(632a4cbb) SHA1(455e6242f5c5c1a0d84aadfdda33873e8e7b2418) ) \
148   ROM_LOAD( "95008657.bin", 0x100000, 0x100000, CRC(aa68db50) SHA1(52ee314549fac989dd9ee494144ee3bbb99ee283) ) \
145149
146150#define sc_aztec_others \
147151   ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) \
r14963r14964
234238
235239#define sc_bonbx_others \
236240   ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) \
237   ROM_LOAD( "95008992.bin", 0x0000, 0x0aa536, CRC(aad10089) SHA1(d8a32f66432ee901be05435e8930d3897f4b4e33) ) /* BARX - right header, wrong sounds */ \
241   ROM_LOAD( "95008992.bin", 0x0000, 0x0aa536, CRC(aad10089) SHA1(d8a32f66432ee901be05435e8930d3897f4b4e33) ) /* BARX - right header, wrong sounds? */ \
242   ROM_LOAD( "95009015.bin", 0x0000, 0x0b7821, CRC(8b6ca362) SHA1(4c50935b6d1038738ce631fbdc359416197b8c03) ) /* BARX - right header, wrong sounds? */ \
238243
239244#define sc_brksp_others \
240245   ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) \
r14963r14964
11781183
11791184#define sc_gd_others \
11801185   ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) \
1181   /* PR1016 GOLD DIG SOUNDS11 */ \
1186   /* PR1016 GOLD DIG SOUNDS11 (game header actually lists PR1016 GOLD DIGGER SOUNDS11 but it accepts these) */ \
11821187   ROM_LOAD( "95008187.bin", 0x000000, 0x100000, CRC(1fbbc7cc) SHA1(6e19b582a3654bbbcf65b8f42bd556029f43e8cb) ) \
11831188   ROM_LOAD( "95008188.bin", 0x100000, 0x100000, CRC(a74b23a7) SHA1(f7948edfb5524eaf80039c07ca7a9f76883f5a6f) ) \
1189   ROM_REGION( 0x400000, "others", ROMREGION_ERASE00 ) \
11841190   /* PR3509 GOLD DIGGER SOUNDS11 */ \
11851191   ROM_LOAD( "95009061.bin", 0x000000, 0x100000, CRC(c4cad720) SHA1(ce67af8d9e0b2f4f79d38b7a01dfc5ff7323e162) ) \
11861192   ROM_LOAD( "95009062.bin", 0x100000, 0x100000, CRC(509761d3) SHA1(6a133cc33bac6a1696de98a4961572a86cefc1c8) ) \
11871193
1194
11881195#define sc_gdmz_others \
11891196   ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) \
11901197   ROM_LOAD( "95008980.bin", 0x0000, 0x0fe431, CRC(c09277a0) SHA1(227609194f7d7e8b00cbd5cb94f8679f8fff71c6) ) \
r14963r14964
12281235   ROM_LOAD( "95008367.bin", 0x000000, 0x100000, CRC(37eea219) SHA1(e612b2c0bca83d742b35fbaf487b6805cfac024d) ) \
12291236   ROM_LOAD( "95008368.bin", 0x100000, 0x100000, CRC(06549054) SHA1(923a320f9689361802dc82db467b294f7bc85147) ) \
12301237
1238#define PR1327_CAS_HAPPY_NOTES_SOUNDS11 \
1239   ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) \
1240   ROM_LOAD( "95008312.bin", 0x000000, 0x100000, CRC(cf33e14d) SHA1(33382be257a145784d9de7050b5c90f725241de4) ) \
1241
12311242#define sc_hapnt_others \
12321243   ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) \
12331244   /* PR1306 HAPPY NOTES SOUNDS11 */ \
12341245   ROM_LOAD( "95008290.bin", 0x000000, 0x100000, CRC(427fc43d) SHA1(c63154c7f2bb3e7ec78e31268a8040d0eb131f2f) ) \
1235   /* PR1327 CAS_HAPPY_NOTES SOUNDS11 */ \
1236   ROM_LOAD( "95008312.bin", 0x100000, 0x100000, CRC(cf33e14d) SHA1(33382be257a145784d9de7050b5c90f725241de4) ) \
12371246
12381247#define sc_hfcl_others \
12391248   ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) \
r14963r14964
14941503   ROM_LOAD( "95890728.bin", 0x0000, 0x5000, CRC(0c3acfbc) SHA1(ff39c8236d5bd44c7d238edd1827af5aebc46e5c) ) \
14951504   ROM_LOAD( "95890729.bin", 0x0000, 0x5000, CRC(cf60ed2c) SHA1(df015b71567d6762b4c8ea6ad6d719cefdfdc60f) ) \
14961505
1506#define PR1706_WHEEL_OF_WEALTH_SOUNDS11 \
1507   ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) \
1508   ROM_LOAD( "95008550.bin", 0x000000, 0x100000, CRC(db6343bf) SHA1(e4d702020af67aa5be0560027706c1cbf34296fa) ) \
1509
1510#define WHEEL_OF_WEALTH_WOWT_SOUNDS \
1511   ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) \
1512   ROM_LOAD( "95008869.bin", 0x000000, 0x0b9d9d, CRC(f3ef3bbb) SHA1(92f9835e96c4fc444a451e97b2b8a7b66e5794b7) ) \
1513
1514
14971515#define sc_mowow_others \
14981516   ROM_REGION( 0x5000, "pics", 0 ) \
14991517   ROM_LOAD( "95890712.bin", 0x0000, 0x5000, CRC(ec6db00b) SHA1(d16a1527caa3c115e3326c897ce0fa66e3a0420d) ) \
15001518   ROM_LOAD( "95890713.bin", 0x0000, 0x5000, CRC(f0bb40b7) SHA1(33c19dab3086cdeae4f503fbf3f3cc5f0dad98c4) ) \
15011519   ROM_LOAD( "95890714.bin", 0x0000, 0x5000, CRC(33e16227) SHA1(87efc1a046ef6af0b72cc76a6ee393a4d1ddbce3) ) \
15021520   ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) \
1503   /* PR1706 WHEEL OF WEALTH SOUNDS11 */ \
1504   ROM_LOAD( "95008550.bin", 0x000000, 0x100000, CRC(db6343bf) SHA1(e4d702020af67aa5be0560027706c1cbf34296fa) ) \
1505   /* 95008551 STEPITS5 PR1666 */ \
1521   /* WOW SOUNDS - wrong for this game, wants "WOTW SOUNDS" */ \
1522   ROM_LOAD( "95008850.bin", 0x000000, 0x0af41f, CRC(8ca16e09) SHA1(9b494ad6946c2c7bbfad6591e62fa699fd53b6dc) ) \
1523   ROM_REGION( 0x400000, "others", ROMREGION_ERASE00 ) \
1524   /* 95008551 STEPITS5 PR1666  - wrong game?? */ \
15061525   ROM_LOAD( "95008551.bin", 0x100000, 0x100000, CRC(2d89a52a) SHA1(244101df7f6beae545f9b823750f908f532ac1e4) ) \
1507   /* WOW SOUNDS */ \
1508   ROM_LOAD( "95008850.bin", 0x000000, 0x0af41f, CRC(8ca16e09) SHA1(9b494ad6946c2c7bbfad6591e62fa699fd53b6dc) ) \
1509   /* WOWT SOUNDS */ \
1510   ROM_LOAD( "95008869.bin", 0x000000, 0x0b9d9d, CRC(f3ef3bbb) SHA1(92f9835e96c4fc444a451e97b2b8a7b66e5794b7) ) \
15111526
1527
15121528#define sc_nmare_others \
15131529   ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) \
15141530   /* PR3002 ELM STREET SOUNDS11 */ \
r14963r14964
17751791   ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) /* PR3013 SHOWTIME SOUNDS11 */ \
17761792   ROM_LOAD( "95008734.bin", 0x000000, 0x100000, CRC(8b469657) SHA1(514b3f4cbbafb3cee618b9ce0bae572f1a4fcf7b) ) \
17771793   ROM_LOAD( "95008735.bin", 0x100000, 0x100000, CRC(fa614cc1) SHA1(e5ecce4936a8db267b08b938ab5bc7500cf98f99) ) \
1778   ROM_REGION( 0x400000, "others1", ROMREGION_ERASE00 ) /* PR1940 ADSNT SHOWTIME SOUNDS11 */ \
1779   ROM_LOAD( "95008656.bin", 0x000000, 0x100000, CRC(632a4cbb) SHA1(455e6242f5c5c1a0d84aadfdda33873e8e7b2418) ) \
1780   ROM_LOAD( "95008657.bin", 0x100000, 0x100000, CRC(aa68db50) SHA1(52ee314549fac989dd9ee494144ee3bbb99ee283) ) \
17811794   ROM_REGION( 0x400000, "others2", ROMREGION_ERASE00 ) /* PR3243 SHOWTIME SOUNDS11 */ \
17821795   ROM_LOAD( "95008777.bin", 0x000000, 0x100000, CRC(1ff19229) SHA1(6db08982ee923ef4568caf76e05088574f99fc36) ) \
17831796   ROM_LOAD( "95008778.bin", 0x100000, 0x100000, CRC(2f2f3ee1) SHA1(cade826fec6c07a1fffa548c96404da83db14dd7) ) \
r14963r14964
19421955#define sc_mrrcl_others \
19431956   ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) \
19441957
1945#define sc_gball_pthers \
1958#define PR1034_GOLDEN_BALLS_SOUNDS11 \
19461959   ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) \
1947   /* PR1034 GOLDEN BALLS SOUNDS11 */ \
19481960   ROM_LOAD( "95008161.bin", 0x000000, 0x080000, CRC(ecd13fd9) SHA1(51d11b9133d4e840ce9afd7cf716520ea0fc0343) ) \
19491961   ROM_LOAD( "95008162.bin", 0x080000, 0x080000, CRC(b4b4a5c5) SHA1(d0748decfaee7da52d2f6a4bc0877be4243ed6fb) ) \
1962
1963#define sc_gball_pthers \
1964   ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) \
19501965   /* PR1604 GOLDEN BALLS SOUNDS12 */ \
19511966   ROM_LOAD( "95008465.bin", 0x000000, 0x100000, CRC(5d1fa2c9) SHA1(c12de2b89f0bcb8f1b35630fffd205fd9d5b9777) ) \
19521967   ROM_LOAD( "95008466.bin", 0x100000, 0x100000, CRC(418068ab) SHA1(342939e9bcc1d213bc2f52666cc3765442e18635) ) \
r14963r14964
19571972
19581973#define sc_ggame_others \
19591974   ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) \
1975   ROM_LOAD( "95008992.bin", 0x0000, 0x0aa536, CRC(aad10089) SHA1(d8a32f66432ee901be05435e8930d3897f4b4e33) ) /* BARX */ \
1976   ROM_REGION( 0x400000, "others", ROMREGION_ERASE00 ) \
19601977   ROM_LOAD( "95008515.bin", 0x0000, 0x0ab5c3, CRC(70cd8480) SHA1(2da34a0c1d9d84471005f5d6491499e707c0b0d4) ) /* KGXDX */  \
19611978   ROM_LOAD( "95008958.bin", 0x0000, 0x0435d3, CRC(31ffdb64) SHA1(e48cfa2e5b158555b4ba204fc1175810b81cbbed) ) /* MULTIGG */ \
1962   ROM_LOAD( "95008992.bin", 0x0000, 0x0aa536, CRC(aad10089) SHA1(d8a32f66432ee901be05435e8930d3897f4b4e33) ) /* BARX */ \
19631979   ROM_REGION( 0x5000, "pics", 0 ) \
19641980   ROM_LOAD( "95890410.bin", 0x0000, 0x5000, CRC(9588ae1d) SHA1(ae45d9e0272b2b048b99e337def1acfb2524597e) ) \
19651981   ROM_LOAD( "95890411.bin", 0x0000, 0x5000, CRC(895e5ea1) SHA1(070df49baca709f69fa1e522b21e42b716af0ba5) ) \
r14963r14964
19671983
19681984#define sc_ggg_others \
19691985   ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) \
1970   ROM_LOAD( "95008992.bin", 0x0000, 0x0aa536, CRC(aad10089) SHA1(d8a32f66432ee901be05435e8930d3897f4b4e33) ) \
1971   ROM_LOAD( "95009015.bin", 0x0000, 0x0b7821, CRC(8b6ca362) SHA1(4c50935b6d1038738ce631fbdc359416197b8c03) ) \
1986   ROM_LOAD( "95009015.bin", 0x0000, 0x0b7821, CRC(8b6ca362) SHA1(4c50935b6d1038738ce631fbdc359416197b8c03) ) /* BARX SOUNDS */ \
1987   ROM_REGION( 0x400000, "others", ROMREGION_ERASE00 ) \
1988   ROM_LOAD( "95008992.bin", 0x0000, 0x0aa536, CRC(aad10089) SHA1(d8a32f66432ee901be05435e8930d3897f4b4e33) ) /* BARX SOUNDS */ \
19721989   ROM_REGION( 0x400000, "pivs", ROMREGION_ERASE00 ) \
19731990   ROM_LOAD( "95890730.bin", 0x0000, 0x5000, CRC(9673d1ce) SHA1(fee90139fc8de5e7b6dfe741b4852a363c17eb93) ) \
19741991   ROM_LOAD( "95890731.bin", 0x0000, 0x5000, CRC(8aa52172) SHA1(441a649e3da00556a8ea966a88ee9b58b4943d3b) ) \
r14963r14964
19801997#define sc_gnc_others \
19811998   ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) \
19821999
1983#define sc_hellb_others \
2000#define SC4_95004211_HELLS_BELLS_PR6945 \
19842001   ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) \
1985   /* 95004211 HELLS BELLS PR6945 */ \
19862002   ROM_LOAD( "95004211.bin", 0x0000, 0x080000, CRC(2e729642) SHA1(c8dcdce52f930b3fa894c46907691a28a5499a16) ) \
1987   /* PR1402 HELLS BELLS SOUNDS11 */ \
2003
2004#define sc_hellb_others \
2005   ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) /* PR1402 HELLS BELLS SOUNDS11 */ \
19882006   ROM_LOAD( "95008341.bin", 0x0000, 0x100000, CRC(486e5395) SHA1(0ad68f271f4839d50a790b7f4427e1f1f1933bd4) ) \
19892007
19902008#define sc_leg_others \
r14963r14964
20192037   ROM_LOAD( "95008684.bin", 0x000000, 0x100000, CRC(52b7d26e) SHA1(ba6629dbad8d00c132c0ddf6a8a41ddc99231c75) ) \
20202038   ROM_LOAD( "95008685.bin", 0x100000, 0x100000, CRC(dc9717c0) SHA1(27234bb7c7e7bd1f395972ce2958d55e84005313) ) \
20212039
2022#define sc_pacmn_others \
2040#define QPS_PACP_SOUNDS \
20232041   ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) \
2024   ROM_LOAD( "95004183", 0x000000, 0x080000, CRC(4b28f610) SHA1(fff01c890a8c109bb4b522ee2391c15abdc2758c) ) \
2025   ROM_LOAD( "95004184", 0x080000, 0x080000, CRC(bee11fdd) SHA1(b5ce97108812e296c92a000444c1fb7a11286de4) ) \
2026   ROM_LOAD( "95004199.lo", 0x000000, 0x080000, CRC(3a9605c8) SHA1(ce1c94fe26eac9e145e94539f62f2bde740e5b9a) ) \
2027   ROM_LOAD( "95004199.hi", 0x080000, 0x080000, CRC(0ecfc531) SHA1(15e20eedf4b7d9102c40834612d111559b4dcbca) ) \
2042   /* PACP SOUNDS */ \
20282043   ROM_LOAD( "97000000.evn", 0x000000, 0x080000, CRC(5b13fe7b) SHA1(1bd32e577914ab4e3bc3282261f8c3cdf015b85d) ) /* pacp */ \
20292044   ROM_LOAD( "97000000.odd", 0x080000, 0x080000, CRC(8bab1c78) SHA1(ddc915a8c56473ba4d67d8c62c66105dd622b593) ) \
20302045
2046#define PACMAN_SOUNDS \
2047   ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) \
2048   /* PACMAN SOUNDS */   \
2049   ROM_LOAD( "95004183", 0x000000, 0x080000, CRC(4b28f610) SHA1(fff01c890a8c109bb4b522ee2391c15abdc2758c) ) \
2050   ROM_LOAD( "95004184", 0x080000, 0x080000, CRC(bee11fdd) SHA1(b5ce97108812e296c92a000444c1fb7a11286de4) ) \
2051
2052
20312053#define sc_paccs_others \
20322054   ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) \
2055   ROM_LOAD( "95004199.lo", 0x000000, 0x080000, CRC(3a9605c8) SHA1(ce1c94fe26eac9e145e94539f62f2bde740e5b9a) ) \
2056   ROM_LOAD( "95004199.hi", 0x080000, 0x080000, CRC(0ecfc531) SHA1(15e20eedf4b7d9102c40834612d111559b4dcbca) ) \
20332057
20342058#define sc_paccl_others \
20352059   ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) \
20362060   ROM_LOAD( "95008145.bin", 0x0000, 0x100000, CRC(e2ec54f8) SHA1(bb1c40b13151ed1e3c7ba603506701457392bb8b) ) \
2037   ROM_LOAD( "pacmancsnd.bin", 0x0000, 0x0bbb33, CRC(c505aa18) SHA1(a99bd1c4101269e2eb2b6becf210d9991fee1da1) ) \
2061   ROM_LOAD( "pacmancsnd.bin", 0x0000, 0x0bbb33, CRC(c505aa18) SHA1(a99bd1c4101269e2eb2b6becf210d9991fee1da1) ) /* identical but cut at 0xff bytes */ \
20382062
20392063#define sc_pacpl_others \
20402064   ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) \
r14963r14964
26702694   ROM_LOAD( "95004224.sn1", 0x000000, 0x080000, CRC(74382d29) SHA1(bd0323b7208e9b03e2d8468f7d4603fb4a3fe394) ) \
26712695   ROM_LOAD( "95004225.sn2", 0x080000, 0x080000, CRC(23efa88d) SHA1(af52ec3dcb45a2ea26eaa273c783134402105168) ) \
26722696
2697#define SC4_95004316_CAS_PHAR_GOLD_PR1261 \
2698   ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) \
2699   ROM_LOAD( "95004316.snd", 0x000000, 0x080000, CRC(94a9ec9c) SHA1(bab1a431e2857b9db9fa3f3ef28f150e19c4ae50) ) /* casino */ \
2700
26732701#define sc_pgold_others \
26742702   ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) \
2675   ROM_LOAD( "95004316.snd", 0x000000, 0x080000, CRC(94a9ec9c) SHA1(bab1a431e2857b9db9fa3f3ef28f150e19c4ae50) ) /* casino */ \
26762703   ROM_LOAD( "95008141.bin", 0x000000, 0x100000, CRC(e1b214dc) SHA1(811f6ec42961496f8cd9fb3434ab6a07457ca61a) ) \
26772704   ROM_LOAD( "95008142.bin", 0x100000, 0x100000, CRC(faa84d52) SHA1(f5139df5e9ff95fab3c01ac2b1aa44b1d939bf7a) ) \
26782705
r14963r14964
30173044   ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE00 ) \
30183045
30193046#define sc_clbtm_others \
3020   ROM_REGION( 0x800000, "ymz", ROMREGION_ERASE00 ) \
3021   /* very large sound roms! */ \
3022   ROM_LOAD( "95008055.p1", 0x0000, 0x800000, CRC(ef474fd3) SHA1(e7427184683603b57a3a8b37452fa6ec7a41e34c) ) \
3023   ROM_LOAD( "95008056.p2", 0x0000, 0x800000, CRC(39b1b566) SHA1(937ec27964124b92b75d4b37d09a35585baa68c6) ) \
3047   ROM_REGION( 0x1000000, "ymz", ROMREGION_ERASE00 ) \
3048   /* very large sound roms! - overdumps.. mostly garbage (cut them) */ \
3049   ROM_LOAD( "95008055.p1", 0x00000, 0x80000, CRC(ef474fd3) SHA1(e7427184683603b57a3a8b37452fa6ec7a41e34c) ) \
3050   ROM_IGNORE(0x780000) \
3051   ROM_LOAD( "95008056.p2", 0x80000, 0x80000, CRC(39b1b566) SHA1(937ec27964124b92b75d4b37d09a35585baa68c6) ) \
3052   ROM_IGNORE(0x780000) \
30243053   \
3054   ROM_REGION( 0x1000000, "others2", ROMREGION_ERASE00 ) \
30253055   ROM_LOAD( "95008055.bin", 0x0000, 0x100000, CRC(df9ae6e3) SHA1(5766cb1749aa92c34a76270a641f7a9302cc44d7) ) \
30263056   \
30273057   ROM_REGION( 0x400000, "others", ROMREGION_ERASE00 ) \
3028   /* dot matrix roms? */ \
3058   /* dot matrix roms? - for the SC1 version? */ \
30293059   ROM_LOAD( "club-temptation_mtx_(ihex)ss.hex", 0x0000, 0x01d0da, CRC(08ebee96) SHA1(2e87d734c966abab1d4a59c9481ebea161f77286) ) \
30303060   ROM_LOAD( "clubtempdot.bin", 0x0000, 0x010000, CRC(283d2d9c) SHA1(5b76a13ad674f8a40c270e5dbc61dac04d411d02) ) /* DM01 */ \
30313061   ROM_LOAD( "95717692a.bin", 0x0000, 0x008000, CRC(f9fe7b9a) SHA1(0e3fe5da9fc837726d08f02a2c6ed782f016c982) ) /* is this something else? sc1/2? */ \
src/mame/includes/bloodbro.h
r14963r14964
1313   required_shared_ptr<UINT16> m_bgvideoram;
1414   required_shared_ptr<UINT16> m_fgvideoram;
1515   required_shared_ptr<UINT16> m_txvideoram;
16   required_shared_ptr<UINT16> m_scroll;
16   optional_shared_ptr<UINT16> m_scroll;
1717
1818   tilemap_t *m_bg_tilemap;
1919   tilemap_t *m_fg_tilemap;
src/mame/includes/unico.h
r14963r14964
77      m_scroll(*this, "scroll"),
88      m_vram32(*this, "vram32"),
99      m_scroll32(*this, "scroll32"),
10      m_spriteram(*this, "spriteram"){ }
10      m_spriteram(*this, "spriteram", 0){ }
1111
12   required_shared_ptr<UINT16> m_vram;
13   required_shared_ptr<UINT16> m_scroll;
12   optional_shared_ptr<UINT16> m_vram;
13   optional_shared_ptr<UINT16> m_scroll;
1414   optional_shared_ptr<UINT32> m_vram32;
1515   optional_shared_ptr<UINT32> m_scroll32;
1616   tilemap_t *m_tilemap[3];
1717   int m_sprites_scrolldx;
1818   int m_sprites_scrolldy;
19   required_shared_ptr<UINT16> m_spriteram;
19   optional_shared_ptr<UINT16> m_spriteram;
2020   DECLARE_WRITE16_MEMBER(zeropnt_sound_bank_w);
2121   DECLARE_READ16_MEMBER(unico_gunx_0_msb_r);
2222   DECLARE_READ16_MEMBER(unico_guny_0_msb_r);
src/mame/includes/realbrk.h
r14963r14964
1818   required_shared_ptr<UINT16> m_vram_1;
1919   required_shared_ptr<UINT16> m_vram_2;
2020   required_shared_ptr<UINT16> m_vregs;
21   required_shared_ptr<UINT16> m_dsw_select;
21   optional_shared_ptr<UINT16> m_dsw_select;
2222   optional_shared_ptr<UINT16> m_backup_ram;
2323   optional_shared_ptr<UINT16> m_vram_0ras;
2424   optional_shared_ptr<UINT16> m_vram_1ras;
src/mame/includes/astrocde.h
r14963r14964
2222      m_videoram(*this, "videoram"),
2323      m_protected_ram(*this, "protected_ram"){ }
2424
25   required_shared_ptr<UINT8> m_videoram;
25   optional_shared_ptr<UINT8> m_videoram;
2626   UINT8 m_video_config;
2727   UINT8 m_sparkle[4];
2828   char m_totalword[256];
src/mame/includes/cninja.h
r14963r14964
4444   required_shared_ptr<UINT16> m_pf2_rowscroll;
4545   required_shared_ptr<UINT16> m_pf3_rowscroll;
4646   required_shared_ptr<UINT16> m_pf4_rowscroll;
47   required_shared_ptr<UINT16> m_ram;
47   optional_shared_ptr<UINT16> m_ram;
4848
4949   /* misc */
5050   int        m_scanline;
src/mame/includes/midwunit.h
r14963r14964
99public:
1010   midwunit_state(const machine_config &mconfig, device_type type, const char *tag)
1111      : midtunit_state(mconfig, type, tag),
12        m_nvram(*this, "nvram") { }
12        m_nvram(*this, "nvram"),
13        m_decode_memory(*this, "decode_memory", 16) { }
1314
1415   required_shared_ptr<UINT16>   m_nvram;
15   UINT8 *m_decode_memory;
16   required_shared_ptr<UINT8> m_decode_memory;
1617   UINT8 m_cmos_write_enable;
1718   UINT16 m_iodata[8];
1819   UINT8 m_ioshuffle[16];
src/mame/includes/tatsumi.h
r14963r14964
2222      m_roundup_l_ram(*this, "roundup_l_ram"),
2323      m_spriteram(*this, "spriteram") { }
2424
25   required_shared_ptr<UINT16> m_videoram;
26   required_shared_ptr<UINT16> m_cyclwarr_cpua_ram;
27   required_shared_ptr<UINT16> m_cyclwarr_cpub_ram;
25   optional_shared_ptr<UINT16> m_videoram;
26   optional_shared_ptr<UINT16> m_cyclwarr_cpua_ram;
27   optional_shared_ptr<UINT16> m_cyclwarr_cpub_ram;
2828   UINT16 m_bigfight_a20000[8];
2929   UINT16 m_bigfight_a60000[2];
30   required_shared_ptr<UINT16> m_apache3_g_ram;
30   optional_shared_ptr<UINT16> m_apache3_g_ram;
3131   UINT16 m_bigfight_a40000[2];
3232   UINT8 *m_rom_sprite_lookup1;
3333   UINT8 *m_rom_sprite_lookup2;
r14963r14964
3838   optional_shared_ptr<UINT16> m_roundup5_unknown0;
3939   optional_shared_ptr<UINT16> m_roundup5_unknown1;
4040   optional_shared_ptr<UINT16> m_roundup5_unknown2;
41   required_shared_ptr<UINT16> m_68k_ram;
42   required_shared_ptr<UINT8> m_apache3_z80_ram;
41   optional_shared_ptr<UINT16> m_68k_ram;
42   optional_shared_ptr<UINT8> m_apache3_z80_ram;
4343   UINT16 m_control_word;
4444   UINT16 m_apache3_rotate_ctrl[12];
4545   required_shared_ptr<UINT16> m_sprite_control_ram;
src/mame/includes/meadows.h
r14963r14964
1414      m_spriteram(*this, "spriteram"),
1515      m_videoram(*this, "videoram"){ }
1616
17   required_shared_ptr<UINT8> m_spriteram;
17   optional_shared_ptr<UINT8> m_spriteram;
1818   required_shared_ptr<UINT8> m_videoram;
1919   UINT8 m_dac;
2020   int m_dac_enable;
src/mame/includes/m72.h
r14963r14964
2121   required_shared_ptr<UINT16> m_videoram2;
2222   optional_shared_ptr<UINT16> m_majtitle_rowscrollram;
2323   optional_shared_ptr<UINT16> m_spriteram2;
24   required_shared_ptr<UINT8> m_soundram;
24   optional_shared_ptr<UINT8> m_soundram;
2525
2626   UINT16 *m_protection_ram;
2727   emu_timer *m_scanline_timer;
src/mame/includes/fantland.h
r14963r14964
55public:
66   fantland_state(const machine_config &mconfig, device_type type, const char *tag)
77      : driver_device(mconfig, type, tag) ,
8      m_spriteram(*this, "spriteram", 16),
9      m_spriteram2(*this, "spriteram2", 16){ }
8      m_spriteram(*this, "spriteram", 0),
9      m_spriteram2(*this, "spriteram2", 0){ }
1010
1111   /* memory pointers */
1212//  UINT8 *    m_spriteram;   // currently directly used in a 16bit map...
r14963r14964
2929   device_t *m_msm2;
3030   device_t *m_msm3;
3131   device_t *m_msm4;
32   required_shared_ptr<UINT8> m_spriteram;
33   required_shared_ptr<UINT8> m_spriteram2;
32   optional_shared_ptr<UINT8> m_spriteram;
33   optional_shared_ptr<UINT8> m_spriteram2;
3434   DECLARE_WRITE8_MEMBER(fantland_nmi_enable_w);
3535   DECLARE_WRITE16_MEMBER(fantland_nmi_enable_16_w);
3636   DECLARE_WRITE8_MEMBER(fantland_soundlatch_w);
src/mame/includes/mcr68.h
r14963r14964
11#include "machine/6821pia.h"
2#include "audio/midway.h"
3#include "audio/williams.h"
24
35struct counter_state
46{
r14963r14964
1012   attotime      period;
1113};
1214
13class mcr68_state : public mcr_state
15class mcr68_state : public driver_device
1416{
1517public:
1618   mcr68_state(const machine_config &mconfig, device_type type, const char *tag)
17      : mcr_state(mconfig, type, tag),
18        m_videoram16(*this, "videoram16"),
19        m_spriteram16(*this, "spriteram16") { }
19      : driver_device(mconfig, type, tag),
20      m_chip_squeak_deluxe(*this, "csd"),
21      m_sounds_good(*this, "sg"),
22      m_turbo_chip_squeak(*this, "tcs"),
23      m_cvsd_sound(*this, "cvsd"),
24        m_videoram(*this, "videoram"),
25        m_spriteram(*this, "spriteram") { }
2026
21   required_shared_ptr<UINT16> m_videoram16;
27   optional_device<midway_chip_squeak_deluxe_device> m_chip_squeak_deluxe;
28   optional_device<midway_sounds_good_device> m_sounds_good;
29   optional_device<midway_turbo_chip_squeak_device> m_turbo_chip_squeak;
30   optional_device<williams_cvsd_sound_device> m_cvsd_sound;
31
32   required_shared_ptr<UINT16> m_videoram;
33   required_shared_ptr<UINT16> m_spriteram;
2234   UINT16 m_control_word;
2335   UINT8 m_protection_data[5];
2436   attotime m_timing_factor;
r14963r14964
4052   attotime m_m6840_internal_counter_period;
4153   tilemap_t *m_bg_tilemap;
4254   tilemap_t *m_fg_tilemap;
43   required_shared_ptr<UINT16> m_spriteram16;
4455   DECLARE_READ16_MEMBER(zwackery_6840_r);
4556   DECLARE_WRITE16_MEMBER(xenophobe_control_w);
4657   DECLARE_WRITE16_MEMBER(blasted_control_w);
src/mame/includes/m90.h
r14963r14964
77      m_spriteram(*this, "spriteram"){ }
88
99   required_shared_ptr<UINT16> m_video_data;
10   required_shared_ptr<UINT16> m_spriteram;
10   optional_shared_ptr<UINT16> m_spriteram;
1111   UINT16 m_video_control_data[8];
1212   tilemap_t *m_pf1_layer;
1313   tilemap_t *m_pf2_layer;
src/mame/includes/segas32.h
r14963r14964
2121      m_z80_shared_ram(*this,"z80_shared_ram"),
2222      m_ga2_dpram(*this,"ga2_dpram"),
2323      m_system32_workram(*this,"workram"),
24      m_system32_videoram(*this,"videoram"),
25      m_system32_spriteram(*this,"spriteram"),
26      m_system32_paletteram(*this,"paletteram") { }
24      m_system32_videoram(*this,"videoram", 0),
25      m_system32_spriteram(*this,"spriteram", 0),
26      m_system32_paletteram(*this,"paletteram", 0) { }
2727
2828   required_shared_ptr<UINT8> m_z80_shared_ram;
2929   optional_shared_ptr<UINT8> m_ga2_dpram;
30   required_shared_ptr<UINT16> m_system32_workram;
30   optional_shared_ptr<UINT16> m_system32_workram;
3131   required_shared_ptr<UINT16> m_system32_videoram;
3232   required_shared_ptr<UINT16> m_system32_spriteram;
3333
src/mame/includes/offtwall.h
r14963r14964
1010{
1111public:
1212   offtwall_state(const machine_config &mconfig, device_type type, const char *tag)
13      : atarigen_state(mconfig, type, tag) { }
13      : atarigen_state(mconfig, type, tag),
14        m_bankrom_base(*this, "bankrom_base") { }
1415
1516   UINT16 *m_bankswitch_base;
16   UINT16 *m_bankrom_base;
17   required_shared_ptr<UINT16> m_bankrom_base;
1718   UINT32 m_bank_offset;
1819
1920   UINT16 *m_spritecache_count;
src/mame/includes/mystwarr.h
r14963r14964
2222   int m_roz_rombank;
2323   tilemap_t *m_ult_936_tilemap;
2424   UINT16 m_clip;
25   required_shared_ptr<UINT16> m_spriteram;
25   optional_shared_ptr<UINT16> m_spriteram;
2626
2727   required_device<cpu_device> m_maincpu;
2828   DECLARE_READ16_MEMBER(eeprom_r);
src/mame/includes/gberet.h
r14963r14964
1919   /* memory pointers */
2020   required_shared_ptr<UINT8> m_colorram;
2121   required_shared_ptr<UINT8> m_videoram;
22   required_shared_ptr<UINT8> m_spriteram2;
22   optional_shared_ptr<UINT8> m_spriteram2;
2323   required_shared_ptr<UINT8> m_spriteram;
24   required_shared_ptr<UINT8> m_scrollram;
25   required_shared_ptr<UINT8> m_soundlatch;
24   optional_shared_ptr<UINT8> m_scrollram;
25   optional_shared_ptr<UINT8> m_soundlatch;
2626
2727   /* video-related */
2828   tilemap_t * m_bg_tilemap;
src/mame/includes/gottlieb.h
r14963r14964
22
33    Gottlieb hardware
44
5****************************************************************************
6
7    Copyright Aaron Giles
8    All rights reserved.
9
10    Redistribution and use in source and binary forms, with or without
11    modification, are permitted provided that the following conditions are
12    met:
13
14        * Redistributions of source code must retain the above copyright
15          notice, this list of conditions and the following disclaimer.
16        * Redistributions in binary form must reproduce the above copyright
17          notice, this list of conditions and the following disclaimer in
18          the documentation and/or other materials provided with the
19          distribution.
20        * Neither the name 'MAME' nor the names of its contributors may be
21          used to endorse or promote products derived from this software
22          without specific prior written permission.
23
24    THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR
25    IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
26    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27    DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT,
28    INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
29    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
30    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
32    STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
33    IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34    POSSIBILITY OF SUCH DAMAGE.
35
536***************************************************************************/
637
738#include "cpu/i86/i86.h"
src/mame/includes/tubep.h
r14963r14964
1414   emu_timer *m_interrupt_timer;
1515   int m_curr_scanline;
1616   required_shared_ptr<UINT8> m_textram;
17   required_shared_ptr<UINT8> m_backgroundram;
17   optional_shared_ptr<UINT8> m_backgroundram;
1818   required_shared_ptr<UINT8> m_sprite_colorsharedram;
1919   optional_shared_ptr<UINT8> m_rjammer_backgroundram;
2020   UINT8 *m_spritemap;
src/mame/includes/hng64.h
r14963r14964
151151   DECLARE_READ8_MEMBER(hng64_comm_shared_r);
152152   DECLARE_WRITE8_MEMBER(hng64_comm_shared_w);
153153   DECLARE_WRITE32_MEMBER(hng64_videoram_w);
154   DECLARE_DIRECT_UPDATE_MEMBER(KL5C80_direct_handler);
154155};
155156
156157
src/mame/includes/moo.h
r14963r14964
1313      m_spriteram(*this, "spriteram"){ }
1414
1515   /* memory pointers */
16   required_shared_ptr<UINT16> m_workram;
16   optional_shared_ptr<UINT16> m_workram;
1717   required_shared_ptr<UINT16> m_spriteram;
1818//  UINT16 *    m_paletteram;    // currently this uses generic palette handling
1919
src/mame/includes/pktgaldx.h
r14963r14964
1616      m_pktgaldb_sprites(*this, "pktgaldb_spr"){ }
1717
1818   /* memory pointers */
19   required_shared_ptr<UINT16> m_pf1_rowscroll;
20   required_shared_ptr<UINT16> m_pf2_rowscroll;
21   required_shared_ptr<UINT16> m_spriteram;
19   optional_shared_ptr<UINT16> m_pf1_rowscroll;
20   optional_shared_ptr<UINT16> m_pf2_rowscroll;
21   optional_shared_ptr<UINT16> m_spriteram;
2222//  UINT16 *  paletteram;    // currently this uses generic palette handling (in decocomn.c)
2323
2424   optional_shared_ptr<UINT16> m_pktgaldb_fgram;
src/mame/includes/mcr.h
r14963r14964
99#include "machine/z80ctc.h"
1010#include "machine/z80pio.h"
1111#include "machine/z80sio.h"
12#include "audio/midway.h"
1213
1314/* constants */
1415#define MAIN_OSC_MCR_I      XTAL_19_968MHz
r14963r14964
2122      : driver_device(mconfig, type, tag),
2223        m_maincpu(*this, "maincpu"),
2324        m_spriteram(*this, "spriteram") ,
24      m_videoram(*this, "videoram"){ }
25      m_videoram(*this, "videoram"),
26      m_ssio(*this, "ssio"),
27      m_chip_squeak_deluxe(*this, "csd"),
28      m_sounds_good(*this, "sg"),
29      m_turbo_chip_squeak(*this, "tcs"),
30      m_squawk_n_talk(*this, "snt") { }
2531
2632   // these should be required but can't because mcr68 shares with us
2733   // once the sound boards are properly device-ified, fix this
r14963r14964
2935   optional_shared_ptr<UINT8> m_spriteram;
3036   optional_shared_ptr<UINT8> m_videoram;
3137   
38   optional_device<midway_ssio_device> m_ssio;
39   optional_device<midway_chip_squeak_deluxe_device> m_chip_squeak_deluxe;
40   optional_device<midway_sounds_good_device> m_sounds_good;
41   optional_device<midway_turbo_chip_squeak_device> m_turbo_chip_squeak;
42   optional_device<midway_squawk_n_talk_device> m_squawk_n_talk;
43   
3244   DECLARE_WRITE8_MEMBER(mcr_control_port_w);
3345   DECLARE_WRITE8_MEMBER(mcr_ipu_laserdisk_w);
3446   DECLARE_READ8_MEMBER(mcr_ipu_watchdog_r);
r14963r14964
5567   DECLARE_READ8_MEMBER(demoderb_ip1_r);
5668   DECLARE_READ8_MEMBER(demoderb_ip2_r);
5769   DECLARE_WRITE8_MEMBER(demoderb_op4_w);
58   DECLARE_READ8_MEMBER(ssio_irq_clear);
59   DECLARE_WRITE8_MEMBER(ssio_status_w);
60   DECLARE_READ8_MEMBER(ssio_data_r);
61   DECLARE_WRITE8_MEMBER(ssio_data_w);
62   DECLARE_READ8_MEMBER(ssio_status_r);
63   DECLARE_READ8_MEMBER(ssio_input_port_r);
64   DECLARE_WRITE8_MEMBER(ssio_output_port_w);
65   DECLARE_WRITE8_MEMBER(csdeluxe_data_w);
66   DECLARE_READ8_MEMBER(csdeluxe_status_r);
67   DECLARE_WRITE8_MEMBER(soundsgood_data_w);
68   DECLARE_READ8_MEMBER(soundsgood_status_r);
69   DECLARE_WRITE8_MEMBER(turbocs_data_w);
70   DECLARE_READ8_MEMBER(turbocs_status_r);
71   DECLARE_WRITE8_MEMBER(squawkntalk_dac_w);
72   DECLARE_WRITE8_MEMBER(squawkntalk_data_w);
7370};
7471
7572
src/mame/includes/dooyong.h
r14963r14964
1212
1313   optional_device<buffered_spriteram8_device> m_spriteram;
1414   optional_device<buffered_spriteram16_device> m_spriteram16;
15   required_shared_ptr<UINT8> m_txvideoram;
15   optional_shared_ptr<UINT8> m_txvideoram;
1616   optional_shared_ptr<UINT8> m_paletteram_flytiger;
1717   UINT8 m_sprites_disabled;
1818   UINT8 m_flytiger_palette_bank;
src/mame/includes/williams.h
r14963r14964
66
77
88#include "machine/6821pia.h"
9#include "audio/williams.h"
910
1011class williams_state : public driver_device
1112{
1213public:
1314   williams_state(const machine_config &mconfig, device_type type, const char *tag)
1415      : driver_device(mconfig, type, tag),
16        m_cvsd_sound(*this, "cvsd"),
1517        m_nvram(*this, "nvram") ,
1618      m_videoram(*this, "videoram"),
1719      m_blaster_palette_0(*this, "blaster_pal0"),
1820      m_blaster_scanline_control(*this, "blaster_scan"),
1921      m_williams2_tileram(*this, "williams2_tile"){ }
2022
23   optional_device<williams_cvsd_sound_device> m_cvsd_sound;
24
2125   required_shared_ptr<UINT8>   m_nvram;
2226   UINT8 *m_mayday_protection;
2327   required_shared_ptr<UINT8> m_videoram;
src/mame/includes/atarigt.h
r14963r14964
1717{
1818public:
1919   atarigt_state(const machine_config &mconfig, device_type type, const char *tag)
20      : atarigen_state(mconfig, type, tag) { }
20      : atarigen_state(mconfig, type, tag),
21        m_colorram(*this, "colorram", 32),
22        m_mo_command(*this, "mo_command") { }
2123
2224   UINT8         m_is_primrage;
23   UINT16 *      m_colorram;
25   required_shared_ptr<UINT16> m_colorram;
2426
2527   bitmap_ind16 *      m_pf_bitmap;
2628   bitmap_ind16 *      m_an_bitmap;
r14963r14964
3436
3537   UINT32         m_expanded_mram[MRAM_ENTRIES * 3];
3638
37   UINT32 *      m_mo_command;
39   required_shared_ptr<UINT32> m_mo_command;
3840
3941   void         (*m_protection_w)(address_space *space, offs_t offset, UINT16 data);
4042   void         (*m_protection_r)(address_space *space, offs_t offset, UINT16 *data);
src/mame/includes/starwars.h
r14963r14964
5858   DECLARE_READ8_MEMBER(starwars_main_ready_flag_r);
5959   DECLARE_WRITE8_MEMBER(starwars_main_wr_w);
6060   DECLARE_WRITE8_MEMBER(starwars_soundrst_w);
61   DECLARE_DIRECT_UPDATE_MEMBER(esb_setdirect);
6162};
6263
6364
src/mame/mame.mak
r14963r14964
976976   $(DRIVERS)/astrocde.o $(VIDEO)/astrocde.o \
977977   $(DRIVERS)/balsente.o $(MACHINE)/balsente.o $(VIDEO)/balsente.o \
978978   $(DRIVERS)/gridlee.o $(AUDIO)/gridlee.o $(VIDEO)/gridlee.o \
979   $(DRIVERS)/mcr.o $(MACHINE)/mcr.o $(AUDIO)/mcr.o $(VIDEO)/mcr.o \
979   $(DRIVERS)/mcr.o $(MACHINE)/mcr.o $(VIDEO)/mcr.o \
980980   $(DRIVERS)/mcr3.o $(VIDEO)/mcr3.o \
981981   $(DRIVERS)/mcr68.o $(MACHINE)/mcr68.o $(VIDEO)/mcr68.o \
982982   $(DRIVERS)/midqslvr.o \
r14963r14964
994994   $(MACHINE)/midwayic.o \
995995   $(AUDIO)/dcs.o \
996996   $(AUDIO)/gorf.o \
997   $(AUDIO)/midway.o \
997998   $(AUDIO)/wow.o \
998999
9991000$(MAMEOBJ)/namco.a: \
src/mame/video/zaxxon.c
r14963r14964
165165   zaxxon_state *state = machine.driver_data<zaxxon_state>();
166166
167167   /* allocate our own spriteram since it is not accessible by the main CPU */
168   //TODO:TIX
169   //state->m_spriteram = auto_alloc_array(machine, UINT8, 0x100);
168   state->m_spriteram.allocate(0x100);
170169
171170   /* register for save states */
172171   state->save_item(NAME(state->m_congo_fg_bank));
173172   state->save_item(NAME(state->m_congo_color_bank));
174173   state->save_item(NAME(state->m_congo_custom));
175   //state->save_pointer(NAME(state->m_spriteram), 0x100);
176174
177175   video_start_common(machine, congo_get_fg_tile_info);
178176}
src/mame/video/fastfred.c
r14963r14964
239239   fastfred_state *state = machine.driver_data<fastfred_state>();
240240   int offs;
241241
242   for (offs = state->m_spriteram_size - 4; offs >= 0; offs -= 4)
242   for (offs = state->m_spriteram.bytes() - 4; offs >= 0; offs -= 4)
243243   {
244244      UINT8 code,sx,sy;
245245      int flipx,flipy;
src/mame/video/galpanic.c
r14963r14964
5353   int offs;
5454   int sx=0, sy=0;
5555
56   for (offs = 0;offs < state->m_spriteram_size/2;offs += 4)
56   for (offs = 0;offs < state->m_spriteram.bytes()/2;offs += 4)
5757   {
5858      int code,color,flipx,flipy;
5959
r14963r14964
8989   galpanic_state *state = machine.driver_data<galpanic_state>();
9090   int offs;
9191
92   for (offs = 0;offs < state->m_fgvideoram_size/2;offs++)
92   for (offs = 0;offs < state->m_fgvideoram.bytes()/2;offs++)
9393   {
9494      int sx,sy,color;
9595
src/mame/video/suna8.c
r14963r14964
170170   if (!(state->m_text_dim > 0))
171171   {
172172      state->m_generic_paletteram_8.allocate(0x200 * 2);
173      //TODO:FIX
174      //state->m_spriteram = auto_alloc_array(machine, UINT8, 0x2000 * 2);
173      state->m_spriteram.allocate(0x2000 * 2);
175174      state->m_spritebank  = 0;
176175      state->m_palettebank = 0;
177176   }
src/mame/video/tia.c
r14963r14964
88#include "tia.h"
99#include "sound/tiaintf.h"
1010
11#define HMOVE_INACTIVE      -200
12#define PLAYER_GFX_SLOTS   4
13
14// Per player graphic
15// - pixel number to start drawing from (0-7, from GRPx) / number of pixels drawn from GRPx
16// - display position to start drawing
17// - size to use
18struct player_gfx {
19   int   start_pixel[PLAYER_GFX_SLOTS];
20   int start_drawing[PLAYER_GFX_SLOTS];
21   int size[PLAYER_GFX_SLOTS];
22   int skipclip[PLAYER_GFX_SLOTS];
23};
24
25static struct player_gfx p0gfx;
26static struct player_gfx p1gfx;
27
28static UINT64 frame_cycles;
29static UINT64 paddle_cycles;
30
31static int horzP0;
32static int horzP1;
33static int horzM0;
34static int horzM1;
35static int horzBL;
36static int motclkP0;
37static int motclkP1;
38static int motclkM0;
39static int motclkM1;
40static int motclkBL;
41static int startP0;
42static int startP1;
43static int startM0;
44static int startM1;
45static int skipclipP0;
46static int skipclipP1;
47static int skipM0delay;
48static int skipM1delay;
49
50static int current_bitmap;
51
52static int prev_x;
53static int prev_y;
54
55static UINT8 VSYNC;
56static UINT8 VBLANK;
57static UINT8 COLUP0;
58static UINT8 COLUP1;
59static UINT8 COLUBK;
60static UINT8 COLUPF;
61static UINT8 CTRLPF;
62static UINT8 GRP0;
63static UINT8 GRP1;
64static UINT8 REFP0;
65static UINT8 REFP1;
66static UINT8 HMP0;
67static UINT8 HMP1;
68static UINT8 HMM0;
69static UINT8 HMM1;
70static UINT8 HMBL;
71static UINT8 VDELP0;
72static UINT8 VDELP1;
73static UINT8 VDELBL;
74static UINT8 NUSIZ0;
75static UINT8 NUSIZ1;
76static UINT8 ENAM0;
77static UINT8 ENAM1;
78static UINT8 ENABL;
79static UINT8 CXM0P;
80static UINT8 CXM1P;
81static UINT8 CXP0FB;
82static UINT8 CXP1FB;
83static UINT8 CXM0FB;
84static UINT8 CXM1FB;
85static UINT8 CXBLPF;
86static UINT8 CXPPMM;
87static UINT8 RESMP0;
88static UINT8 RESMP1;
89static UINT8 PF0;
90static UINT8 PF1;
91static UINT8 PF2;
92static UINT8 INPT4;
93static UINT8 INPT5;
94
95static UINT8 prevGRP0;
96static UINT8 prevGRP1;
97static UINT8 prevENABL;
98
99static int HMOVE_started;
100static int HMOVE_started_previous;
101static UINT8 HMP0_latch;
102static UINT8 HMP1_latch;
103static UINT8 HMM0_latch;
104static UINT8 HMM1_latch;
105static UINT8 HMBL_latch;
106static UINT8 REFLECT;      /* Should playfield be reflected or not */
107static UINT8 NUSIZx_changed;
108
109static bitmap_ind16 *helper[3];
110
111static UINT16 screen_height;
112
11311static const int nusiz[8][3] =
11412{
11513   { 1, 1, 0 },
r14963r14964
12220   { 1, 4, 0 }
12321};
12422
125static read16_space_func   tia_read_input_port;
126static read8_space_func   tia_get_databus;
127static write16_space_func   tia_vsync_callback;
128
12923static void extend_palette(running_machine &machine) {
13024   int   i,j;
13125
r14963r14964
268162   extend_palette( machine );
269163}
270164
165// device type definition
166const device_type TIA_VIDEO = &device_creator<tia_video_device>;
271167
272VIDEO_START( tia )
168//-------------------------------------------------
169//  tia_video_device - constructor
170//-------------------------------------------------
171
172tia_video_device::tia_video_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
173    : device_t(mconfig, TIA_VIDEO, "TIA Video", tag, owner, clock)
273174{
274   int cx = machine.primary_screen->width();
175}
275176
276   screen_height = machine.primary_screen->height();
277   helper[0] = auto_bitmap_ind16_alloc(machine, cx, TIA_MAX_SCREEN_HEIGHT);
278   helper[1] = auto_bitmap_ind16_alloc(machine, cx, TIA_MAX_SCREEN_HEIGHT);
279   helper[2] = auto_bitmap_ind16_alloc(machine, cx, TIA_MAX_SCREEN_HEIGHT);
177
178//-------------------------------------------------
179//  device_config_complete - perform any
180//  operations now that the configuration is
181//  complete
182//-------------------------------------------------
183
184void tia_video_device::device_config_complete()
185{
186   // inherit a copy of the static data
187   const tia_interface *intf = reinterpret_cast<const tia_interface *>(static_config());
188   if (intf != NULL)
189      *static_cast<tia_interface *>(this) = *intf;
190
191   // or initialize to defaults if none provided
192   else
193   {
194      memset(&m_read_input_port_cb, 0, sizeof(m_read_input_port_cb));
195      memset(&m_databus_contents_cb, 0, sizeof(m_databus_contents_cb));
196      memset(&m_vsync_callback_cb, 0, sizeof(m_vsync_callback_cb));
197   }
280198}
199//-------------------------------------------------
200//  device_start - device-specific startup
201//-------------------------------------------------
281202
203void tia_video_device::device_start()
204{
205   // resolve callbacks
206   m_read_input_port_func.resolve(m_read_input_port_cb, *this);
207   m_databus_contents_func.resolve(m_databus_contents_cb, *this);
208   m_vsync_callback_func.resolve(m_vsync_callback_cb, *this);
282209
283SCREEN_UPDATE_IND16( tia )
210
211   int cx = machine().primary_screen->width();
212
213   screen_height = machine().primary_screen->height();
214   helper[0] = auto_bitmap_ind16_alloc(machine(), cx, TIA_MAX_SCREEN_HEIGHT);
215   helper[1] = auto_bitmap_ind16_alloc(machine(), cx, TIA_MAX_SCREEN_HEIGHT);
216   helper[2] = auto_bitmap_ind16_alloc(machine(), cx, TIA_MAX_SCREEN_HEIGHT);
217}
218
219
220//-------------------------------------------------
221//  screen_update -
222//-------------------------------------------------
223
224UINT32 tia_video_device::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
284225{
285226   screen_height = screen.height();
286227   copybitmap(bitmap, *helper[2], 0, 0, 0, 0, cliprect);
r14963r14964
288229}
289230
290231
291static void draw_sprite_helper(UINT8* p, UINT8 *col, struct player_gfx *gfx,
232void tia_video_device::draw_sprite_helper(UINT8* p, UINT8 *col, struct player_gfx *gfx,
292233   UINT8 GRP, UINT8 COLUP, UINT8 REFP)
293234{
294235   int i;
r14963r14964
321262}
322263
323264
324static void draw_missile_helper(UINT8* p, UINT8* col, int horz, int skipdelay, int latch, int start,
265void tia_video_device::draw_missile_helper(UINT8* p, UINT8* col, int horz, int skipdelay, int latch, int start,
325266   UINT8 RESMP, UINT8 ENAM, UINT8 NUSIZ, UINT8 COLUM)
326267{
327268   int num = nusiz[NUSIZ & 7][0];
r14963r14964
385326}
386327
387328
388static void draw_playfield_helper(UINT8* p, UINT8* col, int horz,
329void tia_video_device::draw_playfield_helper(UINT8* p, UINT8* col, int horz,
389330   UINT8 COLU, UINT8 REFPF)
390331{
391332   UINT32 PF =
r14963r14964
431372}
432373
433374
434static void draw_ball_helper(UINT8* p, UINT8* col, int horz, UINT8 ENAB)
375void tia_video_device::draw_ball_helper(UINT8* p, UINT8* col, int horz, UINT8 ENAB)
435376{
436377   int width = 1 << ((CTRLPF >> 4) & 3);
437378
r14963r14964
450391}
451392
452393
453static void drawS0(UINT8* p, UINT8* col)
394void tia_video_device::drawS0(UINT8* p, UINT8* col)
454395{
455396   draw_sprite_helper(p, col, &p0gfx, (VDELP0 & 1) ? prevGRP0 : GRP0, COLUP0, REFP0);
456397}
457398
458399
459static void drawS1(UINT8* p, UINT8* col)
400void tia_video_device::drawS1(UINT8* p, UINT8* col)
460401{
461402   draw_sprite_helper(p, col, &p1gfx, (VDELP1 & 1) ? prevGRP1 : GRP1, COLUP1, REFP1);
462403}
463404
464405
465static void drawM0(UINT8* p, UINT8* col)
406void tia_video_device::drawM0(UINT8* p, UINT8* col)
466407{
467408   draw_missile_helper(p, col, horzM0, skipM0delay, HMM0_latch, startM0, RESMP0, ENAM0, NUSIZ0, COLUP0);
468409}
469410
470411
471static void drawM1(UINT8* p, UINT8* col)
412void tia_video_device::drawM1(UINT8* p, UINT8* col)
472413{
473414   draw_missile_helper(p, col, horzM1, skipM1delay, HMM1_latch, startM1, RESMP1, ENAM1, NUSIZ1, COLUP1);
474415}
475416
476417
477static void drawBL(UINT8* p, UINT8* col)
418void tia_video_device::drawBL(UINT8* p, UINT8* col)
478419{
479420   draw_ball_helper(p, col, horzBL, (VDELBL & 1) ? prevENABL : ENABL);
480421}
481422
482423
483static void drawPF(UINT8* p, UINT8 *col)
424void tia_video_device::drawPF(UINT8* p, UINT8 *col)
484425{
485426   draw_playfield_helper(p, col, 0,
486427      ((CTRLPF & 6) == 2) ? COLUP0 : COLUPF, 0);
r14963r14964
490431}
491432
492433
493static int collision_check(UINT8* p1, UINT8* p2, int x1, int x2)
434int tia_video_device::collision_check(UINT8* p1, UINT8* p2, int x1, int x2)
494435{
495436   int i;
496437
r14963r14964
506447}
507448
508449
509INLINE int current_x(address_space *space)
450int tia_video_device::current_x()
510451{
511   return 3 * ((space->machine().firstcpu->total_cycles() - frame_cycles) % 76) - 68;
452   return 3 * ((machine().firstcpu->total_cycles() - frame_cycles) % 76) - 68;
512453}
513454
514455
515INLINE int current_y(address_space *space)
456int tia_video_device::current_y()
516457{
517   return (space->machine().firstcpu->total_cycles() - frame_cycles) / 76;
458   return (machine().firstcpu->total_cycles() - frame_cycles) / 76;
518459}
519460
520461
521static void setup_pXgfx(void)
462void tia_video_device::setup_pXgfx(void)
522463{
523464   int i;
524465   for ( i = 0; i < PLAYER_GFX_SLOTS; i++ )
r14963r14964
566507   }
567508}
568509
569static void update_bitmap(int next_x, int next_y)
510void tia_video_device::update_bitmap(int next_x, int next_y)
570511{
571512   int x;
572513   int y;
r14963r14964
851792}
852793
853794
854static WRITE8_HANDLER( WSYNC_w )
795WRITE8_MEMBER( tia_video_device::WSYNC_w )
855796{
856   int cycles = space->machine().firstcpu->total_cycles() - frame_cycles;
797   int cycles = machine().firstcpu->total_cycles() - frame_cycles;
857798
858799   if (cycles % 76)
859800   {
860      device_adjust_icount(&space->device(), cycles % 76 - 76);
801      device_adjust_icount(&space.device(), cycles % 76 - 76);
861802   }
862803}
863804
864805
865static WRITE8_HANDLER( VSYNC_w )
806WRITE8_MEMBER( tia_video_device::VSYNC_w )
866807{
867808   if (data & 2)
868809   {
869810      if (!(VSYNC & 2))
870811      {
871         int curr_y = current_y(space);
812         int curr_y = current_y();
872813
873814         if ( curr_y > 5 )
874815            update_bitmap(
875               space->machine().primary_screen->width(),
876               space->machine().primary_screen->height());
816               machine().primary_screen->width(),
817               machine().primary_screen->height());
877818
878         if ( tia_vsync_callback ) {
879            tia_vsync_callback( space, 0, curr_y, 0xFFFF );
819         if ( !m_vsync_callback_func.isnull() ) {
820            m_vsync_callback_func(0, curr_y, 0xFFFF );
880821         }
881822
882823         prev_y = 0;
883824         prev_x = 0;
884825
885         frame_cycles += 76 * current_y(space);
826         frame_cycles += 76 * current_y();
886827      }
887828   }
888829
r14963r14964
890831}
891832
892833
893static WRITE8_HANDLER( VBLANK_w )
834WRITE8_MEMBER( tia_video_device::VBLANK_w )
894835{
895836   if (data & 0x80)
896837   {
897      paddle_cycles = space->machine().firstcpu->total_cycles();
838      paddle_cycles = machine().firstcpu->total_cycles();
898839   }
899840   if ( ! ( VBLANK & 0x40 ) ) {
900841      INPT4 = 0x80;
r14963r14964
904845}
905846
906847
907static WRITE8_HANDLER( CTRLPF_w )
848WRITE8_MEMBER( tia_video_device::CTRLPF_w )
908849{
909   int curr_x = current_x(space);
850   int curr_x = current_x();
910851
911852   CTRLPF = data;
912853   if ( curr_x < 80 ) {
r14963r14964
914855   }
915856}
916857
917static WRITE8_HANDLER( HMP0_w )
858WRITE8_MEMBER( tia_video_device::HMP0_w )
918859{
919   int curr_x = current_x(space);
860   int curr_x = current_x();
920861
921862   data &= 0xF0;
922863
r14963r14964
946887   HMP0 = data;
947888}
948889
949static WRITE8_HANDLER( HMP1_w )
890WRITE8_MEMBER( tia_video_device::HMP1_w )
950891{
951   int curr_x = current_x(space);
892   int curr_x = current_x();
952893
953894   data &= 0xF0;
954895
r14963r14964
978919   HMP1 = data;
979920}
980921
981static WRITE8_HANDLER( HMM0_w )
922WRITE8_MEMBER( tia_video_device::HMM0_w )
982923{
983   int curr_x = current_x(space);
924   int curr_x = current_x();
984925
985926   data &= 0xF0;
986927
r14963r14964
1009950   HMM0 = data;
1010951}
1011952
1012static WRITE8_HANDLER( HMM1_w )
953WRITE8_MEMBER( tia_video_device::HMM1_w )
1013954{
1014   int curr_x = current_x(space);
955   int curr_x = current_x();
1015956
1016957   data &= 0xF0;
1017958
r14963r14964
1040981   HMM1 = data;
1041982}
1042983
1043static WRITE8_HANDLER( HMBL_w )
984WRITE8_MEMBER( tia_video_device::HMBL_w )
1044985{
1045   int curr_x = current_x(space);
986   int curr_x = current_x();
1046987
1047988   data &= 0xF0;
1048989
r14963r14964
10711012   HMBL = data;
10721013}
10731014
1074static WRITE8_HANDLER( HMOVE_w )
1015WRITE8_MEMBER( tia_video_device::HMOVE_w )
10751016{
1076   int curr_x = current_x(space);
1077   int curr_y = current_y(space);
1017   int curr_x = current_x();
1018   int curr_y = current_y();
10781019
10791020   HMOVE_started = curr_x;
10801021
r14963r14964
11961137}
11971138
11981139
1199static WRITE8_HANDLER( RSYNC_w )
1140WRITE8_MEMBER( tia_video_device::RSYNC_w )
12001141{
12011142   /* this address is used in chip testing */
12021143}
12031144
12041145
1205static WRITE8_HANDLER( NUSIZ0_w )
1146WRITE8_MEMBER( tia_video_device::NUSIZ0_w )
12061147{
1207   int curr_x = current_x(space);
1148   int curr_x = current_x();
12081149
12091150   /* Check if relevant bits have changed */
12101151   if ( ( data & 7 ) != ( NUSIZ0 & 7 ) ) {
r14963r14964
12191160                  /* This copy has started drawing */
12201161                  if ( p0gfx.size[i] == 1 && nusiz[data & 7][1] > 1 ) {
12211162                     int delay = 1 + ( ( p0gfx.start_pixel[i] + ( curr_x - p0gfx.start_drawing[i] ) ) & 1 );
1222                     update_bitmap( curr_x + delay, current_y(space) );
1163                     update_bitmap( curr_x + delay, current_y() );
12231164                     p0gfx.start_pixel[i] += ( curr_x + delay - p0gfx.start_drawing[i] );
12241165                     if ( p0gfx.start_pixel[i] > 8 )
12251166                        p0gfx.start_pixel[i] = 8;
r14963r14964
12291170                     if ( delay ) {
12301171                        delay = p0gfx.size[i] - delay;
12311172                     }
1232                     update_bitmap( curr_x + delay, current_y(space) );
1173                     update_bitmap( curr_x + delay, current_y() );
12331174                     p0gfx.start_pixel[i] += ( curr_x - p0gfx.start_drawing[i] ) / p0gfx.size[i];
12341175                     p0gfx.start_drawing[i] = curr_x + delay;
12351176                  } else {
r14963r14964
12801221}
12811222
12821223
1283static WRITE8_HANDLER( NUSIZ1_w )
1224WRITE8_MEMBER( tia_video_device::NUSIZ1_w )
12841225{
1285   int curr_x = current_x(space);
1226   int curr_x = current_x();
12861227
12871228   /* Check if relevant bits have changed */
12881229   if ( ( data & 7 ) != ( NUSIZ1 & 7 ) ) {
r14963r14964
12971238                  /* This copy has started drawing */
12981239                  if ( p1gfx.size[i] == 1 && nusiz[data & 7][1] > 1 ) {
12991240                     int delay = 1 + ( ( p0gfx.start_pixel[i] + ( curr_x - p0gfx.start_drawing[i] ) ) & 1 );
1300                     update_bitmap( curr_x + delay, current_y(space) );
1241                     update_bitmap( curr_x + delay, current_y() );
13011242                     p1gfx.start_pixel[i] += ( curr_x + delay - p1gfx.start_drawing[i] );
13021243                     if ( p1gfx.start_pixel[i] > 8 )
13031244                        p1gfx.start_pixel[i] = 8;
r14963r14964
13071248                     if ( delay ) {
13081249                        delay = p1gfx.size[i] - delay;
13091250                     }
1310                     update_bitmap( curr_x + delay, current_y(space) );
1251                     update_bitmap( curr_x + delay, current_y() );
13111252                     p1gfx.start_pixel[i] += ( curr_x - p1gfx.start_drawing[i] ) / p1gfx.size[i];
13121253                     p1gfx.start_drawing[i] = curr_x + delay;
13131254                  } else {
r14963r14964
13581299}
13591300
13601301
1361static WRITE8_HANDLER( HMCLR_w )
1302WRITE8_MEMBER( tia_video_device::HMCLR_w )
13621303{
13631304   HMP0_w( space, offset, 0 );
13641305   HMP1_w( space, offset, 0 );
r14963r14964
13681309}
13691310
13701311
1371static WRITE8_HANDLER( CXCLR_w )
1312WRITE8_MEMBER( tia_video_device::CXCLR_w )
13721313{
13731314   CXM0P = 0;
13741315   CXM1P = 0;
r14963r14964
14031344      }                                                               \
14041345   }
14051346
1406static WRITE8_HANDLER( RESP0_w )
1347WRITE8_MEMBER( tia_video_device::RESP0_w )
14071348{
1408   int curr_x = current_x(space);
1349   int curr_x = current_x();
14091350   int new_horzP0;
14101351
14111352   /* Check if HMOVE is activated during this line */
r14963r14964
14631404}
14641405
14651406
1466static WRITE8_HANDLER( RESP1_w )
1407WRITE8_MEMBER( tia_video_device::RESP1_w )
14671408{
1468   int curr_x = current_x(space);
1409   int curr_x = current_x();
14691410   int new_horzP1;
14701411
14711412   /* Check if HMOVE is activated during this line */
r14963r14964
15231464}
15241465
15251466
1526static WRITE8_HANDLER( RESM0_w )
1467WRITE8_MEMBER( tia_video_device::RESM0_w )
15271468{
1528   int curr_x = current_x(space);
1469   int curr_x = current_x();
15291470   int new_horzM0;
15301471
15311472   /* Check if HMOVE is activated during this line */
r14963r14964
15451486}
15461487
15471488
1548static WRITE8_HANDLER( RESM1_w )
1489WRITE8_MEMBER( tia_video_device::RESM1_w )
15491490{
1550   int curr_x = current_x(space);
1491   int curr_x = current_x();
15511492   int new_horzM1;
15521493
15531494   /* Check if HMOVE is activated during this line */
r14963r14964
15671508}
15681509
15691510
1570static WRITE8_HANDLER( RESBL_w )
1511WRITE8_MEMBER( tia_video_device::RESBL_w )
15711512{
1572   int curr_x = current_x(space);
1513   int curr_x = current_x();
15731514
15741515   /* Check if HMOVE is activated during this line */
15751516   if ( HMOVE_started != HMOVE_INACTIVE ) {
r14963r14964
15831524}
15841525
15851526
1586static WRITE8_HANDLER( RESMP0_w )
1527WRITE8_MEMBER( tia_video_device::RESMP0_w )
15871528{
15881529   if (RESMP0 & 2)
15891530   {
r14963r14964
16051546}
16061547
16071548
1608static WRITE8_HANDLER( RESMP1_w )
1549WRITE8_MEMBER( tia_video_device::RESMP1_w )
16091550{
16101551   if (RESMP1 & 2)
16111552   {
r14963r14964
16271568}
16281569
16291570
1630static WRITE8_HANDLER( GRP0_w )
1571WRITE8_MEMBER( tia_video_device::GRP0_w )
16311572{
16321573   prevGRP1 = GRP1;
16331574
r14963r14964
16351576}
16361577
16371578
1638static WRITE8_HANDLER( GRP1_w )
1579WRITE8_MEMBER( tia_video_device::GRP1_w )
16391580{
16401581   prevGRP0 = GRP0;
16411582
r14963r14964
16451586}
16461587
16471588
1648static READ8_HANDLER( INPT_r )
1589READ8_MEMBER( tia_video_device::INPT_r )
16491590{
1650   UINT64 elapsed = space->machine().firstcpu->total_cycles() - paddle_cycles;
1591   UINT64 elapsed = machine().firstcpu->total_cycles() - paddle_cycles;
16511592   int input = TIA_INPUT_PORT_ALWAYS_ON;
1652   if ( tia_read_input_port )
1593   if ( !m_read_input_port_func.isnull() )
16531594   {
1654      input = tia_read_input_port(space, offset & 3, 0xFFFF);
1595      input = m_read_input_port_func(offset & 3, 0xFFFF);
16551596   }
16561597
16571598   if ( input == TIA_INPUT_PORT_ALWAYS_ON )
r14963r14964
16631604}
16641605
16651606
1666READ8_HANDLER( tia_r )
1607READ8_MEMBER( tia_video_device::read )
16671608{
16681609    /* lower bits 0 - 5 seem to depend on the last byte on the
16691610         data bus. If the driver supplied a routine to retrieve
r14963r14964
16721613    */
16731614   UINT8 data = offset & 0x3f;
16741615
1675   if ( tia_get_databus )
1616   if ( !m_databus_contents_func.isnull() )
16761617   {
1677      data = tia_get_databus(space, offset) & 0x3f;
1618      data = m_databus_contents_func(offset) & 0x3f;
16781619   }
16791620
16801621   if (!(offset & 0x8))
16811622   {
1682      update_bitmap(current_x(space), current_y(space));
1623      update_bitmap(current_x(), current_y());
16831624   }
16841625
16851626   switch (offset & 0xF)
r14963r14964
17101651      return data | INPT_r(space,3);
17111652   case 0xC:
17121653      {
1713         int   button = tia_read_input_port ? ( tia_read_input_port(space,4,0xFFFF) & 0x80 ) : 0x80;
1654         int   button = !m_read_input_port_func.isnull() ? ( m_read_input_port_func(4,0xFFFF) & 0x80 ) : 0x80;
17141655         INPT4 = ( VBLANK & 0x40) ? ( INPT4 & button ) : button;
17151656      }
17161657      return data | INPT4;
17171658   case 0xD:
17181659      {
1719         int button = tia_read_input_port ? ( tia_read_input_port(space,5,0xFFFF) & 0x80 ) : 0x80;
1660         int button = !m_read_input_port_func.isnull() ? ( m_read_input_port_func(5,0xFFFF) & 0x80 ) : 0x80;
17201661         INPT5 = ( VBLANK & 0x40) ? ( INPT5 & button ) : button;
17211662      }
17221663      return data | INPT5;
r14963r14964
17261667}
17271668
17281669
1729WRITE8_HANDLER( tia_w )
1670WRITE8_MEMBER( tia_video_device::write )
17301671{
17311672   static const int delay[0x40] =
17321673   {
r14963r14964
17761717       0,   // HMCLR
17771718       0,   // CXCLR
17781719   };
1779   int curr_x = current_x(space);
1780   int curr_y = current_y(space);
1720   int curr_x = current_x();
1721   int curr_y = current_y();
17811722
17821723   offset &= 0x3F;
17831724
r14963r14964
18631804   case 0x18: /* AUDF1 */
18641805   case 0x19: /* AUDV0 */
18651806   case 0x1A: /* AUDV1 */
1866      tia_sound_w(space->machine().device("tia"), offset, data);
1807      tia_sound_w(machine().device("tia"), offset, data);
18671808      break;
18681809
18691810   case 0x1B:
r14963r14964
19241865}
19251866
19261867
1927static void tia_reset(running_machine &machine)
1868//-------------------------------------------------
1869//  device_reset - device-specific reset
1870//-------------------------------------------------
1871
1872void tia_video_device::device_reset()
19281873{
19291874   int i;
19301875
r14963r14964
19761921
19771922   NUSIZx_changed = 0;
19781923}
1979
1980
1981
1982void tia_init(running_machine &machine, const struct tia_interface* ti)
1983{
1984   assert_always(machine.phase() == MACHINE_PHASE_INIT, "Can only call tia_init at init time!");
1985
1986   if ( ti ) {
1987      tia_read_input_port = ti->read_input_port;
1988      tia_get_databus = ti->databus_contents;
1989      tia_vsync_callback = ti->vsync_callback;
1990   } else {
1991      tia_read_input_port = NULL;
1992      tia_get_databus = NULL;
1993      tia_vsync_callback = NULL;
1994   }
1995
1996   tia_reset( machine );
1997
1998   machine.add_notifier(MACHINE_NOTIFY_RESET, machine_notify_delegate(FUNC(tia_reset), &machine));
1999}
2000
src/mame/video/tia.h
r14963r14964
11#ifndef _VIDEO_TIA_H_
22#define _VIDEO_TIA_H_
33
4//**************************************************************************
5//  MACROS / CONSTANTS
6//**************************************************************************
7
8
49#define TIA_PALETTE_LENGTH            128 + 128 * 128
510#define TIA_INPUT_PORT_ALWAYS_ON      0
611#define TIA_INPUT_PORT_ALWAYS_OFF      0xffff
712#define TIA_MAX_SCREEN_HEIGHT         342
813
14#define HMOVE_INACTIVE      -200
15#define PLAYER_GFX_SLOTS   4
16// Per player graphic
17// - pixel number to start drawing from (0-7, from GRPx) / number of pixels drawn from GRPx
18// - display position to start drawing
19// - size to use
20struct player_gfx {
21   int   start_pixel[PLAYER_GFX_SLOTS];
22   int start_drawing[PLAYER_GFX_SLOTS];
23   int size[PLAYER_GFX_SLOTS];
24   int skipclip[PLAYER_GFX_SLOTS];
25};
26
27//**************************************************************************
28//  INTERFACE CONFIGURATION MACROS
29//**************************************************************************
30
31#define MCFG_TIA_VIDEO_ADD(_tag, _config) \
32   MCFG_DEVICE_ADD(_tag, TIA_VIDEO, 0) \
33   MCFG_DEVICE_CONFIG(_config)
34   
35//**************************************************************************
36//  TYPE DEFINITIONS
37//**************************************************************************
38
39
40// ======================> tia_interface
41
42   
943struct tia_interface {
10   read16_space_func   read_input_port;
11   read8_space_func   databus_contents;
12   write16_space_func   vsync_callback;
44   devcb_read16   m_read_input_port_cb;
45   devcb_read8      m_databus_contents_cb;
46   devcb_write16   m_vsync_callback_cb;
1347};
1448
15PALETTE_INIT( tia_NTSC );
16PALETTE_INIT( tia_PAL );
49// ======================> tia_video_device
1750
18VIDEO_START( tia );
19SCREEN_UPDATE_IND16( tia );
51class tia_video_device :   public device_t,
52                     public tia_interface
53{
54public:
55    // construction/destruction
56    tia_video_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
2057
21READ8_HANDLER( tia_r );
22WRITE8_HANDLER( tia_w );
58   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
2359
24void tia_init(running_machine &machine, const struct tia_interface* ti);
60   DECLARE_READ8_MEMBER( read );
61   DECLARE_WRITE8_MEMBER( write );
2562
63protected:
64    // device-level overrides
65   virtual void device_config_complete();
66    virtual void device_start();
67    virtual void device_reset();
68
69   void draw_sprite_helper(UINT8* p, UINT8 *col, struct player_gfx *gfx, UINT8 GRP, UINT8 COLUP, UINT8 REFP);
70   void draw_missile_helper(UINT8* p, UINT8* col, int horz, int skipdelay, int latch, int start, UINT8 RESMP, UINT8 ENAM, UINT8 NUSIZ, UINT8 COLUM);
71   void draw_playfield_helper(UINT8* p, UINT8* col, int horz, UINT8 COLU, UINT8 REFPF);
72   void draw_ball_helper(UINT8* p, UINT8* col, int horz, UINT8 ENAB);
73   void drawS0(UINT8* p, UINT8* col);
74   void drawS1(UINT8* p, UINT8* col);
75   void drawM0(UINT8* p, UINT8* col);
76   void drawM1(UINT8* p, UINT8* col);
77   void drawBL(UINT8* p, UINT8* col);
78   void drawPF(UINT8* p, UINT8 *col);
79   int collision_check(UINT8* p1, UINT8* p2, int x1, int x2);
80   int current_x();
81   int current_y();
82   void setup_pXgfx(void);
83   void update_bitmap(int next_x, int next_y);
84   DECLARE_WRITE8_MEMBER( WSYNC_w );
85   DECLARE_WRITE8_MEMBER( VSYNC_w );
86   DECLARE_WRITE8_MEMBER( VBLANK_w );
87   DECLARE_WRITE8_MEMBER( CTRLPF_w );
88   DECLARE_WRITE8_MEMBER( HMP0_w );
89   DECLARE_WRITE8_MEMBER( HMP1_w );
90   DECLARE_WRITE8_MEMBER( HMM0_w );
91   DECLARE_WRITE8_MEMBER( HMM1_w );
92   DECLARE_WRITE8_MEMBER( HMBL_w );
93   DECLARE_WRITE8_MEMBER( HMOVE_w );
94   DECLARE_WRITE8_MEMBER( RSYNC_w );
95   DECLARE_WRITE8_MEMBER( NUSIZ0_w );
96   DECLARE_WRITE8_MEMBER( NUSIZ1_w );
97   DECLARE_WRITE8_MEMBER( HMCLR_w );
98   DECLARE_WRITE8_MEMBER( CXCLR_w );
99   DECLARE_WRITE8_MEMBER( RESP0_w );
100   DECLARE_WRITE8_MEMBER( RESP1_w );
101   DECLARE_WRITE8_MEMBER( RESM0_w );
102   DECLARE_WRITE8_MEMBER( RESM1_w );
103   DECLARE_WRITE8_MEMBER( RESBL_w );
104   DECLARE_WRITE8_MEMBER( RESMP0_w );
105   DECLARE_WRITE8_MEMBER( RESMP1_w );
106   DECLARE_WRITE8_MEMBER( GRP0_w );
107   DECLARE_WRITE8_MEMBER( GRP1_w );
108   DECLARE_READ8_MEMBER( INPT_r );
109
110
111private:
112   devcb_resolved_read16   m_read_input_port_func;
113   devcb_resolved_read8   m_databus_contents_func;
114   devcb_resolved_write16   m_vsync_callback_func;
115   
116   struct player_gfx p0gfx;
117   struct player_gfx p1gfx;
118   
119   UINT64 frame_cycles;
120   UINT64 paddle_cycles;
121   
122   int horzP0;
123   int horzP1;
124   int horzM0;
125   int horzM1;
126   int horzBL;
127   int motclkP0;
128   int motclkP1;
129   int motclkM0;
130   int motclkM1;
131   int motclkBL;
132   int startP0;
133   int startP1;
134   int startM0;
135   int startM1;
136   int skipclipP0;
137   int skipclipP1;
138   int skipM0delay;
139   int skipM1delay;
140   
141   int current_bitmap;
142   
143   int prev_x;
144   int prev_y;
145   
146   UINT8 VSYNC;
147   UINT8 VBLANK;
148   UINT8 COLUP0;
149   UINT8 COLUP1;
150   UINT8 COLUBK;
151   UINT8 COLUPF;
152   UINT8 CTRLPF;
153   UINT8 GRP0;
154   UINT8 GRP1;
155   UINT8 REFP0;
156   UINT8 REFP1;
157   UINT8 HMP0;
158   UINT8 HMP1;
159   UINT8 HMM0;
160   UINT8 HMM1;
161   UINT8 HMBL;
162   UINT8 VDELP0;
163   UINT8 VDELP1;
164   UINT8 VDELBL;
165   UINT8 NUSIZ0;
166   UINT8 NUSIZ1;
167   UINT8 ENAM0;
168   UINT8 ENAM1;
169   UINT8 ENABL;
170   UINT8 CXM0P;
171   UINT8 CXM1P;
172   UINT8 CXP0FB;
173   UINT8 CXP1FB;
174   UINT8 CXM0FB;
175   UINT8 CXM1FB;
176   UINT8 CXBLPF;
177   UINT8 CXPPMM;
178   UINT8 RESMP0;
179   UINT8 RESMP1;
180   UINT8 PF0;
181   UINT8 PF1;
182   UINT8 PF2;
183   UINT8 INPT4;
184   UINT8 INPT5;
185   
186   UINT8 prevGRP0;
187   UINT8 prevGRP1;
188   UINT8 prevENABL;
189   
190   int HMOVE_started;
191   int HMOVE_started_previous;
192   UINT8 HMP0_latch;
193   UINT8 HMP1_latch;
194   UINT8 HMM0_latch;
195   UINT8 HMM1_latch;
196   UINT8 HMBL_latch;
197   UINT8 REFLECT;      /* Should playfield be reflected or not */
198   UINT8 NUSIZx_changed;
199   
200   bitmap_ind16 *helper[3];
201   
202   UINT16 screen_height;
203   
204};
205
206
207// device type definition
208extern const device_type TIA_VIDEO;
209
210PALETTE_INIT( tia_NTSC );
211PALETTE_INIT( tia_PAL );
212
26213#endif /* _VIDEO_TIA_H_ */
src/mame/video/decospr.c
r14963r14964
4040   (bootleg) nmg5.c
4141   (bootleg) tumbleb.c
4242   (bootleg) crospang.c
43   (bootleg) silvmil.c
44   (bootleg) gotcha.c
4345
4446   to convert:
4547
src/mame/video/mcr68.c
r14963r14964
2121static TILE_GET_INFO( get_bg_tile_info )
2222{
2323   mcr68_state *state = machine.driver_data<mcr68_state>();
24   UINT16 *videoram = state->m_videoram16;
24   UINT16 *videoram = state->m_videoram;
2525   int data = LOW_BYTE(videoram[tile_index * 2]) | (LOW_BYTE(videoram[tile_index * 2 + 1]) << 8);
2626   int code = (data & 0x3ff) | ((data >> 4) & 0xc00);
2727   int color = (~data >> 12) & 3;
r14963r14964
3434static TILE_GET_INFO( zwackery_get_bg_tile_info )
3535{
3636   mcr68_state *state = machine.driver_data<mcr68_state>();
37   UINT16 *videoram = state->m_videoram16;
37   UINT16 *videoram = state->m_videoram;
3838   int data = videoram[tile_index];
3939   int color = (data >> 13) & 7;
4040   SET_TILE_INFO(0, data & 0x3ff, color, TILE_FLIPYX((data >> 11) & 3));
r14963r14964
4444static TILE_GET_INFO( zwackery_get_fg_tile_info )
4545{
4646   mcr68_state *state = machine.driver_data<mcr68_state>();
47   UINT16 *videoram = state->m_videoram16;
47   UINT16 *videoram = state->m_videoram;
4848   int data = videoram[tile_index];
4949   int color = (data >> 13) & 7;
5050   SET_TILE_INFO(2, data & 0x3ff, color, TILE_FLIPYX((data >> 11) & 3));
r14963r14964
179179
180180WRITE16_MEMBER(mcr68_state::mcr68_videoram_w)
181181{
182   UINT16 *videoram = m_videoram16;
182   UINT16 *videoram = m_videoram;
183183   COMBINE_DATA(&videoram[offset]);
184184   m_bg_tilemap->mark_tile_dirty(offset / 2);
185185}
r14963r14964
187187
188188WRITE16_MEMBER(mcr68_state::zwackery_videoram_w)
189189{
190   UINT16 *videoram = m_videoram16;
190   UINT16 *videoram = m_videoram;
191191   COMBINE_DATA(&videoram[offset]);
192192   m_bg_tilemap->mark_tile_dirty(offset);
193193   m_fg_tilemap->mark_tile_dirty(offset);
r14963r14964
198198{
199199   /* yech -- Zwackery relies on the upper 8 bits of a spriteram read being $ff! */
200200   /* to make this happen we always write $ff in the upper 8 bits */
201   COMBINE_DATA(&m_spriteram16[offset]);
202   m_spriteram16[offset] |= 0xff00;
201   COMBINE_DATA(&m_spriteram[offset]);
202   m_spriteram[offset] |= 0xff00;
203203}
204204
205205
r14963r14964
214214{
215215   mcr68_state *state = machine.driver_data<mcr68_state>();
216216   rectangle sprite_clip = machine.primary_screen->visible_area();
217   UINT16 *spriteram16 = state->m_spriteram16;
217   UINT16 *spriteram = state->m_spriteram;
218218   int offs;
219219
220220   /* adjust for clipping */
r14963r14964
225225   machine.priority_bitmap.fill(1, sprite_clip);
226226
227227   /* loop over sprite RAM */
228   for (offs = state->m_spriteram16.bytes() / 2 - 4;offs >= 0;offs -= 4)
228   for (offs = state->m_spriteram.bytes() / 2 - 4;offs >= 0;offs -= 4)
229229   {
230230      int code, color, flipx, flipy, x, y, flags;
231231
232      flags = LOW_BYTE(spriteram16[offs + 1]);
233      code = LOW_BYTE(spriteram16[offs + 2]) + 256 * ((flags >> 3) & 0x01) + 512 * ((flags >> 6) & 0x03);
232      flags = LOW_BYTE(spriteram[offs + 1]);
233      code = LOW_BYTE(spriteram[offs + 2]) + 256 * ((flags >> 3) & 0x01) + 512 * ((flags >> 6) & 0x03);
234234
235235      /* skip if zero */
236236      if (code == 0)
r14963r14964
244244      color = ~flags & 0x03;
245245      flipx = flags & 0x10;
246246      flipy = flags & 0x20;
247      x = LOW_BYTE(spriteram16[offs + 3]) * 2 + state->m_sprite_xoffset;
248      y = (241 - LOW_BYTE(spriteram16[offs])) * 2;
247      x = LOW_BYTE(spriteram[offs + 3]) * 2 + state->m_sprite_xoffset;
248      y = (241 - LOW_BYTE(spriteram[offs])) * 2;
249249
250250      /* allow sprites to clip off the left side */
251251      if (x > 0x1f0) x -= 0x200;
r14963r14964
267267static void zwackery_update_sprites(running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, int priority)
268268{
269269   mcr68_state *state = machine.driver_data<mcr68_state>();
270   UINT16 *spriteram16 = state->m_spriteram16;
270   UINT16 *spriteram = state->m_spriteram;
271271   int offs;
272272
273273   machine.priority_bitmap.fill(1, cliprect);
274274
275275   /* loop over sprite RAM */
276   for (offs = state->m_spriteram16.bytes() / 2 - 4;offs >= 0;offs -= 4)
276   for (offs = state->m_spriteram.bytes() / 2 - 4;offs >= 0;offs -= 4)
277277   {
278278      int code, color, flipx, flipy, x, y, flags;
279279
280280      /* get the code and skip if zero */
281      code = LOW_BYTE(spriteram16[offs + 2]);
281      code = LOW_BYTE(spriteram[offs + 2]);
282282      if (code == 0)
283283         continue;
284284
285285      /* extract the flag bits and determine the color */
286      flags = LOW_BYTE(spriteram16[offs + 1]);
286      flags = LOW_BYTE(spriteram[offs + 1]);
287287      color = ((~flags >> 2) & 0x0f) | ((flags & 0x02) << 3);
288288
289289      /* for low priority, draw everything but color 7 */
r14963r14964
303303      /* determine flipping and coordinates */
304304      flipx = ~flags & 0x40;
305305      flipy = flags & 0x80;
306      x = (231 - LOW_BYTE(spriteram16[offs + 3])) * 2;
307      y = (241 - LOW_BYTE(spriteram16[offs])) * 2;
306      x = (231 - LOW_BYTE(spriteram[offs + 3])) * 2;
307      y = (241 - LOW_BYTE(spriteram[offs])) * 2;
308308
309309      if (x <= -32) x += 512;
310310
src/mame/video/gotcha.c
r14963r14964
11#include "emu.h"
22#include "includes/gotcha.h"
3#include "video/decospr.h"
34
45/***************************************************************************
56
r14963r14964
100101
101102
102103
103static void draw_sprites( running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect )
104{
105   gotcha_state *state = machine.driver_data<gotcha_state>();
106   UINT16 *spriteram = state->m_spriteram;
107   int offs;
108104
109   for (offs = 0; offs < state->m_spriteram.bytes() / 2; offs += 4)
110   {
111      int sx, sy, code, color, flipx, flipy, height, y;
112
113      sx = spriteram[offs + 2];
114      sy = spriteram[offs + 0];
115      code = spriteram[offs + 1];
116      color = spriteram[offs + 2] >> 9;
117      height = 1 << ((spriteram[offs + 0] & 0x0600) >> 9);
118      flipx = spriteram[offs + 0] & 0x2000;
119      flipy = spriteram[offs + 0] & 0x4000;
120
121      for (y = 0; y < height; y++)
122      {
123         drawgfx_transpen(bitmap,cliprect,machine.gfx[1],
124               code + (flipy ? height-1 - y : y),
125               color,
126               flipx,flipy,
127               0x140-5 - ((sx + 0x10) & 0x1ff),0x100+1 - ((sy + 0x10 * (height - y)) & 0x1ff),0);
128      }
129   }
130}
131
132
133105SCREEN_UPDATE_IND16( gotcha )
134106{
135107   gotcha_state *state = screen.machine().driver_data<gotcha_state>();
136108   state->m_bg_tilemap->draw(bitmap, cliprect, 0, 0);
137109   state->m_fg_tilemap->draw(bitmap, cliprect, 0, 0);
138   draw_sprites(screen.machine(), bitmap, cliprect);
110   screen.machine().device<decospr_device>("spritegen")->draw_sprites(bitmap, cliprect, state->m_spriteram, 0x400);
139111   return 0;
140112}
src/mame/layout/bfm_sc4.lay
r14963r14964
11<?xml version="1.0"?>
22<mamelayout version="2">
3   <element name="matrixlamp">
4      <rect state ="0">
5         <bounds x="0" y="0" width="7" height="7" />
6         <color red="0.7" green="0.7" blue="0.7" />
7      </rect>
8      <rect state ="1">
9         <bounds x="0" y="0" width="7" height="7" />
10         <color red="0.0" green="0.0" blue="1.0" />
11      </rect>
12      <rect state ="2">
13         <bounds x="0" y="0" width="7" height="7" />
14         <color red="0.0" green="1.0" blue="0.0" />
15      </rect>
16   </element>
17   <element name="Steppers" defstate="96">
18      <text string="00" state="0">
19         <color red="1.0" green="1.0" blue="1.0" />
20         <bounds x="0" y="0.1" width="1" height="1" />
21      </text>
22      <text string="01" state="1">
23         <color red="1.0" green="1.0" blue="1.0" />
24         <bounds x="0" y="0.1" width="1" height="1" />
25      </text>
26      <text string="02" state="2">
27         <color red="1.0" green="1.0" blue="1.0" />
28         <bounds x="0" y="0.1" width="1" height="1" />
29      </text>
30      <text string="03" state="3">
31         <color red="1.0" green="1.0" blue="1.0" />
32         <bounds x="0" y="0.1" width="1" height="1" />
33      </text>
34      <text string="04" state="4">
35         <color red="1.0" green="1.0" blue="1.0" />
36         <bounds x="0" y="0.1" width="1" height="1" />
37      </text>
38      <text string="05" state="5">
39         <color red="1.0" green="1.0" blue="1.0" />
40         <bounds x="0" y="0.1" width="1" height="1" />
41      </text>
42      <text string="06" state="6">
43         <color red="1.0" green="1.0" blue="1.0" />
44         <bounds x="0" y="0.1" width="1" height="1" />
45      </text>
46      <text string="07" state="7">
47         <color red="1.0" green="1.0" blue="1.0" />
48         <bounds x="0" y="0.1" width="1" height="1" />
49      </text>
50      <text string="08" state="8">
51         <color red="1.0" green="1.0" blue="1.0" />
52         <bounds x="0" y="0.1" width="1" height="1" />
53      </text>
54      <text string="09" state="9">
55         <color red="1.0" green="1.0" blue="1.0" />
56         <bounds x="0" y="0.1" width="1" height="1" />
57      </text>
58      <text string="10" state="10">
59         <color red="1.0" green="1.0" blue="1.0" />
60         <bounds x="0" y="0.1" width="1" height="1" />
61      </text>
62      <text string="11" state="11">
63         <color red="1.0" green="1.0" blue="1.0" />
64         <bounds x="0" y="0.1" width="1" height="1" />
65      </text>
66      <text string="12" state="12">
67         <color red="1.0" green="1.0" blue="1.0" />
68         <bounds x="0" y="0.1" width="1" height="1" />
69      </text>
70      <text string="13" state="13">
71         <color red="1.0" green="1.0" blue="1.0" />
72         <bounds x="0" y="0.1" width="1" height="1" />
73      </text>
74      <text string="14" state="14">
75         <color red="1.0" green="1.0" blue="1.0" />
76         <bounds x="0" y="0.1" width="1" height="1" />
77      </text>
78      <text string="15" state="15">
79         <color red="1.0" green="1.0" blue="1.0" />
80         <bounds x="0" y="0.1" width="1" height="1" />
81      </text>
82      <text string="16" state="16">
83         <color red="1.0" green="1.0" blue="1.0" />
84         <bounds x="0" y="0.1" width="1" height="1" />
85      </text>
86      <text string="17" state="17">
87         <color red="1.0" green="1.0" blue="1.0" />
88         <bounds x="0" y="0.1" width="1" height="1" />
89      </text>
90      <text string="18" state="18">
91         <color red="1.0" green="1.0" blue="1.0" />
92         <bounds x="0" y="0.1" width="1" height="1" />
93      </text>
94      <text string="19" state="19">
95         <color red="1.0" green="1.0" blue="1.0" />
96         <bounds x="0" y="0.1" width="1" height="1" />
97      </text>
98      <text string="20" state="20">
99         <color red="1.0" green="1.0" blue="1.0" />
100         <bounds x="0" y="0.1" width="1" height="1" />
101      </text>
102      <text string="21" state="21">
103         <color red="1.0" green="1.0" blue="1.0" />
104         <bounds x="0" y="0.1" width="1" height="1" />
105      </text>
106      <text string="22" state="22">
107         <color red="1.0" green="1.0" blue="1.0" />
108         <bounds x="0" y="0.1" width="1" height="1" />
109      </text>
110      <text string="23" state="23">
111         <color red="1.0" green="1.0" blue="1.0" />
112         <bounds x="0" y="0.1" width="1" height="1" />
113      </text>
114      <text string="24" state="24">
115         <color red="1.0" green="1.0" blue="1.0" />
116         <bounds x="0" y="0.1" width="1" height="1" />
117      </text>
118      <text string="25" state="25">
119         <color red="1.0" green="1.0" blue="1.0" />
120         <bounds x="0" y="0.1" width="1" height="1" />
121      </text>
122 
123      <text string="26" state="26">
124         <color red="1.0" green="1.0" blue="1.0" />
125         <bounds x="0" y="0.1" width="1" height="1" />
126      </text>
127      <text string="27" state="27">
128         <color red="1.0" green="1.0" blue="1.0" />
129         <bounds x="0" y="0.1" width="1" height="1" />
130      </text>
131      <text string="28" state="28">
132         <color red="1.0" green="1.0" blue="1.0" />
133         <bounds x="0" y="0.1" width="1" height="1" />
134      </text>
135      <text string="29" state="29">
136         <color red="1.0" green="1.0" blue="1.0" />
137         <bounds x="0" y="0.1" width="1" height="1" />
138      </text>
139      <text string="30" state="30">
140         <color red="1.0" green="1.0" blue="1.0" />
141         <bounds x="0" y="0.1" width="1" height="1" />
142      </text>
143      <text string="31" state="31">
144         <color red="1.0" green="1.0" blue="1.0" />
145         <bounds x="0" y="0.1" width="1" height="1" />
146      </text>
147      <text string="32" state="32">
148         <color red="1.0" green="1.0" blue="1.0" />
149         <bounds x="0" y="0.1" width="1" height="1" />
150      </text>
151      <text string="33" state="33">
152         <color red="1.0" green="1.0" blue="1.0" />
153         <bounds x="0" y="0.1" width="1" height="1" />
154      </text>
155      <text string="34" state="34">
156         <color red="1.0" green="1.0" blue="1.0" />
157         <bounds x="0" y="0.1" width="1" height="1" />
158      </text>
159      <text string="35" state="35">
160         <color red="1.0" green="1.0" blue="1.0" />
161         <bounds x="0" y="0.1" width="1" height="1" />
162      </text>
163      <text string="36" state="36">
164         <color red="1.0" green="1.0" blue="1.0" />
165         <bounds x="0" y="0.1" width="1" height="1" />
166      </text>
167      <text string="37" state="37">
168         <color red="1.0" green="1.0" blue="1.0" />
169         <bounds x="0" y="0.1" width="1" height="1" />
170      </text>
171      <text string="38" state="38">
172         <color red="1.0" green="1.0" blue="1.0" />
173         <bounds x="0" y="0.1" width="1" height="1" />
174      </text>
175      <text string="39" state="39">
176         <color red="1.0" green="1.0" blue="1.0" />
177         <bounds x="0" y="0.1" width="1" height="1" />
178      </text>
179      <text string="40" state="40">
180         <color red="1.0" green="1.0" blue="1.0" />
181         <bounds x="0" y="0.1" width="1" height="1" />
182      </text>
183      <text string="41" state="41">
184         <color red="1.0" green="1.0" blue="1.0" />
185         <bounds x="0" y="0.1" width="1" height="1" />
186      </text>
187      <text string="42" state="42">
188         <color red="1.0" green="1.0" blue="1.0" />
189         <bounds x="0" y="0.1" width="1" height="1" />
190      </text>
191      <text string="43" state="43">
192         <color red="1.0" green="1.0" blue="1.0" />
193         <bounds x="0" y="0.1" width="1" height="1" />
194      </text>
195      <text string="44" state="44">
196         <color red="1.0" green="1.0" blue="1.0" />
197         <bounds x="0" y="0.1" width="1" height="1" />
198      </text>
199      <text string="45" state="45">
200         <color red="1.0" green="1.0" blue="1.0" />
201         <bounds x="0" y="0.1" width="1" height="1" />
202      </text>
203      <text string="46" state="46">
204         <color red="1.0" green="1.0" blue="1.0" />
205         <bounds x="0" y="0.1" width="1" height="1" />
206      </text>
207      <text string="47" state="47">
208         <color red="1.0" green="1.0" blue="1.0" />
209         <bounds x="0" y="0.1" width="1" height="1" />
210      </text>
211      <text string="48" state="48">
212         <color red="1.0" green="1.0" blue="1.0" />
213         <bounds x="0" y="0.1" width="1" height="1" />
214      </text>
215      <text string="49" state="49">
216         <color red="1.0" green="1.0" blue="1.0" />
217         <bounds x="0" y="0.1" width="1" height="1" />
218      </text>
219      <text string="50" state="50">
220         <color red="1.0" green="1.0" blue="1.0" />
221         <bounds x="0" y="0.1" width="1" height="1" />
222      </text>
223      <text string="51" state="51">
224         <color red="1.0" green="1.0" blue="1.0" />
225         <bounds x="0" y="0.1" width="1" height="1" />
226      </text>
227      <text string="52" state="52">
228         <color red="1.0" green="1.0" blue="1.0" />
229         <bounds x="0" y="0.1" width="1" height="1" />
230      </text>
231      <text string="53" state="53">
232         <color red="1.0" green="1.0" blue="1.0" />
233         <bounds x="0" y="0.1" width="1" height="1" />
234      </text>
235      <text string="54" state="54">
236         <color red="1.0" green="1.0" blue="1.0" />
237         <bounds x="0" y="0.1" width="1" height="1" />
238      </text>
239      <text string="55" state="55">
240         <color red="1.0" green="1.0" blue="1.0" />
241         <bounds x="0" y="0.1" width="1" height="1" />
242      </text>
243      <text string="56" state="56">
244         <color red="1.0" green="1.0" blue="1.0" />
245         <bounds x="0" y="0.1" width="1" height="1" />
246      </text>
247      <text string="57" state="57">
248         <color red="1.0" green="1.0" blue="1.0" />
249         <bounds x="0" y="0.1" width="1" height="1" />
250      </text>
251      <text string="58" state="58">
252         <color red="1.0" green="1.0" blue="1.0" />
253         <bounds x="0" y="0.1" width="1" height="1" />
254      </text>
255      <text string="59" state="59">
256         <color red="1.0" green="1.0" blue="1.0" />
257         <bounds x="0" y="0.1" width="1" height="1" />
258      </text>
259      <text string="60" state="60">
260         <color red="1.0" green="1.0" blue="1.0" />
261         <bounds x="0" y="0.1" width="1" height="1" />
262      </text>
263      <text string="61" state="61">
264         <color red="1.0" green="1.0" blue="1.0" />
265         <bounds x="0" y="0.1" width="1" height="1" />
266      </text>
267      <text string="62" state="62">
268         <color red="1.0" green="1.0" blue="1.0" />
269         <bounds x="0" y="0.1" width="1" height="1" />
270      </text>
271      <text string="63" state="63">
272         <color red="1.0" green="1.0" blue="1.0" />
273         <bounds x="0" y="0.1" width="1" height="1" />
274      </text>
275      <text string="64" state="64">
276         <color red="1.0" green="1.0" blue="1.0" />
277         <bounds x="0" y="0.1" width="1" height="1" />
278      </text>
279      <text string="65" state="65">
280         <color red="1.0" green="1.0" blue="1.0" />
281         <bounds x="0" y="0.1" width="1" height="1" />
282      </text>
283      <text string="66" state="66">
284         <color red="1.0" green="1.0" blue="1.0" />
285         <bounds x="0" y="0.1" width="1" height="1" />
286      </text>
287      <text string="67" state="67">
288         <color red="1.0" green="1.0" blue="1.0" />
289         <bounds x="0" y="0.1" width="1" height="1" />
290      </text>
291      <text string="68" state="68">
292         <color red="1.0" green="1.0" blue="1.0" />
293         <bounds x="0" y="0.1" width="1" height="1" />
294      </text>
295      <text string="69" state="69">
296         <color red="1.0" green="1.0" blue="1.0" />
297         <bounds x="0" y="0.1" width="1" height="1" />
298      </text>
299      <text string="70" state="70">
300         <color red="1.0" green="1.0" blue="1.0" />
301         <bounds x="0" y="0.1" width="1" height="1" />
302      </text>
303      <text string="71" state="71">
304         <color red="1.0" green="1.0" blue="1.0" />
305         <bounds x="0" y="0.1" width="1" height="1" />
306      </text>
307      <text string="72" state="72">
308         <color red="1.0" green="1.0" blue="1.0" />
309         <bounds x="0" y="0.1" width="1" height="1" />
310      </text>
311      <text string="73" state="73">
312         <color red="1.0" green="1.0" blue="1.0" />
313         <bounds x="0" y="0.1" width="1" height="1" />
314      </text>
315      <text string="74" state="74">
316         <color red="1.0" green="1.0" blue="1.0" />
317         <bounds x="0" y="0.1" width="1" height="1" />
318      </text>
319      <text string="75" state="75">
320         <color red="1.0" green="1.0" blue="1.0" />
321         <bounds x="0" y="0.1" width="1" height="1" />
322      </text>
323      <text string="76" state="76">
324         <color red="1.0" green="1.0" blue="1.0" />
325         <bounds x="0" y="0.1" width="1" height="1" />
326      </text>
327      <text string="77" state="77">
328         <color red="1.0" green="1.0" blue="1.0" />
329         <bounds x="0" y="0.1" width="1" height="1" />
330      </text>
331      <text string="78" state="78">
332         <color red="1.0" green="1.0" blue="1.0" />
333         <bounds x="0" y="0.1" width="1" height="1" />
334      </text>
335      <text string="79" state="79">
336         <color red="1.0" green="1.0" blue="1.0" />
337         <bounds x="0" y="0.1" width="1" height="1" />
338      </text>
339      <text string="80" state="80">
340         <color red="1.0" green="1.0" blue="1.0" />
341         <bounds x="0" y="0.1" width="1" height="1" />
342      </text>
343      <text string="81" state="81">
344         <color red="1.0" green="1.0" blue="1.0" />
345         <bounds x="0" y="0.1" width="1" height="1" />
346      </text>
347      <text string="82" state="82">
348         <color red="1.0" green="1.0" blue="1.0" />
349         <bounds x="0" y="0.1" width="1" height="1" />
350      </text>
351      <text string="83" state="83">
352         <color red="1.0" green="1.0" blue="1.0" />
353         <bounds x="0" y="0.1" width="1" height="1" />
354      </text>
355      <text string="84" state="84">
356         <color red="1.0" green="1.0" blue="1.0" />
357         <bounds x="0" y="0.1" width="1" height="1" />
358      </text>
359      <text string="85" state="85">
360         <color red="1.0" green="1.0" blue="1.0" />
361         <bounds x="0" y="0.1" width="1" height="1" />
362      </text>
363      <text string="86" state="86">
364         <color red="1.0" green="1.0" blue="1.0" />
365         <bounds x="0" y="0.1" width="1" height="1" />
366      </text>
367      <text string="87" state="87">
368         <color red="1.0" green="1.0" blue="1.0" />
369         <bounds x="0" y="0.1" width="1" height="1" />
370      </text>
371      <text string="88" state="88">
372         <color red="1.0" green="1.0" blue="1.0" />
373         <bounds x="0" y="0.1" width="1" height="1" />
374      </text>
375      <text string="89" state="89">
376         <color red="1.0" green="1.0" blue="1.0" />
377         <bounds x="0" y="0.1" width="1" height="1" />
378      </text>
379      <text string="90" state="90">
380         <color red="1.0" green="1.0" blue="1.0" />
381         <bounds x="0" y="0.1" width="1" height="1" />
382      </text>
383      <text string="91" state="91">
384         <color red="1.0" green="1.0" blue="1.0" />
385         <bounds x="0" y="0.1" width="1" height="1" />
386      </text>
387      <text string="92" state="92">
388         <color red="1.0" green="1.0" blue="1.0" />
389         <bounds x="0" y="0.1" width="1" height="1" />
390      </text>
391      <text string="93" state="93">
392         <color red="1.0" green="1.0" blue="1.0" />
393         <bounds x="0" y="0.1" width="1" height="1" />
394      </text>
395      <text string="94" state="94">
396         <color red="1.0" green="1.0" blue="1.0" />
397         <bounds x="0" y="0.1" width="1" height="1" />
398      </text>
399      <text string="95" state="95">
400         <color red="1.0" green="1.0" blue="1.0" />
401         <bounds x="0" y="0.1" width="1" height="1" />
402      </text>
403   </element>
3404   <element name="vfd0">
4405   <led14segsc>
5406         <color red="0" green="0.6" blue="1.0" />
6407   </led14segsc>
7   </element>
408  </element>
409  <element name="digit" defstate="10">
410    <led7seg>
411      <color red="1.0" green="0.3" blue="0.0" />
412    </led7seg>
413  </element>
414   
415   <view name="AWP Simulated Video (No Artwork)">
416      <backdrop name="vfd0" element="vfd0" state="0">
417         <bounds x="210" y="200" width="9" height="17"/>
418      </backdrop>
419      <backdrop name="vfd1" element="vfd0" state="0">
420         <bounds x="219" y="200" width="9" height="17"/>
421      </backdrop>
422      <backdrop name="vfd2" element="vfd0" state="0">
423         <bounds x="228" y="200" width="9" height="17"/>
424      </backdrop>
425      <backdrop name="vfd3" element="vfd0" state="0">
426         <bounds x="237" y="200" width="9" height="17"/>
427      </backdrop>
428      <backdrop name="vfd4" element="vfd0" state="0">
429         <bounds x="246" y="200" width="9" height="17"/>
430      </backdrop>
431      <backdrop name="vfd5" element="vfd0" state="0">
432         <bounds x="255" y="200" width="9" height="17"/>
433      </backdrop>
434      <backdrop name="vfd6" element="vfd0" state="0">
435         <bounds x="264" y="200" width="9" height="17"/>
436      </backdrop>
437      <backdrop name="vfd7" element="vfd0" state="0">
438         <bounds x="273" y="200" width="9" height="17"/>
439      </backdrop>
440      <backdrop name="vfd8" element="vfd0" state="0">
441         <bounds x="282" y="200" width="9" height="17"/>
442      </backdrop>
443      <backdrop name="vfd9" element="vfd0" state="0">
444         <bounds x="291" y="200" width="9" height="17"/>
445      </backdrop>
446      <backdrop name="vfd10" element="vfd0" state="0">
447         <bounds x="300" y="200" width="9" height="17"/>
448      </backdrop>
449      <backdrop name="vfd11" element="vfd0" state="0">
450         <bounds x="309" y="200" width="9" height="17"/>
451      </backdrop>
452      <backdrop name="vfd12" element="vfd0" state="0">
453         <bounds x="318" y="200" width="9" height="17"/>
454      </backdrop>
455      <backdrop name="vfd13" element="vfd0" state="0">
456         <bounds x="327" y="200" width="9" height="17"/>
457      </backdrop>
458      <backdrop name="vfd14" element="vfd0" state="0">
459         <bounds x="336" y="200" width="9" height="17"/>
460      </backdrop>
461      <backdrop name="vfd15" element="vfd0" state="0">
462         <bounds x="345" y="200" width="9" height="17"/>
463      </backdrop>
464      <backdrop name="reel1" element="Steppers" state="0">
465         <bounds x="210" y="300" width="50" height="50"/>
466      </backdrop>
467      <backdrop name="reel2" element="Steppers" state="0">
468         <bounds x="260" y="300" width="50" height="50"/>
469      </backdrop>
470      <backdrop name="reel3" element="Steppers" state="0">
471         <bounds x="310" y="300" width="50" height="50"/>
472      </backdrop>
473      <backdrop name="reel4" element="Steppers" state="0">
474         <bounds x="210" y="360" width="50" height="50"/>
475      </backdrop>
476      <backdrop name="reel5" element="Steppers" state="0">
477         <bounds x="260" y="360" width="50" height="50"/>
478      </backdrop>
479      <backdrop name="reel6" element="Steppers" state="0">
480         <bounds x="310" y="360" width="50" height="50"/>
481      </backdrop>
482     
483     
484     
485     
486      <backdrop name="lamp0" element="matrixlamp" state="0">
487         <bounds x="0" y="0" width="7" height="7"/>
488      </backdrop>
489      <backdrop name="lamp1" element="matrixlamp" state="0">
490         <bounds x="8" y="0" width="7" height="7"/>
491      </backdrop>
492      <backdrop name="lamp2" element="matrixlamp" state="0">
493         <bounds x="16" y="0" width="7" height="7"/>
494      </backdrop>
495      <backdrop name="lamp3" element="matrixlamp" state="0">
496         <bounds x="24" y="0" width="7" height="7"/>
497      </backdrop>
498      <backdrop name="lamp4" element="matrixlamp" state="0">
499         <bounds x="32" y="0" width="7" height="7"/>
500      </backdrop>
501      <backdrop name="lamp5" element="matrixlamp" state="0">
502         <bounds x="40" y="0" width="7" height="7"/>
503      </backdrop>
504      <backdrop name="lamp6" element="matrixlamp" state="0">
505         <bounds x="48" y="0" width="7" height="7"/>
506      </backdrop>
507      <backdrop name="lamp7" element="matrixlamp" state="0">
508         <bounds x="56" y="0" width="7" height="7"/>
509      </backdrop>
510      <backdrop name="lamp8" element="matrixlamp" state="0">
511         <bounds x="64" y="0" width="7" height="7"/>
512      </backdrop>
513      <backdrop name="lamp9" element="matrixlamp" state="0">
514         <bounds x="72" y="0" width="7" height="7"/>
515      </backdrop>
516      <backdrop name="lamp10" element="matrixlamp" state="0">
517         <bounds x="80" y="0" width="7" height="7"/>
518      </backdrop>
519      <backdrop name="lamp11" element="matrixlamp" state="0">
520         <bounds x="88" y="0" width="7" height="7"/>
521      </backdrop>
522      <backdrop name="lamp12" element="matrixlamp" state="0">
523         <bounds x="96" y="0" width="7" height="7"/>
524      </backdrop>
8525 
9   <view name="VFD">
526      <backdrop name="lamp13" element="matrixlamp" state="0">
527         <bounds x="104" y="0" width="7" height="7"/>
528      </backdrop>
529      <backdrop name="lamp14" element="matrixlamp" state="0">
530         <bounds x="112" y="0" width="7" height="7"/>
531      </backdrop>
532      <backdrop name="lamp15" element="matrixlamp" state="0">
533         <bounds x="120" y="0" width="7" height="7"/>
534      </backdrop>
535      <backdrop name="lamp16" element="matrixlamp" state="0">
536         <bounds x="0" y="8" width="7" height="7"/>
537      </backdrop>
538      <backdrop name="lamp17" element="matrixlamp" state="0">
539         <bounds x="8" y="8" width="7" height="7"/>
540      </backdrop>
541      <backdrop name="lamp18" element="matrixlamp" state="0">
542         <bounds x="16" y="8" width="7" height="7"/>
543      </backdrop>
544      <backdrop name="lamp19" element="matrixlamp" state="0">
545         <bounds x="24" y="8" width="7" height="7"/>
546      </backdrop>
547      <backdrop name="lamp20" element="matrixlamp" state="0">
548         <bounds x="32" y="8" width="7" height="7"/>
549      </backdrop>
550      <backdrop name="lamp21" element="matrixlamp" state="0">
551         <bounds x="40" y="8" width="7" height="7"/>
552      </backdrop>
553      <backdrop name="lamp22" element="matrixlamp" state="0">
554         <bounds x="48" y="8" width="7" height="7"/>
555      </backdrop>
556      <backdrop name="lamp23" element="matrixlamp" state="0">
557         <bounds x="56" y="8" width="7" height="7"/>
558      </backdrop>
559      <backdrop name="lamp24" element="matrixlamp" state="0">
560         <bounds x="64" y="8" width="7" height="7"/>
561      </backdrop>
562      <backdrop name="lamp25" element="matrixlamp" state="0">
563         <bounds x="72" y="8" width="7" height="7"/>
564      </backdrop>
565      <backdrop name="lamp26" element="matrixlamp" state="0">
566         <bounds x="80" y="8" width="7" height="7"/>
567      </backdrop>
568      <backdrop name="lamp27" element="matrixlamp" state="0">
569         <bounds x="88" y="8" width="7" height="7"/>
570      </backdrop>
571      <backdrop name="lamp28" element="matrixlamp" state="0">
572         <bounds x="96" y="8" width="7" height="7"/>
573      </backdrop>
574      <backdrop name="lamp29" element="matrixlamp" state="0">
575         <bounds x="104" y="8" width="7" height="7"/>
576      </backdrop>
577      <backdrop name="lamp30" element="matrixlamp" state="0">
578         <bounds x="112" y="8" width="7" height="7"/>
579      </backdrop>
580      <backdrop name="lamp31" element="matrixlamp" state="0">
581         <bounds x="120" y="8" width="7" height="7"/>
582      </backdrop>
583      <backdrop name="lamp32" element="matrixlamp" state="0">
584         <bounds x="0" y="16" width="7" height="7"/>
585      </backdrop>
586      <backdrop name="lamp33" element="matrixlamp" state="0">
587         <bounds x="8" y="16" width="7" height="7"/>
588      </backdrop>
589      <backdrop name="lamp34" element="matrixlamp" state="0">
590         <bounds x="16" y="16" width="7" height="7"/>
591      </backdrop>
592      <backdrop name="lamp35" element="matrixlamp" state="0">
593         <bounds x="24" y="16" width="7" height="7"/>
594      </backdrop>
595      <backdrop name="lamp36" element="matrixlamp" state="0">
596         <bounds x="32" y="16" width="7" height="7"/>
597      </backdrop>
598      <backdrop name="lamp37" element="matrixlamp" state="0">
599         <bounds x="40" y="16" width="7" height="7"/>
600      </backdrop>
601      <backdrop name="lamp38" element="matrixlamp" state="0">
602         <bounds x="48" y="16" width="7" height="7"/>
603      </backdrop>
604      <backdrop name="lamp39" element="matrixlamp" state="0">
605         <bounds x="56" y="16" width="7" height="7"/>
606      </backdrop>
607      <backdrop name="lamp40" element="matrixlamp" state="0">
608         <bounds x="64" y="16" width="7" height="7"/>
609      </backdrop>
610      <backdrop name="lamp41" element="matrixlamp" state="0">
611         <bounds x="72" y="16" width="7" height="7"/>
612      </backdrop>
613      <backdrop name="lamp42" element="matrixlamp" state="0">
614         <bounds x="80" y="16" width="7" height="7"/>
615      </backdrop>
616      <backdrop name="lamp43" element="matrixlamp" state="0">
617         <bounds x="88" y="16" width="7" height="7"/>
618      </backdrop>
619      <backdrop name="lamp44" element="matrixlamp" state="0">
620         <bounds x="96" y="16" width="7" height="7"/>
621      </backdrop>
622      <backdrop name="lamp45" element="matrixlamp" state="0">
623         <bounds x="104" y="16" width="7" height="7"/>
624      </backdrop>
625      <backdrop name="lamp46" element="matrixlamp" state="0">
626         <bounds x="112" y="16" width="7" height="7"/>
627      </backdrop>
628      <backdrop name="lamp47" element="matrixlamp" state="0">
629         <bounds x="120" y="16" width="7" height="7"/>
630      </backdrop>
631      <backdrop name="lamp48" element="matrixlamp" state="0">
632         <bounds x="0" y="24" width="7" height="7"/>
633      </backdrop>
634      <backdrop name="lamp49" element="matrixlamp" state="0">
635         <bounds x="8" y="24" width="7" height="7"/>
636      </backdrop>
637      <backdrop name="lamp50" element="matrixlamp" state="0">
638         <bounds x="16" y="24" width="7" height="7"/>
639      </backdrop>
640      <backdrop name="lamp51" element="matrixlamp" state="0">
641         <bounds x="24" y="24" width="7" height="7"/>
642      </backdrop>
643      <backdrop name="lamp52" element="matrixlamp" state="0">
644         <bounds x="32" y="24" width="7" height="7"/>
645      </backdrop>
646      <backdrop name="lamp53" element="matrixlamp" state="0">
647         <bounds x="40" y="24" width="7" height="7"/>
648      </backdrop>
649      <backdrop name="lamp54" element="matrixlamp" state="0">
650         <bounds x="48" y="24" width="7" height="7"/>
651      </backdrop>
652      <backdrop name="lamp55" element="matrixlamp" state="0">
653         <bounds x="56" y="24" width="7" height="7"/>
654      </backdrop>
655      <backdrop name="lamp56" element="matrixlamp" state="0">
656         <bounds x="64" y="24" width="7" height="7"/>
657      </backdrop>
658      <backdrop name="lamp57" element="matrixlamp" state="0">
659         <bounds x="72" y="24" width="7" height="7"/>
660      </backdrop>
661      <backdrop name="lamp58" element="matrixlamp" state="0">
662         <bounds x="80" y="24" width="7" height="7"/>
663      </backdrop>
664      <backdrop name="lamp59" element="matrixlamp" state="0">
665         <bounds x="88" y="24" width="7" height="7"/>
666      </backdrop>
667      <backdrop name="lamp60" element="matrixlamp" state="0">
668         <bounds x="96" y="24" width="7" height="7"/>
669      </backdrop>
670      <backdrop name="lamp61" element="matrixlamp" state="0">
671         <bounds x="104" y="24" width="7" height="7"/>
672      </backdrop>
673      <backdrop name="lamp62" element="matrixlamp" state="0">
674         <bounds x="112" y="24" width="7" height="7"/>
675      </backdrop>
676      <backdrop name="lamp63" element="matrixlamp" state="0">
677         <bounds x="120" y="24" width="7" height="7"/>
678      </backdrop>
679      <backdrop name="lamp64" element="matrixlamp" state="0">
680         <bounds x="0" y="32" width="7" height="7"/>
681      </backdrop>
682      <backdrop name="lamp65" element="matrixlamp" state="0">
683         <bounds x="8" y="32" width="7" height="7"/>
684      </backdrop>
685      <backdrop name="lamp66" element="matrixlamp" state="0">
686         <bounds x="16" y="32" width="7" height="7"/>
687      </backdrop>
688      <backdrop name="lamp67" element="matrixlamp" state="0">
689         <bounds x="24" y="32" width="7" height="7"/>
690      </backdrop>
691      <backdrop name="lamp68" element="matrixlamp" state="0">
692         <bounds x="32" y="32" width="7" height="7"/>
693      </backdrop>
694      <backdrop name="lamp69" element="matrixlamp" state="0">
695         <bounds x="40" y="32" width="7" height="7"/>
696      </backdrop>
697      <backdrop name="lamp70" element="matrixlamp" state="0">
698         <bounds x="48" y="32" width="7" height="7"/>
699      </backdrop>
700      <backdrop name="lamp71" element="matrixlamp" state="0">
701         <bounds x="56" y="32" width="7" height="7"/>
702      </backdrop>
703      <backdrop name="lamp72" element="matrixlamp" state="0">
704         <bounds x="64" y="32" width="7" height="7"/>
705      </backdrop>
706      <backdrop name="lamp73" element="matrixlamp" state="0">
707         <bounds x="72" y="32" width="7" height="7"/>
708      </backdrop>
709      <backdrop name="lamp74" element="matrixlamp" state="0">
710         <bounds x="80" y="32" width="7" height="7"/>
711      </backdrop>
712      <backdrop name="lamp75" element="matrixlamp" state="0">
713         <bounds x="88" y="32" width="7" height="7"/>
714      </backdrop>
715      <backdrop name="lamp76" element="matrixlamp" state="0">
716         <bounds x="96" y="32" width="7" height="7"/>
717      </backdrop>
718      <backdrop name="lamp77" element="matrixlamp" state="0">
719         <bounds x="104" y="32" width="7" height="7"/>
720      </backdrop>
721      <backdrop name="lamp78" element="matrixlamp" state="0">
722         <bounds x="112" y="32" width="7" height="7"/>
723      </backdrop>
724      <backdrop name="lamp79" element="matrixlamp" state="0">
725         <bounds x="120" y="32" width="7" height="7"/>
726      </backdrop>
727      <backdrop name="lamp80" element="matrixlamp" state="0">
728         <bounds x="0" y="40" width="7" height="7"/>
729      </backdrop>
730      <backdrop name="lamp81" element="matrixlamp" state="0">
731         <bounds x="8" y="40" width="7" height="7"/>
732      </backdrop>
733      <backdrop name="lamp82" element="matrixlamp" state="0">
734         <bounds x="16" y="40" width="7" height="7"/>
735      </backdrop>
736      <backdrop name="lamp83" element="matrixlamp" state="0">
737         <bounds x="24" y="40" width="7" height="7"/>
738      </backdrop>
739      <backdrop name="lamp84" element="matrixlamp" state="0">
740         <bounds x="32" y="40" width="7" height="7"/>
741      </backdrop>
742      <backdrop name="lamp85" element="matrixlamp" state="0">
743         <bounds x="40" y="40" width="7" height="7"/>
744      </backdrop>
745      <backdrop name="lamp86" element="matrixlamp" state="0">
746         <bounds x="48" y="40" width="7" height="7"/>
747      </backdrop>
748      <backdrop name="lamp87" element="matrixlamp" state="0">
749         <bounds x="56" y="40" width="7" height="7"/>
750      </backdrop>
751      <backdrop name="lamp88" element="matrixlamp" state="0">
752         <bounds x="64" y="40" width="7" height="7"/>
753      </backdrop>
754      <backdrop name="lamp89" element="matrixlamp" state="0">
755         <bounds x="72" y="40" width="7" height="7"/>
756      </backdrop>
757      <backdrop name="lamp90" element="matrixlamp" state="0">
758         <bounds x="80" y="40" width="7" height="7"/>
759      </backdrop>
760      <backdrop name="lamp91" element="matrixlamp" state="0">
761         <bounds x="88" y="40" width="7" height="7"/>
762      </backdrop>
763      <backdrop name="lamp92" element="matrixlamp" state="0">
764         <bounds x="96" y="40" width="7" height="7"/>
765      </backdrop>
766      <backdrop name="lamp93" element="matrixlamp" state="0">
767         <bounds x="104" y="40" width="7" height="7"/>
768      </backdrop>
769      <backdrop name="lamp94" element="matrixlamp" state="0">
770         <bounds x="112" y="40" width="7" height="7"/>
771      </backdrop>
772      <backdrop name="lamp95" element="matrixlamp" state="0">
773         <bounds x="120" y="40" width="7" height="7"/>
774      </backdrop>
775      <backdrop name="lamp96" element="matrixlamp" state="0">
776         <bounds x="0" y="48" width="7" height="7"/>
777      </backdrop>
778      <backdrop name="lamp97" element="matrixlamp" state="0">
779         <bounds x="8" y="48" width="7" height="7"/>
780      </backdrop>
781      <backdrop name="lamp98" element="matrixlamp" state="0">
782         <bounds x="16" y="48" width="7" height="7"/>
783      </backdrop>
784      <backdrop name="lamp99" element="matrixlamp" state="0">
785         <bounds x="24" y="48" width="7" height="7"/>
786      </backdrop>
787      <backdrop name="lamp100" element="matrixlamp" state="0">
788         <bounds x="32" y="48" width="7" height="7"/>
789      </backdrop>
790      <backdrop name="lamp101" element="matrixlamp" state="0">
791         <bounds x="40" y="48" width="7" height="7"/>
792      </backdrop>
793      <backdrop name="lamp102" element="matrixlamp" state="0">
794         <bounds x="48" y="48" width="7" height="7"/>
795      </backdrop>
796      <backdrop name="lamp103" element="matrixlamp" state="0">
797         <bounds x="56" y="48" width="7" height="7"/>
798      </backdrop>
799      <backdrop name="lamp104" element="matrixlamp" state="0">
800         <bounds x="64" y="48" width="7" height="7"/>
801      </backdrop>
802      <backdrop name="lamp105" element="matrixlamp" state="0">
803         <bounds x="72" y="48" width="7" height="7"/>
804      </backdrop>
805      <backdrop name="lamp106" element="matrixlamp" state="0">
806         <bounds x="80" y="48" width="7" height="7"/>
807      </backdrop>
808      <backdrop name="lamp107" element="matrixlamp" state="0">
809         <bounds x="88" y="48" width="7" height="7"/>
810      </backdrop>
811      <backdrop name="lamp108" element="matrixlamp" state="0">
812         <bounds x="96" y="48" width="7" height="7"/>
813      </backdrop>
814      <backdrop name="lamp109" element="matrixlamp" state="0">
815         <bounds x="104" y="48" width="7" height="7"/>
816      </backdrop>
817      <backdrop name="lamp110" element="matrixlamp" state="0">
818         <bounds x="112" y="48" width="7" height="7"/>
819      </backdrop>
820      <backdrop name="lamp111" element="matrixlamp" state="0">
821         <bounds x="120" y="48" width="7" height="7"/>
822      </backdrop>
823      <backdrop name="lamp112" element="matrixlamp" state="0">
824         <bounds x="0" y="56" width="7" height="7"/>
825      </backdrop>
826      <backdrop name="lamp113" element="matrixlamp" state="0">
827         <bounds x="8" y="56" width="7" height="7"/>
828      </backdrop>
829      <backdrop name="lamp114" element="matrixlamp" state="0">
830         <bounds x="16" y="56" width="7" height="7"/>
831      </backdrop>
832      <backdrop name="lamp115" element="matrixlamp" state="0">
833         <bounds x="24" y="56" width="7" height="7"/>
834      </backdrop>
835      <backdrop name="lamp116" element="matrixlamp" state="0">
836         <bounds x="32" y="56" width="7" height="7"/>
837      </backdrop>
838      <backdrop name="lamp117" element="matrixlamp" state="0">
839         <bounds x="40" y="56" width="7" height="7"/>
840      </backdrop>
841      <backdrop name="lamp118" element="matrixlamp" state="0">
842         <bounds x="48" y="56" width="7" height="7"/>
843      </backdrop>
844      <backdrop name="lamp119" element="matrixlamp" state="0">
845         <bounds x="56" y="56" width="7" height="7"/>
846      </backdrop>
847      <backdrop name="lamp120" element="matrixlamp" state="0">
848         <bounds x="64" y="56" width="7" height="7"/>
849      </backdrop>
850      <backdrop name="lamp121" element="matrixlamp" state="0">
851         <bounds x="72" y="56" width="7" height="7"/>
852      </backdrop>
853      <backdrop name="lamp122" element="matrixlamp" state="0">
854         <bounds x="80" y="56" width="7" height="7"/>
855      </backdrop>
856      <backdrop name="lamp123" element="matrixlamp" state="0">
857         <bounds x="88" y="56" width="7" height="7"/>
858      </backdrop>
859      <backdrop name="lamp124" element="matrixlamp" state="0">
860         <bounds x="96" y="56" width="7" height="7"/>
861      </backdrop>
862      <backdrop name="lamp125" element="matrixlamp" state="0">
863         <bounds x="104" y="56" width="7" height="7"/>
864      </backdrop>
865      <backdrop name="lamp126" element="matrixlamp" state="0">
866         <bounds x="112" y="56" width="7" height="7"/>
867      </backdrop>
868      <backdrop name="lamp127" element="matrixlamp" state="0">
869         <bounds x="120" y="56" width="7" height="7"/>
870      </backdrop>
871      <backdrop name="lamp128" element="matrixlamp" state="0">
872         <bounds x="0" y="64" width="7" height="7"/>
873      </backdrop>
874      <backdrop name="lamp129" element="matrixlamp" state="0">
875         <bounds x="8" y="64" width="7" height="7"/>
876      </backdrop>
877      <backdrop name="lamp130" element="matrixlamp" state="0">
878         <bounds x="16" y="64" width="7" height="7"/>
879      </backdrop>
880      <backdrop name="lamp131" element="matrixlamp" state="0">
881         <bounds x="24" y="64" width="7" height="7"/>
882      </backdrop>
883      <backdrop name="lamp132" element="matrixlamp" state="0">
884         <bounds x="32" y="64" width="7" height="7"/>
885      </backdrop>
886      <backdrop name="lamp133" element="matrixlamp" state="0">
887         <bounds x="40" y="64" width="7" height="7"/>
888      </backdrop>
889      <backdrop name="lamp134" element="matrixlamp" state="0">
890         <bounds x="48" y="64" width="7" height="7"/>
891      </backdrop>
892      <backdrop name="lamp135" element="matrixlamp" state="0">
893         <bounds x="56" y="64" width="7" height="7"/>
894      </backdrop>
895      <backdrop name="lamp136" element="matrixlamp" state="0">
896         <bounds x="64" y="64" width="7" height="7"/>
897      </backdrop>
898      <backdrop name="lamp137" element="matrixlamp" state="0">
899         <bounds x="72" y="64" width="7" height="7"/>
900      </backdrop>
901      <backdrop name="lamp138" element="matrixlamp" state="0">
902         <bounds x="80" y="64" width="7" height="7"/>
903      </backdrop>
904      <backdrop name="lamp139" element="matrixlamp" state="0">
905         <bounds x="88" y="64" width="7" height="7"/>
906      </backdrop>
907      <backdrop name="lamp140" element="matrixlamp" state="0">
908         <bounds x="96" y="64" width="7" height="7"/>
909      </backdrop>
910      <backdrop name="lamp141" element="matrixlamp" state="0">
911         <bounds x="104" y="64" width="7" height="7"/>
912      </backdrop>
913      <backdrop name="lamp142" element="matrixlamp" state="0">
914         <bounds x="112" y="64" width="7" height="7"/>
915      </backdrop>
916      <backdrop name="lamp143" element="matrixlamp" state="0">
917         <bounds x="120" y="64" width="7" height="7"/>
918      </backdrop>
919      <backdrop name="lamp144" element="matrixlamp" state="0">
920         <bounds x="0" y="72" width="7" height="7"/>
921      </backdrop>
922      <backdrop name="lamp145" element="matrixlamp" state="0">
923         <bounds x="8" y="72" width="7" height="7"/>
924      </backdrop>
925      <backdrop name="lamp146" element="matrixlamp" state="0">
926         <bounds x="16" y="72" width="7" height="7"/>
927      </backdrop>
928      <backdrop name="lamp147" element="matrixlamp" state="0">
929         <bounds x="24" y="72" width="7" height="7"/>
930      </backdrop>
931      <backdrop name="lamp148" element="matrixlamp" state="0">
932         <bounds x="32" y="72" width="7" height="7"/>
933      </backdrop>
934      <backdrop name="lamp149" element="matrixlamp" state="0">
935         <bounds x="40" y="72" width="7" height="7"/>
936      </backdrop>
937      <backdrop name="lamp150" element="matrixlamp" state="0">
938         <bounds x="48" y="72" width="7" height="7"/>
939      </backdrop>
940      <backdrop name="lamp151" element="matrixlamp" state="0">
941         <bounds x="56" y="72" width="7" height="7"/>
942      </backdrop>
943      <backdrop name="lamp152" element="matrixlamp" state="0">
944         <bounds x="64" y="72" width="7" height="7"/>
945      </backdrop>
946      <backdrop name="lamp153" element="matrixlamp" state="0">
947         <bounds x="72" y="72" width="7" height="7"/>
948      </backdrop>
949      <backdrop name="lamp154" element="matrixlamp" state="0">
950         <bounds x="80" y="72" width="7" height="7"/>
951      </backdrop>
952      <backdrop name="lamp155" element="matrixlamp" state="0">
953         <bounds x="88" y="72" width="7" height="7"/>
954      </backdrop>
955      <backdrop name="lamp156" element="matrixlamp" state="0">
956         <bounds x="96" y="72" width="7" height="7"/>
957      </backdrop>
958      <backdrop name="lamp157" element="matrixlamp" state="0">
959         <bounds x="104" y="72" width="7" height="7"/>
960      </backdrop>
961      <backdrop name="lamp158" element="matrixlamp" state="0">
962         <bounds x="112" y="72" width="7" height="7"/>
963      </backdrop>
964      <backdrop name="lamp159" element="matrixlamp" state="0">
965         <bounds x="120" y="72" width="7" height="7"/>
966      </backdrop>
967      <backdrop name="lamp160" element="matrixlamp" state="0">
968         <bounds x="0" y="80" width="7" height="7"/>
969      </backdrop>
970      <backdrop name="lamp161" element="matrixlamp" state="0">
971         <bounds x="8" y="80" width="7" height="7"/>
972      </backdrop>
973      <backdrop name="lamp162" element="matrixlamp" state="0">
974         <bounds x="16" y="80" width="7" height="7"/>
975      </backdrop>
976      <backdrop name="lamp163" element="matrixlamp" state="0">
977         <bounds x="24" y="80" width="7" height="7"/>
978      </backdrop>
979      <backdrop name="lamp164" element="matrixlamp" state="0">
980         <bounds x="32" y="80" width="7" height="7"/>
981      </backdrop>
982      <backdrop name="lamp165" element="matrixlamp" state="0">
983         <bounds x="40" y="80" width="7" height="7"/>
984      </backdrop>
985      <backdrop name="lamp166" element="matrixlamp" state="0">
986         <bounds x="48" y="80" width="7" height="7"/>
987      </backdrop>
988      <backdrop name="lamp167" element="matrixlamp" state="0">
989         <bounds x="56" y="80" width="7" height="7"/>
990      </backdrop>
991      <backdrop name="lamp168" element="matrixlamp" state="0">
992         <bounds x="64" y="80" width="7" height="7"/>
993      </backdrop>
994      <backdrop name="lamp169" element="matrixlamp" state="0">
995         <bounds x="72" y="80" width="7" height="7"/>
996      </backdrop>
997      <backdrop name="lamp170" element="matrixlamp" state="0">
998         <bounds x="80" y="80" width="7" height="7"/>
999      </backdrop>
1000      <backdrop name="lamp171" element="matrixlamp" state="0">
1001         <bounds x="88" y="80" width="7" height="7"/>
1002      </backdrop>
1003      <backdrop name="lamp172" element="matrixlamp" state="0">
1004         <bounds x="96" y="80" width="7" height="7"/>
1005      </backdrop>
1006      <backdrop name="lamp173" element="matrixlamp" state="0">
1007         <bounds x="104" y="80" width="7" height="7"/>
1008      </backdrop>
1009      <backdrop name="lamp174" element="matrixlamp" state="0">
1010         <bounds x="112" y="80" width="7" height="7"/>
1011      </backdrop>
1012      <backdrop name="lamp175" element="matrixlamp" state="0">
1013         <bounds x="120" y="80" width="7" height="7"/>
1014      </backdrop>
1015      <backdrop name="lamp176" element="matrixlamp" state="0">
1016         <bounds x="0" y="88" width="7" height="7"/>
1017      </backdrop>
1018      <backdrop name="lamp177" element="matrixlamp" state="0">
1019         <bounds x="8" y="88" width="7" height="7"/>
1020      </backdrop>
1021      <backdrop name="lamp178" element="matrixlamp" state="0">
1022         <bounds x="16" y="88" width="7" height="7"/>
1023      </backdrop>
1024      <backdrop name="lamp179" element="matrixlamp" state="0">
1025         <bounds x="24" y="88" width="7" height="7"/>
1026      </backdrop>
1027      <backdrop name="lamp180" element="matrixlamp" state="0">
1028         <bounds x="32" y="88" width="7" height="7"/>
1029      </backdrop>
1030      <backdrop name="lamp181" element="matrixlamp" state="0">
1031         <bounds x="40" y="88" width="7" height="7"/>
1032      </backdrop>
1033      <backdrop name="lamp182" element="matrixlamp" state="0">
1034         <bounds x="48" y="88" width="7" height="7"/>
1035      </backdrop>
1036      <backdrop name="lamp183" element="matrixlamp" state="0">
1037         <bounds x="56" y="88" width="7" height="7"/>
1038      </backdrop>
1039      <backdrop name="lamp184" element="matrixlamp" state="0">
1040         <bounds x="64" y="88" width="7" height="7"/>
1041      </backdrop>
1042      <backdrop name="lamp185" element="matrixlamp" state="0">
1043         <bounds x="72" y="88" width="7" height="7"/>
1044      </backdrop>
1045      <backdrop name="lamp186" element="matrixlamp" state="0">
1046         <bounds x="80" y="88" width="7" height="7"/>
1047      </backdrop>
1048      <backdrop name="lamp187" element="matrixlamp" state="0">
1049         <bounds x="88" y="88" width="7" height="7"/>
1050      </backdrop>
1051      <backdrop name="lamp188" element="matrixlamp" state="0">
1052         <bounds x="96" y="88" width="7" height="7"/>
1053      </backdrop>
1054      <backdrop name="lamp189" element="matrixlamp" state="0">
1055         <bounds x="104" y="88" width="7" height="7"/>
1056      </backdrop>
1057      <backdrop name="lamp190" element="matrixlamp" state="0">
1058         <bounds x="112" y="88" width="7" height="7"/>
1059      </backdrop>
1060      <backdrop name="lamp191" element="matrixlamp" state="0">
1061         <bounds x="120" y="88" width="7" height="7"/>
1062      </backdrop>
1063      <backdrop name="lamp192" element="matrixlamp" state="0">
1064         <bounds x="0" y="96" width="7" height="7"/>
1065      </backdrop>
1066      <backdrop name="lamp193" element="matrixlamp" state="0">
1067         <bounds x="8" y="96" width="7" height="7"/>
1068      </backdrop>
1069      <backdrop name="lamp194" element="matrixlamp" state="0">
1070         <bounds x="16" y="96" width="7" height="7"/>
1071      </backdrop>
1072      <backdrop name="lamp195" element="matrixlamp" state="0">
1073         <bounds x="24" y="96" width="7" height="7"/>
1074      </backdrop>
1075      <backdrop name="lamp196" element="matrixlamp" state="0">
1076         <bounds x="32" y="96" width="7" height="7"/>
1077      </backdrop>
1078      <backdrop name="lamp197" element="matrixlamp" state="0">
1079         <bounds x="40" y="96" width="7" height="7"/>
1080      </backdrop>
1081      <backdrop name="lamp198" element="matrixlamp" state="0">
1082         <bounds x="48" y="96" width="7" height="7"/>
1083      </backdrop>
1084      <backdrop name="lamp199" element="matrixlamp" state="0">
1085         <bounds x="56" y="96" width="7" height="7"/>
1086      </backdrop>
1087      <backdrop name="lamp200" element="matrixlamp" state="0">
1088         <bounds x="64" y="96" width="7" height="7"/>
1089      </backdrop>
1090      <backdrop name="lamp201" element="matrixlamp" state="0">
1091         <bounds x="72" y="96" width="7" height="7"/>
1092      </backdrop>
1093      <backdrop name="lamp202" element="matrixlamp" state="0">
1094         <bounds x="80" y="96" width="7" height="7"/>
1095      </backdrop>
1096      <backdrop name="lamp203" element="matrixlamp" state="0">
1097         <bounds x="88" y="96" width="7" height="7"/>
1098      </backdrop>
1099      <backdrop name="lamp204" element="matrixlamp" state="0">
1100         <bounds x="96" y="96" width="7" height="7"/>
1101      </backdrop>
1102      <backdrop name="lamp205" element="matrixlamp" state="0">
1103         <bounds x="104" y="96" width="7" height="7"/>
1104      </backdrop>
1105      <backdrop name="lamp206" element="matrixlamp" state="0">
1106         <bounds x="112" y="96" width="7" height="7"/>
1107      </backdrop>
1108      <backdrop name="lamp207" element="matrixlamp" state="0">
1109         <bounds x="120" y="96" width="7" height="7"/>
1110      </backdrop>
1111      <backdrop name="lamp208" element="matrixlamp" state="0">
1112         <bounds x="0" y="104" width="7" height="7"/>
1113      </backdrop>
1114      <backdrop name="lamp209" element="matrixlamp" state="0">
1115         <bounds x="8" y="104" width="7" height="7"/>
1116      </backdrop>
1117      <backdrop name="lamp210" element="matrixlamp" state="0">
1118         <bounds x="16" y="104" width="7" height="7"/>
1119      </backdrop>
1120      <backdrop name="lamp211" element="matrixlamp" state="0">
1121         <bounds x="24" y="104" width="7" height="7"/>
1122      </backdrop>
1123      <backdrop name="lamp212" element="matrixlamp" state="0">
1124         <bounds x="32" y="104" width="7" height="7"/>
1125      </backdrop>
1126      <backdrop name="lamp213" element="matrixlamp" state="0">
1127         <bounds x="40" y="104" width="7" height="7"/>
1128      </backdrop>
1129      <backdrop name="lamp214" element="matrixlamp" state="0">
1130         <bounds x="48" y="104" width="7" height="7"/>
1131      </backdrop>
1132      <backdrop name="lamp215" element="matrixlamp" state="0">
1133         <bounds x="56" y="104" width="7" height="7"/>
1134      </backdrop>
1135      <backdrop name="lamp216" element="matrixlamp" state="0">
1136         <bounds x="64" y="104" width="7" height="7"/>
1137      </backdrop>
1138      <backdrop name="lamp217" element="matrixlamp" state="0">
1139         <bounds x="72" y="104" width="7" height="7"/>
1140      </backdrop>
1141      <backdrop name="lamp218" element="matrixlamp" state="0">
1142         <bounds x="80" y="104" width="7" height="7"/>
1143      </backdrop>
1144      <backdrop name="lamp219" element="matrixlamp" state="0">
1145         <bounds x="88" y="104" width="7" height="7"/>
1146      </backdrop>
1147      <backdrop name="lamp220" element="matrixlamp" state="0">
1148         <bounds x="96" y="104" width="7" height="7"/>
1149      </backdrop>
1150      <backdrop name="lamp221" element="matrixlamp" state="0">
1151         <bounds x="104" y="104" width="7" height="7"/>
1152      </backdrop>
1153      <backdrop name="lamp222" element="matrixlamp" state="0">
1154         <bounds x="112" y="104" width="7" height="7"/>
1155      </backdrop>
1156      <backdrop name="lamp223" element="matrixlamp" state="0">
1157         <bounds x="120" y="104" width="7" height="7"/>
1158      </backdrop>
1159      <backdrop name="lamp224" element="matrixlamp" state="0">
1160         <bounds x="0" y="112" width="7" height="7"/>
1161      </backdrop>
1162      <backdrop name="lamp225" element="matrixlamp" state="0">
1163         <bounds x="8" y="112" width="7" height="7"/>
1164      </backdrop>
1165      <backdrop name="lamp226" element="matrixlamp" state="0">
1166         <bounds x="16" y="112" width="7" height="7"/>
1167      </backdrop>
1168      <backdrop name="lamp227" element="matrixlamp" state="0">
1169         <bounds x="24" y="112" width="7" height="7"/>
1170      </backdrop>
1171      <backdrop name="lamp228" element="matrixlamp" state="0">
1172         <bounds x="32" y="112" width="7" height="7"/>
1173      </backdrop>
1174      <backdrop name="lamp229" element="matrixlamp" state="0">
1175         <bounds x="40" y="112" width="7" height="7"/>
1176      </backdrop>
1177      <backdrop name="lamp230" element="matrixlamp" state="0">
1178         <bounds x="48" y="112" width="7" height="7"/>
1179      </backdrop>
1180      <backdrop name="lamp231" element="matrixlamp" state="0">
1181         <bounds x="56" y="112" width="7" height="7"/>
1182      </backdrop>
1183      <backdrop name="lamp232" element="matrixlamp" state="0">
1184         <bounds x="64" y="112" width="7" height="7"/>
1185      </backdrop>
1186      <backdrop name="lamp233" element="matrixlamp" state="0">
1187         <bounds x="72" y="112" width="7" height="7"/>
1188      </backdrop>
1189      <backdrop name="lamp234" element="matrixlamp" state="0">
1190         <bounds x="80" y="112" width="7" height="7"/>
1191      </backdrop>
1192      <backdrop name="lamp235" element="matrixlamp" state="0">
1193         <bounds x="88" y="112" width="7" height="7"/>
1194      </backdrop>
1195      <backdrop name="lamp236" element="matrixlamp" state="0">
1196         <bounds x="96" y="112" width="7" height="7"/>
1197      </backdrop>
1198      <backdrop name="lamp237" element="matrixlamp" state="0">
1199         <bounds x="104" y="112" width="7" height="7"/>
1200      </backdrop>
1201      <backdrop name="lamp238" element="matrixlamp" state="0">
1202         <bounds x="112" y="112" width="7" height="7"/>
1203      </backdrop>
1204      <backdrop name="lamp239" element="matrixlamp" state="0">
1205         <bounds x="120" y="112" width="7" height="7"/>
1206      </backdrop>
1207      <backdrop name="lamp240" element="matrixlamp" state="0">
1208         <bounds x="0" y="120" width="7" height="7"/>
1209      </backdrop>
1210      <backdrop name="lamp241" element="matrixlamp" state="0">
1211         <bounds x="8" y="120" width="7" height="7"/>
1212      </backdrop>
1213      <backdrop name="lamp242" element="matrixlamp" state="0">
1214         <bounds x="16" y="120" width="7" height="7"/>
1215      </backdrop>
1216      <backdrop name="lamp243" element="matrixlamp" state="0">
1217         <bounds x="24" y="120" width="7" height="7"/>
1218      </backdrop>
1219      <backdrop name="lamp244" element="matrixlamp" state="0">
1220         <bounds x="32" y="120" width="7" height="7"/>
1221      </backdrop>
1222      <backdrop name="lamp245" element="matrixlamp" state="0">
1223         <bounds x="40" y="120" width="7" height="7"/>
1224      </backdrop>
1225      <backdrop name="lamp246" element="matrixlamp" state="0">
1226         <bounds x="48" y="120" width="7" height="7"/>
1227      </backdrop>
1228      <backdrop name="lamp247" element="matrixlamp" state="0">
1229         <bounds x="56" y="120" width="7" height="7"/>
1230      </backdrop>
1231      <backdrop name="lamp248" element="matrixlamp" state="0">
1232         <bounds x="64" y="120" width="7" height="7"/>
1233      </backdrop>
1234      <backdrop name="lamp249" element="matrixlamp" state="0">
1235         <bounds x="72" y="120" width="7" height="7"/>
1236      </backdrop>
1237      <backdrop name="lamp250" element="matrixlamp" state="0">
1238         <bounds x="80" y="120" width="7" height="7"/>
1239      </backdrop>
1240      <backdrop name="lamp251" element="matrixlamp" state="0">
1241         <bounds x="88" y="120" width="7" height="7"/>
1242      </backdrop>
1243      <backdrop name="lamp252" element="matrixlamp" state="0">
1244         <bounds x="96" y="120" width="7" height="7"/>
1245      </backdrop>
1246      <backdrop name="lamp253" element="matrixlamp" state="0">
1247         <bounds x="104" y="120" width="7" height="7"/>
1248      </backdrop>
1249      <backdrop name="lamp254" element="matrixlamp" state="0">
1250         <bounds x="112" y="120" width="7" height="7"/>
1251      </backdrop>
1252      <backdrop name="lamp255" element="matrixlamp" state="0">
1253         <bounds x="120" y="120" width="7" height="7"/>
1254      </backdrop>
1255 
1256 
1257 
1258 
1259    <backdrop name="matrix0" element="matrixlamp" state="0">
1260      <bounds y="0" x="180" width="3" height="3"/>
1261    </backdrop>
1262    <backdrop name="matrix1" element="matrixlamp" state="0">
1263      <bounds y="4" x="180" width="3" height="3"/>
1264    </backdrop>
1265    <backdrop name="matrix2" element="matrixlamp" state="0">
1266      <bounds y="8" x="180" width="3" height="3"/>
1267    </backdrop>
1268    <backdrop name="matrix3" element="matrixlamp" state="0">
1269      <bounds y="12" x="180" width="3" height="3"/>
1270    </backdrop>
1271    <backdrop name="matrix4" element="matrixlamp" state="0">
1272      <bounds y="16" x="180" width="3" height="3"/>
1273    </backdrop>
1274    <backdrop name="matrix5" element="matrixlamp" state="0">
1275      <bounds y="20" x="180" width="3" height="3"/>
1276    </backdrop>
1277    <backdrop name="matrix6" element="matrixlamp" state="0">
1278      <bounds y="24" x="180" width="3" height="3"/>
1279    </backdrop>
1280    <backdrop name="matrix7" element="matrixlamp" state="0">
1281      <bounds y="28" x="180" width="3" height="3"/>
1282    </backdrop>
1283    <backdrop name="matrix8" element="matrixlamp" state="0">
1284      <bounds y="0" x="184" width="3" height="3"/>
1285    </backdrop>
1286    <backdrop name="matrix9" element="matrixlamp" state="0">
1287      <bounds y="4" x="184" width="3" height="3"/>
1288    </backdrop>
1289    <backdrop name="matrix10" element="matrixlamp" state="0">
1290      <bounds y="8" x="184" width="3" height="3"/>
1291    </backdrop>
1292    <backdrop name="matrix11" element="matrixlamp" state="0">
1293      <bounds y="12" x="184" width="3" height="3"/>
1294    </backdrop>
1295    <backdrop name="matrix12" element="matrixlamp" state="0">
1296      <bounds y="16" x="184" width="3" height="3"/>
1297    </backdrop>
1298    <backdrop name="matrix13" element="matrixlamp" state="0">
1299      <bounds y="20" x="184" width="3" height="3"/>
1300    </backdrop>
1301    <backdrop name="matrix14" element="matrixlamp" state="0">
1302      <bounds y="24" x="184" width="3" height="3"/>
1303    </backdrop>
1304    <backdrop name="matrix15" element="matrixlamp" state="0">
1305      <bounds y="28" x="184" width="3" height="3"/>
1306    </backdrop>
1307    <backdrop name="matrix16" element="matrixlamp" state="0">
1308      <bounds y="0" x="188" width="3" height="3"/>
1309    </backdrop>
1310    <backdrop name="matrix17" element="matrixlamp" state="0">
1311      <bounds y="4" x="188" width="3" height="3"/>
1312    </backdrop>
1313    <backdrop name="matrix18" element="matrixlamp" state="0">
1314      <bounds y="8" x="188" width="3" height="3"/>
1315    </backdrop>
1316    <backdrop name="matrix19" element="matrixlamp" state="0">
1317      <bounds y="12" x="188" width="3" height="3"/>
1318    </backdrop>
1319    <backdrop name="matrix20" element="matrixlamp" state="0">
1320      <bounds y="16" x="188" width="3" height="3"/>
1321    </backdrop>
1322    <backdrop name="matrix21" element="matrixlamp" state="0">
1323      <bounds y="20" x="188" width="3" height="3"/>
1324    </backdrop>
1325    <backdrop name="matrix22" element="matrixlamp" state="0">
1326      <bounds y="24" x="188" width="3" height="3"/>
1327    </backdrop>
1328    <backdrop name="matrix23" element="matrixlamp" state="0">
1329      <bounds y="28" x="188" width="3" height="3"/>
1330    </backdrop>
1331    <backdrop name="matrix24" element="matrixlamp" state="0">
1332      <bounds y="0" x="192" width="3" height="3"/>
1333    </backdrop>
1334    <backdrop name="matrix25" element="matrixlamp" state="0">
1335      <bounds y="4" x="192" width="3" height="3"/>
1336    </backdrop>
1337    <backdrop name="matrix26" element="matrixlamp" state="0">
1338      <bounds y="8" x="192" width="3" height="3"/>
1339    </backdrop>
1340    <backdrop name="matrix27" element="matrixlamp" state="0">
1341      <bounds y="12" x="192" width="3" height="3"/>
1342    </backdrop>
1343    <backdrop name="matrix28" element="matrixlamp" state="0">
1344      <bounds y="16" x="192" width="3" height="3"/>
1345    </backdrop>
1346    <backdrop name="matrix29" element="matrixlamp" state="0">
1347      <bounds y="20" x="192" width="3" height="3"/>
1348    </backdrop>
1349    <backdrop name="matrix30" element="matrixlamp" state="0">
1350      <bounds y="24" x="192" width="3" height="3"/>
1351    </backdrop>
1352    <backdrop name="matrix31" element="matrixlamp" state="0">
1353      <bounds y="28" x="192" width="3" height="3"/>
1354    </backdrop>
1355    <backdrop name="matrix32" element="matrixlamp" state="0">
1356      <bounds y="0" x="196" width="3" height="3"/>
1357    </backdrop>
1358    <backdrop name="matrix33" element="matrixlamp" state="0">
1359      <bounds y="4" x="196" width="3" height="3"/>
1360    </backdrop>
1361    <backdrop name="matrix34" element="matrixlamp" state="0">
1362      <bounds y="8" x="196" width="3" height="3"/>
1363    </backdrop>
1364    <backdrop name="matrix35" element="matrixlamp" state="0">
1365      <bounds y="12" x="196" width="3" height="3"/>
1366    </backdrop>
1367    <backdrop name="matrix36" element="matrixlamp" state="0">
1368      <bounds y="16" x="196" width="3" height="3"/>
1369    </backdrop>
1370    <backdrop name="matrix37" element="matrixlamp" state="0">
1371      <bounds y="20" x="196" width="3" height="3"/>
1372    </backdrop>
1373    <backdrop name="matrix38" element="matrixlamp" state="0">
1374      <bounds y="24" x="196" width="3" height="3"/>
1375    </backdrop>
1376    <backdrop name="matrix39" element="matrixlamp" state="0">
1377      <bounds y="28" x="196" width="3" height="3"/>
1378    </backdrop>
1379   
1380     
1381    <backdrop name="matrix40" element="matrixlamp" state="0">
1382      <bounds y="0" x="202" width="3" height="3"/>
1383    </backdrop>
1384    <backdrop name="matrix41" element="matrixlamp" state="0">
1385      <bounds y="4" x="202" width="3" height="3"/>
1386    </backdrop>
1387    <backdrop name="matrix42" element="matrixlamp" state="0">
1388      <bounds y="8" x="202" width="3" height="3"/>
1389    </backdrop>
1390    <backdrop name="matrix43" element="matrixlamp" state="0">
1391      <bounds y="12" x="202" width="3" height="3"/>
1392    </backdrop>
1393    <backdrop name="matrix44" element="matrixlamp" state="0">
1394      <bounds y="16" x="202" width="3" height="3"/>
1395    </backdrop>
1396    <backdrop name="matrix45" element="matrixlamp" state="0">
1397      <bounds y="20" x="202" width="3" height="3"/>
1398    </backdrop>
1399    <backdrop name="matrix46" element="matrixlamp" state="0">
1400      <bounds y="24" x="202" width="3" height="3"/>
1401    </backdrop>
1402    <backdrop name="matrix47" element="matrixlamp" state="0">
1403      <bounds y="28" x="202" width="3" height="3"/>
1404    </backdrop>
1405    <backdrop name="matrix48" element="matrixlamp" state="0">
1406      <bounds y="0" x="206" width="3" height="3"/>
1407    </backdrop>
1408    <backdrop name="matrix49" element="matrixlamp" state="0">
1409      <bounds y="4" x="206" width="3" height="3"/>
1410    </backdrop>
1411    <backdrop name="matrix50" element="matrixlamp" state="0">
1412      <bounds y="8" x="206" width="3" height="3"/>
1413    </backdrop>
1414    <backdrop name="matrix51" element="matrixlamp" state="0">
1415      <bounds y="12" x="206" width="3" height="3"/>
1416    </backdrop>
1417    <backdrop name="matrix52" element="matrixlamp" state="0">
1418      <bounds y="16" x="206" width="3" height="3"/>
1419    </backdrop>
1420    <backdrop name="matrix53" element="matrixlamp" state="0">
1421      <bounds y="20" x="206" width="3" height="3"/>
1422    </backdrop>
1423    <backdrop name="matrix54" element="matrixlamp" state="0">
1424      <bounds y="24" x="206" width="3" height="3"/>
1425    </backdrop>
1426    <backdrop name="matrix55" element="matrixlamp" state="0">
1427      <bounds y="28" x="206" width="3" height="3"/>
1428    </backdrop>
1429    <backdrop name="matrix56" element="matrixlamp" state="0">
1430      <bounds y="0" x="210" width="3" height="3"/>
1431    </backdrop>
1432    <backdrop name="matrix57" element="matrixlamp" state="0">
1433      <bounds y="4" x="210" width="3" height="3"/>
1434    </backdrop>
1435    <backdrop name="matrix58" element="matrixlamp" state="0">
1436      <bounds y="8" x="210" width="3" height="3"/>
1437    </backdrop>
1438    <backdrop name="matrix59" element="matrixlamp" state="0">
1439      <bounds y="12" x="210" width="3" height="3"/>
1440    </backdrop>
1441    <backdrop name="matrix60" element="matrixlamp" state="0">
1442      <bounds y="16" x="210" width="3" height="3"/>
1443    </backdrop>
1444    <backdrop name="matrix61" element="matrixlamp" state="0">
1445      <bounds y="20" x="210" width="3" height="3"/>
1446    </backdrop>
1447    <backdrop name="matrix62" element="matrixlamp" state="0">
1448      <bounds y="24" x="210" width="3" height="3"/>
1449    </backdrop>
1450    <backdrop name="matrix63" element="matrixlamp" state="0">
1451      <bounds y="28" x="210" width="3" height="3"/>
1452    </backdrop>
1453    <backdrop name="matrix64" element="matrixlamp" state="0">
1454      <bounds y="0" x="214" width="3" height="3"/>
1455    </backdrop>
1456    <backdrop name="matrix65" element="matrixlamp" state="0">
1457      <bounds y="4" x="214" width="3" height="3"/>
1458    </backdrop>
1459    <backdrop name="matrix66" element="matrixlamp" state="0">
1460      <bounds y="8" x="214" width="3" height="3"/>
1461    </backdrop>
1462    <backdrop name="matrix67" element="matrixlamp" state="0">
1463      <bounds y="12" x="214" width="3" height="3"/>
1464    </backdrop>
1465    <backdrop name="matrix68" element="matrixlamp" state="0">
1466      <bounds y="16" x="214" width="3" height="3"/>
1467    </backdrop>
1468    <backdrop name="matrix69" element="matrixlamp" state="0">
1469      <bounds y="20" x="214" width="3" height="3"/>
1470    </backdrop>
1471    <backdrop name="matrix70" element="matrixlamp" state="0">
1472      <bounds y="24" x="214" width="3" height="3"/>
1473    </backdrop>
1474    <backdrop name="matrix71" element="matrixlamp" state="0">
1475      <bounds y="28" x="214" width="3" height="3"/>
1476    </backdrop>
1477    <backdrop name="matrix72" element="matrixlamp" state="0">
1478      <bounds y="0" x="218" width="3" height="3"/>
1479    </backdrop>
1480    <backdrop name="matrix73" element="matrixlamp" state="0">
1481      <bounds y="4" x="218" width="3" height="3"/>
1482    </backdrop>
1483    <backdrop name="matrix74" element="matrixlamp" state="0">
1484      <bounds y="8" x="218" width="3" height="3"/>
1485    </backdrop>
1486    <backdrop name="matrix75" element="matrixlamp" state="0">
1487      <bounds y="12" x="218" width="3" height="3"/>
1488    </backdrop>
1489    <backdrop name="matrix76" element="matrixlamp" state="0">
1490      <bounds y="16" x="218" width="3" height="3"/>
1491    </backdrop>
1492    <backdrop name="matrix77" element="matrixlamp" state="0">
1493      <bounds y="20" x="218" width="3" height="3"/>
1494    </backdrop>
1495    <backdrop name="matrix78" element="matrixlamp" state="0">
1496      <bounds y="24" x="218" width="3" height="3"/>
1497    </backdrop>
1498    <backdrop name="matrix79" element="matrixlamp" state="0">
1499      <bounds y="28" x="218" width="3" height="3"/>
1500    </backdrop>
1501     
1502     
1503    <backdrop name="matrix80" element="matrixlamp" state="0">
1504      <bounds y="0" x="224" width="3" height="3"/>
1505    </backdrop>
1506    <backdrop name="matrix81" element="matrixlamp" state="0">
1507      <bounds y="4" x="224" width="3" height="3"/>
1508    </backdrop>
1509    <backdrop name="matrix82" element="matrixlamp" state="0">
1510      <bounds y="8" x="224" width="3" height="3"/>
1511    </backdrop>
1512    <backdrop name="matrix83" element="matrixlamp" state="0">
1513      <bounds y="12" x="224" width="3" height="3"/>
1514    </backdrop>
1515    <backdrop name="matrix84" element="matrixlamp" state="0">
1516      <bounds y="16" x="224" width="3" height="3"/>
1517    </backdrop>
1518    <backdrop name="matrix85" element="matrixlamp" state="0">
1519      <bounds y="20" x="224" width="3" height="3"/>
1520    </backdrop>
1521    <backdrop name="matrix86" element="matrixlamp" state="0">
1522      <bounds y="24" x="224" width="3" height="3"/>
1523    </backdrop>
1524    <backdrop name="matrix87" element="matrixlamp" state="0">
1525      <bounds y="28" x="224" width="3" height="3"/>
1526    </backdrop>
1527    <backdrop name="matrix88" element="matrixlamp" state="0">
1528      <bounds y="0" x="228" width="3" height="3"/>
1529    </backdrop>
1530    <backdrop name="matrix89" element="matrixlamp" state="0">
1531      <bounds y="4" x="228" width="3" height="3"/>
1532    </backdrop>
1533    <backdrop name="matrix90" element="matrixlamp" state="0">
1534      <bounds y="8" x="228" width="3" height="3"/>
1535    </backdrop>
1536    <backdrop name="matrix91" element="matrixlamp" state="0">
1537      <bounds y="12" x="228" width="3" height="3"/>
1538    </backdrop>
1539    <backdrop name="matrix92" element="matrixlamp" state="0">
1540      <bounds y="16" x="228" width="3" height="3"/>
1541    </backdrop>
1542    <backdrop name="matrix93" element="matrixlamp" state="0">
1543      <bounds y="20" x="228" width="3" height="3"/>
1544    </backdrop>
1545    <backdrop name="matrix94" element="matrixlamp" state="0">
1546      <bounds y="24" x="228" width="3" height="3"/>
1547    </backdrop>
1548    <backdrop name="matrix95" element="matrixlamp" state="0">
1549      <bounds y="28" x="228" width="3" height="3"/>
1550    </backdrop>
1551    <backdrop name="matrix96" element="matrixlamp" state="0">
1552      <bounds y="0" x="232" width="3" height="3"/>
1553    </backdrop>
1554    <backdrop name="matrix97" element="matrixlamp" state="0">
1555      <bounds y="4" x="232" width="3" height="3"/>
1556    </backdrop>
1557    <backdrop name="matrix98" element="matrixlamp" state="0">
1558      <bounds y="8" x="232" width="3" height="3"/>
1559    </backdrop>
1560    <backdrop name="matrix99" element="matrixlamp" state="0">
1561      <bounds y="12" x="232" width="3" height="3"/>
1562    </backdrop>
1563    <backdrop name="matrix100" element="matrixlamp" state="0">
1564      <bounds y="16" x="232" width="3" height="3"/>
1565    </backdrop>
1566    <backdrop name="matrix101" element="matrixlamp" state="0">
1567      <bounds y="20" x="232" width="3" height="3"/>
1568    </backdrop>
1569    <backdrop name="matrix102" element="matrixlamp" state="0">
1570      <bounds y="24" x="232" width="3" height="3"/>
1571    </backdrop>
1572    <backdrop name="matrix103" element="matrixlamp" state="0">
1573      <bounds y="28" x="232" width="3" height="3"/>
1574    </backdrop>
1575    <backdrop name="matrix104" element="matrixlamp" state="0">
1576      <bounds y="0" x="236" width="3" height="3"/>
1577    </backdrop>
1578    <backdrop name="matrix105" element="matrixlamp" state="0">
1579      <bounds y="4" x="236" width="3" height="3"/>
1580    </backdrop>
1581    <backdrop name="matrix106" element="matrixlamp" state="0">
1582      <bounds y="8" x="236" width="3" height="3"/>
1583    </backdrop>
1584    <backdrop name="matrix107" element="matrixlamp" state="0">
1585      <bounds y="12" x="236" width="3" height="3"/>
1586    </backdrop>
1587    <backdrop name="matrix108" element="matrixlamp" state="0">
1588      <bounds y="16" x="236" width="3" height="3"/>
1589    </backdrop>
1590    <backdrop name="matrix109" element="matrixlamp" state="0">
1591      <bounds y="20" x="236" width="3" height="3"/>
1592    </backdrop>
1593    <backdrop name="matrix110" element="matrixlamp" state="0">
1594      <bounds y="24" x="236" width="3" height="3"/>
1595    </backdrop>
1596    <backdrop name="matrix111" element="matrixlamp" state="0">
1597      <bounds y="28" x="236" width="3" height="3"/>
1598    </backdrop>
1599    <backdrop name="matrix112" element="matrixlamp" state="0">
1600      <bounds y="0" x="240" width="3" height="3"/>
1601    </backdrop>
1602    <backdrop name="matrix113" element="matrixlamp" state="0">
1603      <bounds y="4" x="240" width="3" height="3"/>
1604    </backdrop>
1605    <backdrop name="matrix114" element="matrixlamp" state="0">
1606      <bounds y="8" x="240" width="3" height="3"/>
1607    </backdrop>
1608    <backdrop name="matrix115" element="matrixlamp" state="0">
1609      <bounds y="12" x="240" width="3" height="3"/>
1610    </backdrop>
1611    <backdrop name="matrix116" element="matrixlamp" state="0">
1612      <bounds y="16" x="240" width="3" height="3"/>
1613    </backdrop>
1614    <backdrop name="matrix117" element="matrixlamp" state="0">
1615      <bounds y="20" x="240" width="3" height="3"/>
1616    </backdrop>
1617    <backdrop name="matrix118" element="matrixlamp" state="0">
1618      <bounds y="24" x="240" width="3" height="3"/>
1619    </backdrop>
1620    <backdrop name="matrix119" element="matrixlamp" state="0">
1621      <bounds y="28" x="240" width="3" height="3"/>
1622    </backdrop>
1623     
1624     
1625    <backdrop name="matrix120" element="matrixlamp" state="0">
1626      <bounds y="0" x="246" width="3" height="3"/>
1627    </backdrop>
1628    <backdrop name="matrix121" element="matrixlamp" state="0">
1629      <bounds y="4" x="246" width="3" height="3"/>
1630    </backdrop>
1631    <backdrop name="matrix122" element="matrixlamp" state="0">
1632      <bounds y="8" x="246" width="3" height="3"/>
1633    </backdrop>
1634    <backdrop name="matrix123" element="matrixlamp" state="0">
1635      <bounds y="12" x="246" width="3" height="3"/>
1636    </backdrop>
1637    <backdrop name="matrix124" element="matrixlamp" state="0">
1638      <bounds y="16" x="246" width="3" height="3"/>
1639    </backdrop>
1640    <backdrop name="matrix125" element="matrixlamp" state="0">
1641      <bounds y="20" x="246" width="3" height="3"/>
1642    </backdrop>
1643    <backdrop name="matrix126" element="matrixlamp" state="0">
1644      <bounds y="24" x="246" width="3" height="3"/>
1645    </backdrop>
1646    <backdrop name="matrix127" element="matrixlamp" state="0">
1647      <bounds y="28" x="246" width="3" height="3"/>
1648    </backdrop>
1649    <backdrop name="matrix128" element="matrixlamp" state="0">
1650      <bounds y="0" x="250" width="3" height="3"/>
1651    </backdrop>
1652    <backdrop name="matrix129" element="matrixlamp" state="0">
1653      <bounds y="4" x="250" width="3" height="3"/>
1654    </backdrop>
1655    <backdrop name="matrix130" element="matrixlamp" state="0">
1656      <bounds y="8" x="250" width="3" height="3"/>
1657    </backdrop>
1658    <backdrop name="matrix131" element="matrixlamp" state="0">
1659      <bounds y="12" x="250" width="3" height="3"/>
1660    </backdrop>
1661    <backdrop name="matrix132" element="matrixlamp" state="0">
1662      <bounds y="16" x="250" width="3" height="3"/>
1663    </backdrop>
1664    <backdrop name="matrix133" element="matrixlamp" state="0">
1665      <bounds y="20" x="250" width="3" height="3"/>
1666    </backdrop>
1667    <backdrop name="matrix134" element="matrixlamp" state="0">
1668      <bounds y="24" x="250" width="3" height="3"/>
1669    </backdrop>
1670    <backdrop name="matrix135" element="matrixlamp" state="0">
1671      <bounds y="28" x="250" width="3" height="3"/>
1672    </backdrop>
1673    <backdrop name="matrix136" element="matrixlamp" state="0">
1674      <bounds y="0" x="254" width="3" height="3"/>
1675    </backdrop>
1676    <backdrop name="matrix137" element="matrixlamp" state="0">
1677      <bounds y="4" x="254" width="3" height="3"/>
1678    </backdrop>
1679    <backdrop name="matrix138" element="matrixlamp" state="0">
1680      <bounds y="8" x="254" width="3" height="3"/>
1681    </backdrop>
1682    <backdrop name="matrix139" element="matrixlamp" state="0">
1683      <bounds y="12" x="254" width="3" height="3"/>
1684    </backdrop>
1685    <backdrop name="matrix140" element="matrixlamp" state="0">
1686      <bounds y="16" x="254" width="3" height="3"/>
1687    </backdrop>
1688    <backdrop name="matrix141" element="matrixlamp" state="0">
1689      <bounds y="20" x="254" width="3" height="3"/>
1690    </backdrop>
1691    <backdrop name="matrix142" element="matrixlamp" state="0">
1692      <bounds y="24" x="254" width="3" height="3"/>
1693    </backdrop>
1694    <backdrop name="matrix143" element="matrixlamp" state="0">
1695      <bounds y="28" x="254" width="3" height="3"/>
1696    </backdrop>
1697    <backdrop name="matrix144" element="matrixlamp" state="0">
1698      <bounds y="0" x="258" width="3" height="3"/>
1699    </backdrop>
1700    <backdrop name="matrix145" element="matrixlamp" state="0">
1701      <bounds y="4" x="258" width="3" height="3"/>
1702    </backdrop>
1703    <backdrop name="matrix146" element="matrixlamp" state="0">
1704      <bounds y="8" x="258" width="3" height="3"/>
1705    </backdrop>
1706    <backdrop name="matrix147" element="matrixlamp" state="0">
1707      <bounds y="12" x="258" width="3" height="3"/>
1708    </backdrop>
1709    <backdrop name="matrix148" element="matrixlamp" state="0">
1710      <bounds y="16" x="258" width="3" height="3"/>
1711    </backdrop>
1712    <backdrop name="matrix149" element="matrixlamp" state="0">
1713      <bounds y="20" x="258" width="3" height="3"/>
1714    </backdrop>
1715    <backdrop name="matrix150" element="matrixlamp" state="0">
1716      <bounds y="24" x="258" width="3" height="3"/>
1717    </backdrop>
1718    <backdrop name="matrix151" element="matrixlamp" state="0">
1719      <bounds y="28" x="258" width="3" height="3"/>
1720    </backdrop>
1721    <backdrop name="matrix152" element="matrixlamp" state="0">
1722      <bounds y="0" x="262" width="3" height="3"/>
1723    </backdrop>
1724    <backdrop name="matrix153" element="matrixlamp" state="0">
1725      <bounds y="4" x="262" width="3" height="3"/>
1726    </backdrop>
1727    <backdrop name="matrix154" element="matrixlamp" state="0">
1728      <bounds y="8" x="262" width="3" height="3"/>
1729    </backdrop>
1730    <backdrop name="matrix155" element="matrixlamp" state="0">
1731      <bounds y="12" x="262" width="3" height="3"/>
1732    </backdrop>
1733    <backdrop name="matrix156" element="matrixlamp" state="0">
1734      <bounds y="16" x="262" width="3" height="3"/>
1735    </backdrop>
1736    <backdrop name="matrix157" element="matrixlamp" state="0">
1737      <bounds y="20" x="262" width="3" height="3"/>
1738    </backdrop>
1739    <backdrop name="matrix158" element="matrixlamp" state="0">
1740      <bounds y="24" x="262" width="3" height="3"/>
1741    </backdrop>
1742    <backdrop name="matrix159" element="matrixlamp" state="0">
1743      <bounds y="28" x="262" width="3" height="3"/>
1744    </backdrop>
1745     
1746    <!-- the rest of the elements tend to be used for 7-segs 
1747         so render them as both -->
1748    <backdrop name="matrix160" element="matrixlamp" state="0">
1749      <bounds y="0" x="280" width="3" height="3"/>
1750    </backdrop>
1751    <backdrop name="matrix161" element="matrixlamp" state="0">
1752      <bounds y="4" x="280" width="3" height="3"/>
1753    </backdrop>
1754    <backdrop name="matrix162" element="matrixlamp" state="0">
1755      <bounds y="8" x="280" width="3" height="3"/>
1756    </backdrop>
1757    <backdrop name="matrix163" element="matrixlamp" state="0">
1758      <bounds y="12" x="280" width="3" height="3"/>
1759    </backdrop>
1760    <backdrop name="matrix164" element="matrixlamp" state="0">
1761      <bounds y="16" x="280" width="3" height="3"/>
1762    </backdrop>
1763    <backdrop name="matrix165" element="matrixlamp" state="0">
1764      <bounds y="20" x="280" width="3" height="3"/>
1765    </backdrop>
1766    <backdrop name="matrix166" element="matrixlamp" state="0">
1767      <bounds y="24" x="280" width="3" height="3"/>
1768    </backdrop>
1769    <backdrop name="matrix167" element="matrixlamp" state="0">
1770      <bounds y="28" x="280" width="3" height="3"/>
1771    </backdrop>
1772    <backdrop name="matrix168" element="matrixlamp" state="0">
1773      <bounds y="0" x="284" width="3" height="3"/>
1774    </backdrop>
1775    <backdrop name="matrix169" element="matrixlamp" state="0">
1776      <bounds y="4" x="284" width="3" height="3"/>
1777    </backdrop>
1778    <backdrop name="matrix170" element="matrixlamp" state="0">
1779      <bounds y="8" x="284" width="3" height="3"/>
1780    </backdrop>
1781    <backdrop name="matrix171" element="matrixlamp" state="0">
1782      <bounds y="12" x="284" width="3" height="3"/>
1783    </backdrop>
1784    <backdrop name="matrix172" element="matrixlamp" state="0">
1785      <bounds y="16" x="284" width="3" height="3"/>
1786    </backdrop>
1787    <backdrop name="matrix173" element="matrixlamp" state="0">
1788      <bounds y="20" x="284" width="3" height="3"/>
1789    </backdrop>
1790    <backdrop name="matrix174" element="matrixlamp" state="0">
1791      <bounds y="24" x="284" width="3" height="3"/>
1792    </backdrop>
1793    <backdrop name="matrix175" element="matrixlamp" state="0">
1794      <bounds y="28" x="284" width="3" height="3"/>
1795    </backdrop>
1796    <backdrop name="matrix176" element="matrixlamp" state="0">
1797      <bounds y="0" x="288" width="3" height="3"/>
1798    </backdrop>
1799    <backdrop name="matrix177" element="matrixlamp" state="0">
1800      <bounds y="4" x="288" width="3" height="3"/>
1801    </backdrop>
1802    <backdrop name="matrix178" element="matrixlamp" state="0">
1803      <bounds y="8" x="288" width="3" height="3"/>
1804    </backdrop>
1805    <backdrop name="matrix179" element="matrixlamp" state="0">
1806      <bounds y="12" x="288" width="3" height="3"/>
1807    </backdrop>
1808    <backdrop name="matrix180" element="matrixlamp" state="0">
1809      <bounds y="16" x="288" width="3" height="3"/>
1810    </backdrop>
1811    <backdrop name="matrix181" element="matrixlamp" state="0">
1812      <bounds y="20" x="288" width="3" height="3"/>
1813    </backdrop>
1814    <backdrop name="matrix182" element="matrixlamp" state="0">
1815      <bounds y="24" x="288" width="3" height="3"/>
1816    </backdrop>
1817    <backdrop name="matrix183" element="matrixlamp" state="0">
1818      <bounds y="28" x="288" width="3" height="3"/>
1819    </backdrop>
1820    <backdrop name="matrix184" element="matrixlamp" state="0">
1821      <bounds y="0" x="292" width="3" height="3"/>
1822    </backdrop>
1823    <backdrop name="matrix185" element="matrixlamp" state="0">
1824      <bounds y="4" x="292" width="3" height="3"/>
1825    </backdrop>
1826    <backdrop name="matrix186" element="matrixlamp" state="0">
1827      <bounds y="8" x="292" width="3" height="3"/>
1828    </backdrop>
1829    <backdrop name="matrix187" element="matrixlamp" state="0">
1830      <bounds y="12" x="292" width="3" height="3"/>
1831    </backdrop>
1832    <backdrop name="matrix188" element="matrixlamp" state="0">
1833      <bounds y="16" x="292" width="3" height="3"/>
1834    </backdrop>
1835    <backdrop name="matrix189" element="matrixlamp" state="0">
1836      <bounds y="20" x="292" width="3" height="3"/>
1837    </backdrop>
1838    <backdrop name="matrix190" element="matrixlamp" state="0">
1839      <bounds y="24" x="292" width="3" height="3"/>
1840    </backdrop>
1841    <backdrop name="matrix191" element="matrixlamp" state="0">
1842      <bounds y="28" x="292" width="3" height="3"/>
1843    </backdrop>
1844    <backdrop name="matrix192" element="matrixlamp" state="0">
1845      <bounds y="0" x="296" width="3" height="3"/>
1846    </backdrop>
1847    <backdrop name="matrix193" element="matrixlamp" state="0">
1848      <bounds y="4" x="296" width="3" height="3"/>
1849    </backdrop>
1850    <backdrop name="matrix194" element="matrixlamp" state="0">
1851      <bounds y="8" x="296" width="3" height="3"/>
1852    </backdrop>
1853    <backdrop name="matrix195" element="matrixlamp" state="0">
1854      <bounds y="12" x="296" width="3" height="3"/>
1855    </backdrop>
1856    <backdrop name="matrix196" element="matrixlamp" state="0">
1857      <bounds y="16" x="296" width="3" height="3"/>
1858    </backdrop>
1859    <backdrop name="matrix197" element="matrixlamp" state="0">
1860      <bounds y="20" x="296" width="3" height="3"/>
1861    </backdrop>
1862    <backdrop name="matrix198" element="matrixlamp" state="0">
1863      <bounds y="24" x="296" width="3" height="3"/>
1864    </backdrop>
1865    <backdrop name="matrix199" element="matrixlamp" state="0">
1866      <bounds y="28" x="296" width="3" height="3"/>
1867    </backdrop>
1868    <backdrop name="matrix200" element="matrixlamp" state="0">
1869      <bounds y="0" x="300" width="3" height="3"/>
1870    </backdrop>
1871    <backdrop name="matrix201" element="matrixlamp" state="0">
1872      <bounds y="4" x="300" width="3" height="3"/>
1873    </backdrop>
1874    <backdrop name="matrix202" element="matrixlamp" state="0">
1875      <bounds y="8" x="300" width="3" height="3"/>
1876    </backdrop>
1877    <backdrop name="matrix203" element="matrixlamp" state="0">
1878      <bounds y="12" x="300" width="3" height="3"/>
1879    </backdrop>
1880    <backdrop name="matrix204" element="matrixlamp" state="0">
1881      <bounds y="16" x="300" width="3" height="3"/>
1882    </backdrop>
1883    <backdrop name="matrix205" element="matrixlamp" state="0">
1884      <bounds y="20" x="300" width="3" height="3"/>
1885    </backdrop>
1886    <backdrop name="matrix206" element="matrixlamp" state="0">
1887      <bounds y="24" x="300" width="3" height="3"/>
1888    </backdrop>
1889    <backdrop name="matrix207" element="matrixlamp" state="0">
1890      <bounds y="28" x="300" width="3" height="3"/>
1891    </backdrop>
1892    <backdrop name="matrix208" element="matrixlamp" state="0">
1893      <bounds y="0" x="304" width="3" height="3"/>
1894    </backdrop>
1895    <backdrop name="matrix209" element="matrixlamp" state="0">
1896      <bounds y="4" x="304" width="3" height="3"/>
1897    </backdrop>
1898    <backdrop name="matrix210" element="matrixlamp" state="0">
1899      <bounds y="8" x="304" width="3" height="3"/>
1900    </backdrop>
1901    <backdrop name="matrix211" element="matrixlamp" state="0">
1902      <bounds y="12" x="304" width="3" height="3"/>
1903    </backdrop>
1904    <backdrop name="matrix212" element="matrixlamp" state="0">
1905      <bounds y="16" x="304" width="3" height="3"/>
1906    </backdrop>
1907    <backdrop name="matrix213" element="matrixlamp" state="0">
1908      <bounds y="20" x="304" width="3" height="3"/>
1909    </backdrop>
1910    <backdrop name="matrix214" element="matrixlamp" state="0">
1911      <bounds y="24" x="304" width="3" height="3"/>
1912    </backdrop>
1913    <backdrop name="matrix215" element="matrixlamp" state="0">
1914      <bounds y="28" x="304" width="3" height="3"/>
1915    </backdrop>
1916    <backdrop name="matrix216" element="matrixlamp" state="0">
1917      <bounds y="0" x="308" width="3" height="3"/>
1918    </backdrop>
1919    <backdrop name="matrix217" element="matrixlamp" state="0">
1920      <bounds y="4" x="308" width="3" height="3"/>
1921    </backdrop>
1922    <backdrop name="matrix218" element="matrixlamp" state="0">
1923      <bounds y="8" x="308" width="3" height="3"/>
1924    </backdrop>
1925    <backdrop name="matrix219" element="matrixlamp" state="0">
1926      <bounds y="12" x="308" width="3" height="3"/>
1927    </backdrop>
1928    <backdrop name="matrix220" element="matrixlamp" state="0">
1929      <bounds y="16" x="308" width="3" height="3"/>
1930    </backdrop>
1931    <backdrop name="matrix221" element="matrixlamp" state="0">
1932      <bounds y="20" x="308" width="3" height="3"/>
1933    </backdrop>
1934    <backdrop name="matrix222" element="matrixlamp" state="0">
1935      <bounds y="24" x="308" width="3" height="3"/>
1936    </backdrop>
1937    <backdrop name="matrix223" element="matrixlamp" state="0">
1938      <bounds y="28" x="308" width="3" height="3"/>
1939    </backdrop>
1940    <backdrop name="matrix224" element="matrixlamp" state="0">
1941      <bounds y="0" x="312" width="3" height="3"/>
1942    </backdrop>
1943    <backdrop name="matrix225" element="matrixlamp" state="0">
1944      <bounds y="4" x="312" width="3" height="3"/>
1945    </backdrop>
1946    <backdrop name="matrix226" element="matrixlamp" state="0">
1947      <bounds y="8" x="312" width="3" height="3"/>
1948    </backdrop>
1949    <backdrop name="matrix227" element="matrixlamp" state="0">
1950      <bounds y="12" x="312" width="3" height="3"/>
1951    </backdrop>
1952    <backdrop name="matrix228" element="matrixlamp" state="0">
1953      <bounds y="16" x="312" width="3" height="3"/>
1954    </backdrop>
1955    <backdrop name="matrix229" element="matrixlamp" state="0">
1956      <bounds y="20" x="312" width="3" height="3"/>
1957    </backdrop>
1958    <backdrop name="matrix230" element="matrixlamp" state="0">
1959      <bounds y="24" x="312" width="3" height="3"/>
1960    </backdrop>
1961    <backdrop name="matrix231" element="matrixlamp" state="0">
1962      <bounds y="28" x="312" width="3" height="3"/>
1963    </backdrop>
1964    <backdrop name="matrix232" element="matrixlamp" state="0">
1965      <bounds y="0" x="316" width="3" height="3"/>
1966    </backdrop>
1967    <backdrop name="matrix233" element="matrixlamp" state="0">
1968      <bounds y="4" x="316" width="3" height="3"/>
1969    </backdrop>
1970    <backdrop name="matrix234" element="matrixlamp" state="0">
1971      <bounds y="8" x="316" width="3" height="3"/>
1972    </backdrop>
1973    <backdrop name="matrix235" element="matrixlamp" state="0">
1974      <bounds y="12" x="316" width="3" height="3"/>
1975    </backdrop>
1976    <backdrop name="matrix236" element="matrixlamp" state="0">
1977      <bounds y="16" x="316" width="3" height="3"/>
1978    </backdrop>
1979    <backdrop name="matrix237" element="matrixlamp" state="0">
1980      <bounds y="20" x="316" width="3" height="3"/>
1981    </backdrop>
1982    <backdrop name="matrix238" element="matrixlamp" state="0">
1983      <bounds y="24" x="316" width="3" height="3"/>
1984    </backdrop>
1985    <backdrop name="matrix239" element="matrixlamp" state="0">
1986      <bounds y="28" x="316" width="3" height="3"/>
1987    </backdrop>
1988    <backdrop name="matrix240" element="matrixlamp" state="0">
1989      <bounds y="0" x="320" width="3" height="3"/>
1990    </backdrop>
1991    <backdrop name="matrix241" element="matrixlamp" state="0">
1992      <bounds y="4" x="320" width="3" height="3"/>
1993    </backdrop>
1994    <backdrop name="matrix242" element="matrixlamp" state="0">
1995      <bounds y="8" x="320" width="3" height="3"/>
1996    </backdrop>
1997    <backdrop name="matrix243" element="matrixlamp" state="0">
1998      <bounds y="12" x="320" width="3" height="3"/>
1999    </backdrop>
2000    <backdrop name="matrix244" element="matrixlamp" state="0">
2001      <bounds y="16" x="320" width="3" height="3"/>
2002    </backdrop>
2003    <backdrop name="matrix245" element="matrixlamp" state="0">
2004      <bounds y="20" x="320" width="3" height="3"/>
2005    </backdrop>
2006    <backdrop name="matrix246" element="matrixlamp" state="0">
2007      <bounds y="24" x="320" width="3" height="3"/>
2008    </backdrop>
2009    <backdrop name="matrix247" element="matrixlamp" state="0">
2010      <bounds y="28" x="320" width="3" height="3"/>
2011    </backdrop>
2012    <backdrop name="matrix248" element="matrixlamp" state="0">
2013      <bounds y="0" x="324" width="3" height="3"/>
2014    </backdrop>
2015    <backdrop name="matrix249" element="matrixlamp" state="0">
2016      <bounds y="4" x="324" width="3" height="3"/>
2017    </backdrop>
2018    <backdrop name="matrix250" element="matrixlamp" state="0">
2019      <bounds y="8" x="324" width="3" height="3"/>
2020    </backdrop>
2021    <backdrop name="matrix251" element="matrixlamp" state="0">
2022      <bounds y="12" x="324" width="3" height="3"/>
2023    </backdrop>
2024    <backdrop name="matrix252" element="matrixlamp" state="0">
2025      <bounds y="16" x="324" width="3" height="3"/>
2026    </backdrop>
2027    <backdrop name="matrix253" element="matrixlamp" state="0">
2028      <bounds y="20" x="324" width="3" height="3"/>
2029    </backdrop>
2030    <backdrop name="matrix254" element="matrixlamp" state="0">
2031      <bounds y="24" x="324" width="3" height="3"/>
2032    </backdrop>
2033    <backdrop name="matrix255" element="matrixlamp" state="0">
2034      <bounds y="28" x="324" width="3" height="3"/>
2035    </backdrop>
2036 
2037    <backdrop name="digit0" element="digit" state="0">
2038      <bounds x="180" y="64" width="18" height="34"/>
2039    </backdrop>
2040    <backdrop name="digit1" element="digit" state="0">
2041      <bounds x="200" y="64" width="18" height="34"/>
2042    </backdrop>
2043    <backdrop name="digit2" element="digit" state="0">
2044      <bounds x="220" y="64" width="18" height="34"/>
2045    </backdrop>
2046    <backdrop name="digit3" element="digit" state="0">
2047      <bounds x="240" y="64" width="18" height="34"/>
2048    </backdrop>
2049    <backdrop name="digit4" element="digit" state="0">
2050      <bounds x="260" y="64" width="18" height="34"/>
2051    </backdrop>
2052    <backdrop name="digit5" element="digit" state="0">
2053      <bounds x="280" y="64" width="18" height="34"/>
2054    </backdrop>
2055    <backdrop name="digit6" element="digit" state="0">
2056      <bounds x="300" y="64" width="18" height="34"/>
2057    </backdrop>
2058    <backdrop name="digit7" element="digit" state="0">
2059      <bounds x="320" y="64" width="18" height="34"/>
2060    </backdrop>
2061    <backdrop name="digit8" element="digit" state="0">
2062      <bounds x="340" y="64" width="18" height="34"/>
2063    </backdrop>
2064    <backdrop name="digit9" element="digit" state="0">
2065      <bounds x="360" y="64" width="18" height="34"/>
2066    </backdrop>
2067    <backdrop name="digit10" element="digit" state="0">
2068      <bounds x="380" y="64" width="18" height="34"/>
2069    </backdrop>
2070    <backdrop name="digit11" element="digit" state="0">
2071      <bounds x="400" y="64" width="18" height="34"/>
2072    </backdrop>
2073 
2074     
2075     
2076  </view>
2077   <view name="VFD Display Output Only">
102078      <backdrop name="vfd0" element="vfd0" state="0">
11         <bounds x="0" y="280" width="9" height="14"/>
2079         <bounds x="10" y="200" width="9" height="17"/>
122080      </backdrop>
132081      <backdrop name="vfd1" element="vfd0" state="0">
14         <bounds x="9" y="280" width="9" height="14"/>
2082         <bounds x="19" y="200" width="9" height="17"/>
152083      </backdrop>
162084      <backdrop name="vfd2" element="vfd0" state="0">
17         <bounds x="18" y="280" width="9" height="14"/>
2085         <bounds x="28" y="200" width="9" height="17"/>
182086      </backdrop>
192087      <backdrop name="vfd3" element="vfd0" state="0">
20         <bounds x="27" y="280" width="9" height="14"/>
2088         <bounds x="37" y="200" width="9" height="17"/>
212089      </backdrop>
222090      <backdrop name="vfd4" element="vfd0" state="0">
23         <bounds x="36" y="280" width="9" height="14"/>
2091         <bounds x="46" y="200" width="9" height="17"/>
242092      </backdrop>
252093      <backdrop name="vfd5" element="vfd0" state="0">
26         <bounds x="45" y="280" width="9" height="14"/>
2094         <bounds x="55" y="200" width="9" height="17"/>
272095      </backdrop>
282096      <backdrop name="vfd6" element="vfd0" state="0">
29         <bounds x="54" y="280" width="9" height="14"/>
2097         <bounds x="64" y="200" width="9" height="17"/>
302098      </backdrop>
312099      <backdrop name="vfd7" element="vfd0" state="0">
32         <bounds x="63" y="280" width="9" height="14"/>
2100         <bounds x="73" y="200" width="9" height="17"/>
332101      </backdrop>
342102      <backdrop name="vfd8" element="vfd0" state="0">
35         <bounds x="72" y="280" width="9" height="14"/>
2103         <bounds x="82" y="200" width="9" height="17"/>
362104      </backdrop>
372105      <backdrop name="vfd9" element="vfd0" state="0">
38         <bounds x="81" y="280" width="9" height="14"/>
2106         <bounds x="91" y="200" width="9" height="17"/>
392107      </backdrop>
402108      <backdrop name="vfd10" element="vfd0" state="0">
41         <bounds x="90" y="280" width="9" height="14"/>
2109         <bounds x="100" y="200" width="9" height="17"/>
422110      </backdrop>
432111      <backdrop name="vfd11" element="vfd0" state="0">
44         <bounds x="99" y="280" width="9" height="14"/>
2112         <bounds x="109" y="200" width="9" height="17"/>
452113      </backdrop>
462114      <backdrop name="vfd12" element="vfd0" state="0">
47         <bounds x="108" y="280" width="9" height="14"/>
2115         <bounds x="118" y="200" width="9" height="17"/>
482116      </backdrop>
492117      <backdrop name="vfd13" element="vfd0" state="0">
50         <bounds x="117" y="280" width="9" height="14"/>
2118         <bounds x="127" y="200" width="9" height="17"/>
512119      </backdrop>
522120      <backdrop name="vfd14" element="vfd0" state="0">
53         <bounds x="126" y="280" width="9" height="14"/>
2121         <bounds x="136" y="200" width="9" height="17"/>
542122      </backdrop>
552123      <backdrop name="vfd15" element="vfd0" state="0">
56         <bounds x="135" y="280" width="9" height="14"/>
2124         <bounds x="145" y="200" width="9" height="17"/>
572125      </backdrop>
582126   </view>
2127</mamelayout>
592128 
60</mamelayout>
src/mame/drivers/snowbros.c
r14963r14964
15091509
15101510static const ym2151_interface ym2151_config =
15111511{
1512   irqhandler
1512   DEVCB_LINE(irqhandler)
15131513};
15141514
15151515
src/mame/drivers/segaxbd.c
r14963r14964
12361236
12371237static const ym2151_interface ym2151_config =
12381238{
1239   sound_cpu_irq
1239   DEVCB_LINE(sound_cpu_irq)
12401240};
12411241
12421242
src/mame/drivers/dblewing.c
r14963r14964
540540
541541static const ym2151_interface ym2151_config =
542542{
543   sound_irq
543   DEVCB_LINE(sound_irq)
544544};
545545
546546static int dblewing_bank_callback( const int bank )
src/mame/drivers/hornet.c
r14963r14964
336336   UINT8 m_led_reg1;
337337   required_shared_ptr<UINT32> m_workram;
338338   required_shared_ptr<UINT32> m_sharc_dataram0;
339   required_shared_ptr<UINT32> m_sharc_dataram1;
339   optional_shared_ptr<UINT32> m_sharc_dataram1;
340340   UINT8 *m_jvs_sdata;
341341   UINT32 m_jvs_sdata_ptr;
342342   emu_timer *m_sound_irq_timer;
src/mame/drivers/ddragon3.c
r14963r14964
521521
522522static const ym2151_interface ym2151_config =
523523{
524   dd3_ymirq_handler
524   DEVCB_LINE(dd3_ymirq_handler)
525525};
526526
527527/*************************************
src/mame/drivers/fitfight.c
r14963r14964
8787#include "sound/okim6295.h"
8888#include "includes/fitfight.h"
8989
90READ16_MEMBER( fitfight_state::hotmindff_unk_r )
91{
92   // won't boot unless things in here change, this is p1/p2 inputs in fitfight
93   return space.machine().rand();
94}
9095
9196READ16_MEMBER(fitfight_state::fitfight_700000_r)
9297{
r14963r14964
169174   AM_RANGE(0xd00000, 0xd007ff) AM_RAM AM_SHARE("spriteram")
170175
171176   AM_RANGE(0xe00000, 0xe0ffff) AM_RAM
177   AM_RANGE(0xff0000, 0xffffff) AM_RAM // hot mind uses RAM here (mirror?)
172178ADDRESS_MAP_END
173179
174180static ADDRESS_MAP_START( bbprot_main_map, AS_PROGRAM, 16, fitfight_state )
r14963r14964
965971   ROM_LOAD( "s16_h_mc.bin",  0x080000, 0x080000, CRC(3b9091de) SHA1(b426dab6361f5d48519dc9de146e1b2270af6c8b) )
966972ROM_END
967973
974ROM_START( hotmindff )
975   ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
976   ROM_LOAD16_BYTE( "21.u138", 0x000001, 0x020000, CRC(00d9ba73) SHA1(5f33f7e9b9446cdc380e6236381d86c46f55ede7) )
977   ROM_LOAD16_BYTE( "20.u125", 0x000000, 0x020000, CRC(8a7b2cc2) SHA1(031255cff4764dd61f5418be8090310193aa2e59) )
978
979   ROM_REGION( 0x01c000, "audiocpu", 0 ) /* Sound Program */
980   ROM_LOAD( "22.u23",  0x000000, 0x004000, CRC(ca0327a2) SHA1(b725f625860dae4723e0ed4a6c7c29a2b1a3d15f) )
981   ROM_CONTINUE(          0x010000, 0x00c000 )
982
983   ROM_REGION( 0x100000, "oki", 0 ) /* OKI Samples? */
984   ROM_LOAD( "19.u18",  0x000000, 0x040000, CRC(296d71da) SHA1(49735012691a9e65c4da6132428f7a9149504fd3) )
985
986   ROM_REGION( 0x100000, "gfx1", 0 ) /* GFX */
987   ROM_LOAD( "29.bin",  0x000000, 0x020000, CRC(cd4cab01) SHA1(90165f57adbfd7d85eaccfe794d347ed795dfba1) )
988   ROM_LOAD( "30.bin",  0x040000, 0x020000, CRC(33f991b5) SHA1(8fddb5a3c78e73eb2a741aa970ff2c650a847317) )
989   ROM_LOAD( "25.bin",  0x080000, 0x020000, CRC(21e7c729) SHA1(bf2a89ab54ef362bfee9fdcb7623d0f092559793) )
990   ROM_LOAD( "26.bin",  0x0c0000, 0x020000, CRC(5802e7d0) SHA1(6a6661c753b31492295813952fc559e5189aae9f) )
991
992   ROM_REGION( 0x400000, "gfx2", 0 ) /* Sprites */
993   ROM_LOAD( "23.bin",  0x000000, 0x020000, CRC(4d2c79ed) SHA1(df7004b11f5bcd51f7629fa1cc907976d9b8c8dc) )
994   ROM_LOAD( "24.bin",  0x100000, 0x020000, CRC(f43618d0) SHA1(7c383582ebcab713f2d8e6b4c73fc0415465d62d) )
995   ROM_LOAD( "27.bin",  0x200000, 0x020000, CRC(9cee7e50) SHA1(3e131b4acf35b58d511f7313425d002e939a7ff9) )
996   ROM_LOAD( "28.bin",  0x300000, 0x020000, CRC(059c7bcf) SHA1(b9d8b1e1482baeede750a54749834c68c2d0cfef) )
997ROM_END
998
999
1000
9681001/* INIT */
9691002
9701003static DRIVER_INIT( fitfight )
r14963r14964
9911024   state->m_bbprot_kludge = 1;
9921025}
9931026
1027DRIVER_INIT( hotmindff )
1028{
1029   fitfight_state *state = machine.driver_data<fitfight_state>();
1030   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x200000, 0x200001, 0, 0, read16_delegate(FUNC(fitfight_state::hotmindff_unk_r),state));
1031   DRIVER_INIT_CALL(fitfight);
1032}
1033
1034
9941035/* GAME */
9951036
9961037GAME( 199?, fitfight, 0, fitfight, fitfight, fitfight, ROT0, "bootleg", "Fit of Fighting", GAME_IMPERFECT_GRAPHICS | GAME_NO_SOUND | GAME_SUPPORTS_SAVE )
9971038GAME( 199?, histryma, 0, fitfight, histryma, histryma, ROT0, "bootleg", "The History of Martial Arts", GAME_IMPERFECT_GRAPHICS | GAME_NO_SOUND | GAME_SUPPORTS_SAVE )
9981039GAME( 199?, bbprot,   0, bbprot,   bbprot,   bbprot,   ROT0, "<unknown>", "unknown fighting game 'BB' (prototype)", GAME_IMPERFECT_GRAPHICS | GAME_NO_SOUND | GAME_SUPPORTS_SAVE )
1040GAME( 199?, hotmindff,  hotmind, fitfight,   fitfight,   hotmindff,   ROT0, "Playmark", "Hot Mind (Fit of Fighting hardware)", GAME_NOT_WORKING | GAME_NO_SOUND ) // need to fix scroll offsets + inputs
src/mame/drivers/deco32.c
r14963r14964
16361636
16371637static const ym2151_interface ym2151_config =
16381638{
1639   sound_irq,
1640   sound_bankswitch_w
1639   DEVCB_LINE(sound_irq),
1640   DEVCB_HANDLER(sound_bankswitch_w)
16411641};
16421642
16431643static const ym2151_interface ym2151_interface_nslasher =
16441644{
1645   sound_irq_nslasher,
1646   sound_bankswitch_w
1645   DEVCB_LINE(sound_irq_nslasher),
1646   DEVCB_HANDLER(sound_bankswitch_w)
16471647};
16481648
16491649static const eeprom_interface eeprom_interface_tattass =
src/mame/drivers/segaybd.c
r14963r14964
917917
918918static const ym2151_interface ym2151_config =
919919{
920   sound_cpu_irq
920   DEVCB_LINE(sound_cpu_irq)
921921};
922922
923923
src/mame/drivers/aliens.c
r14963r14964
206206
207207static const ym2151_interface ym2151_config =
208208{
209   0,
210   aliens_snd_bankswitch_w
209   DEVCB_NULL,
210   DEVCB_HANDLER(aliens_snd_bankswitch_w)
211211};
212212
213213
src/mame/drivers/chinagat.c
r14963r14964
500500
501501static const ym2151_interface ym2151_config =
502502{
503   chinagat_irq_handler
503   DEVCB_LINE(chinagat_irq_handler)
504504};
505505
506506/* This on the bootleg board, instead of the m6295 */
src/mame/drivers/namcos10.c
r14963r14964
500500   psx_driver_init(machine);
501501}
502502
503static void decrypt_bios( running_machine &machine, int start, int end, int b15, int b14, int b13, int b12, int b11, int b10, int b9, int b8,
503static void decrypt_bios( running_machine &machine, const char *regionName, int start, int b15, int b14, int b13, int b12, int b11, int b10, int b9, int b8,
504504   int b7, int b6, int b5, int b4, int b3, int b2, int b1, int b0 )
505505{
506   UINT16 *BIOS = (UINT16 *)(machine.region( "user1" )->base() + start);
507   int len = (end - start)/2;
506   const memory_region *region = machine.region( regionName );
507   UINT16 *BIOS = (UINT16 *)( region->base() + start );
508   int len = (region->bytes()-start)/2;
508509
509510   for( int i = 0; i < len; i++ )
510511   {
r14963r14964
515516
516517static DRIVER_INIT( mrdrilr2 )
517518{
519   decrypt_bios( machine, "user1", 0, 0xc, 0xd, 0xf, 0xe, 0xb, 0xa, 0x9, 0x8, 0x7, 0x6, 0x4, 0x1, 0x2, 0x5, 0x0, 0x3 );
518520   memm_driver_init(machine);
519   decrypt_bios( machine, 0x000000, 0x041000, 0xc, 0xd, 0xf, 0xe, 0xb, 0xa, 0x9, 0x8, 0x7, 0x6, 0x4, 0x1, 0x2, 0x5, 0x0, 0x3 );
520   decrypt_bios( machine, 0x060000, 0x062000, 0xc, 0xd, 0xf, 0xe, 0xb, 0xa, 0x9, 0x8, 0x7, 0x6, 0x4, 0x1, 0x2, 0x5, 0x0, 0x3 );
521521}
522522
523523static DRIVER_INIT( gjspace )
524524{
525   decrypt_bios( machine, "user2", 0x8400, 0x0, 0x2, 0xe, 0xd, 0xf, 0x6, 0xc, 0x7, 0x5, 0x1, 0x9, 0x8, 0xa, 0x3, 0x4, 0xb );
525526   memn_driver_init(machine);
526   decrypt_bios( machine, 0x000000, 0x400000, 0x0, 0x2, 0xe, 0xd, 0xf, 0x6, 0xc, 0x7, 0x5, 0x1, 0x9, 0x8, 0xa, 0x3, 0x4, 0xb );
527527}
528528
529529static DRIVER_INIT( mrdrilrg )
530530{
531   decrypt_bios( machine, "user2", 0x8400, 0x6, 0x4, 0x7, 0x5, 0x2, 0x1, 0x0, 0x3, 0xc, 0xd, 0xe, 0xf, 0x8, 0x9, 0xb, 0xa );
531532   memn_driver_init(machine);
532   decrypt_bios( machine, 0x000000, 0x400000, 0x6, 0x4, 0x7, 0x5, 0x2, 0x1, 0x0, 0x3, 0xc, 0xd, 0xe, 0xf, 0x8, 0x9, 0xb, 0xa );
533533}
534534
535535static DRIVER_INIT( knpuzzle )
536536{
537   decrypt_bios( machine, "user2", 0x8400, 0x6, 0x7, 0x4, 0x5, 0x2, 0x0, 0x3, 0x1, 0xc, 0xd, 0xe, 0xf, 0x9, 0xb, 0x8, 0xa );
537538   memn_driver_init(machine);
538   decrypt_bios( machine, 0x000000, 0x400000, 0x6, 0x7, 0x4, 0x5, 0x2, 0x0, 0x3, 0x1, 0xc, 0xd, 0xe, 0xf, 0x9, 0xb, 0x8, 0xa );
539539}
540540
541541static DRIVER_INIT( startrgn )
542542{
543   decrypt_bios( machine, "user2", 0x8400, 0x6, 0x5, 0x4, 0x7, 0x1, 0x3, 0x0, 0x2, 0xc, 0xd, 0xe, 0xf, 0x8, 0xb, 0xa, 0x9 );
543544   memn_driver_init(machine);
544   decrypt_bios( machine, 0x000000, 0x400000, 0x6, 0x5, 0x4, 0x7, 0x1, 0x3, 0x0, 0x2, 0xc, 0xd, 0xe, 0xf, 0x8, 0xb, 0xa, 0x9 );
545545}
546546
547547static DRIVER_INIT( gamshara )
548548{
549   decrypt_bios( machine, "user2", 0x8400, 0x5, 0x4, 0x7, 0x6, 0x0, 0x1, 0x3, 0x2, 0xd, 0xf, 0xc, 0xe, 0x8, 0x9, 0xa, 0xb );
549550   memn_driver_init(machine);
550   decrypt_bios( machine, 0x000000, 0x400000, 0x5, 0x4, 0x7, 0x6, 0x0, 0x1, 0x3, 0x2, 0xd, 0xf, 0xc, 0xe, 0x8, 0x9, 0xa, 0xb );
551551}
552552
553553static DRIVER_INIT( gunbalna )
554554{
555   decrypt_bios( machine, "user2", 0x8400, 0x5, 0x4, 0x7, 0x6, 0x0, 0x1, 0x3, 0x2, 0xd, 0xf, 0xc, 0xe, 0x9, 0x8, 0xa, 0xb );
555556   memn_driver_init(machine);
556   decrypt_bios( machine, 0x000000, 0x400000, 0x5, 0x4, 0x7, 0x6, 0x0, 0x1, 0x3, 0x2, 0xd, 0xf, 0xc, 0xe, 0x9, 0x8, 0xa, 0xb );
557557}
558558
559559static DRIVER_INIT( chocovdr )
560560{
561   memn_driver_init(machine);
562561//  NOTE: none of the possible permutations show the Sony Computer Entertainment string at BIOS[0x84], very likely a bad dump
563562//                                             BAD? 0 or 9                             1 or 8         0 or 9
564563//                         ok!  ok!  ok!  ok!            ok!  ok!  ok!  ok!  ok!  ok!       ok!  ok!
565   decrypt_bios( machine, 0x000000, 0x400000, 0x5, 0x4, 0x6, 0x7, 0x1, 0x0, 0x2, 0x3, 0xc, 0xf, 0xe, 0xd, 0x8, 0xb, 0xa, 0x9 );
564   decrypt_bios( machine, "user2", 0x8400, 0x5, 0x4, 0x6, 0x7, 0x1, 0x0, 0x2, 0x3, 0xc, 0xf, 0xe, 0xd, 0x8, 0xb, 0xa, 0x9 );
565   memn_driver_init(machine);
566566}
567567
568568static DRIVER_INIT( panikuru )
569569{
570   decrypt_bios( machine, "user2", 0x8400, 0x6, 0x4, 0x7, 0x5, 0x0, 0x1, 0x2, 0x3, 0xc, 0xf, 0xe, 0xd, 0x9, 0x8, 0xb, 0xa );
570571   memn_driver_init(machine);
571   decrypt_bios( machine, 0x000000, 0x400000, 0x6, 0x4, 0x7, 0x5, 0x0, 0x1, 0x2, 0x3, 0xc, 0xf, 0xe, 0xd, 0x9, 0x8, 0xb, 0xa );
572572}
573573
574574static DRIVER_INIT( nflclsfb )
575575{
576   decrypt_bios( machine, "user2", 0x8400, 0x6, 0x5, 0x4, 0x7, 0x1, 0x3, 0x0, 0x2, 0xc, 0xd, 0xe, 0xf, 0x8, 0xb, 0xa, 0x9 );
576577   memn_driver_init(machine);
577   decrypt_bios( machine, 0x000000, 0x400000, 0x6, 0x5, 0x4, 0x7, 0x1, 0x3, 0x0, 0x2, 0xc, 0xd, 0xe, 0xf, 0x8, 0xb, 0xa, 0x9 );
578578}
579579
580580
src/mame/drivers/mpu4.c
r14963r14964
528528
529529READ8_MEMBER(mpu4_state::bankswitch_r)
530530{
531   return machine().memory().bank("bank1");
531   return machine().memory().bank("bank1")->entry();
532532}
533533
534534
src/mame/drivers/darkseal.c
r14963r14964
229229
230230static const ym2151_interface ym2151_config =
231231{
232   sound_irq
232   DEVCB_LINE(sound_irq)
233233};
234234
235235static const deco16ic_interface darkseal_deco16ic_tilegen1_intf =
src/mame/drivers/mcr3.c
r14963r14964
104104#include "emu.h"
105105#include "cpu/z80/z80.h"
106106#include "machine/z80ctc.h"
107#include "audio/mcr.h"
107#include "audio/midway.h"
108108#include "machine/nvram.h"
109109#include "includes/mcr.h"
110110#include "includes/mcr3.h"
r14963r14964
162162   if (data & 0x40) m_input_mux = 1;
163163
164164   /* low 5 bits control the turbo CS */
165   turbocs_data_w(space, offset, data);
165   m_turbo_chip_squeak->write(space, offset, data);
166166}
167167
168168
r14963r14964
265265      m_maxrpm_adc_select = (m_maxrpm_adc_control >> 1) & 3;
266266
267267   /* low 5 bits control the turbo CS */
268   turbocs_data_w(space, offset, data);
268   m_turbo_chip_squeak->write(space, offset, data);
269269}
270270
271271
r14963r14964
278278
279279READ8_MEMBER(mcr3_state::rampage_ip4_r)
280280{
281   return input_port_read(machine(), "MONO.IP4") | (soundsgood_status_r(space,0) << 7);
281   return input_port_read(machine(), "MONO.IP4") | (m_sounds_good->read(space,0) << 7);
282282}
283283
284284
285285WRITE8_MEMBER(mcr3_state::rampage_op6_w)
286286{
287287   /* bit 5 controls reset of the Sounds Good board */
288   soundsgood_reset_w(machine(), (~data >> 5) & 1);
288   m_sounds_good->reset_write((~data >> 5) & 1);
289289
290290   /* low 5 bits go directly to the Sounds Good board */
291   soundsgood_data_w(space, offset, data);
291   m_sounds_good->write(space, offset, data);
292292}
293293
294294
r14963r14964
301301
302302READ8_MEMBER(mcr3_state::powerdrv_ip2_r)
303303{
304   return input_port_read(machine(), "MONO.IP2") | (soundsgood_status_r(space, 0) << 7);
304   return input_port_read(machine(), "MONO.IP2") | (m_sounds_good->read(space, 0) << 7);
305305}
306306
307307
r14963r14964
329329WRITE8_MEMBER(mcr3_state::powerdrv_op6_w)
330330{
331331   /* bit 5 controls reset of the Sounds Good board */
332   soundsgood_reset_w(machine(), (~data >> 5) & 1);
332   m_sounds_good->reset_write((~data >> 5) & 1);
333333
334334   /* low 5 bits go directly to the Sounds Good board */
335   soundsgood_data_w(space, offset, data);
335   m_sounds_good->write(space, offset, data);
336336}
337337
338338
r14963r14964
348348   UINT8 result = input_port_read(machine(), "MONO.IP0");
349349   if (m_input_mux)
350350      result = (result & ~0x0a) | (input_port_read(machine(), "MONO.IP0.ALT") & 0x0a);
351   return (result & ~0x10) | ((soundsgood_status_r(space, 0) << 4) & 0x10);
351   return (result & ~0x10) | ((m_sounds_good->read(space, 0) << 4) & 0x10);
352352}
353353
354354
r14963r14964
372372WRITE8_MEMBER(mcr3_state::stargrds_op6_w)
373373{
374374   /* bit 6 controls reset of the Sounds Good board */
375   soundsgood_reset_w(machine(), (~data >> 6) & 1);
375   m_sounds_good->reset_write((~data >> 6) & 1);
376376
377377   /* unline the other games, the STROBE is in the high bit instead of the low bit */
378   soundsgood_data_w(space, offset, (data << 1) | (data >> 7));
378   m_sounds_good->write(space, offset, (data << 1) | (data >> 7));
379379}
380380
381381
r14963r14964
388388
389389READ8_MEMBER(mcr3_state::spyhunt_ip1_r)
390390{
391   return input_port_read(machine(), "SSIO.IP1") | (csdeluxe_status_r(space, 0) << 5);
391   return input_port_read(machine(), "ssio:IP1") | (m_chip_squeak_deluxe->read(space, 0) << 5);
392392}
393393
394394
395395READ8_MEMBER(mcr3_state::spyhunt_ip2_r)
396396{
397397   /* multiplexed steering wheel/gas pedal */
398   return input_port_read(machine(), m_input_mux ? "SSIO.IP2.ALT" : "SSIO.IP2");
398   return input_port_read(machine(), m_input_mux ? "ssio:IP2.ALT" : "ssio:IP2");
399399}
400400
401401
r14963r14964
432432   m_last_op4 = data;
433433
434434   /* low 5 bits go to control the Chip Squeak Deluxe */
435   csdeluxe_data_w(space, offset, data);
435   m_chip_squeak_deluxe->write(space, offset, data);
436436}
437437
438438
r14963r14964
447447{
448448   /* multiplexed steering wheel/gas pedal */
449449   if (m_input_mux)
450      return input_port_read(machine(), "SSIO.IP2.ALT");
450      return input_port_read(machine(), "ssio:IP2.ALT");
451451
452   return input_port_read(machine(), "SSIO.IP2") + 5 * (machine().primary_screen->frame_number() & 1);
452   return input_port_read(machine(), "ssio:IP2") + 5 * (machine().primary_screen->frame_number() & 1);
453453}
454454
455455
r14963r14964
523523static ADDRESS_MAP_START( spyhunt_portmap, AS_IO, 8, mcr3_state )
524524   ADDRESS_MAP_UNMAP_HIGH
525525   ADDRESS_MAP_GLOBAL_MASK(0xff)
526   SSIO_INPUT_PORTS
526   SSIO_INPUT_PORTS("ssio")
527527   AM_RANGE(0x84, 0x86) AM_WRITE(spyhunt_scroll_value_w)
528528   AM_RANGE(0xe0, 0xe0) AM_WRITE(watchdog_reset_w)
529529   AM_RANGE(0xe8, 0xe8) AM_WRITENOP
r14963r14964
886886
887887/* verified from wiring diagram, plus DIP switches from manual */
888888static INPUT_PORTS_START( spyhunt )
889   PORT_START("SSIO.IP0")   /* J4 1-8 */
889   PORT_START("ssio:IP0")   /* J4 1-8 */
890890   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
891891   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
892892   PORT_BIT( 0x0c, IP_ACTIVE_LOW, IPT_UNUSED )
r14963r14964
895895   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 )
896896   PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
897897
898   PORT_START("SSIO.IP1")   /* J4 10-13,15-18 */
898   PORT_START("ssio:IP1")   /* J4 10-13,15-18 */
899899   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Oil Slick")
900900   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Missiles")
901901   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Weapon Truck")
r14963r14964
904904   PORT_BIT( 0x60, IP_ACTIVE_HIGH, IPT_SPECIAL )   /* status from CS deluxe, never read */
905905   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
906906
907   PORT_START("SSIO.IP2")   /* J5 1-8 */
907   PORT_START("ssio:IP2")   /* J5 1-8 */
908908   PORT_BIT( 0xff, 0x30, IPT_PEDAL ) PORT_MINMAX(0x30,0xff) PORT_SENSITIVITY(100) PORT_KEYDELTA(10)
909909
910   PORT_START("SSIO.IP3")   /* DIPSW @ B3 */
910   PORT_START("ssio:IP3")   /* DIPSW @ B3 */
911911   PORT_DIPNAME( 0x01, 0x01, "Game Timer" )
912912   PORT_DIPSETTING(    0x00, "1:00" )
913913   PORT_DIPSETTING(    0x01, "1:30" )
r14963r14964
918918   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
919919   PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
920920
921   PORT_START("SSIO.IP4")   /* J6 1-8 */
921   PORT_START("ssio:IP4")   /* J6 1-8 */
922922   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
923923
924   PORT_START("SSIO.DIP")
924   PORT_START("ssio:DIP")
925925   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
926926
927   PORT_START("SSIO.IP2.ALT")
927   PORT_START("ssio:IP2.ALT")
928928   PORT_BIT( 0xff, 0x74, IPT_PADDLE ) PORT_MINMAX(0x34,0xb4) PORT_SENSITIVITY(40) PORT_KEYDELTA(10)
929929INPUT_PORTS_END
930930
931931
932932/* not verified, no manual found */
933933static INPUT_PORTS_START( crater )
934   PORT_START("SSIO.IP0")   /* J4 1-8 */
934   PORT_START("ssio:IP0")   /* J4 1-8 */
935935   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
936936   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
937937   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
r14963r14964
941941   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 )
942942   PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
943943
944   PORT_START("SSIO.IP1")   /* J4 10-13,15-18 */
944   PORT_START("ssio:IP1")   /* J4 10-13,15-18 */
945945   PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(25) PORT_KEYDELTA(10) PORT_CODE_DEC(KEYCODE_Z) PORT_CODE_INC(KEYCODE_X) PORT_REVERSE
946946
947   PORT_START("SSIO.IP2")   /* J5 1-8 */
947   PORT_START("ssio:IP2")   /* J5 1-8 */
948948   PORT_BIT( 0x03, IP_ACTIVE_LOW, IPT_UNUSED )
949949   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_2WAY
950950   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_2WAY
r14963r14964
953953   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 )
954954   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
955955
956   PORT_START("SSIO.IP3")   /* DIPSW @ B3 */
956   PORT_START("ssio:IP3")   /* DIPSW @ B3 */
957957   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
958958
959   PORT_START("SSIO.IP4")   /* J6 1-8 */
959   PORT_START("ssio:IP4")   /* J6 1-8 */
960960   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
961961
962   PORT_START("SSIO.DIP")
962   PORT_START("ssio:DIP")
963963   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
964964INPUT_PORTS_END
965965
966966
967967/* not verified, no manual found */
968968static INPUT_PORTS_START( turbotag )
969   PORT_START("SSIO.IP0")   /* J4 1-8 */
969   PORT_START("ssio:IP0")   /* J4 1-8 */
970970   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
971971   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
972972   PORT_BIT( 0x0c, IP_ACTIVE_LOW, IPT_UNUSED )
r14963r14964
975975   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 )
976976   PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
977977
978   PORT_START("SSIO.IP1")   /* J4 10-13,15-18 */
978   PORT_START("ssio:IP1")   /* J4 10-13,15-18 */
979979   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Left Button")
980980   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Left Trigger")
981981   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Center Button")
r14963r14964
984984   PORT_BIT( 0x60, IP_ACTIVE_HIGH, IPT_SPECIAL )   /* status from CS deluxe, never read */
985985   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
986986
987   PORT_START("SSIO.IP2")   /* J5 1-8 */
987   PORT_START("ssio:IP2")   /* J5 1-8 */
988988   PORT_BIT( 0xff, 0x3c, IPT_PEDAL ) PORT_MINMAX(60,180) PORT_SENSITIVITY(100) PORT_KEYDELTA(10)
989989
990   PORT_START("SSIO.IP3")   /* DIPSW @ B3 */
990   PORT_START("ssio:IP3")   /* DIPSW @ B3 */
991991   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
992992   PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) )
993993   PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
r14963r14964
996996   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
997997   PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
998998
999   PORT_START("SSIO.IP4")   /* J6 1-8 */
999   PORT_START("ssio:IP4")   /* J6 1-8 */
10001000   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
10011001
1002   PORT_START("SSIO.DIP")
1002   PORT_START("ssio:DIP")
10031003   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
10041004
1005   PORT_START("SSIO.IP2.ALT")
1005   PORT_START("ssio:IP2.ALT")
10061006   PORT_BIT( 0xff, 0x60, IPT_PADDLE ) PORT_SENSITIVITY(40) PORT_KEYDELTA(10)
10071007INPUT_PORTS_END
10081008
r14963r14964
10891089   MCFG_MACHINE_START(mcr)
10901090   MCFG_MACHINE_RESET(mcr)
10911091   MCFG_NVRAM_ADD_0FILL("nvram")
1092   
1093   // sound hardware
1094   MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
10921095
10931096   /* video hardware */
10941097   MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
r14963r14964
11141117static MACHINE_CONFIG_DERIVED( mono_tcs, mcrmono )
11151118
11161119   /* basic machine hardware */
1117   MCFG_FRAGMENT_ADD(turbo_chip_squeak)
1120   MCFG_MIDWAY_TURBO_CHIP_SQUEAK_ADD("tcs")
1121   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
1122   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
11181123MACHINE_CONFIG_END
11191124
11201125
r14963r14964
11221127static MACHINE_CONFIG_DERIVED( mono_sg, mcrmono )
11231128
11241129   /* basic machine hardware */
1125   MCFG_FRAGMENT_ADD(sounds_good)
1130   MCFG_MIDWAY_SOUNDS_GOOD_ADD("sg")
1131   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
1132   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
11261133MACHINE_CONFIG_END
11271134
11281135
r14963r14964
11331140static MACHINE_CONFIG_DERIVED( mcrscroll, mcrmono )
11341141
11351142   /* basic machine hardware */
1136   MCFG_FRAGMENT_ADD(mcr_ssio)
1143   MCFG_MIDWAY_SSIO_ADD("ssio")
1144   MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
1145   MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
11371146
11381147   MCFG_CPU_MODIFY("maincpu")
11391148   MCFG_CPU_PROGRAM_MAP(spyhunt_map)
r14963r14964
11561165static MACHINE_CONFIG_DERIVED( mcrsc_csd, mcrscroll )
11571166
11581167   /* basic machine hardware */
1159   MCFG_FRAGMENT_ADD(chip_squeak_deluxe_stereo)
1168   MCFG_MIDWAY_CHIP_SQUEAK_DELUXE_ADD("csd")
1169   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
1170   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
11601171MACHINE_CONFIG_END
11611172
11621173
r14963r14964
11731184   ROM_LOAD( "pro1.5b",      0x08000, 0x8000, CRC(034c00fc) SHA1(0f0e8f123a34c330021bce76ed7f38bcb2e9af4e) )
11741185   ROM_FILL(                 0x0e000, 0x2000, 0xff )   /* upper 8k is not mapped on monoboard */
11751186
1176   ROM_REGION( 0x10000, "tcscpu", 0 )   /* 64k for the Turbo Cheap Squeak */
1187   ROM_REGION( 0x10000, "tcs:cpu", 0 )   /* 64k for the Turbo Cheap Squeak */
11771188   ROM_LOAD( "tcs_u5.bin",   0x0c000, 0x2000, CRC(eca33b2c) SHA1(938b021ea3b0f23aed7a98a930a58af371a02303) )
11781189   ROM_LOAD( "tcs_u4.bin",   0x0e000, 0x2000, CRC(3490289a) SHA1(a9d56ea60bb901267da41ab408f8e1ed3742b0ac) )
11791190
r14963r14964
11991210   ROM_LOAD( "cpu_5b.bin",   0x08000, 0x8000, CRC(6800e746) SHA1(018c2b622b3654530ebc2c299b3f745777163d4b) )
12001211   ROM_FILL(                 0x0e000, 0x2000, 0xff )   /* upper 8k is not mapped on monoboard */
12011212
1202   ROM_REGION( 0x10000, "tcscpu", 0 )  /* 64k for the Turbo Cheap Squeak */
1213   ROM_REGION( 0x10000, "tcs:cpu", 0 )  /* 64k for the Turbo Cheap Squeak */
12031214   ROM_LOAD( "tcs_u5.bin",   0xc000, 0x2000, CRC(a894ef8a) SHA1(7f53927fc185fff8ba1b1747f0d565e089d879e6) )
12041215   ROM_LOAD( "tcs_u4.bin",   0xe000, 0x2000, CRC(6ca6faf3) SHA1(4647e633dd11f55a65c3acf81adeb3af93624991) )
12051216
r14963r14964
12301241   ROM_LOAD( "pro.1",        0x08000, 0x8000, CRC(f628bb30) SHA1(0514906b9764a7f02a730a610affea4d42a4510d) )
12311242   ROM_FILL(                 0x0e000, 0x2000, 0xff )   /* upper 8k is not mapped on monoboard */
12321243
1233   ROM_REGION( 0x10000, "tcscpu", 0 )  /* 64k for the Turbo Cheap Squeak */
1244   ROM_REGION( 0x10000, "tcs:cpu", 0 )  /* 64k for the Turbo Cheap Squeak */
12341245   ROM_LOAD( "turbskwk.u5",   0x8000, 0x4000, CRC(55c3b759) SHA1(89d690a007a996e9c7df7b365942e4da755d15d7) )
12351246   ROM_LOAD( "turbskwk.u4",   0xc000, 0x4000, CRC(31a2da2e) SHA1(582434b5d6bc8e84f39191976d8aa0ef9245f253) )
12361247
r14963r14964
12521263   ROM_LOAD( "pro1rev3.5b",  0x08000, 0x8000, CRC(d89bd9a4) SHA1(3531464ffe49dfaf2755d9e2dc1aea23819b3a5d) )
12531264   ROM_FILL(                 0x0e000, 0x2000, 0xff )   /* upper 8k is not mapped on monoboard */
12541265
1255   ROM_REGION( 0x40000, "sgcpu", 0 )  /* 256k for the Sounds Good board */
1266   ROM_REGION( 0x40000, "sg:cpu", 0 )  /* 256k for the Sounds Good board */
12561267   ROM_LOAD16_BYTE( "ramp_u7.snd",  0x00000, 0x8000, CRC(cffd7fa5) SHA1(7c5cecce1d428f847fea37d53eb09c6f62055c6f) )   /* these are Revision 2 sound ROMs */
12571268   ROM_LOAD16_BYTE( "ramp_u17.snd", 0x00001, 0x8000, CRC(e92c596b) SHA1(4e2d87398f2e7b637cbad6cb16d832dfa8f8288c) )
12581269   ROM_LOAD16_BYTE( "ramp_u8.snd",  0x10000, 0x8000, CRC(11f787e4) SHA1(1fa195bf9169608099d17be5801738a4e17bec3d) )
r14963r14964
12761287   ROM_LOAD( "pro1rev2.5b",  0x08000, 0x8000, CRC(58523d75) SHA1(5cd512864568ec7793bda0164f21e7d72a7ea817) )
12771288   ROM_FILL(                 0x0e000, 0x2000, 0xff )   /* upper 8k is not mapped on monoboard */
12781289
1279   ROM_REGION( 0x40000, "sgcpu", 0 )  /* 256k for the Sounds Good board */
1290   ROM_REGION( 0x40000, "sg:cpu", 0 )  /* 256k for the Sounds Good board */
12801291   ROM_LOAD16_BYTE( "ramp_u7.snd",  0x00000, 0x8000, CRC(cffd7fa5) SHA1(7c5cecce1d428f847fea37d53eb09c6f62055c6f) )    /* these are Revision 2 sound ROMs */
12811292   ROM_LOAD16_BYTE( "ramp_u17.snd", 0x00001, 0x8000, CRC(e92c596b) SHA1(4e2d87398f2e7b637cbad6cb16d832dfa8f8288c) )
12821293   ROM_LOAD16_BYTE( "ramp_u8.snd",  0x10000, 0x8000, CRC(11f787e4) SHA1(1fa195bf9169608099d17be5801738a4e17bec3d) )
r14963r14964
13001311   ROM_LOAD( "pdrv5b.bin",   0x08000, 0x8000, CRC(fa0544ad) SHA1(55a9cf8c8648761443e4a5a3b214f4d6236cbaff) )
13011312   ROM_FILL(                 0x0e000, 0x2000, 0xff )   /* upper 8k is not mapped on monoboard */
13021313
1303   ROM_REGION( 0x40000, "sgcpu", 0 )  /* 256k for the Sounds Good board */
1314   ROM_REGION( 0x40000, "sg:cpu", 0 )  /* 256k for the Sounds Good board */
13041315   ROM_LOAD16_BYTE( "pdsndu7.bin",  0x00000, 0x8000, CRC(78713e78) SHA1(11382c024536f743e051ba208ae02d0f5e07cf5e) )
13051316   ROM_LOAD16_BYTE( "pdsndu17.bin", 0x00001, 0x8000, CRC(c41de6e4) SHA1(0391afd96ee80dd1d4a34e661e5df1e01fbbd57a) )
13061317   ROM_LOAD16_BYTE( "pdsndu8.bin",  0x10000, 0x8000, CRC(15714036) SHA1(77ca5f703eb7f146e13d9c01f4427f6aaa31df39) )
r14963r14964
13241335   ROM_LOAD( "pro-1.5b",  0x08000, 0x8000, CRC(dba428b0) SHA1(72efa2f02e95f05a5503ced136fbdf3fcdf57554) )
13251336   ROM_FILL(              0x0e000, 0x2000, 0xff )   /* upper 8k is not mapped on monoboard */
13261337
1327   ROM_REGION( 0x40000, "sgcpu", 0 )  /* 256k for the Sounds Good board */
1338   ROM_REGION( 0x40000, "sg:cpu", 0 )  /* 256k for the Sounds Good board */
13281339   ROM_LOAD16_BYTE( "snd0.u7",      0x00000, 0x8000, CRC(7755a493) SHA1(a888fba45a2a31de5b3082bfc5ccef94dafc4d16) )
13291340   ROM_LOAD16_BYTE( "snd1.u17",     0x00001, 0x8000, CRC(d98d14ae) SHA1(51dbb97655ab8a389ca67f0e796ab57894f5bb32) )
13301341
r14963r14964
13491360   ROM_LOAD( "cpu_pg4.10d",  0x8000, 0x2000, CRC(a3033c15) SHA1(e9811450a7c952561912777d679fe45a6b5a794a) )
13501361   ROM_LOAD( "cpu_pg5.11d",  0xa000, 0x4000, CRC(53a4f7cd) SHA1(051b07ae993e14b329507710c0f7cadaa952f9ae) )
13511362
1352   ROM_REGION( 0x10000, "ssiocpu", 0 )
1363   ROM_REGION( 0x10000, "ssio:cpu", 0 )
13531364   ROM_LOAD( "snd_0sd.a8",   0x0000, 0x1000, CRC(c95cf31e) SHA1(d1b0e299a27e306ddbc0654fd3a9d981c92afe8c) )
13541365   ROM_LOAD( "snd_1sd.a7",   0x1000, 0x1000, CRC(12aaa48e) SHA1(c6b835fc45e4484a4d52b682ce015caa242c8b4f) )
13551366
1356   ROM_REGION( 0x8000, "csdcpu", 0 )  /* 32k for the Chip Squeak Deluxe */
1367   ROM_REGION( 0x8000, "csd:cpu", 0 )  /* 32k for the Chip Squeak Deluxe */
13571368   ROM_LOAD16_BYTE( "csd_u7a.u7",   0x00000, 0x2000, CRC(6e689fe7) SHA1(38ad2e9f12b9d389fb2568ebcb32c8bd1ac6879e) )
13581369   ROM_LOAD16_BYTE( "csd_u17b.u17", 0x00001, 0x2000, CRC(0d9ddce6) SHA1(d955c0e67fc78b517cc229601ab4023cc5a644c2) )
13591370   ROM_LOAD16_BYTE( "csd_u8c.u8",   0x04000, 0x2000, CRC(35563cd0) SHA1(5708d374dd56758194c95118f096ea51bf12bf64) )
r14963r14964
13921403   ROM_LOAD( "sh_mb_6.bin",  0x8000, 0x2000, CRC(8cbf04d8) SHA1(e45cb36935367e46ea41de0177b3453cd8bdce85) )
13931404   ROM_LOAD( "cpu_pg5.11d",  0xa000, 0x4000, CRC(53a4f7cd) SHA1(051b07ae993e14b329507710c0f7cadaa952f9ae) )
13941405
1395   ROM_REGION( 0x10000, "ssiocpu", 0 )
1406   ROM_REGION( 0x10000, "ssio:cpu", 0 )
13961407   ROM_LOAD( "snd_0sd.a8",   0x0000, 0x1000, CRC(c95cf31e) SHA1(d1b0e299a27e306ddbc0654fd3a9d981c92afe8c) )
13971408   ROM_LOAD( "snd_1sd.a7",   0x1000, 0x1000, CRC(12aaa48e) SHA1(c6b835fc45e4484a4d52b682ce015caa242c8b4f) )
13981409
1399   ROM_REGION( 0x8000, "csdcpu", 0 )  /* 32k for the Chip Squeak Deluxe */
1410   ROM_REGION( 0x8000, "csd:cpu", 0 )  /* 32k for the Chip Squeak Deluxe */
14001411   ROM_LOAD16_BYTE( "csd_u7a.u7",   0x00000, 0x2000, CRC(6e689fe7) SHA1(38ad2e9f12b9d389fb2568ebcb32c8bd1ac6879e) )
14011412   ROM_LOAD16_BYTE( "csd_u17b.u17", 0x00001, 0x2000, CRC(0d9ddce6) SHA1(d955c0e67fc78b517cc229601ab4023cc5a644c2) )
14021413   ROM_LOAD16_BYTE( "csd_u8c.u8",   0x04000, 0x2000, CRC(35563cd0) SHA1(5708d374dd56758194c95118f096ea51bf12bf64) )
r14963r14964
14341445   ROM_LOAD( "crcpu.9d",     0x6000, 0x2000, CRC(a03c4b11) SHA1(6a442a0828942dc51dbe0d3f19be855a52c12f39) )
14351446   ROM_LOAD( "crcpu.10d",    0x8000, 0x2000, CRC(44ae4cbd) SHA1(2188bf697f1b3fcbb2ad6cbd4d9098e3b8d56a95) )
14361447
1437   ROM_REGION( 0x10000, "ssiocpu", 0 )
1448   ROM_REGION( 0x10000, "ssio:cpu", 0 )
14381449   ROM_LOAD( "crsnd4.a7",    0x0000, 0x1000, CRC(fd666cb5) SHA1(257174266e264db8ac9af5f2296fd0a22847f85f) )
14391450   ROM_LOAD( "crsnd1.a8",    0x1000, 0x1000, CRC(90bf2c4c) SHA1(7adfbf2251b5d46043d614554320e2fe544cc570) )
14401451   ROM_LOAD( "crsnd2.a9",    0x2000, 0x1000, CRC(3b8deef1) SHA1(a14186a33a7b5ca07086ce44fb1c8c64900654d0) )
r14963r14964
14741485   ROM_LOAD( "ttprog5.bin",  0xa000, 0x2000, CRC(11e62fe4) SHA1(72897702c61486b654e4b4a3f6560c144c862e1f) )
14751486   ROM_RELOAD(               0xc000, 0x2000 )
14761487
1477   ROM_REGION( 0x10000, "ssiocpu", ROMREGION_ERASE00 )
1488   ROM_REGION( 0x10000, "ssio:cpu", ROMREGION_ERASE00 )
14781489
1479   ROM_REGION( 0x8000, "csdcpu", 0 )  /* 32k for the Chip Squeak Deluxe */
1490   ROM_REGION( 0x8000, "csd:cpu", 0 )  /* 32k for the Chip Squeak Deluxe */
14801491   ROM_LOAD16_BYTE( "ttu7.bin",  0x00000, 0x2000, CRC(8ebb3302) SHA1(c516abdae6eea524a6d2a039ed9bd7dff72ab986) )
14811492   ROM_LOAD16_BYTE( "ttu17.bin", 0x00001, 0x2000, CRC(605d6c74) SHA1(a6c2bc95cca372fa823ab256c9dd1f92b6ba45fd) )
14821493   ROM_LOAD16_BYTE( "ttu8.bin",  0x04000, 0x2000, CRC(6bfcb22a) SHA1(7b895e3ae1e99f195bb32b052f801b58c63a401c) )
r14963r14964
15131524 *
15141525 *************************************/
15151526
1516static void mcr_common_init(running_machine &machine, int sound_board)
1527static void mcr_common_init(running_machine &machine)
15171528{
15181529   mcr3_state *state = machine.driver_data<mcr3_state>();
1519   mcr_sound_init(machine, sound_board);
15201530
15211531   state_save_register_global(machine, state->m_input_mux);
15221532   state_save_register_global(machine, state->m_latched_input);
r14963r14964
15261536
15271537static DRIVER_INIT( demoderm )
15281538{
1529   mcr_common_init(machine, MCR_TURBO_CHIP_SQUEAK);
1539   mcr_common_init(machine);
15301540   mcr3_state *state = machine.driver_data<mcr3_state>();
15311541   machine.device("maincpu")->memory().space(AS_IO)->install_read_handler(0x01, 0x01, read8_delegate(FUNC(mcr3_state::demoderm_ip1_r),state));
15321542   machine.device("maincpu")->memory().space(AS_IO)->install_read_handler(0x02, 0x02, read8_delegate(FUNC(mcr3_state::demoderm_ip2_r),state));
r14963r14964
15371547static DRIVER_INIT( sarge )
15381548{
15391549   mcr3_state *state = machine.driver_data<mcr3_state>();
1540   mcr_common_init(machine, MCR_TURBO_CHIP_SQUEAK);
1541   machine.device("maincpu")->memory().space(AS_IO)->install_write_handler(0x06, 0x06, write8_delegate(FUNC(mcr3_state::turbocs_data_w),state));
1550   mcr_common_init(machine);
1551   machine.device("maincpu")->memory().space(AS_IO)->install_write_handler(0x06, 0x06, write8_delegate(FUNC(midway_turbo_chip_squeak_device::write),state->m_turbo_chip_squeak.target()));
15421552}
15431553
15441554
15451555static DRIVER_INIT( maxrpm )
15461556{
15471557   mcr3_state *state = machine.driver_data<mcr3_state>();
1548   mcr_common_init(machine, MCR_TURBO_CHIP_SQUEAK);
1558   mcr_common_init(machine);
15491559   machine.device("maincpu")->memory().space(AS_IO)->install_read_handler(0x01, 0x01, read8_delegate(FUNC(mcr3_state::maxrpm_ip1_r),state));
15501560   machine.device("maincpu")->memory().space(AS_IO)->install_read_handler(0x02, 0x02, read8_delegate(FUNC(mcr3_state::maxrpm_ip2_r),state));
15511561   machine.device("maincpu")->memory().space(AS_IO)->install_write_handler(0x05, 0x05, write8_delegate(FUNC(mcr3_state::maxrpm_op5_w),state));
r14963r14964
15621572static DRIVER_INIT( rampage )
15631573{
15641574   mcr3_state *state = machine.driver_data<mcr3_state>();
1565   mcr_common_init(machine, MCR_SOUNDS_GOOD);
1575   mcr_common_init(machine);
15661576   machine.device("maincpu")->memory().space(AS_IO)->install_read_handler(0x04, 0x04, read8_delegate(FUNC(mcr3_state::rampage_ip4_r),state));
15671577   machine.device("maincpu")->memory().space(AS_IO)->install_write_handler(0x06, 0x06, write8_delegate(FUNC(mcr3_state::rampage_op6_w),state));
15681578}
r14963r14964
15711581static DRIVER_INIT( powerdrv )
15721582{
15731583   mcr3_state *state = machine.driver_data<mcr3_state>();
1574   mcr_common_init(machine, MCR_SOUNDS_GOOD);
1584   mcr_common_init(machine);
15751585   machine.device("maincpu")->memory().space(AS_IO)->install_read_handler(0x02, 0x02, read8_delegate(FUNC(mcr3_state::powerdrv_ip2_r),state));
15761586   machine.device("maincpu")->memory().space(AS_IO)->install_write_handler(0x05, 0x05, write8_delegate(FUNC(mcr3_state::powerdrv_op5_w),state));
15771587   machine.device("maincpu")->memory().space(AS_IO)->install_write_handler(0x06, 0x06, write8_delegate(FUNC(mcr3_state::powerdrv_op6_w),state));
r14963r14964
15811591static DRIVER_INIT( stargrds )
15821592{
15831593   mcr3_state *state = machine.driver_data<mcr3_state>();
1584   mcr_common_init(machine, MCR_SOUNDS_GOOD);
1594   mcr_common_init(machine);
15851595   machine.device("maincpu")->memory().space(AS_IO)->install_read_handler(0x00, 0x00, read8_delegate(FUNC(mcr3_state::stargrds_ip0_r),state));
15861596   machine.device("maincpu")->memory().space(AS_IO)->install_write_handler(0x05, 0x05, write8_delegate(FUNC(mcr3_state::stargrds_op5_w),state));
15871597   machine.device("maincpu")->memory().space(AS_IO)->install_write_handler(0x06, 0x06, write8_delegate(FUNC(mcr3_state::stargrds_op6_w),state));
r14963r14964
15911601static DRIVER_INIT( spyhunt )
15921602{
15931603   mcr3_state *state = machine.driver_data<mcr3_state>();
1594   mcr_common_init(machine, MCR_SSIO | MCR_CHIP_SQUEAK_DELUXE);
1595   ssio_set_custom_input(1, 0x60, read8_delegate(FUNC(mcr3_state::spyhunt_ip1_r),state));
1596   ssio_set_custom_input(2, 0xff, read8_delegate(FUNC(mcr3_state::spyhunt_ip2_r),state));
1597   ssio_set_custom_output(4, 0xff, write8_delegate(FUNC(mcr3_state::spyhunt_op4_w),state));
1604   mcr_common_init(machine);
1605   machine.device<midway_ssio_device>("ssio")->set_custom_input(1, 0x60, read8_delegate(FUNC(mcr3_state::spyhunt_ip1_r),state));
1606   machine.device<midway_ssio_device>("ssio")->set_custom_input(2, 0xff, read8_delegate(FUNC(mcr3_state::spyhunt_ip2_r),state));
1607   machine.device<midway_ssio_device>("ssio")->set_custom_output(4, 0xff, write8_delegate(FUNC(mcr3_state::spyhunt_op4_w),state));
15981608
15991609   state->m_spyhunt_sprite_color_mask = 0x00;
16001610   state->m_spyhunt_scroll_offset = 16;
r14963r14964
16041614static DRIVER_INIT( crater )
16051615{
16061616   mcr3_state *state = machine.driver_data<mcr3_state>();
1607   mcr_common_init(machine, MCR_SSIO);
1617   mcr_common_init(machine);
16081618
16091619   state->m_spyhunt_sprite_color_mask = 0x03;
16101620   state->m_spyhunt_scroll_offset = 96;
r14963r14964
16141624static DRIVER_INIT( turbotag )
16151625{
16161626   mcr3_state *state = machine.driver_data<mcr3_state>();
1617   mcr_common_init(machine, MCR_SSIO | MCR_CHIP_SQUEAK_DELUXE);
1618   ssio_set_custom_input(1, 0x60, read8_delegate(FUNC(mcr3_state::spyhunt_ip1_r),state));
1619   ssio_set_custom_input(2, 0xff, read8_delegate(FUNC(mcr3_state::turbotag_ip2_r),state));
1620   ssio_set_custom_output(4, 0xff, write8_delegate(FUNC(mcr3_state::spyhunt_op4_w),state));
1627   mcr_common_init(machine);
1628   machine.device<midway_ssio_device>("ssio")->set_custom_input(1, 0x60, read8_delegate(FUNC(mcr3_state::spyhunt_ip1_r),state));
1629   machine.device<midway_ssio_device>("ssio")->set_custom_input(2, 0xff, read8_delegate(FUNC(mcr3_state::turbotag_ip2_r),state));
1630   machine.device<midway_ssio_device>("ssio")->set_custom_output(4, 0xff, write8_delegate(FUNC(mcr3_state::spyhunt_op4_w),state));
16211631
16221632   state->m_spyhunt_sprite_color_mask = 0x00;
16231633   state->m_spyhunt_scroll_offset = 88;
16241634
16251635   /* the SSIO Z80 doesn't have any program to execute */
1626   machine.device<cpu_device>("csdcpu")->suspend(SUSPEND_REASON_DISABLE, 1);
1636   machine.device<cpu_device>("csd:cpu")->suspend(SUSPEND_REASON_DISABLE, 1);
16271637
16281638   /* kludge for bad ROM read */
16291639   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x0b53, 0x0b53, read8_delegate(FUNC(mcr3_state::turbotag_kludge_r),state));
src/mame/drivers/wwfsstar.c
r14963r14964
414414
415415static const ym2151_interface ym2151_config =
416416{
417   wwfsstar_ymirq_handler
417   DEVCB_LINE(wwfsstar_ymirq_handler)
418418};
419419
420420/*******************************************************************************
src/mame/drivers/vaportra.c
r14963r14964
207207
208208static const ym2151_interface ym2151_config =
209209{
210   sound_irq
210   DEVCB_LINE(sound_irq)
211211};
212212
213213
src/mame/drivers/nova2001.c
r14963r14964
203203   AM_RANGE(0xa003, 0xa003) AM_WRITE(pkunwar_flipscreen_w)
204204   AM_RANGE(0xc000, 0xc7ff) AM_RAM_WRITE(nova2001_fg_videoram_w) AM_SHARE("fg_videoram")
205205   AM_RANGE(0xc800, 0xcfff) AM_READWRITE(ninjakun_bg_videoram_r, ninjakun_bg_videoram_w) AM_SHARE("bg_videoram")
206   AM_RANGE(0xd000, 0xd7ff) AM_RAM AM_SHARE("spriteram") AM_SHARE("share3")
206   AM_RANGE(0xd000, 0xd7ff) AM_RAM AM_SHARE("spriteram")
207207   AM_RANGE(0xd800, 0xd9ff) AM_RAM_WRITE(ninjakun_paletteram_w) AM_SHARE("paletteram")
208208   AM_RANGE(0xe000, 0xe3ff) AM_RAM AM_SHARE("share5")
209209   AM_RANGE(0xe400, 0xe7ff) AM_RAM AM_SHARE("share6")
src/mame/drivers/photon2.c
r14963r14964
1919   photon2_state(const machine_config &mconfig, device_type type, const char *tag)
2020      : driver_device(mconfig, type, tag),
2121      m_maincpu(*this,"maincpu"),
22      m_spectrum_video_ram(*this, "spectruvideo_ram"){ }
22      m_spectrum_video_ram(*this, "spectrum_vram"){ }
2323
2424   required_device<cpu_device> m_maincpu;
25   optional_shared_ptr<UINT8> m_spectrum_video_ram;
25   required_shared_ptr<UINT8> m_spectrum_video_ram;
2626   int m_spectrum_frame_number;
2727   int m_spectrum_flash_invert;
2828   UINT8 m_spectrum_port_fe;
src/mame/drivers/igs017.c
r14963r14964
5656      : driver_device(mconfig, type, tag),
5757      m_input_addr(-1),
5858      m_maincpu(*this, "maincpu"),
59      m_spriteram(*this, "spriteram"),
60      m_fg_videoram(*this, "fg_videoram"),
61      m_bg_videoram(*this, "bg_videoram"){ }
59      m_spriteram(*this, "spriteram", 0),
60      m_fg_videoram(*this, "fg_videoram", 0),
61      m_bg_videoram(*this, "bg_videoram", 0){ }
6262
6363   int m_input_addr;
6464   required_device<cpu_device> m_maincpu;
src/mame/drivers/mjkjidai.c
r14963r14964
2424#include "emu.h"
2525#include "cpu/z80/z80.h"
2626#include "sound/sn76496.h"
27#include "sound/okim6295.h"
27#include "sound/okiadpcm.h"
2828#include "includes/mjkjidai.h"
2929
3030/* Start of ADPCM custom chip code */
3131typedef struct _mjkjidai_adpcm_state mjkjidai_adpcm_state;
3232struct _mjkjidai_adpcm_state
3333{
34   adpcm_state m_adpcm;
34   oki_adpcm_state m_adpcm;
3535   sound_stream *m_stream;
3636   UINT32 m_current;
3737   UINT32 m_end;
src/mame/drivers/aquarium.c
r14963r14964
296296
297297static const ym2151_interface ym2151_config =
298298{
299   irq_handler
299   DEVCB_LINE(irq_handler)
300300};
301301
302302
src/mame/drivers/metro.c
r14963r14964
532532
533533static const ym2151_interface ym2151_config =
534534{
535   metro_sound_irq_handler   /* irq handler */
535   DEVCB_LINE(metro_sound_irq_handler)   /* irq handler */
536536};
537537
538538
src/mame/drivers/surpratk.c
r14963r14964
166166
167167static const ym2151_interface ym2151_config =
168168{
169   irqhandler
169   DEVCB_LINE(irqhandler)
170170};
171171
172172
src/mame/drivers/atarisy2.c
r14963r14964
208208 *
209209 *************************************/
210210
211DIRECT_UPDATE_HANDLER( atarisy2_direct_handler )
211DIRECT_UPDATE_MEMBER( atarisy2_state::atarisy2_direct_handler )
212212{
213213   /* make sure slapstic area looks like ROM */
214214   if (address >= 0x8000 && address < 0x8200)
215215   {
216      atarisy2_state *state = machine.driver_data<atarisy2_state>();
217      direct.explicit_configure(0x8000, 0x81ff, 0x1ff, reinterpret_cast<UINT8 *>(state->m_slapstic_base.target()));
216      direct.explicit_configure(0x8000, 0x81ff, 0x1ff, reinterpret_cast<UINT8 *>(m_slapstic_base.target()));
218217      return ~0;
219218   }
220219   return address;
r14963r14964
246245   atarigen_scanline_timer_reset(*machine.primary_screen, scanline_update, 64);
247246
248247   address_space *main = machine.device<t11_device>("maincpu")->space(AS_PROGRAM);
249   main->set_direct_update_handler(direct_update_delegate(FUNC(atarisy2_direct_handler), &machine));
248   main->set_direct_update_handler(direct_update_delegate(FUNC(atarisy2_state::atarisy2_direct_handler), state));
250249
251250   state->m_p2portwr_state = 0;
252251   state->m_p2portrd_state = 0;
src/mame/drivers/seta.c
r14963r14964
1065310653   RAM[0x1078/2] = 0x4e71;
1065410654
1065510655   // fixed priorities?
10656   //TODO:FIX
10657   //state->m_vregs = auto_alloc_array_clear(machine, UINT16, 3);
10656   seta_state *state = machine.driver_data<seta_state>();
10657   state->m_vregs.allocate(3);
1065810658
1065910659   DRIVER_INIT_CALL(blandia);
1066010660}
r14963r14964
1066910669   UINT16 *ROM = (UINT16 *)machine.region( "maincpu" )->base();
1067010670
1067110671   // missing / unused video regs
10672   //TODO:FIX
10673   //state->m_vregs = auto_alloc_array_clear(machine, UINT16, 3);
10672   seta_state *state = machine.driver_data<seta_state>();
10673   state->m_vregs.allocate(3);
1067410674
1067510675   // code patches (to be removed...)
1067610676   ROM[0x4de0/2] = 0x4e71;   // hardware test errors
r14963r14964
1068510685   //UINT16 *ROM = (UINT16 *)machine.region( "maincpu" )->base();
1068610686
1068710687   // missing / unused video regs
10688   //TODO:FIX
10689   //state->m_vregs = auto_alloc_array_clear(machine, UINT16, 3);
10688   seta_state *state = machine.driver_data<seta_state>();
10689   state->m_vregs.allocate(3);
1069010690
1069110691   // code patches (to be removed...)
1069210692   //ROM[0x4de0/2] = 0x4e71;   // hardware test errors
src/mame/drivers/vball.c
r14963r14964
401401
402402static const ym2151_interface ym2151_config =
403403{
404   vball_irq_handler
404   DEVCB_LINE(vball_irq_handler)
405405};
406406
407407
src/mame/drivers/namcos1.c
r14963r14964
10631063
10641064static const ym2151_interface ym2151_config =
10651065{
1066   namcos1_sound_interrupt
1066   DEVCB_LINE(namcos1_sound_interrupt)
10671067};
10681068
10691069static const namco_interface namco_config =
src/mame/drivers/renegade.c
r14963r14964
105105#include "cpu/m6809/m6809.h"
106106#include "cpu/m6805/m6805.h"
107107#include "sound/3526intf.h"
108#include "sound/okim6295.h"
108#include "sound/okiadpcm.h"
109109#include "includes/renegade.h"
110110
111111
r14963r14964
114114typedef struct _renegade_adpcm_state renegade_adpcm_state;
115115struct _renegade_adpcm_state
116116{
117   adpcm_state m_adpcm;
117   oki_adpcm_state m_adpcm;
118118   sound_stream *m_stream;
119119   UINT32 m_current;
120120   UINT32 m_end;
src/mame/drivers/cninja.c
r14963r14964
731731
732732static const ym2151_interface ym2151_config =
733733{
734   sound_irq,
735   sound_bankswitch_w
734   DEVCB_LINE(sound_irq),
735   DEVCB_HANDLER(sound_bankswitch_w)
736736};
737737
738738static const ym2151_interface ym2151_interface2 =
739739{
740   sound_irq2
740   DEVCB_LINE(sound_irq2)
741741};
742742
743743/**********************************************************************************/
src/mame/drivers/missile.c
r14963r14964
371371   DECLARE_WRITE8_MEMBER(missile_w);
372372   DECLARE_READ8_MEMBER(missile_r);
373373   DECLARE_CUSTOM_INPUT_MEMBER(get_vblank);
374   DECLARE_DIRECT_UPDATE_MEMBER(missile_direct_handler);
374375};
375376
376377
r14963r14964
484485}
485486
486487
487DIRECT_UPDATE_HANDLER( missile_direct_handler )
488DIRECT_UPDATE_MEMBER(missile_state::missile_direct_handler)
488489{
489490   /* offset accounts for lack of A15 decoding */
490491   int offset = address & 0x8000;
r14963r14964
493494   /* RAM? */
494495   if (address < 0x4000)
495496   {
496      missile_state *state = direct.space().machine().driver_data<missile_state>();
497      direct.explicit_configure(0x0000 | offset, 0x3fff | offset, 0x3fff, state->m_videoram);
497      direct.explicit_configure(0x0000 | offset, 0x3fff | offset, 0x3fff, m_videoram);
498498      return ~0;
499499   }
500500
r14963r14964
519519
520520   /* set up an opcode base handler since we use mapped handlers for RAM */
521521   address_space *space = machine.device<m6502_device>("maincpu")->space(AS_PROGRAM);
522   space->set_direct_update_handler(direct_update_delegate(FUNC(missile_direct_handler), &machine));
522   space->set_direct_update_handler(direct_update_delegate(FUNC(missile_state::missile_direct_handler), state));
523523
524524   /* create a timer to speed/slow the CPU */
525525   state->m_cpu_timer = machine.scheduler().timer_alloc(FUNC(adjust_cpu_speed));
src/mame/drivers/vigilant.c
r14963r14964
463463
464464static const ym2151_interface ym2151_config =
465465{
466   m72_ym2151_irq_handler
466   DEVCB_LINE(m72_ym2151_irq_handler)
467467};
468468
469469static const ym2203_interface ym2203_config =
src/mame/drivers/subsino2.c
r14963r14964
8181      : driver_device(mconfig, type, tag) ,
8282      m_outputs16(*this, "outputs16"),
8383      m_outputs(*this, "outputs"),
84      m_am188em_regs(*this, "am188eregs"){ }
84      m_am188em_regs(*this, "am188em_regs"){ }
8585
8686   UINT8 *m_hm86171_colorram;
8787   layer_t m_layers[2];
r14963r14964
9494   UINT8 m_ss9601_disable;
9595   int m_hm86171_offs;
9696   UINT8 m_dsw_mask;
97   required_shared_ptr<UINT16> m_outputs16;
97   optional_shared_ptr<UINT16> m_outputs16;
9898   optional_shared_ptr<UINT8> m_outputs;
99   optional_shared_ptr<UINT8> m_am188em_regs;
99   required_shared_ptr<UINT8> m_am188em_regs;
100100   UINT16 m_bishjan_sel;
101101   UINT16 m_bishjan_input;
102102   DECLARE_WRITE8_MEMBER(ss9601_byte_lo_w);
src/mame/drivers/dassault.c
r14963r14964
518518
519519static const ym2151_interface ym2151_config =
520520{
521   sound_irq,
522   sound_bankswitch_w
521   DEVCB_LINE(sound_irq),
522   DEVCB_HANDLER(sound_bankswitch_w)
523523};
524524
525525/**********************************************************************************/
src/mame/drivers/tatsumi.c
r14963r14964
846846
847847static const ym2151_interface ym2151_config =
848848{
849   sound_irq
849   DEVCB_LINE(sound_irq)
850850};
851851
852852static INTERRUPT_GEN( roundup5_interrupt )
src/mame/drivers/supbtime.c
r14963r14964
316316
317317static const ym2151_interface ym2151_config =
318318{
319   sound_irq
319   DEVCB_LINE(sound_irq)
320320};
321321
322322static const deco16ic_interface supbtime_deco16ic_tilegen1_intf =
src/mame/drivers/m72.c
r14963r14964
18251825
18261826static const ym2151_interface ym2151_config =
18271827{
1828   m72_ym2151_irq_handler
1828   DEVCB_LINE(m72_ym2151_irq_handler)
18291829};
18301830
18311831
src/mame/drivers/topspeed.c
r14963r14964
621621
622622static const ym2151_interface ym2151_config =
623623{
624   irq_handler,
625   sound_bankswitch_w
624   DEVCB_LINE(irq_handler),
625   DEVCB_HANDLER(sound_bankswitch_w)
626626};
627627
628628static const msm5205_interface msm5205_config =
src/mame/drivers/amspdwy.c
r14963r14964
246246
247247static const ym2151_interface amspdwy_ym2151_interface =
248248{
249   irq_handler
249   DEVCB_LINE(irq_handler)
250250};
251251
252252static MACHINE_START( amspdwy )
src/mame/drivers/fantland.c
r14963r14964
893893
894894static const ym2151_interface galaxygn_ym2151_interface =
895895{
896   galaxygn_sound_irq
896   DEVCB_LINE(galaxygn_sound_irq)
897897};
898898
899899static MACHINE_CONFIG_START( galaxygn, fantland_state )
src/mame/drivers/tumbleb.c
r14963r14964
22192219
22202220static const ym2151_interface semicom_ym2151_interface =
22212221{
2222   semicom_irqhandler
2222   DEVCB_LINE(semicom_irqhandler)
22232223};
22242224
22252225static MACHINE_RESET (htchctch)
src/mame/drivers/m90.c
r14963r14964
669669
670670static const ym2151_interface ym2151_config =
671671{
672   m72_ym2151_irq_handler
672   DEVCB_LINE(m72_ym2151_irq_handler)
673673};
674674
675675/* this bootleg polls the YM2151 instead of taking interrupts from it */
676676static const ym2151_interface dynablsb_ym2151_config =
677677{
678   NULL
678   DEVCB_NULL
679679};
680680
681681static INTERRUPT_GEN( fake_nmi )
src/mame/drivers/cyberbal.c
r14963r14964
416416
417417static const ym2151_interface ym2151_config =
418418{
419   atarigen_ym2151_irq_gen
419   DEVCB_LINE(atarigen_ym2151_irq_gen)
420420};
421421
422422
src/mame/drivers/bfm_sc4h.c
r14963r14964
229229 
230230static WRITE8_HANDLER( bfm_sc4_reel4_w );
231231 
232WRITE8_MEMBER(sc4_state::mux_output_w)
233{
234   int i;
235   int off = offset<<3;
232236 
237   for (i=0; i<8; i++)
238      output_set_lamp_value(off+i, ((data & (1 << i)) != 0));
239 
240 
241   output_set_indexed_value("matrix", off+i, ((data & (1 << i)) != 0));
242}
243 
244WRITE8_MEMBER(sc4_state::mux_output2_w)
245{
246   int i;
247   int off = offset<<3;
248 
249   for (i=0; i<8; i++)
250   {
251      output_set_indexed_value("matrix", off+i, ((data & (1 << i)) != 0));
252   }
253 
254 
255   if (offset>=20)
256   {
257      offset-=20;
258      // todo, reorder to what our 7segs expect
259      UINT8 bf7segdata = BITSWAP8(data,7,6,5,4,3,2,1,0);
260      output_set_digit_value(offset, bf7segdata);
261 
262   }
263 
264}
265 
233266WRITE16_MEMBER(sc4_state::sc4_mem_w)
234267{
235268   int pc = cpu_get_pc(&space.device());
r14963r14964
260293         else if ((offset>=base2) && (offset<end2))
261294         {
262295            offset-=base2;
296            int addr = (offset<<1);
263297 
264            switch (offset << 1)
298            if (addr < 0x0200)
265299            {
266               case 0x0330:
267                  logerror("%08x meter write %04x\n",pc, data);
268                  //m_meterstatus = (m_meterstatus&0xc0) | (data & 0x3f);
269                  sec.write_clock_line(~data&0x20);               
270                  break;
300               
301               if (mem_mask&0xff00)
302               {
303                  logerror("lamp write mem_mask&0xff00 unhandled\n");
304               }
271305 
272               case 0x1248:
273                  ymz280b_w(m_ymz,0, data & 0xff);
274                  break;
306               if (mem_mask&0x00ff)
307               {   // lamps
308                  mux_output_w(space, (addr & 0x01f0)>>4, data);
309               }
310               
311            }
312            else if ((addr >= 0x1000) && (addr < 0x1200))
313            {
314               if (mem_mask&0xff00)
315               {
316                  logerror("lamp write mem_mask&0xff00 unhandled\n");
317               }
275318 
276               case 0x124a:
277                  ymz280b_w(m_ymz,1, data & 0xff);
278                  break;
319               if (mem_mask&0x00ff)
320               {   // lamps
321                  mux_output2_w(space, (addr & 0x01f0)>>4, data);
322               }
323            }
324            else
325            {
326               switch (addr)
327               {
328                  case 0x0330:
329                     logerror("%08x meter write %04x\n",pc, data);
330                     //m_meterstatus = (m_meterstatus&0xc0) | (data & 0x3f);
331                     sec.write_clock_line(~data&0x20);               
332                     break;
279333 
280               case 0x1330:
281                  bfm_sc4_reel4_w(&space,0,data&0xf);
282                  //m_meterstatus = (m_meterstatus&0x3f) | ((data & 0x30) << 2);
283                  sec.write_data_line(~data&0x10);
284                  break;
334                  case 0x1248:
335                     ymz280b_w(m_ymz,0, data & 0xff);
336                     break;
285337 
286               default:
287                  logerror("%08x maincpu write access offset %08x data %04x mem_mask %04x cs %d (LAMPS etc.)\n", pc, offset*2, data, mem_mask, cs);
338                  case 0x124a:
339                     ymz280b_w(m_ymz,1, data & 0xff);
340                     break;
341 
342                  case 0x1330:
343                     bfm_sc4_reel4_w(&space,0,data&0xf);
344                     //m_meterstatus = (m_meterstatus&0x3f) | ((data & 0x30) << 2);
345                     sec.write_data_line(~data&0x10);
346                     break;
347 
348                  default:
349                     logerror("%08x maincpu write access offset %08x data %04x mem_mask %04x cs %d (LAMPS etc.)\n", pc, offset*2, data, mem_mask, cs);
350               }
288351            }
289352         }
290353         else
r14963r14964
655718   MCFG_DUART68681_ADD("duart68681", 16000000/4, bfm_sc4_duart68681_config) // ?? Mhz
656719 
657720 
658   MCFG_DEFAULT_LAYOUT(layout_awpvid14)
721   MCFG_DEFAULT_LAYOUT(layout_bfm_sc4)
659722 
660723   MCFG_SOUND_ADD("ymz", YMZ280B, 16000000) // ?? Mhz
661724   MCFG_SOUND_CONFIG(ymz280b_config)
src/mame/drivers/boogwing.c
r14963r14964
290290
291291static const ym2151_interface ym2151_config =
292292{
293   sound_irq,
294   sound_bankswitch_w
293   DEVCB_LINE(sound_irq),
294   DEVCB_HANDLER(sound_bankswitch_w)
295295};
296296
297297
src/mame/drivers/segas16a.c
r14963r14964
19361936
19371937static const ym2151_interface ym2151_config =
19381938{
1939   NULL,
1940   n7751_control_w
1939   DEVCB_NULL,
1940   DEVCB_HANDLER(n7751_control_w)
19411941};
19421942
19431943
src/mame/drivers/segahang.c
r14963r14964
778778
779779static const ym2151_interface ym2151_config =
780780{
781   sound_irq
781   DEVCB_LINE(sound_irq)
782782};
783783
784784
src/mame/drivers/gotcha.c
r14963r14964
1313- Unknown sound writes at C00F; also, there's an NMI handler that would
1414  read from C00F.
1515- Sound samples were getting chopped; I fixed this by changing sound/adpcm.c to
16  disregard requests to play new samples until the previous one is finished.
16  disregard requests to play new samples until the previous one is finished*.
1717
1818Gotcha pcb: 97,7,29 PARA VER 3.0 but it is the same as ppchamp
1919
r14963r14964
6363#include "sound/2151intf.h"
6464#include "sound/okim6295.h"
6565#include "includes/gotcha.h"
66#include "video/decospr.h"
6667
6768
6869WRITE16_MEMBER(gotcha_state::gotcha_lamps_w)
r14963r14964
118119static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, gotcha_state )
119120   AM_RANGE(0x0000, 0x7fff) AM_ROM
120121   AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE_LEGACY("ymsnd", ym2151_r, ym2151_w)
121   AM_RANGE(0xc002, 0xc003) AM_DEVWRITE("oki", okim6295_device, write)   // TWO addresses!
122   AM_RANGE(0xc002, 0xc002) AM_DEVREADWRITE("oki", okim6295_device, read, write) AM_MIRROR(1)
122123   AM_RANGE(0xc006, 0xc006) AM_READ(soundlatch_byte_r)
123124   AM_RANGE(0xd000, 0xd7ff) AM_RAM
124125ADDRESS_MAP_END
r14963r14964
244245
245246static const ym2151_interface ym2151_config =
246247{
247   irqhandler
248   DEVCB_LINE(irqhandler)
248249};
249250
250251
r14963r14964
300301
301302   MCFG_VIDEO_START(gotcha)
302303
304   MCFG_DEVICE_ADD("spritegen", DECO_SPRITE, 0)
305   decospr_device::set_gfx_region(*device, 1);
306   decospr_device::set_is_bootleg(*device, true);
307   decospr_device::set_offsets(*device, 5,-1); // aligned to 2nd instruction screen in attract
308
309
303310   /* sound hardware */
304311   MCFG_SPEAKER_STANDARD_MONO("mono")
305312
r14963r14964
392399   ROM_LOAD( "uz11", 0x00000, 0x80000, CRC(3d96274c) SHA1(c7a670af86194c370bf8fb30afbe027ab78a0227) )
393400ROM_END
394401
395GAME( 1997, gotcha,  0,      gotcha, gotcha, 0, ROT0, "Dongsung", "Got-cha Mini Game Festival", GAME_SUPPORTS_SAVE )
396GAME( 1997, ppchamp, gotcha, gotcha, gotcha, 0, ROT0, "Dongsung", "Pasha Pasha Champ Mini Game Festival (Korea)", GAME_SUPPORTS_SAVE )
402GAME( 1997, gotcha,  0,      gotcha, gotcha, 0, ROT0, "Dongsung / Para", "Got-cha Mini Game Festival", GAME_SUPPORTS_SAVE )
403GAME( 1997, ppchamp, gotcha, gotcha, gotcha, 0, ROT0, "Dongsung / Para", "Pasha Pasha Champ Mini Game Festival (Korea)", GAME_SUPPORTS_SAVE )
src/mame/drivers/ddragon.c
r14963r14964
263263
264264WRITE8_MEMBER(ddragon_state::darktowr_bankswitch_w)
265265{
266   int oldbank = machine().memory().bank("bank1");
266   int oldbank = machine().memory().bank("bank1")->entry();
267267   int newbank = (data & 0xe0) >> 5;
268268
269269   m_scrollx_hi = (data & 0x01);
r14963r14964
946946
947947static const ym2151_interface ym2151_config =
948948{
949   irq_handler
949   DEVCB_LINE(irq_handler)
950950};
951951
952952static const msm5205_interface msm5205_config =
src/mame/drivers/tickee.c
r14963r14964
3838      m_control(*this, "control"){ }
3939
4040   required_shared_ptr<UINT16> m_vram;
41   required_shared_ptr<UINT16> m_control;
41   optional_shared_ptr<UINT16> m_control;
4242   emu_timer *m_setup_gun_timer;
4343   int m_beamxadd;
4444   int m_beamyadd;
src/mame/drivers/m92.c
r14963r14964
881881
882882static const ym2151_interface ym2151_config =
883883{
884   sound_irq
884   DEVCB_LINE(sound_irq)
885885};
886886
887887/***************************************************************************/
src/mame/drivers/wwfwfest.c
r14963r14964
374374
375375static const ym2151_interface ym2151_config =
376376{
377   dd3_ymirq_handler
377   DEVCB_LINE(dd3_ymirq_handler)
378378};
379379
380380/*******************************************************************************
src/mame/drivers/vcombat.c
r14963r14964
116116   DECLARE_WRITE64_MEMBER(v0_fb_w);
117117   DECLARE_WRITE64_MEMBER(v1_fb_w);
118118   DECLARE_WRITE16_MEMBER(crtc_w);
119   DECLARE_DIRECT_UPDATE_MEMBER(vcombat_vid_0_direct_handler);
120   DECLARE_DIRECT_UPDATE_MEMBER(vcombat_vid_1_direct_handler);   
119121};
120122
121123static UINT32 update_screen(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int index)
r14963r14964
413415}
414416
415417
416DIRECT_UPDATE_HANDLER( vcombat_vid_0_direct_handler )
418DIRECT_UPDATE_MEMBER(vcombat_state::vcombat_vid_0_direct_handler)
417419{
418   vcombat_state *state = machine.driver_data<vcombat_state>();
419420   if (address >= 0xfffc0000 && address <= 0xffffffff)
420421   {
421      direct.explicit_configure(0xfffc0000, 0xffffffff, 0x3ffff, state->m_vid_0_shared_ram);
422      direct.explicit_configure(0xfffc0000, 0xffffffff, 0x3ffff, m_vid_0_shared_ram);
422423      return ~0;
423424   }
424425   return address;
425426}
426427
427DIRECT_UPDATE_HANDLER( vcombat_vid_1_direct_handler )
428DIRECT_UPDATE_MEMBER(vcombat_state::vcombat_vid_1_direct_handler)
428429{
429   vcombat_state *state = machine.driver_data<vcombat_state>();
430430   if (address >= 0xfffc0000 && address <= 0xffffffff)
431431   {
432      direct.explicit_configure(0xfffc0000, 0xffffffff, 0x3ffff, state->m_vid_1_shared_ram);
432      direct.explicit_configure(0xfffc0000, 0xffffffff, 0x3ffff, m_vid_1_shared_ram);
433433      return ~0;
434434   }
435435   return address;
r14963r14964
443443
444444   /* The two i860s execute out of RAM */
445445   address_space *space = machine.device<i860_device>("vid_0")->space(AS_PROGRAM);
446   space->set_direct_update_handler(direct_update_delegate(FUNC(vcombat_vid_0_direct_handler), &machine));
446   space->set_direct_update_handler(direct_update_delegate(FUNC(vcombat_state::vcombat_vid_0_direct_handler), state));
447447
448448   space = machine.device<i860_device>("vid_1")->space(AS_PROGRAM);
449   space->set_direct_update_handler(direct_update_delegate(FUNC(vcombat_vid_1_direct_handler), &machine));
449   space->set_direct_update_handler(direct_update_delegate(FUNC(vcombat_state::vcombat_vid_1_direct_handler), state));
450450
451451   /* Allocate the 68000 framebuffers */
452452   state->m_m68k_framebuffer[0] = auto_alloc_array(machine, UINT16, 0x8000);
r14963r14964
491491
492492   /* The i860 executes out of RAM */
493493   address_space *space = machine.device<i860_device>("vid_0")->space(AS_PROGRAM);
494   space->set_direct_update_handler(direct_update_delegate(FUNC(vcombat_vid_0_direct_handler), &machine));
494   space->set_direct_update_handler(direct_update_delegate(FUNC(vcombat_state::vcombat_vid_0_direct_handler), state));
495495}
496496
497497
src/mame/drivers/mcr.c
r14963r14964
283283
284284
285285#include "emu.h"
286#include "audio/mcr.h"
286#include "audio/midway.h"
287287#include "sound/samples.h"
288288#include "machine/nvram.h"
289289#include "includes/mcr.h"
r14963r14964
302302
303303
304304
305WRITE8_MEMBER(mcr_state::mcr_control_port_w)
306{
307   /*
308        Bit layout is as follows:
309            D7 = n/c
310            D6 = cocktail flip
311            D5 = red LED
312            D4 = green LED
313            D3 = n/c
314            D2 = coin meter 3
315            D1 = coin meter 2
316            D0 = coin meter 1
317    */
318
319   coin_counter_w(machine(), 0, (data >> 0) & 1);
320   coin_counter_w(machine(), 1, (data >> 1) & 1);
321   coin_counter_w(machine(), 2, (data >> 2) & 1);
322   mcr_cocktail_flip = (data >> 6) & 1;
323}
324
325
305326/*************************************
306327 *
307328 *  Solar Fox input ports
r14963r14964
316337   /* game in cocktail mode, they don't work at all. So we fake-mux   */
317338   /* the controls through player 1's ports */
318339   if (mcr_cocktail_flip)
319      return input_port_read(machine(), "SSIO.IP0") | 0x08;
340      return input_port_read(machine(), "ssio:IP0") | 0x08;
320341   else
321      return ((input_port_read(machine(), "SSIO.IP0") & ~0x14) | 0x08) | ((input_port_read(machine(), "SSIO.IP0") & 0x08) >> 1) | ((input_port_read(machine(), "SSIO.IP2") & 0x01) << 4);
342      return ((input_port_read(machine(), "ssio:IP0") & ~0x14) | 0x08) | ((input_port_read(machine(), "ssio:IP0") & 0x08) >> 1) | ((input_port_read(machine(), "ssio:IP2") & 0x01) << 4);
322343}
323344
324345
r14963r14964
326347{
327348   /*  same deal as above */
328349   if (mcr_cocktail_flip)
329      return input_port_read(machine(), "SSIO.IP1") | 0xf0;
350      return input_port_read(machine(), "ssio:IP1") | 0xf0;
330351   else
331      return (input_port_read(machine(), "SSIO.IP1") >> 4) | 0xf0;
352      return (input_port_read(machine(), "ssio:IP1") >> 4) | 0xf0;
332353}
333354
334355
r14963r14964
361382READ8_MEMBER(mcr_state::wacko_ip1_r)
362383{
363384   if (!input_mux)
364      return input_port_read(machine(), "SSIO.IP1");
385      return input_port_read(machine(), "ssio:IP1");
365386   else
366      return input_port_read(machine(), "SSIO.IP1.ALT");
387      return input_port_read(machine(), "ssio:IP1.ALT");
367388}
368389
369390
370391READ8_MEMBER(mcr_state::wacko_ip2_r)
371392{
372393   if (!input_mux)
373      return input_port_read(machine(), "SSIO.IP2");
394      return input_port_read(machine(), "ssio:IP2");
374395   else
375      return input_port_read(machine(), "SSIO.IP2.ALT");
396      return input_port_read(machine(), "ssio:IP2.ALT");
376397}
377398
378399
r14963r14964
512533
513534   /* bit 4 = SEL0 (J1-8) on squawk n talk board */
514535   /* bits 3-0 = MD3-0 connected to squawk n talk (J1-4,3,2,1) */
515   squawkntalk_data_w(space, offset, data);
536   m_squawk_n_talk->write(space, offset, data);
516537}
517538
518539
r14963r14964
595616
596617   /* bit 4 = SEL0 (J1-8) on squawk n talk board */
597618   /* bits 3-0 = MD3-0 connected to squawk n talk (J1-4,3,2,1) */
598   squawkntalk_data_w(space, offset, data);
619   m_squawk_n_talk->write(space, offset, data);
599620}
600621
601622
r14963r14964
608629
609630READ8_MEMBER(mcr_state::demoderb_ip1_r)
610631{
611   return input_port_read(machine(), "SSIO.IP1") |
612      (input_port_read(machine(), input_mux ? "SSIO.IP1.ALT2" : "SSIO.IP1.ALT1") << 2);
632   return input_port_read(machine(), "ssio:IP1") |
633      (input_port_read(machine(), input_mux ? "ssio:IP1.ALT2" : "ssio:IP1.ALT1") << 2);
613634}
614635
615636
616637READ8_MEMBER(mcr_state::demoderb_ip2_r)
617638{
618   return input_port_read(machine(), "SSIO.IP2") |
619      (input_port_read(machine(), input_mux ? "SSIO.IP2.ALT2" : "SSIO.IP2.ALT1") << 2);
639   return input_port_read(machine(), "ssio:IP2") |
640      (input_port_read(machine(), input_mux ? "ssio:IP2.ALT2" : "ssio:IP2.ALT1") << 2);
620641}
621642
622643
r14963r14964
624645{
625646   if (data & 0x40) input_mux = 1;
626647   if (data & 0x80) input_mux = 0;
627   turbocs_data_w(space, offset, data);
648   m_turbo_chip_squeak->write(space, offset, data);
628649}
629650
630651
r14963r14964
650671static ADDRESS_MAP_START( cpu_90009_portmap, AS_IO, 8, mcr_state )
651672   ADDRESS_MAP_UNMAP_HIGH
652673   ADDRESS_MAP_GLOBAL_MASK(0xff)
653   SSIO_INPUT_PORTS
674   SSIO_INPUT_PORTS("ssio")
654675   AM_RANGE(0xe0, 0xe0) AM_WRITE(watchdog_reset_w)
655676   AM_RANGE(0xe8, 0xe8) AM_WRITENOP
656677   AM_RANGE(0xf0, 0xf3) AM_DEVREADWRITE_LEGACY("ctc", z80ctc_r, z80ctc_w)
r14963r14964
677698static ADDRESS_MAP_START( cpu_90010_portmap, AS_IO, 8, mcr_state )
678699   ADDRESS_MAP_UNMAP_HIGH
679700   ADDRESS_MAP_GLOBAL_MASK(0xff)
680   SSIO_INPUT_PORTS
701   SSIO_INPUT_PORTS("ssio")
681702   AM_RANGE(0xe0, 0xe0) AM_WRITE(watchdog_reset_w)
682703   AM_RANGE(0xe8, 0xe8) AM_WRITENOP
683704   AM_RANGE(0xf0, 0xf3) AM_DEVREADWRITE_LEGACY("ctc", z80ctc_r, z80ctc_w)
r14963r14964
705726static ADDRESS_MAP_START( cpu_91490_portmap, AS_IO, 8, mcr_state )
706727   ADDRESS_MAP_UNMAP_HIGH
707728   ADDRESS_MAP_GLOBAL_MASK(0xff)
708   SSIO_INPUT_PORTS
729   SSIO_INPUT_PORTS("ssio")
709730   AM_RANGE(0xe0, 0xe0) AM_WRITE(watchdog_reset_w)
710731   AM_RANGE(0xe8, 0xe8) AM_WRITENOP
711732   AM_RANGE(0xf0, 0xf3) AM_DEVREADWRITE_LEGACY("ctc", z80ctc_r, z80ctc_w)
r14963r14964
748769
749770/* verified from wiring diagram, plus DIP switches from manual */
750771static INPUT_PORTS_START( solarfox )
751   PORT_START("SSIO.IP0")   /* J4 1-8 */
772   PORT_START("ssio:IP0")   /* J4 1-8 */
752773   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
753774   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
754775   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 )
r14963r14964
758779   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 )
759780   PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
760781
761   PORT_START("SSIO.IP1")   /* J4 10-13,15-18 */
782   PORT_START("ssio:IP1")   /* J4 10-13,15-18 */
762783   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY
763784   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY
764785   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY
r14963r14964
768789   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_COCKTAIL
769790   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL
770791
771   PORT_START("SSIO.IP2")   /* J5 1-8 */
792   PORT_START("ssio:IP2")   /* J5 1-8 */
772793   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
773794   PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNUSED )
774795
775   PORT_START("SSIO.IP3")   /* DIPSW @ B3 */
796   PORT_START("ssio:IP3")   /* DIPSW @ B3 */
776797   PORT_DIPNAME( 0x03, 0x03, "Bonus" )
777798   PORT_DIPSETTING(    0x02, DEF_STR( None ) )
778799   PORT_DIPSETTING(    0x03, "After 10 racks" )
r14963r14964
789810   PORT_DIPSETTING(    0x80, DEF_STR( Upright ))
790811   PORT_DIPSETTING(    0x00, DEF_STR( Cocktail ))
791812
792   PORT_START("SSIO.IP4")   /* J6 1-8 */
813   PORT_START("ssio:IP4")   /* J6 1-8 */
793814   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
794815
795   PORT_START("SSIO.DIP")
816   PORT_START("ssio:DIP")
796817   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
797818INPUT_PORTS_END
798819
799820
800821/* verified from wiring diagram, plus DIP switches from manual */
801822static INPUT_PORTS_START( kick )
802   PORT_START("SSIO.IP0")   /* J4 1-8 */
823   PORT_START("ssio:IP0")   /* J4 1-8 */
803824   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
804825   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
805826   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
r14963r14964
809830   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 )
810831   PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
811832
812   PORT_START("SSIO.IP1")   /* J4 10-13,15-18 */
833   PORT_START("ssio:IP1")   /* J4 10-13,15-18 */
813834   PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(3) PORT_KEYDELTA(50) PORT_REVERSE
814835
815   PORT_START("SSIO.IP2")   /* J5 1-8 */
836   PORT_START("ssio:IP2")   /* J5 1-8 */
816837   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
817838
818   PORT_START("SSIO.IP3")   /* DIPSW @ B3 */
839   PORT_START("ssio:IP3")   /* DIPSW @ B3 */
819840   PORT_DIPNAME( 0x01, 0x00, "Music" )
820841   PORT_DIPSETTING(    0x01, DEF_STR( Off ))
821842   PORT_DIPSETTING(    0x00, DEF_STR( On ))
822843   PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNKNOWN )
823844
824   PORT_START("SSIO.IP4")   /* J6 1-8 */
845   PORT_START("ssio:IP4")   /* J6 1-8 */
825846   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
826847
827   PORT_START("SSIO.DIP")
848   PORT_START("ssio:DIP")
828849   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
829850
830851   PORT_START("DIAL2")
r14963r14964
834855
835856/* verified from wiring diagram, plus DIP switches from manual */
836857static INPUT_PORTS_START( kickc )
837   PORT_START("SSIO.IP0")   /* J4 1-8 */
858   PORT_START("ssio:IP0")   /* J4 1-8 */
838859   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
839860   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
840861   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
r14963r14964
844865   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 )
845866   PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
846867
847   PORT_START("SSIO.IP1")   /* J4 10-13,15-18 */
868   PORT_START("ssio:IP1")   /* J4 10-13,15-18 */
848869   PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(3) PORT_KEYDELTA(50) PORT_REVERSE
849870
850   PORT_START("SSIO.IP2")   /* J5 1-8 */
871   PORT_START("ssio:IP2")   /* J5 1-8 */
851872   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
852873   PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNUSED )
853874
854   PORT_START("SSIO.IP3")   /* DIPSW @ B3 */
875   PORT_START("ssio:IP3")   /* DIPSW @ B3 */
855876   PORT_DIPNAME( 0x01, 0x00, "Music" )
856877   PORT_DIPSETTING(    0x01, DEF_STR( Off ))
857878   PORT_DIPSETTING(    0x00, DEF_STR( On ))
r14963r14964
861882   PORT_DIPSETTING(    0x40, DEF_STR( Cocktail ))
862883   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
863884
864   PORT_START("SSIO.IP4")   /* J6 1-8 */
885   PORT_START("ssio:IP4")   /* J6 1-8 */
865886   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
866887
867   PORT_START("SSIO.DIP")
888   PORT_START("ssio:DIP")
868889   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
869890
870891   PORT_START("DIAL2")
r14963r14964
874895
875896/* verified from wiring diagram, plus DIP switches from manual */
876897static INPUT_PORTS_START( shollow )
877   PORT_START("SSIO.IP0")   /* J4 1-8 */
898   PORT_START("ssio:IP0")   /* J4 1-8 */
878899   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
879900   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
880901   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
r14963r14964
884905   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 )
885906   PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
886907
887   PORT_START("SSIO.IP1")   /* J4 10-13,15-18 */
908   PORT_START("ssio:IP1")   /* J4 10-13,15-18 */
888909   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_2WAY
889910   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY
890911   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 )
r14963r14964
894915   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
895916   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
896917
897   PORT_START("SSIO.IP2")   /* J5 1-8 */
918   PORT_START("ssio:IP2")   /* J5 1-8 */
898919   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
899920
900   PORT_START("SSIO.IP3")   /* DIPSW @ B3 */
921   PORT_START("ssio:IP3")   /* DIPSW @ B3 */
901922   PORT_DIPNAME( 0x01, 0x01, "Coin Meters" )
902923   PORT_DIPSETTING(    0x01, "1" )
903924   PORT_DIPSETTING(    0x00, "2" )
r14963r14964
906927   PORT_DIPSETTING(    0x02, DEF_STR( Cocktail ) )
907928   PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNKNOWN )
908929
909   PORT_START("SSIO.IP4")   /* J6 1-8 */
930   PORT_START("ssio:IP4")   /* J6 1-8 */
910931   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
911932
912   PORT_START("SSIO.DIP")
933   PORT_START("ssio:DIP")
913934   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
914935INPUT_PORTS_END
915936
916937
917938/* verified from wiring diagram, plus DIP switches from manual */
918939static INPUT_PORTS_START( tron )
919   PORT_START("SSIO.IP0")   /* J4 1-8 */
940   PORT_START("ssio:IP0")   /* J4 1-8 */
920941   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
921942   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
922943   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
r14963r14964
926947   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 )
927948   PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
928949
929   PORT_START("SSIO.IP1")   /* J4 10-13,15-18 */
950   PORT_START("ssio:IP1")   /* J4 10-13,15-18 */
930951   PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_CODE_DEC(KEYCODE_Z) PORT_CODE_INC(KEYCODE_X) PORT_REVERSE
931952
932   PORT_START("SSIO.IP2")   /* J5 1-8 */
953   PORT_START("ssio:IP2")   /* J5 1-8 */
933954   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
934955   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
935956   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
r14963r14964
939960   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
940961   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
941962
942   PORT_START("SSIO.IP3")   /* DIPSW @ B3 */
963   PORT_START("ssio:IP3")   /* DIPSW @ B3 */
943964   PORT_DIPNAME( 0x01, 0x00, "Coin Meters" )  PORT_DIPLOCATION("SW1:1")
944965   PORT_DIPSETTING(    0x01, "1" )
945966   PORT_DIPSETTING(    0x00, "2" )
r14963r14964
958979   // According to the manual, SW1 is a bank of *10* switches (9 is unused and 10 is freeze)
959980   // Where are the values for the other two bits read?
960981
961   PORT_START("SSIO.IP4")   /* J6 1-8 */
982   PORT_START("ssio:IP4")   /* J6 1-8 */
962983   PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_REVERSE PORT_COCKTAIL
963984
964   PORT_START("SSIO.DIP")
985   PORT_START("ssio:DIP")
965986   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
966987
967988INPUT_PORTS_END
968989
969990static INPUT_PORTS_START( tron3 )
970   PORT_START("SSIO.IP0")   /* J4 1-8 */
991   PORT_START("ssio:IP0")   /* J4 1-8 */
971992   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
972993   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
973994   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
r14963r14964
977998   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 )
978999   PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
9791000
980   PORT_START("SSIO.IP1")   /* J4 10-13,15-18 */
1001   PORT_START("ssio:IP1")   /* J4 10-13,15-18 */
9811002   PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_CODE_DEC(KEYCODE_Z) PORT_CODE_INC(KEYCODE_X) PORT_REVERSE
9821003
983   PORT_START("SSIO.IP2")   /* J5 1-8 */
1004   PORT_START("ssio:IP2")   /* J5 1-8 */
9841005   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
9851006   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
9861007   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
r14963r14964
9901011//  PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
9911012//  PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
9921013
993   PORT_START("SSIO.IP3")   /* DIPSW @ B3 */
1014   PORT_START("ssio:IP3")   /* DIPSW @ B3 */
9941015   PORT_DIPNAME( 0x01, 0x00, "Coin Meters" )  PORT_DIPLOCATION("SW1:1")
9951016   PORT_DIPSETTING(    0x01, "1" )
9961017   PORT_DIPSETTING(    0x00, "2" )
r14963r14964
10091030   // According to the manual, SW1 is a bank of *10* switches (9 is unused and 10 is freeze)
10101031   // Where are the values for the other two bits read?
10111032
1012   PORT_START("SSIO.IP4")   /* J6 1-8 */
1033   PORT_START("ssio:IP4")   /* J6 1-8 */
10131034   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
10141035//  PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_REVERSE PORT_COCKTAIL
10151036
1016   PORT_START("SSIO.DIP")
1037   PORT_START("ssio:DIP")
10171038   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
10181039
10191040INPUT_PORTS_END
r14963r14964
10221043
10231044/* verified from wiring diagram, plus DIP switches from manual */
10241045static INPUT_PORTS_START( kroozr )
1025   PORT_START("SSIO.IP0")   /* J4 1-8 */
1046   PORT_START("ssio:IP0")   /* J4 1-8 */
10261047   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
10271048   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
10281049   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
r14963r14964
10321053   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 )
10331054   PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
10341055
1035   PORT_START("SSIO.IP1")   /* J4 10-13,15-18 */
1056   PORT_START("ssio:IP1")   /* J4 10-13,15-18 */
10361057   PORT_BIT( 0x07, IP_ACTIVE_HIGH, IPT_SPECIAL )   /* low 3 bits of spinner */
10371058   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL )   /* sensor J1-10 */
10381059   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SPECIAL )   /* sensor J1-9 */
r14963r14964
10401061   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SPECIAL )   /* upper 1 bit of spinner */
10411062   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 )
10421063
1043   PORT_START("SSIO.IP2")   /* J5 1-8 */
1064   PORT_START("ssio:IP2")   /* J5 1-8 */
10441065   PORT_BIT( 0xff, 0x64, IPT_AD_STICK_X ) PORT_MINMAX(48,152) PORT_SENSITIVITY(100) PORT_KEYDELTA(52)
10451066
1046   PORT_START("SSIO.IP3")   /* DIPSW @ B3 */
1067   PORT_START("ssio:IP3")   /* DIPSW @ B3 */
10471068   PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_UNKNOWN )
10481069   PORT_DIPNAME( 0x40, 0x00, DEF_STR( Cabinet ) )
10491070   PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
10501071   PORT_DIPSETTING(    0x40, DEF_STR( Cocktail ) )
10511072   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
10521073
1053   PORT_START("SSIO.IP4")   /* J6 1-8 */
1074   PORT_START("ssio:IP4")   /* J6 1-8 */
10541075   PORT_BIT( 0xff, 0x64, IPT_AD_STICK_Y ) PORT_MINMAX(48,152) PORT_SENSITIVITY(100) PORT_KEYDELTA(52)
10551076
1056   PORT_START("SSIO.DIP")
1077   PORT_START("ssio:DIP")
10571078   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
10581079
10591080   PORT_START("DIAL")
r14963r14964
10631084
10641085/* verified from wiring diagram, plus DIP switches from manual */
10651086static INPUT_PORTS_START( domino )
1066   PORT_START("SSIO.IP0")   /* J4 1-8 */
1087   PORT_START("ssio:IP0")   /* J4 1-8 */
10671088   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
10681089   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
10691090   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
r14963r14964
10731094   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 )
10741095   PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
10751096
1076   PORT_START("SSIO.IP1")   /* J4 10-13,15-18 */
1097   PORT_START("ssio:IP1")   /* J4 10-13,15-18 */
10771098   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY
10781099   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY
10791100   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY
10801101   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY
10811102   PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
10821103
1083   PORT_START("SSIO.IP2")   /* J5 1-8 */
1104   PORT_START("ssio:IP2")   /* J5 1-8 */
10841105   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_COCKTAIL
10851106   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL
10861107   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL
r14963r14964
10881109   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
10891110   PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED )
10901111
1091   PORT_START("SSIO.IP3")   /* DIPSW @ B3 */
1112   PORT_START("ssio:IP3")   /* DIPSW @ B3 */
10921113   PORT_DIPNAME( 0x01, 0x00, "Music" )
10931114   PORT_DIPSETTING(    0x01, DEF_STR( Off ))
10941115   PORT_DIPSETTING(    0x00, DEF_STR( On ))
r14963r14964
11031124   PORT_DIPSETTING(    0x80, "1" )
11041125   PORT_DIPSETTING(    0x00, "2" )
11051126
1106   PORT_START("SSIO.IP4")   /* J6 1-8 */
1127   PORT_START("ssio:IP4")   /* J6 1-8 */
11071128   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
11081129
1109   PORT_START("SSIO.DIP")
1130   PORT_START("ssio:DIP")
11101131   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
11111132INPUT_PORTS_END
11121133
11131134
11141135/* verified from wiring diagram, plus DIP switches from manual */
11151136static INPUT_PORTS_START( journey )
1116   PORT_START("SSIO.IP0")   /* J4 1-8 */
1137   PORT_START("ssio:IP0")   /* J4 1-8 */
11171138   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
11181139   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
11191140   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
r14963r14964
11231144   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 )
11241145   PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
11251146
1126   PORT_START("SSIO.IP1")   /* J4 10-13,15-18 */
1147   PORT_START("ssio:IP1")   /* J4 10-13,15-18 */
11271148   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY
11281149   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY
11291150   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY
11301151   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY
11311152   PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
11321153
1133   PORT_START("SSIO.IP2")   /* J5 1-8 */
1154   PORT_START("ssio:IP2")   /* J5 1-8 */
11341155   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_COCKTAIL
11351156   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL
11361157   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL
r14963r14964
11381159   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
11391160   PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED )
11401161
1141   PORT_START("SSIO.IP3")   /* DIPSW @ B3 */
1162   PORT_START("ssio:IP3")   /* DIPSW @ B3 */
11421163   PORT_DIPNAME( 0x01, 0x01, "Coin Meters" )
11431164   PORT_DIPSETTING(    0x01, "1" )
11441165   PORT_DIPSETTING(    0x00, "2" )
r14963r14964
11471168   PORT_DIPSETTING(    0x02, DEF_STR( Cocktail ) )
11481169   PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED )
11491170
1150   PORT_START("SSIO.IP4")   /* J6 1-8 */
1171   PORT_START("ssio:IP4")   /* J6 1-8 */
11511172   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
11521173
1153   PORT_START("SSIO.DIP")
1174   PORT_START("ssio:DIP")
11541175   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
11551176INPUT_PORTS_END
11561177
11571178
11581179/* verified from wiring diagram, plus DIP switches from manual */
11591180static INPUT_PORTS_START( wacko )
1160   PORT_START("SSIO.IP0")   /* J4 1-8 */
1181   PORT_START("ssio:IP0")   /* J4 1-8 */
11611182   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
11621183   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
11631184   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
r14963r14964
11671188   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 )
11681189   PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
11691190
1170   PORT_START("SSIO.IP1")   /* J4 10-13,15-18 */
1191   PORT_START("ssio:IP1")   /* J4 10-13,15-18 */
11711192   PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10)
11721193
1173   PORT_START("SSIO.IP2")   /* J5 1-8 */
1194   PORT_START("ssio:IP2")   /* J5 1-8 */
11741195   PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_REVERSE
11751196
1176   PORT_START("SSIO.IP3")   /* DIPSW @ B3 */
1197   PORT_START("ssio:IP3")   /* DIPSW @ B3 */
11771198   PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_UNUSED )
11781199   PORT_DIPNAME( 0x40, 0x00, DEF_STR( Cabinet ) )
11791200   PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
r14963r14964
11821203   PORT_DIPSETTING(    0x80, "1" )
11831204   PORT_DIPSETTING(    0x00, "2" )
11841205
1185   PORT_START("SSIO.IP4")   /* J6 1-8 */
1206   PORT_START("ssio:IP4")   /* J6 1-8 */
11861207   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_RIGHT ) PORT_4WAY
11871208   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_LEFT ) PORT_4WAY
11881209   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_DOWN ) PORT_4WAY
r14963r14964
11921213   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_DOWN ) PORT_4WAY PORT_COCKTAIL
11931214   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICKLEFT_UP ) PORT_4WAY PORT_COCKTAIL
11941215
1195   PORT_START("SSIO.DIP")
1216   PORT_START("ssio:DIP")
11961217   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
11971218
1198   PORT_START("SSIO.IP1.ALT")
1219   PORT_START("ssio:IP1.ALT")
11991220   PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_COCKTAIL
12001221
1201   PORT_START("SSIO.IP2.ALT")
1222   PORT_START("ssio:IP2.ALT")
12021223   PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_REVERSE PORT_COCKTAIL
12031224INPUT_PORTS_END
12041225
12051226
12061227/* not verified, no manual found */
12071228static INPUT_PORTS_START( twotiger )
1208   PORT_START("SSIO.IP0")   /* J4 1-8 */
1229   PORT_START("ssio:IP0")   /* J4 1-8 */
12091230   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
12101231   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
12111232   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 )
r14963r14964
12151236   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 )
12161237   PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
12171238
1218   PORT_START("SSIO.IP1")   /* J4 10-13,15-18 */
1239   PORT_START("ssio:IP1")   /* J4 10-13,15-18 */
12191240   PORT_BIT( 0xff, 0x67, IPT_AD_STICK_X ) PORT_MINMAX(0, 206) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(2)
12201241
1221   PORT_START("SSIO.IP2")   /* J5 1-8 */
1242   PORT_START("ssio:IP2")   /* J5 1-8 */
12221243   PORT_BIT( 0xff, 0x67, IPT_AD_STICK_X ) PORT_MINMAX(0, 206) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(1)
12231244
1224   PORT_START("SSIO.IP3")   /* DIPSW @ B3 */
1245   PORT_START("ssio:IP3")   /* DIPSW @ B3 */
12251246   PORT_DIPNAME( 0x01, 0x00, "Shot Speed" )
12261247   PORT_DIPSETTING(    0x01, "Fast" )
12271248   PORT_DIPSETTING(    0x00, "Slow" )
r14963r14964
12301251   PORT_DIPSETTING(    0x02, "2 Credits" )
12311252   PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED )
12321253
1233   PORT_START("SSIO.IP4")   /* J6 1-8 */
1254   PORT_START("ssio:IP4")   /* J6 1-8 */
12341255   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 )
12351256   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 )
12361257   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 )
r14963r14964
12391260   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
12401261   PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
12411262
1242   PORT_START("SSIO.DIP")
1263   PORT_START("ssio:DIP")
12431264   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
12441265INPUT_PORTS_END
12451266
12461267
12471268/* not verified, no manual found */
12481269static INPUT_PORTS_START( twotigrc )
1249   PORT_START("SSIO.IP0")   /* J4 1-8 */
1270   PORT_START("ssio:IP0")   /* J4 1-8 */
12501271   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
12511272   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
12521273   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
r14963r14964
12561277   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 )
12571278   PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
12581279
1259   PORT_START("SSIO.IP1")   /* J4 10-13,15-18 */
1280   PORT_START("ssio:IP1")   /* J4 10-13,15-18 */
12601281   PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(10) PORT_KEYDELTA(10) PORT_REVERSE
12611282
1262   PORT_START("SSIO.IP2")   /* J5 1-8 */
1283   PORT_START("ssio:IP2")   /* J5 1-8 */
12631284   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 )
12641285   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 )
12651286   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
12661287   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
12671288   PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
12681289
1269   PORT_START("SSIO.IP3")   /* DIPSW @ B3 */
1290   PORT_START("ssio:IP3")   /* DIPSW @ B3 */
12701291   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
12711292
1272   PORT_START("SSIO.IP4")   /* J6 1-8 */
1293   PORT_START("ssio:IP4")   /* J6 1-8 */
12731294   PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(10) PORT_KEYDELTA(10) PORT_REVERSE PORT_PLAYER(2)
12741295
1275   PORT_START("SSIO.DIP")
1296   PORT_START("ssio:DIP")
12761297   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
12771298INPUT_PORTS_END
12781299
12791300
12801301/* verified from wiring diagram, plus DIP switches from manual */
12811302static INPUT_PORTS_START( tapper )
1282   PORT_START("SSIO.IP0")   /* J4 1-8 */
1303   PORT_START("ssio:IP0")   /* J4 1-8 */
12831304   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
12841305   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
12851306   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
r14963r14964
12891310   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 )
12901311   PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
12911312
1292   PORT_START("SSIO.IP1")   /* J4 10-13,15-18 */
1313   PORT_START("ssio:IP1")   /* J4 10-13,15-18 */
12931314   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY
12941315   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY
12951316   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY
r14963r14964
12971318   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
12981319   PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED )
12991320
1300   PORT_START("SSIO.IP2")   /* J5 1-8 */
1321   PORT_START("ssio:IP2")   /* J5 1-8 */
13011322   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL
13021323   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_COCKTAIL
13031324   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_COCKTAIL
r14963r14964
13051326   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
13061327   PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED )
13071328
1308   PORT_START("SSIO.IP3")   /* DIPSW @ B3 */
1329   PORT_START("ssio:IP3")   /* DIPSW @ B3 */
13091330   PORT_BIT( 0x03, IP_ACTIVE_LOW, IPT_UNUSED )
13101331   PORT_DIPNAME( 0x04, 0x00, DEF_STR( Demo_Sounds ) )
13111332   PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
r14963r14964
13181339   PORT_DIPSETTING(    0x80, "1" )
13191340   PORT_DIPSETTING(    0x00, "2" )
13201341
1321   PORT_START("SSIO.IP4")   /* J6 1-8 */
1342   PORT_START("ssio:IP4")   /* J6 1-8 */
13221343   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
13231344
1324   PORT_START("SSIO.DIP")
1345   PORT_START("ssio:DIP")
13251346   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
13261347INPUT_PORTS_END
13271348
13281349
13291350/* not verified, no manual found */
13301351static INPUT_PORTS_START( timber )
1331   PORT_START("SSIO.IP0")   /* J4 1-8 */
1352   PORT_START("ssio:IP0")   /* J4 1-8 */
13321353   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
13331354   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
13341355   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
r14963r14964
13381359   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 )
13391360   PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
13401361
1341   PORT_START("SSIO.IP1")   /* J4 10-13,15-18 */
1362   PORT_START("ssio:IP1")   /* J4 10-13,15-18 */
13421363   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(1)
13431364   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(1)
13441365   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(1)
r14963r14964
13471368   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
13481369   PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
13491370
1350   PORT_START("SSIO.IP2")   /* J5 1-8 */
1371   PORT_START("ssio:IP2")   /* J5 1-8 */
13511372   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_PLAYER(2)
13521373   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_PLAYER(2)
13531374   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_PLAYER(2)
r14963r14964
13561377   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
13571378   PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
13581379
1359   PORT_START("SSIO.IP3")   /* DIPSW @ B3 */
1380   PORT_START("ssio:IP3")   /* DIPSW @ B3 */
13601381   PORT_BIT( 0x03, IP_ACTIVE_LOW, IPT_UNUSED )
13611382   PORT_DIPNAME( 0x04, 0x00, DEF_STR( Demo_Sounds ) )
13621383   PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
r14963r14964
13691390   PORT_DIPSETTING(    0x80, "1" )
13701391   PORT_DIPSETTING(    0x00, "2" )
13711392
1372   PORT_START("SSIO.IP4")   /* J6 1-8 */
1393   PORT_START("ssio:IP4")   /* J6 1-8 */
13731394   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
13741395
1375   PORT_START("SSIO.DIP")
1396   PORT_START("ssio:DIP")
13761397   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
13771398INPUT_PORTS_END
13781399
13791400
13801401/* verified from wiring diagram, plus DIP switches from manual */
13811402static INPUT_PORTS_START( dotron )
1382   PORT_START("SSIO.IP0")   /* J4 1-8 */
1403   PORT_START("ssio:IP0")   /* J4 1-8 */
13831404   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
13841405   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
13851406   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
r14963r14964
13891410   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 )
13901411   PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
13911412
1392   PORT_START("SSIO.IP1")   /* J4 10-13,15-18 */
1413   PORT_START("ssio:IP1")   /* J4 10-13,15-18 */
13931414   PORT_BIT( 0x7f, 0x00, IPT_DIAL ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_CODE_DEC(KEYCODE_Z) PORT_CODE_INC(KEYCODE_X) PORT_REVERSE
13941415   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
13951416
1396   PORT_START("SSIO.IP2")   /* J5 1-8 */
1417   PORT_START("ssio:IP2")   /* J5 1-8 */
13971418   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
13981419   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
13991420   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
r14963r14964
14051426   PORT_DIPSETTING(    0x00, "Environmental" )
14061427   PORT_DIPSETTING(    0x80, DEF_STR( Upright ) )
14071428
1408   PORT_START("SSIO.IP3")   /* DIPSW @ B3 */
1429   PORT_START("ssio:IP3")   /* DIPSW @ B3 */
14091430   PORT_DIPNAME( 0x01, 0x01, "Coin Meters" )
14101431   PORT_DIPSETTING(    0x01, "1" )
14111432   PORT_DIPSETTING(    0x00, "2" )
14121433   PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNUSED )
14131434
1414   PORT_START("SSIO.IP4")   /* J6 1-8 */
1435   PORT_START("ssio:IP4")   /* J6 1-8 */
14151436   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
14161437
1417   PORT_START("SSIO.DIP")
1438   PORT_START("ssio:DIP")
14181439   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
14191440
14201441   PORT_START("FAKE")   /* fake port to make aiming up & down easier */
r14963r14964
14241445static INPUT_PORTS_START( dotrone )
14251446   PORT_INCLUDE(dotron)
14261447
1427   PORT_MODIFY("SSIO.IP2")
1448   PORT_MODIFY("ssio:IP2")
14281449   PORT_DIPNAME( 0x80, 0x00, DEF_STR( Cabinet ) )
14291450   PORT_DIPSETTING(    0x00, "Environmental" )
14301451   PORT_DIPSETTING(    0x80, DEF_STR( Upright ) )
r14963r14964
14331454
14341455/* verified from wiring diagram, plus DIP switches from manual */
14351456static INPUT_PORTS_START( nflfoot )
1436   PORT_START("SSIO.IP0")   /* J4 1-8 */
1457   PORT_START("ssio:IP0")   /* J4 1-8 */
14371458   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
14381459   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BILL1 )
14391460   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 )      /* continue game */
r14963r14964
14431464   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
14441465   PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
14451466
1446   PORT_START("SSIO.IP1")   /* J4 10-13,15-18 */
1467   PORT_START("ssio:IP1")   /* J4 10-13,15-18 */
14471468   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)    /* left engage */
14481469   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)    /* left select #1 play */
14491470   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)    /* left select #2 play */
r14963r14964
14531474   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_PLAYER(1)      /* select one player */
14541475   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
14551476
1456   PORT_START("SSIO.IP2")   /* J5 1-8 */
1477   PORT_START("ssio:IP2")   /* J5 1-8 */
14571478   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)    /* right engage */
14581479   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)    /* right select #1 play */
14591480   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)    /* right select #2 play */
r14963r14964
14631484   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_PLAYER(2)      /* select two player */
14641485   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SPECIAL )               /* connects to IPU board */
14651486
1466   PORT_START("SSIO.IP3")   /* DIPSW @ B3 */
1487   PORT_START("ssio:IP3")   /* DIPSW @ B3 */
14671488   PORT_DIPNAME( 0x01, 0x01, "Coin Meters" )
14681489   PORT_DIPSETTING(    0x01, "1" )
14691490   PORT_DIPSETTING(    0x00, "2" )
14701491   PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNUSED )
14711492
1472   PORT_START("SSIO.IP4")   /* J6 1-8 */
1493   PORT_START("ssio:IP4")   /* J6 1-8 */
14731494   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
14741495
1475   PORT_START("SSIO.DIP")
1496   PORT_START("ssio:DIP")
14761497   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
14771498INPUT_PORTS_END
14781499
r14963r14964
14801501/* "wiring diagram was not available at time of publication" according to the manual */
14811502/* DIPs verified from the manual */
14821503static INPUT_PORTS_START( demoderb )
1483   PORT_START("SSIO.IP0")   /* J4 1-8 */
1504   PORT_START("ssio:IP0")   /* J4 1-8 */
14841505   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
14851506   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
14861507   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
r14963r14964
14901511   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_TILT )
14911512   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
14921513
1493   PORT_START("SSIO.IP1")   /* J4 10-13,15-18 */   /* The high 6 bits contain the steering wheel value */
1514   PORT_START("ssio:IP1")   /* J4 10-13,15-18 */   /* The high 6 bits contain the steering wheel value */
14941515   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
14951516   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
14961517
1497   PORT_START("SSIO.IP1.ALT1")   /* J4 10-13,15-18 */   /* The high 6 bits contain the steering wheel value */
1518   PORT_START("ssio:IP1.ALT1")   /* J4 10-13,15-18 */   /* The high 6 bits contain the steering wheel value */
14981519   PORT_BIT( 0x3f, 0x00, IPT_DIAL ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_REVERSE PORT_PLAYER(1)
14991520
1500   PORT_START("SSIO.IP1.ALT2")   /* IN1 (muxed) -- the high 6 bits contain the steering wheel value */
1521   PORT_START("ssio:IP1.ALT2")   /* IN1 (muxed) -- the high 6 bits contain the steering wheel value */
15011522   PORT_BIT( 0x3f, 0x00, IPT_DIAL ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_REVERSE PORT_PLAYER(3)
15021523
1503   PORT_START("SSIO.IP2")   /* J5 1-8 */   /* The high 6 bits contain the steering wheel value */
1524   PORT_START("ssio:IP2")   /* J5 1-8 */   /* The high 6 bits contain the steering wheel value */
15041525   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
15051526   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
15061527
1507   PORT_START("SSIO.IP2.ALT1")   /* J5 1-8 */   /* The high 6 bits contain the steering wheel value */
1528   PORT_START("ssio:IP2.ALT1")   /* J5 1-8 */   /* The high 6 bits contain the steering wheel value */
15081529   PORT_BIT( 0x3f, 0x00, IPT_DIAL ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_REVERSE PORT_PLAYER(2)
15091530
1510   PORT_START("SSIO.IP2.ALT2")   /* IN2 (muxed) -- the high 6 bits contain the steering wheel value */
1531   PORT_START("ssio:IP2.ALT2")   /* IN2 (muxed) -- the high 6 bits contain the steering wheel value */
15111532   PORT_BIT( 0x3f, 0x00, IPT_DIAL ) PORT_SENSITIVITY(50) PORT_KEYDELTA(10) PORT_REVERSE PORT_PLAYER(4)
15121533
1513   PORT_START("SSIO.IP3")   /* DIPSW @ B3 */
1534   PORT_START("ssio:IP3")   /* DIPSW @ B3 */
15141535   PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet ) )
15151536   PORT_DIPSETTING(    0x01, "2P Upright" )
15161537   PORT_DIPSETTING(    0x00, "4P Cocktail" )
r14963r14964
15301551   PORT_DIPSETTING(    0x10, DEF_STR( 1C_2C ) )
15311552   PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNKNOWN )
15321553
1533   PORT_START("SSIO.IP4")   /* J6 1-8 */
1554   PORT_START("ssio:IP4")   /* J6 1-8 */
15341555   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN3 )
15351556   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN4 )
15361557   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START3 )
r14963r14964
15401561   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4)
15411562   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4)
15421563
1543   PORT_START("SSIO.DIP")
1564   PORT_START("ssio:DIP")
15441565   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
15451566
15461567INPUT_PORTS_END
r14963r14964
16351656   MCFG_VIDEO_START(mcr)
16361657
16371658   /* sound hardware */
1638   MCFG_FRAGMENT_ADD(mcr_ssio)
1659   MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
1660   MCFG_MIDWAY_SSIO_ADD("ssio")
1661   MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
1662   MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
16391663MACHINE_CONFIG_END
16401664
16411665
r14963r14964
16931717static MACHINE_CONFIG_DERIVED( mcr_91490_snt, mcr_91490 )
16941718
16951719   /* basic machine hardware */
1696   MCFG_FRAGMENT_ADD(squawk_n_talk)
1720   MCFG_MIDWAY_SQUAWK_N_TALK_ADD("snt")
1721   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
1722   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
16971723MACHINE_CONFIG_END
16981724
16991725
r14963r14964
17211747static MACHINE_CONFIG_DERIVED( mcr_91490_tcs, mcr_91490 )
17221748
17231749   /* basic machine hardware */
1724   MCFG_FRAGMENT_ADD(turbo_chip_squeak)
1750   MCFG_MIDWAY_TURBO_CHIP_SQUEAK_ADD("tcs")
1751   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
1752   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
17251753MACHINE_CONFIG_END
17261754
17271755
r14963r14964
17421770   ROM_LOAD( "sfcpu.6d",     0x5000, 0x1000, CRC(bd993cd9) SHA1(c074a6a40d0b9c0f4bf3fc5982263c89549fb338) )
17431771   ROM_LOAD( "sfcpu.7d",     0x6000, 0x1000, CRC(8ad8731d) SHA1(ffd19c3fbad3c5a240ab27963812cc300f3d7b89) )
17441772
1745   ROM_REGION( 0x10000, "ssiocpu", 0 )
1773   ROM_REGION( 0x10000, "ssio:cpu", 0 )
17461774   ROM_LOAD( "sfsnd.7a",     0x0000, 0x1000, CRC(cdecf83a) SHA1(5acd2709e214408d756b39916bb98cd4ecda7988) )
17471775   ROM_LOAD( "sfsnd.8a",     0x1000, 0x1000, CRC(cb7788cb) SHA1(9e86f9131a6f0fc96dd436e21baf45e215ee65f4) )
17481776   ROM_LOAD( "sfsnd.9a",     0x2000, 0x1000, CRC(304896ce) SHA1(00ff640eab50022da980cdc5ce8cedebaaebc9cf) )
r14963r14964
17711799   ROM_LOAD( "1600e-v2.d5",  0x4000, 0x1000, CRC(1d2834c0) SHA1(176fad90ab14c922a575c3d12a2c8a339d1518d4) )
17721800   ROM_LOAD( "1700f-v2.d6",  0x5000, 0x1000, CRC(ddf84ce1) SHA1(6f80b9a5cbd75b6e4af569ca4bcfcde7daaad64f) )
17731801
1774   ROM_REGION( 0x10000, "ssiocpu", 0 )
1802   ROM_REGION( 0x10000, "ssio:cpu", 0 )
17751803   ROM_LOAD( "4200-a.a7",    0x0000, 0x1000, CRC(9e35c02e) SHA1(92afd0126dcfb2d4401927b2cf261090e186b6fa) )
17761804   ROM_LOAD( "4300-b.a8",    0x1000, 0x1000, CRC(ca2b7c28) SHA1(fdcca3b755822c045c3c321cccc3f58112e2ad11) )
17771805   ROM_LOAD( "4400-c.a9",    0x2000, 0x1000, CRC(d1901551) SHA1(fd7d6059f8ac59f95ae6f8ef12fbfce7ed16ec12) )
r14963r14964
18001828   ROM_LOAD( "1600-e-ur.d5",  0x4000, 0x1000, CRC(f24bc0d7) SHA1(31dc996898c01f3427403e396a47444732904674) )
18011829   ROM_LOAD( "1700-f-ur.d6",  0x5000, 0x1000, CRC(672361fc) SHA1(010029460c25935f2156eb64c9109c26ce40b752) )
18021830
1803   ROM_REGION( 0x10000, "ssiocpu", 0 )
1831   ROM_REGION( 0x10000, "ssio:cpu", 0 )
18041832   ROM_LOAD( "4200-a.a7",    0x0000, 0x1000, CRC(9e35c02e) SHA1(92afd0126dcfb2d4401927b2cf261090e186b6fa) )
18051833   ROM_LOAD( "4300-b.a8",    0x1000, 0x1000, CRC(ca2b7c28) SHA1(fdcca3b755822c045c3c321cccc3f58112e2ad11) )
18061834   ROM_LOAD( "4400-c.a9",    0x2000, 0x1000, CRC(d1901551) SHA1(fd7d6059f8ac59f95ae6f8ef12fbfce7ed16ec12) )
r14963r14964
18291857   ROM_LOAD( "1600-e.d5",    0x4000, 0x1000, CRC(eaaa78a7) SHA1(3c057d486f3938561fb9947e0463b1255ae04ef9) )
18301858   ROM_LOAD( "1700-f.d6",    0x5000, 0x1000, CRC(c06c880f) SHA1(d5ac5682de316b9cb09d433e2c02746efadd2a81) )
18311859
1832   ROM_REGION( 0x10000, "ssiocpu", 0 )
1860   ROM_REGION( 0x10000, "ssio:cpu", 0 )
18331861   ROM_LOAD( "4200-a.a7",    0x0000, 0x1000, CRC(9e35c02e) SHA1(92afd0126dcfb2d4401927b2cf261090e186b6fa) )
18341862   ROM_LOAD( "4300-b.a8",    0x1000, 0x1000, CRC(ca2b7c28) SHA1(fdcca3b755822c045c3c321cccc3f58112e2ad11) )
18351863   ROM_LOAD( "4400-c.a9",    0x2000, 0x1000, CRC(d1901551) SHA1(fd7d6059f8ac59f95ae6f8ef12fbfce7ed16ec12) )
r14963r14964
18591887   ROM_LOAD( "sh-pro.04",    0x8000, 0x2000, CRC(22fa9175) SHA1(fd8ea76b3a7ffaf48fc11dd3b7c58e548e3e57c5) )
18601888   ROM_LOAD( "sh-pro.05",    0xa000, 0x2000, CRC(1716e2bb) SHA1(771e4c20d63e4e1d99723e6355db67064a278ae5) )
18611889
1862   ROM_REGION( 0x10000, "ssiocpu", 0 )
1890   ROM_REGION( 0x10000, "ssio:cpu", 0 )
18631891   ROM_LOAD( "sh-snd.01",    0x0000, 0x1000, CRC(55a297cc) SHA1(b34f37fca61cdba26b5671feee991d133b8697a4) )
18641892   ROM_LOAD( "sh-snd.02",    0x1000, 0x1000, CRC(46fc31f6) SHA1(9b1a56962b2d210b1013bc35de780c6d5b3eb4bc) )
18651893   ROM_LOAD( "sh-snd.03",    0x2000, 0x1000, CRC(b1f4a6a8) SHA1(ba724f9cc0cc35dd31d4ad8b36a51da9d6cbfbcf) )
r14963r14964
18871915   ROM_LOAD( "sh-pro.04",    0x8000, 0x2000, CRC(22fa9175) SHA1(fd8ea76b3a7ffaf48fc11dd3b7c58e548e3e57c5) )
18881916   ROM_LOAD( "sh-pro.05",    0xa000, 0x2000, CRC(1716e2bb) SHA1(771e4c20d63e4e1d99723e6355db67064a278ae5) )
18891917
1890   ROM_REGION( 0x10000, "ssiocpu", 0 )
1918   ROM_REGION( 0x10000, "ssio:cpu", 0 )
18911919   ROM_LOAD( "snd-0.a7",     0x0000, 0x1000, CRC(9d815bb3) SHA1(51af797e08dbe3921e11ce70c3d0da50979336a4) )
18921920   ROM_LOAD( "snd-1.a8",     0x1000, 0x1000, CRC(9f253412) SHA1(a526e864073a2f9e67e2cbe53ab17fe726336241) )
18931921   ROM_LOAD( "snd-2.a9",     0x2000, 0x1000, CRC(7783d6c6) SHA1(1fb2117532e7da28afdb9837bcb6848165cf8173) )
r14963r14964
19191947   ROM_LOAD( "scpu_pge.d6", 0x8000, 0x2000, CRC(24c185d8) SHA1(45ac7c53f6f4eba5c7bf3fc6559cddd3821eddad) )
19201948   ROM_LOAD( "scpu_pgf.d7", 0xA000, 0x2000, CRC(38c4bbaf) SHA1(a7cd496ce75199b8279ea963520cf70d5f562bb2) )
19211949
1922   ROM_REGION( 0x10000, "ssiocpu", 0 ) /* ROM's located on the Super Sound I/O Board (90913) */
1950   ROM_REGION( 0x10000, "ssio:cpu", 0 ) /* ROM's located on the Super Sound I/O Board (90913) */
19231951   ROM_LOAD( "ssi_0a.a7",   0x0000, 0x1000, CRC(765e6eba) SHA1(42efeefc8571dfc237c0be3368248f1e56add92e) )
19241952   ROM_LOAD( "ssi_0b.a8",   0x1000, 0x1000, CRC(1b90ccdd) SHA1(0876e5eeaa63bb8cc97f3634a6ddd8a29a9b012f) )
19251953   ROM_LOAD( "ssi_0c.a9",   0x2000, 0x1000, CRC(3a4bc629) SHA1(ce8452a99a313ae7429de471bbea39de08c9fd4b) )
r14963r14964
19581986   ROM_LOAD( "scpu_pge.d6", 0x8000, 0x2000, CRC(24c185d8) SHA1(45ac7c53f6f4eba5c7bf3fc6559cddd3821eddad) )
19591987   ROM_LOAD( "scpu_pgf.d7", 0xa000, 0x2000, CRC(38c4bbaf) SHA1(a7cd496ce75199b8279ea963520cf70d5f562bb2) )
19601988
1961   ROM_REGION( 0x10000, "ssiocpu", 0 ) /* ROM's located on the Super Sound I/O Board (90913) */
1989   ROM_REGION( 0x10000, "ssio:cpu", 0 ) /* ROM's located on the Super Sound I/O Board (90913) */
19621990   ROM_LOAD( "ssi_0a.a7",   0x0000, 0x1000, CRC(765e6eba) SHA1(42efeefc8571dfc237c0be3368248f1e56add92e) )
19631991   ROM_LOAD( "ssi_0b.a8",   0x1000, 0x1000, CRC(1b90ccdd) SHA1(0876e5eeaa63bb8cc97f3634a6ddd8a29a9b012f) )
19641992   ROM_LOAD( "ssi_0c.a9",   0x2000, 0x1000, CRC(3a4bc629) SHA1(ce8452a99a313ae7429de471bbea39de08c9fd4b) )
r14963r14964
19972025   ROM_LOAD( "scpu_pge(__0617).d6", 0x8000, 0x2000, CRC(ea198fa8) SHA1(d8c97ea87d504e77edc38c87c2953c8c4f1a405b) )
19982026   ROM_LOAD( "scpu_pgf(__0617).d7", 0xa000, 0x2000, CRC(4325fb08) SHA1(70727aa37354425315d8a8b3ca07bbe91f7e8f08) )
19992027
2000   ROM_REGION( 0x10000, "ssiocpu", 0 ) /* ROM's located on the Super Sound I/O Board (90913) */
2028   ROM_REGION( 0x10000, "ssio:cpu", 0 ) /* ROM's located on the Super Sound I/O Board (90913) */
20012029   ROM_LOAD( "ssi_0a.a7",   0x0000, 0x1000, CRC(765e6eba) SHA1(42efeefc8571dfc237c0be3368248f1e56add92e) )
20022030   ROM_LOAD( "ssi_0b.a8",   0x1000, 0x1000, CRC(1b90ccdd) SHA1(0876e5eeaa63bb8cc97f3634a6ddd8a29a9b012f) )
20032031   ROM_LOAD( "ssi_0c.a9",   0x2000, 0x1000, CRC(3a4bc629) SHA1(ce8452a99a313ae7429de471bbea39de08c9fd4b) )
r14963r14964
20362064   ROM_LOAD( "pge-615.d6",   0x8000, 0x2000, CRC(ea198fa8) SHA1(d8c97ea87d504e77edc38c87c2953c8c4f1a405b) )
20372065   ROM_LOAD( "pgf-615.d7",   0xa000, 0x2000, CRC(790ee743) SHA1(14dc84b2bbaab22772e0579f11fe0bf136a0ddab) )
20382066
2039   ROM_REGION( 0x10000, "ssiocpu", 0 ) /* ROM's located on the Super Sound I/O Board (90913) */
2067   ROM_REGION( 0x10000, "ssio:cpu", 0 ) /* ROM's located on the Super Sound I/O Board (90913) */
20402068   ROM_LOAD( "ssi_oa.a7",    0x0000, 0x1000, CRC(2cbb332b) SHA1(48d1cbb336733588af728a3d0e02c8613d2b5fb2) )
20412069   ROM_LOAD( "ssi_ob.a8",    0x1000, 0x1000, CRC(1355b7e6) SHA1(61ed045212da67cd449910ae601058cf209b37e5) )
20422070   ROM_LOAD( "ssi_oc.a9",    0x2000, 0x1000, CRC(6dd4b7c9) SHA1(1ce78c242d1a7d9a4524a663a42fc8bc2870053a) )
r14963r14964
20712099   ROM_LOAD( "kozmkcpu.5d",  0x6000, 0x2000, CRC(a0ec38c1) SHA1(adf3ef36355d255e4ebc0d4dc86b9d7910e26b03) )
20722100   ROM_LOAD( "kozmkcpu.6d",  0x8000, 0x2000, CRC(7044f2b6) SHA1(55b64c9233fe0c8b351688fab29aad049d49faf2) )
20732101
2074   ROM_REGION( 0x10000, "ssiocpu", 0 )
2102   ROM_REGION( 0x10000, "ssio:cpu", 0 )
20752103   ROM_LOAD( "kozmksnd.7a",  0x0000, 0x1000, CRC(6736e433) SHA1(d43216ef34a67f047b7c35001767d838386add7d) )
20762104   ROM_LOAD( "kozmksnd.8a",  0x1000, 0x1000, CRC(ea9cd919) SHA1(a1533b2857c881c83adce2c7bbfaa4a3148ead8e) )
20772105   ROM_LOAD( "kozmksnd.9a",  0x2000, 0x1000, CRC(9dfa7994) SHA1(0a2d824e9fe1d48c43027f5f10f4c43476f08e07) )
r14963r14964
20982126   ROM_LOAD( "dmanpg2.bin",  0x4000, 0x2000, CRC(7dd2177a) SHA1(b4b17e2580679fbe340d8b8d8cb7171c49ae0a21) )
20992127   ROM_LOAD( "dmanpg3.bin",  0x6000, 0x2000, CRC(f2e0aa44) SHA1(2f04dc74c69dfe3847d5e4330e560b0a9f18c33a) )
21002128
2101   ROM_REGION( 0x10000, "ssiocpu", 0 )
2129   ROM_REGION( 0x10000, "ssio:cpu", 0 )
21022130   ROM_LOAD( "dm-a7.snd",    0x0000, 0x1000, CRC(fa982dcc) SHA1(970340bfa0ac13ad8c2bf5adc21d7ca7aa9e525a) )
21032131   ROM_LOAD( "dm-a8.snd",    0x1000, 0x1000, CRC(72839019) SHA1(4aa278cfb00fac76cba88600bb300ee88ec3f7ee) )
21042132   ROM_LOAD( "dm-a9.snd",    0x2000, 0x1000, CRC(ad760da7) SHA1(024fce0f5d46e82b66c4283925556130735b863e) )
r14963r14964
21262154   ROM_LOAD( "wackocpu.4d",  0x4000, 0x2000, CRC(515edff7) SHA1(9288cb5efb51086ef8610eecf8e3feae1da9fc2a) )
21272155   ROM_LOAD( "wackocpu.5d",  0x6000, 0x2000, CRC(9b01bf32) SHA1(d209ba2503d7b54786f74107bb399313a08a09ba) )
21282156
2129   ROM_REGION( 0x10000, "ssiocpu", 0 )
2157   ROM_REGION( 0x10000, "ssio:cpu", 0 )
21302158   ROM_LOAD( "wackosnd.7a",  0x0000, 0x1000, CRC(1a58763f) SHA1(37f0870d67d52c86ae2d188e9beaa56a3a8fa130) )
21312159   ROM_LOAD( "wackosnd.8a",  0x1000, 0x1000, CRC(a4e3c771) SHA1(fe677090423e1d80cde07d2e74be8380d8c55e95) )
21322160   ROM_LOAD( "wackosnd.9a",  0x2000, 0x1000, CRC(155ba3dd) SHA1(51aaeeb68b2b7eb8238c7c3b06e84dcf44683ee9) )
r14963r14964
21532181   ROM_LOAD( "cpu_d4",  0x4000, 0x2000, CRC(f1ab8c4d) SHA1(0c410ddd2e1cd8a19c73bc0c7aca70d8c4308eeb) )
21542182   ROM_LOAD( "cpu_d5",  0x6000, 0x2000, CRC(d7129900) SHA1(af5093082cfbc9fa4b42cfc74e62adbf9b6c63db) )
21552183
2156   ROM_REGION( 0x10000, "ssiocpu", 0 )
2184   ROM_REGION( 0x10000, "ssio:cpu", 0 )
21572185   ROM_LOAD( "ssio_a7",   0x0000, 0x1000, CRC(64ddc16c) SHA1(e119e1702ea00ffb86d413ed8e68b4e9dfefa79e) )
21582186   ROM_LOAD( "ssio_a8",   0x1000, 0x1000, CRC(c3467612) SHA1(c968776d9561a7ac67e95a987b6d826ec2dc748e) )
21592187   ROM_LOAD( "ssio_a9",   0x2000, 0x1000, CRC(c50f7b2d) SHA1(0f4779d4955d500c50b544d945fa78a5428b86ce) )
r14963r14964
21792207   ROM_LOAD( "2tgrpg2.bin",  0x4000, 0x2000, CRC(b5ca3f17) SHA1(ac51eefe9ff49bc358daf58525e529070684ed1b) )
21802208   ROM_LOAD( "2tgrpg3.bin",  0x6000, 0x2000, CRC(8aa82049) SHA1(6e42d082d29986f5c0698ae39750fb8f9eb1e6cd) )
21812209
2182   ROM_REGION( 0x10000, "ssiocpu", 0 )
2210   ROM_REGION( 0x10000, "ssio:cpu", 0 )
21832211   ROM_LOAD( "2tgra7.bin",   0x0000, 0x1000, CRC(4620d970) SHA1(2c2c1da84199b846575a6291dc235f30539959fa) )
21842212   ROM_LOAD( "2tgra8.bin",   0x1000, 0x1000, CRC(e95d8cfe) SHA1(846d5543596bb86cf08f998056c1fc695cb4f62c) )
21852213   ROM_LOAD( "2tgra9.bin",   0x2000, 0x1000, CRC(81e6ce0e) SHA1(77e145e150763bfe5760ac3e4f68218a65b9bfe0) )
r14963r14964
22072235   ROM_LOAD( "d5",           0x6000, 0x2000, CRC(c3023931) SHA1(e591a18c5fc8befcd9f2b93d9131374c572cdbcd) )
22082236   ROM_LOAD( "d6",           0x8000, 0x2000, CRC(5d445c99) SHA1(df2bce203f510b4bda42bb7114b79eb0b2b4e2e0) )
22092237
2210   ROM_REGION( 0x10000, "ssiocpu", 0 )
2238   ROM_REGION( 0x10000, "ssio:cpu", 0 )
22112239   ROM_LOAD( "a",            0x0000, 0x1000, CRC(2524a2aa) SHA1(4bd78b4fb42c2506fa6734419b42cbbe4c240e94) )
22122240   ROM_LOAD( "b",            0x1000, 0x1000, CRC(b8e35814) SHA1(379308431d1204d6cb5ae8a13e378ec7b3fab0a9) )
22132241   ROM_LOAD( "c",            0x2000, 0x1000, CRC(09c488cf) SHA1(7aa3321db748f2612693f8348e590369e8d48140) )
r14963r14964
22392267   ROM_LOAD( "tappg2.bin",   0x08000, 0x4000, CRC(3a1f8778) SHA1(cb46a2248289ced7282b1463f433dcb970c42c1a) )
22402268   ROM_LOAD( "tappg3.bin",   0x0c000, 0x2000, CRC(e8dcdaa4) SHA1(45bf1571a2418c7dc00ccc7061a3e04e65cb6bff) )
22412269
2242   ROM_REGION( 0x10000, "ssiocpu", 0 )
2270   ROM_REGION( 0x10000, "ssio:cpu", 0 )
22432271   ROM_LOAD( "tapsnda7.bin", 0x0000, 0x1000, CRC(0e8bb9d5) SHA1(9e281c340b7702523c86d56317efad9e3688e585) )
22442272   ROM_LOAD( "tapsnda8.bin", 0x1000, 0x1000, CRC(0cf0e29b) SHA1(14334b9d2bfece3fe5bda0cbd53158ead8d27e53) )
22452273   ROM_LOAD( "tapsnda9.bin", 0x2000, 0x1000, CRC(31eb6dc6) SHA1(b38bba5f12516d899e023f99147868e3402fbd7b) )
r14963r14964
22702298   ROM_LOAD( "pr02_3c.128",   0x08000, 0x4000, CRC(b3755d41) SHA1(434d3c27b9f1e43def081d79b9f56dbce93a9207) )
22712299   ROM_LOAD( "pr03_4c.64",    0x0c000, 0x2000, CRC(77273096) SHA1(5e4e2dc1703b39f588ba374f6a610f273d710532) )
22722300
2273   ROM_REGION( 0x10000, "ssiocpu", 0 )
2301   ROM_REGION( 0x10000, "ssio:cpu", 0 )
22742302   ROM_LOAD( "tapsnda7.bin", 0x0000, 0x1000, CRC(0e8bb9d5) SHA1(9e281c340b7702523c86d56317efad9e3688e585) )
22752303   ROM_LOAD( "tapsnda8.bin", 0x1000, 0x1000, CRC(0cf0e29b) SHA1(14334b9d2bfece3fe5bda0cbd53158ead8d27e53) )
22762304   ROM_LOAD( "tapsnda9.bin", 0x2000, 0x1000, CRC(31eb6dc6) SHA1(b38bba5f12516d899e023f99147868e3402fbd7b) )
r14963r14964
23012329   ROM_LOAD( "5793",         0x8000, 0x4000, CRC(fecbf683) SHA1(de365f4e567d93a9ed9672fabbc739a3a0d47d59) )
23022330   ROM_LOAD( "5794",         0xc000, 0x2000, CRC(5bdc1916) SHA1(ee038443ae55598568bd1a53c0a671a2828d3949) )
23032331
2304   ROM_REGION( 0x10000, "ssiocpu", 0 )
2332   ROM_REGION( 0x10000, "ssio:cpu", 0 )
23052333   ROM_LOAD( "5788",         0x00000, 0x1000, CRC(5c1d0982) SHA1(c2c94ab26ebce30ce4efc239e555c6368794d265) )
23062334   ROM_LOAD( "5787",         0x01000, 0x1000, CRC(09e74ed8) SHA1(f5c8585d443bca67d4065314a06431d1f104c553) )
23072335   ROM_LOAD( "5786",         0x02000, 0x1000, CRC(c3e98284) SHA1(2a4dc0deca48f4d2ac9fe673ecb9548415c996a9) )
r14963r14964
23322360   ROM_LOAD( "rbtpg2.bin",   0x08000, 0x4000, CRC(0b332c97) SHA1(b9878c8a61a98e787e547bb6ab81c809875891f3) )
23332361   ROM_LOAD( "rbtpg3.bin",   0x0c000, 0x2000, CRC(698c06f2) SHA1(ddb21e39ede2222cb2286ec9dba06341fe1c9db7) )
23342362
2335   ROM_REGION( 0x10000, "ssiocpu", 0 )
2363   ROM_REGION( 0x10000, "ssio:cpu", 0 )
23362364   ROM_LOAD( "5788",         0x00000, 0x1000, CRC(5c1d0982) SHA1(c2c94ab26ebce30ce4efc239e555c6368794d265) )
23372365   ROM_LOAD( "5787",         0x01000, 0x1000, CRC(09e74ed8) SHA1(f5c8585d443bca67d4065314a06431d1f104c553) )
23382366   ROM_LOAD( "5786",         0x02000, 0x1000, CRC(c3e98284) SHA1(2a4dc0deca48f4d2ac9fe673ecb9548415c996a9) )
r14963r14964
23642392   ROM_LOAD( "timpg2.bin",   0x08000, 0x4000, CRC(632989f9) SHA1(9e9dc343746299bb0dc7ada206211366c5a05075) )
23652393   ROM_LOAD( "timpg3.bin",   0x0c000, 0x2000, CRC(dae8a0dc) SHA1(f065fa3184efa6524d4f950616f3fbae4ea17513) )
23662394
2367   ROM_REGION( 0x10000, "ssiocpu", 0 )
2395   ROM_REGION( 0x10000, "ssio:cpu", 0 )
23682396   ROM_LOAD( "tima7.bin",    0x00000, 0x1000, CRC(c615dc3e) SHA1(664d5e3ac3936fd04a855ee0c88f1c1b4d1dea5b) )
23692397   ROM_LOAD( "tima8.bin",    0x01000, 0x1000, CRC(83841c87) SHA1(bd5a2e567e015e10e45651e15b42ffb3b69d2305) )
23702398   ROM_LOAD( "tima9.bin",    0x02000, 0x1000, CRC(22bcdcd3) SHA1(69cedc8cec52ca310f828dfe73d7de04729b06d3) )
r14963r14964
23952423   ROM_LOAD( "loc-pg2.3c",   0x08000, 0x4000, CRC(ab0b3800) SHA1(457a18bd98a3c4a9f893a3704dbc7d0fde4ef8ba) )
23962424   ROM_LOAD( "loc-pg1.4c",   0x0c000, 0x2000, CRC(f98c9f8e) SHA1(a215f0fd6cd9e8cacbe06cb7bfe4e2cced150c86) )
23972425
2398   ROM_REGION( 0x10000, "ssiocpu", 0 )
2426   ROM_REGION( 0x10000, "ssio:cpu", 0 )
23992427   ROM_LOAD( "sound0.a7",    0x00000, 0x1000, CRC(6d39bf19) SHA1(3d27466fcb6d41133f16119cddb815833c8b4eda) )
24002428   ROM_LOAD( "sound1.a8",    0x01000, 0x1000, CRC(ac872e1d) SHA1(c2833b20e124c505be3d5be2c885b9cf9927ca4c) )
24012429   ROM_LOAD( "sound2.a9",    0x02000, 0x1000, CRC(e8ef6519) SHA1(261b0463a73b403bc46df3e04f3d12173787d6e7) )
r14963r14964
24262454   ROM_LOAD( "aloc-pg2.3c",  0x08000, 0x4000, CRC(cb89c9be) SHA1(c773a68891fbf94808a2ee0036928c0c48d6673d) )
24272455   ROM_LOAD( "aloc-pg1.4c",  0x0c000, 0x2000, CRC(5098faf4) SHA1(9f861f99cb170513b68aee48bbfd60ee439d7fa9) )
24282456
2429   ROM_REGION( 0x10000, "ssiocpu", 0 )
2457   ROM_REGION( 0x10000, "ssio:cpu", 0 )
24302458   ROM_LOAD( "asound0.a7",   0x00000, 0x1000, CRC(7fb54293) SHA1(6d538a3e48f98e269623850f1f6774848a89fd59) )
24312459   ROM_LOAD( "asound1.a8",   0x01000, 0x1000, CRC(edef7326) SHA1(5c9a64604252eea0628bf9d6221e8add82f66abe) )
24322460   ROM_LOAD( "sound2.a9",    0x02000, 0x1000, CRC(e8ef6519) SHA1(261b0463a73b403bc46df3e04f3d12173787d6e7) )
r14963r14964
24572485   ROM_LOAD( "loc-cpu3",     0x08000, 0x4000, CRC(94bb1a0e) SHA1(af4769fac39e67eff840675bf93cc4304f2875fd) )
24582486   ROM_LOAD( "loc-cpu4",     0x0c000, 0x2000, CRC(c137383c) SHA1(ccf7cf9c7c0528aa819cfca34c1c0e89ab2d586a) )
24592487
2460   ROM_REGION( 0x10000, "ssiocpu", 0 )
2488   ROM_REGION( 0x10000, "ssio:cpu", 0 )
24612489   ROM_LOAD( "loc-a",        0x00000, 0x1000, CRC(2de6a8a8) SHA1(6bba00daed8836297f3189db4e4fe8e158adc465) )
24622490   ROM_LOAD( "loc-b",        0x01000, 0x1000, CRC(4097663e) SHA1(afb5224529550cec378415a5cd81b47f6c6c101b) )
24632491   ROM_LOAD( "loc-c",        0x02000, 0x1000, CRC(f576b9e7) SHA1(4ff39c46c390aa93d900f5f7a0b35fa71f066863) )
24642492   ROM_LOAD( "loc-d",        0x03000, 0x1000, CRC(74b0059e) SHA1(1fe393721446538036fb6110fdc3920959ebd596) )
24652493
2466   ROM_REGION( 0x10000, "sntcpu", 0 )
2494   ROM_REGION( 0x10000, "snt:cpu", 0 )
24672495   ROM_LOAD( "pre.u3",       0x09000, 0x1000, CRC(c3d0f762) SHA1(a1857641c35b5bcb33f29fe79a1a581c4cbf129b) )
24682496   ROM_LOAD( "pre.u4",       0x0a000, 0x1000, CRC(7ca79b43) SHA1(c995e1e67d70706a090eb777e9fec0f1ba03f82d) )
24692497   ROM_LOAD( "pre.u5",       0x0b000, 0x1000, CRC(24e9618e) SHA1(eb245ff381a76b314a0ed3519e140444afae341c) )
r14963r14964
24942522   ROM_LOAD( "nflcpupg.2c",  0x04000, 0x4000, CRC(2aa76168) SHA1(608df883f5e960153a963404d5cc4b4ce4ec435d) )
24952523   ROM_LOAD( "nflcpupg.3c",  0x08000, 0x4000, CRC(5ec01e09) SHA1(2bf60ab7d47f53583b677195976d6f6a9e90c55c) )
24962524
2497   ROM_REGION( 0x10000, "ssiocpu", 0 )
2525   ROM_REGION( 0x10000, "ssio:cpu", 0 )
24982526   ROM_LOAD( "nflsnd.a7",    0x0000, 0x1000, CRC(1339be2e) SHA1(5c1743f4d20f94053eb306d3749057608df4a6a2) )
24992527   ROM_LOAD( "nflsnd.a8",    0x1000, 0x1000, CRC(8630b560) SHA1(0c537f48184d3a7a9ee51c30d7c33dc39c46e823) )
25002528   ROM_LOAD( "nflsnd.a9",    0x2000, 0x1000, CRC(1e0fe4c8) SHA1(718dfaced2d8d84dab4c32265bed422e07af0f9e) )
25012529
2502   ROM_REGION( 0x10000, "sntcpu", 0 )
2530   ROM_REGION( 0x10000, "snt:cpu", 0 )
25032531   ROM_LOAD( "nfl-sqtk-11-15-83.u2", 0x08000, 0x1000, CRC(aeddda31) SHA1(8ebe9d8606c4328b1b3f4633db30d7636acf210b) )
25042532   ROM_LOAD( "nfl-sqtk-11-15-83.u3", 0x09000, 0x1000, CRC(36229d13) SHA1(d174098ce1e4bc89ded15a08db37933ab9532f2b) )
25052533   ROM_LOAD( "nfl-sqtk-11-15-83.u4", 0x0a000, 0x1000, CRC(b202439b) SHA1(b09e94b0b176f80b12fb4cefa6efd5b2cccb6192) )
r14963r14964
25342562   ROM_LOAD( "dd_pro1",      0x04000, 0x4000, CRC(4c713bfe) SHA1(493b6ba01e86e7586ad123c53cf7f0a0c191d670) )
25352563   ROM_LOAD( "dd_pro2",      0x08000, 0x4000, CRC(c2cbd2a4) SHA1(fa642b2f61ff5529ab688a43c1dc14357a4eba6f) )
25362564
2537   ROM_REGION( 0x10000, "ssiocpu", ROMREGION_ERASE00 )   /* 64k for the audio CPU, not populated */
2565   ROM_REGION( 0x10000, "ssio:cpu", ROMREGION_ERASE00 )   /* 64k for the audio CPU, not populated */
25382566
2539   ROM_REGION( 0x10000, "tcscpu", 0 )   /* 64k for the Turbo Cheap Squeak */
2567   ROM_REGION( 0x10000, "tcs:cpu", 0 )   /* 64k for the Turbo Cheap Squeak */
25402568   ROM_LOAD( "tcs_u5.bin",   0x0c000, 0x2000, CRC(eca33b2c) SHA1(938b021ea3b0f23aed7a98a930a58af371a02303) )
25412569   ROM_LOAD( "tcs_u4.bin",   0x0e000, 0x2000, CRC(3490289a) SHA1(a9d56ea60bb901267da41ab408f8e1ed3742b0ac) )
25422570
r14963r14964
25762604
25772605   state_save_register_global(machine, input_mux);
25782606   state_save_register_global(machine, last_op4);
2607   
2608   midway_ssio_device *ssio = machine.device<midway_ssio_device>("ssio");
2609   if (ssio != NULL)
2610   {
2611      mcr_state *state = machine.driver_data<mcr_state>();
2612      ssio->set_custom_output(0, 0xff, write8_delegate(FUNC(mcr_state::mcr_control_port_w), state));
2613   }
25792614}
25802615
25812616
25822617static DRIVER_INIT( solarfox )
25832618{
25842619   mcr_init(machine, 90009, 91399, 90908);
2585   mcr_sound_init(machine, MCR_SSIO);
25862620
25872621   mcr_state *state = machine.driver_data<mcr_state>();
2588   ssio_set_custom_input(0, 0x1c, read8_delegate(FUNC(mcr_state::solarfox_ip0_r),state));
2589   ssio_set_custom_input(1, 0xff, read8_delegate(FUNC(mcr_state::solarfox_ip1_r),state));
2622   machine.device<midway_ssio_device>("ssio")->set_custom_input(0, 0x1c, read8_delegate(FUNC(mcr_state::solarfox_ip0_r),state));
2623   machine.device<midway_ssio_device>("ssio")->set_custom_input(1, 0xff, read8_delegate(FUNC(mcr_state::solarfox_ip1_r),state));
25902624
25912625   mcr12_sprite_xoffs = 16;
25922626}
r14963r14964
25952629static DRIVER_INIT( kick )
25962630{
25972631   mcr_init(machine, 90009, 91399, 90908);
2598   mcr_sound_init(machine, MCR_SSIO);
25992632
26002633   mcr_state *state = machine.driver_data<mcr_state>();
2601   ssio_set_custom_input(1, 0xf0, read8_delegate(FUNC(mcr_state::kick_ip1_r),state));
2634   machine.device<midway_ssio_device>("ssio")->set_custom_input(1, 0xf0, read8_delegate(FUNC(mcr_state::kick_ip1_r),state));
26022635
26032636   mcr12_sprite_xoffs_flip = 16;
26042637}
r14963r14964
26072640static DRIVER_INIT( mcr_90010 )
26082641{
26092642   mcr_init(machine, 90010, 91399, 90913);
2610   mcr_sound_init(machine, MCR_SSIO);
26112643}
26122644
26132645
26142646static DRIVER_INIT( wacko )
26152647{
26162648   mcr_init(machine, 90010, 91399, 90913);
2617   mcr_sound_init(machine, MCR_SSIO);
26182649
26192650   mcr_state *state = machine.driver_data<mcr_state>();
2620   ssio_set_custom_input(1, 0xff, read8_delegate(FUNC(mcr_state::wacko_ip1_r),state));
2621   ssio_set_custom_input(2, 0xff, read8_delegate(FUNC(mcr_state::wacko_ip2_r),state));
2622   ssio_set_custom_output(4, 0x01, write8_delegate(FUNC(mcr_state::wacko_op4_w),state));
2651   machine.device<midway_ssio_device>("ssio")->set_custom_input(1, 0xff, read8_delegate(FUNC(mcr_state::wacko_ip1_r),state));
2652   machine.device<midway_ssio_device>("ssio")->set_custom_input(2, 0xff, read8_delegate(FUNC(mcr_state::wacko_ip2_r),state));
2653   machine.device<midway_ssio_device>("ssio")->set_custom_output(4, 0x01, write8_delegate(FUNC(mcr_state::wacko_op4_w),state));
26232654}
26242655
26252656
26262657static DRIVER_INIT( twotiger )
26272658{
26282659   mcr_init(machine, 90010, 91399, 90913);
2629   mcr_sound_init(machine, MCR_SSIO);
26302660
26312661   mcr_state *state = machine.driver_data<mcr_state>();
2632   ssio_set_custom_output(4, 0xff, write8_delegate(FUNC(mcr_state::twotiger_op4_w),state));
2662   machine.device<midway_ssio_device>("ssio")->set_custom_output(4, 0xff, write8_delegate(FUNC(mcr_state::twotiger_op4_w),state));
26332663   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_readwrite_handler(0xe800, 0xefff, 0, 0x1000, read8_delegate(FUNC(mcr_state::twotiger_videoram_r),state), write8_delegate(FUNC(mcr_state::twotiger_videoram_w),state));
26342664}
26352665
r14963r14964
26372667static DRIVER_INIT( kroozr )
26382668{
26392669   mcr_init(machine, 90010, 91399, 91483);
2640   mcr_sound_init(machine, MCR_SSIO);
26412670
26422671   mcr_state *state = machine.driver_data<mcr_state>();
2643   ssio_set_custom_input(1, 0x47, read8_delegate(FUNC(mcr_state::kroozr_ip1_r),state));
2644   ssio_set_custom_output(4, 0x34, write8_delegate(FUNC(mcr_state::kroozr_op4_w),state));
2672   machine.device<midway_ssio_device>("ssio")->set_custom_input(1, 0x47, read8_delegate(FUNC(mcr_state::kroozr_ip1_r),state));
2673   machine.device<midway_ssio_device>("ssio")->set_custom_output(4, 0x34, write8_delegate(FUNC(mcr_state::kroozr_op4_w),state));
26452674}
26462675
26472676
26482677static DRIVER_INIT( journey )
26492678{
26502679   mcr_init(machine, 91475, 91464, 90913);
2651   mcr_sound_init(machine, MCR_SSIO);
26522680
26532681   mcr_state *state = machine.driver_data<mcr_state>();
2654   ssio_set_custom_output(4, 0x01, write8_delegate(FUNC(mcr_state::journey_op4_w),state));
2682   machine.device<midway_ssio_device>("ssio")->set_custom_output(4, 0x01, write8_delegate(FUNC(mcr_state::journey_op4_w),state));
26552683}
26562684
26572685
26582686static DRIVER_INIT( mcr_91490 )
26592687{
26602688   mcr_init(machine, 91490, 91464, 90913);
2661   mcr_sound_init(machine, MCR_SSIO);
26622689}
26632690
26642691
26652692static DRIVER_INIT( dotrone )
26662693{
26672694   mcr_init(machine, 91490, 91464, 91657);
2668   mcr_sound_init(machine, MCR_SSIO | MCR_SQUAWK_N_TALK);
26692695
26702696   mcr_state *state = machine.driver_data<mcr_state>();
2671   ssio_set_custom_output(4, 0xff, write8_delegate(FUNC(mcr_state::dotron_op4_w),state));
2697   machine.device<midway_ssio_device>("ssio")->set_custom_output(4, 0xff, write8_delegate(FUNC(mcr_state::dotron_op4_w),state));
26722698}
26732699
26742700
26752701static DRIVER_INIT( nflfoot )
26762702{
26772703   mcr_init(machine, 91490, 91464, 91657);
2678   mcr_sound_init(machine, MCR_SSIO | MCR_SQUAWK_N_TALK);
26792704
26802705   mcr_state *state = machine.driver_data<mcr_state>();
2681   ssio_set_custom_input(2, 0x80, read8_delegate(FUNC(mcr_state::nflfoot_ip2_r),state));
2682   ssio_set_custom_output(4, 0xff, write8_delegate(FUNC(mcr_state::nflfoot_op4_w),state));
2706   machine.device<midway_ssio_device>("ssio")->set_custom_input(2, 0x80, read8_delegate(FUNC(mcr_state::nflfoot_ip2_r),state));
2707   machine.device<midway_ssio_device>("ssio")->set_custom_output(4, 0xff, write8_delegate(FUNC(mcr_state::nflfoot_op4_w),state));
26832708
26842709   nflfoot_serial_out_active = FALSE;
26852710   nflfoot_serial_in_active = FALSE;
r14963r14964
26962721static DRIVER_INIT( demoderb )
26972722{
26982723   mcr_init(machine, 91490, 91464, 90913);
2699   mcr_sound_init(machine, MCR_SSIO | MCR_TURBO_CHIP_SQUEAK);
27002724
27012725   mcr_state *state = machine.driver_data<mcr_state>();
2702   ssio_set_custom_input(1, 0xfc, read8_delegate(FUNC(mcr_state::demoderb_ip1_r),state));
2703   ssio_set_custom_input(2, 0xfc, read8_delegate(FUNC(mcr_state::demoderb_ip2_r),state));
2704   ssio_set_custom_output(4, 0xff, write8_delegate(FUNC(mcr_state::demoderb_op4_w),state));
2726   machine.device<midway_ssio_device>("ssio")->set_custom_input(1, 0xfc, read8_delegate(FUNC(mcr_state::demoderb_ip1_r),state));
2727   machine.device<midway_ssio_device>("ssio")->set_custom_input(2, 0xfc, read8_delegate(FUNC(mcr_state::demoderb_ip2_r),state));
2728   machine.device<midway_ssio_device>("ssio")->set_custom_output(4, 0xff, write8_delegate(FUNC(mcr_state::demoderb_op4_w),state));
27052729
27062730   /* the SSIO Z80 doesn't have any program to execute */
2707   machine.device<cpu_device>("tcscpu")->suspend(SUSPEND_REASON_DISABLE, 1);
2731   machine.device<cpu_device>("ssio:cpu")->suspend(SUSPEND_REASON_DISABLE, 1);
27082732}
27092733
27102734
src/mame/drivers/chqflag.c
r14963r14964
266266
267267static const ym2151_interface ym2151_config =
268268{
269   chqflag_ym2151_irq_w
269   DEVCB_LINE(chqflag_ym2151_irq_w)
270270};
271271
272272static void volume_callback0( device_t *device, int v )
src/mame/drivers/dooyong.c
r14963r14964
815815
816816static const ym2151_interface ym2151_config =
817817{
818   irqhandler
818   DEVCB_LINE(irqhandler)
819819};
820820
821821/***************************************************************************
src/mame/drivers/silvmil.c
r14963r14964
44  yet another Data East / Tumble Pop derived hardware
55  this one seems similar to (but not identical to)
66  the crospang.c hardware from F2 system
7  also very close to gotcha.c, which was also a Para
8  board.
79
810  todo: refresh rate & audio balance
911        verify dipswitches - difficulty & unknown dips
r14963r14964
289291   AM_RANGE(0x0000, 0xbfff) AM_ROM
290292   AM_RANGE(0xd000, 0xd7ff) AM_RAM
291293   AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE_LEGACY("ymsnd", ym2151_r, ym2151_w)
292   AM_RANGE(0xc002, 0xc002) AM_DEVREADWRITE("oki", okim6295_device, read, write)
293   AM_RANGE(0xc003, 0xc003) AM_DEVREADWRITE("oki", okim6295_device, read, write)
294   AM_RANGE(0xc002, 0xc002) AM_DEVREADWRITE("oki", okim6295_device, read, write) AM_MIRROR(1)
294295   AM_RANGE(0xc006, 0xc006) AM_READ(soundlatch_byte_r)
295296   AM_RANGE(0xc00f, 0xc00f) AM_WRITENOP // ??
296297ADDRESS_MAP_END
r14963r14964
305306
306307static const ym2151_interface silvmil_ym2151_interface =
307308{
308   silvmil_irqhandler
309   DEVCB_LINE(silvmil_irqhandler)
309310};
310311
311312
src/mame/drivers/tourtabl.c
r14963r14964
3636}
3737
3838
39static READ16_HANDLER( tourtabl_read_input_port )
39static READ16_DEVICE_HANDLER( tourtabl_read_input_port )
4040{
4141   static const char *const tianames[] = { "PADDLE4", "PADDLE3", "PADDLE2", "PADDLE1", "TIA_IN4", "TIA_IN5" };
4242
43   return input_port_read(space->machine(), tianames[offset]);
43   return input_port_read(device->machine(), tianames[offset]);
4444}
4545
46static READ8_HANDLER( tourtabl_get_databus_contents )
46static READ8_DEVICE_HANDLER( tourtabl_get_databus_contents )
4747{
4848   return offset;
4949}
5050
5151
5252static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, tourtabl_state )
53   AM_RANGE(0x0000, 0x007f) AM_MIRROR(0x0100) AM_READWRITE_LEGACY(tia_r, tia_w)
53   AM_RANGE(0x0000, 0x007f) AM_MIRROR(0x0100) AM_DEVREADWRITE("tia_video", tia_video_device, read, write)
5454   AM_RANGE(0x0080, 0x00ff) AM_MIRROR(0x0100) AM_RAM
5555   AM_RANGE(0x0280, 0x029f) AM_DEVREADWRITE_LEGACY("riot1", riot6532_r, riot6532_w)
5656   AM_RANGE(0x0400, 0x047f) AM_RAM
r14963r14964
8787
8888static const struct tia_interface tourtabl_tia_interface =
8989{
90   tourtabl_read_input_port,
91   tourtabl_get_databus_contents,
92   NULL
90   DEVCB_HANDLER(tourtabl_read_input_port),
91   DEVCB_HANDLER(tourtabl_get_databus_contents),
92   DEVCB_NULL
9393};
9494
95
96static MACHINE_START( tourtabl )
97{
98   tia_init( machine, &tourtabl_tia_interface );
99}
100
101
10295static INPUT_PORTS_START( tourtabl )
10396
10497   PORT_START("PADDLE4")
r14963r14964
179172   MCFG_CPU_ADD("maincpu", M6502, MASTER_CLOCK / 3)   /* actually M6507 */
180173   MCFG_CPU_PROGRAM_MAP(main_map)
181174
182   MCFG_MACHINE_START(tourtabl)
183
184175   MCFG_RIOT6532_ADD("riot1", MASTER_CLOCK / 3, r6532_interface_0)
185176   MCFG_RIOT6532_ADD("riot2", MASTER_CLOCK / 3, r6532_interface_1)
186177
178   MCFG_TIA_VIDEO_ADD("tia_video", tourtabl_tia_interface)
187179   /* video hardware */
188180   MCFG_SCREEN_ADD("screen", RASTER)
189181   MCFG_SCREEN_RAW_PARAMS( MASTER_CLOCK, 228, 34, 34 + 160, 262, 46, 46 + 200 )
190   MCFG_SCREEN_UPDATE_STATIC(tia)
182   MCFG_SCREEN_UPDATE_DEVICE("tia_video", tia_video_device, screen_update)
191183
192184   MCFG_PALETTE_LENGTH(TIA_PALETTE_LENGTH)
193185   MCFG_PALETTE_INIT(tia_NTSC)
194186
195   MCFG_VIDEO_START(tia)
196
197187   /* sound hardware */
198188   MCFG_SPEAKER_STANDARD_MONO("mono")
199189
src/mame/drivers/rpunch.c
r14963r14964
449449
450450static const ym2151_interface ym2151_config =
451451{
452   ym2151_irq_gen
452   DEVCB_LINE(ym2151_irq_gen)
453453};
454454
455455
src/mame/drivers/starwars.c
r14963r14964
120120 *
121121 *************************************/
122122
123DIRECT_UPDATE_HANDLER( esb_setdirect )
123DIRECT_UPDATE_MEMBER(starwars_state::esb_setdirect)
124124{
125   starwars_state *state = machine.driver_data<starwars_state>();
126125   /* if we are in the slapstic region, process it */
127126   if ((address & 0xe000) == 0x8000)
128127   {
r14963r14964
133132            1. Because we have read/write handlers backing the current address
134133            2. Because the CPU core executed a jump to a new address
135134        */
136      if (pc != state->m_slapstic_last_pc || address != state->m_slapstic_last_address)
135      if (pc != m_slapstic_last_pc || address != m_slapstic_last_address)
137136      {
138         state->m_slapstic_last_pc = pc;
139         state->m_slapstic_last_address = address;
137         m_slapstic_last_pc = pc;
138         m_slapstic_last_address = address;
140139         esb_slapstic_tweak(&direct.space(), address & 0x1fff);
141140      }
142141      return ~0;
r14963r14964
520519
521520   /* install an opcode base handler */
522521   address_space *space = machine.device<m6809_device>("maincpu")->space(AS_PROGRAM);
523   space->set_direct_update_handler(direct_update_delegate(FUNC(esb_setdirect), &machine));
522   space->set_direct_update_handler(direct_update_delegate(FUNC(starwars_state::esb_setdirect), state));
524523
525524   /* install read/write handlers for it */
526525   machine.device("maincpu")->memory().space(AS_PROGRAM)->install_readwrite_handler(0x8000, 0x9fff, read8_delegate(FUNC(starwars_state::esb_slapstic_r),state), write8_delegate(FUNC(starwars_state::esb_slapstic_w),state));
src/mame/drivers/rainbow.c
r14963r14964
631631
632632static const ym2151_interface ym2151_config =
633633{
634   irqhandler,
635   bankswitch_w
634   DEVCB_LINE(irqhandler),
635   DEVCB_HANDLER(bankswitch_w)
636636};
637637
638638
src/mame/drivers/madmotor.c
r14963r14964
227227
228228static const ym2151_interface ym2151_config =
229229{
230   sound_irq
230   DEVCB_LINE(sound_irq)
231231};
232232
233233static MACHINE_START( madmotor )
src/mame/drivers/midyunit.c
r14963r14964
114114#include "emu.h"
115115#include "cpu/z80/z80.h"
116116#include "cpu/tms34010/tms34010.h"
117#include "audio/williams.h"
118117#include "sound/okim6295.h"
119118#include "includes/midyunit.h"
120119
r14963r14964
152151
153152CUSTOM_INPUT_MEMBER(midyunit_state::narc_talkback_strobe_r)
154153{
155   return (williams_narc_talkback_r(machine()) >> 8) & 1;
154   return (m_narc_sound->read(*machine().memory().first_space(), 0) >> 8) & 1;
156155}
157156
158157
159158CUSTOM_INPUT_MEMBER(midyunit_state::narc_talkback_data_r)
160159{
161   return williams_narc_talkback_r(machine()) & 0xff;
160   return m_narc_sound->read(*machine().memory().first_space(), 0) & 0xff;
162161}
163162
164163
165164CUSTOM_INPUT_MEMBER(midyunit_state::adpcm_irq_state_r)
166165{
167   return williams_adpcm_sound_irq_r(machine()) & 1;
166   return m_adpcm_sound->irq_read() & 1;
168167}
169168
170169
r14963r14964
10181017   MCFG_VIDEO_START(midzunit)
10191018
10201019   /* sound hardware */
1021   MCFG_FRAGMENT_ADD(williams_narc_sound)
1020   MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
1021   MCFG_WILLIAMS_NARC_SOUND_ADD("narcsnd")
1022   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
1023   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
10221024MACHINE_CONFIG_END
10231025
10241026
r14963r14964
10461048   MCFG_SCREEN_ADD("screen", RASTER)
10471049   MCFG_SCREEN_RAW_PARAMS(STDRES_PIXEL_CLOCK*2, 505, 0, 399, 289, 0, 253)
10481050   MCFG_SCREEN_UPDATE_STATIC(tms340x0_ind16)
1051   
1052   /* sound hardware */
1053   MCFG_SPEAKER_STANDARD_MONO("mono")
10491054MACHINE_CONFIG_END
10501055
10511056
10521057static MACHINE_CONFIG_DERIVED( yunit_cvsd_4bit_slow, yunit_core )
10531058
10541059   /* basic machine hardware */
1055   MCFG_FRAGMENT_ADD(williams_cvsd_sound)
1060   MCFG_WILLIAMS_CVSD_SOUND_ADD("cvsd")
1061   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
10561062
10571063   /* video hardware */
10581064   MCFG_PALETTE_LENGTH(256)
r14963r14964
10651071   /* basic machine hardware */
10661072   MCFG_CPU_MODIFY("maincpu")
10671073   MCFG_CPU_CLOCK(FAST_MASTER_CLOCK)
1068   MCFG_FRAGMENT_ADD(williams_cvsd_sound)
1074   
1075   MCFG_WILLIAMS_CVSD_SOUND_ADD("cvsd")
1076   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
10691077
10701078   /* video hardware */
10711079   MCFG_PALETTE_LENGTH(256)
r14963r14964
10761084static MACHINE_CONFIG_DERIVED( yunit_cvsd_6bit_slow, yunit_core )
10771085
10781086   /* basic machine hardware */
1079   MCFG_FRAGMENT_ADD(williams_cvsd_sound)
1087   MCFG_WILLIAMS_CVSD_SOUND_ADD("cvsd")
1088   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
10801089
10811090   /* video hardware */
10821091   MCFG_PALETTE_LENGTH(4096)
r14963r14964
10891098   /* basic machine hardware */
10901099   MCFG_CPU_MODIFY("maincpu")
10911100   MCFG_CPU_CLOCK(FAST_MASTER_CLOCK)
1092   MCFG_FRAGMENT_ADD(williams_adpcm_sound)
1101   
1102   MCFG_WILLIAMS_ADPCM_SOUND_ADD("adpcm")
1103   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
10931104
10941105   /* video hardware */
10951106   MCFG_PALETTE_LENGTH(4096)
r14963r14964
11021113   /* basic machine hardware */
11031114   MCFG_CPU_MODIFY("maincpu")
11041115   MCFG_CPU_CLOCK(FASTER_MASTER_CLOCK)
1105   MCFG_FRAGMENT_ADD(williams_adpcm_sound)
1116   
1117   MCFG_WILLIAMS_ADPCM_SOUND_ADD("adpcm")
1118   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
11061119
11071120   /* video hardware */
11081121   MCFG_PALETTE_LENGTH(4096)
r14963r14964
11221135   MCFG_VIDEO_START(mkyawdim)
11231136
11241137   /* sound hardware */
1125   MCFG_SPEAKER_STANDARD_MONO("mono")
1126
11271138   MCFG_OKIM6295_ADD("oki", 1056000, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified
11281139   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
11291140MACHINE_CONFIG_END
r14963r14964
11371148 *************************************/
11381149
11391150ROM_START( narc )
1140   ROM_REGION( 0x90000, "narc1cpu", 0 )    /* sound CPU */
1151   ROM_REGION( 0x90000, "narcsnd:cpu0", 0 )    /* sound CPU */
11411152   ROM_LOAD( "narcrev2.u4", 0x50000, 0x10000, CRC(450a591a) SHA1(bbda8061262738e5866f2707f69483a0a51d2910) )
11421153   ROM_RELOAD(              0x60000, 0x10000 )
11431154   ROM_LOAD( "narcrev2.u5", 0x70000, 0x10000, CRC(e551e5e3) SHA1(c8b4f53dbd4c534abb77d4dc07c4d12653b79894) )
11441155   ROM_RELOAD(              0x80000, 0x10000 )
11451156
1146   ROM_REGION( 0x90000, "narc2cpu", 0 )   /* slave sound CPU */
1157   ROM_REGION( 0x90000, "narcsnd:cpu1", 0 )   /* slave sound CPU */
11471158   ROM_LOAD( "narcrev2.u35", 0x10000, 0x10000, CRC(81295892) SHA1(159664e5ee03c88d6e940e70e87e2150dc5b8b25) )
11481159   ROM_RELOAD(               0x20000, 0x10000 )
11491160   ROM_LOAD( "narcrev2.u36", 0x30000, 0x10000, CRC(16cdbb13) SHA1(2dfd961a5d909c1804f4fda34de33ee2664c4bc6) )
r14963r14964
12271238
12281239
12291240ROM_START( narc3 )
1230   ROM_REGION( 0x90000, "narc1cpu", 0 )   /* sound CPU */
1241   ROM_REGION( 0x90000, "narcsnd:cpu0", 0 )   /* sound CPU */
12311242   ROM_LOAD( "narcrev2.u4", 0x50000, 0x10000, CRC(450a591a) SHA1(bbda8061262738e5866f2707f69483a0a51d2910) )
12321243   ROM_RELOAD(              0x60000, 0x10000 )
12331244   ROM_LOAD( "narcrev2.u5", 0x70000, 0x10000, CRC(e551e5e3) SHA1(c8b4f53dbd4c534abb77d4dc07c4d12653b79894) )
12341245   ROM_RELOAD(              0x80000, 0x10000 )
12351246
1236   ROM_REGION( 0x90000, "narc2cpu", 0 )   /* slave sound CPU */
1247   ROM_REGION( 0x90000, "narcsnd:cpu1", 0 )   /* slave sound CPU */
12371248   ROM_LOAD( "narcrev2.u35", 0x10000, 0x10000, CRC(81295892) SHA1(159664e5ee03c88d6e940e70e87e2150dc5b8b25) )
12381249   ROM_RELOAD(               0x20000, 0x10000 )
12391250   ROM_LOAD( "narcrev2.u36", 0x30000, 0x10000, CRC(16cdbb13) SHA1(2dfd961a5d909c1804f4fda34de33ee2664c4bc6) )
r14963r14964
13281339ROM_END
13291340
13301341ROM_START( narc2 )
1331   ROM_REGION( 0x90000, "narc1cpu", 0 )   /* sound CPU */
1342   ROM_REGION( 0x90000, "narcsnd:cpu0", 0 )   /* sound CPU */
13321343   ROM_LOAD( "narcrev2.u4", 0x50000, 0x10000, CRC(450a591a) SHA1(bbda8061262738e5866f2707f69483a0a51d2910) )
13331344   ROM_RELOAD(              0x60000, 0x10000 )
13341345   ROM_LOAD( "narcrev2.u5", 0x70000, 0x10000, CRC(e551e5e3) SHA1(c8b4f53dbd4c534abb77d4dc07c4d12653b79894) )
13351346   ROM_RELOAD(              0x80000, 0x10000 )
13361347
1337   ROM_REGION( 0x90000, "narc2cpu", 0 )   /* slave sound CPU */
1348   ROM_REGION( 0x90000, "narcsnd:cpu1", 0 )   /* slave sound CPU */
13381349   ROM_LOAD( "narcrev2.u35", 0x10000, 0x10000, CRC(81295892) SHA1(159664e5ee03c88d6e940e70e87e2150dc5b8b25) )
13391350   ROM_RELOAD(               0x20000, 0x10000 )
13401351   ROM_LOAD( "narcrev2.u36", 0x30000, 0x10000, CRC(16cdbb13) SHA1(2dfd961a5d909c1804f4fda34de33ee2664c4bc6) )
r14963r14964
14301441
14311442
14321443ROM_START( trog )
1433   ROM_REGION( 0x90000, "cvsdcpu", 0 )   /* sound CPU */
1444   ROM_REGION( 0x90000, "cvsd:cpu", 0 )   /* sound CPU */
14341445   ROM_LOAD (   "trogu4.bin", 0x10000, 0x10000, CRC(759d0bf4) SHA1(c4c3fa51c43cf7fd241ac1f33d7d220aa9f9edb3) )
14351446   ROM_RELOAD(                0x20000, 0x10000 )
14361447   ROM_LOAD (  "trogu19.bin", 0x30000, 0x10000, CRC(960c333d) SHA1(da8ce8dfffffe7a2d60b3f75cc5aa88e5e2be659) )
r14963r14964
14601471
14611472
14621473ROM_START( trog4 )
1463   ROM_REGION( 0x90000, "cvsdcpu", 0 )   /* sound CPU */
1474   ROM_REGION( 0x90000, "cvsd:cpu", 0 )   /* sound CPU */
14641475   ROM_LOAD (   "trogu4.bin", 0x10000, 0x10000, CRC(759d0bf4) SHA1(c4c3fa51c43cf7fd241ac1f33d7d220aa9f9edb3) )
14651476   ROM_RELOAD(                0x20000, 0x10000 )
14661477   ROM_LOAD (  "trogu19.bin", 0x30000, 0x10000, CRC(960c333d) SHA1(da8ce8dfffffe7a2d60b3f75cc5aa88e5e2be659) )
r14963r14964
14901501
14911502
14921503ROM_START( trog3 )
1493   ROM_REGION( 0x90000, "cvsdcpu", 0 )   /* sound CPU */
1504   ROM_REGION( 0x90000, "cvsd:cpu", 0 )   /* sound CPU */
14941505   ROM_LOAD (   "trogu4.bin", 0x10000, 0x10000, CRC(759d0bf4) SHA1(c4c3fa51c43cf7fd241ac1f33d7d220aa9f9edb3) )
14951506   ROM_RELOAD(                0x20000, 0x10000 )
14961507   ROM_LOAD (  "trogu19.bin", 0x30000, 0x10000, CRC(960c333d) SHA1(da8ce8dfffffe7a2d60b3f75cc5aa88e5e2be659) )
r14963r14964
15201531
15211532
15221533ROM_START( trogpa6 )
1523   ROM_REGION( 0x90000, "cvsdcpu", 0 )   /* sound CPU */
1534   ROM_REGION( 0x90000, "cvsd:cpu", 0 )   /* sound CPU */
15241535   ROM_LOAD (   "trogu4.bin", 0x10000, 0x10000, CRC(759d0bf4) SHA1(c4c3fa51c43cf7fd241ac1f33d7d220aa9f9edb3) )
15251536   ROM_RELOAD(                0x20000, 0x10000 )
15261537   ROM_LOAD (  "trogu19.bin", 0x30000, 0x10000, CRC(960c333d) SHA1(da8ce8dfffffe7a2d60b3f75cc5aa88e5e2be659) )
r14963r14964
15501561
15511562
15521563ROM_START( trogpa4 )
1553   ROM_REGION( 0x90000, "cvsdcpu", 0 )   /* sound CPU */
1564   ROM_REGION( 0x90000, "cvsd:cpu", 0 )   /* sound CPU */
15541565   ROM_LOAD (   "trogu4.bin", 0x10000, 0x10000, CRC(759d0bf4) SHA1(c4c3fa51c43cf7fd241ac1f33d7d220aa9f9edb3) )
15551566   ROM_RELOAD(                0x20000, 0x10000 )
15561567   ROM_LOAD (  "trogu19.bin", 0x30000, 0x10000, CRC(960c333d) SHA1(da8ce8dfffffe7a2d60b3f75cc5aa88e5e2be659) )
r14963r14964
15801591
15811592
15821593ROM_START( smashtv )
1583   ROM_REGION( 0x90000, "cvsdcpu", 0 )   /* sound CPU */
1594   ROM_REGION( 0x90000, "cvsd:cpu", 0 )   /* sound CPU */
15841595   ROM_LOAD (  "sl2.u4", 0x10000, 0x10000, CRC(29d3f6c8) SHA1(8a90cdff54f59ddb7dba521504d880515a59df08) )
15851596   ROM_RELOAD(           0x20000, 0x10000 )
15861597   ROM_LOAD ( "sl2.u19", 0x30000, 0x10000, CRC(ac5a402a) SHA1(c476018062126dc3936caa2c328de490737165ec) )
r14963r14964
16081619
16091620
16101621ROM_START( smashtv6 )
1611   ROM_REGION( 0x90000, "cvsdcpu", 0 )   /* sound CPU */
1622   ROM_REGION( 0x90000, "cvsd:cpu", 0 )   /* sound CPU */
16121623   ROM_LOAD (  "sl2.u4", 0x10000, 0x10000, CRC(29d3f6c8) SHA1(8a90cdff54f59ddb7dba521504d880515a59df08) )
16131624   ROM_RELOAD(           0x20000, 0x10000 )
16141625   ROM_LOAD ( "sl2.u19", 0x30000, 0x10000, CRC(ac5a402a) SHA1(c476018062126dc3936caa2c328de490737165ec) )
r14963r14964
16361647
16371648
16381649ROM_START( smashtv5 )
1639   ROM_REGION( 0x90000, "cvsdcpu", 0 ) /* sound CPU */
1650   ROM_REGION( 0x90000, "cvsd:cpu", 0 ) /* sound CPU */
16401651   ROM_LOAD (  "sl2.u4", 0x10000, 0x10000, CRC(29d3f6c8) SHA1(8a90cdff54f59ddb7dba521504d880515a59df08) )
16411652   ROM_RELOAD(           0x20000, 0x10000 )
16421653   ROM_LOAD ( "sl2.u19", 0x30000, 0x10000, CRC(ac5a402a) SHA1(c476018062126dc3936caa2c328de490737165ec) )
r14963r14964
16641675
16651676
16661677ROM_START( smashtv4 )
1667   ROM_REGION( 0x90000, "cvsdcpu", 0 )   /* sound CPU */
1678   ROM_REGION( 0x90000, "cvsd:cpu", 0 )   /* sound CPU */
16681679   ROM_LOAD (  "sl2.u4", 0x10000, 0x10000, CRC(29d3f6c8) SHA1(8a90cdff54f59ddb7dba521504d880515a59df08) )
16691680   ROM_RELOAD(           0x20000, 0x10000 )
16701681   ROM_LOAD ( "sl2.u19", 0x30000, 0x10000, CRC(ac5a402a) SHA1(c476018062126dc3936caa2c328de490737165ec) )
r14963r14964
16921703
16931704
16941705ROM_START( smashtv3 )
1695   ROM_REGION( 0x90000, "cvsdcpu", 0 )   /* sound CPU */
1706   ROM_REGION( 0x90000, "cvsd:cpu", 0 )   /* sound CPU */
16961707   ROM_LOAD (  "sl2.u4", 0x10000, 0x10000, CRC(29d3f6c8) SHA1(8a90cdff54f59ddb7dba521504d880515a59df08) )
16971708   ROM_RELOAD(           0x20000, 0x10000 )
16981709   ROM_LOAD ( "sl2.u19", 0x30000, 0x10000, CRC(ac5a402a) SHA1(c476018062126dc3936caa2c328de490737165ec) )
r14963r14964
17201731
17211732
17221733ROM_START( hiimpact )
1723   ROM_REGION( 0x90000, "cvsdcpu", 0 )   /* sound CPU */
1734   ROM_REGION( 0x90000, "cvsd:cpu", 0 )   /* sound CPU */
17241735   ROM_LOAD (  "sl1u4.bin", 0x10000, 0x20000, CRC(28effd6a) SHA1(4a839f15e1b453a22fdef7b1801b8cc5cfdf3c29) )
17251736   ROM_LOAD ( "sl1u19.bin", 0x30000, 0x20000, CRC(0ea22c89) SHA1(6d4579f6b10cac685be01348451b3537a0626034) )
17261737   ROM_LOAD ( "sl1u20.bin", 0x50000, 0x20000, CRC(4e747ab5) SHA1(82040f40aac7dae577376a742eadaaa9644500c1) )
r14963r14964
17551766
17561767
17571768ROM_START( hiimpact4 )
1758   ROM_REGION( 0x90000, "cvsdcpu", 0 )   /* sound CPU */
1769   ROM_REGION( 0x90000, "cvsd:cpu", 0 )   /* sound CPU */
17591770   ROM_LOAD (  "sl1u4.bin", 0x10000, 0x20000, CRC(28effd6a) SHA1(4a839f15e1b453a22fdef7b1801b8cc5cfdf3c29) )
17601771   ROM_LOAD ( "sl1u19.bin", 0x30000, 0x20000, CRC(0ea22c89) SHA1(6d4579f6b10cac685be01348451b3537a0626034) )
17611772   ROM_LOAD ( "sl1u20.bin", 0x50000, 0x20000, CRC(4e747ab5) SHA1(82040f40aac7dae577376a742eadaaa9644500c1) )
r14963r14964
17901801
17911802
17921803ROM_START( hiimpact3 )
1793   ROM_REGION( 0x90000, "cvsdcpu", 0 )   /* sound CPU */
1804   ROM_REGION( 0x90000, "cvsd:cpu", 0 )   /* sound CPU */
17941805   ROM_LOAD (  "sl1u4.bin", 0x10000, 0x20000, CRC(28effd6a) SHA1(4a839f15e1b453a22fdef7b1801b8cc5cfdf3c29) )
17951806   ROM_LOAD ( "sl1u19.bin", 0x30000, 0x20000, CRC(0ea22c89) SHA1(6d4579f6b10cac685be01348451b3537a0626034) )
17961807   ROM_LOAD ( "sl1u20.bin", 0x50000, 0x20000, CRC(4e747ab5) SHA1(82040f40aac7dae577376a742eadaaa9644500c1) )
r14963r14964
18251836
18261837
18271838ROM_START( hiimpact2 )
1828   ROM_REGION( 0x90000, "cvsdcpu", 0 )   /* sound CPU */
1839   ROM_REGION( 0x90000, "cvsd:cpu", 0 )   /* sound CPU */
18291840   ROM_LOAD (  "sl1u4.bin", 0x10000, 0x20000, CRC(28effd6a) SHA1(4a839f15e1b453a22fdef7b1801b8cc5cfdf3c29) )
18301841   ROM_LOAD ( "sl1u19.bin", 0x30000, 0x20000, CRC(0ea22c89) SHA1(6d4579f6b10cac685be01348451b3537a0626034) )
18311842   ROM_LOAD ( "sl1u20.bin", 0x50000, 0x20000, CRC(4e747ab5) SHA1(82040f40aac7dae577376a742eadaaa9644500c1) )
r14963r14964
18601871
18611872
18621873ROM_START( hiimpact1 )
1863   ROM_REGION( 0x90000, "cvsdcpu", 0 )   /* sound CPU */
1874   ROM_REGION( 0x90000, "cvsd:cpu", 0 )   /* sound CPU */
18641875   ROM_LOAD (  "sl1u4.bin", 0x10000, 0x20000, CRC(28effd6a) SHA1(4a839f15e1b453a22fdef7b1801b8cc5cfdf3c29) )
18651876   ROM_LOAD ( "sl1u19.bin", 0x30000, 0x20000, CRC(0ea22c89) SHA1(6d4579f6b10cac685be01348451b3537a0626034) )
18661877   ROM_LOAD ( "sl1u20.bin", 0x50000, 0x20000, CRC(4e747ab5) SHA1(82040f40aac7dae577376a742eadaaa9644500c1) )
r14963r14964
18951906
18961907
18971908ROM_START( hiimpactp )
1898   ROM_REGION( 0x90000, "cvsdcpu", 0 )   /* sound CPU */
1909   ROM_REGION( 0x90000, "cvsd:cpu", 0 )   /* sound CPU */
18991910   ROM_LOAD (  "sl1u4.bin", 0x10000, 0x20000, CRC(28effd6a) SHA1(4a839f15e1b453a22fdef7b1801b8cc5cfdf3c29) )
19001911   ROM_LOAD ( "sl1u19.bin", 0x30000, 0x20000, CRC(0ea22c89) SHA1(6d4579f6b10cac685be01348451b3537a0626034) )
19011912   ROM_LOAD ( "sl1u20.bin", 0x50000, 0x20000, CRC(4e747ab5) SHA1(82040f40aac7dae577376a742eadaaa9644500c1) )
r14963r14964
19301941
19311942
19321943ROM_START( shimpact )
1933   ROM_REGION( 0x90000, "cvsdcpu", 0 )   /* sound CPU */
1944   ROM_REGION( 0x90000, "cvsd:cpu", 0 )   /* sound CPU */
19341945   ROM_LOAD (   "shiu4.bin", 0x10000, 0x20000, CRC(1e5a012c) SHA1(4077fc266799a01738b7f88e867535f1fbacd557) )
19351946   ROM_LOAD (  "shiu19.bin", 0x30000, 0x20000, CRC(10f9684e) SHA1(1fdc5364f87fb65f4f2a438841e0fe847f765aaf) )
19361947   ROM_LOAD (  "shiu20.bin", 0x50000, 0x20000, CRC(1b4a71c1) SHA1(74b7b4ae76ebe65f1f46b2117970bfefefbb5344) )
r14963r14964
19581969
19591970
19601971ROM_START( shimpactp6 )
1961   ROM_REGION( 0x90000, "cvsdcpu", 0 )   /* sound CPU */
1972   ROM_REGION( 0x90000, "cvsd:cpu", 0 )   /* sound CPU */
19621973   ROM_LOAD (   "shiu4.bin", 0x10000, 0x20000, CRC(1e5a012c) SHA1(4077fc266799a01738b7f88e867535f1fbacd557) )
19631974   ROM_LOAD (  "shiu19.bin", 0x30000, 0x20000, CRC(10f9684e) SHA1(1fdc5364f87fb65f4f2a438841e0fe847f765aaf) )
19641975   ROM_LOAD (  "shiu20.bin", 0x50000, 0x20000, CRC(1b4a71c1) SHA1(74b7b4ae76ebe65f1f46b2117970bfefefbb5344) )
r14963r14964
19861997
19871998
19881999ROM_START( shimpactp5 )
1989   ROM_REGION( 0x90000, "cvsdcpu", 0 )   /* sound CPU */
2000   ROM_REGION( 0x90000, "cvsd:cpu", 0 )   /* sound CPU */
19902001   ROM_LOAD (   "shiu4.bin", 0x10000, 0x20000, CRC(1e5a012c) SHA1(4077fc266799a01738b7f88e867535f1fbacd557) )
19912002   ROM_LOAD (  "shiu19.bin", 0x30000, 0x20000, CRC(10f9684e) SHA1(1fdc5364f87fb65f4f2a438841e0fe847f765aaf) )
19922003   ROM_LOAD (  "shiu20.bin", 0x50000, 0x20000, CRC(1b4a71c1) SHA1(74b7b4ae76ebe65f1f46b2117970bfefefbb5344) )
r14963r14964
20142025
20152026
20162027ROM_START( shimpactp4 ) /* You must manualy reset the high score table or game will hang after initial demo screen, it's best to do a "Full Factory Restore" */
2017   ROM_REGION( 0x90000, "cvsdcpu", 0 )   /* sound CPU */
2028   ROM_REGION( 0x90000, "cvsd:cpu", 0 )   /* sound CPU */
20182029   ROM_LOAD (   "shiu4.bin", 0x10000, 0x20000, CRC(1e5a012c) SHA1(4077fc266799a01738b7f88e867535f1fbacd557) )
20192030   ROM_LOAD (  "shiu19.bin", 0x30000, 0x20000, CRC(10f9684e) SHA1(1fdc5364f87fb65f4f2a438841e0fe847f765aaf) )
20202031   ROM_LOAD (  "shiu20.bin", 0x50000, 0x20000, CRC(1b4a71c1) SHA1(74b7b4ae76ebe65f1f46b2117970bfefefbb5344) )
r14963r14964
20422053
20432054
20442055ROM_START( strkforc )
2045   ROM_REGION( 0x90000, "cvsdcpu", 0 )   /* sound CPU */
2056   ROM_REGION( 0x90000, "cvsd:cpu", 0 )   /* sound CPU */
20462057   ROM_LOAD (  "sfu4.bin", 0x10000, 0x10000, CRC(8f747312) SHA1(729929c209741e72eb83b407cf95d7709ec1b5ae) )
20472058   ROM_RELOAD(             0x20000, 0x10000 )
20482059   ROM_LOAD ( "sfu19.bin", 0x30000, 0x10000, CRC(afb29926) SHA1(ad904c0968a90b8187cc87d6c171fbc021d2f66f) )
r14963r14964
20742085
20752086
20762087ROM_START( mkla4 )
2077   ROM_REGION( 0x50000, "adpcm", 0 )   /* sound CPU */
2088   ROM_REGION( 0x50000, "adpcm:cpu", 0 )   /* sound CPU */
20782089   ROM_LOAD (  "mks-u3.rom", 0x10000, 0x40000, CRC(c615844c) SHA1(5732f9053a5f73b0cc3b0166d7dc4430829d5bc7) )
20792090
2080   ROM_REGION( 0x200000, "oki", 0 )   /* ADPCM */
2091   ROM_REGION( 0x100000, "adpcm:oki", 0 )   /* ADPCM */
20812092   ROM_LOAD ( "mks-u12.rom", 0x00000, 0x40000, CRC(258bd7f9) SHA1(463890b23f17350fb9b8a85897b0777c45bc2d54) )
20822093   ROM_RELOAD(               0x40000, 0x40000 )
20832094   ROM_LOAD ( "mks-u13.rom", 0x80000, 0x40000, CRC(7b7ec3b6) SHA1(6eec1b90d4a4855f34a7ebfbf93f3358d5627db4) )
r14963r14964
21062117
21072118
21082119ROM_START( mkla3 )
2109   ROM_REGION( 0x50000, "adpcm", 0 )   /* sound CPU */
2120   ROM_REGION( 0x50000, "adpcm:cpu", 0 )   /* sound CPU */
21102121   ROM_LOAD (  "mks-u3.rom", 0x10000, 0x40000, CRC(c615844c) SHA1(5732f9053a5f73b0cc3b0166d7dc4430829d5bc7) )
21112122
2112   ROM_REGION( 0x200000, "oki", 0 )   /* ADPCM */
2123   ROM_REGION( 0x100000, "adpcm:oki", 0 )   /* ADPCM */
21132124   ROM_LOAD ( "mks-u12.rom", 0x00000, 0x40000, CRC(258bd7f9) SHA1(463890b23f17350fb9b8a85897b0777c45bc2d54) )
21142125   ROM_RELOAD(               0x40000, 0x40000 )
21152126   ROM_LOAD ( "mks-u13.rom", 0x80000, 0x40000, CRC(7b7ec3b6) SHA1(6eec1b90d4a4855f34a7ebfbf93f3358d5627db4) )
r14963r14964
21382149
21392150
21402151ROM_START( mkla2 )
2141   ROM_REGION( 0x50000, "adpcm", 0 )   /* sound CPU */
2152   ROM_REGION( 0x50000, "adpcm:cpu", 0 )   /* sound CPU */
21422153   ROM_LOAD (  "mks-u3.rom", 0x10000, 0x40000, CRC(c615844c) SHA1(5732f9053a5f73b0cc3b0166d7dc4430829d5bc7) )
21432154
2144   ROM_REGION( 0x200000, "oki", 0 )   /* ADPCM */
2155   ROM_REGION( 0x100000, "adpcm:oki", 0 )   /* ADPCM */
21452156   ROM_LOAD ( "mks-u12.rom", 0x00000, 0x40000, CRC(258bd7f9) SHA1(463890b23f17350fb9b8a85897b0777c45bc2d54) )
21462157   ROM_RELOAD(               0x40000, 0x40000 )
21472158   ROM_LOAD ( "mks-u13.rom", 0x80000, 0x40000, CRC(7b7ec3b6) SHA1(6eec1b90d4a4855f34a7ebfbf93f3358d5627db4) )
r14963r14964
21702181
21712182
21722183ROM_START( mkla1 )
2173   ROM_REGION( 0x50000, "adpcm", 0 )   /* sound CPU */
2184   ROM_REGION( 0x50000, "adpcm:cpu", 0 )   /* sound CPU */
21742185   ROM_LOAD (  "mks-u3.rom", 0x10000, 0x40000, CRC(c615844c) SHA1(5732f9053a5f73b0cc3b0166d7dc4430829d5bc7) )
21752186
2176   ROM_REGION( 0x200000, "oki", 0 )   /* ADPCM */
2187   ROM_REGION( 0x100000, "adpcm:oki", 0 )   /* ADPCM */
21772188   ROM_LOAD ( "mks-u12.rom", 0x00000, 0x40000, CRC(258bd7f9) SHA1(463890b23f17350fb9b8a85897b0777c45bc2d54) )
21782189   ROM_RELOAD(               0x40000, 0x40000 )
21792190   ROM_LOAD ( "mks-u13.rom", 0x80000, 0x40000, CRC(7b7ec3b6) SHA1(6eec1b90d4a4855f34a7ebfbf93f3358d5627db4) )
r14963r14964
22022213
22032214
22042215ROM_START( mkprot9 )
2205   ROM_REGION( 0x50000, "adpcm", 0 )   /* sound CPU */
2216   ROM_REGION( 0x50000, "adpcm:cpu", 0 )   /* sound CPU */
22062217   ROM_LOAD (  "mks-u3.rom", 0x10000, 0x40000, CRC(c615844c) SHA1(5732f9053a5f73b0cc3b0166d7dc4430829d5bc7) )
22072218
2208   ROM_REGION( 0x200000, "oki", 0 )   /* ADPCM */
2219   ROM_REGION( 0x100000, "adpcm:oki", 0 )   /* ADPCM */
22092220   ROM_LOAD ( "mks-u12.rom", 0x00000, 0x40000, CRC(258bd7f9) SHA1(463890b23f17350fb9b8a85897b0777c45bc2d54) )
22102221   ROM_RELOAD(               0x40000, 0x40000 )
22112222   ROM_LOAD ( "mks-u13.rom", 0x80000, 0x40000, CRC(7b7ec3b6) SHA1(6eec1b90d4a4855f34a7ebfbf93f3358d5627db4) )
r14963r14964
22342245
22352246
22362247ROM_START( mkprot8 )
2237   ROM_REGION( 0x50000, "adpcm", 0 )   /* sound CPU */
2248   ROM_REGION( 0x50000, "adpcm:cpu", 0 )   /* sound CPU */
22382249   ROM_LOAD (  "mks-u3.rom", 0x10000, 0x40000, CRC(c615844c) SHA1(5732f9053a5f73b0cc3b0166d7dc4430829d5bc7) )
22392250
2240   ROM_REGION( 0x200000, "oki", 0 )   /* ADPCM */
2251   ROM_REGION( 0x100000, "adpcm:oki", 0 )   /* ADPCM */
22412252   ROM_LOAD ( "mks-u12.rom", 0x00000, 0x40000, CRC(258bd7f9) SHA1(463890b23f17350fb9b8a85897b0777c45bc2d54) )
22422253   ROM_RELOAD(               0x40000, 0x40000 )
22432254   ROM_LOAD ( "mks-u13.rom", 0x80000, 0x40000, CRC(7b7ec3b6) SHA1(6eec1b90d4a4855f34a7ebfbf93f3358d5627db4) )
r14963r14964
22652276ROM_END
22662277
22672278ROM_START( mkprot4 )
2268   ROM_REGION( 0x50000, "adpcm", 0 )   /* sound CPU */
2279   ROM_REGION( 0x50000, "adpcm:cpu", 0 )   /* sound CPU */
22692280   ROM_LOAD (  "mks-u3.rom", 0x10000, 0x40000, CRC(c615844c) SHA1(5732f9053a5f73b0cc3b0166d7dc4430829d5bc7) )
22702281
2271   ROM_REGION( 0x200000, "oki", 0 )   /* ADPCM */
2282   ROM_REGION( 0x100000, "adpcm:oki", 0 )   /* ADPCM */
22722283   ROM_LOAD ( "mks-u12.rom", 0x00000, 0x40000, CRC(258bd7f9) SHA1(463890b23f17350fb9b8a85897b0777c45bc2d54) )
22732284   ROM_RELOAD(               0x40000, 0x40000 )
22742285   ROM_LOAD ( "mks-u13.rom", 0x80000, 0x40000, CRC(7b7ec3b6) SHA1(6eec1b90d4a4855f34a7ebfbf93f3358d5627db4) )
r14963r14964
22962307ROM_END
22972308
22982309ROM_START( mkyturbo )
2299   ROM_REGION( 0x50000, "adpcm", 0 )   /* sound CPU */
2310   ROM_REGION( 0x50000, "adpcm:cpu", 0 )   /* sound CPU */
23002311   ROM_LOAD (  "mks-u3.rom", 0x10000, 0x40000, CRC(c615844c) SHA1(5732f9053a5f73b0cc3b0166d7dc4430829d5bc7) )
23012312
2302   ROM_REGION( 0x200000, "oki", 0 )   /* ADPCM */
2313   ROM_REGION( 0x100000, "adpcm:oki", 0 )   /* ADPCM */
23032314   ROM_LOAD ( "mks-u12.rom", 0x00000, 0x40000, CRC(258bd7f9) SHA1(463890b23f17350fb9b8a85897b0777c45bc2d54) )
23042315   ROM_RELOAD(               0x40000, 0x40000 )
23052316   ROM_LOAD ( "mks-u13.rom", 0x80000, 0x40000, CRC(7b7ec3b6) SHA1(6eec1b90d4a4855f34a7ebfbf93f3358d5627db4) )
r14963r14964
23282339ROM_END
23292340
23302341ROM_START( mkyturboe )
2331   ROM_REGION( 0x50000, "adpcm", 0 )   /* sound CPU */
2342   ROM_REGION( 0x50000, "adpcm:cpu", 0 )   /* sound CPU */
23322343   ROM_LOAD (  "mks-u3.rom", 0x10000, 0x40000, CRC(c615844c) SHA1(5732f9053a5f73b0cc3b0166d7dc4430829d5bc7) )
23332344
2334   ROM_REGION( 0x200000, "oki", 0 )   /* ADPCM */
2345   ROM_REGION( 0x100000, "adpcm:oki", 0 )   /* ADPCM */
23352346   ROM_LOAD ( "mks-u12.rom", 0x00000, 0x40000, CRC(258bd7f9) SHA1(463890b23f17350fb9b8a85897b0777c45bc2d54) )
23362347   ROM_RELOAD(               0x40000, 0x40000 )
23372348   ROM_LOAD ( "mks-u13.rom", 0x80000, 0x40000, CRC(7b7ec3b6) SHA1(6eec1b90d4a4855f34a7ebfbf93f3358d5627db4) )
r14963r14964
23592370ROM_END
23602371
23612372ROM_START( mknifty )
2362   ROM_REGION( 0x50000, "adpcm", 0 )   /* sound CPU */
2373   ROM_REGION( 0x50000, "adpcm:cpu", 0 )   /* sound CPU */
23632374   ROM_LOAD (  "mks-u3.rom", 0x10000, 0x40000, CRC(c615844c) SHA1(5732f9053a5f73b0cc3b0166d7dc4430829d5bc7) )
23642375
2365   ROM_REGION( 0x200000, "oki", 0 )   /* ADPCM */
2376   ROM_REGION( 0x100000, "adpcm:oki", 0 )   /* ADPCM */
23662377   ROM_LOAD ( "mks-u12.rom", 0x00000, 0x40000, CRC(258bd7f9) SHA1(463890b23f17350fb9b8a85897b0777c45bc2d54) )
23672378   ROM_RELOAD(               0x40000, 0x40000 )
23682379   ROM_LOAD ( "mks-u13.rom", 0x80000, 0x40000, CRC(7b7ec3b6) SHA1(6eec1b90d4a4855f34a7ebfbf93f3358d5627db4) )
r14963r14964
23902401ROM_END
23912402
23922403ROM_START( mknifty666 )
2393   ROM_REGION( 0x50000, "adpcm", 0 )   /* sound CPU */
2404   ROM_REGION( 0x50000, "adpcm:cpu", 0 )   /* sound CPU */
23942405   ROM_LOAD (  "mks-u3.rom", 0x10000, 0x40000, CRC(c615844c) SHA1(5732f9053a5f73b0cc3b0166d7dc4430829d5bc7) )
23952406
2396   ROM_REGION( 0x200000, "oki", 0 )   /* ADPCM */
2407   ROM_REGION( 0x100000, "adpcm:oki", 0 )   /* ADPCM */
23972408   ROM_LOAD ( "mks-u12.rom", 0x00000, 0x40000, CRC(258bd7f9) SHA1(463890b23f17350fb9b8a85897b0777c45bc2d54) )
23982409   ROM_RELOAD(               0x40000, 0x40000 )
23992410   ROM_LOAD ( "mks-u13.rom", 0x80000, 0x40000, CRC(7b7ec3b6) SHA1(6eec1b90d4a4855f34a7ebfbf93f3358d5627db4) )
r14963r14964
24862497
24872498
24882499ROM_START( term2 )
2489   ROM_REGION( 0x50000, "adpcm", 0 )   /* sound CPU */
2500   ROM_REGION( 0x50000, "adpcm:cpu", 0 )   /* sound CPU */
24902501   ROM_LOAD (  "t2_snd.3", 0x10000, 0x20000, CRC(73c3f5c4) SHA1(978dd974590e77294dbe9a647aebd3d24af6397f) )
24912502   ROM_RELOAD (            0x30000, 0x20000 )
24922503
2493   ROM_REGION( 0x200000, "oki", 0 )   /* ADPCM */
2504   ROM_REGION( 0x100000, "adpcm:oki", 0 )   /* ADPCM */
24942505   ROM_LOAD ( "t2_snd.12", 0x00000, 0x40000, CRC(e192a40d) SHA1(1f7a0e282c0c8eb66cbe514128bd104433e53b7a) )
24952506   ROM_RELOAD(             0x40000, 0x40000 )
24962507   ROM_LOAD ( "t2_snd.13", 0x80000, 0x40000, CRC(956fa80b) SHA1(02ab504627f4b25a394fa4192bb134138cbf6a4f) )
r14963r14964
25192530
25202531
25212532ROM_START( term2la3 )
2522   ROM_REGION( 0x50000, "adpcm", 0 )   /* sound CPU */
2533   ROM_REGION( 0x50000, "adpcm:cpu", 0 )   /* sound CPU */
25232534   ROM_LOAD (  "t2_snd.3", 0x10000, 0x20000, CRC(73c3f5c4) SHA1(978dd974590e77294dbe9a647aebd3d24af6397f) )
25242535   ROM_RELOAD (            0x30000, 0x20000 )
25252536
2526   ROM_REGION( 0x200000, "oki", 0 )   /* ADPCM */
2537   ROM_REGION( 0x100000, "adpcm:oki", 0 )   /* ADPCM */
25272538   ROM_LOAD ( "t2_snd.12", 0x00000, 0x40000, CRC(e192a40d) SHA1(1f7a0e282c0c8eb66cbe514128bd104433e53b7a) )
25282539   ROM_RELOAD(             0x40000, 0x40000 )
25292540   ROM_LOAD ( "t2_snd.13", 0x80000, 0x40000, CRC(956fa80b) SHA1(02ab504627f4b25a394fa4192bb134138cbf6a4f) )
r14963r14964
25522563
25532564
25542565ROM_START( term2la2 )
2555   ROM_REGION( 0x50000, "adpcm", 0 )   /* sound CPU */
2566   ROM_REGION( 0x50000, "adpcm:cpu", 0 )   /* sound CPU */
25562567   ROM_LOAD (  "t2_snd.3", 0x10000, 0x20000, CRC(73c3f5c4) SHA1(978dd974590e77294dbe9a647aebd3d24af6397f) )
25572568   ROM_RELOAD (            0x30000, 0x20000 )
25582569
2559   ROM_REGION( 0x200000, "oki", 0 )   /* ADPCM */
2570   ROM_REGION( 0x100000, "adpcm:oki", 0 )   /* ADPCM */
25602571   ROM_LOAD ( "t2_snd.12", 0x00000, 0x40000, CRC(e192a40d) SHA1(1f7a0e282c0c8eb66cbe514128bd104433e53b7a) )
25612572   ROM_RELOAD(             0x40000, 0x40000 )
25622573   ROM_LOAD ( "t2_snd.13", 0x80000, 0x40000, CRC(956fa80b) SHA1(02ab504627f4b25a394fa4192bb134138cbf6a4f) )
r14963r14964
25852596
25862597
25872598ROM_START( term2la1 )
2588   ROM_REGION( 0x50000, "adpcm", 0 ) /* sound CPU */
2599   ROM_REGION( 0x50000, "adpcm:cpu", 0 ) /* sound CPU */
25892600   ROM_LOAD ( "t2_snd.3", 0x10000, 0x20000, CRC(73c3f5c4) SHA1(978dd974590e77294dbe9a647aebd3d24af6397f) )
25902601   ROM_RELOAD ( 0x30000, 0x20000 )
25912602
2592   ROM_REGION( 0x200000, "oki", 0 ) /* ADPCM */
2603   ROM_REGION( 0x100000, "adpcm:oki", 0 ) /* ADPCM */
25932604   ROM_LOAD ( "t2_snd.12", 0x00000, 0x40000, CRC(e192a40d) SHA1(1f7a0e282c0c8eb66cbe514128bd104433e53b7a) )
25942605   ROM_RELOAD(             0x40000, 0x40000 )
25952606   ROM_LOAD ( "t2_snd.13", 0x80000, 0x40000, CRC(956fa80b) SHA1(02ab504627f4b25a394fa4192bb134138cbf6a4f) )
r14963r14964
26182629
26192630
26202631ROM_START( totcarn )
2621   ROM_REGION( 0x50000, "adpcm", 0 )   /* sound CPU */
2632   ROM_REGION( 0x50000, "adpcm:cpu", 0 )   /* sound CPU */
26222633   ROM_LOAD (  "tcu3.bin", 0x10000, 0x20000, CRC(5bdb4665) SHA1(c6b90b914785b8703790957cc4bb4983a332fba6) )
26232634   ROM_RELOAD (            0x30000, 0x20000 )
26242635
2625   ROM_REGION( 0x200000, "oki", 0 )   /* ADPCM */
2636   ROM_REGION( 0x100000, "adpcm:oki", 0 )   /* ADPCM */
26262637   ROM_LOAD ( "tcu12.bin", 0x00000, 0x40000, CRC(d0000ac7) SHA1(2d476c7727462623feb2f1a23fb797eaeed5ce30) )
26272638   ROM_RELOAD(             0x40000, 0x40000 )
26282639   ROM_LOAD ( "tcu13.bin", 0x80000, 0x40000, CRC(e48e6f0c) SHA1(bf7d548b6b1901966f99c815129ea160ef36f024) )
r14963r14964
26512662
26522663
26532664ROM_START( totcarnp )
2654   ROM_REGION( 0x50000, "adpcm", 0 )   /* sound CPU */
2665   ROM_REGION( 0x50000, "adpcm:cpu", 0 )   /* sound CPU */
26552666   ROM_LOAD (  "tcu3.bin", 0x10000, 0x20000, CRC(5bdb4665) SHA1(c6b90b914785b8703790957cc4bb4983a332fba6) )
26562667   ROM_RELOAD (            0x30000, 0x20000 )
26572668
2658   ROM_REGION( 0x200000, "oki", 0 )   /* ADPCM */
2669   ROM_REGION( 0x100000, "adpcm:oki", 0 )   /* ADPCM */
26592670   ROM_LOAD ( "tcu12.bin", 0x00000, 0x40000, CRC(d0000ac7) SHA1(2d476c7727462623feb2f1a23fb797eaeed5ce30) )
26602671   ROM_RELOAD(             0x40000, 0x40000 )
26612672   ROM_LOAD ( "tcu13.bin", 0x80000, 0x40000, CRC(e48e6f0c) SHA1(bf7d548b6b1901966f99c815129ea160ef36f024) )
src/mame/drivers/midtunit.c
r14963r14964
2222#include "emu.h"
2323#include "cpu/tms34010/tms34010.h"
2424#include "cpu/adsp2100/adsp2100.h"
25#include "audio/williams.h"
26#include "audio/dcs.h"
2725#include "machine/nvram.h"
2826#include "includes/midtunit.h"
2927
r14963r14964
626624static MACHINE_CONFIG_DERIVED( tunit_adpcm, tunit_core )
627625
628626   /* basic machine hardware */
629   MCFG_FRAGMENT_ADD(williams_adpcm_sound)
627   MCFG_SPEAKER_STANDARD_MONO("mono")
628   MCFG_WILLIAMS_ADPCM_SOUND_ADD("adpcm")
629   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
630630MACHINE_CONFIG_END
631631
632632
r14963r14964
645645 *************************************/
646646
647647ROM_START( mk )
648   ROM_REGION( 0x50000, "adpcm", 0 )   /* sound CPU */
648   ROM_REGION( 0x50000, "adpcm:cpu", 0 )   /* sound CPU */
649649   ROM_LOAD( "mks-u3.rom", 0x10000, 0x40000, CRC(c615844c) SHA1(5732f9053a5f73b0cc3b0166d7dc4430829d5bc7) )
650650
651   ROM_REGION( 0x200000, "oki", 0 )   /* ADPCM */
651   ROM_REGION( 0x100000, "adpcm:oki", 0 )   /* ADPCM */
652652   ROM_LOAD( "mks-u12.rom", 0x00000, 0x40000, CRC(258bd7f9) SHA1(463890b23f17350fb9b8a85897b0777c45bc2d54) )
653653   ROM_RELOAD(              0x40000, 0x40000 )
654654   ROM_LOAD( "mks-u13.rom", 0x80000, 0x40000, CRC(7b7ec3b6) SHA1(6eec1b90d4a4855f34a7ebfbf93f3358d5627db4) )
r14963r14964
678678
679679
680680ROM_START( mkr4 )
681   ROM_REGION( 0x50000, "adpcm", 0 )   /* sound CPU */
681   ROM_REGION( 0x50000, "adpcm:cpu", 0 )   /* sound CPU */
682682   ROM_LOAD( "mks-u3.rom", 0x10000, 0x40000, CRC(c615844c) SHA1(5732f9053a5f73b0cc3b0166d7dc4430829d5bc7) )
683683
684   ROM_REGION( 0x200000, "oki", 0 )   /* ADPCM */
684   ROM_REGION( 0x100000, "adpcm:oki", 0 )   /* ADPCM */
685685   ROM_LOAD( "mks-u12.rom", 0x00000, 0x40000, CRC(258bd7f9) SHA1(463890b23f17350fb9b8a85897b0777c45bc2d54) )
686686   ROM_RELOAD(              0x40000, 0x40000 )
687687   ROM_LOAD( "mks-u13.rom", 0x80000, 0x40000, CRC(7b7ec3b6) SHA1(6eec1b90d4a4855f34a7ebfbf93f3358d5627db4) )
r14963r14964
711711
712712
713713ROM_START( mktturbo )
714   ROM_REGION( 0x50000, "adpcm", 0 )   /* sound CPU */
714   ROM_REGION( 0x50000, "adpcm:cpu", 0 )   /* sound CPU */
715715   ROM_LOAD( "mks-u3.rom", 0x10000, 0x40000, CRC(c615844c) SHA1(5732f9053a5f73b0cc3b0166d7dc4430829d5bc7) )
716716
717   ROM_REGION( 0x200000, "oki", 0 )   /* ADPCM */
717   ROM_REGION( 0x100000, "adpcm:oki", 0 )   /* ADPCM */
718718   ROM_LOAD( "mks-u12.rom", 0x00000, 0x40000, CRC(258bd7f9) SHA1(463890b23f17350fb9b8a85897b0777c45bc2d54) )
719719   ROM_RELOAD(              0x40000, 0x40000 )
720720   ROM_LOAD( "mks-u13.rom", 0x80000, 0x40000, CRC(7b7ec3b6) SHA1(6eec1b90d4a4855f34a7ebfbf93f3358d5627db4) )
r14963r14964
11661166
11671167
11681168ROM_START( nbajam )
1169   ROM_REGION( 0x50000, "adpcm", 0 ) /* sound CPU */
1169   ROM_REGION( 0x50000, "adpcm:cpu", 0 ) /* sound CPU */
11701170   ROM_LOAD(  "nbau3.bin", 0x010000, 0x20000, CRC(3a3ea480) SHA1(d12a45cba5c35f046b176661d7877fa4fd0e6c13) )
11711171   ROM_RELOAD(             0x030000, 0x20000 )
11721172
1173   ROM_REGION( 0x200000, "oki", 0 )   /* ADPCM */
1173   ROM_REGION( 0x100000, "adpcm:oki", 0 )   /* ADPCM */
11741174   ROM_LOAD( "nbau12.bin", 0x000000, 0x80000, CRC(b94847f1) SHA1(e7efa0a379bfa91fe4ffb75f07a5dfbfde9a96b4) )
11751175   ROM_LOAD( "nbau13.bin", 0x080000, 0x80000, CRC(b6fe24bd) SHA1(f70f75b5570a2b368ebc74d2a7d264c618940430) )
11761176
r14963r14964
12021202
12031203
12041204ROM_START( nbajamr2 )
1205   ROM_REGION( 0x50000, "adpcm", 0 ) /* sound CPU */
1205   ROM_REGION( 0x50000, "adpcm:cpu", 0 ) /* sound CPU */
12061206   ROM_LOAD(  "nbau3.bin", 0x010000, 0x20000, CRC(3a3ea480) SHA1(d12a45cba5c35f046b176661d7877fa4fd0e6c13) )
12071207   ROM_RELOAD(             0x030000, 0x20000 )
12081208
1209   ROM_REGION( 0x200000, "oki", 0 )   /* ADPCM */
1209   ROM_REGION( 0x100000, "adpcm:oki", 0 )   /* ADPCM */
12101210   ROM_LOAD( "nbau12.bin", 0x000000, 0x80000, CRC(b94847f1) SHA1(e7efa0a379bfa91fe4ffb75f07a5dfbfde9a96b4) )
12111211   ROM_LOAD( "nbau13.bin", 0x080000, 0x80000, CRC(b6fe24bd) SHA1(f70f75b5570a2b368ebc74d2a7d264c618940430) )
12121212
r14963r14964
12381238
12391239
12401240ROM_START( nbajamte )
1241   ROM_REGION( 0x50000, "adpcm", 0 ) /* sound CPU */
1241   ROM_REGION( 0x50000, "adpcm:cpu", 0 ) /* sound CPU */
12421242   ROM_LOAD(  "te-u3.bin", 0x010000, 0x20000, CRC(d4551195) SHA1(e8908fbe4339fb8c93f7e74113dfd25dda1667ea) )
12431243   ROM_RELOAD(             0x030000, 0x20000 )
12441244
1245   ROM_REGION( 0x200000, "oki", 0 )   /* ADPCM */
1245   ROM_REGION( 0x100000, "adpcm:oki", 0 )   /* ADPCM */
12461246   ROM_LOAD( "te-u12.bin", 0x000000, 0x80000, CRC(4fac97bc) SHA1(bd88d8c3edab0e35ad9f9350bcbaa17cda61d87a) )
12471247   ROM_LOAD( "te-u13.bin", 0x080000, 0x80000, CRC(6f27b202) SHA1(c1f0db15624d1e7102ce9fd1db49ccf86e8611d6) )
12481248
r14963r14964
12741274
12751275
12761276ROM_START( nbajamt1 )
1277   ROM_REGION( 0x50000, "adpcm", 0 ) /* sound CPU */
1277   ROM_REGION( 0x50000, "adpcm:cpu", 0 ) /* sound CPU */
12781278   ROM_LOAD(  "te-u3.bin", 0x010000, 0x20000, CRC(d4551195) SHA1(e8908fbe4339fb8c93f7e74113dfd25dda1667ea) )
12791279   ROM_RELOAD(             0x030000, 0x20000 )
12801280
1281   ROM_REGION( 0x200000, "oki", 0 )   /* ADPCM */
1281   ROM_REGION( 0x100000, "adpcm:oki", 0 )   /* ADPCM */
12821282   ROM_LOAD( "te-u12.bin", 0x000000, 0x80000, CRC(4fac97bc) SHA1(bd88d8c3edab0e35ad9f9350bcbaa17cda61d87a) )
12831283   ROM_LOAD( "te-u13.bin", 0x080000, 0x80000, CRC(6f27b202) SHA1(c1f0db15624d1e7102ce9fd1db49ccf86e8611d6) )
12841284
r14963r14964
13101310
13111311
13121312ROM_START( nbajamt2 )
1313   ROM_REGION( 0x50000, "adpcm", 0 ) /* sound CPU */
1313   ROM_REGION( 0x50000, "adpcm:cpu", 0 ) /* sound CPU */
13141314   ROM_LOAD(  "te-u3.bin", 0x010000, 0x20000, CRC(d4551195) SHA1(e8908fbe4339fb8c93f7e74113dfd25dda1667ea) )
13151315   ROM_RELOAD(             0x030000, 0x20000 )
13161316
1317   ROM_REGION( 0x200000, "oki", 0 )   /* ADPCM */
1317   ROM_REGION( 0x100000, "adpcm:oki", 0 )   /* ADPCM */
13181318   ROM_LOAD( "te-u12.bin", 0x000000, 0x80000, CRC(4fac97bc) SHA1(bd88d8c3edab0e35ad9f9350bcbaa17cda61d87a) )
13191319   ROM_LOAD( "te-u13.bin", 0x080000, 0x80000, CRC(6f27b202) SHA1(c1f0db15624d1e7102ce9fd1db49ccf86e8611d6) )
13201320
r14963r14964
13461346
13471347
13481348ROM_START( nbajamt3 )
1349   ROM_REGION( 0x50000, "adpcm", 0 ) /* sound CPU */
1349   ROM_REGION( 0x50000, "adpcm:cpu", 0 ) /* sound CPU */
13501350   ROM_LOAD(  "te-u3.bin", 0x010000, 0x20000, CRC(d4551195) SHA1(e8908fbe4339fb8c93f7e74113dfd25dda1667ea) )
13511351   ROM_RELOAD(             0x030000, 0x20000 )
13521352
1353   ROM_REGION( 0x200000, "oki", 0 )   /* ADPCM */
1353   ROM_REGION( 0x100000, "adpcm:oki", 0 )   /* ADPCM */
13541354   ROM_LOAD( "te-u12.bin", 0x000000, 0x80000, CRC(4fac97bc) SHA1(bd88d8c3edab0e35ad9f9350bcbaa17cda61d87a) )
13551355   ROM_LOAD( "te-u13.bin", 0x080000, 0x80000, CRC(6f27b202) SHA1(c1f0db15624d1e7102ce9fd1db49ccf86e8611d6) )
13561356
r14963r14964
13821382
13831383
13841384ROM_START( nbajamtn )
1385   ROM_REGION( 0x50000, "adpcm", 0 ) /* sound CPU */
1385   ROM_REGION( 0x50000, "adpcm:cpu", 0 ) /* sound CPU */
13861386   ROM_LOAD(  "te-u3.bin", 0x010000, 0x20000, CRC(d4551195) SHA1(e8908fbe4339fb8c93f7e74113dfd25dda1667ea) )
13871387   ROM_RELOAD(             0x030000, 0x20000 )
13881388
1389   ROM_REGION( 0x200000, "oki", 0 )   /* ADPCM */
1389   ROM_REGION( 0x100000, "adpcm:oki", 0 )   /* ADPCM */
13901390   ROM_LOAD( "te-u12.bin", 0x000000, 0x80000, CRC(4fac97bc) SHA1(bd88d8c3edab0e35ad9f9350bcbaa17cda61d87a) )
13911391   ROM_LOAD( "te-u13.bin", 0x080000, 0x80000, CRC(6f27b202) SHA1(c1f0db15624d1e7102ce9fd1db49ccf86e8611d6) )
13921392
r14963r14964
14181418
14191419
14201420ROM_START( jdreddp )
1421   ROM_REGION( 0x50000, "adpcm", 0 ) /* sound CPU */
1421   ROM_REGION( 0x50000, "adpcm:cpu", 0 ) /* sound CPU */
14221422   ROM_LOAD(  "jd_u3.rom", 0x010000, 0x20000, CRC(6154d108) SHA1(54328455ec22ba815de85aa3bfe6405353c64f5c) )
14231423   ROM_RELOAD(             0x030000, 0x20000 )
14241424
1425   ROM_REGION( 0x200000, "oki", 0 )   /* ADPCM */
1425   ROM_REGION( 0x100000, "adpcm:oki", 0 )   /* ADPCM */
14261426   ROM_LOAD( "jd_u12.rom", 0x000000, 0x80000, CRC(ef32f202) SHA1(16aea085e63496dec259291de1a64fbeab52f039) )
14271427   ROM_LOAD( "jd_u13.rom", 0x080000, 0x80000, CRC(3dc70473) SHA1(a3d7210301ff0579889009a075092115d9bf0600) )
14281428
src/mame/drivers/tmmjprd.c
r14963r14964
2020 - tmpdoki isn't a dual screen game, we should remove the dual screen layout from VIDEO_UPDATE and from the MACHINE_DRIVER, also notice that MAME
2121   doesn't have a macro for removing previously declared screens.
2222
23 - sound (see rabbit.c for preliminary details, not copied here)
24
2523 - sprites from one screen are overlapping on the other, probably there's a way to limit them to a single screen
2624
2725 - priority is wrong.
src/mame/drivers/sigmab98.c
r14963r14964
21142114   memory_configure_bank(machine, "rambank", 1, 4, bankedram, 0x1000);
21152115   memory_set_bank(machine, "rambank", 0);
21162116
2117   //state->m_spriteram = auto_alloc_array(machine, UINT8, 0x1000 * 5);
2118   //memset(state->m_spriteram, 0, 0x1000 * 5);
2119   //state->m_spriteram_size = 0x1000;
2117   state->m_spriteram.allocate(0x1000 * 5);
2118   memset(state->m_spriteram, 0, 0x1000 * 5);
21202119   memory_configure_bank(machine, "sprbank", 0, 5, state->m_spriteram, 0x1000);
21212120   memory_set_bank(machine, "sprbank", 0);
21222121
r14963r14964
21622161   memory_set_bankptr(machine, "palbank", state->m_generic_paletteram_8);
21632162   state->m_rambank = 0x64;
21642163
2165   //state->m_spriteram = auto_alloc_array(machine, UINT8, 0x1000 * 5);
2166   //memset(state->m_spriteram, 0, 0x1000 * 5);
2167   //state->m_spriteram_size = 0x1000;
2164   state->m_spriteram.allocate(0x1000 * 5);
2165   memset(state->m_spriteram, 0, 0x1000 * 5);
21682166   memory_set_bankptr(machine, "sprbank0",  state->m_spriteram + 0x1000*4);   // scratch
21692167   memory_set_bankptr(machine, "sprbank1",  state->m_spriteram + 0x1000*4);   // scratch
21702168
r14963r14964
22742272   state->m_generic_paletteram_8.allocate(0x200);
22752273   memset(state->m_generic_paletteram_8, 0, 0x200);
22762274
2277   //state->m_spriteram = auto_alloc_array(machine, UINT8, 0x1000);
2278   //memset(state->m_spriteram, 0, 0x1000);
2279   //state->m_spriteram_size = 0x1000;
2275   state->m_spriteram.allocate(0x1000);
2276   memset(state->m_spriteram, 0, 0x1000);
22802277
22812278   state->m_rombank = 0x65;
22822279   state->m_rambank = 0x53;
src/mame/drivers/dbz.c
r14963r14964
274274
275275static const ym2151_interface ym2151_config =
276276{
277   dbz_sound_irq
277   DEVCB_LINE(dbz_sound_irq)
278278};
279279
280280/**********************************************************************************/
src/mame/drivers/bfm_sc4.c
r14963r14964
1111    This file contains the set lists only, for the actual hardware
1212    emulation see bfm_sc4h.c
1313
14
15   note: default Jackpot keys are set to whatever value the game
16         mentions it should be using with none present, many
17        games accept multiple keys
18
1419*/
1520
1621#include "emu.h"
r14963r14964
99419946   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
99429947   ROM_LOAD16_BYTE( "95400861.lo", 0x00001, 0x080000, CRC(e4949979) SHA1(a00bcd8c839b14b9e1e4b21a8c78a9be789e0cf7) )
99439948   ROM_LOAD16_BYTE( "95400862.hi", 0x00000, 0x080000, CRC(b1cd18f0) SHA1(b34a7d5595d3abad45e0cd027c217ac5b2bb3088) )
9944   sc_pacmn_others
9949   PACMAN_SOUNDS
99459950ROM_END
99469951
99479952ROM_START( sc4pacmna )
99489953   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
99499954   ROM_LOAD16_BYTE( "95402111.lo", 0x00001, 0x080000, CRC(e88b337a) SHA1(ecf7c3fb5e68fba9cbccada502022ae942992699) )
99509955   ROM_LOAD16_BYTE( "95402112.hi", 0x00000, 0x080000, CRC(1f17de1d) SHA1(6576f40cf4dc8fd3de1fd121d5a4c19536da87c5) )
9951   sc_pacmn_others
9956   PACMAN_SOUNDS
99529957ROM_END
99539958
99549959ROM_START( sc4pacmnb )
99559960   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
99569961   ROM_LOAD16_BYTE( "95403111.lo", 0x00001, 0x080000, CRC(259141c0) SHA1(4bb6d8614696548f1f81f6c2045bde45d4316927) )
99579962   ROM_LOAD16_BYTE( "95403112.hi", 0x00000, 0x080000, CRC(26c12768) SHA1(41dbde2bbc7df5bb9e50d9380f8199345ae1989c) )
9958   sc_pacmn_others
9963   PACMAN_SOUNDS
99599964ROM_END
99609965
9961ROM_START( sc4pacmnc )
9966ROM_START( sc4pacqp )
99629967   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
99639968   ROM_LOAD16_BYTE( "96000001.lo", 0x00001, 0x080000, CRC(250b6446) SHA1(d4aaaf1f0eb6833fb90bdfcc46100853db007c98) )
99649969   ROM_LOAD16_BYTE( "96000002.hi", 0x00000, 0x080000, CRC(85aded4d) SHA1(a087e3e82664806858f2b36917a56d5326c79544) )
9965   sc_pacmn_others
9970   QPS_PACP_SOUNDS
99669971ROM_END
99679972
9968ROM_START( sc4pacmnd )
9973ROM_START( sc4pacqpa )
99699974   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
99709975   ROM_LOAD16_BYTE( "96000016.odd", 0x00001, 0x080000, CRC(4e1d764e) SHA1(9c2a5ae820a95448558ed12cbe87a9353c054d44) )
99719976   ROM_LOAD16_BYTE( "96000017.evn", 0x00000, 0x080000, CRC(eaf93528) SHA1(d4464eae9cd015e33f305d0458086e845199b8cd) )
9972   sc_pacmn_others
9977   QPS_PACP_SOUNDS
99739978ROM_END
99749979
9975ROM_START( sc4pacmne )
9980ROM_START( sc4pacqpb )
99769981   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
99779982   ROM_LOAD16_BYTE( "96003001.lo", 0x00001, 0x080000, CRC(70e21196) SHA1(0b7098da61df73f72ba459b1e8e9b6e92aef07d8) )
99789983   ROM_LOAD16_BYTE( "96003002.hi", 0x00000, 0x080000, CRC(4ebbe216) SHA1(aca58b3a2d8368014b738ce15d677dbcca885cc5) )
9979   sc_pacmn_others
9984   QPS_PACP_SOUNDS
99809985ROM_END
99819986
99829987
r14963r14964
1025510260   sc_pgold_others
1025610261ROM_END
1025710262
10258ROM_START( sc4pglcs )
10259   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
10260   ROM_LOAD16_BYTE( "95406734.lo", 0x00001, 0x080000, CRC(e983d8db) SHA1(045c1f73cacfdcbdfbea74ed23287120433e3341) )
10261   ROM_LOAD16_BYTE( "95406735.hi", 0x00000, 0x080000, CRC(c082ae45) SHA1(5985b87924d44155f55806772e406d3dcaf6b506) )
10262   sc_pgold_others
10263ROM_END
1026410263
1026510264ROM_START( sc4pgoldf )
1026610265   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
r14963r14964
1026910268   sc_pgold_others
1027010269ROM_END
1027110270
10271ROM_START( sc4pglcs )
10272   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
10273   ROM_LOAD16_BYTE( "95406734.lo", 0x00001, 0x080000, CRC(e983d8db) SHA1(045c1f73cacfdcbdfbea74ed23287120433e3341) )
10274   ROM_LOAD16_BYTE( "95406735.hi", 0x00000, 0x080000, CRC(c082ae45) SHA1(5985b87924d44155f55806772e406d3dcaf6b506) )
10275   SC4_95004316_CAS_PHAR_GOLD_PR1261
10276ROM_END
10277
1027210278ROM_START( sc4pglcsa )
1027310279   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
1027410280   ROM_LOAD16_BYTE( "95408068.lo", 0x00001, 0x080000, CRC(8932a906) SHA1(eca4706dd62e089ad9ce781b2ede0759dbe44bd9) )
1027510281   ROM_LOAD16_BYTE( "95408069.hi", 0x00000, 0x080000, CRC(f56fff18) SHA1(e123bd7f1af75218dbbef82b33e7c21d882f8105) )
10276   sc_pgold_others
10282   SC4_95004316_CAS_PHAR_GOLD_PR1261
1027710283ROM_END
1027810284
1027910285ROM_START( sc4pglcsb )
1028010286   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
1028110287   ROM_LOAD16_BYTE( "95408144.lo", 0x00001, 0x080000, CRC(ee67e3d6) SHA1(963160426e1b2d4399132ff0df9662dc1d46c121) )
1028210288   ROM_LOAD16_BYTE( "95408145.hi", 0x00000, 0x080000, CRC(b6e8a6d8) SHA1(d443aac2967229de4d6feae634efae9f3cd2f361) )
10283   sc_pgold_others
10289   SC4_95004316_CAS_PHAR_GOLD_PR1261
1028410290ROM_END
1028510291
1028610292
r14963r14964
1830318309   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
1830418310   ROM_LOAD16_BYTE( "95404206.lo", 0x00001, 0x080000, CRC(bb853407) SHA1(498aad2cf2948d7fbef673186823af6a7dbefd95) )
1830518311   ROM_LOAD16_BYTE( "95404207.hi", 0x00000, 0x080000, CRC(e4e3f4e0) SHA1(ab8a8eeb5661d6cd3ba5d25f2082c06ac8c343ac) )
18306   sc_gball_pthers
18312   PR1034_GOLDEN_BALLS_SOUNDS11
1830718313ROM_END
1830818314
1830918315ROM_START( sc4gbcasa )
1831018316   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
1831118317   ROM_LOAD16_BYTE( "95404208.lo", 0x00001, 0x080000, CRC(fc080cdf) SHA1(86084d70e6a68afe3f788661b78cfb8df3bb8104) )
1831218318   ROM_LOAD16_BYTE( "95404209.hi", 0x00000, 0x080000, CRC(6e4d776f) SHA1(0e09b78e138215ceb693bc86a3fe6d7320da9431) )
18313   sc_gball_pthers
18319   PR1034_GOLDEN_BALLS_SOUNDS11
1831418320ROM_END
1831518321
1831618322ROM_START( sc4gbcasb )
1831718323   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
1831818324   ROM_LOAD16_BYTE( "95405206.lo", 0x00001, 0x080000, CRC(79f07bc2) SHA1(e85ddf4c18573894ecd51fec283cc46becb8aacc) )
1831918325   ROM_LOAD16_BYTE( "95405207.hi", 0x00000, 0x080000, CRC(2c295913) SHA1(a8bf658c6ec248e7f53485ce778e9679eae62504) )
18320   sc_gball_pthers
18326   PR1034_GOLDEN_BALLS_SOUNDS11
1832118327ROM_END
1832218328
1832318329ROM_START( sc4gbcasc )
1832418330   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
1832518331   ROM_LOAD16_BYTE( "95405208.lo", 0x00001, 0x080000, CRC(3e7d431a) SHA1(b7975bbbf369d2eb6b8fad5c7200e0007ce2365b) )
1832618332   ROM_LOAD16_BYTE( "95405209.hi", 0x00000, 0x080000, CRC(a687da9c) SHA1(99cbc48fe2c9c28fb3b68107402af10c2a7f39fa) )
18327   sc_gball_pthers
18333   PR1034_GOLDEN_BALLS_SOUNDS11
1832818334ROM_END
1832918335
1833018336ROM_START( sc4gball )
r14963r14964
1835618362ROM_END
1835718363
1835818364
18359ROM_START( sc4ggame )
18365ROM_START( sc4ggtb )
1836018366   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
1836118367   ROM_LOAD16_BYTE( "95404762.lo", 0x00001, 0x080000, CRC(613941b4) SHA1(4cc1441b94913d597aa88e973f4514f7278a7cc9) )
1836218368   ROM_LOAD16_BYTE( "95404763.hi", 0x00000, 0x080000, CRC(dbec56ec) SHA1(bb8f2395afe8d5193320d627ef722c1105b02826) )
1836318369   sc_ggame_others
1836418370ROM_END
1836518371
18372ROM_START( sc4ggtba )
18373   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
18374   ROM_LOAD16_BYTE( "95408086.lo", 0x00001, 0x080000, CRC(cd0b1ea9) SHA1(ebb5023afa24876d97417db50aa675ec29c0351b) )
18375   ROM_LOAD16_BYTE( "95408087.hi", 0x00000, 0x080000, CRC(0a21efb4) SHA1(5765431cfc61521d55e00d7fdd2e08f0ef37d12c) )
18376   sc_ggame_others
18377ROM_END
18378
18379ROM_START( sc4ggtbb )
18380   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
18381   ROM_LOAD16_BYTE( "95414970.lo", 0x00001, 0x080000, CRC(ab09550b) SHA1(004f858e5bcda93653efa511f66d33cbe20a44d1) )
18382   ROM_LOAD16_BYTE( "95414971.hi", 0x00000, 0x080000, CRC(e137aff0) SHA1(50a2a6819034ca5b04c704da7cfaf029bdc031b2) )
18383   sc_ggame_others
18384ROM_END
18385
18386
18387
1836618388ROM_START( sc4ggamea )
1836718389   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
1836818390   ROM_LOAD16_BYTE( "95406768.lo", 0x00001, 0x080000, CRC(dec1db93) SHA1(b22b874e5ff5da46e2783544781d7387f98dd4fc) )
r14963r14964
1839118413   sc_ggame_others
1839218414ROM_END
1839318415
18394ROM_START( sc4ggamee )
18395   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
18396   ROM_LOAD16_BYTE( "95408086.lo", 0x00001, 0x080000, CRC(cd0b1ea9) SHA1(ebb5023afa24876d97417db50aa675ec29c0351b) )
18397   ROM_LOAD16_BYTE( "95408087.hi", 0x00000, 0x080000, CRC(0a21efb4) SHA1(5765431cfc61521d55e00d7fdd2e08f0ef37d12c) )
18398   sc_ggame_others
18399ROM_END
1840018416
1840118417ROM_START( sc4ggamef )
1840218418   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
r14963r14964
1841218428   sc_ggame_others
1841318429ROM_END
1841418430
18415ROM_START( sc4ggameh )
18431ROM_START( sc4ggame )
1841618432   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
1841718433   ROM_LOAD16_BYTE( "95414396.lo", 0x00001, 0x080000, CRC(1160d686) SHA1(b531823f970e09c808e2efb284951c79091b44b1) )
1841818434   ROM_LOAD16_BYTE( "95414397.hi", 0x00000, 0x080000, CRC(886f6d1f) SHA1(532f53d2c9956212ea0086b92c1dad38b417ad9e) )
r14963r14964
1846318479
1846418480
1846518481
18466ROM_START( sc4ggameo )
18467   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
18468   ROM_LOAD16_BYTE( "95414970.lo", 0x00001, 0x080000, CRC(ab09550b) SHA1(004f858e5bcda93653efa511f66d33cbe20a44d1) )
18469   ROM_LOAD16_BYTE( "95414971.hi", 0x00000, 0x080000, CRC(e137aff0) SHA1(50a2a6819034ca5b04c704da7cfaf029bdc031b2) )
18470   sc_ggame_others
18471ROM_END
1847218482
1847318483
1847418484ROM_START( sc4ggamep )
r14963r14964
1871618726
1871718727
1871818728
18719ROM_START( sc4ggg )
18729ROM_START( sc4gggtb )
1872018730   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
1872118731   ROM_LOAD16_BYTE( "95420668.lo", 0x00001, 0x080000, CRC(afef1626) SHA1(00d676d0ed36ddf4255d26779b3319f61319a9cb) )
1872218732   ROM_LOAD16_BYTE( "95420669.hi", 0x00000, 0x080000, CRC(6e273bf4) SHA1(35ba48892d9ea3ebcb00fe33c75ee8e7949ab421) )
1872318733   sc_ggg_others
1872418734ROM_END
1872518735
18726ROM_START( sc4ggga )
18736ROM_START( sc4gggtba )
1872718737   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
18738   ROM_LOAD16_BYTE( "95421668.lo", 0x00001, 0x080000, CRC(6f4964c8) SHA1(14948920079694791a66dfd1f07b22badb37bc57) )
18739   ROM_LOAD16_BYTE( "95421669.hi", 0x00000, 0x080000, CRC(23e030cf) SHA1(85c70ee8f906b48fb75692ec9e58e9072b1a731d) )
18740   sc_ggg_others
18741ROM_END
18742
18743ROM_START( sc4ggg )
18744   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
1872818745   ROM_LOAD16_BYTE( "95420672.lo", 0x00001, 0x080000, CRC(88dd2622) SHA1(dc30308638d602b76e828cf6c98605a9fb7589b6) )
1872918746   ROM_LOAD16_BYTE( "95420673.hi", 0x00000, 0x080000, CRC(309a5f9c) SHA1(8592127022c84bc6c36b744d8fa0d44a1bc38ea0) )
1873018747   sc_ggg_others
r14963r14964
1878718804   sc_ggg_others
1878818805ROM_END
1878918806
18790ROM_START( sc4gggj )
18791   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
18792   ROM_LOAD16_BYTE( "95421668.lo", 0x00001, 0x080000, CRC(6f4964c8) SHA1(14948920079694791a66dfd1f07b22badb37bc57) )
18793   ROM_LOAD16_BYTE( "95421669.hi", 0x00000, 0x080000, CRC(23e030cf) SHA1(85c70ee8f906b48fb75692ec9e58e9072b1a731d) )
18794   sc_ggg_others
18795ROM_END
1879618807
18808
1879718809ROM_START( sc4gggk )
1879818810   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
1879918811   ROM_LOAD16_BYTE( "95421672.lo", 0x00001, 0x080000, CRC(297c1a93) SHA1(7d0f8c6998f2970e1cce94a71fa4327edc66e07e) )
r14963r14964
1893018942   sc_hapnt_others
1893118943ROM_END
1893218944
18933ROM_START( sc4hntcs )
18934   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
18935   ROM_LOAD16_BYTE( "95410960.lo", 0x00001, 0x080000, CRC(09417c00) SHA1(6d10896bf290c58b6fdb5d735b423a9d2d7db5d7) )
18936   ROM_LOAD16_BYTE( "95410961.hi", 0x00000, 0x080000, CRC(1611d748) SHA1(b5ae00a1e1adaf7af912b3f21fb0cb7b414996b3) )
18937   sc_hapnt_others
18938ROM_END
1893918945
18940ROM_START( sc4hntcsa )
18941   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
18942   ROM_LOAD16_BYTE( "95410962.lo", 0x00001, 0x080000, CRC(64cecf4d) SHA1(63f9f5fda15e99a249ea869105461c6d1db0a01a) )
18943   ROM_LOAD16_BYTE( "95410963.hi", 0x00000, 0x080000, CRC(758108b0) SHA1(4de01d82d5ff01adfa3907adb46d666dd9979734) )
18944   sc_hapnt_others
18945ROM_END
18946
18947ROM_START( sc4hntcsb )
18948   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
18949   ROM_LOAD16_BYTE( "95410964.lo", 0x00001, 0x080000, CRC(fbf06b79) SHA1(8130b8e9f5f18399963db8206f0d6c9ed0312fce) )
18950   ROM_LOAD16_BYTE( "95410965.hi", 0x00000, 0x080000, CRC(a91e7166) SHA1(accaa8c05fe6754b4ac1cf6eee5713de239968ce) )
18951   sc_hapnt_others
18952ROM_END
18953
18954ROM_START( sc4hntcsc )
18955   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
18956   ROM_LOAD16_BYTE( "95411960.lo", 0x00001, 0x080000, CRC(e4f6033a) SHA1(4bde8c65639e952e4120c9a538d709a88e2a7982) )
18957   ROM_LOAD16_BYTE( "95411961.hi", 0x00000, 0x080000, CRC(f17e876d) SHA1(d90123e04cbf6935ee9cb62abbfa5cabed83c5b5) )
18958   sc_hapnt_others
18959ROM_END
18960
1896118946ROM_START( sc4hapntb )
1896218947   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
1896318948   ROM_LOAD16_BYTE( "p1306p12.hi", 0x00000, 0x080000, CRC(ea9c501d) SHA1(31f912906f562a04053f58ebed3c7bd0ee864434) )
r14963r14964
1898618971   sc_hapnt_others
1898718972ROM_END
1898818973
18974
18975ROM_START( sc4hntcs )
18976   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
18977   ROM_LOAD16_BYTE( "95410960.lo", 0x00001, 0x080000, CRC(09417c00) SHA1(6d10896bf290c58b6fdb5d735b423a9d2d7db5d7) )
18978   ROM_LOAD16_BYTE( "95410961.hi", 0x00000, 0x080000, CRC(1611d748) SHA1(b5ae00a1e1adaf7af912b3f21fb0cb7b414996b3) )
18979   PR1327_CAS_HAPPY_NOTES_SOUNDS11
18980ROM_END
18981
18982ROM_START( sc4hntcsa )
18983   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
18984   ROM_LOAD16_BYTE( "95410962.lo", 0x00001, 0x080000, CRC(64cecf4d) SHA1(63f9f5fda15e99a249ea869105461c6d1db0a01a) )
18985   ROM_LOAD16_BYTE( "95410963.hi", 0x00000, 0x080000, CRC(758108b0) SHA1(4de01d82d5ff01adfa3907adb46d666dd9979734) )
18986   PR1327_CAS_HAPPY_NOTES_SOUNDS11
18987ROM_END
18988
18989ROM_START( sc4hntcsb )
18990   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
18991   ROM_LOAD16_BYTE( "95410964.lo", 0x00001, 0x080000, CRC(fbf06b79) SHA1(8130b8e9f5f18399963db8206f0d6c9ed0312fce) )
18992   ROM_LOAD16_BYTE( "95410965.hi", 0x00000, 0x080000, CRC(a91e7166) SHA1(accaa8c05fe6754b4ac1cf6eee5713de239968ce) )
18993   PR1327_CAS_HAPPY_NOTES_SOUNDS11
18994ROM_END
18995
18996ROM_START( sc4hntcsc )
18997   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
18998   ROM_LOAD16_BYTE( "95411960.lo", 0x00001, 0x080000, CRC(e4f6033a) SHA1(4bde8c65639e952e4120c9a538d709a88e2a7982) )
18999   ROM_LOAD16_BYTE( "95411961.hi", 0x00000, 0x080000, CRC(f17e876d) SHA1(d90123e04cbf6935ee9cb62abbfa5cabed83c5b5) )
19000   PR1327_CAS_HAPPY_NOTES_SOUNDS11
19001ROM_END
19002
1898919003ROM_START( sc4hntcsd )
1899019004   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
1899119005   ROM_LOAD16_BYTE( "p1327p12.hi", 0x00000, 0x080000, CRC(734e60a9) SHA1(911f6c78654020c03b3e906aaf37ce3751f1cd85) )
1899219006   ROM_LOAD16_BYTE( "p1327p12.lo", 0x00001, 0x080000, CRC(d1d169e0) SHA1(41540cee7ca0fbe2c93a1c55f0f9e9c933ed3f3b) )
18993   sc_hapnt_others
19007   PR1327_CAS_HAPPY_NOTES_SOUNDS11
1899419008ROM_END
1899519009
1899619010ROM_START( sc4hntcse )
1899719011   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
1899819012   ROM_LOAD16_BYTE( "p1327p13.hi", 0x00000, 0x080000, CRC(d3141aff) SHA1(7c75e47e1a36979177c220edacc5256342c3405c) )
1899919013   ROM_LOAD16_BYTE( "p1327p13.lo", 0x00001, 0x080000, CRC(b80f3b5f) SHA1(8b1a3daadb67b2d147184ab7213abe9c29791c6e) )
19000   sc_hapnt_others
19014   PR1327_CAS_HAPPY_NOTES_SOUNDS11
1900119015ROM_END
1900219016
1900319017ROM_START( sc4hntcsf )
1900419018   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
1900519019   ROM_LOAD16_BYTE( "p1327p41.hi", 0x00000, 0x080000, CRC(0a0305da) SHA1(c4ed571484d13fed4adc83d96efabe060a6452a5) )
1900619020   ROM_LOAD16_BYTE( "p1327p41.lo", 0x00001, 0x080000, CRC(f0001712) SHA1(5be70eaedca55c4098f236763206cf32bb1c2f4d) )
19007   sc_hapnt_others
19021   PR1327_CAS_HAPPY_NOTES_SOUNDS11
1900819022ROM_END
1900919023
1901019024ROM_START( sc4hntcsg )
1901119025   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
1901219026   ROM_LOAD16_BYTE( "p1327p42.hi", 0x00000, 0x080000, CRC(c6e34460) SHA1(63ae0930b7b0c104edee067a0e13c0a90c2d027c) )
1901319027   ROM_LOAD16_BYTE( "p1327p42.lo", 0x00001, 0x080000, CRC(5e055385) SHA1(e42d7a0668bd1069c20bd519c37c1fcacabffca2) )
19014   sc_hapnt_others
19028   PR1327_CAS_HAPPY_NOTES_SOUNDS11
1901519029ROM_END
1901619030
1901719031ROM_START( sc4hntcsh )
1901819032   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
1901919033   ROM_LOAD16_BYTE( "p1327p61.hi", 0x00000, 0x080000, CRC(27a9e9a7) SHA1(9489bc73a3c806de974a82397c0d9907bcb3b9e5) )
1902019034   ROM_LOAD16_BYTE( "p1327p61.lo", 0x00001, 0x080000, CRC(13e3aa1e) SHA1(8bd97ebaa6b56e7c846cde2f0b61173c0332c120) )
19021   sc_hapnt_others
19035   PR1327_CAS_HAPPY_NOTES_SOUNDS11
1902219036ROM_END
1902319037
1902419038ROM_START( sc4hntcsi )
1902519039   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
1902619040   ROM_LOAD16_BYTE( "p1327p71.hi", 0x00000, 0x080000, CRC(d9dd087b) SHA1(872a52bcb42df863407ecb796c8768a02d3614d9) )
1902719041   ROM_LOAD16_BYTE( "p1327p71.lo", 0x00001, 0x080000, CRC(6cbef7a3) SHA1(11b6dfd24595fd10ce31e3f6361c6e9a7880c6c9) )
19028   sc_hapnt_others
19042   PR1327_CAS_HAPPY_NOTES_SOUNDS11
1902919043ROM_END
1903019044
1903119045ROM_START( sc4hntcsj )
1903219046   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
1903319047   ROM_LOAD16_BYTE( "p1327s12.hi", 0x00000, 0x080000, CRC(9aae872b) SHA1(fbd5e402d76bfc2b6e99667b6c97f851fc482abb) )
1903419048   ROM_LOAD16_BYTE( "p1327s12.lo", 0x00001, 0x080000, CRC(c964b987) SHA1(422b59e1ca2f3105ab28b33f4e95314ee525882f) )
19035   sc_hapnt_others
19049   PR1327_CAS_HAPPY_NOTES_SOUNDS11
1903619050ROM_END
1903719051
1903819052ROM_START( sc4hntcsk )
1903919053   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
1904019054   ROM_LOAD16_BYTE( "p1327s13.hi", 0x00000, 0x080000, CRC(fc9dcc8a) SHA1(20605e20cdb643384f6c268d9e52b362d7369786) )
1904119055   ROM_LOAD16_BYTE( "p1327s13.lo", 0x00001, 0x080000, CRC(e2327afa) SHA1(bd1c0334fbc5ae4c386ad389c0ec619344c26656) )
19042   sc_hapnt_others
19056   PR1327_CAS_HAPPY_NOTES_SOUNDS11
1904319057ROM_END
1904419058
1904519059ROM_START( sc4hntcsl )
1904619060   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
1904719061   ROM_LOAD16_BYTE( "p1327s41.hi", 0x00000, 0x080000, CRC(cd03727a) SHA1(fcc802a62d60bb084ea3451730bc685212510320) )
1904819062   ROM_LOAD16_BYTE( "p1327s41.lo", 0x00001, 0x080000, CRC(346db912) SHA1(83435a6bb3e557a04040cd221474df23c39aa507) )
19049   sc_hapnt_others
19063   PR1327_CAS_HAPPY_NOTES_SOUNDS11
1905019064ROM_END
1905119065
1905219066ROM_START( sc4hntcsm )
1905319067   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
1905419068   ROM_LOAD16_BYTE( "p1327s42.hi", 0x00000, 0x080000, CRC(2e737e11) SHA1(d1447129e4e1c888527371f1c5625d3e33d9d187) )
1905519069   ROM_LOAD16_BYTE( "p1327s42.lo", 0x00001, 0x080000, CRC(3916863f) SHA1(d0949fcc6414f42d292a04bd0d056cc51a10371c) )
19056   sc_hapnt_others
19070   PR1327_CAS_HAPPY_NOTES_SOUNDS11
1905719071ROM_END
1905819072
1905919073ROM_START( sc4hntcsn )
1906019074   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
1906119075   ROM_LOAD16_BYTE( "p1327s61.hi", 0x00000, 0x080000, CRC(d3429de9) SHA1(4e5f6df4a557dd0aa061a0b7c4d30b8f01f1d958) )
1906219076   ROM_LOAD16_BYTE( "p1327s61.lo", 0x00001, 0x080000, CRC(76e3c418) SHA1(1ec77288096715894e0e179024205fa9dfaf3909) )
19063   sc_hapnt_others
19077   PR1327_CAS_HAPPY_NOTES_SOUNDS11
1906419078ROM_END
1906519079
1906619080ROM_START( sc4hntcso )
1906719081   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
1906819082   ROM_LOAD16_BYTE( "p1327s71.hi", 0x00000, 0x080000, CRC(2d367c35) SHA1(547ba184d465d90296150595f35a5c4b012108c6) )
1906919083   ROM_LOAD16_BYTE( "p1327s71.lo", 0x00001, 0x080000, CRC(09be99a5) SHA1(d9ad6f8e4487c7fdf129478ac967d4c0aa96a0f9) )
19070   sc_hapnt_others
19084   PR1327_CAS_HAPPY_NOTES_SOUNDS11
1907119085ROM_END
1907219086
1907319087
r14963r14964
1907619090   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
1907719091   ROM_LOAD16_BYTE( "95406678.lo", 0x00001, 0x080000, CRC(82fa3872) SHA1(c1de9c35998c710f22eb95283a5a21d8e22c3c30) )
1907819092   ROM_LOAD16_BYTE( "95406679.hi", 0x00000, 0x080000, CRC(5b0767c6) SHA1(3a0245ba5822ab3faa74a1f06a3c1648fa97ee40) )
19079   sc_hellb_others
19093   SC4_95004211_HELLS_BELLS_PR6945
1908019094ROM_END
1908119095
1908219096ROM_START( sc4hellba )
r14963r14964
2245222466ROM_END
2245322467
2245422468
22455ROM_START( sc4mowowd )
22469ROM_START( sc4mwwtb )
2245622470   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
22457   ROM_LOAD16_BYTE( "95418078.lo", 0x00001, 0x080000, CRC(73044155) SHA1(f86e25c7c02f65e2f99b3e7b3b7192d2b5fc0b54) )
22458   ROM_LOAD16_BYTE( "95418079.hi", 0x00000, 0x080000, CRC(1d260113) SHA1(834fec1e07e9a2f59adbb052e51dc03493dcee9e) )
22459   sc_mowow_others
22460ROM_END
22461
22462ROM_START( sc4mowowe )
22463   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
22464   ROM_LOAD16_BYTE( "95419078.lo", 0x00001, 0x080000, CRC(9205e5fb) SHA1(e77062edcc51e44612c558ee593028934835a41d) )
22465   ROM_LOAD16_BYTE( "95419079.hi", 0x00000, 0x080000, CRC(f80fae88) SHA1(c483f89204489775458112d7ed34ad778d3c9e71) )
22466   sc_mowow_others
22467ROM_END
22468
22469ROM_START( sc4mowowf )
22470   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
2247122471   ROM_LOAD16_BYTE( "95424056.lo", 0x00001, 0x080000, CRC(255586e1) SHA1(caa32b86ab5f726174bb45402a015e2ae1b6ff68) )
2247222472   ROM_LOAD16_BYTE( "95424057.hi", 0x00000, 0x080000, CRC(be45b2b1) SHA1(5d17963f705f8bcaa7a93af2c2621677a57ef039) )
22473   sc_mowow_others
22473   WHEEL_OF_WEALTH_WOWT_SOUNDS
2247422474ROM_END
2247522475
22476ROM_START( sc4mowowg )
22476ROM_START( sc4mwwtba )
2247722477   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
2247822478   ROM_LOAD16_BYTE( "95424214.lo", 0x00001, 0x080000, CRC(a8b93c99) SHA1(83e6fa6751634f64d285ba6f93b8d52690c17d4a) )
2247922479   ROM_LOAD16_BYTE( "95424215.hi", 0x00000, 0x080000, CRC(05c523d6) SHA1(558031df5270567ca2bd88a389b33cfae34b7967) )
22480   sc_mowow_others
22480   WHEEL_OF_WEALTH_WOWT_SOUNDS
2248122481ROM_END
2248222482
22483ROM_START( sc4mowowh )
22483ROM_START( sc4mwwtbb )
2248422484   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
2248522485   ROM_LOAD16_BYTE( "95424512.lo", 0x00001, 0x080000, CRC(14b7ef71) SHA1(675345c95d2a68d1b3092d564a9c6192a7390486) )
2248622486   ROM_LOAD16_BYTE( "95424513.hi", 0x00000, 0x080000, CRC(dd7c5383) SHA1(fad0cbba52a5c2746d325f437f9d85bee5776201) )
22487   sc_mowow_others
22487   WHEEL_OF_WEALTH_WOWT_SOUNDS
2248822488ROM_END
2248922489
22490ROM_START( sc4mowowi )
22490ROM_START( sc4mwwtbc )
2249122491   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
2249222492   ROM_LOAD16_BYTE( "95425056.lo", 0x00001, 0x080000, CRC(b2c7fe92) SHA1(00e27916482a5fcabde46da8e139b49f789837a8) )
2249322493   ROM_LOAD16_BYTE( "95425057.hi", 0x00000, 0x080000, CRC(8946e5d6) SHA1(1426c7ea7ded18b03bab7b08d0d13021bc8aa75b) )
22494   sc_mowow_others
22494   WHEEL_OF_WEALTH_WOWT_SOUNDS
2249522495ROM_END
2249622496
22497ROM_START( sc4mowowj ) // these were in the dnd perfect game set
22497ROM_START( sc4mwwtbd ) // these were in the dnd perfect game set
2249822498   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
2249922499   ROM_LOAD16_BYTE( "95425512.lo", 0x00001, 0x080000, CRC(1e66031a) SHA1(b149806fe7c0a996dfda4abcd00aa7ae9b126a7b) )
2250022500   ROM_LOAD16_BYTE( "95425513.hi", 0x00000, 0x080000, CRC(a668aaae) SHA1(593f846687aa7d851fb38e62046c6174dfa088f5) )
22501   sc_mowow_others
22501   WHEEL_OF_WEALTH_WOWT_SOUNDS
2250222502ROM_END
2250322503
2250422504
2250522505
22506ROM_START( sc4bwow )
22507   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
22508   ROM_LOAD16_BYTE( "95418078.lo", 0x00001, 0x080000, CRC(73044155) SHA1(f86e25c7c02f65e2f99b3e7b3b7192d2b5fc0b54) )
22509   ROM_LOAD16_BYTE( "95418079.hi", 0x00000, 0x080000, CRC(1d260113) SHA1(834fec1e07e9a2f59adbb052e51dc03493dcee9e) )
22510   PR1706_WHEEL_OF_WEALTH_SOUNDS11
22511ROM_END
2250622512
22513ROM_START( sc4bwowa )
22514   ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF )
22515   ROM_LOAD16_BYTE( "95419078.lo", 0x00001, 0x080000, CRC(9205e5fb) SHA1(e77062edcc51e44612c558ee593028934835a41d) )
22516   ROM_LOAD16_BYTE( "95419079.hi", 0x00000, 0x080000, CRC(f80fae88) SHA1(c483f89204489775458112d7ed34ad778d3c9e71) )
22517   PR1706_WHEEL_OF_WEALTH_SOUNDS11
22518ROM_END
2250722519
2250822520
2250922521
r14963r14964
2433024342GAME( 200?, sc4outlwc   ,sc4outlw,   sc4, sc4, sc4, ROT0, "BFM","Outlaw (Bellfruit) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL )
2433124343
2433224344
24345// PR7072 PAC MAN         PACP SOUNDS             PAC-MAN
24346GAME( 200?, sc4pacqp   ,0,           sc4, sc4, sc4, ROT0, "QPS","Pac Man (PR7072) (QPS) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
24347GAME( 200?, sc4pacqpa   ,sc4pacqp,   sc4, sc4, sc4, ROT0, "QPS","Pac Man (PR7072) (QPS) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
24348GAME( 200?, sc4pacqpb   ,sc4pacqp,   sc4, sc4, sc4, ROT0, "QPS","Pac Man (PR7072) (QPS) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL )
24349
2433324350// PR7026 PACMAN         PACMAN SOUNDS
24334GAME( 200?, sc4pacmn   ,0,         sc4, sc4, sc4, ROT0, "Mazooma","Pac Man (PR7026) (Mazooma) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
24351GAME( 200?, sc4pacmn   ,0,         sc4, sc4, sc4, ROT0, "Mazooma","Pac Man (PR7026) (Mazooma) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL ) // this set doesn't start, CPU ends up dead?
2433524352GAME( 200?, sc4pacmna   ,sc4pacmn,   sc4, sc4, sc4, ROT0, "Mazooma","Pac Man (PR7026) (Mazooma) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
2433624353GAME( 200?, sc4pacmnb   ,sc4pacmn,   sc4, sc4, sc4, ROT0, "Mazooma","Pac Man (PR7026) (Mazooma) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL )
24337// PR7072 PAC MAN         PACP SOUNDS             PAC-MAN
24338GAME( 200?, sc4pacmnc   ,sc4pacmn,   sc4, sc4, sc4, ROT0, "Mazooma","Pac Man (PR7072) (Mazooma) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL )
24339GAME( 200?, sc4pacmnd   ,sc4pacmn,   sc4, sc4, sc4, ROT0, "Mazooma","Pac Man (PR7072) (Mazooma) (Scorpion 4) (set 5)", GAME_IS_SKELETON_MECHANICAL )
24340GAME( 200?, sc4pacmne   ,sc4pacmn,   sc4, sc4, sc4, ROT0, "Mazooma","Pac Man (PR7072) (Mazooma) (Scorpion 4) (set 6)", GAME_IS_SKELETON_MECHANICAL )
2434124354
24355
2434224356// PR7049CASINO PACMAN         PACMAN SOUNDS
2434324357GAME( 200?, sc4paccs   ,0,         sc4, sc4, sc4, ROT0, "Mazooma","Pac Man Casino (Mazooma) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
2434424358GAME( 200?, sc4paccsa   ,sc4paccs,   sc4, sc4, sc4, ROT0, "Mazooma","Pac Man Casino (Mazooma) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
r14963r14964
2438124395//  PR1205 PAY TIME         95004224 PAYTIME PR7156             PAY TIME
2438224396GAME( 200?, sc4paytm   ,0,         sc4, sc4, sc4, ROT0, "BFM","Pay Time (Bellfruit) (Scorpion 4)", GAME_IS_SKELETON_MECHANICAL ) // Not English
2438324397
24398const stepper_interface* sc4pgold_reel_configs[6] =
24399{
24400   &starpoint_interface_48step,
24401   &starpoint_interface_48step,
24402   &starpoint_interface_48step,
24403   &starpoint_interface_48step,
24404   &starpoint_interface_200step_reel,
24405   0,
24406};
24407
24408static DRIVER_INIT( sc4pgold )
24409{
24410   sc4_state *state = machine.driver_data<sc4_state>();
24411   DRIVER_INIT_CALL( sc4mbus );
24412   state->m_reel_setup = sc4pgold_reel_configs;
24413}
24414
2438424415// PR1012 PHARAOH'S GOLD         PR1012 PHARAOHS GOLD SOUNDS11
24385GAME( 200?, sc4pgold   ,0,         sc4, sc4, sc4, ROT0, "BFM","Pharaoh's Gold (Bellfruit) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
24386GAME( 200?, sc4pgolda   ,sc4pgold,   sc4, sc4, sc4, ROT0, "BFM","Pharaoh's Gold (Bellfruit) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
24387GAME( 200?, sc4pgoldb   ,sc4pgold,   sc4, sc4, sc4, ROT0, "BFM","Pharaoh's Gold (Bellfruit) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL )
24388GAME( 200?, sc4pgoldc   ,sc4pgold,   sc4, sc4, sc4, ROT0, "BFM","Pharaoh's Gold (Bellfruit) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL )
24389GAME( 200?, sc4pgoldd   ,sc4pgold,   sc4, sc4, sc4, ROT0, "BFM","Pharaoh's Gold (Bellfruit) (Scorpion 4) (set 5)", GAME_IS_SKELETON_MECHANICAL )
24390GAME( 200?, sc4pgoldf   ,sc4pgold,   sc4, sc4, sc4, ROT0, "BFM","Pharaoh's Gold (Bellfruit) (Scorpion 4) (set 6)", GAME_IS_SKELETON_MECHANICAL )
24416GAME( 200?, sc4pgold   ,0,         sc4, sc4, sc4pgold, ROT0, "BFM","Pharaoh's Gold (Bellfruit) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
24417GAME( 200?, sc4pgolda   ,sc4pgold,   sc4, sc4, sc4pgold, ROT0, "BFM","Pharaoh's Gold (Bellfruit) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
24418GAME( 200?, sc4pgoldb   ,sc4pgold,   sc4, sc4, sc4pgold, ROT0, "BFM","Pharaoh's Gold (Bellfruit) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL )
24419GAME( 200?, sc4pgoldc   ,sc4pgold,   sc4, sc4, sc4pgold, ROT0, "BFM","Pharaoh's Gold (Bellfruit) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL )
24420GAME( 200?, sc4pgoldd   ,sc4pgold,   sc4, sc4, sc4pgold, ROT0, "BFM","Pharaoh's Gold (Bellfruit) (Scorpion 4) (set 5)", GAME_IS_SKELETON_MECHANICAL )
24421GAME( 200?, sc4pgoldf   ,sc4pgold,   sc4, sc4, sc4pgold, ROT0, "BFM","Pharaoh's Gold (Bellfruit) (Scorpion 4) (set 6)", GAME_IS_SKELETON_MECHANICAL )
2439124422
24423
24424// same name, but a different game? (Less reels..)
2439224425//  PR1261 PHARAOH'S GOLD         95004316 CAS PHAR GOLD PR1261
24393GAME( 200?, sc4pglcs   ,0,         sc4, sc4, sc4, ROT0, "BFM","Pharaoh's Gold Casino (Bellfruit) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
24394GAME( 200?, sc4pglcsa   ,sc4pglcs,   sc4, sc4, sc4, ROT0, "BFM","Pharaoh's Gold Casino (Bellfruit) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
24395GAME( 200?, sc4pglcsb   ,sc4pglcs,   sc4, sc4, sc4, ROT0, "BFM","Pharaoh's Gold Casino (Bellfruit) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL )
24426GAME( 200?, sc4pglcs   ,0,         sc4, sc4, sc4, ROT0, "BFM","Pharaoh's Gold Casino (Bellfruit) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL ) // Not English
24427GAME( 200?, sc4pglcsa   ,sc4pglcs,   sc4, sc4, sc4, ROT0, "BFM","Pharaoh's Gold Casino (Bellfruit) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL ) // Not English
24428GAME( 200?, sc4pglcsb   ,sc4pglcs,   sc4, sc4, sc4, ROT0, "BFM","Pharaoh's Gold Casino (Bellfruit) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL ) // Not English
2439624429
2439724430
2439824431
r14963r14964
2467124704GAME( 200?, sc4rbankc   ,sc4rbank,   sc4, sc4, sc4, ROT0, "BFM","Royle Banker (Bellfruit) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL )
2467224705
2467324706
24707const stepper_interface* sc4royle_reel_configs[6] =
24708{
24709   &starpoint_interface_48step,
24710   &starpoint_interface_48step,
24711   &starpoint_interface_48step,
24712   0,
24713   &starpoint_interface_200step_reel,
24714   0,
24715};
2467424716
24717static DRIVER_INIT( sc4royle )
24718{
24719   sc4_state *state = machine.driver_data<sc4_state>();
24720   DRIVER_INIT_CALL( sc4mbus );
24721   state->m_reel_setup = sc4royle_reel_configs;
24722}
24723
2467524724// PR1102 ROYLEFAMILY         PR1102 ROYLEFAMILY SOUNDS11
24676GAME( 200?, sc4royle   ,0,         sc4, sc4, sc4, ROT0, "BFM","Royle Family (Bellfruit) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
24677GAME( 200?, sc4roylea   ,sc4royle,   sc4, sc4, sc4, ROT0, "BFM","Royle Family (Bellfruit) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
24678GAME( 200?, sc4royleb   ,sc4royle,   sc4, sc4, sc4, ROT0, "BFM","Royle Family (Bellfruit) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL )
24679GAME( 200?, sc4roylec   ,sc4royle,   sc4, sc4, sc4, ROT0, "BFM","Royle Family (Bellfruit) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL )
24680GAME( 200?, sc4royled   ,sc4royle,   sc4, sc4, sc4, ROT0, "BFM","Royle Family (Bellfruit) (Scorpion 4) (set 5)", GAME_IS_SKELETON_MECHANICAL )
24681GAME( 200?, sc4roylee   ,sc4royle,   sc4, sc4, sc4, ROT0, "BFM","Royle Family (Bellfruit) (Scorpion 4) (set 6)", GAME_IS_SKELETON_MECHANICAL )
24682GAME( 200?, sc4royleh   ,sc4royle,   sc4, sc4, sc4, ROT0, "BFM","Royle Family (Bellfruit) (Scorpion 4) (set 7)", GAME_IS_SKELETON_MECHANICAL )
24683GAME( 200?, sc4roylei   ,sc4royle,   sc4, sc4, sc4, ROT0, "BFM","Royle Family (Bellfruit) (Scorpion 4) (set 8)", GAME_IS_SKELETON_MECHANICAL )
24725GAME( 200?, sc4royle   ,0,         sc4, sc4, sc4royle, ROT0, "BFM","Royle Family (Bellfruit) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
24726GAME( 200?, sc4roylea   ,sc4royle,   sc4, sc4, sc4royle, ROT0, "BFM","Royle Family (Bellfruit) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
24727GAME( 200?, sc4royleb   ,sc4royle,   sc4, sc4, sc4royle, ROT0, "BFM","Royle Family (Bellfruit) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL )
24728GAME( 200?, sc4roylec   ,sc4royle,   sc4, sc4, sc4royle, ROT0, "BFM","Royle Family (Bellfruit) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL )
24729GAME( 200?, sc4royled   ,sc4royle,   sc4, sc4, sc4royle, ROT0, "BFM","Royle Family (Bellfruit) (Scorpion 4) (set 5)", GAME_IS_SKELETON_MECHANICAL )
24730GAME( 200?, sc4roylee   ,sc4royle,   sc4, sc4, sc4royle, ROT0, "BFM","Royle Family (Bellfruit) (Scorpion 4) (set 6)", GAME_IS_SKELETON_MECHANICAL )
24731GAME( 200?, sc4royleh   ,sc4royle,   sc4, sc4, sc4royle, ROT0, "BFM","Royle Family (Bellfruit) (Scorpion 4) (set 7)", GAME_IS_SKELETON_MECHANICAL )
24732GAME( 200?, sc4roylei   ,sc4royle,   sc4, sc4, sc4royle, ROT0, "BFM","Royle Family (Bellfruit) (Scorpion 4) (set 8)", GAME_IS_SKELETON_MECHANICAL )
2468424733// PR1102 ROYLEFAMILY REV2         PR1102 ROYLEFAMILY SOUNDS11
24685GAME( 200?, sc4roylef   ,sc4royle,   sc4, sc4, sc4, ROT0, "BFM","Royle Family (REV 2) (Bellfruit) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
24686GAME( 200?, sc4royleg   ,sc4royle,   sc4, sc4, sc4, ROT0, "BFM","Royle Family (REV 2) (Bellfruit) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
24687GAME( 200?, sc4roylej   ,sc4royle,   sc4, sc4, sc4, ROT0, "BFM","Royle Family (REV 2) (Bellfruit) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL )
24688GAME( 200?, sc4roylek   ,sc4royle,   sc4, sc4, sc4, ROT0, "BFM","Royle Family (REV 2) (Bellfruit) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL )
24689GAME( 200?, sc4roylel   ,sc4royle,   sc4, sc4, sc4, ROT0, "BFM","Royle Family (REV 2) (Bellfruit) (Scorpion 4) (set 5)", GAME_IS_SKELETON_MECHANICAL )
24690GAME( 200?, sc4roylem   ,sc4royle,   sc4, sc4, sc4, ROT0, "BFM","Royle Family (REV 2) (Bellfruit) (Scorpion 4) (set 6)", GAME_IS_SKELETON_MECHANICAL )
24734GAME( 200?, sc4roylef   ,sc4royle,   sc4, sc4, sc4royle, ROT0, "BFM","Royle Family (REV 2) (Bellfruit) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
24735GAME( 200?, sc4royleg   ,sc4royle,   sc4, sc4, sc4royle, ROT0, "BFM","Royle Family (REV 2) (Bellfruit) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
24736GAME( 200?, sc4roylej   ,sc4royle,   sc4, sc4, sc4royle, ROT0, "BFM","Royle Family (REV 2) (Bellfruit) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL )
24737GAME( 200?, sc4roylek   ,sc4royle,   sc4, sc4, sc4royle, ROT0, "BFM","Royle Family (REV 2) (Bellfruit) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL )
24738GAME( 200?, sc4roylel   ,sc4royle,   sc4, sc4, sc4royle, ROT0, "BFM","Royle Family (REV 2) (Bellfruit) (Scorpion 4) (set 5)", GAME_IS_SKELETON_MECHANICAL )
24739GAME( 200?, sc4roylem   ,sc4royle,   sc4, sc4, sc4royle, ROT0, "BFM","Royle Family (REV 2) (Bellfruit) (Scorpion 4) (set 6)", GAME_IS_SKELETON_MECHANICAL )
2469124740
2469224741// PR7141 SHAKE RATTLE ROLL         LINE SOUNDS         *  SHAKE RATT ROLL
2469324742GAME( 200?, sc4srrmz   ,0,         sc4, sc4, sc4, ROT0, "Mazooma","Shake Rattle Roll (Mazooma) (Scorpion 4) (set 1, Top Box)", GAME_IS_SKELETON_MECHANICAL )
r14963r14964
2547825527GAME( 200?, sc4bobh      ,sc4bob,   sc4, sc4, sc4, ROT0, "Mazooma","Bobby Dazzler (Mazooma) (Scorpion 4) (set 9)", GAME_IS_SKELETON_MECHANICAL )
2547925528GAME( 200?, sc4bobi      ,sc4bob,   sc4, sc4, sc4, ROT0, "Mazooma","Bobby Dazzler (Mazooma) (Scorpion 4) (set 10)", GAME_IS_SKELETON_MECHANICAL )
2548025529
25530const stepper_interface* sc4bull_reel_configs[6] =
25531{
25532   &starpoint_interface_48step,
25533   &starpoint_interface_48step,
25534   &starpoint_interface_48step,
25535   0,
25536   &starpoint_interface_200step_reel,
25537   0,
25538};
25539
25540static DRIVER_INIT( sc4bull )
25541{
25542   sc4_state *state = machine.driver_data<sc4_state>();
25543   DRIVER_INIT_CALL( sc4mbus );
25544   state->m_reel_setup = sc4bull_reel_configs;
25545}
25546
2548125547// PR1722 AWP BULLSEYE SCORP4         PR1702 BULLSEYE SOUNDS11         BULLSEYE  S.SITE
25482GAME( 200?, sc4bull      ,0,         sc4, sc4, sc4mbus, ROT0, "BFM","Bullseye (Bellfruit) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
25483GAME( 200?, sc4bulla   ,sc4bull,   sc4, sc4, sc4mbus, ROT0, "BFM","Bullseye (Bellfruit) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
25484GAME( 200?, sc4bullb   ,sc4bull,   sc4, sc4, sc4mbus, ROT0, "BFM","Bullseye (Bellfruit) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL )
25485GAME( 200?, sc4bullc   ,sc4bull,   sc4, sc4, sc4mbus, ROT0, "BFM","Bullseye (Bellfruit) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL )
25548GAME( 200?, sc4bull      ,0,         sc4, sc4, sc4bull, ROT0, "BFM","Bullseye (Bellfruit) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
25549GAME( 200?, sc4bulla   ,sc4bull,   sc4, sc4, sc4bull, ROT0, "BFM","Bullseye (Bellfruit) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
25550GAME( 200?, sc4bullb   ,sc4bull,   sc4, sc4, sc4bull, ROT0, "BFM","Bullseye (Bellfruit) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL )
25551GAME( 200?, sc4bullc   ,sc4bull,   sc4, sc4, sc4bull, ROT0, "BFM","Bullseye (Bellfruit) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL )
2548625552
2548725553// PR1740 AWP BULLSEYE CLASSIC SCORP4         PR1702 BULLSEYE SOUNDS11         BULLSEYE CLASSIC  S.SITE
2548825554GAME( 200?, sc4bulcs   ,0,         sc4, sc4, sc4mbus, ROT0, "BFM","Bullseye Classic (Bellfruit) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
r14963r14964
2661626682GAME( 200?, sc4gladf   ,sc4glad,   sc4, sc4, sc4, ROT0, "Mazooma","Gladiator (Mazooma) (Scorpion 4) (set 7)", GAME_IS_SKELETON_MECHANICAL )
2661726683GAME( 200?, sc4gladg   ,sc4glad,   sc4, sc4, sc4, ROT0, "Mazooma","Gladiator (Mazooma) (Scorpion 4) (set 8)", GAME_IS_SKELETON_MECHANICAL )
2661826684
26685const stepper_interface* sc4gd_reel_configs[6] =
26686{
26687   &starpoint_interface_48step,
26688   &starpoint_interface_48step,
26689   &starpoint_interface_48step,
26690   &starpoint_interface_48step,
26691   &starpoint_interface_200step_reel,
26692   0,
26693};
26694
26695static DRIVER_INIT( sc4gd )
26696{
26697   sc4_state *state = machine.driver_data<sc4_state>();
26698   DRIVER_INIT_CALL( sc4 );
26699   state->m_reel_setup = sc4gd_reel_configs;
26700}
26701
2661926702// PR1016 GOLD DIGGER         PR1016 GOLD DIGGER SOUNDS11
26620GAME( 200?, sc4gd      ,0,         sc4, sc4, sc4, ROT0, "BFM","Gold Digger (Bellfruit) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
26621GAME( 200?, sc4gda      ,sc4gd,      sc4, sc4, sc4, ROT0, "BFM","Gold Digger (Bellfruit) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
26622GAME( 200?, sc4gdb      ,sc4gd,      sc4, sc4, sc4, ROT0, "BFM","Gold Digger (Bellfruit) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL )
26623GAME( 200?, sc4gdc      ,sc4gd,      sc4, sc4, sc4, ROT0, "BFM","Gold Digger (Bellfruit) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL )
26624GAME( 200?, sc4gdd      ,sc4gd,      sc4, sc4, sc4, ROT0, "BFM","Gold Digger (Bellfruit) (Scorpion 4) (set 5)", GAME_IS_SKELETON_MECHANICAL )
26625GAME( 200?, sc4gde      ,sc4gd,      sc4, sc4, sc4, ROT0, "BFM","Gold Digger (Bellfruit) (Scorpion 4) (set 6)", GAME_IS_SKELETON_MECHANICAL )
26626GAME( 200?, sc4gdf      ,sc4gd,      sc4, sc4, sc4, ROT0, "BFM","Gold Digger (Bellfruit) (Scorpion 4) (set 7)", GAME_IS_SKELETON_MECHANICAL )
26627GAME( 200?, sc4gdg      ,sc4gd,      sc4, sc4, sc4, ROT0, "BFM","Gold Digger (Bellfruit) (Scorpion 4) (set 8)", GAME_IS_SKELETON_MECHANICAL )
26703GAME( 200?, sc4gd      ,0,         sc4, sc4, sc4gd, ROT0, "BFM","Gold Digger (Bellfruit) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
26704GAME( 200?, sc4gda      ,sc4gd,      sc4, sc4, sc4gd, ROT0, "BFM","Gold Digger (Bellfruit) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
26705GAME( 200?, sc4gdb      ,sc4gd,      sc4, sc4, sc4gd, ROT0, "BFM","Gold Digger (Bellfruit) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL )
26706GAME( 200?, sc4gdc      ,sc4gd,      sc4, sc4, sc4gd, ROT0, "BFM","Gold Digger (Bellfruit) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL )
26707GAME( 200?, sc4gdd      ,sc4gd,      sc4, sc4, sc4gd, ROT0, "BFM","Gold Digger (Bellfruit) (Scorpion 4) (set 5)", GAME_IS_SKELETON_MECHANICAL )
26708GAME( 200?, sc4gde      ,sc4gd,      sc4, sc4, sc4gd, ROT0, "BFM","Gold Digger (Bellfruit) (Scorpion 4) (set 6)", GAME_IS_SKELETON_MECHANICAL )
26709GAME( 200?, sc4gdf      ,sc4gd,      sc4, sc4, sc4gd, ROT0, "BFM","Gold Digger (Bellfruit) (Scorpion 4) (set 7)", GAME_IS_SKELETON_MECHANICAL )
26710GAME( 200?, sc4gdg      ,sc4gd,      sc4, sc4, sc4gd, ROT0, "BFM","Gold Digger (Bellfruit) (Scorpion 4) (set 8)", GAME_IS_SKELETON_MECHANICAL )
2662826711
2662926712// PR2056  GOLDEN X         BARX SOUNDS         GOLDEN X  (are these really Gold Diggers?)
2663026713GAME( 200?, sc4gdmz      ,0,         sc4, sc4, sc4, ROT0, "Mazooma","Gold Diggers? / Golden X Game (Mazooma) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
2663126714GAME( 200?, sc4gdmza   ,sc4gdmz,   sc4, sc4, sc4, ROT0, "Mazooma","Gold Diggers? / Golden X Game (Mazooma) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
2663226715
26716const stepper_interface* sc4gdclb_reel_configs[6] =
26717{
26718   &starpoint_interface_48step,
26719   &starpoint_interface_48step,
26720   &starpoint_interface_48step,
26721   &starpoint_interface_48step,
26722   &starpoint_interface_48step,
26723   &starpoint_interface_200step_reel,
26724};
26725
26726static DRIVER_INIT( sc4gdclb )
26727{
26728   sc4_state *state = machine.driver_data<sc4_state>();
26729   DRIVER_INIT_CALL( sc4 );
26730   state->m_reel_setup = sc4gdclb_reel_configs;
26731}
26732
26733
2663326734// PR1137 CLUB GOLD DIGGER         PR1137 GOLDD CL SOUNDS11
26634GAME( 200?, sc4gdclb   ,0,         sc4, sc4, sc4, ROT0, "BFM","Gold Digger Club (Bellfruit) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
26635GAME( 200?, sc4gdclba   ,sc4gdclb,   sc4, sc4, sc4, ROT0, "BFM","Gold Digger Club (Bellfruit) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
26636GAME( 200?, sc4gdclbb   ,sc4gdclb,   sc4, sc4, sc4, ROT0, "BFM","Gold Digger Club (Bellfruit) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL )
26637GAME( 200?, sc4gdclbc   ,sc4gdclb,   sc4, sc4, sc4, ROT0, "BFM","Gold Digger Club (Bellfruit) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL )
26638GAME( 200?, sc4gdclbd   ,sc4gdclb,   sc4, sc4, sc4, ROT0, "BFM","Gold Digger Club (Bellfruit) (Scorpion 4) (set 5)", GAME_IS_SKELETON_MECHANICAL )
26639GAME( 200?, sc4gdclbe   ,sc4gdclb,   sc4, sc4, sc4, ROT0, "BFM","Gold Digger Club (Bellfruit) (Scorpion 4) (set 6)", GAME_IS_SKELETON_MECHANICAL )
26640GAME( 200?, sc4gdclbf   ,sc4gdclb,   sc4, sc4, sc4, ROT0, "BFM","Gold Digger Club (Bellfruit) (Scorpion 4) (set 7)", GAME_IS_SKELETON_MECHANICAL )
26641GAME( 200?, sc4gdclbg   ,sc4gdclb,   sc4, sc4, sc4, ROT0, "BFM","Gold Digger Club (Bellfruit) (Scorpion 4) (set 8)", GAME_IS_SKELETON_MECHANICAL )
26642GAME( 200?, sc4gdclbh   ,sc4gdclb,   sc4, sc4, sc4, ROT0, "BFM","Gold Digger Club (Bellfruit) (Scorpion 4) (set 9)", GAME_IS_SKELETON_MECHANICAL )
26643GAME( 200?, sc4gdclbi   ,sc4gdclb,   sc4, sc4, sc4, ROT0, "BFM","Gold Digger Club (Bellfruit) (Scorpion 4) (set 10)", GAME_IS_SKELETON_MECHANICAL )
26644GAME( 200?, sc4gdclbj   ,sc4gdclb,   sc4, sc4, sc4, ROT0, "BFM","Gold Digger Club (Bellfruit) (Scorpion 4) (set 11)", GAME_IS_SKELETON_MECHANICAL )
26645GAME( 200?, sc4gdclbk   ,sc4gdclb,   sc4, sc4, sc4, ROT0, "BFM","Gold Digger Club (Bellfruit) (Scorpion 4) (set 12)", GAME_IS_SKELETON_MECHANICAL )
26735GAME( 200?, sc4gdclb   ,0,         sc4, sc4, sc4gdclb, ROT0, "BFM","Gold Digger Club (Bellfruit) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
26736GAME( 200?, sc4gdclba   ,sc4gdclb,   sc4, sc4, sc4gdclb, ROT0, "BFM","Gold Digger Club (Bellfruit) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
26737GAME( 200?, sc4gdclbb   ,sc4gdclb,   sc4, sc4, sc4gdclb, ROT0, "BFM","Gold Digger Club (Bellfruit) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL )
26738GAME( 200?, sc4gdclbc   ,sc4gdclb,   sc4, sc4, sc4gdclb, ROT0, "BFM","Gold Digger Club (Bellfruit) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL )
26739GAME( 200?, sc4gdclbd   ,sc4gdclb,   sc4, sc4, sc4gdclb, ROT0, "BFM","Gold Digger Club (Bellfruit) (Scorpion 4) (set 5)", GAME_IS_SKELETON_MECHANICAL )
26740GAME( 200?, sc4gdclbe   ,sc4gdclb,   sc4, sc4, sc4gdclb, ROT0, "BFM","Gold Digger Club (Bellfruit) (Scorpion 4) (set 6)", GAME_IS_SKELETON_MECHANICAL )
26741GAME( 200?, sc4gdclbf   ,sc4gdclb,   sc4, sc4, sc4gdclb, ROT0, "BFM","Gold Digger Club (Bellfruit) (Scorpion 4) (set 7)", GAME_IS_SKELETON_MECHANICAL )
26742GAME( 200?, sc4gdclbg   ,sc4gdclb,   sc4, sc4, sc4gdclb, ROT0, "BFM","Gold Digger Club (Bellfruit) (Scorpion 4) (set 8)", GAME_IS_SKELETON_MECHANICAL )
26743GAME( 200?, sc4gdclbh   ,sc4gdclb,   sc4, sc4, sc4gdclb, ROT0, "BFM","Gold Digger Club (Bellfruit) (Scorpion 4) (set 9)", GAME_IS_SKELETON_MECHANICAL )
26744GAME( 200?, sc4gdclbi   ,sc4gdclb,   sc4, sc4, sc4gdclb, ROT0, "BFM","Gold Digger Club (Bellfruit) (Scorpion 4) (set 10)", GAME_IS_SKELETON_MECHANICAL )
26745GAME( 200?, sc4gdclbj   ,sc4gdclb,   sc4, sc4, sc4gdclb, ROT0, "BFM","Gold Digger Club (Bellfruit) (Scorpion 4) (set 11)", GAME_IS_SKELETON_MECHANICAL )
26746GAME( 200?, sc4gdclbk   ,sc4gdclb,   sc4, sc4, sc4gdclb, ROT0, "BFM","Gold Digger Club (Bellfruit) (Scorpion 4) (set 12)", GAME_IS_SKELETON_MECHANICAL )
2664626747
26748const stepper_interface* sc4gbcas_reel_configs[6] =
26749{
26750   &starpoint_interface_48step,
26751   &starpoint_interface_48step,
26752   &starpoint_interface_48step,
26753   &starpoint_interface_200step_reel,
26754   0,
26755   0,
26756};
26757
26758static DRIVER_INIT( sc4gbcas )
26759{
26760   sc4_state *state = machine.driver_data<sc4_state>();
26761   DRIVER_INIT_CALL( sc4 );
26762   state->m_reel_setup = sc4gbcas_reel_configs;
26763}
26764
26765// this one is a variation of lucky balls
2664726766// PR1034 CASINO GOLDEN BALLS         PR1034 GOLDEN BALLS SOUNDS11
26648GAME( 200?, sc4gbcas   ,0,         sc4, sc4, sc4, ROT0, "BFM","Golden Balls Casino (Bellfruit) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
26649GAME( 200?, sc4gbcasa   ,sc4gbcas,   sc4, sc4, sc4, ROT0, "BFM","Golden Balls Casino (Bellfruit) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
26650GAME( 200?, sc4gbcasb   ,sc4gbcas,   sc4, sc4, sc4, ROT0, "BFM","Golden Balls Casino (Bellfruit) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL )
26651GAME( 200?, sc4gbcasc   ,sc4gbcas,   sc4, sc4, sc4, ROT0, "BFM","Golden Balls Casino (Bellfruit) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL )
26767GAME( 200?, sc4gbcas   ,0,         sc4, sc4, sc4gbcas, ROT0, "BFM","Golden Balls Casino (Bellfruit) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
26768GAME( 200?, sc4gbcasa   ,sc4gbcas,   sc4, sc4, sc4gbcas, ROT0, "BFM","Golden Balls Casino (Bellfruit) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
26769GAME( 200?, sc4gbcasb   ,sc4gbcas,   sc4, sc4, sc4gbcas, ROT0, "BFM","Golden Balls Casino (Bellfruit) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL )
26770GAME( 200?, sc4gbcasc   ,sc4gbcas,   sc4, sc4, sc4gbcas, ROT0, "BFM","Golden Balls Casino (Bellfruit) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL )
2665226771
26772
26773const stepper_interface* sc4gball_reel_configs[6] =
26774{
26775   &starpoint_interface_48step,
26776   &starpoint_interface_48step,
26777   &starpoint_interface_48step,
26778   0,
26779   &starpoint_interface_48step,
26780   0,
26781};
26782
26783static DRIVER_INIT( sc4gball )
26784{
26785   sc4_state *state = machine.driver_data<sc4_state>();
26786   DRIVER_INIT_CALL( sc4 );
26787   state->m_reel_setup = sc4gball_reel_configs;
26788}
26789
26790// this is a football themed game...
2665326791// PR1604 AWP GOLDEN BALLS         PR1604 GOLDEN BALLS SOUNDS12      GOLDEN BALLS  S.SITE
26654GAME( 200?, sc4gball   ,0,         sc4, sc4, sc4, ROT0, "BFM","Golden Balls (Bellfruit) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
26655GAME( 200?, sc4gballa   ,sc4gball,   sc4, sc4, sc4, ROT0, "BFM","Golden Balls (Bellfruit) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
26656GAME( 200?, sc4gballb   ,sc4gball,   sc4, sc4, sc4, ROT0, "BFM","Golden Balls (Bellfruit) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL )
26657GAME( 200?, sc4gballc   ,sc4gball,   sc4, sc4, sc4, ROT0, "BFM","Golden Balls (Bellfruit) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL )
26792GAME( 200?, sc4gball   ,0,         sc4, sc4, sc4gball, ROT0, "BFM","Golden Balls (Bellfruit) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
26793GAME( 200?, sc4gballa   ,sc4gball,   sc4, sc4, sc4gball, ROT0, "BFM","Golden Balls (Bellfruit) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
26794GAME( 200?, sc4gballb   ,sc4gball,   sc4, sc4, sc4gball, ROT0, "BFM","Golden Balls (Bellfruit) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL )
26795GAME( 200?, sc4gballc   ,sc4gball,   sc4, sc4, sc4gball, ROT0, "BFM","Golden Balls (Bellfruit) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL )
2665826796
26797const stepper_interface* sc4gunp_reel_configs[6] =
26798{
26799   &starpoint_interface_48step,
26800   &starpoint_interface_48step,
26801   &starpoint_interface_48step,
26802   0,
26803   &starpoint_interface_48step,
26804   &starpoint_interface_48step,
26805};
26806
26807static DRIVER_INIT( sc4gunp )
26808{
26809   sc4_state *state = machine.driver_data<sc4_state>();
26810   DRIVER_INIT_CALL( sc4mbus );
26811   state->m_reel_setup = sc4gunp_reel_configs;
26812}
26813
2665926814// PR3046 AWP THE GUNPOWDER SLOT S4         PR3016 GUNPOWDER SLOT SOUNDS11    GUNPOWDER SLOT  S.SITE
26660GAME( 200?, sc4gunp      ,0,         sc4, sc4, sc4mbus, ROT0, "BFM","Gunpowder Slot (Bellfruit) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
26661GAME( 200?, sc4gunpa   ,sc4gunp,   sc4, sc4, sc4mbus, ROT0, "BFM","Gunpowder Slot (Bellfruit) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
26662GAME( 200?, sc4gunpb   ,sc4gunp,   sc4, sc4, sc4mbus, ROT0, "BFM","Gunpowder Slot (Bellfruit) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL )
26663GAME( 200?, sc4gunpc   ,sc4gunp,   sc4, sc4, sc4mbus, ROT0, "BFM","Gunpowder Slot (Bellfruit) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL )
26664GAME( 200?, sc4gunpd   ,sc4gunp,   sc4, sc4, sc4mbus, ROT0, "BFM","Gunpowder Slot (Bellfruit) (Scorpion 4) (set 5)", GAME_IS_SKELETON_MECHANICAL )
26665GAME( 200?, sc4gunpe   ,sc4gunp,   sc4, sc4, sc4mbus, ROT0, "BFM","Gunpowder Slot (Bellfruit) (Scorpion 4) (set 6)", GAME_IS_SKELETON_MECHANICAL )
26666GAME( 200?, sc4gunpf   ,sc4gunp,   sc4, sc4, sc4mbus, ROT0, "BFM","Gunpowder Slot (Bellfruit) (Scorpion 4) (set 7)", GAME_IS_SKELETON_MECHANICAL )
26667GAME( 200?, sc4gunpg   ,sc4gunp,   sc4, sc4, sc4mbus, ROT0, "BFM","Gunpowder Slot (Bellfruit) (Scorpion 4) (set 8)", GAME_IS_SKELETON_MECHANICAL )
26815GAME( 200?, sc4gunp      ,0,         sc4, sc4, sc4gunp, ROT0, "BFM","Gunpowder Slot (Bellfruit) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
26816GAME( 200?, sc4gunpa   ,sc4gunp,   sc4, sc4, sc4gunp, ROT0, "BFM","Gunpowder Slot (Bellfruit) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
26817GAME( 200?, sc4gunpb   ,sc4gunp,   sc4, sc4, sc4gunp, ROT0, "BFM","Gunpowder Slot (Bellfruit) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL )
26818GAME( 200?, sc4gunpc   ,sc4gunp,   sc4, sc4, sc4gunp, ROT0, "BFM","Gunpowder Slot (Bellfruit) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL )
26819GAME( 200?, sc4gunpd   ,sc4gunp,   sc4, sc4, sc4gunp, ROT0, "BFM","Gunpowder Slot (Bellfruit) (Scorpion 4) (set 5)", GAME_IS_SKELETON_MECHANICAL )
26820GAME( 200?, sc4gunpe   ,sc4gunp,   sc4, sc4, sc4gunp, ROT0, "BFM","Gunpowder Slot (Bellfruit) (Scorpion 4) (set 6)", GAME_IS_SKELETON_MECHANICAL )
26821GAME( 200?, sc4gunpf   ,sc4gunp,   sc4, sc4, sc4gunp, ROT0, "BFM","Gunpowder Slot (Bellfruit) (Scorpion 4) (set 7)", GAME_IS_SKELETON_MECHANICAL )
26822GAME( 200?, sc4gunpg   ,sc4gunp,   sc4, sc4, sc4gunp, ROT0, "BFM","Gunpowder Slot (Bellfruit) (Scorpion 4) (set 8)", GAME_IS_SKELETON_MECHANICAL )
2666826823
26824const stepper_interface* sc4hapnt_reel_configs[6] =
26825{
26826   &starpoint_interface_48step,
26827   &starpoint_interface_48step,
26828   &starpoint_interface_48step,
26829   0,
26830   &starpoint_interface_48step,
26831   0,
26832};
2666926833
26834static DRIVER_INIT( sc4hapnt )
26835{
26836   sc4_state *state = machine.driver_data<sc4_state>();
26837   DRIVER_INIT_CALL( sc4mbus );
26838   state->m_reel_setup = sc4hapnt_reel_configs;
26839}
2667026840
2667126841// PR1306 AWP HAPPY NOTES         PR1306 HAPPY NOTES SOUNDS11
26672GAME( 200?, sc4hapnt   ,0,         sc4, sc4, sc4, ROT0, "BFM","Happy Notes (Bellfruit) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
26673GAME( 200?, sc4hapnta   ,sc4hapnt,   sc4, sc4, sc4, ROT0, "BFM","Happy Notes (Bellfruit) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
26674GAME( 200?, sc4hapntb   ,sc4hapnt,   sc4, sc4, sc4, ROT0, "BFM","Happy Notes (Bellfruit) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL )
26675GAME( 200?, sc4hapntc   ,sc4hapnt,   sc4, sc4, sc4, ROT0, "BFM","Happy Notes (Bellfruit) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL )
26676GAME( 200?, sc4hapntd   ,sc4hapnt,   sc4, sc4, sc4, ROT0, "BFM","Happy Notes (Bellfruit) (Scorpion 4) (set 5)", GAME_IS_SKELETON_MECHANICAL )
26677GAME( 200?, sc4hapnte   ,sc4hapnt,   sc4, sc4, sc4, ROT0, "BFM","Happy Notes (Bellfruit) (Scorpion 4) (set 6)", GAME_IS_SKELETON_MECHANICAL )
26842GAME( 200?, sc4hapnt   ,0,         sc4, sc4, sc4hapnt, ROT0, "BFM","Happy Notes (Bellfruit) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
26843GAME( 200?, sc4hapnta   ,sc4hapnt,   sc4, sc4, sc4hapnt, ROT0, "BFM","Happy Notes (Bellfruit) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
26844GAME( 200?, sc4hapntb   ,sc4hapnt,   sc4, sc4, sc4hapnt, ROT0, "BFM","Happy Notes (Bellfruit) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL )
26845GAME( 200?, sc4hapntc   ,sc4hapnt,   sc4, sc4, sc4hapnt, ROT0, "BFM","Happy Notes (Bellfruit) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL )
26846GAME( 200?, sc4hapntd   ,sc4hapnt,   sc4, sc4, sc4hapnt, ROT0, "BFM","Happy Notes (Bellfruit) (Scorpion 4) (set 5)", GAME_IS_SKELETON_MECHANICAL )
26847GAME( 200?, sc4hapnte   ,sc4hapnt,   sc4, sc4, sc4hapnt, ROT0, "BFM","Happy Notes (Bellfruit) (Scorpion 4) (set 6)", GAME_IS_SKELETON_MECHANICAL )
26848
26849const stepper_interface* sc4hntcs_reel_configs[6] =
26850{
26851   &starpoint_interface_48step,
26852   &starpoint_interface_48step,
26853   &starpoint_interface_48step,
26854   &starpoint_interface_48step,
26855   0,
26856   0,
26857};
26858
26859static DRIVER_INIT( sc4hntcsm )
26860{
26861   sc4_state *state = machine.driver_data<sc4_state>();
26862   DRIVER_INIT_CALL( sc4mbus );
26863   state->m_reel_setup = sc4hntcs_reel_configs;
26864}
26865
26866
26867static DRIVER_INIT( sc4hntcs )
26868{
26869   sc4_state *state = machine.driver_data<sc4_state>();
26870   DRIVER_INIT_CALL( sc4 );
26871   state->m_reel_setup = sc4hntcs_reel_configs;
26872}
26873
2667826874// PR1327 CASINO HAPPY NOTES         HAPPY NOTES S.SITE  PR1327 CAS_HAPPY_NOTES SOUNDS11
26679GAME( 200?, sc4hntcs   ,0,         sc4, sc4, sc4mbus, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
26680GAME( 200?, sc4hntcsa   ,sc4hntcs,   sc4, sc4, sc4mbus, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
26681GAME( 200?, sc4hntcsb   ,sc4hntcs,   sc4, sc4, sc4mbus, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL )
26682GAME( 200?, sc4hntcsc   ,sc4hntcs,   sc4, sc4, sc4mbus, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL )
26875GAME( 200?, sc4hntcs   ,0,         sc4, sc4, sc4hntcsm, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
26876GAME( 200?, sc4hntcsa   ,sc4hntcs,   sc4, sc4, sc4hntcsm, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
26877GAME( 200?, sc4hntcsb   ,sc4hntcs,   sc4, sc4, sc4hntcsm, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL )
26878GAME( 200?, sc4hntcsc   ,sc4hntcs,   sc4, sc4, sc4hntcsm, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL )
2668326879// PR1327 CASINO HAPPY NOTES         PR1327 CAS_HAPPY_NOTES SOUNDS11
26684GAME( 200?, sc4hntcsd   ,sc4hntcs,   sc4, sc4, sc4, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 5)", GAME_IS_SKELETON_MECHANICAL )
26685GAME( 200?, sc4hntcse   ,sc4hntcs,   sc4, sc4, sc4, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 6)", GAME_IS_SKELETON_MECHANICAL )
26686GAME( 200?, sc4hntcsf   ,sc4hntcs,   sc4, sc4, sc4, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 7)", GAME_IS_SKELETON_MECHANICAL )
26687GAME( 200?, sc4hntcsg   ,sc4hntcs,   sc4, sc4, sc4, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 8)", GAME_IS_SKELETON_MECHANICAL )
26688GAME( 200?, sc4hntcsh   ,sc4hntcs,   sc4, sc4, sc4, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 9)", GAME_IS_SKELETON_MECHANICAL )
26689GAME( 200?, sc4hntcsi   ,sc4hntcs,   sc4, sc4, sc4, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 10)", GAME_IS_SKELETON_MECHANICAL )
26690GAME( 200?, sc4hntcsj   ,sc4hntcs,   sc4, sc4, sc4, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 11)", GAME_IS_SKELETON_MECHANICAL )
26691GAME( 200?, sc4hntcsk   ,sc4hntcs,   sc4, sc4, sc4, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 12)", GAME_IS_SKELETON_MECHANICAL )
26692GAME( 200?, sc4hntcsl   ,sc4hntcs,   sc4, sc4, sc4, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 13)", GAME_IS_SKELETON_MECHANICAL )
26693GAME( 200?, sc4hntcsm   ,sc4hntcs,   sc4, sc4, sc4, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 14)", GAME_IS_SKELETON_MECHANICAL )
26694GAME( 200?, sc4hntcsn   ,sc4hntcs,   sc4, sc4, sc4, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 15)", GAME_IS_SKELETON_MECHANICAL )
26695GAME( 200?, sc4hntcso   ,sc4hntcs,   sc4, sc4, sc4, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 16)", GAME_IS_SKELETON_MECHANICAL )
26880GAME( 200?, sc4hntcsd   ,sc4hntcs,   sc4, sc4, sc4hntcs, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 5)", GAME_IS_SKELETON_MECHANICAL )
26881GAME( 200?, sc4hntcse   ,sc4hntcs,   sc4, sc4, sc4hntcs, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 6)", GAME_IS_SKELETON_MECHANICAL )
26882GAME( 200?, sc4hntcsf   ,sc4hntcs,   sc4, sc4, sc4hntcs, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 7)", GAME_IS_SKELETON_MECHANICAL )
26883GAME( 200?, sc4hntcsg   ,sc4hntcs,   sc4, sc4, sc4hntcs, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 8)", GAME_IS_SKELETON_MECHANICAL )
26884GAME( 200?, sc4hntcsh   ,sc4hntcs,   sc4, sc4, sc4hntcs, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 9)", GAME_IS_SKELETON_MECHANICAL )
26885GAME( 200?, sc4hntcsi   ,sc4hntcs,   sc4, sc4, sc4hntcs, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 10)", GAME_IS_SKELETON_MECHANICAL )
26886GAME( 200?, sc4hntcsj   ,sc4hntcs,   sc4, sc4, sc4hntcs, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 11)", GAME_IS_SKELETON_MECHANICAL )
26887GAME( 200?, sc4hntcsk   ,sc4hntcs,   sc4, sc4, sc4hntcs, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 12)", GAME_IS_SKELETON_MECHANICAL )
26888GAME( 200?, sc4hntcsl   ,sc4hntcs,   sc4, sc4, sc4hntcs, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 13)", GAME_IS_SKELETON_MECHANICAL )
26889GAME( 200?, sc4hntcsm   ,sc4hntcs,   sc4, sc4, sc4hntcs, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 14)", GAME_IS_SKELETON_MECHANICAL )
26890GAME( 200?, sc4hntcsn   ,sc4hntcs,   sc4, sc4, sc4hntcs, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 15)", GAME_IS_SKELETON_MECHANICAL )
26891GAME( 200?, sc4hntcso   ,sc4hntcs,   sc4, sc4, sc4hntcs, ROT0, "BFM","Happy Notes Casino (Bellfruit) (Scorpion 4) (set 16)", GAME_IS_SKELETON_MECHANICAL )
2669626892
2669726893
2669826894
2669926895
2670026896// PR1201 HELLS BELLS         95004211 HELLS BELLS PR6945         HELLS  BELLS  (non english?)
26701GAME( 200?, sc4hellb   ,0,         sc4, sc4, sc4, ROT0, "BFM","Hells Bells (PR1201) (Dutch?) (Bellfruit) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
26897GAME( 200?, sc4hellb   ,0,         sc4, sc4, sc4, ROT0, "BFM / Eurocoin","Hells Bells (PR1201) (Dutch?) (Bellfruit) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
2670226898// PR1419 AWP HELLS BELLS         PR1402 HELLS BELLS SOUNDS11
2670326899GAME( 200?, sc4hellba   ,sc4hellb,   sc4, sc4, sc4, ROT0, "BFM","Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
2670426900GAME( 200?, sc4hellbb   ,sc4hellb,   sc4, sc4, sc4, ROT0, "BFM","Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
r14963r14964
2671226908GAME( 200?, sc4hellbi   ,sc4hellb,   sc4, sc4, sc4mbus, ROT0, "BFM","Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 9)", GAME_IS_SKELETON_MECHANICAL )
2671326909GAME( 200?, sc4hellbj   ,sc4hellb,   sc4, sc4, sc4mbus, ROT0, "BFM","Hells Bells (PR1419) (Bellfruit) (Scorpion 4) (set 10)", GAME_IS_SKELETON_MECHANICAL )
2671426910
26911const stepper_interface* sc4hill_reel_configs[6] =
26912{
26913   &starpoint_interface_48step,
26914   &starpoint_interface_48step,
26915   &starpoint_interface_48step,
26916   0,
26917   &starpoint_interface_200step_reel,
26918   0,
26919};
26920
26921static DRIVER_INIT( sc4hill )
26922{
26923   sc4_state *state = machine.driver_data<sc4_state>();
26924   DRIVER_INIT_CALL( sc4mbus );
26925   state->m_reel_setup = sc4hill_reel_configs;
26926}
26927
2671526928// PR1643 AWP HILLBILLIONAIRE SCORP4         PR1613 HILLBILLIONAIRE SOUNDS11   HILLBILLIONAIRE S.SITE
26716GAME( 200?, sc4hill      ,0,         sc4, sc4, sc4, ROT0, "BFM","Hill Billionaire (Bellfruit) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
26717GAME( 200?, sc4hilla   ,sc4hill,   sc4, sc4, sc4, ROT0, "BFM","Hill Billionaire (Bellfruit) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
26929GAME( 200?, sc4hill      ,0,         sc4, sc4, sc4hill, ROT0, "BFM","Hill Billionaire (Bellfruit) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
26930GAME( 200?, sc4hilla   ,sc4hill,   sc4, sc4, sc4hill, ROT0, "BFM","Hill Billionaire (Bellfruit) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
2671826931
2671926932// PR2176 HISSING QUID         VIPA SOUNDS         HISSING QUID
2672026933GAME( 200?, sc4hiss      ,0,         sc4, sc4, sc4, ROT0, "Qps","Hissing Quid (Qps) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
r14963r14964
2731327526GAME( 200?, sc4copsrh   ,sc4copsr,   sc4, sc4, sc4, ROT0, "BFM","Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 9)", GAME_IS_SKELETON_MECHANICAL )
2731427527GAME( 200?, sc4copsri   ,sc4copsr,   sc4, sc4, sc4, ROT0, "BFM","Cops 'n' Robbers (Bellfruit) (Scorpion 4) (set 10)", GAME_IS_SKELETON_MECHANICAL )
2731527528
27529/* wrong sound roms */
27530GAME( 200?, sc4mowow   ,0,         sc4, sc4, sc4, ROT0, "Mazooma","Monopoly Wheel Of Wealth (Mazooma) (PR2118) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL ) // PR2118 MONOPOLY WOTW         WOTW SOUNDS         MONOPOLY WOTW   8P
27531GAME( 200?, sc4mowowa   ,sc4mowow,   sc4, sc4, sc4, ROT0, "Mazooma","Monopoly Wheel Of Wealth (Mazooma) (PR2118) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27532GAME( 200?, sc4mowowb   ,sc4mowow,   sc4, sc4, sc4, ROT0, "Mazooma","Monopoly Wheel Of Wealth (Mazooma) (PR2118) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27533GAME( 200?, sc4mowowc   ,sc4mowow,   sc4, sc4, sc4, ROT0, "Mazooma","Monopoly Wheel Of Wealth (Mazooma) (PR2118) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL ) // ^^
2731627534
27317GAME( 200?, sc4mowow   ,0,         sc4, sc4, sc4, ROT0, "Mazooma","Monopoly Wheel Of Wealth (Mazooma) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL ) // PR2118 MONOPOLY WOTW         WOTW SOUNDS         MONOPOLY WOTW   8P
27318GAME( 200?, sc4mowowa   ,sc4mowow,   sc4, sc4, sc4, ROT0, "Mazooma","Monopoly Wheel Of Wealth (Mazooma) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27319GAME( 200?, sc4mowowb   ,sc4mowow,   sc4, sc4, sc4, ROT0, "Mazooma","Monopoly Wheel Of Wealth (Mazooma) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27320GAME( 200?, sc4mowowc   ,sc4mowow,   sc4, sc4, sc4, ROT0, "Mazooma","Monopoly Wheel Of Wealth (Mazooma) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27321GAME( 200?, sc4mowowd   ,sc4mowow,   sc4, sc4, sc4, ROT0, "Mazooma","Monopoly Wheel Of Wealth (Mazooma) (Scorpion 4) (set 5)", GAME_IS_SKELETON_MECHANICAL ) // PR1726 AWP WHEEL OF WEALTH         PR1706 WHEEL OF WEALTH SOUNDS11   WHEEL OF WEALTH S.SITE
27322GAME( 200?, sc4mowowe   ,sc4mowow,   sc4, sc4, sc4, ROT0, "Mazooma","Monopoly Wheel Of Wealth (Mazooma) (Scorpion 4) (set 6)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27323GAME( 200?, sc4mowowf   ,sc4mowow,   sc4, sc4, sc4, ROT0, "Mazooma","Monopoly Wheel Of Wealth (Mazooma) (Scorpion 4) (set 7)", GAME_IS_SKELETON_MECHANICAL ) // PR2389  WHEEL OF WEALTH         WOWT SOUNDS         WHEEL OF WEAL
27324GAME( 200?, sc4mowowg   ,sc4mowow,   sc4, sc4, sc4, ROT0, "Mazooma","Monopoly Wheel Of Wealth (Mazooma) (Scorpion 4) (set 8)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27325GAME( 200?, sc4mowowh   ,sc4mowow,   sc4, sc4, sc4, ROT0, "Mazooma","Monopoly Wheel Of Wealth (Mazooma) (Scorpion 4) (set 9)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27326GAME( 200?, sc4mowowi   ,sc4mowow,   sc4, sc4, sc4, ROT0, "Mazooma","Monopoly Wheel Of Wealth (Mazooma) (Scorpion 4) (set 10)", GAME_IS_SKELETON_MECHANICAL )// ^^
27327GAME( 200?, sc4mowowj   ,sc4mowow,   sc4, sc4, sc4, ROT0, "Mazooma","Monopoly Wheel Of Wealth (Mazooma) (Scorpion 4) (set 11)", GAME_IS_SKELETON_MECHANICAL )// ^^
27535GAME( 200?, sc4mwwtb   ,0,         sc4, sc4, sc4, ROT0, "Mazooma","Monopoly Wheel Of Wealth (Mazooma) (PR2389, Top Box) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL ) // PR2389  WHEEL OF WEALTH         WOWT SOUNDS         WHEEL OF WEAL
27536GAME( 200?, sc4mwwtba   ,sc4mwwtb,   sc4, sc4, sc4, ROT0, "Mazooma","Monopoly Wheel Of Wealth (Mazooma) (PR2389, Top Box) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27537GAME( 200?, sc4mwwtbb   ,sc4mwwtb,   sc4, sc4, sc4, ROT0, "Mazooma","Monopoly Wheel Of Wealth (Mazooma) (PR2389, Top Box) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27538GAME( 200?, sc4mwwtbc   ,sc4mwwtb,   sc4, sc4, sc4, ROT0, "Mazooma","Monopoly Wheel Of Wealth (Mazooma) (PR2389, Top Box) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL )// ^^
27539GAME( 200?, sc4mwwtbd   ,sc4mwwtb,   sc4, sc4, sc4, ROT0, "Mazooma","Monopoly Wheel Of Wealth (Mazooma) (PR2389, Top Box) (Scorpion 4) (set 5)", GAME_IS_SKELETON_MECHANICAL )// ^^
2732827540
27541
27542const stepper_interface* sc4bwow_reel_configs[6] =
27543{
27544   &starpoint_interface_48step,
27545   &starpoint_interface_48step,
27546   &starpoint_interface_48step,
27547   0,
27548   &starpoint_interface_48step,
27549   &starpoint_interface_200step_reel,
27550};
27551
27552static DRIVER_INIT( sc4bwow )
27553{
27554   sc4_state *state = machine.driver_data<sc4_state>();
27555   DRIVER_INIT_CALL( sc4mbus );
27556   state->m_reel_setup = sc4bwow_reel_configs;
27557}
27558
27559GAME( 200?, sc4bwow     ,0,       sc4, sc4, sc4bwow, ROT0, "BFM","Wheel Of Wealth (Bellfruit) (PR1726) (Scorpion 4) (WHEL013, set 1)", GAME_IS_SKELETON_MECHANICAL ) // PR1726 AWP WHEEL OF WEALTH         PR1706 WHEEL OF WEALTH SOUNDS11   WHEEL OF WEALTH S.SITE
27560GAME( 200?, sc4bwowa  ,sc4bwow,   sc4, sc4, sc4bwow, ROT0, "BFM","Wheel Of Wealth (Bellfruit) (PR1726) (Scorpion 4) (WHEL013, set 2)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27561
27562
2732927563// PR2166 NUN N ROSES          NANR SOUNDS         NUNS N ROSES
2733027564GAME( 200?, sc4nunsm   ,0,         sc4, sc4, sc4, ROT0, "Mazooma","Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
2733127565GAME( 200?, sc4nunsmb   ,sc4nunsm,   sc4, sc4, sc4, ROT0, "Mazooma","Nuns 'n' Roses (Mazooma) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
r14963r14964
2735727591GAME( 200?, sc4gncd      ,sc4gnc,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game Club (Mazooma) (Scorpion 4) (set 5)", GAME_IS_SKELETON_MECHANICAL )
2735827592GAME( 200?, sc4gnce      ,sc4gnc,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game Club (Mazooma) (Scorpion 4) (set 6)", GAME_IS_SKELETON_MECHANICAL )
2735927593
27360GAME( 200?, sc4ggame   ,0,         sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL ) // PR2056  GOLD X TRIPLE         BARX SOUNDS         GOLD X TRIPLE
27361GAME( 200?, sc4ggamee   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 6)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27362GAME( 200?, sc4ggameo   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 16)", GAME_IS_SKELETON_MECHANICAL )// ^^
27363GAME( 200?, sc4ggameh   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 9)", GAME_IS_SKELETON_MECHANICAL ) // PR2056  GOLDEN X         GOLDEN GAME ARCADE  BARX SOUNDS         GOLDEN X
27364GAME( 200?, sc4ggamei   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 10)", GAME_IS_SKELETON_MECHANICAL )// ^^
27365GAME( 200?, sc4ggamel   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 13)", GAME_IS_SKELETON_MECHANICAL )// ^^
27366GAME( 200?, sc4ggamem   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 14)", GAME_IS_SKELETON_MECHANICAL )// ^^
27367GAME( 200?, sc4ggamep   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 17)", GAME_IS_SKELETON_MECHANICAL )// ^^
27368GAME( 200?, sc4ggameq   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 18)", GAME_IS_SKELETON_MECHANICAL )// ^^
27369GAME( 200?, sc4ggamer   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 19)", GAME_IS_SKELETON_MECHANICAL )// ^^
27370GAME( 200?, sc4ggamew   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 24)", GAME_IS_SKELETON_MECHANICAL )// ^^
27371GAME( 200?, sc4ggamex   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 25)", GAME_IS_SKELETON_MECHANICAL )// ^^
27372GAME( 200?, sc4ggamey   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 26)", GAME_IS_SKELETON_MECHANICAL )// ^^
27373GAME( 200?, sc4ggamez   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 27)", GAME_IS_SKELETON_MECHANICAL )// ^^
27374GAME( 200?, sc4ggame1   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 29)", GAME_IS_SKELETON_MECHANICAL )// ^^
27375GAME( 200?, sc4ggame2   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 30)", GAME_IS_SKELETON_MECHANICAL )// ^^
27376GAME( 200?, sc4ggame7   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 35)", GAME_IS_SKELETON_MECHANICAL )// ^^
27377GAME( 200?, sc4ggame8   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 36)", GAME_IS_SKELETON_MECHANICAL )// ^^
27378GAME( 200?, sc4ggame9   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 37)", GAME_IS_SKELETON_MECHANICAL )// ^^
27379GAME( 200?, sc4ggameaa   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 38)", GAME_IS_SKELETON_MECHANICAL )// ^^
27380GAME( 200?, sc4ggameab   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 39)", GAME_IS_SKELETON_MECHANICAL )// ^^
27381GAME( 200?, sc4ggameac   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 40)", GAME_IS_SKELETON_MECHANICAL )// ^^
27382GAME( 200?, sc4ggamead   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 41)", GAME_IS_SKELETON_MECHANICAL )// ^^
27383GAME( 200?, sc4ggameae   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 42)", GAME_IS_SKELETON_MECHANICAL )// ^^
27384GAME( 200?, sc4ggamea   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL ) // PR2056  GOLDEN X         BARX SOUNDS         GOLDEN X
27385GAME( 200?, sc4ggameb   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27386GAME( 200?, sc4ggamec   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27387GAME( 200?, sc4ggamed   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 5)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27388GAME( 200?, sc4ggamef   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 7)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27389GAME( 200?, sc4ggameg   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 8)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27390GAME( 200?, sc4ggamej   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 11)", GAME_IS_SKELETON_MECHANICAL )// ^^
27391GAME( 200?, sc4ggamek   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 12)", GAME_IS_SKELETON_MECHANICAL )// ^^
27392GAME( 200?, sc4ggamen   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 15)", GAME_IS_SKELETON_MECHANICAL )// ^^
27393GAME( 200?, sc4ggames   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 20)", GAME_IS_SKELETON_MECHANICAL )// ^^
27394GAME( 200?, sc4ggamet   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 21)", GAME_IS_SKELETON_MECHANICAL )// ^^
27395GAME( 200?, sc4ggameu   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 22)", GAME_IS_SKELETON_MECHANICAL )// ^^
27396GAME( 200?, sc4ggamev   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 23)", GAME_IS_SKELETON_MECHANICAL )// ^^
27397GAME( 200?, sc4ggame0   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 28)", GAME_IS_SKELETON_MECHANICAL )// ^^
27398GAME( 200?, sc4ggame3   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 31)", GAME_IS_SKELETON_MECHANICAL )// ^^
27399GAME( 200?, sc4ggame4   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 32)", GAME_IS_SKELETON_MECHANICAL )// ^^
27400GAME( 200?, sc4ggame5   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 33)", GAME_IS_SKELETON_MECHANICAL )// ^^
27401GAME( 200?, sc4ggame6   ,sc4ggame,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (Scorpion 4) (set 34)", GAME_IS_SKELETON_MECHANICAL )// ^^
27594GAME( 200?, sc4ggtb       ,0,         sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (PR2056, Top Box) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL ) // PR2056  GOLD X TRIPLE         BARX SOUNDS         GOLD X TRIPLE
27595GAME( 200?, sc4ggtba   ,sc4ggtb,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (PR2056, Top Box) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27596GAME( 200?, sc4ggtbb   ,sc4ggtb,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game (Mazooma) (PR2056, Top Box) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL )// ^^
2740227597
27598const stepper_interface* sc4ggame_reel_configs[6] =
27599{
27600   &starpoint_interface_200step_reel,
27601   &starpoint_interface_200step_reel,
27602   &starpoint_interface_200step_reel,
27603   0,
27604   0,
27605   0,
27606};
27607
27608static DRIVER_INIT( sc4ggamem )
27609{
27610   sc4_state *state = machine.driver_data<sc4_state>();
27611   DRIVER_INIT_CALL( sc4mbus );
27612   state->m_reel_setup = sc4ggame_reel_configs;
27613}
27614
27615static DRIVER_INIT( sc4ggame )
27616{
27617   sc4_state *state = machine.driver_data<sc4_state>();
27618   DRIVER_INIT_CALL( sc4 );
27619   state->m_reel_setup = sc4ggame_reel_configs;
27620}
27621
27622// 25GBP sets
27623// PR2056  GOLDEN X         GOLDEN GAME ARCADE  BARX SOUNDS         GOLDEN X
27624GAME( 200?, sc4ggame   ,0,           sc4, sc4, sc4ggamem, ROT0, "Mazooma","Golden Game (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 25GBP, set 1)", GAME_IS_SKELETON_MECHANICAL )
27625GAME( 200?, sc4ggamei   ,sc4ggame,   sc4, sc4, sc4ggamem, ROT0, "Mazooma","Golden Game (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 25GBP, set 2)", GAME_IS_SKELETON_MECHANICAL )// ^^
27626GAME( 200?, sc4ggamep   ,sc4ggame,   sc4, sc4, sc4ggamem, ROT0, "Mazooma","Golden Game (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 25GBP, set 3)", GAME_IS_SKELETON_MECHANICAL )// ^^
27627GAME( 200?, sc4ggameq   ,sc4ggame,   sc4, sc4, sc4ggamem, ROT0, "Mazooma","Golden Game (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 25GBP, set 4)", GAME_IS_SKELETON_MECHANICAL )// ^^
27628GAME( 200?, sc4ggamer   ,sc4ggame,   sc4, sc4, sc4ggamem, ROT0, "Mazooma","Golden Game (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 25GBP, set 5)", GAME_IS_SKELETON_MECHANICAL )// ^^
27629// 35GBP sets
27630GAME( 200?, sc4ggame7   ,sc4ggame,   sc4, sc4, sc4ggamem, ROT0, "Mazooma","Golden Game (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 1)", GAME_IS_SKELETON_MECHANICAL )// ^^
27631GAME( 200?, sc4ggame8   ,sc4ggame,   sc4, sc4, sc4ggamem, ROT0, "Mazooma","Golden Game (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 2)", GAME_IS_SKELETON_MECHANICAL )// ^^
27632GAME( 200?, sc4ggame9   ,sc4ggame,   sc4, sc4, sc4ggamem, ROT0, "Mazooma","Golden Game (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 3)", GAME_IS_SKELETON_MECHANICAL )// ^^
27633GAME( 200?, sc4ggameaa   ,sc4ggame,   sc4, sc4, sc4ggamem, ROT0, "Mazooma","Golden Game (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 4)", GAME_IS_SKELETON_MECHANICAL )// ^^
27634GAME( 200?, sc4ggameab   ,sc4ggame,   sc4, sc4, sc4ggamem, ROT0, "Mazooma","Golden Game (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 5)", GAME_IS_SKELETON_MECHANICAL )// ^^
27635GAME( 200?, sc4ggameac   ,sc4ggame,   sc4, sc4, sc4ggamem, ROT0, "Mazooma","Golden Game (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 6)", GAME_IS_SKELETON_MECHANICAL )// ^^
27636GAME( 200?, sc4ggamead   ,sc4ggame,   sc4, sc4, sc4ggamem, ROT0, "Mazooma","Golden Game (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 7)", GAME_IS_SKELETON_MECHANICAL )// ^^
27637GAME( 200?, sc4ggameae   ,sc4ggame,   sc4, sc4, sc4ggamem, ROT0, "Mazooma","Golden Game (Mazooma) (PR2056, newer?) (Scorpion 4) (GLDX, 35GBP, set 8)", GAME_IS_SKELETON_MECHANICAL )// ^^
27638// pay unit error
27639GAME( 200?, sc4ggamel   ,sc4ggame,   sc4, sc4, sc4ggamem, ROT0, "Mazooma","Golden Game (Mazooma) (PR2056, newer?) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )// ^^
27640GAME( 200?, sc4ggamem   ,sc4ggame,   sc4, sc4, sc4ggamem, ROT0, "Mazooma","Golden Game (Mazooma) (PR2056, newer?) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )// ^^
27641GAME( 200?, sc4ggamew   ,sc4ggame,   sc4, sc4, sc4ggamem, ROT0, "Mazooma","Golden Game (Mazooma) (PR2056, newer?) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL )// ^^
27642GAME( 200?, sc4ggamex   ,sc4ggame,   sc4, sc4, sc4ggamem, ROT0, "Mazooma","Golden Game (Mazooma) (PR2056, newer?) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL )// ^^
27643GAME( 200?, sc4ggamey   ,sc4ggame,   sc4, sc4, sc4ggamem, ROT0, "Mazooma","Golden Game (Mazooma) (PR2056, newer?) (Scorpion 4) (set 5)", GAME_IS_SKELETON_MECHANICAL )// ^^
27644GAME( 200?, sc4ggamez   ,sc4ggame,   sc4, sc4, sc4ggamem, ROT0, "Mazooma","Golden Game (Mazooma) (PR2056, newer?) (Scorpion 4) (set 6)", GAME_IS_SKELETON_MECHANICAL )// ^^
27645GAME( 200?, sc4ggame1   ,sc4ggame,   sc4, sc4, sc4ggamem, ROT0, "Mazooma","Golden Game (Mazooma) (PR2056, newer?) (Scorpion 4) (set 7)", GAME_IS_SKELETON_MECHANICAL )// ^^
27646GAME( 200?, sc4ggame2   ,sc4ggame,   sc4, sc4, sc4ggamem, ROT0, "Mazooma","Golden Game (Mazooma) (PR2056, newer?) (Scorpion 4) (set 8)", GAME_IS_SKELETON_MECHANICAL )// ^^
27647// 25GBP, no 41 check
27648// PR2056  GOLDEN X         BARX SOUNDS         GOLDEN X
27649GAME( 200?, sc4ggamea   ,sc4ggame,   sc4, sc4, sc4ggame,  ROT0, "Mazooma","Golden Game (Mazooma) (PR2056) (Scorpion 4) (GLDX, 25GBP, set 1)", GAME_IS_SKELETON_MECHANICAL )
27650GAME( 200?, sc4ggameb   ,sc4ggame,   sc4, sc4, sc4ggame,  ROT0, "Mazooma","Golden Game (Mazooma) (PR2056) (Scorpion 4) (GLDX, 25GBP, set 2)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27651GAME( 200?, sc4ggamec   ,sc4ggame,   sc4, sc4, sc4ggame,  ROT0, "Mazooma","Golden Game (Mazooma) (PR2056) (Scorpion 4) (GLDX, 25GBP, set 3)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27652GAME( 200?, sc4ggamed   ,sc4ggame,   sc4, sc4, sc4ggame,  ROT0, "Mazooma","Golden Game (Mazooma) (PR2056) (Scorpion 4) (GLDX, 25GBP, set 4)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27653GAME( 200?, sc4ggames   ,sc4ggame,   sc4, sc4, sc4ggame,  ROT0, "Mazooma","Golden Game (Mazooma) (PR2056) (Scorpion 4) (GLDX, 25GBP, set 5)", GAME_IS_SKELETON_MECHANICAL )// ^^
27654GAME( 200?, sc4ggamet   ,sc4ggame,   sc4, sc4, sc4ggame,  ROT0, "Mazooma","Golden Game (Mazooma) (PR2056) (Scorpion 4) (GLDX, 25GBP, set 6)", GAME_IS_SKELETON_MECHANICAL )// ^^
27655GAME( 200?, sc4ggameu   ,sc4ggame,   sc4, sc4, sc4ggame,  ROT0, "Mazooma","Golden Game (Mazooma) (PR2056) (Scorpion 4) (GLDX, 25GBP, set 7)", GAME_IS_SKELETON_MECHANICAL )// ^^
27656// 30GBP, no 41 check
27657GAME( 200?, sc4ggamef   ,sc4ggame,   sc4, sc4, sc4ggame,  ROT0, "Mazooma","Golden Game (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 1)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27658GAME( 200?, sc4ggameg   ,sc4ggame,   sc4, sc4, sc4ggame,  ROT0, "Mazooma","Golden Game (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 2)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27659GAME( 200?, sc4ggamej   ,sc4ggame,   sc4, sc4, sc4ggame,  ROT0, "Mazooma","Golden Game (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 3)", GAME_IS_SKELETON_MECHANICAL )// ^^
27660GAME( 200?, sc4ggamek   ,sc4ggame,   sc4, sc4, sc4ggame,  ROT0, "Mazooma","Golden Game (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 4)", GAME_IS_SKELETON_MECHANICAL )// ^^
27661GAME( 200?, sc4ggamev   ,sc4ggame,   sc4, sc4, sc4ggame,  ROT0, "Mazooma","Golden Game (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 5)", GAME_IS_SKELETON_MECHANICAL )// ^^
27662GAME( 200?, sc4ggame3   ,sc4ggame,   sc4, sc4, sc4ggame,  ROT0, "Mazooma","Golden Game (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 6)", GAME_IS_SKELETON_MECHANICAL )// ^^
27663GAME( 200?, sc4ggame4   ,sc4ggame,   sc4, sc4, sc4ggame,  ROT0, "Mazooma","Golden Game (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 7)", GAME_IS_SKELETON_MECHANICAL )// ^^
27664GAME( 200?, sc4ggame5   ,sc4ggame,   sc4, sc4, sc4ggame,  ROT0, "Mazooma","Golden Game (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 8)", GAME_IS_SKELETON_MECHANICAL )// ^^
27665GAME( 200?, sc4ggame6   ,sc4ggame,   sc4, sc4, sc4ggame,  ROT0, "Mazooma","Golden Game (Mazooma) (PR2056) (Scorpion 4) (GLDX, 30GBP, set 9)", GAME_IS_SKELETON_MECHANICAL )// ^^
27666// pay unit error
27667GAME( 200?, sc4ggamen   ,sc4ggame,   sc4, sc4, sc4ggame,  ROT0, "Mazooma","Golden Game (Mazooma) (PR2056) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )// ^^
27668GAME( 200?, sc4ggame0   ,sc4ggame,   sc4, sc4, sc4ggame,  ROT0, "Mazooma","Golden Game (Mazooma) (PR2056) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )// ^^
27669
27670
2740327671// these were in the above sets
27404GAME( 200?, sc4ggdlx   ,0,         sc4, sc4, sc4, ROT0, "Mazooma","Golden Game Deluxe (Mazooma) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )// PR2201  GOLDEN X         GOLDEN GAME MAZ GXDX SOUNDS         GOLDEN GAME DLX
27405GAME( 200?, sc4ggdlxc   ,sc4ggdlx,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game Deluxe (Mazooma) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL )// ^^
27406GAME( 200?, sc4ggdlxa   ,sc4ggdlx,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game Deluxe (Mazooma) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )// PR2201  GOLDEN X         GOLDEN GAME DLX MAZ GXDX SOUNDS         GOLDEN X
27407GAME( 200?, sc4ggdlxb   ,sc4ggdlx,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game Deluxe (Mazooma) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL )// ^^
27408GAME( 200?, sc4ggdlxd   ,sc4ggdlx,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game Deluxe (Mazooma) (Scorpion 4) (set 5)", GAME_IS_SKELETON_MECHANICAL )// ^^
27409GAME( 200?, sc4ggdlxe   ,sc4ggdlx,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game Deluxe (Mazooma) (Scorpion 4) (set 6)", GAME_IS_SKELETON_MECHANICAL )// ^^
27410GAME( 200?, sc4ggdlxf   ,sc4ggdlx,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game Deluxe (Mazooma) (Scorpion 4) (set 7)", GAME_IS_SKELETON_MECHANICAL )// PR2201  GOLDEN GAME DELUXE         GOLDEN GAME MAZ GXDX SOUNDS         GOLDEN GAME DLX
27411GAME( 200?, sc4ggdlxg   ,sc4ggdlx,   sc4, sc4, sc4, ROT0, "Mazooma","Golden Game Deluxe (Mazooma) (Scorpion 4) (set 8)", GAME_IS_SKELETON_MECHANICAL )// ^^
27672// PR2201  GOLDEN X         GOLDEN GAME MAZ GXDX SOUNDS         GOLDEN GAME DLX
27673GAME( 200?, sc4ggdlx   ,0,         sc4, sc4, sc4ggame, ROT0, "Mazooma","Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
27674GAME( 200?, sc4ggdlxc   ,sc4ggdlx,   sc4, sc4, sc4ggame, ROT0, "Mazooma","Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL )// ^^
27675// PR2201  GOLDEN X         GOLDEN GAME DLX MAZ GXDX SOUNDS         GOLDEN X
27676GAME( 200?, sc4ggdlxa   ,sc4ggdlx,   sc4, sc4, sc4ggame, ROT0, "Mazooma","Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
27677GAME( 200?, sc4ggdlxb   ,sc4ggdlx,   sc4, sc4, sc4ggame, ROT0, "Mazooma","Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL )// ^^
27678GAME( 200?, sc4ggdlxd   ,sc4ggdlx,   sc4, sc4, sc4ggame, ROT0, "Mazooma","Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (set 5)", GAME_IS_SKELETON_MECHANICAL )// ^^
27679GAME( 200?, sc4ggdlxe   ,sc4ggdlx,   sc4, sc4, sc4ggame, ROT0, "Mazooma","Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (set 6)", GAME_IS_SKELETON_MECHANICAL )// ^^
27680// PR2201  GOLDEN GAME DELUXE         GOLDEN GAME MAZ GXDX SOUNDS         GOLDEN GAME DLX
27681GAME( 200?, sc4ggdlxf   ,sc4ggdlx,   sc4, sc4, sc4ggame, ROT0, "Mazooma","Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (set 7)", GAME_IS_SKELETON_MECHANICAL )
27682GAME( 200?, sc4ggdlxg   ,sc4ggdlx,   sc4, sc4, sc4ggame, ROT0, "Mazooma","Golden Game Deluxe (Mazooma) (PR2201) (Scorpion 4) (set 8)", GAME_IS_SKELETON_MECHANICAL )// ^^
27683
27684const stepper_interface* sc4gggtb_reel_configs[6] =
27685{
27686   &starpoint_interface_48step,
27687   &starpoint_interface_48step,
27688   &starpoint_interface_48step,
27689   &starpoint_interface_48step,
27690   &starpoint_interface_48step,
27691   &starpoint_interface_48step,
27692};
27693
27694static DRIVER_INIT( sc4gggtb )
27695{
27696   sc4_state *state = machine.driver_data<sc4_state>();
27697   DRIVER_INIT_CALL( sc4 );
27698   state->m_reel_setup = sc4gggtb_reel_configs;
27699}
27700
2741227701// most of these look similar
27413GAME( 200?, sc4ggg      ,0,         sc4, sc4, sc4, ROT0, "Mazooma","Grand Golden Game (Mazooma) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL ) // PR2056  GOLD X TRIPLE         BARX SOUNDS           GOLD X TRIPLE
27414GAME( 200?, sc4gggj      ,sc4ggg,   sc4, sc4, sc4, ROT0, "Mazooma","Grand Golden Game (Mazooma) (Scorpion 4) (set 11)", GAME_IS_SKELETON_MECHANICAL )// ^^
27415GAME( 200?, sc4ggga      ,sc4ggg,   sc4, sc4, sc4, ROT0, "Mazooma","Grand Golden Game (Mazooma) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL ) // PR2056  GOLDEN X         GOLDEN GAME ARCADE  BARX SOUNDS         GOLDEN X
27416GAME( 200?, sc4gggb      ,sc4ggg,   sc4, sc4, sc4, ROT0, "Mazooma","Grand Golden Game (Mazooma) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27417GAME( 200?, sc4gggc      ,sc4ggg,   sc4, sc4, sc4, ROT0, "Mazooma","Grand Golden Game (Mazooma) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27418GAME( 200?, sc4gggd      ,sc4ggg,   sc4, sc4, sc4, ROT0, "Mazooma","Grand Golden Game (Mazooma) (Scorpion 4) (set 5)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27419GAME( 200?, sc4ggge      ,sc4ggg,   sc4, sc4, sc4, ROT0, "Mazooma","Grand Golden Game (Mazooma) (Scorpion 4) (set 6)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27420GAME( 200?, sc4gggf      ,sc4ggg,   sc4, sc4, sc4, ROT0, "Mazooma","Grand Golden Game (Mazooma) (Scorpion 4) (set 7)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27421GAME( 200?, sc4gggk      ,sc4ggg,   sc4, sc4, sc4, ROT0, "Mazooma","Grand Golden Game (Mazooma) (Scorpion 4) (set 12)", GAME_IS_SKELETON_MECHANICAL )// ^^
27422GAME( 200?, sc4gggl      ,sc4ggg,   sc4, sc4, sc4, ROT0, "Mazooma","Grand Golden Game (Mazooma) (Scorpion 4) (set 13)", GAME_IS_SKELETON_MECHANICAL )// ^^
27423GAME( 200?, sc4gggm      ,sc4ggg,   sc4, sc4, sc4, ROT0, "Mazooma","Grand Golden Game (Mazooma) (Scorpion 4) (set 14)", GAME_IS_SKELETON_MECHANICAL )// ^^
27424GAME( 200?, sc4gggn      ,sc4ggg,   sc4, sc4, sc4, ROT0, "Mazooma","Grand Golden Game (Mazooma) (Scorpion 4) (set 15)", GAME_IS_SKELETON_MECHANICAL )// ^^
27425GAME( 200?, sc4gggo      ,sc4ggg,   sc4, sc4, sc4, ROT0, "Mazooma","Grand Golden Game (Mazooma) (Scorpion 4) (set 16)", GAME_IS_SKELETON_MECHANICAL )// ^^
27426GAME( 200?, sc4gggp      ,sc4ggg,   sc4, sc4, sc4, ROT0, "Mazooma","Grand Golden Game (Mazooma) (Scorpion 4) (set 17)", GAME_IS_SKELETON_MECHANICAL )// ^^
27427GAME( 200?, sc4gggg      ,sc4ggg,   sc4, sc4, sc4, ROT0, "Mazooma","Grand Golden Game (Mazooma) (Scorpion 4) (set 8)", GAME_IS_SKELETON_MECHANICAL ) // PR2353 GRAND GOLDEN GAME         GRAND GOLDEN GAME MAZ BARX SOUNDS         GOLDEN GAME
27428GAME( 200?, sc4gggh      ,sc4ggg,   sc4, sc4, sc4, ROT0, "Mazooma","Grand Golden Game (Mazooma) (Scorpion 4) (set 9)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27429GAME( 200?, sc4gggi      ,sc4ggg,   sc4, sc4, sc4, ROT0, "Mazooma","Grand Golden Game (Mazooma) (Scorpion 4) (set 10)", GAME_IS_SKELETON_MECHANICAL )// ^^
27430GAME( 200?, sc4gggq      ,sc4ggg,   sc4, sc4, sc4, ROT0, "Mazooma","Grand Golden Game (Mazooma) (Scorpion 4) (set 18)", GAME_IS_SKELETON_MECHANICAL )// ^^
27431GAME( 200?, sc4gggr      ,sc4ggg,   sc4, sc4, sc4, ROT0, "Mazooma","Grand Golden Game (Mazooma) (Scorpion 4) (set 19)", GAME_IS_SKELETON_MECHANICAL )// ^^
27432GAME( 200?, sc4gggs      ,sc4ggg,   sc4, sc4, sc4, ROT0, "Mazooma","Grand Golden Game (Mazooma) (Scorpion 4) (set 20)", GAME_IS_SKELETON_MECHANICAL )// ^^
27702GAME( 200?, sc4gggtb      ,0,         sc4, sc4, sc4gggtb, ROT0, "Mazooma","Grand Golden Game (Mazooma) (PR2056, Top Box) (Scorpion 4) (GGGT, set 1)", GAME_IS_SKELETON_MECHANICAL ) // PR2056  GOLD X TRIPLE         BARX SOUNDS           GOLD X TRIPLE
27703GAME( 200?, sc4gggtba      ,sc4ggg,   sc4, sc4, sc4gggtb, ROT0, "Mazooma","Grand Golden Game (Mazooma) (PR2056, Top Box) (Scorpion 4) (GGGT, set 2)", GAME_IS_SKELETON_MECHANICAL )// ^^
2743327704
2743427705
27706const stepper_interface* sc4ggg_reel_configs[6] =
27707{
27708   &starpoint_interface_200step_reel,
27709   &starpoint_interface_200step_reel,
27710   &starpoint_interface_200step_reel,
27711   0,
27712   0,
27713   0,
27714};
27715
27716static DRIVER_INIT( sc4ggg )
27717{
27718   sc4_state *state = machine.driver_data<sc4_state>();
27719   DRIVER_INIT_CALL( sc4 );
27720   state->m_reel_setup = sc4ggg_reel_configs;
27721}
27722
27723// do these sets have the wrong project name / ID strings? they boot at GGGB (Grand Golden Game) but their product ID in the header suggests standard Golden Game
27724// PR2056  GOLDEN X         GOLDEN GAME ARCADE  BARX SOUNDS         GOLDEN X
27725GAME( 200?, sc4ggg      ,0,        sc4, sc4, sc4ggg, ROT0, "Mazooma","Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 1)", GAME_IS_SKELETON_MECHANICAL )
27726GAME( 200?, sc4gggb      ,sc4ggg,   sc4, sc4, sc4ggg, ROT0, "Mazooma","Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 2)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27727GAME( 200?, sc4gggc      ,sc4ggg,   sc4, sc4, sc4ggg, ROT0, "Mazooma","Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 3)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27728GAME( 200?, sc4gggd      ,sc4ggg,   sc4, sc4, sc4ggg, ROT0, "Mazooma","Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 4)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27729GAME( 200?, sc4ggge      ,sc4ggg,   sc4, sc4, sc4ggg, ROT0, "Mazooma","Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 5)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27730GAME( 200?, sc4gggf      ,sc4ggg,   sc4, sc4, sc4ggg, ROT0, "Mazooma","Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 6)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27731GAME( 200?, sc4gggk      ,sc4ggg,   sc4, sc4, sc4ggg, ROT0, "Mazooma","Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 7)", GAME_IS_SKELETON_MECHANICAL )// ^^
27732GAME( 200?, sc4gggl      ,sc4ggg,   sc4, sc4, sc4ggg, ROT0, "Mazooma","Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 8)", GAME_IS_SKELETON_MECHANICAL )// ^^
27733GAME( 200?, sc4gggm      ,sc4ggg,   sc4, sc4, sc4ggg, ROT0, "Mazooma","Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 9)", GAME_IS_SKELETON_MECHANICAL )// ^^
27734GAME( 200?, sc4gggn      ,sc4ggg,   sc4, sc4, sc4ggg, ROT0, "Mazooma","Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 10)", GAME_IS_SKELETON_MECHANICAL )// ^^
27735GAME( 200?, sc4gggo      ,sc4ggg,   sc4, sc4, sc4ggg, ROT0, "Mazooma","Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 11)", GAME_IS_SKELETON_MECHANICAL )// ^^
27736GAME( 200?, sc4gggp      ,sc4ggg,   sc4, sc4, sc4ggg, ROT0, "Mazooma","Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 12)", GAME_IS_SKELETON_MECHANICAL )// ^^
27737GAME( 200?, sc4gggg      ,sc4ggg,   sc4, sc4, sc4ggg, ROT0, "Mazooma","Grand Golden Game (Mazooma) (PR2056) (Scorpion 4) (GGGB, 35GBP, set 13)", GAME_IS_SKELETON_MECHANICAL )
27738// PR2353 GRAND GOLDEN GAME         GRAND GOLDEN GAME MAZ BARX SOUNDS         GOLDEN GAME
27739GAME( 200?, sc4gggh      ,sc4ggg,   sc4, sc4, sc4ggg, ROT0, "Mazooma","Grand Golden Game (Mazooma) (PR2353) (Scorpion 4) (GGGB, 35GBP, set 1)", GAME_IS_SKELETON_MECHANICAL ) // ^^
27740GAME( 200?, sc4gggi      ,sc4ggg,   sc4, sc4, sc4ggg, ROT0, "Mazooma","Grand Golden Game (Mazooma) (PR2353) (Scorpion 4) (GGGB, 35GBP, set 2)", GAME_IS_SKELETON_MECHANICAL )// ^^
27741GAME( 200?, sc4gggq      ,sc4ggg,   sc4, sc4, sc4ggg, ROT0, "Mazooma","Grand Golden Game (Mazooma) (PR2353) (Scorpion 4) (GGGB, 35GBP, set 3)", GAME_IS_SKELETON_MECHANICAL )// ^^
27742GAME( 200?, sc4gggr      ,sc4ggg,   sc4, sc4, sc4ggg, ROT0, "Mazooma","Grand Golden Game (Mazooma) (PR2353) (Scorpion 4) (GGGB, 35GBP, set 4)", GAME_IS_SKELETON_MECHANICAL )// ^^
27743GAME( 200?, sc4gggs      ,sc4ggg,   sc4, sc4, sc4ggg, ROT0, "Mazooma","Grand Golden Game (Mazooma) (PR2353) (Scorpion 4) (GGGB, 35GBP, set 5)", GAME_IS_SKELETON_MECHANICAL )// ^^
27744
27745
2743527746// PR1227 4PLAY ART13         95004313 4PLAY PR1227
2743627747GAME( 200?, sc4ivply   ,0,         sc4, sc4, sc4, ROT0, "BFM","4 Play (Bellfruit) (Scorpion 4)", GAME_IS_SKELETON_MECHANICAL ) // not english
2743727748
r14963r14964
2761527926GAME( 200?, sc4ctlcl   ,0,         sc4, sc4, sc4, ROT0, "BFM","Cop The Lot Club (Bellfruit) (Scorpion 4) (set 1)", GAME_IS_SKELETON_MECHANICAL )
2761627927GAME( 200?, sc4ctlcla   ,sc4ctlcl,   sc4, sc4, sc4, ROT0, "BFM","Cop The Lot Club (Bellfruit) (Scorpion 4) (set 2)", GAME_IS_SKELETON_MECHANICAL )
2761727928// PR1036 CLUB COP THE LOT         COP THE LOT CLUB  PR1036 CLOT SOUNDS11           COP THE LOT
27929// shows nothing, but alarms, do these go with the ad4 video roms?
2761827930GAME( 200?, sc4ctlclb   ,sc4ctlcl,   sc4, sc4, sc4, ROT0, "BFM","Cop The Lot Club (Bellfruit) (Scorpion 4) (set 3)", GAME_IS_SKELETON_MECHANICAL )
2761927931GAME( 200?, sc4ctlclc   ,sc4ctlcl,   sc4, sc4, sc4, ROT0, "BFM","Cop The Lot Club (Bellfruit) (Scorpion 4) (set 4)", GAME_IS_SKELETON_MECHANICAL )
2762027932
src/mame/drivers/byvid.c
r14963r14964
2323   // devices
2424   required_device<cpu_device> m_maincpu;
2525   required_device<cpu_device> m_videocpu;
26   required_device<cpu_device> m_pia;
26   required_device<pia6821_device> m_pia;
2727
2828   DECLARE_INPUT_CHANGED_MEMBER(test_switch_press);
2929//  UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
src/mame/drivers/cps1.c
r14963r14964
30153015
30163016static const ym2151_interface ym2151_config =
30173017{
3018   cps1_irq_handler_mus
3018   DEVCB_LINE(cps1_irq_handler_mus)
30193019};
30203020
30213021
src/mame/drivers/hyprduel.c
r14963r14964
436436   AM_RANGE(0x4788ac, 0x4788ad) AM_RAM AM_SHARE("screenctrl")   /* Screen Control */
437437   AM_RANGE(0x479700, 0x479713) AM_RAM AM_SHARE("videoregs")   /* Video Registers */
438438   AM_RANGE(0x800000, 0x800001) AM_WRITE(hyprduel_subcpu_control_w)
439   AM_RANGE(0xc00000, 0xc07fff) AM_RAM AM_SHARE("share1") AM_SHARE("sharedram1")
439   AM_RANGE(0xc00000, 0xc07fff) AM_RAM AM_SHARE("sharedram1")
440440   AM_RANGE(0xe00000, 0xe00001) AM_READ_PORT("SERVICE") AM_WRITENOP
441441   AM_RANGE(0xe00002, 0xe00003) AM_READ_PORT("DSW")
442442   AM_RANGE(0xe00004, 0xe00005) AM_READ_PORT("P1_P2")
443443   AM_RANGE(0xe00006, 0xe00007) AM_READ_PORT("SYSTEM")
444444   AM_RANGE(0xfe0000, 0xfe3fff) AM_RAM AM_SHARE("share2")
445   AM_RANGE(0xfe4000, 0xffffff) AM_RAM AM_SHARE("share3") AM_SHARE("sharedram3")
445   AM_RANGE(0xfe4000, 0xffffff) AM_RAM AM_SHARE("sharedram3")
446446ADDRESS_MAP_END
447447
448448static ADDRESS_MAP_START( hyprduel_map2, AS_PROGRAM, 16, hyprduel_state )
r14963r14964
628628
629629static const ym2151_interface ym2151_config =
630630{
631   sound_irq
631   DEVCB_LINE(sound_irq)
632632};
633633
634634/***************************************************************************
src/mame/drivers/bmcbowl.c
r14963r14964
112112public:
113113   bmcbowl_state(const machine_config &mconfig, device_type type, const char *tag)
114114      : driver_device(mconfig, type, tag) ,
115      m_stats_ram(*this, "stats_ram"),
115      m_stats_ram(*this, "stats_ram", 16),
116116      m_vid1(*this, "vid1"),
117117      m_vid2(*this, "vid2"){ }
118118
src/mame/drivers/lemmings.c
r14963r14964
249249
250250static const ym2151_interface ym2151_config =
251251{
252   sound_irq
252   DEVCB_LINE(sound_irq)
253253};
254254
255255static MACHINE_START( lemmings )
src/mame/drivers/tmnt.c
r14963r14964
20382038
20392039static const ym2151_interface ym2151_interface_cbj =
20402040{
2041   cuebrick_irq_handler
2041   DEVCB_LINE(cuebrick_irq_handler)
20422042};
20432043
20442044static void volume_callback(device_t *device, int v)
src/mame/drivers/funkyjet.c
r14963r14964
283283
284284static const ym2151_interface ym2151_config =
285285{
286   sound_irq
286   DEVCB_LINE(sound_irq)
287287};
288288
289289static const deco16ic_interface funkyjet_deco16ic_tilegen1_intf =
src/mame/drivers/cps3.c
r14963r14964
620620
621621
622622
623DIRECT_UPDATE_HANDLER( cps3_direct_handler );
624
625623/* Encryption */
626624
627625
r14963r14964
724722   state->m_0xc0000000_ram_decrypted = auto_alloc_array(machine, UINT32, 0x400/4);
725723
726724   address_space *main = machine.device<sh2_device>("maincpu")->space(AS_PROGRAM);
727   main->set_direct_update_handler(direct_update_delegate(FUNC(cps3_direct_handler), &machine));
725   main->set_direct_update_handler(direct_update_delegate(FUNC(cps3_state::cps3_direct_handler), state));
728726
729727   // flash roms
730728   astring tempstr;
r14963r14964
12781276
12791277
12801278
1281DIRECT_UPDATE_HANDLER( cps3_direct_handler )
1279DIRECT_UPDATE_MEMBER(cps3_state::cps3_direct_handler)
12821280{
1283   cps3_state *state = machine.driver_data<cps3_state>();
12841281//  if(DEBUG_PRINTF) printf("address %04x\n",address);
12851282
12861283   /* BIOS ROM */
r14963r14964
12921289   /* RAM */
12931290   else if (address >= 0x06000000 && address <= 0x06ffffff)
12941291   {
1295      UINT8 *decrypted = (UINT8*)state->m_decrypted_gamerom;
1292      UINT8 *decrypted = (UINT8*)m_decrypted_gamerom;
12961293      UINT8 *raw = decrypted;
12971294
1298      if (state->m_altEncryption) raw = (UINT8*) state->m_user4region;
1295      if (m_altEncryption) raw = (UINT8*) m_user4region;
12991296
13001297      direct.explicit_configure(0x06000000, 0x06ffffff, 0x00ffffff, raw, decrypted);
13011298
r14963r14964
13031300   }
13041301   else if (address >= 0xc0000000 && address <= 0xc00003ff)
13051302   {
1306      //direct->decrypted = (void*)state->m_0xc0000000_ram_decrypted;
1307      direct.explicit_configure(0xc0000000, 0xc00003ff, 0x3ff, (UINT8*)state->m_0xc0000000_ram.target(), (UINT8*)state->m_0xc0000000_ram_decrypted);
1303      //direct->decrypted = (void*)m_0xc0000000_ram_decrypted;
1304      direct.explicit_configure(0xc0000000, 0xc00003ff, 0x3ff, (UINT8*)m_0xc0000000_ram.target(), (UINT8*)m_0xc0000000_ram_decrypted);
13081305      return ~0;
13091306   }
13101307
13111308   /* anything else falls through to NOPs */
1312   direct.explicit_configure(address, address, 0, (UINT8*)state->m_nops, (UINT8*)state->m_nops);
1309   direct.explicit_configure(address, address, 0, (UINT8*)m_nops, (UINT8*)m_nops);
13131310   return ~0;
13141311}
13151312
src/mame/drivers/subsino.c
r14963r14964
35553555   rom[0x957] = 0x18; //patch "losing protection" check
35563556   state->m_stisub_colorram = auto_alloc_array(machine, UINT8, 256*3);
35573557
3558   //state->m_reel1_scroll = auto_alloc_array(machine, UINT8, 0x40);
3559   //state->m_reel2_scroll = auto_alloc_array(machine, UINT8, 0x40);
3560   //state->m_reel3_scroll = auto_alloc_array(machine, UINT8, 0x40);
3558   state->m_reel1_scroll.allocate(0x40);
3559   state->m_reel2_scroll.allocate(0x40);
3560   state->m_reel3_scroll.allocate(0x40);
35613561
35623562   state->m_reel1_attr = auto_alloc_array(machine, UINT8, 0x200);
35633563   state->m_reel2_attr = auto_alloc_array(machine, UINT8, 0x200);
r14963r14964
35693569   subsino_state *state = machine.driver_data<subsino_state>();
35703570   state->m_stisub_colorram = auto_alloc_array(machine, UINT8, 256*3);
35713571
3572   //state->m_reel1_scroll = auto_alloc_array(machine, UINT8, 0x40);
3573   //state->m_reel2_scroll = auto_alloc_array(machine, UINT8, 0x40);
3574   //state->m_reel3_scroll = auto_alloc_array(machine, UINT8, 0x40);
3572   state->m_reel1_scroll.allocate(0x40);
3573   state->m_reel2_scroll.allocate(0x40);
3574   state->m_reel3_scroll.allocate(0x40);
35753575
35763576   state->m_reel1_attr = auto_alloc_array(machine, UINT8, 0x200);
35773577   state->m_reel2_attr = auto_alloc_array(machine, UINT8, 0x200);
src/mame/drivers/mlanding.c
r14963r14964
738738
739739static const ym2151_interface ym2151_config =
740740{
741   irq_handler,
742   sound_bankswitch_w
741   DEVCB_LINE(irq_handler),
742   DEVCB_HANDLER(sound_bankswitch_w)
743743};
744744
745745static const tc0140syt_interface mlanding_tc0140syt_intf =
src/mame/drivers/atarisy1.c
r14963r14964
744744
745745static const ym2151_interface ym2151_config =
746746{
747   atarigen_ym2151_irq_gen
747   DEVCB_LINE(atarigen_ym2151_irq_gen)
748748};
749749
750750
src/mame/drivers/atarig42.c
r14963r14964
135135 *
136136 *************************************/
137137
138DIRECT_UPDATE_HANDLER( atarig42_sloop_direct_handler )
138DIRECT_UPDATE_MEMBER( atarig42_state::atarig42_sloop_direct_handler )
139139{
140140   if (address < 0x80000)
141141   {
142      atarig42_state *state = machine.driver_data<atarig42_state>();
143      direct.explicit_configure(0x00000, 0x7ffff, 0x7ffff, state->m_sloop_base);
142      direct.explicit_configure(0x00000, 0x7ffff, 0x7ffff, m_sloop_base);
144143      return (offs_t)-1;
145144   }
146145   return address;
r14963r14964
792791
793792   address_space *main = machine.device<m68000_device>("maincpu")->space(AS_PROGRAM);
794793   state->m_sloop_base = main->install_readwrite_handler(0x000000, 0x07ffff, read16_delegate(FUNC(atarig42_state::roadriot_sloop_data_r),state), write16_delegate(FUNC(atarig42_state::roadriot_sloop_data_w),state));
795   main->set_direct_update_handler(direct_update_delegate(FUNC(atarig42_sloop_direct_handler), &machine));
794   main->set_direct_update_handler(direct_update_delegate(FUNC(atarig42_state::atarig42_sloop_direct_handler), state));
796795
797796   asic65_config(machine, ASIC65_ROMBASED);
798797/*
r14963r14964
831830
832831   address_space *main = machine.device<m68000_device>("maincpu")->space(AS_PROGRAM);
833832   state->m_sloop_base = main->install_readwrite_handler(0x000000, 0x07ffff, read16_delegate(FUNC(atarig42_state::guardians_sloop_data_r),state), write16_delegate(FUNC(atarig42_state::guardians_sloop_data_w),state));
834   main->set_direct_update_handler(direct_update_delegate(FUNC(atarig42_sloop_direct_handler), &machine));
833   main->set_direct_update_handler(direct_update_delegate(FUNC(atarig42_state::atarig42_sloop_direct_handler), state));
835834
836835   asic65_config(machine, ASIC65_GUARDIANS);
837836/*
src/mame/drivers/opwolf.c
r14963r14964
699699
700700static const ym2151_interface ym2151_config =
701701{
702   irq_handler,
703   sound_bankswitch_w
702   DEVCB_LINE(irq_handler),
703   DEVCB_HANDLER(sound_bankswitch_w)
704704};
705705
706706
src/mame/drivers/shadfrce.c
r14963r14964
550550
551551static const ym2151_interface ym2151_config =
552552{
553   irq_handler
553   DEVCB_LINE(irq_handler)
554554};
555555
556556static MACHINE_CONFIG_START( shadfrce, shadfrce_state )
src/mame/drivers/cbuster.c
r14963r14964
270270
271271static const ym2151_interface ym2151_config =
272272{
273   sound_irq
273   DEVCB_LINE(sound_irq)
274274};
275275
276276static int twocrude_bank_callback( const int bank )
src/mame/drivers/rohga.c
r14963r14964
732732
733733static const ym2151_interface ym2151_config =
734734{
735   sound_irq,
736   sound_bankswitch_w
735   DEVCB_LINE(sound_irq),
736   DEVCB_HANDLER(sound_bankswitch_w)
737737};
738738
739739/**********************************************************************************/
src/mame/drivers/plygonet.c
r14963r14964
313313   return 0x7fff;
314314}
315315
316DIRECT_UPDATE_HANDLER( plygonet_dsp56k_direct_handler )
316DIRECT_UPDATE_MEMBER(polygonet_state::plygonet_dsp56k_direct_handler)
317317{
318   polygonet_state *state = machine.driver_data<polygonet_state>();
319
320318   /* Call the dsp's update handler first */
321   if (!state->m_dsp56k_update_handler.isnull())
319   if (!m_dsp56k_update_handler.isnull())
322320   {
323      if (state->m_dsp56k_update_handler(direct, address) == ~0)
321      if (m_dsp56k_update_handler(direct, address) == ~0)
324322         return ~0;
325323   }
326324
327325   /* If the requested region wasn't in there, see if it needs to be caught driver-side */
328326   if (address >= (0x7000<<1) && address <= (0x7fff<<1))
329327   {
330      direct.explicit_configure(0x7000<<1, 0x7fff<<1, (0xfff<<1) | 1, state->m_dsp56k_p_mirror);
328      direct.explicit_configure(0x7000<<1, 0x7fff<<1, (0xfff<<1) | 1, m_dsp56k_p_mirror);
331329      return ~0;
332330   }
333331   else if (address >= (0x8000<<1) && address <= (0x87ff<<1))
334332   {
335      direct.explicit_configure(0x8000<<1, 0x87ff<<1, (0x7ff<<1) | 1, state->m_dsp56k_p_8000);
333      direct.explicit_configure(0x8000<<1, 0x87ff<<1, (0x7ff<<1) | 1, m_dsp56k_p_8000);
336334      return ~0;
337335   }
338336
r14963r14964
743741
744742   /* The dsp56k occasionally executes out of mapped memory */
745743   address_space *space = machine.device<dsp56k_device>("dsp")->space(AS_PROGRAM);
746   state->m_dsp56k_update_handler = space->set_direct_update_handler(direct_update_delegate(FUNC(plygonet_dsp56k_direct_handler), &machine));
744   state->m_dsp56k_update_handler = space->set_direct_update_handler(direct_update_delegate(FUNC(polygonet_state::plygonet_dsp56k_direct_handler), state));
747745
748746    /* save states */
749747   state->save_item(NAME(state->m_dsp56k_bank00_ram));
src/mame/drivers/nemesis.c
r14963r14964
15211521
15221522static const ym2151_interface ym2151_config =
15231523{
1524   sound_irq
1524   DEVCB_LINE(sound_irq)
15251525};
15261526
15271527static const ym3812_interface ym3812_config =
src/mame/drivers/galaga.c
r14963r14964
988988   AM_RANGE(0x8400, 0x87ff) AM_RAM AM_SHARE("share1")                     /* work RAM (top half for RAM 0 */
989989   AM_RANGE(0x8800, 0x8bff) AM_RAM AM_SHARE("digdug_objram")   /* work RAM + sprite registers */
990990   AM_RANGE(0x9000, 0x93ff) AM_RAM AM_SHARE("digdug_posram")   /* work RAM + sprite registers */
991   AM_RANGE(0x9800, 0x9bff) AM_RAM AM_SHARE("share4") AM_SHARE("digdug_flpram")   /* work RAM + sprite registers */
991   AM_RANGE(0x9800, 0x9bff) AM_RAM AM_SHARE("digdug_flpram")   /* work RAM + sprite registers */
992992   AM_RANGE(0xa000, 0xa007) AM_READNOP AM_WRITE_LEGACY(digdug_PORT_w)      /* video latches (spurious reads when setting latch bits) */
993993   AM_RANGE(0xb800, 0xb83f) AM_DEVREADWRITE("earom", atari_vg_earom_device, read, write)   /* non volatile memory data */
994994   AM_RANGE(0xb840, 0xb840) AM_DEVWRITE("earom", atari_vg_earom_device, ctrl_w)               /* non volatile memory control */
src/mame/drivers/taito_x.c
r14963r14964
794794
795795static const ym2151_interface ym2151_config =
796796{
797   irqhandler
797   DEVCB_LINE(irqhandler)
798798};
799799
800800static MACHINE_START( taitox )
src/mame/drivers/sidearms.c
r14963r14964
649649
650650static const ym2151_interface whizz_ym2151_interface =
651651{
652   irqhandler
652   DEVCB_LINE(irqhandler)
653653};
654654
655655static MACHINE_CONFIG_START( sidearms, sidearms_state )
src/mame/drivers/tumblep.c
r14963r14964
280280
281281static const ym2151_interface ym2151_config =
282282{
283   sound_irq
283   DEVCB_LINE(sound_irq)
284284};
285285
286286static const deco16ic_interface tumblep_deco16ic_tilegen1_intf =
src/mame/drivers/dietgo.c
r14963r14964
168168
169169static const ym2151_interface ym2151_config =
170170{
171   sound_irq
171   DEVCB_LINE(sound_irq)
172172};
173173
174174
src/mame/drivers/blockout.c
r14963r14964
268268
269269static const ym2151_interface ym2151_config =
270270{
271   blockout_irq_handler
271   DEVCB_LINE(blockout_irq_handler)
272272};
273273
274274
src/mame/drivers/exzisus.c
r14963r14964
259259
260260static const ym2151_interface ym2151_config =
261261{
262   irqhandler
262   DEVCB_LINE(irqhandler)
263263};
264264
265265
src/mame/drivers/merit.c
r14963r14964
7272   int m_extra_video_bank_bit;
7373   int m_question_address;
7474   int m_decryption_key;
75   required_shared_ptr<UINT8> m_backup_ram;
75   optional_shared_ptr<UINT8> m_backup_ram;
7676   DECLARE_READ8_MEMBER(questions_r);
7777   DECLARE_WRITE8_MEMBER(low_offset_w);
7878   DECLARE_WRITE8_MEMBER(med_offset_w);
src/mame/drivers/mcr68.c
r14963r14964
5555
5656#include "emu.h"
5757#include "cpu/m68000/m68000.h"
58#include "audio/mcr.h"
59#include "audio/williams.h"
6058#include "machine/nvram.h"
6159#include "includes/mcr.h"
6260#include "includes/mcr68.h"
r14963r14964
103101WRITE16_MEMBER(mcr68_state::xenophobe_control_w)
104102{
105103   COMBINE_DATA(&m_control_word);
106/*  soundsgood_reset_w(~m_control_word & 0x0020);*/
107   soundsgood_data_w(space, offset, ((m_control_word & 0x000f) << 1) | ((m_control_word & 0x0010) >> 4));
104/*  m_sounds_good->reset_write(~m_control_word & 0x0020);*/
105   m_sounds_good->write(space, offset, ((m_control_word & 0x000f) << 1) | ((m_control_word & 0x0010) >> 4));
108106}
109107
110108
r14963r14964
118116WRITE16_MEMBER(mcr68_state::blasted_control_w)
119117{
120118   COMBINE_DATA(&m_control_word);
121/*  soundsgood_reset_w(~m_control_word & 0x0020);*/
122   soundsgood_data_w(space, offset, (m_control_word >> 8) & 0x1f);
119/*  m_sounds_good->reset_write(~m_control_word & 0x0020);*/
120   m_sounds_good->write(space, offset, (m_control_word >> 8) & 0x1f);
123121}
124122
125123
r14963r14964
137135   int which = (m_control_word >> 3) & 3;
138136   int analog = input_port_read(machine(), portnames[which]);
139137
140   return result | ((soundsgood_status_r(space, 0) & 1) << 5) | (analog << 8);
138   return result | ((m_sounds_good->read(space, 0) & 1) << 5) | (analog << 8);
141139}
142140
143141
144142READ16_MEMBER(mcr68_state::spyhunt2_port_1_r)
145143{
146144   int result = input_port_read(machine(), "IN1");
147   return result | ((turbocs_status_r(space, 0) & 1) << 7);
145   return result | ((m_turbo_chip_squeak->read(space, 0) & 1) << 7);
148146}
149147
150148
r14963r14964
152150{
153151   COMBINE_DATA(&m_control_word);
154152
155/*  turbocs_reset_w(~m_control_word & 0x0080);*/
156   turbocs_data_w(space, offset, (m_control_word >> 8) & 0x001f);
153/*  m_turbo_chip_squeak->reset_write(~m_control_word & 0x0080);*/
154   m_turbo_chip_squeak->write(space, offset, (m_control_word >> 8) & 0x001f);
157155
158   soundsgood_reset_w(machine(), ~m_control_word & 0x2000);
159   soundsgood_data_w(space, offset, (m_control_word >> 8) & 0x001f);
156   m_sounds_good->reset_write(~m_control_word & 0x2000);
157   m_sounds_good->write(space, offset, (m_control_word >> 8) & 0x001f);
160158}
161159
162160
r14963r14964
206204WRITE16_MEMBER(mcr68_state::archrivl_control_w)
207205{
208206   COMBINE_DATA(&m_control_word);
209   williams_cvsd_reset_w(machine(), ~m_control_word & 0x0400);
210   williams_cvsd_data_w(machine(), m_control_word & 0x3ff);
207   m_cvsd_sound->reset_write(~m_control_word & 0x0400);
208   m_cvsd_sound->write(space, 0, m_control_word & 0x3ff);
211209}
212210
213211
r14963r14964
305303   ADDRESS_MAP_GLOBAL_MASK(0x1fffff)
306304   AM_RANGE(0x000000, 0x03ffff) AM_ROM
307305   AM_RANGE(0x060000, 0x063fff) AM_RAM
308   AM_RANGE(0x070000, 0x070fff) AM_RAM_WRITE(mcr68_videoram_w) AM_SHARE("videoram16")
306   AM_RANGE(0x070000, 0x070fff) AM_RAM_WRITE(mcr68_videoram_w) AM_SHARE("videoram")
309307   AM_RANGE(0x071000, 0x071fff) AM_RAM
310   AM_RANGE(0x080000, 0x080fff) AM_RAM AM_SHARE("spriteram16")
308   AM_RANGE(0x080000, 0x080fff) AM_RAM AM_SHARE("spriteram")
311309   AM_RANGE(0x090000, 0x09007f) AM_WRITE(mcr68_paletteram_w) AM_SHARE("paletteram")
312310   AM_RANGE(0x0a0000, 0x0a000f) AM_READWRITE(mcr68_6840_upper_r, mcr68_6840_upper_w)
313311   AM_RANGE(0x0b0000, 0x0bffff) AM_WRITE(watchdog_reset16_w)
r14963r14964
333331   AM_RANGE(0x104000, 0x104007) AM_DEVREADWRITE8("pia0", pia6821_device, read, write, 0xff00)
334332   AM_RANGE(0x108000, 0x108007) AM_DEVREADWRITE8("pia1", pia6821_device, read, write, 0x00ff)
335333   AM_RANGE(0x10c000, 0x10c007) AM_DEVREADWRITE8("pia2", pia6821_device, read, write, 0x00ff)
336   AM_RANGE(0x800000, 0x800fff) AM_RAM_WRITE(zwackery_videoram_w) AM_SHARE("videoram16")
334   AM_RANGE(0x800000, 0x800fff) AM_RAM_WRITE(zwackery_videoram_w) AM_SHARE("videoram")
337335   AM_RANGE(0x802000, 0x803fff) AM_RAM_WRITE(zwackery_paletteram_w) AM_SHARE("paletteram")
338   AM_RANGE(0xc00000, 0xc00fff) AM_RAM_WRITE(zwackery_spriteram_w) AM_SHARE("spriteram16")
336   AM_RANGE(0xc00000, 0xc00fff) AM_RAM_WRITE(zwackery_spriteram_w) AM_SHARE("spriteram")
339337ADDRESS_MAP_END
340338
341339
r14963r14964
354352   AM_RANGE(0x0a0000, 0x0affff) AM_READ(pigskin_port_2_r)
355353   AM_RANGE(0x0c0000, 0x0c007f) AM_WRITE(mcr68_paletteram_w) AM_SHARE("paletteram")
356354   AM_RANGE(0x0e0000, 0x0effff) AM_WRITE(watchdog_reset16_w)
357   AM_RANGE(0x100000, 0x100fff) AM_RAM_WRITE(mcr68_videoram_w) AM_SHARE("videoram16")
355   AM_RANGE(0x100000, 0x100fff) AM_RAM_WRITE(mcr68_videoram_w) AM_SHARE("videoram")
358356   AM_RANGE(0x120000, 0x120001) AM_READWRITE(pigskin_protection_r, pigskin_protection_w)
359357   AM_RANGE(0x140000, 0x143fff) AM_RAM
360   AM_RANGE(0x160000, 0x1607ff) AM_RAM AM_SHARE("spriteram16")
358   AM_RANGE(0x160000, 0x1607ff) AM_RAM AM_SHARE("spriteram")
361359   AM_RANGE(0x180000, 0x18000f) AM_READWRITE(mcr68_6840_upper_r, mcr68_6840_upper_w)
362360   AM_RANGE(0x1a0000, 0x1affff) AM_WRITE(archrivl_control_w)
363361   AM_RANGE(0x1e0000, 0x1effff) AM_READ_PORT("IN0")
r14963r14964
379377   AM_RANGE(0x0a0000, 0x0affff) AM_READ_PORT("DSW")
380378   AM_RANGE(0x100000, 0x103fff) AM_RAM AM_SHARE("nvram")
381379   AM_RANGE(0x120000, 0x12007f) AM_WRITE(mcr68_paletteram_w) AM_SHARE("paletteram")
382   AM_RANGE(0x140000, 0x1407ff) AM_RAM AM_SHARE("spriteram16")
383   AM_RANGE(0x160000, 0x160fff) AM_RAM_WRITE(mcr68_videoram_w) AM_SHARE("videoram16")
380   AM_RANGE(0x140000, 0x1407ff) AM_RAM AM_SHARE("spriteram")
381   AM_RANGE(0x160000, 0x160fff) AM_RAM_WRITE(mcr68_videoram_w) AM_SHARE("videoram")
384382   AM_RANGE(0x180000, 0x18000f) AM_READWRITE(mcr68_6840_upper_r, mcr68_6840_upper_w)
385383   AM_RANGE(0x1a0000, 0x1affff) AM_WRITE(archrivl_control_w)
386384   AM_RANGE(0x1c0000, 0x1cffff) AM_WRITE(watchdog_reset16_w)
r14963r14964
991989   MCFG_VIDEO_START(zwackery)
992990
993991   /* sound hardware */
994   MCFG_FRAGMENT_ADD(chip_squeak_deluxe)
992   MCFG_SPEAKER_STANDARD_MONO("mono")
993   MCFG_MIDWAY_CHIP_SQUEAK_DELUXE_ADD("csd")
994   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
995995MACHINE_CONFIG_END
996996
997997
r14963r14964
10201020   MCFG_VIDEO_START(mcr68)
10211021
10221022   /* sound hardware -- determined by specific machine */
1023   MCFG_SPEAKER_STANDARD_MONO("mono")
10231024MACHINE_CONFIG_END
10241025
10251026
10261027static MACHINE_CONFIG_DERIVED( xenophob, mcr68 )
10271028
10281029   /* basic machine hardware */
1029   MCFG_FRAGMENT_ADD(sounds_good)
1030   MCFG_MIDWAY_SOUNDS_GOOD_ADD("sg")
1031   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
10301032MACHINE_CONFIG_END
10311033
10321034static MACHINE_CONFIG_DERIVED( intlaser, mcr68 )
10331035
10341036   /* basic machine hardware */
1035   MCFG_FRAGMENT_ADD(sounds_good)
1037   MCFG_MIDWAY_SOUNDS_GOOD_ADD("sg")
1038   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
10361039
10371040   MCFG_WATCHDOG_VBLANK_INIT(800)
10381041MACHINE_CONFIG_END
r14963r14964
10411044static MACHINE_CONFIG_DERIVED( spyhunt2, mcr68 )
10421045
10431046   /* basic machine hardware */
1044   MCFG_FRAGMENT_ADD(sounds_good)
1045   MCFG_DEVICE_REMOVE("mono")
1046   MCFG_FRAGMENT_ADD(turbo_chip_squeak)
1047   MCFG_MIDWAY_SOUNDS_GOOD_ADD("sg")
1048   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
1049   MCFG_MIDWAY_TURBO_CHIP_SQUEAK_ADD("tcs")
1050   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
10471051MACHINE_CONFIG_END
10481052
10491053
10501054static MACHINE_CONFIG_DERIVED( archrivl, mcr68 )
10511055
10521056   /* basic machine hardware */
1053   MCFG_FRAGMENT_ADD(williams_cvsd_sound)
1057   MCFG_WILLIAMS_CVSD_SOUND_ADD("cvsd")
1058   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
10541059MACHINE_CONFIG_END
10551060
10561061
10571062static MACHINE_CONFIG_DERIVED( pigskin, mcr68 )
10581063
10591064   /* basic machine hardware */
1060   MCFG_FRAGMENT_ADD(williams_cvsd_sound)
1065   MCFG_WILLIAMS_CVSD_SOUND_ADD("cvsd")
1066   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
10611067
10621068   MCFG_CPU_MODIFY("maincpu")
10631069   MCFG_CPU_PROGRAM_MAP(pigskin_map)
r14963r14964
10671073static MACHINE_CONFIG_DERIVED( trisport, mcr68 )
10681074
10691075   /* basic machine hardware */
1070   MCFG_FRAGMENT_ADD(williams_cvsd_sound)
1076   MCFG_WILLIAMS_CVSD_SOUND_ADD("cvsd")
1077   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
10711078
10721079   MCFG_CPU_MODIFY("maincpu")
10731080   MCFG_CPU_PROGRAM_MAP(trisport_map)
r14963r14964
11001107   ROM_LOAD16_BYTE( "pro12.bin",  0x30000, 0x4000, CRC(e2d25e1f) SHA1(5d8ff303441eccf431422b453a173983a4513630) )
11011108   ROM_LOAD16_BYTE( "pro13.bin",  0x30001, 0x4000, CRC(e131f9b8) SHA1(08b131f2acc84d4c2c931bfd24e7de3d92a8a817) )
11021109
1103   ROM_REGION( 0x20000, "csdcpu", 0 )
1110   ROM_REGION( 0x20000, "csd:cpu", 0 )
11041111   ROM_LOAD16_BYTE( "csd7.bin",  0x00000, 0x2000, CRC(5501f54b) SHA1(84c0851fb868e81400cfe3ebfd7b91fe98a47bac) )
11051112   ROM_LOAD16_BYTE( "csd17.bin", 0x00001, 0x2000, CRC(2e482580) SHA1(92bd3e64ff580800ee16579d97bcb8b3bd9f755c) )
11061113   ROM_LOAD16_BYTE( "csd8.bin",  0x04000, 0x2000, CRC(13366575) SHA1(bcf25a7d4c6b2ccd7cd9978edafc66ef0cadfe72) )
r14963r14964
11581165   ROM_LOAD16_BYTE( "xeno_pro.2c",  0x20000, 0x10000, CRC(e45bf669) SHA1(52b0ffd2311e4d300410de57fbddacab4b9857a1) )
11591166   ROM_LOAD16_BYTE( "xeno_pro.2b",  0x20001, 0x10000, CRC(da5d39d5) SHA1(f61b239eb3108faec2f3dbb8139c8d01b0e29873) )
11601167
1161   ROM_REGION( 0x40000, "sgcpu", 0 )  /* Sounds Good board */
1168   ROM_REGION( 0x40000, "sg:cpu", 0 )  /* Sounds Good board */
11621169   ROM_LOAD16_BYTE( "xeno_snd.u7",  0x00000, 0x10000, CRC(77561d15) SHA1(8c23a9270d54be6380f2d23939b6c6d8c31e334b) )
11631170   ROM_LOAD16_BYTE( "xeno_snd.u17", 0x00001, 0x10000, CRC(837a1a71) SHA1(d7d60ef1fd11e5e84dd1ffb9a077686bd2fb452e) )
11641171   ROM_LOAD16_BYTE( "xeno_snd.u8",  0x20000, 0x10000, CRC(6e2915c7) SHA1(df1f35f6b743afbab0a3a29adce3639a8c9dc66f) )
r14963r14964
12021209   ROM_LOAD16_BYTE( "sh22c.bin",  0x20000, 0x10000, CRC(8ee65009) SHA1(6adb00888f739b59e3ace1a6eaf1c58c4583d7fd) )
12031210   ROM_LOAD16_BYTE( "sh22b.bin",  0x20001, 0x10000, CRC(850c21ad) SHA1(3b944545cb469e2c53166a91eb2834c5f3891ddf) )
12041211
1205   ROM_REGION( 0x10000, "tcscpu", 0 )  /* 64k for the Turbo Cheap Squeak */
1212   ROM_REGION( 0x10000, "tcs:cpu", 0 )  /* 64k for the Turbo Cheap Squeak */
12061213   ROM_LOAD( "turbo-cs.u5", 0x08000, 0x4000, CRC(4b1d8a66) SHA1(a1a2f9fe3fc42b668ec97ad6c6ea6032f1dc0695) )
12071214   ROM_LOAD( "turbo-cs.u4", 0x0c000, 0x4000, CRC(3722ce48) SHA1(ae064be590c067bda66ca7a72c212ad47f3eb1c5) )
12081215
1209   ROM_REGION( 0x40000, "sgcpu", 0 )  /* Sounds Good board */
1216   ROM_REGION( 0x40000, "sg:cpu", 0 )  /* Sounds Good board */
12101217   ROM_LOAD16_BYTE( "sh2u7.bin",  0x00000, 0x10000, CRC(02362ea4) SHA1(2d37f06c9156554b8140ed565f6fdd1ef67bb54f) )
12111218   ROM_LOAD16_BYTE( "sh2u17.bin", 0x00001, 0x10000, CRC(e29a2c37) SHA1(e0d4df90b533d3325c905d42ddc6876667f32c82) )
12121219
r14963r14964
12391246   ROM_LOAD16_BYTE( "2c",  0x20000, 0x10000, CRC(bc834f3f) SHA1(05f6ab508ce2ebe55665e97114070e9d81db48c8) )
12401247   ROM_LOAD16_BYTE( "2b",  0x20001, 0x10000, CRC(8a9f7ef3) SHA1(353ebb0a3782c183cc9be800584903e23ca507d9) )
12411248
1242   ROM_REGION( 0x10000, "tcscpu", 0 )  /* 64k for the Turbo Cheap Squeak */
1249   ROM_REGION( 0x10000, "tcs:cpu", 0 )  /* 64k for the Turbo Cheap Squeak */
12431250   ROM_LOAD( "turbo-cs.u5", 0x08000, 0x4000, CRC(4b1d8a66) SHA1(a1a2f9fe3fc42b668ec97ad6c6ea6032f1dc0695) )
12441251   ROM_LOAD( "turbo-cs.u4", 0x0c000, 0x4000, CRC(3722ce48) SHA1(ae064be590c067bda66ca7a72c212ad47f3eb1c5) )
12451252
1246   ROM_REGION( 0x40000, "sgcpu", 0 )  /* Sounds Good board */
1253   ROM_REGION( 0x40000, "sg:cpu", 0 )  /* Sounds Good board */
12471254   ROM_LOAD16_BYTE( "sh2u7.bin",  0x00000, 0x10000, CRC(02362ea4) SHA1(2d37f06c9156554b8140ed565f6fdd1ef67bb54f) )
12481255   ROM_LOAD16_BYTE( "sh2u17.bin", 0x00001, 0x10000, CRC(e29a2c37) SHA1(e0d4df90b533d3325c905d42ddc6876667f32c82) )
12491256
r14963r14964
12761283   ROM_LOAD16_BYTE( "2c",  0x20000, 0x10000, CRC(026f30bf) SHA1(de327ab5bd4dc9456fa5a91f3ccd293b3ab8c5c2) )
12771284   ROM_LOAD16_BYTE( "2b",  0x20001, 0x10000, CRC(8e0e91a9) SHA1(2dc2927a1fd552ead446606a902a2ba0c4595798) )
12781285
1279   ROM_REGION( 0x40000, "sgcpu", 0 )  /* Sounds Good board */
1286   ROM_REGION( 0x40000, "sg:cpu", 0 )  /* Sounds Good board */
12801287   ROM_LOAD16_BYTE( "blasted.u7",  0x00000, 0x10000, CRC(8d7c8ef6) SHA1(a414e91c20202f800f3e01e4c430e3f99e3df5bb) )
12811288   ROM_LOAD16_BYTE( "blasted.u17", 0x00001, 0x10000, CRC(c79040b9) SHA1(e6fa173ff5fb681ddfef831f1ef237a7c4303f32) )
12821289   ROM_LOAD16_BYTE( "blasted.u8",  0x20000, 0x10000, CRC(c53094c0) SHA1(8c54cefe8030bf18b9585008a4a6cf8a7dc23f71) )
r14963r14964
13101317   ROM_LOAD16_BYTE( "2c.bin",  0x20000, 0x10000, CRC(d2cca853) SHA1(69e4ee8203c6dda7b4ec97c247fbcdc9fdc9ff8d) )
13111318   ROM_LOAD16_BYTE( "2b.bin",  0x20001, 0x10000, CRC(3802cfe2) SHA1(d10c802500bae14acc3230ca34c2d1806b68ce4a) )
13121319
1313   ROM_REGION( 0x40000, "sgcpu", 0 )  /* Sounds Good board */
1320   ROM_REGION( 0x40000, "sg:cpu", 0 )  /* Sounds Good board */
13141321   ROM_LOAD16_BYTE( "u7.bin",  0x00000, 0x10000, CRC(19ad1e45) SHA1(838ad7304248690d3fdf9e4edf3856936bf36d42) )
13151322   ROM_LOAD16_BYTE( "u17.bin", 0x00001, 0x10000, CRC(d6118949) SHA1(9e059f28d9eb8dee10301662a65588cffaf6fd16) )
13161323   ROM_LOAD16_BYTE( "u8.bin",  0x20000, 0x10000, CRC(d6cc99aa) SHA1(b970d6e87778959cf7322158b8df26c5028e3f45) )
r14963r14964
13451352   ROM_LOAD16_BYTE( "2c-rev2",  0x20000, 0x10000, CRC(cc2893f7) SHA1(44931299cb98e27ac2f11b3922da76895fbfe0a7) )
13461353   ROM_LOAD16_BYTE( "2b-rev2",  0x20001, 0x10000, CRC(fa977050) SHA1(67c66995da755401162f7e668b97eb42ac769ec0) )
13471354
1348   ROM_REGION( 0x90000, "cvsdcpu", 0 )  /* Audio System board */
1355   ROM_REGION( 0x90000, "cvsd:cpu", 0 )  /* Audio System board */
13491356   ROM_LOAD( "u4.snd",  0x10000, 0x08000, CRC(96b3c652) SHA1(1bb576d0bf6b6b8df24e7b9352a33e97dd8ebdcb) )
13501357   ROM_RELOAD(          0x18000, 0x08000 )
13511358   ROM_RELOAD(          0x20000, 0x08000 )
r14963r14964
13921399   ROM_LOAD16_BYTE( "archrivl.3",  0x20000, 0x10000, CRC(d6d08ff7) SHA1(bbbd4b5c3218c9bb461b17e536191d40ab39f67c) )
13931400   ROM_LOAD16_BYTE( "archrivl.1",  0x20001, 0x10000, CRC(92f3a43d) SHA1(45fdcbacd65f5898d54cc2ac95639b7ee2c097e6) )
13941401
1395   ROM_REGION( 0x90000, "cvsdcpu", 0 )  /* Audio System board */
1402   ROM_REGION( 0x90000, "cvsd:cpu", 0 )  /* Audio System board */
13961403   ROM_LOAD( "u4.snd",  0x10000, 0x08000, CRC(96b3c652) SHA1(1bb576d0bf6b6b8df24e7b9352a33e97dd8ebdcb) )
13971404   ROM_RELOAD(          0x18000, 0x08000 )
13981405   ROM_RELOAD(          0x20000, 0x08000 )
r14963r14964
14391446   ROM_LOAD16_BYTE( "pigskin-k_la1.a6",  0x20000, 0x10000, CRC(4d8b7e50) SHA1(9e5d0edf1603e11f22d3129a2b8865ebcb5e27f9) )
14401447   ROM_LOAD16_BYTE( "pigskin-k_la1.b6",  0x20001, 0x10000, CRC(1194f187) SHA1(e7cebe5322a5c8e382b6773939be5bc88492f289) )
14411448
1442   ROM_REGION( 0x90000, "cvsdcpu", 0 )  /* Audio System board */
1449   ROM_REGION( 0x90000, "cvsd:cpu", 0 )  /* Audio System board */
14431450   ROM_LOAD( "pigskin_sl1.u4",  0x10000, 0x10000, CRC(6daf2d37) SHA1(4c8098520fe44e36b01389bcfcfe3ad1d027cbde) )
14441451   ROM_RELOAD(                  0x20000, 0x10000 )
14451452   ROM_LOAD( "pigskin_sl1.u19", 0x30000, 0x10000, CRC(56fd16a3) SHA1(b91aabdbd3185355f2b7177fc4d3a86fa110f51d) )
r14963r14964
14661473   ROM_LOAD16_BYTE( "pigskin_la2.a6",  0x20000, 0x10000, CRC(2fc91002) SHA1(64d270b78c69d3f4fb36d1233a1632d6ba3d87a5) )
14671474   ROM_LOAD16_BYTE( "pigskin_la2.b6",  0x20001, 0x10000, CRC(0b93dc66) SHA1(f3b516a1d1e4abd7b0d56243949e9cd7ac79178b) )
14681475
1469   ROM_REGION( 0x90000, "cvsdcpu", 0 )  /* Audio System board */
1476   ROM_REGION( 0x90000, "cvsd:cpu", 0 )  /* Audio System board */
14701477   ROM_LOAD( "pigskin_sl1.u4",  0x10000, 0x10000, CRC(6daf2d37) SHA1(4c8098520fe44e36b01389bcfcfe3ad1d027cbde) )
14711478   ROM_RELOAD(                  0x20000, 0x10000 )
14721479   ROM_LOAD( "pigskin_sl1.u19", 0x30000, 0x10000, CRC(56fd16a3) SHA1(b91aabdbd3185355f2b7177fc4d3a86fa110f51d) )
r14963r14964
14931500   ROM_LOAD16_BYTE( "la3.a6",  0x20000, 0x10000, CRC(9c6a1398) SHA1(ee115d9207f3a9034b7c9eccd2ff151d9c923c9a) )
14941501   ROM_LOAD16_BYTE( "la3.b6",  0x20001, 0x10000, CRC(597b564c) SHA1(090da3ec0c86035cc41a9caea182b8a5419c3be9) )
14951502
1496   ROM_REGION( 0x90000, "cvsdcpu", 0 )  /* Audio System board */
1503   ROM_REGION( 0x90000, "cvsd:cpu", 0 )  /* Audio System board */
14971504   ROM_LOAD( "sl1-snd.u4",  0x10000, 0x10000, CRC(0ed8c904) SHA1(21292a001c4c44f87b8782c706e5c346b767cd6b) )
14981505   ROM_RELOAD(              0x20000, 0x10000 )
14991506   ROM_LOAD( "sl1-snd.u19", 0x30000, 0x10000, CRC(b57d7d7e) SHA1(483f718f1cc4549baf5696935532d30803254a19) )
r14963r14964
15361543 *
15371544 *************************************/
15381545
1539static void mcr68_common_init(running_machine &machine, int sound_board, int clip, int xoffset)
1546static void mcr68_common_init(running_machine &machine, int clip, int xoffset)
15401547{
15411548   mcr68_state *state = machine.driver_data<mcr68_state>();
1542   mcr_sound_init(machine, sound_board);
15431549
15441550   state->m_sprite_clip = clip;
15451551   state->m_sprite_xoffset = xoffset;
r14963r14964
15511557static DRIVER_INIT( zwackery )
15521558{
15531559   mcr68_state *state = machine.driver_data<mcr68_state>();
1554   mcr68_common_init(machine, MCR_CHIP_SQUEAK_DELUXE, 0, 0);
1560   mcr68_common_init(machine, 0, 0);
15551561
15561562   /* Zwackery doesn't care too much about this value; currently taken from Blasted */
15571563   state->m_timing_factor = attotime::from_hz(machine.device("maincpu")->unscaled_clock() / 10) * (256 + 16);
r14963r14964
15611567static DRIVER_INIT( xenophob )
15621568{
15631569   mcr68_state *state = machine.driver_data<mcr68_state>();
1564   mcr68_common_init(machine, MCR_SOUNDS_GOOD, 0, -4);
1570   mcr68_common_init(machine, 0, -4);
15651571
15661572   /* Xenophobe doesn't care too much about this value; currently taken from Blasted */
15671573   state->m_timing_factor = attotime::from_hz(machine.device("maincpu")->unscaled_clock() / 10) * (256 + 16);
r14963r14964
15741580static DRIVER_INIT( spyhunt2 )
15751581{
15761582   mcr68_state *state = machine.driver_data<mcr68_state>();
1577   mcr68_common_init(machine, MCR_TURBO_CHIP_SQUEAK | MCR_SOUNDS_GOOD, 0, -6);
1583   mcr68_common_init(machine, 0, -6);
15781584
15791585   /* Spy Hunter 2 doesn't care too much about this value; currently taken from Blasted */
15801586   state->m_timing_factor = attotime::from_hz(machine.device("maincpu")->unscaled_clock() / 10) * (256 + 16);
r14963r14964
15891595static DRIVER_INIT( blasted )
15901596{
15911597   mcr68_state *state = machine.driver_data<mcr68_state>();
1592   mcr68_common_init(machine, MCR_SOUNDS_GOOD, 0, 0);
1598   mcr68_common_init(machine, 0, 0);
15931599
15941600   /* Blasted checks the timing of VBLANK relative to the 493 interrupt */
15951601   /* VBLANK is required to come within 220-256 E clocks (i.e., 2200-2560 CPU clocks) */
r14963r14964
16061612static DRIVER_INIT( intlaser )
16071613{
16081614   mcr68_state *state = machine.driver_data<mcr68_state>();
1609   mcr68_common_init(machine, MCR_SOUNDS_GOOD, 0, 0);
1615   mcr68_common_init(machine, 0, 0);
16101616
16111617   /* Copied from Blasted */
16121618   state->m_timing_factor = attotime::from_hz(machine.device("maincpu")->unscaled_clock() / 10) * (256 + 16);
r14963r14964
16211627static DRIVER_INIT( archrivl )
16221628{
16231629   mcr68_state *state = machine.driver_data<mcr68_state>();
1624   mcr68_common_init(machine, MCR_WILLIAMS_SOUND, 16, 0);
1630   mcr68_common_init(machine, 16, 0);
16251631
16261632   /* Arch Rivals doesn't care too much about this value; currently taken from Blasted */
16271633   state->m_timing_factor = attotime::from_hz(machine.device("maincpu")->unscaled_clock() / 10) * (256 + 16);
r14963r14964
16401646static DRIVER_INIT( pigskin )
16411647{
16421648   mcr68_state *state = machine.driver_data<mcr68_state>();
1643   mcr68_common_init(machine, MCR_WILLIAMS_SOUND, 16, 0);
1649   mcr68_common_init(machine, 16, 0);
16441650
16451651   /* Pigskin doesn't care too much about this value; currently taken from Tri-Sports */
16461652   state->m_timing_factor = attotime::from_hz(machine.device("maincpu")->unscaled_clock() / 10) * 115;
r14963r14964
16521658static DRIVER_INIT( trisport )
16531659{
16541660   mcr68_state *state = machine.driver_data<mcr68_state>();
1655   mcr68_common_init(machine, MCR_WILLIAMS_SOUND, 0, 0);
1661   mcr68_common_init(machine, 0, 0);
16561662
16571663   /* Tri-Sports checks the timing of VBLANK relative to the 493 interrupt */
16581664   /* VBLANK is required to come within 87-119 E clocks (i.e., 870-1190 CPU clocks) */
src/mame/drivers/tecmo16.c
r14963r14964
368368
369369static const ym2151_interface ym2151_config =
370370{
371   irqhandler
371   DEVCB_LINE(irqhandler)
372372};
373373
374374/******************************************************************************/
src/mame/drivers/rastan.c
r14963r14964
346346
347347static const ym2151_interface ym2151_config =
348348{
349   irqhandler,
350   rastan_bankswitch_w
349   DEVCB_LINE(irqhandler),
350   DEVCB_HANDLER(rastan_bankswitch_w)
351351};
352352
353353static const msm5205_interface msm5205_config =
src/mame/drivers/dlair.c
r14963r14964
9797   optional_device<pioneer_ldv1000_device> m_ldv1000;
9898   optional_device<pioneer_pr7820_device> m_pr7820;
9999   optional_device<phillips_22vp932_device> m_22vp932;
100   required_shared_ptr<UINT8> m_videoram;
100   optional_shared_ptr<UINT8> m_videoram;
101101   UINT8 m_last_misc;
102102   UINT8 m_laserdisc_data;
103103   DECLARE_WRITE8_MEMBER(misc_w);
src/mame/drivers/segas24.c
r14963r14964
19331933
19341934static const ym2151_interface ym2151_config =
19351935{
1936   irq_ym
1936   DEVCB_LINE(irq_ym)
19371937};
19381938
19391939
src/mame/drivers/mugsmash.c
r14963r14964
396396
397397static const ym2151_interface ym2151_config =
398398{
399   irq_handler
399   DEVCB_LINE(irq_handler)
400400};
401401
402402static MACHINE_START( mugsmash )
src/mame/drivers/hng64.c
r14963r14964
10901090#define KL5C_MMU_A(xxx) ( (xxx == 0) ? 0x0000 : (state->m_com_mmu_mem[((xxx-1)*2)+1] << 2) | ((state->m_com_mmu_mem[(xxx-1)*2] & 0xc0) >> 6) )
10911091#define KL5C_MMU_B(xxx) ( (xxx == 0) ? 0x0000 : (state->m_com_mmu_mem[(xxx-1)*2] & 0x3f) )
10921092
1093DIRECT_UPDATE_HANDLER( KL5C80_direct_handler )
1093DIRECT_UPDATE_MEMBER(hng64_state::KL5C80_direct_handler)
10941094{
1095   hng64_state *state = machine.driver_data<hng64_state>();
1096
1097   direct.explicit_configure(0x0000, 0xffff, 0xffff, state->m_com_op_base);
1095   direct.explicit_configure(0x0000, 0xffff, 0xffff, m_com_op_base);
10981096   return ~0;
10991097}
11001098
r14963r14964
16821680   KL5C80_virtual_mem_sync(state);
16831681
16841682   address_space *space = machine.device<z80_device>("comm")->space(AS_PROGRAM);
1685   space->set_direct_update_handler(direct_update_delegate(FUNC(KL5C80_direct_handler), &machine));
1683   space->set_direct_update_handler(direct_update_delegate(FUNC(hng64_state::KL5C80_direct_handler), state));
16861684
16871685   cputag_set_input_line(machine, "comm", INPUT_LINE_RESET, PULSE_LINE);     // reset the CPU and let 'er rip
16881686//  cputag_set_input_line(machine, "comm", INPUT_LINE_HALT, ASSERT_LINE);     // hold on there pardner...
src/mame/drivers/cabal.c
r14963r14964
464464
465465static const ym2151_interface cabalbl_ym2151_interface =
466466{
467   irqhandler
467   DEVCB_LINE(irqhandler)
468468};
469469
470470static const msm5205_interface msm5205_interface_1 =
src/mame/drivers/m107.c
r14963r14964
761761
762762static const ym2151_interface ym2151_config =
763763{
764   sound_irq
764   DEVCB_LINE(sound_irq)
765765};
766766
767767/***************************************************************************/
src/mame/drivers/ninjaw.c
r14963r14964
430430   AM_RANGE(0x210000, 0x210001) AM_WRITE(cpua_ctrl_w)
431431   AM_RANGE(0x220000, 0x220003) AM_READWRITE(ninjaw_sound_r,ninjaw_sound_w)
432432   AM_RANGE(0x240000, 0x24ffff) AM_RAM AM_SHARE("share1")
433   AM_RANGE(0x260000, 0x263fff) AM_RAM AM_SHARE("share2") AM_SHARE("spriteram")
433   AM_RANGE(0x260000, 0x263fff) AM_RAM AM_SHARE("spriteram")
434434   AM_RANGE(0x280000, 0x293fff) AM_DEVREAD_LEGACY("tc0100scn_1", tc0100scn_word_r) AM_WRITE(tc0100scn_triple_screen_w)   /* tilemaps (1st screen/all screens) */
435435   AM_RANGE(0x2a0000, 0x2a000f) AM_DEVREADWRITE_LEGACY("tc0100scn_1", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
436436   AM_RANGE(0x2c0000, 0x2d3fff) AM_DEVREADWRITE_LEGACY("tc0100scn_2", tc0100scn_word_r, tc0100scn_word_w)      /* tilemaps (2nd screen) */
r14963r14964
484484   AM_RANGE(0x200000, 0x200001) AM_DEVREADWRITE8_LEGACY("tc0220ioc", tc0220ioc_portreg_r, tc0220ioc_portreg_w, 0x00ff)
485485   AM_RANGE(0x200002, 0x200003) AM_DEVREADWRITE8_LEGACY("tc0220ioc", tc0220ioc_port_r, tc0220ioc_port_w, 0x00ff)
486486   AM_RANGE(0x240000, 0x24ffff) AM_RAM AM_SHARE("share1")
487   AM_RANGE(0x260000, 0x263fff) AM_RAM AM_SHARE("share2")
487   AM_RANGE(0x260000, 0x263fff) AM_RAM AM_SHARE("spriteram")
488488   AM_RANGE(0x280000, 0x293fff) AM_DEVREAD_LEGACY("tc0100scn_1", tc0100scn_word_r) AM_WRITE(tc0100scn_triple_screen_w)   /* tilemaps (1st screen/all screens) */
489489ADDRESS_MAP_END
490490
src/mame/drivers/megasys1.c
r14963r14964
14521452
14531453static const ym2151_interface ym2151_config =
14541454{
1455   megasys1_sound_irq
1455   DEVCB_LINE(megasys1_sound_irq)
14561456};
14571457
14581458static MACHINE_CONFIG_START( system_A, megasys1_state )
src/mame/drivers/srmp6.c
r14963r14964
157157   srmp6_state *state = machine.driver_data<srmp6_state>();
158158
159159   state->m_tileram = auto_alloc_array_clear(machine, UINT16, 0x100000*16/2);
160   //state->m_dmaram = auto_alloc_array(machine, UINT16, 0x100/2);
160   state->m_dmaram.allocate(0x100/2);
161161   state->m_sprram_old = auto_alloc_array_clear(machine, UINT16, 0x80000/2);
162162
163163   /* create the char set (gfx will then be updated dynamically from RAM) */
src/mame/drivers/sf.c
r14963r14964
794794
795795static const ym2151_interface ym2151_config =
796796{
797   irq_handler
797   DEVCB_LINE(irq_handler)
798798};
799799
800800static const msm5205_interface msm5205_config =
src/mame/drivers/cave.c
r14963r14964
18281828
18291829static const ym2151_interface ym2151_config =
18301830{
1831   irqhandler
1831   DEVCB_LINE(irqhandler)
18321832};
18331833
18341834static const ym2203_interface ym2203_config =
src/mame/drivers/williams.c
r14963r14964
493493#include "sound/hc55516.h"
494494#include "machine/6821pia.h"
495495#include "machine/ticket.h"
496#include "audio/williams.h"
497496#include "includes/williams.h"
498497#include "machine/nvram.h"
499498
r14963r14964
16941693static MACHINE_CONFIG_DERIVED( joust2, williams2 )
16951694
16961695   /* basic machine hardware */
1697   MCFG_DEVICE_REMOVE("mono")
1698   MCFG_FRAGMENT_ADD(williams_cvsd_sound)
1696   MCFG_WILLIAMS_CVSD_SOUND_ADD("cvsd")
1697   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
16991698
17001699   MCFG_MACHINE_START(joust2)
17011700   MCFG_MACHINE_RESET(joust2)
r14963r14964
26782677   ROM_LOAD( "ic08_r1.cpu", 0x0E000, 0x2000, CRC(84517c3c) SHA1(de0b6473953783c091ddcc7aaa89fc1ec3b9d378) )   /* IC08 ROM08 */
26792678
26802679   /* sound board */
2681   ROM_REGION( 0x90000, "cvsdcpu", 0 )
2680   ROM_REGION( 0x90000, "cvsd:cpu", 0 )
26822681   ROM_LOAD( "u04_r1.snd", 0x10000, 0x8000, CRC(3af6b47d) SHA1(aff19d65a4d9c249dec6a9e04a4066fada0f8fa1) )   /* IC04 ROM23 */
26832682   ROM_RELOAD(             0x18000, 0x8000 )
26842683   ROM_RELOAD(             0x20000, 0x8000 )
src/mame/drivers/rabbit.c
r14963r14964
2525
2626- raster effects (rabbit only?, see left side of one of the levels in rabbit)
2727- clean up zoom code and make zoom effect more accurate
28- sound (adpcm of some kind)
2928- status bar in rabbit is the wrong colour, timing of blitter / interrupts?
3029
3130Notes:
src/mame/drivers/crimfght.c
r14963r14964
220220
221221static const ym2151_interface ym2151_config =
222222{
223   0,
224   crimfght_snd_bankswitch_w
223   DEVCB_NULL,
224   DEVCB_HANDLER(crimfght_snd_bankswitch_w)
225225};
226226
227227static void volume_callback( device_t *device, int v )
src/mame/drivers/asuka.c
r14963r14964
781781
782782static const ym2151_interface ym2151_config =
783783{
784   irq_handler,
785   sound_bankswitch_2151_w
784   DEVCB_LINE(irq_handler),
785   DEVCB_HANDLER(sound_bankswitch_2151_w)
786786};
787787
788788static const msm5205_interface msm5205_config =
src/mame/drivers/shisen.c
r14963r14964
204204
205205static const ym2151_interface ym2151_config =
206206{
207   m72_ym2151_irq_handler
207   DEVCB_LINE(m72_ym2151_irq_handler)
208208};
209209
210210
src/mame/drivers/nmk16.c
r14963r14964
48054805
48064806static const ym2151_interface afega_ym2151_intf =
48074807{
4808   irq_handler
4808   DEVCB_LINE(irq_handler)
48094809};
48104810
48114811
src/osd/windows/windows.mak
r14963r14964
160160# disable better packing warning
161161CPPONLYFLAGS += /wd4371
162162
163# disable side effects warning in STL headers
164CPPONLYFLAGS += /wd4548
165 
163166# disable macro redefinition warning
164167CCOMFLAGS += /wd4005
165168
src/emu/sound/i5000.c
r14963r14964
77    16-channel ADPCM player.
88
99    TODO:
10    - improve volume balance (is it really linear?)
1110    - verify that ADPCM is the same as standard OKI ADPCM
11    - verify volume balance
12    - sample command 0x0007
13    - any more sound formats than 3-bit and 4-bit ADPCM?
1214
1315***************************************************************************/
1416
r14963r14964
2830
2931void i5000snd_device::device_start()
3032{
33   // fill volume table
34   double div = 1.032;
35   double vol = 2047.0;
36   for (int i = 0; i < 0x100; i++)
37   {
38      m_lut_volume[i] = vol + 0.5;
39      vol /= div;
40   }
41   m_lut_volume[0xff] = 0;
42   
3143   // create the stream
3244   m_stream = machine().sound().stream_alloc(*this, 0, 2, clock() / 0x400, this);
3345
r14963r14964
113125         
114126         adpcm_data = m_channels[ch].m_adpcm.clock(adpcm_data & m_channels[ch].shift_mask);
115127         
116         m_channels[ch].output_r = adpcm_data * m_channels[ch].vol_r;
117         m_channels[ch].output_l = adpcm_data * m_channels[ch].vol_l;
128         m_channels[ch].output_r = adpcm_data * m_channels[ch].vol_r / 128;
129         m_channels[ch].output_l = adpcm_data * m_channels[ch].vol_l / 128;
118130         mix_r += m_channels[ch].output_r;
119131         mix_l += m_channels[ch].output_l;
120132      }
121133     
122      outputs[0][i] = mix_r / (16*8);
123      outputs[1][i] = mix_l / (16*8);
134      outputs[0][i] = mix_r / 16;
135      outputs[1][i] = mix_l / 16;
124136   }
125137}
126138
r14963r14964
142154
143155         // 3: left/right volume
144156         case 3:
145            m_channels[ch].vol_r = ~data & 0xff;
146            m_channels[ch].vol_l = ~data >> 8 & 0xff;
157            m_channels[ch].vol_r = m_lut_volume[data & 0xff];
158            m_channels[ch].vol_l = m_lut_volume[data >> 8 & 0xff];
147159            break;
148160         
149161         default:
r14963r14964
178190                     // 3-bit ADPCM
179191                     case 0x0104:
180192                     case 0x0304: // same?
181                        m_channels[ch].freq_min = 0x100 * (4.0 / 3.0);
193                        m_channels[ch].freq_min = 0x140;
182194                        m_channels[ch].shift_amount = 3;
183195                        m_channels[ch].shift_mask = 0xe;
184196                        break;
r14963r14964
198210
199211                  m_channels[ch].freq_timer = 0;
200212                  m_channels[ch].shift_pos = 0;
201                  m_channels[ch].output_l = 0;
202                  m_channels[ch].output_r = 0;
203213                 
204214                  m_channels[ch].m_adpcm.reset();
205215                  m_channels[ch].is_playing = read_sample(ch);
src/emu/sound/i5000.h
r14963r14964
99#ifndef __I5000_H__
1010#define __I5000_H__
1111
12#include "sound/okim6295.h"
12#include "sound/okiadpcm.h"
1313
1414
1515//**************************************************************************
r14963r14964
5050    typedef struct
5151    {
5252        bool is_playing;
53       adpcm_state m_adpcm;   // 4-bit adpcm state (okim6295.h)
53       oki_adpcm_state m_adpcm;
5454
5555        UINT32 address;
5656        int freq_timer;
r14963r14964
7474    UINT16 *m_rom_base;
7575    UINT32 m_rom_mask;
7676   
77    int m_lut_volume[0x100];
78   
7779    bool read_sample(int ch);
7880    void write_reg16(UINT8 reg, UINT16 data);
7981};
src/emu/sound/okim6295.c
r14963r14964
4646// device type definition
4747const device_type OKIM6295 = &device_creator<okim6295_device>;
4848
49// ADPCM state and tables
50bool adpcm_state::s_tables_computed = false;
51const INT8 adpcm_state::s_index_shift[8] = { -1, -1, -1, -1, 2, 4, 6, 8 };
52int adpcm_state::s_diff_lookup[49*16];
53
5449// volume lookup table. The manual lists only 9 steps, ~3dB per step. Given the dB values,
5550// that seems to map to a 5-bit volume control. Any volume parameter beyond the 9th index
5651// results in silent playback.
r14963r14964
301296         {
302297            okim_voice &voice = m_voice[voicenum];
303298
304            // determine the start/stop positions
305            offs_t base = m_command * 8;
299            if (!voice.m_playing) // fixes Got-cha and Steel Force
300            {
301               // determine the start/stop positions
302               offs_t base = m_command * 8;
306303
307            offs_t start = m_direct->read_raw_byte(base + 0) << 16;
308            start |= m_direct->read_raw_byte(base + 1) << 8;
309            start |= m_direct->read_raw_byte(base + 2) << 0;
310            start &= 0x3ffff;
304               offs_t start = m_direct->read_raw_byte(base + 0) << 16;
305               start |= m_direct->read_raw_byte(base + 1) << 8;
306               start |= m_direct->read_raw_byte(base + 2) << 0;
307               start &= 0x3ffff;
311308
312            offs_t stop = m_direct->read_raw_byte(base + 3) << 16;
313            stop |= m_direct->read_raw_byte(base + 4) << 8;
314            stop |= m_direct->read_raw_byte(base + 5) << 0;
315            stop &= 0x3ffff;
309               offs_t stop = m_direct->read_raw_byte(base + 3) << 16;
310               stop |= m_direct->read_raw_byte(base + 4) << 8;
311               stop |= m_direct->read_raw_byte(base + 5) << 0;
312               stop &= 0x3ffff;
316313
317            // set up the voice to play this sample
318            if (start < stop)
319            {
320               if (!voice.m_playing) // fixes Got-cha and Steel Force
314               if (start < stop)
321315               {
316                  // set up the voice to play this sample
322317                  voice.m_playing = true;
323318                  voice.m_base_offset = start;
324319                  voice.m_sample = 0;
r14963r14964
328323                  voice.m_adpcm.reset();
329324                  voice.m_volume = s_volume_table[command & 0x0f];
330325               }
326
327               // invalid samples go here
331328               else
332                  logerror("OKIM6295:'%s' requested to play sample %02x on non-stopped voice\n",tag(),m_command);
329               {
330                  logerror("OKIM6295:'%s' requested to play invalid sample %02x\n",tag(),m_command);
331               }
333332            }
334
335            // invalid samples go here
336333            else
337334            {
338               logerror("OKIM6295:'%s' requested to play invalid sample %02x\n",tag(),m_command);
339               voice.m_playing = false;
335               logerror("OKIM6295:'%s' requested to play sample %02x on non-stopped voice\n",tag(),m_command);
340336            }
341337         }
342338
r14963r14964
422418   }
423419}
424420
425
426
427//**************************************************************************
428//  ADPCM STATE HELPER
429//**************************************************************************
430
431//-------------------------------------------------
432//  reset - reset the ADPCM state
433//-------------------------------------------------
434
435void adpcm_state::reset()
436{
437   // reset the signal/step
438   m_signal = -2;
439   m_step = 0;
440}
441
442
443//-------------------------------------------------
444//  device_clock_changed - called if the clock
445//  changes
446//-------------------------------------------------
447
448INT16 adpcm_state::clock(UINT8 nibble)
449{
450   // update the signal
451   m_signal += s_diff_lookup[m_step * 16 + (nibble & 15)];
452
453   // clamp to the maximum
454   if (m_signal > 2047)
455      m_signal = 2047;
456   else if (m_signal < -2048)
457      m_signal = -2048;
458
459   // adjust the step size and clamp
460   m_step += s_index_shift[nibble & 7];
461   if (m_step > 48)
462      m_step = 48;
463   else if (m_step < 0)
464      m_step = 0;
465
466   // return the signal
467   return m_signal;
468}
469
470
471//-------------------------------------------------
472//  compute_tables - precompute tables for faster
473//  sound generation
474//-------------------------------------------------
475
476void adpcm_state::compute_tables()
477{
478   // skip if we already did it
479   if (s_tables_computed)
480      return;
481   s_tables_computed = true;
482
483   // nibble to bit map
484   static const INT8 nbl2bit[16][4] =
485   {
486      { 1, 0, 0, 0}, { 1, 0, 0, 1}, { 1, 0, 1, 0}, { 1, 0, 1, 1},
487      { 1, 1, 0, 0}, { 1, 1, 0, 1}, { 1, 1, 1, 0}, { 1, 1, 1, 1},
488      {-1, 0, 0, 0}, {-1, 0, 0, 1}, {-1, 0, 1, 0}, {-1, 0, 1, 1},
489      {-1, 1, 0, 0}, {-1, 1, 0, 1}, {-1, 1, 1, 0}, {-1, 1, 1, 1}
490   };
491
492   // loop over all possible steps
493   for (int step = 0; step <= 48; step++)
494   {
495      // compute the step value
496      int stepval = floor(16.0 * pow(11.0 / 10.0, (double)step));
497
498      // loop over all nibbles and compute the difference
499      for (int nib = 0; nib < 16; nib++)
500      {
501         s_diff_lookup[step*16 + nib] = nbl2bit[nib][0] *
502            (stepval   * nbl2bit[nib][1] +
503             stepval/2 * nbl2bit[nib][2] +
504             stepval/4 * nbl2bit[nib][3] +
505             stepval/8);
506      }
507   }
508}
src/emu/sound/okim6295.h
r14963r14964
1111#ifndef __OKIM6295_H__
1212#define __OKIM6295_H__
1313
14#include "sound/okiadpcm.h"
1415
1516
1617
r14963r14964
4849//**************************************************************************
4950
5051
51// ======================> adpcm_state
52
53// Internal ADPCM state, used by external ADPCM generators with compatible specs to the OKIM 6295.
54class adpcm_state
55{
56public:
57   adpcm_state() { compute_tables(); reset(); }
58
59   void reset();
60   INT16 clock(UINT8 nibble);
61
62   INT32   m_signal;
63   INT32   m_step;
64
65private:
66   static const INT8 s_index_shift[8];
67   static int s_diff_lookup[49*16];
68
69   static void compute_tables();
70   static bool s_tables_computed;
71};
72
73
74
7552// ======================> okim6295_device
7653
7754class okim6295_device : public device_t,
r14963r14964
11592      okim_voice();
11693      void generate_adpcm(direct_read_data &direct, stream_sample_t *buffer, int samples);
11794
118      adpcm_state m_adpcm;         // current ADPCM state
119      bool      m_playing;
120      offs_t      m_base_offset;      // pointer to the base memory location
121      UINT32      m_sample;         // current sample number
122      UINT32      m_count;         // total samples to play
123      INT8      m_volume;         // output volume
95      oki_adpcm_state m_adpcm;      // current ADPCM state
96      bool         m_playing;
97      offs_t         m_base_offset;   // pointer to the base memory location
98      UINT32         m_sample;      // current sample number
99      UINT32         m_count;      // total samples to play
100      INT8         m_volume;      // output volume
124101   };
125102
126103   // configuration state
src/emu/sound/2151intf.c
r14963r14964
1919   emu_timer *            timer[2];
2020   void *               chip;
2121   UINT8               lastreg;
22   const ym2151_interface *intf;
22   devcb_resolved_write_line irqhandler;
23   devcb_resolved_write8 portwritehandler;
2324};
2425
2526
r14963r14964
3738   ym2151_update_one(info->chip, outputs, samples);
3839}
3940
41static void ym2151_irq_frontend(device_t *device, int irq)
42{
43   ym2151_state *info = get_safe_token(device);
44   info->irqhandler(irq);
45}
4046
47static void ym2151_port_write_frontend(device_t *device, offs_t offset, UINT8 data)
48{
49   ym2151_state *info = get_safe_token(device);
50   info->portwritehandler(offset, data);
51}
52
4153static DEVICE_START( ym2151 )
4254{
43   static const ym2151_interface dummy = { 0 };
55   static const ym2151_interface dummy = { DEVCB_NULL };
4456   ym2151_state *info = get_safe_token(device);
4557   int rate;
4658
47   info->intf = device->static_config() ? (const ym2151_interface *)device->static_config() : &dummy;
59   const ym2151_interface *intf = device->static_config() ? (const ym2151_interface *)device->static_config() : &dummy;
60   info->irqhandler.resolve(intf->irqhandler, *device);
61   info->portwritehandler.resolve(intf->portwritehandler, *device);
4862
4963   rate = device->clock()/64;
5064
r14963r14964
5468   info->chip = ym2151_init(device,device->clock(),rate);
5569   assert_always(info->chip != NULL, "Error creating YM2151 chip");
5670
57   ym2151_set_irq_handler(info->chip,info->intf->irqhandler);
58   ym2151_set_port_write_handler(info->chip,info->intf->portwritehandler);
71   ym2151_set_irq_handler(info->chip,ym2151_irq_frontend);
72   ym2151_set_port_write_handler(info->chip,ym2151_port_write_frontend);
5973}
6074
6175
src/emu/sound/2151intf.h
r14963r14964
88typedef struct _ym2151_interface ym2151_interface;
99struct _ym2151_interface
1010{
11   void (*irqhandler)(device_t *device, int irq);
12   write8_device_func portwritehandler;
11   devcb_write_line irqhandler;
12   devcb_write8 portwritehandler;
1313};
1414
1515READ8_DEVICE_HANDLER( ym2151_r );
src/emu/disound.c
r14963r14964
7171//  a new route to the device
7272//-------------------------------------------------
7373
74void device_sound_interface::static_add_route(device_t &device, UINT32 output, const char *target, double gain, UINT32 input)
74device_sound_interface::sound_route &device_sound_interface::static_add_route(device_t &device, UINT32 output, const char *target, double gain, UINT32 input, UINT32 mixoutput)
7575{
7676   // find our sound interface
7777   device_sound_interface *sound;
r14963r14964
7979      throw emu_fatalerror("MCFG_SOUND_ROUTE called on device '%s' with no sound interface", device.tag());
8080
8181   // append a new route to the list
82   sound->m_route_list.append(*global_alloc(sound_route(output, input, gain, target)));
82   return sound->m_route_list.append(*global_alloc(sound_route(output, input, gain, target, mixoutput)));
8383}
8484
8585
r14963r14964
356356//  sound_route - constructor
357357//-------------------------------------------------
358358
359device_sound_interface::sound_route::sound_route(int output, int input, float gain, const char *target)
359device_sound_interface::sound_route::sound_route(int output, int input, float gain, const char *target, UINT32 mixoutput)
360360   : m_next(NULL),
361361     m_output(output),
362362     m_input(input),
363     m_mixoutput(mixoutput),
363364     m_gain(gain),
364365     m_target(target)
365366{
r14963r14964
409410      return;
410411   }
411412
413   // generate the output map
414   m_outputmap.resize(m_auto_allocated_inputs);
415
416   // iterate through all routes that point to us and note their mixer output
417   sound_interface_iterator iter(m_device.machine().root_device());
418   for (device_sound_interface *sound = iter.first(); sound != NULL; sound = iter.next())
419      for (const sound_route *route = sound->first_route(); route != NULL; route = route->next())
420      {
421         // see if we are the target of this route
422         device_t *target_device = sound->device().siblingdevice(route->m_target);
423         if (target_device == &device() && route->m_input < m_auto_allocated_inputs)
424         {
425            int count = (route->m_output == ALL_OUTPUTS) ? sound->outputs() : 1;
426            for (int output = 0; output < count; output++)
427               m_outputmap[route->m_input + output] = route->m_mixoutput;
428         }
429      }
430
412431   // allocate the mixer stream
413432   m_mixer_stream = stream_alloc(m_auto_allocated_inputs, m_outputs, device().machine().sample_rate());
414433}
r14963r14964
435454
436455void device_mixer_interface::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples)
437456{
457   // clear output buffers
458   for (int output = 0; output < m_outputs; output++)
459      memset(outputs[output], 0, samples * sizeof(outputs[0][0]));
460
438461   // loop over samples
462   const UINT8 *outmap = &m_outputmap[0];
439463   for (int pos = 0; pos < samples; pos++)
440464   {
441      // add up all the inputs
442      INT32 sample = inputs[0][pos];
443      for (int inp = 1; inp < m_auto_allocated_inputs; inp++)
444         sample += inputs[inp][pos];
445      outputs[0][pos] = sample;
465      // for each input, add it to the appropriate output
466      for (int inp = 0; inp < m_auto_allocated_inputs; inp++)
467         outputs[outmap[inp]][pos] += inputs[inp][pos];
446468   }
447469}
src/emu/disound.h
r14963r14964
7575#define MCFG_SOUND_CONFIG(_config) \
7676   MCFG_DEVICE_CONFIG(_config)
7777
78#define MCFG_SOUND_ROUTE(_output, _target, _gain) \
79   device_sound_interface::static_add_route(*device, _output, _target, _gain); \
80
7881#define MCFG_SOUND_ROUTE_EX(_output, _target, _gain, _input) \
7982   device_sound_interface::static_add_route(*device, _output, _target, _gain, _input); \
8083
81#define MCFG_SOUND_ROUTE(_output, _target, _gain) \
82   MCFG_SOUND_ROUTE_EX(_output, _target, _gain, AUTO_ALLOC_INPUT)
83
8484#define MCFG_SOUND_ROUTES_RESET() \
8585   device_sound_interface::static_reset_routes(*device); \
8686
8787
88#define MCFG_MIXER_ROUTE(_output, _target, _gain, _mixoutput) \
89   device_sound_interface::static_add_route(*device, _output, _target, _gain, AUTO_ALLOC_INPUT, _mixoutput); \
8890
91
92
8993//**************************************************************************
9094//  TYPE DEFINITIONS
9195//**************************************************************************
r14963r14964
101105   class sound_route
102106   {
103107   public:
104      sound_route(int output, int input, float gain, const char *target);
108      sound_route(int output, int input, float gain, const char *target, UINT32 mixoutput);
105109
106110      const sound_route *next() const { return m_next; }
107111
108112      sound_route *      m_next;            // pointer to next route
109113      UINT32            m_output;         // output index, or ALL_OUTPUTS
110114      UINT32            m_input;         // target input index
115      UINT32            m_mixoutput;      // target mixer output
111116      float            m_gain;            // gain
112117      astring            m_target;         // target tag
113118   };
r14963r14964
120125   const sound_route *first_route() const { return m_route_list.first(); }
121126
122127   // static inline configuration helpers
123   static void static_add_route(device_t &device, UINT32 output, const char *target, double gain, UINT32 input = AUTO_ALLOC_INPUT);
128   static sound_route &static_add_route(device_t &device, UINT32 output, const char *target, double gain, UINT32 input = AUTO_ALLOC_INPUT, UINT32 mixoutput = 0);
124129   static void static_reset_routes(device_t &device);
125130
126131   // sound stream update overrides
r14963r14964
173178
174179   // internal state
175180   UINT8            m_outputs;            // number of outputs
181   dynamic_array<UINT8> m_outputmap;         // map of inputs to outputs
176182   sound_stream *      m_mixer_stream;         // mixing stream
177183};
178184
src/emu/device.c
r14963r14964
203203
204204
205205//-------------------------------------------------
206//  subregion - return a pointer to the memory
207//  bank info for a given bank
208//-------------------------------------------------
209
210memory_bank *device_t::subbank(const char *_tag) const
211{
212   // safety first
213   if (this == NULL)
214      return NULL;
215
216   // build a fully-qualified name and look it up
217   astring fullpath;
218   return machine().memory().bank(subtag(fullpath, _tag));
219}
220
221
222//-------------------------------------------------
206223//  static_set_clock - set/change the clock on
207224//  a device
208225//-------------------------------------------------
src/emu/device.h
r14963r14964
184184   astring &subtag(astring &dest, const char *tag) const;
185185   astring &siblingtag(astring &dest, const char *tag) const { return (this != NULL && m_owner != NULL) ? m_owner->subtag(dest, tag) : dest.cpy(tag); }
186186   const memory_region *subregion(const char *tag) const;
187   memory_bank *subbank(const char *tag) const;
187188   device_t *subdevice(const char *tag) const;
188189   device_t *siblingdevice(const char *tag) const;
189190   template<class _DeviceClass> inline _DeviceClass *subdevice(const char *tag) const { return downcast<_DeviceClass *>(subdevice(tag)); }
src/emu/memory.c
r14963r14964
15581558//**************************************************************************
15591559
15601560//-------------------------------------------------
1561//  configure_bank - configure the addresses for a
1562//  bank
1563//-------------------------------------------------
1564
1565void memory_manager::configure_bank(const char *tag, int startentry, int numentries, void *base, offs_t stride)
1566{
1567   configure_bank(machine().root_device(), tag, startentry, numentries, base, stride);
1568}
1569
1570void memory_manager::configure_bank(device_t &device, const char *tag, int startentry, int numentries, void *base, offs_t stride)
1571{
1572   // validation checks
1573   astring fulltag;
1574   memory_bank *bank = m_bankmap.find_hash_only(device.subtag(fulltag, tag));
1575   if (bank == NULL)
1576      fatalerror("configure_bank called for unknown bank '%s'", fulltag.cstr());
1577   if (base == NULL)
1578      fatalerror("configure_bank called NULL base");
1579
1580   // fill in the requested bank entries (backwards to improve allocation)
1581   for (int entrynum = startentry + numentries - 1; entrynum >= startentry; entrynum--)
1582      bank->configure(entrynum, reinterpret_cast<UINT8 *>(base) + (entrynum - startentry) * stride);
1583}
1584
1585
1586//-------------------------------------------------
1587//  configure_bank_decrypted - configure the
1588//  decrypted addresses for a bank
1589//-------------------------------------------------
1590
1591void memory_manager::configure_bank_decrypted(const char *tag, int startentry, int numentries, void *base, offs_t stride)
1592{
1593   memory_configure_bank_decrypted(machine().root_device(), tag, startentry, numentries, base, stride);
1594}
1595
1596void memory_manager::configure_bank_decrypted(device_t &device, const char *tag, int startentry, int numentries, void *base, offs_t stride)
1597{
1598   // validation checks
1599   astring fulltag;
1600   memory_bank *bank = m_bankmap.find_hash_only(device.subtag(fulltag, tag));
1601   if (bank == NULL)
1602      fatalerror("configure_bank_decrypted called for unknown bank '%s'", fulltag.cstr());
1603   if (base == NULL)
1604      fatalerror("configure_bank_decrypted called NULL base");
1605
1606   // fill in the requested bank entries (backwards to improve allocation)
1607   for (int entrynum = startentry + numentries - 1; entrynum >= startentry; entrynum--)
1608      bank->configure_decrypted(entrynum, reinterpret_cast<UINT8 *>(base) + (entrynum - startentry) * stride);
1609}
1610
1611
1612//-------------------------------------------------
1613//  set_bank - select one pre-configured entry to
1614//  be the new bank base
1615//-------------------------------------------------
1616
1617void memory_manager::set_bank(const char *tag, int entrynum)
1618{
1619   set_bank(machine().root_device(), tag, entrynum);
1620}
1621
1622void memory_manager::set_bank(device_t &device, const char *tag, int entrynum)
1623{
1624   // validation checks
1625   astring fulltag;
1626   memory_bank *bank = m_bankmap.find_hash_only(device.subtag(fulltag, tag));
1627   if (bank == NULL)
1628      fatalerror("set_bank called for unknown bank '%s'", fulltag.cstr());
1629
1630   // set the base
1631   bank->set_entry(entrynum);
1632}
1633
1634
1635//-------------------------------------------------
1636//  get_bank - return the currently selected bank
1637//-------------------------------------------------
1638
1639int memory_manager::bank(const char *tag)
1640{
1641   return bank(machine().root_device(), tag);
1642}
1643
1644int memory_manager::bank(device_t &device, const char *tag)
1645{
1646   // validation checks
1647   astring fulltag;
1648   memory_bank *bank = m_bankmap.find_hash_only(device.subtag(fulltag, tag));
1649   if (bank == NULL)
1650      fatalerror("bank() called for unknown bank '%s'", fulltag.cstr());
1651
1652   // return the current entry
1653   return bank->entry();
1654}
1655
1656
1657//-------------------------------------------------
1658//  set_bankptr - set the base of a bank
1659//-------------------------------------------------
1660
1661void memory_manager::set_bankptr(const char *tag, void *base)
1662{
1663   set_bankptr(machine().root_device(), tag, base);
1664}
1665
1666void memory_manager::set_bankptr(device_t &device, const char *tag, void *base)
1667{
1668   // validation checks
1669   astring fulltag;
1670   memory_bank *bank = m_bankmap.find_hash_only(device.subtag(fulltag, tag));
1671   if (bank == NULL)
1672      throw emu_fatalerror("memory_set_bankptr called for unknown bank '%s'", fulltag.cstr());
1673
1674   // set the base
1675   bank->set_base(base);
1676}
1677
1678
1679//-------------------------------------------------
16801561//  shared - get a pointer to a shared memory
16811562//  region by tag
16821563//-------------------------------------------------
r14963r14964
30152896   adjust_addresses(bytestart, byteend, bytemask, bytemirror);
30162897
30172898   // if this bank is named, look it up
3018   memory_bank *bank = NULL;
2899   memory_bank *membank = NULL;
30192900   if (tag != NULL)
3020      bank = manager().m_bankmap.find_hash_only(tag);
2901      membank = manager().bank(tag);
30212902
30222903   // else try to find an exact match
30232904   else
3024      for (bank = manager().m_banklist.first(); bank != NULL; bank = bank->next())
3025         if (bank->anonymous() && bank->references_space(*this, ROW_READWRITE) && bank->matches_exactly(bytestart, byteend))
2905      for (membank = manager().m_banklist.first(); membank != NULL; membank = membank->next())
2906         if (membank->anonymous() && membank->references_space(*this, ROW_READWRITE) && membank->matches_exactly(bytestart, byteend))
30262907            break;
30272908
30282909   // if we don't have a bank yet, find a free one
3029   if (bank == NULL)
2910   if (membank == NULL)
30302911   {
30312912      // handle failure
30322913      int banknum = manager().m_banknext++;
r14963r14964
30392920      }
30402921
30412922      // allocate the bank
3042      bank = global_alloc(memory_bank(*this, banknum, bytestart, byteend, tag));
3043      manager().m_banklist.append(*bank);
2923      membank = global_alloc(memory_bank(*this, banknum, bytestart, byteend, tag));
2924      manager().m_banklist.append(*membank);
30442925
30452926      // for named banks, add to the map and register for save states
30462927      if (tag != NULL)
3047         manager().m_bankmap.add_unique_hash(tag, bank, false);
2928         manager().m_bankmap.add_unique_hash(tag, membank, false);
30482929   }
30492930
30502931   // add a reference for this space
3051   bank->add_reference(*this, readorwrite);
3052   return *bank;
2932   membank->add_reference(*this, readorwrite);
2933   return *membank;
30532934}
30542935
30552936
r14963r14964
44634344
44644345
44654346//-------------------------------------------------
4466//  configure - configure an entry
4347//  configure_entry - configure an entry
44674348//-------------------------------------------------
44684349
4469void memory_bank::configure(int entrynum, void *base)
4350void memory_bank::configure_entry(int entrynum, void *base)
44704351{
44714352   // must be positive
44724353   if (entrynum < 0)
4473      throw emu_fatalerror("memory_bank::configure called with out-of-range entry %d", entrynum);
4354      throw emu_fatalerror("memory_bank::configure_entry called with out-of-range entry %d", entrynum);
44744355
44754356   // if we haven't allocated this many entries yet, expand our array
44764357   if (entrynum >= m_entry_count)
r14963r14964
44864367
44874368
44884369//-------------------------------------------------
4489//  configure_decrypted - configure a decrypted
4490//  entry
4370//  configure_entries - configure multiple entries
44914371//-------------------------------------------------
44924372
4493void memory_bank::configure_decrypted(int entrynum, void *base)
4373void memory_bank::configure_entries(int startentry, int numentries, void *base, offs_t stride)
44944374{
4375   // fill in the requested bank entries (backwards to improve allocation)
4376   for (int entrynum = startentry + numentries - 1; entrynum >= startentry; entrynum--)
4377      configure_entry(entrynum, reinterpret_cast<UINT8 *>(base) + (entrynum - startentry) * stride);
4378}
4379
4380
4381//-------------------------------------------------
4382//  configure_decrypted_entry - configure a
4383//  decrypted entry
4384//-------------------------------------------------
4385
4386void memory_bank::configure_decrypted_entry(int entrynum, void *base)
4387{
44954388   // must be positive
44964389   if (entrynum < 0)
4497      throw emu_fatalerror("memory_bank::configure called with out-of-range entry %d", entrynum);
4390      throw emu_fatalerror("memory_bank::configure_decrypted_entry called with out-of-range entry %d", entrynum);
44984391
44994392   // if we haven't allocated this many entries yet, expand our array
45004393   if (entrynum >= m_entry_count)
r14963r14964
45094402}
45104403
45114404
4405//-------------------------------------------------
4406//  configure_decrypted_entries - configure
4407//  multiple decrypted entries
4408//-------------------------------------------------
45124409
4410void memory_bank::configure_decrypted_entries(int startentry, int numentries, void *base, offs_t stride)
4411{
4412   // fill in the requested bank entries (backwards to improve allocation)
4413   for (int entrynum = startentry + numentries - 1; entrynum >= startentry; entrynum--)
4414      configure_decrypted_entry(entrynum, reinterpret_cast<UINT8 *>(base) + (entrynum - startentry) * stride);
4415}
4416
4417
45134418//**************************************************************************
45144419//  HANDLER ENTRY
45154420//**************************************************************************
r14963r14964
56375542
56385543
56395544// configure the addresses for a bank
5640void memory_configure_bank(running_machine &machine, const char *tag, int startentry, int numentries, void *base, offs_t stride) { machine.memory().configure_bank(tag, startentry, numentries, base, stride); }
5641void memory_configure_bank(device_t &device, const char *tag, int startentry, int numentries, void *base, offs_t stride) { device.machine().memory().configure_bank(device, tag, startentry, numentries, base, stride); }
5545void memory_configure_bank(running_machine &machine, const char *tag, int startentry, int numentries, void *base, offs_t stride) { machine.root_device().subbank(tag)->configure_entries(startentry, numentries, base, stride); }
56425546
56435547// configure the decrypted addresses for a bank
5644void memory_configure_bank_decrypted(running_machine &machine, const char *tag, int startentry, int numentries, void *base, offs_t stride) { machine.memory().configure_bank_decrypted(tag, startentry, numentries, base, stride); }
5645void memory_configure_bank_decrypted(device_t &device, const char *tag, int startentry, int numentries, void *base, offs_t stride) { device.machine().memory().configure_bank_decrypted(device, tag, startentry, numentries, base, stride); }
5548void memory_configure_bank_decrypted(running_machine &machine, const char *tag, int startentry, int numentries, void *base, offs_t stride) { machine.root_device().subbank(tag)->configure_decrypted_entries(startentry, numentries, base, stride); }
56465549
56475550// select one pre-configured entry to be the new bank base
5648void memory_set_bank(running_machine &machine, const char *tag, int entrynum) { machine.memory().set_bank(tag, entrynum); }
5649void memory_set_bank(device_t &device, const char *tag, int entrynum) { device.machine().memory().set_bank(device, tag, entrynum); }
5551void memory_set_bank(running_machine &machine, const char *tag, int entrynum) { machine.root_device().subbank(tag)->set_entry(entrynum); }
56505552
56515553// set the absolute address of a bank base
5652void memory_set_bankptr(running_machine &machine, const char *tag, void *base) { machine.memory().set_bankptr(tag, base); }
5653void memory_set_bankptr(device_t &device, const char *tag, void *base) { device.machine().memory().set_bankptr(device, tag, base); }
5554void memory_set_bankptr(running_machine &machine, const char *tag, void *base) { machine.root_device().subbank(tag)->set_base(base); }
src/emu/memory.h
r14963r14964
679679   void set_base_decrypted(void *base);
680680
681681   // configure and set entries
682   void configure(int entrynum, void *base);
683   void configure_decrypted(int entrynum, void *base);
682   void configure_entry(int entrynum, void *base);
683   void configure_entries(int startentry, int numentries, void *base, offs_t stride);
684   void configure_decrypted_entry(int entrynum, void *base);
685   void configure_decrypted_entries(int startentry, int numentries, void *base, offs_t stride);
684686   void set_entry(int entrynum);
685687
686688private:
r14963r14964
753755   running_machine &machine() const { return m_machine; }
754756   address_space *first_space() const { return m_spacelist.first(); }
755757   memory_bank *first_bank() const { return m_banklist.first(); }
758   memory_bank *bank(const char *tag) const { return m_bankmap.find_hash_only(tag); }
756759
757   // configure the addresses for a bank
758   void configure_bank(const char *tag, int startentry, int numentries, void *base, offs_t stride);
759   void configure_bank(device_t &device, const char *tag, int startentry, int numentries, void *base, offs_t stride);
760
761   // configure the decrypted addresses for a bank
762   void configure_bank_decrypted(const char *tag, int startentry, int numentries, void *base, offs_t stride);
763   void configure_bank_decrypted(device_t &device, const char *tag, int startentry, int numentries, void *base, offs_t stride);
764
765   // select one pre-configured entry to be the new bank base
766   void set_bank(const char *tag, int entrynum);
767   void set_bank(device_t &device, const char *tag, int entrynum);
768
769   // return the currently selected bank
770   int bank(const char *tag);
771   int bank(device_t &device, const char *tag);
772
773   // set the absolute address of a bank base
774   void set_bankptr(const char *tag, void *base) ATTR_NONNULL(3);
775   void set_bankptr(device_t &device, const char *tag, void *base) ATTR_NONNULL(3);
776
777760   // get a pointer to a shared memory region by tag
778761   memory_share *shared(const char *tag);
779762   memory_share *shared(device_t &device, const char *tag);
r14963r14964
922905
923906// configure the addresses for a bank
924907void memory_configure_bank(running_machine &machine, const char *tag, int startentry, int numentries, void *base, offs_t stride) ATTR_NONNULL(5);
925void memory_configure_bank(device_t &device, const char *tag, int startentry, int numentries, void *base, offs_t stride) ATTR_NONNULL(5);
926908
927909// configure the decrypted addresses for a bank
928910void memory_configure_bank_decrypted(running_machine &machine, const char *tag, int startentry, int numentries, void *base, offs_t stride) ATTR_NONNULL(5);
929void memory_configure_bank_decrypted(device_t &device, const char *tag, int startentry, int numentries, void *base, offs_t stride) ATTR_NONNULL(5);
930911
931912// select one pre-configured entry to be the new bank base
932913void memory_set_bank(running_machine &machine, const char *tag, int entrynum);
933void memory_set_bank(device_t &device, const char *tag, int entrynum);
934914
935915// set the absolute address of a bank base
936916void memory_set_bankptr(running_machine &machine, const char *tag, void *base) ATTR_NONNULL(3);
937void memory_set_bankptr(device_t &device, const char *tag, void *base) ATTR_NONNULL(3);
938917
939918
940919
src/emu/diexec.c
r14963r14964
529529
530530void device_execute_interface::interface_pre_start()
531531{
532   // bind delegates
533   m_vblank_interrupt.bind_relative_to(device());
534   m_timed_interrupt.bind_relative_to(device());
535//   m_driver_irq.bind_relative_to(device());
536
532537   // fill in the initial states
533538   execute_interface_iterator iter(device().machine().root_device());
534539   int index = iter.indexof(*this);
src/emu/diexec.h
r14963r14964
123123   device_execute_interface::static_set_vblank_int(*device, _func, _tag); \
124124
125125#define MCFG_DEVICE_VBLANK_INT_DRIVER(_tag, _class, _func) \
126   device_execute_interface::static_set_vblank_int(*device, device_interrupt_delegate(&_class::_func, #_class "::" #_func, downcast<_class *>(&config.root_device())), _tag); \
126   device_execute_interface::static_set_vblank_int(*device, device_interrupt_delegate(&_class::_func, #_class "::" #_func, DEVICE_SELF_OWNER, (_class *)0), _tag); \
127127
128#define MCFG_DEVICE_VBLANK_INT_DEVICE(_devtag, _tag, _class, _func) \
129   device_execute_interface::static_set_vblank_int(*device, device_interrupt_delegate(&_class::_func, #_class "::" #_func, _devtag, (_class *)0), _tag); \
130
128131#define MCFG_DEVICE_PERIODIC_INT(_func, _rate)   \
129132   device_execute_interface::static_set_periodic_int(*device, _func, attotime::from_hz(_rate)); \
130133
131134#define MCFG_DEVICE_PERIODIC_INT_DRIVER(_class, _func, _rate) \
132   device_execute_interface::static_set_periodic_int(*device, device_interrupt_delegate(&_class::_func, #_class "::" #_func, downcast<_class *>(&config.root_device())), attotime::from_hz(_rate)); \
135   device_execute_interface::static_set_periodic_int(*device, device_interrupt_delegate(&_class::_func, #_class "::" #_func, DEVICE_SELF_OWNER, (_class *)0), attotime::from_hz(_rate)); \
133136
137#define MCFG_DEVICE_PERIODIC_INT_DEVICE(_devtag, _class, _func, _rate) \
138   device_execute_interface::static_set_periodic_int(*device, device_interrupt_delegate(&_class::_func, #_class "::" #_func, _devtag, (_class *)0), attotime::from_hz(_rate)); \
134139
135140
141
136142//**************************************************************************
137143//  TYPE DEFINITIONS
138144//**************************************************************************
r14963r14964
142148
143149
144150// interrupt callback for VBLANK and timed interrupts
145typedef delegate<void (device_t &)> device_interrupt_delegate;
151typedef device_delegate<void (device_t &)> device_interrupt_delegate;
146152typedef void (*device_interrupt_func)(device_t *device);
147153
148154// IRQ callback to be called by executing devices when an IRQ is actually taken
149typedef delegate<void (device_t &, int)> device_irq_acknowledge_delegate;
155typedef device_delegate<void (device_t &, int)> device_irq_acknowledge_delegate;
150156typedef int (*device_irq_acknowledge_callback)(device_t *device, int irqnum);
151157
152158
src/mess/machine/apple3.c
r14963r14964
4848
4949
5050
51static UINT8 apple3_profile_r(apple3_state *state, offs_t offset)
51UINT8 apple3_state::apple3_profile_r(offs_t offset)
5252{
5353   UINT8 result = 0;
5454
5555   offset %= 4;
5656   apple3_profile_statemachine();
5757
58   state->m_profile_lastaddr = offset;
58   m_profile_lastaddr = offset;
5959
6060   switch(offset)
6161   {
6262      case 1:
63         state->m_profile_gotstrobe = 1;
63         m_profile_gotstrobe = 1;
6464         apple3_profile_statemachine();
65         result = state->m_profile_readdata;
65         result = m_profile_readdata;
6666         break;
6767
6868      case 2:
69         if (state->m_profile_busycount > 0)
69         if (m_profile_busycount > 0)
7070         {
71            state->m_profile_busycount--;
71            m_profile_busycount--;
7272            result = 0xFF;
7373         }
7474         else
7575         {
76            result = state->m_profile_busy | state->m_profile_online;
76            result = m_profile_busy | m_profile_online;
7777         }
7878         break;
7979   }
r14963r14964
8282
8383
8484
85static void apple3_profile_w(apple3_state *state, offs_t offset, UINT8 data)
85void apple3_state::apple3_profile_w(offs_t offset, UINT8 data)
8686{
8787   offset %= 4;
88   state->m_profile_lastaddr = -1;
88   m_profile_lastaddr = -1;
8989
9090   switch(offset)
9191   {
9292      case 0:
93         state->m_profile_writedata = data;
94         state->m_profile_gotstrobe = 1;
93         m_profile_writedata = data;
94         m_profile_gotstrobe = 1;
9595         break;
9696   }
9797   apple3_profile_statemachine();
r14963r14964
101101
102102/* ----------------------------------------------------------------------- */
103103
104static READ8_HANDLER( apple3_c0xx_r )
104READ8_MEMBER(apple3_state::apple3_c0xx_r)
105105{
106   apple3_state *state = space->machine().driver_data<apple3_state>();
107   acia6551_device *acia = space->machine().device<acia6551_device>("acia");
108   device_t *fdc = space->machine().device("fdc");
106   acia6551_device *acia = machine().device<acia6551_device>("acia");
107   device_t *fdc = machine().device("fdc");
109108   UINT8 result = 0xFF;
110109
111110   switch(offset)
112111   {
113112      case 0x00: case 0x01: case 0x02: case 0x03:
114113      case 0x04: case 0x05: case 0x06: case 0x07:
115         result = AY3600_keydata_strobe_r(space->machine());
114         result = AY3600_keydata_strobe_r(machine());
116115         break;
117116
118117      case 0x08: case 0x09: case 0x0A: case 0x0B:
r14963r14964
125124      case 0x14: case 0x15: case 0x16: case 0x17:
126125      case 0x18: case 0x19: case 0x1A: case 0x1B:
127126      case 0x1C: case 0x1D: case 0x1E: case 0x1F:
128         AY3600_anykey_clearstrobe_r(space->machine());
127         AY3600_anykey_clearstrobe_r(machine());
129128         break;
130129
131130      case 0x50: case 0x51: case 0x52: case 0x53:
132131      case 0x54: case 0x55: case 0x56: case 0x57:
133132         /* graphics softswitches */
134133         if (offset & 1)
135            state->m_flags |= 1 << ((offset - 0x50) / 2);
134            m_flags |= 1 << ((offset - 0x50) / 2);
136135         else
137            state->m_flags &= ~(1 << ((offset - 0x50) / 2));
136            m_flags &= ~(1 << ((offset - 0x50) / 2));
138137         break;
139138
140139      case 0x60: case 0x61: case 0x62: case 0x63:
r14963r14964
150149      case 0xC8: case 0xC9: case 0xCA: case 0xCB:
151150      case 0xCC: case 0xCD: case 0xCE: case 0xCF:
152151         /* profile */
153         result = apple3_profile_r(state, offset);
152         result = apple3_profile_r(offset);
154153         break;
155154
156155      case 0xD0: case 0xD1: case 0xD2: case 0xD3:
157156      case 0xD4: case 0xD5: case 0xD6: case 0xD7:
158157         /* external drive stuff */
159158         if (offset & 1)
160            state->m_flags |= VAR_EXTA0 << ((offset - 0xD0) / 2);
159            m_flags |= VAR_EXTA0 << ((offset - 0xD0) / 2);
161160         else
162            state->m_flags &= ~(VAR_EXTA0 << ((offset - 0xD0) / 2));
163         apple3_update_drives(space->machine().device("fdc"));
161            m_flags &= ~(VAR_EXTA0 << ((offset - 0xD0) / 2));
162         apple3_update_drives(machine().device("fdc"));
164163         result = 0x00;
165164         break;
166165
167166      case 0xDB:
168         apple3_write_charmem(space->machine());
167         apple3_write_charmem(machine());
169168         break;
170169
171170      case 0xE0: case 0xE1: case 0xE2: case 0xE3:
r14963r14964
179178      case 0xF1:
180179      case 0xF2:
181180      case 0xF3:
182         result = acia->read(*space, offset & 0x03);
181         result = acia->read(space, offset & 0x03);
183182         break;
184183   }
185184   return result;
r14963r14964
187186
188187
189188
190static WRITE8_HANDLER( apple3_c0xx_w )
189WRITE8_MEMBER(apple3_state::apple3_c0xx_w)
191190{
192   apple3_state *state = space->machine().driver_data<apple3_state>();
193   acia6551_device *acia = space->machine().device<acia6551_device>("acia");
194   device_t *fdc = space->machine().device("fdc");
191   acia6551_device *acia = machine().device<acia6551_device>("acia");
192   device_t *fdc = machine().device("fdc");
195193   switch(offset)
196194   {
197195      case 0x10: case 0x11: case 0x12: case 0x13:
198196      case 0x14: case 0x15: case 0x16: case 0x17:
199197      case 0x18: case 0x19: case 0x1A: case 0x1B:
200198      case 0x1C: case 0x1D: case 0x1E: case 0x1F:
201         AY3600_anykey_clearstrobe_r(space->machine());
199         AY3600_anykey_clearstrobe_r(machine());
202200         break;
203201
204202      case 0x50: case 0x51: case 0x52: case 0x53:
205203      case 0x54: case 0x55: case 0x56: case 0x57:
206204         /* graphics softswitches */
207205         if (offset & 1)
208            state->m_flags |= 1 << ((offset - 0x50) / 2);
206            m_flags |= 1 << ((offset - 0x50) / 2);
209207         else
210            state->m_flags &= ~(1 << ((offset - 0x50) / 2));
208            m_flags &= ~(1 << ((offset - 0x50) / 2));
211209         break;
212210
213211      case 0xC0: case 0xC1: case 0xC2: case 0xC3:
r14963r14964
215213      case 0xC8: case 0xC9: case 0xCA: case 0xCB:
216214      case 0xCC: case 0xCD: case 0xCE: case 0xCF:
217215         /* profile */
218         apple3_profile_w(state, offset, data);
216         apple3_profile_w(offset, data);
219217         break;
220218
221219      case 0xD0: case 0xD1: case 0xD2: case 0xD3:
222220      case 0xD4: case 0xD5: case 0xD6: case 0xD7:
223221         /* external drive stuff */
224222         if (offset & 1)
225            state->m_flags |= VAR_EXTA0 << ((offset - 0xD0) / 2);
223            m_flags |= VAR_EXTA0 << ((offset - 0xD0) / 2);
226224         else
227            state->m_flags &= ~(VAR_EXTA0 << ((offset - 0xD0) / 2));
228         apple3_update_drives(space->machine().device("fdc"));
225            m_flags &= ~(VAR_EXTA0 << ((offset - 0xD0) / 2));
226         apple3_update_drives(machine().device("fdc"));
229227         break;
230228
231229      case 0xDB:
232         apple3_write_charmem(space->machine());
230         apple3_write_charmem(machine());
233231         break;
234232
235233      case 0xE0: case 0xE1: case 0xE2: case 0xE3:
r14963r14964
243241      case 0xF1:
244242      case 0xF2:
245243      case 0xF3:
246         acia->write(*space, offset & 0x03, data);
244         acia->write(space, offset & 0x03, data);
247245         break;
248246   }
249247}
r14963r14964
308306
309307
310308
311READ8_HANDLER( apple3_00xx_r )
309READ8_MEMBER(apple3_state::apple3_00xx_r)
312310{
313   return *apple3_get_zpa_addr(space->machine(),offset);
311   return *apple3_get_zpa_addr(machine(),offset);
314312}
315313
316314
317315
318WRITE8_HANDLER( apple3_00xx_w )
316WRITE8_MEMBER(apple3_state::apple3_00xx_w)
319317{
320   *apple3_get_zpa_addr(space->machine(),offset) = data;
318   *apple3_get_zpa_addr(machine(),offset) = data;
321319}
322320
323321
r14963r14964
374372   /* install bank 8 (C000-CFFF) */
375373   if (state->m_via_0_a & 0x40)
376374   {
377      space->install_legacy_read_handler(0xC000, 0xC0FF, FUNC(apple3_c0xx_r));
378      space->install_legacy_write_handler(0xC000, 0xC0FF, FUNC(apple3_c0xx_w));
375      space->install_read_handler(0xC000, 0xC0FF, read8_delegate(FUNC(apple3_state::apple3_c0xx_r),state));
376      space->install_write_handler(0xC000, 0xC0FF, write8_delegate(FUNC(apple3_state::apple3_c0xx_w),state));
379377   }
380378   else
381379   {
r14963r14964
623621
624622
625623
626READ8_HANDLER( apple3_indexed_read )
624READ8_MEMBER(apple3_state::apple3_indexed_read)
627625{
628626   UINT8 result;
629627   UINT8 *addr;
630628
631   addr = apple3_get_indexed_addr(space->machine(),offset);
629   addr = apple3_get_indexed_addr(machine(),offset);
632630   if (!addr)
633      result = space->read_byte(offset);
631      result = space.read_byte(offset);
634632   else if (addr != (UINT8 *) ~0)
635633      result = *addr;
636634   else
637      result = space->machine().region("maincpu")->base()[offset % space->machine().region("maincpu")->bytes()];
635      result = machine().region("maincpu")->base()[offset % machine().region("maincpu")->bytes()];
638636   return result;
639637}
640638
641639
642640
643WRITE8_HANDLER( apple3_indexed_write )
641WRITE8_MEMBER(apple3_state::apple3_indexed_write)
644642{
645643   UINT8 *addr;
646644
647   addr = apple3_get_indexed_addr(space->machine(),offset);
645   addr = apple3_get_indexed_addr(machine(),offset);
648646   if (!addr)
649      space->write_byte(offset, data);
647      space.write_byte(offset, data);
650648   else if (addr != (UINT8 *) ~0)
651649      *addr = data;
652650}
src/mess/machine/dai.c
r14963r14964
2929
3030/* Memory */
3131
32WRITE8_HANDLER( dai_stack_interrupt_circuit_w )
32WRITE8_MEMBER(dai_state::dai_stack_interrupt_circuit_w)
3333{
34   dai_state *state = space->machine().driver_data<dai_state>();
35   tms5501_sensor (state->m_tms5501, 1);
36   tms5501_sensor (state->m_tms5501, 0);
34   tms5501_sensor (m_tms5501, 1);
35   tms5501_sensor (m_tms5501, 0);
3736}
3837
3938static void dai_update_memory(running_machine &machine, int dai_rom_bank)
r14963r14964
187186                bit 6-7         ROM bank switching
188187***************************************************************************/
189188
190READ8_HANDLER( dai_io_discrete_devices_r )
189READ8_MEMBER(dai_state::dai_io_discrete_devices_r)
191190{
192191   UINT8 data = 0x00;
193192
194193   switch(offset & 0x000f) {
195194   case 0x00:
196      data = input_port_read(space->machine(), "IN8");
195      data = input_port_read(machine(), "IN8");
197196      data |= 0x08;         // serial ready
198      if (space->machine().rand()&0x01)
197      if (machine().rand()&0x01)
199198         data |= 0x40;      // random number generator
200      if (space->machine().device<cassette_image_device>(CASSETTE_TAG)->input() > 0.01)
199      if (machine().device<cassette_image_device>(CASSETTE_TAG)->input() > 0.01)
201200         data |= 0x80;      // tape input
202201      break;
203202
r14963r14964
210209   return data;
211210}
212211
213WRITE8_HANDLER( dai_io_discrete_devices_w )
212WRITE8_MEMBER(dai_state::dai_io_discrete_devices_w)
214213{
215   dai_state *state = space->machine().driver_data<dai_state>();
216214   switch(offset & 0x000f) {
217215   case 0x04:
218      dai_set_volume(state->m_sound, offset, data);
216      dai_set_volume(m_sound, offset, data);
219217      LOG_DAI_PORT_W (offset, data&0x0f, "discrete devices - osc. 0 volume");
220218      LOG_DAI_PORT_W (offset, (data&0xf0)>>4, "discrete devices - osc. 1 volume");
221219      break;
222220
223221   case 0x05:
224      dai_set_volume(state->m_sound, offset, data);
222      dai_set_volume(m_sound, offset, data);
225223      LOG_DAI_PORT_W (offset, data&0x0f, "discrete devices - osc. 2 volume");
226224      LOG_DAI_PORT_W (offset, (data&0xf0)>>4, "discrete devices - noise volume");
227225      break;
228226
229227   case 0x06:
230      state->m_paddle_select = (data&0x06)>>2;
231      state->m_paddle_enable = (data&0x08)>>3;
232      state->m_cassette_motor[0] = (data&0x10)>>4;
233      state->m_cassette_motor[1] = (data&0x20)>>5;
234      space->machine().device<cassette_image_device>(CASSETTE_TAG)->change_state(state->m_cassette_motor[0]?CASSETTE_MOTOR_DISABLED:CASSETTE_MOTOR_ENABLED, CASSETTE_MASK_MOTOR);
235      space->machine().device<cassette_image_device>(CASSETTE_TAG)->output((data & 0x01) ? -1.0 : 1.0);
236      dai_update_memory (space->machine(), (data&0xc0)>>6);
228      m_paddle_select = (data&0x06)>>2;
229      m_paddle_enable = (data&0x08)>>3;
230      m_cassette_motor[0] = (data&0x10)>>4;
231      m_cassette_motor[1] = (data&0x20)>>5;
232      machine().device<cassette_image_device>(CASSETTE_TAG)->change_state(m_cassette_motor[0]?CASSETTE_MOTOR_DISABLED:CASSETTE_MOTOR_ENABLED, CASSETTE_MASK_MOTOR);
233      machine().device<cassette_image_device>(CASSETTE_TAG)->output((data & 0x01) ? -1.0 : 1.0);
234      dai_update_memory (machine(), (data&0xc0)>>6);
237235      LOG_DAI_PORT_W (offset, (data&0x06)>>2, "discrete devices - paddle select");
238236      LOG_DAI_PORT_W (offset, (data&0x08)>>3, "discrete devices - paddle enable");
239237      LOG_DAI_PORT_W (offset, (data&0x10)>>4, "discrete devices - cassette motor 1");
r14963r14964
253251
254252***************************************************************************/
255253
256READ8_HANDLER( dai_amd9511_r )
254READ8_MEMBER(dai_state::dai_amd9511_r)
257255{
258256   /* optional and no present at this moment */
259257   return 0xff;
260258}
261259
262WRITE8_HANDLER( dai_amd9511_w )
260WRITE8_MEMBER(dai_state::dai_amd9511_w)
263261{
264262   logerror ("Writing to AMD9511 math chip, %04x, %02x\n", offset, data);
265263}
src/mess/machine/cbmb.c
r14963r14964
270270   DEVCB_NULL
271271};
272272
273WRITE8_HANDLER( cbmb_colorram_w )
273WRITE8_MEMBER(cbmb_state::cbmb_colorram_w)
274274{
275   cbmb_state *state = space->machine().driver_data<cbmb_state>();
276   state->m_colorram[offset] = data | 0xf0;
275   m_colorram[offset] = data | 0xf0;
277276}
278277
279278WRITE_LINE_DEVICE_HANDLER( cbmb_change_font )
src/mess/machine/pmd85.c
r14963r14964
516516
517517*******************************************************************************/
518518
519READ8_HANDLER ( pmd85_io_r )
519READ8_MEMBER(pmd85_state::pmd85_io_r)
520520{
521   pmd85_state *state = space->machine().driver_data<pmd85_state>();
522   i8251_device *uart = space->machine().device<i8251_device>("uart");
523   if (state->m_startup_mem_map)
521   i8251_device *uart = machine().device<i8251_device>("uart");
522   if (m_startup_mem_map)
524523   {
525524      return 0xff;
526525   }
r14963r14964
531530            switch (offset & 0x80)
532531            {
533532               case 0x80:   /* Motherboard 8255 */
534                     return space->machine().device<i8255_device>("ppi8255_0")->read(*space, offset & 0x03);
533                     return machine().device<i8255_device>("ppi8255_0")->read(space, offset & 0x03);
535534            }
536535            break;
537536      case 0x08:   /* ROM module connector */
538            switch (state->m_model)
537            switch (m_model)
539538            {
540539               case PMD85_1:
541540               case PMD85_2:
542541               case PMD85_2A:
543542               case C2717:
544543               case PMD85_3:
545                  if (state->m_rom_module_present)
544                  if (m_rom_module_present)
546545                  {
547546                     switch (offset & 0x80)
548547                     {
549548                        case 0x80:   /* ROM module 8255 */
550                           return space->machine().device<i8255_device>("ppi8255_3")->read(*space, offset & 0x03);
549                           return machine().device<i8255_device>("ppi8255_3")->read(space, offset & 0x03);
551550                     }
552551                  }
553552                  break;
r14963r14964
562561                        case 0x10:   /* 8251 (casette recorder, V24) */
563562                              switch (offset & 0x01)
564563                              {
565                                 case 0x00: return uart->data_r(*space, offset & 0x01);
566                                 case 0x01: return uart->status_r(*space, offset & 0x01);
564                                 case 0x00: return uart->data_r(space, offset & 0x01);
565                                 case 0x01: return uart->status_r(space, offset & 0x01);
567566                              }
568567                              break;
569568                        case 0x40:      /* 8255 (GPIO/0, GPIO/1) */
570                              return space->machine().device<i8255_device>("ppi8255_1")->read(*space, offset & 0x03);
569                              return machine().device<i8255_device>("ppi8255_1")->read(space, offset & 0x03);
571570                        case 0x50:   /* 8253 */
572                              return pit8253_r( space->machine().device("pit8253"), offset & 0x03);
571                              return pit8253_r( machine().device("pit8253"), offset & 0x03);
573572                        case 0x70:   /* 8255 (IMS-2) */
574                              return space->machine().device<i8255_device>("ppi8255_2")->read(*space, offset & 0x03);
573                              return machine().device<i8255_device>("ppi8255_2")->read(space, offset & 0x03);
575574                     }
576575                     break;
577576               case 0x80:   /* external interfaces */
r14963r14964
584583   return 0xff;
585584}
586585
587WRITE8_HANDLER ( pmd85_io_w )
586WRITE8_MEMBER(pmd85_state::pmd85_io_w)
588587{
589   pmd85_state *state = space->machine().driver_data<pmd85_state>();
590   i8251_device *uart = space->machine().device<i8251_device>("uart");
591   if (state->m_startup_mem_map)
588   i8251_device *uart = machine().device<i8251_device>("uart");
589   if (m_startup_mem_map)
592590   {
593      state->m_startup_mem_map = 0;
594      (*state->update_memory)(space->machine());
591      m_startup_mem_map = 0;
592      (*update_memory)(machine());
595593   }
596594
597595   switch (offset & 0x0c)
r14963r14964
600598            switch (offset & 0x80)
601599            {
602600               case 0x80:   /* Motherboard 8255 */
603                     space->machine().device<i8255_device>("ppi8255_0")->write(*space, offset & 0x03, data);
601                     machine().device<i8255_device>("ppi8255_0")->write(space, offset & 0x03, data);
604602                     /* PMD-85.3 memory banking */
605603                     if ((offset & 0x03) == 0x03)
606604                     {
607                        state->m_pmd853_memory_mapping = data & 0x01;
608                        (*state->update_memory)(space->machine());
605                        m_pmd853_memory_mapping = data & 0x01;
606                        (*update_memory)(machine());
609607                     }
610608                     break;
611609            }
612610            break;
613611      case 0x08:   /* ROM module connector */
614            switch (state->m_model)
612            switch (m_model)
615613            {
616614               case PMD85_1:
617615               case PMD85_2:
618616               case PMD85_2A:
619617               case C2717:
620618               case PMD85_3:
621                  if (state->m_rom_module_present)
619                  if (m_rom_module_present)
622620                  {
623621                     switch (offset & 0x80)
624622                     {
625623                        case 0x80:   /* ROM module 8255 */
626                              space->machine().device<i8255_device>("ppi8255_3")->write(*space, offset & 0x03, data);
624                              machine().device<i8255_device>("ppi8255_3")->write(space, offset & 0x03, data);
627625                              break;
628626                     }
629627                  }
r14963r14964
639637                        case 0x10:   /* 8251 (casette recorder, V24) */
640638                              switch (offset & 0x01)
641639                              {
642                                 case 0x00: uart->data_w(*space, offset & 0x01, data); break;
643                                 case 0x01: uart->control_w(*space, offset & 0x01, data); break;
640                                 case 0x00: uart->data_w(space, offset & 0x01, data); break;
641                                 case 0x01: uart->control_w(space, offset & 0x01, data); break;
644642                              }
645643                              break;
646644                        case 0x40:      /* 8255 (GPIO/0, GPIO/0) */
647                              space->machine().device<i8255_device>("ppi8255_1")->write(*space, offset & 0x03, data);
645                              machine().device<i8255_device>("ppi8255_1")->write(space, offset & 0x03, data);
648646                              break;
649647                        case 0x50:   /* 8253 */
650                              pit8253_w(space->machine().device("pit8253"), offset & 0x03, data);
648                              pit8253_w(machine().device("pit8253"), offset & 0x03, data);
651649                              logerror ("8253 writing. Address: %02x, Data: %02x\n", offset, data);
652650                              break;
653651                        case 0x70:   /* 8255 (IMS-2) */
654                              space->machine().device<i8255_device>("ppi8255_2")->write(*space, offset & 0x03, data);
652                              machine().device<i8255_device>("ppi8255_2")->write(space, offset & 0x03, data);
655653                              break;
656654                     }
657655                     break;
r14963r14964
672670
673671*******************************************************************************/
674672
675 READ8_HANDLER ( mato_io_r )
673READ8_MEMBER(pmd85_state::mato_io_r)
676674{
677   pmd85_state *state = space->machine().driver_data<pmd85_state>();
678   if (state->m_startup_mem_map)
675   if (m_startup_mem_map)
679676   {
680677      return 0xff;
681678   }
r14963r14964
686683            switch (offset & 0x80)
687684            {
688685               case 0x80:   /* Motherboard 8255 */
689                     return space->machine().device<i8255_device>("ppi8255_0")->read(*space, offset & 0x03);
686                     return machine().device<i8255_device>("ppi8255_0")->read(space, offset & 0x03);
690687            }
691688            break;
692689   }
r14963r14964
695692   return 0xff;
696693}
697694
698WRITE8_HANDLER ( mato_io_w )
695WRITE8_MEMBER(pmd85_state::mato_io_w)
699696{
700   pmd85_state *state = space->machine().driver_data<pmd85_state>();
701   if (state->m_startup_mem_map)
697   if (m_startup_mem_map)
702698   {
703      state->m_startup_mem_map = 0;
704      (*state->update_memory)(space->machine());
699      m_startup_mem_map = 0;
700      (*update_memory)(machine());
705701   }
706702
707703   switch (offset & 0x0c)
r14963r14964
710706            switch (offset & 0x80)
711707            {
712708               case 0x80:   /* Motherboard 8255 */
713                     return space->machine().device<i8255_device>("ppi8255_0")->write(*space, offset & 0x03, data);
709                     return machine().device<i8255_device>("ppi8255_0")->write(space, offset & 0x03, data);
714710                     break;
715711            }
716712            break;
src/mess/machine/at.c
r14963r14964
161161   i8237_hlda_w( m_dma8237_2, state );
162162}
163163
164static READ8_HANDLER( pc_dma_read_byte )
164READ8_MEMBER(at_state::pc_dma_read_byte)
165165{
166   at_state *st = space->machine().driver_data<at_state>();
167166   UINT8 result;
168   offs_t page_offset = (((offs_t) st->m_dma_offset[0][st->m_dma_channel]) << 16) & 0xFF0000;
167   offs_t page_offset = (((offs_t) m_dma_offset[0][m_dma_channel]) << 16) & 0xFF0000;
169168
170   result = space->read_byte(page_offset + offset);
169   result = space.read_byte(page_offset + offset);
171170   return result;
172171}
173172
174173
175static WRITE8_HANDLER( pc_dma_write_byte )
174WRITE8_MEMBER(at_state::pc_dma_write_byte)
176175{
177   at_state *st = space->machine().driver_data<at_state>();
178   offs_t page_offset = (((offs_t) st->m_dma_offset[0][st->m_dma_channel]) << 16) & 0xFF0000;
176   offs_t page_offset = (((offs_t) m_dma_offset[0][m_dma_channel]) << 16) & 0xFF0000;
179177
180   space->write_byte(page_offset + offset, data);
178   space.write_byte(page_offset + offset, data);
181179}
182180
183181
184static READ8_HANDLER( pc_dma_read_word )
182READ8_MEMBER(at_state::pc_dma_read_word)
185183{
186   at_state *st = space->machine().driver_data<at_state>();
187184   UINT16 result;
188   offs_t page_offset = (((offs_t) st->m_dma_offset[1][st->m_dma_channel & 3]) << 16) & 0xFF0000;
185   offs_t page_offset = (((offs_t) m_dma_offset[1][m_dma_channel & 3]) << 16) & 0xFF0000;
189186
190   result = space->read_word(page_offset + ( offset << 1 ) );
191   st->m_dma_high_byte = result & 0xFF00;
187   result = space.read_word(page_offset + ( offset << 1 ) );
188   m_dma_high_byte = result & 0xFF00;
192189
193190   return result & 0xFF;
194191}
195192
196193
197static WRITE8_HANDLER( pc_dma_write_word )
194WRITE8_MEMBER(at_state::pc_dma_write_word)
198195{
199   at_state *st = space->machine().driver_data<at_state>();
200   offs_t page_offset = (((offs_t) st->m_dma_offset[1][st->m_dma_channel & 3]) << 16) & 0xFF0000;
196   offs_t page_offset = (((offs_t) m_dma_offset[1][m_dma_channel & 3]) << 16) & 0xFF0000;
201197
202   space->write_word(page_offset + ( offset << 1 ), st->m_dma_high_byte | data);
198   space.write_word(page_offset + ( offset << 1 ), m_dma_high_byte | data);
203199}
204200
205201
r14963r14964
242238{
243239   DEVCB_DEVICE_LINE("dma8237_2",i8237_dreq0_w),
244240   DEVCB_DRIVER_LINE_MEMBER(at_state, at_dma8237_out_eop),
245   DEVCB_MEMORY_HANDLER("maincpu", PROGRAM, pc_dma_read_byte),
246   DEVCB_MEMORY_HANDLER("maincpu", PROGRAM, pc_dma_write_byte),
241   DEVCB_DRIVER_MEMBER(at_state, pc_dma_read_byte),
242   DEVCB_DRIVER_MEMBER(at_state, pc_dma_write_byte),
247243   { DEVCB_DRIVER_MEMBER(at_state, pc_dma8237_0_dack_r), DEVCB_DRIVER_MEMBER(at_state, pc_dma8237_1_dack_r), DEVCB_DRIVER_MEMBER(at_state, pc_dma8237_2_dack_r), DEVCB_DRIVER_MEMBER(at_state, pc_dma8237_3_dack_r) },
248244   { DEVCB_DRIVER_MEMBER(at_state, pc_dma8237_0_dack_w), DEVCB_DRIVER_MEMBER(at_state, pc_dma8237_1_dack_w), DEVCB_DRIVER_MEMBER(at_state, pc_dma8237_2_dack_w), DEVCB_DRIVER_MEMBER(at_state, pc_dma8237_3_dack_w) },
249245   { DEVCB_DRIVER_LINE_MEMBER(at_state, pc_dack0_w), DEVCB_DRIVER_LINE_MEMBER(at_state, pc_dack1_w), DEVCB_DRIVER_LINE_MEMBER(at_state, pc_dack2_w), DEVCB_DRIVER_LINE_MEMBER(at_state, pc_dack3_w) }
r14963r14964
254250{
255251   DEVCB_DRIVER_LINE_MEMBER(at_state, pc_dma_hrq_changed),
256252   DEVCB_NULL,
257   DEVCB_MEMORY_HANDLER("maincpu", PROGRAM, pc_dma_read_word),
258   DEVCB_MEMORY_HANDLER("maincpu", PROGRAM, pc_dma_write_word),
253   DEVCB_DRIVER_MEMBER(at_state, pc_dma_read_word),
254   DEVCB_DRIVER_MEMBER(at_state, pc_dma_write_word),
259255   { DEVCB_NULL, DEVCB_DRIVER_MEMBER(at_state, pc_dma8237_5_dack_r), DEVCB_DRIVER_MEMBER(at_state, pc_dma8237_6_dack_r), DEVCB_DRIVER_MEMBER(at_state, pc_dma8237_7_dack_r) },
260256   { DEVCB_NULL, DEVCB_DRIVER_MEMBER(at_state, pc_dma8237_5_dack_w), DEVCB_DRIVER_MEMBER(at_state, pc_dma8237_6_dack_w), DEVCB_DRIVER_MEMBER(at_state, pc_dma8237_7_dack_w) },
261257   { DEVCB_DRIVER_LINE_MEMBER(at_state, pc_dack4_w), DEVCB_DRIVER_LINE_MEMBER(at_state, pc_dack5_w), DEVCB_DRIVER_LINE_MEMBER(at_state, pc_dack6_w), DEVCB_DRIVER_LINE_MEMBER(at_state, pc_dack7_w) }
src/mess/machine/electron.c
r14963r14964
1818   return machine.device<cassette_image_device>(CASSETTE_TAG);
1919}
2020
21static void electron_tape_start( electron_state *state )
21void electron_state::electron_tape_start()
2222{
23   if ( state->m_ula.tape_running )
23   if (m_ula.tape_running )
2424   {
2525      return;
2626   }
27   state->m_ula.tape_steps = 0;
28   state->m_ula.tape_value = 0x80808080;
29   state->m_ula.high_tone_set = 0;
30   state->m_ula.bit_count = 0;
31   state->m_ula.tape_running = 1;
32   state->m_tape_timer->adjust(attotime::zero, 0, attotime::from_hz(4800));
27   m_ula.tape_steps = 0;
28   m_ula.tape_value = 0x80808080;
29   m_ula.high_tone_set = 0;
30   m_ula.bit_count = 0;
31   m_ula.tape_running = 1;
32   m_tape_timer->adjust(attotime::zero, 0, attotime::from_hz(4800));
3333}
3434
35static void electron_tape_stop( electron_state *state )
35void electron_state::electron_tape_stop()
3636{
37   state->m_ula.tape_running = 0;
38   state->m_tape_timer->reset(  );
37   m_ula.tape_running = 0;
38   m_tape_timer->reset();
3939}
4040
4141#define TAPE_LOW   0x00;
r14963r14964
114114   }
115115}
116116
117static READ8_HANDLER( electron_read_keyboard )
117READ8_MEMBER(electron_state::electron_read_keyboard)
118118{
119119   UINT8 data = 0;
120120   int i;
r14963r14964
127127   for( i = 0; i < 14; i++ )
128128   {
129129      if( !(offset & 1) )
130         data |= input_port_read(space->machine(), keynames[i]) & 0x0f;
130         data |= input_port_read(machine(), keynames[i]) & 0x0f;
131131
132132      offset = offset >> 1;
133133   }
r14963r14964
135135   return data;
136136}
137137
138READ8_HANDLER( electron_jim_r )
138READ8_MEMBER(electron_state::electron_jim_r)
139139{
140140   return 0xff;
141141}
142142
143WRITE8_HANDLER( electron_jim_w )
143WRITE8_MEMBER(electron_state::electron_jim_w)
144144{
145145}
146146
147READ8_HANDLER( electron_1mhz_r )
147READ8_MEMBER(electron_state::electron_1mhz_r)
148148{
149149   return 0xff;
150150}
151151
152WRITE8_HANDLER( electron_1mhz_w )
152WRITE8_MEMBER(electron_state::electron_1mhz_w)
153153{
154154}
155155
156READ8_HANDLER( electron_ula_r )
156READ8_MEMBER(electron_state::electron_ula_r)
157157{
158   electron_state *state = space->machine().driver_data<electron_state>();
159   UINT8 data = ((UINT8 *)space->machine().region("user1")->base())[0x43E00 + offset];
158   UINT8 data = ((UINT8 *)machine().region("user1")->base())[0x43E00 + offset];
160159   switch ( offset & 0x0f )
161160   {
162161   case 0x00:   /* Interrupt status */
163      data = state->m_ula.interrupt_status;
164      state->m_ula.interrupt_status &= ~0x02;
162      data = m_ula.interrupt_status;
163      m_ula.interrupt_status &= ~0x02;
165164      break;
166165   case 0x01:   /* Unknown */
167166      break;
168167   case 0x04:   /* Casette data shift register */
169      electron_interrupt_handler(space->machine(), INT_CLEAR, INT_RECEIVE_FULL );
170      data = state->m_ula.tape_byte;
168      electron_interrupt_handler(machine(), INT_CLEAR, INT_RECEIVE_FULL );
169      data = m_ula.tape_byte;
171170      break;
172171   }
173172   logerror( "ULA: read offset %02x: %02x\n", offset, data );
r14963r14964
177176static const int electron_palette_offset[4] = { 0, 4, 5, 1 };
178177static const UINT16 electron_screen_base[8] = { 0x3000, 0x3000, 0x3000, 0x4000, 0x5800, 0x5800, 0x6000, 0x5800 };
179178
180WRITE8_HANDLER( electron_ula_w )
179WRITE8_MEMBER(electron_state::electron_ula_w)
181180{
182   electron_state *state = space->machine().driver_data<electron_state>();
183   device_t *speaker = space->machine().device(BEEPER_TAG);
181   device_t *speaker = machine().device(BEEPER_TAG);
184182   int i = electron_palette_offset[(( offset >> 1 ) & 0x03)];
185183   logerror( "ULA: write offset %02x <- %02x\n", offset & 0x0f, data );
186184   switch( offset & 0x0f )
187185   {
188186   case 0x00:   /* Interrupt control */
189      state->m_ula.interrupt_control = data;
187      m_ula.interrupt_control = data;
190188      break;
191189   case 0x01:   /* Unknown */
192190      break;
193191   case 0x02:   /* Screen start address #1 */
194      state->m_ula.screen_start = ( state->m_ula.screen_start & 0x7e00 ) | ( ( data & 0xe0 ) << 1 );
195      logerror( "screen_start changed to %04x\n", state->m_ula.screen_start );
192      m_ula.screen_start = ( m_ula.screen_start & 0x7e00 ) | ( ( data & 0xe0 ) << 1 );
193      logerror( "screen_start changed to %04x\n", m_ula.screen_start );
196194      break;
197195   case 0x03:   /* Screen start addres #2 */
198      state->m_ula.screen_start = ( state->m_ula.screen_start & 0x1c0 ) | ( ( data & 0x3f ) << 9 );
199      logerror( "screen_start changed to %04x\n", state->m_ula.screen_start );
196      m_ula.screen_start = ( m_ula.screen_start & 0x1c0 ) | ( ( data & 0x3f ) << 9 );
197      logerror( "screen_start changed to %04x\n", m_ula.screen_start );
200198      break;
201199   case 0x04:   /* Cassette data shift register */
202200      break;
r14963r14964
207205         * Rompages 10 and 11 both select the Basic ROM.
208206         * Rompages 8 and 9 both select the keyboard.
209207         */
210      if ( ( ( state->m_ula.rompage & 0x0C ) != 0x08 ) || ( data & 0x08 ) )
208      if ( ( ( m_ula.rompage & 0x0C ) != 0x08 ) || ( data & 0x08 ) )
211209      {
212         state->m_ula.rompage = data & 0x0f;
213         if ( state->m_ula.rompage == 8 || state->m_ula.rompage == 9 )
210         m_ula.rompage = data & 0x0f;
211         if ( m_ula.rompage == 8 || m_ula.rompage == 9 )
214212         {
215            state->m_ula.rompage = 8;
216            space->install_legacy_read_handler( 0x8000, 0xbfff, FUNC(electron_read_keyboard) );
213            m_ula.rompage = 8;
214            space.install_read_handler( 0x8000, 0xbfff, read8_delegate(FUNC(electron_state::electron_read_keyboard),this));
217215         }
218216         else
219217         {
220            space->install_read_bank( 0x8000, 0xbfff, "bank2");
218            space.install_read_bank( 0x8000, 0xbfff, "bank2");
221219         }
222         memory_set_bank(space->machine(), "bank2", state->m_ula.rompage);
220         memory_set_bank(machine(), "bank2", m_ula.rompage);
223221      }
224222      if ( data & 0x10 )
225223      {
226         electron_interrupt_handler( space->machine(), INT_CLEAR, INT_DISPLAY_END );
224         electron_interrupt_handler( machine(), INT_CLEAR, INT_DISPLAY_END );
227225      }
228226      if ( data & 0x20 )
229227      {
230         electron_interrupt_handler( space->machine(), INT_CLEAR, INT_RTC );
228         electron_interrupt_handler( machine(), INT_CLEAR, INT_RTC );
231229      }
232230      if ( data & 0x40 )
233231      {
234         electron_interrupt_handler( space->machine(), INT_CLEAR, INT_HIGH_TONE );
232         electron_interrupt_handler( machine(), INT_CLEAR, INT_HIGH_TONE );
235233      }
236234      if ( data & 0x80 )
237235      {
238236      }
239237      break;
240238   case 0x06:   /* Counter divider */
241      if ( state->m_ula.communication_mode == 0x01)
239      if ( m_ula.communication_mode == 0x01)
242240      {
243241         beep_set_frequency( speaker, 1000000 / ( 16 * ( data + 1 ) ) );
244242      }
245243      break;
246244   case 0x07:   /* Misc. */
247      state->m_ula.communication_mode = ( data >> 1 ) & 0x03;
248      switch( state->m_ula.communication_mode )
245      m_ula.communication_mode = ( data >> 1 ) & 0x03;
246      switch( m_ula.communication_mode )
249247      {
250248      case 0x00:   /* cassette input */
251249         beep_set_state( speaker, 0 );
252         electron_tape_start(state);
250         electron_tape_start();
253251         break;
254252      case 0x01:   /* sound generation */
255253         beep_set_state( speaker, 1 );
256         electron_tape_stop(state);
254         electron_tape_stop();
257255         break;
258256      case 0x02:   /* cassette output */
259257         beep_set_state( speaker, 0 );
260         electron_tape_stop(state);
258         electron_tape_stop();
261259         break;
262260      case 0x03:   /* not used */
263261         beep_set_state( speaker, 0 );
264         electron_tape_stop(state);
262         electron_tape_stop();
265263         break;
266264      }
267      state->m_ula.screen_mode = ( data >> 3 ) & 0x07;
268      state->m_ula.screen_base = electron_screen_base[ state->m_ula.screen_mode ];
269      state->m_ula.screen_size = 0x8000 - state->m_ula.screen_base;
270      state->m_ula.vram = (UINT8 *)space->get_read_ptr(state->m_ula.screen_base );
271      logerror( "ULA: screen mode set to %d\n", state->m_ula.screen_mode );
272      state->m_ula.cassette_motor_mode = ( data >> 6 ) & 0x01;
273      cassette_device_image(space->machine())->change_state(state->m_ula.cassette_motor_mode ? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED, CASSETTE_MOTOR_DISABLED );
274      state->m_ula.capslock_mode = ( data >> 7 ) & 0x01;
265      m_ula.screen_mode = ( data >> 3 ) & 0x07;
266      m_ula.screen_base = electron_screen_base[ m_ula.screen_mode ];
267      m_ula.screen_size = 0x8000 - m_ula.screen_base;
268      m_ula.vram = (UINT8 *)space.get_read_ptr(m_ula.screen_base );
269      logerror( "ULA: screen mode set to %d\n", m_ula.screen_mode );
270      m_ula.cassette_motor_mode = ( data >> 6 ) & 0x01;
271      cassette_device_image(machine())->change_state(m_ula.cassette_motor_mode ? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED, CASSETTE_MOTOR_DISABLED );
272      m_ula.capslock_mode = ( data >> 7 ) & 0x01;
275273      break;
276274   case 0x08: case 0x0A: case 0x0C: case 0x0E:
277275      // video_update
278      state->m_ula.current_pal[i+10] = (state->m_ula.current_pal[i+10] & 0x01) | (((data & 0x80) >> 5) | ((data & 0x08) >> 1));
279      state->m_ula.current_pal[i+8] = (state->m_ula.current_pal[i+8] & 0x01) | (((data & 0x40) >> 4) | ((data & 0x04) >> 1));
280      state->m_ula.current_pal[i+2] = (state->m_ula.current_pal[i+2] & 0x03) | ((data & 0x20) >> 3);
281      state->m_ula.current_pal[i] = (state->m_ula.current_pal[i] & 0x03) | ((data & 0x10) >> 2);
276      m_ula.current_pal[i+10] = (m_ula.current_pal[i+10] & 0x01) | (((data & 0x80) >> 5) | ((data & 0x08) >> 1));
277      m_ula.current_pal[i+8] = (m_ula.current_pal[i+8] & 0x01) | (((data & 0x40) >> 4) | ((data & 0x04) >> 1));
278      m_ula.current_pal[i+2] = (m_ula.current_pal[i+2] & 0x03) | ((data & 0x20) >> 3);
279      m_ula.current_pal[i] = (m_ula.current_pal[i] & 0x03) | ((data & 0x10) >> 2);
282280      break;
283281   case 0x09: case 0x0B: case 0x0D: case 0x0F:
284282      // video_update
285      state->m_ula.current_pal[i+10] = (state->m_ula.current_pal[i+10] & 0x06) | ((data & 0x08) >> 3);
286      state->m_ula.current_pal[i+8] = (state->m_ula.current_pal[i+8] & 0x06) | ((data & 0x04) >> 2);
287      state->m_ula.current_pal[i+2] = (state->m_ula.current_pal[i+2] & 0x04) | (((data & 0x20) >> 4) | ((data & 0x02) >> 1));
288      state->m_ula.current_pal[i] = (state->m_ula.current_pal[i] & 0x04) | (((data & 0x10) >> 3) | ((data & 0x01)));
283      m_ula.current_pal[i+10] = (m_ula.current_pal[i+10] & 0x06) | ((data & 0x08) >> 3);
284      m_ula.current_pal[i+8] = (m_ula.current_pal[i+8] & 0x06) | ((data & 0x04) >> 2);
285      m_ula.current_pal[i+2] = (m_ula.current_pal[i+2] & 0x04) | (((data & 0x20) >> 4) | ((data & 0x02) >> 1));
286      m_ula.current_pal[i] = (m_ula.current_pal[i] & 0x04) | (((data & 0x10) >> 3) | ((data & 0x01)));
289287      break;
290288   }
291289}
src/mess/machine/irisha.c
r14963r14964
6666   return 0;
6767}
6868
69READ8_HANDLER (irisha_keyboard_r)
69READ8_MEMBER(irisha_state::irisha_keyboard_r)
7070{
71   irisha_state *state = space->machine().driver_data<irisha_state>();
7271   UINT8 keycode;
73   if (state->m_keyboard_cnt!=0 && state->m_keyboard_cnt<11) {
74      keycode = input_port_read(space->machine(), keynames[state->m_keyboard_cnt-1]) ^ 0xff;
72   if (m_keyboard_cnt!=0 && m_keyboard_cnt<11) {
73      keycode = input_port_read(machine(), keynames[m_keyboard_cnt-1]) ^ 0xff;
7574   } else {
7675      keycode = 0xff;
7776   }
78   state->m_keyboard_cnt++;
77   m_keyboard_cnt++;
7978   return keycode;
8079}
8180
src/mess/machine/orion.c
r14963r14964
6363   state->m_video_mode_mask = 7;
6464}
6565
66READ8_HANDLER ( orion128_system_r )
66READ8_MEMBER(orion_state::orion128_system_r)
6767{
68   return space->machine().device<i8255_device>("ppi8255_2")->read(*space, offset & 3);
68   return machine().device<i8255_device>("ppi8255_2")->read(space, offset & 3);
6969}
7070
71WRITE8_HANDLER ( orion128_system_w )
71WRITE8_MEMBER(orion_state::orion128_system_w)
7272{
73   space->machine().device<i8255_device>("ppi8255_2")->write(*space, offset & 3, data);
73   machine().device<i8255_device>("ppi8255_2")->write(space, offset & 3, data);
7474}
7575
76READ8_HANDLER ( orion128_romdisk_r )
76READ8_MEMBER(orion_state::orion128_romdisk_r)
7777{
78   return space->machine().device<i8255_device>("ppi8255_1")->read(*space, offset & 3);
78   return machine().device<i8255_device>("ppi8255_1")->read(space, offset & 3);
7979}
8080
81WRITE8_HANDLER ( orion128_romdisk_w )
81WRITE8_MEMBER(orion_state::orion128_romdisk_w)
8282{
83   space->machine().device<i8255_device>("ppi8255_1")->write(*space, offset & 3, data);
83   machine().device<i8255_device>("ppi8255_1")->write(space, offset & 3, data);
8484}
8585
8686static void orion_set_video_mode(running_machine &machine, int width)
r14963r14964
8989      machine.primary_screen->configure(width, 256, visarea, machine.primary_screen->frame_period().attoseconds);
9090}
9191
92WRITE8_HANDLER ( orion128_video_mode_w )
92WRITE8_MEMBER(orion_state::orion128_video_mode_w)
9393{
94   orion_state *state = space->machine().driver_data<orion_state>();
95   if ((data & 0x80)!=(state->m_orion128_video_mode & 0x80))
94   if ((data & 0x80)!=(m_orion128_video_mode & 0x80))
9695   {
9796      if ((data & 0x80)==0x80)
9897      {
99         if (state->m_video_mode_mask == 31)
98         if (m_video_mode_mask == 31)
10099         {
101            state->m_orion128_video_width = SCREEN_WIDTH_512;
102            orion_set_video_mode(space->machine(),512);
100            m_orion128_video_width = SCREEN_WIDTH_512;
101            orion_set_video_mode(machine(),512);
103102         }
104103         else
105104         {
106            state->m_orion128_video_width = SCREEN_WIDTH_480;
107            orion_set_video_mode(space->machine(),480);
105            m_orion128_video_width = SCREEN_WIDTH_480;
106            orion_set_video_mode(machine(),480);
108107         }
109108      }
110109      else
111110      {
112         state->m_orion128_video_width = SCREEN_WIDTH_384;
113         orion_set_video_mode(space->machine(),384);
111         m_orion128_video_width = SCREEN_WIDTH_384;
112         orion_set_video_mode(machine(),384);
114113      }
115114   }
116115
117   state->m_orion128_video_mode = data;
116   m_orion128_video_mode = data;
118117}
119118
120WRITE8_HANDLER ( orion128_video_page_w )
119WRITE8_MEMBER(orion_state::orion128_video_page_w)
121120{
122   orion_state *state = space->machine().driver_data<orion_state>();
123   if (state->m_orion128_video_page != data)
121   if (m_orion128_video_page != data)
124122   {
125      if ((data & 0x80)!=(state->m_orion128_video_page & 0x80))
123      if ((data & 0x80)!=(m_orion128_video_page & 0x80))
126124      {
127125         if ((data & 0x80)==0x80)
128126         {
129            if (state->m_video_mode_mask == 31)
127            if (m_video_mode_mask == 31)
130128            {
131               state->m_orion128_video_width = SCREEN_WIDTH_512;
132               orion_set_video_mode(space->machine(),512);
129               m_orion128_video_width = SCREEN_WIDTH_512;
130               orion_set_video_mode(machine(),512);
133131            }
134132            else
135133            {
136               state->m_orion128_video_width = SCREEN_WIDTH_480;
137               orion_set_video_mode(space->machine(),480);
134               m_orion128_video_width = SCREEN_WIDTH_480;
135               orion_set_video_mode(machine(),480);
138136            }
139137         }
140138         else
141139         {
142            state->m_orion128_video_width = SCREEN_WIDTH_384;
143            orion_set_video_mode(space->machine(),384);
140            m_orion128_video_width = SCREEN_WIDTH_384;
141            orion_set_video_mode(machine(),384);
144142         }
145143      }
146144   }
147   state->m_orion128_video_page = data;
145   m_orion128_video_page = data;
148146}
149147
150148
151WRITE8_HANDLER ( orion128_memory_page_w )
149WRITE8_MEMBER(orion_state::orion128_memory_page_w)
152150{
153   orion_state *state = space->machine().driver_data<orion_state>();
154   if (data!=state->m_orion128_memory_page )
151   if (data!=m_orion128_memory_page )
155152   {
156      memory_set_bankptr(space->machine(), "bank1", space->machine().device<ram_device>(RAM_TAG)->pointer() + (data & 3) * 0x10000);
157      state->m_orion128_memory_page = (data & 3);
153      memory_set_bankptr(machine(), "bank1", machine().device<ram_device>(RAM_TAG)->pointer() + (data & 3) * 0x10000);
154      m_orion128_memory_page = (data & 3);
158155   }
159156}
160157
r14963r14964
171168   radio86_init_keyboard(machine);
172169}
173170
174static WRITE8_HANDLER ( orion_disk_control_w )
171WRITE8_MEMBER(orion_state::orion_disk_control_w)
175172{
176   device_t *fdc = space->machine().device("wd1793");
173   device_t *fdc = machine().device("wd1793");
177174
178175   wd17xx_set_side(fdc,((data & 0x10) >> 4) ^ 1);
179176   wd17xx_set_drive(fdc,data & 3);
180177}
181178
182READ8_HANDLER ( orion128_floppy_r )
179READ8_MEMBER(orion_state::orion128_floppy_r)
183180{
184   device_t *fdc = space->machine().device("wd1793");
181   device_t *fdc = machine().device("wd1793");
185182
186183   switch(offset)
187184   {
r14963r14964
197194   return 0xff;
198195}
199196
200WRITE8_HANDLER ( orion128_floppy_w )
197WRITE8_MEMBER(orion_state::orion128_floppy_w)
201198{
202   device_t *fdc = space->machine().device("wd1793");
199   device_t *fdc = machine().device("wd1793");
203200
204201   switch(offset)
205202   {
r14963r14964
216213      case 0x20 : orion_disk_control_w(space, offset, data);break;
217214   }
218215}
219static READ8_HANDLER ( orionz80_floppy_rtc_r )
216READ8_MEMBER(orion_state::orionz80_floppy_rtc_r)
220217{
221218   if ((offset >= 0x60) && (offset <= 0x6f))
222219   {
223      return space->machine().device<mc146818_device>("rtc")->read(*space,offset-0x60);
220      return machine().device<mc146818_device>("rtc")->read(space,offset-0x60);
224221   }
225222   else
226223   {
r14963r14964
228225   }
229226}
230227
231static WRITE8_HANDLER ( orionz80_floppy_rtc_w )
228WRITE8_MEMBER(orion_state::orionz80_floppy_rtc_w)
232229{
233230   if ((offset >= 0x60) && (offset <= 0x6f))
234231   {
235      space->machine().device<mc146818_device>("rtc")->write(*space,offset-0x60,data);
232      machine().device<mc146818_device>("rtc")->write(space,offset-0x60,data);
236233   }
237234   else
238235   {
r14963r14964
247244   state->m_video_mode_mask = 7;
248245}
249246
250WRITE8_HANDLER ( orionz80_sound_w )
247WRITE8_MEMBER(orion_state::orionz80_sound_w)
251248{
252   orion_state *state = space->machine().driver_data<orion_state>();
253   device_t *speaker = space->machine().device(SPEAKER_TAG);
254   if (state->m_speaker == 0)
249   device_t *speaker = machine().device(SPEAKER_TAG);
250   if (m_speaker == 0)
255251   {
256      state->m_speaker = data;
252      m_speaker = data;
257253   }
258254   else
259255   {
260      state->m_speaker = 0 ;
256      m_speaker = 0 ;
261257   }
262   speaker_level_w(speaker,state->m_speaker);
258   speaker_level_w(speaker,m_speaker);
263259
264260}
265261
266static WRITE8_HANDLER ( orionz80_sound_fe_w )
262WRITE8_MEMBER(orion_state::orionz80_sound_fe_w)
267263{
268   device_t *speaker = space->machine().device(SPEAKER_TAG);
264   device_t *speaker = machine().device(SPEAKER_TAG);
269265   speaker_level_w(speaker,(data>>4) & 0x01);
270266}
271267
r14963r14964
294290
295291   if ((state->m_orionz80_dispatcher & 0x20) == 0)
296292   {
297      space->install_legacy_write_handler(0xf400, 0xf4ff, FUNC(orion128_system_w));
298      space->install_legacy_write_handler(0xf500, 0xf5ff, FUNC(orion128_romdisk_w));
299      space->install_legacy_write_handler(0xf700, 0xf7ff, FUNC(orionz80_floppy_rtc_w));
300      space->install_legacy_read_handler(0xf400, 0xf4ff, FUNC(orion128_system_r));
301      space->install_legacy_read_handler(0xf500, 0xf5ff, FUNC(orion128_romdisk_r));
302      space->install_legacy_read_handler(0xf700, 0xf7ff, FUNC(orionz80_floppy_rtc_r));
293      space->install_write_handler(0xf400, 0xf4ff, write8_delegate(FUNC(orion_state::orion128_system_w),state));
294      space->install_write_handler(0xf500, 0xf5ff, write8_delegate(FUNC(orion_state::orion128_romdisk_w),state));
295      space->install_write_handler(0xf700, 0xf7ff, write8_delegate(FUNC(orion_state::orionz80_floppy_rtc_w),state));
296      space->install_read_handler(0xf400, 0xf4ff, read8_delegate(FUNC(orion_state::orion128_system_r),state));
297      space->install_read_handler(0xf500, 0xf5ff, read8_delegate(FUNC(orion_state::orion128_romdisk_r),state));
298      space->install_read_handler(0xf700, 0xf7ff, read8_delegate(FUNC(orion_state::orionz80_floppy_rtc_r),state));
303299
304      space->install_legacy_write_handler(0xf800, 0xf8ff, FUNC(orion128_video_mode_w));
305      space->install_legacy_write_handler(0xf900, 0xf9ff, FUNC(orionz80_memory_page_w));
306      space->install_legacy_write_handler(0xfa00, 0xfaff, FUNC(orion128_video_page_w));
307      space->install_legacy_write_handler(0xfb00, 0xfbff, FUNC(orionz80_dispatcher_w));
300      space->install_write_handler(0xf800, 0xf8ff, write8_delegate(FUNC(orion_state::orion128_video_mode_w),state));
301      space->install_write_handler(0xf900, 0xf9ff, write8_delegate(FUNC(orion_state::orionz80_memory_page_w),state));
302      space->install_write_handler(0xfa00, 0xfaff, write8_delegate(FUNC(orion_state::orion128_video_page_w),state));
303      space->install_write_handler(0xfb00, 0xfbff, write8_delegate(FUNC(orion_state::orionz80_dispatcher_w),state));
308304      space->unmap_write(0xfc00, 0xfeff);
309      space->install_legacy_write_handler(0xff00, 0xffff, FUNC(orionz80_sound_w));
305      space->install_write_handler(0xff00, 0xffff, write8_delegate(FUNC(orion_state::orionz80_sound_w),state));
310306
311307      memory_set_bankptr(machine, "bank3", machine.device<ram_device>(RAM_TAG)->pointer() + 0xf000);
312308      memory_set_bankptr(machine, "bank5", machine.region("maincpu")->base() + 0xf800);
r14963r14964
321317   }
322318}
323319
324WRITE8_HANDLER ( orionz80_memory_page_w )
320WRITE8_MEMBER(orion_state::orionz80_memory_page_w)
325321{
326   orion_state *state = space->machine().driver_data<orion_state>();
327   state->m_orionz80_memory_page = data & 7;
328   orionz80_switch_bank(space->machine());
322   m_orionz80_memory_page = data & 7;
323   orionz80_switch_bank(machine());
329324}
330325
331WRITE8_HANDLER ( orionz80_dispatcher_w )
326WRITE8_MEMBER(orion_state::orionz80_dispatcher_w)
332327{
333   orion_state *state = space->machine().driver_data<orion_state>();
334   state->m_orionz80_dispatcher = data;
335   orionz80_switch_bank(space->machine());
328   m_orionz80_dispatcher = data;
329   orionz80_switch_bank(machine());
336330}
337331
338332MACHINE_RESET ( orionz80 )
r14963r14964
344338   space->install_write_bank(0x4000, 0xefff, "bank2");
345339   space->install_write_bank(0xf000, 0xf3ff, "bank3");
346340
347   space->install_legacy_write_handler(0xf400, 0xf4ff, FUNC(orion128_system_w));
348   space->install_legacy_write_handler(0xf500, 0xf5ff, FUNC(orion128_romdisk_w));
349   space->install_legacy_write_handler(0xf700, 0xf7ff, FUNC(orionz80_floppy_rtc_w));
350   space->install_legacy_read_handler(0xf400, 0xf4ff, FUNC(orion128_system_r));
351   space->install_legacy_read_handler(0xf500, 0xf5ff, FUNC(orion128_romdisk_r));
352   space->install_legacy_read_handler(0xf700, 0xf7ff, FUNC(orionz80_floppy_rtc_r));
341   space->install_write_handler(0xf400, 0xf4ff, write8_delegate(FUNC(orion_state::orion128_system_w),state));
342   space->install_write_handler(0xf500, 0xf5ff, write8_delegate(FUNC(orion_state::orion128_romdisk_w),state));
343   space->install_write_handler(0xf700, 0xf7ff, write8_delegate(FUNC(orion_state::orionz80_floppy_rtc_w),state));
344   space->install_read_handler(0xf400, 0xf4ff, read8_delegate(FUNC(orion_state::orion128_system_r),state));
345   space->install_read_handler(0xf500, 0xf5ff, read8_delegate(FUNC(orion_state::orion128_romdisk_r),state));
346   space->install_read_handler(0xf700, 0xf7ff, read8_delegate(FUNC(orion_state::orionz80_floppy_rtc_r),state));
353347
354   space->install_legacy_write_handler(0xf800, 0xf8ff, FUNC(orion128_video_mode_w));
355   space->install_legacy_write_handler(0xf900, 0xf9ff, FUNC(orionz80_memory_page_w));
356   space->install_legacy_write_handler(0xfa00, 0xfaff, FUNC(orion128_video_page_w));
357   space->install_legacy_write_handler(0xfb00, 0xfbff, FUNC(orionz80_dispatcher_w));
348   space->install_write_handler(0xf800, 0xf8ff, write8_delegate(FUNC(orion_state::orion128_video_mode_w),state));
349   space->install_write_handler(0xf900, 0xf9ff, write8_delegate(FUNC(orion_state::orionz80_memory_page_w),state));
350   space->install_write_handler(0xfa00, 0xfaff, write8_delegate(FUNC(orion_state::orion128_video_page_w),state));
351   space->install_write_handler(0xfb00, 0xfbff, write8_delegate(FUNC(orion_state::orionz80_dispatcher_w),state));
358352   space->unmap_write(0xfc00, 0xfeff);
359   space->install_legacy_write_handler(0xff00, 0xffff, FUNC(orionz80_sound_w));
353   space->install_write_handler(0xff00, 0xffff, write8_delegate(FUNC(orion_state::orionz80_sound_w),state));
360354
361355
362356   memory_set_bankptr(machine, "bank1", machine.region("maincpu")->base() + 0xf800);
r14963r14964
384378   }
385379}
386380
387READ8_HANDLER ( orionz80_io_r )
381READ8_MEMBER(orion_state::orionz80_io_r)
388382{
389383   if (offset == 0xFFFD)
390384   {
391      return ay8910_r (space->machine().device("ay8912"), 0);
385      return ay8910_r (machine().device("ay8912"), 0);
392386   }
393387   return 0xff;
394388}
395389
396WRITE8_HANDLER ( orionz80_io_w )
390WRITE8_MEMBER(orion_state::orionz80_io_w)
397391{
398392   switch (offset & 0xff)
399393   {
r14963r14964
406400   }
407401   switch(offset)
408402   {
409      case 0xfffd : ay8910_address_w(space->machine().device("ay8912"), 0, data);
403      case 0xfffd : ay8910_address_w(machine().device("ay8912"), 0, data);
410404                 break;
411405      case 0xbffd :
412      case 0xbefd : ay8910_data_w(space->machine().device("ay8912"), 0, data);
406      case 0xbefd : ay8910_data_w(machine().device("ay8912"), 0, data);
413407                 break;
414408   }
415409}
r14963r14964
418412
419413
420414
421static WRITE8_HANDLER ( orionpro_memory_page_w );
422415
416
423417static void orionpro_bank_switch(running_machine &machine)
424418{
425419   orion_state *state = machine.driver_data<orion_state>();
r14963r14964
487481   {
488482      memory_set_bankptr(machine, "bank6", ram + 0x10000 * 0 + 0xf000);
489483
490      space->install_legacy_write_handler(0xf400, 0xf4ff, FUNC(orion128_system_w));
491      space->install_legacy_write_handler(0xf500, 0xf5ff, FUNC(orion128_romdisk_w));
484      space->install_write_handler(0xf400, 0xf4ff, write8_delegate(FUNC(orion_state::orion128_system_w),state));
485      space->install_write_handler(0xf500, 0xf5ff, write8_delegate(FUNC(orion_state::orion128_romdisk_w),state));
492486      space->unmap_write(0xf600, 0xf6ff);
493      space->install_legacy_write_handler(0xf700, 0xf7ff, FUNC(orion128_floppy_w));
494      space->install_legacy_read_handler(0xf400, 0xf4ff, FUNC(orion128_system_r));
495      space->install_legacy_read_handler(0xf500, 0xf5ff, FUNC(orion128_romdisk_r));
487      space->install_write_handler(0xf700, 0xf7ff, write8_delegate(FUNC(orion_state::orion128_floppy_w),state));
488      space->install_read_handler(0xf400, 0xf4ff, read8_delegate(FUNC(orion_state::orion128_system_r),state));
489      space->install_read_handler(0xf500, 0xf5ff, read8_delegate(FUNC(orion_state::orion128_romdisk_r),state));
496490      space->unmap_read(0xf600, 0xf6ff);
497      space->install_legacy_read_handler(0xf700, 0xf7ff, FUNC(orion128_floppy_r));
491      space->install_read_handler(0xf700, 0xf7ff, read8_delegate(FUNC(orion_state::orion128_floppy_r),state));
498492
499      space->install_legacy_write_handler(0xf800, 0xf8ff, FUNC(orion128_video_mode_w));
500      space->install_legacy_write_handler(0xf900, 0xf9ff, FUNC(orionpro_memory_page_w));
501      space->install_legacy_write_handler(0xfa00, 0xfaff, FUNC(orion128_video_page_w));
493      space->install_write_handler(0xf800, 0xf8ff, write8_delegate(FUNC(orion_state::orion128_video_mode_w),state));
494      space->install_write_handler(0xf900, 0xf9ff, write8_delegate(FUNC(orion_state::orionpro_memory_page_w),state));
495      space->install_write_handler(0xfa00, 0xfaff, write8_delegate(FUNC(orion_state::orion128_video_page_w),state));
502496      space->unmap_write(0xfb00, 0xfeff);
503      space->install_legacy_write_handler(0xff00, 0xffff, FUNC(orionz80_sound_w));
497      space->install_write_handler(0xff00, 0xffff, write8_delegate(FUNC(orion_state::orionz80_sound_w),state));
504498
505499
506500      memory_set_bankptr(machine, "bank8", ram + 0x10000 * 0 + 0xf800);
r14963r14964
522516   }
523517}
524518
525static WRITE8_HANDLER ( orionpro_memory_page_w )
519WRITE8_MEMBER(orion_state::orionpro_memory_page_w)
526520{
527   orion_state *state = space->machine().driver_data<orion_state>();
528   state->m_orionpro_128_page = data;
529   orionpro_bank_switch(space->machine());
521   m_orionpro_128_page = data;
522   orionpro_bank_switch(machine());
530523}
531524
532525MACHINE_RESET ( orionpro )
r14963r14964
555548   state->m_orionpro_pseudo_color = 0;
556549}
557550
558READ8_HANDLER ( orionpro_io_r )
551READ8_MEMBER(orion_state::orionpro_io_r)
559552{
560   orion_state *state = space->machine().driver_data<orion_state>();
561   device_t *fdc = space->machine().device("wd1793");
553   device_t *fdc = machine().device("wd1793");
562554
563555   switch (offset & 0xff)
564556   {
565557      case 0x00 : return 0x56;
566      case 0x04 : return state->m_orionpro_ram0_segment;
567      case 0x05 : return state->m_orionpro_ram1_segment;
568      case 0x06 : return state->m_orionpro_ram2_segment;
569      case 0x08 : return state->m_orionpro_page;
570      case 0x09 : return state->m_orionpro_rom2_segment;
571      case 0x0a : return state->m_orionpro_dispatcher;
558      case 0x04 : return m_orionpro_ram0_segment;
559      case 0x05 : return m_orionpro_ram1_segment;
560      case 0x06 : return m_orionpro_ram2_segment;
561      case 0x08 : return m_orionpro_page;
562      case 0x09 : return m_orionpro_rom2_segment;
563      case 0x0a : return m_orionpro_dispatcher;
572564      case 0x10 : return wd17xx_status_r(fdc,0);
573565      case 0x11 : return wd17xx_track_r(fdc,0);
574566      case 0x12 : return wd17xx_sector_r(fdc,0);
r14963r14964
585577   }
586578   if (offset == 0xFFFD)
587579   {
588      return ay8910_r (space->machine().device("ay8912"), 0);
580      return ay8910_r (machine().device("ay8912"), 0);
589581   }
590582   return 0xff;
591583}
592584
593WRITE8_HANDLER ( orionpro_io_w )
585WRITE8_MEMBER(orion_state::orionpro_io_w)
594586{
595   orion_state *state = space->machine().driver_data<orion_state>();
596   device_t *fdc = space->machine().device("wd1793");
587   device_t *fdc = machine().device("wd1793");
597588
598589   switch (offset & 0xff)
599590   {
600      case 0x04 : state->m_orionpro_ram0_segment = data; orionpro_bank_switch(space->machine()); break;
601      case 0x05 : state->m_orionpro_ram1_segment = data; orionpro_bank_switch(space->machine()); break;
602      case 0x06 : state->m_orionpro_ram2_segment = data; orionpro_bank_switch(space->machine()); break;
603      case 0x08 : state->m_orionpro_page = data;        orionpro_bank_switch(space->machine()); break;
604      case 0x09 : state->m_orionpro_rom2_segment = data; orionpro_bank_switch(space->machine()); break;
605      case 0x0a : state->m_orionpro_dispatcher = data;   orionpro_bank_switch(space->machine()); break;
591      case 0x04 : m_orionpro_ram0_segment = data; orionpro_bank_switch(machine()); break;
592      case 0x05 : m_orionpro_ram1_segment = data; orionpro_bank_switch(machine()); break;
593      case 0x06 : m_orionpro_ram2_segment = data; orionpro_bank_switch(machine()); break;
594      case 0x08 : m_orionpro_page = data;        orionpro_bank_switch(machine()); break;
595      case 0x09 : m_orionpro_rom2_segment = data; orionpro_bank_switch(machine()); break;
596      case 0x0a : m_orionpro_dispatcher = data;   orionpro_bank_switch(machine()); break;
606597      case 0x10 : wd17xx_command_w(fdc,0,data); break;
607598      case 0x11 : wd17xx_track_w(fdc,0,data);break;
608599      case 0x12 : wd17xx_sector_w(fdc,0,data);break;
r14963r14964
618609      case 0x2a : orion128_romdisk_w(space,2,data); break;
619610      case 0x2b : orion128_romdisk_w(space,3,data); break;
620611      case 0xf8 : orion128_video_mode_w(space,0,data);break;
621      case 0xf9 : state->m_orionpro_128_page = data;     orionpro_bank_switch(space->machine()); break;
612      case 0xf9 : m_orionpro_128_page = data;     orionpro_bank_switch(machine()); break;
622613      case 0xfa : orion128_video_page_w(space,0,data);break;
623      case 0xfc : state->m_orionpro_pseudo_color = data;break;
614      case 0xfc : m_orionpro_pseudo_color = data;break;
624615      case 0xfe : orionz80_sound_fe_w(space,0,data);break;
625616      case 0xff : orionz80_sound_w(space,0,data);break;
626617   }
627618   switch(offset)
628619   {
629      case 0xfffd : ay8910_address_w(space->machine().device("ay8912"), 0, data);
620      case 0xfffd : ay8910_address_w(machine().device("ay8912"), 0, data);
630621                 break;
631622      case 0xbffd :
632      case 0xbefd : ay8910_data_w(space->machine().device("ay8912"), 0, data);
623      case 0xbefd : ay8910_data_w(machine().device("ay8912"), 0, data);
633624                 break;
634625   }
635626}
src/mess/machine/a7800.c
r14963r14964
393393}
394394
395395
396WRITE8_HANDLER( a7800_RAM0_w )
396WRITE8_MEMBER(a7800_state::a7800_RAM0_w)
397397{
398   a7800_state *state = space->machine().driver_data<a7800_state>();
399   state->m_ROM[0x2040 + offset] = data;
400   state->m_ROM[0x40 + offset] = data;
398   m_ROM[0x2040 + offset] = data;
399   m_ROM[0x40 + offset] = data;
401400}
402401
403402
404WRITE8_HANDLER( a7800_cart_w )
403WRITE8_MEMBER(a7800_state::a7800_cart_w)
405404{
406   a7800_state *state = space->machine().driver_data<a7800_state>();
407   UINT8 *memory = space->machine().region("maincpu")->base();
405   UINT8 *memory = machine().region("maincpu")->base();
408406
409407   if(offset < 0x4000)
410408   {
411      if(state->m_cart_type & 0x04)
409      if(m_cart_type & 0x04)
412410      {
413         state->m_ROM[0x4000 + offset] = data;
411         m_ROM[0x4000 + offset] = data;
414412      }
415      else if(state->m_cart_type & 0x01)
413      else if(m_cart_type & 0x01)
416414      {
417         device_t *pokey = space->machine().device("pokey");
415         device_t *pokey = machine().device("pokey");
418416         pokey_w(pokey, offset, data);
419417      }
420418      else
r14963r14964
423421      }
424422   }
425423
426   if(( state->m_cart_type & 0x02 ) &&( offset >= 0x4000 ) )
424   if(( m_cart_type & 0x02 ) &&( offset >= 0x4000 ) )
427425   {
428426      /* fix for 64kb supercart */
429      if( state->m_cart_size == 0x10000 )
427      if( m_cart_size == 0x10000 )
430428      {
431429         data &= 0x03;
432430      }
r14963r14964
434432      {
435433         data &= 0x07;
436434      }
437      memory_set_bankptr(space->machine(), "bank2",memory + 0x10000 + (data << 14));
438      memory_set_bankptr(space->machine(), "bank3",memory + 0x12000 + (data << 14));
435      memory_set_bankptr(machine(), "bank2",memory + 0x10000 + (data << 14));
436      memory_set_bankptr(machine(), "bank3",memory + 0x12000 + (data << 14));
439437   /*  logerror("BANK SEL: %d\n",data); */
440438   }
441   else if(( state->m_cart_type == MBANK_TYPE_ABSOLUTE ) &&( offset == 0x4000 ) )
439   else if(( m_cart_type == MBANK_TYPE_ABSOLUTE ) &&( offset == 0x4000 ) )
442440   {
443441      /* F18 Hornet */
444442      /*logerror( "F18 BANK SEL: %d\n", data );*/
445443      if( data & 1 )
446444      {
447         memory_set_bankptr(space->machine(), "bank1",memory + 0x10000 );
445         memory_set_bankptr(machine(), "bank1",memory + 0x10000 );
448446      }
449447      else if( data & 2 )
450448      {
451         memory_set_bankptr(space->machine(), "bank1",memory + 0x14000 );
449         memory_set_bankptr(machine(), "bank1",memory + 0x14000 );
452450      }
453451   }
454   else if(( state->m_cart_type == MBANK_TYPE_ACTIVISION ) &&( offset >= 0xBF80 ) )
452   else if(( m_cart_type == MBANK_TYPE_ACTIVISION ) &&( offset >= 0xBF80 ) )
455453   {
456454      /* Activision */
457455      data = offset & 7;
458456
459457      /*logerror( "Activision BANK SEL: %d\n", data );*/
460458
461      memory_set_bankptr(space->machine(),  "bank3", memory + 0x10000 + ( data << 14 ) );
462      memory_set_bankptr(space->machine(),  "bank4", memory + 0x12000 + ( data << 14 ) );
459      memory_set_bankptr(machine(),  "bank3", memory + 0x10000 + ( data << 14 ) );
460      memory_set_bankptr(machine(),  "bank4", memory + 0x12000 + ( data << 14 ) );
463461   }
464462}
465463
r14963r14964
468466    TIA
469467***************************************************************************/
470468
471READ8_HANDLER( a7800_TIA_r )
469READ8_MEMBER(a7800_state::a7800_TIA_r)
472470{
473   a7800_state *state = space->machine().driver_data<a7800_state>();
474471   switch(offset & 0x0f)
475472   {
476473      case 0x00:
r14963r14964
485482           still return a reasonable value */
486483         return 0x00;
487484      case 0x08:
488           return((input_port_read(space->machine(), "buttons") & 0x02) << 6);
485           return((input_port_read(machine(), "buttons") & 0x02) << 6);
489486      case 0x09:
490           return((input_port_read(space->machine(), "buttons") & 0x08) << 4);
487           return((input_port_read(machine(), "buttons") & 0x08) << 4);
491488      case 0x0A:
492           return((input_port_read(space->machine(), "buttons") & 0x01) << 7);
489           return((input_port_read(machine(), "buttons") & 0x01) << 7);
493490      case 0x0B:
494           return((input_port_read(space->machine(), "buttons") & 0x04) << 5);
491           return((input_port_read(machine(), "buttons") & 0x04) << 5);
495492      case 0x0c:
496         if(((input_port_read(space->machine(), "buttons") & 0x08) ||(input_port_read(space->machine(), "buttons") & 0x02)) && state->m_p1_one_button)
493         if(((input_port_read(machine(), "buttons") & 0x08) ||(input_port_read(machine(), "buttons") & 0x02)) && m_p1_one_button)
497494            return 0x00;
498495         else
499496            return 0x80;
500497      case 0x0d:
501         if(((input_port_read(space->machine(), "buttons") & 0x01) ||(input_port_read(space->machine(), "buttons") & 0x04)) && state->m_p2_one_button)
498         if(((input_port_read(machine(), "buttons") & 0x01) ||(input_port_read(machine(), "buttons") & 0x04)) && m_p2_one_button)
502499            return 0x00;
503500         else
504501            return 0x80;
r14963r14964
510507}
511508
512509
513WRITE8_HANDLER( a7800_TIA_w )
510WRITE8_MEMBER(a7800_state::a7800_TIA_w)
514511{
515   a7800_state *state = space->machine().driver_data<a7800_state>();
516512   switch(offset) {
517513   case 0x01:
518514      if(data & 0x01)
519515      {
520         state->m_maria_flag=1;
516         m_maria_flag=1;
521517      }
522      if(!state->m_ctrl_lock)
518      if(!m_ctrl_lock)
523519      {
524         state->m_ctrl_lock = data & 0x01;
525         state->m_ctrl_reg = data;
520         m_ctrl_lock = data & 0x01;
521         m_ctrl_reg = data;
526522
527523         if (data & 0x04)
528            memcpy( state->m_ROM + 0xC000, state->m_cart_bkup, 0x4000 );
524            memcpy( m_ROM + 0xC000, m_cart_bkup, 0x4000 );
529525         else
530            memcpy( state->m_ROM + 0xC000, state->m_bios_bkup, 0x4000 );
526            memcpy( m_ROM + 0xC000, m_bios_bkup, 0x4000 );
531527      }
532528      break;
533529   }
534   tia_sound_w(space->machine().device("tia"), offset, data);
535   state->m_ROM[offset] = data;
530   tia_sound_w(machine().device("tia"), offset, data);
531   m_ROM[offset] = data;
536532}
src/mess/machine/nascom1.c
r14963r14964
6060};
6161
6262
63READ8_HANDLER( nascom2_fdc_select_r )
63READ8_MEMBER(nascom1_state::nascom2_fdc_select_r)
6464{
65   nascom1_state *state = space->machine().driver_data<nascom1_state>();
66   return state->m_nascom2_fdc.select | 0xa0;
65   return m_nascom2_fdc.select | 0xa0;
6766}
6867
6968
70WRITE8_HANDLER( nascom2_fdc_select_w )
69WRITE8_MEMBER(nascom1_state::nascom2_fdc_select_w)
7170{
72   nascom1_state *state = space->machine().driver_data<nascom1_state>();
73   device_t *fdc = space->machine().device("wd1793");
74   state->m_nascom2_fdc.select = data;
71   device_t *fdc = machine().device("wd1793");
72   m_nascom2_fdc.select = data;
7573
7674   logerror("nascom2_fdc_select_w: %02x\n", data);
7775
r14963r14964
9088 * D7 -- WD1793 DRQ
9189 *
9290 */
93READ8_HANDLER( nascom2_fdc_status_r )
91READ8_MEMBER(nascom1_state::nascom2_fdc_status_r)
9492{
95   nascom1_state *state = space->machine().driver_data<nascom1_state>();
96   return (state->m_nascom2_fdc.drq << 7) | state->m_nascom2_fdc.irq;
93   return (m_nascom2_fdc.drq << 7) | m_nascom2_fdc.irq;
9794}
9895
9996/*************************************
r14963r14964
10299 *
103100 *************************************/
104101
105READ8_HANDLER ( nascom1_port_00_r )
102READ8_MEMBER(nascom1_state::nascom1_port_00_r)
106103{
107   nascom1_state *state = space->machine().driver_data<nascom1_state>();
108104   static const char *const keynames[] = { "KEY0", "KEY1", "KEY2", "KEY3", "KEY4", "KEY5", "KEY6", "KEY7", "KEY8" };
109105
110   if (state->m_portstat.stat_count < 9)
111      return (input_port_read(space->machine(), keynames[state->m_portstat.stat_count]) | ~0x7f);
106   if (m_portstat.stat_count < 9)
107      return (input_port_read(machine(), keynames[m_portstat.stat_count]) | ~0x7f);
112108
113109   return (0xff);
114110}
115111
116112
117WRITE8_HANDLER( nascom1_port_00_w )
113WRITE8_MEMBER(nascom1_state::nascom1_port_00_w)
118114{
119   nascom1_state *state = space->machine().driver_data<nascom1_state>();
120115
121   space->machine().device<cassette_image_device>(CASSETTE_TAG)->change_state(
116   machine().device<cassette_image_device>(CASSETTE_TAG)->change_state(
122117      ( data & 0x10 ) ? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED,CASSETTE_MASK_MOTOR );
123118
124119   if (!(data & NASCOM1_KEY_RESET))
125120   {
126      if (state->m_portstat.stat_flags & NASCOM1_KEY_RESET)
127         state->m_portstat.stat_count = 0;
121      if (m_portstat.stat_flags & NASCOM1_KEY_RESET)
122         m_portstat.stat_count = 0;
128123   }
129124   else
130      state->m_portstat.stat_flags = NASCOM1_KEY_RESET;
125      m_portstat.stat_flags = NASCOM1_KEY_RESET;
131126
132127   if (!(data & NASCOM1_KEY_INCR))
133128   {
134      if (state->m_portstat.stat_flags & NASCOM1_KEY_INCR)
135         state->m_portstat.stat_count++;
129      if (m_portstat.stat_flags & NASCOM1_KEY_INCR)
130         m_portstat.stat_count++;
136131   }
137132   else
138      state->m_portstat.stat_flags = NASCOM1_KEY_INCR;
133      m_portstat.stat_flags = NASCOM1_KEY_INCR;
139134}
140135
141136
r14963r14964
148143 *************************************/
149144
150145
151READ8_HANDLER( nascom1_port_01_r )
146READ8_MEMBER(nascom1_state::nascom1_port_01_r)
152147{
153   nascom1_state *state = space->machine().driver_data<nascom1_state>();
154   return ay31015_get_received_data( state->m_hd6402 );
148   return ay31015_get_received_data( m_hd6402 );
155149}
156150
157151
158WRITE8_HANDLER( nascom1_port_01_w )
152WRITE8_MEMBER(nascom1_state::nascom1_port_01_w)
159153{
160   nascom1_state *state = space->machine().driver_data<nascom1_state>();
161   ay31015_set_transmit_data( state->m_hd6402, data );
154   ay31015_set_transmit_data( m_hd6402, data );
162155}
163156
164READ8_HANDLER( nascom1_port_02_r )
157READ8_MEMBER(nascom1_state::nascom1_port_02_r)
165158{
166   nascom1_state *state = space->machine().driver_data<nascom1_state>();
167159   UINT8 data = 0x31;
168160
169   ay31015_set_input_pin( state->m_hd6402, AY31015_SWE, 0 );
170   data |= ay31015_get_output_pin( state->m_hd6402, AY31015_OR ) ? 0x02 : 0;
171   data |= ay31015_get_output_pin( state->m_hd6402, AY31015_PE ) ? 0x04 : 0;
172   data |= ay31015_get_output_pin( state->m_hd6402, AY31015_FE ) ? 0x08 : 0;
173   data |= ay31015_get_output_pin( state->m_hd6402, AY31015_TBMT ) ? 0x40 : 0;
174   data |= ay31015_get_output_pin( state->m_hd6402, AY31015_DAV ) ? 0x80 : 0;
175   ay31015_set_input_pin( state->m_hd6402, AY31015_SWE, 1 );
161   ay31015_set_input_pin( m_hd6402, AY31015_SWE, 0 );
162   data |= ay31015_get_output_pin( m_hd6402, AY31015_OR ) ? 0x02 : 0;
163   data |= ay31015_get_output_pin( m_hd6402, AY31015_PE ) ? 0x04 : 0;
164   data |= ay31015_get_output_pin( m_hd6402, AY31015_FE ) ? 0x08 : 0;
165   data |= ay31015_get_output_pin( m_hd6402, AY31015_TBMT ) ? 0x40 : 0;
166   data |= ay31015_get_output_pin( m_hd6402, AY31015_DAV ) ? 0x80 : 0;
167   ay31015_set_input_pin( m_hd6402, AY31015_SWE, 1 );
176168
177169   return data;
178170}
src/mess/machine/microtan.c
r14963r14964
345345      via_0->write_cb2(1);
346346}
347347
348READ8_HANDLER( microtan_sound_r )
348READ8_MEMBER(microtan_state::microtan_sound_r)
349349{
350350    int data = 0xff;
351351    LOG(("microtan_sound_r: -> %02x\n", data));
352352    return data;
353353}
354354
355WRITE8_HANDLER( microtan_sound_w )
355WRITE8_MEMBER(microtan_state::microtan_sound_w)
356356{
357357    LOG(("microtan_sound_w: <- %02x\n", data));
358358}
359359
360360
361 READ8_HANDLER ( microtan_bffx_r )
361READ8_MEMBER(microtan_state::microtan_bffx_r)
362362{
363   microtan_state *state = space->machine().driver_data<microtan_state>();
364363    int data = 0xff;
365364    switch( offset & 3 )
366365    {
367366    case  0: /* BFF0: read enables chunky graphics */
368        state->m_chunky_graphics = 1;
367        m_chunky_graphics = 1;
369368        LOG(("microtan_bff0_r: -> %02x (chunky graphics on)\n", data));
370369        break;
371370    case  1: /* BFF1: read undefined (?) */
r14963r14964
375374        LOG(("microtan_bff2_r: -> %02x\n", data));
376375        break;
377376    default: /* BFF3: read keyboard ASCII value */
378        data = state->m_keyboard_ascii;
377        data = m_keyboard_ascii;
379378        LOG(("microtan_bff3_r: -> %02x (keyboard ASCII)\n", data));
380379    }
381380    return data;
r14963r14964
388387    cputag_set_input_line(machine, "maincpu", INPUT_LINE_NMI, PULSE_LINE);
389388}
390389
391WRITE8_HANDLER ( microtan_bffx_w )
390WRITE8_MEMBER(microtan_state::microtan_bffx_w)
392391{
393   microtan_state *state = space->machine().driver_data<microtan_state>();
394392    switch( offset & 3 )
395393    {
396394    case 0: /* BFF0: write reset keyboard interrupt flag */
397395        /* This removes bit 7 from the ASCII value of the last key pressed. */
398396        LOG(("microtan_bff0_w: %d <- %02x (keyboard IRQ clear )\n", offset, data));
399        state->m_keyboard_ascii &= ~0x80;
400        state->m_kbd_irq_line = CLEAR_LINE;
401        microtan_set_irq_line(space->machine());
397        m_keyboard_ascii &= ~0x80;
398        m_kbd_irq_line = CLEAR_LINE;
399        microtan_set_irq_line(machine());
402400        break;
403401    case 1: /* BFF1: write delayed NMI */
404402        LOG(("microtan_bff1_w: %d <- %02x (delayed NMI)\n", offset, data));
405        space->machine().scheduler().timer_set(space->machine().device<cpu_device>("maincpu")->cycles_to_attotime(8), FUNC(microtan_pulse_nmi));
403        machine().scheduler().timer_set(machine().device<cpu_device>("maincpu")->cycles_to_attotime(8), FUNC(microtan_pulse_nmi));
406404        break;
407405    case 2: /* BFF2: write keypad column write (what is this meant for?) */
408406        LOG(("microtan_bff2_w: %d <- %02x (keypad column)\n", offset, data));
409        state->m_keypad_column = data;
407        m_keypad_column = data;
410408        break;
411409    default: /* BFF3: write disable chunky graphics */
412410        LOG(("microtan_bff3_w: %d <- %02x (chunky graphics off)\n", offset, data));
413        state->m_chunky_graphics = 0;
411        m_chunky_graphics = 0;
414412    }
415413}
416414
src/mess/machine/poly88.c
r14963r14964
1919   device_set_input_line(machine.device("maincpu"), 0, HOLD_LINE);
2020}
2121
22WRITE8_HANDLER(poly88_baud_rate_w)
22WRITE8_MEMBER(poly88_state::poly88_baud_rate_w)
2323{
24   poly88_state *state = space->machine().driver_data<poly88_state>();
2524   logerror("poly88_baud_rate_w %02x\n",data);
26   state->m_usart_timer = space->machine().scheduler().timer_alloc(FUNC(poly88_usart_timer_callback));
27   state->m_usart_timer->adjust(attotime::zero, 0, attotime::from_hz(300));
25   m_usart_timer = machine().scheduler().timer_alloc(FUNC(poly88_usart_timer_callback));
26   m_usart_timer->adjust(attotime::zero, 0, attotime::from_hz(300));
2827
2928}
3029
r14963r14964
246245   DEVCB_NULL
247246};
248247
249READ8_HANDLER(poly88_keyboard_r)
248READ8_MEMBER(poly88_state::poly88_keyboard_r)
250249{
251   poly88_state *state = space->machine().driver_data<poly88_state>();
252   UINT8 retVal = state->m_last_code;
253   cputag_set_input_line(space->machine(), "maincpu", 0, CLEAR_LINE);
254   state->m_last_code = 0x00;
250   UINT8 retVal = m_last_code;
251   cputag_set_input_line(machine(), "maincpu", 0, CLEAR_LINE);
252   m_last_code = 0x00;
255253   return retVal;
256254}
257255
258WRITE8_HANDLER(poly88_intr_w)
256WRITE8_MEMBER(poly88_state::poly88_intr_w)
259257{
260   cputag_set_input_line(space->machine(), "maincpu", 0, CLEAR_LINE);
258   cputag_set_input_line(machine(), "maincpu", 0, CLEAR_LINE);
261259}
262260
263261SNAPSHOT_LOAD( poly88 )
src/mess/machine/samcoupe.c
r14963r14964
137137}
138138
139139
140WRITE8_HANDLER( samcoupe_ext_mem_w )
140WRITE8_MEMBER(samcoupe_state::samcoupe_ext_mem_w)
141141{
142   samcoupe_state *state = space->machine().driver_data<samcoupe_state>();
143   address_space *space_program = space->machine().device("maincpu")->memory().space(AS_PROGRAM);
142   address_space *space_program = machine().device("maincpu")->memory().space(AS_PROGRAM);
144143
145144   if (offset & 1)
146      state->m_hext = data;
145      m_hext = data;
147146   else
148      state->m_lext = data;
147      m_lext = data;
149148
150149   /* external RAM enabled? */
151   if (state->m_hmpr & HMPR_MCNTRL)
150   if (m_hmpr & HMPR_MCNTRL)
152151   {
153152      samcoupe_install_ext_mem(space_program);
154153   }
src/mess/machine/primo.c
r14963r14964
7676
7777*******************************************************************************/
7878
79READ8_HANDLER( primo_be_1_r )
79READ8_MEMBER(primo_state::primo_be_1_r)
8080{
8181   UINT8 data = 0x00;
8282   static const char *const portnames[] = { "IN0", "IN1", "IN2", "IN3" };
r14963r14964
8484   // bit 7, 6 - not used
8585
8686   // bit 5 - VBLANK
87   data |= (space->machine().primary_screen->vblank()) ? 0x20 : 0x00;
87   data |= (machine().primary_screen->vblank()) ? 0x20 : 0x00;
8888
8989   // bit 4 - I4 (external bus)
9090
9191   // bit 3 - I3 (external bus)
9292
9393   // bit 2 - cassette
94   data |= ((space->machine().device<cassette_image_device>(CASSETTE_TAG))->input() < 0.1) ? 0x04 : 0x00;
94   data |= ((machine().device<cassette_image_device>(CASSETTE_TAG))->input() < 0.1) ? 0x04 : 0x00;
9595
9696   // bit 1 - reset button
97   data |= (input_port_read(space->machine(), "RESET")) ? 0x02 : 0x00;
97   data |= (input_port_read(machine(), "RESET")) ? 0x02 : 0x00;
9898
9999   // bit 0 - keyboard
100   data |= (input_port_read(space->machine(), portnames[(offset & 0x0030) >> 4]) >> (offset&0x000f)) & 0x0001 ? 0x01 : 0x00;
100   data |= (input_port_read(machine(), portnames[(offset & 0x0030) >> 4]) >> (offset&0x000f)) & 0x0001 ? 0x01 : 0x00;
101101
102102   return data;
103103}
104104
105READ8_HANDLER( primo_be_2_r )
105READ8_MEMBER(primo_state::primo_be_2_r)
106106{
107   primo_state *state = space->machine().driver_data<primo_state>();
108107   UINT8 data = 0xff;
109108
110109   // bit 7, 6 - not used
111110
112111   // bit 5 - SCLK
113   if (!state->m_iec->clk_r())
112   if (!m_iec->clk_r())
114113      data &= ~0x20;
115114
116115   // bit 4 - SDATA
117   if (!state->m_iec->data_r())
116   if (!m_iec->data_r())
118117      data &= ~0x10;
119118
120119   // bit 3 - SRQ
121   if (!state->m_iec->srq_r())
120   if (!m_iec->srq_r())
122121      data &= ~0x08;
123122
124123   // bit 2 - joystic 2 (not implemeted yet)
125124
126125   // bit 1 - ATN
127   if (!state->m_iec->atn_r())
126   if (!m_iec->atn_r())
128127      data &= ~0x02;
129128
130129   // bit 0 - joystic 1 (not implemeted yet)
r14963r14964
133132   return data;
134133}
135134
136WRITE8_HANDLER( primo_ki_1_w )
135WRITE8_MEMBER(primo_state::primo_ki_1_w)
137136{
138   primo_state *state = space->machine().driver_data<primo_state>();
139   device_t *speaker = space->machine().device(SPEAKER_TAG);
137   device_t *speaker = machine().device(SPEAKER_TAG);
140138   // bit 7 - NMI generator enable/disable
141   state->m_nmi = (data & 0x80) ? 1 : 0;
139   m_nmi = (data & 0x80) ? 1 : 0;
142140
143141   // bit 6 - joystick register shift (not emulated)
144142
r14963r14964
149147
150148   // bit 3 - display buffer
151149   if (data & 0x08)
152      state->m_video_memory_base |= 0x2000;
150      m_video_memory_base |= 0x2000;
153151   else
154      state->m_video_memory_base &= 0xdfff;
152      m_video_memory_base &= 0xdfff;
155153
156154   // bit 2 - V.24 (1) / tape control (not emulated)
157155
r14963r14964
159157   switch (data & 0x03)
160158   {
161159      case 0:
162         space->machine().device<cassette_image_device>(CASSETTE_TAG)->output(-1.0);
160         machine().device<cassette_image_device>(CASSETTE_TAG)->output(-1.0);
163161         break;
164162      case 1:
165163      case 2:
166         space->machine().device<cassette_image_device>(CASSETTE_TAG)->output(0.0);
164         machine().device<cassette_image_device>(CASSETTE_TAG)->output(0.0);
167165         break;
168166      case 3:
169         space->machine().device<cassette_image_device>(CASSETTE_TAG)->output(1.0);
167         machine().device<cassette_image_device>(CASSETTE_TAG)->output(1.0);
170168         break;
171169   }
172170}
173171
174WRITE8_HANDLER( primo_ki_2_w )
172WRITE8_MEMBER(primo_state::primo_ki_2_w)
175173{
176   primo_state *state = space->machine().driver_data<primo_state>();
177174
178175   // bit 7, 6 - not used
179176
180177   // bit 5 - SCLK
181   state->m_iec->clk_w(!BIT(data, 5));
178   m_iec->clk_w(!BIT(data, 5));
182179
183180   // bit 4 - SDATA
184   state->m_iec->data_w(!BIT(data, 4));
181   m_iec->data_w(!BIT(data, 4));
185182
186183   // bit 3 - not used
187184
188185   // bit 2 - SRQ
189   state->m_iec->srq_w(!BIT(data, 2));
186   m_iec->srq_w(!BIT(data, 2));
190187
191188   // bit 1 - ATN
192   state->m_iec->atn_w(!BIT(data, 1));
189   m_iec->atn_w(!BIT(data, 1));
193190
194191   // bit 0 - not used
195192
196193//  logerror ("IOW KI-2 data:%02x\n", data);
197194}
198195
199WRITE8_HANDLER( primo_FD_w )
196WRITE8_MEMBER(primo_state::primo_FD_w)
200197{
201   primo_state *state = space->machine().driver_data<primo_state>();
202   if (!input_port_read(space->machine(), "MEMORY_EXPANSION"))
198   if (!input_port_read(machine(), "MEMORY_EXPANSION"))
203199   {
204      state->m_port_FD = data;
205      primo_update_memory(space->machine());
200      m_port_FD = data;
201      primo_update_memory(machine());
206202   }
207203}
208204
src/mess/machine/svi318.c
r14963r14964
234234   DEVCB_HANDLER(svi318_ppi_port_c_w)
235235};
236236
237WRITE8_HANDLER( svi318_ppi_w )
237WRITE8_MEMBER(svi318_state::svi318_ppi_w)
238238{
239   i8255_device *ppi = space->machine().device<i8255_device>("ppi8255");
240   ppi->write(*space, offset + 2, data);
239   i8255_device *ppi = machine().device<i8255_device>("ppi8255");
240   ppi->write(space, offset + 2, data);
241241}
242242
243243
r14963r14964
256256  8  RIGHT2 Joystick 2, Right
257257*/
258258
259READ8_HANDLER( svi318_psg_port_a_r )
259READ8_MEMBER(svi318_state::svi318_psg_port_a_r)
260260{
261   return input_port_read(space->machine(), "JOYSTICKS");
261   return input_port_read(machine(), "JOYSTICKS");
262262}
263263
264264/*
r14963r14964
277277 with RAM are disabled.
278278*/
279279
280WRITE8_HANDLER( svi318_psg_port_b_w )
280WRITE8_MEMBER(svi318_state::svi318_psg_port_b_w)
281281{
282   svi318_state *state = space->machine().driver_data<svi318_state>();
283   if ( (state->m_svi.bank_switch ^ data) & 0x20)
284      set_led_status (space->machine(), 0, !(data & 0x20) );
282   if ( (m_svi.bank_switch ^ data) & 0x20)
283      set_led_status (machine(), 0, !(data & 0x20) );
285284
286   state->m_svi.bank_switch = data;
287   svi318_set_banks(space->machine());
285   m_svi.bank_switch = data;
286   svi318_set_banks(machine());
288287}
289288
290289/* Disk drives  */
r14963r14964
309308   {FLOPPY_0, FLOPPY_1, NULL, NULL}
310309};
311310
312static WRITE8_HANDLER( svi318_fdc_drive_motor_w )
311WRITE8_MEMBER(svi318_state::svi318_fdc_drive_motor_w)
313312{
314   svi318_state *state = space->machine().driver_data<svi318_state>();
315   device_t *fdc = space->machine().device("wd179x");
313   device_t *fdc = machine().device("wd179x");
316314   switch (data & 3)
317315   {
318316   case 1:
319317      wd17xx_set_drive(fdc,0);
320      state->m_fdc.driveselect = 0;
318      m_fdc.driveselect = 0;
321319      break;
322320   case 2:
323321      wd17xx_set_drive(fdc,1);
324      state->m_fdc.driveselect = 1;
322      m_fdc.driveselect = 1;
325323      break;
326324   }
327325}
328326
329static WRITE8_HANDLER( svi318_fdc_density_side_w )
327WRITE8_MEMBER(svi318_state::svi318_fdc_density_side_w)
330328{
331   device_t *fdc = space->machine().device("wd179x");
329   device_t *fdc = machine().device("wd179x");
332330
333331   wd17xx_dden_w(fdc, BIT(data, 0));
334332   wd17xx_set_side(fdc, BIT(data, 1));
335333}
336334
337static READ8_HANDLER( svi318_fdc_irqdrq_r )
335READ8_MEMBER(svi318_state::svi318_fdc_irqdrq_r)
338336{
339   svi318_state *state = space->machine().driver_data<svi318_state>();
340337   UINT8 result = 0;
341338
342   result |= state->m_fdc.drq << 6;
343   result |= state->m_fdc.irq << 7;
339   result |= m_fdc.drq << 6;
340   result |= m_fdc.irq << 7;
344341
345342   return result;
346343}
r14963r14964
383380}
384381
385382
386static WRITE8_HANDLER( svi806_ram_enable_w )
383WRITE8_MEMBER(svi318_state::svi806_ram_enable_w)
387384{
388   svi318_state *state = space->machine().driver_data<svi318_state>();
389   state->m_svi.svi806_ram_enabled = ( data & 0x01 );
390   svi318_set_banks(space->machine());
385   m_svi.svi806_ram_enabled = ( data & 0x01 );
386   svi318_set_banks(machine());
391387}
392388
393389VIDEO_START( svi328_806 )
r14963r14964
597593
598594/* Memory */
599595
600WRITE8_HANDLER( svi318_writemem1 )
596WRITE8_MEMBER(svi318_state::svi318_writemem1)
601597{
602   svi318_state *state = space->machine().driver_data<svi318_state>();
603   if ( state->m_svi.bankLow_read_only )
598   if ( m_svi.bankLow_read_only )
604599      return;
605600
606   state->m_svi.bankLow_ptr[offset] = data;
601   m_svi.bankLow_ptr[offset] = data;
607602}
608603
609WRITE8_HANDLER( svi318_writemem2 )
604WRITE8_MEMBER(svi318_state::svi318_writemem2)
610605{
611   svi318_state *state = space->machine().driver_data<svi318_state>();
612   if ( state->m_svi.bankHigh1_read_only)
606   if ( m_svi.bankHigh1_read_only)
613607      return;
614608
615   state->m_svi.bankHigh1_ptr[offset] = data;
609   m_svi.bankHigh1_ptr[offset] = data;
616610}
617611
618WRITE8_HANDLER( svi318_writemem3 )
612WRITE8_MEMBER(svi318_state::svi318_writemem3)
619613{
620   svi318_state *state = space->machine().driver_data<svi318_state>();
621   if ( state->m_svi.bankHigh2_read_only)
614   if ( m_svi.bankHigh2_read_only)
622615      return;
623616
624   state->m_svi.bankHigh2_ptr[offset] = data;
617   m_svi.bankHigh2_ptr[offset] = data;
625618}
626619
627WRITE8_HANDLER( svi318_writemem4 )
620WRITE8_MEMBER(svi318_state::svi318_writemem4)
628621{
629   svi318_state *state = space->machine().driver_data<svi318_state>();
630   if ( state->m_svi.svi806_ram_enabled )
622   if ( m_svi.svi806_ram_enabled )
631623   {
632624      if ( offset < 0x800 )
633625      {
634         state->m_svi.svi806_ram->u8(offset) = data;
626         m_svi.svi806_ram->u8(offset) = data;
635627      }
636628   }
637629   else
638630   {
639      if ( state->m_svi.bankHigh2_read_only )
631      if ( m_svi.bankHigh2_read_only )
640632         return;
641633
642      state->m_svi.bankHigh2_ptr[ 0x3000 + offset] = data;
634      m_svi.bankHigh2_ptr[ 0x3000 + offset] = data;
643635   }
644636}
645637
r14963r14964
770762
771763/* External I/O */
772764
773READ8_HANDLER( svi318_io_ext_r )
765READ8_MEMBER(svi318_state::svi318_io_ext_r)
774766{
775   svi318_state *state = space->machine().driver_data<svi318_state>();
776767   UINT8 data = 0xff;
777768   device_t *device;
778769   ins8250_device *uart;
779   centronics_device *centronics = space->machine().device<centronics_device>("centronics");
770   centronics_device *centronics = machine().device<centronics_device>("centronics");
780771
781   if (state->m_svi.bankLow == SVI_CART)
772   if (m_svi.bankLow == SVI_CART)
782773   {
783774      return 0xff;
784775   }
r14963r14964
797788   case 0x25:
798789   case 0x26:
799790   case 0x27:
800      uart = space->machine().device<ins8250_device>("ins8250_0");
801      data = uart->ins8250_r(*space, offset & 7);
791      uart = machine().device<ins8250_device>("ins8250_0");
792      data = uart->ins8250_r(space, offset & 7);
802793      break;
803794
804795   case 0x28:
r14963r14964
809800   case 0x2D:
810801   case 0x2E:
811802   case 0x2F:
812      uart = space->machine().device<ins8250_device>("ins8250_1");
813      data = uart->ins8250_r(*space, offset & 7);
803      uart = machine().device<ins8250_device>("ins8250_1");
804      data = uart->ins8250_r(space, offset & 7);
814805      break;
815806
816807   case 0x30:
817      device = space->machine().device("wd179x");
808      device = machine().device("wd179x");
818809      data = wd17xx_status_r(device, 0);
819810      break;
820811   case 0x31:
821      device = space->machine().device("wd179x");
812      device = machine().device("wd179x");
822813      data = wd17xx_track_r(device, 0);
823814      break;
824815   case 0x32:
825      device = space->machine().device("wd179x");
816      device = machine().device("wd179x");
826817      data = wd17xx_sector_r(device, 0);
827818      break;
828819   case 0x33:
829      device = space->machine().device("wd179x");
820      device = machine().device("wd179x");
830821      data = wd17xx_data_r(device, 0);
831822      break;
832823   case 0x34:
833824      data = svi318_fdc_irqdrq_r(space, 0);
834825      break;
835826   case 0x51:
836      device = space->machine().device("crtc");
837      data = downcast<mc6845_device *>(device)->register_r( *space, offset );
827      device = machine().device("crtc");
828      data = downcast<mc6845_device *>(device)->register_r( space, offset );
838829      break;
839830   }
840831
841832   return data;
842833}
843834
844WRITE8_HANDLER( svi318_io_ext_w )
835WRITE8_MEMBER(svi318_state::svi318_io_ext_w)
845836{
846   svi318_state *state = space->machine().driver_data<svi318_state>();
847837   device_t *device;
848838   ins8250_device *uart;
849   centronics_device *centronics = space->machine().device<centronics_device>("centronics");
839   centronics_device *centronics = machine().device<centronics_device>("centronics");
850840
851   if (state->m_svi.bankLow == SVI_CART)
841   if (m_svi.bankLow == SVI_CART)
852842   {
853843      return;
854844   }
r14963r14964
856846   switch( offset )
857847   {
858848   case 0x10:
859      centronics->write(*space, 0, data);
849      centronics->write(space, 0, data);
860850      break;
861851
862852   case 0x11:
r14963r14964
871861   case 0x25:
872862   case 0x26:
873863   case 0x27:
874      uart = space->machine().device<ins8250_device>("ins8250_0");
875      uart->ins8250_w(*space, offset & 7, data);
864      uart = machine().device<ins8250_device>("ins8250_0");
865      uart->ins8250_w(space, offset & 7, data);
876866      break;
877867
878868   case 0x28:
r14963r14964
883873   case 0x2D:
884874   case 0x2E:
885875   case 0x2F:
886      uart = space->machine().device<ins8250_device>("ins8250_1");
887      uart->ins8250_w(*space, offset & 7, data);
876      uart = machine().device<ins8250_device>("ins8250_1");
877      uart->ins8250_w(space, offset & 7, data);
888878      break;
889879
890880   case 0x30:
891      device = space->machine().device("wd179x");
881      device = machine().device("wd179x");
892882      wd17xx_command_w(device, 0, data);
893883      break;
894884   case 0x31:
895      device = space->machine().device("wd179x");
885      device = machine().device("wd179x");
896886      wd17xx_track_w(device, 0, data);
897887      break;
898888   case 0x32:
899      device = space->machine().device("wd179x");
889      device = machine().device("wd179x");
900890      wd17xx_sector_w(device, 0, data);
901891      break;
902892   case 0x33:
903      device = space->machine().device("wd179x");
893      device = machine().device("wd179x");
904894      wd17xx_data_w(device, 0, data);
905895      break;
906896   case 0x34:
r14963r14964
911901      break;
912902
913903   case 0x50:
914      device = space->machine().device("crtc");
915      downcast<mc6845_device *>(device)->address_w(*space, offset, data);
904      device = machine().device("crtc");
905      downcast<mc6845_device *>(device)->address_w(space, offset, data);
916906      break;
917907   case 0x51:
918      device = space->machine().device("crtc");
919      downcast<mc6845_device *>(device)->register_w(*space, offset, data);
908      device = machine().device("crtc");
909      downcast<mc6845_device *>(device)->register_w(space, offset, data);
920910      break;
921911
922912   case 0x58:
src/mess/machine/z80ne.c
r14963r14964
339339   ay31015_set_transmitter_clock( state->m_ay31015, state->m_cass_data.speed * 16.0);
340340
341341   state->m_nmi_delay_counter = 0;
342   lx385_ctrl_w(space, 0, 0);
342   state->lx385_ctrl_w(*space, 0, 0);
343343
344344}
345345
r14963r14964
431431******************************************************************************/
432432
433433/* LX.383 - LX.384 HEX keyboard and display */
434READ8_HANDLER( lx383_r )
434READ8_MEMBER(z80ne_state::lx383_r)
435435{
436   z80ne_state *state = space->machine().driver_data<z80ne_state>();
437436   /*
438437     * Keyboard scanning
439438     *
r14963r14964
451450     *      D6 - 0
452451     *      D7 - ~KEY Pressed
453452     */
454    return state->m_lx383_key[state->m_lx383_scan_counter];
453    return m_lx383_key[m_lx383_scan_counter];
455454}
456455
457WRITE8_HANDLER( lx383_w )
456WRITE8_MEMBER(z80ne_state::lx383_w)
458457{
459   z80ne_state *state = space->machine().driver_data<z80ne_state>();
460458   /*
461459     * First 8 locations (F0-F7) are mapped to a dual-port 8-byte RAM
462460     * The 1KHz NE-555 astable oscillator circuit drive
r14963r14964
486484       output_set_digit_value( offset, data ^ 0xff );
487485    else
488486       /* after writing to port 0xF8 and the first ~M1 cycles strike a NMI for single step execution */
489       state->m_nmi_delay_counter = 1;
490      space->machine().device("z80ne")->memory().space(AS_PROGRAM)->set_direct_update_handler(direct_update_delegate(FUNC(z80ne_nmi_delay_count), &space->machine()));
487       m_nmi_delay_counter = 1;
488      machine().device("z80ne")->memory().space(AS_PROGRAM)->set_direct_update_handler(direct_update_delegate(FUNC(z80ne_nmi_delay_count), &machine()));
491489}
492490
493491
r14963r14964
534532    data on the positive-edge of the clock pulse.
535533 *
536534 */
537READ8_HANDLER(lx385_data_r)
535READ8_MEMBER(z80ne_state::lx385_data_r)
538536{
539   z80ne_state *state = space->machine().driver_data<z80ne_state>();
540   return ay31015_get_received_data( state->m_ay31015 );
537   return ay31015_get_received_data( m_ay31015 );
541538}
542539
543READ8_HANDLER(lx385_ctrl_r)
540READ8_MEMBER(z80ne_state::lx385_ctrl_r)
544541{
545   z80ne_state *state = space->machine().driver_data<z80ne_state>();
546542   /* set unused bits high */
547543   UINT8 data = 0xc0;
548544
549   ay31015_set_input_pin( state->m_ay31015, AY31015_SWE, 0 );
550   data |= (ay31015_get_output_pin( state->m_ay31015, AY31015_OR   ) ? 0x01 : 0);
551   data |= (ay31015_get_output_pin( state->m_ay31015, AY31015_FE   ) ? 0x02 : 0);
552   data |= (ay31015_get_output_pin( state->m_ay31015, AY31015_PE   ) ? 0x04 : 0);
553   data |= (ay31015_get_output_pin( state->m_ay31015, AY31015_TBMT ) ? 0x08 : 0);
554   data |= (ay31015_get_output_pin( state->m_ay31015, AY31015_DAV  ) ? 0x10 : 0);
555   data |= (ay31015_get_output_pin( state->m_ay31015, AY31015_EOC  ) ? 0x20 : 0);
556   ay31015_set_input_pin( state->m_ay31015, AY31015_SWE, 1 );
545   ay31015_set_input_pin( m_ay31015, AY31015_SWE, 0 );
546   data |= (ay31015_get_output_pin( m_ay31015, AY31015_OR   ) ? 0x01 : 0);
547   data |= (ay31015_get_output_pin( m_ay31015, AY31015_FE   ) ? 0x02 : 0);
548   data |= (ay31015_get_output_pin( m_ay31015, AY31015_PE   ) ? 0x04 : 0);
549   data |= (ay31015_get_output_pin( m_ay31015, AY31015_TBMT ) ? 0x08 : 0);
550   data |= (ay31015_get_output_pin( m_ay31015, AY31015_DAV  ) ? 0x10 : 0);
551   data |= (ay31015_get_output_pin( m_ay31015, AY31015_EOC  ) ? 0x20 : 0);
552   ay31015_set_input_pin( m_ay31015, AY31015_SWE, 1 );
557553
558554   return data;
559555}
560556
561WRITE8_HANDLER(lx385_data_w)
557WRITE8_MEMBER(z80ne_state::lx385_data_w)
562558{
563   z80ne_state *state = space->machine().driver_data<z80ne_state>();
564   ay31015_set_transmit_data( state->m_ay31015, data );
559   ay31015_set_transmit_data( m_ay31015, data );
565560}
566561
567562#define LX385_CASSETTE_MOTOR_MASK ((1<<3)|(1<<4))
568563
569WRITE8_HANDLER(lx385_ctrl_w)
564WRITE8_MEMBER(z80ne_state::lx385_ctrl_w)
570565{
571   z80ne_state *state = space->machine().driver_data<z80ne_state>();
572566   /* Translate data to control signals
573567     *     0 bit1=0, bit0=0   UART Reset pulse
574568     *     1 bit1=0, bit0=1   UART RDAV (Reset Data Available) pulse
r14963r14964
578572     */
579573   UINT8 uart_reset, uart_rdav, uart_tx_clock;
580574   UINT8 motor_a, motor_b;
581   UINT8 changed_bits = (state->m_lx385_ctrl ^ data) & 0x1C;
582   state->m_lx385_ctrl = data;
575   UINT8 changed_bits = (m_lx385_ctrl ^ data) & 0x1C;
576   m_lx385_ctrl = data;
583577
584578   uart_reset = ((data & 0x03) == 0x00);
585579   uart_rdav  = ((data & 0x03) == 0x01);
r14963r14964
590584   /* UART Reset and RDAV */
591585   if(uart_reset)
592586   {
593      ay31015_set_input_pin( state->m_ay31015, AY31015_XR, 1 );
594      ay31015_set_input_pin( state->m_ay31015, AY31015_XR, 0 );
587      ay31015_set_input_pin( m_ay31015, AY31015_XR, 1 );
588      ay31015_set_input_pin( m_ay31015, AY31015_XR, 0 );
595589   }
596590
597591   if(uart_rdav)
598592   {
599      ay31015_set_input_pin( state->m_ay31015, AY31015_RDAV, 1 );
600      ay31015_set_input_pin( state->m_ay31015, AY31015_RDAV, 0 );
593      ay31015_set_input_pin( m_ay31015, AY31015_RDAV, 1 );
594      ay31015_set_input_pin( m_ay31015, AY31015_RDAV, 0 );
601595   }
602596
603597   if (!changed_bits) return;
604598
605599   /* UART Tx Clock enable/disable */
606600   if(changed_bits & 0x04)
607      ay31015_set_transmitter_clock( state->m_ay31015, uart_tx_clock ? state->m_cass_data.speed * 16.0 : 0.0);
601      ay31015_set_transmitter_clock( m_ay31015, uart_tx_clock ? m_cass_data.speed * 16.0 : 0.0);
608602
609603   /* motors */
610604   if(changed_bits & 0x18)
611605   {
612      space->machine().device<cassette_image_device>(CASSETTE_TAG)->change_state(
606      machine().device<cassette_image_device>(CASSETTE_TAG)->change_state(
613607         (motor_a) ? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED,CASSETTE_MASK_MOTOR);
614608
615      space->machine().device<cassette_image_device>(CASSETTE2_TAG)->change_state(
609      machine().device<cassette_image_device>(CASSETTE2_TAG)->change_state(
616610         (motor_b) ? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED,CASSETTE_MASK_MOTOR);
617611
618612      if (motor_a || motor_b)
619         state->m_cassette_timer->adjust(attotime::zero, 0, attotime::from_hz(LX385_TAPE_SAMPLE_FREQ));
613         m_cassette_timer->adjust(attotime::zero, 0, attotime::from_hz(LX385_TAPE_SAMPLE_FREQ));
620614      else
621         state->m_cassette_timer->adjust(attotime::zero);
615         m_cassette_timer->adjust(attotime::zero);
622616   }
623617}
624618
r14963r14964
638632   return videoram[offset];
639633}
640634
641READ8_HANDLER(lx388_data_r)
635READ8_MEMBER(z80ne_state::lx388_data_r)
642636{
643   z80ne_state *state = space->machine().driver_data<z80ne_state>();
644637   UINT8 data;
645638
646   data = kr2376_data_r(state->m_lx388_kr2376, 0) & 0x7f;
647   data |= kr2376_get_output_pin(state->m_lx388_kr2376, KR2376_SO) << 7;
639   data = kr2376_data_r(m_lx388_kr2376, 0) & 0x7f;
640   data |= kr2376_get_output_pin(m_lx388_kr2376, KR2376_SO) << 7;
648641   return data;
649642}
650643
651READ8_HANDLER( lx388_read_field_sync )
644READ8_MEMBER(z80ne_state::lx388_read_field_sync)
652645{
653   z80ne_state *state = space->machine().driver_data<z80ne_state>();
654   return state->m_vdg->fs_r() << 7;
646   return m_vdg->fs_r() << 7;
655647}
656648
657649/*
src/mess/machine/nes.c
r14963r14964
2525
2626static void init_nes_core(running_machine &machine);
2727static void nes_machine_stop(running_machine &machine);
28static READ8_HANDLER(nes_fds_r);
29static WRITE8_HANDLER(nes_fds_w);
28
29
3030static void fds_irq(device_t *device, int scanline, int vblank, int blanked);
3131
3232/***************************************************************************
r14963r14964
6868      if (state->m_fds_ram == NULL)
6969         state->m_fds_ram = auto_alloc_array(machine, UINT8, 0x8000);
7070
71      space->install_legacy_read_handler(0x4030, 0x403f, FUNC(nes_fds_r));
71      space->install_read_handler(0x4030, 0x403f, read8_delegate(FUNC(nes_state::nes_fds_r),state));
7272      space->install_read_bank(0x6000, 0xdfff, "bank2");
7373      space->install_read_bank(0xe000, 0xffff, "bank1");
7474
75      space->install_legacy_write_handler(0x4020, 0x402f, FUNC(nes_fds_w));
75      space->install_write_handler(0x4020, 0x402f, write8_delegate(FUNC(nes_state::nes_fds_w),state));
7676      space->install_write_bank(0x6000, 0xdfff, "bank2");
7777
7878      memory_set_bankptr(machine, "bank1", &state->m_rom[0xe000]);
r14963r14964
331331
332332
333333
334READ8_HANDLER( nes_IN0_r )
334READ8_MEMBER(nes_state::nes_IN0_r)
335335{
336   nes_state *state = space->machine().driver_data<nes_state>();
337   int cfg = input_port_read(space->machine(), "CTRLSEL");
336   int cfg = input_port_read(machine(), "CTRLSEL");
338337   int ret;
339338
340339   if ((cfg & 0x000f) >= 0x07)   // for now we treat the FC keyboard separately from other inputs!
r14963r14964
348347      /* in the unused upper 3 bits, so typically a read from $4016 leaves 0x40 there. */
349348      ret = 0x40;
350349
351      ret |= ((state->m_in_0.i0 >> state->m_in_0.shift) & 0x01);
350      ret |= ((m_in_0.i0 >> m_in_0.shift) & 0x01);
352351
353352      /* zapper */
354353      if ((cfg & 0x000f) == 0x0002)
355354      {
356         int x = state->m_in_0.i1;   /* read Zapper x-position */
357         int y = state->m_in_0.i2;   /* read Zapper y-position */
355         int x = m_in_0.i1;   /* read Zapper x-position */
356         int y = m_in_0.i2;   /* read Zapper y-position */
358357         UINT32 pix, color_base;
359358
360359         /* get the pixel at the gun position */
361         pix = state->m_ppu->get_pixel(x, y);
360         pix = m_ppu->get_pixel(x, y);
362361
363362         /* get the color base from the ppu */
364         color_base = state->m_ppu->get_colorbase();
363         color_base = m_ppu->get_colorbase();
365364
366365         /* look at the screen and see if the cursor is over a bright pixel */
367366         if ((pix == color_base + 0x20) || (pix == color_base + 0x30) ||
r14963r14964
373372            ret |= 0x08;  /* no sprite hit */
374373
375374         /* If button 1 is pressed, indicate the light gun trigger is pressed */
376         ret |= ((state->m_in_0.i0 & 0x01) << 4);
375         ret |= ((m_in_0.i0 & 0x01) << 4);
377376      }
378377
379378      if (LOG_JOY)
380         logerror("joy 0 read, val: %02x, pc: %04x, bits read: %d, chan0: %08x\n", ret, cpu_get_pc(&space->device()), state->m_in_0.shift, state->m_in_0.i0);
379         logerror("joy 0 read, val: %02x, pc: %04x, bits read: %d, chan0: %08x\n", ret, cpu_get_pc(&space.device()), m_in_0.shift, m_in_0.i0);
381380
382      state->m_in_0.shift++;
381      m_in_0.shift++;
383382   }
384383
385384   return ret;
r14963r14964
399398   return ((input_port_read(machine, sub_keyport_names[scan]) >> (mode * 4)) & 0x0f) << 1;
400399}
401400
402READ8_HANDLER( nes_IN1_r )
401READ8_MEMBER(nes_state::nes_IN1_r)
403402{
404   nes_state *state = space->machine().driver_data<nes_state>();
405   int cfg = input_port_read(space->machine(), "CTRLSEL");
403   int cfg = input_port_read(machine(), "CTRLSEL");
406404   int ret;
407405
408406   if ((cfg & 0x000f) == 0x07)   // for now we treat the FC keyboard separately from other inputs!
409407   {
410      if (state->m_fck_scan < 9)
411         ret = ~nes_read_fc_keyboard_line(space->machine(), state->m_fck_scan, state->m_fck_mode) & 0x1e;
408      if (m_fck_scan < 9)
409         ret = ~nes_read_fc_keyboard_line(machine(), m_fck_scan, m_fck_mode) & 0x1e;
412410      else
413411         ret = 0x1e;
414412   }
415413   else if ((cfg & 0x000f) == 0x08)   // for now we treat the Subor keyboard separately from other inputs!
416414   {
417      if (state->m_fck_scan < 12)
418         ret = ~nes_read_subor_keyboard_line(space->machine(), state->m_fck_scan, state->m_fck_mode) & 0x1e;
415      if (m_fck_scan < 12)
416         ret = ~nes_read_subor_keyboard_line(machine(), m_fck_scan, m_fck_mode) & 0x1e;
419417      else
420418         ret = 0x1e;
421419   }
r14963r14964
426424      ret = 0x40;
427425
428426      /* Handle data line 0's serial output */
429      ret |= ((state->m_in_1.i0 >> state->m_in_1.shift) & 0x01);
427      ret |= ((m_in_1.i0 >> m_in_1.shift) & 0x01);
430428
431429      /* zapper */
432430      if ((cfg & 0x00f0) == 0x0030)
433431      {
434         int x = state->m_in_1.i1;   /* read Zapper x-position */
435         int y = state->m_in_1.i2;   /* read Zapper y-position */
432         int x = m_in_1.i1;   /* read Zapper x-position */
433         int y = m_in_1.i2;   /* read Zapper y-position */
436434         UINT32 pix, color_base;
437435
438436         /* get the pixel at the gun position */
439         pix = state->m_ppu->get_pixel(x, y);
437         pix = m_ppu->get_pixel(x, y);
440438
441439         /* get the color base from the ppu */
442         color_base = state->m_ppu->get_colorbase();
440         color_base = m_ppu->get_colorbase();
443441
444442         /* look at the screen and see if the cursor is over a bright pixel */
445443         if ((pix == color_base + 0x20) || (pix == color_base + 0x30) ||
r14963r14964
451449            ret |= 0x08;  /* no sprite hit */
452450
453451         /* If button 1 is pressed, indicate the light gun trigger is pressed */
454         ret |= ((state->m_in_1.i0 & 0x01) << 4);
452         ret |= ((m_in_1.i0 & 0x01) << 4);
455453      }
456454
457455      /* arkanoid dial */
458456      else if ((cfg & 0x00f0) == 0x0040)
459457      {
460458         /* Handle data line 2's serial output */
461         ret |= ((state->m_in_1.i2 >> state->m_in_1.shift) & 0x01) << 3;
459         ret |= ((m_in_1.i2 >> m_in_1.shift) & 0x01) << 3;
462460
463461         /* Handle data line 3's serial output - bits are reversed */
464462         /* NPW 27-Nov-2007 - there is no third subscript! commenting out */
465         /* ret |= ((state->m_in_1[3] >> state->m_in_1.shift) & 0x01) << 4; */
466         /* ret |= ((state->m_in_1[3] << state->m_in_1.shift) & 0x80) >> 3; */
463         /* ret |= ((m_in_1[3] >> m_in_1.shift) & 0x01) << 4; */
464         /* ret |= ((m_in_1[3] << m_in_1.shift) & 0x80) >> 3; */
467465      }
468466
469467      if (LOG_JOY)
470         logerror("joy 1 read, val: %02x, pc: %04x, bits read: %d, chan0: %08x\n", ret, cpu_get_pc(&space->device()), state->m_in_1.shift, state->m_in_1.i0);
468         logerror("joy 1 read, val: %02x, pc: %04x, bits read: %d, chan0: %08x\n", ret, cpu_get_pc(&space.device()), m_in_1.shift, m_in_1.i0);
471469
472      state->m_in_1.shift++;
470      m_in_1.shift++;
473471   }
474472
475473   return ret;
r14963r14964
553551   }
554552}
555553
556WRITE8_HANDLER( nes_IN0_w )
554WRITE8_MEMBER(nes_state::nes_IN0_w)
557555{
558   nes_state *state = space->machine().driver_data<nes_state>();
559   int cfg = input_port_read(space->machine(), "CTRLSEL");
556   int cfg = input_port_read(machine(), "CTRLSEL");
560557
561558   /* Check if lightgun has been chosen as input: if so, enable crosshair */
562   space->machine().scheduler().timer_set(attotime::zero, FUNC(lightgun_tick));
559   machine().scheduler().timer_set(attotime::zero, FUNC(lightgun_tick));
563560
564561   if ((cfg & 0x000f) >= 0x07)   // for now we treat the FC keyboard separately from other inputs!
565562   {
r14963r14964
570567         int lines = ((cfg & 0x000f) == 0x04) ? 9 : 12;
571568         UINT8 out = BIT(data, 1);   // scan
572569
573         if (state->m_fck_mode && !out && ++state->m_fck_scan > lines)
574            state->m_fck_scan = 0;
570         if (m_fck_mode && !out && ++m_fck_scan > lines)
571            m_fck_scan = 0;
575572
576         state->m_fck_mode = out;   // access lower or upper 4 bits
573         m_fck_mode = out;   // access lower or upper 4 bits
577574
578575         if (BIT(data, 0))   // reset
579            state->m_fck_scan = 0;
576            m_fck_scan = 0;
580577      }
581578   }
582579   else
r14963r14964
585582         return;
586583
587584      if (LOG_JOY)
588         logerror("joy 0 bits read: %d\n", state->m_in_0.shift);
585         logerror("joy 0 bits read: %d\n", m_in_0.shift);
589586
590587      /* Toggling bit 0 high then low resets both controllers */
591      state->m_in_0.shift = 0;
592      state->m_in_1.shift = 0;
588      m_in_0.shift = 0;
589      m_in_1.shift = 0;
593590
594591      /* Read the input devices */
595592      if ((cfg & 0x000f) != 0x06)
596593      {
597         nes_read_input_device(space->machine(), cfg >>  0, &state->m_in_0, 0,  TRUE);
598         nes_read_input_device(space->machine(), cfg >>  4, &state->m_in_1, 1,  TRUE);
599         nes_read_input_device(space->machine(), cfg >>  8, &state->m_in_2, 2, FALSE);
600         nes_read_input_device(space->machine(), cfg >> 12, &state->m_in_3, 3, FALSE);
594         nes_read_input_device(machine(), cfg >>  0, &m_in_0, 0,  TRUE);
595         nes_read_input_device(machine(), cfg >>  4, &m_in_1, 1,  TRUE);
596         nes_read_input_device(machine(), cfg >>  8, &m_in_2, 2, FALSE);
597         nes_read_input_device(machine(), cfg >> 12, &m_in_3, 3, FALSE);
601598      }
602599      else // crazy climber pad
603600      {
604         nes_read_input_device(space->machine(), 0, &state->m_in_1, 1,  TRUE);
605         nes_read_input_device(space->machine(), 0, &state->m_in_2, 2, FALSE);
606         nes_read_input_device(space->machine(), 0, &state->m_in_3, 3, FALSE);
607         nes_read_input_device(space->machine(), cfg >>  0, &state->m_in_0, 0,  TRUE);
601         nes_read_input_device(machine(), 0, &m_in_1, 1,  TRUE);
602         nes_read_input_device(machine(), 0, &m_in_2, 2, FALSE);
603         nes_read_input_device(machine(), 0, &m_in_3, 3, FALSE);
604         nes_read_input_device(machine(), cfg >>  0, &m_in_0, 0,  TRUE);
608605      }
609606
610607      if (cfg & 0x0f00)
611         state->m_in_0.i0 |= (state->m_in_2.i0 << 8) | (0x08 << 16);
608         m_in_0.i0 |= (m_in_2.i0 << 8) | (0x08 << 16);
612609
613610      if (cfg & 0xf000)
614         state->m_in_1.i0 |= (state->m_in_3.i0 << 8) | (0x04 << 16);
611         m_in_1.i0 |= (m_in_3.i0 << 8) | (0x04 << 16);
615612   }
616613}
617614
618615
619WRITE8_HANDLER( nes_IN1_w )
616WRITE8_MEMBER(nes_state::nes_IN1_w)
620617{
621618}
622619
r14963r14964
15521549   }
15531550}
15541551
1555static READ8_HANDLER( nes_fds_r )
1552READ8_MEMBER(nes_state::nes_fds_r)
15561553{
1557   nes_state *state = space->machine().driver_data<nes_state>();
15581554   UINT8 ret = 0x00;
15591555
15601556   switch (offset)
15611557   {
15621558      case 0x00: /* $4030 - disk status 0 */
1563         ret = state->m_fds_status0;
1559         ret = m_fds_status0;
15641560         /* clear the disk IRQ detect flag */
1565         state->m_fds_status0 &= ~0x01;
1561         m_fds_status0 &= ~0x01;
15661562         break;
15671563      case 0x01: /* $4031 - data latch */
15681564         /* don't read data if disk is unloaded */
1569         if (state->m_fds_data == NULL)
1565         if (m_fds_data == NULL)
15701566            ret = 0;
1571         else if (state->m_fds_current_side)
1567         else if (m_fds_current_side)
15721568         {
15731569            // a bunch of games (e.g. bshashsc and fairypin) keep reading beyond the last track
15741570            // what is the expected behavior?
1575            if (state->m_fds_head_position > 65500)
1576               state->m_fds_head_position = 0;
1577            ret = state->m_fds_data[(state->m_fds_current_side - 1) * 65500 + state->m_fds_head_position++];
1571            if (m_fds_head_position > 65500)
1572               m_fds_head_position = 0;
1573            ret = m_fds_data[(m_fds_current_side - 1) * 65500 + m_fds_head_position++];
15781574         }
15791575         else
15801576            ret = 0;
15811577         break;
15821578      case 0x02: /* $4032 - disk status 1 */
15831579         /* return "no disk" status if disk is unloaded */
1584         if (state->m_fds_data == NULL)
1580         if (m_fds_data == NULL)
15851581            ret = 1;
1586         else if (state->m_fds_last_side != state->m_fds_current_side)
1582         else if (m_fds_last_side != m_fds_current_side)
15871583         {
15881584            /* If we've switched disks, report "no disk" for a few reads */
15891585            ret = 1;
1590            state->m_fds_count++;
1591            if (state->m_fds_count == 50)
1586            m_fds_count++;
1587            if (m_fds_count == 50)
15921588            {
1593               state->m_fds_last_side = state->m_fds_current_side;
1594               state->m_fds_count = 0;
1589               m_fds_last_side = m_fds_current_side;
1590               m_fds_count = 0;
15951591            }
15961592         }
15971593         else
1598            ret = (state->m_fds_current_side == 0); /* 0 if a disk is inserted */
1594            ret = (m_fds_current_side == 0); /* 0 if a disk is inserted */
15991595         break;
16001596      case 0x03: /* $4033 */
16011597         ret = 0x80;
r14963r14964
16081604   return ret;
16091605}
16101606
1611static WRITE8_HANDLER( nes_fds_w )
1607WRITE8_MEMBER(nes_state::nes_fds_w)
16121608{
1613   nes_state *state = space->machine().driver_data<nes_state>();
16141609
16151610   switch (offset)
16161611   {
16171612      case 0x00:
1618         state->m_IRQ_count_latch = (state->m_IRQ_count_latch & 0xff00) | data;
1613         m_IRQ_count_latch = (m_IRQ_count_latch & 0xff00) | data;
16191614         break;
16201615      case 0x01:
1621         state->m_IRQ_count_latch = (state->m_IRQ_count_latch & 0x00ff) | (data << 8);
1616         m_IRQ_count_latch = (m_IRQ_count_latch & 0x00ff) | (data << 8);
16221617         break;
16231618      case 0x02:
1624         state->m_IRQ_count = state->m_IRQ_count_latch;
1625         state->m_IRQ_enable = data;
1619         m_IRQ_count = m_IRQ_count_latch;
1620         m_IRQ_enable = data;
16261621         break;
16271622      case 0x03:
16281623         // d0 = sound io (1 = enable)
r14963r14964
16321627         /* write data out to disk */
16331628         break;
16341629      case 0x05:
1635         state->m_fds_motor_on = BIT(data, 0);
1630         m_fds_motor_on = BIT(data, 0);
16361631
16371632         if (BIT(data, 1))
1638            state->m_fds_head_position = 0;
1633            m_fds_head_position = 0;
16391634
1640         state->m_fds_read_mode = BIT(data, 2);
1641         set_nt_mirroring(space->machine(), BIT(data, 3) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
1635         m_fds_read_mode = BIT(data, 2);
1636         set_nt_mirroring(machine(), BIT(data, 3) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
16421637
1643         if ((!(data & 0x40)) && (state->m_fds_write_reg & 0x40))
1644            state->m_fds_head_position -= 2; // ???
1638         if ((!(data & 0x40)) && (m_fds_write_reg & 0x40))
1639            m_fds_head_position -= 2; // ???
16451640
1646         state->m_IRQ_enable_latch = BIT(data, 7);
1647         state->m_fds_write_reg = data;
1641         m_IRQ_enable_latch = BIT(data, 7);
1642         m_fds_write_reg = data;
16481643         break;
16491644   }
16501645}
src/mess/machine/apollo.c
r14963r14964
223223 DN3000/DN3500 CPU Status Register at 0x8000/0x10000
224224 -------------------------------------------------*/
225225
226WRITE16_HANDLER( apollo_csr_status_register_w ) {
226WRITE16_MEMBER(apollo_state::apollo_csr_status_register_w){
227227   // To clear bus timeouts or parity conditions from status register,
228228   // write to the status register. This register is readonly.
229229   // in DN3500 bit 15 is always set (undocumented !?)
r14963r14964
231231   SLOG1(("writing CPU Status Register at offset %X = %04x & %04x (%04x)", offset, data, mem_mask, cpu_status_register));
232232}
233233
234READ16_HANDLER( apollo_csr_status_register_r ) {
234READ16_MEMBER(apollo_state::apollo_csr_status_register_r){
235235   SLOG2(("reading CPU Status Register at offset %X = %04x & %04x", offset, cpu_status_register, mem_mask));
236236   return cpu_status_register & mem_mask;
237237}
r14963r14964
240240 DN3000/DN3500 CPU Control Register at 0x8100/0x10100
241241 -------------------------------------------------*/
242242
243WRITE16_HANDLER( apollo_csr_control_register_w )
243WRITE16_MEMBER(apollo_state::apollo_csr_control_register_w)
244244{
245245   int leds;
246246
r14963r14964
255255   else if ((data & APOLLO_CSR_CR_FPU_TRAP_ENABLE) == 0)
256256   {
257257      // enable FPU (i.e. FPU opcodes in CPU)
258        apollo_set_cpu_has_fpu(&space->device(), 1);
258        apollo_set_cpu_has_fpu(&space.device(), 1);
259259   }
260260   else
261261   {
262262      // disable FPU (i.e. FPU opcodes in CPU)
263        apollo_set_cpu_has_fpu(&space->device(), 0);
263        apollo_set_cpu_has_fpu(&space.device(), 0);
264264
265265      if (!apollo_is_dn3000())
266266      {
r14963r14964
294294   }
295295}
296296
297READ16_HANDLER( apollo_csr_control_register_r )
297READ16_MEMBER(apollo_state::apollo_csr_control_register_r)
298298{
299299   SLOG1(("reading CPU Control Register at offset %X = %04x & %04x", offset, cpu_control_register, mem_mask));
300300   return cpu_control_register & mem_mask;
r14963r14964
339339 DN3000/DN3500 DMA Controller 1 at 0x9000/0x10c00
340340 -------------------------------------------------*/
341341
342WRITE8_HANDLER(apollo_dma_1_w ) {
342WRITE8_MEMBER(apollo_state::apollo_dma_1_w){
343343   SLOG1(("apollo_dma_1_w: writing DMA Controller 1 at offset %02x = %02x", offset, data));
344   i8237_w(get_device_dma8237_1(&space->device()), offset, data);
344   i8237_w(get_device_dma8237_1(&space.device()), offset, data);
345345}
346346
347READ8_HANDLER( apollo_dma_1_r ) {
348   UINT8 data = i8237_r(get_device_dma8237_1(&space->device()), offset);
347READ8_MEMBER(apollo_state::apollo_dma_1_r){
348   UINT8 data = i8237_r(get_device_dma8237_1(&space.device()), offset);
349349   SLOG1(("apollo_dma_1_r: reading DMA Controller 1 at offset %02x = %02x", offset, data));
350350   return data;
351351}
r14963r14964
354354 DN3000/DN3500 DMA Controller 2 at 0x9100/0x10d00
355355 -------------------------------------------------*/
356356
357WRITE8_HANDLER(apollo_dma_2_w ) {
357WRITE8_MEMBER(apollo_state::apollo_dma_2_w){
358358   SLOG1(("apollo_dma_2_w: writing DMA Controller 2 at offset %02x = %02x", offset/2, data));
359   i8237_w(get_device_dma8237_2(&space->device()), offset / 2, data);
359   i8237_w(get_device_dma8237_2(&space.device()), offset / 2, data);
360360}
361361
362READ8_HANDLER( apollo_dma_2_r ) {
363   UINT8 data = i8237_r(get_device_dma8237_2(&space->device()), offset / 2);
362READ8_MEMBER(apollo_state::apollo_dma_2_r){
363   UINT8 data = i8237_r(get_device_dma8237_2(&space.device()), offset / 2);
364364   SLOG1(("apollo_dma_2_r: reading DMA Controller 2 at offset %02x = %02x", offset/2, data));
365365   return data;
366366}
r14963r14964
369369 DN3000 DMA Page Register at 0x9200
370370 ***************************************************************************/
371371
372WRITE8_HANDLER(apollo_dma_page_register_w ) {
372WRITE8_MEMBER(apollo_state::apollo_dma_page_register_w){
373373   dma_page_register[offset & 0x0f] = data;
374374   SLOG1(("writing DMA Page Register at offset %02x = %02x", offset,  data));
375375}
376376
377READ8_HANDLER( apollo_dma_page_register_r ) {
377READ8_MEMBER(apollo_state::apollo_dma_page_register_r){
378378   UINT8 data = dma_page_register[offset & 0x0f];
379379   SLOG1(("reading DMA Page Register at offset %02x = %02x", offset, data));
380380   return data;
r14963r14964
384384 DN3500 Address Translation Map at 0x017000
385385 -------------------------------------------------*/
386386
387WRITE16_HANDLER(apollo_address_translation_map_w ) {
387WRITE16_MEMBER(apollo_state::apollo_address_translation_map_w){
388388   address_translation_map[offset & 0x3ff] = data;
389389   SLOG2(("writing Address Translation Map at offset %02x = %04x", offset, data));
390390}
391391
392READ16_HANDLER( apollo_address_translation_map_r ) {
392READ16_MEMBER(apollo_state::apollo_address_translation_map_r){
393393   UINT16 data = address_translation_map[offset & 0x3ff];
394394   SLOG2(("reading Address Translation Map at offset %02x = %04x", offset, data));
395395   return data;
396396}
397397
398static READ8_HANDLER( apollo_dma_read_byte ) {
398READ8_MEMBER(apollo_state::apollo_dma_read_byte){
399399   UINT8 data;
400400   offs_t page_offset;
401401
r14963r14964
407407      offset &= 0x3ff;
408408   }
409409
410   data = space->read_byte(page_offset + offset);
410   data = space.read_byte(page_offset + offset);
411411
412412   if (VERBOSE > 1 || offset < 4 || (offset & 0xff) == 0 || (offset & 0xff) == 0xff)
413413   {
r14963r14964
417417   return data;
418418}
419419
420static WRITE8_HANDLER( apollo_dma_write_byte ) {
420WRITE8_MEMBER(apollo_state::apollo_dma_write_byte){
421421   offs_t page_offset;
422422   if (apollo_is_dn3000()) {
423423      page_offset = dma_page_register[channel2page_register[dn3000_dma_channel1]] << 16;
r14963r14964
427427      offset &= 0x3ff;
428428   }
429429    // FIXME: MSB not available, writing only LSB
430   space->write_byte(page_offset + offset, data);
430   space.write_byte(page_offset + offset, data);
431431
432432   if (VERBOSE > 1 || offset < 4 || (offset & 0xff) == 0 || (offset & 0xff) == 0xff)
433433   {
r14963r14964
435435   }
436436}
437437
438static READ8_HANDLER( apollo_dma_read_word ) {
438READ8_MEMBER(apollo_state::apollo_dma_read_word){
439439   UINT16 data;
440440   offs_t page_offset;
441441
r14963r14964
449449      offset = (offset << 1) & 0x3ff;
450450   }
451451
452   data = space->read_byte(page_offset + offset);
452   data = space.read_byte(page_offset + offset);
453453
454454   SLOG1(("dma read word at offset %x+%03x = %04x", page_offset, offset , data));
455455    // FIXME: MSB will get lost
456456   return data;
457457}
458458
459static WRITE8_HANDLER( apollo_dma_write_word ) {
459WRITE8_MEMBER(apollo_state::apollo_dma_write_word){
460460   offs_t page_offset;
461461
462462   SLOG1(("dma write word at offset %x = %02x", offset, data));
r14963r14964
473473      offset = (offset << 1) & 0x3ff;
474474   }
475475
476   space->write_byte(page_offset + offset, data);
476   space.write_byte(page_offset + offset, data);
477477   SLOG1(("dma write word at offset %x+%03x = %02x", page_offset, offset, data));
478478}
479479
r14963r14964
556556{
557557   DEVCB_LINE(apollo_dma_1_hrq_changed),
558558   DEVCB_LINE(apollo_dma8237_out_eop),
559   DEVCB_MEMORY_HANDLER(MAINCPU, PROGRAM, apollo_dma_read_byte),
560   DEVCB_MEMORY_HANDLER(MAINCPU, PROGRAM, apollo_dma_write_byte),
559   DEVCB_DRIVER_MEMBER(apollo_state, apollo_dma_read_byte),
560   DEVCB_DRIVER_MEMBER(apollo_state, apollo_dma_write_byte),
561561   {   DEVCB_NULL, DEVCB_HANDLER(apollo_dma8237_ctape_dack_r), DEVCB_HANDLER(apollo_dma8237_fdc_dack_r), DEVCB_NULL},
562562   {   DEVCB_NULL, DEVCB_HANDLER(apollo_dma8237_ctape_dack_w), DEVCB_HANDLER(apollo_dma8237_fdc_dack_w), DEVCB_NULL},
563563   {   DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL}
r14963r14964
567567{
568568   DEVCB_LINE(apollo_dma_2_hrq_changed),
569569   DEVCB_NULL,
570   DEVCB_MEMORY_HANDLER(MAINCPU, PROGRAM, apollo_dma_read_word),
571   DEVCB_MEMORY_HANDLER(MAINCPU, PROGRAM, apollo_dma_write_word),
570   DEVCB_DRIVER_MEMBER(apollo_state, apollo_dma_read_word),
571   DEVCB_DRIVER_MEMBER(apollo_state, apollo_dma_write_word),
572572   {   DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_HANDLER(apollo_dma8237_wdc_dack_r)},
573573   {   DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_HANDLER(apollo_dma8237_wdc_dack_w)},
574574   {   DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL}
r14963r14964
799799
800800static DEVICE_RESET( apollo_rtc ) {
801801   address_space *space = device->machine().device(MAINCPU)->memory().space(AS_PROGRAM);
802   UINT8 year = apollo_rtc_r(space, 9);
802   apollo_state *state = device->machine().driver_data<apollo_state>();
803   UINT8 year = state->apollo_rtc_r(*space, 9);
803804
804805   // change year according to configuration settings
805806   if (year < 20 && apollo_config(APOLLO_CONF_DATE_1990))
806807   {
807808      year+=80;
808      apollo_rtc_w(space, 9, year);
809      state->apollo_rtc_w(*space, 9, year);
809810   }
810811   else if (year >= 80 && !apollo_config(APOLLO_CONF_DATE_1990))
811812   {
812813      year -=80;
813      apollo_rtc_w(space, 9, year);
814      state->apollo_rtc_w(*space, 9, year);
814815   }
815816
816   SLOG1(("reset apollo_rtc year=%d", year));
817   //SLOG1(("reset apollo_rtc year=%d", year));
817818}
818819
819WRITE8_HANDLER( apollo_rtc_w )
820WRITE8_MEMBER(apollo_state::apollo_rtc_w)
820821{
821   mc146818_device *rtc = space->machine().device<mc146818_device> (APOLLO_RTC_TAG);
822   rtc->write(*space, 0, offset);
823   rtc->write(*space, 1, data);
822   mc146818_device *rtc = machine().device<mc146818_device> (APOLLO_RTC_TAG);
823   rtc->write(space, 0, offset);
824   rtc->write(space, 1, data);
824825   if (offset >= 0x0b && offset <= 0x0c)
825826   {
826827      SLOG2(("writing MC146818 at offset %02x = %02x", offset, data));
827828   }
828829}
829830
830READ8_HANDLER( apollo_rtc_r )
831READ8_MEMBER(apollo_state::apollo_rtc_r)
831832{
832833   UINT8 data;
833   mc146818_device *rtc = space->machine().device<mc146818_device> (APOLLO_RTC_TAG);
834   rtc->write(*space, 0, offset);
835   data = rtc->read(*space, 1);
834   mc146818_device *rtc = machine().device<mc146818_device> (APOLLO_RTC_TAG);
835   rtc->write(space, 0, offset);
836   data = rtc->read(space, 1);
836837   if (offset >= 0x0b && offset <= 0x0c)
837838   {
838839      SLOG2(("reading MC146818 at offset %02x = %02x", offset, data));
r14963r14964
842843
843844static TIMER_CALLBACK( apollo_rtc_timer )
844845{
846   apollo_state *state = machine.driver_data<apollo_state>();
845847   address_space *space = machine.device(MAINCPU)->memory().space(AS_PROGRAM);
846848
847849   // FIXME: reading register 0x0c will clear all interrupt flags
848   if ((apollo_rtc_r(space, 0x0c) & 0x80))
850   if ((state->apollo_rtc_r(*space, 0x0c) & 0x80))
849851   {
850      SLOG2(("apollo_rtc_timer - set_irq_line %d", APOLLO_IRQ_RTC));
852      //SLOG2(("apollo_rtc_timer - set_irq_line %d", APOLLO_IRQ_RTC));
851853      apollo_pic_set_irq_line(&space->device(), APOLLO_IRQ_RTC, 1);
852854   }
853855}
r14963r14964
13111313//  upd765_hack_for_apollo();
13121314}
13131315
1314WRITE8_HANDLER(apollo_fdc_w ) {
1316WRITE8_MEMBER(apollo_state::apollo_fdc_w){
13151317   SLOG1(("writing FDC upd765 at offset %X = %02x", offset, data));
1316   pc_fdc_w(space, offset, data);
1318   pc_fdc_w(&space, offset, data);
13171319}
13181320
1319READ8_HANDLER( apollo_fdc_r ) {
1320   UINT8 data = pc_fdc_r(space, offset);
1321READ8_MEMBER(apollo_state::apollo_fdc_r){
1322   UINT8 data = pc_fdc_r(&space, offset);
13211323   SLOG1(("reading FDC upd765 at offset %X = %02x", offset, data));
13221324   return data;
13231325}
src/mess/machine/ondra.c
r14963r14964
2020}
2121
2222
23static READ8_HANDLER( ondra_keyboard_r )
23READ8_MEMBER(ondra_state::ondra_keyboard_r)
2424{
2525   UINT8 retVal = 0x00;
2626   UINT8 ondra_keyboard_line = offset & 0x000f;
2727   static const char *const keynames[] = { "LINE0", "LINE1", "LINE2", "LINE3", "LINE4", "LINE5", "LINE6", "LINE7", "LINE8", "LINE9" };
28   double valcas = (cassette_device_image(space->machine())->input());
28   double valcas = (cassette_device_image(machine())->input());
2929   if ( valcas < 0.00) {
3030      retVal = 0x80;
3131   }
3232   if (ondra_keyboard_line > 9) {
3333      retVal |= 0x1f;
3434   } else {
35      retVal |= input_port_read(space->machine(), keynames[ondra_keyboard_line]);
35      retVal |= input_port_read(machine(), keynames[ondra_keyboard_line]);
3636   }
3737   return retVal;
3838}
r14963r14964
5454      memory_set_bankptr(machine, "bank3", machine.device<ram_device>(RAM_TAG)->pointer() + 0xe000);
5555   } else {
5656      machine.device("maincpu")->memory().space(AS_PROGRAM)->unmap_write(0xe000, 0xffff);
57      machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler (0xe000, 0xffff, FUNC(ondra_keyboard_r));
57      machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler (0xe000, 0xffff, read8_delegate(FUNC(ondra_state::ondra_keyboard_r),state));
5858   }
5959}
6060
61WRITE8_HANDLER( ondra_port_03_w )
61WRITE8_MEMBER(ondra_state::ondra_port_03_w)
6262{
63   ondra_state *state = space->machine().driver_data<ondra_state>();
64   state->m_video_enable = data & 1;
65   state->m_bank1_status = (data >> 1) & 1;
66   state->m_bank2_status = (data >> 2) & 1;
67   ondra_update_banks(space->machine());
68   cassette_device_image(space->machine())->output(((data >> 3) & 1) ? -1.0 : +1.0);
63   m_video_enable = data & 1;
64   m_bank1_status = (data >> 1) & 1;
65   m_bank2_status = (data >> 2) & 1;
66   ondra_update_banks(machine());
67   cassette_device_image(machine())->output(((data >> 3) & 1) ? -1.0 : +1.0);
6968}
7069
71WRITE8_HANDLER( ondra_port_09_w )
70WRITE8_MEMBER(ondra_state::ondra_port_09_w)
7271{
7372}
7473
75WRITE8_HANDLER( ondra_port_0a_w )
74WRITE8_MEMBER(ondra_state::ondra_port_0a_w)
7675{
7776}
7877
src/mess/machine/partner.c
r14963r14964
8080   }
8181}
8282
83static READ8_HANDLER ( partner_floppy_r ) {
84   device_t *fdc = space->machine().device("wd1793");
83READ8_MEMBER(partner_state::partner_floppy_r){
84   device_t *fdc = machine().device("wd1793");
8585
8686   if (offset<0x100) {
8787      switch(offset & 3) {
r14963r14964
9696   }
9797}
9898
99static WRITE8_HANDLER ( partner_floppy_w ) {
100   device_t *fdc = space->machine().device("wd1793");
99WRITE8_MEMBER(partner_state::partner_floppy_w){
100   device_t *fdc = machine().device("wd1793");
101101
102102   if (offset<0x100) {
103103      switch(offset & 3) {
r14963r14964
107107         default   : wd17xx_data_w(fdc,0,data);break;
108108      }
109109   } else {
110      floppy_mon_w(floppy_get_device(space->machine(), 0), 1);
111      floppy_mon_w(floppy_get_device(space->machine(), 1), 1);
110      floppy_mon_w(floppy_get_device(machine(), 0), 1);
111      floppy_mon_w(floppy_get_device(machine(), 1), 1);
112112      if (((data >> 6) & 1)==1) {
113113         wd17xx_set_drive(fdc,0);
114         floppy_mon_w(floppy_get_device(space->machine(), 0), 0);
115         floppy_drive_set_ready_state(floppy_get_device(space->machine(), 0), 1, 1);
114         floppy_mon_w(floppy_get_device(machine(), 0), 0);
115         floppy_drive_set_ready_state(floppy_get_device(machine(), 0), 1, 1);
116116      }
117117      if (((data >> 3) & 1)==1) {
118118         wd17xx_set_drive(fdc,1);
119         floppy_mon_w(floppy_get_device(space->machine(), 1), 0);
120         floppy_drive_set_ready_state(floppy_get_device(space->machine(), 1), 1, 1);
119         floppy_mon_w(floppy_get_device(machine(), 1), 0);
120         floppy_drive_set_ready_state(floppy_get_device(machine(), 1), 1, 1);
121121      }
122122      wd17xx_set_side(fdc,data >> 7);
123123   }
r14963r14964
130130   switch(state->m_win_mem_page) {
131131      case 2 :
132132            // FDD
133            space->install_legacy_write_handler(0xdc00, 0xddff, FUNC(partner_floppy_w));
134            space->install_legacy_read_handler (0xdc00, 0xddff, FUNC(partner_floppy_r));
133            space->install_write_handler(0xdc00, 0xddff, write8_delegate(FUNC(partner_state::partner_floppy_w),state));
134            space->install_read_handler (0xdc00, 0xddff, read8_delegate(FUNC(partner_state::partner_floppy_r),state));
135135            break;
136136      case 4 :
137137            // Timer
r14963r14964
346346   }
347347}
348348
349WRITE8_HANDLER ( partner_win_memory_page_w )
349WRITE8_MEMBER(partner_state::partner_win_memory_page_w)
350350{
351   partner_state *state = space->machine().driver_data<partner_state>();
352   state->m_win_mem_page = ~data;
353   partner_bank_switch(space->machine());
351   m_win_mem_page = ~data;
352   partner_bank_switch(machine());
354353}
355354
356WRITE8_HANDLER (partner_mem_page_w )
355WRITE8_MEMBER(partner_state::partner_mem_page_w)
357356{
358   partner_state *state = space->machine().driver_data<partner_state>();
359   state->m_mem_page = (data >> 4) & 0x0f;
360   partner_bank_switch(space->machine());
357   m_mem_page = (data >> 4) & 0x0f;
358   partner_bank_switch(machine());
361359}
362360
363361static WRITE_LINE_DEVICE_HANDLER( hrq_w )
src/mess/machine/hec2hrp.c
r14963r14964
122122
123123}
124124
125READ8_HANDLER( hector_179x_register_r)
125READ8_MEMBER(hec2hrp_state::hector_179x_register_r)
126126{
127127int data=0;
128device_t *fdc = space->machine().device("wd179x");
128device_t *fdc = machine().device("wd179x");
129129
130130   switch (offset & 0x0ff)
131131   {
r14963r14964
148148
149149   return data;
150150}
151WRITE8_HANDLER( hector_179x_register_w)
151WRITE8_MEMBER(hec2hrp_state::hector_179x_register_w)
152152{
153device_t *fdc = space->machine().device("wd179x");
153device_t *fdc = machine().device("wd179x");
154154switch (offset)
155155   {
156156      /* minidisc floppy disc interface */
r14963r14964
171171         /*General purpose port (0x08) for the minidisk I/O */
172172         {
173173         // Rom page bank switching
174         memory_set_bank(space->machine(), "bank2",BIT(data, 5) ? HECTOR_BANK_BASE : HECTOR_BANK_DISC );
174         memory_set_bank(machine(), "bank2",BIT(data, 5) ? HECTOR_BANK_BASE : HECTOR_BANK_DISC );
175175
176176         // Set drive number
177177         if (BIT(data, 6)) wd17xx_set_drive(fdc, 0);  // Set the correct drive number 0
r14963r14964
186186      break;
187187   }
188188}
189WRITE8_HANDLER( hector_switch_bank_w )
189WRITE8_MEMBER(hec2hrp_state::hector_switch_bank_w)
190190{
191   hec2hrp_state *state = space->machine().driver_data<hec2hrp_state>();
192191   if (offset==0x00)   {   /* 0x800 et 0x000=> video page, HR*/
193                     if (isHectoreXtend(space->machine()))
194                        memory_set_bank(space->machine(), "bank1", HECTOR_BANK_VIDEO);
195                     if (state->m_flag_clk ==1)
192                     if (isHectoreXtend(machine()))
193                        memory_set_bank(machine(), "bank1", HECTOR_BANK_VIDEO);
194                     if (m_flag_clk ==1)
196195                     {
197                        state->m_flag_clk=0;
198                        space->machine().device("maincpu")->set_unscaled_clock(XTAL_5MHz);  /* increase CPU*/
196                        m_flag_clk=0;
197                        machine().device("maincpu")->set_unscaled_clock(XTAL_5MHz);  /* increase CPU*/
199198                     }
200199                  }
201200   if (offset==0x04)   {   /* 0x804 => video page, BR*/
202                     state->m_hector_flag_hr=0;
203                     if (isHectoreXtend(space->machine()))
204                        memory_set_bank(space->machine(), "bank1", HECTOR_BANK_VIDEO);
205                     if (state->m_flag_clk ==0)
201                     m_hector_flag_hr=0;
202                     if (isHectoreXtend(machine()))
203                        memory_set_bank(machine(), "bank1", HECTOR_BANK_VIDEO);
204                     if (m_flag_clk ==0)
206205                     {
207                        state->m_flag_clk=1;
208                        space->machine().device("maincpu")->set_unscaled_clock(XTAL_1_75MHz);  /* slowdown CPU*/
206                        m_flag_clk=1;
207                        machine().device("maincpu")->set_unscaled_clock(XTAL_1_75MHz);  /* slowdown CPU*/
209208                     }
210209                  }
211210   if (offset==0x08)   {   /* 0x808 => base page, HR*/
212                     if (isHectoreXtend(space->machine()))
213                        memory_set_bank(space->machine(), "bank1", HECTOR_BANK_PROG);
214                     if (state->m_flag_clk ==1)
211                     if (isHectoreXtend(machine()))
212                        memory_set_bank(machine(), "bank1", HECTOR_BANK_PROG);
213                     if (m_flag_clk ==1)
215214                     {
216                        state->m_flag_clk=0;
217                        space->machine().device("maincpu")->set_unscaled_clock(XTAL_5MHz);  /* increase CPU*/
215                        m_flag_clk=0;
216                        machine().device("maincpu")->set_unscaled_clock(XTAL_5MHz);  /* increase CPU*/
218217                     }
219218
220219                  }
221220   if (offset==0x0c)   {   /* 0x80c => base page, BR*/
222                     state->m_hector_flag_hr=0;
223                     if (isHectoreXtend(space->machine()))
224                        memory_set_bank(space->machine(), "bank1", HECTOR_BANK_PROG);
225                     if (state->m_flag_clk ==0)
221                     m_hector_flag_hr=0;
222                     if (isHectoreXtend(machine()))
223                        memory_set_bank(machine(), "bank1", HECTOR_BANK_PROG);
224                     if (m_flag_clk ==0)
226225                     {
227                        state->m_flag_clk=1;
228                        space->machine().device("maincpu")->set_unscaled_clock(XTAL_1_75MHz);  /* slowdown CPU*/
226                        m_flag_clk=1;
227                        machine().device("maincpu")->set_unscaled_clock(XTAL_1_75MHz);  /* slowdown CPU*/
229228                     }
230229                  }
231230}
232231
233WRITE8_HANDLER( hector_keyboard_w )
232WRITE8_MEMBER(hec2hrp_state::hector_keyboard_w)
234233{
235234   /*nothing to do => read function manage the value*/
236235}
237236
238READ8_HANDLER( hector_keyboard_r )
237READ8_MEMBER(hec2hrp_state::hector_keyboard_r)
239238{
240   hec2hrp_state *state = space->machine().driver_data<hec2hrp_state>();
241239   UINT8 data = 0xff;
242   running_machine &machine = space->machine();
243
244240   static const char *const keynames[] = { "KEY0", "KEY1", "KEY2", "KEY3", "KEY4", "KEY5", "KEY6", "KEY7", "KEY8" };
245241
246242   if (offset ==7) /* Only when joy reading*/
247243   {
248244      /* Read special key for analog joystick emulation only (button and pot are analog signal!) and the reset */
249      data=input_port_read(machine, keynames[8]);
245      data=input_port_read(machine(), keynames[8]);
250246
251247      if (data & 0x01) /* Reset machine ! (on ESC key)*/
252248      {
253        cputag_set_input_line(machine, "maincpu", INPUT_LINE_RESET, PULSE_LINE);
254        if (isHectorHR(machine)) /* aviable for HR and up */
249        cputag_set_input_line(machine(), "maincpu", INPUT_LINE_RESET, PULSE_LINE);
250        if (isHectorHR(machine())) /* aviable for HR and up */
255251         {
256            state->m_hector_flag_hr=1;
257            if (isHectoreXtend(machine))
252            m_hector_flag_hr=1;
253            if (isHectoreXtend(machine()))
258254               {
259                  memory_set_bank(machine, "bank1", HECTOR_BANK_PROG);
260                  memory_set_bank(machine, "bank2", HECTORMX_BANK_PAGE0);
255                  memory_set_bank(machine(), "bank1", HECTOR_BANK_PROG);
256                  memory_set_bank(machine(), "bank2", HECTORMX_BANK_PAGE0);
261257               }
262258            //RESET DISC II unit
263            if (isHectorWithDisc2(machine) )
264               hector_disc2_reset(machine);
259            if (isHectorWithDisc2(machine()) )
260               hector_disc2_reset(machine());
265261
266262            /* floppy md master reset */
267            if (isHectorWithMiniDisc(machine))
268               wd17xx_mr_w(machine.device("wd179x"), 1);
263            if (isHectorWithMiniDisc(machine()))
264               wd17xx_mr_w(machine().device("wd179x"), 1);
269265
270266         }
271267
272268        else /* aviable for BR machines */
273         state->m_hector_flag_hr=0;
269         m_hector_flag_hr=0;
274270
275271
276272      /*Common flag*/
277      state->m_hector_flag_80c = 0;
278      state->m_flag_clk = 0;
273      m_hector_flag_80c = 0;
274      m_flag_clk = 0;
279275      }
280276
281      state->m_actions = 0;
277      m_actions = 0;
282278      if (data & 0x02) /* Fire(0)*/
283         state->m_actions += 1;
279         m_actions += 1;
284280
285281      if (data & 0x04) /* Fire(1)*/
286         state->m_actions += 2;
282         m_actions += 2;
287283
288284      if (data & 0x08) /* Pot(0)+*/
289         state->m_pot0 += 1;
290      if (state->m_pot0>128) state->m_pot0 = 128;
285         m_pot0 += 1;
286      if (m_pot0>128) m_pot0 = 128;
291287
292288      if (data & 0x10) /* Pot(0)-*/
293         state->m_pot0 -= 1;
289         m_pot0 -= 1;
294290
295      if (state->m_pot0>250) state->m_pot0 = 0;
291      if (m_pot0>250) m_pot0 = 0;
296292
297293      if (data & 0x20) /* Pot(1)+*/
298         state->m_pot1 += 1;
299      if (state->m_pot1>128) state->m_pot1 = 128;
294         m_pot1 += 1;
295      if (m_pot1>128) m_pot1 = 128;
300296
301297      if (data & 0x40) /* Pot(1)-*/
302         state->m_pot1 -= 1;
298         m_pot1 -= 1;
303299
304      if (state->m_pot1>250) state->m_pot1 = 0;
300      if (m_pot1>250) m_pot1 = 0;
305301   }
306302
307303   /* in all case return the request value*/
308   return input_port_read(space->machine(), keynames[offset]);
304   return input_port_read(machine(), keynames[offset]);
309305}
310306
311WRITE8_HANDLER( hector_sn_2000_w )
307WRITE8_MEMBER(hec2hrp_state::hector_sn_2000_w)
312308{
313   Mise_A_Jour_Etat(space->machine(), 0x2000+ offset, data);
314   Update_Sound(space, data);
309   Mise_A_Jour_Etat(machine(), 0x2000+ offset, data);
310   Update_Sound(&space, data);
315311}
316WRITE8_HANDLER( hector_sn_2800_w )
312WRITE8_MEMBER(hec2hrp_state::hector_sn_2800_w)
317313{
318   Mise_A_Jour_Etat(space->machine(), 0x2800+ offset, data);
319   Update_Sound(space, data);
314   Mise_A_Jour_Etat(machine(), 0x2800+ offset, data);
315   Update_Sound(&space, data);
320316}
321READ8_HANDLER( hector_cassette_r )
317READ8_MEMBER(hec2hrp_state::hector_cassette_r)
322318{
323   hec2hrp_state *state = space->machine().driver_data<hec2hrp_state>();
324319   double level;
325320   UINT8 value=0;
326321
327   if ((state->m_state3000 & 0x38) != 0x38 )   /* Selon Sb choix cassette ou timer (74153)*/
322   if ((m_state3000 & 0x38) != 0x38 )   /* Selon Sb choix cassette ou timer (74153)*/
328323   {
329      state->m_Data_K7 =  0x00;  /* No cassette => clear bit*/
330      switch (state->m_state3000 & 0x38 )
324      m_Data_K7 =  0x00;  /* No cassette => clear bit*/
325      switch (m_state3000 & 0x38 )
331326      {
332         case 0x08: value = (state->m_actions & 1) ? 0x80 : 0; break;
333         case 0x10: value = state->m_pot0; break;
334         case 0x20: value = (state->m_actions & 2) ? 0x80 : 0; break;
335         case 0x28: value = state->m_pot1; break;
327         case 0x08: value = (m_actions & 1) ? 0x80 : 0; break;
328         case 0x10: value = m_pot0; break;
329         case 0x20: value = (m_actions & 2) ? 0x80 : 0; break;
330         case 0x28: value = m_pot1; break;
336331         default: value = 0; break;
337332      }
338333   }
339334   else
340335   {
341      if (state->m_write_cassette == 0)
336      if (m_write_cassette == 0)
342337      {
343338         /* Accee a la cassette*/
344         level = (cassette_device_image(space->machine())->input());
339         level = (cassette_device_image(machine())->input());
345340
346341         /* Travail du 741 en trigger*/
347342         if  (level < -0.08)
348            state->m_cassette_bit = 0x00;
343            m_cassette_bit = 0x00;
349344         if (level > +0.08)
350            state->m_cassette_bit = 0x01;
345            m_cassette_bit = 0x01;
351346      }
352      /* Programme du sn7474 (bascule) : Changement ??tat bit Data K7 ?? chaque front montant de state->m_cassette_bit*/
353      if ((state->m_cassette_bit != state->m_cassette_bit_mem) && (state->m_cassette_bit !=0))
347      /* Programme du sn7474 (bascule) : Changement ??tat bit Data K7 ?? chaque front montant de m_cassette_bit*/
348      if ((m_cassette_bit != m_cassette_bit_mem) && (m_cassette_bit !=0))
354349      {
355         if (state->m_Data_K7 == 0x00)
356            state->m_Data_K7 =  0x80;/* En poids fort*/
350         if (m_Data_K7 == 0x00)
351            m_Data_K7 =  0x80;/* En poids fort*/
357352         else
358            state->m_Data_K7 =  0x00;
353            m_Data_K7 =  0x00;
359354      }
360      value = ( state->m_CK_signal & 0x7F ) + state->m_Data_K7;
361      state->m_cassette_bit_mem = state->m_cassette_bit;  /* Memorisation etat bit cassette*/
355      value = ( m_CK_signal & 0x7F ) + m_Data_K7;
356      m_cassette_bit_mem = m_cassette_bit;  /* Memorisation etat bit cassette*/
362357   }
363358   return value;
364359}
365WRITE8_HANDLER( hector_sn_3000_w )
360WRITE8_MEMBER(hec2hrp_state::hector_sn_3000_w)
366361{
367   hec2hrp_state *state = space->machine().driver_data<hec2hrp_state>();
368   state->m_state3000 = data & 0xf8; /* except bit 0 to 2*/
369   if ((data & 7) != state->m_oldstate3000 )
362   m_state3000 = data & 0xf8; /* except bit 0 to 2*/
363   if ((data & 7) != m_oldstate3000 )
370364   {
371365      /* Update sn76477 only when necessary!*/
372      Mise_A_Jour_Etat( space->machine(), 0x3000, data & 7 );
373      Update_Sound(space, data & 7);
366      Mise_A_Jour_Etat( machine(), 0x3000, data & 7 );
367      Update_Sound(&space, data & 7);
374368   }
375   state->m_oldstate3000 = data & 7;
369   m_oldstate3000 = data & 7;
376370}
377371
378372/* Color Interface */
379WRITE8_HANDLER( hector_color_a_w )
373WRITE8_MEMBER(hec2hrp_state::hector_color_a_w)
380374{
381   hec2hrp_state *state = space->machine().driver_data<hec2hrp_state>();
382375
383376   if (data & 0x40)
384377   {
385378      /* Bit 6 => motor ON/OFF => for cassette state!*/
386      if (state->m_write_cassette==0)
379      if (m_write_cassette==0)
387380      {
388            cassette_device_image(space->machine())->change_state(
381            cassette_device_image(machine())->change_state(
389382                  CASSETTE_MOTOR_ENABLED ,
390383                  CASSETTE_MASK_MOTOR);
391         // cassette_device_image(space->machine())->set_state((cassette_state)(CASSETTE_PLAY | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED ));
384         // cassette_device_image(machine())->set_state((cassette_state)(CASSETTE_PLAY | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED ));
392385      }
393386   }
394387   else
395388   {   /* stop motor*/
396      cassette_device_image(space->machine())->set_state(CASSETTE_STOPPED);
397      state->m_write_cassette=0;
398      state->m_counter_write =0;
389      cassette_device_image(machine())->set_state(CASSETTE_STOPPED);
390      m_write_cassette=0;
391      m_counter_write =0;
399392   }
400   if (((data & 0x80) != (state->m_oldstate1000 & 0x80)) && ((state->m_oldstate1000 & 7)==(data & 7)) ) /* Bit7 had change but not the color statement*/
393   if (((data & 0x80) != (m_oldstate1000 & 0x80)) && ((m_oldstate1000 & 7)==(data & 7)) ) /* Bit7 had change but not the color statement*/
401394   {
402395      /* Bit 7 => Write bit for cassette!*/
403      state->m_counter_write +=1;
396      m_counter_write +=1;
404397
405      if (state->m_counter_write > 5)
398      if (m_counter_write > 5)
406399      {
407400         /* Wait several cycle before lauch the record to prevent somes bugs*/
408         state->m_counter_write = 6;
409         if (state->m_write_cassette==0)
401         m_counter_write = 6;
402         if (m_write_cassette==0)
410403         {   /* C'est la 1er fois => record*/
411                     cassette_device_image(space->machine())->change_state(
404                     cassette_device_image(machine())->change_state(
412405                  CASSETTE_MOTOR_ENABLED ,
413406                  CASSETTE_MASK_MOTOR);
414            cassette_device_image(space->machine())->set_state(CASSETTE_RECORD);
415            state->m_write_cassette=1;
407            cassette_device_image(machine())->set_state(CASSETTE_RECORD);
408            m_write_cassette=1;
416409         }
417410      }
418411      /* cassette data */
419      cassette_device_image(space->machine())->output(((data & 0x80) == 0x80) ? -1.0 : +1.0);
412      cassette_device_image(machine())->output(((data & 0x80) == 0x80) ? -1.0 : +1.0);
420413   }
421414
422415   /* Other bit : color definition*/
423   state->m_hector_color[0] =  data        & 0x07 ;
424   state->m_hector_color[2] = ((data >> 3)  & 0x07) | (state->m_hector_color[2] & 0x40);
416   m_hector_color[0] =  data        & 0x07 ;
417   m_hector_color[2] = ((data >> 3)  & 0x07) | (m_hector_color[2] & 0x40);
425418
426   state->m_oldstate1000=data; /* For next step*/
419   m_oldstate1000=data; /* For next step*/
427420}
428421
429WRITE8_HANDLER( hector_color_b_w )
422WRITE8_MEMBER(hec2hrp_state::hector_color_b_w)
430423{
431   hec2hrp_state *state = space->machine().driver_data<hec2hrp_state>();
432   device_t *discrete = space->machine().device("discrete");
433   state->m_hector_color[1] =  data        & 0x07;
434   state->m_hector_color[3] = (data >> 3)  & 0x07;
424   device_t *discrete = machine().device("discrete");
425   m_hector_color[1] =  data        & 0x07;
426   m_hector_color[3] = (data >> 3)  & 0x07;
435427
436428   /* Half light on color 2 only on HR machines:*/
437   if (data & 0x40) state->m_hector_color[2] |= 8; else state->m_hector_color[2] &= 7;
429   if (data & 0x40) m_hector_color[2] |= 8; else m_hector_color[2] &= 7;
438430
439431   /* Play bit*/
440432   discrete_sound_w(discrete, NODE_01,  (data & 0x80) ? 0:1 );
r14963r14964
456448********************************************************************************/
457449
458450/*******************  READ PIO 8255 *******************/
459READ8_HANDLER( hector_io_8255_r)
451READ8_MEMBER(hec2hrp_state::hector_io_8255_r)
460452{
461   hec2hrp_state *state = space->machine().driver_data<hec2hrp_state>();
462453
463454   /* 8255 in mode 0 */
464455   UINT8 data =0;
r14963r14964
467458
468459
469460   if ((offset & 0x3) == 0x0) /* Port A */
470      data = state->m_hector_port_a;
461      data = m_hector_port_a;
471462
472463   if ((offset & 0x3) == 0x1) /* Port B */
473464   {
474      data = state->m_hector_port_b;
465      data = m_hector_port_b;
475466      #ifdef DEBUG_TRACE_COM_HECTOR
476467         printf("\nLecture data par Hector %x (portB)",data);
477468      #endif
r14963r14964
479470
480471   if ((offset & 0x3) == 0x2) /* Port C */
481472   {
482      data_l = (state->m_hector_port_c_l & 0x0f);
483      data_h = (state->m_hector_port_c_h & 0xf0);
473      data_l = (m_hector_port_c_l & 0x0f);
474      data_h = (m_hector_port_c_h & 0xf0);
484475
485      if (BIT(state->m_hector_port_cmd, 0))               /* Quartet inf en entree ?*/
486         data_l = (state->m_hector_port_c_l & 0x0f);  /*no change*/
476      if (BIT(m_hector_port_cmd, 0))               /* Quartet inf en entree ?*/
477         data_l = (m_hector_port_c_l & 0x0f);  /*no change*/
487478
488      if (BIT(state->m_hector_port_cmd, 3))               /* Quartet sup en entree ?*/
479      if (BIT(m_hector_port_cmd, 3))               /* Quartet sup en entree ?*/
489480      {
490         state->m_hector_port_c_h = (state->m_hector_port_c_h & 0x0c0);   /* Clear bits 4 & 5*/
481         m_hector_port_c_h = (m_hector_port_c_h & 0x0c0);   /* Clear bits 4 & 5*/
491482
492         if (state->m_hector_disc2_data_w_ready != 0x00)
493            state->m_hector_port_c_h = state->m_hector_port_c_h + 0x010;   // PC4 (data write ready from Disc II to Hector)
483         if (m_hector_disc2_data_w_ready != 0x00)
484            m_hector_port_c_h = m_hector_port_c_h + 0x010;   // PC4 (data write ready from Disc II to Hector)
494485
495         if (state->m_hector_disc2_data_r_ready != 0x00)
496            state->m_hector_port_c_h = state->m_hector_port_c_h + 0x020;   // PC5 (data read ready from Hector to Disc2)
486         if (m_hector_disc2_data_r_ready != 0x00)
487            m_hector_port_c_h = m_hector_port_c_h + 0x020;   // PC5 (data read ready from Hector to Disc2)
497488
498         state->m_hector_port_c_h = state->m_hector_port_c_h & 0x07F;      // PC7 (printer busy=0)
499         data_h =  state->m_hector_port_c_h;
489         m_hector_port_c_h = m_hector_port_c_h & 0x07F;      // PC7 (printer busy=0)
490         data_h =  m_hector_port_c_h;
500491      }
501492      data= data_l + data_h;
502493   }
r14963r14964
505496
506497/*******************  WRITE PIO 8255 *******************/
507498
508WRITE8_HANDLER( hector_io_8255_w)
499WRITE8_MEMBER(hec2hrp_state::hector_io_8255_w)
509500{
510   hec2hrp_state *state = space->machine().driver_data<hec2hrp_state>();
511501   /* 8255 in mode 0 */
512502   if ((offset & 0x3) == 0x0) /* Port A => to printer or Disc II*/
513503   {
514      state->m_hector_port_a = data;
504      m_hector_port_a = data;
515505      /* Port A => to printer*/
516506      /*  Caution : The strobe connection to the printer seems not be used
517507        So, all what is send to the Disc2 unit will be printed too! */
518508
519      if (BIT(state->m_hector_port_c_l, 0)) {      // PC0 (bit X0)= strobe printer !
520         printer_image_device *printer = space->machine().device<printer_image_device>("printer");
521         printer->output(state->m_hector_port_a);
509      if (BIT(m_hector_port_c_l, 0)) {      // PC0 (bit X0)= strobe printer !
510         printer_image_device *printer = machine().device<printer_image_device>("printer");
511         printer->output(m_hector_port_a);
522512      }
523513
524514#ifdef DEBUG_TRACE_COM_HECTOR
r14963r14964
527517   }
528518
529519   if ((offset & 0x3) == 0x1) /* Port B */
530      state->m_hector_port_b = data;
520      m_hector_port_b = data;
531521
532522
533523   if ((offset & 0x3) == 0x2) /* Port C => depending cmd word */
534524   {
535      if (!BIT(state->m_hector_port_cmd, 0))    /* cmd -> Quartet inf en sortie ?*/
525      if (!BIT(m_hector_port_cmd, 0))    /* cmd -> Quartet inf en sortie ?*/
536526      {
537         state->m_hector_port_c_l = data & 0x0f;
527         m_hector_port_c_l = data & 0x0f;
538528         // Utilizing bits port C : PC0 for the printer : strobe!
539         if (BIT(state->m_hector_port_c_l  , 0))      // PC0 (bit X0)= true
529         if (BIT(m_hector_port_c_l  , 0))      // PC0 (bit X0)= true
540530         {
541531            /* Port A => to printer*/
542            //printer_output(space->machine().device("printer"), state->m_hector_port_a);
532            //printer_output(machine().device("printer"), m_hector_port_a);
543533         }
544534         // Utilizing bits port C : PC1 // PC2  for the communication with disc2
545         if (!BIT(state->m_hector_port_c_l  , 1))      // PC1 (bit X1)= true
535         if (!BIT(m_hector_port_c_l  , 1))      // PC1 (bit X1)= true
546536         {
547            // Lecture effectuee => RAZ memoire donnee state->m_hector_disc2_data_write dispo
548            state->m_hector_port_b = state->m_hector_disc2_data_write; // Mep sur port B si 2eme 74374 existant !
549            state->m_hector_disc2_data_w_ready = 0x00;
537            // Lecture effectuee => RAZ memoire donnee m_hector_disc2_data_write dispo
538            m_hector_port_b = m_hector_disc2_data_write; // Mep sur port B si 2eme 74374 existant !
539            m_hector_disc2_data_w_ready = 0x00;
550540            #ifdef DEBUG_TRACE_COM_HECTOR
551               printf("\nEcriture port B vers state->m_hector_disc2_data_write suite a PC1");
541               printf("\nEcriture port B vers m_hector_disc2_data_write suite a PC1");
552542            #endif
553543         }
554         if (!BIT(state->m_hector_port_c_l, 2))      // PC2 (bit X2)= true
544         if (!BIT(m_hector_port_c_l, 2))      // PC2 (bit X2)= true
555545         {
556            state->m_hector_disc2_data_read = state->m_hector_port_a; /* mise en place de l'info presente sur le port A */
557            state->m_hector_disc2_data_r_ready = 0x08;       /* memorisation de l'info */
546            m_hector_disc2_data_read = m_hector_port_a; /* mise en place de l'info presente sur le port A */
547            m_hector_disc2_data_r_ready = 0x08;       /* memorisation de l'info */
558548            #ifdef DEBUG_TRACE_COM_HECTOR
559               printf("\nEcriture port A pour state->m_hector_disc2_data_read suite a PC2");
549               printf("\nEcriture port A pour m_hector_disc2_data_read suite a PC2");
560550            #endif
561551         }
562552      }
563      if (!BIT(state->m_hector_port_cmd, 3))    /* cmd -> Quartet sup en sortie ?*/
564         state->m_hector_port_c_h = (data & 0xf0);
553      if (!BIT(m_hector_port_cmd, 3))    /* cmd -> Quartet sup en sortie ?*/
554         m_hector_port_c_h = (data & 0xf0);
565555   }
566556
567557   if ((offset & 0x3) == 0x3) /* Port commande */
568558   {
569      state->m_hector_port_cmd = data;
559      m_hector_port_cmd = data;
570560   }
571561}
572562/* End of 8255 managing */
573563
574564
575565/*******************  Ecriture PIO specifique machine MX40 *******************/
576WRITE8_HANDLER( hector_mx40_io_port_w)
566WRITE8_MEMBER(hec2hrp_state::hector_mx40_io_port_w)
577567{
578   hec2hrp_state *state = space->machine().driver_data<hec2hrp_state>();
579568/* Bank switching on several address */
580569   if ((offset &0x0ff) == 0x40) /* Port page 0*/
581      memory_set_bank(space->machine(), "bank2", HECTORMX_BANK_PAGE0);
570      memory_set_bank(machine(), "bank2", HECTORMX_BANK_PAGE0);
582571   if ((offset &0x0ff) == 0x41) /* Port page 1*/
583572   {
584      memory_set_bank(space->machine(), "bank2", HECTORMX_BANK_PAGE1);
585      state->m_hector_flag_80c=0;
573      memory_set_bank(machine(), "bank2", HECTORMX_BANK_PAGE1);
574      m_hector_flag_80c=0;
586575   }
587576   if ((offset &0x0ff) == 0x44) /* Port page 2  => 42 pour MX80*/
588      memory_set_bank(space->machine(), "bank2", HECTORMX_BANK_PAGE2);
577      memory_set_bank(machine(), "bank2", HECTORMX_BANK_PAGE2);
589578   if ((offset &0x0ff) == 0x49) /* Port screen resolution*/
590      state->m_hector_flag_80c=0;/* No 80c in 40c !*/
579      m_hector_flag_80c=0;/* No 80c in 40c !*/
591580}
592581
593582/*******************  Ecriture PIO specifique machine MX80 *******************/
594WRITE8_HANDLER( hector_mx80_io_port_w)
583WRITE8_MEMBER(hec2hrp_state::hector_mx80_io_port_w)
595584{
596   hec2hrp_state *state = space->machine().driver_data<hec2hrp_state>();
597585   if ((offset &0x0ff) == 0x40) /* Port page 0*/
598      memory_set_bank(space->machine(), "bank2", HECTORMX_BANK_PAGE0);
586      memory_set_bank(machine(), "bank2", HECTORMX_BANK_PAGE0);
599587   if ((offset &0x0ff) == 0x41) /* Port page 1*/
600588   {
601      memory_set_bank(space->machine(), "bank2", HECTORMX_BANK_PAGE1);
602      state->m_hector_flag_80c=0;
589      memory_set_bank(machine(), "bank2", HECTORMX_BANK_PAGE1);
590      m_hector_flag_80c=0;
603591   }
604592   if ((offset &0x0ff) == 0x42) /* Port page 2  => port different du MX40*/
605      memory_set_bank(space->machine(), "bank2", HECTORMX_BANK_PAGE2);
593      memory_set_bank(machine(), "bank2", HECTORMX_BANK_PAGE2);
606594   if ((offset &0x0ff) == 0x49) /* Port screen resolution*/
607      state->m_hector_flag_80c=1;
595      m_hector_flag_80c=1;
608596}
609597
610598/********************************************************************************
src/mess/machine/mikro80.c
r14963r14964
3232   state->m_key_mask = 0xff;
3333}
3434
35READ8_HANDLER (mikro80_8255_portb_r )
35READ8_MEMBER(mikro80_state::mikro80_8255_portb_r)
3636{
37   mikro80_state *state = space->machine().driver_data<mikro80_state>();
3837   UINT8 key = 0xff;
39   if ((state->m_keyboard_mask & 0x01)!=0) { key &= input_port_read(space->machine(),"LINE0"); }
40   if ((state->m_keyboard_mask & 0x02)!=0) { key &= input_port_read(space->machine(),"LINE1"); }
41   if ((state->m_keyboard_mask & 0x04)!=0) { key &= input_port_read(space->machine(),"LINE2"); }
42   if ((state->m_keyboard_mask & 0x08)!=0) { key &= input_port_read(space->machine(),"LINE3"); }
43   if ((state->m_keyboard_mask & 0x10)!=0) { key &= input_port_read(space->machine(),"LINE4"); }
44   if ((state->m_keyboard_mask & 0x20)!=0) { key &= input_port_read(space->machine(),"LINE5"); }
45   if ((state->m_keyboard_mask & 0x40)!=0) { key &= input_port_read(space->machine(),"LINE6"); }
46   if ((state->m_keyboard_mask & 0x80)!=0) { key &= input_port_read(space->machine(),"LINE7"); }
47   return key & state->m_key_mask;
38   if ((m_keyboard_mask & 0x01)!=0) { key &= input_port_read(machine(),"LINE0"); }
39   if ((m_keyboard_mask & 0x02)!=0) { key &= input_port_read(machine(),"LINE1"); }
40   if ((m_keyboard_mask & 0x04)!=0) { key &= input_port_read(machine(),"LINE2"); }
41   if ((m_keyboard_mask & 0x08)!=0) { key &= input_port_read(machine(),"LINE3"); }
42   if ((m_keyboard_mask & 0x10)!=0) { key &= input_port_read(machine(),"LINE4"); }
43   if ((m_keyboard_mask & 0x20)!=0) { key &= input_port_read(machine(),"LINE5"); }
44   if ((m_keyboard_mask & 0x40)!=0) { key &= input_port_read(machine(),"LINE6"); }
45   if ((m_keyboard_mask & 0x80)!=0) { key &= input_port_read(machine(),"LINE7"); }
46   return key & m_key_mask;
4847}
4948
50READ8_HANDLER (mikro80_8255_portc_r )
49READ8_MEMBER(mikro80_state::mikro80_8255_portc_r)
5150{
52   return input_port_read(space->machine(), "LINE8");
51   return input_port_read(machine(), "LINE8");
5352}
5453
55WRITE8_HANDLER (mikro80_8255_porta_w )
54WRITE8_MEMBER(mikro80_state::mikro80_8255_porta_w)
5655{
57   mikro80_state *state = space->machine().driver_data<mikro80_state>();
58   state->m_keyboard_mask = data ^ 0xff;
56   m_keyboard_mask = data ^ 0xff;
5957}
6058
61WRITE8_HANDLER (mikro80_8255_portc_w )
59WRITE8_MEMBER(mikro80_state::mikro80_8255_portc_w)
6260{
6361}
6462
65static READ8_DEVICE_HANDLER( mikro80_8255_portb_device_r ) { return mikro80_8255_portb_r(device->machine().device("maincpu")->memory().space(AS_PROGRAM), offset); }
66static READ8_DEVICE_HANDLER( mikro80_8255_portc_device_r ) { return mikro80_8255_portc_r(device->machine().device("maincpu")->memory().space(AS_PROGRAM), offset); }
67static WRITE8_DEVICE_HANDLER( mikro80_8255_porta_device_w ) { mikro80_8255_porta_w(device->machine().device("maincpu")->memory().space(AS_PROGRAM), offset, data); }
68
6963I8255_INTERFACE( mikro80_ppi8255_interface )
7064{
7165   DEVCB_NULL,
72   DEVCB_HANDLER(mikro80_8255_porta_device_w),
73   DEVCB_HANDLER(mikro80_8255_portb_device_r),
66   DEVCB_DRIVER_MEMBER(mikro80_state, mikro80_8255_porta_w),
67   DEVCB_DRIVER_MEMBER(mikro80_state, mikro80_8255_portb_r),
7468   DEVCB_NULL,
75   DEVCB_HANDLER(mikro80_8255_portc_device_r),
69   DEVCB_DRIVER_MEMBER(mikro80_state, mikro80_8255_portc_r),
7670   DEVCB_NULL,
7771};
7872
r14963r14964
9185}
9286
9387
94READ8_HANDLER( mikro80_keyboard_r )
88READ8_MEMBER(mikro80_state::mikro80_keyboard_r)
9589{
96   i8255_device *ppi = space->machine().device<i8255_device>("ppi8255");
97   return ppi->read(*space, offset^0x03);
90   i8255_device *ppi = machine().device<i8255_device>("ppi8255");
91   return ppi->read(space, offset^0x03);
9892}
9993
100WRITE8_HANDLER( mikro80_keyboard_w )
94WRITE8_MEMBER(mikro80_state::mikro80_keyboard_w)
10195{
102   i8255_device *ppi = space->machine().device<i8255_device>("ppi8255");
103   ppi->write(*space, offset^0x03, data);
96   i8255_device *ppi = machine().device<i8255_device>("ppi8255");
97   ppi->write(space, offset^0x03, data);
10498}
10599
106100
107WRITE8_HANDLER( mikro80_tape_w )
101WRITE8_MEMBER(mikro80_state::mikro80_tape_w)
108102{
109   space->machine().device<cassette_image_device>(CASSETTE_TAG)->output(data & 0x01 ? 1 : -1);
103   machine().device<cassette_image_device>(CASSETTE_TAG)->output(data & 0x01 ? 1 : -1);
110104}
111105
112106
113READ8_HANDLER( mikro80_tape_r )
107READ8_MEMBER(mikro80_state::mikro80_tape_r)
114108{
115   double level = space->machine().device<cassette_image_device>(CASSETTE_TAG)->input();
109   double level = machine().device<cassette_image_device>(CASSETTE_TAG)->input();
116110   if (level <  0) {
117111         return 0x00;
118112   }
src/mess/machine/pc.c
r14963r14964
6565 *
6666 *************************************************************************/
6767
68READ8_HANDLER(pc_page_r)
68READ8_MEMBER(pc_state::pc_page_r)
6969{
7070   return 0xFF;
7171}
7272
7373
74WRITE8_HANDLER(pc_page_w)
74WRITE8_MEMBER(pc_state::pc_page_w)
7575{
76   pc_state *st = space->machine().driver_data<pc_state>();
7776   switch(offset % 4)
7877   {
7978   case 1:
80      st->m_dma_offset[0][2] = data;
79      m_dma_offset[0][2] = data;
8180      break;
8281   case 2:
83      st->m_dma_offset[0][3] = data;
82      m_dma_offset[0][3] = data;
8483      break;
8584   case 3:
86      st->m_dma_offset[0][0] = st->m_dma_offset[0][1] = data;
85      m_dma_offset[0][0] = m_dma_offset[0][1] = data;
8786      break;
8887   }
8988}
r14963r14964
9998}
10099
101100
102static READ8_HANDLER( pc_dma_read_byte )
101READ8_MEMBER(pc_state::pc_dma_read_byte)
103102{
104103   UINT8 result;
105   pc_state *st = space->machine().driver_data<pc_state>();
106   offs_t page_offset = (((offs_t) st->m_dma_offset[0][st->m_dma_channel]) << 16)
104   offs_t page_offset = (((offs_t) m_dma_offset[0][m_dma_channel]) << 16)
107105      & 0x0F0000;
108106
109   result = space->read_byte( page_offset + offset);
107   result = space.read_byte( page_offset + offset);
110108   return result;
111109}
112110
113111
114static WRITE8_HANDLER( pc_dma_write_byte )
112WRITE8_MEMBER(pc_state::pc_dma_write_byte)
115113{
116   pc_state *st = space->machine().driver_data<pc_state>();
117   offs_t page_offset = (((offs_t) st->m_dma_offset[0][st->m_dma_channel]) << 16)
114   offs_t page_offset = (((offs_t) m_dma_offset[0][m_dma_channel]) << 16)
118115      & 0x0F0000;
119116
120   space->write_byte( page_offset + offset, data);
117   space.write_byte( page_offset + offset, data);
121118}
122119
123120
r14963r14964
173170{
174171   DEVCB_DEVICE_LINE("dma8237", pc_dma_hrq_changed),
175172   DEVCB_DEVICE_LINE("dma8237", pc_dma8237_out_eop),
176   DEVCB_MEMORY_HANDLER("maincpu", PROGRAM, pc_dma_read_byte),
177   DEVCB_MEMORY_HANDLER("maincpu", PROGRAM, pc_dma_write_byte),
173   DEVCB_DRIVER_MEMBER(pc_state, pc_dma_read_byte),
174   DEVCB_DRIVER_MEMBER(pc_state, pc_dma_write_byte),
178175   { DEVCB_NULL, DEVCB_NULL, DEVCB_DEVICE_HANDLER("dma8237", pc_dma8237_fdc_dack_r), DEVCB_DEVICE_HANDLER("dma8237", pc_dma8237_hdc_dack_r) },
179176   { DEVCB_DEVICE_HANDLER("dma8237", pc_dma8237_0_dack_w), DEVCB_NULL, DEVCB_DEVICE_HANDLER("dma8237", pc_dma8237_fdc_dack_w), DEVCB_DEVICE_HANDLER("dma8237", pc_dma8237_hdc_dack_w) },
180177   { DEVCB_DEVICE_LINE("dma8237", pc_dack0_w), DEVCB_DEVICE_LINE("dma8237", pc_dack1_w), DEVCB_DEVICE_LINE("dma8237", pc_dack2_w), DEVCB_DEVICE_LINE("dma8237", pc_dack3_w) }
r14963r14964
432429
433430static UINT8   nmi_enabled;
434431
435WRITE8_HANDLER( pc_nmi_enable_w )
432WRITE8_MEMBER(pc_state::pc_nmi_enable_w)
436433{
437   logerror( "%08X: changing NMI state to %s\n", cpu_get_pc(&space->device()), data & 0x80 ? "enabled" : "disabled" );
434   logerror( "%08X: changing NMI state to %s\n", cpu_get_pc(&space.device()), data & 0x80 ? "enabled" : "disabled" );
438435
439436   nmi_enabled = data & 0x80;
440437}
r14963r14964
486483} pcjr_keyb;
487484
488485
489READ8_HANDLER( pcjr_nmi_enable_r )
486READ8_MEMBER(pc_state::pcjr_nmi_enable_r)
490487{
491488   pcjr_keyb.latch = 0;
492489
r14963r14964
622619 **********************************************************/
623620
624621
625WRITE8_HANDLER( ibm5150_kb_set_clock_signal )
622WRITE8_MEMBER(pc_state::ibm5150_kb_set_clock_signal)
626623{
627   pc_state *st = space->machine().driver_data<pc_state>();
628   device_t *keyboard = space->machine().device("keyboard");
624   device_t *keyboard = machine().device("keyboard");
629625
630   if ( st->m_ppi_clock_signal != data )
626   if ( m_ppi_clock_signal != data )
631627   {
632      if ( st->m_ppi_keyb_clock && st->m_ppi_shift_enable )
628      if ( m_ppi_keyb_clock && m_ppi_shift_enable )
633629      {
634         st->m_ppi_clock_signal = data;
635         if ( ! st->m_ppi_keyboard_clear )
630         m_ppi_clock_signal = data;
631         if ( ! m_ppi_keyboard_clear )
636632         {
637633            /* Data is clocked in on a high->low transition */
638634            if ( ! data )
639635            {
640               UINT8   trigger_irq = st->m_ppi_shift_register & 0x01;
636               UINT8   trigger_irq = m_ppi_shift_register & 0x01;
641637
642               st->m_ppi_shift_register = ( st->m_ppi_shift_register >> 1 ) | ( st->m_ppi_data_signal << 7 );
638               m_ppi_shift_register = ( m_ppi_shift_register >> 1 ) | ( m_ppi_data_signal << 7 );
643639               if ( trigger_irq )
644640               {
645                  pic8259_ir1_w(st->m_pic8259, 1);
646                  st->m_ppi_shift_enable = 0;
647                  st->m_ppi_clock_signal = 0;
648                  kb_keytronic_clock_w(keyboard, st->m_ppi_clock_signal);
641                  pic8259_ir1_w(m_pic8259, 1);
642                  m_ppi_shift_enable = 0;
643                  m_ppi_clock_signal = 0;
644                  kb_keytronic_clock_w(keyboard, m_ppi_clock_signal);
649645               }
650646            }
651647         }
652648      }
653649   }
654650
655   kb_keytronic_clock_w(keyboard, st->m_ppi_clock_signal);
651   kb_keytronic_clock_w(keyboard, m_ppi_clock_signal);
656652}
657653
658654
659WRITE8_HANDLER( ibm5150_kb_set_data_signal )
655WRITE8_MEMBER(pc_state::ibm5150_kb_set_data_signal)
660656{
661   pc_state *st = space->machine().driver_data<pc_state>();
662   device_t *keyboard = space->machine().device("keyboard");
657   device_t *keyboard = machine().device("keyboard");
663658
664   st->m_ppi_data_signal = data;
659   m_ppi_data_signal = data;
665660
666   kb_keytronic_data_w(keyboard, st->m_ppi_data_signal);
661   kb_keytronic_data_w(keyboard, m_ppi_data_signal);
667662}
668663
669664static READ8_DEVICE_HANDLER (ibm5160_ppi_porta_r)
r14963r14964
13901385   pc_rtc.timer->adjust(attotime::zero, 0, attotime(1,0));
13911386}
13921387
1393READ8_HANDLER( pc_rtc_r )
1388READ8_MEMBER(pc_state::pc_rtc_r)
13941389{
13951390   int data;
13961391   switch (offset) {
r14963r14964
14011396   return data;
14021397}
14031398
1404WRITE8_HANDLER( pc_rtc_w )
1399WRITE8_MEMBER(pc_state::pc_rtc_w)
14051400{
14061401   logerror( "rtc write %.2x %.2x\n", offset, data);
14071402   switch(offset) {
r14963r14964
14101405   }
14111406}
14121407
1413READ16_HANDLER( pc16le_rtc_r ) { return read16le_with_read8_handler(pc_rtc_r, space, offset, mem_mask); }
1414WRITE16_HANDLER( pc16le_rtc_w ) { write16le_with_write8_handler(pc_rtc_w, space, offset, data, mem_mask); }
1415
14161408/*************************************************************************
14171409 *
14181410 *      EXP
r14963r14964
14321424   UINT8 reg[8];
14331425} pc_expansion={ { 0,0,0,0,0,0,1 } };
14341426
1435WRITE8_HANDLER ( pc_EXP_w )
1427WRITE8_MEMBER(pc_state::pc_EXP_w)
14361428{
1437   running_machine &machine = space->machine();
1438
1439   DBG_LOG(1,"EXP_unit_w",("%.2x $%02x\n", offset, data));
1429   //DBG_LOG(1,"EXP_unit_w",("%.2x $%02x\n", offset, data));
14401430   switch (offset) {
14411431   case 4:
14421432      pc_expansion.reg[4]=pc_expansion.reg[5]=pc_expansion.reg[6]=data;
r14963r14964
14461436   }
14471437}
14481438
1449READ8_HANDLER ( pc_EXP_r )
1439READ8_MEMBER(pc_state::pc_EXP_r)
14501440{
14511441    int data;
14521442   UINT16 a;
1453   running_machine &machine = space->machine();
1454
14551443   switch (offset) {
14561444   case 6:
14571445      data = pc_expansion.reg[offset];
r14963r14964
14631451   default:
14641452      data = pc_expansion.reg[offset];
14651453   }
1466    DBG_LOG(1,"EXP_unit_r",("%.2x $%02x\n", offset, data));
1454    //DBG_LOG(1,"EXP_unit_r",("%.2x $%02x\n", offset, data));
14671455   return data;
14681456}
14691457
src/mess/machine/pecom.c
r14963r14964
4848   state->m_reset_timer->adjust(attotime::from_msec(5));
4949}
5050
51static READ8_HANDLER( pecom_cdp1869_charram_r )
51READ8_MEMBER(pecom_state::pecom_cdp1869_charram_r)
5252{
53   pecom_state *state = space->machine().driver_data<pecom_state>();
54   return state->m_cdp1869->char_ram_r(*space, offset);
53   return m_cdp1869->char_ram_r(space, offset);
5554}
5655
57static WRITE8_HANDLER( pecom_cdp1869_charram_w )
56WRITE8_MEMBER(pecom_state::pecom_cdp1869_charram_w)
5857{
59   pecom_state *state = space->machine().driver_data<pecom_state>();
60   return state->m_cdp1869->char_ram_w(*space, offset, data);
58   return m_cdp1869->char_ram_w(space, offset, data);
6159}
6260
63static READ8_HANDLER( pecom_cdp1869_pageram_r )
61READ8_MEMBER(pecom_state::pecom_cdp1869_pageram_r)
6462{
65   pecom_state *state = space->machine().driver_data<pecom_state>();
66   return state->m_cdp1869->page_ram_r(*space, offset);
63   return m_cdp1869->page_ram_r(space, offset);
6764}
6865
69static WRITE8_HANDLER( pecom_cdp1869_pageram_w )
66WRITE8_MEMBER(pecom_state::pecom_cdp1869_pageram_w)
7067{
71   pecom_state *state = space->machine().driver_data<pecom_state>();
72   return state->m_cdp1869->page_ram_w(*space, offset, data);
68   return m_cdp1869->page_ram_w(space, offset, data);
7369}
7470
75WRITE8_HANDLER( pecom_bank_w )
71WRITE8_MEMBER(pecom_state::pecom_bank_w)
7672{
77//  pecom_state *state = space->machine().driver_data<pecom_state>();
78   address_space *space2 = space->machine().device(CDP1802_TAG)->memory().space(AS_PROGRAM);
79   UINT8 *rom = space->machine().region(CDP1802_TAG)->base();
80   space->machine().device(CDP1802_TAG)->memory().space(AS_PROGRAM)->install_write_bank(0x0000, 0x3fff, "bank1");
81   memory_set_bankptr(space->machine(), "bank1", space->machine().device<ram_device>(RAM_TAG)->pointer() + 0x0000);
73   address_space *space2 = machine().device(CDP1802_TAG)->memory().space(AS_PROGRAM);
74   UINT8 *rom = machine().region(CDP1802_TAG)->base();
75   machine().device(CDP1802_TAG)->memory().space(AS_PROGRAM)->install_write_bank(0x0000, 0x3fff, "bank1");
76   memory_set_bankptr(machine(), "bank1", machine().device<ram_device>(RAM_TAG)->pointer() + 0x0000);
8277
8378   if (data==2)
8479   {
85      space2->install_legacy_read_handler (0xf000, 0xf7ff, FUNC(pecom_cdp1869_charram_r));
86      space2->install_legacy_write_handler(0xf000, 0xf7ff, FUNC(pecom_cdp1869_charram_w));
87      space2->install_legacy_read_handler (0xf800, 0xffff, FUNC(pecom_cdp1869_pageram_r));
88      space2->install_legacy_write_handler(0xf800, 0xffff, FUNC(pecom_cdp1869_pageram_w));
80      space2->install_read_handler (0xf000, 0xf7ff, read8_delegate(FUNC(pecom_state::pecom_cdp1869_charram_r),this));
81      space2->install_write_handler(0xf000, 0xf7ff, write8_delegate(FUNC(pecom_state::pecom_cdp1869_charram_w),this));
82      space2->install_read_handler (0xf800, 0xffff, read8_delegate(FUNC(pecom_state::pecom_cdp1869_pageram_r),this));
83      space2->install_write_handler(0xf800, 0xffff, write8_delegate(FUNC(pecom_state::pecom_cdp1869_pageram_w),this));
8984   }
9085   else
9186   {
r14963r14964
9388      space2->unmap_write(0xf800, 0xffff);
9489      space2->install_read_bank (0xf000, 0xf7ff, "bank3");
9590      space2->install_read_bank (0xf800, 0xffff, "bank4");
96      memory_set_bankptr(space->machine(), "bank3", rom + 0xf000);
97      memory_set_bankptr(space->machine(), "bank4", rom + 0xf800);
91      memory_set_bankptr(machine(), "bank3", rom + 0xf000);
92      memory_set_bankptr(machine(), "bank4", rom + 0xf800);
9893   }
9994}
10095
101READ8_HANDLER (pecom_keyboard_r)
96READ8_MEMBER(pecom_state::pecom_keyboard_r)
10297{
10398   static const char *const keynames[] = {
10499      "LINE0", "LINE1", "LINE2", "LINE3", "LINE4", "LINE5", "LINE6", "LINE7",
r14963r14964
111106       Address is available on address bus during reading of value from port, and that is
112107       used to determine keyboard line reading
113108    */
114   UINT16 addr = cpu_get_reg(space->machine().device(CDP1802_TAG), COSMAC_R0 + cpu_get_reg(space->machine().device(CDP1802_TAG), COSMAC_X));
109   UINT16 addr = cpu_get_reg(machine().device(CDP1802_TAG), COSMAC_R0 + cpu_get_reg(machine().device(CDP1802_TAG), COSMAC_X));
115110   /* just in case somone is reading non existing ports */
116111   if (addr<0x7cca || addr>0x7ce3) return 0;
117   return input_port_read(space->machine(), keynames[addr - 0x7cca]) & 0x03;
112   return input_port_read(machine(), keynames[addr - 0x7cca]) & 0x03;
118113}
119114
120115/* CDP1802 Interface */
src/mess/machine/pce.c
r14963r14964
109109static TIMER_CALLBACK( pce_cd_adpcm_fadeout_callback );
110110static TIMER_CALLBACK( pce_cd_adpcm_fadein_callback );
111111
112static WRITE8_HANDLER( pce_sf2_banking_w )
112WRITE8_MEMBER(pce_state::pce_sf2_banking_w)
113113{
114   memory_set_bankptr( space->machine(), "bank2", space->machine().region("user1")->base() + offset * 0x080000 + 0x080000 );
115   memory_set_bankptr( space->machine(), "bank3", space->machine().region("user1")->base() + offset * 0x080000 + 0x088000 );
116   memory_set_bankptr( space->machine(), "bank4", space->machine().region("user1")->base() + offset * 0x080000 + 0x0D0000 );
114   memory_set_bankptr( machine(), "bank2", machine().region("user1")->base() + offset * 0x080000 + 0x080000 );
115   memory_set_bankptr( machine(), "bank3", machine().region("user1")->base() + offset * 0x080000 + 0x088000 );
116   memory_set_bankptr( machine(), "bank4", machine().region("user1")->base() + offset * 0x080000 + 0x0D0000 );
117117}
118118
119static WRITE8_HANDLER( pce_cartridge_ram_w )
119WRITE8_MEMBER(pce_state::pce_cartridge_ram_w)
120120{
121   pce_state *state = space->machine().driver_data<pce_state>();
122   state->m_cartridge_ram[offset] = data;
121   m_cartridge_ram[offset] = data;
123122}
124123
125124DEVICE_IMAGE_LOAD(pce_cart)
r14963r14964
221220   /* Check for Street fighter 2 */
222221   if (size == PCE_ROM_MAXSIZE)
223222   {
224      image.device().machine().device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler(0x01ff0, 0x01ff3, FUNC(pce_sf2_banking_w));
223      image.device().machine().device("maincpu")->memory().space(AS_PROGRAM)->install_write_handler(0x01ff0, 0x01ff3, write8_delegate(FUNC(pce_state::pce_sf2_banking_w),state));
225224   }
226225
227226   /* Check for Populous */
r14963r14964
229228   {
230229      state->m_cartridge_ram = auto_alloc_array(image.device().machine(), UINT8, 0x8000);
231230      memory_set_bankptr(image.device().machine(), "bank2", state->m_cartridge_ram);
232      image.device().machine().device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler(0x080000, 0x087FFF, FUNC(pce_cartridge_ram_w));
231      image.device().machine().device("maincpu")->memory().space(AS_PROGRAM)->install_write_handler(0x080000, 0x087FFF, write8_delegate(FUNC(pce_state::pce_cartridge_ram_w),state));
233232   }
234233
235234   /* Check for CD system card */
r14963r14964
244243      {
245244         state->m_cartridge_ram = auto_alloc_array(image.device().machine(), UINT8, 0x30000);
246245         memory_set_bankptr(image.device().machine(), "bank4", state->m_cartridge_ram);
247         image.device().machine().device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler(0x0D0000, 0x0FFFFF, FUNC(pce_cartridge_ram_w));
248         image.device().machine().device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_readwrite_handler(0x080000, 0x087FFF, FUNC(pce_cd_acard_wram_r),FUNC(pce_cd_acard_wram_w));
246         image.device().machine().device("maincpu")->memory().space(AS_PROGRAM)->install_write_handler(0x0D0000, 0x0FFFFF, write8_delegate(FUNC(pce_state::pce_cartridge_ram_w),state));
247         image.device().machine().device("maincpu")->memory().space(AS_PROGRAM)->install_readwrite_handler(0x080000, 0x087FFF, read8_delegate(FUNC(pce_state::pce_cd_acard_wram_r),state),write8_delegate(FUNC(pce_state::pce_cd_acard_wram_w),state));
249248      }
250249   }
251250   return 0;
r14963r14964
300299}
301300
302301/* todo: how many input ports does the PCE have? */
303WRITE8_HANDLER ( mess_pce_joystick_w )
302WRITE8_MEMBER(pce_state::mess_pce_joystick_w)
304303{
305   pce_state *state = space->machine().driver_data<pce_state>();
306304   int joy_i;
307   UINT8 joy_type = input_port_read(space->machine(),"JOY_TYPE");
305   UINT8 joy_type = input_port_read(machine(),"JOY_TYPE");
308306
309   h6280io_set_buffer(&space->device(), data);
307   h6280io_set_buffer(&space.device(), data);
310308
311309    /* bump counter on a low-to-high transition of bit 1 */
312    if ((!state->m_joystick_data_select) && (data & JOY_CLOCK))
310    if ((!m_joystick_data_select) && (data & JOY_CLOCK))
313311    {
314        state->m_joystick_port_select = (state->m_joystick_port_select + 1) & 0x07;
312        m_joystick_port_select = (m_joystick_port_select + 1) & 0x07;
315313    }
316314
317315    /* do we want buttons or direction? */
318    state->m_joystick_data_select = data & JOY_CLOCK;
316    m_joystick_data_select = data & JOY_CLOCK;
319317
320318    /* clear counter if bit 2 is set */
321319    if (data & JOY_RESET)
322320    {
323      state->m_joystick_port_select = 0;
321      m_joystick_port_select = 0;
324322
325323      for (joy_i = 0; joy_i < 5; joy_i++)
326324      {
327325         if (((joy_type >> (joy_i*2)) & 3) == 2)
328              state->m_joy_6b_packet[joy_i] ^= 1;
326              m_joy_6b_packet[joy_i] ^= 1;
329327      }
330328    }
331329}
332330
333READ8_HANDLER ( mess_pce_joystick_r )
331READ8_MEMBER(pce_state::mess_pce_joystick_r)
334332{
335   pce_state *state = space->machine().driver_data<pce_state>();
336333   static const char *const joyname[4][5] = {
337334      { "JOY_P1", "JOY_P2", "JOY_P3", "JOY_P4", "JOY_P5" },
338335      { },
339336      { "JOY6B_P1", "JOY6B_P2", "JOY6B_P3", "JOY6B_P4", "JOY6B_P5" },
340337      { }
341338   };
342   UINT8 joy_type = input_port_read(space->machine(), "JOY_TYPE");
339   UINT8 joy_type = input_port_read(machine(), "JOY_TYPE");
343340   UINT8 ret, data;
344341
345   if (state->m_joystick_port_select <= 4)
342   if (m_joystick_port_select <= 4)
346343   {
347      switch((joy_type >> (state->m_joystick_port_select*2)) & 3)
344      switch((joy_type >> (m_joystick_port_select*2)) & 3)
348345      {
349346         case 0: //2-buttons pad
350            data = input_port_read(space->machine(), joyname[0][state->m_joystick_port_select]);
347            data = input_port_read(machine(), joyname[0][m_joystick_port_select]);
351348            break;
352349         case 2: //6-buttons pad
353350            /*
r14963r14964
357354                Note that six buttons pad just doesn't work with (almost?) every single 2-button-only games, it's really just an after-thought and it is like this
358355                on real HW.
359356                */
360            data = input_port_read(space->machine(), joyname[2][state->m_joystick_port_select]) >> (state->m_joy_6b_packet[state->m_joystick_port_select]*8);
357            data = input_port_read(machine(), joyname[2][m_joystick_port_select]) >> (m_joy_6b_packet[m_joystick_port_select]*8);
361358            break;
362359         default:
363360            data = 0xff;
r14963r14964
368365      data = 0xff;
369366
370367
371   if (state->m_joystick_data_select)
368   if (m_joystick_data_select)
372369      data >>= 4;
373370
374   ret = (data & 0x0f) | state->m_io_port_options;
371   ret = (data & 0x0f) | m_io_port_options;
375372#ifdef UNIFIED_PCE
376373   ret &= ~0x40;
377374#endif
r14963r14964
12291226   pce_cd.adpcm_fadein_timer->adjust(attotime::never);
12301227}
12311228
1232WRITE8_HANDLER( pce_cd_bram_w )
1229WRITE8_MEMBER(pce_state::pce_cd_bram_w)
12331230{
1234   pce_state *state = space->machine().driver_data<pce_state>();
1235   pce_cd_t &pce_cd = state->m_cd;
1231   pce_cd_t &pce_cd = m_cd;
12361232   if ( ! pce_cd.bram_locked )
12371233   {
12381234      pce_cd.bram[ offset ] = data;
r14963r14964
13321328}
13331329
13341330
1335WRITE8_HANDLER( pce_cd_intf_w )
1331WRITE8_MEMBER(pce_state::pce_cd_intf_w)
13361332{
1337   pce_state *state = space->machine().driver_data<pce_state>();
1338   pce_cd_t &pce_cd = state->m_cd;
1339   pce_cd_update(space->machine());
1333   pce_cd_t &pce_cd = m_cd;
1334   pce_cd_update(machine());
13401335
1341   if(offset & 0x200 && state->m_sys3_card && state->m_acard) // route Arcade Card handling ports
1336   if(offset & 0x200 && m_sys3_card && m_acard) // route Arcade Card handling ports
13421337      return pce_cd_acard_w(space,offset,data);
13431338
1344   logerror("%04X: write to CD interface offset %02X, data %02X\n", cpu_get_pc(&space->device()), offset, data );
1339   logerror("%04X: write to CD interface offset %02X, data %02X\n", cpu_get_pc(&space.device()), offset, data );
13451340
13461341   switch( offset & 0xf )
13471342   {
13481343   case 0x00:   /* CDC status */
13491344      /* select device (which bits??) */
13501345      pce_cd.scsi_SEL = 1;
1351      pce_cd_update(space->machine());
1346      pce_cd_update(machine());
13521347      pce_cd.scsi_SEL = 0;
13531348      pce_cd.adpcm_dma_timer->adjust(attotime::never); // stop ADPCM DMA here
13541349      /* any write here clears CD transfer irqs */
13551350      pce_cd.regs[0x03] &= ~0x70;
1356      cputag_set_input_line(space->machine(), "maincpu", 1, CLEAR_LINE );
1351      cputag_set_input_line(machine(), "maincpu", 1, CLEAR_LINE );
13571352      break;
13581353   case 0x01:   /* CDC command / status / data */
13591354      break;
r14963r14964
13651360            /* bit 2 - ?? irq */
13661361      pce_cd.scsi_ACK = data & 0x80;
13671362      /* Don't set or reset any irq lines, but just verify the current state */
1368      pce_cd_set_irq_line( space->machine(), 0, 0 );
1363      pce_cd_set_irq_line( machine(), 0, 0 );
13691364      break;
13701365   case 0x03:   /* BRAM lock / CD status / IRQ - Read Only register */
13711366      break;
r14963r14964
13791374      if ( data & 0x80 )
13801375      {
13811376         pce_cd.bram_locked = 0;
1382         pce_set_cd_bram(space->machine());
1377         pce_set_cd_bram(machine());
13831378      }
13841379      break;
13851380   case 0x08:   /* ADPCM address (LSB) / CD data */
r14963r14964
13871382   case 0x09:   /* ADPCM address (MSB) */
13881383      break;
13891384   case 0x0A:   /* ADPCM RAM data port */
1390      pce_cd_set_adpcm_ram_byte(space->machine(), data);
1385      pce_cd_set_adpcm_ram_byte(machine(), data);
13911386      break;
13921387   case 0x0B:   /* ADPCM DMA control */
13931388      if ( data & 0x03 )
r14963r14964
14091404         pce_cd.msm_end_addr = 0;
14101405         pce_cd.msm_half_addr = 0;
14111406         pce_cd.msm_nibble = 0;
1412         adpcm_stop(space->machine(), 0);
1413         msm5205_reset_w( space->machine().device( "msm5205"), 1 );
1407         adpcm_stop(machine(), 0);
1408         msm5205_reset_w( machine().device( "msm5205"), 1 );
14141409      }
14151410
14161411      if ( ( data & 0x40) && ((pce_cd.regs[0x0D] & 0x40) == 0) ) // ADPCM play
r14963r14964
14191414         pce_cd.msm_end_addr = (pce_cd.adpcm_read_ptr + pce_cd.adpcm_length) & 0xffff;
14201415         pce_cd.msm_half_addr = (pce_cd.adpcm_read_ptr + (pce_cd.adpcm_length / 2)) & 0xffff;
14211416         pce_cd.msm_nibble = 0;
1422         adpcm_play(space->machine());
1423         msm5205_reset_w( space->machine().device( "msm5205"), 0 );
1417         adpcm_play(machine());
1418         msm5205_reset_w( machine().device( "msm5205"), 0 );
14241419
14251420         //popmessage("%08x %08x",pce_cd.adpcm_read_ptr,pce_cd.adpcm_length);
14261421      }
14271422      else if ( (data & 0x40) == 0 )
14281423      {
14291424         /* used by Buster Bros to cancel an in-flight sample */
1430         adpcm_stop(space->machine(), 0);
1431         msm5205_reset_w( space->machine().device( "msm5205"), 1 );
1425         adpcm_stop(machine(), 0);
1426         msm5205_reset_w( machine().device( "msm5205"), 1 );
14321427      }
14331428
14341429      pce_cd.msm_repeat = (data & 0x20) >> 5;
r14963r14964
14501445      break;
14511446   case 0x0E:   /* ADPCM playback rate */
14521447      pce_cd.adpcm_clock_divider = 0x10 - ( data & 0x0F );
1453      msm5205_change_clock_w(space->machine().device("msm5205"), (PCE_CD_CLOCK / 6) / pce_cd.adpcm_clock_divider);
1448      msm5205_change_clock_w(machine().device("msm5205"), (PCE_CD_CLOCK / 6) / pce_cd.adpcm_clock_divider);
14541449      break;
14551450   case 0x0F:   /* ADPCM and CD audio fade timer */
14561451      /* TODO: timers needs HW tests */
r14963r14964
15171512      return;
15181513   }
15191514   pce_cd.regs[offset & 0xf] = data;
1520   pce_cd_update(space->machine());
1515   pce_cd_update(machine());
15211516}
15221517
15231518static TIMER_CALLBACK( pce_cd_clear_ack )
r14963r14964
15831578   }
15841579}
15851580
1586READ8_HANDLER( pce_cd_intf_r )
1581READ8_MEMBER(pce_state::pce_cd_intf_r)
15871582{
1588   pce_state *state = space->machine().driver_data<pce_state>();
1589   pce_cd_t &pce_cd = state->m_cd;
1583   pce_cd_t &pce_cd = m_cd;
15901584   UINT8 data = pce_cd.regs[offset & 0x0F];
15911585
1592   pce_cd_update(space->machine());
1586   pce_cd_update(machine());
15931587
1594   if(offset & 0x200 && state->m_sys3_card && state->m_acard) // route Arcade Card handling ports
1588   if(offset & 0x200 && m_sys3_card && m_acard) // route Arcade Card handling ports
15951589      return pce_cd_acard_r(space,offset);
15961590
1597   logerror("%04X: read from CD interface offset %02X\n", cpu_get_pc(&space->device()), offset );
1591   logerror("%04X: read from CD interface offset %02X\n", cpu_get_pc(&space.device()), offset );
15981592
1599   if((offset & 0xc0) == 0xc0 && state->m_sys3_card) //System 3 Card header handling
1593   if((offset & 0xc0) == 0xc0 && m_sys3_card) //System 3 Card header handling
16001594   {
16011595      switch(offset & 0xcf)
16021596      {
16031597         case 0xc1: return 0xaa;
16041598         case 0xc2: return 0x55;
16051599         case 0xc3: return 0x00;
1606         case 0xc5: return (state->m_sys3_card & 2) ? 0x55 : 0xaa;
1607         case 0xc6: return (state->m_sys3_card & 2) ? 0xaa : 0x55;
1600         case 0xc5: return (m_sys3_card & 2) ? 0x55 : 0xaa;
1601         case 0xc6: return (m_sys3_card & 2) ? 0xaa : 0x55;
16081602         case 0xc7: return 0x03;
16091603      }
16101604   }
r14963r14964
16271621      /* bit 4 set when CD motor is on */
16281622      /* bit 2 set when less than half of the ADPCM data is remaining ?? */
16291623      pce_cd.bram_locked = 1;
1630      pce_set_cd_bram(space->machine());
1624      pce_set_cd_bram(machine());
16311625      data = data & 0x6E;
16321626      data |= ( pce_cd.cd_motor_on ? 0x10 : 0 );
16331627      pce_cd.regs[0x03] ^= 0x02;         /* TODO: get rid of this hack */
r14963r14964
16411635      data = ( pce_cd.bram_locked ? ( data & 0x7F ) : ( data | 0x80 ) );
16421636      break;
16431637   case 0x08:   /* ADPCM address (LSB) / CD data */
1644      data = pce_cd_get_cd_data_byte(space->machine());
1638      data = pce_cd_get_cd_data_byte(machine());
16451639      break;
16461640   case 0x0A:   /* ADPCM RAM data port */
1647      data = pce_cd_get_adpcm_ram_byte(space->machine());
1641      data = pce_cd_get_adpcm_ram_byte(machine());
16481642      break;
16491643   case 0x0B:   /* ADPCM DMA control */
16501644      break;
r14963r14964
16721666
16731667*/
16741668
1675READ8_HANDLER( pce_cd_acard_r )
1669READ8_MEMBER(pce_state::pce_cd_acard_r)
16761670{
1677   pce_state *state = space->machine().driver_data<pce_state>();
1678   pce_cd_t &pce_cd = state->m_cd;
1671   pce_cd_t &pce_cd = m_cd;
16791672   UINT8 r_num;
16801673
16811674   if((offset & 0x2e0) == 0x2e0)
r14963r14964
17371730   return 0;
17381731}
17391732
1740WRITE8_HANDLER( pce_cd_acard_w )
1733WRITE8_MEMBER(pce_state::pce_cd_acard_w)
17411734{
1742   pce_state *state = space->machine().driver_data<pce_state>();
1743   pce_cd_t &pce_cd = state->m_cd;
1735   pce_cd_t &pce_cd = m_cd;
17441736   UINT8 w_num;
17451737
17461738   if((offset & 0x2e0) == 0x2e0)
r14963r14964
18211813   }
18221814}
18231815
1824READ8_HANDLER( pce_cd_acard_wram_r )
1816READ8_MEMBER(pce_state::pce_cd_acard_wram_r)
18251817{
18261818   return pce_cd_intf_r(space,0x200 | (offset & 0x6000) >> 9);
18271819}
18281820
1829WRITE8_HANDLER( pce_cd_acard_wram_w )
1821WRITE8_MEMBER(pce_state::pce_cd_acard_wram_w)
18301822{
18311823   pce_cd_intf_w(space,0x200 | (offset & 0x6000) >> 9,data);
18321824}
src/mess/machine/bbc.c
r14963r14964
3434*************************/
3535
3636/* for the model A just address the 4 on board ROM sockets */
37WRITE8_HANDLER ( bbc_page_selecta_w )
37WRITE8_MEMBER(bbc_state::bbc_page_selecta_w)
3838{
39   memory_set_bankptr(space->machine(),"bank4",space->machine().region("user1")->base()+((data&0x03)<<14));
39   memory_set_bankptr(machine(),"bank4",machine().region("user1")->base()+((data&0x03)<<14));
4040}
4141
4242
43WRITE8_HANDLER ( bbc_memorya1_w )
43WRITE8_MEMBER(bbc_state::bbc_memorya1_w)
4444{
45   space->machine().region("maincpu")->base()[offset]=data;
45   machine().region("maincpu")->base()[offset]=data;
4646}
4747
4848/*************************
r14963r14964
5151
5252/* the model B address all 16 of the ROM sockets */
5353/* I have set bank 1 as a special case to load different DFS roms selectable from MESS's DIP settings var:bbc_DFSTypes */
54WRITE8_HANDLER ( bbc_page_selectb_w )
54WRITE8_MEMBER(bbc_state::bbc_page_selectb_w)
5555{
56   bbc_state *state = space->machine().driver_data<bbc_state>();
57   state->m_rombank=data&0x0f;
58   if (state->m_rombank!=1)
56   m_rombank=data&0x0f;
57   if (m_rombank!=1)
5958   {
60      memory_set_bankptr(space->machine(), "bank4", space->machine().region("user1")->base() + (state->m_rombank << 14));
59      memory_set_bankptr(machine(), "bank4", machine().region("user1")->base() + (m_rombank << 14));
6160   }
6261   else
6362   {
64      memory_set_bankptr(space->machine(), "bank4", space->machine().region("user2")->base() + ((state->m_DFSType) << 14));
63      memory_set_bankptr(machine(), "bank4", machine().region("user2")->base() + ((m_DFSType) << 14));
6564   }
6665}
6766
6867
69WRITE8_HANDLER ( bbc_memoryb3_w )
68WRITE8_MEMBER(bbc_state::bbc_memoryb3_w)
7069{
71   bbc_state *state = space->machine().driver_data<bbc_state>();
72   if (state->m_RAMSize)
70   if (m_RAMSize)
7371   {
74      space->machine().region("maincpu")->base()[offset + 0x4000] = data;
72      machine().region("maincpu")->base()[offset + 0x4000] = data;
7573   }
7674   else
7775   {
78      space->machine().region("maincpu")->base()[offset] = data;
76      machine().region("maincpu")->base()[offset] = data;
7977   }
8078
8179}
r14963r14964
9088static const unsigned short bbc_SWRAMtype2[16]={0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0};
9189static const unsigned short bbc_SWRAMtype3[16]={0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1};
9290
93WRITE8_HANDLER ( bbc_memoryb4_w )
91WRITE8_MEMBER(bbc_state::bbc_memoryb4_w)
9492{
95   bbc_state *state = space->machine().driver_data<bbc_state>();
96   if (state->m_rombank == 1)
93   if (m_rombank == 1)
9794   {
9895      // special DFS case for Acorn DFS E00 Hack that can write to the DFS RAM Bank;
99      if (state->m_DFSType == 3) space->machine().region("user2")->base()[((state->m_DFSType) << 14) + offset] = data;
96      if (m_DFSType == 3) machine().region("user2")->base()[((m_DFSType) << 14) + offset] = data;
10097   } else
10198   {
102      switch (state->m_SWRAMtype)
99      switch (m_SWRAMtype)
103100      {
104         case 1:   if (bbc_SWRAMtype1[state->m_userport]) space->machine().region("user1")->base()[(state->m_userport << 14) + offset] = data;
105         case 2:   if (bbc_SWRAMtype2[state->m_rombank])  space->machine().region("user1")->base()[(state->m_rombank << 14) + offset] = data;
106         case 3:   if (bbc_SWRAMtype3[state->m_rombank])  space->machine().region("user1")->base()[(state->m_rombank << 14) + offset] = data;
101         case 1:   if (bbc_SWRAMtype1[m_userport]) machine().region("user1")->base()[(m_userport << 14) + offset] = data;
102         case 2:   if (bbc_SWRAMtype2[m_rombank])  machine().region("user1")->base()[(m_rombank << 14) + offset] = data;
103         case 3:   if (bbc_SWRAMtype3[m_rombank])  machine().region("user1")->base()[(m_rombank << 14) + offset] = data;
107104      }
108105   }
109106}
r14963r14964
130127
131128/* the model B Plus addresses all 16 of the ROM sockets plus the extra 12K of ram at 0x8000
132129   and 20K of shadow ram at 0x3000 */
133WRITE8_HANDLER ( bbc_page_selectbp_w )
130WRITE8_MEMBER(bbc_state::bbc_page_selectbp_w)
134131{
135   bbc_state *state = space->machine().driver_data<bbc_state>();
136132   if ((offset&0x04)==0)
137133   {
138      state->m_pagedRAM = (data >> 7) & 0x01;
139      state->m_rombank =  data & 0x0f;
134      m_pagedRAM = (data >> 7) & 0x01;
135      m_rombank =  data & 0x0f;
140136
141      if (state->m_pagedRAM)
137      if (m_pagedRAM)
142138      {
143139         /* if paged ram then set 8000 to afff to read from the ram 8000 to afff */
144         memory_set_bankptr(space->machine(), "bank4", space->machine().region("maincpu")->base() + 0x8000);
140         memory_set_bankptr(machine(), "bank4", machine().region("maincpu")->base() + 0x8000);
145141      }
146142      else
147143      {
148144         /* if paged rom then set the rom to be read from 8000 to afff */
149         memory_set_bankptr(space->machine(), "bank4", space->machine().region("user1")->base() + (state->m_rombank << 14));
145         memory_set_bankptr(machine(), "bank4", machine().region("user1")->base() + (m_rombank << 14));
150146      };
151147
152148      /* set the rom to be read from b000 to bfff */
153      memory_set_bank(space->machine(), "bank6", state->m_rombank);
149      memory_set_bank(machine(), "bank6", m_rombank);
154150   }
155151   else
156152   {
157153      //the video display should now use this flag to display the shadow ram memory
158      state->m_vdusel=(data>>7)&0x01;
159      bbcbp_setvideoshadow(space->machine(), state->m_vdusel);
154      m_vdusel=(data>>7)&0x01;
155      bbcbp_setvideoshadow(machine(), m_vdusel);
160156      //need to make the video display do a full screen refresh for the new memory area
161      memory_set_bankptr(space->machine(), "bank2", space->machine().region("maincpu")->base()+0x3000);
157      memory_set_bankptr(machine(), "bank2", machine().region("maincpu")->base()+0x3000);
162158   }
163159}
164160
r14963r14964
167163   the writes to this memory are just done the normal
168164   way */
169165
170WRITE8_HANDLER ( bbc_memorybp1_w )
166WRITE8_MEMBER(bbc_state::bbc_memorybp1_w)
171167{
172   space->machine().region("maincpu")->base()[offset]=data;
168   machine().region("maincpu")->base()[offset]=data;
173169}
174170
175171
r14963r14964
209205}
210206
211207
212WRITE8_HANDLER ( bbc_memorybp2_w )
208WRITE8_MEMBER(bbc_state::bbc_memorybp2_w)
213209{
214   bbc_state *state = space->machine().driver_data<bbc_state>();
215   UINT8 *ram = space->machine().region("maincpu")->base();
216   if (state->m_vdusel==0)
210   UINT8 *ram = machine().region("maincpu")->base();
211   if (m_vdusel==0)
217212   {
218213      // not in shadow ram mode so just write to normal ram
219214      ram[offset + 0x3000] = data;
220215   }
221216   else
222217   {
223      if (vdudriverset(space->machine()))
218      if (vdudriverset(machine()))
224219      {
225220         // if VDUDriver set then write to shadow ram
226221         ram[offset + 0xb000] = data;
r14963r14964
236231
237232/* if the pagedRAM is set write to RAM between 0x8000 to 0xafff
238233otherwise this area contains ROM so no write is required */
239WRITE8_HANDLER ( bbc_memorybp4_w )
234WRITE8_MEMBER(bbc_state::bbc_memorybp4_w)
240235{
241   bbc_state *state = space->machine().driver_data<bbc_state>();
242   if (state->m_pagedRAM)
236   if (m_pagedRAM)
243237   {
244      space->machine().region("maincpu")->base()[offset+0x8000]=data;
238      machine().region("maincpu")->base()[offset+0x8000]=data;
245239   }
246240}
247241
r14963r14964
257251static const unsigned short bbc_b_plus_sideways_ram_banks[16]={ 1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0 };
258252
259253
260WRITE8_HANDLER ( bbc_memorybp4_128_w )
254WRITE8_MEMBER(bbc_state::bbc_memorybp4_128_w)
261255{
262   bbc_state *state = space->machine().driver_data<bbc_state>();
263   if (state->m_pagedRAM)
256   if (m_pagedRAM)
264257   {
265      space->machine().region("maincpu")->base()[offset+0x8000]=data;
258      machine().region("maincpu")->base()[offset+0x8000]=data;
266259   }
267260   else
268261   {
269      if (bbc_b_plus_sideways_ram_banks[state->m_rombank])
262      if (bbc_b_plus_sideways_ram_banks[m_rombank])
270263      {
271         space->machine().region("user1")->base()[offset+(state->m_rombank<<14)]=data;
264         machine().region("user1")->base()[offset+(m_rombank<<14)]=data;
272265      }
273266   }
274267}
275268
276WRITE8_HANDLER ( bbc_memorybp6_128_w )
269WRITE8_MEMBER(bbc_state::bbc_memorybp6_128_w)
277270{
278   bbc_state *state = space->machine().driver_data<bbc_state>();
279   if (bbc_b_plus_sideways_ram_banks[state->m_rombank])
271   if (bbc_b_plus_sideways_ram_banks[m_rombank])
280272   {
281      space->machine().region("user1")->base()[offset+(state->m_rombank<<14)+0x3000]=data;
273      machine().region("user1")->base()[offset+(m_rombank<<14)+0x3000]=data;
282274   }
283275}
284276
r14963r14964
336328*/
337329
338330
339READ8_HANDLER ( bbcm_ACCCON_read )
331READ8_MEMBER(bbc_state::bbcm_ACCCON_read)
340332{
341   bbc_state *state = space->machine().driver_data<bbc_state>();
342333   logerror("ACCCON read %d\n",offset);
343   return state->m_ACCCON;
334   return m_ACCCON;
344335}
345336
346WRITE8_HANDLER ( bbcm_ACCCON_write )
337WRITE8_MEMBER(bbc_state::bbcm_ACCCON_write)
347338{
348   bbc_state *state = space->machine().driver_data<bbc_state>();
349339   int tempIRR;
350   state->m_ACCCON=data;
340   m_ACCCON=data;
351341
352342   logerror("ACCCON write  %d %d \n",offset,data);
353343
354   tempIRR=state->m_ACCCON_IRR;
344   tempIRR=m_ACCCON_IRR;
355345
356346
357   state->m_ACCCON_IRR=(data>>7)&1;
358   state->m_ACCCON_TST=(data>>6)&1;
359   state->m_ACCCON_IFJ=(data>>5)&1;
360   state->m_ACCCON_ITU=(data>>4)&1;
361   state->m_ACCCON_Y  =(data>>3)&1;
362   state->m_ACCCON_X  =(data>>2)&1;
363   state->m_ACCCON_E  =(data>>1)&1;
364   state->m_ACCCON_D  =(data>>0)&1;
347   m_ACCCON_IRR=(data>>7)&1;
348   m_ACCCON_TST=(data>>6)&1;
349   m_ACCCON_IFJ=(data>>5)&1;
350   m_ACCCON_ITU=(data>>4)&1;
351   m_ACCCON_Y  =(data>>3)&1;
352   m_ACCCON_X  =(data>>2)&1;
353   m_ACCCON_E  =(data>>1)&1;
354   m_ACCCON_D  =(data>>0)&1;
365355
366   if (tempIRR!=state->m_ACCCON_IRR)
356   if (tempIRR!=m_ACCCON_IRR)
367357   {
368      state->check_interrupts();
358      check_interrupts();
369359   }
370360
371   if (state->m_ACCCON_Y)
361   if (m_ACCCON_Y)
372362   {
373      memory_set_bankptr(space->machine(), "bank7", space->machine().region("maincpu")->base() + 0x9000);
363      memory_set_bankptr(machine(), "bank7", machine().region("maincpu")->base() + 0x9000);
374364   }
375365   else
376366   {
377      memory_set_bankptr(space->machine(), "bank7", space->machine().region("user1")->base() + 0x40000);
367      memory_set_bankptr(machine(), "bank7", machine().region("user1")->base() + 0x40000);
378368   }
379369
380   bbcbp_setvideoshadow(space->machine(), state->m_ACCCON_D);
370   bbcbp_setvideoshadow(machine(), m_ACCCON_D);
381371
382372
383   if (state->m_ACCCON_X)
373   if (m_ACCCON_X)
384374   {
385      memory_set_bankptr(space->machine(), "bank2", space->machine().region( "maincpu" )->base() + 0xb000 );
375      memory_set_bankptr(machine(), "bank2", machine().region( "maincpu" )->base() + 0xb000 );
386376   }
387377   else
388378   {
389      memory_set_bankptr(space->machine(), "bank2", space->machine().region( "maincpu" )->base() + 0x3000 );
379      memory_set_bankptr(machine(), "bank2", machine().region( "maincpu" )->base() + 0x3000 );
390380   }
391381
392382   /* ACCCON_TST controls paging of rom reads in the 0xFC00-0xFEFF reigon */
393383   /* if 0 the I/O is paged for both reads and writes */
394384   /* if 1 the the ROM is paged in for reads but writes still go to I/O   */
395   if (state->m_ACCCON_TST)
385   if (m_ACCCON_TST)
396386   {
397      memory_set_bankptr(space->machine(), "bank8", space->machine().region("user1")->base()+0x43c00);
398      space->install_read_bank(0xFC00,0xFEFF,"bank8");
387      memory_set_bankptr(machine(), "bank8", machine().region("user1")->base()+0x43c00);
388      space.install_read_bank(0xFC00,0xFEFF,"bank8");
399389   }
400390   else
401391   {
402      space->install_legacy_read_handler(0xFC00,0xFEFF,FUNC(bbcm_r));
392      space.install_read_handler(0xFC00,0xFEFF,read8_delegate(FUNC(bbc_state::bbcm_r),this));
403393   }
404394
405395}
r14963r14964
413403}
414404
415405
416static WRITE8_HANDLER ( page_selectbm_w )
406WRITE8_MEMBER(bbc_state::page_selectbm_w)
417407{
418   bbc_state *state = space->machine().driver_data<bbc_state>();
419   state->m_pagedRAM = (data & 0x80) >> 7;
420   state->m_rombank = data & 0x0f;
408   m_pagedRAM = (data & 0x80) >> 7;
409   m_rombank = data & 0x0f;
421410
422   if (state->m_pagedRAM)
411   if (m_pagedRAM)
423412   {
424      memory_set_bankptr(space->machine(), "bank4", space->machine().region("maincpu")->base() + 0x8000);
425      memory_set_bank(space->machine(), "bank5", state->m_rombank);
413      memory_set_bankptr(machine(), "bank4", machine().region("maincpu")->base() + 0x8000);
414      memory_set_bank(machine(), "bank5", m_rombank);
426415   }
427416   else
428417   {
429      memory_set_bankptr(space->machine(), "bank4", space->machine().region("user1")->base() + ((state->m_rombank) << 14));
430      memory_set_bank(space->machine(), "bank5", state->m_rombank);
418      memory_set_bankptr(machine(), "bank4", machine().region("user1")->base() + ((m_rombank) << 14));
419      memory_set_bank(machine(), "bank5", m_rombank);
431420   }
432421}
433422
434423
435424
436WRITE8_HANDLER ( bbc_memorybm1_w )
425WRITE8_MEMBER(bbc_state::bbc_memorybm1_w)
437426{
438   space->machine().region("maincpu")->base()[offset] = data;
427   machine().region("maincpu")->base()[offset] = data;
439428}
440429
441430
r14963r14964
463452
464453
465454
466WRITE8_HANDLER ( bbc_memorybm2_w )
455WRITE8_MEMBER(bbc_state::bbc_memorybm2_w)
467456{
468   bbc_state *state = space->machine().driver_data<bbc_state>();
469   UINT8 *ram = space->machine().region("maincpu")->base();
470   if (state->m_ACCCON_X)
457   UINT8 *ram = machine().region("maincpu")->base();
458   if (m_ACCCON_X)
471459   {
472460      ram[offset + 0xb000] = data;
473461   }
474462   else
475463   {
476      if (state->m_ACCCON_E && bbcm_vdudriverset(space->machine()))
464      if (m_ACCCON_E && bbcm_vdudriverset(machine()))
477465      {
478466         ram[offset + 0xb000] = data;
479467      }
r14963r14964
490478};
491479
492480
493WRITE8_HANDLER ( bbc_memorybm4_w )
481WRITE8_MEMBER(bbc_state::bbc_memorybm4_w)
494482{
495   bbc_state *state = space->machine().driver_data<bbc_state>();
496   if (state->m_pagedRAM)
483   if (m_pagedRAM)
497484   {
498      space->machine().region("maincpu")->base()[offset+0x8000]=data;
485      machine().region("maincpu")->base()[offset+0x8000]=data;
499486   }
500487   else
501488   {
502      if (bbc_master_sideways_ram_banks[state->m_rombank])
489      if (bbc_master_sideways_ram_banks[m_rombank])
503490      {
504         space->machine().region("user1")->base()[offset+(state->m_rombank<<14)]=data;
491         machine().region("user1")->base()[offset+(m_rombank<<14)]=data;
505492      }
506493   }
507494}
508495
509496
510WRITE8_HANDLER ( bbc_memorybm5_w )
497WRITE8_MEMBER(bbc_state::bbc_memorybm5_w)
511498{
512   bbc_state *state = space->machine().driver_data<bbc_state>();
513   if (bbc_master_sideways_ram_banks[state->m_rombank])
499   if (bbc_master_sideways_ram_banks[m_rombank])
514500   {
515      space->machine().region("user1")->base()[offset+(state->m_rombank<<14)+0x1000]=data;
501      machine().region("user1")->base()[offset+(m_rombank<<14)+0x1000]=data;
516502   }
517503}
518504
519505
520WRITE8_HANDLER ( bbc_memorybm7_w )
506WRITE8_MEMBER(bbc_state::bbc_memorybm7_w)
521507{
522   bbc_state *state = space->machine().driver_data<bbc_state>();
523   if (state->m_ACCCON_Y)
508   if (m_ACCCON_Y)
524509   {
525      space->machine().region("maincpu")->base()[offset+0x9000]=data;
510      machine().region("maincpu")->base()[offset+0x9000]=data;
526511   }
527512}
528513
r14963r14964
550535&E0-&FF Tube ULA        Tube system interface   Tube system interface   32 (32 bytes x  1 ) 2MHz
551536******************************************************************************/
552537
553READ8_HANDLER ( bbcm_r )
538READ8_MEMBER(bbc_state::bbcm_r)
554539{
555   //bbc_state *state = space->machine().driver_data<bbc_state>();
556540long myo;
557541
558542   /* Now handled in bbcm_ACCCON_write PHS - 2008-10-11 */
559//  if ( state->m_ACCCON_TST )
543//  if ( m_ACCCON_TST )
560544//  {
561//      return space->machine().region("user1")->base()[offset+0x43c00];
545//      return machine().region("user1")->base()[offset+0x43c00];
562546//  };
563547
564548   if (offset<=0x0ff) /* FRED */
r14963r14964
574558
575559   if ((offset>=0x200) && (offset<=0x2ff)) /* SHEILA */
576560   {
577      via6522_device *via_0 = space->machine().device<via6522_device>("via6522_0");
578      via6522_device *via_1 = space->machine().device<via6522_device>("via6522_1");
561      via6522_device *via_0 = machine().device<via6522_device>("via6522_0");
562      via6522_device *via_1 = machine().device<via6522_device>("via6522_1");
579563
580564      myo=offset-0x200;
581565      if ((myo>=0x00) && (myo<=0x07)) return bbc_6845_r(space, myo-0x00);      /* Video Controller */
582566      if ((myo>=0x08) && (myo<=0x0f))
583567      {
584         acia6850_device *acia = space->machine().device<acia6850_device>("acia6850");
568         acia6850_device *acia = machine().device<acia6850_device>("acia6850");
585569
586570         if ((myo - 0x08) & 1)
587            return acia->status_read(*space,0);
571            return acia->status_read(space,0);
588572         else
589            return acia->data_read(*space,0);
573            return acia->data_read(space,0);
590574      }
591575      if ((myo>=0x10) && (myo<=0x17)) return 0xfe;                  /* Serial System Chip */
592      if ((myo>=0x18) && (myo<=0x1f)) return uPD7002_r(space->machine().device("upd7002"), myo-0x18);         /* A to D converter */
576      if ((myo>=0x18) && (myo<=0x1f)) return uPD7002_r(machine().device("upd7002"), myo-0x18);         /* A to D converter */
593577      if ((myo>=0x20) && (myo<=0x23)) return 0xfe;                  /* VideoULA */
594578      if ((myo>=0x24) && (myo<=0x27)) return bbcm_wd1770l_read(space, myo-0x24); /* 1770 */
595579      if ((myo>=0x28) && (myo<=0x2f)) return bbcm_wd1770_read(space, myo-0x28);  /* disc control latch */
596580      if ((myo>=0x30) && (myo<=0x33)) return 0xfe;                  /* page select */
597581      if ((myo>=0x34) && (myo<=0x37)) return bbcm_ACCCON_read(space, myo-0x34);   /* ACCCON */
598582      if ((myo>=0x38) && (myo<=0x3f)) return 0xfe;                  /* NC ?? */
599      if ((myo>=0x40) && (myo<=0x5f)) return via_0->read(*space,myo-0x40);
600      if ((myo>=0x60) && (myo<=0x7f)) return via_1->read(*space,myo-0x60);
583      if ((myo>=0x40) && (myo<=0x5f)) return via_0->read(space,myo-0x40);
584      if ((myo>=0x60) && (myo<=0x7f)) return via_1->read(space,myo-0x60);
601585      if ((myo>=0x80) && (myo<=0x9f)) return 0xfe;
602586      if ((myo>=0xa0) && (myo<=0xbf)) return 0xfe;
603587      if ((myo>=0xc0) && (myo<=0xdf)) return 0xfe;
r14963r14964
607591   return 0xfe;
608592}
609593
610WRITE8_HANDLER ( bbcm_w )
594WRITE8_MEMBER(bbc_state::bbcm_w)
611595{
612   //bbc_state *state = space->machine().driver_data<bbc_state>();
613596long myo;
614597
615598   if ((offset>=0x200) && (offset<=0x2ff)) /* SHEILA */
616599   {
617      via6522_device *via_0 = space->machine().device<via6522_device>("via6522_0");
618      via6522_device *via_1 = space->machine().device<via6522_device>("via6522_1");
600      via6522_device *via_0 = machine().device<via6522_device>("via6522_0");
601      via6522_device *via_1 = machine().device<via6522_device>("via6522_1");
619602
620603      myo=offset-0x200;
621604      if ((myo>=0x00) && (myo<=0x07)) bbc_6845_w(space, myo-0x00,data);         /* Video Controller */
622605      if ((myo>=0x08) && (myo<=0x0f))
623606      {
624         acia6850_device *acia = space->machine().device<acia6850_device>("acia6850");
607         acia6850_device *acia = machine().device<acia6850_device>("acia6850");
625608
626609         if ((myo - 0x08) & 1)
627            acia->control_write(*space, 0, data);
610            acia->control_write(space, 0, data);
628611         else
629            acia->data_write(*space, 0, data);
612            acia->data_write(space, 0, data);
630613      }
631614      if ((myo>=0x10) && (myo<=0x17)) bbc_SerialULA_w(space, myo-0x10,data);      /* Serial System Chip */
632      if ((myo>=0x18) && (myo<=0x1f)) uPD7002_w(space->machine().device("upd7002"),myo-0x18,data);         /* A to D converter */
615      if ((myo>=0x18) && (myo<=0x1f)) uPD7002_w(machine().device("upd7002"),myo-0x18,data);         /* A to D converter */
633616      if ((myo>=0x20) && (myo<=0x23)) bbc_videoULA_w(space, myo-0x20,data);         /* VideoULA */
634617      if ((myo>=0x24) && (myo<=0x27)) bbcm_wd1770l_write(space, myo-0x24,data);   /* 1770 */
635618      if ((myo>=0x28) && (myo<=0x2f)) bbcm_wd1770_write(space, myo-0x28,data);   /* disc control latch */
636619      if ((myo>=0x30) && (myo<=0x33)) page_selectbm_w(space, myo-0x30,data);      /* page select */
637620      if ((myo>=0x34) && (myo<=0x37)) bbcm_ACCCON_write(space, myo-0x34,data);   /* ACCCON */
638621      //if ((myo>=0x38) && (myo<=0x3f))                                   /* NC ?? */
639      if ((myo>=0x40) && (myo<=0x5f)) via_0->write(*space,myo-0x40, data);
640      if ((myo>=0x60) && (myo<=0x7f)) via_1->write(*space,myo-0x60, data);
622      if ((myo>=0x40) && (myo<=0x5f)) via_0->write(space,myo-0x40, data);
623      if ((myo>=0x60) && (myo<=0x7f)) via_1->write(space,myo-0x60, data);
641624      //if ((myo>=0x80) && (myo<=0x9f))
642625      //if ((myo>=0xa0) && (myo<=0xbf))
643626      //if ((myo>=0xc0) && (myo<=0xdf))
r14963r14964
14161399
14171400
14181401
1419WRITE8_HANDLER ( bbc_SerialULA_w )
1402WRITE8_MEMBER(bbc_state::bbc_SerialULA_w)
14201403{
1421   BBC_Cassette_motor(space->machine(), (data & 0x80) >> 7);
1404   BBC_Cassette_motor(machine(), (data & 0x80) >> 7);
14221405}
14231406
14241407/**************************************
r14963r14964
14571440};
14581441
14591442
1460static READ8_HANDLER( bbc_i8271_read )
1443READ8_MEMBER(bbc_state::bbc_i8271_read)
14611444{
14621445   int ret;
1463   device_t *i8271 = space->machine().device("i8271");
1446   device_t *i8271 = machine().device("i8271");
14641447   logerror("i8271 read %d  ",offset);
14651448   switch (offset)
14661449   {
r14963r14964
14841467   return ret;
14851468}
14861469
1487static WRITE8_HANDLER( bbc_i8271_write )
1470WRITE8_MEMBER(bbc_state::bbc_i8271_write)
14881471{
1489   device_t *i8271 = space->machine().device("i8271");
1472   device_t *i8271 = machine().device("i8271");
14901473   logerror("i8271 write  %d  %d\n",offset,data);
14911474
14921475   switch (offset)
r14963r14964
16051588   {FLOPPY_0, FLOPPY_1, NULL, NULL}
16061589};
16071590
1608static WRITE8_HANDLER(bbc_wd177x_status_w)
1591WRITE8_MEMBER(bbc_state::bbc_wd177x_status_w)
16091592{
1610   bbc_state *state = space->machine().driver_data<bbc_state>();
1611   device_t *fdc = space->machine().device("wd177x");
1612   state->m_drive_control = data;
1593   device_t *fdc = machine().device("wd177x");
1594   m_drive_control = data;
16131595
16141596   /* set drive */
16151597   if ((data>>0) & 0x01) wd17xx_set_drive(fdc,0);
r14963r14964
16211603   /* set density */
16221604   wd17xx_dden_w(fdc, BIT(data, 3));
16231605
1624   state->m_1770_IntEnabled=(((data>>4) & 0x01)==0);
1606   m_1770_IntEnabled=(((data>>4) & 0x01)==0);
16251607
16261608}
16271609
16281610
16291611
1630READ8_HANDLER ( bbc_wd1770_read )
1612READ8_MEMBER(bbc_state::bbc_wd1770_read)
16311613{
16321614   int retval=0xff;
1633   device_t *fdc = space->machine().device("wd177x");
1615   device_t *fdc = machine().device("wd177x");
16341616   switch (offset)
16351617   {
16361618   case 4:
r14963r14964
16531635   return retval;
16541636}
16551637
1656WRITE8_HANDLER ( bbc_wd1770_write )
1638WRITE8_MEMBER(bbc_state::bbc_wd1770_write)
16571639{
1658   device_t *fdc = space->machine().device("wd177x");
1640   device_t *fdc = machine().device("wd177x");
16591641   logerror("wd177x write: $%02X  $%02X\n", offset,data);
16601642   switch (offset)
16611643   {
r14963r14964
17161698**********************************************/
17171699
17181700
1719static WRITE8_HANDLER( bbc_opus_status_w )
1701WRITE8_MEMBER(bbc_state::bbc_opus_status_w)
17201702{
1721   bbc_state *state = space->machine().driver_data<bbc_state>();
1722   device_t *fdc = space->machine().device("wd177x");
1723   state->m_drive_control = data;
1703   device_t *fdc = machine().device("wd177x");
1704   m_drive_control = data;
17241705
17251706   /* set drive */
17261707   if ((data>>1) & 0x01) wd17xx_set_drive(fdc,0);
r14963r14964
17321713   /* set density */
17331714   wd17xx_dden_w(fdc, BIT(data, 5));
17341715
1735   state->m_1770_IntEnabled=(data>>4) & 0x01;
1716   m_1770_IntEnabled=(data>>4) & 0x01;
17361717
17371718}
17381719
1739READ8_HANDLER( bbc_opus_read )
1720READ8_MEMBER(bbc_state::bbc_opus_read)
17401721{
1741   bbc_state *state = space->machine().driver_data<bbc_state>();
1742   device_t *fdc = space->machine().device("wd177x");
1722   device_t *fdc = machine().device("wd177x");
17431723   logerror("wd177x read: $%02X\n", offset);
17441724
1745   if (state->m_DFSType==6)
1725   if (m_DFSType==6)
17461726   {
17471727      if (offset<0x100)
17481728      {
r14963r14964
17611741      }
17621742      else
17631743      {
1764         return space->machine().region("disks")->base()[offset + (state->m_opusbank << 8)];
1744         return machine().region("disks")->base()[offset + (m_opusbank << 8)];
17651745      }
17661746   }
17671747   return 0xff;
17681748}
17691749
1770WRITE8_HANDLER (bbc_opus_write)
1750WRITE8_MEMBER(bbc_state::bbc_opus_write)
17711751{
1772   bbc_state *state = space->machine().driver_data<bbc_state>();
1773   device_t *fdc = space->machine().device("wd177x");
1752   device_t *fdc = machine().device("wd177x");
17741753   logerror("wd177x write: $%02X  $%02X\n", offset,data);
17751754
1776   if (state->m_DFSType==6)
1755   if (m_DFSType==6)
17771756   {
17781757      if (offset<0x100)
17791758      {
r14963r14964
17951774               bbc_opus_status_w(space, 0,data);
17961775               break;
17971776            case 0xfe:
1798               state->m_opusbank=(state->m_opusbank & 0xff) | (data<<8);
1777               m_opusbank=(m_opusbank & 0xff) | (data<<8);
17991778               break;
18001779            case 0xff:
1801               state->m_opusbank=(state->m_opusbank & 0xff00) | data;
1780               m_opusbank=(m_opusbank & 0xff00) | data;
18021781               break;
18031782         }
18041783      }
18051784      else
18061785      {
1807         space->machine().region("disks")->base()[offset + (state->m_opusbank << 8)] = data;
1786         machine().region("disks")->base()[offset + (m_opusbank << 8)] = data;
18081787      }
18091788   }
18101789}
r14963r14964
18151794***************************************/
18161795
18171796
1818READ8_HANDLER ( bbcm_wd1770_read )
1797READ8_MEMBER(bbc_state::bbcm_wd1770_read)
18191798{
18201799   int retval=0xff;
1821   device_t *fdc = space->machine().device("wd177x");
1800   device_t *fdc = machine().device("wd177x");
18221801   switch (offset)
18231802   {
18241803   case 0:
r14963r14964
18401819}
18411820
18421821
1843WRITE8_HANDLER ( bbcm_wd1770_write )
1822WRITE8_MEMBER(bbc_state::bbcm_wd1770_write)
18441823{
1845   device_t *fdc = space->machine().device("wd177x");
1824   device_t *fdc = machine().device("wd177x");
18461825   //logerror("wd177x write: $%02X  $%02X\n", offset,data);
18471826   switch (offset)
18481827   {
r14963r14964
18641843}
18651844
18661845
1867READ8_HANDLER ( bbcm_wd1770l_read )
1846READ8_MEMBER(bbc_state::bbcm_wd1770l_read)
18681847{
1869   bbc_state *state = space->machine().driver_data<bbc_state>();
1870   return state->m_drive_control;
1848   return m_drive_control;
18711849}
18721850
1873WRITE8_HANDLER ( bbcm_wd1770l_write )
1851WRITE8_MEMBER(bbc_state::bbcm_wd1770l_write)
18741852{
1875   bbc_state *state = space->machine().driver_data<bbc_state>();
1876   device_t *fdc = space->machine().device("wd177x");
1877   state->m_drive_control = data;
1853   device_t *fdc = machine().device("wd177x");
1854   m_drive_control = data;
18781855
18791856   /* set drive */
18801857   if ((data>>0) & 0x01) wd17xx_set_drive(fdc,0);
r14963r14964
18861863   /* set density */
18871864   wd17xx_dden_w(fdc, BIT(data, 5));
18881865
1889//  state->m_1770_IntEnabled=(((data>>4) & 0x01)==0);
1890   state->m_1770_IntEnabled=1;
1866//  m_1770_IntEnabled=(((data>>4) & 0x01)==0);
1867   m_1770_IntEnabled=1;
18911868
18921869}
18931870
r14963r14964
18961873DFS Hardware mapping for different Disc Controller types
18971874***************************************/
18981875
1899READ8_HANDLER( bbc_disc_r )
1876READ8_MEMBER(bbc_state::bbc_disc_r)
19001877{
1901   bbc_state *state = space->machine().driver_data<bbc_state>();
1902   switch (state->m_DFSType){
1878   switch (m_DFSType){
19031879   /* case 0 to 3 are all standard 8271 interfaces */
19041880   case 0: case 1: case 2: case 3:
19051881      return bbc_i8271_read(space, offset);
r14963r14964
19201896   return 0x0ff;
19211897}
19221898
1923WRITE8_HANDLER ( bbc_disc_w )
1899WRITE8_MEMBER(bbc_state::bbc_disc_w)
19241900{
1925   bbc_state *state = space->machine().driver_data<bbc_state>();
1926   switch (state->m_DFSType){
1901   switch (m_DFSType){
19271902   /* case 0 to 3 are all standard 8271 interfaces */
19281903   case 0: case 1: case 2: case 3:
19291904      bbc_i8271_write(space, offset,data);
src/mess/machine/gb.c
r14963r14964
6666#define CGB_START_VRAM_BANKS   0x0000
6767#define CGB_START_RAM_BANKS   ( 2 * 8 * 1024 )
6868
69#define JOYPAD      state->m_gb_io[0x00]   /* Joystick: 1.1.P15.P14.P13.P12.P11.P10       */
70#define SIODATA      state->m_gb_io[0x01]   /* Serial IO data buffer                       */
71#define SIOCONT      state->m_gb_io[0x02]   /* Serial IO control register                  */
72#define DIVREG      state->m_gb_io[0x04]   /* Divider register (???)                      */
73#define TIMECNT      state->m_gb_io[0x05]   /* Timer counter. Gen. int. when it overflows  */
74#define TIMEMOD      state->m_gb_io[0x06]   /* New value of TimeCount after it overflows   */
75#define TIMEFRQ      state->m_gb_io[0x07]   /* Timer frequency and start/stop switch       */
69#define JOYPAD      m_gb_io[0x00]   /* Joystick: 1.1.P15.P14.P13.P12.P11.P10       */
70#define SIODATA      m_gb_io[0x01]   /* Serial IO data buffer                       */
71#define SIOCONT      m_gb_io[0x02]   /* Serial IO control register                  */
72#define DIVREG      m_gb_io[0x04]   /* Divider register (???)                      */
73#define TIMECNT      m_gb_io[0x05]   /* Timer counter. Gen. int. when it overflows  */
74#define TIMEMOD      m_gb_io[0x06]   /* New value of TimeCount after it overflows   */
75#define TIMEFRQ      m_gb_io[0x07]   /* Timer frequency and start/stop switch       */
7676
7777
7878
r14963r14964
8282
8383static TIMER_CALLBACK(gb_serial_timer_proc);
8484static void gb_machine_stop(running_machine &machine);
85static WRITE8_HANDLER( gb_rom_bank_select_mbc1 );
86static WRITE8_HANDLER( gb_ram_bank_select_mbc1 );
87static WRITE8_HANDLER( gb_mem_mode_select_mbc1 );
88static WRITE8_HANDLER( gb_rom_bank_select_mbc2 );
89static WRITE8_HANDLER( gb_rom_bank_select_mbc3 );
90static WRITE8_HANDLER( gb_ram_bank_select_mbc3 );
91static WRITE8_HANDLER( gb_mem_mode_select_mbc3 );
92static WRITE8_HANDLER( gb_rom_bank_select_mbc5 );
93static WRITE8_HANDLER( gb_ram_bank_select_mbc5 );
94static WRITE8_HANDLER( gb_ram_bank_select_mbc6 );
95static WRITE8_HANDLER( gb_rom_bank_select_mbc6_1 );
96static WRITE8_HANDLER( gb_rom_bank_select_mbc6_2 );
97static WRITE8_HANDLER( gb_rom_bank_select_mbc7 );
98static WRITE8_HANDLER( gb_rom_bank_unknown_mbc7 );
99static WRITE8_HANDLER( gb_ram_tama5 );
100static WRITE8_HANDLER( gb_rom_bank_select_wisdom );
101static WRITE8_HANDLER( gb_rom_bank_mmm01_0000_w );
102static WRITE8_HANDLER( gb_rom_bank_mmm01_2000_w );
103static WRITE8_HANDLER( gb_rom_bank_mmm01_4000_w );
104static WRITE8_HANDLER( gb_rom_bank_mmm01_6000_w );
105static WRITE8_HANDLER( gb_rom_bank_select_mbc1_kor );
106static WRITE8_HANDLER( gb_ram_bank_select_mbc1_kor );
107static WRITE8_HANDLER( gb_mem_mode_select_mbc1_kor );
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108108static void gb_timer_increment( running_machine &machine );
109109
110110#ifdef MAME_DEBUG
r14963r14964
116116{
117117   gb_state *state = machine.driver_data<gb_state>();
118118   /* Initialize the registers */
119   SIODATA = 0x00;
120   SIOCONT = 0x7E;
119   state->SIODATA = 0x00;
120   state->SIOCONT = 0x7E;
121121
122   gb_io_w( machine.device("maincpu")->memory().space(AS_PROGRAM ), 0x05, 0x00 );      /* TIMECNT */
123   gb_io_w( machine.device("maincpu")->memory().space(AS_PROGRAM ), 0x06, 0x00 );      /* TIMEMOD */
122   state->gb_io_w( *machine.device("maincpu")->memory().space(AS_PROGRAM ), 0x05, 0x00 );      /* TIMECNT */
123   state->gb_io_w( *machine.device("maincpu")->memory().space(AS_PROGRAM ), 0x06, 0x00 );      /* TIMEMOD */
124124}
125125
126126static void gb_rom16_0000( running_machine &machine, UINT8 *addr )
r14963r14964
178178      case MBC_NONE:
179179         break;
180180      case MBC_MMM01:
181         space->install_legacy_write_handler( 0x0000, 0x1fff, FUNC(gb_rom_bank_mmm01_0000_w) );
182         space->install_legacy_write_handler( 0x2000, 0x3fff, FUNC(gb_rom_bank_mmm01_2000_w));
183         space->install_legacy_write_handler( 0x4000, 0x5fff, FUNC(gb_rom_bank_mmm01_4000_w));
184         space->install_legacy_write_handler( 0x6000, 0x7fff, FUNC(gb_rom_bank_mmm01_6000_w));
181         space->install_write_handler( 0x0000, 0x1fff, write8_delegate(FUNC(gb_state::gb_rom_bank_mmm01_0000_w),state) );
182         space->install_write_handler( 0x2000, 0x3fff, write8_delegate(FUNC(gb_state::gb_rom_bank_mmm01_2000_w),state));
183         space->install_write_handler( 0x4000, 0x5fff, write8_delegate(FUNC(gb_state::gb_rom_bank_mmm01_4000_w),state));
184         space->install_write_handler( 0x6000, 0x7fff, write8_delegate(FUNC(gb_state::gb_rom_bank_mmm01_6000_w),state));
185185         break;
186186      case MBC_MBC1:
187         space->install_legacy_write_handler( 0x0000, 0x1fff, FUNC(gb_ram_enable) );   /* We don't emulate RAM enable yet */
188         space->install_legacy_write_handler( 0x2000, 0x3fff, FUNC(gb_rom_bank_select_mbc1) );
189         space->install_legacy_write_handler( 0x4000, 0x5fff, FUNC(gb_ram_bank_select_mbc1) );
190         space->install_legacy_write_handler( 0x6000, 0x7fff, FUNC(gb_mem_mode_select_mbc1) );
187         space->install_write_handler( 0x0000, 0x1fff, write8_delegate(FUNC(gb_state::gb_ram_enable),state) );   /* We don't emulate RAM enable yet */
188         space->install_write_handler( 0x2000, 0x3fff, write8_delegate(FUNC(gb_state::gb_rom_bank_select_mbc1),state) );
189         space->install_write_handler( 0x4000, 0x5fff, write8_delegate(FUNC(gb_state::gb_ram_bank_select_mbc1),state) );
190         space->install_write_handler( 0x6000, 0x7fff, write8_delegate(FUNC(gb_state::gb_mem_mode_select_mbc1),state) );
191191         break;
192192      case MBC_MBC2:
193         space->install_legacy_write_handler( 0x2000, 0x3fff, FUNC(gb_rom_bank_select_mbc2) );
193         space->install_write_handler( 0x2000, 0x3fff, write8_delegate(FUNC(gb_state::gb_rom_bank_select_mbc2),state) );
194194         break;
195195      case MBC_MBC3:
196196      case MBC_HUC1:   /* Possibly wrong */
197197      case MBC_HUC3:   /* Possibly wrong */
198         space->install_legacy_write_handler( 0x0000, 0x1fff, FUNC(gb_ram_enable) );   /* We don't emulate RAM enable yet */
199         space->install_legacy_write_handler( 0x2000, 0x3fff, FUNC(gb_rom_bank_select_mbc3) );
200         space->install_legacy_write_handler( 0x4000, 0x5fff, FUNC(gb_ram_bank_select_mbc3) );
201         space->install_legacy_write_handler( 0x6000, 0x7fff, FUNC(gb_mem_mode_select_mbc3) );
198         space->install_write_handler( 0x0000, 0x1fff, write8_delegate(FUNC(gb_state::gb_ram_enable),state) );   /* We don't emulate RAM enable yet */
199         space->install_write_handler( 0x2000, 0x3fff, write8_delegate(FUNC(gb_state::gb_rom_bank_select_mbc3),state) );
200         space->install_write_handler( 0x4000, 0x5fff, write8_delegate(FUNC(gb_state::gb_ram_bank_select_mbc3),state) );
201         space->install_write_handler( 0x6000, 0x7fff, write8_delegate(FUNC(gb_state::gb_mem_mode_select_mbc3),state) );
202202         break;
203203      case MBC_MBC5:
204         space->install_legacy_write_handler( 0x0000, 0x1fff, FUNC(gb_ram_enable) );
205         space->install_legacy_write_handler( 0x2000, 0x3fff, FUNC(gb_rom_bank_select_mbc5) );
206         space->install_legacy_write_handler( 0x4000, 0x5fff, FUNC(gb_ram_bank_select_mbc5) );
204         space->install_write_handler( 0x0000, 0x1fff, write8_delegate(FUNC(gb_state::gb_ram_enable),state) );
205         space->install_write_handler( 0x2000, 0x3fff, write8_delegate(FUNC(gb_state::gb_rom_bank_select_mbc5),state) );
206         space->install_write_handler( 0x4000, 0x5fff, write8_delegate(FUNC(gb_state::gb_ram_bank_select_mbc5),state) );
207207         break;
208208      case MBC_MBC6:
209         space->install_legacy_write_handler( 0x0000, 0x1fff, FUNC(gb_ram_bank_select_mbc6) );
210         space->install_legacy_write_handler( 0x2000, 0x2fff, FUNC(gb_rom_bank_select_mbc6_1) );
211         space->install_legacy_write_handler( 0x3000, 0x3fff, FUNC(gb_rom_bank_select_mbc6_2) );
209         space->install_write_handler( 0x0000, 0x1fff, write8_delegate(FUNC(gb_state::gb_ram_bank_select_mbc6),state) );
210         space->install_write_handler( 0x2000, 0x2fff, write8_delegate(FUNC(gb_state::gb_rom_bank_select_mbc6_1),state) );
211         space->install_write_handler( 0x3000, 0x3fff, write8_delegate(FUNC(gb_state::gb_rom_bank_select_mbc6_2),state) );
212212         break;
213213      case MBC_MBC7:
214         space->install_legacy_write_handler( 0x0000, 0x1fff, FUNC(gb_ram_enable) );
215         space->install_legacy_write_handler( 0x2000, 0x2fff, FUNC(gb_rom_bank_select_mbc7) );
216         space->install_legacy_write_handler( 0x3000, 0x7fff, FUNC(gb_rom_bank_unknown_mbc7) );
214         space->install_write_handler( 0x0000, 0x1fff, write8_delegate(FUNC(gb_state::gb_ram_enable),state) );
215         space->install_write_handler( 0x2000, 0x2fff, write8_delegate(FUNC(gb_state::gb_rom_bank_select_mbc7),state) );
216         space->install_write_handler( 0x3000, 0x7fff, write8_delegate(FUNC(gb_state::gb_rom_bank_unknown_mbc7),state) );
217217         break;
218218      case MBC_TAMA5:
219         space->install_legacy_write_handler( 0xA000, 0xBFFF, FUNC(gb_ram_tama5) );
219         space->install_write_handler( 0xA000, 0xBFFF, write8_delegate(FUNC(gb_state::gb_ram_tama5),state) );
220220         break;
221221      case MBC_WISDOM:
222         space->install_legacy_write_handler( 0x0000, 0x3fff, FUNC(gb_rom_bank_select_wisdom) );
222         space->install_write_handler( 0x0000, 0x3fff, write8_delegate(FUNC(gb_state::gb_rom_bank_select_wisdom),state) );
223223         break;
224224      case MBC_MBC1_KOR:
225         space->install_legacy_write_handler( 0x0000, 0x1fff, FUNC(gb_ram_enable) ); /* We don't emulate RAM enable yet */
226         space->install_legacy_write_handler( 0x2000, 0x3fff, FUNC(gb_rom_bank_select_mbc1_kor) );
227         space->install_legacy_write_handler( 0x4000, 0x5fff, FUNC(gb_ram_bank_select_mbc1_kor) );
228         space->install_legacy_write_handler( 0x6000, 0x7fff, FUNC(gb_mem_mode_select_mbc1_kor) );
225         space->install_write_handler( 0x0000, 0x1fff, write8_delegate(FUNC(gb_state::gb_ram_enable),state) ); /* We don't emulate RAM enable yet */
226         space->install_write_handler( 0x2000, 0x3fff, write8_delegate(FUNC(gb_state::gb_rom_bank_select_mbc1_kor),state) );
227         space->install_write_handler( 0x4000, 0x5fff, write8_delegate(FUNC(gb_state::gb_ram_bank_select_mbc1_kor),state) );
228         space->install_write_handler( 0x6000, 0x7fff, write8_delegate(FUNC(gb_state::gb_mem_mode_select_mbc1_kor),state) );
229229         break;
230230
231231      case MBC_MEGADUCK:
232         space->install_legacy_write_handler( 0x0001, 0x0001, FUNC(megaduck_rom_bank_select_type1) );
233         space->install_legacy_write_handler( 0xB000, 0xB000, FUNC(megaduck_rom_bank_select_type2) );
232         space->install_write_handler( 0x0001, 0x0001, write8_delegate(FUNC(gb_state::megaduck_rom_bank_select_type1),state) );
233         space->install_write_handler( 0xB000, 0xB000, write8_delegate(FUNC(gb_state::megaduck_rom_bank_select_type2),state) );
234234         break;
235235   }
236236
r14963r14964
398398   memory_set_bankptr( machine, "bank2", state->m_RAMMap[ state->m_MBC1Mode ? ( state->m_ROMBank >> 5 ) : 0 ] );
399399}
400400
401static WRITE8_HANDLER( gb_rom_bank_select_mbc1 )
401WRITE8_MEMBER(gb_state::gb_rom_bank_select_mbc1)
402402{
403   gb_state *state = space->machine().driver_data<gb_state>();
404403   data &= 0x1F; /* Only uses lower 5 bits */
405404   /* Selecting bank 0 == selecting bank 1 */
406405   if( data == 0 )
407406      data = 1;
408407
409   state->m_ROMBank = ( state->m_ROMBank & 0x01E0 ) | data;
408   m_ROMBank = ( m_ROMBank & 0x01E0 ) | data;
410409   /* Switch banks */
411   gb_set_mbc1_banks(space->machine());
410   gb_set_mbc1_banks(machine());
412411}
413412
414static WRITE8_HANDLER( gb_rom_bank_select_mbc2 )
413WRITE8_MEMBER(gb_state::gb_rom_bank_select_mbc2)
415414{
416   gb_state *state = space->machine().driver_data<gb_state>();
417415   data &= 0x0F; /* Only uses lower 4 bits */
418416   /* Selecting bank 0 == selecting bank 1 */
419417   if( data == 0 )
r14963r14964
421419
422420   /* The least significant bit of the upper address byte must be 1 */
423421   if( offset & 0x0100 )
424      state->m_ROMBank = ( state->m_ROMBank & 0x100 ) | data;
422      m_ROMBank = ( m_ROMBank & 0x100 ) | data;
425423   /* Switch banks */
426   gb_rom16_4000( space->machine(), state->m_ROMMap[state->m_ROMBank] );
424   gb_rom16_4000( machine(), m_ROMMap[m_ROMBank] );
427425}
428426
429static WRITE8_HANDLER( gb_rom_bank_select_mbc3 )
427WRITE8_MEMBER(gb_state::gb_rom_bank_select_mbc3)
430428{
431   gb_state *state = space->machine().driver_data<gb_state>();
432   logerror( "0x%04X: write to mbc3 rom bank select register 0x%04X <- 0x%02X\n", cpu_get_pc( &space->device() ), offset, data );
429   logerror( "0x%04X: write to mbc3 rom bank select register 0x%04X <- 0x%02X\n", cpu_get_pc( &space.device() ), offset, data );
433430   data &= 0x7F; /* Only uses lower 7 bits */
434431   /* Selecting bank 0 == selecting bank 1 */
435432   if( data == 0 )
436433      data = 1;
437434
438   state->m_ROMBank = ( state->m_ROMBank & 0x0100 ) | data;
435   m_ROMBank = ( m_ROMBank & 0x0100 ) | data;
439436   /* Switch banks */
440   gb_rom16_4000( space->machine(), state->m_ROMMap[state->m_ROMBank] );
437   gb_rom16_4000( machine(), m_ROMMap[m_ROMBank] );
441438}
442439
443static WRITE8_HANDLER( gb_rom_bank_select_mbc5 )
440WRITE8_MEMBER(gb_state::gb_rom_bank_select_mbc5)
444441{
445   gb_state *state = space->machine().driver_data<gb_state>();
446442   /* MBC5 has a 9 bit bank select
447443      Writing into 2000-2FFF sets the lower 8 bits
448444      Writing into 3000-3FFF sets the 9th bit
449445    */
450   logerror( "0x%04X: MBC5 ROM Bank select write 0x%04X <- 0x%02X\n", cpu_get_pc( &space->device() ), offset, data );
446   logerror( "0x%04X: MBC5 ROM Bank select write 0x%04X <- 0x%02X\n", cpu_get_pc( &space.device() ), offset, data );
451447   if( offset & 0x1000 )
452448   {
453      state->m_ROMBank = (state->m_ROMBank & 0xFF ) | ( ( data & 0x01 ) << 8 );
449      m_ROMBank = (m_ROMBank & 0xFF ) | ( ( data & 0x01 ) << 8 );
454450   }
455451   else
456452   {
457      state->m_ROMBank = (state->m_ROMBank & 0x100 ) | data;
453      m_ROMBank = (m_ROMBank & 0x100 ) | data;
458454   }
459455   /* Switch banks */
460   gb_rom16_4000( space->machine(), state->m_ROMMap[state->m_ROMBank] );
456   gb_rom16_4000( machine(), m_ROMMap[m_ROMBank] );
461457}
462458
463static WRITE8_HANDLER( gb_ram_bank_select_mbc6 )
459WRITE8_MEMBER(gb_state::gb_ram_bank_select_mbc6)
464460{
465   logerror( "0x%04X: write to mbc6 ram enable area: %04X <- 0x%02X\n", cpu_get_pc( &space->device() ), offset, data );
461   logerror( "0x%04X: write to mbc6 ram enable area: %04X <- 0x%02X\n", cpu_get_pc( &space.device() ), offset, data );
466462}
467463
468static WRITE8_HANDLER( gb_rom_bank_select_mbc6_1 )
464WRITE8_MEMBER(gb_state::gb_rom_bank_select_mbc6_1)
469465{
470   gb_state *state = space->machine().driver_data<gb_state>();
471   logerror( "0x%04X: write to mbc6 rom area: 0x%04X <- 0x%02X\n", cpu_get_pc( &space->device() ), 0x2000 + offset, data );
466   logerror( "0x%04X: write to mbc6 rom area: 0x%04X <- 0x%02X\n", cpu_get_pc( &space.device() ), 0x2000 + offset, data );
472467   if ( offset & 0x0800 )
473468   {
474469      if ( data == 0x00 )
475470      {
476         gb_rom8_4000( space->machine(), state->m_ROMMap[state->m_ROMBank>>1] + ( ( state->m_ROMBank & 0x01 ) ? 0x2000 : 0x0000 ) );
471         gb_rom8_4000( machine(), m_ROMMap[m_ROMBank>>1] + ( ( m_ROMBank & 0x01 ) ? 0x2000 : 0x0000 ) );
477472      }
478473   }
479474   else
480475   {
481      state->m_ROMBank = data;
476      m_ROMBank = data;
482477   }
483478}
484479
485static WRITE8_HANDLER( gb_rom_bank_select_mbc6_2 )
480WRITE8_MEMBER(gb_state::gb_rom_bank_select_mbc6_2)
486481{
487   gb_state *state = space->machine().driver_data<gb_state>();
488   logerror( "0x%04X: write to mbc6 rom area: 0x%04X <- 0x%02X\n", cpu_get_pc( &space->device() ), 0x3000 + offset, data );
482   logerror( "0x%04X: write to mbc6 rom area: 0x%04X <- 0x%02X\n", cpu_get_pc( &space.device() ), 0x3000 + offset, data );
489483   if ( offset & 0x0800 )
490484   {
491485      if ( data == 0x00 )
492486      {
493         gb_rom8_6000( space->machine(), state->m_ROMMap[state->m_ROMBank00>>1] + ( ( state->m_ROMBank00 & 0x01 ) ? 0x2000 : 0x0000 ) );
487         gb_rom8_6000( machine(), m_ROMMap[m_ROMBank00>>1] + ( ( m_ROMBank00 & 0x01 ) ? 0x2000 : 0x0000 ) );
494488      }
495489   }
496490   else
497491   {
498      state->m_ROMBank00 = data;
492      m_ROMBank00 = data;
499493   }
500494}
501495
502static WRITE8_HANDLER( gb_rom_bank_select_mbc7 )
496WRITE8_MEMBER(gb_state::gb_rom_bank_select_mbc7)
503497{
504   gb_state *state = space->machine().driver_data<gb_state>();
505   logerror( "0x%04X: write to mbc7 rom select register: 0x%04X <- 0x%02X\n", cpu_get_pc( &space->device() ), 0x2000 + offset, data );
498   logerror( "0x%04X: write to mbc7 rom select register: 0x%04X <- 0x%02X\n", cpu_get_pc( &space.device() ), 0x2000 + offset, data );
506499   /* Bit 12 must be set for writing to the mbc register */
507500   if ( offset & 0x0100 )
508501   {
509      state->m_ROMBank = data;
510      gb_rom16_4000( space->machine(), state->m_ROMMap[state->m_ROMBank] );
502      m_ROMBank = data;
503      gb_rom16_4000( machine(), m_ROMMap[m_ROMBank] );
511504   }
512505}
513506
514static WRITE8_HANDLER( gb_rom_bank_unknown_mbc7 )
507WRITE8_MEMBER(gb_state::gb_rom_bank_unknown_mbc7)
515508{
516        logerror( "0x%04X: write to mbc7 rom area: 0x%04X <- 0x%02X\n", cpu_get_pc( &space->device() ), 0x3000 + offset, data );
509        logerror( "0x%04X: write to mbc7 rom area: 0x%04X <- 0x%02X\n", cpu_get_pc( &space.device() ), 0x3000 + offset, data );
517510   /* Bit 12 must be set for writing to the mbc register */
518511   if ( offset & 0x0100 )
519512   {
r14963r14964
529522   }
530523}
531524
532static WRITE8_HANDLER( gb_rom_bank_select_wisdom )
525WRITE8_MEMBER(gb_state::gb_rom_bank_select_wisdom)
533526{
534   gb_state *state = space->machine().driver_data<gb_state>();
535   logerror( "0x%04X: wisdom tree mapper write to address 0x%04X\n", cpu_get_pc( &space->device() ), offset );
527   logerror( "0x%04X: wisdom tree mapper write to address 0x%04X\n", cpu_get_pc( &space.device() ), offset );
536528   /* The address determines the bank to select */
537   state->m_ROMBank = ( offset << 1 ) & 0x1FF;
538   memory_set_bankptr( space->machine(), "bank5", state->m_ROMMap[ state->m_ROMBank ] );
539   memory_set_bankptr( space->machine(), "bank10", state->m_ROMMap[ state->m_ROMBank ] + 0x0100 );
540   gb_rom16_4000( space->machine(), state->m_ROMMap[ state->m_ROMBank + 1 ] );
529   m_ROMBank = ( offset << 1 ) & 0x1FF;
530   memory_set_bankptr( machine(), "bank5", m_ROMMap[ m_ROMBank ] );
531   memory_set_bankptr( machine(), "bank10", m_ROMMap[ m_ROMBank ] + 0x0100 );
532   gb_rom16_4000( machine(), m_ROMMap[ m_ROMBank + 1 ] );
541533}
542534
543static WRITE8_HANDLER( gb_ram_bank_select_mbc1 )
535WRITE8_MEMBER(gb_state::gb_ram_bank_select_mbc1)
544536{
545   gb_state *state = space->machine().driver_data<gb_state>();
546537   data &= 0x3; /* Only uses the lower 2 bits */
547538
548539   /* Select the upper bits of the ROMMask */
549   state->m_ROMBank = ( state->m_ROMBank & 0x1F ) | ( data << 5 );
540   m_ROMBank = ( m_ROMBank & 0x1F ) | ( data << 5 );
550541
551542   /* Switch banks */
552   gb_set_mbc1_banks(space->machine());
543   gb_set_mbc1_banks(machine());
553544}
554545
555static WRITE8_HANDLER( gb_ram_bank_select_mbc3 )
546WRITE8_MEMBER(gb_state::gb_ram_bank_select_mbc3)
556547{
557   gb_state *state = space->machine().driver_data<gb_state>();
558   logerror( "0x%04X: write mbc3 ram bank select register 0x%04X <- 0x%02X\n", cpu_get_pc( &space->device() ), offset, data );
548   logerror( "0x%04X: write mbc3 ram bank select register 0x%04X <- 0x%02X\n", cpu_get_pc( &space.device() ), offset, data );
559549   if( data & 0x8 )
560550   {   /* RTC banks */
561      if ( state->m_CartType & TIMER )
551      if ( m_CartType & TIMER )
562552      {
563         state->m_MBC3RTCBank = data & 0x07;
553         m_MBC3RTCBank = data & 0x07;
564554         if ( data < 5 )
565555         {
566            memset( state->m_MBC3RTCData, state->m_MBC3RTCMap[state->m_MBC3RTCBank], 0x2000 );
567            memory_set_bankptr( space->machine(), "bank2", state->m_MBC3RTCData );
556            memset( m_MBC3RTCData, m_MBC3RTCMap[m_MBC3RTCBank], 0x2000 );
557            memory_set_bankptr( machine(), "bank2", m_MBC3RTCData );
568558         }
569559      }
570560   }
571561   else
572562   {   /* RAM banks */
573      state->m_RAMBank = data & 0x3;
574      state->m_MBC3RTCBank = 0xFF;
563      m_RAMBank = data & 0x3;
564      m_MBC3RTCBank = 0xFF;
575565      /* Switch banks */
576      memory_set_bankptr( space->machine(), "bank2", state->m_RAMMap[state->m_RAMBank] );
566      memory_set_bankptr( machine(), "bank2", m_RAMMap[m_RAMBank] );
577567   }
578568}
579569
580static WRITE8_HANDLER( gb_ram_bank_select_mbc5 )
570WRITE8_MEMBER(gb_state::gb_ram_bank_select_mbc5)
581571{
582   gb_state *state = space->machine().driver_data<gb_state>();
583   logerror( "0x%04X: MBC5 RAM Bank select write 0x%04X <- 0x%02X\n", cpu_get_pc( &space->device() ), offset, data );
572   logerror( "0x%04X: MBC5 RAM Bank select write 0x%04X <- 0x%02X\n", cpu_get_pc( &space.device() ), offset, data );
584573   data &= 0x0F;
585   if( state->m_CartType & RUMBLE )
574   if( m_CartType & RUMBLE )
586575   {
587576      data &= 0x7;
588577   }
589   state->m_RAMBank = data;
578   m_RAMBank = data;
590579   /* Switch banks */
591   memory_set_bankptr (space->machine(), "bank2", state->m_RAMMap[state->m_RAMBank] );
580   memory_set_bankptr (machine(), "bank2", m_RAMMap[m_RAMBank] );
592581}
593582
594WRITE8_HANDLER ( gb_ram_enable )
583WRITE8_MEMBER(gb_state::gb_ram_enable)
595584{
596585   /* FIXME: Currently we don't handle this, but a value of 0xA will enable
597586     * writing to the cart's RAM banks */
598   logerror( "0x%04X: Write to ram enable register 0x%04X <- 0x%02X\n", cpu_get_pc( &space->device() ), offset, data );
587   logerror( "0x%04X: Write to ram enable register 0x%04X <- 0x%02X\n", cpu_get_pc( &space.device() ), offset, data );
599588}
600589
601static WRITE8_HANDLER( gb_mem_mode_select_mbc1 )
590WRITE8_MEMBER(gb_state::gb_mem_mode_select_mbc1)
602591{
603   gb_state *state = space->machine().driver_data<gb_state>();
604   state->m_MBC1Mode = data & 0x1;
605   gb_set_mbc1_banks(space->machine());
592   m_MBC1Mode = data & 0x1;
593   gb_set_mbc1_banks(machine());
606594}
607595
608static WRITE8_HANDLER( gb_mem_mode_select_mbc3 )
596WRITE8_MEMBER(gb_state::gb_mem_mode_select_mbc3)
609597{
610   gb_state *state = space->machine().driver_data<gb_state>();
611        logerror( "0x%04X: Write to mbc3 mem mode select register 0x%04X <- 0x%02X\n", cpu_get_pc( &space->device() ), offset, data );
612   if( state->m_CartType & TIMER )
598        logerror( "0x%04X: Write to mbc3 mem mode select register 0x%04X <- 0x%02X\n", cpu_get_pc( &space.device() ), offset, data );
599   if( m_CartType & TIMER )
613600   {
614601      /* FIXME: RTC Latch goes here */
615      state->m_MBC3RTCMap[0] = 50;    /* Seconds */
616      state->m_MBC3RTCMap[1] = 40;    /* Minutes */
617      state->m_MBC3RTCMap[2] = 15;    /* Hours */
618      state->m_MBC3RTCMap[3] = 25;    /* Day counter lowest 8 bits */
619      state->m_MBC3RTCMap[4] = 0x01;  /* Day counter upper bit, timer off, no day overflow occurred (bit7) */
602      m_MBC3RTCMap[0] = 50;    /* Seconds */
603      m_MBC3RTCMap[1] = 40;    /* Minutes */
604      m_MBC3RTCMap[2] = 15;    /* Hours */
605      m_MBC3RTCMap[3] = 25;    /* Day counter lowest 8 bits */
606      m_MBC3RTCMap[4] = 0x01;  /* Day counter upper bit, timer off, no day overflow occurred (bit7) */
620607   }
621608}
622609
623static WRITE8_HANDLER( gb_ram_tama5 )
610WRITE8_MEMBER(gb_state::gb_ram_tama5)
624611{
625   gb_state *state = space->machine().driver_data<gb_state>();
626   logerror( "0x%04X: TAMA5 write 0x%04X <- 0x%02X\n", cpu_get_pc( &space->device() ), 0xA000 + offset, data );
612   logerror( "0x%04X: TAMA5 write 0x%04X <- 0x%02X\n", cpu_get_pc( &space.device() ), 0xA000 + offset, data );
627613   switch( offset & 0x0001 )
628614   {
629615   case 0x0000:    /* Write to data register */
630      switch( state->m_gbLastTama5Command )
616      switch( m_gbLastTama5Command )
631617      {
632618      case 0x00:      /* Bits 0-3 for rom bank selection */
633         state->m_ROMBank = ( state->m_ROMBank & 0xF0 ) | ( data & 0x0F );
634         gb_rom16_4000( space->machine(), state->m_ROMMap[state->m_ROMBank] );
619         m_ROMBank = ( m_ROMBank & 0xF0 ) | ( data & 0x0F );
620         gb_rom16_4000( machine(), m_ROMMap[m_ROMBank] );
635621         break;
636622      case 0x01:      /* Bit 4(-7?) for rom bank selection */
637         state->m_ROMBank = ( state->m_ROMBank & 0x0F ) | ( ( data & 0x0F ) << 4 );
638         gb_rom16_4000( space->machine(), state->m_ROMMap[state->m_ROMBank] );
623         m_ROMBank = ( m_ROMBank & 0x0F ) | ( ( data & 0x0F ) << 4 );
624         gb_rom16_4000( machine(), m_ROMMap[m_ROMBank] );
639625         break;
640626      case 0x04:      /* Data to write lo */
641         state->m_gbTama5Byte = ( state->m_gbTama5Byte & 0xF0 ) | ( data & 0x0F );
627         m_gbTama5Byte = ( m_gbTama5Byte & 0xF0 ) | ( data & 0x0F );
642628         break;
643629      case 0x05:      /* Data to write hi */
644         state->m_gbTama5Byte = ( state->m_gbTama5Byte & 0x0F ) | ( ( data & 0x0F ) << 4 );
630         m_gbTama5Byte = ( m_gbTama5Byte & 0x0F ) | ( ( data & 0x0F ) << 4 );
645631         break;
646632      case 0x06:      /* Address selection hi */
647         state->m_gbTama5Address = ( state->m_gbTama5Address & 0x0F ) | ( ( data & 0x0F ) << 4 );
633         m_gbTama5Address = ( m_gbTama5Address & 0x0F ) | ( ( data & 0x0F ) << 4 );
648634         break;
649635      case 0x07:      /* Address selection lo */
650636            /* This address always seems to written last, so we'll just
651637                   execute the command here */
652         state->m_gbTama5Address = ( state->m_gbTama5Address & 0xF0 ) | ( data & 0x0F );
653         switch ( state->m_gbTama5Address & 0xE0 )
638         m_gbTama5Address = ( m_gbTama5Address & 0xF0 ) | ( data & 0x0F );
639         switch ( m_gbTama5Address & 0xE0 )
654640         {
655641         case 0x00:      /* Write memory */
656            logerror( "Write tama5 memory 0x%02X <- 0x%02X\n", state->m_gbTama5Address & 0x1F, state->m_gbTama5Byte );
657            state->m_gbTama5Memory[ state->m_gbTama5Address & 0x1F ] = state->m_gbTama5Byte;
642            logerror( "Write tama5 memory 0x%02X <- 0x%02X\n", m_gbTama5Address & 0x1F, m_gbTama5Byte );
643            m_gbTama5Memory[ m_gbTama5Address & 0x1F ] = m_gbTama5Byte;
658644            break;
659645         case 0x20:      /* Read memory */
660            logerror( "Read tama5 memory 0x%02X\n", state->m_gbTama5Address & 0x1F );
661            state->m_gbTama5Byte = state->m_gbTama5Memory[ state->m_gbTama5Address & 0x1F ];
646            logerror( "Read tama5 memory 0x%02X\n", m_gbTama5Address & 0x1F );
647            m_gbTama5Byte = m_gbTama5Memory[ m_gbTama5Address & 0x1F ];
662648            break;
663649         case 0x40:      /* Unknown, some kind of read */
664            if ( ( state->m_gbTama5Address & 0x1F ) == 0x12 )
650            if ( ( m_gbTama5Address & 0x1F ) == 0x12 )
665651            {
666               state->m_gbTama5Byte = 0xFF;
652               m_gbTama5Byte = 0xFF;
667653            }
668654         case 0x80:      /* Unknown, some kind of read (when 07=01)/write (when 07=00/02) */
669655         default:
670            logerror( "0x%04X: Unknown addressing mode\n", cpu_get_pc( &space->device() ) );
656            logerror( "0x%04X: Unknown addressing mode\n", cpu_get_pc( &space.device() ) );
671657            break;
672658         }
673659         break;
r14963r14964
684670      case 0x07:      /* Address register lo */
685671         break;
686672      case 0x0A:      /* Are we ready for the next command? */
687         state->m_MBC3RTCData[0] = 0x01;
688         memory_set_bankptr( space->machine(), "bank2", state->m_MBC3RTCData );
673         m_MBC3RTCData[0] = 0x01;
674         memory_set_bankptr( machine(), "bank2", m_MBC3RTCData );
689675         break;
690676      case 0x0C:      /* Data read register lo */
691         state->m_MBC3RTCData[0] = state->m_gbTama5Byte & 0x0F;
677         m_MBC3RTCData[0] = m_gbTama5Byte & 0x0F;
692678         break;
693679      case 0x0D:      /* Data read register hi */
694         state->m_MBC3RTCData[0] = ( state->m_gbTama5Byte & 0xF0 ) >> 4;
680         m_MBC3RTCData[0] = ( m_gbTama5Byte & 0xF0 ) >> 4;
695681         break;
696682      default:
697         logerror( "0x%04X: Unknown tama5 command 0x%02X\n", cpu_get_pc( &space->device() ), data );
683         logerror( "0x%04X: Unknown tama5 command 0x%02X\n", cpu_get_pc( &space.device() ), data );
698684         break;
699685      }
700      state->m_gbLastTama5Command = data;
686      m_gbLastTama5Command = data;
701687      break;
702688   }
703689}
r14963r14964
705691/* This mmm01 implementation is mostly guess work, no clue how correct it all is */
706692
707693
708static WRITE8_HANDLER( gb_rom_bank_mmm01_0000_w )
694WRITE8_MEMBER(gb_state::gb_rom_bank_mmm01_0000_w)
709695{
710   gb_state *state = space->machine().driver_data<gb_state>();
711   logerror( "0x%04X: write 0x%02X to 0x%04X\n", cpu_get_pc( &space->device() ), data, offset+0x000 );
696   logerror( "0x%04X: write 0x%02X to 0x%04X\n", cpu_get_pc( &space.device() ), data, offset+0x000 );
712697   if ( data & 0x40 )
713698   {
714      state->m_mmm01_bank_offset = state->m_mmm01_reg1;
715      memory_set_bankptr( space->machine(), "bank5", state->m_ROMMap[ state->m_mmm01_bank_offset ] );
716      memory_set_bankptr( space->machine(), "bank10", state->m_ROMMap[ state->m_mmm01_bank_offset ] + 0x0100 );
717      gb_rom16_4000( space->machine(), state->m_ROMMap[ state->m_mmm01_bank_offset + state->m_mmm01_bank ] );
699      m_mmm01_bank_offset = m_mmm01_reg1;
700      memory_set_bankptr( machine(), "bank5", m_ROMMap[ m_mmm01_bank_offset ] );
701      memory_set_bankptr( machine(), "bank10", m_ROMMap[ m_mmm01_bank_offset ] + 0x0100 );
702      gb_rom16_4000( machine(), m_ROMMap[ m_mmm01_bank_offset + m_mmm01_bank ] );
718703   }
719704}
720705
721static WRITE8_HANDLER( gb_rom_bank_mmm01_2000_w )
706WRITE8_MEMBER(gb_state::gb_rom_bank_mmm01_2000_w)
722707{
723   gb_state *state = space->machine().driver_data<gb_state>();
724   logerror( "0x%04X: write 0x%02X to 0x%04X\n", cpu_get_pc( &space->device() ), data, offset+0x2000 );
708   logerror( "0x%04X: write 0x%02X to 0x%04X\n", cpu_get_pc( &space.device() ), data, offset+0x2000 );
725709
726   state->m_mmm01_reg1 = data & state->m_ROMMask;
727   state->m_mmm01_bank = state->m_mmm01_reg1 & state->m_mmm01_bank_mask;
728   if ( state->m_mmm01_bank == 0 )
710   m_mmm01_reg1 = data & m_ROMMask;
711   m_mmm01_bank = m_mmm01_reg1 & m_mmm01_bank_mask;
712   if ( m_mmm01_bank == 0 )
729713   {
730      state->m_mmm01_bank = 1;
714      m_mmm01_bank = 1;
731715   }
732   gb_rom16_4000( space->machine(), state->m_ROMMap[ state->m_mmm01_bank_offset + state->m_mmm01_bank ] );
716   gb_rom16_4000( machine(), m_ROMMap[ m_mmm01_bank_offset + m_mmm01_bank ] );
733717}
734718
735static WRITE8_HANDLER( gb_rom_bank_mmm01_4000_w )
719WRITE8_MEMBER(gb_state::gb_rom_bank_mmm01_4000_w)
736720{
737   logerror( "0x%04X: write 0x%02X to 0x%04X\n", cpu_get_pc( &space->device() ), data, offset+0x4000 );
721   logerror( "0x%04X: write 0x%02X to 0x%04X\n", cpu_get_pc( &space.device() ), data, offset+0x4000 );
738722}
739723
740static WRITE8_HANDLER( gb_rom_bank_mmm01_6000_w )
724WRITE8_MEMBER(gb_state::gb_rom_bank_mmm01_6000_w)
741725{
742   gb_state *state = space->machine().driver_data<gb_state>();
743   logerror( "0x%04X: write 0x%02X to 0x%04X\n", cpu_get_pc( &space->device() ), data, offset+0x6000 );
726   logerror( "0x%04X: write 0x%02X to 0x%04X\n", cpu_get_pc( &space.device() ), data, offset+0x6000 );
744727   /* Not sure if this is correct, Taito Variety Pack sets these values */
745728   /* Momotarou Collection 2 writes 01 and 21 here */
746729   switch( data )
747730   {
748   case 0x30:   state->m_mmm01_bank_mask = 0x07;   break;
749   case 0x38:   state->m_mmm01_bank_mask = 0x03;   break;
750   default:   state->m_mmm01_bank_mask = 0xFF; break;
731   case 0x30:   m_mmm01_bank_mask = 0x07;   break;
732   case 0x38:   m_mmm01_bank_mask = 0x03;   break;
733   default:   m_mmm01_bank_mask = 0xFF; break;
751734   }
752735}
753736
r14963r14964
764747   memory_set_bankptr( machine, "bank2", state->m_RAMMap[ state->m_MBC1Mode ? ( state->m_ROMBank >> 5 ) : 0 ] );
765748}
766749
767static WRITE8_HANDLER( gb_rom_bank_select_mbc1_kor )
750WRITE8_MEMBER(gb_state::gb_rom_bank_select_mbc1_kor)
768751{
769   gb_state *state = space->machine().driver_data<gb_state>();
770752   data &= 0x0F; /* Only uses lower 5 bits */
771753   /* Selecting bank 0 == selecting bank 1 */
772754   if( data == 0 )
773755      data = 1;
774756
775   state->m_ROMBank = ( state->m_ROMBank & 0x01F0 ) | data;
757   m_ROMBank = ( m_ROMBank & 0x01F0 ) | data;
776758   /* Switch banks */
777   gb_set_mbc1_kor_banks(space->machine());
759   gb_set_mbc1_kor_banks(machine());
778760}
779761
780static WRITE8_HANDLER( gb_ram_bank_select_mbc1_kor )
762WRITE8_MEMBER(gb_state::gb_ram_bank_select_mbc1_kor)
781763{
782   gb_state *state = space->machine().driver_data<gb_state>();
783764   data &= 0x3; /* Only uses the lower 2 bits */
784765
785766   /* Select the upper bits of the ROMMask */
786   state->m_ROMBank = ( state->m_ROMBank & 0x0F ) | ( data << 4 );
767   m_ROMBank = ( m_ROMBank & 0x0F ) | ( data << 4 );
787768
788769   /* Switch banks */
789   gb_set_mbc1_kor_banks(space->machine());
770   gb_set_mbc1_kor_banks(machine());
790771}
791772
792static WRITE8_HANDLER( gb_mem_mode_select_mbc1_kor )
773WRITE8_MEMBER(gb_state::gb_mem_mode_select_mbc1_kor)
793774{
794   gb_state *state = space->machine().driver_data<gb_state>();
795   state->m_MBC1Mode = data & 0x1;
796   gb_set_mbc1_kor_banks(space->machine());
775   m_MBC1Mode = data & 0x1;
776   gb_set_mbc1_kor_banks(machine());
797777}
798778
799WRITE8_HANDLER ( gb_io_w )
779WRITE8_MEMBER(gb_state::gb_io_w)
800780{
801   gb_state *state = space->machine().driver_data<gb_state>();
802781   static const UINT8 timer_shifts[4] = {10, 4, 6, 8};
803782
804783   switch (offset)
r14963r14964
806785   case 0x00:                  /* JOYP - Joypad */
807786      JOYPAD = 0xCF | data;
808787      if (!(data & 0x20))
809         JOYPAD &= (input_port_read(space->machine(), "INPUTS") >> 4) | 0xF0;
788         JOYPAD &= (input_port_read(machine(), "INPUTS") >> 4) | 0xF0;
810789      if (!(data & 0x10))
811         JOYPAD &= input_port_read(space->machine(), "INPUTS") | 0xF0;
790         JOYPAD &= input_port_read(machine(), "INPUTS") | 0xF0;
812791      return;
813792   case 0x01:                  /* SB - Serial transfer data */
814793      break;
r14963r14964
818797      case 0x00:
819798      case 0x01:
820799      case 0x80:            /* enabled & external clock */
821         state->m_SIOCount = 0;
800         m_SIOCount = 0;
822801         break;
823802      case 0x81:            /* enabled & internal clock */
824803         SIODATA = 0xFF;
825         state->m_SIOCount = 8;
826         state->m_gb_serial_timer->adjust(space->machine().device<cpu_device>("maincpu")->cycles_to_attotime(512), 0, space->machine().device<cpu_device>("maincpu")->cycles_to_attotime(512));
827         state->m_gb_serial_timer->enable( 1 );
804         m_SIOCount = 8;
805         m_gb_serial_timer->adjust(machine().device<cpu_device>("maincpu")->cycles_to_attotime(512), 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(512));
806         m_gb_serial_timer->enable( 1 );
828807         break;
829808      }
830809      break;
831810   case 0x04:                  /* DIV - Divider register */
832811      /* Force increment of TIMECNT register */
833      if ( state->m_divcount >= 16 )
834         gb_timer_increment(space->machine());
835      state->m_divcount = 0;
812      if ( m_divcount >= 16 )
813         gb_timer_increment(machine());
814      m_divcount = 0;
836815      return;
837816   case 0x05:                  /* TIMA - Timer counter */
838817      /* Check if the counter is being reloaded in this cycle */
839      if ( state->m_reloading && ( state->m_divcount & ( state->m_shift_cycles - 1 ) ) == 4 )
818      if ( m_reloading && ( m_divcount & ( m_shift_cycles - 1 ) ) == 4 )
840819      {
841820         data = TIMECNT;
842821      }
843822      break;
844823   case 0x06:                  /* TMA - Timer module */
845824      /* Check if the counter is being reloaded in this cycle */
846      if ( state->m_reloading && ( state->m_divcount & ( state->m_shift_cycles - 1 ) ) == 4 )
825      if ( m_reloading && ( m_divcount & ( m_shift_cycles - 1 ) ) == 4 )
847826      {
848827         TIMECNT = data;
849828      }
r14963r14964
854833      if ( ( ! ( data & 0x04 ) && ( TIMEFRQ & 0x04 ) ) || ( ( data & 0x04 ) && ( TIMEFRQ & 0x04 ) && ( data & 0x03 ) != ( TIMEFRQ & 0x03 ) ) )
855834      {
856835         /* Check if TIMECNT should be incremented */
857         if ( ( state->m_divcount & ( state->m_shift_cycles - 1 ) ) >= ( state->m_shift_cycles >> 1 ) )
836         if ( ( m_divcount & ( m_shift_cycles - 1 ) ) >= ( m_shift_cycles >> 1 ) )
858837         {
859            gb_timer_increment(space->machine());
838            gb_timer_increment(machine());
860839         }
861840      }
862      state->m_shift = timer_shifts[data & 0x03];
863      state->m_shift_cycles = 1 << state->m_shift;
841      m_shift = timer_shifts[data & 0x03];
842      m_shift_cycles = 1 << m_shift;
864843      break;
865844   case 0x0F:                  /* IF - Interrupt flag */
866845      data &= 0x1F;
867      space->machine().device<lr35902_cpu_device>(":maincpu")->set_if( data );
846      machine().device<lr35902_cpu_device>(":maincpu")->set_if( data );
868847      break;
869848   }
870849
871   state->m_gb_io[offset] = data;
850   m_gb_io[offset] = data;
872851}
873852
874WRITE8_HANDLER ( gb_io2_w )
853WRITE8_MEMBER(gb_state::gb_io2_w)
875854{
876   gb_state *state = space->machine().driver_data<gb_state>();
877855   if ( offset == 0x10 )
878856   {
879857      /* disable BIOS ROM */
880      gb_rom16_0000( space->machine(), state->m_ROMMap[state->m_ROMBank00] );
858      gb_rom16_0000( machine(), m_ROMMap[m_ROMBank00] );
881859   }
882860   else
883861   {
r14963r14964
917895};
918896#endif
919897
920WRITE8_HANDLER ( sgb_io_w )
898WRITE8_MEMBER(gb_state::sgb_io_w)
921899{
922   gb_state *state = space->machine().driver_data<gb_state>();
923   UINT8 *sgb_data = state->m_sgb_data;
900   UINT8 *sgb_data = m_sgb_data;
924901
925902   switch( offset )
926903   {
r14963r14964
928905         switch (data & 0x30)
929906         {
930907         case 0x00:               /* start condition */
931            if (state->m_sgb_start)
908            if (m_sgb_start)
932909               logerror("SGB: Start condition before end of transfer ??\n");
933            state->m_sgb_bitcount = 0;
934            state->m_sgb_start = 1;
935            state->m_sgb_rest = 0;
936            JOYPAD = 0x0F & ((input_port_read(space->machine(), "INPUTS") >> 4) | input_port_read(space->machine(), "INPUTS") | 0xF0);
910            m_sgb_bitcount = 0;
911            m_sgb_start = 1;
912            m_sgb_rest = 0;
913            JOYPAD = 0x0F & ((input_port_read(machine(), "INPUTS") >> 4) | input_port_read(machine(), "INPUTS") | 0xF0);
937914            break;
938915         case 0x10:               /* data true */
939            if (state->m_sgb_rest)
916            if (m_sgb_rest)
940917            {
941918               /* We should test for this case , but the code below won't
942919                       work with the current setup */
943920#if 0
944               if (state->m_sgb_bytecount == 16)
921               if (m_sgb_bytecount == 16)
945922               {
946923                  logerror("SGB: end of block is not zero!");
947                  state->m_sgb_start = 0;
924                  m_sgb_start = 0;
948925               }
949926#endif
950               sgb_data[state->m_sgb_bytecount] >>= 1;
951               sgb_data[state->m_sgb_bytecount] |= 0x80;
952               state->m_sgb_bitcount++;
953               if (state->m_sgb_bitcount == 8)
927               sgb_data[m_sgb_bytecount] >>= 1;
928               sgb_data[m_sgb_bytecount] |= 0x80;
929               m_sgb_bitcount++;
930               if (m_sgb_bitcount == 8)
954931               {
955                  state->m_sgb_bitcount = 0;
956                  state->m_sgb_bytecount++;
932                  m_sgb_bitcount = 0;
933                  m_sgb_bytecount++;
957934               }
958               state->m_sgb_rest = 0;
935               m_sgb_rest = 0;
959936            }
960            JOYPAD = 0x1F & ((input_port_read(space->machine(), "INPUTS") >> 4) | 0xF0);
937            JOYPAD = 0x1F & ((input_port_read(machine(), "INPUTS") >> 4) | 0xF0);
961938            break;
962939         case 0x20:            /* data false */
963            if (state->m_sgb_rest)
940            if (m_sgb_rest)
964941            {
965               if( state->m_sgb_bytecount == 16 && state->m_sgb_packets == -1 )
942               if( m_sgb_bytecount == 16 && m_sgb_packets == -1 )
966943               {
967944#ifdef MAME_DEBUG
968945                  logerror("SGB: %s (%02X) pkts: %d data: %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X\n",
r14963r14964
971948                        sgb_data[8], sgb_data[9], sgb_data[10], sgb_data[11],
972949                        sgb_data[12], sgb_data[13], sgb_data[14], sgb_data[15]);
973950#endif
974                  state->m_sgb_packets = sgb_data[0] & 0x07;
975                  state->m_sgb_start = 0;
951                  m_sgb_packets = sgb_data[0] & 0x07;
952                  m_sgb_start = 0;
976953               }
977               if (state->m_sgb_bytecount == (state->m_sgb_packets << 4) )
954               if (m_sgb_bytecount == (m_sgb_packets << 4) )
978955               {
979956                  switch( sgb_data[0] >> 3 )
980957                  {
981958                     case 0x00:   /* PAL01 */
982                        state->m_sgb_pal[0*4 + 0] = sgb_data[1] | (sgb_data[2] << 8);
983                        state->m_sgb_pal[0*4 + 1] = sgb_data[3] | (sgb_data[4] << 8);
984                        state->m_sgb_pal[0*4 + 2] = sgb_data[5] | (sgb_data[6] << 8);
985                        state->m_sgb_pal[0*4 + 3] = sgb_data[7] | (sgb_data[8] << 8);
986                        state->m_sgb_pal[1*4 + 0] = sgb_data[1] | (sgb_data[2] << 8);
987                        state->m_sgb_pal[1*4 + 1] = sgb_data[9] | (sgb_data[10] << 8);
988                        state->m_sgb_pal[1*4 + 2] = sgb_data[11] | (sgb_data[12] << 8);
989                        state->m_sgb_pal[1*4 + 3] = sgb_data[13] | (sgb_data[14] << 8);
959                        m_sgb_pal[0*4 + 0] = sgb_data[1] | (sgb_data[2] << 8);
960                        m_sgb_pal[0*4 + 1] = sgb_data[3] | (sgb_data[4] << 8);
961                        m_sgb_pal[0*4 + 2] = sgb_data[5] | (sgb_data[6] << 8);
962                        m_sgb_pal[0*4 + 3] = sgb_data[7] | (sgb_data[8] << 8);
963                        m_sgb_pal[1*4 + 0] = sgb_data[1] | (sgb_data[2] << 8);
964                        m_sgb_pal[1*4 + 1] = sgb_data[9] | (sgb_data[10] << 8);
965                        m_sgb_pal[1*4 + 2] = sgb_data[11] | (sgb_data[12] << 8);
966                        m_sgb_pal[1*4 + 3] = sgb_data[13] | (sgb_data[14] << 8);
990967                        break;
991968                     case 0x01:   /* PAL23 */
992                        state->m_sgb_pal[2*4 + 0] = sgb_data[1] | (sgb_data[2] << 8);
993                        state->m_sgb_pal[2*4 + 1] = sgb_data[3] | (sgb_data[4] << 8);
994                        state->m_sgb_pal[2*4 + 2] = sgb_data[5] | (sgb_data[6] << 8);
995                        state->m_sgb_pal[2*4 + 3] = sgb_data[7] | (sgb_data[8] << 8);
996                        state->m_sgb_pal[3*4 + 0] = sgb_data[1] | (sgb_data[2] << 8);
997                        state->m_sgb_pal[3*4 + 1] = sgb_data[9] | (sgb_data[10] << 8);
998                        state->m_sgb_pal[3*4 + 2] = sgb_data[11] | (sgb_data[12] << 8);
999                        state->m_sgb_pal[3*4 + 3] = sgb_data[13] | (sgb_data[14] << 8);
969                        m_sgb_pal[2*4 + 0] = sgb_data[1] | (sgb_data[2] << 8);
970                        m_sgb_pal[2*4 + 1] = sgb_data[3] | (sgb_data[4] << 8);
971                        m_sgb_pal[2*4 + 2] = sgb_data[5] | (sgb_data[6] << 8);
972                        m_sgb_pal[2*4 + 3] = sgb_data[7] | (sgb_data[8] << 8);
973                        m_sgb_pal[3*4 + 0] = sgb_data[1] | (sgb_data[2] << 8);
974                        m_sgb_pal[3*4 + 1] = sgb_data[9] | (sgb_data[10] << 8);
975                        m_sgb_pal[3*4 + 2] = sgb_data[11] | (sgb_data[12] << 8);
976                        m_sgb_pal[3*4 + 3] = sgb_data[13] | (sgb_data[14] << 8);
1000977                        break;
1001978                     case 0x02:   /* PAL03 */
1002                        state->m_sgb_pal[0*4 + 0] = sgb_data[1] | (sgb_data[2] << 8);
1003                        state->m_sgb_pal[0*4 + 1] = sgb_data[3] | (sgb_data[4] << 8);
1004                        state->m_sgb_pal[0*4 + 2] = sgb_data[5] | (sgb_data[6] << 8);
1005                        state->m_sgb_pal[0*4 + 3] = sgb_data[7] | (sgb_data[8] << 8);
1006                        state->m_sgb_pal[3*4 + 0] = sgb_data[1] | (sgb_data[2] << 8);
1007                        state->m_sgb_pal[3*4 + 1] = sgb_data[9] | (sgb_data[10] << 8);
1008                        state->m_sgb_pal[3*4 + 2] = sgb_data[11] | (sgb_data[12] << 8);
1009                        state->m_sgb_pal[3*4 + 3] = sgb_data[13] | (sgb_data[14] << 8);
979                        m_sgb_pal[0*4 + 0] = sgb_data[1] | (sgb_data[2] << 8);
980                        m_sgb_pal[0*4 + 1] = sgb_data[3] | (sgb_data[4] << 8);
981                        m_sgb_pal[0*4 + 2] = sgb_data[5] | (sgb_data[6] << 8);
982                        m_sgb_pal[0*4 + 3] = sgb_data[7] | (sgb_data[8] << 8);
983                        m_sgb_pal[3*4 + 0] = sgb_data[1] | (sgb_data[2] << 8);
984                        m_sgb_pal[3*4 + 1] = sgb_data[9] | (sgb_data[10] << 8);
985                        m_sgb_pal[3*4 + 2] = sgb_data[11] | (sgb_data[12] << 8);
986                        m_sgb_pal[3*4 + 3] = sgb_data[13] | (sgb_data[14] << 8);
1010987                        break;
1011988                     case 0x03:   /* PAL12 */
1012                        state->m_sgb_pal[1*4 + 0] = sgb_data[1] | (sgb_data[2] << 8);
1013                        state->m_sgb_pal[1*4 + 1] = sgb_data[3] | (sgb_data[4] << 8);
1014                        state->m_sgb_pal[1*4 + 2] = sgb_data[5] | (sgb_data[6] << 8);
1015                        state->m_sgb_pal[1*4 + 3] = sgb_data[7] | (sgb_data[8] << 8);
1016                        state->m_sgb_pal[2*4 + 0] = sgb_data[1] | (sgb_data[2] << 8);
1017                        state->m_sgb_pal[2*4 + 1] = sgb_data[9] | (sgb_data[10] << 8);
1018                        state->m_sgb_pal[2*4 + 2] = sgb_data[11] | (sgb_data[12] << 8);
1019                        state->m_sgb_pal[2*4 + 3] = sgb_data[13] | (sgb_data[14] << 8);
989                        m_sgb_pal[1*4 + 0] = sgb_data[1] | (sgb_data[2] << 8);
990                        m_sgb_pal[1*4 + 1] = sgb_data[3] | (sgb_data[4] << 8);
991                        m_sgb_pal[1*4 + 2] = sgb_data[5] | (sgb_data[6] << 8);
992                        m_sgb_pal[1*4 + 3] = sgb_data[7] | (sgb_data[8] << 8);
993                        m_sgb_pal[2*4 + 0] = sgb_data[1] | (sgb_data[2] << 8);
994                        m_sgb_pal[2*4 + 1] = sgb_data[9] | (sgb_data[10] << 8);
995                        m_sgb_pal[2*4 + 2] = sgb_data[11] | (sgb_data[12] << 8);
996                        m_sgb_pal[2*4 + 3] = sgb_data[13] | (sgb_data[14] << 8);
1020997                        break;
1021998                     case 0x04:   /* ATTR_BLK */
1022999                        {
r14963r14964
10301007                                 {
10311008                                    for( J = sgb_data[o + 5]; J <= sgb_data[o + 7]; J++ )
10321009                                    {
1033                                       state->m_sgb_pal_map[I][J] = sgb_data[o + 3] & 0x3;
1010                                       m_sgb_pal_map[I][J] = sgb_data[o + 3] & 0x3;
10341011                                    }
10351012                                 }
10361013                              }
r14963r14964
10481025                              {
10491026                                 for( J = 0; J < 20; J++ )
10501027                                 {
1051                                    state->m_sgb_pal_map[J][sgb_data[K + 1] & 0x1f] = (sgb_data[K + 1] & 0x60) >> 5;
1028                                    m_sgb_pal_map[J][sgb_data[K + 1] & 0x1f] = (sgb_data[K + 1] & 0x60) >> 5;
10521029                                 }
10531030                              }
10541031                              else
10551032                              {
10561033                                 for( J = 0; J < 18; J++ )
10571034                                 {
1058                                    state->m_sgb_pal_map[sgb_data[K + 1] & 0x1f][J] = (sgb_data[K + 1] & 0x60) >> 5;
1035                                    m_sgb_pal_map[sgb_data[K + 1] & 0x1f][J] = (sgb_data[K + 1] & 0x60) >> 5;
10591036                                 }
10601037                              }
10611038                           }
r14963r14964
10701047                              {
10711048                                 for( J = 0; J < 20; J++ )
10721049                                 {
1073                                    state->m_sgb_pal_map[J][I] = (sgb_data[1] & 0xC) >> 2;
1050                                    m_sgb_pal_map[J][I] = (sgb_data[1] & 0xC) >> 2;
10741051                                 }
10751052                              }
10761053                              for( J = 0; J < 20; J++ )
10771054                              {
1078                                 state->m_sgb_pal_map[J][sgb_data[2]] = (sgb_data[1] & 0x30) >> 4;
1055                                 m_sgb_pal_map[J][sgb_data[2]] = (sgb_data[1] & 0x30) >> 4;
10791056                              }
10801057                              for( I = sgb_data[2] + 1; I < 18; I++ )
10811058                              {
10821059                                 for( J = 0; J < 20; J++ )
10831060                                 {
1084                                    state->m_sgb_pal_map[J][I] = sgb_data[1] & 0x3;
1061                                    m_sgb_pal_map[J][I] = sgb_data[1] & 0x3;
10851062                                 }
10861063                              }
10871064                           }
r14963r14964
10911068                              {
10921069                                 for( J = 0; J < 18; J++ )
10931070                                 {
1094                                    state->m_sgb_pal_map[I][J] = (sgb_data[1] & 0xC) >> 2;
1071                                    m_sgb_pal_map[I][J] = (sgb_data[1] & 0xC) >> 2;
10951072                                 }
10961073                              }
10971074                              for( J = 0; J < 18; J++ )
10981075                              {
1099                                 state->m_sgb_pal_map[sgb_data[2]][J] = (sgb_data[1] & 0x30) >> 4;
1076                                 m_sgb_pal_map[sgb_data[2]][J] = (sgb_data[1] & 0x30) >> 4;
11001077                              }
11011078                              for( I = sgb_data[2] + 1; I < 20; I++ )
11021079                              {
11031080                                 for( J = 0; J < 18; J++ )
11041081                                 {
1105                                    state->m_sgb_pal_map[I][J] = sgb_data[1] & 0x3;
1082                                    m_sgb_pal_map[I][J] = sgb_data[1] & 0x3;
11061083                                 }
11071084                              }
11081085                           }
r14963r14964
11231100                           {
11241101                              for( I = 6; I < sets; I++ )
11251102                              {
1126                                 state->m_sgb_pal_map[x][y++] = (sgb_data[I] & 0xC0) >> 6;
1103                                 m_sgb_pal_map[x][y++] = (sgb_data[I] & 0xC0) >> 6;
11271104                                 if( y > 17 )
11281105                                 {
11291106                                    y = 0;
r14963r14964
11321109                                       x = 0;
11331110                                 }
11341111
1135                                 state->m_sgb_pal_map[x][y++] = (sgb_data[I] & 0x30) >> 4;
1112                                 m_sgb_pal_map[x][y++] = (sgb_data[I] & 0x30) >> 4;
11361113                                 if( y > 17 )
11371114                                 {
11381115                                    y = 0;
r14963r14964
11411118                                       x = 0;
11421119                                 }
11431120
1144                                 state->m_sgb_pal_map[x][y++] = (sgb_data[I] & 0xC) >> 2;
1121                                 m_sgb_pal_map[x][y++] = (sgb_data[I] & 0xC) >> 2;
11451122                                 if( y > 17 )
11461123                                 {
11471124                                    y = 0;
r14963r14964
11501127                                       x = 0;
11511128                                 }
11521129
1153                                 state->m_sgb_pal_map[x][y++] = sgb_data[I] & 0x3;
1130                                 m_sgb_pal_map[x][y++] = sgb_data[I] & 0x3;
11541131                                 if( y > 17 )
11551132                                 {
11561133                                    y = 0;
r14963r14964
11641141                           {
11651142                              for( I = 6; I < sets; I++ )
11661143                              {
1167                                 state->m_sgb_pal_map[x++][y] = (sgb_data[I] & 0xC0) >> 6;
1144                                 m_sgb_pal_map[x++][y] = (sgb_data[I] & 0xC0) >> 6;
11681145                                 if( x > 19 )
11691146                                 {
11701147                                    x = 0;
r14963r14964
11731150                                       y = 0;
11741151                                 }
11751152
1176                                 state->m_sgb_pal_map[x++][y] = (sgb_data[I] & 0x30) >> 4;
1153                                 m_sgb_pal_map[x++][y] = (sgb_data[I] & 0x30) >> 4;
11771154                                 if( x > 19 )
11781155                                 {
11791156                                    x = 0;
r14963r14964
11821159                                       y = 0;
11831160                                 }
11841161
1185                                 state->m_sgb_pal_map[x++][y] = (sgb_data[I] & 0xC) >> 2;
1162                                 m_sgb_pal_map[x++][y] = (sgb_data[I] & 0xC) >> 2;
11861163                                 if( x > 19 )
11871164                                 {
11881165                                    x = 0;
r14963r14964
11911168                                       y = 0;
11921169                                 }
11931170
1194                                 state->m_sgb_pal_map[x++][y] = sgb_data[I] & 0x3;
1171                                 m_sgb_pal_map[x++][y] = sgb_data[I] & 0x3;
11951172                                 if( x > 19 )
11961173                                 {
11971174                                    x = 0;
r14963r14964
12181195
12191196                           /* Palette 0 */
12201197                           index_ = (UINT16)(sgb_data[1] | (sgb_data[2] << 8)) * 4;
1221                           state->m_sgb_pal[0] = state->m_sgb_pal_data[index_];
1222                           state->m_sgb_pal[1] = state->m_sgb_pal_data[index_ + 1];
1223                           state->m_sgb_pal[2] = state->m_sgb_pal_data[index_ + 2];
1224                           state->m_sgb_pal[3] = state->m_sgb_pal_data[index_ + 3];
1198                           m_sgb_pal[0] = m_sgb_pal_data[index_];
1199                           m_sgb_pal[1] = m_sgb_pal_data[index_ + 1];
1200                           m_sgb_pal[2] = m_sgb_pal_data[index_ + 2];
1201                           m_sgb_pal[3] = m_sgb_pal_data[index_ + 3];
12251202                           /* Palette 1 */
12261203                           index_ = (UINT16)(sgb_data[3] | (sgb_data[4] << 8)) * 4;
1227                           state->m_sgb_pal[4] = state->m_sgb_pal_data[index_];
1228                           state->m_sgb_pal[5] = state->m_sgb_pal_data[index_ + 1];
1229                           state->m_sgb_pal[6] = state->m_sgb_pal_data[index_ + 2];
1230                           state->m_sgb_pal[7] = state->m_sgb_pal_data[index_ + 3];
1204                           m_sgb_pal[4] = m_sgb_pal_data[index_];
1205                           m_sgb_pal[5] = m_sgb_pal_data[index_ + 1];
1206                           m_sgb_pal[6] = m_sgb_pal_data[index_ + 2];
1207                           m_sgb_pal[7] = m_sgb_pal_data[index_ + 3];
12311208                           /* Palette 2 */
12321209                           index_ = (UINT16)(sgb_data[5] | (sgb_data[6] << 8)) * 4;
1233                           state->m_sgb_pal[8] = state->m_sgb_pal_data[index_];
1234                           state->m_sgb_pal[9] = state->m_sgb_pal_data[index_ + 1];
1235                           state->m_sgb_pal[10] = state->m_sgb_pal_data[index_ + 2];
1236                           state->m_sgb_pal[11] = state->m_sgb_pal_data[index_ + 3];
1210                           m_sgb_pal[8] = m_sgb_pal_data[index_];
1211                           m_sgb_pal[9] = m_sgb_pal_data[index_ + 1];
1212                           m_sgb_pal[10] = m_sgb_pal_data[index_ + 2];
1213                           m_sgb_pal[11] = m_sgb_pal_data[index_ + 3];
12371214                           /* Palette 3 */
12381215                           index_ = (UINT16)(sgb_data[7] | (sgb_data[8] << 8)) * 4;
1239                           state->m_sgb_pal[12] = state->m_sgb_pal_data[index_];
1240                           state->m_sgb_pal[13] = state->m_sgb_pal_data[index_ + 1];
1241                           state->m_sgb_pal[14] = state->m_sgb_pal_data[index_ + 2];
1242                           state->m_sgb_pal[15] = state->m_sgb_pal_data[index_ + 3];
1216                           m_sgb_pal[12] = m_sgb_pal_data[index_];
1217                           m_sgb_pal[13] = m_sgb_pal_data[index_ + 1];
1218                           m_sgb_pal[14] = m_sgb_pal_data[index_ + 2];
1219                           m_sgb_pal[15] = m_sgb_pal_data[index_ + 3];
12431220                           /* Attribute File */
12441221                           if( sgb_data[9] & 0x40 )
1245                              state->m_sgb_window_mask = 0;
1246                           state->m_sgb_atf = (sgb_data[9] & 0x3f) * (18 * 5);
1222                              m_sgb_window_mask = 0;
1223                           m_sgb_atf = (sgb_data[9] & 0x3f) * (18 * 5);
12471224                           if( sgb_data[9] & 0x80 )
12481225                           {
12491226                              for( J = 0; J < 18; J++ )
12501227                              {
12511228                                 for( I = 0; I < 5; I++ )
12521229                                 {
1253                                    state->m_sgb_pal_map[I * 4][J] = (state->m_sgb_atf_data[(J * 5) + state->m_sgb_atf + I] & 0xC0) >> 6;
1254                                    state->m_sgb_pal_map[(I * 4) + 1][J] = (state->m_sgb_atf_data[(J * 5) + state->m_sgb_atf + I] & 0x30) >> 4;
1255                                    state->m_sgb_pal_map[(I * 4) + 2][J] = (state->m_sgb_atf_data[(J * 5) + state->m_sgb_atf + I] & 0xC) >> 2;
1256                                    state->m_sgb_pal_map[(I * 4) + 3][J] = state->m_sgb_atf_data[(J * 5) + state->m_sgb_atf + I] & 0x3;
1230                                    m_sgb_pal_map[I * 4][J] = (m_sgb_atf_data[(J * 5) + m_sgb_atf + I] & 0xC0) >> 6;
1231                                    m_sgb_pal_map[(I * 4) + 1][J] = (m_sgb_atf_data[(J * 5) + m_sgb_atf + I] & 0x30) >> 4;
1232                                    m_sgb_pal_map[(I * 4) + 2][J] = (m_sgb_atf_data[(J * 5) + m_sgb_atf + I] & 0xC) >> 2;
1233                                    m_sgb_pal_map[(I * 4) + 3][J] = m_sgb_atf_data[(J * 5) + m_sgb_atf + I] & 0x3;
12571234                                 }
12581235                              }
12591236                           }
r14963r14964
12611238                        break;
12621239                     case 0x0B:   /* PAL_TRN */
12631240                        {
1264                           UINT8 *gb_vram = gb_get_vram_ptr(space->machine());
1241                           UINT8 *gb_vram = gb_get_vram_ptr(machine());
12651242                           UINT16 I, col;
12661243
12671244                           for( I = 0; I < 2048; I++ )
12681245                           {
12691246                              col = ( gb_vram[ 0x0800 + (I*2) + 1 ] << 8 ) | gb_vram[ 0x0800 + (I*2) ];
1270                              state->m_sgb_pal_data[I] = col;
1247                              m_sgb_pal_data[I] = col;
12711248                           }
12721249                        }
12731250                        break;
r14963r14964
12881265                        break;
12891266                     case 0x11:   /* MLT_REQ - Multi controller request */
12901267                        if (sgb_data[1] == 0x00)
1291                           state->m_sgb_controller_mode = 0;
1268                           m_sgb_controller_mode = 0;
12921269                        else if (sgb_data[1] == 0x01)
1293                           state->m_sgb_controller_mode = 2;
1270                           m_sgb_controller_mode = 2;
12941271                        break;
12951272                     case 0x12:   /* JUMP */
12961273                        /* Not Implemented */
12971274                        break;
12981275                     case 0x13:   /* CHR_TRN */
12991276                        if( sgb_data[1] & 0x1 )
1300                           memcpy( state->m_sgb_tile_data + 4096, gb_get_vram_ptr(space->machine()) + 0x0800, 4096 );
1277                           memcpy( m_sgb_tile_data + 4096, gb_get_vram_ptr(machine()) + 0x0800, 4096 );
13011278                        else
1302                           memcpy( state->m_sgb_tile_data, gb_get_vram_ptr(space->machine()) + 0x0800, 4096 );
1279                           memcpy( m_sgb_tile_data, gb_get_vram_ptr(machine()) + 0x0800, 4096 );
13031280                        break;
13041281                     case 0x14:   /* PCT_TRN */
13051282                        {
13061283                           int I;
13071284                           UINT16 col;
1308                           UINT8 *gb_vram = gb_get_vram_ptr(space->machine());
1309                           if( state->m_sgb_hack )
1285                           UINT8 *gb_vram = gb_get_vram_ptr(machine());
1286                           if( m_sgb_hack )
13101287                           {
1311                              memcpy( state->m_sgb_tile_map, gb_vram + 0x1000, 2048 );
1288                              memcpy( m_sgb_tile_map, gb_vram + 0x1000, 2048 );
13121289                              for( I = 0; I < 64; I++ )
13131290                              {
13141291                                 col = ( gb_vram[ 0x0800 + (I*2) + 1 ] << 8 ) | gb_vram[ 0x0800 + (I*2) ];
1315                                 state->m_sgb_pal[SGB_BORDER_PAL_OFFSET + I] = col;
1292                                 m_sgb_pal[SGB_BORDER_PAL_OFFSET + I] = col;
13161293                              }
13171294                           }
13181295                           else /* Do things normally */
13191296                           {
1320                              memcpy( state->m_sgb_tile_map, gb_vram + 0x0800, 2048 );
1297                              memcpy( m_sgb_tile_map, gb_vram + 0x0800, 2048 );
13211298                              for( I = 0; I < 64; I++ )
13221299                              {
13231300                                 col = ( gb_vram[ 0x1000 + (I*2) + 1 ] << 8 ) | gb_vram[ 0x1000 + (I*2) ];
1324                                 state->m_sgb_pal[SGB_BORDER_PAL_OFFSET + I] = col;
1301                                 m_sgb_pal[SGB_BORDER_PAL_OFFSET + I] = col;
13251302                              }
13261303                           }
13271304                        }
13281305                        break;
13291306                     case 0x15:   /* ATTR_TRN */
1330                        memcpy( state->m_sgb_atf_data, gb_get_vram_ptr(space->machine()) + 0x0800, 4050 );
1307                        memcpy( m_sgb_atf_data, gb_get_vram_ptr(machine()) + 0x0800, 4050 );
13311308                        break;
13321309                     case 0x16:   /* ATTR_SET */
13331310                        {
r14963r14964
13351312
13361313                           /* Attribute File */
13371314                           if( sgb_data[1] & 0x40 )
1338                              state->m_sgb_window_mask = 0;
1339                           state->m_sgb_atf = (sgb_data[1] & 0x3f) * (18 * 5);
1315                              m_sgb_window_mask = 0;
1316                           m_sgb_atf = (sgb_data[1] & 0x3f) * (18 * 5);
13401317                           for( J = 0; J < 18; J++ )
13411318                           {
13421319                              for( I = 0; I < 5; I++ )
13431320                              {
1344                                 state->m_sgb_pal_map[I * 4][J] = (state->m_sgb_atf_data[(J * 5) + state->m_sgb_atf + I] & 0xC0) >> 6;
1345                                 state->m_sgb_pal_map[(I * 4) + 1][J] = (state->m_sgb_atf_data[(J * 5) + state->m_sgb_atf + I] & 0x30) >> 4;
1346                                 state->m_sgb_pal_map[(I * 4) + 2][J] = (state->m_sgb_atf_data[(J * 5) + state->m_sgb_atf + I] & 0xC) >> 2;
1347                                 state->m_sgb_pal_map[(I * 4) + 3][J] = state->m_sgb_atf_data[(J * 5) + state->m_sgb_atf + I] & 0x3;
1321                                 m_sgb_pal_map[I * 4][J] = (m_sgb_atf_data[(J * 5) + m_sgb_atf + I] & 0xC0) >> 6;
1322                                 m_sgb_pal_map[(I * 4) + 1][J] = (m_sgb_atf_data[(J * 5) + m_sgb_atf + I] & 0x30) >> 4;
1323                                 m_sgb_pal_map[(I * 4) + 2][J] = (m_sgb_atf_data[(J * 5) + m_sgb_atf + I] & 0xC) >> 2;
1324                                 m_sgb_pal_map[(I * 4) + 3][J] = m_sgb_atf_data[(J * 5) + m_sgb_atf + I] & 0x3;
13481325                              }
13491326                           }
13501327                        }
13511328                        break;
13521329                     case 0x17:   /* MASK_EN */
1353                        state->m_sgb_window_mask = sgb_data[1];
1330                        m_sgb_window_mask = sgb_data[1];
13541331                        break;
13551332                     case 0x18:   /* OBJ_TRN */
13561333                        /* Not Implemnted */
r14963r14964
13681345                        logerror( "SGB: Unknown Command 0x%02x!\n", sgb_data[0] >> 3 );
13691346                  }
13701347
1371                  state->m_sgb_start = 0;
1372                  state->m_sgb_bytecount = 0;
1373                  state->m_sgb_packets = -1;
1348                  m_sgb_start = 0;
1349                  m_sgb_bytecount = 0;
1350                  m_sgb_packets = -1;
13741351               }
1375               if( state->m_sgb_start )
1352               if( m_sgb_start )
13761353               {
1377                  sgb_data[state->m_sgb_bytecount] >>= 1;
1378                  state->m_sgb_bitcount++;
1379                  if (state->m_sgb_bitcount == 8)
1354                  sgb_data[m_sgb_bytecount] >>= 1;
1355                  m_sgb_bitcount++;
1356                  if (m_sgb_bitcount == 8)
13801357                  {
1381                     state->m_sgb_bitcount = 0;
1382                     state->m_sgb_bytecount++;
1358                     m_sgb_bitcount = 0;
1359                     m_sgb_bytecount++;
13831360                  }
13841361               }
1385               state->m_sgb_rest = 0;
1362               m_sgb_rest = 0;
13861363            }
1387            JOYPAD = 0x2F & (input_port_read(space->machine(), "INPUTS") | 0xF0);
1364            JOYPAD = 0x2F & (input_port_read(machine(), "INPUTS") | 0xF0);
13881365            break;
13891366         case 0x30:               /* rest condition */
1390            if (state->m_sgb_start)
1391               state->m_sgb_rest = 1;
1392            if (state->m_sgb_controller_mode)
1367            if (m_sgb_start)
1368               m_sgb_rest = 1;
1369            if (m_sgb_controller_mode)
13931370            {
1394               state->m_sgb_controller_no++;
1395               if (state->m_sgb_controller_no == state->m_sgb_controller_mode)
1396                  state->m_sgb_controller_no = 0;
1397               JOYPAD = 0x3F - state->m_sgb_controller_no;
1371               m_sgb_controller_no++;
1372               if (m_sgb_controller_no == m_sgb_controller_mode)
1373                  m_sgb_controller_no = 0;
1374               JOYPAD = 0x3F - m_sgb_controller_no;
13981375            }
13991376            else
14001377               JOYPAD = 0x3F;
r14963r14964
14111388         return;
14121389   }
14131390
1414   state->m_gb_io[offset] = data;
1391   m_gb_io[offset] = data;
14151392}
14161393
14171394/* Interrupt Enable register */
1418READ8_HANDLER( gb_ie_r )
1395READ8_MEMBER(gb_state::gb_ie_r)
14191396{
1420   return space->machine().device<lr35902_cpu_device>(":maincpu")->get_ie();
1397   return machine().device<lr35902_cpu_device>(":maincpu")->get_ie();
14211398}
14221399
1423WRITE8_HANDLER ( gb_ie_w )
1400WRITE8_MEMBER(gb_state::gb_ie_w)
14241401{
1425   space->machine().device<lr35902_cpu_device>(":maincpu")->set_ie( data & 0x1F );
1402   machine().device<lr35902_cpu_device>(":maincpu")->set_ie( data & 0x1F );
14261403}
14271404
14281405/* IO read */
1429READ8_HANDLER ( gb_io_r )
1406READ8_MEMBER(gb_state::gb_io_r)
14301407{
1431   gb_state *state = space->machine().driver_data<gb_state>();
14321408   switch(offset)
14331409   {
14341410      case 0x04:
1435         return ( state->m_divcount >> 8 ) & 0xFF;
1411         return ( m_divcount >> 8 ) & 0xFF;
14361412      case 0x00:
14371413      case 0x01:
14381414      case 0x02:
r14963r14964
14401416      case 0x05:
14411417      case 0x06:
14421418      case 0x07:
1443         return state->m_gb_io[offset];
1419         return m_gb_io[offset];
14441420      case 0x0F:
14451421         /* Make sure the internal states are up to date */
1446         return 0xE0 | space->machine().device<lr35902_cpu_device>(":maincpu")->get_if();
1422         return 0xE0 | machine().device<lr35902_cpu_device>(":maincpu")->get_if();
14471423      default:
14481424         /* It seems unsupported registers return 0xFF */
14491425         return 0xFF;
r14963r14964
19271903{
19281904   gb_state *state = machine.driver_data<gb_state>();
19291905   /* Shift in a received bit */
1930   SIODATA = (SIODATA << 1) | 0x01;
1906   state->SIODATA = (state->SIODATA << 1) | 0x01;
19311907   /* Decrement number of handled bits */
19321908   state->m_SIOCount--;
19331909   /* If all bits done, stop timer and trigger interrupt */
19341910   if ( ! state->m_SIOCount )
19351911   {
1936      SIOCONT &= 0x7F;
1912      state->SIOCONT &= 0x7F;
19371913      state->m_gb_serial_timer->enable( 0 );
19381914      cputag_set_input_line(machine, "maincpu", SIO_INT, ASSERT_LINE);
19391915   }
r14963r14964
19461922   if ( state->m_triggering_irq )
19471923   {
19481924      state->m_triggering_irq = 0;
1949      if ( TIMECNT == 0 )
1925      if ( state->TIMECNT == 0 )
19501926      {
1951         TIMECNT = TIMEMOD;
1927         state->TIMECNT = state->TIMEMOD;
19521928         cputag_set_input_line(machine, "maincpu", TIM_INT, ASSERT_LINE );
19531929         state->m_reloading = 1;
19541930      }
r14963r14964
19601936   gb_state *state = machine.driver_data<gb_state>();
19611937   gb_timer_check_irq(machine);
19621938
1963   TIMECNT += 1;
1964   if ( TIMECNT == 0 )
1939   state->TIMECNT += 1;
1940   if ( state->TIMECNT == 0 )
19651941   {
19661942      state->m_triggering_irq = 1;
19671943   }
r14963r14964
19751951
19761952   gb_timer_check_irq(device->machine());
19771953
1978   if ( TIMEFRQ & 0x04 )
1954   if ( state->TIMEFRQ & 0x04 )
19791955   {
19801956      UINT16 old_count = old_gb_divcount >> state->m_shift;
19811957      UINT16 new_count = state->m_divcount >> state->m_shift;
r14963r14964
19951971   }
19961972}
19971973
1998WRITE8_HANDLER ( gbc_io2_w )
1974WRITE8_MEMBER(gb_state::gbc_io2_w)
19991975{
2000   gb_state *state = space->machine().driver_data<gb_state>();
20011976   switch( offset )
20021977   {
20031978      case 0x0D:   /* KEY1 - Prepare speed switch */
2004         space->machine().device<lr35902_cpu_device>(":maincpu")->set_speed( data );
1979         machine().device<lr35902_cpu_device>(":maincpu")->set_speed( data );
20051980         return;
20061981      case 0x10:   /* BFF - Bios disable */
2007         gb_rom16_0000( space->machine(), state->m_ROMMap[state->m_ROMBank00] );
1982         gb_rom16_0000( machine(), m_ROMMap[m_ROMBank00] );
20081983         return;
20091984      case 0x16:   /* RP - Infrared port */
20101985         break;
20111986      case 0x30:   /* SVBK - RAM bank select */
2012         state->m_GBC_RAMBank = data & 0x7;
2013         if ( ! state->m_GBC_RAMBank )
2014            state->m_GBC_RAMBank = 1;
2015         memory_set_bankptr (space->machine(), "bank3", state->m_GBC_RAMMap[state->m_GBC_RAMBank]);
1987         m_GBC_RAMBank = data & 0x7;
1988         if ( ! m_GBC_RAMBank )
1989            m_GBC_RAMBank = 1;
1990         memory_set_bankptr (machine(), "bank3", m_GBC_RAMMap[m_GBC_RAMBank]);
20161991         break;
20171992      default:
20181993         break;
r14963r14964
20201995   gbc_video_w( space, offset, data );
20211996}
20221997
2023READ8_HANDLER( gbc_io2_r )
1998READ8_MEMBER(gb_state::gbc_io2_r)
20241999{
2025   gb_state *state = space->machine().driver_data<gb_state>();
20262000   switch( offset )
20272001   {
20282002   case 0x0D:   /* KEY1 */
2029      space->machine().device<lr35902_cpu_device>(":maincpu")->get_speed();
2003      machine().device<lr35902_cpu_device>(":maincpu")->get_speed();
20302004   case 0x16:   /* RP - Infrared port */
20312005      break;
20322006   case 0x30:   /* SVBK - RAM bank select */
2033      return state->m_GBC_RAMBank;
2007      return m_GBC_RAMBank;
20342008   default:
20352009      break;
20362010   }
r14963r14964
20972071
20982072 **************/
20992073
2100 READ8_HANDLER( megaduck_video_r )
2074READ8_MEMBER(gb_state::megaduck_video_r)
21012075{
21022076   UINT8 data;
21032077
r14963r14964
21112085   return BITSWAP8(data,7,0,5,4,6,3,2,1);
21122086}
21132087
2114WRITE8_HANDLER ( megaduck_video_w )
2088WRITE8_MEMBER(gb_state::megaduck_video_w)
21152089{
21162090   if ( !offset )
21172091   {
r14963r14964
21282102
21292103static const UINT8 megaduck_sound_offsets[16] = { 0, 2, 1, 3, 4, 6, 5, 7, 8, 9, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F };
21302104
2131WRITE8_HANDLER( megaduck_sound_w1 )
2105WRITE8_MEMBER(gb_state::megaduck_sound_w1)
21322106{
2133   gb_sound_w(space->machine().device("custom"), megaduck_sound_offsets[offset], data );
2107   gb_sound_w(machine().device("custom"), megaduck_sound_offsets[offset], data );
21342108}
21352109
2136READ8_HANDLER( megaduck_sound_r1 )
2110READ8_MEMBER(gb_state::megaduck_sound_r1)
21372111{
2138   return gb_sound_r( space->machine().device("custom"), megaduck_sound_offsets[offset] );
2112   return gb_sound_r( machine().device("custom"), megaduck_sound_offsets[offset] );
21392113}
21402114
2141WRITE8_HANDLER( megaduck_sound_w2 )
2115WRITE8_MEMBER(gb_state::megaduck_sound_w2)
21422116{
21432117   switch(offset)
21442118   {
2145      case 0x00:   gb_sound_w(space->machine().device("custom"), 0x10, data );   break;
2146      case 0x01:   gb_sound_w(space->machine().device("custom"), 0x12, data );   break;
2147      case 0x02:   gb_sound_w(space->machine().device("custom"), 0x11, data );   break;
2148      case 0x03:   gb_sound_w(space->machine().device("custom"), 0x13, data );   break;
2149      case 0x04:   gb_sound_w(space->machine().device("custom"), 0x14, data );   break;
2150      case 0x05:   gb_sound_w(space->machine().device("custom"), 0x16, data );   break;
2151      case 0x06:   gb_sound_w(space->machine().device("custom"), 0x15, data );   break;
2119      case 0x00:   gb_sound_w(machine().device("custom"), 0x10, data );   break;
2120      case 0x01:   gb_sound_w(machine().device("custom"), 0x12, data );   break;
2121      case 0x02:   gb_sound_w(machine().device("custom"), 0x11, data );   break;
2122      case 0x03:   gb_sound_w(machine().device("custom"), 0x13, data );   break;
2123      case 0x04:   gb_sound_w(machine().device("custom"), 0x14, data );   break;
2124      case 0x05:   gb_sound_w(machine().device("custom"), 0x16, data );   break;
2125      case 0x06:   gb_sound_w(machine().device("custom"), 0x15, data );   break;
21522126      case 0x07:
21532127      case 0x08:
21542128      case 0x09:
r14963r14964
21622136   }
21632137}
21642138
2165READ8_HANDLER( megaduck_sound_r2 )
2139READ8_MEMBER(gb_state::megaduck_sound_r2)
21662140{
2167   return gb_sound_r(space->machine().device("custom"), 0x10 + megaduck_sound_offsets[offset]);
2141   return gb_sound_r(machine().device("custom"), 0x10 + megaduck_sound_offsets[offset]);
21682142}
21692143
2170WRITE8_HANDLER( megaduck_rom_bank_select_type1 )
2144WRITE8_MEMBER(gb_state::megaduck_rom_bank_select_type1)
21712145{
2172   gb_state *state = space->machine().driver_data<gb_state>();
2173   if( state->m_ROMMask )
2146   if( m_ROMMask )
21742147   {
2175      state->m_ROMBank = data & state->m_ROMMask;
2148      m_ROMBank = data & m_ROMMask;
21762149
21772150      /* Switch banks */
2178      memory_set_bankptr (space->machine(), "bank1", state->m_ROMMap[state->m_ROMBank]);
2151      memory_set_bankptr (machine(), "bank1", m_ROMMap[m_ROMBank]);
21792152   }
21802153}
21812154
2182WRITE8_HANDLER( megaduck_rom_bank_select_type2 )
2155WRITE8_MEMBER(gb_state::megaduck_rom_bank_select_type2)
21832156{
2184   gb_state *state = space->machine().driver_data<gb_state>();
2185   if( state->m_ROMMask )
2157   if( m_ROMMask )
21862158   {
2187      state->m_ROMBank = (data << 1) & state->m_ROMMask;
2159      m_ROMBank = (data << 1) & m_ROMMask;
21882160
21892161      /* Switch banks */
2190      memory_set_bankptr( space->machine(), "bank10", state->m_ROMMap[state->m_ROMBank]);
2191      memory_set_bankptr( space->machine(), "bank1", state->m_ROMMap[state->m_ROMBank + 1]);
2162      memory_set_bankptr( machine(), "bank10", m_ROMMap[m_ROMBank]);
2163      memory_set_bankptr( machine(), "bank1", m_ROMMap[m_ROMBank + 1]);
21922164   }
21932165}
21942166
src/mess/machine/radio86.c
r14963r14964
161161}
162162
163163
164READ8_HANDLER (radio_cpu_state_r )
164READ8_MEMBER(radio86_state::radio_cpu_state_r)
165165{
166   return cpu_get_reg(&space->device(), I8085_STATUS);
166   return cpu_get_reg(&space.device(), I8085_STATUS);
167167}
168168
169READ8_HANDLER (radio_io_r )
169READ8_MEMBER(radio86_state::radio_io_r)
170170{
171   return space->machine().device("maincpu")->memory().space(AS_PROGRAM)->read_byte((offset << 8) + offset);
171   return machine().device("maincpu")->memory().space(AS_PROGRAM)->read_byte((offset << 8) + offset);
172172}
173173
174WRITE8_HANDLER(radio_io_w )
174WRITE8_MEMBER(radio86_state::radio_io_w)
175175{
176   space->machine().device("maincpu")->memory().space(AS_PROGRAM)->write_byte((offset << 8) + offset,data);
176   machine().device("maincpu")->memory().space(AS_PROGRAM)->write_byte((offset << 8) + offset,data);
177177}
178178
179179MACHINE_RESET( radio86 )
r14963r14964
187187}
188188
189189
190WRITE8_HANDLER ( radio86_pagesel )
190WRITE8_MEMBER(radio86_state::radio86_pagesel)
191191{
192   radio86_state *state = space->machine().driver_data<radio86_state>();
193   state->m_disk_sel = data;
192   m_disk_sel = data;
194193}
195194
196195static READ8_DEVICE_HANDLER (radio86_romdisk_porta_r )
src/mess/machine/b2m.c
r14963r14964
1919#include "machine/ram.h"
2020#include "imagedev/flopdrv.h"
2121
22static READ8_HANDLER (b2m_keyboard_r )
22READ8_MEMBER(b2m_state::b2m_keyboard_r)
2323{
2424   UINT8 key = 0x00;
2525   if (offset < 0x100) {
26      if ((offset & 0x01)!=0) { key |= input_port_read(space->machine(),"LINE0"); }
27      if ((offset & 0x02)!=0) { key |= input_port_read(space->machine(),"LINE1"); }
28      if ((offset & 0x04)!=0) { key |= input_port_read(space->machine(),"LINE2"); }
29      if ((offset & 0x08)!=0) { key |= input_port_read(space->machine(),"LINE3"); }
30      if ((offset & 0x10)!=0) { key |= input_port_read(space->machine(),"LINE4"); }
31      if ((offset & 0x20)!=0) { key |= input_port_read(space->machine(),"LINE5"); }
32      if ((offset & 0x40)!=0) { key |= input_port_read(space->machine(),"LINE6"); }
33      if ((offset & 0x80)!=0) { key |= input_port_read(space->machine(),"LINE7"); }
26      if ((offset & 0x01)!=0) { key |= input_port_read(machine(),"LINE0"); }
27      if ((offset & 0x02)!=0) { key |= input_port_read(machine(),"LINE1"); }
28      if ((offset & 0x04)!=0) { key |= input_port_read(machine(),"LINE2"); }
29      if ((offset & 0x08)!=0) { key |= input_port_read(machine(),"LINE3"); }
30      if ((offset & 0x10)!=0) { key |= input_port_read(machine(),"LINE4"); }
31      if ((offset & 0x20)!=0) { key |= input_port_read(machine(),"LINE5"); }
32      if ((offset & 0x40)!=0) { key |= input_port_read(machine(),"LINE6"); }
33      if ((offset & 0x80)!=0) { key |= input_port_read(machine(),"LINE7"); }
3434   } else {
35      if ((offset & 0x01)!=0) { key |= input_port_read(space->machine(),"LINE8"); }
36      if ((offset & 0x02)!=0) { key |= input_port_read(space->machine(),"LINE9"); }
37      if ((offset & 0x04)!=0) { key |= input_port_read(space->machine(),"LINE10"); }
35      if ((offset & 0x01)!=0) { key |= input_port_read(machine(),"LINE8"); }
36      if ((offset & 0x02)!=0) { key |= input_port_read(machine(),"LINE9"); }
37      if ((offset & 0x04)!=0) { key |= input_port_read(machine(),"LINE10"); }
3838   }
3939   return key;
4040}
r14963r14964
4343static void b2m_set_bank(running_machine &machine,int bank)
4444{
4545   UINT8 *rom;
46   b2m_state *state =  machine.driver_data<b2m_state>();
4647   address_space *space = machine.device("maincpu")->memory().space(AS_PROGRAM);
4748   UINT8 *ram = machine.device<ram_device>(RAM_TAG)->pointer();
4849
r14963r14964
8182                  space->unmap_write(0xe000, 0xffff);
8283
8384                  memory_set_bankptr(machine, "bank1", ram);
84                  space->install_legacy_read_handler(0x2800, 0x2fff, FUNC(b2m_keyboard_r));
85                  space->install_read_handler(0x2800, 0x2fff, read8_delegate(FUNC(b2m_state::b2m_keyboard_r),state));
8586                  memory_set_bankptr(machine, "bank3", ram + 0x10000);
8687                  memory_set_bankptr(machine, "bank4", ram + 0x7000);
8788                  memory_set_bankptr(machine, "bank5", rom + 0x10000);
r14963r14964
9192                  space->unmap_write(0xe000, 0xffff);
9293
9394                  memory_set_bankptr(machine, "bank1", ram);
94                  space->install_legacy_read_handler(0x2800, 0x2fff, FUNC(b2m_keyboard_r));
95                  space->install_read_handler(0x2800, 0x2fff, read8_delegate(FUNC(b2m_state::b2m_keyboard_r),state));
9596                  memory_set_bankptr(machine, "bank3", ram + 0x14000);
9697                  memory_set_bankptr(machine, "bank4", ram + 0x7000);
9798                  memory_set_bankptr(machine, "bank5", rom + 0x10000);
r14963r14964
101102                  space->unmap_write(0xe000, 0xffff);
102103
103104                  memory_set_bankptr(machine, "bank1", ram);
104                  space->install_legacy_read_handler(0x2800, 0x2fff, FUNC(b2m_keyboard_r));
105                  space->install_read_handler(0x2800, 0x2fff, read8_delegate(FUNC(b2m_state::b2m_keyboard_r),state));
105106                  memory_set_bankptr(machine, "bank3", ram + 0x18000);
106107                  memory_set_bankptr(machine, "bank4", ram + 0x7000);
107108                  memory_set_bankptr(machine, "bank5", rom + 0x10000);
r14963r14964
112113                  space->unmap_write(0xe000, 0xffff);
113114
114115                  memory_set_bankptr(machine, "bank1", ram);
115                  space->install_legacy_read_handler(0x2800, 0x2fff, FUNC(b2m_keyboard_r));
116                  space->install_read_handler(0x2800, 0x2fff, read8_delegate(FUNC(b2m_state::b2m_keyboard_r),state));
116117                  memory_set_bankptr(machine, "bank3", ram + 0x1c000);
117118                  memory_set_bankptr(machine, "bank4", ram + 0x7000);
118119                  memory_set_bankptr(machine, "bank5", rom + 0x10000);
r14963r14964
282283   state->m_vblank_state = 0;
283284}
284285
285WRITE8_HANDLER ( b2m_palette_w )
286WRITE8_MEMBER(b2m_state::b2m_palette_w)
286287{
287   b2m_state *state = space->machine().driver_data<b2m_state>();
288288
289289   UINT8 b = (3 - ((data >> 6) & 3)) * 0x55;
290290   UINT8 g = (3 - ((data >> 4) & 3)) * 0x55;
r14963r14964
292292
293293   UINT8 bw = (3 - (data & 3)) * 0x55;
294294
295   state->m_b2m_color[offset & 3] = data;
295   m_b2m_color[offset & 3] = data;
296296
297   if (input_port_read(space->machine(),"MONITOR")==1) {
298      palette_set_color_rgb(space->machine(),offset, r, g, b);
297   if (input_port_read(machine(),"MONITOR")==1) {
298      palette_set_color_rgb(machine(),offset, r, g, b);
299299   } else {
300      palette_set_color_rgb(space->machine(),offset, bw, bw, bw);
300      palette_set_color_rgb(machine(),offset, bw, bw, bw);
301301   }
302302}
303303
304READ8_HANDLER ( b2m_palette_r )
304READ8_MEMBER(b2m_state::b2m_palette_r)
305305{
306   b2m_state *state = space->machine().driver_data<b2m_state>();
307   return state->m_b2m_color[offset];
306   return m_b2m_color[offset];
308307}
309308
310WRITE8_HANDLER ( b2m_localmachine_w )
309WRITE8_MEMBER(b2m_state::b2m_localmachine_w)
311310{
312   b2m_state *state = space->machine().driver_data<b2m_state>();
313   state->m_b2m_localmachine = data;
311   m_b2m_localmachine = data;
314312}
315313
316READ8_HANDLER ( b2m_localmachine_r )
314READ8_MEMBER(b2m_state::b2m_localmachine_r)
317315{
318   b2m_state *state = space->machine().driver_data<b2m_state>();
319   return state->m_b2m_localmachine;
316   return m_b2m_localmachine;
320317}
321318
322319static void b2m_postload(b2m_state *state)
src/mess/machine/oric.c
r14963r14964
140140
141141
142142/* this is executed when a write to psg port a is done */
143WRITE8_HANDLER (oric_psg_porta_write)
143WRITE8_MEMBER(oric_state::oric_psg_porta_write)
144144{
145   oric_state *state = space->machine().driver_data<oric_state>();
146   state->m_keyboard_mask = data;
145   m_keyboard_mask = data;
147146}
148147
149148
r14963r14964
473472   if (state->m_is_telestrat)
474473      return;
475474
476   space->install_legacy_read_handler(0x0300, 0x030f, FUNC(oric_IO_r));
475   space->install_read_handler(0x0300, 0x030f, read8_delegate(FUNC(oric_state::oric_IO_r),state));
477476   space->install_legacy_read_handler(*fdc, 0x0310, 0x031f, FUNC(applefdc_r));
478477   space->install_read_bank(0x0320, 0x03ff, "bank4");
479478
480   space->install_legacy_write_handler(0x0300, 0x030f, FUNC(oric_IO_w));
479   space->install_write_handler(0x0300, 0x030f, write8_delegate(FUNC(oric_state::oric_IO_w),state));
481480   space->install_legacy_write_handler(*fdc, 0x0310, 0x031f, FUNC(applefdc_w));
482481   memory_set_bankptr(machine, "bank4",   machine.region("maincpu")->base() + 0x014000 + 0x020);
483482}
r14963r14964
543542CALL &320 to start, or use BOBY rom.
544543*/
545544
546static WRITE8_HANDLER(apple2_v2_interface_w)
545WRITE8_MEMBER(oric_state::apple2_v2_interface_w)
547546{
548   oric_state *state = space->machine().driver_data<oric_state>();
549547   /* data is ignored, address is used to decode operation */
550   if (state->m_is_telestrat)
548   if (m_is_telestrat)
551549      return;
552550
553551/*  logerror("apple 2 interface v2 rom page: %01x\n",(offset & 0x02)>>1); */
554552
555553   /* bit 0 is 0 for page 0, 1 for page 1 */
556   memory_set_bankptr(space->machine(), "bank4", space->machine().region("maincpu")->base() + 0x014000 + 0x0100 + (((offset & 0x02)>>1)<<8));
554   memory_set_bankptr(machine(), "bank4", machine().region("maincpu")->base() + 0x014000 + 0x0100 + (((offset & 0x02)>>1)<<8));
557555
558   oric_enable_memory(space->machine(), 1, 3, TRUE, TRUE);
556   oric_enable_memory(machine(), 1, 3, TRUE, TRUE);
559557
560558   /* bit 1 is 0, rom enabled, bit 1 is 1 ram enabled */
561559   if ((offset & 0x01)==0)
r14963r14964
565563      /* logerror("apple 2 interface v2: rom enabled\n"); */
566564
567565      /* enable rom */
568      rom_ptr = space->machine().region("maincpu")->base() + 0x010000;
569      memory_set_bankptr(space->machine(), "bank1", rom_ptr);
570      memory_set_bankptr(space->machine(), "bank2", rom_ptr+0x02000);
571      memory_set_bankptr(space->machine(), "bank3", rom_ptr+0x03800);
572      memory_set_bankptr(space->machine(), "bank5", state->m_ram_0x0c000);
573      memory_set_bankptr(space->machine(), "bank6", state->m_ram_0x0c000+0x02000);
574      memory_set_bankptr(space->machine(), "bank7", state->m_ram_0x0c000+0x03800);
566      rom_ptr = machine().region("maincpu")->base() + 0x010000;
567      memory_set_bankptr(machine(), "bank1", rom_ptr);
568      memory_set_bankptr(machine(), "bank2", rom_ptr+0x02000);
569      memory_set_bankptr(machine(), "bank3", rom_ptr+0x03800);
570      memory_set_bankptr(machine(), "bank5", m_ram_0x0c000);
571      memory_set_bankptr(machine(), "bank6", m_ram_0x0c000+0x02000);
572      memory_set_bankptr(machine(), "bank7", m_ram_0x0c000+0x03800);
575573   }
576574   else
577575   {
578576      /*logerror("apple 2 interface v2: ram enabled\n"); */
579577
580578      /* enable ram */
581      memory_set_bankptr(space->machine(), "bank1", state->m_ram_0x0c000);
582      memory_set_bankptr(space->machine(), "bank2", state->m_ram_0x0c000+0x02000);
583      memory_set_bankptr(space->machine(), "bank3", state->m_ram_0x0c000+0x03800);
584      memory_set_bankptr(space->machine(), "bank5", state->m_ram_0x0c000);
585      memory_set_bankptr(space->machine(), "bank6", state->m_ram_0x0c000+0x02000);
586      memory_set_bankptr(space->machine(), "bank7", state->m_ram_0x0c000+0x03800);
579      memory_set_bankptr(machine(), "bank1", m_ram_0x0c000);
580      memory_set_bankptr(machine(), "bank2", m_ram_0x0c000+0x02000);
581      memory_set_bankptr(machine(), "bank3", m_ram_0x0c000+0x03800);
582      memory_set_bankptr(machine(), "bank5", m_ram_0x0c000);
583      memory_set_bankptr(machine(), "bank6", m_ram_0x0c000+0x02000);
584      memory_set_bankptr(machine(), "bank7", m_ram_0x0c000+0x03800);
587585   }
588586}
589587
r14963r14964
591589/* APPLE 2 INTERFACE V2 */
592590static void oric_install_apple2_v2_interface(running_machine &machine)
593591{
592   oric_state *state = machine.driver_data<oric_state>();
594593   device_t *fdc = machine.device("fdc");
595594   address_space *space = machine.device("maincpu")->memory().space(AS_PROGRAM);
596595
597   space->install_legacy_read_handler(0x0300, 0x030f, FUNC(oric_IO_r));
596   space->install_read_handler(0x0300, 0x030f, read8_delegate(FUNC(oric_state::oric_IO_r),state));
598597   space->install_legacy_read_handler(*fdc, 0x0310, 0x031f, FUNC(applefdc_r));
599598   space->install_read_bank(0x0320, 0x03ff, "bank4");
600599
601   space->install_legacy_write_handler(0x0300, 0x030f, FUNC(oric_IO_w));
600   space->install_write_handler(0x0300, 0x030f, write8_delegate(FUNC(oric_state::oric_IO_w),state));
602601   space->install_legacy_write_handler(*fdc, 0x0310, 0x031f, FUNC(applefdc_w));
603   space->install_legacy_write_handler(0x0380, 0x0383, FUNC(apple2_v2_interface_w));
602   space->install_write_handler(0x0380, 0x0383, write8_delegate(FUNC(oric_state::apple2_v2_interface_w),state));
604603
605   apple2_v2_interface_w(space, 0, 0);
604   state->apple2_v2_interface_w(*space, 0, 0);
606605}
607606
608607/********************/
r14963r14964
710709   oric_refresh_ints(device->machine());
711710}
712711
713static READ8_HANDLER (oric_jasmin_r)
712READ8_MEMBER(oric_state::oric_jasmin_r)
714713{
715   via6522_device *via_0 = space->machine().device<via6522_device>("via6522_0");
716   device_t *fdc = space->machine().device("wd179x");
714   via6522_device *via_0 = machine().device<via6522_device>("via6522_0");
715   device_t *fdc = machine().device("wd179x");
717716   unsigned char data = 0x0ff;
718717
719718   switch (offset & 0x0f)
r14963r14964
732731         data = wd17xx_data_r(fdc, 0);
733732         break;
734733      default:
735         data = via_0->read(*space,offset & 0x0f);
734         data = via_0->read(space,offset & 0x0f);
736735         //logerror("unhandled io read: %04x %02x\n", offset, data);
737736         break;
738737
r14963r14964
741740   return data;
742741}
743742
744static WRITE8_HANDLER(oric_jasmin_w)
743WRITE8_MEMBER(oric_state::oric_jasmin_w)
745744{
746   oric_state *state = space->machine().driver_data<oric_state>();
747   via6522_device *via_0 = space->machine().device<via6522_device>("via6522_0");
748   device_t *fdc = space->machine().device("wd179x");
745   via6522_device *via_0 = machine().device<via6522_device>("via6522_0");
746   device_t *fdc = machine().device("wd179x");
749747   switch (offset & 0x0f)
750748   {
751749      /* microdisc floppy disc interface */
r14963r14964
770768         wd17xx_reset(fdc);
771769         break;
772770      case 0x0a:
773         //logerror("jasmin overlay ram w: %02x PC: %04x\n", data, cpu_get_pc(space->machine().device("maincpu")));
774         state->m_port_3fa_w = data;
775         oric_jasmin_set_mem_0x0c000(space->machine());
771         //logerror("jasmin overlay ram w: %02x PC: %04x\n", data, cpu_get_pc(machine().device("maincpu")));
772         m_port_3fa_w = data;
773         oric_jasmin_set_mem_0x0c000(machine());
776774         break;
777775      case 0x0b:
778         //logerror("jasmin romdis w: %02x PC: %04x\n", data, cpu_get_pc(space->machine().device("maincpu")));
779         state->m_port_3fb_w = data;
780         oric_jasmin_set_mem_0x0c000(space->machine());
776         //logerror("jasmin romdis w: %02x PC: %04x\n", data, cpu_get_pc(machine().device("maincpu")));
777         m_port_3fb_w = data;
778         oric_jasmin_set_mem_0x0c000(machine());
781779         break;
782780      /* bit 0,1 of addr is the drive */
783781      case 0x0c:
r14963r14964
788786         break;
789787
790788      default:
791         via_0->write(*space,offset & 0x0f, data);
789         via_0->write(space,offset & 0x0f, data);
792790         break;
793791   }
794792}
r14963r14964
802800   state->m_port_3fb_w = 1;
803801   oric_jasmin_set_mem_0x0c000(machine);
804802
805   space->install_legacy_read_handler(0x0300, 0x03ef, FUNC(oric_IO_r));
806   space->install_legacy_read_handler(0x03f0, 0x03ff, FUNC(oric_jasmin_r));
803   space->install_read_handler(0x0300, 0x03ef, read8_delegate(FUNC(oric_state::oric_IO_r),state));
804   space->install_read_handler(0x03f0, 0x03ff, read8_delegate(FUNC(oric_state::oric_jasmin_r),state));
807805
808   space->install_legacy_write_handler(0x0300, 0x03ef, FUNC(oric_IO_w));
809   space->install_legacy_write_handler(0x03f0, 0x03ff, FUNC(oric_jasmin_w));
806   space->install_write_handler(0x0300, 0x03ef, write8_delegate(FUNC(oric_state::oric_IO_w),state));
807   space->install_write_handler(0x03f0, 0x03ff, write8_delegate(FUNC(oric_state::oric_jasmin_w),state));
810808}
811809
812810/*********************************/
r14963r14964
930928
931929
932930
933READ8_HANDLER (oric_microdisc_r)
931READ8_MEMBER(oric_state::oric_microdisc_r)
934932{
935   oric_state *state = space->machine().driver_data<oric_state>();
936933   unsigned char data = 0x0ff;
937   device_t *fdc = space->machine().device("wd179x");
934   device_t *fdc = machine().device("wd179x");
938935
939936   switch (offset & 0x0ff)
940937   {
r14963r14964
952949         data = wd17xx_data_r(fdc, 0);
953950         break;
954951      case 0x04:
955         data = state->m_port_314_r | 0x07f;
952         data = m_port_314_r | 0x07f;
956953/*          logerror("port_314_r: %02x\n",data); */
957954         break;
958955      case 0x08:
959         data = state->m_port_318_r | 0x07f;
956         data = m_port_318_r | 0x07f;
960957/*          logerror("port_318_r: %02x\n",data); */
961958         break;
962959
963960      default:
964961         {
965            via6522_device *via_0 = space->machine().device<via6522_device>("via6522_0");
966            data = via_0->read(*space, offset & 0x0f);
962            via6522_device *via_0 = machine().device<via6522_device>("via6522_0");
963            data = via_0->read(space, offset & 0x0f);
967964         }
968965         break;
969966
r14963r14964
972969   return data;
973970}
974971
975WRITE8_HANDLER(oric_microdisc_w)
972WRITE8_MEMBER(oric_state::oric_microdisc_w)
976973{
977   oric_state *state = space->machine().driver_data<oric_state>();
978   device_t *fdc = space->machine().device("wd179x");
974   device_t *fdc = machine().device("wd179x");
979975   switch (offset & 0x0ff)
980976   {
981977      /* microdisc floppy disc interface */
r14963r14964
993989         break;
994990      case 0x04:
995991      {
996         state->m_port_314_w = data;
992         m_port_314_w = data;
997993
998994         //logerror("port_314_w: %02x\n",data);
999995
r14963r14964
10051001         wd17xx_set_side(fdc,(data>>4) & 0x01);
10061002         wd17xx_dden_w(fdc, !BIT(data, 3));
10071003
1008         oric_microdisc_set_mem_0x0c000(space->machine());
1009         oric_microdisc_refresh_wd179x_ints(space->machine());
1004         oric_microdisc_set_mem_0x0c000(machine());
1005         oric_microdisc_refresh_wd179x_ints(machine());
10101006      }
10111007      break;
10121008
10131009      default:
10141010         {
1015            via6522_device *via_0 = space->machine().device<via6522_device>("via6522_0");
1016            via_0->write(*space, offset & 0x0f, data);
1011            via6522_device *via_0 = machine().device<via6522_device>("via6522_0");
1012            via_0->write(space, offset & 0x0f, data);
10171013         }
10181014         break;
10191015   }
r14963r14964
10241020   oric_state *state = machine.driver_data<oric_state>();
10251021   address_space *space = machine.device("maincpu")->memory().space(AS_PROGRAM);
10261022
1027   space->install_legacy_read_handler(0x0300, 0x030f, FUNC(oric_IO_r));
1028   space->install_legacy_read_handler(0x0310, 0x031f, FUNC(oric_microdisc_r));
1029   space->install_legacy_read_handler(0x0320, 0x03ff, FUNC(oric_IO_r));
1023   space->install_read_handler(0x0300, 0x030f, read8_delegate(FUNC(oric_state::oric_IO_r),state));
1024   space->install_read_handler(0x0310, 0x031f, read8_delegate(FUNC(oric_state::oric_microdisc_r),state));
1025   space->install_read_handler(0x0320, 0x03ff, read8_delegate(FUNC(oric_state::oric_IO_r),state));
10301026
1031   space->install_legacy_write_handler(0x0300, 0x030f, FUNC(oric_IO_w));
1032   space->install_legacy_write_handler(0x0310, 0x031f, FUNC(oric_microdisc_w));
1033   space->install_legacy_write_handler(0x0320, 0x03ff, FUNC(oric_IO_w));
1027   space->install_write_handler(0x0300, 0x030f, write8_delegate(FUNC(oric_state::oric_IO_w),state));
1028   space->install_write_handler(0x0310, 0x031f, write8_delegate(FUNC(oric_state::oric_microdisc_w),state));
1029   space->install_write_handler(0x0320, 0x03ff, write8_delegate(FUNC(oric_state::oric_IO_w),state));
10341030
10351031   /* disable os rom, enable microdisc rom */
10361032   /* 0x0c000-0x0dfff will be ram, 0x0e000-0x0ffff will be microdisc rom */
r14963r14964
11301126         }
11311127         else
11321128         {
1133            space->install_legacy_read_handler(0x0300, 0x03ff, FUNC(oric_IO_r));
1134            space->install_legacy_write_handler(0x0300, 0x03ff, FUNC(oric_IO_w));
1129            space->install_read_handler(0x0300, 0x03ff, read8_delegate(FUNC(oric_state::oric_IO_r),state));
1130            space->install_write_handler(0x0300, 0x03ff, write8_delegate(FUNC(oric_state::oric_IO_w),state));
11351131         }
11361132      }
11371133      break;
r14963r14964
11591155}
11601156
11611157
1162READ8_HANDLER ( oric_IO_r )
1158READ8_MEMBER(oric_state::oric_IO_r)
11631159{
1164   via6522_device *via_0 = space->machine().device<via6522_device>("via6522_0");
1165   switch (input_port_read(space->machine(), "FLOPPY") & 0x07)
1160   via6522_device *via_0 = machine().device<via6522_device>("via6522_0");
1161   switch (input_port_read(machine(), "FLOPPY") & 0x07)
11661162   {
11671163      default:
11681164      case ORIC_FLOPPY_INTERFACE_NONE:
r14963r14964
11901186   {
11911187      if ((offset & 0x0f)!=0x0d)
11921188      {
1193         //logerror("via 0 r: %04x %04x\n",offset, (unsigned) cpu_get_reg(space->machine().device("maincpu"), STATE_GENPC));
1189         //logerror("via 0 r: %04x %04x\n",offset, (unsigned) cpu_get_reg(machine().device("maincpu"), STATE_GENPC));
11941190      }
11951191   }
11961192   /* it is repeated */
1197   return via_0->read(*space, offset & 0x0f);
1193   return via_0->read(space, offset & 0x0f);
11981194}
11991195
1200WRITE8_HANDLER ( oric_IO_w )
1196WRITE8_MEMBER(oric_state::oric_IO_w)
12011197{
1202   via6522_device *via_0 = space->machine().device<via6522_device>("via6522_0");
1203   switch (input_port_read(space->machine(), "FLOPPY") & 0x07)
1198   via6522_device *via_0 = machine().device<via6522_device>("via6522_0");
1199   switch (input_port_read(machine(), "FLOPPY") & 0x07)
12041200   {
12051201      default:
12061202      case ORIC_FLOPPY_INTERFACE_NONE:
r14963r14964
12291225   }
12301226   if (enable_logging)
12311227   {
1232      //logerror("via 0 w: %04x %02x %04x\n", offset, data,(unsigned) cpu_get_reg(space->machine().device("maincpu"), STATE_GENPC));
1228      //logerror("via 0 w: %04x %02x %04x\n", offset, data,(unsigned) cpu_get_reg(machine().device("maincpu"), STATE_GENPC));
12331229   }
12341230
1235   via_0->write(*space, offset & 0x0f, data);
1231   via_0->write(space, offset & 0x0f, data);
12361232}
12371233
12381234
src/mess/machine/orao.c
r14963r14964
3030{
3131}
3232
33READ8_HANDLER( orao_io_r )
33READ8_MEMBER(orao_state::orao_io_r)
3434{
3535   double level;
3636
3737    switch(offset) {
3838      /* Keyboard*/
39      case 0x07FC : return input_port_read(space->machine(), "LINE0");
40      case 0x07FD : return input_port_read(space->machine(), "LINE1");
41      case 0x07FA : return input_port_read(space->machine(), "LINE2");
42      case 0x07FB : return input_port_read(space->machine(), "LINE3");
43      case 0x07F6 : return input_port_read(space->machine(), "LINE4");
44      case 0x07F7 : return input_port_read(space->machine(), "LINE5");
45      case 0x07EE : return input_port_read(space->machine(), "LINE6");
46      case 0x07EF : return input_port_read(space->machine(), "LINE7");
47      case 0x07DE : return input_port_read(space->machine(), "LINE8");
48      case 0x07DF : return input_port_read(space->machine(), "LINE9");
49      case 0x07BE : return input_port_read(space->machine(), "LINE10");
50      case 0x07BF : return input_port_read(space->machine(), "LINE11");
51      case 0x077E : return input_port_read(space->machine(), "LINE12");
52      case 0x077F : return input_port_read(space->machine(), "LINE13");
53      case 0x06FE : return input_port_read(space->machine(), "LINE14");
54      case 0x06FF : return input_port_read(space->machine(), "LINE15");
55      case 0x05FE : return input_port_read(space->machine(), "LINE16");
56      case 0x05FF : return input_port_read(space->machine(), "LINE17");
57      case 0x03FE : return input_port_read(space->machine(), "LINE18");
58      case 0x03FF : return input_port_read(space->machine(), "LINE19");
39      case 0x07FC : return input_port_read(machine(), "LINE0");
40      case 0x07FD : return input_port_read(machine(), "LINE1");
41      case 0x07FA : return input_port_read(machine(), "LINE2");
42      case 0x07FB : return input_port_read(machine(), "LINE3");
43      case 0x07F6 : return input_port_read(machine(), "LINE4");
44      case 0x07F7 : return input_port_read(machine(), "LINE5");
45      case 0x07EE : return input_port_read(machine(), "LINE6");
46      case 0x07EF : return input_port_read(machine(), "LINE7");
47      case 0x07DE : return input_port_read(machine(), "LINE8");
48      case 0x07DF : return input_port_read(machine(), "LINE9");
49      case 0x07BE : return input_port_read(machine(), "LINE10");
50      case 0x07BF : return input_port_read(machine(), "LINE11");
51      case 0x077E : return input_port_read(machine(), "LINE12");
52      case 0x077F : return input_port_read(machine(), "LINE13");
53      case 0x06FE : return input_port_read(machine(), "LINE14");
54      case 0x06FF : return input_port_read(machine(), "LINE15");
55      case 0x05FE : return input_port_read(machine(), "LINE16");
56      case 0x05FF : return input_port_read(machine(), "LINE17");
57      case 0x03FE : return input_port_read(machine(), "LINE18");
58      case 0x03FF : return input_port_read(machine(), "LINE19");
5959      /* Tape */
6060      case 0x07FF :
61               level = (space->machine().device<cassette_image_device>(CASSETTE_TAG)->input());
61               level = (machine().device<cassette_image_device>(CASSETTE_TAG)->input());
6262               if (level <  0) {
6363                  return 0x00;
6464               }
r14963r14964
7070}
7171
7272
73WRITE8_HANDLER( orao_io_w )
73WRITE8_MEMBER(orao_state::orao_io_w)
7474{
7575   if (offset == 0x0800)
7676   {
77      device_t *dac_device = space->machine().device("dac");
77      device_t *dac_device = machine().device("dac");
7878      dac_data_w(dac_device, data); //beeper
7979   }
8080}
src/mess/machine/bk.c
r14963r14964
8787   state->m_scrool = 01330;
8888}
8989
90READ16_HANDLER (bk_key_state_r)
90READ16_MEMBER(bk_state::bk_key_state_r)
9191{
92   bk_state *state = space->machine().driver_data<bk_state>();
93   return state->m_kbd_state;
92   return m_kbd_state;
9493}
95READ16_HANDLER (bk_key_code_r)
94READ16_MEMBER(bk_state::bk_key_code_r)
9695{
97   bk_state *state = space->machine().driver_data<bk_state>();
98   state->m_kbd_state &= ~0x80; // mark reading done
99   state->m_key_pressed = 0;
100   return state->m_key_code;
96   m_kbd_state &= ~0x80; // mark reading done
97   m_key_pressed = 0;
98   return m_key_code;
10199}
102READ16_HANDLER (bk_vid_scrool_r)
100READ16_MEMBER(bk_state::bk_vid_scrool_r)
103101{
104   bk_state *state = space->machine().driver_data<bk_state>();
105   return state->m_scrool;
102   return m_scrool;
106103}
107104
108READ16_HANDLER (bk_key_press_r)
105READ16_MEMBER(bk_state::bk_key_press_r)
109106{
110   bk_state *state = space->machine().driver_data<bk_state>();
111   double level = (space->machine().device<cassette_image_device>(CASSETTE_TAG)->input());
107   double level = (machine().device<cassette_image_device>(CASSETTE_TAG)->input());
112108   UINT16 cas;
113109   if (level < 0)
114110   {
r14963r14964
119115      cas = 0x20;
120116   }
121117
122   return 0x8080 | state->m_key_pressed | cas;
118   return 0x8080 | m_key_pressed | cas;
123119}
124120
125WRITE16_HANDLER(bk_key_state_w)
121WRITE16_MEMBER(bk_state::bk_key_state_w)
126122{
127   bk_state *state = space->machine().driver_data<bk_state>();
128   state->m_kbd_state = (state->m_kbd_state & ~0x40) | (data & 0x40);
123   m_kbd_state = (m_kbd_state & ~0x40) | (data & 0x40);
129124}
130125
131WRITE16_HANDLER(bk_vid_scrool_w)
126WRITE16_MEMBER(bk_state::bk_vid_scrool_w)
132127{
133   bk_state *state = space->machine().driver_data<bk_state>();
134   state->m_scrool = data;
128   m_scrool = data;
135129}
136130
137WRITE16_HANDLER(bk_key_press_w)
131WRITE16_MEMBER(bk_state::bk_key_press_w)
138132{
139133}
140134
141READ16_HANDLER (bk_floppy_cmd_r)
135READ16_MEMBER(bk_state::bk_floppy_cmd_r)
142136{
143137   return 0;
144138}
145139
146WRITE16_HANDLER(bk_floppy_cmd_w)
140WRITE16_MEMBER(bk_state::bk_floppy_cmd_w)
147141{
148   bk_state *state = space->machine().driver_data<bk_state>();
149142   if ((data & 1) == 1)
150143   {
151      state->m_drive = 0;
144      m_drive = 0;
152145   }
153146   if ((data & 2) == 2)
154147   {
155      state->m_drive = 1;
148      m_drive = 1;
156149   }
157150   if ((data & 4) == 4)
158151   {
159      state->m_drive = 2;
152      m_drive = 2;
160153   }
161154   if ((data & 8) == 8)
162155   {
163      state->m_drive = 3;
156      m_drive = 3;
164157   }
165158   if (data == 0)
166159   {
167      state->m_drive = -1;
160      m_drive = -1;
168161   }
169162}
170163
171READ16_HANDLER (bk_floppy_data_r)
164READ16_MEMBER(bk_state::bk_floppy_data_r)
172165{
173166   return 0;
174167}
175168
176WRITE16_HANDLER(bk_floppy_data_w)
169WRITE16_MEMBER(bk_state::bk_floppy_data_w)
177170{
178171}
179172
src/mess/machine/sapi1.c
r14963r14964
2727{
2828}
2929
30READ8_HANDLER (sapi1_keyboard_r )
30READ8_MEMBER(sapi1_state::sapi1_keyboard_r)
3131{
32   sapi1_state *state = space->machine().driver_data<sapi1_state>();
3332   UINT8 key = 0xff;
34   if ((state->m_keyboard_mask & 0x01)!=0) { key &= input_port_read(space->machine(),"LINE0"); }
35   if ((state->m_keyboard_mask & 0x02)!=0) { key &= input_port_read(space->machine(),"LINE1"); }
36   if ((state->m_keyboard_mask & 0x04)!=0) { key &= input_port_read(space->machine(),"LINE2"); }
37   if ((state->m_keyboard_mask & 0x08)!=0) { key &= input_port_read(space->machine(),"LINE3"); }
38   if ((state->m_keyboard_mask & 0x10)!=0) { key &= input_port_read(space->machine(),"LINE4"); }
33   if ((m_keyboard_mask & 0x01)!=0) { key &= input_port_read(machine(),"LINE0"); }
34   if ((m_keyboard_mask & 0x02)!=0) { key &= input_port_read(machine(),"LINE1"); }
35   if ((m_keyboard_mask & 0x04)!=0) { key &= input_port_read(machine(),"LINE2"); }
36   if ((m_keyboard_mask & 0x08)!=0) { key &= input_port_read(machine(),"LINE3"); }
37   if ((m_keyboard_mask & 0x10)!=0) { key &= input_port_read(machine(),"LINE4"); }
3938   return key;
4039}
41WRITE8_HANDLER(sapi1_keyboard_w )
40WRITE8_MEMBER(sapi1_state::sapi1_keyboard_w)
4241{
43   sapi1_state *state = space->machine().driver_data<sapi1_state>();
44   state->m_keyboard_mask = (data ^ 0xff ) & 0x1f;
42   m_keyboard_mask = (data ^ 0xff ) & 0x1f;
4543}
4644
4745
src/mess/machine/amstrad.c
r14963r14964
11911191
11921192      if ( state->m_asic.enabled && ( state->m_asic.rmr2 & 0x18 ) == 0x18 )
11931193      {
1194         space->install_legacy_read_handler(0x4000, 0x5fff, FUNC(amstrad_plus_asic_4000_r));
1195         space->install_legacy_read_handler(0x6000, 0x7fff, FUNC(amstrad_plus_asic_6000_r));
1196         space->install_legacy_write_handler(0x4000, 0x5fff, FUNC(amstrad_plus_asic_4000_w));
1197         space->install_legacy_write_handler(0x6000, 0x7fff, FUNC(amstrad_plus_asic_6000_w));
1194         space->install_read_handler(0x4000, 0x5fff, read8_delegate(FUNC(amstrad_state::amstrad_plus_asic_4000_r),state));
1195         space->install_read_handler(0x6000, 0x7fff, read8_delegate(FUNC(amstrad_state::amstrad_plus_asic_6000_r),state));
1196         space->install_write_handler(0x4000, 0x5fff, write8_delegate(FUNC(amstrad_state::amstrad_plus_asic_4000_w),state));
1197         space->install_write_handler(0x6000, 0x7fff, write8_delegate(FUNC(amstrad_state::amstrad_plus_asic_6000_w),state));
11981198      }
11991199      else
12001200      {
r14963r14964
13941394
13951395 */
13961396
1397WRITE8_HANDLER( amstrad_plus_asic_4000_w )
1397WRITE8_MEMBER(amstrad_state::amstrad_plus_asic_4000_w)
13981398{
1399   amstrad_state *state = space->machine().driver_data<amstrad_state>();
14001399//  logerror("ASIC: Write to register at &%04x\n",offset+0x4000);
1401   state->m_asic.ram[offset] = data & 0x0f;
1400   m_asic.ram[offset] = data & 0x0f;
14021401}
14031402
14041403
1405WRITE8_HANDLER( amstrad_plus_asic_6000_w )
1404WRITE8_MEMBER(amstrad_state::amstrad_plus_asic_6000_w)
14061405{
1407   amstrad_state *state = space->machine().driver_data<amstrad_state>();
1408   state->m_asic.ram[offset+0x2000] = data;
1406   m_asic.ram[offset+0x2000] = data;
14091407   if(offset >= 0x0400 && offset < 0x440 && ( offset & 0x01 ) ) // ASIC palette
14101408   {
1411      state->m_asic.ram[ offset + 0x2000 ] = data & 0x0f;
1409      m_asic.ram[ offset + 0x2000 ] = data & 0x0f;
14121410   }
14131411   if(offset == 0x0800)  // Programmable raster interrupt
14141412   {
14151413//      logerror("ASIC: Wrote %02x to PRI\n",data);
1416      state->m_asic.pri = data;
1414      m_asic.pri = data;
14171415   }
14181416   if(offset >= 0x0801 && offset <= 0x0803)  // Split screen registers
14191417   {
1420      logerror("ASIC: Split screen at line %i, address &%04x\n",state->m_asic.ram[0x2801],state->m_asic.ram[0x2803] + (state->m_asic.ram[0x2802] << 8));
1418      logerror("ASIC: Split screen at line %i, address &%04x\n",m_asic.ram[0x2801],m_asic.ram[0x2803] + (m_asic.ram[0x2802] << 8));
14211419   }
14221420   if(offset == 0x0804)  // Soft scroll register
14231421   {
r14963r14964
14271425      // high 5 bits go to interrupt vector
14281426      int vector;
14291427
1430      if ( state->m_asic.enabled )
1428      if ( m_asic.enabled )
14311429      {
1432         vector = (data & 0xf8) + (state->m_plus_irq_cause);
1433         device_set_input_line_vector(space->machine().device("maincpu"), 0, vector);
1430         vector = (data & 0xf8) + (m_plus_irq_cause);
1431         device_set_input_line_vector(machine().device("maincpu"), 0, vector);
14341432         logerror("ASIC: IM 2 vector write %02x, data = &%02x\n",vector,data);
14351433      }
1436      state->m_asic.dma_clear = data & 0x01;
1434      m_asic.dma_clear = data & 0x01;
14371435   }
14381436   // DMA channels
14391437   switch(offset)
14401438   {
14411439   case 0x0c00:
14421440   case 0x0c01:
1443      state->m_asic.dma_addr[0] = (state->m_asic.ram[0x2c01] << 8) + state->m_asic.ram[0x2c00];
1444      state->m_asic.dma_status &= ~0x01;
1445      logerror("ASIC: DMA 0 address set to &%04x\n",state->m_asic.dma_addr[0]);
1441      m_asic.dma_addr[0] = (m_asic.ram[0x2c01] << 8) + m_asic.ram[0x2c00];
1442      m_asic.dma_status &= ~0x01;
1443      logerror("ASIC: DMA 0 address set to &%04x\n",m_asic.dma_addr[0]);
14461444      break;
14471445   case 0x0c04:
14481446   case 0x0c05:
1449      state->m_asic.dma_addr[1] = (state->m_asic.ram[0x2c05] << 8) + state->m_asic.ram[0x2c04];
1450      state->m_asic.dma_status &= ~0x02;
1451      logerror("ASIC: DMA 1 address set to &%04x\n",state->m_asic.dma_addr[1]);
1447      m_asic.dma_addr[1] = (m_asic.ram[0x2c05] << 8) + m_asic.ram[0x2c04];
1448      m_asic.dma_status &= ~0x02;
1449      logerror("ASIC: DMA 1 address set to &%04x\n",m_asic.dma_addr[1]);
14521450      break;
14531451   case 0x0c08:
14541452   case 0x0c09:
1455      state->m_asic.dma_addr[2] = (state->m_asic.ram[0x2c09] << 8) + state->m_asic.ram[0x2c08];
1456      state->m_asic.dma_status &= ~0x04;
1457      logerror("ASIC: DMA 2 address set to &%04x\n",state->m_asic.dma_addr[2]);
1453      m_asic.dma_addr[2] = (m_asic.ram[0x2c09] << 8) + m_asic.ram[0x2c08];
1454      m_asic.dma_status &= ~0x04;
1455      logerror("ASIC: DMA 2 address set to &%04x\n",m_asic.dma_addr[2]);
14581456      break;
14591457   case 0x0c02:
1460      state->m_asic.dma_prescaler[0] = data + 1;
1458      m_asic.dma_prescaler[0] = data + 1;
14611459      logerror("ASIC: DMA 0 pause prescaler set to %i\n",data);
14621460      break;
14631461   case 0x0c06:
1464      state->m_asic.dma_prescaler[1] = data + 1;
1462      m_asic.dma_prescaler[1] = data + 1;
14651463      logerror("ASIC: DMA 1 pause prescaler set to %i\n",data);
14661464      break;
14671465   case 0x0c0a:
1468      state->m_asic.dma_prescaler[2] = data + 1;
1466      m_asic.dma_prescaler[2] = data + 1;
14691467      logerror("ASIC: DMA 2 pause prescaler set to %i\n",data);
14701468      break;
14711469   case 0x0c0f:
1472      state->m_asic.dma_status = data;
1470      m_asic.dma_status = data;
14731471      logerror("ASIC: DMA status write - %02x\n",data);
14741472      if(data & 0x40)
14751473      {
14761474         logerror("ASIC: DMA 0 IRQ acknowledge\n");
1477         cputag_set_input_line(space->machine(), "maincpu", 0, CLEAR_LINE);
1478         state->m_plus_irq_cause = 0x06;
1479         state->m_asic.ram[0x2c0f] &= ~0x40;
1475         cputag_set_input_line(machine(), "maincpu", 0, CLEAR_LINE);
1476         m_plus_irq_cause = 0x06;
1477         m_asic.ram[0x2c0f] &= ~0x40;
14801478      }
14811479      if(data & 0x20)
14821480      {
14831481         logerror("ASIC: DMA 1 IRQ acknowledge\n");
1484         cputag_set_input_line(space->machine(), "maincpu", 0, CLEAR_LINE);
1485         state->m_plus_irq_cause = 0x06;
1486         state->m_asic.ram[0x2c0f] &= ~0x20;
1482         cputag_set_input_line(machine(), "maincpu", 0, CLEAR_LINE);
1483         m_plus_irq_cause = 0x06;
1484         m_asic.ram[0x2c0f] &= ~0x20;
14871485      }
14881486      if(data & 0x10)
14891487      {
14901488         logerror("ASIC: DMA 2 IRQ acknowledge\n");
1491         cputag_set_input_line(space->machine(), "maincpu", 0, CLEAR_LINE);
1492         state->m_plus_irq_cause = 0x06;
1493         state->m_asic.ram[0x2c0f] &= ~0x10;
1489         cputag_set_input_line(machine(), "maincpu", 0, CLEAR_LINE);
1490         m_plus_irq_cause = 0x06;
1491         m_asic.ram[0x2c0f] &= ~0x10;
14941492      }
1495      state->m_asic.ram[0x2c0f] = (state->m_asic.ram[0x2c0f] & 0xf8) | (data & 0x07);
1493      m_asic.ram[0x2c0f] = (m_asic.ram[0x2c0f] & 0xf8) | (data & 0x07);
14961494      break;
14971495   }
14981496}
14991497
15001498
1501READ8_HANDLER( amstrad_plus_asic_4000_r )
1499READ8_MEMBER(amstrad_state::amstrad_plus_asic_4000_r)
15021500{
1503   amstrad_state *state = space->machine().driver_data<amstrad_state>();
15041501//  logerror("RAM: read from &%04x\n",offset+0x4000);
1505   return state->m_asic.ram[offset];
1502   return m_asic.ram[offset];
15061503}
15071504
15081505
1509READ8_HANDLER( amstrad_plus_asic_6000_r )
1506READ8_MEMBER(amstrad_state::amstrad_plus_asic_6000_r)
15101507{
1511   amstrad_state *state = space->machine().driver_data<amstrad_state>();
15121508//  logerror("RAM: read from &%04x\n",offset+0x6000);
15131509   // Analogue ports
15141510   if(offset == 0x0808)
15151511   {
1516      return (input_port_read(space->machine(), "analog1") & 0x3f);
1512      return (input_port_read(machine(), "analog1") & 0x3f);
15171513   }
15181514   if(offset == 0x0809)
15191515   {
1520      return (input_port_read(space->machine(), "analog2") & 0x3f);
1516      return (input_port_read(machine(), "analog2") & 0x3f);
15211517   }
15221518   if(offset == 0x080a)
15231519   {
1524      return (input_port_read(space->machine(), "analog3") & 0x3f);
1520      return (input_port_read(machine(), "analog3") & 0x3f);
15251521   }
15261522   if(offset == 0x080b)
15271523   {
1528      return (input_port_read(space->machine(), "analog4") & 0x3f);
1524      return (input_port_read(machine(), "analog4") & 0x3f);
15291525   }
15301526   if(offset == 0x080c || offset == 0x080e)
15311527   {
r14963r14964
15391535   if(offset == 0x0c0f)  // DMA status and control
15401536   {
15411537      int result = 0;
1542      if(state->m_plus_irq_cause == 0x00)
1538      if(m_plus_irq_cause == 0x00)
15431539         result |= 0x40;
1544      if(state->m_plus_irq_cause == 0x02)
1540      if(m_plus_irq_cause == 0x02)
15451541         result |= 0x20;
1546      if(state->m_plus_irq_cause == 0x04)
1542      if(m_plus_irq_cause == 0x04)
15471543         result |= 0x10;
1548      if(state->m_plus_irq_cause == 0x06)
1544      if(m_plus_irq_cause == 0x06)
15491545         result |= 0x80;
15501546      return result;
15511547   }
15521548#endif
1553   return state->m_asic.ram[offset+0x2000];
1549   return m_asic.ram[offset+0x2000];
15541550}
15551551
15561552
r14963r14964
17051701}
17061702
17071703
1708static WRITE8_HANDLER( aleste_msx_mapper )
1704WRITE8_MEMBER(amstrad_state::aleste_msx_mapper)
17091705{
1710   amstrad_state *state = space->machine().driver_data<amstrad_state>();
17111706   int page = (offset & 0x0300) >> 8;
17121707   int ramptr = (data & 0x1f) * 0x4000;
17131708   int rampage = data & 0x1f;
17141709   int function = (data & 0xc0) >> 6;
1715   UINT8 *ram = space->machine().device<ram_device>(RAM_TAG)->pointer();
1710   UINT8 *ram = machine().device<ram_device>(RAM_TAG)->pointer();
17161711
17171712   // It is assumed that functions are all mapped to each port &7cff-&7fff, and b8 and b9 are only used for RAM bank location
17181713   switch(function)
17191714   {
17201715   case 0:  // Pen select (same as Gate Array?)
1721      amstrad_GateArray_write(space->machine(), data);
1716      amstrad_GateArray_write(machine(), data);
17221717      break;
17231718   case 1:  // Colour select (6-bit palette)
1724      aleste_vh_update_colour( space->machine(), state->m_gate_array.pen_selected, data & 0x3f );
1719      aleste_vh_update_colour( machine(), m_gate_array.pen_selected, data & 0x3f );
17251720      break;
17261721   case 2:  // Screen mode, Upper/Lower ROM select
1727      amstrad_GateArray_write(space->machine(), data);
1722      amstrad_GateArray_write(machine(), data);
17281723      break;
17291724   case 3: // RAM banks
17301725      switch(page)
17311726      {
17321727      case 0:  /* 0x0000 - 0x3fff */
1733         memory_set_bankptr(space->machine(),"bank1",ram+ramptr);
1734         memory_set_bankptr(space->machine(),"bank2",ram+ramptr+0x2000);
1735         memory_set_bankptr(space->machine(),"bank9",ram+ramptr);
1736         memory_set_bankptr(space->machine(),"bank10",ram+ramptr+0x2000);
1737         state->m_Aleste_RamBanks[0] = ram+ramptr;
1738         state->m_aleste_active_page[0] = data;
1728         memory_set_bankptr(machine(),"bank1",ram+ramptr);
1729         memory_set_bankptr(machine(),"bank2",ram+ramptr+0x2000);
1730         memory_set_bankptr(machine(),"bank9",ram+ramptr);
1731         memory_set_bankptr(machine(),"bank10",ram+ramptr+0x2000);
1732         m_Aleste_RamBanks[0] = ram+ramptr;
1733         m_aleste_active_page[0] = data;
17391734         logerror("RAM: RAM location 0x%06x (page %02x) mapped to 0x0000\n",ramptr,rampage);
17401735         break;
17411736      case 1:  /* 0x4000 - 0x7fff */
1742         memory_set_bankptr(space->machine(),"bank3",ram+ramptr);
1743         memory_set_bankptr(space->machine(),"bank4",ram+ramptr+0x2000);
1744         memory_set_bankptr(space->machine(),"bank11",ram+ramptr);
1745         memory_set_bankptr(space->machine(),"bank12",ram+ramptr+0x2000);
1746         state->m_Aleste_RamBanks[1] = ram+ramptr;
1747         state->m_aleste_active_page[1] = data;
1737         memory_set_bankptr(machine(),"bank3",ram+ramptr);
1738         memory_set_bankptr(machine(),"bank4",ram+ramptr+0x2000);
1739         memory_set_bankptr(machine(),"bank11",ram+ramptr);
1740         memory_set_bankptr(machine(),"bank12",ram+ramptr+0x2000);
1741         m_Aleste_RamBanks[1] = ram+ramptr;
1742         m_aleste_active_page[1] = data;
17481743         logerror("RAM: RAM location 0x%06x (page %02x) mapped to 0x4000\n",ramptr,rampage);
17491744         break;
17501745      case 2:  /* 0x8000 - 0xbfff */
1751         memory_set_bankptr(space->machine(),"bank5",ram+ramptr);
1752         memory_set_bankptr(space->machine(),"bank6",ram+ramptr+0x2000);
1753         memory_set_bankptr(space->machine(),"bank13",ram+ramptr);
1754         memory_set_bankptr(space->machine(),"bank14",ram+ramptr+0x2000);
1755         state->m_Aleste_RamBanks[2] = ram+ramptr;
1756         state->m_aleste_active_page[2] = data;
1746         memory_set_bankptr(machine(),"bank5",ram+ramptr);
1747         memory_set_bankptr(machine(),"bank6",ram+ramptr+0x2000);
1748         memory_set_bankptr(machine(),"bank13",ram+ramptr);
1749         memory_set_bankptr(machine(),"bank14",ram+ramptr+0x2000);
1750         m_Aleste_RamBanks[2] = ram+ramptr;
1751         m_aleste_active_page[2] = data;
17571752         logerror("RAM: RAM location 0x%06x (page %02x) mapped to 0x8000\n",ramptr,rampage);
17581753         break;
17591754      case 3:  /* 0xc000 - 0xffff */
1760         memory_set_bankptr(space->machine(),"bank7",ram+ramptr);
1761         memory_set_bankptr(space->machine(),"bank8",ram+ramptr+0x2000);
1762         memory_set_bankptr(space->machine(),"bank15",ram+ramptr);
1763         memory_set_bankptr(space->machine(),"bank16",ram+ramptr+0x2000);
1764         state->m_Aleste_RamBanks[3] = ram+ramptr;
1765         state->m_aleste_active_page[3] = data;
1755         memory_set_bankptr(machine(),"bank7",ram+ramptr);
1756         memory_set_bankptr(machine(),"bank8",ram+ramptr+0x2000);
1757         memory_set_bankptr(machine(),"bank15",ram+ramptr);
1758         memory_set_bankptr(machine(),"bank16",ram+ramptr+0x2000);
1759         m_Aleste_RamBanks[3] = ram+ramptr;
1760         m_aleste_active_page[3] = data;
17661761         logerror("RAM: RAM location 0x%06x (page %02x) mapped to 0xc000\n",ramptr,rampage);
17671762         break;
17681763      }
r14963r14964
18321827
18331828*/
18341829
1835READ8_HANDLER ( amstrad_cpc_io_r )
1830READ8_MEMBER(amstrad_state::amstrad_cpc_io_r)
18361831{
1837   amstrad_state *state = space->machine().driver_data<amstrad_state>();
1838   device_t *fdc = space->machine().device("upd765");
1839   mc6845_device *mc6845 = space->machine().device<mc6845_device>("mc6845" );
1832   device_t *fdc = machine().device("upd765");
1833   mc6845_device *mc6845 = machine().device<mc6845_device>("mc6845" );
18401834
18411835   unsigned char data = 0xFF;
18421836   unsigned int r1r0 = (unsigned int)((offset & 0x0300) >> 8);
18431837//  m6845_personality_t crtc_type;
18441838   int page;
18451839
1846//  crtc_type = input_port_read_safe(space->machine(), "crtc", 0);
1840//  crtc_type = input_port_read_safe(machine(), "crtc", 0);
18471841//  m6845_set_personality(crtc_type);
18481842
1849   if(state->m_aleste_mode & 0x04)
1843   if(m_aleste_mode & 0x04)
18501844   {
18511845      if ((offset & (1<<15)) == 0)  // Aleste Mapper is readable?
18521846      {
18531847         page = (offset & 0x0300) >> 8;
1854         data = state->m_aleste_active_page[page];
1848         data = m_aleste_active_page[page];
18551849         return data;
18561850      }
18571851   }
r14963r14964
18621856      switch(r1r0)
18631857      {
18641858      case 0x02:
1865         data = mc6845->status_r( *space, 0 );
1859         data = mc6845->status_r( space, 0 );
18661860#if 0
18671861         /* CRTC Type 1 : Read Status Register
18681862               CRTC Type 3 or 4 : Read from selected internal 6845 register */
r14963r14964
18811875         break;
18821876      case 0x03:
18831877         /* All CRTC type : Read from selected internal 6845 register Read only */
1884         data = mc6845->register_r( *space, (offs_t)0 );
1878         data = mc6845->register_r( space, (offs_t)0 );
18851879         break;
18861880      }
18871881   }
r14963r14964
18971891   if ((offset & (1<<11)) == 0)
18981892   {
18991893      if (r1r0 < 0x03 )
1900         data = space->machine().device<i8255_device>("ppi8255")->read(*space, r1r0);
1894         data = machine().device<i8255_device>("ppi8255")->read(space, r1r0);
19011895   }
19021896
19031897/* if b10 = 0 : Expansion Peripherals Read selected
r14963r14964
19181912If b10 is reset but none of b7-b5 are reset, user expansion peripherals are selected.
19191913The exception is the case where none of b7-b0 are reset (i.e. port &FBFF), which causes the expansion peripherals to reset.
19201914 */
1921   if ( state->m_system_type != SYSTEM_GX4000 )
1915   if ( m_system_type != SYSTEM_GX4000 )
19221916   {
19231917      if ( ( offset & (1<<10) ) == 0 )
19241918      {
r14963r14964
19451939
19461940
19471941// Handler for checking the ASIC unlocking sequence
1948static void amstrad_plus_seqcheck(amstrad_state *state, int data)
1942void amstrad_state::amstrad_plus_seqcheck(int data)
19491943{
1950   if(data == 0 && state->m_prev_data != 0)
1944   if(data == 0 && m_prev_data != 0)
19511945   {
1952      state->m_asic.seqptr = 0;  // non-zero value followed by zero will sync the locking mechanism
1946      m_asic.seqptr = 0;  // non-zero value followed by zero will sync the locking mechanism
19531947   }
1954   if(data == asic_unlock_seq[state->m_asic.seqptr])
1948   if(data == asic_unlock_seq[m_asic.seqptr])
19551949   {
1956      state->m_asic.seqptr++;
1957      if ( state->m_asic.seqptr == 14 && state->m_asic.enabled )
1950      m_asic.seqptr++;
1951      if ( m_asic.seqptr == 14 && m_asic.enabled )
19581952      {
19591953         logerror("SYS: ASIC locked\n");
1960         state->m_asic.enabled = 0;
1954         m_asic.enabled = 0;
19611955      }
1962      if ( state->m_asic.seqptr >= 15 )  // end of sequence
1956      if ( m_asic.seqptr >= 15 )  // end of sequence
19631957      {
19641958         logerror("SYS: ASIC unlocked\n");
1965         state->m_asic.enabled = 1;
1959         m_asic.enabled = 1;
19661960      }
19671961   }
1968   state->m_prev_data = data;
1962   m_prev_data = data;
19691963}
19701964
19711965
19721966/* Offset handler for write */
1973WRITE8_HANDLER ( amstrad_cpc_io_w )
1967WRITE8_MEMBER(amstrad_state::amstrad_cpc_io_w)
19741968{
1975   amstrad_state *state = space->machine().driver_data<amstrad_state>();
1976   device_t *fdc = space->machine().device("upd765");
1977   mc6845_device *mc6845 = space->machine().device<mc6845_device>("mc6845");
1969   device_t *fdc = machine().device("upd765");
1970   mc6845_device *mc6845 = machine().device<mc6845_device>("mc6845");
19781971   cpc_multiface2_device* mface2;
19791972
19801973   if ((offset & (1<<15)) == 0)
19811974   {
1982      if(state->m_aleste_mode & 0x04) // Aleste mode
1975      if(m_aleste_mode & 0x04) // Aleste mode
19831976      {
19841977         aleste_msx_mapper(space, offset, data);
19851978      }
r14963r14964
19871980      {
19881981         /* if b15 = 0 and b14 = 1 : Gate-Array Write Selected*/
19891982         if ((offset & (1<<14)) != 0)
1990            amstrad_GateArray_write(space->machine(), data);
1983            amstrad_GateArray_write(machine(), data);
19911984
19921985         /* if b15 = 0 : RAM Configuration Write Selected*/
1993         AmstradCPC_GA_SetRamConfiguration(space->machine());
1986         AmstradCPC_GA_SetRamConfiguration(machine());
19941987      }
19951988   }
19961989
r14963r14964
20011994      switch ((offset & 0x0300) >> 8) // r1r0
20021995      {
20031996      case 0x00:      /* Select internal 6845 register Write Only */
2004         mc6845->address_w( *space, 0, data );
2005         if ( state->m_system_type == SYSTEM_PLUS || state->m_system_type == SYSTEM_GX4000 )
2006            amstrad_plus_seqcheck(state, data);
1997         mc6845->address_w( space, 0, data );
1998         if ( m_system_type == SYSTEM_PLUS || m_system_type == SYSTEM_GX4000 )
1999            amstrad_plus_seqcheck(data);
20072000
20082001         /* printer port d7 */
2009         if (data == 0x0c && state->m_system_type == SYSTEM_PLUS)
2010            state->m_printer_bit8_selected = TRUE;
2002         if (data == 0x0c && m_system_type == SYSTEM_PLUS)
2003            m_printer_bit8_selected = TRUE;
20112004
2012         state->m_asic.addr_6845 = data;
2005         m_asic.addr_6845 = data;
20132006         break;
20142007      case 0x01:      /* Write to selected internal 6845 register Write Only */
2015         if ( state->m_system_type == SYSTEM_PLUS || state->m_system_type == SYSTEM_GX4000 )
2016            amstrad_plus_update_video(space->machine());
2008         if ( m_system_type == SYSTEM_PLUS || m_system_type == SYSTEM_GX4000 )
2009            amstrad_plus_update_video(machine());
20172010         else
2018            amstrad_update_video(space->machine());
2019         mc6845->register_w( *space, 0, data );
2011            amstrad_update_video(machine());
2012         mc6845->register_w( space, 0, data );
20202013
20212014         /* printer port bit 8 */
2022         if (state->m_printer_bit8_selected && state->m_system_type == SYSTEM_PLUS)
2015         if (m_printer_bit8_selected && m_system_type == SYSTEM_PLUS)
20232016         {
2024            centronics_device *printer = space->machine().device<centronics_device>("centronics");
2017            centronics_device *printer = machine().device<centronics_device>("centronics");
20252018            printer->d7_w(BIT(data, 3));
2026            state->m_printer_bit8_selected = FALSE;
2019            m_printer_bit8_selected = FALSE;
20272020         }
20282021
2029         if ( state->m_asic.addr_6845 == 0x01 )
2030            state->m_asic.horiz_disp = data;
2022         if ( m_asic.addr_6845 == 0x01 )
2023            m_asic.horiz_disp = data;
20312024
20322025         break;
20332026      default:
r14963r14964
20392032   /* b13 = 0 : ROM select Write Selected*/
20402033   if ((offset & (1<<13)) == 0)
20412034   {
2042      state->m_gate_array.upper_bank = data;
2043      amstrad_setUpperRom(space->machine());
2035      m_gate_array.upper_bank = data;
2036      amstrad_setUpperRom(machine());
20442037   }
20452038
20462039   /* b12 = 0 : Printer port Write Selected*/
2047   if(state->m_system_type != SYSTEM_GX4000)
2040   if(m_system_type != SYSTEM_GX4000)
20482041   {
20492042      if ((offset & (1<<12)) == 0)
20502043      {
2051         centronics_device *printer = space->machine().device<centronics_device>("centronics");
2044         centronics_device *printer = machine().device<centronics_device>("centronics");
20522045
20532046         /* CPC has a 7-bit data port, bit 8 is the STROBE signal */
2054         printer->write(*space, 0, data & 0x7f);
2047         printer->write(space, 0, data & 0x7f);
20552048         printer->strobe_w(BIT(data, 7));
20562049      }
20572050   }
r14963r14964
20672060   {
20682061      unsigned int Index = ((offset & 0x0300) >> 8);
20692062
2070      space->machine().device<i8255_device>("ppi8255")->write(*space, Index, data);
2063      machine().device<i8255_device>("ppi8255")->write(space, Index, data);
20712064   }
20722065
20732066   /* if b10 = 0 : Expansion Peripherals Write selected */
r14963r14964
20902083If b10 is reset but none of b7-b5 are reset, user expansion peripherals are selected.
20912084The exception is the case where none of b7-b0 are reset (i.e. port &FBFF), which causes the expansion peripherals to reset.
20922085*/
2093      if(state->m_system_type != SYSTEM_GX4000)
2086      if(m_system_type != SYSTEM_GX4000)
20942087      {
20952088         if ((offset & (1<<7)) == 0)
20962089         {
r14963r14964
21022095               /* FDC Motor Control - Bit 0 defines the state of the FDD motor:
21032096                     * "1" the FDD motor will be active.
21042097                     * "0" the FDD motor will be in-active.*/
2105               floppy_mon_w(floppy_get_device(space->machine(), 0), !BIT(data, 0));
2106               floppy_mon_w(floppy_get_device(space->machine(), 1), !BIT(data, 0));
2107               floppy_drive_set_ready_state(floppy_get_device(space->machine(), 0), 1,1);
2108               floppy_drive_set_ready_state(floppy_get_device(space->machine(), 1), 1,1);
2098               floppy_mon_w(floppy_get_device(machine(), 0), !BIT(data, 0));
2099               floppy_mon_w(floppy_get_device(machine(), 1), !BIT(data, 0));
2100               floppy_drive_set_ready_state(floppy_get_device(machine(), 0), 1,1);
2101               floppy_drive_set_ready_state(floppy_get_device(machine(), 1), 1,1);
21092102              break;
21102103
21112104            case 0x03: /* Write Data register of FDC */
r14963r14964
21282121        D5 - 0-AY8910 ,1-512WI1 */
21292122   if(offset == 0xfabf)
21302123   {
2131      state->m_aleste_mode = data;
2124      m_aleste_mode = data;
21322125      logerror("EXTEND: Port &FABF write 0x%02x\n",data);
2133      mc6845->set_clock( ( state->m_aleste_mode & 0x02 ) ? ( XTAL_16MHz / 8 ) : ( XTAL_16MHz / 16 ) );
2126      mc6845->set_clock( ( m_aleste_mode & 0x02 ) ? ( XTAL_16MHz / 8 ) : ( XTAL_16MHz / 16 ) );
21342127   }
21352128
2136   mface2 = dynamic_cast<cpc_multiface2_device*>(get_expansion_device(space->machine(),"multiface2"));
2129   mface2 = dynamic_cast<cpc_multiface2_device*>(get_expansion_device(machine(),"multiface2"));
21372130   if(mface2 != NULL)
21382131   {
21392132      if(mface2->multiface_io_write(offset, data) != 0)
2140         amstrad_rethinkMemory(space->machine());
2133         amstrad_rethinkMemory(machine());
21412134   }
21422135}
21432136
r14963r14964
26242617*/
26252618
26262619/* read PSG port A */
2627READ8_HANDLER ( amstrad_psg_porta_read )
2620READ8_MEMBER(amstrad_state::amstrad_psg_porta_read)
26282621{
2629   amstrad_state *state = space->machine().driver_data<amstrad_state>();
26302622   /* Read CPC Keyboard
26312623   If keyboard matrix line 11-14 are selected, the byte is always &ff.
26322624   After testing on a real CPC, it is found that these never change, they always return &FF. */
r14963r14964
26372629      "keyboard_row_10"
26382630   };
26392631
2640   if ( ( state->m_ppi_port_outputs[amstrad_ppi_PortC] & 0x0F ) > 10)
2632   if ( ( m_ppi_port_outputs[amstrad_ppi_PortC] & 0x0F ) > 10)
26412633   {
26422634      return 0xFF;
26432635   }
26442636   else
26452637   {
2646      if(state->m_aleste_mode == 0x08 && ( state->m_ppi_port_outputs[amstrad_ppi_PortC] & 0x0F ) == 10)
2638      if(m_aleste_mode == 0x08 && ( m_ppi_port_outputs[amstrad_ppi_PortC] & 0x0F ) == 10)
26472639         return 0xff;
26482640
2649      return input_port_read_safe(space->machine(), keynames[state->m_ppi_port_outputs[amstrad_ppi_PortC] & 0x0F], 0) & 0xFF;
2641      return input_port_read_safe(machine(), keynames[m_ppi_port_outputs[amstrad_ppi_PortC] & 0x0F], 0) & 0xFF;
26502642   }
26512643}
26522644
src/mess/machine/sms.c
r14963r14964
233233}
234234
235235
236static WRITE8_HANDLER( sms_input_write )
236WRITE8_MEMBER(sms_state::sms_input_write)
237237{
238   sms_state *state = space->machine().driver_data<sms_state>();
239238
240239   switch (offset)
241240   {
242241   case 0:
243      switch (input_port_read_safe(space->machine(), "CTRLSEL", 0x00) & 0x0f)
242      switch (input_port_read_safe(machine(), "CTRLSEL", 0x00) & 0x0f)
244243      {
245244      case 0x04:   /* Sports Pad */
246         if (data != state->m_sports_pad_last_data_1)
245         if (data != m_sports_pad_last_data_1)
247246         {
248            UINT32 cpu_cycles = downcast<cpu_device *>(&space->device())->total_cycles();
247            UINT32 cpu_cycles = downcast<cpu_device *>(&space.device())->total_cycles();
249248
250            state->m_sports_pad_last_data_1 = data;
251            if (cpu_cycles - state->m_last_sports_pad_time_1 > 512)
249            m_sports_pad_last_data_1 = data;
250            if (cpu_cycles - m_last_sports_pad_time_1 > 512)
252251            {
253               state->m_sports_pad_state_1 = 3;
254               state->m_sports_pad_1_x = input_port_read(space->machine(), "SPORT0");
255               state->m_sports_pad_1_y = input_port_read(space->machine(), "SPORT1");
252               m_sports_pad_state_1 = 3;
253               m_sports_pad_1_x = input_port_read(machine(), "SPORT0");
254               m_sports_pad_1_y = input_port_read(machine(), "SPORT1");
256255            }
257            state->m_last_sports_pad_time_1 = cpu_cycles;
258            state->m_sports_pad_state_1 = (state->m_sports_pad_state_1 + 1) & 3;
256            m_last_sports_pad_time_1 = cpu_cycles;
257            m_sports_pad_state_1 = (m_sports_pad_state_1 + 1) & 3;
259258         }
260259         break;
261260      }
262261      break;
263262
264263   case 1:
265      switch (input_port_read_safe(space->machine(), "CTRLSEL", 0x00) & 0xf0)
264      switch (input_port_read_safe(machine(), "CTRLSEL", 0x00) & 0xf0)
266265      {
267266      case 0x40:   /* Sports Pad */
268         if (data != state->m_sports_pad_last_data_2)
267         if (data != m_sports_pad_last_data_2)
269268         {
270            UINT32 cpu_cycles = downcast<cpu_device *>(&space->device())->total_cycles();
269            UINT32 cpu_cycles = downcast<cpu_device *>(&space.device())->total_cycles();
271270
272            state->m_sports_pad_last_data_2 = data;
273            if (cpu_cycles - state->m_last_sports_pad_time_2 > 2048)
271            m_sports_pad_last_data_2 = data;
272            if (cpu_cycles - m_last_sports_pad_time_2 > 2048)
274273            {
275               state->m_sports_pad_state_2 = 3;
276               state->m_sports_pad_2_x = input_port_read(space->machine(), "SPORT2");
277               state->m_sports_pad_2_y = input_port_read(space->machine(), "SPORT3");
274               m_sports_pad_state_2 = 3;
275               m_sports_pad_2_x = input_port_read(machine(), "SPORT2");
276               m_sports_pad_2_y = input_port_read(machine(), "SPORT3");
278277            }
279            state->m_last_sports_pad_time_2 = cpu_cycles;
280            state->m_sports_pad_state_2 = (state->m_sports_pad_state_2 + 1) & 3;
278            m_last_sports_pad_time_2 = cpu_cycles;
279            m_sports_pad_state_2 = (m_sports_pad_state_2 + 1) & 3;
281280         }
282281         break;
283282      }
r14963r14964
700699}
701700
702701
703WRITE8_HANDLER( sms_fm_detect_w )
702WRITE8_MEMBER(sms_state::sms_fm_detect_w)
704703{
705   sms_state *state = space->machine().driver_data<sms_state>();
706704
707   if (state->m_has_fm)
708      state->m_fm_detect = (data & 0x01);
705   if (m_has_fm)
706      m_fm_detect = (data & 0x01);
709707}
710708
711709
712READ8_HANDLER( sms_fm_detect_r )
710READ8_MEMBER(sms_state::sms_fm_detect_r)
713711{
714   sms_state *state = space->machine().driver_data<sms_state>();
715712
716   if (state->m_has_fm)
713   if (m_has_fm)
717714   {
718      return state->m_fm_detect;
715      return m_fm_detect;
719716   }
720717   else
721718   {
722      if (state->m_bios_port & IO_CHIP)
719      if (m_bios_port & IO_CHIP)
723720      {
724721         return 0xff;
725722      }
726723      else
727724      {
728         sms_get_inputs(space);
729         return state->m_input_port0;
725         sms_get_inputs(&space);
726         return m_input_port0;
730727      }
731728   }
732729}
733730
734WRITE8_HANDLER( sms_io_control_w )
731WRITE8_MEMBER(sms_state::sms_io_control_w)
735732{
736   sms_state *state = space->machine().driver_data<sms_state>();
737733   bool hcount_latch = false;
738734
739735   if (data & 0x08)
740736   {
741737      /* check if TH pin level is high (1) and was low last time */
742      if (data & 0x80 && !(state->m_ctrl_reg & 0x80))
738      if (data & 0x80 && !(m_ctrl_reg & 0x80))
743739      {
744740         hcount_latch = true;
745741      }
r14963r14964
748744
749745   if (data & 0x02)
750746   {
751      if (data & 0x20 && !(state->m_ctrl_reg & 0x20))
747      if (data & 0x20 && !(m_ctrl_reg & 0x20))
752748      {
753749         hcount_latch = true;
754750      }
r14963r14964
757753
758754   if (hcount_latch)
759755   {
760      sms_vdp_hcount_latch(space);
756      sms_vdp_hcount_latch(&space);
761757   }
762758
763   state->m_ctrl_reg = data;
759   m_ctrl_reg = data;
764760}
765761
766762
767READ8_HANDLER( sms_count_r )
763READ8_MEMBER(sms_state::sms_count_r)
768764{
769   sms_state *state = space->machine().driver_data<sms_state>();
770765
771766   if (offset & 0x01)
772      return state->m_vdp->hcount_latch_read(*state->m_space, offset);
767      return m_vdp->hcount_latch_read(*m_space, offset);
773768   else
774      return state->m_vdp->vcount_read(*state->m_space, offset);
769      return m_vdp->vcount_read(*m_space, offset);
775770}
776771
777772
r14963r14964
804799   driver_state->m_lphaser_2_latch = 0;
805800}
806801
807READ8_HANDLER( sms_input_port_0_r )
802READ8_MEMBER(sms_state::sms_input_port_0_r)
808803{
809   sms_state *state = space->machine().driver_data<sms_state>();
810804
811   if (state->m_bios_port & IO_CHIP)
805   if (m_bios_port & IO_CHIP)
812806   {
813807      return 0xff;
814808   }
815809   else
816810   {
817      sms_get_inputs(space);
818      return state->m_input_port0;
811      sms_get_inputs(&space);
812      return m_input_port0;
819813   }
820814}
821815
822816
823READ8_HANDLER( sms_input_port_1_r )
817READ8_MEMBER(sms_state::sms_input_port_1_r)
824818{
825   sms_state *state = space->machine().driver_data<sms_state>();
826819
827   if (state->m_bios_port & IO_CHIP)
820   if (m_bios_port & IO_CHIP)
828821      return 0xff;
829822
830   sms_get_inputs(space);
823   sms_get_inputs(&space);
831824
832825   /* Reset Button */
833   state->m_input_port1 = (state->m_input_port1 & 0xef) | (input_port_read_safe(space->machine(), "RESET", 0x01) & 0x01) << 4;
826   m_input_port1 = (m_input_port1 & 0xef) | (input_port_read_safe(machine(), "RESET", 0x01) & 0x01) << 4;
834827
835828   /* Do region detection if TH of ports A and B are set to output (0) */
836   if (!(state->m_ctrl_reg & 0x0a))
829   if (!(m_ctrl_reg & 0x0a))
837830   {
838831      /* Move bits 7,5 of IO control port into bits 7, 6 */
839      state->m_input_port1 = (state->m_input_port1 & 0x3f) | (state->m_ctrl_reg & 0x80) | (state->m_ctrl_reg & 0x20) << 1;
832      m_input_port1 = (m_input_port1 & 0x3f) | (m_ctrl_reg & 0x80) | (m_ctrl_reg & 0x20) << 1;
840833
841834      /* Inverse region detect value for Japanese machines */
842      if (state->m_is_region_japan)
843         state->m_input_port1 ^= 0xc0;
835      if (m_is_region_japan)
836         m_input_port1 ^= 0xc0;
844837   }
845838   else
846839   {
847      if (state->m_ctrl_reg & 0x02 && state->m_lphaser_1_latch)
840      if (m_ctrl_reg & 0x02 && m_lphaser_1_latch)
848841      {
849         state->m_input_port1 &= ~0x40;
850         state->m_lphaser_1_latch = 0;
842         m_input_port1 &= ~0x40;
843         m_lphaser_1_latch = 0;
851844      }
852845
853      if (state->m_ctrl_reg & 0x08 && state->m_lphaser_2_latch)
846      if (m_ctrl_reg & 0x08 && m_lphaser_2_latch)
854847      {
855         state->m_input_port1 &= ~0x80;
856         state->m_lphaser_2_latch = 0;
848         m_input_port1 &= ~0x80;
849         m_lphaser_2_latch = 0;
857850      }
858851   }
859852
860   return state->m_input_port1;
853   return m_input_port1;
861854}
862855
863856
864857
865WRITE8_HANDLER( sms_ym2413_register_port_0_w )
858WRITE8_MEMBER(sms_state::sms_ym2413_register_port_0_w)
866859{
867   sms_state *state = space->machine().driver_data<sms_state>();
868860
869   if (state->m_has_fm)
870      ym2413_w(state->m_ym, 0, (data & 0x3f));
861   if (m_has_fm)
862      ym2413_w(m_ym, 0, (data & 0x3f));
871863}
872864
873865
874WRITE8_HANDLER( sms_ym2413_data_port_0_w )
866WRITE8_MEMBER(sms_state::sms_ym2413_data_port_0_w)
875867{
876   sms_state *state = space->machine().driver_data<sms_state>();
877868
878   if (state->m_has_fm)
869   if (m_has_fm)
879870   {
880871      logerror("data_port_0_w %x %x\n", offset, data);
881      ym2413_w(state->m_ym, 1, data);
872      ym2413_w(m_ym, 1, data);
882873   }
883874}
884875
885876
886READ8_HANDLER( gg_input_port_2_r )
877READ8_MEMBER(sms_state::gg_input_port_2_r)
887878{
888   sms_state *state = space->machine().driver_data<sms_state>();
889879
890   //logerror("joy 2 read, val: %02x, pc: %04x\n", ((state->m_is_region_japan ? 0x00 : 0x40) | (input_port_read(machine, "START") & 0x80)), activecpu_get_pc());
891   return ((state->m_is_region_japan ? 0x00 : 0x40) | (input_port_read(space->machine(), "START") & 0x80));
880   //logerror("joy 2 read, val: %02x, pc: %04x\n", ((m_is_region_japan ? 0x00 : 0x40) | (input_port_read(machine, "START") & 0x80)), activecpu_get_pc());
881   return ((m_is_region_japan ? 0x00 : 0x40) | (input_port_read(machine(), "START") & 0x80));
892882}
893883
894884
895READ8_HANDLER( sms_sscope_r )
885READ8_MEMBER(sms_state::sms_sscope_r)
896886{
897   sms_state *state = space->machine().driver_data<sms_state>();
898   return state->m_sscope_state;
887   return m_sscope_state;
899888}
900889
901890
902WRITE8_HANDLER( sms_sscope_w )
891WRITE8_MEMBER(sms_state::sms_sscope_w)
903892{
904   sms_state *state = space->machine().driver_data<sms_state>();
905   state->m_sscope_state = data;
893   m_sscope_state = data;
906894}
907895
908896
909READ8_HANDLER( sms_mapper_r )
897READ8_MEMBER(sms_state::sms_mapper_r)
910898{
911   sms_state *state = space->machine().driver_data<sms_state>();
912   return state->m_mapper[offset];
899   return m_mapper[offset];
913900}
914901
915902/* Terebi Oekaki */
916903/* The following code comes from sg1000.c. We should eventually merge these TV Draw implementations */
917static WRITE8_HANDLER( sms_tvdraw_axis_w )
904WRITE8_MEMBER(sms_state::sms_tvdraw_axis_w)
918905{
919   sms_state *state = space->machine().driver_data<sms_state>();
920   UINT8 tvboard_on = input_port_read_safe(space->machine(), "TVDRAW", 0x00);
906   UINT8 tvboard_on = input_port_read_safe(machine(), "TVDRAW", 0x00);
921907
922908   if (data & 0x01)
923909   {
924      state->m_cartridge[state->m_current_cartridge].m_tvdraw_data = tvboard_on ? input_port_read(space->machine(), "TVDRAW_X") : 0x80;
910      m_cartridge[m_current_cartridge].m_tvdraw_data = tvboard_on ? input_port_read(machine(), "TVDRAW_X") : 0x80;
925911
926      if (state->m_cartridge[state->m_current_cartridge].m_tvdraw_data < 4) state->m_cartridge[state->m_current_cartridge].m_tvdraw_data = 4;
927      if (state->m_cartridge[state->m_current_cartridge].m_tvdraw_data > 251) state->m_cartridge[state->m_current_cartridge].m_tvdraw_data = 251;
912      if (m_cartridge[m_current_cartridge].m_tvdraw_data < 4) m_cartridge[m_current_cartridge].m_tvdraw_data = 4;
913      if (m_cartridge[m_current_cartridge].m_tvdraw_data > 251) m_cartridge[m_current_cartridge].m_tvdraw_data = 251;
928914   }
929915   else
930916   {
931      state->m_cartridge[state->m_current_cartridge].m_tvdraw_data = tvboard_on ? input_port_read(space->machine(), "TVDRAW_Y") + 0x20 : 0x80;
917      m_cartridge[m_current_cartridge].m_tvdraw_data = tvboard_on ? input_port_read(machine(), "TVDRAW_Y") + 0x20 : 0x80;
932918   }
933919}
934920
935static READ8_HANDLER( sms_tvdraw_status_r )
921READ8_MEMBER(sms_state::sms_tvdraw_status_r)
936922{
937   UINT8 tvboard_on = input_port_read_safe(space->machine(), "TVDRAW", 0x00);
938   return tvboard_on ? input_port_read(space->machine(), "TVDRAW_PEN") : 0x01;
923   UINT8 tvboard_on = input_port_read_safe(machine(), "TVDRAW", 0x00);
924   return tvboard_on ? input_port_read(machine(), "TVDRAW_PEN") : 0x01;
939925}
940926
941static READ8_HANDLER( sms_tvdraw_data_r )
927READ8_MEMBER(sms_state::sms_tvdraw_data_r)
942928{
943   sms_state *state = space->machine().driver_data<sms_state>();
944   return state->m_cartridge[state->m_current_cartridge].m_tvdraw_data;
929   return m_cartridge[m_current_cartridge].m_tvdraw_data;
945930}
946931
947932
948static WRITE8_HANDLER( sms_93c46_w )
933WRITE8_MEMBER(sms_state::sms_93c46_w)
949934{
950   sms_state *state = space->machine().driver_data<sms_state>();
951935
952   if ( state->m_cartridge[state->m_current_cartridge].m_93c46_enabled )
936   if ( m_cartridge[m_current_cartridge].m_93c46_enabled )
953937   {
954      state->m_cartridge[state->m_current_cartridge].m_93c46_lines = data;
938      m_cartridge[m_current_cartridge].m_93c46_lines = data;
955939
956940      logerror( "sms_93c46_w: setting eeprom lines: DI=%s CLK=%s CS=%s\n", data & 0x01 ? "1" : "0", data & 0x02 ? "1" : "0", data & 0x04 ? "1" : "0" );
957      state->m_eeprom->write_bit( ( data & 0x01 ) ? ASSERT_LINE : CLEAR_LINE );
958      state->m_eeprom->set_cs_line( !( data & 0x04 ) ? ASSERT_LINE : CLEAR_LINE );
959      state->m_eeprom->set_clock_line( ( data & 0x02 ) ? ASSERT_LINE : CLEAR_LINE );
941      m_eeprom->write_bit( ( data & 0x01 ) ? ASSERT_LINE : CLEAR_LINE );
942      m_eeprom->set_cs_line( !( data & 0x04 ) ? ASSERT_LINE : CLEAR_LINE );
943      m_eeprom->set_clock_line( ( data & 0x02 ) ? ASSERT_LINE : CLEAR_LINE );
960944   }
961945}
962946
963947
964static READ8_HANDLER( sms_93c46_r )
948READ8_MEMBER(sms_state::sms_93c46_r)
965949{
966   sms_state *state = space->machine().driver_data<sms_state>();
967   UINT8 data = state->m_banking_cart[5][0];
950   UINT8 data = m_banking_cart[5][0];
968951
969   if ( state->m_cartridge[state->m_current_cartridge].m_93c46_enabled )
952   if ( m_cartridge[m_current_cartridge].m_93c46_enabled )
970953   {
971      data = ( state->m_cartridge[state->m_current_cartridge].m_93c46_lines & 0xFC ) | 0x02;
972      data |= state->m_eeprom->read_bit() ? 1 : 0;
954      data = ( m_cartridge[m_current_cartridge].m_93c46_lines & 0xFC ) | 0x02;
955      data |= m_eeprom->read_bit() ? 1 : 0;
973956   }
974957
975958   return data;
976959}
977960
978961
979WRITE8_HANDLER( sms_mapper_w )
962WRITE8_MEMBER(sms_state::sms_mapper_w)
980963{
981   sms_state *state = space->machine().driver_data<sms_state>();
982964   bool bios_selected = false;
983965   bool cartridge_selected = false;
984966
985967   offset &= 3;
986968
987   state->m_mapper[offset] = data;
988   state->m_mapper_ram[offset] = data;
969   m_mapper[offset] = data;
970   m_mapper_ram[offset] = data;
989971
990   if (state->m_bios_port & IO_BIOS_ROM || (state->m_is_gamegear && state->m_BIOS == NULL))
972   if (m_bios_port & IO_BIOS_ROM || (m_is_gamegear && m_BIOS == NULL))
991973   {
992      if (!(state->m_bios_port & IO_CARTRIDGE) || (state->m_is_gamegear && state->m_BIOS == NULL))
974      if (!(m_bios_port & IO_CARTRIDGE) || (m_is_gamegear && m_BIOS == NULL))
993975      {
994         if (!state->m_cartridge[state->m_current_cartridge].ROM)
976         if (!m_cartridge[m_current_cartridge].ROM)
995977            return;
996978         cartridge_selected = true;
997979      }
r14963r14964
1003985   }
1004986   else
1005987   {
1006      if (!state->m_BIOS)
988      if (!m_BIOS)
1007989         return;
1008990      bios_selected = true;
1009991   }
r14963r14964
1014996      /* Is it ram or rom? */
1015997      if (data & 0x08) /* it's ram */
1016998      {
1017         if ( state->m_cartridge[state->m_current_cartridge].features & CF_93C46_EEPROM )
999         if ( m_cartridge[m_current_cartridge].features & CF_93C46_EEPROM )
10181000         {
10191001            if ( data & 0x80 )
10201002            {
1021               state->m_eeprom->reset();
1003               m_eeprom->reset();
10221004               logerror("sms_mapper_w: eeprom CS=1\n");
1023               state->m_eeprom->set_cs_line( ASSERT_LINE );
1005               m_eeprom->set_cs_line( ASSERT_LINE );
10241006            }
10251007            logerror("sms_mapper_w: eeprom enabled\n");
1026            state->m_cartridge[state->m_current_cartridge].m_93c46_enabled = true;
1008            m_cartridge[m_current_cartridge].m_93c46_enabled = true;
10271009         }
10281010         else
10291011         {
10301012            UINT8 *sram = NULL;
1031            state->m_cartridge[state->m_current_cartridge].sram_save = 1;         /* SRAM should be saved on exit. */
1013            m_cartridge[m_current_cartridge].sram_save = 1;         /* SRAM should be saved on exit. */
10321014            if (data & 0x04)
10331015            {
1034               sram = state->m_cartridge[state->m_current_cartridge].cartSRAM + 0x4000;
1016               sram = m_cartridge[m_current_cartridge].cartSRAM + 0x4000;
10351017            }
10361018            else
10371019            {
1038               sram = state->m_cartridge[state->m_current_cartridge].cartSRAM;
1020               sram = m_cartridge[m_current_cartridge].cartSRAM;
10391021            }
1040            memory_set_bankptr(space->machine(),  "bank5", sram);
1041            memory_set_bankptr(space->machine(),  "bank6", sram + 0x2000);
1022            memory_set_bankptr(machine(),  "bank5", sram);
1023            memory_set_bankptr(machine(),  "bank6", sram + 0x2000);
10421024         }
10431025      }
10441026      else /* it's rom */
10451027      {
1046         if (state->m_bios_port & IO_BIOS_ROM || ! state->m_has_bios)
1028         if (m_bios_port & IO_BIOS_ROM || ! m_has_bios)
10471029         {
1048            if ( ! ( state->m_cartridge[state->m_current_cartridge].features & ( CF_KOREAN_NOBANK_MAPPER | CF_KOREAN_ZEMINA_MAPPER ) ) )
1030            if ( ! ( m_cartridge[m_current_cartridge].features & ( CF_KOREAN_NOBANK_MAPPER | CF_KOREAN_ZEMINA_MAPPER ) ) )
10491031            {
1050               if ( state->m_cartridge[state->m_current_cartridge].features & CF_93C46_EEPROM )
1032               if ( m_cartridge[m_current_cartridge].features & CF_93C46_EEPROM )
10511033               {
10521034                  if ( data & 0x80 )
10531035                  {
1054                     state->m_eeprom->reset();
1036                     m_eeprom->reset();
10551037                     logerror("sms_mapper_w: eeprom CS=1\n");
1056                     state->m_eeprom->set_cs_line( ASSERT_LINE );
1038                     m_eeprom->set_cs_line( ASSERT_LINE );
10571039                  }
10581040                  logerror("sms_mapper_w: eeprom disabled\n");
1059                  state->m_cartridge[state->m_current_cartridge].m_93c46_enabled = false;
1041                  m_cartridge[m_current_cartridge].m_93c46_enabled = false;
10601042               }
10611043               else
10621044               {
1063                  state->map_cart_16k( 0x8000, state->m_mapper[3] );
1045                  map_cart_16k( 0x8000, m_mapper[3] );
10641046               }
10651047            }
10661048         }
10671049         else
10681050         {
1069            state->map_bios_16k( 0x8000, state->m_mapper[3] );
1051            map_bios_16k( 0x8000, m_mapper[3] );
10701052         }
10711053      }
10721054      break;
10731055
10741056   case 1: /* Select 16k ROM bank for 0400-3FFF */
1075      if ( cartridge_selected || state->m_is_gamegear )
1057      if ( cartridge_selected || m_is_gamegear )
10761058      {
1077         if ( ! ( state->m_cartridge[state->m_current_cartridge].features & ( CF_KOREAN_NOBANK_MAPPER | CF_KOREAN_ZEMINA_MAPPER ) ) )
1059         if ( ! ( m_cartridge[m_current_cartridge].features & ( CF_KOREAN_NOBANK_MAPPER | CF_KOREAN_ZEMINA_MAPPER ) ) )
10781060         {
1079            state->map_cart_16k( 0x400, data );
1061            map_cart_16k( 0x400, data );
10801062         }
10811063      }
10821064      if ( bios_selected )
10831065      {
1084         state->map_bios_16k( 0x400, data );
1066         map_bios_16k( 0x400, data );
10851067      }
10861068      break;
10871069
10881070   case 2: /* Select 16k ROM bank for 4000-7FFF */
1089      if ( cartridge_selected || state->m_is_gamegear )
1071      if ( cartridge_selected || m_is_gamegear )
10901072      {
1091         if ( ! ( state->m_cartridge[state->m_current_cartridge].features & ( CF_KOREAN_NOBANK_MAPPER | CF_KOREAN_ZEMINA_MAPPER ) ) )
1073         if ( ! ( m_cartridge[m_current_cartridge].features & ( CF_KOREAN_NOBANK_MAPPER | CF_KOREAN_ZEMINA_MAPPER ) ) )
10921074         {
1093            state->map_cart_16k( 0x4000, data );
1075            map_cart_16k( 0x4000, data );
10941076         }
10951077      }
10961078      if ( bios_selected )
10971079      {
1098         state->map_bios_16k( 0x4000, data );
1080         map_bios_16k( 0x4000, data );
10991081      }
11001082      break;
11011083
11021084   case 3: /* Select 16k ROM bank for 8000-BFFF */
1103      if ( cartridge_selected || state->m_is_gamegear )
1085      if ( cartridge_selected || m_is_gamegear )
11041086      {
1105         if ( state->m_cartridge[state->m_current_cartridge].features & CF_CODEMASTERS_MAPPER)
1087         if ( m_cartridge[m_current_cartridge].features & CF_CODEMASTERS_MAPPER)
11061088         {
11071089            return;
11081090         }
11091091
1110         if ( ! ( state->m_mapper[0] & 0x08 ) )      // Is RAM disabled
1092         if ( ! ( m_mapper[0] & 0x08 ) )      // Is RAM disabled
11111093         {
1112            if ( ! ( state->m_cartridge[state->m_current_cartridge].features & ( CF_KOREAN_NOBANK_MAPPER | CF_KOREAN_ZEMINA_MAPPER ) ) )
1094            if ( ! ( m_cartridge[m_current_cartridge].features & ( CF_KOREAN_NOBANK_MAPPER | CF_KOREAN_ZEMINA_MAPPER ) ) )
11131095            {
1114               state->map_cart_16k( 0x8000, data );
1096               map_cart_16k( 0x8000, data );
11151097            }
11161098         }
11171099      }
11181100
11191101      if ( bios_selected )
11201102      {
1121         if ( ! ( state->m_mapper[0] & 0x08 ) )      // Is RAM disabled
1103         if ( ! ( m_mapper[0] & 0x08 ) )      // Is RAM disabled
11221104         {
1123            state->map_bios_16k( 0x8000, data );
1105            map_bios_16k( 0x8000, data );
11241106         }
11251107      }
11261108      break;
11271109   }
11281110}
11291111
1130static WRITE8_HANDLER( sms_korean_zemina_banksw_w )
1112WRITE8_MEMBER(sms_state::sms_korean_zemina_banksw_w)
11311113{
1132   sms_state *state = space->machine().driver_data<sms_state>();
11331114
1134   if (state->m_cartridge[state->m_current_cartridge].features & CF_KOREAN_ZEMINA_MAPPER)
1115   if (m_cartridge[m_current_cartridge].features & CF_KOREAN_ZEMINA_MAPPER)
11351116   {
1136      if (!state->m_cartridge[state->m_current_cartridge].ROM)
1117      if (!m_cartridge[m_current_cartridge].ROM)
11371118         return;
11381119
11391120      switch (offset & 3)
11401121      {
11411122         case 0:
1142            state->map_cart_8k( 0x8000, data );
1123            map_cart_8k( 0x8000, data );
11431124            break;
11441125         case 1:
1145            state->map_cart_8k( 0xA000, data );
1126            map_cart_8k( 0xA000, data );
11461127            break;
11471128         case 2:
1148            state->map_cart_8k( 0x4000, data );
1129            map_cart_8k( 0x4000, data );
11491130            break;
11501131         case 3:
1151            state->map_cart_8k( 0x6000, data );
1132            map_cart_8k( 0x6000, data );
11521133            break;
11531134      }
11541135      LOG(("Zemina mapper write: offset %x data %x.\n", offset, data));
11551136   }
11561137}
11571138
1158static WRITE8_HANDLER( sms_codemasters_page0_w )
1139WRITE8_MEMBER(sms_state::sms_codemasters_page0_w)
11591140{
1160   sms_state *state = space->machine().driver_data<sms_state>();
11611141
1162   if (state->m_cartridge[state->m_current_cartridge].ROM && state->m_cartridge[state->m_current_cartridge].features & CF_CODEMASTERS_MAPPER)
1142   if (m_cartridge[m_current_cartridge].ROM && m_cartridge[m_current_cartridge].features & CF_CODEMASTERS_MAPPER)
11631143   {
1164      state->map_cart_16k( 0x0000, data );
1144      map_cart_16k( 0x0000, data );
11651145   }
11661146}
11671147
11681148
1169static WRITE8_HANDLER( sms_codemasters_page1_w )
1149WRITE8_MEMBER(sms_state::sms_codemasters_page1_w)
11701150{
1171   sms_state *state = space->machine().driver_data<sms_state>();
11721151
1173   if (state->m_cartridge[state->m_current_cartridge].ROM && state->m_cartridge[state->m_current_cartridge].features & CF_CODEMASTERS_MAPPER)
1152   if (m_cartridge[m_current_cartridge].ROM && m_cartridge[m_current_cartridge].features & CF_CODEMASTERS_MAPPER)
11741153   {
11751154      /* Check if we need to switch in some RAM */
11761155      if (data & 0x80)
11771156      {
1178         state->m_cartridge[state->m_current_cartridge].ram_page = data & 0x07;
1179         memory_set_bankptr(space->machine(), "bank6", state->m_cartridge[state->m_current_cartridge].cartRAM + state->m_cartridge[state->m_current_cartridge].ram_page * 0x2000);
1157         m_cartridge[m_current_cartridge].ram_page = data & 0x07;
1158         memory_set_bankptr(machine(), "bank6", m_cartridge[m_current_cartridge].cartRAM + m_cartridge[m_current_cartridge].ram_page * 0x2000);
11801159      }
11811160      else
11821161      {
1183         state->map_cart_16k( 0x4000, data );
1184         memory_set_bankptr(space->machine(), "bank6", state->m_banking_cart[5] + 0x2000);
1162         map_cart_16k( 0x4000, data );
1163         memory_set_bankptr(machine(), "bank6", m_banking_cart[5] + 0x2000);
11851164      }
11861165   }
11871166}
11881167
11891168
1190WRITE8_HANDLER( sms_4pak_page0_w )
1169WRITE8_MEMBER(sms_state::sms_4pak_page0_w)
11911170{
1192   sms_state *state = space->machine().driver_data<sms_state>();
11931171
1194   state->m_cartridge[state->m_current_cartridge].m_4pak_page0 = data;
1172   m_cartridge[m_current_cartridge].m_4pak_page0 = data;
11951173
1196   state->map_cart_16k( 0x0000, data );
1197   state->map_cart_16k( 0x8000, ( state->m_cartridge[state->m_current_cartridge].m_4pak_page0 & 0x30 ) + state->m_cartridge[state->m_current_cartridge].m_4pak_page2 );
1174   map_cart_16k( 0x0000, data );
1175   map_cart_16k( 0x8000, ( m_cartridge[m_current_cartridge].m_4pak_page0 & 0x30 ) + m_cartridge[m_current_cartridge].m_4pak_page2 );
11981176}
11991177
12001178
1201WRITE8_HANDLER( sms_4pak_page1_w )
1179WRITE8_MEMBER(sms_state::sms_4pak_page1_w)
12021180{
1203   sms_state *state = space->machine().driver_data<sms_state>();
12041181
1205   state->m_cartridge[state->m_current_cartridge].m_4pak_page1 = data;
1182   m_cartridge[m_current_cartridge].m_4pak_page1 = data;
12061183
1207   state->map_cart_16k( 0x4000, data );
1184   map_cart_16k( 0x4000, data );
12081185}
12091186
12101187
1211WRITE8_HANDLER( sms_4pak_page2_w )
1188WRITE8_MEMBER(sms_state::sms_4pak_page2_w)
12121189{
1213   sms_state *state = space->machine().driver_data<sms_state>();
12141190
1215   state->m_cartridge[state->m_current_cartridge].m_4pak_page2 = data;
1191   m_cartridge[m_current_cartridge].m_4pak_page2 = data;
12161192
1217   state->map_cart_16k( 0x8000, ( state->m_cartridge[state->m_current_cartridge].m_4pak_page0 & 0x30 ) + state->m_cartridge[state->m_current_cartridge].m_4pak_page2 );
1193   map_cart_16k( 0x8000, ( m_cartridge[m_current_cartridge].m_4pak_page0 & 0x30 ) + m_cartridge[m_current_cartridge].m_4pak_page2 );
12181194}
12191195
12201196
1221WRITE8_HANDLER( sms_janggun_bank0_w )
1197WRITE8_MEMBER(sms_state::sms_janggun_bank0_w)
12221198{
1223   sms_state *state = space->machine().driver_data<sms_state>();
12241199
1225   state->map_cart_8k( 0x4000, data );
1200   map_cart_8k( 0x4000, data );
12261201}
12271202
12281203
1229WRITE8_HANDLER( sms_janggun_bank1_w )
1204WRITE8_MEMBER(sms_state::sms_janggun_bank1_w)
12301205{
1231   sms_state *state = space->machine().driver_data<sms_state>();
12321206
1233   state->map_cart_8k( 0x6000, data );
1207   map_cart_8k( 0x6000, data );
12341208}
12351209
12361210
1237WRITE8_HANDLER( sms_janggun_bank2_w )
1211WRITE8_MEMBER(sms_state::sms_janggun_bank2_w)
12381212{
1239   sms_state *state = space->machine().driver_data<sms_state>();
12401213
1241   state->map_cart_8k( 0x8000, data );
1214   map_cart_8k( 0x8000, data );
12421215}
12431216
12441217
1245WRITE8_HANDLER( sms_janggun_bank3_w )
1218WRITE8_MEMBER(sms_state::sms_janggun_bank3_w)
12461219{
1247   sms_state *state = space->machine().driver_data<sms_state>();
12481220
1249   state->map_cart_8k( 0xA000, data );
1221   map_cart_8k( 0xA000, data );
12501222}
12511223
12521224
1253WRITE8_HANDLER( sms_bios_w )
1225WRITE8_MEMBER(sms_state::sms_bios_w)
12541226{
1255   sms_state *state = space->machine().driver_data<sms_state>();
1256   state->m_bios_port = data;
1227   m_bios_port = data;
12571228
1258   logerror("bios write %02x, pc: %04x\n", data, cpu_get_pc(&space->device()));
1229   logerror("bios write %02x, pc: %04x\n", data, cpu_get_pc(&space.device()));
12591230
1260   setup_rom(space);
1231   setup_rom(&space);
12611232}
12621233
12631234
1264WRITE8_HANDLER( sms_cartram2_w )
1235WRITE8_MEMBER(sms_state::sms_cartram2_w)
12651236{
1266   sms_state *state = space->machine().driver_data<sms_state>();
12671237
1268   if (state->m_mapper[0] & 0x08)
1238   if (m_mapper[0] & 0x08)
12691239   {
12701240      logerror("write %02X to cartram at offset #%04X\n", data, offset + 0x2000);
1271      if (state->m_mapper[0] & 0x04)
1241      if (m_mapper[0] & 0x04)
12721242      {
1273         state->m_cartridge[state->m_current_cartridge].cartSRAM[offset + 0x6000] = data;
1243         m_cartridge[m_current_cartridge].cartSRAM[offset + 0x6000] = data;
12741244      }
12751245      else
12761246      {
1277         state->m_cartridge[state->m_current_cartridge].cartSRAM[offset + 0x2000] = data;
1247         m_cartridge[m_current_cartridge].cartSRAM[offset + 0x2000] = data;
12781248      }
12791249   }
12801250
1281   if (state->m_cartridge[state->m_current_cartridge].features & CF_CODEMASTERS_MAPPER)
1251   if (m_cartridge[m_current_cartridge].features & CF_CODEMASTERS_MAPPER)
12821252   {
1283      state->m_cartridge[state->m_current_cartridge].cartRAM[state->m_cartridge[state->m_current_cartridge].ram_page * 0x2000 + offset] = data;
1253      m_cartridge[m_current_cartridge].cartRAM[m_cartridge[m_current_cartridge].ram_page * 0x2000 + offset] = data;
12841254   }
12851255
1286   if (state->m_cartridge[state->m_current_cartridge].features & CF_KOREAN_MAPPER && offset == 0) /* Dodgeball King mapper */
1256   if (m_cartridge[m_current_cartridge].features & CF_KOREAN_MAPPER && offset == 0) /* Dodgeball King mapper */
12871257   {
1288      state->map_cart_16k( 0x8000, data );
1258      map_cart_16k( 0x8000, data );
12891259   }
12901260}
12911261
12921262
1293WRITE8_HANDLER( sms_cartram_w )
1263WRITE8_MEMBER(sms_state::sms_cartram_w)
12941264{
1295   sms_state *state = space->machine().driver_data<sms_state>();
12961265   int page;
12971266
1298   if (state->m_mapper[0] & 0x08)
1267   if (m_mapper[0] & 0x08)
12991268   {
13001269      logerror("write %02X to cartram at offset #%04X\n", data, offset);
1301      if (state->m_mapper[0] & 0x04)
1270      if (m_mapper[0] & 0x04)
13021271      {
1303         state->m_cartridge[state->m_current_cartridge].cartSRAM[offset + 0x4000] = data;
1272         m_cartridge[m_current_cartridge].cartSRAM[offset + 0x4000] = data;
13041273      }
13051274      else
13061275      {
1307         state->m_cartridge[state->m_current_cartridge].cartSRAM[offset] = data;
1276         m_cartridge[m_current_cartridge].cartSRAM[offset] = data;
13081277      }
13091278   }
13101279   else
13111280   {
1312      if (state->m_cartridge[state->m_current_cartridge].features & CF_CODEMASTERS_MAPPER && offset == 0) /* Codemasters mapper */
1281      if (m_cartridge[m_current_cartridge].features & CF_CODEMASTERS_MAPPER && offset == 0) /* Codemasters mapper */
13131282      {
1314         UINT8 rom_page_count = state->m_cartridge[state->m_current_cartridge].size / 0x4000;
1283         UINT8 rom_page_count = m_cartridge[m_current_cartridge].size / 0x4000;
13151284         page = (rom_page_count > 0) ? data % rom_page_count : 0;
1316         if (!state->m_cartridge[state->m_current_cartridge].ROM)
1285         if (!m_cartridge[m_current_cartridge].ROM)
13171286            return;
1318         state->m_banking_cart[5] = state->m_cartridge[state->m_current_cartridge].ROM + page * 0x4000;
1319         memory_set_bankptr(space->machine(), "bank5", state->m_banking_cart[5]);
1320         memory_set_bankptr(space->machine(), "bank6", state->m_banking_cart[5] + 0x2000);
1287         m_banking_cart[5] = m_cartridge[m_current_cartridge].ROM + page * 0x4000;
1288         memory_set_bankptr(machine(), "bank5", m_banking_cart[5]);
1289         memory_set_bankptr(machine(), "bank6", m_banking_cart[5] + 0x2000);
13211290         LOG(("rom 2 paged in %x (Codemasters mapper).\n", page));
13221291      }
1323      else if (state->m_cartridge[state->m_current_cartridge].features & CF_ONCART_RAM)
1292      else if (m_cartridge[m_current_cartridge].features & CF_ONCART_RAM)
13241293      {
1325         state->m_cartridge[state->m_current_cartridge].cartRAM[offset & (state->m_cartridge[state->m_current_cartridge].ram_size - 1)] = data;
1294         m_cartridge[m_current_cartridge].cartRAM[offset & (m_cartridge[m_current_cartridge].ram_size - 1)] = data;
13261295      }
13271296      else
13281297      {
r14963r14964
13321301}
13331302
13341303
1335WRITE8_HANDLER( gg_sio_w )
1304WRITE8_MEMBER(sms_state::gg_sio_w)
13361305{
1337   sms_state *state = space->machine().driver_data<sms_state>();
13381306   logerror("*** write %02X to SIO register #%d\n", data, offset);
13391307
1340   state->m_gg_sio[offset & 0x07] = data;
1308   m_gg_sio[offset & 0x07] = data;
13411309   switch (offset & 7)
13421310   {
13431311      case 0x00: /* Parallel Data */
r14963r14964
13581326}
13591327
13601328
1361READ8_HANDLER( gg_sio_r )
1329READ8_MEMBER(sms_state::gg_sio_r)
13621330{
1363   sms_state *state = space->machine().driver_data<sms_state>();
13641331   logerror("*** read SIO register #%d\n", offset);
13651332
13661333   switch (offset & 7)
r14963r14964
13811348         break;
13821349   }
13831350
1384   return state->m_gg_sio[offset];
1351   return m_gg_sio[offset];
13851352}
13861353
13871354static void sms_machine_stop( running_machine &machine )
r14963r14964
19991966   if ( state->m_cartridge[state->m_current_cartridge].features & CF_CODEMASTERS_MAPPER )
20001967   {
20011968      /* Install special memory handlers */
2002      space->install_legacy_write_handler(0x0000, 0x0000, FUNC(sms_codemasters_page0_w));
2003      space->install_legacy_write_handler(0x4000, 0x4000, FUNC(sms_codemasters_page1_w));
1969      space->install_write_handler(0x0000, 0x0000, write8_delegate(FUNC(sms_state::sms_codemasters_page0_w),state));
1970      space->install_write_handler(0x4000, 0x4000, write8_delegate(FUNC(sms_state::sms_codemasters_page1_w),state));
20041971   }
20051972
20061973   if ( state->m_cartridge[state->m_current_cartridge].features & CF_KOREAN_ZEMINA_MAPPER )
20071974   {
2008      space->install_legacy_write_handler(0x0000, 0x0003, FUNC(sms_korean_zemina_banksw_w));
1975      space->install_write_handler(0x0000, 0x0003, write8_delegate(FUNC(sms_state::sms_korean_zemina_banksw_w),state));
20091976   }
20101977
20111978   if ( state->m_cartridge[state->m_current_cartridge].features & CF_JANGGUN_MAPPER )
20121979   {
2013      space->install_legacy_write_handler(0x4000, 0x4000, FUNC(sms_janggun_bank0_w));
2014      space->install_legacy_write_handler(0x6000, 0x6000, FUNC(sms_janggun_bank1_w));
2015      space->install_legacy_write_handler(0x8000, 0x8000, FUNC(sms_janggun_bank2_w));
2016      space->install_legacy_write_handler(0xA000, 0xA000, FUNC(sms_janggun_bank3_w));
1980      space->install_write_handler(0x4000, 0x4000, write8_delegate(FUNC(sms_state::sms_janggun_bank0_w),state));
1981      space->install_write_handler(0x6000, 0x6000, write8_delegate(FUNC(sms_state::sms_janggun_bank1_w),state));
1982      space->install_write_handler(0x8000, 0x8000, write8_delegate(FUNC(sms_state::sms_janggun_bank2_w),state));
1983      space->install_write_handler(0xA000, 0xA000,write8_delegate(FUNC(sms_state::sms_janggun_bank3_w),state));
20171984   }
20181985
20191986   if ( state->m_cartridge[state->m_current_cartridge].features & CF_4PAK_MAPPER )
20201987   {
2021      space->install_legacy_write_handler(0x3ffe, 0x3ffe, FUNC(sms_4pak_page0_w));
2022      space->install_legacy_write_handler(0x7fff, 0x7fff, FUNC(sms_4pak_page1_w));
2023      space->install_legacy_write_handler(0xbfff, 0xbfff, FUNC(sms_4pak_page2_w));
1988      space->install_write_handler(0x3ffe, 0x3ffe, write8_delegate(FUNC(sms_state::sms_4pak_page0_w),state));
1989      space->install_write_handler(0x7fff, 0x7fff, write8_delegate(FUNC(sms_state::sms_4pak_page1_w),state));
1990      space->install_write_handler(0xbfff, 0xbfff, write8_delegate(FUNC(sms_state::sms_4pak_page2_w),state));
20241991   }
20251992
20261993   if ( state->m_cartridge[state->m_current_cartridge].features & CF_TVDRAW )
20271994   {
2028      space->install_legacy_write_handler(0x6000, 0x6000, FUNC(sms_tvdraw_axis_w));
2029      space->install_legacy_read_handler(0x8000, 0x8000, FUNC(sms_tvdraw_status_r));
2030      space->install_legacy_read_handler(0xa000, 0xa000, FUNC(sms_tvdraw_data_r));
1995      space->install_write_handler(0x6000, 0x6000, write8_delegate(FUNC(sms_state::sms_tvdraw_axis_w),state));
1996      space->install_read_handler(0x8000, 0x8000, read8_delegate(FUNC(sms_state::sms_tvdraw_status_r),state));
1997      space->install_read_handler(0xa000, 0xa000, read8_delegate(FUNC(sms_state::sms_tvdraw_data_r),state));
20311998      space->nop_write(0xa000, 0xa000);
20321999      state->m_cartridge[state->m_current_cartridge].m_tvdraw_data = 0;
20332000   }
20342001
20352002   if ( state->m_cartridge[state->m_current_cartridge].features & CF_93C46_EEPROM )
20362003   {
2037      space->install_legacy_write_handler(0x8000,0x8000, FUNC(sms_93c46_w));
2038      space->install_legacy_read_handler(0x8000,0x8000, FUNC(sms_93c46_r));
2004      space->install_write_handler(0x8000,0x8000, write8_delegate(FUNC(sms_state::sms_93c46_w),state));
2005      space->install_read_handler(0x8000,0x8000, read8_delegate(FUNC(sms_state::sms_93c46_r),state));
20392006   }
20402007
20412008   if (state->m_cartridge[state->m_current_cartridge].features & CF_GG_SMS_MODE)
r14963r14964
20792046   state->m_sscope_state = 0;
20802047}
20812048
2082READ8_HANDLER( sms_store_cart_select_r )
2049READ8_MEMBER(sms_state::sms_store_cart_select_r)
20832050{
20842051   return 0xff;
20852052}
20862053
20872054
2088WRITE8_HANDLER( sms_store_cart_select_w )
2055WRITE8_MEMBER(sms_state::sms_store_cart_select_w)
20892056{
2090   sms_state *state = space->machine().driver_data<sms_state>();
20912057   UINT8 slot = data >> 4;
20922058   UINT8 slottype = data & 0x08;
20932059
20942060   logerror("switching in part of %s slot #%d\n", slottype ? "card" : "cartridge", slot );
20952061   /* cartridge? slot #0 */
20962062   if (slottype == 0)
2097      state->m_current_cartridge = slot;
2063      m_current_cartridge = slot;
20982064
2099   setup_cart_banks(space->machine());
2100   memory_set_bankptr(space->machine(), "bank10", state->m_banking_cart[3] + 0x2000);
2101   setup_rom(space);
2065   setup_cart_banks(machine());
2066   memory_set_bankptr(machine(), "bank10", m_banking_cart[3] + 0x2000);
2067   setup_rom(&space);
21022068}
21032069
21042070
2105READ8_HANDLER( sms_store_select1 )
2071READ8_MEMBER(sms_state::sms_store_select1)
21062072{
21072073   return 0xff;
21082074}
21092075
21102076
2111READ8_HANDLER( sms_store_select2 )
2077READ8_MEMBER(sms_state::sms_store_select2)
21122078{
21132079   return 0xff;
21142080}
21152081
21162082
2117READ8_HANDLER( sms_store_control_r )
2083READ8_MEMBER(sms_state::sms_store_control_r)
21182084{
2119   sms_state *state = space->machine().driver_data<sms_state>();
2120   return state->m_store_control;
2085   return m_store_control;
21212086}
21222087
21232088
2124WRITE8_HANDLER( sms_store_control_w )
2089WRITE8_MEMBER(sms_state::sms_store_control_w)
21252090{
2126   sms_state *state = space->machine().driver_data<sms_state>();
2127   logerror("0x%04X: sms_store_control write 0x%02X\n", cpu_get_pc(&space->device()), data);
2091   logerror("0x%04X: sms_store_control write 0x%02X\n", cpu_get_pc(&space.device()), data);
21282092   if (data & 0x02)
21292093   {
2130      space->machine().device<cpu_device>("maincpu")->resume(SUSPEND_REASON_HALT);
2094      machine().device<cpu_device>("maincpu")->resume(SUSPEND_REASON_HALT);
21312095   }
21322096   else
21332097   {
21342098      /* Pull reset line of CPU #0 low */
2135      space->machine().device("maincpu")->reset();
2136      space->machine().device<cpu_device>("maincpu")->suspend(SUSPEND_REASON_HALT, 1);
2099      machine().device("maincpu")->reset();
2100      machine().device<cpu_device>("maincpu")->suspend(SUSPEND_REASON_HALT, 1);
21372101   }
2138   state->m_store_control = data;
2102   m_store_control = data;
21392103}
21402104
21412105WRITE_LINE_DEVICE_HANDLER( sms_store_int_callback )
src/mess/machine/llc.c
r14963r14964
128128
129129}
130130
131WRITE8_HANDLER( llc2_rom_disable_w )
131WRITE8_MEMBER(llc_state::llc2_rom_disable_w)
132132{
133   address_space *mem_space = space->machine().device("maincpu")->memory().space(AS_PROGRAM);
134   UINT8 *ram = space->machine().device<ram_device>(RAM_TAG)->pointer();
133   address_space *mem_space = machine().device("maincpu")->memory().space(AS_PROGRAM);
134   UINT8 *ram = machine().device<ram_device>(RAM_TAG)->pointer();
135135
136136   mem_space->install_write_bank(0x0000, 0xbfff, "bank1");
137   memory_set_bankptr(space->machine(), "bank1", ram);
137   memory_set_bankptr(machine(), "bank1", ram);
138138
139139   mem_space->install_write_bank(0x4000, 0x5fff, "bank2");
140   memory_set_bankptr(space->machine(), "bank2", ram + 0x4000);
140   memory_set_bankptr(machine(), "bank2", ram + 0x4000);
141141
142142   mem_space->install_write_bank(0x6000, 0xbfff, "bank3");
143   memory_set_bankptr(space->machine(), "bank3", ram + 0x6000);
143   memory_set_bankptr(machine(), "bank3", ram + 0x6000);
144144
145145   mem_space->install_write_bank(0xc000, 0xffff, "bank4");
146   memory_set_bankptr(space->machine(), "bank4", ram + 0xc000);
146   memory_set_bankptr(machine(), "bank4", ram + 0xc000);
147147
148148}
149149
150WRITE8_HANDLER( llc2_basic_enable_w )
150WRITE8_MEMBER(llc_state::llc2_basic_enable_w)
151151{
152152
153   address_space *mem_space = space->machine().device("maincpu")->memory().space(AS_PROGRAM);
153   address_space *mem_space = machine().device("maincpu")->memory().space(AS_PROGRAM);
154154   if (data & 0x02) {
155155      mem_space->unmap_write(0x4000, 0x5fff);
156      memory_set_bankptr(space->machine(), "bank2", space->machine().region("maincpu")->base() + 0x10000);
156      memory_set_bankptr(machine(), "bank2", machine().region("maincpu")->base() + 0x10000);
157157   } else {
158158      mem_space->install_write_bank(0x4000, 0x5fff, "bank2");
159      memory_set_bankptr(space->machine(), "bank2", space->machine().device<ram_device>(RAM_TAG)->pointer() + 0x4000);
159      memory_set_bankptr(machine(), "bank2", machine().device<ram_device>(RAM_TAG)->pointer() + 0x4000);
160160   }
161161
162162}
src/mess/machine/odyssey2.c
r14963r14964
3939   drvstate->m_the_voice_lrq_state = state;
4040}
4141
42READ8_HANDLER( odyssey2_t0_r ) {
43   odyssey2_state *state = space->machine().driver_data<odyssey2_state>();
44   return ( state->m_the_voice_lrq_state == ASSERT_LINE ) ? 0 : 1;
42READ8_MEMBER(odyssey2_state::odyssey2_t0_r){
43   return ( m_the_voice_lrq_state == ASSERT_LINE ) ? 0 : 1;
4544}
4645
4746DRIVER_INIT( odyssey2 )
r14963r14964
8584
8685/****** External RAM ******************************/
8786
88READ8_HANDLER( odyssey2_bus_r )
87READ8_MEMBER(odyssey2_state::odyssey2_bus_r)
8988{
90   odyssey2_state *state = space->machine().driver_data<odyssey2_state>();
91    if ((state->m_p1 & (P1_VDC_COPY_MODE_ENABLE | P1_VDC_ENABLE)) == 0)
89    if ((m_p1 & (P1_VDC_COPY_MODE_ENABLE | P1_VDC_ENABLE)) == 0)
9290      return odyssey2_video_r(space, offset); /* seems to have higher priority than ram??? */
9391
94    else if (!(state->m_p1 & P1_EXT_RAM_ENABLE))
95      return state->m_ram[offset];
92    else if (!(m_p1 & P1_EXT_RAM_ENABLE))
93      return m_ram[offset];
9694
9795    return 0;
9896}
9997
100WRITE8_HANDLER( odyssey2_bus_w )
98WRITE8_MEMBER(odyssey2_state::odyssey2_bus_w)
10199{
102   odyssey2_state *state = space->machine().driver_data<odyssey2_state>();
103    if ((state->m_p1 & (P1_EXT_RAM_ENABLE | P1_VDC_COPY_MODE_ENABLE)) == 0x00) {
104      state->m_ram[offset] = data;
100    if ((m_p1 & (P1_EXT_RAM_ENABLE | P1_VDC_COPY_MODE_ENABLE)) == 0x00) {
101      m_ram[offset] = data;
105102      if ( offset & 0x80 ) {
106103         if ( data & 0x20 ) {
107            logerror("voice write %02X, data = %02X (p1 = %02X)\n", offset, data, state->m_p1 );
108            sp0256_ALD_w( space->machine().device("sp0256_speech"), 0, offset & 0x7F );
104            logerror("voice write %02X, data = %02X (p1 = %02X)\n", offset, data, m_p1 );
105            sp0256_ALD_w( machine().device("sp0256_speech"), 0, offset & 0x7F );
109106         } else {
110107            /* TODO: Reset sp0256 in this case */
111108         }
112109      }
113110   }
114111
115    else if (!(state->m_p1 & P1_VDC_ENABLE))
112    else if (!(m_p1 & P1_VDC_ENABLE))
116113      odyssey2_video_w(space, offset, data);
117114}
118115
119READ8_HANDLER( g7400_bus_r )
116READ8_MEMBER(odyssey2_state::g7400_bus_r)
120117{
121   odyssey2_state *state = space->machine().driver_data<odyssey2_state>();
122   if ((state->m_p1 & (P1_VDC_COPY_MODE_ENABLE | P1_VDC_ENABLE)) == 0) {
118   if ((m_p1 & (P1_VDC_COPY_MODE_ENABLE | P1_VDC_ENABLE)) == 0) {
123119      return odyssey2_video_r(space, offset); /* seems to have higher priority than ram??? */
124120   }
125   else if (!(state->m_p1 & P1_EXT_RAM_ENABLE)) {
126      return state->m_ram[offset];
121   else if (!(m_p1 & P1_EXT_RAM_ENABLE)) {
122      return m_ram[offset];
127123   } else {
128124//      return ef9341_r( offset & 0x02, offset & 0x01 );
129125   }
r14963r14964
131127   return 0;
132128}
133129
134WRITE8_HANDLER( g7400_bus_w )
130WRITE8_MEMBER(odyssey2_state::g7400_bus_w)
135131{
136   odyssey2_state *state = space->machine().driver_data<odyssey2_state>();
137   if ((state->m_p1 & (P1_EXT_RAM_ENABLE | P1_VDC_COPY_MODE_ENABLE)) == 0x00) {
138      state->m_ram[offset] = data;
132   if ((m_p1 & (P1_EXT_RAM_ENABLE | P1_VDC_COPY_MODE_ENABLE)) == 0x00) {
133      m_ram[offset] = data;
139134   }
140   else if (!(state->m_p1 & P1_VDC_ENABLE)) {
135   else if (!(m_p1 & P1_VDC_ENABLE)) {
141136      odyssey2_video_w(space, offset, data);
142137   } else {
143138//      ef9341_w( offset & 0x02, offset & 0x01, data );
r14963r14964
146141
147142/***** 8048 Ports ************************/
148143
149READ8_HANDLER( odyssey2_getp1 )
144READ8_MEMBER(odyssey2_state::odyssey2_getp1)
150145{
151   odyssey2_state *state = space->machine().driver_data<odyssey2_state>();
152   UINT8 data = state->m_p1;
146   UINT8 data = m_p1;
153147
154   logerror("%.9f p1 read %.2x\n", space->machine().time().as_double(), data);
148   logerror("%.9f p1 read %.2x\n", machine().time().as_double(), data);
155149   return data;
156150}
157151
158WRITE8_HANDLER( odyssey2_putp1 )
152WRITE8_MEMBER(odyssey2_state::odyssey2_putp1)
159153{
160   odyssey2_state *state = space->machine().driver_data<odyssey2_state>();
161   state->m_p1 = data;
154   m_p1 = data;
162155
163   odyssey2_switch_banks(space->machine());
156   odyssey2_switch_banks(machine());
164157
165   odyssey2_lum_w ( space, 0, state->m_p1 >> 7 );
158   odyssey2_lum_w ( space, 0, m_p1 >> 7 );
166159
167   logerror("%.6f p1 written %.2x\n", space->machine().time().as_double(), data);
160   logerror("%.6f p1 written %.2x\n", machine().time().as_double(), data);
168161}
169162
170READ8_HANDLER( odyssey2_getp2 )
163READ8_MEMBER(odyssey2_state::odyssey2_getp2)
171164{
172   odyssey2_state *state = space->machine().driver_data<odyssey2_state>();
173165    UINT8 h = 0xFF;
174166    int i, j;
175167   static const char *const keynames[] = { "KEY0", "KEY1", "KEY2", "KEY3", "KEY4", "KEY5" };
176168
177    if (!(state->m_p1 & P1_KEYBOARD_SCAN_ENABLE))
169    if (!(m_p1 & P1_KEYBOARD_SCAN_ENABLE))
178170   {
179      if ((state->m_p2 & P2_KEYBOARD_SELECT_MASK) <= 5)  /* read keyboard */
171      if ((m_p2 & P2_KEYBOARD_SELECT_MASK) <= 5)  /* read keyboard */
180172      {
181         h &= input_port_read(space->machine(), keynames[state->m_p2 & P2_KEYBOARD_SELECT_MASK]);
173         h &= input_port_read(machine(), keynames[m_p2 & P2_KEYBOARD_SELECT_MASK]);
182174      }
183175
184176      for (i= 0x80, j = 0; i > 0; i >>= 1, j++)
185177      {
186178         if (!(h & i))
187179         {
188            state->m_p2 &= ~0x10;                   /* set key was pressed indicator */
189            state->m_p2 = (state->m_p2 & ~0xE0) | (j << 5);  /* column that was pressed */
180            m_p2 &= ~0x10;                   /* set key was pressed indicator */
181            m_p2 = (m_p2 & ~0xE0) | (j << 5);  /* column that was pressed */
190182
191183            break;
192184         }
193185      }
194186
195187        if (h == 0xFF)  /* active low inputs, so no keypresses */
196            state->m_p2 = state->m_p2 | 0xF0;
188            m_p2 = m_p2 | 0xF0;
197189    }
198190
199191    else
200        state->m_p2 = state->m_p2 | 0xF0;
192        m_p2 = m_p2 | 0xF0;
201193
202    logerror("%.6f p2 read %.2x\n", space->machine().time().as_double(), state->m_p2);
203    return state->m_p2;
194    logerror("%.6f p2 read %.2x\n", machine().time().as_double(), m_p2);
195    return m_p2;
204196}
205197
206WRITE8_HANDLER( odyssey2_putp2 )
198WRITE8_MEMBER(odyssey2_state::odyssey2_putp2)
207199{
208   odyssey2_state *state = space->machine().driver_data<odyssey2_state>();
209    state->m_p2 = data;
200    m_p2 = data;
210201
211    logerror("%.6f p2 written %.2x\n", space->machine().time().as_double(), data);
202    logerror("%.6f p2 written %.2x\n", machine().time().as_double(), data);
212203}
213204
214READ8_HANDLER( odyssey2_getbus )
205READ8_MEMBER(odyssey2_state::odyssey2_getbus)
215206{
216   odyssey2_state *state = space->machine().driver_data<odyssey2_state>();
217207    UINT8 data = 0xff;
218208
219    if ((state->m_p2 & P2_KEYBOARD_SELECT_MASK) == 1)
220      data &= input_port_read(space->machine(), "JOY0");       /* read joystick 1 */
209    if ((m_p2 & P2_KEYBOARD_SELECT_MASK) == 1)
210      data &= input_port_read(machine(), "JOY0");       /* read joystick 1 */
221211
222    if ((state->m_p2 & P2_KEYBOARD_SELECT_MASK) == 0)
223      data &= input_port_read(space->machine(), "JOY1");       /* read joystick 2 */
212    if ((m_p2 & P2_KEYBOARD_SELECT_MASK) == 0)
213      data &= input_port_read(machine(), "JOY1");       /* read joystick 2 */
224214
225    logerror("%.6f bus read %.2x\n", space->machine().time().as_double(), data);
215    logerror("%.6f bus read %.2x\n", machine().time().as_double(), data);
226216    return data;
227217}
228218
229WRITE8_HANDLER( odyssey2_putbus )
219WRITE8_MEMBER(odyssey2_state::odyssey2_putbus)
230220{
231    logerror("%.6f bus written %.2x\n", space->machine().time().as_double(), data);
221    logerror("%.6f bus written %.2x\n", machine().time().as_double(), data);
232222}
233223
234224///////////////////////////////////
src/mess/machine/ti85.c
r14963r14964
225225
226226/* I/O ports handlers */
227227
228READ8_HANDLER ( ti85_port_0000_r )
228READ8_MEMBER(ti85_state::ti85_port_0000_r)
229229{
230230   return 0xff;
231231}
232232
233READ8_HANDLER ( ti8x_keypad_r )
233READ8_MEMBER(ti85_state::ti8x_keypad_r)
234234{
235   ti85_state *state = space->machine().driver_data<ti85_state>();
236235   int data = 0xff;
237236   int port;
238237   int bit;
239238   static const char *const bitnames[] = { "BIT0", "BIT1", "BIT2", "BIT3", "BIT4", "BIT5", "BIT6", "BIT7" };
240239
241   if (state->m_keypad_mask == 0x7f) return data;
240   if (m_keypad_mask == 0x7f) return data;
242241
243242   for (bit = 0; bit < 7; bit++)
244243   {
245      if (~state->m_keypad_mask&(0x01<<bit))
244      if (~m_keypad_mask&(0x01<<bit))
246245      {
247246         for (port = 0; port < 8; port++)
248247         {
249            data ^= input_port_read(space->machine(), bitnames[port]) & (0x01<<bit) ? 0x01<<port : 0x00;
248            data ^= input_port_read(machine(), bitnames[port]) & (0x01<<bit) ? 0x01<<port : 0x00;
250249         }
251250      }
252251   }
253252   return data;
254253}
255254
256 READ8_HANDLER ( ti85_port_0002_r )
255 READ8_MEMBER(ti85_state::ti85_port_0002_r )
257256{
258257   return 0xff;
259258}
260259
261 READ8_HANDLER ( ti85_port_0003_r )
260 READ8_MEMBER(ti85_state::ti85_port_0003_r )
262261{
263   ti85_state *state = space->machine().driver_data<ti85_state>();
264262   int data = 0;
265263
266   if (state->m_LCD_status)
267      data |= state->m_LCD_mask;
268   if (state->m_ON_interrupt_status)
264   if (m_LCD_status)
265      data |= m_LCD_mask;
266   if (m_ON_interrupt_status)
269267      data |= 0x01;
270   if (state->m_timer_interrupt_status)
268   if (m_timer_interrupt_status)
271269      data |= 0x04;
272   if (!state->m_ON_pressed)
270   if (!m_ON_pressed)
273271      data |= 0x08;
274   state->m_ON_interrupt_status = 0;
275   state->m_timer_interrupt_status = 0;
272   m_ON_interrupt_status = 0;
273   m_timer_interrupt_status = 0;
276274   return data;
277275}
278276
279 READ8_HANDLER ( ti85_port_0004_r )
277 READ8_MEMBER(ti85_state::ti85_port_0004_r )
280278{
281279   return 0xff;
282280}
283281
284 READ8_HANDLER ( ti85_port_0005_r )
282 READ8_MEMBER(ti85_state::ti85_port_0005_r )
285283{
286   ti85_state *state = space->machine().driver_data<ti85_state>();
287   return state->m_ti8x_memory_page_1;
284   return m_ti8x_memory_page_1;
288285}
289286
290READ8_HANDLER ( ti85_port_0006_r )
287READ8_MEMBER(ti85_state::ti85_port_0006_r)
291288{
292   ti85_state *state = space->machine().driver_data<ti85_state>();
293   return state->m_power_mode;
289   return m_power_mode;
294290}
295291
296READ8_HANDLER ( ti8x_serial_r )
292READ8_MEMBER(ti85_state::ti8x_serial_r)
297293{
298   ti85_state *state = space->machine().driver_data<ti85_state>();
299294
300   //ti85_update_serial(state->m_serial);
301   return (state->m_white_out<<3)
302      | (state->m_red_out<<2)
303      //| ((ti85serial_white_in(state->m_serial,0)&(1-state->m_white_out))<<1)
304      //| (ti85serial_red_in(state->m_serial,0)&(1-state->m_red_out))
295   //ti85_update_serial(m_serial);
296   return (m_white_out<<3)
297      | (m_red_out<<2)
298      //| ((ti85serial_white_in(m_serial,0)&(1-m_white_out))<<1)
299      //| (ti85serial_red_in(m_serial,0)&(1-m_red_out))
305300      | 0x03   // no link cable
306      | state->m_PCR;
301      | m_PCR;
307302}
308303
309 READ8_HANDLER ( ti82_port_0002_r )
304READ8_MEMBER(ti85_state::ti82_port_0002_r )
310305{
311   ti85_state *state = space->machine().driver_data<ti85_state>();
312   return state->m_ti8x_port2;
306   return m_ti8x_port2;
313307}
314308
315READ8_HANDLER ( ti86_port_0005_r )
309READ8_MEMBER(ti85_state::ti86_port_0005_r)
316310{
317   ti85_state *state = space->machine().driver_data<ti85_state>();
318   return state->m_ti8x_memory_page_1;
311   return m_ti8x_memory_page_1;
319312}
320313
321 READ8_HANDLER ( ti86_port_0006_r )
314READ8_MEMBER(ti85_state::ti86_port_0006_r )
322315{
323   ti85_state *state = space->machine().driver_data<ti85_state>();
324   return state->m_ti8x_memory_page_2;
316   return m_ti8x_memory_page_2;
325317}
326318
327READ8_HANDLER ( ti83_port_0000_r )
319READ8_MEMBER(ti85_state::ti83_port_0000_r)
328320{
329   ti85_state *state = space->machine().driver_data<ti85_state>();
330   return ((state->m_ti8x_memory_page_1 & 0x08) << 1) | 0x0C;
321   return ((m_ti8x_memory_page_1 & 0x08) << 1) | 0x0C;
331322}
332323
333 READ8_HANDLER ( ti83_port_0002_r )
324READ8_MEMBER(ti85_state::ti83_port_0002_r )
334325{
335   ti85_state *state = space->machine().driver_data<ti85_state>();
336   return state->m_ti8x_port2;
326   return m_ti8x_port2;
337327}
338328
339 READ8_HANDLER ( ti83_port_0003_r )
329READ8_MEMBER(ti85_state::ti83_port_0003_r )
340330{
341   ti85_state *state = space->machine().driver_data<ti85_state>();
342331   int data = 0;
343332
344   data |= state->m_LCD_mask;
333   data |= m_LCD_mask;
345334
346   if (state->m_ON_interrupt_status)
335   if (m_ON_interrupt_status)
347336      data |= 0x01;
348   if (!state->m_ON_pressed)
337   if (!m_ON_pressed)
349338      data |= 0x08;
350   state->m_ON_interrupt_status = 0;
351   state->m_timer_interrupt_status = 0;
339   m_ON_interrupt_status = 0;
340   m_timer_interrupt_status = 0;
352341   return data;
353342}
354343
355READ8_HANDLER ( ti8x_plus_serial_r )
344READ8_MEMBER(ti85_state::ti8x_plus_serial_r)
356345{
357   ti85_state *state = space->machine().driver_data<ti85_state>();
358346
359   //ti85_update_serial(state->m_serial);
360   return (state->m_white_out<<3)
361      | (state->m_red_out<<2)
362      //| ((ti85serial_white_in(state->m_serial,0)&(1-state->m_white_out))<<1)
363      //| (ti85serial_red_in(state->m_serial,0)&(1-state->m_red_out))
347   //ti85_update_serial(m_serial);
348   return (m_white_out<<3)
349      | (m_red_out<<2)
350      //| ((ti85serial_white_in(m_serial,0)&(1-m_white_out))<<1)
351      //| (ti85serial_red_in(m_serial,0)&(1-m_red_out))
364352      | 0x03   // no link cable
365      | state->m_PCR;
353      | m_PCR;
366354}
367355
368 READ8_HANDLER ( ti83p_port_0002_r )
356READ8_MEMBER(ti85_state::ti83p_port_0002_r )
369357{
370   ti85_state *state = space->machine().driver_data<ti85_state>();
371   return state->m_ti8x_port2|3;
358   return m_ti8x_port2|3;
372359}
373360
374WRITE8_HANDLER ( ti81_port_0007_w )
361WRITE8_MEMBER(ti85_state::ti81_port_0007_w)
375362{
376   ti85_state *state = space->machine().driver_data<ti85_state>();
377   state->m_ti81_port_7_data = data;
363   m_ti81_port_7_data = data;
378364}
379365
380WRITE8_HANDLER ( ti85_port_0000_w )
366WRITE8_MEMBER(ti85_state::ti85_port_0000_w)
381367{
382   ti85_state *state = space->machine().driver_data<ti85_state>();
383   state->m_LCD_memory_base = data;
368   m_LCD_memory_base = data;
384369}
385370
386WRITE8_HANDLER ( ti8x_keypad_w )
371WRITE8_MEMBER(ti85_state::ti8x_keypad_w)
387372{
388   ti85_state *state = space->machine().driver_data<ti85_state>();
389   state->m_keypad_mask = data&0x7f;
373   m_keypad_mask = data&0x7f;
390374}
391375
392WRITE8_HANDLER ( ti85_port_0002_w )
376WRITE8_MEMBER(ti85_state::ti85_port_0002_w)
393377{
394   ti85_state *state = space->machine().driver_data<ti85_state>();
395   state->m_LCD_contrast = data&0x1f;
378   m_LCD_contrast = data&0x1f;
396379}
397380
398WRITE8_HANDLER ( ti85_port_0003_w )
381WRITE8_MEMBER(ti85_state::ti85_port_0003_w)
399382{
400   ti85_state *state = space->machine().driver_data<ti85_state>();
401   if (state->m_LCD_status && !(data&0x08))   state->m_timer_interrupt_mask = 0;
402   state->m_ON_interrupt_mask = data&0x01;
403//  state->m_timer_interrupt_mask = data&0x04;
404   state->m_LCD_mask = data&0x02;
405   state->m_LCD_status = data&0x08;
383   if (m_LCD_status && !(data&0x08))   m_timer_interrupt_mask = 0;
384   m_ON_interrupt_mask = data&0x01;
385//  m_timer_interrupt_mask = data&0x04;
386   m_LCD_mask = data&0x02;
387   m_LCD_status = data&0x08;
406388}
407389
408WRITE8_HANDLER ( ti85_port_0004_w )
390WRITE8_MEMBER(ti85_state::ti85_port_0004_w)
409391{
410   ti85_state *state = space->machine().driver_data<ti85_state>();
411   state->m_video_buffer_width = (data>>3)&0x03;
412   state->m_interrupt_speed = (data>>1)&0x03;
413   state->m_port4_bit0 = data&0x01;
392   m_video_buffer_width = (data>>3)&0x03;
393   m_interrupt_speed = (data>>1)&0x03;
394   m_port4_bit0 = data&0x01;
414395}
415396
416WRITE8_HANDLER ( ti85_port_0005_w )
397WRITE8_MEMBER(ti85_state::ti85_port_0005_w)
417398{
418   ti85_state *state = space->machine().driver_data<ti85_state>();
419   state->m_ti8x_memory_page_1 = data;
420   update_ti85_memory(space->machine());
399   m_ti8x_memory_page_1 = data;
400   update_ti85_memory(machine());
421401}
422402
423WRITE8_HANDLER ( ti85_port_0006_w )
403WRITE8_MEMBER(ti85_state::ti85_port_0006_w)
424404{
425   ti85_state *state = space->machine().driver_data<ti85_state>();
426   state->m_power_mode = data;
405   m_power_mode = data;
427406}
428407
429WRITE8_HANDLER ( ti8x_serial_w )
408WRITE8_MEMBER(ti85_state::ti8x_serial_w)
430409{
431   ti85_state *state = space->machine().driver_data<ti85_state>();
432410
433   speaker_level_w(state->m_speaker, ( (data>>2)|(data>>3) ) & 0x01);
434   state->m_red_out=(data>>2)&0x01;
435   state->m_white_out=(data>>3)&0x01;
436   //ti85serial_red_out( state->m_serial, 0, state->m_red_out );
437   //ti85serial_white_out( state->m_serial, 0, state->m_white_out );
438   //ti85_update_serial(state->m_serial);
439   state->m_PCR = data&0xf0;
411   speaker_level_w(m_speaker, ( (data>>2)|(data>>3) ) & 0x01);
412   m_red_out=(data>>2)&0x01;
413   m_white_out=(data>>3)&0x01;
414   //ti85serial_red_out( m_serial, 0, m_red_out );
415   //ti85serial_white_out( m_serial, 0, m_white_out );
416   //ti85_update_serial(m_serial);
417   m_PCR = data&0xf0;
440418}
441419
442WRITE8_HANDLER ( ti86_port_0005_w )
420WRITE8_MEMBER(ti85_state::ti86_port_0005_w)
443421{
444   ti85_state *state = space->machine().driver_data<ti85_state>();
445   state->m_ti8x_memory_page_1 = data&((data&0x40)?0x47:0x4f);
446   update_ti86_memory(space->machine());
422   m_ti8x_memory_page_1 = data&((data&0x40)?0x47:0x4f);
423   update_ti86_memory(machine());
447424}
448425
449WRITE8_HANDLER ( ti86_port_0006_w )
426WRITE8_MEMBER(ti85_state::ti86_port_0006_w)
450427{
451   ti85_state *state = space->machine().driver_data<ti85_state>();
452   state->m_ti8x_memory_page_2 = data&((data&0x40)?0x47:0x4f);
453   update_ti86_memory(space->machine());
428   m_ti8x_memory_page_2 = data&((data&0x40)?0x47:0x4f);
429   update_ti86_memory(machine());
454430}
455431
456WRITE8_HANDLER ( ti82_port_0002_w )
432WRITE8_MEMBER(ti85_state::ti82_port_0002_w)
457433{
458   ti85_state *state = space->machine().driver_data<ti85_state>();
459   state->m_ti8x_memory_page_1 = (data & 0x07);
460   update_ti85_memory(space->machine());
461   state->m_ti8x_port2 = data;
434   m_ti8x_memory_page_1 = (data & 0x07);
435   update_ti85_memory(machine());
436   m_ti8x_port2 = data;
462437}
463438
464WRITE8_HANDLER ( ti83_port_0000_w )
439WRITE8_MEMBER(ti85_state::ti83_port_0000_w)
465440{
466   ti85_state *state = space->machine().driver_data<ti85_state>();
467   state->m_ti8x_memory_page_1 = (state->m_ti8x_memory_page_1 & 7) | ((data & 16) >> 1);
468   update_ti85_memory(space->machine());
441   m_ti8x_memory_page_1 = (m_ti8x_memory_page_1 & 7) | ((data & 16) >> 1);
442   update_ti85_memory(machine());
469443}
470444
471WRITE8_HANDLER ( ti83_port_0002_w )
445WRITE8_MEMBER(ti85_state::ti83_port_0002_w)
472446{
473   ti85_state *state = space->machine().driver_data<ti85_state>();
474   state->m_ti8x_memory_page_1 = (state->m_ti8x_memory_page_1 & 8) | (data & 7);
475   update_ti85_memory(space->machine());
476   state->m_ti8x_port2 = data;
447   m_ti8x_memory_page_1 = (m_ti8x_memory_page_1 & 8) | (data & 7);
448   update_ti85_memory(machine());
449   m_ti8x_port2 = data;
477450}
478451
479WRITE8_HANDLER ( ti83_port_0003_w )
452WRITE8_MEMBER(ti85_state::ti83_port_0003_w)
480453{
481   ti85_state *state = space->machine().driver_data<ti85_state>();
482      if (state->m_LCD_status && !(data&0x08))   state->m_timer_interrupt_mask = 0;
483      state->m_ON_interrupt_mask = data&0x01;
484      //state->m_timer_interrupt_mask = data&0x04;
485      state->m_LCD_mask = data&0x02;
486      state->m_LCD_status = data&0x08;
454      if (m_LCD_status && !(data&0x08))   m_timer_interrupt_mask = 0;
455      m_ON_interrupt_mask = data&0x01;
456      //m_timer_interrupt_mask = data&0x04;
457      m_LCD_mask = data&0x02;
458      m_LCD_status = data&0x08;
487459}
488460
489WRITE8_HANDLER ( ti8x_plus_serial_w )
461WRITE8_MEMBER(ti85_state::ti8x_plus_serial_w)
490462{
491   ti85_state *state = space->machine().driver_data<ti85_state>();
492463
493   speaker_level_w(state->m_speaker,( (data>>0)|(data>>1) )&0x01 );
494   state->m_red_out=(data>>0)&0x01;
495   state->m_white_out=(data>>1)&0x01;
496   //ti85serial_red_out( state->m_serial, 0, state->m_red_out );
497   //ti85serial_white_out( state->m_serial, 0, state->m_white_out );
498   //ti85_update_serial(state->m_serial);
499   state->m_PCR = data&0xf0;
464   speaker_level_w(m_speaker,( (data>>0)|(data>>1) )&0x01 );
465   m_red_out=(data>>0)&0x01;
466   m_white_out=(data>>1)&0x01;
467   //ti85serial_red_out( m_serial, 0, m_red_out );
468   //ti85serial_white_out( m_serial, 0, m_white_out );
469   //ti85_update_serial(m_serial);
470   m_PCR = data&0xf0;
500471}
501472
502WRITE8_HANDLER ( ti83p_port_0002_w )
473WRITE8_MEMBER(ti85_state::ti83p_port_0002_w)
503474{
504   ti85_state *state = space->machine().driver_data<ti85_state>();
505   state->m_ti8x_port2 = data;
475   m_ti8x_port2 = data;
506476}
507477
508WRITE8_HANDLER ( ti83p_port_0003_w )
478WRITE8_MEMBER(ti85_state::ti83p_port_0003_w)
509479{
510   ti85_state *state = space->machine().driver_data<ti85_state>();
511   state->m_LCD_mask = (data&0x08) >> 2;
512   state->m_ON_interrupt_mask = data & 0x01;
480   m_LCD_mask = (data&0x08) >> 2;
481   m_ON_interrupt_mask = data & 0x01;
513482}
514483
515WRITE8_HANDLER ( ti83p_port_0004_w )
484WRITE8_MEMBER(ti85_state::ti83p_port_0004_w)
516485{
517   ti85_state *state = space->machine().driver_data<ti85_state>();
518   if ((data & 1) && !(state->m_ti83p_port4 & 1))
486   if ((data & 1) && !(m_ti83p_port4 & 1))
519487   {
520      state->m_ti8x_memory_page_1 = 0x1f;
521      state->m_ti8x_memory_page_2 = 0x1f;
488      m_ti8x_memory_page_1 = 0x1f;
489      m_ti8x_memory_page_2 = 0x1f;
522490   }
523   else if (!(data & 1) && (state->m_ti83p_port4 & 1))
491   else if (!(data & 1) && (m_ti83p_port4 & 1))
524492   {
525      state->m_ti8x_memory_page_1 = 0x1f;
526      state->m_ti8x_memory_page_2 = 0x40;
493      m_ti8x_memory_page_1 = 0x1f;
494      m_ti8x_memory_page_2 = 0x40;
527495   }
528   update_ti83p_memory(space->machine());
529   state->m_ti83p_port4 = data;
496   update_ti83p_memory(machine());
497   m_ti83p_port4 = data;
530498}
531499
532WRITE8_HANDLER ( ti83p_port_0006_w )
500WRITE8_MEMBER(ti85_state::ti83p_port_0006_w)
533501{
534   ti85_state *state = space->machine().driver_data<ti85_state>();
535   state->m_ti8x_memory_page_1 = data & ((data&0x40) ? 0x41 : 0x5f);
536   update_ti83p_memory(space->machine());
502   m_ti8x_memory_page_1 = data & ((data&0x40) ? 0x41 : 0x5f);
503   update_ti83p_memory(machine());
537504}
538505
539WRITE8_HANDLER ( ti83p_port_0007_w )
506WRITE8_MEMBER(ti85_state::ti83p_port_0007_w)
540507{
541   ti85_state *state = space->machine().driver_data<ti85_state>();
542   state->m_ti8x_memory_page_2 = data & ((data&0x40) ? 0x41 : 0x5f);
543   update_ti83p_memory(space->machine());
508   m_ti8x_memory_page_2 = data & ((data&0x40) ? 0x41 : 0x5f);
509   update_ti83p_memory(machine());
544510}
545511
546512/* NVRAM functions */
src/mess/machine/galaxy.c
r14963r14964
1717  I/O devices
1818***************************************************************************/
1919
20READ8_HANDLER( galaxy_keyboard_r )
20READ8_MEMBER(galaxy_state::galaxy_keyboard_r)
2121{
2222   static const char *const keynames[] = { "LINE0", "LINE1", "LINE2", "LINE3", "LINE4", "LINE5", "LINE6", "LINE7" };
2323
2424   if (offset == 0)
2525   {
26      double level = (space->machine().device<cassette_image_device>(CASSETTE_TAG)->input());
26      double level = (machine().device<cassette_image_device>(CASSETTE_TAG)->input());
2727      return (level >  0) ? 0xfe : 0xff;
2828   }
2929   else
3030   {
31      return input_port_read(space->machine(), keynames[(offset>>3) & 0x07]) & (0x01<<(offset & 0x07)) ? 0xfe : 0xff;
31      return input_port_read(machine(), keynames[(offset>>3) & 0x07]) & (0x01<<(offset & 0x07)) ? 0xfe : 0xff;
3232   }
3333}
3434
35WRITE8_HANDLER( galaxy_latch_w )
35WRITE8_MEMBER(galaxy_state::galaxy_latch_w)
3636{
37   galaxy_state *state = space->machine().driver_data<galaxy_state>();
3837   double val = (((data >>6) & 1 ) + ((data >> 2) & 1) - 1) * 32000;
39   state->m_latch_value = data;
40   space->machine().device<cassette_image_device>(CASSETTE_TAG)->output(val);
38   m_latch_value = data;
39   machine().device<cassette_image_device>(CASSETTE_TAG)->output(val);
4140}
4241
4342
src/mess/machine/vtech2.c
r14963r14964
114114   logerror("laser_machine_init(): bank mask $%04X, video %d [$%05X]\n", state->m_laser_bank_mask, state->m_laser_video_bank, state->m_laser_video_bank * 0x04000);
115115
116116   for (i = 0; i < ARRAY_LENGTH(state->m_laser_bank); i++)
117      laser_bank_select_w(machine.device("maincpu")->memory().space(AS_PROGRAM), i, 0);
117      state->laser_bank_select_w(*machine.device("maincpu")->memory().space(AS_PROGRAM), i, 0);
118118}
119119
120120MACHINE_RESET( laser350 )
r14963r14964
136136}
137137
138138
139WRITE8_HANDLER( laser_bank_select_w )
139WRITE8_MEMBER(vtech2_state::laser_bank_select_w)
140140{
141   vtech2_state *state = space->machine().driver_data<vtech2_state>();
142141    static const char *const bank_name[16] = {
143142        "ROM lo","ROM hi","MM I/O","Video RAM lo",
144143        "RAM #0","RAM #1","RAM #2","RAM #3",
r14963r14964
149148   offset %= 4;
150149    data &= 15;
151150
152   if( data != state->m_laser_bank[offset] )
151   if( data != m_laser_bank[offset] )
153152    {
154        state->m_laser_bank[offset] = data;
153        m_laser_bank[offset] = data;
155154      logerror("select bank #%d $%02X [$%05X] %s\n", offset+1, data, 0x4000 * (data & 15), bank_name[data]);
156155
157156        /* memory mapped I/O bank selected? */
158157      if (data == 2)
159158      {
160         space->machine().device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(offset * 0x4000, offset * 0x4000 + 0x3fff, mra_bank_soft[offset].func, mra_bank_soft[offset].name);
161         space->machine().device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler(offset * 0x4000, offset * 0x4000 + 0x3fff, mwa_bank_soft[offset].func, mwa_bank_soft[offset].name);
159         machine().device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(offset * 0x4000, offset * 0x4000 + 0x3fff, mra_bank_soft[offset].func, mra_bank_soft[offset].name);
160         machine().device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler(offset * 0x4000, offset * 0x4000 + 0x3fff, mwa_bank_soft[offset].func, mwa_bank_soft[offset].name);
162161      }
163162      else
164163      {
165164         sprintf(bank,"bank%d",offset+1);
166         memory_set_bankptr(space->machine(), bank, &state->m_mem[0x4000*state->m_laser_bank[offset]]);
167         if( state->m_laser_bank_mask & (1 << data) )
165         memory_set_bankptr(machine(), bank, &m_mem[0x4000*m_laser_bank[offset]]);
166         if( m_laser_bank_mask & (1 << data) )
168167         {
169168            /* video RAM bank selected? */
170            if( data == state->m_laser_video_bank )
169            if( data == m_laser_video_bank )
171170            {
172171               logerror("select bank #%d VIDEO!\n", offset+1);
173172            }
174            space->machine().device("maincpu")->memory().space(AS_PROGRAM)->install_read_bank(offset * 0x4000, offset * 0x4000 + 0x3fff, mra_bank_hard[offset]);
175            space->machine().device("maincpu")->memory().space(AS_PROGRAM)->install_write_bank(offset * 0x4000, offset * 0x4000 + 0x3fff, mwa_bank_hard[offset]);
173            machine().device("maincpu")->memory().space(AS_PROGRAM)->install_read_bank(offset * 0x4000, offset * 0x4000 + 0x3fff, mra_bank_hard[offset]);
174            machine().device("maincpu")->memory().space(AS_PROGRAM)->install_write_bank(offset * 0x4000, offset * 0x4000 + 0x3fff, mwa_bank_hard[offset]);
176175
177176         }
178177         else
179178         {
180179            logerror("select bank #%d MASKED!\n", offset+1);
181            space->machine().device("maincpu")->memory().space(AS_PROGRAM)->nop_readwrite(offset * 0x4000, offset * 0x4000 + 0x3fff);
180            machine().device("maincpu")->memory().space(AS_PROGRAM)->nop_readwrite(offset * 0x4000, offset * 0x4000 + 0x3fff);
182181
183182         }
184183      }
r14963r14964
399398#define PHI2(n) (((n)>>2)&1)
400399#define PHI3(n) (((n)>>3)&1)
401400
402 READ8_HANDLER( laser_fdc_r )
401READ8_MEMBER(vtech2_state::laser_fdc_r)
403402{
404   vtech2_state *state = space->machine().driver_data<vtech2_state>();
405403    int data = 0xff;
406404    switch( offset )
407405    {
408406    case 1: /* data (read-only) */
409        if( state->m_laser_fdc_bits > 0 )
407        if( m_laser_fdc_bits > 0 )
410408        {
411            if( state->m_laser_fdc_status & 0x80 )
412                state->m_laser_fdc_bits--;
413            data = (state->m_laser_data >> state->m_laser_fdc_bits) & 0xff;
409            if( m_laser_fdc_status & 0x80 )
410                m_laser_fdc_bits--;
411            data = (m_laser_data >> m_laser_fdc_bits) & 0xff;
414412#if 0
415413            logerror("laser_fdc_r bits %d%d%d%d%d%d%d%d\n",
416414                (data>>7)&1,(data>>6)&1,(data>>5)&1,(data>>4)&1,
417415                (data>>3)&1,(data>>2)&1,(data>>1)&1,(data>>0)&1 );
418416#endif
419417        }
420        if( state->m_laser_fdc_bits == 0 )
418        if( m_laser_fdc_bits == 0 )
421419        {
422            state->m_laser_data = state->m_laser_fdc_data[state->m_laser_fdc_offs];
423            logerror("laser_fdc_r %d : data ($%04X) $%02X\n", offset, state->m_laser_fdc_offs, state->m_laser_data);
424            if( state->m_laser_fdc_status & 0x80 )
420            m_laser_data = m_laser_fdc_data[m_laser_fdc_offs];
421            logerror("laser_fdc_r %d : data ($%04X) $%02X\n", offset, m_laser_fdc_offs, m_laser_data);
422            if( m_laser_fdc_status & 0x80 )
425423            {
426                state->m_laser_fdc_bits = 8;
427                state->m_laser_fdc_offs = (state->m_laser_fdc_offs + 1) % TRKSIZE_FM;
424                m_laser_fdc_bits = 8;
425                m_laser_fdc_offs = (m_laser_fdc_offs + 1) % TRKSIZE_FM;
428426            }
429            state->m_laser_fdc_status &= ~0x80;
427            m_laser_fdc_status &= ~0x80;
430428        }
431429        break;
432430    case 2: /* polling (read-only) */
433431        /* fake */
434        if( state->m_laser_drive >= 0 )
435            state->m_laser_fdc_status |= 0x80;
436        data = state->m_laser_fdc_status;
432        if( m_laser_drive >= 0 )
433            m_laser_fdc_status |= 0x80;
434        data = m_laser_fdc_status;
437435        break;
438436    case 3: /* write protect status (read-only) */
439        if( state->m_laser_drive >= 0 )
440            data = laser_fdc_wrprot[state->m_laser_drive];
437        if( m_laser_drive >= 0 )
438            data = laser_fdc_wrprot[m_laser_drive];
441439        logerror("laser_fdc_r %d : write_protect $%02X\n", offset, data);
442440        break;
443441    }
444442    return data;
445443}
446444
447WRITE8_HANDLER( laser_fdc_w )
445WRITE8_MEMBER(vtech2_state::laser_fdc_w)
448446{
449   vtech2_state *state = space->machine().driver_data<vtech2_state>();
450447    int drive;
451448
452449    switch( offset )
453450    {
454451    case 0: /* latch (write-only) */
455452        drive = (data & 0x10) ? 0 : (data & 0x80) ? 1 : -1;
456        if( drive != state->m_laser_drive )
453        if( drive != m_laser_drive )
457454        {
458            state->m_laser_drive = drive;
459            if( state->m_laser_drive >= 0 )
460                laser_get_track(space->machine());
455            m_laser_drive = drive;
456            if( m_laser_drive >= 0 )
457                laser_get_track(machine());
461458        }
462        if( state->m_laser_drive >= 0 )
459        if( m_laser_drive >= 0 )
463460        {
464            if( (PHI0(data) && !(PHI1(data) || PHI2(data) || PHI3(data)) && PHI1(state->m_laser_fdc_latch)) ||
465                (PHI1(data) && !(PHI0(data) || PHI2(data) || PHI3(data)) && PHI2(state->m_laser_fdc_latch)) ||
466                (PHI2(data) && !(PHI0(data) || PHI1(data) || PHI3(data)) && PHI3(state->m_laser_fdc_latch)) ||
467                (PHI3(data) && !(PHI0(data) || PHI1(data) || PHI2(data)) && PHI0(state->m_laser_fdc_latch)) )
461            if( (PHI0(data) && !(PHI1(data) || PHI2(data) || PHI3(data)) && PHI1(m_laser_fdc_latch)) ||
462                (PHI1(data) && !(PHI0(data) || PHI2(data) || PHI3(data)) && PHI2(m_laser_fdc_latch)) ||
463                (PHI2(data) && !(PHI0(data) || PHI1(data) || PHI3(data)) && PHI3(m_laser_fdc_latch)) ||
464                (PHI3(data) && !(PHI0(data) || PHI1(data) || PHI2(data)) && PHI0(m_laser_fdc_latch)) )
468465            {
469                if( state->m_laser_track_x2[state->m_laser_drive] > 0 )
470                    state->m_laser_track_x2[state->m_laser_drive]--;
471                logerror("laser_fdc_w(%d) $%02X drive %d: stepout track #%2d.%d\n", offset, data, state->m_laser_drive, state->m_laser_track_x2[state->m_laser_drive]/2,5*(state->m_laser_track_x2[state->m_laser_drive]&1));
472                if( (state->m_laser_track_x2[state->m_laser_drive] & 1) == 0 )
473                    laser_get_track(space->machine());
466                if( m_laser_track_x2[m_laser_drive] > 0 )
467                    m_laser_track_x2[m_laser_drive]--;
468                logerror("laser_fdc_w(%d) $%02X drive %d: stepout track #%2d.%d\n", offset, data, m_laser_drive, m_laser_track_x2[m_laser_drive]/2,5*(m_laser_track_x2[m_laser_drive]&1));
469                if( (m_laser_track_x2[m_laser_drive] & 1) == 0 )
470                    laser_get_track(machine());
474471            }
475472            else
476            if( (PHI0(data) && !(PHI1(data) || PHI2(data) || PHI3(data)) && PHI3(state->m_laser_fdc_latch)) ||
477                (PHI1(data) && !(PHI0(data) || PHI2(data) || PHI3(data)) && PHI0(state->m_laser_fdc_latch)) ||
478                (PHI2(data) && !(PHI0(data) || PHI1(data) || PHI3(data)) && PHI1(state->m_laser_fdc_latch)) ||
479                (PHI3(data) && !(PHI0(data) || PHI1(data) || PHI2(data)) && PHI2(state->m_laser_fdc_latch)) )
473            if( (PHI0(data) && !(PHI1(data) || PHI2(data) || PHI3(data)) && PHI3(m_laser_fdc_latch)) ||
474                (PHI1(data) && !(PHI0(data) || PHI2(data) || PHI3(data)) && PHI0(m_laser_fdc_latch)) ||
475                (PHI2(data) && !(PHI0(data) || PHI1(data) || PHI3(data)) && PHI1(m_laser_fdc_latch)) ||
476                (PHI3(data) && !(PHI0(data) || PHI1(data) || PHI2(data)) && PHI2(m_laser_fdc_latch)) )
480477            {
481                if( state->m_laser_track_x2[state->m_laser_drive] < 2*40 )
482                    state->m_laser_track_x2[state->m_laser_drive]++;
483                logerror("laser_fdc_w(%d) $%02X drive %d: stepin track #%2d.%d\n", offset, data, state->m_laser_drive, state->m_laser_track_x2[state->m_laser_drive]/2,5*(state->m_laser_track_x2[state->m_laser_drive]&1));
484                if( (state->m_laser_track_x2[state->m_laser_drive] & 1) == 0 )
485                    laser_get_track(space->machine());
478                if( m_laser_track_x2[m_laser_drive] < 2*40 )
479                    m_laser_track_x2[m_laser_drive]++;
480                logerror("laser_fdc_w(%d) $%02X drive %d: stepin track #%2d.%d\n", offset, data, m_laser_drive, m_laser_track_x2[m_laser_drive]/2,5*(m_laser_track_x2[m_laser_drive]&1));
481                if( (m_laser_track_x2[m_laser_drive] & 1) == 0 )
482                    laser_get_track(machine());
486483            }
487484            if( (data & 0x40) == 0 )
488485            {
489                state->m_laser_data <<= 1;
490                if( (state->m_laser_fdc_latch ^ data) & 0x20 )
491                    state->m_laser_data |= 1;
492                if( (state->m_laser_fdc_edge ^= 1) == 0 )
486                m_laser_data <<= 1;
487                if( (m_laser_fdc_latch ^ data) & 0x20 )
488                    m_laser_data |= 1;
489                if( (m_laser_fdc_edge ^= 1) == 0 )
493490                {
494                    if( --state->m_laser_fdc_bits == 0 )
491                    if( --m_laser_fdc_bits == 0 )
495492                    {
496493                        UINT8 value = 0;
497                        state->m_laser_data &= 0xffff;
498                        if( state->m_laser_data & 0x4000 ) value |= 0x80;
499                        if( state->m_laser_data & 0x1000 ) value |= 0x40;
500                        if( state->m_laser_data & 0x0400 ) value |= 0x20;
501                        if( state->m_laser_data & 0x0100 ) value |= 0x10;
502                        if( state->m_laser_data & 0x0040 ) value |= 0x08;
503                        if( state->m_laser_data & 0x0010 ) value |= 0x04;
504                        if( state->m_laser_data & 0x0004 ) value |= 0x02;
505                        if( state->m_laser_data & 0x0001 ) value |= 0x01;
506                        logerror("laser_fdc_w(%d) data($%04X) $%02X <- $%02X ($%04X)\n", offset, state->m_laser_fdc_offs, state->m_laser_fdc_data[state->m_laser_fdc_offs], value, state->m_laser_data);
507                        state->m_laser_fdc_data[state->m_laser_fdc_offs] = value;
508                        state->m_laser_fdc_offs = (state->m_laser_fdc_offs + 1) % TRKSIZE_FM;
509                        state->m_laser_fdc_write++;
510                        state->m_laser_fdc_bits = 8;
494                        m_laser_data &= 0xffff;
495                        if( m_laser_data & 0x4000 ) value |= 0x80;
496                        if( m_laser_data & 0x1000 ) value |= 0x40;
497                        if( m_laser_data & 0x0400 ) value |= 0x20;
498                        if( m_laser_data & 0x0100 ) value |= 0x10;
499                        if( m_laser_data & 0x0040 ) value |= 0x08;
500                        if( m_laser_data & 0x0010 ) value |= 0x04;
501                        if( m_laser_data & 0x0004 ) value |= 0x02;
502                        if( m_laser_data & 0x0001 ) value |= 0x01;
503                        logerror("laser_fdc_w(%d) data($%04X) $%02X <- $%02X ($%04X)\n", offset, m_laser_fdc_offs, m_laser_fdc_data[m_laser_fdc_offs], value, m_laser_data);
504                        m_laser_fdc_data[m_laser_fdc_offs] = value;
505                        m_laser_fdc_offs = (m_laser_fdc_offs + 1) % TRKSIZE_FM;
506                        m_laser_fdc_write++;
507                        m_laser_fdc_bits = 8;
511508                    }
512509                }
513510            }
514511            /* change of write signal? */
515            if( (state->m_laser_fdc_latch ^ data) & 0x40 )
512            if( (m_laser_fdc_latch ^ data) & 0x40 )
516513            {
517514                /* falling edge? */
518                if ( state->m_laser_fdc_latch & 0x40 )
515                if ( m_laser_fdc_latch & 0x40 )
519516                {
520                    sprintf(state->m_laser_frame_message, "#%d put track %02d", state->m_laser_drive, state->m_laser_track_x2[state->m_laser_drive]/2);
521                    state->m_laser_frame_time = 30;
522                    state->m_laser_fdc_start = state->m_laser_fdc_offs;
523               state->m_laser_fdc_edge = 0;
517                    sprintf(m_laser_frame_message, "#%d put track %02d", m_laser_drive, m_laser_track_x2[m_laser_drive]/2);
518                    m_laser_frame_time = 30;
519                    m_laser_fdc_start = m_laser_fdc_offs;
520               m_laser_fdc_edge = 0;
524521                }
525522                else
526523                {
527524                    /* data written to track before? */
528                    if( state->m_laser_fdc_write )
529                        laser_put_track(space->machine());
525                    if( m_laser_fdc_write )
526                        laser_put_track(machine());
530527                }
531                state->m_laser_fdc_bits = 8;
532                state->m_laser_fdc_write = 0;
528                m_laser_fdc_bits = 8;
529                m_laser_fdc_write = 0;
533530            }
534531        }
535        state->m_laser_fdc_latch = data;
532        m_laser_fdc_latch = data;
536533        break;
537534    }
538535}
src/mess/machine/zx.c
r14963r14964
1818#define LOG_ZX81_VSYNC do { if (DEBUG_ZX81_VSYNC) logerror("VSYNC starts in scanline: %d\n", space->machine().primary_screen->vpos()); } while (0)
1919
2020
21static WRITE8_HANDLER( zx_ram_w )
21WRITE8_MEMBER(zx_state::zx_ram_w)
2222{
23   UINT8 *RAM = space->machine().region("maincpu")->base();
23   UINT8 *RAM = machine().region("maincpu")->base();
2424   RAM[offset + 0x4000] = data;
2525
2626   if (data & 0x40)
2727   {
28      space->write_byte(offset | 0xc000, data);
28      space.write_byte(offset | 0xc000, data);
2929      RAM[offset | 0xc000] = data;
3030   }
3131   else
3232   {
33      space->write_byte(offset | 0xc000, 0);
33      space.write_byte(offset | 0xc000, 0);
3434      RAM[offset | 0xc000] = 0;
3535   }
3636}
r14963r14964
4444
4545DRIVER_INIT( zx )
4646{
47   zx_state *state = machine.driver_data<zx_state>();
4748   address_space *space = machine.device("maincpu")->memory().space(AS_PROGRAM);
4849
4950   space->install_read_bank(0x4000, 0x4000 + machine.device<ram_device>(RAM_TAG)->size() - 1, "bank1");
50   space->install_legacy_write_handler(0x4000, 0x4000 + machine.device<ram_device>(RAM_TAG)->size() - 1, FUNC(zx_ram_w));
51   space->install_write_handler(0x4000, 0x4000 + machine.device<ram_device>(RAM_TAG)->size() - 1, write8_delegate(FUNC(zx_state::zx_ram_w),state));
5152   memory_set_bankptr(machine, "bank1", machine.region("maincpu")->base() + 0x4000);
5253}
5354
src/mess/machine/concept.c
r14963r14964
255255   concept_set_interrupt(device->machine(), TIMINT_level, state);
256256}
257257
258READ16_HANDLER(concept_io_r)
258READ16_MEMBER(concept_state::concept_io_r)
259259{
260   concept_state *state = space->machine().driver_data<concept_state>();
261260   if (! ACCESSING_BITS_0_7)
262261      return 0;
263262
r14963r14964
277276         /* IO4 registers */
278277         {
279278            int slot = ((offset >> 4) & 7) - 1;
280            if (state->m_expansion_slots[slot].reg_read)
281               return state->m_expansion_slots[slot].reg_read(space, offset & 0xf);
279            if (m_expansion_slots[slot].reg_read)
280               return m_expansion_slots[slot].reg_read(&space, offset & 0xf);
282281         }
283282         break;
284283
r14963r14964
300299      {
301300         int slot = ((offset >> 8) & 7) - 1;
302301         LOG(("concept_io_r: Slot ROM memory accessed for slot %d at address 0x03%4.4x\n", slot, offset << 1));
303         if (state->m_expansion_slots[slot].rom_read)
304            return state->m_expansion_slots[slot].rom_read(space, offset & 0xff);
302         if (m_expansion_slots[slot].rom_read)
303            return m_expansion_slots[slot].rom_read(&space, offset & 0xff);
305304      }
306305      break;
307306
r14963r14964
313312   case 6:
314313      /* calendar R/W */
315314      VLOG(("concept_io_r: Calendar read at address 0x03%4.4x\n", offset << 1));
316      if (!state->m_clock_enable)
317         return mm58274c_r(space->machine().device("mm58274c"), state->m_clock_address);
315      if (!m_clock_enable)
316         return mm58274c_r(machine().device("mm58274c"), m_clock_address);
318317      break;
319318
320319   case 7:
r14963r14964
331330            /* data */
332331            reply = 0;
333332
334            if (state->m_KeyQueueLen)
333            if (m_KeyQueueLen)
335334            {
336               reply = state->m_KeyQueue[state->m_KeyQueueHead];
337               state->m_KeyQueueHead = (state->m_KeyQueueHead + 1) % KeyQueueSize;
338               state->m_KeyQueueLen--;
335               reply = m_KeyQueue[m_KeyQueueHead];
336               m_KeyQueueHead = (m_KeyQueueHead + 1) % KeyQueueSize;
337               m_KeyQueueLen--;
339338            }
340339
341            if (!state->m_KeyQueueLen)
342               concept_set_interrupt(space->machine(), KEYINT_level, 0);
340            if (!m_KeyQueueLen)
341               concept_set_interrupt(machine(), KEYINT_level, 0);
343342
344343            return reply;
345344
346345         case 1:
347346            /* always tell transmit is empty */
348            reply = state->m_KeyQueueLen ? 0x98 : 0x10;
347            reply = m_KeyQueueLen ? 0x98 : 0x10;
349348            break;
350349         }
351350         break;
r14963r14964
362361         /* NVIA versatile system interface */
363362         LOG(("concept_io_r: VIA read at address 0x03%4.4x\n", offset << 1));
364363         {
365            via6522_device *via_0 = space->machine().device<via6522_device>("via6522_0");
366            return via_0->read(*space, offset & 0xf);
364            via6522_device *via_0 = machine().device<via6522_device>("via6522_0");
365            return via_0->read(space, offset & 0xf);
367366         }
368367         break;
369368
r14963r14964
394393   return 0;
395394}
396395
397WRITE16_HANDLER(concept_io_w)
396WRITE16_MEMBER(concept_state::concept_io_w)
398397{
399   concept_state *state = space->machine().driver_data<concept_state>();
400398   if (! ACCESSING_BITS_0_7)
401399      return;
402400
r14963r14964
420418            int slot = ((offset >> 4) & 7) - 1;
421419            LOG(("concept_io_w: Slot I/O register written for slot %d at address 0x03%4.4x, data: 0x%4.4x\n",
422420               slot, offset << 1, data));
423            if (state->m_expansion_slots[slot].reg_write)
424               state->m_expansion_slots[slot].reg_write(space, offset & 0xf, data);
421            if (m_expansion_slots[slot].reg_write)
422               m_expansion_slots[slot].reg_write(&space, offset & 0xf, data);
425423         }
426424         break;
427425
r14963r14964
443441      {
444442         int slot = ((offset >> 8) & 7) - 1;
445443         LOG(("concept_io_w: Slot ROM memory written to for slot %d at address 0x03%4.4x, data: 0x%4.4x\n", slot, offset << 1, data));
446         if (state->m_expansion_slots[slot].rom_write)
447            state->m_expansion_slots[slot].rom_write(space, offset & 0xff, data);
444         if (m_expansion_slots[slot].rom_write)
445            m_expansion_slots[slot].rom_write(&space, offset & 0xff, data);
448446      }
449447      break;
450448
r14963r14964
456454   case 6:
457455      /* calendar R/W */
458456      LOG(("concept_io_w: Calendar written to at address 0x03%4.4x, data: 0x%4.4x\n", offset << 1, data));
459      if (!state->m_clock_enable)
460         mm58274c_w(space->machine().device("mm58274c"), state->m_clock_address, data & 0xf);
457      if (!m_clock_enable)
458         mm58274c_w(machine().device("mm58274c"), m_clock_address, data & 0xf);
461459      break;
462460
463461   case 7:
r14963r14964
476474      case 3:
477475         /* NVIA versatile system interface */
478476         {
479            via6522_device *via_0 = space->machine().device<via6522_device>("via6522_0");
480            via_0->write(*space, offset & 0xf, data);
477            via6522_device *via_0 = machine().device<via6522_device>("via6522_0");
478            via_0->write(space, offset & 0xf, data);
481479         }
482480         break;
483481
484482      case 4:
485483         /* NCALM clock calendar address and strobe register */
486         if (state->m_clock_enable != ((data & 0x10) != 0))
484         if (m_clock_enable != ((data & 0x10) != 0))
487485         {
488            state->m_clock_enable = (data & 0x10) != 0;
489            if (! state->m_clock_enable)
486            m_clock_enable = (data & 0x10) != 0;
487            if (! m_clock_enable)
490488               /* latch address when enable goes low */
491               state->m_clock_address = data & 0x0f;
489               m_clock_address = data & 0x0f;
492490         }
493491         /*volume_control = (data & 0x20) != 0;*/
494492         /*alt_map = (data & 0x40) != 0;*/
src/mess/machine/msx.c
r14963r14964
552552*/
553553
554554
555READ8_HANDLER ( msx_psg_port_a_r )
555READ8_MEMBER(msx_state::msx_psg_port_a_r)
556556{
557   msx_state *state = space->machine().driver_data<msx_state>();
558557   UINT8 data;
559558
560   data = (state->m_cass->input() > 0.0038 ? 0x80 : 0);
559   data = (m_cass->input() > 0.0038 ? 0x80 : 0);
561560
562   if ( (state->m_psg_b ^ input_port_read(space->machine(), "DSW") ) & 0x40)
561   if ( (m_psg_b ^ input_port_read(machine(), "DSW") ) & 0x40)
563562   {
564563      /* game port 2 */
565      UINT8 inp = input_port_read(space->machine(), "JOY1");
564      UINT8 inp = input_port_read(machine(), "JOY1");
566565      if ( !(inp & 0x80) )
567566      {
568567         /* joystick */
r14963r14964
572571      {
573572         /* mouse */
574573         data |= ( inp & 0x70 );
575         if (state->m_mouse_stat[1] < 0)
574         if (m_mouse_stat[1] < 0)
576575            data |= 0xf;
577576         else
578            data |= ~(state->m_mouse[1] >> (4*state->m_mouse_stat[1]) ) & 15;
577            data |= ~(m_mouse[1] >> (4*m_mouse_stat[1]) ) & 15;
579578      }
580579   }
581580   else
582581   {
583582      /* game port 1 */
584      UINT8 inp = input_port_read(space->machine(), "JOY0");
583      UINT8 inp = input_port_read(machine(), "JOY0");
585584      if ( !(inp & 0x80) )
586585      {
587586         /* joystick */
r14963r14964
591590      {
592591         /* mouse */
593592         data |= ( inp & 0x70 );
594         if (state->m_mouse_stat[0] < 0)
593         if (m_mouse_stat[0] < 0)
595594            data |= 0xf;
596595         else
597            data |= ~(state->m_mouse[0] >> (4*state->m_mouse_stat[0]) ) & 15;
596            data |= ~(m_mouse[0] >> (4*m_mouse_stat[0]) ) & 15;
598597      }
599598   }
600599
601600   return data;
602601}
603602
604READ8_HANDLER ( msx_psg_port_b_r )
603READ8_MEMBER(msx_state::msx_psg_port_b_r)
605604{
606   msx_state *state = space->machine().driver_data<msx_state>();
607   return state->m_psg_b;
605   return m_psg_b;
608606}
609607
610WRITE8_HANDLER ( msx_psg_port_a_w )
608WRITE8_MEMBER(msx_state::msx_psg_port_a_w)
611609{
612610}
613611
614WRITE8_HANDLER ( msx_psg_port_b_w )
612WRITE8_MEMBER(msx_state::msx_psg_port_b_w)
615613{
616   msx_state *state = space->machine().driver_data<msx_state>();
617614   /* Arabic or kana mode led */
618   if ( (data ^ state->m_psg_b) & 0x80)
619      set_led_status (space->machine(), 2, !(data & 0x80) );
615   if ( (data ^ m_psg_b) & 0x80)
616      set_led_status (machine(), 2, !(data & 0x80) );
620617
621   if ( (state->m_psg_b ^ data) & 0x10)
618   if ( (m_psg_b ^ data) & 0x10)
622619   {
623      if (++state->m_mouse_stat[0] > 3) state->m_mouse_stat[0] = -1;
620      if (++m_mouse_stat[0] > 3) m_mouse_stat[0] = -1;
624621   }
625   if ( (state->m_psg_b ^ data) & 0x20)
622   if ( (m_psg_b ^ data) & 0x20)
626623   {
627      if (++state->m_mouse_stat[1] > 3) state->m_mouse_stat[1] = -1;
624      if (++m_mouse_stat[1] > 3) m_mouse_stat[1] = -1;
628625   }
629626
630   state->m_psg_b = data;
627   m_psg_b = data;
631628}
632629
633630WRITE8_DEVICE_HANDLER( msx_printer_strobe_w )
src/mess/machine/mz700.c
r14963r14964
114114   mz->m_ppi = machine.device<i8255_device>("ppi8255");
115115
116116   /* reset memory map to defaults */
117   mz700_bank_4_w(machine.device("maincpu")->memory().space(AS_PROGRAM), 0, 0);
117   mz->mz700_bank_4_w(*machine.device("maincpu")->memory().space(AS_PROGRAM), 0, 0);
118118}
119119
120120
r14963r14964
122122    MMIO
123123***************************************************************************/
124124
125static READ8_HANDLER( mz700_e008_r )
125READ8_MEMBER(mz_state::mz700_e008_r)
126126{
127   mz_state *mz = space->machine().driver_data<mz_state>();
128127   UINT8 data = 0;
129128
130   data |= mz->m_other_timer;
131   data |= input_port_read(space->machine(), "JOY");
132   data |= space->machine().primary_screen->hblank() << 7;
129   data |= m_other_timer;
130   data |= input_port_read(machine(), "JOY");
131   data |= machine().primary_screen->hblank() << 7;
133132
134   LOG(1, "mz700_e008_r", ("%02X\n", data), space->machine());
133   LOG(1, "mz700_e008_r", ("%02X\n", data), machine());
135134
136135   return data;
137136}
138137
139static WRITE8_HANDLER( mz700_e008_w )
138WRITE8_MEMBER(mz_state::mz700_e008_w)
140139{
141   mz_state *mz = space->machine().driver_data<mz_state>();
142   pit8253_gate0_w(mz->m_pit, BIT(data, 0));
140   pit8253_gate0_w(m_pit, BIT(data, 0));
143141}
144142
145143
r14963r14964
147145    BANK SWITCHING
148146***************************************************************************/
149147
150READ8_HANDLER( mz800_bank_0_r )
148READ8_MEMBER(mz_state::mz800_bank_0_r)
151149{
152   mz_state *state = space->machine().driver_data<mz_state>();
153   UINT8 *videoram = state->m_videoram;
154   address_space *spc = space->machine().device("maincpu")->memory().space(AS_PROGRAM);
155   mz_state *mz = space->machine().driver_data<mz_state>();
150   UINT8 *videoram = m_videoram;
151   address_space *spc = machine().device("maincpu")->memory().space(AS_PROGRAM);
156152
157153   /* switch in cgrom */
158154   spc->install_read_bank(0x1000, 0x1fff, "bank2");
159155   spc->nop_write(0x1000, 0x1fff);
160   memory_set_bankptr(space->machine(), "bank2", space->machine().region("monitor")->base() + 0x1000);
156   memory_set_bankptr(machine(), "bank2", machine().region("monitor")->base() + 0x1000);
161157
162   if (mz->m_mz700_mode)
158   if (m_mz700_mode)
163159   {
164160      /* cgram from 0xc000 to 0xcfff */
165161      spc->install_read_bank(0xc000, 0xcfff, "bank6");
166      spc->install_legacy_write_handler(0xc000, 0xcfff, FUNC(mz800_cgram_w));
167      memory_set_bankptr(space->machine(), "bank6", mz->m_cgram);
162      spc->install_write_handler(0xc000, 0xcfff, write8_delegate(FUNC(mz_state::mz800_cgram_w),this));
163      memory_set_bankptr(machine(), "bank6", m_cgram);
168164   }
169165   else
170166   {
171      if (mz->m_hires_mode)
167      if (m_hires_mode)
172168      {
173169         /* vram from 0x8000 to 0xbfff */
174170         spc->install_readwrite_bank(0x8000, 0xbfff, "bank4");
175         memory_set_bankptr(space->machine(), "bank4", videoram);
171         memory_set_bankptr(machine(), "bank4", videoram);
176172      }
177173      else
178174      {
179175         /* vram from 0x8000 to 0x9fff */
180176         spc->install_readwrite_bank(0x8000, 0x9fff, "bank4");
181         memory_set_bankptr(space->machine(), "bank4", videoram);
177         memory_set_bankptr(machine(), "bank4", videoram);
182178
183179         /* ram from 0xa000 to 0xbfff */
184180         spc->install_readwrite_bank(0xa000, 0xbfff, "bank5");
185         memory_set_bankptr(space->machine(), "bank5", space->machine().device<ram_device>(RAM_TAG)->pointer() + 0xa000);
181         memory_set_bankptr(machine(), "bank5", machine().device<ram_device>(RAM_TAG)->pointer() + 0xa000);
186182      }
187183   }
188184
189185   return 0xff;
190186}
191187
192WRITE8_HANDLER( mz700_bank_0_w )
188WRITE8_MEMBER(mz_state::mz700_bank_0_w)
193189{
194   address_space *spc = space->machine().device("maincpu")->memory().space(AS_PROGRAM);
190   address_space *spc = machine().device("maincpu")->memory().space(AS_PROGRAM);
195191
196192   spc->install_readwrite_bank(0x0000, 0x0fff, "bank1");
197   memory_set_bankptr(space->machine(), "bank1", space->machine().device<ram_device>(RAM_TAG)->pointer());
193   memory_set_bankptr(machine(), "bank1", machine().device<ram_device>(RAM_TAG)->pointer());
198194}
199195
200WRITE8_HANDLER( mz800_bank_0_w )
196WRITE8_MEMBER(mz_state::mz800_bank_0_w)
201197{
202   address_space *spc = space->machine().device("maincpu")->memory().space(AS_PROGRAM);
198   address_space *spc = machine().device("maincpu")->memory().space(AS_PROGRAM);
203199
204200   spc->install_readwrite_bank(0x0000, 0x7fff, "bank1");
205   memory_set_bankptr(space->machine(), "bank1", space->machine().device<ram_device>(RAM_TAG)->pointer());
201   memory_set_bankptr(machine(), "bank1", machine().device<ram_device>(RAM_TAG)->pointer());
206202}
207203
208READ8_HANDLER( mz800_bank_1_r )
204READ8_MEMBER(mz_state::mz800_bank_1_r)
209205{
210   address_space *spc = space->machine().device("maincpu")->memory().space(AS_PROGRAM);
211   mz_state *mz = space->machine().driver_data<mz_state>();
206   address_space *spc = machine().device("maincpu")->memory().space(AS_PROGRAM);
212207
213208   /* switch in ram from 0x1000 to 0x1fff */
214209   spc->install_readwrite_bank(0x1000, 0x1fff, "bank2");
215   memory_set_bankptr(space->machine(), "bank2", space->machine().device<ram_device>(RAM_TAG)->pointer() + 0x1000);
210   memory_set_bankptr(machine(), "bank2", machine().device<ram_device>(RAM_TAG)->pointer() + 0x1000);
216211
217   if (mz->m_mz700_mode)
212   if (m_mz700_mode)
218213   {
219214      /* ram from 0xc000 to 0xcfff */
220215      spc->install_readwrite_bank(0xc000, 0xcfff, "bank6");
221      memory_set_bankptr(space->machine(), "bank6", space->machine().device<ram_device>(RAM_TAG)->pointer() + 0xc000);
216      memory_set_bankptr(machine(), "bank6", machine().device<ram_device>(RAM_TAG)->pointer() + 0xc000);
222217   }
223218   else
224219   {
225220      /* ram from 0x8000 to 0xbfff */
226221      spc->install_readwrite_bank(0x8000, 0xbfff, "bank4");
227      memory_set_bankptr(space->machine(), "bank4", space->machine().device<ram_device>(RAM_TAG)->pointer() + 0x8000);
222      memory_set_bankptr(machine(), "bank4", machine().device<ram_device>(RAM_TAG)->pointer() + 0x8000);
228223   }
229224
230225   return 0xff;
231226}
232227
233WRITE8_HANDLER( mz700_bank_1_w )
228WRITE8_MEMBER(mz_state::mz700_bank_1_w)
234229{
235   address_space *spc = space->machine().device("maincpu")->memory().space(AS_PROGRAM);
236   mz_state *mz = space->machine().driver_data<mz_state>();
230   address_space *spc = machine().device("maincpu")->memory().space(AS_PROGRAM);
237231
238   if (mz->m_mz700_mode)
232   if (m_mz700_mode)
239233   {
240234      /* switch in ram when not locked */
241      if (!mz->m_mz700_ram_lock)
235      if (!m_mz700_ram_lock)
242236      {
243237         spc->install_readwrite_bank(0xd000, 0xffff, "bank7");
244         memory_set_bankptr(space->machine(), "bank7", space->machine().device<ram_device>(RAM_TAG)->pointer() + 0xd000);
245         mz->m_mz700_ram_vram = FALSE;
238         memory_set_bankptr(machine(), "bank7", machine().device<ram_device>(RAM_TAG)->pointer() + 0xd000);
239         m_mz700_ram_vram = FALSE;
246240      }
247241   }
248242   else
249243   {
250244      /* switch in ram when not locked */
251      if (!mz->m_mz800_ram_lock)
245      if (!m_mz800_ram_lock)
252246      {
253247         spc->install_readwrite_bank(0xe000, 0xffff, "bank8");
254         memory_set_bankptr(space->machine(), "bank8", space->machine().device<ram_device>(RAM_TAG)->pointer() + 0xe000);
255         mz->m_mz800_ram_monitor = FALSE;
248         memory_set_bankptr(machine(), "bank8", machine().device<ram_device>(RAM_TAG)->pointer() + 0xe000);
249         m_mz800_ram_monitor = FALSE;
256250      }
257251   }
258252}
259253
260WRITE8_HANDLER( mz700_bank_2_w )
254WRITE8_MEMBER(mz_state::mz700_bank_2_w)
261255{
262   address_space *spc = space->machine().device("maincpu")->memory().space(AS_PROGRAM);
256   address_space *spc = machine().device("maincpu")->memory().space(AS_PROGRAM);
263257
264258   spc->install_read_bank(0x0000, 0x0fff, "bank1");
265259   spc->nop_write(0x0000, 0x0fff);
266   memory_set_bankptr(space->machine(), "bank1", space->machine().region("monitor")->base());
260   memory_set_bankptr(machine(), "bank1", machine().region("monitor")->base());
267261}
268262
269WRITE8_HANDLER( mz700_bank_3_w )
263WRITE8_MEMBER(mz_state::mz700_bank_3_w)
270264{
271   mz_state *state = space->machine().driver_data<mz_state>();
272   UINT8 *videoram = state->m_videoram;
273   address_space *spc = space->machine().device("maincpu")->memory().space(AS_PROGRAM);
274   mz_state *mz = space->machine().driver_data<mz_state>();
265   UINT8 *videoram = m_videoram;
266   address_space *spc = machine().device("maincpu")->memory().space(AS_PROGRAM);
275267
276   if (mz->m_mz700_mode)
268   if (m_mz700_mode)
277269   {
278      if (!mz->m_mz700_ram_lock)
270      if (!m_mz700_ram_lock)
279271      {
280272         /* switch in videoram */
281273         spc->install_readwrite_bank(0xd000, 0xd7ff, "bank7");
282         memory_set_bankptr(space->machine(), "bank7", videoram);
274         memory_set_bankptr(machine(), "bank7", videoram);
283275
284276         /* switch in colorram */
285277         spc->install_readwrite_bank(0xd800, 0xdfff, "bank9");
286         memory_set_bankptr(space->machine(), "bank9", mz->m_colorram);
278         memory_set_bankptr(machine(), "bank9", m_colorram);
287279
288         mz->m_mz700_ram_vram = TRUE;
280         m_mz700_ram_vram = TRUE;
289281
290282         /* switch in memory mapped i/o devices */
291         if (mz->m_mz700)
283         if (m_mz700)
292284         {
293            spc->install_readwrite_handler(0xe000, 0xfff3, 0, 0x1ff0, read8_delegate(FUNC(i8255_device::read), (i8255_device*)mz->m_ppi), write8_delegate(FUNC(i8255_device::write), (i8255_device*)mz->m_ppi));
294            spc->install_legacy_readwrite_handler(*mz->m_pit, 0xe004, 0xfff7, 0, 0x1ff0, FUNC(pit8253_r), FUNC(pit8253_w));
295            spc->install_legacy_readwrite_handler(0xe008, 0xfff8, 0, 0x1ff0, FUNC(mz700_e008_r), FUNC(mz700_e008_w));
285            spc->install_readwrite_handler(0xe000, 0xfff3, 0, 0x1ff0, read8_delegate(FUNC(i8255_device::read), (i8255_device*)m_ppi), write8_delegate(FUNC(i8255_device::write), (i8255_device*)m_ppi));
286            spc->install_legacy_readwrite_handler(*m_pit, 0xe004, 0xfff7, 0, 0x1ff0, FUNC(pit8253_r), FUNC(pit8253_w));
287            spc->install_readwrite_handler(0xe008, 0xfff8, 0, 0x1ff0, read8_delegate(FUNC(mz_state::mz700_e008_r),this), write8_delegate(FUNC(mz_state::mz700_e008_w),this));
296288         }
297289         else
298290         {
299            spc->install_readwrite_handler(0xe000, 0xe003, read8_delegate(FUNC(i8255_device::read), (i8255_device*)mz->m_ppi), write8_delegate(FUNC(i8255_device::write), (i8255_device*)mz->m_ppi));
300            spc->install_legacy_readwrite_handler(*mz->m_pit, 0xe004, 0xe007, FUNC(pit8253_r), FUNC(pit8253_w));
301            spc->install_legacy_readwrite_handler(0xe008, 0xe008, FUNC(mz700_e008_r), FUNC(mz700_e008_w));
291            spc->install_readwrite_handler(0xe000, 0xe003, read8_delegate(FUNC(i8255_device::read), (i8255_device*)m_ppi), write8_delegate(FUNC(i8255_device::write), (i8255_device*)m_ppi));
292            spc->install_legacy_readwrite_handler(*m_pit, 0xe004, 0xe007, FUNC(pit8253_r), FUNC(pit8253_w));
293            spc->install_readwrite_handler(0xe008, 0xe008, read8_delegate(FUNC(mz_state::mz700_e008_r),this), write8_delegate(FUNC(mz_state::mz700_e008_w),this));
302294         }
303295      }
304296   }
305297   else
306298   {
307      if (!mz->m_mz800_ram_lock)
299      if (!m_mz800_ram_lock)
308300      {
309301         /* switch in mz800 monitor rom if not locked */
310302         spc->install_read_bank(0xe000, 0xffff, "bank8");
311303         spc->nop_write(0xe000, 0xffff);
312         memory_set_bankptr(space->machine(), "bank8", space->machine().region("monitor")->base() + 0x2000);
313         mz->m_mz800_ram_monitor = TRUE;
304         memory_set_bankptr(machine(), "bank8", machine().region("monitor")->base() + 0x2000);
305         m_mz800_ram_monitor = TRUE;
314306      }
315307   }
316308}
317309
318WRITE8_HANDLER( mz700_bank_4_w )
310WRITE8_MEMBER(mz_state::mz700_bank_4_w)
319311{
320   mz_state *state = space->machine().driver_data<mz_state>();
321   UINT8 *videoram = state->m_videoram;
322   address_space *spc = space->machine().device("maincpu")->memory().space(AS_PROGRAM);
323   mz_state *mz = space->machine().driver_data<mz_state>();
312   UINT8 *videoram = m_videoram;
313   address_space *spc = machine().device("maincpu")->memory().space(AS_PROGRAM);
324314
325   if (mz->m_mz700_mode)
315   if (m_mz700_mode)
326316   {
327      mz->m_mz700_ram_lock = FALSE;      /* reset lock */
317      m_mz700_ram_lock = FALSE;      /* reset lock */
328318      mz700_bank_2_w(space, 0, 0);   /* switch in monitor rom */
329319      mz700_bank_3_w(space, 0, 0);   /* switch in videoram, colorram, and mmio */
330320
331321      /* rest is ram is always ram in mz700 mode */
332322      spc->install_readwrite_bank(0x1000, 0xcfff, "bank2");
333      memory_set_bankptr(space->machine(), "bank2", space->machine().device<ram_device>(RAM_TAG)->pointer() + 0x1000);
323      memory_set_bankptr(machine(), "bank2", machine().device<ram_device>(RAM_TAG)->pointer() + 0x1000);
334324   }
335325   else
336326   {
337327      /* monitor rom and cgrom */
338328      spc->install_read_bank(0x0000, 0x1fff, "bank1");
339329      spc->nop_write(0x0000, 0x1fff);
340      memory_set_bankptr(space->machine(), "bank1", space->machine().region("monitor")->base());
330      memory_set_bankptr(machine(), "bank1", machine().region("monitor")->base());
341331
342332      /* ram from 0x2000 to 0x7fff */
343333      spc->install_readwrite_bank(0x2000, 0x7fff, "bank3");
344      memory_set_bankptr(space->machine(), "bank3", space->machine().device<ram_device>(RAM_TAG)->pointer());
334      memory_set_bankptr(machine(), "bank3", machine().device<ram_device>(RAM_TAG)->pointer());
345335
346      if (mz->m_hires_mode)
336      if (m_hires_mode)
347337      {
348338         /* vram from 0x8000 to 0xbfff */
349339         spc->install_readwrite_bank(0x8000, 0xbfff, "bank4");
350         memory_set_bankptr(space->machine(), "bank4", videoram);
340         memory_set_bankptr(machine(), "bank4", videoram);
351341      }
352342      else
353343      {
354344         /* vram from 0x8000 to 0x9fff */
355345         spc->install_readwrite_bank(0x8000, 0x9fff, "bank4");
356         memory_set_bankptr(space->machine(), "bank4", videoram);
346         memory_set_bankptr(machine(), "bank4", videoram);
357347
358348         /* ram from 0xa000 to 0xbfff */
359349         spc->install_readwrite_bank(0xa000, 0xbfff, "bank5");
360         memory_set_bankptr(space->machine(), "bank5", space->machine().device<ram_device>(RAM_TAG)->pointer() + 0xa000);
350         memory_set_bankptr(machine(), "bank5", machine().device<ram_device>(RAM_TAG)->pointer() + 0xa000);
361351      }
362352
363353      /* ram from 0xc000 to 0xdfff */
364354      spc->install_readwrite_bank(0xc000, 0xdfff, "bank6");
365      memory_set_bankptr(space->machine(), "bank6", space->machine().device<ram_device>(RAM_TAG)->pointer() + 0xc000);
355      memory_set_bankptr(machine(), "bank6", machine().device<ram_device>(RAM_TAG)->pointer() + 0xc000);
366356
367357      /* mz800 monitor rom from 0xe000 to 0xffff */
368358      spc->install_read_bank(0xe000, 0xffff, "bank8");
369359      spc->nop_write(0xe000, 0xffff);
370      memory_set_bankptr(space->machine(), "bank8", space->machine().region("monitor")->base() + 0x2000);
371      mz->m_mz800_ram_monitor = TRUE;
360      memory_set_bankptr(machine(), "bank8", machine().region("monitor")->base() + 0x2000);
361      m_mz800_ram_monitor = TRUE;
372362
373      mz->m_mz800_ram_lock = FALSE; /* reset lock? */
363      m_mz800_ram_lock = FALSE; /* reset lock? */
374364   }
375365}
376366
377WRITE8_HANDLER( mz700_bank_5_w )
367WRITE8_MEMBER(mz_state::mz700_bank_5_w)
378368{
379   address_space *spc = space->machine().device("maincpu")->memory().space(AS_PROGRAM);
380   mz_state *mz = space->machine().driver_data<mz_state>();
369   address_space *spc = machine().device("maincpu")->memory().space(AS_PROGRAM);
381370
382   if (mz->m_mz700_mode)
371   if (m_mz700_mode)
383372   {
384373      /* prevent access from 0xd000 to 0xffff */
385      mz->m_mz700_ram_lock = TRUE;
374      m_mz700_ram_lock = TRUE;
386375      spc->nop_readwrite(0xd000, 0xffff);
387376   }
388377   else
389378   {
390379      /* prevent access from 0xe000 to 0xffff */
391      mz->m_mz800_ram_lock = TRUE;
380      m_mz800_ram_lock = TRUE;
392381      spc->nop_readwrite(0xe000, 0xffff);
393382   }
394383}
395384
396WRITE8_HANDLER( mz700_bank_6_w )
385WRITE8_MEMBER(mz_state::mz700_bank_6_w)
397386{
398   mz_state *mz = space->machine().driver_data<mz_state>();
399387
400   if (mz->m_mz700_mode)
388   if (m_mz700_mode)
401389   {
402      mz->m_mz700_ram_lock = FALSE;
390      m_mz700_ram_lock = FALSE;
403391
404392      /* restore access */
405      if (mz->m_mz700_ram_vram)
393      if (m_mz700_ram_vram)
406394         mz700_bank_3_w(space, 0, 0);
407395      else
408396         mz700_bank_1_w(space, 0, 0);
409397   }
410398   else
411399   {
412      mz->m_mz800_ram_lock = FALSE;
400      m_mz800_ram_lock = FALSE;
413401
414402      /* restore access from 0xe000 to 0xffff */
415      if (mz->m_mz800_ram_monitor)
403      if (m_mz800_ram_monitor)
416404         mz700_bank_3_w(space, 0, 0);
417405      else
418406         mz700_bank_1_w(space, 0, 0);
r14963r14964
601589
602590
603591/* port CE */
604READ8_HANDLER( mz800_crtc_r )
592READ8_MEMBER(mz_state::mz800_crtc_r)
605593{
606594   UINT8 data = 0x00;
607   LOG(1,"mz800_crtc_r",("%02X\n",data),space->machine());
595   LOG(1,"mz800_crtc_r",("%02X\n",data),machine());
608596    return data;
609597}
610598
611599
612600/* port EA */
613 READ8_HANDLER( mz800_ramdisk_r )
601READ8_MEMBER(mz_state::mz800_ramdisk_r)
614602{
615   mz_state *state = space->machine().driver_data<mz_state>();
616   UINT8 *mem = space->machine().region("user1")->base();
617   UINT8 data = mem[state->m_mz800_ramaddr];
618   LOG(2,"mz800_ramdisk_r",("[%04X] -> %02X\n", state->m_mz800_ramaddr, data),space->machine());
619   if (state->m_mz800_ramaddr++ == 0)
620      LOG(1,"mz800_ramdisk_r",("address wrap 0000\n"),space->machine());
603   UINT8 *mem = space.machine().region("user1")->base();
604   UINT8 data = mem[m_mz800_ramaddr];
605   LOG(2,"mz800_ramdisk_r",("[%04X] -> %02X\n", m_mz800_ramaddr, data),machine());
606   if (m_mz800_ramaddr++ == 0)
607      LOG(1,"mz800_ramdisk_r",("address wrap 0000\n"),machine());
621608    return data;
622609}
623610
624611/* port CC */
625WRITE8_HANDLER( mz800_write_format_w )
612WRITE8_MEMBER(mz_state::mz800_write_format_w)
626613{
627   LOG(1,"mz800_write_format_w",("%02X\n", data),space->machine());
614   LOG(1,"mz800_write_format_w",("%02X\n", data),machine());
628615}
629616
630617/* port CD */
631WRITE8_HANDLER( mz800_read_format_w )
618WRITE8_MEMBER(mz_state::mz800_read_format_w)
632619{
633   LOG(1,"mz800_read_format_w",("%02X\n", data),space->machine());
620   LOG(1,"mz800_read_format_w",("%02X\n", data),machine());
634621}
635622
636623/* port CE
r14963r14964
639626 * bit 1    1: 4bpp/2bpp        0: 2bpp/1bpp
640627 * bit 0    ???
641628 */
642WRITE8_HANDLER( mz800_display_mode_w )
629WRITE8_MEMBER(mz_state::mz800_display_mode_w)
643630{
644   mz_state *mz = space->machine().driver_data<mz_state>();
645631
646   mz->m_mz700_mode = BIT(data, 3);
647   mz->m_hires_mode = BIT(data, 2);
648   mz->m_screen = data & 0x03;
632   m_mz700_mode = BIT(data, 3);
633   m_hires_mode = BIT(data, 2);
634   m_screen = data & 0x03;
649635
650636   /* change memory maps if we switched mode */
651//  if (BIT(data, 3) != mz->m_mz700_mode)
637//  if (BIT(data, 3) != m_mz700_mode)
652638//  {
653639//      logerror("mz800_display_mode_w: switching mode to %s\n", (BIT(data, 3) ? "mz700" : "mz800"));
654//      mz->m_mz700_mode = BIT(data, 3);
655//      mz700_bank_4_w(space->machine().device("maincpu")->memory().space(AS_PROGRAM), 0, 0);
640//      m_mz700_mode = BIT(data, 3);
641//      mz700_bank_4_w(machine().device("maincpu")->memory().&space(AS_PROGRAM), 0, 0);
656642//  }
657643}
658644
659645/* port CF */
660WRITE8_HANDLER( mz800_scroll_border_w )
646WRITE8_MEMBER(mz_state::mz800_scroll_border_w)
661647{
662   LOG(1,"mz800_scroll_border_w",("%02X\n", data),space->machine());
648   LOG(1,"mz800_scroll_border_w",("%02X\n", data),machine());
663649}
664650
665651/* port EA */
666WRITE8_HANDLER( mz800_ramdisk_w )
652WRITE8_MEMBER(mz_state::mz800_ramdisk_w)
667653{
668   mz_state *state = space->machine().driver_data<mz_state>();
669   UINT8 *mem = space->machine().region("user1")->base();
670   LOG(2,"mz800_ramdisk_w",("[%04X] <- %02X\n", state->m_mz800_ramaddr, data),space->machine());
671   mem[state->m_mz800_ramaddr] = data;
672   if (state->m_mz800_ramaddr++ == 0)
673      LOG(1,"mz800_ramdisk_w",("address wrap 0000\n"),space->machine());
654   UINT8 *mem = machine().region("user1")->base();
655   LOG(2,"mz800_ramdisk_w",("[%04X] <- %02X\n", m_mz800_ramaddr, data),machine());
656   mem[m_mz800_ramaddr] = data;
657   if (m_mz800_ramaddr++ == 0)
658      LOG(1,"mz800_ramdisk_w",("address wrap 0000\n"),machine());
674659}
675660
676661/* port EB */
677WRITE8_HANDLER( mz800_ramaddr_w )
662WRITE8_MEMBER(mz_state::mz800_ramaddr_w)
678663{
679   mz_state *state = space->machine().driver_data<mz_state>();
680   state->m_mz800_ramaddr = (cpu_get_reg(space->machine().device("maincpu"), Z80_BC) & 0xff00) | (data & 0xff);
681   LOG(1,"mz800_ramaddr_w",("%04X\n", state->m_mz800_ramaddr),space->machine());
664   m_mz800_ramaddr = (cpu_get_reg(machine().device("maincpu"), Z80_BC) & 0xff00) | (data & 0xff);
665   LOG(1,"mz800_ramaddr_w",("%04X\n", m_mz800_ramaddr),machine());
682666}
683667
684668/* port F0 */
685WRITE8_HANDLER( mz800_palette_w )
669WRITE8_MEMBER(mz_state::mz800_palette_w)
686670{
687   mz_state *state = space->machine().driver_data<mz_state>();
688671   if (data & 0x40)
689672   {
690        state->m_mz800_palette_bank = data & 3;
691      LOG(1,"mz800_palette_w",("bank: %d\n", state->m_mz800_palette_bank),space->machine());
673        m_mz800_palette_bank = data & 3;
674      LOG(1,"mz800_palette_w",("bank: %d\n", m_mz800_palette_bank),machine());
692675    }
693676   else
694677   {
695678      int idx = (data >> 4) & 3;
696679      int val = data & 15;
697      LOG(1,"mz800_palette_w",("palette[%d] <- %d\n", idx, val),space->machine());
698      state->m_mz800_palette[idx] = val;
680      LOG(1,"mz800_palette_w",("palette[%d] <- %d\n", idx, val),machine());
681      m_mz800_palette[idx] = val;
699682   }
700683}
src/mess/machine/lisa.c
r14963r14964
147147    protos
148148*/
149149
150static READ16_HANDLER ( lisa_IO_r );
151static WRITE16_HANDLER ( lisa_IO_w );
152150
153151
152
153
154154/*
155155    Interrupt handling
156156*/
r14963r14964
12601260   }
12611261}
12621262
1263READ8_HANDLER ( lisa_fdc_io_r )
1263READ8_MEMBER(lisa_state::lisa_fdc_io_r)
12641264{
12651265   int answer=0;
1266   device_t *fdc = space->machine().device("fdc");
1266   device_t *fdc = machine().device("fdc");
12671267
12681268   switch ((offset & 0x0030) >> 4)
12691269   {
r14963r14964
12721272      break;
12731273
12741274   case 1:   /* TTL glue */
1275      lisa_fdc_ttl_glue_access(space->machine(), offset);
1275      lisa_fdc_ttl_glue_access(machine(), offset);
12761276      answer = 0;   /* ??? */
12771277      break;
12781278
r14963r14964
12881288   return answer;
12891289}
12901290
1291WRITE8_HANDLER ( lisa_fdc_io_w )
1291WRITE8_MEMBER(lisa_state::lisa_fdc_io_w)
12921292{
1293   lisa_state *state = space->machine().driver_data<lisa_state>();
1294   device_t *fdc = space->machine().device("fdc");
1293   device_t *fdc = machine().device("fdc");
12951294
12961295   switch ((offset & 0x0030) >> 4)
12971296   {
r14963r14964
13001299      break;
13011300
13021301   case 1:   /* TTL glue */
1303      lisa_fdc_ttl_glue_access(space->machine(), offset);
1302      lisa_fdc_ttl_glue_access(machine(), offset);
13041303      break;
13051304
13061305   case 2:   /* writes the PWM register */
13071306      /* the written value is used to generate the motor speed control signal */
13081307#if 0
1309      if (state->m_features.floppy_hardware == twiggy)
1308      if (m_features.floppy_hardware == twiggy)
13101309         twiggy_set_speed((256-data) * 1.3 /* ??? */ + 237 /* ??? */);
13111310      else
13121311#endif
1313      if (state->m_features.floppy_hardware == sony_lisa210)
1312      if (m_features.floppy_hardware == sony_lisa210)
13141313         sony_set_speed(((256-data) * 1.3) + 237);
13151314      break;
13161315
r14963r14964
13191318   }
13201319}
13211320
1322READ8_HANDLER ( lisa_fdc_r )
1321READ8_MEMBER(lisa_state::lisa_fdc_r)
13231322{
1324   lisa_state *state = space->machine().driver_data<lisa_state>();
13251323   if (! (offset & 0x1000))
13261324   {
13271325      if (! (offset & 0x0800))
13281326         if (! (offset & 0x0400))
1329            return state->m_fdc_ram[offset & 0x03ff];
1327            return m_fdc_ram[offset & 0x03ff];
13301328         else
13311329            return lisa_fdc_io_r(space, offset & 0x03ff);
13321330      else
13331331         return 0;   /* ??? */
13341332   }
13351333   else
1336      return state->m_fdc_rom[offset & 0x0fff];
1334      return m_fdc_rom[offset & 0x0fff];
13371335}
13381336
1339READ8_HANDLER ( lisa210_fdc_r )
1337READ8_MEMBER(lisa_state::lisa210_fdc_r)
13401338{
1341   lisa_state *state = space->machine().driver_data<lisa_state>();
13421339   if (! (offset & 0x1000))
13431340   {
13441341      if (! (offset & 0x0400))
13451342         if (! (offset & 0x0800))
1346            return state->m_fdc_ram[offset & 0x03ff];
1343            return m_fdc_ram[offset & 0x03ff];
13471344         else
13481345            return lisa_fdc_io_r(space, offset & 0x03ff);
13491346      else
13501347         return 0;   /* ??? */
13511348   }
13521349   else
1353      return state->m_fdc_rom[offset & 0x0fff];
1350      return m_fdc_rom[offset & 0x0fff];
13541351}
13551352
1356WRITE8_HANDLER ( lisa_fdc_w )
1353WRITE8_MEMBER(lisa_state::lisa_fdc_w)
13571354{
1358   lisa_state *state = space->machine().driver_data<lisa_state>();
13591355   if (! (offset & 0x1000))
13601356   {
13611357      if (! (offset & 0x0800))
13621358      {
13631359         if (! (offset & 0x0400))
1364            state->m_fdc_ram[offset & 0x03ff] = data;
1360            m_fdc_ram[offset & 0x03ff] = data;
13651361         else
13661362            lisa_fdc_io_w(space, offset & 0x03ff, data);
13671363      }
13681364   }
13691365}
13701366
1371WRITE8_HANDLER ( lisa210_fdc_w )
1367WRITE8_MEMBER(lisa_state::lisa210_fdc_w)
13721368{
1373   lisa_state *state = space->machine().driver_data<lisa_state>();
13741369   if (! (offset & 0x1000))
13751370   {
13761371      if (! (offset & 0x0400))
13771372      {
13781373         if (! (offset & 0x0800))
1379            state->m_fdc_ram[offset & 0x03ff] = data;
1374            m_fdc_ram[offset & 0x03ff] = data;
13801375         else
13811376            lisa_fdc_io_w(space, offset & 0x03ff, data);
13821377      }
13831378   }
13841379}
13851380
1386READ16_HANDLER ( lisa_r )
1381READ16_MEMBER(lisa_state::lisa_r)
13871382{
1388   lisa_state *state = space->machine().driver_data<lisa_state>();
13891383   int answer=0;
13901384
13911385   /* segment register set */
1392   int the_seg = state->m_seg;
1386   int the_seg = m_seg;
13931387
13941388   /* upper 7 bits -> segment # */
13951389   int segment = (offset >> 16) & 0x7f;
13961390
13971391   /*logerror("read, logical address%lX\n", offset);*/
13981392
1399   if (state->m_setup)
1393   if (m_setup)
14001394   {   /* special setup mode */
14011395      if (offset & 0x002000)
14021396      {
r14963r14964
14091403            /*logerror("read from segment registers (%X:%X) ", the_seg, segment);*/
14101404            if (offset & 0x000004)
14111405            {   /* sorg register */
1412               answer = state->m_real_mmu_regs[the_seg][segment].sorg;
1406               answer = m_real_mmu_regs[the_seg][segment].sorg;
14131407               /*logerror("sorg, data = %X\n", answer);*/
14141408            }
14151409            else
14161410            {   /* slim register */
1417               answer = state->m_real_mmu_regs[the_seg][segment].slim;
1411               answer = m_real_mmu_regs[the_seg][segment].slim;
14181412               /*logerror("slim, data = %X\n", answer);*/
14191413            }
14201414         }
14211415         else
14221416         {   /* system ROMs */
1423            answer = ((UINT16*)state->m_rom_ptr)[(offset & 0x001fff)];
1417            answer = ((UINT16*)m_rom_ptr)[(offset & 0x001fff)];
14241418            /*logerror("dst address in ROM (setup mode)\n");*/
14251419         }
14261420
r14963r14964
14281422      }
14291423   }
14301424
1431   if (cpu_get_reg(space->machine().device("maincpu"), M68K_SR) & 0x2000)
1425   if (cpu_get_reg(machine().device("maincpu"), M68K_SR) & 0x2000)
14321426      /* supervisor mode -> force register file 0 */
14331427      the_seg = 0;
14341428
r14963r14964
14371431      int seg_offset = (offset & 0x00ffff) << 1;
14381432
14391433      /* add revelant origin -> address */
1440      offs_t address = (state->m_mmu_regs[the_seg][segment].sorg + seg_offset) & 0x1fffff;
1434      offs_t address = (m_mmu_regs[the_seg][segment].sorg + seg_offset) & 0x1fffff;
14411435
14421436      /*logerror("read, logical address%lX\n", offset);
14431437        logerror("physical address%lX\n", address);*/
14441438
1445      switch (state->m_mmu_regs[the_seg][segment].type)
1439      switch (m_mmu_regs[the_seg][segment].type)
14461440      {
14471441
14481442      case RAM_stack_r:
14491443      case RAM_stack_rw:
1450         if (address <= state->m_mmu_regs[the_seg][segment].slim)
1444         if (address <= m_mmu_regs[the_seg][segment].slim)
14511445         {
14521446            /* out of segment limits : bus error */
14531447
14541448         }
1455         answer = *(UINT16 *)(state->m_ram_ptr + address);
1449         answer = *(UINT16 *)(m_ram_ptr + address);
14561450
1457         if (state->m_bad_parity_count && state->m_test_parity
1458               && (state->m_bad_parity_table[address >> 3] & (0x3 << (address & 0x7))))
1451         if (m_bad_parity_count && m_test_parity
1452               && (m_bad_parity_table[address >> 3] & (0x3 << (address & 0x7))))
14591453         {
1460            state->m_mem_err_addr_latch = address >> 5;
1461            set_parity_error_pending(space->machine(), 1);
1454            m_mem_err_addr_latch = address >> 5;
1455            set_parity_error_pending(machine(), 1);
14621456         }
14631457
14641458         break;
14651459
14661460      case RAM_r:
14671461      case RAM_rw:
1468         if (address > state->m_mmu_regs[the_seg][segment].slim)
1462         if (address > m_mmu_regs[the_seg][segment].slim)
14691463         {
14701464            /* out of segment limits : bus error */
14711465
14721466         }
1473         answer = *(UINT16 *)(state->m_ram_ptr + address);
1467         answer = *(UINT16 *)(m_ram_ptr + address);
14741468
1475         if (state->m_bad_parity_count && state->m_test_parity
1476               && (state->m_bad_parity_table[address >> 3] & (0x3 << (address & 0x7))))
1469         if (m_bad_parity_count && m_test_parity
1470               && (m_bad_parity_table[address >> 3] & (0x3 << (address & 0x7))))
14771471         {
1478            state->m_mem_err_addr_latch = address >> 5;
1479            set_parity_error_pending(space->machine(), 1);
1472            m_mem_err_addr_latch = address >> 5;
1473            set_parity_error_pending(machine(), 1);
14801474         }
14811475
14821476         break;
r14963r14964
14951489
14961490      case special_IO:
14971491         if (! (address & 0x008000))
1498            answer = *(UINT16 *)(state->m_rom_ptr + (address & 0x003fff));
1492            answer = *(UINT16 *)(m_rom_ptr + (address & 0x003fff));
14991493         else
15001494         {   /* read serial number from ROM */
15011495            /* this has to be be the least efficient way to read a ROM :-) */
r14963r14964
15041498            /* problem : due to collisions with video, timings of the LISA CPU
15051499                are slightly different from timings of a bare 68k */
15061500            /* so we use a kludge... */
1507            int time_in_frame = space->machine().primary_screen->vpos();
1501            int time_in_frame = machine().primary_screen->vpos();
15081502
15091503            /* the BOOT ROM only reads 56 bits, so there must be some wrap-around for
15101504                videoROM_address <= 56 */
r14963r14964
15191513                there are no additionnal margins).
15201514                This is caused by the fact that 68k timings are wrong (memory accesses are
15211515                interlaced with the video hardware, which is not emulated). */
1522            if (state->m_features.has_mac_xl_video)
1516            if (m_features.has_mac_xl_video)
15231517            {
15241518               if ((time_in_frame >= 374) && (time_in_frame <= 392))   /* these values have not been tested */
1525                  answer = state->m_videoROM_ptr[state->m_videoROM_address|0x80] << 8;
1519                  answer = m_videoROM_ptr[m_videoROM_address|0x80] << 8;
15261520               else
1527                  answer = state->m_videoROM_ptr[state->m_videoROM_address] << 8;
1521                  answer = m_videoROM_ptr[m_videoROM_address] << 8;
15281522            }
15291523            else
15301524            {
15311525               if ((time_in_frame >= 364) && (time_in_frame <= 375))
15321526               {
1533                  answer = state->m_videoROM_ptr[state->m_videoROM_address|0x80] << 8;
1534            logerror("reading1 %06X=%04x PC=%06x time=%d\n", address, answer, cpu_get_pc(space->machine().device("maincpu")), time_in_frame);
1527                  answer = m_videoROM_ptr[m_videoROM_address|0x80] << 8;
1528            logerror("reading1 %06X=%04x PC=%06x time=%d\n", address, answer, cpu_get_pc(machine().device("maincpu")), time_in_frame);
15351529               }
15361530               else
15371531               {
1538                  answer = state->m_videoROM_ptr[state->m_videoROM_address] << 8;
1539            logerror("reading2 %06X=%04x PC=%06x time=%d\n", address, answer, cpu_get_pc(space->machine().device("maincpu")), time_in_frame);
1532                  answer = m_videoROM_ptr[m_videoROM_address] << 8;
1533            logerror("reading2 %06X=%04x PC=%06x time=%d\n", address, answer, cpu_get_pc(machine().device("maincpu")), time_in_frame);
15401534               }
15411535            }
15421536
15431537
1544            state->m_videoROM_address = (state->m_videoROM_address + 1) & 0x7f;
1545            if (state->m_videoROM_address == ((state->m_features.has_mac_xl_video) ? 48 : 56)) {
1546               logerror("loop %d\n", state->m_videoROM_address);
1547               state->m_videoROM_address = 0;
1538            m_videoROM_address = (m_videoROM_address + 1) & 0x7f;
1539            if (m_videoROM_address == ((m_features.has_mac_xl_video) ? 48 : 56)) {
1540               logerror("loop %d\n", m_videoROM_address);
1541               m_videoROM_address = 0;
15481542            }
15491543
15501544         }
r14963r14964
15581552   return answer;
15591553}
15601554
1561WRITE16_HANDLER ( lisa_w )
1555WRITE16_MEMBER(lisa_state::lisa_w)
15621556{
1563   lisa_state *state = space->machine().driver_data<lisa_state>();
15641557   /* segment register set */
1565   int the_seg = state->m_seg;
1558   int the_seg = m_seg;
15661559
15671560   /* upper 7 bits -> segment # */
15681561   int segment = (offset >> 16) & 0x7f;
15691562
15701563
1571   if (state->m_setup)
1564   if (m_setup)
15721565   {
15731566      if (offset & 0x002000)
15741567      {
r14963r14964
15821575            if (offset & 0x000004)
15831576            {   /* sorg register */
15841577               logerror("sorg, data = %X\n", data);
1585               state->m_real_mmu_regs[the_seg][segment].sorg = data & 0xFFF;
1586               state->m_mmu_regs[the_seg][segment].sorg = (data & 0x0fff) << 9;
1578               m_real_mmu_regs[the_seg][segment].sorg = data & 0xFFF;
1579               m_mmu_regs[the_seg][segment].sorg = (data & 0x0fff) << 9;
15871580            }
15881581            else
15891582            {   /* slim register */
15901583               logerror("slim, data = %X\n", data);
1591               state->m_real_mmu_regs[the_seg][segment].slim = data & 0xFFF;
1592               state->m_mmu_regs[the_seg][segment].slim = (~ (data << 9)) & 0x01ffff;
1584               m_real_mmu_regs[the_seg][segment].slim = data & 0xFFF;
1585               m_mmu_regs[the_seg][segment].slim = (~ (data << 9)) & 0x01ffff;
15931586               switch ((data & 0x0f00) >> 8)
15941587               {
15951588               case 0x4:
15961589                  /*logerror("type : RAM stack r\n");*/
1597                  state->m_mmu_regs[the_seg][segment].type = RAM_stack_r;
1590                  m_mmu_regs[the_seg][segment].type = RAM_stack_r;
15981591                  break;
15991592               case 0x5:
16001593                  /*logerror("type : RAM r\n");*/
1601                  state->m_mmu_regs[the_seg][segment].type = RAM_r;
1594                  m_mmu_regs[the_seg][segment].type = RAM_r;
16021595                  break;
16031596               case 0x6:
16041597                  /*logerror("type : RAM stack rw\n");*/
1605                  state->m_mmu_regs[the_seg][segment].type = RAM_stack_rw;
1598                  m_mmu_regs[the_seg][segment].type = RAM_stack_rw;
16061599                  break;
16071600               case 0x7:
16081601                  /*logerror("type : RAM rw\n");*/
1609                  state->m_mmu_regs[the_seg][segment].type = RAM_rw;
1602                  m_mmu_regs[the_seg][segment].type = RAM_rw;
16101603                  break;
16111604               case 0x8:
16121605               case 0x9:   /* not documented, but used by ROMs (?) */
16131606                  /*logerror("type : I/O\n");*/
1614                  state->m_mmu_regs[the_seg][segment].type = IO;
1607                  m_mmu_regs[the_seg][segment].type = IO;
16151608                  break;
16161609               case 0xC:
16171610                  /*logerror("type : invalid\n");*/
1618                  state->m_mmu_regs[the_seg][segment].type = invalid;
1611                  m_mmu_regs[the_seg][segment].type = invalid;
16191612                  break;
16201613               case 0xF:
16211614                  logerror("type : special I/O\n");
1622                  state->m_mmu_regs[the_seg][segment].type = special_IO;
1615                  m_mmu_regs[the_seg][segment].type = special_IO;
16231616                  break;
16241617               default:   /* "unpredictable results" */
16251618                  logerror("type : unknown\n");
1626                  state->m_mmu_regs[the_seg][segment].type = invalid;
1619                  m_mmu_regs[the_seg][segment].type = invalid;
16271620                  break;
16281621               }
16291622            }
r14963r14964
16361629      }
16371630   }
16381631
1639   if (cpu_get_reg(space->machine().device("maincpu"), M68K_SR) & 0x2000)
1632   if (cpu_get_reg(machine().device("maincpu"), M68K_SR) & 0x2000)
16401633      /* supervisor mode -> force register file 0 */
16411634      the_seg = 0;
16421635
r14963r14964
16451638      int seg_offset = (offset & 0x00ffff) << 1;
16461639
16471640      /* add revelant origin -> address */
1648      offs_t address = (state->m_mmu_regs[the_seg][segment].sorg + seg_offset) & 0x1fffff;
1641      offs_t address = (m_mmu_regs[the_seg][segment].sorg + seg_offset) & 0x1fffff;
16491642
1650      switch (state->m_mmu_regs[the_seg][segment].type)
1643      switch (m_mmu_regs[the_seg][segment].type)
16511644      {
16521645
16531646      case RAM_stack_rw:
1654         if (address <= state->m_mmu_regs[the_seg][segment].slim)
1647         if (address <= m_mmu_regs[the_seg][segment].slim)
16551648         {
16561649            /* out of segment limits : bus error */
16571650
16581651         }
1659         COMBINE_DATA((UINT16 *) (state->m_ram_ptr + address));
1660         if (state->m_diag2)
1652         COMBINE_DATA((UINT16 *) (m_ram_ptr + address));
1653         if (m_diag2)
16611654         {
16621655            if ((ACCESSING_BITS_0_7)
1663               && ! (state->m_bad_parity_table[address >> 3] & (0x1 << (address & 0x7))))
1656               && ! (m_bad_parity_table[address >> 3] & (0x1 << (address & 0x7))))
16641657            {
1665               state->m_bad_parity_table[address >> 3] |= 0x1 << (address & 0x7);
1666               state->m_bad_parity_count++;
1658               m_bad_parity_table[address >> 3] |= 0x1 << (address & 0x7);
1659               m_bad_parity_count++;
16671660            }
16681661            if ((ACCESSING_BITS_8_15)
1669               && ! (state->m_bad_parity_table[address >> 3] & (0x2 << (address & 0x7))))
1662               && ! (m_bad_parity_table[address >> 3] & (0x2 << (address & 0x7))))
16701663            {
1671               state->m_bad_parity_table[address >> 3] |= 0x2 << (address & 0x7);
1672               state->m_bad_parity_count++;
1664               m_bad_parity_table[address >> 3] |= 0x2 << (address & 0x7);
1665               m_bad_parity_count++;
16731666            }
16741667         }
1675         else if (state->m_bad_parity_table[address >> 3] & (0x3 << (address & 0x7)))
1668         else if (m_bad_parity_table[address >> 3] & (0x3 << (address & 0x7)))
16761669         {
16771670            if ((ACCESSING_BITS_0_7)
1678               && (state->m_bad_parity_table[address >> 3] & (0x1 << (address & 0x7))))
1671               && (m_bad_parity_table[address >> 3] & (0x1 << (address & 0x7))))
16791672            {
1680               state->m_bad_parity_table[address >> 3] &= ~ (0x1 << (address & 0x7));
1681               state->m_bad_parity_count--;
1673               m_bad_parity_table[address >> 3] &= ~ (0x1 << (address & 0x7));
1674               m_bad_parity_count--;
16821675            }
16831676            if ((ACCESSING_BITS_8_15)
1684               && (state->m_bad_parity_table[address >> 3] & (0x2 << (address & 0x7))))
1677               && (m_bad_parity_table[address >> 3] & (0x2 << (address & 0x7))))
16851678            {
1686               state->m_bad_parity_table[address >> 3] &= ~ (0x2 << (address & 0x7));
1687               state->m_bad_parity_count--;
1679               m_bad_parity_table[address >> 3] &= ~ (0x2 << (address & 0x7));
1680               m_bad_parity_count--;
16881681            }
16891682         }
16901683         break;
16911684
16921685      case RAM_rw:
1693         if (address > state->m_mmu_regs[the_seg][segment].slim)
1686         if (address > m_mmu_regs[the_seg][segment].slim)
16941687         {
16951688            /* out of segment limits : bus error */
16961689
16971690         }
1698         COMBINE_DATA((UINT16 *) (state->m_ram_ptr + address));
1699         if (state->m_diag2)
1691         COMBINE_DATA((UINT16 *) (m_ram_ptr + address));
1692         if (m_diag2)
17001693         {
17011694            if ((ACCESSING_BITS_0_7)
1702               && ! (state->m_bad_parity_table[address >> 3] & (0x1 << (address & 0x7))))
1695               && ! (m_bad_parity_table[address >> 3] & (0x1 << (address & 0x7))))
17031696            {
1704               state->m_bad_parity_table[address >> 3] |= 0x1 << (address & 0x7);
1705               state->m_bad_parity_count++;
1697               m_bad_parity_table[address >> 3] |= 0x1 << (address & 0x7);
1698               m_bad_parity_count++;
17061699            }
17071700            if ((ACCESSING_BITS_8_15)
1708               && ! (state->m_bad_parity_table[address >> 3] & (0x2 << (address & 0x7))))
1701               && ! (m_bad_parity_table[address >> 3] & (0x2 << (address & 0x7))))
17091702            {
1710               state->m_bad_parity_table[address >> 3] |= 0x2 << (address & 0x7);
1711               state->m_bad_parity_count++;
1703               m_bad_parity_table[address >> 3] |= 0x2 << (address & 0x7);
1704               m_bad_parity_count++;
17121705            }
17131706         }
1714         else if (state->m_bad_parity_table[address >> 3] & (0x3 << (address & 0x7)))
1707         else if (m_bad_parity_table[address >> 3] & (0x3 << (address & 0x7)))
17151708         {
17161709            if ((ACCESSING_BITS_0_7)
1717               && (state->m_bad_parity_table[address >> 3] & (0x1 << (address & 0x7))))
1710               && (m_bad_parity_table[address >> 3] & (0x1 << (address & 0x7))))
17181711            {
1719               state->m_bad_parity_table[address >> 3] &= ~ (0x1 << (address & 0x7));
1720               state->m_bad_parity_count--;
1712               m_bad_parity_table[address >> 3] &= ~ (0x1 << (address & 0x7));
1713               m_bad_parity_count--;
17211714            }
17221715            if ((ACCESSING_BITS_8_15)
1723               && (state->m_bad_parity_table[address >> 3] & (0x2 << (address & 0x7))))
1716               && (m_bad_parity_table[address >> 3] & (0x2 << (address & 0x7))))
17241717            {
1725               state->m_bad_parity_table[address >> 3] &= ~ (0x2 << (address & 0x7));
1726               state->m_bad_parity_count--;
1718               m_bad_parity_table[address >> 3] &= ~ (0x2 << (address & 0x7));
1719               m_bad_parity_count--;
17271720            }
17281721         }
17291722         break;
r14963r14964
18281821   }
18291822}
18301823
1831static READ16_HANDLER ( lisa_IO_r )
1824READ16_MEMBER(lisa_state::lisa_IO_r)
18321825{
1833   lisa_state *state = space->machine().driver_data<lisa_state>();
1834   via6522_device *via_0 = space->machine().device<via6522_device>("via6522_0");
1835   via6522_device *via_1 = space->machine().device<via6522_device>("via6522_1");
1826   via6522_device *via_0 = machine().device<via6522_device>("via6522_0");
1827   via6522_device *via_1 = machine().device<via6522_device>("via6522_1");
18361828   int answer=0;
18371829
18381830   switch ((offset & 0x7000) >> 12)
r14963r14964
18671859         if (! (offset & 0x400))
18681860         {
18691861            /*if (ACCESSING_BITS_0_7)*/   /* Geez, who cares ? */
1870               answer = state->m_fdc_ram[offset & 0x03ff] & 0xff;   /* right ??? */
1862               answer = m_fdc_ram[offset & 0x03ff] & 0xff;   /* right ??? */
18711863         }
18721864      }
18731865      else
r14963r14964
18841876         case 2:   /* parallel port */
18851877            /* 1 VIA located at 0xD901 */
18861878            if (ACCESSING_BITS_0_7)
1887               return via_1->read(*space, (offset >> 2) & 0xf);
1879               return via_1->read(space, (offset >> 2) & 0xf);
18881880            break;
18891881
18901882         case 3:   /* keyboard/mouse cops via */
18911883            /* 1 VIA located at 0xDD81 */
18921884            if (ACCESSING_BITS_0_7)
1893               return via_0->read(*space, offset & 0xf);
1885               return via_0->read(space, offset & 0xf);
18941886            break;
18951887         }
18961888      }
r14963r14964
19011893      switch ((offset & 0x0C00) >> 10)
19021894      {
19031895      case 0x0:   /* cpu board control */
1904         cpu_board_control_access(space->machine(), offset & 0x03ff);
1896         cpu_board_control_access(machine(), offset & 0x03ff);
19051897         break;
19061898
19071899      case 0x1:   /* Video Address Latch */
1908         answer = state->m_video_address_latch;
1900         answer = m_video_address_latch;
19091901         break;
19101902
19111903      case 0x2:   /* Memory Error Address Latch */
1912         answer = state->m_mem_err_addr_latch;
1904         answer = m_mem_err_addr_latch;
19131905         break;
19141906
19151907      case 0x3:   /* Status Register */
19161908         answer = 0;
1917         if (! state->m_parity_error_pending)
1909         if (! m_parity_error_pending)
19181910            answer |= 0x02;
1919         if (state->m_VTIR<=1)
1911         if (m_VTIR<=1)
19201912// GFE : needs to be in phase with Serial NUM
19211913         {
1922            int time_in_frame = space->machine().primary_screen->vpos();
1923            if (state->m_features.has_mac_xl_video)
1914            int time_in_frame = machine().primary_screen->vpos();
1915            if (m_features.has_mac_xl_video)
19241916            {
19251917               if ((time_in_frame >= 374) && (time_in_frame <= 392))   /* these values have not been tested */
19261918               {   /* if VSyncing, read ROM 2nd half ? */
19271919               }
19281920               else
19291921               {
1930                  state->m_VTIR=0;
1922                  m_VTIR=0;
19311923                  answer |= 0x04;
19321924               }
19331925            }
r14963r14964
19391931               }
19401932               else
19411933               {
1942                  state->m_VTIR=0;
1934                  m_VTIR=0;
19431935                  answer |= 0x04;
19441936               }
19451937            }
r14963r14964
19481940         else
19491941                  answer |= 0x04;
19501942         /* huh... we need to emulate some other bits */
1951         logerror("read status PC=%x val=%x\n", cpu_get_pc(space->machine().device("maincpu")), answer);
1943         logerror("read status PC=%x val=%x\n", cpu_get_pc(machine().device("maincpu")), answer);
19521944
19531945         break;
19541946      }
r14963r14964
19581950   return answer;
19591951}
19601952
1961static WRITE16_HANDLER ( lisa_IO_w )
1953WRITE16_MEMBER(lisa_state::lisa_IO_w)
19621954{
1963   lisa_state *state = space->machine().driver_data<lisa_state>();
1964   via6522_device *via_0 = space->machine().device<via6522_device>("via6522_0");
1965   via6522_device *via_1 = space->machine().device<via6522_device>("via6522_1");
1955   via6522_device *via_0 = machine().device<via6522_device>("via6522_0");
1956   via6522_device *via_1 = machine().device<via6522_device>("via6522_1");
19661957
19671958   switch ((offset & 0x7000) >> 12)
19681959   {
r14963r14964
19971988         if (! (offset & 0x0400))
19981989         {
19991990            if (ACCESSING_BITS_0_7)
2000               state->m_fdc_ram[offset & 0x03ff] = data & 0xff;
1991               m_fdc_ram[offset & 0x03ff] = data & 0xff;
20011992         }
20021993      }
20031994      else
r14963r14964
20102001
20112002         case 2:   /* paralel port */
20122003            if (ACCESSING_BITS_0_7)
2013               via_1->write(*space, (offset >> 2) & 0xf, data & 0xff);
2004               via_1->write(space, (offset >> 2) & 0xf, data & 0xff);
20142005            break;
20152006
20162007         case 3:   /* keyboard/mouse cops via */
20172008            if (ACCESSING_BITS_0_7)
2018               via_0->write(*space, offset & 0xf, data & 0xff);
2009               via_0->write(space, offset & 0xf, data & 0xff);
20192010            break;
20202011         }
20212012      }
r14963r14964
20262017      switch ((offset & 0x0C00) >> 10)
20272018      {
20282019      case 0x0:   /* cpu board control */
2029         cpu_board_control_access(space->machine(), offset & 0x03ff);
2020         cpu_board_control_access(machine(), offset & 0x03ff);
20302021         break;
20312022
20322023      case 0x1:   /* Video Address Latch */
20332024         /*logerror("video address latch write offs=%X, data=%X\n", offset, data);*/
2034         COMBINE_DATA(& state->m_video_address_latch);
2035         state->m_videoram_ptr = ((UINT16 *)state->m_ram_ptr) + ((state->m_video_address_latch << 6) & 0xfc000);
2036         /*logerror("video address latch %X -> base address %X\n", state->m_video_address_latch,
2037                            (state->m_video_address_latch << 7) & 0x1f8000);*/
2025         COMBINE_DATA(& m_video_address_latch);
2026         m_videoram_ptr = ((UINT16 *)m_ram_ptr) + ((m_video_address_latch << 6) & 0xfc000);
2027         /*logerror("video address latch %X -> base address %X\n", m_video_address_latch,
2028                            (m_video_address_latch << 7) & 0x1f8000);*/
20382029         break;
20392030      }
20402031      break;
src/mess/machine/lynx.c
r14963r14964
826826- in divide, the remainder will have 2 possible errors, depending on its actual value (no further
827827notes on these errors available) */
828828
829static void lynx_divide( lynx_state *state )
829void lynx_state::lynx_divide()
830830{
831831   UINT32 left;
832832   UINT16 right;
r14963r14964
840840    Remainder (JK)LM
841841    */
842842
843   left = state->m_suzy.data[MATH_H] | (state->m_suzy.data[MATH_G] << 8) | (state->m_suzy.data[MATH_F] << 16) | (state->m_suzy.data[MATH_E] << 24);
844   right = state->m_suzy.data[MATH_P] | (state->m_suzy.data[MATH_N] << 8);
843   left = m_suzy.data[MATH_H] | (m_suzy.data[MATH_G] << 8) | (m_suzy.data[MATH_F] << 16) | (m_suzy.data[MATH_E] << 24);
844   right = m_suzy.data[MATH_P] | (m_suzy.data[MATH_N] << 8);
845845
846   state->m_suzy.accumulate_overflow = FALSE;
846   m_suzy.accumulate_overflow = FALSE;
847847   if (right == 0)
848848   {
849      state->m_suzy.accumulate_overflow = TRUE;   /* during divisions, this bit is used to detect denominator = 0 */
849      m_suzy.accumulate_overflow = TRUE;   /* during divisions, this bit is used to detect denominator = 0 */
850850      res = 0xffffffff;
851851      mod = 0; //?
852852   }
r14963r14964
856856      mod = left % right;
857857   }
858858//  logerror("coprocessor %8x / %8x = %4x\n", left, right, res);
859   state->m_suzy.data[MATH_D] = res & 0xff;
860   state->m_suzy.data[MATH_C] = res >> 8;
861   state->m_suzy.data[MATH_B] = res >> 16;
862   state->m_suzy.data[MATH_A] = res >> 24;
859   m_suzy.data[MATH_D] = res & 0xff;
860   m_suzy.data[MATH_C] = res >> 8;
861   m_suzy.data[MATH_B] = res >> 16;
862   m_suzy.data[MATH_A] = res >> 24;
863863
864   state->m_suzy.data[MATH_M] = mod & 0xff;
865   state->m_suzy.data[MATH_L] = mod >> 8;
866   state->m_suzy.data[MATH_K] = 0; // documentation states the hardware sets these to zero on divides
867   state->m_suzy.data[MATH_J] = 0;
864   m_suzy.data[MATH_M] = mod & 0xff;
865   m_suzy.data[MATH_L] = mod >> 8;
866   m_suzy.data[MATH_K] = 0; // documentation states the hardware sets these to zero on divides
867   m_suzy.data[MATH_J] = 0;
868868}
869869
870static void lynx_multiply( lynx_state *state )
870void lynx_state::lynx_multiply()
871871{
872872   UINT16 left, right;
873873   UINT32 res, accu;
r14963r14964
879879                EFGH
880880    Accumulate  JKLM
881881    */
882   state->m_suzy.accumulate_overflow = FALSE;
882   m_suzy.accumulate_overflow = FALSE;
883883
884   left = state->m_suzy.data[MATH_B] | (state->m_suzy.data[MATH_A] << 8);
885   right = state->m_suzy.data[MATH_D] | (state->m_suzy.data[MATH_C] << 8);
884   left = m_suzy.data[MATH_B] | (m_suzy.data[MATH_A] << 8);
885   right = m_suzy.data[MATH_D] | (m_suzy.data[MATH_C] << 8);
886886
887887   res = left * right;
888888
889   if (state->m_suzy.signed_math)
889   if (m_suzy.signed_math)
890890   {
891      if (!(state->m_sign_AB + state->m_sign_CD))   /* different signs */
891      if (!(m_sign_AB + m_sign_CD))   /* different signs */
892892         res = (res ^ 0xffffffff) + 1;
893893   }
894894
895   state->m_suzy.data[MATH_H] = res & 0xff;
896   state->m_suzy.data[MATH_G] = res >> 8;
897   state->m_suzy.data[MATH_F] = res >> 16;
898   state->m_suzy.data[MATH_E] = res >> 24;
895   m_suzy.data[MATH_H] = res & 0xff;
896   m_suzy.data[MATH_G] = res >> 8;
897   m_suzy.data[MATH_F] = res >> 16;
898   m_suzy.data[MATH_E] = res >> 24;
899899
900   if (state->m_suzy.accumulate)
900   if (m_suzy.accumulate)
901901   {
902      accu = state->m_suzy.data[MATH_M] | state->m_suzy.data[MATH_L] << 8 | state->m_suzy.data[MATH_K] << 16 | state->m_suzy.data[MATH_J] << 24;
902      accu = m_suzy.data[MATH_M] | m_suzy.data[MATH_L] << 8 | m_suzy.data[MATH_K] << 16 | m_suzy.data[MATH_J] << 24;
903903      accu += res;
904904
905905      if (accu < res)
906         state->m_suzy.accumulate_overflow = TRUE;
906         m_suzy.accumulate_overflow = TRUE;
907907
908      state->m_suzy.data[MATH_M] = accu;
909      state->m_suzy.data[MATH_L] = accu >> 8;
910      state->m_suzy.data[MATH_K] = accu >> 16;
911      state->m_suzy.data[MATH_J] = accu >> 24;
908      m_suzy.data[MATH_M] = accu;
909      m_suzy.data[MATH_L] = accu >> 8;
910      m_suzy.data[MATH_K] = accu >> 16;
911      m_suzy.data[MATH_J] = accu >> 24;
912912   }
913913}
914914
915static READ8_HANDLER( suzy_read )
915READ8_MEMBER(lynx_state::suzy_read)
916916{
917   lynx_state *state = space->machine().driver_data<lynx_state>();
918917   UINT8 value = 0, input;
919918
920919   switch (offset)
921920   {
922921      case TILTACUML:
923         return state->m_blitter.tilt_accumulator & 0xff;
922         return m_blitter.tilt_accumulator & 0xff;
924923      case TILTACUMH:
925         return state->m_blitter.tilt_accumulator>>8;
924         return m_blitter.tilt_accumulator>>8;
926925      case HOFFL:
927         return state->m_blitter.xoff & 0xff;
926         return m_blitter.xoff & 0xff;
928927      case HOFFH:
929         return state->m_blitter.xoff>>8;
928         return m_blitter.xoff>>8;
930929      case VOFFL:
931         return state->m_blitter.yoff & 0xff;
930         return m_blitter.yoff & 0xff;
932931      case VOFFH:
933         return state->m_blitter.yoff>>8;
932         return m_blitter.yoff>>8;
934933      case VIDBASL:
935         return state->m_blitter.screen & 0xff;
934         return m_blitter.screen & 0xff;
936935      case VIDBASH:
937         return state->m_blitter.screen>>8;
936         return m_blitter.screen>>8;
938937      case COLLBASL:
939         return state->m_blitter.colbuf & 0xff;
938         return m_blitter.colbuf & 0xff;
940939      case COLLBASH:
941         return state->m_blitter.colbuf>>8;
940         return m_blitter.colbuf>>8;
942941      case SCBNEXTL:
943         return state->m_blitter.scb_next & 0xff;
942         return m_blitter.scb_next & 0xff;
944943      case SCBNEXTH:
945         return state->m_blitter.scb_next>>8;
944         return m_blitter.scb_next>>8;
946945      case SPRDLINEL:
947         return state->m_blitter.bitmap & 0xff;
946         return m_blitter.bitmap & 0xff;
948947      case SPRDLINEH:
949         return state->m_blitter.bitmap>>8;
948         return m_blitter.bitmap>>8;
950949      case HPOSSTRTL:
951         return state->m_blitter.x_pos & 0xff;
950         return m_blitter.x_pos & 0xff;
952951      case HPOSSTRTH:
953         return state->m_blitter.x_pos>>8;
952         return m_blitter.x_pos>>8;
954953      case VPOSSTRTL:
955         return state->m_blitter.y_pos & 0xff;
954         return m_blitter.y_pos & 0xff;
956955      case VPOSSTRTH:
957         return state->m_blitter.y_pos>>8;
956         return m_blitter.y_pos>>8;
958957      case SPRHSIZL:
959         return state->m_blitter.width & 0xff;
958         return m_blitter.width & 0xff;
960959      case SPRHSIZH:
961         return state->m_blitter.width>>8;
960         return m_blitter.width>>8;
962961      case SPRVSIZL:
963         return state->m_blitter.height & 0xff;
962         return m_blitter.height & 0xff;
964963      case SPRVSIZH:
965         return state->m_blitter.height>>8;
964         return m_blitter.height>>8;
966965      case STRETCHL:
967         return state->m_blitter.stretch & 0xff;
966         return m_blitter.stretch & 0xff;
968967      case STRETCHH:
969         return state->m_blitter.stretch>>8;
968         return m_blitter.stretch>>8;
970969      case TILTL:
971         return state->m_blitter.tilt & 0xff;
970         return m_blitter.tilt & 0xff;
972971      case TILTH:
973         return state->m_blitter.tilt>>8;
972         return m_blitter.tilt>>8;
974973      // case SPRDOFFL:
975974      // case SPRVPOSL:
976975      // case COLLOFFL:
977976      case VSIZACUML:
978         return state->m_blitter.height_accumulator & 0xff;
977         return m_blitter.height_accumulator & 0xff;
979978      case VSIZACUMH:
980         return state->m_blitter.height_accumulator>>8;
979         return m_blitter.height_accumulator>>8;
981980      case HSIZOFFL:
982         return state->m_blitter.width_offset & 0xff;
981         return m_blitter.width_offset & 0xff;
983982      case HSIZOFFH:
984         return state->m_blitter.width_offset>>8;
983         return m_blitter.width_offset>>8;
985984      case VSIZOFFL:
986         return state->m_blitter.height_offset & 0xff;
985         return m_blitter.height_offset & 0xff;
987986      case VSIZOFFH:
988         return state->m_blitter.height_offset>>8;
987         return m_blitter.height_offset>>8;
989988      case SCBADRL:
990         return state->m_blitter.scb & 0xff;
989         return m_blitter.scb & 0xff;
991990      case SCBADRH:
992         return state->m_blitter.scb>>8;
991         return m_blitter.scb>>8;
993992      //case PROCADRL:
994993      case SUZYHREV:
995994         return 0x01; // must not be 0 for correct power up
996995      case SPRSYS:
997996         // math busy, last carry, unsafe access, and stop on current sprite bits not implemented.
998         if (state->m_suzy.accumulate_overflow)
997         if (m_suzy.accumulate_overflow)
999998            value |= 0x40;
1000         if (state->m_blitter.vstretch)
999         if (m_blitter.vstretch)
10011000            value |= 0x10;
1002         if (state->m_blitter.lefthanded)
1001         if (m_blitter.lefthanded)
10031002            value |= 0x08;
1004         if (state->m_blitter.busy)
1003         if (m_blitter.busy)
10051004            value |= 0x01;
10061005         break;
10071006      case JOYSTICK:
1008         input = input_port_read(space->machine(), "JOY");
1009         switch (state->m_rotate)
1007         input = input_port_read(machine(), "JOY");
1008         switch (m_rotate)
10101009         {
10111010            case 1:
10121011               value = input;
r14963r14964
10251024               if (value & PAD_LEFT) input |= PAD_UP;
10261025               break;
10271026         }
1028         if (state->m_blitter.lefthanded)
1027         if (m_blitter.lefthanded)
10291028         {
10301029            value = input & 0x0f;
10311030            if (input & PAD_UP) value |= PAD_DOWN;
r14963r14964
10371036            value = input;
10381037         break;
10391038      case SWITCHES:
1040         value = input_port_read(space->machine(), "PAUSE");
1039         value = input_port_read(machine(), "PAUSE");
10411040         break;
10421041      case RCART:
1043         value = *(space->machine().region("user1")->base() + (state->m_suzy.high * state->m_granularity) + state->m_suzy.low);
1044         state->m_suzy.low = (state->m_suzy.low + 1) & (state->m_granularity - 1);
1042         value = *(machine().region("user1")->base() + (m_suzy.high * m_granularity) + m_suzy.low);
1043         m_suzy.low = (m_suzy.low + 1) & (m_granularity - 1);
10451044         break;
10461045      //case RCART_BANK1: /* we need bank 1 emulation!!! */
10471046      case SPRCTL0:
r14963r14964
10541053         value = 0;
10551054         break;
10561055      default:
1057         value = state->m_suzy.data[offset];
1056         value = m_suzy.data[offset];
10581057   }
10591058   //logerror("suzy read %.2x %.2x\n",offset,value);
10601059   return value;
10611060}
10621061
1063static WRITE8_HANDLER( suzy_write )
1062WRITE8_MEMBER(lynx_state::suzy_write)
10641063{
1065   lynx_state *state = space->machine().driver_data<lynx_state>();
1066   state->m_suzy.data[offset] = data;
1064   m_suzy.data[offset] = data;
10671065   //logerror("suzy write %.2x %.2x\n",offset,data);
10681066   /* Additional effects of a write */
10691067   /* Even addresses are the LSB. Any CPU write to an LSB in 0x00-0x7f will set the MSB to 0. */
r14963r14964
10711069    F (0x62), H (0x60), K (0x6e) or M (0x6c) will force a '0' to be written to A (0x55),
10721070    C (0x53), E (0x63), G (0x61), J (0x6f) or L (0x6d) respectively */
10731071   if ((offset < 0x80) && !(offset & 0x01))
1074   state->m_suzy.data[offset + 1] = 0;
1072   m_suzy.data[offset + 1] = 0;
10751073
10761074   switch(offset)
10771075   {
10781076      //case TMPADRL:
10791077      //case TMPADRH:
10801078      case TILTACUML:
1081         state->m_blitter.tilt_accumulator = data; // upper byte forced to zero see above.
1079         m_blitter.tilt_accumulator = data; // upper byte forced to zero see above.
10821080         break;
10831081      case TILTACUMH:
1084         state->m_blitter.tilt_accumulator &= 0xff;
1085         state->m_blitter.tilt_accumulator |= data<<8;
1082         m_blitter.tilt_accumulator &= 0xff;
1083         m_blitter.tilt_accumulator |= data<<8;
10861084         break;
10871085      case HOFFL:
1088         state->m_blitter.xoff = data;
1086         m_blitter.xoff = data;
10891087         break;
10901088      case HOFFH:
1091         state->m_blitter.xoff &= 0xff;
1092         state->m_blitter.xoff |= data<<8;
1089         m_blitter.xoff &= 0xff;
1090         m_blitter.xoff |= data<<8;
10931091         break;
10941092      case VOFFL:
1095         state->m_blitter.yoff = data;
1093         m_blitter.yoff = data;
10961094         break;
10971095      case VOFFH:
1098         state->m_blitter.yoff &= 0xff;
1099         state->m_blitter.yoff |= data<<8;
1096         m_blitter.yoff &= 0xff;
1097         m_blitter.yoff |= data<<8;
11001098         break;
11011099      case VIDBASL:
1102         state->m_blitter.screen = data;
1100         m_blitter.screen = data;
11031101         break;
11041102      case VIDBASH:
1105         state->m_blitter.screen &= 0xff;
1106         state->m_blitter.screen |= data<<8;
1103         m_blitter.screen &= 0xff;
1104         m_blitter.screen |= data<<8;
11071105         break;
11081106      case COLLBASL:
1109         state->m_blitter.colbuf = data;
1107         m_blitter.colbuf = data;
11101108         break;
11111109      case COLLBASH:
1112         state->m_blitter.colbuf &= 0xff;
1113         state->m_blitter.colbuf |= data<<8;
1110         m_blitter.colbuf &= 0xff;
1111         m_blitter.colbuf |= data<<8;
11141112         break;
11151113      case SCBNEXTL:
1116         state->m_blitter.scb_next = data;
1114         m_blitter.scb_next = data;
11171115         break;
11181116      case SCBNEXTH:
1119         state->m_blitter.scb_next &= 0xff;
1120         state->m_blitter.scb_next |= data<<8;
1117         m_blitter.scb_next &= 0xff;
1118         m_blitter.scb_next |= data<<8;
11211119         break;
11221120      case SPRDLINEL:
1123         state->m_blitter.bitmap = data;
1121         m_blitter.bitmap = data;
11241122         break;
11251123      case SPRDLINEH:
1126         state->m_blitter.bitmap &= 0xff;
1127         state->m_blitter.bitmap |= data<<8;
1124         m_blitter.bitmap &= 0xff;
1125         m_blitter.bitmap |= data<<8;
11281126         break;
11291127      case HPOSSTRTL:
1130         state->m_blitter.x_pos = data;
1128         m_blitter.x_pos = data;
11311129      case HPOSSTRTH:
1132         state->m_blitter.x_pos &= 0xff;
1133         state->m_blitter.x_pos |= data<<8;
1130         m_blitter.x_pos &= 0xff;
1131         m_blitter.x_pos |= data<<8;
11341132      case VPOSSTRTL:
1135         state->m_blitter.y_pos = data;
1133         m_blitter.y_pos = data;
11361134      case VPOSSTRTH:
1137         state->m_blitter.y_pos &= 0xff;
1138         state->m_blitter.y_pos |= data<<8;
1135         m_blitter.y_pos &= 0xff;
1136         m_blitter.y_pos |= data<<8;
11391137      case SPRHSIZL:
1140         state->m_blitter.width = data;
1138         m_blitter.width = data;
11411139         break;
11421140      case SPRHSIZH:
1143         state->m_blitter.width &= 0xff;
1144         state->m_blitter.width |= data<<8;
1141         m_blitter.width &= 0xff;
1142         m_blitter.width |= data<<8;
11451143         break;
11461144      case SPRVSIZL:
1147         state->m_blitter.height = data;
1145         m_blitter.height = data;
11481146         break;
11491147      case SPRVSIZH:
1150         state->m_blitter.height &= 0xff;
1151         state->m_blitter.height |= data<<8;
1148         m_blitter.height &= 0xff;
1149         m_blitter.height |= data<<8;
11521150         break;
11531151      case STRETCHL:
1154         state->m_blitter.stretch = data;
1152         m_blitter.stretch = data;
11551153         break;
11561154      case STRETCHH:
1157         state->m_blitter.stretch &= 0xff;
1158         state->m_blitter.stretch |= data<<8;
1155         m_blitter.stretch &= 0xff;
1156         m_blitter.stretch |= data<<8;
11591157         break;
11601158      case TILTL:
1161         state->m_blitter.tilt = data;
1159         m_blitter.tilt = data;
11621160         break;
11631161      case TILTH:
1164         state->m_blitter.tilt &= 0xff;
1165         state->m_blitter.tilt |= data<<8;
1162         m_blitter.tilt &= 0xff;
1163         m_blitter.tilt |= data<<8;
11661164         break;
11671165      // case SPRDOFFL:
11681166      // case SPRVPOSL:
11691167      // case COLLOFFL:
11701168      case VSIZACUML:
1171         state->m_blitter.height_accumulator = data;
1169         m_blitter.height_accumulator = data;
11721170         break;
11731171      case VSIZACUMH:
1174         state->m_blitter.height_accumulator &= 0xff;
1175         state->m_blitter.height_accumulator |= data<<8;
1172         m_blitter.height_accumulator &= 0xff;
1173         m_blitter.height_accumulator |= data<<8;
11761174         break;
11771175      case HSIZOFFL:
1178         state->m_blitter.width_offset = data;
1176         m_blitter.width_offset = data;
11791177         break;
11801178      case HSIZOFFH:
1181         state->m_blitter.width_offset &= 0xff;
1182         state->m_blitter.width_offset |= data<<8;
1179         m_blitter.width_offset &= 0xff;
1180         m_blitter.width_offset |= data<<8;
11831181         break;
11841182      case VSIZOFFL:
1185         state->m_blitter.height_offset = data;
1183         m_blitter.height_offset = data;
11861184         break;
11871185      case VSIZOFFH:
1188         state->m_blitter.height_offset &= 0xff;
1189         state->m_blitter.height_offset |= data<<8;
1186         m_blitter.height_offset &= 0xff;
1187         m_blitter.height_offset |= data<<8;
11901188         break;
11911189      case SCBADRL:
1192         state->m_blitter.scb = data;
1190         m_blitter.scb = data;
11931191         break;
11941192      case SCBADRH:
1195         state->m_blitter.scb &= 0xff;
1196         state->m_blitter.scb |= data<<8;
1193         m_blitter.scb &= 0xff;
1194         m_blitter.scb |= data<<8;
11971195         break;
11981196      //case PROCADRL:
11991197
12001198      /* Writing to M (0x6c) will also clear the accumulator overflow bit */
12011199      case MATH_M:
1202         state->m_suzy.accumulate_overflow = FALSE;
1200         m_suzy.accumulate_overflow = FALSE;
12031201         break;
12041202      case MATH_C:
12051203         /* If we are going to perform a signed multiplication, we store the sign and convert the number
12061204            to an unsigned one */
1207         if (state->m_suzy.signed_math)
1205         if (m_suzy.signed_math)
12081206         {
12091207            UINT16 factor, temp;
1210            factor = state->m_suzy.data[MATH_D] | (state->m_suzy.data[MATH_C] << 8);
1208            factor = m_suzy.data[MATH_D] | (m_suzy.data[MATH_C] << 8);
12111209            if ((factor - 1) & 0x8000)      /* here we use -1 to cover the math bugs on the sign of 0 and 0x8000 */
12121210            {
12131211               temp = (factor ^ 0xffff) + 1;
1214               state->m_sign_CD = - 1;
1215               state->m_suzy.data[MATH_D] = temp & 0xff;
1216               state->m_suzy.data[MATH_C] = temp >> 8;
1212               m_sign_CD = - 1;
1213               m_suzy.data[MATH_D] = temp & 0xff;
1214               m_suzy.data[MATH_C] = temp >> 8;
12171215            }
12181216            else
1219               state->m_sign_CD = 1;
1217               m_sign_CD = 1;
12201218         }
12211219         break;
12221220      case MATH_D:
r14963r14964
12251223        Either the sign error in the docs is not as described or writing to the lower byte does update the sign flag.
12261224        Here I assume the sign flag gets updated. */
12271225         if (data)
1228            state->m_sign_CD = 1;
1226            m_sign_CD = 1;
12291227         break;
12301228      /* Writing to A will start a 16 bit multiply */
12311229      /* If we are going to perform a signed multiplication, we also store the sign and convert the
12321230        number to an unsigned one */
12331231      case MATH_A:
1234         if (state->m_suzy.signed_math)
1232         if (m_suzy.signed_math)
12351233         {
12361234            UINT16 factor, temp;
1237            factor = state->m_suzy.data[MATH_B] | (state->m_suzy.data[MATH_A] << 8);
1235            factor = m_suzy.data[MATH_B] | (m_suzy.data[MATH_A] << 8);
12381236            if ((factor - 1) & 0x8000)      /* here we use -1 to cover the math bugs on the sign of 0 and 0x8000 */
12391237            {
12401238               temp = (factor ^ 0xffff) + 1;
1241               state->m_sign_AB = - 1;
1242               state->m_suzy.data[MATH_B] = temp & 0xff;
1243               state->m_suzy.data[MATH_A] = temp >> 8;
1239               m_sign_AB = - 1;
1240               m_suzy.data[MATH_B] = temp & 0xff;
1241               m_suzy.data[MATH_A] = temp >> 8;
12441242            }
12451243            else
1246               state->m_sign_AB = 1;
1244               m_sign_AB = 1;
12471245         }
1248         lynx_multiply(state);
1246         lynx_multiply();
12491247         break;
12501248      /* Writing to E will start a 16 bit divide */
12511249      case MATH_E:
1252         lynx_divide(state);
1250         lynx_divide();
12531251         break;
12541252      case SPRCTL0:
1255         state->m_blitter.spr_ctl0 = data;
1253         m_blitter.spr_ctl0 = data;
12561254         break;
12571255      case SPRCTL1:
1258         state->m_blitter.spr_ctl1 = data;
1256         m_blitter.spr_ctl1 = data;
12591257         break;
12601258      case SPRCOLL:
1261         state->m_blitter.spr_coll = data;
1259         m_blitter.spr_coll = data;
12621260         break;
12631261      case SUZYBUSEN:
12641262         logerror("write to SUSYBUSEN %x \n", data);
12651263         break;
12661264      case SPRSYS:
1267            state->m_suzy.signed_math = (data & 0x80) ? 1:0;
1268            state->m_suzy.accumulate = (data & 0x40) ? 1:0;
1269            state->m_blitter.no_collide = (data & 0x20) ? 1:0;
1270            state->m_blitter.vstretch = (data & 0x10) ? 1:0;
1271            state->m_blitter.lefthanded = (data & 0x08) ? 1:0;
1265            m_suzy.signed_math = (data & 0x80) ? 1:0;
1266            m_suzy.accumulate = (data & 0x40) ? 1:0;
1267            m_blitter.no_collide = (data & 0x20) ? 1:0;
1268            m_blitter.vstretch = (data & 0x10) ? 1:0;
1269            m_blitter.lefthanded = (data & 0x08) ? 1:0;
12721270            // unsafe access clear and sprite engine stop request are not enabled
12731271            if (data & 0x02) logerror("sprite engine stop request\n");
12741272            break;
12751273      case SPRGO:
1276         if ((data & 0x01) && state->m_suzy.data[SUZYBUSEN])
1274         if ((data & 0x01) && m_suzy.data[SUZYBUSEN])
12771275         {
1278            //state->m_blitter.time = space->machine().time();
1279            lynx_blitter(space->machine());
1276            //m_blitter.time = machine().time();
1277            lynx_blitter(machine());
12801278         }
12811279         break;
12821280      case JOYSTICK:
r14963r14964
15241522   }
15251523}
15261524
1527static UINT8 lynx_timer_read(lynx_state *state, int which, int offset)
1525UINT8 lynx_state::lynx_timer_read(int which, int offset)
15281526{
15291527   UINT8 value = 0;
15301528
15311529   switch (offset)
15321530   {
15331531      case 0:
1534         value = state->m_timer[which].bakup;
1532         value = m_timer[which].bakup;
15351533         break;
15361534      case 1:
1537         value = state->m_timer[which].cntrl1;
1535         value = m_timer[which].cntrl1;
15381536         break;
15391537      case 2:
1540         if ((state->m_timer[which].cntrl1 & 0x07) == 0x07) // linked timer
1538         if ((m_timer[which].cntrl1 & 0x07) == 0x07) // linked timer
15411539         {
1542            value = state->m_timer[which].counter;
1540            value = m_timer[which].counter;
15431541         }
15441542         else
15451543         {
1546            if ( state->m_timer[which].timer_active )
1544            if ( m_timer[which].timer_active )
15471545            {
1548               value = (UINT8) (state->m_timer[which].timer->remaining().as_ticks(1000000>>(state->m_timer[which].cntrl1 & 0x07)));
1546               value = (UINT8) (m_timer[which].timer->remaining().as_ticks(1000000>>(m_timer[which].cntrl1 & 0x07)));
15491547               value -= value ? 1 : 0;
15501548            }
15511549         }
15521550         break;
15531551
15541552      case 3:
1555         value = state->m_timer[which].cntrl2;
1553         value = m_timer[which].cntrl2;
15561554         break;
15571555   }
15581556   // logerror("timer %d read %x %.2x\n", which, offset, value);
15591557   return value;
15601558}
15611559
1562static void lynx_timer_write(lynx_state *state, int which, int offset, UINT8 data)
1560void lynx_state::lynx_timer_write(int which, int offset, UINT8 data)
15631561{
15641562   //logerror("timer %d write %x %.2x\n", which, offset, data);
15651563   attotime t;
15661564
1567   if ( state->m_timer[which].timer_active && ((state->m_timer[which].cntrl1 & 0x07) != 0x07))
1565   if ( m_timer[which].timer_active && ((m_timer[which].cntrl1 & 0x07) != 0x07))
15681566   {
1569      state->m_timer[which].counter = (UINT8) (state->m_timer[which].timer->remaining().as_ticks(1000000>>(state->m_timer[which].cntrl1 & 0x07)));
1570      state->m_timer[which].counter -= (state->m_timer[which].counter) ? 1 : 0;
1567      m_timer[which].counter = (UINT8) (m_timer[which].timer->remaining().as_ticks(1000000>>(m_timer[which].cntrl1 & 0x07)));
1568      m_timer[which].counter -= (m_timer[which].counter) ? 1 : 0;
15711569   }
15721570
15731571   switch (offset)
15741572   {
15751573      case 0:
1576         state->m_timer[which].bakup = data;
1574         m_timer[which].bakup = data;
15771575         break;
15781576      case 1:
1579         state->m_timer[which].cntrl1 = data;
1577         m_timer[which].cntrl1 = data;
15801578         if (data & 0x40) // reset timer done
1581            state->m_timer[which].cntrl2 &= ~0x08;
1579            m_timer[which].cntrl2 &= ~0x08;
15821580         break;
15831581      case 2:
1584         state->m_timer[which].counter = data;
1582         m_timer[which].counter = data;
15851583         break;
15861584      case 3:
1587         state->m_timer[which].cntrl2 = (state->m_timer[which].cntrl2 & ~0x08) | (data & 0x08);
1585         m_timer[which].cntrl2 = (m_timer[which].cntrl2 & ~0x08) | (data & 0x08);
15881586         break;
15891587   }
15901588
15911589   /* Update timers */
15921590   //if ( offset < 3 )
15931591   //{
1594      state->m_timer[which].timer->reset();
1595      state->m_timer[which].timer_active = 0;
1596      if ((state->m_timer[which].cntrl1 & 0x08) && !(state->m_timer[which].cntrl2 & 0x08))      // if enable count
1592      m_timer[which].timer->reset();
1593      m_timer[which].timer_active = 0;
1594      if ((m_timer[which].cntrl1 & 0x08) && !(m_timer[which].cntrl2 & 0x08))      // if enable count
15971595      {
1598         if ((state->m_timer[which].cntrl1 & 0x07) != 0x07)  // if not set to link mode
1596         if ((m_timer[which].cntrl1 & 0x07) != 0x07)  // if not set to link mode
15991597         {
1600            t = (attotime::from_hz(lynx_time_factor(state->m_timer[which].cntrl1 & 0x07)) * (state->m_timer[which].counter + 1));
1601            state->m_timer[which].timer->adjust(t, which);
1602            state->m_timer[which].timer_active = 1;
1598            t = (attotime::from_hz(lynx_time_factor(m_timer[which].cntrl1 & 0x07)) * (m_timer[which].counter + 1));
1599            m_timer[which].timer->adjust(t, which);
1600            m_timer[which].timer_active = 1;
16031601         }
16041602      }
16051603   //}
r14963r14964
16781676   return value;
16791677}
16801678
1681static WRITE8_HANDLER(lynx_uart_w)
1679WRITE8_MEMBER(lynx_state::lynx_uart_w)
16821680{
1683   lynx_state *state = space->machine().driver_data<lynx_state>();
16841681   logerror("uart write %.2x %.2x\n", offset, data);
16851682   switch (offset)
16861683   {
16871684      case 0x8c:
1688         state->m_uart.serctl = data;
1685         m_uart.serctl = data;
16891686         break;
16901687
16911688      case 0x8d:
1692         if (state->m_uart.sending)
1689         if (m_uart.sending)
16931690         {
1694            state->m_uart.buffer = data;
1695            state->m_uart.buffer_loaded = TRUE;
1691            m_uart.buffer = data;
1692            m_uart.buffer_loaded = TRUE;
16961693         }
16971694         else
16981695         {
1699            state->m_uart.sending = TRUE;
1700            state->m_uart.data_to_send = data;
1696            m_uart.sending = TRUE;
1697            m_uart.data_to_send = data;
17011698            // timing not accurate, baude rate should be calculated from timer 4 backup value and clock rate
1702            space->machine().scheduler().timer_set(attotime::from_usec(11*16), FUNC(lynx_uart_timer));
1699            machine().scheduler().timer_set(attotime::from_usec(11*16), FUNC(lynx_uart_timer));
17031700         }
17041701         break;
17051702   }
r14963r14964
17131710****************************************/
17141711
17151712
1716static READ8_HANDLER( mikey_read )
1713READ8_MEMBER(lynx_state::mikey_read)
17171714{
1718   lynx_state *state = space->machine().driver_data<lynx_state>();
17191715   UINT8 direction, value = 0x00;
17201716
17211717   switch (offset)
r14963r14964
17281724   case 0x14: case 0x15: case 0x16: case 0x17:
17291725   case 0x18: case 0x19: case 0x1a: case 0x1b:
17301726   case 0x1c: case 0x1d: case 0x1e: case 0x1f:
1731      value = lynx_timer_read(state, offset >> 2, offset & 0x03);
1727      value = lynx_timer_read(offset >> 2, offset & 0x03);
17321728      break;
17331729
17341730   case 0x20: case 0x21: case 0x22: case 0x23: case 0x24: case 0x25: case 0x26: case 0x27:
r14963r14964
17361732   case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37:
17371733   case 0x38: case 0x39: case 0x3a: case 0x3b: case 0x3c: case 0x3d: case 0x3e: case 0x3f:
17381734   case 0x40: case 0x41: case 0x42: case 0x43: case 0x44: case 0x50:
1739      value = lynx_audio_read(state->m_audio, offset);
1735      value = lynx_audio_read(m_audio, offset);
17401736      break;
17411737
17421738   case 0x80:
17431739   case 0x81:
1744      value = state->m_mikey.data[0x81]; // both registers access the same interupt status byte
1740      value = m_mikey.data[0x81]; // both registers access the same interupt status byte
17451741      // logerror( "mikey read %.2x %.2x\n", offset, value );
17461742      break;
17471743
r14963r14964
17591755      break;
17601756
17611757   case 0x8b:
1762      direction = state->m_mikey.data[0x8a];
1763      value |= (direction & 0x01) ? (state->m_mikey.data[offset] & 0x01) : 0x01;   // External Power input
1764      value |= (direction & 0x02) ? (state->m_mikey.data[offset] & 0x02) : 0x00;   // Cart Address Data output (0 turns cart power on)
1765      value |= (direction & 0x04) ? (state->m_mikey.data[offset] & 0x04) : 0x04;   // noexp input
1758      direction = m_mikey.data[0x8a];
1759      value |= (direction & 0x01) ? (m_mikey.data[offset] & 0x01) : 0x01;   // External Power input
1760      value |= (direction & 0x02) ? (m_mikey.data[offset] & 0x02) : 0x00;   // Cart Address Data output (0 turns cart power on)
1761      value |= (direction & 0x04) ? (m_mikey.data[offset] & 0x04) : 0x04;   // noexp input
17661762      // REST read returns actual rest state anded with rest output bit
1767      value |= (direction & 0x08) ? (((state->m_mikey.data[offset] & 0x08) && (state->m_mikey.vb_rest)) ? 0x00 : 0x08) : 0x00;   // rest output
1768      value |= (direction & 0x10) ? (state->m_mikey.data[offset] & 0x10) : 0x10;   // audin input
1763      value |= (direction & 0x08) ? (((m_mikey.data[offset] & 0x08) && (m_mikey.vb_rest)) ? 0x00 : 0x08) : 0x00;   // rest output
1764      value |= (direction & 0x10) ? (m_mikey.data[offset] & 0x10) : 0x10;   // audin input
17691765      /* Hack: we disable COMLynx  */
17701766      value |= 0x04;
17711767      /* B5, B6 & B7 are not used */
r14963r14964
17731769
17741770   case 0x8c:
17751771   case 0x8d:
1776      value = lynx_uart_r(space, offset);
1772      value = lynx_uart_r(&space, offset);
17771773      break;
17781774
17791775   default:
1780      value = state->m_mikey.data[offset];
1776      value = m_mikey.data[offset];
17811777      //logerror( "mikey read %.2x %.2x\n", offset, value );
17821778   }
17831779   return value;
17841780}
17851781
1786static WRITE8_HANDLER( mikey_write )
1782WRITE8_MEMBER(lynx_state::mikey_write)
17871783{
1788   lynx_state *state = space->machine().driver_data<lynx_state>();
17891784   switch (offset)
17901785   {
17911786   case 0x00: case 0x01: case 0x02: case 0x03:
r14963r14964
17961791   case 0x14: case 0x15: case 0x16: case 0x17:
17971792   case 0x18: case 0x19: case 0x1a: case 0x1b:
17981793   case 0x1c: case 0x1d: case 0x1e: case 0x1f:
1799      lynx_timer_write(state, offset >> 2, offset & 3, data);
1794      lynx_timer_write(offset >> 2, offset & 3, data);
18001795      return;
18011796
18021797   case 0x20: case 0x21: case 0x22: case 0x23: case 0x24: case 0x25: case 0x26: case 0x27:
r14963r14964
18041799   case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37:
18051800   case 0x38: case 0x39: case 0x3a: case 0x3b: case 0x3c: case 0x3d: case 0x3e: case 0x3f:
18061801   case 0x40: case 0x41: case 0x42: case 0x43: case 0x44: case 0x50:
1807      lynx_audio_write(state->m_audio, offset, data);
1802      lynx_audio_write(m_audio, offset, data);
18081803      return;
18091804
18101805   case 0x80:
1811      state->m_mikey.data[0x81] &= ~data; // clear interrupt source
1806      m_mikey.data[0x81] &= ~data; // clear interrupt source
18121807      // logerror("mikey write %.2x %.2x\n", offset, data);
1813      if (!state->m_mikey.data[0x81])
1814         cputag_set_input_line(space->machine(), "maincpu", M65SC02_IRQ_LINE, CLEAR_LINE);
1808      if (!m_mikey.data[0x81])
1809         cputag_set_input_line(machine(), "maincpu", M65SC02_IRQ_LINE, CLEAR_LINE);
18151810      break;
18161811
18171812   /* Is this correct? */ // Notes say writing to register will result in interupt being triggered.
18181813   case 0x81:
1819      state->m_mikey.data[0x81] |= data;
1814      m_mikey.data[0x81] |= data;
18201815      if (data)
18211816      {
1822         cputag_set_input_line(space->machine(), "maincpu", INPUT_LINE_HALT, CLEAR_LINE);
1823         cputag_set_input_line(space->machine(), "maincpu", M65SC02_IRQ_LINE, ASSERT_LINE);
1817         cputag_set_input_line(machine(), "maincpu", INPUT_LINE_HALT, CLEAR_LINE);
1818         cputag_set_input_line(machine(), "maincpu", M65SC02_IRQ_LINE, ASSERT_LINE);
18241819         logerror("direct write to interupt register\n");
18251820      }
18261821      break;
18271822
18281823   case 0x87:
1829      state->m_mikey.data[offset] = data;
1824      m_mikey.data[offset] = data;
18301825      if (data & 0x02)      // Power (1 = on)
18311826      {
18321827         if (data & 0x01)   // Cart Address Strobe
18331828         {
1834            state->m_suzy.high <<= 1;
1835            if (state->m_mikey.data[0x8b] & 0x02)
1836               state->m_suzy.high |= 1;
1837            state->m_suzy.high &= 0xff;
1838            state->m_suzy.low = 0;
1829            m_suzy.high <<= 1;
1830            if (m_mikey.data[0x8b] & 0x02)
1831               m_suzy.high |= 1;
1832            m_suzy.high &= 0xff;
1833            m_suzy.low = 0;
18391834         }
18401835      }
18411836      else
18421837      {
1843         state->m_suzy.high = 0;
1844         state->m_suzy.low = 0;
1838         m_suzy.high = 0;
1839         m_suzy.low = 0;
18451840      }
18461841      break;
18471842
r14963r14964
18531848   case 0xa8: case 0xa9: case 0xaa: case 0xab: case 0xac: case 0xad: case 0xae: case 0xaf:
18541849   case 0xb0: case 0xb1: case 0xb2: case 0xb3: case 0xb4: case 0xb5: case 0xb6: case 0xb7:
18551850   case 0xb8: case 0xb9: case 0xba: case 0xbb: case 0xbc: case 0xbd: case 0xbe: case 0xbf:
1856      state->m_mikey.data[offset] = data;
1851      m_mikey.data[offset] = data;
18571852
18581853      /* RED = 0xb- & 0x0f, GREEN = 0xa- & 0x0f, BLUE = (0xb- & 0xf0) >> 4 */
1859      state->m_palette[offset & 0x0f] = space->machine().pens[
1860         ((state->m_mikey.data[0xb0 + (offset & 0x0f)] & 0x0f)) |
1861         ((state->m_mikey.data[0xa0 + (offset & 0x0f)] & 0x0f) << 4) |
1862         ((state->m_mikey.data[0xb0 + (offset & 0x0f)] & 0xf0) << 4)];
1854      m_palette[offset & 0x0f] = machine().pens[
1855         ((m_mikey.data[0xb0 + (offset & 0x0f)] & 0x0f)) |
1856         ((m_mikey.data[0xa0 + (offset & 0x0f)] & 0x0f) << 4) |
1857         ((m_mikey.data[0xb0 + (offset & 0x0f)] & 0xf0) << 4)];
18631858      break;
18641859
18651860   /* TODO: properly implement these writes */
18661861   case 0x8b:
1867      state->m_mikey.data[offset] = data;
1868      if (state->m_mikey.data[0x8a] & 0x10)
1869         logerror("Trying to enable bank 1 write. %d\n", state->m_mikey.data[offset] & 0x10);
1862      m_mikey.data[offset] = data;
1863      if (m_mikey.data[0x8a] & 0x10)
1864         logerror("Trying to enable bank 1 write. %d\n", m_mikey.data[offset] & 0x10);
18701865      break;
18711866
18721867   //case 0x90: // SDONEACK - Suzy Done Acknowledge
18731868   case 0x91: // CPUSLEEP - CPU Bus Request Disable
1874      state->m_mikey.data[offset] = data;
1875      if (!data && state->m_blitter.busy)
1869      m_mikey.data[offset] = data;
1870      if (!data && m_blitter.busy)
18761871      {
1877         cputag_set_input_line(space->machine(), "maincpu", INPUT_LINE_HALT, ASSERT_LINE);
1872         cputag_set_input_line(machine(), "maincpu", INPUT_LINE_HALT, ASSERT_LINE);
18781873         /* A write of '0' to this address will reset the CPU bus request flip flop */
18791874      }
18801875      break;
18811876   case 0x94: case 0x95:
1882      state->m_mikey.data[offset]=data;
1877      m_mikey.data[offset]=data;
18831878      break;
18841879   case 0x9c: case 0x9d: case 0x9e:
1885      state->m_mikey.data[offset]=data;
1880      m_mikey.data[offset]=data;
18861881      logerror("Mtest%d write: %x\n", offset&0x3, data);
18871882      break;
18881883
18891884   default:
1890      state->m_mikey.data[offset]=data;
1885      m_mikey.data[offset]=data;
18911886      //logerror("mikey write %.2x %.2x\n",offset,data);
18921887      break;
18931888   }
r14963r14964
18991894
19001895****************************************/
19011896
1902READ8_HANDLER( lynx_memory_config_r )
1897READ8_MEMBER(lynx_state::lynx_memory_config_r)
19031898{
1904   lynx_state *state = space->machine().driver_data<lynx_state>();
1905   return state->m_memory_config;
1899   return m_memory_config;
19061900}
19071901
1908WRITE8_HANDLER( lynx_memory_config_w )
1902WRITE8_MEMBER(lynx_state::lynx_memory_config_w)
19091903{
1910   lynx_state *state = space->machine().driver_data<lynx_state>();
19111904   /* bit 7: hispeed, uses page mode accesses (4 instead of 5 cycles )
19121905     * when these are safe in the cpu */
1913   state->m_memory_config = data;
1906   m_memory_config = data;
19141907
19151908   if (data & 1) {
1916      space->install_readwrite_bank(0xfc00, 0xfcff, "bank1");
1909      space.install_readwrite_bank(0xfc00, 0xfcff, "bank1");
19171910   } else {
1918      space->install_legacy_readwrite_handler(0xfc00, 0xfcff, FUNC(suzy_read), FUNC(suzy_write));
1911      space.install_readwrite_handler(0xfc00, 0xfcff, read8_delegate(FUNC(lynx_state::suzy_read),this), write8_delegate(FUNC(lynx_state::suzy_write),this));
19191912   }
19201913   if (data & 2) {
1921      space->install_readwrite_bank(0xfd00, 0xfdff, "bank2");
1914      space.install_readwrite_bank(0xfd00, 0xfdff, "bank2");
19221915   } else {
1923      space->install_legacy_readwrite_handler(0xfd00, 0xfdff, FUNC(mikey_read), FUNC(mikey_write));
1916      space.install_readwrite_handler(0xfd00, 0xfdff, read8_delegate(FUNC(lynx_state::mikey_read),this), write8_delegate(FUNC(lynx_state::mikey_write),this));
19241917   }
19251918
19261919   if (data & 1)
1927      memory_set_bankptr(space->machine(), "bank1", state->m_mem_fc00);
1920      memory_set_bankptr(machine(), "bank1", m_mem_fc00);
19281921   if (data & 2)
1929      memory_set_bankptr(space->machine(), "bank2", state->m_mem_fd00);
1930   memory_set_bank(space->machine(), "bank3", (data & 4) ? 1 : 0);
1931   memory_set_bank(space->machine(), "bank4", (data & 8) ? 1 : 0);
1922      memory_set_bankptr(machine(), "bank2", m_mem_fd00);
1923   memory_set_bank(machine(), "bank3", (data & 4) ? 1 : 0);
1924   memory_set_bank(machine(), "bank4", (data & 8) ? 1 : 0);
19321925}
19331926
19341927static void lynx_reset(running_machine &machine)
19351928{
19361929   lynx_state *state = machine.driver_data<lynx_state>();
1937   lynx_memory_config_w(machine.device("maincpu")->memory().space(AS_PROGRAM), 0, 0);
1930   state->lynx_memory_config_w(*machine.device("maincpu")->memory().space(AS_PROGRAM), 0, 0);
19381931
19391932   cputag_set_input_line(machine, "maincpu", INPUT_LINE_HALT, CLEAR_LINE);
19401933   cputag_set_input_line(machine, "maincpu", M65SC02_IRQ_LINE, CLEAR_LINE);
r14963r14964
19661959
19671960static void lynx_postload(lynx_state *state)
19681961{
1969   lynx_memory_config_w( state->machine().device("maincpu")->memory().space(AS_PROGRAM), 0, state->m_memory_config);
1962   state->lynx_memory_config_w( *state->machine().device("maincpu")->memory().space(AS_PROGRAM), 0, state->m_memory_config);
19701963}
19711964
19721965MACHINE_START( lynx )
src/mess/machine/lviv.c
r14963r14964
145145
146146
147147/* I/O */
148 READ8_HANDLER ( lviv_io_r )
148READ8_MEMBER(lviv_state::lviv_io_r)
149149{
150   lviv_state *state = space->machine().driver_data<lviv_state>();
151   if (state->m_startup_mem_map)
150   if (m_startup_mem_map)
152151   {
153152      return 0;   /* ??? */
154153   }
r14963r14964
157156      switch ((offset >> 4) & 0x3)
158157      {
159158      case 0:
160         return space->machine().device<i8255_device>("ppi8255_0")->read(*space, offset & 3);
159         return machine().device<i8255_device>("ppi8255_0")->read(space, offset & 3);
161160
162161      case 1:
163         return space->machine().device<i8255_device>("ppi8255_1")->read(*space, offset & 3);
162         return machine().device<i8255_device>("ppi8255_1")->read(space, offset & 3);
164163
165164      case 2:
166165      case 3:
r14963r14964
171170   }
172171}
173172
174WRITE8_HANDLER ( lviv_io_w )
173WRITE8_MEMBER(lviv_state::lviv_io_w)
175174{
176   lviv_state *state = space->machine().driver_data<lviv_state>();
177   address_space *cpuspace = space->machine().device("maincpu")->memory().space(AS_PROGRAM);
178   if (state->m_startup_mem_map)
175   address_space *cpuspace = machine().device("maincpu")->memory().space(AS_PROGRAM);
176   if (m_startup_mem_map)
179177   {
180      UINT8 *ram = space->machine().device<ram_device>(RAM_TAG)->pointer();
178      UINT8 *ram = machine().device<ram_device>(RAM_TAG)->pointer();
181179
182      state->m_startup_mem_map = 0;
180      m_startup_mem_map = 0;
183181
184182      cpuspace->install_write_bank(0x0000, 0x3fff, "bank1");
185183      cpuspace->install_write_bank(0x4000, 0x7fff, "bank2");
186184      cpuspace->install_write_bank(0x8000, 0xbfff, "bank3");
187185      cpuspace->unmap_write(0xC000, 0xffff);
188186
189      memory_set_bankptr(space->machine(),"bank1", ram);
190      memory_set_bankptr(space->machine(),"bank2", ram + 0x4000);
191      memory_set_bankptr(space->machine(),"bank3", ram + 0x8000);
192      memory_set_bankptr(space->machine(),"bank4", space->machine().region("maincpu")->base() + 0x010000);
187      memory_set_bankptr(machine(),"bank1", ram);
188      memory_set_bankptr(machine(),"bank2", ram + 0x4000);
189      memory_set_bankptr(machine(),"bank3", ram + 0x8000);
190      memory_set_bankptr(machine(),"bank4", machine().region("maincpu")->base() + 0x010000);
193191   }
194192   else
195193   {
196194      switch ((offset >> 4) & 0x3)
197195      {
198196      case 0:
199         space->machine().device<i8255_device>("ppi8255_0")->write(*space, offset & 3, data);
197         machine().device<i8255_device>("ppi8255_0")->write(space, offset & 3, data);
200198         break;
201199
202200      case 1:
203         space->machine().device<i8255_device>("ppi8255_1")->write(*space, offset & 3, data);
201         machine().device<i8255_device>("ppi8255_1")->write(space, offset & 3, data);
204202         break;
205203
206204      case 2:
src/mess/machine/mbc55x.c
r14963r14964
116116   DEVCB_NULL
117117};
118118
119READ8_HANDLER( pic8259_r )
119READ8_MEMBER(mbc55x_state::mbcpic8259_r)
120120{
121   mbc55x_state *state = space->machine().driver_data<mbc55x_state>();
122   return pic8259_r(state->m_pic, offset>>1);
121   return pic8259_r(m_pic, offset>>1);
123122}
124123
125WRITE8_HANDLER( pic8259_w )
124WRITE8_MEMBER(mbc55x_state::mbcpic8259_w)
126125{
127   mbc55x_state *state = space->machine().driver_data<mbc55x_state>();
128   pic8259_w(state->m_pic, offset>>1, data);
126   pic8259_w(m_pic, offset>>1, data);
129127}
130128
131129static IRQ_CALLBACK(mbc55x_irq_callback)
r14963r14964
157155   }
158156};
159157
160READ8_HANDLER( pit8253_r )
158READ8_MEMBER(mbc55x_state::mbcpit8253_r)
161159{
162   mbc55x_state *state = space->machine().driver_data<mbc55x_state>();
163   return pit8253_r(state->m_pit, offset>>1);
160   return pit8253_r(m_pit, offset>>1);
164161}
165162
166WRITE8_HANDLER( pit8253_w )
163WRITE8_MEMBER(mbc55x_state::mbcpit8253_w)
167164{
168   mbc55x_state *state = space->machine().driver_data<mbc55x_state>();
169   pit8253_w(state->m_pit, offset>>1, data);
165   pit8253_w(m_pit, offset>>1, data);
170166}
171167
172168WRITE_LINE_MEMBER( mbc55x_state::pit8253_t2 )
r14963r14964
189185   m_vram_page=data;
190186}
191187
192READ8_HANDLER( mbc55x_disk_r )
188READ8_MEMBER(mbc55x_state::mbc55x_disk_r)
193189{
194   mbc55x_state *state = space->machine().driver_data<mbc55x_state>();
195   return wd17xx_r(state->m_fdc, offset>>1);
190   return wd17xx_r(m_fdc, offset>>1);
196191}
197192
198WRITE8_HANDLER( mbc55x_disk_w )
193WRITE8_MEMBER(mbc55x_state::mbc55x_disk_w)
199194{
200   mbc55x_state *state = space->machine().driver_data<mbc55x_state>();
201   wd17xx_w(state->m_fdc, offset>>1, data);
195   wd17xx_w(m_fdc, offset>>1, data);
202196}
203197
204198WRITE_LINE_MEMBER( mbc55x_state::mbc55x_fdc_intrq_w )
r14963r14964
311305   DEVCB_NULL
312306};
313307
314READ8_HANDLER( mbc55x_kb_usart_r )
308READ8_MEMBER(mbc55x_state::mbc55x_kb_usart_r)
315309{
316   mbc55x_state *state = space->machine().driver_data<mbc55x_state>();
317310   UINT8 result = 0;
318311   offset>>=1;
319312
320313   switch (offset)
321314   {
322      case 0   : //logerror("%s read kb_uart\n",space->machine().describe_context());
323            result = state->m_kb_uart->data_r(*space,0); break;
315      case 0   : //logerror("%s read kb_uart\n",machine().describe_context());
316            result = m_kb_uart->data_r(space,0); break;
324317
325      case 1   :   result = state->m_kb_uart->status_r(*space,0);
318      case 1   :   result = m_kb_uart->status_r(space,0);
326319
327            if (state->m_keyboard.key_special & KEY_BIT_CTRL)   // Parity error used to flag control down
320            if (m_keyboard.key_special & KEY_BIT_CTRL)   // Parity error used to flag control down
328321               result |= I8251_STATUS_PARITY_ERROR;
329322            break;
330323   }
r14963r14964
332325   return result;
333326}
334327
335WRITE8_HANDLER( mbc55x_kb_usart_w )
328WRITE8_MEMBER(mbc55x_state::mbc55x_kb_usart_w)
336329{
337   mbc55x_state *state = space->machine().driver_data<mbc55x_state>();
338330   offset>>=1;
339331
340332   switch (offset)
341333   {
342      case 0   : state->m_kb_uart->data_w(*space, 0, data); break;
343      case 1   : state->m_kb_uart->control_w(*space, 0, data); break;
334      case 0   : m_kb_uart->data_w(space, 0, data); break;
335      case 1   : m_kb_uart->control_w(space, 0, data); break;
344336   }
345337}
346338
src/mess/machine/apple1.c
r14963r14964
506506   cassette_device_image(machine)->output(state->m_cassette_output_flipflop ? 1.0 : -1.0);
507507}
508508
509READ8_HANDLER( apple1_cassette_r )
509READ8_MEMBER(apple1_state::apple1_cassette_r)
510510{
511   cassette_toggle_output(space->machine());
511   cassette_toggle_output(machine());
512512
513513   if (offset <= 0x7f)
514514   {
r14963r14964
517517           always comes from the corresponding cassette ROM location
518518           in $C100-$C17F. */
519519
520      return space->read_byte(0xc100 + offset);
520      return space.read_byte(0xc100 + offset);
521521   }
522522    else
523523   {
r14963r14964
534534      /* (Don't try putting a non-zero "noise threshhold" here,
535535           because it can cause tape header bits on real cassette
536536           images to be misread as data bits.) */
537      if (cassette_device_image(space->machine())->input() > 0.0)
538         return space->read_byte(0xc100 + (offset & ~1));
537      if (cassette_device_image(machine())->input() > 0.0)
538         return space.read_byte(0xc100 + (offset & ~1));
539539      else
540         return space->read_byte(0xc100 + offset);
540         return space.read_byte(0xc100 + offset);
541541   }
542542}
543543
544WRITE8_HANDLER( apple1_cassette_w )
544WRITE8_MEMBER(apple1_state::apple1_cassette_w)
545545{
546546   /* Writes toggle the output flip-flop in the same way that reads
547547       do; other than that they have no effect.  Any repeated accesses
r14963r14964
550550       However, we still have to handle writes, since they may be done
551551       by user code. */
552552
553   cassette_toggle_output(space->machine());
553   cassette_toggle_output(machine());
554554}
src/mess/machine/mtx.c
r14963r14964
105105   }
106106}
107107
108WRITE8_HANDLER( mtx_bankswitch_w )
108WRITE8_MEMBER(mtx_state::mtx_bankswitch_w)
109109{
110   bankswitch(space->machine(), data);
110   bankswitch(machine(), data);
111111}
112112
113113/*-------------------------------------------------
r14963r14964
127127    mtx_sound_latch_w - sound latch write
128128-------------------------------------------------*/
129129
130WRITE8_HANDLER( mtx_sound_latch_w )
130WRITE8_MEMBER(mtx_state::mtx_sound_latch_w)
131131{
132   mtx_state *state = space->machine().driver_data<mtx_state>();
133132
134   state->m_sound_latch = data;
133   m_sound_latch = data;
135134}
136135
137136/*-------------------------------------------------
r14963r14964
190189    mtx_sense_w - keyboard sense write
191190-------------------------------------------------*/
192191
193WRITE8_HANDLER( mtx_sense_w )
192WRITE8_MEMBER(mtx_state::mtx_sense_w)
194193{
195   mtx_state *state = space->machine().driver_data<mtx_state>();
196194
197   state->m_key_sense = data;
195   m_key_sense = data;
198196}
199197
200198/*-------------------------------------------------
201199    mtx_key_lo_r - keyboard low read
202200-------------------------------------------------*/
203201
204READ8_HANDLER( mtx_key_lo_r )
202READ8_MEMBER(mtx_state::mtx_key_lo_r)
205203{
206   mtx_state *state = space->machine().driver_data<mtx_state>();
207204
208205   UINT8 data = 0xff;
209206
210   if (!(state->m_key_sense & 0x01)) data &= input_port_read(space->machine(), "ROW0");
211   if (!(state->m_key_sense & 0x02)) data &= input_port_read(space->machine(), "ROW1");
212   if (!(state->m_key_sense & 0x04)) data &= input_port_read(space->machine(), "ROW2");
213   if (!(state->m_key_sense & 0x08)) data &= input_port_read(space->machine(), "ROW3");
214   if (!(state->m_key_sense & 0x10)) data &= input_port_read(space->machine(), "ROW4");
215   if (!(state->m_key_sense & 0x20)) data &= input_port_read(space->machine(), "ROW5");
216   if (!(state->m_key_sense & 0x40)) data &= input_port_read(space->machine(), "ROW6");
217   if (!(state->m_key_sense & 0x80)) data &= input_port_read(space->machine(), "ROW7");
207   if (!(m_key_sense & 0x01)) data &= input_port_read(machine(), "ROW0");
208   if (!(m_key_sense & 0x02)) data &= input_port_read(machine(), "ROW1");
209   if (!(m_key_sense & 0x04)) data &= input_port_read(machine(), "ROW2");
210   if (!(m_key_sense & 0x08)) data &= input_port_read(machine(), "ROW3");
211   if (!(m_key_sense & 0x10)) data &= input_port_read(machine(), "ROW4");
212   if (!(m_key_sense & 0x20)) data &= input_port_read(machine(), "ROW5");
213   if (!(m_key_sense & 0x40)) data &= input_port_read(machine(), "ROW6");
214   if (!(m_key_sense & 0x80)) data &= input_port_read(machine(), "ROW7");
218215
219216   return data;
220217}
r14963r14964
223220    mtx_key_lo_r - keyboard high read
224221-------------------------------------------------*/
225222
226READ8_HANDLER( mtx_key_hi_r )
223READ8_MEMBER(mtx_state::mtx_key_hi_r)
227224{
228   mtx_state *state = space->machine().driver_data<mtx_state>();
229225
230   UINT8 data = input_port_read(space->machine(), "country_code");
226   UINT8 data = input_port_read(machine(), "country_code");
231227
232   if (!(state->m_key_sense & 0x01)) data &= input_port_read(space->machine(), "ROW0") >> 8;
233   if (!(state->m_key_sense & 0x02)) data &= input_port_read(space->machine(), "ROW1") >> 8;
234   if (!(state->m_key_sense & 0x04)) data &= input_port_read(space->machine(), "ROW2") >> 8;
235   if (!(state->m_key_sense & 0x08)) data &= input_port_read(space->machine(), "ROW3") >> 8;
236   if (!(state->m_key_sense & 0x10)) data &= input_port_read(space->machine(), "ROW4") >> 8;
237   if (!(state->m_key_sense & 0x20)) data &= input_port_read(space->machine(), "ROW5") >> 8;
238   if (!(state->m_key_sense & 0x40)) data &= input_port_read(space->machine(), "ROW6") >> 8;
239   if (!(state->m_key_sense & 0x80)) data &= input_port_read(space->machine(), "ROW7") >> 8;
228   if (!(m_key_sense & 0x01)) data &= input_port_read(machine(), "ROW0") >> 8;
229   if (!(m_key_sense & 0x02)) data &= input_port_read(machine(), "ROW1") >> 8;
230   if (!(m_key_sense & 0x04)) data &= input_port_read(machine(), "ROW2") >> 8;
231   if (!(m_key_sense & 0x08)) data &= input_port_read(machine(), "ROW3") >> 8;
232   if (!(m_key_sense & 0x10)) data &= input_port_read(machine(), "ROW4") >> 8;
233   if (!(m_key_sense & 0x20)) data &= input_port_read(machine(), "ROW5") >> 8;
234   if (!(m_key_sense & 0x40)) data &= input_port_read(machine(), "ROW6") >> 8;
235   if (!(m_key_sense & 0x80)) data &= input_port_read(machine(), "ROW7") >> 8;
240236
241237   return data;
242238}
r14963r14964
245241    hrx_address_w - HRX video RAM address
246242-------------------------------------------------*/
247243
248WRITE8_HANDLER( hrx_address_w )
244WRITE8_MEMBER(mtx_state::hrx_address_w)
249245{
250246   if (offset)
251247   {
r14963r14964
287283    hrx_data_r - HRX data read
288284-------------------------------------------------*/
289285
290READ8_HANDLER( hrx_data_r )
286READ8_MEMBER(mtx_state::hrx_data_r)
291287{
292288   return 0;
293289}
r14963r14964
296292    hrx_data_w - HRX data write
297293-------------------------------------------------*/
298294
299WRITE8_HANDLER( hrx_data_w )
295WRITE8_MEMBER(mtx_state::hrx_data_w)
300296{
301297}
302298
r14963r14964
304300    hrx_attr_r - HRX attribute read
305301-------------------------------------------------*/
306302
307READ8_HANDLER( hrx_attr_r )
303READ8_MEMBER(mtx_state::hrx_attr_r)
308304{
309305   return 0;
310306}
r14963r14964
313309    hrx_attr_r - HRX attribute write
314310-------------------------------------------------*/
315311
316WRITE8_HANDLER( hrx_attr_w )
312WRITE8_MEMBER(mtx_state::hrx_attr_w)
317313{
318314   /*
319315
src/mess/machine/rmnimbus.c
r14963r14964
854854   logerror("CPU reset done\n");
855855}
856856
857READ16_HANDLER( nimbus_i186_internal_port_r )
857READ16_MEMBER(rmnimbus_state::nimbus_i186_internal_port_r)
858858{
859   rmnimbus_state *state = space->machine().driver_data<rmnimbus_state>();
860859   int temp, which;
861860
862861   switch (offset)
863862   {
864863      case 0x11:
865         logerror("%05X:ERROR - read from 80186 EOI\n", cpu_get_pc(&space->device()));
864         logerror("%05X:ERROR - read from 80186 EOI\n", cpu_get_pc(&space.device()));
866865         break;
867866
868867      case 0x12:
869         if (LOG_PORTS) logerror("%05X:read 80186 interrupt poll\n", cpu_get_pc(&space->device()));
870         if (state->m_i186.intr.poll_status & 0x8000)
871            int_callback(space->machine().device(MAINCPU_TAG), 0);
872         return state->m_i186.intr.poll_status;
868         if (LOG_PORTS) logerror("%05X:read 80186 interrupt poll\n", cpu_get_pc(&space.device()));
869         if (m_i186.intr.poll_status & 0x8000)
870            int_callback(machine().device(MAINCPU_TAG), 0);
871         return m_i186.intr.poll_status;
873872
874873      case 0x13:
875         if (LOG_PORTS) logerror("%05X:read 80186 interrupt poll status\n", cpu_get_pc(&space->device()));
876         return state->m_i186.intr.poll_status;
874         if (LOG_PORTS) logerror("%05X:read 80186 interrupt poll status\n", cpu_get_pc(&space.device()));
875         return m_i186.intr.poll_status;
877876
878877      case 0x14:
879         if (LOG_PORTS) logerror("%05X:read 80186 interrupt mask\n", cpu_get_pc(&space->device()));
880         temp  = (state->m_i186.intr.timer  >> 3) & 0x01;
881         temp |= (state->m_i186.intr.dma[0] >> 1) & 0x04;
882         temp |= (state->m_i186.intr.dma[1] >> 0) & 0x08;
883         temp |= (state->m_i186.intr.ext[0] << 1) & 0x10;
884         temp |= (state->m_i186.intr.ext[1] << 2) & 0x20;
885         temp |= (state->m_i186.intr.ext[2] << 3) & 0x40;
886         temp |= (state->m_i186.intr.ext[3] << 4) & 0x80;
878         if (LOG_PORTS) logerror("%05X:read 80186 interrupt mask\n", cpu_get_pc(&space.device()));
879         temp  = (m_i186.intr.timer  >> 3) & 0x01;
880         temp |= (m_i186.intr.dma[0] >> 1) & 0x04;
881         temp |= (m_i186.intr.dma[1] >> 0) & 0x08;
882         temp |= (m_i186.intr.ext[0] << 1) & 0x10;
883         temp |= (m_i186.intr.ext[1] << 2) & 0x20;
884         temp |= (m_i186.intr.ext[2] << 3) & 0x40;
885         temp |= (m_i186.intr.ext[3] << 4) & 0x80;
887886         return temp;
888887
889888      case 0x15:
890         if (LOG_PORTS) logerror("%05X:read 80186 interrupt priority mask\n", cpu_get_pc(&space->device()));
891         return state->m_i186.intr.priority_mask;
889         if (LOG_PORTS) logerror("%05X:read 80186 interrupt priority mask\n", cpu_get_pc(&space.device()));
890         return m_i186.intr.priority_mask;
892891
893892      case 0x16:
894         if (LOG_PORTS) logerror("%05X:read 80186 interrupt in-service\n", cpu_get_pc(&space->device()));
895         return state->m_i186.intr.in_service;
893         if (LOG_PORTS) logerror("%05X:read 80186 interrupt in-service\n", cpu_get_pc(&space.device()));
894         return m_i186.intr.in_service;
896895
897896      case 0x17:
898         if (LOG_PORTS) logerror("%05X:read 80186 interrupt request\n", cpu_get_pc(&space->device()));
899         temp = state->m_i186.intr.request & ~0x0001;
900         if (state->m_i186.intr.status & 0x0007)
897         if (LOG_PORTS) logerror("%05X:read 80186 interrupt request\n", cpu_get_pc(&space.device()));
898         temp = m_i186.intr.request & ~0x0001;
899         if (m_i186.intr.status & 0x0007)
901900            temp |= 1;
902901         return temp;
903902
904903      case 0x18:
905         if (LOG_PORTS) logerror("%05X:read 80186 interrupt status\n", cpu_get_pc(&space->device()));
906         return state->m_i186.intr.status;
904         if (LOG_PORTS) logerror("%05X:read 80186 interrupt status\n", cpu_get_pc(&space.device()));
905         return m_i186.intr.status;
907906
908907      case 0x19:
909         if (LOG_PORTS) logerror("%05X:read 80186 timer interrupt control\n", cpu_get_pc(&space->device()));
910         return state->m_i186.intr.timer;
908         if (LOG_PORTS) logerror("%05X:read 80186 timer interrupt control\n", cpu_get_pc(&space.device()));
909         return m_i186.intr.timer;
911910
912911      case 0x1a:
913         if (LOG_PORTS) logerror("%05X:read 80186 DMA 0 interrupt control\n", cpu_get_pc(&space->device()));
914         return state->m_i186.intr.dma[0];
912         if (LOG_PORTS) logerror("%05X:read 80186 DMA 0 interrupt control\n", cpu_get_pc(&space.device()));
913         return m_i186.intr.dma[0];
915914
916915      case 0x1b:
917         if (LOG_PORTS) logerror("%05X:read 80186 DMA 1 interrupt control\n", cpu_get_pc(&space->device()));
918         return state->m_i186.intr.dma[1];
916         if (LOG_PORTS) logerror("%05X:read 80186 DMA 1 interrupt control\n", cpu_get_pc(&space.device()));
917         return m_i186.intr.dma[1];
919918
920919      case 0x1c:
921         if (LOG_PORTS) logerror("%05X:read 80186 INT 0 interrupt control\n", cpu_get_pc(&space->device()));
922         return state->m_i186.intr.ext[0];
920         if (LOG_PORTS) logerror("%05X:read 80186 INT 0 interrupt control\n", cpu_get_pc(&space.device()));
921         return m_i186.intr.ext[0];
923922
924923      case 0x1d:
925         if (LOG_PORTS) logerror("%05X:read 80186 INT 1 interrupt control\n", cpu_get_pc(&space->device()));
926         return state->m_i186.intr.ext[1];
924         if (LOG_PORTS) logerror("%05X:read 80186 INT 1 interrupt control\n", cpu_get_pc(&space.device()));
925         return m_i186.intr.ext[1];
927926
928927      case 0x1e:
929         if (LOG_PORTS) logerror("%05X:read 80186 INT 2 interrupt control\n", cpu_get_pc(&space->device()));
930         return state->m_i186.intr.ext[2];
928         if (LOG_PORTS) logerror("%05X:read 80186 INT 2 interrupt control\n", cpu_get_pc(&space.device()));
929         return m_i186.intr.ext[2];
931930
932931      case 0x1f:
933         if (LOG_PORTS) logerror("%05X:read 80186 INT 3 interrupt control\n", cpu_get_pc(&space->device()));
934         return state->m_i186.intr.ext[3];
932         if (LOG_PORTS) logerror("%05X:read 80186 INT 3 interrupt control\n", cpu_get_pc(&space.device()));
933         return m_i186.intr.ext[3];
935934
936935      case 0x28:
937936      case 0x2c:
938937      case 0x30:
939         if (LOG_PORTS) logerror("%05X:read 80186 Timer %d count\n", cpu_get_pc(&space->device()), (offset - 0x28) / 4);
938         if (LOG_PORTS) logerror("%05X:read 80186 Timer %d count\n", cpu_get_pc(&space.device()), (offset - 0x28) / 4);
940939         which = (offset - 0x28) / 4;
941940         if (!(offset & 1))
942            internal_timer_sync(space->machine(), which);
943         return state->m_i186.timer[which].count;
941            internal_timer_sync(machine(), which);
942         return m_i186.timer[which].count;
944943
945944      case 0x29:
946945      case 0x2d:
947946      case 0x31:
948         if (LOG_PORTS) logerror("%05X:read 80186 Timer %d max A\n", cpu_get_pc(&space->device()), (offset - 0x29) / 4);
947         if (LOG_PORTS) logerror("%05X:read 80186 Timer %d max A\n", cpu_get_pc(&space.device()), (offset - 0x29) / 4);
949948         which = (offset - 0x29) / 4;
950         return state->m_i186.timer[which].maxA;
949         return m_i186.timer[which].maxA;
951950
952951      case 0x2a:
953952      case 0x2e:
954         logerror("%05X:read 80186 Timer %d max B\n", cpu_get_pc(&space->device()), (offset - 0x2a) / 4);
953         logerror("%05X:read 80186 Timer %d max B\n", cpu_get_pc(&space.device()), (offset - 0x2a) / 4);
955954         which = (offset - 0x2a) / 4;
956         return state->m_i186.timer[which].maxB;
955         return m_i186.timer[which].maxB;
957956
958957      case 0x2b:
959958      case 0x2f:
960959      case 0x33:
961         if (LOG_PORTS) logerror("%05X:read 80186 Timer %d control\n", cpu_get_pc(&space->device()), (offset - 0x2b) / 4);
960         if (LOG_PORTS) logerror("%05X:read 80186 Timer %d control\n", cpu_get_pc(&space.device()), (offset - 0x2b) / 4);
962961         which = (offset - 0x2b) / 4;
963         return state->m_i186.timer[which].control;
962         return m_i186.timer[which].control;
964963
965964      case 0x50:
966         if (LOG_PORTS) logerror("%05X:read 80186 upper chip select\n", cpu_get_pc(&space->device()));
967         return state->m_i186.mem.upper;
965         if (LOG_PORTS) logerror("%05X:read 80186 upper chip select\n", cpu_get_pc(&space.device()));
966         return m_i186.mem.upper;
968967
969968      case 0x51:
970         if (LOG_PORTS) logerror("%05X:read 80186 lower chip select\n", cpu_get_pc(&space->device()));
971         return state->m_i186.mem.lower;
969         if (LOG_PORTS) logerror("%05X:read 80186 lower chip select\n", cpu_get_pc(&space.device()));
970         return m_i186.mem.lower;
972971
973972      case 0x52:
974         if (LOG_PORTS) logerror("%05X:read 80186 peripheral chip select\n", cpu_get_pc(&space->device()));
975         return state->m_i186.mem.peripheral;
973         if (LOG_PORTS) logerror("%05X:read 80186 peripheral chip select\n", cpu_get_pc(&space.device()));
974         return m_i186.mem.peripheral;
976975
977976      case 0x53:
978         if (LOG_PORTS) logerror("%05X:read 80186 middle chip select\n", cpu_get_pc(&space->device()));
979         return state->m_i186.mem.middle;
977         if (LOG_PORTS) logerror("%05X:read 80186 middle chip select\n", cpu_get_pc(&space.device()));
978         return m_i186.mem.middle;
980979
981980      case 0x54:
982         if (LOG_PORTS) logerror("%05X:read 80186 middle P chip select\n", cpu_get_pc(&space->device()));
983         return state->m_i186.mem.middle_size;
981         if (LOG_PORTS) logerror("%05X:read 80186 middle P chip select\n", cpu_get_pc(&space.device()));
982         return m_i186.mem.middle_size;
984983
985984      case 0x60:
986985      case 0x68:
987         if (LOG_PORTS) logerror("%05X:read 80186 DMA%d lower source address\n", cpu_get_pc(&space->device()), (offset - 0x60) / 8);
986         if (LOG_PORTS) logerror("%05X:read 80186 DMA%d lower source address\n", cpu_get_pc(&space.device()), (offset - 0x60) / 8);
988987         which = (offset - 0x60) / 8;
989         return state->m_i186.dma[which].source;
988         return m_i186.dma[which].source;
990989
991990      case 0x61:
992991      case 0x69:
993         if (LOG_PORTS) logerror("%05X:read 80186 DMA%d upper source address\n", cpu_get_pc(&space->device()), (offset - 0x61) / 8);
992         if (LOG_PORTS) logerror("%05X:read 80186 DMA%d upper source address\n", cpu_get_pc(&space.device()), (offset - 0x61) / 8);
994993         which = (offset - 0x61) / 8;
995         return state->m_i186.dma[which].source >> 16;
994         return m_i186.dma[which].source >> 16;
996995
997996      case 0x62:
998997      case 0x6a:
999         if (LOG_PORTS) logerror("%05X:read 80186 DMA%d lower dest address\n", cpu_get_pc(&space->device()), (offset - 0x62) / 8);
998         if (LOG_PORTS) logerror("%05X:read 80186 DMA%d lower dest address\n", cpu_get_pc(&space.device()), (offset - 0x62) / 8);
1000999         which = (offset - 0x62) / 8;
1001         return state->m_i186.dma[which].dest;
1000         return m_i186.dma[which].dest;
10021001
10031002      case 0x63:
10041003      case 0x6b:
1005         if (LOG_PORTS) logerror("%05X:read 80186 DMA%d upper dest address\n", cpu_get_pc(&space->device()), (offset - 0x63) / 8);
1004         if (LOG_PORTS) logerror("%05X:read 80186 DMA%d upper dest address\n", cpu_get_pc(&space.device()), (offset - 0x63) / 8);
10061005         which = (offset - 0x63) / 8;
1007         return state->m_i186.dma[which].dest >> 16;
1006         return m_i186.dma[which].dest >> 16;
10081007
10091008      case 0x64:
10101009      case 0x6c:
1011         if (LOG_PORTS) logerror("%05X:read 80186 DMA%d transfer count\n", cpu_get_pc(&space->device()), (offset - 0x64) / 8);
1010         if (LOG_PORTS) logerror("%05X:read 80186 DMA%d transfer count\n", cpu_get_pc(&space.device()), (offset - 0x64) / 8);
10121011         which = (offset - 0x64) / 8;
1013         return state->m_i186.dma[which].count;
1012         return m_i186.dma[which].count;
10141013
10151014      case 0x65:
10161015      case 0x6d:
1017         if (LOG_PORTS) logerror("%05X:read 80186 DMA%d control\n", cpu_get_pc(&space->device()), (offset - 0x65) / 8);
1016         if (LOG_PORTS) logerror("%05X:read 80186 DMA%d control\n", cpu_get_pc(&space.device()), (offset - 0x65) / 8);
10181017         which = (offset - 0x65) / 8;
1019         return state->m_i186.dma[which].control;
1018         return m_i186.dma[which].control;
10201019
10211020      default:
1022         logerror("%05X:read 80186 port %02X\n", cpu_get_pc(&space->device()), offset);
1021         logerror("%05X:read 80186 port %02X\n", cpu_get_pc(&space.device()), offset);
10231022         break;
10241023   }
10251024   return 0x00;
r14963r14964
10311030 *
10321031 *************************************/
10331032
1034WRITE16_HANDLER( nimbus_i186_internal_port_w )
1033WRITE16_MEMBER(rmnimbus_state::nimbus_i186_internal_port_w)
10351034{
1036   rmnimbus_state *state = space->machine().driver_data<rmnimbus_state>();
10371035   int temp, which, data16 = data;
10381036
10391037   switch (offset)
10401038   {
10411039      case 0x11:
1042         if (LOG_PORTS) logerror("%05X:80186 EOI = %04X\n", cpu_get_pc(&space->device()), data16);
1043         handle_eoi(space->machine(),0x8000);
1044         update_interrupt_state(space->machine());
1040         if (LOG_PORTS) logerror("%05X:80186 EOI = %04X\n", cpu_get_pc(&space.device()), data16);
1041         handle_eoi(machine(),0x8000);
1042         update_interrupt_state(machine());
10451043         break;
10461044
10471045      case 0x12:
1048         logerror("%05X:ERROR - write to 80186 interrupt poll = %04X\n", cpu_get_pc(&space->device()), data16);
1046         logerror("%05X:ERROR - write to 80186 interrupt poll = %04X\n", cpu_get_pc(&space.device()), data16);
10491047         break;
10501048
10511049      case 0x13:
1052         logerror("%05X:ERROR - write to 80186 interrupt poll status = %04X\n", cpu_get_pc(&space->device()), data16);
1050         logerror("%05X:ERROR - write to 80186 interrupt poll status = %04X\n", cpu_get_pc(&space.device()), data16);
10531051         break;
10541052
10551053      case 0x14:
1056         if (LOG_PORTS) logerror("%05X:80186 interrupt mask = %04X\n", cpu_get_pc(&space->device()), data16);
1057         state->m_i186.intr.timer  = (state->m_i186.intr.timer  & ~0x08) | ((data16 << 3) & 0x08);
1058         state->m_i186.intr.dma[0] = (state->m_i186.intr.dma[0] & ~0x08) | ((data16 << 1) & 0x08);
1059         state->m_i186.intr.dma[1] = (state->m_i186.intr.dma[1] & ~0x08) | ((data16 << 0) & 0x08);
1060         state->m_i186.intr.ext[0] = (state->m_i186.intr.ext[0] & ~0x08) | ((data16 >> 1) & 0x08);
1061         state->m_i186.intr.ext[1] = (state->m_i186.intr.ext[1] & ~0x08) | ((data16 >> 2) & 0x08);
1062         state->m_i186.intr.ext[2] = (state->m_i186.intr.ext[2] & ~0x08) | ((data16 >> 3) & 0x08);
1063         state->m_i186.intr.ext[3] = (state->m_i186.intr.ext[3] & ~0x08) | ((data16 >> 4) & 0x08);
1064         update_interrupt_state(space->machine());
1054         if (LOG_PORTS) logerror("%05X:80186 interrupt mask = %04X\n", cpu_get_pc(&space.device()), data16);
1055         m_i186.intr.timer  = (m_i186.intr.timer  & ~0x08) | ((data16 << 3) & 0x08);
1056         m_i186.intr.dma[0] = (m_i186.intr.dma[0] & ~0x08) | ((data16 << 1) & 0x08);
1057         m_i186.intr.dma[1] = (m_i186.intr.dma[1] & ~0x08) | ((data16 << 0) & 0x08);
1058         m_i186.intr.ext[0] = (m_i186.intr.ext[0] & ~0x08) | ((data16 >> 1) & 0x08);
1059         m_i186.intr.ext[1] = (m_i186.intr.ext[1] & ~0x08) | ((data16 >> 2) & 0x08);
1060         m_i186.intr.ext[2] = (m_i186.intr.ext[2] & ~0x08) | ((data16 >> 3) & 0x08);
1061         m_i186.intr.ext[3] = (m_i186.intr.ext[3] & ~0x08) | ((data16 >> 4) & 0x08);
1062         update_interrupt_state(machine());
10651063         break;
10661064
10671065      case 0x15:
1068         if (LOG_PORTS) logerror("%05X:80186 interrupt priority mask = %04X\n", cpu_get_pc(&space->device()), data16);
1069         state->m_i186.intr.priority_mask = data16 & 0x0007;
1070         update_interrupt_state(space->machine());
1066         if (LOG_PORTS) logerror("%05X:80186 interrupt priority mask = %04X\n", cpu_get_pc(&space.device()), data16);
1067         m_i186.intr.priority_mask = data16 & 0x0007;
1068         update_interrupt_state(machine());
10711069         break;
10721070
10731071      case 0x16:
1074         if (LOG_PORTS) logerror("%05X:80186 interrupt in-service = %04X\n", cpu_get_pc(&space->device()), data16);
1075         state->m_i186.intr.in_service = data16 & 0x00ff;
1076         update_interrupt_state(space->machine());
1072         if (LOG_PORTS) logerror("%05X:80186 interrupt in-service = %04X\n", cpu_get_pc(&space.device()), data16);
1073         m_i186.intr.in_service = data16 & 0x00ff;
1074         update_interrupt_state(machine());
10771075         break;
10781076
10791077      case 0x17:
1080         if (LOG_PORTS) logerror("%05X:80186 interrupt request = %04X\n", cpu_get_pc(&space->device()), data16);
1081         state->m_i186.intr.request = (state->m_i186.intr.request & ~0x00c0) | (data16 & 0x00c0);
1082         update_interrupt_state(space->machine());
1078         if (LOG_PORTS) logerror("%05X:80186 interrupt request = %04X\n", cpu_get_pc(&space.device()), data16);
1079         m_i186.intr.request = (m_i186.intr.request & ~0x00c0) | (data16 & 0x00c0);
1080         update_interrupt_state(machine());
10831081         break;
10841082
10851083      case 0x18:
1086         if (LOG_PORTS) logerror("%05X:WARNING - wrote to 80186 interrupt status = %04X\n", cpu_get_pc(&space->device()), data16);
1087         state->m_i186.intr.status = (state->m_i186.intr.status & ~0x8007) | (data16 & 0x8007);
1088         update_interrupt_state(space->machine());
1084         if (LOG_PORTS) logerror("%05X:WARNING - wrote to 80186 interrupt status = %04X\n", cpu_get_pc(&space.device()), data16);
1085         m_i186.intr.status = (m_i186.intr.status & ~0x8007) | (data16 & 0x8007);
1086         update_interrupt_state(machine());
10891087         break;
10901088
10911089      case 0x19:
1092         if (LOG_PORTS) logerror("%05X:80186 timer interrupt contol = %04X\n", cpu_get_pc(&space->device()), data16);
1093         state->m_i186.intr.timer = data16 & 0x000f;
1090         if (LOG_PORTS) logerror("%05X:80186 timer interrupt contol = %04X\n", cpu_get_pc(&space.device()), data16);
1091         m_i186.intr.timer = data16 & 0x000f;
10941092         break;
10951093
10961094      case 0x1a:
1097         if (LOG_PORTS) logerror("%05X:80186 DMA 0 interrupt control = %04X\n", cpu_get_pc(&space->device()), data16);
1098         state->m_i186.intr.dma[0] = data16 & 0x000f;
1095         if (LOG_PORTS) logerror("%05X:80186 DMA 0 interrupt control = %04X\n", cpu_get_pc(&space.device()), data16);
1096         m_i186.intr.dma[0] = data16 & 0x000f;
10991097         break;
11001098
11011099      case 0x1b:
1102         if (LOG_PORTS) logerror("%05X:80186 DMA 1 interrupt control = %04X\n", cpu_get_pc(&space->device()), data16);
1103         state->m_i186.intr.dma[1] = data16 & 0x000f;
1100         if (LOG_PORTS) logerror("%05X:80186 DMA 1 interrupt control = %04X\n", cpu_get_pc(&space.device()), data16);
1101         m_i186.intr.dma[1] = data16 & 0x000f;
11041102         break;
11051103
11061104      case 0x1c:
1107         if (LOG_PORTS) logerror("%05X:80186 INT 0 interrupt control = %04X\n", cpu_get_pc(&space->device()), data16);
1108         state->m_i186.intr.ext[0] = data16 & 0x007f;
1105         if (LOG_PORTS) logerror("%05X:80186 INT 0 interrupt control = %04X\n", cpu_get_pc(&space.device()), data16);
1106         m_i186.intr.ext[0] = data16 & 0x007f;
11091107         break;
11101108
11111109      case 0x1d:
1112         if (LOG_PORTS) logerror("%05X:80186 INT 1 interrupt control = %04X\n", cpu_get_pc(&space->device()), data16);
1113         state->m_i186.intr.ext[1] = data16 & 0x007f;
1110         if (LOG_PORTS) logerror("%05X:80186 INT 1 interrupt control = %04X\n", cpu_get_pc(&space.device()), data16);
1111         m_i186.intr.ext[1] = data16 & 0x007f;
11141112         break;
11151113
11161114      case 0x1e:
1117         if (LOG_PORTS) logerror("%05X:80186 INT 2 interrupt control = %04X\n", cpu_get_pc(&space->device()), data16);
1118         state->m_i186.intr.ext[2] = data16 & 0x001f;
1115         if (LOG_PORTS) logerror("%05X:80186 INT 2 interrupt control = %04X\n", cpu_get_pc(&space.device()), data16);
1116         m_i186.intr.ext[2] = data16 & 0x001f;
11191117         break;
11201118
11211119      case 0x1f:
1122         if (LOG_PORTS) logerror("%05X:80186 INT 3 interrupt control = %04X\n", cpu_get_pc(&space->device()), data16);
1123         state->m_i186.intr.ext[3] = data16 & 0x001f;
1120         if (LOG_PORTS) logerror("%05X:80186 INT 3 interrupt control = %04X\n", cpu_get_pc(&space.device()), data16);
1121         m_i186.intr.ext[3] = data16 & 0x001f;
11241122         break;
11251123
11261124      case 0x28:
11271125      case 0x2c:
11281126      case 0x30:
1129         if (LOG_PORTS) logerror("%05X:80186 Timer %d count = %04X\n", cpu_get_pc(&space->device()), (offset - 0x28) / 4, data16);
1127         if (LOG_PORTS) logerror("%05X:80186 Timer %d count = %04X\n", cpu_get_pc(&space.device()), (offset - 0x28) / 4, data16);
11301128         which = (offset - 0x28) / 4;
1131         internal_timer_update(space->machine(),which, data16, -1, -1, -1);
1129         internal_timer_update(machine(),which, data16, -1, -1, -1);
11321130         break;
11331131
11341132      case 0x29:
11351133      case 0x2d:
11361134      case 0x31:
1137         if (LOG_PORTS) logerror("%05X:80186 Timer %d max A = %04X\n", cpu_get_pc(&space->device()), (offset - 0x29) / 4, data16);
1135         if (LOG_PORTS) logerror("%05X:80186 Timer %d max A = %04X\n", cpu_get_pc(&space.device()), (offset - 0x29) / 4, data16);
11381136         which = (offset - 0x29) / 4;
1139         internal_timer_update(space->machine(),which, -1, data16, -1, -1);
1137         internal_timer_update(machine(),which, -1, data16, -1, -1);
11401138         break;
11411139
11421140      case 0x2a:
11431141      case 0x2e:
1144         if (LOG_PORTS) logerror("%05X:80186 Timer %d max B = %04X\n", cpu_get_pc(&space->device()), (offset - 0x2a) / 4, data16);
1142         if (LOG_PORTS) logerror("%05X:80186 Timer %d max B = %04X\n", cpu_get_pc(&space.device()), (offset - 0x2a) / 4, data16);
11451143         which = (offset - 0x2a) / 4;
1146         internal_timer_update(space->machine(),which, -1, -1, data16, -1);
1144         internal_timer_update(machine(),which, -1, -1, data16, -1);
11471145         break;
11481146
11491147      case 0x2b:
11501148      case 0x2f:
11511149      case 0x33:
1152         if (LOG_PORTS) logerror("%05X:80186 Timer %d control = %04X\n", cpu_get_pc(&space->device()), (offset - 0x2b) / 4, data16);
1150         if (LOG_PORTS) logerror("%05X:80186 Timer %d control = %04X\n", cpu_get_pc(&space.device()), (offset - 0x2b) / 4, data16);
11531151         which = (offset - 0x2b) / 4;
1154         internal_timer_update(space->machine(),which, -1, -1, -1, data16);
1152         internal_timer_update(machine(),which, -1, -1, -1, data16);
11551153         break;
11561154
11571155      case 0x50:
1158         if (LOG_PORTS) logerror("%05X:80186 upper chip select = %04X\n", cpu_get_pc(&space->device()), data16);
1159         state->m_i186.mem.upper = data16 | 0xc038;
1156         if (LOG_PORTS) logerror("%05X:80186 upper chip select = %04X\n", cpu_get_pc(&space.device()), data16);
1157         m_i186.mem.upper = data16 | 0xc038;
11601158         break;
11611159
11621160      case 0x51:
1163         if (LOG_PORTS) logerror("%05X:80186 lower chip select = %04X\n", cpu_get_pc(&space->device()), data16);
1164         state->m_i186.mem.lower = (data16 & 0x3fff) | 0x0038; printf("%X",state->m_i186.mem.lower);
1161         if (LOG_PORTS) logerror("%05X:80186 lower chip select = %04X\n", cpu_get_pc(&space.device()), data16);
1162         m_i186.mem.lower = (data16 & 0x3fff) | 0x0038; printf("%X",m_i186.mem.lower);
11651163         break;
11661164
11671165      case 0x52:
1168         if (LOG_PORTS) logerror("%05X:80186 peripheral chip select = %04X\n", cpu_get_pc(&space->device()), data16);
1169         state->m_i186.mem.peripheral = data16 | 0x0038;
1166         if (LOG_PORTS) logerror("%05X:80186 peripheral chip select = %04X\n", cpu_get_pc(&space.device()), data16);
1167         m_i186.mem.peripheral = data16 | 0x0038;
11701168         break;
11711169
11721170      case 0x53:
1173         if (LOG_PORTS) logerror("%05X:80186 middle chip select = %04X\n", cpu_get_pc(&space->device()), data16);
1174         state->m_i186.mem.middle = data16 | 0x01f8;
1171         if (LOG_PORTS) logerror("%05X:80186 middle chip select = %04X\n", cpu_get_pc(&space.device()), data16);
1172         m_i186.mem.middle = data16 | 0x01f8;
11751173         break;
11761174
11771175      case 0x54:
1178         if (LOG_PORTS) logerror("%05X:80186 middle P chip select = %04X\n", cpu_get_pc(&space->device()), data16);
1179         state->m_i186.mem.middle_size = data16 | 0x8038;
1176         if (LOG_PORTS) logerror("%05X:80186 middle P chip select = %04X\n", cpu_get_pc(&space.device()), data16);
1177         m_i186.mem.middle_size = data16 | 0x8038;
11801178
11811179         /* we need to do this at a time when the I86 context is swapped in */
11821180         /* this register is generally set once at startup and never again, so it's a good */
11831181         /* time to set it up */
1184         device_set_irq_callback(&space->device(), int_callback);
1182         device_set_irq_callback(&space.device(), int_callback);
11851183         break;
11861184
11871185      case 0x60:
11881186      case 0x68:
1189         if (LOG_PORTS) logerror("%05X:80186 DMA%d lower source address = %04X\n", cpu_get_pc(&space->device()), (offset - 0x60) / 8, data16);
1187         if (LOG_PORTS) logerror("%05X:80186 DMA%d lower source address = %04X\n", cpu_get_pc(&space.device()), (offset - 0x60) / 8, data16);
11901188         which = (offset - 0x60) / 8;
1191         state->m_i186.dma[which].source = (state->m_i186.dma[which].source & ~0x0ffff) | (data16 & 0x0ffff);
1189         m_i186.dma[which].source = (m_i186.dma[which].source & ~0x0ffff) | (data16 & 0x0ffff);
11921190         break;
11931191
11941192      case 0x61:
11951193      case 0x69:
1196         if (LOG_PORTS) logerror("%05X:80186 DMA%d upper source address = %04X\n", cpu_get_pc(&space->device()), (offset - 0x61) / 8, data16);
1194         if (LOG_PORTS) logerror("%05X:80186 DMA%d upper source address = %04X\n", cpu_get_pc(&space.device()), (offset - 0x61) / 8, data16);
11971195         which = (offset - 0x61) / 8;
1198         state->m_i186.dma[which].source = (state->m_i186.dma[which].source & ~0xf0000) | ((data16 << 16) & 0xf0000);
1196         m_i186.dma[which].source = (m_i186.dma[which].source & ~0xf0000) | ((data16 << 16) & 0xf0000);
11991197         break;
12001198
12011199      case 0x62:
12021200      case 0x6a:
1203         if (LOG_PORTS) logerror("%05X:80186 DMA%d lower dest address = %04X\n", cpu_get_pc(&space->device()), (offset - 0x62) / 8, data16);
1201         if (LOG_PORTS) logerror("%05X:80186 DMA%d lower dest address = %04X\n", cpu_get_pc(&space.device()), (offset - 0x62) / 8, data16);
12041202         which = (offset - 0x62) / 8;
1205         state->m_i186.dma[which].dest = (state->m_i186.dma[which].dest & ~0x0ffff) | (data16 & 0x0ffff);
1203         m_i186.dma[which].dest = (m_i186.dma[which].dest & ~0x0ffff) | (data16 & 0x0ffff);
12061204         break;
12071205
12081206      case 0x63:
12091207      case 0x6b:
1210         if (LOG_PORTS) logerror("%05X:80186 DMA%d upper dest address = %04X\n", cpu_get_pc(&space->device()), (offset - 0x63) / 8, data16);
1208         if (LOG_PORTS) logerror("%05X:80186 DMA%d upper dest address = %04X\n", cpu_get_pc(&space.device()), (offset - 0x63) / 8, data16);
12111209         which = (offset - 0x63) / 8;
1212         state->m_i186.dma[which].dest = (state->m_i186.dma[which].dest & ~0xf0000) | ((data16 << 16) & 0xf0000);
1210         m_i186.dma[which].dest = (m_i186.dma[which].dest & ~0xf0000) | ((data16 << 16) & 0xf0000);
12131211         break;
12141212
12151213      case 0x64:
12161214      case 0x6c:
1217         if (LOG_PORTS) logerror("%05X:80186 DMA%d transfer count = %04X\n", cpu_get_pc(&space->device()), (offset - 0x64) / 8, data16);
1215         if (LOG_PORTS) logerror("%05X:80186 DMA%d transfer count = %04X\n", cpu_get_pc(&space.device()), (offset - 0x64) / 8, data16);
12181216         which = (offset - 0x64) / 8;
1219         state->m_i186.dma[which].count = data16;
1217         m_i186.dma[which].count = data16;
12201218         break;
12211219
12221220      case 0x65:
12231221      case 0x6d:
1224         if (LOG_PORTS) logerror("%05X:80186 DMA%d control = %04X\n", cpu_get_pc(&space->device()), (offset - 0x65) / 8, data16);
1222         if (LOG_PORTS) logerror("%05X:80186 DMA%d control = %04X\n", cpu_get_pc(&space.device()), (offset - 0x65) / 8, data16);
12251223         which = (offset - 0x65) / 8;
1226         update_dma_control(space->machine(), which, data16);
1224         update_dma_control(machine(), which, data16);
12271225         break;
12281226
12291227      case 0x7f:
1230         if (LOG_PORTS) logerror("%05X:80186 relocation register = %04X\n", cpu_get_pc(&space->device()), data16);
1228         if (LOG_PORTS) logerror("%05X:80186 relocation register = %04X\n", cpu_get_pc(&space.device()), data16);
12311229
12321230         /* we assume here there that this doesn't happen too often */
12331231         /* plus, we can't really remove the old memory range, so we also assume that it's */
r14963r14964
12351233         temp = (data16 & 0x0fff) << 8;
12361234         if (data16 & 0x1000)
12371235         {
1238            space->machine().device(MAINCPU_TAG)->memory().space(AS_PROGRAM)->install_legacy_read_handler(temp, temp + 0xff, FUNC(nimbus_i186_internal_port_r));
1239            space->machine().device(MAINCPU_TAG)->memory().space(AS_PROGRAM)->install_legacy_write_handler(temp, temp + 0xff, FUNC(nimbus_i186_internal_port_w));
1236            machine().device(MAINCPU_TAG)->memory().space(AS_PROGRAM)->install_read_handler(temp, temp + 0xff, read16_delegate(FUNC(rmnimbus_state::nimbus_i186_internal_port_r),this));
1237            machine().device(MAINCPU_TAG)->memory().space(AS_PROGRAM)->install_write_handler(temp, temp + 0xff, write16_delegate(FUNC(rmnimbus_state::nimbus_i186_internal_port_w),this));
12401238         }
12411239         else
12421240         {
12431241            temp &= 0xffff;
1244            space->machine().device(MAINCPU_TAG)->memory().space(AS_IO)->install_legacy_read_handler(temp, temp + 0xff, FUNC(nimbus_i186_internal_port_r));
1245            space->machine().device(MAINCPU_TAG)->memory().space(AS_IO)->install_legacy_write_handler(temp, temp + 0xff, FUNC(nimbus_i186_internal_port_w));
1242            machine().device(MAINCPU_TAG)->memory().space(AS_IO)->install_read_handler(temp, temp + 0xff, read16_delegate(FUNC(rmnimbus_state::nimbus_i186_internal_port_r),this));
1243            machine().device(MAINCPU_TAG)->memory().space(AS_IO)->install_write_handler(temp, temp + 0xff, write16_delegate(FUNC(rmnimbus_state::nimbus_i186_internal_port_w),this));
12461244         }
12471245         break;
12481246
12491247      default:
1250         logerror("%05X:80186 port %02X = %04X\n", cpu_get_pc(&space->device()), offset, data16);
1248         logerror("%05X:80186 port %02X = %04X\n", cpu_get_pc(&space.device()), offset, data16);
12511249         break;
12521250   }
12531251}
r14963r14964
20642062    }
20652063}
20662064
2067READ8_HANDLER( nimbus_mcu_r )
2065READ8_MEMBER(rmnimbus_state::nimbus_mcu_r)
20682066{
2069   rmnimbus_state *state = space->machine().driver_data<rmnimbus_state>();
2070    return state->m_mcu_reg080;
2067    return m_mcu_reg080;
20712068}
20722069
2073WRITE8_HANDLER( nimbus_mcu_w )
2070WRITE8_MEMBER(rmnimbus_state::nimbus_mcu_w)
20742071{
2075   rmnimbus_state *state = space->machine().driver_data<rmnimbus_state>();
2076    state->m_mcu_reg080=data;
2072    m_mcu_reg080=data;
20772073
2078    nimbus_bank_memory(space->machine());
2074    nimbus_bank_memory(machine());
20792075}
20802076
20812077static void memory_reset(running_machine &machine)
r14963r14964
20852081    nimbus_bank_memory(machine);
20862082}
20872083
2088READ16_HANDLER( nimbus_io_r )
2084READ16_MEMBER(rmnimbus_state::nimbus_io_r)
20892085{
2090   rmnimbus_state *state = space->machine().driver_data<rmnimbus_state>();
2091    int pc=cpu_get_pc(&space->device());
2086    int pc=cpu_get_pc(&space.device());
20922087
2093    logerror("Nimbus IOR at pc=%08X from %04X mask=%04X, data=%04X\n",pc,(offset*2)+0x30,mem_mask,state->m_IOPorts[offset]);
2088    logerror("Nimbus IOR at pc=%08X from %04X mask=%04X, data=%04X\n",pc,(offset*2)+0x30,mem_mask,m_IOPorts[offset]);
20942089
20952090    switch (offset*2)
20962091    {
2097        default         : return state->m_IOPorts[offset];
2092        default         : return m_IOPorts[offset];
20982093    }
20992094    return 0;
21002095}
21012096
2102WRITE16_HANDLER( nimbus_io_w )
2097WRITE16_MEMBER(rmnimbus_state::nimbus_io_w)
21032098{
2104   rmnimbus_state *state = space->machine().driver_data<rmnimbus_state>();
2105    int pc=cpu_get_pc(&space->device());
2099    int pc=cpu_get_pc(&space.device());
21062100
21072101    logerror("Nimbus IOW at %08X write of %04X to %04X mask=%04X\n",pc,data,(offset*2)+0x30,mem_mask);
21082102
21092103    switch (offset*2)
21102104    {
2111        default         : COMBINE_DATA(&state->m_IOPorts[offset]); break;
2105        default         : COMBINE_DATA(&m_IOPorts[offset]); break;
21122106    }
21132107}
21142108
r14963r14964
22992293    7   !REQ from HDD
23002294*/
23012295
2302READ8_HANDLER( nimbus_disk_r )
2296READ8_MEMBER(rmnimbus_state::nimbus_disk_r)
23032297{
2304   rmnimbus_state *state = space->machine().driver_data<rmnimbus_state>();
23052298   int result = 0;
2306   device_t *fdc = space->machine().device(FDC_TAG);
2307   device_t *hdc = space->machine().device(SCSIBUS_TAG);
2299   device_t *fdc = machine().device(FDC_TAG);
2300   device_t *hdc = machine().device(SCSIBUS_TAG);
23082301
2309   int pc=cpu_get_pc(&space->device());
2310   device_t *drive = space->machine().device(nimbus_wd17xx_interface.floppy_drive_tags[FDC_DRIVE()]);
2302   int pc=cpu_get_pc(&space.device());
2303   rmnimbus_state *state = machine().driver_data<rmnimbus_state>();
2304   device_t *drive = machine().device(nimbus_wd17xx_interface.floppy_drive_tags[FDC_DRIVE()]);
23112305
23122306   switch(offset*2)
23132307   {
r14963r14964
23252319         result = wd17xx_data_r(fdc, 0);
23262320         break;
23272321      case 0x10 :
2328         state->m_nimbus_drives.reg410_in &= ~FDC_BITS_410;
2329         state->m_nimbus_drives.reg410_in |= (FDC_MOTOR() ? FDC_MOTOR_MASKI : 0x00);
2330         state->m_nimbus_drives.reg410_in |= (floppy_drive_get_flag_state(drive, FLOPPY_DRIVE_INDEX) ? 0x00 : FDC_INDEX_MASK);
2331         state->m_nimbus_drives.reg410_in |= (floppy_drive_get_flag_state(drive, FLOPPY_DRIVE_READY) ? FDC_READY_MASK : 0x00);
2322         m_nimbus_drives.reg410_in &= ~FDC_BITS_410;
2323         m_nimbus_drives.reg410_in |= (FDC_MOTOR() ? FDC_MOTOR_MASKI : 0x00);
2324         m_nimbus_drives.reg410_in |= (floppy_drive_get_flag_state(drive, FLOPPY_DRIVE_INDEX) ? 0x00 : FDC_INDEX_MASK);
2325         m_nimbus_drives.reg410_in |= (floppy_drive_get_flag_state(drive, FLOPPY_DRIVE_READY) ? FDC_READY_MASK : 0x00);
23322326
23332327         // Flip inverted bits
2334         result=state->m_nimbus_drives.reg410_in ^ INV_BITS_410;
2328         result=m_nimbus_drives.reg410_in ^ INV_BITS_410;
23352329         break;
23362330      case 0x18 :
23372331         result = scsi_data_r(hdc);
2338         hdc_post_rw(space->machine());
2332         hdc_post_rw(machine());
23392333      default:
23402334         break;
23412335   }
r14963r14964
23682362    2   SCSI IRQ Enable
23692363*/
23702364
2371WRITE8_HANDLER( nimbus_disk_w )
2365WRITE8_MEMBER(rmnimbus_state::nimbus_disk_w)
23722366{
2373   rmnimbus_state *state = space->machine().driver_data<rmnimbus_state>();
2374   device_t *fdc = space->machine().device(FDC_TAG);
2375    device_t *hdc = space->machine().device(SCSIBUS_TAG);
2376    int                 pc=cpu_get_pc(&space->device());
2377    UINT8               reg400_old = state->m_nimbus_drives.reg400;
2367   device_t *fdc = machine().device(FDC_TAG);
2368    device_t *hdc = machine().device(SCSIBUS_TAG);
2369    int                 pc=cpu_get_pc(&space.device());
2370    UINT8               reg400_old = m_nimbus_drives.reg400;
23782371
23792372    if(LOG_DISK_FDD && ((offset*2)<=0x10))
23802373        logerror("Nimbus FDCW at %05X write of %02X to %04X\n",pc,data,(offset*2)+0x400);
r14963r14964
23822375    if((LOG_DISK_HDD) && (((offset*2)>=0x10) || (offset==0)))
23832376        logerror("Nimbus HDCW at %05X write of %02X to %04X\n",pc,data,(offset*2)+0x400);
23842377
2378   rmnimbus_state *state = machine().driver_data<rmnimbus_state>();
23852379    switch(offset*2)
23862380   {
23872381        case 0x00 :
2388            state->m_nimbus_drives.reg400=data;
2389
2382            m_nimbus_drives.reg400=data;
23902383            wd17xx_set_drive(fdc,FDC_DRIVE());
23912384            wd17xx_set_side(fdc, FDC_SIDE());
23922385
r14963r14964
23952388
23962389            // if we enable hdc drq with a pending condition, act on it
23972390            if((data & HDC_DRQ_MASK) && (~reg400_old & HDC_DRQ_MASK))
2398                hdc_drq(space->machine());
2391                hdc_drq(machine());
23992392
24002393            break;
24012394      case 0x08 :
r14963r14964
24112404         wd17xx_data_w(fdc, 0, data);
24122405         break;
24132406        case 0x10 :
2414            hdc_ctrl_write(space->machine(),data);
2407            hdc_ctrl_write(machine(),data);
24152408            break;
24162409
24172410        case 0x18 :
24182411            scsi_data_w(hdc, data);
2419            hdc_post_rw(space->machine());
2412            hdc_post_rw(machine());
24202413            break;
24212414   }
24222415}
r14963r14964
25442537}
25452538#endif
25462539
2547READ8_HANDLER( nimbus_pc8031_r )
2540READ8_MEMBER(rmnimbus_state::nimbus_pc8031_r)
25482541{
2549   rmnimbus_state *state = space->machine().driver_data<rmnimbus_state>();
2550   int pc=cpu_get_pc(&space->device());
2542   int pc=cpu_get_pc(&space.device());
25512543    UINT8   result;
25522544
25532545    switch(offset*2)
25542546    {
2555        case 0x00   : result=state->m_ipc_interface.ipc_out;
2556                      state->m_ipc_interface.status_in   &= ~IPC_IN_READ_PEND;
2557                      state->m_ipc_interface.status_out  &= ~IPC_OUT_BYTE_AVAIL;
2547        case 0x00   : result=m_ipc_interface.ipc_out;
2548                      m_ipc_interface.status_in   &= ~IPC_IN_READ_PEND;
2549                      m_ipc_interface.status_out  &= ~IPC_OUT_BYTE_AVAIL;
25582550                      break;
25592551
2560        case 0x02   : result=state->m_ipc_interface.status_out;
2552        case 0x02   : result=m_ipc_interface.status_out;
25612553                      break;
25622554
25632555        default : result=0; break;
r14963r14964
25692561    return result;
25702562}
25712563
2572WRITE8_HANDLER( nimbus_pc8031_w )
2564WRITE8_MEMBER(rmnimbus_state::nimbus_pc8031_w)
25732565{
2574   rmnimbus_state *state = space->machine().driver_data<rmnimbus_state>();
2575   int pc=cpu_get_pc(&space->device());
2566   int pc=cpu_get_pc(&space.device());
25762567
25772568    switch(offset*2)
25782569    {
2579        case 0x00   : state->m_ipc_interface.ipc_in=data;
2580                      state->m_ipc_interface.status_in   |= IPC_IN_BYTE_AVAIL;
2581                      state->m_ipc_interface.status_in   &= ~IPC_IN_ADDR;
2582                      state->m_ipc_interface.status_out  |= IPC_OUT_READ_PEND;
2570        case 0x00   : m_ipc_interface.ipc_in=data;
2571                      m_ipc_interface.status_in   |= IPC_IN_BYTE_AVAIL;
2572                      m_ipc_interface.status_in   &= ~IPC_IN_ADDR;
2573                      m_ipc_interface.status_out  |= IPC_OUT_READ_PEND;
25832574                      break;
25842575
2585        case 0x02   : state->m_ipc_interface.ipc_in=data;
2586                      state->m_ipc_interface.status_in   |= IPC_IN_BYTE_AVAIL;
2587                      state->m_ipc_interface.status_in   |= IPC_IN_ADDR;
2588                      state->m_ipc_interface.status_out  |= IPC_OUT_READ_PEND;
2576        case 0x02   : m_ipc_interface.ipc_in=data;
2577                      m_ipc_interface.status_in   |= IPC_IN_BYTE_AVAIL;
2578                      m_ipc_interface.status_in   |= IPC_IN_ADDR;
2579                      m_ipc_interface.status_out  |= IPC_OUT_READ_PEND;
25892580                      break;
25902581    }
25912582
r14963r14964
25962587
25972588/* 8031/8051 Peripheral controler 8031/8051 side */
25982589
2599READ8_HANDLER( nimbus_pc8031_iou_r )
2590READ8_MEMBER(rmnimbus_state::nimbus_pc8031_iou_r)
26002591{
2601   rmnimbus_state *state = space->machine().driver_data<rmnimbus_state>();
2602   int pc=cpu_get_pc(&space->device());
2592   int pc=cpu_get_pc(&space.device());
26032593    UINT8   result = 0;
26042594
26052595    switch (offset & 0x01)
26062596    {
2607        case 0x00   : result=state->m_ipc_interface.ipc_in;
2608                      state->m_ipc_interface.status_out  &= ~IPC_OUT_READ_PEND;
2609                      state->m_ipc_interface.status_in   &= ~IPC_IN_BYTE_AVAIL;
2597        case 0x00   : result=m_ipc_interface.ipc_in;
2598                      m_ipc_interface.status_out  &= ~IPC_OUT_READ_PEND;
2599                      m_ipc_interface.status_in   &= ~IPC_IN_BYTE_AVAIL;
26102600                      break;
26112601
2612        case 0x01   : result=state->m_ipc_interface.status_in;
2602        case 0x01   : result=m_ipc_interface.status_in;
26132603                      break;
26142604    }
26152605
2616    if(((offset==2) || (offset==3)) && (state->m_iou_reg092 & PC8031_INT_ENABLE))
2617        external_int(space->machine(),0,EXTERNAL_INT_PC8031_8C);
2606    if(((offset==2) || (offset==3)) && (m_iou_reg092 & PC8031_INT_ENABLE))
2607        external_int(machine(),0,EXTERNAL_INT_PC8031_8C);
26182608
26192609    if(LOG_PC8031)
26202610        logerror("8031: PCIOR %04X read of %04X returns %02X\n",pc,offset,result);
r14963r14964
26222612    return result;
26232613}
26242614
2625WRITE8_HANDLER( nimbus_pc8031_iou_w )
2615WRITE8_MEMBER(rmnimbus_state::nimbus_pc8031_iou_w)
26262616{
2627   rmnimbus_state *state = space->machine().driver_data<rmnimbus_state>();
2628   int pc=cpu_get_pc(&space->device());
2617   int pc=cpu_get_pc(&space.device());
26292618
26302619    if(LOG_PC8031)
26312620        logerror("8031 PCIOW %04X write of %02X to %04X\n",pc,data,offset);
26322621
26332622    switch(offset & 0x03)
26342623    {
2635        case 0x00   : state->m_ipc_interface.ipc_out=data;
2636                      state->m_ipc_interface.status_out  |= IPC_OUT_BYTE_AVAIL;
2637                      state->m_ipc_interface.status_out  &= ~IPC_OUT_ADDR;
2638                      state->m_ipc_interface.status_in   |= IPC_IN_READ_PEND;
2624        case 0x00   : m_ipc_interface.ipc_out=data;
2625                      m_ipc_interface.status_out  |= IPC_OUT_BYTE_AVAIL;
2626                      m_ipc_interface.status_out  &= ~IPC_OUT_ADDR;
2627                      m_ipc_interface.status_in   |= IPC_IN_READ_PEND;
26392628                      break;
26402629
2641        case 0x01   : state->m_ipc_interface.ipc_out=data;
2642                      state->m_ipc_interface.status_out   |= IPC_OUT_BYTE_AVAIL;
2643                      state->m_ipc_interface.status_out   |= IPC_OUT_ADDR;
2644                      state->m_ipc_interface.status_in    |= IPC_IN_READ_PEND;
2630        case 0x01   : m_ipc_interface.ipc_out=data;
2631                      m_ipc_interface.status_out   |= IPC_OUT_BYTE_AVAIL;
2632                      m_ipc_interface.status_out   |= IPC_OUT_ADDR;
2633                      m_ipc_interface.status_in    |= IPC_IN_READ_PEND;
26452634                      break;
26462635
2647        case 0x02   : state->m_ipc_interface.ipc_out=data;
2648                      state->m_ipc_interface.status_out  |= IPC_OUT_BYTE_AVAIL;
2649                      state->m_ipc_interface.status_out  &= ~IPC_OUT_ADDR;
2650                      state->m_ipc_interface.status_in   |= IPC_IN_READ_PEND;
2651                      if(state->m_iou_reg092 & PC8031_INT_ENABLE)
2652                        external_int(space->machine(),0,EXTERNAL_INT_PC8031_8F);
2636        case 0x02   : m_ipc_interface.ipc_out=data;
2637                      m_ipc_interface.status_out  |= IPC_OUT_BYTE_AVAIL;
2638                      m_ipc_interface.status_out  &= ~IPC_OUT_ADDR;
2639                      m_ipc_interface.status_in   |= IPC_IN_READ_PEND;
2640                      if(m_iou_reg092 & PC8031_INT_ENABLE)
2641                        external_int(machine(),0,EXTERNAL_INT_PC8031_8F);
26532642                      break;
26542643
2655        case 0x03   : state->m_ipc_interface.ipc_out=data;
2656                      //state->m_ipc_interface.status_out   |= IPC_OUT_BYTE_AVAIL;
2657                      state->m_ipc_interface.status_out   |= IPC_OUT_ADDR;
2658                      state->m_ipc_interface.status_in    |= IPC_IN_READ_PEND;
2659                      if(state->m_iou_reg092 & PC8031_INT_ENABLE)
2660                        external_int(space->machine(),0,EXTERNAL_INT_PC8031_8E);
2644        case 0x03   : m_ipc_interface.ipc_out=data;
2645                      //m_ipc_interface.status_out   |= IPC_OUT_BYTE_AVAIL;
2646                      m_ipc_interface.status_out   |= IPC_OUT_ADDR;
2647                      m_ipc_interface.status_in    |= IPC_IN_READ_PEND;
2648                      if(m_iou_reg092 & PC8031_INT_ENABLE)
2649                        external_int(machine(),0,EXTERNAL_INT_PC8031_8E);
26612650                      break;
26622651    }
26632652}
26642653
2665READ8_HANDLER( nimbus_pc8031_port_r )
2654READ8_MEMBER(rmnimbus_state::nimbus_pc8031_port_r)
26662655{
2667   device_t *er59256 = space->machine().device(ER59256_TAG);
2668    int pc=cpu_get_pc(&space->device());
2656   device_t *er59256 = machine().device(ER59256_TAG);
2657    int pc=cpu_get_pc(&space.device());
26692658    UINT8   result = 0;
26702659
26712660    if(LOG_PC8031_PORT)
r14963r14964
26792668    return result;
26802669}
26812670
2682WRITE8_HANDLER( nimbus_pc8031_port_w )
2671WRITE8_MEMBER(rmnimbus_state::nimbus_pc8031_port_w)
26832672{
2684   device_t *er59256 = space->machine().device(ER59256_TAG);
2685    int pc=cpu_get_pc(&space->device());
2673   device_t *er59256 = machine().device(ER59256_TAG);
2674    int pc=cpu_get_pc(&space.device());
26862675
26872676    switch (offset)
26882677    {
r14963r14964
26962685
26972686
26982687/* IO Unit */
2699READ8_HANDLER( nimbus_iou_r )
2688READ8_MEMBER(rmnimbus_state::nimbus_iou_r)
27002689{
2701   rmnimbus_state *state = space->machine().driver_data<rmnimbus_state>();
2702   int pc=cpu_get_pc(&space->device());
2690   int pc=cpu_get_pc(&space.device());
27032691    UINT8   result=0;
27042692
27052693    if(offset==0)
27062694    {
2707        result=state->m_iou_reg092;
2695        result=m_iou_reg092;
27082696    }
27092697
27102698    if(LOG_IOU)
r14963r14964
27132701    return result;
27142702}
27152703
2716WRITE8_HANDLER( nimbus_iou_w )
2704WRITE8_MEMBER(rmnimbus_state::nimbus_iou_w)
27172705{
2718   rmnimbus_state *state = space->machine().driver_data<rmnimbus_state>();
2719   int pc=cpu_get_pc(&space->device());
2720    device_t *msm5205 = space->machine().device(MSM5205_TAG);
2706   int pc=cpu_get_pc(&space.device());
2707    device_t *msm5205 = machine().device(MSM5205_TAG);
27212708
27222709    if(LOG_IOU)
27232710        logerror("Nimbus IOUW %08X write of %02X to %04X\n",pc,data,(offset*2)+0x92);
27242711
27252712    if(offset==0)
27262713    {
2727        state->m_iou_reg092=data;
2714        m_iou_reg092=data;
27282715        msm5205_reset_w(msm5205, (data & MSM5205_INT_ENABLE) ? 0 : 1);
27292716    }
27302717}
r14963r14964
27642751    state->m_ay8910_a=0;
27652752}
27662753
2767READ8_HANDLER( nimbus_sound_ay8910_r )
2754READ8_MEMBER(rmnimbus_state::nimbus_sound_ay8910_r)
27682755{
2769   device_t *ay8910 = space->machine().device(AY8910_TAG);
2756   device_t *ay8910 = machine().device(AY8910_TAG);
27702757    UINT8   result=0;
27712758
27722759    if ((offset*2)==0)
r14963r14964
27752762    return result;
27762763}
27772764
2778WRITE8_HANDLER( nimbus_sound_ay8910_w )
2765WRITE8_MEMBER(rmnimbus_state::nimbus_sound_ay8910_w)
27792766{
2780   int pc=cpu_get_pc(&space->device());
2781   device_t *ay8910 = space->machine().device(AY8910_TAG);
2767   int pc=cpu_get_pc(&space.device());
2768   device_t *ay8910 = machine().device(AY8910_TAG);
27822769
27832770    if(LOG_SOUND)
27842771        logerror("Nimbus SoundW %05X write of %02X to %04X\n",pc,data,(offset*2)+0xE0);
r14963r14964
27912778
27922779}
27932780
2794WRITE8_HANDLER( nimbus_sound_ay8910_porta_w )
2781WRITE8_MEMBER(rmnimbus_state::nimbus_sound_ay8910_porta_w)
27952782{
2796   rmnimbus_state *state = space->machine().driver_data<rmnimbus_state>();
2797    device_t *msm5205 = space->machine().device(MSM5205_TAG);
2783    device_t *msm5205 = machine().device(MSM5205_TAG);
27982784
27992785    msm5205_data_w(msm5205, data);
28002786
28012787    // Mouse code needs a copy of this.
2802    state->m_ay8910_a=data;
2788    m_ay8910_a=data;
28032789}
28042790
2805WRITE8_HANDLER( nimbus_sound_ay8910_portb_w )
2791WRITE8_MEMBER(rmnimbus_state::nimbus_sound_ay8910_portb_w)
28062792{
2807   rmnimbus_state *state = space->machine().driver_data<rmnimbus_state>();
2808    device_t *msm5205 = space->machine().device(MSM5205_TAG);
2793    device_t *msm5205 = machine().device(MSM5205_TAG);
28092794
2810    if((data & 0x07)!=state->m_last_playmode)
2795    if((data & 0x07)!=m_last_playmode)
28112796    {
2812        state->m_last_playmode=(data & 0x07);
2813        msm5205_playmode_w(msm5205, state->m_last_playmode);
2797        m_last_playmode=(data & 0x07);
2798        msm5205_playmode_w(msm5205, m_last_playmode);
28142799    }
28152800}
28162801
r14963r14964
29802965    state->m_intstate_y=intstate_y;
29812966}
29822967
2983READ8_HANDLER( nimbus_mouse_js_r )
2968READ8_MEMBER(rmnimbus_state::nimbus_mouse_js_r)
29842969{
2985   rmnimbus_state *drvstate = space->machine().driver_data<rmnimbus_state>();
29862970   /*
29872971
29882972        bit     description
r14963r14964
29982982
29992983    */
30002984   UINT8 result;
3001   //int pc=cpu_get_pc(space->machine().device(MAINCPU_TAG));
2985   //int pc=cpu_get_pc(machine().device(MAINCPU_TAG));
2986   _mouse_joy_state *state = &m_nimbus_mouse;
30022987
3003   _mouse_joy_state *state = &drvstate->m_nimbus_mouse;
3004
3005   if (input_port_read(space->machine(), "config") & 0x01)
2988   if (input_port_read(machine(), "config") & 0x01)
30062989   {
30072990      result=state->m_reg0a4;
30082991      //logerror("mouse_js_r: pc=%05X, result=%02X\n",pc,result);
30092992   }
30102993   else
30112994   {
3012      result=input_port_read_safe(space->machine(), JOYSTICK0_TAG, 0xff);
2995      result=input_port_read_safe(machine(), JOYSTICK0_TAG, 0xff);
30132996   }
30142997
30152998   return result;
30162999}
30173000
3018WRITE8_HANDLER( nimbus_mouse_js_w )
3001WRITE8_MEMBER(rmnimbus_state::nimbus_mouse_js_w)
30193002{
30203003}
30213004
src/mess/machine/pp01.c
r14963r14964
1313#include "machine/ram.h"
1414
1515
16WRITE8_HANDLER( pp01_video_write_mode_w )
16WRITE8_MEMBER(pp01_state::pp01_video_write_mode_w)
1717{
18   pp01_state *state = space->machine().driver_data<pp01_state>();
19   state->m_video_write_mode = data & 0x0f;
18   m_video_write_mode = data & 0x0f;
2019}
2120
2221static void pp01_video_w(running_machine &machine,UINT8 block,UINT16 offset,UINT8 data,UINT8 part)
r14963r14964
5554   }
5655}
5756
58static WRITE8_HANDLER (pp01_video_r_1_w)
57WRITE8_MEMBER(pp01_state::pp01_video_r_1_w)
5958{
60   pp01_video_w(space->machine(),0,offset,data,0);
59   pp01_video_w(machine(),0,offset,data,0);
6160}
62static WRITE8_HANDLER (pp01_video_g_1_w)
61WRITE8_MEMBER(pp01_state::pp01_video_g_1_w)
6362{
64   pp01_video_w(space->machine(),1,offset,data,0);
63   pp01_video_w(machine(),1,offset,data,0);
6564}
66static WRITE8_HANDLER (pp01_video_b_1_w)
65WRITE8_MEMBER(pp01_state::pp01_video_b_1_w)
6766{
68   pp01_video_w(space->machine(),2,offset,data,0);
67   pp01_video_w(machine(),2,offset,data,0);
6968}
7069
71static WRITE8_HANDLER (pp01_video_r_2_w)
70WRITE8_MEMBER(pp01_state::pp01_video_r_2_w)
7271{
73   pp01_video_w(space->machine(),0,offset,data,1);
72   pp01_video_w(machine(),0,offset,data,1);
7473}
75static WRITE8_HANDLER (pp01_video_g_2_w)
74WRITE8_MEMBER(pp01_state::pp01_video_g_2_w)
7675{
77   pp01_video_w(space->machine(),1,offset,data,1);
76   pp01_video_w(machine(),1,offset,data,1);
7877}
79static WRITE8_HANDLER (pp01_video_b_2_w)
78WRITE8_MEMBER(pp01_state::pp01_video_b_2_w)
8079{
81   pp01_video_w(space->machine(),2,offset,data,1);
80   pp01_video_w(machine(),2,offset,data,1);
8281}
8382
8483
8584static void pp01_set_memory(running_machine &machine,UINT8 block, UINT8 data)
8685{
86   pp01_state *state = machine.driver_data<pp01_state>();
8787   UINT8 *mem = machine.region("maincpu")->base();
8888   address_space *space = machine.device("maincpu")->memory().space(AS_PROGRAM);
8989   UINT16 startaddr = block*0x1000;
r14963r14964
9696      space->install_read_bank (startaddr, endaddr, bank);
9797      switch(data) {
9898         case 0xe6 :
99               space->install_legacy_write_handler(startaddr, endaddr, FUNC(pp01_video_r_1_w));
99               space->install_write_handler(startaddr, endaddr, write8_delegate(FUNC(pp01_state::pp01_video_r_1_w),state));
100100               break;
101101         case 0xe7 :
102               space->install_legacy_write_handler(startaddr, endaddr, FUNC(pp01_video_r_2_w));
102               space->install_write_handler(startaddr, endaddr, write8_delegate(FUNC(pp01_state::pp01_video_r_2_w),state));
103103               break;
104104         case 0xea :
105               space->install_legacy_write_handler(startaddr, endaddr, FUNC(pp01_video_g_1_w));
105               space->install_write_handler(startaddr, endaddr, write8_delegate(FUNC(pp01_state::pp01_video_g_1_w),state));
106106               break;
107107         case 0xeb :
108               space->install_legacy_write_handler(startaddr, endaddr, FUNC(pp01_video_g_2_w));
108               space->install_write_handler(startaddr, endaddr, write8_delegate(FUNC(pp01_state::pp01_video_g_2_w),state));
109109               break;
110110         case 0xee :
111               space->install_legacy_write_handler(startaddr, endaddr, FUNC(pp01_video_b_1_w));
111               space->install_write_handler(startaddr, endaddr, write8_delegate(FUNC(pp01_state::pp01_video_b_1_w),state));
112112               break;
113113         case 0xef :
114               space->install_legacy_write_handler(startaddr, endaddr, FUNC(pp01_video_b_2_w));
114               space->install_write_handler(startaddr, endaddr, write8_delegate(FUNC(pp01_state::pp01_video_b_2_w),state));
115115               break;
116116
117117         default :
r14963r14964
141141   }
142142}
143143
144WRITE8_HANDLER (pp01_mem_block_w)
144WRITE8_MEMBER(pp01_state::pp01_mem_block_w)
145145{
146   pp01_state *state = space->machine().driver_data<pp01_state>();
147   state->m_memory_block[offset] = data;
148   pp01_set_memory(space->machine(), offset, data);
146   m_memory_block[offset] = data;
147   pp01_set_memory(machine(), offset, data);
149148}
150149
151READ8_HANDLER (pp01_mem_block_r)
150READ8_MEMBER(pp01_state::pp01_mem_block_r)
152151{
153   pp01_state *state = space->machine().driver_data<pp01_state>();
154   return   state->m_memory_block[offset];
152   return   m_memory_block[offset];
155153}
156154
157155MACHINE_START(pp01)
src/mess/machine/isa_ibm_mfc.c
r14963r14964
324324//  YM-2164
325325//-------------------------------------------------
326326
327static void ibm_mfc_ym_irq(device_t *device, int state)
327
328WRITE_LINE_MEMBER(isa8_ibm_mfc_device::ibm_mfc_ym_irq)
328329{
329   isa8_ibm_mfc_device *mfc = downcast<isa8_ibm_mfc_device *>(device->owner());
330
331   mfc->set_z80_interrupt(Z80_IRQ_YM, state);
330   set_z80_interrupt(Z80_IRQ_YM, state);
332331}
333332
334333static const ym2151_interface ibm_mfc_ym2151_interface =
335334{
336   ibm_mfc_ym_irq
335   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, isa8_ibm_mfc_device, ibm_mfc_ym_irq),
336   DEVCB_NULL
337337};
338338
339339
src/mess/machine/isa_ibm_mfc.h
r14963r14964
5454      DECLARE_WRITE_LINE_MEMBER( d8253_clk0_out );
5555      DECLARE_WRITE_LINE_MEMBER( d8253_clk1_out );
5656      DECLARE_WRITE_LINE_MEMBER( d8253_clk2_out );
57     
58      DECLARE_WRITE_LINE_MEMBER( ibm_mfc_ym_irq );
5759
5860      void                     set_z80_interrupt(int src, int state);
5961
src/mess/machine/ecb_grip.c
r14963r14964
749749   m_video_ram = auto_alloc_array(machine(), UINT8, VIDEORAM_SIZE);
750750
751751   // setup GRIP memory banking
752   memory_configure_bank(*this, "videoram", 0, 2, m_video_ram, 0x8000);
753   memory_set_bank(*this, "videoram", 0);
752   memory_configure_bank(machine(), "videoram", 0, 2, m_video_ram, 0x8000);
753   memory_set_bank(machine(), "videoram", 0);
754754
755755   // allocate keyboard scan timer
756756   m_kb_timer = timer_alloc();
r14963r14964
842842{
843843   m_page = BIT(data, 7);
844844
845   memory_set_bank(*this, "videoram", m_page);
845   memory_set_bank(machine(), "videoram", m_page);
846846}
847847
848848
src/mess/machine/pk8020.c
r14963r14964
1818static void pk8020_set_bank(running_machine &machine,UINT8 data);
1919
2020
21static READ8_HANDLER( keyboard_r )
21READ8_MEMBER(pk8020_state::keyboard_r)
2222{
2323   static const char *const keynames[] = {
2424      "LINE0", "LINE1", "LINE2", "LINE3", "LINE4", "LINE5", "LINE6", "LINE7",
r14963r14964
2828   UINT8 line = 0;
2929   if (offset & 0x100)  line=8;
3030
31   if (offset & 0x0001) retVal|=input_port_read(space->machine(),keynames[line]);
31   if (offset & 0x0001) retVal|=input_port_read(machine(),keynames[line]);
3232   line++;
33   if (offset & 0x0002) retVal|=input_port_read(space->machine(),keynames[line]);
33   if (offset & 0x0002) retVal|=input_port_read(machine(),keynames[line]);
3434   line++;
35   if (offset & 0x0004) retVal|=input_port_read(space->machine(),keynames[line]);
35   if (offset & 0x0004) retVal|=input_port_read(machine(),keynames[line]);
3636   line++;
37   if (offset & 0x0008) retVal|=input_port_read(space->machine(),keynames[line]);
37   if (offset & 0x0008) retVal|=input_port_read(machine(),keynames[line]);
3838   line++;
39   if (offset & 0x0010) retVal|=input_port_read(space->machine(),keynames[line]);
39   if (offset & 0x0010) retVal|=input_port_read(machine(),keynames[line]);
4040   line++;
41   if (offset & 0x0020) retVal|=input_port_read(space->machine(),keynames[line]);
41   if (offset & 0x0020) retVal|=input_port_read(machine(),keynames[line]);
4242   line++;
43   if (offset & 0x0040) retVal|=input_port_read(space->machine(),keynames[line]);
43   if (offset & 0x0040) retVal|=input_port_read(machine(),keynames[line]);
4444   line++;
45   if (offset & 0x0080) retVal|=input_port_read(space->machine(),keynames[line]);
45   if (offset & 0x0080) retVal|=input_port_read(machine(),keynames[line]);
4646   line++;
4747
4848   return retVal;
4949}
5050
51static READ8_HANDLER(sysreg_r)
51READ8_MEMBER(pk8020_state::sysreg_r)
5252{
53   return space->machine().device<ram_device>(RAM_TAG)->pointer()[offset];
53   return machine().device<ram_device>(RAM_TAG)->pointer()[offset];
5454}
55static WRITE8_HANDLER(sysreg_w)
55WRITE8_MEMBER(pk8020_state::sysreg_w)
5656{
57   pk8020_state *state = space->machine().driver_data<pk8020_state>();
5857   if (BIT(offset,7)==0) {
59      pk8020_set_bank(space->machine(),data >> 2);
58      pk8020_set_bank(machine(),data >> 2);
6059   } else if (BIT(offset,6)==0) {
6160      // Color
62      state->m_color = data;
61      m_color = data;
6362   } else if (BIT(offset,2)==0) {
6463      // Palette set
6564      UINT8 number = data & 0x0f;
r14963r14964
6867      UINT8 r = ((color & 0x04) ? 0xC0 : 0) + i;
6968      UINT8 g = ((color & 0x02) ? 0xC0 : 0) + i;
7069      UINT8 b = ((color & 0x01) ? 0xC0 : 0) + i;
71      palette_set_color( space->machine(), number, MAKE_RGB(r,g,b) );
70      palette_set_color( machine(), number, MAKE_RGB(r,g,b) );
7271   }
7372}
7473
75static READ8_HANDLER(text_r)
74READ8_MEMBER(pk8020_state::text_r)
7675{
77   pk8020_state *state = space->machine().driver_data<pk8020_state>();
78   if (state->m_attr == 3) state->m_text_attr=space->machine().device<ram_device>(RAM_TAG)->pointer()[0x40400+offset];
79   return space->machine().device<ram_device>(RAM_TAG)->pointer()[0x40000+offset];
76   if (m_attr == 3) m_text_attr=machine().device<ram_device>(RAM_TAG)->pointer()[0x40400+offset];
77   return machine().device<ram_device>(RAM_TAG)->pointer()[0x40000+offset];
8078}
8179
82static WRITE8_HANDLER(text_w)
80WRITE8_MEMBER(pk8020_state::text_w)
8381{
84   pk8020_state *state = space->machine().driver_data<pk8020_state>();
85   UINT8 *ram = space->machine().device<ram_device>(RAM_TAG)->pointer();
82   UINT8 *ram = machine().device<ram_device>(RAM_TAG)->pointer();
8683   ram[0x40000+offset] = data;
87   switch (state->m_attr) {
84   switch (m_attr) {
8885      case 0: break;
8986      case 1: ram[0x40400+offset]=0x01;break;
9087      case 2: ram[0x40400+offset]=0x00;break;
91      case 3: ram[0x40400+offset]=state->m_text_attr;break;
88      case 3: ram[0x40400+offset]=m_text_attr;break;
9289   }
9390}
9491
95static READ8_HANDLER(gzu_r)
92READ8_MEMBER(pk8020_state::gzu_r)
9693{
97   pk8020_state *state = space->machine().driver_data<pk8020_state>();
98   UINT8 *addr = space->machine().device<ram_device>(RAM_TAG)->pointer() + 0x10000 + (state->m_video_page_access * 0xC000);
94   UINT8 *addr = machine().device<ram_device>(RAM_TAG)->pointer() + 0x10000 + (m_video_page_access * 0xC000);
9995   UINT8 p0 = addr[offset];
10096   UINT8 p1 = addr[offset + 0x4000];
10197   UINT8 p2 = addr[offset + 0x8000];
10298   UINT8 retVal = 0;
103   if(state->m_color & 0x80) {
99   if(m_color & 0x80) {
104100      // Color mode
105      if (!(state->m_color & 0x10)) {
101      if (!(m_color & 0x10)) {
106102         p0 ^= 0xff;
107103      }
108      if (!(state->m_color & 0x20)) {
104      if (!(m_color & 0x20)) {
109105         p1 ^= 0xff;
110106      }
111      if (!(state->m_color & 0x40)) {
107      if (!(m_color & 0x40)) {
112108         p2 ^= 0xff;
113109      }
114110      retVal = (p0 & p1 & p2) ^ 0xff;
115111   } else {
116112      // Plane mode
117      if (state->m_color & 0x10) {
113      if (m_color & 0x10) {
118114         retVal |= p0;
119115      }
120      if (state->m_color & 0x20) {
116      if (m_color & 0x20) {
121117         retVal |= p1;
122118      }
123      if (state->m_color & 0x40) {
119      if (m_color & 0x40) {
124120         retVal |= p2;
125121      }
126122   }
127123   return retVal;
128124}
129125
130static WRITE8_HANDLER(gzu_w)
126WRITE8_MEMBER(pk8020_state::gzu_w)
131127{
132   pk8020_state *state = space->machine().driver_data<pk8020_state>();
133   UINT8 *addr = space->machine().device<ram_device>(RAM_TAG)->pointer() + 0x10000 + (state->m_video_page_access * 0xC000);
128   UINT8 *addr = machine().device<ram_device>(RAM_TAG)->pointer() + 0x10000 + (m_video_page_access * 0xC000);
134129   UINT8 *plane_0 = addr;
135130   UINT8 *plane_1 = addr + 0x4000;
136131   UINT8 *plane_2 = addr + 0x8000;
137132
138   if(state->m_color & 0x80)
133   if(m_color & 0x80)
139134   {
140135      // Color mode
141      plane_0[offset] = (plane_0[offset] & ~data) | ((state->m_color & 2) ? data : 0);
142      plane_1[offset] = (plane_1[offset] & ~data) | ((state->m_color & 4) ? data : 0);
143      plane_2[offset] = (plane_2[offset] & ~data) | ((state->m_color & 8) ? data : 0);
136      plane_0[offset] = (plane_0[offset] & ~data) | ((m_color & 2) ? data : 0);
137      plane_1[offset] = (plane_1[offset] & ~data) | ((m_color & 4) ? data : 0);
138      plane_2[offset] = (plane_2[offset] & ~data) | ((m_color & 8) ? data : 0);
144139   } else {
145140      // Plane mode
146      UINT8 mask = (state->m_color & 1) ? data : 0;
147      if (!(state->m_color & 0x02)) {
141      UINT8 mask = (m_color & 1) ? data : 0;
142      if (!(m_color & 0x02)) {
148143         plane_0[offset] = (plane_0[offset] & ~data) | mask;
149144      }
150      if (!(state->m_color & 0x04)) {
145      if (!(m_color & 0x04)) {
151146         plane_1[offset] = (plane_1[offset] & ~data) | mask;
152147      }
153      if (!(state->m_color & 0x08)) {
148      if (!(m_color & 0x08)) {
154149         plane_2[offset] = (plane_2[offset] & ~data) | mask;
155150      }
156151   }
157152}
158153
159static READ8_HANDLER(devices_r)
154READ8_MEMBER(pk8020_state::devices_r)
160155{
161   i8255_device *ppi1 = space->machine().device<i8255_device>("ppi8255_1");
162   i8255_device *ppi2 = space->machine().device<i8255_device>("ppi8255_2");
163   i8255_device *ppi3 = space->machine().device<i8255_device>("ppi8255_3");
164   device_t *pit = space->machine().device("pit8253");
165   device_t *pic = space->machine().device("pic8259");
166   i8251_device *rs232 = space->machine().device<i8251_device>("rs232");
167   i8251_device *lan = space->machine().device<i8251_device>("lan");
168   device_t *fdc = space->machine().device("wd1793");
156   i8255_device *ppi1 = machine().device<i8255_device>("ppi8255_1");
157   i8255_device *ppi2 = machine().device<i8255_device>("ppi8255_2");
158   i8255_device *ppi3 = machine().device<i8255_device>("ppi8255_3");
159   device_t *pit = machine().device("pit8253");
160   device_t *pic = machine().device("pic8259");
161   i8251_device *rs232 = machine().device<i8251_device>("rs232");
162   i8251_device *lan = machine().device<i8251_device>("lan");
163   device_t *fdc = machine().device("wd1793");
169164
170165   switch(offset & 0x38)
171166   {
172167      case 0x00: return pit8253_r(pit,offset & 3);
173      case 0x08: return ppi3->read(*space,offset & 3);
168      case 0x08: return ppi3->read(space,offset & 3);
174169      case 0x10: switch(offset & 1) {
175                  case 0 : return rs232->data_r(*space,0);
176                  case 1 : return rs232->status_r(*space,0);
170                  case 0 : return rs232->data_r(space,0);
171                  case 1 : return rs232->status_r(space,0);
177172               }
178173               break;
179174      case 0x18: switch(offset & 3) {
r14963r14964
184179               }
185180               break;
186181      case 0x20: switch(offset & 1) {
187                  case 0 : return lan->data_r(*space,0);
188                  case 1 : return lan->status_r(*space,0);
182                  case 0 : return lan->data_r(space,0);
183                  case 1 : return lan->status_r(space,0);
189184               }
190185               break;
191186      case 0x28: return pic8259_r(pic,offset & 1);
192      case 0x30: return ppi2->read(*space,offset & 3);
193      case 0x38: return ppi1->read(*space,offset & 3);
187      case 0x30: return ppi2->read(space,offset & 3);
188      case 0x38: return ppi1->read(space,offset & 3);
194189   }
195190   return 0xff;
196191}
197192
198static WRITE8_HANDLER(devices_w)
193WRITE8_MEMBER(pk8020_state::devices_w)
199194{
200   i8255_device *ppi1 = space->machine().device<i8255_device>("ppi8255_1");
201   i8255_device *ppi2 = space->machine().device<i8255_device>("ppi8255_2");
202   i8255_device *ppi3 = space->machine().device<i8255_device>("ppi8255_3");
203   device_t *pit = space->machine().device("pit8253");
204   device_t *pic = space->machine().device("pic8259");
205   i8251_device *rs232 = space->machine().device<i8251_device>("rs232");
206   i8251_device *lan = space->machine().device<i8251_device>("lan");
207   device_t *fdc = space->machine().device("wd1793");
195   i8255_device *ppi1 = machine().device<i8255_device>("ppi8255_1");
196   i8255_device *ppi2 = machine().device<i8255_device>("ppi8255_2");
197   i8255_device *ppi3 = machine().device<i8255_device>("ppi8255_3");
198   device_t *pit = machine().device("pit8253");
199   device_t *pic = machine().device("pic8259");
200   i8251_device *rs232 = machine().device<i8251_device>("rs232");
201   i8251_device *lan = machine().device<i8251_device>("lan");
202   device_t *fdc = machine().device("wd1793");
208203
209204   switch(offset & 0x38)
210205   {
211206      case 0x00: pit8253_w(pit,offset & 3,data); break;
212      case 0x08: ppi3->write(*space,offset & 3,data); break;
207      case 0x08: ppi3->write(space,offset & 3,data); break;
213208      case 0x10: switch(offset & 1) {
214                  case 0 : rs232->data_w(*space,0,data); break;
215                  case 1 : rs232->control_w(*space,0,data); break;
209                  case 0 : rs232->data_w(space,0,data); break;
210                  case 1 : rs232->control_w(space,0,data); break;
216211               }
217212               break;
218213      case 0x18: switch(offset & 3) {
r14963r14964
223218               }
224219               break;
225220      case 0x20: switch(offset & 1) {
226                  case 0 : lan->data_w(*space,0,data); break;
227                  case 1 : lan->control_w(*space,0,data); break;
221                  case 0 : lan->data_w(space,0,data); break;
222                  case 1 : lan->control_w(space,0,data); break;
228223               }
229224               break;
230225      case 0x28: pic8259_w(pic,offset & 1,data);break;
231      case 0x30: ppi2->write(*space,offset & 3,data); break;
232      case 0x38: ppi1->write(*space,offset & 3,data); break;
226      case 0x30: ppi2->write(space,offset & 3,data); break;
227      case 0x38: ppi1->write(space,offset & 3,data); break;
233228   }
234229}
235230
236231static void pk8020_set_bank(running_machine &machine,UINT8 data)
237232{
233   pk8020_state *state = machine.driver_data<pk8020_state>();
238234   address_space *space = machine.device("maincpu")->memory().space(AS_PROGRAM);
239235   UINT8 *mem = machine.region("maincpu")->base();
240236   UINT8 *ram = machine.device<ram_device>(RAM_TAG)->pointer();
r14963r14964
248244                  memory_set_bankptr(machine, "bank1", mem + 0x10000);
249245                  memory_set_bankptr(machine, "bank2", ram + 0x0000);
250246                  // Keyboard
251                  space->install_legacy_read_handler (0x3800, 0x39ff, FUNC(keyboard_r));
247                  space->install_read_handler (0x3800, 0x39ff, read8_delegate(FUNC(pk8020_state::keyboard_r),state));
252248                  space->install_write_bank(0x3800, 0x39ff, "bank3");
253249                  memory_set_bankptr(machine, "bank3", ram + 0x3800);
254250                  // System reg
255                  space->install_legacy_read_handler (0x3a00, 0x3aff, FUNC(sysreg_r));
256                  space->install_legacy_write_handler(0x3a00, 0x3aff, FUNC(sysreg_w));
251                  space->install_read_handler (0x3a00, 0x3aff, read8_delegate(FUNC(pk8020_state::sysreg_r),state));
252                  space->install_write_handler(0x3a00, 0x3aff, write8_delegate(FUNC(pk8020_state::sysreg_w),state));
257253                  // Devices
258                  space->install_legacy_read_handler (0x3b00, 0x3bff, FUNC(devices_r));
259                  space->install_legacy_write_handler(0x3b00, 0x3bff, FUNC(devices_w));
254                  space->install_read_handler (0x3b00, 0x3bff, read8_delegate(FUNC(pk8020_state::devices_r),state));
255                  space->install_write_handler(0x3b00, 0x3bff, write8_delegate(FUNC(pk8020_state::devices_w),state));
260256                  // Text Video Memory
261                  space->install_legacy_read_handler (0x3c00, 0x3fff, FUNC(text_r));
262                  space->install_legacy_write_handler(0x3c00, 0x3fff, FUNC(text_w));
257                  space->install_read_handler (0x3c00, 0x3fff, read8_delegate(FUNC(pk8020_state::text_r),state));
258                  space->install_write_handler(0x3c00, 0x3fff, write8_delegate(FUNC(pk8020_state::text_w),state));
263259                  // RAM
264260                  space->install_read_bank (0x4000, 0xffff, "bank4");
265261                  space->install_write_bank(0x4000, 0xffff, "bank5");
r14963r14964
315311                  memory_set_bankptr(machine, "bank3", ram + 0x2000);
316312                  memory_set_bankptr(machine, "bank4", ram + 0x2000);
317313                  // Keyboard
318                  space->install_legacy_read_handler (0xf800, 0xf9ff, FUNC(keyboard_r));
314                  space->install_read_handler (0xf800, 0xf9ff, read8_delegate(FUNC(pk8020_state::keyboard_r),state));
319315                  space->install_write_bank(0xf800, 0xf9ff, "bank5");
320316                  memory_set_bankptr(machine, "bank5", ram + 0xf800);
321317                  // System reg
322                  space->install_legacy_read_handler (0xfa00, 0xfaff, FUNC(sysreg_r));
323                  space->install_legacy_write_handler(0xfa00, 0xfaff, FUNC(sysreg_w));
318                  space->install_read_handler (0xfa00, 0xfaff, read8_delegate(FUNC(pk8020_state::sysreg_r),state));
319                  space->install_write_handler(0xfa00, 0xfaff, write8_delegate(FUNC(pk8020_state::sysreg_w),state));
324320                  // Devices
325                  space->install_legacy_read_handler (0xfb00, 0xfbff, FUNC(devices_r));
326                  space->install_legacy_write_handler(0xfb00, 0xfbff, FUNC(devices_w));
321                  space->install_read_handler (0xfb00, 0xfbff, read8_delegate(FUNC(pk8020_state::devices_r),state));
322                  space->install_write_handler(0xfb00, 0xfbff, write8_delegate(FUNC(pk8020_state::devices_w),state));
327323                  // Text Video Memory
328                  space->install_legacy_read_handler (0xfc00, 0xffff, FUNC(text_r));
329                  space->install_legacy_write_handler(0xfc00, 0xffff, FUNC(text_w));
324                  space->install_read_handler (0xfc00, 0xffff, read8_delegate(FUNC(pk8020_state::text_r),state));
325                  space->install_write_handler(0xfc00, 0xffff, write8_delegate(FUNC(pk8020_state::text_w),state));
330326               }
331327               break;
332328      case 0x06 :
r14963r14964
342338                  memory_set_bankptr(machine, "bank3", ram + 0x4000);
343339                  memory_set_bankptr(machine, "bank4", ram + 0x4000);
344340                  // Keyboard
345                  space->install_legacy_read_handler (0xf800, 0xf9ff, FUNC(keyboard_r));
341                  space->install_read_handler (0xf800, 0xf9ff, read8_delegate(FUNC(pk8020_state::keyboard_r),state));
346342                  space->install_write_bank(0xf800, 0xf9ff, "bank5");
347343                  memory_set_bankptr(machine, "bank5", ram + 0xf800);
348344                  // System reg
349                  space->install_legacy_read_handler (0xfa00, 0xfaff, FUNC(sysreg_r));
350                  space->install_legacy_write_handler(0xfa00, 0xfaff, FUNC(sysreg_w));
345                  space->install_read_handler (0xfa00, 0xfaff, read8_delegate(FUNC(pk8020_state::sysreg_r),state));
346                  space->install_write_handler(0xfa00, 0xfaff, write8_delegate(FUNC(pk8020_state::sysreg_w),state));
351347                  // Devices
352                  space->install_legacy_read_handler (0xfb00, 0xfbff, FUNC(devices_r));
353                  space->install_legacy_write_handler(0xfb00, 0xfbff, FUNC(devices_w));
348                  space->install_read_handler (0xfb00, 0xfbff, read8_delegate(FUNC(pk8020_state::devices_r),state));
349                  space->install_write_handler(0xfb00, 0xfbff, write8_delegate(FUNC(pk8020_state::devices_w),state));
354350                  // Text Video Memory
355                  space->install_legacy_read_handler (0xfc00, 0xffff, FUNC(text_r));
356                  space->install_legacy_write_handler(0xfc00, 0xffff, FUNC(text_w));
351                  space->install_read_handler (0xfc00, 0xffff, read8_delegate(FUNC(pk8020_state::text_r),state));
352                  space->install_write_handler(0xfc00, 0xffff, write8_delegate(FUNC(pk8020_state::text_w),state));
357353               }
358354               break;
359355      case 0x07 :
r14963r14964
364360                  memory_set_bankptr(machine, "bank1", ram);
365361                  memory_set_bankptr(machine, "bank2", ram);
366362                  // Keyboard
367                  space->install_legacy_read_handler (0xf800, 0xf9ff, FUNC(keyboard_r));
363                  space->install_read_handler (0xf800, 0xf9ff, read8_delegate(FUNC(pk8020_state::keyboard_r),state));
368364                  space->install_write_bank(0xf800, 0xf9ff, "bank3");
369365                  memory_set_bankptr(machine, "bank3", ram + 0xf800);
370366                  // System reg
371                  space->install_legacy_read_handler (0xfa00, 0xfaff, FUNC(sysreg_r));
372                  space->install_legacy_write_handler(0xfa00, 0xfaff, FUNC(sysreg_w));
367                  space->install_read_handler (0xfa00, 0xfaff, read8_delegate(FUNC(pk8020_state::sysreg_r),state));
368                  space->install_write_handler(0xfa00, 0xfaff, write8_delegate(FUNC(pk8020_state::sysreg_w),state));
373369                  // Devices
374                  space->install_legacy_read_handler (0xfb00, 0xfbff, FUNC(devices_r));
375                  space->install_legacy_write_handler(0xfb00, 0xfbff, FUNC(devices_w));
370                  space->install_read_handler (0xfb00, 0xfbff, read8_delegate(FUNC(pk8020_state::devices_r),state));
371                  space->install_write_handler(0xfb00, 0xfbff, write8_delegate(FUNC(pk8020_state::devices_w),state));
376372                  // Text Video Memory
377                  space->install_legacy_read_handler (0xfc00, 0xffff, FUNC(text_r));
378                  space->install_legacy_write_handler(0xfc00, 0xffff, FUNC(text_w));
373                  space->install_read_handler (0xfc00, 0xffff, read8_delegate(FUNC(pk8020_state::text_r),state));
374                  space->install_write_handler(0xfc00, 0xffff, write8_delegate(FUNC(pk8020_state::text_w),state));
379375               }
380376               break;
381377      case 0x08 :
r14963r14964
386382                  memory_set_bankptr(machine, "bank1", mem + 0x10000);
387383                  memory_set_bankptr(machine, "bank2", ram + 0x0000);
388384                  // Keyboard
389                  space->install_legacy_read_handler (0x3800, 0x39ff, FUNC(keyboard_r));
385                  space->install_read_handler (0x3800, 0x39ff, read8_delegate(FUNC(pk8020_state::keyboard_r),state));
390386                  space->install_write_bank(0x3800, 0x39ff, "bank3");
391387                  memory_set_bankptr(machine, "bank3", ram + 0x3800);
392388                  // System reg
393                  space->install_legacy_read_handler (0x3a00, 0x3aff, FUNC(sysreg_r));
394                  space->install_legacy_write_handler(0x3a00, 0x3aff, FUNC(sysreg_w));
389                  space->install_read_handler (0x3a00, 0x3aff, read8_delegate(FUNC(pk8020_state::sysreg_r),state));
390                  space->install_write_handler(0x3a00, 0x3aff, write8_delegate(FUNC(pk8020_state::sysreg_w),state));
395391                  // Devices
396                  space->install_legacy_read_handler (0x3b00, 0x3bff, FUNC(devices_r));
397                  space->install_legacy_write_handler(0x3b00, 0x3bff, FUNC(devices_w));
392                  space->install_read_handler (0x3b00, 0x3bff, read8_delegate(FUNC(pk8020_state::devices_r),state));
393                  space->install_write_handler(0x3b00, 0x3bff, write8_delegate(FUNC(pk8020_state::devices_w),state));
398394                  // Text Video Memory
399                  space->install_legacy_read_handler (0x3c00, 0x3fff, FUNC(text_r));
400                  space->install_legacy_write_handler(0x3c00, 0x3fff, FUNC(text_w));
395                  space->install_read_handler (0x3c00, 0x3fff, read8_delegate(FUNC(pk8020_state::text_r),state));
396                  space->install_write_handler(0x3c00, 0x3fff, write8_delegate(FUNC(pk8020_state::text_w),state));
401397                  // RAM
402398                  space->install_read_bank (0x4000, 0xbfff, "bank4");
403399                  space->install_write_bank(0x4000, 0xbfff, "bank5");
404400                  memory_set_bankptr(machine, "bank4", ram + 0x4000);
405401                  memory_set_bankptr(machine, "bank5", ram + 0x4000);
406402                  // Video RAM
407                  space->install_legacy_read_handler (0xc000, 0xffff, FUNC(gzu_r));
408                  space->install_legacy_write_handler(0xc000, 0xffff, FUNC(gzu_w));
403                  space->install_read_handler (0xc000, 0xffff, read8_delegate(FUNC(pk8020_state::gzu_r),state));
404                  space->install_write_handler(0xc000, 0xffff, write8_delegate(FUNC(pk8020_state::gzu_w),state));
409405
410406               }
411407               break;
r14963r14964
422418                  memory_set_bankptr(machine, "bank3", ram + 0x2000);
423419                  memory_set_bankptr(machine, "bank4", ram + 0x2000);
424420                  // Video RAM
425                  space->install_legacy_read_handler (0xc000, 0xffff, FUNC(gzu_r));
426                  space->install_legacy_write_handler(0xc000, 0xffff, FUNC(gzu_w));
421                  space->install_read_handler (0xc000, 0xffff, read8_delegate(FUNC(pk8020_state::gzu_r),state));
422                  space->install_write_handler(0xc000, 0xffff, write8_delegate(FUNC(pk8020_state::gzu_w),state));
427423               }
428424               break;
429425      case 0x0A :
r14963r14964
439435                  memory_set_bankptr(machine, "bank3", ram + 0x4000);
440436                  memory_set_bankptr(machine, "bank4", ram + 0x4000);
441437                  // Video RAM
442                  space->install_legacy_read_handler (0xc000, 0xffff, FUNC(gzu_r));
443                  space->install_legacy_write_handler(0xc000, 0xffff, FUNC(gzu_w));
438                  space->install_read_handler (0xc000, 0xffff, read8_delegate(FUNC(pk8020_state::gzu_r),state));
439                  space->install_write_handler(0xc000, 0xffff, write8_delegate(FUNC(pk8020_state::gzu_w),state));
444440               }
445441               break;
446442      case 0x0B :
r14963r14964
451447                  memory_set_bankptr(machine, "bank1", ram + 0x0000);
452448                  memory_set_bankptr(machine, "bank2", ram + 0x0000);
453449                  // Video RAM
454                  space->install_legacy_read_handler (0xc000, 0xffff, FUNC(gzu_r));
455                  space->install_legacy_write_handler(0xc000, 0xffff, FUNC(gzu_w));
450                  space->install_read_handler (0xc000, 0xffff, read8_delegate(FUNC(pk8020_state::gzu_r),state));
451                  space->install_write_handler(0xc000, 0xffff, write8_delegate(FUNC(pk8020_state::gzu_w),state));
456452               }
457453               break;
458454      case 0x0C :
r14963r14964
469465                  memory_set_bankptr(machine, "bank3", ram + 0x2000);
470466                  memory_set_bankptr(machine, "bank4", ram + 0x2000);
471467                  // Video RAM
472                  space->install_legacy_read_handler (0x4000, 0x7fff, FUNC(gzu_r));
473                  space->install_legacy_write_handler(0x4000, 0x7fff, FUNC(gzu_w));
468                  space->install_read_handler (0x4000, 0x7fff, read8_delegate(FUNC(pk8020_state::gzu_r),state));
469                  space->install_write_handler(0x4000, 0x7fff, write8_delegate(FUNC(pk8020_state::gzu_w),state));
474470                  // RAM
475471                  space->install_read_bank (0x8000, 0xfdff, "bank5");
476472                  space->install_write_bank(0x8000, 0xfdff, "bank6");
477473                  memory_set_bankptr(machine, "bank5", ram + 0x8000);
478474                  memory_set_bankptr(machine, "bank6", ram + 0x8000);
479475                  // Devices
480                  space->install_legacy_read_handler (0xfe00, 0xfeff, FUNC(devices_r));
481                  space->install_legacy_write_handler(0xfe00, 0xfeff, FUNC(devices_w));
476                  space->install_read_handler (0xfe00, 0xfeff, read8_delegate(FUNC(pk8020_state::devices_r),state));
477                  space->install_write_handler(0xfe00, 0xfeff, write8_delegate(FUNC(pk8020_state::devices_w),state));
482478                  // System reg
483                  space->install_legacy_read_handler (0xff00, 0xffff, FUNC(sysreg_r));
484                  space->install_legacy_write_handler(0xff00, 0xffff, FUNC(sysreg_w));
479                  space->install_read_handler (0xff00, 0xffff, read8_delegate(FUNC(pk8020_state::sysreg_r),state));
480                  space->install_write_handler(0xff00, 0xffff, write8_delegate(FUNC(pk8020_state::sysreg_w),state));
485481               }
486482               break;
487483      case 0x0E :
r14963r14964
492488                  memory_set_bankptr(machine, "bank1", mem + 0x10000);
493489                  memory_set_bankptr(machine, "bank2", ram + 0x0000);
494490                  // Video RAM
495                  space->install_legacy_read_handler (0x4000, 0x7fff, FUNC(gzu_r));
496                  space->install_legacy_write_handler(0x4000, 0x7fff, FUNC(gzu_w));
491                  space->install_read_handler (0x4000, 0x7fff, read8_delegate(FUNC(pk8020_state::gzu_r),state));
492                  space->install_write_handler(0x4000, 0x7fff, write8_delegate(FUNC(pk8020_state::gzu_w),state));
497493                  // RAM
498494                  space->install_read_bank (0x8000, 0xfdff, "bank5");
499495                  space->install_write_bank(0x8000, 0xfdff, "bank6");
500496                  memory_set_bankptr(machine, "bank5", ram + 0x8000);
501497                  memory_set_bankptr(machine, "bank6", ram + 0x8000);
502498                  // Devices
503                  space->install_legacy_read_handler (0xfe00, 0xfeff, FUNC(devices_r));
504                  space->install_legacy_write_handler(0xfe00, 0xfeff, FUNC(devices_w));
499                  space->install_read_handler (0xfe00, 0xfeff, read8_delegate(FUNC(pk8020_state::devices_r),state));
500                  space->install_write_handler(0xfe00, 0xfeff, write8_delegate(FUNC(pk8020_state::devices_w),state));
505501                  // System reg
506                  space->install_legacy_read_handler (0xff00, 0xffff, FUNC(sysreg_r));
507                  space->install_legacy_write_handler(0xff00, 0xffff, FUNC(sysreg_w));
502                  space->install_read_handler (0xff00, 0xffff, read8_delegate(FUNC(pk8020_state::sysreg_r),state));
503                  space->install_write_handler(0xff00, 0xffff, write8_delegate(FUNC(pk8020_state::sysreg_w),state));
508504               }
509505               break;
510506      case 0x0F :
r14963r14964
515511                  memory_set_bankptr(machine, "bank1", ram + 0x0000);
516512                  memory_set_bankptr(machine, "bank2", ram + 0x0000);
517513                  // Video RAM
518                  space->install_legacy_read_handler (0x4000, 0x7fff, FUNC(gzu_r));
519                  space->install_legacy_write_handler(0x4000, 0x7fff, FUNC(gzu_w));
514                  space->install_read_handler (0x4000, 0x7fff, read8_delegate(FUNC(pk8020_state::gzu_r),state));
515                  space->install_write_handler(0x4000, 0x7fff, write8_delegate(FUNC(pk8020_state::gzu_w),state));
520516                  // RAM
521517                  space->install_read_bank (0x8000, 0xfdff, "bank3");
522518                  space->install_write_bank(0x8000, 0xfdff, "bank4");
523519                  memory_set_bankptr(machine, "bank3", ram + 0x8000);
524520                  memory_set_bankptr(machine, "bank4", ram + 0x8000);
525521                  // Devices
526                  space->install_legacy_read_handler (0xfe00, 0xfeff, FUNC(devices_r));
527                  space->install_legacy_write_handler(0xfe00, 0xfeff, FUNC(devices_w));
522                  space->install_read_handler (0xfe00, 0xfeff, read8_delegate(FUNC(pk8020_state::devices_r),state));
523                  space->install_write_handler(0xfe00, 0xfeff, write8_delegate(FUNC(pk8020_state::devices_w),state));
528524                  // System reg
529                  space->install_legacy_read_handler (0xff00, 0xffff, FUNC(sysreg_r));
530                  space->install_legacy_write_handler(0xff00, 0xffff, FUNC(sysreg_w));
525                  space->install_read_handler (0xff00, 0xffff, read8_delegate(FUNC(pk8020_state::sysreg_r),state));
526                  space->install_write_handler(0xff00, 0xffff, write8_delegate(FUNC(pk8020_state::sysreg_w),state));
531527               }
532528               break;
533529      case 0x10 :
r14963r14964
543539                  memory_set_bankptr(machine, "bank3", ram + 0x6000);
544540                  memory_set_bankptr(machine, "bank4", ram + 0x6000);
545541                  // Keyboard
546                  space->install_legacy_read_handler (0xf800, 0xf9ff, FUNC(keyboard_r));
542                  space->install_read_handler (0xf800, 0xf9ff, read8_delegate(FUNC(pk8020_state::keyboard_r),state));
547543                  space->install_write_bank(0xf800, 0xf9ff, "bank5");
548544                  memory_set_bankptr(machine, "bank5", ram + 0xf800);
549545                  // System reg
550                  space->install_legacy_read_handler (0xfa00, 0xfaff, FUNC(sysreg_r));
551                  space->install_legacy_write_handler(0xfa00, 0xfaff, FUNC(sysreg_w));
546                  space->install_read_handler (0xfa00, 0xfaff, read8_delegate(FUNC(pk8020_state::sysreg_r),state));
547                  space->install_write_handler(0xfa00, 0xfaff, write8_delegate(FUNC(pk8020_state::sysreg_w),state));
552548                  // Devices
553                  space->install_legacy_read_handler (0xfb00, 0xfbff, FUNC(devices_r));
554                  space->install_legacy_write_handler(0xfb00, 0xfbff, FUNC(devices_w));
549                  space->install_read_handler (0xfb00, 0xfbff, read8_delegate(FUNC(pk8020_state::devices_r),state));
550                  space->install_write_handler(0xfb00, 0xfbff, write8_delegate(FUNC(pk8020_state::devices_w),state));
555551                  // Text Video Memory
556                  space->install_legacy_read_handler (0xfc00, 0xffff, FUNC(text_r));
557                  space->install_legacy_write_handler(0xfc00, 0xffff, FUNC(text_w));
552                  space->install_read_handler (0xfc00, 0xffff, read8_delegate(FUNC(pk8020_state::text_r),state));
553                  space->install_write_handler(0xfc00, 0xffff, write8_delegate(FUNC(pk8020_state::text_w),state));
558554               }
559555               break;
560556      case 0x11 :
r14963r14964
570566                  memory_set_bankptr(machine, "bank3", ram + 0x2000);
571567                  memory_set_bankptr(machine, "bank4", ram + 0x2000);
572568                  // Keyboard
573                  space->install_legacy_read_handler (0xf800, 0xf9ff, FUNC(keyboard_r));
569                  space->install_read_handler (0xf800, 0xf9ff, read8_delegate(FUNC(pk8020_state::keyboard_r),state));
574570                  space->install_write_bank(0xf800, 0xf9ff, "bank5");
575571                  memory_set_bankptr(machine, "bank5", ram + 0xf800);
576572                  // System reg
577                  space->install_legacy_read_handler (0xfa00, 0xfaff, FUNC(sysreg_r));
578                  space->install_legacy_write_handler(0xfa00, 0xfaff, FUNC(sysreg_w));
573                  space->install_read_handler (0xfa00, 0xfaff, read8_delegate(FUNC(pk8020_state::sysreg_r),state));
574                  space->install_write_handler(0xfa00, 0xfaff, write8_delegate(FUNC(pk8020_state::sysreg_w),state));
579575                  // Devices
580                  space->install_legacy_read_handler (0xfb00, 0xfbff, FUNC(devices_r));
581                  space->install_legacy_write_handler(0xfb00, 0xfbff, FUNC(devices_w));
576                  space->install_read_handler (0xfb00, 0xfbff, read8_delegate(FUNC(pk8020_state::devices_r),state));
577                  space->install_write_handler(0xfb00, 0xfbff, write8_delegate(FUNC(pk8020_state::devices_w),state));
582578                  // Text Video Memory
583                  space->install_legacy_read_handler (0xfc00, 0xffff, FUNC(text_r));
584                  space->install_legacy_write_handler(0xfc00, 0xffff, FUNC(text_w));
579                  space->install_read_handler (0xfc00, 0xffff, read8_delegate(FUNC(pk8020_state::text_r),state));
580                  space->install_write_handler(0xfc00, 0xffff, write8_delegate(FUNC(pk8020_state::text_w),state));
585581               }
586582               break;
587583      case 0x12 :
r14963r14964
597593                  memory_set_bankptr(machine, "bank3", ram + 0x4000);
598594                  memory_set_bankptr(machine, "bank4", ram + 0x4000);
599595                  // Keyboard
600                  space->install_legacy_read_handler (0xf800, 0xf9ff, FUNC(keyboard_r));
596                  space->install_read_handler (0xf800, 0xf9ff, read8_delegate(FUNC(pk8020_state::keyboard_r),state));
601597                  space->install_write_bank(0xf800, 0xf9ff, "bank5");
602598                  memory_set_bankptr(machine, "bank5", ram + 0xf800);
603599                  // System reg
604                  space->install_legacy_read_handler (0xfa00, 0xfaff, FUNC(sysreg_r));
605                  space->install_legacy_write_handler(0xfa00, 0xfaff, FUNC(sysreg_w));
600                  space->install_read_handler (0xfa00, 0xfaff, read8_delegate(FUNC(pk8020_state::sysreg_r),state));
601                  space->install_write_handler(0xfa00, 0xfaff, write8_delegate(FUNC(pk8020_state::sysreg_w),state));
606602                  // Devices
607                  space->install_legacy_read_handler (0xfb00, 0xfbff, FUNC(devices_r));
608                  space->install_legacy_write_handler(0xfb00, 0xfbff, FUNC(devices_w));
603                  space->install_read_handler (0xfb00, 0xfbff, read8_delegate(FUNC(pk8020_state::devices_r),state));
604                  space->install_write_handler(0xfb00, 0xfbff, write8_delegate(FUNC(pk8020_state::devices_w),state));
609605                  // Text Video Memory
610                  space->install_legacy_read_handler (0xfc00, 0xffff, FUNC(text_r));
611                  space->install_legacy_write_handler(0xfc00, 0xffff, FUNC(text_w));
606                  space->install_read_handler (0xfc00, 0xffff, read8_delegate(FUNC(pk8020_state::text_r),state));
607                  space->install_write_handler(0xfc00, 0xffff, write8_delegate(FUNC(pk8020_state::text_w),state));
612608               }
613609               break;
614610      case 0x13 :
r14963r14964
619615                  memory_set_bankptr(machine, "bank1", ram + 0x0000);
620616                  memory_set_bankptr(machine, "bank2", ram + 0x0000);
621617                  // Keyboard
622                  space->install_legacy_read_handler (0xf800, 0xf9ff, FUNC(keyboard_r));
618                  space->install_read_handler (0xf800, 0xf9ff, read8_delegate(FUNC(pk8020_state::keyboard_r),state));
623619                  space->install_write_bank(0xf800, 0xf9ff, "bank3");
624620                  memory_set_bankptr(machine, "bank3", ram + 0xf800);
625621                  // System reg
626                  space->install_legacy_read_handler (0xfa00, 0xfaff, FUNC(sysreg_r));
627                  space->install_legacy_write_handler(0xfa00, 0xfaff, FUNC(sysreg_w));
622                  space->install_read_handler (0xfa00, 0xfaff, read8_delegate(FUNC(pk8020_state::sysreg_r),state));
623                  space->install_write_handler(0xfa00, 0xfaff, write8_delegate(FUNC(pk8020_state::sysreg_w),state));
628624                  // Devices
629                  space->install_legacy_read_handler (0xfb00, 0xfbff, FUNC(devices_r));
630                  space->install_legacy_write_handler(0xfb00, 0xfbff, FUNC(devices_w));
625                  space->install_read_handler (0xfb00, 0xfbff, read8_delegate(FUNC(pk8020_state::devices_r),state));
626                  space->install_write_handler(0xfb00, 0xfbff, write8_delegate(FUNC(pk8020_state::devices_w),state));
631627                  // Text Video Memory
632                  space->install_legacy_read_handler (0xfc00, 0xffff, FUNC(text_r));
633                  space->install_legacy_write_handler(0xfc00, 0xffff, FUNC(text_w));
628                  space->install_read_handler (0xfc00, 0xffff, read8_delegate(FUNC(pk8020_state::text_r),state));
629                  space->install_write_handler(0xfc00, 0xffff, write8_delegate(FUNC(pk8020_state::text_w),state));
634630               }
635631               break;
636632      case 0x14 :
r14963r14964
646642                  memory_set_bankptr(machine, "bank3", ram + 0x6000);
647643                  memory_set_bankptr(machine, "bank4", ram + 0x6000);
648644                  // Devices
649                  space->install_legacy_read_handler (0xfe00, 0xfeff, FUNC(devices_r));
650                  space->install_legacy_write_handler(0xfe00, 0xfeff, FUNC(devices_w));
645                  space->install_read_handler (0xfe00, 0xfeff, read8_delegate(FUNC(pk8020_state::devices_r),state));
646                  space->install_write_handler(0xfe00, 0xfeff, write8_delegate(FUNC(pk8020_state::devices_w),state));
651647                  // System reg
652                  space->install_legacy_read_handler (0xff00, 0xffff, FUNC(sysreg_r));
653                  space->install_legacy_write_handler(0xff00, 0xffff, FUNC(sysreg_w));
648                  space->install_read_handler (0xff00, 0xffff, read8_delegate(FUNC(pk8020_state::sysreg_r),state));
649                  space->install_write_handler(0xff00, 0xffff, write8_delegate(FUNC(pk8020_state::sysreg_w),state));
654650               }
655651               break;
656652      case 0x15 :
r14963r14964
666662                  memory_set_bankptr(machine, "bank3", ram + 0x2000);
667663                  memory_set_bankptr(machine, "bank4", ram + 0x2000);
668664                  // Devices
669                  space->install_legacy_read_handler (0xfe00, 0xfeff, FUNC(devices_r));
670                  space->install_legacy_write_handler(0xfe00, 0xfeff, FUNC(devices_w));
665                  space->install_read_handler (0xfe00, 0xfeff, read8_delegate(FUNC(pk8020_state::devices_r),state));
666                  space->install_write_handler(0xfe00, 0xfeff, write8_delegate(FUNC(pk8020_state::devices_w),state));
671667                  // System reg
672                  space->install_legacy_read_handler (0xff00, 0xffff, FUNC(sysreg_r));
673                  space->install_legacy_write_handler(0xff00, 0xffff, FUNC(sysreg_w));
668                  space->install_read_handler (0xff00, 0xffff, read8_delegate(FUNC(pk8020_state::sysreg_r),state));
669                  space->install_write_handler(0xff00, 0xffff, write8_delegate(FUNC(pk8020_state::sysreg_w),state));
674670               }
675671               break;
676672      case 0x16 :
r14963r14964
686682                  memory_set_bankptr(machine, "bank3", ram + 0x4000);
687683                  memory_set_bankptr(machine, "bank4", ram + 0x4000);
688684                  // Devices
689                  space->install_legacy_read_handler (0xfe00, 0xfeff, FUNC(devices_r));
690                  space->install_legacy_write_handler(0xfe00, 0xfeff, FUNC(devices_w));
685                  space->install_read_handler (0xfe00, 0xfeff, read8_delegate(FUNC(pk8020_state::devices_r),state));
686                  space->install_write_handler(0xfe00, 0xfeff, write8_delegate(FUNC(pk8020_state::devices_w),state));
691687                  // System reg
692                  space->install_legacy_read_handler (0xff00, 0xffff, FUNC(sysreg_r));
693                  space->install_legacy_write_handler(0xff00, 0xffff, FUNC(sysreg_w));
688                  space->install_read_handler (0xff00, 0xffff, read8_delegate(FUNC(pk8020_state::sysreg_r),state));
689                  space->install_write_handler(0xff00, 0xffff, write8_delegate(FUNC(pk8020_state::sysreg_w),state));
694690               }
695691               break;
696692      case 0x17 :
r14963r14964
701697                  memory_set_bankptr(machine, "bank1", ram);
702698                  memory_set_bankptr(machine, "bank2", ram);
703699                  // Devices
704                  space->install_legacy_read_handler (0xfe00, 0xfeff, FUNC(devices_r));
705                  space->install_legacy_write_handler(0xfe00, 0xfeff, FUNC(devices_w));
700                  space->install_read_handler (0xfe00, 0xfeff, read8_delegate(FUNC(pk8020_state::devices_r),state));
701                  space->install_write_handler(0xfe00, 0xfeff, write8_delegate(FUNC(pk8020_state::devices_w),state));
706702                  // System reg
707                  space->install_legacy_read_handler (0xff00, 0xffff, FUNC(sysreg_r));
708                  space->install_legacy_write_handler(0xff00, 0xffff, FUNC(sysreg_w));
703                  space->install_read_handler (0xff00, 0xffff, read8_delegate(FUNC(pk8020_state::sysreg_r),state));
704                  space->install_write_handler(0xff00, 0xffff, write8_delegate(FUNC(pk8020_state::sysreg_w),state));
709705               }
710706               break;
711707      case 0x18 :
r14963r14964
721717                  memory_set_bankptr(machine, "bank3", ram + 0x6000);
722718                  memory_set_bankptr(machine, "bank4", ram + 0x6000);
723719                  // System reg
724                  space->install_legacy_read_handler (0xbf00, 0xbfff, FUNC(sysreg_r));
725                  space->install_legacy_write_handler(0xbf00, 0xbfff, FUNC(sysreg_w));
720                  space->install_read_handler (0xbf00, 0xbfff, read8_delegate(FUNC(pk8020_state::sysreg_r),state));
721                  space->install_write_handler(0xbf00, 0xbfff, write8_delegate(FUNC(pk8020_state::sysreg_w),state));
726722                  // Video RAM
727                  space->install_legacy_read_handler (0xc000, 0xffff, FUNC(gzu_r));
728                  space->install_legacy_write_handler(0xc000, 0xffff, FUNC(gzu_w));
723                  space->install_read_handler (0xc000, 0xffff, read8_delegate(FUNC(pk8020_state::gzu_r),state));
724                  space->install_write_handler(0xc000, 0xffff, write8_delegate(FUNC(pk8020_state::gzu_w),state));
729725               }
730726               break;
731727      case 0x19 :
r14963r14964
741737                  memory_set_bankptr(machine, "bank3", ram + 0x2000);
742738                  memory_set_bankptr(machine, "bank4", ram + 0x2000);
743739                  // System reg
744                  space->install_legacy_read_handler (0xbf00, 0xbfff, FUNC(sysreg_r));
745                  space->install_legacy_write_handler(0xbf00, 0xbfff, FUNC(sysreg_w));
740                  space->install_read_handler (0xbf00, 0xbfff, read8_delegate(FUNC(pk8020_state::sysreg_r),state));
741                  space->install_write_handler(0xbf00, 0xbfff, write8_delegate(FUNC(pk8020_state::sysreg_w),state));
746742                  // Video RAM
747                  space->install_legacy_read_handler (0xc000, 0xffff, FUNC(gzu_r));
748                  space->install_legacy_write_handler(0xc000, 0xffff, FUNC(gzu_w));
743                  space->install_read_handler (0xc000, 0xffff, read8_delegate(FUNC(pk8020_state::gzu_r),state));
744                  space->install_write_handler(0xc000, 0xffff, write8_delegate(FUNC(pk8020_state::gzu_w),state));
749745               }
750746               break;
751747      case 0x1A :
r14963r14964
761757                  memory_set_bankptr(machine, "bank3", ram + 0x4000);
762758                  memory_set_bankptr(machine, "bank4", ram + 0x4000);
763759                  // System reg
764                  space->install_legacy_read_handler (0xbf00, 0xbfff, FUNC(sysreg_r));
765                  space->install_legacy_write_handler(0xbf00, 0xbfff, FUNC(sysreg_w));
760                  space->install_read_handler (0xbf00, 0xbfff, read8_delegate(FUNC(pk8020_state::sysreg_r),state));
761                  space->install_write_handler(0xbf00, 0xbfff, write8_delegate(FUNC(pk8020_state::sysreg_w),state));
766762                  // Video RAM
767                  space->install_legacy_read_handler (0xc000, 0xffff, FUNC(gzu_r));
768                  space->install_legacy_write_handler(0xc000, 0xffff, FUNC(gzu_w));
763                  space->install_read_handler (0xc000, 0xffff, read8_delegate(FUNC(pk8020_state::gzu_r),state));
764                  space->install_write_handler(0xc000, 0xffff, write8_delegate(FUNC(pk8020_state::gzu_w),state));
769765               }
770766               break;
771767      case 0x1B :
r14963r14964
776772                  memory_set_bankptr(machine, "bank1", ram);
777773                  memory_set_bankptr(machine, "bank2", ram);
778774                  // System reg
779                  space->install_legacy_read_handler (0xbf00, 0xbfff, FUNC(sysreg_r));
780                  space->install_legacy_write_handler(0xbf00, 0xbfff, FUNC(sysreg_w));
775                  space->install_read_handler (0xbf00, 0xbfff, read8_delegate(FUNC(pk8020_state::sysreg_r),state));
776                  space->install_write_handler(0xbf00, 0xbfff, write8_delegate(FUNC(pk8020_state::sysreg_w),state));
781777                  // Video RAM
782                  space->install_legacy_read_handler (0xc000, 0xffff, FUNC(gzu_r));
783                  space->install_legacy_write_handler(0xc000, 0xffff, FUNC(gzu_w));
778                  space->install_read_handler (0xc000, 0xffff, read8_delegate(FUNC(pk8020_state::gzu_r),state));
779                  space->install_write_handler(0xc000, 0xffff, write8_delegate(FUNC(pk8020_state::gzu_w),state));
784780               }
785781               break;
786782      case 0x1C :
r14963r14964
796792                  memory_set_bankptr(machine, "bank3", ram + 0x6000);
797793                  memory_set_bankptr(machine, "bank4", ram + 0x6000);
798794                  // Video RAM
799                  space->install_legacy_read_handler (0xc000, 0xffff, FUNC(gzu_r));
800                  space->install_legacy_write_handler(0xc000, 0xffff, FUNC(gzu_w));
795                  space->install_read_handler (0xc000, 0xffff, read8_delegate(FUNC(pk8020_state::gzu_r),state));
796                  space->install_write_handler(0xc000, 0xffff, write8_delegate(FUNC(pk8020_state::gzu_w),state));
801797               }
802798               break;
803799      case 0x1D :
r14963r14964
813809                  memory_set_bankptr(machine, "bank3", ram + 0x2000);
814810                  memory_set_bankptr(machine, "bank4", ram + 0x2000);
815811                  // Video RAM
816                  space->install_legacy_read_handler (0xc000, 0xffff, FUNC(gzu_r));
817                  space->install_legacy_write_handler(0xc000, 0xffff, FUNC(gzu_w));
812                  space->install_read_handler (0xc000, 0xffff, read8_delegate(FUNC(pk8020_state::gzu_r),state));
813                  space->install_write_handler(0xc000, 0xffff, write8_delegate(FUNC(pk8020_state::gzu_w),state));
818814               }
819815               break;
820816      case 0x1E :
r14963r14964
830826                  memory_set_bankptr(machine, "bank3", ram + 0x4000);
831827                  memory_set_bankptr(machine, "bank4", ram + 0x4000);
832828                  // Video RAM
833                  space->install_legacy_read_handler (0xc000, 0xffff, FUNC(gzu_r));
834                  space->install_legacy_write_handler(0xc000, 0xffff, FUNC(gzu_w));
829                  space->install_read_handler (0xc000, 0xffff, read8_delegate(FUNC(pk8020_state::gzu_r),state));
830                  space->install_write_handler(0xc000, 0xffff, write8_delegate(FUNC(pk8020_state::gzu_w),state));
835831               }
836832               break;
837833      case 0x1F :
r14963r14964
842838                  memory_set_bankptr(machine, "bank1", ram);
843839                  memory_set_bankptr(machine, "bank2", ram);
844840                  // Video RAM
845                  space->install_legacy_read_handler (0xc000, 0xffff, FUNC(gzu_r));
846                  space->install_legacy_write_handler(0xc000, 0xffff, FUNC(gzu_w));
841                  space->install_read_handler (0xc000, 0xffff, read8_delegate(FUNC(pk8020_state::gzu_r),state));
842                  space->install_write_handler(0xc000, 0xffff, write8_delegate(FUNC(pk8020_state::gzu_w),state));
847843               }
848844               break;
849845
src/mess/includes/gba.h
r14963r14964
223223   int m_flash_battery_load;
224224   
225225   DIRECT_UPDATE_MEMBER(gba_direct);
226   DECLARE_READ32_MEMBER(gba_io_r);
227   DECLARE_WRITE32_MEMBER(gba_io_w);
228   DECLARE_WRITE32_MEMBER(gba_pram_w);
229   DECLARE_WRITE32_MEMBER(gba_vram_w);
230   DECLARE_WRITE32_MEMBER(gba_oam_w);
231   DECLARE_READ32_MEMBER(gba_bios_r);
232   DECLARE_READ32_MEMBER(gba_10000000_r);
233   DECLARE_READ32_MEMBER(sram_r);
234   DECLARE_WRITE32_MEMBER(sram_w);
235   DECLARE_READ32_MEMBER(flash_r);
236   DECLARE_WRITE32_MEMBER(flash_w);
237   DECLARE_READ32_MEMBER(eeprom_r);
238   DECLARE_WRITE32_MEMBER(eeprom_w);
226239};
227240
228241/*----------- defined in video/gba.c -----------*/
src/mess/includes/fm7.h
r14963r14964
142142   fm7_video_t m_video;
143143   fm7_alu_t m_alu;
144144   int m_sb_prev;
145   DECLARE_READ8_MEMBER(fm7_subintf_r);
146   DECLARE_WRITE8_MEMBER(fm7_subintf_w);
147   DECLARE_READ8_MEMBER(fm7_sub_busyflag_r);
148   DECLARE_WRITE8_MEMBER(fm7_sub_busyflag_w);
149   DECLARE_READ8_MEMBER(fm7_cancel_ack);
150   DECLARE_READ8_MEMBER(fm7_attn_irq_r);
151   DECLARE_READ8_MEMBER(fm7_vram_access_r);
152   DECLARE_WRITE8_MEMBER(fm7_vram_access_w);
153   DECLARE_READ8_MEMBER(fm7_vram_r);
154   DECLARE_WRITE8_MEMBER(fm7_vram_w);
155   DECLARE_WRITE8_MEMBER(fm7_vram_banked_w);
156   DECLARE_READ8_MEMBER(fm7_vram0_r);
157   DECLARE_READ8_MEMBER(fm7_vram1_r);
158   DECLARE_READ8_MEMBER(fm7_vram2_r);
159   DECLARE_READ8_MEMBER(fm7_vram3_r);
160   DECLARE_READ8_MEMBER(fm7_vram4_r);
161   DECLARE_READ8_MEMBER(fm7_vram5_r);
162   DECLARE_READ8_MEMBER(fm7_vram6_r);
163   DECLARE_READ8_MEMBER(fm7_vram7_r);
164   DECLARE_READ8_MEMBER(fm7_vram8_r);
165   DECLARE_READ8_MEMBER(fm7_vram9_r);
166   DECLARE_READ8_MEMBER(fm7_vramA_r);
167   DECLARE_READ8_MEMBER(fm7_vramB_r);
168   DECLARE_WRITE8_MEMBER(fm7_vram0_w);
169   DECLARE_WRITE8_MEMBER(fm7_vram1_w);
170   DECLARE_WRITE8_MEMBER(fm7_vram2_w);
171   DECLARE_WRITE8_MEMBER(fm7_vram3_w);
172   DECLARE_WRITE8_MEMBER(fm7_vram4_w);
173   DECLARE_WRITE8_MEMBER(fm7_vram5_w);
174   DECLARE_WRITE8_MEMBER(fm7_vram6_w);
175   DECLARE_WRITE8_MEMBER(fm7_vram7_w);
176   DECLARE_WRITE8_MEMBER(fm7_vram8_w);
177   DECLARE_WRITE8_MEMBER(fm7_vram9_w);
178   DECLARE_WRITE8_MEMBER(fm7_vramA_w);
179   DECLARE_WRITE8_MEMBER(fm7_vramB_w);
180   DECLARE_READ8_MEMBER(fm7_crt_r);
181   DECLARE_WRITE8_MEMBER(fm7_crt_w);
182   DECLARE_WRITE8_MEMBER(fm7_vram_offset_w);
183   DECLARE_WRITE8_MEMBER(fm7_multipage_w);
184   DECLARE_READ8_MEMBER(fm7_palette_r);
185   DECLARE_WRITE8_MEMBER(fm7_palette_w);
186   DECLARE_WRITE8_MEMBER(fm77av_analog_palette_w);
187   DECLARE_READ8_MEMBER(fm77av_video_flags_r);
188   DECLARE_WRITE8_MEMBER(fm77av_video_flags_w);
189   DECLARE_READ8_MEMBER(fm77av_sub_modestatus_r);
190   DECLARE_WRITE8_MEMBER(fm77av_sub_modestatus_w);
191   DECLARE_WRITE8_MEMBER(fm77av_sub_bank_w);
192   DECLARE_READ8_MEMBER(fm77av_alu_r);
193   DECLARE_WRITE8_MEMBER(fm77av_alu_w);
194   DECLARE_READ8_MEMBER(fm7_sub_ram_ports_banked_r);
195   DECLARE_WRITE8_MEMBER(fm7_sub_ram_ports_banked_w);
196   DECLARE_READ8_MEMBER(fm7_console_ram_banked_r);
197   DECLARE_WRITE8_MEMBER(fm7_console_ram_banked_w);
198   DECLARE_WRITE8_MEMBER(fm7_irq_mask_w);
199   DECLARE_READ8_MEMBER(fm7_irq_cause_r);
200   DECLARE_WRITE8_MEMBER(fm7_beeper_w);
201   DECLARE_READ8_MEMBER(fm7_sub_beeper_r);
202   DECLARE_READ8_MEMBER(vector_r);
203   DECLARE_WRITE8_MEMBER(vector_w);
204   DECLARE_READ8_MEMBER(fm7_fd04_r);
205   DECLARE_READ8_MEMBER(fm7_rom_en_r);
206   DECLARE_WRITE8_MEMBER(fm7_rom_en_w);
207   DECLARE_WRITE8_MEMBER(fm7_init_en_w);
208   DECLARE_READ8_MEMBER(fm7_fdc_r);
209   DECLARE_WRITE8_MEMBER(fm7_fdc_w);
210   DECLARE_READ8_MEMBER(fm7_keyboard_r);
211   DECLARE_READ8_MEMBER(fm7_sub_keyboard_r);
212   DECLARE_READ8_MEMBER(fm77av_key_encoder_r);
213   DECLARE_WRITE8_MEMBER(fm77av_key_encoder_w);
214   DECLARE_READ8_MEMBER(fm7_cassette_printer_r);
215   DECLARE_WRITE8_MEMBER(fm7_cassette_printer_w);
216   DECLARE_READ8_MEMBER(fm77av_boot_mode_r);
217   DECLARE_READ8_MEMBER(fm7_psg_select_r);
218   DECLARE_WRITE8_MEMBER(fm7_psg_select_w);
219   DECLARE_WRITE8_MEMBER(fm77av_ym_select_w);
220   DECLARE_READ8_MEMBER(fm7_psg_data_r);
221   DECLARE_WRITE8_MEMBER(fm7_psg_data_w);
222   DECLARE_WRITE8_MEMBER(fm77av_bootram_w);
223   DECLARE_READ8_MEMBER(fm7_main_shared_r);
224   DECLARE_WRITE8_MEMBER(fm7_main_shared_w);
225   DECLARE_READ8_MEMBER(fm7_fmirq_r);
226   DECLARE_READ8_MEMBER(fm7_unknown_r);
227   DECLARE_READ8_MEMBER(fm7_mmr_r);
228   DECLARE_WRITE8_MEMBER(fm7_mmr_w);
229   DECLARE_READ8_MEMBER(fm7_kanji_r);
230   DECLARE_WRITE8_MEMBER(fm7_kanji_w);
231   void fm77av_encoder_setup_command();
232   void fm77av_encoder_handle_command();
145233};
146234
147235
148236/*----------- defined in drivers/fm7.c -----------*/
149237
150READ8_HANDLER( fm7_sub_keyboard_r );
151READ8_HANDLER( fm77av_key_encoder_r );
152WRITE8_HANDLER( fm77av_key_encoder_w );
153READ8_HANDLER( fm7_sub_beeper_r );
154238
155239
156240/*----------- defined in video/fm7.c -----------*/
157241
158242TIMER_CALLBACK( fm77av_vsync );
159243
160READ8_HANDLER( fm7_subintf_r );
161WRITE8_HANDLER( fm7_subintf_w );
162READ8_HANDLER( fm7_sub_busyflag_r );
163WRITE8_HANDLER( fm7_sub_busyflag_w );
164READ8_HANDLER( fm77av_sub_modestatus_r );
165WRITE8_HANDLER( fm77av_sub_modestatus_w );
166WRITE8_HANDLER( fm77av_sub_bank_w );
167244
168READ8_HANDLER( fm7_cancel_ack );
169READ8_HANDLER( fm7_attn_irq_r );
170245
171READ8_HANDLER( fm7_vram_access_r );
172WRITE8_HANDLER( fm7_vram_access_w );
173READ8_HANDLER( fm7_vram_r );
174WRITE8_HANDLER( fm7_vram_w );
175READ8_HANDLER( fm7_crt_r );
176WRITE8_HANDLER( fm7_crt_w );
177WRITE8_HANDLER( fm7_vram_offset_w );
178READ8_HANDLER( fm77av_video_flags_r );
179WRITE8_HANDLER( fm77av_video_flags_w );
180READ8_HANDLER( fm77av_alu_r );
181WRITE8_HANDLER( fm77av_alu_w );
182246
183WRITE8_HANDLER( fm77av_analog_palette_w );
184WRITE8_HANDLER( fm7_multipage_w );
185READ8_HANDLER( fm7_palette_r );
186WRITE8_HANDLER( fm7_palette_w );
187247
188READ8_HANDLER( fm7_vram0_r );
189READ8_HANDLER( fm7_vram1_r );
190READ8_HANDLER( fm7_vram2_r );
191READ8_HANDLER( fm7_vram3_r );
192READ8_HANDLER( fm7_vram4_r );
193READ8_HANDLER( fm7_vram5_r );
194READ8_HANDLER( fm7_vram6_r );
195READ8_HANDLER( fm7_vram7_r );
196READ8_HANDLER( fm7_vram8_r );
197READ8_HANDLER( fm7_vram9_r );
198READ8_HANDLER( fm7_vramA_r );
199READ8_HANDLER( fm7_vramB_r );
200WRITE8_HANDLER( fm7_vram0_w );
201WRITE8_HANDLER( fm7_vram1_w );
202WRITE8_HANDLER( fm7_vram2_w );
203WRITE8_HANDLER( fm7_vram3_w );
204WRITE8_HANDLER( fm7_vram4_w );
205WRITE8_HANDLER( fm7_vram5_w );
206WRITE8_HANDLER( fm7_vram6_w );
207WRITE8_HANDLER( fm7_vram7_w );
208WRITE8_HANDLER( fm7_vram8_w );
209WRITE8_HANDLER( fm7_vram9_w );
210WRITE8_HANDLER( fm7_vramA_w );
211WRITE8_HANDLER( fm7_vramB_w );
212248
213READ8_HANDLER( fm7_sub_ram_ports_banked_r );
214WRITE8_HANDLER( fm7_sub_ram_ports_banked_w );
215READ8_HANDLER( fm7_console_ram_banked_r );
216WRITE8_HANDLER( fm7_console_ram_banked_w );
217249
218250VIDEO_START( fm7 );
219251SCREEN_UPDATE_IND16( fm7 );
src/mess/includes/vtech2.h
r14963r14964
4343   int m_row_d;
4444   int m_laser_bg_mode;
4545   int m_laser_two_color;
46   DECLARE_WRITE8_MEMBER(laser_bank_select_w);
47   DECLARE_WRITE8_MEMBER(laser_fdc_w);
48   DECLARE_WRITE8_MEMBER(laser_bg_mode_w);
49   DECLARE_WRITE8_MEMBER(laser_two_color_w);
50   DECLARE_READ8_MEMBER(laser_fdc_r);
4651};
4752
4853
r14963r14964
5661DEVICE_IMAGE_LOAD( laser_cart );
5762DEVICE_IMAGE_UNLOAD( laser_cart );
5863
59extern  READ8_HANDLER ( laser_fdc_r );
60extern WRITE8_HANDLER ( laser_fdc_w );
61extern WRITE8_HANDLER ( laser_bank_select_w );
6264
6365
6466/*----------- defined in video/vtech2.c -----------*/
6567
6668extern VIDEO_START( laser );
6769extern SCREEN_UPDATE_IND16( laser );
68extern WRITE8_HANDLER ( laser_bg_mode_w );
69extern WRITE8_HANDLER ( laser_two_color_w );
7070
7171
7272#endif /* VTECH2_H_ */
src/mess/includes/comquest.h
r14963r14964
2020   int m_dma_activ;
2121   int m_state;
2222   int m_count;
23   DECLARE_READ8_MEMBER(comquest_read);
24   DECLARE_WRITE8_MEMBER(comquest_write);
2325};
2426
2527
src/mess/includes/zx.h
r14963r14964
4646   UINT8 m_charline_ptr;
4747   int m_offs1;
4848   void zx_ula_bkgnd(UINT8 color);
49   DECLARE_WRITE8_MEMBER(zx_ram_w);
4950};
5051
5152
src/mess/includes/z80ne.h
r14963r14964
8080   emu_timer *m_cassette_timer;
8181   cass_data_t m_cass_data;
8282   wd17xx_state_t m_wd17xx_state;
83   DECLARE_READ8_MEMBER(lx383_r);
84   DECLARE_WRITE8_MEMBER(lx383_w);
85   DECLARE_READ8_MEMBER(lx385_data_r);
86   DECLARE_READ8_MEMBER(lx385_ctrl_r);
87   DECLARE_WRITE8_MEMBER(lx385_data_w);
88   DECLARE_WRITE8_MEMBER(lx385_ctrl_w);
89   DECLARE_READ8_MEMBER(lx388_data_r);
90   DECLARE_READ8_MEMBER(lx388_read_field_sync);
8391};
8492
8593
8694/*----------- defined in machine/z80ne.c -----------*/
8795
88READ8_HANDLER(lx383_r);
89WRITE8_HANDLER(lx383_w);
90READ8_HANDLER(lx385_data_r);
91WRITE8_HANDLER(lx385_data_w);
92READ8_HANDLER(lx385_ctrl_r);
93WRITE8_HANDLER(lx385_ctrl_w);
9496READ8_DEVICE_HANDLER(lx388_mc6847_videoram_r);
95READ8_HANDLER(lx388_data_r);
96READ8_HANDLER(lx388_read_field_sync);
9797READ8_DEVICE_HANDLER(lx390_fdc_r);
9898WRITE8_DEVICE_HANDLER(lx390_fdc_w);
9999READ8_DEVICE_HANDLER(lx390_reset_bank);
src/mess/includes/apple3.h
r14963r14964
4747   UINT8 m_last_n;
4848   UINT8 *m_char_mem;
4949   UINT32 *m_hgr_map;
50   DECLARE_READ8_MEMBER(apple3_c0xx_r);
51   DECLARE_WRITE8_MEMBER(apple3_c0xx_w);
52   DECLARE_READ8_MEMBER(apple3_00xx_r);
53   DECLARE_WRITE8_MEMBER(apple3_00xx_w);
54   DECLARE_READ8_MEMBER(apple3_indexed_read);
55   DECLARE_WRITE8_MEMBER(apple3_indexed_write);
56   UINT8 apple3_profile_r(offs_t offset);
57   void apple3_profile_w(offs_t offset, UINT8 data);
5058};
5159
5260
r14963r14964
6068DRIVER_INIT( apple3 );
6169INTERRUPT_GEN( apple3_interrupt );
6270
63READ8_HANDLER( apple3_00xx_r );
64WRITE8_HANDLER( apple3_00xx_w );
6571
66READ8_HANDLER( apple3_indexed_read );
67WRITE8_HANDLER( apple3_indexed_write );
6872
6973
7074/*----------- defined in video/apple3.c -----------*/
src/mess/includes/dai.h
r14963r14964
2626   device_t *m_tms5501;
2727   UINT8 m_keyboard_scan_mask;
2828   unsigned short m_4_colours_palette[4];
29   DECLARE_WRITE8_MEMBER(dai_stack_interrupt_circuit_w);
30   DECLARE_READ8_MEMBER(dai_io_discrete_devices_r);
31   DECLARE_WRITE8_MEMBER(dai_io_discrete_devices_w);
32   DECLARE_READ8_MEMBER(dai_amd9511_r);
33   DECLARE_WRITE8_MEMBER(dai_amd9511_w);
2934};
3035
3136
r14963r14964
3742
3843MACHINE_START( dai );
3944MACHINE_RESET( dai );
40READ8_HANDLER( dai_io_discrete_devices_r );
41WRITE8_HANDLER( dai_io_discrete_devices_w );
42WRITE8_HANDLER( dai_stack_interrupt_circuit_w );
43READ8_HANDLER( dai_amd9511_r );
44WRITE8_HANDLER( dai_amd9511_w );
4545
4646
4747/*----------- defined in video/dai.c -----------*/
src/mess/includes/nc.h
r14963r14964
5454   UINT8 m_type;
5555   int m_card_size;
5656   int m_nc200_backlight;
57   DECLARE_READ8_MEMBER(nc_memory_management_r);
58   DECLARE_WRITE8_MEMBER(nc_memory_management_w);
59   DECLARE_WRITE8_MEMBER(nc_irq_mask_w);
60   DECLARE_WRITE8_MEMBER(nc_irq_status_w);
61   DECLARE_READ8_MEMBER(nc_irq_status_r);
62   DECLARE_READ8_MEMBER(nc_key_data_in_r);
63   DECLARE_WRITE8_MEMBER(nc_sound_w);
64   DECLARE_WRITE8_MEMBER(nc_uart_control_w);
65   DECLARE_WRITE8_MEMBER(nc100_display_memory_start_w);
66   DECLARE_WRITE8_MEMBER(nc100_uart_control_w);
67   DECLARE_WRITE8_MEMBER(nc100_poweroff_control_w);
68   DECLARE_READ8_MEMBER(nc100_card_battery_status_r);
69   DECLARE_WRITE8_MEMBER(nc100_memory_card_wait_state_w);
70   DECLARE_WRITE8_MEMBER(nc200_display_memory_start_w);
71   DECLARE_READ8_MEMBER(nc200_card_battery_status_r);
72   DECLARE_READ8_MEMBER(nc200_printer_status_r);
73   DECLARE_WRITE8_MEMBER(nc200_uart_control_w);
74   DECLARE_WRITE8_MEMBER(nc200_memory_card_wait_state_w);
75   DECLARE_WRITE8_MEMBER(nc200_poweroff_control_w);
5776};
5877
5978
src/mess/includes/cbmb.h
r14963r14964
5555   int m_old_level;
5656   int m_irq_level;
5757   int m_font;
58   DECLARE_WRITE8_MEMBER(cbmb_colorram_w);
5859};
5960
6061/*----------- defined in machine/cbmb.c -----------*/
6162
6263extern const mos6526_interface cbmb_cia;
6364
64WRITE8_HANDLER ( cbmb_colorram_w );
6565
6666READ8_DEVICE_HANDLER( cbmb_tpi0_port_a_r );
6767WRITE8_DEVICE_HANDLER( cbmb_tpi0_port_a_w );
src/mess/includes/nes.h
r14963r14964
247247   /* these are used in the mapper 20 handlers */
248248   int     m_fds_last_side;
249249   int     m_fds_count;
250   DECLARE_READ8_MEMBER(nes_IN0_r);
251   DECLARE_READ8_MEMBER(nes_IN1_r);
252   DECLARE_WRITE8_MEMBER(nes_IN0_w);
253   DECLARE_WRITE8_MEMBER(nes_IN1_w);
254   DECLARE_READ8_MEMBER(nes_fds_r);
255   DECLARE_WRITE8_MEMBER(nes_fds_w);
256   DECLARE_WRITE8_MEMBER(nes_vh_sprite_dma_w);
250257};
251258
252259
253260/*----------- defined in machine/nes.c -----------*/
254261
255WRITE8_HANDLER ( nes_IN0_w );
256WRITE8_HANDLER ( nes_IN1_w );
257262
258263/* protos */
259264
r14963r14964
267272
268273DRIVER_INIT( famicom );
269274
270READ8_HANDLER( nes_IN0_r );
271READ8_HANDLER( nes_IN1_r );
272275
273276int nes_ppu_vidaccess( device_t *device, int address, int data );
274277
src/mess/includes/gb.h
r14963r14964
181181   void (*update_scanline)( running_machine &machine );
182182
183183   bitmap_ind16 m_bitmap;
184   DECLARE_WRITE8_MEMBER(gb_rom_bank_select_mbc1);
185   DECLARE_WRITE8_MEMBER(gb_rom_bank_select_mbc2);
186   DECLARE_WRITE8_MEMBER(gb_rom_bank_select_mbc3);
187   DECLARE_WRITE8_MEMBER(gb_rom_bank_select_mbc5);
188   DECLARE_WRITE8_MEMBER(gb_ram_bank_select_mbc6);
189   DECLARE_WRITE8_MEMBER(gb_rom_bank_select_mbc6_1);
190   DECLARE_WRITE8_MEMBER(gb_rom_bank_select_mbc6_2);
191   DECLARE_WRITE8_MEMBER(gb_rom_bank_select_mbc7);
192   DECLARE_WRITE8_MEMBER(gb_rom_bank_unknown_mbc7);
193   DECLARE_WRITE8_MEMBER(gb_rom_bank_select_wisdom);
194   DECLARE_WRITE8_MEMBER(gb_ram_bank_select_mbc1);
195   DECLARE_WRITE8_MEMBER(gb_ram_bank_select_mbc3);
196   DECLARE_WRITE8_MEMBER(gb_ram_bank_select_mbc5);
197   DECLARE_WRITE8_MEMBER(gb_ram_enable);
198   DECLARE_WRITE8_MEMBER(gb_mem_mode_select_mbc1);
199   DECLARE_WRITE8_MEMBER(gb_mem_mode_select_mbc3);
200   DECLARE_WRITE8_MEMBER(gb_ram_tama5);
201   DECLARE_WRITE8_MEMBER(gb_rom_bank_mmm01_0000_w);
202   DECLARE_WRITE8_MEMBER(gb_rom_bank_mmm01_2000_w);
203   DECLARE_WRITE8_MEMBER(gb_rom_bank_mmm01_4000_w);
204   DECLARE_WRITE8_MEMBER(gb_rom_bank_mmm01_6000_w);
205   DECLARE_WRITE8_MEMBER(gb_rom_bank_select_mbc1_kor);
206   DECLARE_WRITE8_MEMBER(gb_ram_bank_select_mbc1_kor);
207   DECLARE_WRITE8_MEMBER(gb_mem_mode_select_mbc1_kor);
208   DECLARE_WRITE8_MEMBER(gb_io_w);
209   DECLARE_WRITE8_MEMBER(gb_io2_w);
210   DECLARE_WRITE8_MEMBER(sgb_io_w);
211   DECLARE_READ8_MEMBER(gb_ie_r);
212   DECLARE_WRITE8_MEMBER(gb_ie_w);
213   DECLARE_READ8_MEMBER(gb_io_r);
214   DECLARE_WRITE8_MEMBER(gbc_io2_w);
215   DECLARE_READ8_MEMBER(gbc_io2_r);
216   DECLARE_READ8_MEMBER(megaduck_video_r);
217   DECLARE_WRITE8_MEMBER(megaduck_video_w);
218   DECLARE_WRITE8_MEMBER(megaduck_sound_w1);
219   DECLARE_READ8_MEMBER(megaduck_sound_r1);
220   DECLARE_WRITE8_MEMBER(megaduck_sound_w2);
221   DECLARE_READ8_MEMBER(megaduck_sound_r2);
222   DECLARE_WRITE8_MEMBER(megaduck_rom_bank_select_type1);
223   DECLARE_WRITE8_MEMBER(megaduck_rom_bank_select_type2);
224   DECLARE_READ8_MEMBER(gb_video_r);
225   DECLARE_READ8_MEMBER(gb_vram_r);
226   DECLARE_WRITE8_MEMBER(gb_vram_w);
227   DECLARE_READ8_MEMBER(gb_oam_r);
228   DECLARE_WRITE8_MEMBER(gb_oam_w);
229   DECLARE_WRITE8_MEMBER(gb_video_w);
230   DECLARE_READ8_MEMBER(gbc_video_r);
231   DECLARE_WRITE8_MEMBER(gbc_video_w);
184232};
185233
186234
187235/*----------- defined in machine/gb.c -----------*/
188236
189WRITE8_HANDLER( gb_ram_enable );
190WRITE8_HANDLER( gb_io_w );
191READ8_HANDLER ( gb_io_r );
192WRITE8_HANDLER( gb_io2_w );
193READ8_HANDLER( gb_ie_r );
194WRITE8_HANDLER( gb_ie_w );
195237DEVICE_START(gb_cart);
196238DEVICE_IMAGE_LOAD(gb_cart);
197239INTERRUPT_GEN( gb_scanline_interrupt );
198240void gb_timer_callback(lr35902_cpu_device *device, int cycles);
199WRITE8_HANDLER( gbc_io2_w );
200READ8_HANDLER( gbc_io2_r );
201241MACHINE_START( gb );
202242MACHINE_RESET( gb );
203243MACHINE_RESET( gbpocket );
r14963r14964
210250
211251extern MACHINE_START( sgb );
212252extern MACHINE_RESET( sgb );
213extern WRITE8_HANDLER ( sgb_io_w );
214253
215254MACHINE_START( gbc );
216255MACHINE_RESET( gbc );
r14963r14964
220259extern DEVICE_IMAGE_LOAD(megaduck_cart);
221260extern MACHINE_START( megaduck );
222261extern MACHINE_RESET( megaduck );
223extern  READ8_HANDLER( megaduck_video_r );
224extern WRITE8_HANDLER( megaduck_video_w );
225extern WRITE8_HANDLER( megaduck_rom_bank_select_type1 );
226extern WRITE8_HANDLER( megaduck_rom_bank_select_type2 );
227extern  READ8_HANDLER( megaduck_sound_r1 );
228extern WRITE8_HANDLER( megaduck_sound_w1 );
229extern  READ8_HANDLER( megaduck_sound_r2 );
230extern WRITE8_HANDLER( megaduck_sound_w2 );
231262
232263
233264/*----------- defined in video/gb.c -----------*/
234265
235READ8_HANDLER( gbc_video_r );
236WRITE8_HANDLER ( gbc_video_w );
237266
238READ8_HANDLER( gb_oam_r );
239WRITE8_HANDLER( gb_oam_w );
240READ8_HANDLER( gb_vram_r );
241WRITE8_HANDLER( gb_vram_w );
242267
243268enum
244269{
r14963r14964
254279PALETTE_INIT( gbc );
255280PALETTE_INIT( megaduck );
256281
257READ8_HANDLER( gb_video_r );
258WRITE8_HANDLER( gb_video_w );
259282MACHINE_START( gb_video );
260283MACHINE_START( gbc_video );
261284void gb_video_reset( running_machine &machine, int mode );
src/mess/includes/concept.h
r14963r14964
4848   UINT8 m_fdc_local_status;
4949   UINT8 m_fdc_local_command;
5050   expansion_slot_t m_expansion_slots[4];
51   DECLARE_READ16_MEMBER(concept_io_r);
52   DECLARE_WRITE16_MEMBER(concept_io_w);
53   DECLARE_WRITE8_MEMBER(concept_fdc_reg_w);
54   DECLARE_READ8_MEMBER(concept_hdc_reg_r);
55   DECLARE_WRITE8_MEMBER(concept_hdc_reg_w);
5156};
5257
5358
r14963r14964
6065VIDEO_START(concept);
6166SCREEN_UPDATE_IND16(concept);
6267INTERRUPT_GEN( concept_interrupt );
63READ16_HANDLER(concept_io_r);
64WRITE16_HANDLER(concept_io_w);
6568
6669
6770#endif /* CONCEPT_H_ */
src/mess/includes/pcw16.h
r14963r14964
4848   int m_previous_fdc_int_state;
4949   int m_colour_palette[16];
5050   int m_video_control;
51   DECLARE_WRITE8_MEMBER(pcw16_palette_w);
52   DECLARE_READ8_MEMBER(pcw16_no_mem_r);
53   DECLARE_READ8_MEMBER(pcw16_bankhw_r);
54   DECLARE_WRITE8_MEMBER(pcw16_bankhw_w);
55   DECLARE_WRITE8_MEMBER(pcw16_video_control_w);
56   DECLARE_READ8_MEMBER(pcw16_keyboard_data_shift_r);
57   DECLARE_WRITE8_MEMBER(pcw16_keyboard_data_shift_w);
58   DECLARE_READ8_MEMBER(pcw16_keyboard_status_r);
59   DECLARE_WRITE8_MEMBER(pcw16_keyboard_control_w);
60   DECLARE_READ8_MEMBER(rtc_year_invalid_r);
61   DECLARE_READ8_MEMBER(rtc_month_r);
62   DECLARE_READ8_MEMBER(rtc_days_r);
63   DECLARE_READ8_MEMBER(rtc_hours_r);
64   DECLARE_READ8_MEMBER(rtc_minutes_r);
65   DECLARE_READ8_MEMBER(rtc_seconds_r);
66   DECLARE_READ8_MEMBER(rtc_256ths_seconds_r);
67   DECLARE_WRITE8_MEMBER(rtc_control_w);
68   DECLARE_WRITE8_MEMBER(rtc_seconds_w);
69   DECLARE_WRITE8_MEMBER(rtc_minutes_w);
70   DECLARE_WRITE8_MEMBER(rtc_hours_w);
71   DECLARE_WRITE8_MEMBER(rtc_days_w);
72   DECLARE_WRITE8_MEMBER(rtc_month_w);
73   DECLARE_WRITE8_MEMBER(rtc_year_w);
74   DECLARE_READ8_MEMBER(pcw16_system_status_r);
75   DECLARE_READ8_MEMBER(pcw16_timer_interrupt_counter_r);
76   DECLARE_WRITE8_MEMBER(pcw16_system_control_w);
77   DECLARE_WRITE8_MEMBER(pcw16_superio_fdc_datarate_w);
78   DECLARE_WRITE8_MEMBER(pcw16_superio_fdc_digital_output_register_w);
79   DECLARE_WRITE8_MEMBER(pcw16_superio_fdc_data_w);
80   DECLARE_READ8_MEMBER(pcw16_superio_fdc_data_r);
81   DECLARE_READ8_MEMBER(pcw16_superio_fdc_main_status_register_r);
82   DECLARE_READ8_MEMBER(pcw16_superio_fdc_digital_input_register_r);
83   void pcw16_keyboard_init();
84   void pcw16_keyboard_refresh_outputs();
85   void pcw16_keyboard_set_clock_state(int state);
86   void pcw16_keyboard_int(int state);
87   void pcw16_keyboard_reset();
88   int pcw16_keyboard_can_transmit();
89   void pcw16_keyboard_signal_byte_received(int data);
90   void pcw16_refresh_ints();
91   void rtc_setup_max_days();
5192};
5293
5394
src/mess/includes/msx.h
r14963r14964
115115   required_device<device_t> m_ym;
116116   required_device<device_t> m_dac;
117117   optional_device<rp5c01_device> m_rtc;
118   DECLARE_READ8_MEMBER(msx_psg_port_a_r);
119   DECLARE_READ8_MEMBER(msx_psg_port_b_r);
120   DECLARE_WRITE8_MEMBER(msx_psg_port_a_w);
121   DECLARE_WRITE8_MEMBER(msx_psg_port_b_w);
118122};
119123
120124
r14963r14964
141145WRITE8_DEVICE_HANDLER( msx_printer_strobe_w );
142146WRITE8_DEVICE_HANDLER( msx_printer_data_w );
143147
144WRITE8_HANDLER ( msx_psg_port_a_w );
145READ8_HANDLER ( msx_psg_port_a_r );
146WRITE8_HANDLER ( msx_psg_port_b_w );
147READ8_HANDLER ( msx_psg_port_b_r );
148148
149149#endif /* __MSX_H__ */
src/mess/includes/radio86.h
r14963r14964
3030   UINT8 m_romdisk_lsb;
3131   UINT8 m_romdisk_msb;
3232   UINT8 m_disk_sel;
33   DECLARE_READ8_MEMBER(radio_cpu_state_r);
34   DECLARE_READ8_MEMBER(radio_io_r);
35   DECLARE_WRITE8_MEMBER(radio_io_w);
36   DECLARE_WRITE8_MEMBER(radio86_pagesel);
3337};
3438
3539
r14963r14964
4549extern DRIVER_INIT( radioram );
4650extern MACHINE_RESET( radio86 );
4751
48extern READ8_HANDLER (radio_cpu_state_r );
4952
50extern READ8_HANDLER (radio_io_r );
51extern WRITE8_HANDLER(radio_io_w );
5253
5354extern const i8255_interface radio86_ppi8255_interface_1;
5455extern const i8255_interface radio86_ppi8255_interface_2;
r14963r14964
6263extern const i8275_interface mikrosha_i8275_interface;
6364extern const i8275_interface apogee_i8275_interface;
6465
65extern WRITE8_HANDLER ( radio86_pagesel );
6666extern const i8257_interface radio86_dma;
6767
6868
src/mess/includes/mz700.h
r14963r14964
5252   UINT16 m_mz800_ramaddr;
5353   UINT8 m_mz800_palette[4];
5454   UINT8 m_mz800_palette_bank;
55   DECLARE_READ8_MEMBER(mz700_e008_r);
56   DECLARE_WRITE8_MEMBER(mz700_e008_w);
57   DECLARE_READ8_MEMBER(mz800_bank_0_r);
58   DECLARE_WRITE8_MEMBER(mz700_bank_0_w);
59   DECLARE_WRITE8_MEMBER(mz800_bank_0_w);
60   DECLARE_READ8_MEMBER(mz800_bank_1_r);
61   DECLARE_WRITE8_MEMBER(mz700_bank_1_w);
62   DECLARE_WRITE8_MEMBER(mz700_bank_2_w);
63   DECLARE_WRITE8_MEMBER(mz700_bank_3_w);
64   DECLARE_WRITE8_MEMBER(mz700_bank_4_w);
65   DECLARE_WRITE8_MEMBER(mz700_bank_5_w);
66   DECLARE_WRITE8_MEMBER(mz700_bank_6_w);
67   DECLARE_READ8_MEMBER(mz800_crtc_r);
68   DECLARE_WRITE8_MEMBER(mz800_write_format_w);
69   DECLARE_WRITE8_MEMBER(mz800_read_format_w);
70   DECLARE_WRITE8_MEMBER(mz800_display_mode_w);
71   DECLARE_WRITE8_MEMBER(mz800_scroll_border_w);
72   DECLARE_READ8_MEMBER(mz800_ramdisk_r);
73   DECLARE_WRITE8_MEMBER(mz800_ramdisk_w);
74   DECLARE_WRITE8_MEMBER(mz800_ramaddr_w);
75   DECLARE_WRITE8_MEMBER(mz800_palette_w);
76   DECLARE_WRITE8_MEMBER(mz800_cgram_w);
5577};
5678
5779
r14963r14964
6789MACHINE_START( mz700 );
6890
6991/* bank switching */
70WRITE8_HANDLER( mz700_bank_0_w );
71WRITE8_HANDLER( mz700_bank_1_w );
72WRITE8_HANDLER( mz700_bank_2_w );
73WRITE8_HANDLER( mz700_bank_3_w );
74WRITE8_HANDLER( mz700_bank_4_w );
75WRITE8_HANDLER( mz700_bank_5_w );
76WRITE8_HANDLER( mz700_bank_6_w );
7792
7893/* bankswitching, mz800 only */
79READ8_HANDLER( mz800_bank_0_r );
80READ8_HANDLER( mz800_bank_1_r );
81WRITE8_HANDLER( mz800_bank_0_w );
8294
8395
84READ8_HANDLER( mz800_crtc_r );
85READ8_HANDLER( mz800_ramdisk_r );
8696
87WRITE8_HANDLER( mz800_write_format_w );
88WRITE8_HANDLER( mz800_read_format_w );
89WRITE8_HANDLER( mz800_display_mode_w );
90WRITE8_HANDLER( mz800_scroll_border_w );
91WRITE8_HANDLER( mz800_ramdisk_w );
92WRITE8_HANDLER( mz800_ramaddr_w );
93WRITE8_HANDLER( mz800_palette_w );
9497
95
9698/*----------- defined in video/mz700.c -----------*/
9799
98100PALETTE_INIT( mz700 );
99101SCREEN_UPDATE_IND16( mz700 );
100102VIDEO_START( mz800 );
101103SCREEN_UPDATE_IND16( mz800 );
102WRITE8_HANDLER( mz800_cgram_w );
103104
104105
105106#endif /* MZ700_H_ */
src/mess/includes/b2m.h
r14963r14964
3838   device_t *m_fdc;
3939   device_t *m_pic;
4040   device_t *m_speaker;
41   DECLARE_READ8_MEMBER(b2m_keyboard_r);
42   DECLARE_WRITE8_MEMBER(b2m_palette_w);
43   DECLARE_READ8_MEMBER(b2m_palette_r);
44   DECLARE_WRITE8_MEMBER(b2m_localmachine_w);
45   DECLARE_READ8_MEMBER(b2m_localmachine_r);
4146};
4247
4348/*----------- defined in machine/b2m.c -----------*/
r14963r14964
5358extern MACHINE_START( b2m );
5459extern MACHINE_RESET( b2m );
5560extern INTERRUPT_GEN( b2m_vblank_interrupt );
56extern READ8_HANDLER( b2m_palette_r );
57extern WRITE8_HANDLER( b2m_palette_w );
58extern READ8_HANDLER( b2m_localmachine_r );
59extern WRITE8_HANDLER( b2m_localmachine_w );
6061
6162/*----------- defined in video/b2m.c -----------*/
6263
src/mess/includes/apollo.h
r14963r14964
3737#define MLOG(x)  { logerror ("%s: ", apollo_cpu_context(machine.device(MAINCPU))); LOG(x) }
3838#define MLOG1(x) { if (VERBOSE > 0) MLOG(x) }
3939#define MLOG2(x) { if (VERBOSE > 1) MLOG(x) }
40#define SLOG(x)  { logerror ("%s: ", apollo_cpu_context(&space->device())); LOG(x) }
40#define SLOG(x)  { logerror ("%s: ", apollo_cpu_context(&space.device())); LOG(x) }
4141#define SLOG1(x) { if (VERBOSE > 0) SLOG(x) }
4242#define SLOG2(x) { if (VERBOSE > 1) SLOG(x) }
4343
r14963r14964
121121   device_t *pic8259_master;
122122   device_t *pic8259_slave;
123123
124   DECLARE_WRITE16_MEMBER(apollo_csr_status_register_w);
125   DECLARE_READ16_MEMBER(apollo_csr_status_register_r);
126   DECLARE_WRITE16_MEMBER(apollo_csr_control_register_w);
127   DECLARE_READ16_MEMBER(apollo_csr_control_register_r);
128   DECLARE_WRITE8_MEMBER(apollo_dma_1_w);
129   DECLARE_READ8_MEMBER(apollo_dma_1_r);
130   DECLARE_WRITE8_MEMBER(apollo_dma_2_w);
131   DECLARE_READ8_MEMBER(apollo_dma_2_r);
132   DECLARE_WRITE8_MEMBER(apollo_dma_page_register_w);
133   DECLARE_READ8_MEMBER(apollo_dma_page_register_r);
134   DECLARE_WRITE16_MEMBER(apollo_address_translation_map_w);
135   DECLARE_READ16_MEMBER(apollo_address_translation_map_r);
136   DECLARE_READ8_MEMBER(apollo_dma_read_byte);
137   DECLARE_WRITE8_MEMBER(apollo_dma_write_byte);
138   DECLARE_READ8_MEMBER(apollo_dma_read_word);
139   DECLARE_WRITE8_MEMBER(apollo_dma_write_word);
140   DECLARE_WRITE8_MEMBER(apollo_rtc_w);
141   DECLARE_READ8_MEMBER(apollo_rtc_r);
142   DECLARE_WRITE8_MEMBER(apollo_fdc_w);
143   DECLARE_READ8_MEMBER(apollo_fdc_r);
144   DECLARE_WRITE8_MEMBER(cache_control_register_w);
145   DECLARE_READ8_MEMBER(cache_status_register_r);
146   DECLARE_WRITE8_MEMBER(task_alias_register_w);
147   DECLARE_READ8_MEMBER(task_alias_register_r);
148   DECLARE_WRITE16_MEMBER(apollo_node_id_w);
149   DECLARE_READ16_MEMBER(apollo_node_id_r);
150   DECLARE_WRITE16_MEMBER(latch_page_on_parity_error_register_w);
151   DECLARE_READ16_MEMBER(latch_page_on_parity_error_register_r);
152   DECLARE_WRITE8_MEMBER(master_req_register_w);
153   DECLARE_READ8_MEMBER(master_req_register_r);
154   DECLARE_WRITE16_MEMBER(selective_clear_locations_w);
155   DECLARE_READ16_MEMBER(selective_clear_locations_r);
156   DECLARE_READ32_MEMBER(ram_with_parity_r);
157   DECLARE_WRITE32_MEMBER(ram_with_parity_w);
158   DECLARE_READ32_MEMBER(apollo_unmapped_r);
159   DECLARE_WRITE32_MEMBER(apollo_unmapped_w);
160   DECLARE_WRITE32_MEMBER(apollo_rom_w);
161   DECLARE_READ16_MEMBER(apollo_atbus_io_r);
162   DECLARE_WRITE16_MEMBER(apollo_atbus_io_w);
163   DECLARE_READ32_MEMBER(apollo_atbus_memory_r);
164   DECLARE_WRITE32_MEMBER(apollo_atbus_memory_w);
165   DECLARE_WRITE8_MEMBER(dn5500_memory_present_register_w);
166   DECLARE_READ8_MEMBER(dn5500_memory_present_register_r);
167   DECLARE_WRITE8_MEMBER(dn5500_11500_w);
168   DECLARE_READ8_MEMBER(dn5500_11500_r);
169   DECLARE_WRITE8_MEMBER(dn5500_io_protection_map_w);
170   DECLARE_READ8_MEMBER(dn5500_io_protection_map_r);
171   DECLARE_READ32_MEMBER(apollo_f8_r);
172   DECLARE_WRITE32_MEMBER(apollo_f8_w);
124173};
125174
126175MACHINE_CONFIG_EXTERN( apollo );
r14963r14964
170219UINT16 apollo_csr_get_status_register(void);
171220void apollo_csr_set_status_register(UINT16 mask, UINT16 data);
172221
173WRITE16_HANDLER( apollo_csr_status_register_w );
174READ16_HANDLER( apollo_csr_status_register_r );
175WRITE16_HANDLER( apollo_csr_control_register_w );
176READ16_HANDLER( apollo_csr_control_register_r );
177222
178223/*----------- machine/apollo_dma.c -----------*/
179224
180WRITE8_HANDLER(apollo_dma_1_w );
181READ8_HANDLER( apollo_dma_1_r );
182225
183WRITE8_HANDLER(apollo_dma_2_w );
184READ8_HANDLER( apollo_dma_2_r );
185226
186WRITE8_HANDLER(apollo_dma_page_register_w );
187READ8_HANDLER( apollo_dma_page_register_r );
188227
189WRITE16_HANDLER(apollo_address_translation_map_w );
190READ16_HANDLER( apollo_address_translation_map_r );
191228
192229/*----------- machine/apollo_pic.c -----------*/
193230
r14963r14964
206243
207244/*----------- machine/apollo_rtc.c -----------*/
208245
209WRITE8_HANDLER( apollo_rtc_w );
210READ8_HANDLER( apollo_rtc_r );
211246
212247/*----------- machine/apollo_sio.c -----------*/
213248
r14963r14964
223258
224259/*----------- machine/apollo_fdc.c -----------*/
225260
226READ8_HANDLER(apollo_fdc_r);
227WRITE8_HANDLER(apollo_fdc_w);
228261
229262/*----------- machine/apollo_eth.c -----------*/
230263
src/mess/includes/lisa.h
r14963r14964
139139   int m_last_my;
140140   int m_frame_count;
141141   int m_videoROM_address;
142   DECLARE_READ8_MEMBER(lisa_fdc_io_r);
143   DECLARE_WRITE8_MEMBER(lisa_fdc_io_w);
144   DECLARE_READ8_MEMBER(lisa_fdc_r);
145   DECLARE_READ8_MEMBER(lisa210_fdc_r);
146   DECLARE_WRITE8_MEMBER(lisa_fdc_w);
147   DECLARE_WRITE8_MEMBER(lisa210_fdc_w);
148   DECLARE_READ16_MEMBER(lisa_r);
149   DECLARE_WRITE16_MEMBER(lisa_w);
150   DECLARE_READ16_MEMBER(lisa_IO_r);
151   DECLARE_WRITE16_MEMBER(lisa_IO_w);
142152};
143153
144154
r14963r14964
161171
162172INTERRUPT_GEN( lisa_interrupt );
163173
164READ8_HANDLER ( lisa_fdc_io_r );
165WRITE8_HANDLER ( lisa_fdc_io_w );
166READ8_HANDLER ( lisa_fdc_r );
167READ8_HANDLER ( lisa210_fdc_r );
168WRITE8_HANDLER ( lisa_fdc_w );
169WRITE8_HANDLER ( lisa210_fdc_w );
170READ16_HANDLER ( lisa_r );
171WRITE16_HANDLER ( lisa_w );
172174
173175
174176#endif /* LISA_H_ */
src/mess/includes/aquarius.h
r14963r14964
1919   UINT8 m_scrambler;
2020   required_shared_ptr<UINT8> m_colorram;
2121   tilemap_t *m_tilemap;
22   DECLARE_WRITE8_MEMBER(aquarius_videoram_w);
23   DECLARE_WRITE8_MEMBER(aquarius_colorram_w);
24   DECLARE_READ8_MEMBER(cassette_r);
25   DECLARE_WRITE8_MEMBER(cassette_w);
26   DECLARE_READ8_MEMBER(vsync_r);
27   DECLARE_WRITE8_MEMBER(mapper_w);
28   DECLARE_READ8_MEMBER(printer_r);
29   DECLARE_WRITE8_MEMBER(printer_w);
30   DECLARE_READ8_MEMBER(keyboard_r);
31   DECLARE_WRITE8_MEMBER(scrambler_w);
32   DECLARE_READ8_MEMBER(cartridge_r);
33   DECLARE_READ8_MEMBER(floppy_r);
34   DECLARE_WRITE8_MEMBER(floppy_w);
2235};
2336
2437
2538/*----------- defined in video/aquarius.c -----------*/
2639
27WRITE8_HANDLER( aquarius_videoram_w );
28WRITE8_HANDLER( aquarius_colorram_w );
2940
3041PALETTE_INIT( aquarius );
3142VIDEO_START( aquarius );
src/mess/includes/lynx.h
r14963r14964
126126   UART m_uart;
127127   bitmap_ind16 m_bitmap;
128128   bitmap_ind16 m_bitmap_temp;
129   DECLARE_READ8_MEMBER(suzy_read);
130   DECLARE_WRITE8_MEMBER(suzy_write);
131   DECLARE_WRITE8_MEMBER(lynx_uart_w);
132   DECLARE_READ8_MEMBER(mikey_read);
133   DECLARE_WRITE8_MEMBER(mikey_write);
134   DECLARE_READ8_MEMBER(lynx_memory_config_r);
135   DECLARE_WRITE8_MEMBER(lynx_memory_config_w);
136   void lynx_divide();
137   void lynx_multiply();
138   UINT8 lynx_timer_read(int which, int offset);
139   void lynx_timer_write(int which, int offset, UINT8 data);
129140};
130141
131142
r14963r14964
134145MACHINE_START( lynx );
135146MACHINE_RESET( lynx );
136147
137READ8_HANDLER( lynx_memory_config_r );
138WRITE8_HANDLER( lynx_memory_config_w );
139148void lynx_timer_count_down(running_machine &machine, int nr);
140149
141150INTERRUPT_GEN( lynx_frame_int );
src/mess/includes/pmd85.h
r14963r14964
2525   UINT8 m_model;
2626   emu_timer * m_cassette_timer;
2727   void (*update_memory)(running_machine &);
28   DECLARE_READ8_MEMBER(pmd85_io_r);
29   DECLARE_WRITE8_MEMBER(pmd85_io_w);
30   DECLARE_READ8_MEMBER(mato_io_r);
31   DECLARE_WRITE8_MEMBER(mato_io_w);
2832};
2933
3034
r14963r14964
3539extern const i8255_interface alfa_ppi8255_interface[3];
3640extern const i8255_interface mato_ppi8255_interface;
3741
38 READ8_HANDLER ( pmd85_io_r );
39WRITE8_HANDLER ( pmd85_io_w );
40 READ8_HANDLER ( mato_io_r );
41WRITE8_HANDLER ( mato_io_w );
4242DRIVER_INIT ( pmd851 );
4343DRIVER_INIT ( pmd852a );
4444DRIVER_INIT ( pmd853 );
src/mess/includes/spectrum.h
r14963r14964
100100
101101   UINT8 *m_ram_0000;
102102   UINT8 m_ram_disabled_by_beta;
103   DECLARE_WRITE8_MEMBER(spectrum_port_fe_w);
104   DECLARE_READ8_MEMBER(spectrum_port_fe_r);
105   DECLARE_READ8_MEMBER(spectrum_port_1f_r);
106   DECLARE_READ8_MEMBER(spectrum_port_7f_r);
107   DECLARE_READ8_MEMBER(spectrum_port_df_r);
108   DECLARE_READ8_MEMBER(spectrum_port_ula_r);
103109};
104110
105111
r14963r14964
111117MACHINE_CONFIG_EXTERN( spectrum );
112118MACHINE_RESET( spectrum );
113119
114READ8_HANDLER(spectrum_port_1f_r);
115READ8_HANDLER(spectrum_port_7f_r);
116READ8_HANDLER(spectrum_port_df_r);
117READ8_HANDLER(spectrum_port_fe_r);
118WRITE8_HANDLER(spectrum_port_fe_w);
119120
120121/*----------- defined in drivers/spec128.c -----------*/
121122
src/mess/includes/ondra.h
r14963r14964
1616   UINT8 m_video_enable;
1717   UINT8 m_bank1_status;
1818   UINT8 m_bank2_status;
19   DECLARE_READ8_MEMBER(ondra_keyboard_r);
20   DECLARE_WRITE8_MEMBER(ondra_port_03_w);
21   DECLARE_WRITE8_MEMBER(ondra_port_09_w);
22   DECLARE_WRITE8_MEMBER(ondra_port_0a_w);
1923};
2024
2125
r14963r14964
2428extern MACHINE_START( ondra );
2529extern MACHINE_RESET( ondra );
2630
27extern WRITE8_HANDLER( ondra_port_03_w );
28extern WRITE8_HANDLER( ondra_port_09_w );
29extern WRITE8_HANDLER( ondra_port_0a_w );
3031/*----------- defined in video/ondra.c -----------*/
3132
3233extern VIDEO_START( ondra );
src/mess/includes/lviv.h
r14963r14964
2020   unsigned short m_colortable[1][4];
2121   UINT8 m_ppi_port_outputs[2][3];
2222   UINT8 m_startup_mem_map;
23   DECLARE_READ8_MEMBER(lviv_io_r);
24   DECLARE_WRITE8_MEMBER(lviv_io_w);
2325};
2426
2527
r14963r14964
2830extern const i8255_interface lviv_ppi8255_interface_0;
2931extern const i8255_interface lviv_ppi8255_interface_1;
3032
31 READ8_HANDLER ( lviv_io_r );
32WRITE8_HANDLER ( lviv_io_w );
3333MACHINE_RESET( lviv );
3434SNAPSHOT_LOAD( lviv );
3535
src/mess/includes/pcw.h
r14963r14964
6060   UINT8 m_printer_p2_prev;
6161   emu_timer* m_prn_stepper;
6262   emu_timer* m_prn_pins;
63   DECLARE_READ8_MEMBER(pcw_keyboard_r);
64   DECLARE_READ8_MEMBER(pcw_keyboard_data_r);
65   DECLARE_READ8_MEMBER(pcw_interrupt_counter_r);
66   DECLARE_WRITE8_MEMBER(pcw_bank_select_w);
67   DECLARE_WRITE8_MEMBER(pcw_bank_force_selection_w);
68   DECLARE_WRITE8_MEMBER(pcw_roller_ram_addr_w);
69   DECLARE_WRITE8_MEMBER(pcw_pointer_table_top_scan_w);
70   DECLARE_WRITE8_MEMBER(pcw_vdu_video_control_register_w);
71   DECLARE_WRITE8_MEMBER(pcw_system_control_w);
72   DECLARE_READ8_MEMBER(pcw_system_status_r);
73   DECLARE_READ8_MEMBER(pcw_expansion_r);
74   DECLARE_WRITE8_MEMBER(pcw_expansion_w);
75   DECLARE_READ8_MEMBER(pcw_fdc_r);
76   DECLARE_WRITE8_MEMBER(pcw_fdc_w);
77   DECLARE_WRITE8_MEMBER(pcw_printer_data_w);
78   DECLARE_WRITE8_MEMBER(pcw_printer_command_w);
79   DECLARE_READ8_MEMBER(pcw_printer_data_r);
80   DECLARE_READ8_MEMBER(pcw_printer_status_r);
81   DECLARE_READ8_MEMBER(mcu_printer_p1_r);
82   DECLARE_WRITE8_MEMBER(mcu_printer_p1_w);
83   DECLARE_READ8_MEMBER(mcu_printer_p2_r);
84   DECLARE_WRITE8_MEMBER(mcu_printer_p2_w);
85   DECLARE_READ8_MEMBER(mcu_printer_t1_r);
86   DECLARE_READ8_MEMBER(mcu_printer_t0_r);
87   DECLARE_READ8_MEMBER(mcu_kb_scan_r);
88   DECLARE_WRITE8_MEMBER(mcu_kb_scan_w);
89   DECLARE_READ8_MEMBER(mcu_kb_scan_high_r);
90   DECLARE_WRITE8_MEMBER(mcu_kb_scan_high_w);
91   DECLARE_READ8_MEMBER(mcu_kb_data_r);
92   DECLARE_READ8_MEMBER(mcu_kb_t1_r);
93   DECLARE_READ8_MEMBER(mcu_kb_t0_r);
94   DECLARE_READ8_MEMBER(pcw9512_parallel_r);
95   DECLARE_WRITE8_MEMBER(pcw9512_parallel_w);
96   void mcu_transmit_serial(UINT8 bit);
6397};
6498
6599
src/mess/includes/oric.h
r14963r14964
8282   unsigned char m_telestrat_via2_port_b_data;
8383   telestrat_mem_block m_telestrat_blocks[8];
8484   oric_vh_state m_vh_state;
85   DECLARE_WRITE8_MEMBER(oric_psg_porta_write);
86   DECLARE_WRITE8_MEMBER(apple2_v2_interface_w);
87   DECLARE_READ8_MEMBER(oric_jasmin_r);
88   DECLARE_WRITE8_MEMBER(oric_jasmin_w);
89   DECLARE_READ8_MEMBER(oric_microdisc_r);
90   DECLARE_WRITE8_MEMBER(oric_microdisc_w);
91   DECLARE_READ8_MEMBER(oric_IO_r);
92   DECLARE_WRITE8_MEMBER(oric_IO_w);
8593};
8694
8795
r14963r14964
93101
94102MACHINE_START( oric );
95103MACHINE_RESET( oric );
96READ8_HANDLER( oric_IO_r );
97WRITE8_HANDLER( oric_IO_w );
98READ8_HANDLER( oric_microdisc_r );
99WRITE8_HANDLER( oric_microdisc_w );
100104
101WRITE8_HANDLER(oric_psg_porta_write);
102105
103106/* Telestrat specific */
104107MACHINE_START( telestrat );
src/mess/includes/enterp.h
r14963r14964
2424   UINT8 keyboard_line;     /* index of keyboard line to read */
2525   bitmap_ind16 m_bitmap;
2626   struct _NICK_STATE *nick;
27   DECLARE_READ8_MEMBER(exdos_card_r);
28   DECLARE_WRITE8_MEMBER(exdos_card_w);
2729};
2830
2931
src/mess/includes/orao.h
r14963r14964
1818
1919   required_shared_ptr<UINT8> m_memory;
2020   required_shared_ptr<UINT8> m_video_ram;
21   DECLARE_READ8_MEMBER(orao_io_r);
22   DECLARE_WRITE8_MEMBER(orao_io_w);
2123};
2224
2325
r14963r14964
2830
2931extern DRIVER_INIT( orao103 );
3032
31extern READ8_HANDLER( orao_io_r );
32extern WRITE8_HANDLER( orao_io_w );
3333
3434
3535/*----------- defined in video/orao.c -----------*/
src/mess/includes/mbc55x.h
r14963r14964
142142   UINT8      m_vram_page;
143143
144144   keyboard_t   m_keyboard;
145   DECLARE_READ8_MEMBER(mbcpic8259_r);
146   DECLARE_WRITE8_MEMBER(mbcpic8259_w);
147   DECLARE_READ8_MEMBER(mbcpit8253_r);
148   DECLARE_WRITE8_MEMBER(mbcpit8253_w);
149   DECLARE_READ8_MEMBER(mbc55x_disk_r);
150   DECLARE_WRITE8_MEMBER(mbc55x_disk_w);
151   DECLARE_READ8_MEMBER(mbc55x_kb_usart_r);
152   DECLARE_WRITE8_MEMBER(mbc55x_kb_usart_w);
145153};
146154
147155/* IO chips */
r14963r14964
190198#define RAM_BANK_COUNT   15
191199
192200
193READ8_HANDLER(pit8253_r);
194WRITE8_HANDLER(pit8253_w);
195201READ8_HANDLER(ppi8255_r);
196202WRITE8_HANDLER(ppi8255_w);
197READ8_HANDLER(pic8259_r);
198WRITE8_HANDLER(pic8259_w);
199READ8_HANDLER(mbc55x_disk_r);
200WRITE8_HANDLER(mbc55x_disk_w);
201READ8_HANDLER(mbc55x_kb_usart_r);
202WRITE8_HANDLER(mbc55x_kb_usart_w);
203203
204204/* Floppy drive interface */
205205
src/mess/includes/at.h
r14963r14964
159159
160160   UINT8 m_channel_check;
161161   UINT8 m_nmi_enabled;
162   DECLARE_READ8_MEMBER(pc_dma_read_byte);
163   DECLARE_WRITE8_MEMBER(pc_dma_write_byte);
164   DECLARE_READ8_MEMBER(pc_dma_read_word);
165   DECLARE_WRITE8_MEMBER(pc_dma_write_word);
162166};
163167
164168
src/mess/includes/galeb.h
r14963r14964
1616      m_video_ram(*this, "video_ram"){ }
1717
1818   required_shared_ptr<UINT8> m_video_ram;
19   DECLARE_READ8_MEMBER(galeb_keyboard_r);
1920};
2021
2122/*----------- defined in video/galeb.c -----------*/
src/mess/includes/partner.h
r14963r14964
1919
2020   UINT8 m_mem_page;
2121   UINT8 m_win_mem_page;
22   DECLARE_READ8_MEMBER(partner_floppy_r);
23   DECLARE_WRITE8_MEMBER(partner_floppy_w);
24   DECLARE_WRITE8_MEMBER(partner_win_memory_page_w);
25   DECLARE_WRITE8_MEMBER(partner_mem_page_w);
2226};
2327
2428
r14963r14964
3135extern const i8257_interface partner_dma;
3236extern const wd17xx_interface partner_wd17xx_interface;
3337
34extern WRITE8_HANDLER (partner_mem_page_w );
35extern WRITE8_HANDLER (partner_win_memory_page_w);
3638#endif /* partner_H_ */
src/mess/includes/electron.h
r14963r14964
6262   int m_map4[256];
6363   int m_map16[256];
6464   emu_timer *m_scanline_timer;
65   DECLARE_READ8_MEMBER(electron_read_keyboard);
66   DECLARE_READ8_MEMBER(electron_jim_r);
67   DECLARE_WRITE8_MEMBER(electron_jim_w);
68   DECLARE_READ8_MEMBER(electron_1mhz_r);
69   DECLARE_WRITE8_MEMBER(electron_1mhz_w);
70   DECLARE_READ8_MEMBER(electron_ula_r);
71   DECLARE_WRITE8_MEMBER(electron_ula_w);
72   void electron_tape_start();
73   void electron_tape_stop();
6574};
6675
6776
6877/*----------- defined in machine/electron.c -----------*/
6978
70READ8_HANDLER( electron_jim_r );
71WRITE8_HANDLER( electron_jim_w );
72READ8_HANDLER( electron_1mhz_r );
73WRITE8_HANDLER( electron_1mhz_w );
74READ8_HANDLER( electron_ula_r );
75WRITE8_HANDLER( electron_ula_w );
7679MACHINE_START( electron );
7780
7881void electron_interrupt_handler(running_machine &machine, int mode, int interrupt);
src/mess/includes/gp32.h
r14963r14964
123123   UINT32 m_s3c240x_spi_regs[0x18/4];
124124   UINT32 m_s3c240x_mmc_regs[0x40/4];
125125   bitmap_rgb32 m_bitmap;
126   DECLARE_READ32_MEMBER(s3c240x_lcd_r);
127   DECLARE_WRITE32_MEMBER(s3c240x_lcd_w);
128   DECLARE_READ32_MEMBER(s3c240x_lcd_palette_r);
129   DECLARE_WRITE32_MEMBER(s3c240x_lcd_palette_w);
130   DECLARE_READ32_MEMBER(s3c240x_clkpow_r);
131   DECLARE_WRITE32_MEMBER(s3c240x_clkpow_w);
132   DECLARE_READ32_MEMBER(s3c240x_irq_r);
133   DECLARE_WRITE32_MEMBER(s3c240x_irq_w);
134   DECLARE_READ32_MEMBER(s3c240x_pwm_r);
135   DECLARE_WRITE32_MEMBER(s3c240x_pwm_w);
136   DECLARE_READ32_MEMBER(s3c240x_dma_r);
137   DECLARE_WRITE32_MEMBER(s3c240x_dma_w);
138   DECLARE_READ32_MEMBER(s3c240x_gpio_r);
139   DECLARE_WRITE32_MEMBER(s3c240x_gpio_w);
140   DECLARE_READ32_MEMBER(s3c240x_memcon_r);
141   DECLARE_WRITE32_MEMBER(s3c240x_memcon_w);
142   DECLARE_READ32_MEMBER(s3c240x_usb_host_r);
143   DECLARE_WRITE32_MEMBER(s3c240x_usb_host_w);
144   DECLARE_READ32_MEMBER(s3c240x_uart_0_r);
145   DECLARE_WRITE32_MEMBER(s3c240x_uart_0_w);
146   DECLARE_READ32_MEMBER(s3c240x_uart_1_r);
147   DECLARE_WRITE32_MEMBER(s3c240x_uart_1_w);
148   DECLARE_READ32_MEMBER(s3c240x_usb_device_r);
149   DECLARE_WRITE32_MEMBER(s3c240x_usb_device_w);
150   DECLARE_READ32_MEMBER(s3c240x_watchdog_r);
151   DECLARE_WRITE32_MEMBER(s3c240x_watchdog_w);
152   DECLARE_READ32_MEMBER(s3c240x_iic_r);
153   DECLARE_WRITE32_MEMBER(s3c240x_iic_w);
154   DECLARE_READ32_MEMBER(s3c240x_iis_r);
155   DECLARE_WRITE32_MEMBER(s3c240x_iis_w);
156   DECLARE_READ32_MEMBER(s3c240x_rtc_r);
157   DECLARE_WRITE32_MEMBER(s3c240x_rtc_w);
158   DECLARE_READ32_MEMBER(s3c240x_adc_r);
159   DECLARE_WRITE32_MEMBER(s3c240x_adc_w);
160   DECLARE_READ32_MEMBER(s3c240x_spi_r);
161   DECLARE_WRITE32_MEMBER(s3c240x_spi_w);
162   DECLARE_READ32_MEMBER(s3c240x_mmc_r);
163   DECLARE_WRITE32_MEMBER(s3c240x_mmc_w);
126164};
127165
128166
src/mess/includes/irisha.h
r14963r14964
1818   int m_keyboard_mask;
1919   UINT8 m_keypressed;
2020   UINT8 m_keyboard_cnt;
21   DECLARE_READ8_MEMBER(irisha_keyboard_r);
2122};
2223
2324
r14963r14964
3031extern const struct pit8253_config irisha_pit8253_intf;
3132extern const struct pic8259_interface irisha_pic8259_config;
3233
33extern READ8_HANDLER (irisha_keyboard_r);
3434
3535
3636/*----------- defined in video/irisha.c -----------*/
src/mess/includes/apple1.h
r14963r14964
4141   terminal_t *m_current_terminal;
4242   terminal_t *m_terminal;
4343   int m_blink_on;
44   DECLARE_READ8_MEMBER(apple1_cassette_r);
45   DECLARE_WRITE8_MEMBER(apple1_cassette_w);
4446};
4547
4648
r14963r14964
5254MACHINE_RESET( apple1 );
5355SNAPSHOT_LOAD( apple1 );
5456
55READ8_HANDLER( apple1_cassette_r );
56WRITE8_HANDLER( apple1_cassette_w );
5757
5858
5959/*----------- defined in video/apple1.c -----------*/
src/mess/includes/orion.h
r14963r14964
3434   UINT8 m_orionpro_128_page;
3535   UINT8 m_orionpro_rom2_segment;
3636   UINT8 m_orionpro_dispatcher;
37   DECLARE_READ8_MEMBER(orion128_system_r);
38   DECLARE_WRITE8_MEMBER(orion128_system_w);
39   DECLARE_READ8_MEMBER(orion128_romdisk_r);
40   DECLARE_WRITE8_MEMBER(orion128_romdisk_w);
41   DECLARE_WRITE8_MEMBER(orion128_video_mode_w);
42   DECLARE_WRITE8_MEMBER(orion128_video_page_w);
43   DECLARE_WRITE8_MEMBER(orion128_memory_page_w);
44   DECLARE_WRITE8_MEMBER(orion_disk_control_w);
45   DECLARE_READ8_MEMBER(orion128_floppy_r);
46   DECLARE_WRITE8_MEMBER(orion128_floppy_w);
47   DECLARE_READ8_MEMBER(orionz80_floppy_rtc_r);
48   DECLARE_WRITE8_MEMBER(orionz80_floppy_rtc_w);
49   DECLARE_WRITE8_MEMBER(orionz80_sound_w);
50   DECLARE_WRITE8_MEMBER(orionz80_sound_fe_w);
51   DECLARE_WRITE8_MEMBER(orionz80_memory_page_w);
52   DECLARE_WRITE8_MEMBER(orionz80_dispatcher_w);
53   DECLARE_READ8_MEMBER(orionz80_io_r);
54   DECLARE_WRITE8_MEMBER(orionz80_io_w);
55   DECLARE_WRITE8_MEMBER(orionpro_memory_page_w);
56   DECLARE_READ8_MEMBER(orionpro_io_r);
57   DECLARE_WRITE8_MEMBER(orionpro_io_w);
3758};
3859
3960
r14963r14964
4869extern MACHINE_RESET( orionz80 );
4970extern INTERRUPT_GEN( orionz80_interrupt );
5071
51extern READ8_HANDLER ( orion128_system_r );
52extern WRITE8_HANDLER ( orion128_system_w );
53extern READ8_HANDLER ( orion128_romdisk_r );
54extern WRITE8_HANDLER ( orion128_romdisk_w );
55extern WRITE8_HANDLER ( orion128_video_mode_w );
56extern WRITE8_HANDLER ( orion128_memory_page_w );
57extern WRITE8_HANDLER ( orion128_video_page_w );
58extern WRITE8_HANDLER ( orionz80_memory_page_w );
59extern WRITE8_HANDLER ( orionz80_dispatcher_w );
60extern WRITE8_HANDLER ( orionz80_sound_w );
61extern READ8_HANDLER ( orion128_floppy_r );
62extern WRITE8_HANDLER ( orion128_floppy_w );
63extern READ8_HANDLER ( orionz80_io_r );
64extern WRITE8_HANDLER ( orionz80_io_w );
6572
6673extern MACHINE_RESET( orionpro );
67extern READ8_HANDLER ( orionpro_io_r );
68extern WRITE8_HANDLER ( orionpro_io_w );
6974
7075/*----------- defined in video/orion.c -----------*/
7176
src/mess/includes/hec2hrp.h
r14963r14964
114114   int m_hector_flag_result;
115115   int m_print;
116116   UINT8 m_hector_videoram_hrx[0x04000];
117   DECLARE_READ8_MEMBER(hector_179x_register_r);
118   DECLARE_WRITE8_MEMBER(hector_179x_register_w);
119   DECLARE_WRITE8_MEMBER(hector_switch_bank_w);
120   DECLARE_WRITE8_MEMBER(hector_keyboard_w);
121   DECLARE_READ8_MEMBER(hector_keyboard_r);
122   DECLARE_WRITE8_MEMBER(hector_sn_2000_w);
123   DECLARE_WRITE8_MEMBER(hector_sn_2800_w);
124   DECLARE_READ8_MEMBER(hector_cassette_r);
125   DECLARE_WRITE8_MEMBER(hector_sn_3000_w);
126   DECLARE_WRITE8_MEMBER(hector_color_a_w);
127   DECLARE_WRITE8_MEMBER(hector_color_b_w);
128   DECLARE_READ8_MEMBER(hector_io_8255_r);
129   DECLARE_WRITE8_MEMBER(hector_io_8255_w);
130   DECLARE_WRITE8_MEMBER(hector_mx40_io_port_w);
131   DECLARE_WRITE8_MEMBER(hector_mx80_io_port_w);
117132};
118133
119134/*----------- defined in machine/hec2hrp.c -----------*/
120135
121136/* Protoype of memory Handler*/
122137WRITE8_HANDLER( hector_switch_bank_rom_w );
123WRITE8_HANDLER( hector_switch_bank_w );
124READ8_HANDLER( hector_keyboard_r );
125WRITE8_HANDLER( hector_keyboard_w );
126WRITE8_HANDLER( hector_sn_2000_w );
127WRITE8_HANDLER( hector_sn_2800_w );
128WRITE8_HANDLER( hector_sn_3000_w );
129READ8_HANDLER( hector_cassette_r );
130WRITE8_HANDLER( hector_color_a_w );
131WRITE8_HANDLER( hector_color_b_w );
132138
133139void hector_init( running_machine &machine);
134140void hector_reset(running_machine &machine, int hr, int with_D2);
r14963r14964
136142
137143/* Prototype of I/O Handler*/
138144READ8_HANDLER( hector_mx_io_port_r );
139WRITE8_HANDLER( hector_mx80_io_port_w );
140WRITE8_HANDLER( hector_mx40_io_port_w );
141 READ8_HANDLER( hector_io_8255_r);
142WRITE8_HANDLER( hector_io_8255_w);
143 READ8_HANDLER( hector_179x_register_r);
144WRITE8_HANDLER( hector_179x_register_w);
145145/*----------- defined in video/hec2video.c -----------*/
146146
147147void hector_80c(running_machine &machine, bitmap_ind16 &bitmap, UINT8 *page, int ymax, int yram) ;
src/mess/includes/bk.h
r14963r14964
2222   UINT16 m_key_pressed;
2323   UINT16 m_key_irq_vector;
2424   UINT16 m_drive;
25   DECLARE_READ16_MEMBER(bk_key_state_r);
26   DECLARE_READ16_MEMBER(bk_key_code_r);
27   DECLARE_READ16_MEMBER(bk_vid_scrool_r);
28   DECLARE_READ16_MEMBER(bk_key_press_r);
29   DECLARE_WRITE16_MEMBER(bk_key_state_w);
30   DECLARE_WRITE16_MEMBER(bk_vid_scrool_w);
31   DECLARE_WRITE16_MEMBER(bk_key_press_w);
32   DECLARE_READ16_MEMBER(bk_floppy_cmd_r);
33   DECLARE_WRITE16_MEMBER(bk_floppy_cmd_w);
34   DECLARE_READ16_MEMBER(bk_floppy_data_r);
35   DECLARE_WRITE16_MEMBER(bk_floppy_data_w);
2536};
2637
2738
r14963r14964
3041extern MACHINE_START( bk0010 );
3142extern MACHINE_RESET( bk0010 );
3243
33extern READ16_HANDLER (bk_key_state_r);
34extern WRITE16_HANDLER(bk_key_state_w);
35extern READ16_HANDLER (bk_key_code_r);
36extern READ16_HANDLER (bk_vid_scrool_r);
37extern WRITE16_HANDLER(bk_vid_scrool_w);
38extern READ16_HANDLER (bk_key_press_r);
39extern WRITE16_HANDLER(bk_key_press_w);
4044
41extern READ16_HANDLER (bk_floppy_cmd_r);
42extern WRITE16_HANDLER(bk_floppy_cmd_w);
43extern READ16_HANDLER (bk_floppy_data_r);
44extern WRITE16_HANDLER(bk_floppy_data_w);
4545
4646/*----------- defined in video/bk.c -----------*/
4747
src/mess/includes/a7800.h
r14963r14964
5353   int m_p2_one_button;
5454
5555   required_device<cpu_device> m_maincpu;
56   DECLARE_WRITE8_MEMBER(a7800_RAM0_w);
57   DECLARE_WRITE8_MEMBER(a7800_cart_w);
58   DECLARE_READ8_MEMBER(a7800_TIA_r);
59   DECLARE_WRITE8_MEMBER(a7800_TIA_w);
60   DECLARE_READ8_MEMBER(a7800_MARIA_r);
61   DECLARE_WRITE8_MEMBER(a7800_MARIA_w);
5662};
5763
5864
r14963r14964
6167VIDEO_START( a7800 );
6268SCREEN_UPDATE_IND16( a7800 );
6369TIMER_DEVICE_CALLBACK( a7800_interrupt );
64 READ8_HANDLER( a7800_MARIA_r );
65WRITE8_HANDLER( a7800_MARIA_w );
6670
6771
6872/*----------- defined in machine/a7800.c -----------*/
r14963r14964
7781DEVICE_START( a7800_cart );
7882DEVICE_IMAGE_LOAD( a7800_cart );
7983
80 READ8_HANDLER( a7800_TIA_r );
81WRITE8_HANDLER( a7800_TIA_w );
82WRITE8_HANDLER( a7800_RAM0_w );
83WRITE8_HANDLER( a7800_cart_w );
8484
8585DRIVER_INIT( a7800_ntsc );
8686DRIVER_INIT( a7800_pal );
src/mess/includes/nascom1.h
r14963r14964
3838   int m_tape_index;
3939   nascom1_portstat_t m_portstat;
4040   nascom2_fdc_t m_nascom2_fdc;
41   DECLARE_READ8_MEMBER(nascom2_fdc_select_r);
42   DECLARE_WRITE8_MEMBER(nascom2_fdc_select_w);
43   DECLARE_READ8_MEMBER(nascom2_fdc_status_r);
44   DECLARE_READ8_MEMBER(nascom1_port_00_r);
45   DECLARE_WRITE8_MEMBER(nascom1_port_00_w);
46   DECLARE_READ8_MEMBER(nascom1_port_01_r);
47   DECLARE_WRITE8_MEMBER(nascom1_port_01_w);
48   DECLARE_READ8_MEMBER(nascom1_port_02_r);
4149};
4250
4351
r14963r14964
5058DEVICE_IMAGE_UNLOAD( nascom1_cassette );
5159SNAPSHOT_LOAD( nascom1 );
5260
53READ8_HANDLER( nascom2_fdc_select_r );
54WRITE8_HANDLER( nascom2_fdc_select_w );
55READ8_HANDLER( nascom2_fdc_status_r );
5661
57READ8_HANDLER( nascom1_port_00_r );
58READ8_HANDLER( nascom1_port_01_r );
59READ8_HANDLER( nascom1_port_02_r );
60WRITE8_HANDLER( nascom1_port_00_w );
61WRITE8_HANDLER( nascom1_port_01_w );
6262
6363READ8_DEVICE_HANDLER( nascom1_hd6402_si );
6464WRITE8_DEVICE_HANDLER( nascom1_hd6402_so );
src/mess/includes/gmaster.h
r14963r14964
2525
2626   GMASTER_VIDEO m_video;
2727   GMASTER_MACHINE m_gmachine;
28   DECLARE_READ8_MEMBER(gmaster_io_r);
29   DECLARE_WRITE8_MEMBER(gmaster_io_w);
30   DECLARE_READ8_MEMBER(gmaster_port_r);
31   DECLARE_WRITE8_MEMBER(gmaster_port_w);
2832};
2933
3034
src/mess/includes/mtx.h
r14963r14964
4545
4646   /* timers */
4747   device_t *m_cassette_timer;
48   DECLARE_WRITE8_MEMBER(mtx_bankswitch_w);
49   DECLARE_WRITE8_MEMBER(mtx_sound_latch_w);
50   DECLARE_WRITE8_MEMBER(mtx_sense_w);
51   DECLARE_READ8_MEMBER(mtx_key_lo_r);
52   DECLARE_READ8_MEMBER(mtx_key_hi_r);
53   DECLARE_WRITE8_MEMBER(hrx_address_w);
54   DECLARE_READ8_MEMBER(hrx_data_r);
55   DECLARE_WRITE8_MEMBER(hrx_data_w);
56   DECLARE_READ8_MEMBER(hrx_attr_r);
57   DECLARE_WRITE8_MEMBER(hrx_attr_w);
4858};
4959
5060/*----------- defined in machine/mtx.c -----------*/
r14963r14964
5363MACHINE_RESET( mtx512 );
5464SNAPSHOT_LOAD( mtx );
5565
56WRITE8_HANDLER( mtx_bankswitch_w );
5766
5867/* Sound */
5968READ8_DEVICE_HANDLER( mtx_sound_strobe_r );
60WRITE8_HANDLER( mtx_sound_latch_w );
6169
6270/* Cassette */
6371WRITE8_DEVICE_HANDLER( mtx_cst_w );
r14963r14964
6775READ8_DEVICE_HANDLER( mtx_prt_r );
6876
6977/* Keyboard */
70WRITE8_HANDLER( mtx_sense_w );
71READ8_HANDLER( mtx_key_lo_r );
72READ8_HANDLER( mtx_key_hi_r );
7378
7479/* HRX */
75WRITE8_HANDLER( hrx_address_w );
76READ8_HANDLER( hrx_data_r );
77WRITE8_HANDLER( hrx_data_w );
78READ8_HANDLER( hrx_attr_r );
79WRITE8_HANDLER( hrx_attr_w );
8080
8181#endif /* __MTX_H__ */
src/mess/includes/microtan.h
r14963r14964
4242   int m_repeat;
4343   int m_repeater;
4444   tilemap_t *m_bg_tilemap;
45   DECLARE_READ8_MEMBER(microtan_sound_r);
46   DECLARE_WRITE8_MEMBER(microtan_sound_w);
47   DECLARE_READ8_MEMBER(microtan_bffx_r);
48   DECLARE_WRITE8_MEMBER(microtan_bffx_w);
49   DECLARE_WRITE8_MEMBER(microtan_videoram_w);
4550};
4651
4752
r14963r14964
5863
5964INTERRUPT_GEN( microtan_interrupt );
6065
61READ8_HANDLER ( microtan_bffx_r );
62READ8_HANDLER ( microtan_sound_r );
6366
64WRITE8_HANDLER ( microtan_bffx_w );
65WRITE8_HANDLER ( microtan_sound_w );
6667
67
6868/*----------- defined in video/microtan.c -----------*/
6969
70extern WRITE8_HANDLER ( microtan_videoram_w );
7170
7271extern VIDEO_START( microtan );
7372extern SCREEN_UPDATE_IND16( microtan );
src/mess/includes/sapi1.h
r14963r14964
1818   UINT8 m_keyboard_mask;
1919   UINT8 m_refresh_counter;
2020   UINT8 m_zps3_25;
21   DECLARE_READ8_MEMBER(sapi1_keyboard_r);
22   DECLARE_WRITE8_MEMBER(sapi1_keyboard_w);
23   DECLARE_WRITE8_MEMBER(sapizps3_00_w);
24   DECLARE_READ8_MEMBER(sapizps3_25_r);
25   DECLARE_WRITE8_MEMBER(sapizps3_25_w);
2126};
2227
2328
r14963r14964
2934extern MACHINE_RESET( sapi1 );
3035extern MACHINE_RESET( sapizps3 );
3136
32extern READ8_HANDLER (sapi1_keyboard_r );
33extern WRITE8_HANDLER(sapi1_keyboard_w );
3437
3538/*----------- defined in video/sapi1.c -----------*/
3639
src/mess/includes/einstein.h
r14963r14964
6767   UINT8   m_de;
6868
6969   static const floppy_format_type floppy_formats[];
70   DECLARE_WRITE8_MEMBER(einstein_80col_ram_w);
71   DECLARE_READ8_MEMBER(einstein_80col_ram_r);
72   DECLARE_READ8_MEMBER(einstein_80col_state_r);
73   DECLARE_WRITE8_MEMBER(einstein_keyboard_line_write);
74   DECLARE_READ8_MEMBER(einstein_keyboard_data_read);
75   DECLARE_WRITE8_MEMBER(einstein_rom_w);
76   DECLARE_READ8_MEMBER(einstein_kybintmsk_r);
77   DECLARE_WRITE8_MEMBER(einstein_kybintmsk_w);
78   DECLARE_WRITE8_MEMBER(einstein_adcintmsk_w);
79   DECLARE_WRITE8_MEMBER(einstein_fire_int_w);
7080};
7181
7282
src/mess/includes/mikro80.h
r14963r14964
2121   required_shared_ptr<UINT8> m_video_ram;
2222   int m_keyboard_mask;
2323   int m_key_mask;
24   DECLARE_READ8_MEMBER(mikro80_8255_portb_r);
25   DECLARE_READ8_MEMBER(mikro80_8255_portc_r);
26   DECLARE_WRITE8_MEMBER(mikro80_8255_porta_w);
27   DECLARE_WRITE8_MEMBER(mikro80_8255_portc_w);
28   DECLARE_READ8_MEMBER(mikro80_keyboard_r);
29   DECLARE_WRITE8_MEMBER(mikro80_keyboard_w);
30   DECLARE_WRITE8_MEMBER(mikro80_tape_w);
31   DECLARE_READ8_MEMBER(mikro80_tape_r);
2432};
2533
2634
r14963r14964
3139extern DRIVER_INIT( mikro80 );
3240extern DRIVER_INIT( radio99 );
3341extern MACHINE_RESET( mikro80 );
34extern READ8_HANDLER( mikro80_keyboard_r );
35extern WRITE8_HANDLER( mikro80_keyboard_w );
36extern READ8_HANDLER( mikro80_tape_r );
37extern WRITE8_HANDLER( mikro80_tape_w );
3842
39extern READ8_HANDLER (mikro80_8255_portb_r );
40extern READ8_HANDLER (mikro80_8255_portc_r );
41extern WRITE8_HANDLER (mikro80_8255_porta_w );
42extern WRITE8_HANDLER (mikro80_8255_portc_w );
4343/*----------- defined in video/mikro80.c -----------*/
4444
4545extern VIDEO_START( mikro80 );
src/mess/includes/amstrad.h
r14963r14964
112112   int m_printer_bit8_selected;
113113   unsigned char m_Psg_FunctionSelected;
114114   int m_previous_ppi_portc_w;
115   DECLARE_WRITE8_MEMBER(amstrad_plus_asic_4000_w);
116   DECLARE_WRITE8_MEMBER(amstrad_plus_asic_6000_w);
117   DECLARE_READ8_MEMBER(amstrad_plus_asic_4000_r);
118   DECLARE_READ8_MEMBER(amstrad_plus_asic_6000_r);
119   DECLARE_WRITE8_MEMBER(aleste_msx_mapper);
120   DECLARE_READ8_MEMBER(amstrad_cpc_io_r);
121   DECLARE_WRITE8_MEMBER(amstrad_cpc_io_w);
122   DECLARE_READ8_MEMBER(amstrad_psg_porta_read);
123   void amstrad_plus_seqcheck(int data);
115124};
116125
117126
118127/*----------- defined in machine/amstrad.c -----------*/
119128
120READ8_HANDLER ( amstrad_cpc_io_r );
121WRITE8_HANDLER ( amstrad_cpc_io_w );
122129
123WRITE8_HANDLER( amstrad_plus_asic_4000_w );
124WRITE8_HANDLER( amstrad_plus_asic_6000_w );
125READ8_HANDLER( amstrad_plus_asic_4000_r );
126READ8_HANDLER( amstrad_plus_asic_6000_r );
127130
128131READ8_DEVICE_HANDLER( amstrad_ppi_porta_r );
129132READ8_DEVICE_HANDLER( amstrad_ppi_portb_r );
130133WRITE8_DEVICE_HANDLER( amstrad_ppi_porta_w );
131134WRITE8_DEVICE_HANDLER( amstrad_ppi_portc_w );
132135
133READ8_HANDLER ( amstrad_psg_porta_read );
134136
135137WRITE_LINE_DEVICE_HANDLER( aleste_interrupt );
136138WRITE_LINE_DEVICE_HANDLER( cpc_irq_w );
src/mess/includes/rmnimbus.h
r14963r14964
196196   UINT16 m_pixel_mask;
197197   UINT8 m_hs_count;
198198   UINT32 m_debug_video;
199   DECLARE_READ16_MEMBER(nimbus_i186_internal_port_r);
200   DECLARE_WRITE16_MEMBER(nimbus_i186_internal_port_w);
201   DECLARE_READ8_MEMBER(nimbus_mcu_r);
202   DECLARE_WRITE8_MEMBER(nimbus_mcu_w);
203   DECLARE_READ16_MEMBER(nimbus_io_r);
204   DECLARE_WRITE16_MEMBER(nimbus_io_w);
205   DECLARE_READ8_MEMBER(nimbus_disk_r);
206   DECLARE_WRITE8_MEMBER(nimbus_disk_w);
207   DECLARE_READ8_MEMBER(nimbus_pc8031_r);
208   DECLARE_WRITE8_MEMBER(nimbus_pc8031_w);
209   DECLARE_READ8_MEMBER(nimbus_pc8031_iou_r);
210   DECLARE_WRITE8_MEMBER(nimbus_pc8031_iou_w);
211   DECLARE_READ8_MEMBER(nimbus_pc8031_port_r);
212   DECLARE_WRITE8_MEMBER(nimbus_pc8031_port_w);
213   DECLARE_READ8_MEMBER(nimbus_iou_r);
214   DECLARE_WRITE8_MEMBER(nimbus_iou_w);
215   DECLARE_READ8_MEMBER(nimbus_sound_ay8910_r);
216   DECLARE_WRITE8_MEMBER(nimbus_sound_ay8910_w);
217   DECLARE_WRITE8_MEMBER(nimbus_sound_ay8910_porta_w);
218   DECLARE_WRITE8_MEMBER(nimbus_sound_ay8910_portb_w);
219   DECLARE_READ8_MEMBER(nimbus_mouse_js_r);
220   DECLARE_WRITE8_MEMBER(nimbus_mouse_js_w);
221   DECLARE_READ16_MEMBER(nimbus_video_io_r);
222   DECLARE_WRITE16_MEMBER(nimbus_video_io_w);
199223};
200224
201225
r14963r14964
211235MACHINE_START(nimbus);
212236
213237/* 80186 Internal */
214READ16_HANDLER (nimbus_i186_internal_port_r);
215WRITE16_HANDLER (nimbus_i186_internal_port_w);
216238
217239/* external int priority masks */
218240
r14963r14964
246268#define BYTE_WORD               0x0001
247269
248270/* Nimbus specific */
249READ16_HANDLER (nimbus_io_r);
250WRITE16_HANDLER (nimbus_io_w);
251271
252272/* External int vectors for chained interupts */
253273#define EXTERNAL_INT_DISK       0x80
r14963r14964
275295#define HIBLOCK_BASE_MASK   0x08
276296#define HIBLOCK_SELECT_MASK 0x10
277297
278READ8_HANDLER( nimbus_mcu_r );
279WRITE8_HANDLER( nimbus_mcu_w );
280298
281299
282300/* Z80 SIO for keyboard */
r14963r14964
292310
293311extern const wd17xx_interface nimbus_wd17xx_interface;
294312
295READ8_HANDLER( nimbus_disk_r );
296WRITE8_HANDLER( nimbus_disk_w );
297313
298314#define NO_DRIVE_SELECTED   0xFF
299315
r14963r14964
362378#define IPC_IN_BYTE_AVAIL   0X02
363379#define IPC_IN_READ_PEND    0X04
364380
365READ8_HANDLER( nimbus_pc8031_r );
366WRITE8_HANDLER( nimbus_pc8031_w );
367381
368READ8_HANDLER( nimbus_pc8031_iou_r );
369WRITE8_HANDLER( nimbus_pc8031_iou_w );
370382
371READ8_HANDLER( nimbus_pc8031_port_r );
372WRITE8_HANDLER( nimbus_pc8031_port_w );
373383
374384#define ER59256_TAG             "er59256"
375385
r14963r14964
380390#define MOUSE_INT_ENABLE        0x08
381391#define PC8031_INT_ENABLE       0x10
382392
383READ8_HANDLER( nimbus_iou_r );
384WRITE8_HANDLER( nimbus_iou_w );
385393
386394/* Sound hardware */
387395
388396#define AY8910_TAG              "ay8910"
389397#define MONO_TAG                "mono"
390398
391READ8_HANDLER( nimbus_sound_ay8910_r );
392WRITE8_HANDLER( nimbus_sound_ay8910_w );
393399
394WRITE8_HANDLER( nimbus_sound_ay8910_porta_w );
395WRITE8_HANDLER( nimbus_sound_ay8910_portb_w );
396400
397401
398402#define MSM5205_TAG             "msm5205"
r14963r14964
413417   MOUSE_PHASE_NEGATIVE
414418};
415419
416READ8_HANDLER( nimbus_mouse_js_r );
417WRITE8_HANDLER( nimbus_mouse_js_w );
418420
419421#define MOUSE_INT_ENABLED(state)     (((state)->m_iou_reg092 & MOUSE_INT_ENABLE) ? 1 : 0)
420422
r14963r14964
432434
433435/*----------- defined in video/rmnimbus.c -----------*/
434436
435READ16_HANDLER (nimbus_video_io_r);
436WRITE16_HANDLER (nimbus_video_io_w);
437437
438438VIDEO_START( nimbus );
439439SCREEN_VBLANK( nimbus );
src/mess/includes/sms.h
r14963r14964
130130      bool m_93c46_enabled;
131131      UINT8 m_93c46_lines;
132132   } m_cartridge[MAX_CARTRIDGES];
133   DECLARE_WRITE8_MEMBER(sms_input_write);
134   DECLARE_WRITE8_MEMBER(sms_fm_detect_w);
135   DECLARE_READ8_MEMBER(sms_fm_detect_r);
136   DECLARE_WRITE8_MEMBER(sms_io_control_w);
137   DECLARE_READ8_MEMBER(sms_count_r);
138   DECLARE_READ8_MEMBER(sms_input_port_0_r);
139   DECLARE_READ8_MEMBER(sms_input_port_1_r);
140   DECLARE_WRITE8_MEMBER(sms_ym2413_register_port_0_w);
141   DECLARE_WRITE8_MEMBER(sms_ym2413_data_port_0_w);
142   DECLARE_READ8_MEMBER(gg_input_port_2_r);
143   DECLARE_READ8_MEMBER(sms_sscope_r);
144   DECLARE_WRITE8_MEMBER(sms_sscope_w);
145   DECLARE_READ8_MEMBER(sms_mapper_r);
146   DECLARE_WRITE8_MEMBER(sms_tvdraw_axis_w);
147   DECLARE_READ8_MEMBER(sms_tvdraw_status_r);
148   DECLARE_READ8_MEMBER(sms_tvdraw_data_r);
149   DECLARE_WRITE8_MEMBER(sms_93c46_w);
150   DECLARE_READ8_MEMBER(sms_93c46_r);
151   DECLARE_WRITE8_MEMBER(sms_mapper_w);
152   DECLARE_WRITE8_MEMBER(sms_korean_zemina_banksw_w);
153   DECLARE_WRITE8_MEMBER(sms_codemasters_page0_w);
154   DECLARE_WRITE8_MEMBER(sms_codemasters_page1_w);
155   DECLARE_WRITE8_MEMBER(sms_4pak_page0_w);
156   DECLARE_WRITE8_MEMBER(sms_4pak_page1_w);
157   DECLARE_WRITE8_MEMBER(sms_4pak_page2_w);
158   DECLARE_WRITE8_MEMBER(sms_janggun_bank0_w);
159   DECLARE_WRITE8_MEMBER(sms_janggun_bank1_w);
160   DECLARE_WRITE8_MEMBER(sms_janggun_bank2_w);
161   DECLARE_WRITE8_MEMBER(sms_janggun_bank3_w);
162   DECLARE_WRITE8_MEMBER(sms_bios_w);
163   DECLARE_WRITE8_MEMBER(sms_cartram2_w);
164   DECLARE_WRITE8_MEMBER(sms_cartram_w);
165   DECLARE_WRITE8_MEMBER(gg_sio_w);
166   DECLARE_READ8_MEMBER(gg_sio_r);
167   DECLARE_READ8_MEMBER(sms_store_cart_select_r);
168   DECLARE_WRITE8_MEMBER(sms_store_cart_select_w);
169   DECLARE_READ8_MEMBER(sms_store_select1);
170   DECLARE_READ8_MEMBER(sms_store_select2);
171   DECLARE_READ8_MEMBER(sms_store_control_r);
172   DECLARE_WRITE8_MEMBER(sms_store_control_w);
133173};
134174
135175
136176/*----------- defined in machine/sms.c -----------*/
137177
138178/* Function prototypes */
139WRITE8_HANDLER( sms_cartram_w );
140WRITE8_HANDLER( sms_cartram2_w );
141WRITE8_HANDLER( sms_fm_detect_w );
142READ8_HANDLER( sms_fm_detect_r );
143READ8_HANDLER( sms_input_port_0_r );
144READ8_HANDLER( sms_input_port_1_r );
145WRITE8_HANDLER( sms_ym2413_register_port_0_w );
146WRITE8_HANDLER( sms_ym2413_data_port_0_w );
147WRITE8_HANDLER( sms_io_control_w );
148READ8_HANDLER( sms_count_r );
149WRITE8_HANDLER( sms_sscope_w );
150READ8_HANDLER( sms_sscope_r );
151WRITE8_HANDLER( sms_mapper_w );
152READ8_HANDLER( sms_mapper_r );
153WRITE8_HANDLER( sms_bios_w );
154WRITE8_HANDLER( gg_sio_w );
155READ8_HANDLER( gg_sio_r );
156READ8_HANDLER( gg_input_port_2_r );
157179
158180INPUT_CHANGED( lgun1_changed );
159181INPUT_CHANGED( lgun2_changed );
r14963r14964
167189MACHINE_START( sms );
168190MACHINE_RESET( sms );
169191
170READ8_HANDLER( sms_store_cart_select_r );
171WRITE8_HANDLER( sms_store_cart_select_w );
172READ8_HANDLER( sms_store_select1 );
173READ8_HANDLER( sms_store_select2 );
174READ8_HANDLER( sms_store_control_r );
175WRITE8_HANDLER( sms_store_control_w );
176192
177193#define IO_EXPANSION    (0x80)   /* Expansion slot enable (1= disabled, 0= enabled) */
178194#define IO_CARTRIDGE    (0x40)   /* Cartridge slot enable (1= disabled, 0= enabled) */
src/mess/includes/poly88.h
r14963r14964
2727   int m_previous_level;
2828   int m_clk_level;
2929   int m_clk_level_tape;
30   DECLARE_WRITE8_MEMBER(poly88_baud_rate_w);
31   DECLARE_READ8_MEMBER(poly88_keyboard_r);
32   DECLARE_WRITE8_MEMBER(poly88_intr_w);
3033};
3134
3235
r14963r14964
3538DRIVER_INIT(poly88);
3639MACHINE_RESET(poly88);
3740INTERRUPT_GEN( poly88_interrupt );
38READ8_HANDLER(poly88_keyboard_r);
39WRITE8_HANDLER(poly88_intr_w);
40WRITE8_HANDLER(poly88_baud_rate_w);
4141
4242extern const i8251_interface poly88_usart_interface;
4343
src/mess/includes/llc.h
r14963r14964
2020   optional_shared_ptr<UINT8> m_video_ram;
2121   UINT8 m_s_code;
2222   UINT8 m_llc1_key_state;
23   DECLARE_WRITE8_MEMBER(llc2_rom_disable_w);
24   DECLARE_WRITE8_MEMBER(llc2_basic_enable_w);
2325};
2426
2527
r14963r14964
3638
3739extern DRIVER_INIT( llc2 );
3840extern MACHINE_RESET( llc2 );
39extern WRITE8_HANDLER(llc2_rom_disable_w);
40extern WRITE8_HANDLER(llc2_basic_enable_w);
4141
4242/*----------- defined in video/llc.c -----------*/
4343
src/mess/includes/samcoupe.h
r14963r14964
6161   UINT8 m_mouse_data[9];
6262   int m_mouse_x, m_mouse_y;
6363   UINT8 *m_videoram;
64   DECLARE_WRITE8_MEMBER(samcoupe_ext_mem_w);
65   DECLARE_READ8_MEMBER(samcoupe_disk_r);
66   DECLARE_WRITE8_MEMBER(samcoupe_disk_w);
67   DECLARE_READ8_MEMBER(samcoupe_pen_r);
68   DECLARE_WRITE8_MEMBER(samcoupe_clut_w);
69   DECLARE_READ8_MEMBER(samcoupe_status_r);
70   DECLARE_WRITE8_MEMBER(samcoupe_line_int_w);
71   DECLARE_READ8_MEMBER(samcoupe_lmpr_r);
72   DECLARE_WRITE8_MEMBER(samcoupe_lmpr_w);
73   DECLARE_READ8_MEMBER(samcoupe_hmpr_r);
74   DECLARE_WRITE8_MEMBER(samcoupe_hmpr_w);
75   DECLARE_READ8_MEMBER(samcoupe_vmpr_r);
76   DECLARE_WRITE8_MEMBER(samcoupe_vmpr_w);
77   DECLARE_READ8_MEMBER(samcoupe_midi_r);
78   DECLARE_WRITE8_MEMBER(samcoupe_midi_w);
79   DECLARE_READ8_MEMBER(samcoupe_keyboard_r);
80   DECLARE_WRITE8_MEMBER(samcoupe_border_w);
81   DECLARE_READ8_MEMBER(samcoupe_attributes_r);
6482};
6583
6684
r14963r14964
7492void samcoupe_update_memory(address_space *space);
7593UINT8 samcoupe_mouse_r(running_machine &machine);
7694
77WRITE8_HANDLER( samcoupe_ext_mem_w );
7895MACHINE_START( samcoupe );
7996MACHINE_RESET( samcoupe );
8097
src/mess/includes/pp01.h
r14963r14964
2020   UINT8 m_memory_block[16];
2121   UINT8 m_video_write_mode;
2222   UINT8 m_key_line;
23   DECLARE_WRITE8_MEMBER(pp01_video_write_mode_w);
24   DECLARE_WRITE8_MEMBER(pp01_video_r_1_w);
25   DECLARE_WRITE8_MEMBER(pp01_video_g_1_w);
26   DECLARE_WRITE8_MEMBER(pp01_video_b_1_w);
27   DECLARE_WRITE8_MEMBER(pp01_video_r_2_w);
28   DECLARE_WRITE8_MEMBER(pp01_video_g_2_w);
29   DECLARE_WRITE8_MEMBER(pp01_video_b_2_w);
30   DECLARE_WRITE8_MEMBER(pp01_mem_block_w);
31   DECLARE_READ8_MEMBER(pp01_mem_block_r);
2332};
2433
2534
r14963r14964
2837extern const i8255_interface pp01_ppi8255_interface;
2938extern MACHINE_START( pp01 );
3039extern MACHINE_RESET( pp01 );
31extern WRITE8_HANDLER (pp01_mem_block_w);
32extern READ8_HANDLER  (pp01_mem_block_r);
33extern WRITE8_HANDLER (pp01_video_write_mode_w);
3440/*----------- defined in video/pp01.c -----------*/
3541
3642extern VIDEO_START( pp01 );
src/mess/includes/odyssey2.h
r14963r14964
9595   sound_stream *m_sh_channel;
9696   UINT16 m_sh_count;
9797   //ef9341_t ef9341;
98   DECLARE_READ8_MEMBER(odyssey2_t0_r);
99   DECLARE_READ8_MEMBER(odyssey2_bus_r);
100   DECLARE_WRITE8_MEMBER(odyssey2_bus_w);
101   DECLARE_READ8_MEMBER(g7400_bus_r);
102   DECLARE_WRITE8_MEMBER(g7400_bus_w);
103   DECLARE_READ8_MEMBER(odyssey2_getp1);
104   DECLARE_WRITE8_MEMBER(odyssey2_putp1);
105   DECLARE_READ8_MEMBER(odyssey2_getp2);
106   DECLARE_WRITE8_MEMBER(odyssey2_putp2);
107   DECLARE_READ8_MEMBER(odyssey2_getbus);
108   DECLARE_WRITE8_MEMBER(odyssey2_putbus);
109   DECLARE_READ8_MEMBER(odyssey2_video_r);
110   DECLARE_WRITE8_MEMBER(odyssey2_video_w);
111   DECLARE_WRITE8_MEMBER(odyssey2_lum_w);
112   DECLARE_READ8_MEMBER(odyssey2_t1_r);
98113};
99114
100115
r14963r14964
105120VIDEO_START( odyssey2 );
106121SCREEN_UPDATE_IND16( odyssey2 );
107122PALETTE_INIT( odyssey2 );
108READ8_HANDLER ( odyssey2_t1_r );
109READ8_HANDLER ( odyssey2_video_r );
110WRITE8_HANDLER ( odyssey2_video_w );
111WRITE8_HANDLER ( odyssey2_lum_w );
112123
113124STREAM_UPDATE( odyssey2_sh_update );
114125
r14963r14964
123134MACHINE_RESET( odyssey2 );
124135
125136/* i/o ports */
126READ8_HANDLER ( odyssey2_bus_r );
127WRITE8_HANDLER ( odyssey2_bus_w );
128137
129READ8_HANDLER( odyssey2_getp1 );
130WRITE8_HANDLER ( odyssey2_putp1 );
131138
132READ8_HANDLER( odyssey2_getp2 );
133WRITE8_HANDLER ( odyssey2_putp2 );
134139
135READ8_HANDLER( odyssey2_getbus );
136WRITE8_HANDLER ( odyssey2_putbus );
137140
138READ8_HANDLER( odyssey2_t0_r );
139141void odyssey2_the_voice_lrq_callback( device_t *device, int state );
140142
141READ8_HANDLER ( g7400_bus_r );
142WRITE8_HANDLER ( g7400_bus_w );
143143
144144int odyssey2_cart_verify(const UINT8 *cartdata, size_t size);
145145
src/mess/includes/primo.h
r14963r14964
2323   UINT16 m_video_memory_base;
2424   UINT8 m_port_FD;
2525   int m_nmi;
26   DECLARE_READ8_MEMBER(primo_be_1_r);
27   DECLARE_READ8_MEMBER(primo_be_2_r);
28   DECLARE_WRITE8_MEMBER(primo_ki_1_w);
29   DECLARE_WRITE8_MEMBER(primo_ki_2_w);
30   DECLARE_WRITE8_MEMBER(primo_FD_w);
2631};
2732
2833
2934/*----------- defined in machine/primo.c -----------*/
3035
31extern READ8_HANDLER ( primo_be_1_r );
32extern READ8_HANDLER ( primo_be_2_r );
33extern WRITE8_HANDLER ( primo_ki_1_w );
34extern WRITE8_HANDLER ( primo_ki_2_w );
35extern WRITE8_HANDLER ( primo_FD_w );
3636extern DRIVER_INIT ( primo32 );
3737extern DRIVER_INIT ( primo48 );
3838extern DRIVER_INIT ( primo64 );
src/mess/includes/ti85.h
r14963r14964
5757   int m_ti_number_of_frames;
5858   UINT8 * m_frames;
5959   UINT8 * m_bios;
60   DECLARE_READ8_MEMBER(ti85_port_0000_r);
61   DECLARE_READ8_MEMBER(ti8x_keypad_r);
62   DECLARE_READ8_MEMBER(ti85_port_0006_r);
63   DECLARE_READ8_MEMBER(ti8x_serial_r);
64   DECLARE_READ8_MEMBER(ti86_port_0005_r);
65   DECLARE_READ8_MEMBER(ti83_port_0000_r);
66   DECLARE_READ8_MEMBER(ti8x_plus_serial_r);
67   DECLARE_WRITE8_MEMBER(ti81_port_0007_w);
68   DECLARE_WRITE8_MEMBER(ti85_port_0000_w);
69   DECLARE_WRITE8_MEMBER(ti8x_keypad_w);
70   DECLARE_WRITE8_MEMBER(ti85_port_0002_w);
71   DECLARE_WRITE8_MEMBER(ti85_port_0003_w);
72   DECLARE_WRITE8_MEMBER(ti85_port_0004_w);
73   DECLARE_WRITE8_MEMBER(ti85_port_0005_w);
74   DECLARE_WRITE8_MEMBER(ti85_port_0006_w);
75   DECLARE_WRITE8_MEMBER(ti8x_serial_w);
76   DECLARE_WRITE8_MEMBER(ti86_port_0005_w);
77   DECLARE_WRITE8_MEMBER(ti86_port_0006_w);
78   DECLARE_WRITE8_MEMBER(ti82_port_0002_w);
79   DECLARE_WRITE8_MEMBER(ti83_port_0000_w);
80   DECLARE_WRITE8_MEMBER(ti83_port_0002_w);
81   DECLARE_WRITE8_MEMBER(ti83_port_0003_w);
82   DECLARE_WRITE8_MEMBER(ti8x_plus_serial_w);
83   DECLARE_WRITE8_MEMBER(ti83p_port_0002_w);
84   DECLARE_WRITE8_MEMBER(ti83p_port_0003_w);
85   DECLARE_WRITE8_MEMBER(ti83p_port_0004_w);
86   DECLARE_WRITE8_MEMBER(ti83p_port_0006_w);
87   DECLARE_WRITE8_MEMBER(ti83p_port_0007_w);
88   DECLARE_READ8_MEMBER( ti85_port_0002_r );
89   DECLARE_READ8_MEMBER( ti85_port_0003_r );
90   DECLARE_READ8_MEMBER( ti85_port_0004_r );
91   DECLARE_READ8_MEMBER( ti85_port_0005_r );
92   DECLARE_READ8_MEMBER( ti86_port_0006_r );
93   DECLARE_READ8_MEMBER( ti82_port_0002_r );
94   DECLARE_READ8_MEMBER( ti83_port_0002_r );
95   DECLARE_READ8_MEMBER( ti83_port_0003_r );
96   DECLARE_READ8_MEMBER( ti83p_port_0002_r );
6097};
6198
6299
r14963r14964
72109
73110SNAPSHOT_LOAD( ti8x );
74111
75WRITE8_HANDLER( ti81_port_0007_w );
76 READ8_HANDLER( ti85_port_0000_r );
77 READ8_HANDLER( ti8x_keypad_r );
78 READ8_HANDLER( ti85_port_0002_r );
79 READ8_HANDLER( ti85_port_0003_r );
80 READ8_HANDLER( ti85_port_0004_r );
81 READ8_HANDLER( ti85_port_0005_r );
82 READ8_HANDLER( ti85_port_0006_r );
83 READ8_HANDLER( ti8x_serial_r );
84 READ8_HANDLER( ti86_port_0005_r );
85 READ8_HANDLER( ti86_port_0006_r );
86 READ8_HANDLER( ti82_port_0002_r );
87 READ8_HANDLER( ti83_port_0000_r );
88 READ8_HANDLER( ti83_port_0002_r );
89 READ8_HANDLER( ti83_port_0003_r );
90 READ8_HANDLER( ti8x_plus_serial_r );
91 READ8_HANDLER( ti83p_port_0002_r );
92WRITE8_HANDLER( ti85_port_0000_w );
93WRITE8_HANDLER( ti8x_keypad_w );
94WRITE8_HANDLER( ti85_port_0002_w );
95WRITE8_HANDLER( ti85_port_0003_w );
96WRITE8_HANDLER( ti85_port_0004_w );
97WRITE8_HANDLER( ti85_port_0005_w );
98WRITE8_HANDLER( ti85_port_0006_w );
99WRITE8_HANDLER( ti8x_serial_w );
100WRITE8_HANDLER( ti86_port_0005_w );
101WRITE8_HANDLER( ti86_port_0006_w );
102WRITE8_HANDLER( ti82_port_0002_w );
103WRITE8_HANDLER( ti83_port_0000_w );
104WRITE8_HANDLER( ti83_port_0002_w );
105WRITE8_HANDLER( ti83_port_0003_w );
106WRITE8_HANDLER( ti8x_plus_serial_w );
107WRITE8_HANDLER( ti83p_port_0002_w );
108WRITE8_HANDLER( ti83p_port_0003_w );
109WRITE8_HANDLER( ti83p_port_0004_w );
110WRITE8_HANDLER( ti83p_port_0006_w );
111WRITE8_HANDLER( ti83p_port_0007_w );
112112
113113/*----------- defined in video/ti85.c -----------*/
114114
src/mess/includes/svision.h
r14963r14964
4343   svision_t m_svision;
4444   svision_pet_t m_pet;
4545   tvlink_t m_tvlink;
46   DECLARE_READ8_MEMBER(svision_r);
47   DECLARE_WRITE8_MEMBER(svision_w);
48   DECLARE_READ8_MEMBER(tvlink_r);
49   DECLARE_WRITE8_MEMBER(tvlink_w);
4650};
4751
4852
src/mess/includes/svi318.h
r14963r14964
5656   UINT8 *m_pcart;
5757   UINT32 m_pcart_rom_size;
5858   SVI318_FDC_STRUCT m_fdc;
59   DECLARE_WRITE8_MEMBER(svi318_ppi_w);
60   DECLARE_READ8_MEMBER(svi318_psg_port_a_r);
61   DECLARE_WRITE8_MEMBER(svi318_psg_port_b_w);
62   DECLARE_WRITE8_MEMBER(svi318_fdc_drive_motor_w);
63   DECLARE_WRITE8_MEMBER(svi318_fdc_density_side_w);
64   DECLARE_READ8_MEMBER(svi318_fdc_irqdrq_r);
65   DECLARE_WRITE8_MEMBER(svi806_ram_enable_w);
66   DECLARE_WRITE8_MEMBER(svi318_writemem1);
67   DECLARE_WRITE8_MEMBER(svi318_writemem2);
68   DECLARE_WRITE8_MEMBER(svi318_writemem3);
69   DECLARE_WRITE8_MEMBER(svi318_writemem4);
70   DECLARE_READ8_MEMBER(svi318_io_ext_r);
71   DECLARE_WRITE8_MEMBER(svi318_io_ext_w);
5972};
6073
6174
r14963r14964
7487DEVICE_IMAGE_LOAD( svi318_cart );
7588DEVICE_IMAGE_UNLOAD( svi318_cart );
7689
77WRITE8_HANDLER( svi318_writemem1 );
78WRITE8_HANDLER( svi318_writemem2 );
79WRITE8_HANDLER( svi318_writemem3 );
80WRITE8_HANDLER( svi318_writemem4 );
8190
82READ8_HANDLER( svi318_io_ext_r );
83WRITE8_HANDLER( svi318_io_ext_w );
8491
85WRITE8_HANDLER( svi318_ppi_w );
86WRITE8_HANDLER( svi318_psg_port_b_w );
87READ8_HANDLER( svi318_psg_port_a_r );
8892
8993int svi318_cassette_present(running_machine &machine, int id);
9094
src/mess/includes/busicom.h
r14963r14964
2020   UINT8 m_timer;
2121   UINT8 m_printer_line[11][17];
2222   UINT8 m_printer_line_color[11];
23   DECLARE_READ8_MEMBER(keyboard_r);
24   DECLARE_READ8_MEMBER(printer_r);
25   DECLARE_WRITE8_MEMBER(shifter_w);
26   DECLARE_WRITE8_MEMBER(printer_w);
27   DECLARE_WRITE8_MEMBER(status_w);
28   DECLARE_WRITE8_MEMBER(printer_ctrl_w);
2329};
2430
2531
src/mess/includes/pc.h
r14963r14964
4141   UINT8               m_ppi_data_signal;
4242   UINT8               m_ppi_shift_register;
4343   UINT8               m_ppi_shift_enable;
44   DECLARE_READ8_MEMBER(pc_page_r);
45   DECLARE_WRITE8_MEMBER(pc_page_w);
46   DECLARE_READ8_MEMBER(pc_dma_read_byte);
47   DECLARE_WRITE8_MEMBER(pc_dma_write_byte);
48   DECLARE_WRITE8_MEMBER(pc_nmi_enable_w);
49   DECLARE_READ8_MEMBER(pcjr_nmi_enable_r);
50   DECLARE_WRITE8_MEMBER(ibm5150_kb_set_clock_signal);
51   DECLARE_WRITE8_MEMBER(ibm5150_kb_set_data_signal);
52   DECLARE_READ8_MEMBER(input_port_0_r);
53   DECLARE_READ8_MEMBER(pc_rtc_r);
54   DECLARE_WRITE8_MEMBER(pc_rtc_w);
55   DECLARE_WRITE8_MEMBER(pc_EXP_w);
56   DECLARE_READ8_MEMBER(pc_EXP_r);
57   DECLARE_READ8_MEMBER(unk_r);
4458};
4559
4660/*----------- defined in machine/pc.c -----------*/
r14963r14964
6377
6478void mess_init_pc_common( running_machine &machine, UINT32 flags, void (*set_keyb_int_func)(running_machine &, int), void (*set_hdc_int_func)(running_machine &,int,int));
6579
66WRITE8_HANDLER( pc_nmi_enable_w );
67READ8_HANDLER( pcjr_nmi_enable_r );
6880
69READ8_HANDLER( pc_page_r );
70WRITE8_HANDLER( pc_page_w );
7181
72WRITE8_HANDLER( ibm5150_kb_set_clock_signal );
73WRITE8_HANDLER( ibm5150_kb_set_data_signal );
7482
7583DRIVER_INIT( ibm5150 );
7684DRIVER_INIT( pccga );
r14963r14964
97105TIMER_DEVICE_CALLBACK( pcjr_frame_interrupt );
98106
99107
100READ8_HANDLER( pc_rtc_r );
101WRITE8_HANDLER( pc_rtc_w );
102108
103READ16_HANDLER( pc16le_rtc_r );
104WRITE16_HANDLER( pc16le_rtc_w );
105109
106110void pc_rtc_init(running_machine &machine);
107111
108READ8_HANDLER ( pc_EXP_r );
109WRITE8_HANDLER ( pc_EXP_w );
110112
111113#endif /* PC_H_ */
src/mess/includes/pecom.h
r14963r14964
2929   /* timers */
3030   emu_timer *m_reset_timer;   /* power on reset timer */
3131
32   DECLARE_READ8_MEMBER(pecom_cdp1869_charram_r);
33   DECLARE_WRITE8_MEMBER(pecom_cdp1869_charram_w);
34   DECLARE_READ8_MEMBER(pecom_cdp1869_pageram_r);
35   DECLARE_WRITE8_MEMBER(pecom_cdp1869_pageram_w);
36   DECLARE_WRITE8_MEMBER(pecom_bank_w);
37   DECLARE_READ8_MEMBER(pecom_keyboard_r);
38   DECLARE_WRITE8_MEMBER(pecom_cdp1869_w);
3239};
3340
3441/*----------- defined in machine/pecom.c -----------*/
3542
3643extern MACHINE_START( pecom );
3744extern MACHINE_RESET( pecom );
38extern WRITE8_HANDLER( pecom_bank_w );
39extern READ8_HANDLER (pecom_keyboard_r);
4045
4146extern const cosmac_interface pecom64_cdp1802_config;
4247
4348/* ---------- defined in video/pecom.c ---------- */
4449
45WRITE8_HANDLER( pecom_cdp1869_w );
4650MACHINE_CONFIG_EXTERN( pecom_video );
4751
4852#endif
src/mess/includes/pce.h
r14963r14964
121121   int m_joystick_port_select;
122122   int m_joystick_data_select;
123123   UINT8 m_joy_6b_packet[5];
124   DECLARE_WRITE8_MEMBER(pce_sf2_banking_w);
125   DECLARE_WRITE8_MEMBER(pce_cartridge_ram_w);
126   DECLARE_WRITE8_MEMBER(mess_pce_joystick_w);
127   DECLARE_READ8_MEMBER(mess_pce_joystick_r);
128   DECLARE_WRITE8_MEMBER(pce_cd_bram_w);
129   DECLARE_WRITE8_MEMBER(pce_cd_intf_w);
130   DECLARE_READ8_MEMBER(pce_cd_intf_r);
131   DECLARE_READ8_MEMBER(pce_cd_acard_r);
132   DECLARE_WRITE8_MEMBER(pce_cd_acard_w);
133   DECLARE_READ8_MEMBER(pce_cd_acard_wram_r);
134   DECLARE_WRITE8_MEMBER(pce_cd_acard_wram_w);
124135};
125136
126137
127138/*----------- defined in machine/pce.c -----------*/
128139
129140DEVICE_IMAGE_LOAD(pce_cart);
130WRITE8_HANDLER ( mess_pce_joystick_w );
131 READ8_HANDLER ( mess_pce_joystick_r );
132141
133142extern const msm5205_interface pce_cd_msm5205_interface;
134WRITE8_HANDLER( pce_cd_bram_w );
135WRITE8_HANDLER( pce_cd_intf_w );
136READ8_HANDLER( pce_cd_intf_r );
137WRITE8_HANDLER( pce_cd_acard_w );
138READ8_HANDLER( pce_cd_acard_r );
139WRITE8_HANDLER( pce_cd_acard_wram_w );
140READ8_HANDLER( pce_cd_acard_wram_r );
141143
142144DRIVER_INIT( mess_pce );
143145DRIVER_INIT( tg16 );
src/mess/includes/pk8020.h
r14963r14964
3232   UINT8 m_portc_data;
3333   UINT8 m_sound_gate;
3434   UINT8 m_sound_level;
35   DECLARE_READ8_MEMBER(keyboard_r);
36   DECLARE_READ8_MEMBER(sysreg_r);
37   DECLARE_WRITE8_MEMBER(sysreg_w);
38   DECLARE_READ8_MEMBER(text_r);
39   DECLARE_WRITE8_MEMBER(text_w);
40   DECLARE_READ8_MEMBER(gzu_r);
41   DECLARE_WRITE8_MEMBER(gzu_w);
42   DECLARE_READ8_MEMBER(devices_r);
43   DECLARE_WRITE8_MEMBER(devices_w);
3544};
3645
3746
src/mess/includes/galaxy.h
r14963r14964
2424   UINT32 m_start_addr;
2525   emu_timer *m_gal_video_timer;
2626   bitmap_ind16 m_bitmap;
27   DECLARE_READ8_MEMBER(galaxy_keyboard_r);
28   DECLARE_WRITE8_MEMBER(galaxy_latch_w);
2729};
2830
2931
r14963r14964
3335MACHINE_RESET( galaxy );
3436INTERRUPT_GEN( galaxy_interrupt );
3537SNAPSHOT_LOAD( galaxy );
36READ8_HANDLER( galaxy_keyboard_r );
37WRITE8_HANDLER( galaxy_latch_w );
3838
3939MACHINE_RESET( galaxyp );
4040
src/mess/includes/bbc.h
r14963r14964
219219   int *m_videoULA_pallet_lookup;
220220
221221   void (*m_draw_function)(running_machine &machine);
222   DECLARE_WRITE8_MEMBER(bbc_page_selecta_w);
223   DECLARE_WRITE8_MEMBER(bbc_memorya1_w);
224   DECLARE_WRITE8_MEMBER(bbc_page_selectb_w);
225   DECLARE_WRITE8_MEMBER(bbc_memoryb3_w);
226   DECLARE_WRITE8_MEMBER(bbc_memoryb4_w);
227   DECLARE_WRITE8_MEMBER(bbc_page_selectbp_w);
228   DECLARE_WRITE8_MEMBER(bbc_memorybp1_w);
229   DECLARE_WRITE8_MEMBER(bbc_memorybp2_w);
230   DECLARE_WRITE8_MEMBER(bbc_memorybp4_w);
231   DECLARE_WRITE8_MEMBER(bbc_memorybp4_128_w);
232   DECLARE_WRITE8_MEMBER(bbc_memorybp6_128_w);
233   DECLARE_READ8_MEMBER(bbcm_ACCCON_read);
234   DECLARE_WRITE8_MEMBER(bbcm_ACCCON_write);
235   DECLARE_WRITE8_MEMBER(page_selectbm_w);
236   DECLARE_WRITE8_MEMBER(bbc_memorybm1_w);
237   DECLARE_WRITE8_MEMBER(bbc_memorybm2_w);
238   DECLARE_WRITE8_MEMBER(bbc_memorybm4_w);
239   DECLARE_WRITE8_MEMBER(bbc_memorybm5_w);
240   DECLARE_WRITE8_MEMBER(bbc_memorybm7_w);
241   DECLARE_READ8_MEMBER(bbcm_r);
242   DECLARE_WRITE8_MEMBER(bbcm_w);
243   DECLARE_WRITE8_MEMBER(bbc_SerialULA_w);
244   DECLARE_READ8_MEMBER(bbc_i8271_read);
245   DECLARE_WRITE8_MEMBER(bbc_i8271_write);
246   DECLARE_WRITE8_MEMBER(bbc_wd177x_status_w);
247   DECLARE_READ8_MEMBER(bbc_wd1770_read);
248   DECLARE_WRITE8_MEMBER(bbc_wd1770_write);
249   DECLARE_WRITE8_MEMBER(bbc_opus_status_w);
250   DECLARE_READ8_MEMBER(bbc_opus_read);
251   DECLARE_WRITE8_MEMBER(bbc_opus_write);
252   DECLARE_READ8_MEMBER(bbcm_wd1770_read);
253   DECLARE_WRITE8_MEMBER(bbcm_wd1770_write);
254   DECLARE_READ8_MEMBER(bbcm_wd1770l_read);
255   DECLARE_WRITE8_MEMBER(bbcm_wd1770l_write);
256   DECLARE_READ8_MEMBER(bbc_disc_r);
257   DECLARE_WRITE8_MEMBER(bbc_disc_w);
258   DECLARE_WRITE8_MEMBER(bbc_videoULA_w);
259   DECLARE_WRITE8_MEMBER(bbc_6845_w);
260   DECLARE_READ8_MEMBER(bbc_6845_r);
261   DECLARE_READ8_MEMBER(bbc_fe_r);
222262};
223263
224264
r14963r14964
247287INTERRUPT_GEN( bbcb_keyscan );
248288INTERRUPT_GEN( bbcm_keyscan );
249289
250WRITE8_HANDLER ( bbc_memorya1_w );
251WRITE8_HANDLER ( bbc_page_selecta_w );
252290
253WRITE8_HANDLER ( bbc_memoryb3_w );
254WRITE8_HANDLER ( bbc_memoryb4_w );
255WRITE8_HANDLER ( bbc_page_selectb_w );
256291
257292
258WRITE8_HANDLER ( bbc_memorybp1_w );
259WRITE8_HANDLER ( bbc_memorybp2_w );
260WRITE8_HANDLER ( bbc_memorybp4_w );
261WRITE8_HANDLER ( bbc_memorybp4_128_w );
262WRITE8_HANDLER ( bbc_memorybp6_128_w );
263WRITE8_HANDLER ( bbc_page_selectbp_w );
264293
265294
266WRITE8_HANDLER ( bbc_memorybm1_w );
267WRITE8_HANDLER ( bbc_memorybm2_w );
268WRITE8_HANDLER ( bbc_memorybm4_w );
269WRITE8_HANDLER ( bbc_memorybm5_w );
270WRITE8_HANDLER ( bbc_memorybm7_w );
271READ8_HANDLER  ( bbcm_r );
272WRITE8_HANDLER ( bbcm_w );
273READ8_HANDLER  ( bbcm_ACCCON_read );
274WRITE8_HANDLER ( bbcm_ACCCON_write );
275295
276296
277297/* disc support */
278298
279299DEVICE_IMAGE_LOAD ( bbcb_cart );
280300
281READ8_HANDLER  ( bbc_disc_r );
282WRITE8_HANDLER ( bbc_disc_w );
283301
284READ8_HANDLER  ( bbc_wd1770_read );
285WRITE8_HANDLER ( bbc_wd1770_write );
286302
287READ8_HANDLER  ( bbc_opus_read );
288WRITE8_HANDLER ( bbc_opus_write );
289303
290304
291READ8_HANDLER  ( bbcm_wd1770l_read );
292WRITE8_HANDLER ( bbcm_wd1770l_write );
293READ8_HANDLER  ( bbcm_wd1770_read );
294WRITE8_HANDLER ( bbcm_wd1770_write );
295305
296306
297307/* tape support */
298308
299WRITE8_HANDLER ( bbc_SerialULA_w );
300309
301310extern const i8271_interface bbc_i8271_interface;
302311extern const uPD7002_interface bbc_uPD7002;
r14963r14964
315324void bbcbp_setvideoshadow(running_machine &machine, int vdusel);
316325
317326
318WRITE8_HANDLER ( bbc_videoULA_w );
319327
320WRITE8_HANDLER ( bbc_6845_w );
321READ8_HANDLER ( bbc_6845_r );
322328
323329
324330#endif /* BBC_H_ */
src/mess/video/gb.c
r14963r14964
12951295      machine.scheduler().timer_set(machine.device<cpu_device>("maincpu")->cycles_to_attotime(1), FUNC(gb_video_init_vbl));
12961296
12971297      /* Initialize some video registers */
1298      gb_video_w( space, 0x0, 0x91 );    /* LCDCONT */
1299      gb_video_w( space, 0x7, 0xFC );    /* BGRDPAL */
1300      gb_video_w( space, 0x8, 0xFC );    /* SPR0PAL */
1301      gb_video_w( space, 0x9, 0xFC );    /* SPR1PAL */
1298      state->gb_video_w( *space, 0x0, 0x91 );    /* LCDCONT */
1299      state->gb_video_w( *space, 0x7, 0xFC );    /* BGRDPAL */
1300      state->gb_video_w( *space, 0x8, 0xFC );    /* SPR0PAL */
1301      state->gb_video_w( *space, 0x9, 0xFC );    /* SPR1PAL */
13021302
13031303      CURLINE = state->m_lcd.current_line = 0;
13041304      LCDSTAT = ( LCDSTAT & 0xF8 ) | 0x05;
r14963r14964
19731973   state->m_lcd.lcd_timer->adjust(machine.device<cpu_device>("maincpu")->cycles_to_attotime(80), GB_LCD_STATE_LYXX_M3);
19741974}
19751975
1976READ8_HANDLER( gb_video_r )
1976READ8_MEMBER(gb_state::gb_video_r)
19771977{
1978   gb_state *state = space->machine().driver_data<gb_state>();
1979   return state->m_lcd.gb_vid_regs[offset];
1978   return m_lcd.gb_vid_regs[offset];
19801979}
19811980
1982READ8_HANDLER( gb_vram_r )
1981READ8_MEMBER(gb_state::gb_vram_r)
19831982{
1984   gb_state *state = space->machine().driver_data<gb_state>();
1985   return ( state->m_lcd.vram_locked == LOCKED ) ? 0xFF : state->m_lcd.gb_vram_ptr[offset];
1983   return ( m_lcd.vram_locked == LOCKED ) ? 0xFF : m_lcd.gb_vram_ptr[offset];
19861984}
19871985
1988WRITE8_HANDLER( gb_vram_w )
1986WRITE8_MEMBER(gb_state::gb_vram_w)
19891987{
1990   gb_state *state = space->machine().driver_data<gb_state>();
1991   if ( state->m_lcd.vram_locked == LOCKED )
1988   if ( m_lcd.vram_locked == LOCKED )
19921989   {
19931990      return;
19941991   }
1995   state->m_lcd.gb_vram_ptr[offset] = data;
1992   m_lcd.gb_vram_ptr[offset] = data;
19961993}
19971994
1998READ8_HANDLER( gb_oam_r )
1995READ8_MEMBER(gb_state::gb_oam_r)
19991996{
2000   gb_state *state = space->machine().driver_data<gb_state>();
2001   return ( state->m_lcd.oam_locked == LOCKED ) ? 0xFF : state->m_lcd.gb_oam->base()[offset];
1997   return ( m_lcd.oam_locked == LOCKED ) ? 0xFF : m_lcd.gb_oam->base()[offset];
20021998}
20031999
2004WRITE8_HANDLER( gb_oam_w )
2000WRITE8_MEMBER(gb_state::gb_oam_w)
20052001{
2006   gb_state *state = space->machine().driver_data<gb_state>();
2007   if ( state->m_lcd.oam_locked == LOCKED || offset >= 0xa0 )
2002   if ( m_lcd.oam_locked == LOCKED || offset >= 0xa0 )
20082003   {
20092004      return;
20102005   }
2011   state->m_lcd.gb_oam->base()[offset] = data;
2006   m_lcd.gb_oam->base()[offset] = data;
20122007}
20132008
2014WRITE8_HANDLER ( gb_video_w )
2009WRITE8_MEMBER(gb_state::gb_video_w)
20152010{
2016   gb_state *state = space->machine().driver_data<gb_state>();
2011   gb_state *state = machine().driver_data<gb_state>();
20172012   switch (offset)
20182013   {
20192014   case 0x00:                  /* LCDC - LCD Control */
2020      state->m_lcd.gb_chrgen = state->m_lcd.gb_vram->base() + ((data & 0x10) ? 0x0000 : 0x0800);
2021      state->m_lcd.gb_tile_no_mod = (data & 0x10) ? 0x00 : 0x80;
2022      state->m_lcd.gb_bgdtab = state->m_lcd.gb_vram->base() + ((data & 0x08) ? 0x1C00 : 0x1800 );
2023      state->m_lcd.gb_wndtab = state->m_lcd.gb_vram->base() + ((data & 0x40) ? 0x1C00 : 0x1800 );
2015      m_lcd.gb_chrgen = m_lcd.gb_vram->base() + ((data & 0x10) ? 0x0000 : 0x0800);
2016      m_lcd.gb_tile_no_mod = (data & 0x10) ? 0x00 : 0x80;
2017      m_lcd.gb_bgdtab = m_lcd.gb_vram->base() + ((data & 0x08) ? 0x1C00 : 0x1800 );
2018      m_lcd.gb_wndtab = m_lcd.gb_vram->base() + ((data & 0x40) ? 0x1C00 : 0x1800 );
20242019      /* if LCD controller is switched off, set STAT and LY to 00 */
20252020      if ( ! ( data & 0x80 ) )
20262021      {
20272022         LCDSTAT &= ~0x03;
20282023         CURLINE = 0;
2029         state->m_lcd.oam_locked = UNLOCKED;
2030         state->m_lcd.vram_locked = UNLOCKED;
2024         m_lcd.oam_locked = UNLOCKED;
2025         m_lcd.vram_locked = UNLOCKED;
20312026      }
20322027      /* If LCD is being switched on */
20332028      if ( !( LCDCONT & 0x80 ) && ( data & 0x80 ) )
20342029      {
2035         gb_lcd_switch_on(space->machine());
2030         gb_lcd_switch_on(machine());
20362031      }
20372032      break;
20382033   case 0x01:                  /* STAT - LCD Status */
r14963r14964
20582053               - 0x20 -> 0x00/0x08/0x10/0x20/0x40 (mode 2, after m2int) - don't trigger
20592054               - 0x20 -> 0x00/0x08/0x10/0x20/0x40 (mode 3, after m2int) - don't trigger
20602055            */
2061         if ( ! state->m_lcd.mode_irq && ( ( state->m_lcd.mode == 1 ) ||
2056         if ( ! m_lcd.mode_irq && ( ( m_lcd.mode == 1 ) ||
20622057            ( ( LCDSTAT & 0x40 ) && ! ( data & 0x68 ) ) ||
20632058            ( ! ( LCDSTAT & 0x40 ) && ( data & 0x40 ) && ( LCDSTAT & 0x04 ) ) ||
20642059            ( ! ( LCDSTAT & 0x48 ) && ( data & 0x08 ) ) ||
r14963r14964
20662061            ( ( LCDSTAT & 0x60 ) == 0x20 && ( data & 0x40 ) )
20672062            ) )
20682063         {
2069               cputag_set_input_line( space->machine(), "maincpu", LCD_INT, ASSERT_LINE );
2064               cputag_set_input_line( machine(), "maincpu", LCD_INT, ASSERT_LINE );
20702065         }
20712066         /*
20722067               - 0x20 -> 0x08/0x18/0x28/0x48 (mode 0, after m2int) - trigger
20732068               - 0x20 -> 0x00/0x10/0x20/0x40 (mode 0, after m2int) - trigger (stat bug)
20742069               - 0x00 -> 0xXX (mode 0) - trigger stat bug
20752070            */
2076         if ( state->m_lcd.mode_irq && state->m_lcd.mode == 0 )
2071         if ( m_lcd.mode_irq && m_lcd.mode == 0 )
20772072         {
2078            cputag_set_input_line( space->machine(), "maincpu", LCD_INT, ASSERT_LINE );
2073            cputag_set_input_line( machine(), "maincpu", LCD_INT, ASSERT_LINE );
20792074         }
20802075      }
20812076      break;
r14963r14964
20862081      {
20872082         if ( CURLINE == data )
20882083         {
2089            if ( state->m_lcd.state != GB_LCD_STATE_LYXX_M0_INC && state->m_lcd.state != GB_LCD_STATE_LY9X_M1_INC )
2084            if ( m_lcd.state != GB_LCD_STATE_LYXX_M0_INC && m_lcd.state != GB_LCD_STATE_LY9X_M1_INC )
20902085            {
20912086               LCDSTAT |= 0x04;
20922087               /* Generate lcd interrupt if requested */
20932088               if ( LCDSTAT & 0x40 )
20942089               {
2095                  cputag_set_input_line( space->machine(), "maincpu", LCD_INT, ASSERT_LINE );
2090                  cputag_set_input_line( machine(), "maincpu", LCD_INT, ASSERT_LINE );
20962091               }
20972092            }
20982093         }
20992094         else
21002095         {
21012096            LCDSTAT &= 0xFB;
2102            state->m_lcd.triggering_line_irq = 0;
2097            m_lcd.triggering_line_irq = 0;
21032098         }
21042099      }
21052100      break;
21062101   case 0x06:                  /* DMA - DMA Transfer and Start Address */
21072102      {
2108         UINT8 *P = state->m_lcd.gb_oam->base();
2103         UINT8 *P = m_lcd.gb_oam->base();
21092104         offset = (UINT16) data << 8;
21102105         for (data = 0; data < 0xA0; data++)
2111            *P++ = space->read_byte(offset++);
2106            *P++ = space.read_byte(offset++);
21122107      }
21132108      return;
21142109   case 0x07:                  /* BGP - Background Palette */
2115      (*state->update_scanline)(space->machine());
2116      state->m_lcd.gb_bpal[0] = data & 0x3;
2117      state->m_lcd.gb_bpal[1] = (data & 0xC) >> 2;
2118      state->m_lcd.gb_bpal[2] = (data & 0x30) >> 4;
2119      state->m_lcd.gb_bpal[3] = (data & 0xC0) >> 6;
2110      (*update_scanline)(machine());
2111      m_lcd.gb_bpal[0] = data & 0x3;
2112      m_lcd.gb_bpal[1] = (data & 0xC) >> 2;
2113      m_lcd.gb_bpal[2] = (data & 0x30) >> 4;
2114      m_lcd.gb_bpal[3] = (data & 0xC0) >> 6;
21202115      break;
21212116   case 0x08:                  /* OBP0 - Object Palette 0 */
2122//      (*state->update_scanline)( machine );
2123      state->m_lcd.gb_spal0[0] = data & 0x3;
2124      state->m_lcd.gb_spal0[1] = (data & 0xC) >> 2;
2125      state->m_lcd.gb_spal0[2] = (data & 0x30) >> 4;
2126      state->m_lcd.gb_spal0[3] = (data & 0xC0) >> 6;
2117//      (*update_scanline)( machine );
2118      m_lcd.gb_spal0[0] = data & 0x3;
2119      m_lcd.gb_spal0[1] = (data & 0xC) >> 2;
2120      m_lcd.gb_spal0[2] = (data & 0x30) >> 4;
2121      m_lcd.gb_spal0[3] = (data & 0xC0) >> 6;
21272122      break;
21282123   case 0x09:                  /* OBP1 - Object Palette 1 */
2129//      (*state->update_scanline)( machine );
2130      state->m_lcd.gb_spal1[0] = data & 0x3;
2131      state->m_lcd.gb_spal1[1] = (data & 0xC) >> 2;
2132      state->m_lcd.gb_spal1[2] = (data & 0x30) >> 4;
2133      state->m_lcd.gb_spal1[3] = (data & 0xC0) >> 6;
2124//      (*update_scanline)( machine );
2125      m_lcd.gb_spal1[0] = data & 0x3;
2126      m_lcd.gb_spal1[1] = (data & 0xC) >> 2;
2127      m_lcd.gb_spal1[2] = (data & 0x30) >> 4;
2128      m_lcd.gb_spal1[3] = (data & 0xC0) >> 6;
21342129      break;
21352130   case 0x02:                  /* SCY - Scroll Y */
21362131   case 0x03:                  /* SCX - Scroll X */
2137      (*state->update_scanline)(space->machine());
2132      (*update_scanline)(machine());
21382133   case 0x0A:                  /* WY - Window Y position */
21392134   case 0x0B:                  /* WX - Window X position */
21402135      break;
21412136   default:                  /* Unknown register, no change */
21422137      return;
21432138   }
2144   state->m_lcd.gb_vid_regs[ offset ] = data;
2139   m_lcd.gb_vid_regs[ offset ] = data;
21452140}
21462141
2147READ8_HANDLER( gbc_video_r )
2142READ8_MEMBER(gb_state::gbc_video_r)
21482143{
2149   gb_state *state = space->machine().driver_data<gb_state>();
21502144   switch( offset )
21512145   {
21522146   case 0x11:   /* FF51 */
r14963r14964
21562150      return 0xFF;
21572151   case 0x29:   /* FF69 */
21582152   case 0x2B:   /* FF6B */
2159      if ( state->m_lcd.pal_locked == LOCKED )
2153      if ( m_lcd.pal_locked == LOCKED )
21602154      {
21612155         return 0xFF;
21622156      }
21632157      break;
21642158   }
2165   return state->m_lcd.gb_vid_regs[offset];
2159   return m_lcd.gb_vid_regs[offset];
21662160}
21672161
2168WRITE8_HANDLER ( gbc_video_w )
2162WRITE8_MEMBER(gb_state::gbc_video_w)
21692163{
2170   gb_state *state = space->machine().driver_data<gb_state>();
2164   gb_state *state = machine().driver_data<gb_state>();
21712165   switch( offset )
21722166   {
21732167   case 0x00:      /* LCDC - LCD Control */
2174      state->m_lcd.gb_chrgen = state->m_lcd.gb_vram->base() + ((data & 0x10) ? 0x0000 : 0x0800);
2175      state->m_lcd.gbc_chrgen = state->m_lcd.gb_vram->base() + ((data & 0x10) ? 0x2000 : 0x2800);
2176      state->m_lcd.gb_tile_no_mod = (data & 0x10) ? 0x00 : 0x80;
2177      state->m_lcd.gb_bgdtab = state->m_lcd.gb_vram->base() + ((data & 0x08) ? 0x1C00 : 0x1800);
2178      state->m_lcd.gbc_bgdtab = state->m_lcd.gb_vram->base() + ((data & 0x08) ? 0x3C00 : 0x3800);
2179      state->m_lcd.gb_wndtab = state->m_lcd.gb_vram->base() + ((data & 0x40) ? 0x1C00 : 0x1800);
2180      state->m_lcd.gbc_wndtab = state->m_lcd.gb_vram->base() + ((data & 0x40) ? 0x3C00 : 0x3800);
2168      m_lcd.gb_chrgen = m_lcd.gb_vram->base() + ((data & 0x10) ? 0x0000 : 0x0800);
2169      m_lcd.gbc_chrgen = m_lcd.gb_vram->base() + ((data & 0x10) ? 0x2000 : 0x2800);
2170      m_lcd.gb_tile_no_mod = (data & 0x10) ? 0x00 : 0x80;
2171      m_lcd.gb_bgdtab = m_lcd.gb_vram->base() + ((data & 0x08) ? 0x1C00 : 0x1800);
2172      m_lcd.gbc_bgdtab = m_lcd.gb_vram->base() + ((data & 0x08) ? 0x3C00 : 0x3800);
2173      m_lcd.gb_wndtab = m_lcd.gb_vram->base() + ((data & 0x40) ? 0x1C00 : 0x1800);
2174      m_lcd.gbc_wndtab = m_lcd.gb_vram->base() + ((data & 0x40) ? 0x3C00 : 0x3800);
21812175      /* if LCD controller is switched off, set STAT to 00 */
21822176      if ( ! ( data & 0x80 ) )
21832177      {
21842178         LCDSTAT &= ~0x03;
21852179         CURLINE = 0;
2186         state->m_lcd.oam_locked = UNLOCKED;
2187         state->m_lcd.vram_locked = UNLOCKED;
2188         state->m_lcd.pal_locked = UNLOCKED;
2180         m_lcd.oam_locked = UNLOCKED;
2181         m_lcd.vram_locked = UNLOCKED;
2182         m_lcd.pal_locked = UNLOCKED;
21892183      }
21902184      /* If LCD is being switched on */
21912185      if ( !( LCDCONT & 0x80 ) && ( data & 0x80 ) )
21922186      {
2193         gb_lcd_switch_on(space->machine());
2187         gb_lcd_switch_on(machine());
21942188      }
21952189      break;
21962190   case 0x01:      /* STAT - LCD Status */
r14963r14964
22002194         /*
22012195               - 0x20 -> 0x08/0x18/0x28/0x48 (mode 0, after m2int) - trigger
22022196            */
2203         if ( state->m_lcd.mode_irq && state->m_lcd.mode == 0 && ( LCDSTAT & 0x28 ) == 0x20 && ( data & 0x08 ) )
2197         if ( m_lcd.mode_irq && m_lcd.mode == 0 && ( LCDSTAT & 0x28 ) == 0x20 && ( data & 0x08 ) )
22042198         {
2205            cputag_set_input_line( space->machine(), "maincpu", LCD_INT, ASSERT_LINE );
2199            cputag_set_input_line( machine(), "maincpu", LCD_INT, ASSERT_LINE );
22062200         }
22072201         /* Check if line irqs are being disabled */
22082202         if ( ! ( data & 0x40 ) )
22092203         {
2210            state->m_lcd.delayed_line_irq = 0;
2204            m_lcd.delayed_line_irq = 0;
22112205         }
22122206         /* Check if line irqs are being enabled */
22132207         if ( ! ( LCDSTAT & 0x40 ) && ( data & 0x40 ) )
22142208         {
22152209            if ( CMPLINE == CURLINE )
22162210            {
2217               state->m_lcd.line_irq = 1;
2218               cputag_set_input_line( space->machine(), "maincpu", LCD_INT, ASSERT_LINE );
2211               m_lcd.line_irq = 1;
2212               cputag_set_input_line( machine(), "maincpu", LCD_INT, ASSERT_LINE );
22192213            }
22202214         }
22212215      }
r14963r14964
22232217   case 0x05:                      /* LYC */
22242218      if ( CMPLINE != data )
22252219      {
2226         if ( ( state->m_lcd.state != GB_LCD_STATE_LYXX_M0_PRE_INC && CURLINE == data ) ||
2227              ( state->m_lcd.state == GB_LCD_STATE_LYXX_M0_INC && state->m_lcd.triggering_line_irq ) )
2220         if ( ( m_lcd.state != GB_LCD_STATE_LYXX_M0_PRE_INC && CURLINE == data ) ||
2221              ( m_lcd.state == GB_LCD_STATE_LYXX_M0_INC && m_lcd.triggering_line_irq ) )
22282222         {
22292223            LCDSTAT |= 0x04;
22302224            /* Generate lcd interrupt if requested */
22312225            if ( LCDSTAT & 0x40 )
22322226            {
2233               cputag_set_input_line( space->machine(), "maincpu", LCD_INT, ASSERT_LINE );
2227               cputag_set_input_line( machine(), "maincpu", LCD_INT, ASSERT_LINE );
22342228            }
22352229         }
22362230         else
22372231         {
22382232            LCDSTAT &= 0xFB;
2239            state->m_lcd.triggering_line_irq = 0;
2240            state->m_lcd.cmp_line = data;
2233            m_lcd.triggering_line_irq = 0;
2234            m_lcd.cmp_line = data;
22412235         }
22422236      }
22432237      break;
22442238   case 0x07:      /* BGP - GB background palette */
2245      (*state->update_scanline)(space->machine());
2246      state->m_lcd.gb_bpal[0] = data & 0x3;
2247      state->m_lcd.gb_bpal[1] = (data & 0xC) >> 2;
2248      state->m_lcd.gb_bpal[2] = (data & 0x30) >> 4;
2249      state->m_lcd.gb_bpal[3] = (data & 0xC0) >> 6;
2239      (*update_scanline)(machine());
2240      m_lcd.gb_bpal[0] = data & 0x3;
2241      m_lcd.gb_bpal[1] = (data & 0xC) >> 2;
2242      m_lcd.gb_bpal[2] = (data & 0x30) >> 4;
2243      m_lcd.gb_bpal[3] = (data & 0xC0) >> 6;
22502244      break;
22512245   case 0x08:      /* OBP0 - GB Object 0 palette */
2252      state->m_lcd.gb_spal0[0] = data & 0x3;
2253      state->m_lcd.gb_spal0[1] = (data & 0xC) >> 2;
2254      state->m_lcd.gb_spal0[2] = (data & 0x30) >> 4;
2255      state->m_lcd.gb_spal0[3] = (data & 0xC0) >> 6;
2246      m_lcd.gb_spal0[0] = data & 0x3;
2247      m_lcd.gb_spal0[1] = (data & 0xC) >> 2;
2248      m_lcd.gb_spal0[2] = (data & 0x30) >> 4;
2249      m_lcd.gb_spal0[3] = (data & 0xC0) >> 6;
22562250      break;
22572251   case 0x09:      /* OBP1 - GB Object 1 palette */
2258      state->m_lcd.gb_spal1[0] = data & 0x3;
2259      state->m_lcd.gb_spal1[1] = (data & 0xC) >> 2;
2260      state->m_lcd.gb_spal1[2] = (data & 0x30) >> 4;
2261      state->m_lcd.gb_spal1[3] = (data & 0xC0) >> 6;
2252      m_lcd.gb_spal1[0] = data & 0x3;
2253      m_lcd.gb_spal1[1] = (data & 0xC) >> 2;
2254      m_lcd.gb_spal1[2] = (data & 0x30) >> 4;
2255      m_lcd.gb_spal1[3] = (data & 0xC0) >> 6;
22622256      break;
22632257   case 0x0c:      /* Undocumented register involved in selecting gb/gbc mode */
22642258      logerror( "Write to undocumented register: %X = %X\n", offset, data );
22652259      break;
22662260   case 0x0F:      /* VBK - VRAM bank select */
2267      state->m_lcd.gb_vram_ptr = state->m_lcd.gb_vram->base() + ( data & 0x01 ) * 0x2000;
2261      m_lcd.gb_vram_ptr = m_lcd.gb_vram->base() + ( data & 0x01 ) * 0x2000;
22682262      data |= 0xFE;
22692263      break;
22702264   case 0x11:      /* HDMA1 - HBL General DMA - Source High */
r14963r14964
22812275   case 0x15:      /* HDMA5 - HBL General DMA - Mode, Length */
22822276      if( !(data & 0x80) )
22832277      {
2284         if( state->m_lcd.hdma_enabled )
2278         if( m_lcd.hdma_enabled )
22852279         {
2286            state->m_lcd.hdma_enabled = 0;
2280            m_lcd.hdma_enabled = 0;
22872281            data = HDMA5 & 0x80;
22882282         }
22892283         else
22902284         {
22912285            /* General DMA */
2292            gbc_hdma( space->machine(), ((data & 0x7F) + 1) * 0x10 );
2286            gbc_hdma( machine(), ((data & 0x7F) + 1) * 0x10 );
22932287//              cpunum_set_reg( 0, LR35902_DMA_CYCLES, 4 + ( ( ( data & 0x7F ) + 1 ) * 32 ) );
22942288            data = 0xff;
22952289         }
r14963r14964
22972291      else
22982292      {
22992293         /* H-Blank DMA */
2300         state->m_lcd.hdma_enabled = 1;
2294         m_lcd.hdma_enabled = 1;
23012295         data &= 0x7f;
2302         state->m_lcd.gb_vid_regs[offset] = data;
2296         m_lcd.gb_vid_regs[offset] = data;
23032297         /* Check if HDMA should be immediately performed */
2304         if ( state->m_lcd.hdma_possible )
2298         if ( m_lcd.hdma_possible )
23052299         {
2306            gbc_hdma( space->machine(), 0x10 );
2300            gbc_hdma( machine(), 0x10 );
23072301//              cpunum_set_reg( 0, LR35902_DMA_CYCLES, 36 );
2308            state->m_lcd.hdma_possible = 0;
2302            m_lcd.hdma_possible = 0;
23092303         }
23102304      }
23112305      break;
23122306   case 0x28:      /* BCPS - Background palette specification */
23132307      GBCBCPS = data;
23142308      if (data & 0x01)
2315         GBCBCPD = state->m_lcd.cgb_bpal[( data >> 1 ) & 0x1F] >> 8;
2309         GBCBCPD = m_lcd.cgb_bpal[( data >> 1 ) & 0x1F] >> 8;
23162310      else
2317         GBCBCPD = state->m_lcd.cgb_bpal[( data >> 1 ) & 0x1F] & 0xFF;
2311         GBCBCPD = m_lcd.cgb_bpal[( data >> 1 ) & 0x1F] & 0xFF;
23182312      break;
23192313   case 0x29:      /* BCPD - background palette data */
2320      if ( state->m_lcd.pal_locked == LOCKED )
2314      if ( m_lcd.pal_locked == LOCKED )
23212315      {
23222316         return;
23232317      }
23242318      GBCBCPD = data;
23252319      if (GBCBCPS & 0x01)
2326         state->m_lcd.cgb_bpal[( GBCBCPS >> 1 ) & 0x1F] = ((data << 8) | (state->m_lcd.cgb_bpal[( GBCBCPS >> 1 ) & 0x1F] & 0xFF)) & 0x7FFF;
2320         m_lcd.cgb_bpal[( GBCBCPS >> 1 ) & 0x1F] = ((data << 8) | (m_lcd.cgb_bpal[( GBCBCPS >> 1 ) & 0x1F] & 0xFF)) & 0x7FFF;
23272321      else
2328         state->m_lcd.cgb_bpal[( GBCBCPS >> 1 ) & 0x1F] = ((state->m_lcd.cgb_bpal[( GBCBCPS >> 1 ) & 0x1F] & 0xFF00) | data) & 0x7FFF;
2322         m_lcd.cgb_bpal[( GBCBCPS >> 1 ) & 0x1F] = ((m_lcd.cgb_bpal[( GBCBCPS >> 1 ) & 0x1F] & 0xFF00) | data) & 0x7FFF;
23292323      if( GBCBCPS & 0x80 )
23302324      {
23312325         GBCBCPS++;
r14963r14964
23352329   case 0x2A:      /* OCPS - Object palette specification */
23362330      GBCOCPS = data;
23372331      if (data & 0x01)
2338         GBCOCPD = state->m_lcd.cgb_spal[( data >> 1 ) & 0x1F] >> 8;
2332         GBCOCPD = m_lcd.cgb_spal[( data >> 1 ) & 0x1F] >> 8;
23392333      else
2340         GBCOCPD = state->m_lcd.cgb_spal[( data >> 1 ) & 0x1F] & 0xFF;
2334         GBCOCPD = m_lcd.cgb_spal[( data >> 1 ) & 0x1F] & 0xFF;
23412335      break;
23422336   case 0x2B:      /* OCPD - Object palette data */
2343      if ( state->m_lcd.pal_locked == LOCKED )
2337      if ( m_lcd.pal_locked == LOCKED )
23442338      {
23452339         return;
23462340      }
23472341      GBCOCPD = data;
23482342      if (GBCOCPS & 0x01)
2349         state->m_lcd.cgb_spal[( GBCOCPS >> 1 ) & 0x1F] = ((data << 8) | (state->m_lcd.cgb_spal[( GBCOCPS >> 1 ) & 0x1F] & 0xFF)) & 0x7FFF;
2343         m_lcd.cgb_spal[( GBCOCPS >> 1 ) & 0x1F] = ((data << 8) | (m_lcd.cgb_spal[( GBCOCPS >> 1 ) & 0x1F] & 0xFF)) & 0x7FFF;
23502344      else
2351         state->m_lcd.cgb_spal[( GBCOCPS >> 1 ) & 0x1F] = ((state->m_lcd.cgb_spal[( GBCOCPS >> 1 ) & 0x1F] & 0xFF00) | data) & 0x7FFF;
2345         m_lcd.cgb_spal[( GBCOCPS >> 1 ) & 0x1F] = ((m_lcd.cgb_spal[( GBCOCPS >> 1 ) & 0x1F] & 0xFF00) | data) & 0x7FFF;
23522346      if( GBCOCPS & 0x80 )
23532347      {
23542348         GBCOCPS++;
r14963r14964
23622356      data = 0xFE | ( data & 0x01 );
23632357      if ( data & 0x01 )
23642358      {
2365         state->m_lcd.gbc_mode = 0;
2359         m_lcd.gbc_mode = 0;
23662360      }
23672361      break;
23682362   case 0x32:
r14963r14964
23862380      return;
23872381   }
23882382
2389   state->m_lcd.gb_vid_regs[offset] = data;
2383   m_lcd.gb_vid_regs[offset] = data;
23902384}
23912385
23922386
src/mess/video/mz700.c
r14963r14964
127127    CGRAM
128128***************************************************************************/
129129
130WRITE8_HANDLER( mz800_cgram_w )
130WRITE8_MEMBER(mz_state::mz800_cgram_w)
131131{
132   mz_state *mz = space->machine().driver_data<mz_state>();
133   mz->m_cgram[offset] = data;
132   m_cgram[offset] = data;
134133
135   gfx_element_mark_dirty(space->machine().gfx[0], offset/8);
134   gfx_element_mark_dirty(machine().gfx[0], offset/8);
136135}
src/mess/video/aquarius.c
r14963r14964
6464      colortable_entry_set_value(machine.colortable, i, aquarius_palette[i]);
6565}
6666
67WRITE8_HANDLER( aquarius_videoram_w )
67WRITE8_MEMBER(aquarius_state::aquarius_videoram_w)
6868{
69   aquarius_state *state = space->machine().driver_data<aquarius_state>();
70   UINT8 *videoram = state->m_videoram;
69   UINT8 *videoram = m_videoram;
7170   videoram[offset] = data;
72   state->m_tilemap->mark_tile_dirty(offset);
71   m_tilemap->mark_tile_dirty(offset);
7372}
7473
75WRITE8_HANDLER( aquarius_colorram_w )
74WRITE8_MEMBER(aquarius_state::aquarius_colorram_w)
7675{
77   aquarius_state *state = space->machine().driver_data<aquarius_state>();
78   state->m_colorram[offset] = data;
79   state->m_tilemap->mark_tile_dirty(offset);
76   m_colorram[offset] = data;
77   m_tilemap->mark_tile_dirty(offset);
8078}
8179
8280static TILE_GET_INFO(aquarius_gettileinfo)
src/mess/video/a7800.c
r14963r14964
440440
441441/****** MARIA ***************************************/
442442
443 READ8_HANDLER( a7800_MARIA_r )
443READ8_MEMBER(a7800_state::a7800_MARIA_r)
444444{
445   a7800_state *state = space->machine().driver_data<a7800_state>();
446   UINT8 *ROM = space->machine().region("maincpu")->base();
445   UINT8 *ROM = machine().region("maincpu")->base();
447446   switch (offset)
448447   {
449448      case 0x08:
450         return state->m_maria_vblank;
449         return m_maria_vblank;
451450
452451      default:
453452         logerror("undefined MARIA read %x\n",offset);
r14963r14964
455454   }
456455}
457456
458WRITE8_HANDLER( a7800_MARIA_w )
457WRITE8_MEMBER(a7800_state::a7800_MARIA_w)
459458{
460   a7800_state *state = space->machine().driver_data<a7800_state>();
461   UINT8 *ROM = space->machine().region("maincpu")->base();
459   UINT8 *ROM = machine().region("maincpu")->base();
462460   switch (offset)
463461   {
464462      case 0x00:
465         state->m_maria_backcolor = data;
466         // 20030621 ericball added state->m_maria_palette[pal][0] to make kanagroo mode easier
467         state->m_maria_palette[0][0]=state->m_maria_backcolor;
468         state->m_maria_palette[1][0]=state->m_maria_backcolor;
469         state->m_maria_palette[2][0]=state->m_maria_backcolor;
470         state->m_maria_palette[3][0]=state->m_maria_backcolor;
471         state->m_maria_palette[4][0]=state->m_maria_backcolor;
472         state->m_maria_palette[5][0]=state->m_maria_backcolor;
473         state->m_maria_palette[6][0]=state->m_maria_backcolor;
474         state->m_maria_palette[7][0]=state->m_maria_backcolor;
463         m_maria_backcolor = data;
464         // 20030621 ericball added m_maria_palette[pal][0] to make kanagroo mode easier
465         m_maria_palette[0][0]=m_maria_backcolor;
466         m_maria_palette[1][0]=m_maria_backcolor;
467         m_maria_palette[2][0]=m_maria_backcolor;
468         m_maria_palette[3][0]=m_maria_backcolor;
469         m_maria_palette[4][0]=m_maria_backcolor;
470         m_maria_palette[5][0]=m_maria_backcolor;
471         m_maria_palette[6][0]=m_maria_backcolor;
472         m_maria_palette[7][0]=m_maria_backcolor;
475473         break;
476474      case 0x01:
477         state->m_maria_palette[0][1] = data;
475         m_maria_palette[0][1] = data;
478476         break;
479477      case 0x02:
480         state->m_maria_palette[0][2] = data;
478         m_maria_palette[0][2] = data;
481479         break;
482480      case 0x03:
483         state->m_maria_palette[0][3] = data;
481         m_maria_palette[0][3] = data;
484482         break;
485483      case 0x04:
486         device_spin_until_trigger(space->machine().device("maincpu"), TRIGGER_HSYNC);
487         state->m_maria_wsync=1;
484         device_spin_until_trigger(machine().device("maincpu"), TRIGGER_HSYNC);
485         m_maria_wsync=1;
488486         break;
489487
490488      case 0x05:
491         state->m_maria_palette[1][1] = data;
489         m_maria_palette[1][1] = data;
492490         break;
493491      case 0x06:
494         state->m_maria_palette[1][2] = data;
492         m_maria_palette[1][2] = data;
495493         break;
496494      case 0x07:
497         state->m_maria_palette[1][3] = data;
495         m_maria_palette[1][3] = data;
498496         break;
499497
500498      case 0x09:
501         state->m_maria_palette[2][1] = data;
499         m_maria_palette[2][1] = data;
502500         break;
503501      case 0x0A:
504         state->m_maria_palette[2][2] = data;
502         m_maria_palette[2][2] = data;
505503         break;
506504      case 0x0B:
507         state->m_maria_palette[2][3] = data;
505         m_maria_palette[2][3] = data;
508506         break;
509507
510508      case 0x0D:
511         state->m_maria_palette[3][1] = data;
509         m_maria_palette[3][1] = data;
512510         break;
513511      case 0x0E:
514         state->m_maria_palette[3][2] = data;
512         m_maria_palette[3][2] = data;
515513         break;
516514      case 0x0F:
517         state->m_maria_palette[3][3] = data;
515         m_maria_palette[3][3] = data;
518516         break;
519517
520518      case 0x11:
521         state->m_maria_palette[4][1] = data;
519         m_maria_palette[4][1] = data;
522520         break;
523521      case 0x12:
524         state->m_maria_palette[4][2] = data;
522         m_maria_palette[4][2] = data;
525523         break;
526524      case 0x13:
527         state->m_maria_palette[4][3] = data;
525         m_maria_palette[4][3] = data;
528526         break;
529527      case 0x14:
530         state->m_maria_charbase = (data << 8);
528         m_maria_charbase = (data << 8);
531529         break;
532530      case 0x15:
533         state->m_maria_palette[5][1] = data;
531         m_maria_palette[5][1] = data;
534532         break;
535533      case 0x16:
536         state->m_maria_palette[5][2] = data;
534         m_maria_palette[5][2] = data;
537535         break;
538536      case 0x17:
539         state->m_maria_palette[5][3] = data;
537         m_maria_palette[5][3] = data;
540538         break;
541539
542540      case 0x19:
543         state->m_maria_palette[6][1] = data;
541         m_maria_palette[6][1] = data;
544542         break;
545543      case 0x1A:
546         state->m_maria_palette[6][2] = data;
544         m_maria_palette[6][2] = data;
547545         break;
548546      case 0x1B:
549         state->m_maria_palette[6][3] = data;
547         m_maria_palette[6][3] = data;
550548         break;
551549
552550      case 0x1C:
553551         /*logerror("MARIA CTRL=%x\n",data);*/
554         state->m_maria_color_kill = data & 0x80;
552         m_maria_color_kill = data & 0x80;
555553         if ((data & 0x60) == 0x40)
556            state->m_maria_dmaon = 1;
554            m_maria_dmaon = 1;
557555         else
558            state->m_maria_dmaon = state->m_maria_dodma = 0;
556            m_maria_dmaon = m_maria_dodma = 0;
559557
560         state->m_maria_cwidth = data & 0x10;
561         state->m_maria_bcntl = data & 0x08;
562         state->m_maria_kangaroo = data & 0x04;
563         state->m_maria_rm = data & 0x03;
558         m_maria_cwidth = data & 0x10;
559         m_maria_bcntl = data & 0x08;
560         m_maria_kangaroo = data & 0x04;
561         m_maria_rm = data & 0x03;
564562
565563         /*logerror( "MARIA CTRL: CK:%d DMA:%d CW:%d BC:%d KM:%d RM:%d\n",
566                    state->m_maria_color_kill ? 1 : 0,
564                    m_maria_color_kill ? 1 : 0,
567565                    ( data & 0x60 ) >> 5,
568                    state->m_maria_cwidth ? 1 : 0,
569                    state->m_maria_bcntl ? 1 : 0,
570                    state->m_maria_kangaroo ? 1 : 0,
571                    state->m_maria_rm );*/
566                    m_maria_cwidth ? 1 : 0,
567                    m_maria_bcntl ? 1 : 0,
568                    m_maria_kangaroo ? 1 : 0,
569                    m_maria_rm );*/
572570
573571         break;
574572      case 0x1D:
575         state->m_maria_palette[7][1] = data;
573         m_maria_palette[7][1] = data;
576574         break;
577575      case 0x1E:
578         state->m_maria_palette[7][2] = data;
576         m_maria_palette[7][2] = data;
579577         break;
580578      case 0x1F:
581         state->m_maria_palette[7][3] = data;
579         m_maria_palette[7][3] = data;
582580         break;
583581   }
584582   ROM[ 0x20 + offset ] = data;
src/mess/video/microtan.c
r14963r14964
1818
1919
2020
21WRITE8_HANDLER( microtan_videoram_w )
21WRITE8_MEMBER(microtan_state::microtan_videoram_w)
2222{
23   microtan_state *state = space->machine().driver_data<microtan_state>();
24   UINT8 *videoram = state->m_videoram;
25   if ((videoram[offset] != data) || (state->m_chunky_buffer[offset] != state->m_chunky_graphics))
23   UINT8 *videoram = m_videoram;
24   if ((videoram[offset] != data) || (m_chunky_buffer[offset] != m_chunky_graphics))
2625   {
2726      videoram[offset] = data;
28      state->m_bg_tilemap->mark_tile_dirty(offset);
29      state->m_chunky_buffer[offset] = state->m_chunky_graphics;
27      m_bg_tilemap->mark_tile_dirty(offset);
28      m_chunky_buffer[offset] = m_chunky_graphics;
3029   }
3130}
3231
src/mess/video/rmnimbus.c
r14963r14964
102102    to return the values for all of them, it doesn't seem to hurt !
103103*/
104104
105READ16_HANDLER (nimbus_video_io_r)
105READ16_MEMBER(rmnimbus_state::nimbus_video_io_r)
106106{
107   rmnimbus_state *state = space->machine().driver_data<rmnimbus_state>();
108    int     pc=cpu_get_pc(&space->device());
107   rmnimbus_state *state = machine().driver_data<rmnimbus_state>();
108    int     pc=cpu_get_pc(&space.device());
109109    UINT16  result;
110110
111111    switch (offset)
112112    {
113        case    reg000  : result=state->m_vidregs[reg000]; break;
114        case    reg002  : result=state->m_vidregs[reg002]; break;
115        case    reg004  : result=state->m_vidregs[reg004]; break;
116        case    reg006  : result=state->m_vidregs[reg006]; break;
117        case    reg008  : result=state->m_vidregs[reg008]; break;
113        case    reg000  : result=m_vidregs[reg000]; break;
114        case    reg002  : result=m_vidregs[reg002]; break;
115        case    reg004  : result=m_vidregs[reg004]; break;
116        case    reg006  : result=m_vidregs[reg006]; break;
117        case    reg008  : result=m_vidregs[reg008]; break;
118118        case    reg00A  : result=read_reg_00A(state); break;
119        case    reg00C  : result=state->m_vidregs[reg00C]; break;
120        case    reg00E  : result=state->m_vidregs[reg00E]; break;
119        case    reg00C  : result=m_vidregs[reg00C]; break;
120        case    reg00E  : result=m_vidregs[reg00E]; break;
121121
122        case    reg010  : result=state->m_vidregs[reg010]; break;
123        case    reg012  : result=state->m_vidregs[reg012]; break;
124        case    reg014  : result=state->m_vidregs[reg014]; break;
125        case    reg016  : result=state->m_vidregs[reg016]; break;
126        case    reg018  : result=state->m_vidregs[reg018]; break;
127        case    reg01A  : result=state->m_vidregs[reg01A]; break;
128        case    reg01C  : result=state->m_vidregs[reg01C]; break;
129        case    reg01E  : result=state->m_vidregs[reg01E]; break;
122        case    reg010  : result=m_vidregs[reg010]; break;
123        case    reg012  : result=m_vidregs[reg012]; break;
124        case    reg014  : result=m_vidregs[reg014]; break;
125        case    reg016  : result=m_vidregs[reg016]; break;
126        case    reg018  : result=m_vidregs[reg018]; break;
127        case    reg01A  : result=m_vidregs[reg01A]; break;
128        case    reg01C  : result=m_vidregs[reg01C]; break;
129        case    reg01E  : result=m_vidregs[reg01E]; break;
130130
131        case    reg020  : result=state->m_vidregs[reg020]; break;
132        case    reg022  : result=state->m_vidregs[reg022]; break;
133        case    reg024  : result=state->m_vidregs[reg024]; break;
134        case    reg026  : result=state->m_vidregs[reg026]; break;
135        case    reg028  : result=state->m_hs_count; break; //result=state->m_vidregs[reg028]; break;
136        case    reg02A  : result=state->m_vidregs[reg02A]; break;
137        case    reg02C  : result=state->m_vidregs[reg02C]; break;
138        case    reg02E  : result=state->m_vidregs[reg02E]; break;
131        case    reg020  : result=m_vidregs[reg020]; break;
132        case    reg022  : result=m_vidregs[reg022]; break;
133        case    reg024  : result=m_vidregs[reg024]; break;
134        case    reg026  : result=m_vidregs[reg026]; break;
135        case    reg028  : result=m_hs_count; break; //result=m_vidregs[reg028]; break;
136        case    reg02A  : result=m_vidregs[reg02A]; break;
137        case    reg02C  : result=m_vidregs[reg02C]; break;
138        case    reg02E  : result=m_vidregs[reg02E]; break;
139139        default         : result=0; break;
140140    }
141141
r14963r14964
263263
264264*/
265265
266WRITE16_HANDLER (nimbus_video_io_w)
266WRITE16_MEMBER(rmnimbus_state::nimbus_video_io_w)
267267{
268   rmnimbus_state *state = space->machine().driver_data<rmnimbus_state>();
269    int pc=cpu_get_pc(&space->device());
268    rmnimbus_state *state = machine().driver_data<rmnimbus_state>();
269   int pc=cpu_get_pc(&space.device());
270270
271271    if(offset<reg028)
272272    {
r14963r14964
279279
280280    switch (offset)
281281    {
282        case    reg000  : state->m_vidregs[reg000]=data; break;
283        case    reg002  : state->m_vidregs[reg002]=data; break;
284        case    reg004  : state->m_vidregs[reg004]=data; write_reg_004(state); break;
285        case    reg006  : state->m_vidregs[reg006]=data; write_reg_006(state); break;
286        case    reg008  : state->m_vidregs[reg008]=data; break;
287        case    reg00A  : state->m_vidregs[reg00A]=data; break;
288        case    reg00C  : state->m_vidregs[reg00C]=data; break;
289        case    reg00E  : state->m_vidregs[reg00E]=data; break;
282        case    reg000  : m_vidregs[reg000]=data; break;
283        case    reg002  : m_vidregs[reg002]=data; break;
284        case    reg004  : m_vidregs[reg004]=data; write_reg_004(state); break;
285        case    reg006  : m_vidregs[reg006]=data; write_reg_006(state); break;
286        case    reg008  : m_vidregs[reg008]=data; break;
287        case    reg00A  : m_vidregs[reg00A]=data; break;
288        case    reg00C  : m_vidregs[reg00C]=data; break;
289        case    reg00E  : m_vidregs[reg00E]=data; break;
290290
291        case    reg010  : state->m_vidregs[reg010]=data; write_reg_010(state); break;
292        case    reg012  : state->m_vidregs[reg012]=data; write_reg_012(state); break;
293        case    reg014  : state->m_vidregs[reg014]=data; write_reg_014(state); break;
294        case    reg016  : state->m_vidregs[reg016]=data; write_reg_016(state); break;
295        case    reg018  : state->m_vidregs[reg018]=data; break;
296        case    reg01A  : state->m_vidregs[reg01A]=data; write_reg_01A(state); break;
297        case    reg01C  : state->m_vidregs[reg01C]=data; write_reg_01C(state);break;
298        case    reg01E  : state->m_vidregs[reg01E]=data; write_reg_01E(state);break;
291        case    reg010  : m_vidregs[reg010]=data; write_reg_010(state); break;
292        case    reg012  : m_vidregs[reg012]=data; write_reg_012(state); break;
293        case    reg014  : m_vidregs[reg014]=data; write_reg_014(state); break;
294        case    reg016  : m_vidregs[reg016]=data; write_reg_016(state); break;
295        case    reg018  : m_vidregs[reg018]=data; break;
296        case    reg01A  : m_vidregs[reg01A]=data; write_reg_01A(state); break;
297        case    reg01C  : m_vidregs[reg01C]=data; write_reg_01C(state);break;
298        case    reg01E  : m_vidregs[reg01E]=data; write_reg_01E(state);break;
299299
300        case    reg020  : state->m_vidregs[reg020]=data; break;
301        case    reg022  : state->m_vidregs[reg022]=data; break;
302        case    reg024  : state->m_vidregs[reg024]=data; break;
303        case    reg026  : state->m_vidregs[reg026]=data; write_reg_026(state); break;
304        case    reg028  : change_palette(space->machine(),0,data,reg028); break;
305        case    reg02A  : change_palette(space->machine(),1,data,reg02A); break;
306        case    reg02C  : change_palette(space->machine(),2,data,reg02C); break;
307        case    reg02E  : change_palette(space->machine(),3,data,reg02E); break;
300        case    reg020  : m_vidregs[reg020]=data; break;
301        case    reg022  : m_vidregs[reg022]=data; break;
302        case    reg024  : m_vidregs[reg024]=data; break;
303        case    reg026  : m_vidregs[reg026]=data; write_reg_026(state); break;
304        case    reg028  : change_palette(machine(),0,data,reg028); break;
305        case    reg02A  : change_palette(machine(),1,data,reg02A); break;
306        case    reg02C  : change_palette(machine(),2,data,reg02C); break;
307        case    reg02E  : change_palette(machine(),3,data,reg02E); break;
308308
309309        default         : break;
310310    }
src/mess/video/odyssey2.c
r14963r14964
142142   }
143143}
144144
145READ8_HANDLER( odyssey2_video_r )
145READ8_MEMBER(odyssey2_state::odyssey2_video_r)
146146{
147   odyssey2_state *state = space->machine().driver_data<odyssey2_state>();
148147    UINT8 data = 0;
149148
150149    switch (offset)
151150    {
152151        case 0xa1:
153         data = state->m_control_status;
154         state->m_iff = 0;
155         cputag_set_input_line(space->machine(), "maincpu", 0, CLEAR_LINE);
156         state->m_control_status &= ~ 0x08;
157         if ( space->machine().primary_screen->hpos() < I824X_START_ACTIVE_SCAN || space->machine().primary_screen->hpos() > I824X_END_ACTIVE_SCAN )
152         data = m_control_status;
153         m_iff = 0;
154         cputag_set_input_line(machine(), "maincpu", 0, CLEAR_LINE);
155         m_control_status &= ~ 0x08;
156         if ( machine().primary_screen->hpos() < I824X_START_ACTIVE_SCAN || machine().primary_screen->hpos() > I824X_END_ACTIVE_SCAN )
158157         {
159158            data |= 1;
160159         }
r14963r14964
162161            break;
163162
164163        case 0xa2:
165         data = state->m_collision_status;
166         state->m_collision_status = 0;
164         data = m_collision_status;
165         m_collision_status = 0;
167166
168167            break;
169168
170169        case 0xa4:
171170
172            if ((state->m_o2_vdc.s.control & VDC_CONTROL_REG_STROBE_XY))
173                state->m_y_beam_pos = space->machine().primary_screen->vpos() - state->m_start_vpos;
171            if ((m_o2_vdc.s.control & VDC_CONTROL_REG_STROBE_XY))
172                m_y_beam_pos = machine().primary_screen->vpos() - m_start_vpos;
174173
175            data = state->m_y_beam_pos;
174            data = m_y_beam_pos;
176175
177176            break;
178177
179178
180179        case 0xa5:
181180
182            if ((state->m_o2_vdc.s.control & VDC_CONTROL_REG_STROBE_XY))
181            if ((m_o2_vdc.s.control & VDC_CONTROL_REG_STROBE_XY))
183182         {
184                state->m_x_beam_pos = space->machine().primary_screen->hpos();
185            if ( state->m_x_beam_pos < I824X_START_ACTIVE_SCAN )
183                m_x_beam_pos = machine().primary_screen->hpos();
184            if ( m_x_beam_pos < I824X_START_ACTIVE_SCAN )
186185            {
187               state->m_x_beam_pos = state->m_x_beam_pos - I824X_START_ACTIVE_SCAN + I824X_LINE_CLOCKS;
186               m_x_beam_pos = m_x_beam_pos - I824X_START_ACTIVE_SCAN + I824X_LINE_CLOCKS;
188187            }
189188            else
190189            {
191               state->m_x_beam_pos = state->m_x_beam_pos - I824X_START_ACTIVE_SCAN;
190               m_x_beam_pos = m_x_beam_pos - I824X_START_ACTIVE_SCAN;
192191            }
193192         }
194193
195            data = state->m_x_beam_pos;
194            data = m_x_beam_pos;
196195
197196            break;
198197
199198        default:
200            data = state->m_o2_vdc.reg[offset];
199            data = m_o2_vdc.reg[offset];
201200    }
202201
203202    return data;
204203}
205204
206WRITE8_HANDLER( odyssey2_video_w )
205WRITE8_MEMBER(odyssey2_state::odyssey2_video_w)
207206{
208   odyssey2_state *state = space->machine().driver_data<odyssey2_state>();
209207   /* Update the sound */
210208   if( offset >= 0xa7 && offset <= 0xaa )
211      state->m_sh_channel->update();
209      m_sh_channel->update();
212210
213211    if (offset == 0xa0) {
214212
215213
216        if (    state->m_o2_vdc.s.control & VDC_CONTROL_REG_STROBE_XY
214        if (    m_o2_vdc.s.control & VDC_CONTROL_REG_STROBE_XY
217215             && !(data & VDC_CONTROL_REG_STROBE_XY))
218216        {
219217            /* Toggling strobe bit, tuck away values */
220            state->m_x_beam_pos = space->machine().primary_screen->hpos();
221         if ( state->m_x_beam_pos < I824X_START_ACTIVE_SCAN )
218            m_x_beam_pos = machine().primary_screen->hpos();
219         if ( m_x_beam_pos < I824X_START_ACTIVE_SCAN )
222220         {
223            state->m_x_beam_pos = state->m_x_beam_pos - I824X_START_ACTIVE_SCAN + 228;
221            m_x_beam_pos = m_x_beam_pos - I824X_START_ACTIVE_SCAN + 228;
224222         }
225223         else
226224         {
227            state->m_x_beam_pos = state->m_x_beam_pos - I824X_START_ACTIVE_SCAN;
225            m_x_beam_pos = m_x_beam_pos - I824X_START_ACTIVE_SCAN;
228226         }
229227
230            state->m_y_beam_pos = space->machine().primary_screen->vpos() - state->m_start_vpos;
228            m_y_beam_pos = machine().primary_screen->vpos() - m_start_vpos;
231229        }
232230    }
233231
234    state->m_o2_vdc.reg[offset] = data;
232    m_o2_vdc.reg[offset] = data;
235233}
236234
237WRITE8_HANDLER ( odyssey2_lum_w )
235WRITE8_MEMBER(odyssey2_state::odyssey2_lum_w)
238236{
239   odyssey2_state *state = space->machine().driver_data<odyssey2_state>();
240   state->m_lum = data;
237   m_lum = data;
241238}
242239
243READ8_HANDLER( odyssey2_t1_r )
240READ8_MEMBER(odyssey2_state::odyssey2_t1_r)
244241{
245   odyssey2_state *state = space->machine().driver_data<odyssey2_state>();
246   if ( space->machine().primary_screen->vpos() > state->m_start_vpos && space->machine().primary_screen->vpos() < state->m_start_vblank )
242   if ( machine().primary_screen->vpos() > m_start_vpos && machine().primary_screen->vpos() < m_start_vblank )
247243   {
248      if ( space->machine().primary_screen->hpos() >= I824X_START_ACTIVE_SCAN && space->machine().primary_screen->hpos() < I824X_END_ACTIVE_SCAN )
244      if ( machine().primary_screen->hpos() >= I824X_START_ACTIVE_SCAN && machine().primary_screen->hpos() < I824X_END_ACTIVE_SCAN )
249245      {
250246         return 1;
251247      }
src/mess/video/pecom.c
r14963r14964
1212#include "cpu/cosmac/cosmac.h"
1313#include "includes/pecom.h"
1414
15WRITE8_HANDLER( pecom_cdp1869_w )
15WRITE8_MEMBER(pecom_state::pecom_cdp1869_w)
1616{
17   pecom_state *state = space->machine().driver_data<pecom_state>();
1817
19   UINT16 ma = state->m_cdp1802->get_memory_address();
18   UINT16 ma = m_cdp1802->get_memory_address();
2019
2120   switch (offset + 3)
2221   {
2322   case 3:
24      state->m_cdp1869->out3_w(*space, ma, data);
23      m_cdp1869->out3_w(space, ma, data);
2524      break;
2625
2726   case 4:
28      state->m_cdp1869->out4_w(*space, ma, data);
27      m_cdp1869->out4_w(space, ma, data);
2928      break;
3029
3130   case 5:
32      state->m_cdp1869->out5_w(*space, ma, data);
31      m_cdp1869->out5_w(space, ma, data);
3332      break;
3433
3534   case 6:
36      state->m_cdp1869->out6_w(*space, ma, data);
35      m_cdp1869->out6_w(space, ma, data);
3736      break;
3837
3938   case 7:
40      state->m_cdp1869->out7_w(*space, ma, data);
39      m_cdp1869->out7_w(space, ma, data);
4140      break;
4241   }
4342}
src/mess/video/bbc.c
r14963r14964
107107}
108108
109109
110WRITE8_HANDLER ( bbc_videoULA_w )
110WRITE8_MEMBER(bbc_state::bbc_videoULA_w)
111111{
112   bbc_state *state = space->machine().driver_data<bbc_state>();
113112
114113   // Make sure vpos is never <0 2008-10-11 PHS.
115   int vpos=space->machine().primary_screen->vpos();
114   int vpos=machine().primary_screen->vpos();
116115   if(vpos==0)
117     space->machine().primary_screen->update_partial(vpos);
116     machine().primary_screen->update_partial(vpos);
118117   else
119     space->machine().primary_screen->update_partial(vpos -1 );
118     machine().primary_screen->update_partial(vpos -1 );
120119
121   logerror("setting videoULA %.4x to:%.4x   at :%d \n",data,offset,space->machine().primary_screen->vpos() );
120   logerror("setting videoULA %.4x to:%.4x   at :%d \n",data,offset,machine().primary_screen->vpos() );
122121
123122
124123   switch (offset&0x01)
r14963r14964
126125   // Set the control register in the Video ULA
127126   case 0:
128127      {
129      state->m_videoULA_Reg=data;
130      state->m_videoULA_master_cursor_size=    (state->m_videoULA_Reg>>7)&0x01;
131      state->m_videoULA_width_of_cursor=       (state->m_videoULA_Reg>>5)&0x03;
132      state->m_videoULA_6845_clock_rate=       (state->m_videoULA_Reg>>4)&0x01;
133      state->m_videoULA_characters_per_line=   (state->m_videoULA_Reg>>2)&0x03;
134      state->m_videoULA_teletext_normal_select=(state->m_videoULA_Reg>>1)&0x01;
135      state->m_videoULA_flash_colour_select=    state->m_videoULA_Reg    &0x01;
128      m_videoULA_Reg=data;
129      m_videoULA_master_cursor_size=    (m_videoULA_Reg>>7)&0x01;
130      m_videoULA_width_of_cursor=       (m_videoULA_Reg>>5)&0x03;
131      m_videoULA_6845_clock_rate=       (m_videoULA_Reg>>4)&0x01;
132      m_videoULA_characters_per_line=   (m_videoULA_Reg>>2)&0x03;
133      m_videoULA_teletext_normal_select=(m_videoULA_Reg>>1)&0x01;
134      m_videoULA_flash_colour_select=    m_videoULA_Reg    &0x01;
136135
137      state->m_videoULA_pallet_lookup=state->m_videoULA_flash_colour_select?state->m_videoULA_pallet0:state->m_videoULA_pallet1;
136      m_videoULA_pallet_lookup=m_videoULA_flash_colour_select?m_videoULA_pallet0:m_videoULA_pallet1;
138137
139      state->m_emulation_cursor_size=width_of_cursor_set[state->m_videoULA_width_of_cursor|(state->m_videoULA_master_cursor_size<<2)];
138      m_emulation_cursor_size=width_of_cursor_set[m_videoULA_width_of_cursor|(m_videoULA_master_cursor_size<<2)];
140139
141140      // this is the number of BBC pixels held in each byte
142      if (state->m_videoULA_teletext_normal_select)
141      if (m_videoULA_teletext_normal_select)
143142      {
144         state->m_pixels_per_byte=6;
143         m_pixels_per_byte=6;
145144      } else {
146         state->m_pixels_per_byte=pixels_per_byte_set[state->m_videoULA_characters_per_line|(state->m_videoULA_6845_clock_rate<<2)];
145         m_pixels_per_byte=pixels_per_byte_set[m_videoULA_characters_per_line|(m_videoULA_6845_clock_rate<<2)];
147146      }
148      mc6845_device *mc6845 = state->machine().device<mc6845_device>("mc6845");
149      mc6845->set_hpixels_per_column(state->m_pixels_per_byte);
150      if (state->m_videoULA_6845_clock_rate)
147      mc6845_device *mc6845 = machine().device<mc6845_device>("mc6845");
148      mc6845->set_hpixels_per_column(m_pixels_per_byte);
149      if (m_videoULA_6845_clock_rate)
151150         mc6845->set_clock(2000000);
152151      else
153152         mc6845->set_clock(1000000);
r14963r14964
157156   case 1:
158157      int tpal=(data>>4)&0x0f;
159158      int tcol=data&0x0f;
160      state->m_videoULA_pallet0[tpal]=tcol;
161      state->m_videoULA_pallet1[tpal]=tcol<8?tcol:tcol^7;
159      m_videoULA_pallet0[tpal]=tcol;
160      m_videoULA_pallet1[tpal]=tcol<8?tcol:tcol^7;
162161      break;
163162   }
164163}
r14963r14964
302301 * memory interface to BBC's 6845
303302 ************************************************************************/
304303
305WRITE8_HANDLER ( bbc_6845_w )
304WRITE8_MEMBER(bbc_state::bbc_6845_w)
306305{
307   mc6845_device *mc6845 = space->machine().device<mc6845_device>("mc6845");
306   mc6845_device *mc6845 = machine().device<mc6845_device>("mc6845");
308307   switch(offset & 1)
309308   {
310309      case 0 :
311         mc6845->address_w(*space,0,data);
310         mc6845->address_w(space,0,data);
312311         break;
313312      case 1 :
314         mc6845->register_w(*space,0,data);
313         mc6845->register_w(space,0,data);
315314         break;
316315   }
317316   return;
318317}
319318
320READ8_HANDLER (bbc_6845_r)
319READ8_MEMBER(bbc_state::bbc_6845_r)
321320{
322321
323   mc6845_device *mc6845 = space->machine().device<mc6845_device>("mc6845");
322   mc6845_device *mc6845 = machine().device<mc6845_device>("mc6845");
324323
325324   switch (offset&1)
326325   {
327      case 0: return mc6845->status_r(*space,0); break;
328      case 1: return mc6845->register_r(*space,0); break;
326      case 0: return mc6845->status_r(space,0); break;
327      case 1: return mc6845->register_r(space,0); break;
329328   }
330329   return 0;
331330}
r14963r14964
581580
582581
583582
584WRITE8_HANDLER ( bbc_6845_w )
583WRITE8_MEMBER(bbc_state::bbc_6845_w)
585584{
586    mc6845_device *mc6845 = space->machine().device<mc6845_device>("mc6845");
585    mc6845_device *mc6845 = machine().device<mc6845_device>("mc6845");
587586    switch(offset & 1)
588587    {
589588        case 0 :
590            mc6845->address_w(*space,0,data);
589            mc6845->address_w(space,0,data);
591590            break;
592591        case 1 :
593            mc6845->register_w(*space,0,data);
592            mc6845->register_w(space,0,data);
594593            break;
595594    }
596595    return;
src/mess/video/fm7.c
r14963r14964
2020 *   bit 6: Sub-CPU cancel IRQ
2121 */
2222
23READ8_HANDLER( fm7_subintf_r )
23READ8_MEMBER(fm7_state::fm7_subintf_r)
2424{
25   fm7_state *state = space->machine().driver_data<fm7_state>();
2625   UINT8 ret = 0x00;
2726
28   if(state->m_video.sub_busy != 0 || state->m_video.sub_halt != 0)
27   if(m_video.sub_busy != 0 || m_video.sub_halt != 0)
2928      ret |= 0x80;
3029
3130   ret |= 0x7e;
r14963r14964
3433   return ret;
3534}
3635
37WRITE8_HANDLER( fm7_subintf_w )
36WRITE8_MEMBER(fm7_state::fm7_subintf_w)
3837{
39   fm7_state *state = space->machine().driver_data<fm7_state>();
40   state->m_video.sub_halt = data & 0x80;
38   m_video.sub_halt = data & 0x80;
4139   if(data & 0x80)
42      state->m_video.sub_busy = data & 0x80;
40      m_video.sub_busy = data & 0x80;
4341
44   cputag_set_input_line(space->machine(),"sub",INPUT_LINE_HALT,(data & 0x80) ? ASSERT_LINE : CLEAR_LINE);
42   cputag_set_input_line(machine(),"sub",INPUT_LINE_HALT,(data & 0x80) ? ASSERT_LINE : CLEAR_LINE);
4543   if(data & 0x40)
46      cputag_set_input_line(space->machine(),"sub",M6809_IRQ_LINE,ASSERT_LINE);
44      cputag_set_input_line(machine(),"sub",M6809_IRQ_LINE,ASSERT_LINE);
4745   //popmessage("Sub CPU Interface write: %02x\n",data);
4846}
4947
50READ8_HANDLER( fm7_sub_busyflag_r )
48READ8_MEMBER(fm7_state::fm7_sub_busyflag_r)
5149{
52   fm7_state *state = space->machine().driver_data<fm7_state>();
53   if(state->m_video.sub_halt == 0)
54      state->m_video.sub_busy = 0x00;
50   if(m_video.sub_halt == 0)
51      m_video.sub_busy = 0x00;
5552   return 0x00;
5653}
5754
58WRITE8_HANDLER( fm7_sub_busyflag_w )
55WRITE8_MEMBER(fm7_state::fm7_sub_busyflag_w)
5956{
60   fm7_state *state = space->machine().driver_data<fm7_state>();
61   state->m_video.sub_busy = 0x80;
57   m_video.sub_busy = 0x80;
6258}
6359
6460/*
6561 * Sub-CPU port 0xd402
6662 *   Read-only: Acknowledge Cancel IRQ
6763 */
68READ8_HANDLER( fm7_cancel_ack )
64READ8_MEMBER(fm7_state::fm7_cancel_ack)
6965{
70   cputag_set_input_line(space->machine(),"sub",M6809_IRQ_LINE,CLEAR_LINE);
66   cputag_set_input_line(machine(),"sub",M6809_IRQ_LINE,CLEAR_LINE);
7167   return 0x00;
7268}
7369
7470/*
7571 * Reading from 0xd404 (sub-CPU) causes an "Attention" FIRQ on the main CPU
7672 */
77READ8_HANDLER( fm7_attn_irq_r )
73READ8_MEMBER(fm7_state::fm7_attn_irq_r)
7874{
79   fm7_state *state = space->machine().driver_data<fm7_state>();
80   state->m_video.attn_irq = 1;
81   cputag_set_input_line(space->machine(),"maincpu",M6809_FIRQ_LINE,ASSERT_LINE);
75   m_video.attn_irq = 1;
76   cputag_set_input_line(machine(),"maincpu",M6809_FIRQ_LINE,ASSERT_LINE);
8277   return 0xff;
8378}
8479
r14963r14964
8883 *  On read, enables VRAM access
8984 *  On write, disables VRAM access
9085 */
91READ8_HANDLER( fm7_vram_access_r )
86READ8_MEMBER(fm7_state::fm7_vram_access_r)
9287{
93   fm7_state *state = space->machine().driver_data<fm7_state>();
94   state->m_video.vram_access = 1;
88   m_video.vram_access = 1;
9589   return 0xff;
9690}
9791
98WRITE8_HANDLER( fm7_vram_access_w )
92WRITE8_MEMBER(fm7_state::fm7_vram_access_w)
9993{
100   fm7_state *state = space->machine().driver_data<fm7_state>();
101   state->m_video.vram_access = 0;
94   m_video.vram_access = 0;
10295}
10396
10497static TIMER_CALLBACK( fm77av_alu_task_end )
r14963r14964
638631   machine.scheduler().timer_set(attotime::from_usec(byte_count/16), FUNC(fm77av_alu_task_end));
639632}
640633
641READ8_HANDLER( fm7_vram_r )
634READ8_MEMBER(fm7_state::fm7_vram_r)
642635{
643   fm7_state *state = space->machine().driver_data<fm7_state>();
644636   int offs;
645637   UINT16 page = 0x0000;
646638
647   if(state->m_video.active_video_page != 0)
639   if(m_video.active_video_page != 0)
648640      page = 0xc000;
649641
650   if(offset < 0x4000 && (state->m_video.multi_page & 0x01))
642   if(offset < 0x4000 && (m_video.multi_page & 0x01))
651643      return 0xff;
652   if((offset < 0x8000 && offset >=0x4000) && (state->m_video.multi_page & 0x02))
644   if((offset < 0x8000 && offset >=0x4000) && (m_video.multi_page & 0x02))
653645      return 0xff;
654   if((offset < 0xc000 && offset >=0x8000) && (state->m_video.multi_page & 0x04))
646   if((offset < 0xc000 && offset >=0x8000) && (m_video.multi_page & 0x04))
655647      return 0xff;
656648
657   if(state->m_alu.command & 0x80) // ALU active, writes to VRAM even when reading it (go figure)
649   if(m_alu.command & 0x80) // ALU active, writes to VRAM even when reading it (go figure)
658650   {
651      fm7_state *state = machine().driver_data<fm7_state>();
659652      fm7_alu_function(state, offset+page);
660653   }
661654
662   if(state->m_video.modestatus & 0x40)
655   if(m_video.modestatus & 0x40)
663656   {
664      if(state->m_video.active_video_page != 0)
665         offs = (offset & 0xe000) | ((offset + state->m_video.vram_offset2) & 0x1fff);
657      if(m_video.active_video_page != 0)
658         offs = (offset & 0xe000) | ((offset + m_video.vram_offset2) & 0x1fff);
666659      else
667         offs = (offset & 0xe000) | ((offset + state->m_video.vram_offset) & 0x1fff);
660         offs = (offset & 0xe000) | ((offset + m_video.vram_offset) & 0x1fff);
668661   }
669662   else
670663   {
671      if(state->m_video.active_video_page != 0)
672         offs = (offset & 0xc000) | ((offset + state->m_video.vram_offset2) & 0x3fff);
664      if(m_video.active_video_page != 0)
665         offs = (offset & 0xc000) | ((offset + m_video.vram_offset2) & 0x3fff);
673666      else
674         offs = (offset & 0xc000) | ((offset + state->m_video.vram_offset) & 0x3fff);
667         offs = (offset & 0xc000) | ((offset + m_video.vram_offset) & 0x3fff);
675668   }
676   return state->m_video_ram[offs + page];
669   return m_video_ram[offs + page];
677670}
678671
679WRITE8_HANDLER( fm7_vram_w )
672WRITE8_MEMBER(fm7_state::fm7_vram_w)
680673{
681   fm7_state *state = space->machine().driver_data<fm7_state>();
682674   int offs;
683675   UINT16 page = 0x0000;
684676
685   if(state->m_video.active_video_page != 0)
677   if(m_video.active_video_page != 0)
686678      page = 0xc000;
687679
688   if(offset < 0x4000 && (state->m_video.multi_page & 0x01))
680   if(offset < 0x4000 && (m_video.multi_page & 0x01))
689681      return;
690   if((offset < 0x8000 && offset >=0x4000) && (state->m_video.multi_page & 0x02))
682   if((offset < 0x8000 && offset >=0x4000) && (m_video.multi_page & 0x02))
691683      return;
692   if((offset < 0xc000 && offset >=0x8000) && (state->m_video.multi_page & 0x04))
684   if((offset < 0xc000 && offset >=0x8000) && (m_video.multi_page & 0x04))
693685      return;
694686
695   if(state->m_alu.command & 0x80) // ALU active
687   if(m_alu.command & 0x80) // ALU active
696688   {
689      fm7_state *state = machine().driver_data<fm7_state>();
697690      fm7_alu_function(state, offset+page);
698691      return;
699692   }
700693
701   if(state->m_video.modestatus & 0x40)
694   if(m_video.modestatus & 0x40)
702695   {
703      if(state->m_video.active_video_page != 0)
704         offs = (offset & 0xe000) | ((offset + state->m_video.vram_offset2) & 0x1fff);
696      if(m_video.active_video_page != 0)
697         offs = (offset & 0xe000) | ((offset + m_video.vram_offset2) & 0x1fff);
705698      else
706         offs = (offset & 0xe000) | ((offset + state->m_video.vram_offset) & 0x1fff);
699         offs = (offset & 0xe000) | ((offset + m_video.vram_offset) & 0x1fff);
707700   }
708701   else
709702   {
710      if(state->m_video.active_video_page != 0)
711         offs = (offset & 0xc000) | ((offset + state->m_video.vram_offset2) & 0x3fff);
703      if(m_video.active_video_page != 0)
704         offs = (offset & 0xc000) | ((offset + m_video.vram_offset2) & 0x3fff);
712705      else
713         offs = (offset & 0xc000) | ((offset + state->m_video.vram_offset) & 0x3fff);
706         offs = (offset & 0xc000) | ((offset + m_video.vram_offset) & 0x3fff);
714707   }
715//  if(state->m_video.vram_access != 0)
716      state->m_video_ram[offs+page] = data;
708//  if(m_video.vram_access != 0)
709      m_video_ram[offs+page] = data;
717710}
718711
719712// not pretty, but it should work.
720static WRITE8_HANDLER( fm7_vram_banked_w )
713WRITE8_MEMBER(fm7_state::fm7_vram_banked_w)
721714{
722   fm7_state *state = space->machine().driver_data<fm7_state>();
723715   int offs;
724716   UINT16 page = 0x0000;
725717
726   if(!state->m_video.sub_halt)  // no access if sub CPU is not halted.
718   if(!m_video.sub_halt)  // no access if sub CPU is not halted.
727719      return;
728720
729   if(state->m_video.active_video_page != 0)
721   if(m_video.active_video_page != 0)
730722      page = 0xc000;
731723
732   if(offset < 0x4000 && (state->m_video.multi_page & 0x01))
724   if(offset < 0x4000 && (m_video.multi_page & 0x01))
733725      return;
734   if((offset < 0x8000 && offset >=0x4000) && (state->m_video.multi_page & 0x02))
726   if((offset < 0x8000 && offset >=0x4000) && (m_video.multi_page & 0x02))
735727      return;
736   if((offset < 0xc000 && offset >=0x8000) && (state->m_video.multi_page & 0x04))
728   if((offset < 0xc000 && offset >=0x8000) && (m_video.multi_page & 0x04))
737729      return;
738730
739   if(state->m_alu.command & 0x80) // ALU active
731   if(m_alu.command & 0x80) // ALU active
740732   {
733      fm7_state *state = machine().driver_data<fm7_state>();
741734      fm7_alu_function(state, offset+page);
742735      return;
743736   }
744737
745   if(state->m_video.modestatus & 0x40)
738   if(m_video.modestatus & 0x40)
746739   {
747      if(state->m_video.active_video_page != 0)
748         offs = (offset & 0xe000) | ((offset + state->m_video.vram_offset2) & 0x1fff);
740      if(m_video.active_video_page != 0)
741         offs = (offset & 0xe000) | ((offset + m_video.vram_offset2) & 0x1fff);
749742      else
750         offs = (offset & 0xe000) | ((offset + state->m_video.vram_offset) & 0x1fff);
743         offs = (offset & 0xe000) | ((offset + m_video.vram_offset) & 0x1fff);
751744   }
752745   else
753746   {
754      if(state->m_video.active_video_page != 0)
755         offs = (offset & 0xc000) | ((offset + state->m_video.vram_offset2) & 0x3fff);
747      if(m_video.active_video_page != 0)
748         offs = (offset & 0xc000) | ((offset + m_video.vram_offset2) & 0x3fff);
756749      else
757         offs = (offset & 0xc000) | ((offset + state->m_video.vram_offset) & 0x3fff);
750         offs = (offset & 0xc000) | ((offset + m_video.vram_offset) & 0x3fff);
758751   }
759   state->m_video_ram[offs+page] = data;
752   m_video_ram[offs+page] = data;
760753}
761754
762READ8_HANDLER( fm7_vram0_r )
755READ8_MEMBER(fm7_state::fm7_vram0_r)
763756{
764   fm7_state *state = space->machine().driver_data<fm7_state>();
765   if(!state->m_video.sub_halt)  // no access if sub CPU is not halted.
757   if(!m_video.sub_halt)  // no access if sub CPU is not halted.
766758      return 0xff;
767759   return fm7_vram_r(space,offset);
768760}
769761
770READ8_HANDLER( fm7_vram1_r )
762READ8_MEMBER(fm7_state::fm7_vram1_r)
771763{
772   fm7_state *state = space->machine().driver_data<fm7_state>();
773   if(!state->m_video.sub_halt)  // no access if sub CPU is not halted.
764   if(!m_video.sub_halt)  // no access if sub CPU is not halted.
774765      return 0xff;
775766   return fm7_vram_r(space,offset+0x1000);
776767}
777768
778READ8_HANDLER( fm7_vram2_r )
769READ8_MEMBER(fm7_state::fm7_vram2_r)
779770{
780   fm7_state *state = space->machine().driver_data<fm7_state>();
781   if(!state->m_video.sub_halt)  // no access if sub CPU is not halted.
771   if(!m_video.sub_halt)  // no access if sub CPU is not halted.
782772      return 0xff;
783773   return fm7_vram_r(space,offset+0x2000);
784774}
785775
786READ8_HANDLER( fm7_vram3_r )
776READ8_MEMBER(fm7_state::fm7_vram3_r)
787777{
788   fm7_state *state = space->machine().driver_data<fm7_state>();
789   if(!state->m_video.sub_halt)  // no access if sub CPU is not halted.
778   if(!m_video.sub_halt)  // no access if sub CPU is not halted.
790779      return 0xff;
791780   return fm7_vram_r(space,offset+0x3000);
792781}
793782
794READ8_HANDLER( fm7_vram4_r )
783READ8_MEMBER(fm7_state::fm7_vram4_r)
795784{
796   fm7_state *state = space->machine().driver_data<fm7_state>();
797   if(!state->m_video.sub_halt)  // no access if sub CPU is not halted.
785   if(!m_video.sub_halt)  // no access if sub CPU is not halted.
798786      return 0xff;
799787   return fm7_vram_r(space,offset+0x4000);
800788}
801789
802READ8_HANDLER( fm7_vram5_r )
790READ8_MEMBER(fm7_state::fm7_vram5_r)
803791{
804   fm7_state *state = space->machine().driver_data<fm7_state>();
805   if(!state->m_video.sub_halt)  // no access if sub CPU is not halted.
792   if(!m_video.sub_halt)  // no access if sub CPU is not halted.
806793      return 0xff;
807794   return fm7_vram_r(space,offset+0x5000);
808795}
809796
810READ8_HANDLER( fm7_vram6_r )
797READ8_MEMBER(fm7_state::fm7_vram6_r)
811798{
812   fm7_state *state = space->machine().driver_data<fm7_state>();
813   if(!state->m_video.sub_halt)  // no access if sub CPU is not halted.
799   if(!m_video.sub_halt)  // no access if sub CPU is not halted.
814800      return 0xff;
815801   return fm7_vram_r(space,offset+0x6000);
816802}
817803
818READ8_HANDLER( fm7_vram7_r )
804READ8_MEMBER(fm7_state::fm7_vram7_r)
819805{
820   fm7_state *state = space->machine().driver_data<fm7_state>();
821   if(!state->m_video.sub_halt)  // no access if sub CPU is not halted.
806   if(!m_video.sub_halt)  // no access if sub CPU is not halted.
822807      return 0xff;
823808   return fm7_vram_r(space,offset+0x7000);
824809}
825810
826READ8_HANDLER( fm7_vram8_r )
811READ8_MEMBER(fm7_state::fm7_vram8_r)
827812{
828   fm7_state *state = space->machine().driver_data<fm7_state>();
829   if(!state->m_video.sub_halt)  // no access if sub CPU is not halted.
813   if(!m_video.sub_halt)  // no access if sub CPU is not halted.
830814      return 0xff;
831815   return fm7_vram_r(space,offset+0x8000);
832816}
833817
834READ8_HANDLER( fm7_vram9_r )
818READ8_MEMBER(fm7_state::fm7_vram9_r)
835819{
836   fm7_state *state = space->machine().driver_data<fm7_state>();
837   if(!state->m_video.sub_halt)  // no access if sub CPU is not halted.
820   if(!m_video.sub_halt)  // no access if sub CPU is not halted.
838821      return 0xff;
839822   return fm7_vram_r(space,offset+0x9000);
840823}
841824
842READ8_HANDLER( fm7_vramA_r )
825READ8_MEMBER(fm7_state::fm7_vramA_r)
843826{
844   fm7_state *state = space->machine().driver_data<fm7_state>();
845   if(!state->m_video.sub_halt)  // no access if sub CPU is not halted.
827   if(!m_video.sub_halt)  // no access if sub CPU is not halted.
846828      return 0xff;
847829   return fm7_vram_r(space,offset+0xa000);
848830}
849831
850READ8_HANDLER( fm7_vramB_r )
832READ8_MEMBER(fm7_state::fm7_vramB_r)
851833{
852   fm7_state *state = space->machine().driver_data<fm7_state>();
853   if(!state->m_video.sub_halt)  // no access if sub CPU is not halted.
834   if(!m_video.sub_halt)  // no access if sub CPU is not halted.
854835      return 0xff;
855836   return fm7_vram_r(space,offset+0xb000);
856837}
857838
858WRITE8_HANDLER( fm7_vram0_w )
839WRITE8_MEMBER(fm7_state::fm7_vram0_w)
859840{
860841   fm7_vram_banked_w(space,offset,data);
861842}
862843
863WRITE8_HANDLER( fm7_vram1_w )
844WRITE8_MEMBER(fm7_state::fm7_vram1_w)
864845{
865846   fm7_vram_banked_w(space,offset+0x1000,data);
866847}
867848
868WRITE8_HANDLER( fm7_vram2_w )
849WRITE8_MEMBER(fm7_state::fm7_vram2_w)
869850{
870851   fm7_vram_banked_w(space,offset+0x2000,data);
871852}
872853
873WRITE8_HANDLER( fm7_vram3_w )
854WRITE8_MEMBER(fm7_state::fm7_vram3_w)
874855{
875856   fm7_vram_banked_w(space,offset+0x3000,data);
876857}
877858
878WRITE8_HANDLER( fm7_vram4_w )
859WRITE8_MEMBER(fm7_state::fm7_vram4_w)
879860{
880861   fm7_vram_banked_w(space,offset+0x4000,data);
881862}
882863
883WRITE8_HANDLER( fm7_vram5_w )
864WRITE8_MEMBER(fm7_state::fm7_vram5_w)
884865{
885866   fm7_vram_banked_w(space,offset+0x5000,data);
886867}
887868
888WRITE8_HANDLER( fm7_vram6_w )
869WRITE8_MEMBER(fm7_state::fm7_vram6_w)
889870{
890871   fm7_vram_banked_w(space,offset+0x6000,data);
891872}
892873
893WRITE8_HANDLER( fm7_vram7_w )
874WRITE8_MEMBER(fm7_state::fm7_vram7_w)
894875{
895876   fm7_vram_banked_w(space,offset+0x7000,data);
896877}
897878
898WRITE8_HANDLER( fm7_vram8_w )
879WRITE8_MEMBER(fm7_state::fm7_vram8_w)
899880{
900881   fm7_vram_banked_w(space,offset+0x8000,data);
901882}
902883
903WRITE8_HANDLER( fm7_vram9_w )
884WRITE8_MEMBER(fm7_state::fm7_vram9_w)
904885{
905886   fm7_vram_banked_w(space,offset+0x9000,data);
906887}
907888
908WRITE8_HANDLER( fm7_vramA_w )
889WRITE8_MEMBER(fm7_state::fm7_vramA_w)
909890{
910891   fm7_vram_banked_w(space,offset+0xa000,data);
911892}
912893
913WRITE8_HANDLER( fm7_vramB_w )
894WRITE8_MEMBER(fm7_state::fm7_vramB_w)
914895{
915896   fm7_vram_banked_w(space,offset+0xb000,data);
916897}
r14963r14964
921902 *  On read, enables the CRT display
922903 *  On write, disables the CRT display
923904 */
924READ8_HANDLER( fm7_crt_r )
905READ8_MEMBER(fm7_state::fm7_crt_r)
925906{
926   fm7_state *state = space->machine().driver_data<fm7_state>();
927   state->m_video.crt_enable = 1;
907   m_video.crt_enable = 1;
928908   return 0xff;
929909}
930910
931WRITE8_HANDLER( fm7_crt_w )
911WRITE8_MEMBER(fm7_state::fm7_crt_w)
932912{
933   fm7_state *state = space->machine().driver_data<fm7_state>();
934   state->m_video.crt_enable = 0;
913   m_video.crt_enable = 0;
935914}
936915
937916/*
r14963r14964
940919 *  0xd40e: bits 0-6 - offset in bytes (high byte) (bit 6 is used for 400 line video only)
941920 *  0xd40f: bits 0-7 - offset in bytes (low byte)
942921 */
943WRITE8_HANDLER( fm7_vram_offset_w )
922WRITE8_MEMBER(fm7_state::fm7_vram_offset_w)
944923{
945   fm7_state *state = space->machine().driver_data<fm7_state>();
946924   UINT16 new_offset = 0;
947925
948926   switch(offset)
949927   {
950928      case 0:
951         if(state->m_video.active_video_page != 0)
952            new_offset = ((data & 0x3f) << 8) | (state->m_video.vram_offset2 & 0x00ff);
929         if(m_video.active_video_page != 0)
930            new_offset = ((data & 0x3f) << 8) | (m_video.vram_offset2 & 0x00ff);
953931         else
954            new_offset = ((data & 0x3f) << 8) | (state->m_video.vram_offset & 0x00ff);
932            new_offset = ((data & 0x3f) << 8) | (m_video.vram_offset & 0x00ff);
955933         break;
956934      case 1:  // low 5 bits are used on FM-77AV and later only
957         if(state->m_type == SYS_FM7)
958            new_offset = (state->m_video.vram_offset & 0xff00) | (data & 0xe0);
935         if(m_type == SYS_FM7)
936            new_offset = (m_video.vram_offset & 0xff00) | (data & 0xe0);
959937         else
960938         {
961            if(state->m_video.active_video_page != 0)
939            if(m_video.active_video_page != 0)
962940            {
963               if(state->m_video.fine_offset != 0)
964                  new_offset = (state->m_video.vram_offset2 & 0xff00) | (data & 0xff);
941               if(m_video.fine_offset != 0)
942                  new_offset = (m_video.vram_offset2 & 0xff00) | (data & 0xff);
965943               else
966                  new_offset = (state->m_video.vram_offset2 & 0xff00) | (data & 0xe0);
944                  new_offset = (m_video.vram_offset2 & 0xff00) | (data & 0xe0);
967945            }
968946            else
969947            {
970               if(state->m_video.fine_offset != 0)
971                  new_offset = (state->m_video.vram_offset & 0xff00) | (data & 0xff);
948               if(m_video.fine_offset != 0)
949                  new_offset = (m_video.vram_offset & 0xff00) | (data & 0xff);
972950               else
973                  new_offset = (state->m_video.vram_offset & 0xff00) | (data & 0xe0);
951                  new_offset = (m_video.vram_offset & 0xff00) | (data & 0xe0);
974952            }
975953         }
976954         break;
977955   }
978   if(state->m_video.active_video_page != 0)
979      state->m_video.vram_offset2 = new_offset;
956   if(m_video.active_video_page != 0)
957      m_video.vram_offset2 = new_offset;
980958   else
981      state->m_video.vram_offset = new_offset;
959      m_video.vram_offset = new_offset;
982960}
983961
984962/*
r14963r14964
989967 *  bits 6-4: VRAM planes to display (G,R,B) (1=disable)
990968 *  bits 2-0: VRAM CPU access (G,R,B) (1=disable)
991969 */
992WRITE8_HANDLER( fm7_multipage_w )
970WRITE8_MEMBER(fm7_state::fm7_multipage_w)
993971{
994   fm7_state *state = space->machine().driver_data<fm7_state>();
995   state->m_video.multi_page = data & 0x77;
972   m_video.multi_page = data & 0x77;
996973}
997974
998975/*
r14963r14964
1003980 *  bit 1 = Red
1004981 *  bit 0 = Blue
1005982 */
1006READ8_HANDLER( fm7_palette_r )
983READ8_MEMBER(fm7_state::fm7_palette_r)
1007984{
1008   fm7_state *state = space->machine().driver_data<fm7_state>();
1009   return state->m_video.fm7_pal[offset];
985   return m_video.fm7_pal[offset];
1010986}
1011987
1012WRITE8_HANDLER( fm7_palette_w )
988WRITE8_MEMBER(fm7_state::fm7_palette_w)
1013989{
1014   fm7_state *state = space->machine().driver_data<fm7_state>();
1015990   UINT8 r = 0,g = 0,b = 0;
1016991
1017992   if(data & 0x04)
r14963r14964
1021996   if(data & 0x01)
1022997      b = 0xff;
1023998
1024   palette_set_color(space->machine(),offset,MAKE_RGB(r,g,b));
1025   state->m_video.fm7_pal[offset] = data & 0x07;
999   palette_set_color(machine(),offset,MAKE_RGB(r,g,b));
1000   m_video.fm7_pal[offset] = data & 0x07;
10261001}
10271002
10281003/*
r14963r14964
10361011 *  fd33: red level (4 bits)
10371012 *  fd34: green level (4 bits)
10381013 */
1039WRITE8_HANDLER( fm77av_analog_palette_w )
1014WRITE8_MEMBER(fm7_state::fm77av_analog_palette_w)
10401015{
1041   fm7_state *state = space->machine().driver_data<fm7_state>();
10421016   int val;
10431017
10441018   switch(offset)
10451019   {
10461020      case 0:
1047         val = ((data & 0x0f) << 8) | (state->m_video.fm77av_pal_selected & 0x00ff);
1048         state->m_video.fm77av_pal_selected = val;
1021         val = ((data & 0x0f) << 8) | (m_video.fm77av_pal_selected & 0x00ff);
1022         m_video.fm77av_pal_selected = val;
10491023         break;
10501024      case 1:
1051         val = data | (state->m_video.fm77av_pal_selected & 0x0f00);
1052         state->m_video.fm77av_pal_selected = val;
1025         val = data | (m_video.fm77av_pal_selected & 0x0f00);
1026         m_video.fm77av_pal_selected = val;
10531027         break;
10541028      case 2:
1055         state->m_video.fm77av_pal_b[state->m_video.fm77av_pal_selected] = (data & 0x0f) << 4;
1056         palette_set_color(space->machine(),state->m_video.fm77av_pal_selected+8,
1057            MAKE_RGB(state->m_video.fm77av_pal_r[state->m_video.fm77av_pal_selected],
1058            state->m_video.fm77av_pal_g[state->m_video.fm77av_pal_selected],
1059            state->m_video.fm77av_pal_b[state->m_video.fm77av_pal_selected]));
1029         m_video.fm77av_pal_b[m_video.fm77av_pal_selected] = (data & 0x0f) << 4;
1030         palette_set_color(machine(),m_video.fm77av_pal_selected+8,
1031            MAKE_RGB(m_video.fm77av_pal_r[m_video.fm77av_pal_selected],
1032            m_video.fm77av_pal_g[m_video.fm77av_pal_selected],
1033            m_video.fm77av_pal_b[m_video.fm77av_pal_selected]));
10601034         break;
10611035      case 3:
1062         state->m_video.fm77av_pal_r[state->m_video.fm77av_pal_selected] = (data & 0x0f) << 4;
1063         palette_set_color(space->machine(),state->m_video.fm77av_pal_selected+8,
1064            MAKE_RGB(state->m_video.fm77av_pal_r[state->m_video.fm77av_pal_selected],
1065            state->m_video.fm77av_pal_g[state->m_video.fm77av_pal_selected],
1066            state->m_video.fm77av_pal_b[state->m_video.fm77av_pal_selected]));
1036         m_video.fm77av_pal_r[m_video.fm77av_pal_selected] = (data & 0x0f) << 4;
1037         palette_set_color(machine(),m_video.fm77av_pal_selected+8,
1038            MAKE_RGB(m_video.fm77av_pal_r[m_video.fm77av_pal_selected],
1039            m_video.fm77av_pal_g[m_video.fm77av_pal_selected],
1040            m_video.fm77av_pal_b[m_video.fm77av_pal_selected]));
10671041         break;
10681042      case 4:
1069         state->m_video.fm77av_pal_g[state->m_video.fm77av_pal_selected] = (data & 0x0f) << 4;
1070         palette_set_color(space->machine(),state->m_video.fm77av_pal_selected+8,
1071            MAKE_RGB(state->m_video.fm77av_pal_r[state->m_video.fm77av_pal_selected],
1072            state->m_video.fm77av_pal_g[state->m_video.fm77av_pal_selected],
1073            state->m_video.fm77av_pal_b[state->m_video.fm77av_pal_selected]));
1043         m_video.fm77av_pal_g[m_video.fm77av_pal_selected] = (data & 0x0f) << 4;
1044         palette_set_color(machine(),m_video.fm77av_pal_selected+8,
1045            MAKE_RGB(m_video.fm77av_pal_r[m_video.fm77av_pal_selected],
1046            m_video.fm77av_pal_g[m_video.fm77av_pal_selected],
1047            m_video.fm77av_pal_b[m_video.fm77av_pal_selected]));
10741048         break;
10751049   }
10761050}
r14963r14964
10901064 *             bit 6 - display VRAM page
10911065 *             bit 7 - NMI mask register (1=mask)
10921066 */
1093READ8_HANDLER( fm77av_video_flags_r )
1067READ8_MEMBER(fm7_state::fm77av_video_flags_r)
10941068{
1095   fm7_state *state = space->machine().driver_data<fm7_state>();
10961069   UINT8 ret = 0xff;
10971070
1098   if(space->machine().primary_screen->vblank())
1071   if(machine().primary_screen->vblank())
10991072      ret &= ~0x80;
11001073
1101   if(state->m_alu.busy != 0)
1074   if(m_alu.busy != 0)
11021075      ret &= ~0x10;
11031076
1104   if(state->m_video.vsync_flag == 0)
1077   if(m_video.vsync_flag == 0)
11051078      ret &= ~0x04;
11061079
1107   if(!state->m_video.sub_reset)
1080   if(!m_video.sub_reset)
11081081      ret &= ~0x01;
11091082
11101083   return ret;
11111084}
11121085
1113WRITE8_HANDLER( fm77av_video_flags_w )
1086WRITE8_MEMBER(fm7_state::fm77av_video_flags_w)
11141087{
1115   fm7_state *state = space->machine().driver_data<fm7_state>();
1116   UINT8* RAM = space->machine().region("subsyscg")->base();
1088   UINT8* RAM = machine().region("subsyscg")->base();
11171089
1118   state->m_video.cgrom = data & 0x03;
1119   memory_set_bankptr(space->machine(),"bank20",RAM+(state->m_video.cgrom*0x800));
1120   state->m_video.fine_offset = data & 0x04;
1121   state->m_video.active_video_page = data & 0x20;
1122   state->m_video.display_video_page = data & 0x40;
1123   state->m_video.nmi_mask = data & 0x80;
1090   m_video.cgrom = data & 0x03;
1091   memory_set_bankptr(machine(),"bank20",RAM+(m_video.cgrom*0x800));
1092   m_video.fine_offset = data & 0x04;
1093   m_video.active_video_page = data & 0x20;
1094   m_video.display_video_page = data & 0x40;
1095   m_video.nmi_mask = data & 0x80;
11241096}
11251097
11261098/*
r14963r14964
11301102 *  bit 1 (R/O) - DISPTMG status (0=blank)
11311103 *  bit 0 (R/O) - VSync status (1=sync?)
11321104 */
1133READ8_HANDLER( fm77av_sub_modestatus_r )
1105READ8_MEMBER(fm7_state::fm77av_sub_modestatus_r)
11341106{
1135   fm7_state *state = space->machine().driver_data<fm7_state>();
11361107   UINT8 ret = 0x00;
11371108
11381109   ret |= 0xbc;
1139   ret |= (state->m_video.modestatus & 0x40);
1110   ret |= (m_video.modestatus & 0x40);
11401111
1141   if(!space->machine().primary_screen->vblank())
1112   if(!machine().primary_screen->vblank())
11421113      ret |= 0x02;
11431114
1144   if(state->m_video.vsync_flag != 0)
1115   if(m_video.vsync_flag != 0)
11451116      ret |= 0x01;
11461117
11471118   return ret;
11481119}
11491120
1150WRITE8_HANDLER( fm77av_sub_modestatus_w )
1121WRITE8_MEMBER(fm7_state::fm77av_sub_modestatus_w)
11511122{
1152   fm7_state *state = space->machine().driver_data<fm7_state>();
1153   state->m_video.modestatus = data & 0x40;
1123   m_video.modestatus = data & 0x40;
11541124   if(data & 0x40)
11551125   {
11561126      rectangle rect(0, 320-1, 0, 200-1);
1157      space->machine().primary_screen->configure(320,200,rect,HZ_TO_ATTOSECONDS(60));
1127      machine().primary_screen->configure(320,200,rect,HZ_TO_ATTOSECONDS(60));
11581128   }
11591129   else
11601130   {
11611131      rectangle rect(0, 640-1, 0, 200-1);
1162      space->machine().primary_screen->configure(640,200,rect,HZ_TO_ATTOSECONDS(60));
1132      machine().primary_screen->configure(640,200,rect,HZ_TO_ATTOSECONDS(60));
11631133   }
11641134}
11651135
r14963r14964
11701140 *  bits 1 and 0 select which subsys ROM to be banked into sub CPU space
11711141 *  on the FM-77AV40 and later, bit 2 can also selected to bank in sub monitor RAM.
11721142 */
1173WRITE8_HANDLER( fm77av_sub_bank_w )
1143WRITE8_MEMBER(fm7_state::fm77av_sub_bank_w)
11741144{
1175   fm7_state *state = space->machine().driver_data<fm7_state>();
1176//  UINT8* RAM = space->machine().region("sub")->base();
1145//  UINT8* RAM = machine().region("sub")->base();
11771146   UINT8* ROM;
11781147
1179   if((data & 0x03) == (state->m_sb_prev & 0x03))
1148   if((data & 0x03) == (m_sb_prev & 0x03))
11801149      return;
11811150
1182   state->m_video.subrom = data & 0x03;
1151   m_video.subrom = data & 0x03;
11831152   switch (data & 0x03)
11841153   {
11851154      case 0x00:  // Type C, 640x200 (as used on the FM-7)
1186         ROM = space->machine().region("subsys_c")->base();
1187      //  memory_set_bankptr(space->machine(),20,ROM);
1188         memory_set_bankptr(space->machine(),"bank21",ROM+0x800);
1155         ROM = machine().region("subsys_c")->base();
1156      //  memory_set_bankptr(machine(),20,ROM);
1157         memory_set_bankptr(machine(),"bank21",ROM+0x800);
11891158         logerror("VID: Sub ROM Type C selected\n");
11901159         break;
11911160      case 0x01:  // Type A, 640x200
1192         ROM = space->machine().region("subsys_a")->base();
1193      //  memory_set_bankptr(space->machine(),20,RAM+0xd800);
1194         memory_set_bankptr(space->machine(),"bank21",ROM);
1161         ROM = machine().region("subsys_a")->base();
1162      //  memory_set_bankptr(machine(),20,RAM+0xd800);
1163         memory_set_bankptr(machine(),"bank21",ROM);
11951164         logerror("VID: Sub ROM Type A selected\n");
11961165         break;
11971166      case 0x02:  // Type B, 320x200
1198         ROM = space->machine().region("subsys_b")->base();
1199      //  memory_set_bankptr(space->machine(),20,RAM+0xd800);
1200         memory_set_bankptr(space->machine(),"bank21",ROM);
1167         ROM = machine().region("subsys_b")->base();
1168      //  memory_set_bankptr(machine(),20,RAM+0xd800);
1169         memory_set_bankptr(machine(),"bank21",ROM);
12011170         logerror("VID: Sub ROM Type B selected\n");
12021171         break;
12031172      case 0x03:  // CG Font?
1204         ROM = space->machine().region("subsyscg")->base();
1205      //  memory_set_bankptr(space->machine(),20,RAM+0xd800);
1206         memory_set_bankptr(space->machine(),"bank21",ROM);
1173         ROM = machine().region("subsyscg")->base();
1174      //  memory_set_bankptr(machine(),20,RAM+0xd800);
1175         memory_set_bankptr(machine(),"bank21",ROM);
12071176         logerror("VID: Sub ROM CG selected\n");
12081177         break;
12091178   }
12101179   // reset sub CPU, set busy flag, set reset flag
1211   cputag_set_input_line(space->machine(),"sub",INPUT_LINE_RESET,PULSE_LINE);
1212   state->m_video.sub_busy = 0x80;
1213   state->m_video.sub_halt = 0;
1214   state->m_video.sub_reset = 1;
1215   state->m_sb_prev = data;
1180   cputag_set_input_line(machine(),"sub",INPUT_LINE_RESET,PULSE_LINE);
1181   m_video.sub_busy = 0x80;
1182   m_video.sub_halt = 0;
1183   m_video.sub_reset = 1;
1184   m_sb_prev = data;
12161185}
12171186
12181187/*
r14963r14964
12431212 *  0xd428-29(W): Line X1 (High-Low, X9-X0)
12441213 *  0xd42a-2b(W): Line Y1 (High-Low, Y8-Y0)
12451214 */
1246READ8_HANDLER( fm77av_alu_r )
1215READ8_MEMBER(fm7_state::fm77av_alu_r)
12471216{
1248   fm7_state *state = space->machine().driver_data<fm7_state>();
12491217   switch(offset)
12501218   {
12511219      case 0x00:
1252         logerror("ALU: read from command register (%02x)\n",state->m_alu.command);
1253         return state->m_alu.command;
1220         logerror("ALU: read from command register (%02x)\n",m_alu.command);
1221         return m_alu.command;
12541222      case 0x01:
12551223         logerror("ALU: read from logical colour\n");
1256         return state->m_alu.lcolour;
1224         return m_alu.lcolour;
12571225      case 0x02:
12581226         logerror("ALU: read from mask register\n");
1259         return state->m_alu.mask;
1227         return m_alu.mask;
12601228      case 0x03:
1261         logerror("ALU: read from compare data register (%02x)\n",state->m_alu.compare_data);
1262         return state->m_alu.compare_data;
1229         logerror("ALU: read from compare data register (%02x)\n",m_alu.compare_data);
1230         return m_alu.compare_data;
12631231      case 0x0b:
12641232         logerror("ALU: read from bank disable register\n");
1265         return 0xf7 | state->m_alu.bank_disable;
1233         return 0xf7 | m_alu.bank_disable;
12661234      default:
12671235         logerror("ALU: read from invalid register 0x%02x\n",offset);
12681236         return 0xff;
r14963r14964
12701238   return 0xff;
12711239}
12721240
1273WRITE8_HANDLER( fm77av_alu_w )
1241WRITE8_MEMBER(fm7_state::fm77av_alu_w)
12741242{
1275   fm7_state *state = space->machine().driver_data<fm7_state>();
12761243   UINT16 dat;
12771244
12781245   switch(offset)
12791246   {
12801247      case 0x00:
1281         state->m_alu.command = data;
1248         m_alu.command = data;
12821249         logerror("ALU: write to command register - %02x\n",data);
12831250         break;
12841251      case 0x01:
1285         state->m_alu.lcolour = data & 0x07;
1252         m_alu.lcolour = data & 0x07;
12861253         logerror("ALU: write to logical colour - %02x\n",data);
12871254         break;
12881255      case 0x02:
1289         state->m_alu.mask = data;
1256         m_alu.mask = data;
12901257         logerror("ALU: write to mask register - %02x\n",data);
12911258         break;
12921259      case 0x03:
r14963r14964
12971264      case 0x08:
12981265      case 0x09:
12991266      case 0x0a:
1300         state->m_alu.compare[offset-3] = data;
1267         m_alu.compare[offset-3] = data;
13011268         logerror("ALU: write to compare register %i - %02x\n",offset-3,data);
13021269         break;
13031270      case 0x0b:
1304         state->m_alu.bank_disable = data & 0x03;
1271         m_alu.bank_disable = data & 0x03;
13051272//          logerror("ALU: write to bank disable register - %02x\n",data);
13061273         break;
13071274      case 0x0c:
1308         state->m_alu.tilepaint_b = data;
1275         m_alu.tilepaint_b = data;
13091276//          logerror("ALU: write to tilepaint (blue) register - %02x\n",data);
13101277         break;
13111278      case 0x0d:
1312         state->m_alu.tilepaint_r = data;
1279         m_alu.tilepaint_r = data;
13131280//          logerror("ALU: write to tilepaint (red) register - %02x\n",data);
13141281         break;
13151282      case 0x0e:
1316         state->m_alu.tilepaint_g = data;
1283         m_alu.tilepaint_g = data;
13171284//          logerror("ALU: write to tilepaint (green) register - %02x\n",data);
13181285         break;
13191286      case 0x10:
1320         dat = ((data & 0x1f) << 8) | (state->m_alu.addr_offset & 0x00ff);
1321         state->m_alu.addr_offset = dat;
1322//          logerror("ALU: write to address offset (high) register - %02x (%04x)\n",data,state->m_alu.addr_offset);
1287         dat = ((data & 0x1f) << 8) | (m_alu.addr_offset & 0x00ff);
1288         m_alu.addr_offset = dat;
1289//          logerror("ALU: write to address offset (high) register - %02x (%04x)\n",data,m_alu.addr_offset);
13231290         break;
13241291      case 0x11:
1325         dat = (state->m_alu.addr_offset & 0xff00) | data;
1326         state->m_alu.addr_offset = dat;
1327//          logerror("ALU: write to address offset (low) register - %02x (%04x)\n",data,state->m_alu.addr_offset);
1292         dat = (m_alu.addr_offset & 0xff00) | data;
1293         m_alu.addr_offset = dat;
1294//          logerror("ALU: write to address offset (low) register - %02x (%04x)\n",data,m_alu.addr_offset);
13281295         break;
13291296      case 0x12:
1330         dat = (data << 8) | (state->m_alu.line_style & 0x00ff);
1331         state->m_alu.line_style = dat;
1332//          logerror("ALU: write to line style (high) register - %02x (%04x)\n",data,state->m_alu.line_style);
1297         dat = (data << 8) | (m_alu.line_style & 0x00ff);
1298         m_alu.line_style = dat;
1299//          logerror("ALU: write to line style (high) register - %02x (%04x)\n",data,m_alu.line_style);
13331300         break;
13341301      case 0x13:
1335         dat = (state->m_alu.line_style & 0xff00) | data;
1336         state->m_alu.line_style = dat;
1337//          logerror("ALU: write to line style (low) register - %02x (%04x)\n",data,state->m_alu.line_style);
1302         dat = (m_alu.line_style & 0xff00) | data;
1303         m_alu.line_style = dat;
1304//          logerror("ALU: write to line style (low) register - %02x (%04x)\n",data,m_alu.line_style);
13381305         break;
13391306      case 0x14:
1340         dat = ((data & 0x03) << 8) | (state->m_alu.x0 & 0x00ff);
1341         state->m_alu.x0 = dat;
1342//          logerror("ALU: write to X0 (high) register - %02x (%04x)\n",data,state->m_alu.x0);
1307         dat = ((data & 0x03) << 8) | (m_alu.x0 & 0x00ff);
1308         m_alu.x0 = dat;
1309//          logerror("ALU: write to X0 (high) register - %02x (%04x)\n",data,m_alu.x0);
13431310         break;
13441311      case 0x15:
1345         dat = (state->m_alu.x0 & 0xff00) | data;
1346         state->m_alu.x0 = dat;
1347//          logerror("ALU: write to X0 (low) register - %02x (%04x)\n",data,state->m_alu.x0);
1312         dat = (m_alu.x0 & 0xff00) | data;
1313         m_alu.x0 = dat;
1314//          logerror("ALU: write to X0 (low) register - %02x (%04x)\n",data,m_alu.x0);
13481315         break;
13491316      case 0x16:
1350         dat = ((data & 0x01) << 8) | (state->m_alu.y0 & 0x00ff);
1351         state->m_alu.y0 = dat;
1352//          logerror("ALU: write to Y0 (high) register - %02x (%04x)\n",data,state->m_alu.y0);
1317         dat = ((data & 0x01) << 8) | (m_alu.y0 & 0x00ff);
1318         m_alu.y0 = dat;
1319//          logerror("ALU: write to Y0 (high) register - %02x (%04x)\n",data,m_alu.y0);
13531320         break;
13541321      case 0x17:
1355         dat = (state->m_alu.y0 & 0xff00) | data;
1356         state->m_alu.y0 = dat;
1357//          logerror("ALU: write to Y0 (low) register - %02x (%04x)\n",data,state->m_alu.y0);
1322         dat = (m_alu.y0 & 0xff00) | data;
1323         m_alu.y0 = dat;
1324//          logerror("ALU: write to Y0 (low) register - %02x (%04x)\n",data,m_alu.y0);
13581325         break;
13591326      case 0x18:
1360         dat = ((data & 0x03) << 8) | (state->m_alu.x1 & 0x00ff);
1361         state->m_alu.x1 = dat;
1362//          logerror("ALU: write to X1 (high) register - %02x (%04x)\n",data,state->m_alu.x1);
1327         dat = ((data & 0x03) << 8) | (m_alu.x1 & 0x00ff);
1328         m_alu.x1 = dat;
1329//          logerror("ALU: write to X1 (high) register - %02x (%04x)\n",data,m_alu.x1);
13631330         break;
13641331      case 0x19:
1365         dat = (state->m_alu.x1 & 0xff00) | data;
1366         state->m_alu.x1 = dat;
1367//          logerror("ALU: write to X1 (low) register - %02x (%04x)\n",data,state->m_alu.x1);
1332         dat = (m_alu.x1 & 0xff00) | data;
1333         m_alu.x1 = dat;
1334//          logerror("ALU: write to X1 (low) register - %02x (%04x)\n",data,m_alu.x1);
13681335         break;
13691336      case 0x1a:
1370         dat = ((data & 0x01) << 8) | (state->m_alu.y1 & 0x00ff);
1371         state->m_alu.y1 = dat;
1372//          logerror("ALU: write to Y1 (high) register - %02x (%04x)\n",data,state->m_alu.y1);
1337         dat = ((data & 0x01) << 8) | (m_alu.y1 & 0x00ff);
1338         m_alu.y1 = dat;
1339//          logerror("ALU: write to Y1 (high) register - %02x (%04x)\n",data,m_alu.y1);
13731340         break;
13741341      case 0x1b:
1375         dat = (state->m_alu.y1 & 0xff00) | data;
1376         state->m_alu.y1 = dat;
1342         dat = (m_alu.y1 & 0xff00) | data;
1343         m_alu.y1 = dat;
13771344         // draw line
1378         fm77av_line_draw(space->machine());
1379//          logerror("ALU: write to Y1 (low) register - %02x (%04x)\n",data,state->m_alu.y1);
1345         fm77av_line_draw(machine());
1346//          logerror("ALU: write to Y1 (low) register - %02x (%04x)\n",data,m_alu.y1);
13801347         break;
13811348      default:
13821349         logerror("ALU: write 0x%02x to invalid register 0x%02x\n",data,offset);
r14963r14964
13991366}
14001367
14011368// called when banked into main CPU space by the MMR, available only if sub CPU is halted
1402READ8_HANDLER( fm7_sub_ram_ports_banked_r )
1369READ8_MEMBER(fm7_state::fm7_sub_ram_ports_banked_r)
14031370{
1404   fm7_state *state = space->machine().driver_data<fm7_state>();
1405   UINT8* RAM = space->machine().region("maincpu")->base();
1371   UINT8* RAM = machine().region("maincpu")->base();
14061372   UINT8* ROM;
14071373
1408   if(!state->m_video.sub_halt)
1374   if(!m_video.sub_halt)
14091375      return 0xff;
14101376
14111377   if(offset < 0x380)  // work RAM
14121378      return RAM[0x1d000+offset];
14131379   if(offset >= 0x380 && offset < 0x400) // shared RAM
1414      return state->m_shared_ram[offset-0x380];
1380      return m_shared_ram[offset-0x380];
14151381   if(offset >= 0x500 && offset < 0x800) // work RAM
14161382      return RAM[0x1d000+offset];
14171383   if(offset > 0x800) // CGROM
14181384   {
1419      ROM = space->machine().region("subsyscg")->base();
1420      return ROM[(state->m_video.cgrom*0x800)+(offset-0x800)];
1385      ROM = machine().region("subsyscg")->base();
1386      return ROM[(m_video.cgrom*0x800)+(offset-0x800)];
14211387   }
14221388
14231389   if(offset >= 0x410 && offset <= 0x42b)
r14963r14964
14521418   return 0xff;
14531419}
14541420
1455WRITE8_HANDLER( fm7_sub_ram_ports_banked_w )
1421WRITE8_MEMBER(fm7_state::fm7_sub_ram_ports_banked_w)
14561422{
1457   fm7_state *state = space->machine().driver_data<fm7_state>();
1458   UINT8* RAM = space->machine().region("maincpu")->base();
1423   UINT8* RAM = machine().region("maincpu")->base();
14591424
1460   if(!state->m_video.sub_halt)
1425   if(!m_video.sub_halt)
14611426      return;
14621427
14631428   if(offset < 0x380)  // work RAM
r14963r14964
14671432   }
14681433   if(offset >= 0x380 && offset < 0x400) // shared RAM
14691434   {
1470      state->m_shared_ram[offset-0x380] = data;
1435      m_shared_ram[offset-0x380] = data;
14711436      return;
14721437   }
14731438   if(offset >= 0x500 && offset < 0x800) // work RAM
r14963r14964
15091474   }
15101475}
15111476
1512READ8_HANDLER( fm7_console_ram_banked_r )
1477READ8_MEMBER(fm7_state::fm7_console_ram_banked_r)
15131478{
1514   fm7_state *state = space->machine().driver_data<fm7_state>();
1515   UINT8* RAM = space->machine().region("maincpu")->base();
1479   UINT8* RAM = machine().region("maincpu")->base();
15161480
1517   if(!state->m_video.sub_halt)
1481   if(!m_video.sub_halt)
15181482      return 0xff;
15191483
15201484   return RAM[0x1c000+offset];
15211485}
15221486
1523WRITE8_HANDLER( fm7_console_ram_banked_w )
1487WRITE8_MEMBER(fm7_state::fm7_console_ram_banked_w)
15241488{
1525   fm7_state *state = space->machine().driver_data<fm7_state>();
1526   UINT8* RAM = space->machine().region("maincpu")->base();
1489   UINT8* RAM = machine().region("maincpu")->base();
15271490
1528   if(!state->m_video.sub_halt)
1491   if(!m_video.sub_halt)
15291492      return;
15301493
15311494   RAM[0x1c000+offset] = data;
src/mess/video/vtech2.c
r14963r14964
292292   return 0;
293293}
294294
295WRITE8_HANDLER( laser_bg_mode_w )
295WRITE8_MEMBER(vtech2_state::laser_bg_mode_w)
296296{
297   vtech2_state *state = space->machine().driver_data<vtech2_state>();
298    if (state->m_laser_bg_mode != data)
297    if (m_laser_bg_mode != data)
299298    {
300        state->m_laser_bg_mode = data;
299        m_laser_bg_mode = data;
301300      logerror("laser border:$%X mode:$%X\n", data >> 4, data & 15);
302301    }
303302}
304303
305WRITE8_HANDLER( laser_two_color_w )
304WRITE8_MEMBER(vtech2_state::laser_two_color_w)
306305{
307   vtech2_state *state = space->machine().driver_data<vtech2_state>();
308   if (state->m_laser_two_color != data)
306   if (m_laser_two_color != data)
309307   {
310      state->m_laser_two_color = data;
308      m_laser_two_color = data;
311309      logerror("laser foreground:$%X background:$%X\n", data >> 4, data & 15);
312310    }
313311}
src/mess/formats/m65_snqk.c
r14963r14964
289289        {
290290            RAM[0xbff0+i] = snapshot_buff[base++];
291291            if (i < 4)
292                microtan_bffx_w(space, i, RAM[0xbff0+i]);
292                state->microtan_bffx_w(*space, i, RAM[0xbff0+i]);
293293        }
294294
295        microtan_sound_w(space, 0, snapshot_buff[base++]);
295        state->microtan_sound_w(*space, 0, snapshot_buff[base++]);
296296        state->m_chunky_graphics = snapshot_buff[base++];
297297
298298        /* first set of AY8910 registers */
src/mess/drivers/comquest.c
r14963r14964
4545#include "imagedev/cartslot.h"
4646
4747#ifdef UNUSED_FUNCTION
48static  READ8_HANDLER(comquest_read)
48READ8_MEMBER(comquest_state::comquest_read)
4949{
5050   UINT8 data=0;
5151   logerror("comquest read %.4x %.2x\n",offset,data);
5252   return data;
5353}
5454
55static WRITE8_HANDLER(comquest_write)
55WRITE8_MEMBER(comquest_state::comquest_write)
5656{
5757   logerror("comquest read %.4x %.2x\n",offset,data);
5858}
src/mess/drivers/apple3.c
r14963r14964
2323#include "devices/appldriv.h"
2424
2525static ADDRESS_MAP_START( apple3_map, AS_PROGRAM, 8, apple3_state )
26   AM_RANGE(0x0000, 0x00FF) AM_READWRITE_LEGACY(apple3_00xx_r, apple3_00xx_w)
26   AM_RANGE(0x0000, 0x00FF) AM_READWRITE(apple3_00xx_r, apple3_00xx_w)
2727   AM_RANGE(0x0100, 0x01FF) AM_RAMBANK("bank2")
2828   AM_RANGE(0x0200, 0x1FFF) AM_RAMBANK("bank3")
2929   AM_RANGE(0x2000, 0x9FFF) AM_RAMBANK("bank4")
r14963r14964
3636 * different memory locations */
3737static const m6502_interface apple3_m6502_interface =
3838{
39   apple3_indexed_read,   /* read_indexed_func */
40   apple3_indexed_write,   /* write_indexed_func */
41   DEVCB_NULL,            /* port_read_func */
42   DEVCB_NULL            /* port_write_func */
39   NULL,   /* read_indexed_func */
40   NULL,   /* write_indexed_func */
41   DEVCB_DRIVER_MEMBER(apple3_state, apple3_indexed_read),            /* port_read_func */
42   DEVCB_DRIVER_MEMBER(apple3_state, apple3_indexed_write)            /* port_write_func */
4343};
4444
4545static const floppy_interface apple3_floppy_interface =
src/mess/drivers/dai.c
r14963r14964
7777   AM_RANGE( 0x0000, 0xbfff) AM_RAMBANK("bank1")
7878   AM_RANGE( 0xc000, 0xdfff) AM_ROM
7979   AM_RANGE( 0xe000, 0xefff) AM_ROMBANK("bank2")
80   AM_RANGE( 0xf000, 0xf7ff) AM_WRITE_LEGACY(dai_stack_interrupt_circuit_w )
80   AM_RANGE( 0xf000, 0xf7ff) AM_WRITE(dai_stack_interrupt_circuit_w )
8181   AM_RANGE( 0xf800, 0xf8ff) AM_RAM
82   AM_RANGE( 0xfb00, 0xfbff) AM_READWRITE_LEGACY(dai_amd9511_r, dai_amd9511_w )
82   AM_RANGE( 0xfb00, 0xfbff) AM_READWRITE(dai_amd9511_r, dai_amd9511_w )
8383   AM_RANGE( 0xfc00, 0xfcff) AM_DEVREADWRITE_LEGACY("pit8253", pit8253_r, pit8253_w )
84   AM_RANGE( 0xfd00, 0xfdff) AM_READWRITE_LEGACY(dai_io_discrete_devices_r, dai_io_discrete_devices_w )
84   AM_RANGE( 0xfd00, 0xfdff) AM_READWRITE(dai_io_discrete_devices_r, dai_io_discrete_devices_w )
8585   AM_RANGE( 0xfe00, 0xfeff) AM_DEVREADWRITE("ppi8255", i8255_device, read, write)
8686   AM_RANGE( 0xff00, 0xffff) AM_DEVREADWRITE_LEGACY("tms5501", tms5501_r, tms5501_w )
8787ADDRESS_MAP_END
src/mess/drivers/cbmb.c
r14963r14964
161161   AM_RANGE(0xf6000, 0xf7fff) AM_ROM
162162   AM_RANGE(0xf8000, 0xfbfff) AM_ROM AM_SHARE("basic")
163163   AM_RANGE(0xfd000, 0xfd3ff) AM_RAM AM_SHARE("videoram")      /* videoram */
164   AM_RANGE(0xfd400, 0xfd7ff) AM_RAM_WRITE_LEGACY(cbmb_colorram_w) AM_SHARE("colorram")      /* colorram */
164   AM_RANGE(0xfd400, 0xfd7ff) AM_RAM_WRITE(cbmb_colorram_w) AM_SHARE("colorram")      /* colorram */
165165   AM_RANGE(0xfd800, 0xfd8ff) AM_DEVREADWRITE_LEGACY("vic6567", vic2_port_r, vic2_port_w)
166166   /* disk units */
167167   AM_RANGE(0xfda00, 0xfdaff) AM_DEVREADWRITE_LEGACY("sid6581", sid6581_r, sid6581_w)
src/mess/drivers/gb.c
r14963r14964
467467   AM_RANGE(0x0900, 0x3fff) AM_ROMBANK("bank11")
468468   AM_RANGE(0x4000, 0x5fff) AM_ROMBANK("bank1")               /* 8KB/16KB switched ROM bank */
469469   AM_RANGE(0x6000, 0x7fff) AM_ROMBANK("bank4")               /* 8KB/16KB switched ROM bank */
470   AM_RANGE(0x8000, 0x9fff) AM_READWRITE_LEGACY(gb_vram_r, gb_vram_w ) /* 8k VRAM */
470   AM_RANGE(0x8000, 0x9fff) AM_READWRITE(gb_vram_r, gb_vram_w ) /* 8k VRAM */
471471   AM_RANGE(0xa000, 0xbfff) AM_RAMBANK("bank2")               /* 8k switched RAM bank (cartridge) */
472472   AM_RANGE(0xc000, 0xfdff) AM_RAM                  /* 8k low RAM, echo RAM */
473   AM_RANGE(0xfe00, 0xfeff) AM_READWRITE_LEGACY(gb_oam_r, gb_oam_w )   /* OAM RAM */
474   AM_RANGE(0xff00, 0xff0f) AM_READWRITE_LEGACY(gb_io_r, gb_io_w )      /* I/O */
473   AM_RANGE(0xfe00, 0xfeff) AM_READWRITE(gb_oam_r, gb_oam_w )   /* OAM RAM */
474   AM_RANGE(0xff00, 0xff0f) AM_READWRITE(gb_io_r, gb_io_w )      /* I/O */
475475   AM_RANGE(0xff10, 0xff26) AM_DEVREADWRITE_LEGACY("custom", gb_sound_r, gb_sound_w )      /* sound registers */
476476   AM_RANGE(0xff27, 0xff2f) AM_NOP                  /* unused */
477477   AM_RANGE(0xff30, 0xff3f) AM_DEVREADWRITE_LEGACY("custom", gb_wave_r, gb_wave_w )      /* Wave ram */
478   AM_RANGE(0xff40, 0xff7f) AM_READWRITE_LEGACY(gb_video_r, gb_io2_w)      /* Video controller & BIOS flip-flop */
478   AM_RANGE(0xff40, 0xff7f) AM_READWRITE(gb_video_r, gb_io2_w)      /* Video controller & BIOS flip-flop */
479479   AM_RANGE(0xff80, 0xfffe) AM_RAM                  /* High RAM */
480   AM_RANGE(0xffff, 0xffff) AM_READWRITE_LEGACY(gb_ie_r, gb_ie_w )      /* Interrupt enable register */
480   AM_RANGE(0xffff, 0xffff) AM_READWRITE(gb_ie_r, gb_ie_w )      /* Interrupt enable register */
481481ADDRESS_MAP_END
482482
483483static ADDRESS_MAP_START(sgb_map, AS_PROGRAM, 8, gb_state )
r14963r14964
488488   AM_RANGE(0x0900, 0x3fff) AM_ROMBANK("bank11")
489489   AM_RANGE(0x4000, 0x5fff) AM_ROMBANK("bank1")               /* 8KB/16KB switched ROM bank */
490490   AM_RANGE(0x6000, 0x7fff) AM_ROMBANK("bank4")               /* 8KB/16KB switched ROM bank */
491   AM_RANGE(0x8000, 0x9fff) AM_READWRITE_LEGACY(gb_vram_r, gb_vram_w ) /* 8k VRAM */
491   AM_RANGE(0x8000, 0x9fff) AM_READWRITE(gb_vram_r, gb_vram_w ) /* 8k VRAM */
492492   AM_RANGE(0xa000, 0xbfff) AM_RAMBANK("bank2")               /* 8k switched RAM bank (cartridge) */
493493   AM_RANGE(0xc000, 0xfdff) AM_RAM                  /* 8k low RAM, echo RAM */
494   AM_RANGE(0xfe00, 0xfeff) AM_READWRITE_LEGACY(gb_oam_r, gb_oam_w )   /* OAM RAM */
495   AM_RANGE(0xff00, 0xff0f) AM_READWRITE_LEGACY(gb_io_r, sgb_io_w )      /* I/O */
494   AM_RANGE(0xfe00, 0xfeff) AM_READWRITE(gb_oam_r, gb_oam_w )   /* OAM RAM */
495   AM_RANGE(0xff00, 0xff0f) AM_READWRITE(gb_io_r, sgb_io_w )      /* I/O */
496496   AM_RANGE(0xff10, 0xff26) AM_DEVREADWRITE_LEGACY("custom", gb_sound_r, gb_sound_w )      /* sound registers */
497497   AM_RANGE(0xff27, 0xff2f) AM_NOP                  /* unused */
498498   AM_RANGE(0xff30, 0xff3f) AM_DEVREADWRITE_LEGACY("custom", gb_wave_r, gb_wave_w )      /* Wave RAM */
499   AM_RANGE(0xff40, 0xff7f) AM_READWRITE_LEGACY(gb_video_r, gb_io2_w )      /* Video controller & BIOS flip-flop */
499   AM_RANGE(0xff40, 0xff7f) AM_READWRITE(gb_video_r, gb_io2_w )      /* Video controller & BIOS flip-flop */
500500   AM_RANGE(0xff80, 0xfffe) AM_RAM                  /* High RAM */
501   AM_RANGE(0xffff, 0xffff) AM_READWRITE_LEGACY(gb_ie_r, gb_ie_w )      /* Interrupt enable register */
501   AM_RANGE(0xffff, 0xffff) AM_READWRITE(gb_ie_r, gb_ie_w )      /* Interrupt enable register */
502502ADDRESS_MAP_END
503503
504504static ADDRESS_MAP_START(gbc_map, AS_PROGRAM, 8, gb_state )
r14963r14964
509509   AM_RANGE(0x0900, 0x3fff) AM_ROMBANK("bank11")
510510   AM_RANGE(0x4000, 0x5fff) AM_ROMBANK("bank1")               /* 8KB/16KB switched ROM bank */
511511   AM_RANGE(0x6000, 0x7fff) AM_ROMBANK("bank4")               /* 8KB/16KB switched ROM bank */
512   AM_RANGE(0x8000, 0x9fff) AM_READWRITE_LEGACY(gb_vram_r, gb_vram_w )      /* 8k switched VRAM bank */
512   AM_RANGE(0x8000, 0x9fff) AM_READWRITE(gb_vram_r, gb_vram_w )      /* 8k switched VRAM bank */
513513   AM_RANGE(0xa000, 0xbfff) AM_RAMBANK("bank2")               /* 8k switched RAM bank (on cartridge) */
514514   AM_RANGE(0xc000, 0xcfff) AM_RAM                  /* 4k fixed RAM bank */
515515   AM_RANGE(0xd000, 0xdfff) AM_RAMBANK("bank3")               /* 4k switched RAM bank */
516516   AM_RANGE(0xe000, 0xfdff) AM_RAM                  /* echo RAM */
517   AM_RANGE(0xfe00, 0xfeff) AM_READWRITE_LEGACY(gb_oam_r, gb_oam_w )   /* OAM RAM */
518   AM_RANGE(0xff00, 0xff0f) AM_READWRITE_LEGACY(gb_io_r, gb_io_w )      /* I/O */
517   AM_RANGE(0xfe00, 0xfeff) AM_READWRITE(gb_oam_r, gb_oam_w )   /* OAM RAM */
518   AM_RANGE(0xff00, 0xff0f) AM_READWRITE(gb_io_r, gb_io_w )      /* I/O */
519519   AM_RANGE(0xff10, 0xff26) AM_DEVREADWRITE_LEGACY("custom", gb_sound_r, gb_sound_w )      /* sound controller */
520520   AM_RANGE(0xff27, 0xff2f) AM_NOP                  /* unused */
521521   AM_RANGE(0xff30, 0xff3f) AM_DEVREADWRITE_LEGACY("custom", gb_wave_r, gb_wave_w )      /* Wave RAM */
522   AM_RANGE(0xff40, 0xff7f) AM_READWRITE_LEGACY(gbc_io2_r, gbc_io2_w )      /* Other I/O and video controller */
522   AM_RANGE(0xff40, 0xff7f) AM_READWRITE(gbc_io2_r, gbc_io2_w )      /* Other I/O and video controller */
523523   AM_RANGE(0xff80, 0xfffe) AM_RAM                  /* high RAM */
524   AM_RANGE(0xffff, 0xffff) AM_READWRITE_LEGACY(gb_ie_r, gb_ie_w )      /* Interrupt enable register */
524   AM_RANGE(0xffff, 0xffff) AM_READWRITE(gb_ie_r, gb_ie_w )      /* Interrupt enable register */
525525ADDRESS_MAP_END
526526
527527static ADDRESS_MAP_START(megaduck_map, AS_PROGRAM, 8, gb_state )
528528   ADDRESS_MAP_UNMAP_HIGH
529529   AM_RANGE(0x0000, 0x3fff) AM_ROMBANK("bank10")                  /* 16k switched ROM bank */
530530   AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1")                  /* 16k switched ROM bank */
531   AM_RANGE(0x8000, 0x9fff) AM_READWRITE_LEGACY(gb_vram_r, gb_vram_w )      /* 8k VRAM */
531   AM_RANGE(0x8000, 0x9fff) AM_READWRITE(gb_vram_r, gb_vram_w )      /* 8k VRAM */
532532   AM_RANGE(0xa000, 0xbfff) AM_NOP                     /* unused? */
533533   AM_RANGE(0xc000, 0xfe9f) AM_RAM                     /* 8k low RAM, echo RAM */
534   AM_RANGE(0xfe00, 0xfeff) AM_READWRITE_LEGACY(gb_oam_r, gb_oam_w )      /* OAM RAM */
535   AM_RANGE(0xff00, 0xff0f) AM_READWRITE_LEGACY(gb_io_r, gb_io_w )         /* I/O */
536   AM_RANGE(0xff10, 0xff1f) AM_READWRITE_LEGACY(megaduck_video_r, megaduck_video_w )   /* video controller */
537   AM_RANGE(0xff20, 0xff2f) AM_READWRITE_LEGACY(megaduck_sound_r1, megaduck_sound_w1)   /* sound controller pt1 */
534   AM_RANGE(0xfe00, 0xfeff) AM_READWRITE(gb_oam_r, gb_oam_w )      /* OAM RAM */
535   AM_RANGE(0xff00, 0xff0f) AM_READWRITE(gb_io_r, gb_io_w )         /* I/O */
536   AM_RANGE(0xff10, 0xff1f) AM_READWRITE(megaduck_video_r, megaduck_video_w )   /* video controller */
537   AM_RANGE(0xff20, 0xff2f) AM_READWRITE(megaduck_sound_r1, megaduck_sound_w1)   /* sound controller pt1 */
538538   AM_RANGE(0xff30, 0xff3f) AM_DEVREADWRITE_LEGACY("custom", gb_wave_r, gb_wave_w )         /* wave ram */
539   AM_RANGE(0xff40, 0xff46) AM_READWRITE_LEGACY(megaduck_sound_r2, megaduck_sound_w2)   /* sound controller pt2 */
539   AM_RANGE(0xff40, 0xff46) AM_READWRITE(megaduck_sound_r2, megaduck_sound_w2)   /* sound controller pt2 */
540540   AM_RANGE(0xff47, 0xff7f) AM_NOP                     /* unused */
541541   AM_RANGE(0xff80, 0xfffe) AM_RAM                     /* high RAM */
542   AM_RANGE(0xffff, 0xffff) AM_READWRITE_LEGACY(gb_ie_r, gb_ie_w )         /* interrupt enable register */
542   AM_RANGE(0xffff, 0xffff) AM_READWRITE(gb_ie_r, gb_ie_w )         /* interrupt enable register */
543543ADDRESS_MAP_END
544544
545545static GFXDECODE_START( gb )
src/mess/drivers/glasgow.c
r14963r14964
8080   UINT8 m_led7;
8181   UINT8 m_irq_flag;
8282   UINT16 m_beeper;
83   DECLARE_READ16_MEMBER(read_test);
84   DECLARE_READ16_MEMBER(read_board_amsterd);
8385};
8486
8587
r14963r14964
190192
191193
192194#ifdef UNUSED_FUNCTION
193READ16_HANDLER(read_test)
195READ16_MEMBER(glasgow_state::read_test)
194196{
195197   logerror("read test Offset = %x Data = %x\n  ",offset,data);
196198   return 0xffff;    // Mephisto need it for working
r14963r14964
253255}
254256
255257#ifdef UNUSED_FUNCTION
256READ16_HANDLER(read_board_amsterd)
258READ16_MEMBER(glasgow_state::read_board_amsterd)
257259{
258260   logerror("read board amsterdam Offset = %x \n  ", offset);
259261   return 0xffff;
src/mess/drivers/radio86.c
r14963r14964
3131
3232static ADDRESS_MAP_START( radio86_io , AS_IO, 8, radio86_state )
3333   ADDRESS_MAP_UNMAP_HIGH
34   AM_RANGE( 0x00, 0xff ) AM_READWRITE_LEGACY(radio_io_r,radio_io_w)
34   AM_RANGE( 0x00, 0xff ) AM_READWRITE(radio_io_r,radio_io_w)
3535ADDRESS_MAP_END
3636
3737static ADDRESS_MAP_START( rk7007_io , AS_IO, 8, radio86_state )
r14963r14964
5757    AM_RANGE( 0xf700, 0xf703 ) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write)
5858    AM_RANGE( 0xf780, 0xf7bf ) AM_DEVREADWRITE_LEGACY("i8275", i8275_r, i8275_w) // video
5959    AM_RANGE( 0xf684, 0xf687 ) AM_DEVREADWRITE("ppi8255_2", i8255_device, read, write)
60   AM_RANGE( 0xf688, 0xf688 ) AM_WRITE_LEGACY(radio86_pagesel )
60   AM_RANGE( 0xf688, 0xf688 ) AM_WRITE(radio86_pagesel )
6161    AM_RANGE( 0xf800, 0xffff ) AM_DEVWRITE_LEGACY("dma8257", i8257_w)    // DMA
6262    AM_RANGE( 0xf800, 0xffff ) AM_ROM  // System ROM page 1
6363ADDRESS_MAP_END
r14963r14964
6666   ADDRESS_MAP_UNMAP_HIGH
6767    AM_RANGE( 0x0000, 0x0fff ) AM_RAMBANK("bank1") // First bank
6868    AM_RANGE( 0x1000, 0x3fff ) AM_RAM  // RAM
69    AM_RANGE( 0x4000, 0x7fff ) AM_READ_LEGACY(radio_cpu_state_r)
69    AM_RANGE( 0x4000, 0x7fff ) AM_READ(radio_cpu_state_r)
7070    AM_RANGE( 0x8000, 0x8003 ) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write) AM_MIRROR(0x1ffc)
7171    //AM_RANGE( 0xa000, 0xa003 ) AM_DEVREADWRITE_LEGACY("ppi8255_2", i8255a_r, i8255a_w) AM_MIRROR(0x1ffc)
7272    AM_RANGE( 0xc000, 0xc001 ) AM_DEVREADWRITE_LEGACY("i8275", i8275_r, i8275_w) AM_MIRROR(0x1ffe) // video
src/mess/drivers/b2m.c
r14963r14964
3535   AM_RANGE(0x00, 0x03) AM_DEVREADWRITE_LEGACY("pit8253", pit8253_r,pit8253_w)
3636   AM_RANGE(0x04, 0x07) AM_DEVREADWRITE("ppi8255_2", i8255_device, read, write)
3737   AM_RANGE(0x08, 0x0b) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write)
38    AM_RANGE(0x0c, 0x0c) AM_READWRITE_LEGACY(b2m_localmachine_r,b2m_localmachine_w)
39   AM_RANGE(0x10, 0x13) AM_READWRITE_LEGACY(b2m_palette_r,b2m_palette_w)
38    AM_RANGE(0x0c, 0x0c) AM_READWRITE(b2m_localmachine_r,b2m_localmachine_w)
39   AM_RANGE(0x10, 0x13) AM_READWRITE(b2m_palette_r,b2m_palette_w)
4040   AM_RANGE(0x14, 0x15) AM_DEVREADWRITE_LEGACY("pic8259", pic8259_r, pic8259_w )
4141   AM_RANGE(0x18, 0x18) AM_DEVREADWRITE("uart", i8251_device, data_r, data_w)
4242   AM_RANGE(0x19, 0x19)  AM_DEVREADWRITE("uart", i8251_device, status_r, control_w)
r14963r14964
5151   AM_RANGE(0x00, 0x03) AM_DEVREADWRITE_LEGACY("pit8253", pit8253_r,pit8253_w)
5252   AM_RANGE(0x04, 0x07) AM_DEVREADWRITE("ppi8255_3", i8255_device, read, write)
5353   AM_RANGE(0x08, 0x0b) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write)
54    AM_RANGE(0x0c, 0x0c) AM_READWRITE_LEGACY(b2m_localmachine_r,b2m_localmachine_w)
55   AM_RANGE(0x10, 0x13) AM_READWRITE_LEGACY(b2m_palette_r,b2m_palette_w)
54    AM_RANGE(0x0c, 0x0c) AM_READWRITE(b2m_localmachine_r,b2m_localmachine_w)
55   AM_RANGE(0x10, 0x13) AM_READWRITE(b2m_palette_r,b2m_palette_w)
5656   AM_RANGE(0x14, 0x15) AM_DEVREADWRITE_LEGACY("pic8259", pic8259_r, pic8259_w )
5757   AM_RANGE(0x18, 0x18) AM_DEVREADWRITE("uart", i8251_device, data_r, data_w)
5858   AM_RANGE(0x19, 0x19) AM_DEVREADWRITE("uart", i8251_device, status_r, control_w)
src/mess/drivers/scorpion.c
r14963r14964
306306   AM_RANGE(0x003f, 0x003f) AM_DEVREADWRITE_LEGACY(BETA_DISK_TAG, betadisk_track_r,betadisk_track_w) AM_MIRROR(0xff00)
307307   AM_RANGE(0x005f, 0x005f) AM_DEVREADWRITE_LEGACY(BETA_DISK_TAG, betadisk_sector_r,betadisk_sector_w) AM_MIRROR(0xff00)
308308   AM_RANGE(0x007f, 0x007f) AM_DEVREADWRITE_LEGACY(BETA_DISK_TAG, betadisk_data_r,betadisk_data_w) AM_MIRROR(0xff00)
309   AM_RANGE(0x00fe, 0x00fe) AM_READWRITE_LEGACY(spectrum_port_fe_r,spectrum_port_fe_w) AM_MIRROR(0xff00) AM_MASK(0xffff)
309   AM_RANGE(0x00fe, 0x00fe) AM_READWRITE(spectrum_port_fe_r,spectrum_port_fe_w) AM_MIRROR(0xff00) AM_MASK(0xffff)
310310   AM_RANGE(0x00ff, 0x00ff) AM_DEVREADWRITE_LEGACY(BETA_DISK_TAG, betadisk_state_r, betadisk_param_w) AM_MIRROR(0xff00)
311311   AM_RANGE(0x4000, 0x4000) AM_WRITE_LEGACY(scorpion_port_7ffd_w)  AM_MIRROR(0x3ffd)
312312   AM_RANGE(0x8000, 0x8000) AM_DEVWRITE_LEGACY("ay8912", ay8910_data_w) AM_MIRROR(0x3ffd)
src/mess/drivers/pmd85.c
r14963r14964
183183/* I/O ports */
184184
185185static ADDRESS_MAP_START( pmd85_io_map, AS_IO, 8, pmd85_state )
186   AM_RANGE( 0x00, 0xff) AM_READWRITE_LEGACY(pmd85_io_r, pmd85_io_w )
186   AM_RANGE( 0x00, 0xff) AM_READWRITE(pmd85_io_r, pmd85_io_w )
187187ADDRESS_MAP_END
188188
189189static ADDRESS_MAP_START( mato_io_map, AS_IO, 8, pmd85_state )
190   AM_RANGE( 0x00, 0xff) AM_READWRITE_LEGACY(mato_io_r, mato_io_w )
190   AM_RANGE( 0x00, 0xff) AM_READWRITE(mato_io_r, mato_io_w )
191191ADDRESS_MAP_END
192192
193193/* memory w/r functions */
src/mess/drivers/spectrum.c
r14963r14964
292292 bit 2-0: border colour
293293*/
294294
295WRITE8_HANDLER(spectrum_port_fe_w)
295WRITE8_MEMBER(spectrum_state::spectrum_port_fe_w)
296296{
297   spectrum_state *state = space->machine().driver_data<spectrum_state>();
298   device_t *speaker = space->machine().device(SPEAKER_TAG);
297   device_t *speaker = machine().device(SPEAKER_TAG);
299298   unsigned char Changed;
300299
301   Changed = state->m_port_fe_data^data;
300   Changed = m_port_fe_data^data;
302301
303302   /* border colour changed? */
304303   if ((Changed & 0x07)!=0)
305304   {
306305      /* yes - send event */
307      spectrum_EventList_AddItemOffset(space->machine(), 0x0fe, data & 0x07, space->machine().device<cpu_device>("maincpu")->attotime_to_cycles(space->machine().primary_screen->scan_period() * space->machine().primary_screen->vpos()));
306      spectrum_EventList_AddItemOffset(machine(), 0x0fe, data & 0x07, machine().device<cpu_device>("maincpu")->attotime_to_cycles(machine().primary_screen->scan_period() * machine().primary_screen->vpos()));
308307   }
309308
310309   if ((Changed & (1<<4))!=0)
r14963r14964
316315   if ((Changed & (1<<3))!=0)
317316   {
318317      /* write cassette data */
319      space->machine().device<cassette_image_device>(CASSETTE_TAG)->output((data & (1<<3)) ? -1.0 : +1.0);
318      machine().device<cassette_image_device>(CASSETTE_TAG)->output((data & (1<<3)) ? -1.0 : +1.0);
320319   }
321320
322   state->m_port_fe_data = data;
321   m_port_fe_data = data;
323322}
324323
325324DIRECT_UPDATE_HANDLER(spectrum_direct)
r14963r14964
336335
337336/* KT: more accurate keyboard reading */
338337/* DJR: Spectrum+ keys added */
339READ8_HANDLER(spectrum_port_fe_r)
338READ8_MEMBER(spectrum_state::spectrum_port_fe_r)
340339{
341340   int lines = offset >> 8;
342341   int data = 0xff;
343342
344   int cs_extra1 = input_port_read_safe(space->machine(), "PLUS0", 0xff) & 0x1f;
345   int cs_extra2 = input_port_read_safe(space->machine(), "PLUS1", 0xff) & 0x1f;
346   int cs_extra3 = input_port_read_safe(space->machine(), "PLUS2", 0xff) & 0x1f;
347   int ss_extra1 = input_port_read_safe(space->machine(), "PLUS3", 0xff) & 0x1f;
348   int ss_extra2 = input_port_read_safe(space->machine(), "PLUS4", 0xff) & 0x1f;
343   int cs_extra1 = input_port_read_safe(machine(), "PLUS0", 0xff) & 0x1f;
344   int cs_extra2 = input_port_read_safe(machine(), "PLUS1", 0xff) & 0x1f;
345   int cs_extra3 = input_port_read_safe(machine(), "PLUS2", 0xff) & 0x1f;
346   int ss_extra1 = input_port_read_safe(machine(), "PLUS3", 0xff) & 0x1f;
347   int ss_extra2 = input_port_read_safe(machine(), "PLUS4", 0xff) & 0x1f;
349348
350349   /* Caps - V */
351350   if ((lines & 1) == 0)
352351   {
353      data &= input_port_read(space->machine(), "LINE0");
352      data &= input_port_read(machine(), "LINE0");
354353      /* CAPS for extra keys */
355354      if (cs_extra1 != 0x1f || cs_extra2 != 0x1f || cs_extra3 != 0x1f)
356355         data &= ~0x01;
r14963r14964
358357
359358   /* A - G */
360359   if ((lines & 2) == 0)
361      data &= input_port_read(space->machine(), "LINE1");
360      data &= input_port_read(machine(), "LINE1");
362361
363362   /* Q - T */
364363   if ((lines & 4) == 0)
365      data &= input_port_read(space->machine(), "LINE2");
364      data &= input_port_read(machine(), "LINE2");
366365
367366   /* 1 - 5 */
368367   if ((lines & 8) == 0)
369      data &= input_port_read(space->machine(), "LINE3") & cs_extra1;
368      data &= input_port_read(machine(), "LINE3") & cs_extra1;
370369
371370   /* 6 - 0 */
372371   if ((lines & 16) == 0)
373      data &= input_port_read(space->machine(), "LINE4") & cs_extra2;
372      data &= input_port_read(machine(), "LINE4") & cs_extra2;
374373
375374   /* Y - P */
376375   if ((lines & 32) == 0)
377      data &= input_port_read(space->machine(), "LINE5") & ss_extra1;
376      data &= input_port_read(machine(), "LINE5") & ss_extra1;
378377
379378   /* H - Enter */
380379   if ((lines & 64) == 0)
381      data &= input_port_read(space->machine(), "LINE6");
380      data &= input_port_read(machine(), "LINE6");
382381
383382      /* B - Space */
384383   if ((lines & 128) == 0)
385384   {
386      data &= input_port_read(space->machine(), "LINE7") & cs_extra3 & ss_extra2;
385      data &= input_port_read(machine(), "LINE7") & cs_extra3 & ss_extra2;
387386      /* SYMBOL SHIFT for extra keys */
388387      if (ss_extra1 != 0x1f || ss_extra2 != 0x1f)
389388         data &= ~0x02;
r14963r14964
392391   data |= (0xe0); /* Set bits 5-7 - as reset above */
393392
394393   /* cassette input from wav */
395   if ((space->machine().device<cassette_image_device>(CASSETTE_TAG))->input() > 0.0038 )
394   if ((machine().device<cassette_image_device>(CASSETTE_TAG))->input() > 0.0038 )
396395   {
397396      data &= ~0x40;
398397   }
399398
400399   /* Issue 2 Spectrums default to having bits 5, 6 & 7 set.
401400    Issue 3 Spectrums default to having bits 5 & 7 set and bit 6 reset. */
402   if (input_port_read(space->machine(), "CONFIG") & 0x80)
401   if (input_port_read(machine(), "CONFIG") & 0x80)
403402      data ^= (0x40);
404403
405404   return data;
406405}
407406
408407/* kempston joystick interface */
409READ8_HANDLER(spectrum_port_1f_r)
408READ8_MEMBER(spectrum_state::spectrum_port_1f_r)
410409{
411   return input_port_read(space->machine(), "KEMPSTON") & 0x1f;
410   return input_port_read(machine(), "KEMPSTON") & 0x1f;
412411}
413412
414413/* fuller joystick interface */
415READ8_HANDLER(spectrum_port_7f_r)
414READ8_MEMBER(spectrum_state::spectrum_port_7f_r)
416415{
417   return input_port_read(space->machine(), "FULLER") | (0xff^0x8f);
416   return input_port_read(machine(), "FULLER") | (0xff^0x8f);
418417}
419418
420419/* mikrogen joystick interface */
421READ8_HANDLER(spectrum_port_df_r)
420READ8_MEMBER(spectrum_state::spectrum_port_df_r)
422421{
423   return input_port_read(space->machine(), "MIKROGEN") | (0xff^0x1f);
422   return input_port_read(machine(), "MIKROGEN") | (0xff^0x1f);
424423}
425424
426static READ8_HANDLER ( spectrum_port_ula_r )
425READ8_MEMBER(spectrum_state::spectrum_port_ula_r)
427426{
428   spectrum_state *state = space->machine().driver_data<spectrum_state>();
429   int vpos = space->machine().primary_screen->vpos();
427   int vpos = machine().primary_screen->vpos();
430428
431   return vpos<193 ? state->m_video_ram[(vpos&0xf8)<<2]:0xff;
429   return vpos<193 ? m_video_ram[(vpos&0xf8)<<2]:0xff;
432430}
433431
434432/* Memory Maps */
r14963r14964
443441/* ports are not decoded full.
444442The function decodes the ports appropriately */
445443static ADDRESS_MAP_START (spectrum_io, AS_IO, 8, spectrum_state )
446   AM_RANGE(0x00, 0x00) AM_READWRITE_LEGACY(spectrum_port_fe_r,spectrum_port_fe_w) AM_MIRROR(0xfffe) AM_MASK(0xffff)
447   AM_RANGE(0x1f, 0x1f) AM_READ_LEGACY(spectrum_port_1f_r) AM_MIRROR(0xff00)
448   AM_RANGE(0x7f, 0x7f) AM_READ_LEGACY(spectrum_port_7f_r) AM_MIRROR(0xff00)
449   AM_RANGE(0xdf, 0xdf) AM_READ_LEGACY(spectrum_port_df_r) AM_MIRROR(0xff00)
450   AM_RANGE(0x01, 0x01) AM_READ_LEGACY(spectrum_port_ula_r) AM_MIRROR(0xfffe)
444   AM_RANGE(0x00, 0x00) AM_READWRITE(spectrum_port_fe_r,spectrum_port_fe_w) AM_MIRROR(0xfffe) AM_MASK(0xffff)
445   AM_RANGE(0x1f, 0x1f) AM_READ(spectrum_port_1f_r) AM_MIRROR(0xff00)
446   AM_RANGE(0x7f, 0x7f) AM_READ(spectrum_port_7f_r) AM_MIRROR(0xff00)
447   AM_RANGE(0xdf, 0xdf) AM_READ(spectrum_port_df_r) AM_MIRROR(0xff00)
448   AM_RANGE(0x01, 0x01) AM_READ(spectrum_port_ula_r) AM_MIRROR(0xfffe)
451449ADDRESS_MAP_END
452450
453451/* Input ports */
src/mess/drivers/ip22.c
r14963r14964
108108   PBUS_DMA_t m_PBUS_DMA;
109109   UINT32 m_nIntCounter;
110110   UINT8 m_dma_buffer[4096];
111   DECLARE_READ32_MEMBER(hpc3_pbus6_r);
112   DECLARE_WRITE32_MEMBER(hpc3_pbus6_w);
113   DECLARE_READ32_MEMBER(hpc3_hd_enet_r);
114   DECLARE_WRITE32_MEMBER(hpc3_hd_enet_w);
115   DECLARE_READ32_MEMBER(hpc3_hd0_r);
116   DECLARE_WRITE32_MEMBER(hpc3_hd0_w);
117   DECLARE_READ32_MEMBER(hpc3_pbus4_r);
118   DECLARE_WRITE32_MEMBER(hpc3_pbus4_w);
119   DECLARE_READ32_MEMBER(rtc_r);
120   DECLARE_WRITE32_MEMBER(rtc_w);
121   DECLARE_WRITE32_MEMBER(ip22_write_ram);
122   DECLARE_READ32_MEMBER(hal2_r);
123   DECLARE_WRITE32_MEMBER(hal2_w);
124   DECLARE_READ32_MEMBER(hpc3_pbusdma_r);
125   DECLARE_WRITE32_MEMBER(hpc3_pbusdma_w);
126   DECLARE_READ32_MEMBER(hpc3_unkpbus0_r);
127   DECLARE_WRITE32_MEMBER(hpc3_unkpbus0_w);
111128};
112129
113130
r14963r14964
216233}
217234#endif
218235
219static READ32_HANDLER( hpc3_pbus6_r )
236READ32_MEMBER(ip22_state::hpc3_pbus6_r)
220237{
221   ip22_state *state = space->machine().driver_data<ip22_state>();
222   device_t *lpt = space->machine().device("lpt_0");
238   device_t *lpt = machine().device("lpt_0");
223239   UINT8 ret8;
224   running_machine &machine = space->machine();
225
226240   switch( offset )
227241   {
228242   case 0x004/4:
r14963r14964
235249      return ret8;
236250   case 0x030/4:
237251      //verboselog(( machine, 2, "Serial 1 Command Transfer Read, 0x1fbd9830: %02x\n", 0x04 );
238      switch(cpu_get_pc(&space->device()))
252      switch(cpu_get_pc(&space.device()))
239253      {
240254         case 0x9fc1d9e4:   // interpreter (ip244415)
241255         case 0x9fc1d9e0:   // DRC (ip244415)
r14963r14964
250264      //verboselog(( machine, 2, "Serial 2 Command Transfer Read, 0x1fbd9838: %02x\n", 0x04 );
251265      return 0x00000004;
252266   case 0x40/4:
253      return kbdc8042_8_r(space, 0);
267      return kbdc8042_8_r(&space, 0);
254268   case 0x44/4:
255      return kbdc8042_8_r(space, 4);
269      return kbdc8042_8_r(&space, 4);
256270   case 0x58/4:
257271      return 0x20;   // chip rev 1, board rev 0, "Guinness" (Indy) => 0x01 for "Full House" (Indigo2)
258272   case 0x80/4:
r14963r14964
268282   case 0xa8/4:
269283   case 0xac/4:
270284//      mame_printf_info("INT3: r @ %x mask %08x (PC=%x)\n", offset*4, mem_mask, activecpu_get_pc());
271      return state->m_int3_regs[offset-0x80/4];
285      return m_int3_regs[offset-0x80/4];
272286   case 0xb0/4:
273      ret8 = pit8253_r(machine.device("pit8254"), 0);
287      ret8 = pit8253_r(machine().device("pit8254"), 0);
274288      //verboselog(( machine, 0, "HPC PBUS6 IOC4 Timer Counter 0 Register Read: 0x%02x (%08x)\n", ret8, mem_mask );
275289      return ret8;
276290   case 0xb4/4:
277      ret8 = pit8253_r(machine.device("pit8254"), 1);
291      ret8 = pit8253_r(machine().device("pit8254"), 1);
278292      //verboselog(( machine, 0, "HPC PBUS6 IOC4 Timer Counter 1 Register Read: 0x%02x (%08x)\n", ret8, mem_mask );
279293      return ret8;
280294   case 0xb8/4:
281      ret8 = pit8253_r(machine.device("pit8254"), 2);
295      ret8 = pit8253_r(machine().device("pit8254"), 2);
282296      //verboselog(( machine, 0, "HPC PBUS6 IOC4 Timer Counter 2 Register Read: 0x%02x (%08x)\n", ret8, mem_mask );
283297      return ret8;
284298   case 0xbc/4:
285      ret8 = pit8253_r(machine.device("pit8254"), 3);
299      ret8 = pit8253_r(machine().device("pit8254"), 3);
286300      //verboselog(( machine, 0, "HPC PBUS6 IOC4 Timer Control Word Register Read: 0x%02x (%08x)\n", ret8, mem_mask );
287301      return ret8;
288302   default:
r14963r14964
292306   return 0;
293307}
294308
295static WRITE32_HANDLER( hpc3_pbus6_w )
309WRITE32_MEMBER(ip22_state::hpc3_pbus6_w)
296310{
297   ip22_state *state = space->machine().driver_data<ip22_state>();
298   device_t *lpt = space->machine().device("lpt_0");
311   device_t *lpt = machine().device("lpt_0");
299312   char cChar;
300   running_machine &machine = space->machine();
301313
302314   switch( offset )
303315   {
304316   case 0x004/4:
305317      //verboselog(( machine, 0, "Parallel Control Write: %08x\n", data );
306318      pc_lpt_control_w(lpt, 0, data ^ 0x0d);
307      //state->m_nIOC_ParCntl = data;
319      //m_nIOC_ParCntl = data;
308320      break;
309321   case 0x030/4:
310322      if( ( data & 0x000000ff ) >= 0x20 )
r14963r14964
337349      }
338350      break;
339351   case 0x40/4:
340      kbdc8042_8_w(space, 0, data);
352      kbdc8042_8_w(&space, 0, data);
341353      break;
342354   case 0x44/4:
343      kbdc8042_8_w(space, 4, data);
355      kbdc8042_8_w(&space, 4, data);
344356      break;
345357   case 0x80/4:
346358   case 0x84/4:
r14963r14964
353365   case 0xa0/4:
354366   case 0xa4/4:
355367//      mame_printf_info("INT3: w %x to %x (reg %d) mask %08x (PC=%x)\n", data, offset*4, offset-0x80/4, mem_mask, activecpu_get_pc());
356      state->m_int3_regs[offset-0x80/4] = data;
368      m_int3_regs[offset-0x80/4] = data;
357369
358370      // if no local0 interrupts now, clear the input to the CPU
359      if ((state->m_int3_regs[0] & state->m_int3_regs[1]) == 0)
371      if ((m_int3_regs[0] & m_int3_regs[1]) == 0)
360372      {
361         cputag_set_input_line(machine, "maincpu", MIPS3_IRQ0, CLEAR_LINE);
373         cputag_set_input_line(machine(), "maincpu", MIPS3_IRQ0, CLEAR_LINE);
362374      }
363375      else
364376      {
365         cputag_set_input_line(machine, "maincpu", MIPS3_IRQ0, ASSERT_LINE);
377         cputag_set_input_line(machine(), "maincpu", MIPS3_IRQ0, ASSERT_LINE);
366378      }
367379
368380      // if no local1 interrupts now, clear the input to the CPU
369      if ((state->m_int3_regs[2] & state->m_int3_regs[3]) == 0)
381      if ((m_int3_regs[2] & m_int3_regs[3]) == 0)
370382      {
371         cputag_set_input_line(machine, "maincpu", MIPS3_IRQ1, CLEAR_LINE);
383         cputag_set_input_line(machine(), "maincpu", MIPS3_IRQ1, CLEAR_LINE);
372384      }
373385      else
374386      {
375         cputag_set_input_line(machine, "maincpu", MIPS3_IRQ1, ASSERT_LINE);
387         cputag_set_input_line(machine(), "maincpu", MIPS3_IRQ1, ASSERT_LINE);
376388      }
377389      break;
378390   case 0xb0/4:
379391      //verboselog(( machine, 0, "HPC PBUS6 IOC4 Timer Counter 0 Register Write: 0x%08x (%08x)\n", data, mem_mask );
380      pit8253_w(machine.device("pit8254"), 0, data & 0x000000ff);
392      pit8253_w(machine().device("pit8254"), 0, data & 0x000000ff);
381393      return;
382394   case 0xb4/4:
383395      //verboselog(( machine, 0, "HPC PBUS6 IOC4 Timer Counter 1 Register Write: 0x%08x (%08x)\n", data, mem_mask );
384      pit8253_w(machine.device("pit8254"), 1, data & 0x000000ff);
396      pit8253_w(machine().device("pit8254"), 1, data & 0x000000ff);
385397      return;
386398   case 0xb8/4:
387399      //verboselog(( machine, 0, "HPC PBUS6 IOC4 Timer Counter 2 Register Write: 0x%08x (%08x)\n", data, mem_mask );
388      pit8253_w(machine.device("pit8254"), 2, data & 0x000000ff);
400      pit8253_w(machine().device("pit8254"), 2, data & 0x000000ff);
389401      return;
390402   case 0xbc/4:
391403      //verboselog(( machine, 0, "HPC PBUS6 IOC4 Timer Control Word Register Write: 0x%08x (%08x)\n", data, mem_mask );
392      pit8253_w(machine.device("pit8254"), 3, data & 0x000000ff);
404      pit8253_w(machine().device("pit8254"), 3, data & 0x000000ff);
393405      return;
394406   default:
395407      //verboselog(( machine, 0, "Unknown HPC PBUS6 Write: 0x%08x: 0x%08x (%08x)\n", 0x1fbd9800 + ( offset << 2 ), data, mem_mask );
r14963r14964
401413//UINT32 nHPC3_hd0_regs[0x20];
402414//UINT32 nHPC3_hd1_regs[0x20];
403415
404static READ32_HANDLER( hpc3_hd_enet_r )
416READ32_MEMBER(ip22_state::hpc3_hd_enet_r)
405417{
406   ip22_state *state = space->machine().driver_data<ip22_state>();
407   //running_machine &machine = space->machine();
418   //running_machine &machine = machine();
408419
409420   switch( offset )
410421   {
411422   case 0x0004/4:
412      //verboselog((machine, 0, "HPC3 SCSI0DESC Read: %08x (%08x): %08x\n", 0x1fb90000 + ( offset << 2), mem_mask, state->m_HPC3.nSCSI0Descriptor );
413      return state->m_HPC3.nSCSI0Descriptor;
423      //verboselog((machine, 0, "HPC3 SCSI0DESC Read: %08x (%08x): %08x\n", 0x1fb90000 + ( offset << 2), mem_mask, m_HPC3.nSCSI0Descriptor );
424      return m_HPC3.nSCSI0Descriptor;
414425   case 0x1004/4:
415      //verboselog((machine, 0, "HPC3 SCSI0DMACTRL Read: %08x (%08x): %08x\n", 0x1fb90000 + ( offset << 2), mem_mask, state->m_HPC3.nSCSI0DMACtrl );
416      return state->m_HPC3.nSCSI0DMACtrl;
426      //verboselog((machine, 0, "HPC3 SCSI0DMACTRL Read: %08x (%08x): %08x\n", 0x1fb90000 + ( offset << 2), mem_mask, m_HPC3.nSCSI0DMACtrl );
427      return m_HPC3.nSCSI0DMACtrl;
417428   case 0x4000/4:
418      //verboselog((machine, 2, "HPC3 ENETR CBP Read: %08x (%08x): %08x\n", 0x1fb90000 + ( offset << 2), mem_mask, state->m_HPC3.nenetr_nbdp );
419      return state->m_HPC3.nenetr_cbp;
429      //verboselog((machine, 2, "HPC3 ENETR CBP Read: %08x (%08x): %08x\n", 0x1fb90000 + ( offset << 2), mem_mask, m_HPC3.nenetr_nbdp );
430      return m_HPC3.nenetr_cbp;
420431   case 0x4004/4:
421      //verboselog((machine, 2, "HPC3 ENETR NBDP Read: %08x (%08x): %08x\n", 0x1fb90000 + ( offset << 2), mem_mask, state->m_HPC3.nenetr_nbdp );
422      return state->m_HPC3.nenetr_nbdp;
432      //verboselog((machine, 2, "HPC3 ENETR NBDP Read: %08x (%08x): %08x\n", 0x1fb90000 + ( offset << 2), mem_mask, m_HPC3.nenetr_nbdp );
433      return m_HPC3.nenetr_nbdp;
423434   default:
424435      //verboselog((machine, 0, "Unknown HPC3 ENET/HDx Read: %08x (%08x)\n", 0x1fb90000 + ( offset << 2 ), mem_mask );
425436      return 0;
r14963r14964
427438   return 0;
428439}
429440
430static WRITE32_HANDLER( hpc3_hd_enet_w )
441WRITE32_MEMBER(ip22_state::hpc3_hd_enet_w)
431442{
432   ip22_state *state = space->machine().driver_data<ip22_state>();
433   //running_machine &machine = space->machine();
443   //running_machine &machine = machine();
434444
435445   switch( offset )
436446   {
437447   case 0x0004/4:
438448      //verboselog((machine, 2, "HPC3 SCSI0DESC Write: %08x\n", data );
439      state->m_HPC3.nSCSI0Descriptor = data;
449      m_HPC3.nSCSI0Descriptor = data;
440450      break;
441451   case 0x1004/4:
442452      //verboselog((machine, 2, "HPC3 SCSI0DMACTRL Write: %08x\n", data );
443      state->m_HPC3.nSCSI0DMACtrl = data;
453      m_HPC3.nSCSI0DMACtrl = data;
444454      break;
445455   case 0x4000/4:
446456      //verboselog((machine, 2, "HPC3 ENETR CBP Write: %08x\n", data );
447      state->m_HPC3.nenetr_cbp = data;
457      m_HPC3.nenetr_cbp = data;
448458      break;
449459   case 0x4004/4:
450460      //verboselog((machine, 2, "HPC3 ENETR NBDP Write: %08x\n", data );
451      state->m_HPC3.nenetr_nbdp = data;
461      m_HPC3.nenetr_nbdp = data;
452462      break;
453463   default:
454464      //verboselog((machine, 0, "Unknown HPC3 ENET/HDx write: %08x (%08x): %08x\n", 0x1fb90000 + ( offset << 2 ), mem_mask, data );
r14963r14964
456466   }
457467}
458468
459static READ32_HANDLER( hpc3_hd0_r )
469READ32_MEMBER(ip22_state::hpc3_hd0_r)
460470{
461   //running_machine &machine = space->machine();
471   //running_machine &machine = machine();
462472
463473   switch( offset )
464474   {
r14963r14964
467477//      //verboselog((machine, 2, "HPC3 HD0 Status Read: %08x (%08x): %08x\n", 0x1fb90000 + ( offset << 2), mem_mask, nHPC3_hd0_regs[0x17] );
468478      if (ACCESSING_BITS_0_7)
469479      {
470         return wd33c93_r( space, 0 );
480         return wd33c93_r( &space, 0 );
471481      }
472482      else
473483      {
r14963r14964
478488//      //verboselog((machine, 2, "HPC3 HD0 Register Read: %08x (%08x): %08x\n", 0x1fb90000 + ( offset << 2), mem_mask, nHPC3_hd0_regs[nHPC3_hd0_register] );
479489      if (ACCESSING_BITS_0_7)
480490      {
481         return wd33c93_r( space, 1 );
491         return wd33c93_r( &space, 1 );
482492      }
483493      else
484494      {
485495         return 0;
486496      }
487497   default:
488      //verboselog((machine, 0, "Unknown HPC3 HD0 Read: %08x (%08x) [%x] PC=%x\n", 0x1fbc0000 + ( offset << 2 ), mem_mask, offset, cpu_get_pc(&space->device()) );
498      //verboselog((machine, 0, "Unknown HPC3 HD0 Read: %08x (%08x) [%x] PC=%x\n", 0x1fbc0000 + ( offset << 2 ), mem_mask, offset, cpu_get_pc(&space.device()) );
489499      return 0;
490500   }
491501   return 0;
492502}
493503
494static WRITE32_HANDLER( hpc3_hd0_w )
504WRITE32_MEMBER(ip22_state::hpc3_hd0_w)
495505{
496   //running_machine &machine = space->machine();
506   //running_machine &machine = machine();
497507
498508   switch( offset )
499509   {
r14963r14964
502512//      //verboselog((machine, 2, "HPC3 HD0 Register Select Write: %08x\n", data );
503513      if (ACCESSING_BITS_0_7)
504514      {
505         wd33c93_w( space, 0, data & 0x000000ff );
515         wd33c93_w( &space, 0, data & 0x000000ff );
506516      }
507517      break;
508518   case 0x0004/4:
r14963r14964
510520//      //verboselog((machine, 2, "HPC3 HD0 Register %d Write: %08x\n", nHPC3_hd0_register, data );
511521      if (ACCESSING_BITS_0_7)
512522      {
513         wd33c93_w( space, 1,  data & 0x000000ff );
523         wd33c93_w( &space, 1,  data & 0x000000ff );
514524      }
515525      break;
516526   default:
r14963r14964
520530}
521531
522532
523static READ32_HANDLER( hpc3_pbus4_r )
533READ32_MEMBER(ip22_state::hpc3_pbus4_r)
524534{
525   ip22_state *state = space->machine().driver_data<ip22_state>();
526   //running_machine &machine = space->machine();
535   //running_machine &machine = machine();
527536
528537   switch( offset )
529538   {
530539   case 0x0004/4:
531      //verboselog((machine, 2, "HPC3 PBUS4 Unknown 0 Read: (%08x): %08x\n", mem_mask, state->m_HPC3.nunk0 );
532      return state->m_HPC3.nunk0;
540      //verboselog((machine, 2, "HPC3 PBUS4 Unknown 0 Read: (%08x): %08x\n", mem_mask, m_HPC3.nunk0 );
541      return m_HPC3.nunk0;
533542   case 0x000c/4:
534      //verboselog((machine, 2, "Interrupt Controller(?) Read: (%08x): %08x\n", mem_mask, state->m_HPC3.nIC_Unk0 );
535      return state->m_HPC3.nIC_Unk0;
543      //verboselog((machine, 2, "Interrupt Controller(?) Read: (%08x): %08x\n", mem_mask, m_HPC3.nIC_Unk0 );
544      return m_HPC3.nIC_Unk0;
536545   case 0x0014/4:
537      //verboselog((machine, 2, "HPC3 PBUS4 Unknown 1 Read: (%08x): %08x\n", mem_mask, state->m_HPC3.nunk1 );
538      return state->m_HPC3.nunk1;
546      //verboselog((machine, 2, "HPC3 PBUS4 Unknown 1 Read: (%08x): %08x\n", mem_mask, m_HPC3.nunk1 );
547      return m_HPC3.nunk1;
539548   default:
540549      //verboselog((machine, 0, "Unknown HPC3 PBUS4 Read: %08x (%08x)\n", 0x1fbd9000 + ( offset << 2 ), mem_mask );
541550      return 0;
r14963r14964
543552   return 0;
544553}
545554
546static WRITE32_HANDLER( hpc3_pbus4_w )
555WRITE32_MEMBER(ip22_state::hpc3_pbus4_w)
547556{
548   ip22_state *state = space->machine().driver_data<ip22_state>();
549   //running_machine &machine = space->machine();
557   //running_machine &machine = machine();
550558
551559   switch( offset )
552560   {
553561   case 0x0004/4:
554562      //verboselog((machine, 2, "HPC3 PBUS4 Unknown 0 Write: %08x (%08x)\n", data, mem_mask );
555      state->m_HPC3.nunk0 = data;
563      m_HPC3.nunk0 = data;
556564      break;
557565   case 0x000c/4:
558566      //verboselog((machine, 2, "Interrupt Controller(?) Write: (%08x): %08x\n", mem_mask, data );
559      state->m_HPC3.nIC_Unk0 = data;
567      m_HPC3.nIC_Unk0 = data;
560568      break;
561569   case 0x0014/4:
562570      //verboselog((machine, 2, "HPC3 PBUS4 Unknown 1 Write: %08x (%08x)\n", data, mem_mask );
563      state->m_HPC3.nunk1 = data;
571      m_HPC3.nunk1 = data;
564572      break;
565573   default:
566574      //verboselog((machine, 0, "Unknown HPC3 PBUS4 Write: %08x (%08x): %08x\n", 0x1fbd9000 + ( offset << 2 ), mem_mask, data );
r14963r14964
600608#define RTC_RAMMSB   state->m_RTC.nRegs[0x51]
601609#define RTC_WRITECNT   state->m_RTC.nRegs[0x5e]
602610
603static READ32_HANDLER( rtc_r )
611READ32_MEMBER(ip22_state::rtc_r)
604612{
605   ip22_state *state = space->machine().driver_data<ip22_state>();
606   //running_machine &machine = space->machine();
613   ip22_state *state = machine().driver_data<ip22_state>();
607614
608//  mame_printf_info("RTC_R: offset %x = %x (PC=%x)\n", offset, state->m_RTC.nRegs[offset], activecpu_get_pc());
615//  mame_printf_info("RTC_R: offset %x = %x (PC=%x)\n", offset, m_RTC.nRegs[offset], activecpu_get_pc());
609616
610617   if( offset <= 0x0d )
611618   {
r14963r14964
660667   }
661668   if( offset >= 0x0e && offset < 0x40 )
662669   {
663      return state->m_RTC.nRegs[offset];
670      return m_RTC.nRegs[offset];
664671   }
665672   if( offset >= 0x40 && offset < 0x80 && !( RTC_REGISTERA & 0x10 ) )
666673   {
667      return state->m_RTC.nUserRAM[offset - 0x40];
674      return m_RTC.nUserRAM[offset - 0x40];
668675   }
669676   if( offset >= 0x40 && offset < 0x80 && ( RTC_REGISTERA & 0x10 ) )
670677   {
r14963r14964
719726         //verboselog((machine, 3, "RTC RAM MSB Read: %02x \n", RTC_RAMMSB );
720727         return RTC_RAMMSB;
721728      case 0x0053:
722         return state->m_RTC.nRAM[ ( RTC_RAMMSB << 8 ) | RTC_RAMLSB ];
729         return m_RTC.nRAM[ ( RTC_RAMMSB << 8 ) | RTC_RAMLSB ];
723730      case 0x005e:
724731         return RTC_WRITECNT;
725732      default:
r14963r14964
729736   }
730737   if( offset >= 0x80 )
731738   {
732      return state->m_RTC.nUserRAM[ offset - 0x80 ];
739      return m_RTC.nUserRAM[ offset - 0x80 ];
733740   }
734741   return 0;
735742}
736743
737static WRITE32_HANDLER( rtc_w )
744WRITE32_MEMBER(ip22_state::rtc_w)
738745{
739   ip22_state *state = space->machine().driver_data<ip22_state>();
740   //running_machine &machine = space->machine();
741
746   //running_machine &machine = machine();
747   ip22_state *state = machine().driver_data<ip22_state>();
742748   RTC_WRITECNT++;
743749
744750//  mame_printf_info("RTC_W: offset %x => %x (PC=%x)\n", data, offset, activecpu_get_pc());
r14963r14964
808814   }
809815   if( offset >= 0x0e && offset < 0x40 )
810816   {
811      state->m_RTC.nRegs[offset] = data;
817      m_RTC.nRegs[offset] = data;
812818      return;
813819   }
814820   if( offset >= 0x40 && offset < 0x80 && !( RTC_REGISTERA & 0x10 ) )
815821   {
816      state->m_RTC.nUserRAM[offset - 0x40] = data;
822      m_RTC.nUserRAM[offset - 0x40] = data;
817823      return;
818824   }
819825   if( offset >= 0x40 && offset < 0x80 && ( RTC_REGISTERA & 0x10 ) )
r14963r14964
866872         RTC_RAMMSB = data;
867873         break;
868874      case 0x0053:
869         state->m_RTC.nRAM[ ( RTC_RAMMSB << 8 ) | RTC_RAMLSB ] = data;
875         m_RTC.nRAM[ ( RTC_RAMMSB << 8 ) | RTC_RAMLSB ] = data;
870876         break;
871877      default:
872878         //verboselog((machine, 3, "Unknown RTC Ext. Reg. Write: %02x: %02x\n", offset, data );
r14963r14964
875881   }
876882   if( offset >= 0x80 )
877883   {
878      state->m_RTC.nUserRAM[ offset - 0x80 ] = data;
884      m_RTC.nUserRAM[ offset - 0x80 ] = data;
879885   }
880886}
881887
882888// a bit hackish, but makes the memory detection work properly and allows a big cleanup of the mapping
883static WRITE32_HANDLER( ip22_write_ram )
889WRITE32_MEMBER(ip22_state::ip22_write_ram)
884890{
885   ip22_state *state = space->machine().driver_data<ip22_state>();
886891   // if banks 2 or 3 are enabled, do nothing, we don't support that much memory
887   if (sgi_mc_r(space, 0xc8/4, 0xffffffff) & 0x10001000)
892   if (sgi_mc_r(&space, 0xc8/4, 0xffffffff) & 0x10001000)
888893   {
889894      // a random perturbation so the memory test fails
890895      data ^= 0xffffffff;
891896   }
892897
893898   // if banks 0 or 1 have 2 subbanks, also kill it, we only want 128 MB
894   if (sgi_mc_r(space, 0xc0/4, 0xffffffff) & 0x40004000)
899   if (sgi_mc_r(&space, 0xc0/4, 0xffffffff) & 0x40004000)
895900   {
896901      // a random perturbation so the memory test fails
897902      data ^= 0xffffffff;
898903   }
899   COMBINE_DATA(&state->m_mainram[offset]);
904   COMBINE_DATA(&m_mainram[offset]);
900905}
901906
902907
r14963r14964
912917#define H2_ISR_GLOBAL_RESET   0x08
913918#define H2_ISR_CODEC_RESET   0x10
914919
915static READ32_HANDLER( hal2_r )
920READ32_MEMBER(ip22_state::hal2_r)
916921{
917   //running_machine &machine = space->machine();
922   //running_machine &machine = machine();
918923
919924   switch( offset )
920925   {
r14963r14964
929934   return 0;
930935}
931936
932static WRITE32_HANDLER( hal2_w )
937WRITE32_MEMBER(ip22_state::hal2_w)
933938{
934   ip22_state *state = space->machine().driver_data<ip22_state>();
935   //running_machine &machine = space->machine();
939   //running_machine &machine = machine();
936940
937941   switch( offset )
938942   {
r14963r14964
949953      break;
950954   case 0x0030/4:
951955      //verboselog((machine, 0, "HAL2 Indirect Address Register Write: 0x%08x (%08x)\n", data, mem_mask );
952      state->m_HAL2.nIAR = data;
956      m_HAL2.nIAR = data;
953957      switch( data & H2_IAR_TYPE )
954958      {
955959      case 0x1000:
r14963r14964
10261030      break;
10271031   case 0x0040/4:
10281032      //verboselog((machine, 0, "HAL2 Indirect Data Register 0 Write: 0x%08x (%08x)\n", data, mem_mask );
1029      state->m_HAL2.nIDR[0] = data;
1033      m_HAL2.nIDR[0] = data;
10301034      return;
10311035   case 0x0050/4:
10321036      //verboselog((machine, 0, "HAL2 Indirect Data Register 1 Write: 0x%08x (%08x)\n", data, mem_mask );
1033      state->m_HAL2.nIDR[1] = data;
1037      m_HAL2.nIDR[1] = data;
10341038      return;
10351039   case 0x0060/4:
10361040      //verboselog((machine, 0, "HAL2 Indirect Data Register 2 Write: 0x%08x (%08x)\n", data, mem_mask );
1037      state->m_HAL2.nIDR[2] = data;
1041      m_HAL2.nIDR[2] = data;
10381042      return;
10391043   case 0x0070/4:
10401044      //verboselog((machine, 0, "HAL2 Indirect Data Register 3 Write: 0x%08x (%08x)\n", data, mem_mask );
1041      state->m_HAL2.nIDR[3] = data;
1045      m_HAL2.nIDR[3] = data;
10421046      return;
10431047   }
10441048   //verboselog((machine, 0, "Unknown HAL2 write: 0x%08x: 0x%08x (%08x)\n", 0x1fbd8000 + offset*4, data, mem_mask );
r14963r14964
10971101#endif
10981102}
10991103
1100static READ32_HANDLER( hpc3_pbusdma_r )
1104READ32_MEMBER(ip22_state::hpc3_pbusdma_r)
11011105{
11021106   //UINT32 channel = offset / (0x2000/4);
1103   //verboselog((space->machine(), 0, "PBUS DMA Channel %d Read: 0x%08x (%08x)\n", channel, 0x1fb80000 + offset*4, mem_mask );
1107   //verboselog((machine(), 0, "PBUS DMA Channel %d Read: 0x%08x (%08x)\n", channel, 0x1fb80000 + offset*4, mem_mask );
11041108   return 0;
11051109}
11061110
1107static WRITE32_HANDLER( hpc3_pbusdma_w )
1111WRITE32_MEMBER(ip22_state::hpc3_pbusdma_w)
11081112{
1109   ip22_state *state = space->machine().driver_data<ip22_state>();
11101113   UINT32 channel = offset / (0x2000/4);
1111   running_machine &machine = space->machine();
11121114
11131115   switch( offset & 0x07ff )
11141116   {
r14963r14964
11191121      //verboselog((machine, 0, "PBUS DMA Channel %d Descriptor Pointer Write: 0x%08x\n", channel, data );
11201122      if( channel == 1 )
11211123      {
1122         state->m_PBUS_DMA.nDescPtr = data;
1123         state->m_PBUS_DMA.nCurPtr = state->m_mainram[(state->m_PBUS_DMA.nDescPtr - 0x08000000)/4];
1124         state->m_PBUS_DMA.nWordsLeft = state->m_mainram[(state->m_PBUS_DMA.nDescPtr - 0x08000000)/4+1];
1125         state->m_PBUS_DMA.nNextPtr = state->m_mainram[(state->m_PBUS_DMA.nDescPtr - 0x08000000)/4+2];
1126         //verboselog((machine, 0, "nPBUS_DMA_DescPtr = %08x\n", state->m_PBUS_DMA.nDescPtr );
1127         //verboselog((machine, 0, "nPBUS_DMA_CurPtr = %08x\n", state->m_PBUS_DMA.nCurPtr );
1128         //verboselog((machine, 0, "nPBUS_DMA_WordsLeft = %08x\n", state->m_PBUS_DMA.nWordsLeft );
1129         //verboselog((machine, 0, "nPBUS_DMA_NextPtr = %08x\n", state->m_PBUS_DMA.nNextPtr );
1124         m_PBUS_DMA.nDescPtr = data;
1125         m_PBUS_DMA.nCurPtr = m_mainram[(m_PBUS_DMA.nDescPtr - 0x08000000)/4];
1126         m_PBUS_DMA.nWordsLeft = m_mainram[(m_PBUS_DMA.nDescPtr - 0x08000000)/4+1];
1127         m_PBUS_DMA.nNextPtr = m_mainram[(m_PBUS_DMA.nDescPtr - 0x08000000)/4+2];
1128         //verboselog((machine, 0, "nPBUS_DMA_DescPtr = %08x\n", m_PBUS_DMA.nDescPtr );
1129         //verboselog((machine, 0, "nPBUS_DMA_CurPtr = %08x\n", m_PBUS_DMA.nCurPtr );
1130         //verboselog((machine, 0, "nPBUS_DMA_WordsLeft = %08x\n", m_PBUS_DMA.nWordsLeft );
1131         //verboselog((machine, 0, "nPBUS_DMA_NextPtr = %08x\n", m_PBUS_DMA.nNextPtr );
11301132      }
11311133      return;
11321134   case 0x1000/4:
r14963r14964
11641166      //verboselog((machine, 0, "    FIFO End: Rowe %04x\n", ( data & PBUS_CTRL_FIFO_END ) >> 24 );
11651167      if( ( data & PBUS_CTRL_DMASTART ) || ( data & PBUS_CTRL_LOAD_EN ) )
11661168      {
1167         machine.scheduler().timer_set(attotime::from_hz(44100), FUNC(ip22_dma));
1168         state->m_PBUS_DMA.nActive = 1;
1169         machine().scheduler().timer_set(attotime::from_hz(44100), FUNC(ip22_dma));
1170         m_PBUS_DMA.nActive = 1;
11691171      }
11701172      return;
11711173   }
11721174   //verboselog((machine, 0, "Unknown PBUS DMA Channel %d Write: 0x%08x: 0x%08x (%08x)\n", channel, 0x1fb80000 + offset*4, data, mem_mask );
11731175}
11741176
1175static READ32_HANDLER( hpc3_unkpbus0_r )
1177READ32_MEMBER(ip22_state::hpc3_unkpbus0_r)
11761178{
1177   //ip22_state *state = space->machine().driver_data<ip22_state>();
11781179   return 0;
1179   ////verboselog((space->machine(), 0, "Unknown PBUS Read: 0x%08x (%08x)\n", 0x1fbc8000 + offset*4, mem_mask );
1180   //return state->m_unkpbus0[offset];
1180   ////verboselog((machine(), 0, "Unknown PBUS Read: 0x%08x (%08x)\n", 0x1fbc8000 + offset*4, mem_mask );
1181   //return m_unkpbus0[offset];
11811182}
11821183
1183static WRITE32_HANDLER( hpc3_unkpbus0_w )
1184WRITE32_MEMBER(ip22_state::hpc3_unkpbus0_w)
11841185{
1185   //ip22_state *state = space->machine().driver_data<ip22_state>();
1186   ////verboselog((space->machine(), 0, "Unknown PBUS Write: 0x%08x = 0x%08x (%08x)\n", 0x1fbc8000 + offset*4, data, mem_mask );
1187   //COMBINE_DATA(&state->m_unkpbus0[offset]);
1186   ////verboselog((machine(), 0, "Unknown PBUS Write: 0x%08x = 0x%08x (%08x)\n", 0x1fbc8000 + offset*4, data, mem_mask );
1187   //COMBINE_DATA(&m_unkpbus0[offset]);
11881188}
11891189
11901190static ADDRESS_MAP_START( ip225015_map, AS_PROGRAM, 32, ip22_state )
11911191   AM_RANGE( 0x00000000, 0x0007ffff ) AM_RAMBANK( "bank1" )   /* mirror of first 512k of main RAM */
1192   AM_RANGE( 0x08000000, 0x0fffffff ) AM_SHARE("share1") AM_SHARE("mainram") AM_RAM_WRITE_LEGACY(ip22_write_ram)      /* 128 MB of main RAM */
1192   AM_RANGE( 0x08000000, 0x0fffffff ) AM_SHARE("share1") AM_SHARE("mainram") AM_RAM_WRITE(ip22_write_ram)      /* 128 MB of main RAM */
11931193   AM_RANGE( 0x1f0f0000, 0x1f0f1fff ) AM_READWRITE_LEGACY(newport_rex3_r, newport_rex3_w )
11941194   AM_RANGE( 0x1fa00000, 0x1fa1ffff ) AM_READWRITE_LEGACY(sgi_mc_r, sgi_mc_w )
1195   AM_RANGE( 0x1fb90000, 0x1fb9ffff ) AM_READWRITE_LEGACY(hpc3_hd_enet_r, hpc3_hd_enet_w )
1195   AM_RANGE( 0x1fb90000, 0x1fb9ffff ) AM_READWRITE(hpc3_hd_enet_r, hpc3_hd_enet_w )
11961196   AM_RANGE( 0x1fbb0000, 0x1fbb0003 ) AM_RAM   /* unknown, but read a lot and discarded */
1197   AM_RANGE( 0x1fbc0000, 0x1fbc7fff ) AM_READWRITE_LEGACY(hpc3_hd0_r, hpc3_hd0_w )
1198   AM_RANGE( 0x1fbc8000, 0x1fbcffff ) AM_READWRITE_LEGACY(hpc3_unkpbus0_r, hpc3_unkpbus0_w ) AM_SHARE("unkpbus0")
1199   AM_RANGE( 0x1fb80000, 0x1fb8ffff ) AM_READWRITE_LEGACY(hpc3_pbusdma_r, hpc3_pbusdma_w )
1200   AM_RANGE( 0x1fbd8000, 0x1fbd83ff ) AM_READWRITE_LEGACY(hal2_r, hal2_w )
1197   AM_RANGE( 0x1fbc0000, 0x1fbc7fff ) AM_READWRITE(hpc3_hd0_r, hpc3_hd0_w )
1198   AM_RANGE( 0x1fbc8000, 0x1fbcffff ) AM_READWRITE(hpc3_unkpbus0_r, hpc3_unkpbus0_w ) AM_SHARE("unkpbus0")
1199   AM_RANGE( 0x1fb80000, 0x1fb8ffff ) AM_READWRITE(hpc3_pbusdma_r, hpc3_pbusdma_w )
1200   AM_RANGE( 0x1fbd8000, 0x1fbd83ff ) AM_READWRITE(hal2_r, hal2_w )
12011201   AM_RANGE( 0x1fbd8400, 0x1fbd87ff ) AM_RAM /* hack */
1202   AM_RANGE( 0x1fbd9000, 0x1fbd93ff ) AM_READWRITE_LEGACY(hpc3_pbus4_r, hpc3_pbus4_w )
1203   AM_RANGE( 0x1fbd9800, 0x1fbd9bff ) AM_READWRITE_LEGACY(hpc3_pbus6_r, hpc3_pbus6_w )
1202   AM_RANGE( 0x1fbd9000, 0x1fbd93ff ) AM_READWRITE(hpc3_pbus4_r, hpc3_pbus4_w )
1203   AM_RANGE( 0x1fbd9800, 0x1fbd9bff ) AM_READWRITE(hpc3_pbus6_r, hpc3_pbus6_w )
12041204   AM_RANGE( 0x1fbdc000, 0x1fbdc7ff ) AM_RAM
12051205   AM_RANGE( 0x1fbdd000, 0x1fbdd3ff ) AM_RAM
1206   AM_RANGE( 0x1fbe0000, 0x1fbe04ff ) AM_READWRITE_LEGACY(rtc_r, rtc_w )
1206   AM_RANGE( 0x1fbe0000, 0x1fbe04ff ) AM_READWRITE(rtc_r, rtc_w )
12071207   AM_RANGE( 0x1fc00000, 0x1fc7ffff ) AM_ROM AM_REGION( "user1", 0 )
1208   AM_RANGE( 0x20000000, 0x27ffffff ) AM_SHARE("share1") AM_RAM_WRITE_LEGACY(ip22_write_ram)
1208   AM_RANGE( 0x20000000, 0x27ffffff ) AM_SHARE("share1") AM_RAM_WRITE(ip22_write_ram)
12091209ADDRESS_MAP_END
12101210
12111211
src/mess/drivers/spec128.c
r14963r14964
235235}
236236
237237static ADDRESS_MAP_START (spectrum_128_io, AS_IO, 8, spectrum_state )
238   AM_RANGE(0x0000, 0x0000) AM_READWRITE_LEGACY(spectrum_port_fe_r,spectrum_port_fe_w) AM_MIRROR(0xfffe) AM_MASK(0xffff)
239   AM_RANGE(0x001f, 0x001f) AM_READ_LEGACY(spectrum_port_1f_r) AM_MIRROR(0xff00)
240   AM_RANGE(0x007f, 0x007f) AM_READ_LEGACY(spectrum_port_7f_r) AM_MIRROR(0xff00)
241   AM_RANGE(0x00df, 0x00df) AM_READ_LEGACY(spectrum_port_df_r) AM_MIRROR(0xff00)
238   AM_RANGE(0x0000, 0x0000) AM_READWRITE(spectrum_port_fe_r,spectrum_port_fe_w) AM_MIRROR(0xfffe) AM_MASK(0xffff)
239   AM_RANGE(0x001f, 0x001f) AM_READ(spectrum_port_1f_r) AM_MIRROR(0xff00)
240   AM_RANGE(0x007f, 0x007f) AM_READ(spectrum_port_7f_r) AM_MIRROR(0xff00)
241   AM_RANGE(0x00df, 0x00df) AM_READ(spectrum_port_df_r) AM_MIRROR(0xff00)
242242   AM_RANGE(0x4000, 0x4000) AM_WRITE_LEGACY(spectrum_128_port_7ffd_w) AM_MIRROR(0x3ffd)
243243   AM_RANGE(0x8000, 0x8000) AM_DEVWRITE_LEGACY("ay8912", ay8910_data_w) AM_MIRROR(0x3ffd)
244244   AM_RANGE(0xc000, 0xc000) AM_DEVREADWRITE_LEGACY("ay8912", ay8910_r, ay8910_address_w) AM_MIRROR(0x3ffd)
src/mess/drivers/a2600.c
r14963r14964
7373   DECLARE_DIRECT_UPDATE_MEMBER(modeSS_opbase);
7474   DECLARE_DIRECT_UPDATE_MEMBER(modeDPC_opbase_handler);
7575   DECLARE_DIRECT_UPDATE_MEMBER(modeFE_opbase_handler);   
76   DECLARE_READ8_MEMBER(modeF8_switch_r);
77   DECLARE_READ8_MEMBER(modeFA_switch_r);
78   DECLARE_READ8_MEMBER(modeF6_switch_r);
79   DECLARE_READ8_MEMBER(modeF4_switch_r);
80   DECLARE_READ8_MEMBER(modeE0_switch_r);
81   DECLARE_READ8_MEMBER(modeE7_switch_r);
82   DECLARE_READ8_MEMBER(modeE7_RAM_switch_r);
83   DECLARE_READ8_MEMBER(modeUA_switch_r);
84   DECLARE_READ8_MEMBER(modeDC_switch_r);
85   DECLARE_READ8_MEMBER(modeFV_switch_r);
86   DECLARE_READ8_MEMBER(modeJVP_switch_r);
87   DECLARE_WRITE8_MEMBER(modeF8_switch_w);
88   DECLARE_WRITE8_MEMBER(modeFA_switch_w);
89   DECLARE_WRITE8_MEMBER(modeF6_switch_w);
90   DECLARE_WRITE8_MEMBER(modeF4_switch_w);
91   DECLARE_WRITE8_MEMBER(modeE0_switch_w);
92   DECLARE_WRITE8_MEMBER(modeE7_switch_w);
93   DECLARE_WRITE8_MEMBER(modeE7_RAM_switch_w);
94   DECLARE_WRITE8_MEMBER(mode3F_switch_w);
95   DECLARE_WRITE8_MEMBER(modeUA_switch_w);
96   DECLARE_WRITE8_MEMBER(modeDC_switch_w);
97   DECLARE_WRITE8_MEMBER(mode3E_switch_w);
98   DECLARE_WRITE8_MEMBER(mode3E_RAM_switch_w);
99   DECLARE_WRITE8_MEMBER(mode3E_RAM_w);
100   DECLARE_WRITE8_MEMBER(modeFV_switch_w);
101   DECLARE_WRITE8_MEMBER(modeJVP_switch_w);
102   DECLARE_READ8_MEMBER(modeSS_r);
103   DECLARE_READ8_MEMBER(modeDPC_r);
104   DECLARE_WRITE8_MEMBER(modeDPC_w);
105   DECLARE_READ8_MEMBER(modeFE_switch_r);
106   DECLARE_WRITE8_MEMBER(modeFE_switch_w);
107   DECLARE_READ8_MEMBER(current_bank_r);
108   DECLARE_READ16_MEMBER(a2600_read_input_port);
109   DECLARE_READ8_MEMBER(a2600_get_databus_contents);
110   DECLARE_WRITE16_MEMBER(a2600_tia_vsync_callback);
111   DECLARE_WRITE16_MEMBER(a2600_tia_vsync_callback_pal);
112   void modeDPC_check_flag(UINT8 data_fetcher);
113   void modeDPC_decrement_counter(UINT8 data_fetcher);
76114};
77115
78116
r14963r14964
644682
645683
646684/* These read handlers will return the byte from the new bank */
647static  READ8_HANDLER(modeF8_switch_r)
685READ8_MEMBER(a2600_state::modeF8_switch_r)
648686{
649   a2600_state *state = space->machine().driver_data<a2600_state>();
650   modeF8_switch(space->machine(), offset, 0);
651   return state->m_bank_base[1][0xff8 + offset];
687   modeF8_switch(machine(), offset, 0);
688   return m_bank_base[1][0xff8 + offset];
652689}
653690
654static  READ8_HANDLER(modeFA_switch_r)
691READ8_MEMBER(a2600_state::modeFA_switch_r)
655692{
656   a2600_state *state = space->machine().driver_data<a2600_state>();
657   modeFA_switch(space->machine(), offset, 0);
658   return state->m_bank_base[1][0xff8 + offset];
693   modeFA_switch(machine(), offset, 0);
694   return m_bank_base[1][0xff8 + offset];
659695}
660696
661static  READ8_HANDLER(modeF6_switch_r)
697READ8_MEMBER(a2600_state::modeF6_switch_r)
662698{
663   a2600_state *state = space->machine().driver_data<a2600_state>();
664   modeF6_switch(space->machine(), offset, 0);
665   return state->m_bank_base[1][0xff6 + offset];
699   modeF6_switch(machine(), offset, 0);
700   return m_bank_base[1][0xff6 + offset];
666701}
667702
668static  READ8_HANDLER(modeF4_switch_r)
703READ8_MEMBER(a2600_state::modeF4_switch_r)
669704{
670   a2600_state *state = space->machine().driver_data<a2600_state>();
671   modeF4_switch(space->machine(), offset, 0);
672   return state->m_bank_base[1][0xff4 + offset];
705   modeF4_switch(machine(), offset, 0);
706   return m_bank_base[1][0xff4 + offset];
673707}
674708
675static  READ8_HANDLER(modeE0_switch_r)
709READ8_MEMBER(a2600_state::modeE0_switch_r)
676710{
677   a2600_state *state = space->machine().driver_data<a2600_state>();
678   modeE0_switch(space->machine(), offset, 0);
679   return state->m_bank_base[4][0x3e0 + offset];
711   modeE0_switch(machine(), offset, 0);
712   return m_bank_base[4][0x3e0 + offset];
680713}
681714
682static  READ8_HANDLER(modeE7_switch_r)
715READ8_MEMBER(a2600_state::modeE7_switch_r)
683716{
684   a2600_state *state = space->machine().driver_data<a2600_state>();
685   modeE7_switch(space->machine(), offset, 0);
686   return state->m_bank_base[1][0xfe0 + offset];
717   modeE7_switch(machine(), offset, 0);
718   return m_bank_base[1][0xfe0 + offset];
687719}
688720
689static  READ8_HANDLER(modeE7_RAM_switch_r)
721READ8_MEMBER(a2600_state::modeE7_RAM_switch_r)
690722{
691   modeE7_RAM_switch(space->machine(), offset, 0);
723   modeE7_RAM_switch(machine(), offset, 0);
692724   return 0;
693725}
694726
695static  READ8_HANDLER(modeUA_switch_r)
727READ8_MEMBER(a2600_state::modeUA_switch_r)
696728{
697   modeUA_switch(space->machine(), offset, 0);
729   modeUA_switch(machine(), offset, 0);
698730   return 0;
699731}
700732
701static  READ8_HANDLER(modeDC_switch_r)
733READ8_MEMBER(a2600_state::modeDC_switch_r)
702734{
703   a2600_state *state = space->machine().driver_data<a2600_state>();
704   modeDC_switch(space->machine(), offset, 0);
705   return state->m_bank_base[1][0xff0 + offset];
735   modeDC_switch(machine(), offset, 0);
736   return m_bank_base[1][0xff0 + offset];
706737}
707738
708static  READ8_HANDLER(modeFV_switch_r)
739READ8_MEMBER(a2600_state::modeFV_switch_r)
709740{
710   a2600_state *state = space->machine().driver_data<a2600_state>();
711   modeFV_switch(space->machine(), offset, 0);
712   return state->m_bank_base[1][0xfd0 + offset];
741   modeFV_switch(machine(), offset, 0);
742   return m_bank_base[1][0xfd0 + offset];
713743}
714744
715static  READ8_HANDLER(modeJVP_switch_r)
745READ8_MEMBER(a2600_state::modeJVP_switch_r)
716746{
717   a2600_state *state = space->machine().driver_data<a2600_state>();
718   modeJVP_switch(space->machine(), offset, 0);
719   return state->m_riot_ram[ 0x20 + offset ];
747   modeJVP_switch(machine(), offset, 0);
748   return m_riot_ram[ 0x20 + offset ];
720749}
721750
722751
723static WRITE8_HANDLER(modeF8_switch_w) { modeF8_switch(space->machine(), offset, data); }
724static WRITE8_HANDLER(modeFA_switch_w) { modeFA_switch(space->machine(), offset, data); }
725static WRITE8_HANDLER(modeF6_switch_w) { modeF6_switch(space->machine(), offset, data); }
726static WRITE8_HANDLER(modeF4_switch_w) { modeF4_switch(space->machine(), offset, data); }
727static WRITE8_HANDLER(modeE0_switch_w) { modeE0_switch(space->machine(), offset, data); }
728static WRITE8_HANDLER(modeE7_switch_w) { modeE7_switch(space->machine(), offset, data); }
729static WRITE8_HANDLER(modeE7_RAM_switch_w) { modeE7_RAM_switch(space->machine(), offset, data); }
730static WRITE8_HANDLER(mode3F_switch_w) { mode3F_switch(space->machine(), offset, data); }
731static WRITE8_HANDLER(modeUA_switch_w) { modeUA_switch(space->machine(), offset, data); }
732static WRITE8_HANDLER(modeDC_switch_w) { modeDC_switch(space->machine(), offset, data); }
733static WRITE8_HANDLER(mode3E_switch_w) { mode3E_switch(space->machine(), offset, data); }
734static WRITE8_HANDLER(mode3E_RAM_switch_w) { mode3E_RAM_switch(space->machine(), offset, data); }
735static WRITE8_HANDLER(mode3E_RAM_w)
752WRITE8_MEMBER(a2600_state::modeF8_switch_w){ modeF8_switch(machine(), offset, data); }
753WRITE8_MEMBER(a2600_state::modeFA_switch_w){ modeFA_switch(machine(), offset, data); }
754WRITE8_MEMBER(a2600_state::modeF6_switch_w){ modeF6_switch(machine(), offset, data); }
755WRITE8_MEMBER(a2600_state::modeF4_switch_w){ modeF4_switch(machine(), offset, data); }
756WRITE8_MEMBER(a2600_state::modeE0_switch_w){ modeE0_switch(machine(), offset, data); }
757WRITE8_MEMBER(a2600_state::modeE7_switch_w){ modeE7_switch(machine(), offset, data); }
758WRITE8_MEMBER(a2600_state::modeE7_RAM_switch_w){ modeE7_RAM_switch(machine(), offset, data); }
759WRITE8_MEMBER(a2600_state::mode3F_switch_w){ mode3F_switch(machine(), offset, data); }
760WRITE8_MEMBER(a2600_state::modeUA_switch_w){ modeUA_switch(machine(), offset, data); }
761WRITE8_MEMBER(a2600_state::modeDC_switch_w){ modeDC_switch(machine(), offset, data); }
762WRITE8_MEMBER(a2600_state::mode3E_switch_w){ mode3E_switch(machine(), offset, data); }
763WRITE8_MEMBER(a2600_state::mode3E_RAM_switch_w){ mode3E_RAM_switch(machine(), offset, data); }
764WRITE8_MEMBER(a2600_state::mode3E_RAM_w)
736765{
737   a2600_state *state = space->machine().driver_data<a2600_state>();
738   if ( state->m_mode3E_ram_enabled )
766   if ( m_mode3E_ram_enabled )
739767   {
740      state->m_ram_base[offset] = data;
768      m_ram_base[offset] = data;
741769   }
742770}
743static WRITE8_HANDLER(modeFV_switch_w) { modeFV_switch(space->machine(), offset, data); }
744static WRITE8_HANDLER(modeJVP_switch_w)
771WRITE8_MEMBER(a2600_state::modeFV_switch_w){ modeFV_switch(machine(), offset, data); }
772WRITE8_MEMBER(a2600_state::modeJVP_switch_w)
745773{
746   a2600_state *state = space->machine().driver_data<a2600_state>();
747   modeJVP_switch(space->machine(), offset, data); state->m_riot_ram[ 0x20 + offset ] = data;
774   modeJVP_switch(machine(), offset, data); m_riot_ram[ 0x20 + offset ] = data;
748775}
749776
750777
r14963r14964
752779{
753780   if ( ( address & 0x1FFF ) >= 0x1FF6 && ( address & 0x1FFF ) <= 0x1FF9 )
754781   {
755      modeF6_switch_w( machine().device("maincpu")->memory().space(AS_PROGRAM), ( address & 0x1FFF ) - 0x1FF6, 0 );
782      modeF6_switch_w(*machine().device("maincpu")->memory().space(AS_PROGRAM), ( address & 0x1FFF ) - 0x1FF6, 0 );
756783   }
757784   return address;
758785}
r14963r14964
774801   return address;
775802}
776803
777static READ8_HANDLER(modeSS_r)
804READ8_MEMBER(a2600_state::modeSS_r)
778805{
779   a2600_state *state = space->machine().driver_data<a2600_state>();
780   UINT8 data = ( offset & 0x800 ) ? state->m_bank_base[2][offset & 0x7FF] : state->m_bank_base[1][offset];
806   UINT8 data = ( offset & 0x800 ) ? m_bank_base[2][offset & 0x7FF] : m_bank_base[1][offset];
781807
782   //logerror("%04X: read from modeSS area offset = %04X\n", cpu_get_pc(space->machine().device("maincpu")), offset);
808   //logerror("%04X: read from modeSS area offset = %04X\n", cpu_get_pc(machine().device("maincpu")), offset);
783809   /* Check for control register "write" */
784810   if ( offset == 0xFF8 )
785811   {
786      //logerror("%04X: write to modeSS control register data = %02X\n", cpu_get_pc(space->machine().device("maincpu")), state->m_modeSS_byte);
787      state->m_modeSS_write_enabled = state->m_modeSS_byte & 0x02;
788      state->m_modeSS_write_delay = state->m_modeSS_byte >> 5;
789      switch ( state->m_modeSS_byte & 0x1C )
812      //logerror("%04X: write to modeSS control register data = %02X\n", cpu_get_pc(machine().device("maincpu")), m_modeSS_byte);
813      m_modeSS_write_enabled = m_modeSS_byte & 0x02;
814      m_modeSS_write_delay = m_modeSS_byte >> 5;
815      switch ( m_modeSS_byte & 0x1C )
790816      {
791817      case 0x00:
792         state->m_bank_base[1] = state->m_extra_RAM->base() + 2 * 0x800;
793         state->m_bank_base[2] = ( state->m_modeSS_byte & 0x01 ) ? space->machine().region("maincpu")->base() + 0x1800 : space->machine().region("user1")->base();
794         state->m_modeSS_high_ram_enabled = 0;
818         m_bank_base[1] = m_extra_RAM->base() + 2 * 0x800;
819         m_bank_base[2] = ( m_modeSS_byte & 0x01 ) ? machine().region("maincpu")->base() + 0x1800 : machine().region("user1")->base();
820         m_modeSS_high_ram_enabled = 0;
795821         break;
796822      case 0x04:
797         state->m_bank_base[1] = state->m_extra_RAM->base();
798         state->m_bank_base[2] = ( state->m_modeSS_byte & 0x01 ) ? space->machine().region("maincpu")->base() + 0x1800 : space->machine().region("user1")->base();
799         state->m_modeSS_high_ram_enabled = 0;
823         m_bank_base[1] = m_extra_RAM->base();
824         m_bank_base[2] = ( m_modeSS_byte & 0x01 ) ? machine().region("maincpu")->base() + 0x1800 : machine().region("user1")->base();
825         m_modeSS_high_ram_enabled = 0;
800826         break;
801827      case 0x08:
802         state->m_bank_base[1] = state->m_extra_RAM->base() + 2 * 0x800;
803         state->m_bank_base[2] = state->m_extra_RAM->base();
804         state->m_modeSS_high_ram_enabled = 1;
828         m_bank_base[1] = m_extra_RAM->base() + 2 * 0x800;
829         m_bank_base[2] = m_extra_RAM->base();
830         m_modeSS_high_ram_enabled = 1;
805831         break;
806832      case 0x0C:
807         state->m_bank_base[1] = state->m_extra_RAM->base();
808         state->m_bank_base[2] = state->m_extra_RAM->base() + 2 * 0x800;
809         state->m_modeSS_high_ram_enabled = 1;
833         m_bank_base[1] = m_extra_RAM->base();
834         m_bank_base[2] = m_extra_RAM->base() + 2 * 0x800;
835         m_modeSS_high_ram_enabled = 1;
810836         break;
811837      case 0x10:
812         state->m_bank_base[1] = state->m_extra_RAM->base() + 2 * 0x800;
813         state->m_bank_base[2] = ( state->m_modeSS_byte & 0x01 ) ? space->machine().region("maincpu")->base() + 0x1800 : space->machine().region("user1")->base();
814         state->m_modeSS_high_ram_enabled = 0;
838         m_bank_base[1] = m_extra_RAM->base() + 2 * 0x800;
839         m_bank_base[2] = ( m_modeSS_byte & 0x01 ) ? machine().region("maincpu")->base() + 0x1800 : machine().region("user1")->base();
840         m_modeSS_high_ram_enabled = 0;
815841         break;
816842      case 0x14:
817         state->m_bank_base[1] = state->m_extra_RAM->base() + 0x800;
818         state->m_bank_base[2] = ( state->m_modeSS_byte & 0x01 ) ? space->machine().region("maincpu")->base() + 0x1800 : space->machine().region("user1")->base();
819         state->m_modeSS_high_ram_enabled = 0;
843         m_bank_base[1] = m_extra_RAM->base() + 0x800;
844         m_bank_base[2] = ( m_modeSS_byte & 0x01 ) ? machine().region("maincpu")->base() + 0x1800 : machine().region("user1")->base();
845         m_modeSS_high_ram_enabled = 0;
820846         break;
821847      case 0x18:
822         state->m_bank_base[1] = state->m_extra_RAM->base() + 2 * 0x800;
823         state->m_bank_base[2] = state->m_extra_RAM->base() + 0x800;
824         state->m_modeSS_high_ram_enabled = 1;
848         m_bank_base[1] = m_extra_RAM->base() + 2 * 0x800;
849         m_bank_base[2] = m_extra_RAM->base() + 0x800;
850         m_modeSS_high_ram_enabled = 1;
825851         break;
826852      case 0x1C:
827         state->m_bank_base[1] = state->m_extra_RAM->base() + 0x800;
828         state->m_bank_base[2] = state->m_extra_RAM->base() + 2 * 0x800;
829         state->m_modeSS_high_ram_enabled = 1;
853         m_bank_base[1] = m_extra_RAM->base() + 0x800;
854         m_bank_base[2] = m_extra_RAM->base() + 2 * 0x800;
855         m_modeSS_high_ram_enabled = 1;
830856         break;
831857      }
832      memory_set_bankptr(space->machine(), "bank1", state->m_bank_base[1] );
833      memory_set_bankptr(space->machine(), "bank2", state->m_bank_base[2] );
858      memory_set_bankptr(machine(), "bank1", m_bank_base[1] );
859      memory_set_bankptr(machine(), "bank2", m_bank_base[2] );
834860   }
835861   else if ( offset == 0xFF9 )
836862   {
837863      /* Cassette port read */
838      double tap_val = space->machine().device<cassette_image_device>(CASSETTE_TAG)->input();
839      //logerror("%04X: Cassette port read, tap_val = %f\n", cpu_get_pc(space->machine().device("maincpu")), tap_val);
864      double tap_val = machine().device<cassette_image_device>(CASSETTE_TAG)->input();
865      //logerror("%04X: Cassette port read, tap_val = %f\n", cpu_get_pc(machine().device("maincpu")), tap_val);
840866      if ( tap_val < 0 )
841867      {
842868         data = 0x00;
r14963r14964
849875   else
850876   {
851877      /* Possible RAM write */
852      if ( state->m_modeSS_write_enabled )
878      if ( m_modeSS_write_enabled )
853879      {
854         int diff = space->machine().device<cpu_device>("maincpu")->total_cycles() - state->m_modeSS_byte_started;
855         //logerror("%04X: offset = %04X, %d\n", cpu_get_pc(space->machine().device("maincpu")), offset, diff);
856         if ( diff - state->m_modeSS_diff_adjust == 5 )
880         int diff = machine().device<cpu_device>("maincpu")->total_cycles() - m_modeSS_byte_started;
881         //logerror("%04X: offset = %04X, %d\n", cpu_get_pc(machine().device("maincpu")), offset, diff);
882         if ( diff - m_modeSS_diff_adjust == 5 )
857883         {
858            //logerror("%04X: RAM write offset = %04X, data = %02X\n", cpu_get_pc(space->machine().device("maincpu")), offset, state->m_modeSS_byte );
884            //logerror("%04X: RAM write offset = %04X, data = %02X\n", cpu_get_pc(machine().device("maincpu")), offset, m_modeSS_byte );
859885            if ( offset & 0x800 )
860886            {
861               if ( state->m_modeSS_high_ram_enabled )
887               if ( m_modeSS_high_ram_enabled )
862888               {
863                  state->m_bank_base[2][offset & 0x7FF] = state->m_modeSS_byte;
864                  data = state->m_modeSS_byte;
889                  m_bank_base[2][offset & 0x7FF] = m_modeSS_byte;
890                  data = m_modeSS_byte;
865891               }
866892            }
867893            else
868894            {
869               state->m_bank_base[1][offset] = state->m_modeSS_byte;
870               data = state->m_modeSS_byte;
895               m_bank_base[1][offset] = m_modeSS_byte;
896               data = m_modeSS_byte;
871897            }
872898         }
873899         else if ( offset < 0x0100 )
874900         {
875            state->m_modeSS_byte = offset;
876            state->m_modeSS_byte_started = space->machine().device<cpu_device>("maincpu")->total_cycles();
901            m_modeSS_byte = offset;
902            m_modeSS_byte_started = machine().device<cpu_device>("maincpu")->total_cycles();
877903         }
878904         /* Check for dummy read from same address */
879905         if ( diff == 2 )
880906         {
881            state->m_modeSS_diff_adjust = 1;
907            m_modeSS_diff_adjust = 1;
882908         }
883909         else
884910         {
885            state->m_modeSS_diff_adjust = 0;
911            m_modeSS_diff_adjust = 0;
886912         }
887913      }
888914      else if ( offset < 0x0100 )
889915      {
890         state->m_modeSS_byte = offset;
891         state->m_modeSS_byte_started = space->machine().device<cpu_device>("maincpu")->total_cycles();
916         m_modeSS_byte = offset;
917         m_modeSS_byte_started = machine().device<cpu_device>("maincpu")->total_cycles();
892918      }
893919   }
894920   /* Because the mame core caches opcode data and doesn't perform reads like normal */
895921   /* we have to put in this little hack here to get Suicide Mission to work. */
896   if ( offset != 0xFF8 && ( cpu_get_pc(space->machine().device("maincpu")) & 0x1FFF ) == 0x1FF8 )
922   if ( offset != 0xFF8 && ( cpu_get_pc(machine().device("maincpu")) & 0x1FFF ) == 0x1FF8 )
897923   {
898924      modeSS_r( space, 0xFF8 );
899925   }
900926   return data;
901927}
902928
903INLINE void modeDPC_check_flag(a2600_state *state, UINT8 data_fetcher)
929void a2600_state::modeDPC_check_flag(UINT8 data_fetcher)
904930{
905931   /* Set flag when low counter equals top */
906   if ( state->m_dpc.df[data_fetcher].low == state->m_dpc.df[data_fetcher].top )
932   if ( m_dpc.df[data_fetcher].low == m_dpc.df[data_fetcher].top )
907933   {
908      state->m_dpc.df[data_fetcher].flag = 1;
934      m_dpc.df[data_fetcher].flag = 1;
909935   }
910936   /* Reset flag when low counter equals bottom */
911   if ( state->m_dpc.df[data_fetcher].low == state->m_dpc.df[data_fetcher].bottom )
937   if ( m_dpc.df[data_fetcher].low == m_dpc.df[data_fetcher].bottom )
912938   {
913      state->m_dpc.df[data_fetcher].flag = 0;
939      m_dpc.df[data_fetcher].flag = 0;
914940   }
915941}
916942
917INLINE void modeDPC_decrement_counter(a2600_state *state, UINT8 data_fetcher)
943void a2600_state::modeDPC_decrement_counter(UINT8 data_fetcher)
918944{
919   state->m_dpc.df[data_fetcher].low -= 1;
920   if ( state->m_dpc.df[data_fetcher].low == 0xFF )
945   m_dpc.df[data_fetcher].low -= 1;
946   if ( m_dpc.df[data_fetcher].low == 0xFF )
921947   {
922      state->m_dpc.df[data_fetcher].high -= 1;
923      if ( data_fetcher > 4 && state->m_dpc.df[data_fetcher].music_mode )
948      m_dpc.df[data_fetcher].high -= 1;
949      if ( data_fetcher > 4 && m_dpc.df[data_fetcher].music_mode )
924950      {
925         state->m_dpc.df[data_fetcher].low = state->m_dpc.df[data_fetcher].top;
951         m_dpc.df[data_fetcher].low = m_dpc.df[data_fetcher].top;
926952      }
927953   }
928954
929   modeDPC_check_flag( state, data_fetcher );
955   modeDPC_check_flag(data_fetcher );
930956}
931957
932958static TIMER_CALLBACK(modeDPC_timer_callback)
r14963r14964
937963   {
938964      if ( state->m_dpc.df[data_fetcher].osc_clk )
939965      {
940         modeDPC_decrement_counter( state, data_fetcher );
966         state->modeDPC_decrement_counter(data_fetcher );
941967      }
942968   }
943969}
r14963r14964
952978   return address;
953979}
954980
955static READ8_HANDLER(modeDPC_r)
981READ8_MEMBER(a2600_state::modeDPC_r)
956982{
957   a2600_state *state = space->machine().driver_data<a2600_state>();
958983   static const UINT8 dpc_amplitude[8] = { 0x00, 0x04, 0x05, 0x09, 0x06, 0x0A, 0x0B, 0x0F };
959984   UINT8   data_fetcher = offset & 0x07;
960985   UINT8   data = 0xFF;
961986
962   logerror("%04X: Read from DPC offset $%02X\n", cpu_get_pc(space->machine().device("maincpu")), offset);
987   logerror("%04X: Read from DPC offset $%02X\n", cpu_get_pc(machine().device("maincpu")), offset);
963988   if ( offset < 0x08 )
964989   {
965990      switch( offset & 0x06 )
966991      {
967992      case 0x00:      /* Random number generator */
968993      case 0x02:
969         return state->m_dpc.shift_reg;
994         return m_dpc.shift_reg;
970995      case 0x04:      /* Sound value, MOVAMT value AND'd with Draw Line Carry; with Draw Line Add */
971         state->m_dpc.latch_62 = state->m_dpc.latch_64;
996         m_dpc.latch_62 = m_dpc.latch_64;
972997      case 0x06:      /* Sound value, MOVAMT value AND'd with Draw Line Carry; without Draw Line Add */
973         state->m_dpc.latch_64 = state->m_dpc.latch_62 + state->m_dpc.df[4].top;
974         state->m_dpc.dlc = ( state->m_dpc.latch_62 + state->m_dpc.df[4].top > 0xFF ) ? 1 : 0;
998         m_dpc.latch_64 = m_dpc.latch_62 + m_dpc.df[4].top;
999         m_dpc.dlc = ( m_dpc.latch_62 + m_dpc.df[4].top > 0xFF ) ? 1 : 0;
9751000         data = 0;
976         if ( state->m_dpc.df[5].music_mode && state->m_dpc.df[5].flag )
1001         if ( m_dpc.df[5].music_mode && m_dpc.df[5].flag )
9771002         {
9781003            data |= 0x01;
9791004         }
980         if ( state->m_dpc.df[6].music_mode && state->m_dpc.df[6].flag )
1005         if ( m_dpc.df[6].music_mode && m_dpc.df[6].flag )
9811006         {
9821007            data |= 0x02;
9831008         }
984         if ( state->m_dpc.df[7].music_mode && state->m_dpc.df[7].flag )
1009         if ( m_dpc.df[7].music_mode && m_dpc.df[7].flag )
9851010         {
9861011            data |= 0x04;
9871012         }
988         return ( state->m_dpc.dlc ? state->m_dpc.movamt & 0xF0 : 0 ) | dpc_amplitude[data];
1013         return ( m_dpc.dlc ? m_dpc.movamt & 0xF0 : 0 ) | dpc_amplitude[data];
9891014      }
9901015   }
9911016   else
9921017   {
993      UINT8   display_data = space->machine().region("user1")->base()[0x2000 + ( ~ ( ( state->m_dpc.df[data_fetcher].low | ( state->m_dpc.df[data_fetcher].high << 8 ) ) ) & 0x7FF ) ];
1018      UINT8   display_data = machine().region("user1")->base()[0x2000 + ( ~ ( ( m_dpc.df[data_fetcher].low | ( m_dpc.df[data_fetcher].high << 8 ) ) ) & 0x7FF ) ];
9941019
9951020      switch( offset & 0x38 )
9961021      {
r14963r14964
9981023         data = display_data;
9991024         break;
10001025      case 0x10:         /* display data AND'd w/flag */
1001         data = state->m_dpc.df[data_fetcher].flag ? display_data : 0x00;
1026         data = m_dpc.df[data_fetcher].flag ? display_data : 0x00;
10021027         break;
10031028      case 0x18:         /* display data AND'd w/flag, nibbles swapped */
1004         data = state->m_dpc.df[data_fetcher].flag ? BITSWAP8(display_data,3,2,1,0,7,6,5,4) : 0x00;
1029         data = m_dpc.df[data_fetcher].flag ? BITSWAP8(display_data,3,2,1,0,7,6,5,4) : 0x00;
10051030         break;
10061031      case 0x20:         /* display data AND'd w/flag, byte reversed */
1007         data = state->m_dpc.df[data_fetcher].flag ? BITSWAP8(display_data,0,1,2,3,4,5,6,7) : 0x00;
1032         data = m_dpc.df[data_fetcher].flag ? BITSWAP8(display_data,0,1,2,3,4,5,6,7) : 0x00;
10081033         break;
10091034      case 0x28:         /* display data AND'd w/flag, rotated right */
1010         data = state->m_dpc.df[data_fetcher].flag ? ( display_data >> 1 ) : 0x00;
1035         data = m_dpc.df[data_fetcher].flag ? ( display_data >> 1 ) : 0x00;
10111036         break;
10121037      case 0x30:         /* display data AND'd w/flag, rotated left */
1013         data = state->m_dpc.df[data_fetcher].flag ? ( display_data << 1 ) : 0x00;
1038         data = m_dpc.df[data_fetcher].flag ? ( display_data << 1 ) : 0x00;
10141039         break;
10151040      case 0x38:         /* flag */
1016         data = state->m_dpc.df[data_fetcher].flag ? 0xFF : 0x00;
1041         data = m_dpc.df[data_fetcher].flag ? 0xFF : 0x00;
10171042         break;
10181043      }
10191044
1020      if ( data_fetcher < 5 || ! state->m_dpc.df[data_fetcher].osc_clk )
1045      if ( data_fetcher < 5 || ! m_dpc.df[data_fetcher].osc_clk )
10211046      {
1022         modeDPC_decrement_counter( state, data_fetcher );
1047         modeDPC_decrement_counter(data_fetcher );
10231048      }
10241049   }
10251050   return data;
10261051}
10271052
1028static WRITE8_HANDLER(modeDPC_w)
1053WRITE8_MEMBER(a2600_state::modeDPC_w)
10291054{
1030   a2600_state *state = space->machine().driver_data<a2600_state>();
10311055   UINT8   data_fetcher = offset & 0x07;
10321056
10331057   switch( offset & 0x38 )
10341058   {
10351059   case 0x00:         /* Top count */
1036      state->m_dpc.df[data_fetcher].top = data;
1037      state->m_dpc.df[data_fetcher].flag = 0;
1038      modeDPC_check_flag( state, data_fetcher );
1060      m_dpc.df[data_fetcher].top = data;
1061      m_dpc.df[data_fetcher].flag = 0;
1062      modeDPC_check_flag(data_fetcher );
10391063      break;
10401064   case 0x08:         /* Bottom count */
1041      state->m_dpc.df[data_fetcher].bottom = data;
1042      modeDPC_check_flag( state, data_fetcher );
1065      m_dpc.df[data_fetcher].bottom = data;
1066      modeDPC_check_flag(data_fetcher );
10431067      break;
10441068   case 0x10:         /* Counter low */
1045      state->m_dpc.df[data_fetcher].low = data;
1069      m_dpc.df[data_fetcher].low = data;
10461070      if ( data_fetcher == 4 )
10471071      {
1048         state->m_dpc.latch_64 = data;
1072         m_dpc.latch_64 = data;
10491073      }
1050      if ( data_fetcher > 4 && state->m_dpc.df[data_fetcher].music_mode )
1074      if ( data_fetcher > 4 && m_dpc.df[data_fetcher].music_mode )
10511075      {
1052         state->m_dpc.df[data_fetcher].low = state->m_dpc.df[data_fetcher].top;
1076         m_dpc.df[data_fetcher].low = m_dpc.df[data_fetcher].top;
10531077      }
1054      modeDPC_check_flag( state, data_fetcher );
1078      modeDPC_check_flag(data_fetcher );
10551079      break;
10561080   case 0x18:         /* Counter high */
1057      state->m_dpc.df[data_fetcher].high = data;
1058      state->m_dpc.df[data_fetcher].music_mode = data & 0x10;
1059      state->m_dpc.df[data_fetcher].osc_clk = data & 0x20;
1060      if ( data_fetcher > 4 && state->m_dpc.df[data_fetcher].music_mode && state->m_dpc.df[data_fetcher].low == 0xFF )
1081      m_dpc.df[data_fetcher].high = data;
1082      m_dpc.df[data_fetcher].music_mode = data & 0x10;
1083      m_dpc.df[data_fetcher].osc_clk = data & 0x20;
1084      if ( data_fetcher > 4 && m_dpc.df[data_fetcher].music_mode && m_dpc.df[data_fetcher].low == 0xFF )
10611085      {
1062         state->m_dpc.df[data_fetcher].low = state->m_dpc.df[data_fetcher].top;
1063         modeDPC_check_flag( state, data_fetcher );
1086         m_dpc.df[data_fetcher].low = m_dpc.df[data_fetcher].top;
1087         modeDPC_check_flag(data_fetcher );
10641088      }
10651089      break;
10661090   case 0x20:         /* Draw line movement value / MOVAMT */
1067      state->m_dpc.movamt = data;
1091      m_dpc.movamt = data;
10681092      break;
10691093   case 0x28:         /* Not used */
1070      logerror("%04X: Write to unused DPC register $%02X, data $%02X\n", cpu_get_pc(space->machine().device("maincpu")), offset, data);
1094      logerror("%04X: Write to unused DPC register $%02X, data $%02X\n", cpu_get_pc(machine().device("maincpu")), offset, data);
10711095      break;
10721096   case 0x30:         /* Random number generator reset */
1073      state->m_dpc.shift_reg = 0;
1097      m_dpc.shift_reg = 0;
10741098      break;
10751099   case 0x38:         /* Not used */
1076      logerror("%04X: Write to unused DPC register $%02X, data $%02X\n", cpu_get_pc(space->machine().device("maincpu")), offset, data);
1100      logerror("%04X: Write to unused DPC register $%02X, data $%02X\n", cpu_get_pc(machine().device("maincpu")), offset, data);
10771101      break;
10781102   }
10791103}
r14963r14964
11221146   state->m_FE_old_opbase_handler = space->set_direct_update_handler(direct_update_delegate(FUNC(a2600_state::modeFE_opbase_handler), state));
11231147}
11241148
1125static READ8_HANDLER(modeFE_switch_r)
1149READ8_MEMBER(a2600_state::modeFE_switch_r)
11261150{
1127   modeFE_switch(space->machine(),offset, 0 );
1128   return space->read_byte(0xFE );
1151   modeFE_switch(machine(),offset, 0 );
1152   return space.read_byte(0xFE );
11291153}
11301154
1131static WRITE8_HANDLER(modeFE_switch_w)
1155WRITE8_MEMBER(a2600_state::modeFE_switch_w)
11321156{
1133   space->write_byte(0xFE, data );
1134   modeFE_switch(space->machine(),offset, 0 );
1157   space.write_byte(0xFE, data );
1158   modeFE_switch(machine(),offset, 0 );
11351159}
11361160
1137static  READ8_HANDLER(current_bank_r)
1161READ8_MEMBER(a2600_state::current_bank_r)
11381162{
1139   a2600_state *state = space->machine().driver_data<a2600_state>();
1140   return state->m_current_bank;
1163   return m_current_bank;
11411164}
11421165
11431166static ADDRESS_MAP_START(a2600_mem, AS_PROGRAM, 8, a2600_state )
11441167   ADDRESS_MAP_GLOBAL_MASK(0x1fff)
1145   AM_RANGE(0x0000, 0x007F) AM_MIRROR(0x0F00) AM_READWRITE_LEGACY(tia_r, tia_w)
1168   AM_RANGE(0x0000, 0x007F) AM_MIRROR(0x0F00) AM_DEVREADWRITE("tia_video", tia_video_device, read, write)
11461169   AM_RANGE(0x0080, 0x00FF) AM_MIRROR(0x0D00) AM_RAM AM_SHARE("riot_ram")
11471170   AM_RANGE(0x0280, 0x029F) AM_MIRROR(0x0D00) AM_DEVREADWRITE_LEGACY("riot", riot6532_r, riot6532_w)
11481171   AM_RANGE(0x1000, 0x1FFF)                   AM_ROMBANK("bank1")
r14963r14964
12721295   }
12731296}
12741297
1275static READ16_HANDLER(a2600_read_input_port)
1298READ16_MEMBER(a2600_state::a2600_read_input_port)
12761299{
1277   a2600_state *state = space->machine().driver_data<a2600_state>();
12781300   int i;
12791301
12801302   switch( offset )
12811303   {
12821304   case 0:   /* Left controller port PIN 5 */
1283      switch ( input_port_read(space->machine(), "CONTROLLERS") / CATEGORY_SELECT )
1305      switch ( input_port_read(machine(), "CONTROLLERS") / CATEGORY_SELECT )
12841306      {
12851307      case 0x00:   /* Joystick */
12861308         return TIA_INPUT_PORT_ALWAYS_OFF;
12871309      case 0x01:   /* Paddle */
1288         return input_port_read(space->machine(), "PADDLE1");
1310         return input_port_read(machine(), "PADDLE1");
12891311      case 0x03:   /* Keypad */
12901312         for ( i = 0; i < 4; i++ )
12911313         {
1292            if ( ! ( ( state->m_keypad_left_column >> i ) & 0x01 ) )
1314            if ( ! ( ( m_keypad_left_column >> i ) & 0x01 ) )
12931315            {
1294               if ( ( input_port_read(space->machine(), "KEYPAD_L") >> 3*i ) & 0x01 )
1316               if ( ( input_port_read(machine(), "KEYPAD_L") >> 3*i ) & 0x01 )
12951317               {
12961318                  return TIA_INPUT_PORT_ALWAYS_ON;
12971319               }
r14963r14964
13031325         }
13041326         return TIA_INPUT_PORT_ALWAYS_ON;
13051327      case 0x05:   /* Boostergrip joystick */
1306         return ( input_port_read(space->machine(), "BUTTONS_L") & 0x40 ) ? TIA_INPUT_PORT_ALWAYS_OFF : TIA_INPUT_PORT_ALWAYS_ON;
1328         return ( input_port_read(machine(), "BUTTONS_L") & 0x40 ) ? TIA_INPUT_PORT_ALWAYS_OFF : TIA_INPUT_PORT_ALWAYS_ON;
13071329      default:
13081330         return TIA_INPUT_PORT_ALWAYS_OFF;
13091331      }
13101332      break;
13111333   case 1:   /* Right controller port PIN 5 */
1312      switch ( input_port_read(space->machine(), "CONTROLLERS") / CATEGORY_SELECT )
1334      switch ( input_port_read(machine(), "CONTROLLERS") / CATEGORY_SELECT )
13131335      {
13141336      case 0x00:   /* Joystick */
13151337         return TIA_INPUT_PORT_ALWAYS_OFF;
13161338      case 0x01:   /* Paddle */
1317         return input_port_read(space->machine(), "PADDLE3");
1339         return input_port_read(machine(), "PADDLE3");
13181340      case 0x03:   /* Keypad */
13191341         for ( i = 0; i < 4; i++ )
13201342         {
1321            if ( ! ( ( state->m_keypad_left_column >> i ) & 0x01 ) )
1343            if ( ! ( ( m_keypad_left_column >> i ) & 0x01 ) )
13221344            {
1323               if ( ( input_port_read(space->machine(), "KEYPAD_L") >> 3*i ) & 0x02 )
1345               if ( ( input_port_read(machine(), "KEYPAD_L") >> 3*i ) & 0x02 )
13241346               {
13251347                  return TIA_INPUT_PORT_ALWAYS_ON;
13261348               }
r14963r14964
13321354         }
13331355         return TIA_INPUT_PORT_ALWAYS_ON;
13341356      case 0x05:   /* Joystick w/Boostergrip */
1335         return ( input_port_read(space->machine(), "BUTTONS_L") & 0x20 ) ? TIA_INPUT_PORT_ALWAYS_OFF : TIA_INPUT_PORT_ALWAYS_ON;
1357         return ( input_port_read(machine(), "BUTTONS_L") & 0x20 ) ? TIA_INPUT_PORT_ALWAYS_OFF : TIA_INPUT_PORT_ALWAYS_ON;
13361358      default:
13371359         return TIA_INPUT_PORT_ALWAYS_OFF;
13381360      }
13391361      break;
13401362   case 2:   /* Left controller port PIN 9 */
1341      switch ( input_port_read(space->machine(), "CONTROLLERS") % CATEGORY_SELECT )
1363      switch ( input_port_read(machine(), "CONTROLLERS") % CATEGORY_SELECT )
13421364      {
13431365      case 0x00:   /* Joystick */
13441366         return TIA_INPUT_PORT_ALWAYS_OFF;
13451367      case 0x01:   /* Paddle */
1346         return input_port_read(space->machine(), "PADDLE2");
1368         return input_port_read(machine(), "PADDLE2");
13471369      case 0x03:   /* Keypad */
13481370         for ( i = 0; i < 4; i++ )
13491371         {
1350            if ( ! ( ( state->m_keypad_right_column >> i ) & 0x01 ) )
1372            if ( ! ( ( m_keypad_right_column >> i ) & 0x01 ) )
13511373            {
1352               if ( ( input_port_read(space->machine(), "KEYPAD_R") >> 3*i ) & 0x01 )
1374               if ( ( input_port_read(machine(), "KEYPAD_R") >> 3*i ) & 0x01 )
13531375               {
13541376                  return TIA_INPUT_PORT_ALWAYS_ON;
13551377               }
r14963r14964
13611383         }
13621384         return TIA_INPUT_PORT_ALWAYS_ON;
13631385      case 0x05:   /* Joystick w/Boostergrip */
1364         return ( input_port_read(space->machine(), "BUTTONS_R") & 0x40 ) ? TIA_INPUT_PORT_ALWAYS_OFF : TIA_INPUT_PORT_ALWAYS_ON;
1386         return ( input_port_read(machine(), "BUTTONS_R") & 0x40 ) ? TIA_INPUT_PORT_ALWAYS_OFF : TIA_INPUT_PORT_ALWAYS_ON;
13651387      default:
13661388         return TIA_INPUT_PORT_ALWAYS_OFF;
13671389      }
13681390      break;
13691391   case 3:   /* Right controller port PIN 9 */
1370      switch ( input_port_read(space->machine(), "CONTROLLERS") % CATEGORY_SELECT )
1392      switch ( input_port_read(machine(), "CONTROLLERS") % CATEGORY_SELECT )
13711393      {
13721394      case 0x00:   /* Joystick */
13731395         return TIA_INPUT_PORT_ALWAYS_OFF;
13741396      case 0x01:   /* Paddle */
1375         return input_port_read(space->machine(), "PADDLE4");
1397         return input_port_read(machine(), "PADDLE4");
13761398      case 0x03:   /* Keypad */
13771399         for ( i = 0; i < 4; i++ )
13781400         {
1379            if ( ! ( ( state->m_keypad_right_column >> i ) & 0x01 ) )
1401            if ( ! ( ( m_keypad_right_column >> i ) & 0x01 ) )
13801402            {
1381               if ( ( input_port_read(space->machine(), "KEYPAD_R") >> 3*i ) & 0x02 )
1403               if ( ( input_port_read(machine(), "KEYPAD_R") >> 3*i ) & 0x02 )
13821404               {
13831405                  return TIA_INPUT_PORT_ALWAYS_ON;
13841406               }
r14963r14964
13901412         }
13911413         return TIA_INPUT_PORT_ALWAYS_ON;
13921414      case 0x05:   /* Joystick w/Boostergrip */
1393         return ( input_port_read(space->machine(), "BUTTONS_R") & 0x20 ) ? TIA_INPUT_PORT_ALWAYS_OFF : TIA_INPUT_PORT_ALWAYS_ON;
1415         return ( input_port_read(machine(), "BUTTONS_R") & 0x20 ) ? TIA_INPUT_PORT_ALWAYS_OFF : TIA_INPUT_PORT_ALWAYS_ON;
13941416      default:
13951417         return TIA_INPUT_PORT_ALWAYS_OFF;
13961418      }
13971419      break;
13981420   case 4:   /* Left controller port PIN 6 */
1399      switch ( input_port_read(space->machine(), "CONTROLLERS") / CATEGORY_SELECT )
1421      switch ( input_port_read(machine(), "CONTROLLERS") / CATEGORY_SELECT )
14001422      {
14011423      case 0x00:   /* Joystick */
14021424      case 0x05:   /* Joystick w/Boostergrip */
1403         return input_port_read(space->machine(), "BUTTONS_L");
1425         return input_port_read(machine(), "BUTTONS_L");
14041426      case 0x01:   /* Paddle */
14051427         return 0xff;
14061428      case 0x02:   /* Driving */
1407         return input_port_read(space->machine(), "BUTTONS_L") << 3;
1429         return input_port_read(machine(), "BUTTONS_L") << 3;
14081430      case 0x03:   /* Keypad */
14091431         for ( i = 0; i < 4; i++ )
14101432         {
1411            if ( ! ( ( state->m_keypad_left_column >> i ) & 0x01 ) )
1433            if ( ! ( ( m_keypad_left_column >> i ) & 0x01 ) )
14121434            {
1413               if ( ( input_port_read(space->machine(), "KEYPAD_L") >> 3*i ) & 0x04 )
1435               if ( ( input_port_read(machine(), "KEYPAD_L") >> 3*i ) & 0x04 )
14141436               {
14151437                  return 0xff;
14161438               }
r14963r14964
14221444         }
14231445         return 0xff;
14241446      case 0x06:   /* Trakball CX-22 */
1425         return input_port_read(space->machine(), "BUTTONS_L") << 4;
1447         return input_port_read(machine(), "BUTTONS_L") << 4;
14261448      default:
14271449         return 0xff;
14281450      }
14291451      break;
14301452   case 5:   /* Right controller port PIN 6 */
1431      switch ( input_port_read(space->machine(), "CONTROLLERS") % CATEGORY_SELECT )
1453      switch ( input_port_read(machine(), "CONTROLLERS") % CATEGORY_SELECT )
14321454      {
14331455      case 0x00:   /* Joystick */
14341456      case 0x05:   /* Joystick w/Boostergrip */
1435         return input_port_read(space->machine(), "BUTTONS_R");
1457         return input_port_read(machine(), "BUTTONS_R");
14361458      case 0x01:   /* Paddle */
14371459         return 0xff;
14381460      case 0x02:   /* Driving */
1439         return input_port_read(space->machine(), "BUTTONS_R") << 3;
1461         return input_port_read(machine(), "BUTTONS_R") << 3;
14401462      case 0x03:   /* Keypad */
14411463         for ( i = 0; i < 4; i++ )
14421464         {
1443            if ( ! ( ( state->m_keypad_right_column >> i ) & 0x01 ) )
1465            if ( ! ( ( m_keypad_right_column >> i ) & 0x01 ) )
14441466            {
1445               if ( ( input_port_read(space->machine(), "KEYPAD_R") >> 3*i ) & 0x04 )
1467               if ( ( input_port_read(machine(), "KEYPAD_R") >> 3*i ) & 0x04 )
14461468               {
14471469                  return 0xff;
14481470               }
r14963r14964
14541476         }
14551477         return 0xff;
14561478      case 0x06:   /* Trakball CX-22 */
1457         return input_port_read(space->machine(), "BUTTONS_R") << 4;
1479         return input_port_read(machine(), "BUTTONS_R") << 4;
14581480      default:
14591481         return 0xff;
14601482      }
r14963r14964
14711493   Q-Bert's Qubes (NTSC,F6) at 0x1594
14721494   Berzerk at 0xF093.
14731495*/
1474static READ8_HANDLER(a2600_get_databus_contents)
1496READ8_MEMBER(a2600_state::a2600_get_databus_contents)
14751497{
14761498   UINT16   last_address, prev_address;
14771499   UINT8   last_byte, prev_byte;
14781500
1479   last_address = cpu_get_pc(space->machine().device("maincpu")) - 1;
1501   last_address = cpu_get_pc(machine().device("maincpu")) - 1;
14801502   if ( ! ( last_address & 0x1080 ) )
14811503   {
14821504      return offset;
14831505   }
1484   last_byte = space->read_byte(last_address );
1506   last_byte = space.read_byte(last_address );
14851507   if ( last_byte < 0x80 || last_byte == 0xFF )
14861508   {
14871509      return last_byte;
r14963r14964
14911513   {
14921514      return last_byte;
14931515   }
1494   prev_byte = space->read_byte(prev_address );
1516   prev_byte = space.read_byte(prev_address );
14951517   if ( prev_byte == 0xB1 )
14961518   {   /* LDA (XX),Y */
1497      return space->read_byte(last_byte + 1 );
1519      return space.read_byte(last_byte + 1 );
14981520   }
14991521   return last_byte;
15001522}
r14963r14964
15081530};
15091531#endif
15101532
1511static WRITE16_HANDLER( a2600_tia_vsync_callback )
1533WRITE16_MEMBER(a2600_state::a2600_tia_vsync_callback)
15121534{
1513   a2600_state *state = space->machine().driver_data<a2600_state>();
15141535   int i;
15151536
15161537   for ( i = 0; i < ARRAY_LENGTH(supported_screen_heights); i++ )
15171538   {
15181539      if ( data >= supported_screen_heights[i] - 3 && data <= supported_screen_heights[i] + 3 )
15191540      {
1520         if ( supported_screen_heights[i] != state->m_current_screen_height )
1541         if ( supported_screen_heights[i] != m_current_screen_height )
15211542         {
1522            state->m_current_screen_height = supported_screen_heights[i];
1523//              machine.primary_screen->configure(228, state->m_current_screen_height, &visarea[i], HZ_TO_ATTOSECONDS( MASTER_CLOCK_NTSC ) * 228 * state->m_current_screen_height );
1543            m_current_screen_height = supported_screen_heights[i];
1544//              machine.primary_screen->configure(228, m_current_screen_height, &visarea[i], HZ_TO_ATTOSECONDS( MASTER_CLOCK_NTSC ) * 228 * m_current_screen_height );
15241545         }
15251546      }
15261547   }
15271548}
15281549
1529static WRITE16_HANDLER( a2600_tia_vsync_callback_pal )
1550WRITE16_MEMBER(a2600_state::a2600_tia_vsync_callback_pal)
15301551{
1531   a2600_state *state = space->machine().driver_data<a2600_state>();
15321552   int i;
15331553
15341554   for ( i = 0; i < ARRAY_LENGTH(supported_screen_heights); i++ )
15351555   {
15361556      if ( data >= supported_screen_heights[i] - 3 && data <= supported_screen_heights[i] + 3 )
15371557      {
1538         if ( supported_screen_heights[i] != state->m_current_screen_height )
1558         if ( supported_screen_heights[i] != m_current_screen_height )
15391559         {
1540            state->m_current_screen_height = supported_screen_heights[i];
1541//              machine.primary_screen->configure(228, state->m_current_screen_height, &visarea[i], HZ_TO_ATTOSECONDS( MASTER_CLOCK_PAL ) * 228 * state->m_current_screen_height );
1560            m_current_screen_height = supported_screen_heights[i];
1561//              machine.primary_screen->configure(228, m_current_screen_height, &visarea[i], HZ_TO_ATTOSECONDS( MASTER_CLOCK_PAL ) * 228 * m_current_screen_height );
15421562         }
15431563      }
15441564   }
15451565}
15461566
1547static const struct tia_interface tia_interface =
1567static const tia_interface a2600_tia_interface =
15481568{
1549   a2600_read_input_port,
1550   a2600_get_databus_contents,
1551   a2600_tia_vsync_callback
1569   DEVCB_NULL,//DEVCB_DRIVER_MEMBER(a2600_state, a2600_read_input_port),
1570   DEVCB_DRIVER_MEMBER(a2600_state, a2600_get_databus_contents),
1571   DEVCB_NULL,//DEVCB_DRIVER_MEMBER(a2600_state, a2600_tia_vsync_callback)
15521572};
15531573
1554static const struct tia_interface tia_interface_pal =
1574static const tia_interface a2600_tia_interface_pal =
15551575{
1556   a2600_read_input_port,
1557   a2600_get_databus_contents,
1558   a2600_tia_vsync_callback_pal
1576   DEVCB_NULL,//DEVCB_DRIVER_MEMBER(a2600_state, a2600_read_input_port),
1577   DEVCB_DRIVER_MEMBER(a2600_state, a2600_get_databus_contents),
1578   DEVCB_NULL,//DEVCB_DRIVER_MEMBER(a2600_state, a2600_tia_vsync_callback_pal)
15591579};
15601580
15611581
r14963r14964
15731593static MACHINE_START( a2600 )
15741594{
15751595   common_init(machine);
1576   tia_init( machine, &tia_interface );
15771596}
15781597
15791598static MACHINE_START( a2600p )
15801599{
15811600   common_init(machine);
1582   tia_init( machine, &tia_interface_pal );
15831601}
15841602
15851603#ifdef UNUSED_FUNCTIONS
r14963r14964
18901908
18911909   if (state->m_banking_mode == modeDC)
18921910   {
1893      space->install_legacy_read_handler(0x1fec, 0x1fec, FUNC(current_bank_r));
1911      space->install_read_handler(0x1fec, 0x1fec, read8_delegate(FUNC(a2600_state::current_bank_r),state));
18941912   }
18951913
18961914   /* set up bank switch registers */
r14963r14964
18981916   switch (state->m_banking_mode)
18991917   {
19001918   case modeF8:
1901      space->install_legacy_write_handler(0x1ff8, 0x1ff9, FUNC(modeF8_switch_w));
1902      space->install_legacy_read_handler(0x1ff8, 0x1ff9, FUNC(modeF8_switch_r));
1919      space->install_write_handler(0x1ff8, 0x1ff9, write8_delegate(FUNC(a2600_state::modeF8_switch_w),state));
1920      space->install_read_handler(0x1ff8, 0x1ff9, read8_delegate(FUNC(a2600_state::modeF8_switch_r),state));
19031921      break;
19041922
19051923   case modeFA:
1906      space->install_legacy_write_handler(0x1ff8, 0x1ffa, FUNC(modeFA_switch_w));
1907      space->install_legacy_read_handler(0x1ff8, 0x1ffa, FUNC(modeFA_switch_r));
1924      space->install_write_handler(0x1ff8, 0x1ffa, write8_delegate(FUNC(a2600_state::modeFA_switch_w),state));
1925      space->install_read_handler(0x1ff8, 0x1ffa, read8_delegate(FUNC(a2600_state::modeFA_switch_r),state));
19081926      break;
19091927
19101928   case modeF6:
1911      space->install_legacy_write_handler(0x1ff6, 0x1ff9, FUNC(modeF6_switch_w));
1912      space->install_legacy_read_handler(0x1ff6, 0x1ff9, FUNC(modeF6_switch_r));
1929      space->install_write_handler(0x1ff6, 0x1ff9, write8_delegate(FUNC(a2600_state::modeF6_switch_w),state));
1930      space->install_read_handler(0x1ff6, 0x1ff9, read8_delegate(FUNC(a2600_state::modeF6_switch_r),state));
19131931      space->set_direct_update_handler(direct_update_delegate(FUNC(a2600_state::modeF6_opbase), state));
19141932      break;
19151933
19161934   case modeF4:
1917      space->install_legacy_write_handler(0x1ff4, 0x1ffb, FUNC(modeF4_switch_w));
1918      space->install_legacy_read_handler(0x1ff4, 0x1ffb, FUNC(modeF4_switch_r));
1935      space->install_write_handler(0x1ff4, 0x1ffb, write8_delegate(FUNC(a2600_state::modeF4_switch_w),state));
1936      space->install_read_handler(0x1ff4, 0x1ffb, read8_delegate(FUNC(a2600_state::modeF4_switch_r),state));
19191937      break;
19201938
19211939   case modeE0:
1922      space->install_legacy_write_handler(0x1fe0, 0x1ff8, FUNC(modeE0_switch_w));
1923      space->install_legacy_read_handler(0x1fe0, 0x1ff8, FUNC(modeE0_switch_r));
1940      space->install_write_handler(0x1fe0, 0x1ff8, write8_delegate(FUNC(a2600_state::modeE0_switch_w),state));
1941      space->install_read_handler(0x1fe0, 0x1ff8, read8_delegate(FUNC(a2600_state::modeE0_switch_r),state));
19241942      break;
19251943
19261944   case mode3F:
1927      space->install_legacy_write_handler(0x00, 0x3f, FUNC(mode3F_switch_w));
1945      space->install_write_handler(0x00, 0x3f, write8_delegate(FUNC(a2600_state::mode3F_switch_w),state));
19281946      break;
19291947
19301948   case modeUA:
1931      space->install_legacy_write_handler(0x200, 0x27f, FUNC(modeUA_switch_w));
1932      space->install_legacy_read_handler(0x200, 0x27f, FUNC(modeUA_switch_r));
1949      space->install_write_handler(0x200, 0x27f, write8_delegate(FUNC(a2600_state::modeUA_switch_w),state));
1950      space->install_read_handler(0x200, 0x27f, read8_delegate(FUNC(a2600_state::modeUA_switch_r),state));
19331951      break;
19341952
19351953   case modeE7:
1936      space->install_legacy_write_handler(0x1fe0, 0x1fe7, FUNC(modeE7_switch_w));
1937      space->install_legacy_read_handler(0x1fe0, 0x1fe7, FUNC(modeE7_switch_r));
1938      space->install_legacy_write_handler(0x1fe8, 0x1feb, FUNC(modeE7_RAM_switch_w));
1939      space->install_legacy_read_handler(0x1fe8, 0x1feb, FUNC(modeE7_RAM_switch_r));
1954      space->install_write_handler(0x1fe0, 0x1fe7, write8_delegate(FUNC(a2600_state::modeE7_switch_w),state));
1955      space->install_read_handler(0x1fe0, 0x1fe7, read8_delegate(FUNC(a2600_state::modeE7_switch_r),state));
1956      space->install_write_handler(0x1fe8, 0x1feb, write8_delegate(FUNC(a2600_state::modeE7_RAM_switch_w),state));
1957      space->install_read_handler(0x1fe8, 0x1feb, read8_delegate(FUNC(a2600_state::modeE7_RAM_switch_r),state));
19401958      space->install_readwrite_bank(0x1800, 0x18ff, "bank9");
19411959      memory_set_bankptr(machine, "bank9", state->m_extra_RAM->base() + 4 * 256 );
19421960      break;
19431961
19441962   case modeDC:
1945      space->install_legacy_write_handler(0x1ff0, 0x1ff0, FUNC(modeDC_switch_w));
1946      space->install_legacy_read_handler(0x1ff0, 0x1ff0, FUNC(modeDC_switch_r));
1963      space->install_write_handler(0x1ff0, 0x1ff0, write8_delegate(FUNC(a2600_state::modeDC_switch_w),state));
1964      space->install_read_handler(0x1ff0, 0x1ff0, read8_delegate(FUNC(a2600_state::modeDC_switch_r),state));
19471965      break;
19481966
19491967   case modeFE:
1950      space->install_legacy_write_handler(0x01fe, 0x01fe, FUNC(modeFE_switch_w));
1951      space->install_legacy_read_handler(0x01fe, 0x01fe, FUNC(modeFE_switch_r));
1968      space->install_write_handler(0x01fe, 0x01fe, write8_delegate(FUNC(a2600_state::modeFE_switch_w),state));
1969      space->install_read_handler(0x01fe, 0x01fe, read8_delegate(FUNC(a2600_state::modeFE_switch_r),state));
19521970      break;
19531971
19541972   case mode3E:
1955      space->install_legacy_write_handler(0x3e, 0x3e, FUNC(mode3E_RAM_switch_w));
1956      space->install_legacy_write_handler(0x3f, 0x3f, FUNC(mode3E_switch_w));
1957      space->install_legacy_write_handler(0x1400, 0x15ff, FUNC(mode3E_RAM_w));
1973      space->install_write_handler(0x3e, 0x3e, write8_delegate(FUNC(a2600_state::mode3E_RAM_switch_w),state));
1974      space->install_write_handler(0x3f, 0x3f, write8_delegate(FUNC(a2600_state::mode3E_switch_w),state));
1975      space->install_write_handler(0x1400, 0x15ff, write8_delegate(FUNC(a2600_state::mode3E_RAM_w),state));
19581976      break;
19591977
19601978   case modeSS:
1961      space->install_legacy_read_handler(0x1000, 0x1fff, FUNC(modeSS_r));
1979      space->install_read_handler(0x1000, 0x1fff, read8_delegate(FUNC(a2600_state::modeSS_r),state));
19621980      state->m_bank_base[1] = state->m_extra_RAM->base() + 2 * 0x800;
19631981      state->m_bank_base[2] = CART;
19641982      memory_set_bankptr(machine, "bank1", state->m_bank_base[1] );
r14963r14964
19711989      break;
19721990
19731991   case modeFV:
1974      space->install_legacy_write_handler(0x1fd0, 0x1fd0, FUNC(modeFV_switch_w));
1975      space->install_legacy_read_handler(0x1fd0, 0x1fd0, FUNC(modeFV_switch_r));
1992      space->install_write_handler(0x1fd0, 0x1fd0, write8_delegate(FUNC(a2600_state::modeFV_switch_w),state));
1993      space->install_read_handler(0x1fd0, 0x1fd0, read8_delegate(FUNC(a2600_state::modeFV_switch_r),state));
19761994      break;
19771995
19781996   case modeDPC:
1979      space->install_legacy_read_handler(0x1000, 0x103f, FUNC(modeDPC_r));
1980      space->install_legacy_write_handler(0x1040, 0x107f, FUNC(modeDPC_w));
1981      space->install_legacy_write_handler(0x1ff8, 0x1ff9, FUNC(modeF8_switch_w));
1982      space->install_legacy_read_handler(0x1ff8, 0x1ff9, FUNC(modeF8_switch_r));
1997      space->install_read_handler(0x1000, 0x103f, read8_delegate(FUNC(a2600_state::modeDPC_r),state));
1998      space->install_write_handler(0x1040, 0x107f, write8_delegate(FUNC(a2600_state::modeDPC_w),state));
1999      space->install_write_handler(0x1ff8, 0x1ff9, write8_delegate(FUNC(a2600_state::modeF8_switch_w),state));
2000      space->install_read_handler(0x1ff8, 0x1ff9, read8_delegate(FUNC(a2600_state::modeF8_switch_r),state));
19832001      space->set_direct_update_handler(direct_update_delegate(FUNC(a2600_state::modeDPC_opbase_handler), state));
19842002      {
19852003         int   data_fetcher;
r14963r14964
19992017      break;
20002018
20012019   case modeJVP:
2002      space->install_legacy_read_handler(0x0FA0, 0x0FC0, FUNC(modeJVP_switch_r));
2003      space->install_legacy_write_handler(0x0FA0, 0x0FC0, FUNC(modeJVP_switch_w));
2020      space->install_read_handler(0x0FA0, 0x0FC0, read8_delegate(FUNC(a2600_state::modeJVP_switch_r),state));
2021      space->install_write_handler(0x0FA0, 0x0FC0, write8_delegate(FUNC(a2600_state::modeJVP_switch_w),state));
20042022      break;
20052023   }
20062024
r14963r14964
22182236   MCFG_MACHINE_RESET(a2600)
22192237
22202238   /* video hardware */
2239   MCFG_TIA_VIDEO_ADD("tia_video", a2600_tia_interface)
2240
22212241   MCFG_SCREEN_ADD("screen", RASTER)
22222242   MCFG_SCREEN_RAW_PARAMS( MASTER_CLOCK_NTSC, 228, 26, 26 + 160 + 16, 262, 24 , 24 + 192 + 31 )
2223   MCFG_SCREEN_UPDATE_STATIC(tia)
2243   MCFG_SCREEN_UPDATE_DEVICE("tia_video", tia_video_device, screen_update)
22242244
22252245   MCFG_PALETTE_LENGTH( TIA_PALETTE_LENGTH )
22262246   MCFG_PALETTE_INIT(tia_NTSC)
22272247
2228   MCFG_VIDEO_START(tia)
2229
22302248   /* sound hardware */
22312249   MCFG_SPEAKER_STANDARD_MONO("mono")
22322250   MCFG_SOUND_ADD("tia", TIA, MASTER_CLOCK_NTSC/114)
r14963r14964
22512269   MCFG_MACHINE_RESET(a2600)
22522270
22532271   /* video hardware */
2272   MCFG_DEVICE_REMOVE("tia_video")
2273   MCFG_TIA_VIDEO_ADD("tia_video", a2600_tia_interface_pal)
2274
22542275   MCFG_SCREEN_ADD("screen", RASTER)
22552276   MCFG_SCREEN_RAW_PARAMS( MASTER_CLOCK_PAL, 228, 26, 26 + 160 + 16, 312, 32, 32 + 228 + 31 )
2256   MCFG_SCREEN_UPDATE_STATIC(tia)
2277   MCFG_SCREEN_UPDATE_DEVICE("tia_video", tia_video_device, screen_update)
22572278
22582279   MCFG_PALETTE_LENGTH( TIA_PALETTE_LENGTH )
22592280   MCFG_PALETTE_INIT(tia_PAL)
22602281
2261   MCFG_VIDEO_START(tia)
2262
22632282   /* sound hardware */
22642283   MCFG_SPEAKER_STANDARD_MONO("mono")
22652284   MCFG_SOUND_ADD("tia", TIA, MASTER_CLOCK_PAL/114)
src/mess/drivers/pcw.c
r14963r14964
212212
213213
214214/* Keyboard is read by the MCU and sent as serial data to the gate array ASIC */
215static  READ8_HANDLER(pcw_keyboard_r)
215READ8_MEMBER(pcw_state::pcw_keyboard_r)
216216{
217217   static const char *const keynames[] = {
218218      "LINE0", "LINE1", "LINE2", "LINE3", "LINE4", "LINE5", "LINE6", "LINE7",
219219      "LINE8", "LINE9", "LINE10", "LINE11", "LINE12", "LINE13", "LINE14", "LINE15"
220220   };
221221
222   return input_port_read(space->machine(), keynames[offset]);
222   return input_port_read(machine(), keynames[offset]);
223223}
224224
225static READ8_HANDLER(pcw_keyboard_data_r)
225READ8_MEMBER(pcw_state::pcw_keyboard_data_r)
226226{
227   pcw_state *state = space->machine().driver_data<pcw_state>();
228   return state->m_mcu_keyboard_data[offset];
227   return m_mcu_keyboard_data[offset];
229228}
230229
231230/* -----------------------------------------------------------------------
r14963r14964
234233
235234static void pcw_update_read_memory_block(running_machine &machine, int block, int bank)
236235{
236   pcw_state *state = machine.driver_data<pcw_state>();
237237   address_space *space = machine.device("maincpu")->memory().space(AS_PROGRAM);
238238   char block_name[10];
239239
r14963r14964
243243   {
244244      /* when upper 16 bytes are accessed use keyboard read
245245           handler */
246      space->install_legacy_read_handler(
247         block * 0x04000 + 0x3ff0, block * 0x04000 + 0x3fff, FUNC(
248         pcw_keyboard_data_r));
246      space->install_read_handler(
247         block * 0x04000 + 0x3ff0, block * 0x04000 + 0x3fff, read8_delegate(FUNC(pcw_state::pcw_keyboard_data_r),state));
249248//      LOG(("MEM: read block %i -> bank %i\n",block,bank));
250249   }
251250   else
r14963r14964
357356   return state->m_interrupt_counter | (input_port_read(machine, "EXTRA") & (0x040 | 0x010)) | (state->m_system_status & 0x20);
358357}
359358
360static READ8_HANDLER(pcw_interrupt_counter_r)
359READ8_MEMBER(pcw_state::pcw_interrupt_counter_r)
361360{
362   pcw_state *state = space->machine().driver_data<pcw_state>();
363361   int data;
364362
365363   /* from Jacob Nevins docs */
366364
367365   /* get data */
368   data = pcw_get_sys_status(space->machine());
366   data = pcw_get_sys_status(machine());
369367   /* clear int counter */
370   state->m_interrupt_counter = 0;
368   m_interrupt_counter = 0;
371369   /* check interrupts */
372   pcw_update_irqs(space->machine());
370   pcw_update_irqs(machine());
373371   /* return data */
374372   //LOG(("SYS: IRQ counter read, returning %02x\n",data));
375373   return data;
376374}
377375
378376
379static WRITE8_HANDLER(pcw_bank_select_w)
377WRITE8_MEMBER(pcw_state::pcw_bank_select_w)
380378{
381   pcw_state *state = space->machine().driver_data<pcw_state>();
382379   //LOG(("BANK: %2x %x\n",offset, data));
383   state->m_banks[offset] = data;
380   m_banks[offset] = data;
384381
385   pcw_update_mem(space->machine(), offset, data);
386//  popmessage("RAM Banks: %02x %02x %02x %02x Lock:%02x",state->m_banks[0],state->m_banks[1],state->m_banks[2],state->m_banks[3],state->m_bank_force);
382   pcw_update_mem(machine(), offset, data);
383//  popmessage("RAM Banks: %02x %02x %02x %02x Lock:%02x",m_banks[0],m_banks[1],m_banks[2],m_banks[3],m_bank_force);
387384}
388385
389static WRITE8_HANDLER(pcw_bank_force_selection_w)
386WRITE8_MEMBER(pcw_state::pcw_bank_force_selection_w)
390387{
391   pcw_state *state = space->machine().driver_data<pcw_state>();
392   state->m_bank_force = data;
388   m_bank_force = data;
393389
394   pcw_update_mem(space->machine(), 0, state->m_banks[0]);
395   pcw_update_mem(space->machine(), 1, state->m_banks[1]);
396   pcw_update_mem(space->machine(), 2, state->m_banks[2]);
397   pcw_update_mem(space->machine(), 3, state->m_banks[3]);
390   pcw_update_mem(machine(), 0, m_banks[0]);
391   pcw_update_mem(machine(), 1, m_banks[1]);
392   pcw_update_mem(machine(), 2, m_banks[2]);
393   pcw_update_mem(machine(), 3, m_banks[3]);
398394}
399395
400396
401static WRITE8_HANDLER(pcw_roller_ram_addr_w)
397WRITE8_MEMBER(pcw_state::pcw_roller_ram_addr_w)
402398{
403   pcw_state *state = space->machine().driver_data<pcw_state>();
404399   /*
405400    Address of roller RAM. b7-5: bank (0-7). b4-1: address / 512. */
406401
407   state->m_roller_ram_addr = (((data>>5) & 0x07)<<14) |
402   m_roller_ram_addr = (((data>>5) & 0x07)<<14) |
408403                     ((data & 0x01f)<<9);
409   LOG(("Roller-RAM: Address set to 0x%05x\n",state->m_roller_ram_addr));
404   LOG(("Roller-RAM: Address set to 0x%05x\n",m_roller_ram_addr));
410405}
411406
412static WRITE8_HANDLER(pcw_pointer_table_top_scan_w)
407WRITE8_MEMBER(pcw_state::pcw_pointer_table_top_scan_w)
413408{
414   pcw_state *state = space->machine().driver_data<pcw_state>();
415   state->m_roller_ram_offset = data;
416   LOG(("Roller-RAM: offset set to 0x%05x\n",state->m_roller_ram_offset));
409   m_roller_ram_offset = data;
410   LOG(("Roller-RAM: offset set to 0x%05x\n",m_roller_ram_offset));
417411}
418412
419static WRITE8_HANDLER(pcw_vdu_video_control_register_w)
413WRITE8_MEMBER(pcw_state::pcw_vdu_video_control_register_w)
420414{
421   pcw_state *state = space->machine().driver_data<pcw_state>();
422   state->m_vdu_video_control_register = data;
415   m_vdu_video_control_register = data;
423416   LOG(("Roller-RAM: control reg set to 0x%02x\n",data));
424417}
425418
426static WRITE8_HANDLER(pcw_system_control_w)
419WRITE8_MEMBER(pcw_state::pcw_system_control_w)
427420{
428   pcw_state *state = space->machine().driver_data<pcw_state>();
429   device_t *fdc = space->machine().device("upd765");
430   device_t *speaker = space->machine().device(BEEPER_TAG);
421   device_t *fdc = machine().device("upd765");
422   device_t *speaker = machine().device(BEEPER_TAG);
431423   LOG(("SYSTEM CONTROL: %d\n",data));
432424
433425   switch (data)
r14963r14964
435427      /* end bootstrap */
436428      case 0:
437429      {
438         state->m_boot = 0;
439         pcw_update_mem(space->machine(), 0, state->m_banks[0]);
430         m_boot = 0;
431         pcw_update_mem(machine(), 0, m_banks[0]);
440432      }
441433      break;
442434
443435      /* reboot */
444436      case 1:
445437      {
446         cputag_set_input_line(space->machine(), "maincpu", INPUT_LINE_RESET, PULSE_LINE);
438         cputag_set_input_line(machine(), "maincpu", INPUT_LINE_RESET, PULSE_LINE);
447439         popmessage("SYS: Reboot");
448440      }
449441      break;
r14963r14964
451443      /* connect fdc interrupt to nmi */
452444      case 2:
453445      {
454         int fdc_previous_interrupt_code = state->m_fdc_interrupt_code;
446         int fdc_previous_interrupt_code = m_fdc_interrupt_code;
455447
456         state->m_fdc_interrupt_code = 0;
448         m_fdc_interrupt_code = 0;
457449
458450         /* previously connected to INT? */
459451         if (fdc_previous_interrupt_code == 1)
460452         {
461453            /* yes */
462454
463            pcw_update_irqs(space->machine());
455            pcw_update_irqs(machine());
464456         }
465457
466458      }
r14963r14964
470462      /* connect fdc interrupt to interrupt */
471463      case 3:
472464      {
473         int fdc_previous_interrupt_code = state->m_fdc_interrupt_code;
465         int fdc_previous_interrupt_code = m_fdc_interrupt_code;
474466
475467         /* connect to INT */
476         state->m_fdc_interrupt_code = 1;
468         m_fdc_interrupt_code = 1;
477469
478470         /* previously connected to NMI? */
479471         if (fdc_previous_interrupt_code == 0)
r14963r14964
481473            /* yes */
482474
483475            /* clear nmi interrupt */
484            state->m_nmi_flag = 0;
476            m_nmi_flag = 0;
485477         }
486478
487479         /* re-issue interrupt */
488         pcw_update_irqs(space->machine());
480         pcw_update_irqs(machine());
489481      }
490482      break;
491483
r14963r14964
493485      /* connect fdc interrupt to neither */
494486      case 4:
495487      {
496         int fdc_previous_interrupt_code = state->m_fdc_interrupt_code;
488         int fdc_previous_interrupt_code = m_fdc_interrupt_code;
497489
498         state->m_fdc_interrupt_code = 2;
490         m_fdc_interrupt_code = 2;
499491
500492         /* previously connected to NMI or INT? */
501493         if ((fdc_previous_interrupt_code == 0) || (fdc_previous_interrupt_code == 1))
r14963r14964
503495            /* yes */
504496
505497            /* Clear NMI */
506            state->m_nmi_flag = 0;
498            m_nmi_flag = 0;
507499         }
508         pcw_update_irqs(space->machine());
500         pcw_update_irqs(machine());
509501
510502      }
511503      break;
r14963r14964
542534      /* disc motor on */
543535      case 9:
544536      {
545         floppy_mon_w(floppy_get_device(space->machine(), 0), CLEAR_LINE);
546         floppy_mon_w(floppy_get_device(space->machine(), 1), CLEAR_LINE);
547         floppy_drive_set_ready_state(floppy_get_device(space->machine(), 0), 1,1);
548         floppy_drive_set_ready_state(floppy_get_device(space->machine(), 1), 1,1);
537         floppy_mon_w(floppy_get_device(machine(), 0), CLEAR_LINE);
538         floppy_mon_w(floppy_get_device(machine(), 1), CLEAR_LINE);
539         floppy_drive_set_ready_state(floppy_get_device(machine(), 0), 1,1);
540         floppy_drive_set_ready_state(floppy_get_device(machine(), 1), 1,1);
549541      }
550542      break;
551543
552544      /* disc motor off */
553545      case 10:
554546      {
555         floppy_mon_w(floppy_get_device(space->machine(), 0), ASSERT_LINE);
556         floppy_mon_w(floppy_get_device(space->machine(), 1), ASSERT_LINE);
557         floppy_drive_set_ready_state(floppy_get_device(space->machine(), 0), 0,1);
558         floppy_drive_set_ready_state(floppy_get_device(space->machine(), 1), 0,1);
547         floppy_mon_w(floppy_get_device(machine(), 0), ASSERT_LINE);
548         floppy_mon_w(floppy_get_device(machine(), 1), ASSERT_LINE);
549         floppy_drive_set_ready_state(floppy_get_device(machine(), 0), 0,1);
550         floppy_drive_set_ready_state(floppy_get_device(machine(), 1), 0,1);
559551      }
560552      break;
561553
r14963r14964
576568   }
577569}
578570
579static READ8_HANDLER(pcw_system_status_r)
571READ8_MEMBER(pcw_state::pcw_system_status_r)
580572{
581573   /* from Jacob Nevins docs */
582   UINT8 ret = pcw_get_sys_status(space->machine());
574   UINT8 ret = pcw_get_sys_status(machine());
583575
584576   return ret;
585577}
586578
587579/* read from expansion hardware - additional hardware not part of
588580the PCW custom ASIC */
589static  READ8_HANDLER(pcw_expansion_r)
581READ8_MEMBER(pcw_state::pcw_expansion_r)
590582{
591583   logerror("pcw expansion r: %04x\n",offset+0x080);
592584
r14963r14964
595587      case 0x0e0:
596588      {
597589         /* spectravideo joystick */
598         if (input_port_read(space->machine(), "EXTRA") & 0x020)
590         if (input_port_read(machine(), "EXTRA") & 0x020)
599591         {
600            return input_port_read(space->machine(), "SPECTRAVIDEO");
592            return input_port_read(machine(), "SPECTRAVIDEO");
601593         }
602594         else
603595         {
r14963r14964
609601      {
610602
611603         /* kempston joystick */
612         return input_port_read(space->machine(), "KEMPSTON");
604         return input_port_read(machine(), "KEMPSTON");
613605      }
614606
615607      case 0x0e1:
r14963r14964
637629
638630/* write to expansion hardware - additional hardware not part of
639631the PCW custom ASIC */
640static WRITE8_HANDLER(pcw_expansion_w)
632WRITE8_MEMBER(pcw_state::pcw_expansion_w)
641633{
642634   logerror("pcw expansion w: %04x %02x\n",offset+0x080, data);
643635}
644636
645static READ8_HANDLER(pcw_fdc_r)
637READ8_MEMBER(pcw_state::pcw_fdc_r)
646638{
647   device_t *fdc = space->machine().device("upd765");
639   device_t *fdc = machine().device("upd765");
648640   /* from Jacob Nevins docs. FDC I/O is not fully decoded */
649641   if (offset & 1)
650642   {
r14963r14964
654646   return upd765_status_r(fdc, 0);
655647}
656648
657static WRITE8_HANDLER(pcw_fdc_w)
649WRITE8_MEMBER(pcw_state::pcw_fdc_w)
658650{
659   device_t *fdc = space->machine().device("upd765");
651   device_t *fdc = machine().device("upd765");
660652   /* from Jacob Nevins docs. FDC I/O is not fully decoded */
661653   if (offset & 1)
662654   {
r14963r14964
681673//      state->m_printer_headpos++;
682674}
683675
684static WRITE8_HANDLER(pcw_printer_data_w)
676WRITE8_MEMBER(pcw_state::pcw_printer_data_w)
685677{
686   pcw_state *state = space->machine().driver_data<pcw_state>();
687   state->m_printer_data = data;
688   upi41_master_w(space->machine().device("printer_mcu"),0,data);
678   m_printer_data = data;
679   upi41_master_w(machine().device("printer_mcu"),0,data);
689680   logerror("PRN [0xFC]: Sent command %02x\n",data);
690681}
691682
692static WRITE8_HANDLER(pcw_printer_command_w)
683WRITE8_MEMBER(pcw_state::pcw_printer_command_w)
693684{
694   pcw_state *state = space->machine().driver_data<pcw_state>();
695   state->m_printer_command = data;
696   upi41_master_w(space->machine().device("printer_mcu"),1,data);
685   m_printer_command = data;
686   upi41_master_w(machine().device("printer_mcu"),1,data);
697687   logerror("PRN [0xFD]: Sent command %02x\n",data);
698688}
699689
r14963r14964
704694// 3 = bad command
705695// 5 = print error
706696// anything else = no printer
707static  READ8_HANDLER(pcw_printer_data_r)
697READ8_MEMBER(pcw_state::pcw_printer_data_r)
708698{
709   return upi41_master_r(space->machine().device("printer_mcu"),0);
699   return upi41_master_r(machine().device("printer_mcu"),0);
710700}
711701
712702// printer status
r14963r14964
718708// bit 2 - paper is present
719709// bit 1 - busy
720710// bit 0 - controller fault
721static  READ8_HANDLER(pcw_printer_status_r)
711READ8_MEMBER(pcw_state::pcw_printer_status_r)
722712{
723   return upi41_master_r(space->machine().device("printer_mcu"),1);
713   return upi41_master_r(machine().device("printer_mcu"),1);
724714}
725715
726716/* MCU handlers */
r14963r14964
809799   state->m_printer_p2 |= 0x40;
810800}
811801
812static READ8_HANDLER(mcu_printer_p1_r)
802READ8_MEMBER(pcw_state::mcu_printer_p1_r)
813803{
814   pcw_state *state = space->machine().driver_data<pcw_state>();
815804//  logerror("PRN: MCU reading data from P1\n");
816   return state->m_printer_pins & 0x00ff;
805   return m_printer_pins & 0x00ff;
817806}
818807
819static WRITE8_HANDLER(mcu_printer_p1_w)
808WRITE8_MEMBER(pcw_state::mcu_printer_p1_w)
820809{
821   pcw_state *state = space->machine().driver_data<pcw_state>();
822   state->m_printer_pins = (state->m_printer_pins & 0x0100) | data;
823   //popmessage("PRN: Print head position = %i",state->m_printer_headpos);
824   logerror("PRN: MCU writing %02x to P1 [%03x/%03x]\n",data,state->m_printer_pins,~state->m_printer_pins & 0x1ff);
810   m_printer_pins = (m_printer_pins & 0x0100) | data;
811   //popmessage("PRN: Print head position = %i",m_printer_headpos);
812   logerror("PRN: MCU writing %02x to P1 [%03x/%03x]\n",data,m_printer_pins,~m_printer_pins & 0x1ff);
825813}
826814
827static READ8_HANDLER(mcu_printer_p2_r)
815READ8_MEMBER(pcw_state::mcu_printer_p2_r)
828816{
829817   UINT8 ret = 0x00;
830   pcw_state *state = space->machine().driver_data<pcw_state>();
831818//  logerror("PRN: MCU reading data from P2\n");
832819   ret |= 0x80;  // make sure bail bar is in
833   ret |= (state->m_printer_p2 & 0x70);
834   ret |= (state->m_printer_pins & 0x100) ? 0x01 : 0x00;  // ninth pin
820   ret |= (m_printer_p2 & 0x70);
821   ret |= (m_printer_pins & 0x100) ? 0x01 : 0x00;  // ninth pin
835822   ret |= 0x0e;
836823   return ret;
837824}
838825
839static WRITE8_HANDLER(mcu_printer_p2_w)
826WRITE8_MEMBER(pcw_state::mcu_printer_p2_w)
840827{
841   pcw_state *state = space->machine().driver_data<pcw_state>();
842828
843829   //logerror("PRN: MCU writing %02x to P2\n",data);
844   state->m_printer_p2 = data & 0x70;
830   m_printer_p2 = data & 0x70;
845831
846832   // handle shift/store
847   state->m_printer_serial = data & 0x04;  // data
833   m_printer_serial = data & 0x04;  // data
848834   if((data & 0x02) != 0)  // clock
849835   {
850      state->m_printer_shift <<= 1;
851      if(state->m_printer_serial == 0)
852         state->m_printer_shift &= ~0x01;
836      m_printer_shift <<= 1;
837      if(m_printer_serial == 0)
838         m_printer_shift &= ~0x01;
853839      else
854         state->m_printer_shift |= 0x01;
840         m_printer_shift |= 0x01;
855841   }
856842   if((data & 0x08) != 0)  // strobe
857843   {
858      logerror("Strobe active [%02x]\n",state->m_printer_shift);
859      state->m_printer_shift_output = state->m_printer_shift;
860      state->m_prn_stepper->adjust(PERIOD_OF_555_MONOSTABLE(22000,0.00000001));
844      logerror("Strobe active [%02x]\n",m_printer_shift);
845      m_printer_shift_output = m_printer_shift;
846      m_prn_stepper->adjust(PERIOD_OF_555_MONOSTABLE(22000,0.00000001));
861847   }
862848
863849   if(data & 0x40)
864      state->m_prn_pins->adjust(PERIOD_OF_555_MONOSTABLE(22000,0.0000000068));
850      m_prn_pins->adjust(PERIOD_OF_555_MONOSTABLE(22000,0.0000000068));
865851
866852   if(data & 0x01)
867      state->m_printer_pins |= 0x0100;
853      m_printer_pins |= 0x0100;
868854   else
869      state->m_printer_pins &= ~0x0100;
870   state->m_printer_p2_prev = data;
855      m_printer_pins &= ~0x0100;
856   m_printer_p2_prev = data;
871857}
872858
873859// Paper sensor
874static READ8_HANDLER(mcu_printer_t1_r)
860READ8_MEMBER(pcw_state::mcu_printer_t1_r)
875861{
876862   return 1;
877863}
878864
879865// Print head location (0 if at left margin, otherwise 1)
880static READ8_HANDLER(mcu_printer_t0_r)
866READ8_MEMBER(pcw_state::mcu_printer_t0_r)
881867{
882   pcw_state *state = space->machine().driver_data<pcw_state>();
883868
884   if(state->m_printer_headpos == 0)
869   if(m_printer_headpos == 0)
885870      return 0;
886871   else
887872      return 1;
r14963r14964
894879 *       bit 1: keyboard serial clock
895880 *       bit 0: keyboard serial data
896881 */
897static void mcu_transmit_serial(pcw_state *state, UINT8 bit)
882void pcw_state::mcu_transmit_serial(UINT8 bit)
898883{
899884   int seq;
900885
901886   /* Keyboard data is sent in serial from the MCU through the keyboard port, to the ASIC
902887       Sends a string of 12-bit sequences, first 4 bits are the RAM location (from &3ff0),
903888       then 8 bits for the data to be written there. */
904   seq = state->m_mcu_transmit_count % 12;
889   seq = m_mcu_transmit_count % 12;
905890   if(seq < 4)
906891   {
907892      if(bit == 0)
908         state->m_mcu_selected &= ~(8 >> seq);
893         m_mcu_selected &= ~(8 >> seq);
909894      else
910         state->m_mcu_selected |= (8 >> seq);
895         m_mcu_selected |= (8 >> seq);
911896   }
912897   else
913898   {
914899      seq -= 4;
915900      if(bit == 0)
916         state->m_mcu_buffer &= ~(128 >> seq);
901         m_mcu_buffer &= ~(128 >> seq);
917902      else
918         state->m_mcu_buffer |= (128 >> seq);
903         m_mcu_buffer |= (128 >> seq);
919904   }
920   state->m_mcu_transmit_count++;
921   if(state->m_mcu_transmit_count >= 12)
905   m_mcu_transmit_count++;
906   if(m_mcu_transmit_count >= 12)
922907   {
923      state->m_mcu_keyboard_data[state->m_mcu_selected] = state->m_mcu_buffer;
924      state->m_mcu_transmit_count = 0;
908      m_mcu_keyboard_data[m_mcu_selected] = m_mcu_buffer;
909      m_mcu_transmit_count = 0;
925910   }
926911}
927912
928static READ8_HANDLER(mcu_kb_scan_r)
913READ8_MEMBER(pcw_state::mcu_kb_scan_r)
929914{
930   pcw_state *state = space->machine().driver_data<pcw_state>();
931   return state->m_kb_scan_row & 0xff;
915   return m_kb_scan_row & 0xff;
932916}
933917
934static WRITE8_HANDLER(mcu_kb_scan_w)
918WRITE8_MEMBER(pcw_state::mcu_kb_scan_w)
935919{
936   pcw_state *state = space->machine().driver_data<pcw_state>();
937   state->m_kb_scan_row = (state->m_kb_scan_row & 0xff00) | data;
920   m_kb_scan_row = (m_kb_scan_row & 0xff00) | data;
938921}
939922
940static READ8_HANDLER(mcu_kb_scan_high_r)
923READ8_MEMBER(pcw_state::mcu_kb_scan_high_r)
941924{
942   pcw_state *state = space->machine().driver_data<pcw_state>();
943   return (state->m_kb_scan_row & 0xff00) >> 8;
925   return (m_kb_scan_row & 0xff00) >> 8;
944926}
945927
946static WRITE8_HANDLER(mcu_kb_scan_high_w)
928WRITE8_MEMBER(pcw_state::mcu_kb_scan_high_w)
947929{
948   pcw_state *state = space->machine().driver_data<pcw_state>();
949   if((state->m_mcu_prev & 0x02) && !(data & 0x02))  // bit is transmitted on high-to-low clock transition
930   if((m_mcu_prev & 0x02) && !(data & 0x02))  // bit is transmitted on high-to-low clock transition
950931   {
951      mcu_transmit_serial(state, data & 0x01);
952      state->m_mcu_transmit_reset_seq = 0;
932      mcu_transmit_serial(data & 0x01);
933      m_mcu_transmit_reset_seq = 0;
953934   }
954935
955   if((state->m_mcu_prev & 0x01) != (data & 0x01))  // two high->low transitions on the data pin signals the beginning of a new transfer
936   if((m_mcu_prev & 0x01) != (data & 0x01))  // two high->low transitions on the data pin signals the beginning of a new transfer
956937   {
957      state->m_mcu_transmit_reset_seq++;
958      if(state->m_mcu_transmit_reset_seq > 3)
959         state->m_mcu_transmit_count = 0;
938      m_mcu_transmit_reset_seq++;
939      if(m_mcu_transmit_reset_seq > 3)
940         m_mcu_transmit_count = 0;
960941   }
961942
962   state->m_kb_scan_row = (state->m_kb_scan_row & 0x00ff) | ((data & 0xff) << 8);
963   state->m_mcu_prev = data;
943   m_kb_scan_row = (m_kb_scan_row & 0x00ff) | ((data & 0xff) << 8);
944   m_mcu_prev = data;
964945}
965946
966static READ8_HANDLER(mcu_kb_data_r)
947READ8_MEMBER(pcw_state::mcu_kb_data_r)
967948{
968   pcw_state *state = space->machine().driver_data<pcw_state>();
969   UINT16 scan_bits = ((state->m_kb_scan_row & 0xf000) >> 4) | (state->m_kb_scan_row & 0xff);
949   UINT16 scan_bits = ((m_kb_scan_row & 0xf000) >> 4) | (m_kb_scan_row & 0xff);
970950   int x;
971951
972952   for(x=0;x<12;x++)
r14963r14964
979959   return 0xff;
980960}
981961
982static READ8_HANDLER(mcu_kb_t1_r)
962READ8_MEMBER(pcw_state::mcu_kb_t1_r)
983963{
984964   return 1;
985965}
986966
987static READ8_HANDLER(mcu_kb_t0_r)
967READ8_MEMBER(pcw_state::mcu_kb_t0_r)
988968{
989969   return 0;
990970}
991971
992972/* TODO: Implement parallel port! */
993static  READ8_HANDLER(pcw9512_parallel_r)
973READ8_MEMBER(pcw_state::pcw9512_parallel_r)
994974{
995975   if (offset==1)
996976   {
r14963r14964
1002982}
1003983
1004984/* TODO: Implement parallel port! */
1005static WRITE8_HANDLER(pcw9512_parallel_w)
985WRITE8_MEMBER(pcw_state::pcw9512_parallel_w)
1006986{
1007987   logerror("pcw9512 parallel w: offs: %04x data: %02x\n",offset,data);
1008988}
1009989
1010990static ADDRESS_MAP_START(pcw_io, AS_IO, 8, pcw_state )
1011991   ADDRESS_MAP_GLOBAL_MASK(0xff)
1012   AM_RANGE(0x000, 0x07f) AM_READWRITE_LEGACY(pcw_fdc_r,               pcw_fdc_w)
1013   AM_RANGE(0x080, 0x0ef) AM_READWRITE_LEGACY(pcw_expansion_r,         pcw_expansion_w)
1014   AM_RANGE(0x0f0, 0x0f3) AM_WRITE_LEGACY(                        pcw_bank_select_w)
1015   AM_RANGE(0x0f4, 0x0f4) AM_READWRITE_LEGACY(pcw_interrupt_counter_r,   pcw_bank_force_selection_w)
1016   AM_RANGE(0x0f5, 0x0f5) AM_WRITE_LEGACY(                        pcw_roller_ram_addr_w)
1017   AM_RANGE(0x0f6, 0x0f6) AM_WRITE_LEGACY(                        pcw_pointer_table_top_scan_w)
1018   AM_RANGE(0x0f7, 0x0f7) AM_WRITE_LEGACY(                        pcw_vdu_video_control_register_w)
1019   AM_RANGE(0x0f8, 0x0f8) AM_READWRITE_LEGACY(pcw_system_status_r,      pcw_system_control_w)
1020   AM_RANGE(0x0fc, 0x0fc) AM_READWRITE_LEGACY(pcw_printer_data_r,         pcw_printer_data_w)
1021   AM_RANGE(0x0fd, 0x0fd) AM_READWRITE_LEGACY(pcw_printer_status_r,      pcw_printer_command_w)
992   AM_RANGE(0x000, 0x07f) AM_READWRITE(pcw_fdc_r,               pcw_fdc_w)
993   AM_RANGE(0x080, 0x0ef) AM_READWRITE(pcw_expansion_r,         pcw_expansion_w)
994   AM_RANGE(0x0f0, 0x0f3) AM_WRITE(                        pcw_bank_select_w)
995   AM_RANGE(0x0f4, 0x0f4) AM_READWRITE(pcw_interrupt_counter_r,   pcw_bank_force_selection_w)
996   AM_RANGE(0x0f5, 0x0f5) AM_WRITE(                        pcw_roller_ram_addr_w)
997   AM_RANGE(0x0f6, 0x0f6) AM_WRITE(                        pcw_pointer_table_top_scan_w)
998   AM_RANGE(0x0f7, 0x0f7) AM_WRITE(                        pcw_vdu_video_control_register_w)
999   AM_RANGE(0x0f8, 0x0f8) AM_READWRITE(pcw_system_status_r,      pcw_system_control_w)
1000   AM_RANGE(0x0fc, 0x0fc) AM_READWRITE(pcw_printer_data_r,         pcw_printer_data_w)
1001   AM_RANGE(0x0fd, 0x0fd) AM_READWRITE(pcw_printer_status_r,      pcw_printer_command_w)
10221002ADDRESS_MAP_END
10231003
10241004
10251005
10261006static ADDRESS_MAP_START(pcw9512_io, AS_IO, 8, pcw_state )
10271007   ADDRESS_MAP_GLOBAL_MASK(0xff)
1028   AM_RANGE(0x000, 0x07f) AM_READWRITE_LEGACY(pcw_fdc_r,               pcw_fdc_w)
1029   AM_RANGE(0x080, 0x0ef) AM_READWRITE_LEGACY(pcw_expansion_r,         pcw_expansion_w)
1030   AM_RANGE(0x0f0, 0x0f3) AM_WRITE_LEGACY(                        pcw_bank_select_w)
1031   AM_RANGE(0x0f4, 0x0f4) AM_READWRITE_LEGACY(pcw_interrupt_counter_r,   pcw_bank_force_selection_w)
1032   AM_RANGE(0x0f5, 0x0f5) AM_WRITE_LEGACY(                        pcw_roller_ram_addr_w)
1033   AM_RANGE(0x0f6, 0x0f6) AM_WRITE_LEGACY(                        pcw_pointer_table_top_scan_w)
1034   AM_RANGE(0x0f7, 0x0f7) AM_WRITE_LEGACY(                        pcw_vdu_video_control_register_w)
1035   AM_RANGE(0x0f8, 0x0f8) AM_READWRITE_LEGACY(pcw_system_status_r,      pcw_system_control_w)
1036   AM_RANGE(0x0fc, 0x0fd) AM_READWRITE_LEGACY(pcw9512_parallel_r,         pcw9512_parallel_w)
1008   AM_RANGE(0x000, 0x07f) AM_READWRITE(pcw_fdc_r,               pcw_fdc_w)
1009   AM_RANGE(0x080, 0x0ef) AM_READWRITE(pcw_expansion_r,         pcw_expansion_w)
1010   AM_RANGE(0x0f0, 0x0f3) AM_WRITE(                        pcw_bank_select_w)
1011   AM_RANGE(0x0f4, 0x0f4) AM_READWRITE(pcw_interrupt_counter_r,   pcw_bank_force_selection_w)
1012   AM_RANGE(0x0f5, 0x0f5) AM_WRITE(                        pcw_roller_ram_addr_w)
1013   AM_RANGE(0x0f6, 0x0f6) AM_WRITE(                        pcw_pointer_table_top_scan_w)
1014   AM_RANGE(0x0f7, 0x0f7) AM_WRITE(                        pcw_vdu_video_control_register_w)
1015   AM_RANGE(0x0f8, 0x0f8) AM_READWRITE(pcw_system_status_r,      pcw_system_control_w)
1016   AM_RANGE(0x0fc, 0x0fd) AM_READWRITE(pcw9512_parallel_r,         pcw9512_parallel_w)
10371017ADDRESS_MAP_END
10381018
10391019/* i8041 MCU */
10401020static ADDRESS_MAP_START(pcw_printer_io, AS_IO, 8, pcw_state )
1041   AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_READWRITE_LEGACY(mcu_printer_p2_r,mcu_printer_p2_w)
1042   AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READWRITE_LEGACY(mcu_printer_p1_r, mcu_printer_p1_w)
1043   AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ_LEGACY(mcu_printer_t1_r)
1044   AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_READ_LEGACY(mcu_printer_t0_r)
1021   AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_READWRITE(mcu_printer_p2_r,mcu_printer_p2_w)
1022   AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READWRITE(mcu_printer_p1_r, mcu_printer_p1_w)
1023   AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(mcu_printer_t1_r)
1024   AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_READ(mcu_printer_t0_r)
10451025ADDRESS_MAP_END
10461026
10471027static ADDRESS_MAP_START(pcw_keyboard_io, AS_IO, 8, pcw_state )
1048   AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READWRITE_LEGACY(mcu_kb_scan_r,mcu_kb_scan_w)
1049   AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_READWRITE_LEGACY(mcu_kb_scan_high_r,mcu_kb_scan_high_w)
1050   AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ_LEGACY(mcu_kb_t1_r)
1051   AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_READ_LEGACY(mcu_kb_t0_r)
1052   AM_RANGE(MCS48_PORT_BUS, MCS48_PORT_BUS) AM_READ_LEGACY(mcu_kb_data_r)
1028   AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READWRITE(mcu_kb_scan_r,mcu_kb_scan_w)
1029   AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_READWRITE(mcu_kb_scan_high_r,mcu_kb_scan_high_w)
1030   AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(mcu_kb_t1_r)
1031   AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_READ(mcu_kb_t0_r)
1032   AM_RANGE(MCS48_PORT_BUS, MCS48_PORT_BUS) AM_READ(mcu_kb_data_r)
10531033ADDRESS_MAP_END
10541034
10551035
src/mess/drivers/oric.c
r14963r14964
6969static ADDRESS_MAP_START(telestrat_mem, AS_PROGRAM, 8, oric_state )
7070   AM_RANGE( 0x0000, 0x02ff) AM_RAM
7171   AM_RANGE( 0x0300, 0x030f) AM_DEVREADWRITE("via6522_0", via6522_device, read, write)
72   AM_RANGE( 0x0310, 0x031b) AM_READWRITE_LEGACY(oric_microdisc_r, oric_microdisc_w )
72   AM_RANGE( 0x0310, 0x031b) AM_READWRITE(oric_microdisc_r, oric_microdisc_w )
7373   AM_RANGE( 0x031c, 0x031f) AM_DEVREADWRITE("acia",  acia6551_device, read, write)
7474   AM_RANGE( 0x0320, 0x032f) AM_DEVREADWRITE("via6522_1", via6522_device, read, write)
7575   AM_RANGE( 0x0400, 0xbfff) AM_RAM
r14963r14964
339339   AY8910_DEFAULT_LOADS,
340340   DEVCB_NULL,
341341   DEVCB_NULL,
342   DEVCB_MEMORY_HANDLER("maincpu", PROGRAM, oric_psg_porta_write),
342   DEVCB_DRIVER_MEMBER(oric_state, oric_psg_porta_write),
343343   DEVCB_NULL,
344344};
345345
src/mess/drivers/orao.c
r14963r14964
2222static ADDRESS_MAP_START(orao_mem, AS_PROGRAM, 8, orao_state )
2323    AM_RANGE( 0x0000, 0x5fff ) AM_RAM AM_SHARE("memory")
2424    AM_RANGE( 0x6000, 0x7fff ) AM_RAM AM_SHARE("video_ram") // video ram
25    AM_RANGE( 0x8000, 0x9fff ) AM_READWRITE_LEGACY(orao_io_r, orao_io_w )
25    AM_RANGE( 0x8000, 0x9fff ) AM_READWRITE(orao_io_r, orao_io_w )
2626    AM_RANGE( 0xa000, 0xafff ) AM_RAM  // extension
2727    AM_RANGE( 0xb000, 0xbfff ) AM_RAM  // DOS
2828    AM_RANGE( 0xc000, 0xdfff ) AM_ROM
src/mess/drivers/galeb.c
r14963r14964
2222
2323static WRITE8_DEVICE_HANDLER( galeb_dac_data_w ) { dac_data_w(device, data); }
2424
25static READ8_HANDLER( galeb_keyboard_r )
25READ8_MEMBER(galeb_state::galeb_keyboard_r)
2626{
2727   static const char *const keynames[] = { "LINE0", "LINE1", "LINE2", "LINE3", "LINE4", "LINE5", "LINE6", "LINE7" };
2828
29   return input_port_read(space->machine(), keynames[offset]);
29   return input_port_read(machine(), keynames[offset]);
3030}
3131
3232/* Address maps */
3333static ADDRESS_MAP_START(galeb_mem, AS_PROGRAM, 8, galeb_state )
3434    AM_RANGE( 0x0000, 0x1fff ) AM_RAM  // RAM
35    AM_RANGE( 0xbfe0, 0xbfe7 ) AM_READ_LEGACY(galeb_keyboard_r )
35    AM_RANGE( 0xbfe0, 0xbfe7 ) AM_READ(galeb_keyboard_r )
3636    AM_RANGE( 0xbfe0, 0xbfe0 ) AM_DEVWRITE_LEGACY("dac", galeb_dac_data_w )
3737    AM_RANGE( 0xb000, 0xb3ff ) AM_RAM  AM_SHARE("video_ram") // video ram
3838    AM_RANGE( 0xc000, 0xc7ff ) AM_ROM  // BASIC 01 ROM
src/mess/drivers/electron.c
r14963r14964
5050   AM_RANGE(0x0000, 0x7fff) AM_RAM AM_REGION("maincpu",  0x00000)   /* 32KB of RAM */
5151   AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank2")                        /* Banked ROM pages */
5252   AM_RANGE(0xc000, 0xfbff) AM_ROM AM_REGION("user1", 0x40000)   /* OS ROM */
53   AM_RANGE(0xfc00, 0xfcff) AM_READWRITE_LEGACY(electron_jim_r, electron_jim_w )         /* JIM pages */
54   AM_RANGE(0xfd00, 0xfdff) AM_READWRITE_LEGACY(electron_1mhz_r, electron_1mhz_w )      /* 1 MHz bus */
55   AM_RANGE(0xfe00, 0xfeff) AM_READWRITE_LEGACY(electron_ula_r, electron_ula_w )         /* Electron ULA */
53   AM_RANGE(0xfc00, 0xfcff) AM_READWRITE(electron_jim_r, electron_jim_w )         /* JIM pages */
54   AM_RANGE(0xfd00, 0xfdff) AM_READWRITE(electron_1mhz_r, electron_1mhz_w )      /* 1 MHz bus */
55   AM_RANGE(0xfe00, 0xfeff) AM_READWRITE(electron_ula_r, electron_ula_w )         /* Electron ULA */
5656   AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("user1", 0x43f00)   /* OS ROM continued */
5757ADDRESS_MAP_END
5858
src/mess/drivers/mikrosha.c
r14963r14964
3232static ADDRESS_MAP_START(mikrosha_mem, AS_PROGRAM, 8, mikrosha_state )
3333    AM_RANGE( 0x0000, 0x0fff ) AM_RAMBANK("bank1") // First bank
3434    AM_RANGE( 0x1000, 0x7fff ) AM_RAM // RAM
35    AM_RANGE( 0x8000, 0xbfff ) AM_READ_LEGACY(radio_cpu_state_r) // Not connected
35    AM_RANGE( 0x8000, 0xbfff ) AM_READ(radio_cpu_state_r) // Not connected
3636    AM_RANGE( 0xc000, 0xc003 ) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write) AM_MIRROR(0x07fc)
3737    AM_RANGE( 0xc800, 0xc803 ) AM_DEVREADWRITE("ppi8255_2", i8255_device, read, write) AM_MIRROR(0x07fc)
3838    AM_RANGE( 0xd000, 0xd001 ) AM_DEVREADWRITE_LEGACY("i8275", i8275_r, i8275_w) AM_MIRROR(0x07fe) // video
3939    AM_RANGE( 0xd800, 0xd803 ) AM_DEVREADWRITE_LEGACY("pit8253", pit8253_r,pit8253_w) AM_MIRROR(0x07fc) // Timer
40    AM_RANGE( 0xe000, 0xf7ff ) AM_READ_LEGACY(radio_cpu_state_r) // Not connected
40    AM_RANGE( 0xe000, 0xf7ff ) AM_READ(radio_cpu_state_r) // Not connected
4141   AM_RANGE( 0xf800, 0xffff ) AM_DEVWRITE_LEGACY("dma8257", i8257_w)    // DMA
4242    AM_RANGE( 0xf800, 0xffff ) AM_ROM  // System ROM
4343ADDRESS_MAP_END
4444
4545static ADDRESS_MAP_START( mikrosha_io , AS_IO, 8, mikrosha_state )
4646   ADDRESS_MAP_UNMAP_HIGH
47   AM_RANGE( 0x00, 0xff ) AM_READWRITE_LEGACY(radio_io_r,radio_io_w)
47   AM_RANGE( 0x00, 0xff ) AM_READWRITE(radio_io_r,radio_io_w)
4848ADDRESS_MAP_END
4949
5050/* Input ports */
src/mess/drivers/irisha.c
r14963r14964
2222ADDRESS_MAP_END
2323
2424static ADDRESS_MAP_START( irisha_io , AS_IO, 8, irisha_state )
25   AM_RANGE( 0x04, 0x05) AM_READ_LEGACY(irisha_keyboard_r)
25   AM_RANGE( 0x04, 0x05) AM_READ(irisha_keyboard_r)
2626   AM_RANGE( 0x06, 0x06) AM_DEVREADWRITE("uart",i8251_device, data_r, data_w)
2727   AM_RANGE( 0x07, 0x07) AM_DEVREADWRITE("uart", i8251_device, status_r, control_w)
2828   AM_RANGE( 0x08, 0x0B) AM_DEVREADWRITE_LEGACY("pit8253", pit8253_r, pit8253_w )
src/mess/drivers/orion.c
r14963r14964
3030static ADDRESS_MAP_START(orion128_mem, AS_PROGRAM, 8, orion_state )
3131   AM_RANGE( 0x0000, 0xefff ) AM_RAMBANK("bank1")
3232   AM_RANGE( 0xf000, 0xf3ff ) AM_RAMBANK("bank2")
33    AM_RANGE( 0xf400, 0xf4ff ) AM_READWRITE_LEGACY(orion128_system_r,orion128_system_w)  // Keyboard and cassette
34    AM_RANGE( 0xf500, 0xf5ff ) AM_READWRITE_LEGACY(orion128_romdisk_r,orion128_romdisk_w)
35    AM_RANGE( 0xf700, 0xf7ff ) AM_READWRITE_LEGACY(orion128_floppy_r,orion128_floppy_w)
33    AM_RANGE( 0xf400, 0xf4ff ) AM_READWRITE(orion128_system_r,orion128_system_w)  // Keyboard and cassette
34    AM_RANGE( 0xf500, 0xf5ff ) AM_READWRITE(orion128_romdisk_r,orion128_romdisk_w)
35    AM_RANGE( 0xf700, 0xf7ff ) AM_READWRITE(orion128_floppy_r,orion128_floppy_w)
3636    AM_RANGE( 0xf800, 0xffff ) AM_ROM
37    AM_RANGE( 0xf800, 0xf8ff ) AM_WRITE_LEGACY(orion128_video_mode_w)
38    AM_RANGE( 0xf900, 0xf9ff ) AM_WRITE_LEGACY(orion128_memory_page_w)
39    AM_RANGE( 0xfa00, 0xfaff ) AM_WRITE_LEGACY(orion128_video_page_w)
37    AM_RANGE( 0xf800, 0xf8ff ) AM_WRITE(orion128_video_mode_w)
38    AM_RANGE( 0xf900, 0xf9ff ) AM_WRITE(orion128_memory_page_w)
39    AM_RANGE( 0xfa00, 0xfaff ) AM_WRITE(orion128_video_page_w)
4040ADDRESS_MAP_END
4141
4242/* Orion Z80 Card II */
4343static ADDRESS_MAP_START( orion128_io , AS_IO, 8, orion_state )
4444   ADDRESS_MAP_GLOBAL_MASK(0xff)
4545   ADDRESS_MAP_UNMAP_HIGH
46   AM_RANGE( 0xf8, 0xf8) AM_WRITE_LEGACY(orion128_video_mode_w )
47   AM_RANGE( 0xf9, 0xf9) AM_WRITE_LEGACY(orion128_memory_page_w )
48   AM_RANGE( 0xfa, 0xfa) AM_WRITE_LEGACY(orion128_video_page_w )
46   AM_RANGE( 0xf8, 0xf8) AM_WRITE(orion128_video_mode_w )
47   AM_RANGE( 0xf9, 0xf9) AM_WRITE(orion128_memory_page_w )
48   AM_RANGE( 0xfa, 0xfa) AM_WRITE(orion128_video_page_w )
4949ADDRESS_MAP_END
5050
5151static ADDRESS_MAP_START(orionz80_mem, AS_PROGRAM, 8, orion_state )
r14963r14964
5959
6060/* Orion Pro */
6161static ADDRESS_MAP_START( orionz80_io , AS_IO, 8, orion_state )
62    AM_RANGE( 0x0000, 0xffff) AM_READWRITE_LEGACY(orionz80_io_r, orionz80_io_w )
62    AM_RANGE( 0x0000, 0xffff) AM_READWRITE(orionz80_io_r, orionz80_io_w )
6363ADDRESS_MAP_END
6464
6565static ADDRESS_MAP_START(orionpro_mem, AS_PROGRAM, 8, orion_state )
r14963r14964
7575ADDRESS_MAP_END
7676
7777static ADDRESS_MAP_START( orionpro_io , AS_IO, 8, orion_state )
78    AM_RANGE( 0x0000, 0xffff) AM_READWRITE_LEGACY(orionpro_io_r, orionpro_io_w )
78    AM_RANGE( 0x0000, 0xffff) AM_READWRITE(orionpro_io_r, orionpro_io_w )
7979ADDRESS_MAP_END
8080
8181static const cassette_interface orion_cassette_interface =
src/mess/drivers/bk.c
r14963r14964
2323    AM_RANGE( 0xa000, 0xbfff ) AM_ROM  // ROM
2424    AM_RANGE( 0xc000, 0xdfff ) AM_ROM  // ROM
2525    AM_RANGE( 0xe000, 0xfeff ) AM_ROM  // ROM
26    AM_RANGE( 0xffb0, 0xffb1 ) AM_READWRITE_LEGACY(bk_key_state_r,bk_key_state_w)
27    AM_RANGE( 0xffb2, 0xffb3 ) AM_READ_LEGACY(bk_key_code_r)
28    AM_RANGE( 0xffb4, 0xffb5 ) AM_READWRITE_LEGACY(bk_vid_scrool_r,bk_vid_scrool_w)
29    AM_RANGE( 0xffce, 0xffcf ) AM_READWRITE_LEGACY(bk_key_press_r,bk_key_press_w)
26    AM_RANGE( 0xffb0, 0xffb1 ) AM_READWRITE(bk_key_state_r,bk_key_state_w)
27    AM_RANGE( 0xffb2, 0xffb3 ) AM_READ(bk_key_code_r)
28    AM_RANGE( 0xffb4, 0xffb5 ) AM_READWRITE(bk_vid_scrool_r,bk_vid_scrool_w)
29    AM_RANGE( 0xffce, 0xffcf ) AM_READWRITE(bk_key_press_r,bk_key_press_w)
3030ADDRESS_MAP_END
3131
3232static ADDRESS_MAP_START(bk0010fd_mem, AS_PROGRAM, 16, bk_state )
r14963r14964
3636    AM_RANGE( 0x8000, 0x9fff ) AM_ROM  // ROM
3737    AM_RANGE( 0xa000, 0xdfff ) AM_RAM  // RAM
3838    AM_RANGE( 0xe000, 0xfdff ) AM_ROM  // ROM
39    AM_RANGE( 0xfe58, 0xfe59 ) AM_READWRITE_LEGACY(bk_floppy_cmd_r,bk_floppy_cmd_w)
40    AM_RANGE( 0xfe5a, 0xfe5b ) AM_READWRITE_LEGACY(bk_floppy_data_r,bk_floppy_data_w)
41    AM_RANGE( 0xffb0, 0xffb1 ) AM_READWRITE_LEGACY(bk_key_state_r,bk_key_state_w)
42    AM_RANGE( 0xffb2, 0xffb3 ) AM_READ_LEGACY(bk_key_code_r)
43    AM_RANGE( 0xffb4, 0xffb5 ) AM_READWRITE_LEGACY(bk_vid_scrool_r,bk_vid_scrool_w)
44    AM_RANGE( 0xffce, 0xffcf ) AM_READWRITE_LEGACY(bk_key_press_r,bk_key_press_w)
39    AM_RANGE( 0xfe58, 0xfe59 ) AM_READWRITE(bk_floppy_cmd_r,bk_floppy_cmd_w)
40    AM_RANGE( 0xfe5a, 0xfe5b ) AM_READWRITE(bk_floppy_data_r,bk_floppy_data_w)
41    AM_RANGE( 0xffb0, 0xffb1 ) AM_READWRITE(bk_key_state_r,bk_key_state_w)
42    AM_RANGE( 0xffb2, 0xffb3 ) AM_READ(bk_key_code_r)
43    AM_RANGE( 0xffb4, 0xffb5 ) AM_READWRITE(bk_vid_scrool_r,bk_vid_scrool_w)
44    AM_RANGE( 0xffce, 0xffcf ) AM_READWRITE(bk_key_press_r,bk_key_press_w)
4545ADDRESS_MAP_END
4646
4747/* Input ports */
src/mess/drivers/a7800.c
r14963r14964
3030***************************************************************************/
3131
3232static ADDRESS_MAP_START( a7800_mem, AS_PROGRAM, 8, a7800_state )
33   AM_RANGE(0x0000, 0x001f) AM_MIRROR(0x300) AM_READWRITE_LEGACY(a7800_TIA_r, a7800_TIA_w)
34   AM_RANGE(0x0020, 0x003f) AM_MIRROR(0x300) AM_READWRITE_LEGACY(a7800_MARIA_r, a7800_MARIA_w)
35   AM_RANGE(0x0040, 0x00ff) AM_READ_BANK("bank5") AM_WRITE_LEGACY(a7800_RAM0_w)   /* RAM (6116 block 0) */
33   AM_RANGE(0x0000, 0x001f) AM_MIRROR(0x300) AM_READWRITE(a7800_TIA_r, a7800_TIA_w)
34   AM_RANGE(0x0020, 0x003f) AM_MIRROR(0x300) AM_READWRITE(a7800_MARIA_r, a7800_MARIA_w)
35   AM_RANGE(0x0040, 0x00ff) AM_READ_BANK("bank5") AM_WRITE(a7800_RAM0_w)   /* RAM (6116 block 0) */
3636   AM_RANGE(0x0140, 0x01ff) AM_RAMBANK("bank6")   /* RAM (6116 block 1) */
3737   AM_RANGE(0x0280, 0x02ff) AM_DEVREADWRITE_LEGACY("riot", riot6532_r, riot6532_w)
3838   AM_RANGE(0x0480, 0x04ff) AM_MIRROR(0x100) AM_RAM   /* RIOT RAM */
r14963r14964
4545   AM_RANGE(0xa000, 0xbfff) AM_ROMBANK("bank3")                  /* sc + ac */
4646   AM_RANGE(0xc000, 0xdfff) AM_ROMBANK("bank4")                  /* ac */
4747   AM_RANGE(0xe000, 0xffff) AM_ROM
48   AM_RANGE(0x4000, 0xffff) AM_WRITE_LEGACY(a7800_cart_w)
48   AM_RANGE(0x4000, 0xffff) AM_WRITE(a7800_cart_w)
4949ADDRESS_MAP_END
5050
5151
src/mess/drivers/nascom1.c
r14963r14964
8686
8787static ADDRESS_MAP_START( nascom1_io, AS_IO, 8, nascom1_state )
8888   ADDRESS_MAP_GLOBAL_MASK(0x0F)
89   AM_RANGE(0x00, 0x00) AM_READWRITE_LEGACY(nascom1_port_00_r, nascom1_port_00_w)
90   AM_RANGE(0x01, 0x01) AM_READWRITE_LEGACY(nascom1_port_01_r, nascom1_port_01_w)
91   AM_RANGE(0x02, 0x02) AM_READ_LEGACY(nascom1_port_02_r)
89   AM_RANGE(0x00, 0x00) AM_READWRITE(nascom1_port_00_r, nascom1_port_00_w)
90   AM_RANGE(0x01, 0x01) AM_READWRITE(nascom1_port_01_r, nascom1_port_01_w)
91   AM_RANGE(0x02, 0x02) AM_READ(nascom1_port_02_r)
9292   AM_RANGE(0x04, 0x07) AM_DEVREADWRITE_LEGACY("z80pio", z80pio_cd_ba_r, z80pio_cd_ba_w )
9393ADDRESS_MAP_END
9494
9595
9696static ADDRESS_MAP_START( nascom2_io, AS_IO, 8, nascom1_state )
9797   ADDRESS_MAP_GLOBAL_MASK(0xff)
98   AM_RANGE(0x00, 0x00) AM_READWRITE_LEGACY(nascom1_port_00_r, nascom1_port_00_w)
99   AM_RANGE(0x01, 0x01) AM_READWRITE_LEGACY(nascom1_port_01_r, nascom1_port_01_w)
100   AM_RANGE(0x02, 0x02) AM_READ_LEGACY(nascom1_port_02_r)
98   AM_RANGE(0x00, 0x00) AM_READWRITE(nascom1_port_00_r, nascom1_port_00_w)
99   AM_RANGE(0x01, 0x01) AM_READWRITE(nascom1_port_01_r, nascom1_port_01_w)
100   AM_RANGE(0x02, 0x02) AM_READ(nascom1_port_02_r)
101101   AM_RANGE(0x04, 0x07) AM_DEVREADWRITE_LEGACY("z80pio", z80pio_cd_ba_r, z80pio_cd_ba_w )
102102   AM_RANGE(0xe0, 0xe3) AM_DEVREADWRITE_LEGACY("wd1793", wd17xx_r, wd17xx_w)
103   AM_RANGE(0xe4, 0xe4) AM_READWRITE_LEGACY(nascom2_fdc_select_r, nascom2_fdc_select_w)
104   AM_RANGE(0xe5, 0xe5) AM_READ_LEGACY(nascom2_fdc_status_r)
103   AM_RANGE(0xe4, 0xe4) AM_READWRITE(nascom2_fdc_select_r, nascom2_fdc_select_w)
104   AM_RANGE(0xe5, 0xe5) AM_READ(nascom2_fdc_status_r)
105105ADDRESS_MAP_END
106106
107107
src/mess/drivers/gmaster.c
r14963r14964
1212#define MAIN_XTAL   12000000
1313
1414
15static READ8_HANDLER( gmaster_io_r )
15READ8_MEMBER(gmaster_state::gmaster_io_r)
1616{
17   gmaster_state *state = space->machine().driver_data<gmaster_state>();
1817    UINT8 data = 0;
19    if (state->m_gmachine.ports[2] & 1)
18    if (m_gmachine.ports[2] & 1)
2019   {
21      data = space->machine().region("maincpu")->base()[0x4000 + offset];
22      logerror("%.4x external memory %.4x read %.2x\n", (int)cpu_get_reg(&space->device(), CPUINFO_INT_PC), 0x4000 + offset, data);
20      data = machine().region("maincpu")->base()[0x4000 + offset];
21      logerror("%.4x external memory %.4x read %.2x\n", (int)cpu_get_reg(&space.device(), CPUINFO_INT_PC), 0x4000 + offset, data);
2322    }
2423   else
2524   {
2625      switch (offset)
2726      {
2827      case 1:
29         data=state->m_video.pixels[state->m_video.y][state->m_video.x];
30         logerror("%.4x lcd x:%.2x y:%.2x %.4x read %.2x\n", (int)cpu_get_reg(&space->device(), CPUINFO_INT_PC), state->m_video.x, state->m_video.y, 0x4000 + offset, data);
31         if (!(state->m_video.mode) && state->m_video.delayed)
32            state->m_video.x++;
33         state->m_video.delayed = TRUE;
28         data=m_video.pixels[m_video.y][m_video.x];
29         logerror("%.4x lcd x:%.2x y:%.2x %.4x read %.2x\n", (int)cpu_get_reg(&space.device(), CPUINFO_INT_PC), m_video.x, m_video.y, 0x4000 + offset, data);
30         if (!(m_video.mode) && m_video.delayed)
31            m_video.x++;
32         m_video.delayed = TRUE;
3433         break;
3534      default:
36         logerror("%.4x memory %.4x read %.2x\n", (int)cpu_get_reg(&space->device(), CPUINFO_INT_PC), 0x4000 + offset, data);
35         logerror("%.4x memory %.4x read %.2x\n", (int)cpu_get_reg(&space.device(), CPUINFO_INT_PC), 0x4000 + offset, data);
3736      }
3837    }
3938    return data;
4039}
4140
42#define BLITTER_Y ((state->m_gmachine.ports[2]&4)|(state->m_video.data[0]&3))
41#define BLITTER_Y ((m_gmachine.ports[2]&4)|(m_video.data[0]&3))
4342
44static WRITE8_HANDLER( gmaster_io_w )
43WRITE8_MEMBER(gmaster_state::gmaster_io_w)
4544{
46   gmaster_state *state = space->machine().driver_data<gmaster_state>();
47    if (state->m_gmachine.ports[2] & 1)
45    if (m_gmachine.ports[2] & 1)
4846   {
49      space->machine().region("maincpu")->base()[0x4000 + offset] = data;
50      logerror("%.4x external memory %.4x written %.2x\n", (int)cpu_get_reg(&space->device(), CPUINFO_INT_PC), 0x4000 + offset, data);
47      machine().region("maincpu")->base()[0x4000 + offset] = data;
48      logerror("%.4x external memory %.4x written %.2x\n", (int)cpu_get_reg(&space.device(), CPUINFO_INT_PC), 0x4000 + offset, data);
5149   }
5250   else
5351   {
5452      switch (offset)
5553      {
5654      case 0:
57         state->m_video.delayed=FALSE;
58         logerror("%.4x lcd %.4x written %.2x\n", (int)cpu_get_reg(&space->device(), CPUINFO_INT_PC), 0x4000 + offset, data);
55         m_video.delayed=FALSE;
56         logerror("%.4x lcd %.4x written %.2x\n", (int)cpu_get_reg(&space.device(), CPUINFO_INT_PC), 0x4000 + offset, data);
5957         // e2 af a4 a0 a9 falling block init for both halves
6058         if ((data & 0xfc) == 0xb8)
6159         {
62            state->m_video.index = 0;
63            state->m_video.data[state->m_video.index] = data;
64            state->m_video.y = BLITTER_Y;
60            m_video.index = 0;
61            m_video.data[m_video.index] = data;
62            m_video.y = BLITTER_Y;
6563         }
6664         else if ((data & 0xc0) == 0)
6765         {
68            state->m_video.x = data;
66            m_video.x = data;
6967         }
7068         else if ((data & 0xf0) == 0xe0)
7169         {
72            state->m_video.mode = (data & 0xe) ? FALSE : TRUE;
70            m_video.mode = (data & 0xe) ? FALSE : TRUE;
7371         }
74         state->m_video.data[state->m_video.index] = data;
75         state->m_video.index = (state->m_video.index + 1) & 7;
72         m_video.data[m_video.index] = data;
73         m_video.index = (m_video.index + 1) & 7;
7674         break;
7775      case 1:
78         state->m_video.delayed = FALSE;
79         if (state->m_video.x < ARRAY_LENGTH(state->m_video.pixels[0])) // continental galaxy flutlicht
80            state->m_video.pixels[state->m_video.y][state->m_video.x] = data;
76         m_video.delayed = FALSE;
77         if (m_video.x < ARRAY_LENGTH(m_video.pixels[0])) // continental galaxy flutlicht
78            m_video.pixels[m_video.y][m_video.x] = data;
8179         logerror("%.4x lcd x:%.2x y:%.2x %.4x written %.2x\n",
82            (int)cpu_get_reg(&space->device(), CPUINFO_INT_PC), state->m_video.x, state->m_video.y, 0x4000 + offset, data);
83         state->m_video.x++;
80            (int)cpu_get_reg(&space.device(), CPUINFO_INT_PC), m_video.x, m_video.y, 0x4000 + offset, data);
81         m_video.x++;
8482/* 02 b8 1a
8583   02 bb 1a
8684   02 bb 22
r14963r14964
9795*/
9896         break;
9997      default:
100         logerror("%.4x memory %.4x written %.2x\n", (int)cpu_get_reg(&space->device(), CPUINFO_INT_PC), 0x4000 + offset, data);
98         logerror("%.4x memory %.4x written %.2x\n", (int)cpu_get_reg(&space.device(), CPUINFO_INT_PC), 0x4000 + offset, data);
10199      }
102100   }
103101}
104102
105static READ8_HANDLER( gmaster_port_r )
103READ8_MEMBER(gmaster_state::gmaster_port_r)
106104{
107   //gmaster_state *state = space->machine().driver_data<gmaster_state>();
108//  UINT8 data = state->m_gmachine.ports[offset];
105//  UINT8 data = m_gmachine.ports[offset];
109106    UINT8 data = 0xff;
110107    switch (offset)
111108   {
112109   case UPD7810_PORTA:
113      data = input_port_read(space->machine(), "JOY");
110      data = input_port_read(machine(), "JOY");
114111      break;
115112   default:
116      logerror("%.4x port %d read %.2x\n", (int)cpu_get_reg(&space->device(), CPUINFO_INT_PC), offset, data);
113      logerror("%.4x port %d read %.2x\n", (int)cpu_get_reg(&space.device(), CPUINFO_INT_PC), offset, data);
117114    }
118115    return data;
119116}
120117
121static WRITE8_HANDLER( gmaster_port_w )
118WRITE8_MEMBER(gmaster_state::gmaster_port_w)
122119{
123   gmaster_state *state = space->machine().driver_data<gmaster_state>();
124    state->m_gmachine.ports[offset] = data;
125    logerror("%.4x port %d written %.2x\n", (int)cpu_get_reg(&space->device(), CPUINFO_INT_PC), offset, data);
120    m_gmachine.ports[offset] = data;
121    logerror("%.4x port %d written %.2x\n", (int)cpu_get_reg(&space.device(), CPUINFO_INT_PC), offset, data);
126122    switch (offset)
127123   {
128124      case UPD7810_PORTC:
129         state->m_video.y = BLITTER_Y;
125         m_video.y = BLITTER_Y;
130126         break;
131127    }
132128}
133129
134130static ADDRESS_MAP_START( gmaster_mem, AS_PROGRAM, 8, gmaster_state )
135131   AM_RANGE(0x0000, 0x3fff) AM_ROM
136   AM_RANGE( 0x4000, 0x7fff) AM_READWRITE_LEGACY(gmaster_io_r, gmaster_io_w)
132   AM_RANGE( 0x4000, 0x7fff) AM_READWRITE(gmaster_io_r, gmaster_io_w)
137133   AM_RANGE(0x8000, 0xfeff) AM_ROM
138134   AM_RANGE(0xff00, 0xffff) AM_RAM
139135ADDRESS_MAP_END
140136
141137static ADDRESS_MAP_START(gmaster_io, AS_IO, 8, gmaster_state )
142   AM_RANGE(UPD7810_PORTA, UPD7810_PORTF) AM_READWRITE_LEGACY(gmaster_port_r, gmaster_port_w )
138   AM_RANGE(UPD7810_PORTA, UPD7810_PORTF) AM_READWRITE(gmaster_port_r, gmaster_port_w )
143139ADDRESS_MAP_END
144140
145141static INPUT_PORTS_START( gmaster )
src/mess/drivers/microtan.c
r14963r14964
5454
5555static ADDRESS_MAP_START( microtan_map, AS_PROGRAM, 8, microtan_state )
5656   AM_RANGE(0x0000, 0x01ff) AM_RAM
57   AM_RANGE(0x0200, 0x03ff) AM_RAM_WRITE_LEGACY(microtan_videoram_w) AM_SHARE("videoram")
57   AM_RANGE(0x0200, 0x03ff) AM_RAM_WRITE(microtan_videoram_w) AM_SHARE("videoram")
5858   AM_RANGE(0xbc00, 0xbc00) AM_DEVWRITE_LEGACY("ay8910.1", ay8910_address_w)
5959   AM_RANGE(0xbc01, 0xbc01) AM_DEVREADWRITE_LEGACY("ay8910.1", ay8910_r, ay8910_data_w)
6060   AM_RANGE(0xbc02, 0xbc02) AM_DEVWRITE_LEGACY("ay8910.2", ay8910_address_w)
r14963r14964
6262   AM_RANGE(0xbfc0, 0xbfcf) AM_DEVREADWRITE("via6522_0", via6522_device, read, write)
6363   AM_RANGE(0xbfd0, 0xbfd3) AM_DEVREADWRITE("acia", acia6551_device, read, write)
6464   AM_RANGE(0xbfe0, 0xbfef) AM_DEVREADWRITE("via6522_1", via6522_device, read, write)
65   AM_RANGE(0xbff0, 0xbfff) AM_READWRITE_LEGACY(microtan_bffx_r, microtan_bffx_w)
65   AM_RANGE(0xbff0, 0xbfff) AM_READWRITE(microtan_bffx_r, microtan_bffx_w)
6666   AM_RANGE(0xc000, 0xe7ff) AM_ROM
6767   AM_RANGE(0xf000, 0xffff) AM_ROM
6868ADDRESS_MAP_END
src/mess/drivers/sapi1.c
r14963r14964
2222
2323
2424/* switch out the rom shadow */
25static WRITE8_HANDLER( sapizps3_00_w )
25WRITE8_MEMBER(sapi1_state::sapizps3_00_w)
2626{
27   memory_set_bank(space->machine(), "bank1", 0);
27   memory_set_bank(machine(), "bank1", 0);
2828}
2929
3030/* to stop execution in random ram */
31static READ8_HANDLER( sapizps3_25_r )
31READ8_MEMBER(sapi1_state::sapizps3_25_r)
3232{
33   sapi1_state *state = space->machine().driver_data<sapi1_state>();
34   return state->m_zps3_25;
33   return m_zps3_25;
3534}
3635
37static WRITE8_HANDLER( sapizps3_25_w )
36WRITE8_MEMBER(sapi1_state::sapizps3_25_w)
3837{
39   sapi1_state *state = space->machine().driver_data<sapi1_state>();
40   state->m_zps3_25 = data & 0xfc; //??
38   m_zps3_25 = data & 0xfc; //??
4139}
4240
4341
r14963r14964
4846   AM_RANGE(0x0000, 0x0fff) AM_ROM
4947   AM_RANGE(0x1000, 0x1fff) AM_ROM // Extension ROM
5048   AM_RANGE(0x2000, 0x23ff) AM_RAM
51   AM_RANGE(0x2400, 0x27ff) AM_READWRITE_LEGACY(sapi1_keyboard_r, sapi1_keyboard_w) // PORT 0 - keyboard
49   AM_RANGE(0x2400, 0x27ff) AM_READWRITE(sapi1_keyboard_r, sapi1_keyboard_w) // PORT 0 - keyboard
5250   //AM_RANGE(0x2800, 0x2bff) AM_NOP // PORT 1
5351   //AM_RANGE(0x2c00, 0x2fff) AM_NOP // PORT 2
5452   //AM_RANGE(0x3000, 0x33ff) AM_NOP // 3214
r14963r14964
7371static ADDRESS_MAP_START( sapizps3_io, AS_IO, 8, sapi1_state )
7472   ADDRESS_MAP_UNMAP_HIGH
7573   ADDRESS_MAP_GLOBAL_MASK(0xff)
76   AM_RANGE(0x00, 0x00) AM_WRITE_LEGACY(sapizps3_00_w)
77   AM_RANGE(0x25, 0x25) AM_READWRITE_LEGACY(sapizps3_25_r,sapizps3_25_w)
74   AM_RANGE(0x00, 0x00) AM_WRITE(sapizps3_00_w)
75   AM_RANGE(0x25, 0x25) AM_READWRITE(sapizps3_25_r,sapizps3_25_w)
7876ADDRESS_MAP_END
7977
8078/* Input ports */
src/mess/drivers/einstein.c
r14963r14964
9090 * upper 8 bits define the offset in the row,
9191 * data bits define data to write
9292 */
93static WRITE8_HANDLER( einstein_80col_ram_w )
93WRITE8_MEMBER(einstein_state::einstein_80col_ram_w)
9494{
95   einstein_state *einstein = space->machine().driver_data<einstein_state>();
96   einstein->m_crtc_ram[((offset & 0x07) << 8) | ((offset >> 8) & 0xff)] = data;
95   m_crtc_ram[((offset & 0x07) << 8) | ((offset >> 8) & 0xff)] = data;
9796}
9897
99static READ8_HANDLER( einstein_80col_ram_r )
98READ8_MEMBER(einstein_state::einstein_80col_ram_r)
10099{
101   einstein_state *einstein = space->machine().driver_data<einstein_state>();
102   return einstein->m_crtc_ram[((offset & 0x07) << 8) | ((offset >> 8) & 0xff)];
100   return m_crtc_ram[((offset & 0x07) << 8) | ((offset >> 8) & 0xff)];
103101}
104102
105103/* TODO: Verify implementation */
r14963r14964
145143 * bit 2 - Jumper M002 0 = 50Hz, 1 = 60Hz
146144 * bit 3 - Jumper M001 0 = ???, 1=??? perminently wired high on both the boards I have seen - PHS.
147145 */
148static READ8_HANDLER( einstein_80col_state_r )
146READ8_MEMBER(einstein_state::einstein_80col_state_r)
149147{
150   einstein_state *einstein = space->machine().driver_data<einstein_state>();
151148   UINT8 result = 0;
152149
153   result |= einstein->m_de;
154   result |= input_port_read(space->machine(), "80column_dips") & 0x06;
150   result |= m_de;
151   result |= input_port_read(machine(), "80column_dips") & 0x06;
155152
156153   return result;
157154}
r14963r14964
212209   }
213210}
214211
215static WRITE8_HANDLER( einstein_keyboard_line_write )
212WRITE8_MEMBER(einstein_state::einstein_keyboard_line_write)
216213{
217   einstein_state *einstein = space->machine().driver_data<einstein_state>();
218214
219215   if (VERBOSE_KEYBOARD)
220216      logerror("einstein_keyboard_line_write: %02x\n", data);
221217
222   einstein->m_keyboard_line = data;
218   m_keyboard_line = data;
223219
224220   /* re-scan the keyboard */
225   einstein_scan_keyboard(space->machine());
221   einstein_scan_keyboard(machine());
226222}
227223
228static READ8_HANDLER( einstein_keyboard_data_read )
224READ8_MEMBER(einstein_state::einstein_keyboard_data_read)
229225{
230   einstein_state *einstein = space->machine().driver_data<einstein_state>();
231226
232227   /* re-scan the keyboard */
233   einstein_scan_keyboard(space->machine());
228   einstein_scan_keyboard(machine());
234229
235230   if (VERBOSE_KEYBOARD)
236      logerror("einstein_keyboard_data_read: %02x\n", einstein->m_keyboard_data);
231      logerror("einstein_keyboard_data_read: %02x\n", m_keyboard_data);
237232
238   return einstein->m_keyboard_data;
233   return m_keyboard_data;
239234}
240235
241236
r14963r14964
316311}
317312
318313/* writing to this port is a simple trigger, and switches between RAM and ROM */
319static WRITE8_HANDLER( einstein_rom_w )
314WRITE8_MEMBER(einstein_state::einstein_rom_w)
320315{
321   einstein_state *einstein = space->machine().driver_data<einstein_state>();
322   einstein->m_rom_enabled ^= 1;
323   einstein_page_rom(space->machine());
316   m_rom_enabled ^= 1;
317   einstein_page_rom(machine());
324318}
325319
326320
r14963r14964
328322    INTERRUPTS
329323***************************************************************************/
330324
331static READ8_HANDLER( einstein_kybintmsk_r )
325READ8_MEMBER(einstein_state::einstein_kybintmsk_r)
332326{
333   centronics_device *centronics = space->machine().device<centronics_device>("centronics");
334   einstein_state *einstein = space->machine().driver_data<einstein_state>();
327   centronics_device *centronics = machine().device<centronics_device>("centronics");
335328   UINT8 data = 0;
336329
337330   /* clear key int. a read of this I/O port will do this or a reset */
338   einstein->m_interrupt &= ~EINSTEIN_KEY_INT;
331   m_interrupt &= ~EINSTEIN_KEY_INT;
339332
340333   /* bit 0 and 1: fire buttons on the joysticks */
341   data |= input_port_read(space->machine(), "BUTTONS");
334   data |= input_port_read(machine(), "BUTTONS");
342335
343336   /* bit 2 to 4: printer status */
344337   data |= centronics->busy_r() << 2;
r14963r14964
346339   data |= centronics->fault_r() << 4;
347340
348341   /* bit 5 to 7: graph, control and shift key */
349   data |= input_port_read(space->machine(), "EXTRA");
342   data |= input_port_read(machine(), "EXTRA");
350343
351344   if(VERBOSE_KEYBOARD)
352      logerror("%s: einstein_kybintmsk_r %02x\n", space->machine().describe_context(), data);
345      logerror("%s: einstein_kybintmsk_r %02x\n", machine().describe_context(), data);
353346
354347   return data;
355348}
356349
357static WRITE8_HANDLER( einstein_kybintmsk_w )
350WRITE8_MEMBER(einstein_state::einstein_kybintmsk_w)
358351{
359   einstein_state *einstein = space->machine().driver_data<einstein_state>();
360352
361   logerror("%s: einstein_kybintmsk_w %02x\n", space->machine().describe_context(), data);
353   logerror("%s: einstein_kybintmsk_w %02x\n", machine().describe_context(), data);
362354
363355   /* set mask from bit 0 */
364356   if (data & 0x01)
365357   {
366358      logerror("key int is disabled\n");
367      einstein->m_interrupt_mask &= ~EINSTEIN_KEY_INT;
359      m_interrupt_mask &= ~EINSTEIN_KEY_INT;
368360   }
369361   else
370362   {
371363      logerror("key int is enabled\n");
372      einstein->m_interrupt_mask |= EINSTEIN_KEY_INT;
364      m_interrupt_mask |= EINSTEIN_KEY_INT;
373365   }
374366}
375367
376368/* writing to this I/O port sets the state of the mask; D0 is used */
377369/* writing 0 enables the /ADC interrupt */
378static WRITE8_HANDLER( einstein_adcintmsk_w )
370WRITE8_MEMBER(einstein_state::einstein_adcintmsk_w)
379371{
380   einstein_state *einstein = space->machine().driver_data<einstein_state>();
381372
382   logerror("%s: einstein_adcintmsk_w %02x\n", space->machine().describe_context(), data);
373   logerror("%s: einstein_adcintmsk_w %02x\n", machine().describe_context(), data);
383374
384375   if (data & 0x01)
385376   {
386377      logerror("adc int is disabled\n");
387      einstein->m_interrupt_mask &= ~EINSTEIN_ADC_INT;
378      m_interrupt_mask &= ~EINSTEIN_ADC_INT;
388379   }
389380   else
390381   {
391382      logerror("adc int is enabled\n");
392      einstein->m_interrupt_mask |= EINSTEIN_ADC_INT;
383      m_interrupt_mask |= EINSTEIN_ADC_INT;
393384   }
394385}
395386
396387/* writing to this I/O port sets the state of the mask; D0 is used */
397388/* writing 0 enables the /FIRE interrupt */
398static WRITE8_HANDLER( einstein_fire_int_w )
389WRITE8_MEMBER(einstein_state::einstein_fire_int_w)
399390{
400   einstein_state *einstein = space->machine().driver_data<einstein_state>();
401391
402   logerror("%s: einstein_fire_int_w %02x\n", space->machine().describe_context(), data);
392   logerror("%s: einstein_fire_int_w %02x\n", machine().describe_context(), data);
403393
404394   if (data & 0x01)
405395   {
406396      logerror("fire int is disabled\n");
407      einstein->m_interrupt_mask &= ~EINSTEIN_FIRE_INT;
397      m_interrupt_mask &= ~EINSTEIN_FIRE_INT;
408398   }
409399   else
410400   {
411401      logerror("fire int is enabled\n");
412      einstein->m_interrupt_mask |= EINSTEIN_FIRE_INT;
402      m_interrupt_mask |= EINSTEIN_FIRE_INT;
413403   }
414404}
415405
r14963r14964
538528   /* block 3, wd1770 floppy controller */
539529   AM_RANGE(0x18, 0x1b) AM_MIRROR(0xff04) AM_DEVREADWRITE(IC_I042, wd177x_t, read, write)
540530   /* block 4, internal controls */
541   AM_RANGE(0x20, 0x20) AM_MIRROR(0xff00) AM_READWRITE_LEGACY(einstein_kybintmsk_r, einstein_kybintmsk_w)
542   AM_RANGE(0x21, 0x21) AM_MIRROR(0xff00) AM_WRITE_LEGACY(einstein_adcintmsk_w)
531   AM_RANGE(0x20, 0x20) AM_MIRROR(0xff00) AM_READWRITE(einstein_kybintmsk_r, einstein_kybintmsk_w)
532   AM_RANGE(0x21, 0x21) AM_MIRROR(0xff00) AM_WRITE(einstein_adcintmsk_w)
543533   AM_RANGE(0x23, 0x23) AM_MIRROR(0xff00) AM_DEVWRITE_LEGACY(IC_I042, einstein_drsel_w)
544   AM_RANGE(0x24, 0x24) AM_MIRROR(0xff00) AM_WRITE_LEGACY(einstein_rom_w)
545   AM_RANGE(0x25, 0x25) AM_MIRROR(0xff00) AM_WRITE_LEGACY(einstein_fire_int_w)
534   AM_RANGE(0x24, 0x24) AM_MIRROR(0xff00) AM_WRITE(einstein_rom_w)
535   AM_RANGE(0x25, 0x25) AM_MIRROR(0xff00) AM_WRITE(einstein_fire_int_w)
546536   /* block 5, z80ctc */
547537   AM_RANGE(0x28, 0x2b) AM_MIRROR(0xff04) AM_DEVREADWRITE_LEGACY(IC_I058, z80ctc_r, z80ctc_w)
548538   /* block 6, z80pio */
r14963r14964
555545
556546static ADDRESS_MAP_START( einstein2_io, AS_IO, 8, einstein_state )
557547   AM_IMPORT_FROM(einstein_io)
558   AM_RANGE(0x40, 0x47) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE_LEGACY(einstein_80col_ram_r, einstein_80col_ram_w)
548   AM_RANGE(0x40, 0x47) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE(einstein_80col_ram_r, einstein_80col_ram_w)
559549   AM_RANGE(0x48, 0x48) AM_MIRROR(0xff00) AM_DEVWRITE("crtc", mc6845_device, address_w)
560550   AM_RANGE(0x49, 0x49) AM_MIRROR(0xff00) AM_DEVWRITE("crtc", mc6845_device, register_w)
561   AM_RANGE(0x4c, 0x4c) AM_MIRROR(0xff00) AM_READ_LEGACY(einstein_80col_state_r)
551   AM_RANGE(0x4c, 0x4c) AM_MIRROR(0xff00) AM_READ(einstein_80col_state_r)
562552ADDRESS_MAP_END
563553
564554
r14963r14964
734724   AY8910_LEGACY_OUTPUT,
735725   AY8910_DEFAULT_LOADS,
736726   DEVCB_NULL,
737   DEVCB_MEMORY_HANDLER(IC_I001, PROGRAM, einstein_keyboard_data_read),
738   DEVCB_MEMORY_HANDLER(IC_I001, PROGRAM, einstein_keyboard_line_write),
727   DEVCB_DRIVER_MEMBER(einstein_state, einstein_keyboard_data_read),
728   DEVCB_DRIVER_MEMBER(einstein_state, einstein_keyboard_line_write),
739729   DEVCB_NULL
740730};
741731
src/mess/drivers/ti99_2.c
r14963r14964
9595   int m_KeyRow;
9696   DECLARE_WRITE8_MEMBER(ti99_2_write_kbd);
9797   DECLARE_WRITE8_MEMBER(ti99_2_write_misc_cru);
98   DECLARE_READ8_MEMBER(ti99_2_read_kbd);
99   DECLARE_READ8_MEMBER(ti99_2_read_misc_cru);
98100};
99101
100102
r14963r14964
267269}
268270
269271/* read keys in the current row */
270static  READ8_HANDLER ( ti99_2_read_kbd )
272READ8_MEMBER(ti99_2_state::ti99_2_read_kbd)
271273{
272   ti99_2_state *state = space->machine().driver_data<ti99_2_state>();
273274   static const char *const keynames[] = { "LINE0", "LINE1", "LINE2", "LINE3", "LINE4", "LINE5", "LINE6", "LINE7" };
274275
275   return input_port_read(space->machine(), keynames[state->m_KeyRow]);
276   return input_port_read(machine(), keynames[m_KeyRow]);
276277}
277278
278static  READ8_HANDLER ( ti99_2_read_misc_cru )
279READ8_MEMBER(ti99_2_state::ti99_2_read_misc_cru)
279280{
280281   return 0;
281282}
282283
283284static ADDRESS_MAP_START(ti99_2_io, AS_IO, 8, ti99_2_state )
284   AM_RANGE(0x0E00, 0x0E7f) AM_READ_LEGACY(ti99_2_read_kbd)
285   AM_RANGE(0x0E80, 0x0Eff) AM_READ_LEGACY(ti99_2_read_misc_cru)
285   AM_RANGE(0x0E00, 0x0E7f) AM_READ(ti99_2_read_kbd)
286   AM_RANGE(0x0E80, 0x0Eff) AM_READ(ti99_2_read_misc_cru)
286287   AM_RANGE(0x7000, 0x73ff) AM_WRITE(ti99_2_write_kbd)
287288   AM_RANGE(0x7400, 0x77ff) AM_WRITE(ti99_2_write_misc_cru)
288289ADDRESS_MAP_END
src/mess/drivers/amstrad.c
r14963r14964
179179are not fully decoded by the CPC h/w. Doing it this way means
180180I can decode it myself and a lot of  software should work */
181181static ADDRESS_MAP_START(amstrad_io, AS_IO, 8, amstrad_state )
182   AM_RANGE(0x0000, 0xffff) AM_READWRITE_LEGACY(amstrad_cpc_io_r, amstrad_cpc_io_w )
182   AM_RANGE(0x0000, 0xffff) AM_READWRITE(amstrad_cpc_io_r, amstrad_cpc_io_w )
183183ADDRESS_MAP_END
184184
185185
r14963r14964
773773{
774774   AY8910_LEGACY_OUTPUT,
775775   AY8910_DEFAULT_LOADS,
776   DEVCB_MEMORY_HANDLER("maincpu", PROGRAM, amstrad_psg_porta_read),   /* portA read */
777   DEVCB_MEMORY_HANDLER("maincpu", PROGRAM, amstrad_psg_porta_read),   /* portB read */
776   DEVCB_DRIVER_MEMBER(amstrad_state, amstrad_psg_porta_read),   /* portA read */
777   DEVCB_DRIVER_MEMBER(amstrad_state, amstrad_psg_porta_read),   /* portB read */
778778   DEVCB_NULL,               /* portA write */
779779   DEVCB_NULL               /* portB write */
780780};
src/mess/drivers/ng_aes.c
r14963r14964
6161
6262   UINT8 *m_memcard_data;
6363   neocd_ctrl_t m_neocd_ctrl;
64   DECLARE_WRITE8_MEMBER(audio_cpu_clear_nmi_w);
65   DECLARE_WRITE16_MEMBER(io_control_w);
66   DECLARE_WRITE16_MEMBER(save_ram_w);
67   DECLARE_READ16_MEMBER(memcard_r);
68   DECLARE_WRITE16_MEMBER(memcard_w);
69   DECLARE_READ16_MEMBER(neocd_memcard_r);
70   DECLARE_WRITE16_MEMBER(neocd_memcard_w);
71   DECLARE_WRITE16_MEMBER(audio_command_w);
72   DECLARE_READ8_MEMBER(audio_command_r);
73   DECLARE_WRITE8_MEMBER(audio_result_w);
74   DECLARE_WRITE16_MEMBER(main_cpu_bank_select_w);
75   DECLARE_READ8_MEMBER(audio_cpu_bank_select_f000_f7ff_r);
76   DECLARE_READ8_MEMBER(audio_cpu_bank_select_e000_efff_r);
77   DECLARE_READ8_MEMBER(audio_cpu_bank_select_c000_dfff_r);
78   DECLARE_READ8_MEMBER(audio_cpu_bank_select_8000_bfff_r);
79   DECLARE_WRITE16_MEMBER(system_control_w);
80   DECLARE_READ16_MEMBER(neocd_control_r);
81   DECLARE_WRITE16_MEMBER(neocd_control_w);
82   DECLARE_READ16_MEMBER(neocd_transfer_r);
83   DECLARE_WRITE16_MEMBER(neocd_transfer_w);
84   DECLARE_READ16_MEMBER(aes_in0_r);
85   DECLARE_READ16_MEMBER(aes_in1_r);
86   DECLARE_READ16_MEMBER(aes_in2_r);
6487};
6588
6689
r14963r14964
232255}
233256
234257
235static WRITE8_HANDLER( audio_cpu_clear_nmi_w )
258WRITE8_MEMBER(ng_aes_state::audio_cpu_clear_nmi_w)
236259{
237   neogeo_state *state = space->machine().driver_data<neogeo_state>();
238   device_set_input_line(state->m_audiocpu, INPUT_LINE_NMI, CLEAR_LINE);
260   device_set_input_line(m_audiocpu, INPUT_LINE_NMI, CLEAR_LINE);
239261}
240262
241263
r14963r14964
293315
294316#endif
295317
296static WRITE16_HANDLER( io_control_w )
318WRITE16_MEMBER(ng_aes_state::io_control_w)
297319{
298   neogeo_state *state = space->machine().driver_data<neogeo_state>();
299320   switch (offset)
300321   {
301   case 0x00: select_controller(space->machine(), data & 0x00ff); break;
302//  case 0x18: set_output_latch(space->machine(), data & 0x00ff); break;
303//  case 0x20: set_output_data(space->machine(), data & 0x00ff); break;
304   case 0x28: upd4990a_control_16_w(state->m_upd4990a, 0, data, mem_mask); break;
322   case 0x00: select_controller(machine(), data & 0x00ff); break;
323//  case 0x18: set_output_latch(machine(), data & 0x00ff); break;
324//  case 0x20: set_output_data(machine(), data & 0x00ff); break;
325   case 0x28: upd4990a_control_16_w(m_upd4990a, 0, data, mem_mask); break;
305326//  case 0x30: break; // coin counters
306327//  case 0x31: break; // coin counters
307328//  case 0x32: break; // coin lockout
308329//  case 0x33: break; // coui lockout
309330
310331   default:
311      logerror("PC: %x  Unmapped I/O control write.  Offset: %x  Data: %x\n", cpu_get_pc(&space->device()), offset, data);
332      logerror("PC: %x  Unmapped I/O control write.  Offset: %x  Data: %x\n", cpu_get_pc(&space.device()), offset, data);
312333      break;
313334   }
314335}
r14963r14964
384405}
385406
386407
387static WRITE16_HANDLER( save_ram_w )
408WRITE16_MEMBER(ng_aes_state::save_ram_w)
388409{
389   neogeo_state *state = space->machine().driver_data<neogeo_state>();
390410
391   if (state->m_save_ram_unlocked)
411   if (m_save_ram_unlocked)
392412      COMBINE_DATA(&save_ram[offset]);
393413}
394414#endif
r14963r14964
412432      return (memcard_present(field.machine()) == -1) ? 0x07 : 0x00;
413433}
414434
415static READ16_HANDLER( memcard_r )
435READ16_MEMBER(ng_aes_state::memcard_r)
416436{
417   ng_aes_state *state = space->machine().driver_data<ng_aes_state>();
418437   UINT16 ret;
419438
420   if (memcard_present(space->machine()) != -1)
421      ret = state->m_memcard_data[offset] | 0xff00;
439   if (memcard_present(machine()) != -1)
440      ret = m_memcard_data[offset] | 0xff00;
422441   else
423442      ret = 0xffff;
424443
r14963r14964
426445}
427446
428447
429static WRITE16_HANDLER( memcard_w )
448WRITE16_MEMBER(ng_aes_state::memcard_w)
430449{
431   ng_aes_state *state = space->machine().driver_data<ng_aes_state>();
432450   if (ACCESSING_BITS_0_7)
433451   {
434      if (memcard_present(space->machine()) != -1)
435         state->m_memcard_data[offset] = data;
452      if (memcard_present(machine()) != -1)
453         m_memcard_data[offset] = data;
436454   }
437455}
438456
439457/* The NeoCD has an 8kB internal memory card, instead of memcard slots like the MVS and AES */
440static READ16_HANDLER( neocd_memcard_r )
458READ16_MEMBER(ng_aes_state::neocd_memcard_r)
441459{
442   ng_aes_state *state = space->machine().driver_data<ng_aes_state>();
443   return state->m_memcard_data[offset] | 0xff00;
460   return m_memcard_data[offset] | 0xff00;
444461}
445462
446463
447static WRITE16_HANDLER( neocd_memcard_w )
464WRITE16_MEMBER(ng_aes_state::neocd_memcard_w)
448465{
449   ng_aes_state *state = space->machine().driver_data<ng_aes_state>();
450466   if (ACCESSING_BITS_0_7)
451467   {
452      state->m_memcard_data[offset] = data;
468      m_memcard_data[offset] = data;
453469   }
454470}
455471
r14963r14964
481497 *
482498 *************************************/
483499
484static WRITE16_HANDLER( audio_command_w )
500WRITE16_MEMBER(ng_aes_state::audio_command_w)
485501{
486   ng_aes_state *state = space->machine().driver_data<ng_aes_state>();
487502   /* accessing the LSB only is not mapped */
488503   if (mem_mask != 0x00ff)
489504   {
490      state->soundlatch_byte_w(*space, 0, data >> 8);
505      soundlatch_byte_w(space, 0, data >> 8);
491506
492      audio_cpu_assert_nmi(space->machine());
507      audio_cpu_assert_nmi(machine());
493508
494509      /* boost the interleave to let the audio CPU read the command */
495      space->machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(50));
510      machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(50));
496511
497      if (LOG_CPU_COMM) logerror("MAIN CPU PC %06x: audio_command_w %04x - %04x\n", cpu_get_pc(&space->device()), data, mem_mask);
512      if (LOG_CPU_COMM) logerror("MAIN CPU PC %06x: audio_command_w %04x - %04x\n", cpu_get_pc(&space.device()), data, mem_mask);
498513   }
499514}
500515
501516
502static READ8_HANDLER( audio_command_r )
517READ8_MEMBER(ng_aes_state::audio_command_r)
503518{
504   ng_aes_state *state = space->machine().driver_data<ng_aes_state>();
505   UINT8 ret = state->soundlatch_byte_r(*space, 0);
519   UINT8 ret = soundlatch_byte_r(space, 0);
506520
507   if (LOG_CPU_COMM) logerror(" AUD CPU PC   %04x: audio_command_r %02x\n", cpu_get_pc(&space->device()), ret);
521   if (LOG_CPU_COMM) logerror(" AUD CPU PC   %04x: audio_command_r %02x\n", cpu_get_pc(&space.device()), ret);
508522
509523   /* this is a guess */
510524   audio_cpu_clear_nmi_w(space, 0, 0);
r14963r14964
513527}
514528
515529
516static WRITE8_HANDLER( audio_result_w )
530WRITE8_MEMBER(ng_aes_state::audio_result_w)
517531{
518   neogeo_state *state = space->machine().driver_data<neogeo_state>();
519532
520   if (LOG_CPU_COMM && (state->m_audio_result != data)) logerror(" AUD CPU PC   %04x: audio_result_w %02x\n", cpu_get_pc(&space->device()), data);
533   if (LOG_CPU_COMM && (m_audio_result != data)) logerror(" AUD CPU PC   %04x: audio_result_w %02x\n", cpu_get_pc(&space.device()), data);
521534
522   state->m_audio_result = data;
535   m_audio_result = data;
523536}
524537
525538
r14963r14964
565578
566579
567580
568static WRITE16_HANDLER( main_cpu_bank_select_w )
581WRITE16_MEMBER(ng_aes_state::main_cpu_bank_select_w)
569582{
570583   UINT32 bank_address;
571   UINT32 len = space->machine().region("maincpu")->bytes();
584   UINT32 len = machine().region("maincpu")->bytes();
572585
573586   if ((len <= 0x100000) && (data & 0x07))
574      logerror("PC %06x: warning: bankswitch to %02x but no banks available\n", cpu_get_pc(&space->device()), data);
587      logerror("PC %06x: warning: bankswitch to %02x but no banks available\n", cpu_get_pc(&space.device()), data);
575588   else
576589   {
577590      bank_address = ((data & 0x07) + 1) * 0x100000;
578591
579592      if (bank_address >= len)
580593      {
581         logerror("PC %06x: warning: bankswitch to empty bank %02x\n", cpu_get_pc(&space->device()), data);
594         logerror("PC %06x: warning: bankswitch to empty bank %02x\n", cpu_get_pc(&space.device()), data);
582595         bank_address = 0x100000;
583596      }
584597
585      neogeo_set_main_cpu_bank_address(space, bank_address);
598      neogeo_set_main_cpu_bank_address(&space, bank_address);
586599   }
587600}
588601
r14963r14964
632645}
633646
634647
635static READ8_HANDLER( audio_cpu_bank_select_f000_f7ff_r )
648READ8_MEMBER(ng_aes_state::audio_cpu_bank_select_f000_f7ff_r)
636649{
637   audio_cpu_bank_select(space, 0, offset >> 8);
650   audio_cpu_bank_select(&space, 0, offset >> 8);
638651
639652   return 0;
640653}
641654
642655
643static READ8_HANDLER( audio_cpu_bank_select_e000_efff_r )
656READ8_MEMBER(ng_aes_state::audio_cpu_bank_select_e000_efff_r)
644657{
645   audio_cpu_bank_select(space, 1, offset >> 8);
658   audio_cpu_bank_select(&space, 1, offset >> 8);
646659
647660   return 0;
648661}
649662
650663
651static READ8_HANDLER( audio_cpu_bank_select_c000_dfff_r )
664READ8_MEMBER(ng_aes_state::audio_cpu_bank_select_c000_dfff_r)
652665{
653   audio_cpu_bank_select(space, 2, offset >> 8);
666   audio_cpu_bank_select(&space, 2, offset >> 8);
654667
655668   return 0;
656669}
657670
658671
659static READ8_HANDLER( audio_cpu_bank_select_8000_bfff_r )
672READ8_MEMBER(ng_aes_state::audio_cpu_bank_select_8000_bfff_r)
660673{
661   audio_cpu_bank_select(space, 3, offset >> 8);
674   audio_cpu_bank_select(&space, 3, offset >> 8);
662675
663676   return 0;
664677}
r14963r14964
741754 *
742755 *************************************/
743756
744static WRITE16_HANDLER( system_control_w )
757WRITE16_MEMBER(ng_aes_state::system_control_w)
745758{
746759   if (ACCESSING_BITS_0_7)
747760   {
r14963r14964
750763      switch (offset & 0x07)
751764      {
752765      default:
753      case 0x00: neogeo_set_screen_dark(space->machine(), bit); break;
754      case 0x01: set_main_cpu_vector_table_source(space->machine(), bit);
755               set_audio_cpu_rom_source(space, bit); /* this is a guess */
766      case 0x00: neogeo_set_screen_dark(machine(), bit); break;
767      case 0x01: set_main_cpu_vector_table_source(machine(), bit);
768               set_audio_cpu_rom_source(&space, bit); /* this is a guess */
756769               break;
757      case 0x05: neogeo_set_fixed_layer_source(space->machine(), bit); break;
758//      case 0x06: set_save_ram_unlock(space->machine(), bit); break;
759      case 0x07: neogeo_set_palette_bank(space->machine(), bit); break;
770      case 0x05: neogeo_set_fixed_layer_source(machine(), bit); break;
771//      case 0x06: set_save_ram_unlock(machine(), bit); break;
772      case 0x07: neogeo_set_palette_bank(machine(), bit); break;
760773
761774      case 0x02: /* unknown - HC32 middle pin 1 */
762775      case 0x03: /* unknown - uPD4990 pin ? */
763776      case 0x04: /* unknown - HC32 middle pin 10 */
764         logerror("PC: %x  Unmapped system control write.  Offset: %x  Data: %x\n", cpu_get_pc(&space->device()), offset & 0x07, bit);
777         logerror("PC: %x  Unmapped system control write.  Offset: %x  Data: %x\n", cpu_get_pc(&space.device()), offset & 0x07, bit);
765778         break;
766779      }
767780
768      if (LOG_VIDEO_SYSTEM && ((offset & 0x07) != 0x06)) logerror("PC: %x  System control write.  Offset: %x  Data: %x\n", cpu_get_pc(&space->device()), offset & 0x07, bit);
781      if (LOG_VIDEO_SYSTEM && ((offset & 0x07) != 0x06)) logerror("PC: %x  System control write.  Offset: %x  Data: %x\n", cpu_get_pc(&space.device()), offset & 0x07, bit);
769782   }
770783}
771784
r14963r14964
856869   }
857870}
858871
859static READ16_HANDLER( neocd_control_r )
872READ16_MEMBER(ng_aes_state::neocd_control_r)
860873{
861   ng_aes_state *state = space->machine().driver_data<ng_aes_state>();
862874
863875   switch(offset)
864876   {
865877   case 0x64/2: // source address, high word
866      return (state->m_neocd_ctrl.addr_source >> 16) & 0xffff;
878      return (m_neocd_ctrl.addr_source >> 16) & 0xffff;
867879   case 0x66/2: // source address, low word
868      return state->m_neocd_ctrl.addr_source & 0xffff;
880      return m_neocd_ctrl.addr_source & 0xffff;
869881   case 0x68/2: // target address, high word
870      return (state->m_neocd_ctrl.addr_target >> 16) & 0xffff;
882      return (m_neocd_ctrl.addr_target >> 16) & 0xffff;
871883   case 0x6a/2: // target address, low word
872      return state->m_neocd_ctrl.addr_target & 0xffff;
884      return m_neocd_ctrl.addr_target & 0xffff;
873885   case 0x6c/2: // fill word
874      return state->m_neocd_ctrl.fill_word;
886      return m_neocd_ctrl.fill_word;
875887   case 0x70/2: // word count
876      return (state->m_neocd_ctrl.word_count >> 16) & 0xffff;
888      return (m_neocd_ctrl.word_count >> 16) & 0xffff;
877889   case 0x72/2:
878      return state->m_neocd_ctrl.word_count & 0xffff;
890      return m_neocd_ctrl.word_count & 0xffff;
879891   case 0x7e/2:  // DMA parameters
880892   case 0x80/2:
881893   case 0x82/2:
r14963r14964
885897   case 0x8a/2:
886898   case 0x8c/2:
887899   case 0x8e/2:
888      return state->m_neocd_ctrl.dma_mode[offset-(0x7e/2)];
900      return m_neocd_ctrl.dma_mode[offset-(0x7e/2)];
889901      break;
890902   case 0x105/2:
891      return state->m_neocd_ctrl.area_sel;
903      return m_neocd_ctrl.area_sel;
892904   case 0x11c/2:
893905      logerror("CTRL: Read region code.\n");
894906      return 0x0600;  // we'll just force USA region for now
895907   case 0x1a0/2:
896      return state->m_neocd_ctrl.spr_bank_sel;
908      return m_neocd_ctrl.spr_bank_sel;
897909      break;
898910   case 0x1a2/2:
899      return state->m_neocd_ctrl.pcm_bank_sel;
911      return m_neocd_ctrl.pcm_bank_sel;
900912      break;
901913   default:
902914      logerror("CTRL: Read offset %04x\n",offset);
r14963r14964
905917   return 0;
906918}
907919
908static WRITE16_HANDLER( neocd_control_w )
920WRITE16_MEMBER(ng_aes_state::neocd_control_w)
909921{
910   ng_aes_state *state = space->machine().driver_data<ng_aes_state>();
911922   switch(offset)
912923   {
913924   case 0x60/2: // Start DMA transfer
914925      if((data & 0xff) == 0x40)
915         neocd_do_dma(space);
926         neocd_do_dma(&space);
916927      break;
917928   case 0x64/2: // source address, high word
918      state->m_neocd_ctrl.addr_source = (state->m_neocd_ctrl.addr_source & 0x0000ffff) | (data << 16);
919      logerror("CTRL: Set source address to %08x\n",state->m_neocd_ctrl.addr_source);
929      m_neocd_ctrl.addr_source = (m_neocd_ctrl.addr_source & 0x0000ffff) | (data << 16);
930      logerror("CTRL: Set source address to %08x\n",m_neocd_ctrl.addr_source);
920931      break;
921932   case 0x66/2: // source address, low word
922      state->m_neocd_ctrl.addr_source = (state->m_neocd_ctrl.addr_source & 0xffff0000) | data;
923      logerror("CTRL: Set source address to %08x\n",state->m_neocd_ctrl.addr_source);
933      m_neocd_ctrl.addr_source = (m_neocd_ctrl.addr_source & 0xffff0000) | data;
934      logerror("CTRL: Set source address to %08x\n",m_neocd_ctrl.addr_source);
924935      break;
925936   case 0x68/2: // target address, high word
926      state->m_neocd_ctrl.addr_target = (state->m_neocd_ctrl.addr_target & 0x0000ffff) | (data << 16);
927      logerror("CTRL: Set target address to %08x\n",state->m_neocd_ctrl.addr_target);
937      m_neocd_ctrl.addr_target = (m_neocd_ctrl.addr_target & 0x0000ffff) | (data << 16);
938      logerror("CTRL: Set target address to %08x\n",m_neocd_ctrl.addr_target);
928939      break;
929940   case 0x6a/2: // target address, low word
930      state->m_neocd_ctrl.addr_target = (state->m_neocd_ctrl.addr_target & 0xffff0000) | data;
931      logerror("CTRL: Set target address to %08x\n",state->m_neocd_ctrl.addr_target);
941      m_neocd_ctrl.addr_target = (m_neocd_ctrl.addr_target & 0xffff0000) | data;
942      logerror("CTRL: Set target address to %08x\n",m_neocd_ctrl.addr_target);
932943      break;
933944   case 0x6c/2: // fill word
934      state->m_neocd_ctrl.fill_word = data;
945      m_neocd_ctrl.fill_word = data;
935946      logerror("CTRL: Set fill word to %04x\n",data);
936947      break;
937948   case 0x70/2: // word count
938      state->m_neocd_ctrl.word_count = (state->m_neocd_ctrl.word_count & 0x0000ffff) | (data << 16);
939      logerror("CTRL: Set word count to %i\n",state->m_neocd_ctrl.word_count);
949      m_neocd_ctrl.word_count = (m_neocd_ctrl.word_count & 0x0000ffff) | (data << 16);
950      logerror("CTRL: Set word count to %i\n",m_neocd_ctrl.word_count);
940951      break;
941952   case 0x72/2: // word count (low word)
942      state->m_neocd_ctrl.word_count = (state->m_neocd_ctrl.word_count & 0xffff0000) | data;
943      logerror("CTRL: Set word count to %i\n",state->m_neocd_ctrl.word_count);
953      m_neocd_ctrl.word_count = (m_neocd_ctrl.word_count & 0xffff0000) | data;
954      logerror("CTRL: Set word count to %i\n",m_neocd_ctrl.word_count);
944955      break;
945956   case 0x7e/2:  // DMA parameters
946957   case 0x80/2:
r14963r14964
951962   case 0x8a/2:
952963   case 0x8c/2:
953964   case 0x8e/2:
954      state->m_neocd_ctrl.dma_mode[offset-(0x7e/2)] = data;
965      m_neocd_ctrl.dma_mode[offset-(0x7e/2)] = data;
955966      logerror("CTRL: DMA parameter %i set to %04x\n",offset-(0x7e/2),data);
956967      break;
957968   case 0x104/2:
958      state->m_neocd_ctrl.area_sel = data & 0x00ff;
969      m_neocd_ctrl.area_sel = data & 0x00ff;
959970      logerror("CTRL: 0xExxxxx set to area %i\n",data & 0xff);
960971      break;
961972   case 0x140/2:  // end sprite transfer
962      video_reset_neogeo(space->machine());
973      video_reset_neogeo(machine());
963974      break;
964975   case 0x142/2:  // end PCM transfer
965976      break;
966977   case 0x146/2:  // end Z80 transfer
967      cputag_set_input_line(space->machine(),"audiocpu",INPUT_LINE_RESET,PULSE_LINE);
978      cputag_set_input_line(machine(),"audiocpu",INPUT_LINE_RESET,PULSE_LINE);
968979      break;
969980   case 0x148/2:  // end FIX transfer
970      video_reset_neogeo(space->machine());
981      video_reset_neogeo(machine());
971982      break;
972983   case 0x1a0/2:
973      state->m_neocd_ctrl.spr_bank_sel = data & 0xff;
984      m_neocd_ctrl.spr_bank_sel = data & 0xff;
974985      logerror("CTRL: Sprite area set to bank %i\n",data & 0xff);
975986      break;
976987   case 0x1a2/2:
977      state->m_neocd_ctrl.pcm_bank_sel = data & 0xff;
988      m_neocd_ctrl.pcm_bank_sel = data & 0xff;
978989      logerror("CTRL: PCM area set to bank %i\n",data & 0xff);
979990      break;
980991   default:
r14963r14964
987998 *  When the Z80 space is banked in to 0xe00000, only the low byte of each word is used
988999 */
9891000
990static READ16_HANDLER(neocd_transfer_r)
1001READ16_MEMBER(ng_aes_state::neocd_transfer_r)
9911002{
992   ng_aes_state *state = space->machine().driver_data<ng_aes_state>();
9931003   UINT16 ret = 0x0000;
994   UINT8* Z80 = space->machine().region("audiocpu")->base();
995   UINT8* PCM = space->machine().region("ymsnd")->base();
996   UINT8* FIX = space->machine().region("fixed")->base();
997   UINT16* SPR = (UINT16*)(*space->machine().region("sprites"));
1004   UINT8* Z80 = machine().region("audiocpu")->base();
1005   UINT8* PCM = machine().region("ymsnd")->base();
1006   UINT8* FIX = machine().region("fixed")->base();
1007   UINT16* SPR = (UINT16*)(*machine().region("sprites"));
9981008
999   switch(state->m_neocd_ctrl.area_sel)
1009   switch(m_neocd_ctrl.area_sel)
10001010   {
10011011   case NEOCD_AREA_AUDIO:
10021012      ret = Z80[offset & 0xffff] | 0xff00;
10031013      break;
10041014   case NEOCD_AREA_PCM:
1005      ret = PCM[offset + (0x100000*state->m_neocd_ctrl.pcm_bank_sel)] | 0xff00;
1015      ret = PCM[offset + (0x100000*m_neocd_ctrl.pcm_bank_sel)] | 0xff00;
10061016      break;
10071017   case NEOCD_AREA_SPR:
1008      ret = SPR[offset + (0x80000*state->m_neocd_ctrl.spr_bank_sel)];
1018      ret = SPR[offset + (0x80000*m_neocd_ctrl.spr_bank_sel)];
10091019      break;
10101020   case NEOCD_AREA_FIX:
10111021      ret = FIX[offset & 0x1ffff] | 0xff00;
r14963r14964
10151025   return ret;
10161026}
10171027
1018static WRITE16_HANDLER(neocd_transfer_w)
1028WRITE16_MEMBER(ng_aes_state::neocd_transfer_w)
10191029{
1020   ng_aes_state *state = space->machine().driver_data<ng_aes_state>();
1021   UINT8* Z80 = space->machine().region("audiocpu")->base();
1022   UINT8* PCM = space->machine().region("ymsnd")->base();
1023   UINT8* FIX = space->machine().region("fixed")->base();
1024   UINT16* SPR = (UINT16*)(*space->machine().region("sprites"));
1030   UINT8* Z80 = machine().region("audiocpu")->base();
1031   UINT8* PCM = machine().region("ymsnd")->base();
1032   UINT8* FIX = machine().region("fixed")->base();
1033   UINT16* SPR = (UINT16*)(*machine().region("sprites"));
10251034
1026   switch(state->m_neocd_ctrl.area_sel)
1035   switch(m_neocd_ctrl.area_sel)
10271036   {
10281037   case NEOCD_AREA_AUDIO:
10291038      Z80[offset & 0xffff] = data & 0xff;
10301039      break;
10311040   case NEOCD_AREA_PCM:
1032      PCM[offset + (0x100000*state->m_neocd_ctrl.pcm_bank_sel)] = data & 0xff;
1041      PCM[offset + (0x100000*m_neocd_ctrl.pcm_bank_sel)] = data & 0xff;
10331042      break;
10341043   case NEOCD_AREA_SPR:
1035      COMBINE_DATA(SPR+(offset + (0x80000*state->m_neocd_ctrl.spr_bank_sel)));
1044      COMBINE_DATA(SPR+(offset + (0x80000*m_neocd_ctrl.spr_bank_sel)));
10361045      break;
10371046   case NEOCD_AREA_FIX:
10381047      FIX[offset & 0x1ffff] = data & 0xff;
r14963r14964
10451054 * Handling selectable controller types
10461055 */
10471056
1048static READ16_HANDLER( aes_in0_r )
1057READ16_MEMBER(ng_aes_state::aes_in0_r)
10491058{
1050   neogeo_state *state = space->machine().driver_data<neogeo_state>();
10511059   UINT32 ret = 0xffff;
1052   UINT32 ctrl = input_port_read(space->machine(),"CTRLSEL");
1060   UINT32 ctrl = input_port_read(machine(),"CTRLSEL");
10531061
10541062   switch(ctrl & 0x0f)
10551063   {
r14963r14964
10571065      ret = 0xffff;
10581066      break;
10591067   case 0x01:
1060      ret = input_port_read(space->machine(),"IN0");
1068      ret = input_port_read(machine(),"IN0");
10611069      break;
10621070   case 0x02:
1063      switch (state->m_controller_select)
1071      switch (m_controller_select)
10641072      {
1065         case 0x09: ret = input_port_read(space->machine(), "MJ01_P1"); break;
1066         case 0x12: ret = input_port_read(space->machine(), "MJ02_P1"); break;
1067         case 0x1b: ret = input_port_read(space->machine(), "MJ03_P1"); break; /* player 1 normal inputs? */
1068         case 0x24: ret = input_port_read(space->machine(), "MJ04_P1"); break;
1073         case 0x09: ret = input_port_read(machine(), "MJ01_P1"); break;
1074         case 0x12: ret = input_port_read(machine(), "MJ02_P1"); break;
1075         case 0x1b: ret = input_port_read(machine(), "MJ03_P1"); break; /* player 1 normal inputs? */
1076         case 0x24: ret = input_port_read(machine(), "MJ04_P1"); break;
10691077         default:
1070            ret = input_port_read(space->machine(),"IN0");
1078            ret = input_port_read(machine(),"IN0");
10711079            break;
10721080      }
10731081      break;
r14963r14964
10761084   return ret;
10771085}
10781086
1079static READ16_HANDLER( aes_in1_r )
1087READ16_MEMBER(ng_aes_state::aes_in1_r)
10801088{
1081   neogeo_state *state = space->machine().driver_data<neogeo_state>();
10821089   UINT32 ret = 0xffff;
1083   UINT32 ctrl = input_port_read(space->machine(),"CTRLSEL");
1090   UINT32 ctrl = input_port_read(machine(),"CTRLSEL");
10841091
10851092   switch(ctrl & 0xf0)
10861093   {
r14963r14964
10881095      ret = 0xffff;
10891096      break;
10901097   case 0x10:
1091      ret = input_port_read(space->machine(),"IN1");
1098      ret = input_port_read(machine(),"IN1");
10921099      break;
10931100   case 0x20:
1094      switch (state->m_controller_select)
1101      switch (m_controller_select)
10951102      {
1096         case 0x09: ret = input_port_read(space->machine(), "MJ01_P2"); break;
1097         case 0x12: ret = input_port_read(space->machine(), "MJ02_P2"); break;
1098         case 0x1b: ret = input_port_read(space->machine(), "MJ03_P2"); break; /* player 2 normal inputs? */
1099         case 0x24: ret = input_port_read(space->machine(), "MJ04_P2"); break;
1103         case 0x09: ret = input_port_read(machine(), "MJ01_P2"); break;
1104         case 0x12: ret = input_port_read(machine(), "MJ02_P2"); break;
1105         case 0x1b: ret = input_port_read(machine(), "MJ03_P2"); break; /* player 2 normal inputs? */
1106         case 0x24: ret = input_port_read(machine(), "MJ04_P2"); break;
11001107         default:
1101            ret = input_port_read(space->machine(),"IN1");
1108            ret = input_port_read(machine(),"IN1");
11021109            break;
11031110      }
11041111      break;
r14963r14964
11081115}
11091116
11101117
1111static READ16_HANDLER(aes_in2_r)
1118READ16_MEMBER(ng_aes_state::aes_in2_r)
11121119{
1113   UINT32 in2 = input_port_read(space->machine(),"IN2");
1120   UINT32 in2 = input_port_read(machine(),"IN2");
11141121   UINT32 ret = in2;
1115   UINT32 sel = input_port_read(space->machine(),"CTRLSEL");
1116   neogeo_state *state = space->machine().driver_data<neogeo_state>();
1122   UINT32 sel = input_port_read(machine(),"CTRLSEL");
11171123
1118   if((sel & 0x02) && (state->m_controller_select == 0x24))
1124   if((sel & 0x02) && (m_controller_select == 0x24))
11191125      ret ^= 0x0200;
11201126
1121   if((sel & 0x20) && (state->m_controller_select == 0x24))
1127   if((sel & 0x20) && (m_controller_select == 0x24))
11221128      ret ^= 0x0800;
11231129
11241130   return ret;
r14963r14964
12481254
12491255   /* reset system control registers */
12501256   for (offs = 0; offs < 8; offs++)
1251      system_control_w(space, offs, 0, 0x00ff);
1257      state->system_control_w(*space, offs, 0, 0x00ff);
12521258
12531259   machine.device("maincpu")->reset();
12541260
r14963r14964
12791285   AM_RANGE(0x100000, 0x10ffff) AM_MIRROR(0x0f0000) AM_RAM
12801286   /* some games have protection devices in the 0x200000 region, it appears to map to cart space, not surprising, the ROM is read here too */
12811287   AM_RANGE(0x200000, 0x2fffff) AM_ROMBANK(NEOGEO_BANK_CARTRIDGE)
1282   AM_RANGE(0x2ffff0, 0x2fffff) AM_WRITE_LEGACY(main_cpu_bank_select_w)
1283   AM_RANGE(0x300000, 0x300001) AM_MIRROR(0x01ff7e) AM_READ_LEGACY(aes_in0_r)
1288   AM_RANGE(0x2ffff0, 0x2fffff) AM_WRITE(main_cpu_bank_select_w)
1289   AM_RANGE(0x300000, 0x300001) AM_MIRROR(0x01ff7e) AM_READ(aes_in0_r)
12841290   AM_RANGE(0x300080, 0x300081) AM_MIRROR(0x01ff7e) AM_READ_PORT("IN4")
12851291   AM_RANGE(0x300000, 0x300001) AM_MIRROR(0x01ffe0) AM_READ(neogeo_unmapped_r) AM_WRITENOP   // AES has no watchdog
1286   AM_RANGE(0x320000, 0x320001) AM_MIRROR(0x01fffe) AM_READ_PORT("IN3") AM_WRITE_LEGACY(audio_command_w)
1287   AM_RANGE(0x340000, 0x340001) AM_MIRROR(0x01fffe) AM_READ_LEGACY(aes_in1_r)
1292   AM_RANGE(0x320000, 0x320001) AM_MIRROR(0x01fffe) AM_READ_PORT("IN3") AM_WRITE(audio_command_w)
1293   AM_RANGE(0x340000, 0x340001) AM_MIRROR(0x01fffe) AM_READ(aes_in1_r)
12881294   AM_RANGE(0x360000, 0x37ffff) AM_READ(neogeo_unmapped_r)
1289   AM_RANGE(0x380000, 0x380001) AM_MIRROR(0x01fffe) AM_READ_LEGACY(aes_in2_r)
1290   AM_RANGE(0x380000, 0x38007f) AM_MIRROR(0x01ff80) AM_WRITE_LEGACY(io_control_w)
1291   AM_RANGE(0x3a0000, 0x3a001f) AM_MIRROR(0x01ffe0) AM_READ(neogeo_unmapped_r) AM_WRITE_LEGACY(system_control_w)
1295   AM_RANGE(0x380000, 0x380001) AM_MIRROR(0x01fffe) AM_READ(aes_in2_r)
1296   AM_RANGE(0x380000, 0x38007f) AM_MIRROR(0x01ff80) AM_WRITE(io_control_w)
1297   AM_RANGE(0x3a0000, 0x3a001f) AM_MIRROR(0x01ffe0) AM_READ(neogeo_unmapped_r) AM_WRITE(system_control_w)
12921298   AM_RANGE(0x3c0000, 0x3c0007) AM_MIRROR(0x01fff8) AM_READ(neogeo_video_register_r)
12931299   AM_RANGE(0x3c0000, 0x3c000f) AM_MIRROR(0x01fff0) AM_WRITE(neogeo_video_register_w)
12941300   AM_RANGE(0x3e0000, 0x3fffff) AM_READ(neogeo_unmapped_r)
12951301   AM_RANGE(0x400000, 0x401fff) AM_MIRROR(0x3fe000) AM_READWRITE(neogeo_paletteram_r, neogeo_paletteram_w)
1296   AM_RANGE(0x800000, 0x800fff) AM_READWRITE_LEGACY(memcard_r, memcard_w)
1302   AM_RANGE(0x800000, 0x800fff) AM_READWRITE(memcard_r, memcard_w)
12971303   AM_RANGE(0xc00000, 0xc1ffff) AM_MIRROR(0x0e0000) AM_ROMBANK(NEOGEO_BANK_BIOS)
1298   AM_RANGE(0xd00000, 0xd0ffff) AM_MIRROR(0x0f0000) AM_READ(neogeo_unmapped_r) //AM_RAM_WRITE_LEGACY(save_ram_w) AM_BASE_LEGACY(&save_ram)
1304   AM_RANGE(0xd00000, 0xd0ffff) AM_MIRROR(0x0f0000) AM_READ(neogeo_unmapped_r) //AM_RAM_WRITE(save_ram_w) AM_BASE_LEGACY(&save_ram)
12991305   AM_RANGE(0xe00000, 0xffffff) AM_READ(neogeo_unmapped_r)
13001306ADDRESS_MAP_END
13011307
r14963r14964
13051311   AM_RANGE(0x100000, 0x10ffff) AM_MIRROR(0x0f0000) AM_RAM AM_BASE_LEGACY(&neocd_work_ram)
13061312   /* some games have protection devices in the 0x200000 region, it appears to map to cart space, not surprising, the ROM is read here too */
13071313   AM_RANGE(0x200000, 0x2fffff) AM_ROMBANK(NEOGEO_BANK_CARTRIDGE)
1308   AM_RANGE(0x2ffff0, 0x2fffff) AM_WRITE_LEGACY(main_cpu_bank_select_w)
1309   AM_RANGE(0x300000, 0x300001) AM_MIRROR(0x01ff7e) AM_READ_LEGACY(aes_in0_r)
1314   AM_RANGE(0x2ffff0, 0x2fffff) AM_WRITE(main_cpu_bank_select_w)
1315   AM_RANGE(0x300000, 0x300001) AM_MIRROR(0x01ff7e) AM_READ(aes_in0_r)
13101316   AM_RANGE(0x300080, 0x300081) AM_MIRROR(0x01ff7e) AM_READ_PORT("IN4")
13111317   AM_RANGE(0x300000, 0x300001) AM_MIRROR(0x01ffe0) AM_READ(neogeo_unmapped_r) AM_WRITENOP   // AES has no watchdog
1312   AM_RANGE(0x320000, 0x320001) AM_MIRROR(0x01fffe) AM_READ_PORT("IN3") AM_WRITE_LEGACY(audio_command_w)
1313   AM_RANGE(0x340000, 0x340001) AM_MIRROR(0x01fffe) AM_READ_LEGACY(aes_in1_r)
1318   AM_RANGE(0x320000, 0x320001) AM_MIRROR(0x01fffe) AM_READ_PORT("IN3") AM_WRITE(audio_command_w)
1319   AM_RANGE(0x340000, 0x340001) AM_MIRROR(0x01fffe) AM_READ(aes_in1_r)
13141320   AM_RANGE(0x360000, 0x37ffff) AM_READ(neogeo_unmapped_r)
1315   AM_RANGE(0x380000, 0x380001) AM_MIRROR(0x01fffe) AM_READ_LEGACY(aes_in2_r)
1316   AM_RANGE(0x380000, 0x38007f) AM_MIRROR(0x01ff80) AM_WRITE_LEGACY(io_control_w)
1317   AM_RANGE(0x3a0000, 0x3a001f) AM_MIRROR(0x01ffe0) AM_READ(neogeo_unmapped_r) AM_WRITE_LEGACY(system_control_w)
1321   AM_RANGE(0x380000, 0x380001) AM_MIRROR(0x01fffe) AM_READ(aes_in2_r)
1322   AM_RANGE(0x380000, 0x38007f) AM_MIRROR(0x01ff80) AM_WRITE(io_control_w)
1323   AM_RANGE(0x3a0000, 0x3a001f) AM_MIRROR(0x01ffe0) AM_READ(neogeo_unmapped_r) AM_WRITE(system_control_w)
13181324   AM_RANGE(0x3c0000, 0x3c0007) AM_MIRROR(0x01fff8) AM_READ(neogeo_video_register_r)
13191325   AM_RANGE(0x3c0000, 0x3c000f) AM_MIRROR(0x01fff0) AM_WRITE(neogeo_video_register_w)
13201326   AM_RANGE(0x3e0000, 0x3fffff) AM_READ(neogeo_unmapped_r)
13211327   AM_RANGE(0x400000, 0x401fff) AM_MIRROR(0x3fe000) AM_READWRITE(neogeo_paletteram_r, neogeo_paletteram_w)
1322   AM_RANGE(0x800000, 0x803fff) AM_READWRITE_LEGACY(neocd_memcard_r, neocd_memcard_w)
1328   AM_RANGE(0x800000, 0x803fff) AM_READWRITE(neocd_memcard_r, neocd_memcard_w)
13231329   AM_RANGE(0xc00000, 0xcfffff) AM_ROMBANK(NEOGEO_BANK_BIOS)
1324   AM_RANGE(0xd00000, 0xd0ffff) AM_MIRROR(0x0f0000) AM_READ(neogeo_unmapped_r) //AM_RAM_WRITE_LEGACY(save_ram_w) AM_BASE_LEGACY(&save_ram)
1325   AM_RANGE(0xe00000, 0xefffff) AM_READWRITE_LEGACY(neocd_transfer_r,neocd_transfer_w)
1330   AM_RANGE(0xd00000, 0xd0ffff) AM_MIRROR(0x0f0000) AM_READ(neogeo_unmapped_r) //AM_RAM_WRITE(save_ram_w) AM_BASE_LEGACY(&save_ram)
1331   AM_RANGE(0xe00000, 0xefffff) AM_READWRITE(neocd_transfer_r,neocd_transfer_w)
13261332   AM_RANGE(0xf00000, 0xfeffff) AM_READ(neogeo_unmapped_r)
1327   AM_RANGE(0xff0000, 0xff01ff) AM_READWRITE_LEGACY(neocd_control_r, neocd_control_w) // CDROM / DMA
1333   AM_RANGE(0xff0000, 0xff01ff) AM_READWRITE(neocd_control_r, neocd_control_w) // CDROM / DMA
13281334   AM_RANGE(0xff0200, 0xffffff) AM_READ(neogeo_unmapped_r)
13291335ADDRESS_MAP_END
13301336
r14963r14964
13531359 *************************************/
13541360
13551361static ADDRESS_MAP_START( audio_io_map, AS_IO, 8, ng_aes_state )
1356  /*AM_RANGE(0x00, 0x00) AM_MIRROR(0xff00) AM_READWRITE_LEGACY(audio_command_r, audio_cpu_clear_nmi_w);*/  /* may not and NMI clear */
1357   AM_RANGE(0x00, 0x00) AM_MIRROR(0xff00) AM_READ_LEGACY(audio_command_r)
1362  /*AM_RANGE(0x00, 0x00) AM_MIRROR(0xff00) AM_READWRITE(audio_command_r, audio_cpu_clear_nmi_w);*/  /* may not and NMI clear */
1363   AM_RANGE(0x00, 0x00) AM_MIRROR(0xff00) AM_READ(audio_command_r)
13581364   AM_RANGE(0x04, 0x07) AM_MIRROR(0xff00) AM_DEVREADWRITE_LEGACY("ymsnd", ym2610_r, ym2610_w)
13591365   AM_RANGE(0x08, 0x08) AM_MIRROR(0xff00) /* write - NMI enable / acknowledge? (the data written doesn't matter) */
1360   AM_RANGE(0x08, 0x08) AM_MIRROR(0xfff0) AM_MASK(0xfff0) AM_READ_LEGACY(audio_cpu_bank_select_f000_f7ff_r)
1361   AM_RANGE(0x09, 0x09) AM_MIRROR(0xfff0) AM_MASK(0xfff0) AM_READ_LEGACY(audio_cpu_bank_select_e000_efff_r)
1362   AM_RANGE(0x0a, 0x0a) AM_MIRROR(0xfff0) AM_MASK(0xfff0) AM_READ_LEGACY(audio_cpu_bank_select_c000_dfff_r)
1363   AM_RANGE(0x0b, 0x0b) AM_MIRROR(0xfff0) AM_MASK(0xfff0) AM_READ_LEGACY(audio_cpu_bank_select_8000_bfff_r)
1364   AM_RANGE(0x0c, 0x0c) AM_MIRROR(0xff00) AM_WRITE_LEGACY(audio_result_w)
1366   AM_RANGE(0x08, 0x08) AM_MIRROR(0xfff0) AM_MASK(0xfff0) AM_READ(audio_cpu_bank_select_f000_f7ff_r)
1367   AM_RANGE(0x09, 0x09) AM_MIRROR(0xfff0) AM_MASK(0xfff0) AM_READ(audio_cpu_bank_select_e000_efff_r)
1368   AM_RANGE(0x0a, 0x0a) AM_MIRROR(0xfff0) AM_MASK(0xfff0) AM_READ(audio_cpu_bank_select_c000_dfff_r)
1369   AM_RANGE(0x0b, 0x0b) AM_MIRROR(0xfff0) AM_MASK(0xfff0) AM_READ(audio_cpu_bank_select_8000_bfff_r)
1370   AM_RANGE(0x0c, 0x0c) AM_MIRROR(0xff00) AM_WRITE(audio_result_w)
13651371   AM_RANGE(0x18, 0x18) AM_MIRROR(0xff00) /* write - NMI disable? (the data written doesn't matter) */
13661372ADDRESS_MAP_END
13671373
src/mess/drivers/sms.c
r14963r14964
7979   AM_RANGE(0x2000, 0x3fff) AM_ROMBANK("bank7")               /* switchable rom bank */
8080   AM_RANGE(0x4000, 0x5fff) AM_ROMBANK("bank3")               /* switchable rom bank */
8181   AM_RANGE(0x6000, 0x7fff) AM_ROMBANK("bank4")               /* switchable rom bank */
82   AM_RANGE(0x8000, 0x9fff) AM_READ_BANK("bank5") AM_WRITE_LEGACY(sms_cartram_w)   /* ROM bank / on-cart RAM */
83   AM_RANGE(0xa000, 0xbfff) AM_READ_BANK("bank6") AM_WRITE_LEGACY(sms_cartram2_w)   /* ROM bank / on-cart RAM */
82   AM_RANGE(0x8000, 0x9fff) AM_READ_BANK("bank5") AM_WRITE(sms_cartram_w)   /* ROM bank / on-cart RAM */
83   AM_RANGE(0xa000, 0xbfff) AM_READ_BANK("bank6") AM_WRITE(sms_cartram2_w)   /* ROM bank / on-cart RAM */
8484   AM_RANGE(0xc000, 0xdff7) AM_MIRROR(0x2000) AM_RAM         /* RAM (mirror at 0xE000) */
8585   AM_RANGE(0xdff8, 0xdfff) AM_RAM                  /* RAM "underneath" frame registers */
86   AM_RANGE(0xfff8, 0xfffb) AM_READWRITE_LEGACY(sms_sscope_r, sms_sscope_w)   /* 3-D glasses */
87   AM_RANGE(0xfffc, 0xffff) AM_READWRITE_LEGACY(sms_mapper_r, sms_mapper_w)   /* Bankswitch control */
86   AM_RANGE(0xfff8, 0xfffb) AM_READWRITE(sms_sscope_r, sms_sscope_w)   /* 3-D glasses */
87   AM_RANGE(0xfffc, 0xffff) AM_READWRITE(sms_mapper_r, sms_mapper_w)   /* Bankswitch control */
8888ADDRESS_MAP_END
8989
9090static ADDRESS_MAP_START( sms_mem, AS_PROGRAM, 8, sms_state )
r14963r14964
9393   AM_RANGE(0x2000, 0x3fff) AM_ROMBANK("bank7")               /* switchable rom bank */
9494   AM_RANGE(0x4000, 0x5fff) AM_ROMBANK("bank3")               /* switchable rom bank */
9595   AM_RANGE(0x6000, 0x7fff) AM_ROMBANK("bank4")               /* switchable rom bank */
96   AM_RANGE(0x8000, 0x9fff) AM_READ_BANK("bank5") AM_WRITE_LEGACY(sms_cartram_w)   /* ROM bank / on-cart RAM */
97   AM_RANGE(0xa000, 0xbfff) AM_READ_BANK("bank6") AM_WRITE_LEGACY(sms_cartram2_w)   /* ROM bank / on-cart RAM */
96   AM_RANGE(0x8000, 0x9fff) AM_READ_BANK("bank5") AM_WRITE(sms_cartram_w)   /* ROM bank / on-cart RAM */
97   AM_RANGE(0xa000, 0xbfff) AM_READ_BANK("bank6") AM_WRITE(sms_cartram2_w)   /* ROM bank / on-cart RAM */
9898   AM_RANGE(0xc000, 0xdffb) AM_MIRROR(0x2000) AM_RAM         /* RAM (mirror at 0xE000) */
9999   AM_RANGE(0xdffc, 0xdfff) AM_RAM                  /* RAM "underneath" frame registers */
100   AM_RANGE(0xfffc, 0xffff) AM_READWRITE_LEGACY(sms_mapper_r, sms_mapper_w)   /* Bankswitch control */
100   AM_RANGE(0xfffc, 0xffff) AM_READWRITE(sms_mapper_r, sms_mapper_w)   /* Bankswitch control */
101101ADDRESS_MAP_END
102102
103103static ADDRESS_MAP_START( sms_store_mem, AS_PROGRAM, 8, sms_state )
104104   AM_RANGE(0x0000, 0x3fff) AM_ROM                  /* BIOS */
105105   AM_RANGE(0x4000, 0x47ff) AM_RAM                  /* RAM */
106106   AM_RANGE(0x6000, 0x7fff) AM_ROMBANK("bank10")               /* Cartridge/card peek area */
107   AM_RANGE(0x8000, 0x8000) AM_READWRITE_LEGACY(sms_store_control_r, sms_store_control_w)   /* Control */
108   AM_RANGE(0xc000, 0xc000) AM_READWRITE_LEGACY(sms_store_cart_select_r, sms_store_cart_select_w)   /* cartridge/card slot selector */
109   AM_RANGE(0xd800, 0xd800) AM_READ_LEGACY(sms_store_select1)         /* Game selector port #1 */
110   AM_RANGE(0xdc00, 0xdc00) AM_READ_LEGACY(sms_store_select2)         /* Game selector port #2 */
107   AM_RANGE(0x8000, 0x8000) AM_READWRITE(sms_store_control_r, sms_store_control_w)   /* Control */
108   AM_RANGE(0xc000, 0xc000) AM_READWRITE(sms_store_cart_select_r, sms_store_cart_select_w)   /* cartridge/card slot selector */
109   AM_RANGE(0xd800, 0xd800) AM_READ(sms_store_select1)         /* Game selector port #1 */
110   AM_RANGE(0xdc00, 0xdc00) AM_READ(sms_store_select2)         /* Game selector port #2 */
111111ADDRESS_MAP_END
112112
113113static ADDRESS_MAP_START( sms_io, AS_IO, 8, sms_state )
114114   ADDRESS_MAP_GLOBAL_MASK(0xff)
115115   ADDRESS_MAP_UNMAP_HIGH
116   AM_RANGE(0x00, 0x00) AM_MIRROR(0x3e) AM_WRITE_LEGACY(sms_bios_w)
117   AM_RANGE(0x01, 0x01) AM_MIRROR(0x3e) AM_WRITE_LEGACY(sms_io_control_w)
118   AM_RANGE(0x40, 0x7f)                 AM_READ_LEGACY(sms_count_r)
116   AM_RANGE(0x00, 0x00) AM_MIRROR(0x3e) AM_WRITE(sms_bios_w)
117   AM_RANGE(0x01, 0x01) AM_MIRROR(0x3e) AM_WRITE(sms_io_control_w)
118   AM_RANGE(0x40, 0x7f)                 AM_READ(sms_count_r)
119119   AM_RANGE(0x40, 0x7f)                 AM_DEVWRITE_LEGACY("segapsg", sn76496_w)
120120   AM_RANGE(0x80, 0x80) AM_MIRROR(0x3e) AM_DEVREADWRITE("sms_vdp", sega315_5124_device, vram_read, vram_write)
121121   AM_RANGE(0x81, 0x81) AM_MIRROR(0x3e) AM_DEVREADWRITE("sms_vdp", sega315_5124_device, register_read, register_write)
122   AM_RANGE(0xc0, 0xc0) AM_MIRROR(0x1e) AM_READ_LEGACY(sms_input_port_0_r)
123   AM_RANGE(0xc1, 0xc1) AM_MIRROR(0x1e) AM_READ_LEGACY(sms_input_port_1_r)
124   AM_RANGE(0xe0, 0xe0) AM_MIRROR(0x0e) AM_READ_LEGACY(sms_input_port_0_r)
125   AM_RANGE(0xe1, 0xe1) AM_MIRROR(0x0e) AM_READ_LEGACY(sms_input_port_1_r)
126   AM_RANGE(0xf0, 0xf0)                 AM_READWRITE_LEGACY(sms_input_port_0_r, sms_ym2413_register_port_0_w)
127   AM_RANGE(0xf1, 0xf1)                 AM_READWRITE_LEGACY(sms_input_port_1_r, sms_ym2413_data_port_0_w)
128   AM_RANGE(0xf2, 0xf2)                 AM_READWRITE_LEGACY(sms_fm_detect_r, sms_fm_detect_w)
129   AM_RANGE(0xf3, 0xf3)                 AM_READ_LEGACY(sms_input_port_1_r)
130   AM_RANGE(0xf4, 0xf4) AM_MIRROR(0x02) AM_READ_LEGACY(sms_input_port_0_r)
131   AM_RANGE(0xf5, 0xf5) AM_MIRROR(0x02) AM_READ_LEGACY(sms_input_port_1_r)
132   AM_RANGE(0xf8, 0xf8) AM_MIRROR(0x06) AM_READ_LEGACY(sms_input_port_0_r)
133   AM_RANGE(0xf9, 0xf9) AM_MIRROR(0x06) AM_READ_LEGACY(sms_input_port_1_r)
122   AM_RANGE(0xc0, 0xc0) AM_MIRROR(0x1e) AM_READ(sms_input_port_0_r)
123   AM_RANGE(0xc1, 0xc1) AM_MIRROR(0x1e) AM_READ(sms_input_port_1_r)
124   AM_RANGE(0xe0, 0xe0) AM_MIRROR(0x0e) AM_READ(sms_input_port_0_r)
125   AM_RANGE(0xe1, 0xe1) AM_MIRROR(0x0e) AM_READ(sms_input_port_1_r)
126   AM_RANGE(0xf0, 0xf0)                 AM_READWRITE(sms_input_port_0_r, sms_ym2413_register_port_0_w)
127   AM_RANGE(0xf1, 0xf1)                 AM_READWRITE(sms_input_port_1_r, sms_ym2413_data_port_0_w)
128   AM_RANGE(0xf2, 0xf2)                 AM_READWRITE(sms_fm_detect_r, sms_fm_detect_w)
129   AM_RANGE(0xf3, 0xf3)                 AM_READ(sms_input_port_1_r)
130   AM_RANGE(0xf4, 0xf4) AM_MIRROR(0x02) AM_READ(sms_input_port_0_r)
131   AM_RANGE(0xf5, 0xf5) AM_MIRROR(0x02) AM_READ(sms_input_port_1_r)
132   AM_RANGE(0xf8, 0xf8) AM_MIRROR(0x06) AM_READ(sms_input_port_0_r)
133   AM_RANGE(0xf9, 0xf9) AM_MIRROR(0x06) AM_READ(sms_input_port_1_r)
134134ADDRESS_MAP_END
135135
136136static ADDRESS_MAP_START( gg_io, AS_IO, 8, sms_state )
137137   ADDRESS_MAP_GLOBAL_MASK(0xff)
138138   ADDRESS_MAP_UNMAP_HIGH
139   AM_RANGE(0x00, 0x00)                 AM_READ_LEGACY(gg_input_port_2_r)
140   AM_RANGE(0x01, 0x05)                 AM_READWRITE_LEGACY(gg_sio_r, gg_sio_w)
139   AM_RANGE(0x00, 0x00)                 AM_READ(gg_input_port_2_r)
140   AM_RANGE(0x01, 0x05)                 AM_READWRITE(gg_sio_r, gg_sio_w)
141141   AM_RANGE(0x06, 0x06)                 AM_DEVWRITE_LEGACY("gamegear", sn76496_stereo_w)
142   AM_RANGE(0x07, 0x07)                 AM_WRITE_LEGACY(sms_io_control_w)
143   AM_RANGE(0x08, 0x08) AM_MIRROR(0x06) AM_WRITE_LEGACY(sms_bios_w)
144   AM_RANGE(0x09, 0x09) AM_MIRROR(0x06) AM_WRITE_LEGACY(sms_io_control_w)
145   AM_RANGE(0x10, 0x10) AM_MIRROR(0x0e) AM_WRITE_LEGACY(sms_bios_w)
146   AM_RANGE(0x11, 0x11) AM_MIRROR(0x0e) AM_WRITE_LEGACY(sms_io_control_w)
147   AM_RANGE(0x20, 0x20) AM_MIRROR(0x1e) AM_WRITE_LEGACY(sms_bios_w)
148   AM_RANGE(0x21, 0x21) AM_MIRROR(0x1e) AM_WRITE_LEGACY(sms_io_control_w)
149   AM_RANGE(0x40, 0x7f)                 AM_READ_LEGACY(sms_count_r)
142   AM_RANGE(0x07, 0x07)                 AM_WRITE(sms_io_control_w)
143   AM_RANGE(0x08, 0x08) AM_MIRROR(0x06) AM_WRITE(sms_bios_w)
144   AM_RANGE(0x09, 0x09) AM_MIRROR(0x06) AM_WRITE(sms_io_control_w)
145   AM_RANGE(0x10, 0x10) AM_MIRROR(0x0e) AM_WRITE(sms_bios_w)
146   AM_RANGE(0x11, 0x11) AM_MIRROR(0x0e) AM_WRITE(sms_io_control_w)
147   AM_RANGE(0x20, 0x20) AM_MIRROR(0x1e) AM_WRITE(sms_bios_w)
148   AM_RANGE(0x21, 0x21) AM_MIRROR(0x1e) AM_WRITE(sms_io_control_w)
149   AM_RANGE(0x40, 0x7f)                 AM_READ(sms_count_r)
150150   AM_RANGE(0x40, 0x7f)                 AM_DEVWRITE_LEGACY("gamegear", sn76496_w)
151151   AM_RANGE(0x80, 0x80) AM_MIRROR(0x3e) AM_DEVREADWRITE("sms_vdp", sega315_5124_device, vram_read, vram_write)
152152   AM_RANGE(0x81, 0x81) AM_MIRROR(0x3e) AM_DEVREADWRITE("sms_vdp", sega315_5124_device, register_read, register_write)
src/mess/drivers/poly88.c
r14963r14964
2828   ADDRESS_MAP_GLOBAL_MASK(0xff)
2929   AM_RANGE(0x00, 0x00) AM_DEVREADWRITE("uart", i8251_device, data_r, data_w)
3030   AM_RANGE(0x01, 0x01) AM_DEVREADWRITE("uart", i8251_device, status_r, control_w)
31   AM_RANGE(0x04, 0x04) AM_WRITE_LEGACY(poly88_baud_rate_w)
32   AM_RANGE(0x08, 0x08) AM_WRITE_LEGACY(poly88_intr_w)
33   AM_RANGE(0xf8, 0xf8) AM_READ_LEGACY(poly88_keyboard_r)
31   AM_RANGE(0x04, 0x04) AM_WRITE(poly88_baud_rate_w)
32   AM_RANGE(0x08, 0x08) AM_WRITE(poly88_intr_w)
33   AM_RANGE(0xf8, 0xf8) AM_READ(poly88_keyboard_r)
3434ADDRESS_MAP_END
3535
3636static ADDRESS_MAP_START(poly8813_mem, AS_PROGRAM, 8, poly88_state )
src/mess/drivers/psx.c
r14963r14964
4949   UINT8 m_cd_io_status;
5050   UINT8 m_cd_param[8];
5151   UINT8 m_cd_result[8];
52   DECLARE_READ8_MEMBER(psx_cd_r);
53   DECLARE_WRITE8_MEMBER(psx_cd_w);
5254};
5355
5456
r14963r14964
670672   printf("cd_dma_write?!: addr %x, size %x\n", n_address, n_size);
671673}
672674
673static READ8_HANDLER( psx_cd_r )
675READ8_MEMBER(psx1_state::psx_cd_r)
674676{
675   psxcd_device *psxcd = space->machine().device<psxcd_device>(PSXCD_TAG);
677   psxcd_device *psxcd = machine().device<psxcd_device>(PSXCD_TAG);
676678
677679   return psxcd->read_byte(offset);
678680}
679681
680static WRITE8_HANDLER( psx_cd_w )
682WRITE8_MEMBER(psx1_state::psx_cd_w)
681683{
682   psxcd_device *psxcd = space->machine().device<psxcd_device>(PSXCD_TAG);
684   psxcd_device *psxcd = machine().device<psxcd_device>(PSXCD_TAG);
683685
684686   psxcd->write_byte(offset, data);
685687}
686688
687689static ADDRESS_MAP_START( psx_map, AS_PROGRAM, 32, psx1_state )
688690   AM_RANGE(0x00000000, 0x001fffff) AM_RAM   AM_SHARE("share1") /* ram */
689   AM_RANGE(0x1f801800, 0x1f801803) AM_READWRITE8_LEGACY(psx_cd_r, psx_cd_w, 0xffffffff)
691   AM_RANGE(0x1f801800, 0x1f801803) AM_READWRITE8(psx_cd_r, psx_cd_w, 0xffffffff)
690692   AM_RANGE(0x1fc00000, 0x1fc7ffff) AM_ROM AM_SHARE("share2") AM_REGION("user1", 0) /* bios */
691693   AM_RANGE(0x80000000, 0x801fffff) AM_RAM AM_SHARE("share1") /* ram mirror */
692694   AM_RANGE(0x80600000, 0x807fffff) AM_RAM AM_SHARE("share1") /* ram mirror */
src/mess/drivers/llc.c
r14963r14964
4242static ADDRESS_MAP_START( llc2_io, AS_IO, 8, llc_state )
4343   ADDRESS_MAP_GLOBAL_MASK(0xff)
4444   ADDRESS_MAP_UNMAP_HIGH
45   AM_RANGE(0xE0, 0xE3) AM_WRITE_LEGACY(llc2_rom_disable_w)
45   AM_RANGE(0xE0, 0xE3) AM_WRITE(llc2_rom_disable_w)
4646   AM_RANGE(0xE8, 0xEB) AM_DEVREADWRITE_LEGACY("z80pio", z80pio_cd_ba_r, z80pio_cd_ba_w)
47   AM_RANGE(0xEC, 0xEC) AM_WRITE_LEGACY(llc2_basic_enable_w)
47   AM_RANGE(0xEC, 0xEC) AM_WRITE(llc2_basic_enable_w)
4848   AM_RANGE(0xF8, 0xFB) AM_DEVREADWRITE_LEGACY("z80ctc", z80ctc_r, z80ctc_w)
4949ADDRESS_MAP_END
5050
src/mess/drivers/samcoupe.c
r14963r14964
6060    I/O PORTS
6161***************************************************************************/
6262
63static READ8_HANDLER( samcoupe_disk_r )
63READ8_MEMBER(samcoupe_state::samcoupe_disk_r)
6464{
65   wd1772_t *fdc = space->machine().device<wd1772_t>("wd1772");
65   wd1772_t *fdc = machine().device<wd1772_t>("wd1772");
6666
6767   /* drive and side is encoded into bit 5 and 3 */
68   floppy_connector *con = space->machine().device<floppy_connector>(BIT(offset, 4) ? "fd1" : "fd0");
68   floppy_connector *con = machine().device<floppy_connector>(BIT(offset, 4) ? "fd1" : "fd0");
6969   floppy_image_device *floppy = con ? con->get_device() : 0;
7070
7171   if(floppy)
r14963r14964
8484   return 0xff;
8585}
8686
87static WRITE8_HANDLER( samcoupe_disk_w )
87WRITE8_MEMBER(samcoupe_state::samcoupe_disk_w)
8888{
89   wd1772_t *fdc = space->machine().device<wd1772_t>("wd1772");
89   wd1772_t *fdc = machine().device<wd1772_t>("wd1772");
9090
9191   /* drive and side is encoded into bit 5 and 3 */
92   floppy_connector *con = space->machine().device<floppy_connector>(BIT(offset, 4) ? "fd1" : "fd0");
92   floppy_connector *con = machine().device<floppy_connector>(BIT(offset, 4) ? "fd1" : "fd0");
9393   floppy_image_device *floppy = con ? con->get_device() : 0;
9494
9595   if(floppy)
r14963r14964
106106   }
107107}
108108
109static READ8_HANDLER( samcoupe_pen_r )
109READ8_MEMBER(samcoupe_state::samcoupe_pen_r)
110110{
111   screen_device *scr = space->machine().primary_screen;
111   screen_device *scr = machine().primary_screen;
112112   UINT8 data;
113113
114114   if (offset & 0x100)
r14963r14964
130130   return data;
131131}
132132
133static WRITE8_HANDLER( samcoupe_clut_w )
133WRITE8_MEMBER(samcoupe_state::samcoupe_clut_w)
134134{
135   samcoupe_state *state = space->machine().driver_data<samcoupe_state>();
136   state->m_clut[(offset >> 8) & 0x0f] = data & 0x7f;
135   m_clut[(offset >> 8) & 0x0f] = data & 0x7f;
137136}
138137
139static READ8_HANDLER( samcoupe_status_r )
138READ8_MEMBER(samcoupe_state::samcoupe_status_r)
140139{
141   samcoupe_state *state = space->machine().driver_data<samcoupe_state>();
142140   UINT8 data = 0xe0;
143141
144142   /* bit 5-7, keyboard input */
145   if (!BIT(offset,  8)) data &= input_port_read(space->machine(), "keyboard_row_fe") & 0xe0;
146   if (!BIT(offset,  9)) data &= input_port_read(space->machine(), "keyboard_row_fd") & 0xe0;
147   if (!BIT(offset, 10)) data &= input_port_read(space->machine(), "keyboard_row_fb") & 0xe0;
148   if (!BIT(offset, 11)) data &= input_port_read(space->machine(), "keyboard_row_f7") & 0xe0;
149   if (!BIT(offset, 12)) data &= input_port_read(space->machine(), "keyboard_row_ef") & 0xe0;
150   if (!BIT(offset, 13)) data &= input_port_read(space->machine(), "keyboard_row_df") & 0xe0;
151   if (!BIT(offset, 14)) data &= input_port_read(space->machine(), "keyboard_row_bf") & 0xe0;
152   if (!BIT(offset, 15)) data &= input_port_read(space->machine(), "keyboard_row_7f") & 0xe0;
143   if (!BIT(offset,  8)) data &= input_port_read(machine(), "keyboard_row_fe") & 0xe0;
144   if (!BIT(offset,  9)) data &= input_port_read(machine(), "keyboard_row_fd") & 0xe0;
145   if (!BIT(offset, 10)) data &= input_port_read(machine(), "keyboard_row_fb") & 0xe0;
146   if (!BIT(offset, 11)) data &= input_port_read(machine(), "keyboard_row_f7") & 0xe0;
147   if (!BIT(offset, 12)) data &= input_port_read(machine(), "keyboard_row_ef") & 0xe0;
148   if (!BIT(offset, 13)) data &= input_port_read(machine(), "keyboard_row_df") & 0xe0;
149   if (!BIT(offset, 14)) data &= input_port_read(machine(), "keyboard_row_bf") & 0xe0;
150   if (!BIT(offset, 15)) data &= input_port_read(machine(), "keyboard_row_7f") & 0xe0;
153151
154152   /* bit 0-4, interrupt source */
155   data |= state->m_status;
153   data |= m_status;
156154
157155   return data;
158156}
159157
160static WRITE8_HANDLER( samcoupe_line_int_w )
158WRITE8_MEMBER(samcoupe_state::samcoupe_line_int_w)
161159{
162   samcoupe_state *state = space->machine().driver_data<samcoupe_state>();
163   state->m_line_int = data;
160   m_line_int = data;
164161}
165162
166static READ8_HANDLER( samcoupe_lmpr_r )
163READ8_MEMBER(samcoupe_state::samcoupe_lmpr_r)
167164{
168   samcoupe_state *state = space->machine().driver_data<samcoupe_state>();
169   return state->m_lmpr;
165   return m_lmpr;
170166}
171167
172static WRITE8_HANDLER( samcoupe_lmpr_w )
168WRITE8_MEMBER(samcoupe_state::samcoupe_lmpr_w)
173169{
174   address_space *space_program = space->machine().device("maincpu")->memory().space(AS_PROGRAM);
175   samcoupe_state *state = space->machine().driver_data<samcoupe_state>();
170   address_space *space_program = machine().device("maincpu")->memory().space(AS_PROGRAM);
176171
177   state->m_lmpr = data;
172   m_lmpr = data;
178173   samcoupe_update_memory(space_program);
179174}
180175
181static READ8_HANDLER( samcoupe_hmpr_r )
176READ8_MEMBER(samcoupe_state::samcoupe_hmpr_r)
182177{
183   samcoupe_state *state = space->machine().driver_data<samcoupe_state>();
184   return state->m_hmpr;
178   return m_hmpr;
185179}
186180
187static WRITE8_HANDLER( samcoupe_hmpr_w )
181WRITE8_MEMBER(samcoupe_state::samcoupe_hmpr_w)
188182{
189   address_space *space_program = space->machine().device("maincpu")->memory().space(AS_PROGRAM);
190   samcoupe_state *state = space->machine().driver_data<samcoupe_state>();
183   address_space *space_program = machine().device("maincpu")->memory().space(AS_PROGRAM);
191184
192   state->m_hmpr = data;
185   m_hmpr = data;
193186   samcoupe_update_memory(space_program);
194187}
195188
196static READ8_HANDLER( samcoupe_vmpr_r )
189READ8_MEMBER(samcoupe_state::samcoupe_vmpr_r)
197190{
198   samcoupe_state *state = space->machine().driver_data<samcoupe_state>();
199   return state->m_vmpr;
191   return m_vmpr;
200192}
201193
202static WRITE8_HANDLER( samcoupe_vmpr_w )
194WRITE8_MEMBER(samcoupe_state::samcoupe_vmpr_w)
203195{
204   address_space *space_program = space->machine().device("maincpu")->memory().space(AS_PROGRAM);
205   samcoupe_state *state = space->machine().driver_data<samcoupe_state>();
196   address_space *space_program = machine().device("maincpu")->memory().space(AS_PROGRAM);
206197
207   state->m_vmpr = data;
198   m_vmpr = data;
208199   samcoupe_update_memory(space_program);
209200}
210201
211static READ8_HANDLER( samcoupe_midi_r )
202READ8_MEMBER(samcoupe_state::samcoupe_midi_r)
212203{
213   logerror("%s: read from midi port\n", space->machine().describe_context());
204   logerror("%s: read from midi port\n", machine().describe_context());
214205   return 0xff;
215206}
216207
217static WRITE8_HANDLER( samcoupe_midi_w )
208WRITE8_MEMBER(samcoupe_state::samcoupe_midi_w)
218209{
219   logerror("%s: write to midi port: 0x%02x\n", space->machine().describe_context(), data);
210   logerror("%s: write to midi port: 0x%02x\n", machine().describe_context(), data);
220211}
221212
222static READ8_HANDLER( samcoupe_keyboard_r )
213READ8_MEMBER(samcoupe_state::samcoupe_keyboard_r)
223214{
224   cassette_image_device *cassette = space->machine().device<cassette_image_device>(CASSETTE_TAG);
215   cassette_image_device *cassette = machine().device<cassette_image_device>(CASSETTE_TAG);
225216   UINT8 data = 0x1f;
226217
227218   /* bit 0-4, keyboard input */
228   if (!BIT(offset,  8)) data &= input_port_read(space->machine(), "keyboard_row_fe") & 0x1f;
229   if (!BIT(offset,  9)) data &= input_port_read(space->machine(), "keyboard_row_fd") & 0x1f;
230   if (!BIT(offset, 10)) data &= input_port_read(space->machine(), "keyboard_row_fb") & 0x1f;
231   if (!BIT(offset, 11)) data &= input_port_read(space->machine(), "keyboard_row_f7") & 0x1f;
232   if (!BIT(offset, 12)) data &= input_port_read(space->machine(), "keyboard_row_ef") & 0x1f;
233   if (!BIT(offset, 13)) data &= input_port_read(space->machine(), "keyboard_row_df") & 0x1f;
234   if (!BIT(offset, 14)) data &= input_port_read(space->machine(), "keyboard_row_bf") & 0x1f;
235   if (!BIT(offset, 15)) data &= input_port_read(space->machine(), "keyboard_row_7f") & 0x1f;
219   if (!BIT(offset,  8)) data &= input_port_read(machine(), "keyboard_row_fe") & 0x1f;
220   if (!BIT(offset,  9)) data &= input_port_read(machine(), "keyboard_row_fd") & 0x1f;
221   if (!BIT(offset, 10)) data &= input_port_read(machine(), "keyboard_row_fb") & 0x1f;
222   if (!BIT(offset, 11)) data &= input_port_read(machine(), "keyboard_row_f7") & 0x1f;
223   if (!BIT(offset, 12)) data &= input_port_read(machine(), "keyboard_row_ef") & 0x1f;
224   if (!BIT(offset, 13)) data &= input_port_read(machine(), "keyboard_row_df") & 0x1f;
225   if (!BIT(offset, 14)) data &= input_port_read(machine(), "keyboard_row_bf") & 0x1f;
226   if (!BIT(offset, 15)) data &= input_port_read(machine(), "keyboard_row_7f") & 0x1f;
236227
237228   if (offset == 0xff00)
238229   {
239      data &= input_port_read(space->machine(), "keyboard_row_ff") & 0x1f;
230      data &= input_port_read(machine(), "keyboard_row_ff") & 0x1f;
240231
241232      /* if no key has been pressed, return the mouse state */
242233      if (data == 0x1f)
243         data = samcoupe_mouse_r(space->machine());
234         data = samcoupe_mouse_r(machine());
244235   }
245236
246237   /* bit 5, lightpen strobe */
r14963r14964
255246   return data;
256247}
257248
258static WRITE8_HANDLER( samcoupe_border_w )
249WRITE8_MEMBER(samcoupe_state::samcoupe_border_w)
259250{
260   cassette_image_device *cassette = space->machine().device<cassette_image_device>(CASSETTE_TAG);
261   device_t *speaker = space->machine().device(SPEAKER_TAG);
262   samcoupe_state *state = space->machine().driver_data<samcoupe_state>();
251   cassette_image_device *cassette = machine().device<cassette_image_device>(CASSETTE_TAG);
252   device_t *speaker = machine().device(SPEAKER_TAG);
263253
264   state->m_border = data;
254   m_border = data;
265255
266256   /* bit 3, cassette output */
267257   cassette->output( BIT(data, 3) ? -1.0 : +1.0);
r14963r14964
270260   speaker_level_w(speaker, BIT(data, 4));
271261}
272262
273static READ8_HANDLER( samcoupe_attributes_r )
263READ8_MEMBER(samcoupe_state::samcoupe_attributes_r)
274264{
275   samcoupe_state *state = space->machine().driver_data<samcoupe_state>();
276   return state->m_attribute;
265   return m_attribute;
277266}
278267
279268static READ8_DEVICE_HANDLER( samcoupe_lpt1_busy_r )
r14963r14964
313302ADDRESS_MAP_END
314303
315304static ADDRESS_MAP_START( samcoupe_io, AS_IO, 8, samcoupe_state )
316   AM_RANGE(0x0080, 0x0081) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_WRITE_LEGACY(samcoupe_ext_mem_w)
317   AM_RANGE(0x00e0, 0x00e7) AM_MIRROR(0xff10) AM_MASK(0xffff) AM_READWRITE_LEGACY(samcoupe_disk_r, samcoupe_disk_w)
305   AM_RANGE(0x0080, 0x0081) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_WRITE(samcoupe_ext_mem_w)
306   AM_RANGE(0x00e0, 0x00e7) AM_MIRROR(0xff10) AM_MASK(0xffff) AM_READWRITE(samcoupe_disk_r, samcoupe_disk_w)
318307   AM_RANGE(0x00e8, 0x00e8) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_DEVWRITE("lpt1", centronics_device, write)
319308   AM_RANGE(0x00e9, 0x00e9) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_DEVREADWRITE_LEGACY("lpt1", samcoupe_lpt1_busy_r, samcoupe_lpt1_strobe_w)
320309   AM_RANGE(0x00ea, 0x00ea) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_DEVWRITE("lpt2", centronics_device, write)
321310   AM_RANGE(0x00eb, 0x00eb) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_DEVREADWRITE_LEGACY("lpt2", samcoupe_lpt2_busy_r, samcoupe_lpt2_strobe_w)
322   AM_RANGE(0x00f8, 0x00f8) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE_LEGACY(samcoupe_pen_r, samcoupe_clut_w)
323   AM_RANGE(0x00f9, 0x00f9) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE_LEGACY(samcoupe_status_r, samcoupe_line_int_w)
324   AM_RANGE(0x00fa, 0x00fa) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE_LEGACY(samcoupe_lmpr_r, samcoupe_lmpr_w)
325   AM_RANGE(0x00fb, 0x00fb) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE_LEGACY(samcoupe_hmpr_r, samcoupe_hmpr_w)
326   AM_RANGE(0x00fc, 0x00fc) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE_LEGACY(samcoupe_vmpr_r, samcoupe_vmpr_w)
327   AM_RANGE(0x00fd, 0x00fd) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE_LEGACY(samcoupe_midi_r, samcoupe_midi_w)
328   AM_RANGE(0x00fe, 0x00fe) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE_LEGACY(samcoupe_keyboard_r, samcoupe_border_w)
329   AM_RANGE(0x00ff, 0x00ff) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READ_LEGACY(samcoupe_attributes_r)
311   AM_RANGE(0x00f8, 0x00f8) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE(samcoupe_pen_r, samcoupe_clut_w)
312   AM_RANGE(0x00f9, 0x00f9) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE(samcoupe_status_r, samcoupe_line_int_w)
313   AM_RANGE(0x00fa, 0x00fa) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE(samcoupe_lmpr_r, samcoupe_lmpr_w)
314   AM_RANGE(0x00fb, 0x00fb) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE(samcoupe_hmpr_r, samcoupe_hmpr_w)
315   AM_RANGE(0x00fc, 0x00fc) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE(samcoupe_vmpr_r, samcoupe_vmpr_w)
316   AM_RANGE(0x00fd, 0x00fd) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE(samcoupe_midi_r, samcoupe_midi_w)
317   AM_RANGE(0x00fe, 0x00fe) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READWRITE(samcoupe_keyboard_r, samcoupe_border_w)
318   AM_RANGE(0x00ff, 0x00ff) AM_MIRROR(0xff00) AM_MASK(0xffff) AM_READ(samcoupe_attributes_r)
330319   AM_RANGE(0x00ff, 0x00ff) AM_MIRROR(0xfe00) AM_MASK(0xffff) AM_DEVWRITE_LEGACY("saa1099", saa1099_data_w)
331320   AM_RANGE(0x01ff, 0x01ff) AM_MIRROR(0xfe00) AM_MASK(0xffff) AM_DEVWRITE_LEGACY("saa1099", saa1099_control_w)
332321ADDRESS_MAP_END
src/mess/drivers/odyssey2.c
r14963r14964
2222ADDRESS_MAP_END
2323
2424static ADDRESS_MAP_START( odyssey2_io , AS_IO, 8, odyssey2_state )
25   AM_RANGE( 0x00,       0xff)      AM_READWRITE_LEGACY(odyssey2_bus_r, odyssey2_bus_w)
26   AM_RANGE( MCS48_PORT_P1,   MCS48_PORT_P1)   AM_READWRITE_LEGACY(odyssey2_getp1, odyssey2_putp1 )
27   AM_RANGE( MCS48_PORT_P2,   MCS48_PORT_P2)   AM_READWRITE_LEGACY(odyssey2_getp2, odyssey2_putp2 )
28   AM_RANGE( MCS48_PORT_BUS,   MCS48_PORT_BUS)   AM_READWRITE_LEGACY(odyssey2_getbus, odyssey2_putbus )
29   AM_RANGE( MCS48_PORT_T0,   MCS48_PORT_T0)  AM_READ_LEGACY(odyssey2_t0_r )
30   AM_RANGE( MCS48_PORT_T1,   MCS48_PORT_T1)   AM_READ_LEGACY(odyssey2_t1_r )
25   AM_RANGE( 0x00,       0xff)      AM_READWRITE(odyssey2_bus_r, odyssey2_bus_w)
26   AM_RANGE( MCS48_PORT_P1,   MCS48_PORT_P1)   AM_READWRITE(odyssey2_getp1, odyssey2_putp1 )
27   AM_RANGE( MCS48_PORT_P2,   MCS48_PORT_P2)   AM_READWRITE(odyssey2_getp2, odyssey2_putp2 )
28   AM_RANGE( MCS48_PORT_BUS,   MCS48_PORT_BUS)   AM_READWRITE(odyssey2_getbus, odyssey2_putbus )
29   AM_RANGE( MCS48_PORT_T0,   MCS48_PORT_T0)  AM_READ(odyssey2_t0_r )
30   AM_RANGE( MCS48_PORT_T1,   MCS48_PORT_T1)   AM_READ(odyssey2_t1_r )
3131ADDRESS_MAP_END
3232
3333static ADDRESS_MAP_START( g7400_io , AS_IO, 8, odyssey2_state )
34   AM_RANGE( 0x00,      0xff)      AM_READWRITE_LEGACY(g7400_bus_r, g7400_bus_w)
35   AM_RANGE( MCS48_PORT_P1,   MCS48_PORT_P1)  AM_READWRITE_LEGACY(odyssey2_getp1, odyssey2_putp1 )
36   AM_RANGE( MCS48_PORT_P2,   MCS48_PORT_P2)  AM_READWRITE_LEGACY(odyssey2_getp2, odyssey2_putp2 )
37   AM_RANGE( MCS48_PORT_BUS,   MCS48_PORT_BUS) AM_READWRITE_LEGACY(odyssey2_getbus, odyssey2_putbus )
38   AM_RANGE( MCS48_PORT_T0,   MCS48_PORT_T0)  AM_READ_LEGACY(odyssey2_t0_r )
39   AM_RANGE( MCS48_PORT_T1,   MCS48_PORT_T1)  AM_READ_LEGACY(odyssey2_t1_r )
34   AM_RANGE( 0x00,      0xff)      AM_READWRITE(g7400_bus_r, g7400_bus_w)
35   AM_RANGE( MCS48_PORT_P1,   MCS48_PORT_P1)  AM_READWRITE(odyssey2_getp1, odyssey2_putp1 )
36   AM_RANGE( MCS48_PORT_P2,   MCS48_PORT_P2)  AM_READWRITE(odyssey2_getp2, odyssey2_putp2 )
37   AM_RANGE( MCS48_PORT_BUS,   MCS48_PORT_BUS) AM_READWRITE(odyssey2_getbus, odyssey2_putbus )
38   AM_RANGE( MCS48_PORT_T0,   MCS48_PORT_T0)  AM_READ(odyssey2_t0_r )
39   AM_RANGE( MCS48_PORT_T1,   MCS48_PORT_T1)  AM_READ(odyssey2_t1_r )
4040ADDRESS_MAP_END
4141
4242static INPUT_PORTS_START( odyssey2 )
src/mess/drivers/atm.c
r14963r14964
109109   AM_RANGE(0x003f, 0x003f) AM_DEVREADWRITE_LEGACY(BETA_DISK_TAG, betadisk_track_r,betadisk_track_w) AM_MIRROR(0xff00)
110110   AM_RANGE(0x005f, 0x005f) AM_DEVREADWRITE_LEGACY(BETA_DISK_TAG, betadisk_sector_r,betadisk_sector_w) AM_MIRROR(0xff00)
111111   AM_RANGE(0x007f, 0x007f) AM_DEVREADWRITE_LEGACY(BETA_DISK_TAG, betadisk_data_r,betadisk_data_w) AM_MIRROR(0xff00)
112   AM_RANGE(0x00fe, 0x00fe) AM_READWRITE_LEGACY(spectrum_port_fe_r,spectrum_port_fe_w) AM_MIRROR(0xff00) AM_MASK(0xffff)
112   AM_RANGE(0x00fe, 0x00fe) AM_READWRITE(spectrum_port_fe_r,spectrum_port_fe_w) AM_MIRROR(0xff00) AM_MASK(0xffff)
113113   AM_RANGE(0x00ff, 0x00ff) AM_DEVREADWRITE_LEGACY(BETA_DISK_TAG, betadisk_state_r, betadisk_param_w) AM_MIRROR(0xff00)
114114   AM_RANGE(0x4000, 0x4000) AM_WRITE(atm_port_7ffd_w)  AM_MIRROR(0x3ffd)
115115   AM_RANGE(0x8000, 0x8000) AM_DEVWRITE_LEGACY("ay8912", ay8910_data_w) AM_MIRROR(0x3ffd)
src/mess/drivers/primo.c
r14963r14964
118118
119119static ADDRESS_MAP_START( primoa_port, AS_IO, 8, primo_state )
120120   ADDRESS_MAP_GLOBAL_MASK(0xff)
121   AM_RANGE( 0x00, 0x3f ) AM_READWRITE_LEGACY(primo_be_1_r, primo_ki_1_w )
122   AM_RANGE( 0xfd, 0xfd ) AM_WRITE_LEGACY(primo_FD_w )
121   AM_RANGE( 0x00, 0x3f ) AM_READWRITE(primo_be_1_r, primo_ki_1_w )
122   AM_RANGE( 0xfd, 0xfd ) AM_WRITE(primo_FD_w )
123123ADDRESS_MAP_END
124124
125125static ADDRESS_MAP_START( primob_port, AS_IO, 8, primo_state )
126126   ADDRESS_MAP_GLOBAL_MASK(0xff)
127   AM_RANGE( 0x00, 0x3f ) AM_READWRITE_LEGACY(primo_be_1_r, primo_ki_1_w )
128   AM_RANGE( 0x40, 0x7f ) AM_READWRITE_LEGACY(primo_be_2_r, primo_ki_2_w )
129   AM_RANGE( 0xfd, 0xfd ) AM_WRITE_LEGACY(primo_FD_w )
127   AM_RANGE( 0x00, 0x3f ) AM_READWRITE(primo_be_1_r, primo_ki_1_w )
128   AM_RANGE( 0x40, 0x7f ) AM_READWRITE(primo_be_2_r, primo_ki_2_w )
129   AM_RANGE( 0xfd, 0xfd ) AM_WRITE(primo_FD_w )
130130ADDRESS_MAP_END
131131
132132static ADDRESS_MAP_START( primo32_mem, AS_PROGRAM, 8, primo_state )
src/mess/drivers/ti85.c
r14963r14964
195195
196196static ADDRESS_MAP_START( ti81_io, AS_IO, 8, ti85_state )
197197   ADDRESS_MAP_GLOBAL_MASK(0xff)
198   AM_RANGE(0x0000, 0x0000) AM_READWRITE_LEGACY(ti85_port_0000_r, ti85_port_0000_w )
199   AM_RANGE(0x0001, 0x0001) AM_READWRITE_LEGACY(ti8x_keypad_r, ti8x_keypad_w )
200   AM_RANGE(0x0002, 0x0002) AM_READWRITE_LEGACY(ti85_port_0002_r, ti85_port_0002_w )
201   AM_RANGE(0x0003, 0x0003) AM_READWRITE_LEGACY(ti85_port_0003_r, ti85_port_0003_w )
202   AM_RANGE(0x0004, 0x0004) AM_READWRITE_LEGACY(ti85_port_0004_r, ti85_port_0004_w )
203   AM_RANGE(0x0005, 0x0005) AM_READWRITE_LEGACY(ti85_port_0005_r, ti85_port_0005_w )
204   AM_RANGE(0x0007, 0x0007) AM_WRITE_LEGACY(ti81_port_0007_w)
198   AM_RANGE(0x0000, 0x0000) AM_READWRITE(ti85_port_0000_r, ti85_port_0000_w )
199   AM_RANGE(0x0001, 0x0001) AM_READWRITE(ti8x_keypad_r, ti8x_keypad_w )
200   AM_RANGE(0x0002, 0x0002) AM_READWRITE(ti85_port_0002_r, ti85_port_0002_w )
201   AM_RANGE(0x0003, 0x0003) AM_READWRITE(ti85_port_0003_r, ti85_port_0003_w )
202   AM_RANGE(0x0004, 0x0004) AM_READWRITE(ti85_port_0004_r, ti85_port_0004_w )
203   AM_RANGE(0x0005, 0x0005) AM_READWRITE(ti85_port_0005_r, ti85_port_0005_w )
204   AM_RANGE(0x0007, 0x0007) AM_WRITE(ti81_port_0007_w)
205205ADDRESS_MAP_END
206206
207207static ADDRESS_MAP_START( ti85_io, AS_IO, 8, ti85_state )
208208   ADDRESS_MAP_GLOBAL_MASK(0xff)
209   AM_RANGE(0x0000, 0x0000) AM_READWRITE_LEGACY(ti85_port_0000_r, ti85_port_0000_w )
210   AM_RANGE(0x0001, 0x0001) AM_READWRITE_LEGACY(ti8x_keypad_r, ti8x_keypad_w )
211   AM_RANGE(0x0002, 0x0002) AM_READWRITE_LEGACY(ti85_port_0002_r, ti85_port_0002_w )
212   AM_RANGE(0x0003, 0x0003) AM_READWRITE_LEGACY(ti85_port_0003_r, ti85_port_0003_w )
213   AM_RANGE(0x0004, 0x0004) AM_READWRITE_LEGACY(ti85_port_0004_r, ti85_port_0004_w )
214   AM_RANGE(0x0005, 0x0005) AM_READWRITE_LEGACY(ti85_port_0005_r, ti85_port_0005_w )
215   AM_RANGE(0x0006, 0x0006) AM_READWRITE_LEGACY(ti85_port_0006_r, ti85_port_0006_w )
216   AM_RANGE(0x0007, 0x0007) AM_READWRITE_LEGACY(ti8x_serial_r, ti8x_serial_w )
209   AM_RANGE(0x0000, 0x0000) AM_READWRITE(ti85_port_0000_r, ti85_port_0000_w )
210   AM_RANGE(0x0001, 0x0001) AM_READWRITE(ti8x_keypad_r, ti8x_keypad_w )
211   AM_RANGE(0x0002, 0x0002) AM_READWRITE(ti85_port_0002_r, ti85_port_0002_w )
212   AM_RANGE(0x0003, 0x0003) AM_READWRITE(ti85_port_0003_r, ti85_port_0003_w )
213   AM_RANGE(0x0004, 0x0004) AM_READWRITE(ti85_port_0004_r, ti85_port_0004_w )
214   AM_RANGE(0x0005, 0x0005) AM_READWRITE(ti85_port_0005_r, ti85_port_0005_w )
215   AM_RANGE(0x0006, 0x0006) AM_READWRITE(ti85_port_0006_r, ti85_port_0006_w )
216   AM_RANGE(0x0007, 0x0007) AM_READWRITE(ti8x_serial_r, ti8x_serial_w )
217217ADDRESS_MAP_END
218218
219219static ADDRESS_MAP_START( ti82_io, AS_IO, 8, ti85_state )
220220   ADDRESS_MAP_GLOBAL_MASK(0xff)
221   AM_RANGE(0x0000, 0x0000) AM_READWRITE_LEGACY(ti8x_serial_r, ti8x_serial_w )
222   AM_RANGE(0x0001, 0x0001) AM_READWRITE_LEGACY(ti8x_keypad_r, ti8x_keypad_w )
223   AM_RANGE(0x0002, 0x0002) AM_READWRITE_LEGACY(ti82_port_0002_r, ti82_port_0002_w )
224   AM_RANGE(0x0003, 0x0003) AM_READWRITE_LEGACY(ti85_port_0003_r, ti85_port_0003_w )
225   AM_RANGE(0x0004, 0x0004) AM_READWRITE_LEGACY(ti85_port_0004_r, ti85_port_0004_w )
221   AM_RANGE(0x0000, 0x0000) AM_READWRITE(ti8x_serial_r, ti8x_serial_w )
222   AM_RANGE(0x0001, 0x0001) AM_READWRITE(ti8x_keypad_r, ti8x_keypad_w )
223   AM_RANGE(0x0002, 0x0002) AM_READWRITE(ti82_port_0002_r, ti82_port_0002_w )
224   AM_RANGE(0x0003, 0x0003) AM_READWRITE(ti85_port_0003_r, ti85_port_0003_w )
225   AM_RANGE(0x0004, 0x0004) AM_READWRITE(ti85_port_0004_r, ti85_port_0004_w )
226226   AM_RANGE(0x0010, 0x0010) AM_DEVREADWRITE("t6a04", t6a04_device, control_read, control_write)
227227   AM_RANGE(0x0011, 0x0011) AM_DEVREADWRITE("t6a04", t6a04_device, data_read, data_write)
228228ADDRESS_MAP_END
229229
230230static ADDRESS_MAP_START( ti81v2_io, AS_IO, 8, ti85_state )
231231   ADDRESS_MAP_GLOBAL_MASK(0xff)
232   AM_RANGE(0x0001, 0x0001) AM_READWRITE_LEGACY(ti8x_keypad_r, ti8x_keypad_w )
233   AM_RANGE(0x0002, 0x0002) AM_READWRITE_LEGACY(ti82_port_0002_r, ti82_port_0002_w )
234   AM_RANGE(0x0003, 0x0003) AM_READWRITE_LEGACY(ti85_port_0003_r, ti85_port_0003_w )
235   AM_RANGE(0x0004, 0x0004) AM_READWRITE_LEGACY(ti85_port_0004_r, ti85_port_0004_w )
232   AM_RANGE(0x0001, 0x0001) AM_READWRITE(ti8x_keypad_r, ti8x_keypad_w )
233   AM_RANGE(0x0002, 0x0002) AM_READWRITE(ti82_port_0002_r, ti82_port_0002_w )
234   AM_RANGE(0x0003, 0x0003) AM_READWRITE(ti85_port_0003_r, ti85_port_0003_w )
235   AM_RANGE(0x0004, 0x0004) AM_READWRITE(ti85_port_0004_r, ti85_port_0004_w )
236236   AM_RANGE(0x0010, 0x0010) AM_DEVREADWRITE("t6a04", t6a04_device, control_read, control_write)
237237   AM_RANGE(0x0011, 0x0011) AM_DEVREADWRITE("t6a04", t6a04_device, data_read, data_write)
238238ADDRESS_MAP_END
239239
240240static ADDRESS_MAP_START( ti83_io, AS_IO, 8, ti85_state )
241241   ADDRESS_MAP_GLOBAL_MASK(0xff)
242   AM_RANGE(0x0000, 0x0000) AM_READWRITE_LEGACY(ti83_port_0000_r, ti83_port_0000_w )   //TODO
243   AM_RANGE(0x0001, 0x0001) AM_READWRITE_LEGACY(ti8x_keypad_r, ti8x_keypad_w )
244   AM_RANGE(0x0002, 0x0002) AM_READWRITE_LEGACY(ti83_port_0002_r, ti83_port_0002_w )
245   AM_RANGE(0x0003, 0x0003) AM_READWRITE_LEGACY(ti83_port_0003_r, ti83_port_0003_w )
246   AM_RANGE(0x0004, 0x0004) AM_READWRITE_LEGACY(ti85_port_0004_r, ti85_port_0004_w )
242   AM_RANGE(0x0000, 0x0000) AM_READWRITE(ti83_port_0000_r, ti83_port_0000_w )   //TODO
243   AM_RANGE(0x0001, 0x0001) AM_READWRITE(ti8x_keypad_r, ti8x_keypad_w )
244   AM_RANGE(0x0002, 0x0002) AM_READWRITE(ti83_port_0002_r, ti83_port_0002_w )
245   AM_RANGE(0x0003, 0x0003) AM_READWRITE(ti83_port_0003_r, ti83_port_0003_w )
246   AM_RANGE(0x0004, 0x0004) AM_READWRITE(ti85_port_0004_r, ti85_port_0004_w )
247247   AM_RANGE(0x0010, 0x0010) AM_DEVREADWRITE("t6a04", t6a04_device, control_read, control_write)
248248   AM_RANGE(0x0011, 0x0011) AM_DEVREADWRITE("t6a04", t6a04_device, data_read, data_write)
249249   AM_RANGE(0x0014, 0x0014) AM_READ_PORT( "BATTERY" )
r14963r14964
251251
252252static ADDRESS_MAP_START( ti83p_io, AS_IO, 8, ti85_state )
253253   ADDRESS_MAP_GLOBAL_MASK(0xff)
254   AM_RANGE(0x0000, 0x0000) AM_READWRITE_LEGACY(ti8x_plus_serial_r, ti8x_plus_serial_w)
255   AM_RANGE(0x0001, 0x0001) AM_READWRITE_LEGACY(ti8x_keypad_r, ti8x_keypad_w )
256   AM_RANGE(0x0002, 0x0002) AM_READWRITE_LEGACY(ti83p_port_0002_r, ti83p_port_0002_w )
257   AM_RANGE(0x0003, 0x0003) AM_READWRITE_LEGACY(ti83_port_0003_r, ti83p_port_0003_w )
258   AM_RANGE(0x0004, 0x0004) AM_READWRITE_LEGACY(ti83_port_0003_r, ti83p_port_0004_w )
259   AM_RANGE(0x0006, 0x0006) AM_READWRITE_LEGACY(ti86_port_0005_r, ti83p_port_0006_w )
260   AM_RANGE(0x0007, 0x0007) AM_READWRITE_LEGACY(ti86_port_0006_r, ti83p_port_0007_w )
254   AM_RANGE(0x0000, 0x0000) AM_READWRITE(ti8x_plus_serial_r, ti8x_plus_serial_w)
255   AM_RANGE(0x0001, 0x0001) AM_READWRITE(ti8x_keypad_r, ti8x_keypad_w )
256   AM_RANGE(0x0002, 0x0002) AM_READWRITE(ti83p_port_0002_r, ti83p_port_0002_w )
257   AM_RANGE(0x0003, 0x0003) AM_READWRITE(ti83_port_0003_r, ti83p_port_0003_w )
258   AM_RANGE(0x0004, 0x0004) AM_READWRITE(ti83_port_0003_r, ti83p_port_0004_w )
259   AM_RANGE(0x0006, 0x0006) AM_READWRITE(ti86_port_0005_r, ti83p_port_0006_w )
260   AM_RANGE(0x0007, 0x0007) AM_READWRITE(ti86_port_0006_r, ti83p_port_0007_w )
261261   AM_RANGE(0x0010, 0x0010) AM_DEVREADWRITE("t6a04", t6a04_device, control_read, control_write)
262262   AM_RANGE(0x0011, 0x0011) AM_DEVREADWRITE("t6a04", t6a04_device, data_read, data_write)
263263ADDRESS_MAP_END
264264
265265static ADDRESS_MAP_START( ti86_io, AS_IO, 8, ti85_state )
266266   ADDRESS_MAP_GLOBAL_MASK(0xff)
267   AM_RANGE(0x0000, 0x0000) AM_READWRITE_LEGACY(ti85_port_0000_r, ti85_port_0000_w )
268   AM_RANGE(0x0001, 0x0001) AM_READWRITE_LEGACY(ti8x_keypad_r, ti8x_keypad_w )
269   AM_RANGE(0x0002, 0x0002) AM_READWRITE_LEGACY(ti85_port_0002_r, ti85_port_0002_w )
270   AM_RANGE(0x0003, 0x0003) AM_READWRITE_LEGACY(ti85_port_0003_r, ti85_port_0003_w )
271   AM_RANGE(0x0004, 0x0004) AM_READWRITE_LEGACY(ti85_port_0006_r, ti85_port_0006_w )
272   AM_RANGE(0x0005, 0x0005) AM_READWRITE_LEGACY(ti86_port_0005_r, ti86_port_0005_w )
273   AM_RANGE(0x0006, 0x0006) AM_READWRITE_LEGACY(ti86_port_0006_r, ti86_port_0006_w )
274   AM_RANGE(0x0007, 0x0007) AM_READWRITE_LEGACY(ti8x_serial_r, ti8x_serial_w )
267   AM_RANGE(0x0000, 0x0000) AM_READWRITE(ti85_port_0000_r, ti85_port_0000_w )
268   AM_RANGE(0x0001, 0x0001) AM_READWRITE(ti8x_keypad_r, ti8x_keypad_w )
269   AM_RANGE(0x0002, 0x0002) AM_READWRITE(ti85_port_0002_r, ti85_port_0002_w )
270   AM_RANGE(0x0003, 0x0003) AM_READWRITE(ti85_port_0003_r, ti85_port_0003_w )
271   AM_RANGE(0x0004, 0x0004) AM_READWRITE(ti85_port_0006_r, ti85_port_0006_w )
272   AM_RANGE(0x0005, 0x0005) AM_READWRITE(ti86_port_0005_r, ti86_port_0005_w )
273   AM_RANGE(0x0006, 0x0006) AM_READWRITE(ti86_port_0006_r, ti86_port_0006_w )
274   AM_RANGE(0x0007, 0x0007) AM_READWRITE(ti8x_serial_r, ti8x_serial_w )
275275ADDRESS_MAP_END
276276
277277/* memory w/r functions */
src/mess/drivers/svi318.c
r14963r14964
2929#include "rendlay.h"
3030
3131static ADDRESS_MAP_START( svi318_mem, AS_PROGRAM, 8, svi318_state )
32   AM_RANGE( 0x0000, 0x7fff) AM_READ_BANK("bank1") AM_WRITE_LEGACY(svi318_writemem1 )
33   AM_RANGE( 0x8000, 0xbfff) AM_READ_BANK("bank2") AM_WRITE_LEGACY(svi318_writemem2 )
34   AM_RANGE( 0xc000, 0xffff) AM_READ_BANK("bank3") AM_WRITE_LEGACY(svi318_writemem3 )
32   AM_RANGE( 0x0000, 0x7fff) AM_READ_BANK("bank1") AM_WRITE(svi318_writemem1 )
33   AM_RANGE( 0x8000, 0xbfff) AM_READ_BANK("bank2") AM_WRITE(svi318_writemem2 )
34   AM_RANGE( 0xc000, 0xffff) AM_READ_BANK("bank3") AM_WRITE(svi318_writemem3 )
3535ADDRESS_MAP_END
3636
3737static ADDRESS_MAP_START( svi328_806_mem, AS_PROGRAM, 8, svi318_state )
38   AM_RANGE( 0x0000, 0x7fff) AM_READ_BANK("bank1") AM_WRITE_LEGACY(svi318_writemem1 )
39   AM_RANGE( 0x8000, 0xbfff) AM_READ_BANK("bank2") AM_WRITE_LEGACY(svi318_writemem2 )
40   AM_RANGE( 0xc000, 0xefff) AM_READ_BANK("bank3") AM_WRITE_LEGACY(svi318_writemem3 )
41   AM_RANGE( 0xf000, 0xffff) AM_READ_BANK("bank4") AM_WRITE_LEGACY(svi318_writemem4 )
38   AM_RANGE( 0x0000, 0x7fff) AM_READ_BANK("bank1") AM_WRITE(svi318_writemem1 )
39   AM_RANGE( 0x8000, 0xbfff) AM_READ_BANK("bank2") AM_WRITE(svi318_writemem2 )
40   AM_RANGE( 0xc000, 0xefff) AM_READ_BANK("bank3") AM_WRITE(svi318_writemem3 )
41   AM_RANGE( 0xf000, 0xffff) AM_READ_BANK("bank4") AM_WRITE(svi318_writemem4 )
4242ADDRESS_MAP_END
4343
4444static ADDRESS_MAP_START( svi318_io, AS_IO, 8, svi318_state )
4545   ADDRESS_MAP_UNMAP_HIGH
4646   ADDRESS_MAP_GLOBAL_MASK(0xff)
47   AM_RANGE( 0x00, 0x38) AM_READWRITE_LEGACY(svi318_io_ext_r, svi318_io_ext_w )
47   AM_RANGE( 0x00, 0x38) AM_READWRITE(svi318_io_ext_r, svi318_io_ext_w )
4848   AM_RANGE( 0x80, 0x80) AM_DEVWRITE( "tms9928a", tms9928a_device, vram_write )
4949   AM_RANGE( 0x81, 0x81) AM_DEVWRITE( "tms9928a", tms9928a_device, register_write )
5050   AM_RANGE( 0x84, 0x84) AM_DEVREAD( "tms9928a", tms9928a_device, vram_read )
r14963r14964
5252   AM_RANGE( 0x88, 0x88) AM_DEVWRITE_LEGACY("ay8910", ay8910_address_w )
5353   AM_RANGE( 0x8c, 0x8c) AM_DEVWRITE_LEGACY("ay8910", ay8910_data_w )
5454   AM_RANGE( 0x90, 0x90) AM_DEVREAD_LEGACY("ay8910", ay8910_r )
55   AM_RANGE( 0x96, 0x97) AM_WRITE_LEGACY(svi318_ppi_w)
55   AM_RANGE( 0x96, 0x97) AM_WRITE(svi318_ppi_w)
5656   AM_RANGE( 0x98, 0x9a) AM_DEVREAD("ppi8255", i8255_device, read)
5757ADDRESS_MAP_END
5858
5959static ADDRESS_MAP_START( svi328_806_io, AS_IO, 8, svi318_state )
6060   ADDRESS_MAP_UNMAP_HIGH
6161   ADDRESS_MAP_GLOBAL_MASK(0xff)
62   AM_RANGE( 0x00, 0x58) AM_READWRITE_LEGACY(svi318_io_ext_r, svi318_io_ext_w )
62   AM_RANGE( 0x00, 0x58) AM_READWRITE(svi318_io_ext_r, svi318_io_ext_w )
6363   AM_RANGE( 0x80, 0x80) AM_DEVWRITE( "tms9928a", tms9928a_device, vram_write )
6464   AM_RANGE( 0x81, 0x81) AM_DEVWRITE( "tms9928a", tms9928a_device, register_write )
6565   AM_RANGE( 0x84, 0x84) AM_DEVREAD( "tms9928a", tms9928a_device, vram_read )
r14963r14964
6767   AM_RANGE( 0x88, 0x88) AM_DEVWRITE_LEGACY("ay8910", ay8910_address_w )
6868   AM_RANGE( 0x8c, 0x8c) AM_DEVWRITE_LEGACY("ay8910", ay8910_data_w )
6969   AM_RANGE( 0x90, 0x90) AM_DEVREAD_LEGACY("ay8910", ay8910_r )
70   AM_RANGE( 0x96, 0x97) AM_WRITE_LEGACY(svi318_ppi_w)
70   AM_RANGE( 0x96, 0x97) AM_WRITE(svi318_ppi_w)
7171   AM_RANGE( 0x98, 0x9a) AM_DEVREAD("ppi8255", i8255_device, read)
7272ADDRESS_MAP_END
7373
r14963r14964
254254{
255255   AY8910_LEGACY_OUTPUT,
256256   AY8910_DEFAULT_LOADS,
257   DEVCB_MEMORY_HANDLER("maincpu", PROGRAM, svi318_psg_port_a_r),
257   DEVCB_DRIVER_MEMBER(svi318_state, svi318_psg_port_a_r),
258258   DEVCB_NULL,
259259   DEVCB_NULL,
260   DEVCB_MEMORY_HANDLER("maincpu", PROGRAM, svi318_psg_port_b_w)
260   DEVCB_DRIVER_MEMBER(svi318_state, svi318_psg_port_b_w)
261261};
262262
263263static WRITE_LINE_DEVICE_HANDLER(vdp_interrupt)
src/mess/drivers/amstr_pc.c
r14963r14964
8888   AM_RANGE(0x0070, 0x0071) AM_DEVREADWRITE8("rtc", mc146818_device, read, write, 0xffff)
8989   AM_RANGE(0x0078, 0x0079) AM_READWRITE_LEGACY(pc1640_16le_mouse_x_r,         pc1640_16le_mouse_x_w)
9090   AM_RANGE(0x007a, 0x007b) AM_READWRITE_LEGACY(pc1640_16le_mouse_y_r,         pc1640_16le_mouse_y_w)
91   AM_RANGE(0x0080, 0x0087) AM_READWRITE8_LEGACY(pc_page_r,               pc_page_w, 0xffff)
91   AM_RANGE(0x0080, 0x0087) AM_READWRITE8(pc_page_r,               pc_page_w, 0xffff)
9292   AM_RANGE(0x0200, 0x0207) AM_READWRITE_LEGACY(pc16le_JOY_r,               pc16le_JOY_w)
9393   AM_RANGE(0x0278, 0x027b) AM_READ_LEGACY(pc200_16le_port278_r) AM_DEVWRITE8_LEGACY("lpt_2", pc_lpt_w, 0x00ff)
9494   AM_RANGE(0x02e8, 0x02ef) AM_DEVREADWRITE8("ins8250_3", ins8250_device, ins8250_r, ins8250_w, 0xffff)
r14963r14964
116116   AM_RANGE(0x0060, 0x0065) AM_READWRITE_LEGACY(pc1640_16le_port60_r,         pc1640_16le_port60_w)
117117   AM_RANGE(0x0078, 0x0079) AM_READWRITE_LEGACY(pc1640_16le_mouse_x_r,         pc1640_16le_mouse_x_w)
118118   AM_RANGE(0x007a, 0x007b) AM_READWRITE_LEGACY(pc1640_16le_mouse_y_r,         pc1640_16le_mouse_y_w)
119   AM_RANGE(0x0080, 0x0087) AM_READWRITE8_LEGACY(pc_page_r,               pc_page_w, 0xffff)
119   AM_RANGE(0x0080, 0x0087) AM_READWRITE8(pc_page_r,               pc_page_w, 0xffff)
120120   AM_RANGE(0x0200, 0x0207) AM_READWRITE_LEGACY(pc16le_JOY_r,               pc16le_JOY_w)
121121   AM_RANGE(0x0278, 0x027b) AM_READ_LEGACY(pc200_16le_port278_r) AM_DEVWRITE8_LEGACY("lpt_2", pc_lpt_w, 0x00ff)
122122   AM_RANGE(0x02e8, 0x02ef) AM_DEVREADWRITE8("ins8250_3", ins8250_device, ins8250_r,  ins8250_w, 0xffff)
src/mess/drivers/interact.c
r14963r14964
7777   ADDRESS_MAP_UNMAP_HIGH
7878   /* Hardware address mapping*/
7979/*  AM_RANGE(0x0800,0x0808) AM_WRITE_LEGACY(hector_switch_bank_w)// Bank management not udsed in BR machine*/
80   AM_RANGE(0x1000,0x1000) AM_WRITE_LEGACY(hector_color_a_w)  /* Color c0/c1*/
81   AM_RANGE(0x1800,0x1800) AM_WRITE_LEGACY(hector_color_b_w)  /* Color c2/c3*/
82   AM_RANGE(0x2000,0x2003) AM_WRITE_LEGACY(hector_sn_2000_w)  /* Sound*/
83   AM_RANGE(0x2800,0x2803) AM_WRITE_LEGACY(hector_sn_2800_w)  /* Sound*/
84   AM_RANGE(0x3000,0x3000) AM_READWRITE_LEGACY(hector_cassette_r, hector_sn_3000_w)/* Write necessary*/
85   AM_RANGE(0x3800,0x3807) AM_READWRITE_LEGACY(hector_keyboard_r, hector_keyboard_w)  /* Keyboard*/
80   AM_RANGE(0x1000,0x1000) AM_WRITE(hector_color_a_w)  /* Color c0/c1*/
81   AM_RANGE(0x1800,0x1800) AM_WRITE(hector_color_b_w)  /* Color c2/c3*/
82   AM_RANGE(0x2000,0x2003) AM_WRITE(hector_sn_2000_w)  /* Sound*/
83   AM_RANGE(0x2800,0x2803) AM_WRITE(hector_sn_2800_w)  /* Sound*/
84   AM_RANGE(0x3000,0x3000) AM_READWRITE(hector_cassette_r, hector_sn_3000_w)/* Write necessary*/
85   AM_RANGE(0x3800,0x3807) AM_READWRITE(hector_keyboard_r, hector_keyboard_w)  /* Keyboard*/
8686
8787   /* Main ROM page*/
8888   AM_RANGE(0x0000,0x3fff) AM_ROM  /*BANK(2)*/
src/mess/drivers/galaxy.c
r14963r14964
4141
4242static ADDRESS_MAP_START (galaxy_mem, AS_PROGRAM, 8, galaxy_state )
4343   AM_RANGE(0x0000, 0x0fff) AM_ROM
44   AM_RANGE(0x2000, 0x2037) AM_MIRROR(0x07c0) AM_READ_LEGACY(galaxy_keyboard_r )
45   AM_RANGE(0x2038, 0x203f) AM_MIRROR(0x07c0) AM_WRITE_LEGACY(galaxy_latch_w )
44   AM_RANGE(0x2000, 0x2037) AM_MIRROR(0x07c0) AM_READ(galaxy_keyboard_r )
45   AM_RANGE(0x2038, 0x203f) AM_MIRROR(0x07c0) AM_WRITE(galaxy_latch_w )
4646ADDRESS_MAP_END
4747
4848static ADDRESS_MAP_START (galaxyp_mem, AS_PROGRAM, 8, galaxy_state )
4949   AM_RANGE(0x0000, 0x0fff) AM_ROM // ROM A
5050   AM_RANGE(0x1000, 0x1fff) AM_ROM // ROM B
51   AM_RANGE(0x2000, 0x2037) AM_MIRROR(0x07c0) AM_READ_LEGACY(galaxy_keyboard_r )
52   AM_RANGE(0x2038, 0x203f) AM_MIRROR(0x07c0) AM_WRITE_LEGACY(galaxy_latch_w )
51   AM_RANGE(0x2000, 0x2037) AM_MIRROR(0x07c0) AM_READ(galaxy_keyboard_r )
52   AM_RANGE(0x2038, 0x203f) AM_MIRROR(0x07c0) AM_WRITE(galaxy_latch_w )
5353   AM_RANGE(0xe000, 0xefff) AM_ROM // ROM C
5454   AM_RANGE(0xf000, 0xffff) AM_ROM // ROM D
5555ADDRESS_MAP_END
src/mess/drivers/fm7.c
r14963r14964
199199 *   bit 7 - SYNDET
200200 *
201201 */
202static WRITE8_HANDLER( fm7_irq_mask_w )
202WRITE8_MEMBER(fm7_state::fm7_irq_mask_w)
203203{
204   fm7_state *state = space->machine().driver_data<fm7_state>();
205   state->m_irq_mask = data;
206   logerror("IRQ mask set: 0x%02x\n",state->m_irq_mask);
204   m_irq_mask = data;
205   logerror("IRQ mask set: 0x%02x\n",m_irq_mask);
207206}
208207
209208/*
r14963r14964
219218 *   bit 6 - buzzer on for 205ms
220219 *   bit 7 - buzzer on/off
221220 */
222static READ8_HANDLER( fm7_irq_cause_r )
221READ8_MEMBER(fm7_state::fm7_irq_cause_r)
223222{
224   fm7_state *state = space->machine().driver_data<fm7_state>();
225   UINT8 ret = ~state->m_irq_flags;
223   UINT8 ret = ~m_irq_flags;
226224
227225   // Timer and Printer IRQ flags are cleared when this port is read
228226   // Keyboard IRQ flag is cleared when the scancode is read from
229227   // either keyboard data port (main CPU 0xfd01 or sub CPU 0xd401)
230   if(state->m_irq_flags & 0x04)
231      main_irq_clear_flag(space->machine(),IRQ_FLAG_TIMER);
232   if(state->m_irq_flags & 0x02)
233      main_irq_clear_flag(space->machine(),IRQ_FLAG_PRINTER);
228   if(m_irq_flags & 0x04)
229      main_irq_clear_flag(machine(),IRQ_FLAG_TIMER);
230   if(m_irq_flags & 0x02)
231      main_irq_clear_flag(machine(),IRQ_FLAG_PRINTER);
234232
235233   logerror("IRQ flags read: 0x%02x\n",ret);
236234   return ret;
r14963r14964
242240   logerror("timed beeper off\n");
243241}
244242
245static WRITE8_HANDLER( fm7_beeper_w )
243WRITE8_MEMBER(fm7_state::fm7_beeper_w)
246244{
247   fm7_state *state = space->machine().driver_data<fm7_state>();
248   state->m_speaker_active = data & 0x01;
245   m_speaker_active = data & 0x01;
249246
250   if(!state->m_speaker_active)  // speaker not active, disable all beeper sound
247   if(!m_speaker_active)  // speaker not active, disable all beeper sound
251248   {
252      beep_set_state(space->machine().device(BEEPER_TAG),0);
249      beep_set_state(machine().device(BEEPER_TAG),0);
253250      return;
254251   }
255252
256253   if(data & 0x80)
257254   {
258      if(state->m_speaker_active)
259         beep_set_state(space->machine().device(BEEPER_TAG),1);
255      if(m_speaker_active)
256         beep_set_state(machine().device(BEEPER_TAG),1);
260257   }
261258   else
262      beep_set_state(space->machine().device(BEEPER_TAG),0);
259      beep_set_state(machine().device(BEEPER_TAG),0);
263260
264261   if(data & 0x40)
265262   {
266      if(state->m_speaker_active)
263      if(m_speaker_active)
267264      {
268         beep_set_state(space->machine().device(BEEPER_TAG),1);
265         beep_set_state(machine().device(BEEPER_TAG),1);
269266         logerror("timed beeper on\n");
270         space->machine().scheduler().timer_set(attotime::from_msec(205), FUNC(fm7_beeper_off));
267         machine().scheduler().timer_set(attotime::from_msec(205), FUNC(fm7_beeper_off));
271268      }
272269   }
273270   logerror("beeper state: %02x\n",data);
r14963r14964
278275 *  Sub CPU: port 0xd403 (read-only)
279276 *  On read: timed buzzer sound
280277 */
281READ8_HANDLER( fm7_sub_beeper_r )
278READ8_MEMBER(fm7_state::fm7_sub_beeper_r)
282279{
283   fm7_state *state = space->machine().driver_data<fm7_state>();
284   if(state->m_speaker_active)
280   if(m_speaker_active)
285281   {
286      beep_set_state(space->machine().device(BEEPER_TAG),1);
282      beep_set_state(machine().device(BEEPER_TAG),1);
287283      logerror("timed beeper on\n");
288      space->machine().scheduler().timer_set(attotime::from_msec(205), FUNC(fm7_beeper_off));
284      machine().scheduler().timer_set(attotime::from_msec(205), FUNC(fm7_beeper_off));
289285   }
290286   return 0xff;
291287}
292288
293static READ8_HANDLER( vector_r )
289READ8_MEMBER(fm7_state::vector_r)
294290{
295   fm7_state *state = space->machine().driver_data<fm7_state>();
296   UINT8* RAM = space->machine().region("maincpu")->base();
297   UINT8* ROM = space->machine().region("init")->base();
291   UINT8* RAM = machine().region("maincpu")->base();
292   UINT8* ROM = machine().region("init")->base();
298293
299   if(state->m_init_rom_en)
294   if(m_init_rom_en)
300295      return ROM[0x1ff0+offset];
301296   else
302297   {
303      if(state->m_type == SYS_FM7)
298      if(m_type == SYS_FM7)
304299         return RAM[0xfff0+offset];
305300      else
306301         return RAM[0x3fff0+offset];
307302   }
308303}
309304
310static WRITE8_HANDLER( vector_w )
305WRITE8_MEMBER(fm7_state::vector_w)
311306{
312   fm7_state *state = space->machine().driver_data<fm7_state>();
313   UINT8* RAM = space->machine().region("maincpu")->base();
307   UINT8* RAM = machine().region("maincpu")->base();
314308
315   if(state->m_type == SYS_FM7)
309   if(m_type == SYS_FM7)
316310      RAM[0xfff0+offset] = data;
317311   else
318312      RAM[0x3fff0+offset] = data;
r14963r14964
324318 *  bit 0 - attention IRQ active, clears flag when read.
325319 *  bit 1 - break key active
326320 */
327static READ8_HANDLER( fm7_fd04_r )
321READ8_MEMBER(fm7_state::fm7_fd04_r)
328322{
329   fm7_state *state = space->machine().driver_data<fm7_state>();
330323   UINT8 ret = 0xff;
331324
332   if(state->m_video.attn_irq != 0)
325   if(m_video.attn_irq != 0)
333326   {
334327      ret &= ~0x01;
335      state->m_video.attn_irq = 0;
328      m_video.attn_irq = 0;
336329   }
337   if(state->m_break_flag != 0)
330   if(m_break_flag != 0)
338331   {
339332      ret &= ~0x02;
340333   }
r14963r14964
347340 *  On read, enables BASIC ROM at 0x8000 (default)
348341 *  On write, disables BASIC ROM, enables RAM (if more than 32kB)
349342 */
350static READ8_HANDLER( fm7_rom_en_r )
343READ8_MEMBER(fm7_state::fm7_rom_en_r)
351344{
352   fm7_state *state = space->machine().driver_data<fm7_state>();
353   UINT8* RAM = space->machine().region("maincpu")->base();
345   UINT8* RAM = machine().region("maincpu")->base();
354346
355   state->m_basic_rom_en = 1;
356   if(state->m_type == SYS_FM7)
347   m_basic_rom_en = 1;
348   if(m_type == SYS_FM7)
357349   {
358      space->install_read_bank(0x8000,0xfbff,"bank1");
359      space->nop_write(0x8000,0xfbff);
360      memory_set_bankptr(space->machine(),"bank1",RAM+0x38000);
350      space.install_read_bank(0x8000,0xfbff,"bank1");
351      space.nop_write(0x8000,0xfbff);
352      memory_set_bankptr(machine(),"bank1",RAM+0x38000);
361353   }
362354   else
363      fm7_mmr_refresh(space);
355      fm7_mmr_refresh(&space);
364356   logerror("BASIC ROM enabled\n");
365357   return 0x00;
366358}
367359
368static WRITE8_HANDLER( fm7_rom_en_w )
360WRITE8_MEMBER(fm7_state::fm7_rom_en_w)
369361{
370   fm7_state *state = space->machine().driver_data<fm7_state>();
371   UINT8* RAM = space->machine().region("maincpu")->base();
362   UINT8* RAM = machine().region("maincpu")->base();
372363
373   state->m_basic_rom_en = 0;
374   if(state->m_type == SYS_FM7)
364   m_basic_rom_en = 0;
365   if(m_type == SYS_FM7)
375366   {
376      space->install_readwrite_bank(0x8000,0xfbff,"bank1");
377      memory_set_bankptr(space->machine(),"bank1",RAM+0x8000);
367      space.install_readwrite_bank(0x8000,0xfbff,"bank1");
368      memory_set_bankptr(machine(),"bank1",RAM+0x8000);
378369   }
379370   else
380      fm7_mmr_refresh(space);
371      fm7_mmr_refresh(&space);
381372   logerror("BASIC ROM disabled\n");
382373}
383374
r14963r14964
387378 *  Port is write-only.  Initiate ROM is on by default.
388379 *
389380 */
390static WRITE8_HANDLER( fm7_init_en_w )
381WRITE8_MEMBER(fm7_state::fm7_init_en_w)
391382{
392   fm7_state *state = space->machine().driver_data<fm7_state>();
393383   if(data & 0x02)
394384   {
395      state->m_init_rom_en = 0;
396      fm7_mmr_refresh(space);
385      m_init_rom_en = 0;
386      fm7_mmr_refresh(&space);
397387   }
398388   else
399389   {
400      state->m_init_rom_en = 1;
401      fm7_mmr_refresh(space);
390      m_init_rom_en = 1;
391      fm7_mmr_refresh(&space);
402392   }
403393}
404394
r14963r14964
418408   drvstate->m_fdc_drq_flag = state;
419409}
420410
421static READ8_HANDLER( fm7_fdc_r )
411READ8_MEMBER(fm7_state::fm7_fdc_r)
422412{
423   fm7_state *state = space->machine().driver_data<fm7_state>();
424   device_t* dev = space->machine().device("fdc");
413   device_t* dev = machine().device("fdc");
425414   UINT8 ret = 0;
426415
427416   switch(offset)
r14963r14964
435424      case 3:
436425         return wd17xx_data_r(dev,offset);
437426      case 4:
438         return state->m_fdc_side | 0xfe;
427         return m_fdc_side | 0xfe;
439428      case 5:
440         return state->m_fdc_drive;
429         return m_fdc_drive;
441430      case 6:
442431         // FM-7 always returns 0xff for this register
443432         return 0xff;
444433      case 7:
445         if(state->m_fdc_irq_flag != 0)
434         if(m_fdc_irq_flag != 0)
446435            ret |= 0x40;
447         if(state->m_fdc_drq_flag != 0)
436         if(m_fdc_drq_flag != 0)
448437            ret |= 0x80;
449438         return ret;
450439   }
r14963r14964
453442   return 0x00;
454443}
455444
456static WRITE8_HANDLER( fm7_fdc_w )
445WRITE8_MEMBER(fm7_state::fm7_fdc_w)
457446{
458   fm7_state *state = space->machine().driver_data<fm7_state>();
459   device_t* dev = space->machine().device("fdc");
447   device_t* dev = machine().device("fdc");
460448   switch(offset)
461449   {
462450      case 0:
r14963r14964
472460         wd17xx_data_w(dev,offset,data);
473461         break;
474462      case 4:
475         state->m_fdc_side = data & 0x01;
463         m_fdc_side = data & 0x01;
476464         wd17xx_set_side(dev,data & 0x01);
477465         logerror("FDC: wrote %02x to 0x%04x (side)\n",data,offset+0xfd18);
478466         break;
479467      case 5:
480         state->m_fdc_drive = data;
468         m_fdc_drive = data;
481469         if((data & 0x03) > 0x01)
482470         {
483            state->m_fdc_drive = 0;
471            m_fdc_drive = 0;
484472         }
485473         else
486474         {
487475            wd17xx_set_drive(dev,data & 0x03);
488            floppy_mon_w(floppy_get_device(space->machine(), data & 0x03), !BIT(data, 7));
489            floppy_drive_set_ready_state(floppy_get_device(space->machine(), data & 0x03), data & 0x80,0);
476            floppy_mon_w(floppy_get_device(machine(), data & 0x03), !BIT(data, 7));
477            floppy_drive_set_ready_state(floppy_get_device(machine(), data & 0x03), data & 0x80,0);
490478            logerror("FDC: wrote %02x to 0x%04x (drive)\n",data,offset+0xfd18);
491479         }
492480         break;
r14963r14964
510498 *  CPU clock speed in bit 0 (0 = 1.2MHz, 1 = 2MHz)
511499 *  Clears keyboard IRQ flag
512500 */
513static READ8_HANDLER( fm7_keyboard_r )
501READ8_MEMBER(fm7_state::fm7_keyboard_r)
514502{
515   fm7_state *state = space->machine().driver_data<fm7_state>();
516503   UINT8 ret;
517504   switch(offset)
518505   {
519506      case 0:
520         ret = (state->m_current_scancode >> 1) & 0x80;
507         ret = (m_current_scancode >> 1) & 0x80;
521508         ret |= 0x01; // 1 = 2MHz, 0 = 1.2MHz
522509         return ret;
523510      case 1:
524         main_irq_clear_flag(space->machine(),IRQ_FLAG_KEY);
525         return state->m_current_scancode & 0xff;
511         main_irq_clear_flag(machine(),IRQ_FLAG_KEY);
512         return m_current_scancode & 0xff;
526513      default:
527514         return 0x00;
528515   }
529516}
530517
531READ8_HANDLER( fm7_sub_keyboard_r )
518READ8_MEMBER(fm7_state::fm7_sub_keyboard_r)
532519{
533   fm7_state *state = space->machine().driver_data<fm7_state>();
534520   UINT8 ret;
535521   switch(offset)
536522   {
537523      case 0:
538         ret = (state->m_current_scancode >> 1) & 0x80;
524         ret = (m_current_scancode >> 1) & 0x80;
539525         return ret;
540526      case 1:
541         main_irq_clear_flag(space->machine(),IRQ_FLAG_KEY);
542         return state->m_current_scancode & 0xff;
527         main_irq_clear_flag(machine(),IRQ_FLAG_KEY);
528         return m_current_scancode & 0xff;
543529      default:
544530         return 0x00;
545531   }
r14963r14964
570556 *
571557 *  ACK is received after 5us.
572558 */
573READ8_HANDLER( fm77av_key_encoder_r )
559READ8_MEMBER(fm7_state::fm77av_key_encoder_r)
574560{
575   fm7_state *state = space->machine().driver_data<fm7_state>();
576561   UINT8 ret = 0xff;
577562   switch(offset)
578563   {
579564      case 0x00:  // data register
580         if(state->m_encoder.rx_count > 0)
565         if(m_encoder.rx_count > 0)
581566         {
582            ret = state->m_encoder.buffer[state->m_encoder.position];
583            state->m_encoder.position++;
584            state->m_encoder.rx_count--;
585            state->m_encoder.latch = 0;
567            ret = m_encoder.buffer[m_encoder.position];
568            m_encoder.position++;
569            m_encoder.rx_count--;
570            m_encoder.latch = 0;
586571         }
587         if(state->m_encoder.rx_count > 0)
588            state->m_encoder.latch = 1;  // more data to receive
572         if(m_encoder.rx_count > 0)
573            m_encoder.latch = 1;  // more data to receive
589574         break;
590575      case 0x01:  // status register
591         if(state->m_encoder.latch != 0)
576         if(m_encoder.latch != 0)
592577            ret &= ~0x80;
593         if(state->m_encoder.ack == 0)
578         if(m_encoder.ack == 0)
594579            ret &= ~0x01;
595580         break;
596581   }
r14963r14964
598583   return ret;
599584}
600585
601static void fm77av_encoder_setup_command(fm7_state *state)
586void fm7_state::fm77av_encoder_setup_command()
602587{
603   switch(state->m_encoder.buffer[0])
588   switch(m_encoder.buffer[0])
604589   {
605590      case 0:  // set scancode format
606         state->m_encoder.tx_count = 2;
591         m_encoder.tx_count = 2;
607592         break;
608593      case 1:  // get scancode format
609         state->m_encoder.tx_count = 1;
594         m_encoder.tx_count = 1;
610595         break;
611596      case 2:  // set LED
612         state->m_encoder.tx_count = 2;
597         m_encoder.tx_count = 2;
613598         break;
614599      case 3:  // get LED
615         state->m_encoder.tx_count = 1;
600         m_encoder.tx_count = 1;
616601         break;
617602      case 4:  // enable repeat
618         state->m_encoder.tx_count = 2;
603         m_encoder.tx_count = 2;
619604         break;
620605      case 5:  // set repeat rate
621         state->m_encoder.tx_count = 3;
606         m_encoder.tx_count = 3;
622607         break;
623608      case 0x80:  // get/set RTC (at least two bytes, 9 if byte two = 0x01)
624         state->m_encoder.tx_count = 2;
609         m_encoder.tx_count = 2;
625610         break;
626611      case 0x81:  // digitise
627         state->m_encoder.tx_count = 2;
612         m_encoder.tx_count = 2;
628613         break;
629614      case 0x82:  // set screen mode
630         state->m_encoder.tx_count = 2;
615         m_encoder.tx_count = 2;
631616         break;
632617      case 0x83:  // get screen mode
633         state->m_encoder.tx_count = 1;
618         m_encoder.tx_count = 1;
634619         break;
635620      case 0x84:  // set monitor brightness
636         state->m_encoder.tx_count = 2;
621         m_encoder.tx_count = 2;
637622         break;
638623      default:
639         state->m_encoder.tx_count = 0;
640         state->m_encoder.rx_count = 0;
641         state->m_encoder.position = 0;
642         logerror("ENC: Unknown command 0x%02x sent, ignoring\n",state->m_encoder.buffer[0]);
624         m_encoder.tx_count = 0;
625         m_encoder.rx_count = 0;
626         m_encoder.position = 0;
627         logerror("ENC: Unknown command 0x%02x sent, ignoring\n",m_encoder.buffer[0]);
643628   }
644629}
645630
r14963r14964
649634   state->m_encoder.ack = 1;
650635}
651636
652static void fm77av_encoder_handle_command(fm7_state *state)
637void fm7_state::fm77av_encoder_handle_command()
653638{
654   switch(state->m_encoder.buffer[0])
639   switch(m_encoder.buffer[0])
655640   {
656641      case 0:  // set keyboard scancode mode
657         state->m_key_scan_mode = state->m_encoder.buffer[1];
658         state->m_encoder.rx_count = 0;
659         logerror("ENC: Keyboard set to mode %i\n",state->m_encoder.buffer[1]);
642         m_key_scan_mode = m_encoder.buffer[1];
643         m_encoder.rx_count = 0;
644         logerror("ENC: Keyboard set to mode %i\n",m_encoder.buffer[1]);
660645         break;
661646      case 1:  // get keyboard scancode mode
662         state->m_encoder.buffer[0] = state->m_key_scan_mode;
663         state->m_encoder.rx_count = 1;
664         logerror("ENC: Command %02x received\n",state->m_encoder.buffer[0]);
647         m_encoder.buffer[0] = m_key_scan_mode;
648         m_encoder.rx_count = 1;
649         logerror("ENC: Command %02x received\n",m_encoder.buffer[0]);
665650         break;
666651      case 2:  // set LEDs
667         state->m_encoder.rx_count = 0;
668         logerror("ENC: Command %02x received\n",state->m_encoder.buffer[0]);
652         m_encoder.rx_count = 0;
653         logerror("ENC: Command %02x received\n",m_encoder.buffer[0]);
669654         break;
670655      case 3:  // get LEDs
671         state->m_encoder.rx_count = 1;
672         logerror("ENC: Command %02x received\n",state->m_encoder.buffer[0]);
656         m_encoder.rx_count = 1;
657         logerror("ENC: Command %02x received\n",m_encoder.buffer[0]);
673658         break;
674659      case 4:  // enable key repeat
675         state->m_encoder.rx_count = 0;
676         logerror("ENC: Command %02x received\n",state->m_encoder.buffer[0]);
660         m_encoder.rx_count = 0;
661         logerror("ENC: Command %02x received\n",m_encoder.buffer[0]);
677662         break;
678663      case 5:  // set key repeat rate
679         state->m_key_repeat = state->m_encoder.buffer[2] * 10;
680         state->m_key_delay = state->m_encoder.buffer[1] * 10;
681         state->m_encoder.rx_count = 0;
682         logerror("ENC: Keyboard repeat rate set to %i/%i\n",state->m_encoder.buffer[1],state->m_encoder.buffer[2]);
664         m_key_repeat = m_encoder.buffer[2] * 10;
665         m_key_delay = m_encoder.buffer[1] * 10;
666         m_encoder.rx_count = 0;
667         logerror("ENC: Keyboard repeat rate set to %i/%i\n",m_encoder.buffer[1],m_encoder.buffer[2]);
683668         break;
684669      case 0x80:  // get/set RTC
685         if(state->m_encoder.buffer[1] == 0x01)
686            state->m_encoder.rx_count = 0;
670         if(m_encoder.buffer[1] == 0x01)
671            m_encoder.rx_count = 0;
687672         else
688            state->m_encoder.rx_count = 7;
689         logerror("ENC: Command %02x %02x received\n",state->m_encoder.buffer[0],state->m_encoder.buffer[1]);
673            m_encoder.rx_count = 7;
674         logerror("ENC: Command %02x %02x received\n",m_encoder.buffer[0],m_encoder.buffer[1]);
690675         break;
691676      case 0x81:  // digitise
692         state->m_encoder.rx_count = 0;
693         logerror("ENC: Command %02x received\n",state->m_encoder.buffer[0]);
677         m_encoder.rx_count = 0;
678         logerror("ENC: Command %02x received\n",m_encoder.buffer[0]);
694679         break;
695680      case 0x82:  // set screen mode
696         state->m_encoder.rx_count = 0;
697         logerror("ENC: Command %02x received\n",state->m_encoder.buffer[0]);
681         m_encoder.rx_count = 0;
682         logerror("ENC: Command %02x received\n",m_encoder.buffer[0]);
698683         break;
699684      case 0x83:  // get screen mode
700         state->m_encoder.rx_count = 1;
701         logerror("ENC: Command %02x received\n",state->m_encoder.buffer[0]);
685         m_encoder.rx_count = 1;
686         logerror("ENC: Command %02x received\n",m_encoder.buffer[0]);
702687         break;
703688      case 0x84:  // set monitor brightness
704         state->m_encoder.rx_count = 0;
705         logerror("ENC: Command %02x received\n",state->m_encoder.buffer[0]);
689         m_encoder.rx_count = 0;
690         logerror("ENC: Command %02x received\n",m_encoder.buffer[0]);
706691         break;
707692   }
708   state->m_encoder.position = 0;
693   m_encoder.position = 0;
709694}
710695
711WRITE8_HANDLER( fm77av_key_encoder_w )
696WRITE8_MEMBER(fm7_state::fm77av_key_encoder_w)
712697{
713   fm7_state *state = space->machine().driver_data<fm7_state>();
714   state->m_encoder.ack = 0;
698   m_encoder.ack = 0;
715699   if(offset == 0) // data register
716700   {
717      if(state->m_encoder.position == 0)  // first byte
701      if(m_encoder.position == 0)  // first byte
718702      {
719         fm77av_encoder_setup_command(state);
703         fm77av_encoder_setup_command();
720704      }
721      if(state->m_encoder.position == 1)  // second byte
705      if(m_encoder.position == 1)  // second byte
722706      {
723         if(state->m_encoder.buffer[0] == 0x80 || state->m_encoder.buffer[1] == 0x01)
707         if(m_encoder.buffer[0] == 0x80 || m_encoder.buffer[1] == 0x01)
724708         {
725            state->m_encoder.tx_count = 8; // 80 01 command is 9 bytes
709            m_encoder.tx_count = 8; // 80 01 command is 9 bytes
726710         }
727711      }
728      state->m_encoder.buffer[state->m_encoder.position] = data;
729      state->m_encoder.position++;
730      state->m_encoder.tx_count--;
731      if(state->m_encoder.tx_count == 0)  // last byte
732         fm77av_encoder_handle_command(state);
712      m_encoder.buffer[m_encoder.position] = data;
713      m_encoder.position++;
714      m_encoder.tx_count--;
715      if(m_encoder.tx_count == 0)  // last byte
716         fm77av_encoder_handle_command();
733717
734718      // wait 5us to set ACK flag
735      space->machine().scheduler().timer_set(attotime::from_usec(5), FUNC(fm77av_encoder_ack));
719      machine().scheduler().timer_set(attotime::from_usec(5), FUNC(fm77av_encoder_ack));
736720
737      //logerror("ENC: write 0x%02x to data register, moved to pos %i\n",data,state->m_encoder.position);
721      //logerror("ENC: write 0x%02x to data register, moved to pos %i\n",data,m_encoder.position);
738722   }
739723}
740724
741static READ8_HANDLER( fm7_cassette_printer_r )
725READ8_MEMBER(fm7_state::fm7_cassette_printer_r)
742726{
743727   // bit 7: cassette input
744728   // bit 5: printer DET2
r14963r14964
748732   // bit 1: printer error
749733   // bit 0: printer busy
750734   UINT8 ret = 0x00;
751   double data = (space->machine().device<cassette_image_device>(CASSETTE_TAG)->input());
752   centronics_device* centronics = space->machine().device<centronics_device>("lpt");
735   double data = (machine().device<cassette_image_device>(CASSETTE_TAG)->input());
736   centronics_device* centronics = machine().device<centronics_device>("lpt");
753737   UINT8 pdata;
754738   int x;
755739
756740   if(data > 0.03)
757741      ret |= 0x80;
758742
759   if(space->machine().device<cassette_image_device>(CASSETTE_TAG)->get_state() & CASSETTE_MOTOR_DISABLED)
743   if(machine().device<cassette_image_device>(CASSETTE_TAG)->get_state() & CASSETTE_MOTOR_DISABLED)
760744      ret |= 0x80;  // cassette input is high when not in use.
761745
762746   ret |= 0x70;
763747
764   if(input_port_read(space->machine(),"config") & 0x01)
748   if(input_port_read(machine(),"config") & 0x01)
765749   {
766750      ret |= 0x0f;
767      pdata = centronics->read(*space, 0);
751      pdata = centronics->read(space, 0);
768752      for(x=0;x<6;x++)
769753      {
770754         if(~pdata & (1<<x))
771            if(input_port_read(space->machine(),"lptjoy") & (1 << x))
755            if(input_port_read(machine(),"lptjoy") & (1 << x))
772756               ret &= ~0x08;
773757      }
774758   }
775759   else
776760   {
777      device_image_interface *image = dynamic_cast<device_image_interface *>(space->machine().device("lpt:printer:printer"));
761      device_image_interface *image = dynamic_cast<device_image_interface *>(machine().device("lpt:printer:printer"));
778762      if(image->exists())
779763      {
780764         if(centronics->pe_r())
r14963r14964
792776   return ret;
793777}
794778
795static WRITE8_HANDLER( fm7_cassette_printer_w )
779WRITE8_MEMBER(fm7_state::fm7_cassette_printer_w)
796780{
797   fm7_state *state = space->machine().driver_data<fm7_state>();
798   centronics_device* centronics = space->machine().device<centronics_device>("lpt");
781   centronics_device* centronics = machine().device<centronics_device>("lpt");
799782   switch(offset)
800783   {
801784      case 0:
r14963r14964
803786      // bit 6: printer strobe
804787      // bit 1: cassette motor
805788      // bit 0: cassette output
806         if((data & 0x01) != (state->m_cp_prev & 0x01))
807            space->machine().device<cassette_image_device>(CASSETTE_TAG)->output((data & 0x01) ? +1.0 : -1.0);
808         if((data & 0x02) != (state->m_cp_prev & 0x02))
809            space->machine().device<cassette_image_device>(CASSETTE_TAG)->change_state((data & 0x02) ? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED,CASSETTE_MASK_MOTOR);
789         if((data & 0x01) != (m_cp_prev & 0x01))
790            machine().device<cassette_image_device>(CASSETTE_TAG)->output((data & 0x01) ? +1.0 : -1.0);
791         if((data & 0x02) != (m_cp_prev & 0x02))
792            machine().device<cassette_image_device>(CASSETTE_TAG)->change_state((data & 0x02) ? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED,CASSETTE_MASK_MOTOR);
810793         centronics->strobe_w(!(data & 0x40));
811         state->m_cp_prev = data;
794         m_cp_prev = data;
812795         break;
813796      case 1:
814797      // Printer data
815         centronics->write(*space,0,data);
798         centronics->write(space,0,data);
816799         break;
817800   }
818801}
r14963r14964
821804 *  Main CPU: 0xfd0b
822805 *   - bit 0: Boot mode: 0=BASIC, 1=DOS
823806 */
824static READ8_HANDLER( fm77av_boot_mode_r )
807READ8_MEMBER(fm7_state::fm77av_boot_mode_r)
825808{
826809   UINT8 ret = 0xff;
827810
828   if(input_port_read(space->machine(),"DSW") & 0x02)
811   if(input_port_read(machine(),"DSW") & 0x02)
829812      ret &= ~0x01;
830813
831814   return 0xff;
r14963r14964
897880   }
898881}
899882
900static READ8_HANDLER( fm7_psg_select_r )
883READ8_MEMBER(fm7_state::fm7_psg_select_r)
901884{
902885   return 0xff;
903886}
904887
905static WRITE8_HANDLER( fm7_psg_select_w )
888WRITE8_MEMBER(fm7_state::fm7_psg_select_w)
906889{
907   fm7_state *state = space->machine().driver_data<fm7_state>();
908   state->m_psg_regsel = data & 0x03;
909   fm7_update_psg(space->machine());
890   m_psg_regsel = data & 0x03;
891   fm7_update_psg(machine());
910892}
911893
912static WRITE8_HANDLER( fm77av_ym_select_w )
894WRITE8_MEMBER(fm7_state::fm77av_ym_select_w)
913895{
914   fm7_state *state = space->machine().driver_data<fm7_state>();
915   state->m_psg_regsel = data & 0x0f;
916   fm7_update_psg(space->machine());
896   m_psg_regsel = data & 0x0f;
897   fm7_update_psg(machine());
917898}
918899
919static READ8_HANDLER( fm7_psg_data_r )
900READ8_MEMBER(fm7_state::fm7_psg_data_r)
920901{
921   fm7_state *state = space->machine().driver_data<fm7_state>();
922//  fm7_update_psg(space->machine());
923   return state->m_psg_data;
902//  fm7_update_psg(machine());
903   return m_psg_data;
924904}
925905
926static WRITE8_HANDLER( fm7_psg_data_w )
906WRITE8_MEMBER(fm7_state::fm7_psg_data_w)
927907{
928   fm7_state *state = space->machine().driver_data<fm7_state>();
929   state->m_psg_data = data;
930//  fm7_update_psg(space->machine());
908   m_psg_data = data;
909//  fm7_update_psg(machine());
931910}
932911
933static WRITE8_HANDLER( fm77av_bootram_w )
912WRITE8_MEMBER(fm7_state::fm77av_bootram_w)
934913{
935   fm7_state *state = space->machine().driver_data<fm7_state>();
936   if(!(state->m_mmr.mode & 0x01))
914   if(!(m_mmr.mode & 0x01))
937915      return;
938   state->m_boot_ram[offset] = data;
916   m_boot_ram[offset] = data;
939917}
940918
941919// Shared RAM is only usable on the main CPU if the sub CPU is halted
942static READ8_HANDLER( fm7_main_shared_r )
920READ8_MEMBER(fm7_state::fm7_main_shared_r)
943921{
944   fm7_state *state = space->machine().driver_data<fm7_state>();
945   if(state->m_video.sub_halt != 0)
946      return state->m_shared_ram[offset];
922   if(m_video.sub_halt != 0)
923      return m_shared_ram[offset];
947924   else
948925      return 0xff;
949926}
950927
951static WRITE8_HANDLER( fm7_main_shared_w )
928WRITE8_MEMBER(fm7_state::fm7_main_shared_w)
952929{
953   fm7_state *state = space->machine().driver_data<fm7_state>();
954   if(state->m_video.sub_halt != 0)
955      state->m_shared_ram[offset] = data;
930   if(m_video.sub_halt != 0)
931      m_shared_ram[offset] = data;
956932}
957933
958static READ8_HANDLER( fm7_fmirq_r )
934READ8_MEMBER(fm7_state::fm7_fmirq_r)
959935{
960   fm7_state *state = space->machine().driver_data<fm7_state>();
961936   UINT8 ret = 0xff;
962937
963   if(state->m_fm77av_ym_irq != 0)
938   if(m_fm77av_ym_irq != 0)
964939      ret &= ~0x08;
965940
966941   return ret;
r14963r14964
976951   return input_port_read(device->machine(),"joy2");
977952}
978953
979static READ8_HANDLER( fm7_unknown_r )
954READ8_MEMBER(fm7_state::fm7_unknown_r)
980955{
981956   // Port 0xFDFC is read by Dig Dug.  Controller port, perhaps?
982957   // Must return 0xff for it to read the keyboard.
r14963r14964
999974 *              - bit 0: boot RAM read-write/read-only
1000975 *
1001976 */
1002static READ8_HANDLER( fm7_mmr_r )
977READ8_MEMBER(fm7_state::fm7_mmr_r)
1003978{
1004   fm7_state *state = space->machine().driver_data<fm7_state>();
1005979   if(offset < 0x10)
1006980   {
1007      return state->m_mmr.bank_addr[state->m_mmr.segment][offset];
981      return m_mmr.bank_addr[m_mmr.segment][offset];
1008982   }
1009983   if(offset == 0x13)
1010      return state->m_mmr.mode;
984      return m_mmr.mode;
1011985   return 0xff;
1012986}
1013987
r14963r14964
10281002      switch(physical)
10291003      {
10301004         case 0x10:
1031            space->install_legacy_readwrite_handler(bank*0x1000,(bank*0x1000)+size,FUNC(fm7_vram0_r),FUNC(fm7_vram0_w));
1005            space->install_readwrite_handler(bank*0x1000,(bank*0x1000)+size,read8_delegate(FUNC(fm7_state::fm7_vram0_r),state),write8_delegate(FUNC(fm7_state::fm7_vram0_w),state));
10321006            break;
10331007         case 0x11:
1034            space->install_legacy_readwrite_handler(bank*0x1000,(bank*0x1000)+size,FUNC(fm7_vram1_r),FUNC(fm7_vram1_w));
1008            space->install_readwrite_handler(bank*0x1000,(bank*0x1000)+size,read8_delegate(FUNC(fm7_state::fm7_vram1_r),state),write8_delegate(FUNC(fm7_state::fm7_vram1_w),state));
10351009            break;
10361010         case 0x12:
1037            space->install_legacy_readwrite_handler(bank*0x1000,(bank*0x1000)+size,FUNC(fm7_vram2_r),FUNC(fm7_vram2_w));
1011            space->install_readwrite_handler(bank*0x1000,(bank*0x1000)+size,read8_delegate(FUNC(fm7_state::fm7_vram2_r),state),write8_delegate(FUNC(fm7_state::fm7_vram2_w),state));
10381012            break;
10391013         case 0x13:
1040            space->install_legacy_readwrite_handler(bank*0x1000,(bank*0x1000)+size,FUNC(fm7_vram3_r),FUNC(fm7_vram3_w));
1014            space->install_readwrite_handler(bank*0x1000,(bank*0x1000)+size,read8_delegate(FUNC(fm7_state::fm7_vram3_r),state),write8_delegate(FUNC(fm7_state::fm7_vram3_w),state));
10411015            break;
10421016         case 0x14:
1043            space->install_legacy_readwrite_handler(bank*0x1000,(bank*0x1000)+size,FUNC(fm7_vram4_r),FUNC(fm7_vram4_w));
1017            space->install_readwrite_handler(bank*0x1000,(bank*0x1000)+size,read8_delegate(FUNC(fm7_state::fm7_vram4_r),state),write8_delegate(FUNC(fm7_state::fm7_vram4_w),state));
10441018            break;
10451019         case 0x15:
1046            space->install_legacy_readwrite_handler(bank*0x1000,(bank*0x1000)+size,FUNC(fm7_vram5_r),FUNC(fm7_vram5_w));
1020            space->install_readwrite_handler(bank*0x1000,(bank*0x1000)+size,read8_delegate(FUNC(fm7_state::fm7_vram5_r),state),write8_delegate(FUNC(fm7_state::fm7_vram5_w),state));
10471021            break;
10481022         case 0x16:
1049            space->install_legacy_readwrite_handler(bank*0x1000,(bank*0x1000)+size,FUNC(fm7_vram6_r),FUNC(fm7_vram6_w));
1023            space->install_readwrite_handler(bank*0x1000,(bank*0x1000)+size,read8_delegate(FUNC(fm7_state::fm7_vram6_r),state),write8_delegate(FUNC(fm7_state::fm7_vram6_w),state));
10501024            break;
10511025         case 0x17:
1052            space->install_legacy_readwrite_handler(bank*0x1000,(bank*0x1000)+size,FUNC(fm7_vram7_r),FUNC(fm7_vram7_w));
1026            space->install_readwrite_handler(bank*0x1000,(bank*0x1000)+size,read8_delegate(FUNC(fm7_state::fm7_vram7_r),state),write8_delegate(FUNC(fm7_state::fm7_vram7_w),state));
10531027            break;
10541028         case 0x18:
1055            space->install_legacy_readwrite_handler(bank*0x1000,(bank*0x1000)+size,FUNC(fm7_vram8_r),FUNC(fm7_vram8_w));
1029            space->install_readwrite_handler(bank*0x1000,(bank*0x1000)+size,read8_delegate(FUNC(fm7_state::fm7_vram8_r),state),write8_delegate(FUNC(fm7_state::fm7_vram8_w),state));
10561030            break;
10571031         case 0x19:
1058            space->install_legacy_readwrite_handler(bank*0x1000,(bank*0x1000)+size,FUNC(fm7_vram9_r),FUNC(fm7_vram9_w));
1032            space->install_readwrite_handler(bank*0x1000,(bank*0x1000)+size,read8_delegate(FUNC(fm7_state::fm7_vram9_r),state),write8_delegate(FUNC(fm7_state::fm7_vram9_w),state));
10591033            break;
10601034         case 0x1a:
1061            space->install_legacy_readwrite_handler(bank*0x1000,(bank*0x1000)+size,FUNC(fm7_vramA_r),FUNC(fm7_vramA_w));
1035            space->install_readwrite_handler(bank*0x1000,(bank*0x1000)+size,read8_delegate(FUNC(fm7_state::fm7_vramA_r),state),write8_delegate(FUNC(fm7_state::fm7_vramA_w),state));
10621036            break;
10631037         case 0x1b:
1064            space->install_legacy_readwrite_handler(bank*0x1000,(bank*0x1000)+size,FUNC(fm7_vramB_r),FUNC(fm7_vramB_w));
1038            space->install_readwrite_handler(bank*0x1000,(bank*0x1000)+size,read8_delegate(FUNC(fm7_state::fm7_vramB_r),state),write8_delegate(FUNC(fm7_state::fm7_vramB_w),state));
10651039            break;
10661040      }
10671041//      memory_set_bankptr(space->machine(),bank+1,RAM+(physical<<12)-0x10000);
r14963r14964
10691043   }
10701044   if(physical == 0x1c)
10711045   {
1072      space->install_legacy_readwrite_handler(bank*0x1000,(bank*0x1000)+size,FUNC(fm7_console_ram_banked_r),FUNC(fm7_console_ram_banked_w));
1046      space->install_readwrite_handler(bank*0x1000,(bank*0x1000)+size,read8_delegate(FUNC(fm7_state::fm7_console_ram_banked_r),state),write8_delegate(FUNC(fm7_state::fm7_console_ram_banked_w),state));
10731047      return;
10741048   }
10751049   if(physical == 0x1d)
10761050   {
1077      space->install_legacy_readwrite_handler(bank*0x1000,(bank*0x1000)+size,FUNC(fm7_sub_ram_ports_banked_r),FUNC(fm7_sub_ram_ports_banked_w));
1051      space->install_readwrite_handler(bank*0x1000,(bank*0x1000)+size,read8_delegate(FUNC(fm7_state::fm7_sub_ram_ports_banked_r),state),write8_delegate(FUNC(fm7_state::fm7_sub_ram_ports_banked_w),state));
10781052      return;
10791053   }
10801054   if(physical == 0x35)
r14963r14964
11471121   }
11481122}
11491123
1150static WRITE8_HANDLER( fm7_mmr_w )
1124WRITE8_MEMBER(fm7_state::fm7_mmr_w)
11511125{
1152   fm7_state *state = space->machine().driver_data<fm7_state>();
11531126   if(offset < 0x10)
11541127   {
1155      state->m_mmr.bank_addr[state->m_mmr.segment][offset] = data;
1156      if(state->m_mmr.enabled)
1157         fm7_update_bank(space,offset,data);
1158      logerror("MMR: Segment %i, bank %i, set to  0x%02x\n",state->m_mmr.segment,offset,data);
1128      m_mmr.bank_addr[m_mmr.segment][offset] = data;
1129      if(m_mmr.enabled)
1130         fm7_update_bank(&space,offset,data);
1131      logerror("MMR: Segment %i, bank %i, set to  0x%02x\n",m_mmr.segment,offset,data);
11591132      return;
11601133   }
11611134   switch(offset)
11621135   {
11631136      case 0x10:
1164         state->m_mmr.segment = data & 0x07;
1165         fm7_mmr_refresh(space);
1166         logerror("MMR: Active segment set to %i\n",state->m_mmr.segment);
1137         m_mmr.segment = data & 0x07;
1138         fm7_mmr_refresh(&space);
1139         logerror("MMR: Active segment set to %i\n",m_mmr.segment);
11671140         break;
11681141      case 0x12:
1169         state->m_mmr.window_offset = data;
1170         fm7_mmr_refresh(space);
1142         m_mmr.window_offset = data;
1143         fm7_mmr_refresh(&space);
11711144         logerror("MMR: Window offset set to %02x\n",data);
11721145         break;
11731146      case 0x13:
1174         state->m_mmr.mode = data;
1175         state->m_mmr.enabled = data & 0x80;
1176         fm7_mmr_refresh(space);
1147         m_mmr.mode = data;
1148         m_mmr.enabled = data & 0x80;
1149         fm7_mmr_refresh(&space);
11771150         logerror("MMR: Mode register set to %02x\n",data);
11781151         break;
11791152   }
r14963r14964
11891162 *
11901163 *  Kanji ROM is visible at 0x20000 (first half only?)
11911164 */
1192static READ8_HANDLER( fm7_kanji_r )
1165READ8_MEMBER(fm7_state::fm7_kanji_r)
11931166{
1194   fm7_state *state = space->machine().driver_data<fm7_state>();
1195   UINT8* KROM = space->machine().region("kanji1")->base();
1196   UINT32 addr = state->m_kanji_address << 1;
1167   UINT8* KROM = machine().region("kanji1")->base();
1168   UINT32 addr = m_kanji_address << 1;
11971169
11981170   switch(offset)
11991171   {
r14963r14964
12111183   }
12121184}
12131185
1214static WRITE8_HANDLER( fm7_kanji_w )
1186WRITE8_MEMBER(fm7_state::fm7_kanji_w)
12151187{
1216   fm7_state *state = space->machine().driver_data<fm7_state>();
12171188   UINT16 addr;
12181189
12191190   switch(offset)
12201191   {
12211192      case 0:
1222         addr = ((data & 0xff) << 8) | (state->m_kanji_address & 0x00ff);
1223         state->m_kanji_address = addr;
1193         addr = ((data & 0xff) << 8) | (m_kanji_address & 0x00ff);
1194         m_kanji_address = addr;
12241195         break;
12251196      case 1:
1226         addr = (data & 0xff) | (state->m_kanji_address & 0xff00);
1227         state->m_kanji_address = addr;
1197         addr = (data & 0xff) | (m_kanji_address & 0xff00);
1198         m_kanji_address = addr;
12281199         break;
12291200      case 2:
12301201      case 3:
r14963r14964
14161387   AM_RANGE(0x0000,0x7fff) AM_RAM
14171388   AM_RANGE(0x8000,0xfbff) AM_ROMBANK("bank1") // also F-BASIC ROM, when enabled
14181389   AM_RANGE(0xfc00,0xfc7f) AM_RAM
1419   AM_RANGE(0xfc80,0xfcff) AM_READWRITE_LEGACY(fm7_main_shared_r,fm7_main_shared_w)
1390   AM_RANGE(0xfc80,0xfcff) AM_READWRITE(fm7_main_shared_r,fm7_main_shared_w)
14201391   // I/O space (FD00-FDFF)
1421   AM_RANGE(0xfd00,0xfd01) AM_READWRITE_LEGACY(fm7_keyboard_r,fm7_cassette_printer_w)
1422   AM_RANGE(0xfd02,0xfd02) AM_READWRITE_LEGACY(fm7_cassette_printer_r,fm7_irq_mask_w)  // IRQ mask
1423   AM_RANGE(0xfd03,0xfd03) AM_READWRITE_LEGACY(fm7_irq_cause_r,fm7_beeper_w)  // IRQ flags
1424   AM_RANGE(0xfd04,0xfd04) AM_READ_LEGACY(fm7_fd04_r)
1425   AM_RANGE(0xfd05,0xfd05) AM_READWRITE_LEGACY(fm7_subintf_r,fm7_subintf_w)
1426   AM_RANGE(0xfd06,0xfd0c) AM_READ_LEGACY(fm7_unknown_r)
1427   AM_RANGE(0xfd0d,0xfd0d) AM_READWRITE_LEGACY(fm7_psg_select_r,fm7_psg_select_w)
1428   AM_RANGE(0xfd0e,0xfd0e) AM_READWRITE_LEGACY(fm7_psg_data_r, fm7_psg_data_w)
1429   AM_RANGE(0xfd0f,0xfd0f) AM_READWRITE_LEGACY(fm7_rom_en_r,fm7_rom_en_w)
1430   AM_RANGE(0xfd10,0xfd17) AM_READ_LEGACY(fm7_unknown_r)
1431   AM_RANGE(0xfd18,0xfd1f) AM_READWRITE_LEGACY(fm7_fdc_r,fm7_fdc_w)
1432   AM_RANGE(0xfd20,0xfd23) AM_READWRITE_LEGACY(fm7_kanji_r,fm7_kanji_w)
1433   AM_RANGE(0xfd24,0xfd36) AM_READ_LEGACY(fm7_unknown_r)
1434   AM_RANGE(0xfd37,0xfd37) AM_WRITE_LEGACY(fm7_multipage_w)
1435   AM_RANGE(0xfd38,0xfd3f) AM_READWRITE_LEGACY(fm7_palette_r,fm7_palette_w)
1436   AM_RANGE(0xfd40,0xfdff) AM_READ_LEGACY(fm7_unknown_r)
1392   AM_RANGE(0xfd00,0xfd01) AM_READWRITE(fm7_keyboard_r,fm7_cassette_printer_w)
1393   AM_RANGE(0xfd02,0xfd02) AM_READWRITE(fm7_cassette_printer_r,fm7_irq_mask_w)  // IRQ mask
1394   AM_RANGE(0xfd03,0xfd03) AM_READWRITE(fm7_irq_cause_r,fm7_beeper_w)  // IRQ flags
1395   AM_RANGE(0xfd04,0xfd04) AM_READ(fm7_fd04_r)
1396   AM_RANGE(0xfd05,0xfd05) AM_READWRITE(fm7_subintf_r,fm7_subintf_w)
1397   AM_RANGE(0xfd06,0xfd0c) AM_READ(fm7_unknown_r)
1398   AM_RANGE(0xfd0d,0xfd0d) AM_READWRITE(fm7_psg_select_r,fm7_psg_select_w)
1399   AM_RANGE(0xfd0e,0xfd0e) AM_READWRITE(fm7_psg_data_r, fm7_psg_data_w)
1400   AM_RANGE(0xfd0f,0xfd0f) AM_READWRITE(fm7_rom_en_r,fm7_rom_en_w)
1401   AM_RANGE(0xfd10,0xfd17) AM_READ(fm7_unknown_r)
1402   AM_RANGE(0xfd18,0xfd1f) AM_READWRITE(fm7_fdc_r,fm7_fdc_w)
1403   AM_RANGE(0xfd20,0xfd23) AM_READWRITE(fm7_kanji_r,fm7_kanji_w)
1404   AM_RANGE(0xfd24,0xfd36) AM_READ(fm7_unknown_r)
1405   AM_RANGE(0xfd37,0xfd37) AM_WRITE(fm7_multipage_w)
1406   AM_RANGE(0xfd38,0xfd3f) AM_READWRITE(fm7_palette_r,fm7_palette_w)
1407   AM_RANGE(0xfd40,0xfdff) AM_READ(fm7_unknown_r)
14371408   // Boot ROM
14381409   AM_RANGE(0xfe00,0xffdf) AM_ROMBANK("bank17")
14391410   AM_RANGE(0xffe0,0xffef) AM_RAM
1440   AM_RANGE(0xfff0,0xffff) AM_READWRITE_LEGACY(vector_r,vector_w)
1411   AM_RANGE(0xfff0,0xffff) AM_READWRITE(vector_r,vector_w)
14411412ADDRESS_MAP_END
14421413
14431414static ADDRESS_MAP_START( fm8_mem, AS_PROGRAM, 8, fm7_state )
14441415   AM_RANGE(0x0000,0x7fff) AM_RAM
14451416   AM_RANGE(0x8000,0xfbff) AM_ROMBANK("bank1") // also F-BASIC ROM, when enabled
14461417   AM_RANGE(0xfc00,0xfc7f) AM_RAM
1447   AM_RANGE(0xfc80,0xfcff) AM_READWRITE_LEGACY(fm7_main_shared_r,fm7_main_shared_w)
1418   AM_RANGE(0xfc80,0xfcff) AM_READWRITE(fm7_main_shared_r,fm7_main_shared_w)
14481419   // I/O space (FD00-FDFF)
1449   AM_RANGE(0xfd00,0xfd01) AM_READWRITE_LEGACY(fm7_keyboard_r,fm7_cassette_printer_w)
1450   AM_RANGE(0xfd02,0xfd02) AM_READWRITE_LEGACY(fm7_cassette_printer_r,fm7_irq_mask_w)  // IRQ mask
1451   AM_RANGE(0xfd03,0xfd03) AM_READWRITE_LEGACY(fm7_irq_cause_r,fm7_beeper_w)  // IRQ flags
1452   AM_RANGE(0xfd04,0xfd04) AM_READ_LEGACY(fm7_fd04_r)
1453   AM_RANGE(0xfd05,0xfd05) AM_READWRITE_LEGACY(fm7_subintf_r,fm7_subintf_w)
1454   AM_RANGE(0xfd06,0xfd0c) AM_READ_LEGACY(fm7_unknown_r)
1455   AM_RANGE(0xfd0f,0xfd0f) AM_READWRITE_LEGACY(fm7_rom_en_r,fm7_rom_en_w)
1456   AM_RANGE(0xfd10,0xfd17) AM_READ_LEGACY(fm7_unknown_r)
1457   AM_RANGE(0xfd18,0xfd1f) AM_READWRITE_LEGACY(fm7_fdc_r,fm7_fdc_w)
1458   AM_RANGE(0xfd20,0xfd23) AM_READWRITE_LEGACY(fm7_kanji_r,fm7_kanji_w)
1459   AM_RANGE(0xfd24,0xfd36) AM_READ_LEGACY(fm7_unknown_r)
1460   AM_RANGE(0xfd37,0xfd37) AM_WRITE_LEGACY(fm7_multipage_w)
1461   AM_RANGE(0xfd38,0xfd3f) AM_READWRITE_LEGACY(fm7_palette_r,fm7_palette_w)
1462   AM_RANGE(0xfd40,0xfdff) AM_READ_LEGACY(fm7_unknown_r)
1420   AM_RANGE(0xfd00,0xfd01) AM_READWRITE(fm7_keyboard_r,fm7_cassette_printer_w)
1421   AM_RANGE(0xfd02,0xfd02) AM_READWRITE(fm7_cassette_printer_r,fm7_irq_mask_w)  // IRQ mask
1422   AM_RANGE(0xfd03,0xfd03) AM_READWRITE(fm7_irq_cause_r,fm7_beeper_w)  // IRQ flags
1423   AM_RANGE(0xfd04,0xfd04) AM_READ(fm7_fd04_r)
1424   AM_RANGE(0xfd05,0xfd05) AM_READWRITE(fm7_subintf_r,fm7_subintf_w)
1425   AM_RANGE(0xfd06,0xfd0c) AM_READ(fm7_unknown_r)
1426   AM_RANGE(0xfd0f,0xfd0f) AM_READWRITE(fm7_rom_en_r,fm7_rom_en_w)
1427   AM_RANGE(0xfd10,0xfd17) AM_READ(fm7_unknown_r)
1428   AM_RANGE(0xfd18,0xfd1f) AM_READWRITE(fm7_fdc_r,fm7_fdc_w)
1429   AM_RANGE(0xfd20,0xfd23) AM_READWRITE(fm7_kanji_r,fm7_kanji_w)
1430   AM_RANGE(0xfd24,0xfd36) AM_READ(fm7_unknown_r)
1431   AM_RANGE(0xfd37,0xfd37) AM_WRITE(fm7_multipage_w)
1432   AM_RANGE(0xfd38,0xfd3f) AM_READWRITE(fm7_palette_r,fm7_palette_w)
1433   AM_RANGE(0xfd40,0xfdff) AM_READ(fm7_unknown_r)
14631434   // Boot ROM
14641435   AM_RANGE(0xfe00,0xffdf) AM_ROMBANK("bank17")
14651436   AM_RANGE(0xffe0,0xffef) AM_RAM
1466   AM_RANGE(0xfff0,0xffff) AM_READWRITE_LEGACY(vector_r,vector_w)
1437   AM_RANGE(0xfff0,0xffff) AM_READWRITE(vector_r,vector_w)
14671438ADDRESS_MAP_END
14681439
14691440/*
r14963r14964
14781449*/
14791450
14801451static ADDRESS_MAP_START( fm7_sub_mem, AS_PROGRAM, 8, fm7_state )
1481   AM_RANGE(0x0000,0xbfff) AM_READWRITE_LEGACY(fm7_vram_r,fm7_vram_w) // VRAM
1452   AM_RANGE(0x0000,0xbfff) AM_READWRITE(fm7_vram_r,fm7_vram_w) // VRAM
14821453   AM_RANGE(0xc000,0xcfff) AM_RAM // Console RAM
14831454   AM_RANGE(0xd000,0xd37f) AM_RAM // Work RAM
14841455   AM_RANGE(0xd380,0xd3ff) AM_RAM AM_SHARE("shared_ram")
14851456   // I/O space (D400-D4FF)
1486   AM_RANGE(0xd400,0xd401) AM_READ_LEGACY(fm7_sub_keyboard_r)
1487   AM_RANGE(0xd402,0xd402) AM_READ_LEGACY(fm7_cancel_ack)
1488   AM_RANGE(0xd403,0xd403) AM_READ_LEGACY(fm7_sub_beeper_r)
1489   AM_RANGE(0xd404,0xd404) AM_READ_LEGACY(fm7_attn_irq_r)
1490   AM_RANGE(0xd408,0xd408) AM_READWRITE_LEGACY(fm7_crt_r,fm7_crt_w)
1491   AM_RANGE(0xd409,0xd409) AM_READWRITE_LEGACY(fm7_vram_access_r,fm7_vram_access_w)
1492   AM_RANGE(0xd40a,0xd40a) AM_READWRITE_LEGACY(fm7_sub_busyflag_r,fm7_sub_busyflag_w)
1493   AM_RANGE(0xd40e,0xd40f) AM_WRITE_LEGACY(fm7_vram_offset_w)
1457   AM_RANGE(0xd400,0xd401) AM_READ(fm7_sub_keyboard_r)
1458   AM_RANGE(0xd402,0xd402) AM_READ(fm7_cancel_ack)
1459   AM_RANGE(0xd403,0xd403) AM_READ(fm7_sub_beeper_r)
1460   AM_RANGE(0xd404,0xd404) AM_READ(fm7_attn_irq_r)
1461   AM_RANGE(0xd408,0xd408) AM_READWRITE(fm7_crt_r,fm7_crt_w)
1462   AM_RANGE(0xd409,0xd409) AM_READWRITE(fm7_vram_access_r,fm7_vram_access_w)
1463   AM_RANGE(0xd40a,0xd40a) AM_READWRITE(fm7_sub_busyflag_r,fm7_sub_busyflag_w)
1464   AM_RANGE(0xd40e,0xd40f) AM_WRITE(fm7_vram_offset_w)
14941465   AM_RANGE(0xd800,0xffff) AM_ROM
14951466ADDRESS_MAP_END
14961467
r14963r14964
15121483   AM_RANGE(0xe000,0xefff) AM_RAMBANK("bank15")
15131484   AM_RANGE(0xf000,0xfbff) AM_RAMBANK("bank16")
15141485   AM_RANGE(0xfc00,0xfc7f) AM_RAM
1515   AM_RANGE(0xfc80,0xfcff) AM_READWRITE_LEGACY(fm7_main_shared_r,fm7_main_shared_w)
1486   AM_RANGE(0xfc80,0xfcff) AM_READWRITE(fm7_main_shared_r,fm7_main_shared_w)
15161487   // I/O space (FD00-FDFF)
1517   AM_RANGE(0xfd00,0xfd01) AM_READWRITE_LEGACY(fm7_keyboard_r,fm7_cassette_printer_w)
1518   AM_RANGE(0xfd02,0xfd02) AM_READWRITE_LEGACY(fm7_cassette_printer_r,fm7_irq_mask_w)  // IRQ mask
1519   AM_RANGE(0xfd03,0xfd03) AM_READWRITE_LEGACY(fm7_irq_cause_r,fm7_beeper_w)  // IRQ flags
1520   AM_RANGE(0xfd04,0xfd04) AM_READ_LEGACY(fm7_fd04_r)
1521   AM_RANGE(0xfd05,0xfd05) AM_READWRITE_LEGACY(fm7_subintf_r,fm7_subintf_w)
1522   AM_RANGE(0xfd06,0xfd0a) AM_READ_LEGACY(fm7_unknown_r)
1523   AM_RANGE(0xfd0b,0xfd0b) AM_READ_LEGACY(fm77av_boot_mode_r)
1524   AM_RANGE(0xfd0c,0xfd0c) AM_READ_LEGACY(fm7_unknown_r)
1525   AM_RANGE(0xfd0f,0xfd0f) AM_READWRITE_LEGACY(fm7_rom_en_r,fm7_rom_en_w)
1526   AM_RANGE(0xfd10,0xfd10) AM_WRITE_LEGACY(fm7_init_en_w)
1527   AM_RANGE(0xfd11,0xfd11) AM_READ_LEGACY(fm7_unknown_r)
1528   AM_RANGE(0xfd12,0xfd12) AM_READWRITE_LEGACY(fm77av_sub_modestatus_r,fm77av_sub_modestatus_w)
1529   AM_RANGE(0xfd13,0xfd13) AM_WRITE_LEGACY(fm77av_sub_bank_w)
1530   AM_RANGE(0xfd14,0xfd14) AM_READ_LEGACY(fm7_unknown_r)
1531   AM_RANGE(0xfd17,0xfd17) AM_READ_LEGACY(fm7_fmirq_r)
1532   AM_RANGE(0xfd18,0xfd1f) AM_READWRITE_LEGACY(fm7_fdc_r,fm7_fdc_w)
1533   AM_RANGE(0xfd20,0xfd23) AM_READWRITE_LEGACY(fm7_kanji_r,fm7_kanji_w)
1534   AM_RANGE(0xfd24,0xfd2b) AM_READ_LEGACY(fm7_unknown_r)
1535   AM_RANGE(0xfd30,0xfd34) AM_WRITE_LEGACY(fm77av_analog_palette_w)
1536   AM_RANGE(0xfd35,0xfd36) AM_READ_LEGACY(fm7_unknown_r)
1537   AM_RANGE(0xfd37,0xfd37) AM_WRITE_LEGACY(fm7_multipage_w)
1538   AM_RANGE(0xfd38,0xfd3f) AM_READWRITE_LEGACY(fm7_palette_r,fm7_palette_w)
1539   AM_RANGE(0xfd40,0xfd7f) AM_READ_LEGACY(fm7_unknown_r)
1540   AM_RANGE(0xfd80,0xfd93) AM_READWRITE_LEGACY(fm7_mmr_r,fm7_mmr_w)
1541   AM_RANGE(0xfd94,0xfdff) AM_READ_LEGACY(fm7_unknown_r)
1542   AM_RANGE(0xfe00,0xffdf) AM_RAM_WRITE_LEGACY(fm77av_bootram_w) AM_SHARE("boot_ram")
1488   AM_RANGE(0xfd00,0xfd01) AM_READWRITE(fm7_keyboard_r,fm7_cassette_printer_w)
1489   AM_RANGE(0xfd02,0xfd02) AM_READWRITE(fm7_cassette_printer_r,fm7_irq_mask_w)  // IRQ mask
1490   AM_RANGE(0xfd03,0xfd03) AM_READWRITE(fm7_irq_cause_r,fm7_beeper_w)  // IRQ flags
1491   AM_RANGE(0xfd04,0xfd04) AM_READ(fm7_fd04_r)
1492   AM_RANGE(0xfd05,0xfd05) AM_READWRITE(fm7_subintf_r,fm7_subintf_w)
1493   AM_RANGE(0xfd06,0xfd0a) AM_READ(fm7_unknown_r)
1494   AM_RANGE(0xfd0b,0xfd0b) AM_READ(fm77av_boot_mode_r)
1495   AM_RANGE(0xfd0c,0xfd0c) AM_READ(fm7_unknown_r)
1496   AM_RANGE(0xfd0f,0xfd0f) AM_READWRITE(fm7_rom_en_r,fm7_rom_en_w)
1497   AM_RANGE(0xfd10,0xfd10) AM_WRITE(fm7_init_en_w)
1498   AM_RANGE(0xfd11,0xfd11) AM_READ(fm7_unknown_r)
1499   AM_RANGE(0xfd12,0xfd12) AM_READWRITE(fm77av_sub_modestatus_r,fm77av_sub_modestatus_w)
1500   AM_RANGE(0xfd13,0xfd13) AM_WRITE(fm77av_sub_bank_w)
1501   AM_RANGE(0xfd14,0xfd14) AM_READ(fm7_unknown_r)
1502   AM_RANGE(0xfd17,0xfd17) AM_READ(fm7_fmirq_r)
1503   AM_RANGE(0xfd18,0xfd1f) AM_READWRITE(fm7_fdc_r,fm7_fdc_w)
1504   AM_RANGE(0xfd20,0xfd23) AM_READWRITE(fm7_kanji_r,fm7_kanji_w)
1505   AM_RANGE(0xfd24,0xfd2b) AM_READ(fm7_unknown_r)
1506   AM_RANGE(0xfd30,0xfd34) AM_WRITE(fm77av_analog_palette_w)
1507   AM_RANGE(0xfd35,0xfd36) AM_READ(fm7_unknown_r)
1508   AM_RANGE(0xfd37,0xfd37) AM_WRITE(fm7_multipage_w)
1509   AM_RANGE(0xfd38,0xfd3f) AM_READWRITE(fm7_palette_r,fm7_palette_w)
1510   AM_RANGE(0xfd40,0xfd7f) AM_READ(fm7_unknown_r)
1511   AM_RANGE(0xfd80,0xfd93) AM_READWRITE(fm7_mmr_r,fm7_mmr_w)
1512   AM_RANGE(0xfd94,0xfdff) AM_READ(fm7_unknown_r)
1513   AM_RANGE(0xfe00,0xffdf) AM_RAM_WRITE(fm77av_bootram_w) AM_SHARE("boot_ram")
15431514   AM_RANGE(0xffe0,0xffef) AM_RAM
1544   AM_RANGE(0xfff0,0xffff) AM_READWRITE_LEGACY(vector_r,vector_w)
1515   AM_RANGE(0xfff0,0xffff) AM_READWRITE(vector_r,vector_w)
15451516ADDRESS_MAP_END
15461517
15471518// Much of this is guesswork at the moment
15481519static ADDRESS_MAP_START( fm11_sub_mem, AS_PROGRAM, 8, fm7_state )
1549   AM_RANGE(0x0000,0x7fff) AM_READWRITE_LEGACY(fm7_vram_r,fm7_vram_w) // VRAM
1520   AM_RANGE(0x0000,0x7fff) AM_READWRITE(fm7_vram_r,fm7_vram_w) // VRAM
15501521   AM_RANGE(0x8000,0x8fff) AM_RAM // Console RAM(?)
15511522   AM_RANGE(0x9000,0x9f7f) AM_RAM // Work RAM(?)
15521523   AM_RANGE(0x9f80,0x9fff) AM_RAM AM_SHARE("shared_ram")
1553   AM_RANGE(0xafe4,0xafe4) AM_READWRITE_LEGACY(fm7_sub_busyflag_r,fm7_sub_busyflag_w)
1554   AM_RANGE(0xafe6,0xafe6) AM_READWRITE_LEGACY(fm77av_video_flags_r,fm77av_video_flags_w)
1524   AM_RANGE(0xafe4,0xafe4) AM_READWRITE(fm7_sub_busyflag_r,fm7_sub_busyflag_w)
1525   AM_RANGE(0xafe6,0xafe6) AM_READWRITE(fm77av_video_flags_r,fm77av_video_flags_w)
15551526   AM_RANGE(0xc000,0xffff) AM_ROM // sybsystem ROM
15561527ADDRESS_MAP_END
15571528
r14963r14964
15621533ADDRESS_MAP_END
15631534
15641535static ADDRESS_MAP_START( fm11_x86_io, AS_IO, 8, fm7_state )
1565   AM_RANGE(0xfd00,0xfd01) AM_READWRITE_LEGACY(fm7_keyboard_r,fm7_cassette_printer_w)
1566   AM_RANGE(0xfd02,0xfd02) AM_READWRITE_LEGACY(fm7_cassette_printer_r,fm7_irq_mask_w)  // IRQ mask
1567   AM_RANGE(0xfd03,0xfd03) AM_READWRITE_LEGACY(fm7_irq_cause_r,fm7_beeper_w)  // IRQ flags
1568   AM_RANGE(0xfd04,0xfd04) AM_READ_LEGACY(fm7_fd04_r)
1569   AM_RANGE(0xfd05,0xfd05) AM_READWRITE_LEGACY(fm7_subintf_r,fm7_subintf_w)
1570   AM_RANGE(0xfd06,0xfd0c) AM_READ_LEGACY(fm7_unknown_r)
1571   AM_RANGE(0xfd0f,0xfd0f) AM_READWRITE_LEGACY(fm7_rom_en_r,fm7_rom_en_w)
1572   AM_RANGE(0xfd10,0xfd17) AM_READ_LEGACY(fm7_unknown_r)
1573   AM_RANGE(0xfd18,0xfd1f) AM_READWRITE_LEGACY(fm7_fdc_r,fm7_fdc_w)
1574   AM_RANGE(0xfd20,0xfd23) AM_READWRITE_LEGACY(fm7_kanji_r,fm7_kanji_w)
1575   AM_RANGE(0xfd24,0xfd36) AM_READ_LEGACY(fm7_unknown_r)
1576   AM_RANGE(0xfd37,0xfd37) AM_WRITE_LEGACY(fm7_multipage_w)
1577   AM_RANGE(0xfd38,0xfd3f) AM_READWRITE_LEGACY(fm7_palette_r,fm7_palette_w)
1578   AM_RANGE(0xfd40,0xfdff) AM_READ_LEGACY(fm7_unknown_r)
1536   AM_RANGE(0xfd00,0xfd01) AM_READWRITE(fm7_keyboard_r,fm7_cassette_printer_w)
1537   AM_RANGE(0xfd02,0xfd02) AM_READWRITE(fm7_cassette_printer_r,fm7_irq_mask_w)  // IRQ mask
1538   AM_RANGE(0xfd03,0xfd03) AM_READWRITE(fm7_irq_cause_r,fm7_beeper_w)  // IRQ flags
1539   AM_RANGE(0xfd04,0xfd04) AM_READ(fm7_fd04_r)
1540   AM_RANGE(0xfd05,0xfd05) AM_READWRITE(fm7_subintf_r,fm7_subintf_w)
1541   AM_RANGE(0xfd06,0xfd0c) AM_READ(fm7_unknown_r)
1542   AM_RANGE(0xfd0f,0xfd0f) AM_READWRITE(fm7_rom_en_r,fm7_rom_en_w)
1543   AM_RANGE(0xfd10,0xfd17) AM_READ(fm7_unknown_r)
1544   AM_RANGE(0xfd18,0xfd1f) AM_READWRITE(fm7_fdc_r,fm7_fdc_w)
1545   AM_RANGE(0xfd20,0xfd23) AM_READWRITE(fm7_kanji_r,fm7_kanji_w)
1546   AM_RANGE(0xfd24,0xfd36) AM_READ(fm7_unknown_r)
1547   AM_RANGE(0xfd37,0xfd37) AM_WRITE(fm7_multipage_w)
1548   AM_RANGE(0xfd38,0xfd3f) AM_READWRITE(fm7_palette_r,fm7_palette_w)
1549   AM_RANGE(0xfd40,0xfdff) AM_READ(fm7_unknown_r)
15791550ADDRESS_MAP_END
15801551
15811552static ADDRESS_MAP_START( fm16_mem, AS_PROGRAM, 16, fm7_state )
r14963r14964
15841555ADDRESS_MAP_END
15851556
15861557static ADDRESS_MAP_START( fm16_io, AS_IO, 16, fm7_state )
1587   AM_RANGE(0xfd00,0xfd01) AM_READWRITE8_LEGACY(fm7_keyboard_r,fm7_cassette_printer_w,0xffff)
1588   AM_RANGE(0xfd02,0xfd03) AM_READWRITE8_LEGACY(fm7_cassette_printer_r,fm7_irq_mask_w,0x00ff)  // IRQ mask
1589   AM_RANGE(0xfd02,0xfd03) AM_READWRITE8_LEGACY(fm7_irq_cause_r,fm7_beeper_w,0xff00)  // IRQ flags
1590   AM_RANGE(0xfd04,0xfd05) AM_READ8_LEGACY(fm7_fd04_r,0x00ff)
1591   AM_RANGE(0xfd04,0xfd05) AM_READWRITE8_LEGACY(fm7_subintf_r,fm7_subintf_w,0xff00)
1592//  AM_RANGE(0xfd06,0xfd0c) AM_READ8_LEGACY(fm7_unknown_r,0xffff)
1593   AM_RANGE(0xfd0e,0xfd0f) AM_READWRITE8_LEGACY(fm7_rom_en_r,fm7_rom_en_w,0xff00)
1594//  AM_RANGE(0xfd10,0xfd17) AM_READ8_LEGACY(fm7_unknown_r,0xffff)
1595   AM_RANGE(0xfd18,0xfd1f) AM_READWRITE8_LEGACY(fm7_fdc_r,fm7_fdc_w,0xffff)
1596   AM_RANGE(0xfd20,0xfd23) AM_READWRITE8_LEGACY(fm7_kanji_r,fm7_kanji_w,0xffff)
1597//  AM_RANGE(0xfd24,0xfd36) AM_READ8_LEGACY(fm7_unknown_r,0xffff)
1598   AM_RANGE(0xfd36,0xfd37) AM_WRITE8_LEGACY(fm7_multipage_w,0xff00)
1599   AM_RANGE(0xfd38,0xfd3f) AM_READWRITE8_LEGACY(fm7_palette_r,fm7_palette_w,0xffff)
1600//  AM_RANGE(0xfd40,0xfdff) AM_READ8_LEGACY(fm7_unknown_r,0xffff)
1558   AM_RANGE(0xfd00,0xfd01) AM_READWRITE8(fm7_keyboard_r,fm7_cassette_printer_w,0xffff)
1559   AM_RANGE(0xfd02,0xfd03) AM_READWRITE8(fm7_cassette_printer_r,fm7_irq_mask_w,0x00ff)  // IRQ mask
1560   AM_RANGE(0xfd02,0xfd03) AM_READWRITE8(fm7_irq_cause_r,fm7_beeper_w,0xff00)  // IRQ flags
1561   AM_RANGE(0xfd04,0xfd05) AM_READ8(fm7_fd04_r,0x00ff)
1562   AM_RANGE(0xfd04,0xfd05) AM_READWRITE8(fm7_subintf_r,fm7_subintf_w,0xff00)
1563//  AM_RANGE(0xfd06,0xfd0c) AM_READ8(fm7_unknown_r,0xffff)
1564   AM_RANGE(0xfd0e,0xfd0f) AM_READWRITE8(fm7_rom_en_r,fm7_rom_en_w,0xff00)
1565//  AM_RANGE(0xfd10,0xfd17) AM_READ8(fm7_unknown_r,0xffff)
1566   AM_RANGE(0xfd18,0xfd1f) AM_READWRITE8(fm7_fdc_r,fm7_fdc_w,0xffff)
1567   AM_RANGE(0xfd20,0xfd23) AM_READWRITE8(fm7_kanji_r,fm7_kanji_w,0xffff)
1568//  AM_RANGE(0xfd24,0xfd36) AM_READ8(fm7_unknown_r,0xffff)
1569   AM_RANGE(0xfd36,0xfd37) AM_WRITE8(fm7_multipage_w,0xff00)
1570   AM_RANGE(0xfd38,0xfd3f) AM_READWRITE8(fm7_palette_r,fm7_palette_w,0xffff)
1571//  AM_RANGE(0xfd40,0xfdff) AM_READ8(fm7_unknown_r,0xffff)
16011572ADDRESS_MAP_END
16021573
16031574static ADDRESS_MAP_START( fm16_sub_mem, AS_PROGRAM, 8, fm7_state )
1604   AM_RANGE(0x0000,0xafff) AM_READWRITE_LEGACY(fm7_vram_r,fm7_vram_w) // VRAM
1575   AM_RANGE(0x0000,0xafff) AM_READWRITE(fm7_vram_r,fm7_vram_w) // VRAM
16051576   AM_RANGE(0xb000,0xffff) AM_ROM // subsystem ROM
16061577ADDRESS_MAP_END
16071578
r14963r14964
16231594   AM_RANGE(0xe000,0xefff) AM_RAMBANK("bank15")
16241595   AM_RANGE(0xf000,0xfbff) AM_RAMBANK("bank16")
16251596   AM_RANGE(0xfc00,0xfc7f) AM_RAM
1626   AM_RANGE(0xfc80,0xfcff) AM_READWRITE_LEGACY(fm7_main_shared_r,fm7_main_shared_w)
1597   AM_RANGE(0xfc80,0xfcff) AM_READWRITE(fm7_main_shared_r,fm7_main_shared_w)
16271598   // I/O space (FD00-FDFF)
1628   AM_RANGE(0xfd00,0xfd01) AM_READWRITE_LEGACY(fm7_keyboard_r,fm7_cassette_printer_w)
1629   AM_RANGE(0xfd02,0xfd02) AM_READWRITE_LEGACY(fm7_cassette_printer_r,fm7_irq_mask_w)  // IRQ mask
1630   AM_RANGE(0xfd03,0xfd03) AM_READWRITE_LEGACY(fm7_irq_cause_r,fm7_beeper_w)  // IRQ flags
1631   AM_RANGE(0xfd04,0xfd04) AM_READ_LEGACY(fm7_fd04_r)
1632   AM_RANGE(0xfd05,0xfd05) AM_READWRITE_LEGACY(fm7_subintf_r,fm7_subintf_w)
1633   AM_RANGE(0xfd06,0xfd0a) AM_READ_LEGACY(fm7_unknown_r)
1634   AM_RANGE(0xfd0b,0xfd0b) AM_READ_LEGACY(fm77av_boot_mode_r)
1635   AM_RANGE(0xfd0c,0xfd0c) AM_READ_LEGACY(fm7_unknown_r)
1636   AM_RANGE(0xfd0d,0xfd0d) AM_READWRITE_LEGACY(fm7_psg_select_r,fm7_psg_select_w)
1637   AM_RANGE(0xfd0e,0xfd0e) AM_READWRITE_LEGACY(fm7_psg_data_r, fm7_psg_data_w)
1638   AM_RANGE(0xfd0f,0xfd0f) AM_READWRITE_LEGACY(fm7_rom_en_r,fm7_rom_en_w)
1639   AM_RANGE(0xfd10,0xfd10) AM_WRITE_LEGACY(fm7_init_en_w)
1640   AM_RANGE(0xfd11,0xfd11) AM_READ_LEGACY(fm7_unknown_r)
1641   AM_RANGE(0xfd12,0xfd12) AM_READWRITE_LEGACY(fm77av_sub_modestatus_r,fm77av_sub_modestatus_w)
1642   AM_RANGE(0xfd13,0xfd13) AM_WRITE_LEGACY(fm77av_sub_bank_w)
1643   AM_RANGE(0xfd14,0xfd14) AM_READ_LEGACY(fm7_unknown_r)
1644   AM_RANGE(0xfd15,0xfd15) AM_READWRITE_LEGACY(fm7_psg_select_r,fm77av_ym_select_w)
1645   AM_RANGE(0xfd16,0xfd16) AM_READWRITE_LEGACY(fm7_psg_data_r,fm7_psg_data_w)
1646   AM_RANGE(0xfd17,0xfd17) AM_READ_LEGACY(fm7_fmirq_r)
1647   AM_RANGE(0xfd18,0xfd1f) AM_READWRITE_LEGACY(fm7_fdc_r,fm7_fdc_w)
1648   AM_RANGE(0xfd20,0xfd23) AM_READWRITE_LEGACY(fm7_kanji_r,fm7_kanji_w)
1649   AM_RANGE(0xfd24,0xfd2b) AM_READ_LEGACY(fm7_unknown_r)
1650   AM_RANGE(0xfd30,0xfd34) AM_WRITE_LEGACY(fm77av_analog_palette_w)
1651   AM_RANGE(0xfd35,0xfd36) AM_READ_LEGACY(fm7_unknown_r)
1652   AM_RANGE(0xfd37,0xfd37) AM_WRITE_LEGACY(fm7_multipage_w)
1653   AM_RANGE(0xfd38,0xfd3f) AM_READWRITE_LEGACY(fm7_palette_r,fm7_palette_w)
1654   AM_RANGE(0xfd40,0xfd7f) AM_READ_LEGACY(fm7_unknown_r)
1655   AM_RANGE(0xfd80,0xfd93) AM_READWRITE_LEGACY(fm7_mmr_r,fm7_mmr_w)
1656   AM_RANGE(0xfd94,0xfdff) AM_READ_LEGACY(fm7_unknown_r)
1599   AM_RANGE(0xfd00,0xfd01) AM_READWRITE(fm7_keyboard_r,fm7_cassette_printer_w)
1600   AM_RANGE(0xfd02,0xfd02) AM_READWRITE(fm7_cassette_printer_r,fm7_irq_mask_w)  // IRQ mask
1601   AM_RANGE(0xfd03,0xfd03) AM_READWRITE(fm7_irq_cause_r,fm7_beeper_w)  // IRQ flags
1602   AM_RANGE(0xfd04,0xfd04) AM_READ(fm7_fd04_r)
1603   AM_RANGE(0xfd05,0xfd05) AM_READWRITE(fm7_subintf_r,fm7_subintf_w)
1604   AM_RANGE(0xfd06,0xfd0a) AM_READ(fm7_unknown_r)
1605   AM_RANGE(0xfd0b,0xfd0b) AM_READ(fm77av_boot_mode_r)
1606   AM_RANGE(0xfd0c,0xfd0c) AM_READ(fm7_unknown_r)
1607   AM_RANGE(0xfd0d,0xfd0d) AM_READWRITE(fm7_psg_select_r,fm7_psg_select_w)
1608   AM_RANGE(0xfd0e,0xfd0e) AM_READWRITE(fm7_psg_data_r, fm7_psg_data_w)
1609   AM_RANGE(0xfd0f,0xfd0f) AM_READWRITE(fm7_rom_en_r,fm7_rom_en_w)
1610   AM_RANGE(0xfd10,0xfd10) AM_WRITE(fm7_init_en_w)
1611   AM_RANGE(0xfd11,0xfd11) AM_READ(fm7_unknown_r)
1612   AM_RANGE(0xfd12,0xfd12) AM_READWRITE(fm77av_sub_modestatus_r,fm77av_sub_modestatus_w)
1613   AM_RANGE(0xfd13,0xfd13) AM_WRITE(fm77av_sub_bank_w)
1614   AM_RANGE(0xfd14,0xfd14) AM_READ(fm7_unknown_r)
1615   AM_RANGE(0xfd15,0xfd15) AM_READWRITE(fm7_psg_select_r,fm77av_ym_select_w)
1616   AM_RANGE(0xfd16,0xfd16) AM_READWRITE(fm7_psg_data_r,fm7_psg_data_w)
1617   AM_RANGE(0xfd17,0xfd17) AM_READ(fm7_fmirq_r)
1618   AM_RANGE(0xfd18,0xfd1f) AM_READWRITE(fm7_fdc_r,fm7_fdc_w)
1619   AM_RANGE(0xfd20,0xfd23) AM_READWRITE(fm7_kanji_r,fm7_kanji_w)
1620   AM_RANGE(0xfd24,0xfd2b) AM_READ(fm7_unknown_r)
1621   AM_RANGE(0xfd30,0xfd34) AM_WRITE(fm77av_analog_palette_w)
1622   AM_RANGE(0xfd35,0xfd36) AM_READ(fm7_unknown_r)
1623   AM_RANGE(0xfd37,0xfd37) AM_WRITE(fm7_multipage_w)
1624   AM_RANGE(0xfd38,0xfd3f) AM_READWRITE(fm7_palette_r,fm7_palette_w)
1625   AM_RANGE(0xfd40,0xfd7f) AM_READ(fm7_unknown_r)
1626   AM_RANGE(0xfd80,0xfd93) AM_READWRITE(fm7_mmr_r,fm7_mmr_w)
1627   AM_RANGE(0xfd94,0xfdff) AM_READ(fm7_unknown_r)
16571628   // Boot ROM (RAM on FM77AV and later)
1658   AM_RANGE(0xfe00,0xffdf) AM_RAM_WRITE_LEGACY(fm77av_bootram_w) AM_SHARE("boot_ram")
1629   AM_RANGE(0xfe00,0xffdf) AM_RAM_WRITE(fm77av_bootram_w) AM_SHARE("boot_ram")
16591630   AM_RANGE(0xffe0,0xffef) AM_RAM
1660   AM_RANGE(0xfff0,0xffff) AM_READWRITE_LEGACY(vector_r,vector_w)
1631   AM_RANGE(0xfff0,0xffff) AM_READWRITE(vector_r,vector_w)
16611632ADDRESS_MAP_END
16621633
16631634static ADDRESS_MAP_START( fm77av_sub_mem, AS_PROGRAM, 8, fm7_state )
1664   AM_RANGE(0x0000,0xbfff) AM_READWRITE_LEGACY(fm7_vram_r,fm7_vram_w) // VRAM
1635   AM_RANGE(0x0000,0xbfff) AM_READWRITE(fm7_vram_r,fm7_vram_w) // VRAM
16651636   AM_RANGE(0xc000,0xcfff) AM_RAM AM_REGION("maincpu",0x1c000) // Console RAM
16661637   AM_RANGE(0xd000,0xd37f) AM_RAM AM_REGION("maincpu",0x1d000) // Work RAM
16671638   AM_RANGE(0xd380,0xd3ff) AM_RAM AM_SHARE("shared_ram")
16681639   // I/O space (D400-D4FF)
1669   AM_RANGE(0xd400,0xd401) AM_READ_LEGACY(fm7_sub_keyboard_r)
1670   AM_RANGE(0xd402,0xd402) AM_READ_LEGACY(fm7_cancel_ack)
1671   AM_RANGE(0xd403,0xd403) AM_READ_LEGACY(fm7_sub_beeper_r)
1672   AM_RANGE(0xd404,0xd404) AM_READ_LEGACY(fm7_attn_irq_r)
1673   AM_RANGE(0xd408,0xd408) AM_READWRITE_LEGACY(fm7_crt_r,fm7_crt_w)
1674   AM_RANGE(0xd409,0xd409) AM_READWRITE_LEGACY(fm7_vram_access_r,fm7_vram_access_w)
1675   AM_RANGE(0xd40a,0xd40a) AM_READWRITE_LEGACY(fm7_sub_busyflag_r,fm7_sub_busyflag_w)
1676   AM_RANGE(0xd40e,0xd40f) AM_WRITE_LEGACY(fm7_vram_offset_w)
1677   AM_RANGE(0xd410,0xd42b) AM_READWRITE_LEGACY(fm77av_alu_r, fm77av_alu_w)
1678   AM_RANGE(0xd430,0xd430) AM_READWRITE_LEGACY(fm77av_video_flags_r,fm77av_video_flags_w)
1679   AM_RANGE(0xd431,0xd432) AM_READWRITE_LEGACY(fm77av_key_encoder_r,fm77av_key_encoder_w)
1640   AM_RANGE(0xd400,0xd401) AM_READ(fm7_sub_keyboard_r)
1641   AM_RANGE(0xd402,0xd402) AM_READ(fm7_cancel_ack)
1642   AM_RANGE(0xd403,0xd403) AM_READ(fm7_sub_beeper_r)
1643   AM_RANGE(0xd404,0xd404) AM_READ(fm7_attn_irq_r)
1644   AM_RANGE(0xd408,0xd408) AM_READWRITE(fm7_crt_r,fm7_crt_w)
1645   AM_RANGE(0xd409,0xd409) AM_READWRITE(fm7_vram_access_r,fm7_vram_access_w)
1646   AM_RANGE(0xd40a,0xd40a) AM_READWRITE(fm7_sub_busyflag_r,fm7_sub_busyflag_w)
1647   AM_RANGE(0xd40e,0xd40f) AM_WRITE(fm7_vram_offset_w)
1648   AM_RANGE(0xd410,0xd42b) AM_READWRITE(fm77av_alu_r, fm77av_alu_w)
1649   AM_RANGE(0xd430,0xd430) AM_READWRITE(fm77av_video_flags_r,fm77av_video_flags_w)
1650   AM_RANGE(0xd431,0xd432) AM_READWRITE(fm77av_key_encoder_r,fm77av_key_encoder_w)
16801651   AM_RANGE(0xd500,0xd7ff) AM_RAM AM_REGION("maincpu",0x1d500) // Work RAM
16811652   AM_RANGE(0xd800,0xdfff) AM_ROMBANK("bank20")
16821653   AM_RANGE(0xe000,0xffff) AM_ROMBANK("bank21")
src/mess/drivers/vtech2.c
r14963r14964
8383
8484static ADDRESS_MAP_START(vtech2_io, AS_IO, 8, vtech2_state )
8585   ADDRESS_MAP_GLOBAL_MASK(0xff)
86   AM_RANGE(0x10, 0x1f) AM_READWRITE_LEGACY(laser_fdc_r, laser_fdc_w)
87   AM_RANGE(0x40, 0x43) AM_WRITE_LEGACY(laser_bank_select_w)
88   AM_RANGE(0x44, 0x44) AM_WRITE_LEGACY(laser_bg_mode_w)
89   AM_RANGE(0x45, 0x45) AM_WRITE_LEGACY(laser_two_color_w)
86   AM_RANGE(0x10, 0x1f) AM_READWRITE(laser_fdc_r, laser_fdc_w)
87   AM_RANGE(0x40, 0x43) AM_WRITE(laser_bank_select_w)
88   AM_RANGE(0x44, 0x44) AM_WRITE(laser_bg_mode_w)
89   AM_RANGE(0x45, 0x45) AM_WRITE(laser_two_color_w)
9090ADDRESS_MAP_END
9191
9292/* 2008-05 FP:
src/mess/drivers/z80ne.c
r14963r14964
142142
143143static ADDRESS_MAP_START( z80ne_io, AS_IO, 8, z80ne_state )
144144   ADDRESS_MAP_GLOBAL_MASK(0xff)
145   AM_RANGE(0xee, 0xee) AM_READWRITE_LEGACY(lx385_data_r, lx385_data_w )
146   AM_RANGE(0xef, 0xef) AM_READWRITE_LEGACY(lx385_ctrl_r, lx385_ctrl_w )
147   AM_RANGE(0xf0, 0xff) AM_READWRITE_LEGACY(lx383_r, lx383_w )
145   AM_RANGE(0xee, 0xee) AM_READWRITE(lx385_data_r, lx385_data_w )
146   AM_RANGE(0xef, 0xef) AM_READWRITE(lx385_ctrl_r, lx385_ctrl_w )
147   AM_RANGE(0xf0, 0xff) AM_READWRITE(lx383_r, lx383_w )
148148ADDRESS_MAP_END
149149
150150static ADDRESS_MAP_START( z80net_io, AS_IO, 8, z80ne_state )
151151   ADDRESS_MAP_GLOBAL_MASK(0xff)
152   AM_RANGE(0xea, 0xea) AM_READ_LEGACY(lx388_data_r )
153   AM_RANGE(0xeb, 0xeb) AM_READ_LEGACY(lx388_read_field_sync )
154   AM_RANGE(0xee, 0xee) AM_READWRITE_LEGACY(lx385_data_r, lx385_data_w )
155   AM_RANGE(0xef, 0xef) AM_READWRITE_LEGACY(lx385_ctrl_r, lx385_ctrl_w )
156   AM_RANGE(0xf0, 0xff) AM_READWRITE_LEGACY(lx383_r, lx383_w )
152   AM_RANGE(0xea, 0xea) AM_READ(lx388_data_r )
153   AM_RANGE(0xeb, 0xeb) AM_READ(lx388_read_field_sync )
154   AM_RANGE(0xee, 0xee) AM_READWRITE(lx385_data_r, lx385_data_w )
155   AM_RANGE(0xef, 0xef) AM_READWRITE(lx385_ctrl_r, lx385_ctrl_w )
156   AM_RANGE(0xf0, 0xff) AM_READWRITE(lx383_r, lx383_w )
157157ADDRESS_MAP_END
158158
159159static ADDRESS_MAP_START( z80netf_mem, AS_PROGRAM, 8, z80ne_state )
r14963r14964
172172static ADDRESS_MAP_START( z80netf_io, AS_IO, 8, z80ne_state )
173173   ADDRESS_MAP_GLOBAL_MASK(0xff)
174174   AM_RANGE(0xd0, 0xd7) AM_DEVREADWRITE_LEGACY("wd1771", lx390_fdc_r, lx390_fdc_w)
175   AM_RANGE(0xea, 0xea) AM_READ_LEGACY(lx388_data_r )
176   AM_RANGE(0xeb, 0xeb) AM_READ_LEGACY(lx388_read_field_sync )
177   AM_RANGE(0xee, 0xee) AM_READWRITE_LEGACY(lx385_data_r, lx385_data_w )
178   AM_RANGE(0xef, 0xef) AM_READWRITE_LEGACY(lx385_ctrl_r, lx385_ctrl_w )
179   AM_RANGE(0xf0, 0xff) AM_READWRITE_LEGACY(lx383_r, lx383_w )
175   AM_RANGE(0xea, 0xea) AM_READ(lx388_data_r )
176   AM_RANGE(0xeb, 0xeb) AM_READ(lx388_read_field_sync )
177   AM_RANGE(0xee, 0xee) AM_READWRITE(lx385_data_r, lx385_data_w )
178   AM_RANGE(0xef, 0xef) AM_READWRITE(lx385_ctrl_r, lx385_ctrl_w )
179   AM_RANGE(0xf0, 0xff) AM_READWRITE(lx383_r, lx383_w )
180180ADDRESS_MAP_END
181181
182182
src/mess/drivers/ami1200.c
r14963r14964
3636   UINT16 m_potgo_value;
3737   int m_cd32_shifter[2];
3838   int m_oldstate[2];
39   DECLARE_WRITE32_MEMBER(aga_overlay_w);
3940};
4041
4142
r14963r14964
4748
4849static void handle_cd32_joystick_cia(ami1200_state *state, UINT8 pra, UINT8 dra);
4950
50static WRITE32_HANDLER( aga_overlay_w )
51WRITE32_MEMBER(ami1200_state::aga_overlay_w)
5152{
5253   if (ACCESSING_BITS_16_23)
5354   {
5455      data = (data >> 16) & 1;
5556
5657      /* switch banks as appropriate */
57      memory_set_bank(space->machine(), "bank1", data & 1);
58      memory_set_bank(machine(), "bank1", data & 1);
5859
5960      /* swap the write handlers between ROM and bank 1 based on the bit */
6061      if ((data & 1) == 0)
6162         /* overlay disabled, map RAM on 0x000000 */
62         space->install_write_bank(0x000000, 0x1fffff, "bank1");
63         space.install_write_bank(0x000000, 0x1fffff, "bank1");
6364      else
6465         /* overlay enabled, map Amiga system ROM on 0x000000 */
65         space->unmap_write(0x000000, 0x1fffff);
66         space.unmap_write(0x000000, 0x1fffff);
6667   }
6768}
6869
r14963r14964
122123static ADDRESS_MAP_START( a1200_map, AS_PROGRAM, 32, ami1200_state )
123124   ADDRESS_MAP_UNMAP_HIGH
124125   AM_RANGE(0x000000, 0x1fffff) AM_RAMBANK("bank1") AM_SHARE("chip_ram")
125   AM_RANGE(0xbfa000, 0xbfa003) AM_WRITE_LEGACY(aga_overlay_w)
126   AM_RANGE(0xbfa000, 0xbfa003) AM_WRITE(aga_overlay_w)
126127   AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE16_LEGACY(amiga_cia_r, amiga_cia_w, 0xffffffff)
127128   AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE16_LEGACY(amiga_custom_r, amiga_custom_w, 0xffffffff) AM_SHARE("custom_regs")
128129   AM_RANGE(0xe80000, 0xe8ffff) AM_READWRITE16_LEGACY(amiga_autoconfig_r, amiga_autoconfig_w, 0xffffffff)
src/mess/drivers/nc.c
r14963r14964
585585ADDRESS_MAP_END
586586
587587
588static  READ8_HANDLER(nc_memory_management_r)
588READ8_MEMBER(nc_state::nc_memory_management_r)
589589{
590   nc_state *state = space->machine().driver_data<nc_state>();
591   return state->m_memory_config[offset];
590   return m_memory_config[offset];
592591}
593592
594static WRITE8_HANDLER(nc_memory_management_w)
593WRITE8_MEMBER(nc_state::nc_memory_management_w)
595594{
596   nc_state *state = space->machine().driver_data<nc_state>();
597595   LOG(("Memory management W: %02x %02x\n",offset,data));
598        state->m_memory_config[offset] = data;
596        m_memory_config[offset] = data;
599597
600        nc_refresh_memory_config(space->machine());
598        nc_refresh_memory_config(machine());
601599}
602600
603static WRITE8_HANDLER(nc_irq_mask_w)
601WRITE8_MEMBER(nc_state::nc_irq_mask_w)
604602{
605   nc_state *state = space->machine().driver_data<nc_state>();
606603   LOG(("irq mask w: %02x\n", data));
607604   LOG_DEBUG(("irq mask nc200 w: %02x\n",data & ((1<<4) | (1<<5) | (1<<6) | (1<<7))));
608605
609606   /* writing mask clears ints that are to be masked? */
610   state->m_irq_mask = data;
607   m_irq_mask = data;
611608
612   nc_update_interrupts(space->machine());
609   nc_update_interrupts(machine());
613610}
614611
615static WRITE8_HANDLER(nc_irq_status_w)
612WRITE8_MEMBER(nc_state::nc_irq_status_w)
616613{
617   nc_state *state = space->machine().driver_data<nc_state>();
618614   LOG(("irq status w: %02x\n", data));
619615   data = data^0x0ff;
620616
621   if (state->m_type == NC_TYPE_200)
617   if (m_type == NC_TYPE_200)
622618   {
623619      /* Russell Marks confirms that on the NC200, the key scan interrupt must be explicitly
624620        cleared. It is not automatically cleared when reading 0x0b9 */
625621      if ((data & (1<<3))!=0)
626622      {
627623         /* set timer to occur again */
628         state->m_keyboard_timer->reset(attotime::from_msec(10));
624         m_keyboard_timer->reset(attotime::from_msec(10));
629625
630         nc_update_interrupts(space->machine());
626         nc_update_interrupts(machine());
631627      }
632628   }
633629
r14963r14964
638634                /* clearing keyboard int? */
639635                ((data & (1<<3))!=0) &&
640636                /* keyboard int request? */
641                ((state->m_irq_status & (1<<3))!=0)
637                ((m_irq_status & (1<<3))!=0)
642638           )
643639        {
644640         /* set timer to occur again */
645         state->m_keyboard_timer->reset(attotime::from_msec(10));
641         m_keyboard_timer->reset(attotime::from_msec(10));
646642        }
647643#endif
648        state->m_irq_status &=~data;
644        m_irq_status &=~data;
649645
650        nc_update_interrupts(space->machine());
646        nc_update_interrupts(machine());
651647}
652648
653static READ8_HANDLER(nc_irq_status_r)
649READ8_MEMBER(nc_state::nc_irq_status_r)
654650{
655   nc_state *state = space->machine().driver_data<nc_state>();
656        return ~((state->m_irq_status & (~state->m_irq_latch_mask)) | state->m_irq_latch);
651        return ~((m_irq_status & (~m_irq_latch_mask)) | m_irq_latch);
657652}
658653
659654
660static READ8_HANDLER(nc_key_data_in_r)
655READ8_MEMBER(nc_state::nc_key_data_in_r)
661656{
662   nc_state *state = space->machine().driver_data<nc_state>();
663657   static const char *const keynames[] = {
664658      "LINE0", "LINE1", "LINE2", "LINE3", "LINE4",
665659      "LINE5", "LINE6", "LINE7", "LINE8", "LINE9"
r14963r14964
668662   if (offset==9)
669663   {
670664      /* reading 0x0b9 will clear int and re-start scan procedure! */
671      state->m_irq_status &= ~(1<<3);
665      m_irq_status &= ~(1<<3);
672666
673667      /* set timer to occur again */
674      state->m_keyboard_timer->reset(attotime::from_msec(10));
668      m_keyboard_timer->reset(attotime::from_msec(10));
675669
676      nc_update_interrupts(space->machine());
670      nc_update_interrupts(machine());
677671   }
678672
679   return input_port_read(space->machine(), keynames[offset]);
673   return input_port_read(machine(), keynames[offset]);
680674}
681675
682676
r14963r14964
712706   beep_set_frequency(machine.device(beep_device), frequency);
713707}
714708
715static WRITE8_HANDLER(nc_sound_w)
709WRITE8_MEMBER(nc_state::nc_sound_w)
716710{
717   nc_state *state = space->machine().driver_data<nc_state>();
718711   LOG(("sound w: %04x %02x\n", offset, data));
719712
720713   switch (offset)
r14963r14964
722715      case 0x0:
723716      {
724717         /* update period value */
725         state->m_sound_channel_periods[0]  =
726            (state->m_sound_channel_periods[0] & 0x0ff00) | (data & 0x0ff);
718         m_sound_channel_periods[0]  =
719            (m_sound_channel_periods[0] & 0x0ff00) | (data & 0x0ff);
727720
728         nc_sound_update(space->machine(), 0);
721         nc_sound_update(machine(), 0);
729722      }
730723      break;
731724
732725      case 0x01:
733726      {
734         state->m_sound_channel_periods[0] =
735            (state->m_sound_channel_periods[0] & 0x0ff) | ((data & 0x0ff)<<8);
727         m_sound_channel_periods[0] =
728            (m_sound_channel_periods[0] & 0x0ff) | ((data & 0x0ff)<<8);
736729
737         nc_sound_update(space->machine(), 0);
730         nc_sound_update(machine(), 0);
738731      }
739732      break;
740733
741734      case 0x02:
742735      {
743736         /* update period value */
744         state->m_sound_channel_periods[1]  =
745            (state->m_sound_channel_periods[1] & 0x0ff00) | (data & 0x0ff);
737         m_sound_channel_periods[1]  =
738            (m_sound_channel_periods[1] & 0x0ff00) | (data & 0x0ff);
746739
747         nc_sound_update(space->machine(), 1);
740         nc_sound_update(machine(), 1);
748741      }
749742      break;
750743
751744      case 0x03:
752745      {
753         state->m_sound_channel_periods[1] =
754            (state->m_sound_channel_periods[1] & 0x0ff) | ((data & 0x0ff)<<8);
746         m_sound_channel_periods[1] =
747            (m_sound_channel_periods[1] & 0x0ff) | ((data & 0x0ff)<<8);
755748
756         nc_sound_update(space->machine(), 1);
749         nc_sound_update(machine(), 1);
757750      }
758751      break;
759752
r14963r14964
782775   uart->receive_clock();
783776}
784777
785static WRITE8_HANDLER(nc_uart_control_w)
778WRITE8_MEMBER(nc_state::nc_uart_control_w)
786779{
787   nc_state *state = space->machine().driver_data<nc_state>();
788780   /* update printer state */
789   nc_printer_update(space->machine(), data);
781   nc_printer_update(machine(), data);
790782
791783   /* on/off changed state? */
792   if (((state->m_uart_control ^ data) & (1<<3))!=0)
784   if (((m_uart_control ^ data) & (1<<3))!=0)
793785   {
794786      /* changed uart from off to on */
795787      if ((data & (1<<3))==0)
796788      {
797         devtag_reset(space->machine(), "uart");
789         devtag_reset(machine(), "uart");
798790      }
799791   }
800792
801   state->m_serial_timer->adjust(attotime::zero, 0, attotime::from_hz(baud_rate_table[(data & 0x07)]));
793   m_serial_timer->adjust(attotime::zero, 0, attotime::from_hz(baud_rate_table[(data & 0x07)]));
802794
803   state->m_uart_control = data;
795   m_uart_control = data;
804796}
805797
806798/* NC100 printer emulation */
r14963r14964
820812
821813
822814
823static WRITE8_HANDLER(nc100_display_memory_start_w)
815WRITE8_MEMBER(nc_state::nc100_display_memory_start_w)
824816{
825   nc_state *state = space->machine().driver_data<nc_state>();
826817   /* bit 7: A15 */
827818   /* bit 6: A14 */
828819   /* bit 5: A13 */
829820   /* bit 4: A12 */
830821   /* bit 3-0: not used */
831   state->m_display_memory_start = (data & 0x0f0)<<(12-4);
822   m_display_memory_start = (data & 0x0f0)<<(12-4);
832823
833   LOG(("disp memory w: %04x\n", (int) state->m_display_memory_start));
824   LOG(("disp memory w: %04x\n", (int) m_display_memory_start));
834825}
835826
836827
837static WRITE8_HANDLER(nc100_uart_control_w)
828WRITE8_MEMBER(nc_state::nc100_uart_control_w)
838829{
839   //nc_state *state = space->machine().driver_data<nc_state>();
840830   nc_uart_control_w(space, offset,data);
841831
842832//  /* is this correct?? */
843833//  if (data & (1<<3))
844834//  {
845835//      /* clear latched irq's */
846//      state->m_irq_latch &= ~3;
836//      m_irq_latch &= ~3;
847837//      nc_update_interrupts(machine);
848838//  }
849839}
r14963r14964
972962}
973963
974964
975static WRITE8_HANDLER(nc100_poweroff_control_w)
965WRITE8_MEMBER(nc_state::nc100_poweroff_control_w)
976966{
977   nc_state *state = space->machine().driver_data<nc_state>();
978967   /* bits 7-1: not used */
979968   /* bit 0: 1 = no effect, 0 = power off */
980   state->m_poweroff_control = data;
969   m_poweroff_control = data;
981970   LOG(("nc poweroff control: %02x\n",data));
982971}
983972
984973
985974/* nc100 version of card/battery status */
986static  READ8_HANDLER(nc100_card_battery_status_r)
975READ8_MEMBER(nc_state::nc100_card_battery_status_r)
987976{
988   nc_state *state = space->machine().driver_data<nc_state>();
989   centronics_device *printer = space->machine().device<centronics_device>("centronics");
977   centronics_device *printer = machine().device<centronics_device>("centronics");
990978   int nc_card_battery_status = 0x0fc;
991979
992980   /* printer */
993981   nc_card_battery_status |= printer->ack_r();
994982   nc_card_battery_status |= printer->busy_r() << 1;
995983
996   if (state->m_card_status)
984   if (m_card_status)
997985   {
998986      /* card present */
999987      nc_card_battery_status &=~(1<<7);
1000988   }
1001989
1002   if (input_port_read(space->machine(), "EXTRA") & 0x02)
990   if (input_port_read(machine(), "EXTRA") & 0x02)
1003991   {
1004992      /* card write enable */
1005993      nc_card_battery_status &=~(1<<6);
r14963r14964
10131001   return nc_card_battery_status;
10141002}
10151003
1016static WRITE8_HANDLER(nc100_memory_card_wait_state_w)
1004WRITE8_MEMBER(nc_state::nc100_memory_card_wait_state_w)
10171005{
10181006   LOG(("nc100 memory card wait state: %02x\n",data));
10191007}
r14963r14964
10231011static ADDRESS_MAP_START(nc100_io, AS_IO, 8, nc_state )
10241012   ADDRESS_MAP_GLOBAL_MASK(0xff)
10251013   ADDRESS_MAP_UNMAP_HIGH
1026   AM_RANGE(0x00, 0x0f) AM_WRITE_LEGACY(nc100_display_memory_start_w)
1027   AM_RANGE(0x10, 0x13) AM_READWRITE_LEGACY(nc_memory_management_r, nc_memory_management_w)
1028   AM_RANGE(0x20, 0x20) AM_WRITE_LEGACY(nc100_memory_card_wait_state_w)
1029   AM_RANGE(0x30, 0x30) AM_WRITE_LEGACY(nc100_uart_control_w)
1014   AM_RANGE(0x00, 0x0f) AM_WRITE(nc100_display_memory_start_w)
1015   AM_RANGE(0x10, 0x13) AM_READWRITE(nc_memory_management_r, nc_memory_management_w)
1016   AM_RANGE(0x20, 0x20) AM_WRITE(nc100_memory_card_wait_state_w)
1017   AM_RANGE(0x30, 0x30) AM_WRITE(nc100_uart_control_w)
10301018   AM_RANGE(0x40, 0x40) AM_DEVWRITE("centronics", centronics_device, write)
1031   AM_RANGE(0x50, 0x53) AM_WRITE_LEGACY(nc_sound_w)
1032   AM_RANGE(0x60, 0x60) AM_WRITE_LEGACY(nc_irq_mask_w)
1033   AM_RANGE(0x70, 0x70) AM_WRITE_LEGACY(nc100_poweroff_control_w)
1034   AM_RANGE(0x90, 0x90) AM_READWRITE_LEGACY(nc_irq_status_r, nc_irq_status_w)
1035   AM_RANGE(0x91, 0x9f) AM_READ_LEGACY(nc_irq_status_r)
1036   AM_RANGE(0xa0, 0xaf) AM_READ_LEGACY(nc100_card_battery_status_r)
1037   AM_RANGE(0xb0, 0xb9) AM_READ_LEGACY(nc_key_data_in_r)
1019   AM_RANGE(0x50, 0x53) AM_WRITE(nc_sound_w)
1020   AM_RANGE(0x60, 0x60) AM_WRITE(nc_irq_mask_w)
1021   AM_RANGE(0x70, 0x70) AM_WRITE(nc100_poweroff_control_w)
1022   AM_RANGE(0x90, 0x90) AM_READWRITE(nc_irq_status_r, nc_irq_status_w)
1023   AM_RANGE(0x91, 0x9f) AM_READ(nc_irq_status_r)
1024   AM_RANGE(0xa0, 0xaf) AM_READ(nc100_card_battery_status_r)
1025   AM_RANGE(0xb0, 0xb9) AM_READ(nc_key_data_in_r)
10381026   AM_RANGE(0xc0, 0xc0) AM_DEVREADWRITE("uart",i8251_device, data_r, data_w)
10391027   AM_RANGE(0xc1, 0xc1) AM_DEVREADWRITE("uart", i8251_device, status_r, control_w)
10401028   AM_RANGE(0xd0, 0xdf) AM_DEVREADWRITE("rtc", rp5c01_device, read, write)
r14963r14964
11861174/* NC200 hardware */
11871175
11881176#ifdef UNUSED_FUNCTION
1189static WRITE8_HANDLER(nc200_display_memory_start_w)
1177WRITE8_MEMBER(nc_state::nc200_display_memory_start_w)
11901178{
1191   nc_state *state = space->machine().driver_data<nc_state>();
11921179   /* bit 7: A15 */
11931180   /* bit 6: A14 */
11941181   /* bit 5: A13 */
11951182   /* bit 4-0: not used */
1196   state->m_display_memory_start = (data & 0x0e0)<<(12-4);
1183   m_display_memory_start = (data & 0x0e0)<<(12-4);
11971184
1198   LOG(("disp memory w: %04x\n", (int) state->m_display_memory_start));
1185   LOG(("disp memory w: %04x\n", (int) m_display_memory_start));
11991186}
12001187#endif
12011188
r14963r14964
13811368
13821369
13831370/* nc200 version of card/battery status */
1384static  READ8_HANDLER(nc200_card_battery_status_r)
1371READ8_MEMBER(nc_state::nc200_card_battery_status_r)
13851372{
1386   nc_state *state = space->machine().driver_data<nc_state>();
13871373   int nc_card_battery_status = 0x0ff;
13881374
13891375   /* enough power */
r14963r14964
13941380    and there is enough power for disk usage */
13951381   nc_card_battery_status &=~((1<<5) | (1<<2) | (1<<0));
13961382
1397   if (state->m_card_status)
1383   if (m_card_status)
13981384   {
13991385      /* card present */
14001386      nc_card_battery_status&=~(1<<7);
14011387   }
14021388
1403   if (input_port_read(space->machine(), "EXTRA") & 0x02)
1389   if (input_port_read(machine(), "EXTRA") & 0x02)
14041390   {
14051391      /* card write enable */
14061392      nc_card_battery_status &=~(1<<6);
r14963r14964
14151401  bit 0: Parallel interface BUSY
14161402 */
14171403
1418static READ8_HANDLER(nc200_printer_status_r)
1404READ8_MEMBER(nc_state::nc200_printer_status_r)
14191405{
1420   centronics_device *printer = space->machine().device<centronics_device>("centronics");
1406   centronics_device *printer = machine().device<centronics_device>("centronics");
14211407   UINT8 result = 0;
14221408
14231409   result |= printer->busy_r();
r14963r14964
14261412}
14271413
14281414
1429static WRITE8_HANDLER(nc200_uart_control_w)
1415WRITE8_MEMBER(nc_state::nc200_uart_control_w)
14301416{
1431   nc_state *state = space->machine().driver_data<nc_state>();
1432   /* int reset_fdc = (state->m_uart_control^data) & (1<<5); */
1417   /* int reset_fdc = (m_uart_control^data) & (1<<5); */
14331418
14341419   nc_uart_control_w(space, offset,data);
14351420
14361421   if (data & (1<<3))
14371422   {
1438      state->m_nc200_uart_interrupt_irq &=~3;
1423      m_nc200_uart_interrupt_irq &=~3;
14391424
1440      nc200_refresh_uart_interrupt(space->machine());
1425      nc200_refresh_uart_interrupt(machine());
14411426   }
14421427
14431428   /* bit 5 is used in disk interface */
1444   LOG_DEBUG(("bit 5: PC: %04x %02x\n", cpu_get_pc(space->machine().device("maincpu")), data & (1 << 5)));
1429   LOG_DEBUG(("bit 5: PC: %04x %02x\n", cpu_get_pc(machine().device("maincpu")), data & (1 << 5)));
14451430}
14461431
14471432
r14963r14964
14571442/* bit 1: disk motor??  */
14581443/* bit 0: UPD765 Terminal Count input */
14591444
1460static WRITE8_HANDLER(nc200_memory_card_wait_state_w)
1445WRITE8_MEMBER(nc_state::nc200_memory_card_wait_state_w)
14611446{
1462   device_t *fdc = space->machine().device("upd765");
1463   LOG_DEBUG(("nc200 memory card wait state: PC: %04x %02x\n", cpu_get_pc(space->machine().device("maincpu")), data));
1447   device_t *fdc = machine().device("upd765");
1448   LOG_DEBUG(("nc200 memory card wait state: PC: %04x %02x\n", cpu_get_pc(machine().device("maincpu")), data));
14641449#if 0
14651450   floppy_drive_set_motor_state(0, 1);
14661451   floppy_drive_set_ready_state(0, 1, 1);
r14963r14964
14711456/* bit 2: backlight: 1=off, 0=on */
14721457/* bit 1 cleared to zero in disk code */
14731458/* bit 0 seems to be the same as nc100 */
1474static WRITE8_HANDLER(nc200_poweroff_control_w)
1459WRITE8_MEMBER(nc_state::nc200_poweroff_control_w)
14751460{
1476   LOG_DEBUG(("nc200 power off: PC: %04x %02x\n", cpu_get_pc(space->machine().device("maincpu")), data));
1461   LOG_DEBUG(("nc200 power off: PC: %04x %02x\n", cpu_get_pc(machine().device("maincpu")), data));
14771462
1478   nc200_video_set_backlight(space->machine(), ((data ^ (1 << 2)) >> 2) & 0x01);
1463   nc200_video_set_backlight(machine(), ((data ^ (1 << 2)) >> 2) & 0x01);
14791464}
14801465
14811466static ADDRESS_MAP_START(nc200_io, AS_IO, 8, nc_state )
14821467   ADDRESS_MAP_GLOBAL_MASK(0xff)
1483   AM_RANGE(0x00, 0x0f) AM_WRITE_LEGACY(nc100_display_memory_start_w)
1484   AM_RANGE(0x10, 0x13) AM_READWRITE_LEGACY(nc_memory_management_r, nc_memory_management_w)
1485   AM_RANGE(0x20, 0x20) AM_WRITE_LEGACY(nc200_memory_card_wait_state_w)
1486   AM_RANGE(0x30, 0x30) AM_WRITE_LEGACY(nc200_uart_control_w)
1468   AM_RANGE(0x00, 0x0f) AM_WRITE(nc100_display_memory_start_w)
1469   AM_RANGE(0x10, 0x13) AM_READWRITE(nc_memory_management_r, nc_memory_management_w)
1470   AM_RANGE(0x20, 0x20) AM_WRITE(nc200_memory_card_wait_state_w)
1471   AM_RANGE(0x30, 0x30) AM_WRITE(nc200_uart_control_w)
14871472   AM_RANGE(0x40, 0x40) AM_DEVWRITE("centronics", centronics_device, write)
1488   AM_RANGE(0x50, 0x53) AM_WRITE_LEGACY(nc_sound_w)
1489   AM_RANGE(0x60, 0x60) AM_WRITE_LEGACY(nc_irq_mask_w)
1490   AM_RANGE(0x70, 0x70) AM_WRITE_LEGACY(nc200_poweroff_control_w)
1491   AM_RANGE(0x80, 0x80) AM_READ_LEGACY(nc200_printer_status_r)
1492   AM_RANGE(0x90, 0x90) AM_READWRITE_LEGACY(nc_irq_status_r, nc_irq_status_w)
1493   AM_RANGE(0xa0, 0xa0) AM_READ_LEGACY(nc200_card_battery_status_r)
1494   AM_RANGE(0xb0, 0xb9) AM_READ_LEGACY(nc_key_data_in_r)
1473   AM_RANGE(0x50, 0x53) AM_WRITE(nc_sound_w)
1474   AM_RANGE(0x60, 0x60) AM_WRITE(nc_irq_mask_w)
1475   AM_RANGE(0x70, 0x70) AM_WRITE(nc200_poweroff_control_w)
1476   AM_RANGE(0x80, 0x80) AM_READ(nc200_printer_status_r)
1477   AM_RANGE(0x90, 0x90) AM_READWRITE(nc_irq_status_r, nc_irq_status_w)
1478   AM_RANGE(0xa0, 0xa0) AM_READ(nc200_card_battery_status_r)
1479   AM_RANGE(0xb0, 0xb9) AM_READ(nc_key_data_in_r)
14951480   AM_RANGE(0xc0, 0xc0) AM_DEVREADWRITE("uart",i8251_device, data_r, data_w)
14961481   AM_RANGE(0xc1, 0xc1) AM_DEVREADWRITE("uart", i8251_device, status_r, control_w)
14971482   AM_RANGE(0xd0, 0xd1) AM_DEVREADWRITE("mc", mc146818_device, read, write)
src/mess/drivers/pentagon.c
r14963r14964
9393   AM_RANGE(0x003f, 0x003f) AM_DEVREADWRITE_LEGACY(BETA_DISK_TAG, betadisk_track_r,betadisk_track_w) AM_MIRROR(0xff00)
9494   AM_RANGE(0x005f, 0x005f) AM_DEVREADWRITE_LEGACY(BETA_DISK_TAG, betadisk_sector_r,betadisk_sector_w) AM_MIRROR(0xff00)
9595   AM_RANGE(0x007f, 0x007f) AM_DEVREADWRITE_LEGACY(BETA_DISK_TAG, betadisk_data_r,betadisk_data_w) AM_MIRROR(0xff00)
96   AM_RANGE(0x00fe, 0x00fe) AM_READWRITE_LEGACY(spectrum_port_fe_r,spectrum_port_fe_w) AM_MIRROR(0xff00) AM_MASK(0xffff)
96   AM_RANGE(0x00fe, 0x00fe) AM_READWRITE(spectrum_port_fe_r,spectrum_port_fe_w) AM_MIRROR(0xff00) AM_MASK(0xffff)
9797   AM_RANGE(0x00ff, 0x00ff) AM_DEVREADWRITE_LEGACY(BETA_DISK_TAG, betadisk_state_r, betadisk_param_w) AM_MIRROR(0xff00)
9898   AM_RANGE(0x4000, 0x4000) AM_WRITE_LEGACY(pentagon_port_7ffd_w)  AM_MIRROR(0x3ffd)
9999   AM_RANGE(0x8000, 0x8000) AM_DEVWRITE_LEGACY("ay8912", ay8910_data_w) AM_MIRROR(0x3ffd)
src/mess/drivers/nes.c
r14963r14964
3636   nes_psg_w(device, 0x17, data);
3737}
3838
39static WRITE8_HANDLER(nes_vh_sprite_dma_w)
39WRITE8_MEMBER(nes_state::nes_vh_sprite_dma_w)
4040{
41   nes_state *state = space->machine().driver_data<nes_state>();
42   state->m_ppu->spriteram_dma(space, data);
41   m_ppu->spriteram_dma(&space, data);
4342}
4443
4544static ADDRESS_MAP_START( nes_map, AS_PROGRAM, 8, nes_state )
4645   AM_RANGE(0x0000, 0x07ff) AM_RAM AM_MIRROR(0x1800)               /* RAM */
4746   AM_RANGE(0x2000, 0x3fff) AM_DEVREADWRITE("ppu", ppu2c0x_device, read, write)      /* PPU registers */
4847   AM_RANGE(0x4000, 0x4013) AM_DEVREADWRITE_LEGACY("nessound", nes_psg_r, nes_psg_w)      /* PSG primary registers */
49   AM_RANGE(0x4014, 0x4014) AM_WRITE_LEGACY(nes_vh_sprite_dma_w)            /* stupid address space hole */
48   AM_RANGE(0x4014, 0x4014) AM_WRITE(nes_vh_sprite_dma_w)            /* stupid address space hole */
5049   AM_RANGE(0x4015, 0x4015) AM_DEVREADWRITE_LEGACY("nessound", psg_4015_r, psg_4015_w)      /* PSG status / first control register */
51   AM_RANGE(0x4016, 0x4016) AM_READWRITE_LEGACY(nes_IN0_r, nes_IN0_w)         /* IN0 - input port 1 */
52   AM_RANGE(0x4017, 0x4017) AM_READ_LEGACY(nes_IN1_r)                     /* IN1 - input port 2 */
50   AM_RANGE(0x4016, 0x4016) AM_READWRITE(nes_IN0_r, nes_IN0_w)         /* IN0 - input port 1 */
51   AM_RANGE(0x4017, 0x4017) AM_READ(nes_IN1_r)                     /* IN1 - input port 2 */
5352   AM_RANGE(0x4017, 0x4017) AM_DEVWRITE_LEGACY("nessound", psg_4017_w)      /* PSG second control register */
5453   AM_RANGE(0x4100, 0x5fff) AM_READWRITE_LEGACY(nes_low_mapper_r, nes_low_mapper_w)   /* Perform unholy acts on the machine */
5554ADDRESS_MAP_END
src/mess/drivers/concept.c
r14963r14964
4242   AM_RANGE(0x000008, 0x000fff) AM_RAM                              /* static RAM */
4343   AM_RANGE(0x010000, 0x011fff) AM_ROM AM_REGION("maincpu", 0x010000)   /* boot ROM */
4444   AM_RANGE(0x020000, 0x021fff) AM_ROM                              /* macsbugs ROM (optional) */
45   AM_RANGE(0x030000, 0x03ffff) AM_READWRITE_LEGACY(concept_io_r,concept_io_w)   /* I/O space */
45   AM_RANGE(0x030000, 0x03ffff) AM_READWRITE(concept_io_r,concept_io_w)   /* I/O space */
4646
4747   AM_RANGE(0x080000, 0x0fffff) AM_RAM AM_SHARE("videoram")/* AM_RAMBANK(2) */   /* DRAM */
4848ADDRESS_MAP_END
src/mess/drivers/pcw16.c
r14963r14964
120120// bit 0: Display ints
121121
122122// debugging - write ram as seen by cpu
123static void pcw16_refresh_ints(running_machine &machine)
123void pcw16_state::pcw16_refresh_ints()
124124{
125   pcw16_state *state = machine.driver_data<pcw16_state>();
126125   /* any bits set excluding vsync */
127   if ((state->m_system_status & (~0x04))!=0)
126   if ((m_system_status & (~0x04))!=0)
128127   {
129      cputag_set_input_line(machine, "maincpu", 0, HOLD_LINE);
128      cputag_set_input_line(machine(), "maincpu", 0, HOLD_LINE);
130129   }
131130   else
132131   {
133      cputag_set_input_line(machine, "maincpu", 0, CLEAR_LINE);
132      cputag_set_input_line(machine(), "maincpu", 0, CLEAR_LINE);
134133   }
135134}
136135
r14963r14964
148147
149148   if (state->m_interrupt_counter!=0)
150149   {
151      pcw16_refresh_ints(timer.machine());
150      state->pcw16_refresh_ints();
152151   }
153152}
154153
r14963r14964
160159ADDRESS_MAP_END
161160
162161
163static WRITE8_HANDLER(pcw16_palette_w)
162WRITE8_MEMBER(pcw16_state::pcw16_palette_w)
164163{
165   pcw16_state *state = space->machine().driver_data<pcw16_state>();
166   state->m_colour_palette[offset & 0x0f] = data & 31;
164   m_colour_palette[offset & 0x0f] = data & 31;
167165}
168166
169167
r14963r14964
362360   PCW16_MEM_NONE
363361} PCW16_RAM_TYPE;
364362
365static  READ8_HANDLER(pcw16_no_mem_r)
363READ8_MEMBER(pcw16_state::pcw16_no_mem_r)
366364{
367365   return 0x0ff;
368366}
r14963r14964
370368static void pcw16_set_bank_handlers(running_machine &machine, int bank, PCW16_RAM_TYPE type)
371369{
372370   address_space *space = machine.device("maincpu")->memory().space(AS_PROGRAM);
373
371   pcw16_state *state = machine.driver_data<pcw16_state>();
374372   switch (type) {
375373   case PCW16_MEM_ROM:
376374      /* rom */
r14963r14964
390388      break;
391389
392390   case PCW16_MEM_NONE:
393      space->install_legacy_read_handler((bank * 0x4000), (bank * 0x4000) + 0x3fff, FUNC(pcw16_no_mem_r));
391      space->install_read_handler((bank * 0x4000), (bank * 0x4000) + 0x3fff, read8_delegate(FUNC(pcw16_state::pcw16_no_mem_r),state));
394392      space->nop_write((bank * 0x4000), (bank * 0x4000) + 0x3fff);
395393      break;
396394
r14963r14964
498496
499497}
500498
501static  READ8_HANDLER(pcw16_bankhw_r)
499READ8_MEMBER(pcw16_state::pcw16_bankhw_r)
502500{
503   pcw16_state *state = space->machine().driver_data<pcw16_state>();
504501//  logerror("bank r: %d \n", offset);
505502
506   return state->m_banks[offset];
503   return m_banks[offset];
507504}
508505
509static WRITE8_HANDLER(pcw16_bankhw_w)
506WRITE8_MEMBER(pcw16_state::pcw16_bankhw_w)
510507{
511   pcw16_state *state = space->machine().driver_data<pcw16_state>();
512508   //logerror("bank w: %d block: %02x\n", offset, data);
513509
514   state->m_banks[offset] = data;
510   m_banks[offset] = data;
515511
516   pcw16_update_memory(space->machine());
512   pcw16_update_memory(machine());
517513}
518514
519static WRITE8_HANDLER(pcw16_video_control_w)
515WRITE8_MEMBER(pcw16_state::pcw16_video_control_w)
520516{
521   pcw16_state *state = space->machine().driver_data<pcw16_state>();
522517   //logerror("video control w: %02x\n", data);
523518
524   state->m_video_control = data;
519   m_video_control = data;
525520}
526521
527522/* PCW16 KEYBOARD */
r14963r14964
544539
545540/* parity table. Used to set parity bit in keyboard status register */
546541
547
548static void pcw16_keyboard_reset(pcw16_state *state);
549static void pcw16_keyboard_int(running_machine &, int);
550
551static void pcw16_keyboard_init(running_machine &machine)
542void pcw16_state::pcw16_keyboard_init()
552543{
553   pcw16_state *state = machine.driver_data<pcw16_state>();
554544   int i;
555545   int b;
556546
r14963r14964
571561         data = data>>1;
572562      }
573563
574      state->m_keyboard_parity_table[i] = sum & 0x01;
564      m_keyboard_parity_table[i] = sum & 0x01;
575565   }
576566
577567
578568   /* clear int */
579   pcw16_keyboard_int(machine, 0);
569   pcw16_keyboard_int(0);
580570   /* reset state */
581   state->m_keyboard_state = 0;
571   m_keyboard_state = 0;
582572   /* reset ready for transmit */
583   pcw16_keyboard_reset(state);
573   pcw16_keyboard_reset();
584574}
585575
586static void pcw16_keyboard_refresh_outputs(pcw16_state *state)
576void pcw16_state::pcw16_keyboard_refresh_outputs()
587577{
588578   /* generate output bits */
589   state->m_keyboard_bits_output = state->m_keyboard_bits;
579   m_keyboard_bits_output = m_keyboard_bits;
590580
591581   /* force clock low? */
592   if (state->m_keyboard_state & PCW16_KEYBOARD_FORCE_KEYBOARD_CLOCK)
582   if (m_keyboard_state & PCW16_KEYBOARD_FORCE_KEYBOARD_CLOCK)
593583   {
594      state->m_keyboard_bits_output &= ~PCW16_KEYBOARD_CLOCK;
584      m_keyboard_bits_output &= ~PCW16_KEYBOARD_CLOCK;
595585   }
596586}
597587
598static void pcw16_keyboard_set_clock_state(pcw16_state *drvstate, int state)
588void pcw16_state::pcw16_keyboard_set_clock_state(int state)
599589{
600   drvstate->m_keyboard_bits &= ~PCW16_KEYBOARD_CLOCK;
590   m_keyboard_bits &= ~PCW16_KEYBOARD_CLOCK;
601591
602592   if (state)
603593   {
604      drvstate->m_keyboard_bits |= PCW16_KEYBOARD_CLOCK;
594      m_keyboard_bits |= PCW16_KEYBOARD_CLOCK;
605595   }
606596
607   pcw16_keyboard_refresh_outputs(drvstate);
597   pcw16_keyboard_refresh_outputs();
608598}
609599
610static void pcw16_keyboard_int(running_machine &machine, int state)
600void pcw16_state::pcw16_keyboard_int(int state)
611601{
612   pcw16_state *drvstate = machine.driver_data<pcw16_state>();
613   drvstate->m_system_status &= ~(1<<1);
602   m_system_status &= ~(1<<1);
614603
615604   if (state)
616605   {
617      drvstate->m_system_status |= (1<<1);
606      m_system_status |= (1<<1);
618607   }
619608
620   pcw16_refresh_ints(machine);
609   pcw16_refresh_ints();
621610}
622611
623static void pcw16_keyboard_reset(pcw16_state *state)
612void pcw16_state::pcw16_keyboard_reset()
624613{
625614   /* clock set to high */
626   pcw16_keyboard_set_clock_state(state, 1);
615   pcw16_keyboard_set_clock_state(1);
627616}
628617
629618/* interfaces to a pc-at keyboard */
630static READ8_HANDLER(pcw16_keyboard_data_shift_r)
619READ8_MEMBER(pcw16_state::pcw16_keyboard_data_shift_r)
631620{
632   pcw16_state *state = space->machine().driver_data<pcw16_state>();
633   //logerror("keyboard data shift r: %02x\n", state->m_keyboard_data_shift);
634   state->m_keyboard_state &= ~(PCW16_KEYBOARD_BUSY_STATUS);
621   //logerror("keyboard data shift r: %02x\n", m_keyboard_data_shift);
622   m_keyboard_state &= ~(PCW16_KEYBOARD_BUSY_STATUS);
635623
636   pcw16_keyboard_int(space->machine(), 0);
624   pcw16_keyboard_int(0);
637625   /* reset for reception */
638   pcw16_keyboard_reset(state);
626   pcw16_keyboard_reset();
639627
640628   /* read byte */
641   return state->m_keyboard_data_shift;
629   return m_keyboard_data_shift;
642630}
643631
644632/* if force keyboard clock is low it is safe to send */
645static int pcw16_keyboard_can_transmit(pcw16_state *state)
633int pcw16_state::pcw16_keyboard_can_transmit()
646634{
647635   /* clock is not forced low */
648636   /* and not busy - i.e. not already sent a char */
649   return ((state->m_keyboard_bits_output & PCW16_KEYBOARD_CLOCK)!=0);
637   return ((m_keyboard_bits_output & PCW16_KEYBOARD_CLOCK)!=0);
650638}
651639
652640#ifdef UNUSED_FUNCTION
r14963r14964
657645#endif
658646
659647/* signal a code has been received */
660static void pcw16_keyboard_signal_byte_received(running_machine &machine, int data)
648void pcw16_state::pcw16_keyboard_signal_byte_received(int data)
661649{
662   pcw16_state *state = machine.driver_data<pcw16_state>();
663650   /* clear clock */
664   pcw16_keyboard_set_clock_state(state, 0);
651   pcw16_keyboard_set_clock_state(0);
665652
666653   /* set code in shift register */
667   state->m_keyboard_data_shift = data;
654   m_keyboard_data_shift = data;
668655   /* busy */
669   state->m_keyboard_state |= PCW16_KEYBOARD_BUSY_STATUS;
656   m_keyboard_state |= PCW16_KEYBOARD_BUSY_STATUS;
670657
671658   /* initialise start, stop and parity bits */
672   state->m_keyboard_state &= ~PCW16_KEYBOARD_START_BIT_MASK;
673   state->m_keyboard_state |=PCW16_KEYBOARD_STOP_BIT_MASK;
659   m_keyboard_state &= ~PCW16_KEYBOARD_START_BIT_MASK;
660   m_keyboard_state |=PCW16_KEYBOARD_STOP_BIT_MASK;
674661
675662   /* "Keyboard data has odd parity, so the parity bit in the
676663    status register should only be set when the shift register
677664    data itself has even parity. */
678665
679   state->m_keyboard_state &= ~PCW16_KEYBOARD_PARITY_MASK;
666   m_keyboard_state &= ~PCW16_KEYBOARD_PARITY_MASK;
680667
681668   /* if data has even parity, set parity bit */
682   if ((state->m_keyboard_parity_table[data])==0)
683      state->m_keyboard_state |= PCW16_KEYBOARD_PARITY_MASK;
669   if ((m_keyboard_parity_table[data])==0)
670      m_keyboard_state |= PCW16_KEYBOARD_PARITY_MASK;
684671
685   pcw16_keyboard_int(machine, 1);
672   pcw16_keyboard_int(1);
686673}
687674
688675
689static WRITE8_HANDLER(pcw16_keyboard_data_shift_w)
676WRITE8_MEMBER(pcw16_state::pcw16_keyboard_data_shift_w)
690677{
691   pcw16_state *state = space->machine().driver_data<pcw16_state>();
692678   //logerror("Keyboard Data Shift: %02x\n", data);
693679   /* writing to shift register clears parity */
694680   /* writing to shift register clears start bit */
695   state->m_keyboard_state &= ~(
681   m_keyboard_state &= ~(
696682      PCW16_KEYBOARD_PARITY_MASK |
697683      PCW16_KEYBOARD_START_BIT_MASK);
698684
699685   /* writing to shift register sets stop bit */
700   state->m_keyboard_state |= PCW16_KEYBOARD_STOP_BIT_MASK;
686   m_keyboard_state |= PCW16_KEYBOARD_STOP_BIT_MASK;
701687
702   state->m_keyboard_data_shift = data;
688   m_keyboard_data_shift = data;
703689
704690}
705691
706static  READ8_HANDLER(pcw16_keyboard_status_r)
692READ8_MEMBER(pcw16_state::pcw16_keyboard_status_r)
707693{
708   pcw16_state *state = space->machine().driver_data<pcw16_state>();
709694   /* bit 2,3 are bits 8 and 9 of vdu pointer */
710   return (state->m_keyboard_state &
695   return (m_keyboard_state &
711696      (PCW16_KEYBOARD_PARITY_MASK |
712697       PCW16_KEYBOARD_STOP_BIT_MASK |
713698       PCW16_KEYBOARD_START_BIT_MASK |
r14963r14964
716701       PCW16_KEYBOARD_TRANSMIT_MODE));
717702}
718703
719static WRITE8_HANDLER(pcw16_keyboard_control_w)
704WRITE8_MEMBER(pcw16_state::pcw16_keyboard_control_w)
720705{
721   pcw16_state *state = space->machine().driver_data<pcw16_state>();
722706   //logerror("Keyboard control w: %02x\n",data);
723707
724   state->m_keyboard_previous_state = state->m_keyboard_state;
708   m_keyboard_previous_state = m_keyboard_state;
725709
726710   /* if set, set parity */
727711   if (data & 0x080)
728712   {
729      state->m_keyboard_state |= PCW16_KEYBOARD_PARITY_MASK;
713      m_keyboard_state |= PCW16_KEYBOARD_PARITY_MASK;
730714   }
731715
732716   /* clear read/write bits */
733   state->m_keyboard_state &=
717   m_keyboard_state &=
734718      ~(PCW16_KEYBOARD_FORCE_KEYBOARD_CLOCK |
735719         PCW16_KEYBOARD_TRANSMIT_MODE);
736720   /* set read/write bits from data */
737   state->m_keyboard_state |= (data & 0x03);
721   m_keyboard_state |= (data & 0x03);
738722
739723   if (data & PCW16_KEYBOARD_RESET_INTERFACE)
740724   {
741      pcw16_keyboard_reset(state);
725      pcw16_keyboard_reset();
742726   }
743727
744728   if (data & PCW16_KEYBOARD_TRANSMIT_MODE)
745729   {
746730      /* force clock changed */
747      if (((state->m_keyboard_state^state->m_keyboard_previous_state) & PCW16_KEYBOARD_FORCE_KEYBOARD_CLOCK)!=0)
731      if (((m_keyboard_state^m_keyboard_previous_state) & PCW16_KEYBOARD_FORCE_KEYBOARD_CLOCK)!=0)
748732      {
749733         /* just cleared? */
750         if ((state->m_keyboard_state & PCW16_KEYBOARD_FORCE_KEYBOARD_CLOCK)==0)
734         if ((m_keyboard_state & PCW16_KEYBOARD_FORCE_KEYBOARD_CLOCK)==0)
751735         {
752736
753737            /* write */
754738            /* busy */
755            state->m_keyboard_state |= PCW16_KEYBOARD_BUSY_STATUS;
739            m_keyboard_state |= PCW16_KEYBOARD_BUSY_STATUS;
756740            /* keyboard takes data */
757            at_keyboard_write(space->machine(),state->m_keyboard_data_shift);
741            at_keyboard_write(machine(),m_keyboard_data_shift);
758742            /* set clock low - no furthur transmissions */
759            pcw16_keyboard_set_clock_state(state, 0);
743            pcw16_keyboard_set_clock_state(0);
760744            /* set int */
761            pcw16_keyboard_int(space->machine(), 1);
745            pcw16_keyboard_int(1);
762746         }
763747      }
764748
765749
766750   }
767751
768   if (((state->m_keyboard_state^state->m_keyboard_previous_state) & PCW16_KEYBOARD_TRANSMIT_MODE)!=0)
752   if (((m_keyboard_state^m_keyboard_previous_state) & PCW16_KEYBOARD_TRANSMIT_MODE)!=0)
769753   {
770      if ((state->m_keyboard_state & PCW16_KEYBOARD_TRANSMIT_MODE)==0)
754      if ((m_keyboard_state & PCW16_KEYBOARD_TRANSMIT_MODE)==0)
771755      {
772         if ((state->m_system_status & (1<<1))!=0)
756         if ((m_system_status & (1<<1))!=0)
773757         {
774            pcw16_keyboard_int(space->machine(), 0);
758            pcw16_keyboard_int(0);
775759         }
776760      }
777761   }
778762
779   pcw16_keyboard_refresh_outputs(state);
763   pcw16_keyboard_refresh_outputs();
780764}
781765
782766
r14963r14964
784768{
785769   pcw16_state *state = timer.machine().driver_data<pcw16_state>();
786770   at_keyboard_polling();
787   if (pcw16_keyboard_can_transmit(state))
771   if (state->pcw16_keyboard_can_transmit())
788772   {
789773      int data;
790774
r14963r14964
797781//              pcw16_dump_cpu_ram();
798782//          }
799783
800         pcw16_keyboard_signal_byte_received(timer.machine(), data);
784         state->pcw16_keyboard_signal_byte_received(data);
801785      }
802786   }
803787   // TODO: fix
r14963r14964
826810   29, 28, 28, 28
827811};
828812
829static void rtc_setup_max_days(pcw16_state *state)
813void pcw16_state::rtc_setup_max_days()
830814{
831815   /* february? */
832   if (state->m_rtc_months == 2)
816   if (m_rtc_months == 2)
833817   {
834818      /* low two bits of year select number of days in february */
835      state->m_rtc_days_max = rtc_days_in_february[state->m_rtc_years & 0x03];
819      m_rtc_days_max = rtc_days_in_february[m_rtc_years & 0x03];
836820   }
837821   else
838822   {
839      state->m_rtc_days_max = (unsigned char)rtc_days_in_each_month[state->m_rtc_months];
823      m_rtc_days_max = (unsigned char)rtc_days_in_each_month[m_rtc_months];
840824   }
841825}
842826
r14963r14964
891875
892876               }
893877
894               rtc_setup_max_days(state);
878               state->rtc_setup_max_days();
895879            }
896880
897881         }
r14963r14964
901885   }
902886}
903887
904static  READ8_HANDLER(rtc_year_invalid_r)
888READ8_MEMBER(pcw16_state::rtc_year_invalid_r)
905889{
906   pcw16_state *state = space->machine().driver_data<pcw16_state>();
907   /* year in lower 7 bits. RTC Invalid status is state->m_rtc_control bit 0
890   /* year in lower 7 bits. RTC Invalid status is m_rtc_control bit 0
908891    inverted */
909   return (state->m_rtc_years & 0x07f) | (((state->m_rtc_control & 0x01)<<7)^0x080);
892   return (m_rtc_years & 0x07f) | (((m_rtc_control & 0x01)<<7)^0x080);
910893}
911894
912static  READ8_HANDLER(rtc_month_r)
895READ8_MEMBER(pcw16_state::rtc_month_r)
913896{
914   pcw16_state *state = space->machine().driver_data<pcw16_state>();
915   return state->m_rtc_months;
897   return m_rtc_months;
916898}
917899
918static  READ8_HANDLER(rtc_days_r)
900READ8_MEMBER(pcw16_state::rtc_days_r)
919901{
920   pcw16_state *state = space->machine().driver_data<pcw16_state>();
921   return state->m_rtc_days;
902   return m_rtc_days;
922903}
923904
924static  READ8_HANDLER(rtc_hours_r)
905READ8_MEMBER(pcw16_state::rtc_hours_r)
925906{
926   pcw16_state *state = space->machine().driver_data<pcw16_state>();
927   return state->m_rtc_hours;
907   return m_rtc_hours;
928908}
929909
930static  READ8_HANDLER(rtc_minutes_r)
910READ8_MEMBER(pcw16_state::rtc_minutes_r)
931911{
932   pcw16_state *state = space->machine().driver_data<pcw16_state>();
933   return state->m_rtc_minutes;
912   return m_rtc_minutes;
934913}
935914
936static  READ8_HANDLER(rtc_seconds_r)
915READ8_MEMBER(pcw16_state::rtc_seconds_r)
937916{
938   pcw16_state *state = space->machine().driver_data<pcw16_state>();
939   return state->m_rtc_seconds;
917   return m_rtc_seconds;
940918}
941919
942static  READ8_HANDLER(rtc_256ths_seconds_r)
920READ8_MEMBER(pcw16_state::rtc_256ths_seconds_r)
943921{
944   pcw16_state *state = space->machine().driver_data<pcw16_state>();
945   return state->m_rtc_256ths_seconds;
922   return m_rtc_256ths_seconds;
946923}
947924
948static WRITE8_HANDLER(rtc_control_w)
925WRITE8_MEMBER(pcw16_state::rtc_control_w)
949926{
950   pcw16_state *state = space->machine().driver_data<pcw16_state>();
951927   /* write control */
952   state->m_rtc_control = data;
928   m_rtc_control = data;
953929}
954930
955static WRITE8_HANDLER(rtc_seconds_w)
931WRITE8_MEMBER(pcw16_state::rtc_seconds_w)
956932{
957   pcw16_state *state = space->machine().driver_data<pcw16_state>();
958933   /* TODO: Writing register could cause next to increment! */
959   state->m_rtc_seconds = data;
934   m_rtc_seconds = data;
960935}
961936
962static WRITE8_HANDLER(rtc_minutes_w)
937WRITE8_MEMBER(pcw16_state::rtc_minutes_w)
963938{
964   pcw16_state *state = space->machine().driver_data<pcw16_state>();
965939   /* TODO: Writing register could cause next to increment! */
966   state->m_rtc_minutes = data;
940   m_rtc_minutes = data;
967941}
968942
969static WRITE8_HANDLER(rtc_hours_w)
943WRITE8_MEMBER(pcw16_state::rtc_hours_w)
970944{
971   pcw16_state *state = space->machine().driver_data<pcw16_state>();
972945   /* TODO: Writing register could cause next to increment! */
973   state->m_rtc_hours = data;
946   m_rtc_hours = data;
974947}
975948
976static WRITE8_HANDLER(rtc_days_w)
949WRITE8_MEMBER(pcw16_state::rtc_days_w)
977950{
978   pcw16_state *state = space->machine().driver_data<pcw16_state>();
979951   /* TODO: Writing register could cause next to increment! */
980   state->m_rtc_days = data;
952   m_rtc_days = data;
981953}
982954
983static WRITE8_HANDLER(rtc_month_w)
955WRITE8_MEMBER(pcw16_state::rtc_month_w)
984956{
985   pcw16_state *state = space->machine().driver_data<pcw16_state>();
986957   /* TODO: Writing register could cause next to increment! */
987   state->m_rtc_months = data;
958   m_rtc_months = data;
988959
989   rtc_setup_max_days(state);
960   rtc_setup_max_days();
990961}
991962
992963
993static WRITE8_HANDLER(rtc_year_w)
964WRITE8_MEMBER(pcw16_state::rtc_year_w)
994965{
995   pcw16_state *state = space->machine().driver_data<pcw16_state>();
996966   /* TODO: Writing register could cause next to increment! */
997   state->m_rtc_hours = data;
967   m_rtc_hours = data;
998968
999   rtc_setup_max_days(state);
969   rtc_setup_max_days();
1000970}
1001971
1002972
r14963r14964
10331003      /* attach fdc to int */
10341004      case 1:
10351005      {
1036         pcw16_refresh_ints(machine);
1006         drvstate->pcw16_refresh_ints();
10371007      }
10381008      break;
10391009
r14963r14964
10451015   drvstate->m_previous_fdc_int_state = state;
10461016}
10471017
1048static READ8_HANDLER(pcw16_system_status_r)
1018READ8_MEMBER(pcw16_state::pcw16_system_status_r)
10491019{
1050   pcw16_state *state = space->machine().driver_data<pcw16_state>();
10511020//  logerror("system status r: \n");
10521021
1053   return state->m_system_status | (input_port_read(space->machine(), "EXTRA") & 0x04);
1022   return m_system_status | (input_port_read(machine(), "EXTRA") & 0x04);
10541023}
10551024
1056static READ8_HANDLER(pcw16_timer_interrupt_counter_r)
1025READ8_MEMBER(pcw16_state::pcw16_timer_interrupt_counter_r)
10571026{
1058   pcw16_state *state = space->machine().driver_data<pcw16_state>();
10591027   int data;
10601028
1061   data = state->m_interrupt_counter;
1029   data = m_interrupt_counter;
10621030
1063   state->m_interrupt_counter = 0;
1031   m_interrupt_counter = 0;
10641032   /* clear display int */
1065   state->m_system_status &= ~(1<<0);
1033   m_system_status &= ~(1<<0);
10661034
1067   pcw16_refresh_ints(space->machine());
1035   pcw16_refresh_ints();
10681036
10691037   return data;
10701038}
10711039
10721040
1073static WRITE8_HANDLER(pcw16_system_control_w)
1041WRITE8_MEMBER(pcw16_state::pcw16_system_control_w)
10741042{
1075   pcw16_state *state = space->machine().driver_data<pcw16_state>();
1076   device_t *speaker = space->machine().device(BEEPER_TAG);
1043   device_t *speaker = machine().device(BEEPER_TAG);
10771044   //logerror("0x0f8: function: %d\n",data);
10781045
10791046   /* lower 4 bits define function code */
r14963r14964
10941061      /* connect IRQ6 input to /NMI */
10951062      case 0x02:
10961063      {
1097         state->m_fdc_int_code = 0;
1064         m_fdc_int_code = 0;
10981065      }
10991066      break;
11001067
11011068      /* connect IRQ6 input to /INT */
11021069      case 0x03:
11031070      {
1104         state->m_fdc_int_code = 1;
1071         m_fdc_int_code = 1;
11051072      }
11061073      break;
11071074
11081075      /* dis-connect IRQ6 input from /NMI and /INT */
11091076      case 0x04:
11101077      {
1111         state->m_fdc_int_code = 2;
1078         m_fdc_int_code = 2;
11121079      }
11131080      break;
11141081
11151082      /* set terminal count */
11161083      case 0x05:
11171084      {
1118         pc_fdc_set_tc_state(space->machine(), 1);
1085         pc_fdc_set_tc_state(machine(), 1);
11191086      }
11201087      break;
11211088
11221089      /* clear terminal count */
11231090      case 0x06:
11241091      {
1125         pc_fdc_set_tc_state(space->machine(), 0);
1092         pc_fdc_set_tc_state(machine(), 0);
11261093      }
11271094      break;
11281095
r14963r14964
11601127         /* bit 5 - green/red led (1==green)*/
11611128         /* bit 4 - monitor on/off (1==on) */
11621129
1163         state->m_4_bit_port = data>>4;
1130         m_4_bit_port = data>>4;
11641131
11651132
11661133      }
r14963r14964
11711138/**** SUPER I/O connections */
11721139
11731140/* write to Super I/O chip. FDC Data Rate. */
1174static WRITE8_HANDLER(pcw16_superio_fdc_datarate_w)
1141WRITE8_MEMBER(pcw16_state::pcw16_superio_fdc_datarate_w)
11751142{
1176   pc_fdc_w(space, PC_FDC_DATA_RATE_REGISTER,data);
1143   pc_fdc_w(&space, PC_FDC_DATA_RATE_REGISTER,data);
11771144}
11781145
11791146/* write to Super I/O chip. FDC Digital output register */
1180static WRITE8_HANDLER(pcw16_superio_fdc_digital_output_register_w)
1147WRITE8_MEMBER(pcw16_state::pcw16_superio_fdc_digital_output_register_w)
11811148{
1182   pc_fdc_w(space, PC_FDC_DIGITAL_OUTPUT_REGISTER, data);
1149   pc_fdc_w(&space, PC_FDC_DIGITAL_OUTPUT_REGISTER, data);
11831150}
11841151
11851152/* write to Super I/O chip. FDC Data Register */
1186static WRITE8_HANDLER(pcw16_superio_fdc_data_w)
1153WRITE8_MEMBER(pcw16_state::pcw16_superio_fdc_data_w)
11871154{
1188   pc_fdc_w(space, PC_FDC_DATA_REGISTER, data);
1155   pc_fdc_w(&space, PC_FDC_DATA_REGISTER, data);
11891156}
11901157
11911158/* write to Super I/O chip. FDC Data Register */
1192static  READ8_HANDLER(pcw16_superio_fdc_data_r)
1159READ8_MEMBER(pcw16_state::pcw16_superio_fdc_data_r)
11931160{
1194   return pc_fdc_r(space, PC_FDC_DATA_REGISTER);
1161   return pc_fdc_r(&space, PC_FDC_DATA_REGISTER);
11951162}
11961163
11971164/* write to Super I/O chip. FDC Main Status Register */
1198static  READ8_HANDLER(pcw16_superio_fdc_main_status_register_r)
1165READ8_MEMBER(pcw16_state::pcw16_superio_fdc_main_status_register_r)
11991166{
1200   return pc_fdc_r(space, PC_FDC_MAIN_STATUS_REGISTER);
1167   return pc_fdc_r(&space, PC_FDC_MAIN_STATUS_REGISTER);
12011168}
12021169
1203static  READ8_HANDLER(pcw16_superio_fdc_digital_input_register_r)
1170READ8_MEMBER(pcw16_state::pcw16_superio_fdc_digital_input_register_r)
12041171{
1205   return pc_fdc_r(space, PC_FDC_DIGITIAL_INPUT_REGISTER);
1172   return pc_fdc_r(&space, PC_FDC_DIGITIAL_INPUT_REGISTER);
12061173}
12071174
12081175static void pcw16_fdc_interrupt(running_machine &machine, int state)
r14963r14964
12431210      drvstate->m_system_status |= (1 << 4);
12441211   }
12451212
1246   pcw16_refresh_ints(device->machine());
1213   drvstate->pcw16_refresh_ints();
12471214}
12481215
12491216
r14963r14964
12561223      drvstate->m_system_status |= (1 << 3);
12571224   }
12581225
1259   pcw16_refresh_ints(device->machine());
1226   drvstate->pcw16_refresh_ints();
12601227}
12611228
12621229static WRITE_LINE_DEVICE_HANDLER( pcw16_com_tx_0 ) { }
r14963r14964
12921259static ADDRESS_MAP_START(pcw16_io, AS_IO, 8, pcw16_state )
12931260   ADDRESS_MAP_GLOBAL_MASK(0xff)
12941261   /* super i/o chip */
1295   AM_RANGE(0x01a, 0x01a) AM_WRITE_LEGACY(pcw16_superio_fdc_digital_output_register_w)
1296    AM_RANGE(0x01c, 0x01c) AM_READ_LEGACY(pcw16_superio_fdc_main_status_register_r)
1297   AM_RANGE(0x01d, 0x01d) AM_READWRITE_LEGACY(pcw16_superio_fdc_data_r, pcw16_superio_fdc_data_w)
1298   AM_RANGE(0x01f, 0x01f) AM_READWRITE_LEGACY(pcw16_superio_fdc_digital_input_register_r, pcw16_superio_fdc_datarate_w)
1262   AM_RANGE(0x01a, 0x01a) AM_WRITE(pcw16_superio_fdc_digital_output_register_w)
1263    AM_RANGE(0x01c, 0x01c) AM_READ(pcw16_superio_fdc_main_status_register_r)
1264   AM_RANGE(0x01d, 0x01d) AM_READWRITE(pcw16_superio_fdc_data_r, pcw16_superio_fdc_data_w)
1265   AM_RANGE(0x01f, 0x01f) AM_READWRITE(pcw16_superio_fdc_digital_input_register_r, pcw16_superio_fdc_datarate_w)
12991266   AM_RANGE(0x020, 0x027) AM_DEVREADWRITE("ns16550_1", ns16550_device, ins8250_r, ins8250_w)
13001267   AM_RANGE(0x028, 0x02f) AM_DEVREADWRITE("ns16550_2", ns16550_device, ins8250_r, ins8250_w)
13011268   AM_RANGE(0x038, 0x03a) AM_DEVREADWRITE_LEGACY("lpt", pc_lpt_r, pc_lpt_w)
13021269   /* anne asic */
1303   AM_RANGE(0x0e0, 0x0ef) AM_WRITE_LEGACY(pcw16_palette_w)
1304   AM_RANGE(0x0f0, 0x0f3) AM_READWRITE_LEGACY(pcw16_bankhw_r, pcw16_bankhw_w)
1305   AM_RANGE(0x0f4, 0x0f4) AM_READWRITE_LEGACY(pcw16_keyboard_data_shift_r, pcw16_keyboard_data_shift_w)
1306   AM_RANGE(0x0f5, 0x0f5) AM_READWRITE_LEGACY(pcw16_keyboard_status_r, pcw16_keyboard_control_w)
1307   AM_RANGE(0x0f7, 0x0f7) AM_READWRITE_LEGACY(pcw16_timer_interrupt_counter_r, pcw16_video_control_w)
1308   AM_RANGE(0x0f8, 0x0f8) AM_READWRITE_LEGACY(pcw16_system_status_r, pcw16_system_control_w)
1309   AM_RANGE(0x0f9, 0x0f9) AM_READWRITE_LEGACY(rtc_256ths_seconds_r, rtc_control_w)
1310   AM_RANGE(0x0fa, 0x0fa) AM_READWRITE_LEGACY(rtc_seconds_r, rtc_seconds_w)
1311   AM_RANGE(0x0fb, 0x0fb) AM_READWRITE_LEGACY(rtc_minutes_r, rtc_minutes_w)
1312   AM_RANGE(0x0fc, 0x0fc) AM_READWRITE_LEGACY(rtc_hours_r, rtc_hours_w)
1313   AM_RANGE(0x0fd, 0x0fd) AM_READWRITE_LEGACY(rtc_days_r, rtc_days_w)
1314   AM_RANGE(0x0fe, 0x0fe) AM_READWRITE_LEGACY(rtc_month_r, rtc_month_w)
1315   AM_RANGE(0x0ff, 0x0ff) AM_READWRITE_LEGACY(rtc_year_invalid_r, rtc_year_w)
1270   AM_RANGE(0x0e0, 0x0ef) AM_WRITE(pcw16_palette_w)
1271   AM_RANGE(0x0f0, 0x0f3) AM_READWRITE(pcw16_bankhw_r, pcw16_bankhw_w)
1272   AM_RANGE(0x0f4, 0x0f4) AM_READWRITE(pcw16_keyboard_data_shift_r, pcw16_keyboard_data_shift_w)
1273   AM_RANGE(0x0f5, 0x0f5) AM_READWRITE(pcw16_keyboard_status_r, pcw16_keyboard_control_w)
1274   AM_RANGE(0x0f7, 0x0f7) AM_READWRITE(pcw16_timer_interrupt_counter_r, pcw16_video_control_w)
1275   AM_RANGE(0x0f8, 0x0f8) AM_READWRITE(pcw16_system_status_r, pcw16_system_control_w)
1276   AM_RANGE(0x0f9, 0x0f9) AM_READWRITE(rtc_256ths_seconds_r, rtc_control_w)
1277   AM_RANGE(0x0fa, 0x0fa) AM_READWRITE(rtc_seconds_r, rtc_seconds_w)
1278   AM_RANGE(0x0fb, 0x0fb) AM_READWRITE(rtc_minutes_r, rtc_minutes_w)
1279   AM_RANGE(0x0fc, 0x0fc) AM_READWRITE(rtc_hours_r, rtc_hours_w)
1280   AM_RANGE(0x0fd, 0x0fd) AM_READWRITE(rtc_days_r, rtc_days_w)
1281   AM_RANGE(0x0fe, 0x0fe) AM_READWRITE(rtc_month_r, rtc_month_w)
1282   AM_RANGE(0x0ff, 0x0ff) AM_READWRITE(rtc_year_invalid_r, rtc_year_w)
13161283ADDRESS_MAP_END
13171284
13181285
r14963r14964
13381305   state->m_rtc_control = 1;
13391306   state->m_rtc_256ths_seconds = 0;
13401307
1341   pcw16_keyboard_init(machine);
1308   state->pcw16_keyboard_init();
13421309}
13431310
13441311
src/mess/drivers/msx.c
r14963r14964
10131013{
10141014   AY8910_LEGACY_OUTPUT,
10151015   AY8910_DEFAULT_LOADS,
1016   DEVCB_MEMORY_HANDLER("maincpu", PROGRAM, msx_psg_port_a_r),
1017   DEVCB_MEMORY_HANDLER("maincpu", PROGRAM, msx_psg_port_b_r),
1018   DEVCB_MEMORY_HANDLER("maincpu", PROGRAM, msx_psg_port_a_w),
1019   DEVCB_MEMORY_HANDLER("maincpu", PROGRAM, msx_psg_port_b_w)
1016   DEVCB_DRIVER_MEMBER(msx_state, msx_psg_port_a_r),
1017   DEVCB_DRIVER_MEMBER(msx_state, msx_psg_port_b_r),
1018   DEVCB_DRIVER_MEMBER(msx_state, msx_psg_port_a_w),
1019   DEVCB_DRIVER_MEMBER(msx_state, msx_psg_port_b_w)
10201020};
10211021
10221022#define MSX_XBORDER_PIXELS      15
src/mess/drivers/mz700.c
r14963r14964
105105
106106static ADDRESS_MAP_START( mz700_io, AS_IO, 8, mz_state )
107107   ADDRESS_MAP_GLOBAL_MASK(0xff)
108   AM_RANGE(0xe0, 0xe0) AM_WRITE_LEGACY(mz700_bank_0_w)
109   AM_RANGE(0xe1, 0xe1) AM_WRITE_LEGACY(mz700_bank_1_w)
110   AM_RANGE(0xe2, 0xe2) AM_WRITE_LEGACY(mz700_bank_2_w)
111   AM_RANGE(0xe3, 0xe3) AM_WRITE_LEGACY(mz700_bank_3_w)
112   AM_RANGE(0xe4, 0xe4) AM_WRITE_LEGACY(mz700_bank_4_w)
113   AM_RANGE(0xe5, 0xe5) AM_WRITE_LEGACY(mz700_bank_5_w)
114   AM_RANGE(0xe6, 0xe6) AM_WRITE_LEGACY(mz700_bank_6_w)
108   AM_RANGE(0xe0, 0xe0) AM_WRITE(mz700_bank_0_w)
109   AM_RANGE(0xe1, 0xe1) AM_WRITE(mz700_bank_1_w)
110   AM_RANGE(0xe2, 0xe2) AM_WRITE(mz700_bank_2_w)
111   AM_RANGE(0xe3, 0xe3) AM_WRITE(mz700_bank_3_w)
112   AM_RANGE(0xe4, 0xe4) AM_WRITE(mz700_bank_4_w)
113   AM_RANGE(0xe5, 0xe5) AM_WRITE(mz700_bank_5_w)
114   AM_RANGE(0xe6, 0xe6) AM_WRITE(mz700_bank_6_w)
115115ADDRESS_MAP_END
116116
117117static ADDRESS_MAP_START( mz800_mem, AS_PROGRAM, 8, mz_state )
r14963r14964
119119
120120static ADDRESS_MAP_START( mz800_io, AS_IO, 8, mz_state )
121121   ADDRESS_MAP_GLOBAL_MASK(0xff)
122   AM_RANGE(0xcc, 0xcc) AM_WRITE_LEGACY(mz800_write_format_w )
123   AM_RANGE(0xcd, 0xcd) AM_WRITE_LEGACY(mz800_read_format_w )
124   AM_RANGE(0xce, 0xce) AM_READWRITE_LEGACY(mz800_crtc_r, mz800_display_mode_w )
125   AM_RANGE(0xcf, 0xcf) AM_WRITE_LEGACY(mz800_scroll_border_w )
122   AM_RANGE(0xcc, 0xcc) AM_WRITE(mz800_write_format_w )
123   AM_RANGE(0xcd, 0xcd) AM_WRITE(mz800_read_format_w )
124   AM_RANGE(0xce, 0xce) AM_READWRITE(mz800_crtc_r, mz800_display_mode_w )
125   AM_RANGE(0xcf, 0xcf) AM_WRITE(mz800_scroll_border_w )
126126   AM_RANGE(0xd0, 0xd3) AM_DEVREADWRITE("ppi8255", i8255_device, read, write)
127127   AM_RANGE(0xd4, 0xd7) AM_DEVREADWRITE_LEGACY("pit8253", pit8253_r, pit8253_w)
128   AM_RANGE(0xe0, 0xe0) AM_READWRITE_LEGACY(mz800_bank_0_r, mz800_bank_0_w)
129   AM_RANGE(0xe1, 0xe1) AM_READWRITE_LEGACY(mz800_bank_1_r, mz700_bank_1_w)
130   AM_RANGE(0xe2, 0xe2) AM_WRITE_LEGACY(mz700_bank_2_w)
131   AM_RANGE(0xe3, 0xe3) AM_WRITE_LEGACY(mz700_bank_3_w)
132   AM_RANGE(0xe4, 0xe4) AM_WRITE_LEGACY(mz700_bank_4_w)
133   AM_RANGE(0xe5, 0xe5) AM_WRITE_LEGACY(mz700_bank_5_w)
134   AM_RANGE(0xe6, 0xe6) AM_WRITE_LEGACY(mz700_bank_6_w)
135   AM_RANGE(0xea, 0xea) AM_READWRITE_LEGACY(mz800_ramdisk_r, mz800_ramdisk_w )
136   AM_RANGE(0xeb, 0xeb) AM_WRITE_LEGACY(mz800_ramaddr_w )
137   AM_RANGE(0xf0, 0xf0) AM_READ_PORT("atari_joy1") AM_WRITE_LEGACY(mz800_palette_w)
128   AM_RANGE(0xe0, 0xe0) AM_READWRITE(mz800_bank_0_r, mz800_bank_0_w)
129   AM_RANGE(0xe1, 0xe1) AM_READWRITE(mz800_bank_1_r, mz700_bank_1_w)
130   AM_RANGE(0xe2, 0xe2) AM_WRITE(mz700_bank_2_w)
131   AM_RANGE(0xe3, 0xe3) AM_WRITE(mz700_bank_3_w)
132   AM_RANGE(0xe4, 0xe4) AM_WRITE(mz700_bank_4_w)
133   AM_RANGE(0xe5, 0xe5) AM_WRITE(mz700_bank_5_w)
134   AM_RANGE(0xe6, 0xe6) AM_WRITE(mz700_bank_6_w)
135   AM_RANGE(0xea, 0xea) AM_READWRITE(mz800_ramdisk_r, mz800_ramdisk_w )
136   AM_RANGE(0xeb, 0xeb) AM_WRITE(mz800_ramaddr_w )
137   AM_RANGE(0xf0, 0xf0) AM_READ_PORT("atari_joy1") AM_WRITE(mz800_palette_w)
138138   AM_RANGE(0xf1, 0xf1) AM_READ_PORT("atari_joy2")
139139   AM_RANGE(0xf2, 0xf2) AM_DEVWRITE_LEGACY("sn76489n", sn76496_w)
140140   AM_RANGE(0xfc, 0xfd) AM_DEVREADWRITE_LEGACY("z80pio", z80pio_c_r, z80pio_c_w)
src/mess/drivers/apollo.c
r14963r14964
297297 DN3500 Cache Control/Status Register at 0x10200
298298 ***************************************************************************/
299299
300static WRITE8_HANDLER(cache_control_register_w ) {
300WRITE8_MEMBER(apollo_state::cache_control_register_w){
301301   if (apollo_is_dn5500())
302302   {
303303      SLOG1(("Error: writing DN5500 Cache Status Register at offset %02x = %02x", offset, data));
r14963r14964
310310   }
311311}
312312
313static READ8_HANDLER( cache_status_register_r ) {
313READ8_MEMBER(apollo_state::cache_status_register_r){
314314   UINT8 data = cache_status_register;
315315
316316   if (apollo_is_dn5500()) {
r14963r14964
336336 DN3500 Task Alias Register at 0x10300
337337 ***************************************************************************/
338338
339static WRITE8_HANDLER(task_alias_register_w ) {
339WRITE8_MEMBER(apollo_state::task_alias_register_w){
340340   task_alias_register = data;
341341   apollo_set_cache_status_register(0x07,  data);
342342   SLOG(("writing Task Alias Register at offset %02x = %02x",offset, data));
343343}
344344
345static READ8_HANDLER( task_alias_register_r ) {
345READ8_MEMBER(apollo_state::task_alias_register_r){
346346   UINT8 data = 0xff;
347347   SLOG(("reading Task Alias Register at offset %02x = %02x", offset, data));
348348   return data;
r14963r14964
352352 DN3000/DN3500 Node Id PROM at 0x9600/0x11200
353353 ***************************************************************************/
354354
355static WRITE16_HANDLER(apollo_node_id_w ) {
355WRITE16_MEMBER(apollo_state::apollo_node_id_w){
356356   SLOG1(("Error: writing node id ROM at offset %02x = %04x & %04x", offset, data, mem_mask));
357357}
358358
359static READ16_HANDLER( apollo_node_id_r ) {
359READ16_MEMBER(apollo_state::apollo_node_id_r){
360360   UINT16 data;
361361   switch (offset & 0x0f) {
362362   case 1: // msb
r14963r14964
384384 DN3000/DN3500 Latch Page on Parity Error Register at 0x9300/0x11300
385385 ***************************************************************************/
386386
387static WRITE16_HANDLER(latch_page_on_parity_error_register_w ) {
387WRITE16_MEMBER(apollo_state::latch_page_on_parity_error_register_w){
388388   latch_page_on_parity_error_register = data;
389389   SLOG1(("writing Latch Page on Error Parity Register at offset %02x = %04x", offset*2, data));
390390}
391391
392static READ16_HANDLER( latch_page_on_parity_error_register_r ) {
392READ16_MEMBER(apollo_state::latch_page_on_parity_error_register_r){
393393   UINT16 data = latch_page_on_parity_error_register;
394394   SLOG2(("reading Latch Page on Error Parity Register at offset %02x = %04x", offset*2, data));
395395   return data;
r14963r14964
399399 DN3500 Master REQ Register at 0x11600
400400 ***************************************************************************/
401401
402static WRITE8_HANDLER(master_req_register_w ) {
402WRITE8_MEMBER(apollo_state::master_req_register_w){
403403   master_req_register = data;
404404   SLOG2(("writing Master REQ Register at offset %02x = %02x", offset, data));
405405}
406406
407static READ8_HANDLER( master_req_register_r ) {
407READ8_MEMBER(apollo_state::master_req_register_r){
408408   UINT8 data = 0xff;
409409   SLOG1(("reading Master REQ Register at offset %02x = %02x", offset, data));
410410   return data;
r14963r14964
414414 DN3500 Selective Clear Locations at 0x11600
415415 ***************************************************************************/
416416
417static WRITE16_HANDLER(selective_clear_locations_w ) {
417WRITE16_MEMBER(apollo_state::selective_clear_locations_w){
418418   SLOG2(("writing Selective Clear Locations at offset %02x = %02x", offset*2, data));
419419   switch (offset * 2) {
420420   case 0x00: // Clear All
r14963r14964
434434   }
435435}
436436
437static READ16_HANDLER(selective_clear_locations_r ) {
437READ16_MEMBER(apollo_state::selective_clear_locations_r){
438438   UINT16 data = 0xffff;
439439   SLOG1(("reading Selective Clear Locations at offset %02x = %02x", offset*2, data));
440440   return data;
r14963r14964
444444 DN3000/DN3500 RAM with parity (and null proc loop delay for DomainOS)
445445 ***************************************************************************/
446446
447static READ32_HANDLER( ram_with_parity_r ) {
447READ32_MEMBER(apollo_state::ram_with_parity_r){
448448   UINT32 data = messram_ptr.u32[parity_error_offset+offset];
449449
450450   SLOG2(("memory dword read with parity error at %08x = %08x & %08x parity_byte=%04x",
r14963r14964
457457
458458      if (apollo_csr_get_control_register() & APOLLO_CSR_CR_INTERRUPT_ENABLE) {
459459         // force parity error (if NMI is enabled)
460//          cpu_set_input_line_and_vector(&space->device(), 7, ASSERT_LINE, M68K_INT_ACK_AUTOVECTOR);
461         cputag_set_input_line_and_vector(space->machine(), MAINCPU, 7, ASSERT_LINE, M68K_INT_ACK_AUTOVECTOR);
460//          cpu_set_input_line_and_vector(&space.device(), 7, ASSERT_LINE, M68K_INT_ACK_AUTOVECTOR);
461         cputag_set_input_line_and_vector(machine(), MAINCPU, 7, ASSERT_LINE, M68K_INT_ACK_AUTOVECTOR);
462462
463463      }
464464   }
465465   return data;
466466}
467467
468static WRITE32_HANDLER( ram_with_parity_w ) {
468WRITE32_MEMBER(apollo_state::ram_with_parity_w){
469469
470470   COMBINE_DATA(messram_ptr.u32+offset);
471471
r14963r14964
486486         // no more than 192 read/write handlers may be used
487487         // see table_assign_handler in memory.c
488488         if (parity_error_handler_install_counter < 40) {
489            //memory_install_read32_handler(space, ram_base_address+offset*4, ram_base_address+offset*4+3, 0xffffffff, 0, ram_with_parity_r);
490            space->install_legacy_read_handler(ram_base_address+offset*4, ram_base_address+offset*4+3, 0xffffffff,0,FUNC(ram_with_parity_r));
489            //memory_install_read32_handler(&space, ram_base_address+offset*4, ram_base_address+offset*4+3, 0xffffffff, 0, ram_with_parity_r);
490            space.install_read_handler(ram_base_address+offset*4, ram_base_address+offset*4+3, 0xffffffff,0,read32_delegate(FUNC(apollo_state::ram_with_parity_r),this));
491491            parity_error_handler_is_installed = 1;
492492            parity_error_handler_install_counter++;
493493         }
r14963r14964
498498
499499      // uninstall not supported, reinstall previous read handler instead
500500
501      // memory_install_rom(space, ram_base_address, ram_end_address, 0xffffffff, 0, messram_ptr.v);
502      space->install_rom(ram_base_address,ram_end_address,0xffffffff,0,messram_ptr.v);
501      // memory_install_rom(&space, ram_base_address, ram_end_address, 0xffffffff, 0, messram_ptr.v);
502      space.install_rom(ram_base_address,ram_end_address,0xffffffff,0,messram_ptr.v);
503503
504504      parity_error_handler_is_installed = 0;
505505      parity_error_byte_mask = 0;
r14963r14964
510510 DN3000/DN3500 unmapped memory
511511 ***************************************************************************/
512512
513static READ32_HANDLER( apollo_unmapped_r )
513READ32_MEMBER(apollo_state::apollo_unmapped_r)
514514{
515515   offs_t address = offset * 4;
516516
517   m68ki_cpu_core *m68k = (m68ki_cpu_core *) downcast<legacy_cpu_device *>(&space->device())->token();
517   m68ki_cpu_core *m68k = (m68ki_cpu_core *) downcast<legacy_cpu_device *>(&space.device())->token();
518518
519519   if ((address & 0xfff00000) == 0xfa800000 && VERBOSE < 2) {
520520      // ?
521521   } else if ((address & 0xfff00ff7) == 0xfd800000 && VERBOSE < 2) {
522      // omit logging for memory sizing in FPA address space
522      // omit logging for memory sizing in FPA address &space
523523      // strange: MD seems to search for the 3C505 Boot ROM
524      // note (6.10.2010): might be color7 address space (!?!)
524      // note (6.10.2010): might be color7 address &space (!?!)
525525   } else if ((address & 0xfc03ffff) == 0x00000000 && VERBOSE < 2) {
526526      // omit logging for memory sizing in standalone utilities
527527   } else if (address == 0xfff90000 && VERBOSE < 2) {
r14963r14964
535535   }
536536
537537   /* unmapped; access causes a bus error */
538   apollo_bus_error(space->machine());
538   apollo_bus_error(machine());
539539   return 0xffffffff;
540540}
541541
542static WRITE32_HANDLER( apollo_unmapped_w )
542WRITE32_MEMBER(apollo_state::apollo_unmapped_w)
543543{
544544   SLOG(("unmapped memory dword write to %08x = %08x & %08x", offset * 4, data, mem_mask));
545545
546546   /* unmapped; access causes a bus error */
547   apollo_bus_error(space->machine());
547   apollo_bus_error(machine());
548548}
549549
550550/***************************************************************************
551551 DN3000/DN3500 ROM write
552552 ***************************************************************************/
553553
554static WRITE32_HANDLER( apollo_rom_w )
554WRITE32_MEMBER(apollo_state::apollo_rom_w)
555555{
556556   offs_t address =  offset * 4;
557   offs_t pc = cpu_get_previouspc(&space->device());
557   offs_t pc = cpu_get_previouspc(&space.device());
558558
559559   if (pc == 0x00002c1c && address == 0x00000004 && VERBOSE < 2) {
560560      // don't log invalid code in 3500_boot_12191_7.bin
r14963r14964
567567 DN3000/DN3500 AT Bus I/O space
568568 ***************************************************************************/
569569
570static READ16_HANDLER( apollo_atbus_io_r ) {
570READ16_MEMBER(apollo_state::apollo_atbus_io_r){
571571   UINT16 data = 0xffff;
572572   offs_t address = ATBUS_IO_BASE + offset * 2;
573573
r14963r14964
600600   return data;
601601}
602602
603static WRITE16_HANDLER( apollo_atbus_io_w ) {
603WRITE16_MEMBER(apollo_state::apollo_atbus_io_w){
604604   offs_t address = ATBUS_IO_BASE + offset * 2;
605605
606606   switch (address & ~7) {
r14963r14964
635635 DN3000/DN3500 AT Bus memory space
636636 ***************************************************************************/
637637
638static READ32_HANDLER( apollo_atbus_memory_r ) {
638READ32_MEMBER(apollo_state::apollo_atbus_memory_r){
639639   UINT32 data = 0xffffffff;
640640   offs_t address = ATBUS_MEMORY_BASE +  offset * 4;
641641   if (VERBOSE < 2 && (address & 0xfff) == 0 && address >= 0x80000 && address < 0x1000000) {
r14963r14964
651651   return data;
652652}
653653
654static WRITE32_HANDLER( apollo_atbus_memory_w ) {
654WRITE32_MEMBER(apollo_state::apollo_atbus_memory_w){
655655   SLOG1(("AT Bus memory dword write to %08x = %08x & %08x ",
656656               ATBUS_MEMORY_BASE+offset * 4, data, mem_mask));
657657
r14963r14964
665665 Strange: documented but not used
666666 ***************************************************************************/
667667
668static WRITE8_HANDLER( dn5500_memory_present_register_w ) {
668WRITE8_MEMBER(apollo_state::dn5500_memory_present_register_w){
669669   SLOG(("Error: writing DN5500 Memory Present Register at offset %02x = %02x", offset, data));
670670}
671671
672static READ8_HANDLER( dn5500_memory_present_register_r ) {
672READ8_MEMBER(apollo_state::dn5500_memory_present_register_r){
673673   UINT8 data = DN5500_MEM_PRESENT_BYTE;
674674   SLOG(("reading DN5500 Memory Present Register at offset %02x = %02x", offset, data));
675675   return data;
r14963r14964
679679 DN5500 11500 Registers at 0x11500-0x115ff (undocumented, what does it do?)
680680 ***************************************************************************/
681681
682static WRITE8_HANDLER( dn5500_11500_w ) {
682WRITE8_MEMBER(apollo_state::dn5500_11500_w){
683683   SLOG1(("writing DN5500 11500 at offset %02x = %02x", offset, data));
684684}
685685
686static READ8_HANDLER( dn5500_11500_r ) {
686READ8_MEMBER(apollo_state::dn5500_11500_r){
687687   UINT8 data = 0xff;
688688   SLOG1(("reading DN5500 11500 at offset %02x = %02x", offset, data));
689689   return data;
r14963r14964
693693 DN5500 I/O Protection Map at 0x7000000-0x700FFFF
694694 ***************************************************************************/
695695
696static WRITE8_HANDLER(dn5500_io_protection_map_w ) {
696WRITE8_MEMBER(apollo_state::dn5500_io_protection_map_w){
697697   // TODO
698698   SLOG1(("writing DN5500 I/O Protection Map at offset %02x = %02x", offset, data));
699699}
700700
701static READ8_HANDLER( dn5500_io_protection_map_r ) {
701READ8_MEMBER(apollo_state::dn5500_io_protection_map_r){
702702   UINT8 data = 0xff;
703703   SLOG1(("reading DN5500 I/O Protection Map at offset %02x = %02x", offset, data));
704704   return data;
r14963r14964
709709 DN3000/DN3500 at f8000000 - ffffffff (used by fpa and/or color7?)
710710 ***************************************************************************/
711711
712static READ32_HANDLER( apollo_f8_r ) {
712READ32_MEMBER(apollo_state::apollo_f8_r){
713713   offs_t address = 0xf8000000 + offset * 4;
714714   UINT32 data = 0xffffffff;
715715   SLOG2(("unexpected memory dword read from %08x = %08x & %08x",
r14963r14964
717717   return data;
718718}
719719
720static WRITE32_HANDLER( apollo_f8_w ) {
720WRITE32_MEMBER(apollo_state::apollo_f8_w){
721721   offs_t address = 0xf8000000 +offset * 4;
722722
723723   SLOG2(("unexpected memory dword write to %08x = %08x & %08x",
r14963r14964
731731
732732static ADDRESS_MAP_START(dn3500_map, AS_PROGRAM, 32, apollo_state )
733733      AM_RANGE(0x000000, 0x00ffff) AM_ROM /* boot ROM  */
734        AM_RANGE(0x000000, 0x00ffff) AM_WRITE_LEGACY(apollo_rom_w)
735      AM_RANGE(0x010000, 0x0100ff) AM_READWRITE16_LEGACY(apollo_csr_status_register_r, apollo_csr_status_register_w, 0xffffffff)
736      AM_RANGE(0x010100, 0x0101ff) AM_READWRITE16_LEGACY(apollo_csr_control_register_r, apollo_csr_control_register_w, 0xffffffff)
737      AM_RANGE(0x010200, 0x0102ff) AM_READWRITE8_LEGACY(cache_status_register_r, cache_control_register_w, 0xffffffff )
738      AM_RANGE(0x010300, 0x0103ff) AM_READWRITE8_LEGACY(task_alias_register_r , task_alias_register_w , 0xffffffff )
734        AM_RANGE(0x000000, 0x00ffff) AM_WRITE(apollo_rom_w)
735      AM_RANGE(0x010000, 0x0100ff) AM_READWRITE16(apollo_csr_status_register_r, apollo_csr_status_register_w, 0xffffffff)
736      AM_RANGE(0x010100, 0x0101ff) AM_READWRITE16(apollo_csr_control_register_r, apollo_csr_control_register_w, 0xffffffff)
737      AM_RANGE(0x010200, 0x0102ff) AM_READWRITE8(cache_status_register_r, cache_control_register_w, 0xffffffff )
738      AM_RANGE(0x010300, 0x0103ff) AM_READWRITE8(task_alias_register_r , task_alias_register_w , 0xffffffff )
739739      AM_RANGE(0x010400, 0x0104ff) AM_DEVREADWRITE8_LEGACY(APOLLO_SIO_TAG, apollo_sio_r, apollo_sio_w, 0xffffffff )
740740      AM_RANGE(0x010500, 0x0105ff) AM_DEVREADWRITE8_LEGACY(APOLLO_SIO2_TAG, apollo_sio2_r, apollo_sio2_w, 0xffffffff )
741741      AM_RANGE(0x010800, 0x0108ff) AM_DEVREADWRITE8_LEGACY(APOLLO_PTM_TAG, apollo_ptm_r, apollo_ptm_w, 0xffffffff )
742      AM_RANGE(0x010900, 0x0109ff) AM_READWRITE8_LEGACY(apollo_rtc_r, apollo_rtc_w, 0xffffffff )
743      AM_RANGE(0x010c00, 0x010cff) AM_READWRITE8_LEGACY(/*"dma1",*/apollo_dma_1_r, apollo_dma_1_w, 0xffffffff )
744      AM_RANGE(0x010d00, 0x010dff) AM_READWRITE8_LEGACY(/*"dma2",*/apollo_dma_2_r, apollo_dma_2_w, 0xffffffff )
742      AM_RANGE(0x010900, 0x0109ff) AM_READWRITE8(apollo_rtc_r, apollo_rtc_w, 0xffffffff )
743      AM_RANGE(0x010c00, 0x010cff) AM_READWRITE8(/*"dma1",*/apollo_dma_1_r, apollo_dma_1_w, 0xffffffff )
744      AM_RANGE(0x010d00, 0x010dff) AM_READWRITE8(/*"dma2",*/apollo_dma_2_r, apollo_dma_2_w, 0xffffffff )
745745      AM_RANGE(0x011000, 0x0110ff) AM_DEVREADWRITE8_LEGACY(APOLLO_PIC1_TAG, apollo_pic8259_master_r, apollo_pic8259_master_w, 0xffffffff)
746746      AM_RANGE(0x011100, 0x0111ff) AM_DEVREADWRITE8_LEGACY(APOLLO_PIC2_TAG, apollo_pic8259_slave_r, apollo_pic8259_slave_w, 0xffffffff)
747      AM_RANGE(0x011200, 0x0112ff) AM_READWRITE16_LEGACY(apollo_node_id_r, apollo_node_id_w, 0xffffffff)
748      AM_RANGE(0x011300, 0x0113ff) AM_READWRITE16_LEGACY(latch_page_on_parity_error_register_r, latch_page_on_parity_error_register_w, 0xffffffff )
749      AM_RANGE(0x011600, 0x0116ff) AM_READWRITE8_LEGACY(master_req_register_r, master_req_register_w, 0xffffffff)
747      AM_RANGE(0x011200, 0x0112ff) AM_READWRITE16(apollo_node_id_r, apollo_node_id_w, 0xffffffff)
748      AM_RANGE(0x011300, 0x0113ff) AM_READWRITE16(latch_page_on_parity_error_register_r, latch_page_on_parity_error_register_w, 0xffffffff )
749      AM_RANGE(0x011600, 0x0116ff) AM_READWRITE8(master_req_register_r, master_req_register_w, 0xffffffff)
750750
751      AM_RANGE(0x016400, 0x0164ff) AM_READWRITE16_LEGACY(selective_clear_locations_r, selective_clear_locations_w, 0xffffffff )
752      AM_RANGE(0x017000, 0x017fff) AM_READWRITE16_LEGACY(apollo_address_translation_map_r, apollo_address_translation_map_w, 0xffffffff )
751      AM_RANGE(0x016400, 0x0164ff) AM_READWRITE16(selective_clear_locations_r, selective_clear_locations_w, 0xffffffff )
752      AM_RANGE(0x017000, 0x017fff) AM_READWRITE16(apollo_address_translation_map_r, apollo_address_translation_map_w, 0xffffffff )
753753
754754      AM_RANGE(0x04D000, 0x04D007) AM_DEVREADWRITE16_LEGACY(APOLLO_WDC_TAG, omti8621_r, omti8621_w, 0xffffffff)
755755      AM_RANGE(0x050000, 0x050007) AM_DEVREADWRITE8_LEGACY(APOLLO_CTAPE_TAG, sc499_r, sc499_w, 0xffffffff)
756756      AM_RANGE(0x058000, 0x058007) AM_DEVREADWRITE8_LEGACY(APOLLO_ETH_TAG, threecom3c505_r, threecom3c505_w, 0xffffffff)
757      AM_RANGE(0x05f800, 0x05f807) AM_READWRITE8_LEGACY(apollo_fdc_r, apollo_fdc_w, 0xffffffff)
757      AM_RANGE(0x05f800, 0x05f807) AM_READWRITE8(apollo_fdc_r, apollo_fdc_w, 0xffffffff)
758758
759759      AM_RANGE(0x05d800, 0x05dc07) AM_DEVREADWRITE16_LEGACY(APOLLO_SCREEN_TAG, apollo_mcr_r, apollo_mcr_w, 0xffffffff)
760760      AM_RANGE(0xfa0000, 0xfdffff) AM_DEVREADWRITE16_LEGACY(APOLLO_SCREEN_TAG, apollo_mgm_r, apollo_mgm_w, 0xffffffff)
761761
762      AM_RANGE(ATBUS_IO_BASE, ATBUS_IO_END) AM_READWRITE16_LEGACY(apollo_atbus_io_r, apollo_atbus_io_w, 0xffffffff)
762      AM_RANGE(ATBUS_IO_BASE, ATBUS_IO_END) AM_READWRITE16(apollo_atbus_io_r, apollo_atbus_io_w, 0xffffffff)
763763
764764      AM_RANGE(0x080000, 0x081fff) AM_ROM /* 3C505 boot ROM  */
765765
766766      // FIXME: must match with RAM size in driver/apollo_sio.c
767767      // AM_RANGE(DN3500_RAM_BASE, DN3500_RAM_END) AM_RAM  AM_BASE_LEGACY(&messram_ptr.u32) AM_SIZE_LEGACY(&messram_size) /* 8MB RAM */
768      AM_RANGE(DN3500_RAM_BASE, DN3500_RAM_END) AM_RAM_WRITE_LEGACY(ram_with_parity_w) AM_BASE_LEGACY(&messram_ptr.u32) AM_SIZE_LEGACY(&messram_size)
768      AM_RANGE(DN3500_RAM_BASE, DN3500_RAM_END) AM_RAM_WRITE(ram_with_parity_w) AM_BASE_LEGACY(&messram_ptr.u32) AM_SIZE_LEGACY(&messram_size)
769769
770      AM_RANGE(ATBUS_MEMORY_BASE, ATBUS_MEMORY_END) AM_READWRITE_LEGACY(apollo_atbus_memory_r, apollo_atbus_memory_w)
770      AM_RANGE(ATBUS_MEMORY_BASE, ATBUS_MEMORY_END) AM_READWRITE(apollo_atbus_memory_r, apollo_atbus_memory_w)
771771
772772//      AM_RANGE(0x03020000, 0x0303ffff) Cache Tag Store (DN4500 only)
773773//      AM_RANGE(0x04000000, 0x0400ffff) Cache Tag Data (DN4500 only)
774774//      AM_RANGE(0x0e000000, 0x0fffffff) FPA address space
775775
776//      AM_RANGE(0xf8000000, 0xffffffff) AM_READWRITE_LEGACY(apollo_f8_r, apollo_f8_w)
777      AM_RANGE(0x00000000, 0xffffffff) AM_READWRITE_LEGACY(apollo_unmapped_r, apollo_unmapped_w)
776//      AM_RANGE(0xf8000000, 0xffffffff) AM_READWRITE(apollo_f8_r, apollo_f8_w)
777      AM_RANGE(0x00000000, 0xffffffff) AM_READWRITE(apollo_unmapped_r, apollo_unmapped_w)
778778ADDRESS_MAP_END
779779
780780static ADDRESS_MAP_START(dsp3500_map, AS_PROGRAM, 32, apollo_state )
781781      AM_RANGE(0x000000, 0x00ffff) AM_ROM /* boot ROM  */
782        AM_RANGE(0x000000, 0x00ffff) AM_WRITE_LEGACY(apollo_rom_w)
783      AM_RANGE(0x010000, 0x0100ff) AM_READWRITE16_LEGACY(apollo_csr_status_register_r, apollo_csr_status_register_w, 0xffffffff)
784      AM_RANGE(0x010100, 0x0101ff) AM_READWRITE16_LEGACY(apollo_csr_control_register_r, apollo_csr_control_register_w, 0xffffffff)
785      AM_RANGE(0x010200, 0x0102ff) AM_READWRITE8_LEGACY(cache_status_register_r, cache_control_register_w, 0xffffffff )
786      AM_RANGE(0x010300, 0x0103ff) AM_READWRITE8_LEGACY(task_alias_register_r , task_alias_register_w , 0xffffffff )
782        AM_RANGE(0x000000, 0x00ffff) AM_WRITE(apollo_rom_w)
783      AM_RANGE(0x010000, 0x0100ff) AM_READWRITE16(apollo_csr_status_register_r, apollo_csr_status_register_w, 0xffffffff)
784      AM_RANGE(0x010100, 0x0101ff) AM_READWRITE16(apollo_csr_control_register_r, apollo_csr_control_register_w, 0xffffffff)
785      AM_RANGE(0x010200, 0x0102ff) AM_READWRITE8(cache_status_register_r, cache_control_register_w, 0xffffffff )
786      AM_RANGE(0x010300, 0x0103ff) AM_READWRITE8(task_alias_register_r , task_alias_register_w , 0xffffffff )
787787      AM_RANGE(0x010400, 0x0104ff) AM_DEVREADWRITE8_LEGACY(APOLLO_SIO_TAG, apollo_sio_r, apollo_sio_w, 0xffffffff )
788788      AM_RANGE(0x010500, 0x0105ff) AM_DEVREADWRITE8_LEGACY(APOLLO_SIO2_TAG, apollo_sio2_r, apollo_sio2_w, 0xffffffff )
789789      AM_RANGE(0x010800, 0x0108ff) AM_DEVREADWRITE8_LEGACY(APOLLO_PTM_TAG, apollo_ptm_r, apollo_ptm_w, 0xffffffff )
790      AM_RANGE(0x010900, 0x0109ff) AM_READWRITE8_LEGACY(apollo_rtc_r, apollo_rtc_w, 0xffffffff )
791      AM_RANGE(0x010c00, 0x010cff) AM_READWRITE8_LEGACY(/*"dma1",*/apollo_dma_1_r, apollo_dma_1_w, 0xffffffff )
792      AM_RANGE(0x010d00, 0x010dff) AM_READWRITE8_LEGACY(/*"dma2",*/apollo_dma_2_r, apollo_dma_2_w, 0xffffffff )
790      AM_RANGE(0x010900, 0x0109ff) AM_READWRITE8(apollo_rtc_r, apollo_rtc_w, 0xffffffff )
791      AM_RANGE(0x010c00, 0x010cff) AM_READWRITE8(/*"dma1",*/apollo_dma_1_r, apollo_dma_1_w, 0xffffffff )
792      AM_RANGE(0x010d00, 0x010dff) AM_READWRITE8(/*"dma2",*/apollo_dma_2_r, apollo_dma_2_w, 0xffffffff )
793793      AM_RANGE(0x011000, 0x0110ff) AM_DEVREADWRITE8_LEGACY(APOLLO_PIC1_TAG, apollo_pic8259_master_r, apollo_pic8259_master_w, 0xffffffff)
794794      AM_RANGE(0x011100, 0x0111ff) AM_DEVREADWRITE8_LEGACY(APOLLO_PIC2_TAG, apollo_pic8259_slave_r, apollo_pic8259_slave_w, 0xffffffff)
795      AM_RANGE(0x011200, 0x0112ff) AM_READWRITE16_LEGACY(apollo_node_id_r, apollo_node_id_w, 0xffffffff)
796      AM_RANGE(0x011300, 0x0113ff) AM_READWRITE16_LEGACY(latch_page_on_parity_error_register_r, latch_page_on_parity_error_register_w, 0xffffffff )
797      AM_RANGE(0x011600, 0x0116ff) AM_READWRITE8_LEGACY(master_req_register_r, master_req_register_w, 0xffffffff)
795      AM_RANGE(0x011200, 0x0112ff) AM_READWRITE16(apollo_node_id_r, apollo_node_id_w, 0xffffffff)
796      AM_RANGE(0x011300, 0x0113ff) AM_READWRITE16(latch_page_on_parity_error_register_r, latch_page_on_parity_error_register_w, 0xffffffff )
797      AM_RANGE(0x011600, 0x0116ff) AM_READWRITE8(master_req_register_r, master_req_register_w, 0xffffffff)
798798
799      AM_RANGE(0x016400, 0x0164ff) AM_READWRITE16_LEGACY(selective_clear_locations_r, selective_clear_locations_w, 0xffffffff )
800      AM_RANGE(0x017000, 0x017fff) AM_READWRITE16_LEGACY(apollo_address_translation_map_r, apollo_address_translation_map_w, 0xffffffff )
799      AM_RANGE(0x016400, 0x0164ff) AM_READWRITE16(selective_clear_locations_r, selective_clear_locations_w, 0xffffffff )
800      AM_RANGE(0x017000, 0x017fff) AM_READWRITE16(apollo_address_translation_map_r, apollo_address_translation_map_w, 0xffffffff )
801801
802802      AM_RANGE(0x04D000, 0x04D007) AM_DEVREADWRITE16_LEGACY(APOLLO_WDC_TAG, omti8621_r, omti8621_w, 0xffffffff)
803803      AM_RANGE(0x050000, 0x050007) AM_DEVREADWRITE8_LEGACY(APOLLO_CTAPE_TAG, sc499_r, sc499_w, 0xffffffff)
804804      AM_RANGE(0x058000, 0x058007) AM_DEVREADWRITE8_LEGACY(APOLLO_ETH_TAG, threecom3c505_r, threecom3c505_w, 0xffffffff)
805      AM_RANGE(0x05f800, 0x05f807) AM_READWRITE8_LEGACY(apollo_fdc_r, apollo_fdc_w, 0xffffffff)
805      AM_RANGE(0x05f800, 0x05f807) AM_READWRITE8(apollo_fdc_r, apollo_fdc_w, 0xffffffff)
806806
807807//      AM_RANGE(0x05d800, 0x05dc07) AM_DEVREADWRITE16_LEGACY(APOLLO_SCREEN_TAG, apollo_mcr_r, apollo_mcr_w, 0xffffffff)
808808//      AM_RANGE(0xfa0000, 0xfdffff) AM_DEVREADWRITE16_LEGACY(APOLLO_SCREEN_TAG, apollo_mgm_r, apollo_mgm_w, 0xffffffff)
809809
810      AM_RANGE(ATBUS_IO_BASE, ATBUS_IO_END) AM_READWRITE16_LEGACY(apollo_atbus_io_r, apollo_atbus_io_w, 0xffffffff)
810      AM_RANGE(ATBUS_IO_BASE, ATBUS_IO_END) AM_READWRITE16(apollo_atbus_io_r, apollo_atbus_io_w, 0xffffffff)
811811
812812      AM_RANGE(0x080000, 0x081fff) AM_ROM /* 3C505 boot ROM  */
813813
814814      // FIXME: must match with RAM size in driver/apollo_sio.c
815815      // AM_RANGE(DN3500_RAM_BASE, DN3500_RAM_END) AM_RAM  AM_BASE_LEGACY(&messram_ptr.u32) AM_SIZE_LEGACY(&messram_size) /* 8MB RAM */
816      AM_RANGE(DN3500_RAM_BASE, DN3500_RAM_END) AM_RAM_WRITE_LEGACY(ram_with_parity_w) AM_BASE_LEGACY(&messram_ptr.u32) AM_SIZE_LEGACY(&messram_size)
816      AM_RANGE(DN3500_RAM_BASE, DN3500_RAM_END) AM_RAM_WRITE(ram_with_parity_w) AM_BASE_LEGACY(&messram_ptr.u32) AM_SIZE_LEGACY(&messram_size)
817817
818      AM_RANGE(ATBUS_MEMORY_BASE, ATBUS_MEMORY_END) AM_READWRITE_LEGACY(apollo_atbus_memory_r, apollo_atbus_memory_w)
818      AM_RANGE(ATBUS_MEMORY_BASE, ATBUS_MEMORY_END) AM_READWRITE(apollo_atbus_memory_r, apollo_atbus_memory_w)
819819
820//      AM_RANGE(0xf8000000, 0xffffffff) AM_READWRITE_LEGACY(apollo_f8_r, apollo_f8_w)
821      AM_RANGE(0x00000000, 0xffffffff) AM_READWRITE_LEGACY(apollo_unmapped_r, apollo_unmapped_w)
820//      AM_RANGE(0xf8000000, 0xffffffff) AM_READWRITE(apollo_f8_r, apollo_f8_w)
821      AM_RANGE(0x00000000, 0xffffffff) AM_READWRITE(apollo_unmapped_r, apollo_unmapped_w)
822822ADDRESS_MAP_END
823823
824824static ADDRESS_MAP_START(dn3000_map, AS_PROGRAM, 32, apollo_state )
825825      AM_RANGE(0x000000, 0x007fff) AM_ROM /* boot ROM  */
826      AM_RANGE(0x000000, 0x007fff) AM_WRITE_LEGACY(apollo_rom_w)
827      AM_RANGE(0x008000, 0x0080ff) AM_READWRITE16_LEGACY(apollo_csr_status_register_r, apollo_csr_status_register_w, 0xffffffff)
828      AM_RANGE(0x008100, 0x0081ff) AM_READWRITE16_LEGACY(apollo_csr_control_register_r, apollo_csr_control_register_w, 0xffffffff)
826      AM_RANGE(0x000000, 0x007fff) AM_WRITE(apollo_rom_w)
827      AM_RANGE(0x008000, 0x0080ff) AM_READWRITE16(apollo_csr_status_register_r, apollo_csr_status_register_w, 0xffffffff)
828      AM_RANGE(0x008100, 0x0081ff) AM_READWRITE16(apollo_csr_control_register_r, apollo_csr_control_register_w, 0xffffffff)
829829      AM_RANGE(0x008400, 0x0087ff) AM_DEVREADWRITE8_LEGACY(APOLLO_SIO_TAG, apollo_sio_r, apollo_sio_w, 0xffffffff )
830830      AM_RANGE(0x008800, 0x0088ff) AM_DEVREADWRITE8_LEGACY(APOLLO_PTM_TAG, apollo_ptm_r, apollo_ptm_w, 0xffffffff )
831      AM_RANGE(0x008900, 0x0089ff) AM_READWRITE8_LEGACY(apollo_rtc_r, apollo_rtc_w, 0xffffffff )
831      AM_RANGE(0x008900, 0x0089ff) AM_READWRITE8(apollo_rtc_r, apollo_rtc_w, 0xffffffff )
832832
833      AM_RANGE(0x009000, 0x0090ff) AM_READWRITE8_LEGACY(/*"dma1",*/apollo_dma_1_r, apollo_dma_1_w, 0xffffffff )
834      AM_RANGE(0x009100, 0x0091ff) AM_READWRITE8_LEGACY(/*"dma2",*/apollo_dma_2_r, apollo_dma_2_w, 0xffffffff )
835      AM_RANGE(0x009200, 0x0092ff) AM_READWRITE8_LEGACY(apollo_dma_page_register_r, apollo_dma_page_register_w, 0xffffffff )
836      AM_RANGE(0x009300, 0x0093ff) AM_READWRITE16_LEGACY(latch_page_on_parity_error_register_r, latch_page_on_parity_error_register_w, 0xffffffff )
833      AM_RANGE(0x009000, 0x0090ff) AM_READWRITE8(/*"dma1",*/apollo_dma_1_r, apollo_dma_1_w, 0xffffffff )
834      AM_RANGE(0x009100, 0x0091ff) AM_READWRITE8(/*"dma2",*/apollo_dma_2_r, apollo_dma_2_w, 0xffffffff )
835      AM_RANGE(0x009200, 0x0092ff) AM_READWRITE8(apollo_dma_page_register_r, apollo_dma_page_register_w, 0xffffffff )
836      AM_RANGE(0x009300, 0x0093ff) AM_READWRITE16(latch_page_on_parity_error_register_r, latch_page_on_parity_error_register_w, 0xffffffff )
837837      AM_RANGE(0x009400, 0x0094ff) AM_DEVREADWRITE8_LEGACY(APOLLO_PIC1_TAG, apollo_pic8259_master_r, apollo_pic8259_master_w, 0xffffffff)
838838      AM_RANGE(0x009500, 0x0095ff) AM_DEVREADWRITE8_LEGACY(APOLLO_PIC2_TAG, apollo_pic8259_slave_r, apollo_pic8259_slave_w, 0xffffffff)
839      AM_RANGE(0x009600, 0x0096ff) AM_READWRITE16_LEGACY(apollo_node_id_r, apollo_node_id_w, 0xffffffff)
839      AM_RANGE(0x009600, 0x0096ff) AM_READWRITE16(apollo_node_id_r, apollo_node_id_w, 0xffffffff)
840840
841841      AM_RANGE(0x04D000, 0x04D007) AM_DEVREADWRITE16_LEGACY(APOLLO_WDC_TAG, omti8621_r, omti8621_w, 0xffffffff)
842842      AM_RANGE(0x050000, 0x050007) AM_DEVREADWRITE8_LEGACY(APOLLO_CTAPE_TAG, sc499_r, sc499_w, 0xffffffff)
843843      AM_RANGE(0x058000, 0x058007) AM_DEVREADWRITE8_LEGACY(APOLLO_ETH_TAG, threecom3c505_r, threecom3c505_w, 0xffffffff)
844      AM_RANGE(0x05f800, 0x05f807) AM_READWRITE8_LEGACY(apollo_fdc_r, apollo_fdc_w, 0xffffffff)
844      AM_RANGE(0x05f800, 0x05f807) AM_READWRITE8(apollo_fdc_r, apollo_fdc_w, 0xffffffff)
845845
846846      AM_RANGE(0x05d800, 0x05dc07) AM_DEVREADWRITE16_LEGACY(APOLLO_SCREEN_TAG, apollo_mcr_r, apollo_mcr_w, 0xffffffff)
847847      AM_RANGE(0xfa0000, 0xfdffff) AM_DEVREADWRITE16_LEGACY(APOLLO_SCREEN_TAG, apollo_mgm_r, apollo_mgm_w, 0xffffffff)
848848
849      AM_RANGE(ATBUS_IO_BASE, ATBUS_IO_END) AM_READWRITE16_LEGACY(apollo_atbus_io_r, apollo_atbus_io_w, 0xffffffff)
849      AM_RANGE(ATBUS_IO_BASE, ATBUS_IO_END) AM_READWRITE16(apollo_atbus_io_r, apollo_atbus_io_w, 0xffffffff)
850850
851851      AM_RANGE(0x080000, 0x081fff) AM_ROM /* 3C505 boot ROM  */
852852
853853      // FIXME: must match with RAM size in driver/apollo_sio.c
854854      // AM_RANGE(DN3000_RAM_BASE, DN3000_RAM_END) AM_RAM  AM_BASE_LEGACY(&messram_ptr.u32) AM_SIZE_LEGACY(&messram_size) /* 8MB RAM */
855      AM_RANGE(DN3000_RAM_BASE, DN3000_RAM_END) AM_RAM_WRITE_LEGACY(ram_with_parity_w) AM_BASE_LEGACY(&messram_ptr.u32) AM_SIZE_LEGACY(&messram_size)
855      AM_RANGE(DN3000_RAM_BASE, DN3000_RAM_END) AM_RAM_WRITE(ram_with_parity_w) AM_BASE_LEGACY(&messram_ptr.u32) AM_SIZE_LEGACY(&messram_size)
856856
857      AM_RANGE(ATBUS_MEMORY_BASE, ATBUS_MEMORY_END) AM_READWRITE_LEGACY(apollo_atbus_memory_r, apollo_atbus_memory_w)
857      AM_RANGE(ATBUS_MEMORY_BASE, ATBUS_MEMORY_END) AM_READWRITE(apollo_atbus_memory_r, apollo_atbus_memory_w)
858858
859      AM_RANGE(0x000000, 0xffffff) AM_READWRITE_LEGACY(apollo_unmapped_r, apollo_unmapped_w)
859      AM_RANGE(0x000000, 0xffffff) AM_READWRITE(apollo_unmapped_r, apollo_unmapped_w)
860860ADDRESS_MAP_END
861861
862862static ADDRESS_MAP_START(dsp3000_map, AS_PROGRAM, 32, apollo_state )
863863      AM_RANGE(0x000000, 0x007fff) AM_ROM /* boot ROM  */
864      AM_RANGE(0x000000, 0x007fff) AM_WRITE_LEGACY(apollo_rom_w)
865      AM_RANGE(0x008000, 0x0080ff) AM_READWRITE16_LEGACY(apollo_csr_status_register_r, apollo_csr_status_register_w, 0xffffffff)
866      AM_RANGE(0x008100, 0x0081ff) AM_READWRITE16_LEGACY(apollo_csr_control_register_r, apollo_csr_control_register_w, 0xffffffff)
864      AM_RANGE(0x000000, 0x007fff) AM_WRITE(apollo_rom_w)
865      AM_RANGE(0x008000, 0x0080ff) AM_READWRITE16(apollo_csr_status_register_r, apollo_csr_status_register_w, 0xffffffff)
866      AM_RANGE(0x008100, 0x0081ff) AM_READWRITE16(apollo_csr_control_register_r, apollo_csr_control_register_w, 0xffffffff)
867867      AM_RANGE(0x008400, 0x0087ff) AM_DEVREADWRITE8_LEGACY(APOLLO_SIO_TAG, apollo_sio_r, apollo_sio_w, 0xffffffff )
868868      AM_RANGE(0x008800, 0x0088ff) AM_DEVREADWRITE8_LEGACY(APOLLO_PTM_TAG, apollo_ptm_r, apollo_ptm_w, 0xffffffff )
869      AM_RANGE(0x008900, 0x0089ff) AM_READWRITE8_LEGACY(apollo_rtc_r, apollo_rtc_w, 0xffffffff )
869      AM_RANGE(0x008900, 0x0089ff) AM_READWRITE8(apollo_rtc_r, apollo_rtc_w, 0xffffffff )
870870
871      AM_RANGE(0x009000, 0x0090ff) AM_READWRITE8_LEGACY(/*"dma1",*/apollo_dma_1_r, apollo_dma_1_w, 0xffffffff )
872      AM_RANGE(0x009100, 0x0091ff) AM_READWRITE8_LEGACY(/*"dma2",*/apollo_dma_2_r, apollo_dma_2_w, 0xffffffff )
873      AM_RANGE(0x009200, 0x0092ff) AM_READWRITE8_LEGACY(apollo_dma_page_register_r, apollo_dma_page_register_w, 0xffffffff )
874      AM_RANGE(0x009300, 0x0093ff) AM_READWRITE16_LEGACY(latch_page_on_parity_error_register_r, latch_page_on_parity_error_register_w, 0xffffffff )
871      AM_RANGE(0x009000, 0x0090ff) AM_READWRITE8(/*"dma1",*/apollo_dma_1_r, apollo_dma_1_w, 0xffffffff )
872      AM_RANGE(0x009100, 0x0091ff) AM_READWRITE8(/*"dma2",*/apollo_dma_2_r, apollo_dma_2_w, 0xffffffff )
873      AM_RANGE(0x009200, 0x0092ff) AM_READWRITE8(apollo_dma_page_register_r, apollo_dma_page_register_w, 0xffffffff )
874      AM_RANGE(0x009300, 0x0093ff) AM_READWRITE16(latch_page_on_parity_error_register_r, latch_page_on_parity_error_register_w, 0xffffffff )
875875      AM_RANGE(0x009400, 0x0094ff) AM_DEVREADWRITE8_LEGACY(APOLLO_PIC1_TAG, apollo_pic8259_master_r, apollo_pic8259_master_w, 0xffffffff)
876876      AM_RANGE(0x009500, 0x0095ff) AM_DEVREADWRITE8_LEGACY(APOLLO_PIC2_TAG, apollo_pic8259_slave_r, apollo_pic8259_slave_w, 0xffffffff)
877      AM_RANGE(0x009600, 0x0096ff) AM_READWRITE16_LEGACY(apollo_node_id_r, apollo_node_id_w, 0xffffffff)
877      AM_RANGE(0x009600, 0x0096ff) AM_READWRITE16(apollo_node_id_r, apollo_node_id_w, 0xffffffff)
878878
879879      AM_RANGE(0x04D000, 0x04D007) AM_DEVREADWRITE16_LEGACY(APOLLO_WDC_TAG, omti8621_r, omti8621_w, 0xffffffff)
880880      AM_RANGE(0x050000, 0x050007) AM_DEVREADWRITE8_LEGACY(APOLLO_CTAPE_TAG, sc499_r, sc499_w, 0xffffffff)
881881      AM_RANGE(0x058000, 0x058007) AM_DEVREADWRITE8_LEGACY(APOLLO_ETH_TAG, threecom3c505_r, threecom3c505_w, 0xffffffff)
882      AM_RANGE(0x05f800, 0x05f807) AM_READWRITE8_LEGACY(apollo_fdc_r, apollo_fdc_w, 0xffffffff)
882      AM_RANGE(0x05f800, 0x05f807) AM_READWRITE8(apollo_fdc_r, apollo_fdc_w, 0xffffffff)
883883
884884//      AM_RANGE(0x05d800, 0x05dc07) AM_DEVREADWRITE16_LEGACY(APOLLO_SCREEN_TAG, apollo_mcr_r, apollo_mcr_w, 0xffffffff)
885885//      AM_RANGE(0xfa0000, 0xfdffff) AM_DEVREADWRITE16_LEGACY(APOLLO_SCREEN_TAG, apollo_mgm_r, apollo_mgm_w, 0xffffffff)
886886
887      AM_RANGE(ATBUS_IO_BASE, ATBUS_IO_END) AM_READWRITE16_LEGACY(apollo_atbus_io_r, apollo_atbus_io_w, 0xffffffff)
887      AM_RANGE(ATBUS_IO_BASE, ATBUS_IO_END) AM_READWRITE16(apollo_atbus_io_r, apollo_atbus_io_w, 0xffffffff)
888888
889889      AM_RANGE(0x080000, 0x081fff) AM_ROM /* 3C505 boot ROM  */
890890
891891      // FIXME: must match with RAM size in driver/apollo_sio.c
892892      // AM_RANGE(DN3000_RAM_BASE, DN3000_RAM_END) AM_RAM  AM_BASE_LEGACY(&messram_ptr.u32) AM_SIZE_LEGACY(&messram_size) /* 8MB RAM */
893      AM_RANGE(DN3000_RAM_BASE, DN3000_RAM_END) AM_RAM_WRITE_LEGACY(ram_with_parity_w) AM_BASE_LEGACY(&messram_ptr.u32) AM_SIZE_LEGACY(&messram_size)
893      AM_RANGE(DN3000_RAM_BASE, DN3000_RAM_END) AM_RAM_WRITE(ram_with_parity_w) AM_BASE_LEGACY(&messram_ptr.u32) AM_SIZE_LEGACY(&messram_size)
894894
895      AM_RANGE(ATBUS_MEMORY_BASE, ATBUS_MEMORY_END) AM_READWRITE_LEGACY(apollo_atbus_memory_r, apollo_atbus_memory_w)
895      AM_RANGE(ATBUS_MEMORY_BASE, ATBUS_MEMORY_END) AM_READWRITE(apollo_atbus_memory_r, apollo_atbus_memory_w)
896896
897      AM_RANGE(0x000000, 0xffffff) AM_READWRITE_LEGACY(apollo_unmapped_r, apollo_unmapped_w)
897      AM_RANGE(0x000000, 0xffffff) AM_READWRITE(apollo_unmapped_r, apollo_unmapped_w)
898898ADDRESS_MAP_END
899899
900900
901901static ADDRESS_MAP_START(dn5500_map, AS_PROGRAM, 32, apollo_state )
902902      AM_RANGE(0x000000, 0x00ffff) AM_ROM /* boot ROM  */
903        AM_RANGE(0x000000, 0x00ffff) AM_WRITE_LEGACY(apollo_rom_w)
904      AM_RANGE(0x010000, 0x0100ff) AM_READWRITE16_LEGACY(apollo_csr_status_register_r, apollo_csr_status_register_w, 0xffffffff)
905      AM_RANGE(0x010100, 0x0101ff) AM_READWRITE16_LEGACY(apollo_csr_control_register_r, apollo_csr_control_register_w, 0xffffffff)
906      AM_RANGE(0x010200, 0x0102ff) AM_READWRITE8_LEGACY(cache_status_register_r, cache_control_register_w, 0xffffffff )
907      AM_RANGE(0x010300, 0x0103ff) AM_READWRITE8_LEGACY(task_alias_register_r , task_alias_register_w , 0xffffffff )
903        AM_RANGE(0x000000, 0x00ffff) AM_WRITE(apollo_rom_w)
904      AM_RANGE(0x010000, 0x0100ff) AM_READWRITE16(apollo_csr_status_register_r, apollo_csr_status_register_w, 0xffffffff)
905      AM_RANGE(0x010100, 0x0101ff) AM_READWRITE16(apollo_csr_control_register_r, apollo_csr_control_register_w, 0xffffffff)
906      AM_RANGE(0x010200, 0x0102ff) AM_READWRITE8(cache_status_register_r, cache_control_register_w, 0xffffffff )
907      AM_RANGE(0x010300, 0x0103ff) AM_READWRITE8(task_alias_register_r , task_alias_register_w , 0xffffffff )
908908      AM_RANGE(0x010400, 0x0104ff) AM_DEVREADWRITE8_LEGACY(APOLLO_SIO_TAG, apollo_sio_r, apollo_sio_w, 0xffffffff )
909909      AM_RANGE(0x010500, 0x0105ff) AM_DEVREADWRITE8_LEGACY(APOLLO_SIO2_TAG, apollo_sio2_r, apollo_sio2_w, 0xffffffff )
910910      AM_RANGE(0x010800, 0x0108ff) AM_DEVREADWRITE8_LEGACY(APOLLO_PTM_TAG, apollo_ptm_r, apollo_ptm_w, 0xffffffff )
911      AM_RANGE(0x010900, 0x0109ff) AM_READWRITE8_LEGACY(apollo_rtc_r, apollo_rtc_w, 0xffffffff )
912      AM_RANGE(0x010c00, 0x010cff) AM_READWRITE8_LEGACY(/*"dma1",*/apollo_dma_1_r, apollo_dma_1_w, 0xffffffff )
913      AM_RANGE(0x010d00, 0x010dff) AM_READWRITE8_LEGACY(/*"dma2",*/apollo_dma_2_r, apollo_dma_2_w, 0xffffffff )
911      AM_RANGE(0x010900, 0x0109ff) AM_READWRITE8(apollo_rtc_r, apollo_rtc_w, 0xffffffff )
912      AM_RANGE(0x010c00, 0x010cff) AM_READWRITE8(/*"dma1",*/apollo_dma_1_r, apollo_dma_1_w, 0xffffffff )
913      AM_RANGE(0x010d00, 0x010dff) AM_READWRITE8(/*"dma2",*/apollo_dma_2_r, apollo_dma_2_w, 0xffffffff )
914914      AM_RANGE(0x011000, 0x0110ff) AM_DEVREADWRITE8_LEGACY(APOLLO_PIC1_TAG, apollo_pic8259_master_r, apollo_pic8259_master_w, 0xffffffff)
915915      AM_RANGE(0x011100, 0x0111ff) AM_DEVREADWRITE8_LEGACY(APOLLO_PIC2_TAG, apollo_pic8259_slave_r, apollo_pic8259_slave_w, 0xffffffff)
916      AM_RANGE(0x011200, 0x0112ff) AM_READWRITE16_LEGACY(apollo_node_id_r, apollo_node_id_w, 0xffffffff)
917      AM_RANGE(0x011300, 0x0113ff) AM_READWRITE16_LEGACY(latch_page_on_parity_error_register_r, latch_page_on_parity_error_register_w, 0xffffffff )
918      AM_RANGE(0x011400, 0x0114ff) AM_READWRITE8_LEGACY(dn5500_memory_present_register_r, dn5500_memory_present_register_w, 0xffffffff )
919      AM_RANGE(0x011500, 0x0115ff) AM_READWRITE8_LEGACY(dn5500_11500_r, dn5500_11500_w, 0xffffffff )
920      AM_RANGE(0x011600, 0x0116ff) AM_READWRITE8_LEGACY(master_req_register_r, master_req_register_w, 0xffffffff)
916      AM_RANGE(0x011200, 0x0112ff) AM_READWRITE16(apollo_node_id_r, apollo_node_id_w, 0xffffffff)
917      AM_RANGE(0x011300, 0x0113ff) AM_READWRITE16(latch_page_on_parity_error_register_r, latch_page_on_parity_error_register_w, 0xffffffff )
918      AM_RANGE(0x011400, 0x0114ff) AM_READWRITE8(dn5500_memory_present_register_r, dn5500_memory_present_register_w, 0xffffffff )
919      AM_RANGE(0x011500, 0x0115ff) AM_READWRITE8(dn5500_11500_r, dn5500_11500_w, 0xffffffff )
920      AM_RANGE(0x011600, 0x0116ff) AM_READWRITE8(master_req_register_r, master_req_register_w, 0xffffffff)
921921
922      AM_RANGE(0x016400, 0x0164ff) AM_READWRITE16_LEGACY(selective_clear_locations_r, selective_clear_locations_w, 0xffffffff )
923      AM_RANGE(0x017000, 0x017fff) AM_READWRITE16_LEGACY(apollo_address_translation_map_r, apollo_address_translation_map_w, 0xffffffff )
922      AM_RANGE(0x016400, 0x0164ff) AM_READWRITE16(selective_clear_locations_r, selective_clear_locations_w, 0xffffffff )
923      AM_RANGE(0x017000, 0x017fff) AM_READWRITE16(apollo_address_translation_map_r, apollo_address_translation_map_w, 0xffffffff )
924924
925925      AM_RANGE(0x04D000, 0x04D007) AM_DEVREADWRITE16_LEGACY(APOLLO_WDC_TAG, omti8621_r, omti8621_w, 0xffffffff)
926926      AM_RANGE(0x050000, 0x050007) AM_DEVREADWRITE8_LEGACY(APOLLO_CTAPE_TAG, sc499_r, sc499_w, 0xffffffff)
927927      AM_RANGE(0x058000, 0x058007) AM_DEVREADWRITE8_LEGACY(APOLLO_ETH_TAG, threecom3c505_r, threecom3c505_w, 0xffffffff)
928      AM_RANGE(0x05f800, 0x05f807) AM_READWRITE8_LEGACY(apollo_fdc_r, apollo_fdc_w, 0xffffffff)
928      AM_RANGE(0x05f800, 0x05f807) AM_READWRITE8(apollo_fdc_r, apollo_fdc_w, 0xffffffff)
929929
930930      AM_RANGE(0x05d800, 0x05dc07) AM_DEVREADWRITE16_LEGACY(APOLLO_SCREEN_TAG, apollo_mcr_r, apollo_mcr_w, 0xffffffff)
931931      AM_RANGE(0xfa0000, 0xfdffff) AM_DEVREADWRITE16_LEGACY(APOLLO_SCREEN_TAG, apollo_mgm_r, apollo_mgm_w, 0xffffffff)
932932
933      AM_RANGE(ATBUS_IO_BASE, ATBUS_IO_END) AM_READWRITE16_LEGACY(apollo_atbus_io_r, apollo_atbus_io_w, 0xffffffff)
933      AM_RANGE(ATBUS_IO_BASE, ATBUS_IO_END) AM_READWRITE16(apollo_atbus_io_r, apollo_atbus_io_w, 0xffffffff)
934934
935935      AM_RANGE(0x080000, 0x081fff) AM_ROM /* 3C505 boot ROM  */
936936
937937      // FIXME: must match with RAM size in driver/apollo_sio.c
938938      // AM_RANGE(DN3500_RAM_BASE, DN3500_RAM_END) AM_RAM  AM_BASE_LEGACY(&messram_ptr.u32) AM_SIZE_LEGACY(&messram_size) /* 8MB RAM */
939      AM_RANGE(DN5500_RAM_BASE, DN5500_RAM_END) AM_RAM_WRITE_LEGACY(ram_with_parity_w) AM_BASE_LEGACY(&messram_ptr.u32) AM_SIZE_LEGACY(&messram_size)
939      AM_RANGE(DN5500_RAM_BASE, DN5500_RAM_END) AM_RAM_WRITE(ram_with_parity_w) AM_BASE_LEGACY(&messram_ptr.u32) AM_SIZE_LEGACY(&messram_size)
940940
941      AM_RANGE(ATBUS_MEMORY_BASE, ATBUS_MEMORY_END) AM_READWRITE_LEGACY(apollo_atbus_memory_r, apollo_atbus_memory_w)
941      AM_RANGE(ATBUS_MEMORY_BASE, ATBUS_MEMORY_END) AM_READWRITE(apollo_atbus_memory_r, apollo_atbus_memory_w)
942942
943943//      AM_RANGE(0x03020000, 0x0303ffff) Cache Tag Store (DN4500 only)
944944//      AM_RANGE(0x04000000, 0x0400ffff) Cache Tag Data (DN4500 only)
945      AM_RANGE(0x07000000, 0x0700FFFF) AM_READWRITE8_LEGACY(dn5500_io_protection_map_r, dn5500_io_protection_map_w, 0xffffffff )
945      AM_RANGE(0x07000000, 0x0700FFFF) AM_READWRITE8(dn5500_io_protection_map_r, dn5500_io_protection_map_w, 0xffffffff )
946946//      AM_RANGE(0x0e000000, 0x0fffffff) FPA address space
947947
948//      AM_RANGE(0xf8000000, 0xffffffff) AM_READWRITE_LEGACY(apollo_f8_r, apollo_f8_w)
949      AM_RANGE(0x00000000, 0xffffffff) AM_READWRITE_LEGACY(apollo_unmapped_r, apollo_unmapped_w)
948//      AM_RANGE(0xf8000000, 0xffffffff) AM_READWRITE(apollo_f8_r, apollo_f8_w)
949      AM_RANGE(0x00000000, 0xffffffff) AM_READWRITE(apollo_unmapped_r, apollo_unmapped_w)
950950ADDRESS_MAP_END
951951
952952
953953static ADDRESS_MAP_START(dsp5500_map, AS_PROGRAM, 32, apollo_state )
954954      AM_RANGE(0x000000, 0x00ffff) AM_ROM /* boot ROM  */
955        AM_RANGE(0x000000, 0x00ffff) AM_WRITE_LEGACY(apollo_rom_w)
956      AM_RANGE(0x010000, 0x0100ff) AM_READWRITE16_LEGACY(apollo_csr_status_register_r, apollo_csr_status_register_w, 0xffffffff)
957      AM_RANGE(0x010100, 0x0101ff) AM_READWRITE16_LEGACY(apollo_csr_control_register_r, apollo_csr_control_register_w, 0xffffffff)
958      AM_RANGE(0x010200, 0x0102ff) AM_READWRITE8_LEGACY(cache_status_register_r, cache_control_register_w, 0xffffffff )
959      AM_RANGE(0x010300, 0x0103ff) AM_READWRITE8_LEGACY(task_alias_register_r , task_alias_register_w , 0xffffffff )
955        AM_RANGE(0x000000, 0x00ffff) AM_WRITE(apollo_rom_w)
956      AM_RANGE(0x010000, 0x0100ff) AM_READWRITE16(apollo_csr_status_register_r, apollo_csr_status_register_w, 0xffffffff)
957      AM_RANGE(0x010100, 0x0101ff) AM_READWRITE16(apollo_csr_control_register_r, apollo_csr_control_register_w, 0xffffffff)
958      AM_RANGE(0x010200, 0x0102ff) AM_READWRITE8(cache_status_register_r, cache_control_register_w, 0xffffffff )
959      AM_RANGE(0x010300, 0x0103ff) AM_READWRITE8(task_alias_register_r , task_alias_register_w , 0xffffffff )
960960      AM_RANGE(0x010400, 0x0104ff) AM_DEVREADWRITE8_LEGACY(APOLLO_SIO_TAG, apollo_sio_r, apollo_sio_w, 0xffffffff )
961961      AM_RANGE(0x010500, 0x0105ff) AM_DEVREADWRITE8_LEGACY(APOLLO_SIO2_TAG, apollo_sio2_r, apollo_sio2_w, 0xffffffff )
962962      AM_RANGE(0x010800, 0x0108ff) AM_DEVREADWRITE8_LEGACY(APOLLO_PTM_TAG, apollo_ptm_r, apollo_ptm_w, 0xffffffff )
963      AM_RANGE(0x010900, 0x0109ff) AM_READWRITE8_LEGACY(apollo_rtc_r, apollo_rtc_w, 0xffffffff )
964      AM_RANGE(0x010c00, 0x010cff) AM_READWRITE8_LEGACY(/*"dma1",*/apollo_dma_1_r, apollo_dma_1_w, 0xffffffff )
965      AM_RANGE(0x010d00, 0x010dff) AM_READWRITE8_LEGACY(/*"dma2",*/apollo_dma_2_r, apollo_dma_2_w, 0xffffffff )
963      AM_RANGE(0x010900, 0x0109ff) AM_READWRITE8(apollo_rtc_r, apollo_rtc_w, 0xffffffff )
964      AM_RANGE(0x010c00, 0x010cff) AM_READWRITE8(/*"dma1",*/apollo_dma_1_r, apollo_dma_1_w, 0xffffffff )
965      AM_RANGE(0x010d00, 0x010dff) AM_READWRITE8(/*"dma2",*/apollo_dma_2_r, apollo_dma_2_w, 0xffffffff )
966966      AM_RANGE(0x011000, 0x0110ff) AM_DEVREADWRITE8_LEGACY(APOLLO_PIC1_TAG, apollo_pic8259_master_r, apollo_pic8259_master_w, 0xffffffff)
967967      AM_RANGE(0x011100, 0x0111ff) AM_DEVREADWRITE8_LEGACY(APOLLO_PIC2_TAG, apollo_pic8259_slave_r, apollo_pic8259_slave_w, 0xffffffff)
968      AM_RANGE(0x011200, 0x0112ff) AM_READWRITE16_LEGACY(apollo_node_id_r, apollo_node_id_w, 0xffffffff)
969      AM_RANGE(0x011300, 0x0113ff) AM_READWRITE16_LEGACY(latch_page_on_parity_error_register_r, latch_page_on_parity_error_register_w, 0xffffffff )
970      AM_RANGE(0x011400, 0x0114ff) AM_READWRITE8_LEGACY(dn5500_memory_present_register_r, dn5500_memory_present_register_w, 0xffffffff )
971      AM_RANGE(0x011500, 0x0115ff) AM_READWRITE8_LEGACY(dn5500_11500_r, dn5500_11500_w, 0xffffffff )
972      AM_RANGE(0x011600, 0x0116ff) AM_READWRITE8_LEGACY(master_req_register_r, master_req_register_w, 0xffffffff)
968      AM_RANGE(0x011200, 0x0112ff) AM_READWRITE16(apollo_node_id_r, apollo_node_id_w, 0xffffffff)
969      AM_RANGE(0x011300, 0x0113ff) AM_READWRITE16(latch_page_on_parity_error_register_r, latch_page_on_parity_error_register_w, 0xffffffff )
970      AM_RANGE(0x011400, 0x0114ff) AM_READWRITE8(dn5500_memory_present_register_r, dn5500_memory_present_register_w, 0xffffffff )
971      AM_RANGE(0x011500, 0x0115ff) AM_READWRITE8(dn5500_11500_r, dn5500_11500_w, 0xffffffff )
972      AM_RANGE(0x011600, 0x0116ff) AM_READWRITE8(master_req_register_r, master_req_register_w, 0xffffffff)
973973
974      AM_RANGE(0x016400, 0x0164ff) AM_READWRITE16_LEGACY(selective_clear_locations_r, selective_clear_locations_w, 0xffffffff )
975      AM_RANGE(0x017000, 0x017fff) AM_READWRITE16_LEGACY(apollo_address_translation_map_r, apollo_address_translation_map_w, 0xffffffff )
974      AM_RANGE(0x016400, 0x0164ff) AM_READWRITE16(selective_clear_locations_r, selective_clear_locations_w, 0xffffffff )
975      AM_RANGE(0x017000, 0x017fff) AM_READWRITE16(apollo_address_translation_map_r, apollo_address_translation_map_w, 0xffffffff )
976976
977977      AM_RANGE(0x04D000, 0x04D007) AM_DEVREADWRITE16_LEGACY(APOLLO_WDC_TAG, omti8621_r, omti8621_w, 0xffffffff)
978978      AM_RANGE(0x050000, 0x050007) AM_DEVREADWRITE8_LEGACY(APOLLO_CTAPE_TAG, sc499_r, sc499_w, 0xffffffff)
979979      AM_RANGE(0x058000, 0x058007) AM_DEVREADWRITE8_LEGACY(APOLLO_ETH_TAG, threecom3c505_r, threecom3c505_w, 0xffffffff)
980      AM_RANGE(0x05f800, 0x05f807) AM_READWRITE8_LEGACY(apollo_fdc_r, apollo_fdc_w, 0xffffffff)
980      AM_RANGE(0x05f800, 0x05f807) AM_READWRITE8(apollo_fdc_r, apollo_fdc_w, 0xffffffff)
981981
982982//      AM_RANGE(0x05d800, 0x05dc07) AM_DEVREADWRITE16_LEGACY(APOLLO_SCREEN_TAG, apollo_mcr_r, apollo_mcr_w, 0xffffffff)
983983//      AM_RANGE(0xfa0000, 0xfdffff) AM_DEVREADWRITE16_LEGACY(APOLLO_SCREEN_TAG, apollo_mgm_r, apollo_mgm_w, 0xffffffff)
984984
985      AM_RANGE(ATBUS_IO_BASE, ATBUS_IO_END) AM_READWRITE16_LEGACY(apollo_atbus_io_r, apollo_atbus_io_w, 0xffffffff)
985      AM_RANGE(ATBUS_IO_BASE, ATBUS_IO_END) AM_READWRITE16(apollo_atbus_io_r, apollo_atbus_io_w, 0xffffffff)
986986
987987      AM_RANGE(0x080000, 0x081fff) AM_ROM /* 3C505 boot ROM  */
988988
989989      // FIXME: must match with RAM size in driver/apollo_sio.c
990      AM_RANGE(DN5500_RAM_BASE, DN5500_RAM_END) AM_RAM_WRITE_LEGACY(ram_with_parity_w) AM_BASE_LEGACY(&messram_ptr.u32) AM_SIZE_LEGACY(&messram_size)
990      AM_RANGE(DN5500_RAM_BASE, DN5500_RAM_END) AM_RAM_WRITE(ram_with_parity_w) AM_BASE_LEGACY(&messram_ptr.u32) AM_SIZE_LEGACY(&messram_size)
991991
992      AM_RANGE(ATBUS_MEMORY_BASE, ATBUS_MEMORY_END) AM_READWRITE_LEGACY(apollo_atbus_memory_r, apollo_atbus_memory_w)
992      AM_RANGE(ATBUS_MEMORY_BASE, ATBUS_MEMORY_END) AM_READWRITE(apollo_atbus_memory_r, apollo_atbus_memory_w)
993993
994      AM_RANGE(0x07000000, 0x0700FFFF) AM_READWRITE8_LEGACY(dn5500_io_protection_map_r, dn5500_io_protection_map_w, 0xffffffff )
995//      AM_RANGE(0xf8000000, 0xffffffff) AM_READWRITE_LEGACY(apollo_f8_r, apollo_f8_w)
996      AM_RANGE(0x00000000, 0xffffffff) AM_READWRITE_LEGACY(apollo_unmapped_r, apollo_unmapped_w)
994      AM_RANGE(0x07000000, 0x0700FFFF) AM_READWRITE8(dn5500_io_protection_map_r, dn5500_io_protection_map_w, 0xffffffff )
995//      AM_RANGE(0xf8000000, 0xffffffff) AM_READWRITE(apollo_f8_r, apollo_f8_w)
996      AM_RANGE(0x00000000, 0xffffffff) AM_READWRITE(apollo_unmapped_r, apollo_unmapped_w)
997997ADDRESS_MAP_END
998998
999999/***************************************************************************
src/mess/drivers/lisa.c
r14963r14964
2525***************************************************************************/
2626
2727static ADDRESS_MAP_START(lisa_map, AS_PROGRAM, 16, lisa_state )
28   AM_RANGE(0x000000, 0xffffff) AM_READWRITE_LEGACY(lisa_r, lisa_w)         /* no fixed map, we use an MMU */
28   AM_RANGE(0x000000, 0xffffff) AM_READWRITE(lisa_r, lisa_w)         /* no fixed map, we use an MMU */
2929ADDRESS_MAP_END
3030
3131static ADDRESS_MAP_START( lisa_cop_io_map, AS_IO, 8, lisa_state )
r14963r14964
5151static ADDRESS_MAP_START(lisa_fdc_map, AS_PROGRAM, 8, lisa_state )
5252   ADDRESS_MAP_GLOBAL_MASK(0x1fff)   // only 8k of address space
5353   AM_RANGE(0x0000, 0x03ff) AM_RAM   AM_SHARE("fdc_ram")            /* RAM (shared with 68000) */
54   AM_RANGE(0x0400, 0x07ff) AM_READWRITE_LEGACY(lisa_fdc_io_r, lisa_fdc_io_w)   /* disk controller (IWM and TTL logic) */
54   AM_RANGE(0x0400, 0x07ff) AM_READWRITE(lisa_fdc_io_r, lisa_fdc_io_w)   /* disk controller (IWM and TTL logic) */
5555   AM_RANGE(0x0800, 0x0fff) AM_NOP
5656   AM_RANGE(0x1000, 0x1fff) AM_ROM   AM_SHARE("fdc_rom")            /* ROM */
57   AM_RANGE(0x2000, 0xffff) AM_READWRITE_LEGACY(lisa_fdc_r, lisa_fdc_w)      /* handler for wrap-around */
57   AM_RANGE(0x2000, 0xffff) AM_READWRITE(lisa_fdc_r, lisa_fdc_w)      /* handler for wrap-around */
5858ADDRESS_MAP_END
5959
6060static ADDRESS_MAP_START(lisa210_fdc_map, AS_PROGRAM, 8, lisa_state )
6161   ADDRESS_MAP_GLOBAL_MASK(0x1fff)   // only 8k of address space
6262   AM_RANGE(0x0000, 0x03ff) AM_RAM   AM_SHARE("fdc_ram")            /* RAM (shared with 68000) */
6363   AM_RANGE(0x0400, 0x07ff) AM_NOP                              /* nothing, or RAM wrap-around ??? */
64   AM_RANGE(0x0800, 0x0bff) AM_READWRITE_LEGACY(lisa_fdc_io_r, lisa_fdc_io_w)   /* disk controller (IWM and TTL logic) */
64   AM_RANGE(0x0800, 0x0bff) AM_READWRITE(lisa_fdc_io_r, lisa_fdc_io_w)   /* disk controller (IWM and TTL logic) */
6565   AM_RANGE(0x0c00, 0x0fff) AM_NOP                              /* nothing, or IO port wrap-around ??? */
6666   AM_RANGE(0x1000, 0x1fff) AM_ROM   AM_SHARE("fdc_rom")            /* ROM */
67   AM_RANGE(0x2000, 0xffff) AM_READWRITE_LEGACY(lisa_fdc_r, lisa_fdc_w)      /* handler for wrap-around */
67   AM_RANGE(0x2000, 0xffff) AM_READWRITE(lisa_fdc_r, lisa_fdc_w)      /* handler for wrap-around */
6868ADDRESS_MAP_END
6969
7070
src/mess/drivers/lynx.c
r14963r14964
2121   AM_RANGE(0xfd00, 0xfdff) AM_RAM AM_SHARE("mem_fd00")
2222   AM_RANGE(0xfe00, 0xfff7) AM_READ_BANK("bank3") AM_WRITEONLY AM_SHARE("mem_fe00")
2323   AM_RANGE(0xfff8, 0xfff8) AM_RAM
24   AM_RANGE(0xfff9, 0xfff9) AM_READWRITE_LEGACY(lynx_memory_config_r, lynx_memory_config_w)
24   AM_RANGE(0xfff9, 0xfff9) AM_READWRITE(lynx_memory_config_r, lynx_memory_config_w)
2525   AM_RANGE(0xfffa, 0xffff) AM_READ_BANK("bank4") AM_WRITEONLY AM_SHARE("mem_fffa")
2626ADDRESS_MAP_END
2727
src/mess/drivers/aquarius.c
r14963r14964
5959    mark cycle. Control must be returned at that time to the cassette routine
6060    in order to maintain data integrity.
6161*/
62static READ8_HANDLER( cassette_r )
62READ8_MEMBER(aquarius_state::cassette_r)
6363{
64   cassette_image_device *cassette = space->machine().device<cassette_image_device>(CASSETTE_TAG);
64   cassette_image_device *cassette = machine().device<cassette_image_device>(CASSETTE_TAG);
6565   return ((cassette)->input() < +0.0) ? 0 : 1;
6666}
6767
r14963r14964
7171    will appear on audio output. Sound port is a simple one bit I/O and therefore
7272    it must be toggled at a specific rate under software control.
7373*/
74static WRITE8_HANDLER( cassette_w )
74WRITE8_MEMBER(aquarius_state::cassette_w)
7575{
76   device_t *speaker = space->machine().device(SPEAKER_TAG);
77   cassette_image_device *cassette = space->machine().device<cassette_image_device>(CASSETTE_TAG);
76   device_t *speaker = machine().device(SPEAKER_TAG);
77   cassette_image_device *cassette = machine().device<cassette_image_device>(CASSETTE_TAG);
7878
7979   speaker_level_w(speaker, BIT(data, 0));
8080   cassette->output( BIT(data, 0) ? +1.0 : -1.0);
r14963r14964
9393        +                             +       +
9494    +++++                             +++++++++
9595*/
96static READ8_HANDLER( vsync_r )
96READ8_MEMBER(aquarius_state::vsync_r)
9797{
98   screen_device *screen = space->machine().primary_screen;
98   screen_device *screen = machine().primary_screen;
9999   return screen->vblank() ? 0 : 1;
100100}
101101
r14963r14964
105105    map with the upper 16K. A 1 in this bit indicates swapping. This bit is reset
106106    after power up initialization.
107107*/
108static WRITE8_HANDLER( mapper_w )
108WRITE8_MEMBER(aquarius_state::mapper_w)
109109{
110110}
111111
r14963r14964
115115    to send status from PRNHASK pin at bit D0. A 1 indicates printer is ready,
116116    0 means not ready.
117117*/
118static READ8_HANDLER( printer_r )
118READ8_MEMBER(aquarius_state::printer_r)
119119{
120120   return 1; /* ready */
121121}
r14963r14964
127127    baudrate is variable. In BASIC this is a 1200 baud printer port for
128128    the 40 column thermal printer.
129129*/
130static WRITE8_HANDLER( printer_w )
130WRITE8_MEMBER(aquarius_state::printer_w)
131131{
132132}
133133
r14963r14964
143143    Therefore the keyboard can be scanned by placing a specific scanning
144144    pattern in (A) or (B) and reading the result returned on rows.
145145*/
146static READ8_HANDLER( keyboard_r )
146READ8_MEMBER(aquarius_state::keyboard_r)
147147{
148148   UINT8 result = 0xff;
149149
150   if (!BIT(offset,  8)) result &= input_port_read(space->machine(), "ROW0");
151   if (!BIT(offset,  9)) result &= input_port_read(space->machine(), "ROW1");
152   if (!BIT(offset, 10)) result &= input_port_read(space->machine(), "ROW2");
153   if (!BIT(offset, 11)) result &= input_port_read(space->machine(), "ROW3");
154   if (!BIT(offset, 12)) result &= input_port_read(space->machine(), "ROW4");
155   if (!BIT(offset, 13)) result &= input_port_read(space->machine(), "ROW5");
156   if (!BIT(offset, 14)) result &= input_port_read(space->machine(), "ROW6");
157   if (!BIT(offset, 15)) result &= input_port_read(space->machine(), "ROW7");
150   if (!BIT(offset,  8)) result &= input_port_read(machine(), "ROW0");
151   if (!BIT(offset,  9)) result &= input_port_read(machine(), "ROW1");
152   if (!BIT(offset, 10)) result &= input_port_read(machine(), "ROW2");
153   if (!BIT(offset, 11)) result &= input_port_read(machine(), "ROW3");
154   if (!BIT(offset, 12)) result &= input_port_read(machine(), "ROW4");
155   if (!BIT(offset, 13)) result &= input_port_read(machine(), "ROW5");
156   if (!BIT(offset, 14)) result &= input_port_read(machine(), "ROW6");
157   if (!BIT(offset, 15)) result &= input_port_read(machine(), "ROW7");
158158
159159   return result;
160160}
r14963r14964
178178    routine. For game cartridge the lock pattern is generated from data in the
179179    game cartridge itself.
180180*/
181static WRITE8_HANDLER( scrambler_w )
181WRITE8_MEMBER(aquarius_state::scrambler_w)
182182{
183   aquarius_state *state = space->machine().driver_data<aquarius_state>();
184   state->m_scrambler = data;
183   m_scrambler = data;
185184}
186185
187static READ8_HANDLER( cartridge_r )
186READ8_MEMBER(aquarius_state::cartridge_r)
188187{
189   aquarius_state *state = space->machine().driver_data<aquarius_state>();
190   UINT8 *rom = space->machine().region("maincpu")->base() + 0xc000;
191   return rom[offset] ^ state->m_scrambler;
188   UINT8 *rom = machine().region("maincpu")->base() + 0xc000;
189   return rom[offset] ^ m_scrambler;
192190}
193191
194192
r14963r14964
197195***************************************************************************/
198196
199197/* note: 0xe6-0xe7 = drive 1, 0xea-0xeb = drive 2 */
200static READ8_HANDLER( floppy_r )
198READ8_MEMBER(aquarius_state::floppy_r)
201199{
202   logerror("%s: floppy_r[0x%02x]\n", space->machine().describe_context(), offset);
200   logerror("%s: floppy_r[0x%02x]\n", machine().describe_context(), offset);
203201   return 0xff;
204202}
205203
206static WRITE8_HANDLER( floppy_w )
204WRITE8_MEMBER(aquarius_state::floppy_w)
207205{
208   logerror("%s: floppy_w[0x%02x] (0x%02x)\n", space->machine().describe_context(), offset, data);
206   logerror("%s: floppy_w[0x%02x] (0x%02x)\n", machine().describe_context(), offset, data);
209207}
210208
211209
r14963r14964
232230
233231static ADDRESS_MAP_START( aquarius_mem, AS_PROGRAM, 8, aquarius_state )
234232   AM_RANGE(0x0000, 0x1fff) AM_ROM
235   AM_RANGE(0x3000, 0x33ff) AM_RAM_WRITE_LEGACY(aquarius_videoram_w) AM_SHARE("videoram")
236   AM_RANGE(0x3400, 0x37ff) AM_RAM_WRITE_LEGACY(aquarius_colorram_w) AM_SHARE("colorram")
233   AM_RANGE(0x3000, 0x33ff) AM_RAM_WRITE(aquarius_videoram_w) AM_SHARE("videoram")
234   AM_RANGE(0x3400, 0x37ff) AM_RAM_WRITE(aquarius_colorram_w) AM_SHARE("colorram")
237235   AM_RANGE(0x3800, 0x3fff) AM_RAM
238236   AM_RANGE(0x4000, 0xbfff) AM_NOP /* expansion ram */
239   AM_RANGE(0xc000, 0xffff) AM_READ_LEGACY(cartridge_r)
237   AM_RANGE(0xc000, 0xffff) AM_READ(cartridge_r)
240238ADDRESS_MAP_END
241239
242240static ADDRESS_MAP_START( aquarius_io, AS_IO, 8, aquarius_state )
243241//  AM_RANGE(0x7e, 0x7f) AM_MIRROR(0xff00) AM_READWRITE_LEGACY(modem_r, modem_w)
244242   AM_RANGE(0xf6, 0xf6) AM_MIRROR(0xff00) AM_DEVREADWRITE_LEGACY("ay8910", ay8910_r, ay8910_data_w)
245243   AM_RANGE(0xf7, 0xf7) AM_MIRROR(0xff00) AM_DEVWRITE_LEGACY("ay8910", ay8910_address_w)
246   AM_RANGE(0xfc, 0xfc) AM_MIRROR(0xff00) AM_READWRITE_LEGACY(cassette_r, cassette_w)
247   AM_RANGE(0xfd, 0xfd) AM_MIRROR(0xff00) AM_READWRITE_LEGACY(vsync_r, mapper_w)
248   AM_RANGE(0xfe, 0xfe) AM_MIRROR(0xff00) AM_READWRITE_LEGACY(printer_r, printer_w)
249   AM_RANGE(0xff, 0xff) AM_MIRROR(0xff00) AM_MASK(0xff00) AM_READWRITE_LEGACY(keyboard_r, scrambler_w)
244   AM_RANGE(0xfc, 0xfc) AM_MIRROR(0xff00) AM_READWRITE(cassette_r, cassette_w)
245   AM_RANGE(0xfd, 0xfd) AM_MIRROR(0xff00) AM_READWRITE(vsync_r, mapper_w)
246   AM_RANGE(0xfe, 0xfe) AM_MIRROR(0xff00) AM_READWRITE(printer_r, printer_w)
247   AM_RANGE(0xff, 0xff) AM_MIRROR(0xff00) AM_MASK(0xff00) AM_READWRITE(keyboard_r, scrambler_w)
250248ADDRESS_MAP_END
251249
252250static ADDRESS_MAP_START( aquarius_qd_io, AS_IO, 8, aquarius_state )
253251   AM_IMPORT_FROM(aquarius_io)
254   AM_RANGE(0xe0, 0xef) AM_MIRROR(0xff00) AM_READWRITE_LEGACY(floppy_r, floppy_w)
252   AM_RANGE(0xe0, 0xef) AM_MIRROR(0xff00) AM_READWRITE(floppy_r, floppy_w)
255253ADDRESS_MAP_END
256254
257255
src/mess/drivers/specpls3.c
r14963r14964
342342The function decodes the ports appropriately */
343343static ADDRESS_MAP_START (spectrum_plus3_io, AS_IO, 8, spectrum_state )
344344   ADDRESS_MAP_UNMAP_HIGH
345   AM_RANGE(0x0000, 0x0000) AM_READWRITE_LEGACY(spectrum_port_fe_r,spectrum_port_fe_w) AM_MIRROR(0xfffe) AM_MASK(0xffff)
346   AM_RANGE(0x001f, 0x001f) AM_READ_LEGACY(spectrum_port_1f_r) AM_MIRROR(0xff00)
345   AM_RANGE(0x0000, 0x0000) AM_READWRITE(spectrum_port_fe_r,spectrum_port_fe_w) AM_MIRROR(0xfffe) AM_MASK(0xffff)
346   AM_RANGE(0x001f, 0x001f) AM_READ(spectrum_port_1f_r) AM_MIRROR(0xff00)
347347   AM_RANGE(0x4000, 0x4000) AM_WRITE_LEGACY(spectrum_plus3_port_7ffd_w) AM_MIRROR(0x3ffd)
348348   AM_RANGE(0x8000, 0x8000) AM_DEVWRITE_LEGACY("ay8912", ay8910_data_w) AM_MIRROR(0x3ffd)
349349   AM_RANGE(0xc000, 0xc000) AM_DEVREADWRITE_LEGACY("ay8912", ay8910_r, ay8910_address_w) AM_MIRROR(0x3ffd)
src/mess/drivers/x68k.c
r14963r14964
21312131
21322132static const ym2151_interface x68k_ym2151_interface =
21332133{
2134   x68k_fm_irq,
2135   x68k_ct_w  // CT1, CT2 from YM2151 port 0x1b
2134   DEVCB_LINE(x68k_fm_irq),
2135   DEVCB_HANDLER(x68k_ct_w)  // CT1, CT2 from YM2151 port 0x1b
21362136};
21372137
21382138static const okim6258_interface x68k_okim6258_interface =
src/mess/drivers/ondra.c
r14963r14964
2424static ADDRESS_MAP_START( ondra_io, AS_IO, 8, ondra_state )
2525   ADDRESS_MAP_GLOBAL_MASK(0x0b)
2626   ADDRESS_MAP_UNMAP_HIGH
27   AM_RANGE(0x03, 0x03) AM_WRITE_LEGACY(ondra_port_03_w)
28   //AM_RANGE(0x09, 0x09) AM_WRITE_LEGACY(ondra_port_09_w)
29   //AM_RANGE(0x0a, 0x0a) AM_WRITE_LEGACY(ondra_port_0a_w)
27   AM_RANGE(0x03, 0x03) AM_WRITE(ondra_port_03_w)
28   //AM_RANGE(0x09, 0x09) AM_WRITE(ondra_port_09_w)
29   //AM_RANGE(0x0a, 0x0a) AM_WRITE(ondra_port_0a_w)
3030ADDRESS_MAP_END
3131
3232/* Input ports */
src/mess/drivers/lviv.c
r14963r14964
294294/* I/O ports */
295295
296296static ADDRESS_MAP_START(io_map, AS_IO, 8, lviv_state )
297   AM_RANGE(0x00, 0xff) AM_READWRITE_LEGACY(lviv_io_r,lviv_io_w)
297   AM_RANGE(0x00, 0xff) AM_READWRITE(lviv_io_r,lviv_io_w)
298298ADDRESS_MAP_END
299299
300300/* memory w/r functions */
src/mess/drivers/timex.c
r14963r14964
539539}
540540
541541static ADDRESS_MAP_START(ts2068_io, AS_IO, 8, spectrum_state )
542   AM_RANGE(0x1f, 0x1f) AM_READ_LEGACY(spectrum_port_1f_r ) AM_MIRROR(0xff00)
543   AM_RANGE(0x7f, 0x7f) AM_READ_LEGACY(spectrum_port_7f_r ) AM_MIRROR(0xff00)
544   AM_RANGE(0xdf, 0xdf) AM_READ_LEGACY(spectrum_port_df_r ) AM_MIRROR(0xff00)
542   AM_RANGE(0x1f, 0x1f) AM_READ(spectrum_port_1f_r ) AM_MIRROR(0xff00)
543   AM_RANGE(0x7f, 0x7f) AM_READ(spectrum_port_7f_r ) AM_MIRROR(0xff00)
544   AM_RANGE(0xdf, 0xdf) AM_READ(spectrum_port_df_r ) AM_MIRROR(0xff00)
545545   AM_RANGE(0xf4, 0xf4) AM_READWRITE_LEGACY(ts2068_port_f4_r,ts2068_port_f4_w ) AM_MIRROR(0xff00)
546546   AM_RANGE(0xf5, 0xf5) AM_DEVWRITE_LEGACY("ay8912", ay8910_address_w ) AM_MIRROR(0xff00)
547547   AM_RANGE(0xf6, 0xf6) AM_DEVREADWRITE_LEGACY("ay8912", ay8910_r, ay8910_data_w ) AM_MIRROR(0xff00)
548   AM_RANGE(0xfe, 0xfe) AM_READWRITE_LEGACY(spectrum_port_fe_r,spectrum_port_fe_w )  AM_MIRROR(0xff00)  AM_MASK(0xffff)
548   AM_RANGE(0xfe, 0xfe) AM_READWRITE(spectrum_port_fe_r,spectrum_port_fe_w )  AM_MIRROR(0xff00)  AM_MASK(0xffff)
549549   AM_RANGE(0xff, 0xff) AM_READWRITE_LEGACY(ts2068_port_ff_r,ts2068_port_ff_w ) AM_MIRROR(0xff00)
550550ADDRESS_MAP_END
551551
r14963r14964
586586}
587587
588588static ADDRESS_MAP_START(tc2048_io, AS_IO, 8, spectrum_state )
589   AM_RANGE(0x00, 0x00) AM_READWRITE_LEGACY(spectrum_port_fe_r,spectrum_port_fe_w) AM_MIRROR(0xfffe) AM_MASK(0xffff)
590   AM_RANGE(0x1f, 0x1f) AM_READ_LEGACY(spectrum_port_1f_r) AM_MIRROR(0xff00)
591   AM_RANGE(0x7f, 0x7f) AM_READ_LEGACY(spectrum_port_7f_r) AM_MIRROR(0xff00)
592   AM_RANGE(0xdf, 0xdf) AM_READ_LEGACY(spectrum_port_df_r) AM_MIRROR(0xff00)
589   AM_RANGE(0x00, 0x00) AM_READWRITE(spectrum_port_fe_r,spectrum_port_fe_w) AM_MIRROR(0xfffe) AM_MASK(0xffff)
590   AM_RANGE(0x1f, 0x1f) AM_READ(spectrum_port_1f_r) AM_MIRROR(0xff00)
591   AM_RANGE(0x7f, 0x7f) AM_READ(spectrum_port_7f_r) AM_MIRROR(0xff00)
592   AM_RANGE(0xdf, 0xdf) AM_READ(spectrum_port_df_r) AM_MIRROR(0xff00)
593593   AM_RANGE(0xff, 0xff) AM_READWRITE_LEGACY(ts2068_port_ff_r,tc2048_port_ff_w)  AM_MIRROR(0xff00)
594594ADDRESS_MAP_END
595595
src/mess/drivers/enterp.c
r14963r14964
209209   bit 6 - Disk change signal from disk drive
210210   bit 7 - DRQ from WD1770
211211*/
212static READ8_HANDLER( exdos_card_r )
212READ8_MEMBER(ep_state::exdos_card_r)
213213{
214   ep_state *ep = space->machine().driver_data<ep_state>();
215   return ep->exdos_card_value;
214   return exdos_card_value;
216215}
217216
218217
r14963r14964
225224   bit 6 - disk change reset
226225   bit 7 - in use
227226*/
228static WRITE8_HANDLER( exdos_card_w )
227WRITE8_MEMBER(ep_state::exdos_card_w)
229228{
230   device_t *fdc = space->machine().device("wd1770");
229   device_t *fdc = machine().device("wd1770");
231230
232231   /* drive */
233232   if (BIT(data, 0)) wd17xx_set_drive(fdc, 0);
r14963r14964
254253static ADDRESS_MAP_START( enterprise_io, AS_IO, 8, ep_state )
255254   ADDRESS_MAP_GLOBAL_MASK(0xff)
256255   AM_RANGE(0x10, 0x13) AM_MIRROR(0x04) AM_DEVREADWRITE_LEGACY("wd1770", wd17xx_r, wd17xx_w)
257   AM_RANGE(0x18, 0x18) AM_MIRROR(0x04) AM_READWRITE_LEGACY(exdos_card_r, exdos_card_w)
256   AM_RANGE(0x18, 0x18) AM_MIRROR(0x04) AM_READWRITE(exdos_card_r, exdos_card_w)
258257   AM_RANGE(0x80, 0x8f) AM_WRITE_LEGACY(epnick_reg_w)
259258   AM_RANGE(0xa0, 0xbf) AM_DEVREADWRITE_LEGACY("custom", dave_reg_r, dave_reg_w)
260259ADDRESS_MAP_END
src/mess/drivers/mbc55x.c
r14963r14964
6767
6868static ADDRESS_MAP_START(mbc55x_io, AS_IO, 8, mbc55x_state)
6969   ADDRESS_MAP_GLOBAL_MASK(0xff)
70   AM_RANGE( 0X0000, 0X0003) AM_READWRITE_LEGACY(pic8259_r, pic8259_w)
71   AM_RANGE( 0x0008, 0x000F) AM_READWRITE_LEGACY(mbc55x_disk_r, mbc55x_disk_w)
70   AM_RANGE( 0X0000, 0X0003) AM_READWRITE(mbcpic8259_r, mbcpic8259_w)
71   AM_RANGE( 0x0008, 0x000F) AM_READWRITE(mbc55x_disk_r, mbc55x_disk_w)
7272   AM_RANGE( 0X0010, 0X0010) AM_READWRITE( vram_page_r, vram_page_w)
7373   AM_RANGE( 0x0018, 0x001F) AM_READWRITE( ppi8255_r, ppi8255_w)
74   AM_RANGE( 0X0020, 0X0027) AM_READWRITE_LEGACY(pit8253_r, pit8253_w)
74   AM_RANGE( 0X0020, 0X0027) AM_READWRITE(mbcpit8253_r, mbcpit8253_w)
7575   AM_RANGE( 0x0028, 0x002B) AM_READWRITE( mbc55x_usart_r, mbc55x_usart_w)
7676   AM_RANGE( 0x0030, 0x0031) AM_DEVREADWRITE(VID_MC6845_NAME, mc6845_device, status_r, address_w )
7777   AM_RANGE( 0x0032, 0x0033) AM_DEVREADWRITE(VID_MC6845_NAME, mc6845_device, register_r, register_w )
78   AM_RANGE( 0x0038, 0x003B) AM_READWRITE_LEGACY(mbc55x_kb_usart_r, mbc55x_kb_usart_w)
78   AM_RANGE( 0x0038, 0x003B) AM_READWRITE(mbc55x_kb_usart_r, mbc55x_kb_usart_w)
7979ADDRESS_MAP_END
8080
8181static INPUT_PORTS_START( mbc55x )
src/mess/drivers/gp32.c
r14963r14964
300300   return 0;
301301}
302302
303static READ32_HANDLER( s3c240x_lcd_r )
303READ32_MEMBER(gp32_state::s3c240x_lcd_r)
304304{
305   gp32_state *state = space->machine().driver_data<gp32_state>();
306   running_machine &machine = space->machine();
307   UINT32 data = state->m_s3c240x_lcd_regs[offset];
305   UINT32 data = m_s3c240x_lcd_regs[offset];
308306   switch (offset)
309307   {
310308      // LCDCON1
311309      case 0x00 / 4 :
312310      {
313311         // make sure line counter is going
314         UINT32 lineval = BITS( state->m_s3c240x_lcd_regs[1], 23, 14);
315         data = (data & ~0xFFFC0000) | ((lineval - machine.primary_screen->vpos()) << 18);
312         UINT32 lineval = BITS( m_s3c240x_lcd_regs[1], 23, 14);
313         data = (data & ~0xFFFC0000) | ((lineval - machine().primary_screen->vpos()) << 18);
316314      }
317315      break;
318316   }
319   verboselog( machine, 9, "(LCD) %08X -> %08X (PC %08X)\n", 0x14A00000 + (offset << 2), data, cpu_get_pc( &space->device()));
317   verboselog( machine(), 9, "(LCD) %08X -> %08X (PC %08X)\n", 0x14A00000 + (offset << 2), data, cpu_get_pc( &space.device()));
320318   return data;
321319}
322320
r14963r14964
377375   }
378376}
379377
380static WRITE32_HANDLER( s3c240x_lcd_w )
378WRITE32_MEMBER(gp32_state::s3c240x_lcd_w)
381379{
382   gp32_state *state = space->machine().driver_data<gp32_state>();
383   running_machine &machine = space->machine();
384   UINT32 old_value = state->m_s3c240x_lcd_regs[offset];
385   verboselog( machine, 9, "(LCD) %08X <- %08X (PC %08X)\n", 0x14A00000 + (offset << 2), data, cpu_get_pc( &space->device()));
386   COMBINE_DATA(&state->m_s3c240x_lcd_regs[offset]);
380   UINT32 old_value = m_s3c240x_lcd_regs[offset];
381   verboselog( machine(), 9, "(LCD) %08X <- %08X (PC %08X)\n", 0x14A00000 + (offset << 2), data, cpu_get_pc( &space.device()));
382   COMBINE_DATA(&m_s3c240x_lcd_regs[offset]);
387383   switch (offset)
388384   {
389385      // LCDCON1
r14963r14964
391387      {
392388         if ((old_value & 1) != (data & 1))
393389         {
394            s3c240x_lcd_recalc( machine);
390            s3c240x_lcd_recalc( machine());
395391         }
396392      }
397393      break;
r14963r14964
401397// LCD PALETTE
402398
403399
404static READ32_HANDLER( s3c240x_lcd_palette_r )
400READ32_MEMBER(gp32_state::s3c240x_lcd_palette_r)
405401{
406   gp32_state *state = space->machine().driver_data<gp32_state>();
407   running_machine &machine = space->machine();
408   UINT32 data = state->m_s3c240x_lcd_palette[offset];
409   verboselog( machine, 9, "(LCD) %08X -> %08X (PC %08X)\n", 0x14A00400 + (offset << 2), data, cpu_get_pc( &space->device()));
402   UINT32 data = m_s3c240x_lcd_palette[offset];
403   verboselog( machine(), 9, "(LCD) %08X -> %08X (PC %08X)\n", 0x14A00400 + (offset << 2), data, cpu_get_pc( &space.device()));
410404   return data;
411405}
412406
413static WRITE32_HANDLER( s3c240x_lcd_palette_w )
407WRITE32_MEMBER(gp32_state::s3c240x_lcd_palette_w)
414408{
415   gp32_state *state = space->machine().driver_data<gp32_state>();
416   running_machine &machine = space->machine();
417   verboselog( machine, 9, "(LCD) %08X <- %08X (PC %08X)\n", 0x14A00400 + (offset << 2), data, cpu_get_pc( &space->device()));
418   COMBINE_DATA(&state->m_s3c240x_lcd_palette[offset]);
409   verboselog( machine(), 9, "(LCD) %08X <- %08X (PC %08X)\n", 0x14A00400 + (offset << 2), data, cpu_get_pc( &space.device()));
410   COMBINE_DATA(&m_s3c240x_lcd_palette[offset]);
419411   if (mem_mask != 0xffffffff)
420412   {
421      verboselog( machine, 0, "s3c240x_lcd_palette_w: unknown mask %08x\n", mem_mask);
413      verboselog( machine(), 0, "s3c240x_lcd_palette_w: unknown mask %08x\n", mem_mask);
422414   }
423   palette_set_color( machine, offset, s3c240x_get_color_5551( data & 0xFFFF));
415   palette_set_color( machine(), offset, s3c240x_get_color_5551( data & 0xFFFF));
424416}
425417
426418// CLOCK & POWER MANAGEMENT
r14963r14964
460452   return 0;
461453}
462454
463static READ32_HANDLER( s3c240x_clkpow_r )
455READ32_MEMBER(gp32_state::s3c240x_clkpow_r)
464456{
465   gp32_state *state = space->machine().driver_data<gp32_state>();
466   running_machine &machine = space->machine();
467   UINT32 data = state->m_s3c240x_clkpow_regs[offset];
468   verboselog( machine, 9, "(CLKPOW) %08X -> %08X (PC %08X)\n", 0x14800000 + (offset << 2), data, cpu_get_pc( &space->device()));
457   UINT32 data = m_s3c240x_clkpow_regs[offset];
458   verboselog( machine(), 9, "(CLKPOW) %08X -> %08X (PC %08X)\n", 0x14800000 + (offset << 2), data, cpu_get_pc( &space.device()));
469459   return data;
470460}
471461
472static WRITE32_HANDLER( s3c240x_clkpow_w )
462WRITE32_MEMBER(gp32_state::s3c240x_clkpow_w)
473463{
474   gp32_state *state = space->machine().driver_data<gp32_state>();
475   running_machine &machine = space->machine();
476   verboselog( machine, 9, "(CLKPOW) %08X <- %08X (PC %08X)\n", 0x14800000 + (offset << 2), data, cpu_get_pc( &space->device()));
477   COMBINE_DATA(&state->m_s3c240x_clkpow_regs[offset]);
464   verboselog( machine(), 9, "(CLKPOW) %08X <- %08X (PC %08X)\n", 0x14800000 + (offset << 2), data, cpu_get_pc( &space.device()));
465   COMBINE_DATA(&m_s3c240x_clkpow_regs[offset]);
478466   switch (offset)
479467   {
480468      // MPLLCON
481469      case 0x04 / 4 :
482470      {
483         machine.device("maincpu")->set_unscaled_clock(s3c240x_get_fclk(state, MPLLCON) * CLOCK_MULTIPLIER);
471         gp32_state *state = machine().driver_data<gp32_state>();
472         machine().device("maincpu")->set_unscaled_clock(s3c240x_get_fclk(state, MPLLCON) * CLOCK_MULTIPLIER);
484473      }
485474      break;
486475   }
r14963r14964
530519}
531520
532521
533static READ32_HANDLER( s3c240x_irq_r )
522READ32_MEMBER(gp32_state::s3c240x_irq_r)
534523{
535   gp32_state *state = space->machine().driver_data<gp32_state>();
536   running_machine &machine = space->machine();
537   UINT32 data = state->m_s3c240x_irq_regs[offset];
538   verboselog( machine, 9, "(IRQ) %08X -> %08X (PC %08X)\n", 0x14400000 + (offset << 2), data, cpu_get_pc( &space->device()));
524   UINT32 data = m_s3c240x_irq_regs[offset];
525   verboselog( machine(), 9, "(IRQ) %08X -> %08X (PC %08X)\n", 0x14400000 + (offset << 2), data, cpu_get_pc( &space.device()));
539526   return data;
540527}
541528
542static WRITE32_HANDLER( s3c240x_irq_w )
529WRITE32_MEMBER(gp32_state::s3c240x_irq_w)
543530{
544   gp32_state *state = space->machine().driver_data<gp32_state>();
545   running_machine &machine = space->machine();
546   UINT32 old_value = state->m_s3c240x_irq_regs[offset];
547   verboselog( machine, 9, "(IRQ) %08X <- %08X (PC %08X)\n", 0x14400000 + (offset << 2), data, cpu_get_pc( &space->device()));
548   COMBINE_DATA(&state->m_s3c240x_irq_regs[offset]);
531   UINT32 old_value = m_s3c240x_irq_regs[offset];
532   verboselog( machine(), 9, "(IRQ) %08X <- %08X (PC %08X)\n", 0x14400000 + (offset << 2), data, cpu_get_pc( &space.device()));
533   COMBINE_DATA(&m_s3c240x_irq_regs[offset]);
549534   switch (offset)
550535   {
551536      // SRCPND
552537      case 0x00 / 4 :
553538      {
554         state->m_s3c240x_irq_regs[0] = (old_value & ~data); // clear only the bit positions of SRCPND corresponding to those set to one in the data
555         s3c240x_check_pending_irq( machine);
539         m_s3c240x_irq_regs[0] = (old_value & ~data); // clear only the bit positions of SRCPND corresponding to those set to one in the data
540         s3c240x_check_pending_irq( machine());
556541      }
557542      break;
558543      // INTPND
559544      case 0x10 / 4 :
560545      {
561         state->m_s3c240x_irq_regs[4] = (old_value & ~data); // clear only the bit positions of INTPND corresponding to those set to one in the data
546         m_s3c240x_irq_regs[4] = (old_value & ~data); // clear only the bit positions of INTPND corresponding to those set to one in the data
562547      }
563548      break;
564549   }
r14963r14964
591576#endif
592577
593578
594static READ32_HANDLER( s3c240x_pwm_r )
579READ32_MEMBER(gp32_state::s3c240x_pwm_r)
595580{
596   gp32_state *state = space->machine().driver_data<gp32_state>();
597   running_machine &machine = space->machine();
598   UINT32 data = state->m_s3c240x_pwm_regs[offset];
599   verboselog( machine, 9, "(PWM) %08X -> %08X (PC %08X)\n", 0x15100000 + (offset << 2), data, cpu_get_pc( &space->device()));
581   UINT32 data = m_s3c240x_pwm_regs[offset];
582   verboselog( machine(), 9, "(PWM) %08X -> %08X (PC %08X)\n", 0x15100000 + (offset << 2), data, cpu_get_pc( &space.device()));
600583   return data;
601584}
602585
r14963r14964
658641   }
659642}
660643
661static WRITE32_HANDLER( s3c240x_pwm_w )
644WRITE32_MEMBER(gp32_state::s3c240x_pwm_w)
662645{
663   gp32_state *state = space->machine().driver_data<gp32_state>();
664   running_machine &machine = space->machine();
665   UINT32 old_value = state->m_s3c240x_pwm_regs[offset];
666   verboselog( machine, 9, "(PWM) %08X <- %08X (PC %08X)\n", 0x15100000 + (offset << 2), data, cpu_get_pc( &space->device()));
667   COMBINE_DATA(&state->m_s3c240x_pwm_regs[offset]);
646   UINT32 old_value = m_s3c240x_pwm_regs[offset];
647   verboselog( machine(), 9, "(PWM) %08X <- %08X (PC %08X)\n", 0x15100000 + (offset << 2), data, cpu_get_pc( &space.device()));
648   COMBINE_DATA(&m_s3c240x_pwm_regs[offset]);
668649   switch (offset)
669650   {
670651      // TCON
r14963r14964
672653      {
673654         if ((data & 1) != (old_value & 1))
674655         {
675            s3c240x_pwm_recalc( machine, 0);
656            s3c240x_pwm_recalc( machine(), 0);
676657         }
677658         if ((data & 0x100) != (old_value & 0x100))
678659         {
679            s3c240x_pwm_recalc( machine, 1);
660            s3c240x_pwm_recalc( machine(), 1);
680661         }
681662         if ((data & 0x1000) != (old_value & 0x1000))
682663         {
683            s3c240x_pwm_recalc( machine, 2);
664            s3c240x_pwm_recalc( machine(), 2);
684665         }
685666         if ((data & 0x10000) != (old_value & 0x10000))
686667         {
687            s3c240x_pwm_recalc( machine, 3);
668            s3c240x_pwm_recalc( machine(), 3);
688669         }
689670         if ((data & 0x100000) != (old_value & 0x100000))
690671         {
691            s3c240x_pwm_recalc( machine, 4);
672            s3c240x_pwm_recalc( machine(), 4);
692673         }
693674      }
694675   }
r14963r14964
855836   }
856837}
857838
858static READ32_HANDLER( s3c240x_dma_r )
839READ32_MEMBER(gp32_state::s3c240x_dma_r)
859840{
860   gp32_state *state = space->machine().driver_data<gp32_state>();
861   running_machine &machine = space->machine();
862   UINT32 data = state->m_s3c240x_dma_regs[offset];
863   verboselog( machine, 9, "(DMA) %08X -> %08X (PC %08X)\n", 0x14600000 + (offset << 2), data, cpu_get_pc( &space->device()));
841   UINT32 data = m_s3c240x_dma_regs[offset];
842   verboselog( machine(), 9, "(DMA) %08X -> %08X (PC %08X)\n", 0x14600000 + (offset << 2), data, cpu_get_pc( &space.device()));
864843   return data;
865844}
866845
867static WRITE32_HANDLER( s3c240x_dma_w )
846WRITE32_MEMBER(gp32_state::s3c240x_dma_w)
868847{
869   gp32_state *state = space->machine().driver_data<gp32_state>();
870   running_machine &machine = space->machine();
871   UINT32 old_value = state->m_s3c240x_dma_regs[offset];
872   verboselog( machine, 9, "(DMA) %08X <- %08X (PC %08X)\n", 0x14600000 + (offset << 2), data, cpu_get_pc( &space->device()));
873   COMBINE_DATA(&state->m_s3c240x_dma_regs[offset]);
848   UINT32 old_value = m_s3c240x_dma_regs[offset];
849   verboselog( machine(), 9, "(DMA) %08X <- %08X (PC %08X)\n", 0x14600000 + (offset << 2), data, cpu_get_pc( &space.device()));
850   COMBINE_DATA(&m_s3c240x_dma_regs[offset]);
874851   switch (offset)
875852   {
876853      // DCON0
r14963r14964
878855      {
879856         if (((data >> 22) & 1) != 0) // reload
880857         {
881            state->m_s3c240x_dma_regs[0x18/4] &= ~(1 << 1); // clear on/off
858            m_s3c240x_dma_regs[0x18/4] &= ~(1 << 1); // clear on/off
882859         }
883860      }
884861      break;
885862      // DMASKTRIG0
886863      case 0x18 / 4 :
887864      {
888         if ((old_value & 2) != (data & 2)) s3c240x_dma_recalc( machine, 0);
865         if ((old_value & 2) != (data & 2)) s3c240x_dma_recalc( machine(), 0);
889866      }
890867      break;
891868      // DCON1
r14963r14964
893870      {
894871         if (((data >> 22) & 1) != 0) // reload
895872         {
896            state->m_s3c240x_dma_regs[0x38/4] &= ~(1 << 1); // clear on/off
873            m_s3c240x_dma_regs[0x38/4] &= ~(1 << 1); // clear on/off
897874         }
898875      }
899876      break;
900877      // DMASKTRIG1
901878      case 0x38 / 4 :
902879      {
903         if ((old_value & 2) != (data & 2)) s3c240x_dma_recalc( machine, 1);
880         if ((old_value & 2) != (data & 2)) s3c240x_dma_recalc( machine(), 1);
904881      }
905882      break;
906883      // DCON2
r14963r14964
908885      {
909886         if (((data >> 22) & 1) != 0) // reload
910887         {
911            state->m_s3c240x_dma_regs[0x58/4] &= ~(1 << 1); // clear on/off
888            m_s3c240x_dma_regs[0x58/4] &= ~(1 << 1); // clear on/off
912889         }
913890      }
914891      break;
915892      // DMASKTRIG2
916893      case 0x58 / 4 :
917894      {
918         if ((old_value & 2) != (data & 2)) s3c240x_dma_recalc( machine, 2);
895         if ((old_value & 2) != (data & 2)) s3c240x_dma_recalc( machine(), 2);
919896      }
920897      break;
921898      // DCON3
r14963r14964
923900      {
924901         if (((data >> 22) & 1) != 0) // reload
925902         {
926            state->m_s3c240x_dma_regs[0x78/4] &= ~(1 << 1); // clear on/off
903            m_s3c240x_dma_regs[0x78/4] &= ~(1 << 1); // clear on/off
927904         }
928905      }
929906      break;
930907      // DMASKTRIG3
931908      case 0x78 / 4 :
932909      {
933         if ((old_value & 2) != (data & 2)) s3c240x_dma_recalc( machine, 3);
910         if ((old_value & 2) != (data & 2)) s3c240x_dma_recalc( machine(), 3);
934911      }
935912      break;
936913   }
r14963r14964
10771054// I/O PORT
10781055
10791056
1080static READ32_HANDLER( s3c240x_gpio_r )
1057READ32_MEMBER(gp32_state::s3c240x_gpio_r)
10811058{
1082   gp32_state *state = space->machine().driver_data<gp32_state>();
1083   running_machine &machine = space->machine();
1084   UINT32 data = state->m_s3c240x_gpio[offset];
1059   UINT32 data = m_s3c240x_gpio[offset];
10851060   switch (offset)
10861061   {
10871062      // PBCON
r14963r14964
10891064      {
10901065         // smartmedia
10911066         data = (data & ~0x00000001);
1092         if (!state->m_smc.read) data = data | 0x00000001;
1067         if (!m_smc.read) data = data | 0x00000001;
10931068      }
10941069      break;
10951070      // PBDAT
10961071      case 0x0C / 4 :
10971072      {
10981073         // smartmedia
1099         data = (data & ~0x000000FF) | (state->m_smc.datarx & 0xFF);
1074         data = (data & ~0x000000FF) | (m_smc.datarx & 0xFF);
11001075         // buttons
1101         data = (data & ~0x0000FF00) | (input_port_read( machine, "IN0") & 0x0000FF00);
1076         data = (data & ~0x0000FF00) | (input_port_read( machine(), "IN0") & 0x0000FF00);
11021077      }
11031078      break;
11041079      // PDDAT
11051080      case 0x24 / 4 :
11061081      {
1107         smartmedia_image_device *smartmedia = machine.device<smartmedia_image_device>( "smartmedia");
1082         smartmedia_image_device *smartmedia = machine().device<smartmedia_image_device>( "smartmedia");
11081083         // smartmedia
11091084         data = (data & ~0x000003C0);
1110         if (!state->m_smc.busy) data = data | 0x00000200;
1111         if (!state->m_smc.do_read) data = data | 0x00000100;
1112         if (!state->m_smc.chip) data = data | 0x00000080;
1085         if (!m_smc.busy) data = data | 0x00000200;
1086         if (!m_smc.do_read) data = data | 0x00000100;
1087         if (!m_smc.chip) data = data | 0x00000080;
11131088         if (!smartmedia->is_protected()) data = data | 0x00000040;
11141089      }
11151090      break;
11161091      // PEDAT
11171092      case 0x30 / 4 :
11181093      {
1119         smartmedia_image_device *smartmedia = machine.device<smartmedia_image_device>( "smartmedia");
1094         smartmedia_image_device *smartmedia = machine().device<smartmedia_image_device>( "smartmedia");
11201095         // smartmedia
11211096         data = (data & ~0x0000003C);
1122         if (state->m_smc.cmd_latch) data = data | 0x00000020;
1123         if (state->m_smc.add_latch) data = data | 0x00000010;
1124         if (!state->m_smc.do_write) data = data | 0x00000008;
1097         if (m_smc.cmd_latch) data = data | 0x00000020;
1098         if (m_smc.add_latch) data = data | 0x00000010;
1099         if (!m_smc.do_write) data = data | 0x00000008;
11251100         if (!smartmedia->is_present()) data = data | 0x00000004;
11261101         // buttons
1127         data = (data & ~0x000000C0) | (input_port_read( machine, "IN1") & 0x000000C0);
1102         data = (data & ~0x000000C0) | (input_port_read( machine(), "IN1") & 0x000000C0);
11281103      }
11291104      break;
11301105   }
1131   verboselog( machine, 9, "(GPIO) %08X -> %08X (PC %08X)\n", 0x15600000 + (offset << 2), data, cpu_get_pc( &space->device()));
1106   verboselog( machine(), 9, "(GPIO) %08X -> %08X (PC %08X)\n", 0x15600000 + (offset << 2), data, cpu_get_pc( &space.device()));
11321107   return data;
11331108}
11341109
1135static WRITE32_HANDLER( s3c240x_gpio_w )
1110WRITE32_MEMBER(gp32_state::s3c240x_gpio_w)
11361111{
1137   gp32_state *state = space->machine().driver_data<gp32_state>();
1138   running_machine &machine = space->machine();
1139   COMBINE_DATA(&state->m_s3c240x_gpio[offset]);
1140   verboselog( machine, 9, "(GPIO) %08X <- %08X (PC %08X)\n", 0x15600000 + (offset << 2), data, cpu_get_pc( &space->device()));
1112   COMBINE_DATA(&m_s3c240x_gpio[offset]);
1113   verboselog( machine(), 9, "(GPIO) %08X <- %08X (PC %08X)\n", 0x15600000 + (offset << 2), data, cpu_get_pc( &space.device()));
11411114   switch (offset)
11421115   {
11431116      // PBCON
11441117      case 0x08 / 4 :
11451118      {
11461119         // smartmedia
1147         state->m_smc.read = ((data & 0x00000001) == 0);
1148         smc_update( machine);
1120         m_smc.read = ((data & 0x00000001) == 0);
1121         smc_update( machine());
11491122      }
11501123      break;
11511124      // PBDAT
11521125      case 0x0C / 4 :
11531126      {
11541127         // smartmedia
1155         state->m_smc.datatx = data & 0xFF;
1128         m_smc.datatx = data & 0xFF;
11561129      }
11571130      break;
11581131      // PDDAT
11591132      case 0x24 / 4 :
11601133      {
11611134         // smartmedia
1162         state->m_smc.do_read = ((data & 0x00000100) == 0);
1163         state->m_smc.chip = ((data & 0x00000080) == 0);
1164         state->m_smc.wp = ((data & 0x00000040) == 0);
1165         smc_update( machine);
1135         m_smc.do_read = ((data & 0x00000100) == 0);
1136         m_smc.chip = ((data & 0x00000080) == 0);
1137         m_smc.wp = ((data & 0x00000040) == 0);
1138         smc_update( machine());
11661139      }
11671140      break;
11681141      // PEDAT
11691142      case 0x30 / 4 :
11701143      {
11711144         // smartmedia
1172         state->m_smc.cmd_latch = ((data & 0x00000020) != 0);
1173         state->m_smc.add_latch = ((data & 0x00000010) != 0);
1174         state->m_smc.do_write = ((data & 0x00000008) == 0);
1175         smc_update( machine);
1145         m_smc.cmd_latch = ((data & 0x00000020) != 0);
1146         m_smc.add_latch = ((data & 0x00000010) != 0);
1147         m_smc.do_write = ((data & 0x00000008) == 0);
1148         smc_update( machine());
11761149         // sound
1177         i2s_write( machine, I2S_L3D, (data & 0x00000800) ? 1 : 0);
1178         i2s_write( machine, I2S_L3M, (data & 0x00000400) ? 1 : 0);
1179         i2s_write( machine, I2S_L3C, (data & 0x00000200) ? 1 : 0);
1150         i2s_write( machine(), I2S_L3D, (data & 0x00000800) ? 1 : 0);
1151         i2s_write( machine(), I2S_L3M, (data & 0x00000400) ? 1 : 0);
1152         i2s_write( machine(), I2S_L3C, (data & 0x00000200) ? 1 : 0);
11801153      }
11811154      break;
11821155#if 0
r14963r14964
11941167// MEMORY CONTROLLER
11951168
11961169
1197static READ32_HANDLER( s3c240x_memcon_r )
1170READ32_MEMBER(gp32_state::s3c240x_memcon_r)
11981171{
1199   gp32_state *state = space->machine().driver_data<gp32_state>();
1200   running_machine &machine = space->machine();
1201   UINT32 data = state->m_s3c240x_memcon_regs[offset];
1202   verboselog( machine, 9, "(MEMCON) %08X -> %08X (PC %08X)\n", 0x14000000 + (offset << 2), data, cpu_get_pc( &space->device()));
1172   UINT32 data = m_s3c240x_memcon_regs[offset];
1173   verboselog( machine(), 9, "(MEMCON) %08X -> %08X (PC %08X)\n", 0x14000000 + (offset << 2), data, cpu_get_pc( &space.device()));
12031174   return data;
12041175}
12051176
1206static WRITE32_HANDLER( s3c240x_memcon_w )
1177WRITE32_MEMBER(gp32_state::s3c240x_memcon_w)
12071178{
1208   gp32_state *state = space->machine().driver_data<gp32_state>();
1209   running_machine &machine = space->machine();
1210   verboselog( machine, 9, "(MEMCON) %08X <- %08X (PC %08X)\n", 0x14000000 + (offset << 2), data, cpu_get_pc( &space->device()));
1211   COMBINE_DATA(&state->m_s3c240x_memcon_regs[offset]);
1179   verboselog( machine(), 9, "(MEMCON) %08X <- %08X (PC %08X)\n", 0x14000000 + (offset << 2), data, cpu_get_pc( &space.device()));
1180   COMBINE_DATA(&m_s3c240x_memcon_regs[offset]);
12121181}
12131182
12141183// USB HOST CONTROLLER
12151184
12161185
1217static READ32_HANDLER( s3c240x_usb_host_r )
1186READ32_MEMBER(gp32_state::s3c240x_usb_host_r)
12181187{
1219   gp32_state *state = space->machine().driver_data<gp32_state>();
1220   running_machine &machine = space->machine();
1221   UINT32 data = state->m_s3c240x_usb_host_regs[offset];
1222   verboselog( machine, 9, "(USB H) %08X -> %08X (PC %08X)\n", 0x14200000 + (offset << 2), data, cpu_get_pc( &space->device()));
1188   UINT32 data = m_s3c240x_usb_host_regs[offset];
1189   verboselog( machine(), 9, "(USB H) %08X -> %08X (PC %08X)\n", 0x14200000 + (offset << 2), data, cpu_get_pc( &space.device()));
12231190   return data;
12241191}
12251192
1226static WRITE32_HANDLER( s3c240x_usb_host_w )
1193WRITE32_MEMBER(gp32_state::s3c240x_usb_host_w)
12271194{
1228   gp32_state *state = space->machine().driver_data<gp32_state>();
1229   running_machine &machine = space->machine();
1230   verboselog( machine, 9, "(USB H) %08X <- %08X (PC %08X)\n", 0x14200000 + (offset << 2), data, cpu_get_pc( &space->device()));
1231   COMBINE_DATA(&state->m_s3c240x_usb_host_regs[offset]);
1195   verboselog( machine(), 9, "(USB H) %08X <- %08X (PC %08X)\n", 0x14200000 + (offset << 2), data, cpu_get_pc( &space.device()));
1196   COMBINE_DATA(&m_s3c240x_usb_host_regs[offset]);
12321197}
12331198
12341199// UART 0
12351200
12361201
1237static READ32_HANDLER( s3c240x_uart_0_r )
1202READ32_MEMBER(gp32_state::s3c240x_uart_0_r)
12381203{
1239   gp32_state *state = space->machine().driver_data<gp32_state>();
1240   running_machine &machine = space->machine();
1241   UINT32 data = state->m_s3c240x_uart_0_regs[offset];
1204   UINT32 data = m_s3c240x_uart_0_regs[offset];
12421205   switch (offset)
12431206   {
12441207      // UTRSTAT0
r14963r14964
12481211      }
12491212      break;
12501213   }
1251   verboselog( machine, 9, "(UART 0) %08X -> %08X (PC %08X)\n", 0x15000000 + (offset << 2), data, cpu_get_pc( &space->device()));
1214   verboselog( machine(), 9, "(UART 0) %08X -> %08X (PC %08X)\n", 0x15000000 + (offset << 2), data, cpu_get_pc( &space.device()));
12521215   return data;
12531216}
12541217
1255static WRITE32_HANDLER( s3c240x_uart_0_w )
1218WRITE32_MEMBER(gp32_state::s3c240x_uart_0_w)
12561219{
1257   gp32_state *state = space->machine().driver_data<gp32_state>();
1258   running_machine &machine = space->machine();
1259   verboselog( machine, 9, "(UART 0) %08X <- %08X (PC %08X)\n", 0x15000000 + (offset << 2), data, cpu_get_pc( &space->device()));
1260   COMBINE_DATA(&state->m_s3c240x_uart_0_regs[offset]);
1220   verboselog( machine(), 9, "(UART 0) %08X <- %08X (PC %08X)\n", 0x15000000 + (offset << 2), data, cpu_get_pc( &space.device()));
1221   COMBINE_DATA(&m_s3c240x_uart_0_regs[offset]);
12611222}
12621223
12631224// UART 1
12641225
12651226
1266static READ32_HANDLER( s3c240x_uart_1_r )
1227READ32_MEMBER(gp32_state::s3c240x_uart_1_r)
12671228{
1268   gp32_state *state = space->machine().driver_data<gp32_state>();
1269   running_machine &machine = space->machine();
1270   UINT32 data = state->m_s3c240x_uart_1_regs[offset];
1229   UINT32 data = m_s3c240x_uart_1_regs[offset];
12711230   switch (offset)
12721231   {
12731232      // UTRSTAT1
r14963r14964
12771236      }
12781237      break;
12791238   }
1280   verboselog( machine, 9, "(UART 1) %08X -> %08X (PC %08X)\n", 0x15004000 + (offset << 2), data, cpu_get_pc( &space->device()));
1239   verboselog( machine(), 9, "(UART 1) %08X -> %08X (PC %08X)\n", 0x15004000 + (offset << 2), data, cpu_get_pc( &space.device()));
12811240   return data;
12821241}
12831242
1284static WRITE32_HANDLER( s3c240x_uart_1_w )
1243WRITE32_MEMBER(gp32_state::s3c240x_uart_1_w)
12851244{
1286   gp32_state *state = space->machine().driver_data<gp32_state>();
1287   running_machine &machine = space->machine();
1288   verboselog( machine, 9, "(UART 1) %08X <- %08X (PC %08X)\n", 0x15004000 + (offset << 2), data, cpu_get_pc( &space->device()));
1289   COMBINE_DATA(&state->m_s3c240x_uart_1_regs[offset]);
1245   verboselog( machine(), 9, "(UART 1) %08X <- %08X (PC %08X)\n", 0x15004000 + (offset << 2), data, cpu_get_pc( &space.device()));
1246   COMBINE_DATA(&m_s3c240x_uart_1_regs[offset]);
12901247}
12911248
12921249// USB DEVICE
12931250
12941251
1295static READ32_HANDLER( s3c240x_usb_device_r )
1252READ32_MEMBER(gp32_state::s3c240x_usb_device_r)
12961253{
1297   gp32_state *state = space->machine().driver_data<gp32_state>();
1298   running_machine &machine = space->machine();
1299   UINT32 data = state->m_s3c240x_usb_device_regs[offset];
1300   verboselog( machine, 9, "(USB D) %08X -> %08X (PC %08X)\n", 0x15200140 + (offset << 2), data, cpu_get_pc( &space->device()));
1254   UINT32 data = m_s3c240x_usb_device_regs[offset];
1255   verboselog( machine(), 9, "(USB D) %08X -> %08X (PC %08X)\n", 0x15200140 + (offset << 2), data, cpu_get_pc( &space.device()));
13011256   return data;
13021257}
13031258
1304static WRITE32_HANDLER( s3c240x_usb_device_w )
1259WRITE32_MEMBER(gp32_state::s3c240x_usb_device_w)
13051260{
1306   gp32_state *state = space->machine().driver_data<gp32_state>();
1307   running_machine &machine = space->machine();
1308   verboselog( machine, 9, "(USB D) %08X <- %08X (PC %08X)\n", 0x15200140 + (offset << 2), data, cpu_get_pc( &space->device()));
1309   COMBINE_DATA(&state->m_s3c240x_usb_device_regs[offset]);
1261   verboselog( machine(), 9, "(USB D) %08X <- %08X (PC %08X)\n", 0x15200140 + (offset << 2), data, cpu_get_pc( &space.device()));
1262   COMBINE_DATA(&m_s3c240x_usb_device_regs[offset]);
13101263}
13111264
13121265// WATCHDOG TIMER
13131266
13141267
1315static READ32_HANDLER( s3c240x_watchdog_r )
1268READ32_MEMBER(gp32_state::s3c240x_watchdog_r)
13161269{
1317   gp32_state *state = space->machine().driver_data<gp32_state>();
1318   running_machine &machine = space->machine();
1319   UINT32 data = state->m_s3c240x_watchdog_regs[offset];
1320   verboselog( machine, 9, "(WDOG) %08X -> %08X (PC %08X)\n", 0x15300000 + (offset << 2), data, cpu_get_pc( &space->device()));
1270   UINT32 data = m_s3c240x_watchdog_regs[offset];
1271   verboselog( machine(), 9, "(WDOG) %08X -> %08X (PC %08X)\n", 0x15300000 + (offset << 2), data, cpu_get_pc( &space.device()));
13211272   return data;
13221273}
13231274
1324static WRITE32_HANDLER( s3c240x_watchdog_w )
1275WRITE32_MEMBER(gp32_state::s3c240x_watchdog_w)
13251276{
1326   gp32_state *state = space->machine().driver_data<gp32_state>();
1327   running_machine &machine = space->machine();
1328   verboselog( machine, 9, "(WDOG) %08X <- %08X (PC %08X)\n", 0x15300000 + (offset << 2), data, cpu_get_pc( &space->device()));
1329   COMBINE_DATA(&state->m_s3c240x_watchdog_regs[offset]);
1277   verboselog( machine(), 9, "(WDOG) %08X <- %08X (PC %08X)\n", 0x15300000 + (offset << 2), data, cpu_get_pc( &space.device()));
1278   COMBINE_DATA(&m_s3c240x_watchdog_regs[offset]);
13301279}
13311280
13321281// EEPROM
r14963r14964
14271376   state->m_s3c240x_iic_timer->adjust( attotime::from_msec( 1));
14281377}
14291378
1430static READ32_HANDLER( s3c240x_iic_r )
1379READ32_MEMBER(gp32_state::s3c240x_iic_r)
14311380{
1432   gp32_state *state = space->machine().driver_data<gp32_state>();
1433   running_machine &machine = space->machine();
1434   UINT32 data = state->m_s3c240x_iic_regs[offset];
1381   UINT32 data = m_s3c240x_iic_regs[offset];
14351382   switch (offset)
14361383   {
14371384      // IICSTAT
r14963r14964
14411388      }
14421389      break;
14431390   }
1444   verboselog( machine, 9, "(IIC) %08X -> %08X (PC %08X)\n", 0x15400000 + (offset << 2), data, cpu_get_pc( &space->device()));
1391   verboselog( machine(), 9, "(IIC) %08X -> %08X (PC %08X)\n", 0x15400000 + (offset << 2), data, cpu_get_pc( &space.device()));
14451392   return data;
14461393}
14471394
1448static WRITE32_HANDLER( s3c240x_iic_w )
1395WRITE32_MEMBER(gp32_state::s3c240x_iic_w)
14491396{
1450   gp32_state *state = space->machine().driver_data<gp32_state>();
1451   running_machine &machine = space->machine();
1452   verboselog( machine, 9, "(IIC) %08X <- %08X (PC %08X)\n", 0x15400000 + (offset << 2), data, cpu_get_pc( &space->device()));
1453   COMBINE_DATA(&state->m_s3c240x_iic_regs[offset]);
1397   verboselog( machine(), 9, "(IIC) %08X <- %08X (PC %08X)\n", 0x15400000 + (offset << 2), data, cpu_get_pc( &space.device()));
1398   COMBINE_DATA(&m_s3c240x_iic_regs[offset]);
14541399   switch (offset)
14551400   {
14561401      // ADDR_IICCON
r14963r14964
14701415         if (interrupt_pending_flag == 0)
14711416         {
14721417            int start_stop_condition;
1473            start_stop_condition = BIT( state->m_s3c240x_iic_regs[1], 5);
1418            start_stop_condition = BIT( m_s3c240x_iic_regs[1], 5);
14741419            if (start_stop_condition != 0)
14751420            {
1476               iic_resume( machine);
1421               iic_resume( machine());
14771422            }
14781423         }
14791424      }
r14963r14964
14851430         start_stop_condition = BIT( data, 5);
14861431         if (start_stop_condition != 0)
14871432         {
1488            iic_start( machine);
1433            iic_start( machine());
14891434         }
14901435         else
14911436         {
1492            iic_stop( machine);
1437            iic_stop( machine());
14931438         }
14941439      }
14951440      break;
r14963r14964
15831528   }
15841529}
15851530
1586static READ32_HANDLER( s3c240x_iis_r )
1531READ32_MEMBER(gp32_state::s3c240x_iis_r)
15871532{
1588   gp32_state *state = space->machine().driver_data<gp32_state>();
1589   running_machine &machine = space->machine();
1590   UINT32 data = state->m_s3c240x_iis_regs[offset];
1533   UINT32 data = m_s3c240x_iis_regs[offset];
15911534#if 0
15921535   switch (offset)
15931536   {
r14963r14964
15991542      break;
16001543   }
16011544#endif
1602   verboselog( machine, 9, "(IIS) %08X -> %08X (PC %08X)\n", 0x15508000 + (offset << 2), data, cpu_get_pc( &space->device()));
1545   verboselog( machine(), 9, "(IIS) %08X -> %08X (PC %08X)\n", 0x15508000 + (offset << 2), data, cpu_get_pc( &space.device()));
16031546   return data;
16041547}
16051548
1606static WRITE32_HANDLER( s3c240x_iis_w )
1549WRITE32_MEMBER(gp32_state::s3c240x_iis_w)
16071550{
1608   gp32_state *state = space->machine().driver_data<gp32_state>();
1609   running_machine &machine = space->machine();
1610   UINT32 old_value = state->m_s3c240x_iis_regs[offset];
1611   verboselog( machine, 9, "(IIS) %08X <- %08X (PC %08X)\n", 0x15508000 + (offset << 2), data, cpu_get_pc( &space->device()));
1612   COMBINE_DATA(&state->m_s3c240x_iis_regs[offset]);
1551   UINT32 old_value = m_s3c240x_iis_regs[offset];
1552   verboselog( machine(), 9, "(IIS) %08X <- %08X (PC %08X)\n", 0x15508000 + (offset << 2), data, cpu_get_pc( &space.device()));
1553   COMBINE_DATA(&m_s3c240x_iis_regs[offset]);
16131554   switch (offset)
16141555   {
16151556      // IISCON
16161557      case 0x00 / 4 :
16171558      {
1618         if ((old_value & 1) != (data & 1)) s3c240x_iis_recalc( machine);
1559         if ((old_value & 1) != (data & 1)) s3c240x_iis_recalc( machine());
16191560      }
16201561      break;
16211562      // IISFIF
r14963r14964
16231564      {
16241565         if (ACCESSING_BITS_16_31)
16251566         {
1626            state->m_s3c240x_iis.fifo[state->m_s3c240x_iis.fifo_index++] = BITS( data, 31, 16);
1567            m_s3c240x_iis.fifo[m_s3c240x_iis.fifo_index++] = BITS( data, 31, 16);
16271568         }
16281569         if (ACCESSING_BITS_0_15)
16291570         {
1630            state->m_s3c240x_iis.fifo[state->m_s3c240x_iis.fifo_index++] = BITS( data, 15, 0);
1571            m_s3c240x_iis.fifo[m_s3c240x_iis.fifo_index++] = BITS( data, 15, 0);
16311572         }
1632         if (state->m_s3c240x_iis.fifo_index == 2)
1573         if (m_s3c240x_iis.fifo_index == 2)
16331574         {
16341575            device_t *dac[2];
1635            dac[0] = machine.device( "dac1");
1636            dac[1] = machine.device( "dac2");
1637            state->m_s3c240x_iis.fifo_index = 0;
1638            dac_signed_data_16_w( dac[0], state->m_s3c240x_iis.fifo[0] + 0x8000);
1639            dac_signed_data_16_w( dac[1], state->m_s3c240x_iis.fifo[1] + 0x8000);
1576            dac[0] = machine().device( "dac1");
1577            dac[1] = machine().device( "dac2");
1578            m_s3c240x_iis.fifo_index = 0;
1579            dac_signed_data_16_w( dac[0], m_s3c240x_iis.fifo[0] + 0x8000);
1580            dac_signed_data_16_w( dac[1], m_s3c240x_iis.fifo[1] + 0x8000);
16401581         }
16411582      }
16421583      break;
r14963r14964
16521593// RTC
16531594
16541595
1655static READ32_HANDLER( s3c240x_rtc_r )
1596READ32_MEMBER(gp32_state::s3c240x_rtc_r)
16561597{
1657   gp32_state *state = space->machine().driver_data<gp32_state>();
1658   running_machine &machine = space->machine();
1659   UINT32 data = state->m_s3c240x_rtc_regs[offset];
1660   verboselog( machine, 9, "(RTC) %08X -> %08X (PC %08X)\n", 0x15700040 + (offset << 2), data, cpu_get_pc( &space->device()));
1598   UINT32 data = m_s3c240x_rtc_regs[offset];
1599   verboselog( machine(), 9, "(RTC) %08X -> %08X (PC %08X)\n", 0x15700040 + (offset << 2), data, cpu_get_pc( &space.device()));
16611600   return data;
16621601}
16631602
1664static WRITE32_HANDLER( s3c240x_rtc_w )
1603WRITE32_MEMBER(gp32_state::s3c240x_rtc_w)
16651604{
1666   gp32_state *state = space->machine().driver_data<gp32_state>();
1667   running_machine &machine = space->machine();
1668   verboselog( machine, 9, "(RTC) %08X <- %08X (PC %08X)\n", 0x15700040 + (offset << 2), data, cpu_get_pc( &space->device()));
1669   COMBINE_DATA(&state->m_s3c240x_rtc_regs[offset]);
1605   verboselog( machine(), 9, "(RTC) %08X <- %08X (PC %08X)\n", 0x15700040 + (offset << 2), data, cpu_get_pc( &space.device()));
1606   COMBINE_DATA(&m_s3c240x_rtc_regs[offset]);
16701607}
16711608
16721609// A/D CONVERTER
16731610
16741611
1675static READ32_HANDLER( s3c240x_adc_r )
1612READ32_MEMBER(gp32_state::s3c240x_adc_r)
16761613{
1677   gp32_state *state = space->machine().driver_data<gp32_state>();
1678   running_machine &machine = space->machine();
1679   UINT32 data = state->m_s3c240x_adc_regs[offset];
1680   verboselog( machine, 9, "(ADC) %08X -> %08X (PC %08X)\n", 0x15800000 + (offset << 2), data, cpu_get_pc( &space->device()));
1614   UINT32 data = m_s3c240x_adc_regs[offset];
1615   verboselog( machine(), 9, "(ADC) %08X -> %08X (PC %08X)\n", 0x15800000 + (offset << 2), data, cpu_get_pc( &space.device()));
16811616   return data;
16821617}
16831618
1684static WRITE32_HANDLER( s3c240x_adc_w )
1619WRITE32_MEMBER(gp32_state::s3c240x_adc_w)
16851620{
1686   gp32_state *state = space->machine().driver_data<gp32_state>();
1687   running_machine &machine = space->machine();
1688   verboselog( machine, 9, "(ADC) %08X <- %08X (PC %08X)\n", 0x15800000 + (offset << 2), data, cpu_get_pc( &space->device()));
1689   COMBINE_DATA(&state->m_s3c240x_adc_regs[offset]);
1621   verboselog( machine(), 9, "(ADC) %08X <- %08X (PC %08X)\n", 0x15800000 + (offset << 2), data, cpu_get_pc( &space.device()));
1622   COMBINE_DATA(&m_s3c240x_adc_regs[offset]);
16901623}
16911624
16921625// SPI
16931626
16941627
1695static READ32_HANDLER( s3c240x_spi_r )
1628READ32_MEMBER(gp32_state::s3c240x_spi_r)
16961629{
1697   gp32_state *state = space->machine().driver_data<gp32_state>();
1698   running_machine &machine = space->machine();
1699   UINT32 data = state->m_s3c240x_spi_regs[offset];
1700   verboselog( machine, 9, "(SPI) %08X -> %08X (PC %08X)\n", 0x15900000 + (offset << 2), data, cpu_get_pc( &space->device()));
1630   UINT32 data = m_s3c240x_spi_regs[offset];
1631   verboselog( machine(), 9, "(SPI) %08X -> %08X (PC %08X)\n", 0x15900000 + (offset << 2), data, cpu_get_pc( &space.device()));
17011632   return data;
17021633}
17031634
1704static WRITE32_HANDLER( s3c240x_spi_w )
1635WRITE32_MEMBER(gp32_state::s3c240x_spi_w)
17051636{
1706   gp32_state *state = space->machine().driver_data<gp32_state>();
1707   running_machine &machine = space->machine();
1708   verboselog( machine, 9, "(SPI) %08X <- %08X (PC %08X)\n", 0x15900000 + (offset << 2), data, cpu_get_pc( &space->device()));
1709   COMBINE_DATA(&state->m_s3c240x_spi_regs[offset]);
1637   verboselog( machine(), 9, "(SPI) %08X <- %08X (PC %08X)\n", 0x15900000 + (offset << 2), data, cpu_get_pc( &space.device()));
1638   COMBINE_DATA(&m_s3c240x_spi_regs[offset]);
17101639}
17111640
17121641// MMC INTERFACE
17131642
17141643
1715static READ32_HANDLER( s3c240x_mmc_r )
1644READ32_MEMBER(gp32_state::s3c240x_mmc_r)
17161645{
1717   gp32_state *state = space->machine().driver_data<gp32_state>();
1718   running_machine &machine = space->machine();
1719   UINT32 data = state->m_s3c240x_mmc_regs[offset];
1720   verboselog( machine, 9, "(MMC) %08X -> %08X (PC %08X)\n", 0x15A00000 + (offset << 2), data, cpu_get_pc( &space->device()));
1646   UINT32 data = m_s3c240x_mmc_regs[offset];
1647   verboselog( machine(), 9, "(MMC) %08X -> %08X (PC %08X)\n", 0x15A00000 + (offset << 2), data, cpu_get_pc( &space.device()));
17211648   return data;
17221649}
17231650
1724static WRITE32_HANDLER( s3c240x_mmc_w )
1651WRITE32_MEMBER(gp32_state::s3c240x_mmc_w)
17251652{
1726   gp32_state *state = space->machine().driver_data<gp32_state>();
1727   running_machine &machine = space->machine();
1728   verboselog( machine, 9, "(MMC) %08X <- %08X (PC %08X)\n", 0x15A00000 + (offset << 2), data, cpu_get_pc( &space->device()));
1729   COMBINE_DATA(&state->m_s3c240x_mmc_regs[offset]);
1653   verboselog( machine(), 9, "(MMC) %08X <- %08X (PC %08X)\n", 0x15A00000 + (offset << 2), data, cpu_get_pc( &space.device()));
1654   COMBINE_DATA(&m_s3c240x_mmc_regs[offset]);
17301655}
17311656
17321657// ...
r14963r14964
17641689static ADDRESS_MAP_START( gp32_map, AS_PROGRAM, 32, gp32_state )
17651690   AM_RANGE(0x00000000, 0x0007ffff) AM_ROM
17661691   AM_RANGE(0x0c000000, 0x0c7fffff) AM_RAM AM_SHARE("s3c240x_ram")
1767   AM_RANGE(0x14000000, 0x1400003b) AM_READWRITE_LEGACY(s3c240x_memcon_r, s3c240x_memcon_w)
1768   AM_RANGE(0x14200000, 0x1420005b) AM_READWRITE_LEGACY(s3c240x_usb_host_r, s3c240x_usb_host_w)
1769   AM_RANGE(0x14400000, 0x14400017) AM_READWRITE_LEGACY(s3c240x_irq_r, s3c240x_irq_w)
1770   AM_RANGE(0x14600000, 0x1460007b) AM_READWRITE_LEGACY(s3c240x_dma_r, s3c240x_dma_w)
1771   AM_RANGE(0x14800000, 0x14800017) AM_READWRITE_LEGACY(s3c240x_clkpow_r, s3c240x_clkpow_w)
1772   AM_RANGE(0x14a00000, 0x14a003ff) AM_READWRITE_LEGACY(s3c240x_lcd_r, s3c240x_lcd_w)
1773   AM_RANGE(0x14a00400, 0x14a007ff) AM_READWRITE_LEGACY(s3c240x_lcd_palette_r, s3c240x_lcd_palette_w)
1774   AM_RANGE(0x15000000, 0x1500002b) AM_READWRITE_LEGACY(s3c240x_uart_0_r, s3c240x_uart_0_w)
1775   AM_RANGE(0x15004000, 0x1500402b) AM_READWRITE_LEGACY(s3c240x_uart_1_r, s3c240x_uart_1_w)
1776   AM_RANGE(0x15100000, 0x15100043) AM_READWRITE_LEGACY(s3c240x_pwm_r, s3c240x_pwm_w)
1777   AM_RANGE(0x15200140, 0x152001fb) AM_READWRITE_LEGACY(s3c240x_usb_device_r, s3c240x_usb_device_w)
1778   AM_RANGE(0x15300000, 0x1530000b) AM_READWRITE_LEGACY(s3c240x_watchdog_r, s3c240x_watchdog_w)
1779   AM_RANGE(0x15400000, 0x1540000f) AM_READWRITE_LEGACY(s3c240x_iic_r, s3c240x_iic_w)
1780   AM_RANGE(0x15508000, 0x15508013) AM_READWRITE_LEGACY(s3c240x_iis_r, s3c240x_iis_w)
1781   AM_RANGE(0x15600000, 0x1560005b) AM_READWRITE_LEGACY(s3c240x_gpio_r, s3c240x_gpio_w)
1782   AM_RANGE(0x15700040, 0x1570008b) AM_READWRITE_LEGACY(s3c240x_rtc_r, s3c240x_rtc_w)
1783   AM_RANGE(0x15800000, 0x15800007) AM_READWRITE_LEGACY(s3c240x_adc_r, s3c240x_adc_w)
1784   AM_RANGE(0x15900000, 0x15900017) AM_READWRITE_LEGACY(s3c240x_spi_r, s3c240x_spi_w)
1785   AM_RANGE(0x15a00000, 0x15a0003f) AM_READWRITE_LEGACY(s3c240x_mmc_r, s3c240x_mmc_w)
1692   AM_RANGE(0x14000000, 0x1400003b) AM_READWRITE(s3c240x_memcon_r, s3c240x_memcon_w)
1693   AM_RANGE(0x14200000, 0x1420005b) AM_READWRITE(s3c240x_usb_host_r, s3c240x_usb_host_w)
1694   AM_RANGE(0x14400000, 0x14400017) AM_READWRITE(s3c240x_irq_r, s3c240x_irq_w)
1695   AM_RANGE(0x14600000, 0x1460007b) AM_READWRITE(s3c240x_dma_r, s3c240x_dma_w)
1696   AM_RANGE(0x14800000, 0x14800017) AM_READWRITE(s3c240x_clkpow_r, s3c240x_clkpow_w)
1697   AM_RANGE(0x14a00000, 0x14a003ff) AM_READWRITE(s3c240x_lcd_r, s3c240x_lcd_w)
1698   AM_RANGE(0x14a00400, 0x14a007ff) AM_READWRITE(s3c240x_lcd_palette_r, s3c240x_lcd_palette_w)
1699   AM_RANGE(0x15000000, 0x1500002b) AM_READWRITE(s3c240x_uart_0_r, s3c240x_uart_0_w)
1700   AM_RANGE(0x15004000, 0x1500402b) AM_READWRITE(s3c240x_uart_1_r, s3c240x_uart_1_w)
1701   AM_RANGE(0x15100000, 0x15100043) AM_READWRITE(s3c240x_pwm_r, s3c240x_pwm_w)
1702   AM_RANGE(0x15200140, 0x152001fb) AM_READWRITE(s3c240x_usb_device_r, s3c240x_usb_device_w)
1703   AM_RANGE(0x15300000, 0x1530000b) AM_READWRITE(s3c240x_watchdog_r, s3c240x_watchdog_w)
1704   AM_RANGE(0x15400000, 0x1540000f) AM_READWRITE(s3c240x_iic_r, s3c240x_iic_w)
1705   AM_RANGE(0x15508000, 0x15508013) AM_READWRITE(s3c240x_iis_r, s3c240x_iis_w)
1706   AM_RANGE(0x15600000, 0x1560005b) AM_READWRITE(s3c240x_gpio_r, s3c240x_gpio_w)
1707   AM_RANGE(0x15700040, 0x1570008b) AM_READWRITE(s3c240x_rtc_r, s3c240x_rtc_w)
1708   AM_RANGE(0x15800000, 0x15800007) AM_READWRITE(s3c240x_adc_r, s3c240x_adc_w)
1709   AM_RANGE(0x15900000, 0x15900017) AM_READWRITE(s3c240x_spi_r, s3c240x_spi_w)
1710   AM_RANGE(0x15a00000, 0x15a0003f) AM_READWRITE(s3c240x_mmc_r, s3c240x_mmc_w)
17861711ADDRESS_MAP_END
17871712
17881713static INPUT_PORTS_START( gp32 )
src/mess/drivers/partner.c
r14963r14964
3636   AM_RANGE( 0xd000, 0xd7ff ) AM_RAMBANK("bank10")
3737   AM_RANGE( 0xd800, 0xd8ff ) AM_DEVREADWRITE_LEGACY("i8275", i8275_r, i8275_w)  // video
3838   AM_RANGE( 0xd900, 0xd9ff ) AM_DEVREADWRITE("ppi8255_1", i8255_device, read, write)
39   AM_RANGE( 0xda00, 0xdaff ) AM_WRITE_LEGACY(partner_mem_page_w)
39   AM_RANGE( 0xda00, 0xdaff ) AM_WRITE(partner_mem_page_w)
4040   AM_RANGE( 0xdb00, 0xdbff ) AM_DEVWRITE_LEGACY("dma8257", i8257_w)    // DMA
4141   AM_RANGE( 0xdc00, 0xddff ) AM_RAMBANK("bank11")
42   AM_RANGE( 0xde00, 0xdeff ) AM_WRITE_LEGACY(partner_win_memory_page_w)
42   AM_RANGE( 0xde00, 0xdeff ) AM_WRITE(partner_win_memory_page_w)
4343   AM_RANGE( 0xe000, 0xe7ff ) AM_RAMBANK("bank12")
4444   AM_RANGE( 0xe800, 0xffff ) AM_RAMBANK("bank13")
4545ADDRESS_MAP_END
src/mess/drivers/apple1.c
r14963r14964
140140   AM_RANGE(0x0000, 0xbfff) AM_NOP
141141
142142   /* Cassette interface I/O space: */
143   AM_RANGE(0xc000, 0xc0ff) AM_READWRITE_LEGACY(apple1_cassette_r, apple1_cassette_w)
143   AM_RANGE(0xc000, 0xc0ff) AM_READWRITE(apple1_cassette_r, apple1_cassette_w)
144144   /* Cassette interface ROM: */
145145   AM_RANGE(0xc100, 0xc1ff) AM_ROM
146146
src/mess/drivers/hec2hrp.c
r14963r14964
120120/*****************************************************************************/
121121   ADDRESS_MAP_UNMAP_HIGH
122122   /* Hardware address mapping*/
123   AM_RANGE(0x0800,0x0808) AM_WRITE_LEGACY(hector_switch_bank_w)/* Bank management*/
124   AM_RANGE(0x1000,0x1000) AM_WRITE_LEGACY(hector_color_a_w)  /* Color c0/c1*/
125   AM_RANGE(0x1800,0x1800) AM_WRITE_LEGACY(hector_color_b_w)  /* Color c2/c3*/
126   AM_RANGE(0x2000,0x2003) AM_WRITE_LEGACY(hector_sn_2000_w)  /* Sound*/
127   AM_RANGE(0x2800,0x2803) AM_WRITE_LEGACY(hector_sn_2800_w)  /* Sound*/
128   AM_RANGE(0x3000,0x3000) AM_READWRITE_LEGACY(hector_cassette_r, hector_sn_3000_w)/* Write necessary*/
129   AM_RANGE(0x3800,0x3807) AM_READWRITE_LEGACY(hector_keyboard_r, hector_keyboard_w)  /* Keyboard*/
123   AM_RANGE(0x0800,0x0808) AM_WRITE(hector_switch_bank_w)/* Bank management*/
124   AM_RANGE(0x1000,0x1000) AM_WRITE(hector_color_a_w)  /* Color c0/c1*/
125   AM_RANGE(0x1800,0x1800) AM_WRITE(hector_color_b_w)  /* Color c2/c3*/
126   AM_RANGE(0x2000,0x2003) AM_WRITE(hector_sn_2000_w)  /* Sound*/
127   AM_RANGE(0x2800,0x2803) AM_WRITE(hector_sn_2800_w)  /* Sound*/
128   AM_RANGE(0x3000,0x3000) AM_READWRITE(hector_cassette_r, hector_sn_3000_w)/* Write necessary*/
129   AM_RANGE(0x3800,0x3807) AM_READWRITE(hector_keyboard_r, hector_keyboard_w)  /* Keyboard*/
130130
131131   /* Main ROM page*/
132132   AM_RANGE(0x0000,0x3fff) AM_ROM
r14963r14964
144144/*****************************************************************************/
145145   ADDRESS_MAP_UNMAP_HIGH
146146   /* Hardware address mapping*/
147   AM_RANGE(0x0800,0x0808) AM_WRITE_LEGACY(hector_switch_bank_w)/* Bank management*/
148   AM_RANGE(0x1000,0x1000) AM_WRITE_LEGACY(hector_color_a_w)  /* Color c0/c1*/
149   AM_RANGE(0x1800,0x1800) AM_WRITE_LEGACY(hector_color_b_w)  /* Color c2/c3*/
150   AM_RANGE(0x2000,0x2003) AM_WRITE_LEGACY(hector_sn_2000_w)  /* Sound*/
151   AM_RANGE(0x2800,0x2803) AM_WRITE_LEGACY(hector_sn_2800_w)  /* Sound*/
152   AM_RANGE(0x3000,0x3000) AM_READWRITE_LEGACY(hector_cassette_r, hector_sn_3000_w)/* Write necessary*/
153   AM_RANGE(0x3800,0x3807) AM_READWRITE_LEGACY(hector_keyboard_r, hector_keyboard_w)  /* Keyboard*/
147   AM_RANGE(0x0800,0x0808) AM_WRITE(hector_switch_bank_w)/* Bank management*/
148   AM_RANGE(0x1000,0x1000) AM_WRITE(hector_color_a_w)  /* Color c0/c1*/
149   AM_RANGE(0x1800,0x1800) AM_WRITE(hector_color_b_w)  /* Color c2/c3*/
150   AM_RANGE(0x2000,0x2003) AM_WRITE(hector_sn_2000_w)  /* Sound*/
151   AM_RANGE(0x2800,0x2803) AM_WRITE(hector_sn_2800_w)  /* Sound*/
152   AM_RANGE(0x3000,0x3000) AM_READWRITE(hector_cassette_r, hector_sn_3000_w)/* Write necessary*/
153   AM_RANGE(0x3800,0x3807) AM_READWRITE(hector_keyboard_r, hector_keyboard_w)  /* Keyboard*/
154154
155155   /* Main ROM page*/
156156   AM_RANGE(0x0000,0x3fff) AM_ROMBANK("bank2")
r14963r14964
166166static ADDRESS_MAP_START( hec2hrp_io , AS_IO, 8, hec2hrp_state )
167167   ADDRESS_MAP_UNMAP_HIGH
168168   ADDRESS_MAP_GLOBAL_MASK(0xff)
169   AM_RANGE(0x000,0x0ff) AM_READWRITE_LEGACY(hector_io_8255_r, hector_io_8255_w )
169   AM_RANGE(0x000,0x0ff) AM_READWRITE(hector_io_8255_r, hector_io_8255_w )
170170ADDRESS_MAP_END
171171
172172static ADDRESS_MAP_START( hec2hrx_io , AS_IO, 8, hec2hrp_state )
173173   ADDRESS_MAP_UNMAP_HIGH
174174   ADDRESS_MAP_GLOBAL_MASK(0xff)
175   AM_RANGE(0x0f0,0x0ff) AM_READWRITE_LEGACY(hector_io_8255_r, hector_io_8255_w )
175   AM_RANGE(0x0f0,0x0ff) AM_READWRITE(hector_io_8255_r, hector_io_8255_w )
176176ADDRESS_MAP_END
177177
178178static ADDRESS_MAP_START( hec2mdhrx_io , AS_IO, 8, hec2hrp_state )
r14963r14964
180180   ADDRESS_MAP_GLOBAL_MASK(0xff)
181181
182182   // Minidisc commands and changing the rom page !*/
183   AM_RANGE(0x000,0x0EF) AM_READWRITE_LEGACY(hector_179x_register_r,hector_179x_register_w)/* 179x registers*/
184   AM_RANGE(0x0f0,0x0ff) AM_READWRITE_LEGACY(hector_io_8255_r, hector_io_8255_w )
183   AM_RANGE(0x000,0x0EF) AM_READWRITE(hector_179x_register_r,hector_179x_register_w)/* 179x registers*/
184   AM_RANGE(0x0f0,0x0ff) AM_READWRITE(hector_io_8255_r, hector_io_8255_w )
185185ADDRESS_MAP_END
186186
187187static ADDRESS_MAP_START( hec2mx40_io , AS_IO, 8, hec2hrp_state )
188188   ADDRESS_MAP_UNMAP_HIGH
189189   ADDRESS_MAP_GLOBAL_MASK(0xff)
190   AM_RANGE(0x000,0x0ef) AM_WRITE_LEGACY(hector_mx40_io_port_w )
191   AM_RANGE(0x0f0,0x0f3) AM_READWRITE_LEGACY(hector_io_8255_r, hector_io_8255_w )
190   AM_RANGE(0x000,0x0ef) AM_WRITE(hector_mx40_io_port_w )
191   AM_RANGE(0x0f0,0x0f3) AM_READWRITE(hector_io_8255_r, hector_io_8255_w )
192192ADDRESS_MAP_END
193193
194194static ADDRESS_MAP_START( hec2mx80_io , AS_IO, 8, hec2hrp_state )
195195   ADDRESS_MAP_UNMAP_HIGH
196196   ADDRESS_MAP_GLOBAL_MASK(0xff)
197   AM_RANGE(0x000,0x0ef) AM_WRITE_LEGACY(hector_mx80_io_port_w )
198   AM_RANGE(0x0f0,0x0f3) AM_READWRITE_LEGACY(hector_io_8255_r, hector_io_8255_w )
197   AM_RANGE(0x000,0x0ef) AM_WRITE(hector_mx80_io_port_w )
198   AM_RANGE(0x0f0,0x0f3) AM_READWRITE(hector_io_8255_r, hector_io_8255_w )
199199
200200
201201ADDRESS_MAP_END
src/mess/drivers/craft.c
r14963r14964
6969   emu_timer* m_timer2_timer;
7070   UINT8 m_timer2_top;
7171   INT32 m_timer2_increment;
72   DECLARE_READ8_MEMBER(avr8_read);
73   DECLARE_WRITE8_MEMBER(avr8_write);
7274};
7375
7476void craft_state::machine_start()
r14963r14964
200202    */
201203}
202204
203static READ8_HANDLER( avr8_read )
205READ8_MEMBER(craft_state::avr8_read)
204206{
205    craft_state *state = space->machine().driver_data<craft_state>();
206207
207208   if(offset <= Avr8::REGIDX_R31)
208209   {
209      return state->m_regs[offset];
210      return m_regs[offset];
210211   }
211212
212213    switch( offset )
r14963r14964
214215      case Avr8::REGIDX_SPL:
215216      case Avr8::REGIDX_SPH:
216217      case Avr8::REGIDX_SREG:
217         return state->m_regs[offset];
218         return m_regs[offset];
218219
219220        default:
220            verboselog(space->machine(), 0, "AVR8: Unrecognized register read: %02x\n", offset );
221            verboselog(machine(), 0, "AVR8: Unrecognized register read: %02x\n", offset );
221222    }
222223
223224    return 0;
r14963r14964
831832   verboselog(machine, 0, "avr8_update_ocr1: TODO: new OCR1%c = %04x\n", avr8_reg_name[reg], newval);
832833}
833834
834static WRITE8_HANDLER( avr8_write )
835WRITE8_MEMBER(craft_state::avr8_write)
835836{
836    craft_state *state = space->machine().driver_data<craft_state>();
837
837   craft_state *state = machine().driver_data<craft_state>();
838838   if(offset <= Avr8::REGIDX_R31)
839839   {
840      state->m_regs[offset] = data;
840      m_regs[offset] = data;
841841      return;
842842   }
843843
844844    switch( offset )
845845    {
846846      case Avr8::REGIDX_OCR1BH:
847         verboselog(space->machine(), 0, "AVR8: OCR1BH = %02x\n", data );
848         avr8_update_ocr1(space->machine(), (AVR8_OCR1B & 0x00ff) | (data << 8), AVR8_REG_B);
847         verboselog(machine(), 0, "AVR8: OCR1BH = %02x\n", data );
848         avr8_update_ocr1(machine(), (AVR8_OCR1B & 0x00ff) | (data << 8), AVR8_REG_B);
849849         break;
850850
851851      case Avr8::REGIDX_OCR1BL:
852         verboselog(space->machine(), 0, "AVR8: OCR1BL = %02x\n", data );
853         avr8_update_ocr1(space->machine(), (AVR8_OCR1B & 0xff00) | data, AVR8_REG_B);
852         verboselog(machine(), 0, "AVR8: OCR1BL = %02x\n", data );
853         avr8_update_ocr1(machine(), (AVR8_OCR1B & 0xff00) | data, AVR8_REG_B);
854854         break;
855855
856856      case Avr8::REGIDX_OCR1AH:
857         verboselog(space->machine(), 0, "AVR8: OCR1AH = %02x\n", data );
858         avr8_update_ocr1(space->machine(), (AVR8_OCR1A & 0x00ff) | (data << 8), AVR8_REG_A);
857         verboselog(machine(), 0, "AVR8: OCR1AH = %02x\n", data );
858         avr8_update_ocr1(machine(), (AVR8_OCR1A & 0x00ff) | (data << 8), AVR8_REG_A);
859859         break;
860860
861861      case Avr8::REGIDX_OCR1AL:
862         verboselog(space->machine(), 0, "AVR8: OCR1AL = %02x\n", data );
863         avr8_update_ocr1(space->machine(), (AVR8_OCR1A & 0xff00) | data, AVR8_REG_A);
862         verboselog(machine(), 0, "AVR8: OCR1AL = %02x\n", data );
863         avr8_update_ocr1(machine(), (AVR8_OCR1A & 0xff00) | data, AVR8_REG_A);
864864         break;
865865
866866      case Avr8::REGIDX_TCCR1B:
867         verboselog(space->machine(), 0, "AVR8: TCCR1B = %02x\n", data );
868         avr8_changed_tccr1b(space->machine(), data);
867         verboselog(machine(), 0, "AVR8: TCCR1B = %02x\n", data );
868         avr8_changed_tccr1b(machine(), data);
869869         break;
870870
871871      case Avr8::REGIDX_TCCR1A:
872         verboselog(space->machine(), 0, "AVR8: TCCR1A = %02x\n", data );
873         avr8_changed_tccr1a(space->machine(), data);
872         verboselog(machine(), 0, "AVR8: TCCR1A = %02x\n", data );
873         avr8_changed_tccr1a(machine(), data);
874874         break;
875875
876876      case Avr8::REGIDX_TIMSK1:
877         verboselog(space->machine(), 0, "AVR8: TIMSK1 = %02x\n", data );
878         avr8_change_timsk1(space->machine(), data);
877         verboselog(machine(), 0, "AVR8: TIMSK1 = %02x\n", data );
878         avr8_change_timsk1(machine(), data);
879879         break;
880880
881881      case Avr8::REGIDX_TCCR2B:
882         verboselog(space->machine(), 0, "AVR8: TCCR2B = %02x\n", data );
883         avr8_changed_tccr2b(space->machine(), data);
882         verboselog(machine(), 0, "AVR8: TCCR2B = %02x\n", data );
883         avr8_changed_tccr2b(machine(), data);
884884         break;
885885
886886      case Avr8::REGIDX_TCCR2A:
887         verboselog(space->machine(), 0, "AVR8: TCCR2A = %02x\n", data );
888         avr8_changed_tccr2a(space->machine(), data);
887         verboselog(machine(), 0, "AVR8: TCCR2A = %02x\n", data );
888         avr8_changed_tccr2a(machine(), data);
889889         break;
890890
891891      case Avr8::REGIDX_SPL:
892892      case Avr8::REGIDX_SPH:
893893      case Avr8::REGIDX_SREG:
894         state->m_regs[offset] = data;
894         m_regs[offset] = data;
895895         break;
896896
897897      case Avr8::REGIDX_SPSR:
898         avr8_change_spsr(space->machine(), data);
898         avr8_change_spsr(machine(), data);
899899         break;
900900
901901      case Avr8::REGIDX_SPCR:
902         avr8_change_spcr(space->machine(), data);
902         avr8_change_spcr(machine(), data);
903903         break;
904904
905905      case Avr8::REGIDX_DDRD:
906         avr8_change_ddr(space->machine(), AVR8_REG_D, data);
906         avr8_change_ddr(machine(), AVR8_REG_D, data);
907907         break;
908908
909909      case Avr8::REGIDX_DDRC:
910         avr8_change_ddr(space->machine(), AVR8_REG_C, data);
910         avr8_change_ddr(machine(), AVR8_REG_C, data);
911911         break;
912912
913913      case Avr8::REGIDX_PORTB:
914         avr8_change_port(space->machine(), AVR8_REG_B, data);
914         avr8_change_port(machine(), AVR8_REG_B, data);
915915         break;
916916
917917      case Avr8::REGIDX_DDRB:
918         avr8_change_ddr(space->machine(), AVR8_REG_B, data);
918         avr8_change_ddr(machine(), AVR8_REG_B, data);
919919         break;
920920
921921        default:
922            verboselog(space->machine(), 0, "AVR8: Unrecognized register write: %02x = %02x\n", offset, data );
922            verboselog(machine(), 0, "AVR8: Unrecognized register write: %02x = %02x\n", offset, data );
923923    }
924924}
925925
r14963r14964
932932ADDRESS_MAP_END
933933
934934static ADDRESS_MAP_START( craft_io_map, AS_IO, 8, craft_state )
935    AM_RANGE(0x0000, 0x00ff) AM_READWRITE_LEGACY(avr8_read, avr8_write)
935    AM_RANGE(0x0000, 0x00ff) AM_READWRITE(avr8_read, avr8_write)
936936    AM_RANGE(0x0100, 0x04ff) AM_RAM
937937ADDRESS_MAP_END
938938
src/mess/drivers/mtx.c
r14963r14964
5656
5757static ADDRESS_MAP_START( mtx_io, AS_IO, 8, mtx_state )
5858   ADDRESS_MAP_GLOBAL_MASK(0xff)
59   AM_RANGE(0x00, 0x00) AM_DEVREAD_LEGACY(CENTRONICS_TAG, mtx_strobe_r) AM_WRITE_LEGACY(mtx_bankswitch_w)
59   AM_RANGE(0x00, 0x00) AM_DEVREAD_LEGACY(CENTRONICS_TAG, mtx_strobe_r) AM_WRITE(mtx_bankswitch_w)
6060   AM_RANGE(0x01, 0x01) AM_DEVREADWRITE("tms9929a", tms9929a_device, vram_read, vram_write)
6161   AM_RANGE(0x02, 0x02) AM_DEVREADWRITE("tms9929a", tms9929a_device, register_read, register_write)
6262   AM_RANGE(0x03, 0x03) AM_DEVREAD_LEGACY(SN76489A_TAG, mtx_sound_strobe_r) AM_DEVWRITE_LEGACY(CASSETTE_TAG, mtx_cst_w)
6363   AM_RANGE(0x04, 0x04) AM_DEVREAD_LEGACY(CENTRONICS_TAG, mtx_prt_r)
6464   AM_RANGE(0x04, 0x04) AM_DEVWRITE(CENTRONICS_TAG, centronics_device, write)
65   AM_RANGE(0x05, 0x05) AM_READWRITE_LEGACY(mtx_key_lo_r, mtx_sense_w)
66   AM_RANGE(0x06, 0x06) AM_READWRITE_LEGACY(mtx_key_hi_r, mtx_sound_latch_w)
65   AM_RANGE(0x05, 0x05) AM_READWRITE(mtx_key_lo_r, mtx_sense_w)
66   AM_RANGE(0x06, 0x06) AM_READWRITE(mtx_key_hi_r, mtx_sound_latch_w)
6767//  AM_RANGE(0x07, 0x07) PIO
6868   AM_RANGE(0x08, 0x0b) AM_DEVREADWRITE_LEGACY(Z80CTC_TAG, z80ctc_r, z80ctc_w)
69   AM_RANGE(0x30, 0x31) AM_WRITE_LEGACY(hrx_address_w)
70   AM_RANGE(0x32, 0x32) AM_READWRITE_LEGACY(hrx_data_r, hrx_data_w)
71   AM_RANGE(0x33, 0x33) AM_READWRITE_LEGACY(hrx_attr_r, hrx_attr_w)
69   AM_RANGE(0x30, 0x31) AM_WRITE(hrx_address_w)
70   AM_RANGE(0x32, 0x32) AM_READWRITE(hrx_data_r, hrx_data_w)
71   AM_RANGE(0x33, 0x33) AM_READWRITE(hrx_attr_r, hrx_attr_w)
7272//  AM_RANGE(0x38, 0x38) AM_DEVWRITE_LEGACY(MC6845_TAG, mc6845_address_w)
7373//  AM_RANGE(0x39, 0x39) AM_DEVWRITE_LEGACY(MC6845_TAG, mc6845_register_r, mc6845_register_w)
7474/*  AM_RANGE(0x40, 0x43) AM_DEVREADWRITE_LEGACY(FD1791_TAG, wd17xx_r, wd17xx_w)
src/mess/drivers/elwro800.c
r14963r14964
4646   UINT8 m_df_on_databus;
4747   
4848   DECLARE_DIRECT_UPDATE_MEMBER(elwro800_direct_handler);
49   DECLARE_WRITE8_MEMBER(elwro800jr_fdc_control_w);
50   DECLARE_READ8_MEMBER(elwro800jr_io_r);
51   DECLARE_WRITE8_MEMBER(elwro800jr_io_w);
4952};
5053
5154
r14963r14964
8184   {FLOPPY_0,FLOPPY_1, NULL, NULL}
8285};
8386
84static WRITE8_HANDLER(elwro800jr_fdc_control_w)
87WRITE8_MEMBER(elwro800_state::elwro800jr_fdc_control_w)
8588{
86   device_t *fdc = space->machine().device("upd765");
89   device_t *fdc = machine().device("upd765");
8790
88   floppy_mon_w(floppy_get_device(space->machine(), 0), !BIT(data, 0));
89   floppy_mon_w(floppy_get_device(space->machine(), 1), !BIT(data, 1));
90   floppy_drive_set_ready_state(floppy_get_device(space->machine(), 0), 1,1);
91   floppy_drive_set_ready_state(floppy_get_device(space->machine(), 1), 1,1);
91   floppy_mon_w(floppy_get_device(machine(), 0), !BIT(data, 0));
92   floppy_mon_w(floppy_get_device(machine(), 1), !BIT(data, 1));
93   floppy_drive_set_ready_state(floppy_get_device(machine(), 0), 1,1);
94   floppy_drive_set_ready_state(floppy_get_device(machine(), 1), 1,1);
9295
9396   upd765_tc_w(fdc, data & 0x04);
9497
r14963r14964
220223 *  0x??FE, 0x??7F, 0x??7B (read): keyboard reading
221224 *************************************/
222225
223static READ8_HANDLER(elwro800jr_io_r)
226READ8_MEMBER(elwro800_state::elwro800jr_io_r)
224227{
225   UINT8 *prom = space->machine().region("proms")->base();
228   UINT8 *prom = machine().region("proms")->base();
226229   UINT8 cs = prom[offset & 0x1ff];
227   elwro800_state *state = space->machine().driver_data<elwro800_state>();
228230
229231   if (!BIT(cs,0))
230232   {
r14963r14964
234236      int i;
235237      char port_name[6] = "LINE0";
236238
237      if ( !state->m_NR )
239      if ( !m_NR )
238240      {
239241         for (i = 0; i < 9; mask >>= 1, i++)
240242         {
r14963r14964
248250               {
249251                  port_name[4] = '0' + (7 - i);
250252               }
251               data &= (input_port_read(space->machine(), port_name));
253               data &= (input_port_read(machine(), port_name));
252254            }
253255         }
254256
255257         if ((offset & 0xff) == 0xfb)
256258         {
257            data &= input_port_read(space->machine(), "LINE9");
259            data &= input_port_read(machine(), "LINE9");
258260         }
259261
260262         /* cassette input from wav */
261         if ((space->machine().device<cassette_image_device>(CASSETTE_TAG))->input() > 0.0038 )
263         if ((machine().device<cassette_image_device>(CASSETTE_TAG))->input() > 0.0038 )
262264         {
263265            data &= ~0x40;
264266         }
265267      }
266268      else
267269      {
268         data = input_port_read(space->machine(), "NETWORK ID");
270         data = input_port_read(machine(), "NETWORK ID");
269271      }
270272
271273      return data;
r14963r14964
277279   else if (!BIT(cs,2))
278280   {
279281      // CS55
280      i8255_device *ppi = space->machine().device<i8255_device>("ppi8255");
281      return ppi->read(*space, (offset & 0x03) ^ 0x03);
282      i8255_device *ppi = machine().device<i8255_device>("ppi8255");
283      return ppi->read(space, (offset & 0x03) ^ 0x03);
282284   }
283285   else if (!BIT(cs,3))
284286   {
285287      // CSFDC
286      device_t *fdc = space->machine().device("upd765");
288      device_t *fdc = machine().device("upd765");
287289      if (offset & 1)
288290      {
289291         return upd765_data_r(fdc,0);
r14963r14964
296298   else if (!BIT(cs,4))
297299   {
298300      // CS51
299      i8251_device *usart = space->machine().device<i8251_device>("i8251");
301      i8251_device *usart = machine().device<i8251_device>("i8251");
300302      if (offset & 1)
301303      {
302         return usart->status_r(*space, 0);
304         return usart->status_r(space, 0);
303305      }
304306      else
305307      {
306         return usart->data_r(*space, 0);
308         return usart->data_r(space, 0);
307309      }
308310   }
309311   else if (!BIT(cs,5))
r14963r14964
317319   return 0x00;
318320}
319321
320static WRITE8_HANDLER(elwro800jr_io_w)
322WRITE8_MEMBER(elwro800_state::elwro800jr_io_w)
321323{
322   UINT8 *prom = space->machine().region("proms")->base();
324   UINT8 *prom = machine().region("proms")->base();
323325   UINT8 cs = prom[offset & 0x1ff];
324326
325327   if (!BIT(cs,0))
r14963r14964
330332   else if (!BIT(cs,1))
331333   {
332334      // CF7
333      elwro800jr_mmu_w(space->machine(), data);
335      elwro800jr_mmu_w(machine(), data);
334336   }
335337   else if (!BIT(cs,2))
336338   {
337339      // CS55
338      i8255_device *ppi = space->machine().device<i8255_device>("ppi8255");
339      ppi->write(*space, (offset & 0x03) ^ 0x03, data);
340      i8255_device *ppi = machine().device<i8255_device>("ppi8255");
341      ppi->write(space, (offset & 0x03) ^ 0x03, data);
340342   }
341343   else if (!BIT(cs,3))
342344   {
343345      // CSFDC
344      device_t *fdc = space->machine().device("upd765");
346      device_t *fdc = machine().device("upd765");
345347      if (offset & 1)
346348      {
347349         upd765_data_w(fdc, 0, data);
r14963r14964
350352   else if (!BIT(cs,4))
351353   {
352354      // CS51
353      i8251_device *usart = space->machine().device<i8251_device>("i8251");
355      i8251_device *usart = machine().device<i8251_device>("i8251");
354356      if (offset & 1)
355357      {
356         usart->control_w(*space, 0, data);
358         usart->control_w(space, 0, data);
357359      }
358360      else
359361      {
360         usart->data_w(*space, 0, data);
362         usart->data_w(space, 0, data);
361363      }
362364   }
363365   else if (!BIT(cs,5))
r14963r14964
384386ADDRESS_MAP_END
385387
386388static ADDRESS_MAP_START(elwro800_io, AS_IO, 8, elwro800_state )
387   AM_RANGE(0x0000, 0xffff) AM_READWRITE_LEGACY(elwro800jr_io_r, elwro800jr_io_w)
389   AM_RANGE(0x0000, 0xffff) AM_READWRITE(elwro800jr_io_r, elwro800jr_io_w)
388390ADDRESS_MAP_END
389391
390392/*************************************
src/mess/drivers/mikro80.c
r14963r14964
2929
3030static ADDRESS_MAP_START( mikro80_io , AS_IO, 8, mikro80_state )
3131   ADDRESS_MAP_UNMAP_HIGH
32   AM_RANGE( 0x01, 0x01) AM_READWRITE_LEGACY(mikro80_tape_r, mikro80_tape_w )
33   AM_RANGE( 0x04, 0x07) AM_READWRITE_LEGACY(mikro80_keyboard_r, mikro80_keyboard_w )
32   AM_RANGE( 0x01, 0x01) AM_READWRITE(mikro80_tape_r, mikro80_tape_w )
33   AM_RANGE( 0x04, 0x07) AM_READWRITE(mikro80_keyboard_r, mikro80_keyboard_w )
3434ADDRESS_MAP_END
3535
3636static WRITE8_DEVICE_HANDLER( radio99_dac_w )   { dac_data_w(device, data); }
3737
3838static ADDRESS_MAP_START( radio99_io , AS_IO, 8, mikro80_state )
3939   ADDRESS_MAP_UNMAP_HIGH
40   AM_RANGE( 0x01, 0x01) AM_READWRITE_LEGACY(mikro80_tape_r, mikro80_tape_w )
40   AM_RANGE( 0x01, 0x01) AM_READWRITE(mikro80_tape_r, mikro80_tape_w )
4141   AM_RANGE( 0x04, 0x04) AM_DEVWRITE_LEGACY("dac", radio99_dac_w )
42   AM_RANGE( 0x05, 0x05) AM_READWRITE_LEGACY(mikro80_8255_portc_r, mikro80_8255_portc_w )
43   AM_RANGE( 0x06, 0x06) AM_READ_LEGACY(mikro80_8255_portb_r)
44   AM_RANGE( 0x07, 0x07) AM_WRITE_LEGACY(mikro80_8255_porta_w)
42   AM_RANGE( 0x05, 0x05) AM_READWRITE(mikro80_8255_portc_r, mikro80_8255_portc_w )
43   AM_RANGE( 0x06, 0x06) AM_READ(mikro80_8255_portb_r)
44   AM_RANGE( 0x07, 0x07) AM_WRITE(mikro80_8255_porta_w)
4545ADDRESS_MAP_END
4646
4747/* Input ports */
src/mess/drivers/rmnimbus.c
r14963r14964
6767   AY8910_DEFAULT_LOADS,
6868   DEVCB_NULL,                       /* portA read */
6969   DEVCB_NULL,                /* portB read */
70   DEVCB_MEMORY_HANDLER(MAINCPU_TAG, PROGRAM, nimbus_sound_ay8910_porta_w),   /* portA write */
71   DEVCB_MEMORY_HANDLER(MAINCPU_TAG, PROGRAM, nimbus_sound_ay8910_portb_w)    /* portB write */
70   DEVCB_DRIVER_MEMBER(rmnimbus_state, nimbus_sound_ay8910_porta_w),   /* portA write */
71   DEVCB_DRIVER_MEMBER(rmnimbus_state, nimbus_sound_ay8910_portb_w)    /* portB write */
7272};
7373
7474static const msm5205_interface msm5205_config =
r14963r14964
115115ADDRESS_MAP_END
116116
117117static ADDRESS_MAP_START(nimbus_io, AS_IO, 16, rmnimbus_state )
118    AM_RANGE( 0x0000, 0x0031) AM_READWRITE_LEGACY(nimbus_video_io_r, nimbus_video_io_w)
119    AM_RANGE( 0x0032, 0x007f) AM_READWRITE_LEGACY(nimbus_io_r, nimbus_io_w)
120    AM_RANGE( 0x0080, 0x0081) AM_READWRITE8_LEGACY(nimbus_mcu_r, nimbus_mcu_w, 0x00FF)
121    AM_RANGE( 0x0092, 0x0093) AM_READWRITE8_LEGACY(nimbus_iou_r, nimbus_iou_w, 0x00FF)
122    AM_RANGE( 0x00A4, 0x00A5) AM_READWRITE8_LEGACY(nimbus_mouse_js_r, nimbus_mouse_js_w, 0x00FF)
123    AM_RANGE( 0X00c0, 0X00cf) AM_READWRITE8_LEGACY(nimbus_pc8031_r, nimbus_pc8031_w, 0x00FF)
124    AM_RANGE( 0X00e0, 0X00ef) AM_READWRITE8_LEGACY(nimbus_sound_ay8910_r, nimbus_sound_ay8910_w, 0x00FF)
118    AM_RANGE( 0x0000, 0x0031) AM_READWRITE(nimbus_video_io_r, nimbus_video_io_w)
119    AM_RANGE( 0x0032, 0x007f) AM_READWRITE(nimbus_io_r, nimbus_io_w)
120    AM_RANGE( 0x0080, 0x0081) AM_READWRITE8(nimbus_mcu_r, nimbus_mcu_w, 0x00FF)
121    AM_RANGE( 0x0092, 0x0093) AM_READWRITE8(nimbus_iou_r, nimbus_iou_w, 0x00FF)
122    AM_RANGE( 0x00A4, 0x00A5) AM_READWRITE8(nimbus_mouse_js_r, nimbus_mouse_js_w, 0x00FF)
123    AM_RANGE( 0X00c0, 0X00cf) AM_READWRITE8(nimbus_pc8031_r, nimbus_pc8031_w, 0x00FF)
124    AM_RANGE( 0X00e0, 0X00ef) AM_READWRITE8(nimbus_sound_ay8910_r, nimbus_sound_ay8910_w, 0x00FF)
125125    AM_RANGE( 0x00f0, 0x00f7) AM_DEVREADWRITE8_LEGACY(Z80SIO_TAG, z80sio_cd_ba_r, z80sio_cd_ba_w, 0x00ff)
126    AM_RANGE( 0x0400, 0x041f) AM_READWRITE8_LEGACY(nimbus_disk_r, nimbus_disk_w, 0x00FF)
126    AM_RANGE( 0x0400, 0x041f) AM_READWRITE8(nimbus_disk_r, nimbus_disk_w, 0x00FF)
127127   AM_RANGE( 0x0480, 0x049f) AM_DEVREADWRITE8(VIA_TAG, via6522_device, read, write, 0x00FF)
128   AM_RANGE( 0xff00, 0xffff) AM_READWRITE_LEGACY(nimbus_i186_internal_port_r, nimbus_i186_internal_port_w)/* CPU 80186         */
128   AM_RANGE( 0xff00, 0xffff) AM_READWRITE(nimbus_i186_internal_port_r, nimbus_i186_internal_port_w)/* CPU 80186         */
129129ADDRESS_MAP_END
130130
131131static INPUT_PORTS_START( nimbus )
r14963r14964
279279
280280static ADDRESS_MAP_START( nimbus_iocpu_io , AS_IO, 8, rmnimbus_state )
281281   ADDRESS_MAP_UNMAP_HIGH
282   AM_RANGE(0x00000, 0x000FF) AM_READWRITE_LEGACY(nimbus_pc8031_iou_r, nimbus_pc8031_iou_w)
282   AM_RANGE(0x00000, 0x000FF) AM_READWRITE(nimbus_pc8031_iou_r, nimbus_pc8031_iou_w)
283283   AM_RANGE(0x00010, 0x07fff) AM_RAM
284   AM_RANGE(0x20000, 0x20004) AM_READWRITE_LEGACY(nimbus_pc8031_port_r, nimbus_pc8031_port_w)
284   AM_RANGE(0x20000, 0x20004) AM_READWRITE(nimbus_pc8031_port_r, nimbus_pc8031_port_w)
285285ADDRESS_MAP_END
286286
287287
src/mess/drivers/pp01.c
r14963r14964
3636static ADDRESS_MAP_START( pp01_io, AS_IO, 8, pp01_state )
3737   AM_RANGE(0xc0, 0xc3) AM_DEVREADWRITE("ppi8255", i8255_device, read, write)
3838   //AM_RANGE(0xc4, 0xc7) AM_DEVREADWRITE("ppi8255", i8255_device, read, write)
39   AM_RANGE(0xcc, 0xcf) AM_WRITE_LEGACY(pp01_video_write_mode_w)
39   AM_RANGE(0xcc, 0xcf) AM_WRITE(pp01_video_write_mode_w)
4040   AM_RANGE(0xd0, 0xd3) AM_DEVREADWRITE_LEGACY("pit8253", pit8253_r, pit8253_w)
41   AM_RANGE(0xe0, 0xef) AM_READWRITE_LEGACY(pp01_mem_block_r, pp01_mem_block_w)
42   AM_RANGE(0xf0, 0xff) AM_READWRITE_LEGACY(pp01_mem_block_r, pp01_mem_block_w)
41   AM_RANGE(0xe0, 0xef) AM_READWRITE(pp01_mem_block_r, pp01_mem_block_w)
42   AM_RANGE(0xf0, 0xff) AM_READWRITE(pp01_mem_block_r, pp01_mem_block_w)
4343ADDRESS_MAP_END
4444
4545/* Input ports */
src/mess/drivers/svision.c
r14963r14964
2222#define XSIZE (state->m_reg[0]&~3)
2323#define XPOS state->m_reg[2]
2424#define YPOS state->m_reg[3]
25#define BANK state->m_reg[0x26]
25#define BANK m_reg[0x26]
2626
2727static TIMER_CALLBACK(svision_pet_timer)
2828{
r14963r14964
5959void svision_irq(running_machine &machine)
6060{
6161   svision_state *state = machine.driver_data<svision_state>();
62   int irq = state->m_svision.timer_shot && (BANK & 2);
63   irq = irq || (*state->m_dma_finished && (BANK & 4));
62   int irq = state->m_svision.timer_shot && (state->BANK & 2);
63   irq = irq || (*state->m_dma_finished && (state->BANK & 4));
6464
6565   cputag_set_input_line(machine, "maincpu", M6502_IRQ_LINE, irq ? ASSERT_LINE : CLEAR_LINE);
6666}
r14963r14964
7373    svision_irq( machine );
7474}
7575
76static READ8_HANDLER(svision_r)
76READ8_MEMBER(svision_state::svision_r)
7777{
78   svision_state *state = space->machine().driver_data<svision_state>();
79   int data = state->m_reg[offset];
78   int data = m_reg[offset];
8079   switch (offset)
8180   {
8281      case 0x20:
83         data = input_port_read(space->machine(), "JOY");
82         data = input_port_read(machine(), "JOY");
8483         break;
8584      case 0x21:
8685         data &= ~0xf;
87         data |= state->m_reg[0x22] & 0xf;
88         if (state->m_pet.on)
86         data |= m_reg[0x22] & 0xf;
87         if (m_pet.on)
8988         {
90            if (!state->m_pet.clock)
89            if (!m_pet.clock)
9190               data &= ~4;
92            if (!state->m_pet.data)
91            if (!m_pet.data)
9392               data &= ~8;
9493         }
9594         break;
9695      case 0x27:
9796         data &= ~3;
98         if (state->m_svision.timer_shot)
97         if (m_svision.timer_shot)
9998            data|=1;
100         if (*state->m_dma_finished)
99         if (*m_dma_finished)
101100            data|=2;
102101         break;
103102      case 0x24:
104         state->m_svision.timer_shot = FALSE;
105         svision_irq(space->machine());
103         m_svision.timer_shot = FALSE;
104         svision_irq(machine());
106105         break;
107106      case 0x25:
108         *state->m_dma_finished = FALSE;
109         svision_irq(space->machine());
107         *m_dma_finished = FALSE;
108         svision_irq(machine());
110109         break;
111110      default:
112         logerror("%.6f svision read %04x %02x\n", space->machine().time().as_double(),offset,data);
111         logerror("%.6f svision read %04x %02x\n", machine().time().as_double(),offset,data);
113112         break;
114113   }
115114
116115   return data;
117116}
118117
119static WRITE8_HANDLER(svision_w)
118WRITE8_MEMBER(svision_state::svision_w)
120119{
121   svision_state *state = space->machine().driver_data<svision_state>();
122120   int value;
123121   int delay;
124122
125   state->m_reg[offset] = data;
123   m_reg[offset] = data;
126124
127125   switch (offset)
128126   {
r14963r14964
130128      case 3:
131129         break;
132130      case 0x26: /* bits 5,6 memory management for a000? */
133         logerror("%.6f svision write %04x %02x\n", space->machine().time().as_double(),offset,data);
134         memory_set_bankptr(space->machine(), "bank1", space->machine().region("user1")->base() + ((state->m_reg[0x26] & 0xe0) << 9));
135         svision_irq(space->machine());
131         logerror("%.6f svision write %04x %02x\n", machine().time().as_double(),offset,data);
132         memory_set_bankptr(machine(), "bank1", machine().region("user1")->base() + ((m_reg[0x26] & 0xe0) << 9));
133         svision_irq(machine());
136134         break;
137135      case 0x23: /* delta hero irq routine write */
138136         value = data;
r14963r14964
142140            delay = 16384;
143141         else
144142            delay = 256;
145         state->m_svision.timer1->enable(TRUE);
146         state->m_svision.timer1->reset(space->machine().device<cpu_device>("maincpu")->cycles_to_attotime(value * delay));
143         m_svision.timer1->enable(TRUE);
144         m_svision.timer1->reset(machine().device<cpu_device>("maincpu")->cycles_to_attotime(value * delay));
147145         break;
148146      case 0x10: case 0x11: case 0x12: case 0x13:
149         svision_soundport_w(state->m_sound, 0, offset & 3, data);
147         svision_soundport_w(m_sound, 0, offset & 3, data);
150148         break;
151149      case 0x14: case 0x15: case 0x16: case 0x17:
152         svision_soundport_w(state->m_sound, 1, offset & 3, data);
150         svision_soundport_w(m_sound, 1, offset & 3, data);
153151         break;
154152      case 0x18: case 0x19: case 0x1a: case 0x1b: case 0x1c:
155         svision_sounddma_w(state->m_sound, offset - 0x18, data);
153         svision_sounddma_w(m_sound, offset - 0x18, data);
156154         break;
157155      case 0x28: case 0x29: case 0x2a:
158         svision_noise_w(state->m_sound, offset - 0x28, data);
156         svision_noise_w(m_sound, offset - 0x28, data);
159157         break;
160158      default:
161         logerror("%.6f svision write %04x %02x\n", space->machine().time().as_double(), offset, data);
159         logerror("%.6f svision write %04x %02x\n", machine().time().as_double(), offset, data);
162160         break;
163161   }
164162}
165163
166static READ8_HANDLER(tvlink_r)
164READ8_MEMBER(svision_state::tvlink_r)
167165{
168166   switch(offset)
169167   {
r14963r14964
180178   }
181179}
182180
183static WRITE8_HANDLER(tvlink_w)
181WRITE8_MEMBER(svision_state::tvlink_w)
184182{
185   svision_state *state = space->machine().driver_data<svision_state>();
186183   switch (offset)
187184   {
188185      case 0x0e:
189         state->m_reg[offset] = data;
190         state->m_tvlink.palette_on = data & 1;
191         if (state->m_tvlink.palette_on)
186         m_reg[offset] = data;
187         m_tvlink.palette_on = data & 1;
188         if (m_tvlink.palette_on)
192189         {
193190            // hack, normally initialising with palette from ram
194            state->m_tvlink.palette[0] = MAKE12_RGB32(163/16,172/16,115/16); // these are the tron colors messured from screenshot
195            state->m_tvlink.palette[1] = MAKE12_RGB32(163/16,155/16,153/16);
196            state->m_tvlink.palette[2] = MAKE12_RGB32(77/16,125/16,73/16);
197            state->m_tvlink.palette[3] = MAKE12_RGB32(59/16,24/16,20/16);
191            m_tvlink.palette[0] = MAKE12_RGB32(163/16,172/16,115/16); // these are the tron colors messured from screenshot
192            m_tvlink.palette[1] = MAKE12_RGB32(163/16,155/16,153/16);
193            m_tvlink.palette[2] = MAKE12_RGB32(77/16,125/16,73/16);
194            m_tvlink.palette[3] = MAKE12_RGB32(59/16,24/16,20/16);
198195         }
199196         else
200197         {
201198            // cleaner to use colors from compile time palette, or compose from "fixed" palette values
202            state->m_tvlink.palette[0]=MAKE12_RGB32(0,0,0);
203            state->m_tvlink.palette[1]=MAKE12_RGB32(5*16/256,18*16/256,9*16/256);
204            state->m_tvlink.palette[2]=MAKE12_RGB32(48*16/256,76*16/256,100*16/256);
205            state->m_tvlink.palette[3]=MAKE12_RGB32(190*16/256,190*16/256,190*16/256);
199            m_tvlink.palette[0]=MAKE12_RGB32(0,0,0);
200            m_tvlink.palette[1]=MAKE12_RGB32(5*16/256,18*16/256,9*16/256);
201            m_tvlink.palette[2]=MAKE12_RGB32(48*16/256,76*16/256,100*16/256);
202            m_tvlink.palette[3]=MAKE12_RGB32(190*16/256,190*16/256,190*16/256);
206203         }
207204         break;
208205      default:
r14963r14964
213210            if (offset == 0x803 && data == 0x07)
214211            {
215212               /* tron hack */
216               state->m_reg[0x0804]=0x00;
217               state->m_reg[0x0805]=0x01;
218               state->m_reg[0x0806]=0x00;
219               state->m_reg[0x0807]=0x00;
213               m_reg[0x0804]=0x00;
214               m_reg[0x0805]=0x01;
215               m_reg[0x0806]=0x00;
216               m_reg[0x0807]=0x00;
220217            }
221            c = state->m_reg[0x800] | (state->m_reg[0x804] << 8);
222            state->m_tvlink.palette[0] = MAKE9_RGB32( (c>>0)&7, (c>>3)&7, (c>>6)&7);
223            c = state->m_reg[0x801] | (state->m_reg[0x805] << 8);
224            state->m_tvlink.palette[1] = MAKE9_RGB32( (c>>0)&7, (c>>3)&7, (c>>6)&7);
225            c = state->m_reg[0x802] | (state->m_reg[0x806]<<8);
226            state->m_tvlink.palette[2]=MAKE9_RGB32( (c>>0)&7, (c>>3)&7, (c>>6)&7);
227            c = state->m_reg[0x803] | (state->m_reg[0x807]<<8);
228            state->m_tvlink.palette[3]=MAKE9_RGB32( (c>>0)&7, (c>>3)&7, (c>>6)&7);
218            c = m_reg[0x800] | (m_reg[0x804] << 8);
219            m_tvlink.palette[0] = MAKE9_RGB32( (c>>0)&7, (c>>3)&7, (c>>6)&7);
220            c = m_reg[0x801] | (m_reg[0x805] << 8);
221            m_tvlink.palette[1] = MAKE9_RGB32( (c>>0)&7, (c>>3)&7, (c>>6)&7);
222            c = m_reg[0x802] | (m_reg[0x806]<<8);
223            m_tvlink.palette[2]=MAKE9_RGB32( (c>>0)&7, (c>>3)&7, (c>>6)&7);
224            c = m_reg[0x803] | (m_reg[0x807]<<8);
225            m_tvlink.palette[3]=MAKE9_RGB32( (c>>0)&7, (c>>3)&7, (c>>6)&7);
229226            /* writes to palette effect video color immediately */
230227            /* some writes modify other registers, */
231228            /* encoding therefor not known (rgb8 or rgb9) */
r14963r14964
235232
236233static ADDRESS_MAP_START( svision_mem , AS_PROGRAM, 8, svision_state )
237234   AM_RANGE( 0x0000, 0x1fff) AM_RAM
238   AM_RANGE( 0x2000, 0x3fff) AM_READWRITE_LEGACY(svision_r, svision_w) AM_SHARE("reg")
235   AM_RANGE( 0x2000, 0x3fff) AM_READWRITE(svision_r, svision_w) AM_SHARE("reg")
239236   AM_RANGE( 0x4000, 0x5fff) AM_RAM AM_SHARE("videoram")
240237   AM_RANGE( 0x6000, 0x7fff) AM_NOP
241238   AM_RANGE( 0x8000, 0xbfff) AM_ROMBANK("bank1")
r14963r14964
244241
245242static ADDRESS_MAP_START( tvlink_mem , AS_PROGRAM, 8, svision_state )
246243   AM_RANGE( 0x0000, 0x1fff) AM_RAM
247   AM_RANGE( 0x2000, 0x3fff) AM_READWRITE_LEGACY(tvlink_r, tvlink_w) AM_SHARE("reg")
244   AM_RANGE( 0x2000, 0x3fff) AM_READWRITE(tvlink_r, tvlink_w) AM_SHARE("reg")
248245   AM_RANGE( 0x4000, 0x5fff) AM_RAM AM_SHARE("videoram")
249246   AM_RANGE( 0x6000, 0x7fff) AM_NOP
250247   AM_RANGE( 0x8000, 0xbfff) AM_ROMBANK("bank1")
r14963r14964
359356   int x, y, i, j=XPOS/4+YPOS*0x30;
360357   UINT8 *videoram = state->m_videoram;
361358
362   if (BANK&8)
359   if (state->BANK&8)
363360   {
364361      for (y=0; y<160; y++)
365362      {
r14963r14964
391388   int x, y, i, j = XPOS/4+YPOS*0x30;
392389   UINT8 *videoram = state->m_videoram;
393390
394   if (BANK & 8)
391   if (state->BANK & 8)
395392   {
396393      for (y = 0; y < 160; y++)
397394      {
r14963r14964
420417static INTERRUPT_GEN( svision_frame_int )
421418{
422419   svision_state *state = device->machine().driver_data<svision_state>();
423   if (BANK&1)
420   if (state->BANK&1)
424421      device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
425422
426423   svision_sound_decrement(state->m_sound);
src/mess/drivers/busicom.c
r14963r14964
1919   }
2020   return 0;
2121}
22static READ8_HANDLER(keyboard_r)
22READ8_MEMBER(busicom_state::keyboard_r)
2323{
24   busicom_state *state = space->machine().driver_data<busicom_state>();
2524   static const char *const keynames[] = { "LINE0", "LINE1", "LINE2", "LINE3", "LINE4", "LINE5", "LINE6", "LINE7", "LINE8" , "LINE9"};
26   return input_port_read(space->machine(),keynames[get_bit_selected(state->m_keyboard_shifter & 0x3ff,10)]);
25   return input_port_read(machine(),keynames[get_bit_selected(m_keyboard_shifter & 0x3ff,10)]);
2726}
2827
29static READ8_HANDLER(printer_r)
28READ8_MEMBER(busicom_state::printer_r)
3029{
31   busicom_state *state = space->machine().driver_data<busicom_state>();
3230   UINT8 retVal = 0;
33   if (state->m_drum_index==0) retVal |= 1;
34   retVal |= input_port_read(space->machine(),"PAPERADV") & 1 ? 8 : 0;
31   if (m_drum_index==0) retVal |= 1;
32   retVal |= input_port_read(machine(),"PAPERADV") & 1 ? 8 : 0;
3533   return retVal;
3634}
3735
3836
39static WRITE8_HANDLER(shifter_w)
37WRITE8_MEMBER(busicom_state::shifter_w)
4038{
41   busicom_state *state = space->machine().driver_data<busicom_state>();
4239   if (BIT(data,0)) {
43      state->m_keyboard_shifter <<= 1;
44      state->m_keyboard_shifter |= BIT(data,1);
40      m_keyboard_shifter <<= 1;
41      m_keyboard_shifter |= BIT(data,1);
4542   }
4643   if (BIT(data,2)) {
47      state->m_printer_shifter <<= 1;
48      state->m_printer_shifter |= BIT(data,1);
44      m_printer_shifter <<= 1;
45      m_printer_shifter |= BIT(data,1);
4946   }
5047}
5148
52static WRITE8_HANDLER(printer_w)
49WRITE8_MEMBER(busicom_state::printer_w)
5350{
54   busicom_state *state = space->machine().driver_data<busicom_state>();
5551   int i,j;
5652   if (BIT(data,0)) {
57      logerror("color : %02x %02x %d\n",BIT(data,0),data,state->m_drum_index);
58      state->m_printer_line_color[10] = 1;
53      logerror("color : %02x %02x %d\n",BIT(data,0),data,m_drum_index);
54      m_printer_line_color[10] = 1;
5955
6056   }
6157   if (BIT(data,1)) {
6258      for(i=3;i<18;i++) {
63         if(BIT(state->m_printer_shifter,i)) {
64            state->m_printer_line[10][i-3] = state->m_drum_index + 1;
59         if(BIT(m_printer_shifter,i)) {
60            m_printer_line[10][i-3] = m_drum_index + 1;
6561         }
6662      }
67      if(BIT(state->m_printer_shifter,0)) {
68         state->m_printer_line[10][15] = state->m_drum_index + 13 + 1;
63      if(BIT(m_printer_shifter,0)) {
64         m_printer_line[10][15] = m_drum_index + 13 + 1;
6965      }
70      if(BIT(state->m_printer_shifter,1)) {
71         state->m_printer_line[10][16] = state->m_drum_index + 26 + 1;
66      if(BIT(m_printer_shifter,1)) {
67         m_printer_line[10][16] = m_drum_index + 26 + 1;
7268      }
7369   }
7470   if (BIT(data,3)) {
7571
7672      for(j=0;j<10;j++) {
7773         for(i=0;i<17;i++) {
78            state->m_printer_line[j][i] = state->m_printer_line[j+1][i];
79            state->m_printer_line_color[j] = state->m_printer_line_color[j+1];
74            m_printer_line[j][i] = m_printer_line[j+1][i];
75            m_printer_line_color[j] = m_printer_line_color[j+1];
8076         }
8177      }
8278      for(i=0;i<17;i++) {
83         state->m_printer_line[10][i] = 0;
79         m_printer_line[10][i] = 0;
8480      }
85      state->m_printer_line_color[10] = 0;
81      m_printer_line_color[10] = 0;
8682
8783   }
8884}
89static WRITE8_HANDLER(status_w)
85WRITE8_MEMBER(busicom_state::status_w)
9086{
9187#if 0
9288   UINT8 mem_lamp = BIT(data,0);
r14963r14964
9692   //logerror("status %c %c %c\n",mem_lamp ? 'M':'x',over_lamp ? 'O':'x',minus_lamp ? '-':'x');
9793}
9894
99static WRITE8_HANDLER(printer_ctrl_w)
95WRITE8_MEMBER(busicom_state::printer_ctrl_w)
10096{
10197}
10298
r14963r14964
112108
113109static ADDRESS_MAP_START( busicom_io , AS_IO, 8, busicom_state )
114110   ADDRESS_MAP_UNMAP_HIGH
115   AM_RANGE(0x00, 0x00) AM_WRITE_LEGACY(shifter_w) // ROM0 I/O
116   AM_RANGE(0x01, 0x01) AM_READWRITE_LEGACY(keyboard_r,printer_ctrl_w) // ROM1 I/O
117   AM_RANGE(0x02, 0x02) AM_READ_LEGACY(printer_r)  // ROM2 I/O
118   AM_RANGE(0x10, 0x10) AM_WRITE_LEGACY(printer_w) // RAM0 output
119   AM_RANGE(0x11, 0x11) AM_WRITE_LEGACY(status_w)  // RAM1 output
111   AM_RANGE(0x00, 0x00) AM_WRITE(shifter_w) // ROM0 I/O
112   AM_RANGE(0x01, 0x01) AM_READWRITE(keyboard_r,printer_ctrl_w) // ROM1 I/O
113   AM_RANGE(0x02, 0x02) AM_READ(printer_r)  // ROM2 I/O
114   AM_RANGE(0x10, 0x10) AM_WRITE(printer_w) // RAM0 output
115   AM_RANGE(0x11, 0x11) AM_WRITE(status_w)  // RAM1 output
120116ADDRESS_MAP_END
121117
122118/* Input ports */
src/mess/drivers/pc.c
r14963r14964
157157   AM_RANGE(0x0020, 0x0021) AM_DEVREADWRITE_LEGACY("pic8259", pic8259_r, pic8259_w)
158158   AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE_LEGACY("pit8253", pit8253_r, pit8253_w)
159159   AM_RANGE(0x0060, 0x0063) AM_DEVREADWRITE("ppi8255", i8255_device, read, write)
160   AM_RANGE(0x0080, 0x0087) AM_READWRITE_LEGACY(pc_page_r,         pc_page_w)
161   AM_RANGE(0x00a0, 0x00a0) AM_WRITE_LEGACY(pc_nmi_enable_w )
160   AM_RANGE(0x0080, 0x0087) AM_READWRITE(pc_page_r,         pc_page_w)
161   AM_RANGE(0x00a0, 0x00a0) AM_WRITE(pc_nmi_enable_w )
162162   AM_RANGE(0x0200, 0x0207) AM_READWRITE_LEGACY(pc_JOY_r,            pc_JOY_w)
163   AM_RANGE(0x0240, 0x0257) AM_READWRITE_LEGACY(pc_rtc_r,            pc_rtc_w)
163   AM_RANGE(0x0240, 0x0257) AM_READWRITE(pc_rtc_r,            pc_rtc_w)
164164   AM_RANGE(0x0278, 0x027b) AM_DEVREADWRITE_LEGACY("lpt_2", pc_lpt_r, pc_lpt_w)
165165   AM_RANGE(0x02e8, 0x02ef) AM_DEVREADWRITE("ins8250_3", ins8250_device, ins8250_r, ins8250_w)
166166   AM_RANGE(0x02f8, 0x02ff) AM_DEVREADWRITE("ins8250_1", ins8250_device, ins8250_r, ins8250_w)
r14963r14964
183183   AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE8_LEGACY("pit8253", pit8253_r, pit8253_w, 0xffff)
184184   AM_RANGE(0x0060, 0x0063) AM_DEVREADWRITE8("ppi8255", i8255_device, read, write, 0xffff)
185185   AM_RANGE(0x0070, 0x007f) AM_RAM // needed for Poisk-2
186   AM_RANGE(0x0080, 0x0087) AM_READWRITE8_LEGACY(pc_page_r,            pc_page_w, 0xffff)
187   AM_RANGE(0x00a0, 0x00a1) AM_WRITE8_LEGACY(pc_nmi_enable_w, 0x00ff )
186   AM_RANGE(0x0080, 0x0087) AM_READWRITE8(pc_page_r,            pc_page_w, 0xffff)
187   AM_RANGE(0x00a0, 0x00a1) AM_WRITE8(pc_nmi_enable_w, 0x00ff )
188188   AM_RANGE(0x0200, 0x0207) AM_READWRITE_LEGACY(pc16le_JOY_r,            pc16le_JOY_w)
189   AM_RANGE(0x0240, 0x0257) AM_READWRITE_LEGACY(pc16le_rtc_r,            pc16le_rtc_w)
189   AM_RANGE(0x0240, 0x0257) AM_READWRITE8(pc_rtc_r,            pc_rtc_w, 0xffff)
190190   AM_RANGE(0x0278, 0x027b) AM_DEVREADWRITE8_LEGACY("lpt_2", pc_lpt_r, pc_lpt_w, 0x00ff)
191191   AM_RANGE(0x02b0, 0x02bf) AM_RAM // needed for EC-18xx
192192   AM_RANGE(0x02e8, 0x02ef) AM_DEVREADWRITE8("ins8250_3", ins8250_device, ins8250_r, ins8250_w, 0xffff)
r14963r14964
207207   AM_RANGE(0xfc000, 0xfffff) AM_ROM
208208ADDRESS_MAP_END
209209
210static READ8_HANDLER( unk_r )
210READ8_MEMBER(pc_state::unk_r)
211211{
212212   return 0;
213213}
r14963r14964
219219   AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE8_LEGACY("pit8253", pit8253_r, pit8253_w, 0xffff)
220220   AM_RANGE(0x0060, 0x0063) AM_DEVREADWRITE8("ppi8255", i8255_device, read, write, 0xffff)
221221   AM_RANGE(0x0070, 0x007f) AM_RAM // needed for Poisk-2
222   AM_RANGE(0x0080, 0x0087) AM_READWRITE8_LEGACY(pc_page_r,            pc_page_w, 0xffff)
223   AM_RANGE(0x00a0, 0x00a1) AM_READWRITE8_LEGACY(unk_r, pc_nmi_enable_w, 0x00ff )
222   AM_RANGE(0x0080, 0x0087) AM_READWRITE8(pc_page_r,            pc_page_w, 0xffff)
223   AM_RANGE(0x00a0, 0x00a1) AM_READWRITE8(unk_r, pc_nmi_enable_w, 0x00ff )
224224   AM_RANGE(0x0200, 0x0207) AM_READWRITE_LEGACY(pc16le_JOY_r,            pc16le_JOY_w)
225   AM_RANGE(0x0240, 0x0257) AM_READWRITE_LEGACY(pc16le_rtc_r,            pc16le_rtc_w)
225   AM_RANGE(0x0240, 0x0257) AM_READWRITE8(pc_rtc_r,            pc_rtc_w, 0xffff)
226226   AM_RANGE(0x0278, 0x027b) AM_DEVREADWRITE8_LEGACY("lpt_2", pc_lpt_r, pc_lpt_w, 0x00ff)
227227   AM_RANGE(0x02b0, 0x02bf) AM_RAM // needed for EC-18xx
228228   AM_RANGE(0x02e8, 0x02ef) AM_DEVREADWRITE8("ins8250_3", ins8250_device, ins8250_r, ins8250_w, 0xffff)
r14963r14964
252252   AM_RANGE(0x0020, 0x0021) AM_DEVREADWRITE_LEGACY("pic8259", pic8259_r, pic8259_w)
253253   AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE_LEGACY("pit8253", pit8253_r, pit8253_w)
254254   AM_RANGE(0x0060, 0x0063) AM_READWRITE_LEGACY(europc_pio_r,         europc_pio_w)
255   AM_RANGE(0x0080, 0x0087) AM_READWRITE_LEGACY(pc_page_r,         pc_page_w)
255   AM_RANGE(0x0080, 0x0087) AM_READWRITE(pc_page_r,         pc_page_w)
256256   AM_RANGE(0x0200, 0x0207) AM_READWRITE_LEGACY(pc_JOY_r,            pc_JOY_w)
257257   AM_RANGE(0x0250, 0x025f) AM_READWRITE_LEGACY(europc_jim_r,         europc_jim_w)
258258   AM_RANGE(0x0278, 0x027b) AM_DEVREADWRITE_LEGACY("lpt_2", pc_lpt_r, pc_lpt_w)
r14963r14964
286286   AM_RANGE(0x0020, 0x0021) AM_DEVREADWRITE_LEGACY("pic8259", pic8259_r, pic8259_w)
287287   AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE_LEGACY("pit8253", pit8253_r, pit8253_w)
288288   AM_RANGE(0x0060, 0x0063) AM_READWRITE_LEGACY(tandy1000_pio_r,         tandy1000_pio_w)
289   AM_RANGE(0x0080, 0x0087) AM_READWRITE_LEGACY(pc_page_r,            pc_page_w)
289   AM_RANGE(0x0080, 0x0087) AM_READWRITE(pc_page_r,            pc_page_w)
290290   AM_RANGE(0x00c0, 0x00c0) AM_DEVWRITE_LEGACY("sn76496",   sn76496_w)
291291   AM_RANGE(0x0200, 0x0207) AM_READWRITE_LEGACY(pc_JOY_r,               pc_JOY_w)
292292   AM_RANGE(0x02f8, 0x02ff) AM_DEVREADWRITE("ins8250_1", ins8250_device, ins8250_r, ins8250_w)
r14963r14964
316316   AM_RANGE(0x0020, 0x0021) AM_DEVREADWRITE8_LEGACY("pic8259", pic8259_r, pic8259_w, 0xffff)
317317   AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE8_LEGACY("pit8253", pit8253_r, pit8253_w, 0xffff)
318318   AM_RANGE(0x0060, 0x0063) AM_READWRITE8_LEGACY(tandy1000_pio_r,         tandy1000_pio_w, 0xffff)
319   AM_RANGE(0x0080, 0x0087) AM_READWRITE8_LEGACY(pc_page_r,            pc_page_w, 0xffff)
319   AM_RANGE(0x0080, 0x0087) AM_READWRITE8(pc_page_r,            pc_page_w, 0xffff)
320320   AM_RANGE(0x00c0, 0x00c1) AM_DEVWRITE8_LEGACY("sn76496",   sn76496_w, 0xffff)
321321   AM_RANGE(0x0200, 0x0207) AM_READWRITE8_LEGACY(pc_JOY_r,               pc_JOY_w, 0xffff)
322322   AM_RANGE(0x02f8, 0x02ff) AM_DEVREADWRITE8("ins8250_1", ins8250_device, ins8250_r, ins8250_w, 0xffff)
r14963r14964
347347   AM_RANGE(0x0020, 0x0021) AM_DEVREADWRITE8_LEGACY("pic8259", pic8259_r, pic8259_w, 0xffff)
348348   AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE8_LEGACY("pit8253", pit8253_r, pit8253_w, 0xffff)
349349   AM_RANGE(0x0060, 0x0063) AM_READWRITE8_LEGACY(tandy1000_pio_r,         tandy1000_pio_w, 0xffff)
350   AM_RANGE(0x0080, 0x0087) AM_READWRITE8_LEGACY(pc_page_r,               pc_page_w, 0xffff)
350   AM_RANGE(0x0080, 0x0087) AM_READWRITE8(pc_page_r,               pc_page_w, 0xffff)
351351   AM_RANGE(0x00c0, 0x00c1) AM_DEVWRITE8_LEGACY("sn76496",    sn76496_w, 0xffff)
352352   AM_RANGE(0x0200, 0x0207) AM_READWRITE8_LEGACY(pc_JOY_r,                    pc_JOY_w, 0xffff)
353353   AM_RANGE(0x02f8, 0x02ff) AM_DEVREADWRITE8("ins8250_1", ins8250_device, ins8250_r, ins8250_w, 0xffff)
r14963r14964
376376   AM_RANGE(0x0020, 0x0021) AM_DEVREADWRITE_LEGACY("pic8259", pic8259_r, pic8259_w)
377377   AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE_LEGACY("pit8253", pit8253_r, pit8253_w)
378378   AM_RANGE(0x0060, 0x0063) AM_DEVREADWRITE("ppi8255", i8255_device, read, write)
379   AM_RANGE(0x0080, 0x0087) AM_READWRITE_LEGACY(pc_page_r,            pc_page_w)
380   AM_RANGE(0x00a0, 0x00a0) AM_READWRITE_LEGACY(pcjr_nmi_enable_r, pc_nmi_enable_w )
379   AM_RANGE(0x0080, 0x0087) AM_READWRITE(pc_page_r,            pc_page_w)
380   AM_RANGE(0x00a0, 0x00a0) AM_READWRITE(pcjr_nmi_enable_r, pc_nmi_enable_w )
381381   AM_RANGE(0x00c0, 0x00c0) AM_DEVWRITE_LEGACY("sn76496",   sn76496_w)
382382   AM_RANGE(0x00f0, 0x00f7) AM_READWRITE_LEGACY(pc_fdc_r,               pcjr_fdc_w)
383383   AM_RANGE(0x0200, 0x0207) AM_READWRITE_LEGACY(pc_JOY_r,               pc_JOY_w)
r14963r14964
728728
729729static const kb_keytronic_interface pc_keytronic_intf =
730730{
731   DEVCB_MEMORY_HANDLER("maincpu", IO, ibm5150_kb_set_clock_signal),
732   DEVCB_MEMORY_HANDLER("maincpu", IO, ibm5150_kb_set_data_signal),
731   DEVCB_DRIVER_MEMBER(pc_state, ibm5150_kb_set_clock_signal),
732   DEVCB_DRIVER_MEMBER(pc_state, ibm5150_kb_set_data_signal),
733733};
734734
735735
src/mess/drivers/pecom.c
r14963r14964
2424ADDRESS_MAP_END
2525
2626static ADDRESS_MAP_START( pecom64_io, AS_IO, 8, pecom_state )
27   AM_RANGE(0x01, 0x01) AM_WRITE_LEGACY(pecom_bank_w)
28   AM_RANGE(0x03, 0x03) AM_READ_LEGACY(pecom_keyboard_r)
29   AM_RANGE(0x03, 0x07) AM_WRITE_LEGACY(pecom_cdp1869_w)
27   AM_RANGE(0x01, 0x01) AM_WRITE(pecom_bank_w)
28   AM_RANGE(0x03, 0x03) AM_READ(pecom_keyboard_r)
29   AM_RANGE(0x03, 0x07) AM_WRITE(pecom_cdp1869_w)
3030ADDRESS_MAP_END
3131
3232/* Input ports */
src/mess/drivers/pce.c
r14963r14964
7272   AM_RANGE( 0x0D0000, 0x0FFFFF) AM_ROMBANK("bank4")
7373   AM_RANGE( 0x100000, 0x10FFFF) AM_RAM AM_SHARE("cd_ram")
7474   AM_RANGE( 0x110000, 0x1EDFFF) AM_NOP
75   AM_RANGE( 0x1EE000, 0x1EE7FF) AM_ROMBANK("bank10") AM_WRITE_LEGACY(pce_cd_bram_w )
75   AM_RANGE( 0x1EE000, 0x1EE7FF) AM_ROMBANK("bank10") AM_WRITE(pce_cd_bram_w )
7676   AM_RANGE( 0x1EE800, 0x1EFFFF) AM_NOP
7777   AM_RANGE( 0x1F0000, 0x1F1FFF) AM_RAM AM_MIRROR(0x6000) AM_SHARE("user_ram")
7878   AM_RANGE( 0x1FE000, 0x1FE3FF) AM_READWRITE_LEGACY(vdc_0_r, vdc_0_w )
7979   AM_RANGE( 0x1FE400, 0x1FE7FF) AM_READWRITE_LEGACY(vce_r, vce_w )
8080   AM_RANGE( 0x1FE800, 0x1FEBFF) AM_DEVREADWRITE_LEGACY(C6280_TAG, c6280_r, c6280_w )
8181   AM_RANGE( 0x1FEC00, 0x1FEFFF) AM_READWRITE_LEGACY(h6280_timer_r, h6280_timer_w )
82   AM_RANGE( 0x1FF000, 0x1FF3FF) AM_READWRITE_LEGACY(mess_pce_joystick_r, mess_pce_joystick_w )
82   AM_RANGE( 0x1FF000, 0x1FF3FF) AM_READWRITE(mess_pce_joystick_r, mess_pce_joystick_w )
8383   AM_RANGE( 0x1FF400, 0x1FF7FF) AM_READWRITE_LEGACY(h6280_irq_status_r, h6280_irq_status_w )
84   AM_RANGE( 0x1FF800, 0x1FFBFF) AM_READWRITE_LEGACY(pce_cd_intf_r, pce_cd_intf_w )
84   AM_RANGE( 0x1FF800, 0x1FFBFF) AM_READWRITE(pce_cd_intf_r, pce_cd_intf_w )
8585ADDRESS_MAP_END
8686
8787static ADDRESS_MAP_START( pce_io , AS_IO, 8, pce_state )
r14963r14964
9595   AM_RANGE( 0x0D0000, 0x0FFFFF) AM_ROMBANK("bank4")
9696   AM_RANGE( 0x100000, 0x10FFFF) AM_RAM AM_SHARE("cd_ram")
9797   AM_RANGE( 0x110000, 0x1EDFFF) AM_NOP
98   AM_RANGE( 0x1EE000, 0x1EE7FF) AM_ROMBANK("bank10") AM_WRITE_LEGACY(pce_cd_bram_w )
98   AM_RANGE( 0x1EE000, 0x1EE7FF) AM_ROMBANK("bank10") AM_WRITE(pce_cd_bram_w )
9999   AM_RANGE( 0x1EE800, 0x1EFFFF) AM_NOP
100100   AM_RANGE( 0x1F0000, 0x1F7FFF) AM_RAM AM_SHARE("user_ram")
101101   AM_RANGE( 0x1FE000, 0x1FE007) AM_READWRITE_LEGACY(vdc_0_r, vdc_0_w ) AM_MIRROR(0x03E0)
r14963r14964
104104   AM_RANGE( 0x1FE400, 0x1FE7FF) AM_READWRITE_LEGACY(vce_r, vce_w )
105105   AM_RANGE( 0x1FE800, 0x1FEBFF) AM_DEVREADWRITE_LEGACY(C6280_TAG, c6280_r, c6280_w )
106106   AM_RANGE( 0x1FEC00, 0x1FEFFF) AM_READWRITE_LEGACY(h6280_timer_r, h6280_timer_w )
107   AM_RANGE( 0x1FF000, 0x1FF3FF) AM_READWRITE_LEGACY(mess_pce_joystick_r, mess_pce_joystick_w )
107   AM_RANGE( 0x1FF000, 0x1FF3FF) AM_READWRITE(mess_pce_joystick_r, mess_pce_joystick_w )
108108   AM_RANGE( 0x1FF400, 0x1FF7FF) AM_READWRITE_LEGACY(h6280_irq_status_r, h6280_irq_status_w )
109   AM_RANGE( 0x1FF800, 0x1FFBFF) AM_READWRITE_LEGACY(pce_cd_intf_r, pce_cd_intf_w )
109   AM_RANGE( 0x1FF800, 0x1FFBFF) AM_READWRITE(pce_cd_intf_r, pce_cd_intf_w )
110110ADDRESS_MAP_END
111111
112112static ADDRESS_MAP_START( sgx_io , AS_IO, 8, pce_state )
src/mess/drivers/bbc.c
r14963r14964
9191&E0-&FF Tube ULA        Tube system interface           32 (32 bytes x  1 ) 2MHz
9292******************************************************************************/
9393
94static READ8_HANDLER( bbc_fe_r )
94READ8_MEMBER(bbc_state::bbc_fe_r)
9595{
9696   return 0xfe;
9797}
r14963r14964
9999static ADDRESS_MAP_START( bbca_mem, AS_PROGRAM, 8, bbc_state )
100100   ADDRESS_MAP_UNMAP_HIGH                                                       /*  Hardware marked with a # is not present in a Model A        */
101101
102   AM_RANGE(0x0000, 0x3fff) AM_READ_BANK("bank1") AM_WRITE_LEGACY(bbc_memorya1_w)                  /*    0000-3fff                 Regular Ram                     */
103   AM_RANGE(0x4000, 0x7fff) AM_READ_BANK("bank3") AM_WRITE_LEGACY(bbc_memorya1_w)                  /*    4000-7fff                 Repeat of the Regular Ram       */
102   AM_RANGE(0x0000, 0x3fff) AM_READ_BANK("bank1") AM_WRITE(bbc_memorya1_w)                  /*    0000-3fff                 Regular Ram                     */
103   AM_RANGE(0x4000, 0x7fff) AM_READ_BANK("bank3") AM_WRITE(bbc_memorya1_w)                  /*    4000-7fff                 Repeat of the Regular Ram       */
104104
105105   AM_RANGE(0x8000, 0xbfff) AM_READ_BANK("bank4")                                          /*    8000-bfff                 Paged ROM                       */
106106
r14963r14964
109109   AM_RANGE(0xfc00, 0xfdff) AM_NOP                                                          /*    fc00-fdff                 FRED & JIM Pages                */
110110
111111                                                                        /*    fe00-feff                 Shiela Address Page             */
112   AM_RANGE(0xfe00, 0xfe07) AM_READWRITE_LEGACY(bbc_6845_r , bbc_6845_w)                        /*    fe00-fe07  6845 CRTA      Video controller                */
112   AM_RANGE(0xfe00, 0xfe07) AM_READWRITE(bbc_6845_r , bbc_6845_w)                        /*    fe00-fe07  6845 CRTA      Video controller                */
113113   AM_RANGE(0xfe08, 0xfe08) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, status_read, control_write)
114114   AM_RANGE(0xfe09, 0xfe09) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, data_read, data_write)
115   AM_RANGE(0xfe10, 0xfe17) AM_READWRITE_LEGACY(bbc_fe_r, bbc_SerialULA_w)                     /*    fe10-fe17  Serial ULA     Serial system chip              */
115   AM_RANGE(0xfe10, 0xfe17) AM_READWRITE(bbc_fe_r, bbc_SerialULA_w)                     /*    fe10-fe17  Serial ULA     Serial system chip              */
116116   AM_RANGE(0xfe18, 0xfe1f) AM_NOP                                                /*    fe18-fe1f  INTOFF/STATID  # ECONET Interrupt Off / ID No. */
117   AM_RANGE(0xfe20, 0xfe2f) AM_WRITE_LEGACY(bbc_videoULA_w)                                 /* R: fe20-fe2f  INTON          # ECONET Interrupt On           */
117   AM_RANGE(0xfe20, 0xfe2f) AM_WRITE(bbc_videoULA_w)                                 /* R: fe20-fe2f  INTON          # ECONET Interrupt On           */
118118                                                                        /* W: fe20-fe2f  Video ULA      Video system chip               */
119   AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE_LEGACY(bbc_fe_r, bbc_page_selecta_w)                     /* R: fe30-fe3f  NC             Not Connected                   */
119   AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selecta_w)                     /* R: fe30-fe3f  NC             Not Connected                   */
120120                                                                        /* W: fe30-fe3f  84LS161        Paged ROM selector              */
121121   AM_RANGE(0xfe40, 0xfe5f) AM_DEVREADWRITE("via6522_0", via6522_device, read, write)   /*    fe40-fe5f  6522 VIA       SYSTEM VIA                      */
122122   AM_RANGE(0xfe60, 0xfe7f) AM_NOP                                                /*    fe60-fe7f  6522 VIA       # USER VIA                      */
123123   AM_RANGE(0xfe80, 0xfe9f) AM_NOP                                                /*    fe80-fe9f  8271/1770 FDC  # Floppy disc controller        */
124   AM_RANGE(0xfea0, 0xfebf) AM_READ_LEGACY(bbc_fe_r)                                       /*    fea0-febf  68B54 ADLC     # ECONET controller             */
124   AM_RANGE(0xfea0, 0xfebf) AM_READ(bbc_fe_r)                                       /*    fea0-febf  68B54 ADLC     # ECONET controller             */
125125   AM_RANGE(0xfec0, 0xfedf) AM_NOP                                                /*    fec0-fedf  uPD7002        # Analogue to digital converter */
126   AM_RANGE(0xfee0, 0xfeff) AM_READ_LEGACY(bbc_fe_r)                                       /*    fee0-feff  Tube ULA       # Tube system interface         */
126   AM_RANGE(0xfee0, 0xfeff) AM_READ(bbc_fe_r)                                       /*    fee0-feff  Tube ULA       # Tube system interface         */
127127
128128   AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("user1", 0x13f00)                           /*    ff00-ffff                 OS Rom (continued)              */
129129ADDRESS_MAP_END
r14963r14964
132132static ADDRESS_MAP_START( bbcb_mem, AS_PROGRAM, 8, bbc_state )
133133   ADDRESS_MAP_UNMAP_HIGH
134134
135   AM_RANGE(0x0000, 0x3fff) AM_READ_BANK("bank1") AM_WRITE_LEGACY(bbc_memorya1_w)                  /*    0000-3fff                 Regular Ram                     */
136   AM_RANGE(0x4000, 0x7fff) AM_READ_BANK("bank3") AM_WRITE_LEGACY(bbc_memoryb3_w)                  /*    4000-7fff                 Repeat of the Regular Ram       */
135   AM_RANGE(0x0000, 0x3fff) AM_READ_BANK("bank1") AM_WRITE(bbc_memorya1_w)                  /*    0000-3fff                 Regular Ram                     */
136   AM_RANGE(0x4000, 0x7fff) AM_READ_BANK("bank3") AM_WRITE(bbc_memoryb3_w)                  /*    4000-7fff                 Repeat of the Regular Ram       */
137137
138138
139   AM_RANGE(0x8000, 0xbfff) AM_READ_BANK("bank4") AM_WRITE_LEGACY(bbc_memoryb4_w)                  /*    8000-bfff                 Paged ROM                       */
139   AM_RANGE(0x8000, 0xbfff) AM_READ_BANK("bank4") AM_WRITE(bbc_memoryb4_w)                  /*    8000-bfff                 Paged ROM                       */
140140
141141   AM_RANGE(0xc000, 0xfbff) AM_READ_BANK("bank7")                                    /*    c000-fbff                 OS ROM                          */
142142
143   AM_RANGE(0xfc00, 0xfdff) AM_READWRITE_LEGACY(bbc_opus_read, bbc_opus_write)                  /*    fc00-fdff                 OPUS Disc Controller            */
143   AM_RANGE(0xfc00, 0xfdff) AM_READWRITE(bbc_opus_read, bbc_opus_write)                  /*    fc00-fdff                 OPUS Disc Controller            */
144144
145145                                                                        /*    fe00-feff                 Shiela Address Page             */
146   AM_RANGE(0xfe00, 0xfe07) AM_READWRITE_LEGACY(bbc_6845_r, bbc_6845_w)                        /*    fe00-fe07  6845 CRTC      Video controller                */
146   AM_RANGE(0xfe00, 0xfe07) AM_READWRITE(bbc_6845_r, bbc_6845_w)                        /*    fe00-fe07  6845 CRTC      Video controller                */
147147   AM_RANGE(0xfe08, 0xfe08) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, status_read, control_write)
148148   AM_RANGE(0xfe09, 0xfe09) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, data_read, data_write)
149   AM_RANGE(0xfe10, 0xfe17) AM_READWRITE_LEGACY(bbc_fe_r, bbc_SerialULA_w)                     /*    fe10-fe17  Serial ULA     Serial system chip              */
149   AM_RANGE(0xfe10, 0xfe17) AM_READWRITE(bbc_fe_r, bbc_SerialULA_w)                     /*    fe10-fe17  Serial ULA     Serial system chip              */
150150   AM_RANGE(0xfe18, 0xfe1f) AM_NOP                                                /*    fe18-fe1f  INTOFF/STATID  ECONET Interrupt Off / ID No.   */
151   AM_RANGE(0xfe20, 0xfe2f) AM_WRITE_LEGACY(bbc_videoULA_w)                                 /* R: fe20-fe2f  INTON          ECONET Interrupt On             */
151   AM_RANGE(0xfe20, 0xfe2f) AM_WRITE(bbc_videoULA_w)                                 /* R: fe20-fe2f  INTON          ECONET Interrupt On             */
152152                                                                        /* W: fe20-fe2f  Video ULA      Video system chip               */
153   AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE_LEGACY(bbc_fe_r, bbc_page_selectb_w)                     /* R: fe30-fe3f  NC             Not Connected                   */
153   AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selectb_w)                     /* R: fe30-fe3f  NC             Not Connected                   */
154154                                                                        /* W: fe30-fe3f  84LS161        Paged ROM selector              */
155155   AM_RANGE(0xfe40, 0xfe5f) AM_DEVREADWRITE("via6522_0", via6522_device, read, write)   /*    fe40-fe5f  6522 VIA       SYSTEM VIA                      */
156156   AM_RANGE(0xfe60, 0xfe7f) AM_DEVREADWRITE("via6522_1", via6522_device, read, write)   /*    fe60-fe7f  6522 VIA       USER VIA                        */
157   AM_RANGE(0xfe80, 0xfe9f) AM_READWRITE_LEGACY(bbc_disc_r, bbc_disc_w)                        /*    fe80-fe9f  8271 FDC       Floppy disc controller          */
158   AM_RANGE(0xfea0, 0xfebf) AM_READ_LEGACY(bbc_fe_r)                                       /*    fea0-febf  68B54 ADLC     ECONET controller               */
157   AM_RANGE(0xfe80, 0xfe9f) AM_READWRITE(bbc_disc_r, bbc_disc_w)                        /*    fe80-fe9f  8271 FDC       Floppy disc controller          */
158   AM_RANGE(0xfea0, 0xfebf) AM_READ(bbc_fe_r)                                       /*    fea0-febf  68B54 ADLC     ECONET controller               */
159159   AM_RANGE(0xfec0, 0xfedf) AM_DEVREADWRITE_LEGACY("upd7002",uPD7002_r,uPD7002_w)                  /*    fec0-fedf  uPD7002        Analogue to digital converter   */
160   AM_RANGE(0xfee0, 0xfeff) AM_READ_LEGACY(bbc_fe_r)                                       /*    fee0-feff  Tube ULA       Tube system interface           */
160   AM_RANGE(0xfee0, 0xfeff) AM_READ(bbc_fe_r)                                       /*    fee0-feff  Tube ULA       Tube system interface           */
161161
162162   AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("user1", 0x43f00)                           /*    ff00-ffff                 OS Rom (continued)              */
163163ADDRESS_MAP_END
r14963r14964
166166static ADDRESS_MAP_START( bbcbp_mem, AS_PROGRAM, 8, bbc_state )
167167   ADDRESS_MAP_UNMAP_HIGH
168168
169   AM_RANGE(0x0000, 0x2fff) AM_READ_BANK("bank1") AM_WRITE_LEGACY(bbc_memorybp1_w)               /*    0000-2fff                 Regular Ram                     */
170   AM_RANGE(0x3000, 0x7fff) AM_READ_BANK("bank2") AM_WRITE_LEGACY(bbc_memorybp2_w)               /*    3000-7fff                 Video/Shadow Ram                */
169   AM_RANGE(0x0000, 0x2fff) AM_READ_BANK("bank1") AM_WRITE(bbc_memorybp1_w)               /*    0000-2fff                 Regular Ram                     */
170   AM_RANGE(0x3000, 0x7fff) AM_READ_BANK("bank2") AM_WRITE(bbc_memorybp2_w)               /*    3000-7fff                 Video/Shadow Ram                */
171171
172   AM_RANGE(0x8000, 0xafff) AM_READ_BANK("bank4") AM_WRITE_LEGACY(bbc_memorybp4_w)               /*    8000-afff                 Paged ROM or 12K of RAM         */
172   AM_RANGE(0x8000, 0xafff) AM_READ_BANK("bank4") AM_WRITE(bbc_memorybp4_w)               /*    8000-afff                 Paged ROM or 12K of RAM         */
173173   AM_RANGE(0xb000, 0xbfff) AM_READ_BANK("bank6")                                    /*    b000-bfff                 Rest of paged ROM area          */
174174
175175   AM_RANGE(0xc000, 0xfbff) AM_READ_BANK("bank7")                                   /*    c000-fbff                 OS ROM                          */
r14963r14964
177177   AM_RANGE(0xfc00, 0xfdff) AM_NOP                                                /*    fc00-fdff                 FRED & JIM Pages                */
178178
179179                                                                        /*    fe00-feff                 Shiela Address Page             */
180   AM_RANGE(0xfe00, 0xfe07) AM_READWRITE_LEGACY(bbc_6845_r, bbc_6845_w)                        /*    fe00-fe07  6845 CRTC      Video controller                */
180   AM_RANGE(0xfe00, 0xfe07) AM_READWRITE(bbc_6845_r, bbc_6845_w)                        /*    fe00-fe07  6845 CRTC      Video controller                */
181181   AM_RANGE(0xfe08, 0xfe08) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, status_read, control_write)
182182   AM_RANGE(0xfe09, 0xfe09) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, data_read, data_write)
183   AM_RANGE(0xfe10, 0xfe17) AM_READWRITE_LEGACY(bbc_fe_r, bbc_SerialULA_w)                     /*    fe10-fe17  Serial ULA     Serial system chip              */
183   AM_RANGE(0xfe10, 0xfe17) AM_READWRITE(bbc_fe_r, bbc_SerialULA_w)                     /*    fe10-fe17  Serial ULA     Serial system chip              */
184184   AM_RANGE(0xfe18, 0xfe1f) AM_NOP                                                /*    fe18-fe1f  INTOFF/STATID  ECONET Interrupt Off / ID No.   */
185   AM_RANGE(0xfe20, 0xfe2f) AM_WRITE_LEGACY(bbc_videoULA_w)                                 /* R: fe20-fe2f  INTON          ECONET Interrupt On             */
185   AM_RANGE(0xfe20, 0xfe2f) AM_WRITE(bbc_videoULA_w)                                 /* R: fe20-fe2f  INTON          ECONET Interrupt On             */
186186                                                                        /* W: fe20-fe2f  Video ULA      Video system chip               */
187   AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE_LEGACY(bbc_fe_r, bbc_page_selectbp_w)                  /* R: fe30-fe3f  NC             Not Connected                   */
187   AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selectbp_w)                  /* R: fe30-fe3f  NC             Not Connected                   */
188188                                                                        /* W: fe30-fe3f  84LS161        Paged ROM selector              */
189189   AM_RANGE(0xfe40, 0xfe5f) AM_DEVREADWRITE("via6522_0", via6522_device, read, write)   /*    fe40-fe5f  6522 VIA       SYSTEM VIA                      */
190190   AM_RANGE(0xfe60, 0xfe7f) AM_DEVREADWRITE("via6522_1", via6522_device, read, write)   /*    fe60-fe7f  6522 VIA       USER VIA                        */
191   AM_RANGE(0xfe80, 0xfe9f) AM_READWRITE_LEGACY(bbc_wd1770_read, bbc_wd1770_write)               /*    fe80-fe9f  1770 FDC       Floppy disc controller          */
192   AM_RANGE(0xfea0, 0xfebf) AM_READ_LEGACY(bbc_fe_r)                                       /*    fea0-febf  68B54 ADLC     ECONET controller               */
191   AM_RANGE(0xfe80, 0xfe9f) AM_READWRITE(bbc_wd1770_read, bbc_wd1770_write)               /*    fe80-fe9f  1770 FDC       Floppy disc controller          */
192   AM_RANGE(0xfea0, 0xfebf) AM_READ(bbc_fe_r)                                       /*    fea0-febf  68B54 ADLC     ECONET controller               */
193193   AM_RANGE(0xfec0, 0xfedf) AM_DEVREADWRITE_LEGACY("upd7002", uPD7002_r, uPD7002_w)               /*    fec0-fedf  uPD7002        Analogue to digital converter   */
194   AM_RANGE(0xfee0, 0xfeff) AM_READ_LEGACY(bbc_fe_r)                                       /*    fee0-feff  Tube ULA       Tube system interface           */
194   AM_RANGE(0xfee0, 0xfeff) AM_READ(bbc_fe_r)                                       /*    fee0-feff  Tube ULA       Tube system interface           */
195195
196196   AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("user1", 0x43f00)                           /*    ff00-ffff                 OS Rom (continued)              */
197197ADDRESS_MAP_END
r14963r14964
201201static ADDRESS_MAP_START( bbcbp128_mem, AS_PROGRAM, 8, bbc_state )
202202   ADDRESS_MAP_UNMAP_HIGH
203203
204   AM_RANGE(0x0000, 0x2fff) AM_READ_BANK("bank1") AM_WRITE_LEGACY(bbc_memorybp1_w)               /*    0000-2fff                 Regular Ram                     */
205   AM_RANGE(0x3000, 0x7fff) AM_READ_BANK("bank2") AM_WRITE_LEGACY(bbc_memorybp2_w)               /*    3000-7fff                 Video/Shadow Ram                */
204   AM_RANGE(0x0000, 0x2fff) AM_READ_BANK("bank1") AM_WRITE(bbc_memorybp1_w)               /*    0000-2fff                 Regular Ram                     */
205   AM_RANGE(0x3000, 0x7fff) AM_READ_BANK("bank2") AM_WRITE(bbc_memorybp2_w)               /*    3000-7fff                 Video/Shadow Ram                */
206206
207   AM_RANGE(0x8000, 0xafff) AM_READ_BANK("bank4") AM_WRITE_LEGACY(bbc_memorybp4_128_w)            /*    8000-afff                 Paged ROM or 12K of RAM         */
208   AM_RANGE(0xb000, 0xbfff) AM_READ_BANK("bank6") AM_WRITE_LEGACY(bbc_memorybp6_128_w)            /*    b000-bfff                 Rest of paged ROM area          */
207   AM_RANGE(0x8000, 0xafff) AM_READ_BANK("bank4") AM_WRITE(bbc_memorybp4_128_w)            /*    8000-afff                 Paged ROM or 12K of RAM         */
208   AM_RANGE(0xb000, 0xbfff) AM_READ_BANK("bank6") AM_WRITE(bbc_memorybp6_128_w)            /*    b000-bfff                 Rest of paged ROM area          */
209209
210210   AM_RANGE(0xc000, 0xfbff) AM_READ_BANK("bank7")                                    /*    c000-fbff                 OS ROM                          */
211211
212212   AM_RANGE(0xfc00, 0xfdff) AM_NOP                                                /*    fc00-fdff                 FRED & JIM Pages                */
213213
214214                                                                        /*    fe00-feff                 Shiela Address Page             */
215   AM_RANGE(0xfe00, 0xfe07) AM_READWRITE_LEGACY(bbc_6845_r, bbc_6845_w)                        /*    fe00-fe07  6845 CRTC      Video controller                */
215   AM_RANGE(0xfe00, 0xfe07) AM_READWRITE(bbc_6845_r, bbc_6845_w)                        /*    fe00-fe07  6845 CRTC      Video controller                */
216216   AM_RANGE(0xfe08, 0xfe08) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, status_read, control_write)
217217   AM_RANGE(0xfe09, 0xfe09) AM_MIRROR(0x06) AM_DEVREADWRITE("acia6850", acia6850_device, data_read, data_write)
218   AM_RANGE(0xfe10, 0xfe17) AM_READWRITE_LEGACY(bbc_fe_r, bbc_SerialULA_w)                     /*    fe10-fe17  Serial ULA     Serial system chip              */
218   AM_RANGE(0xfe10, 0xfe17) AM_READWRITE(bbc_fe_r, bbc_SerialULA_w)                     /*    fe10-fe17  Serial ULA     Serial system chip              */
219219   AM_RANGE(0xfe10, 0xfe17) AM_NOP                                                /*    fe10-fe17  Serial ULA     Serial system chip              */
220220   AM_RANGE(0xfe18, 0xfe1f) AM_NOP                                                /*    fe18-fe1f  INTOFF/STATID  ECONET Interrupt Off / ID No.   */
221   AM_RANGE(0xfe20, 0xfe2f) AM_WRITE_LEGACY(bbc_videoULA_w)                                 /* R: fe20-fe2f  INTON          ECONET Interrupt On             */
221   AM_RANGE(0xfe20, 0xfe2f) AM_WRITE(bbc_videoULA_w)                                 /* R: fe20-fe2f  INTON          ECONET Interrupt On             */
222222                                                                        /* W: fe20-fe2f  Video ULA      Video system chip               */
223   AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE_LEGACY(bbc_fe_r, bbc_page_selectbp_w)                  /* R: fe30-fe3f  NC             Not Connected                   */
223   AM_RANGE(0xfe30, 0xfe3f) AM_READWRITE(bbc_fe_r, bbc_page_selectbp_w)                  /* R: fe30-fe3f  NC             Not Connected                   */
224224                                                                        /* W: fe30-fe3f  84LS161        Paged ROM selector              */
225225   AM_RANGE(0xfe40, 0xfe5f) AM_DEVREADWRITE("via6522_0", via6522_device, read, write)   /*    fe40-fe5f  6522 VIA       SYSTEM VIA                      */
226226   AM_RANGE(0xfe60, 0xfe7f) AM_DEVREADWRITE("via6522_1", via6522_device, read, write)   /*    fe60-fe7f  6522 VIA       USER VIA                        */
227   AM_RANGE(0xfe80, 0xfe9f) AM_READWRITE_LEGACY(bbc_wd1770_read, bbc_wd1770_write)               /*    fe80-fe9f  1770 FDC       Floppy disc controller          */
228   AM_RANGE(0xfea0, 0xfebf) AM_READ_LEGACY(bbc_fe_r)                                       /*    fea0-febf  68B54 ADLC     ECONET controller               */
227   AM_RANGE(0xfe80, 0xfe9f) AM_READWRITE(bbc_wd1770_read, bbc_wd1770_write)               /*    fe80-fe9f  1770 FDC       Floppy disc controller          */
228   AM_RANGE(0xfea0, 0xfebf) AM_READ(bbc_fe_r)                                       /*    fea0-febf  68B54 ADLC     ECONET controller               */
229229   AM_RANGE(0xfec0, 0xfedf) AM_DEVREADWRITE_LEGACY("upd7002", uPD7002_r, uPD7002_w)               /*    fec0-fedf  uPD7002        Analogue to digital converter   */
230   AM_RANGE(0xfee0, 0xfeff) AM_READ_LEGACY(bbc_fe_r)                                       /*    fee0-feff  Tube ULA       Tube system interface           */
230   AM_RANGE(0xfee0, 0xfeff) AM_READ(bbc_fe_r)                                       /*    fee0-feff  Tube ULA       Tube system interface           */
231231
232232   AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("user1", 0x43f00)                           /*    ff00-ffff                 OS Rom (continued)              */
233233ADDRESS_MAP_END
r14963r14964
260260
261261static ADDRESS_MAP_START(bbcm_mem, AS_PROGRAM, 8, bbc_state )
262262
263   AM_RANGE(0x0000, 0x2fff) AM_READ_BANK("bank1") AM_WRITE_LEGACY(bbc_memorybm1_w)               /*    0000-2fff                 Regular Ram                     */
263   AM_RANGE(0x0000, 0x2fff) AM_READ_BANK("bank1") AM_WRITE(bbc_memorybm1_w)               /*    0000-2fff                 Regular Ram                     */
264264
265   AM_RANGE(0x3000, 0x7fff) AM_READ_BANK("bank2") AM_WRITE_LEGACY(bbc_memorybm2_w)               /*    3000-7fff                 Video/Shadow Ram                */
265   AM_RANGE(0x3000, 0x7fff) AM_READ_BANK("bank2") AM_WRITE(bbc_memorybm2_w)               /*    3000-7fff                 Video/Shadow Ram                */
266266
267   AM_RANGE(0x8000, 0x8fff) AM_READ_BANK("bank4") AM_WRITE_LEGACY(bbc_memorybm4_w)               /*    8000-8fff                 Paged ROM/RAM or 4K of RAM ANDY */
268   AM_RANGE(0x9000, 0xbfff) AM_READ_BANK("bank5") AM_WRITE_LEGACY(bbc_memorybm5_w)               /*    9000-bfff                 Rest of paged ROM/RAM area      */
267   AM_RANGE(0x8000, 0x8fff) AM_READ_BANK("bank4") AM_WRITE(bbc_memorybm4_w)               /*    8000-8fff                 Paged ROM/RAM or 4K of RAM ANDY */
268   AM_RANGE(0x9000, 0xbfff) AM_READ_BANK("bank5") AM_WRITE(bbc_memorybm5_w)               /*    9000-bfff                 Rest of paged ROM/RAM area      */
269269
270   AM_RANGE(0xc000, 0xdfff) AM_READ_BANK("bank7") AM_WRITE_LEGACY(bbc_memorybm7_w)               /*    c000-dfff                 OS ROM or 8K of RAM       HAZEL */
270   AM_RANGE(0xc000, 0xdfff) AM_READ_BANK("bank7") AM_WRITE(bbc_memorybm7_w)               /*    c000-dfff                 OS ROM or 8K of RAM       HAZEL */
271271   AM_RANGE(0xe000, 0xfbff) AM_ROM AM_REGION("user1", 0x42000)                           /*    e000-fbff                 OS ROM                          */
272272
273   //AM_RANGE(0xfc00, 0xfeff) AM_READWRITE_LEGACY(bbcm_r, bbcm_w)
274   AM_RANGE(0xfc00, 0xfeff) AM_READ_BANK("bank8") AM_WRITE_LEGACY(bbcm_w)                        /*    this is now processed directly because it can be ROM or hardware */
273   //AM_RANGE(0xfc00, 0xfeff) AM_READWRITE(bbcm_r, bbcm_w)
274   AM_RANGE(0xfc00, 0xfeff) AM_READ_BANK("bank8") AM_WRITE(bbcm_w)                        /*    this is now processed directly because it can be ROM or hardware */
275275
276276   AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("user1", 0x43f00)                           /*    ff00-ffff                 OS Rom (continued)              */
277277ADDRESS_MAP_END
src/mess/drivers/gba.c
r14963r14964
522522   state->m_irq_timer->adjust(attotime::never);
523523}
524524
525static READ32_HANDLER( gba_io_r )
525READ32_MEMBER(gba_state::gba_io_r)
526526{
527527   UINT32 retval = 0;
528   running_machine &machine = space->machine();
529   device_t *gb_device = space->machine().device("custom");
530   gba_state *state = machine.driver_data<gba_state>();
528   device_t *gb_device = machine().device("custom");
531529
532530   switch( offset )
533531   {
534532      case 0x0000/4:
535533         if( (mem_mask) & 0x0000ffff )
536534         {
537            verboselog(machine, 2, "GBA IO Register Read: DISPCNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), state->m_DISPCNT );
538            retval |= state->m_DISPCNT;
535            verboselog(machine(), 2, "GBA IO Register Read: DISPCNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_DISPCNT );
536            retval |= m_DISPCNT;
539537         }
540538         if( (mem_mask) & 0xffff0000 )
541539         {
542            verboselog(machine, 2, "GBA IO Register Read: Green Swap (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, state->m_GRNSWAP );
543            retval |= state->m_GRNSWAP << 16;
540            verboselog(machine(), 2, "GBA IO Register Read: Green Swap (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_GRNSWAP );
541            retval |= m_GRNSWAP << 16;
544542         }
545543         break;
546544      case 0x0004/4:
547         retval = (state->m_DISPSTAT & 0xffff) | (machine.primary_screen->vpos()<<16);
545         retval = (m_DISPSTAT & 0xffff) | (machine().primary_screen->vpos()<<16);
548546         break;
549547      case 0x0008/4:
550548         if( (mem_mask) & 0x0000ffff )
551549         {
552            verboselog(machine, 2, "GBA IO Register Read: BG0CNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), state->m_BG0CNT );
553            retval |= state->m_BG0CNT;
550            verboselog(machine(), 2, "GBA IO Register Read: BG0CNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_BG0CNT );
551            retval |= m_BG0CNT;
554552         }
555553         if( (mem_mask) & 0xffff0000 )
556554         {
557            verboselog(machine, 2, "GBA IO Register Read: BG1CNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, state->m_BG1CNT );
558            retval |= state->m_BG1CNT << 16;
555            verboselog(machine(), 2, "GBA IO Register Read: BG1CNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_BG1CNT );
556            retval |= m_BG1CNT << 16;
559557         }
560558         break;
561559      case 0x000c/4:
562560         if( (mem_mask) & 0x0000ffff )
563561         {
564            verboselog(machine, 2, "GBA IO Register Read: BG2CNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), state->m_BG2CNT );
565            retval |= state->m_BG2CNT;
562            verboselog(machine(), 2, "GBA IO Register Read: BG2CNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_BG2CNT );
563            retval |= m_BG2CNT;
566564         }
567565         if( (mem_mask) & 0xffff0000 )
568566         {
569            verboselog(machine, 2, "GBA IO Register Read: BG3CNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, state->m_BG3CNT );
570            retval |= state->m_BG3CNT << 16;
567            verboselog(machine(), 2, "GBA IO Register Read: BG3CNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_BG3CNT );
568            retval |= m_BG3CNT << 16;
571569         }
572570         break;
573571      case 0x0010/4:
574572         if( (mem_mask) & 0x0000ffff )
575573         {
576            verboselog(machine, 2, "GBA IO Register Read: BG0HOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
574            verboselog(machine(), 2, "GBA IO Register Read: BG0HOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
577575         }
578576         if( (mem_mask) & 0xffff0000 )
579577         {
580            verboselog(machine, 2, "GBA IO Register Read: BG0VOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
578            verboselog(machine(), 2, "GBA IO Register Read: BG0VOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
581579         }
582580         break;
583581      case 0x0014/4:
584582         if( (mem_mask) & 0x0000ffff )
585583         {
586            verboselog(machine, 2, "GBA IO Register Read: BG1HOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
584            verboselog(machine(), 2, "GBA IO Register Read: BG1HOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
587585         }
588586         if( (mem_mask) & 0xffff0000 )
589587         {
590            verboselog(machine, 2, "GBA IO Register Read: BG1VOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
588            verboselog(machine(), 2, "GBA IO Register Read: BG1VOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
591589         }
592590         break;
593591      case 0x0018/4:
594592         if( (mem_mask) & 0x0000ffff )
595593         {
596            verboselog(machine, 2, "GBA IO Register Read: BG2HOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
594            verboselog(machine(), 2, "GBA IO Register Read: BG2HOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
597595         }
598596         if( (mem_mask) & 0xffff0000 )
599597         {
600            verboselog(machine, 2, "GBA IO Register Read: BG2VOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
598            verboselog(machine(), 2, "GBA IO Register Read: BG2VOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
601599         }
602600         break;
603601      case 0x001c/4:
604602         if( (mem_mask) & 0x0000ffff )
605603         {
606            verboselog(machine, 2, "GBA IO Register Read: BG3HOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
604            verboselog(machine(), 2, "GBA IO Register Read: BG3HOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
607605         }
608606         if( (mem_mask) & 0xffff0000 )
609607         {
610            verboselog(machine, 2, "GBA IO Register Read: BG3VOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
608            verboselog(machine(), 2, "GBA IO Register Read: BG3VOFS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
611609         }
612610         break;
613611      case 0x0020/4:
614612         if( (mem_mask) & 0x0000ffff )
615613         {
616            verboselog(machine, 2, "GBA IO Register Read: BG2PA (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
614            verboselog(machine(), 2, "GBA IO Register Read: BG2PA (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
617615         }
618616         if( (mem_mask) & 0xffff0000 )
619617         {
620            verboselog(machine, 2, "GBA IO Register Read: BG2PB (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
618            verboselog(machine(), 2, "GBA IO Register Read: BG2PB (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
621619         }
622620         break;
623621      case 0x0024/4:
624622         if( (mem_mask) & 0x0000ffff )
625623         {
626            verboselog(machine, 2, "GBA IO Register Read: BG2PC (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
624            verboselog(machine(), 2, "GBA IO Register Read: BG2PC (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
627625         }
628626         if( (mem_mask) & 0xffff0000 )
629627         {
630            verboselog(machine, 2, "GBA IO Register Read: BG2PD (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
628            verboselog(machine(), 2, "GBA IO Register Read: BG2PD (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
631629         }
632630         break;
633631      case 0x0028/4:
634632         if( (mem_mask) & 0x0000ffff )
635633         {
636            verboselog(machine, 2, "GBA IO Register Read: BG2X_LSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
634            verboselog(machine(), 2, "GBA IO Register Read: BG2X_LSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
637635         }
638636         if( (mem_mask) & 0xffff0000 )
639637         {
640            verboselog(machine, 2, "GBA IO Register Read: BG2X_MSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
638            verboselog(machine(), 2, "GBA IO Register Read: BG2X_MSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
641639         }
642640         break;
643641      case 0x002c/4:
644642         if( (mem_mask) & 0x0000ffff )
645643         {
646            verboselog(machine, 2, "GBA IO Register Read: BG2Y_LSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
644            verboselog(machine(), 2, "GBA IO Register Read: BG2Y_LSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
647645         }
648646         if( (mem_mask) & 0xffff0000 )
649647         {
650            verboselog(machine, 2, "GBA IO Register Read: BG2Y_MSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
648            verboselog(machine(), 2, "GBA IO Register Read: BG2Y_MSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
651649         }
652650         break;
653651      case 0x0030/4:
654652         if( (mem_mask) & 0x0000ffff )
655653         {
656            verboselog(machine, 2, "GBA IO Register Read: BG3PA (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
654            verboselog(machine(), 2, "GBA IO Register Read: BG3PA (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
657655         }
658656         if( (mem_mask) & 0xffff0000 )
659657         {
660            verboselog(machine, 2, "GBA IO Register Read: BG3PB (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
658            verboselog(machine(), 2, "GBA IO Register Read: BG3PB (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
661659         }
662660         break;
663661      case 0x0034/4:
664662         if( (mem_mask) & 0x0000ffff )
665663         {
666            verboselog(machine, 2, "GBA IO Register Read: BG3PC (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
664            verboselog(machine(), 2, "GBA IO Register Read: BG3PC (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
667665         }
668666         if( (mem_mask) & 0xffff0000 )
669667         {
670            verboselog(machine, 2, "GBA IO Register Read: BG3PD (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
668            verboselog(machine(), 2, "GBA IO Register Read: BG3PD (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
671669         }
672670         break;
673671      case 0x0038/4:
674672         if( (mem_mask) & 0x0000ffff )
675673         {
676            verboselog(machine, 2, "GBA IO Register Read: BG3X_LSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
674            verboselog(machine(), 2, "GBA IO Register Read: BG3X_LSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
677675         }
678676         if( (mem_mask) & 0xffff0000 )
679677         {
680            verboselog(machine, 2, "GBA IO Register Read: BG3X_MSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
678            verboselog(machine(), 2, "GBA IO Register Read: BG3X_MSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
681679         }
682680         break;
683681      case 0x003c/4:
684682         if( (mem_mask) & 0x0000ffff )
685683         {
686            verboselog(machine, 2, "GBA IO Register Read: BG3Y_LSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
684            verboselog(machine(), 2, "GBA IO Register Read: BG3Y_LSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
687685         }
688686         if( (mem_mask) & 0xffff0000 )
689687         {
690            verboselog(machine, 2, "GBA IO Register Read: BG3Y_MSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
688            verboselog(machine(), 2, "GBA IO Register Read: BG3Y_MSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
691689         }
692690         break;
693691      case 0x0040/4:
694692         if( (mem_mask) & 0x0000ffff )
695693         {
696            verboselog(machine, 2, "GBA IO Register Read: WIN0H (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
694            verboselog(machine(), 2, "GBA IO Register Read: WIN0H (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
697695         }
698696         if( (mem_mask) & 0xffff0000 )
699697         {
700            verboselog(machine, 2, "GBA IO Register Read: WIN1H (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
698            verboselog(machine(), 2, "GBA IO Register Read: WIN1H (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
701699         }
702700         break;
703701      case 0x0044/4:
704702         if( (mem_mask) & 0x0000ffff )
705703         {
706            verboselog(machine, 2, "GBA IO Register Read: WIN0V (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
704            verboselog(machine(), 2, "GBA IO Register Read: WIN0V (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
707705         }
708706         if( (mem_mask) & 0xffff0000 )
709707         {
710            verboselog(machine, 2, "GBA IO Register Read: WIN1V (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
708            verboselog(machine(), 2, "GBA IO Register Read: WIN1V (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
711709         }
712710         break;
713711      case 0x0048/4:
714712         if( (mem_mask) & 0x0000ffff )
715713         {
716            verboselog(machine, 2, "GBA IO Register Read: WININ (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), state->m_WININ );
717            retval |= state->m_WININ;
714            verboselog(machine(), 2, "GBA IO Register Read: WININ (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_WININ );
715            retval |= m_WININ;
718716         }
719717         if( (mem_mask) & 0xffff0000 )
720718         {
721            verboselog(machine, 2, "GBA IO Register Read: WINOUT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, state->m_WINOUT );
722            retval |= state->m_WINOUT << 16;
719            verboselog(machine(), 2, "GBA IO Register Read: WINOUT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_WINOUT );
720            retval |= m_WINOUT << 16;
723721         }
724722         break;
725723      case 0x004c/4:
726724         if( (mem_mask) & 0x0000ffff )
727725         {
728            verboselog(machine, 2, "GBA IO Register Read: MOSAIC (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
726            verboselog(machine(), 2, "GBA IO Register Read: MOSAIC (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
729727         }
730728         if( (mem_mask) & 0xffff0000 )
731729         {
732            verboselog(machine, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
730            verboselog(machine(), 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
733731         }
734732         break;
735733      case 0x0050/4:
736734         if( (mem_mask) & 0x0000ffff )
737735         {
738            verboselog(machine, 2, "GBA IO Register Read: BLDCNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), state->m_BLDCNT );
739            retval |= state->m_BLDCNT;
736            verboselog(machine(), 2, "GBA IO Register Read: BLDCNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_BLDCNT );
737            retval |= m_BLDCNT;
740738         }
741739         if( (mem_mask) & 0xffff0000 )
742740         {
743            verboselog(machine, 2, "GBA IO Register Read: BLDALPHA (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, state->m_BLDALPHA );
744            retval |= state->m_BLDALPHA << 16;
741            verboselog(machine(), 2, "GBA IO Register Read: BLDALPHA (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_BLDALPHA );
742            retval |= m_BLDALPHA << 16;
745743         }
746744         break;
747745      case 0x0054/4:
748746         if( (mem_mask) & 0x0000ffff )
749747         {
750            verboselog(machine, 2, "GBA IO Register Read: BLDY (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
748            verboselog(machine(), 2, "GBA IO Register Read: BLDY (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
751749         }
752750         if( (mem_mask) & 0xffff0000 )
753751         {
754            verboselog(machine, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
752            verboselog(machine(), 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
755753         }
756754         break;
757755      case 0x0058/4:
758756         if( (mem_mask) & 0x0000ffff )
759757         {
760            verboselog(machine, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
758            verboselog(machine(), 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
761759         }
762760         if( (mem_mask) & 0xffff0000 )
763761         {
764            verboselog(machine, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
762            verboselog(machine(), 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
765763         }
766764         break;
767765      case 0x005c/4:
768766         if( (mem_mask) & 0x0000ffff )
769767         {
770            verboselog(machine, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
768            verboselog(machine(), 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), 0 );
771769         }
772770         if( (mem_mask) & 0xffff0000 )
773771         {
774            verboselog(machine, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
772            verboselog(machine(), 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
775773         }
776774         break;
777775      case 0x0060/4:
r14963r14964
802800         retval = gb_sound_r(gb_device, 0x14) | gb_sound_r(gb_device, 0x15)<<8;
803801         if( (mem_mask) & 0xffff0000 )
804802         {
805            verboselog(machine, 2, "GBA IO Register Read: SOUNDCNT_H (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, state->m_SOUNDCNT_H );
806            retval |= state->m_SOUNDCNT_H << 16;
803            verboselog(machine(), 2, "GBA IO Register Read: SOUNDCNT_H (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_SOUNDCNT_H );
804            retval |= m_SOUNDCNT_H << 16;
807805         }
808806         break;
809807      case 0x0084/4:
r14963r14964
812810      case 0x0088/4:
813811         if( (mem_mask) & 0x0000ffff )
814812         {
815            verboselog(machine, 2, "GBA IO Register Read: SOUNDBIAS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), state->m_SOUNDBIAS );
816            retval |= state->m_SOUNDBIAS;
813            verboselog(machine(), 2, "GBA IO Register Read: SOUNDBIAS (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_SOUNDBIAS );
814            retval |= m_SOUNDBIAS;
817815         }
818816         if( (mem_mask) & 0xffff0000 )
819817         {
820            verboselog(machine, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
818            verboselog(machine(), 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
821819         }
822820         break;
823821      case 0x0090/4:
r14963r14964
854852            #if 0
855853            if (((offset-0xb0/4) % 3) == 2)
856854            {
857               return state->m_dma_regs[offset-(0xb0/4)] & 0xff000000;
855               return m_dma_regs[offset-(0xb0/4)] & 0xff000000;
858856            }
859857            #endif
860858
861            return state->m_dma_regs[offset-(0xb0/4)];
859            return m_dma_regs[offset-(0xb0/4)];
862860         }
863861         break;
864862      case 0x0100/4:
r14963r14964
870868            double time, ticks;
871869            int timer = offset-(0x100/4);
872870
873//              printf("Read timer reg %x (PC=%x)\n", timer, cpu_get_pc(&space->device()));
871//              printf("Read timer reg %x (PC=%x)\n", timer, cpu_get_pc(&space.device()));
874872
875873            // update times for
876            if (state->m_timer_regs[timer] & 0x800000)
874            if (m_timer_regs[timer] & 0x800000)
877875            {
878               if (state->m_timer_regs[timer] & 0x00040000)
876               if (m_timer_regs[timer] & 0x00040000)
879877               {
880                  elapsed = state->m_timer_regs[timer] & 0xffff;
878                  elapsed = m_timer_regs[timer] & 0xffff;
881879               }
882880               else
883881               {
884882
885               time = state->m_tmr_timer[timer]->elapsed().as_double();
883               time = m_tmr_timer[timer]->elapsed().as_double();
886884
887               ticks = (double)(0x10000 - (state->m_timer_regs[timer] & 0xffff));
885               ticks = (double)(0x10000 - (m_timer_regs[timer] & 0xffff));
888886
889//                  printf("time %f ticks %f 1/hz %f\n", time, ticks, 1.0 / state->m_timer_hz[timer]);
887//                  printf("time %f ticks %f 1/hz %f\n", time, ticks, 1.0 / m_timer_hz[timer]);
890888
891889               time *= ticks;
892               time /= (1.0 / state->m_timer_hz[timer]);
890               time /= (1.0 / m_timer_hz[timer]);
893891
894892               elapsed = (UINT32)time;
895893
r14963r14964
903901               elapsed = 0;
904902            }
905903
906            return (state->m_timer_regs[timer] & 0xffff0000) | (elapsed & 0xffff);
904            return (m_timer_regs[timer] & 0xffff0000) | (elapsed & 0xffff);
907905         }
908906         break;
909907      case 0x0120/4:
910908         if( (mem_mask) & 0x0000ffff )
911909         {
912            verboselog(machine, 2, "GBA IO Register Read: SIOMULTI0 (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), state->m_SIOMULTI0 );
913            retval |= state->m_SIOMULTI0;
910            verboselog(machine(), 2, "GBA IO Register Read: SIOMULTI0 (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_SIOMULTI0 );
911            retval |= m_SIOMULTI0;
914912         }
915913         if( (mem_mask) & 0xffff0000 )
916914         {
917            verboselog(machine, 2, "GBA IO Register Read: SIOMULTI1 (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, state->m_SIOMULTI1 );
918            retval |= state->m_SIOMULTI1 << 16;
915            verboselog(machine(), 2, "GBA IO Register Read: SIOMULTI1 (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_SIOMULTI1 );
916            retval |= m_SIOMULTI1 << 16;
919917         }
920918         break;
921919      case 0x0124/4:
922920         if( (mem_mask) & 0x0000ffff )
923921         {
924            verboselog(machine, 2, "GBA IO Register Read: SIOMULTI2 (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), state->m_SIOMULTI2 );
925            retval |= state->m_SIOMULTI2;
922            verboselog(machine(), 2, "GBA IO Register Read: SIOMULTI2 (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_SIOMULTI2 );
923            retval |= m_SIOMULTI2;
926924         }
927925         if( (mem_mask) & 0xffff0000 )
928926         {
929            verboselog(machine, 2, "GBA IO Register Read: SIOMULTI3 (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, state->m_SIOMULTI3 );
930            retval |= state->m_SIOMULTI3 << 16;
927            verboselog(machine(), 2, "GBA IO Register Read: SIOMULTI3 (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_SIOMULTI3 );
928            retval |= m_SIOMULTI3 << 16;
931929         }
932930         break;
933931      case 0x0128/4:
934932         if( (mem_mask) & 0x0000ffff )
935933         {
936            verboselog(machine, 2, "GBA IO Register Read: SIOCNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), state->m_SIOCNT );
937            retval |= state->m_SIOCNT;
934            verboselog(machine(), 2, "GBA IO Register Read: SIOCNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_SIOCNT );
935            retval |= m_SIOCNT;
938936         }
939937         if( (mem_mask) & 0xffff0000 )
940938         {
941            verboselog(machine, 2, "GBA IO Register Read: SIODATA8 (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, state->m_SIODATA8 );
942            retval |= state->m_SIODATA8 << 16;
939            verboselog(machine(), 2, "GBA IO Register Read: SIODATA8 (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_SIODATA8 );
940            retval |= m_SIODATA8 << 16;
943941         }
944942         break;
945943      case 0x0130/4:
946944         if( (mem_mask) & 0x0000ffff )   // KEYINPUT
947945         {
948            return input_port_read(machine, "IN0");
946            return input_port_read(machine(), "IN0");
949947         }
950948         if( (mem_mask) & 0xffff0000 )
951949         {
952            verboselog(machine, 2, "GBA IO Register Read: KEYCNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, state->m_KEYCNT );
953            retval |= state->m_KEYCNT << 16;
950            verboselog(machine(), 2, "GBA IO Register Read: KEYCNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_KEYCNT );
951            retval |= m_KEYCNT << 16;
954952         }
955953         break;
956954      case 0x0134/4:
957955         if( (mem_mask) & 0x0000ffff )
958956         {
959            verboselog(machine, 2, "GBA IO Register Read: RCNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), state->m_RCNT );
960            retval |= state->m_RCNT;
957            verboselog(machine(), 2, "GBA IO Register Read: RCNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_RCNT );
958            retval |= m_RCNT;
961959         }
962960         if( (mem_mask) & 0xffff0000 )
963961         {
964            verboselog(machine, 2, "GBA IO Register Read: IR (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
962            verboselog(machine(), 2, "GBA IO Register Read: IR (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
965963         }
966964         break;
967965      case 0x0140/4:
968966         if( (mem_mask) & 0x0000ffff )
969967         {
970            verboselog(machine, 2, "GBA IO Register Read: JOYCNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), state->m_JOYCNT );
971            retval |= state->m_JOYCNT;
968            verboselog(machine(), 2, "GBA IO Register Read: JOYCNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_JOYCNT );
969            retval |= m_JOYCNT;
972970         }
973971         if( (mem_mask) & 0xffff0000 )
974972         {
975            verboselog(machine, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
973            verboselog(machine(), 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
976974         }
977975         break;
978976      case 0x0150/4:
979977         if( (mem_mask) & 0x0000ffff )
980978         {
981            verboselog(machine, 2, "GBA IO Register Read: JOY_RECV_LSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), state->m_JOY_RECV & 0x0000ffff );
982            retval |= state->m_JOY_RECV & 0x0000ffff;
979            verboselog(machine(), 2, "GBA IO Register Read: JOY_RECV_LSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_JOY_RECV & 0x0000ffff );
980            retval |= m_JOY_RECV & 0x0000ffff;
983981         }
984982         if( (mem_mask) & 0xffff0000 )
985983         {
986            verboselog(machine, 2, "GBA IO Register Read: JOY_RECV_MSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, ( state->m_JOY_RECV & 0xffff0000 ) >> 16 );
987            retval |= state->m_JOY_RECV & 0xffff0000;
984            verboselog(machine(), 2, "GBA IO Register Read: JOY_RECV_MSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, ( m_JOY_RECV & 0xffff0000 ) >> 16 );
985            retval |= m_JOY_RECV & 0xffff0000;
988986         }
989987         break;
990988      case 0x0154/4:
991989         if( (mem_mask) & 0x0000ffff )
992990         {
993            verboselog(machine, 2, "GBA IO Register Read: JOY_TRANS_LSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), state->m_JOY_TRANS & 0x0000ffff );
994            retval |= state->m_JOY_TRANS & 0x0000ffff;
991            verboselog(machine(), 2, "GBA IO Register Read: JOY_TRANS_LSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_JOY_TRANS & 0x0000ffff );
992            retval |= m_JOY_TRANS & 0x0000ffff;
995993         }
996994         if( (mem_mask) & 0xffff0000 )
997995         {
998            verboselog(machine, 2, "GBA IO Register Read: JOY_TRANS_MSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, ( state->m_JOY_TRANS & 0xffff0000 ) >> 16 );
999            retval |= state->m_JOY_TRANS & 0xffff0000;
996            verboselog(machine(), 2, "GBA IO Register Read: JOY_TRANS_MSW (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, ( m_JOY_TRANS & 0xffff0000 ) >> 16 );
997            retval |= m_JOY_TRANS & 0xffff0000;
1000998         }
1001999         break;
10021000      case 0x0158/4:
10031001         if( (mem_mask) & 0x0000ffff )
10041002         {
1005            verboselog(machine, 2, "GBA IO Register Read: JOYSTAT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), state->m_JOYSTAT );
1006            retval |= state->m_JOYSTAT;
1003            verboselog(machine(), 2, "GBA IO Register Read: JOYSTAT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_JOYSTAT );
1004            retval |= m_JOYSTAT;
10071005         }
10081006         if( (mem_mask) & 0xffff0000 )
10091007         {
1010            verboselog(machine, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
1008            verboselog(machine(), 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
10111009         }
10121010         break;
10131011      case 0x0200/4:
10141012         if( (mem_mask) & 0x0000ffff )
10151013         {
1016//              printf("Read: IE (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), state->m_IE );
1014//              printf("Read: IE (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_IE );
10171015         }
10181016         if( (mem_mask) & 0xffff0000 )
10191017         {
1020            verboselog(machine, 2, "GBA IO Register Read: IF (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, state->m_IF );
1018            verboselog(machine(), 2, "GBA IO Register Read: IF (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, m_IF );
10211019         }
10221020
1023         retval = state->m_IE | (state->m_IF<<16);
1021         retval = m_IE | (m_IF<<16);
10241022         break;
10251023      case 0x0204/4:
10261024         if( (mem_mask) & 0x0000ffff )
10271025         {
1028            verboselog(machine, 2, "GBA IO Register Read: WAITCNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), state->m_WAITCNT );
1029            retval |= state->m_WAITCNT;
1026            verboselog(machine(), 2, "GBA IO Register Read: WAITCNT (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_WAITCNT );
1027            retval |= m_WAITCNT;
10301028         }
10311029         if( (mem_mask) & 0xffff0000 )
10321030         {
1033            verboselog(machine, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
1031            verboselog(machine(), 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
10341032         }
10351033         break;
10361034      case 0x0208/4:
10371035         if( (mem_mask) & 0x0000ffff )
10381036         {
1039            verboselog(machine, 2, "GBA IO Register Read: IME (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), state->m_IME );
1040            retval |= state->m_IME;
1037            verboselog(machine(), 2, "GBA IO Register Read: IME (%08x) = %04x\n", 0x04000000 + ( offset << 2 ), m_IME );
1038            retval |= m_IME;
10411039         }
10421040         if( (mem_mask) & 0xffff0000 )
10431041         {
1044            verboselog(machine, 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
1042            verboselog(machine(), 2, "GBA IO Register Read: UNKNOWN (%08x) = %04x\n", 0x04000000 + ( offset << 2 ) + 2, 0 );
10451043         }
10461044         break;
10471045      case 0x0300/4:
1048         retval = state->m_HALTCNT << 8;
1046         retval = m_HALTCNT << 8;
10491047         break;
10501048      default:
1051//          verboselog(machine, 0, "Unknown GBA I/O register Read: %08x (%08x)\n", 0x04000000 + ( offset << 2 ), ~mem_mask );
1049//          verboselog(machine(), 0, "Unknown GBA I/O register Read: %08x (%08x)\n", 0x04000000 + ( offset << 2 ), ~mem_mask );
10521050         break;
10531051   }
10541052   return retval;
10551053}
10561054
1057static WRITE32_HANDLER( gba_io_w )
1055WRITE32_MEMBER(gba_state::gba_io_w)
10581056{
1059   running_machine &machine = space->machine();
1060   device_t *gb_device = space->machine().device("custom");
1061   gba_state *state = machine.driver_data<gba_state>();
1062
1057   device_t *gb_device = machine().device("custom");
10631058   switch( offset )
10641059   {
10651060      case 0x0000/4:
10661061         if( (mem_mask) & 0x0000ffff )
10671062         {
1068            verboselog(machine, 2, "GBA IO Register Write: DISPCNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1069            state->m_DISPCNT = ( state->m_DISPCNT & ~mem_mask ) | ( data & mem_mask );
1070            if(state->m_DISPCNT & (DISPCNT_WIN0_EN | DISPCNT_WIN1_EN))
1063            verboselog(machine(), 2, "GBA IO Register Write: DISPCNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1064            m_DISPCNT = ( m_DISPCNT & ~mem_mask ) | ( data & mem_mask );
1065            if(m_DISPCNT & (DISPCNT_WIN0_EN | DISPCNT_WIN1_EN))
10711066            {
1072               state->m_windowOn = 1;
1067               m_windowOn = 1;
10731068            }
10741069            else
10751070            {
1076               state->m_windowOn = 0;
1071               m_windowOn = 0;
10771072            }
10781073         }
10791074         if( (mem_mask) & 0xffff0000 )
10801075         {
1081            verboselog(machine, 2, "GBA IO Register Write: Green Swap (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1082            state->m_GRNSWAP = ( state->m_GRNSWAP & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
1076            verboselog(machine(), 2, "GBA IO Register Write: Green Swap (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1077            m_GRNSWAP = ( m_GRNSWAP & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
10831078         }
10841079         break;
10851080      case 0x0004/4:
1086         COMBINE_DATA(&state->m_DISPSTAT);
1081         COMBINE_DATA(&m_DISPSTAT);
10871082         break;
10881083      case 0x0008/4:
10891084         if( (mem_mask) & 0x0000ffff )
10901085         {
1091            verboselog(machine, 2, "GBA IO Register Write: BG0CNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1092            state->m_BG0CNT = ( state->m_BG0CNT & ~mem_mask ) | ( data & mem_mask );
1086            verboselog(machine(), 2, "GBA IO Register Write: BG0CNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1087            m_BG0CNT = ( m_BG0CNT & ~mem_mask ) | ( data & mem_mask );
10931088         }
10941089         if( (mem_mask) & 0xffff0000 )
10951090         {
1096            verboselog(machine, 2, "GBA IO Register Write: BG1CNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1097            state->m_BG1CNT = ( state->m_BG1CNT & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
1091            verboselog(machine(), 2, "GBA IO Register Write: BG1CNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1092            m_BG1CNT = ( m_BG1CNT & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
10981093         }
10991094         break;
11001095      case 0x000c/4:
11011096         if( (mem_mask) & 0x0000ffff )
11021097         {
1103            verboselog(machine, 2, "GBA IO Register Write: BG2CNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1104            state->m_BG2CNT = ( state->m_BG2CNT & ~mem_mask ) | ( data & mem_mask );
1098            verboselog(machine(), 2, "GBA IO Register Write: BG2CNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1099            m_BG2CNT = ( m_BG2CNT & ~mem_mask ) | ( data & mem_mask );
11051100         }
11061101         if( (mem_mask) & 0xffff0000 )
11071102         {
1108            verboselog(machine, 2, "GBA IO Register Write: BG3CNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1109            state->m_BG3CNT = ( state->m_BG3CNT & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
1103            verboselog(machine(), 2, "GBA IO Register Write: BG3CNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1104            m_BG3CNT = ( m_BG3CNT & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
11101105         }
11111106         break;
11121107      case 0x0010/4:
11131108         if( (mem_mask) & 0x0000ffff )
11141109         {
1115            verboselog(machine, 2, "GBA IO Register Write: BG0HOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1116            state->m_BG0HOFS = ( state->m_BG0HOFS & ~mem_mask ) | ( data & mem_mask );
1110            verboselog(machine(), 2, "GBA IO Register Write: BG0HOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1111            m_BG0HOFS = ( m_BG0HOFS & ~mem_mask ) | ( data & mem_mask );
11171112         }
11181113         if( (mem_mask) & 0xffff0000 )
11191114         {
1120            verboselog(machine, 2, "GBA IO Register Write: BG0VOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1121            state->m_BG0VOFS = ( state->m_BG0VOFS & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
1115            verboselog(machine(), 2, "GBA IO Register Write: BG0VOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1116            m_BG0VOFS = ( m_BG0VOFS & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
11221117         }
11231118         break;
11241119      case 0x0014/4:
11251120         if( (mem_mask) & 0x0000ffff )
11261121         {
1127            verboselog(machine, 2, "GBA IO Register Write: BG1HOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1128            state->m_BG1HOFS = ( state->m_BG1HOFS & ~mem_mask ) | ( data & mem_mask );
1122            verboselog(machine(), 2, "GBA IO Register Write: BG1HOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1123            m_BG1HOFS = ( m_BG1HOFS & ~mem_mask ) | ( data & mem_mask );
11291124         }
11301125         if( (mem_mask) & 0xffff0000 )
11311126         {
1132            verboselog(machine, 2, "GBA IO Register Write: BG1VOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1133            state->m_BG1VOFS = ( state->m_BG1VOFS & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
1127            verboselog(machine(), 2, "GBA IO Register Write: BG1VOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1128            m_BG1VOFS = ( m_BG1VOFS & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
11341129         }
11351130         break;
11361131      case 0x0018/4:
11371132         if( (mem_mask) & 0x0000ffff )
11381133         {
1139            verboselog(machine, 2, "GBA IO Register Write: BG2HOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1140            state->m_BG2HOFS = ( state->m_BG2HOFS & ~mem_mask ) | ( data & mem_mask );
1134            verboselog(machine(), 2, "GBA IO Register Write: BG2HOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1135            m_BG2HOFS = ( m_BG2HOFS & ~mem_mask ) | ( data & mem_mask );
11411136         }
11421137         if( (mem_mask) & 0xffff0000 )
11431138         {
1144            verboselog(machine, 2, "GBA IO Register Write: BG2VOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1145            state->m_BG2VOFS = ( state->m_BG2VOFS & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
1139            verboselog(machine(), 2, "GBA IO Register Write: BG2VOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1140            m_BG2VOFS = ( m_BG2VOFS & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
11461141         }
11471142         break;
11481143      case 0x001c/4:
11491144         if( (mem_mask) & 0x0000ffff )
11501145         {
1151            verboselog(machine, 2, "GBA IO Register Write: BG3HOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1152            state->m_BG3HOFS = ( state->m_BG3HOFS & ~mem_mask ) | ( data & mem_mask );
1146            verboselog(machine(), 2, "GBA IO Register Write: BG3HOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1147            m_BG3HOFS = ( m_BG3HOFS & ~mem_mask ) | ( data & mem_mask );
11531148         }
11541149         if( (mem_mask) & 0xffff0000 )
11551150         {
1156            verboselog(machine, 2, "GBA IO Register Write: BG3VOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1157            state->m_BG3VOFS = ( state->m_BG3VOFS & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
1151            verboselog(machine(), 2, "GBA IO Register Write: BG3VOFS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1152            m_BG3VOFS = ( m_BG3VOFS & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
11581153         }
11591154         break;
11601155      case 0x0020/4:
11611156         if( (mem_mask) & 0x0000ffff )
11621157         {
1163            verboselog(machine, 2, "GBA IO Register Write: BG2PA (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1164            state->m_BG2PA = ( state->m_BG2PA & ~mem_mask ) | ( data & mem_mask );
1158            verboselog(machine(), 2, "GBA IO Register Write: BG2PA (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1159            m_BG2PA = ( m_BG2PA & ~mem_mask ) | ( data & mem_mask );
11651160         }
11661161         if( (mem_mask) & 0xffff0000 )
11671162         {
1168            verboselog(machine, 2, "GBA IO Register Write: BG2PB (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1169            state->m_BG2PB = ( state->m_BG2PB & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
1163            verboselog(machine(), 2, "GBA IO Register Write: BG2PB (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1164            m_BG2PB = ( m_BG2PB & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
11701165         }
11711166         break;
11721167      case 0x0024/4:
11731168         if( (mem_mask) & 0x0000ffff )
11741169         {
1175            verboselog(machine, 2, "GBA IO Register Write: BG2PC (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1176            state->m_BG2PC = ( state->m_BG2PC & ~mem_mask ) | ( data & mem_mask );
1170            verboselog(machine(), 2, "GBA IO Register Write: BG2PC (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1171            m_BG2PC = ( m_BG2PC & ~mem_mask ) | ( data & mem_mask );
11771172         }
11781173         if( (mem_mask) & 0xffff0000 )
11791174         {
1180            verboselog(machine, 2, "GBA IO Register Write: BG2PD (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1181            state->m_BG2PD = ( state->m_BG2PD & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
1175            verboselog(machine(), 2, "GBA IO Register Write: BG2PD (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1176            m_BG2PD = ( m_BG2PD & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
11821177         }
11831178         break;
11841179      case 0x0028/4:
11851180         if( (mem_mask) & 0x0000ffff )
11861181         {
1187            verboselog(machine, 2, "GBA IO Register Write: BG2X_LSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1182            verboselog(machine(), 2, "GBA IO Register Write: BG2X_LSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
11881183         }
11891184         if( (mem_mask) & 0xffff0000 )
11901185         {
1191            verboselog(machine, 2, "GBA IO Register Write: BG2X_MSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1186            verboselog(machine(), 2, "GBA IO Register Write: BG2X_MSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
11921187         }
1193         COMBINE_DATA(&state->m_BG2X);
1194         state->m_gfxBG2Changed |= 1;
1188         COMBINE_DATA(&m_BG2X);
1189         m_gfxBG2Changed |= 1;
11951190         break;
11961191      case 0x002c/4:
11971192         if( (mem_mask) & 0x0000ffff )
11981193         {
1199            verboselog(machine, 2, "GBA IO Register Write: BG2Y_LSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1194            verboselog(machine(), 2, "GBA IO Register Write: BG2Y_LSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
12001195         }
12011196         if( (mem_mask) & 0xffff0000 )
12021197         {
1203            verboselog(machine, 2, "GBA IO Register Write: BG2Y_MSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1198            verboselog(machine(), 2, "GBA IO Register Write: BG2Y_MSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
12041199         }
1205         COMBINE_DATA(&state->m_BG2Y);
1206         state->m_gfxBG2Changed |= 2;
1200         COMBINE_DATA(&m_BG2Y);
1201         m_gfxBG2Changed |= 2;
12071202         break;
12081203      case 0x0030/4:
12091204         if( (mem_mask) & 0x0000ffff )
12101205         {
1211            verboselog(machine, 2, "GBA IO Register Write: BG3PA (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1212            state->m_BG3PA = ( state->m_BG3PA & ~mem_mask ) | ( data & mem_mask );
1206            verboselog(machine(), 2, "GBA IO Register Write: BG3PA (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1207            m_BG3PA = ( m_BG3PA & ~mem_mask ) | ( data & mem_mask );
12131208         }
12141209         if( (mem_mask) & 0xffff0000 )
12151210         {
1216            verboselog(machine, 2, "GBA IO Register Write: BG3PB (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1217            state->m_BG3PB = ( state->m_BG3PB & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
1211            verboselog(machine(), 2, "GBA IO Register Write: BG3PB (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1212            m_BG3PB = ( m_BG3PB & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
12181213         }
12191214         break;
12201215      case 0x0034/4:
12211216         if( (mem_mask) & 0x0000ffff )
12221217         {
1223            verboselog(machine, 2, "GBA IO Register Write: BG3PC (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1224            state->m_BG3PC = ( state->m_BG3PC & ~mem_mask ) | ( data & mem_mask );
1218            verboselog(machine(), 2, "GBA IO Register Write: BG3PC (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1219            m_BG3PC = ( m_BG3PC & ~mem_mask ) | ( data & mem_mask );
12251220         }
12261221         if( (mem_mask) & 0xffff0000 )
12271222         {
1228            verboselog(machine, 2, "GBA IO Register Write: BG3PD (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1229            state->m_BG3PD = ( state->m_BG3PD & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
1223            verboselog(machine(), 2, "GBA IO Register Write: BG3PD (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1224            m_BG3PD = ( m_BG3PD & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
12301225         }
12311226         break;
12321227      case 0x0038/4:
12331228         if( (mem_mask) & 0x0000ffff )
12341229         {
1235            verboselog(machine, 2, "GBA IO Register Write: BG3X_LSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1230            verboselog(machine(), 2, "GBA IO Register Write: BG3X_LSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
12361231         }
12371232         if( (mem_mask) & 0xffff0000 )
12381233         {
1239            verboselog(machine, 2, "GBA IO Register Write: BG3X_MSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1234            verboselog(machine(), 2, "GBA IO Register Write: BG3X_MSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
12401235         }
1241         COMBINE_DATA(&state->m_BG3X);
1242         state->m_gfxBG3Changed |= 1;
1236         COMBINE_DATA(&m_BG3X);
1237         m_gfxBG3Changed |= 1;
12431238         break;
12441239      case 0x003c/4:
12451240         if( (mem_mask) & 0x0000ffff )
12461241         {
1247            verboselog(machine, 2, "GBA IO Register Write: BG3Y_LSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1242            verboselog(machine(), 2, "GBA IO Register Write: BG3Y_LSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
12481243         }
12491244         if( (mem_mask) & 0xffff0000 )
12501245         {
1251            verboselog(machine, 2, "GBA IO Register Write: BG3Y_MSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1246            verboselog(machine(), 2, "GBA IO Register Write: BG3Y_MSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
12521247         }
1253         COMBINE_DATA(&state->m_BG3Y);
1254         state->m_gfxBG3Changed |= 2;
1248         COMBINE_DATA(&m_BG3Y);
1249         m_gfxBG3Changed |= 2;
12551250         break;
12561251      case 0x0040/4:
12571252         if( (mem_mask) & 0x0000ffff )
12581253         {
1259            verboselog(machine, 2, "GBA IO Register Write: WIN0H (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1260            state->m_WIN0H = ( state->m_WIN0H & ~mem_mask ) | ( data & mem_mask );
1254            verboselog(machine(), 2, "GBA IO Register Write: WIN0H (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1255            m_WIN0H = ( m_WIN0H & ~mem_mask ) | ( data & mem_mask );
12611256         }
12621257         if( (mem_mask) & 0xffff0000 )
12631258         {
1264            verboselog(machine, 2, "GBA IO Register Write: WIN1H (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1265            state->m_WIN1H = ( state->m_WIN1H & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
1259            verboselog(machine(), 2, "GBA IO Register Write: WIN1H (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1260            m_WIN1H = ( m_WIN1H & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
12661261         }
12671262         break;
12681263      case 0x0044/4:
12691264         if( (mem_mask) & 0x0000ffff )
12701265         {
1271            verboselog(machine, 2, "GBA IO Register Write: WIN0V (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1272            state->m_WIN0V = ( state->m_WIN0V & ~mem_mask ) | ( data & mem_mask );
1266            verboselog(machine(), 2, "GBA IO Register Write: WIN0V (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1267            m_WIN0V = ( m_WIN0V & ~mem_mask ) | ( data & mem_mask );
12731268         }
12741269         if( (mem_mask) & 0xffff0000 )
12751270         {
1276            verboselog(machine, 2, "GBA IO Register Write: WIN1V (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1277            state->m_WIN1V = ( state->m_WIN1V & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
1271            verboselog(machine(), 2, "GBA IO Register Write: WIN1V (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1272            m_WIN1V = ( m_WIN1V & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
12781273         }
12791274         break;
12801275      case 0x0048/4:
12811276         if( (mem_mask) & 0x0000ffff )
12821277         {
1283            verboselog(machine, 2, "GBA IO Register Write: WININ (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1284            state->m_WININ = ( state->m_WININ & ~mem_mask ) | ( data & mem_mask );
1278            verboselog(machine(), 2, "GBA IO Register Write: WININ (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1279            m_WININ = ( m_WININ & ~mem_mask ) | ( data & mem_mask );
12851280         }
12861281         if( (mem_mask) & 0xffff0000 )
12871282         {
1288            verboselog(machine, 2, "GBA IO Register Write: WINOUT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1289            state->m_WINOUT = ( state->m_WINOUT & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
1283            verboselog(machine(), 2, "GBA IO Register Write: WINOUT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1284            m_WINOUT = ( m_WINOUT & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
12901285         }
12911286         break;
12921287      case 0x004c/4:
12931288         if( (mem_mask) & 0x0000ffff )
12941289         {
1295            verboselog(machine, 2, "GBA IO Register Write: MOSAIC (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1296            state->m_MOSAIC = ( state->m_MOSAIC & ~mem_mask ) | ( data & mem_mask );
1290            verboselog(machine(), 2, "GBA IO Register Write: MOSAIC (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1291            m_MOSAIC = ( m_MOSAIC & ~mem_mask ) | ( data & mem_mask );
12971292         }
12981293         if( (mem_mask) & 0xffff0000 )
12991294         {
1300            verboselog(machine, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1295            verboselog(machine(), 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
13011296         }
13021297         break;
13031298      case 0x0050/4:
13041299         if( (mem_mask) & 0x0000ffff )
13051300         {
1306            verboselog(machine, 2, "GBA IO Register Write: BLDCNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1307            state->m_BLDCNT = ( state->m_BLDCNT & ~mem_mask ) | ( data & mem_mask );
1308            if(state->m_BLDCNT & BLDCNT_SFX)
1301            verboselog(machine(), 2, "GBA IO Register Write: BLDCNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1302            m_BLDCNT = ( m_BLDCNT & ~mem_mask ) | ( data & mem_mask );
1303            if(m_BLDCNT & BLDCNT_SFX)
13091304            {
1310               state->m_fxOn = 1;
1305               m_fxOn = 1;
13111306            }
13121307            else
13131308            {
1314               state->m_fxOn = 0;
1309               m_fxOn = 0;
13151310            }
13161311         }
13171312         if( (mem_mask) & 0xffff0000 )
13181313         {
1319            verboselog(machine, 2, "GBA IO Register Write: BLDALPHA (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1320            state->m_BLDALPHA = ( state->m_BLDALPHA & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
1314            verboselog(machine(), 2, "GBA IO Register Write: BLDALPHA (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1315            m_BLDALPHA = ( m_BLDALPHA & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
13211316         }
13221317         break;
13231318      case 0x0054/4:
13241319         if( (mem_mask) & 0x0000ffff )
13251320         {
1326            verboselog(machine, 2, "GBA IO Register Write: BLDY (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1327            state->m_BLDY = ( state->m_BLDY & ~mem_mask ) | ( data & mem_mask );
1321            verboselog(machine(), 2, "GBA IO Register Write: BLDY (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1322            m_BLDY = ( m_BLDY & ~mem_mask ) | ( data & mem_mask );
13281323         }
13291324         if( (mem_mask) & 0xffff0000 )
13301325         {
1331            verboselog(machine, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1326            verboselog(machine(), 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
13321327         }
13331328         break;
13341329      case 0x0058/4:
13351330         if( (mem_mask) & 0x0000ffff )
13361331         {
1337            verboselog(machine, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1332            verboselog(machine(), 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
13381333         }
13391334         if( (mem_mask) & 0xffff0000 )
13401335         {
1341            verboselog(machine, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1336            verboselog(machine(), 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
13421337         }
13431338         break;
13441339      case 0x005c/4:
13451340         if( (mem_mask) & 0x0000ffff )
13461341         {
1347            verboselog(machine, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1342            verboselog(machine(), 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
13481343         }
13491344         if( (mem_mask) & 0xffff0000 )
13501345         {
1351            verboselog(machine, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1346            verboselog(machine(), 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
13521347         }
13531348         break;
13541349      case 0x0060/4:
r14963r14964
14521447         if ((mem_mask) & 0xffff0000)
14531448         {
14541449            data >>= 16;
1455            state->m_SOUNDCNT_H = data;
1450            m_SOUNDCNT_H = data;
14561451
14571452            // DAC A reset?
14581453            if (data & 0x0800)
14591454            {
1460               device_t *gb_a_l = machine.device("direct_a_left");
1461               device_t *gb_a_r = machine.device("direct_a_right");
1455               device_t *gb_a_l = machine().device("direct_a_left");
1456               device_t *gb_a_r = machine().device("direct_a_right");
14621457
1463               state->m_fifo_a_ptr = 17;
1464               state->m_fifo_a_in = 17;
1458               m_fifo_a_ptr = 17;
1459               m_fifo_a_in = 17;
14651460               dac_signed_data_w(gb_a_l, 0x80);
14661461               dac_signed_data_w(gb_a_r, 0x80);
14671462            }
r14963r14964
14691464            // DAC B reset?
14701465            if (data & 0x8000)
14711466            {
1472               device_t *gb_b_l = machine.device("direct_b_left");
1473               device_t *gb_b_r = machine.device("direct_b_right");
1467               device_t *gb_b_l = machine().device("direct_b_left");
1468               device_t *gb_b_r = machine().device("direct_b_right");
14741469
1475               state->m_fifo_b_ptr = 17;
1476               state->m_fifo_b_in = 17;
1470               m_fifo_b_ptr = 17;
1471               m_fifo_b_in = 17;
14771472               dac_signed_data_w(gb_b_l, 0x80);
14781473               dac_signed_data_w(gb_b_r, 0x80);
14791474            }
r14963r14964
14821477      case 0x0084/4:
14831478         if( (mem_mask) & 0x000000ff )
14841479         {
1485            device_t *gb_a_l = machine.device("direct_a_left");
1486            device_t *gb_a_r = machine.device("direct_a_right");
1487            device_t *gb_b_l = machine.device("direct_b_left");
1488            device_t *gb_b_r = machine.device("direct_b_right");
1480            device_t *gb_a_l = machine().device("direct_a_left");
1481            device_t *gb_a_r = machine().device("direct_a_right");
1482            device_t *gb_b_l = machine().device("direct_b_left");
1483            device_t *gb_b_r = machine().device("direct_b_right");
14891484
14901485            gb_sound_w(gb_device, 0x16, data);
1491            if ((data & 0x80) && !(state->m_SOUNDCNT_X & 0x80))
1486            if ((data & 0x80) && !(m_SOUNDCNT_X & 0x80))
14921487            {
1493               state->m_fifo_a_ptr = state->m_fifo_a_in = 17;
1494               state->m_fifo_b_ptr = state->m_fifo_b_in = 17;
1488               m_fifo_a_ptr = m_fifo_a_in = 17;
1489               m_fifo_b_ptr = m_fifo_b_in = 17;
14951490               dac_signed_data_w(gb_a_l, 0x80);
14961491               dac_signed_data_w(gb_a_r, 0x80);
14971492               dac_signed_data_w(gb_b_l, 0x80);
14981493               dac_signed_data_w(gb_b_r, 0x80);
14991494            }
1500            state->m_SOUNDCNT_X = data;
1495            m_SOUNDCNT_X = data;
15011496         }
15021497         break;
15031498      case 0x0088/4:
15041499         if( (mem_mask) & 0x0000ffff )
15051500         {
1506            verboselog(machine, 2, "GBA IO Register Write: SOUNDBIAS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1507            state->m_SOUNDBIAS = ( state->m_SOUNDBIAS & ~mem_mask ) | ( data & mem_mask );
1501            verboselog(machine(), 2, "GBA IO Register Write: SOUNDBIAS (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x0000ffff, ~mem_mask );
1502            m_SOUNDBIAS = ( m_SOUNDBIAS & ~mem_mask ) | ( data & mem_mask );
15081503         }
15091504         if( (mem_mask) & 0xffff0000 )
15101505         {
1511            verboselog(machine, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1506            verboselog(machine(), 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
15121507         }
15131508         break;
15141509      case 0x0090/4:
r14963r14964
15841579         }
15851580         break;
15861581      case 0x00a0/4:
1587         state->m_fifo_a_in %= 17;
1588         state->m_fifo_a[state->m_fifo_a_in++] = (data)&0xff;
1589         state->m_fifo_a_in %= 17;
1590         state->m_fifo_a[state->m_fifo_a_in++] = (data>>8)&0xff;
1591         state->m_fifo_a_in %= 17;
1592         state->m_fifo_a[state->m_fifo_a_in++] = (data>>16)&0xff;
1593         state->m_fifo_a_in %= 17;
1594         state->m_fifo_a[state->m_fifo_a_in++] = (data>>24)&0xff;
1582         m_fifo_a_in %= 17;
1583         m_fifo_a[m_fifo_a_in++] = (data)&0xff;
1584         m_fifo_a_in %= 17;
1585         m_fifo_a[m_fifo_a_in++] = (data>>8)&0xff;
1586         m_fifo_a_in %= 17;
1587         m_fifo_a[m_fifo_a_in++] = (data>>16)&0xff;
1588         m_fifo_a_in %= 17;
1589         m_fifo_a[m_fifo_a_in++] = (data>>24)&0xff;
15951590         break;
15961591      case 0x00a4/4:
1597         state->m_fifo_b_in %= 17;
1598         state->m_fifo_b[state->m_fifo_b_in++] = (data)&0xff;
1599         state->m_fifo_b_in %= 17;
1600         state->m_fifo_b[state->m_fifo_b_in++] = (data>>8)&0xff;
1601         state->m_fifo_b_in %= 17;
1602         state->m_fifo_b[state->m_fifo_b_in++] = (data>>16)&0xff;
1603         state->m_fifo_b_in %= 17;
1604         state->m_fifo_b[state->m_fifo_b_in++] = (data>>24)&0xff;
1592         m_fifo_b_in %= 17;
1593         m_fifo_b[m_fifo_b_in++] = (data)&0xff;
1594         m_fifo_b_in %= 17;
1595         m_fifo_b[m_fifo_b_in++] = (data>>8)&0xff;
1596         m_fifo_b_in %= 17;
1597         m_fifo_b[m_fifo_b_in++] = (data>>16)&0xff;
1598         m_fifo_b_in %= 17;
1599         m_fifo_b[m_fifo_b_in++] = (data>>24)&0xff;
16051600         break;
16061601      case 0x00b0/4:
16071602      case 0x00b4/4:
r14963r14964
16381633
16391634               // retrigger/restart on a rising edge.
16401635               // also reload internal regs
1641               if ((ctrl & 0x8000) && !(state->m_dma_regs[offset] & 0x80000000))
1636               if ((ctrl & 0x8000) && !(m_dma_regs[offset] & 0x80000000))
16421637               {
1643                  state->m_dma_src[ch] = state->m_dma_regs[(ch*3)+0];
1644                  state->m_dma_dst[ch] = state->m_dma_regs[(ch*3)+1];
1645                  state->m_dma_srcadd[ch] = (ctrl>>7)&3;
1646                  state->m_dma_dstadd[ch] = (ctrl>>5)&3;
1638                  m_dma_src[ch] = m_dma_regs[(ch*3)+0];
1639                  m_dma_dst[ch] = m_dma_regs[(ch*3)+1];
1640                  m_dma_srcadd[ch] = (ctrl>>7)&3;
1641                  m_dma_dstadd[ch] = (ctrl>>5)&3;
16471642
1648                  COMBINE_DATA(&state->m_dma_regs[offset]);
1649                  state->m_dma_cnt[ch] = state->m_dma_regs[(ch*3)+2]&0xffff;
1643                  COMBINE_DATA(&m_dma_regs[offset]);
1644                  m_dma_cnt[ch] = m_dma_regs[(ch*3)+2]&0xffff;
16501645
16511646                  // immediate start
16521647                  if ((ctrl & 0x3000) == 0)
16531648                  {
1654                     dma_exec(machine, ch);
1649                     dma_exec(machine(), ch);
16551650                     return;
16561651                  }
16571652               }
16581653            }
16591654
1660            COMBINE_DATA(&state->m_dma_regs[offset]);
1655            COMBINE_DATA(&m_dma_regs[offset]);
16611656         }
16621657         break;
16631658      case 0x0100/4:
r14963r14964
16701665
16711666            offset -= (0x100/4);
16721667
1673            old_timer_regs = state->m_timer_regs[offset];
1668            old_timer_regs = m_timer_regs[offset];
16741669
1675            state->m_timer_regs[offset] = (state->m_timer_regs[offset] & ~(mem_mask & 0xFFFF0000)) | (data & (mem_mask & 0xFFFF0000));
1670            m_timer_regs[offset] = (m_timer_regs[offset] & ~(mem_mask & 0xFFFF0000)) | (data & (mem_mask & 0xFFFF0000));
16761671
1677//              printf("%x to timer %d (mask %x PC %x)\n", data, offset, ~mem_mask, cpu_get_pc(&space->device()));
1672//              printf("%x to timer %d (mask %x PC %x)\n", data, offset, ~mem_mask, cpu_get_pc(&space.device()));
16781673
16791674            if (ACCESSING_BITS_0_15)
16801675            {
1681               state->m_timer_reload[offset] = ((state->m_timer_reload[offset] & ~mem_mask) | (data & mem_mask)) & 0x0000FFFF;
1682               state->m_timer_recalc[offset] = 1;
1676               m_timer_reload[offset] = ((m_timer_reload[offset] & ~mem_mask) | (data & mem_mask)) & 0x0000FFFF;
1677               m_timer_recalc[offset] = 1;
16831678            }
16841679
16851680            // enabling this timer?
r14963r14964
16891684
16901685               if ((old_timer_regs & 0x00800000) == 0) // start bit 0 -> 1
16911686               {
1692                  state->m_timer_regs[offset] = (state->m_timer_regs[offset] & 0xFFFF0000) | (state->m_timer_reload[offset] & 0x0000FFFF);
1687                  m_timer_regs[offset] = (m_timer_regs[offset] & 0xFFFF0000) | (m_timer_reload[offset] & 0x0000FFFF);
16931688               }
16941689
1695               rate = 0x10000 - (state->m_timer_regs[offset] & 0xffff);
1690               rate = 0x10000 - (m_timer_regs[offset] & 0xffff);
16961691
1697               clocksel = timer_clks[(state->m_timer_regs[offset] >> 16) & 3];
1692               clocksel = timer_clks[(m_timer_regs[offset] >> 16) & 3];
16981693
16991694               final = clocksel / rate;
17001695
1701               state->m_timer_hz[offset] = final;
1696               m_timer_hz[offset] = final;
17021697
1703               state->m_timer_recalc[offset] = 0;
1698               m_timer_recalc[offset] = 0;
17041699
17051700//                  printf("Enabling timer %d @ %f Hz\n", offset, final);
17061701
r14963r14964
17091704               {
17101705                  attotime time = attotime::from_hz(final);
17111706                  GBA_ATTOTIME_NORMALIZE(time);
1712                  state->m_tmr_timer[offset]->adjust(time, offset, time);
1707                  m_tmr_timer[offset]->adjust(time, offset, time);
17131708               }
17141709            }
17151710         }
r14963r14964
17171712      case 0x0120/4:
17181713         if( (mem_mask) & 0x0000ffff )
17191714         {
1720            verboselog(machine, 2, "GBA IO Register Write: SIOMULTI0 (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask );
1721            state->m_SIOMULTI0 = ( state->m_SIOMULTI0 & ~mem_mask ) | ( data & mem_mask );
1715            verboselog(machine(), 2, "GBA IO Register Write: SIOMULTI0 (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask );
1716            m_SIOMULTI0 = ( m_SIOMULTI0 & ~mem_mask ) | ( data & mem_mask );
17221717         }
17231718         if( (mem_mask) & 0xffff0000 )
17241719         {
1725            verboselog(machine, 2, "GBA IO Register Write: SIOMULTI1 (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
1726            state->m_SIOMULTI1 = ( state->m_SIOMULTI1 & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
1720            verboselog(machine(), 2, "GBA IO Register Write: SIOMULTI1 (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
1721            m_SIOMULTI1 = ( m_SIOMULTI1 & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
17271722         }
17281723         break;
17291724      case 0x0124/4:
17301725         if( (mem_mask) & 0x0000ffff )
17311726         {
1732            verboselog(machine, 2, "GBA IO Register Write: SIOMULTI2 (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask );
1733            state->m_SIOMULTI2 = ( state->m_SIOMULTI2 & ~mem_mask ) | ( data & mem_mask );
1727            verboselog(machine(), 2, "GBA IO Register Write: SIOMULTI2 (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask );
1728            m_SIOMULTI2 = ( m_SIOMULTI2 & ~mem_mask ) | ( data & mem_mask );
17341729         }
17351730         if( (mem_mask) & 0xffff0000 )
17361731         {
1737            verboselog(machine, 2, "GBA IO Register Write: SIOMULTI3 (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
1738            state->m_SIOMULTI3 = ( state->m_SIOMULTI3 & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
1732            verboselog(machine(), 2, "GBA IO Register Write: SIOMULTI3 (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
1733            m_SIOMULTI3 = ( m_SIOMULTI3 & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
17391734         }
17401735         break;
17411736      case 0x0128/4:
17421737         if( (mem_mask) & 0x0000ffff )
17431738         {
1744            verboselog(machine, 2, "GBA IO Register Write: SIOCNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask );
1739            verboselog(machine(), 2, "GBA IO Register Write: SIOCNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask );
17451740            // normal mode ?
1746            if (((state->m_RCNT & 0x8000) == 0) && ((data & 0x2000) == 0))
1741            if (((m_RCNT & 0x8000) == 0) && ((data & 0x2000) == 0))
17471742            {
17481743               // start ?
1749               if (((state->m_SIOCNT & 0x0080) == 0) && ((data & 0x0080) != 0))
1744               if (((m_SIOCNT & 0x0080) == 0) && ((data & 0x0080) != 0))
17501745               {
17511746                  data &= ~0x0080;
17521747                  // request interrupt ?
17531748                  if (data & 0x4000)
17541749                  {
1755                     gba_request_irq( machine, INT_SIO);
1750                     gba_request_irq( machine(), INT_SIO);
17561751                  }
17571752               }
17581753            }
1759            state->m_SIOCNT = ( state->m_SIOCNT & ~mem_mask ) | ( data & mem_mask );
1754            m_SIOCNT = ( m_SIOCNT & ~mem_mask ) | ( data & mem_mask );
17601755         }
17611756         if( (mem_mask) & 0xffff0000 )
17621757         {
1763            verboselog(machine, 2, "GBA IO Register Write: SIODATA8 (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
1764            state->m_SIODATA8 = ( state->m_SIODATA8 & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
1758            verboselog(machine(), 2, "GBA IO Register Write: SIODATA8 (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
1759            m_SIODATA8 = ( m_SIODATA8 & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
17651760         }
17661761         break;
17671762      case 0x0130/4:
17681763         if( (mem_mask) & 0xffff0000 )
17691764         {
17701765//              printf("KEYCNT = %04x\n", data>>16);
1771            verboselog(machine, 2, "GBA IO Register Write: KEYCNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
1772            state->m_KEYCNT = ( state->m_KEYCNT & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
1766            verboselog(machine(), 2, "GBA IO Register Write: KEYCNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
1767            m_KEYCNT = ( m_KEYCNT & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
17731768         }
17741769         break;
17751770      case 0x0134/4:
17761771         if( (mem_mask) & 0x0000ffff )
17771772         {
1778            verboselog(machine, 2, "GBA IO Register Write: RCNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask );
1779            state->m_RCNT = ( state->m_RCNT & ~mem_mask ) | ( data & mem_mask );
1773            verboselog(machine(), 2, "GBA IO Register Write: RCNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask );
1774            m_RCNT = ( m_RCNT & ~mem_mask ) | ( data & mem_mask );
17801775         }
17811776         if( (mem_mask) & 0xffff0000 )
17821777         {
1783            verboselog(machine, 2, "GBA IO Register Write: IR (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
1784            state->m_IR = ( state->m_IR & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
1778            verboselog(machine(), 2, "GBA IO Register Write: IR (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
1779            m_IR = ( m_IR & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
17851780         }
17861781         break;
17871782      case 0x0140/4:
17881783         if( (mem_mask) & 0x0000ffff )
17891784         {
1790            verboselog(machine, 2, "GBA IO Register Write: JOYCNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask );
1791            state->m_JOYCNT = ( state->m_JOYCNT & ~mem_mask ) | ( data & mem_mask );
1785            verboselog(machine(), 2, "GBA IO Register Write: JOYCNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask );
1786            m_JOYCNT = ( m_JOYCNT & ~mem_mask ) | ( data & mem_mask );
17921787         }
17931788         if( (mem_mask) & 0xffff0000 )
17941789         {
1795            verboselog(machine, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
1790            verboselog(machine(), 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
17961791         }
17971792         break;
17981793      case 0x0150/4:
17991794         if( (mem_mask) & 0x0000ffff )
18001795         {
1801            verboselog(machine, 2, "GBA IO Register Write: JOY_RECV_LSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask );
1802            state->m_JOY_RECV = ( state->m_JOY_RECV & ~mem_mask ) | ( data & mem_mask );
1796            verboselog(machine(), 2, "GBA IO Register Write: JOY_RECV_LSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask );
1797            m_JOY_RECV = ( m_JOY_RECV & ~mem_mask ) | ( data & mem_mask );
18031798         }
18041799         if( (mem_mask) & 0xffff0000 )
18051800         {
1806            verboselog(machine, 2, "GBA IO Register Write: JOY_RECV_MSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
1807            state->m_JOY_RECV = ( state->m_JOY_RECV & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
1801            verboselog(machine(), 2, "GBA IO Register Write: JOY_RECV_MSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
1802            m_JOY_RECV = ( m_JOY_RECV & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
18081803         }
18091804         break;
18101805      case 0x0154/4:
18111806         if( (mem_mask) & 0x0000ffff )
18121807         {
1813            verboselog(machine, 2, "GBA IO Register Write: JOY_TRANS_LSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask );
1814            state->m_JOY_TRANS = ( state->m_JOY_TRANS & ~mem_mask ) | ( data & mem_mask );
1808            verboselog(machine(), 2, "GBA IO Register Write: JOY_TRANS_LSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask );
1809            m_JOY_TRANS = ( m_JOY_TRANS & ~mem_mask ) | ( data & mem_mask );
18151810         }
18161811         if( (mem_mask) & 0xffff0000 )
18171812         {
1818            verboselog(machine, 2, "GBA IO Register Write: JOY_TRANS_MSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
1819            state->m_JOY_TRANS = ( state->m_JOY_TRANS & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
1813            verboselog(machine(), 2, "GBA IO Register Write: JOY_TRANS_MSW (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
1814            m_JOY_TRANS = ( m_JOY_TRANS & ( ~mem_mask >> 16 ) ) | ( ( data & mem_mask ) >> 16 );
18201815         }
18211816         break;
18221817      case 0x0158/4:
18231818         if( (mem_mask) & 0x0000ffff )
18241819         {
1825            verboselog(machine, 2, "GBA IO Register Write: JOYSTAT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask );
1826            state->m_JOYSTAT = ( state->m_JOYSTAT & ~mem_mask ) | ( data & mem_mask );
1820            verboselog(machine(), 2, "GBA IO Register Write: JOYSTAT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask );
1821            m_JOYSTAT = ( m_JOYSTAT & ~mem_mask ) | ( data & mem_mask );
18271822         }
18281823         if( (mem_mask) & 0xffff0000 )
18291824         {
1830            verboselog(machine, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
1825            verboselog(machine(), 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
18311826         }
18321827         break;
18331828      case 0x0200/4:
18341829         if( (mem_mask) & 0x0000ffff )
18351830         {
1836//              printf("IE (%08x) = %04x raw %x (%08x) (scan %d PC %x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, data, ~mem_mask, machine.primary_screen->vpos(), cpu_get_pc(&space->device()));
1837            state->m_IE = ( state->m_IE & ~mem_mask ) | ( data & mem_mask );
1831//              printf("IE (%08x) = %04x raw %x (%08x) (scan %d PC %x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, data, ~mem_mask, machine.primary_screen->vpos(), cpu_get_pc(&space.device()));
1832            m_IE = ( m_IE & ~mem_mask ) | ( data & mem_mask );
18381833#if 0
1839            if (state->m_IE & state->m_IF)
1834            if (m_IE & m_IF)
18401835            {
1841               gba_request_irq(machine, state->m_IF);
1836               gba_request_irq(machine(), m_IF);
18421837            }
18431838#endif
18441839         }
18451840         if( (mem_mask) & 0xffff0000 )
18461841         {
1847            verboselog(machine, 2, "GBA IO Register Write: IF (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ) + 2, ( data & mem_mask ) >> 16, ~mem_mask );
1848            state->m_IF &= ~( ( data & mem_mask ) >> 16 );
1842            verboselog(machine(), 2, "GBA IO Register Write: IF (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ) + 2, ( data & mem_mask ) >> 16, ~mem_mask );
1843            m_IF &= ~( ( data & mem_mask ) >> 16 );
18491844
18501845            // if we still have interrupts, yank the IRQ line again
1851            if (state->m_IF)
1846            if (m_IF)
18521847            {
1853               state->m_irq_timer->adjust(machine.device<cpu_device>("maincpu")->clocks_to_attotime(120));
1848               m_irq_timer->adjust(machine().device<cpu_device>("maincpu")->clocks_to_attotime(120));
18541849            }
18551850         }
18561851         break;
18571852      case 0x0204/4:
18581853         if( (mem_mask) & 0x0000ffff )
18591854         {
1860            verboselog(machine, 2, "GBA IO Register Write: WAITCNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask );
1861            state->m_WAITCNT = ( state->m_WAITCNT & ~mem_mask ) | ( data & mem_mask );
1855            verboselog(machine(), 2, "GBA IO Register Write: WAITCNT (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask );
1856            m_WAITCNT = ( m_WAITCNT & ~mem_mask ) | ( data & mem_mask );
18621857         }
18631858         if( (mem_mask) & 0xffff0000 )
18641859         {
1865            verboselog(machine, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
1860            verboselog(machine(), 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
18661861         }
18671862         break;
18681863      case 0x0208/4:
18691864         if( (mem_mask) & 0x0000ffff )
18701865         {
1871            verboselog(machine, 3, "GBA IO Register Write: IME (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask );
1872            state->m_IME = ( state->m_IME & ~mem_mask ) | ( data & mem_mask );
1873            if (state->m_IF)
1866            verboselog(machine(), 3, "GBA IO Register Write: IME (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), data & mem_mask, ~mem_mask );
1867            m_IME = ( m_IME & ~mem_mask ) | ( data & mem_mask );
1868            if (m_IF)
18741869            {
1875               state->m_irq_timer->adjust(attotime::zero);
1870               m_irq_timer->adjust(attotime::zero);
18761871            }
18771872         }
18781873         if( (mem_mask) & 0xffff0000 )
18791874         {
1880            verboselog(machine, 3, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
1875            verboselog(machine(), 3, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & mem_mask ) >> 16, ~mem_mask );
18811876         }
18821877         break;
18831878      case 0x0300/4:
r14963r14964
18851880         {
18861881            if( (mem_mask) & 0x000000ff )
18871882            {
1888               verboselog(machine, 2, "GBA IO Register Write: POSTFLG (%08x) = %02x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x000000ff, ~mem_mask );
1889               state->m_POSTFLG = data & 0x000000ff;
1883               verboselog(machine(), 2, "GBA IO Register Write: POSTFLG (%08x) = %02x (%08x)\n", 0x04000000 + ( offset << 2 ), data & 0x000000ff, ~mem_mask );
1884               m_POSTFLG = data & 0x000000ff;
18901885            }
18911886            else
18921887            {
1893               state->m_HALTCNT = data & 0x000000ff;
1888               m_HALTCNT = data & 0x000000ff;
18941889
18951890               // either way, wait for an IRQ
1896               device_spin_until_interrupt(machine.device("maincpu"));
1891               device_spin_until_interrupt(machine().device("maincpu"));
18971892            }
18981893         }
18991894         if( (mem_mask) & 0xffff0000 )
19001895         {
1901            verboselog(machine, 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
1896            verboselog(machine(), 2, "GBA IO Register Write: UNKNOWN (%08x) = %04x (%08x)\n", 0x04000000 + ( offset << 2 ), ( data & 0xffff0000 ) >> 16, ~mem_mask );
19021897         }
19031898         break;
19041899      default:
r14963r14964
19341929   return prev;
19351930}
19361931
1937static WRITE32_HANDLER(gba_pram_w)
1932WRITE32_MEMBER(gba_state::gba_pram_w)
19381933{
1939   running_machine &machine = space->machine();
1940   gba_state *state = machine.driver_data<gba_state>();
1941
1942   state->m_gba_pram[offset] = COMBINE_DATA32_16(state->m_gba_pram[offset], data, mem_mask);
1934   m_gba_pram[offset] = COMBINE_DATA32_16(m_gba_pram[offset], data, mem_mask);
19431935}
19441936
1945static WRITE32_HANDLER(gba_vram_w)
1937WRITE32_MEMBER(gba_state::gba_vram_w)
19461938{
1947   running_machine &machine = space->machine();
1948   gba_state *state = machine.driver_data<gba_state>();
1949
1950   state->m_gba_vram[offset] = COMBINE_DATA32_16(state->m_gba_vram[offset], data, mem_mask);
1939   m_gba_vram[offset] = COMBINE_DATA32_16(m_gba_vram[offset], data, mem_mask);
19511940}
19521941
1953static WRITE32_HANDLER(gba_oam_w)
1942WRITE32_MEMBER(gba_state::gba_oam_w)
19541943{
1955   running_machine &machine = space->machine();
1956   gba_state *state = machine.driver_data<gba_state>();
1957
1958   state->m_gba_oam[offset] = COMBINE_DATA32_16(state->m_gba_oam[offset], data, mem_mask);
1944   m_gba_oam[offset] = COMBINE_DATA32_16(m_gba_oam[offset], data, mem_mask);
19591945}
19601946
1961static READ32_HANDLER(gba_bios_r)
1947READ32_MEMBER(gba_state::gba_bios_r)
19621948{
1963   running_machine &machine = space->machine();
1964   gba_state *state = machine.driver_data<gba_state>();
1965   UINT32 *rom = (UINT32 *)(*space->machine().region("maincpu"));
1966   if (state->m_bios_protected != 0)
1949   UINT32 *rom = (UINT32 *)(*machine().region("maincpu"));
1950   if (m_bios_protected != 0)
19671951   {
1968      offset = (state->m_bios_last_address + 8) / 4;
1952      offset = (m_bios_last_address + 8) / 4;
19691953   }
19701954   return rom[offset&0x3fff];
19711955}
19721956
1973static READ32_HANDLER(gba_10000000_r)
1957READ32_MEMBER(gba_state::gba_10000000_r)
19741958{
19751959   UINT32 data, cpsr, pc;
1976   cpu_device *cpu = downcast<cpu_device *>(space->machine().device( "maincpu"));
1960   cpu_device *cpu = downcast<cpu_device *>(machine().device( "maincpu"));
19771961   pc = cpu_get_reg( cpu, ARM7_PC);
19781962   cpsr = cpu_get_reg( cpu, ARM7_CPSR);
19791963   if (T_IS_SET( cpsr))
19801964   {
1981      data = space->read_dword( pc + 8);
1965      data = space.read_dword( pc + 8);
19821966   }
19831967   else
19841968   {
1985      UINT16 insn = space->read_word( pc + 4);
1969      UINT16 insn = space.read_word( pc + 4);
19861970      data = (insn << 16) | (insn << 0);
19871971   }
1988   logerror( "%s: unmapped program memory read from %08X = %08X & %08X\n", space->machine().describe_context( ), 0x10000000 + (offset << 2), data, mem_mask);
1972   logerror( "%s: unmapped program memory read from %08X = %08X & %08X\n", machine().describe_context( ), 0x10000000 + (offset << 2), data, mem_mask);
19891973   return data;
19901974}
19911975
19921976static ADDRESS_MAP_START( gbadvance_map, AS_PROGRAM, 32, gba_state )
19931977   ADDRESS_MAP_UNMAP_HIGH // for "Fruit Mura no Doubutsu Tachi" and "Classic NES Series"
1994   AM_RANGE(0x00000000, 0x00003fff) AM_ROM AM_READ_LEGACY(gba_bios_r)
1978   AM_RANGE(0x00000000, 0x00003fff) AM_ROM AM_READ(gba_bios_r)
19951979   AM_RANGE(0x02000000, 0x0203ffff) AM_RAM AM_MIRROR(0xfc0000)
19961980   AM_RANGE(0x03000000, 0x03007fff) AM_RAM AM_MIRROR(0xff8000)
1997   AM_RANGE(0x04000000, 0x040003ff) AM_READWRITE_LEGACY(gba_io_r, gba_io_w )
1998   AM_RANGE(0x05000000, 0x050003ff) AM_RAM_WRITE_LEGACY(gba_pram_w) AM_SHARE("gba_pram")   // Palette RAM
1999   AM_RANGE(0x06000000, 0x06017fff) AM_RAM_WRITE_LEGACY(gba_vram_w) AM_SHARE("gba_vram")   // VRAM
2000   AM_RANGE(0x07000000, 0x070003ff) AM_RAM_WRITE_LEGACY(gba_oam_w) AM_SHARE("gba_oam")   // OAM
1981   AM_RANGE(0x04000000, 0x040003ff) AM_READWRITE(gba_io_r, gba_io_w )
1982   AM_RANGE(0x05000000, 0x050003ff) AM_RAM_WRITE(gba_pram_w) AM_SHARE("gba_pram")   // Palette RAM
1983   AM_RANGE(0x06000000, 0x06017fff) AM_RAM_WRITE(gba_vram_w) AM_SHARE("gba_vram")   // VRAM
1984   AM_RANGE(0x07000000, 0x070003ff) AM_RAM_WRITE(gba_oam_w) AM_SHARE("gba_oam")   // OAM
20011985   AM_RANGE(0x08000000, 0x09ffffff) AM_ROM AM_REGION("cartridge", 0)   // cartridge ROM (mirror 0)
20021986   AM_RANGE(0x0a000000, 0x0bffffff) AM_ROM AM_REGION("cartridge", 0)   // cartridge ROM (mirror 1)
20031987   AM_RANGE(0x0c000000, 0x0cffffff) AM_ROM AM_REGION("cartridge", 0)   // final mirror
2004   AM_RANGE(0x10000000, 0xffffffff) AM_READ_LEGACY(gba_10000000_r) // for "Justice League Chronicles" (game bug)
1988   AM_RANGE(0x10000000, 0xffffffff) AM_READ(gba_10000000_r) // for "Justice League Chronicles" (game bug)
20051989ADDRESS_MAP_END
20061990
20071991static INPUT_PORTS_START( gbadv )
r14963r14964
22332217   ROM_REGION( 0x2000000, "cartridge", ROMREGION_ERASEFF )
22342218ROM_END
22352219
2236static READ32_HANDLER( sram_r )
2220READ32_MEMBER(gba_state::sram_r)
22372221{
2238   gba_state *state = space->machine().driver_data<gba_state>();
22392222
2240   return state->m_gba_sram[offset];
2223   return m_gba_sram[offset];
22412224}
22422225
2243static WRITE32_HANDLER( sram_w )
2226WRITE32_MEMBER(gba_state::sram_w)
22442227{
2245   gba_state *state = space->machine().driver_data<gba_state>();
22462228
2247   COMBINE_DATA(&state->m_gba_sram[offset]);
2229   COMBINE_DATA(&m_gba_sram[offset]);
22482230}
22492231
2250static READ32_HANDLER( flash_r )
2232READ32_MEMBER(gba_state::flash_r)
22512233{
2252   gba_state *state = space->machine().driver_data<gba_state>();
22532234   UINT32 rv;
22542235
22552236   rv = 0;
2256   offset &= state->m_flash_mask;
2257   if (mem_mask & 0xff) rv |= state->m_mFlashDev->read(offset*4);
2258   if (mem_mask & 0xff00) rv |= state->m_mFlashDev->read((offset*4)+1)<<8;
2259   if (mem_mask & 0xff0000) rv |= state->m_mFlashDev->read((offset*4)+2)<<16;
2260   if (mem_mask & 0xff000000) rv |= state->m_mFlashDev->read((offset*4)+3)<<24;
2237   offset &= m_flash_mask;
2238   if (mem_mask & 0xff) rv |= m_mFlashDev->read(offset*4);
2239   if (mem_mask & 0xff00) rv |= m_mFlashDev->read((offset*4)+1)<<8;
2240   if (mem_mask & 0xff0000) rv |= m_mFlashDev->read((offset*4)+2)<<16;
2241   if (mem_mask & 0xff000000) rv |= m_mFlashDev->read((offset*4)+3)<<24;
22612242
22622243   return rv;
22632244}
22642245
2265static WRITE32_HANDLER( flash_w )
2246WRITE32_MEMBER(gba_state::flash_w)
22662247{
2267   gba_state *state = space->machine().driver_data<gba_state>();
22682248
2269   offset &= state->m_flash_mask;
2249   offset &= m_flash_mask;
22702250   switch (mem_mask)
22712251   {
22722252      case 0xff:
2273         state->m_mFlashDev->write(offset*4, data&0xff);
2253         m_mFlashDev->write(offset*4, data&0xff);
22742254         break;
22752255      case 0xff00:
2276         state->m_mFlashDev->write((offset*4)+1, (data>>8)&0xff);
2256         m_mFlashDev->write((offset*4)+1, (data>>8)&0xff);
22772257         break;
22782258      case 0xff0000:
2279         state->m_mFlashDev->write((offset*4)+2, (data>>16)&0xff);
2259         m_mFlashDev->write((offset*4)+2, (data>>16)&0xff);
22802260         break;
22812261      case 0xff000000:
2282         state->m_mFlashDev->write((offset*4)+3, (data>>24)&0xff);
2262         m_mFlashDev->write((offset*4)+3, (data>>24)&0xff);
22832263         break;
22842264      default:
22852265         fatalerror("Unknown mem_mask for GBA flash_w %x\n", mem_mask);
r14963r14964
22872267   }
22882268}
22892269
2290static READ32_HANDLER( eeprom_r )
2270READ32_MEMBER(gba_state::eeprom_r)
22912271{
22922272   UINT32 out;
2293   gba_state *state = space->machine().driver_data<gba_state>();
22942273
2295   switch (state->m_eeprom_state)
2274   switch (m_eeprom_state)
22962275   {
22972276      case EEP_IDLE:
2298//          printf("eeprom_r: @ %x, mask %08x (state %d) (PC=%x) = %d\n", offset, ~mem_mask, state->m_eeprom_state, activecpu_get_pc(), 1);
2277//          printf("eeprom_r: @ %x, mask %08x (state %d) (PC=%x) = %d\n", offset, ~mem_mask, m_eeprom_state, activecpu_get_pc(), 1);
22992278         return 0x00010001;   // "ready"
23002279
23012280      case EEP_READFIRST:
2302         state->m_eeprom_count--;
2281         m_eeprom_count--;
23032282
2304         if (!state->m_eeprom_count)
2283         if (!m_eeprom_count)
23052284         {
2306            state->m_eeprom_count = 64;
2307            state->m_eeprom_bits = 0;
2308            state->m_eep_data = 0;
2309            state->m_eeprom_state = EEP_READ;
2285            m_eeprom_count = 64;
2286            m_eeprom_bits = 0;
2287            m_eep_data = 0;
2288            m_eeprom_state = EEP_READ;
23102289         }
23112290         break;
23122291      case EEP_READ:
2313         if ((state->m_eeprom_bits == 0) && (state->m_eeprom_count))
2292         if ((m_eeprom_bits == 0) && (m_eeprom_count))
23142293         {
2315            if (state->m_eeprom_addr >= sizeof( state->m_gba_eeprom))
2294            if (m_eeprom_addr >= sizeof( m_gba_eeprom))
23162295            {
2317               fatalerror( "eeprom: invalid address (%x)", state->m_eeprom_addr);
2296               fatalerror( "eeprom: invalid address (%x)", m_eeprom_addr);
23182297            }
2319            state->m_eep_data = state->m_gba_eeprom[state->m_eeprom_addr];
2320            //printf("EEPROM read @ %x = %x (%x)\n", state->m_eeprom_addr, state->m_eep_data, (state->m_eep_data & 0x80) ? 1 : 0);
2321            state->m_eeprom_addr++;
2322            state->m_eeprom_bits = 8;
2298            m_eep_data = m_gba_eeprom[m_eeprom_addr];
2299            //printf("EEPROM read @ %x = %x (%x)\n", m_eeprom_addr, m_eep_data, (m_eep_data & 0x80) ? 1 : 0);
2300            m_eeprom_addr++;
2301            m_eeprom_bits = 8;
23232302         }
23242303
2325         out = (state->m_eep_data & 0x80) ? 1 : 0;
2304         out = (m_eep_data & 0x80) ? 1 : 0;
23262305         out |= (out<<16);
2327         state->m_eep_data <<= 1;
2306         m_eep_data <<= 1;
23282307
2329         state->m_eeprom_bits--;
2330         state->m_eeprom_count--;
2308         m_eeprom_bits--;
2309         m_eeprom_count--;
23312310
2332         if (!state->m_eeprom_count)
2311         if (!m_eeprom_count)
23332312         {
2334            state->m_eeprom_state = EEP_IDLE;
2313            m_eeprom_state = EEP_IDLE;
23352314         }
23362315
23372316//          printf("out = %08x\n", out);
2338//          printf("eeprom_r: @ %x, mask %08x (state %d) (PC=%x) = %08x\n", offset, ~mem_mask, state->m_eeprom_state, activecpu_get_pc(), out);
2317//          printf("eeprom_r: @ %x, mask %08x (state %d) (PC=%x) = %08x\n", offset, ~mem_mask, m_eeprom_state, activecpu_get_pc(), out);
23392318         return out;
23402319   }
2341//  printf("eeprom_r: @ %x, mask %08x (state %d) (PC=%x) = %d\n", offset, ~mem_mask, state->m_eeprom_state, cpu_get_pc(&space->device()), 0);
2320//  printf("eeprom_r: @ %x, mask %08x (state %d) (PC=%x) = %d\n", offset, ~mem_mask, m_eeprom_state, cpu_get_pc(&space.device()), 0);
23422321   return 0;
23432322}
23442323
2345static WRITE32_HANDLER( eeprom_w )
2324WRITE32_MEMBER(gba_state::eeprom_w)
23462325{
2347   gba_state *state = space->machine().driver_data<gba_state>();
23482326
23492327   if (~mem_mask == 0x0000ffff)
23502328   {
23512329      data >>= 16;
23522330   }
23532331
2354//  printf("eeprom_w: %x @ %x (state %d) (PC=%x)\n", data, offset, state->m_eeprom_state, cpu_get_pc(&space->device()));
2332//  printf("eeprom_w: %x @ %x (state %d) (PC=%x)\n", data, offset, m_eeprom_state, cpu_get_pc(&space.device()));
23552333
2356   switch (state->m_eeprom_state)
2334   switch (m_eeprom_state)
23572335   {
23582336      case EEP_IDLE:
23592337         if (data == 1)
23602338         {
2361            state->m_eeprom_state++;
2339            m_eeprom_state++;
23622340         }
23632341         break;
23642342
23652343      case EEP_COMMAND:
23662344         if (data == 1)
23672345         {
2368            state->m_eeprom_command = EEP_READFIRST;
2346            m_eeprom_command = EEP_READFIRST;
23692347         }
23702348         else
23712349         {
2372            state->m_eeprom_command = EEP_WRITE;
2350            m_eeprom_command = EEP_WRITE;
23732351         }
2374         state->m_eeprom_state = EEP_ADDR;
2375         state->m_eeprom_count = state->m_eeprom_addr_bits;
2376         state->m_eeprom_addr = 0;
2352         m_eeprom_state = EEP_ADDR;
2353         m_eeprom_count = m_eeprom_addr_bits;
2354         m_eeprom_addr = 0;
23772355         break;
23782356
23792357      case EEP_ADDR:
2380         state->m_eeprom_addr <<= 1;
2381         state->m_eeprom_addr |= (data & 1);
2382         state->m_eeprom_count--;
2383         if (!state->m_eeprom_count)
2358         m_eeprom_addr <<= 1;
2359         m_eeprom_addr |= (data & 1);
2360         m_eeprom_count--;
2361         if (!m_eeprom_count)
23842362         {
2385            state->m_eeprom_addr *= 8;   // each address points to 8 bytes
2386            if (state->m_eeprom_command == EEP_READFIRST)
2363            m_eeprom_addr *= 8;   // each address points to 8 bytes
2364            if (m_eeprom_command == EEP_READFIRST)
23872365            {
2388               state->m_eeprom_state = EEP_AFTERADDR;
2366               m_eeprom_state = EEP_AFTERADDR;
23892367            }
23902368            else
23912369            {
2392               state->m_eeprom_count = 64;
2393               state->m_eeprom_bits = 8;
2394               state->m_eeprom_state = EEP_WRITE;
2395               state->m_eep_data = 0;
2370               m_eeprom_count = 64;
2371               m_eeprom_bits = 8;
2372               m_eeprom_state = EEP_WRITE;
2373               m_eep_data = 0;
23962374            }
23972375         }
23982376         break;
23992377
24002378      case EEP_AFTERADDR:
2401         state->m_eeprom_state = state->m_eeprom_command;
2402         state->m_eeprom_count = 64;
2403         state->m_eeprom_bits = 0;
2404         state->m_eep_data = 0;
2405         if( state->m_eeprom_state == EEP_READFIRST )
2379         m_eeprom_state = m_eeprom_command;
2380         m_eeprom_count = 64;
2381         m_eeprom_bits = 0;
2382         m_eep_data = 0;
2383         if( m_eeprom_state == EEP_READFIRST )
24062384         {
2407            state->m_eeprom_count = 4;
2385            m_eeprom_count = 4;
24082386         }
24092387         break;
24102388
24112389      case EEP_WRITE:
2412         state->m_eep_data<<= 1;
2413         state->m_eep_data |= (data & 1);
2414         state->m_eeprom_bits--;
2415         state->m_eeprom_count--;
2390         m_eep_data<<= 1;
2391         m_eep_data |= (data & 1);
2392         m_eeprom_bits--;
2393         m_eeprom_count--;
24162394
2417         if (state->m_eeprom_bits == 0)
2395         if (m_eeprom_bits == 0)
24182396         {
2419            mame_printf_verbose("%08x: EEPROM: %02x to %x\n", cpu_get_pc(space->machine().device("maincpu")), state->m_eep_data, state->m_eeprom_addr );
2420            if (state->m_eeprom_addr >= sizeof( state->m_gba_eeprom))
2397            mame_printf_verbose("%08x: EEPROM: %02x to %x\n", cpu_get_pc(machine().device("maincpu")), m_eep_data, m_eeprom_addr );
2398            if (m_eeprom_addr >= sizeof( m_gba_eeprom))
24212399            {
2422               fatalerror( "eeprom: invalid address (%x)", state->m_eeprom_addr);
2400               fatalerror( "eeprom: invalid address (%x)", m_eeprom_addr);
24232401            }
2424            state->m_gba_eeprom[state->m_eeprom_addr] = state->m_eep_data;
2425            state->m_eeprom_addr++;
2426            state->m_eep_data = 0;
2427            state->m_eeprom_bits = 8;
2402            m_gba_eeprom[m_eeprom_addr] = m_eep_data;
2403            m_eeprom_addr++;
2404            m_eep_data = 0;
2405            m_eeprom_bits = 8;
24282406         }
24292407
2430         if (!state->m_eeprom_count)
2408         if (!m_eeprom_count)
24312409         {
2432            state->m_eeprom_state = EEP_AFTERWRITE;
2410            m_eeprom_state = EEP_AFTERWRITE;
24332411         }
24342412         break;
24352413
24362414      case EEP_AFTERWRITE:
2437         state->m_eeprom_state = EEP_IDLE;
2415         m_eeprom_state = EEP_IDLE;
24382416         break;
24392417   }
24402418}
r14963r14964
30853063
30863064      if (cart_size <= (16 * 1024 * 1024))
30873065      {
3088         image.device().machine().device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0xd000000, 0xdffffff, FUNC(eeprom_r));
3089         image.device().machine().device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler(0xd000000, 0xdffffff, FUNC(eeprom_w));
3066         image.device().machine().device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0xd000000, 0xdffffff, read32_delegate(FUNC(gba_state::eeprom_r),state));
3067         image.device().machine().device("maincpu")->memory().space(AS_PROGRAM)->install_write_handler(0xd000000, 0xdffffff, write32_delegate(FUNC(gba_state::eeprom_w),state));
30903068      }
30913069      else
30923070      {
3093         image.device().machine().device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0xdffff00, 0xdffffff, FUNC(eeprom_r));
3094         image.device().machine().device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler(0xdffff00, 0xdffffff, FUNC(eeprom_w));
3071         image.device().machine().device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0xdffff00, 0xdffffff, read32_delegate(FUNC(gba_state::eeprom_r),state));
3072         image.device().machine().device("maincpu")->memory().space(AS_PROGRAM)->install_write_handler(0xdffff00, 0xdffffff, write32_delegate(FUNC(gba_state::eeprom_w),state));
30953073      }
30963074   }
30973075
r14963r14964
31003078      state->m_nvptr = (UINT8 *)&state->m_gba_sram;
31013079      state->m_nvsize = 0x10000;
31023080
3103      image.device().machine().device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0xe000000, 0xe00ffff, FUNC(sram_r));
3104      image.device().machine().device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler(0xe000000, 0xe00ffff, FUNC(sram_w));
3081      image.device().machine().device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0xe000000, 0xe00ffff, read32_delegate(FUNC(gba_state::sram_r),state));
3082      image.device().machine().device("maincpu")->memory().space(AS_PROGRAM)->install_write_handler(0xe000000, 0xe00ffff, write32_delegate(FUNC(gba_state::sram_w),state));
31053083   }
31063084
31073085   if (chip & GBA_CHIP_FLASH_1M)
r14963r14964
31113089      state->m_flash_size = 0x20000;
31123090      state->m_flash_mask = 0x1ffff/4;
31133091
3114      image.device().machine().device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0xe000000, 0xe01ffff, FUNC(flash_r));
3115      image.device().machine().device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler(0xe000000, 0xe01ffff, FUNC(flash_w));
3092      image.device().machine().device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0xe000000, 0xe01ffff, read32_delegate(FUNC(gba_state::flash_r),state));
3093      image.device().machine().device("maincpu")->memory().space(AS_PROGRAM)->install_write_handler(0xe000000, 0xe01ffff, write32_delegate(FUNC(gba_state::flash_w),state));
31163094   }
31173095
31183096   if ((chip & GBA_CHIP_FLASH) || (chip & GBA_CHIP_FLASH_512))
r14963r14964
31223100      state->m_flash_size = 0x10000;
31233101      state->m_flash_mask = 0xffff/4;
31243102
3125      image.device().machine().device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0xe000000, 0xe00ffff, FUNC(flash_r));
3126      image.device().machine().device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_write_handler(0xe000000, 0xe00ffff, FUNC(flash_w));
3103      image.device().machine().device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0xe000000, 0xe00ffff, read32_delegate(FUNC(gba_state::flash_r),state));
3104      image.device().machine().device("maincpu")->memory().space(AS_PROGRAM)->install_write_handler(0xe000000, 0xe00ffff, write32_delegate(FUNC(gba_state::flash_w),state));
31273105   }
31283106
31293107   if (chip & GBA_CHIP_RTC)

Previous 15994 Revisions Next


© 1998-2018 The MESS Team