Previous 199869 Revisions Next

r20172 Thursday 10th January, 2013 at 01:50:29 UTC by Angelo Salese
NVRAM hook-up
[src/mame/drivers]3do.c
[src/mame/includes]3do.h
[src/mame/machine]3do.c

trunk/src/mame/machine/3do.c
r20171r20172
133133      {
134134         m_clio.timer_count[i]--;
135135
136         if(m_clio.timer_count[i] == 0) // timer hit
136         if(m_clio.timer_count[i] == 0xffffffff) // timer hit
137137         {
138138            if(i & 1) // odd timer irq fires
139139               m_3do_request_fiq(8 << (7-(i >> 1)),0);
r20171r20172
141141            if(timer_flag & 2)
142142               m_clio.timer_count[i] = m_clio.timer_backup[i];
143143            else
144               m_clio.timer_ctrl &= (~1 << i*4);
144               m_clio.timer_ctrl &= ~(1 << i*4);
145145         }
146146      }
147147   }
148148}
149149
150READ32_MEMBER(_3do_state::_3do_nvarea_r){
151   logerror( "%08X: NVRAM read offset = %08X\n", machine().device("maincpu")->safe_pc(), offset );
152   return 0;
153}
150READ8_MEMBER(_3do_state::_3do_nvarea_r) { return m_nvram[offset]; }
151WRITE8_MEMBER(_3do_state::_3do_nvarea_w) { m_nvram[offset] = data; }
154152
155WRITE32_MEMBER(_3do_state::_3do_nvarea_w){
156   logerror( "%08X: NVRAM write offset = %08X, data = %08X, mask = %08X\n", machine().device("maincpu")->safe_pc(), offset, data, mem_mask );
157}
158153
159154
160
161155/*
162156    I have no idea what piece of hardware this is. Possibly some kind of communication hardware using shift registers.
163157
r20171r20172
642636READ32_MEMBER(_3do_state::_3do_clio_r)
643637{
644638   if (!space.debugger_access())
645      logerror( "%08X: CLIO read offset = %08X\n", machine().device("maincpu")->safe_pc(), offset * 4 );
639      if(offset != 0x40/4 && offset != 0x44/4 && offset != 0x48/4 && offset != 0x4c/4)
640         logerror( "%08X: CLIO read offset = %08X\n", machine().device("maincpu")->safe_pc(), offset * 4 );
646641
647642   switch( offset )
648643   {
r20171r20172
746741
747742WRITE32_MEMBER(_3do_state::_3do_clio_w)
748743{
749   logerror( "%08X: CLIO write offset = %08X, data = %08X, mask = %08X\n", machine().device("maincpu")->safe_pc(), offset*4, data, mem_mask );
744   if(offset != 0x40/4 && offset != 0x44/4 && offset != 0x48/4 && offset != 0x4c/4)
745      logerror( "%08X: CLIO write offset = %08X, data = %08X, mask = %08X\n", machine().device("maincpu")->safe_pc(), offset*4, data, mem_mask );
750746
751747   switch( offset )
752748   {
r20171r20172
844840      m_clio.adbctl = data;
845841      break;
846842
847   /* only lower 16-bits are uploaded */
843   /* only lower 16-bits can be written */
848844   case 0x0100/4:   case 0x0108/4:   case 0x0110/4:   case 0x0118/4:
849845   case 0x0120/4:   case 0x0128/4:   case 0x0130/4:   case 0x0138/4:
850846   case 0x0140/4:   case 0x0148/4:   case 0x0150/4:  case 0x0158/4:
trunk/src/mame/includes/3do.h
r20171r20172
142142   MADAM m_madam;
143143   CLIO m_clio;
144144   SVF m_svf;
145   UINT8 m_nvram[0x8000];
145146//   UINT8 m_video_bits[512];
146   DECLARE_READ32_MEMBER(_3do_nvarea_r);
147   DECLARE_WRITE32_MEMBER(_3do_nvarea_w);
147   DECLARE_READ8_MEMBER(_3do_nvarea_r);
148   DECLARE_WRITE8_MEMBER(_3do_nvarea_w);
148149   DECLARE_READ32_MEMBER(_3do_slow2_r);
149150   DECLARE_WRITE32_MEMBER(_3do_slow2_w);
150151   DECLARE_READ32_MEMBER(_3do_svf_r);
trunk/src/mame/drivers/3do.c
r20171r20172
9898#include "cpu/arm7/arm7.h"
9999
100100
101
101102#define X2_CLOCK_PAL   59000000
102103#define X2_CLOCK_NTSC   49090000
103104#define X601_CLOCK      XTAL_16_9344MHz
r20171r20172
108109   AM_RANGE(0x00200000, 0x003FFFFF) AM_RAM   AM_SHARE("vram")                           /* VRAM */
109110   AM_RANGE(0x03000000, 0x030FFFFF) AM_ROMBANK("bank2")                           /* BIOS */
110111   AM_RANGE(0x03100000, 0x0313FFFF) AM_RAM                                       /* Brooktree? */
111   AM_RANGE(0x03140000, 0x0315FFFF) AM_READWRITE(_3do_nvarea_r, _3do_nvarea_w)            /* NVRAM */
112   AM_RANGE(0x03140000, 0x0315FFFF) AM_READWRITE8(_3do_nvarea_r, _3do_nvarea_w, 0x000000ff)            /* NVRAM */
112113   AM_RANGE(0x03180000, 0x031BFFFF) AM_READWRITE(_3do_slow2_r, _3do_slow2_w)            /* Slow bus - additional expansion */
113114   AM_RANGE(0x03200000, 0x0320FFFF) AM_READWRITE(_3do_svf_r, _3do_svf_w)               /* special vram access1 */
114115   AM_RANGE(0x03300000, 0x033FFFFF) AM_READWRITE(_3do_madam_r, _3do_madam_w)            /* address decoder */
r20171r20172
151152   NULL
152153};
153154
155static NVRAM_HANDLER( _3do )
156{
157   _3do_state *state = machine.driver_data<_3do_state>();
158   UINT8 *nvram = state->m_nvram;
159
160   if (read_or_write)
161      file->write(nvram,0x8000);
162   else
163   {
164      if (file)
165         file->read(nvram,0x8000);
166      else
167      {
168         /* fill in the default values */
169         memset(nvram,0xff,0x8000);
170      }
171   }
172}
173
154174static MACHINE_CONFIG_START( 3do, _3do_state )
155175
156176   /* Basic machine hardware */
157177   MCFG_CPU_ADD( "maincpu", ARM7_BE, XTAL_50MHz/4 )
158178   MCFG_CPU_PROGRAM_MAP( 3do_mem)
159179
180   MCFG_NVRAM_HANDLER(_3do)
181
160182   MCFG_TIMER_DRIVER_ADD_PERIODIC("timer_x16", _3do_state, timer_x16_cb, attotime::from_hz(12000)) // TODO: timing
161183
162184   MCFG_VIDEO_START_OVERRIDE(_3do_state, _3do )

Previous 199869 Revisions Next


© 1997-2024 The MAME Team