Previous 199869 Revisions Next

r26189 Friday 15th November, 2013 at 21:15:41 UTC by Jürgen Buchmüller
Simplify disassembler. Put a noop() function in slots instead of 0, which lets us just call the m_bs, m_f1 and m_f2 slots.
[/branches/alto2/src/emu/cpu/alto2]alto2.c alto2.h alto2dsm.c

branches/alto2/src/emu/cpu/alto2/alto2.c
r26188r26189
4444alto2_cpu_device::alto2_cpu_device(const machine_config& mconfig, const char* tag, device_t* owner, UINT32 clock) :
4545   cpu_device(mconfig, ALTO2, "Xerox Alto-II", tag, owner, clock, "alto2", __FILE__),
4646#if   ALTO2_DEBUG
47   m_log_types(LOG_DISK|LOG_KSEC|LOG_KWD),
47   m_log_types(LOG_CPU|LOG_DISK|LOG_KSEC|LOG_KWD),
4848   m_log_level(6),
4949   m_log_newline(true),
5050#endif
r26188r26189
25742574       * early f2 has to be done before early bs, because the
25752575       * emulator f2 acsource or acdest may change rsel
25762576       */
2577      if (m_f2[0][m_task][f2])
2578         ((*this).*m_f2[0][m_task][f2])();
2577      ((*this).*m_f2[0][m_task][f2])();
25792578
25802579      /*
25812580       * early bs can be done now
25822581       */
25832582      if (do_bs)
2584         if (m_bs[0][m_task][bs])
2585            ((*this).*m_bs[0][m_task][bs])();
2583         ((*this).*m_bs[0][m_task][bs])();
25862584
25872585      /*
25882586       * early f1
25892587       */
2590      if (m_f1[0][m_task][f1])
2591         ((*this).*m_f1[0][m_task][f1])();
2588      ((*this).*m_f1[0][m_task][f1])();
25922589
25932590      /* compute the ALU function */
25942591      switch (aluf) {
r26188r26189
29142911      }
29152912
29162913      /* late F1 is done now, if any */
2917      if (m_f1[1][m_task][f1])
2918         ((*this).*m_f1[1][m_task][f1])();
2914      ((*this).*m_f1[1][m_task][f1])();
29192915
29202916      /* late F2 is done now, if any */
2921      if (m_f2[1][m_task][f2])
2922         ((*this).*m_f2[1][m_task][f2])();
2917      ((*this).*m_f2[1][m_task][f2])();
29232918
29242919      /* late BS is done now, if no constant was put on the bus */
29252920      if (do_bs)
2926         if (m_bs[1][m_task][bs])
2927            ((*this).*m_bs[1][m_task][bs])();
2921         ((*this).*m_bs[1][m_task][bs])();
29282922
29292923      /*
29302924       * update L register and LALUC0, and also M register,
r26188r26189
29772971            /* get address modifier after task switch (?) */
29782972            m_next2 = m_task_next2[m_task];
29792973
2980            if (m_active_callback[m_task]) {
2981               /*
2982                * let the task know it becomes active now
2983                * and (most probably) reset the wakeup
2984                */
2985               ((*this).*m_active_callback[m_task])();
2986            }
2974            /*
2975             * let the task know it becomes active now
2976             * and (most probably) reset the wakeup
2977             */
2978            ((*this).*m_active_callback[m_task])();
29872979         }
29882980      }
29892981   } while (m_icount-- > 0);
r26188r26189
30062998
30072999      // every task starts at mpc = task number, in either ROM0 or RAM0
30083000      m_task_mpc[task] = (m_ctl2k_u38[task] >> 4) ^ 017;
3001      m_active_callback[task] = &alto2_cpu_device::noop;
30093002      if (0 == (m_reset_mode & (1 << task)))
30103003         m_task_mpc[task] |= ALTO2_UCODE_RAM_BASE;
30113004
branches/alto2/src/emu/cpu/alto2/alto2dsm.c
r26188r26189
125125   "R37"
126126};
127127
128//! for ALUF which is the value loaded into T, if t flags is set
129static const char* t_bus_alu[16] = {
130   "ALU",
131   "BUS",
132   "ALU",
133   "BUS",
134   "BUS",
135   "ALU",
136   "ALU",
137   "BUS",
138   "BUS",
139   "BUS",
140   "ALU",
141   "ALU",
142   "ALU",
143   "BUS",
144   "BUS",
145   "BUS",
146};
147
128148/**
129149 * @brief copy of the constant PROM, which this disassembler may not have access to
130150 */
r26188r26189
216236   if (next != pc + 1)
217237      result |= DASMFLAG_STEP_OUT;
218238
239   if (t)
240      dst += snprintf(dst, len - (size_t)(dst - buffer), "T←%s ", t_bus_alu[aluf]);
241   if (l)
242      dst += snprintf(dst, len - (size_t)(dst - buffer), "L← ");
243   if (bs == 1)
244      dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]);
219245   switch (aluf) {
220246   case  0: // T?: BUS
221      if (t)
222         dst += snprintf(dst, len - (size_t)(dst - buffer), "T←ALU ");
223      if (l)
224         dst += snprintf(dst, len - (size_t)(dst - buffer), "L← ");
225      if (bs == 1)
226         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]);
227      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS) ");
247      // this is somehow redundant and just wasting space
248      // dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS) ");
228249      break;
229250   case  1: //   : T
230      if (t)
231         dst += snprintf(dst, len - (size_t)(dst - buffer), "T←BUS ");
232      if (l)
233         dst += snprintf(dst, len - (size_t)(dst - buffer), "L← ");
234      if (bs == 1)
235         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]);
236251      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(T) ");
237252      break;
238253   case  2: // T?: BUS OR T
239      if (t)
240         dst += snprintf(dst, len - (size_t)(dst - buffer), "T←ALU ");
241      if (l)
242         dst += snprintf(dst, len - (size_t)(dst - buffer), "L← ");
243      if (bs == 1)
244         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]);
245254      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS OR T) ");
246255      break;
247256   case  3: //   : BUS AND T
248      if (t)
249         dst += snprintf(dst, len - (size_t)(dst - buffer), "T←BUS ");
250      if (l)
251         dst += snprintf(dst, len - (size_t)(dst - buffer), "L← ");
252      if (bs == 1)
253         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]);
254257      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS AND T) ");
255258      break;
256259   case  4: //   : BUS XOR T
257      if (t)
258         dst += snprintf(dst, len - (size_t)(dst - buffer), "T←BUS ");
259      if (l)
260         dst += snprintf(dst, len - (size_t)(dst - buffer), "L← ");
261      if (bs == 1)
262         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]);
263260      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS XOR T) ");
264261      break;
265262   case  5: // T?: BUS + 1
266      if (t)
267         dst += snprintf(dst, len - (size_t)(dst - buffer), "T←ALU ");
268      if (l)
269         dst += snprintf(dst, len - (size_t)(dst - buffer), "L← ");
270      if (bs == 1)
271         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]);
272263      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS + 1) ");
273264      break;
274265   case  6: // T?: BUS - 1
275      if (t)
276         dst += snprintf(dst, len - (size_t)(dst - buffer), "T←ALU ");
277      if (l)
278         dst += snprintf(dst, len - (size_t)(dst - buffer), "L← ");
279      if (bs == 1)
280         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]);
281266      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS - 1) ");
282267      break;
283268   case  7: //   : BUS + T
284      if (t)
285         dst += snprintf(dst, len - (size_t)(dst - buffer), "T←BUS ");
286      if (l)
287         dst += snprintf(dst, len - (size_t)(dst - buffer), "L← ");
288      if (bs == 1)
289         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]);
290269      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS + T) ");
291270      break;
292271   case  8: //   : BUS - T
293      if (t)
294         dst += snprintf(dst, len - (size_t)(dst - buffer), "T←BUS ");
295      if (l)
296         dst += snprintf(dst, len - (size_t)(dst - buffer), "L← ");
297      if (bs == 1)
298         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]);
299272      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS - T) ");
300273      break;
301274   case  9: //   : BUS - T - 1
302      if (t)
303         dst += snprintf(dst, len - (size_t)(dst - buffer), "T←BUS ");
304      if (l)
305         dst += snprintf(dst, len - (size_t)(dst - buffer), "L← ");
306      if (bs == 1)
307         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]);
308275      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS - T - 1) ");
309276      break;
310277   case 10: // T?: BUS + T + 1
311      if (t)
312         dst += snprintf(dst, len - (size_t)(dst - buffer), "T←ALU ");
313      if (l)
314         dst += snprintf(dst, len - (size_t)(dst - buffer), "L← ");
315      if (bs == 1)
316         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]);
317278      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS + T + 1) ");
318279      break;
319280   case 11: // T?: BUS + SKIP
320      if (t)
321         dst += snprintf(dst, len - (size_t)(dst - buffer), "T←ALU ");
322      if (l)
323         dst += snprintf(dst, len - (size_t)(dst - buffer), "L← ");
324      if (bs == 1)
325         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]);
326281      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS + SKIP) ");
327282      break;
328283   case 12: // T?: BUS, T (AND)
329      if (t)
330         dst += snprintf(dst, len - (size_t)(dst - buffer), "T←ALU ");
331      if (l)
332         dst += snprintf(dst, len - (size_t)(dst - buffer), "L← ");
333      if (bs == 1)
334         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]);
335      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS AND T) ");
284      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS, T) ");
336285      break;
337286   case 13: //   : BUS AND NOT T
338      if (t)
339         dst += snprintf(dst, len - (size_t)(dst - buffer), "T←BUS ");
340      if (l)
341         dst += snprintf(dst, len - (size_t)(dst - buffer), "L← ");
342      if (bs == 1)
343         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]);
344287      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS AND NOT T) ");
345288      break;
346289   case 14: //   : undefined
347      if (t)
348         dst += snprintf(dst, len - (size_t)(dst - buffer), "T←BUS ");
349      if (l)
350         dst += snprintf(dst, len - (size_t)(dst - buffer), "L← ");
351      if (bs == 1)
352         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]);
353290      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(14) ");
354291      break;
355292   case 15: //   : undefined
356      if (t)
357         dst += snprintf(dst, len - (size_t)(dst - buffer), "T←BUS ");
358      if (l)
359         dst += snprintf(dst, len - (size_t)(dst - buffer), "L← ");
360      if (bs == 1)
361         dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]);
362293      dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(15) ");
363294      break;
364295   }
r26188r26189
414345      break;
415346   case 7:   // put the constant from PROM (RSELECT,BS) on the bus
416347      pa = (rsel << 3) | bs;
417      dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS←[%03o]%05o ", pa, const_prom[pa]);
348      dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS←%05o CONST[%03o]", const_prom[pa], pa);
418349      break;
419350   default:
420351      dst += snprintf(dst, len - (size_t)(dst - buffer), "F1_%02o ", f1);
r26188r26189
451382      dst += snprintf(dst, len - (size_t)(dst - buffer), "MD←BUS ");
452383      break;
453384   case 7:   // put on the bus the constant from PROM (RSELECT,BS)
454      pa = 8 * rsel + bs;
455      dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS←%05o CONST[%03o]", const_prom[pa], pa);
385      if (f1 != 7) {
386         pa = 8 * rsel + bs;
387         dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS←%05o CONST[%03o]", const_prom[pa], pa);
388      }
456389      break;
457390   default:
458391      dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS←F2_%02o ", f2);
branches/alto2/src/emu/cpu/alto2/alto2.h
r26188r26189
10341034    */
10351035   UINT8* m_madr_a91;
10361036
1037   //! no operating function to put in the m_bs, m_f1 and m_f2 slots
1038   void noop() {}
1039
10371040   //! per task bus source function pointers, early (0) and late (1)
10381041   a2func m_bs[2][ALTO2_TASKS][ALTO2_BUSSRC];
10391042   void set_bs(UINT8 task, UINT8 fn, a2func f0, a2func f1) {
1040      m_bs[0][task][fn] = f0;
1041      m_bs[1][task][fn] = f1;
1043      m_bs[0][task][fn] = f0 ? f0 : &alto2_cpu_device::noop;
1044      m_bs[1][task][fn] = f1 ? f1 : &alto2_cpu_device::noop;
10421045   }
10431046
10441047   //! per task f1 function pointers, early (0) and late (1)
10451048   a2func m_f1[2][ALTO2_TASKS][ALTO2_F1MAX];
10461049   void set_f1(UINT8 task, UINT8 fn, a2func f0, a2func f1) {
1047      m_f1[0][task][fn] = f0;
1048      m_f1[1][task][fn] = f1;
1050      m_f1[0][task][fn] = f0 ? f0 : &alto2_cpu_device::noop;
1051      m_f1[1][task][fn] = f1 ? f1 : &alto2_cpu_device::noop;
10491052   }
10501053
10511054   //! per task f2 function pointers, early (0) and late (1)
10521055   a2func m_f2[2][ALTO2_TASKS][ALTO2_F2MAX];
10531056   void set_f2(UINT8 task, UINT8 fn, a2func f0, a2func f1) {
1054      m_f2[0][task][fn] = f0;
1055      m_f2[1][task][fn] = f1;
1057      m_f2[0][task][fn] = f0 ? f0 : &alto2_cpu_device::noop;
1058      m_f2[1][task][fn] = f1 ? f1 : &alto2_cpu_device::noop;
10561059   }
10571060
10581061   bool m_ram_related[ALTO2_TASKS];            //!< set when task is RAM related

Previous 199869 Revisions Next


© 1997-2024 The MAME Team