Annotation of nono/vm/human68k.h, revision 1.1.1.9

1.1       root        1: //
                      2: // nono
1.1.1.3   root        3: // Copyright (C) 2020 nono project
                      4: // Licensed under nono-license.txt
1.1       root        5: //
                      6: 
1.1.1.8   root        7: //
                      8: // Human68k .r .x .z console emulator
                      9: //
                     10: 
1.1       root       11: #pragma once
                     12: 
                     13: #include "device.h"
1.1.1.9 ! root       14: #include "mainram.h"
        !            15: 
        !            16: class MPU680x0Device;
1.1       root       17: 
                     18: // Human68k 構造
1.1.1.3   root       19: class Human68k : public Device
                     20: {
                     21:        using inherited = Device;
1.1.1.8   root       22: 
                     23:        static const uint32 default_load_addr = 0x20000;
                     24: 
                     25:        static const int FilesCount = 256;
                     26: 
1.1       root       27:  public:
                     28:        // .X ファイルのヘッダ構造
                     29:        struct XFileHeader {
                     30:                uint8  magic[2];                // +00 識別子 'HU'
                     31:                uint8  unused1;
                     32:                uint8  loadmode;                // +03 ロードモード
                     33:                uint32 base_addr;               // +04 ベースアドレス
                     34:                uint32 exec_addr;               // +08 実行開始アドレス
                     35:                uint32 text_size;               // +0c テキストサイズ
                     36:                uint32 data_size;               // +10 データサイズ
                     37:                uint32 bss_size;                // +14 BSS サイズ
                     38:                uint32 reloc_size;              // +18 再配置テーブルサイズ
                     39:                uint32 symbol_size;             // +1c シンボルサイズ
                     40:                uint32 scdline_size;    // +20 SCD 行番号テーブルサイズ
                     41:                uint32 scdsym_size;             // +24 SCD シンボルテーブルサイズ
                     42:                uint32 scdstr_size;             // +28 SCD 文字列テーブルサイズ
                     43:                uint32 unused2[4];
                     44:                uint32 module_offset;   // +3c モジュールリストの位置
                     45:        } __packed;
                     46: 
                     47:        // .Z ファイルのヘッダ構造
                     48:        struct ZFileHeader {
                     49:                uint16 magic1;                  // +00 第一識別子 $601a
                     50:                uint32 text_size;               // +02 テキストサイズ
                     51:                uint32 data_size;               // +06 データサイズ
                     52:                uint32 bss_size;                // +0a BSS サイズ
                     53:                uint8  unused[8];
                     54:                uint32 base_addr;               // +16 実行開始アドレス
                     55:                uint16 magic2;                  // +1a 第二識別子 $ffff
                     56:        } __packed;
                     57: 
                     58:        // Human68k File
                     59:        struct File {
                     60:                int fd = -1;                    // unix fd
1.1.1.3   root       61:                std::string filename {};
1.1       root       62:        };
                     63: 
1.1.1.2   root       64:        Human68k();
1.1.1.5   root       65:        virtual ~Human68k() override;
1.1       root       66: 
1.1.1.3   root       67:        bool Init() override;
1.1       root       68: 
1.1.1.9 ! root       69:        bool FLineOp();
        !            70: 
        !            71:        // MSXDOSDevice からも呼ぶ
        !            72:        static void RequestExit(int code);
1.1       root       73: 
                     74:  private:
                     75:        // Human Emulation API
                     76:        int32 OpenFile(uint32 fileaddr, uint16 atr, int mode);
                     77:        int32 CloseFile(int32 fileno);
                     78:        int32 WriteFile(int32 fileno, uint32 dataaddr, uint32 size);
                     79:        void FputsFile(int32 fileno, uint32 dataaddr);
                     80: 
1.1.1.9 ! root       81:        void IOCS();
        !            82:        void DOS_PRINT(uint32 dataptr);
1.1       root       83: 
                     84:        bool LoadR(uint8 *memfile, uint size);
                     85:        bool LoadX(uint8 *memfile, uint size);
                     86:        bool LoadZ(uint8 *memfile, uint size);
1.1.1.6   root       87:        bool LoadELF(uint8 *memfile, uint size);
1.1       root       88:        bool LoadMem(uint32 addr, uint8 *src, uint size);
                     89: 
                     90:        bool isext(const char *file, const char *ext);
                     91: 
1.1.1.4   root       92:        const char *human68k_file {};
1.1.1.7   root       93:        std::string human68k_arg {};
1.1       root       94: 
1.1.1.4   root       95:        uint32 boot_addr {};            // ローダプログラムアドレス
                     96:        uint32 load_addr {};            // ロードアドレス
                     97:        uint32 load_size {};            // ロードサイズ
1.1       root       98: 
1.1.1.4   root       99:        uint32 base_addr {};            // ベースアドレス(ファイルの値)
1.1       root      100:                                                                // ベースアドレスはload_addr決定で使用される
1.1.1.4   root      101:        uint32 exec_addr {};            // 実行開始アドレス
1.1       root      102: 
1.1.1.4   root      103:        uint32 text_size {};            // テキストセクションサイズ
                    104:        uint32 data_size {};            // データセクションサイズ
                    105:        uint32 bss_size {};                     // BSS セクションサイズ(記録用)
1.1       root      106: 
                    107:        File Files[FilesCount] {};
1.1.1.8   root      108: 
1.1.1.9 ! root      109:        MainRAMDevice *ram {};
        !           110:        MPU680x0Device *mpu {};
        !           111: };

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.