New build system
This commit is contained in:
parent
627b879755
commit
5568fe98b1
|
@ -3,3 +3,7 @@ obj/
|
|||
RDiskCP/RDiskCP.rsrc
|
||||
RDiskCP/GW ROM Disk
|
||||
RDiskCP/RDiskCP
|
||||
bin/IIsi/
|
||||
bin/IIci/
|
||||
bin/IIfx/
|
||||
bin/IIxIIcxSE30/
|
||||
|
|
166
Makefile
166
Makefile
|
@ -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
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -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.
7
entry.s
7
entry.s
|
@ -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
|
||||
|
|
33
rdisk.c
33
rdisk.c
|
@ -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
|
||||
|
|
8
rdisk.h
8
rdisk.h
|
@ -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
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue