Previous 199869 Revisions Next

r20846 Friday 8th February, 2013 at 21:16:01 UTC by Wilbert Pol
(MESS) pk8020.c: Reduce tagmap lookups (nw)
[src/mess/includes]pk8020.h
[src/mess/machine]pk8020.c
[src/mess/video]pk8020.c

trunk/src/mess/machine/pk8020.c
r20845r20846
1212#include "includes/pk8020.h"
1313#include "cpu/i8085/i8085.h"
1414#include "machine/wd17xx.h"
15#include "machine/ram.h"
1615#include "imagedev/flopdrv.h"
1716
18static void pk8020_set_bank(running_machine &machine,UINT8 data);
1917
20
2118READ8_MEMBER(pk8020_state::keyboard_r)
2219{
23   static const char *const keynames[] = {
24      "LINE0", "LINE1", "LINE2", "LINE3", "LINE4", "LINE5", "LINE6", "LINE7",
25      "LINE8", "LINE9", "LINE10", "LINE11", "LINE12", "LINE13", "LINE14", "LINE15"
26   };
2720   UINT8 retVal=0x00;
2821   UINT8 line = 0;
2922   if (offset & 0x100)  line=8;
3023
31   if (offset & 0x0001) retVal|=ioport(keynames[line])->read();
24   if (offset & 0x0001) retVal|=m_io_port[line]->read();
3225   line++;
33   if (offset & 0x0002) retVal|=ioport(keynames[line])->read();
26   if (offset & 0x0002) retVal|=m_io_port[line]->read();
3427   line++;
35   if (offset & 0x0004) retVal|=ioport(keynames[line])->read();
28   if (offset & 0x0004) retVal|=m_io_port[line]->read();
3629   line++;
37   if (offset & 0x0008) retVal|=ioport(keynames[line])->read();
30   if (offset & 0x0008) retVal|=m_io_port[line]->read();
3831   line++;
39   if (offset & 0x0010) retVal|=ioport(keynames[line])->read();
32   if (offset & 0x0010) retVal|=m_io_port[line]->read();
4033   line++;
41   if (offset & 0x0020) retVal|=ioport(keynames[line])->read();
34   if (offset & 0x0020) retVal|=m_io_port[line]->read();
4235   line++;
43   if (offset & 0x0040) retVal|=ioport(keynames[line])->read();
36   if (offset & 0x0040) retVal|=m_io_port[line]->read();
4437   line++;
45   if (offset & 0x0080) retVal|=ioport(keynames[line])->read();
38   if (offset & 0x0080) retVal|=m_io_port[line]->read();
4639   line++;
4740
4841   return retVal;
r20845r20846
5043
5144READ8_MEMBER(pk8020_state::sysreg_r)
5245{
53   return machine().device<ram_device>(RAM_TAG)->pointer()[offset];
46   return m_ram->pointer()[offset];
5447}
5548WRITE8_MEMBER(pk8020_state::sysreg_w)
5649{
5750   if (BIT(offset,7)==0) {
58      pk8020_set_bank(machine(),data >> 2);
51      pk8020_set_bank(data >> 2);
5952   } else if (BIT(offset,6)==0) {
6053      // Color
6154      m_color = data;
r20845r20846
7366
7467READ8_MEMBER(pk8020_state::text_r)
7568{
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];
69   if (m_attr == 3) m_text_attr=m_ram->pointer()[0x40400+offset];
70   return m_ram->pointer()[0x40000+offset];
7871}
7972
8073WRITE8_MEMBER(pk8020_state::text_w)
8174{
82   UINT8 *ram = machine().device<ram_device>(RAM_TAG)->pointer();
75   UINT8 *ram = m_ram->pointer();
8376   ram[0x40000+offset] = data;
8477   switch (m_attr) {
8578      case 0: break;
r20845r20846
9184
9285READ8_MEMBER(pk8020_state::gzu_r)
9386{
94   UINT8 *addr = machine().device<ram_device>(RAM_TAG)->pointer() + 0x10000 + (m_video_page_access * 0xC000);
87   UINT8 *addr = m_ram->pointer() + 0x10000 + (m_video_page_access * 0xC000);
9588   UINT8 p0 = addr[offset];
9689   UINT8 p1 = addr[offset + 0x4000];
9790   UINT8 p2 = addr[offset + 0x8000];
r20845r20846
125118
126119WRITE8_MEMBER(pk8020_state::gzu_w)
127120{
128   UINT8 *addr = machine().device<ram_device>(RAM_TAG)->pointer() + 0x10000 + (m_video_page_access * 0xC000);
121   UINT8 *addr = m_ram->pointer() + 0x10000 + (m_video_page_access * 0xC000);
129122   UINT8 *plane_0 = addr;
130123   UINT8 *plane_1 = addr + 0x4000;
131124   UINT8 *plane_2 = addr + 0x8000;
r20845r20846
153146
154147READ8_MEMBER(pk8020_state::devices_r)
155148{
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");
164
165149   switch(offset & 0x38)
166150   {
167      case 0x00: return pit8253_r(pit,space, offset & 3);
168      case 0x08: return ppi3->read(space,offset & 3);
151      case 0x00: return pit8253_r(m_pit8253,space, offset & 3);
152      case 0x08: return m_ppi8255_3->read(space,offset & 3);
169153      case 0x10: switch(offset & 1) {
170                  case 0 : return rs232->data_r(space,0);
171                  case 1 : return rs232->status_r(space,0);
154                  case 0 : return m_rs232->data_r(space,0);
155                  case 1 : return m_rs232->status_r(space,0);
172156               }
173157               break;
174158      case 0x18: switch(offset & 3) {
175                  case 0 : return wd17xx_status_r(fdc,space, 0);
176                  case 1 : return wd17xx_track_r(fdc,space, 0);
177                  case 2 : return wd17xx_sector_r(fdc,space, 0);
178                  case 3 : return wd17xx_data_r(fdc,space, 0);
159                  case 0 : return wd17xx_status_r(m_wd1793,space, 0);
160                  case 1 : return wd17xx_track_r(m_wd1793,space, 0);
161                  case 2 : return wd17xx_sector_r(m_wd1793,space, 0);
162                  case 3 : return wd17xx_data_r(m_wd1793,space, 0);
179163               }
180164               break;
181165      case 0x20: switch(offset & 1) {
182                  case 0 : return lan->data_r(space,0);
183                  case 1 : return lan->status_r(space,0);
166                  case 0 : return m_lan->data_r(space,0);
167                  case 1 : return m_lan->status_r(space,0);
184168               }
185169               break;
186      case 0x28: return pic8259_r(pic,space, offset & 1);
187      case 0x30: return ppi2->read(space,offset & 3);
188      case 0x38: return ppi1->read(space,offset & 3);
170      case 0x28: return pic8259_r(m_pic8259,space, offset & 1);
171      case 0x30: return m_ppi8255_2->read(space,offset & 3);
172      case 0x38: return m_ppi8255_1->read(space,offset & 3);
189173   }
190174   return 0xff;
191175}
192176
193177WRITE8_MEMBER(pk8020_state::devices_w)
194178{
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");
203
204179   switch(offset & 0x38)
205180   {
206      case 0x00: pit8253_w(pit,space, offset & 3,data); break;
207      case 0x08: ppi3->write(space,offset & 3,data); break;
181      case 0x00: pit8253_w(m_pit8253,space, offset & 3,data); break;
182      case 0x08: m_ppi8255_3->write(space,offset & 3,data); break;
208183      case 0x10: switch(offset & 1) {
209                  case 0 : rs232->data_w(space,0,data); break;
210                  case 1 : rs232->control_w(space,0,data); break;
184                  case 0 : m_rs232->data_w(space,0,data); break;
185                  case 1 : m_rs232->control_w(space,0,data); break;
211186               }
212187               break;
213188      case 0x18: switch(offset & 3) {
214                  case 0 : wd17xx_command_w(fdc,space, 0,data);break;
215                  case 1 : wd17xx_track_w(fdc,space, 0,data);break;
216                  case 2 : wd17xx_sector_w(fdc,space, 0,data);break;
217                  case 3 : wd17xx_data_w(fdc,space, 0,data);break;
189                  case 0 : wd17xx_command_w(m_wd1793,space, 0,data);break;
190                  case 1 : wd17xx_track_w(m_wd1793,space, 0,data);break;
191                  case 2 : wd17xx_sector_w(m_wd1793,space, 0,data);break;
192                  case 3 : wd17xx_data_w(m_wd1793,space, 0,data);break;
218193               }
219194               break;
220195      case 0x20: switch(offset & 1) {
221                  case 0 : lan->data_w(space,0,data); break;
222                  case 1 : lan->control_w(space,0,data); break;
196                  case 0 : m_lan->data_w(space,0,data); break;
197                  case 1 : m_lan->control_w(space,0,data); break;
223198               }
224199               break;
225      case 0x28: pic8259_w(pic,space, offset & 1,data);break;
226      case 0x30: ppi2->write(space,offset & 3,data); break;
227      case 0x38: ppi1->write(space,offset & 3,data); break;
200      case 0x28: pic8259_w(m_pic8259,space, offset & 1,data);break;
201      case 0x30: m_ppi8255_2->write(space,offset & 3,data); break;
202      case 0x38: m_ppi8255_1->write(space,offset & 3,data); break;
228203   }
229204}
230205
231static void pk8020_set_bank(running_machine &machine,UINT8 data)
206void pk8020_state::pk8020_set_bank(UINT8 data)
232207{
233   pk8020_state *state = machine.driver_data<pk8020_state>();
234   address_space &space = machine.device("maincpu")->memory().space(AS_PROGRAM);
235   UINT8 *mem = state->memregion("maincpu")->base();
236   UINT8 *ram = machine.device<ram_device>(RAM_TAG)->pointer();
208   address_space &space = m_maincpu->space(AS_PROGRAM);
209   UINT8 *mem = m_region_maincpu->base();
210   UINT8 *ram = m_ram->pointer();
237211
238212   switch(data & 0x1F) {
239213      case 0x00 :
r20845r20846
241215                  // ROM
242216                  space.install_read_bank (0x0000, 0x37ff, "bank1");
243217                  space.install_write_bank(0x0000, 0x37ff, "bank2");
244                  state->membank("bank1")->set_base(mem + 0x10000);
245                  state->membank("bank2")->set_base(ram + 0x0000);
218                  membank("bank1")->set_base(mem + 0x10000);
219                  membank("bank2")->set_base(ram + 0x0000);
246220                  // Keyboard
247                  space.install_read_handler (0x3800, 0x39ff, read8_delegate(FUNC(pk8020_state::keyboard_r),state));
221                  space.install_read_handler (0x3800, 0x39ff, read8_delegate(FUNC(pk8020_state::keyboard_r),this));
248222                  space.install_write_bank(0x3800, 0x39ff, "bank3");
249                  state->membank("bank3")->set_base(ram + 0x3800);
223                  membank("bank3")->set_base(ram + 0x3800);
250224                  // System reg
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));
225                  space.install_read_handler (0x3a00, 0x3aff, read8_delegate(FUNC(pk8020_state::sysreg_r),this));
226                  space.install_write_handler(0x3a00, 0x3aff, write8_delegate(FUNC(pk8020_state::sysreg_w),this));
253227                  // Devices
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));
228                  space.install_read_handler (0x3b00, 0x3bff, read8_delegate(FUNC(pk8020_state::devices_r),this));
229                  space.install_write_handler(0x3b00, 0x3bff, write8_delegate(FUNC(pk8020_state::devices_w),this));
256230                  // Text Video Memory
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));
231                  space.install_read_handler (0x3c00, 0x3fff, read8_delegate(FUNC(pk8020_state::text_r),this));
232                  space.install_write_handler(0x3c00, 0x3fff, write8_delegate(FUNC(pk8020_state::text_w),this));
259233                  // RAM
260234                  space.install_read_bank (0x4000, 0xffff, "bank4");
261235                  space.install_write_bank(0x4000, 0xffff, "bank5");
262                  state->membank("bank4")->set_base(ram + 0x4000);
263                  state->membank("bank5")->set_base(ram + 0x4000);
236                  membank("bank4")->set_base(ram + 0x4000);
237                  membank("bank5")->set_base(ram + 0x4000);
264238               }
265239               break;
266240      case 0x01 : {
267241                  // ROM
268242                  space.install_read_bank (0x0000, 0x1fff, "bank1");
269243                  space.install_write_bank(0x0000, 0x1fff, "bank2");
270                  state->membank("bank1")->set_base(mem + 0x10000);
271                  state->membank("bank2")->set_base(ram + 0x0000);
244                  membank("bank1")->set_base(mem + 0x10000);
245                  membank("bank2")->set_base(ram + 0x0000);
272246                  // RAM
273247                  space.install_read_bank (0x2000, 0xffff, "bank3");
274248                  space.install_write_bank(0x2000, 0xffff, "bank4");
275                  state->membank("bank3")->set_base(ram + 0x2000);
276                  state->membank("bank4")->set_base(ram + 0x2000);
249                  membank("bank3")->set_base(ram + 0x2000);
250                  membank("bank4")->set_base(ram + 0x2000);
277251               }
278252               break;
279253      case 0x02 : {
280254                  // ROM
281255                  space.install_read_bank (0x0000, 0x3fff, "bank1");
282256                  space.install_write_bank(0x0000, 0x3fff, "bank2");
283                  state->membank("bank1")->set_base(mem + 0x10000);
284                  state->membank("bank2")->set_base(ram + 0x0000);
257                  membank("bank1")->set_base(mem + 0x10000);
258                  membank("bank2")->set_base(ram + 0x0000);
285259                  // RAM
286260                  space.install_read_bank (0x4000, 0xffff, "bank3");
287261                  space.install_write_bank(0x4000, 0xffff, "bank4");
288                  state->membank("bank3")->set_base(ram + 0x4000);
289                  state->membank("bank4")->set_base(ram + 0x4000);
262                  membank("bank3")->set_base(ram + 0x4000);
263                  membank("bank4")->set_base(ram + 0x4000);
290264               }
291265               break;
292266      case 0x03 : {
293267                  // RAM
294268                  space.install_read_bank (0x0000, 0xffff, "bank1");
295269                  space.install_write_bank(0x0000, 0xffff, "bank2");
296                  state->membank("bank1")->set_base(ram);
297                  state->membank("bank2")->set_base(ram);
270                  membank("bank1")->set_base(ram);
271                  membank("bank2")->set_base(ram);
298272               }
299273               break;
300274      case 0x04 :
r20845r20846
303277                  // ROM
304278                  space.install_read_bank (0x0000, 0x1fff, "bank1");
305279                  space.install_write_bank(0x0000, 0x1fff, "bank2");
306                  state->membank("bank1")->set_base(mem + 0x10000);
307                  state->membank("bank2")->set_base(ram + 0x0000);
280                  membank("bank1")->set_base(mem + 0x10000);
281                  membank("bank2")->set_base(ram + 0x0000);
308282                  // RAM
309283                  space.install_read_bank (0x2000, 0xf7ff, "bank3");
310284                  space.install_write_bank(0x2000, 0xf7ff, "bank4");
311                  state->membank("bank3")->set_base(ram + 0x2000);
312                  state->membank("bank4")->set_base(ram + 0x2000);
285                  membank("bank3")->set_base(ram + 0x2000);
286                  membank("bank4")->set_base(ram + 0x2000);
313287                  // Keyboard
314                  space.install_read_handler (0xf800, 0xf9ff, read8_delegate(FUNC(pk8020_state::keyboard_r),state));
288                  space.install_read_handler (0xf800, 0xf9ff, read8_delegate(FUNC(pk8020_state::keyboard_r),this));
315289                  space.install_write_bank(0xf800, 0xf9ff, "bank5");
316                  state->membank("bank5")->set_base(ram + 0xf800);
290                  membank("bank5")->set_base(ram + 0xf800);
317291                  // System reg
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));
292                  space.install_read_handler (0xfa00, 0xfaff, read8_delegate(FUNC(pk8020_state::sysreg_r),this));
293                  space.install_write_handler(0xfa00, 0xfaff, write8_delegate(FUNC(pk8020_state::sysreg_w),this));
320294                  // Devices
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));
295                  space.install_read_handler (0xfb00, 0xfbff, read8_delegate(FUNC(pk8020_state::devices_r),this));
296                  space.install_write_handler(0xfb00, 0xfbff, write8_delegate(FUNC(pk8020_state::devices_w),this));
323297                  // Text Video Memory
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));
298                  space.install_read_handler (0xfc00, 0xffff, read8_delegate(FUNC(pk8020_state::text_r),this));
299                  space.install_write_handler(0xfc00, 0xffff, write8_delegate(FUNC(pk8020_state::text_w),this));
326300               }
327301               break;
328302      case 0x06 :
r20845r20846
330304                  // ROM
331305                  space.install_read_bank (0x0000, 0x3fff, "bank1");
332306                  space.install_write_bank(0x0000, 0x3fff, "bank2");
333                  state->membank("bank1")->set_base(mem + 0x10000);
334                  state->membank("bank2")->set_base(ram + 0x0000);
307                  membank("bank1")->set_base(mem + 0x10000);
308                  membank("bank2")->set_base(ram + 0x0000);
335309                  // RAM
336310                  space.install_read_bank (0x4000, 0xf7ff, "bank3");
337311                  space.install_write_bank(0x4000, 0xf7ff, "bank4");
338                  state->membank("bank3")->set_base(ram + 0x4000);
339                  state->membank("bank4")->set_base(ram + 0x4000);
312                  membank("bank3")->set_base(ram + 0x4000);
313                  membank("bank4")->set_base(ram + 0x4000);
340314                  // Keyboard
341                  space.install_read_handler (0xf800, 0xf9ff, read8_delegate(FUNC(pk8020_state::keyboard_r),state));
315                  space.install_read_handler (0xf800, 0xf9ff, read8_delegate(FUNC(pk8020_state::keyboard_r),this));
342316                  space.install_write_bank(0xf800, 0xf9ff, "bank5");
343                  state->membank("bank5")->set_base(ram + 0xf800);
317                  membank("bank5")->set_base(ram + 0xf800);
344318                  // System reg
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));
319                  space.install_read_handler (0xfa00, 0xfaff, read8_delegate(FUNC(pk8020_state::sysreg_r),this));
320                  space.install_write_handler(0xfa00, 0xfaff, write8_delegate(FUNC(pk8020_state::sysreg_w),this));
347321                  // Devices
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));
322                  space.install_read_handler (0xfb00, 0xfbff, read8_delegate(FUNC(pk8020_state::devices_r),this));
323                  space.install_write_handler(0xfb00, 0xfbff, write8_delegate(FUNC(pk8020_state::devices_w),this));
350324                  // Text Video Memory
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));
325                  space.install_read_handler (0xfc00, 0xffff, read8_delegate(FUNC(pk8020_state::text_r),this));
326                  space.install_write_handler(0xfc00, 0xffff, write8_delegate(FUNC(pk8020_state::text_w),this));
353327               }
354328               break;
355329      case 0x07 :
r20845r20846
357331                  // RAM
358332                  space.install_read_bank (0x0000, 0xf7ff, "bank1");
359333                  space.install_write_bank(0x0000, 0xf7ff, "bank2");
360                  state->membank("bank1")->set_base(ram);
361                  state->membank("bank2")->set_base(ram);
334                  membank("bank1")->set_base(ram);
335                  membank("bank2")->set_base(ram);
362336                  // Keyboard
363                  space.install_read_handler (0xf800, 0xf9ff, read8_delegate(FUNC(pk8020_state::keyboard_r),state));
337                  space.install_read_handler (0xf800, 0xf9ff, read8_delegate(FUNC(pk8020_state::keyboard_r),this));
364338                  space.install_write_bank(0xf800, 0xf9ff, "bank3");
365                  state->membank("bank3")->set_base(ram + 0xf800);
339                  membank("bank3")->set_base(ram + 0xf800);
366340                  // System reg
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));
341                  space.install_read_handler (0xfa00, 0xfaff, read8_delegate(FUNC(pk8020_state::sysreg_r),this));
342                  space.install_write_handler(0xfa00, 0xfaff, write8_delegate(FUNC(pk8020_state::sysreg_w),this));
369343                  // Devices
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));
344                  space.install_read_handler (0xfb00, 0xfbff, read8_delegate(FUNC(pk8020_state::devices_r),this));
345                  space.install_write_handler(0xfb00, 0xfbff, write8_delegate(FUNC(pk8020_state::devices_w),this));
372346                  // Text Video Memory
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));
347                  space.install_read_handler (0xfc00, 0xffff, read8_delegate(FUNC(pk8020_state::text_r),this));
348                  space.install_write_handler(0xfc00, 0xffff, write8_delegate(FUNC(pk8020_state::text_w),this));
375349               }
376350               break;
377351      case 0x08 :
r20845r20846
379353                  // ROM
380354                  space.install_read_bank (0x0000, 0x3fff, "bank1");
381355                  space.install_write_bank(0x0000, 0x3fff, "bank2");
382                  state->membank("bank1")->set_base(mem + 0x10000);
383                  state->membank("bank2")->set_base(ram + 0x0000);
356                  membank("bank1")->set_base(mem + 0x10000);
357                  membank("bank2")->set_base(ram + 0x0000);
384358                  // Keyboard
385                  space.install_read_handler (0x3800, 0x39ff, read8_delegate(FUNC(pk8020_state::keyboard_r),state));
359                  space.install_read_handler (0x3800, 0x39ff, read8_delegate(FUNC(pk8020_state::keyboard_r),this));
386360                  space.install_write_bank(0x3800, 0x39ff, "bank3");
387                  state->membank("bank3")->set_base(ram + 0x3800);
361                  membank("bank3")->set_base(ram + 0x3800);
388362                  // System reg
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));
363                  space.install_read_handler (0x3a00, 0x3aff, read8_delegate(FUNC(pk8020_state::sysreg_r),this));
364                  space.install_write_handler(0x3a00, 0x3aff, write8_delegate(FUNC(pk8020_state::sysreg_w),this));
391365                  // Devices
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));
366                  space.install_read_handler (0x3b00, 0x3bff, read8_delegate(FUNC(pk8020_state::devices_r),this));
367                  space.install_write_handler(0x3b00, 0x3bff, write8_delegate(FUNC(pk8020_state::devices_w),this));
394368                  // Text Video Memory
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));
369                  space.install_read_handler (0x3c00, 0x3fff, read8_delegate(FUNC(pk8020_state::text_r),this));
370                  space.install_write_handler(0x3c00, 0x3fff, write8_delegate(FUNC(pk8020_state::text_w),this));
397371                  // RAM
398372                  space.install_read_bank (0x4000, 0xbfff, "bank4");
399373                  space.install_write_bank(0x4000, 0xbfff, "bank5");
400                  state->membank("bank4")->set_base(ram + 0x4000);
401                  state->membank("bank5")->set_base(ram + 0x4000);
374                  membank("bank4")->set_base(ram + 0x4000);
375                  membank("bank5")->set_base(ram + 0x4000);
402376                  // Video RAM
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));
377                  space.install_read_handler (0xc000, 0xffff, read8_delegate(FUNC(pk8020_state::gzu_r),this));
378                  space.install_write_handler(0xc000, 0xffff, write8_delegate(FUNC(pk8020_state::gzu_w),this));
405379
406380               }
407381               break;
r20845r20846
410384                  // ROM
411385                  space.install_read_bank (0x0000, 0x1fff, "bank1");
412386                  space.install_write_bank(0x0000, 0x1fff, "bank2");
413                  state->membank("bank1")->set_base(mem + 0x10000);
414                  state->membank("bank2")->set_base(ram + 0x0000);
387                  membank("bank1")->set_base(mem + 0x10000);
388                  membank("bank2")->set_base(ram + 0x0000);
415389                  // RAM
416390                  space.install_read_bank (0x2000, 0xbfff, "bank3");
417391                  space.install_write_bank(0x2000, 0xbfff, "bank4");
418                  state->membank("bank3")->set_base(ram + 0x2000);
419                  state->membank("bank4")->set_base(ram + 0x2000);
392                  membank("bank3")->set_base(ram + 0x2000);
393                  membank("bank4")->set_base(ram + 0x2000);
420394                  // Video RAM
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));
395                  space.install_read_handler (0xc000, 0xffff, read8_delegate(FUNC(pk8020_state::gzu_r),this));
396                  space.install_write_handler(0xc000, 0xffff, write8_delegate(FUNC(pk8020_state::gzu_w),this));
423397               }
424398               break;
425399      case 0x0A :
r20845r20846
427401                  // ROM
428402                  space.install_read_bank (0x0000, 0x3fff, "bank1");
429403                  space.install_write_bank(0x0000, 0x3fff, "bank2");
430                  state->membank("bank1")->set_base(mem + 0x10000);
431                  state->membank("bank2")->set_base(ram + 0x0000);
404                  membank("bank1")->set_base(mem + 0x10000);
405                  membank("bank2")->set_base(ram + 0x0000);
432406                  // RAM
433407                  space.install_read_bank (0x4000, 0xbfff, "bank3");
434408                  space.install_write_bank(0x4000, 0xbfff, "bank4");
435                  state->membank("bank3")->set_base(ram + 0x4000);
436                  state->membank("bank4")->set_base(ram + 0x4000);
409                  membank("bank3")->set_base(ram + 0x4000);
410                  membank("bank4")->set_base(ram + 0x4000);
437411                  // Video RAM
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));
412                  space.install_read_handler (0xc000, 0xffff, read8_delegate(FUNC(pk8020_state::gzu_r),this));
413                  space.install_write_handler(0xc000, 0xffff, write8_delegate(FUNC(pk8020_state::gzu_w),this));
440414               }
441415               break;
442416      case 0x0B :
r20845r20846
444418                  // RAM
445419                  space.install_read_bank (0x0000, 0xbfff, "bank1");
446420                  space.install_write_bank(0x0000, 0xbfff, "bank2");
447                  state->membank("bank1")->set_base(ram + 0x0000);
448                  state->membank("bank2")->set_base(ram + 0x0000);
421                  membank("bank1")->set_base(ram + 0x0000);
422                  membank("bank2")->set_base(ram + 0x0000);
449423                  // Video RAM
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));
424                  space.install_read_handler (0xc000, 0xffff, read8_delegate(FUNC(pk8020_state::gzu_r),this));
425                  space.install_write_handler(0xc000, 0xffff, write8_delegate(FUNC(pk8020_state::gzu_w),this));
452426               }
453427               break;
454428      case 0x0C :
r20845r20846
457431                  // ROM
458432                  space.install_read_bank (0x0000, 0x1fff, "bank1");
459433                  space.install_write_bank(0x0000, 0x1fff, "bank2");
460                  state->membank("bank1")->set_base(mem + 0x10000);
461                  state->membank("bank2")->set_base(ram + 0x0000);
434                  membank("bank1")->set_base(mem + 0x10000);
435                  membank("bank2")->set_base(ram + 0x0000);
462436                  // RAM
463437                  space.install_read_bank (0x2000, 0x3fff, "bank3");
464438                  space.install_write_bank(0x2000, 0x3fff, "bank4");
465                  state->membank("bank3")->set_base(ram + 0x2000);
466                  state->membank("bank4")->set_base(ram + 0x2000);
439                  membank("bank3")->set_base(ram + 0x2000);
440                  membank("bank4")->set_base(ram + 0x2000);
467441                  // Video RAM
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));
442                  space.install_read_handler (0x4000, 0x7fff, read8_delegate(FUNC(pk8020_state::gzu_r),this));
443                  space.install_write_handler(0x4000, 0x7fff, write8_delegate(FUNC(pk8020_state::gzu_w),this));
470444                  // RAM
471445                  space.install_read_bank (0x8000, 0xfdff, "bank5");
472446                  space.install_write_bank(0x8000, 0xfdff, "bank6");
473                  state->membank("bank5")->set_base(ram + 0x8000);
474                  state->membank("bank6")->set_base(ram + 0x8000);
447                  membank("bank5")->set_base(ram + 0x8000);
448                  membank("bank6")->set_base(ram + 0x8000);
475449                  // Devices
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));
450                  space.install_read_handler (0xfe00, 0xfeff, read8_delegate(FUNC(pk8020_state::devices_r),this));
451                  space.install_write_handler(0xfe00, 0xfeff, write8_delegate(FUNC(pk8020_state::devices_w),this));
478452                  // System reg
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));
453                  space.install_read_handler (0xff00, 0xffff, read8_delegate(FUNC(pk8020_state::sysreg_r),this));
454                  space.install_write_handler(0xff00, 0xffff, write8_delegate(FUNC(pk8020_state::sysreg_w),this));
481455               }
482456               break;
483457      case 0x0E :
r20845r20846
485459                  // ROM
486460                  space.install_read_bank (0x0000, 0x3fff, "bank1");
487461                  space.install_write_bank(0x0000, 0x3fff, "bank2");
488                  state->membank("bank1")->set_base(mem + 0x10000);
489                  state->membank("bank2")->set_base(ram + 0x0000);
462                  membank("bank1")->set_base(mem + 0x10000);
463                  membank("bank2")->set_base(ram + 0x0000);
490464                  // Video RAM
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));
465                  space.install_read_handler (0x4000, 0x7fff, read8_delegate(FUNC(pk8020_state::gzu_r),this));
466                  space.install_write_handler(0x4000, 0x7fff, write8_delegate(FUNC(pk8020_state::gzu_w),this));
493467                  // RAM
494468                  space.install_read_bank (0x8000, 0xfdff, "bank5");
495469                  space.install_write_bank(0x8000, 0xfdff, "bank6");
496                  state->membank("bank5")->set_base(ram + 0x8000);
497                  state->membank("bank6")->set_base(ram + 0x8000);
470                  membank("bank5")->set_base(ram + 0x8000);
471                  membank("bank6")->set_base(ram + 0x8000);
498472                  // Devices
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));
473                  space.install_read_handler (0xfe00, 0xfeff, read8_delegate(FUNC(pk8020_state::devices_r),this));
474                  space.install_write_handler(0xfe00, 0xfeff, write8_delegate(FUNC(pk8020_state::devices_w),this));
501475                  // System reg
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));
476                  space.install_read_handler (0xff00, 0xffff, read8_delegate(FUNC(pk8020_state::sysreg_r),this));
477                  space.install_write_handler(0xff00, 0xffff, write8_delegate(FUNC(pk8020_state::sysreg_w),this));
504478               }
505479               break;
506480      case 0x0F :
r20845r20846
508482                  // RAM
509483                  space.install_read_bank (0x0000, 0x3fff, "bank1");
510484                  space.install_write_bank(0x0000, 0x3fff, "bank2");
511                  state->membank("bank1")->set_base(ram + 0x0000);
512                  state->membank("bank2")->set_base(ram + 0x0000);
485                  membank("bank1")->set_base(ram + 0x0000);
486                  membank("bank2")->set_base(ram + 0x0000);
513487                  // Video RAM
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));
488                  space.install_read_handler (0x4000, 0x7fff, read8_delegate(FUNC(pk8020_state::gzu_r),this));
489                  space.install_write_handler(0x4000, 0x7fff, write8_delegate(FUNC(pk8020_state::gzu_w),this));
516490                  // RAM
517491                  space.install_read_bank (0x8000, 0xfdff, "bank3");
518492                  space.install_write_bank(0x8000, 0xfdff, "bank4");
519                  state->membank("bank3")->set_base(ram + 0x8000);
520                  state->membank("bank4")->set_base(ram + 0x8000);
493                  membank("bank3")->set_base(ram + 0x8000);
494                  membank("bank4")->set_base(ram + 0x8000);
521495                  // Devices
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));
496                  space.install_read_handler (0xfe00, 0xfeff, read8_delegate(FUNC(pk8020_state::devices_r),this));
497                  space.install_write_handler(0xfe00, 0xfeff, write8_delegate(FUNC(pk8020_state::devices_w),this));
524498                  // System reg
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));
499                  space.install_read_handler (0xff00, 0xffff, read8_delegate(FUNC(pk8020_state::sysreg_r),this));
500                  space.install_write_handler(0xff00, 0xffff, write8_delegate(FUNC(pk8020_state::sysreg_w),this));
527501               }
528502               break;
529503      case 0x10 :
r20845r20846
531505                  // ROM
532506                  space.install_read_bank (0x0000, 0x5fff, "bank1");
533507                  space.install_write_bank(0x0000, 0x5fff, "bank2");
534                  state->membank("bank1")->set_base(mem + 0x10000);
535                  state->membank("bank2")->set_base(ram + 0x0000);
508                  membank("bank1")->set_base(mem + 0x10000);
509                  membank("bank2")->set_base(ram + 0x0000);
536510                  // RAM
537511                  space.install_read_bank (0x6000, 0xf7ff, "bank3");
538512                  space.install_write_bank(0x6000, 0xf7ff, "bank4");
539                  state->membank("bank3")->set_base(ram + 0x6000);
540                  state->membank("bank4")->set_base(ram + 0x6000);
513                  membank("bank3")->set_base(ram + 0x6000);
514                  membank("bank4")->set_base(ram + 0x6000);
541515                  // Keyboard
542                  space.install_read_handler (0xf800, 0xf9ff, read8_delegate(FUNC(pk8020_state::keyboard_r),state));
516                  space.install_read_handler (0xf800, 0xf9ff, read8_delegate(FUNC(pk8020_state::keyboard_r),this));
543517                  space.install_write_bank(0xf800, 0xf9ff, "bank5");
544                  state->membank("bank5")->set_base(ram + 0xf800);
518                  membank("bank5")->set_base(ram + 0xf800);
545519                  // System reg
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));
520                  space.install_read_handler (0xfa00, 0xfaff, read8_delegate(FUNC(pk8020_state::sysreg_r),this));
521                  space.install_write_handler(0xfa00, 0xfaff, write8_delegate(FUNC(pk8020_state::sysreg_w),this));
548522                  // Devices
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));
523                  space.install_read_handler (0xfb00, 0xfbff, read8_delegate(FUNC(pk8020_state::devices_r),this));
524                  space.install_write_handler(0xfb00, 0xfbff, write8_delegate(FUNC(pk8020_state::devices_w),this));
551525                  // Text Video Memory
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));
526                  space.install_read_handler (0xfc00, 0xffff, read8_delegate(FUNC(pk8020_state::text_r),this));
527                  space.install_write_handler(0xfc00, 0xffff, write8_delegate(FUNC(pk8020_state::text_w),this));
554528               }
555529               break;
556530      case 0x11 :
r20845r20846
558532                  // ROM
559533                  space.install_read_bank (0x0000, 0x1fff, "bank1");
560534                  space.install_write_bank(0x0000, 0x1fff, "bank2");
561                  state->membank("bank1")->set_base(mem + 0x10000);
562                  state->membank("bank2")->set_base(ram + 0x0000);
535                  membank("bank1")->set_base(mem + 0x10000);
536                  membank("bank2")->set_base(ram + 0x0000);
563537                  // RAM
564538                  space.install_read_bank (0x2000, 0xf7ff, "bank3");
565539                  space.install_write_bank(0x2000, 0xf7ff, "bank4");
566                  state->membank("bank3")->set_base(ram + 0x2000);
567                  state->membank("bank4")->set_base(ram + 0x2000);
540                  membank("bank3")->set_base(ram + 0x2000);
541                  membank("bank4")->set_base(ram + 0x2000);
568542                  // Keyboard
569                  space.install_read_handler (0xf800, 0xf9ff, read8_delegate(FUNC(pk8020_state::keyboard_r),state));
543                  space.install_read_handler (0xf800, 0xf9ff, read8_delegate(FUNC(pk8020_state::keyboard_r),this));
570544                  space.install_write_bank(0xf800, 0xf9ff, "bank5");
571                  state->membank("bank5")->set_base(ram + 0xf800);
545                  membank("bank5")->set_base(ram + 0xf800);
572546                  // System reg
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));
547                  space.install_read_handler (0xfa00, 0xfaff, read8_delegate(FUNC(pk8020_state::sysreg_r),this));
548                  space.install_write_handler(0xfa00, 0xfaff, write8_delegate(FUNC(pk8020_state::sysreg_w),this));
575549                  // Devices
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));
550                  space.install_read_handler (0xfb00, 0xfbff, read8_delegate(FUNC(pk8020_state::devices_r),this));
551                  space.install_write_handler(0xfb00, 0xfbff, write8_delegate(FUNC(pk8020_state::devices_w),this));
578552                  // Text Video Memory
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));
553                  space.install_read_handler (0xfc00, 0xffff, read8_delegate(FUNC(pk8020_state::text_r),this));
554                  space.install_write_handler(0xfc00, 0xffff, write8_delegate(FUNC(pk8020_state::text_w),this));
581555               }
582556               break;
583557      case 0x12 :
r20845r20846
585559                  // ROM
586560                  space.install_read_bank (0x0000, 0x3fff, "bank1");
587561                  space.install_write_bank(0x0000, 0x3fff, "bank2");
588                  state->membank("bank1")->set_base(mem + 0x10000);
589                  state->membank("bank2")->set_base(ram + 0x0000);
562                  membank("bank1")->set_base(mem + 0x10000);
563                  membank("bank2")->set_base(ram + 0x0000);
590564                  // RAM
591565                  space.install_read_bank (0x4000, 0xf7ff, "bank3");
592566                  space.install_write_bank(0x4000, 0xf7ff, "bank4");
593                  state->membank("bank3")->set_base(ram + 0x4000);
594                  state->membank("bank4")->set_base(ram + 0x4000);
567                  membank("bank3")->set_base(ram + 0x4000);
568                  membank("bank4")->set_base(ram + 0x4000);
595569                  // Keyboard
596                  space.install_read_handler (0xf800, 0xf9ff, read8_delegate(FUNC(pk8020_state::keyboard_r),state));
570                  space.install_read_handler (0xf800, 0xf9ff, read8_delegate(FUNC(pk8020_state::keyboard_r),this));
597571                  space.install_write_bank(0xf800, 0xf9ff, "bank5");
598                  state->membank("bank5")->set_base(ram + 0xf800);
572                  membank("bank5")->set_base(ram + 0xf800);
599573                  // System reg
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));
574                  space.install_read_handler (0xfa00, 0xfaff, read8_delegate(FUNC(pk8020_state::sysreg_r),this));
575                  space.install_write_handler(0xfa00, 0xfaff, write8_delegate(FUNC(pk8020_state::sysreg_w),this));
602576                  // Devices
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));
577                  space.install_read_handler (0xfb00, 0xfbff, read8_delegate(FUNC(pk8020_state::devices_r),this));
578                  space.install_write_handler(0xfb00, 0xfbff, write8_delegate(FUNC(pk8020_state::devices_w),this));
605579                  // Text Video Memory
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));
580                  space.install_read_handler (0xfc00, 0xffff, read8_delegate(FUNC(pk8020_state::text_r),this));
581                  space.install_write_handler(0xfc00, 0xffff, write8_delegate(FUNC(pk8020_state::text_w),this));
608582               }
609583               break;
610584      case 0x13 :
r20845r20846
612586                  // RAM
613587                  space.install_read_bank (0x0000, 0xf7ff, "bank1");
614588                  space.install_write_bank(0x0000, 0xf7ff, "bank2");
615                  state->membank("bank1")->set_base(ram + 0x0000);
616                  state->membank("bank2")->set_base(ram + 0x0000);
589                  membank("bank1")->set_base(ram + 0x0000);
590                  membank("bank2")->set_base(ram + 0x0000);
617591                  // Keyboard
618                  space.install_read_handler (0xf800, 0xf9ff, read8_delegate(FUNC(pk8020_state::keyboard_r),state));
592                  space.install_read_handler (0xf800, 0xf9ff, read8_delegate(FUNC(pk8020_state::keyboard_r),this));
619593                  space.install_write_bank(0xf800, 0xf9ff, "bank3");
620                  state->membank("bank3")->set_base(ram + 0xf800);
594                  membank("bank3")->set_base(ram + 0xf800);
621595                  // System reg
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));
596                  space.install_read_handler (0xfa00, 0xfaff, read8_delegate(FUNC(pk8020_state::sysreg_r),this));
597                  space.install_write_handler(0xfa00, 0xfaff, write8_delegate(FUNC(pk8020_state::sysreg_w),this));
624598                  // Devices
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));
599                  space.install_read_handler (0xfb00, 0xfbff, read8_delegate(FUNC(pk8020_state::devices_r),this));
600                  space.install_write_handler(0xfb00, 0xfbff, write8_delegate(FUNC(pk8020_state::devices_w),this));
627601                  // Text Video Memory
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));
602                  space.install_read_handler (0xfc00, 0xffff, read8_delegate(FUNC(pk8020_state::text_r),this));
603                  space.install_write_handler(0xfc00, 0xffff, write8_delegate(FUNC(pk8020_state::text_w),this));
630604               }
631605               break;
632606      case 0x14 :
r20845r20846
634608                  // ROM
635609                  space.install_read_bank (0x0000, 0x5fff, "bank1");
636610                  space.install_write_bank(0x0000, 0x5fff, "bank2");
637                  state->membank("bank1")->set_base(mem + 0x10000);
638                  state->membank("bank2")->set_base(ram + 0x0000);
611                  membank("bank1")->set_base(mem + 0x10000);
612                  membank("bank2")->set_base(ram + 0x0000);
639613                  // RAM
640614                  space.install_read_bank (0x6000, 0xfdff, "bank3");
641615                  space.install_write_bank(0x6000, 0xfdff, "bank4");
642                  state->membank("bank3")->set_base(ram + 0x6000);
643                  state->membank("bank4")->set_base(ram + 0x6000);
616                  membank("bank3")->set_base(ram + 0x6000);
617                  membank("bank4")->set_base(ram + 0x6000);
644618                  // Devices
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));
619                  space.install_read_handler (0xfe00, 0xfeff, read8_delegate(FUNC(pk8020_state::devices_r),this));
620                  space.install_write_handler(0xfe00, 0xfeff, write8_delegate(FUNC(pk8020_state::devices_w),this));
647621                  // System reg
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));
622                  space.install_read_handler (0xff00, 0xffff, read8_delegate(FUNC(pk8020_state::sysreg_r),this));
623                  space.install_write_handler(0xff00, 0xffff, write8_delegate(FUNC(pk8020_state::sysreg_w),this));
650624               }
651625               break;
652626      case 0x15 :
r20845r20846
654628                  // ROM
655629                  space.install_read_bank (0x0000, 0x1fff, "bank1");
656630                  space.install_write_bank(0x0000, 0x1fff, "bank2");
657                  state->membank("bank1")->set_base(mem + 0x10000);
658                  state->membank("bank2")->set_base(ram + 0x0000);
631                  membank("bank1")->set_base(mem + 0x10000);
632                  membank("bank2")->set_base(ram + 0x0000);
659633                  // RAM
660634                  space.install_read_bank (0x2000, 0xfdff, "bank3");
661635                  space.install_write_bank(0x2000, 0xfdff, "bank4");
662                  state->membank("bank3")->set_base(ram + 0x2000);
663                  state->membank("bank4")->set_base(ram + 0x2000);
636                  membank("bank3")->set_base(ram + 0x2000);
637                  membank("bank4")->set_base(ram + 0x2000);
664638                  // Devices
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));
639                  space.install_read_handler (0xfe00, 0xfeff, read8_delegate(FUNC(pk8020_state::devices_r),this));
640                  space.install_write_handler(0xfe00, 0xfeff, write8_delegate(FUNC(pk8020_state::devices_w),this));
667641                  // System reg
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));
642                  space.install_read_handler (0xff00, 0xffff, read8_delegate(FUNC(pk8020_state::sysreg_r),this));
643                  space.install_write_handler(0xff00, 0xffff, write8_delegate(FUNC(pk8020_state::sysreg_w),this));
670644               }
671645               break;
672646      case 0x16 :
r20845r20846
674648                  // ROM
675649                  space.install_read_bank (0x0000, 0x3fff, "bank1");
676650                  space.install_write_bank(0x0000, 0x3fff, "bank2");
677                  state->membank("bank1")->set_base(mem + 0x10000);
678                  state->membank("bank2")->set_base(ram + 0x0000);
651                  membank("bank1")->set_base(mem + 0x10000);
652                  membank("bank2")->set_base(ram + 0x0000);
679653                  // RAM
680654                  space.install_read_bank (0x4000, 0xfdff, "bank3");
681655                  space.install_write_bank(0x4000, 0xfdff, "bank4");
682                  state->membank("bank3")->set_base(ram + 0x4000);
683                  state->membank("bank4")->set_base(ram + 0x4000);
656                  membank("bank3")->set_base(ram + 0x4000);
657                  membank("bank4")->set_base(ram + 0x4000);
684658                  // Devices
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));
659                  space.install_read_handler (0xfe00, 0xfeff, read8_delegate(FUNC(pk8020_state::devices_r),this));
660                  space.install_write_handler(0xfe00, 0xfeff, write8_delegate(FUNC(pk8020_state::devices_w),this));
687661                  // System reg
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));
662                  space.install_read_handler (0xff00, 0xffff, read8_delegate(FUNC(pk8020_state::sysreg_r),this));
663                  space.install_write_handler(0xff00, 0xffff, write8_delegate(FUNC(pk8020_state::sysreg_w),this));
690664               }
691665               break;
692666      case 0x17 :
r20845r20846
694668                  // RAM
695669                  space.install_read_bank (0x0000, 0xfdff, "bank1");
696670                  space.install_write_bank(0x0000, 0xfdff, "bank2");
697                  state->membank("bank1")->set_base(ram);
698                  state->membank("bank2")->set_base(ram);
671                  membank("bank1")->set_base(ram);
672                  membank("bank2")->set_base(ram);
699673                  // Devices
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));
674                  space.install_read_handler (0xfe00, 0xfeff, read8_delegate(FUNC(pk8020_state::devices_r),this));
675                  space.install_write_handler(0xfe00, 0xfeff, write8_delegate(FUNC(pk8020_state::devices_w),this));
702676                  // System reg
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));
677                  space.install_read_handler (0xff00, 0xffff, read8_delegate(FUNC(pk8020_state::sysreg_r),this));
678                  space.install_write_handler(0xff00, 0xffff, write8_delegate(FUNC(pk8020_state::sysreg_w),this));
705679               }
706680               break;
707681      case 0x18 :
r20845r20846
709683                  // ROM
710684                  space.install_read_bank (0x0000, 0x5fff, "bank1");
711685                  space.install_write_bank(0x0000, 0x5fff, "bank2");
712                  state->membank("bank1")->set_base(mem + 0x10000);
713                  state->membank("bank2")->set_base(ram + 0x0000);
686                  membank("bank1")->set_base(mem + 0x10000);
687                  membank("bank2")->set_base(ram + 0x0000);
714688                  // RAM
715689                  space.install_read_bank (0x6000, 0xbeff, "bank3");
716690                  space.install_write_bank(0x6000, 0xbeff, "bank4");
717                  state->membank("bank3")->set_base(ram + 0x6000);
718                  state->membank("bank4")->set_base(ram + 0x6000);
691                  membank("bank3")->set_base(ram + 0x6000);
692                  membank("bank4")->set_base(ram + 0x6000);
719693                  // System reg
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));
694                  space.install_read_handler (0xbf00, 0xbfff, read8_delegate(FUNC(pk8020_state::sysreg_r),this));
695                  space.install_write_handler(0xbf00, 0xbfff, write8_delegate(FUNC(pk8020_state::sysreg_w),this));
722696                  // Video RAM
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));
697                  space.install_read_handler (0xc000, 0xffff, read8_delegate(FUNC(pk8020_state::gzu_r),this));
698                  space.install_write_handler(0xc000, 0xffff, write8_delegate(FUNC(pk8020_state::gzu_w),this));
725699               }
726700               break;
727701      case 0x19 :
r20845r20846
729703                  // ROM
730704                  space.install_read_bank (0x0000, 0x1fff, "bank1");
731705                  space.install_write_bank(0x0000, 0x1fff, "bank2");
732                  state->membank("bank1")->set_base(mem + 0x10000);
733                  state->membank("bank2")->set_base(ram + 0x0000);
706                  membank("bank1")->set_base(mem + 0x10000);
707                  membank("bank2")->set_base(ram + 0x0000);
734708                  // RAM
735709                  space.install_read_bank (0x2000, 0xbeff, "bank3");
736710                  space.install_write_bank(0x2000, 0xbeff, "bank4");
737                  state->membank("bank3")->set_base(ram + 0x2000);
738                  state->membank("bank4")->set_base(ram + 0x2000);
711                  membank("bank3")->set_base(ram + 0x2000);
712                  membank("bank4")->set_base(ram + 0x2000);
739713                  // System reg
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));
714                  space.install_read_handler (0xbf00, 0xbfff, read8_delegate(FUNC(pk8020_state::sysreg_r),this));
715                  space.install_write_handler(0xbf00, 0xbfff, write8_delegate(FUNC(pk8020_state::sysreg_w),this));
742716                  // Video RAM
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));
717                  space.install_read_handler (0xc000, 0xffff, read8_delegate(FUNC(pk8020_state::gzu_r),this));
718                  space.install_write_handler(0xc000, 0xffff, write8_delegate(FUNC(pk8020_state::gzu_w),this));
745719               }
746720               break;
747721      case 0x1A :
r20845r20846
749723                  // ROM
750724                  space.install_read_bank (0x0000, 0x3fff, "bank1");
751725                  space.install_write_bank(0x0000, 0x3fff, "bank2");
752                  state->membank("bank1")->set_base(mem + 0x10000);
753                  state->membank("bank2")->set_base(ram + 0x0000);
726                  membank("bank1")->set_base(mem + 0x10000);
727                  membank("bank2")->set_base(ram + 0x0000);
754728                  // RAM
755729                  space.install_read_bank (0x4000, 0xbeff, "bank3");
756730                  space.install_write_bank(0x4000, 0xbeff, "bank4");
757                  state->membank("bank3")->set_base(ram + 0x4000);
758                  state->membank("bank4")->set_base(ram + 0x4000);
731                  membank("bank3")->set_base(ram + 0x4000);
732                  membank("bank4")->set_base(ram + 0x4000);
759733                  // System reg
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));
734                  space.install_read_handler (0xbf00, 0xbfff, read8_delegate(FUNC(pk8020_state::sysreg_r),this));
735                  space.install_write_handler(0xbf00, 0xbfff, write8_delegate(FUNC(pk8020_state::sysreg_w),this));
762736                  // Video RAM
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));
737                  space.install_read_handler (0xc000, 0xffff, read8_delegate(FUNC(pk8020_state::gzu_r),this));
738                  space.install_write_handler(0xc000, 0xffff, write8_delegate(FUNC(pk8020_state::gzu_w),this));
765739               }
766740               break;
767741      case 0x1B :
r20845r20846
769743                  // RAM
770744                  space.install_read_bank (0x0000, 0xbeff, "bank1");
771745                  space.install_write_bank(0x0000, 0xbeff, "bank2");
772                  state->membank("bank1")->set_base(ram);
773                  state->membank("bank2")->set_base(ram);
746                  membank("bank1")->set_base(ram);
747                  membank("bank2")->set_base(ram);
774748                  // System reg
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));
749                  space.install_read_handler (0xbf00, 0xbfff, read8_delegate(FUNC(pk8020_state::sysreg_r),this));
750                  space.install_write_handler(0xbf00, 0xbfff, write8_delegate(FUNC(pk8020_state::sysreg_w),this));
777751                  // Video RAM
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));
752                  space.install_read_handler (0xc000, 0xffff, read8_delegate(FUNC(pk8020_state::gzu_r),this));
753                  space.install_write_handler(0xc000, 0xffff, write8_delegate(FUNC(pk8020_state::gzu_w),this));
780754               }
781755               break;
782756      case 0x1C :
r20845r20846
784758                  // ROM
785759                  space.install_read_bank (0x0000, 0x5fff, "bank1");
786760                  space.install_write_bank(0x0000, 0x5fff, "bank2");
787                  state->membank("bank1")->set_base(mem + 0x10000);
788                  state->membank("bank2")->set_base(ram + 0x0000);
761                  membank("bank1")->set_base(mem + 0x10000);
762                  membank("bank2")->set_base(ram + 0x0000);
789763                  // RAM
790764                  space.install_read_bank (0x6000, 0xbfff, "bank3");
791765                  space.install_write_bank(0x6000, 0xbfff, "bank4");
792                  state->membank("bank3")->set_base(ram + 0x6000);
793                  state->membank("bank4")->set_base(ram + 0x6000);
766                  membank("bank3")->set_base(ram + 0x6000);
767                  membank("bank4")->set_base(ram + 0x6000);
794768                  // Video RAM
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));
769                  space.install_read_handler (0xc000, 0xffff, read8_delegate(FUNC(pk8020_state::gzu_r),this));
770                  space.install_write_handler(0xc000, 0xffff, write8_delegate(FUNC(pk8020_state::gzu_w),this));
797771               }
798772               break;
799773      case 0x1D :
r20845r20846
801775                  // ROM
802776                  space.install_read_bank (0x0000, 0x1fff, "bank1");
803777                  space.install_write_bank(0x0000, 0x1fff, "bank2");
804                  state->membank("bank1")->set_base(mem + 0x10000);
805                  state->membank("bank2")->set_base(ram + 0x0000);
778                  membank("bank1")->set_base(mem + 0x10000);
779                  membank("bank2")->set_base(ram + 0x0000);
806780                  // RAM
807781                  space.install_read_bank (0x2000, 0xbfff, "bank3");
808782                  space.install_write_bank(0x2000, 0xbfff, "bank4");
809                  state->membank("bank3")->set_base(ram + 0x2000);
810                  state->membank("bank4")->set_base(ram + 0x2000);
783                  membank("bank3")->set_base(ram + 0x2000);
784                  membank("bank4")->set_base(ram + 0x2000);
811785                  // Video RAM
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));
786                  space.install_read_handler (0xc000, 0xffff, read8_delegate(FUNC(pk8020_state::gzu_r),this));
787                  space.install_write_handler(0xc000, 0xffff, write8_delegate(FUNC(pk8020_state::gzu_w),this));
814788               }
815789               break;
816790      case 0x1E :
r20845r20846
818792                  // ROM
819793                  space.install_read_bank (0x0000, 0x3fff, "bank1");
820794                  space.install_write_bank(0x0000, 0x3fff, "bank2");
821                  state->membank("bank1")->set_base(mem + 0x10000);
822                  state->membank("bank2")->set_base(ram + 0x0000);
795                  membank("bank1")->set_base(mem + 0x10000);
796                  membank("bank2")->set_base(ram + 0x0000);
823797                  // RAM
824798                  space.install_read_bank (0x4000, 0xbfff, "bank3");
825799                  space.install_write_bank(0x4000, 0xbfff, "bank4");
826                  state->membank("bank3")->set_base(ram + 0x4000);
827                  state->membank("bank4")->set_base(ram + 0x4000);
800                  membank("bank3")->set_base(ram + 0x4000);
801                  membank("bank4")->set_base(ram + 0x4000);
828802                  // Video RAM
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));
803                  space.install_read_handler (0xc000, 0xffff, read8_delegate(FUNC(pk8020_state::gzu_r),this));
804                  space.install_write_handler(0xc000, 0xffff, write8_delegate(FUNC(pk8020_state::gzu_w),this));
831805               }
832806               break;
833807      case 0x1F :
r20845r20846
835809                  // RAM
836810                  space.install_read_bank (0x0000, 0xbfff, "bank1");
837811                  space.install_write_bank(0x0000, 0xbfff, "bank2");
838                  state->membank("bank1")->set_base(ram);
839                  state->membank("bank2")->set_base(ram);
812                  membank("bank1")->set_base(ram);
813                  membank("bank2")->set_base(ram);
840814                  // Video RAM
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));
815                  space.install_read_handler (0xc000, 0xffff, read8_delegate(FUNC(pk8020_state::gzu_r),this));
816                  space.install_write_handler(0xc000, 0xffff, write8_delegate(FUNC(pk8020_state::gzu_w),this));
843817               }
844818               break;
845819
r20845r20846
865839
866840WRITE8_MEMBER(pk8020_state::pk8020_portb_w)
867841{
868   device_t *fdc = machine().device("wd1793");
869842   // Turn all motors off
870843   floppy_mon_w(floppy_get_device(machine(), 0), 1);
871844   floppy_mon_w(floppy_get_device(machine(), 1), 1);
872845   floppy_mon_w(floppy_get_device(machine(), 2), 1);
873846   floppy_mon_w(floppy_get_device(machine(), 3), 1);
874   wd17xx_set_side(fdc,BIT(data,4));
847   wd17xx_set_side(m_wd1793,BIT(data,4));
875848   if (BIT(data,0)) {
876      wd17xx_set_drive(fdc,0);
849      wd17xx_set_drive(m_wd1793,0);
877850      floppy_mon_w(floppy_get_device(machine(), 0), 0);
878851      floppy_drive_set_ready_state(floppy_get_device(machine(), 0), 1, 1);
879852   } else if (BIT(data,1)) {
880      wd17xx_set_drive(fdc,1);
853      wd17xx_set_drive(m_wd1793,1);
881854      floppy_mon_w(floppy_get_device(machine(), 1), 0);
882855      floppy_drive_set_ready_state(floppy_get_device(machine(), 1), 1, 1);
883856   } else if (BIT(data,2)) {
884      wd17xx_set_drive(fdc,2);
857      wd17xx_set_drive(m_wd1793,2);
885858      floppy_mon_w(floppy_get_device(machine(), 2), 0);
886859      floppy_drive_set_ready_state(floppy_get_device(machine(), 2), 1, 1);
887860   } else if (BIT(data,3)) {
888      wd17xx_set_drive(fdc,3);
861      wd17xx_set_drive(m_wd1793,3);
889862      floppy_mon_w(floppy_get_device(machine(), 3), 0);
890863      floppy_drive_set_ready_state(floppy_get_device(machine(), 3), 1, 1);
891864   }
r20845r20846
909882
910883WRITE8_MEMBER(pk8020_state::pk8020_2_portc_w)
911884{
912   device_t *speaker = machine().device(SPEAKER_TAG);
913
914885   m_sound_gate = BIT(data,3);
915886
916   speaker_level_w(speaker, m_sound_gate ? m_sound_level : 0);
887   speaker_level_w(m_speaker, m_sound_gate ? m_sound_level : 0);
917888}
918889
919890I8255A_INTERFACE( pk8020_ppi8255_interface_2 )
r20845r20846
938909
939910WRITE_LINE_MEMBER(pk8020_state::pk8020_pit_out0)
940911{
941   device_t *speaker = machine().device(SPEAKER_TAG);
942
943912   m_sound_level = state;
944913
945   speaker_level_w(speaker, m_sound_gate ? m_sound_level : 0);
914   speaker_level_w(m_speaker, m_sound_gate ? m_sound_level : 0);
946915}
947916
948917
r20845r20846
974943
975944WRITE_LINE_MEMBER(pk8020_state::pk8020_pic_set_int_line)
976945{
977   machine().device("maincpu")->execute().set_input_line(0, state ? HOLD_LINE : CLEAR_LINE);
946   m_maincpu->set_input_line(0, state ? HOLD_LINE : CLEAR_LINE);
978947}
979948
980949const struct pic8259_interface pk8020_pic8259_config =
r20845r20846
986955
987956IRQ_CALLBACK_MEMBER(pk8020_state::pk8020_irq_callback)
988957{
989   return pic8259_acknowledge(machine().device("pic8259"));
958   return pic8259_acknowledge(m_pic8259);
990959}
991960
961void pk8020_state::machine_start()
962{
963   static const char *const keynames[] = {
964      "LINE0", "LINE1", "LINE2", "LINE3", "LINE4", "LINE5", "LINE6", "LINE7",
965      "LINE8", "LINE9", "LINE10", "LINE11", "LINE12", "LINE13", "LINE14", "LINE15"
966   };
967
968   for ( int i = 0; i < 16; i++ )
969   {
970      m_io_port[i] = ioport(keynames[i]);
971   }
972}
973
992974void pk8020_state::machine_reset()
993975{
994   pk8020_set_bank(machine(),0);
995   machine().device("maincpu")->execute().set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(pk8020_state::pk8020_irq_callback),this));
976   pk8020_set_bank(0);
977   m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(pk8020_state::pk8020_irq_callback),this));
996978
997979   m_sound_gate = 0;
998980   m_sound_level = 0;
r20845r20846
1001983INTERRUPT_GEN_MEMBER(pk8020_state::pk8020_interrupt)
1002984{
1003985   m_takt ^= 1;
1004   pic8259_ir4_w(machine().device("pic8259"), 1);
986   pic8259_ir4_w(m_pic8259, 1);
1005987}
trunk/src/mess/includes/pk8020.h
r20845r20846
1414#include "imagedev/cassette.h"
1515#include "sound/speaker.h"
1616#include "sound/wave.h"
17#include "machine/ram.h"
1718
19
1820class pk8020_state : public driver_device
1921{
2022public:
2123   pk8020_state(const machine_config &mconfig, device_type type, const char *tag)
22      : driver_device(mconfig, type, tag) { }
24      : driver_device(mconfig, type, tag)
25      , m_maincpu(*this, "maincpu")
26      , m_ppi8255_1(*this, "ppi8255_1")
27      , m_ppi8255_2(*this, "ppi8255_2")
28      , m_ppi8255_3(*this, "ppi8255_3")
29      , m_rs232(*this, "rs232")
30      , m_lan(*this, "lan")
31      , m_ram(*this, RAM_TAG)
32      , m_wd1793(*this, "wd1793")
33      , m_pit8253(*this, "pit8253")
34      , m_pic8259(*this, "pic8259")
35      , m_speaker(*this, SPEAKER_TAG)
36      , m_region_maincpu(*this, "maincpu")
37      , m_region_gfx1(*this, "gfx1")
38   { }
2339
2440   UINT8 m_color;
2541   UINT8 m_video_page;
r20845r20846
4157   DECLARE_WRITE8_MEMBER(gzu_w);
4258   DECLARE_READ8_MEMBER(devices_r);
4359   DECLARE_WRITE8_MEMBER(devices_w);
60   virtual void machine_start();
4461   virtual void machine_reset();
4562   virtual void video_start();
4663   virtual void palette_init();
r20845r20846
5572   DECLARE_WRITE_LINE_MEMBER(pk8020_pit_out1);
5673   DECLARE_WRITE_LINE_MEMBER(pk8020_pic_set_int_line);
5774   IRQ_CALLBACK_MEMBER(pk8020_irq_callback);
75
76protected:
77   required_device<cpu_device> m_maincpu;
78   required_device<i8255_device> m_ppi8255_1;
79   required_device<i8255_device> m_ppi8255_2;
80   required_device<i8255_device> m_ppi8255_3;
81   required_device<i8251_device> m_rs232;
82   required_device<i8251_device> m_lan;
83   required_device<ram_device> m_ram;
84   required_device<device_t> m_wd1793;
85   required_device<device_t> m_pit8253;
86   required_device<device_t> m_pic8259;
87   required_device<device_t> m_speaker;
88   required_memory_region m_region_maincpu;
89   required_memory_region m_region_gfx1;
90   ioport_port *m_io_port[16];
91
92   void pk8020_set_bank(UINT8 data);
5893};
5994
6095
trunk/src/mess/video/pk8020.c
r20845r20846
1818UINT32 pk8020_state::screen_update_pk8020(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
1919{
2020   int y, x, b, j;
21   UINT8 *gfx = memregion("gfx1")->base();
22   UINT8 *ram = machine().device<ram_device>(RAM_TAG)->pointer();
21   UINT8 *gfx = m_region_gfx1->base();
22   UINT8 *ram = m_ram->pointer();
2323
2424   for (y = 0; y < 16; y++)
2525   {

Previous 199869 Revisions Next


© 1997-2024 The MAME Team