initial commit
This commit is contained in:
commit
60db522e87
107 changed files with 36924 additions and 0 deletions
102
pcomp/pcomp.py
Normal file
102
pcomp/pcomp.py
Normal file
|
|
@ -0,0 +1,102 @@
|
|||
#!/usr/bin/python3
|
||||
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
||||
# Copyright 2021-2024 Sebastian Lederer. See the file LICENSE.md for details
|
||||
|
||||
import sys
|
||||
import subprocess
|
||||
import os
|
||||
|
||||
suffixes = [ '.teeny', '.pas' ]
|
||||
compiler = 'pcomp'
|
||||
#assembler = '..\sasm\sasm.py'
|
||||
assembler = 'sasm'
|
||||
emulator = 's4emu.py'
|
||||
|
||||
asm_include_path = '../lib'
|
||||
|
||||
def run_compiler(filename, opts):
|
||||
print("compiling {}...".format(filename))
|
||||
args = [compiler]
|
||||
args.extend(opts)
|
||||
args.append(filename)
|
||||
#print("args:",args)
|
||||
status = subprocess.call(args)
|
||||
if status != 0:
|
||||
sys.exit(2)
|
||||
|
||||
|
||||
def run_assembler(filename):
|
||||
print("assembling {}...".format(filename))
|
||||
args = [assembler]
|
||||
# args.extend([ '-I', asm_include_path])
|
||||
args.append(filename)
|
||||
status = subprocess.call(args)
|
||||
if status != 0:
|
||||
sys.exit(3)
|
||||
|
||||
|
||||
def run_emulator(filename, extra_args):
|
||||
args = ['py', emulator, '-a', '24576', filename ]
|
||||
args.extend(extra_args)
|
||||
status = subprocess.call(args)
|
||||
if status != 0:
|
||||
sys.exit(4)
|
||||
|
||||
|
||||
def get_compiler_options():
|
||||
comp_options = [ "-n", "-s", "-e", "-R", "-S", "-H" ]
|
||||
result = []
|
||||
while len(sys.argv) > 1 and sys.argv[1] in comp_options:
|
||||
result.append(sys.argv[1])
|
||||
if sys.argv[1] == "-H":
|
||||
sys.argv.pop(1)
|
||||
result.append(sys.argv[1])
|
||||
sys.argv.pop(1)
|
||||
# print("Compiler options:",result, sys.argv[1])
|
||||
return result
|
||||
|
||||
|
||||
def main():
|
||||
do_compile = True
|
||||
do_assemble = True
|
||||
do_emulator = False
|
||||
if len(sys.argv) < 2:
|
||||
print("Usage: {} <input file>".format(sys.argv[0]))
|
||||
sys.exit(1)
|
||||
|
||||
compiler_options = get_compiler_options()
|
||||
infilename = sys.argv[1]
|
||||
basename = infilename
|
||||
|
||||
if infilename.endswith('.s'):
|
||||
do_compile = False
|
||||
basename = infilename[:-2]
|
||||
elif infilename.endswith('.bin') or infilename.endswith('.prog'):
|
||||
do_compile = False
|
||||
do_assemble = False
|
||||
do_emulator = True
|
||||
basename = infilename[:-4]
|
||||
else:
|
||||
fname, suffix = os.path.splitext(infilename)
|
||||
if suffix in suffixes:
|
||||
print("#############",fname, "####",suffix)
|
||||
basename = fname
|
||||
|
||||
asmfilename = basename + '.s'
|
||||
#binfilename = basename + '.bin'
|
||||
binfilename = basename + '.prog'
|
||||
|
||||
if "-n" in compiler_options:
|
||||
# Assembling stdlib won't work
|
||||
do_assemble = False
|
||||
do_emulator = False
|
||||
|
||||
if do_compile:
|
||||
run_compiler(infilename, compiler_options)
|
||||
if do_assemble:
|
||||
run_assembler(asmfilename)
|
||||
if do_emulator:
|
||||
run_emulator(binfilename, sys.argv[2:])
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue