|
|
1.1 root 1: //
2: // nono
3: // Copyright (C) 2022 nono project
4: // Licensed under nono-license.txt
5: //
6:
7: //
8: // X68030 の ROM30 (SCSI ROM) エミュレーション
9: //
10:
11: #pragma once
12:
13: #include "rom.h"
14:
15: class m68kcpu;
16:
17: class ROM30EmuDevice : public ROMDevice
18: {
19: using inherited = ROMDevice;
20:
21: private:
22: // このデバイスの先頭アドレス
23: static const uint32 baseaddr = 0x00fc0000;
24:
25: // 謎の I/O 空間
26: static const uint32 ROMIO_BASE = 0xfc0080;
27: static const uint32 ROMIO_SCSI = (ROMIO_BASE + 0);
28: static const uint32 ROMIO_BOOT = (ROMIO_BASE + 4);
29:
30: public:
31: ROM30EmuDevice();
32: virtual ~ROM30EmuDevice() override;
33:
34: bool Init() override;
35:
36: uint64 Read32(uint32 addr) override;
37:
38: private:
39: uint32 SCSIBoot() const;
40: uint32 SCSIIOCS();
41: uint32 SCSI_S_INQUIRY(uint32);
42: uint32 SCSI_S_READEXT(uint32);
43: uint32 SCSI_S_TESTUNIT(uint32);
44: uint32 SCSI_S_READCAP(uint32);
45:
46: // SCSI IOCS コール名を返す
47: static std::string GetSCSICallName(uint number);
48:
49: m68kcpu *cpu {};
50:
51: static const char * const x68k_scsicall[0x40];
52: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.