|
|
1.1 ! root 1: // ! 2: // nono ! 3: // Copyright (C) 2024 nono project ! 4: // Licensed under nono-license.txt ! 5: // ! 6: ! 7: // ! 8: // virt68k の IPLROM 相当の何か ! 9: // ! 10: ! 11: #pragma once ! 12: ! 13: #include "rom.h" ! 14: ! 15: class BootInfo; ! 16: class IODeviceStream; ! 17: class LoadInfo; ! 18: class MainRAMDevice; ! 19: ! 20: class Virt68kROMEmuDevice : public ROMDevice ! 21: { ! 22: using inherited = ROMDevice; ! 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: busdata Read32(uint32 addr) override; ! 98: ! 99: private: ! 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.