Previous 15994 Revisions Next

r7808 Thursday 15th April, 2010 at 11:44:56 UTC by Curt Coder
[PX8] Added layout, some GAH40x logic, improved memory banking.
[src/mess]mess.mak
[src/mess/drivers]px8.c
[src/mess/includes]px8.h
[src/mess/layout]px8.lay*

src/mess/includes/px8.h
r7807r7808
1919
2020   px8_state(running_machine &machine) { }
2121
22   /* interrupt state */
23   UINT8 ier;
24   UINT8 isr;
22   /* GAH40M state */
23   UINT16 icr;            /* input capture register */
24   UINT16 frc;            /* free running counter */
25   UINT8 ier;            /* interrupt acknowledge register */
26   UINT8 isr;            /* interrupt status register */
27   UINT8 sio;            /* serial I/O register */
28   int bank0;            /* */
2529
30   /* GAH40S state */
31   UINT16 cnt;            /* microcassette tape counter */
32   int swpr;            /* P-ROM power switch */
33   UINT16 pra;            /* P-ROM address */
34   UINT8 prd;            /* P-ROM data */
35
2636   /* memory state */
27   int bank0;
28   int bk2;
37   int bk2;            /* */
2938
30   /* serial state */
31   UINT8 sio;
32
3339   /* keyboard state */
34   int ksc;
40   int ksc;            /* keyboard scan column */
3541
3642   /* video state */
3743   UINT8 *video_ram;      /* LCD video RAM */
src/mess/layout/px8.lay
r0r7808
1<?xml version="1.0"?>
2<mamelayout version="2">
3   <element name="background">
4   </element>
5   <element name="led" defstate="0">
6      <rect state="0">
7         <color red="0" green="0.2" blue="0" />
8      </rect>
9      <rect state="1">
10         <color red="0" green="0.8" blue="0" />
11      </rect>
12   </element>
13   <view name="LCD with square pixels">
14      <bezel element="background">
15         <bounds x="0" y="0" width="128" height="16" />
16      </bezel>
17      <screen index="0">
18         <bounds left="0" top="0" right="120" bottom="16" />
19      </screen>
20      <bezel name="led_0" element="led">
21         <bounds x="122" y="1" width="4" height="1" />
22      </bezel>
23      <bezel name="led_1" element="led">
24         <bounds x="122" y="3" width="4" height="1" />
25      </bezel>
26      <bezel name="led_2" element="led">
27         <bounds x="122" y="5" width="4" height="1" />
28      </bezel>
29   </view>
30</mamelayout>
src/mess/mess.mak
r7807r7808
17091709$(MESS_DRIVERS)/poly880.o:   $(MESS_LAYOUT)/poly880.lh
17101710$(MESS_VIDEO)/pc8401a.o:   $(MESS_LAYOUT)/pc8500.lh
17111711$(MESS_DRIVERS)/px4.o:      $(MESS_LAYOUT)/px4.lh
1712$(MESS_DRIVERS)/px8.o:      $(MESS_LAYOUT)/px8.lh
17121713$(MESS_DRIVERS)/sms.o:      $(MESS_LAYOUT)/sms1.lh
17131714$(MESS_DRIVERS)/stopthie.o:   $(MESS_LAYOUT)/stopthie.lh
17141715$(MESS_DRIVERS)/super80.o:   $(MESS_LAYOUT)/super80.lh
src/mess/drivers/px8.c
r7807r7808
3838#include "machine/pf10.h"
3939#include "sound/wave.h"
4040#include "video/sed1330.h"
41#include "px8.lh"
4142
4243/***************************************************************************
4344    CONSTANTS
r7807r7808
5657
5758enum
5859{
59   GAH40_CTLR1 = 0,
60   GAH40_CMDR,
61   GAH40_CTLR2,
62   GAH40_IER = 4,
60   GAH40M_CTLR1 = 0,
61   GAH40M_CMDR,
62   GAH40M_CTLR2,
63   GAH40M_IER = 4,
6364};
6465
6566enum
6667{
67   GAH40_ICRL_C = 0,
68   GAH40_ICRH_C,
69   GAH40_ICRL_B,
70   GAH40_ICRH_B,
71   GAH40_ISR,
72   GAH40_STR,
73   GAH40_SIOR,
74   GAH40_IVR
68   GAH40M_ICRL_C = 0,
69   GAH40M_ICRH_C,
70   GAH40M_ICRL_B,
71   GAH40M_ICRH_B,
72   GAH40M_ISR,
73   GAH40M_STR,
74   GAH40M_SIOR,
75   GAH40M_IVR
7576};
7677
7778/***************************************************************************
7879    READ/WRITE HANDLERS
7980***************************************************************************/
8081
82/*-------------------------------------------------
83    bankswitch - memory bankswitching
84-------------------------------------------------*/
85
8186static void bankswitch(running_machine *machine)
8287{
8388   px8_state *state = (px8_state *)machine->driver_data;
84   int bank = (state->bk2 << 1) | state->bank0;
89   const address_space *program = cputag_get_address_space(machine, UPD70008_TAG, ADDRESS_SPACE_PROGRAM);
90   UINT8 *ram = messram_get_ptr(devtag_get_device(machine, "messram"));
91   UINT8 *ipl_rom = memory_region(machine, UPD70008_TAG);
8592
86   memory_set_bank(machine, "bank0", bank);
87   memory_set_bank(machine, "bank1", bank);
93   if (!state->bank0)
94   {
95      /* IPL ROM */
96      memory_install_rom(program, 0x0000, 0x7fff, 0, 0, ipl_rom);
97   }
98   else
99   {
100      if (state->bk2)
101      {
102         /* D-RAM (L) */
103         memory_install_ram(program, 0x0000, 0x7fff, 0, 0, ram);
104      }
105      else
106      {
107         /* OPTION ROM (L) */
108         memory_unmap_readwrite(program, 0x0000, 0x7fff, 0, 0);
109      }
110   }
111
112   if (state->bk2)
113   {
114      /* D-RAM (H) */
115      memory_install_ram(program, 0x8000, 0xffff, 0, 0, ram + 0x8000);
116   }
117   else
118   {
119      /* OPTION ROM (H) */
120      memory_unmap_readwrite(program, 0x8000, 0xffff, 0, 0);
121   }
88122}
89123
124/*-------------------------------------------------
125    gah40m_r - GAH40M read
126-------------------------------------------------*/
127
90128static READ8_HANDLER( gah40m_r )
91129{
92130   switch (offset)
93131   {
94   case GAH40_ICRL_C:
132   case GAH40M_ICRL_C:
95133      /*
96134
97135         bit      signal      description
r7807r7808
108146      */
109147      break;
110148
111   case GAH40_ICRH_C:
149   case GAH40M_ICRH_C:
112150      /*
113151
114152         bit      signal      description
r7807r7808
125163      */
126164      break;
127165
128   case GAH40_ICRL_B:
166   case GAH40M_ICRL_B:
129167      /*
130168
131169         bit      signal      description
r7807r7808
142180      */
143181      break;
144182
145   case GAH40_ICRH_B:
183   case GAH40M_ICRH_B:
146184      /*
147185
148186         bit      signal      description
r7807r7808
159197      */
160198      break;
161199
162   case GAH40_ISR:
200   case GAH40M_ISR:
163201      /*
164202
165203         bit      signal      description
r7807r7808
176214      */
177215      break;
178216
179   case GAH40_STR:
217   case GAH40M_STR:
180218      /*
181219
182220         bit      signal      description
r7807r7808
193231      */
194232      break;
195233
196   case GAH40_SIOR:
234   case GAH40M_SIOR:
197235      /*
198236
199237         bit      signal      description
r7807r7808
210248      */
211249      break;
212250
213   case GAH40_IVR:
251   case GAH40M_IVR:
214252      /*
215253
216254         bit      description
r7807r7808
231269   return 0xff;
232270}
233271
272/*-------------------------------------------------
273    gah40m_w - GAH40M write
274-------------------------------------------------*/
275
234276static WRITE8_HANDLER( gah40m_w )
235277{
236278   px8_state *state = (px8_state *)space->machine->driver_data;
237279
238280   switch (offset)
239281   {
240   case GAH40_CTLR1:
282   case GAH40M_CTLR1:
241283      /*
242284
243285         bit      signal      description
r7807r7808
257299      bankswitch(space->machine);
258300      break;
259301
260   case GAH40_CMDR:
302   case GAH40M_CMDR:
261303      /*
262304
263305         bit      description
r7807r7808
274316      */
275317      break;
276318
277   case GAH40_CTLR2:
319   case GAH40M_CTLR2:
278320      /*
279321
280322         bit      signal      description
r7807r7808
290332
291333      */
292334
293/*      output_set_value("led_0", BIT(data, 0));
335      output_set_value("led_0", BIT(data, 0));
294336      output_set_value("led_1", BIT(data, 1));
295      output_set_value("led_2", BIT(data, 2));*/
337      output_set_value("led_2", BIT(data, 2));
296338      break;
297339
298   case GAH40_IER:
340   case GAH40M_IER:
299341      /*
300342
301343         bit      signal      description
r7807r7808
314356      state->ier = data;
315357      break;
316358
317   case GAH40_SIOR:
359   case GAH40M_SIOR:
318360      /*
319361
320362         bit      signal      description
r7807r7808
335377   }
336378}
337379
380/*-------------------------------------------------
381    gah40s_r - GAH40S read
382-------------------------------------------------*/
383
338384static READ8_HANDLER( gah40s_r )
339385{
386   px8_state *state = (px8_state *)space->machine->driver_data;
387   UINT8 data = 0xff;
388
340389   switch (offset)
341390   {
342   case 0:
391   case 0: /* counter (upper byte) input */
392      data = (state->cnt >> 8) & 0x1f;
343393      break;
344394
345   case 1:
395   case 1: /* counter (lower byte) */
396      data = state->cnt & 0xff;
346397      break;
347398
348   case 2:
399   case 3: /* P-ROM read data */
400      data = state->prd;
349401      break;
350
351   case 3:
352      break;
353402   }
354403
355   return 0xff;
404   return data;
356405}
357406
407/*-------------------------------------------------
408    gah40s_w - GAH40S write
409-------------------------------------------------*/
410
358411static WRITE8_HANDLER( gah40s_w )
359412{
413   px8_state *state = (px8_state *)space->machine->driver_data;
414
360415   switch (offset)
361416   {
362   case 0:
417   case 0: /* counter reset */
418      state->cnt = 0;
363419      break;
364420
365   case 1:
421   case 1: /* command register */
422      /*
423
424         bit      signal      description
425
426         0      SW PR      PROM power switch
427         1      SW MCT      microcassette power switch
428         2      MTA         microcassette drive motor control signal A
429         3      MTB         microcassette drive motor control signal B
430         4      MTC         microcassette drive motor control signal C
431         5     
432         6      _FAST     
433         7      _STOP CNT   
434
435      */
436
437      state->swpr = BIT(data, 0);
366438      break;
367439
368   case 2:
440   case 2: /* P-ROM address (upper 8 byte) */
441      state->pra = (data << 8) | (state->pra & 0xff);
442      state->prd = 0; // TODO read prom!
369443      break;
370444
371   case 3:
445   case 3: /* P-ROM address (lower 8 byte) */
446      state->pra = (state->pra & 0xff00) | data;
447      state->prd = 0; // TODO read prom!
372448      break;
373449   }
374450}
375451
452/*-------------------------------------------------
453    gah40s_ier_w - interrupt enable register write
454-------------------------------------------------*/
455
376456static WRITE8_HANDLER( gah40s_ier_w )
377457{
458   px8_state *state = (px8_state *)space->machine->driver_data;
459
460   state->ier = data;
378461}
379462
380463/*-------------------------------------------------
r7807r7808
743826   state->sed1320 = devtag_get_device(machine, SED1320_TAG);
744827   state->cassette = devtag_get_device(machine, CASSETTE_TAG);
745828
746   /* setup memory banking */
747   UINT8 *ram = messram_get_ptr(devtag_get_device(machine, "messram"));
748   UINT8 *ipl_rom = memory_region(machine, UPD70008_TAG);
749   UINT8 *option_rom = NULL; // fixme
750
751   memory_configure_bank(machine, "bank0", 0, 1, ipl_rom, 0);
752   memory_configure_bank(machine, "bank0", 1, 1, option_rom, 0);
753   memory_configure_bank(machine, "bank0", 2, 1, ipl_rom, 0);
754   memory_configure_bank(machine, "bank0", 3, 1, ram, 0);
755
756   memory_configure_bank(machine, "bank1", 0, 2, option_rom + 0x8000, 0);
757   memory_configure_bank(machine, "bank1", 2, 2, ram + 0x8000, 0);
758
759829   /* register for state saving */
760830   state_save_register_global(machine, state->ier);
761831   state_save_register_global(machine, state->isr);
r7807r7808
800870   MDRV_MACHINE_RESET(px8)
801871
802872   /* video hardware */
873   MDRV_DEFAULT_LAYOUT(layout_px8)
874
803875   MDRV_SCREEN_ADD(SCREEN_TAG, LCD)
804876   MDRV_SCREEN_REFRESH_RATE(72)
805877   MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)

Previous 15994 Revisions Next


© 1998-2018 The MESS Team