2020-08-28 14:18:02 +00:00
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
//
|
|
|
|
|
// SCSI Target Emulator RaSCSI (*^..^*)
|
|
|
|
|
// for Raspberry Pi
|
|
|
|
|
//
|
|
|
|
|
// Copyright (C) 2001-2006 PI.(ytanaka@ipc-tokai.or.jp)
|
|
|
|
|
// Copyright (C) 2014-2020 GIMONS
|
|
|
|
|
// Copyright (C) akuker
|
|
|
|
|
//
|
|
|
|
|
// Licensed under the BSD 3-Clause License.
|
|
|
|
|
// See LICENSE file in the project root folder.
|
|
|
|
|
//
|
|
|
|
|
// [ SCSI Hard Disk for Apple Macintosh ]
|
|
|
|
|
//
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "os.h"
|
|
|
|
|
#include "disk.h"
|
|
|
|
|
#include "filepath.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
//
|
|
|
|
|
// Class precedence definition
|
|
|
|
|
//
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
class SCSICD;
|
|
|
|
|
|
|
|
|
|
//===========================================================================
|
|
|
|
|
//
|
|
|
|
|
// CD-ROM Track
|
|
|
|
|
//
|
|
|
|
|
//===========================================================================
|
|
|
|
|
class CDTrack
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
// Basic Functions
|
|
|
|
|
CDTrack(SCSICD *scsicd);
|
|
|
|
|
// Constructor
|
|
|
|
|
virtual ~CDTrack();
|
|
|
|
|
// Destructor
|
|
|
|
|
BOOL FASTCALL Init(int track, DWORD first, DWORD last);
|
|
|
|
|
// Initialization
|
|
|
|
|
|
|
|
|
|
// Properties
|
|
|
|
|
void FASTCALL SetPath(BOOL cdda, const Filepath& path);
|
|
|
|
|
// Set the path
|
|
|
|
|
void FASTCALL GetPath(Filepath& path) const;
|
|
|
|
|
// Get the path
|
|
|
|
|
void FASTCALL AddIndex(int index, DWORD lba);
|
|
|
|
|
// Add index
|
|
|
|
|
DWORD FASTCALL GetFirst() const;
|
|
|
|
|
// Get the start LBA
|
|
|
|
|
DWORD FASTCALL GetLast() const;
|
|
|
|
|
// Get the last LBA
|
|
|
|
|
DWORD FASTCALL GetBlocks() const;
|
|
|
|
|
// Get the number of blocks
|
|
|
|
|
int FASTCALL GetTrackNo() const;
|
|
|
|
|
// Get the track number
|
|
|
|
|
BOOL FASTCALL IsValid(DWORD lba) const;
|
|
|
|
|
// Is this a valid LBA?
|
|
|
|
|
BOOL FASTCALL IsAudio() const;
|
|
|
|
|
// Is this an audio track?
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
SCSICD *cdrom;
|
|
|
|
|
// Parent device
|
|
|
|
|
BOOL valid;
|
|
|
|
|
// Valid track
|
|
|
|
|
int track_no;
|
|
|
|
|
// Track number
|
|
|
|
|
DWORD first_lba;
|
|
|
|
|
// First LBA
|
|
|
|
|
DWORD last_lba;
|
|
|
|
|
// Last LBA
|
|
|
|
|
BOOL audio;
|
|
|
|
|
// Audio track flag
|
|
|
|
|
BOOL raw;
|
|
|
|
|
// RAW data flag
|
|
|
|
|
Filepath imgpath;
|
|
|
|
|
// Image file path
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//===========================================================================
|
|
|
|
|
//
|
|
|
|
|
// CD-DA Buffer
|
|
|
|
|
//
|
|
|
|
|
//===========================================================================
|
|
|
|
|
class CDDABuf
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
// Basic Functions
|
|
|
|
|
CDDABuf();
|
|
|
|
|
// Constructor
|
|
|
|
|
virtual ~CDDABuf();
|
|
|
|
|
// Destructor
|
|
|
|
|
#if 0
|
|
|
|
|
BOOL Init();
|
|
|
|
|
// Initialization
|
|
|
|
|
BOOL FASTCALL Load(const Filepath& path);
|
|
|
|
|
// Load
|
|
|
|
|
BOOL FASTCALL Save(const Filepath& path);
|
|
|
|
|
// Save
|
|
|
|
|
|
|
|
|
|
// API
|
|
|
|
|
void FASTCALL Clear();
|
|
|
|
|
// Clear the buffer
|
|
|
|
|
BOOL FASTCALL Open(Filepath& path);
|
|
|
|
|
// File specification
|
|
|
|
|
BOOL FASTCALL GetBuf(DWORD *buffer, int frames);
|
|
|
|
|
// Get the buffer
|
|
|
|
|
BOOL FASTCALL IsValid();
|
|
|
|
|
// Check if Valid
|
|
|
|
|
BOOL FASTCALL ReadReq();
|
|
|
|
|
// Read Request
|
|
|
|
|
BOOL FASTCALL IsEnd() const;
|
|
|
|
|
// Finish check
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
Filepath wavepath;
|
|
|
|
|
// Wave path
|
|
|
|
|
BOOL valid;
|
|
|
|
|
// Open result (is it valid?)
|
2021-02-03 01:55:38 +00:00
|
|
|
|
DWORD *buf;
|
2020-08-28 14:18:02 +00:00
|
|
|
|
// Data buffer
|
|
|
|
|
DWORD read;
|
|
|
|
|
// Read pointer
|
|
|
|
|
DWORD write;
|
|
|
|
|
// Write pointer
|
|
|
|
|
DWORD num;
|
|
|
|
|
// Valid number of data
|
|
|
|
|
DWORD rest;
|
|
|
|
|
// Remaining file size
|
|
|
|
|
#endif
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//===========================================================================
|
|
|
|
|
//
|
|
|
|
|
// SCSI CD-ROM
|
|
|
|
|
//
|
|
|
|
|
//===========================================================================
|
|
|
|
|
class SCSICD : public Disk
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
// Number of tracks
|
|
|
|
|
enum {
|
|
|
|
|
TrackMax = 96 // Maximum number of tracks
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
// Basic Functions
|
|
|
|
|
SCSICD();
|
|
|
|
|
// Constructor
|
|
|
|
|
virtual ~SCSICD();
|
|
|
|
|
// Destructor
|
|
|
|
|
BOOL FASTCALL Open(const Filepath& path, BOOL attn = TRUE);
|
|
|
|
|
// Open
|
|
|
|
|
#ifndef RASCSI
|
|
|
|
|
BOOL FASTCALL Load(Fileio *fio, int ver);
|
|
|
|
|
// Load
|
|
|
|
|
#endif // RASCSI
|
|
|
|
|
|
|
|
|
|
// commands
|
|
|
|
|
int FASTCALL Inquiry(const DWORD *cdb, BYTE *buf, DWORD major, DWORD minor);
|
|
|
|
|
// INQUIRY command
|
2021-02-03 01:55:38 +00:00
|
|
|
|
int FASTCALL Read(BYTE *buf, DWORD block);
|
2020-08-28 14:18:02 +00:00
|
|
|
|
// READ command
|
|
|
|
|
int FASTCALL ReadToc(const DWORD *cdb, BYTE *buf);
|
|
|
|
|
// READ TOC command
|
|
|
|
|
BOOL FASTCALL PlayAudio(const DWORD *cdb);
|
|
|
|
|
// PLAY AUDIO command
|
|
|
|
|
BOOL FASTCALL PlayAudioMSF(const DWORD *cdb);
|
|
|
|
|
// PLAY AUDIO MSF command
|
|
|
|
|
BOOL FASTCALL PlayAudioTrack(const DWORD *cdb);
|
|
|
|
|
// PLAY AUDIO TRACK command
|
|
|
|
|
|
|
|
|
|
// CD-DA
|
|
|
|
|
BOOL FASTCALL NextFrame();
|
|
|
|
|
// Frame notification
|
|
|
|
|
void FASTCALL GetBuf(DWORD *buffer, int samples, DWORD rate);
|
|
|
|
|
// Get CD-DA buffer
|
|
|
|
|
|
|
|
|
|
// LBA-MSF変換
|
|
|
|
|
void FASTCALL LBAtoMSF(DWORD lba, BYTE *msf) const;
|
|
|
|
|
// LBA→MSF conversion
|
|
|
|
|
DWORD FASTCALL MSFtoLBA(const BYTE *msf) const;
|
|
|
|
|
// MSF→LBA conversion
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
// Open
|
|
|
|
|
BOOL FASTCALL OpenCue(const Filepath& path);
|
|
|
|
|
// Open(CUE)
|
|
|
|
|
BOOL FASTCALL OpenIso(const Filepath& path);
|
|
|
|
|
// Open(ISO)
|
|
|
|
|
BOOL FASTCALL OpenPhysical(const Filepath& path);
|
|
|
|
|
// Open(Physical)
|
|
|
|
|
BOOL rawfile;
|
|
|
|
|
// RAW flag
|
|
|
|
|
|
|
|
|
|
// Track management
|
|
|
|
|
void FASTCALL ClearTrack();
|
|
|
|
|
// Clear the track
|
|
|
|
|
int FASTCALL SearchTrack(DWORD lba) const;
|
|
|
|
|
// Track search
|
|
|
|
|
CDTrack* track[TrackMax];
|
|
|
|
|
// Track opbject references
|
|
|
|
|
int tracks;
|
|
|
|
|
// Effective number of track objects
|
|
|
|
|
int dataindex;
|
|
|
|
|
// Current data track
|
|
|
|
|
int audioindex;
|
|
|
|
|
// Current audio track
|
|
|
|
|
|
|
|
|
|
int frame;
|
|
|
|
|
// Frame number
|
|
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
|
CDDABuf da_buf;
|
|
|
|
|
// CD-DA buffer
|
|
|
|
|
int da_num;
|
|
|
|
|
// Number of CD-DA tracks
|
|
|
|
|
int da_cur;
|
|
|
|
|
// CD-DA current track
|
|
|
|
|
int da_next;
|
|
|
|
|
// CD-DA next track
|
|
|
|
|
BOOL da_req;
|
|
|
|
|
// CD-DA data request
|
|
|
|
|
#endif
|
|
|
|
|
};
|