1
0
mirror of https://github.com/catseye/SixtyPical.git synced 2025-02-19 20:30:45 +00:00

Add --output-format and --origin command-line options.

This commit is contained in:
Chris Pressey 2018-03-13 13:33:01 +00:00
parent 689670a69e
commit b1e9df0d45
2 changed files with 33 additions and 7 deletions

View File

@ -1,6 +1,13 @@
History of SixtyPical History of SixtyPical
===================== =====================
0.14
----
* `--origin` and `--output-format` options added to reference compiler.
* Fixed bug when `--prelude` option was missing.
* Fixed bug when reporting line numbers of scanner-level syntax errors.
0.13 0.13
---- ----

View File

@ -36,11 +36,21 @@ if __name__ == '__main__':
action="store_true", action="store_true",
help="Only parse and analyze the program; do not compile it." help="Only parse and analyze the program; do not compile it."
) )
argparser.add_argument(
"--origin", type=str, default='0xc000',
help="Location in memory where the `main` routine will be "
"located. Default: 0xc000."
)
argparser.add_argument(
"--output-format", type=str, default='prg',
help="Executable format to produce. Options are: prg (.PRG file "
"for Commodore 8-bit). Default: prg."
)
argparser.add_argument( argparser.add_argument(
"--prelude", type=str, "--prelude", type=str,
help="Insert a snippet before the compiled program " help="Insert a snippet before the compiled program "
"so that it can be LOADed and RUN on a certain platforms. " "so that it can be LOADed and RUN on a certain platforms. "
"Also sets the origin. " "Also sets the origin and format. "
"Options are: c64 or vic20." "Options are: c64 or vic20."
) )
argparser.add_argument( argparser.add_argument(
@ -92,22 +102,31 @@ if __name__ == '__main__':
sys.exit(0) sys.exit(0)
fh = sys.stdout fh = sys.stdout
start_addr = 0xc000
if options.origin.startswith('0x'):
start_addr = int(options.origin, 16)
else:
start_addr = int(options.origin, 10)
output_format = options.output_format
prelude = [] prelude = []
if options.prelude == 'c64': if options.prelude == 'c64':
output_format = 'prg'
start_addr = 0x0801 start_addr = 0x0801
prelude = [0x10, 0x08, 0xc9, 0x07, 0x9e, 0x32, prelude = [0x10, 0x08, 0xc9, 0x07, 0x9e, 0x32,
0x30, 0x36, 0x31, 0x00, 0x00, 0x00] 0x30, 0x36, 0x31, 0x00, 0x00, 0x00]
elif options.prelude == 'vic20': elif options.prelude == 'vic20':
output_format = 'prg'
start_addr = 0x1001 start_addr = 0x1001
prelude = [0x0b, 0x10, 0xc9, 0x07, 0x9e, 0x34, prelude = [0x0b, 0x10, 0xc9, 0x07, 0x9e, 0x34,
0x31, 0x30, 0x39, 0x00, 0x00, 0x00] 0x31, 0x30, 0x39, 0x00, 0x00, 0x00]
else: elif options.prelude:
raise NotImplementedError raise NotImplementedError("Unknown prelude: {}".format(options.prelude))
# we are outputting a .PRG, so we output the load address first # If we are outputting a .PRG, we output the load address first.
# we don't use the Emitter for this b/c not part of addr space # We don't use the Emitter for this b/c not part of addr space.
if not options.debug: if output_format == 'prg':
fh.write(Word(start_addr).serialize(0)) fh.write(Word(start_addr).serialize(0))
emitter = Emitter(start_addr) emitter = Emitter(start_addr)