Previous 15994 Revisions Next

r12419 Sunday 31st July, 2011 at 17:56:11 UTC by Tim Schuerewegen
[CYBIKO] Fixed garbled graphics when running Prex OS. (nw)
[src/mess/video]hd66421.c

src/mess/video/hd66421.c
r12418r12419
5858
5959typedef struct
6060{
61   UINT8 idx, dat[32]; // index and data registers
62   UINT8 *ram;         // display ram
63   UINT32 pos;         // current position in ram
61   UINT8 cmd, reg[32];
62   UINT8 *ram;
63   int x, y;
6464} HD66421;
6565
6666static HD66421 lcd;
r12418r12419
6868UINT8 hd66421_reg_idx_r(void)
6969{
7070   _logerror( 2, ("hd66421_reg_idx_r\n"));
71   return lcd.idx;
71   return lcd.cmd;
7272}
7373
7474void hd66421_reg_idx_w(UINT8 data)
7575{
7676   _logerror( 2, ("hd66421_reg_idx_w (%02X)\n", data));
77   lcd.idx = data;
77   lcd.cmd = data;
7878}
7979
8080UINT8 hd66421_reg_dat_r(void)
8181{
8282   _logerror( 2, ("hd66421_reg_dat_r\n"));
83   return lcd.dat[lcd.idx];
83   return lcd.reg[lcd.cmd];
8484}
8585
8686void hd66421_reg_dat_w(UINT8 data)
8787{
8888   _logerror( 2, ("hd66421_reg_dat_w (%02X)\n", data));
89   lcd.dat[lcd.idx] = data;
90   switch (lcd.idx)
89   lcd.reg[lcd.cmd] = data;
90   switch (lcd.cmd)
9191   {
92      case LCD_REG_ADDR_Y : lcd.pos = data * HD66421_WIDTH / 4; break;
93      case LCD_REG_RAM    : lcd.ram[lcd.pos++] = data; break;
92      case LCD_REG_ADDR_X :
93      {
94         lcd.x = data;
95      }
96      break;
97      case LCD_REG_ADDR_Y :
98      {
99         lcd.y = data;
100      }
101      break;
102      case LCD_REG_RAM :
103      {
104         UINT8 r1;
105         *(lcd.ram + lcd.y * (HD66421_WIDTH / 4) + lcd.x) = data;
106         r1 = lcd.reg[LCD_REG_CONTROL_2];
107         if (r1 & 0x02)
108         {
109            lcd.x++;
110         }
111         else
112         {
113            lcd.y++;
114         }
115         if (lcd.x >= (HD66421_WIDTH / 4))
116         {
117            lcd.x = 0;
118            lcd.y++;
119         }
120         if (lcd.y >= HD66421_HEIGHT)
121         {
122            lcd.y = 0;
123         }
124      }
125      break;
94126   }
95127}
96128
r12418r12419
116148static void hd66421_state_save(running_machine &machine)
117149{
118150   const char *name = "hd66421";
119   state_save_register_item(machine, name, NULL, 0, lcd.idx);
120   state_save_register_item_array(machine, name, NULL, 0, lcd.dat);
121   state_save_register_item(machine, name, NULL, 0, lcd.pos);
151   state_save_register_item(machine, name, NULL, 0, lcd.cmd);
152   state_save_register_item_array(machine, name, NULL, 0, lcd.reg);
153   state_save_register_item(machine, name, NULL, 0, lcd.x);
154   state_save_register_item(machine, name, NULL, 0, lcd.y);
122155   state_save_register_item_pointer(machine, name, NULL, 0, lcd.ram, HD66421_RAM_SIZE);
123156}
124157
r12418r12419
140173   {
141174      double bright;
142175      int temp;
143      temp = 31 - (lcd.dat[LCD_REG_COLOR_1+i] - lcd.dat[LCD_REG_CONTRAST] + 0x03);
176      temp = 31 - (lcd.reg[LCD_REG_COLOR_1+i] - lcd.reg[LCD_REG_CONTRAST] + 0x03);
144177      if (temp <  0) temp =  0;
145178      if (temp > 31) temp = 31;
146179      bright = 1.0 * temp / 31;
r12418r12419
152185      #endif
153186   }
154187   // draw bitmap (bottom to top)
155   if (lcd.dat[0] & LCD_R0_DISP)
188   if (lcd.reg[0] & LCD_R0_DISP)
156189   {
157190      int x, y;
158191      x = 0;

Previous 15994 Revisions Next


© 1998-2018 The MESS Team