mirror of
https://github.com/InvisibleUp/uvmac.git
synced 2024-11-29 07:49:18 +00:00
Modularize PROGMAIN.c some
This commit is contained in:
parent
f2e88fb4fb
commit
ae159cb2d7
2
Makefile
2
Makefile
@ -1,7 +1,7 @@
|
|||||||
# Makefile
|
# Makefile
|
||||||
# Currently only builds Mac Plus emulator for Windows x64
|
# Currently only builds Mac Plus emulator for Windows x64
|
||||||
|
|
||||||
CC := gcc
|
CC := clang
|
||||||
CCFLAGS := -O2 -Wall -Wmissing-prototypes -Wno-uninitialized -Wundef -Wstrict-prototypes -Icfg/ -Isrc/
|
CCFLAGS := -O2 -Wall -Wmissing-prototypes -Wno-uninitialized -Wundef -Wstrict-prototypes -Icfg/ -Isrc/
|
||||||
|
|
||||||
.PHONY: linux windows clean
|
.PHONY: linux windows clean
|
||||||
|
@ -49,7 +49,7 @@
|
|||||||
Replacement for .Sony driver
|
Replacement for .Sony driver
|
||||||
68k machine code, compiled from mydriver.a
|
68k machine code, compiled from mydriver.a
|
||||||
*/
|
*/
|
||||||
INCBIN(SonyDriver, "PATCHES/SONY.bin");
|
INCBIN(SonyDriver, "src/PATCHES/SONY.bin");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if UseSonyPatch
|
#if UseSonyPatch
|
||||||
|
232
src/PROGMAIN.c
232
src/PROGMAIN.c
@ -18,6 +18,7 @@
|
|||||||
PROGram MAIN.
|
PROGram MAIN.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
#include "SYSDEPNS.h"
|
#include "SYSDEPNS.h"
|
||||||
|
|
||||||
#include "UI/MYOSGLUE.h"
|
#include "UI/MYOSGLUE.h"
|
||||||
@ -57,18 +58,190 @@ const bool _EmMMU = false;
|
|||||||
const bool _EmASC = false;
|
const bool _EmASC = false;
|
||||||
const bool _EmADB = false;
|
const bool _EmADB = false;
|
||||||
|
|
||||||
|
// Let's define a bunch of function structure thingies
|
||||||
|
|
||||||
|
#define ARRAY_SIZE(array) (sizeof(array) / sizeof(*array))
|
||||||
|
|
||||||
|
typedef struct DevMethods {
|
||||||
|
bool (*init)(void);
|
||||||
|
void (*reset)(void);
|
||||||
|
void (*starttick)(void);
|
||||||
|
void (*endtick)(void);
|
||||||
|
void (*timebegin)(void);
|
||||||
|
void (*timeend)(void);
|
||||||
|
} DevMethods_t;
|
||||||
|
|
||||||
|
const DevMethods_t DEVICES[] = {
|
||||||
|
// RTC
|
||||||
|
{
|
||||||
|
.init = EmRTC ? RTC_Init : NULL,
|
||||||
|
.reset = NULL,
|
||||||
|
.starttick = NULL,
|
||||||
|
.endtick = NULL,
|
||||||
|
.timebegin = NULL,
|
||||||
|
.timeend = NULL,
|
||||||
|
},
|
||||||
|
// ROM
|
||||||
|
{
|
||||||
|
.init = ROM_Init,
|
||||||
|
.reset = NULL,
|
||||||
|
.starttick = NULL,
|
||||||
|
.endtick = NULL,
|
||||||
|
.timebegin = NULL,
|
||||||
|
.timeend = NULL,
|
||||||
|
},
|
||||||
|
// Memory
|
||||||
|
{
|
||||||
|
.init = AddrSpac_Init,
|
||||||
|
.reset = Memory_Reset,
|
||||||
|
.starttick = NULL,
|
||||||
|
.endtick = NULL,
|
||||||
|
.timebegin = NULL,
|
||||||
|
.timeend = NULL,
|
||||||
|
},
|
||||||
|
// ICT
|
||||||
|
{
|
||||||
|
.init = NULL,
|
||||||
|
.reset = ICT_Zap,
|
||||||
|
.starttick = NULL,
|
||||||
|
.endtick = NULL,
|
||||||
|
.timebegin = NULL,
|
||||||
|
.timeend = NULL,
|
||||||
|
},
|
||||||
|
// IWM
|
||||||
|
{
|
||||||
|
.init = NULL,
|
||||||
|
.reset = IWM_Reset,
|
||||||
|
.starttick = NULL,
|
||||||
|
.endtick = NULL,
|
||||||
|
.timebegin = NULL,
|
||||||
|
.timeend = NULL,
|
||||||
|
},
|
||||||
|
// SCC
|
||||||
|
{
|
||||||
|
.init = NULL,
|
||||||
|
.reset = SCC_Reset,
|
||||||
|
.starttick = NULL,
|
||||||
|
.endtick = NULL,
|
||||||
|
.timebegin = NULL,
|
||||||
|
.timeend = NULL,
|
||||||
|
},
|
||||||
|
// SCSI
|
||||||
|
{
|
||||||
|
.init = NULL,
|
||||||
|
.reset = SCSI_Reset,
|
||||||
|
.starttick = NULL,
|
||||||
|
.endtick = NULL,
|
||||||
|
.timebegin = NULL,
|
||||||
|
.timeend = NULL,
|
||||||
|
},
|
||||||
|
// VIA1
|
||||||
|
{
|
||||||
|
.init = NULL,
|
||||||
|
.reset = VIA1_Zap,
|
||||||
|
.starttick = NULL,
|
||||||
|
.endtick = NULL,
|
||||||
|
.timebegin = VIA1_ExtraTimeBegin,
|
||||||
|
.timeend = VIA1_ExtraTimeEnd,
|
||||||
|
},
|
||||||
|
// VIA2
|
||||||
|
{
|
||||||
|
.init = NULL,
|
||||||
|
.reset = EmVIA2 ? VIA2_Zap : NULL,
|
||||||
|
.starttick = NULL,
|
||||||
|
.endtick = NULL,
|
||||||
|
.timebegin = EmVIA2 ? VIA2_ExtraTimeBegin : NULL,
|
||||||
|
.timeend = EmVIA2 ? VIA2_ExtraTimeEnd : NULL,
|
||||||
|
},
|
||||||
|
// Sony disk drive
|
||||||
|
{
|
||||||
|
.init = NULL,
|
||||||
|
.reset = Sony_Reset,
|
||||||
|
.starttick = Sony_Update,
|
||||||
|
.endtick = NULL,
|
||||||
|
.timebegin = NULL,
|
||||||
|
.timeend = NULL,
|
||||||
|
},
|
||||||
|
// Extn
|
||||||
|
{
|
||||||
|
.init = NULL,
|
||||||
|
.reset = Extn_Reset,
|
||||||
|
.starttick = NULL,
|
||||||
|
.endtick = NULL,
|
||||||
|
.timebegin = NULL,
|
||||||
|
.timeend = NULL,
|
||||||
|
},
|
||||||
|
// m68k
|
||||||
|
{
|
||||||
|
.init = NULL,
|
||||||
|
.reset = m68k_reset,
|
||||||
|
.starttick = NULL,
|
||||||
|
.endtick = NULL,
|
||||||
|
.timebegin = NULL,
|
||||||
|
.timeend = NULL,
|
||||||
|
},
|
||||||
|
// Mouse
|
||||||
|
{
|
||||||
|
.init = NULL,
|
||||||
|
.reset = NULL,
|
||||||
|
.starttick = Mouse_Update,
|
||||||
|
.endtick = Mouse_EndTickNotify,
|
||||||
|
.timebegin = NULL,
|
||||||
|
.timeend = NULL,
|
||||||
|
},
|
||||||
|
// Classic Keyboard
|
||||||
|
{
|
||||||
|
.init = NULL,
|
||||||
|
.reset = NULL,
|
||||||
|
.starttick = EmClassicKbrd ? KeyBoard_Update : NULL,
|
||||||
|
.endtick = NULL,
|
||||||
|
.timebegin = NULL,
|
||||||
|
.timeend = NULL,
|
||||||
|
},
|
||||||
|
// ADB
|
||||||
|
{
|
||||||
|
.init = NULL,
|
||||||
|
.reset = NULL,
|
||||||
|
.starttick = EmADB ? ADB_Update : NULL,
|
||||||
|
.endtick = NULL,
|
||||||
|
.timebegin = NULL,
|
||||||
|
.timeend = NULL,
|
||||||
|
},
|
||||||
|
// LocalTalk
|
||||||
|
/*{
|
||||||
|
.init = NULL,
|
||||||
|
.reset = NULL,
|
||||||
|
.starttick = EmLocalTalk ? LocalTalkTick : NULL,
|
||||||
|
.endtick = NULL,
|
||||||
|
.timebegin = NULL,
|
||||||
|
.timeend = NULL,
|
||||||
|
},*/
|
||||||
|
// Video card
|
||||||
|
{
|
||||||
|
.init = EmVidCard ? Vid_Init : NULL,
|
||||||
|
.reset = NULL,
|
||||||
|
.starttick = EmVidCard ? Vid_Update : NULL,
|
||||||
|
.endtick = NULL,
|
||||||
|
.timebegin = NULL,
|
||||||
|
.timeend = NULL,
|
||||||
|
},
|
||||||
|
// Screen
|
||||||
|
{
|
||||||
|
.init = NULL,
|
||||||
|
.reset = NULL,
|
||||||
|
.starttick = Sixtieth_PulseNtfy, // VBlank interrupt
|
||||||
|
.endtick = Screen_EndTickNotify,
|
||||||
|
.timebegin = NULL,
|
||||||
|
.timeend = NULL,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
LOCALPROC EmulatedHardwareZap(void)
|
LOCALPROC EmulatedHardwareZap(void)
|
||||||
{
|
{
|
||||||
Memory_Reset();
|
int i;
|
||||||
ICT_Zap();
|
for ( i = 0; i < ARRAY_SIZE(DEVICES); i++ ) {
|
||||||
IWM_Reset();
|
if (DEVICES[i].reset != NULL) { DEVICES[i].reset(); }
|
||||||
SCC_Reset();
|
}
|
||||||
SCSI_Reset();
|
|
||||||
VIA1_Zap();
|
|
||||||
if (_EmVIA2) { VIA2_Zap(); }
|
|
||||||
Sony_Reset();
|
|
||||||
Extn_Reset();
|
|
||||||
m68k_reset();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
LOCALPROC DoMacReset(void)
|
LOCALPROC DoMacReset(void)
|
||||||
@ -146,31 +319,25 @@ LOCALPROC SubTickTaskEnd(void)
|
|||||||
|
|
||||||
LOCALPROC SixtiethSecondNotify(void)
|
LOCALPROC SixtiethSecondNotify(void)
|
||||||
{
|
{
|
||||||
|
int i;
|
||||||
#if dbglog_HAVE && 0
|
#if dbglog_HAVE && 0
|
||||||
dbglog_WriteNote("begin new Sixtieth");
|
dbglog_WriteNote("begin new Sixtieth");
|
||||||
#endif
|
#endif
|
||||||
Mouse_Update();
|
|
||||||
InterruptReset_Update();
|
InterruptReset_Update();
|
||||||
if (_EmClassicKbrd) { KeyBoard_Update(); }
|
for ( i = 0; i < ARRAY_SIZE(DEVICES); i++ ) {
|
||||||
if (_EmADB) { ADB_Update(); }
|
if (DEVICES[i].starttick != NULL) { DEVICES[i].starttick(); }
|
||||||
|
}
|
||||||
Sixtieth_PulseNtfy(); /* Vertical Blanking Interrupt */
|
|
||||||
Sony_Update();
|
|
||||||
|
|
||||||
#if EmLocalTalk
|
|
||||||
LocalTalkTick();
|
|
||||||
#endif
|
|
||||||
if (_EmRTC) { RTC_Interrupt(); }
|
|
||||||
if (_EmVidCard) { Vid_Update(); }
|
|
||||||
|
|
||||||
SubTickTaskStart();
|
SubTickTaskStart();
|
||||||
}
|
}
|
||||||
|
|
||||||
LOCALPROC SixtiethEndNotify(void)
|
LOCALPROC SixtiethEndNotify(void)
|
||||||
{
|
{
|
||||||
|
int i;
|
||||||
SubTickTaskEnd();
|
SubTickTaskEnd();
|
||||||
Mouse_EndTickNotify();
|
for ( i = 0; i < ARRAY_SIZE(DEVICES); i++ ) {
|
||||||
Screen_EndTickNotify();
|
if (DEVICES[i].endtick != NULL) { DEVICES[i].endtick(); }
|
||||||
|
}
|
||||||
#if dbglog_HAVE && 0
|
#if dbglog_HAVE && 0
|
||||||
dbglog_WriteNote("end Sixtieth");
|
dbglog_WriteNote("end Sixtieth");
|
||||||
#endif
|
#endif
|
||||||
@ -214,15 +381,16 @@ GLOBALPROC EmulationReserveAlloc(void)
|
|||||||
|
|
||||||
LOCALFUNC bool InitEmulation(void)
|
LOCALFUNC bool InitEmulation(void)
|
||||||
{
|
{
|
||||||
bool retval = true;
|
int i;
|
||||||
|
for ( i = 0; i < ARRAY_SIZE(DEVICES); i++ ) {
|
||||||
|
if (DEVICES[i].init != NULL) {
|
||||||
|
bool retval = DEVICES[i].init();
|
||||||
|
if (retval == false) { return false; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
retval &= ROM_Init();
|
EmulatedHardwareZap();
|
||||||
retval &= AddrSpac_Init();
|
return true;
|
||||||
if (_EmRTC) { retval &= RTC_Init(); }
|
|
||||||
if (_EmVidCard) { retval &= Vid_Init(); }
|
|
||||||
|
|
||||||
if (retval == true) { EmulatedHardwareZap(); }
|
|
||||||
return retval;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
LOCALPROC ICT_DoTask(int taskid)
|
LOCALPROC ICT_DoTask(int taskid)
|
||||||
|
Loading…
Reference in New Issue
Block a user