Previous 199869 Revisions Next

r20912 Sunday 10th February, 2013 at 21:04:05 UTC by Wilbert Pol
(MESS) pc6001.c: Reduce tagmap lookups (nw)
[src/mess/drivers]pc6001.c

trunk/src/mess/drivers/pc6001.c
r20911r20912
139139{
140140public:
141141   pc6001_state(const machine_config &mconfig, device_type type, const char *tag)
142      : driver_device(mconfig, type, tag),
143         m_ppi(*this, "ppi8255")
144   ,
145      m_ram(*this, "ram"){ }
142      : driver_device(mconfig, type, tag)
143      , m_ppi(*this, "ppi8255")
144      , m_ram(*this, "ram")
145      , m_maincpu(*this, "maincpu")
146      , m_cassette(*this, CASSETTE_TAG)
147      , m_region_maincpu(*this, "maincpu")
148      , m_region_gfx1(*this, "gfx1")
149      , m_region_cas(*this, "cas")
150      , m_region_cart_img(*this, "cart_img")
151      , m_io_mode4_dsw(*this, "MODE4_DSW")
152      , m_io_p1(*this, "P1")
153      , m_io_p2(*this, "P2")
154      , m_io_key1(*this, "key1")
155      , m_io_key2(*this, "key2")
156      , m_io_key3(*this, "key3")
157      , m_io_key_modifiers(*this, "key_modifiers")
158      , m_bank1(*this, "bank1")
159      , m_bank2(*this, "bank2")
160      , m_bank3(*this, "bank3")
161      , m_bank4(*this, "bank4")
162      , m_bank5(*this, "bank5")
163      , m_bank6(*this, "bank6")
164      , m_bank7(*this, "bank7")
165      , m_bank8(*this, "bank8")
166   { }
146167
147168   required_device<i8255_device> m_ppi;
148169
r20911r20912
245266   DECLARE_WRITE8_MEMBER(pc6001_8255_portc_w);
246267   DECLARE_READ8_MEMBER(pc6001_8255_portc_r);
247268   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(pc6001_cass);
269
270protected:
271   required_device<cpu_device> m_maincpu;
272   required_device<device_t> m_cassette;
273   required_memory_region m_region_maincpu;
274   required_memory_region m_region_gfx1;
275   required_memory_region m_region_cas;
276   required_memory_region m_region_cart_img;
277   required_ioport m_io_mode4_dsw;
278   required_ioport m_io_p1;
279   required_ioport m_io_p2;
280   required_ioport m_io_key1;
281   required_ioport m_io_key2;
282   required_ioport m_io_key3;
283   required_ioport m_io_key_modifiers;
284   required_memory_bank m_bank1;
285   optional_memory_bank m_bank2;
286   optional_memory_bank m_bank3;
287   optional_memory_bank m_bank4;
288   optional_memory_bank m_bank5;
289   optional_memory_bank m_bank6;
290   optional_memory_bank m_bank7;
291   optional_memory_bank m_bank8;
292
293   void draw_gfx_mode4(bitmap_ind16 &bitmap,const rectangle &cliprect,int attr);
294   void draw_bitmap_2bpp(bitmap_ind16 &bitmap,const rectangle &cliprect, int attr);
295   void draw_tile_3bpp(bitmap_ind16 &bitmap,const rectangle &cliprect,int x,int y,int tile,int attr);
296   void draw_tile_text(bitmap_ind16 &bitmap,const rectangle &cliprect,int x,int y,int tile,int attr,int has_mc6847);
297   void draw_border(bitmap_ind16 &bitmap,const rectangle &cliprect,int attr,int has_mc6847);
298   void pc6001_screen_draw(bitmap_ind16 &bitmap,const rectangle &cliprect, int has_mc6847);
299   UINT8 check_joy_press();
300   UINT8 check_keyboard_press();
301   void vram_bank_change(UINT8 vram_bank);
248302};
249303
250304
r20911r20912
269323}
270324
271325/* this is known as gfx mode 4 */
272static void draw_gfx_mode4(running_machine &machine, bitmap_ind16 &bitmap,const rectangle &cliprect,int attr)
326void pc6001_state::draw_gfx_mode4(bitmap_ind16 &bitmap,const rectangle &cliprect,int attr)
273327{
274   pc6001_state *state = machine.driver_data<pc6001_state>();
275328   int x,y,xi;
276329   int fgcol,color;
277330   int col_setting;
r20911r20912
287340      { 0, 5, 2, 7 }, //Pink / Green
288341      { 0, 2, 5, 7 }, //Green / Pink
289342   };
290   col_setting = machine.root_device().ioport("MODE4_DSW")->read() & 7;
343   col_setting = m_io_mode4_dsw->read() & 7;
291344
292345   if((attr & 0x0c) != 0x0c)
293346      popmessage("Mode 4 vram attr != 0x0c, contact MESSdev");
r20911r20912
296349   {
297350      for(x=0;x<32;x++)
298351      {
299         int tile = state->m_video_ram[(x+(y*32))+0x200];
352         int tile = m_video_ram[(x+(y*32))+0x200];
300353
301354         if(col_setting == 0x00) //monochrome
302355         {
r20911r20912
306359
307360               color = ((tile)>>(7-xi) & 1) ? fgcol : 0;
308361
309               bitmap.pix16((y+24), (x*8+xi)+32) = machine.pens[color];
362               bitmap.pix16((y+24), (x*8+xi)+32) = machine().pens[color];
310363            }
311364         }
312365         else
r20911r20912
317370
318371               color = (attr & 2) ? (pen_wattr[col_setting-1][fgcol]) : (pen_gattr[col_setting-1][fgcol]);
319372
320               bitmap.pix16((y+24), ((x*8+xi*2)+0)+32) = machine.pens[color];
321               bitmap.pix16((y+24), ((x*8+xi*2)+1)+32) = machine.pens[color];
373               bitmap.pix16((y+24), ((x*8+xi*2)+0)+32) = machine().pens[color];
374               bitmap.pix16((y+24), ((x*8+xi*2)+1)+32) = machine().pens[color];
322375            }
323376         }
324377      }
325378   }
326379}
327380
328static void draw_bitmap_2bpp(running_machine &machine, bitmap_ind16 &bitmap,const rectangle &cliprect, int attr)
381void pc6001_state::draw_bitmap_2bpp(bitmap_ind16 &bitmap,const rectangle &cliprect, int attr)
329382{
330   pc6001_state *state = machine.driver_data<pc6001_state>();
331383   int color,x,y,xi,yi;
332384
333385   int shrink_x = 2*4;
r20911r20912
341393      {
342394         for(x=0;x<w;x++)
343395         {
344            int tile = state->m_video_ram[(x+(y*32))+0x200];
396            int tile = m_video_ram[(x+(y*32))+0x200];
345397
346398            for(yi=0;yi<shrink_y;yi++)
347399            {
r20911r20912
352404                  color = ((tile >> i) & 3)+8;
353405                  color+= col_bank;
354406
355                  bitmap.pix16(((y*shrink_y+yi)+24), (x*shrink_x+((shrink_x-1)-xi))+32) = machine.pens[color];
407                  bitmap.pix16(((y*shrink_y+yi)+24), (x*shrink_x+((shrink_x-1)-xi))+32) = machine().pens[color];
356408               }
357409            }
358410         }
r20911r20912
364416      {
365417         for(x=0;x<w;x++)
366418         {
367            int tile = state->m_video_ram[(x+((y/3)*32))+0x200];
419            int tile = m_video_ram[(x+((y/3)*32))+0x200];
368420
369421            for(yi=0;yi<shrink_y;yi++)
370422            {
r20911r20912
375427                  color = ((tile >> i) & 3)+8;
376428                  color+= col_bank;
377429
378                  bitmap.pix16((((y+0)*shrink_y+yi)+24), (x*shrink_x+((shrink_x-1)-xi))+32) = machine.pens[color];
379                  bitmap.pix16((((y+1)*shrink_y+yi)+24), (x*shrink_x+((shrink_x-1)-xi))+32) = machine.pens[color];
380                  bitmap.pix16((((y+2)*shrink_y+yi)+24), (x*shrink_x+((shrink_x-1)-xi))+32) = machine.pens[color];
430                  bitmap.pix16((((y+0)*shrink_y+yi)+24), (x*shrink_x+((shrink_x-1)-xi))+32) = machine().pens[color];
431                  bitmap.pix16((((y+1)*shrink_y+yi)+24), (x*shrink_x+((shrink_x-1)-xi))+32) = machine().pens[color];
432                  bitmap.pix16((((y+2)*shrink_y+yi)+24), (x*shrink_x+((shrink_x-1)-xi))+32) = machine().pens[color];
381433               }
382434            }
383435         }
r20911r20912
385437   }
386438}
387439
388static void draw_tile_3bpp(running_machine &machine, bitmap_ind16 &bitmap,const rectangle &cliprect,int x,int y,int tile,int attr)
440void pc6001_state::draw_tile_3bpp(bitmap_ind16 &bitmap,const rectangle &cliprect,int x,int y,int tile,int attr)
389441{
390442   int color,pen,xi,yi;
391443
r20911r20912
412464
413465         color = ((tile >> i) & 1) ? pen+8 : 0;
414466
415         bitmap.pix16(((y*12+(11-yi))+24), (x*8+(7-xi))+32) = machine.pens[color];
467         bitmap.pix16(((y*12+(11-yi))+24), (x*8+(7-xi))+32) = machine().pens[color];
416468      }
417469   }
418470}
419471
420static void draw_tile_text(running_machine &machine, bitmap_ind16 &bitmap,const rectangle &cliprect,int x,int y,int tile,int attr,int has_mc6847)
472void pc6001_state::draw_tile_text(bitmap_ind16 &bitmap,const rectangle &cliprect,int x,int y,int tile,int attr,int has_mc6847)
421473{
422474   int xi,yi,pen,fgcol,color;
423   UINT8 *gfx_data = machine.root_device().memregion("gfx1")->base();
475   UINT8 *gfx_data = m_region_gfx1->base();
424476
425477   for(yi=0;yi<12;yi++)
426478   {
r20911r20912
448500               color = pen ? fgcol : 0;
449501         }
450502
451         bitmap.pix16(((y*12+yi)+24), (x*8+xi)+32) = machine.pens[color];
503         bitmap.pix16(((y*12+yi)+24), (x*8+xi)+32) = machine().pens[color];
452504      }
453505   }
454506}
455507
456static void draw_border(running_machine &machine, bitmap_ind16 &bitmap,const rectangle &cliprect,int attr,int has_mc6847)
508void pc6001_state::draw_border(bitmap_ind16 &bitmap,const rectangle &cliprect,int attr,int has_mc6847)
457509{
458510   int x,y,color;
459511
r20911r20912
470522         else
471523            color = 0; //FIXME: other modes not yet checked
472524
473         bitmap.pix16(y, x) = machine.pens[color];
525         bitmap.pix16(y, x) = machine().pens[color];
474526      }
475527   }
476528}
477529
478static void pc6001_screen_draw(running_machine &machine, bitmap_ind16 &bitmap,const rectangle &cliprect, int has_mc6847)
530void pc6001_state::pc6001_screen_draw(bitmap_ind16 &bitmap,const rectangle &cliprect, int has_mc6847)
479531{
480   pc6001_state *state = machine.driver_data<pc6001_state>();
481532   int x,y;
482533   int tile,attr;
483534
484   attr = state->m_video_ram[0];
535   attr = m_video_ram[0];
485536
486   draw_border(machine,bitmap,cliprect,attr,has_mc6847);
537   draw_border(bitmap,cliprect,attr,has_mc6847);
487538
488539   if(attr & 0x80) // gfx mode
489540   {
490541      if(attr & 0x10) // 256x192x1 mode (FIXME: might be a different trigger)
491542      {
492         draw_gfx_mode4(machine,bitmap,cliprect,attr);
543         draw_gfx_mode4(bitmap,cliprect,attr);
493544      }
494545      else // 128x192x2 mode
495546      {
496         draw_bitmap_2bpp(machine,bitmap,cliprect,attr);
547         draw_bitmap_2bpp(bitmap,cliprect,attr);
497548      }
498549   }
499550   else // text mode
r20911r20912
502553      {
503554         for(x=0;x<32;x++)
504555         {
505            tile = state->m_video_ram[(x+(y*32))+0x200];
506            attr = state->m_video_ram[(x+(y*32)) & 0x1ff];
556            tile = m_video_ram[(x+(y*32))+0x200];
557            attr = m_video_ram[(x+(y*32)) & 0x1ff];
507558
508559            if(attr & 0x40)
509560            {
510               draw_tile_3bpp(machine,bitmap,cliprect,x,y,tile,attr);
561               draw_tile_3bpp(bitmap,cliprect,x,y,tile,attr);
511562            }
512563            else
513564            {
514               draw_tile_text(machine,bitmap,cliprect,x,y,tile,attr,has_mc6847);
565               draw_tile_text(bitmap,cliprect,x,y,tile,attr,has_mc6847);
515566            }
516567         }
517568      }
r20911r20912
520571
521572UINT32 pc6001_state::screen_update_pc6001(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
522573{
523   pc6001_screen_draw(machine(),bitmap,cliprect,1);
574   pc6001_screen_draw(bitmap,cliprect,1);
524575
525576   return 0;
526577}
r20911r20912
622673   else if(m_exgfx_text_mode)
623674   {
624675      int xi,yi,pen,fgcol,bgcol,color;
625      UINT8 *gfx_data = machine().root_device().memregion("gfx1")->base();
676      UINT8 *gfx_data = m_region_gfx1->base();
626677
627678      for(y=0;y<20;y++)
628679      {
r20911r20912
660711   else
661712   {
662713      attr = m_video_ram[0];
663      pc6001_screen_draw(machine(),bitmap,cliprect,0);
714      pc6001_screen_draw(bitmap,cliprect,0);
664715   }
665716
666717   return 0;
r20911r20912
670721{
671722   int x,y,tile,attr;
672723   int xi,yi,pen,fgcol,bgcol,color;
673   UINT8 *gfx_data = memregion("gfx1")->base();
724   UINT8 *gfx_data = m_region_gfx1->base();
674725
675726
676727   if(m_sr_video_mode & 8) // text mode
r20911r20912
769820   if((!(m_sys_latch & 8)) && data & 0x8) //PLAY tape cmd
770821   {
771822      m_cas_switch = 1;
772      //machine().device(CASSETTE_TAG )->change_state(CASSETTE_MOTOR_ENABLED,CASSETTE_MASK_MOTOR);
773      //machine().device(CASSETTE_TAG )->change_state(CASSETTE_PLAY,CASSETTE_MASK_UISTATE);
823      //m_cassette->change_state(CASSETTE_MOTOR_ENABLED,CASSETTE_MASK_MOTOR);
824      //m_cassette->change_state(CASSETTE_PLAY,CASSETTE_MASK_UISTATE);
774825   }
775826   if((m_sys_latch & 8) && ((data & 0x8) == 0)) //STOP tape cmd
776827   {
777828      m_cas_switch = 0;
778      //machine().device(CASSETTE_TAG )->change_state(CASSETTE_MOTOR_DISABLED,CASSETTE_MASK_MOTOR);
779      //machine().device(CASSETTE_TAG )->change_state(CASSETTE_STOPPED,CASSETTE_MASK_UISTATE);
829      //m_cassette->change_state(CASSETTE_MOTOR_DISABLED,CASSETTE_MASK_MOTOR);
830      //m_cassette->change_state(CASSETTE_STOPPED,CASSETTE_MASK_UISTATE);
780831      //m_irq_vector = 0x00;
781      //machine().device("maincpu")->execute().set_input_line(0, ASSERT_LINE);
832      //m_maincpu->set_input_line(0, ASSERT_LINE);
782833   }
783834
784835   m_sys_latch = data;
r20911r20912
811862
812863static UINT8 pc6001_get_char_rom(running_machine &machine, UINT8 ch, int line)
813864{
814   UINT8 *gfx = machine.root_device().memregion("gfx1")->base();
865   UINT8 *gfx = m_region_gfx1->base();
815866   return gfx[ch*16+line];
816867}
817868#endif
r20911r20912
852903      m_port_c_8255 |= 0xa8;
853904
854905      {
855         UINT8 *gfx_data = memregion("gfx1")->base();
856         UINT8 *ext_rom = memregion("cart_img")->base();
906         UINT8 *gfx_data = m_region_gfx1->base();
907         UINT8 *ext_rom = m_region_cart_img->base();
857908
858909         //printf("%02x\n",data);
859910
860911         if((data & 0x0f) == 0x05)
861            membank("bank1")->set_base(&ext_rom[0x2000]);
912            m_bank1->set_base(&ext_rom[0x2000]);
862913         if((data & 0x0f) == 0x04)
863            membank("bank1")->set_base(&gfx_data[0]);
914            m_bank1->set_base(&gfx_data[0]);
864915      }
865916   }
866917   m_ppi->write(space,offset,data);
r20911r20912
10581109
10591110WRITE8_MEMBER(pc6001_state::pc6001m2_bank_r0_w)
10601111{
1061   UINT8 *ROM = memregion("maincpu")->base();
1062   UINT8 *gfx_data = memregion("gfx1")->base();
1112   UINT8 *ROM = m_region_maincpu->base();
1113   UINT8 *gfx_data = m_region_gfx1->base();
10631114
10641115//  bankaddress = 0x10000 + (0x4000 * ((data & 0x40)>>6));
10651116//  membank(1)->set_base(&ROM[bankaddress]);
r20911r20912
10671118   m_bank_r0 = data;
10681119
10691120//  printf("%02x BANK | %02x\n",data,m_bank_opt);
1070   membank("bank1")->set_base(&ROM[banksw_table_r0[(data & 0xf)+(m_bank_opt*0x10)][0]]);
1071   membank("bank2")->set_base(&ROM[banksw_table_r0[(data & 0xf)+(m_bank_opt*0x10)][1]]);
1072   membank("bank3")->set_base(&ROM[banksw_table_r0[((data & 0xf0)>>4)+(m_bank_opt*0x10)][2]]);
1121   m_bank1->set_base(&ROM[banksw_table_r0[(data & 0xf)+(m_bank_opt*0x10)][0]]);
1122   m_bank2->set_base(&ROM[banksw_table_r0[(data & 0xf)+(m_bank_opt*0x10)][1]]);
1123   m_bank3->set_base(&ROM[banksw_table_r0[((data & 0xf0)>>4)+(m_bank_opt*0x10)][2]]);
10731124   if(!m_gfx_bank_on)
1074      membank("bank4")->set_base(&ROM[banksw_table_r0[((m_bank_r0 & 0xf0)>>4)+(m_bank_opt*0x10)][3]]);
1125      m_bank4->set_base(&ROM[banksw_table_r0[((m_bank_r0 & 0xf0)>>4)+(m_bank_opt*0x10)][3]]);
10751126   else
1076      membank("bank4")->set_base(&gfx_data[m_cgrom_bank_addr]);
1127      m_bank4->set_base(&gfx_data[m_cgrom_bank_addr]);
10771128}
10781129
10791130WRITE8_MEMBER(pc6001_state::pc6001m2_bank_r1_w)
10801131{
1081   UINT8 *ROM = memregion("maincpu")->base();
1132   UINT8 *ROM = m_region_maincpu->base();
10821133
10831134//  bankaddress = 0x10000 + (0x4000 * ((data & 0x40)>>6));
10841135//  membank(1)->set_base(&ROM[bankaddress]);
r20911r20912
10861137   m_bank_r1 = data;
10871138
10881139//  printf("%02x BANK\n",data);
1089   membank("bank5")->set_base(&ROM[banksw_table_r1[(data & 0xf)+(m_bank_opt*0x10)][0]]);
1090   membank("bank6")->set_base(&ROM[banksw_table_r1[(data & 0xf)+(m_bank_opt*0x10)][1]]);
1091   membank("bank7")->set_base(&ROM[banksw_table_r1[((data & 0xf0)>>4)+(m_bank_opt*0x10)][2]]);
1092   membank("bank8")->set_base(&ROM[banksw_table_r1[((data & 0xf0)>>4)+(m_bank_opt*0x10)][3]]);
1140   m_bank5->set_base(&ROM[banksw_table_r1[(data & 0xf)+(m_bank_opt*0x10)][0]]);
1141   m_bank6->set_base(&ROM[banksw_table_r1[(data & 0xf)+(m_bank_opt*0x10)][1]]);
1142   m_bank7->set_base(&ROM[banksw_table_r1[((data & 0xf0)>>4)+(m_bank_opt*0x10)][2]]);
1143   m_bank8->set_base(&ROM[banksw_table_r1[((data & 0xf0)>>4)+(m_bank_opt*0x10)][3]]);
10931144}
10941145
10951146WRITE8_MEMBER(pc6001_state::pc6001m2_bank_w0_w)
r20911r20912
10991150
11001151WRITE8_MEMBER(pc6001_state::pc6001m2_opt_bank_w)
11011152{
1102   UINT8 *ROM = memregion("maincpu")->base();
1103   UINT8 *gfx_data = memregion("gfx1")->base();
1153   UINT8 *ROM = m_region_maincpu->base();
1154   UINT8 *gfx_data = m_region_gfx1->base();
11041155
11051156   /*
11061157   0 - TVROM / VOICE ROM
r20911r20912
11101161   */
11111162   m_bank_opt = data & 3;
11121163
1113   membank("bank1")->set_base(&ROM[banksw_table_r0[(m_bank_r0 & 0xf)+(m_bank_opt*0x10)][0]]);
1114   membank("bank2")->set_base(&ROM[banksw_table_r0[(m_bank_r0 & 0xf)+(m_bank_opt*0x10)][1]]);
1115   membank("bank3")->set_base(&ROM[banksw_table_r0[((m_bank_r0 & 0xf0)>>4)+(m_bank_opt*0x10)][2]]);
1164   m_bank1->set_base(&ROM[banksw_table_r0[(m_bank_r0 & 0xf)+(m_bank_opt*0x10)][0]]);
1165   m_bank2->set_base(&ROM[banksw_table_r0[(m_bank_r0 & 0xf)+(m_bank_opt*0x10)][1]]);
1166   m_bank3->set_base(&ROM[banksw_table_r0[((m_bank_r0 & 0xf0)>>4)+(m_bank_opt*0x10)][2]]);
11161167   if(!m_gfx_bank_on)
1117      membank("bank4")->set_base(&ROM[banksw_table_r0[((m_bank_r0 & 0xf0)>>4)+(m_bank_opt*0x10)][3]]);
1168      m_bank4->set_base(&ROM[banksw_table_r0[((m_bank_r0 & 0xf0)>>4)+(m_bank_opt*0x10)][3]]);
11181169   else
1119      membank("bank4")->set_base(&gfx_data[m_cgrom_bank_addr]);
1120   membank("bank4")->set_base(&ROM[banksw_table_r0[((m_bank_r0 & 0xf0)>>4)+(m_bank_opt*0x10)][3]]);
1121   membank("bank5")->set_base(&ROM[banksw_table_r1[(m_bank_r1 & 0xf)+(m_bank_opt*0x10)][0]]);
1122   membank("bank6")->set_base(&ROM[banksw_table_r1[(m_bank_r1 & 0xf)+(m_bank_opt*0x10)][1]]);
1123   membank("bank7")->set_base(&ROM[banksw_table_r1[((m_bank_r1 & 0xf0)>>4)+(m_bank_opt*0x10)][2]]);
1124   membank("bank8")->set_base(&ROM[banksw_table_r1[((m_bank_r1 & 0xf0)>>4)+(m_bank_opt*0x10)][3]]);
1170      m_bank4->set_base(&gfx_data[m_cgrom_bank_addr]);
1171   m_bank4->set_base(&ROM[banksw_table_r0[((m_bank_r0 & 0xf0)>>4)+(m_bank_opt*0x10)][3]]);
1172   m_bank5->set_base(&ROM[banksw_table_r1[(m_bank_r1 & 0xf)+(m_bank_opt*0x10)][0]]);
1173   m_bank6->set_base(&ROM[banksw_table_r1[(m_bank_r1 & 0xf)+(m_bank_opt*0x10)][1]]);
1174   m_bank7->set_base(&ROM[banksw_table_r1[((m_bank_r1 & 0xf0)>>4)+(m_bank_opt*0x10)][2]]);
1175   m_bank8->set_base(&ROM[banksw_table_r1[((m_bank_r1 & 0xf0)>>4)+(m_bank_opt*0x10)][3]]);
11251176
11261177}
11271178
11281179WRITE8_MEMBER(pc6001_state::work_ram0_w)
11291180{
1130   UINT8 *ROM = memregion("maincpu")->base();
1181   UINT8 *ROM = m_region_maincpu->base();
11311182   ROM[offset+((m_bank_w & 0x01) ? WRAM(0) : EXWRAM(0))] = data;
11321183}
11331184
11341185WRITE8_MEMBER(pc6001_state::work_ram1_w)
11351186{
1136   UINT8 *ROM = memregion("maincpu")->base();
1187   UINT8 *ROM = m_region_maincpu->base();
11371188   ROM[offset+((m_bank_w & 0x01) ? WRAM(1) : EXWRAM(1))] = data;
11381189}
11391190
11401191WRITE8_MEMBER(pc6001_state::work_ram2_w)
11411192{
1142   UINT8 *ROM = memregion("maincpu")->base();
1193   UINT8 *ROM = m_region_maincpu->base();
11431194   ROM[offset+((m_bank_w & 0x04) ? WRAM(2) : EXWRAM(2))] = data;
11441195}
11451196
11461197WRITE8_MEMBER(pc6001_state::work_ram3_w)
11471198{
1148   UINT8 *ROM = memregion("maincpu")->base();
1199   UINT8 *ROM = m_region_maincpu->base();
11491200   ROM[offset+((m_bank_w & 0x04) ? WRAM(3) : EXWRAM(3))] = data;
11501201}
11511202
11521203WRITE8_MEMBER(pc6001_state::work_ram4_w)
11531204{
1154   UINT8 *ROM = memregion("maincpu")->base();
1205   UINT8 *ROM = m_region_maincpu->base();
11551206   ROM[offset+((m_bank_w & 0x10) ? WRAM(4) : EXWRAM(4))] = data;
11561207}
11571208
11581209WRITE8_MEMBER(pc6001_state::work_ram5_w)
11591210{
1160   UINT8 *ROM = memregion("maincpu")->base();
1211   UINT8 *ROM = m_region_maincpu->base();
11611212   ROM[offset+((m_bank_w & 0x10) ? WRAM(5) : EXWRAM(5))] = data;
11621213}
11631214
11641215WRITE8_MEMBER(pc6001_state::work_ram6_w)
11651216{
1166   UINT8 *ROM = memregion("maincpu")->base();
1217   UINT8 *ROM = m_region_maincpu->base();
11671218   ROM[offset+((m_bank_w & 0x40) ? WRAM(6) : EXWRAM(6))] = data;
11681219}
11691220
11701221WRITE8_MEMBER(pc6001_state::work_ram7_w)
11711222{
1172   UINT8 *ROM = memregion("maincpu")->base();
1223   UINT8 *ROM = m_region_maincpu->base();
11731224   ROM[offset+((m_bank_w & 0x40) ? WRAM(7) : EXWRAM(7))] = data;
11741225}
11751226
r20911r20912
11941245      m_port_c_8255 |= 0xa8;
11951246
11961247      {
1197         UINT8 *ROM = memregion("maincpu")->base();
1198         UINT8 *gfx_data = memregion("gfx1")->base();
1248         UINT8 *ROM = m_region_maincpu->base();
1249         UINT8 *gfx_data = m_region_gfx1->base();
11991250
12001251         //printf("%02x\n",data);
12011252
12021253         if((data & 0x0f) == 0x05)
12031254         {
12041255            m_gfx_bank_on = 0;
1205            membank("bank4")->set_base(&ROM[banksw_table_r0[((m_bank_r0 & 0xf0)>>4)+(m_bank_opt*0x10)][3]]);
1256            m_bank4->set_base(&ROM[banksw_table_r0[((m_bank_r0 & 0xf0)>>4)+(m_bank_opt*0x10)][3]]);
12061257         }
12071258         if((data & 0x0f) == 0x04)
12081259         {
12091260            m_gfx_bank_on = 1;
1210            membank("bank4")->set_base(&gfx_data[m_cgrom_bank_addr]);
1261            m_bank4->set_base(&gfx_data[m_cgrom_bank_addr]);
12111262         }
12121263      }
12131264   }
12141265   m_ppi->write(space,offset,data);
12151266}
12161267
1217static void vram_bank_change(running_machine &machine,UINT8 vram_bank)
1268void pc6001_state::vram_bank_change(UINT8 vram_bank)
12181269{
1219   pc6001_state *state = machine.driver_data<pc6001_state>();
1220   UINT8 *work_ram = state->memregion("maincpu")->base();
1270   UINT8 *work_ram = m_region_maincpu->base();
12211271
12221272//  popmessage("%02x",vram_bank);
12231273
12241274   switch(vram_bank & 0x66)
12251275   {
1226      case 0x00: state->m_video_ram = work_ram + 0x8000 + 0x28000; break; //4 color mode
1227      case 0x02: state->m_video_ram = work_ram + 0xc000 + 0x28000; break;
1228      case 0x04: state->m_video_ram = work_ram + 0x8000 + 0x28000; break;
1229      case 0x06: state->m_video_ram = work_ram + 0xc000 + 0x28000; break;
1230      case 0x20: state->m_video_ram = work_ram + 0xc000 + 0x28000; break; //4 color mode
1231      case 0x22: state->m_video_ram = work_ram + 0xe000 + 0x28000; break;
1232      case 0x24: state->m_video_ram = work_ram + 0xc000 + 0x28000; break;
1233      case 0x26: state->m_video_ram = work_ram + 0xe000 + 0x28000; break;
1234      case 0x40: state->m_video_ram = work_ram + 0x0000 + 0x28000; break; //4 color mode
1235      case 0x42: state->m_video_ram = work_ram + 0x8000 + 0x28000; break;
1236      case 0x44: state->m_video_ram = work_ram + 0x0000 + 0x28000; break;
1237      case 0x46: state->m_video_ram = work_ram + 0x8000 + 0x28000; break;
1238      case 0x60: state->m_video_ram = work_ram + 0x4000 + 0x28000; break; //4 color mode
1239      case 0x62: state->m_video_ram = work_ram + 0xa000 + 0x28000; break;
1240      case 0x64: state->m_video_ram = work_ram + 0x4000 + 0x28000; break;
1241      case 0x66: state->m_video_ram = work_ram + 0xa000 + 0x28000; break;
1276      case 0x00: m_video_ram = work_ram + 0x8000 + 0x28000; break; //4 color mode
1277      case 0x02: m_video_ram = work_ram + 0xc000 + 0x28000; break;
1278      case 0x04: m_video_ram = work_ram + 0x8000 + 0x28000; break;
1279      case 0x06: m_video_ram = work_ram + 0xc000 + 0x28000; break;
1280      case 0x20: m_video_ram = work_ram + 0xc000 + 0x28000; break; //4 color mode
1281      case 0x22: m_video_ram = work_ram + 0xe000 + 0x28000; break;
1282      case 0x24: m_video_ram = work_ram + 0xc000 + 0x28000; break;
1283      case 0x26: m_video_ram = work_ram + 0xe000 + 0x28000; break;
1284      case 0x40: m_video_ram = work_ram + 0x0000 + 0x28000; break; //4 color mode
1285      case 0x42: m_video_ram = work_ram + 0x8000 + 0x28000; break;
1286      case 0x44: m_video_ram = work_ram + 0x0000 + 0x28000; break;
1287      case 0x46: m_video_ram = work_ram + 0x8000 + 0x28000; break;
1288      case 0x60: m_video_ram = work_ram + 0x4000 + 0x28000; break; //4 color mode
1289      case 0x62: m_video_ram = work_ram + 0xa000 + 0x28000; break;
1290      case 0x64: m_video_ram = work_ram + 0x4000 + 0x28000; break;
1291      case 0x66: m_video_ram = work_ram + 0xa000 + 0x28000; break;
12421292   }
12431293}
12441294
r20911r20912
12471297   if((!(m_sys_latch & 8)) && data & 0x8) //PLAY tape cmd
12481298   {
12491299      m_cas_switch = 1;
1250      //machine().device(CASSETTE_TAG )->change_state(CASSETTE_MOTOR_ENABLED,CASSETTE_MASK_MOTOR);
1251      //machine().device(CASSETTE_TAG )->change_state(CASSETTE_PLAY,CASSETTE_MASK_UISTATE);
1300      //m_cassette->change_state(CASSETTE_MOTOR_ENABLED,CASSETTE_MASK_MOTOR);
1301      //m_cassette->change_state(CASSETTE_PLAY,CASSETTE_MASK_UISTATE);
12521302   }
12531303   if((m_sys_latch & 8) && ((data & 0x8) == 0)) //STOP tape cmd
12541304   {
12551305      m_cas_switch = 0;
1256      //machine().device(CASSETTE_TAG )->change_state(CASSETTE_MOTOR_DISABLED,CASSETTE_MASK_MOTOR);
1257      //machine().device(CASSETTE_TAG )->change_state(CASSETTE_STOPPED,CASSETTE_MASK_UISTATE);
1306      //m_cassette->change_state(CASSETTE_MOTOR_DISABLED,CASSETTE_MASK_MOTOR);
1307      //m_cassette->change_state(CASSETTE_STOPPED,CASSETTE_MASK_UISTATE);
12581308      //m_irq_vector = 0x00;
1259      //machine().device("maincpu")->execute().set_input_line(0, ASSERT_LINE);
1309      //m_maincpu->set_input_line(0, ASSERT_LINE);
12601310   }
12611311
12621312   m_sys_latch = data;
12631313
12641314   m_timer_irq_mask = data & 1;
1265   vram_bank_change(machine(),(m_ex_vram_bank & 0x06) | ((m_sys_latch & 0x06) << 4));
1315   vram_bank_change((m_ex_vram_bank & 0x06) | ((m_sys_latch & 0x06) << 4));
12661316
12671317   //printf("%02x B0\n",data);
12681318}
r20911r20912
12731323   //static const UINT32 startaddr[] = {WRAM(6), WRAM(6), WRAM(0), WRAM(4) };
12741324
12751325   m_ex_vram_bank = data;
1276   vram_bank_change(machine(),(m_ex_vram_bank & 0x06) | ((m_sys_latch & 0x06) << 4));
1326   vram_bank_change((m_ex_vram_bank & 0x06) | ((m_sys_latch & 0x06) << 4));
12771327
12781328   m_exgfx_text_mode = ((data & 2) == 0);
12791329   m_cgrom_bank_addr = (data & 2) ? 0x0000 : 0x2000;
r20911r20912
13651415   {
13661416      if(IRQ_LOG) printf("Timer IRQ called %02x\n",m_timer_irq_vector);
13671417      m_irq_vector = m_timer_irq_vector;
1368      machine().device("maincpu")->execute().set_input_line(0, ASSERT_LINE);
1418      m_maincpu->set_input_line(0, ASSERT_LINE);
13691419   }
13701420}
13711421
r20911r20912
15141564
15151565WRITE8_MEMBER(pc6001_state::pc6001sr_bank_rn_w)
15161566{
1517   static const char *const bank_name[8] = { "bank1","bank2","bank3", "bank4", "bank5", "bank6", "bank7", "bank8" };
1518   UINT8 *ROM = memregion("maincpu")->base();
1567   memory_bank *bank[8] = { m_bank1, m_bank2, m_bank3, m_bank4, m_bank5, m_bank6, m_bank7, m_bank8 };
1568   UINT8 *ROM = m_region_maincpu->base();
15191569   UINT8 bank_num;
15201570
15211571   m_sr_bank_r[offset] = data;
r20911r20912
15231573
15241574   switch(data & 0xf0)
15251575   {
1526      case 0xf0: membank(bank_name[offset])->set_base(&ROM[SR_SYSROM_1(bank_num)]); break;
1527      case 0xe0: membank(bank_name[offset])->set_base(&ROM[SR_SYSROM_2(bank_num)]); break;
1528      case 0xd0: membank(bank_name[offset])->set_base(&ROM[SR_CGROM1(bank_num)]); break;
1529      case 0xc0: membank(bank_name[offset])->set_base(&ROM[SR_EXROM0(bank_num)]); break;
1530      case 0xb0: membank(bank_name[offset])->set_base(&ROM[SR_EXROM1(bank_num)]); break;
1531      case 0x20: membank(bank_name[offset])->set_base(&ROM[SR_EXRAM0(bank_num)]); break;
1532      case 0x00: membank(bank_name[offset])->set_base(&ROM[SR_WRAM0(bank_num)]); break;
1533      default:   membank(bank_name[offset])->set_base(&ROM[SR_NULL(bank_num)]); break;
1576      case 0xf0: bank[offset]->set_base(&ROM[SR_SYSROM_1(bank_num)]); break;
1577      case 0xe0: bank[offset]->set_base(&ROM[SR_SYSROM_2(bank_num)]); break;
1578      case 0xd0: bank[offset]->set_base(&ROM[SR_CGROM1(bank_num)]); break;
1579      case 0xc0: bank[offset]->set_base(&ROM[SR_EXROM0(bank_num)]); break;
1580      case 0xb0: bank[offset]->set_base(&ROM[SR_EXROM1(bank_num)]); break;
1581      case 0x20: bank[offset]->set_base(&ROM[SR_EXRAM0(bank_num)]); break;
1582      case 0x00: bank[offset]->set_base(&ROM[SR_WRAM0(bank_num)]); break;
1583      default:   bank[offset]->set_base(&ROM[SR_NULL(bank_num)]); break;
15341584   }
15351585}
15361586
r20911r20912
15461596
15471597#define SR_WRAM_BANK_W(_v_) \
15481598{ \
1549   UINT8 *ROM = memregion("maincpu")->base(); \
1599   UINT8 *ROM = m_region_maincpu->base(); \
15501600   UINT8 bank_num; \
15511601   bank_num = m_sr_bank_w[_v_] & 0x0f; \
15521602   if((m_sr_bank_w[_v_] & 0xf0) != 0x20) \
r20911r20912
15731623
15741624WRITE8_MEMBER(pc6001_state::pc6001sr_vram_bank_w)
15751625{
1576   UINT8 *work_ram = memregion("maincpu")->base();
1626   UINT8 *work_ram = m_region_maincpu->base();
15771627
15781628   m_video_ram = work_ram + 0x70000 + ((data & 0x0f)*0x1000);
15791629}
r20911r20912
15831633   if((!(m_sys_latch & 8)) && data & 0x8) //PLAY tape cmd
15841634   {
15851635      m_cas_switch = 1;
1586      //machine().device(CASSETTE_TAG )->change_state(CASSETTE_MOTOR_ENABLED,CASSETTE_MASK_MOTOR);
1587      //machine().device(CASSETTE_TAG )->change_state(CASSETTE_PLAY,CASSETTE_MASK_UISTATE);
1636      //m_cassette->change_state(CASSETTE_MOTOR_ENABLED,CASSETTE_MASK_MOTOR);
1637      //m_cassette->change_state(CASSETTE_PLAY,CASSETTE_MASK_UISTATE);
15881638   }
15891639   if((m_sys_latch & 8) && ((data & 0x8) == 0)) //STOP tape cmd
15901640   {
15911641      m_cas_switch = 0;
1592      //machine().device(CASSETTE_TAG )->change_state(CASSETTE_MOTOR_DISABLED,CASSETTE_MASK_MOTOR);
1593      //machine().device(CASSETTE_TAG )->change_state(CASSETTE_STOPPED,CASSETTE_MASK_UISTATE);
1642      //m_cassette->change_state(CASSETTE_MOTOR_DISABLED,CASSETTE_MASK_MOTOR);
1643      //m_cassette->change_state(CASSETTE_STOPPED,CASSETTE_MASK_UISTATE);
15941644      //m_irq_vector = 0x00;
1595      //machine().device("maincpu")->execute().set_input_line(0, ASSERT_LINE);
1645      //m_maincpu->set_input_line(0, ASSERT_LINE);
15961646   }
15971647
15981648   m_sys_latch = data;
15991649
16001650   m_timer_irq_mask = data & 1;
1601   //vram_bank_change(machine(),(m_ex_vram_bank & 0x06) | ((m_sys_latch & 0x06) << 4));
1651   //vram_bank_change((m_ex_vram_bank & 0x06) | ((m_sys_latch & 0x06) << 4));
16021652
16031653   //printf("%02x B0\n",data);
16041654}
r20911r20912
16241674
16251675      if(0)
16261676      {
1627         UINT8 *gfx_data = memregion("gfx1")->base();
1628         UINT8 *ext_rom = memregion("cart_img")->base();
1677         UINT8 *gfx_data = m_region_gfx1->base();
1678         UINT8 *ext_rom = m_region_cart_img->base();
16291679
16301680         //printf("%02x\n",data);
16311681
16321682         if((data & 0x0f) == 0x05)
1633            membank("bank1")->set_base(&ext_rom[0x2000]);
1683            m_bank1->set_base(&ext_rom[0x2000]);
16341684         if((data & 0x0f) == 0x04)
1635            membank("bank1")->set_base(&gfx_data[0]);
1685            m_bank1->set_base(&gfx_data[0]);
16361686      }
16371687   }
16381688   m_ppi->write(space,offset,data);
r20911r20912
18381888   PORT_BIT(0x00000020,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("STOP") PORT_CODE(KEYCODE_ESC)
18391889INPUT_PORTS_END
18401890
1841static UINT8 check_joy_press(running_machine &machine);
1842
18431891INTERRUPT_GEN_MEMBER(pc6001_state::pc6001_interrupt)
18441892{
1845   m_cur_keycode = check_joy_press(machine());
1893   m_cur_keycode = check_joy_press();
18461894   if(IRQ_LOG) printf("Stick IRQ called 0x16\n");
18471895   m_irq_vector = 0x16;
18481896   device.execute().set_input_line(0, ASSERT_LINE);
r20911r20912
18521900{
18531901   m_kludge^= 1;
18541902
1855   m_cur_keycode = check_joy_press(machine());
1903   m_cur_keycode = check_joy_press();
18561904   if(IRQ_LOG) printf("VRTC IRQ called 0x16\n");
18571905   m_irq_vector = (m_kludge) ? 0x22 : 0x16;
18581906   device.execute().set_input_line(0, ASSERT_LINE);
r20911r20912
19321980   DEVCB_NULL
19331981};
19341982
1935static UINT8 check_keyboard_press(running_machine &machine)
1983UINT8 pc6001_state::check_keyboard_press()
19361984{
1937   static const char *const portnames[3] = { "key1","key2","key3" };
1985   ioport_port *ports[3] = { m_io_key1, m_io_key2, m_io_key3 };
19381986   int i,port_i,scancode;
19391987   UINT8 shift_pressed,caps_lock;
19401988   scancode = 0;
19411989
1942   shift_pressed = (machine.root_device().ioport("key_modifiers")->read() & 2)>>1;
1943   caps_lock = (machine.root_device().ioport("key_modifiers")->read() & 8)>>3;
1990   shift_pressed = (m_io_key_modifiers->read() & 2)>>1;
1991   caps_lock = (m_io_key_modifiers->read() & 8)>>3;
19441992
19451993   for(port_i=0;port_i<3;port_i++)
19461994   {
19471995      for(i=0;i<32;i++)
19481996      {
1949         if((machine.root_device().ioport(portnames[port_i])->read()>>i) & 1)
1997         if((ports[port_i]->read()>>i) & 1)
19501998         {
19511999            if((shift_pressed != caps_lock) && scancode >= 0x41 && scancode <= 0x5f)
19522000               scancode+=0x20;
r20911r20912
19752023   return 0;
19762024}
19772025
1978static UINT8 check_joy_press(running_machine &machine)
2026UINT8 pc6001_state::check_joy_press()
19792027{
1980   UINT8 p1_key = machine.root_device().ioport("P1")->read() ^ 0xff;
1981   UINT8 shift_key = machine.root_device().ioport("key_modifiers")->read() & 0x02;
1982   UINT8 space_key = machine.root_device().ioport("key2")->read() & 0x01;
2028   UINT8 p1_key = m_io_p1->read() ^ 0xff;
2029   UINT8 shift_key = m_io_key_modifiers->read() & 0x02;
2030   UINT8 space_key = m_io_key2->read() & 0x01;
19832031   UINT8 joy_press;
19842032
19852033      /*
r20911r20912
20202068      #if 0
20212069      static UINT8 cas_data_i = 0x80,cas_data_poll;
20222070      //m_cur_keycode = gfx_data[m_cas_offset++];
2023      if((machine().device<cassette_image_device>(CASSETTE_TAG))->input() > 0.03)
2071      if(m_cassette->input() > 0.03)
20242072         cas_data_poll|= cas_data_i;
20252073      else
20262074         cas_data_poll&=~cas_data_i;
r20911r20912
20302078         cas_data_i = 0x80;
20312079         /* data ready, poll irq */
20322080         m_irq_vector = 0x08;
2033         machine().device("maincpu")->execute().set_input_line(0, ASSERT_LINE);
2081         m_maincpu->set_input_line(0, ASSERT_LINE);
20342082      }
20352083      else
20362084         cas_data_i>>=1;
20372085      #else
2038         UINT8 *cas_data = machine().root_device().memregion("cas")->base();
2086         UINT8 *cas_data = m_region_cas->base();
20392087
20402088         m_cur_keycode = cas_data[m_cas_offset++];
20412089         popmessage("%04x %04x",m_cas_offset,m_cas_maxsize);
r20911r20912
20452093            m_cas_switch = 0;
20462094            if(IRQ_LOG) printf("Tape-E IRQ 0x12\n");
20472095            m_irq_vector = 0x12;
2048            machine().device("maincpu")->execute().set_input_line(0, ASSERT_LINE);
2096            m_maincpu->set_input_line(0, ASSERT_LINE);
20492097         }
20502098         else
20512099         {
20522100            if(IRQ_LOG) printf("Tape-D IRQ 0x08\n");
20532101            m_irq_vector = 0x08;
2054            machine().device("maincpu")->execute().set_input_line(0, ASSERT_LINE);
2102            m_maincpu->set_input_line(0, ASSERT_LINE);
20552103         }
20562104      #endif
20572105   }
r20911r20912
20592107
20602108TIMER_DEVICE_CALLBACK_MEMBER(pc6001_state::keyboard_callback)
20612109{
2062   address_space &space = machine().device("maincpu")->memory().space(AS_PROGRAM);
2063   UINT32 key1 = machine().root_device().ioport("key1")->read();
2064   UINT32 key2 = machine().root_device().ioport("key2")->read();
2065   UINT32 key3 = machine().root_device().ioport("key3")->read();
2066//  UINT8 p1_key = machine().root_device().ioport("P1")->read();
2110   UINT32 key1 = m_io_key1->read();
2111   UINT32 key2 = m_io_key2->read();
2112   UINT32 key3 = m_io_key3->read();
2113//  UINT8 p1_key = m_io_p1->read();
20672114
20682115   if(m_cas_switch == 0)
20692116   {
20702117      if((key1 != m_old_key1) || (key2 != m_old_key2) || (key3 != m_old_key3))
20712118      {
2072         m_cur_keycode = check_keyboard_press(space.machine());
2119         m_cur_keycode = check_keyboard_press();
20732120         if(IRQ_LOG) printf("KEY IRQ 0x02\n");
20742121         m_irq_vector = 0x02;
2075         machine().device("maincpu")->execute().set_input_line(0, ASSERT_LINE);
2122         m_maincpu->set_input_line(0, ASSERT_LINE);
20762123         m_old_key1 = key1;
20772124         m_old_key2 = key2;
20782125         m_old_key3 = key3;
r20911r20912
20802127      #if 0
20812128      else /* joypad polling */
20822129      {
2083         m_cur_keycode = check_joy_press(space.machine());
2130         m_cur_keycode = check_joy_press();
20842131         if(m_cur_keycode)
20852132         {
20862133            m_irq_vector = 0x16;
2087            machine().device("maincpu")->execute().set_input_line(0, ASSERT_LINE);
2134            m_maincpu->set_input_line(0, ASSERT_LINE);
20882135         }
20892136      }
20902137      #endif
r20911r20912
21032150
21042151void pc6001_state::machine_reset()
21052152{
2106   UINT8 *work_ram = memregion("maincpu")->base();
2153   UINT8 *work_ram = m_region_maincpu->base();
21072154
21082155   m_video_ram =  work_ram + 0xc000;
21092156
21102157   m_port_c_8255=0;
21112158
2112   machine().device("maincpu")->execute().set_irq_acknowledge_callback(pc6001_irq_callback);
2159   m_maincpu->set_irq_acknowledge_callback(pc6001_irq_callback);
21132160   m_cas_switch = 0;
21142161   m_cas_offset = 0;
21152162   m_timer_irq_mask = 1;
r20911r20912
21202167
21212168MACHINE_RESET_MEMBER(pc6001_state,pc6001m2)
21222169{
2123   UINT8 *work_ram = machine().root_device().memregion("maincpu")->base();
2170   UINT8 *work_ram = m_region_maincpu->base();
21242171
21252172   m_video_ram = work_ram + 0xc000 + 0x28000;
21262173
21272174   m_port_c_8255=0;
21282175
2129   machine().device("maincpu")->execute().set_irq_acknowledge_callback(pc6001_irq_callback);
2176   m_maincpu->set_irq_acknowledge_callback(pc6001_irq_callback);
21302177   m_cas_switch = 0;
21312178   m_cas_offset = 0;
21322179
21332180   /* set default bankswitch */
21342181   {
2135      UINT8 *ROM = memregion("maincpu")->base();
2182      UINT8 *ROM = m_region_maincpu->base();
21362183      m_bank_r0 = 0x71;
2137      membank("bank1")->set_base(&ROM[BASICROM(0)]);
2138      membank("bank2")->set_base(&ROM[BASICROM(1)]);
2139      membank("bank3")->set_base(&ROM[EXROM(0)]);
2140      membank("bank4")->set_base(&ROM[EXROM(1)]);
2184      m_bank1->set_base(&ROM[BASICROM(0)]);
2185      m_bank2->set_base(&ROM[BASICROM(1)]);
2186      m_bank3->set_base(&ROM[EXROM(0)]);
2187      m_bank4->set_base(&ROM[EXROM(1)]);
21412188      m_bank_r1 = 0xdd;
2142      membank("bank5")->set_base(&ROM[WRAM(4)]);
2143      membank("bank6")->set_base(&ROM[WRAM(5)]);
2144      membank("bank7")->set_base(&ROM[WRAM(6)]);
2145      membank("bank8")->set_base(&ROM[WRAM(7)]);
2189      m_bank5->set_base(&ROM[WRAM(4)]);
2190      m_bank6->set_base(&ROM[WRAM(5)]);
2191      m_bank7->set_base(&ROM[WRAM(6)]);
2192      m_bank8->set_base(&ROM[WRAM(7)]);
21462193      m_bank_opt = 0x02; //tv rom
21472194      m_bank_w = 0x50; //enable write to work ram 4,5,6,7
21482195      m_gfx_bank_on = 0;
r20911r20912
21552202
21562203MACHINE_RESET_MEMBER(pc6001_state,pc6001sr)
21572204{
2158   UINT8 *work_ram = machine().root_device().memregion("maincpu")->base();
2205   UINT8 *work_ram = m_region_maincpu->base();
21592206
21602207   m_video_ram = work_ram + 0x70000;
21612208
21622209   m_port_c_8255=0;
21632210
2164   machine().device("maincpu")->execute().set_irq_acknowledge_callback(pc6001_irq_callback);
2211   m_maincpu->set_irq_acknowledge_callback(pc6001_irq_callback);
21652212   m_cas_switch = 0;
21662213   m_cas_offset = 0;
21672214
21682215   /* set default bankswitch */
21692216   {
2170      UINT8 *ROM = memregion("maincpu")->base();
2171      m_sr_bank_r[0] = 0xf8; membank("bank1")->set_base(&ROM[SR_SYSROM_1(0x08)]);
2172      m_sr_bank_r[1] = 0xfa; membank("bank2")->set_base(&ROM[SR_SYSROM_1(0x0a)]);
2173      m_sr_bank_r[2] = 0xb0; membank("bank3")->set_base(&ROM[SR_EXROM1(0x00)]);
2174      m_sr_bank_r[3] = 0xc0; membank("bank4")->set_base(&ROM[SR_EXROM0(0x00)]);
2175      m_sr_bank_r[4] = 0x08; membank("bank5")->set_base(&ROM[SR_WRAM0(0x08)]);
2176      m_sr_bank_r[5] = 0x0a; membank("bank6")->set_base(&ROM[SR_WRAM0(0x0a)]);
2177      m_sr_bank_r[6] = 0x0c; membank("bank7")->set_base(&ROM[SR_WRAM0(0x0c)]);
2178      m_sr_bank_r[7] = 0x0e; membank("bank8")->set_base(&ROM[SR_WRAM0(0x0e)]);
2217      UINT8 *ROM = m_region_maincpu->base();
2218      m_sr_bank_r[0] = 0xf8; m_bank1->set_base(&ROM[SR_SYSROM_1(0x08)]);
2219      m_sr_bank_r[1] = 0xfa; m_bank2->set_base(&ROM[SR_SYSROM_1(0x0a)]);
2220      m_sr_bank_r[2] = 0xb0; m_bank3->set_base(&ROM[SR_EXROM1(0x00)]);
2221      m_sr_bank_r[3] = 0xc0; m_bank4->set_base(&ROM[SR_EXROM0(0x00)]);
2222      m_sr_bank_r[4] = 0x08; m_bank5->set_base(&ROM[SR_WRAM0(0x08)]);
2223      m_sr_bank_r[5] = 0x0a; m_bank6->set_base(&ROM[SR_WRAM0(0x0a)]);
2224      m_sr_bank_r[6] = 0x0c; m_bank7->set_base(&ROM[SR_WRAM0(0x0c)]);
2225      m_sr_bank_r[7] = 0x0e; m_bank8->set_base(&ROM[SR_WRAM0(0x0e)]);
21792226//      m_bank_opt = 0x02; //tv rom
21802227
21812228      /* enable default work RAM writes */
r20911r20912
22642311
22652312DEVICE_IMAGE_LOAD_MEMBER( pc6001_state,pc6001_cass )
22662313{
2267   pc6001_state *state = image.device().machine().driver_data<pc6001_state>();
2268   UINT8 *cas = state->memregion("cas")->base();
2314   UINT8 *cas = m_region_cas->base();
22692315   UINT32 size;
22702316
22712317   size = image.length();
r20911r20912
22752321      return IMAGE_INIT_FAIL;
22762322   }
22772323
2278   state->m_cas_maxsize = size;
2324   m_cas_maxsize = size;
22792325
22802326   return IMAGE_INIT_PASS;
22812327}

Previous 199869 Revisions Next


© 1997-2024 The MAME Team