mirror of
https://frontier.innolan.net/github/AmigaExamples.git
synced 2026-09-12 04:12:00 +00:00
Shrinkler refactor
This commit is contained in:
+31
-9
@@ -4,25 +4,40 @@ HOST_WARNINGS=-pedantic-errors -Wfatal-errors -Wall -Werror -Wextra -Wno-unused-
|
||||
HOST_CFLAGS=$(HOST_WARNINGS)
|
||||
IMAGECONDIR=../tools/imagecon
|
||||
IMAGECON=$(IMAGECONDIR)/out/imagecon
|
||||
SHRINKLERDIR=../tools/external/shrinkler
|
||||
SHRINKLEREXE=$(SHRINKLERDIR)/build/native/Shrinkler
|
||||
RESIZEDIR=../tools/resize
|
||||
RESIZE=$(RESIZEDIR)/out/resize
|
||||
A500_RUN_SCRIPT=~/Google\ Drive/Amiga/amiga500.sh
|
||||
A600_RUN_SCRIPT=~/Google\ Drive/Amiga/amiga600.sh
|
||||
|
||||
ifndef SHRINKLER
|
||||
SHRINKLER=0
|
||||
endif
|
||||
|
||||
ifndef BASE_ADDRESS
|
||||
BASE_ADDRESS=70000
|
||||
endif
|
||||
|
||||
ifndef DECOMPRESS_ADDRESS
|
||||
DECOMPRESS_ADDRESS=10000
|
||||
endif
|
||||
|
||||
ifndef RUN_SCRIPT
|
||||
RUN_SCRIPT=$(A500_RUN_SCRIPT)
|
||||
endif
|
||||
|
||||
ifndef BOOTBLOCK_ASM
|
||||
|
||||
ifeq ($(SHRINKLER),1)
|
||||
BOOTBLOCK_ASM=../shared/shrinkler_bootblock.s
|
||||
PROGRAM_BIN=out/shrunk.bin
|
||||
VASM_EXTRA_BOOTBLOCK_ARGS=-DDECOMPRESS_ADDRESS="\$$$(DECOMPRESS_ADDRESS)" -DSHRINKLER=$(SHRINKLER)
|
||||
else
|
||||
BOOTBLOCK_ASM=../shared/bootblock.s
|
||||
PROGRAM_BIN=out/main.bin
|
||||
VASM_EXTRA_BOOTBLOCK_ARGS=
|
||||
endif
|
||||
|
||||
ifndef PROGRAM_BIN
|
||||
PROGRAM_BIN=out/main.bin
|
||||
endif
|
||||
|
||||
all: bin out $(MAKEADF) $(FLOPPY)
|
||||
|
||||
@@ -50,6 +65,9 @@ ic:
|
||||
$(IMAGECON):
|
||||
make -C $(IMAGECONDIR)
|
||||
|
||||
$(SHRINKLEREXE):
|
||||
make -C $(SHRINKLERDIR)
|
||||
|
||||
$(RESIZE):
|
||||
make -C $(RESIZEDIR)
|
||||
|
||||
@@ -68,14 +86,18 @@ out/bootblock.o: $(BOOTBLOCK_ASM) $(PROGRAM_BIN)
|
||||
vasmm68k_mot $(VASM_EXTRA_BOOTBLOCK_ARGS) -DBASE_ADDRESS="\$$$(BASE_ADDRESS)" -Fhunk -phxass -opt-fconst -nowarn=62 -quiet $< -o $@ -I/usr/local/amiga/os-include
|
||||
|
||||
out/main.o: $(MODULE) $(EXTRA)
|
||||
@# -v
|
||||
@#vc -c $< -o $@
|
||||
@#-showopt -no-opt
|
||||
vasmm68k_mot $(VASM_EXTRA_ARGS) -Fhunk -phxass -opt-fconst -nowarn=62 -quiet $< -o $@ -I/usr/local/amiga/os-include
|
||||
|
||||
out/main.bin: out/main.o $(EXTRAOBJS)
|
||||
out/%.o: %.s
|
||||
vasmm68k_mot $(VASM_EXTRA_ARGS) -Fhunk -phxass -opt-fconst -nowarn=62 -quiet $< -o $@ -I/usr/local/amiga/os-include
|
||||
|
||||
out/main.bin: out/main.o $(OBJS)
|
||||
@#-T ../link.script
|
||||
vlink -Ttext 0x$(BASE_ADDRESS) -brawbin1 $< $(EXTRAOBJS) -o $@
|
||||
vlink -Ttext 0x$(BASE_ADDRESS) -brawbin1 $< $(OBJS) -o $@
|
||||
|
||||
|
||||
out/shrunk.bin: $(SHRINKLER_EXE) out/main.bin
|
||||
$(SHRINKLEREXE) -d out/main.bin out/shrunk.bin
|
||||
|
||||
clean:
|
||||
rm -rf out bin *~
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
include "../include/registers.i"
|
||||
include "exec/io.i"
|
||||
include "lvo/exec_lib.i"
|
||||
include "devices/trackdisk.i"
|
||||
|
||||
|
||||
bootblock:
|
||||
dc.b "DOS",0
|
||||
dc.l 0
|
||||
dc.l 880
|
||||
|
||||
|
||||
BootEntry:
|
||||
;; a6 = exec base
|
||||
;; a1 = trackdisk.device I/O request pointer
|
||||
|
||||
if SHRINKLER == 1
|
||||
lea DECOMPRESS_ADDRESS,a5 ; load shrinkler compressed data here
|
||||
else
|
||||
lea BASE_ADDRESS,a5 ; main.s entry point
|
||||
endif
|
||||
|
||||
;; Load the progam from the floppy using trackdisk.device
|
||||
|
||||
move.l #mainEnd-mainStart,IO_LENGTH(a1)
|
||||
move.l a5,IO_DATA(a1)
|
||||
move.l #mainStart-bootblock,IO_OFFSET(a1)
|
||||
jsr _LVODoIO(a6)
|
||||
|
||||
;; Turn off drive motor
|
||||
move.l #0,IO_LENGTH(a1)
|
||||
move.w #TD_MOTOR,IO_COMMAND(a1)
|
||||
jsr _LVODoIO(a6)
|
||||
|
||||
if SHRINKLER == 0
|
||||
|
||||
jmp (a5) ; -> main.s entry point
|
||||
|
||||
else ; SHRINKER == 1
|
||||
|
||||
; a0 = compressed data
|
||||
lea DECOMPRESS_ADDRESS,a0
|
||||
; a1 = decompressed data destination
|
||||
lea BASE_ADDRESS,a1
|
||||
; a2 = progress callback, can be zero if no callback is desired.
|
||||
lea Callback(pc),a2
|
||||
bsr ShrinklerDecompress ; -> decompress!
|
||||
lea BASE_ADDRESS,a5
|
||||
jmp (a5) ; -> main.s entry point
|
||||
|
||||
include "../tools/external/shrinkler/ShrinklerDecompress.S"
|
||||
|
||||
Callback:
|
||||
;; d0 = Number of bytes decompressed so far
|
||||
;; a0 = Callback argument
|
||||
move.l a6,-(sp)
|
||||
lea CUSTOM,a6
|
||||
move.w d0,COLOR00(a6) ; Set wild background colors as we decompress
|
||||
move.l (sp)+,a6
|
||||
rts
|
||||
|
||||
endif ; SHRINKLER == 1
|
||||
|
||||
;; Pad the remainder of the bootblock
|
||||
cnop 0,1024
|
||||
|
||||
mainStart:
|
||||
if SHRINKLER == 1
|
||||
|
||||
incbin "out/shrunk.bin"
|
||||
|
||||
else ; SHRINKLER == 0
|
||||
|
||||
incbin "out/main.bin"
|
||||
|
||||
endif ; SHRINKLER == 0
|
||||
cnop 0,512
|
||||
mainEnd:
|
||||
end
|
||||
Reference in New Issue
Block a user