Previous 15994 Revisions Next

r1002 Tuesday 18th September, 2007 at 16:55:48 UTC by Wilbert Pol
[PCE] Added CD unit RAM to the memory maps. Added proper region for CD unit BRAM. Added support for locking and unlocking of BRAM.
[src/mess/drivers]pce.c
[src/mess/includes]pce.h
[src/mess/machine]pce.c

src/mess/includes/pce.h
r1001r1002
1313
1414/* from machine\pce.c */
1515extern unsigned char *pce_user_ram; /* scratch RAM at F8 */
16extern UINT8 *pce_nvram;
16extern UINT8 *pce_cd_ram;
1717DEVICE_LOAD(pce_cart);
1818NVRAM_HANDLER( pce );
1919WRITE8_HANDLER ( pce_joystick_w );
2020 READ8_HANDLER ( pce_joystick_r );
2121
22WRITE8_HANDLER( pce_cd_bram_w );
2223WRITE8_HANDLER( pce_cd_intf_w );
2324READ8_HANDLER( pce_cd_intf_r );
2425
src/mess/machine/pce.c
r1001r1002
77
88/* the largest possible cartridge image (street fighter 2 - 2.5MB) */
99#define PCE_ROM_MAXSIZE  (0x280000)
10#define PCE_BRAM_SIZE   0x800
1011
1112/* system RAM */
1213unsigned char *pce_user_ram;    /* scratch RAM at F8 */
13UINT8   *pce_nvram;
1414
15/* CD Unit RAM */
16UINT8   *pce_cd_ram;         /* 64KB RAM from a CD unit */
17static UINT8   *pce_cd_bram;
18static int      pce_cd_bram_locked;
19
1520struct pce_struct pce;
1621
1722static UINT8 *cartridge_ram;
r1001r1002
118123   memory_set_bankptr( 1, ROM );
119124   memory_set_bankptr( 2, ROM + 0x080000 );
120125   memory_set_bankptr( 3, ROM + 0x088000 );
121   memory_set_bankptr( 4, ROM + 0x100000 );
122126
123127   /* Check for Street fighter 2 */
124128   if ( size == PCE_ROM_MAXSIZE ) {
r1001r1002
131135      memory_set_bankptr( 2, cartridge_ram );
132136      memory_install_write8_handler( 0, ADDRESS_SPACE_PROGRAM, 0x080000, 0x087FFF, 0, 0, pce_populous_ram_w );
133137   }
138
139   /* Check for CD system card */
140   if ( ! memcmp( ROM + 0x3FFB6, "PC Engine CD-ROM SYSTEM", 23 ) ) {
141      /* Check for additional system card ram here */
142   }
134143   return 0;
135144}
136145
r1001r1002
138147{
139148   if (read_or_write)
140149   {
141      mame_fwrite(file, pce_nvram, 0x2000);
150      mame_fwrite(file, pce_cd_bram, PCE_BRAM_SIZE);
142151   }
143152   else
144153   {
145154       /* load battery backed memory from disk */
146      memset(pce_nvram, 0, 0x2000);
155      memset(pce_cd_bram, 0, PCE_BRAM_SIZE);
147156      if (file)
148         mame_fread(file, pce_nvram, 0x2000);
157         mame_fread(file, pce_cd_bram, PCE_BRAM_SIZE);
149158   }
150159}
151160
152DRIVER_INIT( pce )
153{
154   pce.io_port_options = NO_CD_SIG | PCE_JOY_SIG | CONST_SIG;
161static void pce_cd_bram_init( void ) {
162   pce_cd_bram = auto_malloc( PCE_BRAM_SIZE * 2 );
163   memset( pce_cd_bram, 0, PCE_BRAM_SIZE );
164   memset( pce_cd_bram + PCE_BRAM_SIZE, 0xFF, PCE_BRAM_SIZE );
165   memory_set_bankptr( 10, pce_cd_bram + PCE_BRAM_SIZE );
166   pce_cd_bram_locked = 1;
155167}
156168
157DRIVER_INIT( tg16 )
158{
159   pce.io_port_options = NO_CD_SIG | TG_16_JOY_SIG | CONST_SIG;
169DRIVER_INIT( pce ) {
170   pce_cd_bram_init();
171   pce.io_port_options = PCE_JOY_SIG | CONST_SIG;
160172}
161173
174DRIVER_INIT( tg16 ) {
175   pce_cd_bram_init();
176   pce.io_port_options = TG_16_JOY_SIG | CONST_SIG;
177}
178
162179DRIVER_INIT( sgx ) {
163   pce.io_port_options = NO_CD_SIG | PCE_JOY_SIG | CONST_SIG;
180   pce_cd_bram_init();
181   pce.io_port_options = PCE_JOY_SIG | CONST_SIG;
164182}
165183
166184/* todo: how many input ports does the PCE have? */
r1001r1002
195213   return (ret);
196214}
197215
216WRITE8_HANDLER( pce_cd_bram_w ) {
217   if ( ! pce_cd_bram_locked ) {
218      pce_cd_bram[ offset ] = data;
219   }
220}
221
198222WRITE8_HANDLER( pce_cd_intf_w ) {
199223   switch( offset & 0x0F ) {
200224   case 0x00:   /* CDC status */
r1001r1002
204228   case 0x04:   /* CD reset */
205229   case 0x05:   /* Convert PCM data / PCM data */
206230   case 0x06:   /* PCM data */
231      break;
207232   case 0x07:   /* BRAM unlock / CD status */
233      if ( data & 0x80 ) {
234         pce_cd_bram_locked = 0;
235         memory_set_bankptr( 10, pce_cd_bram );
236      }
237      break;
208238   case 0x08:   /* ADPCM address (LSB) / CD data */
209239   case 0x09:   /* ADPCM address (MSB) */
210240   case 0x0A:   /* ADPCM RAM data port */
r1001r1002
224254   case 0x00:   /* CDC status */
225255   case 0x01:   /* CDC command / status / data */
226256   case 0x02:   /* ADPCM / CD control */
257      break;
227258   case 0x03:   /* BRAM lock / CD status */
259      pce_cd_bram_locked = 1;
260      memory_set_bankptr( 10, pce_cd_bram + PCE_BRAM_SIZE );
261      break;
228262   case 0x04:   /* CD reset */
229263   case 0x05:   /* Convert PCM data / PCM data */
230264   case 0x06:   /* PCM data */
src/mess/drivers/pce.c
r1001r1002
6666   AM_RANGE( 0x000000, 0x07FFFF) AM_ROMBANK(1)
6767   AM_RANGE( 0x080000, 0x087FFF) AM_ROMBANK(2)
6868   AM_RANGE( 0x088000, 0x0FFFFF) AM_ROMBANK(3)
69   AM_RANGE( 0x100000, 0x1EDFFF) AM_ROMBANK(4)
70   AM_RANGE( 0x1EE000, 0x1EFFFF) AM_RAM AM_BASE( &pce_nvram )
69   AM_RANGE( 0x100000, 0x10FFFF) AM_RAM AM_BASE( &pce_cd_ram )
70   AM_RANGE( 0x110000, 0x1EDFFF) AM_NOP
71   AM_RANGE( 0x1EE000, 0x1EE7FF) AM_ROMBANK(10) AM_WRITE( pce_cd_bram_w )
72   AM_RANGE( 0x1EE800, 0x1EFFFF) AM_NOP
7173   AM_RANGE( 0x1F0000, 0x1F1FFF) AM_RAM AM_MIRROR(0x6000) AM_BASE( &pce_user_ram )
7274   AM_RANGE( 0x1FE000, 0x1FE3FF) AM_READWRITE( vdc_0_r, vdc_0_w )
7375   AM_RANGE( 0x1FE400, 0x1FE7FF) AM_READWRITE( vce_r, vce_w )
r1001r1002
8688   AM_RANGE( 0x000000, 0x07FFFF) AM_ROMBANK(1)
8789   AM_RANGE( 0x080000, 0x087FFF) AM_ROMBANK(2)
8890   AM_RANGE( 0x088000, 0x0FFFFF) AM_ROMBANK(3)
89   AM_RANGE( 0x100000, 0x1EDFFF) AM_ROMBANK(4)
90   AM_RANGE( 0x1EE000, 0x1EFFFF) AM_RAM AM_BASE( &pce_nvram )
91   AM_RANGE( 0x100000, 0x10FFFF) AM_RAM AM_BASE( &pce_cd_ram )
92   AM_RANGE( 0x110000, 0x1EDFFF) AM_NOP
93   AM_RANGE( 0x1EE000, 0x1EE7FF) AM_ROMBANK(10) AM_WRITE( pce_cd_bram_w )
94   AM_RANGE( 0x1EE800, 0x1EFFFF) AM_NOP
9195   AM_RANGE( 0x1F0000, 0x1F7FFF) AM_RAM AM_BASE( &pce_user_ram )
9296   AM_RANGE( 0x1FE000, 0x1FE007) AM_READWRITE( vdc_0_r, vdc_0_w ) AM_MIRROR(0x03E0)
9397   AM_RANGE( 0x1FE008, 0x1FE00F) AM_READWRITE( vpc_r, vpc_w ) AM_MIRROR(0x03E0)

Previous 15994 Revisions Next


© 1998-2018 The MESS Team