mirror of
https://github.com/AppleWin/AppleWin.git
synced 2025-03-12 05:33:41 +00:00
Fix: Nick's disappearing disk bug
Fix: Cmd-line switches for inserting disks
This commit is contained in:
parent
51cb37a850
commit
41b90361fd
@ -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
|
||||
|
@ -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};
|
||||
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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()
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user