mirror of
https://github.com/dschmenk/Appalm.git
synced 2024-12-30 03:29:40 +00:00
72 lines
2.6 KiB
C
72 lines
2.6 KiB
C
|
typedef UInt8 (*READBYTE)(UInt16);
|
||
|
typedef void (*WRITEBYTE)(UInt16, UInt8);
|
||
|
typedef void (*VIDIMAGE)(void);
|
||
|
extern Boolean dirtyVideo;
|
||
|
extern UInt8 *AppleMemory;
|
||
|
extern UInt8 *AuxMemory;
|
||
|
extern UInt8 *AppleROM;
|
||
|
extern UInt8 *BootROM;
|
||
|
extern READBYTE *ReadFunction;
|
||
|
extern WRITEBYTE *WriteFunction;
|
||
|
extern VIDIMAGE updateVideo;
|
||
|
extern UInt16 clrPairEven[96], clrPairOdd[96], interpPairEven[96], interpPairOdd[96];
|
||
|
|
||
|
void initMemory(void);
|
||
|
void initVideo(void);
|
||
|
void setMemFuncs(void);
|
||
|
void setVideoFuncs(Boolean);
|
||
|
void loadROM(void);
|
||
|
int getCurrentDrive(void);
|
||
|
void showCurrentDisk(void);
|
||
|
int mountDisk(int, char *, Boolean);
|
||
|
void umountDisk(int);
|
||
|
void positionDisk(int, UInt16, UInt16);
|
||
|
void queryDisk(int, UInt16 *, UInt16 *);
|
||
|
void resetDisks(void);
|
||
|
/*
|
||
|
* Macros to wrap a C function for assembly linkeage to emulator
|
||
|
* memory R/W routines.
|
||
|
*/
|
||
|
#define WRMEM_CWRAP(fn,a,d) \
|
||
|
void fn(UInt16,UInt8); \
|
||
|
void cwrap_##fn(UInt16,UInt8); \
|
||
|
void awrap_##fn(UInt16 a, UInt8 d) \
|
||
|
{ \
|
||
|
asm(".global "#fn); \
|
||
|
asm(#fn ":"); \
|
||
|
asm("movem.l #0x1FFF, state6502@END.w(%a5)"); \
|
||
|
asm("move.b %d0, -(%sp)"); \
|
||
|
asm("move.w %d6, -(%sp)"); \
|
||
|
asm("bsr.w cwrap_"#fn); \
|
||
|
asm("addq.l #4, %sp"); \
|
||
|
asm("movem.l state6502@END.w(%a5), #0x1FFF"); \
|
||
|
asm("rts"); \
|
||
|
} \
|
||
|
void cwrap_##fn(UInt16 a, UInt8 d)
|
||
|
|
||
|
#define RDMEM_CWRAP(fn,a) \
|
||
|
UInt8 fn(UInt16); \
|
||
|
UInt8 cwrap_##fn(UInt16); \
|
||
|
UInt8 awrap_##fn(UInt16 a) \
|
||
|
{ \
|
||
|
asm(".global "#fn); \
|
||
|
asm(#fn ":"); \
|
||
|
asm("movem.l #0x1FFE, (state6502+4)@END.w(%a5)");\
|
||
|
asm("move.w %d6, -(%sp)"); \
|
||
|
asm("bsr.w cwrap_"#fn); \
|
||
|
asm("addq.l #2, %sp"); \
|
||
|
asm("and.l #0xFF,%d0"); \
|
||
|
asm("movem.l (state6502+4)@END.w(%a5), #0x1FFE");\
|
||
|
asm("rts"); \
|
||
|
} \
|
||
|
UInt8 cwrap_##fn(UInt16 a)
|
||
|
|
||
|
/*
|
||
|
* Keyboard type-ahead buffer.
|
||
|
*/
|
||
|
#define KBD_BUF_SIZE 16
|
||
|
#define KBD_BUF_MASK 15
|
||
|
extern UInt8 kbdBuffer[KBD_BUF_SIZE];
|
||
|
extern UInt8 kbdHead, kbdCount;
|
||
|
|