Previous 199869 Revisions Next

r26047 Friday 8th November, 2013 at 00:33:46 UTC by Dirk Best
Trying to get PROM loading and memory regions sorted out.
[/branches/alto2/src/emu/cpu/alto2]alto2.c alto2.h alto2dsm.c
[/branches/alto2/src/mess/drivers]alto2.c
[/branches/alto2/src/mess/includes]alto2.h

branches/alto2/src/emu/cpu/alto2/alto2.c
r26046r26047
2727
2828alto2_cpu_device::alto2_cpu_device(const machine_config& mconfig, const char* tag, device_t* owner, UINT32 clock) :
2929   cpu_device(mconfig, ALTO2, "Xerox Alto-II", tag, owner, clock, "alto2", __FILE__),
30   m_ucode_config("program", ENDIANNESS_BIG, 32, 32, 0),
31   m_ram_config("io", ENDIANNESS_BIG, 16, 16, 0)
30   /* name, endianness_t endian, datawidth, addrwidth, addrshift = 0, address_map_constructor internal = NULL, address_map_constructor defmap = NULL */
31   m_ucode_config("microcode", ENDIANNESS_BIG, 32, 16, 0),
32   m_const_config("constants", ENDIANNESS_BIG, 16, 8, 0),
33   m_ram_config("memory", ENDIANNESS_BIG, 16, 17, 0)
3234{
3335}
3436
r26046r26047
3941// FIXME
4042void alto2_cpu_device::device_start()
4143{
44   m_ucode = &space(AS_PROGRAM);
45   m_const = &space(AS_DATA);
46   m_ram = &space(AS_IO);
4247
48   save_item(NAME(m_task_mpc));
49   save_item(NAME(m_task_next2));
50   save_item(NAME(m_ntime));
51   save_item(NAME(m_task));
52   save_item(NAME(m_next_task));
53   save_item(NAME(m_next2_task));
54   save_item(NAME(m_mpc));
55   save_item(NAME(m_mir));
56   save_item(NAME(m_rsel));
57   save_item(NAME(m_next));
58   save_item(NAME(m_next2));
59   save_item(NAME(m_r));
60   save_item(NAME(m_s));
61   save_item(NAME(m_bus));
62   save_item(NAME(m_t));
63   save_item(NAME(m_alu));
64   save_item(NAME(m_aluc0));
65   save_item(NAME(m_l));
66   save_item(NAME(m_shifter));
67   save_item(NAME(m_laluc0));
68   save_item(NAME(m_m));
69   save_item(NAME(m_cram_addr));
70   save_item(NAME(m_task_wakeup));
71   save_item(NAME(m_reset_mode));
72   save_item(NAME(m_rdram_flag));
73   save_item(NAME(m_wrtram_flag));
74   save_item(NAME(m_s_reg_bank));
75   save_item(NAME(m_bank_reg));
76   save_item(NAME(m_ether_enable));
77   save_item(NAME(m_ewfct));
78   save_item(NAME(m_dsp_time));
79   save_item(NAME(m_dsp_state));
80   save_item(NAME(m_unload_time));
81   save_item(NAME(m_unload_word));
82   save_item(NAME(m_mouse.x));
83   save_item(NAME(m_mouse.y));
84   save_item(NAME(m_mouse.dx));
85   save_item(NAME(m_mouse.dy));
86   save_item(NAME(m_mouse.latch));
87   save_item(NAME(m_unit_selected));
88   save_item(NAME(m_head_selected));
89   save_item(NAME(m_dsk.drive));
90   save_item(NAME(m_dsk.kaddr));
91   save_item(NAME(m_dsk.kadr));
92   save_item(NAME(m_dsk.kstat));
93   save_item(NAME(m_dsk.kcom));
94   save_item(NAME(m_dsk.krecno));
95   save_item(NAME(m_dsk.shiftin));
96   save_item(NAME(m_dsk.shiftout));
97   save_item(NAME(m_dsk.datain));
98   save_item(NAME(m_dsk.dataout));
99   save_item(NAME(m_dsk.krwc));
100   save_item(NAME(m_dsk.kfer));
101   save_item(NAME(m_dsk.wdtskena));
102   save_item(NAME(m_dsk.wdinit0));
103   save_item(NAME(m_dsk.wdinit));
104   save_item(NAME(m_dsk.strobe));
105   save_item(NAME(m_dsk.bitclk));
106   save_item(NAME(m_dsk.datin));
107   save_item(NAME(m_dsk.bitcount));
108   save_item(NAME(m_dsk.carry));
109   save_item(NAME(m_dsk.seclate));
110   save_item(NAME(m_dsk.seekok));
111   save_item(NAME(m_dsk.ok_to_run));
112   save_item(NAME(m_dsk.ready_mf31a));
113   save_item(NAME(m_dsk.seclate_mf31b));
114#if   0
115   save_item(NAME(m_dsk.ff_21a));
116   save_item(NAME(m_dsk.ff_21a_old));
117   save_item(NAME(m_dsk.ff_21b));
118   save_item(NAME(m_dsk.ff_22a));
119   save_item(NAME(m_dsk.ff_22b));
120   save_item(NAME(m_dsk.ff_43b));
121   save_item(NAME(m_dsk.ff_53a));
122   save_item(NAME(m_dsk.ff_43a));
123   save_item(NAME(m_dsk.ff_53b));
124   save_item(NAME(m_dsk.ff_44a));
125   save_item(NAME(m_dsk.ff_44b));
126   save_item(NAME(m_dsk.ff_45a));
127   save_item(NAME(m_dsk.ff_45b));
128#endif
129   save_item(NAME(m_dsp.hlc));
130   save_item(NAME(m_dsp.a63));
131   save_item(NAME(m_dsp.a66));
132   save_item(NAME(m_dsp.setmode));
133   save_item(NAME(m_dsp.inverse));
134   save_item(NAME(m_dsp.halfclock));
135   save_item(NAME(m_dsp.clr));
136   save_item(NAME(m_dsp.fifo));
137   save_item(NAME(m_dsp.fifo_wr));
138   save_item(NAME(m_dsp.fifo_rd));
139   save_item(NAME(m_dsp.dht_blocks));
140   save_item(NAME(m_dsp.dwt_blocks));
141   save_item(NAME(m_dsp.curt_blocks));
142   save_item(NAME(m_dsp.curt_wakeup));
143   save_item(NAME(m_dsp.vblank));
144   save_item(NAME(m_dsp.xpreg));
145   save_item(NAME(m_dsp.csr));
146   save_item(NAME(m_dsp.curword));
147   save_item(NAME(m_dsp.curdata));
148   save_item(NAME(m_mem.mar));
149   save_item(NAME(m_mem.rmdd));
150   save_item(NAME(m_mem.wmdd));
151   save_item(NAME(m_mem.md));
152   save_item(NAME(m_mem.cycle));
153   save_item(NAME(m_mem.access));
154   save_item(NAME(m_mem.error));
155   save_item(NAME(m_mem.mear));
156   save_item(NAME(m_mem.mecr));
157   save_item(NAME(m_emu.ir));
158   save_item(NAME(m_emu.skip));
159   save_item(NAME(m_emu.cy));
160   save_item(NAME(m_eth.fifo));
161   save_item(NAME(m_eth.fifo_rd));
162   save_item(NAME(m_eth.fifo_wr));
163   save_item(NAME(m_eth.status));
164   save_item(NAME(m_eth.rx_crc));
165   save_item(NAME(m_eth.tx_crc));
166   save_item(NAME(m_eth.rx_count));
167   save_item(NAME(m_eth.tx_count));
168   save_item(NAME(m_eth.duckbreath));
169
170   state_add( A2_AC3, "AC(3)", m_r[A2_AC3]).formatstr("%04X");
171   state_add( A2_AC2, "AC(2)", m_r[A2_AC2]).formatstr("%04X");
172   state_add( A2_AC1, "AC(1)", m_r[A2_AC1]).formatstr("%04X");
173   state_add( A2_AC0, "AC(0)", m_r[A2_AC0]).formatstr("%04X");
174   state_add( A2_R04, "R04",   m_r[A2_R04]).formatstr("%04X");
175   state_add( A2_R05, "R05",   m_r[A2_R05]).formatstr("%04X");
176   state_add( A2_PC,  "PC",    m_r[A2_PC]).formatstr("%04X");
177   state_add( A2_R07, "R07",   m_r[A2_R07]).formatstr("%04X");
178   state_add( A2_R10, "R10",   m_r[A2_R10]).formatstr("%04X");
179   state_add( A2_R11, "R11",   m_r[A2_R11]).formatstr("%04X");
180   state_add( A2_R12, "R12",   m_r[A2_R12]).formatstr("%04X");
181   state_add( A2_R13, "R13",   m_r[A2_R13]).formatstr("%04X");
182   state_add( A2_R14, "R14",   m_r[A2_R14]).formatstr("%04X");
183   state_add( A2_R15, "R15",   m_r[A2_R15]).formatstr("%04X");
184   state_add( A2_R16, "R16",   m_r[A2_R16]).formatstr("%04X");
185   state_add( A2_R17, "R17",   m_r[A2_R17]).formatstr("%04X");
186   state_add( A2_R20, "R20",   m_r[A2_R20]).formatstr("%04X");
187   state_add( A2_R21, "R21",   m_r[A2_R21]).formatstr("%04X");
188   state_add( A2_R22, "R22",   m_r[A2_R22]).formatstr("%04X");
189   state_add( A2_R23, "R23",   m_r[A2_R23]).formatstr("%04X");
190   state_add( A2_R24, "R24",   m_r[A2_R24]).formatstr("%04X");
191   state_add( A2_R25, "R25",   m_r[A2_R25]).formatstr("%04X");
192   state_add( A2_R26, "R26",   m_r[A2_R26]).formatstr("%04X");
193   state_add( A2_R27, "R27",   m_r[A2_R27]).formatstr("%04X");
194   state_add( A2_R30, "R30",   m_r[A2_R30]).formatstr("%04X");
195   state_add( A2_R31, "R31",   m_r[A2_R31]).formatstr("%04X");
196   state_add( A2_R32, "R32",   m_r[A2_R32]).formatstr("%04X");
197   state_add( A2_R33, "R33",   m_r[A2_R33]).formatstr("%04X");
198   state_add( A2_R34, "R34",   m_r[A2_R34]).formatstr("%04X");
199   state_add( A2_R35, "R35",   m_r[A2_R35]).formatstr("%04X");
200   state_add( A2_R36, "R36",   m_r[A2_R36]).formatstr("%04X");
201   state_add( A2_R37, "R37",   m_r[A2_R37]).formatstr("%04X");
202
203   state_add(STATE_GENPC, "curpc", m_mpc).formatstr("%03X").noshow();
204   state_add(STATE_GENFLAGS, "GENFLAGS", m_aluc0).formatstr("%5s").noshow();
205
206   m_icountptr = &m_icount;
207
208   // reverse dwords and invert hardware specific bits
209   for (UINT32 addr = 0; addr < ALTO2_UCODE_PAGE_SIZE; addr++) {
210      UINT32 ucode = m_ucode->read_dword(4*addr);
211      ucode ^= ALTO2_UCODE_INVERTED;
212      m_ucode->write_dword(4*addr, ucode);
213   }
214   for (UINT32 addr = 0; addr < ALTO2_UCODE_PAGE_SIZE; addr++) {
215      UINT32 ucode = m_ucode->read_dword(4*(ALTO2_UCODE_PAGE_SIZE+addr));
216      ucode ^= ALTO2_UCODE_INVERTED;
217      m_ucode->write_dword(4*(ALTO2_UCODE_PAGE_SIZE+addr), ucode);
218   }
219
220   for (UINT32 addr = 0; addr < 256; addr++) {
221      printf("%02x: %04x\n", addr, m_const->read_word(addr));
222   }
223
224   hard_reset();
43225}
44226
45227//-------------------------------------------------
r26046r26047
49231// FIXME
50232void alto2_cpu_device::device_reset()
51233{
52
234   soft_reset();
53235}
54236
55237//-------------------------------------------------
r26046r26047
60242// FIXME
61243void alto2_cpu_device::execute_set_input(int inputnum, int state)
62244{
63
64245}
65246
66247//-------------------------------------------------
r26046r26047
8521033      LOG((0,0,"invalid address (%06o)\n", val));
8531034      return;
8541035   }
855   val = m_ucode_raw[addr] ^ ALTO2_UCODE_INVERTED;
1036   val = m_ucode->read_dword(addr) ^ ALTO2_UCODE_INVERTED;
8561037   if (GET_CRAM_HALFSEL(m_cram_addr)) {
8571038      val = val >> 16;
8581039      LOG((0,0,"upper:%06o\n", val));
r26046r26047
8891070      return;
8901071   }
8911072   LOG((0,0,"\n"));
892   m_ucode_raw[addr] = ((m_m << 16) | m_alu) ^ ALTO2_UCODE_INVERTED;
1073   m_ucode->write_dword(addr, ((m_m << 16) | m_alu) ^ ALTO2_UCODE_INVERTED);
8931074}
8941075
8951076#if   USE_ALU_74181
r26046r26047
12641445   m_next = m_task_mpc[m_task];      // get current task's next mpc and address modifier
12651446   m_next2 = m_task_next2[m_task];
12661447
1267   for (;;) {
1448   do {
12681449      int do_bs, flags;
12691450      UINT32 alu;
12701451      UINT8 aluf;
r26046r26047
13061487
13071488      /* next instruction's mpc */
13081489      m_mpc = m_next;
1309      m_mir   = m_ucode_raw[m_mpc];
1490      debugger_instruction_hook(this, m_next);
1491      m_mir = m_ucode->read_dword(m_mpc);
13101492      m_rsel = MIR_RSEL(m_mir);
13111493      m_next = MIR_NEXT(m_mir) | m_next2;
1312      m_next2 = A2_GET32(m_ucode_raw[m_next], 32, NEXT0, NEXT9) | (m_next2 & ~ALTO2_UCODE_PAGE_MASK);
1494      m_next2 = A2_GET32(m_ucode->read_dword(m_next), 32, NEXT0, NEXT9) | (m_next2 & ~ALTO2_UCODE_PAGE_MASK);
13131495      aluf = MIR_ALUF(m_mir);
13141496      bs = MIR_BS(m_mir);
13151497      f1 = MIR_F1(m_mir);
r26046r26047
17781960            }
17791961         }
17801962      }
1781   }
1963   } while (m_icount-- > 0);
17821964
17831965   /* save this task's mpc and address modifier */
17841966   m_task_mpc[m_task] = m_next;
branches/alto2/src/emu/cpu/alto2/alto2dsm.c
r26046r26047
180180
181181   if (a < 020) {
182182      // start value for mpc per task is the task number
183      snprintf(dst, sizeof(buffer[0]), "%s", taskname[a]);
183      snprintf(dst, sizeof(buffer[0]), "*%s", taskname[a]);
184184   } else {
185185      snprintf(dst, sizeof(buffer[0]), "%04o", a);
186186   }
r26046r26047
189189
190190offs_t alto2_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
191191{
192   const UINT8* src;
193192   size_t len = 128;
194193
195   src = oprom + 4 * pc;
196   UINT32 mir = (static_cast<UINT32>(src[0]) << 24) |
197         (static_cast<UINT32>(src[1]) << 16) |
198         (static_cast<UINT32>(src[2]) << 8) |
199         (static_cast<UINT32>(src[3]));
194   UINT32 mir = (static_cast<UINT32>(oprom[0]) << 24) |
195         (static_cast<UINT32>(oprom[1]) << 16) |
196         (static_cast<UINT32>(oprom[2]) << 8) |
197         (static_cast<UINT32>(oprom[3]));
200198   UINT8 rsel = static_cast<UINT8>((mir >> 27) & 31);
201199   UINT8 aluf = static_cast<UINT8>((mir >> 23) & 15);
202200   UINT8 bs = static_cast<UINT8>((mir >> 20) & 7);
r26046r26047
205203   UINT8 t = static_cast<UINT8>((mir >> 11) & 1);
206204   UINT8 l = static_cast<UINT8>((mir >> 10) & 1);
207205   offs_t next = static_cast<offs_t>(mir & 1023);
208   src = oprom + 4 * next;
206   const UINT8* src = oprom + 4 * next;
209207   UINT32 next2 =  (static_cast<UINT32>(src[0]) << 24) |
210208         (static_cast<UINT32>(src[1]) << 16) |
211209         (static_cast<UINT32>(src[2]) << 8) |
r26046r26047
214212   char *dst = buffer;
215213   int pa;
216214
215   dst += snprintf(dst, len - (size_t)(dst - buffer), "[%08X] ", mir);
217216   switch (aluf) {
218217   case  0: // T?: BUS
219218      if (t)
220         dst += snprintf(dst, len - (size_t)(dst - buffer), "TALU ");
219         dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-ALU ");
221220      if (l)
222         dst += snprintf(dst, len - (size_t)(dst - buffer), "L ");
221         dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- ");
223222      if (bs == 1)
224         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s ", regname[rsel]);
223         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]);
225224      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS) ");
226225      break;
227226   case  1: //   : T
228227      if (t)
229         dst += snprintf(dst, len - (size_t)(dst - buffer), "TBUS ");
228         dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-BUS ");
230229      if (l)
231         dst += snprintf(dst, len - (size_t)(dst - buffer), "L ");
230         dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- ");
232231      if (bs == 1)
233         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s ", regname[rsel]);
232         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]);
234233      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(T) ");
235234      break;
236235   case  2: // T?: BUS OR T
237236      if (t)
238         dst += snprintf(dst, len - (size_t)(dst - buffer), "TALU ");
237         dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-ALU ");
239238      if (l)
240         dst += snprintf(dst, len - (size_t)(dst - buffer), "L ");
239         dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- ");
241240      if (bs == 1)
242         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s ", regname[rsel]);
241         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]);
243242      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS OR T) ");
244243      break;
245244   case  3: //   : BUS AND T
246245      if (t)
247         dst += snprintf(dst, len - (size_t)(dst - buffer), "TBUS ");
246         dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-BUS ");
248247      if (l)
249         dst += snprintf(dst, len - (size_t)(dst - buffer), "L ");
248         dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- ");
250249      if (bs == 1)
251         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s ", regname[rsel]);
250         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]);
252251      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS AND T) ");
253252      break;
254253   case  4: //   : BUS XOR T
255254      if (t)
256         dst += snprintf(dst, len - (size_t)(dst - buffer), "TBUS ");
255         dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-BUS ");
257256      if (l)
258         dst += snprintf(dst, len - (size_t)(dst - buffer), "L ");
257         dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- ");
259258      if (bs == 1)
260         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s ", regname[rsel]);
259         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]);
261260      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS XOR T) ");
262261      break;
263262   case  5: // T?: BUS + 1
264263      if (t)
265         dst += snprintf(dst, len - (size_t)(dst - buffer), "TALU ");
264         dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-ALU ");
266265      if (l)
267         dst += snprintf(dst, len - (size_t)(dst - buffer), "L ");
266         dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- ");
268267      if (bs == 1)
269         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s ", regname[rsel]);
268         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]);
270269      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS + 1) ");
271270      break;
272271   case  6: // T?: BUS - 1
273272      if (t)
274         dst += snprintf(dst, len - (size_t)(dst - buffer), "TALU ");
273         dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-ALU ");
275274      if (l)
276         dst += snprintf(dst, len - (size_t)(dst - buffer), "L ");
275         dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- ");
277276      if (bs == 1)
278         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s ", regname[rsel]);
277         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]);
279278      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS - 1) ");
280279      break;
281280   case  7: //   : BUS + T
282281      if (t)
283         dst += snprintf(dst, len - (size_t)(dst - buffer), "TBUS ");
282         dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-BUS ");
284283      if (l)
285         dst += snprintf(dst, len - (size_t)(dst - buffer), "L ");
284         dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- ");
286285      if (bs == 1)
287         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s ", regname[rsel]);
286         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]);
288287      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS + T) ");
289288      break;
290289   case  8: //   : BUS - T
291290      if (t)
292         dst += snprintf(dst, len - (size_t)(dst - buffer), "TBUS ");
291         dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-BUS ");
293292      if (l)
294         dst += snprintf(dst, len - (size_t)(dst - buffer), "L ");
293         dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- ");
295294      if (bs == 1)
296         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s ", regname[rsel]);
295         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]);
297296      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS - T) ");
298297      break;
299298   case  9: //   : BUS - T - 1
300299      if (t)
301         dst += snprintf(dst, len - (size_t)(dst - buffer), "TBUS ");
300         dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-BUS ");
302301      if (l)
303         dst += snprintf(dst, len - (size_t)(dst - buffer), "L ");
302         dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- ");
304303      if (bs == 1)
305         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s ", regname[rsel]);
304         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]);
306305      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS - T - 1) ");
307306      break;
308307   case 10: // T?: BUS + T + 1
309308      if (t)
310         dst += snprintf(dst, len - (size_t)(dst - buffer), "TALU ");
309         dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-ALU ");
311310      if (l)
312         dst += snprintf(dst, len - (size_t)(dst - buffer), "L ");
311         dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- ");
313312      if (bs == 1)
314         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s ", regname[rsel]);
313         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]);
315314      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS + T + 1) ");
316315      break;
317316   case 11: // T?: BUS + SKIP
318317      if (t)
319         dst += snprintf(dst, len - (size_t)(dst - buffer), "TALU ");
318         dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-ALU ");
320319      if (l)
321         dst += snprintf(dst, len - (size_t)(dst - buffer), "L ");
320         dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- ");
322321      if (bs == 1)
323         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s ", regname[rsel]);
322         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]);
324323      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS + SKIP) ");
325324      break;
326325   case 12: // T?: BUS, T (AND)
327326      if (t)
328         dst += snprintf(dst, len - (size_t)(dst - buffer), "TALU ");
327         dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-ALU ");
329328      if (l)
330         dst += snprintf(dst, len - (size_t)(dst - buffer), "L ");
329         dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- ");
331330      if (bs == 1)
332         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s ", regname[rsel]);
331         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]);
333332      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS AND T) ");
334333      break;
335334   case 13: //   : BUS AND NOT T
336335      if (t)
337         dst += snprintf(dst, len - (size_t)(dst - buffer), "TBUS ");
336         dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-BUS ");
338337      if (l)
339         dst += snprintf(dst, len - (size_t)(dst - buffer), "L ");
338         dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- ");
340339      if (bs == 1)
341         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s ", regname[rsel]);
340         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]);
342341      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS AND NOT T) ");
343342      break;
344343   case 14: //   : undefined
345344      if (t)
346         dst += snprintf(dst, len - (size_t)(dst - buffer), "TBUS ");
345         dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-BUS ");
347346      if (l)
348         dst += snprintf(dst, len - (size_t)(dst - buffer), "L ");
347         dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- ");
349348      if (bs == 1)
350         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s ", regname[rsel]);
349         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]);
351350      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(14) ");
352351      break;
353352   case 15: //   : undefined
354353      if (t)
355         dst += snprintf(dst, len - (size_t)(dst - buffer), "TBUS ");
354         dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-BUS ");
356355      if (l)
357         dst += snprintf(dst, len - (size_t)(dst - buffer), "L ");
356         dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- ");
358357      if (bs == 1)
359         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s ", regname[rsel]);
358         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]);
360359      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(15) ");
361360      break;
362361   }
363362
364363   switch (bs) {
365364   case 0:   // read R
366      dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS%s ", regname[rsel]);
365      dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS<-%s ", regname[rsel]);
367366      break;
368367   case 1:   // load R from shifter output
369      // dst += snprintf(dst, len - (size_t)(dst - buffer), "; %s", rn[rsel]);
368      // dst += snprintf(dst, len - (size_t)(dst - buffer), "; %s<-", rn[rsel]);
370369      break;
371370   case 2: // enables no source to the BUS, leaving it all ones
372      dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS177777 ");
371      dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS<-177777 ");
373372      break;
374373   case 3:   // performs different functions in different tasks
375      dst += snprintf(dst, len - (size_t)(dst - buffer), "BUSBS3 ");
374      dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS<-BS3 ");
376375      break;
377376   case 4:   // performs different functions in different tasks
378      dst += snprintf(dst, len - (size_t)(dst - buffer), "BUSBS4 ");
377      dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS<-BS4 ");
379378      break;
380379   case 5:   // memory data
381      dst += snprintf(dst, len - (size_t)(dst - buffer), "BUSMD ");
380      dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS<-MD ");
382381      break;
383382   case 6:   // BUS[3-0] <- MOUSE; BUS[15-4] <- -1
384      dst += snprintf(dst, len - (size_t)(dst - buffer), "BUSMOUSE ");
383      dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS<-MOUSE ");
385384      break;
386385   case 7:   // IR[7-0], possibly sign extended
387      dst += snprintf(dst, len - (size_t)(dst - buffer), "BUSDISP ");
386      dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS<-DISP ");
388387      break;
389388   }
390389
r26046r26047
393392   case 0:   // no operation
394393      break;
395394   case 1:   // load MAR from ALU output; start main memory reference
396      dst += snprintf(dst, len - (size_t)(dst - buffer), "MARALU ");
395      dst += snprintf(dst, len - (size_t)(dst - buffer), "MAR<-ALU ");
397396      break;
398397   case 2:   // switch tasks if higher priority wakeup is pending
399398      dst += snprintf(dst, len - (size_t)(dst - buffer), "[TASK] ");
r26046r26047
402401      dst += snprintf(dst, len - (size_t)(dst - buffer), "[BLOCK] ");
403402      break;
404403   case 4:   // SHIFTER output will be L shifted left one place
405      dst += snprintf(dst, len - (size_t)(dst - buffer), "SHIFTERL(LSH1) ");
404      dst += snprintf(dst, len - (size_t)(dst - buffer), "SHIFTER<-L(LSH1) ");
406405      break;
407406   case 5:   // SHIFTER output will be L shifted right one place
408      dst += snprintf(dst, len - (size_t)(dst - buffer), "SHIFTERL(RSH1) ");
407      dst += snprintf(dst, len - (size_t)(dst - buffer), "SHIFTER<-L(RSH1) ");
409408      break;
410409   case 6:   // SHIFTER output will be L rotated left 8 places
411      dst += snprintf(dst, len - (size_t)(dst - buffer), "SHIFTERL(LCY8) ");
410      dst += snprintf(dst, len - (size_t)(dst - buffer), "SHIFTER<-L(LCY8) ");
412411      break;
413412   case 7:   // put the constant from PROM (RSELECT,BS) on the bus
414413      pa = (rsel << 3) | bs;
415      dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS[%03o]%05o ", pa, const_prom[pa]);
414      dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS<-[%03o]%05o ", pa, const_prom[pa]);
416415      break;
417416   default:
418417      dst += snprintf(dst, len - (size_t)(dst - buffer), "F1_%02o ", f1);
r26046r26047
422421   switch (f2) {
423422   case 0:   // no operation
424423      break;
425   case 1:   // NEXT NEXT OR (if (BUS=0) then 1 else 0)
424   case 1:   // NEXT <- NEXT OR (if (BUS=0) then 1 else 0)
426425      dst += snprintf(dst, len - (size_t)(dst - buffer), "[(BUS=0) ? %s : %s] ",
427426         addrname((prefetch | 1) & MCODE_MASK),
428427         addrname(prefetch & MCODE_MASK));
429428      break;
430   case 2:   // NEXT NEXT OR (if (SHIFTER OUTPUT<0) then 1 else 0)
429   case 2:   // NEXT <- NEXT OR (if (SHIFTER OUTPUT<0) then 1 else 0)
431430      dst += snprintf(dst, len - (size_t)(dst - buffer), "[(SH=0) ? %s : %s] ",
432431         addrname((prefetch | 1) & MCODE_MASK),
433432         addrname(prefetch & MCODE_MASK));
434433      break;
435   case 3:   // NEXT NEXT OR (if (SHIFTER OUTPUT<0) then 1 else 0)
434   case 3:   // NEXT <- NEXT OR (if (SHIFTER OUTPUT<0) then 1 else 0)
436435      dst += snprintf(dst, len - (size_t)(dst - buffer), "[(SH<0) ? %s : %s] ",
437436         addrname((prefetch | 1) & MCODE_MASK),
438437         addrname(prefetch & MCODE_MASK));
439438      break;
440   case 4:   // NEXT ← NEXT OR BUS
441      dst += snprintf(dst, len - (size_t)(dst - buffer), "NEXT←BUS ");
439   case 4:   // NEXT <- NEXT OR BUS
440      dst += snprintf(dst, len - (size_t)(dst - buffer), "NEXT<-BUS ");
442441      break;
443   case 5:   // NEXT NEXT OR ALUC0. ALUC0 is the carry produced by last L loading microinstruction.
442   case 5:   // NEXT <- NEXT OR ALUC0. ALUC0 is the carry produced by last L loading microinstruction.
444443      dst += snprintf(dst, len - (size_t)(dst - buffer), "[(ALUC0) ? %s : %s] ",
445444         addrname((prefetch | 1) & MCODE_MASK),
446445         addrname(prefetch & MCODE_MASK));
447446      break;
448447   case 6:   // deliver BUS data to memory
449      dst += snprintf(dst, len - (size_t)(dst - buffer), "MDBUS ");
448      dst += snprintf(dst, len - (size_t)(dst - buffer), "MD<-BUS ");
450449      break;
451450   case 7:   // put on the bus the constant from PROM (RSELECT,BS)
452451      pa = (rsel << 3) | bs;
453      dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS[%03o]%05o ", pa, const_prom[pa]);
452      dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS<-[%03o]%05o ", pa, const_prom[pa]);
454453      break;
455454   default:
456      dst += snprintf(dst, len - (size_t)(dst - buffer), "BUSF2_%02o ", f2);
455      dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS<-F2_%02o ", f2);
457456      break;
458457   }
459   return pc + 4;
458   return 4;
460459}
branches/alto2/src/emu/cpu/alto2/alto2.h
r26046r26047
218218   {
219219      if (AS_PROGRAM == spacenum)
220220         return &m_ucode_config;
221      if (AS_DATA == spacenum)
222         return &m_const_config;
221223      if (AS_IO == spacenum)
222224         return &m_ram_config;
223225      return NULL;
r26046r26047
242244   void fatal(int level, const char *format, ...);
243245
244246   address_space_config m_ucode_config;
247   address_space_config m_const_config;
245248   address_space_config m_ram_config;
246249
250   address_space *m_ucode;
251   address_space *m_const;
252   address_space *m_ram;
253   int m_icount;
254
247255   static const UINT8 m_ether_id = 0121;
248256
249257   typedef void (alto2_cpu_device::*a2func)();
r26046r26047
740748   static const char *f1_name(UINT8 f1);         //!< human readable F1 function names
741749   static const char *f2_name(UINT8 f2);         //!< human readable F2 function names
742750
743   UINT32 m_ucode_raw[ALTO2_UCODE_SIZE];         //!< raw microcode words, decoded
744751   UINT16 m_const_prom[ALTO2_CONST_SIZE];         //!< constant PROM, decoded
745752
746753   /**
branches/alto2/src/mess/includes/alto2.h
r26046r26047
1717   alto2_state(const machine_config &mconfig, device_type type, const char *tag)
1818      : driver_device(mconfig, type, tag),
1919      m_maincpu(*this, "maincpu"),
20#if   0   // FIXME: write a harddisk_image_device like device_t for the DIABLO31
21      m_disk0(*this, "disk0"),
22      m_disk1(*this, "disk1"),
23#endif
24      m_region_ucode(*this, "ucode"),
25      m_region_ram(*this, "io"),
20      m_region_ucode(*this, "maincpu"),
21      m_region_const(*this, "const"),
22      m_region_ram(*this, "ram"),
2623      m_io_row0(*this, "ROW0"),
2724      m_io_row1(*this, "ROW1"),
2825      m_io_row2(*this, "ROW2"),
r26046r26047
3128      m_io_row5(*this, "ROW5"),
3229      m_io_row6(*this, "ROW6"),
3330      m_io_row7(*this, "ROW7"),
34      m_io_config(*this, "CONFIG") { }
31#if   0   // FIXME: write a harddisk_image_device like device_t for the DIABLO31
32      m_disk0(*this, "disk0"),
33      m_disk1(*this, "disk1"),
34#endif
35      m_io_config(*this, "CONFIG")
36      { }
3537
3638   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
3739
r26046r26047
4446   DECLARE_READ16_MEMBER(alto2_mmio_r);
4547   DECLARE_WRITE16_MEMBER(alto2_mmio_w);
4648   DECLARE_DRIVER_INIT(alto2);
47//   virtual void machine_reset();
48//   virtual void video_start();
4949   virtual void palette_init();
5050   DECLARE_MACHINE_RESET(alto2);
5151   void screen_eof_alto2(screen_device &screen, bool state);
5252
5353protected:
5454   required_device<cpu_device> m_maincpu;
55#if   0   // FIXME: write a harddisk_image_device like device_t for the DIABLO31
56   required_device<diablo_device> m_disk0;
57   optional_device<diablo_device> m_disk1;
58#endif
5955   required_memory_region m_region_ucode;
56   required_memory_region m_region_const;
6057   required_memory_region m_region_ram;
6158   required_ioport m_io_row0;
6259   required_ioport m_io_row1;
r26046r26047
6663   required_ioport m_io_row5;
6764   required_ioport m_io_row6;
6865   required_ioport m_io_row7;
66#if   0   // FIXME: write a harddisk_image_device like device_t for the DIABLO31
67   required_device<diablo_device> m_disk0;
68   optional_device<diablo_device> m_disk1;
69#endif
6970   optional_ioport m_io_config;
7071
7172   // FIXME: use device timers instead of individual emu_timer* in alto2 code(?)
branches/alto2/src/mess/drivers/alto2.c
r26046r26047
1111#include "includes/alto2.h"
1212
1313
14// FIXME: Is this required? How to access the address space dwords?
1415READ32_MEMBER( alto2_state::alto2_ucode_r )
1516{
1617   return 0;
1718}
1819
20// FIXME: Is this required? How to access the address space dwords?
1921WRITE32_MEMBER( alto2_state::alto2_ucode_w )
2022{
2123
2224}
2325
26// FIXME: Is this required? How to access the address space words?
27// This has to somehow be mapped to the a2mem half DWORD accesses
28// and (optionally) Hamming code and parity flag updating
2429READ16_MEMBER( alto2_state::alto2_ram_r )
2530{
2631   return 0;
2732}
2833
34// FIXME: Is this required? How to access the address space words?
35// This has to somehow be mapped to the a2mem half DWORD accesses
36// and (optionally) Hamming code and parity flag updating
2937WRITE16_MEMBER( alto2_state::alto2_ram_w )
3038{
3139
3240}
3341
42// FIXME: Dispatch to the a2mem mmio handlers
3443READ16_MEMBER( alto2_state::alto2_mmio_r )
3544{
3645   return 0;
3746}
3847
48// FIXME: Dispatch to the a2mem mmio handlers
3949WRITE16_MEMBER( alto2_state::alto2_mmio_w )
4050{
4151
r26046r26047
4353
4454/* Memory Maps */
4555
56/* micro code from ALTO2_UCODE_ROM_PAGES times PROMs and ALTO2_UCODE_RAM_PAGES times RAMs of ALTO2_UCODE_PAGE_SIZE 32-bit words each */
4657static ADDRESS_MAP_START( alto2_ucode_map, AS_PROGRAM, 32, alto2_state )
4758   AM_RANGE(0, ALTO2_UCODE_RAM_BASE-1) AM_ROM
4859   AM_RANGE(ALTO2_UCODE_RAM_BASE, ALTO2_UCODE_SIZE-1) AM_READWRITE(alto2_ucode_r, alto2_ucode_w)
4960ADDRESS_MAP_END
5061
62/* constant PROM with 256 16-bit words */
63static ADDRESS_MAP_START( alto2_const_map, AS_DATA, 16, alto2_state )
64   AM_RANGE(0, 255) AM_ROM
65ADDRESS_MAP_END
66
67/* main memory and memory mapped i/o in range ALTO2_IO_PAGE_BASE ... ALTO2_IO_PAGE_BASE + ALTO2_IO_PAGE_SIZE - 1 */
5168static ADDRESS_MAP_START( alto2_ram_map, AS_IO, 16, alto2_state )
5269   AM_RANGE(0, ALTO2_IO_PAGE_BASE - 1) AM_READWRITE(alto2_ram_r, alto2_ram_w)
5370   AM_RANGE(ALTO2_IO_PAGE_BASE, 0177777) AM_READWRITE(alto2_mmio_r, alto2_mmio_w)
r26046r26047
274291   /* basic machine hardware */
275292   MCFG_CPU_ADD("maincpu", ALTO2, XTAL_20_16MHz)
276293   MCFG_CPU_PROGRAM_MAP(alto2_ucode_map)
294   MCFG_CPU_DATA_MAP(alto2_const_map)
277295   MCFG_CPU_IO_MAP(alto2_ram_map)
278296
279297   /* video hardware */
r26046r26047
288306/* ROMs */
289307
290308ROM_START(alto2)
291   ROM_REGION( 01500, "2k_ctrl", 0 )
292   ROMX_LOAD( "2kctl.u3",   00000, 00400, CRC(5f8d89e8) SHA1(487cd944ab074290aea73425e81ef4900d92e250), ROM_NIBBLE)   //!< 3601-1 256x4 BPROM; Emulator address modifier
293   ROMX_LOAD( "2kctl.u76",  00400, 00400, CRC(1edef867) SHA1(928b8a15ac515a99109f32672441832173883b81), ROM_NIBBLE)   //!< 3601-1 256x4 BPROM; 2KCTL replacement for u51 (1KCTL)
294   ROMX_LOAD( "3kcram.a37", 01000, 00400, CRC(9417360d) SHA1(bfcdbc56ee4ffafd0f2f672c0c869a55d6dd194b), ROM_NIBBLE)
295   ROMX_LOAD( "2kctl.u38",  01400, 00040, CRC(fc51b1d1) SHA1(e36c2a12a5da377394264899b5ae504e2ffda46e), 0)            //!< 82S23 32x8 BPROM; task priority and initial address
296   ROMX_LOAD( "alu.a10",    01440, 00040, CRC(e0857892) SHA1(dcd389767139f0acc1f87cf074459115abc5b90b), ROM_NIBBLE)
297
298   ROM_REGION16_BE( 0400, "const", 0 )
299   // constant PROMs, 4 x 4bit
300   // UINT16 src = BITS(addr, 3,2,1,4,5,6,7,0);
301   // UINT16 u16 = ~((const[src] << 8) | (const[src+0x100));
302   // m_const[addr] = u16;
303   ROMX_LOAD( "madr.a6",    00000, 00400, CRC(c2c196b2) SHA1(8b2a599ac839ec2a070dbfef2f1626e645c858ca), ROM_NIBBLE | ROM_BITSHIFT(12))   //!< 0000-0377 C(00)',C(01)',C(02)',C(03)'
304   ROMX_LOAD( "madr.a5",    00000, 00400, CRC(42336101) SHA1(c77819cf40f063af3abf66ea43f17cc1a62e928b), ROM_NIBBLE | ROM_BITSHIFT( 8))   //!< 0000-0377 C(04)',C(05)',C(06)',C(07)'
305   ROMX_LOAD( "madr.a4",    00000, 00400, CRC(b957e490) SHA1(c72660ad3ada4ca0ed8697c6bb6275a4fe703184), ROM_NIBBLE | ROM_BITSHIFT( 4))   //!< 0000-0377 C(08)',C(09)',C(10)',C(11)'
306   ROMX_LOAD( "madr.a3",    00000, 00400, CRC(e0992757) SHA1(5c45ea824970663cb9ee672dc50861539c860249), ROM_NIBBLE | ROM_BITSHIFT( 0))   //!< 0000-0377 C(12)',C(13)',C(14)',C(15)'
307
308#if   0   // FIXME: just different names - the hashes are the same... remove?
309   ROM_REGION16_BE( 0400, "const_alt", 0 )
310   // alternate constant PROMs, 4 x 4bit
311   // UINT16 src = BITS(addr, 3,2,1,4,5,6,7,0);
312   // UINT16 u16 = ~((const[src] << 8) | (const[src+0x100));
313   // m_const[addr] = u16;
314   ROMX_LOAD( "c3.3",       00000, 00400, CRC(c2c196b2) SHA1(8b2a599ac839ec2a070dbfef2f1626e645c858ca), ROM_NIBBLE | ROM_BITSHIFT(12))   //!< 0000-0377 C(00)',C(01)',C(02)',C(03)'
315   ROMX_LOAD( "c2.3",       00000, 00400, CRC(42336101) SHA1(c77819cf40f063af3abf66ea43f17cc1a62e928b), ROM_NIBBLE | ROM_BITSHIFT( 8))   //!< 0000-0377 C(04)',C(05)',C(06)',C(07)'
316   ROMX_LOAD( "c1.3",       00000, 00400, CRC(b957e490) SHA1(c72660ad3ada4ca0ed8697c6bb6275a4fe703184), ROM_NIBBLE | ROM_BITSHIFT( 4))   //!< 0000-0377 C(08)',C(09)',C(10)',C(11)'
317   ROMX_LOAD( "c0.3",       00000, 00400, CRC(e0992757) SHA1(5c45ea824970663cb9ee672dc50861539c860249), ROM_NIBBLE | ROM_BITSHIFT( 0))   //!< 0000-0377 C(12)',C(13)',C(14)',C(15)'
318#endif
319
320   ROM_REGION32_BE( 02000, "ucode", ROMREGION_INVERT )
321309   // micro code PROMs, 8 x 4bit
322310   // UINT32 src = addr ^ 0x3ff;
323311   // UINT32 u32 = ~((ucode[src] << 24) | (ucode[src+0x400] << 16) | (ucode[src+0x800] << 8) | (ucode[src+0xc00));
324312   // m_ucode[addr] = u32 ^ ALTO2_UCODE_INVERTED;
325   ROMX_LOAD( "55x.3",      00000, 02000, CRC(de870d75) SHA1(2b98cc769d8302cb39948711424d987d94e4159b), ROM_NIBBLE | ROM_BITSHIFT(28))   //!< 00000-01777 RSEL(0)',RSEL(1)',RSEL(2)',RSEL(3)'
326   ROMX_LOAD( "64x.3",      00000, 02000, CRC(51b444c0) SHA1(8756e51f7f3253a55d75886465beb7ee1be6e1c4), ROM_NIBBLE | ROM_BITSHIFT(24))   //!< 00000-01777 RSEL(4)',ALUF(0)',ALUF(1)',ALUF(2)'
327   ROMX_LOAD( "65x.3",      00000, 02000, CRC(741d1437) SHA1(01f7cf07c2173ac93799b2475180bfbbe7e0149b), ROM_NIBBLE | ROM_BITSHIFT(20))   //!< 00000-01777 ALUF(3)',BS(0)',BS(1)',BS(2)'
328   ROMX_LOAD( "63x.3",      00000, 02000, CRC(f22d5028) SHA1(c65a42baef702d4aff2d9ad8e363daec27de6801), ROM_NIBBLE | ROM_BITSHIFT(16))   //!< 00000-01777 F1(0),F1(1)',F1(2)',F1(3)'
329   ROMX_LOAD( "53x.3",      00000, 02000, CRC(3c89a740) SHA1(95d812d489b2bde03884b2f126f961caa6c8ec45), ROM_NIBBLE | ROM_BITSHIFT(12))   //!< 00000-01777 F2(0),F2(1)',F2(2)',F2(3)'
330   ROMX_LOAD( "60x.3",      00000, 02000, CRC(a35de0bf) SHA1(7fa4aead44dcf5393bbfd1706c0ada24aa6fd3ac), ROM_NIBBLE | ROM_BITSHIFT( 8))   //!< 00000-01777 LOADT',LOADL,NEXT(0)',NEXT(1)'
331   ROMX_LOAD( "61x.3",      00000, 02000, CRC(f25bcb2d) SHA1(acb57f3104a8dc4ba750dd1bf22ccc81cce9f084), ROM_NIBBLE | ROM_BITSHIFT( 4))   //!< 00000-01777 NEXT(2)',NEXT(3)',NEXT(4)',NEXT(5)'
332   ROMX_LOAD( "62x.3",      00000, 02000, CRC(1b20a63f) SHA1(41dc86438e91c12b0fe42ffcce6b2ac2eb9e714a), ROM_NIBBLE | ROM_BITSHIFT( 0))   //!< 00000-01777 NEXT(6)',NEXT(7)',NEXT(8)',NEXT(9)'
313   ROM_REGION( ALTO2_UCODE_SIZE, "maincpu", ROMREGION_INVERT )
314   ROMX_LOAD( "62x.3",      00000, 02000, CRC(1b20a63f) SHA1(41dc86438e91c12b0fe42ffcce6b2ac2eb9e714a), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT( 0))   //!< 00000-01777 NEXT(6)',NEXT(7)',NEXT(8)',NEXT(9)'
315   ROMX_LOAD( "61x.3",      00000, 02000, CRC(f25bcb2d) SHA1(acb57f3104a8dc4ba750dd1bf22ccc81cce9f084), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT( 4))   //!< 00000-01777 NEXT(2)',NEXT(3)',NEXT(4)',NEXT(5)'
316   ROMX_LOAD( "60x.3",      00000, 02000, CRC(a35de0bf) SHA1(7fa4aead44dcf5393bbfd1706c0ada24aa6fd3ac), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT( 8))   //!< 00000-01777 LOADT',LOADL,NEXT(0)',NEXT(1)'
317   ROMX_LOAD( "53x.3",      00000, 02000, CRC(3c89a740) SHA1(95d812d489b2bde03884b2f126f961caa6c8ec45), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(12))   //!< 00000-01777 F2(0),F2(1)',F2(2)',F2(3)'
318   ROMX_LOAD( "63x.3",      00000, 02000, CRC(f22d5028) SHA1(c65a42baef702d4aff2d9ad8e363daec27de6801), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(16))   //!< 00000-01777 F1(0),F1(1)',F1(2)',F1(3)'
319   ROMX_LOAD( "65x.3",      00000, 02000, CRC(741d1437) SHA1(01f7cf07c2173ac93799b2475180bfbbe7e0149b), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(20))   //!< 00000-01777 ALUF(3)',BS(0)',BS(1)',BS(2)'
320   ROMX_LOAD( "64x.3",      00000, 02000, CRC(51b444c0) SHA1(8756e51f7f3253a55d75886465beb7ee1be6e1c4), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(24))   //!< 00000-01777 RSEL(4)',ALUF(0)',ALUF(1)',ALUF(2)'
321   ROMX_LOAD( "55x.3",      00000, 02000, CRC(de870d75) SHA1(2b98cc769d8302cb39948711424d987d94e4159b), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(28))   //!< 00000-01777 RSEL(0)',RSEL(1)',RSEL(2)',RSEL(3)'
333322
334   ROM_REGION32_BE( 02000, "xm_mesa_5.1", ROMREGION_INVERT )
335323   // extended memory Mesa 5.1 micro code PROMs, 8 x 4bit
336   ROMX_LOAD( "xm51.u54",   00000, 02000, CRC(11086ae9) SHA1(c394e3fadbfb91801ddc1a70cb25dc6f606c4f76), ROM_NIBBLE | ROM_BITSHIFT(28))   //!< 00000-01777 RSEL(0)',RSEL(1)',RSEL(2)',RSEL(3)'
337   ROMX_LOAD( "xm51.u74",   00000, 02000, CRC(be8224f2) SHA1(ea9abcc3832b26a094319796901237e1e3f238b6), ROM_NIBBLE | ROM_BITSHIFT(24))   //!< 00000-01777 RSEL(4)',ALUF(0)',ALUF(1)',ALUF(2)'
338   ROMX_LOAD( "xm51.u75",   00000, 02000, CRC(dfe3e3ac) SHA1(246fd29f92150a5d5d7627fbb4f2504c7b6cd5ec), ROM_NIBBLE | ROM_BITSHIFT(20))   //!< 00000-01777 ALUF(3)',BS(0)',BS(1)',BS(2)'
339   ROMX_LOAD( "xm51.u73",   00000, 02000, CRC(6c20fa46) SHA1(a054330c65048011f12209aaed5c6da73d95f029), ROM_NIBBLE | ROM_BITSHIFT(16))   //!< 00000-01777 F1(0),F1(1)',F1(2)',F1(3)'
340   ROMX_LOAD( "xm51.u52",   00000, 02000, CRC(0a31eec8) SHA1(4e2ad5daa5e6a6f2143ee4de00c7b625d096fb02), ROM_NIBBLE | ROM_BITSHIFT(12))   //!< 00000-01777 F2(0),F2(1)',F2(2)',F2(3)'
341   ROMX_LOAD( "xm51.u70",   00000, 02000, CRC(5c64ee54) SHA1(0eb16d1b5e5967be7c1bf8c8ef6efdf0518a752c), ROM_NIBBLE | ROM_BITSHIFT( 8))   //!< 00000-01777 LOADT',LOADL,NEXT(0)',NEXT(1)'
342   ROMX_LOAD( "xm51.u71",   00000, 02000, CRC(7283bf71) SHA1(819fdcc407ed0acdd8f12b02db6efbcab7bec19a), ROM_NIBBLE | ROM_BITSHIFT( 4))   //!< 00000-01777 NEXT(2)',NEXT(3)',NEXT(4)',NEXT(5)'
343   ROMX_LOAD( "xm51.u72",   00000, 02000, CRC(a28e5251) SHA1(44dd8ad4ad56541b5394d30ce3521b4d1d561394), ROM_NIBBLE | ROM_BITSHIFT( 0))   //!< 00000-01777 NEXT(6)',NEXT(7)',NEXT(8)',NEXT(9)'
324   ROMX_LOAD( "xm51.u72",   02000, 02000, CRC(a28e5251) SHA1(44dd8ad4ad56541b5394d30ce3521b4d1d561394), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT( 0))   //!< 00000-01777 NEXT(6)',NEXT(7)',NEXT(8)',NEXT(9)'
325   ROMX_LOAD( "xm51.u71",   02000, 02000, CRC(7283bf71) SHA1(819fdcc407ed0acdd8f12b02db6efbcab7bec19a), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT( 4))   //!< 00000-01777 NEXT(2)',NEXT(3)',NEXT(4)',NEXT(5)'
326   ROMX_LOAD( "xm51.u70",   02000, 02000, CRC(5c64ee54) SHA1(0eb16d1b5e5967be7c1bf8c8ef6efdf0518a752c), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT( 8))   //!< 00000-01777 LOADT',LOADL,NEXT(0)',NEXT(1)'
327   ROMX_LOAD( "xm51.u52",   02000, 02000, CRC(0a31eec8) SHA1(4e2ad5daa5e6a6f2143ee4de00c7b625d096fb02), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(12))   //!< 00000-01777 F2(0),F2(1)',F2(2)',F2(3)'
328   ROMX_LOAD( "xm51.u73",   02000, 02000, CRC(6c20fa46) SHA1(a054330c65048011f12209aaed5c6da73d95f029), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(16))   //!< 00000-01777 F1(0),F1(1)',F1(2)',F1(3)'
329   ROMX_LOAD( "xm51.u75",   02000, 02000, CRC(dfe3e3ac) SHA1(246fd29f92150a5d5d7627fbb4f2504c7b6cd5ec), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(20))   //!< 00000-01777 ALUF(3)',BS(0)',BS(1)',BS(2)'
330   ROMX_LOAD( "xm51.u74",   02000, 02000, CRC(be8224f2) SHA1(ea9abcc3832b26a094319796901237e1e3f238b6), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(24))   //!< 00000-01777 RSEL(4)',ALUF(0)',ALUF(1)',ALUF(2)'
331   ROMX_LOAD( "xm51.u54",   02000, 02000, CRC(11086ae9) SHA1(c394e3fadbfb91801ddc1a70cb25dc6f606c4f76), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(28))   //!< 00000-01777 RSEL(0)',RSEL(1)',RSEL(2)',RSEL(3)'
344332
345   ROM_REGION32_BE( 02000, "xm_mesa_4.1", ROMREGION_INVERT )
346   // extended memory Mesa 4.1 (?) micro code PROMs, 8 x 4bit
347   ROMX_LOAD( "xm654.41",   00000, 02000, CRC(beace302) SHA1(0002fea03a0261f57365095c4b87385d833f7063), ROM_NIBBLE | ROM_BITSHIFT(28))   //!< 00000-01777 RSEL(0)',RSEL(1)',RSEL(2)',RSEL(3)'
348   ROMX_LOAD( "xm674.41",   00000, 02000, CRC(7db5c097) SHA1(364bc41951baa3ad274031bd49abec1cf5b7a980), ROM_NIBBLE | ROM_BITSHIFT(24))   //!< 00000-01777 RSEL(4)',ALUF(0)',ALUF(1)',ALUF(2)'
349   ROMX_LOAD( "xm675.41",   00000, 02000, CRC(26eac1e7) SHA1(9220a1386afae8de96bdb2cf084afbadeeb61d42), ROM_NIBBLE | ROM_BITSHIFT(20))   //!< 00000-01777 ALUF(3)',BS(0)',BS(1)',BS(2)'
350   ROMX_LOAD( "xm673.41",   00000, 02000, CRC(8173d7e3) SHA1(7fbacf6dccb60dfe9cef88a248c3a1660efddcf4), ROM_NIBBLE | ROM_BITSHIFT(16))   //!< 00000-01777 F1(0),F1(1)',F1(2)',F1(3)'
351   ROMX_LOAD( "xm652.41",   00000, 02000, CRC(ddfa94bb) SHA1(38625e269400aaf38cd07b5dbf36c0087a0f1b92), ROM_NIBBLE | ROM_BITSHIFT(12))   //!< 00000-01777 F2(0),F2(1)',F2(2)',F2(3)'
352   ROMX_LOAD( "xm670.41",   00000, 02000, CRC(1cd187f3) SHA1(0fd5eff7c6b5c2383aa20148a795b80286554675), ROM_NIBBLE | ROM_BITSHIFT( 8))   //!< 00000-01777 LOADT',LOADL,NEXT(0)',NEXT(1)'
353   ROMX_LOAD( "xm671.41",   00000, 02000, CRC(f21b1ad7) SHA1(1e18bdb35de7802892ac373c128f900786d40886), ROM_NIBBLE | ROM_BITSHIFT( 4))   //!< 00000-01777 NEXT(2)',NEXT(3)',NEXT(4)',NEXT(5)'
354   ROMX_LOAD( "xm672.41",   00000, 02000, CRC(110ee075) SHA1(bb72fceba5ce9e5e8c8a0024915006bdd011a3f3), ROM_NIBBLE | ROM_BITSHIFT( 0))   //!< 00000-01777 NEXT(6)',NEXT(7)',NEXT(8)',NEXT(9)'
333   // constant PROMs, 4 x 4bit
334   // UINT16 src = BITS(addr, 3,2,1,4,5,6,7,0);
335   // UINT16 u16 = ~((const[src] << 8) | (const[src+0x100));
336   // m_const[addr] = u16;
337   ROM_REGION( 0400, "const", ROMREGION_INVERT )
338   ROMX_LOAD( "madr.a3",    00000, 00400, CRC(e0992757) SHA1(5c45ea824970663cb9ee672dc50861539c860249), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT( 0))   //!< 0000-0377 C(12)',C(13)',C(14)',C(15)'
339   ROMX_LOAD( "madr.a4",    00000, 00400, CRC(b957e490) SHA1(c72660ad3ada4ca0ed8697c6bb6275a4fe703184), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT( 4))   //!< 0000-0377 C(08)',C(09)',C(10)',C(11)'
340   ROMX_LOAD( "madr.a5",    00000, 00400, CRC(42336101) SHA1(c77819cf40f063af3abf66ea43f17cc1a62e928b), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT( 8))   //!< 0000-0377 C(04)',C(05)',C(06)',C(07)'
341   ROMX_LOAD( "madr.a6",    00000, 00400, CRC(c2c196b2) SHA1(8b2a599ac839ec2a070dbfef2f1626e645c858ca), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(12))   //!< 0000-0377 C(00)',C(01)',C(02)',C(03)'
355342
343   ROM_REGION( 01500, "2k_ctrl", 0 )
344   ROMX_LOAD( "2kctl.u3",   00000, 00400, CRC(5f8d89e8) SHA1(487cd944ab074290aea73425e81ef4900d92e250), ROM_NIBBLE)   //!< 3601-1 256x4 BPROM; Emulator address modifier
345   ROMX_LOAD( "2kctl.u76",  00400, 00400, CRC(1edef867) SHA1(928b8a15ac515a99109f32672441832173883b81), ROM_NIBBLE)   //!< 3601-1 256x4 BPROM; 2KCTL replacement for u51 (1KCTL)
346   ROMX_LOAD( "3kcram.a37", 01000, 00400, CRC(9417360d) SHA1(bfcdbc56ee4ffafd0f2f672c0c869a55d6dd194b), ROM_NIBBLE)
347   ROMX_LOAD( "2kctl.u38",  01400, 00040, CRC(fc51b1d1) SHA1(e36c2a12a5da377394264899b5ae504e2ffda46e), 0)            //!< 82S23 32x8 BPROM; task priority and initial address
348   ROMX_LOAD( "alu.a10",    01440, 00040, CRC(e0857892) SHA1(dcd389767139f0acc1f87cf074459115abc5b90b), ROM_NIBBLE)
349
356350   ROM_REGION( 01040, "displ", 0 )
357351   ROMX_LOAD( "displ.a38",  00000, 00400, CRC(fd30beb7) SHA1(65e4a19ba4ff748d525122128c514abedd55d866), ROM_NIBBLE)   //!< P3601 256x4 BPROM; display FIFO control: STOPWAKE, MBEMPTY
358352   ROMX_LOAD( "displ.a66",  00400, 00400, CRC(9f91aad9) SHA1(69b1d4c71f4e18103112e8601850c2654e9265cf), ROM_NIBBLE)   //!< P3601 256x4 BPROM; display VSYNC and VBLANK
r26046r26047
370364   ROMX_LOAD( "madr.a90",   01400, 00400, CRC(7a2d8799) SHA1(c3760dba147740729d33b9b88e59088a4cc7437a), ROM_NIBBLE)
371365   ROMX_LOAD( "madr.a91",   02000, 00400, CRC(dd556aeb) SHA1(900f333a091e3ccde0843019c25f25fba62e6023), ROM_NIBBLE)
372366
373   ROM_REGION( ALTO2_RAM_SIZE, "io", 0 )
367   ROM_REGION( ALTO2_RAM_SIZE, "ram", 0 )
368
369   // extended memory Mesa 4.1 (?) micro code PROMs, 8 x 4bit (unused)
370   ROM_REGION32_BE( 02000, "xm_mesa_4.1", ROMREGION_INVERT )
371   ROMX_LOAD( "xm672.41",   00000, 02000, CRC(110ee075) SHA1(bb72fceba5ce9e5e8c8a0024915006bdd011a3f3), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT( 0))   //!< 00000-01777 NEXT(6)',NEXT(7)',NEXT(8)',NEXT(9)'
372   ROMX_LOAD( "xm671.41",   00000, 02000, CRC(f21b1ad7) SHA1(1e18bdb35de7802892ac373c128f900786d40886), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT( 4))   //!< 00000-01777 NEXT(2)',NEXT(3)',NEXT(4)',NEXT(5)'
373   ROMX_LOAD( "xm670.41",   00000, 02000, CRC(1cd187f3) SHA1(0fd5eff7c6b5c2383aa20148a795b80286554675), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT( 8))   //!< 00000-01777 LOADT',LOADL,NEXT(0)',NEXT(1)'
374   ROMX_LOAD( "xm652.41",   00000, 02000, CRC(ddfa94bb) SHA1(38625e269400aaf38cd07b5dbf36c0087a0f1b92), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(12))   //!< 00000-01777 F2(0),F2(1)',F2(2)',F2(3)'
375   ROMX_LOAD( "xm673.41",   00000, 02000, CRC(8173d7e3) SHA1(7fbacf6dccb60dfe9cef88a248c3a1660efddcf4), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(16))   //!< 00000-01777 F1(0),F1(1)',F1(2)',F1(3)'
376   ROMX_LOAD( "xm675.41",   00000, 02000, CRC(26eac1e7) SHA1(9220a1386afae8de96bdb2cf084afbadeeb61d42), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(20))   //!< 00000-01777 ALUF(3)',BS(0)',BS(1)',BS(2)'
377   ROMX_LOAD( "xm674.41",   00000, 02000, CRC(7db5c097) SHA1(364bc41951baa3ad274031bd49abec1cf5b7a980), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(24))   //!< 00000-01777 RSEL(4)',ALUF(0)',ALUF(1)',ALUF(2)'
378   ROMX_LOAD( "xm654.41",   00000, 02000, CRC(beace302) SHA1(0002fea03a0261f57365095c4b87385d833f7063), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(28))   //!< 00000-01777 RSEL(0)',RSEL(1)',RSEL(2)',RSEL(3)'
374379ROM_END
375380
376381/* Game Drivers */

Previous 199869 Revisions Next


© 1997-2024 The MAME Team