1 |
/* |
/* |
2 |
* Copyright (C) 2003-2006 Anders Gavare. All rights reserved. |
* Copyright (C) 2003-2007 Anders Gavare. All rights reserved. |
3 |
* |
* |
4 |
* Redistribution and use in source and binary forms, with or without |
* Redistribution and use in source and binary forms, with or without |
5 |
* modification, are permitted provided that the following conditions are met: |
* modification, are permitted provided that the following conditions are met: |
25 |
* SUCH DAMAGE. |
* SUCH DAMAGE. |
26 |
* |
* |
27 |
* |
* |
28 |
* $Id: machine_pmax.c,v 1.3 2006/01/23 00:13:21 debug Exp $ |
* $Id: machine_pmax.c,v 1.23 2007/02/18 09:19:48 debug Exp $ |
29 |
|
* |
30 |
|
* DECstation ("PMAX") machine description. |
31 |
*/ |
*/ |
32 |
|
|
33 |
#include <stdio.h> |
#include <stdio.h> |
39 |
#include "devices.h" |
#include "devices.h" |
40 |
#include "diskimage.h" |
#include "diskimage.h" |
41 |
#include "machine.h" |
#include "machine.h" |
|
#include "machine_interrupts.h" |
|
42 |
#include "memory.h" |
#include "memory.h" |
43 |
#include "misc.h" |
#include "misc.h" |
44 |
|
|
73 |
|
|
74 |
cpu->byte_order = EMUL_LITTLE_ENDIAN; |
cpu->byte_order = EMUL_LITTLE_ENDIAN; |
75 |
|
|
76 |
/* An R2020 or R3220 memory thingy: */ |
/* |
77 |
|
* Add an R2020 or R3220 writeback memory thing: |
78 |
|
*/ |
79 |
cpu->cd.mips.coproc[3] = mips_coproc_new(cpu, 3); |
cpu->cd.mips.coproc[3] = mips_coproc_new(cpu, 3); |
80 |
|
|
81 |
/* There aren't really any good standard values... */ |
/* There aren't really any good standard values... */ |
121 |
&fb->color_plane_mask); |
&fb->color_plane_mask); |
122 |
dev_vdac_init(mem, KN01_SYS_VDAC, fb->rgb_palette, |
dev_vdac_init(mem, KN01_SYS_VDAC, fb->rgb_palette, |
123 |
color_fb_flag); |
color_fb_flag); |
124 |
|
|
125 |
|
snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].%i", |
126 |
|
machine->path, machine->bootstrap_cpu, KN01_INT_LANCE); |
127 |
dev_le_init(machine, mem, KN01_SYS_LANCE, |
dev_le_init(machine, mem, KN01_SYS_LANCE, |
128 |
KN01_SYS_LANCE_B_START, KN01_SYS_LANCE_B_END, |
KN01_SYS_LANCE_B_START, KN01_SYS_LANCE_B_END, |
129 |
KN01_INT_LANCE, 4*1048576); |
tmpstr, 4*1048576); |
130 |
|
|
131 |
|
snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].%i", |
132 |
|
machine->path, machine->bootstrap_cpu, KN01_INT_SII); |
133 |
dev_sii_init(machine, mem, KN01_SYS_SII, KN01_SYS_SII_B_START, |
dev_sii_init(machine, mem, KN01_SYS_SII, KN01_SYS_SII_B_START, |
134 |
KN01_SYS_SII_B_END, KN01_INT_SII); |
KN01_SYS_SII_B_END, tmpstr); |
135 |
dev_dc7085_init(machine, mem, KN01_SYS_DZ, KN01_INT_DZ, |
|
136 |
|
snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].%i", |
137 |
|
machine->path, machine->bootstrap_cpu, KN01_INT_DZ); |
138 |
|
dev_dc7085_init(machine, mem, KN01_SYS_DZ, tmpstr, |
139 |
machine->use_x11); |
machine->use_x11); |
140 |
dev_mc146818_init(machine, mem, KN01_SYS_CLOCK, KN01_INT_CLOCK, |
|
141 |
|
snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].%i", |
142 |
|
machine->path, machine->bootstrap_cpu, KN01_INT_CLOCK); |
143 |
|
dev_mc146818_init(machine, mem, KN01_SYS_CLOCK, tmpstr, |
144 |
MC146818_DEC, 1); |
MC146818_DEC, 1); |
145 |
dev_kn01_csr_init(mem, KN01_SYS_CSR, color_fb_flag); |
|
146 |
|
dev_kn01_init(mem, KN01_SYS_CSR, color_fb_flag); |
147 |
|
|
148 |
framebuffer_console_name = "osconsole=0,3"; /* fb,keyb */ |
framebuffer_console_name = "osconsole=0,3"; /* fb,keyb */ |
149 |
serial_console_name = "osconsole=3"; /* 3 */ |
serial_console_name = "osconsole=3"; /* 3 */ |
175 |
* ibus0 at tc0 slot 7 offset 0x0 |
* ibus0 at tc0 slot 7 offset 0x0 |
176 |
* dc0 at ibus0 addr 0x1fe00000 |
* dc0 at ibus0 addr 0x1fe00000 |
177 |
* mcclock0 at ibus0 addr 0x1fe80000: mc146818 |
* mcclock0 at ibus0 addr 0x1fe80000: mc146818 |
|
* |
|
|
* kn02 shared irq numbers (IP) are offset by +8 |
|
|
* in the emulator |
|
178 |
*/ |
*/ |
179 |
|
|
180 |
/* KN02 interrupts: */ |
/* KN02 mainbus (TurboChannel interrupt controller): */ |
181 |
machine->md_interrupt = kn02_interrupt; |
snprintf(tmpstr, sizeof(tmpstr), "kn02 addr=0x%x " |
182 |
|
"irq=%s.cpu[%i].2", (int) KN02_SYS_CSR, |
183 |
|
machine->path, machine->bootstrap_cpu); |
184 |
|
device_add(machine, tmpstr); |
185 |
|
|
186 |
/* |
/* |
187 |
* TURBOchannel slots 0, 1, and 2 are free for |
* TURBOchannel slots 0, 1, and 2 are free for option cards. |
188 |
* option cards. Let's put in zero or more graphics |
* Let's put in zero or more graphics boards: |
|
* boards: |
|
189 |
* |
* |
190 |
* TODO: It's also possible to have larger graphics |
* TODO: It's also possible to have larger graphics cards that |
191 |
* cards that occupy several slots. How to solve |
* occupy several slots. How should this be solved nicely? |
|
* this nicely? |
|
192 |
*/ |
*/ |
193 |
|
|
194 |
|
snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].2.kn02.%i", |
195 |
|
machine->path, machine->bootstrap_cpu, 0); |
196 |
dev_turbochannel_init(machine, mem, 0, |
dev_turbochannel_init(machine, mem, 0, |
197 |
KN02_PHYS_TC_0_START, KN02_PHYS_TC_0_END, |
KN02_PHYS_TC_0_START, KN02_PHYS_TC_0_END, |
198 |
machine->n_gfx_cards >= 1? |
machine->n_gfx_cards >= 1? |
199 |
turbochannel_default_gfx_card : "", |
turbochannel_default_gfx_card : "", |
200 |
KN02_IP_SLOT0 +8); |
tmpstr); |
201 |
|
|
202 |
|
snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].2.kn02.%i", |
203 |
|
machine->path, machine->bootstrap_cpu, 1); |
204 |
dev_turbochannel_init(machine, mem, 1, |
dev_turbochannel_init(machine, mem, 1, |
205 |
KN02_PHYS_TC_1_START, KN02_PHYS_TC_1_END, |
KN02_PHYS_TC_1_START, KN02_PHYS_TC_1_END, |
206 |
machine->n_gfx_cards >= 2? |
machine->n_gfx_cards >= 2? |
207 |
turbochannel_default_gfx_card : "", |
turbochannel_default_gfx_card : "", |
208 |
KN02_IP_SLOT1 +8); |
tmpstr); |
209 |
|
|
210 |
|
snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].2.kn02.%i", |
211 |
|
machine->path, machine->bootstrap_cpu, 2); |
212 |
dev_turbochannel_init(machine, mem, 2, |
dev_turbochannel_init(machine, mem, 2, |
213 |
KN02_PHYS_TC_2_START, KN02_PHYS_TC_2_END, |
KN02_PHYS_TC_2_START, KN02_PHYS_TC_2_END, |
214 |
machine->n_gfx_cards >= 3? |
machine->n_gfx_cards >= 3? |
215 |
turbochannel_default_gfx_card : "", |
turbochannel_default_gfx_card : "", |
216 |
KN02_IP_SLOT2 +8); |
tmpstr); |
217 |
|
|
218 |
/* TURBOchannel slots 3 and 4 are reserved. */ |
/* TURBOchannel slots 3 and 4 are reserved. */ |
219 |
|
|
220 |
/* TURBOchannel slot 5 is PMAZ-AA ("asc" SCSI). */ |
/* TURBOchannel slot 5 is PMAZ-AA ("asc" SCSI). */ |
221 |
|
snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].2.kn02.%i", |
222 |
|
machine->path, machine->bootstrap_cpu, 5); |
223 |
dev_turbochannel_init(machine, mem, 5, |
dev_turbochannel_init(machine, mem, 5, |
224 |
KN02_PHYS_TC_5_START, KN02_PHYS_TC_5_END, |
KN02_PHYS_TC_5_START, KN02_PHYS_TC_5_END, |
225 |
"PMAZ-AA", KN02_IP_SCSI +8); |
"PMAZ-AA", tmpstr); |
226 |
|
|
227 |
/* TURBOchannel slot 6 is PMAD-AA ("le" ethernet). */ |
/* TURBOchannel slot 6 is PMAD-AA ("le" ethernet). */ |
228 |
|
snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].2.kn02.%i", |
229 |
|
machine->path, machine->bootstrap_cpu, 6); |
230 |
dev_turbochannel_init(machine, mem, 6, |
dev_turbochannel_init(machine, mem, 6, |
231 |
KN02_PHYS_TC_6_START, KN02_PHYS_TC_6_END, |
KN02_PHYS_TC_6_START, KN02_PHYS_TC_6_END, |
232 |
"PMAD-AA", KN02_IP_LANCE +8); |
"PMAD-AA", tmpstr); |
233 |
|
|
234 |
/* TURBOchannel slot 7 is system stuff. */ |
/* TURBOchannel slot 7 is system stuff. */ |
235 |
|
snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].2.kn02.%i", |
236 |
|
machine->path, machine->bootstrap_cpu, 7); |
237 |
machine->main_console_handle = |
machine->main_console_handle = |
238 |
dev_dc7085_init(machine, mem, |
dev_dc7085_init(machine, mem, |
239 |
KN02_SYS_DZ, KN02_IP_DZ +8, machine->use_x11); |
KN02_SYS_DZ, tmpstr, machine->use_x11); |
|
dev_mc146818_init(machine, mem, |
|
|
KN02_SYS_CLOCK, KN02_INT_CLOCK, MC146818_DEC, 1); |
|
240 |
|
|
241 |
machine->md_int.kn02_csr = |
snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].%i", |
242 |
dev_kn02_init(cpu, mem, KN02_SYS_CSR); |
machine->path, machine->bootstrap_cpu, KN02_INT_CLOCK); |
243 |
|
dev_mc146818_init(machine, mem, |
244 |
|
KN02_SYS_CLOCK, tmpstr, MC146818_DEC, 1); |
245 |
|
|
246 |
framebuffer_console_name = "osconsole=0,7"; |
framebuffer_console_name = "osconsole=0,7"; |
247 |
/* fb,keyb */ |
/* fb,keyb */ |
260 |
"have more than 128MB RAM. Continuing anyway.\n"); |
"have more than 128MB RAM. Continuing anyway.\n"); |
261 |
|
|
262 |
/* KMIN interrupts: */ |
/* KMIN interrupts: */ |
263 |
machine->md_interrupt = kmin_interrupt; |
fatal("TODO: Legacy rewrite\n"); |
264 |
|
abort(); |
265 |
|
// machine->md_interrupt = kmin_interrupt; |
266 |
|
|
267 |
/* |
/* |
268 |
* tc0 at mainbus0: 12.5 MHz clock (0x10000000, slotsize = 64MB) |
* tc0 at mainbus0: 12.5 MHz clock (0x10000000,slotsize=64MB) |
269 |
* tc slot 1: 0x14000000 |
* tc slot 1: 0x14000000 |
270 |
* tc slot 2: 0x18000000 |
* tc slot 2: 0x18000000 |
271 |
* ioasic0 at tc0 slot 3 offset 0x0 (0x1c000000) slot 0 |
* ioasic0 at tc0 slot 3 offset 0x0 (0x1c000000) slot 0 |
272 |
* asic regs (0x1c040000) slot 1 |
* asic regs (0x1c040000) slot 1 |
273 |
* station's ether address (0x1c080000) slot 2 |
* station's ether address (0x1c080000) slot 2 |
274 |
* le0 at ioasic0 offset 0xc0000: address 00:00:00:00:00:00 (0x1c0c0000) slot 3 |
* le0 at ioasic0 offset 0xc0000: address 00:00:00:00:00:00 |
275 |
* scc0 at ioasic0 offset 0x100000 (0x1c100000) slot 4 |
* (0x1c0c0000) slot 3 |
276 |
* scc1 at ioasic0 offset 0x180000: console (0x1c180000) slot 6 |
* scc0 at ioasic0 offset 0x100000 (0x1c100000) slot 4 |
277 |
* mcclock0 at ioasic0 offset 0x200000: mc146818 or compatible (0x1c200000) slot 8 |
* scc1 at ioasic0 offset 0x180000: console(0x1c180000) slot 6 |
278 |
* asc0 at ioasic0 offset 0x300000: NCR53C94, 25MHz, SCSI ID 7 (0x1c300000) slot 12 |
* mcclock0 at ioasic0 offset 0x200000: mc146818 or |
279 |
* dma for asc0 (0x1c380000) slot 14 |
* compatible (0x1c200000) slot 8 |
280 |
*/ |
* asc0 at ioasic0 offset 0x300000: NCR53C94, 25MHz, |
281 |
machine->md_int.dec_ioasic_data = dev_dec_ioasic_init(cpu, mem, 0x1c000000, 0); |
* SCSI ID 7 (0x1c300000) slot 12 |
282 |
dev_le_init(machine, mem, 0x1c0c0000, 0, 0, KMIN_INTR_LANCE +8, 4*65536); |
* dma for asc0 (0x1c380000) slot 14 |
283 |
dev_scc_init(machine, mem, 0x1c100000, KMIN_INTR_SCC_0 +8, machine->use_x11, 0, 1); |
*/ |
284 |
dev_scc_init(machine, mem, 0x1c180000, KMIN_INTR_SCC_1 +8, machine->use_x11, 1, 1); |
fatal("TODO: dec_ioasic legacy rewrite\n"); |
285 |
dev_mc146818_init(machine, mem, 0x1c200000, KMIN_INTR_CLOCK +8, MC146818_DEC, 1); |
abort(); |
286 |
dev_asc_init(machine, mem, 0x1c300000, KMIN_INTR_SCSI +8, |
// machine->md_int.dec_ioasic_data = dev_dec_ioasic_init(cpu, |
287 |
NULL, DEV_ASC_DEC, NULL, NULL); |
// mem, 0x1c000000, 0); |
288 |
|
fatal("TODO: kmin dev_le_init.\n"); |
289 |
|
abort(); |
290 |
|
// dev_le_init(machine, mem, 0x1c0c0000, 0, 0, |
291 |
|
// KMIN_INTR_LANCE + 8, 4 * 65536); |
292 |
|
dev_scc_init(machine, mem, 0x1c100000, KMIN_INTR_SCC_0 + 8, |
293 |
|
machine->use_x11, 0, 1); |
294 |
|
dev_scc_init(machine, mem, 0x1c180000, KMIN_INTR_SCC_1 + 8, |
295 |
|
machine->use_x11, 1, 1); |
296 |
|
fatal("TODO: mc146818 irq\n"); |
297 |
|
abort(); |
298 |
|
// dev_mc146818_init(machine, mem, 0x1c200000, |
299 |
|
//KMIN_INTR_CLOCK + 8, |
300 |
|
// MC146818_DEC, 1); |
301 |
|
fatal("TODO: kmin asc init\n"); |
302 |
|
abort(); |
303 |
|
// dev_asc_init(machine, mem, 0x1c300000, KMIN_INTR_SCSI +8, |
304 |
|
// NULL, DEV_ASC_DEC, NULL, NULL); |
305 |
|
|
306 |
/* |
/* |
307 |
* TURBOchannel slots 0, 1, and 2 are free for |
* TURBOchannel slots 0, 1, and 2 are free for |
310 |
* |
* |
311 |
* TODO: irqs |
* TODO: irqs |
312 |
*/ |
*/ |
313 |
|
fatal("TODO: turbochannel init rewrite!\n"); |
314 |
|
abort(); |
315 |
|
#if 0 |
316 |
dev_turbochannel_init(machine, mem, 0, 0x10000000, 0x103fffff, |
dev_turbochannel_init(machine, mem, 0, 0x10000000, 0x103fffff, |
317 |
machine->n_gfx_cards >= 1? |
machine->n_gfx_cards >= 1? |
318 |
turbochannel_default_gfx_card : "", KMIN_INT_TC0); |
turbochannel_default_gfx_card : "", KMIN_INT_TC0); |
324 |
dev_turbochannel_init(machine, mem, 2, 0x18000000, 0x183fffff, |
dev_turbochannel_init(machine, mem, 2, 0x18000000, 0x183fffff, |
325 |
machine->n_gfx_cards >= 3? |
machine->n_gfx_cards >= 3? |
326 |
turbochannel_default_gfx_card : "", KMIN_INT_TC2); |
turbochannel_default_gfx_card : "", KMIN_INT_TC2); |
327 |
|
#endif |
328 |
/* (kmin shared irq numbers (IP) are offset by +8 in the emulator) */ |
/* (kmin shared irq numbers (IP) are offset by +8 in the |
329 |
|
emulator) */ |
330 |
/* kmin_csr = dev_kmin_init(cpu, mem, KMIN_REG_INTR); */ |
/* kmin_csr = dev_kmin_init(cpu, mem, KMIN_REG_INTR); */ |
331 |
|
|
332 |
framebuffer_console_name = "osconsole=0,3"; /* fb, keyb (?) */ |
framebuffer_console_name = "osconsole=0,3"; /* fb,keyb(?) */ |
333 |
serial_console_name = "osconsole=3"; /* ? */ |
serial_console_name = "osconsole=3"; /* ? */ |
334 |
break; |
break; |
335 |
|
|
336 |
case MACHINE_DEC_3MAXPLUS_5000: /* type 4, KN03 */ |
case MACHINE_DEC_3MAXPLUS_5000: /* type 4, KN03 */ |
346 |
"have more than 480MB RAM. Continuing anyway.\n"); |
"have more than 480MB RAM. Continuing anyway.\n"); |
347 |
|
|
348 |
/* KN03 interrupts: */ |
/* KN03 interrupts: */ |
349 |
machine->md_interrupt = kn03_interrupt; |
fatal("TODO: Legacy rewrite\n"); |
350 |
|
abort(); |
351 |
/* |
// machine->md_interrupt = kn03_interrupt; |
352 |
* tc0 at mainbus0: 25 MHz clock (slot 0) (0x1e000000) |
|
353 |
* tc0 slot 1 (0x1e800000) |
/* |
354 |
* tc0 slot 2 (0x1f000000) |
* tc0 at mainbus0: 25 MHz clock (slot 0) (0x1e000000) |
355 |
* ioasic0 at tc0 slot 3 offset 0x0 (0x1f800000) |
* tc0 slot 1 (0x1e800000) |
356 |
* something that has to do with interrupts? (?) (0x1f840000 ?) |
* tc0 slot 2 (0x1f000000) |
357 |
* le0 at ioasic0 offset 0xc0000 (0x1f8c0000) |
* ioasic0 at tc0 slot 3 offset 0x0 (0x1f800000) |
358 |
* scc0 at ioasic0 offset 0x100000 (0x1f900000) |
* something that has to do with interrupts? (?)(0x1f840000?) |
359 |
* scc1 at ioasic0 offset 0x180000: console (0x1f980000) |
* le0 at ioasic0 offset 0xc0000 (0x1f8c0000) |
360 |
* mcclock0 at ioasic0 offset 0x200000: mc146818 or compatible (0x1fa00000) |
* scc0 at ioasic0 offset 0x100000 (0x1f900000) |
361 |
* asc0 at ioasic0 offset 0x300000: NCR53C94, 25MHz, SCSI ID 7 (0x1fb00000) |
* scc1 at ioasic0 offset 0x180000: console (0x1f980000) |
362 |
*/ |
* mcclock0 at ioasic0 offset 0x200000: mc146818 or |
363 |
machine->md_int.dec_ioasic_data = dev_dec_ioasic_init(cpu, mem, 0x1f800000, 0); |
* compatible (0x1fa00000) |
364 |
|
* asc0 at ioasic0 offset 0x300000: NCR53C94, 25MHz, |
365 |
dev_le_init(machine, mem, KN03_SYS_LANCE, 0, 0, KN03_INTR_LANCE +8, 4*65536); |
* SCSI ID 7 (0x1fb00000) |
366 |
|
*/ |
367 |
machine->md_int.dec_ioasic_data->dma_func[3] = dev_scc_dma_func; |
fatal("TODO: dec_ioasic legacy rewrite\n"); |
368 |
machine->md_int.dec_ioasic_data->dma_func_extra[2] = dev_scc_init(machine, mem, KN03_SYS_SCC_0, KN03_INTR_SCC_0 +8, machine->use_x11, 0, 1); |
abort(); |
369 |
machine->md_int.dec_ioasic_data->dma_func[2] = dev_scc_dma_func; |
// machine->md_int.dec_ioasic_data = dev_dec_ioasic_init(cpu, |
370 |
machine->md_int.dec_ioasic_data->dma_func_extra[3] = dev_scc_init(machine, mem, KN03_SYS_SCC_1, KN03_INTR_SCC_1 +8, machine->use_x11, 1, 1); |
// mem, 0x1f800000, 0); |
371 |
|
|
372 |
dev_mc146818_init(machine, mem, KN03_SYS_CLOCK, KN03_INT_RTC, MC146818_DEC, 1); |
fatal("TODO: kn03 dev_le_init rewrite\n"); |
373 |
dev_asc_init(machine, mem, KN03_SYS_SCSI, |
abort(); |
374 |
KN03_INTR_SCSI +8, NULL, DEV_ASC_DEC, NULL, NULL); |
// dev_le_init(machine, mem, KN03_SYS_LANCE, 0, 0, |
375 |
|
// KN03_INTR_LANCE +8, 4 * 65536); |
376 |
|
|
377 |
|
fatal("TODO: dec_ioasic legacy rewrite\n"); |
378 |
|
abort(); |
379 |
|
// machine->md_int.dec_ioasic_data->dma_func[3] = |
380 |
|
// dev_scc_dma_func; |
381 |
|
// machine->md_int.dec_ioasic_data->dma_func_extra[2] = |
382 |
|
// dev_scc_init(machine, mem, KN03_SYS_SCC_0, |
383 |
|
// KN03_INTR_SCC_0 +8, machine->use_x11, 0, 1); |
384 |
|
// machine->md_int.dec_ioasic_data->dma_func[2] = |
385 |
|
// dev_scc_dma_func; |
386 |
|
// machine->md_int.dec_ioasic_data->dma_func_extra[3] = |
387 |
|
// dev_scc_init(machine, mem, KN03_SYS_SCC_1, |
388 |
|
// KN03_INTR_SCC_1 +8, machine->use_x11, 1, 1); |
389 |
|
|
390 |
|
fatal("TODO: mc146818 irq\n"); |
391 |
|
abort(); |
392 |
|
// dev_mc146818_init(machine, mem, KN03_SYS_CLOCK, KN03_INT_RTC, |
393 |
|
// MC146818_DEC, 1); |
394 |
|
fatal("TODO: asc init rewrite\n"); |
395 |
|
abort(); |
396 |
|
// dev_asc_init(machine, mem, KN03_SYS_SCSI, |
397 |
|
// KN03_INTR_SCSI +8, NULL, DEV_ASC_DEC, NULL, NULL); |
398 |
|
|
399 |
/* |
/* |
400 |
* TURBOchannel slots 0, 1, and 2 are free for |
* TURBOchannel slots 0, 1, and 2 are free for |
403 |
* |
* |
404 |
* TODO: irqs |
* TODO: irqs |
405 |
*/ |
*/ |
406 |
|
fatal("TODO: turbochannel rewrite init\n"); |
407 |
|
abort(); |
408 |
|
#if 0 |
409 |
dev_turbochannel_init(machine, mem, 0, |
dev_turbochannel_init(machine, mem, 0, |
410 |
KN03_PHYS_TC_0_START, KN03_PHYS_TC_0_END, |
KN03_PHYS_TC_0_START, KN03_PHYS_TC_0_END, |
411 |
machine->n_gfx_cards >= 1? |
machine->n_gfx_cards >= 1? |
423 |
machine->n_gfx_cards >= 3? |
machine->n_gfx_cards >= 3? |
424 |
turbochannel_default_gfx_card : "", |
turbochannel_default_gfx_card : "", |
425 |
KN03_INTR_TC_2 +8); |
KN03_INTR_TC_2 +8); |
426 |
|
#endif |
427 |
|
|
428 |
/* TODO: interrupts */ |
/* TODO: interrupts */ |
429 |
/* shared (turbochannel) interrupts are +8 */ |
/* shared (turbochannel) interrupts are +8 */ |
430 |
|
|
431 |
framebuffer_console_name = "osconsole=0,3"; /* fb, keyb (?) */ |
framebuffer_console_name = "osconsole=0,3"; /* fb,keyb(?) */ |
432 |
serial_console_name = "osconsole=3"; /* ? */ |
serial_console_name = "osconsole=3"; /* ? */ |
433 |
break; |
break; |
434 |
|
|
435 |
case MACHINE_DEC_5800: /* type 5, KN5800 */ |
case MACHINE_DEC_5800: /* type 5, KN5800 */ |
441 |
"with less than 48MB RAM. Continuing anyway.\n"); |
"with less than 48MB RAM. Continuing anyway.\n"); |
442 |
|
|
443 |
/* |
/* |
444 |
* According to http://www2.no.netbsd.org/Ports/pmax/models.html, |
* According to |
445 |
|
* http://www2.no.netbsd.org/Ports/pmax/models.html, |
446 |
* the 5800-series is based on VAX 6000/300. |
* the 5800-series is based on VAX 6000/300. |
447 |
*/ |
*/ |
448 |
|
|
450 |
* Ultrix might support SMP on this machine type. |
* Ultrix might support SMP on this machine type. |
451 |
* |
* |
452 |
* Something at 0x10000000. |
* Something at 0x10000000. |
453 |
* ssc serial console at 0x10140000, interrupt 2 (shared with XMI?). |
* ssc serial console at 0x10140000, interrupt 2 (shared |
454 |
|
* with XMI?). |
455 |
* xmi 0 at address 0x11800000 (node x at offset x*0x80000) |
* xmi 0 at address 0x11800000 (node x at offset x*0x80000) |
456 |
* Clock uses interrupt 3 (shared with XMI?). |
* Clock uses interrupt 3 (shared with XMI?). |
457 |
*/ |
*/ |
458 |
|
|
459 |
machine->md_int.dec5800_csr = dev_dec5800_init(machine, mem, 0x10000000); |
device_add(machine, "dec5800 addr=0x10000000"); |
460 |
dev_decbi_init(mem, 0x10000000); |
device_add(machine, "decbi addr=0x10000000"); |
461 |
dev_ssc_init(machine, mem, 0x10140000, 2, machine->use_x11, &machine->md_int.dec5800_csr->csr); |
|
462 |
|
snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].dec5800.28", |
463 |
|
machine->path, machine->bootstrap_cpu); |
464 |
|
dev_ssc_init(machine, mem, 0x10140000, |
465 |
|
tmpstr, machine->use_x11); |
466 |
|
|
467 |
dev_decxmi_init(mem, 0x11800000); |
dev_decxmi_init(mem, 0x11800000); |
468 |
dev_deccca_init(mem, DEC_DECCCA_BASEADDR); |
dev_deccca_init(mem, DEC_DECCCA_BASEADDR); |
469 |
|
|
499 |
/* ln (ethernet) at 0x10084x00 ? and 0x10120000 ? */ |
/* ln (ethernet) at 0x10084x00 ? and 0x10120000 ? */ |
500 |
/* error registers (?) at 0x17000000 and 0x10080000 */ |
/* error registers (?) at 0x17000000 and 0x10080000 */ |
501 |
device_add(machine, "kn210 addr=0x10080000"); |
device_add(machine, "kn210 addr=0x10080000"); |
502 |
dev_ssc_init(machine, mem, 0x10140000, 0, machine->use_x11, NULL); /* TODO: not irq 0 */ |
dev_ssc_init(machine, mem, 0x10140000, "irq? TODO", |
503 |
|
machine->use_x11); |
504 |
break; |
break; |
505 |
|
|
506 |
case MACHINE_DEC_MAXINE_5000: /* type 7, KN02CA */ |
case MACHINE_DEC_MAXINE_5000: /* type 7, KN02CA */ |
517 |
"have more than 40MB RAM. Continuing anyway.\n"); |
"have more than 40MB RAM. Continuing anyway.\n"); |
518 |
|
|
519 |
/* Maxine interrupts: */ |
/* Maxine interrupts: */ |
520 |
machine->md_interrupt = maxine_interrupt; |
fatal("TODO: Legacy rewrite\n"); |
521 |
|
abort(); |
522 |
|
|
523 |
|
// machine->md_interrupt = maxine_interrupt; |
524 |
|
|
525 |
/* |
/* |
526 |
* Something at address 0xca00000. (?) |
* Something at address 0xca00000. (?) |
527 |
* Something at address 0xe000000. (?) |
* Something at address 0xe000000. (?) |
528 |
* tc0 slot 0 (0x10000000) |
* tc0 slot 0 (0x10000000) |
529 |
* tc0 slot 1 (0x14000000) |
* tc0 slot 1 (0x14000000) |
530 |
* (tc0 slot 2 used by the framebuffer) |
* (tc0 slot 2 used by the framebuffer) |
531 |
* ioasic0 at tc0 slot 3 offset 0x0 (0x1c000000) |
* ioasic0 at tc0 slot 3 offset 0x0 (0x1c000000) |
532 |
* le0 at ioasic0 offset 0xc0000: address 00:00:00:00:00:00 (0x1c0c0000) |
* le0 at ioasic0 offset 0xc0000: address 00:00:00:00:00:00 |
533 |
* scc0 at ioasic0 offset 0x100000: console <-- serial (0x1c100000) |
* (0x1c0c0000) |
534 |
* mcclock0 at ioasic0 offset 0x200000: mc146818 (0x1c200000) |
* scc0 at ioasic0 offset 0x100000: console <-- serial |
535 |
* isdn at ioasic0 offset 0x240000 not configured (0x1c240000) |
* (0x1c100000) |
536 |
* bba0 at ioasic0 offset 0x240000 (audio0 at bba0) <--- which one of isdn and bba0? |
* mcclock0 at ioasic0 offset 0x200000: mc146818 (0x1c200000) |
537 |
* dtop0 at ioasic0 offset 0x280000 (0x1c280000) |
* isdn at ioasic0 offset 0x240000 not configured (0x1c240000) |
538 |
* fdc at ioasic0 offset 0x2c0000 not configured <-- floppy (0x1c2c0000) |
* bba0 at ioasic0 offset 0x240000 (audio0 at bba0) |
539 |
* asc0 at ioasic0 offset 0x300000: NCR53C94, 25MHz, SCSI ID 7 (0x1c300000) |
* ^--- which one of isdn and bba0? |
540 |
* xcfb0 at tc0 slot 2 offset 0x0: 1024x768x8 built-in framebuffer (0xa000000) |
* dtop0 at ioasic0 offset 0x280000 (0x1c280000) |
541 |
*/ |
* fdc at ioasic0 offset 0x2c0000 not configured |
542 |
machine->md_int.dec_ioasic_data = dev_dec_ioasic_init(cpu, mem, 0x1c000000, 0); |
* ^-- floppy (0x1c2c0000) |
543 |
|
* asc0 at ioasic0 offset 0x300000: NCR53C94, 25MHz, SCSI |
544 |
|
* ID 7 (0x1c300000) |
545 |
|
* xcfb0 at tc0 slot 2 offset 0x0: 1024x768x8 |
546 |
|
* built-in framebuffer (0xa000000) |
547 |
|
*/ |
548 |
|
fatal("TODO: dec_ioasic legacy rewrite\n"); |
549 |
|
abort(); |
550 |
|
// machine->md_int.dec_ioasic_data = |
551 |
|
// dev_dec_ioasic_init(cpu, mem, 0x1c000000, 0); |
552 |
|
|
553 |
|
fatal("TODO: turbochannel rewrite!\n"); |
554 |
|
abort(); |
555 |
|
#if 0 |
556 |
/* TURBOchannel slots (0 and 1): */ |
/* TURBOchannel slots (0 and 1): */ |
557 |
dev_turbochannel_init(machine, mem, 0, |
dev_turbochannel_init(machine, mem, 0, |
558 |
0x10000000, 0x103fffff, |
0x10000000, 0x103fffff, |
571 |
*/ |
*/ |
572 |
dev_turbochannel_init(machine, mem, 2, |
dev_turbochannel_init(machine, mem, 2, |
573 |
0x8000000, 0xbffffff, "PMAG-DV", 0); |
0x8000000, 0xbffffff, "PMAG-DV", 0); |
574 |
|
#endif |
575 |
/* |
/* |
576 |
* TURBOchannel slot 3: fixed, ioasic |
* TURBOchannel slot 3: fixed, ioasic |
577 |
* (the system stuff), 0x1c000000 |
* (the system stuff), 0x1c000000 |
578 |
*/ |
*/ |
579 |
dev_le_init(machine, mem, 0x1c0c0000, 0, 0, |
fatal("TODO: xine dev_le_init rewrite\n"); |
580 |
XINE_INTR_LANCE +8, 4*65536); |
abort(); |
581 |
|
// dev_le_init(machine, mem, 0x1c0c0000, 0, 0, |
582 |
|
// XINE_INTR_LANCE +8, 4*65536); |
583 |
dev_scc_init(machine, mem, 0x1c100000, |
dev_scc_init(machine, mem, 0x1c100000, |
584 |
XINE_INTR_SCC_0 +8, machine->use_x11, 0, 1); |
XINE_INTR_SCC_0 +8, machine->use_x11, 0, 1); |
585 |
dev_mc146818_init(machine, mem, 0x1c200000, |
fatal("TODO: mc146818 irq\n"); |
586 |
XINE_INT_TOY, MC146818_DEC, 1); |
abort(); |
587 |
dev_asc_init(machine, mem, 0x1c300000, |
// dev_mc146818_init(machine, mem, 0x1c200000, |
588 |
XINE_INTR_SCSI +8, NULL, DEV_ASC_DEC, NULL, NULL); |
// XINE_INT_TOY, MC146818_DEC, 1); |
589 |
|
fatal("TODO: xine asc init rewrite\n"); |
590 |
|
abort(); |
591 |
|
// dev_asc_init(machine, mem, 0x1c300000, |
592 |
|
// XINE_INTR_SCSI +8, NULL, DEV_ASC_DEC, NULL, NULL); |
593 |
|
|
594 |
framebuffer_console_name = "osconsole=3,2"; /* keyb,fb ?? */ |
framebuffer_console_name = "osconsole=3,2"; /* keyb,fb? */ |
595 |
serial_console_name = "osconsole=3"; |
serial_console_name = "osconsole=3"; |
596 |
break; |
break; |
597 |
|
|
614 |
* something at 0x10040000 |
* something at 0x10040000 |
615 |
* scc at 0x10140000 |
* scc at 0x10140000 |
616 |
* qbus at (or around) 0x10080000 |
* qbus at (or around) 0x10080000 |
617 |
* dssi (disk controller) buffers at 0x10100000, registers at 0x10160000. |
* dssi (disk controller) buffers at 0x10100000, |
618 |
* sgec (ethernet) registers at 0x10008000, station addresss at 0x10120000. |
* registers at 0x10160000. |
619 |
|
* sgec (ethernet) registers at 0x10008000, station |
620 |
|
* addresss at 0x10120000. |
621 |
* asc (scsi) at 0x17100000. |
* asc (scsi) at 0x17100000. |
622 |
*/ |
*/ |
623 |
|
|
624 |
dev_ssc_init(machine, mem, 0x10140000, 0, machine->use_x11, NULL); /* TODO: not irq 0 */ |
dev_ssc_init(machine, mem, 0x10140000, "TODO: irq", |
625 |
|
machine->use_x11); |
626 |
|
|
627 |
/* something at 0x17000000, ultrix says "cpu 0 panic: DS5500 I/O Board is missing" if this is not here */ |
/* something at 0x17000000, ultrix says "cpu 0 panic: " |
628 |
|
"DS5500 I/O Board is missing" if this is not here */ |
629 |
dev_dec5500_ioboard_init(cpu, mem, 0x17000000); |
dev_dec5500_ioboard_init(cpu, mem, 0x17000000); |
630 |
|
|
631 |
dev_sgec_init(mem, 0x10008000, 0); /* irq? */ |
dev_sgec_init(mem, 0x10008000, 0); /* irq? */ |
632 |
|
|
633 |
/* The asc controller might be TURBOchannel-ish? */ |
/* The asc controller might be TURBOchannel-ish? */ |
634 |
#if 0 |
#if 0 |
635 |
dev_turbochannel_init(machine, mem, 0, 0x17100000, 0x171fffff, "PMAZ-AA", 0); /* irq? */ |
dev_turbochannel_init(machine, mem, 0, 0x17100000, |
636 |
|
0x171fffff, "PMAZ-AA", 0); /* irq? */ |
637 |
#else |
#else |
638 |
dev_asc_init(machine, mem, 0x17100000, 0, NULL, DEV_ASC_DEC, NULL, NULL); /* irq? */ |
dev_asc_init(machine, mem, 0x17100000, 0, NULL, |
639 |
|
DEV_ASC_DEC, NULL, NULL); /* irq? */ |
640 |
#endif |
#endif |
641 |
|
|
642 |
framebuffer_console_name = "osconsole=0,0"; /* TODO (?) */ |
framebuffer_console_name = "osconsole=0,0"; /* TODO (?) */ |
659 |
"cannot have a graphical framebuffer. " |
"cannot have a graphical framebuffer. " |
660 |
"Continuing anyway.\n"); |
"Continuing anyway.\n"); |
661 |
|
|
662 |
/* KN230 interrupts: */ |
/* KN230 mainbus / interrupt controller: */ |
663 |
machine->md_interrupt = kn230_interrupt; |
snprintf(tmpstr, sizeof(tmpstr), |
664 |
|
"kn230 addr=0x%"PRIx64, (uint64_t) KN230_SYS_ICSR); |
665 |
|
device_add(machine, tmpstr); |
666 |
|
|
667 |
/* |
/* |
668 |
* According to NetBSD/pmax: |
* According to NetBSD/pmax: |
670 |
* le0 at ibus0 addr 0x18000000: address 00:00:00:00:00:00 |
* le0 at ibus0 addr 0x18000000: address 00:00:00:00:00:00 |
671 |
* sii0 at ibus0 addr 0x1a000000 |
* sii0 at ibus0 addr 0x1a000000 |
672 |
*/ |
*/ |
|
dev_mc146818_init(machine, mem, KN230_SYS_CLOCK, 4, MC146818_DEC, 1); |
|
|
dev_dc7085_init(machine, mem, KN230_SYS_DZ0, KN230_CSR_INTR_DZ0, machine->use_x11); /* NOTE: CSR_INTR */ |
|
|
/* dev_dc7085_init(machine, mem, KN230_SYS_DZ1, KN230_CSR_INTR_OPT0, machine->use_x11); */ /* NOTE: CSR_INTR */ |
|
|
/* dev_dc7085_init(machine, mem, KN230_SYS_DZ2, KN230_CSR_INTR_OPT1, machine->use_x11); */ /* NOTE: CSR_INTR */ |
|
|
dev_le_init(machine, mem, KN230_SYS_LANCE, KN230_SYS_LANCE_B_START, KN230_SYS_LANCE_B_END, KN230_CSR_INTR_LANCE, 4*1048576); |
|
|
dev_sii_init(machine, mem, KN230_SYS_SII, KN230_SYS_SII_B_START, KN230_SYS_SII_B_END, KN230_CSR_INTR_SII); |
|
673 |
|
|
674 |
snprintf(tmpstr, sizeof(tmpstr), |
snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].%i", |
675 |
"kn230 addr=0x%llx", (long long)KN230_SYS_ICSR); |
machine->path, machine->bootstrap_cpu, 4); |
676 |
machine->md_int.kn230_csr = device_add(machine, tmpstr); |
dev_mc146818_init(machine, mem, KN230_SYS_CLOCK, tmpstr, |
677 |
|
MC146818_DEC, 1); |
678 |
|
|
679 |
|
snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].kn230.0x%x", |
680 |
|
machine->path, machine->bootstrap_cpu, KN230_CSR_INTR_DZ0); |
681 |
|
dev_dc7085_init(machine, mem, KN230_SYS_DZ0, |
682 |
|
tmpstr, machine->use_x11); |
683 |
|
|
684 |
|
/* dev_dc7085_init(machine, mem, KN230_SYS_DZ1, |
685 |
|
KN230_CSR_INTR_OPT0, machine->use_x11); */ |
686 |
|
/* dev_dc7085_init(machine, mem, KN230_SYS_DZ2, |
687 |
|
KN230_CSR_INTR_OPT1, machine->use_x11); */ |
688 |
|
|
689 |
|
snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].kn230.0x%x", |
690 |
|
machine->path, machine->bootstrap_cpu, |
691 |
|
KN230_CSR_INTR_LANCE); |
692 |
|
dev_le_init(machine, mem, KN230_SYS_LANCE, |
693 |
|
KN230_SYS_LANCE_B_START, KN230_SYS_LANCE_B_END, |
694 |
|
tmpstr, 4*1048576); |
695 |
|
|
696 |
|
snprintf(tmpstr, sizeof(tmpstr), "%s.cpu[%i].kn230.0x%x", |
697 |
|
machine->path, machine->bootstrap_cpu, KN230_CSR_INTR_SII); |
698 |
|
dev_sii_init(machine, mem, KN230_SYS_SII, |
699 |
|
KN230_SYS_SII_B_START, KN230_SYS_SII_B_END, tmpstr); |
700 |
|
|
701 |
serial_console_name = "osconsole=0"; |
serial_console_name = "osconsole=0"; |
702 |
break; |
break; |
719 |
|
|
720 |
|
|
721 |
/* DECstation PROM stuff: (TODO: endianness) */ |
/* DECstation PROM stuff: (TODO: endianness) */ |
722 |
for (i=0; i<100; i++) |
for (i=0; i<150; i++) |
723 |
store_32bit_word(cpu, DEC_PROM_CALLBACK_STRUCT + i*4, |
store_32bit_word(cpu, DEC_PROM_CALLBACK_STRUCT + i*4, |
724 |
DEC_PROM_EMULATION + i*8); |
DEC_PROM_EMULATION + i*8); |
725 |
|
|
726 |
/* Fill PROM with dummy return instructions: (TODO: make this nicer) */ |
/* Fill PROM with special "magic trap" instructions: */ |
727 |
for (i=0; i<100; i++) { |
for (i=0; i<150; i++) { |
728 |
store_32bit_word(cpu, DEC_PROM_EMULATION + i*8, |
store_32bit_word(cpu, DEC_PROM_EMULATION + i*8, |
729 |
0x03e00008); /* return */ |
0x00c0de0c); /* trap instruction */ |
730 |
store_32bit_word(cpu, DEC_PROM_EMULATION + i*8 + 4, |
store_32bit_word(cpu, DEC_PROM_EMULATION + i*8 + 4, |
731 |
0x00000000); /* nop */ |
0x00000000); /* nop */ |
732 |
} |
} |
733 |
|
|
734 |
|
/* Jumptable at beginning of PROM: also "magic trap" instructions: */ |
735 |
|
for (i=0; i<0x180; i+=8) { |
736 |
|
store_32bit_word(cpu, 0xbfc00000 + i, |
737 |
|
0x00c0de0c); /* trap instruction */ |
738 |
|
store_32bit_word(cpu, 0xbfc00000 + i + 4, |
739 |
|
0x00000000); /* nop */ |
740 |
|
} |
741 |
|
|
742 |
|
|
743 |
/* |
/* |
744 |
* According to dec_prom.h from NetBSD: |
* According to dec_prom.h from NetBSD: |
745 |
* |
* |
857 |
|
|
858 |
store_buf(cpu, BOOTINFO_ADDR, (char *)&xx, sizeof(xx)); |
store_buf(cpu, BOOTINFO_ADDR, (char *)&xx, sizeof(xx)); |
859 |
|
|
860 |
/* |
/* The system's memmap: */ |
861 |
* The system's memmap: (memmap is a global variable, in |
machine->md.pmax.memmap = malloc(sizeof(struct dec_memmap)); |
862 |
* dec_prom.h) |
if (machine->md.pmax.memmap == NULL) { |
863 |
*/ |
fprintf(stderr, "out of memory\n"); |
864 |
|
exit(1); |
865 |
|
} |
866 |
store_32bit_word_in_host(cpu, |
store_32bit_word_in_host(cpu, |
867 |
(unsigned char *)&memmap.pagesize, 4096); |
(unsigned char *)&machine->md.pmax.memmap->pagesize, 4096); |
868 |
{ |
{ |
869 |
unsigned int i; |
unsigned int i; |
870 |
for (i=0; i<sizeof(memmap.bitmap); i++) |
for (i=0; i<sizeof(machine->md.pmax.memmap->bitmap); i++) |
871 |
memmap.bitmap[i] = ((int)i * 4096*8 < |
machine->md.pmax.memmap->bitmap[i] = ((int)i * 4096*8 < |
872 |
1048576*machine->physical_ram_in_mb)? 0xff : 0x00; |
1048576*machine->physical_ram_in_mb)? 0xff : 0x00; |
873 |
} |
} |
874 |
store_buf(cpu, DEC_MEMMAP_ADDR, (char *)&memmap, sizeof(memmap)); |
store_buf(cpu, DEC_MEMMAP_ADDR, |
875 |
|
(char *)machine->md.pmax.memmap, sizeof(struct dec_memmap)); |
876 |
|
|
877 |
/* Environment variables: */ |
/* Environment variables: */ |
878 |
addr = DEC_PROM_STRINGS; |
addr = DEC_PROM_STRINGS; |
890 |
*/ |
*/ |
891 |
{ |
{ |
892 |
char tmps[300]; |
char tmps[300]; |
893 |
snprintf(tmps, sizeof(tmps), "cca=%x", |
snprintf(tmps, sizeof(tmps), "cca=%"PRIx32, |
894 |
(int)(DEC_DECCCA_BASEADDR + 0xa0000000ULL)); |
(uint32_t) (DEC_DECCCA_BASEADDR + 0xa0000000ULL)); |
895 |
add_environment_string(cpu, tmps, &addr); |
add_environment_string(cpu, tmps, &addr); |
896 |
} |
} |
897 |
|
|
903 |
tmps[sizeof(tmps)-1] = '\0'; |
tmps[sizeof(tmps)-1] = '\0'; |
904 |
add_environment_string(cpu, tmps, &addr); |
add_environment_string(cpu, tmps, &addr); |
905 |
|
|
906 |
snprintf(tmps, sizeof(tmps), "bitmap=0x%x", (uint32_t)(( |
snprintf(tmps, sizeof(tmps), "bitmap=0x%"PRIx32, (uint32_t) |
907 |
DEC_MEMMAP_ADDR + sizeof(memmap.pagesize)) |
( (DEC_MEMMAP_ADDR + sizeof(uint32_t) /* skip the |
908 |
& 0xffffffffULL)); |
page size and point to the memmap */ |
909 |
|
) & 0xffffffffULL) ); |
910 |
tmps[sizeof(tmps)-1] = '\0'; |
tmps[sizeof(tmps)-1] = '\0'; |
911 |
add_environment_string(cpu, tmps, &addr); |
add_environment_string(cpu, tmps, &addr); |
912 |
|
|
913 |
snprintf(tmps, sizeof(tmps), "bitmaplen=0x%x", |
snprintf(tmps, sizeof(tmps), "bitmaplen=0x%"PRIx32, (uint32_t) |
914 |
machine->physical_ram_in_mb * 1048576 / 4096 / 8); |
( machine->physical_ram_in_mb * 1048576 / 4096 / 8) ); |
915 |
tmps[sizeof(tmps)-1] = '\0'; |
tmps[sizeof(tmps)-1] = '\0'; |
916 |
add_environment_string(cpu, tmps, &addr); |
add_environment_string(cpu, tmps, &addr); |
917 |
} |
} |
964 |
|
|
965 |
MACHINE_REGISTER(pmax) |
MACHINE_REGISTER(pmax) |
966 |
{ |
{ |
967 |
MR_DEFAULT(pmax, "DECstation/DECsystem", ARCH_MIPS, MACHINE_PMAX, 3, 9); |
MR_DEFAULT(pmax, "DECstation/DECsystem", ARCH_MIPS, MACHINE_PMAX); |
968 |
|
|
969 |
me->aliases[0] = "decstation"; |
machine_entry_add_alias(me, "decstation"); |
970 |
me->aliases[1] = "decsystem"; |
machine_entry_add_alias(me, "decsystem"); |
971 |
me->aliases[2] = "dec"; |
machine_entry_add_alias(me, "dec"); |
|
me->subtype[0] = machine_entry_subtype_new( |
|
|
"DECstation 3100 (PMAX)", MACHINE_DEC_PMAX_3100, 3); |
|
|
me->subtype[0]->aliases[0] = "pmax"; |
|
|
me->subtype[0]->aliases[1] = "3100"; |
|
|
me->subtype[0]->aliases[2] = "2100"; |
|
|
|
|
|
me->subtype[1] = machine_entry_subtype_new( |
|
|
"DECstation 5000/200 (3MAX)", MACHINE_DEC_3MAX_5000, 2); |
|
|
me->subtype[1]->aliases[0] = "3max"; |
|
|
me->subtype[1]->aliases[1] = "5000/200"; |
|
|
|
|
|
me->subtype[2] = machine_entry_subtype_new( |
|
|
"DECstation 5000/1xx (3MIN)", MACHINE_DEC_3MIN_5000, 2); |
|
|
me->subtype[2]->aliases[0] = "3min"; |
|
|
me->subtype[2]->aliases[1] = "5000/1xx"; |
|
|
|
|
|
me->subtype[3] = machine_entry_subtype_new( |
|
|
"DECstation 5000 (3MAXPLUS)", MACHINE_DEC_3MAXPLUS_5000, 2); |
|
|
me->subtype[3]->aliases[0] = "3maxplus"; |
|
|
me->subtype[3]->aliases[1] = "3max+"; |
|
|
|
|
|
me->subtype[4] = machine_entry_subtype_new( |
|
|
"DECsystem 58x0", MACHINE_DEC_5800, 2); |
|
|
me->subtype[4]->aliases[0] = "5800"; |
|
|
me->subtype[4]->aliases[1] = "58x0"; |
|
|
|
|
|
me->subtype[5] = machine_entry_subtype_new( |
|
|
"DECsystem 5400", MACHINE_DEC_5400, 1); |
|
|
me->subtype[5]->aliases[0] = "5400"; |
|
|
|
|
|
me->subtype[6] = machine_entry_subtype_new( |
|
|
"DECstation Maxine (5000)", MACHINE_DEC_MAXINE_5000, 1); |
|
|
me->subtype[6]->aliases[0] = "maxine"; |
|
|
|
|
|
me->subtype[7] = machine_entry_subtype_new( |
|
|
"DECsystem 5500", MACHINE_DEC_5500, 1); |
|
|
me->subtype[7]->aliases[0] = "5500"; |
|
|
|
|
|
me->subtype[8] = machine_entry_subtype_new( |
|
|
"DECstation MipsMate (5100)", MACHINE_DEC_MIPSMATE_5100, 2); |
|
|
me->subtype[8]->aliases[0] = "5100"; |
|
|
me->subtype[8]->aliases[1] = "mipsmate"; |
|
972 |
|
|
973 |
me->set_default_ram = machine_default_ram_pmax; |
machine_entry_add_subtype(me, "DECstation 3100 (PMAX)", |
974 |
|
MACHINE_DEC_PMAX_3100, "pmax", "3100", "2100", NULL); |
975 |
|
|
976 |
|
machine_entry_add_subtype(me, "DECstation 5000/200 (3MAX)", |
977 |
|
MACHINE_DEC_3MAX_5000, "3max", "5000/200", NULL); |
978 |
|
|
979 |
|
machine_entry_add_subtype(me, "DECstation 5000/1xx (3MIN)", |
980 |
|
MACHINE_DEC_3MIN_5000, "3min", "5000/1xx", NULL); |
981 |
|
|
982 |
|
machine_entry_add_subtype(me, "DECstation 5000 (3MAXPLUS)", |
983 |
|
MACHINE_DEC_3MAXPLUS_5000, "3maxplus", "3max+", NULL); |
984 |
|
|
985 |
machine_entry_add(me, ARCH_MIPS); |
machine_entry_add_subtype(me, "DECsystem 58x0", |
986 |
|
MACHINE_DEC_5800, "5800", "58x0", NULL); |
987 |
|
|
988 |
|
machine_entry_add_subtype(me, "DECsystem 5400", |
989 |
|
MACHINE_DEC_5400, "5400", NULL); |
990 |
|
|
991 |
|
machine_entry_add_subtype(me, "DECstation Maxine (5000)", |
992 |
|
MACHINE_DEC_MAXINE_5000, "maxine", NULL); |
993 |
|
|
994 |
|
machine_entry_add_subtype(me, "DECsystem 5500", |
995 |
|
MACHINE_DEC_5500, "5500", NULL); |
996 |
|
|
997 |
|
machine_entry_add_subtype(me, "DECstation MipsMate (5100)", |
998 |
|
MACHINE_DEC_MIPSMATE_5100, "5100", "mipsmate", NULL); |
999 |
|
|
1000 |
|
me->set_default_ram = machine_default_ram_pmax; |
1001 |
} |
} |
1002 |
|
|