New build system

This commit is contained in:
Zane Kaminski
2021-07-08 02:08:54 -04:00
parent 627b879755
commit 5568fe98b1
22 changed files with 184 additions and 45 deletions
+4
View File
@@ -3,3 +3,7 @@ obj/
RDiskCP/RDiskCP.rsrc
RDiskCP/GW ROM Disk
RDiskCP/RDiskCP
bin/IIsi/
bin/IIci/
bin/IIfx/
bin/IIxIIcxSE30/
+142 -24
View File
@@ -5,13 +5,22 @@ LD=$(PREFIX)-ld
OBJCOPY=$(PREFIX)-objcopy
OBJDUMP=$(PREFIX)-objdump
all: bin/rom16M_swap.bin obj/rdisk7M5.s obj/driver7M5.s obj/entry_rel.sym obj/driver_abs.sym
all: bin/IIxIIcxSE30/IIxIIcxSE30_8M.bin bin/IIci/IIci_8M.bin bin/IIfx/IIfx_8M.bin bin/IIsi/IIsi_8M.bin bin/GWSys71_8M.bin bin/GWSys6_8M.bin bin/GWSys6T_2M.bin obj/rdisk.s obj/driver.s obj/driver_abs.sym
obj:
mkdir obj
mkdir $@
bin:
mkdir bin
mkdir $@
bin/IIsi: bin
mkdir $@
bin/IIxIIcxSE30: bin
mkdir $@
bin/IIci: bin
mkdir $@
bin/IIfx: bin
mkdir $@
obj/entry.o: entry.s obj
@@ -21,37 +30,146 @@ obj/entry_rel.sym: obj obj/entry.o
$(OBJDUMP) -t obj/entry.o > $@
obj/rdisk7M5.o: rdisk.c obj
$(CC) -Wall -DRDiskSize=7864320 -march=68030 -c -Os $< -o $@
obj/rdisk.o: rdisk.c obj
$(CC) -Wall -march=68030 -c -Os $< -o $@
obj/rdisk7M5.s: obj obj/rdisk7M5.o
$(OBJDUMP) -d obj/rdisk7M5.o > $@
obj/rdisk.s: obj obj/rdisk.o
$(OBJDUMP) -d obj/rdisk.o > $@
obj/driver7M5.o: obj obj/entry.o obj/rdisk7M5.o
$(LD) -Ttext=40851D70 -o $@ obj/entry.o obj/rdisk7M5.o
obj/driver.o: obj obj/entry.o obj/rdisk.o
$(LD) -Ttext=40851D70 -o $@ obj/entry.o obj/rdisk.o
obj/driver7M5.s: obj obj/driver7M5.o
$(OBJDUMP) -d obj/driver7M5.o > $@
obj/driver.s: obj obj/driver.o
$(OBJDUMP) -d obj/driver.o > $@
obj/driver_abs.sym: obj obj/driver7M5.o
$(OBJDUMP) -t obj/driver7M5.o > $@
obj/driver_abs.sym: obj obj/driver.o
$(OBJDUMP) -t obj/driver.o > $@
bin/driver7M5.bin: bin obj/driver7M5.o
$(OBJCOPY) -O binary obj/driver7M5.o $@
bin/driver.bin: bin obj/driver.o
$(OBJCOPY) -O binary obj/driver.o $@
bin/rom8M.bin: bin baserom.bin RDisk7M5.dsk bin bin/driver7M5.bin obj/driver_abs.sym obj/entry_rel.sym
cp baserom.bin $@ # Copy base rom
bin/baserom_romdisk_ramtest.bin: bin roms/baserom.bin bin/driver.bin obj/driver_abs.sym obj/entry_rel.sym
cp roms/baserom.bin $@ # Copy base rom
# Patch driver
dd if=bin/driver7M5.bin of=$@ bs=1 seek=335248 skip=32 conv=notrunc # Copy driver code
dd if=bin/driver.bin of=$@ bs=1 seek=335248 skip=32 conv=notrunc # Copy driver code
printf '\x78' | dd of=$@ bs=1 seek=335168 count=1 conv=notrunc # Set resource flags
printf '\x4F' | dd of=$@ bs=1 seek=335216 count=1 conv=notrunc # Set driver flags
cat obj/entry_rel.sym | grep "DOpen" | cut -c5-8 | xxd -r -p - | dd of=$@ bs=1 seek=335224 count=2 conv=notrunc
cat obj/entry_rel.sym | grep "DPrime" | cut -c5-8 | xxd -r -p - | dd of=$@ bs=1 seek=335226 count=2 conv=notrunc
cat obj/entry_rel.sym | grep "DControl" | cut -c5-8 | xxd -r -p - | dd of=$@ bs=1 seek=335228 count=2 conv=notrunc
cat obj/entry_rel.sym | grep "DStatus" | cut -c5-8 | xxd -r -p - | dd of=$@ bs=1 seek=335230 count=2 conv=notrunc
cat obj/entry_rel.sym | grep "DClose" | cut -c5-8 | xxd -r -p - | dd of=$@ bs=1 seek=335232 count=2 conv=notrunc
dd if=RDisk7M5.dsk of=$@ bs=1024 seek=512 count=7680 conv=notrunc # copy disk image
cat obj/entry_rel.sym | grep "[0-9]\s*DOpen" | cut -c5-8 | xxd -r -p - | dd of=$@ bs=1 seek=335224 count=2 conv=notrunc
cat obj/entry_rel.sym | grep "[0-9]\s*DPrime" | cut -c5-8 | xxd -r -p - | dd of=$@ bs=1 seek=335226 count=2 conv=notrunc
cat obj/entry_rel.sym | grep "[0-9]\s*DControl" | cut -c5-8 | xxd -r -p - | dd of=$@ bs=1 seek=335228 count=2 conv=notrunc
cat obj/entry_rel.sym | grep "[0-9]\s*DStatus" | cut -c5-8 | xxd -r -p - | dd of=$@ bs=1 seek=335230 count=2 conv=notrunc
cat obj/entry_rel.sym | grep "[0-9]\s*DClose" | cut -c5-8 | xxd -r -p - | dd of=$@ bs=1 seek=335232 count=2 conv=notrunc
bin/baserom_romdisk_noramtest.bin: bin bin/baserom_romdisk_ramtest.bin
cp bin/baserom_romdisk_ramtest.bin $@ # Copy base rom
# Disable RAM test
printf '\x4E\xD6' | dd of=$@ bs=1 seek=288736 count=2 conv=notrunc
printf '\x4E\xD6' | dd of=$@ bs=1 seek=289016 count=2 conv=notrunc
bin/GWSys71_8M.bin: bin bin/baserom_romdisk_noramtest.bin disks/RDisk7M5.dsk
# Copy base rom with ROM disk driver
cp bin/baserom_romdisk_noramtest.bin $@
# Patch ROM disk driver parameter table
printf '\x00\x01\x2A\x29' | dd of=$@ bs=1 seek=335260 count=4 conv=notrunc # Patch CDR patch offset
printf '\x40\x89\x2A\x14' | dd of=$@ bs=1 seek=335268 count=4 conv=notrunc # Patch CDR name address
printf '\x44' | dd of=$@ bs=1 seek=335273 count=1 conv=notrunc # Patch CDR disable byte
printf '\x00\x78\x00\x00' | dd of=$@ bs=1 seek=335276 count=4 conv=notrunc # Patch ROM disk size
# Copy ROM disk image
dd if=disks/RDisk7M5.dsk of=$@ bs=1024 seek=512 conv=notrunc
# Compute checksum
#python checksum.py $@ | cut -c3-10 | xxd -r -p - | dd of=$@ bs=1 seek=0 count=4 conv=notrunc
printf '\x36\x9D\x3E\x51' | dd of=$@ bs=1 seek=0 count=4 conv=notrunc # Insert fake checksum (BMoW)
bin/GWSys6_4M.bin: bin bin/baserom_romdisk_noramtest.bin disks/RDisk3M5.dsk
# Copy base rom with ROM disk driver
cp bin/baserom_romdisk_noramtest.bin $@
# Patch ROM disk driver parameter table
printf '\xFF\xFF\xFF\xFF' | dd of=$@ bs=1 seek=335260 count=4 conv=notrunc # Patch CDR patch offset
printf '\x00\x00\x00\x00' | dd of=$@ bs=1 seek=335268 count=4 conv=notrunc # Patch CDR name address
printf '\x44' | dd of=$@ bs=1 seek=335273 count=1 conv=notrunc # Patch CDR disable byte
printf '\x00\x38\x00\x00' | dd of=$@ bs=1 seek=335276 count=4 conv=notrunc # Patch ROM disk size
# Copy ROM disk image
dd if=disks/RDisk3M5.dsk of=$@ bs=1024 seek=512 conv=notrunc
# Compute checksum
#python checksum.py $@ | cut -c3-10 | xxd -r -p - | dd of=$@ bs=1 seek=0 count=4 conv=notrunc
printf '\x36\x9D\x3E\x51' | dd of=$@ bs=1 seek=0 count=4 conv=notrunc # Insert fake checksum (BMoW)
bin/GWSys6_8M.bin: bin/GWSys6_4M.bin
cat bin/GWSys6_4M.bin > $@
cat bin/GWSys6_4M.bin >> $@
bin/GWSys6T_2M.bin: bin bin/baserom_romdisk_ramtest.bin disks/RDisk1M5.dsk
# Copy base rom with ROM disk driver
cp bin/baserom_romdisk_ramtest.bin $@
# Patch ROM disk driver parameter table
printf '\xFF\xFF\xFF\xFF' | dd of=$@ bs=1 seek=335260 count=4 conv=notrunc # Patch CDR patch offset
printf '\x00\x00\x00\x00' | dd of=$@ bs=1 seek=335268 count=4 conv=notrunc # Patch CDR name address
printf '\x44' | dd of=$@ bs=1 seek=335273 count=1 conv=notrunc # Patch CDR disable byte
printf '\x00\x18\x00\x00' | dd of=$@ bs=1 seek=335276 count=4 conv=notrunc # Patch ROM disk size
# Copy ROM disk image
dd if=disks/RDisk1M5.dsk of=$@ bs=1024 seek=512 conv=notrunc
# Compute checksum
#python checksum.py $@ | cut -c3-10 | xxd -r -p - | dd of=$@ bs=1 seek=0 count=4 conv=notrunc
printf '\x36\x9D\x3E\x51' | dd of=$@ bs=1 seek=0 count=4 conv=notrunc # Insert fake checksum (BMoW)
bin/IIxIIcxSE30/IIxIIcxSE30_512k.bin: bin/IIxIIcxSE30 roms/IIxIIcxSE30.bin
cat roms/IIxIIcxSE30.bin > $@; cat roms/IIxIIcxSE30.bin >> $@
bin/IIxIIcxSE30/IIxIIcxSE30_1M.bin: bin/IIxIIcxSE30 bin/IIxIIcxSE30/IIxIIcxSE30_512k.bin
cat bin/IIxIIcxSE30/IIxIIcxSE30_512k.bin > $@; cat bin/IIxIIcxSE30/IIxIIcxSE30_512k.bin >> $@
bin/IIxIIcxSE30/IIxIIcxSE30_2M.bin: bin/IIxIIcxSE30 bin/IIxIIcxSE30/IIxIIcxSE30_1M.bin
cat bin/IIxIIcxSE30/IIxIIcxSE30_1M.bin > $@; cat bin/IIxIIcxSE30/IIxIIcxSE30_1M.bin >> $@
bin/IIxIIcxSE30/IIxIIcxSE30_4M.bin: bin/IIxIIcxSE30 bin/IIxIIcxSE30/IIxIIcxSE30_2M.bin
cat bin/IIxIIcxSE30/IIxIIcxSE30_2M.bin > $@; cat bin/IIxIIcxSE30/IIxIIcxSE30_2M.bin >> $@
bin/IIxIIcxSE30/IIxIIcxSE30_8M.bin: bin/IIxIIcxSE30 bin/IIxIIcxSE30/IIxIIcxSE30_4M.bin
cat bin/IIxIIcxSE30/IIxIIcxSE30_4M.bin > $@; cat bin/IIxIIcxSE30/IIxIIcxSE30_4M.bin >> $@
bin/IIci/IIci_1M.bin: bin/IIci roms/IIci.bin
cat roms/IIci.bin > $@; cat roms/IIci.bin >> $@
bin/IIci/IIci_2M.bin: bin/IIci bin/IIci/IIci_1M.bin
cat bin/IIci/IIci_1M.bin > $@; cat bin/IIci/IIci_1M.bin >> $@
bin/IIci/IIci_4M.bin: bin/IIci bin/IIci/IIci_2M.bin
cat bin/IIci/IIci_2M.bin > $@; cat bin/IIci/IIci_2M.bin >> $@
bin/IIci/IIci_8M.bin: bin/IIci bin/IIci/IIci_4M.bin
cat bin/IIci/IIci_4M.bin > $@; cat bin/IIci/IIci_4M.bin >> $@
bin/IIfx/IIfx_1M.bin: bin/IIfx roms/IIfx.bin
cat roms/IIfx.bin > $@; cat roms/IIfx.bin >> $@
bin/IIfx/IIfx_2M.bin: bin/IIfx bin/IIfx/IIfx_1M.bin
cat bin/IIfx/IIfx_1M.bin > $@; cat bin/IIfx/IIfx_1M.bin >> $@
bin/IIfx/IIfx_4M.bin: bin/IIfx bin/IIfx/IIfx_2M.bin
cat bin/IIfx/IIfx_2M.bin > $@; cat bin/IIfx/IIfx_2M.bin >> $@
bin/IIfx/IIfx_8M.bin: bin/IIfx bin/IIfx/IIfx_4M.bin
cat bin/IIfx/IIfx_4M.bin > $@; cat bin/IIfx/IIfx_4M.bin >> $@
bin/IIsi/IIsi_1M.bin: bin/IIsi roms/IIsi.bin
cat roms/IIsi.bin > $@; cat roms/IIsi.bin >> $@
bin/IIsi/IIsi_2M.bin: bin/IIsi bin/IIsi/IIsi_1M.bin
cat bin/IIsi/IIsi_1M.bin > $@; cat bin/IIsi/IIsi_1M.bin >> $@
bin/IIsi/IIsi_4M.bin: bin/IIsi bin/IIsi/IIsi_2M.bin
cat bin/IIsi/IIsi_2M.bin > $@; cat bin/IIsi/IIsi_2M.bin >> $@
bin/IIsi/IIsi_8M.bin: bin/IIsi bin/IIsi/IIsi_4M.bin
cat bin/IIsi/IIsi_4M.bin > $@; cat bin/IIsi/IIsi_4M.bin >> $@
.PHONY: clean
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
Executable
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+11
View File
@@ -0,0 +1,11 @@
import sys
import struct
with open(sys.argv[1], mode='rb') as file:
file.read(4) # discard first four bytes
rombin = file.read() # read rest of file
cksum = 0
for i in struct.unpack('>' + str(len(rombin)/2) + 'H', rombin):
cksum += i;
cksum &= 0xFFFFFFFF
print(hex(cksum))
Binary file not shown.
Binary file not shown.
View File
+5 -2
View File
@@ -21,11 +21,11 @@ RDiskSig:
RDiskDBGDisPos:
dc.l 0x00000031
RDiskCDRDisPos:
dc.l 0x00012A29
dc.l 0xFFFFFFFF
RDiskDBGNameAddr:
dc.l 0x4088002A
RDiskCDRNameAddr:
dc.l 0x40892A14
dc.l 0x00000000
RDiskDBGDisByte:
dc.b 0x44
RDiskCDRDisByte:
@@ -34,6 +34,9 @@ RDiskRAMRequired:
.ascii "16"
.align 4
RDiskSize:
dc.l 0x00780000
DOpen:
movem.l %A0-%A1, -(%SP)
bsr RDOpen
+16 -17
View File
@@ -118,6 +118,10 @@ OSErr RDOpen(IOParamPtr p, DCtlPtr d) {
// Find first available drive number
drvNum = RDFindDrvNum();
// Get debug and CD-ROM disable settings from ROM table
c->dbgDisByte = RDiskDBGDisByte;
c->cdrDisByte = RDiskCDRDisByte;
// Set drive status
//c->status.track = 0;
c->status.writeProt = -1; // nonzero is write protected
@@ -182,24 +186,19 @@ static void RDInit(IOParamPtr p, DCtlPtr d, RDiskStorage_t *c) {
}
}
// Get debug and CD-ROM disable settings from ROM table
c->dbgDisPos = *(long*)0x40851D98;
c->cdrDisPos = *(long*)0x40851D9C;
c->dbgDisByte = *(char*)0x40851DA8;
c->cdrDisByte = *(char*)0x40851DA9;
// Patch
if (c->dbgDisPos < RDiskSize) {
if (RDiskDBGDisPos < RDiskSize) {
if (c->ramdisk && !dbgEN) {
poke24(c->ramdisk + c->dbgDisPos, c->dbgDisByte);
poke24(c->ramdisk + RDiskDBGDisPos, c->dbgDisByte);
} else if (dbgEN) {
peek24(RDiskBuf + c->dbgDisPos, c->dbgDisByte);
peek24(RDiskBuf + RDiskDBGDisPos, c->dbgDisByte);
}
}
if (c->cdrDisPos < RDiskSize) {
if (RDiskCDRDisPos < RDiskSize) {
if (c->ramdisk && !cdrEN) {
poke24(c->ramdisk + c->cdrDisPos, c->cdrDisByte);
poke24(c->ramdisk + RDiskCDRDisPos, c->cdrDisByte);
} else if (cdrEN) {
peek24(RDiskBuf + c->cdrDisPos, c->cdrDisByte);
peek24(RDiskBuf + RDiskCDRDisPos, c->cdrDisByte);
}
}
@@ -242,13 +241,13 @@ OSErr RDPrime(IOParamPtr p, DCtlPtr d) {
// Read from disk into buffer.
if (*MMU32bit) { BlockMove(disk, p->ioBuffer, p->ioReqCount); }
else { copy24(disk, StripAddress(p->ioBuffer), p->ioReqCount); }
if (!c->ramdisk && c->dbgDisPos >= d->dCtlPosition &&
c->dbgDisPos < d->dCtlPosition + p->ioReqCount) {
p->ioBuffer[c->dbgDisPos - d->dCtlPosition] = c->dbgDisByte;
if (!c->ramdisk && RDiskDBGDisPos >= d->dCtlPosition &&
RDiskDBGDisPos < d->dCtlPosition + p->ioReqCount) {
p->ioBuffer[RDiskDBGDisPos - d->dCtlPosition] = c->dbgDisByte;
}
if (!c->ramdisk && c->cdrDisPos >= d->dCtlPosition &&
c->cdrDisPos < d->dCtlPosition + p->ioReqCount) {
p->ioBuffer[c->cdrDisPos - d->dCtlPosition] = c->cdrDisByte;
if (!c->ramdisk && RDiskCDRDisPos >= d->dCtlPosition &&
RDiskCDRDisPos < d->dCtlPosition + p->ioReqCount) {
p->ioBuffer[RDiskCDRDisPos - d->dCtlPosition] = c->cdrDisByte;
}
} else if (cmd == aWrCmd) { // Write
// Fail if write protected or RAM disk buffer not set up
+6 -2
View File
@@ -6,6 +6,12 @@
#define MemTop ((Ptr*)0x108)
#define MMU32bit ((char*)0xCB2)
#define RDiskDBGDisPos (*(const unsigned long*)0x40851D98)
#define RDiskCDRDisPos (*(const unsigned long*)0x40851D9C)
#define RDiskDBGDisByte (*(const char*)0x40851DA8)
#define RDiskCDRDisByte (*(const char*)0x40851DA9)
#define RDiskSize (*(const unsigned long*)0x40851DAC)
#define RDISK_COMPRESS_ICON_ENABLE
#pragma parameter __D0 RDiskReadXPRAM(__D0, __D1, __A0)
@@ -22,8 +28,6 @@ typedef struct RDiskStorage_s {
DrvSts2 status;
char initialized;
Ptr ramdisk;
long dbgDisPos;
long cdrDisPos;
char dbgDisByte;
char cdrDisByte;
#ifdef RDISK_COMPRESS_ICON_ENABLE
Executable
BIN
View File
Binary file not shown.
Executable
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
View File