Previous 199869 Revisions Next

r17495 Monday 27th August, 2012 at 03:31:35 UTC by Angelo Salese
Written it up, but it still doesn't work
[src/emu/machine]m6m80011ap.c m6m80011ap.h
[src/mame/drivers]nss.c

trunk/src/mame/drivers/nss.c
r17494r17495
866866
867867
868868
869
869870ROM_START( nss )
870871   NSS_BIOS
871872   ROM_REGION( 0x100000, "user3", ROMREGION_ERASEFF )
trunk/src/emu/machine/m6m80011ap.c
r17494r17495
2626//-------------------------------------------------
2727
2828m6m80011ap_device::m6m80011ap_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
29   : device_t(mconfig, M6M80011AP, "m6m80011ap", tag, owner, clock)
29   : device_t(mconfig, M6M80011AP, "m6m80011ap", tag, owner, clock),
30     device_nvram_interface(mconfig, *this)
3031{
3132
3233}
r17494r17495
6061{
6162}
6263
64//-------------------------------------------------
65//  nvram_default - called to initialize NVRAM to
66//  its default state
67//-------------------------------------------------
6368
69void m6m80011ap_device::nvram_default()
70{
71   for (offs_t offs = 0; offs < 0x80; offs++)
72      m_eeprom_data[offs] = 0xffff;
73}
74
75
76
77
78//-------------------------------------------------
79//  nvram_read - called to read NVRAM from the
80//  .nv file
81//-------------------------------------------------
82
83void m6m80011ap_device::nvram_read(emu_file &file)
84{
85   file.read(m_eeprom_data, 0x100);
86}
87
88
89//-------------------------------------------------
90//  nvram_write - called to write NVRAM to the
91//  .nv file
92//-------------------------------------------------
93
94void m6m80011ap_device::nvram_write(emu_file &file)
95{
96   file.write(m_eeprom_data, 0x100);
97}
98
6499//**************************************************************************
65100//  READ/WRITE HANDLERS
66101//**************************************************************************
r17494r17495
68103
69104READ_LINE_MEMBER( m6m80011ap_device::read_bit )
70105{
71   return 0;
106   return m_read_latch;
72107}
73108
74109READ_LINE_MEMBER( m6m80011ap_device::ready_line )
r17494r17495
78113
79114WRITE_LINE_MEMBER( m6m80011ap_device::set_cs_line )
80115{
116   m_reset_line = state;
81117
118   if (m_reset_line != CLEAR_LINE)
119   {
120      m_eeprom_state = EEPROM_GET_CMD;
121      m_cmd_stream_pos = 0;
122      m_current_cmd = 0;
123   }
82124}
83125
84WRITE_LINE_MEMBER( m6m80011ap_device::set_clock_line )
126
127WRITE_LINE_MEMBER( m6m80011ap_device::write_bit )
85128{
86
129   m_latch = state;
87130}
88131
89WRITE_LINE_MEMBER( m6m80011ap_device::write_bit )
132WRITE_LINE_MEMBER( m6m80011ap_device::set_clock_line )
90133{
134   if (m_reset_line == CLEAR_LINE)
135   {
136      if(state == 1)
137      {
138         switch(m_eeprom_state)
139         {
140            case EEPROM_GET_CMD:
141               m_current_cmd = (m_current_cmd >> 1) | ((m_latch & 1)<< 7);
142               m_cmd_stream_pos++;
91143
144               if (m_cmd_stream_pos==8)
145               {
146                  m_cmd_stream_pos = 0;
147                  switch(m_current_cmd)
148                  {
149                     case 0xc5: m_eeprom_state = EEPROM_WRITE_ENABLE; break;
150                     case 0x05: m_eeprom_state = EEPROM_WRITE_DISABLE; break;
151                     case 0x25: m_eeprom_state = EEPROM_WRITE; break;
152                     case 0x15: m_eeprom_state = EEPROM_READ; break;
153                     case 0x95: m_eeprom_state = EEPROM_STATUS_OUTPUT; break;
154                     default:
155                        printf("Write M6M80011 unknown %02x cmd\n",m_current_cmd );
156                        break;
157                  }
158               }
159               break;
160
161            case EEPROM_READ:
162               m_current_cmd = (m_current_cmd >> 1) | ((m_latch & 1)<< 23);
163               m_cmd_stream_pos++;
164
165               if (m_cmd_stream_pos==8)
166               {
167                  m_current_addr = m_current_cmd >> 16;
168               }
169
170               if(m_cmd_stream_pos>=8)
171               {
172                  m_read_latch = (m_eeprom_data[m_current_addr] >> (23-m_cmd_stream_pos)) & 1;
173                  //printf("%d %04x <- %04x %d\n",m_read_latch,m_eeprom_data[m_current_addr],m_current_addr,m_cmd_stream_pos-8);
174               }
175
176               if(m_cmd_stream_pos==24)
177               {
178                  m_eeprom_state = EEPROM_GET_CMD;
179                  m_cmd_stream_pos = 0;
180               }
181               break;
182
183            case EEPROM_WRITE:
184               m_current_cmd = (m_current_cmd >> 1) | ((m_latch & 1)<< 23);
185               m_cmd_stream_pos++;
186
187               if (m_cmd_stream_pos==8)
188               {
189                  m_current_addr = m_current_cmd >> 16;
190               }
191
192               if(m_cmd_stream_pos==24)
193               {
194                  if(m_eeprom_we)
195                     m_eeprom_data[m_current_addr] = (m_current_cmd >> 8) & 0xffff;
196
197                  //printf("%04x %04x -> %04x\n",m_eeprom_data[m_current_addr],m_current_addr,m_current_cmd >> 8);
198
199                  m_eeprom_state = EEPROM_GET_CMD;
200                  m_cmd_stream_pos = 0;
201               }
202               break;
203
204            case EEPROM_WRITE_ENABLE:
205            case EEPROM_WRITE_DISABLE:
206               m_current_cmd = (m_current_cmd >> 1) | ((m_latch & 1)<< 7);
207               m_cmd_stream_pos++;
208
209               if (m_cmd_stream_pos==8)
210               {
211                  m_eeprom_we = (m_eeprom_state == EEPROM_WRITE_ENABLE) ? 1 : 0;
212                  m_eeprom_state = EEPROM_GET_CMD;
213                  m_cmd_stream_pos = 0;
214               }
215
216               break;
217
218            case EEPROM_STATUS_OUTPUT:
219               m_current_cmd = (m_current_cmd >> 1) | ((m_latch & 1)<< 7);
220               m_cmd_stream_pos++;
221
222               if (m_cmd_stream_pos==8)
223               {
224                  printf("Status output\n");
225                  m_eeprom_state = EEPROM_GET_CMD;
226                  m_cmd_stream_pos = 0;
227               }
228               break;
229         }
230      }
231   }
92232}
233
trunk/src/emu/machine/m6m80011ap.h
r17494r17495
2424//  TYPE DEFINITIONS
2525//**************************************************************************
2626
27typedef enum
28{
29   EEPROM_GET_CMD = 0,
30   EEPROM_READ,
31   EEPROM_WRITE,
32   EEPROM_WRITE_ENABLE,
33   EEPROM_WRITE_DISABLE,
34   EEPROM_STATUS_OUTPUT
35} eeprom_cmd_t;
36
37
2738// ======================> m6m80011ap_device
2839
29class m6m80011ap_device :   public device_t
40class m6m80011ap_device :   public device_t,
41                      public device_nvram_interface
3042{
3143public:
3244   // construction/destruction
r17494r17495
4557   virtual void device_start();
4658   virtual void device_reset();
4759
60   virtual void nvram_default();
61   virtual void nvram_read(emu_file &file);
62   virtual void nvram_write(emu_file &file);
63
64private:
65   UINT8 m_latch;
66   UINT8 m_reset_line;
67   UINT8 m_cmd_stream_pos;
68   UINT32 m_current_cmd;
69   UINT8 m_read_latch;
70   UINT8 m_current_addr;
71   UINT8 m_eeprom_we;
72
73   eeprom_cmd_t m_eeprom_state;
74   UINT16 m_eeprom_data[0x80];
75
4876};
4977
5078

Previous 199869 Revisions Next


© 1997-2024 The MAME Team