|
|
1.1 root 1: //
2: // nono
3: // Copyright (C) 2024 nono project
4: // Licensed under nono-license.txt
5: //
6:
7: //
1.1.1.2 ! root 8: // virt-m68k の IPLROM 相当の何か
1.1 root 9: //
10:
11: #pragma once
12:
1.1.1.2 ! root 13: #include "romemu.h"
1.1 root 14:
15: class BootInfo;
16: class IODeviceStream;
17: class LoadInfo;
18: class MainRAMDevice;
19:
1.1.1.2 ! root 20: class Virt68kROMEmuDevice : public ROMEmuDevice
1.1 root 21: {
1.1.1.2 ! root 22: using inherited = ROMEmuDevice;
1.1 root 23:
24: // BootInfo (抜粋)
25:
26: // タグ
27: static const uint BI_LAST = 0;
28: static const uint BI_MACHTYPE = 1; // machine type (uint32)
29: static const uint BI_CPUTYPE = 2; // CPU type (uint32)
30: static const uint BI_FPUTYPE = 3; // FPU type (uint32)
31: static const uint BI_MMUTYPE = 4; // MMU type (uint32)
32: static const uint BI_MEMCHUNK = 5; // memory segment (bi_mem_info)
33: static const uint BI_RAMDISK = 6; // RAMDISK (bi_mem_info)
34: static const uint BI_COMMANDLINE= 7; // カーネルコマンドライン
35: // パラメータ (C string)
36: static const uint BI_RNG_SEED = 8; // 乱数シード (bi_data)
37:
38: #define BI_MACHDEP(x) (0x8000 + (x))
39: static const uint BI_QEMU_VER = BI_MACHDEP(0); // (uint32)
40: static const uint BI_GFPIC = BI_MACHDEP(1); // (bi_virt_dev *)
41: static const uint BI_GFRTC = BI_MACHDEP(2);
42: static const uint BI_GFTTY = BI_MACHDEP(3);
43: static const uint BI_VIRTIO = BI_MACHDEP(4);
44: static const uint BI_CTRL = BI_MACHDEP(5);
45:
46: // BI_MACHTYPE
47: static const uint32 BI_MACH_VIRT = 14;
48:
49: // BI_CPUTYPE
50: static const uint32 BI_CPU_68020 = (1U << 0);
51: static const uint32 BI_CPU_68030 = (1U << 1);
52: static const uint32 BI_CPU_68040 = (1U << 2);
53: static const uint32 BI_CPU_68060 = (1U << 3);
54:
55: // BI_FPUTYPE
56: static const uint32 BI_FPU_68881 = (1U << 0);
57: static const uint32 BI_FPU_68882 = (1U << 1);
58: static const uint32 BI_FPU_68040 = (1U << 2);
59: static const uint32 BI_FPU_68060 = (1U << 3);
60:
61: // BI_MMUTYPE
62: static const uint32 BI_MMU_68851 = (1U << 0);
63: static const uint32 BI_MMU_68030 = (1U << 1);
64: static const uint32 BI_MMU_68040 = (1U << 2);
65: static const uint32 BI_MMU_68060 = (1U << 3);
66:
67: // bi_mem_info {
68: // uint32 addr;
69: // uint32 size;
70: // };
71: //
72: // bi_data {
73: // uint16 data_length;
74: // uint8[] data_bytes;
75: // };
76: //
77: // bi_vert_dev {
78: // uint32 addr;
79: // uint32 irq;
80: // };
81:
82: protected:
83: // このデバイス先頭アドレス
84: static const uint32 baseaddr = 0xff000000;
85:
86: // 謎の I/O 空間
87: static const uint32 ROMIO_BASE = 0xff008000;
88: static const uint32 ROMIO_INIT = (ROMIO_BASE + 0);
89:
90: public:
91: Virt68kROMEmuDevice();
92: ~Virt68kROMEmuDevice() override;
93:
94: bool Init() override;
95: void ResetHard(bool poweron) override;
96:
97: private:
1.1.1.2 ! root 98: uint64 ReadROMIO(busaddr addr) override;
! 99:
1.1 root 100: uint32 ROM_Init();
101: bool MakeBootInfo(LoadInfo *);
102: void WriteBootInfo(IODeviceStream&, BootInfo&);
103:
104: static const std::pair<uint32, const char *> tag_str[];
105: static const std::pair<uint32, const char *> mach_str[];
106: static const std::pair<uint32, const char *> cpu_str[];
107: static const std::pair<uint32, const char *> fpu_str[];
108: static const std::pair<uint32, const char *> mmu_str[];
109:
110: MainRAMDevice *mainram {};
111: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.