mirror of
https://github.com/ogoguel/activegs-ios.git
synced 2024-12-27 17:29:42 +00:00
239 lines
7.9 KiB
C
239 lines
7.9 KiB
C
|
|
#include <windows.h>
|
|
#include <stdarg.h>
|
|
#include <stdio.h>
|
|
#include "../src/defc.h"
|
|
#include "ki.h"
|
|
|
|
extern Iwm iwm;
|
|
|
|
void (*ki_loadingptr)(int,int,int) = NULL;
|
|
|
|
void prepareDriveInfo(Disk* dsk,int slot, int drive)
|
|
{
|
|
int l = dsk->image_size;
|
|
int s = dsk->image_start ;
|
|
int p = (dsk->image_type == DSK_TYPE_PRODOS);
|
|
readImageInfo(slot,drive+1,l,s,p);
|
|
}
|
|
|
|
int toggleJoystick(int _force)
|
|
{
|
|
if (_force==-2)
|
|
{
|
|
// auto
|
|
joystick_init(); // ? Joy
|
|
}
|
|
else
|
|
if (_force==-1)
|
|
{
|
|
if (g_joystick_type == JOYSTICK_MOUSE)
|
|
g_joystick_type = JOYSTICK_NONE;
|
|
else
|
|
if (g_joystick_type == JOYSTICK_NONE)
|
|
{
|
|
joystick_init(); // ? Joy
|
|
// can be mouse if not detected
|
|
}
|
|
else
|
|
{
|
|
// joystick_win32
|
|
g_joystick_type=JOYSTICK_MOUSE;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
g_joystick_type = _force;
|
|
if (g_joystick_type == JOYSTICK_WIN32_1)
|
|
joystick_init();
|
|
}
|
|
|
|
if (g_joystick_type == JOYSTICK_MOUSE)
|
|
printf("joystick set to mouse emulation\n");
|
|
else
|
|
if (g_joystick_type == JOYSTICK_NONE)
|
|
printf("joystick set to none\n");
|
|
else
|
|
printf("joystick set to native\n");
|
|
|
|
refreshInfo();
|
|
return 1;
|
|
}
|
|
|
|
|
|
#ifndef _CONSOLE
|
|
|
|
/*
|
|
void ejectDisk(int slot,int disk)
|
|
{
|
|
setLocalIMG(slot,disk,NULL);
|
|
}
|
|
*/
|
|
|
|
|
|
void checkImages()
|
|
{
|
|
extern int g_highest_smartport_unit ;
|
|
extern Iwm iwm;
|
|
|
|
if (mountImages())
|
|
{
|
|
printf("Mounting images...\n");
|
|
|
|
g_highest_smartport_unit = -1;
|
|
|
|
insert_disk(5,0,getLocalIMG(5,1),0,0,0,0);
|
|
insert_disk(5,1,getLocalIMG(5,2),0,0,0,0);
|
|
insert_disk(6,0,getLocalIMG(6,1),0,0,0,0);
|
|
insert_disk(6,1,getLocalIMG(6,2),0,0,0,0);
|
|
|
|
insert_disk(7,0,getLocalIMG(7,1),0,0,0,0);
|
|
insert_disk(7,1,getLocalIMG(7,2),0,0,0,0);
|
|
|
|
refreshInfo();
|
|
|
|
}
|
|
}
|
|
/*
|
|
extern void ejectDiskCtrl(int _slot,int _drive);
|
|
void ejectDisk(int _slot,int _drive)
|
|
{
|
|
if (!g_inMount)
|
|
ejectDiskCtrl(_slot,_drive);
|
|
}
|
|
*/
|
|
|
|
void config_init()
|
|
{
|
|
/*
|
|
#ifndef _USRDLL
|
|
insert_disk(5,0,"nucleus.2mg",0,0,0,0);
|
|
insert_disk(6,0,"flobynoid (2002).dsk",0,0,0,0);
|
|
#endif
|
|
*/
|
|
}
|
|
|
|
char bram_default[]={
|
|
(char)0x00, (char)0x00, (char)0x00, (char)0x01, (char)0x00, (char)0x00, (char)0x0D, (char)0x06, (char)0x02, (char)0x01, (char)0x01, (char)0x00, (char)0x01, (char)0x00, (char)0x00, (char)0x00,
|
|
(char)0x00, (char)0x00, (char)0x07, (char)0x06, (char)0x02, (char)0x01, (char)0x01, (char)0x00, (char)0x00, (char)0x00, (char)0x0F, (char)0x06, (char)0x06, (char)0x00, (char)0x05, (char)0x06,
|
|
(char)0x01, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x01, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x03, (char)0x02, (char)0x02, (char)0x02,
|
|
(char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x00, (char)0x01, (char)0x02, (char)0x03, (char)0x04, (char)0x05, (char)0x06,
|
|
(char)0x07, (char)0x00, (char)0x00, (char)0x01, (char)0x02, (char)0x03, (char)0x04, (char)0x05, (char)0x06, (char)0x07, (char)0x08, (char)0x09, (char)0x0A, (char)0x0B, (char)0x0C, (char)0x0D,
|
|
(char)0x0E, (char)0x0F, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF,
|
|
(char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF,
|
|
(char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF,
|
|
(char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF,
|
|
(char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF,
|
|
(char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF,
|
|
(char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF,
|
|
(char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF,
|
|
(char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF,
|
|
(char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF,
|
|
(char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFF, (char)0xFD, (char)0x96, (char)0x57, (char)0x3C
|
|
};
|
|
|
|
void updateBramCheckSum(unsigned char* buf) // original code in FF/B61D
|
|
{
|
|
register short int crc=0; // LDA #0
|
|
int i; // CLC
|
|
for(i=255-4-1;i>=0;i--) // LDX #FA
|
|
{
|
|
crc = (crc << 1) | ((crc>>15) & 1); // ROL (1-bits)
|
|
#ifdef UNDER_CE
|
|
crc += buf[i];
|
|
crc += buf[i+1]*256;
|
|
#else
|
|
crc += *(unsigned short*)(buf+i); // ADC bram,X
|
|
#endif
|
|
} // DEX
|
|
// CPX #FF
|
|
// BNE Loop
|
|
*(unsigned short*)(buf+252) = crc; // TAX
|
|
*(unsigned short*)(buf+254) = crc ^0xAAAA; // EOR #AAAA
|
|
}
|
|
|
|
|
|
void initializeBram(byte* g_bram_ptr)
|
|
{
|
|
memcpy(g_bram_ptr,bram_default,256);
|
|
updateBramParameters(g_bram_ptr);
|
|
updateBramCheckSum(g_bram_ptr);
|
|
|
|
}
|
|
#else
|
|
|
|
void config_init()
|
|
{
|
|
// insert_disk(7,0,"system6.2mg",0,0,0,0);
|
|
// insert_disk(7,0,"C:\\Work\\GS\\Images\\GSOS_6.2MG",0,0,0,0);
|
|
// insert_disk(7,0,"OOTW.2MG",0,0,0,0);
|
|
|
|
// insert_disk(7,0,"C:\\Work\\GS\\Images\\NFCDemoDrive.2mg",0,0,0,0);
|
|
|
|
insert_disk(5,0,"nucleus.2mg",0,0,0,0);
|
|
// insert_disk(5,0,"C:\\Work\\GS\\Images\\ACS_Demo2.2mg",0,0,0,0);
|
|
// insert_disk(5,0,"C:\\Work\\GS\\Images\\StarWizard(OK).2mg",0,0,0,0);
|
|
// insert_disk(5,0,"C:\\Work\\GS\\Images\\BeamDemo.2mg",0,0,0,0);
|
|
// insert_disk(5,0,"C:\\Work\\GS\\Images\\Bestof2vol1.2mg",0,0,0,0);
|
|
// insert_disk(5,0,"C:\\Work\\GS\\Images\\MODULAE.2MG",0,0,0,0);
|
|
// insert_disk(5,0,"C:\\Work\\GS\\Images\\delta.2MG",0,0,0,0);
|
|
// insert_disk(5,0,"C:\\Work\\GS\\Images\\TFORCE1.2mg",0,0,0,0);
|
|
// insert_disk(5,0,"C:\\Work\\GS\\Images\\manoir.2mg",0,0,0,0);
|
|
// insert_disk(5,0,"C:\\Work\\GS\\Images\\BOUNCIN_FERNO.2MG",0,0,0,0);
|
|
// insert_disk(5,0,"C:\\Work\\GS\\Images\\Rastan with Intro Disk 1.2mg",0,0,0,0);
|
|
// insert_disk(5,0,"C:\\Work\\GS\\Images\\Aaargh!.2mg",0,0,0,0);
|
|
// insert_disk(5,0,"C:\\Work\\GS\\Images\\CaliforniaDemo.2mg",0,0,0,0);
|
|
// insert_disk(5,0,"C:\\Work\\GS\\Images\\xmasdemo.2mg",0,0,0,0);
|
|
// insert_disk(5,0,"C:\\Work\\GS\\Images\\nodrugs.2mg",0,0,0,0);
|
|
// insert_disk(5,0,"C:\\Work\\GS\\Images\\Star_Trek_Classic.2mg",0,0,0,0);
|
|
|
|
// insert_disk(5,0,"C:\\Work\\GS\\Images\\shark.2mg",0,0,0,0);
|
|
|
|
// insert_disk(6,0,"C:\\Work\\GS\\Images\\flobynoid (2002).dsk",0,0,0,0);
|
|
// insert_disk(6,0,"C:\\Work\\GS\\Images\\Ultima III - Exodus (Master) (Disk 1 of 2).zip_0_Ultima III - Exodus (Master) (Disk 1 of 2)[1].dsk",0,0,0,0);
|
|
// insert_disk(6,0,"C:\\Work\\GS\\Images\\karateka.dsk",0,0,0,0);
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
void monitorStatus(int motorOn,int drive,int select)
|
|
{
|
|
if (ki_loadingptr)
|
|
ki_loadingptr(motorOn,drive,select);
|
|
|
|
}
|
|
|
|
#ifndef UNDER_CE
|
|
char targetSpeed[256];
|
|
char estimatedSpeed[256];
|
|
|
|
void updateInfo(const char* target,const char *speed)
|
|
{
|
|
strcpy(targetSpeed,target);
|
|
strcpy(estimatedSpeed,speed);
|
|
|
|
}
|
|
#endif
|
|
|
|
|
|
// SIM86516
|
|
|
|
void fatalExit(int ret)
|
|
{
|
|
char str[255];
|
|
unsigned short strw[1024];
|
|
sprintf(str,"Critical Error : %d",ret);
|
|
|
|
#ifndef UNDER_CE
|
|
MessageBox(NULL,str,"ActiveGS Halted!",MB_OK);
|
|
#else
|
|
|
|
MultiByteToWideChar(CP_ACP, 0,str,strlen(str),strw,1024);
|
|
|
|
MessageBox(NULL,strw,_T("ActiveGS Halted!"),MB_OK);
|
|
#endif
|
|
ExitThread(ret);
|
|
} |