Fixed bug with a 128 (in 128 mode) not booting.
Also added the option for a 128 to auto load FB128.
This commit is contained in:
parent
e7b477dbe3
commit
be5b1a0312
6 changed files with 74 additions and 2 deletions
|
@ -36,6 +36,9 @@ OnResetChangeToStartingFolder = 1
|
||||||
// If you use FB64 (CBMFileBrowser) and want to use a fast loader cartridge (AR6, EFL, FC3) to load it then use this option to autmatically mount it.
|
// If you use FB64 (CBMFileBrowser) and want to use a fast loader cartridge (AR6, EFL, FC3) to load it then use this option to autmatically mount it.
|
||||||
//AutoMountImage = fb.d64 // You MUST have a disk image in \1541 with this filename
|
//AutoMountImage = fb.d64 // You MUST have a disk image in \1541 with this filename
|
||||||
|
|
||||||
|
// If you are using a FB128 in 128 mode you can get FB128 to auto boot using this option
|
||||||
|
//AutoBootFB128 = 1
|
||||||
|
|
||||||
// If you would ever like to disable browse mode completely ypu can do so here
|
// If you would ever like to disable browse mode completely ypu can do so here
|
||||||
//DisableSD2IECCommands = 1
|
//DisableSD2IECCommands = 1
|
||||||
|
|
||||||
|
|
|
@ -235,6 +235,7 @@ IEC_Commands::IEC_Commands()
|
||||||
{
|
{
|
||||||
deviceID = 8;
|
deviceID = 8;
|
||||||
usingVIC20 = false;
|
usingVIC20 = false;
|
||||||
|
autoBootFB128 = false;
|
||||||
Reset();
|
Reset();
|
||||||
starFileName = 0;
|
starFileName = 0;
|
||||||
}
|
}
|
||||||
|
@ -1718,8 +1719,66 @@ void IEC_Commands::OpenFile()
|
||||||
Channel& channel = channels[secondary];
|
Channel& channel = channels[secondary];
|
||||||
if (channel.command[0] == '#')
|
if (channel.command[0] == '#')
|
||||||
{
|
{
|
||||||
|
Channel& channelCommand = channels[15];
|
||||||
|
|
||||||
// Direct acces is unsupported. Without a mounted disk image tracks and sectors have no meaning.
|
// Direct acces is unsupported. Without a mounted disk image tracks and sectors have no meaning.
|
||||||
//DEBUG_LOG("Driect access\r\n");
|
//DEBUG_LOG("Driect access\r\n");
|
||||||
|
if (strcmp((char*)channelCommand.buffer, "U1:13 0 01 00") == 0)
|
||||||
|
{
|
||||||
|
// This is a 128 trying to auto boot
|
||||||
|
memset(channel.buffer, 0, 256);
|
||||||
|
channel.cursor = 256;
|
||||||
|
|
||||||
|
if (autoBootFB128)
|
||||||
|
{
|
||||||
|
int index = 0;
|
||||||
|
channel.buffer[0] = 'C';
|
||||||
|
channel.buffer[1] = 'B';
|
||||||
|
channel.buffer[2] = 'M';
|
||||||
|
index += 3;
|
||||||
|
index += 4;
|
||||||
|
channel.buffer[index++] = 'P';
|
||||||
|
channel.buffer[index++] = 'I';
|
||||||
|
channel.buffer[index++] = '1';
|
||||||
|
channel.buffer[index++] = '5';
|
||||||
|
channel.buffer[index++] = '4';
|
||||||
|
channel.buffer[index++] = '1';
|
||||||
|
channel.buffer[index++] = ' ';
|
||||||
|
channel.buffer[index++] = 'F';
|
||||||
|
channel.buffer[index++] = 'B';
|
||||||
|
channel.buffer[index++] = '1';
|
||||||
|
channel.buffer[index++] = '2';
|
||||||
|
channel.buffer[index++] = '8';
|
||||||
|
index++;
|
||||||
|
channel.buffer[index++] = 'F';
|
||||||
|
channel.buffer[index++] = 'B';
|
||||||
|
channel.buffer[index++] = '1';
|
||||||
|
channel.buffer[index++] = '2';
|
||||||
|
channel.buffer[index++] = '8';
|
||||||
|
index++;
|
||||||
|
channel.buffer[index++] = 0xa2;
|
||||||
|
channel.buffer[index] = (index + 5);
|
||||||
|
index++;
|
||||||
|
channel.buffer[index++] = 0xa0;
|
||||||
|
channel.buffer[index++] = 0xb;
|
||||||
|
channel.buffer[index++] = 0x4c;
|
||||||
|
channel.buffer[index++] = 0xa5;
|
||||||
|
channel.buffer[index++] = 0xaf;
|
||||||
|
channel.buffer[index++] = 'R';
|
||||||
|
channel.buffer[index++] = 'U';
|
||||||
|
channel.buffer[index++] = 'N';
|
||||||
|
channel.buffer[index++] = '\"';
|
||||||
|
channel.buffer[index++] = 'F';
|
||||||
|
channel.buffer[index++] = 'B';
|
||||||
|
channel.buffer[index++] = '1';
|
||||||
|
channel.buffer[index++] = '2';
|
||||||
|
channel.buffer[index++] = '8';
|
||||||
|
channel.buffer[index++] = '\"';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (SendBuffer(channel, true))
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (channel.command[0] == '$')
|
else if (channel.command[0] == '$')
|
||||||
{
|
{
|
||||||
|
@ -1771,7 +1830,7 @@ void IEC_Commands::OpenFile()
|
||||||
{
|
{
|
||||||
if (strcasecmp(cwd, "/1541") == 0)
|
if (strcasecmp(cwd, "/1541") == 0)
|
||||||
{
|
{
|
||||||
DEBUG_LOG("use star %s\r\n", starFileName);
|
//DEBUG_LOG("use star %s\r\n", starFileName);
|
||||||
strncpy(filename, starFileName, sizeof(filename) - 1);
|
strncpy(filename, starFileName, sizeof(filename) - 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,6 +71,8 @@ public:
|
||||||
void SetDeviceId(u8 id) { deviceID = id; }
|
void SetDeviceId(u8 id) { deviceID = id; }
|
||||||
u8 GetDeviceId() { return deviceID; }
|
u8 GetDeviceId() { return deviceID; }
|
||||||
|
|
||||||
|
void SetAutoBootFB128(bool autoBootFB128) { this->autoBootFB128 = autoBootFB128; }
|
||||||
|
|
||||||
void Reset(void);
|
void Reset(void);
|
||||||
void SimulateIECBegin(void);
|
void SimulateIECBegin(void);
|
||||||
UpdateAction SimulateIECUpdate(void);
|
UpdateAction SimulateIECUpdate(void);
|
||||||
|
@ -157,6 +159,7 @@ protected:
|
||||||
bool receivedCommand : 1;
|
bool receivedCommand : 1;
|
||||||
bool receivedEOI : 1; // End Or Identify
|
bool receivedEOI : 1; // End Or Identify
|
||||||
bool usingVIC20 : 1; // When sending data we need to wait longer for the 64 as its VICII may be stealing its cycles. VIC20 does not have this problem and can accept data faster.
|
bool usingVIC20 : 1; // When sending data we need to wait longer for the 64 as its VICII may be stealing its cycles. VIC20 does not have this problem and can accept data faster.
|
||||||
|
bool autoBootFB128 : 1;
|
||||||
|
|
||||||
u8 deviceID;
|
u8 deviceID;
|
||||||
u8 secondaryAddress;
|
u8 secondaryAddress;
|
||||||
|
|
|
@ -46,7 +46,7 @@ extern "C"
|
||||||
#include "ssd_logo.h"
|
#include "ssd_logo.h"
|
||||||
|
|
||||||
unsigned versionMajor = 1;
|
unsigned versionMajor = 1;
|
||||||
unsigned versionMinor = 11;
|
unsigned versionMinor = 12;
|
||||||
|
|
||||||
// When the emulated CPU starts we execute the first million odd cycles in non-real-time (ie as fast as possible so the emulated 1541 becomes responsive to CBM-Browser asap)
|
// When the emulated CPU starts we execute the first million odd cycles in non-real-time (ie as fast as possible so the emulated 1541 becomes responsive to CBM-Browser asap)
|
||||||
// During these cycles the CPU is executing the ROM self test routines (these do not need to be cycle accurate)
|
// During these cycles the CPU is executing the ROM self test routines (these do not need to be cycle accurate)
|
||||||
|
@ -685,6 +685,8 @@ void emulator()
|
||||||
fileBrowser->DisplayRoot();
|
fileBrowser->DisplayRoot();
|
||||||
pi1541.Initialise();
|
pi1541.Initialise();
|
||||||
|
|
||||||
|
m_IEC_Commands.SetAutoBootFB128(options.AutoBootFB128());
|
||||||
|
|
||||||
emulating = false;
|
emulating = false;
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
|
|
|
@ -138,6 +138,7 @@ Options::Options(void)
|
||||||
, invertIECOutputs(1)
|
, invertIECOutputs(1)
|
||||||
, splitIECLines(0)
|
, splitIECLines(0)
|
||||||
, ignoreReset(0)
|
, ignoreReset(0)
|
||||||
|
, autoBootFB128(0)
|
||||||
, screenWidth(1024)
|
, screenWidth(1024)
|
||||||
, screenHeight(768)
|
, screenHeight(768)
|
||||||
, i2cBusMaster(1)
|
, i2cBusMaster(1)
|
||||||
|
@ -214,6 +215,7 @@ void Options::Process(char* buffer)
|
||||||
ELSE_CHECK_DECIMAL_OPTION(invertIECOutputs)
|
ELSE_CHECK_DECIMAL_OPTION(invertIECOutputs)
|
||||||
ELSE_CHECK_DECIMAL_OPTION(splitIECLines)
|
ELSE_CHECK_DECIMAL_OPTION(splitIECLines)
|
||||||
ELSE_CHECK_DECIMAL_OPTION(ignoreReset)
|
ELSE_CHECK_DECIMAL_OPTION(ignoreReset)
|
||||||
|
ELSE_CHECK_DECIMAL_OPTION(autoBootFB128)
|
||||||
ELSE_CHECK_DECIMAL_OPTION(screenWidth)
|
ELSE_CHECK_DECIMAL_OPTION(screenWidth)
|
||||||
ELSE_CHECK_DECIMAL_OPTION(screenHeight)
|
ELSE_CHECK_DECIMAL_OPTION(screenHeight)
|
||||||
ELSE_CHECK_DECIMAL_OPTION(i2cBusMaster)
|
ELSE_CHECK_DECIMAL_OPTION(i2cBusMaster)
|
||||||
|
|
|
@ -69,6 +69,8 @@ public:
|
||||||
inline unsigned int InvertIECOutputs() const { return invertIECOutputs; }
|
inline unsigned int InvertIECOutputs() const { return invertIECOutputs; }
|
||||||
inline unsigned int IgnoreReset() const { return ignoreReset; }
|
inline unsigned int IgnoreReset() const { return ignoreReset; }
|
||||||
|
|
||||||
|
inline unsigned int AutoBootFB128() const { return autoBootFB128; }
|
||||||
|
|
||||||
inline unsigned int ScreenWidth() const { return screenWidth; }
|
inline unsigned int ScreenWidth() const { return screenWidth; }
|
||||||
inline unsigned int ScreenHeight() const { return screenHeight; }
|
inline unsigned int ScreenHeight() const { return screenHeight; }
|
||||||
|
|
||||||
|
@ -114,6 +116,7 @@ private:
|
||||||
unsigned int invertIECOutputs;
|
unsigned int invertIECOutputs;
|
||||||
unsigned int splitIECLines;
|
unsigned int splitIECLines;
|
||||||
unsigned int ignoreReset;
|
unsigned int ignoreReset;
|
||||||
|
unsigned int autoBootFB128;
|
||||||
|
|
||||||
unsigned int screenWidth;
|
unsigned int screenWidth;
|
||||||
unsigned int screenHeight;
|
unsigned int screenHeight;
|
||||||
|
|
Loading…
Reference in a new issue