Previous 15994 Revisions Next

r8409 Tuesday 6th July, 2010 at 23:52:24 UTC by Fabio Priuli
Added skeleton driver for the Toshiba PASOPIA 7
[src/mess]mess.mak messdriv.c
[src/mess/drivers]pasopia.c*

src/mess/messdriv.c
r8408r8409
17001700   DRIVER( pegasusm )
17011701   DRIVER( e01 )
17021702   DRIVER( e01s )
1703   DRIVER( pasopia7 )
17031704
17041705#endif /* DRIVER_RECURSIVE */
src/mess/mess.mak
r8408r8409
16381638   $(MESS_DRIVERS)/msbc1.o      \
16391639   $(MESS_DRIVERS)/nanos.o      \
16401640   $(MESS_DRIVERS)/next.o      \
1641   $(MESS_DRIVERS)/pasopia.o   \
16411642   $(MESS_DRIVERS)/p8k.o      \
16421643   $(MESS_DRIVERS)/pegasus.o   \
16431644   $(MESS_VIDEO)/pegasus.o    \
src/mess/drivers/pasopia.c
r0r8409
1/***************************************************************************
2
3        Toshiba PASOPIA / PASOPIA7 emulation
4
5        Skeleton driver.
6
7****************************************************************************/
8
9#include "emu.h"
10#include "cpu/z80/z80.h"
11
12// sketchy port 0x3c implementation to see what the CPU does...
13// however, it writes 0x11 - in theory setting BASIC+BIOS in the lower banks
14// and then it writes at 0x0000... maybe bank1 should be RAM? or
15// should we have writes to RAM and only reads to BIOS/BASIC?
16static WRITE8_HANDLER( paso7_bankswitch )
17{
18   UINT8 *cpu = memory_region(space->machine, "maincpu");
19   UINT8 *basic = memory_region(space->machine, "basic");
20
21   if (BIT(data, 0))
22   {
23      memory_unmap_write(space, 0x0000, 0x7fff, 0, 0);
24      memory_set_bankptr(space->machine, "bank1", basic);
25      memory_set_bankptr(space->machine, "bank2", cpu + 0x10000);
26   }
27   else if (BIT(data, 1))
28   {
29      memory_install_write_bank(space, 0x0000, 0x3fff, 0, 0, "bank1");
30      memory_install_write_bank(space, 0x4000, 0x7fff, 0, 0, "bank2");
31      memory_set_bankptr(space->machine, "bank1", cpu);
32      memory_set_bankptr(space->machine, "bank2", cpu + 0x4000);
33   }
34   else
35   {
36      memory_unmap_write(space, 0x0000, 0x7fff, 0, 0);
37      memory_set_bankptr(space->machine, "bank1", cpu + 0x10000);
38      memory_set_bankptr(space->machine, "bank2", cpu + 0x10000);
39   }
40
41   if (BIT(data, 2))
42      memory_unmap_readwrite(space, 0x8000, 0xbfff, 0, 0);
43   else
44   {
45      memory_install_write_bank(space, 0x8000, 0xbfff, 0, 0, "bank3");
46      memory_set_bankptr(space->machine, "bank3", cpu + 0x8000);
47   }
48   // bit 2 also selects vram
49
50   // bit 3? PIO2 port C
51
52   // bank4 is always RAM
53}
54
55static ADDRESS_MAP_START(paso7_mem, ADDRESS_SPACE_PROGRAM, 8)
56   ADDRESS_MAP_UNMAP_HIGH
57   AM_RANGE( 0x0000, 0x3fff ) AM_RAMBANK("bank1")
58   AM_RANGE( 0x4000, 0x7fff ) AM_RAMBANK("bank2")
59   AM_RANGE( 0x8000, 0xbfff ) AM_RAMBANK("bank3")
60   AM_RANGE( 0xc000, 0xffff ) AM_RAMBANK("bank4")
61ADDRESS_MAP_END
62
63static ADDRESS_MAP_START( paso7_io , ADDRESS_SPACE_IO, 8)
64   ADDRESS_MAP_UNMAP_HIGH
65   ADDRESS_MAP_GLOBAL_MASK(0xff)
66   AM_RANGE( 0x3c, 0x3c ) AM_WRITE(paso7_bankswitch)
67#if 0
68   AM_RANGE( 0x08, 0x0b )  // PIO0
69   AM_RANGE( 0x0c, 0x0f )  // PIO1
70   AM_RANGE( 0x10, 0x11 )  // CRTC
71   AM_RANGE( 0x20, 0x23 )  // PIO2
72   AM_RANGE( 0x28, 0x2b )  // CTC
73   AM_RANGE( 0x3a, 0x3a )  // PSG0
74   AM_RANGE( 0x3b, 0x3b )  // PSG1
75   AM_RANGE( 0xe0, 0xe6 )  // FLOPPY
76#endif   
77ADDRESS_MAP_END
78
79/* Input ports */
80static INPUT_PORTS_START( paso7 )
81INPUT_PORTS_END
82
83static MACHINE_RESET( paso7 )
84{
85}
86
87static VIDEO_START( paso7 )
88{
89}
90
91static VIDEO_UPDATE( paso7 )
92{
93    return 0;
94}
95
96static MACHINE_DRIVER_START( paso7 )
97    /* basic machine hardware */
98    MDRV_CPU_ADD("maincpu",Z80, XTAL_4MHz)
99    MDRV_CPU_PROGRAM_MAP(paso7_mem)
100    MDRV_CPU_IO_MAP(paso7_io)
101
102    MDRV_MACHINE_RESET(paso7)
103
104    /* video hardware */
105    MDRV_SCREEN_ADD("screen", RASTER)
106    MDRV_SCREEN_REFRESH_RATE(50)
107    MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
108    MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
109    MDRV_SCREEN_SIZE(640, 480)
110    MDRV_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
111    MDRV_PALETTE_LENGTH(2)
112    MDRV_PALETTE_INIT(black_and_white)
113
114    MDRV_VIDEO_START(paso7)
115    MDRV_VIDEO_UPDATE(paso7)
116MACHINE_DRIVER_END
117
118/* ROM definition */
119ROM_START( pasopia7 )
120   ROM_REGION( 0x14000, "maincpu", ROMREGION_ERASEFF )
121   ROM_LOAD( "bios.rom", 0x10000, 0x4000, CRC(b8111407) SHA1(ac93ae62db4c67de815f45de98c79cfa1313857d))
122
123   ROM_REGION( 0x8000, "basic", ROMREGION_ERASEFF )
124   ROM_LOAD( "basic.rom", 0x0000, 0x8000, CRC(8a58fab6) SHA1(5e1a91dfb293bca5cf145b0a0c63217f04003ed1))
125
126   ROM_REGION( 0x800, "font", ROMREGION_ERASEFF )
127   ROM_LOAD( "font.rom", 0x0000, 0x0800, CRC(a91c45a9) SHA1(a472adf791b9bac3dfa6437662e1a9e94a88b412))
128
129   ROM_REGION( 0x20000, "kanji", ROMREGION_ERASEFF )
130   ROM_LOAD( "kanji.rom", 0x0000, 0x20000, CRC(6109e308) SHA1(5c21cf1f241ef1fa0b41009ea41e81771729785f))
131ROM_END
132
133static DRIVER_INIT( paso7 )
134{
135   UINT8 *bios = memory_region(machine, "maincpu");
136   const address_space *space = cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM);
137
138   memory_unmap_write(space, 0x0000, 0xbfff, 0, 0);
139   memory_set_bankptr(machine, "bank1", bios + 0x10000);
140   memory_set_bankptr(machine, "bank2", bios + 0x10000);
141   memory_set_bankptr(machine, "bank3", bios + 0x10000);
142//   memory_set_bankptr(machine, "bank4", bios + 0x10000);
143}
144
145/* Driver */
146
147/*    YEAR  NAME    PARENT  COMPAT   MACHINE    INPUT    INIT     COMPANY   FULLNAME       FLAGS */
148COMP( 19??, pasopia7,  0,       0,     paso7,   paso7,   paso7,   "Toshiba",   "PASOPIA 7", GAME_NOT_WORKING | GAME_NO_SOUND )

Previous 15994 Revisions Next


© 1998-2018 The MESS Team