homelan/acorn-disk

提供用于读取8位Acorn机器(dfs/adfs)磁盘镜像的类

安装: 298

依赖项: 0

建议者: 0

安全: 0

星级: 0

关注者: 1

分支: 0

开放问题: 0

类型:项目

1.1.0 2023-09-05 08:40 UTC

This package is auto-updated.

Last update: 2024-09-05 11:19:53 UTC


README

此软件包允许读取DFS和ADFS磁盘镜像。

功能

  • PSR-4自动加载兼容结构
  • 使用PHPUnit进行单元测试
  • 磁盘镜像可以从文件读取,也可以作为字符串传入

安装

composer requre homelan/acorn-disk

概述

DfsReader类允许从以.ssd格式存储的DFS磁盘镜像中读取文件和元数据。在DFS中,目录不是像现代文件系统那样的分层结构,而是只能存在于顶级,目录名长度只能为1个字符。DFS的另一个特点是默认目录是'$',尽管在8位Acorn系列的后续文件系统中'$'是文件系统的根,但在DFS目录中'$'更像是一个文件名前缀,默认情况下为'$'。

DfsReader类可以以两种方式工作,它可以直接读取磁盘镜像的比特,按需打开文件句柄,或者整个磁盘可以作为一个字符串读取并传递给DfsReader。前者对于大量文件访问更有效,而后者更节省内存。

AdfsReader类允许从以.adl格式存储的ADFS软盘镜像中读取文件和元数据。ADFS文件系统类似于现代文件系统,具有分层目录结构,'$'是文件系统的根。ADFS中每个目录的文件数量有限制。

AdfsReaderHD类与AdfsReader类功能相同,只是读取存储在Beebem使用的scsi.dat格式中的硬盘镜像。

DfsReader使用方法

创建一个DfsReader对象以直接打开磁盘上的文件

$oDfs = new \HomeLan\Retro\Acorn\Disk\DfsReader('disk_image.ssd');

创建一个DfsReader对象以从二进制字符串中读取磁盘镜像

$sDiskImage = file_get_contents('disk_image.ssd');

$oDfs = new \HomeLan\Retro\Acorn\Disk\DfsReader(null,$sDiskImage);

一旦创建了DfsReader对象,可以使用一些简单的方法从其中读取数据。

$oDfs->getTitle()

读取磁盘标题

$aCatalogue = $oDfs->getCatalogue();

获取磁盘上的内容目录 *CAT

例如:

$aCatalogue = $oDfs->getCatalogue(); foreach($aCatalogue as $sDirectoy=>$aDir) { echo $sDirectoy."\n==============\n"; foreach($aDir as $sFileName=>$aEntryMetadata){ echo $sFileName." [".$aEntryMetadata['loadaddr'].' '.$aEntryMetadata['execaddr'].' '.$aEntryMetadata['size'].' '.$aEntryMetadata['startsector']."\n";

}

}

.!BOOT');

读取指定文件的全部内容

例如:

$sFileContents = .!BOOT');

.!BOOT');

获取文件统计信息

.!BOOT');

检查指定路径是否为文件

例如:

$bFile = .!BOOT'); if($bFile){ echo "!BOOT is file.\n" }

$oDfs->isDir('A');

检查指定路径是否为文件

$bDir = $oDfs->isDir('D'); if($bDir){ echo "D is a dir.\n" }

AdfsReader使用方法

创建一个AdfsReader对象以直接打开磁盘上的文件

$oDfs = new \HomeLan\Retro\Acorn\Disk\AdfsReader('disk_image.adl');

创建一个AdfsReader对象以从二进制字符串中读取磁盘镜像

$sDiskImage = file_get_contents('disk_image.adl');

$oDfs = new \HomeLan\Retro\Acorn\Disk\AdfsReader(null,$sDiskImage);

一旦创建了AdfsReader对象,可以使用一些简单的方法从其中读取数据。

$oAdfs->getTitle()

读取磁盘标题

$aCatalogue = $oAdfs->getCatalogue();

获取磁盘上的内容目录 *CAT

例如:

$aCatalogue = $oAdfs->getCatalogue(); foreach($aCatalogue as $sDirectoy=> $aDir) { echo $sDirectoy."\n==============\n"; foreach($aDir as $sFileName=> $aEntryMetadata){ echo $sFileName." [".$aEntryMetadata['loadaddr'].' '.$aEntryMetadata['execaddr'].' '.$aEntryMetadata['size'].' '.$aEntryMetadata['startsector'].' '$aEntryMetadata['type']."\n";

}

}

.!BOOT');

读取指定文件的全部内容

例如:

$sFileContents = .!BOOT');

.!BOOT');

获取文件统计信息

.!BOOT');

检查指定路径是否为文件

例如:

$bFile = .!BOOT'); if($bFile){ echo "!BOOT is file.\n" }

$oDfs->isDir('A');

检查指定路径是否为文件

$bDir = $oAdfs->isDir('D'); if($bDir){ echo "D 是一个目录。\n" }

AdfsReaderHD 使用说明

这与 AdfsReader 类完全相同,只是构造函数不同,因为它不支持从二进制字符串中读取磁盘镜像。
这是因为涉及到的磁盘镜像大小显著更大,这是一个相对负面的特性。

$oDfs = new \HomeLan\Retro\Acorn\Disk\AdfsReaderHD('scsi0.dat');