Merge pull request #62 from penfold42/inputcleanup
PopDir highlight previous selection, Insert directory, Alt-L to create LST + Code cleanup
This commit is contained in:
commit
9b902f19bf
5 changed files with 342 additions and 285 deletions
|
@ -22,7 +22,6 @@
|
||||||
#include <strings.h>
|
#include <strings.h>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "Keyboard.h"
|
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
#include "InputMappings.h"
|
#include "InputMappings.h"
|
||||||
#include "stb_image.h"
|
#include "stb_image.h"
|
||||||
|
@ -375,23 +374,17 @@ bool FileBrowser::BrowsableList::CheckBrowseNavigation()
|
||||||
}
|
}
|
||||||
|
|
||||||
// check for keys a-z and 0-9
|
// check for keys a-z and 0-9
|
||||||
char searchChar = 0;
|
char searchChar = inputMappings->getKeyboardNumLetter();
|
||||||
if (inputMappings->BrowseLetter())
|
|
||||||
searchChar = inputMappings->getKeyboardLetter();
|
|
||||||
if (inputMappings->BrowseNumber())
|
|
||||||
searchChar = inputMappings->getKeyboardNumber();
|
|
||||||
if (searchChar)
|
if (searchChar)
|
||||||
{
|
{
|
||||||
char temp[8];
|
|
||||||
unsigned found=0;
|
unsigned found=0;
|
||||||
u32 i=0;
|
u32 i=0;
|
||||||
snprintf (temp, sizeof(temp), "%c", searchChar);
|
|
||||||
|
|
||||||
// first look from next to last
|
// first look from next to last
|
||||||
for (i=1+currentIndex; i <= numberOfEntriesMinus1 ; i++)
|
for (i=1+currentIndex; i <= numberOfEntriesMinus1 ; i++)
|
||||||
{
|
{
|
||||||
FileBrowser::BrowsableList::Entry* entry = &entries[i];
|
FileBrowser::BrowsableList::Entry* entry = &entries[i];
|
||||||
if (strncasecmp(temp, entry->filImage.fname, 1) == 0)
|
if (strncasecmp(&searchChar, entry->filImage.fname, 1) == 0)
|
||||||
{
|
{
|
||||||
found=i;
|
found=i;
|
||||||
break;
|
break;
|
||||||
|
@ -403,7 +396,7 @@ bool FileBrowser::BrowsableList::CheckBrowseNavigation()
|
||||||
for (i=0; i< 1+currentIndex ; i++)
|
for (i=0; i< 1+currentIndex ; i++)
|
||||||
{
|
{
|
||||||
FileBrowser::BrowsableList::Entry* entry = &entries[i];
|
FileBrowser::BrowsableList::Entry* entry = &entries[i];
|
||||||
if (strncasecmp(temp, entry->filImage.fname, 1) == 0)
|
if (strncasecmp(&searchChar, entry->filImage.fname, 1) == 0)
|
||||||
{
|
{
|
||||||
found=i;
|
found=i;
|
||||||
break;
|
break;
|
||||||
|
@ -454,7 +447,6 @@ FileBrowser::FileBrowser(DiskCaddy* diskCaddy, ROMs* roms, u8* deviceID, bool di
|
||||||
, roms(roms)
|
, roms(roms)
|
||||||
, deviceID(deviceID)
|
, deviceID(deviceID)
|
||||||
, displayPNGIcons(displayPNGIcons)
|
, displayPNGIcons(displayPNGIcons)
|
||||||
, buttonChangedROMDevice(false)
|
|
||||||
, screenMain(screenMain)
|
, screenMain(screenMain)
|
||||||
, screenLCD(screenLCD)
|
, screenLCD(screenLCD)
|
||||||
, scrollHighlightRate(scrollHighlightRate)
|
, scrollHighlightRate(scrollHighlightRate)
|
||||||
|
@ -764,18 +756,44 @@ void FileBrowser::DisplayPNG()
|
||||||
|
|
||||||
void FileBrowser::PopFolder()
|
void FileBrowser::PopFolder()
|
||||||
{
|
{
|
||||||
|
char buffer[1024];
|
||||||
|
if (f_getcwd(buffer, 1024) == FR_OK)
|
||||||
|
{
|
||||||
|
// find the last '/' of the current dir
|
||||||
|
char *last_ptr = 0;
|
||||||
|
char *ptr = strtok(buffer, "/");
|
||||||
|
while (ptr != NULL)
|
||||||
|
{
|
||||||
|
last_ptr = ptr;
|
||||||
|
ptr = strtok(NULL, "/");
|
||||||
|
}
|
||||||
|
|
||||||
f_chdir("..");
|
f_chdir("..");
|
||||||
//{
|
|
||||||
// char buffer[1024];
|
|
||||||
// if (f_getcwd(buffer, 1024) == FR_OK)
|
|
||||||
// {
|
|
||||||
// DEBUG_LOG("CWD = %s\r\n", buffer);
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
RefreshFolderEntries();
|
RefreshFolderEntries();
|
||||||
caddySelections.Clear();
|
caddySelections.Clear();
|
||||||
|
|
||||||
|
unsigned found=0;
|
||||||
|
if (last_ptr)
|
||||||
|
{
|
||||||
|
u32 numberOfEntriesMinus1 = folder.entries.size() - 1;
|
||||||
|
for (unsigned i=0; i <= numberOfEntriesMinus1 ; i++)
|
||||||
|
{
|
||||||
|
FileBrowser::BrowsableList::Entry* entry = &folder.entries[i];
|
||||||
|
if (strcmp(last_ptr, entry->filImage.fname) == 0)
|
||||||
|
{
|
||||||
|
found=i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (found)
|
||||||
|
{
|
||||||
|
folder.currentIndex=found;
|
||||||
|
folder.SetCurrent();
|
||||||
|
}
|
||||||
RefeshDisplay();
|
RefeshDisplay();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void FileBrowser::UpdateCurrentHighlight()
|
void FileBrowser::UpdateCurrentHighlight()
|
||||||
{
|
{
|
||||||
|
@ -824,21 +842,9 @@ void FileBrowser::UpdateCurrentHighlight()
|
||||||
void FileBrowser::Update()
|
void FileBrowser::Update()
|
||||||
{
|
{
|
||||||
InputMappings* inputMappings = InputMappings::Instance();
|
InputMappings* inputMappings = InputMappings::Instance();
|
||||||
Keyboard* keyboard = Keyboard::Instance();
|
|
||||||
bool dirty = false;
|
|
||||||
|
|
||||||
if (keyboard->CheckChanged())
|
if ( inputMappings->CheckKeyboardBrowseMode() || inputMappings->CheckButtonsBrowseMode() )
|
||||||
dirty = inputMappings->CheckKeyboardBrowseMode();
|
|
||||||
else
|
|
||||||
dirty = inputMappings->CheckButtonsBrowseMode();
|
|
||||||
|
|
||||||
if (dirty)
|
|
||||||
{
|
|
||||||
//if (state == State_Folders)
|
|
||||||
UpdateInputFolders();
|
UpdateInputFolders();
|
||||||
//else
|
|
||||||
// UpdateInputDiskCaddy();
|
|
||||||
}
|
|
||||||
|
|
||||||
UpdateCurrentHighlight();
|
UpdateCurrentHighlight();
|
||||||
}
|
}
|
||||||
|
@ -862,6 +868,35 @@ bool FileBrowser::FillCaddyWithSelections()
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FileBrowser::AddToCaddy(FileBrowser::BrowsableList::Entry* current)
|
bool FileBrowser::AddToCaddy(FileBrowser::BrowsableList::Entry* current)
|
||||||
|
{
|
||||||
|
if (!current) return false;
|
||||||
|
|
||||||
|
else if (!(current->filImage.fattrib & AM_DIR) && DiskImage::IsDiskImageExtention(current->filImage.fname))
|
||||||
|
{
|
||||||
|
return AddImageToCaddy(current);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if ( (current->filImage.fattrib & AM_DIR) && ( strcmp(current->filImage.fname, "..") != 0) )
|
||||||
|
{
|
||||||
|
bool ret = false;
|
||||||
|
f_chdir(current->filImage.fname);
|
||||||
|
RefreshFolderEntries();
|
||||||
|
RefeshDisplay();
|
||||||
|
|
||||||
|
for (unsigned i = 0; i < folder.entries.size(); ++i)
|
||||||
|
ret |= AddImageToCaddy(&folder.entries[i]);
|
||||||
|
|
||||||
|
folder.currentIndex = folder.entries.size() - 1;
|
||||||
|
folder.SetCurrent();
|
||||||
|
|
||||||
|
RefeshDisplay();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FileBrowser::AddImageToCaddy(FileBrowser::BrowsableList::Entry* current)
|
||||||
{
|
{
|
||||||
bool added = false;
|
bool added = false;
|
||||||
|
|
||||||
|
@ -889,64 +924,17 @@ bool FileBrowser::AddToCaddy(FileBrowser::BrowsableList::Entry* current)
|
||||||
|
|
||||||
void FileBrowser::UpdateInputFolders()
|
void FileBrowser::UpdateInputFolders()
|
||||||
{
|
{
|
||||||
Keyboard* keyboard = Keyboard::Instance();
|
|
||||||
InputMappings* inputMappings = InputMappings::Instance();
|
InputMappings* inputMappings = InputMappings::Instance();
|
||||||
|
|
||||||
buttonChangedROMDevice = false;
|
|
||||||
if (IEC_Bus::GetInputButtonHeld(4))
|
|
||||||
{
|
|
||||||
if (inputMappings->BrowseSelect())
|
|
||||||
{
|
|
||||||
SelectROMOrDevice(8); // == device 8
|
|
||||||
buttonChangedROMDevice = true;
|
|
||||||
}
|
|
||||||
else if (inputMappings->BrowseUp())
|
|
||||||
{
|
|
||||||
SelectROMOrDevice(9); // == device 9
|
|
||||||
buttonChangedROMDevice = true;
|
|
||||||
}
|
|
||||||
else if (inputMappings->BrowseDown())
|
|
||||||
{
|
|
||||||
SelectROMOrDevice(10); // == device 10
|
|
||||||
buttonChangedROMDevice = true;
|
|
||||||
}
|
|
||||||
else if (inputMappings->BrowseBack())
|
|
||||||
{
|
|
||||||
SelectROMOrDevice(11); // == device 11
|
|
||||||
buttonChangedROMDevice = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (IEC_Bus::GetInputButtonHeld(0))
|
|
||||||
{
|
|
||||||
if (inputMappings->BrowseUp())
|
|
||||||
{
|
|
||||||
SelectROMOrDevice(1);
|
|
||||||
buttonChangedROMDevice = true;
|
|
||||||
}
|
|
||||||
else if (inputMappings->BrowseDown())
|
|
||||||
{
|
|
||||||
SelectROMOrDevice(2);
|
|
||||||
buttonChangedROMDevice = true;
|
|
||||||
}
|
|
||||||
else if (inputMappings->BrowseBack())
|
|
||||||
{
|
|
||||||
SelectROMOrDevice(3);
|
|
||||||
buttonChangedROMDevice = true;
|
|
||||||
}
|
|
||||||
else if (inputMappings->BrowseInsert())
|
|
||||||
{
|
|
||||||
SelectROMOrDevice(4);
|
|
||||||
buttonChangedROMDevice = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (folder.entries.size() > 0)
|
|
||||||
{
|
|
||||||
//u32 numberOfEntriesMinus1 = folder.entries.size() - 1;
|
|
||||||
bool dirty = false;
|
bool dirty = false;
|
||||||
|
|
||||||
if (inputMappings->BrowseSelect() && !buttonChangedROMDevice )
|
if (inputMappings->BrowseFunction())
|
||||||
|
{
|
||||||
|
// check for ROM and Drive Number changes
|
||||||
|
unsigned ROMOrDevice = inputMappings->getROMOrDevice();
|
||||||
|
if ( ROMOrDevice >= 1 && ROMOrDevice <= 11 )
|
||||||
|
SelectROMOrDevice(ROMOrDevice);
|
||||||
|
}
|
||||||
|
else if (inputMappings->BrowseSelect())
|
||||||
{
|
{
|
||||||
FileBrowser::BrowsableList::Entry* current = folder.current;
|
FileBrowser::BrowsableList::Entry* current = folder.current;
|
||||||
if (current)
|
if (current)
|
||||||
|
@ -964,13 +952,9 @@ void FileBrowser::UpdateInputFolders()
|
||||||
}
|
}
|
||||||
dirty = true;
|
dirty = true;
|
||||||
}
|
}
|
||||||
else
|
else // not a directory
|
||||||
{
|
{
|
||||||
if (strcmp(current->filImage.fname, "..") == 0)
|
if (DiskImage::IsDiskImageExtention(current->filImage.fname))
|
||||||
{
|
|
||||||
PopFolder();
|
|
||||||
}
|
|
||||||
else if (DiskImage::IsDiskImageExtention(current->filImage.fname))
|
|
||||||
{
|
{
|
||||||
DiskImage::DiskType diskType = DiskImage::GetDiskImageTypeViaExtention(current->filImage.fname);
|
DiskImage::DiskType diskType = DiskImage::GetDiskImageTypeViaExtention(current->filImage.fname);
|
||||||
|
|
||||||
|
@ -998,11 +982,6 @@ void FileBrowser::UpdateInputFolders()
|
||||||
{
|
{
|
||||||
selectionsMade = FillCaddyWithSelections();
|
selectionsMade = FillCaddyWithSelections();
|
||||||
}
|
}
|
||||||
//else if (keyboard->KeyPressed(KEY_TAB))
|
|
||||||
//{
|
|
||||||
// state = State_DiskCaddy;
|
|
||||||
// dirty = true;
|
|
||||||
//}
|
|
||||||
else if (inputMappings->BrowseBack())
|
else if (inputMappings->BrowseBack())
|
||||||
{
|
{
|
||||||
PopFolder();
|
PopFolder();
|
||||||
|
@ -1013,7 +992,7 @@ void FileBrowser::UpdateInputFolders()
|
||||||
ClearSelections();
|
ClearSelections();
|
||||||
dirty = true;
|
dirty = true;
|
||||||
}
|
}
|
||||||
else if (inputMappings->BrowseInsert() && !buttonChangedROMDevice )
|
else if (inputMappings->BrowseInsert())
|
||||||
{
|
{
|
||||||
FileBrowser::BrowsableList::Entry* current = folder.current;
|
FileBrowser::BrowsableList::Entry* current = folder.current;
|
||||||
if (current)
|
if (current)
|
||||||
|
@ -1047,33 +1026,34 @@ void FileBrowser::UpdateInputFolders()
|
||||||
dirty = true;
|
dirty = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (inputMappings->BrowseAutoLoad())
|
||||||
|
{
|
||||||
|
CheckAutoMountImage(EXIT_RESET, this);
|
||||||
|
}
|
||||||
|
else if (inputMappings->MakeLSTFile())
|
||||||
|
{
|
||||||
|
MakeLST("autoswap.lst");
|
||||||
|
FolderChanged();
|
||||||
|
FileBrowser::BrowsableList::Entry* current = 0;
|
||||||
|
for (unsigned index = 0; index < folder.entries.size(); ++index)
|
||||||
|
{
|
||||||
|
current = &folder.entries[index];
|
||||||
|
if (strcasecmp(current->filImage.fname, "autoswap.lst") == 0)
|
||||||
|
{
|
||||||
|
folder.currentIndex = index;
|
||||||
|
folder.SetCurrent();
|
||||||
|
dirty=true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// check for number keys for ROM and Drive Number changes
|
|
||||||
if (inputMappings->BrowseFunction()
|
|
||||||
&& inputMappings->getKeyboardFunction() >= 1
|
|
||||||
&& inputMappings->getKeyboardFunction() <= 11 )
|
|
||||||
{
|
|
||||||
SelectROMOrDevice(inputMappings->getKeyboardFunction());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
dirty = folder.CheckBrowseNavigation();
|
dirty = folder.CheckBrowseNavigation();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dirty) RefeshDisplay();
|
if (dirty) RefeshDisplay();
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
if (inputMappings->BrowseBack())
|
|
||||||
PopFolder();
|
|
||||||
}
|
|
||||||
if (inputMappings->BrowseAutoLoad())
|
|
||||||
{
|
|
||||||
CheckAutoMountImage(EXIT_RESET, this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool FileBrowser::SelectROMOrDevice(u32 index)
|
bool FileBrowser::SelectROMOrDevice(u32 index)
|
||||||
// 1-7 select ROM image
|
// 1-7 select ROM image
|
||||||
|
@ -1098,6 +1078,42 @@ bool FileBrowser::SelectROMOrDevice(u32 index)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool FileBrowser::MakeLST(const char* filenameLST)
|
||||||
|
{
|
||||||
|
bool retcode=true;
|
||||||
|
FIL fp;
|
||||||
|
FRESULT res;
|
||||||
|
res = f_open(&fp, filenameLST, FA_CREATE_ALWAYS | FA_WRITE);
|
||||||
|
if (res == FR_OK)
|
||||||
|
{
|
||||||
|
FileBrowser::BrowsableList::Entry* entry = 0;
|
||||||
|
u32 bytes;
|
||||||
|
|
||||||
|
for (unsigned index = 0; index < folder.entries.size(); ++index)
|
||||||
|
{
|
||||||
|
entry = &folder.entries[index];
|
||||||
|
if (entry->filImage.fattrib & AM_DIR)
|
||||||
|
continue; // skip dirs
|
||||||
|
|
||||||
|
if ( DiskImage::IsDiskImageExtention(entry->filImage.fname)
|
||||||
|
&& !DiskImage::IsLSTExtention(entry->filImage.fname) )
|
||||||
|
{
|
||||||
|
f_write(&fp,
|
||||||
|
entry->filImage.fname,
|
||||||
|
strlen(entry->filImage.fname),
|
||||||
|
&bytes);
|
||||||
|
f_write(&fp, "\r\n", 2, &bytes);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
f_close(&fp);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
retcode=false;
|
||||||
|
|
||||||
|
return retcode;
|
||||||
|
}
|
||||||
|
|
||||||
bool FileBrowser::SelectLST(const char* filenameLST)
|
bool FileBrowser::SelectLST(const char* filenameLST)
|
||||||
{
|
{
|
||||||
bool validImage = false;
|
bool validImage = false;
|
||||||
|
@ -1145,11 +1161,11 @@ bool FileBrowser::SelectLST(const char* filenameLST)
|
||||||
return validImage;
|
return validImage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
// Not used
|
// Not used
|
||||||
void FileBrowser::UpdateInputDiskCaddy()
|
void FileBrowser::UpdateInputDiskCaddy()
|
||||||
{
|
{
|
||||||
bool dirty = false;
|
bool dirty = false;
|
||||||
Keyboard* keyboard = Keyboard::Instance();
|
|
||||||
|
|
||||||
if (keyboard->KeyPressed(KEY_DELETE))
|
if (keyboard->KeyPressed(KEY_DELETE))
|
||||||
{
|
{
|
||||||
|
@ -1171,6 +1187,7 @@ void FileBrowser::UpdateInputDiskCaddy()
|
||||||
|
|
||||||
if (dirty) RefeshDisplay();
|
if (dirty) RefeshDisplay();
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
void FileBrowser::DisplayStatusBar()
|
void FileBrowser::DisplayStatusBar()
|
||||||
{
|
{
|
||||||
|
|
|
@ -193,6 +193,7 @@ public:
|
||||||
|
|
||||||
static u32 Colour(int index);
|
static u32 Colour(int index);
|
||||||
|
|
||||||
|
bool MakeLST(const char* filenameLST);
|
||||||
bool SelectLST(const char* filenameLST);
|
bool SelectLST(const char* filenameLST);
|
||||||
|
|
||||||
void SetScrollHighlightRate(float value) { scrollHighlightRate = value; }
|
void SetScrollHighlightRate(float value) { scrollHighlightRate = value; }
|
||||||
|
@ -211,6 +212,7 @@ private:
|
||||||
bool FillCaddyWithSelections();
|
bool FillCaddyWithSelections();
|
||||||
|
|
||||||
bool AddToCaddy(FileBrowser::BrowsableList::Entry* current);
|
bool AddToCaddy(FileBrowser::BrowsableList::Entry* current);
|
||||||
|
bool AddImageToCaddy(FileBrowser::BrowsableList::Entry* current);
|
||||||
|
|
||||||
bool CheckForPNG(const char* filename, FILINFO& filIcon);
|
bool CheckForPNG(const char* filename, FILINFO& filIcon);
|
||||||
void DisplayPNG();
|
void DisplayPNG();
|
||||||
|
|
|
@ -44,18 +44,61 @@ InputMappings::InputMappings()
|
||||||
bool InputMappings::CheckButtonsBrowseMode()
|
bool InputMappings::CheckButtonsBrowseMode()
|
||||||
{
|
{
|
||||||
buttonFlags = 0;
|
buttonFlags = 0;
|
||||||
//if (IEC_Bus::GetInputButtonPressed(0))
|
|
||||||
// SetButtonFlag(ENTER_FLAG);
|
|
||||||
//else
|
|
||||||
if (IEC_Bus::GetInputButtonRepeating(1))
|
|
||||||
SetButtonFlag(UP_FLAG);
|
|
||||||
else if (IEC_Bus::GetInputButtonRepeating(2))
|
|
||||||
SetButtonFlag(DOWN_FLAG);
|
|
||||||
else if (IEC_Bus::GetInputButtonPressed(3))
|
|
||||||
SetButtonFlag(BACK_FLAG);
|
|
||||||
//else if (IEC_Bus::GetInputButtonPressed(4))
|
|
||||||
// SetButtonFlag(INSERT_FLAG);
|
|
||||||
|
|
||||||
|
if (IEC_Bus::GetInputButtonHeld(INPUT_BUTTON_INSERT)) // Change DeviceID
|
||||||
|
{
|
||||||
|
if (IEC_Bus::GetInputButtonRepeating(INPUT_BUTTON_ENTER))
|
||||||
|
{
|
||||||
|
SetButtonFlag(FUNCTION_FLAG);
|
||||||
|
inputROMOrDevice = 8;
|
||||||
|
}
|
||||||
|
else if (IEC_Bus::GetInputButtonRepeating(INPUT_BUTTON_UP))
|
||||||
|
{
|
||||||
|
SetButtonFlag(FUNCTION_FLAG);
|
||||||
|
inputROMOrDevice = 9;
|
||||||
|
}
|
||||||
|
else if (IEC_Bus::GetInputButtonRepeating(INPUT_BUTTON_DOWN))
|
||||||
|
{
|
||||||
|
SetButtonFlag(FUNCTION_FLAG);
|
||||||
|
inputROMOrDevice = 10;
|
||||||
|
}
|
||||||
|
else if (IEC_Bus::GetInputButtonRepeating(INPUT_BUTTON_BACK))
|
||||||
|
{
|
||||||
|
SetButtonFlag(FUNCTION_FLAG);
|
||||||
|
inputROMOrDevice = 11;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (IEC_Bus::GetInputButtonHeld(INPUT_BUTTON_ENTER)) // Change ROMs
|
||||||
|
{
|
||||||
|
if (IEC_Bus::GetInputButtonRepeating(INPUT_BUTTON_UP))
|
||||||
|
{
|
||||||
|
SetButtonFlag(FUNCTION_FLAG);
|
||||||
|
inputROMOrDevice = 1;
|
||||||
|
}
|
||||||
|
else if (IEC_Bus::GetInputButtonRepeating(INPUT_BUTTON_DOWN))
|
||||||
|
{
|
||||||
|
SetButtonFlag(FUNCTION_FLAG);
|
||||||
|
inputROMOrDevice = 2;
|
||||||
|
}
|
||||||
|
else if (IEC_Bus::GetInputButtonRepeating(INPUT_BUTTON_BACK))
|
||||||
|
{
|
||||||
|
SetButtonFlag(FUNCTION_FLAG);
|
||||||
|
inputROMOrDevice = 3;
|
||||||
|
}
|
||||||
|
else if (IEC_Bus::GetInputButtonRepeating(INPUT_BUTTON_INSERT))
|
||||||
|
{
|
||||||
|
SetButtonFlag(FUNCTION_FLAG);
|
||||||
|
inputROMOrDevice = 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (IEC_Bus::GetInputButtonRepeating(INPUT_BUTTON_UP))
|
||||||
|
SetButtonFlag(UP_FLAG);
|
||||||
|
else if (IEC_Bus::GetInputButtonRepeating(INPUT_BUTTON_DOWN))
|
||||||
|
SetButtonFlag(DOWN_FLAG);
|
||||||
|
else if (IEC_Bus::GetInputButtonPressed(INPUT_BUTTON_BACK))
|
||||||
|
SetButtonFlag(BACK_FLAG);
|
||||||
|
|
||||||
|
// edge detection
|
||||||
insertButtonPressed = !IEC_Bus::GetInputButtonReleased(4);
|
insertButtonPressed = !IEC_Bus::GetInputButtonReleased(4);
|
||||||
if (insertButtonPressedPrev && !insertButtonPressed)
|
if (insertButtonPressedPrev && !insertButtonPressed)
|
||||||
SetButtonFlag(INSERT_FLAG);
|
SetButtonFlag(INSERT_FLAG);
|
||||||
|
@ -73,14 +116,16 @@ void InputMappings::CheckButtonsEmulationMode()
|
||||||
{
|
{
|
||||||
buttonFlags = 0;
|
buttonFlags = 0;
|
||||||
|
|
||||||
if (IEC_Bus::GetInputButtonPressed(0))
|
if (IEC_Bus::GetInputButtonPressed(INPUT_BUTTON_ENTER))
|
||||||
SetButtonFlag(ESC_FLAG);
|
SetButtonFlag(ESC_FLAG);
|
||||||
else if (IEC_Bus::GetInputButtonPressed(1))
|
else if (IEC_Bus::GetInputButtonPressed(INPUT_BUTTON_UP))
|
||||||
SetButtonFlag(NEXT_FLAG);
|
SetButtonFlag(NEXT_FLAG);
|
||||||
else if (IEC_Bus::GetInputButtonPressed(2))
|
else if (IEC_Bus::GetInputButtonPressed(INPUT_BUTTON_DOWN))
|
||||||
SetButtonFlag(PREV_FLAG);
|
SetButtonFlag(PREV_FLAG);
|
||||||
//else if (IEC_Bus::GetInputButtonPressed(3))
|
//else if (IEC_Bus::GetInputButtonPressed(INPUT_BUTTON_BACK))
|
||||||
// SetButtonFlag(BACK_FLAG);
|
// SetButtonFlag(BACK_FLAG);
|
||||||
|
//else if (IEC_Bus::GetInputButtonPressed(INPUT_BUTTON_INSERT))
|
||||||
|
// SetButtonFlag(INSERT_FLAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -152,6 +197,11 @@ bool InputMappings::CheckKeyboardBrowseMode()
|
||||||
Keyboard* keyboard = Keyboard::Instance();
|
Keyboard* keyboard = Keyboard::Instance();
|
||||||
|
|
||||||
keyboardFlags = 0;
|
keyboardFlags = 0;
|
||||||
|
keyboardNumLetter = 0;
|
||||||
|
if (!keyboard->CheckChanged())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (keyboard->KeyHeld(KEY_DELETE) && keyboard->KeyLCtrlAlt() )
|
if (keyboard->KeyHeld(KEY_DELETE) && keyboard->KeyLCtrlAlt() )
|
||||||
reboot_now();
|
reboot_now();
|
||||||
|
@ -196,36 +246,30 @@ bool InputMappings::CheckKeyboardBrowseMode()
|
||||||
SetKeyboardFlag(FAKERESET_FLAG);
|
SetKeyboardFlag(FAKERESET_FLAG);
|
||||||
else if (keyboard->KeyHeld(KEY_W) && keyboard->KeyEitherAlt() )
|
else if (keyboard->KeyHeld(KEY_W) && keyboard->KeyEitherAlt() )
|
||||||
SetKeyboardFlag(WRITEPROTECT_FLAG);
|
SetKeyboardFlag(WRITEPROTECT_FLAG);
|
||||||
|
else if (keyboard->KeyHeld(KEY_L) && keyboard->KeyEitherAlt() )
|
||||||
|
SetKeyboardFlag(MAKELST_FLAG);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (keyboard->KeyNoModifiers())
|
if (keyboard->KeyNoModifiers())
|
||||||
{
|
{
|
||||||
unsigned index;
|
unsigned index;
|
||||||
|
|
||||||
for (index = KEY_1; index <= KEY_0; ++index)
|
for (index = 0; index <= 9; ++index)
|
||||||
{
|
{
|
||||||
if (keyboard->KeyHeld(index))
|
if (keyboard->KeyHeld(KEY_1+index) || keyboard->KeyHeld(KEY_KP1+index))
|
||||||
{
|
{
|
||||||
SetKeyboardFlag(NUMBER_FLAG);
|
SetKeyboardFlag(NUMLET_FLAG);
|
||||||
keyboardNumber = index-KEY_1+'1'; // key 1 is ascii '1'
|
keyboardNumLetter = index+'1'; // key 1 is ascii '1'
|
||||||
if (keyboardNumber > '9') keyboardNumber = '0';
|
if (keyboardNumLetter > '9') keyboardNumLetter = '0';
|
||||||
}
|
|
||||||
}
|
|
||||||
for (index = KEY_KP1; index <= KEY_KP0; ++index)
|
|
||||||
{
|
|
||||||
if (keyboard->KeyHeld(index))
|
|
||||||
{
|
|
||||||
SetKeyboardFlag(NUMBER_FLAG);
|
|
||||||
keyboardNumber = index-KEY_KP1+'1'; // key 1 is ascii '1'
|
|
||||||
if (keyboardNumber > '9') keyboardNumber = '0';
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (index = KEY_A; index <= KEY_Z; ++index)
|
for (index = KEY_A; index <= KEY_Z; ++index)
|
||||||
{
|
{
|
||||||
if (keyboard->KeyHeld(index))
|
if (keyboard->KeyHeld(index))
|
||||||
{
|
{
|
||||||
SetKeyboardFlag(LETTER_FLAG);
|
SetKeyboardFlag(NUMLET_FLAG);
|
||||||
keyboardLetter = index-KEY_A+'A'; // key A is ascii 'A'
|
keyboardNumLetter = index-KEY_A+'A'; // key A is ascii 'A'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (index = KEY_F1; index <= KEY_F12; ++index) // F13 isnt contiguous
|
for (index = KEY_F1; index <= KEY_F12; ++index) // F13 isnt contiguous
|
||||||
|
@ -233,7 +277,7 @@ bool InputMappings::CheckKeyboardBrowseMode()
|
||||||
if (keyboard->KeyHeld(index))
|
if (keyboard->KeyHeld(index))
|
||||||
{
|
{
|
||||||
SetKeyboardFlag(FUNCTION_FLAG);
|
SetKeyboardFlag(FUNCTION_FLAG);
|
||||||
keyboardFunction = index-KEY_F1+1; // key F1 is 1
|
inputROMOrDevice = index-KEY_F1+1; // key F1 is 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -247,8 +291,8 @@ void InputMappings::CheckKeyboardEmulationMode(unsigned numberOfImages, unsigned
|
||||||
Keyboard* keyboard = Keyboard::Instance();
|
Keyboard* keyboard = Keyboard::Instance();
|
||||||
|
|
||||||
keyboardFlags = 0;
|
keyboardFlags = 0;
|
||||||
if (keyboard->CheckChanged())
|
if (!keyboard->CheckChanged())
|
||||||
{
|
return;
|
||||||
|
|
||||||
if (keyboard->KeyHeld(KEY_DELETE) && keyboard->KeyLCtrlAlt() )
|
if (keyboard->KeyHeld(KEY_DELETE) && keyboard->KeyLCtrlAlt() )
|
||||||
reboot_now();
|
reboot_now();
|
||||||
|
@ -266,13 +310,12 @@ void InputMappings::CheckKeyboardEmulationMode(unsigned numberOfImages, unsigned
|
||||||
else if (numberOfImages > 1)
|
else if (numberOfImages > 1)
|
||||||
{
|
{
|
||||||
unsigned index;
|
unsigned index;
|
||||||
for (index = 0; index < sizeof(NumberKeys)/sizeof(NumberKeys[0]); index+=3)
|
for (index = 0; index < 10; index++)
|
||||||
{
|
{
|
||||||
if (keyboard->KeyHeld(NumberKeys[index])
|
if ( keyboard->KeyHeld(KEY_F1+index)
|
||||||
|| keyboard->KeyHeld(NumberKeys[index + 1])
|
|| keyboard->KeyHeld(KEY_1+index)
|
||||||
|| keyboard->KeyHeld(NumberKeys[index + 2]) )
|
|| keyboard->KeyHeld(KEY_KP1+index) )
|
||||||
directDiskSwapRequest |= (1 << index/3);
|
directDiskSwapRequest |= (1 << index);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,8 @@
|
||||||
#define SPACE_FLAG (1 << 8)
|
#define SPACE_FLAG (1 << 8)
|
||||||
#define BACK_FLAG (1 << 9)
|
#define BACK_FLAG (1 << 9)
|
||||||
#define INSERT_FLAG (1 << 10)
|
#define INSERT_FLAG (1 << 10)
|
||||||
#define NUMBER_FLAG (1 << 11)
|
|
||||||
|
#define NUMLET_FLAG (1 << 11)
|
||||||
|
|
||||||
#define PAGEDOWN_LCD_FLAG (1 << 12)
|
#define PAGEDOWN_LCD_FLAG (1 << 12)
|
||||||
#define PAGEUP_LCD_FLAG (1 << 13)
|
#define PAGEUP_LCD_FLAG (1 << 13)
|
||||||
|
@ -41,26 +42,13 @@
|
||||||
#define AUTOLOAD_FLAG (1 << 15)
|
#define AUTOLOAD_FLAG (1 << 15)
|
||||||
#define FAKERESET_FLAG (1 << 16)
|
#define FAKERESET_FLAG (1 << 16)
|
||||||
#define WRITEPROTECT_FLAG (1 << 17)
|
#define WRITEPROTECT_FLAG (1 << 17)
|
||||||
#define LETTER_FLAG (1 << 18)
|
#define MAKELST_FLAG (1 << 18)
|
||||||
#define HOME_FLAG (1 << 19)
|
#define HOME_FLAG (1 << 19)
|
||||||
#define END_FLAG (1 << 20)
|
#define END_FLAG (1 << 20)
|
||||||
|
|
||||||
#define FUNCTION_FLAG (1 << 21)
|
#define FUNCTION_FLAG (1 << 21)
|
||||||
// dont exceed 32!!
|
// dont exceed 32!!
|
||||||
|
|
||||||
const unsigned NumberKeys[33] =
|
|
||||||
{
|
|
||||||
KEY_F1, KEY_KP1, KEY_1,
|
|
||||||
KEY_F2, KEY_KP2, KEY_2,
|
|
||||||
KEY_F3, KEY_KP3, KEY_3,
|
|
||||||
KEY_F4, KEY_KP4, KEY_4,
|
|
||||||
KEY_F5, KEY_KP5, KEY_5,
|
|
||||||
KEY_F6, KEY_KP6, KEY_6,
|
|
||||||
KEY_F7, KEY_KP7, KEY_7,
|
|
||||||
KEY_F8, KEY_KP8, KEY_8,
|
|
||||||
KEY_F9, KEY_KP9, KEY_9,
|
|
||||||
KEY_F10, KEY_KP0, KEY_0,
|
|
||||||
KEY_F11, KEY_KPMINUS, KEY_MINUS
|
|
||||||
};
|
|
||||||
|
|
||||||
class InputMappings : public Singleton<InputMappings>
|
class InputMappings : public Singleton<InputMappings>
|
||||||
{
|
{
|
||||||
|
@ -78,9 +66,8 @@ protected:
|
||||||
bool enterButtonPressedPrev;
|
bool enterButtonPressedPrev;
|
||||||
bool enterButtonPressed;
|
bool enterButtonPressed;
|
||||||
|
|
||||||
unsigned keyboardNumber;
|
unsigned keyboardNumLetter;
|
||||||
unsigned keyboardLetter;
|
unsigned inputROMOrDevice;
|
||||||
unsigned keyboardFunction;
|
|
||||||
|
|
||||||
//inline void SetUartFlag(unsigned flag) { uartFlags |= flag; }
|
//inline void SetUartFlag(unsigned flag) { uartFlags |= flag; }
|
||||||
//inline bool UartFlag(unsigned flag) { return (uartFlags & flag) != 0; }
|
//inline bool UartFlag(unsigned flag) { return (uartFlags & flag) != 0; }
|
||||||
|
@ -170,6 +157,11 @@ public:
|
||||||
return KeyboardFlag(INSERT_FLAG)/* | UartFlag(INSERT_FLAG)*/ | ButtonFlag(INSERT_FLAG);
|
return KeyboardFlag(INSERT_FLAG)/* | UartFlag(INSERT_FLAG)*/ | ButtonFlag(INSERT_FLAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline bool BrowseFunction()
|
||||||
|
{
|
||||||
|
return KeyboardFlag(FUNCTION_FLAG) | ButtonFlag(FUNCTION_FLAG);
|
||||||
|
}
|
||||||
|
|
||||||
inline bool BrowseNewD64() { return KeyboardFlag(NEWD64_FLAG); }
|
inline bool BrowseNewD64() { return KeyboardFlag(NEWD64_FLAG); }
|
||||||
|
|
||||||
inline bool BrowseAutoLoad() { return KeyboardFlag(AUTOLOAD_FLAG); }
|
inline bool BrowseAutoLoad() { return KeyboardFlag(AUTOLOAD_FLAG); }
|
||||||
|
@ -178,17 +170,14 @@ public:
|
||||||
|
|
||||||
inline bool BrowseWriteProtect() { return KeyboardFlag(WRITEPROTECT_FLAG); }
|
inline bool BrowseWriteProtect() { return KeyboardFlag(WRITEPROTECT_FLAG); }
|
||||||
|
|
||||||
inline bool BrowseNumber() { return KeyboardFlag(NUMBER_FLAG); }
|
inline bool MakeLSTFile() { return KeyboardFlag(MAKELST_FLAG); }
|
||||||
inline bool BrowseLetter() { return KeyboardFlag(LETTER_FLAG); }
|
|
||||||
inline bool BrowseFunction() { return KeyboardFlag(FUNCTION_FLAG); }
|
|
||||||
|
|
||||||
inline bool BrowseHome() { return KeyboardFlag(HOME_FLAG); }
|
inline bool BrowseHome() { return KeyboardFlag(HOME_FLAG); }
|
||||||
|
|
||||||
inline bool BrowseEnd() { return KeyboardFlag(END_FLAG); }
|
inline bool BrowseEnd() { return KeyboardFlag(END_FLAG); }
|
||||||
|
|
||||||
inline char getKeyboardNumber() { return keyboardNumber; }
|
inline char getKeyboardNumLetter() { return keyboardNumLetter; }
|
||||||
inline char getKeyboardLetter() { return (char) keyboardLetter; }
|
inline unsigned getROMOrDevice() { return inputROMOrDevice; }
|
||||||
inline unsigned getKeyboardFunction() { return (char) keyboardFunction; }
|
|
||||||
|
|
||||||
// Used by the 2 cores so need to be volatile
|
// Used by the 2 cores so need to be volatile
|
||||||
//volatile static unsigned directDiskSwapRequest;
|
//volatile static unsigned directDiskSwapRequest;
|
||||||
|
|
|
@ -28,6 +28,12 @@
|
||||||
#define INPUT_BUTTON_DEBOUNCE_THRESHOLD 20000
|
#define INPUT_BUTTON_DEBOUNCE_THRESHOLD 20000
|
||||||
#define INPUT_BUTTON_REPEAT_THRESHOLD 460000
|
#define INPUT_BUTTON_REPEAT_THRESHOLD 460000
|
||||||
|
|
||||||
|
#define INPUT_BUTTON_ENTER 0
|
||||||
|
#define INPUT_BUTTON_UP 1
|
||||||
|
#define INPUT_BUTTON_DOWN 2
|
||||||
|
#define INPUT_BUTTON_BACK 3
|
||||||
|
#define INPUT_BUTTON_INSERT 4
|
||||||
|
|
||||||
// DIN ATN is inverted and then connected to pb7 and ca1
|
// DIN ATN is inverted and then connected to pb7 and ca1
|
||||||
// - also input to xor with ATNAout pb4
|
// - also input to xor with ATNAout pb4
|
||||||
// - output of xor is inverted and connected to DIN pin 5 DATAout (OC so can only pull low)
|
// - output of xor is inverted and connected to DIN pin 5 DATAout (OC so can only pull low)
|
||||||
|
|
Loading…
Reference in a new issue