From 4c9e6ca75506c74f3e4260bbec050d24123c1d63 Mon Sep 17 00:00:00 2001 From: Jeremy Rand Date: Tue, 9 Sep 2014 00:18:35 -0400 Subject: [PATCH] Add support for all the machine config types. Generate include file dependencies and load them into the makefile so .h file changes causes the right files to rebuild. Rework the applescript a bit to load a specific virtual ][ machine and reboot into that machine on launch. Add a DOS 3.3 template disk for the DOS 3.3 machine config types. --- .../project.pbxproj | 6 +- Makefile | 2 +- x.s => exampleAsm.s | 9 +- exampleC.c | 23 +++ make/V2Make.scpt | Bin 3786 -> 4736 bytes make/createDiskImage | 158 ++++++++++++++++++ make/dos33_template.dsk | Bin 0 -> 143360 bytes make/head.mk | 1 + make/prodos_template.dsk | Bin 143360 -> 143360 bytes make/tail.mk | 36 ++-- 10 files changed, 217 insertions(+), 18 deletions(-) rename x.s => exampleAsm.s (89%) create mode 100644 exampleC.c create mode 100755 make/createDiskImage create mode 100644 make/dos33_template.dsk diff --git a/Apple2BuildPipelineSample.xcodeproj/project.pbxproj b/Apple2BuildPipelineSample.xcodeproj/project.pbxproj index 9cbcf69..14e34b9 100644 --- a/Apple2BuildPipelineSample.xcodeproj/project.pbxproj +++ b/Apple2BuildPipelineSample.xcodeproj/project.pbxproj @@ -8,9 +8,10 @@ /* Begin PBXFileReference section */ 70E84C2E19B10B3100159159 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - 70E84C2F19B10B3100159159 /* x.s */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = x.s; sourceTree = ""; }; + 70E84C2F19B10B3100159159 /* exampleAsm.s */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = exampleAsm.s; sourceTree = ""; }; 9D084B2119B6AC2F0070589C /* head.mk */ = {isa = PBXFileReference; lastKnownFileType = text; name = head.mk; path = make/head.mk; sourceTree = ""; }; 9D084B2219B6AC540070589C /* tail.mk */ = {isa = PBXFileReference; lastKnownFileType = text; name = tail.mk; path = make/tail.mk; sourceTree = ""; }; + 9DE27AEA19BBF98700727AFA /* exampleC.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = exampleC.c; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXGroup section */ @@ -18,7 +19,8 @@ isa = PBXGroup; children = ( 70E84C2E19B10B3100159159 /* Makefile */, - 70E84C2F19B10B3100159159 /* x.s */, + 70E84C2F19B10B3100159159 /* exampleAsm.s */, + 9DE27AEA19BBF98700727AFA /* exampleC.c */, 9D084B1F19B6ABE40070589C /* make */, ); sourceTree = ""; diff --git a/Makefile b/Makefile index 327089e..5efbe62 100644 --- a/Makefile +++ b/Makefile @@ -33,11 +33,11 @@ PGM=example # MACHINE = apple2enh-system # MACHINE = apple2enh-loader # MACHINE = apple2enh-reboot +MACHINE = apple2enh-system # Uncomment and set this to your starting address in Apple ][ memory # if necessary: # START_ADDR = 6000 -START_ADDR = 6000 # Set the default CPU to assemble for. You can change this in the # body of a .s file using control commands like ".PC02". Uncomment diff --git a/x.s b/exampleAsm.s similarity index 89% rename from x.s rename to exampleAsm.s index f13ad04..eb02186 100644 --- a/x.s +++ b/exampleAsm.s @@ -1,5 +1,5 @@ ; -; x.s +; exampleAsm.s ; Apple2BuildPipelineSample ; ; Part of a sample build pipeline for Apple ][ software development @@ -10,8 +10,7 @@ ; http://www.quinndunki.com/blondihacks ; - -.org $6000 + .export _asmFunc ; Reserved locations @@ -31,9 +30,9 @@ COUT = $fded -; Main +; _asmFunc -main: +_asmFunc: lda #CHAR_FLASH sta INVERSE diff --git a/exampleC.c b/exampleC.c new file mode 100644 index 0000000..c13e6f2 --- /dev/null +++ b/exampleC.c @@ -0,0 +1,23 @@ +// +// exampleC.c +// Apple2BuildPipelineSample +// +// Created by Jeremy Rand on 9/6/14. +// Copyright (c) 2014 One Girl, One Laptop Productions. All rights reserved. +// + + +#include +#include + + +extern void asmFunc(void); + + +int main(void) +{ + printf("\n\nHello, world!\n"); + cgetc(); + //asmFunc(); + return 0; +} \ No newline at end of file diff --git a/make/V2Make.scpt b/make/V2Make.scpt index 4d0852fc80595ef5e44bd97a98e56e79fca78460..f7a98cbe321d9704ec1db4611543f83d3f8c298a 100644 GIT binary patch delta 2552 zcmai0YjjlA75?s>DGcZ4OfrE=Yz(gDT3DNQG2x{tB|?%JAWE3a2CXd-lEO z?DOsKoW0NNsaZd9>py(fhVB3KHCP3^A3zZ2VKSy@0bd$F5PKY^@+41aOog3rM~uTX zOxFT-*0n2fDK66j_B64}QOUoeUJ3YBBG=KQQ4cF4Un&sdaUYMvr*RpqoIAOk-#Yvj zfw}_x@&4{1Kx4W$z7k`3O!1ib>B|pySv(0?JYhym@urIhe&g^PTu_Iycwb*SnTaRX zq_RnrHMX_QkG3{8&udu_wNVEfKgSF$;D$LKHTVT)Y5_Nh@u)7K0hen5H;O7$^J~mf z0;i&w<*_;+KjK$Deg(hAVn13#2r61KIclChZZg14!#6+{0pw& zAtjHhN%7>+K&~^F$PT8{5cg&eZ*7I1^BM*%S#F&Wl|g<8PnTaVfN7>js7@#CVS zs|y;7JZANn$vSkC=u$5l!mRg;#bR<3Bt<_C-@q$kSY!0>>UAq{qih}0pqA3ivJ!}Q&{D(Y?5tV9mHzGG9E%)IE6J1*&@sH@_M@k-kC2`0B>hvUQ#bSQA z2uZ~c|EpQja~Ts^yMpL4F1thMKCRg(eq=OTE^Q4&SsP z)h;x91L#Fy)`(~&Kb!9x7b$6JWVC=Q`)VY)hwt%S#XTk2n{v4`WM3v{)8c!^#kU|=qOsff$Vuzx+Zz4wUoBsptzw@O6x5_Q@7$4;$+{}l$iNC=*KEwz40Pp9ov4rzutBg}p2@ZtXxzK@&WcVz8z-A#%Q z$#qfF@SwOem0j_HQvsjjMo_%Jbd;3v_bRU9eNvNaesZtarqC#f<$sq?#d{<}Yc9OI zH0E5nu6UOuKy@L+C$MqTNN+g0FScnU9ggmoM<#sq;^+bCd>xJ+j2)}Q>e`+%1Y)(v zcZH>+VznoF!bO*-KB;HPayi~B zb=P2j+DJJg91btbr3W*~e7GsqJuedO>5peS!;xG<-em{!;YRacra9M{%65DGDWyl# zU@G0&mg-BUD=VBmQJ+a(+0`9!~zDgCd*hqwF( Dc7D%U delta 1545 zcmZuxTT@e46#mXh2GbpONU$?9g~+rWS`CFjr4}j@u|$LtgIoe$K#~vK#mGM&z}PkmWkI|rv_rkSkoWM!}Yt+l_k_BmcK z;r#wjlh!`+mub5eGR2_71{Irvp1-K{HoegHoMl zRZUfFpQ1)Gq?2tzInBU}U4mv(Us;?UFZ2)-ZGs!M*ew}W{UX$%UNWruh4>5&l0i$P z<2Tb&D?Ls5vT_F{8jNx_!v&uWK2^>h2ljAsw?w_Mr4S#`6DvJ|D1qr{PaLMkTA##j zV`~wL;kUuBwl+G@$R{aAH8jEEB4Z3!4I>j>re85_8Quhpsa;{L6cy3El!g` z$$dw&jRj%K76)4X6(@rpD{*SrS`m;8X>lr0MUT)%4+T9+jlba>Y%_=|xP$E$o+OKh zMO7c29x8$W+dk}<3~2%nYUlyor+b1PthTZ#l8p3!9*Yqj=Y4hrx)WiI?kkFWief+8 z0UVSJX$mhI=q@^FTF_lpLuH3igO`Qsw4jq~m{b)gf@wu?knIpnNgOf=d!#0GKKHUx$TSt*Z$mmuh>wViwx7Tz_r#mX|6dvt#(m?H(gfY0ag8R_RlA{JT$OQCU2h%8vcrT7`UywSi#|l@y2cJ` zeFSE@Mpx+yjS0Gz`qq?dveH!^S*PpDnsaG1rnq{s&Q7D)NSEmnVu;g4L8EG0$V!)C zDS`r>b(CT~n2yGyE>f-5}`nsw4P*N-3LJ@_&Vo$ z1dZ_ECBIB2x+AgR>%mjQ*B=iJ2u^LhVg7F{1r77SID0N)-_UH-?Va)u&Bol`Y5!a{ zYF&MqF#BEeQFk^fTnjJV>|6Y!iv?o^O9jiWg%x)!6Vm@X|DEMm!FGQTj ' + exit 1 +fi + + +APPLECOMMANDER=$1 +MACHINE=$2 +DISKIMAGE=$3 +PROGRAM=$4 + +if [ ! -f "$PROGRAM" ] +then + echo "Cannot file executable $PROGRAM" + exit 1 +fi + +case "$MACHINE" in + apple2) + TEMPLATE="make/prodos_template.dsk" + DELETELOADER=1 + RENAMELOADER=0 + DELETEBASIC=0 + HASHEADER=1 + FILETYPE="bin" + TARGETFILE=`basename $PROGRAM` + ;; + + apple2enh) + TEMPLATE="make/prodos_template.dsk" + DELETELOADER=1 + RENAMELOADER=0 + DELETEBASIC=0 + HASHEADER=1 + FILETYPE="bin" + TARGETFILE=`basename $PROGRAM` + ;; + + apple2-dos33) + TEMPLATE="make/dos33_template.dsk" + DELETELOADER=0 + RENAMELOADER=0 + DELETEBASIC=0 + HASHEADER=1 + FILETYPE="bin" + TARGETFILE=`basename $PROGRAM` + ;; + + apple2enh-dos33) + TEMPLATE="make/dos33_template.dsk" + DELETELOADER=0 + RENAMELOADER=0 + DELETEBASIC=0 + HASHEADER=1 + FILETYPE="bin" + TARGETFILE=`basename $PROGRAM` + ;; + + apple2-system) + TEMPLATE="make/prodos_template.dsk" + DELETELOADER=1 + RENAMELOADER=0 + DELETEBASIC=1 + HASHEADER=0 + FILETYPE="sys" + TARGETFILE=`basename $PROGRAM`.system + ;; + + apple2enh-system) + TEMPLATE="make/prodos_template.dsk" + DELETELOADER=1 + RENAMELOADER=0 + DELETEBASIC=1 + HASHEADER=0 + FILETYPE="sys" + TARGETFILE=`basename $PROGRAM`.system + ;; + + apple2-loader) + TEMPLATE="make/prodos_template.dsk" + DELETELOADER=0 + RENAMELOADER=1 + DELETEBASIC=1 + HASHEADER=1 + FILETYPE="bin" + TARGETFILE=`basename $PROGRAM` + ;; + + apple2-reboot) + TEMPLATE="make/prodos_template.dsk" + DELETELOADER=0 + RENAMELOADER=1 + DELETEBASIC=1 + HASHEADER=1 + FILETYPE="bin" + TARGETFILE=`basename $PROGRAM` + ;; + + apple2enh-loader) + TEMPLATE="make/prodos_template.dsk" + DELETELOADER=0 + RENAMELOADER=1 + DELETEBASIC=1 + HASHEADER=1 + FILETYPE="bin" + TARGETFILE=`basename $PROGRAM` + ;; + + apple2enh-reboot) + TEMPLATE="make/prodos_template.dsk" + DELETELOADER=0 + RENAMELOADER=1 + DELETEBASIC=1 + HASHEADER=1 + FILETYPE="bin" + TARGETFILE=`basename $PROGRAM` + ;; + + *) + echo "Invalid machine type $MACHINE" + exit 1 + ;; +esac + +if [ ! -f "$TEMPLATE" ] +then + echo "Cannot file template disk image $TEMPLATE" + exit 1 +fi + +cp "$TEMPLATE" "$DISKIMAGE" + +if [ $DELETELOADER -eq 1 ] +then + java -jar "$APPLECOMMANDER" -d "$DISKIMAGE" LOADER.SYSTEM +fi + +if [ $RENAMELOADER -eq 1 ] +then + java -jar "$APPLECOMMANDER" -e "$DISKIMAGE" LOADER.SYSTEM | java -jar "$APPLECOMMANDER" -p "$DISKIMAGE" "$TARGETFILE".system sys + java -jar "$APPLECOMMANDER" -d "$DISKIMAGE" LOADER.SYSTEM +fi + +if [ $DELETEBASIC -eq 1 ] +then + java -jar "$APPLECOMMANDER" -d "$DISKIMAGE" BASIC.SYSTEM +fi + +if [ $HASHEADER -eq 1 ] +then + STARTADDR=`od -t x2 -N 2 < "$PROGRAM" | head -1 | awk '{print $2}'` + dd if="$PROGRAM" bs=4 skip=1 | java -jar "$APPLECOMMANDER" -p "$DISKIMAGE" "$TARGETFILE" $FILETYPE 0x$STARTADDR +else + java -jar "$APPLECOMMANDER" -p "$DISKIMAGE" "$TARGETFILE" $FILETYPE < "$PROGRAM" +fi diff --git a/make/dos33_template.dsk b/make/dos33_template.dsk new file mode 100644 index 0000000000000000000000000000000000000000..ef257aac1808715f10c1532566aa8e837361e0f4 GIT binary patch literal 143360 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�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 N%qaM`wtsF*r*CN1kmCRV delta 141 zcmZp8z|ru4V*@KQ3j+fK^JY$FPYxed4_6-_e;^+U*t8kg8Ctm+_+^a*85kZjbAT93 z3=9!Ij(*;u0dQq*42%ps3=E300%AaA3<)5{=6T#nK8qQd7&k>QF>Pjw{-?IsftitK bWqqsB${PxA|N5{bOlD;I($uo7g>el4-fbTV diff --git a/make/tail.mk b/make/tail.mk index be684db..6331f35 100644 --- a/make/tail.mk +++ b/make/tail.mk @@ -13,25 +13,40 @@ export PATH := $(PATH):$(CC65_BIN) C_OBJS=$(C_SRCS:.c=.o) +C_DEPS=$(C_SRCS:.c=.u) ASM_OBJS=$(ASM_SRCS:.s=.o) ASM_LSTS=$(ASM_SRCS:.s=.lst) OBJS=$(C_OBJS) $(ASM_OBJS) MAPFILE=$(PGM).map DISKIMAGE=$(PGM).dsk -DEPSFILE=$(PGM).deps LINK_ARGS= +EXECCMD= + ifneq ($(START_ADDR),) # If the MACHINE is set to an option which does not support a variable start # address, then error. ifneq ($(filter $(MACHINE), apple2-system apple2enh-system),) $(error You cannot change start address with this machine type) endif - LINK_ARGS += --start-addr $(START_ADDR) + LDFLAGS += --start-addr 0x$(START_ADDR) endif +ifneq ($(filter $(MACHINE), apple2 apple2enh apple2-dos33 apple2enh-dos33),) + EXECCMD=$(shell echo brun $(PGM) | tr '[a-z]' '[A-Z]') +endif + +MACHCONFIG= -t apple2 + +ifneq ($(filter $(MACHINE), apple2enh apple2apple2enh-dos33 apple2enh-system apple2enh-loader apple2enh-reboot),) + MACHCONFIG= -t apple2enh +endif + +ifeq ($(filter $(MACHINE), apple2 apple2enh),) + MACHCONFIG += -C $(MACHINE).cfg +endif .PHONY: all execute clean @@ -40,25 +55,26 @@ all: execute clean: rm -f $(PGM) rm -f $(OBJS) + rm -f $(C_DEPS) rm -f $(MAPFILE) rm -f $(ASM_LSTS) rm -f $(DISKIMAGE) - rm -f $(DEPSFILE) $(PGM): $(OBJS) - $(CL65) -t $(MACHINE) --mapfile $(MAPFILE) $(LINK_ARGS) -o $(PGM) $(OBJS) + $(CL65) $(MACHCONFIG) --mapfile $(MAPFILE) $(LDFLAGS) -o $(PGM) $(OBJS) $(DISKIMAGE): $(PGM) - cp make/prodos_template.dsk $(DISKIMAGE) - java -jar $(AC) -d $(DISKIMAGE) $(PGM) - java -jar $(AC) -p $(DISKIMAGE) $(PGM) BIN 0x$(START_ADDR) < $(PGM) + make/createDiskImage $(AC) $(MACHINE) $(DISKIMAGE) $(PGM) execute: $(DISKIMAGE) - osascript make/V2Make.scpt $(PROJECT_DIR) $(PGM) + osascript make/V2Make.scpt $(PROJECT_DIR) $(PGM) $(PROJECT_DIR)/DevApple.vii "$(EXECCMD)" %.o: %.c - $(CL65) -t $(MACHINE) --create-dep -c -o $@ $< + $(CL65) $(MACHCONFIG) $(CFLAGS) --create-dep -c -o $@ $< + sed -i .bak 's/\.s:/.o:/' $(@:.o=.u) + rm -f $(@:.o=.u).bak %.o: %.s - $(CL65) -t $(MACHINE) --cpu $(CPU) -l -c -o $@ $< + $(CL65) $(MACHCONFIG) --cpu $(CPU) $(ASMFLAGS) -l -c -o $@ $< +-include $(C_DEPS)