From 03d528ca5e8b60ad2898ff004aaa5b06b2dd6bba Mon Sep 17 00:00:00 2001 From: tomch Date: Tue, 24 Feb 2009 22:13:46 +0000 Subject: [PATCH] Fixed FLASHing 'S' in AppleII+ mode! Renamed: TRACKS -> TRACKS_MAX Added new var g_uNumTracksInImage - derived from disk image size Enabled Edit&Continue debugging in VS2005 vcproj --- AppleWin/Applewin.vcproj | 1 + AppleWin/resource/CHARSET4.BMP | Bin 24638 -> 24638 bytes AppleWin/source/Disk.cpp | 28 ++++++++++++++-------------- AppleWin/source/Disk.h | 6 ++++-- AppleWin/source/DiskImage.cpp | 33 +++++++++++++++++++++------------ 5 files changed, 40 insertions(+), 28 deletions(-) diff --git a/AppleWin/Applewin.vcproj b/AppleWin/Applewin.vcproj index e584023b..d0dca965 100644 --- a/AppleWin/Applewin.vcproj +++ b/AppleWin/Applewin.vcproj @@ -143,6 +143,7 @@ Optimization="0" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;HAS_M6803" RuntimeLibrary="1" + EnableFunctionLevelLinking="true" UsePrecompiledHeader="0" PrecompiledHeaderFile=".\Debug/Applewin.pch" AssemblerListingLocation=".\Debug/" diff --git a/AppleWin/resource/CHARSET4.BMP b/AppleWin/resource/CHARSET4.BMP index b449f1cfde4db50d404a2b1216a84ae2b82439ef..9bbe47f49c172edbc4cbdc1fead8294fd2aa375c 100644 GIT binary patch delta 28 kcmdmYfN|de#tC|?ObiSROdE|aiEMTa6=&ZpBctR30EbfuOaK4? delta 29 lcmdmYfN|de#tC|pwV8M}TAdbQte?y#D$n?Tvzn-cHvp%i3Gn~` diff --git a/AppleWin/source/Disk.cpp b/AppleWin/source/Disk.cpp index 79839d49..2427ee14 100644 --- a/AppleWin/source/Disk.cpp +++ b/AppleWin/source/Disk.cpp @@ -57,10 +57,9 @@ static BYTE __stdcall DiskSetWriteMode (WORD pc, WORD addr, BYTE bWrite, BYTE d, // Public _________________________________________________________________________________________ - BOOL enhancedisk = 1; - // dynamic array of strings - string DiskPathFilename[]; - bool bSaveDiskImage = true; + BOOL enhancedisk = 1; + string DiskPathFilename[]; // dynamic array of strings + UINT g_uNumTracksInImage = 0; // Private ________________________________________________________________________________________ @@ -84,13 +83,14 @@ static BYTE __stdcall DiskSetWriteMode (WORD pc, WORD addr, BYTE bWrite, BYTE d, int nibbles; }; -static WORD currdrive = 0; -static BOOL diskaccessed = 0; -static Disk_t g_aFloppyDisk[DRIVES]; -static BYTE floppylatch = 0; -static BOOL floppymotoron = 0; -static BOOL floppywritemode = 0; -static WORD phases; // state bits for stepper magnet phases 0 - 3 +static WORD currdrive = 0; +static BOOL diskaccessed = 0; +static Disk_t g_aFloppyDisk[DRIVES]; +static BYTE floppylatch = 0; +static BOOL floppymotoron = 0; +static BOOL floppywritemode = 0; +static WORD phases; // state bits for stepper magnet phases 0 - 3 +static bool bSaveDiskImage = true; static void CheckSpinning(); static Disk_Status_e GetDriveLightStatus( const int iDrive ); @@ -249,7 +249,7 @@ static void ReadTrack (int iDrive) Disk_t *pFloppy = &g_aFloppyDisk[ iDrive ]; - if (pFloppy->track >= TRACKS) + if (pFloppy->track >= (int)g_uNumTracksInImage) { pFloppy->trackimagedata = 0; return; @@ -308,7 +308,7 @@ static void WriteTrack (int iDrive) { Disk_t *pFloppy = &g_aFloppyDisk[ iDrive ]; - if (pFloppy->track >= TRACKS) + if (pFloppy->track >= (int)g_uNumTracksInImage) return; if (pFloppy->writeprotected) @@ -382,7 +382,7 @@ static BYTE __stdcall DiskControlStepper (WORD, WORD address, BYTE, BYTE, ULONG) if (direction) { fptr->phase = MAX(0, MIN(79, fptr->phase + direction)); - int newtrack = MIN(TRACKS-1, fptr->phase >> 1); // (round half tracks down) + int newtrack = MIN((int)g_uNumTracksInImage-1, fptr->phase >> 1); // (round half tracks down) LOG_DISK("newtrack %2X%s\r", newtrack, (fptr->phase & 1) ? ".5" : ""); if (newtrack != fptr->track) { diff --git a/AppleWin/source/Disk.h b/AppleWin/source/Disk.h index 2c7dfeb2..0b6a6b0b 100644 --- a/AppleWin/source/Disk.h +++ b/AppleWin/source/Disk.h @@ -6,10 +6,12 @@ #define DRIVES 2 #define TRACKS_STANDARD 35 #define TRACKS_EXTRA 5 // Allow up to a 40-track .dsk image (160KB) -#define TRACKS (TRACKS_STANDARD+TRACKS_EXTRA) +#define TRACKS_MAX (TRACKS_STANDARD+TRACKS_EXTRA) -extern BOOL enhancedisk; +extern BOOL enhancedisk; extern string DiskPathFilename[2]; +extern UINT g_uNumTracksInImage; + void DiskInitialize (); // DiskManagerStartup() void DiskDestroy (); // no, doesn't "destroy" the disk image. DiskManagerShutdown() diff --git a/AppleWin/source/DiskImage.cpp b/AppleWin/source/DiskImage.cpp index 1ea06cd2..1f1b38a3 100644 --- a/AppleWin/source/DiskImage.cpp +++ b/AppleWin/source/DiskImage.cpp @@ -44,7 +44,7 @@ typedef struct _imageinforec { BOOL writeprotected; DWORD headersize; LPBYTE header; - BOOL validtrack[TRACKS]; + BOOL validtrack[TRACKS_MAX]; } imageinforec, *imageinfoptr; typedef BOOL (*boottype )(imageinfoptr); @@ -426,22 +426,31 @@ DWORD AplDetect (LPBYTE imageptr, DWORD imagesize) { static bool IsValidImageSize(DWORD uImageSize) { - if ((TRACKS>TRACKS_STANDARD) && (uImageSize > TRACKS*TRACK_DENIBBLIZED_SIZE)) + g_uNumTracksInImage = 0; + + if ((TRACKS_MAX>TRACKS_STANDARD) && (uImageSize > TRACKS_MAX*TRACK_DENIBBLIZED_SIZE)) return false; // >160KB + // + + bool bValidSize = false; + if (uImageSize >= TRACKS_STANDARD*TRACK_DENIBBLIZED_SIZE) { // Is uImageSize == 140KB + n*4K? - const bool bStandardSize = (((uImageSize - TRACKS_STANDARD*TRACK_DENIBBLIZED_SIZE) % TRACK_DENIBBLIZED_SIZE) == 0); - if (bStandardSize) - return true; + bValidSize = (((uImageSize - TRACKS_STANDARD*TRACK_DENIBBLIZED_SIZE) % TRACK_DENIBBLIZED_SIZE) == 0); + } + else + { + bValidSize = ( ((uImageSize >= 143105) && (uImageSize <= 143364)) || + (uImageSize == 143403) || + (uImageSize == 143488) ); } - const bool bInvalidSize = ( ((uImageSize < 143105) || (uImageSize > 143364)) && - (uImageSize != 143403) && - (uImageSize != 143488) ); + if (bValidSize) + g_uNumTracksInImage = uImageSize / TRACK_DENIBBLIZED_SIZE; - return !bInvalidSize; + return bValidSize; } /**************************************************************************** @@ -732,11 +741,11 @@ BOOL ImageBoot (HIMAGE imagehandle) { } //=========================================================================== -void ImageClose (HIMAGE imagehandle) { +void ImageClose (HIMAGE imagehandle){ imageinfoptr ptr = (imageinfoptr)imagehandle; if (ptr->file != INVALID_HANDLE_VALUE) CloseHandle(ptr->file); - for (int track = 0; track < TRACKS; track++) + for (UINT track = 0; track < g_uNumTracksInImage; track++) if (!ptr->validtrack[track]) { DeleteFile(ptr->filename); break; @@ -906,7 +915,7 @@ int ImageOpen (LPCTSTR imagefilename, ((imageinfoptr)*hDiskImage_)->offset = pImage-view; ((imageinfoptr)*hDiskImage_)->writeprotected = *pWriteProtected_; - for (int track = 0; track < TRACKS; track++) + for (UINT track = 0; track < g_uNumTracksInImage; track++) ((imageinfoptr)*hDiskImage_)->validtrack[track] = (size > 0); return IMAGE_ERROR_NONE; // HACK: MAGIC # 0