Previous 199869 Revisions Next

r20411 Tuesday 22nd January, 2013 at 23:22:41 UTC by Sandro Ronco
(MESS) Cleanup the HD44780 device. (nw)
[src/mess]mess.mak
[src/mess/drivers]alesis.c alphasma.c lcmate2.c mmodular.c pc2000.c psion.c ymmu100.c
[src/mess/includes]psion.h
[src/mess/video]hd44780.c hd44780.h psion.c

trunk/src/mess/includes/psion.h
r20410r20411
1414#include "video/hd44780.h"
1515#include "sound/beep.h"
1616
17#define MCFG_PSION_CUSTOM_LCDC_ADD( _tag , _config) \
18   MCFG_DEVICE_ADD( _tag, PSION_CUSTOM_LCDC, 0 ) \
19   MCFG_DEVICE_CONFIG(_config)
2017
21// ======================> psion_custom_lcdc
22
23class psion_custom_lcdc :   public hd44780_device
24{
25public:
26   // construction/destruction
27   psion_custom_lcdc(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
28
29   // hd44780_device overrides
30   virtual DECLARE_WRITE8_MEMBER(control_write);
31   virtual UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
32};
33
34
3518// ======================> psion_state
3619
3720class psion_state : public driver_device
r20410r20411
8669   virtual void palette_init();
8770   DECLARE_INPUT_CHANGED_MEMBER(psion_on);
8871   TIMER_DEVICE_CALLBACK_MEMBER(nmi_timer);
72   
73   static HD44780_PIXEL_UPDATE(lz_pixel_update);
8974};
9075
91// device type definition
92extern const device_type PSION_CUSTOM_LCDC;
93
9476#endif  // _PSION_H_
trunk/src/mess/video/psion.c
r20410r20411
1/***************************************************************************
2
3        Psion Organiser II LZ series custom LCD controller
4
5***************************************************************************/
6
7#include "emu.h"
8#include "includes/psion.h"
9
10// devices
11const device_type PSION_CUSTOM_LCDC = &device_creator<psion_custom_lcdc>;
12
13
14//**************************************************************************
15//  live device
16//**************************************************************************
17
18//-------------------------------------------------
19//  psion_custom_lcdc - constructor
20//-------------------------------------------------
21
22psion_custom_lcdc::psion_custom_lcdc(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
23   hd44780_device(mconfig, PSION_CUSTOM_LCDC, "Psion Custom LCD Controller", tag, owner, clock)
24{
25}
26
27
28//**************************************************************************
29//  device interface
30//**************************************************************************
31
32UINT32 psion_custom_lcdc::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
33{
34   assert(height*9 <= bitmap.height() && width*6 <= bitmap.width());
35
36   bitmap.fill(0, cliprect);
37
38   if (m_display_on)
39      for (int l=0; l<height; l++)
40         for (int i=0; i<width; i++)
41         {
42            static const UINT8 psion_display_layout[] =
43            {
44               0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
45               0x40, 0x41, 0x42, 0x43, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
46               0x04, 0x05, 0x06, 0x07, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
47               0x44, 0x45, 0x46, 0x47, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67
48            };
49
50            INT8 char_pos = psion_display_layout[l*width + i];
51
52            for (int y=0; y<8; y++)
53               for (int x=0; x<5; x++)
54                  if (m_ddram[char_pos] <= 0x10)
55                  {
56                     //draw CGRAM characters
57                     bitmap.pix16(l*9 + y, i*6 + x) = BIT(m_cgram[(m_ddram[char_pos]&0x07)*8+y], 4-x);
58                  }
59                  else
60                  {
61                     //draw CGROM characters
62                     if (region()->bytes() <= 0x800)
63                     {
64                        bitmap.pix16(l*9 + y, i*6 + x) = BIT(region()->u8(m_ddram[char_pos]*8+y), 4-x);
65                     }
66                     else
67                     {
68                        if(m_ddram[char_pos] < 0xe0)
69                           bitmap.pix16(l*9 + y, i*6 + x) = BIT(region()->u8(m_ddram[char_pos]*8+y), 4-x);
70                        else
71                           bitmap.pix16(l*9 + y, i*6 + x) = BIT(region()->u8(0x700+((m_ddram[char_pos]-0xe0)*11)+y), 4-x);
72                     }
73                  }
74
75            // if is the correct position draw cursor and blink
76            if (char_pos == m_cursor_pos)
77            {
78               //draw the cursor
79               if (m_cursor_on)
80                  for (int x=0; x<5; x++)
81                     bitmap.pix16(l*9 + 7, i * 6 + x) = 1;
82
83               if (!m_blink && m_blink_on)
84                  for (int y=0; y<7; y++)
85                     for (int x=0; x<5; x++)
86                        bitmap.pix16(l*9 + y, i * 6 + x) = 1;
87            }
88         }
89
90   return 0;
91}
92
93WRITE8_MEMBER(psion_custom_lcdc::control_write)
94{
95   if (BIT(data, 7)) // Set DDRAM Address
96   {
97      m_ac_mode = 0;
98      m_ac = data & 0x7f;
99      if (data != 0x81)
100         m_cursor_pos = m_ac;
101      set_busy_flag(37);
102   }
103   else
104      hd44780_device::control_write(space, offset, data);
105}
trunk/src/mess/video/hd44780.c
r20410r20411
33        Hitachi HD44780 LCD controller
44
55        TODO:
6        - 5x10 chars
76        - dump internal CGROM
87
9        HACKS:
10        - A00 10 bit chars are tacked onto recreated chrrom at $700 (until internal rom is dumped)
11        - A00/A02 drawing selected by sizeof romfile, A02 is $800, A00 is $860
12
138***************************************************************************/
149
1510#include "emu.h"
1611#include "video/hd44780.h"
1712
18// devices
13#define LOG          0
14
15//**************************************************************************
16//  DEVICE DEFINITIONS
17//**************************************************************************
18
1919const device_type HD44780 = &device_creator<hd44780_device>;
2020
21
2122//-------------------------------------------------
22//  device_config_complete - perform any
23//  operations now that the configuration is
24//  complete
23//  ROM( hd44780 )
2524//-------------------------------------------------
2625
27void hd44780_device::device_config_complete()
28{
29   // inherit a copy of the static data
30   const hd44780_interface *intf = reinterpret_cast<const hd44780_interface *>(static_config());
26ROM_START( hd44780 )
27   ROM_REGION( 0x0860, "cgrom", 0 )
28   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
29ROM_END
3130
32   if (intf != NULL)
33      *static_cast<hd44780_interface *>(this) = *intf;
3431
35   // or initialize to defaults if none provided
36   else
37   {
38      height = width = 0;
39      pixel_update_func = NULL;
40   }
41}
42
43
4432//**************************************************************************
4533//  live device
4634//**************************************************************************
r20410r20411
5038//-------------------------------------------------
5139
5240hd44780_device::hd44780_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
53   device_t(mconfig, HD44780, "HD44780", tag, owner, clock)
41   device_t(mconfig, HD44780, "HD44780", tag, owner, clock),
42   m_pixel_update_func(NULL)
5443{
44   m_shortname = "hd44780";
5545}
5646
5747hd44780_device::hd44780_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock) :
58   device_t(mconfig, type, name, tag, owner, clock)
48   device_t(mconfig, type, name, tag, owner, clock),
49   m_pixel_update_func(NULL)
5950{
51   m_shortname = "hd44780";
6052}
6153
6254//-------------------------------------------------
55//  rom_region - device-specific ROM region
56//-------------------------------------------------
57
58const rom_entry *hd44780_device::device_rom_region() const
59{
60   return ROM_NAME( hd44780 );
61}
62
63//-------------------------------------------------
6364//  device_start - device-specific startup
6465//-------------------------------------------------
6566
6667void hd44780_device::device_start()
6768{
68   m_busy_timer = timer_alloc(BUSY_TIMER);
69   m_blink_timer = timer_alloc(BLINKING_TIMER);
69   if (region())
70      m_cgrom = (UINT8*)(*region());
71   else
72      m_cgrom = (UINT8*)(*memregion("cgrom"));
7073
74   m_busy_timer = timer_alloc(TIMER_BUSY);
75   m_blink_timer = timer_alloc(TIMER_BLINKING);
7176   m_blink_timer->adjust(attotime::from_msec(409), 0, attotime::from_msec(409));
7277
73   save_item( NAME(m_ac));
74   save_item( NAME(m_ac_mode));
75   save_item( NAME(m_data_bus_flag));
76   save_item( NAME(m_cursor_pos));
77   save_item( NAME(m_display_on));
78   save_item( NAME(m_cursor_on));
79   save_item( NAME(m_shift_on));
80   save_item( NAME(m_blink_on));
81   save_item( NAME(m_direction));
82   save_item( NAME(m_data_len));
83   save_item( NAME(m_num_line));
84   save_item( NAME(m_char_size));
85   save_item( NAME(m_disp_shift));
86   save_item( NAME(m_blink));
87   save_item( NAME(m_ddram));
88   save_item( NAME(m_cgram));
89   save_item( NAME(m_nibble));
90   save_item( NAME(m_data_latch));
78   // state saving
79   save_item(NAME(m_busy_flag));
80   save_item(NAME(m_ac));
81   save_item(NAME(m_dr));
82   save_item(NAME(m_ir));
83   save_item(NAME(m_active_ram));
84   save_item(NAME(m_display_on));
85   save_item(NAME(m_cursor_on));
86   save_item(NAME(m_shift_on));
87   save_item(NAME(m_blink_on));
88   save_item(NAME(m_direction));
89   save_item(NAME(m_data_len));
90   save_item(NAME(m_num_line));
91   save_item(NAME(m_char_size));
92   save_item(NAME(m_disp_shift));
93   save_item(NAME(m_blink));
94   save_item(NAME(m_ddram));
95   save_item(NAME(m_cgram));
96   save_item(NAME(m_nibble));
9197}
9298
93
9499//-------------------------------------------------
95100//  device_reset - device-specific reset
96101//-------------------------------------------------
97102
98103void hd44780_device::device_reset()
99104{
100   m_busy_flag = 0;
101
102105   memset(m_ddram, 0x20, sizeof(m_ddram)); // can't use 0 here as it would show CGRAM instead of blank space on a soft reset
103106   memset(m_cgram, 0, sizeof(m_cgram));
104   m_ac = 0;
105   m_ac_mode = 0;
106   m_data_bus_flag = 0;
107   m_cursor_pos = 0;
108   m_display_on = 0;
109   m_cursor_on = 0;
110   m_shift_on = 0;
111   m_blink_on = 0;
112   m_direction = 1;
113   m_data_len = -1; // must not be 0 or 1 on intial start to pick up first 4/8 bit mode change
114   m_num_line = 0;
115   m_char_size = 0;
107
108   m_ac         = 0;
109   m_dr         = 0;
110   m_ir         = 0;
111   m_active_ram = DDRAM;
112   m_display_on = false;
113   m_cursor_on  = false;
114   m_blink_on   = false;
115   m_shift_on   = false;
116   m_direction  = 1;
117   m_data_len   = 8;
118   m_num_line   = 1;
119   m_char_size  = 8;
116120   m_disp_shift = 0;
117   m_blink = 0;
118   m_nibble = false;
119   m_data_latch = 0;
121   m_blink      = false;
122   m_nibble     = false;
123   m_first_cmd  = true;
120124
121125   set_busy_flag(1520);
122126}
r20410r20411
125129//-------------------------------------------------
126130//  device_timer - handler timer events
127131//-------------------------------------------------
132
128133void hd44780_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
129134{
130135   switch(id)
131136   {
132      case BUSY_TIMER:
133         m_busy_flag = 0;
137      case TIMER_BUSY:
138         m_busy_flag = false;
134139         break;
135140
136      case BLINKING_TIMER:
141      case TIMER_BLINKING:
137142         m_blink = !m_blink;
138143         break;
139144   }
140145}
141146
147
148//**************************************************************************
149//  HELPERS
150//**************************************************************************
151
142152void hd44780_device::set_busy_flag(UINT16 usec)
143153{
144   m_busy_flag = 1;
145
154   m_busy_flag = true;
146155   m_busy_timer->adjust( attotime::from_usec( usec ) );
147156}
148157
158void hd44780_device::update_ac(int direction)
159{
160   if (m_active_ram == DDRAM)
161   {
162      if(direction == 1)
163      {
164         if(m_num_line == 2 && m_ac == 0x27)
165            m_ac = 0x40;
166         else if((m_num_line == 2 && m_ac == 0x67) || (m_num_line == 1 && m_ac == 0x4f))
167            m_ac = 0x00;
168         else
169            m_ac = (m_ac + direction) & 0x7f;
170      }
171      else
172      {
173         if(m_num_line == 2 && m_ac == 0x00)
174            m_ac = 0x67;
175         else if(m_num_line == 1 && m_ac == 0x00)
176            m_ac = 0x4f;
177         else if(m_num_line == 2 && m_ac == 0x40)
178            m_ac = 0x27;
179         else
180            m_ac = (m_ac + direction) & 0x7f;
181      }
182   }
183   else
184   {
185      m_ac = (m_ac + direction) & 0x3f;
186   }
187}
188
149189inline void hd44780_device::pixel_update(bitmap_ind16 &bitmap, UINT8 line, UINT8 pos, UINT8 y, UINT8 x, int state)
150190{
151   if (pixel_update_func != NULL)
152      pixel_update_func(*this, bitmap, line, pos, y, x, state);
191   if (m_pixel_update_func != NULL)
192   {
193      m_pixel_update_func(*this, bitmap, line, pos, y, x, state);
194   }
153195   else
154      bitmap.pix16(line*9 + y, pos*6 + x) = state;
196   {
197      if (m_lines <= 2)
198      {
199         if (pos < m_chars)
200            bitmap.pix16(line * (m_char_size+1) + y, pos * 6 + x) = state;
201      }
202      else if (m_lines <= 4)
203      {
204         if (pos < m_chars*2)
205         {
206            if (pos >= m_chars)
207            {
208               line += 2;
209               pos -= m_chars;
210            }
211
212            if (line < m_lines)
213               bitmap.pix16(line * (m_char_size+1) + y, pos * 6 + x) = state;
214         }
215      }
216      else
217      {
218         fatalerror("%s: use a custom callback for this LCD configuration (%d x %d)\n", tag(), m_lines, m_chars);
219      }
220   }
155221}
156222
223
157224//**************************************************************************
158225//  device interface
159226//**************************************************************************
160227
161228UINT32 hd44780_device::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
162229{
163   assert(height*9 <= bitmap.height() && width*6 <= bitmap.width());
164
165230   bitmap.fill(0, cliprect);
166231
167232   if (m_display_on)
168      for (int l=0; l<height; l++)
169         for (int i=0; i<width; i++)
233   {
234      UINT8 line_size = 80 / m_num_line;
235
236      for (int line=0; line<m_num_line; line++)
237      {
238         UINT8 line_base = line * 0x40;
239
240         for (int pos=0; pos<line_size; pos++)
170241         {
171            UINT8 line_base = l * 0x40;
172            UINT8 line_size = (m_num_line) ? 40 : 80;
173            INT8 char_pos = line_base + i;
242            INT16 char_pos = line_base + pos + m_disp_shift;
174243
175            char_pos += m_disp_shift;
176
177244            while (char_pos < 0 || (char_pos - line_base) >= line_size)
178245            {
179246               if (char_pos < 0)
r20410r20411
182249                  char_pos -= line_size;
183250            }
184251
185            for (int y=0; y<8; y++)
252            int char_base = 0;
253            if (m_ddram[char_pos] < 0x10)
254            {
255               // draw CGRAM characters
256               if (m_char_size == 8)
257                  char_base = (m_ddram[char_pos] & 0x07) * 8;
258               else
259                  char_base = (m_ddram[char_pos] & 0x03) * 16;
260            }
261            else
262            {
263               // draw CGROM characters
264               if (m_ddram[char_pos] < 0xe0)
265                  char_base = m_ddram[char_pos] * 8;
266               else
267                  char_base = 0x700 + ((m_ddram[char_pos] - 0xe0) * 11);
268            }
269
270            for (int y=0; y<m_char_size; y++)
271            {
272               UINT8 * charset = (m_ddram[char_pos] < 0x10) ? m_cgram : m_cgrom;
273
186274               for (int x=0; x<5; x++)
187                  if (m_ddram[char_pos] <= 0x10)
188                  {
189                     //draw CGRAM characters
190                     pixel_update(bitmap, l, i, y, x, BIT(m_cgram[(m_ddram[char_pos]&0x07)*8+y], 4-x));
191                  }
275               {
276                  if (m_ddram[char_pos] >= 0xe0 || y < 8)
277                     pixel_update(bitmap, line, pos, y, x, BIT(charset[char_base + y], 4 - x));
192278                  else
193                  {
194                     //draw CGROM characters
195                     if (region()->bytes() <= 0x800)
196                     {
197                        pixel_update(bitmap, l, i, y, x, BIT(region()->u8(m_ddram[char_pos]*8+y), 4-x));
198                     }
199                     else
200                     {
201                        if(m_ddram[char_pos] < 0xe0)
202                           pixel_update(bitmap, l, i, y, x, BIT(region()->u8(m_ddram[char_pos]*8+y), 4-x));
203                        else
204                           pixel_update(bitmap, l, i, y, x, BIT(region()->u8(0x700+((m_ddram[char_pos]-0xe0)*11)+y), 4-x));
205                     }
206                  }
279                     pixel_update(bitmap, line, pos, y, x, 0);
280               }
281            }
207282
208283            // if is the correct position draw cursor and blink
209            if (char_pos == m_cursor_pos)
284            if (char_pos == m_ac)
210285            {
211               //draw the cursor
286               // draw the cursor
212287               if (m_cursor_on)
213288                  for (int x=0; x<5; x++)
214                     pixel_update(bitmap, l, i, 7, x, 1);
289                     pixel_update(bitmap, line, pos, m_char_size - 1, x, 1);
215290
216291               if (!m_blink && m_blink_on)
217                  for (int y=0; y<7; y++)
292                  for (int y=0; y<(m_char_size - 1); y++)
218293                     for (int x=0; x<5; x++)
219                        pixel_update(bitmap, l, i, y, x, 1);
294                        pixel_update(bitmap, line, pos, y, x, 1);
220295            }
221296         }
297      }
298   }
222299
223300   return 0;
224301}
225302
303READ8_MEMBER(hd44780_device::read)
304{
305   switch(offset & 0x01)
306   {
307      case 0: return control_read(space, 0);
308      case 1: return data_read(space, 0);
309   }
310
311   return 0;
312}
313
314WRITE8_MEMBER(hd44780_device::write)
315{
316   switch(offset & 0x01)
317   {
318      case 0: control_write(space, 0, data);  break;
319      case 1: data_write(space, 0, data);     break;
320   }
321}
322
226323WRITE8_MEMBER(hd44780_device::control_write)
227324{
228   if (m_data_len == 0)
325   if (m_data_len == 4)
229326   {
230327      m_nibble = !m_nibble;
231328
232329      if (m_nibble)
233330      {
234         m_data_latch = data & 0xf0;
331         m_ir = data & 0xf0;
235332         return;
236333      }
237334      else
238335      {
239         m_data_latch |= ((data>>4) & 0x0f);
336         m_ir |= ((data>>4) & 0x0f);
240337      }
241338   }
242339   else
243340   {
244      m_data_latch = data;
341      m_ir = data;
245342   }
246343
247   if (BIT(m_data_latch, 7)) // Set DDRAM Address
344   if (BIT(m_ir, 7))           // set DDRAM address
248345   {
249      m_ac_mode = 0;
250      m_ac = m_data_latch & 0x7f;
251      m_cursor_pos = m_ac;
346      m_active_ram = DDRAM;
347      m_ac = m_ir & 0x7f;
252348      set_busy_flag(37);
349
350      if (LOG) logerror("HD44780 '%s': set DDRAM address %x\n", tag(), m_ac);
253351   }
254   else if (BIT(m_data_latch, 6)) // Set CGRAM Address
352   else if (BIT(m_ir, 6))      // set CGRAM address
255353   {
256      m_ac_mode = 1;
257      m_ac = m_data_latch & 0x3f;
354      m_active_ram = CGRAM;
355      m_ac = m_ir & 0x3f;
258356      set_busy_flag(37);
357
358      if (LOG) logerror("HD44780 '%s': set CGRAM address %x\n", tag(), m_ac);
259359   }
260   else if (BIT(m_data_latch, 5)) // Function Set
360   else if (BIT(m_ir, 5))      // function set
261361   {
262      // datasheet says you can't change char size after first function set without altering 4/8 bit mode
263      if (BIT(m_data_latch, 4) != m_data_len)
264         m_char_size = BIT(m_data_latch, 2);
362      if (!m_first_cmd && m_data_len == (BIT(m_ir, 4) ? 8 : 4) && (m_char_size != (BIT(m_ir, 2) ? 10 : 8) || m_num_line != (BIT(m_ir, 3) + 1)))
363      {
364         logerror("HD44780 '%s': function set cannot be executed after other instructions unless the interface data length is changed\n", tag());
365         return;
366      }
265367
266      m_data_len = BIT(m_data_latch, 4);
267      m_num_line = BIT(m_data_latch, 3);
368      m_char_size = BIT(m_ir, 2) ? 10 : 8;
369      m_data_len  = BIT(m_ir, 4) ? 8 : 4;
370      m_num_line  = BIT(m_ir, 3) + 1;
268371      set_busy_flag(37);
372
373      if (LOG) logerror("HD44780 '%s': char size 5x%d, data len %d, lines %d\n", tag(), m_char_size, m_data_len, m_num_line);
374      return;
269375   }
270   else if (BIT(m_data_latch, 4)) // Cursor or display shift
376   else if (BIT(m_ir, 4))      // cursor or display shift
271377   {
272      UINT8 direct = (BIT(m_data_latch, 2)) ? +1 : -1;
378      int direct = (BIT(m_ir, 2)) ? +1 : -1;
273379
274      if (BIT(m_data_latch, 3))
380      if (LOG) logerror("HD44780 '%s': %s shift %d\n", tag(), BIT(m_ir, 3) ? "display" : "cursor",  direct);
381
382      if (BIT(m_ir, 3))
275383         m_disp_shift += direct;
276384      else
277      {
278         m_ac += direct;
279         m_cursor_pos += direct;
280      }
385         update_ac(direct);
281386
282387      set_busy_flag(37);
283388   }
284   else if (BIT(m_data_latch, 3)) // Display on/off Control
389   else if (BIT(m_ir, 3))      // display on/off control
285390   {
286      m_display_on = BIT(m_data_latch, 2);
287      m_cursor_on = BIT(m_data_latch, 1);
288      m_blink_on = BIT(m_data_latch, 0);
391      m_display_on = BIT(m_ir, 2);
392      m_cursor_on  = BIT(m_ir, 1);
393      m_blink_on   = BIT(m_ir, 0);
394      set_busy_flag(37);
289395
290      set_busy_flag(37);
396      if (LOG) logerror("HD44780 '%s': display %d, cursor %d, blink %d\n", tag(), m_display_on, m_cursor_on, m_blink_on);
291397   }
292   else if (BIT(m_data_latch, 2)) // Entry Mode set
398   else if (BIT(m_ir, 2))      // entry mode set
293399   {
294      m_direction = (BIT(m_data_latch, 1)) ? +1 : -1;
400      m_direction = (BIT(m_ir, 1)) ? +1 : -1;
401      m_shift_on  = BIT(m_ir, 0);
402      set_busy_flag(37);
295403
296      m_shift_on = BIT(m_data_latch, 0);
297
298      set_busy_flag(37);
404      if (LOG) logerror("HD44780 '%s': entry mode set: direction %d, shift %d\n", tag(), m_direction, m_shift_on);
299405   }
300   else if (BIT(m_data_latch, 1)) // return home
406   else if (BIT(m_ir, 1))      // return home
301407   {
302      m_ac = 0;
303      m_cursor_pos = 0;
304      m_ac_mode = 0; // datasheet does not specifically say this but mephisto won't run without it
305      m_direction = 1;
408      if (LOG) logerror("HD44780 '%s': return home\n", tag());
409
410      m_ac         = 0;
411      m_active_ram = DDRAM;
412      m_direction  = 1;
306413      m_disp_shift = 0;
307414      set_busy_flag(1520);
308415   }
309   else if (BIT(m_data_latch, 0)) // clear display
416   else if (BIT(m_ir, 0))      // clear display
310417   {
311      m_ac = 0;
312      m_cursor_pos = 0;
313      m_ac_mode = 0;
314      m_direction = 1;
418      if (LOG) logerror("HD44780 '%s': clear display\n", tag());
419
420      m_ac         = 0;
421      m_active_ram = DDRAM;
422      m_direction  = 1;
315423      m_disp_shift = 0;
316424      memset(m_ddram, 0x20, sizeof(m_ddram));
317425      set_busy_flag(1520);
318426   }
427
428   m_first_cmd = false;
319429}
320430
321431READ8_MEMBER(hd44780_device::control_read)
322432{
323   if (m_data_len == 0)
433   if (m_data_len == 4)
324434   {
325      m_nibble = !m_nibble;
435      if (!space.debugger_access())
436         m_nibble = !m_nibble;
326437
327438      if (m_nibble)
328         return (m_busy_flag << 7) | (m_ac & 0x70);
439         return (m_busy_flag ? 0x80 : 0) | (m_ac & 0x70);
329440      else
330441         return (m_ac<<4) & 0xf0;
331442   }
332443   else
333444   {
334      return (m_busy_flag << 7) | (m_ac & 0x7f);
445      return (m_busy_flag ? 0x80 : 0) | (m_ac & 0x7f);
335446   }
336447}
337448
338void hd44780_device::update_ac(void) // m_data_bus_flag was left as global so old savestates will work
339{
340   int new_ac = m_ac + m_direction;
341   m_ac = (new_ac < 0) ? 0 : ((new_ac > 0x7f) ? 0x7f : new_ac);
342   if (m_ac_mode == 0)
343   {
344      m_cursor_pos = m_ac;
345      // display is shifted only after a write
346      if (m_shift_on && m_data_bus_flag == 1) m_disp_shift += m_direction;
347   }
348   m_data_bus_flag = 0;
349}
350
351
352449WRITE8_MEMBER(hd44780_device::data_write)
353450{
354451   if (m_busy_flag)
355452   {
356      logerror("HD44780 '%s' Ignoring data write %02x due of busy flag\n", tag(), data);
453      logerror("HD44780 '%s': Ignoring data write %02x due of busy flag\n", tag(), data);
357454      return;
358455   }
359456
360   if (m_data_len == 0)
457   if (m_data_len == 4)
361458   {
362459      m_nibble = !m_nibble;
363460
364461      if (m_nibble)
365462      {
366         m_data_latch = data & 0xf0;
463         m_dr = data & 0xf0;
367464         return;
368465      }
369466      else
370467      {
371         m_data_latch |= ((data>>4) & 0x0f);
468         m_dr |= ((data>>4) & 0x0f);
372469      }
373470   }
374471   else
375472   {
376      m_data_latch = data;
473      m_dr = data;
377474   }
378475
379   if (m_ac_mode == 0)
380      m_ddram[m_ac] = m_data_latch;
476   if (LOG) logerror("HD44780 '%s': %sRAM write %x %x '%c'\n", tag(), m_active_ram == DDRAM ? "DD" : "CG", m_ac, m_dr, isprint(m_dr) ? m_dr : '.');
477
478   if (m_active_ram == DDRAM)
479      m_ddram[m_ac] = m_dr;
381480   else
382      m_cgram[m_ac] = m_data_latch;
481      m_cgram[m_ac] = m_dr;
383482
384   m_data_bus_flag = 1;
385   update_ac();
483   update_ac(m_direction);
484   if (m_shift_on)
485      m_disp_shift += m_direction;
386486   set_busy_flag(41);
387487}
388488
389489READ8_MEMBER(hd44780_device::data_read)
390490{
391   UINT8 data;
491   UINT8 data = (m_active_ram == DDRAM) ? m_ddram[m_ac] : m_cgram[m_ac];
392492
393   if (m_ac_mode == 0)
394      data = m_ddram[m_ac];
395   else
396      data = m_cgram[m_ac];
493   if (LOG) logerror("HD44780 '%s': %sRAM read %x %c\n", tag(), m_active_ram == DDRAM ? "DD" : "CG", m_ac, data);
397494
398   if (m_data_len == 0)
495   if (m_data_len == 4)
399496   {
400      m_nibble = !m_nibble;
497      if (!space.debugger_access())
498         m_nibble = !m_nibble;
401499
402500      if (m_nibble)
403501         return data & 0xf0;
r20410r20411
405503         data = (data<<4) & 0xf0;
406504   }
407505
408   m_data_bus_flag = 2;
409   update_ac();
506   if (!space.debugger_access())
507   {
508      update_ac(m_direction);
509      set_busy_flag(41);
510   }
410511
411   set_busy_flag(41);
412
413512   return data;
414513}
trunk/src/mess/video/hd44780.h
r20410r20411
1010#define __HD44780_H__
1111
1212
13#define MCFG_HD44780_ADD( _tag , _config) \
14   MCFG_DEVICE_ADD( _tag, HD44780, 0 ) \
15   MCFG_DEVICE_CONFIG(_config)
13#define MCFG_HD44780_ADD( _tag ) \
14   MCFG_DEVICE_ADD( _tag, HD44780, 0 )
1615
17#define MCFG_HD44780_REPLACE( _tag , _config) \
18   MCFG_DEVICE_REPLACE( _tag, HD44780, 0 ) \
19   MCFG_DEVICE_CONFIG(_config)
16#define MCFG_HD44780_LCD_SIZE(_lines, _chars) \
17   hd44780_device::static_set_lcd_size(*device, _lines, _chars);
2018
19#define MCFG_HD44780_PIXEL_UPDATE_CB(_cb) \
20   hd44780_device::static_set_pixel_update_cb(*device, _cb);
21
2122//**************************************************************************
2223//  TYPE DEFINITIONS
2324//**************************************************************************
2425
25#define HD44780_INTERFACE(name) \
26   const hd44780_interface (name) =
27
2826typedef void (*hd44780_pixel_update_func)(device_t &device, bitmap_ind16 &bitmap, UINT8 line, UINT8 pos, UINT8 y, UINT8 x, int state);
2927#define HD44780_PIXEL_UPDATE(name) void name(device_t &device, bitmap_ind16 &bitmap, UINT8 line, UINT8 pos, UINT8 y, UINT8 x, int state)
3028
31// ======================> hd44780_interface
3229
33struct hd44780_interface
34{
35   UINT8 height;           // number of lines
36   UINT8 width;            // chars for line
37   hd44780_pixel_update_func pixel_update_func;    // pixel update callback
38};
39
4030// ======================> hd44780_device
4131
42class hd44780_device :  public device_t,
43                  public hd44780_interface
32class hd44780_device :  public device_t
4433{
4534public:
4635   // construction/destruction
4736   hd44780_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
4837   hd44780_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock);
4938
39   // static configuration helpers
40   static void static_set_lcd_size(device_t &device, int _lines, int _chars) { hd44780_device &dev=downcast<hd44780_device &>(device); dev.m_lines = _lines; dev.m_chars = _chars; }
41   static void static_set_pixel_update_cb(device_t &device, hd44780_pixel_update_func _cb) { downcast<hd44780_device &>(device).m_pixel_update_func = _cb; }
42
5043   // device interface
44   virtual DECLARE_WRITE8_MEMBER(write);
45   virtual DECLARE_READ8_MEMBER(read);
5146   virtual DECLARE_WRITE8_MEMBER(control_write);
5247   virtual DECLARE_READ8_MEMBER(control_read);
5348   virtual DECLARE_WRITE8_MEMBER(data_write);
5449   virtual DECLARE_READ8_MEMBER(data_read);
55
5650   virtual UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
5751
5852protected:
r20410r20411
6054   virtual void device_start();
6155   virtual void device_reset();
6256   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
63   virtual void device_config_complete();
6457
65protected:
58   // optional information overrides
59   const rom_entry *device_rom_region() const;
60
61private:
6662   // internal helper
6763   void set_busy_flag(UINT16 usec);
68   void update_ac(void);
64   void update_ac(int direction);
6965   void pixel_update(bitmap_ind16 &bitmap, UINT8 line, UINT8 pos, UINT8 y, UINT8 x, int state);
66
7067   // internal state
71   static const device_timer_id BUSY_TIMER = 0;
72   static const device_timer_id BLINKING_TIMER = 1;
68   static const device_timer_id TIMER_BUSY = 0;
69   static const device_timer_id TIMER_BLINKING = 1;
7370
74   emu_timer *m_blink_timer;
75   emu_timer *m_busy_timer;
71   emu_timer * m_blink_timer;
72   emu_timer * m_busy_timer;
7673
77   UINT8 m_busy_flag;
74   UINT8       m_lines;          // number of lines
75   UINT8       m_chars;          // chars for line
76   hd44780_pixel_update_func m_pixel_update_func; // pixel update callback
7877
79   UINT8 m_ddram[0x80];    //internal display data RAM
80   UINT8 m_cgram[0x40];    //internal chargen RAM
78   bool        m_busy_flag;      // busy flag
79   UINT8       m_ddram[0x80];    // internal display data RAM
80   UINT8       m_cgram[0x40];    // internal chargen RAM
81   UINT8 *     m_cgrom;          // internal chargen ROM
82   INT8        m_ac;             // address counter
83   UINT8       m_dr;             // data register
84   UINT8       m_ir;             // instruction register
85   UINT8       m_active_ram;     // DDRAM or CGRAM
86   bool        m_display_on;     // display on/off
87   bool        m_cursor_on;      // cursor on/off
88   bool        m_blink_on;       // blink on/off
89   bool        m_shift_on;       // shift on/off
90   INT8        m_disp_shift;     // display shift
91   INT8        m_direction;      // auto increment/decrement
92   UINT8       m_data_len;       // interface data length 4 or 8 bit
93   UINT8       m_num_line;       // number of lines
94   UINT8       m_char_size;      // char size 5x8 or 5x10
95   bool        m_blink;
96   bool        m_first_cmd;
97   bool        m_nibble;
8198
82   INT8 m_ac;              //address counter
83   UINT8 m_ac_mode;        //0=DDRAM 1=CGRAM
84   UINT8 m_data_bus_flag;  //0=none 1=write 2=read
85
86   INT8 m_cursor_pos;      //cursor position
87   UINT8 m_display_on;     //display on/off
88   UINT8 m_cursor_on;      //cursor on/off
89   UINT8 m_blink_on;       //blink on/off
90   UINT8 m_shift_on;       //shift  on/off
91   INT8 m_disp_shift;      //display shift
92
93   INT8 m_direction;       //auto increment/decrement
94   UINT8 m_data_len;       //interface data length 4 or 8 bit
95   UINT8 m_num_line;       //number of lines
96   UINT8 m_char_size;      //char size 5x8 or 5x10
97
98   UINT8 m_blink;
99
100   bool m_nibble;
101   UINT8 m_data_latch;
99   enum        { DDRAM, CGRAM };
102100};
103101
104102// device type definition
trunk/src/mess/drivers/alesis.c
r20410r20411
6868
6969WRITE8_MEMBER( alesis_state::sr16_lcd_w )
7070{
71   if (m_kb_matrix & 0x80)
72      m_lcdc->data_write(space, offset, data);
73   else
74      m_lcdc->control_write(space, offset, data);
71   m_lcdc->write(space, BIT(m_kb_matrix,7), data);
7572}
7673
7774static ADDRESS_MAP_START(hr16_mem, AS_PROGRAM, 8, alesis_state)
r20410r20411
8481   AM_RANGE(0x0000, 0x0000) AM_READ(kb_r)
8582   AM_RANGE(0x0002, 0x0002) AM_DEVWRITE("dm3ag", alesis_dm3ag_device, write)
8683   AM_RANGE(0x0004, 0x0004) AM_WRITE(led_w)
87   AM_RANGE(0x0006, 0x0006) AM_DEVREADWRITE("hd44780", hd44780_device, control_read, control_write)
88   AM_RANGE(0x0007, 0x0007) AM_DEVREADWRITE("hd44780", hd44780_device, data_read, data_write)
84   AM_RANGE(0x0006, 0x0007) AM_DEVREADWRITE("hd44780", hd44780_device, read, write)
8985   AM_RANGE(0x0008, 0x0008) AM_WRITE(kb_matrix_w)
9086   AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_READ_PORT("SELECT")   AM_WRITENOP
9187   AM_RANGE(MCS51_PORT_P2, MCS51_PORT_P2) AM_WRITENOP
r20410r20411
234230   memset(m_lcd_digits, 0, sizeof(m_lcd_digits));
235231}
236232
237static HD44780_INTERFACE( hr16_display )
238{
239   2,                  // number of lines
240   16,                 // chars for line
241   NULL                // pixel update callback
242};
243233
244234static HD44780_PIXEL_UPDATE(sr16_pixel_update)
245235{
246236   alesis_state *driv_state = device.machine().driver_data<alesis_state>();
247237
248   if (line == 1 && pos >= 6)  // last 2 characters of the second line are used to control the LCD symbols
238   if (line == 1 && pos >= 6 && pos < 8)  // last 2 characters of the second line are used to control the LCD symbols
249239      driv_state->update_lcd_symbols(bitmap, pos, y, x, state);
250   else
240   else if (pos < 8)
251241      bitmap.pix16(line*9 + y, pos*6 + x) = state;
252242}
253243
254static HD44780_INTERFACE( sr16_display )
255{
256   2,                  // number of lines
257   8,                  // chars for line
258   sr16_pixel_update   // pixel update callback
259};
260
261244static const cassette_interface hr16_cassette_interface =
262245{
263246   cassette_default_formats,
r20410r20411
286269
287270   MCFG_CASSETTE_ADD( CASSETTE_TAG, hr16_cassette_interface )
288271
289   MCFG_HD44780_ADD("hd44780", hr16_display)
272   MCFG_HD44780_ADD("hd44780")
273   MCFG_HD44780_LCD_SIZE(2, 16)
290274
291275   /* sound hardware */
292276   MCFG_ALESIS_DM3AG_ADD("dm3ag", XTAL_12MHz/2)
r20410r20411
308292
309293   MCFG_PALETTE_INIT(black_and_white)
310294
311   MCFG_HD44780_REPLACE("hd44780", sr16_display)
295   MCFG_DEVICE_MODIFY("hd44780")
296   MCFG_HD44780_LCD_SIZE(2, 8)
297   MCFG_HD44780_PIXEL_UPDATE_CB(sr16_pixel_update)
312298MACHINE_CONFIG_END
313299
314300/* ROM definition */
r20410r20411
329315   ROM_REGION( 0x100000, "dm3ag", 0 )
330316   ROM_LOAD( "2-27-0004.u16", 0x00000, 0x80000, CRC(8e103536) SHA1(092e1cf649fbef171cfaf91e20707d89998b7a1e))
331317   ROM_LOAD( "2-27-0003.u15", 0x80000, 0x80000, CRC(82e9b78c) SHA1(89728cb38ae172b5e347a03018617c94a087dce0))
332
333   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
334   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
335318ROM_END
336319
337320ROM_START( hr16b )
r20410r20411
344327   ROM_REGION( 0x100000, "dm3ag", 0 )
345328   ROM_LOAD( "2-27-0008.u16", 0x00000, 0x80000, CRC(11ca930e) SHA1(2f57fdd02f9b2146a551370a74cab1fa800145ab))
346329   ROM_LOAD( "2-27-0007.u15", 0x80000, 0x80000, CRC(319746db) SHA1(46b32a3ab2fbad67fb4566f607f578a2e9defd63))
347
348   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
349   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
350330ROM_END
351331
352332ROM_START( sr16 )
r20410r20411
357337   ROM_REGION( 0x100000, "dm3ag", ROMREGION_ERASEFF )
358338   ROM_LOAD( "sr16.u6", 0x00000, 0x80000, CRC(6da96987) SHA1(3ec8627d440bc73841e1408a19def09a8b0b77f7))
359339   ROM_LOAD( "sr16.u5", 0x80000, 0x80000, CRC(8bb25cfa) SHA1(273ad59d017b54a7e8d5e1ec61c8cd807a0e4af3))
360
361   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
362   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
363340ROM_END
364341
365342
trunk/src/mess/drivers/mmodular.c
r20410r20411
128128{
129129public:
130130   polgar_state(const machine_config &mconfig, device_type type, const char *tag)
131      : mboard_state(mconfig, type, tag) { }
131      : mboard_state(mconfig, type, tag),
132         m_lcdc(*this, "hd44780")
133      { }
132134
135   optional_device<hd44780_device> m_lcdc;
136
133137   UINT8 led_status;
134138   UINT8 lcd_char;
135139   //UINT8 led7;
r20410r20411
203207   void common_chess_start();
204208};
205209
206static HD44780_INTERFACE( chess_display )
207{
208   2,                  // number of lines
209   16,                 // chars for line
210   NULL                // pixel update callback
211};
212
213210static UINT8 convert_imputmask(UINT8 input)
214211{
215212   input^=0xff;
r20410r20411
240237   int i;
241238
242239   if (BIT(data,1)) {
243      hd44780_device *hd44780 = machine().device<hd44780_device>("hd44780");
244      if (BIT(data,0)) {
245         hd44780->data_write(space, 128, lcd_char);
246      } else {
247         hd44780->control_write(space, 128, lcd_char);
248      }
240      m_lcdc->write(space, BIT(data,0), lcd_char);
249241   }
250242
251243   if (BIT(data,2) || BIT(data,3)) beep_set_state(machine().device("beep"),1); else beep_set_state(machine().device("beep"),0);
r20410r20411
330322
331323   if (BIT(sfortea_latch,2))
332324   {
333      hd44780_device *hd44780 = machine().device<hd44780_device>("hd44780");
334325      if(BIT(sfortea_latch,0)) {
335         hd44780->data_write(space, 128, data);
326         m_lcdc->data_write(space, 0, data);
336327         logerror("LCD DTA = %02x\n",data);
337328      } else {
338329         if (BIT(data,7)) {
339330            if ((data & 0x7f) >= 0x40) data -= 56;  // adjust for 16x1 display as 2 sets of 8
340331         }
341         hd44780->control_write(space, 128, data);
332         m_lcdc->control_write(space, 0, data);
342333         logerror("LCD CMD = %02x\n",data);
343334      }
344335   }
r20410r20411
346337
347338WRITE8_MEMBER(polgar_state::write_LCD_academy)
348339{
349   hd44780_device *hd44780 = machine().device<hd44780_device>("hd44780");
350
351   if (offset) {
352      hd44780->data_write(space, 128, data);
353   } else {
354      hd44780->control_write(space, 128, data);
355   }
340   m_lcdc->write(space, offset & 1, data);
356341}
357342
358343//  AM_RANGE( 0x3a0000,0x3a0000 ) AM_READ(diablo68_write_LCD)
r20410r20411
391376
392377WRITE16_MEMBER(polgar_state::diablo68_write_LCD)
393378{
394   hd44780_device *hd44780 = machine().device<hd44780_device>("hd44780");
395379   data >>= 8;
396380   if (!(diablo68_3c0000 & 0x02)) {
397381      if (BIT(data,7)) {
398382         if ((data & 0x7f) >= 0x40) data -= 56;  // adjust for 16x1 display as 2 sets of 8
399383      }
400      hd44780->control_write(space, 128, data);
384      m_lcdc->control_write(space, 0, data);
401385//      logerror("Control %02x\n", data);
402386//      printf("Control %02x\n", data);
403387   } else {
404      hd44780->data_write(space, 128, data);
388      m_lcdc->data_write(space, 0, data);
405389//      printf("LCDdata %04x [%c]\n", data,data);
406390//      logerror("LCDdata %04x [%c]\n", data,data);
407391   }
r20410r20411
890874         if (BIT(data,0)) {
891875            logerror("Write LCD_DATA [%02x] [%c]\n",lcd32_char,lcd32_char);
892876//              printf("Write LCD_DATA [%02x] [%c]\n",lcd32_char,lcd32_char);
893            hd44780->data_write(space, 128, lcd32_char);
894877         } else {
895878            logerror("Write LCD_CTRL [%02x] [%c]\n",lcd32_char,lcd32_char);
896879//              printf("Write LCD_CTRL [%02x] [%c]\n",lcd32_char,lcd32_char);
897            hd44780->control_write(space, 128, lcd32_char);
898880         }
881
882         hd44780->write(space, BIT(data,0), lcd32_char);
899883      }
900884
901885   logerror("Write to IOENBL data: %08x\n",data);
r20410r20411
10871071};
10881072
10891073static GFXDECODE_START( chess_lcd )
1090   GFXDECODE_ENTRY( "hd44780", 0x0000, chess_charlayout, 0, 1 )
1074   GFXDECODE_ENTRY( "hd44780:cgrom", 0x0000, chess_charlayout, 0, 1 )
10911075GFXDECODE_END
10921076
10931077static ADDRESS_MAP_START(polgar_mem , AS_PROGRAM, 8, polgar_state )
r20410r20411
15191503   MCFG_QUANTUM_TIME(attotime::from_hz(60))
15201504   MCFG_GFXDECODE(chess_lcd)
15211505
1522   MCFG_HD44780_ADD("hd44780", chess_display)
1506   MCFG_HD44780_ADD("hd44780")
1507   MCFG_HD44780_LCD_SIZE(2, 16)
15231508
15241509   MCFG_DEFAULT_LAYOUT(layout_lcd)
15251510
r20410r20411
17131698ROM_START(polgar)
17141699   ROM_REGION(0x10000,"maincpu",0)
17151700   ROM_LOAD("polgar.bin", 0x0000, 0x10000, CRC(88d55c0f) SHA1(e86d088ec3ac68deaf90f6b3b97e3e31b1515913))
1716   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
1717   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
17181701ROM_END
17191702
17201703ROM_START(sfortea)
r20410r20411
17221705   ROM_LOAD("sfalo.bin", 0x0000, 0x8000, CRC(86e0230a) SHA1(0d6e18a17e636b8c7292c8f331349d361892d1a8))
17231706   ROM_LOAD("sfahi.bin", 0x8000, 0x8000, CRC(81c02746) SHA1(0bf68b68ade5a3263bead88da0a8965fc71483c1))
17241707   ROM_LOAD("sfabook.bin", 0x10000, 0x8000, CRC(3e42cf7c) SHA1(b2faa36a127e08e5755167a25ed4a07f12d62957))
1725   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
1726   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
17271708ROM_END
17281709
17291710ROM_START( alm16 )
17301711   ROM_REGION16_BE( 0x20000, "maincpu", 0 )
17311712   ROM_LOAD16_BYTE("alm16eve.bin", 0x00000, 0x10000,CRC(EE5B6EC4) SHA1(30920C1B9E16FFAE576DA5AFA0B56DA59ADA3DBB))
17321713   ROM_LOAD16_BYTE("alm16odd.bin" , 0x00001, 0x10000,CRC(D0BE4EE4) SHA1(D36C074802D2C9099CD44E75F9DE3FC7D1FD9908))
1733
1734   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
1735   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
1736
17371714ROM_END
17381715
17391716ROM_START( alm32 )
17401717   ROM_REGION32_BE( 0x20000, "maincpu", 0 )
17411718   ROM_LOAD("alm32.bin", 0x00000, 0x20000,CRC(38F4B305) SHA1(43459A057FF29248C74D656A036AC325202B9C15))
1742
1743   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
1744   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
1745
17461719ROM_END
17471720
17481721ROM_START(sforteb)
r20410r20411
17501723   ROM_LOAD("forte_b.lo", 0x0000, 0x8000, CRC(48bfe5d6) SHA1(323642686b6d2fb8db2b7d50c6cd431058078ce1))
17511724   ROM_LOAD("forte_b.hi1", 0x8000, 0x8000, CRC(9778ca2c) SHA1(d8b88b9768a1a9171c68cbb0892b817d68d78351))
17521725   ROM_LOAD("forte_b.hi0", 0x10000, 0x8000, CRC(bb07ad52) SHA1(30cf9005021ab2d7b03facdf2d3588bc94dc68a6))
1753   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
1754   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
17551726ROM_END
17561727
17571728ROM_START(sforteba)
r20410r20411
17591730   ROM_LOAD("forte b_l.bin", 0x0000, 0x8000, CRC(e3d194a1) SHA1(80457580d7c57e07895fd14bfdaf14b30952afca))
17601731   ROM_LOAD("forte b_h.bin", 0x8000, 0x8000, CRC(dd824be8) SHA1(cd8666b6b525887f9fc48a730b71ceabcf07f3b9))
17611732   ROM_LOAD("forte_b.hi0", 0x10000, 0x8000, BAD_DUMP CRC(bb07ad52) SHA1(30cf9005021ab2d7b03facdf2d3588bc94dc68a6))
1762   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
1763   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
17641733ROM_END
17651734
17661735ROM_START(sexpertb)
r20410r20411
17681737   ROM_LOAD("seb69u3.bin", 0x0000, 0x8000, CRC(92002eb6) SHA1(ed8ca16701e00b48fa55c856fa4a8c6613079c02))
17691738   ROM_LOAD("seb69u1.bin", 0x8000, 0x8000, CRC(814b4420) SHA1(c553e6a8c048dcc1cf48d410111a86e06b99d356))
17701739   ROM_LOAD("seb605u2.bin", 0x10000, 0x8000, CRC(bb07ad52) SHA1(30cf9005021ab2d7b03facdf2d3588bc94dc68a6))
1771   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
1772   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
17731740ROM_END
17741741
17751742ROM_START(academy)
17761743   ROM_REGION(0x10000,"maincpu",0)
17771744   ROM_LOAD("acad8000.bin", 0x8000, 0x8000, CRC(A967922B) SHA1(1327903FF89BF96D72C930C400F367AE19E3EC68))
17781745   ROM_LOAD("acad4000.bin", 0x4000, 0x4000, CRC(EE1222B5) SHA1(98541D87755A7186B69B9723CC4ADBD07F20F0E2))
1779   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
1780   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
17811746ROM_END
17821747
17831748ROM_START(megaiv)
r20410r20411
17891754ROM_START(milano)
17901755   ROM_REGION(0x10000,"maincpu",0)
17911756   ROM_LOAD("milano.bin", 0x0000, 0x10000, CRC(0e9c8fe1) SHA1(e9176f42d86fe57e382185c703c7eff7e63ca711))
1792   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
1793   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
17941757ROM_END
17951758
17961759
r20410r20411
17991762   ROM_LOAD("sfclow.bin", 0x0000, 0x8000, CRC(f040cf30) SHA1(1fc1220b8ed67cdffa3866d230ce001721cf684f))
18001763   ROM_LOAD("sfchi.bin", 0x8000, 0x8000, CRC(0f926b32) SHA1(9c7270ecb3f41dd9172a9a7928e6e04e64b2a340))
18011764   ROM_LOAD("sfcbook.bin", 0x10000, 0x8000, CRC(c6a1419a) SHA1(017a0ffa9aa59438c879624a7ddea2071d1524b8))
1802   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
1803   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
18041765ROM_END
18051766
18061767
r20410r20411
18091770   ROM_LOAD("seclow.bin", 0x0000, 0x8000, CRC(5a29105e) SHA1(be37bb29b530dbba847a5e8d27d81b36525e47f7))
18101771   ROM_LOAD("sechi.bin", 0x8000, 0x8000, CRC(0085c2c4) SHA1(d84bf4afb022575db09dd9dc12e9b330acce35fa))
18111772   ROM_LOAD("secbook.bin", 0x10000, 0x8000, CRC(2d085064) SHA1(76162322aa7d23a5c07e8356d0bbbb33816419af))
1812   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
1813   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
18141773ROM_END
18151774
18161775ROM_START( lyon16 )
18171776   ROM_REGION16_BE( 0x20000, "maincpu", 0 )
18181777   ROM_LOAD16_BYTE("lyon16ev.bin", 0x00000, 0x10000,CRC(497BD41A) SHA1(3FFEFEEAC694F49997C10D248EC6A7AA932898A4))
18191778   ROM_LOAD16_BYTE("lyon16od.bin" , 0x00001, 0x10000,CRC(F9DE3F54) SHA1(4060E29566D2F40122CCDE3C1F84C94A9C1ED54F))
1820
1821   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
1822   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
1823
18241779ROM_END
18251780
18261781ROM_START( lyon32 )
18271782   ROM_REGION32_BE( 0x20000, "maincpu", 0 )
18281783   ROM_LOAD("lyon32.bin", 0x00000, 0x20000, CRC(5C128B06) SHA1(954C8F0D3FAE29900CB1E9C14A41A9A07A8E185F))
1829
1830   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
1831   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
1832
18331784ROM_END
18341785
18351786
r20410r20411
18441795   ROM_LOAD16_BYTE("evenurom.bin", 0x00000, 0x8000,CRC(03477746) SHA1(8bffcb159a61e59bfc45411e319aea6501ebe2f9))
18451796   ROM_LOAD16_BYTE("oddlrom.bin",  0x00001, 0x8000,CRC(e182dbdd) SHA1(24dacbef2173fa737636e4729ff22ec1e6623ca5))
18461797   ROM_LOAD16_BYTE("book.bin", 0x10000, 0x8000,CRC(553a5c8c) SHA1(ccb5460ff10766a5ca8008ae2cffcff794318108))
1847
1848   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
1849   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
1850
18511798ROM_END
18521799
18531800ROM_START( van16 )
18541801   ROM_REGION16_BE( 0x40000, "maincpu", 0 )
18551802   ROM_LOAD16_BYTE("va16even.bin", 0x00000, 0x20000,CRC(E87602D5) SHA1(90CB2767B4AE9E1B265951EB2569B9956B9F7F44))
18561803   ROM_LOAD16_BYTE("va16odd.bin" , 0x00001, 0x20000,CRC(585F3BDD) SHA1(90BB94A12D3153A91E3760020E1EA2A9EAA7EC0A))
1857
1858   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
1859   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
1860
18611804ROM_END
18621805
18631806
18641807ROM_START( van32 )
18651808   ROM_REGION32_BE( 0x40000, "maincpu", 0 )
18661809   ROM_LOAD("vanc32.bin", 0x00000, 0x40000,CRC(F872BEB5) SHA1(9919F207264F74E2B634B723B048AE9CA2CEFBC7))
1867
1868   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
1869   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
1870
18711810ROM_END
18721811
18731812
18741813ROM_START( risc )
18751814   ROM_REGION( 0x20000, "maincpu", 0 )
18761815   ROM_LOAD("s2500.bin", 0x000000, 0x20000, CRC(7a707e82) SHA1(87187fa58117a442f3abd30092cfcc2a4d7c7efc))
1877
1878   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
1879   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
1880
18811816ROM_END
18821817
18831818ROM_START( gen32 )
18841819   ROM_REGION32_BE( 0x40000, "maincpu", 0 )
18851820   ROM_LOAD("gen32_4.bin", 0x00000, 0x40000,CRC(6CC4DA88) SHA1(EA72ACF9C67ED17C6AC8DE56A165784AA629C4A1))
1886
1887   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
1888   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
1889
18901821ROM_END
18911822
18921823ROM_START( gen32_41 )
18931824   ROM_REGION32_BE( 0x40000, "maincpu", 0 )
18941825   ROM_LOAD("gen32_41.bin", 0x00000, 0x40000,CRC(ea9938c0) SHA1(645cf0b5b831b48104ad6cec8d78c63dbb6a588c))
1895
1896   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
1897   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
1898
18991826ROM_END
19001827
19011828ROM_START( gen32_oc )
19021829   ROM_REGION32_BE( 0x40000, "maincpu", 0 )
19031830   ROM_LOAD("gen32_41.bin", 0x00000, 0x40000,CRC(ea9938c0) SHA1(645cf0b5b831b48104ad6cec8d78c63dbb6a588c))
1904
1905   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
1906   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
1907
19081831ROM_END
19091832
19101833ROM_START( berlinp )
19111834   ROM_REGION32_BE( 0x40000, "maincpu", 0 )
19121835   ROM_LOAD("berlinp.bin", 0x00000, 0x40000,CRC(82FBAF6E) SHA1(729B7CEF3DFAECC4594A6178FC4BA6015AFA6202))
1913
1914   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
1915   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
1916
19171836ROM_END
19181837
19191838ROM_START( bpl32 )
19201839   ROM_REGION32_BE( 0x40000, "maincpu", 0 )
19211840   ROM_LOAD("bpl32.bin", 0x00000, 0x40000,CRC(D75E170F) SHA1(AC0EBDAA114ABD4FEF87361A03DF56928768B1AE))
1922
1923   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
1924   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
1925
19261841ROM_END
19271842
19281843ROM_START( lond020 )
19291844   ROM_REGION32_BE( 0x40000, "maincpu", 0 )
19301845   ROM_LOAD("lond020.bin", 0x00000, 0x40000,CRC(3225B8DA) SHA1(FD8F6F4E9C03B6CDC86D8405E856C26041BFAD12))
1931
1932   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
1933   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
1934
19351846ROM_END
19361847
19371848ROM_START( lond030 )
19381849   ROM_REGION32_BE( 0x40000, "maincpu", 0 )
19391850   ROM_LOAD("lond030.bin", 0x00000, 0x40000,CRC(853BAA4E) SHA1(946951081D4E91E5BDD9E93D0769568A7FE79BAD))
1940
1941   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
1942   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
1943
19441851ROM_END
19451852
19461853DRIVER_INIT_MEMBER(polgar_state,polgar)
trunk/src/mess/drivers/alphasma.c
r20410r20411
100100      UINT8 lcdc_data = 0;
101101
102102      if ((m_port_a ^ data) & 0x80)
103      {
104         if ((m_matrix[1] & 0x02))
105            lcdc_data |= m_lcdc0->data_read(space, 0);
106         else
107            lcdc_data |= m_lcdc0->control_read(space, 0);
108      }
103         lcdc_data |= m_lcdc0->read(space, BIT(m_matrix[1], 1));
104
109105      if ((m_port_a ^ data) & 0x20)
110      {
111         if ((m_matrix[1] & 0x02))
112            lcdc_data |= m_lcdc1->data_read(space, 0);
113         else
114            lcdc_data |= m_lcdc1->control_read(space, 0);
115      }
106         lcdc_data |= m_lcdc1->read(space, BIT(m_matrix[1], 1));
116107
117108      m_port_d = (m_port_d & 0xc3) | (lcdc_data>>2);
118109   }
r20410r20411
121112      UINT8 lcdc_data = (m_port_d<<2) & 0xf0;
122113
123114      if ((m_port_a ^ data) & data & 0x80)
124      {
125         if ((m_matrix[1] & 0x02))
126            m_lcdc0->data_write(space, 0, lcdc_data);
127         else
128            m_lcdc0->control_write(space, 0, lcdc_data);
129      }
115         m_lcdc0->write(space, BIT(m_matrix[1], 1), lcdc_data);
116
130117      if ((m_port_a ^ data) & data & 0x20)
131      {
132         if ((m_matrix[1] & 0x02))
133            m_lcdc1->data_write(space, 0, lcdc_data);
134         else
135            m_lcdc1->control_write(space, 0, lcdc_data);
136      }
118         m_lcdc1->write(space, BIT(m_matrix[1], 1), lcdc_data);
137119   }
138120
139121   m_rambank->set_entry(((data>>3) & 0x01) | ((data>>4) & 0x02));
r20410r20411
334316   0x00   //registers are at 0-0x3f
335317};
336318
337static HD44780_INTERFACE( alphasmart_4line_display )
338{
339   2,                  // number of lines
340   40,                 // chars for line
341   NULL                // pixel update callback
342};
343
344319static MACHINE_CONFIG_START( alphasmart, alphasmart_state )
345320   /* basic machine hardware */
346321   MCFG_CPU_ADD("maincpu", MC68HC11, XTAL_8MHz/2)  // MC68HC11D0, XTAL is 8 Mhz, unknown divider
r20410r20411
348323   MCFG_CPU_IO_MAP(alphasmart_io)
349324   MCFG_CPU_CONFIG(alphasmart_hc11_config)
350325
351   MCFG_HD44780_ADD("ks0066_0", alphasmart_4line_display)
352   MCFG_HD44780_ADD("ks0066_1", alphasmart_4line_display)
326   MCFG_HD44780_ADD("ks0066_0")
327   MCFG_HD44780_LCD_SIZE(2, 40)
328   MCFG_HD44780_ADD("ks0066_1")
329   MCFG_HD44780_LCD_SIZE(2, 40)
353330
354331   /* video hardware */
355332   MCFG_SCREEN_ADD("screen", LCD)
r20410r20411
368345   ROM_LOAD( "alphasmartpro212.rom",  0x0000, 0x8000, CRC(896ddf1c) SHA1(c3c6a421c9ced92db97431d04b4a3f09a39de716) )   // Checksum 8D24 on label
369346
370347   ROM_REGION( 0x20000, "mainram", ROMREGION_ERASE )
371
372   ROM_REGION( 0x0860, "ks0066_0", ROMREGION_ERASE )
373   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
374
375   ROM_REGION( 0x0860, "ks0066_1", ROMREGION_ERASE )
376   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
377348ROM_END
378349
379350
trunk/src/mess/drivers/pc2000.c
r20410r20411
114114   ADDRESS_MAP_GLOBAL_MASK(0xff)
115115   AM_RANGE(0x01, 0x01) AM_WRITE(rombank1_w)
116116   AM_RANGE(0x03, 0x03) AM_WRITE(rombank2_w)
117   AM_RANGE(0x0a, 0x0a) AM_DEVREADWRITE("hd44780", hd44780_device, control_read, control_write)
118   AM_RANGE(0x0b, 0x0b) AM_DEVREADWRITE("hd44780", hd44780_device, data_read, data_write)
117   AM_RANGE(0x0a, 0x0b) AM_DEVREADWRITE("hd44780", hd44780_device, read, write)
119118   AM_RANGE(0x10, 0x11) AM_READWRITE(key_matrix_r, key_matrix_w)
120119   AM_RANGE(0x12, 0x12) AM_READWRITE(beep_r, beep_w)
121120ADDRESS_MAP_END
r20410r20411
314313};
315314
316315static GFXDECODE_START( pc2000 )
317   GFXDECODE_ENTRY( "hd44780", 0x0000, hd44780_charlayout, 0, 1 )
316   GFXDECODE_ENTRY( "hd44780:cgrom", 0x0000, hd44780_charlayout, 0, 1 )
318317GFXDECODE_END
319318
320static HD44780_INTERFACE( pc2000_display )
321{
322   2,                  // number of lines
323   20,                 // chars for line
324   NULL                // pixel update callback
325};
326
327319static MACHINE_CONFIG_START( pc2000, pc2000_state )
328320   /* basic machine hardware */
329321   MCFG_CPU_ADD("maincpu",Z80, XTAL_4MHz) /* probably not accurate */
r20410r20411
343335   MCFG_GFXDECODE(pc2000)
344336   MCFG_DEFAULT_LAYOUT(layout_lcd)
345337
346   MCFG_HD44780_ADD("hd44780", pc2000_display)
338   MCFG_HD44780_ADD("hd44780")
339   MCFG_HD44780_LCD_SIZE(2, 20)
347340
348341   /* sound hardware */
349342   MCFG_SPEAKER_STANDARD_MONO( "mono" )
r20410r20411
360353   ROM_REGION( 0x40000, "bios", ROMREGION_ERASEFF )
361354   ROM_LOAD( "lh532hee_9344_d.u4", 0x000000, 0x040000, CRC(0b03bf33) SHA1(cb344b94b14975c685041d3e669f386e8a21909f))
362355
363   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
364   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
365
366356   ROM_REGION( 0x4000, "cart", ROMREGION_ERASEFF )
367357   ROM_CART_LOAD( "cart", 0, 0x4000, 0 )
368358ROM_END
trunk/src/mess/drivers/lcmate2.c
r20410r20411
203203   membank("rombank")->configure_entries(0, 0x10, (UINT8*)machine().root_device().memregion("maincpu")->base(), 0x4000);
204204}
205205
206static HD44780_INTERFACE( lcmate2_display )
207{
208   2,                  // number of lines
209   20,                 // chars for line
210   NULL                // pixel update callback
211};
212
213206static const gfx_layout lcmate2_charlayout =
214207{
215208   5, 8,   /* 5 x 8 characters */
r20410r20411
222215};
223216
224217static GFXDECODE_START( lcmate2 )
225   GFXDECODE_ENTRY( "hd44780", 0x0000, lcmate2_charlayout, 0, 1 )
218   GFXDECODE_ENTRY( "hd44780:cgrom", 0x0000, lcmate2_charlayout, 0, 1 )
226219GFXDECODE_END
227220
228221
r20410r20411
249242   MCFG_DEFAULT_LAYOUT(layout_lcd)
250243   MCFG_GFXDECODE(lcmate2)
251244
252   MCFG_HD44780_ADD("hd44780", lcmate2_display)
245   MCFG_HD44780_ADD("hd44780")
246   MCFG_HD44780_LCD_SIZE(2, 20)
253247
254248   MCFG_NVRAM_ADD_0FILL("nvram")
255249
r20410r20411
267261   ROM_REGION( 0x40000, "maincpu", ROMREGION_ERASEFF )
268262   ROM_LOAD( "u2.bin",  0x00000, 0x08000, CRC(521931b9) SHA1(743a6e2928c4365fbf5ed9a173e2c1bfe695850f) )
269263   ROM_LOAD( "u3.bin",  0x20000, 0x20000, CRC(84fe767a) SHA1(8dd306f203e1220f0eab1a284be3095e2642c5b6) ) // spell library
270
271   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
272   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
273264ROM_END
274265
275266/* Driver */
trunk/src/mess/drivers/ymmu100.c
r20410r20411
7070#include "emu.h"
7171#include "cpu/h83002/h8.h"
7272#include "video/hd44780.h"
73#include "rendlay.h"
7374
7475static INPUT_PORTS_START( mu100 )
7576INPUT_PORTS_END
r20410r20411
166167   AM_RANGE(H8_ADC_7_H, H8_ADC_7_L) AM_READ(adc7_r)
167168ADDRESS_MAP_END
168169
169static HD44780_INTERFACE( lcd_config )
170{
171   4,
172   20,
173   NULL
174};
175
176170static MACHINE_CONFIG_START( mu100, mu100_state )
177171   MCFG_CPU_ADD( "maincpu", H8S2655, XTAL_16MHz )
178172   MCFG_CPU_PROGRAM_MAP( mu100_map )
179173   MCFG_CPU_IO_MAP( mu100_iomap )
180174
181   MCFG_HD44780_ADD("lcd", lcd_config)
175   MCFG_HD44780_ADD("lcd")
176   MCFG_HD44780_LCD_SIZE(4, 20)
182177
183178   MCFG_SCREEN_ADD("screen", LCD)
184179   MCFG_SCREEN_REFRESH_RATE(50)
185180   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate, asynchronous updating anyway */
186181   MCFG_SCREEN_UPDATE_DEVICE("lcd", hd44780_device, screen_update)
187   MCFG_SCREEN_SIZE(320, 200)
188   MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 200-1)
182   MCFG_SCREEN_SIZE(20*6, 4*9)
183   MCFG_SCREEN_VISIBLE_AREA(0, 20*6-1, 0, 4*9-1)
189184   MCFG_PALETTE_LENGTH(2)
185   MCFG_DEFAULT_LAYOUT(layout_lcd)
190186
191187   MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
192188MACHINE_CONFIG_END
r20410r20411
206202   ROM_LOAD32_WORD( "sx743b0.ic35", 0x000002, 0x400000, CRC(a9109a6c) SHA1(a67bb49378a38a2d809bd717d286e18bc6496db0) )
207203   ROM_LOAD32_WORD( "xt445a0-828.ic36", 0x800000, 0x1000000, CRC(d4483a43) SHA1(5bfd0762dea8598eda19db20251dac20e31fa02c) )
208204   ROM_LOAD32_WORD( "xt461a0-829.ic37", 0x800002, 0x1000000, CRC(c5af4501) SHA1(1c88de197c36382311053add8b19a5740802cb78) )
209
210   ROM_REGION( 0x0860, "lcd", ROMREGION_ERASE )
211   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
212205ROM_END
213206
214207CONS( 1997, mu100, 0, 0, mu100, mu100, driver_device, 0, "Yamaha", "MU100", GAME_NOT_WORKING )
trunk/src/mess/drivers/psion.c
r20410r20411
194194   switch (offset & 0x0ffc0)
195195   {
196196   case 0x80:
197      if (offset & 1)
198         m_lcdc->data_write(space, offset, data);
199      else
200         m_lcdc->control_write(space, offset, data);
197      m_lcdc->write(space, offset & 0x01, data);
201198      break;
202199   default:
203200      io_rw(space, offset);
r20410r20411
209206   switch (offset & 0xffc0)
210207   {
211208   case 0x80:
212      if (offset & 1)
213         return m_lcdc->data_read(space, offset);
214      else
215         return m_lcdc->control_read(space, offset);
209      return m_lcdc->read(space, offset & 0x01);
216210   default:
217211      io_rw(space, offset);
218212   }
r20410r20411
437431      update_banks(machine());
438432}
439433
434
435HD44780_PIXEL_UPDATE(psion_state::lz_pixel_update)
436{
437   if (pos < 40)
438   {
439      static const UINT8 psion_display_layout[] =
440      {
441         0x00, 0x01, 0x02, 0x03, 0x28, 0x29, 0x2a, 0x2b, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x2c, 0x2d, 0x2e, 0x2f,
442         0x30, 0x31, 0x32, 0x33, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b,
443         0x14, 0x15, 0x16, 0x17, 0x3c, 0x3d, 0x3e, 0x3f, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x40, 0x41, 0x42, 0x43,
444         0x44, 0x45, 0x46, 0x47, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f
445      };
446
447      UINT8 char_pos = psion_display_layout[line*40 + pos];
448      bitmap.pix16((char_pos / 20) * 9 + y, (char_pos % 20) * 6 + x) = state;
449   }
450}
451
440452void psion_state::palette_init()
441453{
442454   palette_set_color(machine(), 0, MAKE_RGB(138, 146, 148));
r20410r20411
455467};
456468
457469static GFXDECODE_START( psion )
458   GFXDECODE_ENTRY( "hd44780", 0x0000, psion_charlayout, 0, 1 )
470   GFXDECODE_ENTRY( "hd44780:cgrom", 0x0000, psion_charlayout, 0, 1 )
459471GFXDECODE_END
460472
461static HD44780_INTERFACE( psion_2line_display )
462{
463   2,                  // number of lines
464   16,                 // chars for line
465   NULL                // pixel update callback
466};
467
468473/* basic configuration for 2 lines display */
469474static MACHINE_CONFIG_START( psion_2lines, psion_state )
470475   /* basic machine hardware */
r20410r20411
481486   MCFG_PALETTE_LENGTH(2)
482487   MCFG_GFXDECODE(psion)
483488
484   MCFG_HD44780_ADD("hd44780", psion_2line_display)
489   MCFG_HD44780_ADD("hd44780")
490   MCFG_HD44780_LCD_SIZE(2, 16)
485491
486492   /* sound hardware */
487493   MCFG_SPEAKER_STANDARD_MONO( "mono" )
r20410r20411
500506   MCFG_SOFTWARE_LIST_ADD("pack_list", "psion")
501507MACHINE_CONFIG_END
502508
503
504static HD44780_INTERFACE( psion_4line_display )
505{
506   4,                  // number of lines
507   20,                 // chars for line
508   NULL                // pixel update callback
509};
510
511509/* basic configuration for 4 lines display */
512510static MACHINE_CONFIG_DERIVED( psion_4lines, psion_2lines )
513511   /* video hardware */
r20410r20411
515513   MCFG_SCREEN_SIZE(6*20, 9*4)
516514   MCFG_SCREEN_VISIBLE_AREA(0, 6*20-1, 0, 9*4-1)
517515
518   MCFG_DEVICE_REMOVE("hd44780")
519   MCFG_PSION_CUSTOM_LCDC_ADD("hd44780", psion_4line_display)
516   MCFG_DEVICE_MODIFY("hd44780")
517   MCFG_HD44780_LCD_SIZE(4, 20)
518   MCFG_HD44780_PIXEL_UPDATE_CB(psion_state::lz_pixel_update)
520519MACHINE_CONFIG_END
521520
522521static MACHINE_CONFIG_DERIVED( psioncm, psion_2lines )
r20410r20411
554553   ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
555554   ROM_SYSTEM_BIOS(0, "v24", "CM v2.4")
556555   ROMX_LOAD( "24-cm.dat",    0x8000, 0x8000,  CRC(f6798394) SHA1(736997f0db9a9ee50d6785636bdc3f8ff1c33c66), ROM_BIOS(1))
557
558   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
559   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
560556ROM_END
561557
562558ROM_START( psionla )
563559   ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
564560   ROM_SYSTEM_BIOS(0, "v33", "LA v3.3")
565561   ROMX_LOAD( "33-la.dat",    0x8000, 0x8000,  CRC(02668ed4) SHA1(e5d4ee6b1cde310a2970ffcc6f29a0ce09b08c46), ROM_BIOS(1))
566
567   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
568   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
569562ROM_END
570563
571564ROM_START( psionp350 )
r20410r20411
574567   ROMX_LOAD( "36-p350.dat",  0x8000, 0x8000,  CRC(3a371a74) SHA1(9167210b2c0c3bd196afc08ca44ab23e4e62635e), ROM_BIOS(1))
575568   ROM_SYSTEM_BIOS(1, "v38", "POS350 v3.8")
576569   ROMX_LOAD( "38-p350.dat",  0x8000, 0x8000,  CRC(1b8b082f) SHA1(a3e875a59860e344f304a831148a7980f28eaa4a), ROM_BIOS(2))
577
578   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
579   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
580570ROM_END
581571
582572ROM_START( psionlam )
583573   ROM_REGION( 0x18000, "maincpu", ROMREGION_ERASEFF )
584574   ROM_SYSTEM_BIOS(0, "v37", "LA v3.7")
585575   ROMX_LOAD( "37-lam.dat",   0x8000, 0x10000, CRC(7ee3a1bc) SHA1(c7fbd6c8e47c9b7d5f636e9f56e911b363d6796b), ROM_BIOS(1))
586
587   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
588   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
589576ROM_END
590577
591578ROM_START( psionlz64 )
592579   ROM_REGION( 0x18000, "maincpu", ROMREGION_ERASEFF )
593580   ROM_SYSTEM_BIOS(0, "v44", "LZ64 v4.4")
594581   ROMX_LOAD( "44-lz64.dat",  0x8000, 0x10000, CRC(aa487913) SHA1(5a44390f63fc8c1bc94299ab2eb291bc3a5b989a), ROM_BIOS(1))
595
596   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
597   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
598582ROM_END
599583
600584ROM_START( psionlz64s )
601585   ROM_REGION( 0x18000, "maincpu", ROMREGION_ERASEFF )
602586   ROM_SYSTEM_BIOS(0, "v46", "LZ64 v4.6")
603587   ROMX_LOAD( "46-lz64s.dat", 0x8000, 0x10000, CRC(328d9772) SHA1(7f9e2d591d59ecfb0822d7067c2fe59542ea16dd), ROM_BIOS(1))
604
605   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
606   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
607588ROM_END
608589
609590ROM_START( psionlz )
610591   ROM_REGION( 0x18000, "maincpu", ROMREGION_ERASEFF )
611592   ROM_SYSTEM_BIOS(0, "v46", "LZ v4.6")
612593   ROMX_LOAD( "46-lz.dat",    0x8000, 0x10000, CRC(22715f48) SHA1(cf460c81cadb53eddb7afd8dadecbe8c38ea3fc2), ROM_BIOS(1))
613
614   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
615   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
616594ROM_END
617595
618596ROM_START( psionp464 )
619597   ROM_REGION( 0x18000, "maincpu", ROMREGION_ERASEFF )
620598   ROM_SYSTEM_BIOS(0, "v46", "POS464 v4.6")
621599   ROMX_LOAD( "46-p464.dat",  0x8000, 0x10000, CRC(672a0945) SHA1(d2a6e3fe1019d1bd7ae4725e33a0b9973f8cd7d8), ROM_BIOS(1))
622
623   ROM_REGION( 0x0860, "hd44780", ROMREGION_ERASE )
624   ROM_LOAD( "44780a00.bin",    0x0000, 0x0860,  BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d))
625600ROM_END
626601
627602/* Driver */
trunk/src/mess/mess.mak
r20410r20411
15481548
15491549$(MESSOBJ)/psion.a:             \
15501550   $(MESS_DRIVERS)/psion.o     \
1551   $(MESS_VIDEO)/psion.o       \
15521551   $(MESS_MACHINE)/psion_pack.o    \
15531552
15541553$(MESSOBJ)/radio.a:             \

Previous 199869 Revisions Next


© 1997-2024 The MAME Team