Fix: Nick's disappearing disk bug

Fix: Cmd-line switches for inserting disks
This commit is contained in:
tomch 2009-05-29 21:39:13 +00:00
parent 51cb37a850
commit 41b90361fd
6 changed files with 27 additions and 13 deletions

View File

@ -874,6 +874,7 @@ int APIENTRY WinMain (HINSTANCE passinstance, HINSTANCE, LPSTR lpCmdLine, int)
//
// Make APPLEWIN process higher priority
// . BUG: No disk in Drive-1, and boot Apple: Windows will start to crawl!
if ( SetPriorityClass(GetCurrentProcess(), ABOVE_NORMAL_PRIORITY_CLASS) )
{
// Make main thread (for audio) higher priority

View File

@ -118,7 +118,7 @@ enum eSOUNDCARDTYPE {SC_UNINIT=0, SC_NONE, SC_MOCKINGBOARD, SC_PHASOR}; // Apple
typedef BYTE (__stdcall *iofunction)(WORD nPC, WORD nAddr, BYTE nWriteFlag, BYTE nWriteValue, ULONG nCyclesLeft);
typedef struct _IMAGE__ { int unused; } *HIMAGE;
typedef struct _IMAGE__ { int unused; } *HIMAGE; // DiskImage's /imageinforec/ is hidden behind HIMAGE
enum eIRQSRC {IS_6522=0, IS_SPEECH, IS_SSC, IS_MOUSE};

View File

@ -59,7 +59,6 @@ static BYTE __stdcall DiskSetWriteMode (WORD pc, WORD addr, BYTE bWrite, BYTE d,
BOOL enhancedisk = 1;
string DiskPathFilename[]; // dynamic array of strings
UINT g_uNumTracksInImage = 0;
// Private ________________________________________________________________________________________
@ -110,11 +109,11 @@ void Disk_LoadLastDiskImage( int iDrive )
char *pRegKey = (!iDrive)
? REGVALUE_PREF_LAST_DISK_1
: REGVALUE_PREF_LAST_DISK_2;
if( RegLoadString(TEXT(REG_PREFS),pRegKey,1,sFilePath,MAX_PATH) )
{
sFilePath[ MAX_PATH ] = 0;
DiskPathFilename[ iDrive ] = sFilePath;
const char *pFileName = DiskPathFilename[iDrive].c_str();
#if _DEBUG
// MessageBox(NULL,pFileName,pRegKey,MB_OK);
@ -122,7 +121,8 @@ void Disk_LoadLastDiskImage( int iDrive )
// _tcscat(imagefilename,TEXT("MASTER.DSK")); // TODO: Should remember last disk by user
bSaveDiskImage = false;
DiskInsert(iDrive,pFileName,0,0);
// Pass in ptr to local copy of filepath, since RemoveDisk() sets DiskPathFilename = ""
DiskInsert(iDrive,sFilePath,0,0);
bSaveDiskImage = true;
}
//else MessageBox(NULL,"Reg Key/Value not found",pRegKey,MB_OK);
@ -249,7 +249,7 @@ static void ReadTrack (int iDrive)
Disk_t *pFloppy = &g_aFloppyDisk[ iDrive ];
if (pFloppy->track >= (int)g_uNumTracksInImage)
if (pFloppy->track >= ImageGetNumTracks(pFloppy->imagehandle))
{
pFloppy->trackimagedata = 0;
return;
@ -308,7 +308,7 @@ static void WriteTrack (int iDrive)
{
Disk_t *pFloppy = &g_aFloppyDisk[ iDrive ];
if (pFloppy->track >= (int)g_uNumTracksInImage)
if (pFloppy->track >= ImageGetNumTracks(pFloppy->imagehandle))
return;
if (pFloppy->writeprotected)
@ -382,7 +382,8 @@ static BYTE __stdcall DiskControlStepper (WORD, WORD address, BYTE, BYTE, ULONG)
if (direction)
{
fptr->phase = MAX(0, MIN(79, fptr->phase + direction));
int newtrack = MIN((int)g_uNumTracksInImage-1, fptr->phase >> 1); // (round half tracks down)
const int nNumTracksInImage = ImageGetNumTracks(fptr->imagehandle);
int newtrack = MIN(nNumTracksInImage-1, fptr->phase >> 1); // (round half tracks down)
LOG_DISK("newtrack %2X%s\r", newtrack, (fptr->phase & 1) ? ".5" : "");
if (newtrack != fptr->track)
{

View File

@ -9,8 +9,7 @@
#define TRACKS_MAX (TRACKS_STANDARD+TRACKS_EXTRA)
extern BOOL enhancedisk;
extern string DiskPathFilename[2];
extern UINT g_uNumTracksInImage;
extern string DiskPathFilename[DRIVES];
void DiskInitialize (); // DiskManagerStartup()
void DiskDestroy (); // no, doesn't "destroy" the disk image. DiskManagerShutdown()

View File

@ -45,8 +45,11 @@ typedef struct _imageinforec {
DWORD headersize;
LPBYTE header;
BOOL validtrack[TRACKS_MAX];
UINT uNumTracks;
} imageinforec, *imageinfoptr;
static UINT g_uNumTracksInImage = 0; // Init'd by ImageOpen() & possibly updated by IsValidImageSize()
typedef BOOL (*boottype )(imageinfoptr);
typedef DWORD (*detecttype)(LPBYTE,DWORD);
typedef void (*readtype )(imageinfoptr,int,int,LPBYTE,int *);
@ -745,7 +748,7 @@ void ImageClose (HIMAGE imagehandle){
imageinfoptr ptr = (imageinfoptr)imagehandle;
if (ptr->file != INVALID_HANDLE_VALUE)
CloseHandle(ptr->file);
for (UINT track = 0; track < g_uNumTracksInImage; track++)
for (UINT track = 0; track < ptr->uNumTracks; track++)
if (!ptr->validtrack[track]) {
DeleteFile(ptr->filename);
break;
@ -833,7 +836,8 @@ int ImageOpen (LPCTSTR imagefilename,
const DWORD UNKNOWN_FORMAT = 0xFFFFFFFF;
DWORD format = UNKNOWN_FORMAT;
g_uNumTracksInImage = (size > 0) ? TRACKS_STANDARD : 0; // Assume default # tracks
if (size > 0)
{
// MAP THE FILE INTO MEMORY FOR USE BY THE DETECTION FUNCTIONS
@ -914,6 +918,7 @@ int ImageOpen (LPCTSTR imagefilename,
((imageinfoptr)*hDiskImage_)->file = file;
((imageinfoptr)*hDiskImage_)->offset = pImage-view;
((imageinfoptr)*hDiskImage_)->writeprotected = *pWriteProtected_;
((imageinfoptr)*hDiskImage_)->uNumTracks = g_uNumTracksInImage;
for (UINT track = 0; track < g_uNumTracksInImage; track++)
((imageinfoptr)*hDiskImage_)->validtrack[track] = (size > 0);
@ -955,4 +960,11 @@ void ImageWriteTrack (HIMAGE imagehandle,
ptr->validtrack[track] = 1;
}
}
//===========================================================================
int ImageGetNumTracks(HIMAGE imagehandle)
{
imageinfoptr ptr = (imageinfoptr)imagehandle;
return ptr ? ptr->uNumTracks : 0;
}

View File

@ -17,8 +17,9 @@ enum ImageError_e
IMAGE_ERROR_BAD_SIZE = 2
};
//int ImageOpen (LPCTSTR,HIMAGE *,BOOL *,BOOL);
int ImageOpen (LPCTSTR imagefilename, HIMAGE *hDiskImage_, BOOL *pWriteProtected_, BOOL bCreateIfNecessary );
void ImageReadTrack (HIMAGE,int,int,LPBYTE,int *);
void ImageWriteTrack (HIMAGE,int,int,LPBYTE,int);
int ImageGetNumTracks(HIMAGE imagehandle);