mirror of
https://github.com/CTurt/FreeDVDBoot.git
synced 2026-01-14 15:54:55 +00:00
78 lines
3.3 KiB
Makefile
78 lines
3.3 KiB
Makefile
EE_CC = ee-gcc
|
|
EE_LD = ee-ld
|
|
EE_AS = ee-as
|
|
EE_OBJCOPY = ee-objcopy
|
|
|
|
IOP_CC = iop-gcc
|
|
IOP_LD = iop-ld
|
|
IOP_AS = iop-as
|
|
IOP_OBJCOPY = iop-objcopy
|
|
IOP_OBJDUMP = iop-objdump
|
|
|
|
IOP_SYMBOLS = -DREAD_SECTORS_210=$(IOP_READ_SECTORS_210) -DORIGINAL_RETURN_ADDRESS_210=$(IOP_ORIGINAL_RETURN_ADDRESS_210) -DRETURN_ADDRESS_LOCATION_210=$(IOP_RETURN_ADDRESS_LOCATION_210) \
|
|
-DREAD_SECTORS_212=$(IOP_READ_SECTORS_212) -DORIGINAL_RETURN_ADDRESS_212=$(IOP_ORIGINAL_RETURN_ADDRESS_212) -DRETURN_ADDRESS_LOCATION_212=$(IOP_RETURN_ADDRESS_LOCATION_212) \
|
|
-DREAD_SECTORS_213=$(IOP_READ_SECTORS_213) -DORIGINAL_RETURN_ADDRESS_213=$(IOP_ORIGINAL_RETURN_ADDRESS_213) -DRETURN_ADDRESS_LOCATION_213=$(IOP_RETURN_ADDRESS_LOCATION_213) \
|
|
-DREAD_SECTORS_110=$(IOP_READ_SECTORS_110) -DORIGINAL_RETURN_ADDRESS_110=$(IOP_ORIGINAL_RETURN_ADDRESS_110) -DRETURN_ADDRESS_LOCATION_110=$(IOP_RETURN_ADDRESS_LOCATION_110)
|
|
|
|
IOP_CFLAGS = -O2 -G 0 -nostartfiles -nostdlib -ffreestanding -g $(IOP_SYMBOLS)
|
|
|
|
EE_CFLAGS = -O2 -G 0 -nostartfiles -nostdlib -ffreestanding -Wl,-z,max-page-size=0x1
|
|
|
|
IOP_STAGE1_SIZE_210_212 = `stat -c '%s' stage1_210_212.iop.bin`
|
|
IOP_STAGE1_SIZE_213 = `stat -c '%s' stage1_213.iop.bin`
|
|
IOP_PAYLOAD_SIZE = `stat -c '%s' ioppayload.iop.bin`
|
|
|
|
dvd.iso: dvd.base.iso stage1_210_212.iop.bin stage1_213.iop.bin ioppayload.iop.bin
|
|
#genisoimage -udf -o dvd.iso udf/
|
|
# @echo Insert 0x00000048 to offset 0x0818AC in dvd.iso
|
|
# @echo Insert 0x00004000 to offset 0x0818B0 in dvd.iso
|
|
# @echo Insert 0x000B7548 to offset 0x0818F4 in dvd.iso
|
|
|
|
# For now it's easier to just use a base dvd rather than attempting to generate an image and patch it
|
|
cp dvd.base.iso dvd.iso
|
|
|
|
# Return address (2.10 - 2.13) 0x00818f4 = 530676
|
|
printf $(STAGE1_LOAD_ADDRESS_STRING_210_212) | dd of=dvd.iso bs=1 seek=530676 count=4 conv=notrunc
|
|
|
|
# Return address 1.10 (0x000818bc = 530620)
|
|
printf $(STAGE1_LOAD_ADDRESS_STRING_110) | dd of=dvd.iso bs=1 seek=530620 count=4 conv=notrunc
|
|
|
|
# Old toolchains don't support this option, so just copy byte-by-byte...
|
|
# bs=4096 iflag=skip_bytes,count_bytes
|
|
|
|
dd if=stage1_210_212.iop.bin of=dvd.iso bs=1 seek=$(STAGE1_ISO_210_212) count=$(IOP_STAGE1_SIZE_210_212) conv=notrunc
|
|
dd if=stage1_213.iop.bin of=dvd.iso bs=1 seek=$(STAGE1_ISO_213) count=$(IOP_STAGE1_SIZE_213) conv=notrunc
|
|
|
|
# 0x700000 = 7340032
|
|
dd if=ioppayload.iop.bin of=dvd.iso bs=1 seek=7340032 count=$(IOP_PAYLOAD_SIZE) conv=notrunc
|
|
|
|
%.iop.bin: %.iop.elf
|
|
$(IOP_OBJCOPY) -O binary $< $@
|
|
|
|
%.iop.o: %.iop.S
|
|
$(IOP_AS) $< -o $@
|
|
|
|
stage1_210_212.iop.elf: stage1_210_212.iop.S ioppayload.iop.bin
|
|
$(IOP_OBJDUMP) -t ioppayload.iop.elf | grep " _start"
|
|
$(IOP_CC) $< -DENTRY=$(IOP_PAYLOAD_ENTRY) -DIOP_PAYLOAD_SIZE=$(IOP_PAYLOAD_SIZE) $(IOP_CFLAGS) -o $@
|
|
|
|
stage1_213.iop.elf: stage1_213.iop.S ioppayload.iop.bin
|
|
$(IOP_OBJDUMP) -t ioppayload.iop.elf | grep " _start"
|
|
$(IOP_CC) $< -DENTRY=$(IOP_PAYLOAD_ENTRY) -DIOP_PAYLOAD_SIZE=$(IOP_PAYLOAD_SIZE) $(IOP_CFLAGS) -o $@
|
|
|
|
%.iop.elf: %.iop.c eepayload.ee.bin
|
|
$(IOP_CC) -Ttext=$(IOP_PAYLOAD_ADDRESS) -DLOAD_ELF_FROM_OFFSET=$(LOAD_ELF_FROM_OFFSET) ioppayload.iop.c $(IOP_CFLAGS) -o $@
|
|
|
|
|
|
%.ee.bin: %.ee.elf
|
|
$(EE_OBJCOPY) -O binary $< $@ -Wl,-z,max-page-size=0x1
|
|
|
|
%.ee.o: %.ee.S
|
|
$(EE_AS) $< -o $@
|
|
|
|
eepayload.ee.elf: eecrt0.ee.o syscalls.ee.o eepayload.ee.c
|
|
$(EE_CC) -Ttext=$(EE_PAYLOAD_ADDRESS) $^ $(EE_CFLAGS) -o $@
|
|
|
|
clean:
|
|
rm -rf *.elf *.bin *.o dvd.iso
|