machine_pmax.cc Source File

Back to the index.

machine_pmax.cc
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2003-2018 Anders Gavare. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are met:
6  *
7  * 1. Redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution.
12  * 3. The name of the author may not be used to endorse or promote products
13  * derived from this software without specific prior written permission.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25  * SUCH DAMAGE.
26  *
27  *
28  * COMMENT: Digital DECstation ("PMAX") machines
29  */
30 
31 #include <stdio.h>
32 #include <stdlib.h>
33 #include <string.h>
34 
35 #include "cpu.h"
36 #include "device.h"
37 #include "devices.h"
38 #include "diskimage.h"
39 #include "machine.h"
40 #include "machine_pmax.h"
41 #include "memory.h"
42 #include "misc.h"
43 
44 #include "thirdparty/dec_prom.h"
46 #include "thirdparty/dec_5100.h"
47 #include "thirdparty/dec_kn01.h"
48 #include "thirdparty/dec_kn02.h"
49 #include "thirdparty/dec_kn03.h"
50 #include "thirdparty/dec_kmin.h"
51 #include "thirdparty/dec_maxine.h"
52 
53 #define BOOTARG_BUFLEN 2000
54 
55 
57 {
58  const char *framebuffer_console_name, *serial_console_name;
59  char *init_bootpath;
60  int color_fb_flag, i;
61  int boot_scsi_boardnumber = 3, boot_net_boardnumber = 3;
62  const char *turbochannel_default_gfx_card = "PMAG-BA";
63  /* PMAG-AA, -BA, -CA/DA/EA/FA, -JA, -RO, PMAGB-BA */
64  struct xx {
65  struct btinfo_magic a;
66  struct btinfo_bootpath b;
67  struct btinfo_symtab c;
68  } xx;
69  char tmpstr[1000];
70  struct vfb_data *fb;
71  struct memory *mem = machine->memory;
72  uint64_t addr;
73 
75 
76  /*
77  * Add an R2020 or R3220 writeback memory thing:
78  */
79  cpu->cd.mips.coproc[3] = mips_coproc_new(cpu, 3);
80 
81  /* There aren't really any good standard values... */
82  framebuffer_console_name = "osconsole=0,3";
83  serial_console_name = "osconsole=1";
84 
85  switch (machine->machine_subtype) {
86 
87  case MACHINE_DEC_PMAX_3100: /* type 1, KN01 */
88  /* Supposed to have 12MHz or 16.67MHz R2000 CPU, R2010 FPC,
89  R2020 Memory coprocessor */
90  machine->machine_name = strdup("DEC PMAX 3100 (KN01)");
91 
92  /* 12 MHz for 2100, 16.67 MHz for 3100 */
93  if (machine->emulated_hz == 0)
94  machine->emulated_hz = 16670000;
95 
96  if (machine->physical_ram_in_mb > 24)
97  fprintf(stderr, "WARNING! Real DECstation 3100 machines"
98  " cannot have more than 24MB RAM.\n");
99 
100  if ((machine->physical_ram_in_mb % 4) != 0)
101  fprintf(stderr, "WARNING! Real DECstation 3100 machines"
102  " have an integer multiple of 4 MBs of RAM.\n");
103 
104  /* 1 for color, 0 for mono. TODO: command line option? */
105  color_fb_flag = 1;
106 
107  /*
108  * According to NetBSD/pmax:
109  *
110  * pm0 at ibus0 addr 0xfc00000: 1024x864x1 (or x8 for color)
111  * dc0 at ibus0 addr 0x1c000000
112  * le0 at ibus0 addr 0x18000000: address 00:00:00:00:00:00
113  * sii0 at ibus0 addr 0x1a000000
114  * mcclock0 at ibus0 addr 0x1d000000: mc146818 or compatible
115  * 0x1e000000 = system status and control register
116  */
118  color_fb_flag? VFB_DEC_VFB02 : VFB_DEC_VFB01,
119  0,0,0,0,0, color_fb_flag? "VFB02":"VFB01");
121  &fb->color_plane_mask);
123  color_fb_flag);
124 
125  snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].%i",
129  tmpstr, 4*1048576);
130 
131  snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].%i",
134  KN01_SYS_SII_B_END, tmpstr);
135 
136  snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].%i",
138  dev_dc7085_init(machine, mem, KN01_SYS_DZ, tmpstr,
140 
141  snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].%i",
144  MC146818_DEC, 1);
145 
146  dev_kn01_init(mem, KN01_SYS_CSR, color_fb_flag);
147 
148  framebuffer_console_name = "osconsole=0,3"; /* fb,keyb */
149  serial_console_name = "osconsole=3"; /* 3 */
150  break;
151 
152  case MACHINE_DEC_3MAX_5000: /* type 2, KN02 */
153  /* Supposed to have 25MHz R3000 CPU, R3010 FPC, */
154  /* and a R3220 Memory coprocessor */
155  machine->machine_name = strdup("DECstation 5000/200 (3MAX, KN02)");
156 
157  if (machine->emulated_hz == 0)
158  machine->emulated_hz = 25000000;
159 
160  if (machine->physical_ram_in_mb < 8)
161  fprintf(stderr, "WARNING! Real KN02 machines do not "
162  "have less than 8MB RAM. Continuing anyway.\n");
163  if (machine->physical_ram_in_mb > 480)
164  fprintf(stderr, "WARNING! Real KN02 machines cannot "
165  "have more than 480MB RAM. Continuing anyway.\n");
166 
167  /* An R3220 memory thingy: */
168  cpu->cd.mips.coproc[3] = mips_coproc_new(cpu, 3);
169 
170  /*
171  * According to NetBSD/pmax:
172  * asc0 at tc0 slot 5 offset 0x0
173  * le0 at tc0 slot 6 offset 0x0
174  * ibus0 at tc0 slot 7 offset 0x0
175  * dc0 at ibus0 addr 0x1fe00000
176  * mcclock0 at ibus0 addr 0x1fe80000: mc146818
177  */
178 
179  /* KN02 mainbus (TurboChannel interrupt controller): */
180  snprintf(tmpstr, sizeof(tmpstr), "kn02 addr=0x%x "
181  "irq=%s.cpu[%i].2", (int) KN02_SYS_CSR,
183  device_add(machine, tmpstr);
184 
185  /*
186  * TURBOchannel slots 0, 1, and 2 are free for option cards.
187  * Let's put in zero or more graphics boards:
188  *
189  * TODO: It's also possible to have larger graphics cards that
190  * occupy several slots. How should this be solved nicely?
191  */
192 
193  snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].2.kn02.%i",
197  machine->n_gfx_cards >= 1?
198  turbochannel_default_gfx_card : "",
199  tmpstr);
200 
201  snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].2.kn02.%i",
205  machine->n_gfx_cards >= 2?
206  turbochannel_default_gfx_card : "",
207  tmpstr);
208 
209  snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].2.kn02.%i",
213  machine->n_gfx_cards >= 3?
214  turbochannel_default_gfx_card : "",
215  tmpstr);
216 
217  /* TURBOchannel slots 3 and 4 are reserved. */
218 
219  /* TURBOchannel slot 5 is PMAZ-AA ("asc" SCSI). */
220  snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].2.kn02.%i",
224  "PMAZ-AA", tmpstr);
225 
226  /* TURBOchannel slot 6 is PMAD-AA ("le" ethernet). */
227  snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].2.kn02.%i",
231  "PMAD-AA", tmpstr);
232 
233  /* TURBOchannel slot 7 is system stuff. */
234  snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].2.kn02.%i",
238  KN02_SYS_DZ, tmpstr, machine->x11_md.in_use);
239 
240  snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].%i",
243  KN02_SYS_CLOCK, tmpstr, MC146818_DEC, 1);
244 
245  framebuffer_console_name = "osconsole=0,7";
246  /* fb,keyb */
247  serial_console_name = "osconsole=2";
248  boot_scsi_boardnumber = 5;
249  boot_net_boardnumber = 6; /* TODO: 3? */
250  break;
251 
252  case MACHINE_DEC_3MIN_5000: /* type 3, KN02BA */
253  machine->machine_name = strdup("DECstation 5000/112, 125, or 145 (3MIN,"
254  " KN02BA)");
255  if (machine->emulated_hz == 0)
256  machine->emulated_hz = 33000000;
257  if (machine->physical_ram_in_mb > 128)
258  fprintf(stderr, "WARNING! Real 3MIN machines cannot "
259  "have more than 128MB RAM. Continuing anyway.\n");
260 
261  /* KN02BA "3min" TurboChannel interrupt controller: */
262  snprintf(tmpstr, sizeof(tmpstr), "kn02ba irq=%s.cpu[%i].%i",
264  device_add(machine, tmpstr);
265 
266  /*
267  * tc0 at mainbus0: 12.5 MHz clock (0x10000000,slotsize=64MB)
268  * tc slot 1: 0x14000000
269  * tc slot 2: 0x18000000
270  * ioasic0 at tc0 slot 3 offset 0x0 (0x1c000000) slot 0
271  * asic regs (0x1c040000) slot 1
272  * station's ether address (0x1c080000) slot 2
273  * le0 at ioasic0 offset 0xc0000: address 00:00:00:00:00:00
274  * (0x1c0c0000) slot 3
275  * scc0 at ioasic0 offset 0x100000 (0x1c100000) slot 4
276  * scc1 at ioasic0 offset 0x180000: console(0x1c180000) slot 6
277  * mcclock0 at ioasic0 offset 0x200000: mc146818 or
278  * compatible (0x1c200000) slot 8
279  * asc0 at ioasic0 offset 0x300000: NCR53C94, 25MHz,
280  * SCSI ID 7 (0x1c300000) slot 12
281  * dma for asc0 (0x1c380000) slot 14
282  */
283 
284 ////fatal("TODO: kmin dev_le_init.\n");
285 ////abort();
286 // dev_le_init(machine, mem, 0x1c0c0000, 0, 0,
287 // KMIN_INTR_LANCE + 8, 4 * 65536);
288 
289  snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].%i.kn02ba.0x%x",
291  dev_scc_init(machine, mem, 0x1c100000, tmpstr,
292  machine->x11_md.in_use, 0, 1);
293 
294  snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].%i.kn02ba.0x%x",
296  dev_scc_init(machine, mem, 0x1c180000, tmpstr,
297  machine->x11_md.in_use, 1, 1);
298 
299 
300  snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].%i.kn02ba.0x%x",
303  KMIN_SYS_CLOCK, tmpstr, MC146818_DEC, 1);
304 
305  snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].%i.kn02ba.0x%x",
307  dev_asc_init(machine, mem, 0x1c300000, tmpstr,
308  NULL, DEV_ASC_DEC, NULL, NULL);
309 
310  /*
311  * TURBOchannel slots 0, 1, and 2 are free for
312  * option cards. These are by default filled with
313  * zero or more graphics boards.
314  *
315  * TODO: irqs
316  */
317 
318  snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].%i",
322  machine->n_gfx_cards >= 1?
323  turbochannel_default_gfx_card : "",
324  tmpstr);
325 
326  snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].%i",
330  machine->n_gfx_cards >= 2?
331  turbochannel_default_gfx_card : "",
332  tmpstr);
333 
334  snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].%i",
338  machine->n_gfx_cards >= 3?
339  turbochannel_default_gfx_card : "",
340  tmpstr);
341 
342  /* (kmin shared irq numbers (IP) are offset by +8 in the
343  emulator) */
344  /* kmin_csr = dev_kmin_init(cpu, mem, KMIN_REG_INTR); */
345 
346  framebuffer_console_name = "osconsole=0,3"; /* fb,keyb(?) */
347  serial_console_name = "osconsole=3"; /* ? */
348  break;
349 
350  case MACHINE_DEC_3MAXPLUS_5000: /* type 4, KN03 */
351  machine->machine_name = strdup("DECsystem 5900 or 5000 (3MAX+) (KN03)");
352 
353  /* 5000/240 (KN03-GA, R3000): 40 MHz */
354  /* 5000/260 (KN05-NB, R4000): 60 MHz */
355  /* TODO: are both these type 4? */
356  if (machine->emulated_hz == 0)
357  machine->emulated_hz = 40000000;
358  if (machine->physical_ram_in_mb > 480)
359  fprintf(stderr, "WARNING! Real KN03 machines cannot "
360  "have more than 480MB RAM. Continuing anyway.\n");
361 
362  /* KN03 interrupts: */
363 fatal("TODO: Legacy rewrite\n");
364 abort();
365 // machine->md_interrupt = kn03_interrupt;
366 
367  /*
368  * tc0 at mainbus0: 25 MHz clock (slot 0) (0x1e000000)
369  * tc0 slot 1 (0x1e800000)
370  * tc0 slot 2 (0x1f000000)
371  * ioasic0 at tc0 slot 3 offset 0x0 (0x1f800000)
372  * something that has to do with interrupts? (?)(0x1f840000?)
373  * le0 at ioasic0 offset 0xc0000 (0x1f8c0000)
374  * scc0 at ioasic0 offset 0x100000 (0x1f900000)
375  * scc1 at ioasic0 offset 0x180000: console (0x1f980000)
376  * mcclock0 at ioasic0 offset 0x200000: mc146818 or
377  * compatible (0x1fa00000)
378  * asc0 at ioasic0 offset 0x300000: NCR53C94, 25MHz,
379  * SCSI ID 7 (0x1fb00000)
380  */
381 fatal("TODO: dec_ioasic legacy rewrite\n");
382 abort();
383 // machine->md_int.dec_ioasic_data = dev_dec_ioasic_init(cpu,
384 // mem, 0x1f800000, 0);
385 
386 fatal("TODO: kn03 dev_le_init rewrite\n");
387 abort();
388 // dev_le_init(machine, mem, KN03_SYS_LANCE, 0, 0,
389 // KN03_INTR_LANCE +8, 4 * 65536);
390 
391 fatal("TODO: dec_ioasic legacy rewrite\n");
392 abort();
393 // machine->md_int.dec_ioasic_data->dma_func[3] =
394 // dev_scc_dma_func;
395 // machine->md_int.dec_ioasic_data->dma_func_extra[2] =
396 // dev_scc_init(machine, mem, KN03_SYS_SCC_0,
397 // KN03_INTR_SCC_0 +8, machine->x11_md.in_use, 0, 1);
398 // machine->md_int.dec_ioasic_data->dma_func[2] =
399 // dev_scc_dma_func;
400 // machine->md_int.dec_ioasic_data->dma_func_extra[3] =
401 // dev_scc_init(machine, mem, KN03_SYS_SCC_1,
402 // KN03_INTR_SCC_1 +8, machine->x11_md.in_use, 1, 1);
403 
404 fatal("TODO: mc146818 irq\n");
405 abort();
406 // dev_mc146818_init(machine, mem, KN03_SYS_CLOCK, KN03_INT_RTC,
407 // MC146818_DEC, 1);
408 fatal("TODO: asc init rewrite\n");
409 abort();
410 // dev_asc_init(machine, mem, KN03_SYS_SCSI,
411 // KN03_INTR_SCSI +8, NULL, DEV_ASC_DEC, NULL, NULL);
412 
413  /*
414  * TURBOchannel slots 0, 1, and 2 are free for
415  * option cards. These are by default filled with
416  * zero or more graphics boards.
417  *
418  * TODO: irqs
419  */
420 fatal("TODO: turbochannel rewrite init\n");
421 abort();
422 #if 0
425  machine->n_gfx_cards >= 1?
426  turbochannel_default_gfx_card : "",
427  KN03_INTR_TC_0 +8);
428 
431  machine->n_gfx_cards >= 2?
432  turbochannel_default_gfx_card : "",
433  KN03_INTR_TC_1 +8);
434 
437  machine->n_gfx_cards >= 3?
438  turbochannel_default_gfx_card : "",
439  KN03_INTR_TC_2 +8);
440 #endif
441 
442  /* TODO: interrupts */
443  /* shared (turbochannel) interrupts are +8 */
444 
445  framebuffer_console_name = "osconsole=0,3"; /* fb,keyb(?) */
446  serial_console_name = "osconsole=3"; /* ? */
447  break;
448 
449  case MACHINE_DEC_5800: /* type 5, KN5800 */
450  machine->machine_name = strdup("DECsystem 5800");
451 
452  /* TODO: this is incorrect, banks multiply by 8 etc */
453  if (machine->physical_ram_in_mb < 48)
454  fprintf(stderr, "WARNING! 5800 will probably not run "
455  "with less than 48MB RAM. Continuing anyway.\n");
456 
457  /*
458  * According to
459  * http://www2.no.netbsd.org/ports/pmax/models.html,
460  * the 5800-series is based on VAX 6000/300.
461  */
462 
463  /*
464  * Ultrix might support SMP on this machine type.
465  *
466  * Something at 0x10000000.
467  * ssc serial console at 0x10140000, interrupt 2 (shared
468  * with XMI?).
469  * xmi 0 at address 0x11800000 (node x at offset x*0x80000)
470  * Clock uses interrupt 3 (shared with XMI?).
471  */
472 
473  device_add(machine, "dec5800 addr=0x10000000");
474  device_add(machine, "decbi addr=0x10000000");
475 
476  snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].dec5800.28",
478  dev_ssc_init(machine, mem, 0x10140000,
479  tmpstr, machine->x11_md.in_use);
480 
481  dev_decxmi_init(mem, 0x11800000);
483 
484  break;
485 
486  case MACHINE_DEC_5400: /* type 6, KN210 */
487  machine->machine_name = strdup("DECsystem 5400 (KN210)");
488  /*
489  * Misc. info from the KN210 manual:
490  *
491  * Interrupt lines:
492  * irq5 fpu
493  * irq4 halt
494  * irq3 pwrfl -> mer1 -> mer0 -> wear
495  * irq2 100 Hz -> birq7
496  * irq1 dssi -> ni -> birq6
497  * irq0 birq5 -> console -> timers -> birq4
498  *
499  * Interrupt status register at 0x10048000.
500  * Main memory error status register at 0x1008140.
501  * Interval Timer Register (ITR) at 0x10084010.
502  * Q22 stuff at 0x10088000 - 0x1008ffff.
503  * TODR at 0x1014006c.
504  * TCR0 (timer control register 0) 0x10140100.
505  * TIR0 (timer interval register 0) 0x10140104.
506  * TCR1 (timer control register 1) 0x10140110.
507  * TIR1 (timer interval register 1) 0x10140114.
508  * VRR0 (Vector Read Register 0) at 0x16000050.
509  * VRR1 (Vector Read Register 1) at 0x16000054.
510  * VRR2 (Vector Read Register 2) at 0x16000058.
511  * VRR3 (Vector Read Register 3) at 0x1600005c.
512  */
513  /* ln (ethernet) at 0x10084x00 ? and 0x10120000 ? */
514  /* error registers (?) at 0x17000000 and 0x10080000 */
515  /* device_add(machine, "kn210 addr=0x10080000"); */
516  dev_ssc_init(machine, mem, 0x10140000, "irq? TODO",
518  break;
519 
520  case MACHINE_DEC_MAXINE_5000: /* type 7, KN02CA */
521  machine->machine_name = strdup("Personal DECstation 5000/xxx "
522  "(MAXINE) (KN02CA)");
523  if (machine->emulated_hz == 0)
524  machine->emulated_hz = 33000000;
525 
526  if (machine->physical_ram_in_mb < 8)
527  fprintf(stderr, "WARNING! Real KN02CA machines do not "
528  "have less than 8MB RAM. Continuing anyway.\n");
529  if (machine->physical_ram_in_mb > 40)
530  fprintf(stderr, "WARNING! Real KN02CA machines cannot "
531  "have more than 40MB RAM. Continuing anyway.\n");
532 
533  /* Maxine interrupts: */
534 fatal("TODO: Legacy rewrite\n");
535 abort();
536 
537 // machine->md_interrupt = maxine_interrupt;
538 
539  /*
540  * Something at address 0xca00000. (?)
541  * Something at address 0xe000000. (?)
542  * tc0 slot 0 (0x10000000)
543  * tc0 slot 1 (0x14000000)
544  * (tc0 slot 2 used by the framebuffer)
545  * ioasic0 at tc0 slot 3 offset 0x0 (0x1c000000)
546  * le0 at ioasic0 offset 0xc0000: address 00:00:00:00:00:00
547  * (0x1c0c0000)
548  * scc0 at ioasic0 offset 0x100000: console <-- serial
549  * (0x1c100000)
550  * mcclock0 at ioasic0 offset 0x200000: mc146818 (0x1c200000)
551  * isdn at ioasic0 offset 0x240000 not configured (0x1c240000)
552  * bba0 at ioasic0 offset 0x240000 (audio0 at bba0)
553  * ^--- which one of isdn and bba0?
554  * dtop0 at ioasic0 offset 0x280000 (0x1c280000)
555  * fdc at ioasic0 offset 0x2c0000 not configured
556  * ^-- floppy (0x1c2c0000)
557  * asc0 at ioasic0 offset 0x300000: NCR53C94, 25MHz, SCSI
558  * ID 7 (0x1c300000)
559  * xcfb0 at tc0 slot 2 offset 0x0: 1024x768x8
560  * built-in framebuffer (0xa000000)
561  */
562 fatal("TODO: dec_ioasic legacy rewrite\n");
563 abort();
564 // machine->md_int.dec_ioasic_data =
565 // dev_dec_ioasic_init(cpu, mem, 0x1c000000, 0);
566 
567 fatal("TODO: turbochannel rewrite!\n");
568 abort();
569 #if 0
570  /* TURBOchannel slots (0 and 1): */
572  0x10000000, 0x103fffff,
573  machine->n_gfx_cards >= 2?
574  turbochannel_default_gfx_card : "",
575  XINE_INTR_TC_0 +8);
577  0x14000000, 0x143fffff,
578  machine->n_gfx_cards >= 3?
579  turbochannel_default_gfx_card : "",
580  XINE_INTR_TC_1 +8);
581 
582  /*
583  * TURBOchannel slot 2 is hardwired to be used by
584  * the framebuffer: (NOTE: 0x8000000, not 0x18000000)
585  */
587  0x8000000, 0xbffffff, "PMAG-DV", 0);
588 #endif
589  /*
590  * TURBOchannel slot 3: fixed, ioasic
591  * (the system stuff), 0x1c000000
592  */
593 fatal("TODO: xine dev_le_init rewrite\n");
594 abort();
595 // dev_le_init(machine, mem, 0x1c0c0000, 0, 0,
596 // XINE_INTR_LANCE +8, 4*65536);
597 // dev_scc_init(machine, mem, 0x1c100000,
598 // XINE_INTR_SCC_0 +8, machine->x11_md.in_use, 0, 1);
599 fatal("TODO: mc146818 irq\n");
600 abort();
601 // dev_mc146818_init(machine, mem, 0x1c200000,
602 // XINE_INT_TOY, MC146818_DEC, 1);
603 fatal("TODO: xine asc init rewrite\n");
604 abort();
605 // dev_asc_init(machine, mem, 0x1c300000,
606 // XINE_INTR_SCSI +8, NULL, DEV_ASC_DEC, NULL, NULL);
607 
608  framebuffer_console_name = "osconsole=3,2"; /* keyb,fb? */
609  serial_console_name = "osconsole=3";
610  break;
611 
612  case MACHINE_DEC_5500: /* type 11, KN220 */
613  machine->machine_name = strdup("DECsystem 5500 (KN220)");
614 
615  /*
616  * According to NetBSD's pmax ports page:
617  * KN220-AA is a "30 MHz R3000 CPU with R3010 FPU"
618  * with "512 kBytes of Prestoserve battery backed RAM."
619  */
620  if (machine->emulated_hz == 0)
621  machine->emulated_hz = 30000000;
622 
623  /*
624  * See KN220 docs for more info.
625  *
626  * something at 0x10000000
627  * something at 0x10001000
628  * something at 0x10040000
629  * scc at 0x10140000
630  * qbus at (or around) 0x10080000
631  * dssi (disk controller) buffers at 0x10100000,
632  * registers at 0x10160000.
633  * sgec (ethernet) registers at 0x10008000, station
634  * addresss at 0x10120000.
635  * asc (scsi) at 0x17100000.
636  */
637 
638  dev_ssc_init(machine, mem, 0x10140000, "TODO: irq",
640 
641  /* something at 0x17000000, ultrix says "cpu 0 panic: "
642  "DS5500 I/O Board is missing" if this is not here */
643  dev_dec5500_ioboard_init(cpu, mem, 0x17000000);
644 
645  dev_sgec_init(mem, 0x10008000, 0); /* irq? */
646 
647  /* The asc controller might be TURBOchannel-ish? */
648 #if 0
649  dev_turbochannel_init(machine, mem, 0, 0x17100000,
650  0x171fffff, "PMAZ-AA", 0); /* irq? */
651 #else
652  dev_asc_init(machine, mem, 0x17100000, 0, NULL,
653  DEV_ASC_DEC, NULL, NULL); /* irq? */
654 #endif
655 
656  framebuffer_console_name = "osconsole=0,0"; /* TODO (?) */
657  serial_console_name = "osconsole=0";
658  break;
659 
660  case MACHINE_DEC_MIPSMATE_5100: /* type 12 */
661  machine->machine_name = strdup("DEC MIPSMATE 5100 (KN230)");
662 
663  if (machine->emulated_hz == 0)
664  machine->emulated_hz = 20000000;
665 
666  if (machine->physical_ram_in_mb > 128)
667  fprintf(stderr, "WARNING! Real MIPSMATE 5100 machines "
668  "cannot have more than 128MB RAM. Continuing"
669  " anyway.\n");
670 
671  if (machine->x11_md.in_use)
672  fprintf(stderr, "WARNING! Real MIPSMATE 5100 machines "
673  "cannot have a graphical framebuffer. "
674  "Continuing anyway.\n");
675 
676  /* KN230 mainbus / interrupt controller: */
677  snprintf(tmpstr, sizeof(tmpstr),
678  "kn230 addr=0x%" PRIx64, (uint64_t) KN230_SYS_ICSR);
679  device_add(machine, tmpstr);
680 
681  /*
682  * According to NetBSD/pmax:
683  * dc0 at ibus0 addr 0x1c000000
684  * le0 at ibus0 addr 0x18000000: address 00:00:00:00:00:00
685  * sii0 at ibus0 addr 0x1a000000
686  */
687 
688  snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].%i",
691  MC146818_DEC, 1);
692 
693  snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].kn230.0x%x",
696  tmpstr, machine->x11_md.in_use);
697 
698  /* dev_dc7085_init(machine, mem, KN230_SYS_DZ1,
699  KN230_CSR_INTR_OPT0, machine->x11_md.in_use); */
700  /* dev_dc7085_init(machine, mem, KN230_SYS_DZ2,
701  KN230_CSR_INTR_OPT1, machine->x11_md.in_use); */
702 
703  snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].kn230.0x%x",
708  tmpstr, 4*1048576);
709 
710  snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].kn230.0x%x",
714 
715  serial_console_name = "osconsole=0";
716  break;
717 
718  default:fatal("Unknown DEC machine type: %i\n",
720  exit(1);
721  }
722 
723  /*
724  * Most OSes on DECstation use physical addresses below
725  * 0x20000000, but both OSF/1 and Sprite use 0xbe...... as if
726  * it was 0x1e......, so we need this hack:
727  */
728  dev_ram_init(machine, 0xa0000000, 0x20000000,
730 
731  if (!machine->prom_emulation)
732  return;
733 
734 
735  /* DECstation PROM stuff: (TODO: endianness) */
736  for (i=0; i<150; i++)
738  DEC_PROM_EMULATION + i*8);
739 
740  /* Fill PROM with special "magic trap" instructions: */
741  for (i=0; i<150; i++) {
743  0x00c0de0c); /* trap instruction */
745  0x00000000); /* nop */
746  }
747 
748  /* Jumptable at beginning of PROM: also "magic trap" instructions: */
749  for (i=0; i<0x180; i+=8) {
750  store_32bit_word(cpu, 0xbfc00000 + i,
751  0x00c0de0c); /* trap instruction */
752  store_32bit_word(cpu, 0xbfc00000 + i + 4,
753  0x00000000); /* nop */
754  }
755 
756 
757  /*
758  * According to dec_prom.h from NetBSD:
759  *
760  * "Programs loaded by the new PROMs pass the following arguments:
761  * a0 argc
762  * a1 argv
763  * a2 DEC_PROM_MAGIC
764  * a3 The callback vector defined below"
765  *
766  * So we try to emulate a PROM, even though no such thing has been
767  * loaded.
768  */
769 
770  cpu->cd.mips.gpr[MIPS_GPR_A0] = 3;
774 
777 
779  (DEC_PROM_INITIAL_ARGV + 0x10));
781  (DEC_PROM_INITIAL_ARGV + 0x70));
783  (DEC_PROM_INITIAL_ARGV + 0xe0));
785 
786  /*
787  * NetBSD and Ultrix expect the boot args to be like this:
788  *
789  * "boot" "bootdev" [args?]
790  *
791  * where bootdev is supposed to be "rz(0,0,0)netbsd" for
792  * 3100/2100 (although that crashes Ultrix :-/), and
793  * "5/rz0a/netbsd" for all others. The number '5' is the
794  * slot number of the boot device.
795  *
796  * 'rz' for disks, 'tz' for tapes.
797  *
798  * TODO: Make this nicer.
799  */
800  {
801  char bootpath[200];
802 #if 0
804  strlcpy(bootpath, "rz(0,0,0)", sizeof(bootpath));
805  else
806 #endif
807  strlcpy(bootpath, "5/rz1/", sizeof(bootpath));
808 
809  if (machine->bootdev_id < 0 || machine->force_netboot) {
810  /* tftp boot: */
811  strlcpy(bootpath, "5/tftp/", sizeof(bootpath));
812  bootpath[0] = '0' + boot_net_boardnumber;
813  } else {
814  /* disk boot: */
815  bootpath[0] = '0' + boot_scsi_boardnumber;
818  bootpath[2] = 't';
819  bootpath[4] = '0' + machine->bootdev_id;
820  }
821 
822  init_bootpath = bootpath;
823  }
824 
825  CHECK_ALLOCATION(machine->bootarg = (char *) malloc(BOOTARG_BUFLEN));
826  strlcpy(machine->bootarg, init_bootpath, BOOTARG_BUFLEN);
829  fprintf(stderr, "bootarg truncated?\n");
830  exit(1);
831  }
832 
833  machine->bootstr = strdup("boot");
834 
839 
840  /* Decrease the nr of args, if there are no args :-) */
841  if (machine->boot_string_argument == NULL ||
842  machine->boot_string_argument[0] == '\0')
843  cpu->cd.mips.gpr[MIPS_GPR_A0] --;
844 
845  if (machine->boot_string_argument[0] != '\0') {
846  strlcat(machine->bootarg, " ", BOOTARG_BUFLEN);
849  fprintf(stderr, "bootstr truncated?\n");
850  exit(1);
851  }
852  }
853 
854  xx.a.common.next = (char *)&xx.b - (char *)&xx;
855  xx.a.common.type = BTINFO_MAGIC;
856  xx.a.magic = BOOTINFO_MAGIC;
857 
858  xx.b.common.next = (char *)&xx.c - (char *)&xx.b;
859  xx.b.common.type = BTINFO_BOOTPATH;
860  strlcpy(xx.b.bootpath, machine->bootstr, sizeof(xx.b.bootpath));
861 
862  xx.c.common.next = 0;
863  xx.c.common.type = BTINFO_SYMTAB;
864  xx.c.nsym = 0;
865  xx.c.ssym = 0;
866  xx.c.esym = machine->file_loaded_end_addr;
867 
868  store_buf(cpu, BOOTINFO_ADDR, (char *)&xx, sizeof(xx));
869 
871  malloc(sizeof(struct machine_pmax)));
872  memset(machine->md.pmax, 0, sizeof(struct machine_pmax));
873 
874  /* The system's memmap: */
876  malloc(sizeof(struct dec_memmap)));
878  (unsigned char *)&machine->md.pmax->memmap->pagesize, 4096);
879 
880  for (unsigned int j=0; j<sizeof(machine->md.pmax->memmap->bitmap); j++)
881  machine->md.pmax->memmap->bitmap[j] = ((int)j * 4096*8 <
882  1048576*machine->physical_ram_in_mb)? 0xff : 0x00;
883 
885  (char *)machine->md.pmax->memmap, sizeof(struct dec_memmap));
886 
887  /* Environment variables: */
888  addr = DEC_PROM_STRINGS;
889 
890  if (machine->x11_md.in_use && machine->n_gfx_cards > 0)
891  /* (0,3) Keyboard and Framebuffer */
892  add_environment_string(cpu, framebuffer_console_name, &addr);
893  else
894  /* Serial console */
895  add_environment_string(cpu, serial_console_name, &addr);
896 
897  /*
898  * The KN5800 (SMP system) uses a CCA (console communications
899  * area): (See VAX 6000 documentation for details.)
900  */
901  {
902  char tmps[300];
903  snprintf(tmps, sizeof(tmps), "cca=%" PRIx32,
904  (uint32_t) (DEC_DECCCA_BASEADDR + 0xa0000000ULL));
905  add_environment_string(cpu, tmps, &addr);
906  }
907 
908  /* These are needed for Sprite to boot: */
909  {
910  char tmps[500];
911 
912  snprintf(tmps, sizeof(tmps), "boot=%s", machine->bootarg);
913  tmps[sizeof(tmps)-1] = '\0';
914  add_environment_string(cpu, tmps, &addr);
915 
916  snprintf(tmps, sizeof(tmps), "bitmap=0x%" PRIx32, (uint32_t)
917  ( (DEC_MEMMAP_ADDR + sizeof(uint32_t) /* skip the
918  page size and point to the memmap */
919  ) & 0xffffffffULL) );
920  tmps[sizeof(tmps)-1] = '\0';
921  add_environment_string(cpu, tmps, &addr);
922 
923  snprintf(tmps, sizeof(tmps), "bitmaplen=0x%" PRIx32, (uint32_t)
924  ( machine->physical_ram_in_mb * 1048576 / 4096 / 8) );
925  tmps[sizeof(tmps)-1] = '\0';
926  add_environment_string(cpu, tmps, &addr);
927  }
928 
929  add_environment_string(cpu, "scsiid0=7", &addr);
930  add_environment_string(cpu, "bootmode=a", &addr);
931  add_environment_string(cpu, "testaction=q", &addr);
932  add_environment_string(cpu, "haltaction=h", &addr);
933  add_environment_string(cpu, "more=24", &addr);
934 
935  /* Used in at least Ultrix on the 5100: */
936  add_environment_string(cpu, "scsiid=7", &addr);
937  add_environment_string(cpu, "baud0=9600", &addr);
938  add_environment_string(cpu, "baud1=9600", &addr);
939  add_environment_string(cpu, "baud2=9600", &addr);
940  add_environment_string(cpu, "baud3=9600", &addr);
941  add_environment_string(cpu, "iooption=0x1", &addr);
942 
943  /* The end: */
944  add_environment_string(cpu, "", &addr);
945 }
946 
947 
949 {
950  if (machine->machine_subtype > 2)
951  CHECK_ALLOCATION(machine->cpu_name = strdup("R3000A"));
952 
953  if (machine->machine_subtype > 1 && machine->cpu_name == NULL)
954  CHECK_ALLOCATION(machine->cpu_name = strdup("R3000"));
955 
956  if (machine->cpu_name == NULL)
957  CHECK_ALLOCATION(machine->cpu_name = strdup("R2000"));
958 }
959 
960 
962 {
963  switch (machine->machine_subtype) {
966  break;
969  break;
970  default:machine->physical_ram_in_mb = 32;
971  }
972 }
973 
974 
976 {
977  MR_DEFAULT(pmax, "DECstation/DECsystem", ARCH_MIPS, MACHINE_PMAX);
978 
979  machine_entry_add_alias(me, "decstation");
980  machine_entry_add_alias(me, "decsystem");
981  machine_entry_add_alias(me, "dec");
982 
983  machine_entry_add_subtype(me, "DECstation 3100 (PMAX)",
984  MACHINE_DEC_PMAX_3100, "pmax", "3100", "2100", NULL);
985 
986  machine_entry_add_subtype(me, "DECstation 5000/200 (3MAX)",
987  MACHINE_DEC_3MAX_5000, "3max", "5000/200", NULL);
988 
989  machine_entry_add_subtype(me, "DECstation 5000/1xx (3MIN)",
990  MACHINE_DEC_3MIN_5000, "3min", "5000/1xx", NULL);
991 
992  machine_entry_add_subtype(me, "DECstation 5000 (3MAXPLUS)",
993  MACHINE_DEC_3MAXPLUS_5000, "3maxplus", "3max+", NULL);
994 
995  machine_entry_add_subtype(me, "DECsystem 58x0",
996  MACHINE_DEC_5800, "5800", "58x0", NULL);
997 
998  machine_entry_add_subtype(me, "DECsystem 5400",
999  MACHINE_DEC_5400, "5400", NULL);
1000 
1001  machine_entry_add_subtype(me, "DECstation Maxine (5000)",
1002  MACHINE_DEC_MAXINE_5000, "maxine", NULL);
1003 
1004  machine_entry_add_subtype(me, "DECsystem 5500",
1005  MACHINE_DEC_5500, "5500", NULL);
1006 
1007  machine_entry_add_subtype(me, "DECstation MipsMate (5100)",
1008  MACHINE_DEC_MIPSMATE_5100, "5100", "mipsmate", NULL);
1009 
1010  me->set_default_ram = machine_default_ram_pmax;
1011 }
1012 
unsigned char color_plane_mask
Definition: devices.h:210
void dev_ssc_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, const char *irq_path, int use_fb)
Definition: dev_ssc.cc:225
void dev_mc146818_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, char *irq_path, int access_style, int addrdiv)
void fatal(const char *fmt,...)
Definition: main.cc:152
#define KN01_INT_SII
Definition: dec_kn01.h:156
int emulated_hz
Definition: machine.h:165
#define KMIN_INT_TC1
Definition: dec_kmin.h:168
#define KN02_SYS_DZ
Definition: dec_kn02.h:158
#define DEC_PROM_EMULATION
Definition: machine.h:276
int prom_emulation
Definition: machine.h:149
char * cpu_name
Definition: machine.h:133
#define KN02_PHYS_TC_2_END
Definition: dec_kn02.h:126
void dev_asc_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, const char *irq_path, void *turbochannel, int mode, size_t(*dma_controller)(void *dma_controller_data, unsigned char *data, size_t len, int writeflag), void *dma_controller_data)
Definition: dev_asc.cc:1226
#define KN230_SYS_LANCE
Definition: dec_5100.h:66
#define KN230_SYS_SII_B_START
Definition: dec_5100.h:71
int main_console_handle
Definition: machine.h:128
int store_32bit_word(struct cpu *cpu, uint64_t addr, uint64_t data32)
Definition: memory.cc:783
#define KMIN_PHYS_TC_2_END
Definition: dec_kmin.h:133
#define KN03_INTR_TC_1
Definition: dec_kn03.h:200
#define BTINFO_MAGIC
Definition: dec_bootinfo.h:54
#define KN230_SYS_ICSR
Definition: dec_5100.h:78
#define KMIN_PHYS_TC_1_START
Definition: dec_kmin.h:129
#define BOOTINFO_ADDR
Definition: dec_bootinfo.h:46
#define BOOTINFO_MAGIC
Definition: dec_bootinfo.h:39
#define KN01_SYS_LANCE_B_END
Definition: dec_kn01.h:138
#define MACHINE_DEC_3MIN_5000
Definition: machine.h:267
#define KMIN_INTR_SCSI
Definition: dec_kmin.h:277
struct vfb_data * dev_fb_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int vfb_type, int visible_xsize, int visible_ysize, int xsize, int ysize, int bit_depth, const char *name)
Definition: dev_fb.cc:834
#define KN230_CSR_INTR_DZ0
Definition: dec_5100.h:92
MACHINE_SETUP(pmax)
Definition: machine_pmax.cc:56
#define KMIN_INT_TC3
Definition: dec_kmin.h:166
#define MIPS_GPR_A0
union cpu::@1 cd
void dev_sgec_init(struct memory *mem, uint64_t baseaddr, int irq_nr)
Definition: dev_kn220.cc:151
#define KN01_SYS_LANCE
Definition: dec_kn01.h:136
void store_string(struct cpu *cpu, uint64_t addr, const char *s)
Definition: memory.cc:695
int dev_dc7085_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, char *irq_path, int use_fb)
Definition: dev_dc7085.cc:298
MACHINE_DEFAULT_RAM(pmax)
#define DEC_PROM_CALLBACK_STRUCT
Definition: machine.h:275
#define KN02_SYS_CLOCK
Definition: dec_kn02.h:159
MACHINE_REGISTER(pmax)
#define KN02_PHYS_TC_0_START
Definition: dec_kn02.h:119
#define KN01_PHYS_COLMASK_START
Definition: dec_kn01.h:127
#define KN02_PHYS_TC_5_START
Definition: dec_kn02.h:134
struct memory * memory
Definition: machine.h:126
#define KMIN_PHYS_TC_0_END
Definition: dec_kmin.h:127
#define MACHINE_PMAX
Definition: machine.h:213
#define KN03_PHYS_TC_1_END
Definition: dec_kn03.h:97
#define DEC_PROM_INITIAL_ARGV
Definition: machine.h:277
#define KN03_PHYS_TC_2_END
Definition: dec_kn03.h:100
#define KMIN_SYS_CLOCK
Definition: dec_kmin.h:155
#define KMIN_INT_TC0
Definition: dec_kmin.h:169
void dev_le_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, uint64_t buf_start, uint64_t buf_end, const char *irq_path, int len)
Definition: dev_le.cc:759
MACHINE_DEFAULT_CPU(pmax)
#define KN03_INTR_TC_0
Definition: dec_kn03.h:199
#define BTINFO_SYMTAB
Definition: dec_bootinfo.h:56
#define MIPS_GPR_A2
void dev_turbochannel_init(struct machine *machine, struct memory *mem, int slot_nr, uint64_t baseaddr, uint64_t endaddr, const char *device_name, const char *irq_path)
void * device_add(struct machine *machine, const char *name_and_params)
Definition: device.cc:252
#define KN230_CSR_INTR_SII
Definition: dec_5100.h:89
#define MACHINE_DEC_5500
Definition: machine.h:272
#define BTINFO_BOOTPATH
Definition: dec_bootinfo.h:55
int physical_ram_in_mb
Definition: machine.h:147
#define DEV_RAM_MIRROR
Definition: devices.h:365
void dev_deccca_init(struct memory *mem, uint64_t baseaddr)
Definition: dev_dec5800.cc:389
#define KN230_SYS_SII_B_END
Definition: dec_5100.h:72
#define MACHINE_DEC_5400
Definition: machine.h:270
#define MACHINE_DEC_PMAX_3100
Definition: machine.h:265
#define KN01_SYS_SII_B_END
Definition: dec_kn01.h:141
#define EMUL_LITTLE_ENDIAN
Definition: misc.h:164
char * boot_string_argument
Definition: machine.h:171
#define CHECK_ALLOCATION(ptr)
Definition: misc.h:239
#define KN02_PHYS_TC_5_END
Definition: dec_kn02.h:135
#define DEC_PROM_MAGIC
Definition: dec_prom.h:86
char * boot_kernel_filename
Definition: machine.h:170
#define KN01_SYS_DZ
Definition: dec_kn01.h:142
char * path
Definition: machine.h:108
uint32_t pagesize
Definition: dec_prom.h:89
#define KMIN_INTR_SCC_1
Definition: dec_kmin.h:279
#define KN02_PHYS_TC_1_START
Definition: dec_kn02.h:122
void dev_colorplanemask_init(struct memory *mem, uint64_t baseaddr, unsigned char *color_plane_mask)
union machine::@2 md
#define KN03_INTR_TC_2
Definition: dec_kn03.h:201
int bootstrap_cpu
Definition: machine.h:136
#define KN01_SYS_SII
Definition: dec_kn01.h:139
#define MIPS_GPR_A3
#define KN230_SYS_DZ0
Definition: dec_5100.h:74
#define KN03_PHYS_TC_2_START
Definition: dec_kn03.h:99
#define KN01_SYS_CSR
Definition: dec_kn01.h:144
void dev_ram_init(struct machine *machine, uint64_t baseaddr, uint64_t length, int mode, uint64_t otheraddress, const char *name)
Definition: dev_ram.cc:134
#define XINE_INTR_TC_1
Definition: dec_maxine.h:301
#define KMIN_PHYS_TC_1_END
Definition: dec_kmin.h:130
int force_netboot
Definition: machine.h:167
#define MIPS_GPR_A1
void machine_entry_add_subtype(struct machine_entry *me, const char *name, int oldstyle_subtype,...)
Definition: machine.cc:717
#define KN01_INT_DZ
Definition: dec_kn01.h:154
#define KN02_PHYS_TC_6_END
Definition: dec_kn02.h:138
#define KN01_SYS_SII_B_START
Definition: dec_kn01.h:140
void add_environment_string(struct cpu *cpu, const char *s, uint64_t *addr)
Definition: memory.cc:710
void machine_entry_add_alias(struct machine_entry *me, const char *name)
Definition: machine.cc:697
struct mips_coproc * coproc[N_MIPS_COPROCS]
Definition: cpu_mips.h:219
u_char bitmap[15360]
Definition: dec_prom.h:90
struct mips_coproc * mips_coproc_new(struct cpu *cpu, int coproc_nr)
#define KN230_SYS_LANCE_B_START
Definition: dec_5100.h:67
#define MACHINE_DEC_MIPSMATE_5100
Definition: machine.h:273
#define MC146818_DEC
Definition: devices.h:302
#define KN02_SYS_CSR
Definition: dec_kn02.h:160
struct x11_md x11_md
Definition: machine.h:179
#define KMIN_PHYS_TC_0_START
Definition: dec_kmin.h:126
uint32_t addr
#define MACHINE_DEC_3MAX_5000
Definition: machine.h:266
#define KN01_SYS_LANCE_B_START
Definition: dec_kn01.h:137
#define KMIN_PHYS_TC_2_START
Definition: dec_kmin.h:132
char * bootstr
Definition: machine.h:155
Definition: cpu.h:326
#define KMIN_INTR_CLOCK
Definition: dec_kmin.h:281
#define KMIN_INT_TC2
Definition: dec_kmin.h:167
int bootdev_type
Definition: machine.h:153
#define DEV_RAM_MIGHT_POINT_TO_DEVICES
Definition: devices.h:366
#define BOOTARG_BUFLEN
Definition: machine_pmax.cc:53
#define DEC_DECCCA_BASEADDR
Definition: devices.h:178
void dev_vdac_init(struct memory *mem, uint64_t baseaddr, unsigned char *rgb_palette, int color_fb_flag)
Definition: dev_kn01.cc:233
#define KN230_SYS_CLOCK
Definition: dec_5100.h:76
#define MACHINE_DEC_5800
Definition: machine.h:269
#define KN230_SYS_SII
Definition: dec_5100.h:70
#define KN02_PHYS_TC_1_END
Definition: dec_kn02.h:123
#define XINE_INTR_TC_0
Definition: dec_maxine.h:294
int bootdev_id
Definition: machine.h:154
int in_use
Definition: machine.h:82
void dev_sii_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, uint64_t buf_start, uint64_t buf_end, char *irq_path)
Definition: dev_sii.cc:440
#define KN03_PHYS_TC_1_START
Definition: dec_kn03.h:96
int diskimage_is_a_tape(struct machine *machine, int id, int type)
Definition: diskimage.cc:1063
uint8_t byte_order
Definition: cpu.h:347
void dev_kn01_init(struct memory *mem, uint64_t baseaddr, int color_fb)
Definition: dev_kn01.cc:252
#define DEV_ASC_DEC
Definition: devices.h:116
struct dec5500_ioboard_data * dev_dec5500_ioboard_init(struct cpu *cpu, struct memory *mem, uint64_t baseaddr)
Definition: dev_kn220.cc:168
#define KN01_SYS_CLOCK
Definition: dec_kn01.h:143
uint64_t gpr[N_MIPS_GPRS]
Definition: cpu_mips.h:209
Definition: memory.h:75
struct mips_cpu mips
Definition: cpu.h:443
#define KN03_PHYS_TC_0_START
Definition: dec_kn03.h:93
#define MACHINE_DEC_3MAXPLUS_5000
Definition: machine.h:268
#define KN230_SYS_LANCE_B_END
Definition: dec_5100.h:68
uint64_t file_loaded_end_addr
Definition: machine.h:169
#define VFB_DEC_VFB02
Definition: devices.h:193
void store_32bit_word_in_host(struct cpu *cpu, unsigned char *data, uint64_t data32)
Definition: memory.cc:973
#define INITIAL_STACK_POINTER
Definition: cpu_mips.h:69
void store_buf(struct cpu *cpu, uint64_t addr, const char *s, size_t len)
Definition: memory.cc:826
int machine_subtype
Definition: machine.h:112
struct machine_pmax * pmax
Definition: machine.h:184
#define KMIN_INTR_SCC_0
Definition: dec_kmin.h:280
#define KN02_PHYS_TC_6_START
Definition: dec_kn02.h:137
#define KN01_PHYS_FBUF_START
Definition: dec_kn01.h:123
#define VFB_DEC_VFB01
Definition: devices.h:192
#define KN02_PHYS_TC_2_START
Definition: dec_kn02.h:125
#define KN01_SYS_VDAC
Definition: dec_kn01.h:134
#define DEC_PROM_STRINGS
Definition: machine.h:278
#define KN03_PHYS_TC_0_END
Definition: dec_kn03.h:94
void dev_decxmi_init(struct memory *mem, uint64_t baseaddr)
Definition: dev_dec5800.cc:501
#define MR_DEFAULT(x, name, arch, type)
Definition: machine.h:370
#define KN01_INT_CLOCK
Definition: dec_kn01.h:153
#define KN02_INT_CLOCK
Definition: dec_kn02.h:171
struct dec_memmap * memmap
Definition: machine_pmax.h:38
unsigned char rgb_palette[256 *3]
Definition: devices.h:223
#define MACHINE_DEC_MAXINE_5000
Definition: machine.h:271
const char * machine_name
Definition: machine.h:115
#define DEC_MEMMAP_ADDR
Definition: machine.h:280
#define KN230_CSR_INTR_LANCE
Definition: dec_5100.h:88
#define KN02_PHYS_TC_0_END
Definition: dec_kn02.h:120
#define ARCH_MIPS
Definition: machine.h:203
int n_gfx_cards
Definition: machine.h:173
void * dev_scc_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, char *irq_path, int use_fb, int scc_nr, int addrmul)
Definition: dev_scc.cc:461
#define KN01_INT_LANCE
Definition: dec_kn01.h:155
char * bootarg
Definition: machine.h:156

Generated on Sun Sep 30 2018 16:05:18 for GXemul by doxygen 1.8.13