--- nono/vm/human68k.h 2026/04/29 17:04:41 1.1.1.4 +++ nono/vm/human68k.h 2026/04/29 17:05:10 1.1.1.8 @@ -4,18 +4,25 @@ // Licensed under nono-license.txt // +// +// Human68k .r .x .z console emulator +// + #pragma once #include "device.h" #include "ram.h" #include "m68030.h" -// Human68k console emulator - // Human68k 構造 class Human68k : public Device { using inherited = Device; + + static const uint32 default_load_addr = 0x20000; + + static const int FilesCount = 256; + public: // .X ファイルのヘッダ構造 struct XFileHeader { @@ -54,7 +61,7 @@ class Human68k : public Device }; Human68k(); - ~Human68k() override; + virtual ~Human68k() override; bool Init() override; @@ -62,6 +69,7 @@ class Human68k : public Device private: // Human Emulation API + void RequestExit(int code); int32 OpenFile(uint32 fileaddr, uint16 atr, int mode); int32 CloseFile(int32 fileno); int32 WriteFile(int32 fileno, uint32 dataaddr, uint32 size); @@ -72,6 +80,7 @@ class Human68k : public Device bool LoadR(uint8 *memfile, uint size); bool LoadX(uint8 *memfile, uint size); bool LoadZ(uint8 *memfile, uint size); + bool LoadELF(uint8 *memfile, uint size); bool LoadMem(uint32 addr, uint8 *src, uint size); bool isext(const char *file, const char *ext); @@ -79,7 +88,7 @@ class Human68k : public Device RAMDevice *ram {}; const char *human68k_file {}; - const char *human68k_arg {}; + std::string human68k_arg {}; uint32 boot_addr {}; // ローダプログラムアドレス uint32 load_addr {}; // ロードアドレス @@ -93,8 +102,7 @@ class Human68k : public Device uint32 data_size {}; // データセクションサイズ uint32 bss_size {}; // BSS セクションサイズ(記録用) - const uint32 default_load_addr = 0x20000; - - static const int FilesCount = 256; File Files[FilesCount] {}; }; + +extern Human68k *gHuman68k;