RASCSI/src/raspberrypi/disk_image/disk_image_handle.cpp

60 lines
1.1 KiB
C++
Raw Normal View History

2022-03-14 02:16:21 +00:00
//---------------------------------------------------------------------------
//
// SCSI Target Emulator RaSCSI (*^..^*)
// for Raspberry Pi
//
// Copyright (C) 2022 akuker
//
2022-03-14 02:28:40 +00:00
// Base class for interfacing with disk images.
2022-03-14 02:16:21 +00:00
//
// [ DiskImageHandle ]
//
2022-03-14 02:28:40 +00:00
//---------------------------------------------------------------------------
2022-03-14 02:16:21 +00:00
#include "disk_image/disk_image_handle.h"
2022-02-13 05:10:06 +00:00
2022-03-14 02:28:40 +00:00
DiskImageHandle::DiskImageHandle(const Filepath &path, int size, uint32_t blocks, off_t imgoff)
{
2022-02-13 05:10:06 +00:00
2022-03-14 02:28:40 +00:00
serial = 0;
2022-02-13 05:10:06 +00:00
sec_path = path;
sec_size = size;
sec_blocks = blocks;
imgoffset = imgoff;
}
2022-03-14 02:28:40 +00:00
DiskImageHandle::~DiskImageHandle()
{
2022-02-13 05:10:06 +00:00
}
2022-03-14 02:28:40 +00:00
off_t DiskImageHandle::GetSectorOffset(int block)
{
2022-02-13 05:10:06 +00:00
int sector_num = block & 0xff;
return (off_t)sector_num << sec_size;
}
2022-03-14 02:28:40 +00:00
off_t DiskImageHandle::GetTrackOffset(int block)
{
2022-02-13 05:10:06 +00:00
// Assuming that all tracks hold 256 sectors
int track_num = block >> 8;
// Calculate offset (previous tracks are considered to hold 256 sectors)
off_t offset = ((off_t)track_num << 8);
2022-03-14 02:28:40 +00:00
if (cd_raw)
{
2022-02-13 05:10:06 +00:00
ASSERT(sec_size == 11);
offset *= 0x930;
offset += 0x10;
2022-03-14 02:28:40 +00:00
}
else
{
2022-02-13 05:10:06 +00:00
offset <<= sec_size;
}
// Add offset to real image
offset += imgoffset;
return offset;
}