From 79c30b84fc54cf8dfa573dc862a32814ff2e8f74 Mon Sep 17 00:00:00 2001 From: Martin Haye Date: Mon, 18 Jan 2016 13:11:43 -0800 Subject: [PATCH 01/11] Added PLASMA makefile rule to build plasm.jar --- .gitignore | 1 + Platform/Apple/tools/PLASMA/src/makefile | 14 ++++++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index babd1d58..40b48751 100644 --- a/.gitignore +++ b/.gitignore @@ -34,6 +34,7 @@ mg /Platform/Apple/tools/PLASMA/src/plvm /Platform/Apple/tools/PLASMA/src/PLVM02.SYSTEM.sys /Platform/Apple/tools/PLASMA/src/*#* +/Platform/Apple/tools/PLASMA/src/plasm.jar # Ignore other auto-generated files /Platform/Apple/virtual/src/plasma/gen_*.pl? diff --git a/Platform/Apple/tools/PLASMA/src/makefile b/Platform/Apple/tools/PLASMA/src/makefile index 5857a62c..94815919 100755 --- a/Platform/Apple/tools/PLASMA/src/makefile +++ b/Platform/Apple/tools/PLASMA/src/makefile @@ -5,8 +5,9 @@ PLVM = plvm PLVM02 = PLVM02.SYSTEM.sys#2000 CMD = CMD\#FF2000 PLASM = plasm +JAR = $(PLASM).jar INCS = tokens.h symbols.h lex.h parse.h codegen.h -OBJS = plasm.c parse.o lex.o codegen.o +SRCS = plasm.c parse.c lex.c codegen.c # # Image filetypes for Virtual ][ # @@ -22,13 +23,18 @@ TXTTYPE = .TXT #SYSTYPE = \#ff0000 #TXTTYPE = \#040000 -all: $(PLASM) $(PLVM) $(PLVM02) $(CMD) +all: $(PLASM) $(JAR) $(PLVM) $(PLVM02) $(CMD) clean: -rm *.o *~ *.a *FE1000 $(PLVM02) $(CMD) $(PLASM) $(PLVM) -$(PLASM): $(OBJS) $(INCS) - cc $(OBJS) -o $(PLASM) +jar: $(JAR) + +$(PLASM): $(SRCS) $(INCS) + cc $(SRCS) -o $(PLASM) + +$(JAR): $(SRCS) $(INCS) + docker run -t -v "$(shell pwd):/project" mhaye/nestedvm:v3 /bin/bash -c "cd /project && nestedvm-c2jar $(JAR) plasma.Plasma $(SRCS)" $(PLVM): plvm.c cc plvm.c -o $(PLVM) From 4a410c8a0764d31efa65b1d8f4d58579f95a93b4 Mon Sep 17 00:00:00 2001 From: Martin Haye Date: Mon, 18 Jan 2016 17:00:31 -0800 Subject: [PATCH 02/11] Fixed circular dependencies at build time. --- .../PackPartitions/src/org/demo/PackPartitions.groovy | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Platform/Apple/tools/PackPartitions/src/org/demo/PackPartitions.groovy b/Platform/Apple/tools/PackPartitions/src/org/demo/PackPartitions.groovy index bb37bb1e..ee7c765a 100644 --- a/Platform/Apple/tools/PackPartitions/src/org/demo/PackPartitions.groovy +++ b/Platform/Apple/tools/PackPartitions/src/org/demo/PackPartitions.groovy @@ -64,6 +64,8 @@ class PackPartitions def currentContext = [] def nWarnings = 0 + def binaryStubsOnly = false + /** * Keep track of context within the XML file, so we can spit out more useful * error and warning messages. @@ -905,6 +907,8 @@ class PackPartitions { def inBuf = new byte[256] def outBuf = ByteBuffer.allocate(50000) + if (binaryStubsOnly) + return outBuf def stream = new File(path).withInputStream { stream -> while (true) { def got = stream.read(inBuf) @@ -927,6 +931,10 @@ class PackPartitions def num = modules.size() + 1 //println "Reading module #$num from '$path'." def bufObj = readBinary(path) + if (binaryStubsOnly) { + modules[name] = [num:num, buf:bufObj] + return + } def bufLen = bufObj.position() def buf = new byte[bufLen] @@ -1602,7 +1610,9 @@ class PackPartitions } // Produce a list of assembly and PLASMA code segments + binaryStubsOnly = true readAllCode() + binaryStubsOnly = false new File("src/plasma/gen_modules.plh").withWriter { out -> code.each { k, v -> out.println "const CODE_${humanNameToSymbol(k, true)} = ${v.num}" From 26bc00f3af130f944e43b1864c7f58f55c9d6c48 Mon Sep 17 00:00:00 2001 From: Martin Haye Date: Mon, 18 Jan 2016 17:59:54 -0800 Subject: [PATCH 03/11] First steps getting PLASMA compiler to run inside PackPartitiions. --- .gitignore | 1 - Platform/Apple/tools/PLASMA/src/makefile | 2 +- Platform/Apple/tools/PLASMA/src/plasm.jar | Bin 0 -> 272660 bytes .../nbproject/project.properties | 4 ++- .../src/org/demo/PackPartitions.groovy | 33 +++++++++++++++++- 5 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 Platform/Apple/tools/PLASMA/src/plasm.jar diff --git a/.gitignore b/.gitignore index 40b48751..babd1d58 100644 --- a/.gitignore +++ b/.gitignore @@ -34,7 +34,6 @@ mg /Platform/Apple/tools/PLASMA/src/plvm /Platform/Apple/tools/PLASMA/src/PLVM02.SYSTEM.sys /Platform/Apple/tools/PLASMA/src/*#* -/Platform/Apple/tools/PLASMA/src/plasm.jar # Ignore other auto-generated files /Platform/Apple/virtual/src/plasma/gen_*.pl? diff --git a/Platform/Apple/tools/PLASMA/src/makefile b/Platform/Apple/tools/PLASMA/src/makefile index 94815919..89a02ec4 100755 --- a/Platform/Apple/tools/PLASMA/src/makefile +++ b/Platform/Apple/tools/PLASMA/src/makefile @@ -34,7 +34,7 @@ $(PLASM): $(SRCS) $(INCS) cc $(SRCS) -o $(PLASM) $(JAR): $(SRCS) $(INCS) - docker run -t -v "$(shell pwd):/project" mhaye/nestedvm:v3 /bin/bash -c "cd /project && nestedvm-c2jar $(JAR) plasma.Plasma $(SRCS)" + docker run -t -v "$(shell pwd):/project" mhaye/nestedvm:v4 /bin/bash -c "cd /project && nestedvm-c2jar $(JAR) plasma.Plasma $(SRCS)" $(PLVM): plvm.c cc plvm.c -o $(PLVM) diff --git a/Platform/Apple/tools/PLASMA/src/plasm.jar b/Platform/Apple/tools/PLASMA/src/plasm.jar new file mode 100644 index 0000000000000000000000000000000000000000..716e1feeb8210ab09db0bb4e20add3717f4bc97b GIT binary patch literal 272660 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

W5n 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 literal 0 HcmV?d00001 diff --git a/Platform/Apple/tools/PackPartitions/nbproject/project.properties b/Platform/Apple/tools/PackPartitions/nbproject/project.properties index 4f9befbe..05b0fa02 100644 --- a/Platform/Apple/tools/PackPartitions/nbproject/project.properties +++ b/Platform/Apple/tools/PackPartitions/nbproject/project.properties @@ -28,11 +28,13 @@ dist.javadoc.dir=${dist.dir}/javadoc endorsed.classpath= excludes= file.reference.lz4-1.1.1.jar=/Users/mhaye/LL/repo/Platform/Apple/tools/PackPartitions/lib/lz4-1.1.1.jar +file.reference.plasm.jar=../PLASMA/src/plasm.jar includes=** jar.compress=false javac.classpath=\ ${file.reference.lz4-1.1.1.jar}:\ - ${libs.groovy-all.classpath} + ${libs.groovy-all.classpath}:\ + ${file.reference.plasm.jar} # Space-separated list of extra javac options javac.compilerargs= javac.deprecation=false diff --git a/Platform/Apple/tools/PackPartitions/src/org/demo/PackPartitions.groovy b/Platform/Apple/tools/PackPartitions/src/org/demo/PackPartitions.groovy index ee7c765a..27ea3601 100644 --- a/Platform/Apple/tools/PackPartitions/src/org/demo/PackPartitions.groovy +++ b/Platform/Apple/tools/PackPartitions/src/org/demo/PackPartitions.groovy @@ -18,6 +18,8 @@ package org.demo import java.nio.ByteBuffer import java.nio.channels.Channels import net.jpountz.lz4.LZ4Factory +import java.nio.charset.StandardCharsets +import plasma.Plasma /** * @@ -909,7 +911,7 @@ class PackPartitions def outBuf = ByteBuffer.allocate(50000) if (binaryStubsOnly) return outBuf - def stream = new File(path).withInputStream { stream -> + new File(path).withInputStream { stream -> while (true) { def got = stream.read(inBuf) if (got < 0) break @@ -1266,6 +1268,33 @@ class PackPartitions stream.write(it.buf.data, 0, it.buf.len) } } + + def compileModule(moduleName, codeDir) + { + def prevStdin = System.in + def prevStdout = System.out + try + { + println "old user.dir=${System.getProperty('user.dir')}" + System.setProperty("user.dir", new File(codeDir).getAbsolutePath()) + println "new user.dir=${System.getProperty('user.dir')}" + def codeFile = new File(codeDir + moduleName + ".pla") + codeFile.withInputStream { inStream -> + System.in = inStream + def acmeFile = new File(codeDir + "build/" + moduleName + ".b") + acmeFile.withOutputStream { outStream -> + System.out = new PrintStream(outStream) + String[] args = new String[1] + args[0] = "-AM" + def result = Plasma.main(args) + println("result=$result") + } + } + } finally { + System.in = prevStdin + System.out = prevStdout + } + } def readAllCode() { @@ -1274,6 +1303,8 @@ class PackPartitions readCode("fontEngine", "src/font/build/fontEngine.b") readCode("tileEngine", "src/tile/build/tile.b") + compileModule("gameloop", "src/plasma/") + readModule("gameloop", "src/plasma/build/gameloop.b") readModule("globalScripts", "src/plasma/build/globalScripts.b") readModule("combat", "src/plasma/build/combat.b") From 4caf8033b72ee4ece0840fc7625b5f18645dc275 Mon Sep 17 00:00:00 2001 From: Martin Haye Date: Mon, 18 Jan 2016 18:23:02 -0800 Subject: [PATCH 04/11] More progress building PLASMA code. --- .../src/org/demo/PackPartitions.groovy | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Platform/Apple/tools/PackPartitions/src/org/demo/PackPartitions.groovy b/Platform/Apple/tools/PackPartitions/src/org/demo/PackPartitions.groovy index 27ea3601..90f03fd2 100644 --- a/Platform/Apple/tools/PackPartitions/src/org/demo/PackPartitions.groovy +++ b/Platform/Apple/tools/PackPartitions/src/org/demo/PackPartitions.groovy @@ -1271,29 +1271,31 @@ class PackPartitions def compileModule(moduleName, codeDir) { + def codeFile = new File(codeDir + moduleName + ".pla") + def acmeFile = new File(codeDir + "build/" + moduleName + ".b") + def prevStdin = System.in def prevStdout = System.out + def prevUserDir = System.getProperty("user.dir") + def result try { - println "old user.dir=${System.getProperty('user.dir')}" System.setProperty("user.dir", new File(codeDir).getAbsolutePath()) - println "new user.dir=${System.getProperty('user.dir')}" - def codeFile = new File(codeDir + moduleName + ".pla") codeFile.withInputStream { inStream -> System.in = inStream - def acmeFile = new File(codeDir + "build/" + moduleName + ".b") acmeFile.withOutputStream { outStream -> System.out = new PrintStream(outStream) - String[] args = new String[1] - args[0] = "-AM" - def result = Plasma.main(args) - println("result=$result") + String[] args = ["-AM"] + result = new Plasma().run(args) } } } finally { System.in = prevStdin System.out = prevStdout + System.setProperty("user.dir", prevUserDir) } + if (result != 0) + throw new Exception("PLASMA compiler failed with code $result") } def readAllCode() From d1558d67cf9687112e590393f7763c1365637c32 Mon Sep 17 00:00:00 2001 From: Martin Haye Date: Mon, 18 Jan 2016 19:28:59 -0800 Subject: [PATCH 05/11] PackPartitions now calls ACME to assemble sources. --- .../Apple/tools/ACME/ACME_Lib/6502/Help.txt | 3 + .../Apple/tools/ACME/ACME_Lib/65816/Help.txt | 3 + .../Apple/tools/ACME/ACME_Lib/Own/Help.txt | 26 + Platform/Apple/tools/ACME/File_ID.Diz | 5 + Platform/Apple/tools/ACME/ReadMe.txt | 73 ++ Platform/Apple/tools/ACME/docs/65816.txt | 87 ++ Platform/Apple/tools/ACME/docs/AddrModes.txt | 172 +++ Platform/Apple/tools/ACME/docs/AllPOs.txt | 781 ++++++++++++ Platform/Apple/tools/ACME/docs/COPYING | 340 ++++++ Platform/Apple/tools/ACME/docs/Changes.txt | 296 +++++ Platform/Apple/tools/ACME/docs/Errors.txt | 372 ++++++ Platform/Apple/tools/ACME/docs/Example.txt | 31 + Platform/Apple/tools/ACME/docs/Help.txt | 176 +++ Platform/Apple/tools/ACME/docs/Illegals.txt | 130 ++ Platform/Apple/tools/ACME/docs/Lib.txt | 21 + Platform/Apple/tools/ACME/docs/QuickRef.txt | 358 ++++++ Platform/Apple/tools/ACME/docs/Source.txt | 19 + Platform/Apple/tools/ACME/docs/Upgrade.txt | 119 ++ .../Apple/tools/ACME/examples/ddrv128.exp | Bin 0 -> 641 bytes Platform/Apple/tools/ACME/examples/ddrv64.exp | Bin 0 -> 608 bytes .../Apple/tools/ACME/examples/macedit.exp | Bin 0 -> 7447 bytes .../Apple/tools/ACME/examples/me/tables.bin | Bin 0 -> 826 bytes Platform/Apple/tools/ACME/src/Makefile | 66 ++ Platform/Apple/tools/ACME/src/Makefile.dos | 64 + Platform/Apple/tools/ACME/src/Makefile.riscos | 64 + Platform/Apple/tools/ACME/src/_amiga.h | 53 + Platform/Apple/tools/ACME/src/_dos.c | 47 + Platform/Apple/tools/ACME/src/_dos.h | 58 + Platform/Apple/tools/ACME/src/_riscos.c | 97 ++ Platform/Apple/tools/ACME/src/_riscos.h | 69 ++ Platform/Apple/tools/ACME/src/_std.c | 38 + Platform/Apple/tools/ACME/src/_std.h | 55 + Platform/Apple/tools/ACME/src/acme.c | 376 ++++++ Platform/Apple/tools/ACME/src/acme.h | 23 + Platform/Apple/tools/ACME/src/alu.c | 1053 +++++++++++++++++ Platform/Apple/tools/ACME/src/alu.h | 53 + Platform/Apple/tools/ACME/src/cliargs.c | 131 ++ Platform/Apple/tools/ACME/src/cliargs.h | 32 + Platform/Apple/tools/ACME/src/config.h | 45 + Platform/Apple/tools/ACME/src/cpu.c | 319 +++++ Platform/Apple/tools/ACME/src/cpu.h | 47 + Platform/Apple/tools/ACME/src/dynabuf.c | 138 +++ Platform/Apple/tools/ACME/src/dynabuf.h | 59 + Platform/Apple/tools/ACME/src/encoding.c | 245 ++++ Platform/Apple/tools/ACME/src/encoding.h | 20 + Platform/Apple/tools/ACME/src/flow.c | 403 +++++++ Platform/Apple/tools/ACME/src/flow.h | 19 + Platform/Apple/tools/ACME/src/global.c | 381 ++++++ Platform/Apple/tools/ACME/src/global.h | 88 ++ Platform/Apple/tools/ACME/src/input.c | 495 ++++++++ Platform/Apple/tools/ACME/src/input.h | 72 ++ Platform/Apple/tools/ACME/src/label.c | 251 ++++ Platform/Apple/tools/ACME/src/label.h | 37 + Platform/Apple/tools/ACME/src/macro.c | 346 ++++++ Platform/Apple/tools/ACME/src/macro.h | 19 + Platform/Apple/tools/ACME/src/mnemo.c | 1024 ++++++++++++++++ Platform/Apple/tools/ACME/src/mnemo.h | 22 + Platform/Apple/tools/ACME/src/output.c | 427 +++++++ Platform/Apple/tools/ACME/src/output.h | 42 + Platform/Apple/tools/ACME/src/platform.c | 39 + Platform/Apple/tools/ACME/src/platform.h | 41 + Platform/Apple/tools/ACME/src/section.c | 117 ++ Platform/Apple/tools/ACME/src/section.h | 37 + Platform/Apple/tools/ACME/src/tree.c | 198 ++++ Platform/Apple/tools/ACME/src/tree.h | 50 + Platform/Apple/tools/PLASMA/src/plasm.jar | Bin 272660 -> 272532 bytes .../nbproject/project.properties | 4 +- .../src/org/demo/PackPartitions.groovy | 73 +- .../virtual/src/tile/{tile.s => tileEngine.s} | 0 69 files changed, 10326 insertions(+), 23 deletions(-) create mode 100644 Platform/Apple/tools/ACME/ACME_Lib/6502/Help.txt create mode 100644 Platform/Apple/tools/ACME/ACME_Lib/65816/Help.txt create mode 100644 Platform/Apple/tools/ACME/ACME_Lib/Own/Help.txt create mode 100644 Platform/Apple/tools/ACME/File_ID.Diz create mode 100644 Platform/Apple/tools/ACME/ReadMe.txt create mode 100644 Platform/Apple/tools/ACME/docs/65816.txt create mode 100644 Platform/Apple/tools/ACME/docs/AddrModes.txt create mode 100644 Platform/Apple/tools/ACME/docs/AllPOs.txt create mode 100644 Platform/Apple/tools/ACME/docs/COPYING create mode 100644 Platform/Apple/tools/ACME/docs/Changes.txt create mode 100644 Platform/Apple/tools/ACME/docs/Errors.txt create mode 100644 Platform/Apple/tools/ACME/docs/Example.txt create mode 100644 Platform/Apple/tools/ACME/docs/Help.txt create mode 100644 Platform/Apple/tools/ACME/docs/Illegals.txt create mode 100644 Platform/Apple/tools/ACME/docs/Lib.txt create mode 100644 Platform/Apple/tools/ACME/docs/QuickRef.txt create mode 100644 Platform/Apple/tools/ACME/docs/Source.txt create mode 100644 Platform/Apple/tools/ACME/docs/Upgrade.txt create mode 100644 Platform/Apple/tools/ACME/examples/ddrv128.exp create mode 100644 Platform/Apple/tools/ACME/examples/ddrv64.exp create mode 100644 Platform/Apple/tools/ACME/examples/macedit.exp create mode 100644 Platform/Apple/tools/ACME/examples/me/tables.bin create mode 100644 Platform/Apple/tools/ACME/src/Makefile create mode 100644 Platform/Apple/tools/ACME/src/Makefile.dos create mode 100644 Platform/Apple/tools/ACME/src/Makefile.riscos create mode 100644 Platform/Apple/tools/ACME/src/_amiga.h create mode 100644 Platform/Apple/tools/ACME/src/_dos.c create mode 100644 Platform/Apple/tools/ACME/src/_dos.h create mode 100644 Platform/Apple/tools/ACME/src/_riscos.c create mode 100644 Platform/Apple/tools/ACME/src/_riscos.h create mode 100644 Platform/Apple/tools/ACME/src/_std.c create mode 100644 Platform/Apple/tools/ACME/src/_std.h create mode 100644 Platform/Apple/tools/ACME/src/acme.c create mode 100644 Platform/Apple/tools/ACME/src/acme.h create mode 100644 Platform/Apple/tools/ACME/src/alu.c create mode 100644 Platform/Apple/tools/ACME/src/alu.h create mode 100644 Platform/Apple/tools/ACME/src/cliargs.c create mode 100644 Platform/Apple/tools/ACME/src/cliargs.h create mode 100644 Platform/Apple/tools/ACME/src/config.h create mode 100644 Platform/Apple/tools/ACME/src/cpu.c create mode 100644 Platform/Apple/tools/ACME/src/cpu.h create mode 100644 Platform/Apple/tools/ACME/src/dynabuf.c create mode 100644 Platform/Apple/tools/ACME/src/dynabuf.h create mode 100644 Platform/Apple/tools/ACME/src/encoding.c create mode 100644 Platform/Apple/tools/ACME/src/encoding.h create mode 100644 Platform/Apple/tools/ACME/src/flow.c create mode 100644 Platform/Apple/tools/ACME/src/flow.h create mode 100644 Platform/Apple/tools/ACME/src/global.c create mode 100644 Platform/Apple/tools/ACME/src/global.h create mode 100644 Platform/Apple/tools/ACME/src/input.c create mode 100644 Platform/Apple/tools/ACME/src/input.h create mode 100644 Platform/Apple/tools/ACME/src/label.c create mode 100644 Platform/Apple/tools/ACME/src/label.h create mode 100644 Platform/Apple/tools/ACME/src/macro.c create mode 100644 Platform/Apple/tools/ACME/src/macro.h create mode 100644 Platform/Apple/tools/ACME/src/mnemo.c create mode 100644 Platform/Apple/tools/ACME/src/mnemo.h create mode 100644 Platform/Apple/tools/ACME/src/output.c create mode 100644 Platform/Apple/tools/ACME/src/output.h create mode 100644 Platform/Apple/tools/ACME/src/platform.c create mode 100644 Platform/Apple/tools/ACME/src/platform.h create mode 100644 Platform/Apple/tools/ACME/src/section.c create mode 100644 Platform/Apple/tools/ACME/src/section.h create mode 100644 Platform/Apple/tools/ACME/src/tree.c create mode 100644 Platform/Apple/tools/ACME/src/tree.h rename Platform/Apple/virtual/src/tile/{tile.s => tileEngine.s} (100%) diff --git a/Platform/Apple/tools/ACME/ACME_Lib/6502/Help.txt b/Platform/Apple/tools/ACME/ACME_Lib/6502/Help.txt new file mode 100644 index 00000000..cf44e4be --- /dev/null +++ b/Platform/Apple/tools/ACME/ACME_Lib/6502/Help.txt @@ -0,0 +1,3 @@ +!eof + +This directory contains files that are useful when writing programs for the 6502 processor, but which are independent of the computer used. diff --git a/Platform/Apple/tools/ACME/ACME_Lib/65816/Help.txt b/Platform/Apple/tools/ACME/ACME_Lib/65816/Help.txt new file mode 100644 index 00000000..5ddbce4f --- /dev/null +++ b/Platform/Apple/tools/ACME/ACME_Lib/65816/Help.txt @@ -0,0 +1,3 @@ +!eof + +This directory contains files that are useful when writing programs for the 65816 processor, but which are independent of the computer used. diff --git a/Platform/Apple/tools/ACME/ACME_Lib/Own/Help.txt b/Platform/Apple/tools/ACME/ACME_Lib/Own/Help.txt new file mode 100644 index 00000000..4362283e --- /dev/null +++ b/Platform/Apple/tools/ACME/ACME_Lib/Own/Help.txt @@ -0,0 +1,26 @@ +!eof + +If you have written files that you often need to include in your sources, you can store them in this directory. + +This way they can be accessed in ACME sources using + + !source + +or + + !binary + + +Please bear in mind that you cannot assemble such source codes on a machine that does *not* have your own include files. If you want to freely give away your programs though, there are two ways to do this: + + a) Change those references to "normal" quotes and store your own library files in the same directory as the file that includes them. This means editing by hand, therefore the "Own" directory would lose its meaning. + + b) Store your library files into a uniquely-named subdirectory inside the library tree and give away that part of the library as well. The position of such a personal directory inside the library tree should be chosen intelligently - it wouldn't be helpful if every single user of ACME would place his/her directory at the top level of the library. If your files are only of use for one specific computer, then you should create a new directory called "3rdParty" in that computer's directory and put your own directory inside it. The name of your own directory may be your name or IRC nick, for example. + +Demo groups, software houses and the like should use this method as well, forming paths like this: + + !binary + !source + +If you have a file that you think should be added to the "normal" library tree, just send me an e-mail and I'll include it in the next release. Well, at least I might consider it. :) + diff --git a/Platform/Apple/tools/ACME/File_ID.Diz b/Platform/Apple/tools/ACME/File_ID.Diz new file mode 100644 index 00000000..d7e0f6bc --- /dev/null +++ b/Platform/Apple/tools/ACME/File_ID.Diz @@ -0,0 +1,5 @@ + + ACME - Release 0.91 (Linux/Unix/Platform independent version) + + MultiPlatform 6502/65c02/65816 X-Assembler + diff --git a/Platform/Apple/tools/ACME/ReadMe.txt b/Platform/Apple/tools/ACME/ReadMe.txt new file mode 100644 index 00000000..ed53b2fc --- /dev/null +++ b/Platform/Apple/tools/ACME/ReadMe.txt @@ -0,0 +1,73 @@ + + + ACME + + ...the ACME Crossassembler for Multiple Environments + + --- Linux/Unix/platform independent version --- + + +This file only describes stuff that is specific to the Linux / Unix +/ platform independent version of ACME. So if you are looking for more +general things, you should take a look at "docs/Help.txt". + + + + +*** Compiling and installing the executable: + +Change into the directory "acme091/src" that was created when +unpacking the archive and simply type "make". This will compile the +sources and produce an executable file. + +If you have root access: +Change into superuser mode using "su" and type "make install" to move +the executable to the appropriate directory (system-wide install). + +If you don't have root access: +Type "make userinstall" to move the executable to your "~/bin" +directory (user-specific install). + +Feel free to adjust the Makefile to your specific needs. + + + + +*** Installing the library: + +The directory "ACME_Lib" contains a bunch of files that may be useful. +Okay, there's hardly anything in it at the moment, but it will +hopefully grow over time. +Copy the ACME_Lib directory to a place you think is appropriate. You +will have to set up an environment variable called "ACME" to allow the +main program to find this directory tree. + +In bash: + + set ACME="/my/path/to/ACME_Lib" ; export ACME + +You don't *have* to install the library just to use ACME, but it +doesn't hurt to install it - one of the supplied example programs uses +the library as well. + + + + +*** Miscellaneous: + +ACME was tested and prepared on Redhat 5.2 but it should work on any +Linux distribution and on other Unices aswell (if not, then let me +know and i'll fix it ASAP). + +Krzysztof Dabrowski, current Linux port maintainer +mailto:brush@pol.pl + + + + +*** Changes: + +Release 0.91: Merged Linux/Unix version and source-only version. + +Release 0.04 beta: First Linux version + diff --git a/Platform/Apple/tools/ACME/docs/65816.txt b/Platform/Apple/tools/ACME/docs/65816.txt new file mode 100644 index 00000000..0d23bb5c --- /dev/null +++ b/Platform/Apple/tools/ACME/docs/65816.txt @@ -0,0 +1,87 @@ + + + ACME + + ...the ACME Crossassembler for Multiple Environments + + --- 65816 support --- + + +This text contains information about the 65816-specific features of +ACME. + + +---------------------------------------------------------------------- +Section: Command aliases for "long" JMPs and JSRs +---------------------------------------------------------------------- + +In addition to the commands JMP and JSR, the 65816 processor also +knows JML and JSL, which are JMP and JSR using new (long) addressing +modes. ACME also accepts the new addressing modes when using the old +mnemonics JMP and JSR, but the old addressing modes cannot be used +with the new mnemonics JML and JSL. + + +---------------------------------------------------------------------- +Section: Argument order of MVN/MVP +---------------------------------------------------------------------- + +According to WDC's official syntax for 65816 assembly language, the +argument order of the MVN and MVP instructions differs between +assembly language and machine code. +To copy bytes from bank $ab to bank $cd, use the following statement: + mvn $ab, $cd ; source bank $ab, destination bank $cd +ACME will then produce the following machine code: + $54 $cd $ab ; opcode mvn, destination bank $cd, source bank $ab + +ACME 0.05 and earlier did it the wrong way. Several other assemblers +still do. Make sure your sources are correct. + + +---------------------------------------------------------------------- +Section: Register lengths +---------------------------------------------------------------------- + +When assembling "lda #5" for example, ACME has to know whether to +create an 8-bit argument or a 16-bit argument. This depends on the +current register length. +On startup, ACME assumes all registers are 8 bits wide. You can change +this at any time using the following pseudo opcodes: + + !al ; switch to long accumulator + !as ; switch to short accumulator + !rl ; switch to long index registers + !rs ; switch to short index registers + +Please note that ACME, unlike some other assemblers, does *not* track +SEP/REP commands: I don't like that method - it fails when +encountering PLPs, for example. So if it doesn't work reliably in the +first place, why use it? :) + +If you don't like that you always have to use a pseudo opcode +alongside SEP/REP commands, then have a look at the file <65816/std.a> +(in the library). There are some predefined macros that you can use. + + +---------------------------------------------------------------------- +Section: Postfixing stuff +---------------------------------------------------------------------- + +You can also use the postfix method (which is explained in the file +"AddrModes.txt") to specify the immediate argument's length: + + ldx+2 #5 + +will always be assembled to a 16-bit argument, regardless of the +currently configured index register width. Use at your own risk - this +method obviously is not a good example on structured programming. :) + + +---------------------------------------------------------------------- +Section: Miscellaneous +---------------------------------------------------------------------- + +Note that ACME cannot produce more than 64 KBytes of code. Also note +that though the 65816 CPU has an address space of 16 MB, ACME's +program counter is only sixteen bits wide. It shouldn't be too hard to +make any assembled code run in a non-zero bank, though. diff --git a/Platform/Apple/tools/ACME/docs/AddrModes.txt b/Platform/Apple/tools/ACME/docs/AddrModes.txt new file mode 100644 index 00000000..40e8fc72 --- /dev/null +++ b/Platform/Apple/tools/ACME/docs/AddrModes.txt @@ -0,0 +1,172 @@ + + + ACME + + ...the ACME Crossassembler for Multiple Environments + + --- addressing modes --- + + +If a command can be used with different addressing modes, ACME has to +decide which one to use. Several commands of the 6502 CPU can be used +with either "absolute" addressing or "zeropage-absolute" addressing. +The former one means there's a 16-bit argument, the latter one means +there's an 8-bit argument. +And the 65816 CPU even knows some commands with 24-bit addressing... + +So how does ACME know which addressing mode to use? +The simple approach is to always use the smallest possible argument, +of course: If the argument fits in a byte, use zeropage addressing. If +it doesn't, use absolute addressing. If it needs more than two bytes +and the 65816 CPU is chosen, use 24-bit addressing. + +In most cases this works - with two exceptions. The remainder of this +text may sound somewhat confusing now, so if you don't have any +problems with addressing modes, then don't bother trying to understand +everything this texts says. :) + +The two exceptions are: + + + + +*** 1) Labels are defined too late + +If ACME cannot figure out the argument value in the first pass, it +assumes that the command uses 16-bit addressing. + +If it later finds out that the argument only needs 8 bits, ACME gives +a warning ("using oversized addressing mode") and continues. However, +if it finds out that the argument needs 24 bits, it gives an error. + +These problems can be solved by defining the labels *before* using +them, so that the value can be figured out in the first pass. If this +is not possible, you can use the postfix method, effectively exactly +defining what addressing mode to use. The postfix method is described +in a separate paragraph below. + + + + +*** 2) You *want* to use an oversized addressing mode + +On the 65816 CPU, "zeropage addressing" is called "direct page +addressing". The difference is that the position of the "direct page" +can be changed. Then, "lda $fa" does not necessarily access the same +memory location as "lda $00fa" anymore. The same goes for 16- and 24- +bit addressing: "lda $fabc" does not necessarily access the same +memory location as "lda $00fabc", because the default bank can be set +to something other than zero. +But even on the plain 6502 CPU you might want to force ACME to use an +oversized addressing mode, for example because of timing issues. + +Again there are two ways to solve the problem: You can define the +target location using leading zeros. ACME will then use an addressing +mode that is big enough even if the leading zeros would have been +other digits: + + label1 = $fb + label2 = $00fd + label3 = $0000ff + + lda $fa + sta $00fc + lda $0000fe + sta label1 + lda label2 + sta label3 + +will be assembled to + + a5 fa ; lda $fa + 8d fc 00 ; sta $00fc + af fe 00 00 ; lda $0000fe + 85 fb ; sta $fb + ad fd 00 ; lda $00fd + 8f ff 00 00 ; sta $0000ff + +The other possibility is to use the postfix method (described in the +next paragraph). + + + + +*** The postfix method + +Warning: This may sound very complicated at first, but I think that +once you get used to it you'll agree it's useful. If you don't want to +use this, stick to the "leading zeros" method and don't bother about +postfixes. + +Still with me? Okay: +You can force ACME to use a specific addressing mode by adding "+1", +"+2" or "+3" to the assembler mnemonic. Each one of these postfixes +sets the relevant "Force Bit" in ACME's result. If Force Bit 3 is set, +ACME will use 24-bit addressing. Force Bit 2 means 16-bit addressing +and Force Bit 1 means 8-bit addressing. Higher Force Bits have higher +priorities. + +Here's an (overly complicated) example: + + label1 = $fb + label2 = $fd + label3+3 = $ff ; set Force Bit 3 and store in label's flags + + ldx $fa + ldy+2 $fc ; set Force Bit 2 (16-bit addressing) + lda+3 $fe ; set Force Bit 3 (24-bit addressing) + stx label1 + sty+2 label2 ; set Force Bit 2 (16-bit addressing) + sta label3 ; no need to set Force Bit 3 as it is + ; already set in "label3". + +will be assembled to + + a6 fa ; ldx $fa + ac fc 00 ; ldy $00fc + af fe 00 00 ; lda $0000fe + 86 fb ; stx $fb + 8c fd 00 ; sty $00fd + 8f ff 00 00 ; sta $0000ff + +Postfixes given directly after the command have higher priority than +those given to the argument. As you can see, you can add the postfix +to the label definition as well (equivalent to leading zeros). + +Applying the byte extraction operators ("<" gives the low byte, ">" +gives the high byte and "^" gives the bank byte of a value) to any +value will clear the argument's Force Bits 2 and 3 and set Force +Bit 1 instead. So "lda quoting (load from library). The file must hold + exactly 256 bytes. + BLOCK: A block of assembler statements + Before encountering this PO, ACME defaults to "raw". + This PO supersedes the now deprecated "!cbm". +Aliases: "!ct" +Examples: !convtab raw + !text "Test" ; outputs $54 $65 $73 $74 + !ct pet + !tx "Test" ; outputs $d4 $45 $53 $54 + !ct scr { + !tx "Test" ; outputs $54 $05 $13 $14 + !ct "my_own_table_file" + !tx "äöüßÄÖÜ" ; whatever... :) + } + !tx "Test" ; outputs $d4 $45 $53 $54 again +Hint: If you don't want to fiddle with a hex editor to create a +conversion table file, try using ACME: + !to "asc2pet.ct", plain ; no load address + *=0 ; pc = table index + ; first create "as-is" table + !for i, 256 {!byte i-1} + ; now exchange upper and lower case characters + *=65 + !for i, 91-65 {!byte *+128} + *=97 + !for i, 123-97 {!byte *-32} +The resulting file can be used as a conversion table to convert to +PetSCII (which is useless, because ACME can do so anyway. But you get +the idea). + + +Call: !text STRING_VALUE [, STRING_VALUE]* +Purpose: Output the given string(s) using the current + conversion table. +Parameters: STRING_VALUE: Can be either a string given in double + quotes or any formula the value parser accepts. + Please note that formula results won't be converted, + but single characters involved in calculations will. +Aliases: "!tx" +Examples: !text "Loading...", Char_NewLine, "Filename:", 0 + !tx "Offset character is ", offset-1+'a', 0 + + +Call: !pet STRING_VALUE [, STRING_VALUE]* +Purpose: Output the given string(s) using the PetSCII + conversion table (This means to exchange the upper- + and lowercase characters; useful for C64 programs). +Parameters: STRING_VALUE: Can be either a string given in double + quotes or any formula the value parser accepts. + Please note that formula results won't be converted, + but single characters involved in calculations will. +Examples: !pet "Loading...", Char_NewLine, "Filename:", 0 + !pet "Offset character is ", offset-1+'a', 0 + + +Call: !raw STRING_VALUE [, STRING_VALUE]* +Purpose: Output the given string(s) without any conversion at + all. +Parameters: STRING_VALUE: Can be either a string given in double + quotes or any formula the value parser accepts. +Examples: !raw "Loading...", Char_NewLine, "Filename:", 0 + !raw "Offset character is ", offset-1+'a', 0 + + +Call: !scr STRING_VALUE [, STRING_VALUE]* +Purpose: Output the given string(s) using the C64 screen code + conversion table (useful for C64 programs, as you will + have guessed). +Parameters: STRING_VALUE: Can be either a string given in double + quotes or any formula the value parser accepts. + Please note that formula results won't be converted, + but single characters involved in calculations will. +Examples: !scr "Loading...", Char_NewLine, "Filename:", 0 + !scr "Offset character is ", offset-1+'a', 0 + + +Call: !scrxor XOR_VALUE, STRING_VALUE [, STRING_VALUE]* +Purpose: Output the given string(s) using the C64 screen code + conversion table and exclusive-OR-ing the results with + the given value (useful for C64 programs when inverse + video is needed, or EBC mode, etc.). +Parameters: XOR_VALUE: Any formula the value parser accepts. + STRING_VALUE: Can be either a string given in double + quotes or any formula the value parser accepts. + Please note that formula results will be neither + converted nor exclusive-OR-d. + Single characters involved in calculations will be + converted, but not exclusive-OR-d. +Examples: !scrxor $80, "Loading..." + !scrxor $a0, "Offset char is ", (offset-1+'a') EOR $a0 + + +---------------------------------------------------------------------- +Section: File stuff +---------------------------------------------------------------------- + +Call: !to FILENAME, FILEFORMAT +Purpose: Define the output file name and file type. If this + opcode isn't used, ACME still fully processes the + source code - as the resulting binary isn't stored, + this only serves to check for errors. Instead of using + this pseudo opcode, you can also use the command line + options "--outfile" and "--format". +Parameters: FILENAME: A file name given in "..." quoting. + FILEFORMAT: Name of file format. Valid names are: + cbm with load address (Commodore format) + plain without load address + If FILEFORMAT is omitted, ACME gives a warning and + then defaults to "cbm" (this can be changed using the + command line option "--format"). +Examples: !to "eprom.p", plain ; don't add a load address + !to "demo.o", cbm ; add c64-style load address + + +Call: !source FILENAME +Purpose: Assemble another source code file. After having + processed the new file, ACME continues processing the + old one. +Parameters: FILENAME: A file name given in "..." quoting (load + from current directory) or in <...> quoting (load from + library). +Aliases: "!src" +Examples: !source <6502/std.a> ; Read library file + !src "Macros.a" ; Read file from current dir + + +Call: !binary FILENAME [, [SIZE] [, [SKIP]]] +Purpose: Insert binary file directly into output file. +Parameters: FILENAME: A file name given in "..." quoting (load + from current directory) or in <...> quoting (load from + library). + SIZE: Any formula the value parser accepts, but it + must be solvable even in the first pass. If SIZE is + given, it is used: If the file is longer, only SIZE + bytes are read; if it is shorter, ACME will use + padding until SIZE is reached. If SIZE is omitted, + ACME will include the file until EOF. + SKIP: Any formula the value parser accepts. If SKIP is + omitted, it defaults to zero. ACME will start loading + the file from file offset SKIP. So C64 coders wanting + to include C64 files without their load addresses + should use a SKIP value of 2. +Aliases: "!bin" +Examples: !binary ; insert library file + !bin "asc2pet.b", 256, 2 ; insert 256 bytes + ; from file offset 2. + !bin "table", 2, 9 ; insert 2 bytes from offset 9 + !bin "list",, 9 ; insert from offset 9 to EOF + + +---------------------------------------------------------------------- +Section: Labels +---------------------------------------------------------------------- + +Call: !zone [TITLE] [ { BLOCK } ] +Purpose: Switch to new zone of local labels. Zones can either + be nested or used sequentially. +Parameters: TITLE: May consist of letters and digits. Its only + purpose is to be displayed in error messages, so it'll + be omitted in most cases. + BLOCK: A block of assembler statements + If no block is given, the previous zone is terminated + and the new zone is started. + If a block is given, the old zone continues after the + block. +Aliases: "!zn" +Examples: .backgroundcolor = 0 ; some local label + !zone File_IO ; new zone begins here + .backgroundcolor = 1 ; so this is a different label + !zn LinkedList_Init + .backgroundcolor = 2 + !zone LinkedList { ; start of nested zone + ; imagine some code here... + !zone LinkedList_Init + ; imagine some more code here... + !zone LinkedList_Body { + ; imagine yet some more code here... + !zone LinkedList_SecondPart + ; imagine still some more code here... + } + !zone LinkedList_End + ; you know what to imagine here... + } + .backgroundcolor = 3 ; => "Label already defined." + + +Call: !sl FILENAME +Purpose: Save all the global labels to the given file after the + assembly is finished. This table could be loaded + during another assembly session using the "!source" + pseudo opcode. +Parameters: FILENAME: A file name given in "..." quoting. +Examples: !sl "Labels.a" ; produce label dump after assembly + !sl "global" ; produce label dump after assembly + + +---------------------------------------------------------------------- +Section: Flow control +---------------------------------------------------------------------- + +Call: !if CONDITION { BLOCK } [ else { BLOCK } ] +Purpose: Conditional assembly. If the given condition is true, + the first block of statements will be parsed; + if it isn't, the second block will be parsed instead + (if present). +Parameters: CONDITION: Any formula the value parser accepts, but + it must be solvable even in the first pass. + BLOCK: A block of assembler statements. +Examples: !text "Black", 0 ; Choose wording according to + !if country = uk { ; content of "country" label. + !text "Grey" + } else { + !text "Gray" + } + !byte 0 + !text "White", 0 + + ; Insert debug commands if label "debug" is not zero: + !if debug { lda #"z":jsr char_output } + + +Call: !ifdef LABEL { BLOCK } [ else { BLOCK } ] +or: !ifdef LABEL STATEMENT +Purpose: Conditional assembly, depending on whether a label is + already defined or not. If it is defined, the first + block of statements will be parsed; if it isn't, the + second block will be parsed instead (if present). This + opcode was only added to speed up parsing of library + files. + Only use it in your own files if you're sure you + *really* know what you are doing - using it in the + wrong place will result in loads of error messages. +Parameters: LABEL: Any valid label name. + BLOCK: A block of assembler statements. + STATEMENT: Any assembler statement. +Example: ; this was taken straight from <6502/std.a>: + !ifdef Lib_6502_std_a !eof ; parse this file once + Lib_6502_std_a = 1 + + +Call: !for LABEL, TIMES { BLOCK } +Purpose: Looping assembly. The block of statements will be + parsed TIMES times. For a more flexible possibility, + have a look at "!do" below. +Parameters: LABEL: Any valid label name. The label's value will + show the number of the current loop cycle: + In the first cycle it will have the value 1, in the + last cycle it will have the value TIMES. + TIMES: Any formula the value parser accepts, but it + must be solvable even in the first pass. Negative + values are forbidden, zero causes the block to be + skipped. + BLOCK: A block of assembler statements. + Please note that it is impossible to change the number + of loop cycles "inside" the loop by fiddling with the + counter (using the "!set" pseudo opcode): The "!for" + routine keeps its own copy of the counter value and + only sets the label value, it never reads it back. + This was done to eliminate a possibility to hang ACME. +Examples: ; conversion table: integer to BCD + int2BCD !for Outer, 10 { + !for Inner, 10 { + !byte ((Outer-1) << 4) OR (Inner-1) + } + } + !fill 156, $ff ; values above 99 give 255 (invalid) + + ; conversion table: BCD to integer + BCD2int !for Outer, 10 { + !for Inner, 10 { + !byte 10 * (Outer-1) + (Inner-1) + } + !fill 6, $ff ; invalid BCD values give 255 + } + !fill 96, $ff ; invalid BCD values give 255 + + +Call: !set LABEL = VALUE +Purpose: Assign given value to label even if the label already + has a different value. Needed for loop counters when + using "!do", for example. Only use this opcode for + something else if you're sure you *really* know what + you are doing... :) +Parameters: LABEL: Any valid label name. + VALUE: Any formula the value parser accepts. +Example: see "!do" below + + +Call: !do [KEYWORD CONDITION] { BLOCK } [KEYWORD CONDITION] +Purpose: Looping assembly. The block of statements can be + parsed several times, depending on the given + condition(s). + Conditions may be placed before or after the block (or + even at both places), they are then parsed in every + repetition before or after the block respectively. If + there is a condition before the block and it isn't + met when first checked, the block will be skipped. +Parameters: KEYWORD: Either "until" or "while" (without quotes). + CONDITION: Any formula the value parser accepts, but + it must be solvable even in the first pass. + BLOCK: A block of assembler statements. +Examples: ; a loop with conditions at both start and end + !set a = 0 ; init loop counter + !do while loop_flag = TRUE { + lda #a + sta label+a + !set a = a + 1 + } until a > 6 + + ; a loop with a condition at the start + !do while * < $c000 { nop } + + ; a loop with a condition at the end + !do { !wo * + base } while * < base + 345 + + ; a never ending loop - this will cause an error + !do while 3 < 4 { nop } until 3 = 4 + + ; an empty loop - this will hang ACME + !do until 3 = 4 { } while 3 < 4 + + +Call: !endoffile +Purpose: Stop processing the current source file. Using this + pseudo opcode you can add explanatory text inside your + source file without having to comment out every single + line of it. +Aliases: "!eof" +Example: rts ; some assembler mnemonic + !eof + Though this text isn't preceded by a semicolon, it is + treated as if it were a comment. In fact, ACME doesn't + even parse this anymore - the file gets closed when + "!eof" is reached. + + +Call: !warn STRING_VALUE +Purpose: Show a warning during assembly. +Parameters: STRING_VALUE: A string given in double quotes. +Example: !if * > $a000 { + !warn "Program reached ROM area." + } + + +Call: !error STRING_VALUE +Purpose: Generate an error during assembly (therefore, no + output file will be generated). +Parameters: STRING_VALUE: A string given in double quotes. +Example: rts ; end of some function + start !source "colors.a" + end !if end-start > 256 { + !error "Color strings exceed 256 chars!" + } + + +Call: !serious STRING_VALUE +Purpose: Generate a serious error, immediately stopping + assembly. +Parameters: STRING_VALUE: A string given in double quotes. +Example: !source "part1.a" ; sets part1_version + !source "part2.a" ; sets part2_version + !if part1_version != part2_version { + !serious "part1.a and part2.a don't match!" + } + + +---------------------------------------------------------------------- +Section: Macro usage +---------------------------------------------------------------------- + +Call: !macro TITLE [[~]LABEL [, [~]LABEL]*] { BLOCK } +Purpose: Define a macro. +Parameters: TITLE: The macro's desired name (same rules as for + label names). If the title's first character is a dot + ("."), the macro will be local (though why anyone + could want this is beyond me). + LABEL: The desired name for the parameter value at + call time. Normally, these parameter labels should be + local (first character a dot), as different macro + calls will almost for sure have different parameter + values. + If you prefix LABEL with a '~' character, it will be + called by reference, not by value: Changing the value + inside the macro will result in the "outer" label to + be changed as well. + BLOCK: A block of assembler statements. +Examples: ; far branch, as defined in <6502/std.a> + !macro bne .target { + beq * + 5 + jmp .target + } + + ; increase 16-bit counters + !macro dinc .target { + inc .target + bne + ; "bne * + 5" would not work in zp + inc .target + 1 + + + } + ; Yes, anonymous label references can be used with + ; macros (unlike several other assemblers). That's + ; because ACME's macros are implemented more like + ; real functions. + + ; load A and X + !macro ldax .target { + lda .target + ldx .target + 1 + } + + ; store A and X + !macro stax .target { + sta .target + stx .target + 1 + } + + ; use call-by-reference for return value + !macro reserve ~.address, .amount { + .address = external_pc + !set external_pc = external_pc + .amount + } + + ; define a pixel row of a C64 hardware sprite + !macro SpriteLine .v { + !by .v>>16, (.v>>8)&255, .v&255 + } + + +Call: +TITLE [ARGUMENT [, ARGUMENT]*] +Purpose: Call a macro, using the given parameter values. +Parameters: TITLE: The macro's name as given in its definition. + ARGUMENT: This is either any formula the value parser + accepts, or (new in release 0.86) a '~' character + followed by a label name. The '~'-prefix indicates + call-by-reference semantics, which means that when the + macro changes the label's value, the "outer" label + value will change as well. +Examples: inc label + bne mark ; "near" branch + inc label2 + +bne mark2 ; "far" branch + + inc $fa ; increase 8-bit counter + +dinc $fb ; increase 16-bit counter + + ldy label ; get byte + +ldax label2 ; get two bytes + + ; using macro calls in a macro definition + !macro cp16 .source, .target { + +ldax .source + +stax .target + } + + ; use call-by-reference for return value + !set external_pc = $0400 + +reserve ~.line_buffer, 80 + +reserve ~.in_buffer, 256 + +reserve ~.out_buffer, 256 + +reserve ~.byte_var, 1 + + ; define a C64 hardware sprite + ; 765432107654321076543210 + +SpriteLine %........................ + +SpriteLine %.#...................... + +SpriteLine %.##..................... + +SpriteLine %.###.................... + +SpriteLine %.####................... + +SpriteLine %.#####.................. + +SpriteLine %.######................. + +SpriteLine %.#######................ + +SpriteLine %.########............... + +SpriteLine %.#########.............. + +SpriteLine %.########............... + +SpriteLine %.######................. + +SpriteLine %.######................. + +SpriteLine %.##..##................. + +SpriteLine %.#....##................ + +SpriteLine %......##................ + +SpriteLine %.......##............... + +SpriteLine %.......##............... + +SpriteLine %........##.............. + +SpriteLine %........##.............. + +SpriteLine %........................ + !byte 0 ; pad to 64-byte block + +Since release 0.86, different macros are allowed to have the same name +as long as their parameter lists differ in size (number of arguments) +or type (call-by-value vs. call-by-reference). So + !macro process_bytes b1,b2 {...whatever...} + !macro process_bytes b1,b2,b3 {...whatever...} + !macro process_bytes b1,b2,~b3 {...whatever...} +can *all* be used at the same time without any name clash. + + +---------------------------------------------------------------------- +Section: Segment assembly +---------------------------------------------------------------------- + +Call: *= EXPRESSION +Purpose: Set program counter to given value and start new + segment. This opcode must be given at least once + (or the command line option "--setpc" must be used). + If segments overlap each other, warnings will be + issued (not errors, as some people do this overlapping + on purpose). +Parameters: EXPRESSION: Any formula the value parser accepts, but + it must be solvable even in the first pass. +Examples: !to "TinyDemo", cbm ; define output file + format + *= $0801 ; Start at C64 BASIC start + +basic_header ; Call program header macro + !src "main.a" ; include main program + *= $1000 ; jump to new segment + !bin "music.b" ; load music to $1000 + *= $8000 ; jump to new segment + !bin "pic.b" ; load graphics to $8000 + ; After assembly, ACME will save everything from $0801 + ; up to the highest address written to. The resulting + ; file will contain some big unused areas (zero'd), + ; but demos will get compressed anyway... :) + + +Call: !initmem EXPRESSION +Purpose: Define "unchanged" memory. ACME will fill its output + buffer completely with the given value before storing + the assembled code. So gaps between segments will + contain the desired byte when writing the output file. + Instead of using this pseudo opcode, you can also use + the "--initmem" command line option. If neither is + used, the buffer is cleared. +Parameters: EXPRESSION: Any formula the value parser accepts, but + it must be solvable even in the first pass (because + this opcode will be ignored in all later passes). +Examples: !to "TinyDemo", cbm ; define output file + format + !initmem $ea ; Default memory content $ea. + *= $0801 ; Start at C64 BASIC start + +basic_header ; Call macro to create program header + !src "main.a" ; include main program + *= $1000 ; jump to new segment + !bin "music.b" ; load music to $1000 + *= $8000 ; jump to new segment + !bin "pic.b" ; load graphics to $8000 + ; This is the same example as before, but now the big + ; unused areas will contain the value $ea instead of + ; zero. + + !initmem $ff ; Default memory content is now $ff. + ; Useful if you want to store your code in an EPROM. + + +---------------------------------------------------------------------- +Section: Offset assembly +---------------------------------------------------------------------- + +Call: !pseudopc EXPRESSION [ { BLOCK } ] +Purpose: Assemble code as if the program counter had the given + value, effectively producing a program that has to be + copied to a different address space before being run. + After having processed the block of statements with + the new program counter, the updated (!) old program + counter is used again. + Thanks to the block syntax, offset assembly can now be + nested. Then the old program counter would not + necessarily be the *real* program counter, but could + be a pseudopc as well. ;) +Parameters: EXPRESSION: Any formula the value parser accepts, but + it must be solvable even in the first pass. + BLOCK: A block of assembler statements. +Examples: ldx #.shifted_end-.shifted_start + - lda .shifted_start-1,x + sta .target-1,x + dex + bne - + jmp .target + .shifted_start + !pseudopc $0400 { + .target ; imagine some code here... + ; it should be copied to $0400 and executed *there* + } + .shifted_end + + +---------------------------------------------------------------------- +Section: CPU support pseudo opcodes (especially 65816 support) +---------------------------------------------------------------------- + +Call: !cpu KEYWORD [ { BLOCK } ] +Purpose: Select the processor to produce code for. If this PO + isn't used, ACME defaults to the 6502 CPU (or to the + one selected by the "--cpu" command line option). + ACME will give errors if you try to assemble commands + the chosen CPU does not have. You can change the + chosen CPU at any time. When used with block syntax, + the previously chosen CPU value is restored + afterwards. +Parameters: KEYWORD: Currently valid keywords are: + 6502 allows official mnemonics and addressing modes + 6510 adds mnemonics for some undocumented opcodes + (but includes all the official 6502 stuff) + 65c02 allows official 65c02 stuff (includes 6502) + 65816 allows official 65816 stuff (includes 65c02) + BLOCK: A block of assembler statements. +Examples: !if cputype = $65c02 { + !cpu 65c02 { ; temporarily allow 65c02 stuff + stz .todelete + } + } else { + pha + lda #0 + sta .todelete + pla + } + rts + !cpu 65816 ; allow 65816 commands from here on + + +Call: !al [ { BLOCK } ] +Purpose: Assume long (16 bits) accumulator. Only allowed when + producing code for the 65816 CPU. When used with block + syntax, the previous configuration is restored + afterwards. + + +Call: !as [ { BLOCK } ] +Purpose: Assume short (8 bits) accumulator. Only needed when + producing code for the 65816 CPU. When used with block + syntax, the previous configuration is restored + afterwards. Short accumulator is the default in every + pass. + + +Call: !rl [ { BLOCK } ] +Purpose: Assume long (16 bits) index registers. Only allowed + when producing code for the 65816 CPU. When used with + block syntax, the previous configuration is restored + afterwards. + + +Call: !rs [ { BLOCK } ] +Purpose: Assume short (8 bits) index registers. Only needed + when producing code for the 65816 CPU. When used with + block syntax, the previous configuration is restored + afterwards. Short registers are the default in every + pass. + + +---------------------------------------------------------------------- +Section: Deprecated pseudo opcodes (they still work at the moment) +---------------------------------------------------------------------- + +Call: !cbm +Purpose: Use PetSCII as the text conversion table. Now + superseded by the "!convtab" pseudo opcode. +Old usage: !cbm ; gives "use !ct pet instead" warning +Now use: !convtab pet ; does the same without warning + + +Call: !subzone [TITLE] { BLOCK } +Purpose: Allows nesting of zones. Now superseded by "!zone" + because that allows nesting as well. +Parameters: TITLE: May consist of letters and digits. Its only + purpose is to be displayed in error messages, so it'll + be omitted in most cases. + BLOCK: A block of assembler statements. +Aliases: "!sz" +Old usage: !subzone graphics { + !source "graphics.a" + } +Now use: !zone graphics { + !source "graphics.a" + } + + +Call: !realpc +Purpose: Restore the program counter to its real value, + therefore finishing offset assembly. Because + "!pseudopc" now knows block syntax and can be nested, + there's no reason to use "!realpc" any more. +Old usage: !pseudopc $0400 + ; imagine some code here... + !realpc +Now use: !pseudopc $0400 { + ; imagine some code here... + } diff --git a/Platform/Apple/tools/ACME/docs/COPYING b/Platform/Apple/tools/ACME/docs/COPYING new file mode 100644 index 00000000..60549be5 --- /dev/null +++ b/Platform/Apple/tools/ACME/docs/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/Platform/Apple/tools/ACME/docs/Changes.txt b/Platform/Apple/tools/ACME/docs/Changes.txt new file mode 100644 index 00000000..eb2a1a9f --- /dev/null +++ b/Platform/Apple/tools/ACME/docs/Changes.txt @@ -0,0 +1,296 @@ + + + ACME + + ...the ACME Crossassembler for Multiple Environments + + --- change log --- + + +This text only contains descriptions of changes independent of the +platform used. There should be another help file in this archive +outlining the platform specific changes. + + +---------------------------------------------------------------------- +Section: New in release 0.91 +---------------------------------------------------------------------- + +Added anonymous labels (- + -- ++ --- +++ etc.). Every other assembler + seems to support them, so I added them to ACME as well... :) +New POs: "!warn MESSAGE", "!error MESSAGE", "!serious MESSAGE" +New CLI option: "--maxdepth NUMBER" sets maximum recursion depth for + macro calls and the "!source" pseudo opcode. +ACME now gives a warning when assembling JMP($xxff) on 6502/6510 + because that instruction is broken on those CPUs. +After giving the error "Target out of range", the error "Number out of + range" is now suppressed. +Corrected code example in QuickRef.txt (why didn't anyone tell me? :)) +Added additional example source code. + + +---------------------------------------------------------------------- +Section: New in release 0.90 +---------------------------------------------------------------------- + +Arithmetic shift right now has some watchdog code and should work + regardless of compiler. +Corrected some typos in error messages and docs. +New CLI option: "--cpu CPU_TYPE" +The output file format chosen with "--format FORMAT" is now used as + default when "!to" is used without format keyword. +Again: Tidier code. + + +---------------------------------------------------------------------- +Section: New in release 0.89 +---------------------------------------------------------------------- + +Support for more undocumented ("illegal") opcodes: anc, arr, asr, sbx, + dop, top, jam. See Illegals.txt for more info. +Change in shift operators: Logical shift right (">>" or "LSR") has on + most platforms actually been an arithmetic shift right all the + time! Therefore, ">>" now *officially* performs an arithmetic + shift right (can also be written as "ASR"), while ">>>" has been + added to perform a logical shift right (can also be written as + "LSR"). Note: This is about ACME's maths parser and has nothing to + do with the 6502 mnemonics "asl" and "lsr". +Finally added a "-o" command line option to set the output file! See + QuickRef.txt for info on the other new CLI options (--format, + --labeldump, --maxerrors, --setpc, --initmem, --version). +Fixed bug: "!align" could be used while program counter undefined. +Fixed bug: Numbers before mnemonics are no longer skipped (or rather, + implicit label definitions are no longer accepted if the label + name starts with a digit). +Change: Much better algorithm to compute to-the-power-of (read: it's + no longer braindead). +Some more internal tidying. + + +---------------------------------------------------------------------- +Section: New in release 0.88 +---------------------------------------------------------------------- + +Fixed architecture-dependent bug introduced in release 0.87. +Fixed bug: Unknown !cpu keywords could cause crashes. +Fixed bug in !ct "filename" nesting. + + +---------------------------------------------------------------------- +Section: New in release 0.87 +---------------------------------------------------------------------- + +Support for some undocumented ("illegal") opcodes: slo, rla, sre, rra, + sax, lax, dcp, isc. To use these, choose the 6510 cpu. +Two error messages gone: "Sorry, feature not yet implemented." and + "Chosen CPU does not support this command and/or addressing mode." +Explanation of new error message ("There's more than one character.") + added to docs. + + +---------------------------------------------------------------------- +Section: New in release 0.86 +---------------------------------------------------------------------- + +The "!convtab" pseudo opcode can now be given the file name of a + conversion table. The file must hold exactly 256 bytes. +Improved docs a bit (more and better examples, more info on verbosity + CLI switch). +If no "!to" pseudo opcode has been found, ACME will tell you so. + + +---------------------------------------------------------------------- +Section: New in release 0.86 beta +---------------------------------------------------------------------- + +Macros can now be used with call-by-reference semantics, therefore + allowing some kind of return value. Call-by-reference is + indicated by prefixing the relevant parameter(s) with a '~' + character. This has to be done at both the macro definition and + the macro call. +Different macros are allowed to have the same name as long as their + parameter lists differ in size (number of arguments) or type + (call-by-value vs. call-by-reference) +Macros do not have a limit on parameter count anymore. +Macro size is unlimited now. +The expression parser does not have a limit on recursion depth + anymore, so you can use as many parentheses as you like. +Loop block size is unlimited now. +Label name and string lengths are unlimited now. +The recursion depth of "!source" and macro calls is set to 64. The + only reason there still *is* a limit is to be able to spot + infinite recursions. +Offset assembly now has block support and can be nested. Using the old + syntax still works, but gives a warning. +Pseudo opcodes "!convtab", "!cpu", "!al", "!as", "!rl" and "!rs" now + have block support and can be nested. +Using "!to" without file format indicator now gives a warning (but + still works). +Fixed bug: The statement + !to "outfile" ANY_SPECIAL_CHARACTER_BUT_COMMA GARBAGE + wasn't flagged as an error. +Fixed bug: The statement + !source "a file that cannot be opened" + did not give an error, but was just ignored. +If a global label starts with a shift-space character, a warning is + issued (because it is highly likely that it is a typing error). +*Much* cleaner internals. *Very* *much* cleaner internals actually. +More bug checking at runtime. +Tree lookups should be a bit faster. +Initialising the memory should be a bit faster. +Writing the output file should be a bit faster. +The expression parser now uses repeated multiplication instead of the + math library's pow() call, so it is no longer necessary to include + the C math library when compiling. +The number of errors displayed before assembly stops was reduced from + 20 to 10. I really should make this configurable via a CLI switch. + + +---------------------------------------------------------------------- +Section: New in release 0.85 alpha +---------------------------------------------------------------------- + +Fixed bug: Handling of parentheses in new expression parser was badly + screwed up. Thanks go to Nathan Smith for reporting that bug. +Verbosity messages for segments and output file now contain size info. + + +---------------------------------------------------------------------- +Section: New in release 0.84 alpha +---------------------------------------------------------------------- + +Some changes in documentation (mainly corrected typos) +Usage count for labels (Unused ones are marked in label dump file) +New PO: "!8" (for 8-bit values, as "!byte" / "!by" / "!08") +Finally removed the dreaded only-two-input-files restriction +Improved PO: "!to" has parameter for choosing output file format +Fixed bug: Blanks after "!for"'s "}" character stopped assembly +Rewritten expression parser and label tree handler (should be faster) +Generally tidied up the source. +Skipped some version numbers to get a "less frightening" one. :) + + +---------------------------------------------------------------------- +Section: New in release 0.08 beta +---------------------------------------------------------------------- + +Fixed really serious bug: The 65816's indirect DP addressing caused + wrong opcodes to be generated. Thanks to Doc Bacardi/The Dreams + for reporting it. + + +---------------------------------------------------------------------- +Section: New in release 0.07 beta +---------------------------------------------------------------------- + +Fixed really serious bug: Indirect JMP / JSR were assembled without + target addresses. Thanks to YTM/Alliance for reporting that one. +Fixed bug in value parser's handling of parentheses: Expressions like + "a*(b-c)+d" gave "a*((b-c)+d)", obviously not the same. +Fixed bug: "!set LABEL = VALUE" now *really* works correctly. +Fixed bug: ACME gave "too late for postfix" error when reading a + predefined label of known size. Only occurred when using macros. +Fixed bug: Error messages given from within macro definitions used + truncated file names. +Fixed bug: Calling of local macros didn't work at all. +Fixed bug: "}" chars directly after macro calls were not found. +Fixed bug: Spaces after ":" and "{" gave syntax errors. +Fixed bug: Line counting inside loops was screwed up. +Fixed bug: Changed argument order of MVP and MVN (now it's "opcode, + source, target") +New PO: "!08" (for 8-bit values, as "!byte" / "!by") +New PO: "!16" (for 16-bit values, as "!word" / "!wo") +New PO: "!24" (for 24-bit values) +New PO: "!32" (for *signed* 32-bit values) +New PO: "!pseudopc" (starts offset assembly) +New PO: "!realpc" (ends offset assembly) +New PO: "!for LABEL, TIMES { LINES }" for easier loops. +New PO: "!initmem BYTE" to define empty memory. +New PO: "!endoffile" (short "!eof") replaces "!end". +New PO: "!ifdef" (only use this if you *really* know what you are + doing. Otherwise, just don't use it) +New PO: "!convtab CONVERSION" (short "!ct") selects the default + character conversion, making "!cbm" obsolete. +Improved PO: "!binary" now has "skip" parameter. +Change: "!cbm" outputs a warning when used - use "!ct pet" instead. +Change: "!end" no longer works - use "!eof" instead. +Change: "*=VALUE" is now segment change instead of offset assembly. +Change: Argument order of MVN/MVP is now as is standard. +The typecast system has been rewritten - now it works as intended. +BIT without any parameters no longer works - use a macro instead. +Leading zeros are stored in label structures and acted upon. +The documentation is in several files now. +Negative numbers are now handled much more sensibly. +'ACME' environment variable only needed when *really* needed. + + +---------------------------------------------------------------------- +Section: New in release 0.05 beta +---------------------------------------------------------------------- + +Fixed bug: No more multiple error messages. +Fixed bug: Zone names now work correctly (First char wasn't stored). +Fixed bug: "!set label = label" now works correctly (I hope). +Fixed bug: "stz ...,y" gave "number too big" instead of "illegal + combination of command and addressing mode" +New PO: "!subzone" (short "!sz") for nested zones. +Added support for library tree when using "!source" or "!binary". +Single-character strings can now be given in single quotes as well. +Real icons. +Startup errors now exit correctly with EXIT_FAILURE code. +Example program now includes "Expected_Output" file. +Further tidied up the sources. +Tidied up the general help file: + -Changed "Freeware" to "free software" + -Corrected the information given on "!align". + -Added examples for most of the pseudo opcodes. + + +---------------------------------------------------------------------- +Section: New in release 0.04 beta +---------------------------------------------------------------------- + +Corrected some small bugs. +New PO: "!zone" (short "!zn") replaces "!module" (short "!mod") +Tidied up the sources a lot. +Changed bad style C code reported by lint. +Added GNU GPL hint in every source file. +Added startup message in verbose mode. +Added "Error: " to startup error messages. +Added Amiga, Linux and OS/2 versions + + +---------------------------------------------------------------------- +Section: New in release 0.03 beta +---------------------------------------------------------------------- + +Generally tidied up the source. +Moved RISC OS-specific CLI options to platform file. +Added pathname conversion from UNIX style to current platform style. +Added context variables (enabling "!source"s and macros). +Translated all documentation to english. +Changed string pseudo opcodes to allow numeric values. +Added verbose mode (CLI option "v"). +Added output buffer, removing the need for additional output pass (and + now the "!to" pseudo opcode can be placed anywhere). +More than one "label = pc" definition per statement now illegal. +Instead added possibility to have several statements on a single line + by using ":" as a separator character. +Added new keywords: "!set", "!if", "else", "!do", "until", "while" and + "!macro" +Added support for "!source". +Added basic support for blocks. +Added support for "!if {...} else {...}". +Added support for zone titles. +Added support for loops (endless loops are only detected if producing + code). +Added support for macros (even nested definitions are possible now). +Added DOS version. + + +---------------------------------------------------------------------- +Section: New in release 0.02 alpha +---------------------------------------------------------------------- + +Er, I don't know anymore. It was a bad ugly hack and it only ran on + RISC OS. :-) diff --git a/Platform/Apple/tools/ACME/docs/Errors.txt b/Platform/Apple/tools/ACME/docs/Errors.txt new file mode 100644 index 00000000..c76bd20b --- /dev/null +++ b/Platform/Apple/tools/ACME/docs/Errors.txt @@ -0,0 +1,372 @@ + + + ACME + + ...the ACME Crossassembler for Multiple Environments + + --- error messages --- + + +Here's a sorted list of all error messages ACME can give, possible +reasons and what you can do to sort it out. + + +---------------------------------------------------------------------- +Section: Errors on startup +---------------------------------------------------------------------- + +Cannot open toplevel file "FILENAME". + Maybe you mistyped its name? + +Error in CLI arguments: ... + There are several of these errors, but they should be quite self- + explanatory. + + +---------------------------------------------------------------------- +Section: Warnings during assembly +---------------------------------------------------------------------- + +"!cbm" is deprecated; use "!ct pet" instead. + This is given when "!cbm" is encountered. It still works though. + +"!pseudopc/!realpc" is deprecated; use "!pseudopc {}" instead. + "!pseudopc" can now be used with a block, so it can be nested. + So "!realpc" is no longer needed. It still works though. + +"!subzone {}" is deprecated; use "!zone {}" instead. + "!zone" can now be used stand-alone (which just changes the + current zone) as well as with a block (which creates a subzone). + So "!subzone" is no longer needed. It still works though. + +!warn: ... + This is given when the pseudo opcode "!warn" is executed. The + actual message varies according to the pseudo opcode's arguments. + +Assembling buggy JMP($xxff) instruction + The original 6502 processor has a bug: When executing an indirect + JMP instruction where the low byte of the argument equals $ff, it + fetches the high byte of the jump target address not from memory + location ARGUMENT+1, but from ARGUMENT-255. Therefore ACME issues + this warning if you are about to generate such an instruction. + Note that this warning is only given for CPU types 6502 and 6510, + because 65c02 and 65816 have been fixed in this respect. + +Bug in ACME, code follows + A situation has been encountered implying there is a bug in ACME. + See the last section in this file. + +Implicit label definition not in leftmost column. + An implicit label definition has blanks before the label name. + Imagine this source code: + lda #00 + imx + rts + Obviously, there's a typo in the middle line (imx instead of inx), + but ACME does not recognize this: It looks just like an implicit + label definition! Therefore releases 0.89 and higher warn you when + an implicit label does not start in column 1. Future versions may + support a command line option to switch this off again, though. + +Label dump file already chosen. + The "!sl" command was given more than once (or in addition to the + "--labeldump" command line option). Only use it once. + +Label name starts with a shift-space character. + The name of a global label starts with a shift-space character. It + is highly likely that this is a typing error, therefore this + warning is issued. + +Memory already initialised. + The "!initmem" command was given more than once (or in addition to + the "--initmem" command line option). Only use it once. + +Offset assembly still active at end of segment. Switched it off. + There's a "*=" command inside an offset assembly block. If you + know of a situation where it makes sense to do this, please tell + me. + +Output file already chosen. + The "!to" command was given more than once (or in addition to the + "--outfile" command line option). Only use it once. + +Segment reached another one, overwriting it. + The program counter has just reached the start of another segment. + Because some people might want to assemble "onto" a binary file + that was loaded before, this is given as a warning instead of as + an error. + +Segment starts inside another one, overwriting it. + The given value in a "*=" command is located inside another + segment. Because some people might want to assemble "onto" a + binary file that was loaded before, this is given as a warning + instead of as an error. + +Used "!to" without file format indicator. Defaulting to "cbm". + Now that "!to" can be given a file format keyword (either "plain" + or "cbm"), using "cbm" as default seems inappropriate. It still + works though. + +Using oversized addressing mode. + ACME just assembled a command using an addressing mode that was + larger than needed. This only happens if ACME could not work out + the argument's value in the first pass, therefore assuming a 16- + bit addressing mode. If, in a later pass, ACME finds out that the + argument is small enough to fit in 8 bits, then this warning is + shown. If you define all your zeropage labels *before* they are + first used, this shouldn't happen. If you know that a specific + argument fits in 8 bits, you can force ACME to use 8 bits + addressing by postfixing the command with "+1". Example: + lda+1 label + ACME will then use an 8-bit addressing mode, regardless of whether + the label is known or not. If the label value happens to be too + large to fit in 8 bits, ACME will show an error of course (To + always truncate a value to 8 bits, use the '<' operator). + More about the postfixing method can be found in "AddrModes.txt". + + +---------------------------------------------------------------------- +Section: Errors during assembly +---------------------------------------------------------------------- + +"ACME" environment variable not found. + This will be shown if the source code references any files from + the library, but the library location variable wasn't set. This + can only be given on systems using the said variable. + +!error: ... + This is given when the pseudo opcode "!error" is executed. The + actual message varies according to the pseudo opcode's arguments. + +Cannot open input file. + ACME had problems opening an input file ("!bin", "!convtab" or + "!src"). Maybe you mistyped its name. + +Conversion table incomplete. + The conversion table file is too small. It needs to be exactly 256 + bytes in size. + +Division by zero. + Guess what - you attempted to divide by zero. + +Exponent is negative. + Using negative exponents would only give sensible results when + using floating point maths. + +File name quotes not found ("" or <>). + File names have to be given in quotes. Either "" quoting for files + located in the current directory or <> quoting for library files. + +Found '}' instead of end-of-file. + ACME encountered a '}' character when it expected the file to end + instead (because no blocks were open). + +Garbage data at end of statement. + There are still arguments when there should not be any more. + +Illegal combination of command and addressing mode. + The given command cannot be used with the given addressing mode on + the CPU you have chosen. + +Illegal combination of command and postfix. + The given command cannot be used with the addressing mode + indicated by the given postfix. + +Illegal postfix. + You used a postfix other than "+1", "+2" or "+3". + +Label already defined. + You defined a label that already had a different value. To change + a label's value, use the "!set" pseudo opcode. + +Macro already defined. + Macros can only be defined once. If you define a macro twice, ACME + will help you find the definitions by giving a warning for the + first definition and a serious error (stopping assembly) for the + second definition. + +Macro not defined (or wrong signature). + You tried to call a macro that either wasn't defined yet (always + define macros before using them) or was called with an illegal + argument list. There must be a 1:1 match between the definition's + formal parameters and the call's actual arguments. + +Macro parameter twice. + The same label name is used two (or more) times in the same macro + parameter list. + +Negative value - cannot choose addressing mode. + Because the argument is a negative value, ACME does not know what + addressing mode (8 bits, 16 bits, on a 65816 even 24 bits) to use. + You can overcome this problem using the postfix method. Or correct + your program to use positive addresses instead. + +No string given. + ACME expects a string but doesn't find it. + +Number out of range. + A value is too high or too low. + +Program counter is unset. + You didn't set the program counter, so ACME didn't know where to + start. + +Quotes still open at end of line. + You forgot the closing quotes. + +Source file contains illegal character. + Your source code file contained a null byte. + +Syntax error. + Guess what - there's a syntax error. + +Target out of range. + A relative addressing (branch commands or PER) only has a limited + range. You exceeded it. + +There's more than one character. + You used a text string in an arithmetic expression, but the string + contained more than a single character. + +Too late for postfix. + You can only postfix labels at the start, before they are used for + the first time. + +Too many '('. + A formula ends before all parentheses were closed. + +Too many ')'. + There are more closing than opening parentheses in a formula. + +Unknown encoding. + You used the "!convtab" command with a keyword ACME does not know. + +Unknown operator. + You used an arithmetic/logical operator ACME does not know. + Remember that text versions of operators have to be given in upper + case. + +Unknown output format. + You used the "!to" command with a keyword ACME does not know. + +Unknown processor. + You used the "!cpu" command with a keyword ACME does not know. + +Unknown pseudo opcode. + You have mistyped a "!" command. + +Value not yet defined. + A value could not be worked out. Maybe you mistyped a label name. + Whether this is given as a "normal" or as a serious error depends + on the currently parsed pseudo opcode. + + +---------------------------------------------------------------------- +Section: Serious errors (stopping assembly) +---------------------------------------------------------------------- + +!serious: ... + This is given when the pseudo opcode "!serious" is executed. The + actual message varies according to the pseudo opcode's arguments. + +Found end-of-file instead of '}'. + The file ended when ACME expected the block to be closed instead + (because there was at least one block left open). + +Loop count is negative. + You used the "!for" command with a negative loop count. + +Macro already defined. + Macros can only be defined once. If you define a macro twice, ACME + will help you find both definitions by giving a warning for the + first definition and a serious error (stopping assembly) for the + second definition. + +Missing '{'. + ACME didn't find the expected '{' character. Remember that '{' + characters must be given on the same line as the command they + belong to. + +Out of memory. + When ACME runs out of memory, it stops assembly, giving this + error. Free some memory and try again. It's highly unlikely anyone + will ever see this error, though. ;) + +Produced too much code. + The program counter reached address $10000, leaving the output + buffer. At the moment, ACME can only produce a maximum of 64 KB. + +Syntax error. + This is only given as a _serious_ error if it's in a "!do" loop + condition. + +Too deeply nested. Recursive macro calls? + The only reason for ACME to have a limit on macro call nesting + at all is to find infinite recursions. Current limit is 64. + +Too deeply nested. Recursive "!source"? + The only reason for ACME to still have a limit on "!source" + nesting at all is to find infinite recursions. Current limit is + 64. + +Value not yet defined. + A value could not be worked out. Maybe you mistyped a label name. + Whether this is given as a "normal" or as a serious error depends + on the currently parsed pseudo opcode. + + +---------------------------------------------------------------------- +Section: Errors on closedown +---------------------------------------------------------------------- + +Cannot open label dump file "FILENAME". +Cannot open output file "FILENAME". + Make sure the name doesn't contain wildcard characters and you + have write access to the directory. + +No output file specified (use the "-o" option or the "!to" pseudo opcode). + You didn't specify the output file, so ACME did not create one. + + +---------------------------------------------------------------------- +Section: Bugs in ACME +---------------------------------------------------------------------- + + The warning "Bug in ACME, code follows" is always followed by a + serious error message, stopping assembly. The second message + actually gives a hint about the bug's location in the source code. + If you ever get this combination of warning and serious error, + please send me an e-mail and tell me about it. If possible, + include a piece of source code that triggers it. + + Please don't get this wrong - there are no known bugs. I just left + some debugging code in place in case there is a bug I failed to + notice during testing. In practice, this warning is not expected + to be given at all. That's the reason why I want to be notified if + it *does* decide to show up. + + The hint messages are of no real interest to the end user, but here + they are for completeness' sake. + +IllegalGroupIndex + The mnemonic tree contains a group that I didn't add. + +IllegalBlockTerminator + A RAM block (macro or loop) was terminated incorrectly. + +IllegalOperatorHandle + The expression parser found an operator that does not exist. + +OperandStackNotEmpty + The expression parser has finished though there are still operands + left to parse. + +OperatorStackNotEmpty + The expression parser has finished though there are still + operators left to parse. + +StrangeInputMode + The input state machine has reached a state that does not exist. + +StrangeParenthesis + The expression parser found a non-existing operator. diff --git a/Platform/Apple/tools/ACME/docs/Example.txt b/Platform/Apple/tools/ACME/docs/Example.txt new file mode 100644 index 00000000..7d83ffc7 --- /dev/null +++ b/Platform/Apple/tools/ACME/docs/Example.txt @@ -0,0 +1,31 @@ + + + ACME + + ...the ACME Crossassembler for Multiple Environments + + --- the example source codes --- + + +To assemble the given example source code files, change to the +"examples" directory and type + + acme ddrv.a + acme macedit.a + +ACME will parse the source code files and will then produce files +called "ddrv64.prg" and "macedit.o". You may compare them to the files +called "ddrv64.exp" and "macedit.exp", to make sure ACME works as it +should do. + +Just in case you wonder: + + "ddrv64.prg" is a joystick/mouse driver for the C64. The source + code is fairly well documented. Have a look at it if you need more + examples on how ACME works. By changing one line in the source, + you can also generate "ddrv128.prg", a binary for the C128. + + "macedit" is an unusably bad text editor for the C128. The source + code is not meant to be a good example of ACME's capabilities. + Please *don't* look at it. :) + diff --git a/Platform/Apple/tools/ACME/docs/Help.txt b/Platform/Apple/tools/ACME/docs/Help.txt new file mode 100644 index 00000000..211527fc --- /dev/null +++ b/Platform/Apple/tools/ACME/docs/Help.txt @@ -0,0 +1,176 @@ + + + ACME + + ...the ACME Crossassembler for Multiple Environments + + Release 0.91 + + - free software - + + (C) 1998-2006 Marco Baye + + +---------------------------------------------------------------------- +Section: Copyright +---------------------------------------------------------------------- + +ACME - a crossassembler for producing 6502/6510/65c02/65816 code. +Copyright (C) 1998-2006 Marco Baye +The ACME icon was designed by Wanja "Brix" Gayk + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or (at +your option) any later version. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, +Boston, MA 02111-1307 USA + + +---------------------------------------------------------------------- +Section: Introduction +---------------------------------------------------------------------- + +ACME is a crossassembler for the 65xx range of processors. It knows +about the standard 6502, the 65c02 and the 65816. It also supports +the undocumented ("illegal") opcodes of the 6510 processor (a 6502- +variant that is used in the Commodore C=64). + +This text and the other files in the same directory only describe the +basic functions independent of the platform used. There should be +another help file in this archive that outlines the features specific +to your platform. + +The files in the docs directory and what they contain: + + 65816.txt Stuff specific to the 65816 processor + AddrModes.txt How to choose non-standard addressing modes + AllPOs.txt Lists ACME's pseudo opcodes. Use as a reference. + Changes.txt The change log. + COPYING Version 2 of the GNU General Public License + Errors.txt Lists ACME's error messages and what they mean. + Example.txt Information on how to assemble the example sources. + Help.txt ...is this text. + Illegals.txt Support for undocumented opcodes. + Lib.txt Information about the library. + QuickRef.txt All the basic stuff about ACME. + Source.txt How to compile ACME. + Upgrade.txt Incompatibilities to earlier versions. + +IMPORTANT: If you upgrade from ACME 0.05 or earlier, don't forget to +read the file "Upgrade.txt" - release 0.07 and all later ones are +slightly incompatible to 0.05 and earlier. + +If you want to start using ACME right away, read the file +"QuickRef.txt", it contains the main help text. + + +---------------------------------------------------------------------- +Section: What it can and does +---------------------------------------------------------------------- + +ACME is a crossassembler. +ACME can produce code for the 6502, 6510, 65c02 and 65816 processors. +It does this *fast*. +It can produce at most 64 KBytes of code. +You can use global labels, local labels and anonymous labels. +It is fast. +You can use global and local macros. +You can use conditional assembly. +You can use looping assembly (There are two ways to do this; a very + simple and a very flexible one). +You can include other source files. +You can include binary files (either whole or parts) directly into the + output. +You can use offset assembly (code that is designed to run at a + different address). +It is fast. +ACME's maths parser uses operator priorities, so 1+2*3 will correctly + give 7 (unlike some other free assemblers that give 9 instead). +ACME's maths parser has no problems concerning parentheses and + indirect addressing modes. +ACME's maths parser knows a shit load of different operations. +You can dump the global labels into a file. +ACME supports a library of commonly used macros and labels. +It always takes as many passes as are needed. +ACME exists on several platforms, meaning you can easily exchange your + sources with other people (preferring other OSes). +ACME can convert its strings to PetSCII and screen code (Okay, this is + C64-specific). +Did I mention that it is fast? + + +---------------------------------------------------------------------- +Section: What it can't and doesn't +---------------------------------------------------------------------- + +ACME cannot transfer data to a C64 or another computer. +ACME does not produce ".o65"-format linkable object files. +ACME cannot produce more than 64 KB (would be useful for the 65816). +ACME cannot disassemble or relocate given code files. + + +---------------------------------------------------------------------- +Section: Platform independence +---------------------------------------------------------------------- + +ACME was initially developed under RISC OS. Currently there are +platform-specific versions available for AmigaOS, DOS, Linux, Windows +and RISC OS. The Linux sources should be ready to compile on most +other UNIX-like systems as well. In the future there will hopefully +also be a version that runs on the C64/128. +Though the source code does not exactly look like it *g*, ACME was +written with portability in mind: Some of its limitations were +included on purpose, just to allow a C64/128 version. To successfully +assemble multi-file source codes from other platforms, the file names +have to be altered as little as possible. Please name all your files +that may be distributed in a sensible way, for example by limiting +their file names to 8+3 format. I really hate this stupid will-it- +ever-die DOS convention, but using it is the only way to ensure +portability of files. + +Please use ".a" as the file name extension of ACME source code files. + +All file names used inside source code files have to be given in UNIX +style, ACME will convert them to the current host platform style if +needed. + +There should be no problems concerning newline characters, ACME was +designed to cope with CR, LF and CRLF. + +A minor problem is the different character tables used on different +systems. As all predefined ACME keywords only use 7-bit ASCII, the +assembler will work on any system that uses a superset of this +character table: UTF-8, ANSI, ISO 8859, etc. +Label names can contain top-bit-set characters - these may look +strange if the sources are edited on a different platform, but ACME +will still work. + +If you want to port ACME to another platform, please inform me so that +I can add your version to the ones already present on the ACME +homepage. As the sources are released under the GNU General Public +License, you are not forced to do this; but it would help to make ACME +available to other users. +The same goes for any changes or enhancements to the sources: Please +send me a copy so that the changes can be incorporated into the next +"official" release on the ACME home page. + + +---------------------------------------------------------------------- +Section: Contacting the author +---------------------------------------------------------------------- + +The newest version of ACME can be found at the ACME homepage: +http://home.pages.de/~mac_bacon/smorbrod/acme/ + +If you want to report a bug or make a suggestion, then simply send +me an email: +mailto:marco@baye.de diff --git a/Platform/Apple/tools/ACME/docs/Illegals.txt b/Platform/Apple/tools/ACME/docs/Illegals.txt new file mode 100644 index 00000000..0828f8ae --- /dev/null +++ b/Platform/Apple/tools/ACME/docs/Illegals.txt @@ -0,0 +1,130 @@ + + + ACME + + ...the ACME Crossassembler for Multiple Environments + + --- Undocumented ("illegal") opcodes --- + + +Since release 0.87, ACME contains support for some of the undocumented +opcodes of the 6502 processor. Here they are: + + | addressing mode | +Mnemo | 8 8,x 8,y 16 16,x 16,y (8,x) (8),y | performs: +------+--------------------------------------------------+----------- + slo | 07 17 -- 0f 1f 1b 03 13 | asl + ora + rla | 27 37 -- 2f 3f 3b 23 33 | rol + and + sre | 47 57 -- 4f 5f 5b 43 53 | lsr + eor + rra | 67 77 -- 6f 7f 7b 63 73 | ror + adc + sax | 87 -- 97 8f -- -- 83 -- | stx + sta + lax | a7 -- b7 af -- bf a3 b3 | ldx + lda + dcp | c7 d7 -- cf df db c3 d3 | dec + cmp + isc | e7 f7 -- ef ff fb e3 f3 | inc + sbc + +In release 0.89, further ones were added: + + | addressing mode | +Mnemo | implied #8 8 8,x 16 16,x | performs: +------+-------------------------------------+------------------------ + anc | -- 2b -- -- -- -- | A = A & arg, then C=N + asr | -- 4b -- -- -- -- | A = A & arg, then lsr + arr | -- 6b -- -- -- -- | A = A & arg, then ror + sbx | -- cb -- -- -- -- | X = (A & X) - arg + dop | 80* 80 04 14 -- -- | skips next byte + top | 0c* -- -- -- 0c 1c | skips next two bytes + jam | 02 -- -- -- -- -- | crash (wait for reset) + +Example: + !cpu 6510 ; activate additional mnemonics... + lax (some_zp_label,x) ; ...and use them. No, this + dcp (other_zp_label),y ; example does not make sense. + +*) Note that "dop" and "top" can be used with implied addressing, but +the generated opcodes are those for immediate and 16-bit absolute +addressing, respectively. Using dop/top with x-indexed addressing +might have its uses when timing is critical (crossing a page border +adds a penalty cycle). + +There is no guarantee that these opcodes actually work on a given 6502 +(or 6510, or 8500, or 8502) CPU. But as far as I know, nobody ever +found an unmodified C64/C128 where these illegals didn't work. That's +why I used "6510" as the CPU keyword instead of "6502illegal" or +something like that. + +These illegals will definitely *not* work on 65c02 and 65816 CPUs. But +I really should not have to tell you that ;) + +Because there are no official mnemonics for these opcodes, different +people use different names for them. I hope my choices are not too +exotic for your taste. + +Just for the sake of completeness: Here are all the remaining opcodes +(the ones ACME won't generate): + +Opcode| Description +------+-------------------------------------------------------------- + 0b | same as 2b anc #8 + 12 | same as 02 and others jam CRASH + 1a | same as (*legal*) ea nop + 22 | same as 02 and others jam CRASH + 32 | same as 02 and others jam CRASH + 34 | same as 14 and others dop 8,x + 3a | same as (*legal*) ea nop + 3c | same as 1c and others top 16,x + 42 | same as 02 and others jam CRASH + 44 | same as 04 dop 8 + 52 | same as 02 and others jam CRASH + 54 | same as 14 and others dop 8,x + 5a | same as (*legal*) ea nop + 5c | same as 1c and others top 16,x + 62 | same as 02 and others jam CRASH + 64 | same as 04 dop 8 + 72 | same as 02 and others jam CRASH + 74 | same as 14 and others dop 8,x + 7a | same as (*legal*) ea nop + 7c | same as 1c and others top 16,x + 82 | same as c2/e2 dop #8, but said to CRASH sometimes + 89 | same as 80 dop #8 + 8b | see notes below + 92 | same as 02 and others jam CRASH + 93 | see notes below + 9b | see notes below + 9c | see notes below + 9e | see notes below + 9f | see notes below + ab | see notes below + b2 | same as 02 and others jam CRASH + bb | see notes below + c2 | same as 82/e2 dop #8, but said to CRASH sometimes + d2 | same as 02 and others jam CRASH + d4 | same as 14 and others dop 8,x + da | same as (*legal*) ea nop + dc | same as 1c and others top 16,x + e2 | same as 82/c2 dop #8, but said to CRASH sometimes + eb | same as (*legal*) e9 sbc #8 + f2 | same as 02 and others jam CRASH + f4 | same as 14 and others dop 8,x + fa | same as (*legal*) ea nop + fc | same as 1c and others top 16,x + + +Concerning opcodes 8b, 93, 9b, 9c, 9e, 9f, ab, bb: + +These opcodes are said to be unstable. For more information about what +they do, see these documents: + John West, Marko Mäkelä. '64doc' file, 1994/06/03. + Extra Instructions Of The 65XX Series CPU, Adam Vardy, 27 Sept. 1996 + 6502 Undocumented Opcodes, by Freddy Offenga, 5/17/1997 + AAY64 (All About Your 64) + +I did not see much point in assigning mnemonics for these opcodes. The +reference documents above call them: + 8b: ane, xaa + 93: sha, axa, ahx + 9b: shs, tas, xas + 9c: shy, say, sya + 9e: shx, xas, sxa + 9f: sha, axa, ahx + ab: lxa, oal, atx + bb: las, lar, lae diff --git a/Platform/Apple/tools/ACME/docs/Lib.txt b/Platform/Apple/tools/ACME/docs/Lib.txt new file mode 100644 index 00000000..fcf8b079 --- /dev/null +++ b/Platform/Apple/tools/ACME/docs/Lib.txt @@ -0,0 +1,21 @@ + + + ACME + + ...the ACME Crossassembler for Multiple Environments + + --- the library --- + + +The files in the "ACME_Lib" directory tree can be accessed from +within ACME sources when using the pseudo opcodes "!source" or +"!binary": + +If the file names are given using "..." quoting, ACME will look for +the files in the current directory. +If the file names are given using <...> quoting, ACME will look for +them in the ACME_Lib directory tree however. + +All files in the ACME_Lib directory tree are in the public domain. +They are *NOT* covered by the GNU General Public License, under which +the actual ACME program is released. diff --git a/Platform/Apple/tools/ACME/docs/QuickRef.txt b/Platform/Apple/tools/ACME/docs/QuickRef.txt new file mode 100644 index 00000000..a115910a --- /dev/null +++ b/Platform/Apple/tools/ACME/docs/QuickRef.txt @@ -0,0 +1,358 @@ + + + ACME + + ...the ACME Crossassembler for Multiple Environments + + --- Quick reference --- + + +This file should give you a basic overview. More specialized stuff +like forcing a specific addressing mode is discussed in extra files +("AddrModes.txt" in this case). + + +---------------------------------------------------------------------- +Section: Example of what an ACME source code file looks like +---------------------------------------------------------------------- + +;--- Example code fragment, start --- + + !to "tiny.o", cbm ; set output file and format + *= $c000 ; set program counter + + basout = $ffd2 ; explicit global label def. + ; a string output loop: + ldx #0 + beq + ; enter loop + +- jsr basout ; output character + inx ; advance pointer ++ lda .string,x ; get character + bne - ; check whether last + rts +.string !pet "Dumb example", 13, 0 + +;--- Example code fragment, end --- + + +Here's the same fragment again, now with some additional info: + +;--- Example code fragment, start --- + + !to "tiny.o", cbm ; set output file and format +; This is a pseudo opcode to select the output filename and format. +; This can also be done using the command line options "-o" and "-f", +; respectively. + *= $c000 ; set program counter +; This can also be done using the command line option "--setpc". + basout = $ffd2 ; explicit global label def. +; Now "basout" is defined as a global label having the value $ffd2. + ; a string output loop: + ldx #0 + beq + ; enter loop +; "+" is an anonymous forward label. Other ones are "++", "+++", etc. +; They can be used like any other label, but they always reference +; their *NEXT* definition. This saves having to think of names for +; unimportant labels. As the label's value is not defined yet, ACME +; will need to perform a second pass. +- jsr basout ; output character +; "-" is an anonymous backward label. Other ones are "--", "---", etc. +; They can be used like any other label, but they always reference +; their *PREVIOUS* definition. This saves having to think of names for +; unimportant labels. In the line above, the value of "-" is set to +; the current program counter. + inx ; advance pointer ++ lda .string,x ; get character +; Here the value of "+" is set to the current program counter. +; ".string" is a local label (because its name starts with a '.' +; character), but as its value is not defined yet, ACME will need to +; perform a second pass. + bne - ; check whether last +; Here the last definition of the anonymous "-" label is referenced. + rts +.string !pet "Dumb example", 13, 0 +; Now the value of the local label ".string" is set to the current +; program counter. All label values are defined now, so after having +; done the second pass, the binary will be saved. The "!pet" pseudo +; opcode stores its string argument in PetSCII encoding to memory, +; followed by the given byte values. + +;--- Example code fragment, end --- + +As you can see, pseudo opcodes are prefixed with an exclamation mark. +That's non-standard, but: Backwards compatibility is the root of all +evil. :) + +Summary about labels: + +There are global labels (their names starting with a letter or an +underscore character). These can be accessed throughout the whole +assembly. +Then there are local labels (their names starting with a '.' +character). These can only be accessed from inside the macro or zone +they were defined in (for more about macros and zones, see the file +"AllPOs.txt"). +And then there are anonymous labels (their names being sequences of +either '-' or '+' characters). They are also local (bound to their +macro/zone), but in addition to that, the "-" labels can only be used +for backward references, while the "+" labels can only be used for +forward references. +In contrast to global and local labels, anonymous labels can not be +defined explicitly (as in LABEL=VALUE). + +Save the given example source code to a file called "tiny.a" and start +acme by typing + + acme tiny.a + +ACME will then parse the file and report any errors. An output file +will only be generated if there were no errors and if an output +filename has been given. + +After assembly, the example program can be run on a C64 using + + LOAD "tiny.o",8,1 + SYS 49152 + +Note that ACME does not include any routines for transferring data to +a C64. Such tools exist on almost every platform, and I didn't want +ACME to become bloatware. + + +---------------------------------------------------------------------- +Section: The pseudo opcodes +---------------------------------------------------------------------- + +A list with information on how to use all the Pseudo Opcodes can be +found in the file "AllPOs.txt". Here's just a short overview: + +!byte / !word / !24 / !32 / !fill / !align +...for directly placing values into the output file. + +!zone / !sl +...for defining the scope of local labels and saving global labels. + +!convtab / !pet / !raw / !scr / !scrxor / !text +...for converting and outputting strings. + +!do / !endoffile / !for / !if / !ifdef / !set +...for flow control; looping assembly and conditional assembly. + +!binary / !source / !to +...for handling input and output files. + +!pseudopc +...for offset assembly. + +!initmem *= +...for segment assembly. + +!macro + +...for defining and calling macros. + +!cpu !al !as !rl !rs +...for CPU support, especially the 65816 processor. + +!warn !error !serious +...for generating warnings, errors and serious errors. + + +---------------------------------------------------------------------- +Section: Command line arguments +---------------------------------------------------------------------- + +The command line syntax for calling acme is quite simple: + + acme [options] [files] + +Available options are: + -h, --help show this help and exit. + This is more or less useless, because the help is also shown + if ACME is run without any arguments at all. + + -f, --format FORMAT select output format ("plain" or "cbm") + -o, --outfile FILE select output file. + Output filename and format can also be given using the "!to" + pseudo opcode. If the format is not specified, "!to" defaults + to "cbm", while the command line option defaults to "plain". + + -l, --labeldump FILE select label dump file. + This can also be given using the "!sl" pseudo opcode. + + --cpu CPU_TYPE set processor type. + This can be changed in the source code using the "!cpu" pseudo + opcode. Defaults to 6502. + + --setpc NUMBER set program counter. + This can also be given in the source code using "*=NUMBER". + + --initmem NUMBER define 'empty' memory. + This can also be given using the "!initmem" pseudo opcode. + Defaults to zero. + + --maxerrors NUMBER set number of errors before exiting. + If not given, defaults to 10. + + --maxdepth NUMBER set recursion depth for macro calls and the + "!source" pseudo opcode. If not given, defaults to 64. + + -vDIGIT set verbosity level. + Sets how much additional informational output is generated. + Higher values mean more output: + + acme -v0 source.a + This is the default: No additional output is generated, + ACME will only display warnings and errors. + + acme -v1 source.a + Now the start and end addresses of the generated output + file are displayed, along with its size (a CBM-style + "load address" is *not* counted). + + acme -v2 source.a + In addition to the "-v1" output, ACME will announce each + pass, will show amount and offset of "!binary" loads, and + show start and end addresses and size of each segment. + + acme -v3 source.a + In addition to the "-v2" output, ACME will now announce + each source file. + + -V, --version show version and exit. + +Platform-specific versions of ACME might offer more options. +Since version 0.89, ACME accepts more than one top-level-filename +given on the command line. + + +---------------------------------------------------------------------- +Section: The maths parser +---------------------------------------------------------------------- + +ACME has a relatively powerful maths parser. This parser is used +whenever ACME expects to read an integer value. Supported operations +include addition, subtraction, multiplication, divisions, comparisons, +shifts, negation, boolean operations and some assembler-specific stuff +like extracting the "low byte", the "high byte" or the "bank byte" +of a value. +All calculations are done using signed 32-bit integer arithmetic and +all label values are internally handled using 32 bits. + + +This is a list of the operators currently known by ACME: + + Priority Example Meaning Alias +------------------------------------------------------------ + 13 ! v Complement of NOT + 12 v ^ w To the power of + 11 - v Negate + 10 v * w Multiply + 10 v / w Integer-Divide DIV + 10 v % w Remainder of DIV MOD + 9 v + w Add + 9 v - w Subtract + 8 v << w Shift left ASL, LSL + 8 v >> w Arithmetic shift right ASR + 8 v >>> w Logical shift right LSR + 7 < v Lowbyte of + 7 > v Highbyte of + 7 ^ v Bankbyte of + 6 v <= w Lower or equal + 6 v < w Lower than + 6 v >= w Higher or equal + 6 v > w Higher than + 5 v != w Not equal <>, >< + 4 v = w Equal + 3 v & w Bit-wise AND AND + 2 Bit-wise exclusive OR EOR, XOR + 1 v | w Bit-wise OR OR + +Operations with higher priority are done first. Of course you can +change this using parentheses. If you prefer the aliases over the +shorthand characters, note that they must be written in capital +letters. +Note that though there are operators to extract the "low byte", the +"high byte" and the "bank byte", there is no operator to extract the +fourth byte. If you want to access that, shift it down using ">>>" or +"LSR". +In cases where it's not clear which operator was wanted, ACME takes +the longest possible one: + v<>w ...checks for "v not equal w" + v< >w ...checks for "v smaller than high byte of w" +So you may have to separate operators with spaces to make sure ACME +does what you want. + + +This is a list of the value formats currently known by ACME: + + Example Meaning Prefix +--------------------------------------------------------------------- + GetByte Global label None + .Loop Local label "." + 9260 Decimal value None + $1a8e Hexadecimal value "$" + 0x8b4f Hexadecimal value "0x" + &1054 Octal value "&" + %10010 Binary value "%" +In binary values you can substitute the characters "0" and "1" by "." +and "#" respectively. This way the values are much more readable. + "r" Character value Double quotes + 'r' Character value Single quotes +The value depends on the current conversion table, chosen using the +"!ct" pseudo opcode. + * The current PC "*" +During offset assembly, "*" gives the value of the "Pseudo PC". Just +to make sure: The value of the program counter is always the value +that was valid at the start of the current statement, so + + !word *, *, *, * + +will give the same value four times. I think most assemblers do it +this way. Calculating 0^0 (zero to the power of zero) will give 1. If +you don't know why I'm telling you this, ask a mathematician. :) + + +---------------------------------------------------------------------- +Section: Almost, but not quite, entirely useless syntax +---------------------------------------------------------------------- + +Every ACME source code file consists of a non-negative number of +"lines". The lines have to be separated from each other using CR, LF +or CRLF characters. + +Every line consists of a non-negative number of "statements" and an +optional comment. Statements have to be separated from each other +using colon (":") characters, the comment has to be prefixed with a +semicolon (";") character. + +Every statement consists of an optional "implicit label definition" +and an optional "command". These are separated from each other using +any number of SPACE or TAB characters. If an implicit label definition +has blanks before it, a warning is given (to spot typing errors - see +Errors.txt for more info). + +Every label consists of these characters: "a" to "z", "A" to "Z", "0" +to "9", the underscore character "_" and all characters with values +beyond 127. The first character must not be a digit though. But it can +be a dot ("."), making the label a local one. Two other possibilities +for label names are "all-characters-are-minus" (then it's an anonymous +backward label) and "all-characters-are-plus" (then it's an anonymous +forward label). + +Every command is one of the following: + An assembler opcode + A pseudo opcode, beginning with a "!" character + An explicit label definition (label=value) + A pc definition, beginning with a "*" character + A macro call, beginning with a "+" character +...and the syntax of those things varies. :) + +Assembler mnemonics and pseudo opcodes are case insensitive, so +whether you write "LDA" or "lda" or "LdA" does not make a difference. + +Arithmetic operators like MOD, XOR, LSL must be written in UPPER CASE; +this rule simply serves to make them stand out. + +Label names are case sensitive, so "label" and "Label" are two +different things. diff --git a/Platform/Apple/tools/ACME/docs/Source.txt b/Platform/Apple/tools/ACME/docs/Source.txt new file mode 100644 index 00000000..d248999e --- /dev/null +++ b/Platform/Apple/tools/ACME/docs/Source.txt @@ -0,0 +1,19 @@ + + + ACME + + ...the ACME Crossassembler for Multiple Environments + + --- source files --- + + +This program is free software, released under the terms of the GNU +General Public License. Therefore, the sources must be made publicly +accessible. If this archive does not contain the source file tree, you +can download it from the ACME web page at + +http://home.pages.de/~mac_bacon/smorbrod/acme/ + +To build ACME, you need a recent C compiler and a "make" utility. On +most systems, typing "make" should suffice to build the binary. See +your platform's help file for more information. diff --git a/Platform/Apple/tools/ACME/docs/Upgrade.txt b/Platform/Apple/tools/ACME/docs/Upgrade.txt new file mode 100644 index 00000000..33580b11 --- /dev/null +++ b/Platform/Apple/tools/ACME/docs/Upgrade.txt @@ -0,0 +1,119 @@ + + + ACME + + ...the ACME Crossassembler for Multiple Environments + + --- compatibility problems --- + + +If you haven't used ACME before, you don't need to read this text. +It is only of use to people who upgraded from ACME 0.05 (or earlier) +to ACME 0.07 (or later). + +You might encounter some slight incompatibilities: I have done a few +changes to ACME's workings. +Because backwards compatibility is the root of all evil (*g*), I did +not include any possibility to enforce the old behaviour. If one of +the following changes applies to your source files, assemble them with +this new release of ACME and then compare new and old output files. + +Sorry for this inconvenience, but at least I think that there won't be +any further changes in the future. + + +---------------------------------------------------------------------- +Section: Offset assembly / segment assembly +---------------------------------------------------------------------- + +Offset assembly is now done using a new pseudo opcode called +"!pseudopc". Have a look at "AllPOs.txt" for further information on +its syntax and usage. +The old way of just redefining the program counter by using more than +one "*= EXPRESSION" statements does something totally different now: +Whenever the program counter is redefined, ACME will actually change +its pointer into the output buffer, so you can write your code in +distinct segments. These segments can be given in any order. After +assembly, ACME stores everything from the lowest address used to the +highest address used. Have a look at "AllPOs.txt" for an example on +how to use this facility. + + +---------------------------------------------------------------------- +Section: Argument order of MVP/MVN +---------------------------------------------------------------------- + +The syntax of the 65816 opcodes MVN and MVP is usually given as + + MVN source_bank, destination_bank + +All previous versions of ACME did it the other way round: First the +destination bank, then the source bank. This has been fixed, ACME now +uses the syntax given above. + + +---------------------------------------------------------------------- +Section: Typecast +---------------------------------------------------------------------- + +You can use leading zeros to make ACME use a bigger addressing mode +than needed. Until now, this did not work when using labels. The +source code + + label1 = $fa + label2 = $00fa + + lda $fa + lda $00fa + lda label1 + lda label2 + +was assembled to: + + lda $fa + lda $00fa + lda $fa + lda $fa + +Release 0.07 of ACME now correctly assembles the given source code to: + + lda $fa + lda $00fa + lda $fa + lda $00fa + + +---------------------------------------------------------------------- +Section: !endoffile +---------------------------------------------------------------------- + +Previous versions of ACME knew a pseudo opcode called "!end" that +marks the end of a source code file. Because the word "end" doesn't +actually specify *what* is about to end, I changed this to +"!endoffile". You can also use a short version, called "!eof". The old +PO "!end" no longer works. + + +---------------------------------------------------------------------- +Section: Using the BIT command without parameters +---------------------------------------------------------------------- + +Release 0.07 of ACME will complain if you try to assemble BIT without +any parameter. Previous versions did just output the byte $2c - a +commonly known trick to mask the following 2-byte command on the 6502 +processor. If you still want to do this, use + + !src <6502/std.a> ; parse library file + +to include some standard macros. Then you can use + + +bit8 ; output $24 to mask following 1-byte command + +and + + +bit16 ; output $2c to mask following 2-byte command + +respectively. + + +That's all. Again, sorry for the inconvenience... diff --git a/Platform/Apple/tools/ACME/examples/ddrv128.exp b/Platform/Apple/tools/ACME/examples/ddrv128.exp new file mode 100644 index 0000000000000000000000000000000000000000..34ae5347dd64fa2c7a966e74a59a44767e875c38 GIT binary patch literal 641 zcmb7AzL)+5{`m0w{l4#g;rkxc_Nww>O`$n* zbdz|wmb$o4SCykR3s<@2n1-dFjH z?~<0xn-iuRDf(TbXIgur`HRO?e&{Fp__Rq%4~Yl&P53&h0gPc@o%L@vh85ypYF3EN zhGk+d+ia_WW|;(q`j_5Sw^JthxI)Z@W|b71JH&GH@iy7An%krvTsO7h4$lfwag{Wr z;F`^91;&pG%nZ`ct0ezhvQcyE9^(NPPyYY957dCCz&`K{cmW)6bR2X==aTancmODX oqzllUgLxkT0q_@yfEoWfM+fVIjppzjf?qmLbSPbcG!kHhe}fkGg#Z8m literal 0 HcmV?d00001 diff --git a/Platform/Apple/tools/ACME/examples/ddrv64.exp b/Platform/Apple/tools/ACME/examples/ddrv64.exp new file mode 100644 index 0000000000000000000000000000000000000000..d422a4b0a43d8c929efdaacc46948a38363f80fb GIT binary patch literal 608 zcmXAkzl#$=6vw~28_gX@yp3K+t~;>tz(Tt~PIG8;3Hc+^#AGi7Ew4~7&02^Xwouq6 zuq@dlD?}F5&cICLc@{E-f<=O9;*Y{(8}Vd!GtTCQ5AXZF^SzNtDIu&(B3WT z?KouRz}QfFIpvy{HKd7iIQ~ZayUIuPuctVf-dXx*?_WBTV@8hE@zsMq&|L>x_i3RK z>Y>$$^vIDCJC7?|kFEJa$imJ(Qzj1g)a%lO$xjBJbl$i )NU%YFaSu;|9W=R}Wv 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 AB>(^b literal 0 HcmV?d00001 diff --git a/Platform/Apple/tools/ACME/examples/me/tables.bin b/Platform/Apple/tools/ACME/examples/me/tables.bin new file mode 100644 index 0000000000000000000000000000000000000000..4e72161a2226289ffcf03946f44861e9bf5ee5f3 GIT binary patch literal 826 zcmXpIxhz~JEGhg-q*vt2|Nn1ZzIy#%M)Lps|KI-qpHto-S0(ztQvQGay#N2jYlQy) zpCl#r|NH;y(%--S|Nr^_|Nqbb|MdNz!1tdO$OeHQ5DHHItNTy@;gs~weev|!^NG`z zub94Q)#Cp%R&JWPY|H*7vo^1ry>RP}U7Fk07;HSf{oLxEXBOH;Z?IXrEVlT+?LGU( zc$TRP{x4;2u`sPLGBG!l*4E|fHM2D4Fwpy0__r2f_>|tcJ)K?M6CJJ}RJnQiD5L77 zBWj0_UAduu>$t|D6IZWko;+oH_VoF4_7~0^u)1^CI!^2MWJdLvcttxFr3FkEn_KeU zNf?zt4KMlxGJK-oTv>?WBD}I4t!?ds#^H`8k-@Hvra>-d&Tb(Q=27kzP9C9QmY!Y) zzTW+RXA6Ro{lm{B=a*U*N=NP#I38ar5x<@e2qF35$q|iAzXINz2H}$vZeYIlH*JxqEnedHeYK z`3D3B1&4%&g-1k2MaRU(-EU}YYHk6>O9wFGdwTo&Crq3)dCJsj(`U?_HG9t7dGiwz nlaf*@)aPe?xiP$qb1 literal 0 HcmV?d00001 diff --git a/Platform/Apple/tools/ACME/src/Makefile b/Platform/Apple/tools/ACME/src/Makefile new file mode 100644 index 00000000..7d4d0cbd --- /dev/null +++ b/Platform/Apple/tools/ACME/src/Makefile @@ -0,0 +1,66 @@ +CFLAGS = -O3 -Wall +#LIBS = -lm +CC = gcc +RM = rm + +#SRC = + +PROGS = acme +BINDIR = /usr/local/bin +USERBIN = $(HOME)/bin +JAR = acme.jar + +all: $(PROGS) $(JAR) + +acme: acme.o alu.o cliargs.o cpu.o dynabuf.o encoding.o flow.o global.o input.o label.o macro.o mnemo.o output.o platform.o section.o tree.o + $(CC) $(LIBS) $(CFLAGS) -o acme acme.o alu.o cliargs.o cpu.o dynabuf.o encoding.o flow.o global.o input.o label.o macro.o mnemo.o output.o platform.o section.o tree.o + strip acme + +$(JAR): + docker run -t -v "$(shell pwd):/project" mhaye/nestedvm:v4 /bin/bash -c "cd /project && nestedvm-c2jar $(JAR) acme.Acme acme.c alu.c cliargs.c cpu.c dynabuf.c encoding.c flow.c global.c input.c label.c macro.c mnemo.c output.c platform.c section.c tree.c" + +acme.o: config.h acme.h alu.h cpu.h dynabuf.h encoding.h flow.h global.h input.h label.h macro.h mnemo.h output.h platform.h section.h acme.h acme.c + +alu.o: config.h cpu.h dynabuf.h encoding.h global.h input.h label.h platform.h section.h tree.h alu.h alu.c + +cliargs.o: cliargs.h cliargs.c + +cpu.o: config.h alu.h dynabuf.h global.h input.h mnemo.h output.h tree.h cpu.h cpu.c + +dynabuf.o: config.h acme.h global.h input.h dynabuf.h dynabuf.c + +encoding.o: config.h alu.h acme.h dynabuf.h global.h output.h input.h tree.h encoding.h encoding.c + +flow.o: config.h acme.h alu.h dynabuf.h global.h input.h label.h macro.h mnemo.h tree.h flow.h flow.c + +global.o: config.h acme.h cpu.h input.h label.h macro.h platform.h section.h global.h global.c + +input.o: config.h dynabuf.h global.h section.h tree.h input.h input.c + +label.o: config.h acme.h alu.h cpu.h dynabuf.h global.h input.h mnemo.h section.h tree.h label.h label.c + +macro.o: config.h acme.h alu.h dynabuf.h global.h input.h label.h section.h tree.h macro.h macro.c + +mnemo.o: config.h alu.h cpu.h dynabuf.h global.h input.h output.h tree.h mnemo.h mnemo.c + +output.o: config.h acme.h alu.h cpu.h dynabuf.h global.h input.h tree.h output.h output.c + +platform.o: config.h platform.h platform.c + +section.o: config.h dynabuf.h global.h section.h tree.h section.h section.c + +tree.o: config.h dynabuf.h global.h label.h tree.h tree.c + +clean: + -$(RM) -f *.o $(PROGS) *~ core *.jar + + +install: all + install -d $(BINDIR) + install $(PROGS) $(BINDIR) + +userinstall: all + install -d $(USERBIN) + install $(PROGS) $(USERBIN) + +# DO NOT DELETE diff --git a/Platform/Apple/tools/ACME/src/Makefile.dos b/Platform/Apple/tools/ACME/src/Makefile.dos new file mode 100644 index 00000000..b1c1e0a3 --- /dev/null +++ b/Platform/Apple/tools/ACME/src/Makefile.dos @@ -0,0 +1,64 @@ +CFLAGS = -Wall -s +#LIBS = -lm +CC = gcc +RM = rm + +#SRC = + +PROGS = acme +#BINDIR = /usr/local/bin +#USERBIN = $(HOME)/bin + +all: $(PROGS) + +acme: acme.o alu.o cliargs.o cpu.o dynabuf.o encoding.o flow.o global.o input.o label.o macro.o mnemo.o output.o platform.o section.o tree.o + $(CC) $(LIBS) $(CFLAGS) -o acme.out acme.o alu.o cliargs.o cpu.o dynabuf.o encoding.o flow.o global.o input.o label.o macro.o mnemo.o output.o platform.o section.o tree.o + copy /b \djgpp\bin\pmodstub.exe + acme.out acmepmod.exe + djp acme.exe + djp acmepmod.exe + +acme.o: config.h acme.h alu.h cpu.h dynabuf.h encoding.h flow.h global.h input.h label.h macro.h mnemo.h output.h platform.h section.h acme.h acme.c + +alu.o: config.h cpu.h dynabuf.h encoding.h global.h input.h label.h platform.h section.h tree.h alu.h alu.c + +cliargs.o: cliargs.h cliargs.c + +cpu.o: config.h alu.h dynabuf.h global.h input.h mnemo.h output.h tree.h cpu.h cpu.c + +dynabuf.o: config.h acme.h global.h input.h dynabuf.h dynabuf.c + +encoding.o: config.h alu.h acme.h dynabuf.h global.h output.h input.h tree.h encoding.h encoding.c + +flow.o: config.h acme.h alu.h dynabuf.h global.h input.h label.h macro.h mnemo.h tree.h flow.h flow.c + +global.o: config.h acme.h cpu.h input.h label.h macro.h platform.h section.h global.h global.c + +input.o: config.h dynabuf.h global.h section.h tree.h input.h input.c + +label.o: config.h acme.h alu.h cpu.h dynabuf.h global.h input.h mnemo.h section.h tree.h label.h label.c + +macro.o: config.h acme.h alu.h dynabuf.h global.h input.h label.h section.h tree.h macro.h macro.c + +mnemo.o: config.h alu.h cpu.h dynabuf.h global.h input.h output.h tree.h mnemo.h mnemo.c + +output.o: config.h acme.h alu.h cpu.h dynabuf.h global.h input.h tree.h output.h output.c + +platform.o: config.h platform.h platform.c + +section.o: config.h dynabuf.h global.h section.h tree.h section.h section.c + +tree.o: config.h dynabuf.h global.h label.h tree.h tree.c + +clean: + del *.o +# -$(RM) -f *.o $(PROGS) *~ core + +#install: all +# install -d $(BINDIR) +# install $(PROGS) $(BINDIR) + +#userinstall: all +# install -d $(USERBIN) +# install $(PROGS) $(USERBIN) + +# DO NOT DELETE diff --git a/Platform/Apple/tools/ACME/src/Makefile.riscos b/Platform/Apple/tools/ACME/src/Makefile.riscos new file mode 100644 index 00000000..8d5e47d5 --- /dev/null +++ b/Platform/Apple/tools/ACME/src/Makefile.riscos @@ -0,0 +1,64 @@ +CFLAGS = -O3 -mthrowback -mlibscl -Wall +#LIBS = -lm +CC = gcc +RM = rm + +#SRC = + +PROGS = acme +#BINDIR = /usr/local/bin +#USERBIN = $(HOME)/bin + +all: $(PROGS) + +acme: acme.o alu.o cliargs.o cpu.o dynabuf.o encoding.o flow.o global.o input.o label.o macro.o mnemo.o output.o platform.o section.o tree.o + $(CC) $(LIBS) $(CFLAGS) -o !Unsqueezed acme.o alu.o cliargs.o cpu.o dynabuf.o encoding.o flow.o global.o input.o label.o macro.o mnemo.o output.o platform.o section.o tree.o + Squeeze -f -v !Unsqueezed !ACME.!RunImage + + + +acme.o: config.h acme.h alu.h cpu.h dynabuf.h encoding.h flow.h global.h input.h label.h macro.h mnemo.h output.h platform.h section.h acme.h acme.c + +alu.o: config.h cpu.h dynabuf.h encoding.h global.h input.h label.h platform.h section.h tree.h alu.h alu.c + +cliargs.o: cliargs.h cliargs.c + +cpu.o: config.h alu.h dynabuf.h global.h input.h mnemo.h output.h tree.h cpu.h cpu.c + +dynabuf.o: config.h acme.h global.h input.h dynabuf.h dynabuf.c + +encoding.o: config.h alu.h acme.h dynabuf.h global.h output.h input.h tree.h encoding.h encoding.c + +flow.o: config.h acme.h alu.h dynabuf.h global.h input.h label.h macro.h mnemo.h tree.h flow.h flow.c + +global.o: config.h acme.h cpu.h input.h label.h macro.h platform.h section.h global.h global.c + +input.o: config.h dynabuf.h global.h section.h tree.h input.h input.c + +label.o: config.h acme.h alu.h cpu.h dynabuf.h global.h input.h mnemo.h section.h tree.h label.h label.c + +macro.o: config.h acme.h alu.h dynabuf.h global.h input.h label.h section.h tree.h macro.h macro.c + +mnemo.o: config.h alu.h cpu.h dynabuf.h global.h input.h output.h tree.h mnemo.h mnemo.c + +output.o: config.h acme.h alu.h cpu.h dynabuf.h global.h input.h tree.h output.h output.c + +platform.o: config.h platform.h platform.c + +section.o: config.h dynabuf.h global.h section.h tree.h section.h section.c + +tree.o: config.h dynabuf.h global.h label.h tree.h tree.c + +clean: + wipe o.* ~c +# -$(RM) -f *.o $(PROGS) *~ core + +#install: all +# install -d $(BINDIR) +# install $(PROGS) $(BINDIR) + +#userinstall: all +# install -d $(USERBIN) +# install $(PROGS) $(USERBIN) + +# DO NOT DELETE diff --git a/Platform/Apple/tools/ACME/src/_amiga.h b/Platform/Apple/tools/ACME/src/_amiga.h new file mode 100644 index 00000000..4eb08799 --- /dev/null +++ b/Platform/Apple/tools/ACME/src/_amiga.h @@ -0,0 +1,53 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Platform specific stuff (in this case, for AmigaOS) +#ifndef platform_H +#define platform_H + + +// Symbolic constants and macros + +// Called once on program startup (could register exit handler, if needed) +#define PLATFORM_INIT + +// Convert UNIX-style pathname to Amiga-style pathname (no change) +#define PLATFORM_CONVERTPATHCHAR(a) (a) + +// String containing the prefix for accessing files from the library tree +#define PLATFORM_LIBPREFIX "progdir:acme_lib/" +#define NO_NEED_FOR_ENV_VAR + +// Setting file types of created files +#define PLATFORM_SETFILETYPE_CBM(a) +#define PLATFORM_SETFILETYPE_PLAIN(a) +#define PLATFORM_SETFILETYPE_TEXT(a) + +// Platform specific message output +#define PLATFORM_WARNING(a) +#define PLATFORM_ERROR(a) +#define PLATFORM_SERIOUS(a) + +// Integer-to-character conversion routine +#define PLATFORM_INT2BYTE(x) do {\ + x ^= x >> 16;\ + x ^= x >> 8;\ + x &= 255;\ +} while(0) + +// Output of platform-specific command line switches +#define PLATFORM_OPTION_HELP + +// Processing of platform-specific command line switches +#define PLATFORM_SHORTOPTION_CODE +#define PLATFORM_LONGOPTION_CODE + +// other stuff +#ifdef __SASC__ +#define inline +#endif + + +#endif diff --git a/Platform/Apple/tools/ACME/src/_dos.c b/Platform/Apple/tools/ACME/src/_dos.c new file mode 100644 index 00000000..aa655130 --- /dev/null +++ b/Platform/Apple/tools/ACME/src/_dos.c @@ -0,0 +1,47 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Platform specific stuff (in this case, for DOS, OS/2 and Windows) +#ifndef platform_C +#define platform_C + +#include +#include "dynabuf.h" + + +// Variables +char *DOS_lib_prefix = NULL; // header string of library tree + + +// Functions + +// Called on program entry - set up DOS-specific stuff +void DOS_entry(void) { + char *env_var; + + // Find out the path of ACME's library + env_var = getenv("ACME"); + // if environment variable was found, make a copy + if(env_var) { + DYNABUF_CLEAR(GlobalDynaBuf); + // copy environment variable to global dynamic buffer + DynaBuf_add_string(GlobalDynaBuf, env_var); + DynaBuf_append(GlobalDynaBuf, '\\'); // add dir separator + DynaBuf_append(GlobalDynaBuf, '\0'); // add terminator + DOS_lib_prefix = DynaBuf_get_copy(GlobalDynaBuf); + } +} + +// Convert UNIX-style pathname to DOS-style pathname +char DOS_convert_path_char(char byte) { + if(byte == '/') + return('\\'); + if(byte == '\\') + return('/'); + return(byte); +} + + +#endif diff --git a/Platform/Apple/tools/ACME/src/_dos.h b/Platform/Apple/tools/ACME/src/_dos.h new file mode 100644 index 00000000..c9b66452 --- /dev/null +++ b/Platform/Apple/tools/ACME/src/_dos.h @@ -0,0 +1,58 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Platform specific stuff (in this case, for DOS, OS/2 and Windows) +#ifndef platform_H +#define platform_H + +#include "config.h" + + +// Symbolic constants and macros + +// Called once on program startup (could register exit handler, if needed) +#define PLATFORM_INIT DOS_entry() + +// Convert UNIX-style pathname to DOS-style pathname +#define PLATFORM_CONVERTPATHCHAR(a) DOS_convert_path_char(a) + +// String containing the prefix for accessing files from the library tree +#define PLATFORM_LIBPREFIX DOS_lib_prefix + +// Setting file types of created files +#define PLATFORM_SETFILETYPE_CBM(a) +#define PLATFORM_SETFILETYPE_PLAIN(a) +#define PLATFORM_SETFILETYPE_TEXT(a) + +// Platform specific message output +#define PLATFORM_WARNING(a) +#define PLATFORM_ERROR(a) +#define PLATFORM_SERIOUS(a) + +// Integer-to-character conversion routine +#define PLATFORM_INT2BYTE(x) do {\ + x ^= x >> 16;\ + x ^= x >> 8;\ + x &= 255;\ +} while(0) + +// Output of platform-specific command line switches +#define PLATFORM_OPTION_HELP + +// Processing of platform-specific command line switches +#define PLATFORM_SHORTOPTION_CODE +#define PLATFORM_LONGOPTION_CODE + + +// Variables +extern char *DOS_lib_prefix; // header string of library tree + + +// Prototypes +extern void DOS_entry(void); +extern char DOS_convert_path_char(char); + + +#endif diff --git a/Platform/Apple/tools/ACME/src/_riscos.c b/Platform/Apple/tools/ACME/src/_riscos.c new file mode 100644 index 00000000..1563e5a2 --- /dev/null +++ b/Platform/Apple/tools/ACME/src/_riscos.c @@ -0,0 +1,97 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Platform specific stuff (in this case, for RISC OS) +#ifndef platform_C +#define platform_C + +#include +#include +#include "acme.h" +#include "input.h" + + +// Constants + +// SWIs +#define OS_FILE 0x00008 +#define XDDEUTILS_THROWBACKSTART 0x62587 +#define XDDEUTILS_THROWBACKSEND 0x62588 +#define XDDEUTILS_THROWBACKEND 0x62589 + + +// Variables +int RISCOS_flags = 0; // Used to store platform-specific flags + + +// Functions + +// Exit handler: If throwback was used, de-register now +void RISCOS_exit(void) { + _kernel_swi_regs regs; + + if(RISCOS_flags & RISCOSFLAG_THROWN) { + _kernel_swi(XDDEUTILS_THROWBACKEND, ®s, ®s); + RISCOS_flags &= ~RISCOSFLAG_THROWN; + } +} + +// Called on program entry - set up RISC OS-specific stuff +void RISCOS_entry(void) { + atexit(RISCOS_exit); +} + +// Convert UNIX-style pathname to RISC OS-style pathname +char RISCOS_convert_path_char(char byte) { + if(byte == '.') + return('/'); + if(byte == '/') + return('.'); + if(byte == '?') + return('#'); + if(byte == '#') + return('?'); + return(byte); +} + +// Setting the created files' types +void RISCOS_set_filetype(const char* filename, int file_type) { + _kernel_swi_regs regs; + + regs.r[0] = 18; // reason code (set file type) + regs.r[1] = (int) filename; + regs.r[2] = file_type; + _kernel_swi(OS_FILE, ®s, ®s); +} + +// Throwback protocol: "Type" can be 0, 1 or 2 (DDEUtils message types) +void RISCOS_throwback(const char* message, int type) { + _kernel_swi_regs regs; + + // only use throwback protocol if wanted + if((RISCOS_flags & RISCOSFLAG_THROWBACK) == 0) + return; + // if this is the first throwback, set it up and send info + if((RISCOS_flags & RISCOSFLAG_THROWN) == 0) { + RISCOS_flags |= RISCOSFLAG_THROWN; + _kernel_swi(XDDEUTILS_THROWBACKSTART, ®s, ®s); + regs.r[0] = 0; + regs.r[1] = 0; + // regs.r[2] = (int) toplevel_source; + regs.r[2] = (int) Input_now->original_filename; + _kernel_swi(XDDEUTILS_THROWBACKSEND, ®s, ®s); + } + // send throwback message + regs.r[0] = 1; + regs.r[1] = 0; + regs.r[2] = (int) Input_now->original_filename; + regs.r[3] = Input_now->line_number; + regs.r[4] = type; + regs.r[5] = (int) message; + _kernel_swi(XDDEUTILS_THROWBACKSEND, ®s, ®s); +} + + +#endif diff --git a/Platform/Apple/tools/ACME/src/_riscos.h b/Platform/Apple/tools/ACME/src/_riscos.h new file mode 100644 index 00000000..e0244acd --- /dev/null +++ b/Platform/Apple/tools/ACME/src/_riscos.h @@ -0,0 +1,69 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Platform specific stuff (in this case, for RISC OS) +#ifndef platform_H +#define platform_H + +#include "config.h" + + +// Symbolic constants and macros + +// Called once on program startup (could register exit handler, if needed) +#define PLATFORM_INIT RISCOS_entry() + +// Convert UNIX-style pathname to RISC OS-style pathname +#define PLATFORM_CONVERTPATHCHAR(a) RISCOS_convert_path_char(a) + +// String containing the prefix for accessing files from the library tree +#define PLATFORM_LIBPREFIX "ACME_Lib:" +#define NO_NEED_FOR_ENV_VAR + +// Setting file types of created files +#define PLATFORM_SETFILETYPE_CBM(a) RISCOS_set_filetype(a, 0x064) +#define PLATFORM_SETFILETYPE_PLAIN(a) RISCOS_set_filetype(a, 0xffd) +#define PLATFORM_SETFILETYPE_TEXT(a) RISCOS_set_filetype(a, 0xfff) + +// Platform specific message output +#define PLATFORM_WARNING(a) RISCOS_throwback(a, 0) +#define PLATFORM_ERROR(a) RISCOS_throwback(a, 1) +#define PLATFORM_SERIOUS(a) RISCOS_throwback(a, 2) + +// Integer-to-character conversion routine +#define PLATFORM_INT2BYTE(x) do {\ + x ^= x >> 16;\ + x ^= x >> 8;\ + x &= 255;\ +} while(0) + +// Output of platform-specific command line switches +#define PLATFORM_OPTION_HELP \ +" -t, --throwback use the DDEUtils module's \"throwback\" protocol.\n" + +// Processing of platform-specific command line switches +#define PLATFORM_SHORTOPTION_CODE \ + case 't': \ + RISCOS_flags |= RISCOSFLAG_THROWBACK; \ + break; +#define PLATFORM_LONGOPTION_CODE \ + else if(strcmp(string, "throwback") == 0) \ + RISCOS_flags |= RISCOSFLAG_THROWBACK; + + +// Variables +extern int RISCOS_flags; // Holds platform-specific flags +#define RISCOSFLAG_THROWBACK (1u << 0) // use throwback protocol +#define RISCOSFLAG_THROWN (1u << 1) // throwback is active + + +// Prototypes +extern void RISCOS_entry(void); +extern char RISCOS_convert_path_char(char); +extern void RISCOS_set_filetype(const char*, int); +extern void RISCOS_throwback(const char*, int); + + +#endif diff --git a/Platform/Apple/tools/ACME/src/_std.c b/Platform/Apple/tools/ACME/src/_std.c new file mode 100644 index 00000000..9b274df5 --- /dev/null +++ b/Platform/Apple/tools/ACME/src/_std.c @@ -0,0 +1,38 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Platform specific stuff (in this case, for unknown OSes) +#ifndef platform_C +#define platform_C + +#include +#include "dynabuf.h" + + +// Variables +char *AnyOS_lib_prefix = NULL; // header string of library tree + + +// Functions + +// Called on program entry - set up platform-specific stuff +void AnyOS_entry(void) { + char *env_var; + + // Find out the path of ACME's library + env_var = getenv("ACME"); + // if environment variable was found, make a copy + if(env_var) { + DYNABUF_CLEAR(GlobalDynaBuf); + // copy environment variable to global dynamic buffer + DynaBuf_add_string(GlobalDynaBuf, env_var); + DynaBuf_append(GlobalDynaBuf, '/'); // add dir separator + DynaBuf_append(GlobalDynaBuf, '\0'); // add terminator + AnyOS_lib_prefix = DynaBuf_get_copy(GlobalDynaBuf); + } +} + + +#endif diff --git a/Platform/Apple/tools/ACME/src/_std.h b/Platform/Apple/tools/ACME/src/_std.h new file mode 100644 index 00000000..1d4af752 --- /dev/null +++ b/Platform/Apple/tools/ACME/src/_std.h @@ -0,0 +1,55 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Platform specific stuff (in this case, for unknown OSes) +#ifndef platform_H +#define platform_H + + +// Symbolic constants and macros + +// Called once on program startup (could register exit handler, if needed) +#define PLATFORM_INIT AnyOS_entry() + +// Convert UNIX-style pathname to AnyOS-style pathname (no change) +#define PLATFORM_CONVERTPATHCHAR(a) (a) + +// String containing the prefix for accessing files from the library tree +#define PLATFORM_LIBPREFIX AnyOS_lib_prefix + +// Setting the created files' types +#define PLATFORM_SETFILETYPE_CBM(a) +#define PLATFORM_SETFILETYPE_PLAIN(a) +#define PLATFORM_SETFILETYPE_TEXT(a) + +// Platform specific message output +#define PLATFORM_WARNING(a) +#define PLATFORM_ERROR(a) +#define PLATFORM_SERIOUS(a) + +// Integer-to-character conversion routine +#define PLATFORM_INT2BYTE(x) do {\ + x ^= x >> 16;\ + x ^= x >> 8;\ + x &= 255;\ +} while(0) + +// Output of platform-specific command line switches +#define PLATFORM_OPTION_HELP + +// Processing of platform-specific command line switches +#define PLATFORM_SHORTOPTION_CODE +#define PLATFORM_LONGOPTION_CODE + + +// Variables +extern char *AnyOS_lib_prefix; // header string of library tree + + +// Prototypes +extern void AnyOS_entry(void); + + +#endif diff --git a/Platform/Apple/tools/ACME/src/acme.c b/Platform/Apple/tools/ACME/src/acme.c new file mode 100644 index 00000000..ce5ddf7f --- /dev/null +++ b/Platform/Apple/tools/ACME/src/acme.c @@ -0,0 +1,376 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +#define RELEASE "0.91" // update before release (FIXME) +#define CODENAME "Gargravarr" // update before release +#define CHANGE_DATE "26 Mar" // update before release +#define CHANGE_YEAR "2006" // update before release +#define HOME_PAGE "http://home.pages.de/~mac_bacon/smorbrod/acme/" + +#include +#include +#include +#include "acme.h" +#include "alu.h" +#include "cliargs.h" +#include "config.h" +#include "cpu.h" +#include "dynabuf.h" +#include "encoding.h" +#include "flow.h" +#include "global.h" +#include "input.h" +#include "label.h" +#include "macro.h" +#include "mnemo.h" +#include "output.h" +#include "platform.h" +#include "section.h" + + +// Constants +static const char FILE_WRITETEXT[] = "w"; +static const char FILE_WRITEBINARY[] = "wb"; +// names for error messages +static const char name_outfile[] = "output filename"; +static const char name_dumpfile[] = "label dump filename"; +// long options +#define OPTION_HELP "help" +#define OPTION_FORMAT "format" +#define OPTION_OUTFILE "outfile" +#define OPTION_LABELDUMP "labeldump" +#define OPTION_SETPC "setpc" +#define OPTION_CPU "cpu" +#define OPTION_INITMEM "initmem" +#define OPTION_MAXERRORS "maxerrors" +#define OPTION_MAXDEPTH "maxdepth" +#define OPTION_VERSION "version" + + +// Variables +static const char **toplevel_sources; +static int toplevel_src_count = 0; +static signed long starting_pc = PC_UNDEFINED; +static signed long fill_value = MEMINIT_USE_DEFAULT; +static struct cpu_t *default_cpu = NULL; +const char* labeldump_filename = NULL; +const char* output_filename = NULL; +// maximum recursion depth for macro calls and "!source" +signed long macro_recursions_left = MAX_NESTING; +signed long source_recursions_left = MAX_NESTING; + +// Functions + +// Show release and platform info (and exit, if wanted) +static void show_version(bool exit_after) { + puts( +"This is ACME, release " RELEASE " (\"" CODENAME "\"), " CHANGE_DATE " " CHANGE_YEAR "\n" +" " PLATFORM_VERSION + ); + if(exit_after) + exit(EXIT_SUCCESS); +} + +// Show full help (headline, release/platform/version, copyright, dedication, +// warranty disclaimer, usage) and exit program (SUCCESS) +static void show_help_and_exit(void) { + puts("\n" +"ACME - the ACME Crossassembler for Multiple Environments\n" +" Copyright (C) 1998-" CHANGE_YEAR " Marco Baye"); + show_version(FALSE); + puts( +"ACME comes with ABSOLUTELY NO WARRANTY; for details read the help file.\n" +" This is free software, and you are welcome to redistribute it under\n" +" certain conditions; as outlined in the GNU General Public License.\n" +"Dedicated to the wisest being I ever had the pleasure of reading\n" +" books of (currently spending some time dead for tax reasons).\n" +"The newest version can be found at the ACME homepage:\n" +" " HOME_PAGE "\n" +"\n" +"Usage: acme [OPTION...] [FILE]...\n" +" -h, --" OPTION_HELP " show this help and exit.\n" +" -f, --" OPTION_FORMAT " FORMAT select output format.\n" +" -o, --" OPTION_OUTFILE " FILE select output file.\n" +" -l, --" OPTION_LABELDUMP " FILE select label dump file.\n" +" --" OPTION_SETPC " NUMBER set program counter.\n" +" --" OPTION_CPU " CPU select target processor.\n" +" --" OPTION_INITMEM " NUMBER define 'empty' memory.\n" +" --" OPTION_MAXERRORS " NUMBER set number of errors before exiting.\n" +" --" OPTION_MAXDEPTH " NUMBER set recursion depth for macro calls and !src.\n" +" -vDIGIT set verbosity level.\n" +PLATFORM_OPTION_HELP +" -V, --" OPTION_VERSION " show version and exit.\n" + ); + exit(EXIT_SUCCESS); +} + + +// Error handling + +// Tidy up before exiting by saving label dump +int ACME_finalize(int exit_code) { + FILE* fd; + + if(labeldump_filename) { + fd = fopen(labeldump_filename, FILE_WRITETEXT); + if(fd) { + Label_dump_all(fd); + fclose(fd); + } else { + fprintf(stderr, + "Error: Cannot open label dump file \"%s\".\n", + labeldump_filename); + exit_code = EXIT_FAILURE; + } + } + return(exit_code); +} + +// Save output file +static void save_output_file(void) { + FILE* fd; + + // if no output file chosen, tell user and do nothing + if(output_filename == NULL) { + fputs("No output file specified (use the \"-o\" option or the \"!to\" pseudo opcode).", stderr); + return; + } + fd = fopen(output_filename, FILE_WRITEBINARY); + if(fd == NULL) { + fprintf(stderr, "Error: Cannot open output file \"%s\".\n", + output_filename); + return; + } + Output_save_file(fd, Mem_lowest_pc, Mem_highest_pc); + fclose(fd); +} + +// Perform a single pass. Returns number of "NeedValue" type errors. +static int perform_pass(int flags) { + FILE* fd; + int i; + + // be verbose + if(Process_verbosity > 1) + puts((flags & PASS_ISFIRST) ? "First pass." : ( + (flags & PASS_ISERROR) ? + "Further pass needed to find error." : + "Further pass." + )); + // call modules' "pass init" functions + CPU_passinit(default_cpu, starting_pc);// set default cpu values + Encoding_passinit(); // set default encoding + Section_passinit(); // set initial zone (untitled) + // init variables + pass_flags = flags; + pass_undefined_count = 0; // no "NeedValue" errors yet + pass_real_errors = 0; // no real errors yet + pc_inc = 0; // Increase PCs by this amount at end of line + // Process toplevel files + for(i = 0; i -1 + && starting_pc < 65536) + return; + fprintf(stderr, "%sProgram counter out of range (0-0xffff).\n", cliargs_error); + exit(EXIT_FAILURE); +} + +// set initial memory contents +static void set_mem_contents(void) { + fill_value = cliargs_get_long("initmem value"); + if(fill_value >= -128 + && fill_value <= 255) + return; + fprintf(stderr, "%sInitmem value out of range (0-0xff).\n", cliargs_error); + exit(EXIT_FAILURE); +} + +// handle long options (like "--example"). Return unknown string. +static const char* long_option(const char* string) { + if(strcmp(string, OPTION_HELP) == 0) + show_help_and_exit(); + else if(strcmp(string, OPTION_FORMAT) == 0) + set_output_format(); + else if(strcmp(string, OPTION_OUTFILE) == 0) + output_filename = cliargs_get_string(name_outfile); + else if(strcmp(string, OPTION_LABELDUMP) == 0) + labeldump_filename = cliargs_get_string(name_dumpfile); + else if(strcmp(string, OPTION_SETPC) == 0) + set_starting_pc(); + else if(strcmp(string, OPTION_CPU) == 0) + set_starting_cpu(); + else if(strcmp(string, OPTION_INITMEM) == 0) + set_mem_contents(); + else if(strcmp(string, OPTION_MAXERRORS) == 0) + max_errors = cliargs_get_long("maximum error count"); + else if(strcmp(string, OPTION_MAXDEPTH) == 0) + macro_recursions_left = (source_recursions_left = cliargs_get_long("recursion depth")); +// else if(strcmp(string, "strictsyntax") == 0) +// strict_syntax = TRUE; + PLATFORM_LONGOPTION_CODE + else if(strcmp(string, OPTION_VERSION) == 0) + show_version(TRUE); + else return(string); + return(NULL); +} + +// Handle short options (like "-e"). Return unknown character. +static char short_option(const char* argument) { + while(*argument) { + switch(*argument) { + + case 'h': // "-h" shows help + show_help_and_exit(); + + case 'f': // "-f" selects output format + set_output_format(); + break; + + case 'o': // "-o" selects output filename + output_filename = cliargs_get_string(name_outfile); + break; + + case 'l': // "-l" selects label dump filename + labeldump_filename = cliargs_get_string(name_dumpfile); + break; + + case 'v': // "-v" changes verbosity + Process_verbosity++; + if((argument[1] >= '0') && (argument[1] <= '9')) + Process_verbosity = *(++argument) - '0'; + break; + + // platform specific switches are inserted here + PLATFORM_SHORTOPTION_CODE + + case 'V': // "-V" shows version + show_version(TRUE); + break; + + default: // unknown ones: program termination + return(*argument); + + } + argument++; + } + return('\0'); +} + +// guess what +int main(int argc, const char *argv[]) { + // if called without any arguments, show usage info (not full help) + if(argc == 1) + show_help_and_exit(); + cliargs_init(argc, argv); + DynaBuf_init();// inits *global* dynamic buffer - important, so first + // Init platform-specific stuff. + // For example, this could read the library path from an + // environment variable, which in turn may need DynaBuf already. + PLATFORM_INIT; + // init some keyword trees needed for argument handling + CPUtype_init(); + Outputfile_init(); + // handle command line arguments + cliargs_handle_options(short_option, long_option); + // generate list of files to process + cliargs_get_rest(&toplevel_src_count, &toplevel_sources, + "No top level sources given"); + // Init modules (most of them will just build keyword trees) + ALU_init(); + CPU_init(); + Encoding_init(); + Flow_init(); + Input_init(); + Label_init(); + Macro_init(); + Mnemo_init(); + Output_init(fill_value); + Section_init(); + if(do_actual_work()) + save_output_file(); + return(ACME_finalize(EXIT_SUCCESS)); // dump labels, if wanted +} diff --git a/Platform/Apple/tools/ACME/src/acme.h b/Platform/Apple/tools/ACME/src/acme.h new file mode 100644 index 00000000..519f232c --- /dev/null +++ b/Platform/Apple/tools/ACME/src/acme.h @@ -0,0 +1,23 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Main definitions +#ifndef acme_H +#define acme_H + +#include "config.h" + +// Variables +extern const char* labeldump_filename; +extern const char* output_filename; +// maximum recursion depth for macro calls and "!source" +extern signed long macro_recursions_left; +extern signed long source_recursions_left; + +// Prototypes +extern int ACME_finalize(int exit_code); + + +#endif diff --git a/Platform/Apple/tools/ACME/src/alu.c b/Platform/Apple/tools/ACME/src/alu.c new file mode 100644 index 00000000..802f48e0 --- /dev/null +++ b/Platform/Apple/tools/ACME/src/alu.c @@ -0,0 +1,1053 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Arithmetic/logic unit + +#include +#include "platform.h" // done first in case "inline" is redefined +#include "alu.h" +#include "cpu.h" +#include "dynabuf.h" +#include "encoding.h" +#include "global.h" +#include "input.h" +#include "label.h" +#include "section.h" +#include "tree.h" + + +// Constants + +#define HALF_INITIAL_STACK_SIZE 8 +static const char exception_div_by_zero[] = "Division by zero."; +static const char exception_need_value[] = "Value not yet defined."; +static const char exception_paren_open[] = "Too many '('."; + +// Operator handles (FIXME - use function pointers instead? or too slow?) +enum op_handle_t { +// special values (pseudo operators) + OPHANDLE_END, // "reached end of expression" + OPHANDLE_RETURN, // "return value to caller" +// monadic operators + OPHANDLE_OPENING, // (v '(', starts subexpression + OPHANDLE_NOT, // !v NOT v bit-wise NOT + OPHANDLE_NEGATE, // -v Negate + OPHANDLE_LOWBYTEOF, // v Highbyte of + OPHANDLE_BANKBYTEOF, // ^v Bankbyte of +// dyadic operators + OPHANDLE_CLOSING, // v) ')', ends subexpression + OPHANDLE_POWEROF, // v^w + OPHANDLE_MULTIPLY, // v*w + OPHANDLE_DIVIDE, // v/w Integer-Division + OPHANDLE_MODULO, // v%w v MOD w Remainder + OPHANDLE_SL, // v<>w v ASR w Arithmetic shift right + OPHANDLE_LSR, // v>>>w v LSR w Logical shift right + OPHANDLE_ADD, // v+w + OPHANDLE_SUBTRACT, // v-w + OPHANDLE_EQUALS, // v=w + OPHANDLE_LE, // v<=w + OPHANDLE_LESSTHAN, // v< w + OPHANDLE_GE, // v>=w + OPHANDLE_GREATERTHAN, // v> w + OPHANDLE_NOTEQUAL, // v!=w v<>w v>>= 1; + } + return(result); +} + +// arithmetic shift right (works even if C compiler does not support it) +static inline value_t my_asr(value_t left, value_t right) { + value_t result = left >>= right; + + if((left >= 0) || (result < 0)) + return(result); + return(result | (-1L << (8 * sizeof(value_t) - right))); +} + +// Lookup (and create, if necessary) label tree item and return its value. +// DynaBuf holds the label's name and "zone" its zone. +// +// This routine is not allowed to change DynaBuf because that's where the +// label name is stored! +static void get_label_value(zone_t zone) { + label_t* label; + int flags; + + // If the label gets created now, mark it as unsure + label = Label_find(zone, MVALUE_UNSURE); + flags = label->flags; + // in first pass, count usage + if(pass_flags & PASS_ISFIRST) + label->usage++; + PUSH_OPERAND(label->value, flags | MVALUE_EXISTS); +} + +// Routine for parsing a quoted character. The character will be converted +// using the current encoding. +static inline void parse_quoted_character(char closing_quote) { + value_t value; + + // read character to parse - make sure not at end of statement + if(GetQuotedByte() == CHAR_EOS) + return; + // on empty string, complain + if(GotByte == closing_quote) { + Throw_error(exception_missing_string); + Input_skip_remainder(); + return; + } + // parse character + value = (value_t) Encoding_encode_char(GotByte); + // Read closing quote (hopefully) + if(GetQuotedByte() == closing_quote) + GetByte();// If length == 1, proceed with next byte + else + if(GotByte) { + // If longer than one character + Throw_error("There's more than one character."); + Input_skip_remainder(); + } + PUSH_OPERAND(value, MVALUE_GIVEN | MVALUE_ISBYTE); + // Now GotByte = char following closing quote (or CHAR_EOS on error) +} + +// Routine for parsing a hexadecimal value. It accepts "0" to "9", "a" to "f" +// and "A" to "F". Capital letters will be converted to lowercase letters using +// the flagtable. The current value is stored as soon as a character is read +// that is none of those given above. +static void parse_hexadecimal_value(void) {// Now GotByte = "$" or "x" + char byte; + bool go_on; // continue loop flag + int digits = -1, // digit counter + flags = MVALUE_GIVEN; + value_t value = 0; + + do { + digits++; + go_on = FALSE; + byte = GetByte(); + // first, convert "A-F" to "a-f" + byte |= (BYTEFLAGS(byte) & BYTEIS_UPCASE); + // if digit, add digit value + if((byte >= '0') && (byte <= '9')) { + value = (value << 4) + (byte - '0'); + go_on = TRUE;// keep going + } + // if legal ("a-f") character, add character value + if((byte >= 'a') && (byte <= 'f')) { + value = (value << 4) + (byte - 'a') + 10; + go_on = TRUE;// keep going + } + } while(go_on); + // set force bits + if(digits > 2) { + if(digits > 4) { + if(value < 65536) + flags |= MVALUE_FORCE24; + } else { + if(value < 256) + flags |= MVALUE_FORCE16; + } + } + PUSH_OPERAND(value, flags); + // Now GotByte = non-hexadecimal char +} + +// Routine for parsing a decimal value. It accepts "0" to "9". The current +// value is stored as soon as a character is read that is none of those given +// above. Unlike the others, the "decimal" routine expects the first digit to +// be read already, because decimal values don't use any prefixes. +// If the first two digits are "0x", this routine branches to the one for +// parsing hexadecimal values. +static inline void parse_decimal_value(void) {// Now GotByte = first digit + value_t value = (GotByte & 15); // this works. it's ASCII. + + GetByte(); + if((value == 0) && (GotByte == 'x')) + parse_hexadecimal_value(); + else { + while((GotByte >= '0') && (GotByte <= '9')) { + value *= 10; + value += (GotByte & 15);// this works. it's ASCII. + GetByte(); + } + PUSH_OPERAND(value, MVALUE_GIVEN); + } + // Now GotByte = non-decimal char +} + +// Routine for parsing an octal value. It accepts "0" to "7". The current +// value is stored as soon as a character is read that is none of those given +// above. +static inline void parse_octal_value(void) {// Now GotByte = "&" + value_t value = 0; + int flags = MVALUE_GIVEN, + digits = 0; // digit counter + + GetByte(); + while((GotByte >= '0') && (GotByte <= '7')) { + value = (value << 3) + (GotByte & 7);// this works. it's ASCII. + digits++; + GetByte(); + } + // set force bits + if(digits > 3) { + if(digits > 6) { + if(value < 65536) + flags |= MVALUE_FORCE24; + } else { + if(value < 256) + flags |= MVALUE_FORCE16; + } + } + PUSH_OPERAND(value, flags); + // Now GotByte = non-octal char +} + +// Routine for parsing a binary value. Apart from "0" and "1", it also accepts +// characters "." and "#", this is much more readable. The current value is +// stored as soon as a character is read that is none of those given above. +static inline void parse_binary_value(void) {// Now GotByte = "%" + value_t value = 0; + bool go_on = TRUE; // continue loop flag + int flags = MVALUE_GIVEN, + digits = -1; // digit counter + + do { + digits++; + switch(GetByte()) { + + case '0': + case '.': + value <<= 1; + break; + + case '1': + case '#': + value = (value << 1) | 1; + break; + + default: + go_on = FALSE; + } + } while(go_on); + // set force bits + if(digits > 8) { + if(digits > 16) { + if(value < 65536) + flags |= MVALUE_FORCE24; + } else { + if(value < 256) + flags |= MVALUE_FORCE16; + } + } + PUSH_OPERAND(value, flags); + // Now GotByte = non-binary char +} + +// Expect operand or monadic operator (hopefully inlined) +static inline void expect_operand_or_monadic_operator(void) { + op_t* operator; + bool perform_negation; + + SKIPSPACE(); + switch(GotByte) { + + case '+':// anonymous forward label + // count plus signs to build name of anonymous label + DYNABUF_CLEAR(GlobalDynaBuf); + do + DYNABUF_APPEND(GlobalDynaBuf, '+'); + while(GetByte() == '+'); + Label_fix_forward_name(); + get_label_value(Section_now->zone); + goto now_expect_dyadic; + + case '-':// NEGATION operator or anonymous backward label + // count minus signs in case it's an anonymous backward label + perform_negation = FALSE; + DYNABUF_CLEAR(GlobalDynaBuf); + do { + DYNABUF_APPEND(GlobalDynaBuf, '-'); + perform_negation = !perform_negation; + } while(GetByte() == '-'); + SKIPSPACE(); + if(BYTEFLAGS(GotByte) & FOLLOWS_ANON) { + DynaBuf_append(GlobalDynaBuf, '\0'); + get_label_value(Section_now->zone); + goto now_expect_dyadic; + } // goto means we don't need an "else {" here + if(perform_negation) + PUSH_OPERATOR(&OPSTRCT_NEGATE); + // State doesn't change + break; + +// Real monadic operators (state doesn't change, still ExpectMonadic) + + case '!':// NOT operator + operator = &OPSTRCT_NOT; + goto get_byte_and_push_monadic; + + case '<':// LOWBYTE operator + operator = &OPSTRCT_LOWBYTEOF; + goto get_byte_and_push_monadic; + + case '>':// HIGHBYTE operator + operator = &OPSTRCT_HIGHBYTEOF; + goto get_byte_and_push_monadic; + + case '^':// BANKBYTE operator + operator = &OPSTRCT_BANKBYTEOF; + goto get_byte_and_push_monadic; + +// Faked monadic operators + + case '(':// left parenthesis + operator = &OPSTRCT_OPENING; + goto get_byte_and_push_monadic; + + case ')':// right parenthesis + // this makes "()" also throw a syntax error + Throw_error(exception_syntax); + alu_state = STATE_ERROR; + break; + +// Operands (values, state changes to ExpectDyadic) + + // Quoted character + case '"': + case '\'': + // Character will be converted using current encoding + parse_quoted_character(GotByte); + // Now GotByte = char following closing quote + goto now_expect_dyadic; + + // Binary value + case '%': + parse_binary_value();// Now GotByte = non-binary char + goto now_expect_dyadic; + + // Octal value + case '&': + parse_octal_value();// Now GotByte = non-octal char + goto now_expect_dyadic; + + // Hexadecimal value + case '$': + parse_hexadecimal_value(); + // Now GotByte = non-hexadecimal char + goto now_expect_dyadic; + + // Program counter + case '*': + GetByte();// proceed with next char + CPU_ensure_defined_pc(); + PUSH_OPERAND(CPU_pc, MVALUE_GIVEN); + // Now GotByte = char after closing quote + goto now_expect_dyadic; + + // Local label + case '.': + operand_stack[operand_sp].value = 0; + GetByte();// start after '.' + if(Input_read_keyword()) { + // Now GotByte = illegal char + get_label_value(Section_now->zone); + goto now_expect_dyadic; + } + alu_state = STATE_ERROR; + break; + + // Decimal values and global labels + default:// (all other characters) + if((GotByte >= '0') && (GotByte <= '9')) { + parse_decimal_value(); + // Now GotByte = non-decimal char + goto now_expect_dyadic; + } // goto means we don't need an "else {" here + if(BYTEFLAGS(GotByte) & STARTS_KEYWORD) { + register int length; + // Read global label (or "NOT") + length = Input_read_keyword(); + // Now GotByte = illegal char + // Check for NOT. Okay, it's hardcoded, + // but so what? Sue me... + if((length == 3) + && (GlobalDynaBuf->buffer[0] == 'N') + && (GlobalDynaBuf->buffer[1] == 'O') + && (GlobalDynaBuf->buffer[2] == 'T')) { + PUSH_OPERATOR(&OPSTRCT_NOT); + // state doesn't change + } else { + get_label_value(ZONE_GLOBAL); + alu_state = STATE_EXPECT_DYADIC_OPERATOR; + } + } else { + // illegal character read - so don't go on + PUSH_OPERAND(0, 0); + // push pseudo value, EXISTS flag is clear + if(operator_stack[operator_sp-1] == &OPSTRCT_RETURN) { + PUSH_OPERATOR(&OPSTRCT_END); + alu_state = STATE_TRY_TO_REDUCE_STACKS; + } else { + Throw_error(exception_syntax); + alu_state = STATE_ERROR; + } + } + break; + +// no other possibilities, so here are the shared endings + +get_byte_and_push_monadic: + GetByte(); + PUSH_OPERATOR(operator); + // State doesn't change + break; + +now_expect_dyadic: + alu_state = STATE_EXPECT_DYADIC_OPERATOR; + break; + + } +} + +// Expect dyadic operator (hopefully inlined) +static inline void expect_dyadic_operator(void) { + void* node_body; + op_t* operator; + + SKIPSPACE(); + switch(GotByte) { + +// Single-character dyadic operators + + case '^':// "to the power of" + operator = &OPSTRCT_POWEROF; + goto get_byte_and_push_dyadic; + + case '+':// add + operator = &OPSTRCT_ADD; + goto get_byte_and_push_dyadic; + + case '-':// subtract + operator = &OPSTRCT_SUBTRACT; + goto get_byte_and_push_dyadic; + + case '*':// multiply + operator = &OPSTRCT_MULTIPLY; + goto get_byte_and_push_dyadic; + + case '/':// divide + operator = &OPSTRCT_DIVIDE; + goto get_byte_and_push_dyadic; + + case '%':// modulo + operator = &OPSTRCT_MODULO; + goto get_byte_and_push_dyadic; + + case '&':// bitwise AND + operator = &OPSTRCT_AND; + goto get_byte_and_push_dyadic; + + case '|':// bitwise OR + operator = &OPSTRCT_OR; + goto get_byte_and_push_dyadic; + +// This part is commented out because there is no XOR character defined +// case '':// bitwise exclusive OR +// operator = &OPSTRCT_XOR; +// goto get_byte_and_push_dyadic; + + case '=':// is equal + operator = &OPSTRCT_EQUALS; + goto get_byte_and_push_dyadic; + + case ')':// closing parenthesis + operator = &OPSTRCT_CLOSING; + goto get_byte_and_push_dyadic; + +// Multi-character dyadic operators + + // "!=" + case '!': + if(GetByte() == '=') { + operator = &OPSTRCT_NOTEQUAL; + goto get_byte_and_push_dyadic; + } // goto means we don't need an "else {" here + Throw_error(exception_syntax); + alu_state = STATE_ERROR; + break; + + // "<", "<=", "<<" and "<>" + case '<': + switch(GetByte()) { + + case '=':// "<=", less or equal + operator = &OPSTRCT_LE; + goto get_byte_and_push_dyadic; + + case '<':// "<<", shift left + operator = &OPSTRCT_SL; + goto get_byte_and_push_dyadic; + + case '>':// "<>", not equal + operator = &OPSTRCT_NOTEQUAL; + goto get_byte_and_push_dyadic; + + default:// "<", less than + operator = &OPSTRCT_LESSTHAN; + goto push_dyadic; + } + break; + + // ">", ">=", ">>", ">>>" and "><" + case '>': + switch(GetByte()) { + + case '=':// ">=", greater or equal + operator = &OPSTRCT_GE; + goto get_byte_and_push_dyadic; + + case '<':// "><", not equal + operator = &OPSTRCT_NOTEQUAL; + goto get_byte_and_push_dyadic; + + case '>':// ">>" or ">>>", shift right + operator = &OPSTRCT_ASR;// arithmetic shift right + if(GetByte() != '>') + goto push_dyadic; + operator = &OPSTRCT_LSR;// logical shift right + goto get_byte_and_push_dyadic; + + default:// ">", greater than + operator = &OPSTRCT_GREATERTHAN; + goto push_dyadic; + } + break; + +// end of expression or text version of dyadic operator + default: + // check string version of operators + if(BYTEFLAGS(GotByte) & STARTS_KEYWORD) { + Input_read_keyword(); + // Now GotByte = illegal char + // search for tree item + if(Tree_easy_scan(operator_tree, &node_body, GlobalDynaBuf)) { + operator = node_body; + goto push_dyadic; + } + // goto means we don't need an "else {" here + Throw_error("Unknown operator."); + alu_state = STATE_ERROR; + } else { + operator = &OPSTRCT_END; + goto push_dyadic; + } + break; + +// no other possibilities, so here are the shared endings + +get_byte_and_push_dyadic: + GetByte(); +push_dyadic: + PUSH_OPERATOR(operator); + alu_state = STATE_TRY_TO_REDUCE_STACKS; + break; + + } +} + +// Try to reduce stacks by performing high-priority operations +static inline void try_to_reduce_stacks(int* open_parentheses) { + if(operator_sp < 2) { + alu_state = STATE_EXPECT_OPERAND_OR_MONADIC_OPERATOR; + return; + } + if(operator_stack[operator_sp-2]->priority < operator_stack[operator_sp-1]->priority) { + alu_state = STATE_EXPECT_OPERAND_OR_MONADIC_OPERATOR; + return; + } + switch(operator_stack[operator_sp-2]->handle) { + +// special (pseudo) operators + + case OPHANDLE_RETURN: + // don't touch indirect_flag; needed for INDIRECT flag + operator_sp--;// decrement operator stack pointer + alu_state = STATE_END; + break; + + case OPHANDLE_OPENING: + indirect_flag = MVALUE_INDIRECT;// parentheses found + switch(operator_stack[operator_sp-1]->handle) { + + case OPHANDLE_CLOSING:// matching parentheses + operator_sp -= 2;// remove both of them + alu_state = STATE_EXPECT_DYADIC_OPERATOR; + break; + + case OPHANDLE_END:// unmatched parenthesis + (*open_parentheses)++;// count + goto RNTLObutDontTouchIndirectFlag; + + default: + Bug_found("StrangeParenthesis", operator_stack[operator_sp-1]->handle); + } + break; + + case OPHANDLE_CLOSING: + Throw_error("Too many ')'."); + goto remove_next_to_last_operator; + +// monadic operators + + case OPHANDLE_NOT: + RIGHTVALUE = ~(RIGHTVALUE); + RIGHTFLAGSG &= ~MVALUE_ISBYTE; + goto remove_next_to_last_operator; + + case OPHANDLE_NEGATE: + RIGHTVALUE = -(RIGHTVALUE); + RIGHTFLAGSG &= ~MVALUE_ISBYTE; + goto remove_next_to_last_operator; + + case OPHANDLE_LOWBYTEOF: + RIGHTVALUE = (RIGHTVALUE) & 255; + RIGHTFLAGSG |= MVALUE_ISBYTE; + RIGHTFLAGSG &= ~MVALUE_FORCEBITS; + goto remove_next_to_last_operator; + + case OPHANDLE_HIGHBYTEOF: + RIGHTVALUE = ((RIGHTVALUE) >> 8) & 255; + RIGHTFLAGSG |= MVALUE_ISBYTE; + RIGHTFLAGSG &= ~MVALUE_FORCEBITS; + goto remove_next_to_last_operator; + + case OPHANDLE_BANKBYTEOF: + RIGHTVALUE = ((RIGHTVALUE) >> 16) & 255; + RIGHTFLAGSG |= MVALUE_ISBYTE; + RIGHTFLAGSG &= ~MVALUE_FORCEBITS; + goto remove_next_to_last_operator; + +// dyadic operators + + case OPHANDLE_POWEROF: + if(RIGHTVALUE >= 0) + LEFTVALUE = my_pow(LEFTVALUE, RIGHTVALUE); + else { + if(RIGHTFLAGSG & MVALUE_DEFINED) + Throw_error("Exponent is negative."); + LEFTVALUE = 0; + } + goto handle_flags_and_dec_stacks; + + case OPHANDLE_MULTIPLY: + LEFTVALUE *= RIGHTVALUE; + goto handle_flags_and_dec_stacks; + + case OPHANDLE_DIVIDE: + if(RIGHTVALUE) LEFTVALUE /= RIGHTVALUE; + else { + if(RIGHTFLAGSG & MVALUE_DEFINED) + Throw_error(exception_div_by_zero); + LEFTVALUE = 0; + } + goto handle_flags_and_dec_stacks; + + case OPHANDLE_MODULO: + if(RIGHTVALUE) LEFTVALUE %= RIGHTVALUE; + else { + if(RIGHTFLAGSG & MVALUE_DEFINED) + Throw_error(exception_div_by_zero); + LEFTVALUE = 0; + } + goto handle_flags_and_dec_stacks; + + case OPHANDLE_ADD: + LEFTVALUE += RIGHTVALUE; + goto handle_flags_and_dec_stacks; + + case OPHANDLE_SUBTRACT: + LEFTVALUE -= RIGHTVALUE; + goto handle_flags_and_dec_stacks; + + case OPHANDLE_SL: + LEFTVALUE <<= RIGHTVALUE; + goto handle_flags_and_dec_stacks; + + case OPHANDLE_ASR: + LEFTVALUE = my_asr(LEFTVALUE, RIGHTVALUE); + goto handle_flags_and_dec_stacks; + + case OPHANDLE_LSR: + LEFTVALUE = ((uvalue_t) LEFTVALUE) >> RIGHTVALUE; + goto handle_flags_and_dec_stacks; + + case OPHANDLE_LE: + LEFTVALUE = (LEFTVALUE <= RIGHTVALUE); + goto handle_flags_and_dec_stacks; + + case OPHANDLE_LESSTHAN: + LEFTVALUE = (LEFTVALUE < RIGHTVALUE); + goto handle_flags_and_dec_stacks; + + case OPHANDLE_GE: + LEFTVALUE = (LEFTVALUE >= RIGHTVALUE); + goto handle_flags_and_dec_stacks; + + case OPHANDLE_GREATERTHAN: + LEFTVALUE = (LEFTVALUE > RIGHTVALUE); + goto handle_flags_and_dec_stacks; + + case OPHANDLE_NOTEQUAL: + LEFTVALUE = (LEFTVALUE != RIGHTVALUE); + goto handle_flags_and_dec_stacks; + + case OPHANDLE_EQUALS: + LEFTVALUE = (LEFTVALUE == RIGHTVALUE); + goto handle_flags_and_dec_stacks; + + case OPHANDLE_AND: + LEFTVALUE &= RIGHTVALUE; + goto handle_flags_and_dec_stacks; + + case OPHANDLE_XOR: + LEFTVALUE ^= RIGHTVALUE; + goto handle_flags_and_dec_stacks; + + case OPHANDLE_OR: + LEFTVALUE |= RIGHTVALUE; + goto handle_flags_and_dec_stacks; + + default: + Bug_found("IllegalOperatorHandle", operator_stack[operator_sp-2]->handle); + break; + +// no other possibilities, so here are the shared endings + +// entry point for dyadic operators +handle_flags_and_dec_stacks: + // Handle flags and decrement value stack pointer + // "OR" EXISTS, UNSURE and FORCEBIT flags + LEFTFLAGSG |= RIGHTFLAGSG & + (MVALUE_EXISTS|MVALUE_UNSURE|MVALUE_FORCEBITS); + // "AND" DEFINED flag + LEFTFLAGSG &= (RIGHTFLAGSG | ~MVALUE_DEFINED); + LEFTFLAGSG &= ~MVALUE_ISBYTE;// clear ISBYTE flag + operand_sp--; + /*FALLTHROUGH*/ + +// entry point for monadic operators +remove_next_to_last_operator: + // toplevel operation was something other than parentheses + indirect_flag = 0; + /*FALLTHROUGH*/ + +// entry point for '(' operator (has set indirect_flag, so don't clear now) +RNTLObutDontTouchIndirectFlag: + // Remove operator and shift down next one + operator_stack[operator_sp-2] = operator_stack[operator_sp-1]; + operator_sp--;// decrement operator stack pointer + break; + } +} + +// The core of it. Returns number of parentheses left open. +// FIXME - make state machine using function pointers? +static int parse_expression(result_t* result) { + int open_parentheses = 0; + + operator_sp = 0; // operator stack pointer + operand_sp = 0; // value stack pointer + // begin by reading value (or monadic operator) + alu_state = STATE_EXPECT_OPERAND_OR_MONADIC_OPERATOR; + indirect_flag = 0; // Contains either 0 or MVALUE_INDIRECT + PUSH_OPERATOR(&OPSTRCT_RETURN); + do { + // check stack sizes. enlarge if needed + if(operator_sp >= operator_stk_size) + enlarge_operator_stack(); + if(operand_sp >= operand_stk_size) + enlarge_operand_stack(); + switch(alu_state) { + + case STATE_EXPECT_OPERAND_OR_MONADIC_OPERATOR: + expect_operand_or_monadic_operator(); + break; + + case STATE_EXPECT_DYADIC_OPERATOR: + expect_dyadic_operator(); + break;// no fallthrough; state might + // have been changed to END or ERROR + + case STATE_TRY_TO_REDUCE_STACKS: + try_to_reduce_stacks(&open_parentheses); + break; + + case STATE_MAX_GO_ON: // suppress + case STATE_ERROR: // compiler + case STATE_END: // warnings + break; + } + } while(alu_state < STATE_MAX_GO_ON); + // done. check state. + if(alu_state == STATE_END) { + // check for bugs + if(operand_sp != 1) + Bug_found("OperandStackNotEmpty", operand_sp); + if(operator_sp != 1) + Bug_found("OperatorStackNotEmpty", operator_sp); + // okay, no errors + *result = operand_stack[0]; // copy struct + result->flags |= indirect_flag; // and OR indirect flag + // only allow *one* force bit + if(result->flags & MVALUE_FORCE24) + result->flags &= ~(MVALUE_FORCE16 | MVALUE_FORCE08); + if(result->flags & MVALUE_FORCE16) + result->flags &= ~MVALUE_FORCE08; + // if value is sure, check to set ISBYTE + if((result->flags & MVALUE_UNSURE) == 0) + if((result->value <= 255) && (result->value >= -128)) + result->flags |= MVALUE_ISBYTE; + // if there was nothing to parse, mark as undefined + // (so ALU_parse_expr_strict() can react) + if((result->flags & MVALUE_EXISTS) == 0) + result->flags &= ~MVALUE_DEFINED; + // if undefined, return zero + if((result->flags & MVALUE_DEFINED) == 0) + result->value = 0;// if undefined, return 0. + } else { + // State is STATE_ERROR. But actually, nobody cares. + // ...errors have already been reported anyway. :) + } + // return number of open (unmatched) parentheses + return(open_parentheses); +} + +// These routines handle numerical expressions. There are operators for +// arithmetic, logic, shift and comparison operations. +// There are four different ways to call the core routine: +// void ALU_parse_expr_strict (result_t*) +// void ALU_parse_expr_empty_strict (result_t*) +// void ALU_parse_expr_medium (result_t*) +// int ALU_parse_expr_liberal (result_t*) +// After calling one of these functions, the given result_t structure holds +// some information: +// value holds the numerical result. +// flags holds some additional informational flags about the result: +// Unsure A label was referenced that had its "unsure"-flag set +// Defined The result is known (no "undefined"-label referenced) +// ForceBits To enforce oversized addressing modes +// IsByte If the value fits in 8 bits +// Exists Expression wasn't empty +// Indirect Needless parentheses indicate indirect addressing +// "Unsure" is needed for producing the same addresses in all passes; because +// in the first pass there will almost for sure be labels that are +// undefined, you can't simply get the addressing mode from looking at the +// parameter's value. +// "Defined" shows that the value really could be computed - so if an undefined +// label was referenced, this flag will be cleared. +// "Indirect" is needed to recognize unnecessary parentheses (which imply use +// of indirect adressing modes). +// The return value of "ALU_parse_expr_liberal(result_t*)" is the number of +// parentheses still open. + +// This routine needs a defined value. If the result's "defined" flag is +// clear, it throws a serious error and therefore stops assembly. +void ALU_parse_expr_strict(result_t* result) { + if(parse_expression(result)) + Throw_error(exception_paren_open); + if((result->flags & MVALUE_DEFINED) == 0) + Throw_serious_error(exception_need_value); +} + +// This routine needs either a defined value or no expression at all. So +// empty expressions are accepted, but undefined ones are not. +// If the result's "defined" flag is clear and the "exists" flag is set, it +// throws a serious error and therefore stops assembly. +void ALU_parse_expr_empty_strict(result_t* result) { + if(parse_expression(result)) + Throw_error(exception_paren_open); + if((result->flags & MVALUE_GIVEN) == MVALUE_EXISTS) + Throw_serious_error(exception_need_value); +} + +// The 'normal' call, it parses an expression and returns the result. +// It the result's "exists" flag is clear (=empty expression), it throws an +// error. +// If the result's "defined" flag is clear, result_is_undefined() is called. +void ALU_parse_expr_medium(result_t* result) { + if(parse_expression(result)) + Throw_error(exception_paren_open); + if((result->flags & MVALUE_EXISTS) == 0) + Throw_error(exception_need_value); + else + if((result->flags & MVALUE_DEFINED) == 0) + result_is_undefined(); +} + +// This routine allows for one "(" too many. Needed when parsing indirect +// addressing modes where internal indices have to be possible. Returns number +// of parentheses still open (either 0 or 1). +int ALU_parse_expr_liberal(result_t* result) { + int parentheses_still_open; + + parentheses_still_open = parse_expression(result); + if(parentheses_still_open > 1) { + parentheses_still_open = 0; + Throw_error(exception_paren_open); + } + if(result->flags & MVALUE_EXISTS) + if((result->flags & MVALUE_DEFINED) == 0) + result_is_undefined(); + return(parentheses_still_open); +} diff --git a/Platform/Apple/tools/ACME/src/alu.h b/Platform/Apple/tools/ACME/src/alu.h new file mode 100644 index 00000000..e03362ce --- /dev/null +++ b/Platform/Apple/tools/ACME/src/alu.h @@ -0,0 +1,53 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// ALU stuff (the expression parser) +#ifndef alu_H +#define alu_H + +#include "config.h" + + +// result structure type definition +struct result_t { + value_t value; // Expression value + int flags; // Expression flags +}; + + +// Constants + +// Meaning of bits in "Flags" of result_t structure +// Needless parentheses indicate use of indirect addressing +#define MVALUE_INDIRECT (1u << 7) +// There was *something* to parse +#define MVALUE_EXISTS (1u << 6) +// Value once was related to undefined expression +#define MVALUE_UNSURE (1u << 5) +// Value is defined (if this is cleared, the value will be zero) +#define MVALUE_DEFINED (1u << 4) +// Value is guaranteed to fit in one byte +#define MVALUE_ISBYTE (1u << 3) +// Value usage forces 24-bit usage +#define MVALUE_FORCE24 (1u << 2) +// Value usage forces 16-bit usage +#define MVALUE_FORCE16 (1u << 1) +// Value usage forces 8-bit usage +#define MVALUE_FORCE08 (1u << 0) +// Bit mask for force bits +#define MVALUE_FORCEBITS (MVALUE_FORCE08| MVALUE_FORCE16| MVALUE_FORCE24) +// Bit mask for fixed values (defined and existing) +#define MVALUE_GIVEN (MVALUE_DEFINED | MVALUE_EXISTS) + + +// Prototypes +extern void ALU_init(void); +extern void ALU_parse_expr_strict(result_t*); +extern void ALU_parse_expr_empty_strict(result_t*); +extern void ALU_parse_expr_medium(result_t*); +extern int ALU_parse_expr_liberal(result_t*); + + +#endif diff --git a/Platform/Apple/tools/ACME/src/cliargs.c b/Platform/Apple/tools/ACME/src/cliargs.c new file mode 100644 index 00000000..fa23b098 --- /dev/null +++ b/Platform/Apple/tools/ACME/src/cliargs.c @@ -0,0 +1,131 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// CLI argument stuff + +#include +#include +#include "config.h" +#include "cliargs.h" + + +// Constants +const char cliargs_error[] = "Error in CLI arguments: "; + + +// Variables +static int arguments_left; // number of CLI arguments left +static const char** next_argument; // next argument pointer + + +// Exported functions + +// Return pointer to next command line argument (NULL if no more) +const char* cliargs_get_next(void) { + if(arguments_left == 0) + return(NULL); + arguments_left--; + return(*next_argument++); +} + +// parse command line switches +void cliargs_handle_options(char (*fn_short)(const char*), const char* (*fn_long)(const char*)) { + const char *problem_string, + *argument; + char problem_char; + + do { + // if there are no more arguments, return immediately + if(arguments_left == 0) + return; + // if next argument is not an option, return immediately + if((**next_argument) != '-') + return; + // officially fetch argument. We already know the + // first character is a '-', so advance pointer. + argument = cliargs_get_next() + 1; + // Check for "--" + if(*argument == '-') { + // long argument + if(argument[1] == '\0') + return; // when encountering "--", return + else { + problem_string = fn_long(argument + 1); + if(problem_string) { + fprintf(stderr, "%sUnknown option (--%s).\n", cliargs_error, problem_string); + exit(EXIT_FAILURE); + } + } + } else { + problem_char = fn_short(argument); + if(problem_char) { + fprintf(stderr, "%sUnknown switch (-%c).\n", cliargs_error, problem_char); + exit(EXIT_FAILURE); + } + } + } while(TRUE); +} + +// Return next arg. If there is none, complain and exit +const char* cliargs_get_string(const char name[]) { + const char* string; + + string = cliargs_get_next(); + if(string) + return(string); + fprintf(stderr, "%sMissing %s.\n", cliargs_error, name); + exit(EXIT_FAILURE); +} + +// Return signed long representation of next arg. +// If there is none, complain and exit. +// Copes with hexadecimal if prefixed with "$", "0x" or "0X". +// Copes with octal if prefixed with "&". +// Copes with binary if prefixed with "%". +// Assumes decimal otherwise. +signed long cliargs_get_long(const char name[]) { + signed long result; + const char *start; + char *end; + int base = 10; + + start = cliargs_get_string(name); + if(*start == '%') { + base = 2; + start++; + } else if(*start == '&') { + base = 8; + start++; + } else if(*start == '$') { + base = 16; + start++; + } else if((*start == '0') && ((start[1] == 'x') || (start[1] == 'X'))) { + base = 16; + start += 2; + } + result = strtol(start, &end, base); + if(*end == '\0') + return(result); + fprintf(stderr, "%sCould not parse '%s'.\n", cliargs_error, end); + exit(EXIT_FAILURE); +} + +// init command line handling stuff +const char* cliargs_init(int argc, const char *argv[]) { + arguments_left = argc; + next_argument = argv; + return(cliargs_get_next()); +} + +// return unhandled (non-option) arguments. Complains if none. +void cliargs_get_rest(int *argc, const char***argv, const char error[]) { + *argc = arguments_left; + *argv = next_argument; + + if(error && (arguments_left == 0)) { + fprintf(stderr, "%s%s.\n", cliargs_error, error); + exit(EXIT_FAILURE); + } +} diff --git a/Platform/Apple/tools/ACME/src/cliargs.h b/Platform/Apple/tools/ACME/src/cliargs.h new file mode 100644 index 00000000..bdf6ba4d --- /dev/null +++ b/Platform/Apple/tools/ACME/src/cliargs.h @@ -0,0 +1,32 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// CLI argument stuff +#ifndef cliargs_H +#define cliargs_H + + +// Constants +extern const char cliargs_error[]; + + +// Prototypes + +// Handle options. Call fn_short for short options, fn_long for long ones. +extern void cliargs_handle_options(char (*fn_short)(const char*), const char* (*fn_long)(const char*)); +// Return next argument. +extern const char* cliargs_get_next(void); +// Return next argument. If none left, complain with given name. +extern const char* cliargs_get_string(const char name[]); +// Return next argument as signed long. If no arguments left, complain with +// given name. On parse error, exit with error message. +extern signed long cliargs_get_long(const char name[]); +// Initialise argument handler. Returns program name (argv[0]). +extern const char* cliargs_init(int argc, const char *argv[]); +// Get unhandled args. If none left, complain with given error message. +extern void cliargs_get_rest(int *argc, const char***argv, const char error[]); + + +#endif diff --git a/Platform/Apple/tools/ACME/src/config.h b/Platform/Apple/tools/ACME/src/config.h new file mode 100644 index 00000000..2f75e2cb --- /dev/null +++ b/Platform/Apple/tools/ACME/src/config.h @@ -0,0 +1,45 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Configuration +#ifndef config_H +#define config_H + + +// types +typedef unsigned int zone_t; +typedef signed long value_t; // At least 32 bits +typedef unsigned long uvalue_t; // just for logical shift right +typedef struct label_t label_t; +typedef struct node_ra_t node_ra_t; +typedef struct node_t node_t; +typedef struct result_t result_t; + +// Debugging flag, should be undefined in release version +// #define FDEBUG + +// Maximum nesting depth of "!src" and macro calls +// Is not actually a limitation, but a means of finding recursions +#define MAX_NESTING 64 +// Default value for output buffer +#define FILLVALUE_INITIAL 0 +// Default value for "!fill" +#define FILLVALUE_FILL 0 +// Default value for "!align" (234 = NOP) +#define FILLVALUE_ALIGN 234 + +// Nullpointer definition +#ifndef NULL +#define NULL ((void *)0) +#endif +// Boolean values +#ifndef FALSE +typedef int bool; +#define FALSE 0 +#define TRUE 1 +#endif + + +#endif diff --git a/Platform/Apple/tools/ACME/src/cpu.c b/Platform/Apple/tools/ACME/src/cpu.c new file mode 100644 index 00000000..6dd7b3e9 --- /dev/null +++ b/Platform/Apple/tools/ACME/src/cpu.c @@ -0,0 +1,319 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// CPU stuff + +#include "alu.h" +#include "config.h" +#include "cpu.h" +#include "dynabuf.h" +#include "global.h" +#include "input.h" +#include "mnemo.h" +#include "output.h" +#include "tree.h" + + +// Structure for linked list of segment data +typedef struct segment_t segment_t; +struct segment_t { + segment_t* next; + value_t start; + value_t length; +}; + + +// Constants +static cpu_t CPU_6502 = {keyword_is_6502mnemo, CPU_FLAG_INDJMP_BUGGY}; +static cpu_t CPU_6510 = {keyword_is_6510mnemo, CPU_FLAG_INDJMP_BUGGY}; +static cpu_t CPU_65c02 = {keyword_is_65c02mnemo, 0}; +//static cpu_t CPU_Rockwell65c02 = {keyword_is_Rockwell65c02mnemo, 0}; +//static cpu_t CPU_WDC65c02 = {keyword_is_WDC65c02mnemo, 0}; +static cpu_t CPU_65816 = { + keyword_is_65816mnemo, + CPU_FLAG_LONG_REGS | CPU_FLAG_IMM16 +}; + + +// Variables +cpu_t *CPU_now; // Struct of current CPU type (default 6502) +bool CPU65816_long_a;// Flag for long accumulator (default off) +bool CPU65816_long_r;// Flag for long index registers (default off) +value_t CPU_pc; // (Pseudo) program counter at start of statement +static segment_t* segment_list; // linked list of segment structures +// predefined stuff +static node_t* CPU_tree = NULL;// tree to hold CPU types +static node_t CPUs[] = { +// PREDEFNODE("z80", &CPU_Z80), + PREDEFNODE("6502", &CPU_6502), + PREDEFNODE("6510", &CPU_6510), + PREDEFNODE("65c02", &CPU_65c02), +// PREDEFNODE("Rockwell65c02", &CPU_Rockwell65c02), +// PREDEFNODE("WDC65c02", &CPU_WDC65c02), + PREDEFLAST("65816", &CPU_65816), + // ^^^^ this marks the last element +}; + + +// init lowest and highest address +static void init_borders(value_t first_pc) { + Mem_lowest_pc = first_pc; + Mem_highest_pc = first_pc; +} + +// set new program counter value +static void set_new_pc(value_t new_pc) { + segment_start = new_pc; + CPU_pc = new_pc; + Mem_current_pc = new_pc; +} + +// Link segment data into segment chain +static void link_segment(value_t start, value_t length) { + segment_t *new_segment; + + // may be faster if list is ordered! + new_segment = ALLOC_PASS(sizeof(segment_t)); + new_segment->start = start; + new_segment->length = length; + new_segment->next = segment_list; + segment_list = new_segment; +} + +// Show start and end of current segment +void CPU_end_segment(void) { + if(Mem_current_pc != CPU_pc) + Throw_warning("Offset assembly still active at end of segment. Switched it off."); + if(pass_flags & PASS_ISFIRST) { + link_segment(segment_start, Mem_current_pc - segment_start); + if(Process_verbosity > 1) + printf("Segment size is %ld ($%lx) bytes ($%lx - $%lx exclusive).\n", Mem_current_pc - segment_start, Mem_current_pc - segment_start, segment_start, Mem_current_pc); + } +} + +// Set up new segment_max value according to the given program counter. Just +// find the next segment start and subtract 1. +void CPU_find_segment_max(value_t new_pc) { + segment_t* test_segment; + + // may be faster if list is ordered! + segment_max = OUTBUFFERSIZE;// will be decremented later! + test_segment = segment_list; + while(test_segment) { + if((test_segment->start > new_pc) + && (test_segment->start < segment_max)) + segment_max = test_segment->start; + test_segment = test_segment->next; + } + segment_max--;// last free address available +} + +// Check whether given PC is inside segment. +static void check_segment(value_t new_pc) { + segment_t* test_segment; + + test_segment = segment_list; + while(test_segment) { + if((new_pc >= test_segment->start) + && (new_pc < (test_segment->start) + (test_segment->length))) + Throw_warning("Segment starts inside another one, overwriting it."); + test_segment = test_segment->next; + } +} + +// Parse (re-)definitions of program counter +void CPU_set_pc(void) {// Now GotByte = "*" + result_t new_pc; + + NEXTANDSKIPSPACE(); // proceed with next char + // re-definitions of program counter change segment + if(GotByte == '=') { + GetByte();// proceed with next char + ALU_parse_expr_strict(&new_pc); + if(CPU_pc != PC_UNDEFINED) { + // It's a redefinition. Check some things: + // check whether new low + if(new_pc.value < Mem_lowest_pc) + Mem_lowest_pc = new_pc.value; + // show status of previous segment + CPU_end_segment(); + // in first pass, maybe issue warning + if(pass_flags & PASS_ISFIRST) { + check_segment(new_pc.value); + CPU_find_segment_max(new_pc.value); + } + } else // it's the first pc definition + init_borders(new_pc.value); + set_new_pc(new_pc.value); + Input_ensure_EOS(); + } else { + Throw_error(exception_syntax); + Input_skip_remainder(); + } +} + +// make sure PC is defined. If not, complain and set to dummy value +// FIXME - get rid of this function as it slows down Output_byte +inline void CPU_ensure_defined_pc(void) { + if(CPU_pc == PC_UNDEFINED) { + Throw_error("Program counter is unset."); + CPU_pc = PC_DUMMY; + } +} + +// Insert byte until PC fits conditions +static enum eos_t PO_align(void) { + result_t and, + equal, + fill; + value_t test = CPU_pc; + + CPU_ensure_defined_pc(); + ALU_parse_expr_strict(&and); + fill.value = FILLVALUE_ALIGN; + if(!Input_accept_comma()) + Throw_error(exception_syntax); + ALU_parse_expr_strict(&equal); + if(Input_accept_comma()) + ALU_parse_expr_medium(&fill); + while((test++ & and.value) != equal.value) + Output_8b(fill.value); + return(ENSURE_EOS); +} + +// Try to find CPU type held in DynaBuf. Returns whether succeeded. +bool CPU_find_cpu_struct(cpu_t** target) { + void* node_body; + + if(!Tree_easy_scan(CPU_tree, &node_body, GlobalDynaBuf)) + return(FALSE); + *target = node_body; + return(TRUE); +} + +// Select CPU ("!cpu" pseudo opcode) +static enum eos_t PO_cpu(void) { + cpu_t* cpu_buffer = CPU_now; // remember current cpu + + if(Input_read_and_lower_keyword()) + if(!CPU_find_cpu_struct(&CPU_now)) + Throw_error("Unknown processor."); + // If there's a block, parse that and then restore old value! + if(Parse_optional_block()) + CPU_now = cpu_buffer; + return(ENSURE_EOS); +} + +static const char Warning_old_offset_assembly[] = + "\"!pseudopc/!realpc\" is deprecated; use \"!pseudopc {}\" instead."; + +// Start offset assembly +static enum eos_t PO_pseudopc(void) { + result_t result; + value_t offset = CPU_pc - Mem_current_pc; + + // set new + ALU_parse_expr_strict(&result); + CPU_pc = result.value; + // If there's a block, parse that and then restore old value! + if(Parse_optional_block()) + CPU_pc = (Mem_current_pc + offset) & 0xffff; // restore old + else if(pass_flags & PASS_ISFIRST) + Throw_warning(Warning_old_offset_assembly); + return(ENSURE_EOS); +} + +// End offset assembly +static enum eos_t PO_realpc(void) { + if(pass_flags & PASS_ISFIRST) + Throw_warning(Warning_old_offset_assembly); + CPU_pc = Mem_current_pc;// deactivate offset assembly + return(ENSURE_EOS); +} + +// If cpu type and value match, set register length variable to value. +// If cpu type and value don't match, complain instead. +static void check_and_set_reg_length(int *var, bool long_reg) { + if(long_reg && ((CPU_now->flags & CPU_FLAG_LONG_REGS) == 0)) + Throw_error("Chosen CPU does not support long registers."); + else + *var = long_reg; +} + +// Set register length, block-wise if needed. +static enum eos_t set_register_length(int* var, bool long_reg) { + int buffer = *var; + + // Set new register length (or complain - whichever is more fitting) + check_and_set_reg_length(var, long_reg); + // If there's a block, parse that and then restore old value! + if(Parse_optional_block()) + check_and_set_reg_length(var, buffer);// restore old length + return(ENSURE_EOS); +} + +// Switch to long accu ("!al" pseudo opcode) +static enum eos_t PO_al(void) { + return(set_register_length(&CPU65816_long_a, TRUE)); +} + +// Switch to short accu ("!as" pseudo opcode) +static enum eos_t PO_as(void) { + return(set_register_length(&CPU65816_long_a, FALSE)); +} + +// Switch to long index registers ("!rl" pseudo opcode) +static enum eos_t PO_rl(void) { + return(set_register_length(&CPU65816_long_r, TRUE)); +} + +// Switch to short index registers ("!rs" pseudo opcode) +static enum eos_t PO_rs(void) { + return(set_register_length(&CPU65816_long_r, FALSE)); +} + +// pseudo opcode table +static node_t pseudo_opcodes[] = { + PREDEFNODE("align", PO_align), + PREDEFNODE("cpu", PO_cpu), + PREDEFNODE("pseudopc", PO_pseudopc), + PREDEFNODE("realpc", PO_realpc), + PREDEFNODE("al", PO_al), + PREDEFNODE("as", PO_as), + PREDEFNODE("rl", PO_rl), + PREDEFLAST("rs", PO_rs), + // ^^^^ this marks the last element +}; + +// Set default values for pass +void CPU_passinit(cpu_t* cpu_type, signed long starting_pc) { + // handle cpu type (default is 6502) + CPU_now = cpu_type ? cpu_type : &CPU_6502; + CPU65816_long_a = FALSE; // short accumulator + CPU65816_long_r = FALSE; // short index registers + // handle program counter + if(starting_pc == PC_UNDEFINED) { + init_borders(0); // set to _something_ (for !initmem) + segment_start = 0; + CPU_pc = PC_UNDEFINED; + Mem_current_pc = 0; + } else { + init_borders(starting_pc); + set_new_pc(starting_pc); + } + // other stuff + segment_list = NULL; + segment_max = OUTBUFFERSIZE-1; +} + +// init cpu type tree (is done early) +void CPUtype_init(void) { + Tree_add_table(&CPU_tree, CPUs); +} + +// init other stuff (done later) +void CPU_init(void) { + Tree_add_table(&pseudo_opcode_tree, pseudo_opcodes); +} diff --git a/Platform/Apple/tools/ACME/src/cpu.h b/Platform/Apple/tools/ACME/src/cpu.h new file mode 100644 index 00000000..fc52fcb4 --- /dev/null +++ b/Platform/Apple/tools/ACME/src/cpu.h @@ -0,0 +1,47 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// CPU stuff +#ifndef cpu_H +#define cpu_H + +#include "config.h" + + +// CPU type structure definition +struct cpu_t { + // This routine is not allowed to change GlobalDynaBuf + // because that's where the mnemonic is stored! + bool (*keyword_is_mnemonic)(int); + int flags; +}; +#define CPU_FLAG_LONG_REGS (1u << 0) +#define CPU_FLAG_IMM16 (1u << 1) +#define CPU_FLAG_INDJMP_BUGGY (1u << 2) +typedef struct cpu_t cpu_t; + + +// Variables +extern cpu_t *CPU_now; // Struct of current CPU type (default 6502) +extern bool CPU65816_long_a; // Flags for long accumulator and long +extern bool CPU65816_long_r; // index registers (both default off) + // FIXME - move the 65816 stuff out of general CPU stuff? +extern value_t CPU_pc; // Current program counter (pseudo value) +#define PC_UNDEFINED -1 // value of PC when undefined +#define PC_DUMMY 512 // dummy value to use when looking for errors + + +// Prototypes +extern void CPUtype_init(void); +extern void CPU_init(void); +extern void CPU_passinit(cpu_t* cpu_type, signed long starting_pc); +extern void CPU_end_segment(void); +extern void CPU_find_segment_max(value_t); +extern void CPU_set_pc(void); +extern inline void CPU_ensure_defined_pc(void); +extern bool CPU_find_cpu_struct(cpu_t** target); + + +#endif diff --git a/Platform/Apple/tools/ACME/src/dynabuf.c b/Platform/Apple/tools/ACME/src/dynabuf.c new file mode 100644 index 00000000..d884f123 --- /dev/null +++ b/Platform/Apple/tools/ACME/src/dynabuf.c @@ -0,0 +1,138 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Dynamic buffer stuff + +#include +#include +#include +#include "acme.h" +#include "global.h" +#include "dynabuf.h" +#include "input.h" + + +// Constants and macros + +// macro to grow dynabuf (CAUTION - fails if a < 1) +#define MAKE_LARGER_THAN(a) (2*(a)) +// if someone requests a dynabuf smaller than this, use this size instead +#define DYNABUF_MINIMUM_INITIALSIZE 128 // should be >0 (see above) +// initial size for global dynabuf +// (as it holds macros, loop bodies, etc., make it large to begin with) +#define GLOBALDYNABUF_INITIALSIZE 1024 // should be >0 (see above) + + +// Variables +dynabuf_t* GlobalDynaBuf; // global dynamic buffer + + +// Functions + +// get new buffer of given size +static void resize(dynabuf_t* db, size_t new_size) { + char* new_buf; + + new_buf = realloc(db->buffer, new_size); + if(new_buf == NULL) + Throw_serious_error(exception_no_memory_left); + db->reserved = new_size; + db->buffer = new_buf; +} + + +// Exported functions + +// Create and init a dynamic buffer and return pointer +dynabuf_t* DynaBuf_create(int initial_size) { + dynabuf_t* db; + + if(initial_size < DYNABUF_MINIMUM_INITIALSIZE) + initial_size = DYNABUF_MINIMUM_INITIALSIZE; + if((db = malloc(sizeof(dynabuf_t)))) { + db->size = 0; + db->reserved = initial_size; + db->buffer = malloc(initial_size); + if(db->buffer) + return(db);// if both pointers are != NULL, no error + } + // otherwise, complain + fputs("Error: No memory for dynamic buffer.\n", stderr); + exit(EXIT_FAILURE); +} + +// Enlarge buffer +void DynaBuf_enlarge(dynabuf_t* db) { + resize(db, MAKE_LARGER_THAN(db->reserved)); +} + +// Claim enough memory to hold a copy of the current buffer contents, +// make that copy and return it. +// The copy must be released by calling free(). +char* DynaBuf_get_copy(dynabuf_t* db) { + char *copy; + + copy = safe_malloc(db->size); + memcpy(copy, db->buffer, db->size); + return(copy); +} + +// add char to buffer +void DynaBuf_append(dynabuf_t* db, char byte) { + DYNABUF_APPEND(db, byte); +} + +// Append string to buffer (without terminator) +void DynaBuf_add_string(dynabuf_t* db, const char* string) { + char byte; + + while((byte = *string++)) + DYNABUF_APPEND(db, byte); +} + +// add string version of value to buffer (without terminator) +void DynaBuf_add_value(dynabuf_t* db, value_t value) { + value_t header = value / 10, + last = value % 10; + + // cater for negative values. "value = -value" would fail for -2^31 + if(value < 0) { + DynaBuf_append(db, '-'); + header = -header; + last = -last; + } + if(last < 0) { + last += 10; + header--; + } + if(header) + DynaBuf_add_value(db, header); + DynaBuf_append(db, "0123456789"[last]); +} + +// Convert buffer contents to lower case (target and source may be identical) +void DynaBuf_to_lower(dynabuf_t* target, dynabuf_t* source) { + char *read, + *write; + + // make sure target can take it + if(source->size > target->reserved) + resize(target, source->size); + // convert to lower case + read = source->buffer;// CAUTION - ptr may change when buf grows! + write = target->buffer;// CAUTION - ptr may change when buf grows! + while(*read) + *write++ = (*read++) | 32; + // Okay, so this method of converting to lowercase is lousy. + // But actually it doesn't matter, because only pre-defined + // keywords are converted, and all of those are plain + // old-fashioned 7-bit ASCII anyway. So I guess it'll do. + *write = '\0'; // terminate +} + +// Initialisation - allocate global dynamic buffer +void DynaBuf_init(void) { + GlobalDynaBuf = DynaBuf_create(GLOBALDYNABUF_INITIALSIZE); +} diff --git a/Platform/Apple/tools/ACME/src/dynabuf.h b/Platform/Apple/tools/ACME/src/dynabuf.h new file mode 100644 index 00000000..911b3b25 --- /dev/null +++ b/Platform/Apple/tools/ACME/src/dynabuf.h @@ -0,0 +1,59 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Dynamic buffer stuff +#ifndef dynabuf_H +#define dynabuf_H + +#include "config.h" + + +// Macros +#define DYNABUF_CLEAR(db) {db->size = 0;} +#define DYNABUF_APPEND(db, byte) do {\ + if(db->size == db->reserved)\ + DynaBuf_enlarge(db);\ + db->buffer[(db->size)++] = byte;\ +} while(0) +// The next one is dangerous - the buffer location can change when a character +// is appended. So after calling this, don't change the buffer as long as you +// use the address. +#define GLOBALDYNABUF_CURRENT (GlobalDynaBuf->buffer) + + +// dynamic buffer structure +struct dynabuf_t { + char* buffer; // pointer to buffer + int size; // size of buffer's used portion + int reserved; // total size of buffer +}; +typedef struct dynabuf_t dynabuf_t; + + +// Variables +extern dynabuf_t* GlobalDynaBuf; // global dynamic buffer + + +// Prototypes + +// create global DynaBuf (call once on program startup) +extern void DynaBuf_init(void); +// create (private) DynaBuf +extern dynabuf_t* DynaBuf_create(int initial_size); +// call whenever buffer is too small +extern void DynaBuf_enlarge(dynabuf_t* db); +// returns copy of buffer's contents +extern char* DynaBuf_get_copy(dynabuf_t* db); +// copies string to buffer (without terminator) +extern void DynaBuf_add_string(dynabuf_t* db, const char*); +// add string version of value to buffer (without terminator) +extern void DynaBuf_add_value(dynabuf_t* db, value_t value); +// converts buffer contents to lower case +extern void DynaBuf_to_lower(dynabuf_t* db, dynabuf_t*); +// add char to buffer +extern void DynaBuf_append(dynabuf_t* db, char); + + +#endif diff --git a/Platform/Apple/tools/ACME/src/encoding.c b/Platform/Apple/tools/ACME/src/encoding.c new file mode 100644 index 00000000..19e2d66a --- /dev/null +++ b/Platform/Apple/tools/ACME/src/encoding.c @@ -0,0 +1,245 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Character encoding stuff + +#include +#include +#include "alu.h" +#include "acme.h" +#include "dynabuf.h" +#include "encoding.h" +#include "global.h" +#include "output.h" +#include "input.h" +#include "tree.h" + + +// Encoder function type definition +typedef char (*encoder_t)(char) ; + + +// Constants +static const char s_pet[] = "pet"; +static const char s_raw[] = "raw"; +static const char s_scr[] = "scr"; + + +// Variables + +// Conversion function pointer. No init needed: gets set before each pass. +char (*Encoding_encode_char)(char); +static char outermost_table[256]; // space for encoding table... +static char* loaded_table = outermost_table; // ...loaded from file +// predefined stuff +static node_t* encoder_tree = NULL; // tree to hold encoders + + +// Functions + +// Insert string(s) +static enum eos_t encode_string(encoder_t inner_encoder, char eor) { + result_t result; + encoder_t outer_encoder = Encoding_encode_char;// buffer encoder + + // make given encoder the current one (for ALU-parsed values) + Encoding_encode_char = inner_encoder; + do { + if(GotByte == '"') { + // read initial character + GetQuotedByte(); + // send characters until closing quote is reached + while(GotByte && (GotByte != '"')) { + Output_8b(eor ^ Encoding_encode_char(GotByte)); + GetQuotedByte(); + } + if(GotByte == CHAR_EOS) + return(AT_EOS_ANYWAY); + // after closing quote, proceed with next char + GetByte(); + } else { + // Parse value. No problems with single characters + // because the current encoding is + // temporarily set to the given one. + ALU_parse_expr_medium(&result); + Output_8b(result.value); + } + } while(Input_accept_comma()); + Encoding_encode_char = outer_encoder; // reactivate buffered encoder + return(ENSURE_EOS); +} + +// Insert text string (default format) +static enum eos_t PO_text(void) { + return(encode_string(Encoding_encode_char, 0)); +} + +// convert raw to raw (do not convert at all) +static char encoder_raw(char byte) { + return(byte); +} + +// Insert raw string +static enum eos_t PO_raw(void) { + return(encode_string(encoder_raw, 0)); +} + +// convert raw to petscii +static char encoder_pet(char byte) { + if((byte >= 'A') && (byte <= 'Z')) + return((char) (byte | 0x80)); // FIXME - check why SAS-C + if((byte >= 'a') && (byte <= 'z')) // wants these casts. + return((char)(byte - 32)); // There are more below. + return(byte); +} + +// Insert PetSCII string +static enum eos_t PO_pet(void) { + return(encode_string(encoder_pet, 0)); +} + +// convert raw to C64 screencode +static char encoder_scr(char byte) { + if((byte >= 'a') && (byte <= 'z')) + return((char)(byte - 96)); // shift uppercase down + if((byte >= '[') && (byte <= '_')) + return((char)(byte - 64)); // shift [\]^_ down + if(byte == '`') + return(64); // shift ` down + if(byte == '@') + return(0); // shift @ down + return(byte); +} + +// Insert screencode string +static enum eos_t PO_scr(void) { + return(encode_string(encoder_scr, 0)); +} + +// Insert screencode string, EOR'd +static enum eos_t PO_scrxor(void) { + result_t result; + + ALU_parse_expr_medium(&result); + if(Input_accept_comma()) + return(encode_string(encoder_scr, result.value)); + Throw_error(exception_syntax); + return(SKIP_REMAINDER); +} + +// Switch to CBM mode ("!cbm" pseudo opcode) +static enum eos_t PO_cbm(void) { + Encoding_encode_char = encoder_pet; + // output deprecation warning + if(pass_flags & PASS_ISFIRST) + Throw_warning("\"!cbm\" is deprecated; use \"!ct pet\" instead."); + return(ENSURE_EOS); +} + +// +static char encoder_file(char byte) { + return(loaded_table[(unsigned char) byte]); +} + +// read encoding table from file +static enum eos_t user_defined_encoding(void) { + FILE* fd; + char *filename, + local_table[256], + *buffered_table = loaded_table; + encoder_t buffered_encoder = Encoding_encode_char; + + // if file name is missing, don't bother continuing + if((filename = Input_read_filename(TRUE)) == NULL) + return(SKIP_REMAINDER); + fd = fopen(filename, FILE_READBINARY); + if(fd) { + if(fread(local_table, sizeof(char), 256, fd) != 256) + Throw_error("Conversion table incomplete."); + fclose(fd); + } else + Throw_error(exception_cannot_open_input_file); + free(filename); // filename no longer needed + Encoding_encode_char = encoder_file; // activate new encoding + loaded_table = local_table; // activate local table + // If there's a block, parse that and then restore old values + if(Parse_optional_block()) + Encoding_encode_char = buffered_encoder; + else + // if there's *no* block, the table must be used from now on. + // copy the local table to the "outer" table + memcpy(buffered_table, local_table, 256); + // re-activate "outer" table (it might have been changed by memcpy()) + loaded_table = buffered_table; + return(ENSURE_EOS); +} + +// use one of the pre-defined encodings (raw, pet, scr) +static enum eos_t predefined_encoding(void) { + void* node_body; + char local_table[256], + *buffered_table = loaded_table; + encoder_t buffered_encoder = Encoding_encode_char; + + // use one of the pre-defined encodings + if(Input_read_and_lower_keyword()) { + // search for tree item + if(Tree_easy_scan(encoder_tree, &node_body, GlobalDynaBuf)) + Encoding_encode_char = (encoder_t) node_body;// activate new encoder + else + Throw_error("Unknown encoding."); + } + loaded_table = local_table; // activate local table + // If there's a block, parse that and then restore old values + if(Parse_optional_block()) + Encoding_encode_char = buffered_encoder; + // re-activate "outer" table + loaded_table = buffered_table; + return(ENSURE_EOS); +} + +// Set current encoding ("!convtab" pseudo opcode) +static enum eos_t PO_convtab(void) { + if((GotByte == '<') || (GotByte == '"')) + return(user_defined_encoding()); + else + return(predefined_encoding()); +} + +// pseudo opcode table +static node_t pseudo_opcodes[] = { + PREDEFNODE(s_cbm, PO_cbm), + PREDEFNODE("ct", PO_convtab), + PREDEFNODE("convtab", PO_convtab), + PREDEFNODE(s_pet, PO_pet), + PREDEFNODE(s_raw, PO_raw), + PREDEFNODE(s_scr, PO_scr), + PREDEFNODE("scrxor", PO_scrxor), + PREDEFNODE("text", PO_text), + PREDEFLAST("tx", PO_text), + // ^^^^ this marks the last element +}; + +// keywords for "!convtab" pseudo opcode +static node_t encoders[] = { + PREDEFNODE(s_pet, encoder_pet), + PREDEFNODE(s_raw, encoder_raw), + PREDEFLAST(s_scr, encoder_scr), + // ^^^^ this marks the last element +}; + + +// Exported functions + +// Init (add to tree) +void Encoding_init(void) { + Tree_add_table(&encoder_tree, encoders); + Tree_add_table(&pseudo_opcode_tree, pseudo_opcodes); +} + +// Set default encoding (called before each pass) +void Encoding_passinit(void) { + Encoding_encode_char = encoder_raw; +} diff --git a/Platform/Apple/tools/ACME/src/encoding.h b/Platform/Apple/tools/ACME/src/encoding.h new file mode 100644 index 00000000..c5c93b7f --- /dev/null +++ b/Platform/Apple/tools/ACME/src/encoding.h @@ -0,0 +1,20 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Character encoding stuff +#ifndef encoding_H +#define encoding_H + + +// Variables +extern char (*Encoding_encode_char)(char); // conversion function pointer + + +// Prototypes +extern void Encoding_init(void); +extern void Encoding_passinit(void); + + +#endif diff --git a/Platform/Apple/tools/ACME/src/flow.c b/Platform/Apple/tools/ACME/src/flow.c new file mode 100644 index 00000000..445eedbc --- /dev/null +++ b/Platform/Apple/tools/ACME/src/flow.c @@ -0,0 +1,403 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Flow control stuff (loops, conditional assembly etc.) +// +// Macros, conditional assembly, loops and sourcefile-includes are all based on +// parsing blocks of code. When defining macros or using loops or conditional +// assembly, the block starts with "{" and ends with "}". In the case of +// "!source", the given file is treated like a block - the outermost assembler +// routine uses the same technique to parse the top level file. + +#include +#include "acme.h" +#include "alu.h" +#include "config.h" +#include "dynabuf.h" +#include "global.h" +#include "input.h" +#include "label.h" +#include "macro.h" +#include "mnemo.h" +#include "tree.h" + + +// type definitions +enum cond_key_t { + ID_UNTIL, // Handles to store instead of + ID_WHILE, // the UNTIL and WHILE keywords +}; +typedef struct { + enum cond_key_t type; // either ID_UNTIL or ID_WHILE + int line; // original line number + char* body; // pointer to actual expression +} loopcond_t; + + +// Variables + +// predefined stuff +static node_t* condkey_tree = NULL;// tree to hold UNTIL and WHILE +static node_t condkeys[] = { + PREDEFNODE("until", ID_UNTIL), + PREDEFLAST("while", ID_WHILE), + // ^^^^ this marks the last element +}; + + +// Helper functions for "!for" and "!do" + +// Parse a loop body (FIXME - or a macro?) +static void parse_ram_block(int line_number, char* body) { + Input_now->line_number = line_number;// set line number to loop start + Input_now->src.ram_ptr = body;// set RAM read pointer to loop + // Parse loop body + Parse_until_eob_or_eof(); + if(GotByte != CHAR_EOB) + Bug_found("IllegalBlockTerminator", GotByte); +} + +// Try to read a condition into DynaBuf and store copy pointer in +// given loopcond_t structure. +// If no condition given, NULL is written to structure. +// Call with GotByte = first interesting character +static void store_condition(loopcond_t* condition, char terminator) { + void* node_body; + + // write line number + condition->line = Input_now->line_number; + // Check for empty condition + if(GotByte == terminator) { + // Write NULL condition, then return + condition->body = NULL; + return; + } + // Seems as if there really *is* a condition. + // Read UNTIL/WHILE keyword + if(Input_read_and_lower_keyword()) { + // Search for new tree item + if(!Tree_easy_scan(condkey_tree, &node_body, GlobalDynaBuf)) { + Throw_error(exception_syntax); + condition->body = NULL; + return; + } + condition->type = (enum cond_key_t) node_body; + // Write given condition into buffer + SKIPSPACE(); + DYNABUF_CLEAR(GlobalDynaBuf); + Input_until_terminator(terminator); + DynaBuf_append(GlobalDynaBuf, CHAR_EOS);// ensure terminator + condition->body = DynaBuf_get_copy(GlobalDynaBuf); + } + return; +} + +// Check a condition expression +static bool check_condition(loopcond_t* condition) { + result_t expression; + + // First, check whether there actually *is* a condition + if(condition->body == NULL) + return(TRUE); // non-existant conditions are always true + // set up input for expression evaluation + Input_now->line_number = condition->line; + Input_now->src.ram_ptr = condition->body; + GetByte(); // proceed with next char + ALU_parse_expr_strict(&expression); + if(GotByte) + Throw_serious_error(exception_syntax); + if(condition->type == ID_UNTIL) + return(!expression.value); + return(expression.value != FALSE); +} + +// Looping assembly ("!do"). Has to be re-entrant. +static enum eos_t PO_do(void) { // Now GotByte = illegal char + loopcond_t condition1, + condition2; + input_t loop_input, + *outer_input; + char* loop_body; + bool go_on; + int loop_start;// line number of loop pseudo opcode + + // Read head condition to buffer + SKIPSPACE(); + store_condition(&condition1, CHAR_SOB); + if(GotByte != CHAR_SOB) + Throw_serious_error(exception_no_left_brace); + // Remember line number of loop body, + // then read block and get copy + loop_start = Input_now->line_number; + loop_body = Input_skip_or_store_block(TRUE); // changes line number! + // now GotByte = '}' + NEXTANDSKIPSPACE();// Now GotByte = first non-blank char after block + // Read tail condition to buffer + store_condition(&condition2, CHAR_EOS); + // now GotByte = CHAR_EOS + // set up new input + loop_input = *Input_now;// copy current input structure into new + loop_input.source_is_ram = TRUE; // set new byte source + // remember old input + outer_input = Input_now; + // activate new input (not useable yet, as pointer and + // line number are not yet set up) + Input_now = &loop_input; + do { + // Check head condition + go_on = check_condition(&condition1); + if(go_on) { + parse_ram_block(loop_start, loop_body); + // Check tail condition + go_on = check_condition(&condition2); + } + } while(go_on); + // Free memory + free(condition1.body); + free(loop_body); + free(condition2.body); + // restore previous input: + Input_now = outer_input; + GotByte = CHAR_EOS; // CAUTION! Very ugly kluge. + // But by switching input, we lost the outer input's GotByte. We know + // it was CHAR_EOS. We could just call GetByte() to get real input, but + // then the main loop could choke on unexpected bytes. So we pretend + // that we got the outer input's GotByte value magically back. + return(AT_EOS_ANYWAY); +} + +// Looping assembly ("!for"). Has to be re-entrant. +static enum eos_t PO_for(void) {// Now GotByte = illegal char + input_t loop_input, + *outer_input; + result_t loop_counter; + value_t maximum; + char* loop_body;// pointer to loop's body block + label_t* label; + zone_t zone; + int force_bit, + loop_start;// line number of "!for" pseudo opcode + + if(Input_read_zone_and_keyword(&zone) == 0) // skips spaces before + return(SKIP_REMAINDER); + // Now GotByte = illegal char + force_bit = Mnemo_get_force_bit(); // skips spaces after + label = Label_find(zone, 0); // FIXME - is it really useful that !for can set/clear force bits at will? + if(force_bit) { + label->flags &= ~MVALUE_FORCEBITS;// clear force bits + label->flags |= force_bit;// set desired force bit + } + if(Input_accept_comma() == FALSE) { + Throw_error(exception_syntax); + return(SKIP_REMAINDER); + } + ALU_parse_expr_strict(&loop_counter); +// prepare flags, size of *end* value doesn't matter for *all* loops + loop_counter.flags &= ~MVALUE_FORCEBITS; // clear force bits + if(loop_counter.value < 0) + Throw_serious_error("Loop count is negative."); + if(GotByte != CHAR_SOB) + Throw_serious_error(exception_no_left_brace); + // remember line number of loop pseudo opcode + loop_start = Input_now->line_number; + // read loop body into DynaBuf and get copy + loop_body = Input_skip_or_store_block(TRUE); // changes line number! + // switching input makes us lose GotByte. But we know it's '}' anyway! + // set up new input + loop_input = *Input_now;// copy current input structure into new + loop_input.source_is_ram = TRUE; // set new byte source + // remember old input + outer_input = Input_now; + // activate new input + // (not yet useable; pointer and line number are still missing) + Input_now = &loop_input; + if(loop_counter.value) {// skip loop if counter == 0 + maximum = loop_counter.value;// remember maximum value + loop_counter.value = 1;// start counting + do { + // set counter + Label_set_value(label, &loop_counter, TRUE); + parse_ram_block(loop_start, loop_body); + // increase loop counter + loop_counter.value++; + } while(loop_counter.value <= maximum); + } else + Label_set_value(label, &loop_counter, TRUE); // set counter + // Free memory + free(loop_body); + // restore previous input: + Input_now = outer_input; + // GotByte of OuterInput would be '}' (if it would still exist) + GetByte(); // fetch next byte + return(ENSURE_EOS); +} + +// Helper functions for "!if" and "!ifdef" + +// Parse or skip a block. Returns whether block's '}' terminator was missing. +// Afterwards: GotByte = '}' +static bool skip_or_parse_block(bool parse) { + if(!parse) { + Input_skip_or_store_block(FALSE); + return(FALSE); + } + // if block was correctly terminated, return FALSE + Parse_until_eob_or_eof(); + // if block isn't correctly terminated, complain and exit + if(GotByte != CHAR_EOB) + Throw_serious_error(exception_no_right_brace); + return(FALSE); +} + +// Parse {block} [else {block}] +static void parse_block_else_block(bool parse_first) { + // Parse first block. + // If it's not correctly terminated, return immediately (because + // in that case, there's no use in checking for an "else" part). + if(skip_or_parse_block(parse_first)) + return; + // now GotByte = '}'. Check for "else" part. + // If end of statement, return immediately. + NEXTANDSKIPSPACE(); + if(GotByte == CHAR_EOS) + return; + // read keyword and check whether really "else" + if(Input_read_and_lower_keyword()) { + if(strcmp(GlobalDynaBuf->buffer, "else")) + Throw_error(exception_syntax); + else { + SKIPSPACE(); + if(GotByte != CHAR_SOB) + Throw_serious_error(exception_no_left_brace); + skip_or_parse_block(!parse_first); + // now GotByte = '}' + GetByte(); + } + } + Input_ensure_EOS(); +} + +// Conditional assembly ("!if"). Has to be re-entrant. +static enum eos_t PO_if(void) {// Now GotByte = illegal char + result_t result; + + ALU_parse_expr_strict(&result); + if(GotByte != CHAR_SOB) + Throw_serious_error(exception_no_left_brace); + parse_block_else_block(!!(result.value)); + return(ENSURE_EOS); +} + +// Conditional assembly ("!ifdef"). Has to be re-entrant. +static enum eos_t PO_ifdef(void) {// Now GotByte = illegal char + node_ra_t* node; + label_t* label; + zone_t zone; + bool defined = FALSE; + + if(Input_read_zone_and_keyword(&zone) == 0) // skips spaces before + return(SKIP_REMAINDER); + Tree_hard_scan(&node, Label_forest, zone, FALSE); + if(node) { + label = (label_t*) node->body; + // in first pass, count usage + if(pass_flags & PASS_ISFIRST) + label->usage++; + if(label->flags & MVALUE_DEFINED) + defined = TRUE; + } + SKIPSPACE(); + if(GotByte == CHAR_SOB) + parse_block_else_block(defined); + else { + if(defined) + return(PARSE_REMAINDER); + return(SKIP_REMAINDER); + } + return(ENSURE_EOS); +} + +// Macro definition ("!macro"). +static enum eos_t PO_macro(void) {// Now GotByte = illegal char + // In first pass, parse. In all other passes, skip. + if(pass_flags & PASS_ISFIRST) + Macro_parse_definition(); // now GotByte = '}' + else { + // skip until CHAR_SOB ('{') is found. + // no need to check for end-of-statement, because such an + // error would already have been detected in first pass. + // for the same reason, there is no need to check for quotes. + while(GotByte != CHAR_SOB) + GetByte(); + Input_skip_or_store_block(FALSE); // now GotByte = '}' + } + GetByte(); // Proceed with next character + return(ENSURE_EOS); +} + +// Parse a whole source code file +void Parse_and_close_file(FILE* fd, const char* filename) { + // be verbose + if(Process_verbosity > 2) + printf("Parsing source file '%s'\n", filename); + // set up new input + Input_new_file(filename, fd); + // Parse block and check end reason + Parse_until_eob_or_eof(); + if(GotByte != CHAR_EOF) + Throw_error("Found '}' instead of end-of-file."); + // close sublevel src + fclose(Input_now->src.fd); +} + +// Include source file ("!source" or "!src"). Has to be re-entrant. +static enum eos_t PO_source(void) {// Now GotByte = illegal char + FILE* fd; + char local_gotbyte, + *filename; + input_t new_input, + *outer_input; + + // Enter new nesting level. + // Quit program if recursion too deep. + if(--source_recursions_left < 0) + Throw_serious_error("Too deeply nested. Recursive \"!source\"?"); + // Read file name. Quit function on error. + if((filename = Input_read_filename(TRUE)) == NULL) // uses copy + return(SKIP_REMAINDER); + // If file could be opened, parse it. Otherwise, complain. + if((fd = fopen(filename, FILE_READBINARY))) { + outer_input = Input_now;// remember old input + local_gotbyte = GotByte;// CAUTION - ugly kluge + Input_now = &new_input;// activate new input + Parse_and_close_file(fd, filename); + Input_now = outer_input;// restore previous input + GotByte = local_gotbyte;// CAUTION - ugly kluge + } else + Throw_error(exception_cannot_open_input_file); + // Release dynamically allocated file name + free(filename); + // Leave nesting level + source_recursions_left++; + return(ENSURE_EOS); +} + +// pseudo opcode table +static node_t pseudo_opcodes[] = { + PREDEFNODE("do", PO_do), + PREDEFNODE("for", PO_for), + PREDEFNODE("if", PO_if), + PREDEFNODE("ifdef", PO_ifdef), + PREDEFNODE("macro", PO_macro), + PREDEFNODE("source", PO_source), + PREDEFLAST("src", PO_source), + // ^^^^ this marks the last element +}; + +// Init (add stuff to tree) +void Flow_init(void) { + Tree_add_table(&condkey_tree, condkeys); + Tree_add_table(&pseudo_opcode_tree, pseudo_opcodes); +} diff --git a/Platform/Apple/tools/ACME/src/flow.h b/Platform/Apple/tools/ACME/src/flow.h new file mode 100644 index 00000000..7389818f --- /dev/null +++ b/Platform/Apple/tools/ACME/src/flow.h @@ -0,0 +1,19 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Flow control stuff (loops, conditional assembly etc.) +#ifndef flow_H +#define flow_H + +#include +#include "config.h" + + +// Prototypes +extern void Flow_init(void); +extern void Parse_and_close_file(FILE* fd, const char* filename); + + +#endif diff --git a/Platform/Apple/tools/ACME/src/global.c b/Platform/Apple/tools/ACME/src/global.c new file mode 100644 index 00000000..c51b3dd5 --- /dev/null +++ b/Platform/Apple/tools/ACME/src/global.c @@ -0,0 +1,381 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Global stuff - things that are needed by several modules + +#include +#include "platform.h" // done first in case "inline" is redefined +#include "acme.h" +#include "cpu.h" +#include "dynabuf.h" +#include "global.h" +#include "input.h" +#include "label.h" +#include "macro.h" +#include "output.h" +#include "section.h" +#include "tree.h" + + +// Constants + +const char s_cbm[] = "cbm"; +// Exception messages during assembly +const char exception_cannot_open_input_file[] = "Cannot open input file."; +const char exception_missing_string[] = "No string given."; +const char exception_no_left_brace[] = "Missing '{'."; +const char exception_no_memory_left[] = "Out of memory."; +const char exception_no_right_brace[]= "Found end-of-file instead of '}'."; +//const char exception_not_yet[] = "Sorry, feature not yet implemented."; +const char exception_syntax[] = "Syntax error."; +const char exception_number_out_of_range[] = "Number out of range."; +// default value for number of errors before exiting +#define MAXERRORS 10 + +// Flag table: +// This table contains flags for all the 256 possible byte values. The +// assembler reads the table whenever it needs to know whether a byte is +// allowed to be in a label name, for example. +// Bits Meaning when set +// 7....... Byte allowed to start keyword +// .6...... Byte allowed in keyword +// ..5..... Byte is upper case, can be lowercased by OR-ing this bit(!) +// ...4.... special character for input syntax: 0x00 TAB LF CR SPC : ; } +// ....3... preceding sequence of '-' characters is anonymous backward +// label. Currently only set for ')', ',' and CHAR_EOS. +// .....210 unused +const char Byte_flags[256] = { +/*$00*/ 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// control characters + 0x00, 0x10, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/*$20*/ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// " !"#$%&'" + 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,// "()*+,-./" + 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,// "01234567" + 0x40, 0x40, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,// "89:;<=>?" +/*$40*/ 0x00, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,// "@ABCDEFG" + 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,// "HIJKLMNO" + 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,// "PQRSTUVW" + 0xe0, 0xe0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xc0,// "XYZ[\]^_" +/*$60*/ 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,// "`abcdefg" + 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,// "hijklmno" + 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,// "pqrstuvw" + 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x10, 0x00, 0x00,// "yxz{|}~" BACKSPACE +/*$80*/ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,// umlauts etc. ... + 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, + 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, + 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/*$a0*/ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, + 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, + 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, + 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/*$c0*/ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, + 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, + 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, + 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +/*$e0*/ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, + 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, + 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, + 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, +}; + + +// Variables + +node_t* pseudo_opcode_tree = NULL; // tree to hold pseudo opcodes +int pass_flags; // Pass flags and its bitfields (FIXME - remove?) +int pass_count; // number of current pass (starts 0) +char GotByte; // Last byte read (processed) +int Process_verbosity = 0; // Level of additional output +// Global counters +int pass_undefined_count; // "NeedValue" type errors +int pass_real_errors; // Errors yet +value_t pc_inc; // Increase PC by this amount after statement +value_t segment_start; // Start of current segment +value_t segment_max; // Highest address segment may use +void* autofree_list_pass = NULL; // linked list, holds malloc blocks +signed long max_errors = MAXERRORS;// errors before giving up + + +// Functions + + +// Memory allocation stuff + +// Allocate memory and die if not available +void* safe_malloc(size_t size) { + void* block; + + if((block = malloc(size)) == NULL) + Throw_serious_error(exception_no_memory_left); + return(block); +} + +// Allocate memory which gets auto-freed at end of pass +void* autofree_malloc(size_t size, void** list) { + void** block; + + block = malloc(size + sizeof(void*)); + if(block == NULL) + Throw_serious_error(exception_no_memory_left); + *block = *list;// make block point to current list + *list = block;// make list point to new block + return(block + 1); +} + +// Free all linked memory blocks (called at end of pass) +void autofree_free(void* *head) { + void **p1, + **p2; + + p1 = *head;// get pointer to list's first item + *head = NULL;// make start point to NULL + // free blocks until no more + while((p2 = p1)) { + p1 = *p2; + free(p2); + } +} + + +// Parser stuff + +// Parse pseudo opcodes. Has to be re-entrant. +static inline void parse_pseudo_opcode(void) {// Now GotByte = "!" + void* node_body; + enum eos_t (*fn)(void); + enum eos_t then = SKIP_REMAINDER; // prepare for errors + + GetByte();// read next byte + // on missing keyword, return (complaining will have been done) + if(Input_read_and_lower_keyword()) { + // search for tree item + if((Tree_easy_scan(pseudo_opcode_tree, &node_body, GlobalDynaBuf)) + && node_body) { + fn = (enum eos_t (*)(void)) node_body; + SKIPSPACE(); + // call function + then = fn(); + } else + Throw_error("Unknown pseudo opcode."); + } + if(then == SKIP_REMAINDER) + Input_skip_remainder(); + else if(then == ENSURE_EOS) + Input_ensure_EOS(); + // the other two possibilities (PARSE_REMAINDER and AT_EOS_ANYWAY) + // will lead to the remainder of the line being parsed by the mainloop. +} + +// Check and return whether first label of statement. Complain if not. +static bool first_label_of_statement(int *statement_flags) { + if((*statement_flags) & SF_IMPLIED_LABEL) { + Throw_error(exception_syntax); + Input_skip_remainder(); + return(FALSE); + } + (*statement_flags) |= SF_IMPLIED_LABEL; // now there has been one + return(TRUE); +} + +// Parse global label definition or assembler mnemonic +static void parse_mnemo_or_global_label_def(int *statement_flags) { + // It is only a label if it isn't a mnemonic + if((CPU_now->keyword_is_mnemonic(Input_read_keyword()) == FALSE) + && first_label_of_statement(statement_flags)) { + // Now GotByte = illegal char + // 04 Jun 2005 - this fix should help to + // explain "strange" error messages. + if((*GLOBALDYNABUF_CURRENT == ' ') + && (pass_flags & PASS_ISFIRST)) + Throw_warning("Label name starts with a shift-space character."); + Label_parse_definition(ZONE_GLOBAL, *statement_flags); + } +} + +// Parse local label definition +static void parse_local_label_def(int *statement_flags) { + if(!first_label_of_statement(statement_flags)) + return; + GetByte();// start after '.' + if(Input_read_keyword()) + Label_parse_definition(Section_now->zone, *statement_flags); +} + +// Parse anonymous backward label definition. Called with GotByte == '-' +static void parse_backward_anon_def(int *statement_flags) { + if(!first_label_of_statement(statement_flags)) + return; + DYNABUF_CLEAR(GlobalDynaBuf); + do + DYNABUF_APPEND(GlobalDynaBuf, '-'); + while(GetByte() == '-'); + DynaBuf_append(GlobalDynaBuf, '\0'); + Label_implicit_definition(Section_now->zone, *statement_flags, 0, TRUE); +} + +// Parse anonymous forward label definition. Called with GotByte == ? +static void parse_forward_anon_def(int *statement_flags) { + label_t* counter_label; + + if(!first_label_of_statement(statement_flags)) + return; + DYNABUF_CLEAR(GlobalDynaBuf); + DynaBuf_append(GlobalDynaBuf, '+'); + while(GotByte == '+') { + DYNABUF_APPEND(GlobalDynaBuf, '+'); + GetByte(); + } + counter_label = Label_fix_forward_name(); + counter_label->value++; + DynaBuf_append(GlobalDynaBuf, '\0'); + Label_implicit_definition(Section_now->zone, *statement_flags, 0, TRUE); +} + +// Parse block, beginning with next byte. +// End reason (either CHAR_EOB or CHAR_EOF) can be found in GotByte afterwards +// Has to be re-entrant. +void Parse_until_eob_or_eof(void) { + int statement_flags; + +// // start with next byte, don't care about spaces +// NEXTANDSKIPSPACE(); + // start with next byte + GetByte(); + // loop until end of block or end of file + while((GotByte != CHAR_EOB) && (GotByte != CHAR_EOF)) { + // process one statement + statement_flags = 0;// no "label = pc" definition yet + // Parse until end of statement. Only loops if statement + // contains "label = pc" definition and something else; or + // if "!ifdef" is true. + do { + switch(GotByte) { + + case CHAR_EOS: // end of statement + // Ignore now, act later + // (stops from being "default") + break; + + case ' ': // space + statement_flags |= SF_FOUND_BLANK; + /*FALLTHROUGH*/ + + case CHAR_SOL: // start of line + GetByte();// skip + break; + + case '-': + parse_backward_anon_def(&statement_flags); + break; + + case '+': + GetByte(); + if((GotByte == '.') + || (BYTEFLAGS(GotByte) & CONTS_KEYWORD)) + Macro_parse_call(); + else + parse_forward_anon_def(&statement_flags); + break; + + case '!': + parse_pseudo_opcode(); + break; + + case '*': + CPU_set_pc(); + break; + + case '.': + parse_local_label_def(&statement_flags); + break; + + default: + if(BYTEFLAGS(GotByte) & STARTS_KEYWORD) { + parse_mnemo_or_global_label_def(&statement_flags); + } else { + Throw_error(exception_syntax); + Input_skip_remainder(); + } + } + } while(GotByte != CHAR_EOS); // until end-of-statement + // change program counter and memory pointer + CPU_pc += pc_inc; + Mem_current_pc += pc_inc; + // check for new max address + if(Mem_current_pc > Mem_highest_pc) + Mem_highest_pc = Mem_current_pc; + pc_inc = 0; + // go on with next byte + GetByte();//NEXTANDSKIPSPACE(); + } +} + +// Skip space. If GotByte is CHAR_SOB ('{'), parse block and return TRUE. +// Otherwise (if there is no block), return FALSE. +// Don't forget to call EnsureEOL() afterwards. +bool Parse_optional_block(void) { + SKIPSPACE(); + if(GotByte != CHAR_SOB) + return(FALSE); + Parse_until_eob_or_eof(); + if(GotByte != CHAR_EOB) + Throw_serious_error(exception_no_right_brace); + GetByte(); + return(TRUE); +} + + +// Error handling + +// This routine will do the actual output for warnings, errors and serious +// errors. It shows the given message string, as well as the current +// context: file name, line number, source type and source title. +static void throw_message(const char* message, const char* type) { + fprintf(stderr, "%s - File %s, line %d (%s %s): %s\n", type, + Input_now->original_filename, Input_now->line_number, + Section_now->type, Section_now->title, + message + ); +} + +// Output a warning. +// This means the produced code looks as expected. But there has been a +// situation that should be reported to the user, for example ACME may have +// assembled a 16-bit parameter with an 8-bit value. +void Throw_warning(const char* message) { + PLATFORM_WARNING(message); + throw_message(message, "Warning"); +} + +// Output an error. +// This means something went wrong in a way that implies that the output +// almost for sure won't look like expected, for example when there was a +// syntax error. The assembler will try to go on with the assembly though, so +// the user gets to know about more than one of his typos at a time. +void Throw_error(const char* message) { + PLATFORM_ERROR(message); + throw_message(message, "Error"); + pass_real_errors++; + if(pass_real_errors >= max_errors) + exit(ACME_finalize(EXIT_FAILURE)); +} + +// Output a serious error, stopping assembly. +// Serious errors are those that make it impossible to go on with the +// assembly. Example: "!fill" without a parameter - the program counter cannot +// be set correctly in this case, so proceeding would be of no use at all. +void Throw_serious_error(const char* message) { + PLATFORM_SERIOUS(message); + throw_message(message, "Serious error"); + exit(ACME_finalize(EXIT_FAILURE)); +} + +// Handle bugs +void Bug_found(const char* message, int code) { + Throw_warning("Bug in ACME, code follows"); + fprintf(stderr, "(0x%x:)", code); + Throw_serious_error(message); +} diff --git a/Platform/Apple/tools/ACME/src/global.h b/Platform/Apple/tools/ACME/src/global.h new file mode 100644 index 00000000..3391c44b --- /dev/null +++ b/Platform/Apple/tools/ACME/src/global.h @@ -0,0 +1,88 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Global stuff - things that are needed by several modules +#ifndef global_H +#define global_H + +#include +#include +#include "config.h" + + +// Constants + +#define SF_FOUND_BLANK (1u) // statement had space or tab +#define SF_IMPLIED_LABEL (2u) // statement had implied label def +extern const char s_cbm[]; +// Error messages during assembly +extern const char exception_cannot_open_input_file[]; +extern const char exception_missing_string[]; +extern const char exception_no_left_brace[]; +extern const char exception_no_memory_left[]; +extern const char exception_no_right_brace[]; +//extern const char exception_not_yet[]; +extern const char exception_syntax[]; +extern const char exception_number_out_of_range[]; +// Byte flags table +extern const char Byte_flags[]; +#define BYTEFLAGS(c) (Byte_flags[(unsigned char) c]) +#define STARTS_KEYWORD (1u << 7) // Byte is allowed to start a keyword +#define CONTS_KEYWORD (1u << 6) // Byte is allowed in a keyword +#define BYTEIS_UPCASE (1u << 5) // Byte is upper case and can be + // converted to lower case by OR-ing this bit(!) +#define BYTEIS_SYNTAX (1u << 4) // special character for input syntax +#define FOLLOWS_ANON (1u << 3) // preceding '-' are backward label +// bits 2, 1 and 0 are unused + + +// Variables + +extern node_t* pseudo_opcode_tree;// tree to hold pseudo opcodes +// structures +enum eos_t { + SKIP_REMAINDER, // skip remainder of line - (after errors) + ENSURE_EOS, // make sure there's nothing left in statement + PARSE_REMAINDER, // parse what's left + AT_EOS_ANYWAY, // actually, same as PARSE_REMAINDER +}; +extern int pass_flags; // Pass flags and its bitfields +// Do stuff that only has to be done once (only in first pass) +#define PASS_ISFIRST (1u << 0) +// Show errors when values are undefined (only in additional pass) +#define PASS_ISERROR (1u << 1) +extern int pass_count; +extern int Process_verbosity;// Level of additional output +extern char GotByte;// Last byte read (processed) +// Global counters +extern int pass_undefined_count;// "NeedValue" type errors in current pass +extern int pass_real_errors; // Errors yet +extern value_t pc_inc; // Increase PC by this amount after statement +extern value_t segment_start; // Start of current segment +extern value_t segment_max; // Highest address segment may use +extern signed long max_errors; // errors before giving up + +extern void* autofree_list_pass; // linked list, holds malloc blocks + +// Macros for skipping a single space character +#define SKIPSPACE() do {if(GotByte == ' ') GetByte();} while(0) +#define NEXTANDSKIPSPACE() do {if(GetByte() == ' ') GetByte();} while(0) + + +// Prototypes +extern inline void* safe_malloc(size_t); +extern void* autofree_malloc(size_t, void**); +// Macro for claiming auto-freed memory blocks +#define ALLOC_PASS(Size) autofree_malloc(Size, &autofree_list_pass) +extern void autofree_free(void**); +extern void Parse_until_eob_or_eof(void); +extern int Parse_optional_block(void); +extern void Throw_warning(const char*); +extern void Throw_error(const char*); +extern void Throw_serious_error(const char*); +extern void Bug_found(const char*, int); + + +#endif diff --git a/Platform/Apple/tools/ACME/src/input.c b/Platform/Apple/tools/ACME/src/input.c new file mode 100644 index 00000000..8cc4671b --- /dev/null +++ b/Platform/Apple/tools/ACME/src/input.c @@ -0,0 +1,495 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Input stuff + +#include "dynabuf.h" +#include "global.h" +#include "input.h" +#include "platform.h" +#include "section.h" +#include "tree.h" + + +// Constants +const char FILE_READBINARY[] = "rb"; +#define CHAR_TAB (9) // Tab character +#define CHAR_LF (10) // line feed (in file) + // (10) // start of line (in high-level format) +#define CHAR_CR (13) // carriage return (in file) + // (13) // end of file (in high-level format) +#define CHAR_STATEMENT_DELIMITER ':' +#define CHAR_COMMENT_SEPARATOR ';' +// If the characters above are changed, don't forget to adjust ByteFlags[]! + +// fake input structure (for error msgs before any real input is established) +static input_t outermost = { + "", // file name + 0, // line number + FALSE, // Faked file access, so no RAM read + INPUTSTATE_EOF, // state of input + { + NULL // RAM read pointer or file handle + } +}; + + +// Variables +input_t* Input_now = &outermost; // current input structure + + +// End of source file ("!endoffile" or "!eof") +static enum eos_t PO_eof(void) { + // Well, it doesn't end right here and now, but at end-of-line! :-) + Input_ensure_EOS(); + Input_now->state = INPUTSTATE_EOF; + return(AT_EOS_ANYWAY); +} + +// predefined stuff +static node_t pseudo_opcodes[] = { + PREDEFNODE("eof", PO_eof), + PREDEFLAST("endoffile", PO_eof), + // ^^^^ this marks the last element +}; + + +// Functions + +// Init (add to tree) +void Input_init(void) { + Tree_add_table(&pseudo_opcode_tree, pseudo_opcodes); +} + +// Let current input point to start of file +void Input_new_file(const char* filename, FILE* fd) { + Input_now->original_filename = filename; + Input_now->line_number = 1; + Input_now->source_is_ram = FALSE; + Input_now->state = INPUTSTATE_NORMAL; + Input_now->src.fd = fd; +} + +// Deliver source code from current file (!) in shortened high-level format +static char get_processed_from_file(void) { + int from_file; + + do { + switch(Input_now->state) { + + case INPUTSTATE_NORMAL: + // fetch a fresh byte from the current source file + from_file = getc(Input_now->src.fd); + // now process it + /*FALLTHROUGH*/ + + case INPUTSTATE_AGAIN: + // Process the latest byte again. Of course, this only + // makes sense if the loop has executed at least once, + // otherwise the contents of from_file are undefined. + // If the source is changed so there is a possibility + // to enter INPUTSTATE_AGAIN mode without first having + // defined "from_file", trouble may arise... + Input_now->state = INPUTSTATE_NORMAL; + // EOF must be checked first because it cannot be used + // as an index into Byte_flags[] + if(from_file == EOF) { + // remember to send an end-of-file + Input_now->state = INPUTSTATE_EOF; + return(CHAR_EOS);// end of statement + } + // check whether character is special one + // if not, everything's cool and froody, so return it + if((BYTEFLAGS(from_file) & BYTEIS_SYNTAX) == 0) + return((char) from_file); + // check special characters ("0x00 TAB LF CR SPC :;}") + switch(from_file) { + + case CHAR_TAB:// TAB character + case ' ': + // remember to skip all following blanks + Input_now->state = INPUTSTATE_SKIPBLANKS; + return(' '); + + case CHAR_LF:// LF character + // remember to send a start-of-line + Input_now->state = INPUTSTATE_LF; + return(CHAR_EOS);// end of statement + + case CHAR_CR:// CR character + // remember to check CRLF + send start-of-line + Input_now->state = INPUTSTATE_CR; + return(CHAR_EOS);// end of statement + + case CHAR_EOB: + // remember to send an end-of-block + Input_now->state = INPUTSTATE_EOB; + return(CHAR_EOS);// end of statement + + case CHAR_STATEMENT_DELIMITER: + // just deliver an EOS instead + return(CHAR_EOS);// end of statement + + case CHAR_COMMENT_SEPARATOR: + // remember to skip remainder of line + Input_now->state = INPUTSTATE_COMMENT; + return(CHAR_EOS);// end of statement + + default: + // complain if byte is 0 + Throw_error("Source file contains illegal character."); + return((char) from_file); + } + + case INPUTSTATE_SKIPBLANKS: + // read until non-blank, then deliver that + do + from_file = getc(Input_now->src.fd); + while((from_file == CHAR_TAB) || (from_file == ' ')); + // re-process last byte + Input_now->state = INPUTSTATE_AGAIN; + break; + + case INPUTSTATE_LF: + // return start-of-line, then continue in normal mode + Input_now->state = INPUTSTATE_NORMAL; + return(CHAR_SOL);// new line + + case INPUTSTATE_CR: + // return start-of-line, remember to check for LF + Input_now->state = INPUTSTATE_SKIPLF; + return(CHAR_SOL);// new line + + case INPUTSTATE_SKIPLF: + from_file = getc(Input_now->src.fd); + // if LF, ignore it and fetch another byte + // otherwise, process current byte + if(from_file == CHAR_LF) + Input_now->state = INPUTSTATE_NORMAL; + else + Input_now->state = INPUTSTATE_AGAIN; + break; + + case INPUTSTATE_COMMENT: + // read until end-of-line or end-of-file + do + from_file = getc(Input_now->src.fd); + while((from_file != EOF) && (from_file != CHAR_CR) && (from_file != CHAR_LF)); + // re-process last byte + Input_now->state = INPUTSTATE_AGAIN; + break; + + case INPUTSTATE_EOB: + // deliver EOB + Input_now->state = INPUTSTATE_NORMAL; + return(CHAR_EOB);// end of block + + case INPUTSTATE_EOF: + // deliver EOF + Input_now->state = INPUTSTATE_NORMAL; + return(CHAR_EOF);// end of file + + default: + Bug_found("StrangeInputMode", Input_now->state); + } + } while(TRUE); +} + +// This function delivers the next byte from the currently active byte source +// in shortened high-level format. +// When inside quotes, use GetQuotedByte() instead! +char GetByte(void) { +// do { + // If byte source is RAM, then no conversions are + // necessary, because in RAM the source already has + // high-level format + // Otherwise, the source is a file. This means we will call + // GetFormatted() which will do a shit load of conversions. + if(Input_now->source_is_ram) + GotByte = *(Input_now->src.ram_ptr++); + else + GotByte = get_processed_from_file(); +// // if start-of-line was read, increment line counter and repeat +// if(GotByte != CHAR_SOL) +// return(GotByte); +// Input_now->line_number++; +// } while(TRUE); + if(GotByte == CHAR_SOL) + Input_now->line_number++; + return(GotByte); +} + +// This function delivers the next byte from the currently active byte source +// in un-shortened high-level format. +// This function complains if CHAR_EOS (end of statement) is read. +char GetQuotedByte(void) { + int from_file; // must be an int to catch EOF + + // If byte source is RAM, then no conversion is necessary, + // because in RAM the source already has high-level format + if(Input_now->source_is_ram) + GotByte = *(Input_now->src.ram_ptr++); + // Otherwise, the source is a file. + else { + // fetch a fresh byte from the current source file + from_file = getc(Input_now->src.fd); + switch(from_file) { + + case EOF: + // remember to send an end-of-file + Input_now->state = INPUTSTATE_EOF; + GotByte = CHAR_EOS; // end of statement + break; + + case CHAR_LF:// LF character + // remember to send a start-of-line + Input_now->state = INPUTSTATE_LF; + GotByte = CHAR_EOS; // end of statement + break; + + case CHAR_CR:// CR character + // remember to check for CRLF + send a start-of-line + Input_now->state = INPUTSTATE_CR; + GotByte = CHAR_EOS; // end of statement + break; + + default: + GotByte = from_file; + } + + } + // now check for end of statement + if(GotByte == CHAR_EOS) + Throw_error("Quotes still open at end of line."); + return(GotByte); +} + +// Skip remainder of statement, for example on error +void Input_skip_remainder(void) { + while(GotByte) + GetByte();// Read characters until end-of-statement +} + +// Ensure that the remainder of the current statement is empty, for example +// after mnemonics using implied addressing. +void Input_ensure_EOS(void) {// Now GotByte = first char to test + SKIPSPACE(); + if(GotByte) { + Throw_error("Garbage data at end of statement."); + Input_skip_remainder(); + } +} + +// Skip or store block (starting with next byte, so call directly after +// reading opening brace). +// If "Store" is TRUE, the block is read into GlobalDynaBuf, then a copy +// is made and a pointer to that is returned. +// If "Store" is FALSE, NULL is returned. +// After calling this function, GotByte holds '}'. Unless EOF was found first, +// but then a serious error would have been thrown. +char* Input_skip_or_store_block(bool store) { + char byte; + int depth = 1; // to find matching block end + + // prepare global dynamic buffer + DYNABUF_CLEAR(GlobalDynaBuf); + do { + byte = GetByte(); + // if wanted, store + if(store) + DYNABUF_APPEND(GlobalDynaBuf, byte); + // now check for some special characters + switch(byte) { + + case CHAR_EOF: // End-of-file in block? Sorry, no way. + Throw_serious_error(exception_no_right_brace); + + case '"': // Quotes? Okay, read quoted stuff. + case '\'': + do { + GetQuotedByte(); + // if wanted, store + if(store) + DYNABUF_APPEND(GlobalDynaBuf, GotByte); + } while((GotByte != CHAR_EOS) && (GotByte != byte)); + break; + + case CHAR_SOB: + depth++; + break; + + case CHAR_EOB: + depth--; + break; + + } + } while(depth); + // in case of skip, return now + if(!store) + return(NULL); + // otherwise, prepare to return copy of block + // add EOF, just to make sure block is never read too far + DynaBuf_append(GlobalDynaBuf, CHAR_EOS); + DynaBuf_append(GlobalDynaBuf, CHAR_EOF); + // return pointer to copy + return(DynaBuf_get_copy(GlobalDynaBuf)); +} + +// Read bytes and add to GlobalDynaBuf until the given terminator (or CHAR_EOS) +// is found. Act upon single and double quotes by entering (and leaving) quote +// mode as needed (So the terminator does not terminate when inside quotes). +void Input_until_terminator(char terminator) { + char byte = GotByte; + + do { + // Terminator? Exit. EndOfStatement? Exit. + if((byte == terminator) || (byte == CHAR_EOS)) + return; + // otherwise, append to GlobalDynaBuf and check for quotes + DYNABUF_APPEND(GlobalDynaBuf, byte); + if((byte == '"') || (byte == '\'')) { + do { + // Okay, read quoted stuff. + GetQuotedByte();// throws error on EOS + DYNABUF_APPEND(GlobalDynaBuf, GotByte); + } while((GotByte != CHAR_EOS) && (GotByte != byte)); + // on error, exit now, before calling GetByte() + if(GotByte != byte) + return; + } + byte = GetByte(); + } while(TRUE); +} + +// Append to GlobalDynaBuf while characters are legal for keywords. +// Throws "missing string" error if none. +// Returns number of characters added. +int Input_append_keyword_to_global_dynabuf(void) { + int length = 0; + + // add characters to buffer until an illegal one comes along + while(BYTEFLAGS(GotByte) & CONTS_KEYWORD) { + DYNABUF_APPEND(GlobalDynaBuf, GotByte); + length++; + GetByte(); + } + if(length == 0) + Throw_error(exception_missing_string); + return(length); +} + +// Check whether GotByte is a dot. +// If not, store global zone value. +// If yes, store current zone value and read next byte. +// Then jump to Input_read_keyword(), which returns length of keyword. +int Input_read_zone_and_keyword(zone_t *zone) { + SKIPSPACE(); + if(GotByte == '.') { + GetByte(); + *zone = Section_now->zone; + } else + *zone = ZONE_GLOBAL; + return(Input_read_keyword()); +} + +// Clear dynamic buffer, then append to it until an illegal (for a keyword) +// character is read. Zero-terminate the string. Return its length (without +// terminator). +// Zero lengths will produce a "missing string" error. +int Input_read_keyword(void) { + int length; + + DYNABUF_CLEAR(GlobalDynaBuf); + length = Input_append_keyword_to_global_dynabuf(); + // add terminator to buffer (increments buffer's length counter) + DynaBuf_append(GlobalDynaBuf, '\0'); + return(length); +} + +// Clear dynamic buffer, then append to it until an illegal (for a keyword) +// character is read. Zero-terminate the string, then convert to lower case. +// Return its length (without terminator). +// Zero lengths will produce a "missing string" error. +int Input_read_and_lower_keyword(void) { + int length; + + DYNABUF_CLEAR(GlobalDynaBuf); + length = Input_append_keyword_to_global_dynabuf(); + // add terminator to buffer (increments buffer's length counter) + DynaBuf_append(GlobalDynaBuf, '\0'); + DynaBuf_to_lower(GlobalDynaBuf, GlobalDynaBuf);// convert to lower case + return(length); +} + +// Try to read a file name. If "allow_library" is TRUE, library access by using +// <...> quoting is possible as well. The file name given in the assembler +// source code is converted from UNIX style to platform style. +// Returns: A pointer to the resulting file name string (NULL on error). +// Errors are handled and reported, but caller should call +// Input_skip_remainder() then. +// Note: The file name is malloc()'d and therefore should be free()'d when no +// longer used. +char* Input_read_filename(bool allow_library) { + char *lib_prefix, + end_quote; + + DYNABUF_CLEAR(GlobalDynaBuf); + SKIPSPACE(); + // check for library access + if(GotByte == '<') { + // if library access forbidden, complain + if(allow_library == FALSE) { + Throw_error("Writing to library not supported."); + return(NULL); + } + // read platform's lib prefix + lib_prefix = PLATFORM_LIBPREFIX; +#ifndef NO_NEED_FOR_ENV_VAR + // if lib prefix not set, complain + if(lib_prefix == NULL) { + Throw_error("\"ACME\" environment variable not found."); + return(NULL); + } +#endif + // copy lib path and set quoting char + DynaBuf_add_string(GlobalDynaBuf, lib_prefix); + end_quote = '>'; + } else { + if(GotByte == '"') + end_quote = '"'; + else { + Throw_error("File name quotes not found (\"\" or <>)."); + return(NULL); + } + } + // read first character, complain if closing quote + if(GetQuotedByte() == end_quote) { + Throw_error("No file name given."); + return(NULL); + } + // read characters until closing quote (or EOS) is reached + // append platform-converted characters to current string + while((GotByte != CHAR_EOS) && (GotByte != end_quote)) { + DYNABUF_APPEND(GlobalDynaBuf, PLATFORM_CONVERTPATHCHAR(GotByte)); + GetQuotedByte(); + } + // on error, return NULL + if(GotByte == CHAR_EOS) + return(NULL); + GetByte(); // fetch next to forget closing quote + // terminate string and return copy + DynaBuf_append(GlobalDynaBuf, '\0'); // add terminator + return(DynaBuf_get_copy(GlobalDynaBuf)); +} + +// Try to read a comma, skipping spaces before and after. Return TRUE if comma +// found, otherwise FALSE. +bool Input_accept_comma(void) { + SKIPSPACE(); + if(GotByte != ',') + return(FALSE); + NEXTANDSKIPSPACE(); + return(TRUE); +} diff --git a/Platform/Apple/tools/ACME/src/input.h b/Platform/Apple/tools/ACME/src/input.h new file mode 100644 index 00000000..92c6ea66 --- /dev/null +++ b/Platform/Apple/tools/ACME/src/input.h @@ -0,0 +1,72 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Input stuff +#ifndef input_H +#define input_H + +#include + + +// type definitions + +// values for input_t component "Src.State" +enum inputstate_t { + INPUTSTATE_NORMAL, // everything's fine + INPUTSTATE_AGAIN, // re-process last byte + INPUTSTATE_SKIPBLANKS, // shrink multiple spaces + INPUTSTATE_LF, // send start-of-line after end-of-statement + INPUTSTATE_CR, // same, but also remember to skip LF + INPUTSTATE_SKIPLF, // skip LF if that's next + INPUTSTATE_COMMENT, // skip characters until newline or EOF + INPUTSTATE_EOB, // send end-of-block after end-of-statement + INPUTSTATE_EOF, // send end-of-file after end-of-statement +}; +typedef struct { + const char* original_filename;// during RAM reads, too + int line_number; // in file (on RAM reads, too) + bool source_is_ram; // TRUE if RAM, FALSE if file + enum inputstate_t state; // state of input + union { + FILE* fd; // file descriptor + char* ram_ptr; // RAM read ptr (loop or macro block) + } src; +} input_t; + + +// Constants +extern const char FILE_READBINARY[]; +// Special characters +// The program *heavily* relies on CHAR_EOS (end of statement) being 0x00! +#define CHAR_EOS (0) // end of statement (in high-level format) +#define CHAR_SOB '{' // start of block +#define CHAR_EOB '}' // end of block +#define CHAR_SOL (10) // start of line (in high-level format) +#define CHAR_EOF (13) // end of file (in high-level format) +// If the characters above are changed, don't forget to adjust Byte_flags[]! + + +// Variables +extern input_t* Input_now; // current input structure + + +// Prototypes +extern void Input_init(void); +extern void Input_new_file(const char* filename, FILE* fd); +extern char GetByte(void); +extern char GetQuotedByte(void); +extern void Input_skip_remainder(void); +extern void Input_ensure_EOS(void); +extern char* Input_skip_or_store_block(bool store); +extern void Input_until_terminator(char terminator); +extern int Input_append_keyword_to_global_dynabuf(void);// returns length +extern int Input_read_zone_and_keyword(zone_t*); +extern int Input_read_keyword(void);// returns length +extern int Input_read_and_lower_keyword(void);// returns length +extern char* Input_read_filename(bool library_allowed); +extern bool Input_accept_comma(void);// skips spaces before and after + + +#endif diff --git a/Platform/Apple/tools/ACME/src/label.c b/Platform/Apple/tools/ACME/src/label.c new file mode 100644 index 00000000..327a50aa --- /dev/null +++ b/Platform/Apple/tools/ACME/src/label.c @@ -0,0 +1,251 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Label stuff + +#include +#include "acme.h" +#include "alu.h" +#include "cpu.h" +#include "dynabuf.h" +#include "global.h" +#include "input.h" +#include "label.h" +#include "mnemo.h" +#include "platform.h" +#include "section.h" +#include "tree.h" + + +// Variables +node_ra_t* Label_forest[256];// ... (because of 8-bit hash) + + +// Dump label value and flags to dump file +static void dump_one_label(node_ra_t* node, FILE* fd) { + label_t* label = node->body; + + // output name + fprintf(fd, "%s", node->id_string); + switch(label->flags & MVALUE_FORCEBITS) { + + case MVALUE_FORCE16: + fprintf(fd, "+2="); + break; + + case MVALUE_FORCE16 | MVALUE_FORCE24: + /*FALLTHROUGH*/ + + case MVALUE_FORCE24: + fprintf(fd, "+3="); + break; + + default: + fprintf(fd, " ="); + + } + if(label->flags & MVALUE_DEFINED) + fprintf(fd, "$%x", (unsigned int) label->value); + else + fprintf(fd, " ?"); + if(label->flags & MVALUE_UNSURE) + fprintf(fd, "; ?"); + if(label->usage == 0) + fprintf(fd, "; unused"); + fprintf(fd, "\n"); +} + +// Search for label. Create if nonexistant. If created, give it flags "Flags". +// The label name must be held in GlobalDynaBuf. +label_t* Label_find(zone_t zone, int flags) { + node_ra_t* node; + label_t* label; + bool node_created; + int force_bits = flags & MVALUE_FORCEBITS; + + node_created = Tree_hard_scan(&node, Label_forest, zone, TRUE); + // if node has just been created, create label as well + if(node_created) { + // Create new label structure + label = safe_malloc(sizeof(label_t)); + // Finish empty label item + label->flags = flags; + label->value = 0; + label->usage = 0; // usage count + label->pass = pass_count; + node->body = label; + } else + label = node->body; + // make sure the force bits don't clash + if((node_created == FALSE) && force_bits) + if((label->flags & MVALUE_FORCEBITS) != force_bits) + Throw_error("Too late for postfix."); + return(label); +} + +// Assign value to label. The routine acts upon the label's flag bits and +// produces an error if needed. +void Label_set_value(label_t* label, result_t* new, bool change) { + int flags = label->flags; + + // value stuff + if((flags & MVALUE_DEFINED) && (change == FALSE)) { + // Label is already defined, so compare new and old values + if(new->value != label->value) + Throw_error("Label already defined."); + } else + // Label is not defined yet OR redefinitions are allowed + label->value = new->value; + // flags stuff + // Ensure that "unsure" labels without "isByte" state don't get that + if((flags & (MVALUE_UNSURE | MVALUE_ISBYTE)) == MVALUE_UNSURE) + new->flags &= ~MVALUE_ISBYTE; + if(change) + flags = (flags & MVALUE_UNSURE) | new->flags; + else { + if((flags & MVALUE_FORCEBITS) == 0) + if((flags & (MVALUE_UNSURE | MVALUE_DEFINED)) == 0) + flags |= new->flags & MVALUE_FORCEBITS; + flags |= new->flags & ~MVALUE_FORCEBITS; + } + label->flags = flags; +} + +// (Re)set label +static enum eos_t PO_set(void) {// Now GotByte = illegal char + result_t result; + int force_bit; + label_t* label; + zone_t zone; + + if(Input_read_zone_and_keyword(&zone) == 0) // skips spaces before + // Now GotByte = illegal char + return(SKIP_REMAINDER); + force_bit = Mnemo_get_force_bit();// skips spaces after + label = Label_find(zone, force_bit); + if(GotByte != '=') { + Throw_error(exception_syntax); + return(SKIP_REMAINDER); + } + // label = parsed value + GetByte();// proceed with next char + ALU_parse_expr_medium(&result); + // clear label's force bits and set new ones + label->flags &= ~(MVALUE_FORCEBITS | MVALUE_ISBYTE); + if(force_bit) { + label->flags |= force_bit; + result.flags &= ~(MVALUE_FORCEBITS | MVALUE_ISBYTE); + } + Label_set_value(label, &result, TRUE); + return(ENSURE_EOS); +} + +// Select dump file +static enum eos_t PO_sl(void) { + // only process this pseudo opcode in the first pass + if((pass_flags & PASS_ISFIRST) == 0) + return(SKIP_REMAINDER); + // if label dump file already chosen, complain and exit + if(labeldump_filename) { + Throw_warning("Label dump file already chosen."); + return(SKIP_REMAINDER); + } + // read filename (returns a malloc'd copy) + // if no file name given, exit (complaining will have been done) + if((labeldump_filename = Input_read_filename(FALSE)) == NULL) + return(SKIP_REMAINDER); + // ensure there's no garbage at end of line + return(ENSURE_EOS); +} + +// predefined stuff +static node_t pseudo_opcodes[] = { + PREDEFNODE("set", PO_set), + PREDEFLAST("sl", PO_sl), + // ^^^^ this marks the last element +}; + +// Parse implicit label definition (can be either global or local). +// GlobalDynaBuf holds the label name. +void Label_implicit_definition(zone_t zone, int stat_flags, int force_bit, bool change) { + result_t result; + label_t* label; + + label = Label_find(zone, force_bit); + // implicit label definition (label) + if((stat_flags & SF_FOUND_BLANK) + && (pass_flags & PASS_ISFIRST) + && (1 == 1)) // FIXME - make configurable via CLI switch + Throw_warning("Implicit label definition not in leftmost column."); + CPU_ensure_defined_pc(); + result.value = CPU_pc; + result.flags = MVALUE_DEFINED; + Label_set_value(label, &result, change); +} + +// Parse label definition (can be either global or local). +// GlobalDynaBuf holds the label name. +void Label_parse_definition(zone_t zone, int stat_flags) { + result_t result; + label_t* label; + int force_bit = Mnemo_get_force_bit();// skips spaces after + + if(GotByte == '=') { + // explicit label definition (label = ) + label = Label_find(zone, force_bit); + // label = parsed value + GetByte(); // skip '=' + ALU_parse_expr_medium(&result); + Label_set_value(label, &result, FALSE); + Input_ensure_EOS(); + } else + Label_implicit_definition(zone, stat_flags, force_bit, FALSE); +} + +// Dump global labels into file +void Label_dump_all(FILE* fd) { + Tree_dump_forest(Label_forest, ZONE_GLOBAL, dump_one_label, fd); + PLATFORM_SETFILETYPE_TEXT(labeldump_filename); +} + +// Init (add to tree and clear pointer table) +void Label_init(void) { + node_ra_t** ptr; + int i; + + Tree_add_table(&pseudo_opcode_tree, pseudo_opcodes); + // Cut down all the trees (clear pointer table) + ptr = Label_forest; + // Clear pointertable + for(i = 255; i >= 0; i--) + *ptr++ = NULL; +} + +// Fix name of anonymous forward label (held in DynaBuf, NOT TERMINATED!) so it +// references the *next* anonymous forward label definition. The tricky bit is, +// each name length would need its own counter. But hey, ACME's real quick in +// finding labels, so I'll just abuse the label system to store those counters. +label_t* Label_fix_forward_name(void) { + label_t* counter_label; + unsigned long number; + + // terminate name, find "counter" label and read value + DynaBuf_append(GlobalDynaBuf, '\0'); + counter_label = Label_find(Section_now->zone, 0); + // make sure it gets reset to zero in each new pass + if(counter_label->pass != pass_count) { + counter_label->pass = pass_count; + counter_label->value = 0; + } + number = (unsigned long) counter_label->value; + // now append to the name to make it unique + GlobalDynaBuf->size--; // forget terminator, we want to append + do { + DYNABUF_APPEND(GlobalDynaBuf, "0123456789abcdef"[number & 15]); + number >>= 4; + } while(number); + DynaBuf_append(GlobalDynaBuf, '\0'); + return(counter_label); +} diff --git a/Platform/Apple/tools/ACME/src/label.h b/Platform/Apple/tools/ACME/src/label.h new file mode 100644 index 00000000..2b5db311 --- /dev/null +++ b/Platform/Apple/tools/ACME/src/label.h @@ -0,0 +1,37 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Label stuff +#ifndef label_H +#define label_H + +#include + + +// "label" structure type definition +struct label_t { + value_t value; // Expression value + int flags; // Expression flags + // FIXME - integrate value and flags to result_t struct! + int usage; // usage count + int pass; // set to pass number on creation (for anon counters) +}; + + +// Variables +extern node_ra_t* Label_forest[]; // trees (because of 8-bit hash) + + +// Prototypes +extern void Label_init(void); +extern void Label_set_value(label_t*, result_t*, bool change); +extern void Label_implicit_definition(zone_t zone, int stat_flags, int force_bit, bool change); +extern void Label_parse_definition(zone_t zone, int stat_flags); +extern label_t* Label_find(zone_t, int); +extern void Label_dump_all(FILE* fd); +extern label_t* Label_fix_forward_name(void); + + +#endif diff --git a/Platform/Apple/tools/ACME/src/macro.c b/Platform/Apple/tools/ACME/src/macro.c new file mode 100644 index 00000000..fd1a807f --- /dev/null +++ b/Platform/Apple/tools/ACME/src/macro.c @@ -0,0 +1,346 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Macro stuff + +#include // needs strlen() + memcpy() +#include "platform.h" // done first in case "inline" is redefined +#include "acme.h" +#include "alu.h" +#include "dynabuf.h" +#include "global.h" +#include "input.h" +#include "label.h" +#include "section.h" +#include "tree.h" +#include "macro.h" + + +// Constants +#define MACRONAME_DYNABUF_INITIALSIZE 128 +#define ARG_SEPARATOR ' ' // separates macro title from arg types +#define ARGTYPE_NUM_VAL 'v' +#define ARGTYPE_NUM_REF 'V' +//#define ARGTYPE_STR_VAL 's' +//#define ARGTYPE_STR_REF 'S' +#define REFERENCE_CHAR '~' // prefix for call-by-reference +#define HALF_INITIAL_ARG_TABLE_SIZE 4 +static const char exception_macro_twice[] = "Macro already defined."; + + +// macro struct type definition +struct macro_t { + int def_line_number;// line number of definition for error msgs + char* def_filename; // file name of definition for error msgs + char* original_name; // user-supplied name for error msgs + char* parameter_list; // parameters (whole line) + char* body; // RAM block containing macro body +}; +// there's no need to make this a struct and add a type component: +// when the macro has been found, accessing its parameter_list component +// gives us the possibility to find out which args are call-by-value and +// which ones are call-by-reference. +union macro_arg_t { + result_t result; // value and flags (call by value) + label_t* label; // pointer to label struct (call by reference) +}; + + +// Variables +static dynabuf_t* user_macro_name; // original macro title +static dynabuf_t* internal_name; // plus param type chars +static node_ra_t* macro_forest[256]; // trees (because of 8b hash) +// Dynamic argument table +static union macro_arg_t* arg_table = NULL; +static int argtable_size = HALF_INITIAL_ARG_TABLE_SIZE; + + +// Functions + +// Enlarge the argument table +static void enlarge_arg_table(void) { + argtable_size *= 2; + arg_table = + realloc(arg_table, argtable_size * sizeof(union macro_arg_t)); + if(arg_table == NULL) + Throw_serious_error(exception_no_memory_left); +} + +// Initialisation - allocate dynamic buffer for macro name and create arg table +void Macro_init(void) { + user_macro_name = DynaBuf_create(MACRONAME_DYNABUF_INITIALSIZE); + internal_name = DynaBuf_create(MACRONAME_DYNABUF_INITIALSIZE); + enlarge_arg_table(); +} + +// Read macro zone and title. Title is read to GlobalDynaBuf and then copied +// over to internal_name DynaBuf, where ARG_SEPARATOR is added. +// In user_macro_name DynaBuf, the original name is reconstructed (even with +// '.' prefix) so a copy can be linked to the resulting macro struct. +static zone_t get_zone_and_title(void) { + zone_t macro_zone; + + Input_read_zone_and_keyword(¯o_zone); // skips spaces before + // now GotByte = illegal character after title + // copy macro title to private dynabuf and add separator character + DYNABUF_CLEAR(user_macro_name); + DYNABUF_CLEAR(internal_name); + if(macro_zone != ZONE_GLOBAL) + DynaBuf_append(user_macro_name, '.'); + DynaBuf_add_string(user_macro_name, GLOBALDYNABUF_CURRENT); + DynaBuf_add_string(internal_name, GLOBALDYNABUF_CURRENT); + DynaBuf_append(user_macro_name, '\0'); + DynaBuf_append(internal_name, ARG_SEPARATOR); + SKIPSPACE();// done here once so it's not necessary at two callers + return(macro_zone); +} + +// Check for comma. If there, append to GlobalDynaBuf. +static inline bool pipe_comma(void) { + bool result; + + result = Input_accept_comma(); + if(result) + DYNABUF_APPEND(GlobalDynaBuf, ','); + return(result); +} + +// Return malloc'd copy of string +static char* get_string_copy(const char* original) { + size_t size; + char* copy; + + size = strlen(original) + 1; + copy = safe_malloc(size); + memcpy(copy, original, size); + return(copy); +} + +// This function is called from both macro definition and macro call. +// Terminate macro name and copy from internal_name to GlobalDynaBuf +// (because that's where Tree_hard_scan() looks for the search string). +// Then try to find macro and return whether it was created. +static bool search_for_macro(node_ra_t** result, zone_t zone, bool create) { + DynaBuf_append(internal_name, '\0'); // terminate macro name + // now internal_name = macro_title SPC argument_specifiers NUL + DYNABUF_CLEAR(GlobalDynaBuf); + DynaBuf_add_string(GlobalDynaBuf, internal_name->buffer); + DynaBuf_append(GlobalDynaBuf, '\0'); + return(Tree_hard_scan(result, macro_forest, zone, create)); +} + +// This function is called when an already existing macro is re-defined. +// It first outputs a warning and then a serious error, stopping assembly. +// Showing the first message as a warning guarantees that ACME does not reach +// the maximum error limit inbetween. +static void report_redefinition(node_ra_t* macro_node) { + struct macro_t* original_macro = macro_node->body; + + // show warning with location of current definition + Throw_warning(exception_macro_twice); + // CAUTION, ugly kluge: fiddle with Input_now and Section_now + // data to generate helpful error messages + Input_now->original_filename = original_macro->def_filename; + Input_now->line_number = original_macro->def_line_number; + Section_now->type = "original"; + Section_now->title = "definition"; + // show serious error with location of original definition + Throw_serious_error(exception_macro_twice); +} + +// This function is only called during the first pass, so there's no need to +// check whether to skip the definition or not. +// Return with GotByte = '}' +void Macro_parse_definition(void) {// Now GotByte = illegal char after "!macro" + char* formal_parameters; + node_ra_t* macro_node; + struct macro_t* new_macro; + zone_t macro_zone = get_zone_and_title(); + + // now GotByte = first non-space after title + DYNABUF_CLEAR(GlobalDynaBuf); // prepare to hold formal parameters + // GlobalDynaBuf = "" (will hold formal parameter list) + // user_macro_name = ['.'] MacroTitle NUL + // internal_name = MacroTitle ARG_SEPARATOR (grows to signature) + // Accept n>=0 comma-separated formal parameters before CHAR_SOB ('{'). + // Valid argument formats are: + // .LOCAL_LABEL_BY_VALUE + // ~.LOCAL_LABEL_BY_REFERENCE + // GLOBAL_LABEL_BY_VALUE global args are very uncommon, + // ~GLOBAL_LABEL_BY_REFERENCE but not forbidden + // now GotByte = non-space + if(GotByte != CHAR_SOB) { // any at all? + do { + // handle call-by-reference character ('~') + if(GotByte != REFERENCE_CHAR) + DynaBuf_append(internal_name, ARGTYPE_NUM_VAL); + else { + DynaBuf_append(internal_name, ARGTYPE_NUM_REF); + DynaBuf_append(GlobalDynaBuf, REFERENCE_CHAR); + GetByte(); + } + // handle prefix for local labels ('.') + if(GotByte == '.') { + DynaBuf_append(GlobalDynaBuf, '.'); + GetByte(); + } + // handle label name + Input_append_keyword_to_global_dynabuf(); + } while(pipe_comma()); + // ensure CHAR_SOB ('{') + if(GotByte != CHAR_SOB) + Throw_serious_error(exception_no_left_brace); + } + DynaBuf_append(GlobalDynaBuf, CHAR_EOS); // terminate param list + // now GlobalDynaBuf = comma-separated parameter list without spaces, + // but terminated with CHAR_EOS. + formal_parameters = DynaBuf_get_copy(GlobalDynaBuf); + // now GlobalDynaBuf = unused + // Reading the macro body would change the line number. To have correct + // error messages, we're checking for "macro twice" *now*. + // Search for macro. Create if not found. + // But if found, complain (macro twice). + if(search_for_macro(¯o_node, macro_zone, TRUE) == FALSE) + report_redefinition(macro_node);// quits with serious error + // Create new macro struct and set it up. Finally we'll read the body. + new_macro = safe_malloc(sizeof(struct macro_t)); + new_macro->def_line_number = Input_now->line_number; + new_macro->def_filename = get_string_copy(Input_now->original_filename); + new_macro->original_name = get_string_copy(user_macro_name->buffer); + new_macro->parameter_list = formal_parameters; + new_macro->body = Input_skip_or_store_block(TRUE);// changes LineNumber + macro_node->body = new_macro; // link macro struct to tree node + // and that about sums it up +} + +// Parse macro call ("+MACROTITLE"). Has to be re-entrant. +void Macro_parse_call(void) { // Now GotByte = dot or first char of macro name + char local_gotbyte; + label_t* label; + section_t new_section, + *outer_section; + input_t new_input, + *outer_input; + struct macro_t* actual_macro; + node_ra_t *macro_node, + *label_node; + zone_t macro_zone, + label_zone; + int arg_count = 0; + + // Enter deeper nesting level + // Quit program if recursion too deep. + if(--macro_recursions_left < 0) + Throw_serious_error("Too deeply nested. Recursive macro calls?"); + macro_zone = get_zone_and_title(); + // now GotByte = first non-space after title + // internal_name = MacroTitle ARG_SEPARATOR (grows to signature) + // Accept n>=0 comma-separated arguments before CHAR_EOS. + // Valid argument formats are: + // EXPRESSION (everything that does NOT start with '~' + // ~.LOCAL_LABEL_BY_REFERENCE + // ~GLOBAL_LABEL_BY_REFERENCE + // now GotByte = non-space + if(GotByte != CHAR_EOS) { // any at all? + do { + // if arg table cannot take another element, enlarge + if(argtable_size <= arg_count) + enlarge_arg_table(); + // Decide whether call-by-reference or call-by-value + // In both cases, GlobalDynaBuf may be used. + if(GotByte == REFERENCE_CHAR) { + // read call-by-reference arg + DynaBuf_append(internal_name, ARGTYPE_NUM_REF); + GetByte(); // skip '~' character + Input_read_zone_and_keyword(&label_zone); + // GotByte = illegal char + arg_table[arg_count].label = + Label_find(label_zone, 0); + } else { + // read call-by-value arg + DynaBuf_append(internal_name, ARGTYPE_NUM_VAL); + ALU_parse_expr_medium( + &(arg_table[arg_count].result)); + } + arg_count++; + } while(Input_accept_comma()); + } + // now arg_table contains the arguments + // now GlobalDynaBuf = unused + // check for "unknown macro" + // Search for macro. Do not create if not found. + search_for_macro(¯o_node, macro_zone, FALSE); + if(macro_node == NULL) { + Throw_error("Macro not defined (or wrong signature)."); + Input_skip_remainder(); + } else { + // make macro_node point to the macro struct + actual_macro = macro_node->body; + local_gotbyte = GotByte;// CAUTION - ugly kluge + // set up new input + new_input.original_filename = actual_macro->def_filename; + new_input.line_number = actual_macro->def_line_number; + new_input.source_is_ram = TRUE; + new_input.state = INPUTSTATE_NORMAL; // FIXME - fix others! + new_input.src.ram_ptr = actual_macro->parameter_list; + // remember old input + outer_input = Input_now; + // activate new input + Input_now = &new_input; + // remember old section + outer_section = Section_now; + // start new section (with new zone) + // FALSE = title mustn't be freed + Section_new_zone(&new_section, "Macro", + actual_macro->original_name, FALSE); + GetByte(); // fetch first byte of parameter list + // assign arguments + if(GotByte != CHAR_EOS) { // any at all? + arg_count = 0; + do { + // Decide whether call-by-reference + // or call-by-value + // In both cases, GlobalDynaBuf may be used. + if(GotByte == REFERENCE_CHAR) { + // assign call-by-reference arg + GetByte(); // skip '~' character + Input_read_zone_and_keyword(&label_zone); + if((Tree_hard_scan(&label_node, Label_forest, label_zone, TRUE) == FALSE) + && (pass_flags & PASS_ISFIRST)) + Throw_error("Macro parameter twice."); + label_node->body = arg_table[arg_count].label; + } else { + // assign call-by-value arg + Input_read_zone_and_keyword(&label_zone); + label = Label_find(label_zone, 0); +// FIXME - add a possibility to Label_find to make it possible to find out +// whether label was just created. Then check for the same error message here +// as above ("Macro parameter twice."). + label->value = arg_table[arg_count].result.value; + label->flags = arg_table[arg_count].result.flags; + } + arg_count++; + } while(Input_accept_comma()); + } + // and now, finally, parse the actual macro body + Input_now->state = INPUTSTATE_NORMAL; // FIXME - fix others! + Input_now->src.ram_ptr = actual_macro->body; + Parse_until_eob_or_eof(); + if(GotByte != CHAR_EOB) + Bug_found("IllegalBlockTerminator", GotByte); + // FIXME - call parse_ram_block(actual_macro->def_line_number, + // actual_macro->body) instead? + // end section (free title memory, if needed) + Section_finalize(&new_section); + // restore previous section + Section_now = outer_section; + // restore previous input: + Input_now = outer_input; + // restore old Gotbyte context + GotByte = local_gotbyte;// CAUTION - ugly kluge + Input_ensure_EOS(); + } + macro_recursions_left++; // leave this nesting level +} diff --git a/Platform/Apple/tools/ACME/src/macro.h b/Platform/Apple/tools/ACME/src/macro.h new file mode 100644 index 00000000..ce8f248d --- /dev/null +++ b/Platform/Apple/tools/ACME/src/macro.h @@ -0,0 +1,19 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Macro stuff +#ifndef macro_H +#define macro_H + +#include "config.h" + + +// Prototypes +extern void Macro_init(void); // create private dynabuf +extern void Macro_parse_definition(void); +extern void Macro_parse_call(void); + + +#endif diff --git a/Platform/Apple/tools/ACME/src/mnemo.c b/Platform/Apple/tools/ACME/src/mnemo.c new file mode 100644 index 00000000..a9d05927 --- /dev/null +++ b/Platform/Apple/tools/ACME/src/mnemo.c @@ -0,0 +1,1024 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Mnemonics stuff + +#include "alu.h" +#include "config.h" +#include "cpu.h" +#include "dynabuf.h" +#include "global.h" +#include "input.h" +#include "output.h" +#include "tree.h" + + +// Constants +#define MNEMO_DYNABUF_INITIALSIZE 8 // 4+terminator should suffice + +// These values are needed to recognize addressing modes. +// Bits: +// 7....... "Implied" no value given +// .6...... "Immediate" "#" at start +// ..5..... "IndirectLong" "[" at start and "]" after value +// ...4.... "Indirect" Value has at least one unnecessary pair of "()" +// ....32.. "Indexed-Int" Index given inside of "()" +// ......10 "Indexed-Ext" Index given outside of (or without any) "()" +// +// Index bits: +// 00 = no index +// 01 = ",s" (Stack-indexed) +// 10 = ",x" (X-indexed) +// 11 = ",y" (Y-indexed) + +// Components (Values for indices) +#define HAM__ (0u << 0) // No index +#define HAM_S (1u << 0) // Stack-indexed +#define HAM_X (2u << 0) // X-indexed +#define HAM_Y (3u << 0) // Y-indexed + +// End values base value internal index external index +#define HAM_IMP (1u << 7) +#define HAM_IMM (1u << 6) +#define HAM_ABS 0 +#define HAM_ABSS (1u << 0) +#define HAM_ABSX (2u << 0) +#define HAM_ABSY (3u << 0) +#define HAM_IND (1u << 4) +#define HAM_XIND ((1u << 4)| (2u << 2)) +#define HAM_INDY ((1u << 4)| (3u << 0)) +#define HAM_SINDY ((1u << 4)| (1u << 2)| (3u << 0)) +#define HAM_LIND (1u << 5) +#define HAM_LINDY ((1u << 5)| (3u << 0)) +// Values of internal indices equal values of external indices, shifted left +// by two bits. The program relies on this ! + +// Constant values, used to mark the possible parameter lengths of commands. +// Not all of the eight values are actually used, however (because of the +// supported CPUs). +#define MAYBE______ (0) +#define MAYBE_1____ (MVALUE_FORCE08) +#define MAYBE___2__ (MVALUE_FORCE16) +#define MAYBE_1_2__ (MVALUE_FORCE08 | MVALUE_FORCE16) +#define MAYBE_____3 (MVALUE_FORCE24) +#define MAYBE_1___3 (MVALUE_FORCE08 | MVALUE_FORCE24) +#define MAYBE___2_3 (MVALUE_FORCE16 | MVALUE_FORCE24) +#define MAYBE_1_2_3 (MVALUE_FORCE08 | MVALUE_FORCE16 | MVALUE_FORCE24) + +// The mnemonics are split up into groups, each group has its own routine to +// be dealt with: +// G_IMPLIED Mnemonics using only implied addressing. Byte value = opcode +// G_MAIN The main accumulator stuff (plus PEI) Byte value = table index +// G_MISC Most of the other opcodes Byte value = table index +// G_REL_SHORT The short branch instructions. Byte value = opcode +// G_REL_LONG Mnemonics with 16bit relative addressing. Byte value = opcode +// G_JUMP The jump instructions Byte value = table index +// G_MOVE The "move" commands. Byte value = opcode +enum mnemogroup_t { + G_IMPLIED, // only implied addressing + G_MAIN, // main accumulator stuff (plus PEI) + G_MISC, // misc + G_REL_SHORT, // short relative + G_REL_LONG, // long relative + G_JUMP, // jump + G_MOVE // MVP, MVN +}; + +// save some space +#define SCB static const unsigned char +#define SCS static const unsigned short +#define SCL static const unsigned long + +// Code tables for group G_MAIN: +// These tables are used for the main accumulator-related mnemonics. By reading +// the mnemonic's byte value (from the mnemotable), the assembler finds out the +// column to use here. The row depends on the used addressing mode. A zero +// entry in these tables means that the combination of mnemonic and addressing +// mode is illegal. +enum { IDX_ORA, IDX_AND, IDX_EOR, IDX_ADC, IDX_STA, IDX_LDA, IDX_CMP, IDX_SBC, + IDXC_ORA, IDXC_AND, IDXC_EOR, IDXC_ADC, IDXC_STA, IDXC_LDA, IDXC_CMP, IDXC_SBC, + IDX8_ORA, IDX8_AND, IDX8_EOR, IDX8_ADC, IDX8_STA, IDX8_LDA, IDX8_CMP, IDX8_SBC, IDX8_PEI, + IDXI_SLO, IDXI_RLA, IDXI_SRE, IDXI_RRA, IDXI_SAX, IDXI_LAX, IDXI_DCP, IDXI_ISC}; +// | 6502 | 65c02 | 65816 | 6510 | +// | ora and eor adc sta lda cmp sbc| ora and eor adc sta lda cmp sbc| ora and eor adc sta lda cmp sbc pei| slo rla sre rra sax lax dcp isc| +SCB accu_imm[] = { 0x09, 0x29, 0x49, 0x69, 0, 0xa9, 0xc9, 0xe9, 0x09, 0x29, 0x49, 0x69, 0, 0xa9, 0xc9, 0xe9, 0x09, 0x29, 0x49, 0x69, 0, 0xa9, 0xc9, 0xe9, 0, 0, 0, 0, 0, 0, 0, 0, 0};// #$ff/#$ffff +SCB accu_sabs8[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x03, 0x23, 0x43, 0x63, 0x83, 0xa3, 0xc3, 0xe3, 0, 0, 0, 0, 0, 0, 0, 0, 0};// $ff,s +SCB accu_xind8[] = { 0x01, 0x21, 0x41, 0x61, 0x81, 0xa1, 0xc1, 0xe1, 0x01, 0x21, 0x41, 0x61, 0x81, 0xa1, 0xc1, 0xe1, 0x01, 0x21, 0x41, 0x61, 0x81, 0xa1, 0xc1, 0xe1, 0, 0x03, 0x23, 0x43, 0x63, 0x83, 0xa3, 0xc3, 0xe3};// ($ff,x) +SCB accu_sindy8[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x13, 0x33, 0x53, 0x73, 0x93, 0xb3, 0xd3, 0xf3, 0, 0, 0, 0, 0, 0, 0, 0, 0};// ($ff,s),y +SCB accu_ind8[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0x12, 0x32, 0x52, 0x72, 0x92, 0xb2, 0xd2, 0xf2, 0x12, 0x32, 0x52, 0x72, 0x92, 0xb2, 0xd2, 0xf2,0xd4, 0, 0, 0, 0, 0, 0, 0, 0};// ($ff) +SCB accu_indy8[] = { 0x11, 0x31, 0x51, 0x71, 0x91, 0xb1, 0xd1, 0xf1, 0x11, 0x31, 0x51, 0x71, 0x91, 0xb1, 0xd1, 0xf1, 0x11, 0x31, 0x51, 0x71, 0x91, 0xb1, 0xd1, 0xf1, 0, 0x13, 0x33, 0x53, 0x73, 0, 0xb3, 0xd3, 0xf3};// ($ff),y +SCB accu_lind8[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x07, 0x27, 0x47, 0x67, 0x87, 0xa7, 0xc7, 0xe7, 0, 0, 0, 0, 0, 0, 0, 0, 0};// [$ff] +SCB accu_lindy8[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x17, 0x37, 0x57, 0x77, 0x97, 0xb7, 0xd7, 0xf7, 0, 0, 0, 0, 0, 0, 0, 0, 0};// [$ff],y +SCL accu_abs[] = {0x0d05,0x2d25,0x4d45,0x6d65,0x8d85,0xada5,0xcdc5,0xede5,0x0d05,0x2d25,0x4d45,0x6d65,0x8d85,0xada5,0xcdc5,0xede5,0x0f0d05,0x2f2d25,0x4f4d45,0x6f6d65,0x8f8d85,0xafada5,0xcfcdc5,0xefede5, 0,0x0f07,0x2f27,0x4f47,0x6f67,0x8f87,0xafa7,0xcfc7,0xefe7};// $ff /$ffff /$ffffff +SCL accu_xabs[] = {0x1d15,0x3d35,0x5d55,0x7d75,0x9d95,0xbdb5,0xddd5,0xfdf5,0x1d15,0x3d35,0x5d55,0x7d75,0x9d95,0xbdb5,0xddd5,0xfdf5,0x1f1d15,0x3f3d35,0x5f5d55,0x7f7d75,0x9f9d95,0xbfbdb5,0xdfddd5,0xfffdf5, 0,0x1f17,0x3f37,0x5f57,0x7f77, 0, 0,0xdfd7,0xfff7};// $ff,x/$ffff,x/$ffffff,x +SCS accu_yabs[] = {0x1900,0x3900,0x5900,0x7900,0x9900,0xb900,0xd900,0xf900,0x1900,0x3900,0x5900,0x7900,0x9900,0xb900,0xd900,0xf900, 0x1900, 0x3900, 0x5900, 0x7900, 0x9900, 0xb900, 0xd900, 0xf900, 0,0x1b00,0x3b00,0x5b00,0x7b00, 0x97,0xbfb7,0xdb00,0xfb00};// $ff,y/$ffff,y + +// Code tables for group G_MISC: +// These tables are needed for finding out the correct code in cases when +// there are no general rules. By reading the mnemonic's byte value (from the +// mnemotable), the assembler finds out the column to use here. The row +// depends on the used addressing mode. A zero entry in these tables means +// that the combination of mnemonic and addressing mode is illegal. +enum { IDX_BIT, IDX_ASL, IDX_ROL, IDX_LSR, IDX_ROR, IDX_STY, IDX_STX, + IDX_LDY, IDX_LDX, IDX_CPY, IDX_CPX, IDX_DEC, IDX_INC, + IDXC_TSB, IDXC_TRB, IDXC_BIT, IDXC_DEC, IDXC_INC, IDXC_STZ, + IDX8_COP, IDX8_REP, IDX8_SEP, IDX8_PEA, + IDXI_ANC, IDXI_ASR, IDXI_ARR, IDXI_SBX, IDXI_DOP, IDXI_TOP, IDXI_JAM}; +// | 6502 | 65c02 | 65816 | 6510 | +// | bit asl rol lsr ror sty stx ldy ldx cpy cpx dec inc| tsb trb bit dec inc stz| cop rep sep pea| anc asr arr sbx dop top jam| +SCB misc_impl[] = { 0, 0x0a, 0x2a, 0x4a, 0x6a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x3a, 0x1a, 0, 0, 0, 0, 0, 0, 0, 0, 0,0x80, 0x0c,0x02};// implied/accu +SCB misc_imm[] = { 0, 0, 0, 0, 0, 0, 0, 0xa0, 0xa2, 0xc0, 0xe0, 0, 0, 0, 0, 0x89, 0, 0, 0, 0,0xc2,0xe2, 0,0x2b,0x4b,0x6b,0xcb,0x80, 0, 0};// #$ff +SCS misc_abs[] = {0x2c24,0x0e06,0x2e26,0x4e46,0x6e66,0x8c84,0x8e86,0xaca4,0xaea6,0xccc4,0xece4,0xcec6,0xeee6,0x0c04,0x1c14,0x2c24,0xcec6,0xeee6,0x9c64,0x02, 0, 0,0xf400, 0, 0, 0, 0,0x04,0x0c00, 0};// $ff/$ffff +SCS misc_xabs[] = { 0,0x1e16,0x3e36,0x5e56,0x7e76, 0x94, 0,0xbcb4, 0, 0, 0,0xded6,0xfef6, 0, 0,0x3c34,0xded6,0xfef6,0x9e74, 0, 0, 0, 0, 0, 0, 0, 0,0x14,0x1c00, 0};// $ff,x/$ffff,x +SCS misc_yabs[] = { 0, 0, 0, 0, 0, 0, 0x96, 0,0xbeb6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};// $ff,y/$ffff,y + +// Code tables for group G_JUMP: +// +// These tables are needed for finding out the correct code when the mnemonic +// is "jmp" or "jsr" (or the long versions "jml" and "jsl"). +// By reading the mnemonic's byte value (from the mnemotable), the assembler +// finds out the column to use here. The row depends on the used addressing +// mode. A zero entry in these tables means that the combination of mnemonic +// and addressing mode is illegal. +enum { IDX_JMP, IDX_JSR, IDXC_JMP, IDX8_JMP, IDX8_JML, IDX8_JSR, IDX8_JSL}; +// | 6502 | 65c02| 65816 | +// | jmp jsr | jmp | jmp jml jsr jsl | +SCL jump_abs[] = {0x4c00,0x2000,0x4c00,0x5c4c00,0x5c0000,0x222000,0x220000};// $ffff/$ffffff +SCS jump_ind[] = {0x6c00, 0,0x6c00, 0x6c00, 0, 0, 0};// ($ffff) +SCS jump_xind[] = { 0, 0,0x7c00, 0x7c00, 0, 0xfc00, 0};// ($ffff,x) +SCS jump_lind[] = { 0, 0, 0, 0xdc00, 0xdc00, 0, 0};// [$ffff] + +#undef SCB +#undef SCS +#undef SCL + +// error message strings +static const char exception_illegal_combination[] = "Illegal combination of command and addressing mode."; +static const char exception_highbyte_zero[]= "Using oversized addressing mode."; +static const char exception_too_far[] = "Target out of range."; + + +// Variables + +static dynabuf_t* mnemo_dyna_buf; // dynamic buffer for mnemonics +// predefined stuff +static node_t* mnemo_6502_tree = NULL;// holds 6502 mnemonics +static node_t* mnemo_6510_tree = NULL;// holds 6510 extensions +static node_t* mnemo_65c02_tree= NULL;// holds 65c02 extensions +//static node_t* mnemo_Rockwell65c02_tree = NULL;// Rockwell +static node_t* mnemo_WDC65c02_tree = NULL;// WDC's "stp"/"wai" +static node_t* mnemo_65816_tree = NULL;// holds 65816 extensions + +// Command's code and group values are stored together in a single integer. +// To extract the code, use "& CODEMASK". +// To extract the group, use ">> GROUPSHIFT" +#define CODEMASK 0xff // opcode or table index +#define FLAGSMASK 0x300 // flags concerning immediate addressing: +#define IMM_ACCU 0x100 // ...depends on accumulator length +#define IMM_IDX 0x200 // ...depends on index register length +#define GROUPSHIFT 10 // shift right by this to extract group +#define MERGE(g, v) ((g << GROUPSHIFT) | v) + +static node_t mnemos_6502[] = { + PREDEFNODE("ora", MERGE(G_MAIN , IDX_ORA | IMM_ACCU)), + PREDEFNODE("and", MERGE(G_MAIN , IDX_AND | IMM_ACCU)), + PREDEFNODE("eor", MERGE(G_MAIN , IDX_EOR | IMM_ACCU)), + PREDEFNODE("adc", MERGE(G_MAIN , IDX_ADC | IMM_ACCU)), + PREDEFNODE("sta", MERGE(G_MAIN , IDX_STA)), + PREDEFNODE("lda", MERGE(G_MAIN , IDX_LDA | IMM_ACCU)), + PREDEFNODE("cmp", MERGE(G_MAIN , IDX_CMP | IMM_ACCU)), + PREDEFNODE("sbc", MERGE(G_MAIN , IDX_SBC | IMM_ACCU)), + PREDEFNODE("bit", MERGE(G_MISC , IDX_BIT | IMM_ACCU)), + PREDEFNODE("asl", MERGE(G_MISC , IDX_ASL)), + PREDEFNODE("rol", MERGE(G_MISC , IDX_ROL)), + PREDEFNODE("lsr", MERGE(G_MISC , IDX_LSR)), + PREDEFNODE("ror", MERGE(G_MISC , IDX_ROR)), + PREDEFNODE("sty", MERGE(G_MISC , IDX_STY)), + PREDEFNODE("stx", MERGE(G_MISC , IDX_STX)), + PREDEFNODE("ldy", MERGE(G_MISC , IDX_LDY | IMM_IDX)), + PREDEFNODE("ldx", MERGE(G_MISC , IDX_LDX | IMM_IDX)), + PREDEFNODE("cpy", MERGE(G_MISC , IDX_CPY | IMM_IDX)), + PREDEFNODE("cpx", MERGE(G_MISC , IDX_CPX | IMM_IDX)), + PREDEFNODE("dec", MERGE(G_MISC , IDX_DEC)), + PREDEFNODE("inc", MERGE(G_MISC , IDX_INC)), + PREDEFNODE("bpl", MERGE(G_REL_SHORT , 16)), + PREDEFNODE("bmi", MERGE(G_REL_SHORT , 48)), + PREDEFNODE("bvc", MERGE(G_REL_SHORT , 80)), + PREDEFNODE("bvs", MERGE(G_REL_SHORT , 112)), + PREDEFNODE("bcc", MERGE(G_REL_SHORT , 144)), + PREDEFNODE("bcs", MERGE(G_REL_SHORT , 176)), + PREDEFNODE("bne", MERGE(G_REL_SHORT , 208)), + PREDEFNODE("beq", MERGE(G_REL_SHORT , 240)), + PREDEFNODE("jmp", MERGE(G_JUMP , IDX_JMP)), + PREDEFNODE("jsr", MERGE(G_JUMP , IDX_JSR)), + PREDEFNODE("brk", MERGE(G_IMPLIED , 0)), + PREDEFNODE("php", MERGE(G_IMPLIED , 8)), + PREDEFNODE("clc", MERGE(G_IMPLIED , 24)), + PREDEFNODE("plp", MERGE(G_IMPLIED , 40)), + PREDEFNODE("sec", MERGE(G_IMPLIED , 56)), + PREDEFNODE("rti", MERGE(G_IMPLIED , 64)), + PREDEFNODE("pha", MERGE(G_IMPLIED , 72)), + PREDEFNODE("cli", MERGE(G_IMPLIED , 88)), + PREDEFNODE("rts", MERGE(G_IMPLIED , 96)), + PREDEFNODE("pla", MERGE(G_IMPLIED , 104)), + PREDEFNODE("sei", MERGE(G_IMPLIED , 120)), + PREDEFNODE("dey", MERGE(G_IMPLIED , 136)), + PREDEFNODE("txa", MERGE(G_IMPLIED , 138)), + PREDEFNODE("tya", MERGE(G_IMPLIED , 152)), + PREDEFNODE("txs", MERGE(G_IMPLIED , 154)), + PREDEFNODE("tay", MERGE(G_IMPLIED , 168)), + PREDEFNODE("tax", MERGE(G_IMPLIED , 170)), + PREDEFNODE("clv", MERGE(G_IMPLIED , 184)), + PREDEFNODE("tsx", MERGE(G_IMPLIED , 186)), + PREDEFNODE("iny", MERGE(G_IMPLIED , 200)), + PREDEFNODE("dex", MERGE(G_IMPLIED , 202)), + PREDEFNODE("cld", MERGE(G_IMPLIED , 216)), + PREDEFNODE("inx", MERGE(G_IMPLIED , 232)), + PREDEFNODE("nop", MERGE(G_IMPLIED , 234)), + PREDEFLAST("sed", MERGE(G_IMPLIED , 248)), + // ^^^^ this marks the last element +}; + +static node_t mnemos_6510[] = { + PREDEFNODE("slo", MERGE(G_MAIN, IDXI_SLO)),// ASL+ORA, ASO + PREDEFNODE("rla", MERGE(G_MAIN, IDXI_RLA)),// ROL+AND + PREDEFNODE("sre", MERGE(G_MAIN, IDXI_SRE)),// LSR+EOR, LSE + PREDEFNODE("rra", MERGE(G_MAIN, IDXI_RRA)),// ROR+ADC + PREDEFNODE("sax", MERGE(G_MAIN, IDXI_SAX)),// STX+STA, AAX, AXS + PREDEFNODE("lax", MERGE(G_MAIN, IDXI_LAX)),// LDX+LDA + PREDEFNODE("dcp", MERGE(G_MAIN, IDXI_DCP)),// DEC+CMP, DCM + PREDEFNODE("isc", MERGE(G_MAIN, IDXI_ISC)),// INC+SBC, ISB, INS + PREDEFNODE("anc", MERGE(G_MISC, IDXI_ANC)),// ROL+AND, ASL+ORA, AAC + PREDEFNODE("asr", MERGE(G_MISC, IDXI_ASR)),// LSR+EOR, ALR + PREDEFNODE("arr", MERGE(G_MISC, IDXI_ARR)),// ROR+ADC + PREDEFNODE("sbx", MERGE(G_MISC, IDXI_SBX)),// DEX+CMP, AXS, SAX + PREDEFNODE("dop", MERGE(G_MISC, IDXI_DOP)),// skip next byte + PREDEFNODE("top", MERGE(G_MISC, IDXI_TOP)),// skip next two bytes + PREDEFLAST("jam", MERGE(G_MISC, IDXI_JAM)),// jam/crash/halt/kill + // ^^^^ this marks the last element +}; + +static node_t mnemos_65c02[] = { + PREDEFNODE("ora", MERGE(G_MAIN , IDXC_ORA | IMM_ACCU)), + PREDEFNODE("and", MERGE(G_MAIN , IDXC_AND | IMM_ACCU)), + PREDEFNODE("eor", MERGE(G_MAIN , IDXC_EOR | IMM_ACCU)), + PREDEFNODE("adc", MERGE(G_MAIN , IDXC_ADC | IMM_ACCU)), + PREDEFNODE("sta", MERGE(G_MAIN , IDXC_STA)), + PREDEFNODE("lda", MERGE(G_MAIN , IDXC_LDA | IMM_ACCU)), + PREDEFNODE("cmp", MERGE(G_MAIN , IDXC_CMP | IMM_ACCU)), + PREDEFNODE("sbc", MERGE(G_MAIN , IDXC_SBC | IMM_ACCU)), + PREDEFNODE("jmp", MERGE(G_JUMP , IDXC_JMP)), + PREDEFNODE("bit", MERGE(G_MISC , IDXC_BIT | IMM_ACCU)), + PREDEFNODE("dec", MERGE(G_MISC , IDXC_DEC)), + PREDEFNODE("inc", MERGE(G_MISC , IDXC_INC)), + PREDEFNODE("bra", MERGE(G_REL_SHORT , 128)), + PREDEFNODE("phy", MERGE(G_IMPLIED , 90)), + PREDEFNODE("ply", MERGE(G_IMPLIED , 122)), + PREDEFNODE("phx", MERGE(G_IMPLIED , 218)), + PREDEFNODE("plx", MERGE(G_IMPLIED , 250)), + PREDEFNODE("tsb", MERGE(G_MISC , IDXC_TSB)), + PREDEFNODE("trb", MERGE(G_MISC , IDXC_TRB)), + PREDEFLAST("stz", MERGE(G_MISC , IDXC_STZ)), + // ^^^^ this marks the last element +}; + +//static node_t mnemos_Rockwell65c02[] = { +// PREDEFNODE("rmb0", MERGE(G_ , 0x07)), +// PREDEFNODE("rmb1", MERGE(G_ , 0x17)), +// PREDEFNODE("rmb2", MERGE(G_ , 0x27)), +// PREDEFNODE("rmb3", MERGE(G_ , 0x37)), +// PREDEFNODE("rmb4", MERGE(G_ , 0x47)), +// PREDEFNODE("rmb5", MERGE(G_ , 0x57)), +// PREDEFNODE("rmb6", MERGE(G_ , 0x67)), +// PREDEFNODE("rmb7", MERGE(G_ , 0x77)), +// PREDEFNODE("smb0", MERGE(G_ , 0x87)), +// PREDEFNODE("smb1", MERGE(G_ , 0x97)), +// PREDEFNODE("smb2", MERGE(G_ , 0xa7)), +// PREDEFNODE("smb3", MERGE(G_ , 0xb7)), +// PREDEFNODE("smb4", MERGE(G_ , 0xc7)), +// PREDEFNODE("smb5", MERGE(G_ , 0xd7)), +// PREDEFNODE("smb6", MERGE(G_ , 0xe7)), +// PREDEFNODE("smb7", MERGE(G_ , 0xf7)), +// PREDEFNODE("bbr0", MERGE(G_ , 0x0f)), +// PREDEFNODE("bbr1", MERGE(G_ , 0x1f)), +// PREDEFNODE("bbr2", MERGE(G_ , 0x2f)), +// PREDEFNODE("bbr3", MERGE(G_ , 0x3f)), +// PREDEFNODE("bbr4", MERGE(G_ , 0x4f)), +// PREDEFNODE("bbr5", MERGE(G_ , 0x5f)), +// PREDEFNODE("bbr6", MERGE(G_ , 0x6f)), +// PREDEFNODE("bbr7", MERGE(G_ , 0x7f)), +// PREDEFNODE("bbs0", MERGE(G_ , 0x8f)), +// PREDEFNODE("bbs1", MERGE(G_ , 0x9f)), +// PREDEFNODE("bbs2", MERGE(G_ , 0xaf)), +// PREDEFNODE("bbs3", MERGE(G_ , 0xbf)), +// PREDEFNODE("bbs4", MERGE(G_ , 0xcf)), +// PREDEFNODE("bbs5", MERGE(G_ , 0xdf)), +// PREDEFNODE("bbs6", MERGE(G_ , 0xef)), +// PREDEFLAST("bbs7", MERGE(G_ , 0xff)), +// // ^^^^ this marks the last element +//}; + +static node_t mnemos_WDC65c02[] = { + PREDEFNODE("stp", MERGE(G_IMPLIED , 219)), + PREDEFLAST("wai", MERGE(G_IMPLIED , 203)), + // ^^^^ this marks the last element +}; + +static node_t mnemos_65816[] = { + PREDEFNODE("ora", MERGE(G_MAIN , IDX8_ORA | IMM_ACCU)), + PREDEFNODE("and", MERGE(G_MAIN , IDX8_AND | IMM_ACCU)), + PREDEFNODE("eor", MERGE(G_MAIN , IDX8_EOR | IMM_ACCU)), + PREDEFNODE("adc", MERGE(G_MAIN , IDX8_ADC | IMM_ACCU)), + PREDEFNODE("sta", MERGE(G_MAIN , IDX8_STA)), + PREDEFNODE("lda", MERGE(G_MAIN , IDX8_LDA | IMM_ACCU)), + PREDEFNODE("cmp", MERGE(G_MAIN , IDX8_CMP | IMM_ACCU)), + PREDEFNODE("sbc", MERGE(G_MAIN , IDX8_SBC | IMM_ACCU)), + PREDEFNODE("pei", MERGE(G_MAIN , IDX8_PEI)), + PREDEFNODE("jmp", MERGE(G_JUMP , IDX8_JMP)), + PREDEFNODE("jsr", MERGE(G_JUMP , IDX8_JSR)), + PREDEFNODE("jml", MERGE(G_JUMP , IDX8_JML)), + PREDEFNODE("jsl", MERGE(G_JUMP , IDX8_JSL)), + PREDEFNODE("mvp", MERGE(G_MOVE , 0x44)), + PREDEFNODE("mvn", MERGE(G_MOVE , 0x54)), + PREDEFNODE("per", MERGE(G_REL_LONG , 98)), + PREDEFNODE("brl", MERGE(G_REL_LONG , 130)), + PREDEFNODE("cop", MERGE(G_MISC , IDX8_COP)), + PREDEFNODE("rep", MERGE(G_MISC , IDX8_REP)), + PREDEFNODE("sep", MERGE(G_MISC , IDX8_SEP)), + PREDEFNODE("pea", MERGE(G_MISC , IDX8_PEA)), + PREDEFNODE("phd", MERGE(G_IMPLIED , 11)), + PREDEFNODE("tcs", MERGE(G_IMPLIED , 27)), + PREDEFNODE("pld", MERGE(G_IMPLIED , 43)), + PREDEFNODE("tsc", MERGE(G_IMPLIED , 59)), + PREDEFNODE("wdm", MERGE(G_IMPLIED , 66)), + PREDEFNODE("phk", MERGE(G_IMPLIED , 75)), + PREDEFNODE("tcd", MERGE(G_IMPLIED , 91)), + PREDEFNODE("rtl", MERGE(G_IMPLIED , 107)), + PREDEFNODE("tdc", MERGE(G_IMPLIED , 123)), + PREDEFNODE("phb", MERGE(G_IMPLIED , 139)), + PREDEFNODE("txy", MERGE(G_IMPLIED , 155)), + PREDEFNODE("plb", MERGE(G_IMPLIED , 171)), + PREDEFNODE("tyx", MERGE(G_IMPLIED , 187)), + PREDEFNODE("xba", MERGE(G_IMPLIED , 235)), + PREDEFLAST("xce", MERGE(G_IMPLIED , 251)), + // ^^^^ this marks the last element +}; + + +// Functions + +// Init (add stuff to tree) +void Mnemo_init(void) { + mnemo_dyna_buf = DynaBuf_create(MNEMO_DYNABUF_INITIALSIZE); + Tree_add_table(&mnemo_6502_tree, mnemos_6502); + Tree_add_table(&mnemo_6510_tree, mnemos_6510); + Tree_add_table(&mnemo_65c02_tree, mnemos_65c02); +// Tree_add_table(&mnemo_Rockwell65c02_tree, mnemos_Rockwell65c02); + Tree_add_table(&mnemo_WDC65c02_tree, mnemos_WDC65c02); + Tree_add_table(&mnemo_65816_tree, mnemos_65816); +} + + +// Address mode parsing + +// Service routine to read optional info about parameter length. +int Mnemo_get_force_bit(void) { + char byte; + int force_bit = 0; + + if(GotByte == '+') { + byte = GetByte(); + if(byte == '1') + force_bit = MVALUE_FORCE08; + else if(byte == '2') + force_bit = MVALUE_FORCE16; + else if(byte == '3') + force_bit = MVALUE_FORCE24; + if(force_bit) + GetByte(); + else + Throw_error("Illegal postfix."); + } + SKIPSPACE(); + return(force_bit); +} + +// Utility routine for parsing indices. +static int get_index(bool next) { + int addressing_mode = HAM__; + + if(next) + GetByte(); + if(!Input_accept_comma()) + return(addressing_mode); + switch(GotByte) { + + case 's': + case 'S': + addressing_mode = HAM_S; + break; + + case 'x': + case 'X': + addressing_mode = HAM_X; + break; + + case 'y': + case 'Y': + addressing_mode = HAM_Y; + break; + + default: + Throw_error(exception_syntax); + + } + if(addressing_mode != HAM__) + NEXTANDSKIPSPACE(); + return(addressing_mode); +} + +// This routine stores the command's argument in the given result_t structure +// (using the valueparser). The addressing mode is returned. +static int get_argument(result_t* result) { + int open_paren, + addressing_mode = HAM_ABS; + + SKIPSPACE(); + switch(GotByte) { + + case '[': + GetByte();// proceed with next char + ALU_parse_expr_medium(result); + if(GotByte == ']') + addressing_mode |= HAM_LIND | get_index(TRUE); + else + Throw_error(exception_syntax); + break; + + case '#': + GetByte();// proceed with next char + addressing_mode |= HAM_IMM; + ALU_parse_expr_medium(result); + break; + + default: + // liberal, to allow for "(...," + open_paren = ALU_parse_expr_liberal(result); + + // check for implied addressing + if((result->flags & MVALUE_EXISTS) == 0) + addressing_mode |= HAM_IMP; + // check for indirect addressing + if(result->flags & MVALUE_INDIRECT) + addressing_mode |= HAM_IND; + // check for internal index (before closing parenthesis) + if(open_paren) { + // in case there are still open parentheses, + // read internal index + addressing_mode |= (get_index(FALSE) << 2); + if(GotByte == ')') + GetByte();// go on with next char + else + Throw_error(exception_syntax); + } + // check for external index (after closing parenthesis) + addressing_mode |= get_index(FALSE); + break; + + } + // ensure end of line + Input_ensure_EOS(); + //printf("AM: %x\n", addressing_mode); + return(addressing_mode); +} + +// Helper function for calc_arg_size() +// Only call with "size_bit = MVALUE_FORCE16" or "size_bit = MVALUE_FORCE24" +static int check_oversize(int size_bit, result_t* argument) { + // only check if value is *defined* + if((argument->flags & MVALUE_DEFINED) == 0) + return(size_bit);// pass on result + + // value is defined, so check + if(size_bit == MVALUE_FORCE16) { + // check 16-bit argument for high byte zero + if((argument->value <= 255) && (argument->value >= -128)) + Throw_warning(exception_highbyte_zero); + } else + // check 24-bit argument for bank byte zero + if((argument->value <= 65535) && (argument->value >= -32768)) + Throw_warning(exception_highbyte_zero); + return(size_bit);// pass on result +} + +// Utility routine for comparing force bits, argument value, argument size, +// "unsure"-flag and possible addressing modes. Returns force bit matching +// number of parameter bytes to send. If it returns zero, an error occurred +// (and has already been delivered). +// force_bit none, 8b, 16b, 24b +// argument value and flags of parameter +// addressing_modes adressing modes (8b, 16b, 24b or any combination) +// Return value = force bit for number of parameter bytes to send (0 = error) +static int calc_arg_size(int force_bit, result_t* argument, int addressing_modes) { + // If there are no possible addressing modes, complain + if(addressing_modes == MAYBE______) { + Throw_error(exception_illegal_combination); + return(0); + } + // If command has force bit, act upon it + if(force_bit) { + // If command allows this force bit, return it + if(addressing_modes & force_bit) + return(force_bit); + // If not, complain + Throw_error("Illegal combination of command and postfix."); + return(0); + } + // Command has no force bit. Check whether value has one + // If value has force bit, act upon it + if(argument->flags & MVALUE_FORCEBITS) { + // Value has force bit set, so return this or bigger size + if(MVALUE_FORCE08 & addressing_modes & argument->flags) + return(MVALUE_FORCE08); + if(MVALUE_FORCE16 & addressing_modes & argument->flags) + return(MVALUE_FORCE16); + if(MVALUE_FORCE24 & addressing_modes) + return(MVALUE_FORCE24); + Throw_error(exception_number_out_of_range);// else error + return(0); + } + // Value has no force bit. Check whether there's only one addr mode + // If only one addressing mode, use that + if((addressing_modes == MVALUE_FORCE08) + || (addressing_modes == MVALUE_FORCE16) + || (addressing_modes == MVALUE_FORCE24)) + return(addressing_modes);// There's only one, so use it + // There's more than one addressing mode. Check whether value is sure + // If value is unsure, use default size + if(argument->flags & MVALUE_UNSURE) { + // If there is an 8-bit addressing mode *and* the value + // is sure to fit into 8 bits, use the 8-bit mode + if((addressing_modes & MVALUE_FORCE08) && (argument->flags & MVALUE_ISBYTE)) + return(MVALUE_FORCE08); + // If there is a 16-bit addressing, use that + // Call helper function for "oversized addr mode" warning + if(MVALUE_FORCE16 & addressing_modes) + return(check_oversize(MVALUE_FORCE16, argument)); + // If there is a 24-bit addressing, use that + // Call helper function for "oversized addr mode" warning + if(MVALUE_FORCE24 & addressing_modes) + return(check_oversize(MVALUE_FORCE24, argument)); + // otherwise, use 8-bit-addressing, which will raise an + // error later on if the value won't fit + return(MVALUE_FORCE08); + } + // Value is sure, so use its own size + // If value is negative, size cannot be chosen. Complain! + if(argument->value < 0) { + Throw_error("Negative value - cannot choose addressing mode."); + return(0); + } + // Value is positive or zero. Check size ranges + // If there is an 8-bit addressing mode and value fits, use 8 bits + if((addressing_modes & MVALUE_FORCE08) && (argument->value < 256)) + return(MVALUE_FORCE08); + // If there is a 16-bit addressing mode and value fits, use 16 bits + if((addressing_modes & MVALUE_FORCE16) && (argument->value < 65536)) + return(MVALUE_FORCE16); + // If there is a 24-bit addressing mode, use that. In case the + // value doesn't fit, the output routine will do the complaining. + if(addressing_modes & MVALUE_FORCE24) + return(MVALUE_FORCE24); + // Value is too big for all possible addressing modes + Throw_error(exception_number_out_of_range); + return(0); +} + +// Mnemonics using only implied addressing. +static void group_only_implied_addressing(int opcode) { + Output_byte(opcode); + Input_ensure_EOS(); +} + +// Mnemonics using only 8bit relative addressing (short branch instructions). +static void group_only_relative8_addressing(int opcode) { + result_t result; + + ALU_parse_expr_medium(&result); + if(result.flags & MVALUE_DEFINED) { + result.value -= (CPU_pc + 2); + if((result.value > 127) || (result.value < -128)) + Throw_error(exception_too_far); + } + Output_byte(opcode); + // this fn has its own range check (see above). + // No reason to irritate the user with another error message, + // so use Output_byte() instead of Output_8b() + //Output_8b(result.value); + Output_byte(result.value); + Input_ensure_EOS(); +} + +// Mnemonics using only 16bit relative addressing (BRL and PER). +static void group_only_relative16_addressing(int opcode) { + result_t result; + + ALU_parse_expr_medium(&result); + if(result.flags & MVALUE_DEFINED) { + result.value -= (CPU_pc + 3); + if((result.value > 32767) || (result.value < -32768)) + Throw_error(exception_too_far); + } + Output_byte(opcode); + // this fn has its own range check (see above). + // No reason to irritate the user with another error message, + // so use Output_byte() instead of Output_16b() + //Output_16b(result.value); + Output_byte(result.value); + Output_byte(result.value >> 8); + Input_ensure_EOS(); +} + +// set addressing mode bits depending on which opcodes exist, then calculate +// argument size and output both opcode and argument +static void make_command(int force_bit, result_t* result, unsigned long opcodes) { + int addressing_modes = MAYBE______; + + if(opcodes & 0x0000ff) + addressing_modes |= MAYBE_1____; + if(opcodes & 0x00ff00) + addressing_modes |= MAYBE___2__; + if(opcodes & 0xff0000) + addressing_modes |= MAYBE_____3; + switch(calc_arg_size(force_bit, result, addressing_modes)) { + + case MVALUE_FORCE08: + Output_byte(opcodes & 255); + Output_8b(result->value); + break; + + case MVALUE_FORCE16: + Output_byte((opcodes >> 8) & 255); + Output_16b(result->value); + break; + + case MVALUE_FORCE24: + Output_byte((opcodes >> 16) & 255); + Output_24b(result->value); + break; + + } +} + +// check whether 16bit immediate addressing is allowed. If not, return given +// opcode. If it is allowed, set force bits according to CPU register length +// and return given opcode for both 8- and 16-bit mode. +static unsigned int imm_ops(int *force_bit, unsigned char opcode, int imm_flag) { + + // if the CPU does not allow 16bit immediate addressing (or if the + // opcode does not allow it), return immediately. + if(((CPU_now->flags & CPU_FLAG_IMM16) == 0) || (imm_flag == 0)) + return(opcode); + // check force bits (if no force bits given, use relevant flag) + if(*force_bit == 0) + *force_bit = ((imm_flag & IMM_ACCU) ? + CPU65816_long_a : CPU65816_long_r) ? + MVALUE_FORCE16 : MVALUE_FORCE08; + // return identical opcodes for 8bit and 16bit args! + return((((unsigned int) opcode) << 8) | opcode); +} + +// The main accumulator stuff (ADC, AND, CMP, EOR, LDA, ORA, SBC, STA) +// plus PEI. +static void group_main(int index, int imm_flag) { + unsigned long imm_opcodes; + result_t result; + int force_bit = Mnemo_get_force_bit();// skips spaces after + + switch(get_argument(&result)) { + + // #$ff or #$ffff (depending on accu length) + case HAM_IMM: + imm_opcodes = imm_ops(&force_bit, accu_imm[index], imm_flag); + // CAUTION - do not incorporate the line above into the line + // below - "fb" might be undefined (depends on compiler). + make_command(force_bit, &result, imm_opcodes); + break; + + // $ff, $ffff, $ffffff + case HAM_ABS: + make_command(force_bit, &result, accu_abs[index]); + break; + + // $ff,x, $ffff,x, $ffffff,x + case HAM_ABSX: + make_command(force_bit, &result, accu_xabs[index]); + break; + + // $ffff,y (in theory, "$ff,y" as well) + case HAM_ABSY: + make_command(force_bit, &result, accu_yabs[index]); + break; + + // $ff,s + case HAM_ABSS: + make_command(force_bit, &result, accu_sabs8[index]); + break; + + // ($ff,x) + case HAM_XIND: + make_command(force_bit, &result, accu_xind8[index]); + break; + + // ($ff) + case HAM_IND: + make_command(force_bit, &result, accu_ind8[index]); + break; + + // ($ff),y + case HAM_INDY: + make_command(force_bit, &result, accu_indy8[index]); + break; + + // [$ff] + case HAM_LIND: + make_command(force_bit, &result, accu_lind8[index]); + break; + + // [$ff],y + case HAM_LINDY: + make_command(force_bit, &result, accu_lindy8[index]); + break; + + // ($ff,s),y + case HAM_SINDY: + make_command(force_bit, &result, accu_sindy8[index]); + break; + + // other combinations are illegal + default: + Throw_error(exception_illegal_combination); + + } +} + +// Various mnemonics with different addressing modes. +static void group_misc(int index, int imm_flag) { + unsigned long imm_opcodes; + result_t result; + int force_bit = Mnemo_get_force_bit();// skips spaces after + + switch(get_argument(&result)) { + + // implied addressing + case HAM_IMP: + if(misc_impl[index]) + Output_byte(misc_impl[index]); + else + Throw_error(exception_illegal_combination); + break; + + // #$ff or #$ffff (depending on index register length) + case HAM_IMM: + imm_opcodes = imm_ops(&force_bit, misc_imm[index], imm_flag); + // CAUTION - do not incorporate the line above into the line + // below - "fb" might be undefined (depends on compiler). + make_command(force_bit, &result, imm_opcodes); + break; + + // $ff or $ffff + case HAM_ABS: + make_command(force_bit, &result, misc_abs[index]); + break; + + // $ff,x or $ffff,x + case HAM_ABSX: + make_command(force_bit, &result, misc_xabs[index]); + break; + + // $ff,y or $ffff,y + case HAM_ABSY: + make_command(force_bit, &result, misc_yabs[index]); + break; + + // other combinations are illegal + default: + Throw_error(exception_illegal_combination); + } +} + +// Mnemonics using "8bit, 8bit" addressing. Only applies to "MVN" and "MVP". +static void group_move(int opcode) { + result_t target, + source; + + ALU_parse_expr_medium(&source); + if(Input_accept_comma()) { + ALU_parse_expr_medium(&target); + Output_byte(opcode); + // assembler syntax: "opcode, source, target" + // machine language: "opcode, target, source" + Output_8b(target.value); + Output_8b(source.value); + Input_ensure_EOS(); + } else + Throw_error(exception_syntax); +} + +// The jump instructions. +static void group_jump(int index) { + result_t result; + int force_bit = Mnemo_get_force_bit();// skips spaces after + + switch(get_argument(&result)) { + + // absolute16 or absolute24 + case HAM_ABS: + make_command(force_bit, &result, jump_abs[index]); + break; + + // ($ffff) + case HAM_IND: + make_command(force_bit, &result, jump_ind[index]); + // check whether to warn about 6502's JMP() bug + if(((result.value & 0xff) == 0xff) + && (result.flags & MVALUE_DEFINED) + && (CPU_now->flags & CPU_FLAG_INDJMP_BUGGY)) + Throw_warning("Assembling buggy JMP($xxff) instruction"); + break; + + // ($ffff,x) + case HAM_XIND: + make_command(force_bit, &result, jump_xind[index]); + break; + + // [$ffff] + case HAM_LIND: + make_command(force_bit, &result, jump_lind[index]); + break; + + // other combinations are illegal + default: + Throw_error(exception_illegal_combination); + + } +} + +// Work routine +static bool check_mnemo_tree(node_t* tree, dynabuf_t* dyna_buf) { + void* node_body; + int code, + imm_flag; // flag for immediate addressing + + // search for tree item + if(!Tree_easy_scan(tree, &node_body, dyna_buf)) + return(FALSE); + code = ((int) node_body) & CODEMASK; // get opcode or table index + imm_flag = ((int) node_body) & FLAGSMASK; // get flag + switch(((long) node_body) >> GROUPSHIFT) { + + // mnemonics with only implied addressing + case G_IMPLIED: + group_only_implied_addressing(code); + break; + + // main accumulator stuff + case G_MAIN: + group_main(code, imm_flag); + break; + + // misc + case G_MISC: + group_misc(code, imm_flag); + break; + + // short relative + case G_REL_SHORT: + group_only_relative8_addressing(code); + break; + + // long relative + case G_REL_LONG: + group_only_relative16_addressing(code); + break; + + // the jump instructions + case G_JUMP: + group_jump(code); + break; + + // "mvp" and "mvn" + case G_MOVE: + group_move(code); + break; + + // others indicate bugs + default: + Bug_found("IllegalGroupIndex", code); + + } + return(TRUE); +} + +// Check whether mnemonic in GlobalDynaBuf is supported by 6502 cpu. +bool keyword_is_6502mnemo(int length) { + if(length != 3) + return(FALSE); + // make lower case version of mnemonic in local dynamic buffer + DynaBuf_to_lower(mnemo_dyna_buf, GlobalDynaBuf); + if(check_mnemo_tree(mnemo_6502_tree, mnemo_dyna_buf)) + return(TRUE); + return(FALSE); +} + +// Check whether mnemonic in GlobalDynaBuf is supported by 6510 cpu. +bool keyword_is_6510mnemo(int length) { + if(length != 3) + return(FALSE); + // make lower case version of mnemonic in local dynamic buffer + DynaBuf_to_lower(mnemo_dyna_buf, GlobalDynaBuf); + // first check extensions... + if(check_mnemo_tree(mnemo_6510_tree, mnemo_dyna_buf)) + return(TRUE); + // ...then check original opcodes + if(check_mnemo_tree(mnemo_6502_tree, mnemo_dyna_buf)) + return(TRUE); + return(FALSE); +} + +// Check whether mnemonic in GlobalDynaBuf is supported by 65c02 cpu. +bool keyword_is_65c02mnemo(int length) { + if(length != 3) + return(FALSE); + // make lower case version of mnemonic in local dynamic buffer + DynaBuf_to_lower(mnemo_dyna_buf, GlobalDynaBuf); + // first check extensions... + if(check_mnemo_tree(mnemo_65c02_tree, mnemo_dyna_buf)) + return(TRUE); + // ...then check original opcodes + if(check_mnemo_tree(mnemo_6502_tree, mnemo_dyna_buf)) + return(TRUE); + return(FALSE); +} + +//// Check whether mnemonic in GlobalDynaBuf is supported by Rockwell 65c02 cpu. +//bool keyword_is_Rockwell65c02mnemo(int length) { +// if((length != 3) && (length != 4)) +// return(FALSE); +// // make lower case version of mnemonic in local dynamic buffer +// DynaBuf_to_lower(mnemo_dyna_buf, GlobalDynaBuf); +// // first check 65c02 extensions... +// if(check_mnemo_tree(mnemo_65c02_tree, mnemo_dyna_buf)) +// return(TRUE); +// // ...then check original opcodes... +// if(check_mnemo_tree(mnemo_6502_tree, mnemo_dyna_buf)) +// return(TRUE); +// // ...then check Rockwell/WDC extensions (rmb, smb, bbr, bbs) +// if(check_mnemo_tree(mnemo_Rockwell65c02_tree, mnemo_dyna_buf)) +// return(TRUE); +// return(FALSE); +//} + +//// Check whether mnemonic in GlobalDynaBuf is supported by WDC 65c02 cpu. +//bool keyword_is_WDC65c02mnemo(int length) { +// if((length != 3) && (length != 4)) +// return(FALSE); +// // make lower case version of mnemonic in local dynamic buffer +// DynaBuf_to_lower(mnemo_dyna_buf, GlobalDynaBuf); +// // first check 65c02 extensions... +// if(check_mnemo_tree(mnemo_65c02_tree, mnemo_dyna_buf)) +// return(TRUE); +// // ...then check original opcodes... +// if(check_mnemo_tree(mnemo_6502_tree, mnemo_dyna_buf)) +// return(TRUE); +// // ...then check Rockwell/WDC extensions (rmb, smb, bbr, bbs)... +// if(check_mnemo_tree(mnemo_Rockwell65c02_tree, mnemo_dyna_buf)) +// return(TRUE); +// // ...then check WDC extensions (only two mnemonics, so do last) +// if(check_mnemo_tree(mnemo_WDC65c02_tree, mnemo_dyna_buf)) +// return(TRUE); +// return(FALSE); +//} + +// Check whether mnemonic in GlobalDynaBuf is supported by 65816 cpu. +bool keyword_is_65816mnemo(int length) { + if(length != 3) + return(FALSE); + // make lower case version of mnemonic in local dynamic buffer + DynaBuf_to_lower(mnemo_dyna_buf, GlobalDynaBuf); + // first check "new" extensions... + if(check_mnemo_tree(mnemo_65816_tree, mnemo_dyna_buf)) + return(TRUE); + // ...then "old" extensions... + if(check_mnemo_tree(mnemo_65c02_tree, mnemo_dyna_buf)) + return(TRUE); + // ...then check original opcodes... + if(check_mnemo_tree(mnemo_6502_tree, mnemo_dyna_buf)) + return(TRUE); + // ...then check WDC extensions "stp" and "wai" + if(check_mnemo_tree(mnemo_WDC65c02_tree, mnemo_dyna_buf)) + return(TRUE); + return(FALSE); +} diff --git a/Platform/Apple/tools/ACME/src/mnemo.h b/Platform/Apple/tools/ACME/src/mnemo.h new file mode 100644 index 00000000..5570538e --- /dev/null +++ b/Platform/Apple/tools/ACME/src/mnemo.h @@ -0,0 +1,22 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Mnemonic definitions +#ifndef mnemo_H +#define mnemo_H + + +// Prototypes +extern void Mnemo_init(void); +extern int Mnemo_get_force_bit(void); +extern bool keyword_is_6502mnemo(int length); +extern bool keyword_is_6510mnemo(int length); +extern bool keyword_is_65c02mnemo(int length); +//extern bool keyword_is_Rockwell65c02mnemo(int length); +//extern bool keyword_is_WDC65c02mnemo(int length); +extern bool keyword_is_65816mnemo(int length); + + +#endif diff --git a/Platform/Apple/tools/ACME/src/output.c b/Platform/Apple/tools/ACME/src/output.c new file mode 100644 index 00000000..e8ed9723 --- /dev/null +++ b/Platform/Apple/tools/ACME/src/output.c @@ -0,0 +1,427 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Output stuff + +#include +#include +#include // for memset() +#include "acme.h" +#include "alu.h" +#include "config.h" +#include "cpu.h" +#include "dynabuf.h" +#include "global.h" +#include "input.h" +#include "output.h" +#include "platform.h" +#include "tree.h" + + +// Constants +#define USERMSG_DYNABUF_INITIALSIZE 80 + +// Variables +static bool memory_initialised = FALSE; +value_t Mem_current_pc; // Current program counter (real memory address) +value_t Mem_lowest_pc; // Start address of program (first PC given) +value_t Mem_highest_pc; // End address of program plus one +static char* output_buffer = NULL; // to hold assembled code +static dynabuf_t* user_message; // dynamic buffer (!warn/error/serious) +// Chosen output file format +static enum out_format_t output_format = OUTPUT_FORMAT_UNSPECIFIED; +// predefined stuff +static node_t* file_format_tree = NULL;// tree to hold output formats +// Possible output file formats +static node_t file_formats[] = { + PREDEFNODE(s_cbm, OUTPUT_FORMAT_CBM), +// PREDEFNODE("o65", OUTPUT_FORMAT_O65), FIXME - add! + PREDEFLAST("plain", OUTPUT_FORMAT_PLAIN), + // ^^^^ this marks the last element +}; +static const char s_08[] = "08"; +#define s_8 (&s_08[1]) // Yes, I know I'm sick + + +// Functions + +// Send low byte to output file, automatically increasing program counter +void Output_byte(value_t byte) { + int offset; + + CPU_ensure_defined_pc(); + offset = Mem_current_pc + pc_inc; + if(offset == segment_max + 1) { + if(offset == OUTBUFFERSIZE) + Throw_serious_error("Produced too much code."); + Throw_warning("Segment reached another one, overwriting it."); + if(pass_flags & PASS_ISFIRST) + CPU_find_segment_max(offset + 1); + } + output_buffer[offset] = byte & 255; + pc_inc++; +} + +// Output 8-bit value with range check +void Output_8b(value_t value) { + if((value <= 255) && (value >= -128)) + Output_byte(value); + else + Throw_error(exception_number_out_of_range); +} + +// Output 16-bit values with range check +void Output_16b(value_t value) { + if((value <= 65535) && (value >= -32768)) { + Output_byte(value); + Output_byte(value >> 8); + } else + Throw_error(exception_number_out_of_range); +} + +// Output 24-bit values with range check +void Output_24b(value_t value) { + if((value <= 0xffffff) && (value >= -0x800000)) { + Output_byte(value); + Output_byte(value >> 8); + Output_byte(value >> 16); + } else + Throw_error(exception_number_out_of_range); +} + +// Output 32-bit values (without range check) +void Output_32b(value_t value) { +// if((Value <= 0x7fffffff) && (Value >= -0x80000000)) { + Output_byte(value); + Output_byte(value >> 8); + Output_byte(value >> 16); + Output_byte(value >> 24); +// } else +// Throw_error(exception_number_out_of_range); +} + +// Helper function for !8, !16, !24 and !32 pseudo opcodes +static enum eos_t output_objects(void (*fn)(value_t)) { + result_t result; + + do { + ALU_parse_expr_medium(&result); + fn(result.value); + } while(Input_accept_comma()); + return(ENSURE_EOS); +} + +// Insert 8-bit values ("!08" / "!8" / "!by" / "!byte" pseudo opcode) +static enum eos_t PO_08(void) { + return(output_objects(Output_8b)); +} + +// Insert 16-bit values ("!16" / "!wo" / "!word" pseudo opcode) +static enum eos_t PO_16(void) { + return(output_objects(Output_16b)); +} + +// Insert 24-bit values ("!24" pseudo opcode) +static enum eos_t PO_24(void) { + return(output_objects(Output_24b)); +} + +// Insert 32-bit values ("!32" pseudo opcode) +static enum eos_t PO_32(void) { + return(output_objects(Output_32b)); +} + +// Helper function for PO_binary() +static FILE* open_bin_and_skip(char* filename, int skip) { + FILE* fd = fopen(filename, FILE_READBINARY); + + if(fd) + fseek(fd, skip, SEEK_SET); // skip "Skip" bytes + else + Throw_error(exception_cannot_open_input_file);// on error, complain + return(fd); +} + +// Include binary file +static enum eos_t PO_binary(void) { + result_t result; + FILE* fd; + char* filename; + int byte, + size_given = 0; + value_t size, + skip = 0; + + // if file name is missing, don't bother continuing + if((filename = Input_read_filename(TRUE)) == NULL) // uses copy + return(SKIP_REMAINDER); + // read arguments, if any + if(Input_accept_comma()) { + ALU_parse_expr_empty_strict(&result);// read size argument + size = result.value; + size_given = result.flags & MVALUE_EXISTS; + // read skip argument, if given + if(Input_accept_comma()) { + ALU_parse_expr_empty_strict(&result); + if(result.flags & MVALUE_EXISTS) + skip = result.value; + } + } + if(size_given) { + // explicit size info, so truncate or pad file + if(pass_undefined_count || pass_real_errors) + // don't insert file if it's just a waste of time + pc_inc += size; + else { + // really try to open file and insert it + fd = open_bin_and_skip(filename, skip); + free(filename); // file name no longer needed + if(fd == NULL) + return(SKIP_REMAINDER); + + // copy "Size" bytes from file to output + while(size--) { + byte = getc(fd); + if(byte == EOF) + byte = 0; + Output_8b(byte); + } + fclose(fd); + } + } else { + // no explicit size info, so read file until EOF + fd = open_bin_and_skip(filename, skip); + free(filename); // file name no longer needed + if(fd == NULL) + return(SKIP_REMAINDER); + // copy bytes from file to output until EOF + while((byte = getc(fd)) != EOF) + Output_8b(byte); + fclose(fd); + } + // if verbose, produce some output + if((pass_flags & PASS_ISFIRST) && (Process_verbosity > 1)) + printf("Loaded %ld ($%lx) bytes from file offset %ld ($%lx).\n", + pc_inc, pc_inc, skip, skip); + return(ENSURE_EOS); +} + +// Reserve space by sending bytes of given value ("!fi" / "!fill" pseudo opcode) +static enum eos_t PO_fill(void) { + result_t size; + result_t fill; + + fill.value = FILLVALUE_FILL; + ALU_parse_expr_strict(&size); + if(Input_accept_comma()) + ALU_parse_expr_medium(&fill); + while(size.value--) + Output_8b(fill.value); + return(ENSURE_EOS); +} + +// Fill output buffer with given byte value +static void fill_completely(char value) { + memset(output_buffer, value, OUTBUFFERSIZE); +} + +// Define default value for empty memory ("!initmem" pseudo opcode) +static enum eos_t PO_initmem(void) { + result_t result; + + if((pass_flags & PASS_ISFIRST) == 0) + return(SKIP_REMAINDER); + // if MemInit flag is already set, complain + if(memory_initialised) { + Throw_warning("Memory already initialised."); + return(SKIP_REMAINDER); + } + // set MemInit flag + memory_initialised = TRUE; + // get value and init memory + ALU_parse_expr_strict(&result); + if((result.value > 255) || (result.value < -128)) + Throw_error(exception_number_out_of_range); + // init memory + fill_completely(result.value & 0xff); + // tricky bit + // enforce another pass + if((pass_undefined_count == 0) + && (Mem_lowest_pc < Mem_highest_pc)) + pass_undefined_count = 1; + return(ENSURE_EOS); +} + +// show user-defined message +static enum eos_t throw_string(const char prefix[], void (*fn)(const char*)) { + result_t result; + + DYNABUF_CLEAR(user_message); + DynaBuf_add_string(user_message, prefix); + do { + if(GotByte == '"') { + // parse string + GetQuotedByte(); // read initial character + // send characters until closing quote is reached + while(GotByte && (GotByte != '"')) { + DYNABUF_APPEND(user_message, GotByte); + GetQuotedByte(); + } + if(GotByte == CHAR_EOS) + return(AT_EOS_ANYWAY); + // after closing quote, proceed with next char + GetByte(); + } else { + // parse value + ALU_parse_expr_medium(&result); + if(result.flags & MVALUE_DEFINED) + DynaBuf_add_value(user_message, result.value); + else + DynaBuf_add_string(user_message, ""); + } + } while(Input_accept_comma()); + DynaBuf_append(user_message, '\0'); + fn(user_message->buffer); + return(ENSURE_EOS); +} + +//// +//static enum eos_t PO_print(void) { +// return(throw_string(FIXME)); +//} + +// throw warning as given in source code +static enum eos_t PO_warn(void) { + return(throw_string("!warn: ", Throw_warning)); +} + +// throw error as given in source code +static enum eos_t PO_error(void) { + return(throw_string("!error: ", Throw_error)); +} + +// throw serious error as given in source code +static enum eos_t PO_serious(void) { + return(throw_string("!serious: ", Throw_serious_error)); +} + +// Try to set output format in DynaBuf. Returns whether succeeded. +bool Output_set_output_format(void) { + void* node_body; + + if(!Tree_easy_scan(file_format_tree, &node_body, GlobalDynaBuf)) + return(FALSE); + output_format = (enum out_format_t) node_body; + return(TRUE); +} + +// Select output file and format ("!to" pseudo opcode) +static enum eos_t PO_to(void) { + // only act upon this pseudo opcode in first pass + if((pass_flags & PASS_ISFIRST) == 0) + return(SKIP_REMAINDER); + // if output file already chosen, complain + if(output_filename) { + Throw_warning("Output file already chosen."); + return(SKIP_REMAINDER); + } + // on file name error, give up + if((output_filename = Input_read_filename(FALSE)) == NULL) // uses copy + return(SKIP_REMAINDER); + // select output format + // if no comma found, use default file format + if(Input_accept_comma() == FALSE) { + if(output_format == OUTPUT_FORMAT_UNSPECIFIED) { + output_format = OUTPUT_FORMAT_CBM; + // output deprecation warning + if(pass_flags & PASS_ISFIRST) + Throw_warning("Used \"!to\" without file format indicator. Defaulting to \"cbm\"."); + } + return(ENSURE_EOS); + } + // parse output format name + // if no keyword given, give up + if(Input_read_and_lower_keyword() == 0) + return(SKIP_REMAINDER); + if(Output_set_output_format()) + return(ENSURE_EOS); // success + // error occurred + Throw_error("Unknown output format."); + return(SKIP_REMAINDER); +} + +// pseudo ocpode table +static node_t pseudo_opcodes[] = { + PREDEFNODE(s_08, PO_08), + PREDEFNODE(s_8, PO_08), + PREDEFNODE("by", PO_08), + PREDEFNODE("byte", PO_08), + PREDEFNODE("16", PO_16), + PREDEFNODE("wo", PO_16), + PREDEFNODE("word", PO_16), + PREDEFNODE("24", PO_24), + PREDEFNODE("32", PO_32), + PREDEFNODE("bin", PO_binary), + PREDEFNODE("binary", PO_binary), + PREDEFNODE("fi", PO_fill), + PREDEFNODE("fill", PO_fill), + PREDEFNODE("initmem", PO_initmem), +// PREDEFNODE("print", PO_print), + PREDEFNODE("warn", PO_warn), + PREDEFNODE("error", PO_error), + PREDEFNODE("serious", PO_serious), + PREDEFLAST("to", PO_to), + // ^^^^ this marks the last element +}; + +// Init file format tree (is done early) +void Outputfile_init(void) { + Tree_add_table(&file_format_tree, file_formats); +} + +// Init other stuff (done later) +void Output_init(signed long fill_value) { + // FIXME - call safe_malloc instead (after having it fixed so it can + // be called before a section is set up) + output_buffer = malloc(OUTBUFFERSIZE); + if(output_buffer == NULL) { + fputs("Error: No memory for output buffer.\n", stderr); + exit(EXIT_FAILURE); + } + if(fill_value == MEMINIT_USE_DEFAULT) + fill_value = FILLVALUE_INITIAL; + else + memory_initialised = TRUE; + user_message = DynaBuf_create(USERMSG_DYNABUF_INITIALSIZE); + Tree_add_table(&pseudo_opcode_tree, pseudo_opcodes); + // init output buffer (fill memory with initial value) + fill_completely(fill_value & 0xff); +} + +// Dump memory buffer into output file +void Output_save_file(FILE* fd, value_t start, value_t end) { + if(Process_verbosity) + printf("Saving %ld ($%lx) bytes ($%lx - $%lx exclusive).\n", + end - start, end - start, start, end); + + // Output file header according to file format + switch(output_format) { + + case OUTPUT_FORMAT_UNSPECIFIED: + case OUTPUT_FORMAT_PLAIN: + PLATFORM_SETFILETYPE_PLAIN(output_filename); + break; + + case OUTPUT_FORMAT_CBM: + PLATFORM_SETFILETYPE_CBM(output_filename); + // output 16-bit load address in little-endian byte order + putc(start & 255, fd); + putc(start >> 8, fd); + break; + + } + // Dump output buffer to file + fwrite(output_buffer + start, sizeof(char), end - start, fd); +} diff --git a/Platform/Apple/tools/ACME/src/output.h b/Platform/Apple/tools/ACME/src/output.h new file mode 100644 index 00000000..e170fe3f --- /dev/null +++ b/Platform/Apple/tools/ACME/src/output.h @@ -0,0 +1,42 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Output stuff +#ifndef output_H +#define output_H + +#include +#include "config.h" + + +// Constants +#define OUTBUFFERSIZE 65536 +#define MEMINIT_USE_DEFAULT 256 +enum out_format_t { + OUTPUT_FORMAT_UNSPECIFIED, // default value. (results in + OUTPUT_FORMAT_PLAIN, // "plain" being used) + OUTPUT_FORMAT_CBM, // default for "!to" pseudo opcode +}; + + +// Variables +extern value_t Mem_current_pc; // Current memory pointer +extern value_t Mem_lowest_pc; // Start address of used memory +extern value_t Mem_highest_pc; // End address of used memory plus one + + +// Prototypes +extern void Outputfile_init(void); +extern void Output_init(signed long fill_value); +extern void Output_8b(value_t); +extern void Output_16b(value_t); +extern void Output_24b(value_t); +extern void Output_32b(value_t); +extern void Output_byte(value_t); +extern bool Output_set_output_format(void); +extern void Output_save_file(FILE* fd, value_t, value_t); + + +#endif diff --git a/Platform/Apple/tools/ACME/src/platform.c b/Platform/Apple/tools/ACME/src/platform.c new file mode 100644 index 00000000..f2552fb9 --- /dev/null +++ b/Platform/Apple/tools/ACME/src/platform.c @@ -0,0 +1,39 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Platform specific stuff + +#include "config.h" +#include "platform.h" + + +// Amiga +#ifdef _AMIGA +#ifndef platform_C +#define platform_C +// Nothing here - Amigas don't need no stinkin' platform-specific stuff! +#endif +#endif + +// DOS and OS/2 +#ifdef __DJGPP__ +#include "_dos.c" +#endif +#ifdef __OS2__ +#include "_dos.c" +#endif +//#ifdef __Windows__ +//#include "_dos.c" +//#endif + +// RISC OS +#ifdef __riscos__ +#include "_riscos.c" +#endif + +// add further platform files here + +// Unix/Linux/others (surprisingly also works on Windows) +#include "_std.c" diff --git a/Platform/Apple/tools/ACME/src/platform.h b/Platform/Apple/tools/ACME/src/platform.h new file mode 100644 index 00000000..792f0fd1 --- /dev/null +++ b/Platform/Apple/tools/ACME/src/platform.h @@ -0,0 +1,41 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Platform specific stuff + + +// Amiga +#ifdef _AMIGA +#define PLATFORM_VERSION "Ported to AmigaOS by Christoph Mammitzsch." +#include "_amiga.h" +#endif + +// DOS and OS/2 +#ifdef __DJGPP__ +#define PLATFORM_VERSION "Ported to DOS by Marco Baye." +#include "_dos.h" +#endif +#ifdef __OS2__ +#define PLATFORM_VERSION "Ported to OS/2 by Malte Eckhardt." +#include "_dos.h" +#endif +//#ifdef __Windows__ +//#define PLATFORM_VERSION "Ported to Windows by ?" +//#include "_dos.h" +//#endif + +// RISC OS +#ifdef __riscos__ +#define PLATFORM_VERSION "Ported to RISC OS by Marco Baye." +#include "_riscos.h" +#endif + +// add further platform files here + +// Unix/Linux/others (surprisingly also works on Windows) +#ifndef PLATFORM_VERSION +#define PLATFORM_VERSION "Platform independent version.\nCurrent maintainer Krzysztof Dabrowski aka BruSH/ElysiuM" +#endif +#include "_std.h" diff --git a/Platform/Apple/tools/ACME/src/section.c b/Platform/Apple/tools/ACME/src/section.c new file mode 100644 index 00000000..ac829e0a --- /dev/null +++ b/Platform/Apple/tools/ACME/src/section.c @@ -0,0 +1,117 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Section stuff + +#include "config.h" +#include "dynabuf.h" +#include "global.h" +#include "input.h" +#include "tree.h" +#include "section.h" + + +// Constants +static const char type_zone[] = "Zone"; +static const char s_subzone[] = "subzone"; +#define s_zone (&s_subzone[3]) // Yes, I know I'm sick +static char untitled[] = ""; +// ...is actually constant, but flagging it "const" results in heap of warnings + +// fake section structure (for error msgs before any real section is in use) +static section_t initial_section = { + 0, // zone value + "during", // "type" => normally "zone Title" or + "init", // "title" => "macro test", now "during init" + FALSE, // no, title was not malloc'd +}; + + +// Variables +section_t* Section_now = &initial_section;// current section +static section_t outer_section; // outermost section struct +static zone_t zone_max; // Highest zone number yet + +// Write given info into given zone structure and activate it +void Section_new_zone(section_t* section, const char* type, char* title, bool allocated) { + section->zone = ++zone_max; + section->type = type; + section->title = title; + section->allocated = allocated; + // activate new section + Section_now = section; +} + +// Tidy up: If necessary, release section title. +// Warning - the state of the component "Allocd" may have +// changed in the meantime, so don't rely on a local variable. +void Section_finalize(section_t* section) { + if(section->allocated) + free(section->title); +} + +// Switch to new zone ("!zone" or "!zn"). Has to be re-entrant. +static enum eos_t PO_zone(void) { + section_t entry_values;// buffer for outer zone + char* new_title; + bool allocated; + + // remember everything about current structure + entry_values = *Section_now; + // set default values in case there is no valid title + new_title = untitled; + allocated = FALSE; + // Check whether a zone title is given. If yes and it can be read, + // get copy, remember pointer and remember to free it later on. + if(BYTEFLAGS(GotByte) & CONTS_KEYWORD) { + // Because we know of one character for sure, + // there's no need to check the return value. + Input_read_keyword(); + new_title = DynaBuf_get_copy(GlobalDynaBuf); + allocated = TRUE; + } + // setup new section + // section type is "subzone", just in case a block follows + Section_new_zone(Section_now, "Subzone", new_title, allocated); + if(Parse_optional_block()) { + // Block has been parsed, so it was a SUBzone. + Section_finalize(Section_now);// end inner zone + *Section_now = entry_values;// restore entry values + } else { + // no block found, so it's a normal zone change + Section_finalize(&entry_values);// end outer zone + Section_now->type = type_zone;// change type to "zone" + } + return(ENSURE_EOS); +} + +// Start subzone ("!subzone" or "!sz"). Has to be re-entrant. +static enum eos_t PO_subzone(void) { + // output deprecation warning + if(pass_flags & PASS_ISFIRST) + Throw_warning("\"!subzone {}\" is deprecated; use \"!zone {}\" instead."); + // call "!zone" instead + return(PO_zone()); +} + +// predefined stuff +static node_t pseudo_opcodes[] = { + PREDEFNODE(s_zone, PO_zone), + PREDEFNODE("zn", PO_zone), + PREDEFNODE(s_subzone, PO_subzone), + PREDEFLAST("sz", PO_subzone), + // ^^^^ this marks the last element +}; + +// Init (add to tree and register function to call at start of each pass) +void Section_init(void) { + Tree_add_table(&pseudo_opcode_tree, pseudo_opcodes); +} + +// Setup outermost section (called before each pass) +void Section_passinit(void) { + zone_max = ZONE_GLOBAL;// will be incremented by next line + Section_new_zone(&outer_section, type_zone, untitled, FALSE); +} diff --git a/Platform/Apple/tools/ACME/src/section.h b/Platform/Apple/tools/ACME/src/section.h new file mode 100644 index 00000000..37af3bc0 --- /dev/null +++ b/Platform/Apple/tools/ACME/src/section.h @@ -0,0 +1,37 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Section stuff +#ifndef section_H +#define section_H + +#include "config.h" + + +// "section" structure type definition +typedef struct { + zone_t zone; // current zone value + const char* type; // "Zone", "Subzone" or "Macro" + char* title; // zone title, subzone title or macro title + int allocated; // whether title was malloc()'d +} section_t; + + +// Constants +#define ZONE_GLOBAL 0 // Number of "global zone" + + +// Variables +extern section_t *Section_now; // current section structure + + +// Prototypes +extern void Section_new_zone(section_t*, const char* type, char* title, bool allocated); +extern void Section_init(void); +extern void Section_passinit(void); +extern void Section_finalize(section_t* section); + + +#endif diff --git a/Platform/Apple/tools/ACME/src/tree.c b/Platform/Apple/tools/ACME/src/tree.c new file mode 100644 index 00000000..6c5e9c8b --- /dev/null +++ b/Platform/Apple/tools/ACME/src/tree.c @@ -0,0 +1,198 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Tree stuff + +#include "config.h" +#include "dynabuf.h" +#include "global.h" +#include "tree.h" +#include "platform.h" + + +// Functions + +// Compute hash value by exclusive ORing the node's ID string and write +// output to struct. +// This routine is not allowed to change GlobalDynaBuf! +hash_t make_hash(node_t* node) { + register char byte; + register const char* read; + register hash_t tmp = 0; + + read = node->id_string; + while((byte = *read++)) + tmp = ((tmp << 7) | (tmp >> (8 * sizeof(hash_t) - 7))) ^ byte; + node->hash_value = tmp; + return(tmp); +} + +// Link a predefined data set to a tree +void add_node_to_tree(node_t** tree, node_t* node_to_add) { + hash_t hash; + + // compute hash value + hash = make_hash(node_to_add); + while(*tree) { + // compare HashValue + if(hash > (*tree)->hash_value) + tree = &((*tree)->greater_than); + else + tree = &((*tree)->less_than_or_equal); + } + *tree = node_to_add;// add new leaf to tree +// New nodes are always added as leaves, so there's no need to copy a second +// pointer. And because the PREDEF* macros contain NULL as init values, it is +// not necessary to clear the new node's greater_than and less_than_or_equal +// fields. +} + +// Add predefined tree items to given tree. The PREDEF* macros set HashValue +// to 1 in all entries but the last. The last entry contains 0. +void Tree_add_table(node_t** tree, node_t* table_to_add) { + // Caution when trying to optimise this. :) + while(table_to_add->hash_value) + add_node_to_tree(tree, table_to_add++); + add_node_to_tree(tree, table_to_add); +} + +// Search for a given ID string in a given tree. +// Compute the hash of the given string and then use that to try to find a +// tree item that matches the given data (HashValue and DynaBuf-String). +// Store "Body" component in NodeBody and return TRUE. +// Return FALSE if no matching item found. +bool Tree_easy_scan(node_t* tree, void** node_body, struct dynabuf_t* dyna_buf) { + node_t wanted;// temporary storage + const char *p1, + *p2; + char b1, + b2; + hash_t hash; + + wanted.id_string = dyna_buf->buffer; + hash = make_hash(&wanted); + while(tree) { + // compare HashValue + if(hash > tree->hash_value) { + // wanted hash is bigger than current, so go + // to tree branch with bigger hashes + tree = tree->greater_than; + continue; + } + if(hash == tree->hash_value) { + p1 = wanted.id_string; + p2 = tree->id_string; + do { + b1 = *p1++; + b2 = *p2++; + } while((b1 == b2) && b1); + if(b1 == b2) { + // store body data + *node_body = tree->body; + return(TRUE); + } + } + // either the wanted hash is smaller or + // it was exact but didn't match + tree = tree->less_than_or_equal; + } + return(FALSE); // indicate failure +} + +// Search for a "RAM tree" item. Compute the hash of string in GlobalDynaBuf +// and then use that to try to find a tree item that matches the given data +// (HashValue, ID_Number, GlobalDynaBuf-String). Save pointer to found tree +// item in given location. +// If no matching item is found, check the "Create" flag. If it is set, create +// a new tree item, link to tree, fill with data and store its pointer. If the +// "Create" flag is clear, store NULL as result. +// Returns whether item was created. +bool Tree_hard_scan(node_ra_t** result, node_ra_t** forest, int id_number, bool create) { + node_t wanted; // temporary storage + node_ra_t **current_node; + node_ra_t *new_leaf_node; + const char *p1, + *p2; + char b1, + b2; + hash_t byte_hash; + + wanted.id_string = GLOBALDYNABUF_CURRENT; + // incorporate ID number into hash value + byte_hash = make_hash(&wanted) ^ id_number; + wanted.hash_value = byte_hash;// correct struct's hash + PLATFORM_INT2BYTE(byte_hash);// transform into byte + + current_node = &(forest[byte_hash]);// point into table + while(*current_node) { + // compare HashValue + if(wanted.hash_value > (*current_node)->hash_value) { + // wanted hash is bigger than current, so go + // to tree branch with bigger hashes + current_node = &((*current_node)->greater_than); + continue; + } + if(wanted.hash_value == (*current_node)->hash_value) { + if(id_number == (*current_node)->id_number) { + p1 = wanted.id_string; + p2 = (*current_node)->id_string; + do { + b1 = *p1++; + b2 = *p2++; + } while((b1 == b2) && b1); + if(b1 == b2) { + // store node pointer + *result = *current_node; + // return FALSE because node + // was not created + return(FALSE); + } + } + } + // either the wanted hash is smaller or + // it was exact but didn't match + current_node = &((*current_node)->less_than_or_equal); + } + // node wasn't found. Check whether to create it + if(create == FALSE) { + *result = NULL;// indicate failure + return(FALSE);// return FALSE because node was not created + } + // create new node + new_leaf_node = safe_malloc(sizeof(node_ra_t)); + new_leaf_node->greater_than = NULL; + new_leaf_node->less_than_or_equal = NULL; + new_leaf_node->hash_value = wanted.hash_value; + new_leaf_node->id_number = id_number; + new_leaf_node->id_string = DynaBuf_get_copy(GlobalDynaBuf);// make permanent copy + // add new leaf to tree + *current_node = new_leaf_node; + // store pointer to new node in result location + *result = new_leaf_node; + return(TRUE);// return TRUE because node was created +} + +// Call given function for each object of matching type in the given tree. +// Calls itself recursively. +void dump_tree(node_ra_t* node, int id_number, void (*fn)(node_ra_t*, FILE*), FILE* env) { + + if(node->id_number == id_number) + fn(node, env); + if(node->greater_than) + dump_tree(node->greater_than, id_number, fn, env); + if(node->less_than_or_equal) + dump_tree(node->less_than_or_equal, id_number, fn, env); +} + +// Calls Tree_dump_tree for each non-zero entry of the given tree table. +void Tree_dump_forest(node_ra_t** forest, int id_number, void (*fn)(node_ra_t*, FILE*), FILE* env) { + int i; + + for(i = 255; i >= 0; i--) { + if(*forest) + dump_tree(*forest, id_number, fn, env); + forest++; + } +} diff --git a/Platform/Apple/tools/ACME/src/tree.h b/Platform/Apple/tools/ACME/src/tree.h new file mode 100644 index 00000000..e8efa55f --- /dev/null +++ b/Platform/Apple/tools/ACME/src/tree.h @@ -0,0 +1,50 @@ +// +// ACME - a crossassembler for producing 6502/65c02/65816 code. +// Copyright (C) 1998-2006 Marco Baye +// Have a look at "acme.c" for further info +// +// Tree stuff +#ifndef tree_H +#define tree_H + +#include "config.h" + + +// Macros +#define PREDEFNODE(s, v) {NULL, NULL, 1, s, (void*) (v)} +#define PREDEFLAST(s, v) {NULL, NULL, 0, s, (void*) (v)} + + +// type definitions + +typedef unsigned int hash_t; +// Must be unsigned, otherwise the hash algorithm won't be very useful! + +// tree node structure type definition (for easy lookups) +struct node_t { + node_t* greater_than; // pointer to sub-tree + node_t* less_than_or_equal;// pointer to sub-tree + hash_t hash_value; + const char* id_string; // name, zero-terminated + void* body; // bytes, handles or handler function +}; + +// tree node structure type definition (for macros/labels) +struct node_ra_t { + node_ra_t* greater_than; // pointer to sub-tree + node_ra_t* less_than_or_equal;// pointer to sub-tree + hash_t hash_value; + char* id_string; // name, zero-terminated + void* body; // macro/label body + unsigned int id_number; // zone number +}; + + +// Prototypes +extern void Tree_add_table(node_t** tree, node_t* table_to_add); +extern bool Tree_easy_scan(node_t* tree, void** node_body, struct dynabuf_t* dyna_buf); +extern bool Tree_hard_scan(node_ra_t**, node_ra_t**, int, bool); +extern void Tree_dump_forest(node_ra_t**, int, void (*)(node_ra_t*, FILE*), FILE*); + + +#endif diff --git a/Platform/Apple/tools/PLASMA/src/plasm.jar b/Platform/Apple/tools/PLASMA/src/plasm.jar index 716e1feeb8210ab09db0bb4e20add3717f4bc97b..f6f9605086e48f2bb37d6e434414d2660937bdf1 100644 GIT binary patch delta 174509 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≈&e)d{ni9~Hnc}0tj-<1~SeNP^zIG-4hlap55 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%0D#@;R`yxvG|l7T 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 z⪙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�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

#JIQR=YOzB`l*^n*me)AQ!JpAzn3R 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 -|ly z9EXt7$4(x0s$uK9$EU~$cFSdPS4n+^HHb|ySRmqhHKuP?jZd6W;}g4Td}2q9Pi&Ro z1;2kKwp}n&V&_o}U%}(fTR*2We+h#w@=2>={`R8XwRJ33R`w6^sVD;v3BUa3O3&NE z9mI3PW(P2PxnUPGDo@#b5qTA1wnw&i%OvsgxR2wneR}M*75?S4BDCS5O#GUF#s9KG zh6M)k{wy0mB!gHzHt;I9#a}{h0x&Z)a({m(jNFGx9+~EQ(sU4EAOMd*aKE;#kMNIX zpp!IemHZJJx0`{Y=-j{4-dN7$u*$*EtGrDtKByZ0-c*3yFQ-~6?m1D#jP^jPS4?T8 z*eRYZG3`dG2G|tfg=>dx+bv8qrK7u;75L4}--k=-6#;wwv|qm2!R_oX`;YJ@{s+B@ z*M>WPsjH;fR+sjbl+LdXcC)IWwQJOwQ?&F98A3i4Fk4al@@N?B*h2(6cJeEB0vPYJ zpJua0TBx-dU4-L-;?jK(C_=0K2Pl?rwgW}2?>wOEfNtotpTKn{DMqfkS%RZB;3@8* zQo4A5(29`kXea2LDy80$zZYy&<)$;#UIANw?L(->gcokeLatr?7WMKp)Qj3y+fUVs zZWKIXQsKSRCJeno;WuKFaF*X^3^0wrkYA?lo!72rVO!!y64s>boTqnEipJzbhNhk* z8XdJ62^&2o)h>dUJ~0|Q?R1Lv+S~B)K_al7zx*xoOb|$8p>SAyNDvMG@0HtfbHZJJ z^AoXax+>o_=2^UJJ{G&?V=NPE1BzbEp8`c7sE>i7tL%25xLf`X6m6m-#ja5p2+FmY zx;>OzuU@_Nvg)muQMlr1|AxV5pJG+yuIti&?yKbm>QF@|>UiO%ZqBSjVYm?Hj?GJK1?Cc;~E+& zW{zfU!GG@u6oU{)0LA9v@D5vAHENBwWf}(~wt&#nHg?*g(E3smB-)j@1-dAIMpM2e zH?E_S%r-{bD}NCpS_Mi)r|m`a$A&e5adh`zVkUmA%JpHCU_(qbP>k3&f)O)@2+ek@ zg2|~g+vkzXX;vTpF%sw=q(xbMSgX@HNC&;84g#jHLM0nai7?t~4u+C@m>*lp?*U&89zQ0>$#_p8*{SbPdp>si&l^&7cUNt)U!T0rWbc_W)f?DKxgW z0_bx<(Py{=(09m}XzTclyGZtwZK&wwPNrA%igu5VU?~PA$7!dF{BR2W3Z> z_q;fw3vo5Q%!nTCaQa76k2V%sa{ zNBq+(MKN96Y14QR6rs0&tpk8p;r&bQ-G4`K-#b1PU5ZkP0p8YQ5rbgey?r`OOfW2c zXT&>#%WQI5Xegc}{P0KnvLAjT`5J74{qTZ$Nr>R1%6aImuLV!?1T3kSge5Jbb$SR( zn$c{0LG5CoV3V0&1iBLFcYz|b&ecG%tN2Qw=!x$K3S!VYP_ylS8lXP}3O1dy7U&$H z8-OkcWp*4;*p==?pf3Qu7AWjW_fbk@+oMHJRq}(TL)ulzXQnRLq__)-p>0v%D6>vPt$E9WgkMVH{_NbMgqF%lb_^??;4WhrT2kUJV;EXem6+Mc$ED2udOj|dvNBqD zg6jmvUXp8n2G*V;@zhC4Jhk|^1cAApk4sROJ$zh(wA{eQCFshB`MA{F;xRrh>Fu1A zGMaMYUXE0c^HdAkCzK6BlTNH&5uCG9#Xa#4;2d3Bx;PC6i=**C(IvE$%u12TZ*saz zJ;HFfT<;pD8YH2yh%Z!cq$?i|UXC;QsmGK_u8RzRfh=oFQ3P4DnL8B`BBaP@xW)FM zhcZ65T{JPq7oaL>)u)z=CDzmTIl(u0jFO8~{ss@;?$*_VXg6j2GRzjZLu3mqEn@|6 zwm@hLIN#6^)WOC8jdlZ2>@L3?C??Ba1r+o6mIB3=9Df3e?W90^ahBhRms_{Q#jY@g@SyxU}d=RQf&XPp9i!QeCTU8OF6R9aUPyTK*N z>**2ss1(fl3Z*?tN3b5%*lkAx-y7mT7Dw~5KaqY>a* z9|1S`FKla4emn>G32G@fwBr}GlgGi4G67peeG*}*C4L)&zm2{k*Mz7fqi6|Tx<cpL`!E$DuGoi7TDS(aN+{)VJ3S3f{h%=E`6ZF`{G?KDDYM+{MJ%^GA-6n~TMq)o zKH8u?S|}9s<`JZv&l*MWsMz0KFV2%BclF z5vX8ipv!=s1Qcv@>lZ*l&RHLSAj%}>iYc_C`l3x}z8S9bf2O=jG{Mfz;3O{Mm*#$S zQ5PY=Bo1~8?S?RAXuK^saSntSruP)>bgVNm#YMNLe=Yulx7}!ZMiV1}6f$SipLvUu z^QKDLPa(G(@zQ^)Gjoi(OKAd)qIcN@TanX)^{lxDy2VP9wZPo^SoVv5ep_kw3%=tJ zLhvx>NaBW6CnFR(IR;Okp0N7p3(e0*Rv#ZgM%hGVy8ooVcg`KfmH#-8G@-dR3DTyT zp#wh1ofVu*PqzO;hhNQoBf3R!W8*PQE>~nGk@Rr8*I|FzqFZj>BJf1#7)BE4^z_s| z64w)iUGCxb0N^!n4*Fq#F0{5OhHOV(!!Aq@Yod%fqo@De;N2tXo%=Si*Z-<>tWdRS z#5Jm1nLhtoW?|+=myDNf%mk_K2e4KRquWCLec{M#jmZcn{64!h3ZC#W2OwKryBH z>p;;sxf|$wX6jX#)B?=E3K0ZafnwjLOM$+{%)JWHYT);342taobS$L}*wy0+y~eJF z`Pg#JNoh zyqBWwD^z$H#9{PytM!s4)uOhf#_qjN zZKcCfB5JWM%=hG#%>Dp`vN5T;VCbJoDxFcpY6y0JT}&%oCSIF*x{;|BgYcZ>aek=i z&BCRSYrGi!8hIH_O^JYNO$z1F^+F!03t??vP6n7t!!k} zVyVr4kAcpleztb)Y>+>n0gAnyW&#Cc#9jy#duIF^=sGI7v1_qs#%7@CRO&I}R%uuOs4`H+c z=)>gi#w952UEwAJ<@DFY9M2;0aXFu@PKHi@uF5e%+7tB@0zIilXim00o3archFxJ4 z3xb@nb_Go+H>{nLNs>DYvqs=xQ^1BK6UmnM7j@il<>V}*E&M<#j4zl+68pbd92TuO z6_xpg+&{S1dLdnKUb8gH)S$r;-Quf}$L!!MRt5alOrIlpWXQ)UK^-4y5iy7-J8rnKlvsgS)Kdy1aaOer>%EhNN#Go(YYF48t z5^6x%(4}F4MV2-@ymSd#2L0sVw=C60lAEsRbO?X3L;rNdQ$>R-t4rG&CNuIBFjJ&C zRdn(Oe)T3ToTrF)|BXgi$}+OWy+qM}KVzlkH}VATLs$M>ePybjnASl49eVb3y2CjN z7qC!BRESclMFj)2RQpcZHxbUxGUGv6(RF00Yp)FQ@t|PtN!oA8^Qu`4bwmTL%@g|; z=5eX&5{EB2C-yE!hL>;~Gm~1oaKo|E`4(dDu-L`9VAklWSc+dNHq(b8K=(p_0nk0) zuQ;#7#k9wqW@qqTR|CZ~$#p;xpt}|*W_2A76va~$P!vyXnw>?lvoFvo)V9{nc7WJ` z`(zP_dq1Ekc8&*%%`R>M3gX6j0O$)qHv$E-$c6i7!Mt)ut5fD;`awMp)N!38dXRL?{)~upGhl`CL+@X+P zz;%$+oWUX9vuE9*bJLW%HgRxjcyQqo&8gde-fCD`ME4$$6@!0uu{+{trQeYy32Sv5bJNLwCdzrvkJ}^Y)t;btEn}4cuZ`PWF=cU zbJ8Sr8D8*M3H^6e@XI^$3k|S5%2$cOM-&} z9NJD3QzA%WR}Hy{otnz^*P>p3V@OKycYl#CU!=;|MVs7JtPtuH>t4oL24^On&vh)sS5_qp+W3_@eB2@v8WzSg7yv^ z)gCd0i^{K6MNm)q9xduO7?ZkMwK01JZqeICr+%$gCZLe>Zeq}D< zG)s5m{)^6KtS}s{@)4FII|V*IS+u4L%Vy~=#8#5e8^eYLidFKR<-be1MZqr^Lquy@ zymNIs!@VjTH;dFZWQ)=-RLzJKkE=hYM{RJ9q1C+}-(?Z9G-OY}y;71(@NkEE_SzM* zSE$Oyn4i6W1KxeTSR{{c1M^d+sZ`ET)d>uWOa+yvSe+3v5tpb@bbwtI^#7rRqNjaO}fCAlxsr)bHwF}&qhch)V6exl}f$~s?X)%8V`V?3aHc<3bj{r(o$eLY1PxUOI6R97j zT|f`@9H0pPG#e=P@AxCojqvOOPy~M(LDr3bE&f}yx7EfO9W!x8ioX$5YY&BqV~ZP( zQsnh^_(FA_q{1d8j!VIO8ZX4^ z6lxlv6w=A-uycdrZp0ZC$Y!I|$Yv;{T~7F%o+>p*rAkeDmc$MDSrRwIXPHM6uYZSL zUFL>p-_uWOkIuI2${?k;LI$H;+k(M=_%Z%6Lj1im{O_|#{?a1&3%n^$>^$nfLXHvb zef77GQhzs%@J#gxpQ#$*0w-F2Pno>a*k;lWP`6N8is?U+QmHs{%KMM9ZuC+_-O zAM*khhJ1mfmsg5xt8i#v7fP?M3+Z)=pKdBA;D?<(xlpoR6iU`3j?V``(UHA>H_&#V zQ-C5|#}|QOnQ|{sEKhy{D3&L`1QbkX{cWIFjIaRc7NECkc5y6AwIbZlyania7>8At zXE$*mAV^F80ogU*wgTv8ia10$=^VW=5TY0v6!z`l9=<+XeV+1syGuI&rnTzkWI;N|`@a#Qktkc>*ZqS2@dM5vEo2Vm#M7da*Y_#uTR=&FpO@3GCl?*} zVrqO`8eGItCMUZ&i58k7!-%jtIEU+oiR}Rjfh-7o!o$aHTy(-_+Fjb&%7m5{Mdr%( z6&k=pFD9S09ShTTx_YNaHf&e_*Od;xQHr`w;%zDqBdjh*taqE1mt8Q1kY~zk7g!Fe zgdRLyPU(@K%a*WWY{&3_J(44i8ED&;?SrlYg0fUQS=BFNq&QA#OBzufnJ9^q>*07w zYEKqw{zgwvJ3m;UHr0`8i#nZt<(LUz|4GWRR4izbgQQx+N)PfVwFeo+-;lE;vq{-D z(Fm&xoLz2IbRp37K(X!N5kTJox&S!PmBjZC zNXQakn}r*s_Lv&fx0M_2ZxHJ zRI)mHyF(I#2sH_RE!3*cAJvHQow|>R-)>QtPGeXB+sp&g%_y*C90foUx14pkUCSOp zTr`tk@j^TIhsrfE#O{#m$P4OHgFEv(h@|Vz6gIt%mEoD)Pn*aRWX%{)9_yi+0I zp1MR`7&-N$Ld{#Or2o(o>P2v&{w~Ix3i>zEd&|FjphT7RqyD_mX~c@W4Cap?mEV_zcP7Y9u{Wa>?Ja9c2mj=bzAc<2owwwb7!C^7d8O}gT(SQ`!jHVoi!Qg4B-Et13C}r_kd!;=c7O| zwzm&ZkQ2`NnBK;9M$|UWIU&W@9<2M<)G?(~)$yToVDSDF58`~15|T;_FKr*kA5^g; zt??SMTd_)2vqSnYIk?468O7If#b^8W@I+a`PANG~jZsw|xk;&U z7A%Q>M$xKKttMNvuw;YiZ)qDmIN=G!z)tWC%I9!M(p8bDHhbt!iZTx6-PM7v)bfx| zsbqsb$@q8LHxH^hB`9n*ZWETbJ%RqbiHc@GO~{H2f2?Hy9R-Xa`>{^VyP+Mk|G7jt ztr&SQwG49Qa^<`B-0iGo2n^)d_v<$y_PSJmVpL7-c=U@A+dQg#aHyNK-a+OCChPt! zZDH&x#!FrUSoXbWA+bm@e$G}7psL3E)3BX8Z4Ut;E*~7^Kq%4mS`vn*sThKt`#P>0 zbmG9M73c7l>j-P+#kHR;8SlXUb7{P>n7jI!$`V)2`Jwo16XNq=zv4PSx4`0a2O&Ox zcR)G%YoI7DZwERP=!Zbjyjlkoqg8JJMS!%EG<(NM8Wv^PJDvx07EmEJcf>lr_ke=9 zb%p^&@!0|t%qyn{RET}b!9JL6!WZR|Iqb|p_2>UVtyqfGHG>BzM6bDRUa)SZ7mRJt z6M*m8GT*b?23f{u=K~8uLWOEckEsWLzepHHW6~q-a^O1TM(4@gC?$rT5^;x}u@_0n zgN5Pk$QVP7qADcKl$w}oO0}kPVL3@a)}7$d|0AK=o7;_p@-lD+Rnv7)@WPR{KjU(k zXXdgLO`%i4oJBUuFd29RtLwND&r9_;rtAsX4XNHIWVG>HIs&Ar!j&vL-bB%VV5)rF z9zm$i)2O_%PV5Z*zhJ=F%34)yj53eQRU`Rl9ZpyMs$7PRIA=-G!=P*JWcureXcm%3 zsNiw+;CIt2P~chfX`zyPBk7r>avo-$vn8fjsJVzU>#0|@KCE1chy$n1i{)Xyr>aY# z#yxVIa!*}~3Kp7KSF5Bo^IxbX|w4V2LxWWDH?h zgb3|V65>W%@M2~KMTs6IO#5K+z`s0#Ni} z&IXD_^Va}HB(HyK_Rg5<@d40b*c%1tNT3Zs$8!GZ&e#qTgz?Vk%X|)hC>A5O1I6OQ zj|PLitn?)psvjX#9@iQd*z|6$el~p_rQJD*2rSyz$|^q(uiX*rcT0J6%CnXJ^>B{t z#!A5{#Rb+s@H>-C*M;|gS3)XdUTdvo;LKRbGOXW@6xKQ_HSVFPO->1KY@eDxn5^$0 z$Kn;0BM(?RtKQwAH)fpC=_uIUEz) zNC{JpNo!k7H>>d3l5W-&rJ)#e15fCMCBawY^xR=l34aJYb2J0b$Y`SsJhN&rz%w@G z2IyPM1J7WPa2tSUoFgRCc0hx5f*!Zv6G1p2Bg*~)W zqrwVT#mEYJ5C5Jzo~pnpjAy}qAeIE;r2AH_zXbBjdX(jtb)R2xRikw!$KrMovAA8( zID8o>wldfX6y?`{T%Z_(`yo(7{Q4PC0SdDVB314V6pTOPWT0Ev_u7c>B7rmz+IZ<^w$ZMhY9pWp$^~=VV{0MCm15F=)(=|UTI;l6tpVB`nw}(jC z(6jDp!5Z35g*po)XQM!i9?X-GTZyf3%%E#s!Jplw@3`UwWc zH*6{r(2wM#5z%fe%o{0G8T9iQKX*39;0v{khPVrzZqTR;Zj@iKj`@*I7zS{yeFcft z28|VRPc-3w>AO*(#Z7Q&FnLH+x}T>U5QXOFg%hOBHu#pa`IfTokjB(#RSFN+ID?}> zv#Di#aK1b>!TFUGfSI$yMgy0Nj&$Gh%Xg$ZPNSv+O>}+Hp5UZ(GU65q0mKA~^19%) z%Jhyi&kkGad?*^kyq)?&F~=L6w-#BfX79>1r1q|V$W?z16uTt+2`Hx6O)vMto$kic zcW#kPCZCb!6;KxJDw2A{OojRIxIkQdKLIR^5_L+WQSIZur;5Mvf+NX({2iVDH0swE zsOz<_TVpK@oM-jP-Ds+fyQ#jy5`@Qgx=r{HZWJ-2+_foBl5c6^m|}~>W%A6^;#6Qj z*N0etn$rcA=2XS}mttu~*)AwichGE1ZqZ%^3V-Wh>5T-*sN?aI7~WZfe*?8S z!9Q?nnkcASPsLH@>3(js^wS&k(-Ek1qudb02~K`|_kNZCCim0klm{+L6e~=a8*4`FtV=gDy%d@2j}- z@ZsZ4_9PvGGV?(Etb;{b(qy=GueJ*R=~0Ff4HLN?qijL?`YwG(AmibG2li-R@xxb0 zW)}p5rGH3P!2vz`GerV#I^v46PU6>p3~aN5@tyFFlY@Z(DK~&wvwf3^Sv^?hGNQXb zO9z}_a=SEatc(9Vq(`6Z=Z+Vb&}?>;8JF(9_i$9J#o$!;=tF7ZXaNwamVP+vYIuk7 zY!6b_tiCt(3zz*FD(9zF(vEC%I*z^g+}sRS7@G3hpMq}`X$bX%5C@YUfP)r)@1z5_ zQg-laT4&R`w_fent-ytclL!hHE|jfv$c^sD8WRP>*S9l{!ua04gZ$jS$+7G0dn_6g z>SL}=h-#{ASioV!M0Q25t+PT2d!A@o*P-OFAy?H~F|wuEyW{l- z0Y%iX=|GX&o(2@_ycYq*^PUHPip}fZ0E)=PI}>CtDF8)^jB0N(oMNFkk^X$X=mfx$ z6|_^D2Il8f&grcDIx~LVX;jr%sK1H+`r^P%r#wHGgDJB^=tlv-@KiPszs$H6P1}k2u)*w)8kgs1({j%}J1nQE1ORBK>T&Zs8 zl&N^w8XCK+`Bkmk{WMtXSfw7EcM1Gw2s}>Xh2o=w_86dO(EbG|h+ktk(1k$pI5s7{ z04TOvcu%uOql2~x6dkl9j0s$UVE347@SDo^XYX`27VUyQbuQ!PDq38(NZrp#dkgMd zVMljLs+PLYu+GcN#wyx>UHaEl3EVtqa$_4C)Ox!Vk@EVX-ND%O{gv9wU&v#b%uuuy1Lxw19w9Jpr4&IL@0J1NDxQUZgV3YzuO2#jnS%y5 z2{hJ8!_Vdw+1k#r>f~C3-<{x>@zRwk6U6T(E=ycviNn&I^D|^KGg=De=Uh9%h1SlqO z>`@jMYq#tig=gO?vu72DPqH-317xfl2V8j@22Vy z&Mmjg@qA1RYMMtwW|igOP6-D$uv@KPwp*>$5=y`uguC~DdrD!gcK3b>{!^vdWAI)l z07V#_9|P@Rx9%9MTyF-tfR?8{2Hmc+5mm6j(tfgK@ylb!7S5RETr z%9^3G#XHcY9oSQ?FszoIek?t`zUX%Aj}gDHB%218RE8mVg5Zi&>g3C>Pw*?<{dM$Q z{@@*=57uv1Jq*2yczTEO+XaVCjuN}Yv7AjF5}H_lTxWyqQ_iz1H5+bJmk!md@wB+B zxzq+ZqYm8j3rcbhnoohhmMFQp=VU$hCnOd?d^N9@`h>W zhv^h2h;)jhlp1=xG%P~Y*oDJUV?{V>Ebt}cNT3L+c_UB+)!Ybl9q^wcG=4a&XRh=Tvia1cSLnlRGh&(%}6jzG`*>5VUd2Gp8OfVI=^ULJNHFQZQjHR zWKcf_H=3G!2a#W`??V2>JyQLp99_1l{bE_WpR!y$B3=4Uc)JEk*)Q5lwO`Rs5+^Nx zYeNL@U=QGXpe`07PpVK+=n(-ghA+T>U+s0sFL z8ovyUpVUXfCQb?Ouse;hTgg15>E}9sG}GLj2e+;TN_Tx-Gi8!^BQ?e1#`qpOpQ&@`YJoH-jPruUr-6!qn0 zKrvWzpJtDP+nUD%%>kVQbSlWB2|%X-Z3T+G2d)DO^34MMdmP-~dJrfgKG{H5YS@L% z9=8$R8RXnJM0_H62<{K{7NyXCT}q3)SG!QL?-}=pFx*L1Z6sjzMgiU~??JL{9KMXV zU&Eqk``Ha5vo8Mv{pl*#7#D;#mQ7+I$E34=D%BVFYCCi~ zx@uaA&Zo`4X$cKwq~y=5nMK6IfuXC}II`@v-oDLgD}lI8{+nc1ysVt$a$GoIz~w$Z zl%UJ{zMLYE96j~@m0KYEY`^Ym;q)uv!0L}hzC2%}6{XhI<2eLkagz1K=)u9Y9CC=>jt`zq9pb{cL99} zD9A8t1JIX&_5u9}-r-oFo3UX*kjgZoJYT|Z7$J0?a*9@$zMFDSxwv)Re%^i5%1yC} zUG*krlec~uCg;9?PmKJKqPwL3m{R=`^tZe&RWgmhb}mOp8_}vlyE}Q}82bLM@B!vq zsgu}pfA6_xztu-Ps|TuYNVSV$%lsEP(x-IYf0@@x&#K_|!1kNAS1TT{ zVQ@E6uu}8Jem9E@`(v@@E@7qL)rvKB@_$y9}XZ4>a^KFU* z0I7(2E9!*IYFs3}??CnQN^0<3RV*Ezmtl3`Jhc>m@2}nkJu)=%OQNAM?we&l4m#y) ztKZkVb5iLheT$3Pdsn+SysVn|95&xm+~{;&;|1}h`-}B~oV~mgs5q{V z2Nkc+ZJ?r(BtV7jj|LS7_THcm>*F~mh)QxJs8mgYiZS6sT|H@nRL8(Ju?x13;E|vb zH?|yqRL*988B|mfJa?DtwMlK4{{USBD#vtQRr9bzN5%|qvMj3Pe2ua`!txIq_M{_% zg>IAyogZwh@fL@cMEzsj9|-8qqh#wJnF;$!zSF6<`(DqiTd$?Ck+z}YjnqAcPjNvB zvhdb*)Dg8qxK=fj8*r>ThLPF}S0w7&0xH~p%aEH4FJ;F$Y*&IoPy-uv26kPyJn&|1#2AU4QBRbpexs3@kZ-`=VSS`H=X;s8gP)1NCN1;T zsbDR^QiW{|6V!***2l)n=i`Uc$JV{5*m-zB#KB^4)jLfzs_P!2kGk&4;vS)|yUMAK z*VkPK6-?6CUFRB1g=l5&Kd`;{p41Y5`_HPklZ3wR7P<8GQ>(9!(AQ6@zCK=Gch!%X zq_4Y5(@X_wYwx7Be^NO5F3>oxy)U!AYDRqDu@U*D!9rQ+|JKFjU;YU6EiL>{l>F0$pkL`?5EDfyP%_mp>mxOT ztx+l$!cz9d&{v*Yb-1iOED7uV*>$2wjqgV=u#Bn-y|r^;pj`VW zdM-zOGMy|(b4k>5IYt{r?wb&Qb<1M%$VZ8*?+6!r3y%=@`ae+o zA-Z7|DE)DTJ!{LFDo|uu{}N|2FqLSjN@50@)%eHa>D9ru|rmCBNrP$8xYEpC%s!`o(=>}l#lPCM z78Mxon2a{?G^_e)4>{s+StC%JsQ=&Pa^yUfv*WQooRV@GmG|sF(WM$ebqHbJ)$+5+ z2o3VI)fgt{WfB8Mv0`?O4skAZb=z894OaEk_o8}Ar1B|`Xk}o^1&+_AeDAVSD1+i3 z>TKd~)eLRWUJE6Whbq5+9jf^D;SMIURp+VyB=t|D@`oonT1e%!?bM#^WZn&v%)8+# z!eICURsM34QVJ>~SG^CPytb?q+~xQyZYplPzd{0SO*t>pr;fGSO}2rXK*bpJ4XA7b zKLZt^|71`pjcS8-fKKxnyNi(j5$Lv{5dL>>0Br-kK>NdY$M=kX-+;ac`W+~Q{O~YP z@i%P0#CS^`Z>*S+9u?ymwRgI7Fr{xrT>L!R=zY6~%BF&3OpL#$%3V|S{8yOAdut0} zT7IuBgh_gfTXI*Q4E5{bL0msSG}jM%as8<^?eP68i&d89+~f-G-Y$yymEHm{$)wqI!eN z%aG|(zL{I~hUGm=-4#qWWsaAYgr^AtubO>8y{bw=4;-(YT=|MkbgrjKQB{VCZfMf0 z9OL`~$0i4zaLD;&xZ|)rT`69MC9DJol5lx>I2QfcuC?lay=IDXv&xS3IIO$UEve2} z$Yo#F8H_t=D^@_)xE~le|JEf}E{d)a6 z<(@L{t4-vZ8jB-XvQc@?r&>!{J@~!~H~YHPwRf&Hy+G8f@^Pmf`QOW0v^(o1F$WclE0V;uA+kryg z2u=o-z|(_$#w5{a-T)PSrWJHsZJnC5hXkO4O6_lKY?EX|n++;8U4I37w=PyU>5rff zfXWd{uYqENG`;}E1{od=x)$`{2DiwfCDM)MU}YWCr4YIWUHy*516Yh|i*!X`2C zt;bh60Ad@C){@Efbq^g`j5)*4)A5g9%Ch)kuJe{IJ;g~(-KuHpEi`&d`!!{FOj?zv z9@@T!Ca8zntq-bl?1pD3d_h~ybOKUD#T4YMcNH5kl4_@T!l{*`Pno!{hK8cpYUxxE z@7MQ#7z4fII2+jP%y;K&)&T`nnSyd@g=lbsa>mTmZOhjf;bj#tqY8ip_A702%G{YB zx+;#o!#PvC{F8=yKTqS<|I+HqWja)sZqOcoc)e~sja8oO$%zlo*Ibab7H}>-Oa0<@ zR)0m^nT#r=;I~RrGN!IF$NKsmal-j$yB_P(T=sqH=_~ZT;==E!3d`KR4t}OCr*=!} zVb{7QTU2p^>QqpBXa&-@pZeHkIh35M%mD*Zk#8G4NG=PWoOFNKs*Ng>6DX(MgvL34 zc@raxwK4}wX1H=(aRa-ZoBWw9hs-m$5#%Bol>e2&@)pvHS_fxO7{ukv}JE+9TMh+IZ zg&{ibn7rQHMQ)=0aSk2TP(6N_$khMb;G8{A<4x$kGV^%UVIDMu@uo@^4*klfa@D8E zv-Sd=se??XoTO_*PB}-*#8Ym6*XP?zkpj%W@EKE+`0l(V#)tpYyuM;7bI&s$D(IaL zWqRjBrM>f^BHo!M%whb&K-zM+m0_)3cWwJeY>#cZ+DrAR+^{hi9f|)N`BAiqD|BzJ9+)(q~voIXY~sYPeL9$017} zMBEau>-EBp-P4_axn9%-wmlbr@PCQzS5&L`a6nRu-ptLag|ot32{k@Yy)E zGaR8lx{cP&b$wZz$xl)@oGZs=ygc-DzP2qAfKYJ2n$ z8(Hvya;>5pu#ts9mk!#CT@+|2Vw8p2Ux082A1l4y!6`xqvG3lpwjXX zz17iP0qx1irS2QlYwT6=jju1zQJT!biFz_C8GU0X^Ey45_j4xmev;=o7F6tcr-PoO zi*fFMC#v{ipfZVX0~LGT=gwqyO%*+BYaAfzF>5_ngz3E^(%vf~QZe-ntt0!-E_$<# zfx;t^nkys?Uh-naWPf5quvV27(K>k2aDYu~TUL2G&#b}FA~MaRUeny=Roc`^ZhBAh zwD%;Bc(3BH_nIHPB(A7A?zP7|gz^4rQ10Wp(mmCR!aGaytvTm0_nGyGs=gcpLd-a|<_C%)eJQyyMz8&?;^9MhUBk(#)0Dfk-{@#582LJFc$A- zAbOTcVk-`+TWct(TfLpJ%zu@dC34n5|Wbli^ObVoHZdrzQ4L>zLyC~*Ot*!_5ET+R!+i0KVAQz z+#xR(^6qzFNkn2V+yfP89BM>=bXw*5`{e0?Upro%gmUj-9Hh7*{#abd6T;Sx6C!f3-WmIgi%+N7Zc&O%+B=Kt4=_{%Rc_5b~gRBz1{g)%)n_TQ9GJ)Pj3dRp9g zNk9A@{+E-A{rK-r(CNB@%OT+10SiTl?7P-qT+q1B*L$>k+bJU8?8)U-y%mfhRc?2jzSbDh@}Y-wTQ0jYyHwDPHM{z9 zL0#Uz`m(O|IJ5fluv#X7VlJZn>947{uzrc!bV&(1?=2VEM%}4@s$YlRD`tNvTY*eA zHHC&}&e-2^B!<-j*l_8375$92+CU1oa-rwWQ9pa6I@htvE-Bmy;<>S*^4@Zbu3{5) z3R%^ir=A*F5)JAyRwCrvOQI6|vN3h{by}hG!1XVbQgfmU^u|~#0cvp1eyaSkl2C6C zoxBtjxkQ$yIaFbP11D4^=#-JO#o2-_R^@37l<3+}g1tF(^@MT{)TS5GT&dD`?5Vsb zr0#QznnkZF>-d%4s$fD&W!@;WT$j^PM*syDZuq^6`oyNtqSEnABFh!5*;-{@?*FBA zYU$4t)O#yyP`YX_E|yONP~pJ-uZpE?;5vPH+y_?JQJfEd@fNjR;n@XsdH?FmH42>S z5}4DgFY6MRQ>rhU-YR_hf5}cYZ(xV{bYo^t;pYCcN+W)I|22Bn4f!Q&bjhS4L#&GO z_|CA#R9?JCT|7!ZOjn68Hgc9mWhu)|T89p<8;}XbN4M@f%*nr0pGuv?(3X;UavXhbx&lQMvrrLGifa_)C;d(>mFW-!*gG^v#6-xAjdl=^G;$BJ1|_s zUkX?Bz?(2tC!M|Lcdb6q14vjBTl}dM1aC34_{_bmqSX`Mh|Vf6MtOvA26w_VN_I+|iH25D3BcKT6fKTjG&R0N z>RjsFsA4Q`mpZetR-}ICwdKv)T++7WTk0EbOvMb$a&)md7tzYD&Afgw}j15cn2Ze(d>YkD>cAOEaPJLmk})UE?w` zlrO_mIV~EJpiMlt34j`OLI`Bb*6C2c7JQVI?lngZa!1M2TD?#Yxb3#)RDMR)a zh1yAW61PK=xv@=a4G3S<+KwtWP0^SI=Ruzn=Le?{eUm{7PiX;Pz zT8;8EpFf3sXIiBhyh3{M_^XJKw}N9?_d8onDQ=?|Z)wbHF_;qaE!1XgRA#@eY@Fvy zGf{gHBXuLeycZ`bVpQw(JABr00p+~*MyZl_!!#e-5~Te*j|KkC^pz6?bCXf_g8P@R~>2GLg3hhACcCEQu-67*iI z7pov;mEN44{MPPjMygWNP3})AaJSFP#N z6Z?3F8yP48*lhjP6KP#BPtKg0Q!9_3`e~HZx<@EBB=c=+Bk*5GxlMQL@^2B)9jvd7 zqs7r~N#!P=U6fA>B;D?f^gxGy=0!1&Ri_;1oiM%V)xknBJMsFA-NE{$==kaI_e+eO zNuHxvEYtD~;0sATfHTLTbJ(7n^4`!18r9vqXkZz?cO~OE_5)$xcrAV)UaV#-R5Wh3 z;Ud@a);r(b`3IB|#|#zKU;%Z*RIaM4DK|onwsAf&mpf9GaN=18QKLF>HBVYJ%1KPt zqRJ~&4a~|0R(ReQ5-;>y_Hg9g`SIw25mNf{8hxLU5I|ol%{6A@I!*jy*4!=LR>g{C z5)%YYLvBCo+5w#jdPg>4~x_<)5?XoLJ$pd-_D*`$Sk#t(lpH|&9&yiTdBeH7g--#$p>w^0Y_P}xN_IXX#& zm*T**AKyR%q_DN4&nn^XFnZm;mqsEZvp4eI%wNF@Ctl>EZKhDmX~|c<4K*M z_%NvaC~~zeB(f_JDXn~occg0%FuiL zSkI=I^*XDC`-nobs#f-ph@ClqP2g_u7{fetH> zH#5)7;fAba8p+;qO>A!7u+n1&9cekXkfiz)n|`c-~=n7H+s3?R|GCd;yYsI|eW4J~j(r;LEOYno{x?+E4Q z%+`EibtZN&|A$X$_3dZ-m)6X8@6oL=HkfW-bb5bUUHw)0Nr&$rUpYk>Hehd+ zE0~ZlQ94&l%$cl%+5gmf`l8xi~i>+Q@zKe)Yf^57QOTt?Y>U$ykxXdBnKCz&RbKz$Y;9?%@AF>NOmlW* zw2Hr|qaoUPq%{9=jzL3Zu6M(Ff=era4xhWI-eTUy|IU0*O}tspM*LB>pzkT!^^$%y zed~!JbIym6S0XE0%VV~eV<>s!3XBbgl_zI7n`o8zA1dFO2-~Oe$@lP<2}8(~*vEAX zRommfI*V64GdAn5YoEn%_&u?PqlX)feVh(3G356BIp2Y|MpL&g8si7(0aG1L@rn-axxQUF)w8Uk!e5_!V-3Fk;JWq1 zE2&PY`@zvep+h5$Z@f0-*yo@_%>ZO@H6={eBwq3Z#6_fup!L39^Rx4rq-#Hgjo)zY zGJUVM{CM-IzfQLUk3mSPJ@#41iCF=rd?|%60~>y~a3+ynlss=k{_MvyNt9NAfqQN; zs9X58Rq)fL6lXqLoJnoLS{$;l(&4+H=ea0#T84;GlU9y}UUuAvl^A9rN}zdYtuc^uaqml9xNTPaq6 zy|X!PH7&5VG)X^bZZL0QmI{Ug8(dXZj?LpqRU_?|V*7jx$uX;J!R&;^G2Al`>1=(C z(;`lCM{tenezN)(yv$4ak> zpdS_}wD$52?PLkV3w?RyF_E*FS2DNW(%4vHht6SN)W5Pt1SnkkvVHn=UfsTMDk?u6 z!(005eQ!c|>0WJ9gx7PSzmWitOtb`Aa@?;xMfDwR^sjrB(yjUJVE71z6V37Ka#Xz?x&xS_Xri`$qI zo&O~&zYcc4C@*?AvcN#T&c-Dhmvr=N87zw9f}RY<_;fq2+_+9*=A)#TUU0^Ot?u$f z{QK<>kCrIF=j6a0{6g6~q^`XDA_zSiDbkSH05(dY5(<2L2gq1~3lnQBbwbrN zsKIHml#`H^3WKpGuTkgHS+PNz(Cgw0b?-?Sf-h^M=khH95ks3N0g5z{oyCfxF;Ey= zN3l<3Kp$MVa$8#JX$4|d;suhqHa7}gyg%A_`|0KbOU`5Fu5S&_1A^J9!0KQRV#grftMAK0Infxq#SnoiP zCBd!o7=f0+#`0C1N9$Qme$TQ?dakxN+CBEm!*$(Co1S&ObTmEw0{uLf8rR&>b1&cW zy|Vd9b{R*PRdg@bl>vs`Z}uGebN1AR++E^cI{McSymN`o-D4Q?aVf>thph__*>!8^ z?l1_vax7+=6RZr)l0$2}pL7`~Et{+-*wBN=qJXWT2_c-UmxD?SnldbLg zOio9QX3o44(2bZ9IZzsMabpIE_q{*^-ZJhcZ%j0tH zphzM_2Sg-7j{h=@AWITN0u)W6x`*Z{4KS+)?_pyBwG$wwpl1Sv%k4{aJUz>%a~Qz$ z|8GE#M966nNQCeo8Wx}-@tsZgLqK?w9QMC4U5Vbj)Wu}mUHRV__i+zeKyY)|--~MA zjM48a1B*3bjV!zW3H)aNM>H3zO#Up8K0BYUB*81uoyJF=$0})~O9~oL)*C!)gl~%% zN&RiL=kcYfD=z@tf}wH=w!sK~J+C2l!17ASLU{o9T74(I$=F8>GOxiI4rVv>VYb!R z2onQ$NgM3s>VgJtSYyieyn{~=r7k(Q#%%1GwV&pi&AV?Xk{>*3qoCm#e4T$SqbstF zxgKl1})Z4e^q^HYVQhE^;!8Pid&$!T~uSd`lU2QVVnLSkU*Y1`}5KVOi}$8_*e z(wo7$_y-Z2;!yK zw6{Ga1#z@!7LNK1o}lb;r}vvJ+;a=ot(Ww^ud=qEGzsL5<_=&G^(%0Vut2t%pC+WB zBP|xD3mR_o*Xqq`Jx{OAcRt;~`#B@9a+3o?$-*3(<%;+@s|vvk$Ryf^tNKW3VvNWJY}V3aM%ew1k!*{$EKtHt_zVde&W z1Ge_Mt;dVBB30O#mq~^PF|J)`8{ET3!QYZ963lAMxRbR5gcwDX=~p}-@lzYZ?J>eBRJJAHQS6Dwj9k58o0;HGV3K!0+6uUeBNJgY8M9N++&{5k)38{VBFhgNe8u zS=rZyBQ@S5zLbWi@A}O)lrU-_QI5PSObU_bJwXc580IzGNOjvyBmzd{o6$t0nMHY0 z2u#un7xWi-2fyQq*hLe`p08txf`e}}cFF@-QAU$z=ChjZck7v)MRMme2GaCLa^b3p z#F|NxHc9T})6U(FeBWK|y%!n^Mp(%aVwD7=ep6V?M>n#6bAYc?!~b1wq+P zOSCZQ=Y^?-6E%QupUOyUH0dHH{ll0nEt^uW2h6DYR+O4)f3MqQrlblcw?rSlrH)d6 z6FE(~h{-ar@$>W-q!1$$)y(=?V08(^k_qN{yY`vCNGOi}y)a_uvE;#c84YhkUP;E_ z2SN1YCmB)|ZF-PN|7F>qMmAPn>w%P_$+s6M?VkHW6a&wFZHmIcrW&e*toKN@aXL6o zwGJN4gsS%Tr$_B4I@%eN$ru~$3=tm+iV~c4T;G_Sj#0v|T$dfsBoEqN$}sW{4x-%Y zoWBZWNY~CYkOD;djS4%*d`@a*d>r(TR0X}<)KRuAgPNvfZrC73RnCdls3FdA7PsPt zzM!4aICXNA%!L>r1zd3Uz;-&m@;rqSZd>;u!9m4BGjbT_!&t?@hc$kToGJMZ>wzQ+ zF*PMm+7d%g<9(Q&5&4}aZkd-e#8kZa0o47bB?xK=W2>7X(eJLEA>S#YpP|jli+2_$G?2+o;}jveriR~?-ms39$>_6z9=$yFrhqMhOJ z1l1cpDL6;&mI~4mdto}>kxuf1af=Pc#z3gXd()co>ZwnQX^Rr9!?TmJ zc4lgu2WOE$+AMH+&gf+bU6p40hh)j}&^}O|G1F9)QUDHG*(!O+cP4;@PO4u0P0T49=wD%<9_D%taZ@lCRc-RozjBoT1 z+c?B*M+2kzY^czCRUSE(;b>&C)9DtXGdHOcGdq581u4?@EfF6gjhLvRsLbR(SOhM} zG(EM#kBo1IlBzR%7fgn0to{EUBEmHjhb-aVoK<^?D=lWjWSDx)kj6|aBQhu}(ZhH+ z-5Q{&s&B8(0){flizcM?lah@&$}>|sNUOFlqofBS>0QRd3$^oCkyf4GhH>uv&K}fn zw6D%SA1WCqhT!H*S;zFbIQKed`DrVwmE=f6@@DA_J zgjl%buFNZd>$tPSg?v_4mNF!I@cIg2R^>H+Rmrz0I~?~eb>))Bz2^|)=HM5d* zZGwo`COt9)G+Qv6opo!_CCK@No=1kHh#BHhO1$X2FW22PbqH);zE((^COkc|{+VJ8 zU^Yv@WL_hTAGDaxDq(^XEajYM8AyThnyK@pQ#FPKNp zmq^TP_Kn2@P19Kz;(6|uONco`!j8AUAu{8`m9Oxp$AiqIHybY!)V$_hkwP6`hDk)B z!mffZ_SS$v)%_3O#!Ow&K6R$9(S&pWuk;p0AW@uy_^N`tB1KFM<;Y#RDG$&Z1~PUP zds0=wP2Y5J)5j6@7iB~|b22SQXMRSKmIa1SBLm_SSxC$0T6oMp9>;8@SqeL?Fd+jT zD*8jpQ0!G-o7U`+wULAc+%&yxadyfJ>iaAV;ejeu*3I}j{IoS%i28=}2@(J&c?+}v zS7pWz3Qa#64StQXL_181kQB0VUGdYmJFTzDFnDffk;>V45!oqtw@IM~Wa4q0lXItB zVTzYqac+u`%073M)_&8NmDe3bB;Ii{6xrrk9Bau5+d5vwhgmjL+ypYy8mE7vNMAb! z7x1;o6^+?5fVVwV3FzDcRFonPVhd(A;68Fnjcs2VO;%o5H_9k!c5Nk-c2Dwl=HHzO zR#PgSx}&Z%)`AK$URi*@4o?GpD1u1a4@*LL{$1cavLU>q7r$lN*-X<#}GIYn<3eV&0Ff z$!HzS#c%1m)flhvb;f4Tn82D)iw7;Z04DT(-45kK&ylHZJP9`0I!}V#nLLJs95^E_ z-^I%!DN_TkB+{oPO_N>_GZ>Mk;j}V_`yqxrHhF)wx#aGk+4PnmQ?G((8qB$4aywFqrgyv#ya*>aefSx)x)dm0b`5_hVAJ zHhGyr>DmNI4tH!>vt*&UOdo&mTuWzu!JNvUc?%k%npi#B%tx;7Hy+5+$`)CEf zclq`-@V&(mwPLsYK5NPSz<+;shfHr!lO<$HN#Ys2F(!-?+55Y3`k{la%TKAXRfh=q z8_Y8--^v{1J)S)0P7KgBw@@g5JEU!Y(bqebyKnH$jjPGU_g+qHpA(YK?rkg1>lCRl zb?iG(Zai3sTO|YM+)@roVYK+(nVi?)$A?`T( zZnRM57mDgM-~ZTeLTr##M>M;B>~A49j68`4*xtQJYU|4g+w0sq5r17j&BcQG&~eTY zVDF8?$ljYl#D=r#h=(un;C1gFFJ@kI+V|kzNXVEPai^gMGe0)r3)J@RftY#fyY}{O zj+b3;xQEUDXt5>nu`$bTT984&x~`pUhj+djIwqi4pdH-XD=6430wUdvmoCMywAT&~ zVB3!>IW#BDGKm%J#_-86xrTpeu4NDacpEuzMe@)zE(TE-gB)os@v7TWICHzdX^>a$ zFuGj2IDNbMoHHtn`W}GC^p~z)u*I4hIRo7t&tmDOwt28t z;rE};Ug;(@tFcIt19-K>8_y5m?p}>ZdODJAf&wb%_xVQl%7{C4lzAgBBJi>o*sDcs zbomg0hTgs7)cgMK3uO21C89QH7rxIkjCNBChOZNOrRS&l@}{4rXLavhDq=%0V_tK? z_kgZ&#|SO395WmcVnQ=_c;M^ggw{K5Luk3auz z&SgD6JhY|rpi1t1*6jSJi-ZXgGv@>Oa>T)N&833PxzB3*BF2UcN0BVbx8GwSNBRnn z9x*ngg)$yFa`ecNdt6{_4n!0}y_V%b#HrVsfgDJG!mmb|5-nxmS0sZK3jcK-V1;V^ zx(cvC6P0)(Ue#PS0pfE++9LNz5Z)Z7ULmCL`*D%V5(;yPAdYIEK$!c!q}k-w0(IHaETu(4i2+J zRcKcVetQz&1rF$0T0Q*l&Qf5yB$OS*b3g@XPZA(t6M=fDLgAq5xy}Ehr_2dGN4vcE z-|FljhLf7Wv+-Mj3moC3s_$(6laMI{Wd?PRQ-{~t`JEsDPH{kaK-_Vt00gNBW(z~P zK+#@WX7G3B;xA0SBW5lr3?i=dPxv-19jMC%m4aCQn`rSskAiVr(6clrz$PxJImAWp zFrOYgYfpO=gmXjHAfcE4h2yxP7a%ahLqZ2qWmv#bLs|xKhnqSC&vuHSXLO?wRF|HeHi<_buK{$pZ|-{3sWDvXK{yw z6TB}Bm8XG$SYhaGn!6y42-F6W4E`(rScLj8CZ`?}W^h=9I(^mbL&6EdMXAL%%>6}R z;1f}(4&+__pYXUSR2}lA@GzGd)clLO_3VrPkhs5~+7SEl!!Ref^%qr&t?CcaIzbH= zxBqfrVAct!CPe+yA7}RjR0-nU`NuI5qb^`Z_aBG4E{vdE4|S8*i&5+8`S}$g5pqqY8A`Gp=OYx$-^Ny!7~!n+iI9TB+MWn0abzY&HoXOS)k5$ zM1neBaQR<3rzNSY&9eF@Ct8wPxZ<@x&ZHz&Pjd4xmjyh3iu$D8-2D?~-=pRGGtshB a)QM*79VY(X6indeDJTy;8!MFh!TDc3D}?j_ delta 174625 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 z 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 diff --git a/Platform/Apple/tools/PackPartitions/nbproject/project.properties b/Platform/Apple/tools/PackPartitions/nbproject/project.properties index 05b0fa02..0b17ebe0 100644 --- a/Platform/Apple/tools/PackPartitions/nbproject/project.properties +++ b/Platform/Apple/tools/PackPartitions/nbproject/project.properties @@ -27,6 +27,7 @@ dist.jar=${dist.dir}/PackPartitions.jar dist.javadoc.dir=${dist.dir}/javadoc endorsed.classpath= excludes= +file.reference.acme.jar=../ACME/src/acme.jar file.reference.lz4-1.1.1.jar=/Users/mhaye/LL/repo/Platform/Apple/tools/PackPartitions/lib/lz4-1.1.1.jar file.reference.plasm.jar=../PLASMA/src/plasm.jar includes=** @@ -34,7 +35,8 @@ jar.compress=false javac.classpath=\ ${file.reference.lz4-1.1.1.jar}:\ ${libs.groovy-all.classpath}:\ - ${file.reference.plasm.jar} + ${file.reference.plasm.jar}:\ + ${file.reference.acme.jar} # Space-separated list of extra javac options javac.compilerargs= javac.deprecation=false diff --git a/Platform/Apple/tools/PackPartitions/src/org/demo/PackPartitions.groovy b/Platform/Apple/tools/PackPartitions/src/org/demo/PackPartitions.groovy index 90f03fd2..c9428fe4 100644 --- a/Platform/Apple/tools/PackPartitions/src/org/demo/PackPartitions.groovy +++ b/Platform/Apple/tools/PackPartitions/src/org/demo/PackPartitions.groovy @@ -19,7 +19,6 @@ import java.nio.ByteBuffer import java.nio.channels.Channels import net.jpountz.lz4.LZ4Factory import java.nio.charset.StandardCharsets -import plasma.Plasma /** * @@ -1269,48 +1268,78 @@ class PackPartitions } } - def compileModule(moduleName, codeDir) + def runNestedvm(programClass, programName, args, inDir, inFile, outFile) { - def codeFile = new File(codeDir + moduleName + ".pla") - def acmeFile = new File(codeDir + "build/" + moduleName + ".b") - def prevStdin = System.in def prevStdout = System.out def prevUserDir = System.getProperty("user.dir") def result try { - System.setProperty("user.dir", new File(codeDir).getAbsolutePath()) - codeFile.withInputStream { inStream -> - System.in = inStream - acmeFile.withOutputStream { outStream -> - System.out = new PrintStream(outStream) - String[] args = ["-AM"] - result = new Plasma().run(args) + System.setProperty("user.dir", new File(inDir).getAbsolutePath()) + if (inFile) { + inFile.withInputStream { inStream -> + System.in = inStream + outFile.withOutputStream { outStream -> + System.out = new PrintStream(outStream) + result = programClass.newInstance().run(args) + } } } + else { + result = programClass.newInstance().run(args) + } } finally { System.in = prevStdin System.out = prevStdout System.setProperty("user.dir", prevUserDir) } if (result != 0) - throw new Exception("PLASMA compiler failed with code $result") + throw new Exception("$programName failed with code $result") + } + + def assembleCode(codeName, inDir) + { + if (!binaryStubsOnly) { + println "Assembling ${codeName}.s" + String[] args = ["acme", "-f", "plain", + "-o", "build/" + codeName + ".b", + codeName + ".s"] + runNestedvm(acme.Acme.class, "ACME assembler", args, inDir, null, null) + } + readCode(codeName, inDir + "build/" + codeName + ".b") + } + + def compileModule(moduleName, codeDir) + { + if (!binaryStubsOnly) + { + println "Compiling ${moduleName}.pla" + String[] args = ["plasm", "-AM"] + runNestedvm(plasma.Plasma.class, "PLASMA compiler", args, codeDir, + new File(codeDir + moduleName + ".pla"), + new File(codeDir + "build/" + moduleName + ".b")) + + args = ["acme", "--setpc", "4096", + "-o", moduleName + ".b", + moduleName + ".a"] + runNestedvm(acme.Acme.class, "ACME assembler", args, codeDir + "build/", null, null) + } + + readModule(moduleName, codeDir + "build/" + moduleName + ".b") } def readAllCode() { - readCode("render", "src/raycast/build/render.b") - readCode("expand", "src/raycast/build/expand.b") - readCode("fontEngine", "src/font/build/fontEngine.b") - readCode("tileEngine", "src/tile/build/tile.b") + assembleCode("render", "src/raycast/") + assembleCode("expand", "src/raycast/") + assembleCode("fontEngine", "src/font/") + assembleCode("tileEngine", "src/tile/") compileModule("gameloop", "src/plasma/") - - readModule("gameloop", "src/plasma/build/gameloop.b") - readModule("globalScripts", "src/plasma/build/globalScripts.b") - readModule("combat", "src/plasma/build/combat.b") - readModule("gen_enemies", "src/plasma/build/gen_enemies.b") + compileModule("globalScripts", "src/plasma/") + compileModule("combat", "src/plasma/") + compileModule("gen_enemies", "src/plasma/") } def pack(xmlPath, binPath, javascriptPath) diff --git a/Platform/Apple/virtual/src/tile/tile.s b/Platform/Apple/virtual/src/tile/tileEngine.s similarity index 100% rename from Platform/Apple/virtual/src/tile/tile.s rename to Platform/Apple/virtual/src/tile/tileEngine.s From f239bd4ac2258ef2e9579a5c1c3816d5117c846a Mon Sep 17 00:00:00 2001 From: Martin Haye Date: Mon, 18 Jan 2016 19:55:36 -0800 Subject: [PATCH 06/11] PackPartitions now does everything itself: compile, assemble, pack. --- Platform/Apple/tools/ACME/src/acme.jar | Bin 0 -> 311097 bytes .../src/org/demo/PackPartitions.groovy | 22 ++++++++++++++---- Platform/Apple/virtual/build.xml | 19 --------------- Platform/Apple/virtual/src/plasma/build.xml | 3 +++ 4 files changed, 20 insertions(+), 24 deletions(-) create mode 100644 Platform/Apple/tools/ACME/src/acme.jar diff --git a/Platform/Apple/tools/ACME/src/acme.jar b/Platform/Apple/tools/ACME/src/acme.jar new file mode 100644 index 0000000000000000000000000000000000000000..4a8b62ef681c4081083641659a6a9ed0e6ffe15f GIT binary patch literal 311097 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

1EMr|3R9=#Fu;`U*f)pmwckV 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≤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