Previous 15994 Revisions Next

r8577 Wednesday 21st July, 2010 at 21:09:25 UTC by Wilbert Pol
[3DO] Implemented some SVF features.
[src/mess/machine]3do.c

src/mess/machine/3do.c
r8576r8577
3737- init registers for entry to sherry
3838- jump to sherry
3939
40- 00000934 check svf sport interface?
41  000009cc
42
43svf
446100 - 0110 0001 0000 0000 S = 0, A = 001 0000 0000
456900 - 0110 1001 0000 0000
46
4047*/
4148
4249#include "emu.h"
r8576r8577
183190} CLIO;
184191
185192
193typedef struct {
194   UINT32   sport[512];
195   UINT32   color;
196} SVF;
197
198
186199static SLOW2   slow2;
187200static MADAM   madam;
188201static CLIO      clio;
189static UINT32   svf_color;
202static SVF      svf;
190203
191204
192205READ32_HANDLER( _3do_nvarea_r ) {
r8576r8577
270283
271284READ32_HANDLER( _3do_svf_r )
272285{
286   _3do_state *state = (_3do_state *)space->machine->driver_data;
287   UINT32 addr = ( offset & ( 0x07fc / 4 ) ) << 9;
288   UINT32 *p = ( addr & 0x200000 ) ? state->vram + ( addr & 0xfffff ) : state->dram + ( addr & 0xfffff );
289
273290   logerror( "%08X: SVF read offset = %08X\n", cpu_get_pc(space->machine->device("maincpu")), offset*4 );
291
274292   switch( offset & ( 0xE000 / 4 ) )
275293   {
276294   case 0x0000/4:      /* SPORT transfer */
295      for ( int i = 0; i < 512; i++ )
296      {
297         svf.sport[i] = p[i];
298      }
277299      break;
278300   case 0x2000/4:      /* Write to color register */
279      return svf_color;
301      return svf.color;
280302   case 0x4000/4:      /* Flash write */
281303      break;
282304   case 0x6000/4:      /* CAS before RAS refresh/reset (CBR). Used to initialize VRAM mode during boot. */
r8576r8577
287309
288310WRITE32_HANDLER( _3do_svf_w )
289311{
312   _3do_state *state = (_3do_state *)space->machine->driver_data;
313   /* Somehow we end up writing to the RAM locations for SPORT. This is probably not correct. Need to investigate the memory config setup routines */
314   UINT32 addr = ( offset & ( 0x07fc / 4 ) ) << 9;
315   UINT32 *p = ( addr & 0x200000 ) ? state->vram + ( addr & 0xfffff ) : state->dram + ( addr & 0xfffff );
316
290317   logerror( "%08X: SVF write offset = %08X, data = %08X, mask = %08X\n", cpu_get_pc(space->machine->device("maincpu")), offset*4, data, mem_mask );
318
291319   switch( offset & ( 0xe000 / 4 ) )
292320   {
293321   case 0x0000/4:      /* SPORT transfer */
322      for ( int i = 0; i < 512; i++ )
323      {
324         p[i] = svf.sport[i];
325      }
294326      break;
295327   case 0x2000/4:      /* Write to color register */
296      svf_color = data;
328      svf.color = data;
297329      break;
298330   case 0x4000/4:      /* Flash write */
331      for ( int i = 0; i < 512; i++ )
332      {
333         p[i] = svf.color;
334      }
299335      break;
300336   case 0x6000/4:      /* CAS before RAS refresh/reset (CBR). Used to initialize VRAM mode during boot. */
301337      break;
r8576r8577
645681{
646682   memset( &madam, 0, sizeof(MADAM) );
647683   madam.revision = 0x01020000;
684   madam.msysbits = 0x51;
648685}
649686
650687
r8576r8577
665702   case 0x0030/4:
666703      return clio.screen->hpos();
667704   case 0x0034/4:
668      return clio.screen->vpos();
705      /* This needs to moved to a proper timer callback function */
706      if ( clio.screen->vpos() == 0 )
707      {
708         clio.vcnt ^= 0x800;
709      }
710      return ( clio.vcnt & 0x800 ) | clio.screen->vpos();
669711   case 0x0038/4:
670712      return clio.seed;
671713   case 0x003c/4:

Previous 15994 Revisions Next


© 1998-2018 The MESS Team