- seek function added in lowlevel cdrom code (reads a block at specified address)
This commit is contained in:
parent
e350c8cb5c
commit
00eabeb2de
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// $Id: cdrom.cc,v 1.86 2005-11-11 22:52:57 vruppert Exp $
|
||||
// $Id: cdrom.cc,v 1.87 2005-12-27 13:21:25 vruppert Exp $
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (C) 2002 MandrakeSoft S.A.
|
||||
@ -530,7 +530,7 @@ cdrom_interface::cdrom_interface(char *dev)
|
||||
|
||||
void
|
||||
cdrom_interface::init(void) {
|
||||
BX_DEBUG(("Init $Id: cdrom.cc,v 1.86 2005-11-11 22:52:57 vruppert Exp $"));
|
||||
BX_DEBUG(("Init $Id: cdrom.cc,v 1.87 2005-12-27 13:21:25 vruppert Exp $"));
|
||||
BX_INFO(("file = '%s'",path));
|
||||
}
|
||||
|
||||
@ -1476,4 +1476,11 @@ cdrom_interface::read_block(Bit8u* buf, int lba, int blocksize)
|
||||
return (n == BX_CD_FRAMESIZE);
|
||||
}
|
||||
|
||||
void cdrom_interface::seek(int lba)
|
||||
{
|
||||
unsigned char buffer[BX_CD_FRAMESIZE];
|
||||
|
||||
read_block(buffer, lba, BX_CD_FRAMESIZE);
|
||||
}
|
||||
|
||||
#endif /* if BX_SUPPORT_CDROM */
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// $Id: cdrom.h,v 1.18 2005-11-02 20:26:24 vruppert Exp $
|
||||
// $Id: cdrom.h,v 1.19 2005-12-27 13:21:25 vruppert Exp $
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (C) 2002 MandrakeSoft S.A.
|
||||
@ -34,24 +34,27 @@ public:
|
||||
~cdrom_interface(void);
|
||||
void init(void);
|
||||
|
||||
// Load CD-ROM. Returns false if CD is not ready.
|
||||
// Load CD-ROM. Returns 0 if CD is not ready.
|
||||
bx_bool insert_cdrom(char *dev = NULL);
|
||||
|
||||
// Logically eject the CD.
|
||||
void eject_cdrom();
|
||||
|
||||
// Read CD TOC. Returns false if start track is out of bounds.
|
||||
// Read CD TOC. Returns 0 if start track is out of bounds.
|
||||
bx_bool read_toc(Bit8u* buf, int* length, bx_bool msf, int start_track, int format);
|
||||
|
||||
// Return CD-ROM capacity (in 2048 byte frames)
|
||||
Bit32u capacity();
|
||||
|
||||
// Read a single block from the CD
|
||||
// Read a single block from the CD. Returns 0 on failure.
|
||||
bx_bool read_block(Bit8u* buf, int lba, int blocksize) BX_CPP_AttrRegparmN(3);
|
||||
|
||||
// Start (spin up) the CD.
|
||||
bx_bool start_cdrom();
|
||||
|
||||
// Seek for new block address.
|
||||
void seek(int lba);
|
||||
|
||||
private:
|
||||
int fd;
|
||||
char *path;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// $Id: cdrom_amigaos.cc,v 1.11 2005-12-10 18:37:35 vruppert Exp $
|
||||
// $Id: cdrom_amigaos.cc,v 1.12 2005-12-27 13:21:25 vruppert Exp $
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (C) 2000 MandrakeSoft S.A.
|
||||
@ -273,3 +273,10 @@ int DoSCSI(UBYTE *data, int datasize, Bit8u *cmd,int cmdsize, UBYTE direction)
|
||||
|
||||
return CDIO->iotd_Req.io_Error;
|
||||
}
|
||||
|
||||
void cdrom_interface::seek(int lba)
|
||||
{
|
||||
unsigned char buffer[BX_CD_FRAMESIZE];
|
||||
|
||||
read_block(buffer, lba, BX_CD_FRAMESIZE);
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// $Id: harddrv.cc,v 1.155 2005-12-10 15:02:25 vruppert Exp $
|
||||
// $Id: harddrv.cc,v 1.156 2005-12-27 13:21:25 vruppert Exp $
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (C) 2002 MandrakeSoft S.A.
|
||||
@ -144,7 +144,7 @@ bx_hard_drive_c::init(void)
|
||||
char string[5];
|
||||
char sbtext[8];
|
||||
|
||||
BX_DEBUG(("Init $Id: harddrv.cc,v 1.155 2005-12-10 15:02:25 vruppert Exp $"));
|
||||
BX_DEBUG(("Init $Id: harddrv.cc,v 1.156 2005-12-27 13:21:25 vruppert Exp $"));
|
||||
|
||||
for (channel=0; channel<BX_MAX_ATA_CHANNEL; channel++) {
|
||||
if (bx_options.ata[channel].Opresent->get() == 1) {
|
||||
@ -1810,7 +1810,11 @@ bx_hard_drive_c::write(Bit32u address, Bit32u value, unsigned io_len)
|
||||
raise_interrupt(channel);
|
||||
break;
|
||||
}
|
||||
BX_INFO(("cdrom: SEEK (ignored)"));
|
||||
#ifdef LOWLEVEL_CDROM
|
||||
BX_SELECTED_DRIVE(channel).cdrom.cd->seek(lba);
|
||||
#else
|
||||
BX_PANIC(("Seek with no LOWLEVEL_CDROM"));
|
||||
#endif
|
||||
atapi_cmd_nop(channel);
|
||||
raise_interrupt(channel);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user