Previous 199869 Revisions Next

r20882 Sunday 10th February, 2013 at 09:51:46 UTC by Wilbert Pol
(MESS) trs80.c: Reduce tagmap lookups (nw)
[src/mess/includes]trs80.h
[src/mess/machine]trs80.c

trunk/src/mess/machine/trs80.c
r20881r20882
230230         if (m_model4 & 4)   /* Model 4P gets RAM while Model 4 gets ROM */
231231         {
232232            if (m_model4 & 8)
233               membank("bank1")->set_base(base);
233               m_bank1->set_base(base);
234234            else
235               membank("bank1")->set_base(base + 0x10000);
235               m_bank1->set_base(base + 0x10000);
236236
237            membank("bank2")->set_base(base + 0x11000);
238            membank("bank4")->set_base(base + 0x137ea);
237            m_bank2->set_base(base + 0x11000);
238            m_bank4->set_base(base + 0x137ea);
239239         }
240240         else
241241         {
242            membank("bank1")->set_base(base);
243            membank("bank2")->set_base(base + 0x01000);
244            membank("bank4")->set_base(base + 0x037ea);
242            m_bank1->set_base(base);
243            m_bank2->set_base(base + 0x01000);
244            m_bank4->set_base(base + 0x037ea);
245245         }
246246
247         membank("bank7")->set_base(base + 0x14000);
248         membank("bank8")->set_base(base + 0x1f400);
249         membank("bank9")->set_base(base + 0x1f800);
250         membank("bank11")->set_base(base + 0x05000);
251         membank("bank12")->set_base(base + 0x06000);
252         membank("bank14")->set_base(base + 0x09000);
253         membank("bank15")->set_base(base + 0x0a000);
254         membank("bank17")->set_base(base + 0x14000);
255         membank("bank18")->set_base(base + 0x1f400);
256         membank("bank19")->set_base(base + 0x1f800);
247         m_bank7->set_base(base + 0x14000);
248         m_bank8->set_base(base + 0x1f400);
249         m_bank9->set_base(base + 0x1f800);
250         m_bank11->set_base(base + 0x05000);
251         m_bank12->set_base(base + 0x06000);
252         m_bank14->set_base(base + 0x09000);
253         m_bank15->set_base(base + 0x0a000);
254         m_bank17->set_base(base + 0x14000);
255         m_bank18->set_base(base + 0x1f400);
256         m_bank19->set_base(base + 0x1f800);
257257         mem.install_readwrite_handler (0x37e8, 0x37e9, read8_delegate(FUNC(trs80_state::trs80_printer_r), this), write8_delegate(FUNC(trs80_state::trs80_printer_w), this));    /* 3 & 13 */
258258         mem.install_read_handler (0x3800, 0x3bff, read8_delegate(FUNC(trs80_state::trs80_keyboard_r), this));   /* 5 */
259259         mem.install_readwrite_handler (0x3c00, 0x3fff, read8_delegate(FUNC(trs80_state::trs80_videoram_r), this), write8_delegate(FUNC(trs80_state::trs80_videoram_w), this));  /* 6 & 16 */
r20881r20882
264264         if (m_model4 & 4)   /* Model 4P gets RAM while Model 4 gets ROM */
265265         {
266266            if (m_model4 & 8)
267               membank("bank1")->set_base(base);
267               m_bank1->set_base(base);
268268            else
269               membank("bank1")->set_base(base + 0x10000);
269               m_bank1->set_base(base + 0x10000);
270270
271            membank("bank2")->set_base(base + 0x11000);
272            membank("bank3")->set_base(base + 0x137e8);
273            membank("bank4")->set_base(base + 0x137ea);
271            m_bank2->set_base(base + 0x11000);
272            m_bank3->set_base(base + 0x137e8);
273            m_bank4->set_base(base + 0x137ea);
274274         }
275275         else
276276         {
277            membank("bank1")->set_base(base);
278            membank("bank2")->set_base(base + 0x01000);
279            membank("bank3")->set_base(base + 0x037e8);
280            membank("bank4")->set_base(base + 0x037ea);
277            m_bank1->set_base(base);
278            m_bank2->set_base(base + 0x01000);
279            m_bank3->set_base(base + 0x037e8);
280            m_bank4->set_base(base + 0x037ea);
281281         }
282282
283         membank("bank7")->set_base(base + 0x14000);
284         membank("bank8")->set_base(base + 0x1f400);
285         membank("bank9")->set_base(base + 0x1f800);
286         membank("bank11")->set_base(base + 0x10000);
287         membank("bank12")->set_base(base + 0x11000);
288         membank("bank13")->set_base(base + 0x137e8);
289         membank("bank14")->set_base(base + 0x137ea);
290         membank("bank15")->set_base(base + 0x0a000);
291         membank("bank17")->set_base(base + 0x14000);
292         membank("bank18")->set_base(base + 0x1f400);
293         membank("bank19")->set_base(base + 0x1f800);
283         m_bank7->set_base(base + 0x14000);
284         m_bank8->set_base(base + 0x1f400);
285         m_bank9->set_base(base + 0x1f800);
286         m_bank11->set_base(base + 0x10000);
287         m_bank12->set_base(base + 0x11000);
288         m_bank13->set_base(base + 0x137e8);
289         m_bank14->set_base(base + 0x137ea);
290         m_bank15->set_base(base + 0x0a000);
291         m_bank17->set_base(base + 0x14000);
292         m_bank18->set_base(base + 0x1f400);
293         m_bank19->set_base(base + 0x1f800);
294294         mem.install_read_handler (0x3800, 0x3bff, read8_delegate(FUNC(trs80_state::trs80_keyboard_r), this));   /* 5 */
295295         mem.install_readwrite_handler (0x3c00, 0x3fff, read8_delegate(FUNC(trs80_state::trs80_videoram_r), this), write8_delegate(FUNC(trs80_state::trs80_videoram_w), this));  /* 6 & 16 */
296296         break;
297297
298298      case 2: /* keyboard and video are moved to high memory, and the rest is ram */
299         membank("bank1")->set_base(base + 0x10000);
300         membank("bank2")->set_base(base + 0x11000);
301         membank("bank3")->set_base(base + 0x137e8);
302         membank("bank4")->set_base(base + 0x137ea);
303         membank("bank5")->set_base(base + 0x13800);
304         membank("bank6")->set_base(base + 0x13c00);
305         membank("bank7")->set_base(base + 0x14000);
306         membank("bank11")->set_base(base + 0x10000);
307         membank("bank12")->set_base(base + 0x11000);
308         membank("bank13")->set_base(base + 0x137e8);
309         membank("bank14")->set_base(base + 0x137ea);
310         membank("bank15")->set_base(base + 0x13800);
311         membank("bank16")->set_base(base + 0x13c00);
312         membank("bank17")->set_base(base + 0x14000);
313         membank("bank18")->set_base(base + 0x0a000);
299         m_bank1->set_base(base + 0x10000);
300         m_bank2->set_base(base + 0x11000);
301         m_bank3->set_base(base + 0x137e8);
302         m_bank4->set_base(base + 0x137ea);
303         m_bank5->set_base(base + 0x13800);
304         m_bank6->set_base(base + 0x13c00);
305         m_bank7->set_base(base + 0x14000);
306         m_bank11->set_base(base + 0x10000);
307         m_bank12->set_base(base + 0x11000);
308         m_bank13->set_base(base + 0x137e8);
309         m_bank14->set_base(base + 0x137ea);
310         m_bank15->set_base(base + 0x13800);
311         m_bank16->set_base(base + 0x13c00);
312         m_bank17->set_base(base + 0x14000);
313         m_bank18->set_base(base + 0x0a000);
314314         mem.install_read_handler (0xf400, 0xf7ff, read8_delegate(FUNC(trs80_state::trs80_keyboard_r), this));   /* 8 */
315315         mem.install_readwrite_handler (0xf800, 0xffff, read8_delegate(FUNC(trs80_state::trs80_videoram_r), this), write8_delegate(FUNC(trs80_state::trs80_videoram_w), this));  /* 9 & 19 */
316316         m_model4++;
317317         break;
318318
319319      case 3: /* 64k of ram */
320         membank("bank1")->set_base(base + 0x10000);
321         membank("bank2")->set_base(base + 0x11000);
322         membank("bank3")->set_base(base + 0x137e8);
323         membank("bank4")->set_base(base + 0x137ea);
324         membank("bank5")->set_base(base + 0x13800);
325         membank("bank6")->set_base(base + 0x13c00);
326         membank("bank7")->set_base(base + 0x14000);
327         membank("bank8")->set_base(base + 0x1f400);
328         membank("bank9")->set_base(base + 0x1f800);
329         membank("bank11")->set_base(base + 0x10000);
330         membank("bank12")->set_base(base + 0x11000);
331         membank("bank13")->set_base(base + 0x137e8);
332         membank("bank14")->set_base(base + 0x137ea);
333         membank("bank15")->set_base(base + 0x13800);
334         membank("bank16")->set_base(base + 0x13c00);
335         membank("bank17")->set_base(base + 0x14000);
336         membank("bank18")->set_base(base + 0x1f400);
337         membank("bank19")->set_base(base + 0x1f800);
320         m_bank1->set_base(base + 0x10000);
321         m_bank2->set_base(base + 0x11000);
322         m_bank3->set_base(base + 0x137e8);
323         m_bank4->set_base(base + 0x137ea);
324         m_bank5->set_base(base + 0x13800);
325         m_bank6->set_base(base + 0x13c00);
326         m_bank7->set_base(base + 0x14000);
327         m_bank8->set_base(base + 0x1f400);
328         m_bank9->set_base(base + 0x1f800);
329         m_bank11->set_base(base + 0x10000);
330         m_bank12->set_base(base + 0x11000);
331         m_bank13->set_base(base + 0x137e8);
332         m_bank14->set_base(base + 0x137ea);
333         m_bank15->set_base(base + 0x13800);
334         m_bank16->set_base(base + 0x13c00);
335         m_bank17->set_base(base + 0x14000);
336         m_bank18->set_base(base + 0x1f400);
337         m_bank19->set_base(base + 0x1f800);
338338         break;
339339   }
340340}
r20881r20882
361361      switch (m_model4 & 8)
362362      {
363363         case 0:     /* Read-only RAM replaces rom */
364            membank("bank1")->set_base(m_region_maincpu->base() + 0x10000);
364            m_bank1->set_base(m_region_maincpu->base() + 0x10000);
365365            break;
366366         case 8:     /* Normal setup - rom enabled */
367            membank("bank1")->set_base(m_region_maincpu->base());
367            m_bank1->set_base(m_region_maincpu->base());
368368            break;
369369      }
370370   }
r20881r20882
863863   m_cassette_data = 0;
864864
865865   mem.install_read_bank (0x0000, 0x0fff, "bank1");
866   m_bank1 = membank("bank1");
866867   mem.install_read_bank (0x1000, 0x37e7, "bank2");
868   m_bank2 = membank("bank2");
867869   mem.install_read_bank (0x37e8, 0x37e9, "bank3");
870   m_bank3 = membank("bank3");
868871   mem.install_read_bank (0x37ea, 0x37ff, "bank4");
872   m_bank4 = membank("bank4");
869873   mem.install_read_bank (0x3800, 0x3bff, "bank5");
874   m_bank5 = membank("bank5");
870875   mem.install_read_bank (0x3c00, 0x3fff, "bank6");
876   m_bank6 = membank("bank6");
871877   mem.install_read_bank (0x4000, 0xf3ff, "bank7");
878   m_bank7 = membank("bank7");
872879   mem.install_read_bank (0xf400, 0xf7ff, "bank8");
880   m_bank8 = membank("bank8");
873881   mem.install_read_bank (0xf800, 0xffff, "bank9");
882   m_bank9 = membank("bank9");
874883
875884   mem.install_write_bank (0x0000, 0x0fff, "bank11");
885   m_bank11 = membank("bank11");
876886   mem.install_write_bank (0x1000, 0x37e7, "bank12");
887   m_bank12 = membank("bank12");
877888   mem.install_write_bank (0x37e8, 0x37e9, "bank13");
889   m_bank13 = membank("bank13");
878890   mem.install_write_bank (0x37ea, 0x37ff, "bank14");
891   m_bank14 = membank("bank14");
879892   mem.install_write_bank (0x3800, 0x3bff, "bank15");
893   m_bank15 = membank("bank15");
880894   mem.install_write_bank (0x3c00, 0x3fff, "bank16");
895   m_bank16 = membank("bank16");
881896   mem.install_write_bank (0x4000, 0xf3ff, "bank17");
897   m_bank17 = membank("bank17");
882898   mem.install_write_bank (0xf400, 0xf7ff, "bank18");
899   m_bank18 = membank("bank18");
883900   mem.install_write_bank (0xf800, 0xffff, "bank19");
901   m_bank19 = membank("bank19");
884902   trs80m4p_9c_w(mem, 0, 1);   /* Enable the ROM */
885903   trs80m4_84_w(mem, 0, 0);    /* switch in devices at power-on */
886904}
trunk/src/mess/includes/trs80.h
r20881r20882
2626{
2727public:
2828   trs80_state(const machine_config &mconfig, device_type type, const char *tag)
29      : driver_device(mconfig, type, tag),
30   m_maincpu(*this, "maincpu"),
31   m_printer(*this, "centronics"),
32   m_ay31015(*this, "tr1602"),
33   m_fdc(*this, "wd179x"),
34   m_speaker(*this, SPEAKER_TAG),
35   m_cass(*this, CASSETTE_TAG),
36   m_p_videoram(*this, "p_videoram"),
37   m_region_maincpu(*this, "maincpu")
29      : driver_device(mconfig, type, tag)
30      , m_maincpu(*this, "maincpu")
31      , m_printer(*this, "centronics")
32      , m_ay31015(*this, "tr1602")
33      , m_fdc(*this, "wd179x")
34      , m_speaker(*this, SPEAKER_TAG)
35      , m_cass(*this, CASSETTE_TAG)
36      , m_p_videoram(*this, "p_videoram")
37      , m_region_maincpu(*this, "maincpu")
38      , m_bank1(NULL)
39      , m_bank2(NULL)
40      , m_bank3(NULL)
41      , m_bank4(NULL)
42      , m_bank5(NULL)
43      , m_bank6(NULL)
44      , m_bank7(NULL)
45      , m_bank8(NULL)
46      , m_bank9(NULL)
47      , m_bank11(NULL)
48      , m_bank12(NULL)
49      , m_bank13(NULL)
50      , m_bank14(NULL)
51      , m_bank15(NULL)
52      , m_bank16(NULL)
53      , m_bank17(NULL)
54      , m_bank18(NULL)
55      , m_bank19(NULL)
3856   { }
3957
4058   required_device<cpu_device> m_maincpu;
r20881r20882
130148
131149protected:
132150   required_memory_region m_region_maincpu;
151   memory_bank *m_bank1;
152   memory_bank *m_bank2;
153   memory_bank *m_bank3;
154   memory_bank *m_bank4;
155   memory_bank *m_bank5;
156   memory_bank *m_bank6;
157   memory_bank *m_bank7;
158   memory_bank *m_bank8;
159   memory_bank *m_bank9;
160   memory_bank *m_bank11;
161   memory_bank *m_bank12;
162   memory_bank *m_bank13;
163   memory_bank *m_bank14;
164   memory_bank *m_bank15;
165   memory_bank *m_bank16;
166   memory_bank *m_bank17;
167   memory_bank *m_bank18;
168   memory_bank *m_bank19;
133169
134170   void trs80_fdc_interrupt_internal();
135171};

Previous 199869 Revisions Next


© 1997-2024 The MAME Team