Previous 15994 Revisions Next

r829 Wednesday 15th August, 2007 at 04:05:59 UTC by R. Belmont
[A310] Improved logging and better IOC register handling.
[src/mess/drivers]a310.c

src/mess/drivers/a310.c
r828r829
5151static UINT32 a310_pagesize;
5252static int a310_latchrom;
5353static INT16 a310_pages[(32*1024*1024)/(4096)];   // the logical RAM area is 32 megs, and the smallest page size is 4k
54UINT32 a310_vidregs[256];
54UINT32 a310_vidregs[256], a310_iocregs[0x80/4];
5555
5656VIDEO_START( a310 )
5757{
r828r829
109109      page = (offset<<2) / page_sizes[a310_pagesize];
110110      poffs = (offset<<2) % page_sizes[a310_pagesize];
111111
112      printf("Reading offset %x (addr %x): page %x (size %d %d) offset %x ==> %x %x\n", offset, offset<<2, page, a310_pagesize, page_sizes[a310_pagesize], poffs, a310_pages[page], a310_pages[page]*page_sizes[a310_pagesize]);
112//      printf("Reading offset %x (addr %x): page %x (size %d %d) offset %x ==> %x %x\n", offset, offset<<2, page, a310_pagesize, page_sizes[a310_pagesize], poffs, a310_pages[page], a310_pages[page]*page_sizes[a310_pagesize]);
113113
114114      if (a310_pages[page] != -1)
115115      {
r828r829
139139      page = (offset<<2) / page_sizes[a310_pagesize];
140140      poffs = (offset<<2) % page_sizes[a310_pagesize];
141141
142      printf("Writing offset %x (addr %x): page %x (size %d %d) offset %x ==> %x %x\n", offset, offset<<2, page, a310_pagesize, page_sizes[a310_pagesize], poffs, a310_pages[page], a310_pages[page]*page_sizes[a310_pagesize]);
142//      printf("Writing offset %x (addr %x): page %x (size %d %d) offset %x ==> %x %x\n", offset, offset<<2, page, a310_pagesize, page_sizes[a310_pagesize], poffs, a310_pages[page], a310_pages[page]*page_sizes[a310_pagesize]);
143143
144144      if (a310_pages[page] != -1)
145145      {
r828r829
188188
189189static READ32_HANDLER(ioc_r)
190190{
191
192   if (offset >= 0x80000 && offset < 0xc0000)
193   {
194      logerror("IOC: R reg %x (mask %08x)\n", (offset*4)&0x7c, mem_mask);
195      return a310_iocregs[offset];
196   }
197   else
198   {
199      logerror("I/O: R @ %x (mask %08x)\n", (offset*4)+0x3000000, mem_mask);
200   }
201
202
191203   return 0;
192204}
193205
194206static WRITE32_HANDLER(ioc_w)
195207{
196   logerror("IOC: W %x @ %x (mask %08x)\n", data, offset, mem_mask);
208   if (offset >= 0x80000 && offset < 0xc0000)
209   {
210      logerror("IOC: W %x @ reg %x (mask %08x)\n", data, (offset*4)&0x7c, mem_mask);
211      COMBINE_DATA(&a310_iocregs[offset]);
212   }
213   else
214   {
215      logerror("I/O: W %x @ %x (mask %08x)\n", data, (offset*4)+0x3000000, mem_mask);
216   }
197217}
198218
199219static READ32_HANDLER(vidc_r)
r828r829
203223
204224static WRITE32_HANDLER(vidc_w)
205225{
206   logerror("VIDC: %x to register %x\n", data & 0xffffff, data>>24);
226   UINT32 reg = data>>24;
227   UINT32 val = data & 0xffffff;
228   static const char *vrnames[] =
229   {
230      "horizontal total",
231      "horizontal sync width",
232      "horizontal border start",
233      "horizontal display start",
234      "horizontal display end",
235      "horizontal border end",
236      "horizontal cursor start",
237      "horizontal interlace",
238      "vertical total",
239      "vertical sync width",
240      "vertical border start",
241      "vertical display start",
242      "vertical display end",
243      "vertical border end",
244      "vertical cursor start",
245      "vertical cursor end",
246   };
207247
208   a310_vidregs[data>>24] = data & 0xffffff;
248   if (reg >= 0x80 && reg <= 0xbc)
249   {
250      logerror("VIDC: %s = %d\n", vrnames[(reg-0x80)/4], val>>12);
251   }
252   else
253   {
254      logerror("VIDC: %x to register %x\n", val, reg);
255   }
256
257   a310_vidregs[reg] = val;
209258}
210259
211260static READ32_HANDLER(memc_r)
r828r829
220269   {
221270      switch ((data >> 17) & 7)
222271      {
272         
273
223274         case 7:   /* Control */
224275            a310_pagesize = ((data>>2) & 3);
225276
226            logerror("MEMC: %x to Control (page size %d)\n", data & 0x1ffc, page_sizes[a310_pagesize]);
277            logerror("MEMC: %x to Control (page size %d, %s, %s)\n", data & 0x1ffc, page_sizes[a310_pagesize], ((data>>10)&1) ? "Video DMA on" : "Video DMA off", ((data>>11)&1) ? "Sound DMA on" : "Sound DMA off");
227278            break;
228279
229280         default:
r828r829
26131216k page:   bits 6-2 being bits 4-0, bits 1-0 being bits 6-5
26231332k page:   bits 6-3 being bits 4-0, bit 0 being bit 4, bit 2 being bit 5, bit
263314            1 being bit 6
315*/
264316
265
266
267
268*/
269317static WRITE32_HANDLER(memc_page_w)
270318{
271319   UINT32 log, phys, memc, perms;
272320
273//   logerror("MEMC_PAGE: W %x @ %x (mask %08x)\n", data, offset, mem_mask);
274
275321   perms = (data & 0x300)>>8;
276322   log = phys = memc = 0;
277323
r828r829
318364   // now go ahead and set the mapping in the page table
319365   a310_pages[log] = phys * memc;
320366
321   printf("MEMC_PAGE(%d): W %08x: log %x to phys %x, MEMC %d, perms %d\n", a310_pagesize, data, log, phys, memc, perms);
367//   printf("MEMC_PAGE(%d): W %08x: log %x to phys %x, MEMC %d, perms %d\n", a310_pagesize, data, log, phys, memc, perms);
322368}
323369
324370static ADDRESS_MAP_START( a310_mem, ADDRESS_SPACE_PROGRAM, 32 )
r828r829
477523
478524/*    YEAR  NAME  PARENT COMPAT    MACHINE  INPUT    INIT  CONFIG  COMPANY   FULLNAME */
479525COMP( 1988, a310, 0,     0,      a310,    a310,  a310, NULL,   "Acorn", "Archimedes 310", GAME_NOT_WORKING)
480
481
482

Previous 15994 Revisions Next


© 1998-2018 The MESS Team