Previous 15994 Revisions Next

r9447 Monday 25th October, 2010 at 22:52:18 UTC by Angelo Salese
[PC-88VA]: Added GCG decoding, and fixed previous commit
[src/mess/drivers]pc88va.c

src/mess/drivers/pc88va.c
r9446r9447
1818
1919static UINT16 *palram;
2020static UINT16 bank_reg;
21static UINT8 backupram_wp;
2122
2223static VIDEO_START( pc88va )
2324{
r9446r9447
3940      {
4041         UINT16 *tvram = (UINT16 *)memory_region(space->machine, "tvram");
4142
42         if((offset & 0x30000) == 0)
43         if(((offset*2) & 0x30000) == 0)
4344            return tvram[offset];
4445
4546         return 0xffff;
r9446r9447
5657         UINT16 *knj_ram = (UINT16 *)memory_region(space->machine, "kanji");
5758         UINT32 knj_offset;
5859
59         knj_offset = (offset + (((bank_reg & 0x100) >> 8)*0x40000)) / 2;
60         knj_offset = (offset + (((bank_reg & 0x100) >> 8)*0x20000));
6061
6162         /* 0x00000 - 0x3ffff Kanji ROM 1*/
6263         /* 0x40000 - 0x4ffff Kanji ROM 2*/
63         /* 0x50000 - 0x53fff Kanji RAM */
64         /* 0x50000 - 0x53fff Backup RAM */
6465         /* anything else is a NOP (I presume?) */
6566
6667         return knj_ram[knj_offset];
r9446r9447
7273         UINT16 *dic_rom = (UINT16 *)memory_region(space->machine, "dictionary");
7374         UINT32 dic_offset;
7475
75         dic_offset = (offset + (((bank_reg & 0x100) >> 8)*0x40000)) / 2;
76         dic_offset = (offset + (((bank_reg & 0x100) >> 8)*0x20000));
7677
7778         return dic_rom[dic_offset];
7879      }
r9446r9447
9192      {
9293         UINT16 *tvram = (UINT16 *)memory_region(space->machine, "tvram");
9394
94         if((offset & 0x30000) == 0)
95         if(((offset*2) & 0x30000) == 0)
9596            COMBINE_DATA(&tvram[offset]);
9697      }
9798      break;
r9446r9447
108109         UINT16 *knj_ram = (UINT16 *)memory_region(space->machine, "kanji");
109110         UINT32 knj_offset;
110111
111         knj_offset = offset + (((bank_reg & 0x100) >> 8)*0x40000);
112         knj_offset = ((offset) + (((bank_reg & 0x100) >> 8)*0x20000));
112113
113         if(knj_offset >= 0x50000 && knj_offset <= 0x53fff)
114         if(knj_offset >= 0x50000/2 && knj_offset <= 0x53fff/2) // TODO: there's an area that can be write protected
115         {
114116            COMBINE_DATA(&knj_ram[knj_offset]);
117            gfx_element_mark_dirty(space->machine->gfx[0], (knj_offset * 2) / 8);
118            gfx_element_mark_dirty(space->machine->gfx[1], (knj_offset * 2) / 32);
119         }
115120      }
116121      break;
117122      case 0xc: // Dictionary ROM
r9446r9447
148153
149154static WRITE8_HANDLER( idp_command_w )
150155{
151   // ...
156   switch(data)
157   {
158      case 0x10: printf("Unemulated IDP SYNC cmd set\n"); break;
159      case 0x12: printf("Unemulated IDP DSPON cmd set\n"); break;
160      case 0x13: printf("Unemulated IDP DSPOFF cmd set\n"); break;
161      case 0x14: printf("Unemulated IDP DSPDEF cmd set\n"); break;
162      case 0x15: printf("Unemulated IDP CURDEF cmd set\n"); break;
163      case 0x16: printf("Unemulated IDP ACTSCR cmd set\n"); break;
164      case 0x1e: printf("Unemulated IDP CURS cmd set\n"); break;
165      case 0x8c: printf("Unemulated IDP EMUL cmd set\n"); break;
166      case 0x88: printf("Unemulated IDP EXIT cmd set\n"); break;
167      case 0x82: printf("Unemulated IDP SPRON cmd set\n"); break;
168      case 0x83: printf("Unemulated IDP SPROFF cmd set\n"); break;
169      case 0x85: printf("Unemulated IDP SPRSW cmd set\n"); break;
170      case 0x81: printf("Unemulated IDP SPROV cmd set\n"); break;
171
172      default:   printf("Unknown IDP %02x cmd set\n",data); break;
173   }
152174}
153175
154176static WRITE8_HANDLER( idp_param_w )
155177{
156   // ...
178   printf("%02x\n",data);
157179}
158180
159181static WRITE16_HANDLER( palette_ram_w )
r9446r9447
219241   return 0xff; // TODO
220242}
221243
244static WRITE16_HANDLER( backupram_wp_1_w )
245{
246   backupram_wp = 1;
247}
248
249static WRITE16_HANDLER( backupram_wp_0_w )
250{
251   backupram_wp = 0;
252}
253
222254static ADDRESS_MAP_START( pc88va_io_map, ADDRESS_SPACE_IO, 16 )
223255   AM_RANGE(0x0000, 0x000f) AM_READ8(key_r,0xffff) // Keyboard ROW reading
224256//   AM_RANGE(0x0010, 0x0010) Printer / Calendar Clock Interface
r9446r9447
271303//   AM_RANGE(0x0184, 0x018b) IRQ Controller
272304//   AM_RANGE(0x0190, 0x0191) System Port 5
273305//   AM_RANGE(0x0196, 0x0197) Keyboard sub CPU command port
274//   AM_RANGE(0x0198, 0x019b) Memory switch write inhibit/permission
306   AM_RANGE(0x0198, 0x0199) AM_WRITE(backupram_wp_1_w) //Backup RAM write inhibit
307   AM_RANGE(0x019a, 0x019b) AM_WRITE(backupram_wp_0_w) //Backup RAM write permission
275308//   AM_RANGE(0x01a0, 0x01a7) TCU (timer counter unit)
276309//   AM_RANGE(0x01a8, 0x01a9) General-purpose timer 3 control port
277310//   AM_RANGE(0x01b0, 0x01bb) FDC related (765)
r9446r9447
311344   memory_set_bankptr(machine, "rom00_bank", &ROM00[0x00000]);
312345
313346   bank_reg = 0x4100;
347   backupram_wp = 1;
314348}
315349
316350static const gfx_layout pc88va_chars_8x8 =

Previous 15994 Revisions Next


© 1998-2018 The MESS Team