Previous 199869 Revisions Next

r20908 Sunday 10th February, 2013 at 19:44:28 UTC by Wilbert Pol
(MESS) mikro80.c: Reduce tagmap lookups (nw)
[src/mess/drivers]mikro80.c
[src/mess/includes]mikro80.h
[src/mess/machine]mikro80.c
[src/mess/video]mikro80.c

trunk/src/mess/drivers/mikro80.c
r20907r20908
1010#include "emu.h"
1111#include "cpu/i8085/i8085.h"
1212#include "sound/wave.h"
13#include "machine/i8255.h"
1413#include "includes/mikro80.h"
15#include "imagedev/cassette.h"
1614#include "imagedev/cartslot.h"
1715#include "formats/rk_cas.h"
1816#include "sound/dac.h"
trunk/src/mess/machine/mikro80.c
r20907r20908
99
1010#include "emu.h"
1111#include "cpu/i8085/i8085.h"
12#include "imagedev/cassette.h"
13#include "machine/i8255.h"
1412#include "includes/mikro80.h"
1513
1614/* Driver initialization */
1715DRIVER_INIT_MEMBER(mikro80_state,mikro80)
1816{
1917   /* set initialy ROM to be visible on first bank */
20   UINT8 *RAM = memregion("maincpu")->base();
18   UINT8 *RAM = m_region_maincpu->base();
2119   memset(RAM,0x0000,0x0800); // make frist page empty by default
22   membank("bank1")->configure_entries(1, 2, RAM, 0x0000);
23   membank("bank1")->configure_entries(0, 2, RAM, 0xf800);
20   m_bank1->configure_entries(1, 2, RAM, 0x0000);
21   m_bank1->configure_entries(0, 2, RAM, 0xf800);
2422   m_key_mask = 0x7f;
2523}
2624
r20907r20908
3331READ8_MEMBER(mikro80_state::mikro80_8255_portb_r)
3432{
3533   UINT8 key = 0xff;
36   if ((m_keyboard_mask & 0x01)!=0) { key &= ioport("LINE0")->read(); }
37   if ((m_keyboard_mask & 0x02)!=0) { key &= ioport("LINE1")->read(); }
38   if ((m_keyboard_mask & 0x04)!=0) { key &= ioport("LINE2")->read(); }
39   if ((m_keyboard_mask & 0x08)!=0) { key &= ioport("LINE3")->read(); }
40   if ((m_keyboard_mask & 0x10)!=0) { key &= ioport("LINE4")->read(); }
41   if ((m_keyboard_mask & 0x20)!=0) { key &= ioport("LINE5")->read(); }
42   if ((m_keyboard_mask & 0x40)!=0) { key &= ioport("LINE6")->read(); }
43   if ((m_keyboard_mask & 0x80)!=0) { key &= ioport("LINE7")->read(); }
34   if ((m_keyboard_mask & 0x01)!=0) { key &= m_io_line0->read(); }
35   if ((m_keyboard_mask & 0x02)!=0) { key &= m_io_line1->read(); }
36   if ((m_keyboard_mask & 0x04)!=0) { key &= m_io_line2->read(); }
37   if ((m_keyboard_mask & 0x08)!=0) { key &= m_io_line3->read(); }
38   if ((m_keyboard_mask & 0x10)!=0) { key &= m_io_line4->read(); }
39   if ((m_keyboard_mask & 0x20)!=0) { key &= m_io_line5->read(); }
40   if ((m_keyboard_mask & 0x40)!=0) { key &= m_io_line6->read(); }
41   if ((m_keyboard_mask & 0x80)!=0) { key &= m_io_line7->read(); }
4442   return key & m_key_mask;
4543}
4644
4745READ8_MEMBER(mikro80_state::mikro80_8255_portc_r)
4846{
49   return ioport("LINE8")->read();
47   return m_io_line8->read();
5048}
5149
5250WRITE8_MEMBER(mikro80_state::mikro80_8255_porta_w)
r20907r20908
7169
7270TIMER_CALLBACK_MEMBER(mikro80_state::mikro80_reset)
7371{
74   membank("bank1")->set_entry(0);
72   m_bank1->set_entry(0);
7573}
7674
7775void mikro80_state::machine_reset()
7876{
7977   machine().scheduler().timer_set(attotime::from_usec(10), timer_expired_delegate(FUNC(mikro80_state::mikro80_reset),this));
80   membank("bank1")->set_entry(1);
78   m_bank1->set_entry(1);
8179   m_keyboard_mask = 0;
8280}
8381
8482
8583READ8_MEMBER(mikro80_state::mikro80_keyboard_r)
8684{
87   i8255_device *ppi = machine().device<i8255_device>("ppi8255");
88   return ppi->read(space, offset^0x03);
85   return m_ppi8255->read(space, offset^0x03);
8986}
9087
9188WRITE8_MEMBER(mikro80_state::mikro80_keyboard_w)
9289{
93   i8255_device *ppi = machine().device<i8255_device>("ppi8255");
94   ppi->write(space, offset^0x03, data);
90   m_ppi8255->write(space, offset^0x03, data);
9591}
9692
9793
9894WRITE8_MEMBER(mikro80_state::mikro80_tape_w)
9995{
100   machine().device<cassette_image_device>(CASSETTE_TAG)->output(data & 0x01 ? 1 : -1);
96   m_cassette->output(data & 0x01 ? 1 : -1);
10197}
10298
10399
104100READ8_MEMBER(mikro80_state::mikro80_tape_r)
105101{
106   double level = machine().device<cassette_image_device>(CASSETTE_TAG)->input();
102   double level = m_cassette->input();
107103   if (level <  0) {
108104         return 0x00;
109105   }
trunk/src/mess/includes/mikro80.h
r20907r20908
88#define MIKRO80_H_
99
1010#include "machine/i8255.h"
11#include "imagedev/cassette.h"
1112
1213class mikro80_state : public driver_device
1314{
1415public:
1516   mikro80_state(const machine_config &mconfig, device_type type, const char *tag)
16      : driver_device(mconfig, type, tag) ,
17      m_cursor_ram(*this, "cursor_ram"),
18      m_video_ram(*this, "video_ram"){ }
17      : driver_device(mconfig, type, tag)
18      , m_cursor_ram(*this, "cursor_ram")
19      , m_video_ram(*this, "video_ram")
20      , m_ppi8255(*this, "ppi8255")
21      , m_cassette(*this, CASSETTE_TAG)
22      , m_region_maincpu(*this, "maincpu")
23      , m_region_gfx1(*this, "gfx1")
24      , m_bank1(*this, "bank1")
25      , m_io_line0(*this, "LINE0")
26      , m_io_line1(*this, "LINE1")
27      , m_io_line2(*this, "LINE2")
28      , m_io_line3(*this, "LINE3")
29      , m_io_line4(*this, "LINE4")
30      , m_io_line5(*this, "LINE5")
31      , m_io_line6(*this, "LINE6")
32      , m_io_line7(*this, "LINE7")
33      , m_io_line8(*this, "LINE8")
34   { }
1935
2036   required_shared_ptr<UINT8> m_cursor_ram;
2137   required_shared_ptr<UINT8> m_video_ram;
r20907r20908
3551   virtual void video_start();
3652   UINT32 screen_update_mikro80(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
3753   TIMER_CALLBACK_MEMBER(mikro80_reset);
54
55protected:
56   required_device<i8255_device> m_ppi8255;
57   required_device<cassette_image_device> m_cassette;
58   required_memory_region m_region_maincpu;
59   required_memory_region m_region_gfx1;
60   required_memory_bank m_bank1;
61   required_ioport m_io_line0;
62   required_ioport m_io_line1;
63   required_ioport m_io_line2;
64   required_ioport m_io_line3;
65   required_ioport m_io_line4;
66   required_ioport m_io_line5;
67   required_ioport m_io_line6;
68   required_ioport m_io_line7;
69   required_ioport m_io_line8;
3870};
3971
4072
trunk/src/mess/video/mikro80.c
r20907r20908
1717
1818UINT32 mikro80_state::screen_update_mikro80(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
1919{
20   UINT8 *gfx = memregion("gfx1")->base();
20   UINT8 *gfx = m_region_gfx1->base();
2121   int x,y,b;
2222
2323   for(y = 0; y < 32*8; y++ )

Previous 199869 Revisions Next


© 1997-2024 The MAME Team