NAME
D64::Disk::Layout - Handling entire Commodore (D64/D71/D81) disk image data in pure Perl
SYNOPSIS
use D64::Disk::Layout;
# Create an empty disk layout instance:
my $layout = D64::Disk::Layout->new();
# Read disk image layout from existing file:
my $layout = D64::Disk::Layout->new('image.d64');
# Get disk sector object from a disk layout:
my $sector_layout = $layout->sector(track => $track, sector => $sector);
# Put new data into specific disk layout sector:
$layout->sector(data => $sector_layout);
# Update an arbitrary disk layout sector with data:
$layout->sector(data => $sector_layout, track => $track, sector => $sector);
# Fetch disk layout data as an array of 683 sector objects:
my @sector_layouts = $layout->sectors();
# Update disk layout given an array of arbitrary sector objects:
$layout->sectors(sectors => \@sector_layouts);
# Fetch disk layout data as a scalar of 683 * 256 bytes:
my $data = $layout->data();
# Update disk layout providing 683 * 256 bytes of scalar data:
$layout->data(data => $data);
# Print out nicely formatted human-readable form of a track/sector data:
$layout->print(fh => $fh, track => $track, sector => $sector);
DESCRIPTION
D64::Disk::Layout
provides a helper class for D64::Disk
module, enabling users to easily access and manipulate entire D64/D71/D81 disk image data in an object oriented way without the hassle of worrying about the meaning of individual bits and bytes located on every track and sector of a physical disk image. The whole family of D64::Disk::Layout
modules has been implemented in pure Perl as an alternative to Per Olofsson's "diskimage.c" library originally written in an ANSI C.
D64::Disk::Layout
is completely unaware of an internal structure, configuration and meaning of individual sectors on disk. It only knows how to fetch and store bytes of data. Standard D64
disk image of 170
kbytes is split into 683
sectors on 35
tracks, each of the sectors holding 256
bytes. See description of the D64::Disk module for a detailed description on accessing individual disk image files and preserving disk directory structure.
METHODS
new
Create empty unformatted D64 disk image layout:
my $d64DiskLayoutObj = D64::Disk::Layout->new();
Read D64 disk image layout from existing file:
my $d64DiskLayoutObj = D64::Disk::Layout->new('image.d64');
A valid D64::Disk::Layout object is returned upon success, an undefined value otherwise.
sector
Retrieve disk sector object from a disk layout:
my $sectorObj = $d64DiskLayoutObj->sector(track => $track, sector => $sector);
Insert new data into specific disk layout sector:
$d64DiskLayoutObj->sector(data => $sectorObj);
Update an arbitrary disk layout sector with data:
$d64DiskLayoutObj->sector(data => $sectorObj, track => $track, sector => $sector);
sectors
Fetch disk layout data as a flattened array of 683 sector objects:
my @sector_layouts = $d64DiskLayoutObj->sectors();
Update disk layout given an array of arbitrary sector objects:
$d64DiskLayoutObj->sectors(sectors => \@sector_layouts);
tracks
Fetch disk layout data as an array of 35 arrays of sector objects allocated by their respective track numbers:
my @track_layouts = $d64DiskLayoutObj->tracks();
data
Fetch disk layout data as a scalar of 683 * 256 bytes:
my $data = $d64DiskLayoutObj->data();
Update disk layout providing 683 * 256 bytes of scalar data:
$d64DiskLayoutObj->data(data => $data);
Print out nicely formatted human-readable form of a track/sector data into any given IO::Handle:
$d64DiskLayoutObj->print(fh => $fh, track => $track, sector => $sector);
BUGS
There are no known bugs at the moment. Please report any bugs or feature requests.
EXPORT
None. No method is exported into the caller's namespace either by default or explicitly.
SEE ALSO
D64::Disk::Image, D64::Disk::Layout::Sector, D64::Disk::Layout::Base.
AUTHOR
Pawel Krol, <pawelkrol@cpan.org>.
VERSION
Version 0.03 (2021-04-24)
COPYRIGHT AND LICENSE
Copyright 2021 by Pawel Krol <pawelkrol@cpan.org>.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.