mirror of
https://github.com/garrettsworkshop/MacIIROMDiskDriver.git
synced 2024-11-21 12:30:49 +00:00
Implemented build process
This commit is contained in:
parent
45752186ef
commit
3888172c26
22
Makefile
22
Makefile
@ -5,13 +5,14 @@ PREFIX=$(RETRO68)/m68k-apple-macos
|
|||||||
CC=$(RETRO68)/bin/m68k-apple-macos-gcc
|
CC=$(RETRO68)/bin/m68k-apple-macos-gcc
|
||||||
CXX=$(RETRO68)/bin/m68k-apple-macos-g++
|
CXX=$(RETRO68)/bin/m68k-apple-macos-g++
|
||||||
OBJCOPY=$(RETRO68)/bin/m68k-apple-macos-objcopy
|
OBJCOPY=$(RETRO68)/bin/m68k-apple-macos-objcopy
|
||||||
|
OBJDUMP=$(RETRO68)/bin/m68k-apple-macos-objdump
|
||||||
REZ=$(RETRO68)/bin/Rez
|
REZ=$(RETRO68)/bin/Rez
|
||||||
|
|
||||||
LDFLAGS=-lRetroConsole
|
LDFLAGS=-lRetroConsole
|
||||||
RINCLUDES=$(PREFIX)/RIncludes
|
RINCLUDES=$(PREFIX)/RIncludes
|
||||||
REZFLAGS=-I$(RINCLUDES)
|
REZFLAGS=-I$(RINCLUDES)
|
||||||
|
|
||||||
all: bin/rdisk.bin
|
all: bin/rom.bin
|
||||||
|
|
||||||
obj:
|
obj:
|
||||||
mkdir obj
|
mkdir obj
|
||||||
@ -19,12 +20,29 @@ obj:
|
|||||||
bin:
|
bin:
|
||||||
mkdir bin
|
mkdir bin
|
||||||
|
|
||||||
|
bin/sym:
|
||||||
|
mkdir bin/sym
|
||||||
|
|
||||||
obj/rdisk.o: rdisk.c obj
|
obj/rdisk.o: rdisk.c obj
|
||||||
$(CC) -c -O1 $< -o $@
|
$(CC) -c -O1 $< -o $@
|
||||||
|
|
||||||
bin/rdisk.bin: obj/rdisk.o bin
|
obj/rdisk.s: obj obj/rdisk.o
|
||||||
|
$(OBJDUMP) -d obj/rdisk.o > obj/rdisk.s
|
||||||
|
|
||||||
|
bin/rdisk.bin: bin obj/rdisk.o
|
||||||
$(OBJCOPY) -O binary obj/rdisk.o $@
|
$(OBJCOPY) -O binary obj/rdisk.o $@
|
||||||
|
|
||||||
|
bin/rom.bin: bin bin/sym bin/rdisk.bin obj/rdisk.s
|
||||||
|
cp baserom.bin bin/rom.bin
|
||||||
|
printf '\x18' | dd of=bin/rom.bin bs=1 seek=335168 count=1 conv=notrunc # resource flags
|
||||||
|
printf '\x4F' | dd of=bin/rom.bin bs=1 seek=335216 count=1 conv=notrunc # driver flags
|
||||||
|
cat obj/rdisk.s | grep "<.*DiskOpen>\:" | cut -c5-8 | xxd -r -p - | dd of=bin/rom.bin bs=1 seek=335224 count=2 conv=notrunc
|
||||||
|
cat obj/rdisk.s | grep "<.*DiskPrime>\:" | cut -c5-8 | xxd -r -p - | dd of=bin/rom.bin bs=1 seek=335226 count=2 conv=notrunc
|
||||||
|
cat obj/rdisk.s | grep "<.*DiskControl>\:" | cut -c5-8 | xxd -r -p - | dd of=bin/rom.bin bs=1 seek=335228 count=2 conv=notrunc
|
||||||
|
cat obj/rdisk.s | grep "<.*DiskStatus>\:" | cut -c5-8 | xxd -r -p - | dd of=bin/rom.bin bs=1 seek=335230 count=2 conv=notrunc
|
||||||
|
cat obj/rdisk.s | grep "<.*DiskClose>\:" | cut -c5-8 | xxd -r -p - | dd of=bin/rom.bin bs=1 seek=335232 count=2 conv=notrunc
|
||||||
|
cat bin/rdisk.bin | dd of=bin/rom.bin bs=1 seek=335244 conv=notrunc
|
||||||
|
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
clean:
|
clean:
|
||||||
rm -fr bin obj
|
rm -fr bin obj
|
||||||
|
12
rdisk.c
12
rdisk.c
@ -21,9 +21,9 @@ OSErr RDiskAddDrive(short drvrRefNum, short drvNum, DrvQElPtr dq) = {0x4840, 0x3
|
|||||||
inline char IsRPressed() { return *((char*)0x175) & 0x80; }
|
inline char IsRPressed() { return *((char*)0x175) & 0x80; }
|
||||||
inline char ISAPressed() { return *((char*)0x174) & 0x01; }
|
inline char ISAPressed() { return *((char*)0x174) & 0x01; }
|
||||||
|
|
||||||
#define RDiskCopySize (128)
|
#define Copy24Size (64)
|
||||||
typedef void (*ROMDiskCopy_t)(char *, char *, unsigned long);
|
typedef void (*ROMDiskCopy_t)(char *, char *, unsigned long);
|
||||||
void RDiskCopy(char *source, char *dest, unsigned long count) {
|
void Copy24(char *source, char *dest, unsigned long count) {
|
||||||
char mode = true32b;
|
char mode = true32b;
|
||||||
SwapMMUMode(&mode);
|
SwapMMUMode(&mode);
|
||||||
BlockMove(source, dest, count);
|
BlockMove(source, dest, count);
|
||||||
@ -58,7 +58,7 @@ OSErr RDiskOpen(IOParamPtr p, DCtlPtr d) {
|
|||||||
if (!d->dCtlStorage) { return openErr; }
|
if (!d->dCtlStorage) { return openErr; }
|
||||||
|
|
||||||
// Allocate space for 24-bit copy routine in system heap and move it there
|
// Allocate space for 24-bit copy routine in system heap and move it there
|
||||||
c->copy24_alloc = NewPtrSys(RDiskCopySize);
|
c->copy24_alloc = NewPtrSys(Copy24Size);
|
||||||
if (!c->copy24_alloc) {
|
if (!c->copy24_alloc) {
|
||||||
if (d->dCtlStorage) {
|
if (d->dCtlStorage) {
|
||||||
HUnlock(d->dCtlStorage);
|
HUnlock(d->dCtlStorage);
|
||||||
@ -66,7 +66,7 @@ OSErr RDiskOpen(IOParamPtr p, DCtlPtr d) {
|
|||||||
}
|
}
|
||||||
return openErr;
|
return openErr;
|
||||||
}
|
}
|
||||||
BlockMove(&RDiskCopy, c->copy24_alloc, RDiskCopySize);
|
BlockMove(&Copy24, c->copy24_alloc, Copy24Size);
|
||||||
c->copy24 = (ROMDiskCopy_t)StripAddress(c->copy24_alloc);
|
c->copy24 = (ROMDiskCopy_t)StripAddress(c->copy24_alloc);
|
||||||
|
|
||||||
// Lock our storage struct and get master pointer
|
// Lock our storage struct and get master pointer
|
||||||
@ -91,7 +91,7 @@ OSErr RDiskOpen(IOParamPtr p, DCtlPtr d) {
|
|||||||
return noErr;
|
return noErr;
|
||||||
}
|
}
|
||||||
|
|
||||||
OSErr RDiskInit(IOParamPtr p, DCtlPtr d, RDiskStorage_t *c) {
|
static OSErr RDiskInit(IOParamPtr p, DCtlPtr d, RDiskStorage_t *c) {
|
||||||
char startup, ram;
|
char startup, ram;
|
||||||
|
|
||||||
// Return if initialized. Otherwise mark init done
|
// Return if initialized. Otherwise mark init done
|
||||||
@ -221,7 +221,7 @@ OSErr RDiskPrime(IOParamPtr p, DCtlPtr d) {
|
|||||||
//FIXME: Should we fail if cmd isn't read or write?
|
//FIXME: Should we fail if cmd isn't read or write?
|
||||||
}
|
}
|
||||||
|
|
||||||
OSErr RDiskAccRun(IOParamPtr p, DCtlPtr d, RDiskStorage_t *c) {
|
static OSErr RDiskAccRun(IOParamPtr p, DCtlPtr d, RDiskStorage_t *c) {
|
||||||
// Disable accRun
|
// Disable accRun
|
||||||
d->dCtlDelay = 0;
|
d->dCtlDelay = 0;
|
||||||
d->dCtlFlags &= ~dNeedTimeMask;
|
d->dCtlFlags &= ~dNeedTimeMask;
|
||||||
|
Loading…
Reference in New Issue
Block a user