File:  [Isaki's NoNo m68k/m88k emulator] / nono / vm / virtio_block.h
Revision 1.1.1.5 (vendor branch): download - view: text, annotated - select for diffs
Wed Apr 29 17:06:00 2026 UTC (3 months ago) by root
Branches: MAIN, Isaki
CVS tags: v027, HEAD
nono 1.7.0

//
// nono
// Copyright (C) 2024 nono project
// Licensed under nono-license.txt
//

//
// VirtIO ブロックデバイス
//

#pragma once

#include "virtio_base.h"
#include "diskimage.h"
#include "scsidev.h"

class VirtIOBlockDevice : public VirtIODevice
{
	using inherited = VirtIODevice;

 public:
	VirtIOBlockDevice(uint slot_, uint id_);
	~VirtIOBlockDevice() override;

	bool Init() override;

	// メディアの書き込みモードを返す
	SCSIDisk::RW GetWriteMode() const { return write_mode; }

	// 現在のアクセス状況を返す
	uint32 GetAccessRead() const	{ return access_read; }
	uint32 GetAccessWrite() const	{ return access_write; }

 private:
	DECLARE_MONITOR_SCREEN(MonitorScreen);

	const char *GetFeatureName(uint feature) const override;

	bool LoadDisk(const std::string& pathname_);

	// ディスクリプタを一つ処理する。
	void ProcessDesc(VirtIOReq&) override;
	uint32 CmdRead(VirtIOReq&, uint64 sector, uint32 datalen);
	uint32 CmdWrite(VirtIOReq&, uint64 sector, uint32 datalen);
	uint32 CmdGetID(VirtIOReq&, uint32 datalen);

	uint id {};					// 識別番号
	std::string pathname {};	// イメージファイルのフルパス
	bool write_ignore {};		// 書き込み無視オプション

	DiskImage image {};			// イメージファイル
	uint32 blocksize {};		// 論理ブロック長
	SCSIDisk::RW write_mode {};	// メディアの書き込みモード

	// アクセスインジケータ (GUI) 用のカウンタ。
	uint32 access_read {};
	uint32 access_write {};
};

unix.superglobalmegacorp.com

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