MacIIROMDiskDriver/rdisk.h

66 lines
1.6 KiB
C
Raw Normal View History

2020-06-24 17:10:44 +00:00
#ifndef RDTRAPS_H
#define RDTRAPS_H
2020-06-26 07:12:08 +00:00
#define RDiskSize (0x00180000L)
#define RDiskBuf ((char*)0x40880000)
#define BufPtr ((Ptr*)0x10C)
#define MemTop ((Ptr*)0x108)
#define MMU32bit ((char*)0xCB2)
#define JIODone ((char*)0x8FC)
#pragma parameter __D0 RDiskReadXPRAM(__D0, __D1, __A0)
OSErr RDiskReadXPRAM(short numBytes, short whichByte, void *dest) = {0x4840, 0x3001, 0xA051};
2020-06-24 17:10:44 +00:00
// Other definition of RDiskAddDrive with register calling convention
//#pragma parameter __D0 RDiskAddDrive(__D1, __D0, __A0)
//OSErr RDiskAddDrive(short numBytes, short whichByte, void *dest) = {0x4840, 0x3001, 0xA04E};
2020-06-24 17:10:44 +00:00
OSErr RDiskAddDrive(short drvrRefNum, short drvNum, DrvQElPtr dq) {
2020-06-26 07:12:08 +00:00
__asm__ __volatile__ (
"clr.l %%D0 \n\t"
"move.w %1,%%D0 \n\t"
"swap %%D0 \n\t"
"move.w %0,%%D0 \n\t"
"movea.l %2,%%A0 \n\t"
".word 0xA04E \n\t"
: /* outputs */
: "g"(drvrRefNum), "g"(drvNum), "g"(dq) /* inputs */
: /* clobbered */);
}
2020-06-24 17:10:44 +00:00
inline char RDiskIsRPressed() { return *((char*)0x175) & 0x80; }
inline char RDiskIsAPressed() { return *((char*)0x174) & 0x01; }
2020-06-26 07:12:08 +00:00
void RDiskBreak() = { 0xA9FF };
typedef void (*RDiskCopy_t)(Ptr, Ptr, unsigned long);
typedef struct RDiskStorage_s {
DrvSts2 status;
2020-06-30 01:08:50 +00:00
char initialized;
2020-07-02 07:06:35 +00:00
char removed;
char postBoot;
char *ramdisk;
RDiskCopy_t copy24;
} RDiskStorage_t;
2020-06-26 07:12:08 +00:00
2020-07-02 07:06:35 +00:00
/*
typedef void (*RDiskCopy_t)(Ptr, Ptr, unsigned long);
typedef void (*RDiskFormat_t)(Ptr);
typedef struct RDiskStorage_s {
DrvSts2 status;
char initialized;
char removed;
char postBoot;
Ptr ramdisk;
char copy24[64] __attribute__ ((aligned (4))) ;
char format24[64] __attribute__ ((aligned (4))) ;
} RDiskStorage_t;
*/
#endif