export PATH := tools:../../link/tools/:$(PATH) SHELL = /bin/bash BITNAX = bitnax D64WRITE = d64write X64 = x64 MAKE_FLAGS = RELEASE=1 .PHONY: all toolchain vice vice1 all: toolchain image1.d64 toolchain: $(MAKE) -C ../../../tool/c6510 $(MAKE) -C ../../../tool/acme/src $(MAKE) -C ../../../tool/dasm $(MAKE) -C ../../../tool/bitfire $(MAKE) -C ../../../tool/bitnax $(MAKE) -C ../../../tool/dreamass cp ../../../tool/c6510/c6510 tools/ cp ../../../tool/acme/src/acme tools/ cp ../../../tool/dasm/dasm tools/ cp ../../../tool/dreamass/dreamass tools/ cp ../../../tool/bitfire/d64write tools/ cp ../../../tool/bitnax/bitnax tools/ vice: all $(X64) -pal -autostart "image1.d64:*" -truedrive -model c64c vice1: toolchain image1.d64 $(X64) -pal -autostart "image1.d64:*" -truedrive -model c64c ############################################################### image1.d64: comaland.prg bootside1.prg tune1.prg rasterrot.prg explode.prg bitmap.prg bitmap_fadeout2.prg shadowscroll.prg shadow_fadeout.prg plotballs_fadein.prg plotballs.prg plotballs_fadeout.prg comalanddef.prg escos.prg note.prg $(D64WRITE) -c $@ --side 1 -a 49 ../bitbreaker/dirart/side1.prg \ --boot comaland.prg \ -b bootside1.prg \ -b rasterrot.prg \ -b tune1.prg \ -b explode.prg \ -b bitmap1.prg \ -b bitmap2.prg \ -b bitmap3.prg \ -b bitmap4.prg \ -b bitmap5.prg \ -b bitmap_fadeout2.prg \ -b comalanddef1.prg \ -b comalanddef2.prg \ -b plotballs_fadein.prg \ -b plotballs.prg \ -b plotballs_fadeout.prg \ -b shadowscroll1.prg \ -b shadowscroll2.prg \ -b shadowscroll3.prg \ -b shadow_fadeout.prg \ -b escos1.prg \ -b escos2.prg \ -b escos3.prg \ -s "erotic note" ##################### SIDE 1 ################################## note.prg: force_look cd ../Axis/note/; $(MAKE) $(MAKE_FLAGS) $(BITNAX) --bitfire --sfx 0x4000 -o "erotic note" ../Axis/note/note comaland.prg: force_look cd ../bootloader/stage1/; $(MAKE) $(MAKE_FLAGS) link_exit=0x0100 SIDE=1 $(BITNAX) --sfx 0x0900 -o $@ ../bootloader/stage1/stage1 bootside1.prg: force_look cd ../bootloader/stage2/; $(MAKE) $(MAKE_FLAGS) link_exit=0x2000 SIDE=1 $(BITNAX) --bitfire -o $@ ../bootloader/stage2/stage2 tune1.prg: ../../Music/dEViLOCk/tune_side10x900.prg $(BITNAX) --bitfire -o $@ --load-addr 0xe000 $^ rasterrot.prg: force_look cd ../Axis/RasterRotate/; $(MAKE) $(MAKE_FLAGS) link_exit=8192 $(BITNAX) --bitfire -o $@ ../Axis/RasterRotate/rasterrot explode.prg: force_look cd ../Mirage/FontExplodeMultiplex; $(MAKE) $(MAKE_FLAGS) link_exit=0x300c $(BITNAX) --bitfire -o $@ ../Mirage/FontExplodeMultiplex/explode bitmap.prg: force_look cd ../Lavazza/bitmapscroller/; $(MAKE) $(MAKE_FLAGS) link_exit=0x0400 $(BITNAX) --bitfire -o $(basename $@)1.prg --cut-input-addr 0x3000 0xffff ../Lavazza/bitmapscroller/bitmap $(BITNAX) --bitfire -o $(basename $@)2.prg ../Lavazza/bitmapscroller/part2.prg $(BITNAX) --bitfire -o $(basename $@)3.prg ../Lavazza/bitmapscroller/part3.prg $(BITNAX) --bitfire -o $(basename $@)4.prg ../Lavazza/bitmapscroller/part4.prg $(BITNAX) --bitfire -o $(basename $@)5.prg ../Lavazza/bitmapscroller/part5.prg bitmap_fadeout2.prg: force_look cd ../CRT/bitmap_fadeout2/; $(MAKE) $(MAKE_FLAGS) link_exit=0x6400 $(BITNAX) --bitfire -o $@ ../CRT/bitmap_fadeout2/bitmap_fadeout2 comalanddef.prg: force_look cd ../Bob/bob_yazoo/; $(MAKE) $(MAKE_FLAGS) link_exit=0xf000; $(BITNAX) --bitfire -o $(basename $@)1.prg --cut-input-addr 0xbff8 0xffff --load-addr 0xe400 ../Bob/bob_yazoo/comalanddef $(BITNAX) --bitfire -o $(basename $@)2.prg --cut-input-addr 0x2000 0xbff8 ../Bob/bob_yazoo/comalanddef plotballs_fadein.prg: force_look cd ../bitbreaker/plotball_fadein/; $(MAKE) $(MAKE_FLAGS) link_exit=0x4000; $(BITNAX) --bitfire -o $@ --load-addr 0x9b00 ../bitbreaker/plotball_fadein/plotball_fadein plotballs.prg: force_look cd ../bitbreaker/plotballs/; $(MAKE) $(MAKE_FLAGS) link_exit=0x0400; $(BITNAX) --bitfire -o $@ ../bitbreaker/plotballs/plotballs plotballs_fadeout.prg: force_look cd ../bitbreaker/plotball_fadeout/; $(MAKE) $(MAKE_FLAGS) link_exit=0x2000; $(BITNAX) --bitfire -o $@ ../bitbreaker/plotball_fadeout/plotball_fadeout shadowscroll.prg: force_look cd ../CRT/shadowscroll; $(MAKE) $(MAKE_FLAGS) link_exit=0x0400 $(BITNAX) --bitfire -o $(basename $@)1.prg --cut-input-addr 0xcff0 0xffff ../CRT/shadowscroll/shadowscroll $(BITNAX) --bitfire -o $(basename $@)2.prg --cut-input-addr 0x2000 0xbff8 ../CRT/shadowscroll/shadowscroll $(BITNAX) --bitfire -o $(basename $@)3.prg --cut-input-addr 0xbff8 0xcff0 ../CRT/shadowscroll/shadowscroll shadow_fadeout.prg: force_look cd ../CRT/shadow_fadeout/; $(MAKE) $(MAKE_FLAGS) link_exit=0x2000 $(BITNAX) --bitfire -o $@ ../CRT/shadow_fadeout/shadow_fadeout escos.prg: force_look cd ../Swallow/escos_scroll; $(MAKE) $(MAKE_FLAGS) link_exit=0x0100 $(BITNAX) --bitfire -o $(basename $@)1.prg --cut-input-addr 0xbff0 0xffff --load-addr 0xe400 ../Swallow/escos_scroll/escos $(BITNAX) --bitfire -o $(basename $@)2.prg --cut-input-addr 0x2000 0xbff0 ../Swallow/escos_scroll/escos cp ../Swallow/escos_scroll/low.prg $(basename $@)3.prg ############################################################### clean: -rm *.prg *.d64 -rm ../Axis/note/note -rm ../bootloader/stage1/stage1 -rm ../bootloader/stage2/stage2 #side1 -rm ../Axis/RasterRotate/rasterrot -rm ../Lavazza/bitmapscroller/bitmap -rm ../CRT/bitmap_fadeout2/bitmap_fadeout2 -rm ../CRT/shadowscroll/shadowscroll -rm ../CRT/shadow_fadeout/shadow_fadeout -rm ../bitbreaker/plotball_fadein/plotball_fadein -rm ../bitbreaker/plotballs/plotballs -rm ../bitbreaker/plotball_fadeout/plotball_fadeout -rm ../Mirage/FontExplodeMultiplex/explode -rm ../Swallow/escos_scroll/escos -rm ../Bob/bob_yazoo/comalanddef -rm "erotic note" #$(MAKE) -C ../../../tool/c6510 clean #$(MAKE) -C ../../../tool/acme/src clean #$(MAKE) -C ../../../tool/dasm clean #$(MAKE) -C ../../../tool/bitfire clean #$(MAKE) -C ../../../tool/bitnax clean #$(MAKE) -C ../../../tool/dreamass clean force_look: @true
ACME = acme ACMEOPT = -v1 -f cbm .PHONY: clean all: bumble bumble: afli.asm bumble_pic.prg ifdef RELEASE ${ACME} ${ACMEOPT} -DRELEASE=1 -Dlink_exit=$(link_exit) -o $@ $< else ${ACME} ${ACMEOPT} -o $@.prg $< ../../../../tool/bitnax/bitnax --sfx 0x9000 -o $@.prg $@.prg endif clean: -rm bumble bumble.prg
!ifdef RELEASE { ;reset frame counter lda #$00 sta link_frame_count+0 sta link_frame_count+1 ;load + depack some part jsr link_loadnext_uncr ;load some part jsr link_loadnext_raw !ifdef WAIT_FRAME_COUNTER { ;sync to frame counter +wait_frame_count $0200 } else { ;or wait for a trigger from your effect if you are sure it takes longer than loading trig lda #$00 beq trig } ;fadeout the effect jsr fadeout ;unlink irq to resident irq handler +link_player_irq ;depack last part loaded and start it +link_uncr_jmp link_exit }
startupFile = "Source/Fx/Intro/Startup.s" d64image = "Image\RGB (A).d64" d64diskname = " R-G-B " d64diskid = " (F) " interleave = 5 addSourceFile "Source/DemoSystem.s", "", "", -1 addSourceFile "Source/Fx/Intro/Startup.s", "Source/DemoSystem.s", "00", -1 addSourceFile "Source/Fx/Intro/FadeOutChars.s", "Source/DemoSystem.s", "FC", -1 addSourceFile "Source/Fx/Intro/BasicScreenFade.s", "Source/DemoSystem.s", "BF", -1 addSourceFile "Source/Fx/Intro/X2014.s", "Source/DemoSystem.s", "X2", -1 addSourceFile "Source/Fx/Intro/Metaballs.s", "Source/DemoSystem.s", "MB", -1 addSourceFile "Source/Fx/Intro/MetaballsScreens.s", "Source/DemoSystem.s", "MS", -1 addSourceFile "Source/Fx/Intro/Rgb.s", "Source/DemoSystem.s", "RG", -1 addSourceFile "Source/Fx/Ext/Lars/Trees/Trees1.s", "Source/Fx/Ext/Lars/Trees/Trees.s", "L1", -1 addSourceFile "Source/Fx/Ext/Lars/Trees/Trees2.s", "Source/Fx/Ext/Lars/Trees/Trees.s", "L2", -1 addSourceFile "Source/Fx/Ext/Lars/Trees/Trees3.s", "Source/Fx/Ext/Lars/Trees/Trees.s", "L3", -1 addSourceFile "Source/Fx/Ext/Lars/Trees/Trees4.s", "Source/Fx/Ext/Lars/Trees/Trees.s", "L4", 64
I definitely think the future of build scripting lies in an imperative approach. Waiting for someone to do it right! :-)
I'm using coroutines myself (with macros)
jsr task_init
jsr task_handler
.include "gameoverscreen.inc" .include "screen.inc" .include "task.inc" .include "mymacros.s" .include "globals.inc" line1_y = 10 line2_y = line1_y + 2 line3_y = line1_y + 4 line4_y = line1_y + 6 jumpman_sprite=global_bank+$2000 jumpman_dead = 56 gameoverscreen_run: jsr screen_clear lda #0 jsr screen_fillcolorram ldx #line1_y ldy #0 jsr screen_set_cursor_pos ldax #gameover1 jsr screen_print_centered ldx #line2_y ldy #0 jsr screen_set_cursor_pos ldax #gameover2 jsr screen_print_centered ldx #line3_y ldy #0 jsr screen_set_cursor_pos ldax #gameover3 jsr screen_print_centered ldx #line4_y ldy #0 jsr screen_set_cursor_pos ldax #gameover4 jsr screen_print_centered TASK_ADD gameoverscreen_task, #0, #$80 TASK_WAITFOR gameoverscreen_task rts gameoverscreen_task: ldx #156 ldy #180 stx $d000 sty $d001 lda #$02 sta $d025 lda #$04 sta $d026 lda #1 sta $d027 lda #0 sta $d01b sta $d010 lda #1 sta $d015 sta $d017 sta $d01c sta $d01d lda #(jumpman_sprite&$3fff/64)+jumpman_dead sta global_screen+$03f8 lda #((global_screen&$3fff)>>6)|((global_font&$3fff)>>10) sta $d018 lda #((global_bank>>14)^3) sta $dd00 lda #$c8 sta $d016 lda #$1b sta $d011 TASK_ADD sprite_task, #0, #0 TASK_ADD flashline_task, #line1_y, #80 TASK_SLEEP #100 TASK_ADD flashline_task, #line2_y, #80 TASK_SLEEP #100 TASK_ADD flashline_task, #line3_y, #80 TASK_SLEEP #100 TASK_ADD flashline_task, #line4_y, #80 TASK_SLEEP #200 lda #6 jsr global_tune_setfade TASK_SLEEP #200 TASK_KILLTASK sprite_task lda #0 sta $d015 sta $d017 sta $d01d lda #$0b sta $d011 rts sprite_task: @loop: TASK_SLEEP #4 lda global_screen+$03f8 eor #1 sta global_screen+$03f8 jmp @loop flashline_task: @loop: tax lda flashcolors,y bmi @done iny sty @y sta @val lda screen_lo,x sta @col+0 lda screen_hi,x and #3 ora #$d8 sta @col+1 ldy #$27 : @val=*+1 lda #0 @col=*+1 sta $dead,y dey bpl :- @y=*+1 ldy #0 txa TASK_SLEEP #7 jmp @loop @done: rts gameover1: .byte "THE TRUCKSTOP ALASKA IS IN RUINS", 0 gameover2: .byte "DATASTORM WILL BE NO MORE",0 gameover3: .byte "WE WILL CHERISH THE MEMORIES", 0 gameover4: .byte "GAME OVER",0 flashcolors: .byte $00, $0b, $0c, $0f .repeat 16 .byte $01 .endrepeat .byte $0f, $0c, $0b, $00 .byte $ff
As for build systems, declarative is the only sane approach. Makefile syntax is kind of crappy and annoying, but this paper taught me a lot about writing Makefiles for larger projects: Recursive Make Considered Harmful