mirror of
https://github.com/marketideas/qasm.git
synced 2025-01-13 20:32:14 +00:00
more options, cleanup of command line options
This commit is contained in:
parent
107598bb02
commit
88e0251a16
13
.vscode/launch.json
vendored
13
.vscode/launch.json
vendored
@ -2,24 +2,25 @@
|
|||||||
"version": "0.2.0",
|
"version": "0.2.0",
|
||||||
"configurations": [
|
"configurations": [
|
||||||
{
|
{
|
||||||
"name": "(gdb) Launch",
|
"name": "Debug",
|
||||||
"type": "cppdbg",
|
"type": "cppdbg",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
// Resolved by CMake Tools:
|
// Resolved by CMake Tools:
|
||||||
"program": "${command:cmake.launchTargetPath}",
|
"program": "${workspaceFolder}/build/qasm",
|
||||||
"args": [
|
"args": [
|
||||||
" -d -d -d",
|
"${workspaceFolder}/test.s",
|
||||||
"${workspaceFolder}/test.s"
|
"-s",
|
||||||
|
"-d"
|
||||||
],
|
],
|
||||||
"stopAtEntry": false,
|
"stopAtEntry": false,
|
||||||
"cwd": "${workspaceFolder}",
|
"cwd": "${workspaceFolder}",
|
||||||
"externalConsole": true,
|
//"externalConsole": true,
|
||||||
"environment": [
|
"environment": [
|
||||||
{
|
{
|
||||||
// add the directory where our target was built to the PATHs
|
// add the directory where our target was built to the PATHs
|
||||||
// it gets resolved by CMake Tools:
|
// it gets resolved by CMake Tools:
|
||||||
"name": "PATH",
|
"name": "PATH",
|
||||||
"value": "${env:PATH}:${command:cmake.getLaunchTargetDirectory}"
|
"value": "${env:PATH}:${workspaceFolder}/build"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "OTHER_VALUE",
|
"name": "OTHER_VALUE",
|
||||||
|
13
asm.cpp
13
asm.cpp
@ -34,6 +34,7 @@ void CLASS::print(uint32_t lineno)
|
|||||||
uint32_t l, i, savpcol, pcol;
|
uint32_t l, i, savpcol, pcol;
|
||||||
bool commentprinted = false;
|
bool commentprinted = false;
|
||||||
uint8_t commentcol = tabs[2];
|
uint8_t commentcol = tabs[2];
|
||||||
|
bool force=false;
|
||||||
|
|
||||||
uint32_t b = 4; // how many bytes show on the first line
|
uint32_t b = 4; // how many bytes show on the first line
|
||||||
|
|
||||||
@ -61,15 +62,17 @@ void CLASS::print(uint32_t lineno)
|
|||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
|
force=true;
|
||||||
flags &= (~FLAG_NOLINEPRINT);
|
flags &= (~FLAG_NOLINEPRINT);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool np=(flags & FLAG_NOLINEPRINT);
|
bool np=(flags & FLAG_NOLINEPRINT)?true:false;
|
||||||
if (options->isQuiet())
|
if (options->isQuiet())
|
||||||
np=true;
|
np=true;
|
||||||
if (options->isList())
|
if (options->isList())
|
||||||
np=false;
|
np=false;
|
||||||
|
if (force)
|
||||||
|
np=false;
|
||||||
if (np)
|
if (np)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@ -553,9 +556,9 @@ CLASS::~CLASS()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void CLASS::setProduct(string product)
|
void CLASS::setLanguage(string lang)
|
||||||
{
|
{
|
||||||
options.setProduct(product);
|
options.setLanguage(lang);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CLASS::errorOut(uint16_t code)
|
void CLASS::errorOut(uint16_t code)
|
||||||
@ -2615,7 +2618,7 @@ void CLASS::process(void)
|
|||||||
{
|
{
|
||||||
errorct++;
|
errorct++;
|
||||||
}
|
}
|
||||||
if (((!skiplist) && (listing) && (pass == 1)) || (line.errorcode != 0))
|
if (((!skiplist) && (listing) && (pass == 1)) || (line.errorcode != 0) || (options.isList()))
|
||||||
{
|
{
|
||||||
line.print(lineno);
|
line.print(lineno);
|
||||||
}
|
}
|
||||||
|
2
asm.h
2
asm.h
@ -249,7 +249,7 @@ public:
|
|||||||
virtual void process(void);
|
virtual void process(void);
|
||||||
virtual void complete(void);
|
virtual void complete(void);
|
||||||
virtual void errorOut(uint16_t code);
|
virtual void errorOut(uint16_t code);
|
||||||
virtual void setProduct(string product);
|
virtual void setLanguage(string lang);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -18,9 +18,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"asm": {
|
"asm": {
|
||||||
"syntax": "merlin16plus",
|
"language": "merlin16plus",
|
||||||
"cpu": "M6502",
|
"cpu": "M6502",
|
||||||
"startmx": 3,
|
"start_mx": 2,
|
||||||
"listmode": "on",
|
"listmode": "on",
|
||||||
"casesen": true,
|
"casesen": true,
|
||||||
"start_lst": false,
|
"start_lst": false,
|
||||||
|
69
qasm.cpp
69
qasm.cpp
@ -21,16 +21,13 @@ programOption PAL::appOptions[] =
|
|||||||
//{ "config", "f", "load configuration data from a <file>", "<file>", false, false},
|
//{ "config", "f", "load configuration data from a <file>", "<file>", false, false},
|
||||||
{ "exec", "x", "execute a command [asm, link, format, script] default=asm", "<command>", false, false},
|
{ "exec", "x", "execute a command [asm, link, format, script] default=asm", "<command>", false, false},
|
||||||
{ "objfile", "o", "write output to <objfile>", "<objfile>", false, false},
|
{ "objfile", "o", "write output to <objfile>", "<objfile>", false, false},
|
||||||
{ "instruction", "i", "force the CPU instruction set ('xc' ingored) [6502, 65C02, 65816]", "<cpu>", false, false},
|
{ "instruction", "i", "force the CPU instruction set ('xc' ignored) [6502, 65C02, 65816]", "<cpu>", false, false},
|
||||||
|
|
||||||
{ "type", "t", "enforce syntax/features/bugs of other assembler [qasm, merlin8, merlin16, merlin16plus, merlin32, orca, apw, mpw, lisa, ca65]", "<type>", false, false},
|
{ "type", "t", "enforce syntax/features/bugs of other assembler [qasm, merlin8, merlin16, merlin16plus, merlin32, orca, apw, mpw, lisa, ca65]", "<type>", false, false},
|
||||||
{ "quiet", "q", "print as little as possible, equivalent to lst off in the assembler ('lst' opcodes will be ignored)", "", false, true},
|
{ "quiet", "q", "print as little as possible, equivalent to lst off in the assembler ('lst' opcodes will be ignored)", "", false, true},
|
||||||
{ "list", "l", "force assembly listing ('lst' opcodes will be ignored)", "", false, true},
|
{ "list", "l", "force assembly listing ('lst' opcodes will be ignored)", "", false, true},
|
||||||
|
|
||||||
{ "color", "c", "colorize the output", "", false, true},
|
{ "color", "c", "colorize the output", "", false, true},
|
||||||
{ "parms", "p", "show the working parameters/options", "", false, true},
|
{ "settings", "s", "show the working settings/options", "", false, true},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{ "", "", "", "", false, false}
|
{ "", "", "", "", false, false}
|
||||||
};
|
};
|
||||||
@ -85,20 +82,34 @@ int CLASS::runCommandLineApp(void)
|
|||||||
std::string appPath;
|
std::string appPath;
|
||||||
std::string fname;
|
std::string fname;
|
||||||
//uint32_t syntax;
|
//uint32_t syntax;
|
||||||
string product="";
|
string language="";
|
||||||
string syn;
|
string syn;
|
||||||
|
bool settings;
|
||||||
int res = -1;
|
int res = -1;
|
||||||
ConfigOptions options;
|
ConfigOptions options;
|
||||||
|
|
||||||
//Poco::Util::Application::instance().config()
|
|
||||||
|
|
||||||
utils=new QUtils();
|
utils=new QUtils();
|
||||||
|
|
||||||
//LOG_NOTE << "this is it!" << endl;
|
|
||||||
|
|
||||||
startdirectory = Poco::Path::current();
|
startdirectory = Poco::Path::current();
|
||||||
appPath=utils->getAppPath();
|
appPath=utils->getAppPath();
|
||||||
if (commandargs.size() == 0)
|
settings=getBool("option.settings",false);
|
||||||
|
if (isDebug()>0)
|
||||||
|
{
|
||||||
|
printf("num args: %ld\n",commandargs.size());
|
||||||
|
for (unsigned long i=0; i<commandargs.size(); i++)
|
||||||
|
{
|
||||||
|
printf("commandarg[%ld] |%s|\n",i,commandargs[i].c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//string help=getConfig("option.help","0");
|
||||||
|
//printf("help=|%s|\n",help.c_str());
|
||||||
|
//if(help!="0")
|
||||||
|
//{
|
||||||
|
// displayHelp();
|
||||||
|
// printf("help!\n");
|
||||||
|
// return(-4);
|
||||||
|
//}
|
||||||
|
if ((commandargs.size() == 0) && (!settings))
|
||||||
{
|
{
|
||||||
displayHelp();
|
displayHelp();
|
||||||
return (res);
|
return (res);
|
||||||
@ -110,20 +121,34 @@ int CLASS::runCommandLineApp(void)
|
|||||||
options.ReadFile(Poco::Path::current()+"/parms.json");
|
options.ReadFile(Poco::Path::current()+"/parms.json");
|
||||||
|
|
||||||
syn="QASM";
|
syn="QASM";
|
||||||
//syn=options.GetString("assembler.syntax","QASM");
|
|
||||||
|
|
||||||
string cmdsyn = Poco::toUpper(getConfig("option.type", ""));
|
string cmdsyn = Poco::toUpper(getConfig("option.type", ""));
|
||||||
|
//printf("cmdsyn: |%s|\n",cmdsyn.c_str());
|
||||||
if (cmdsyn!="")
|
if (cmdsyn!="")
|
||||||
{
|
{
|
||||||
syn=cmdsyn; // if they overrode the syntax on the command line, use it
|
syn=cmdsyn; // if they overrode the syntax on the command line, use it
|
||||||
}
|
}
|
||||||
|
syn=Poco::toUpper(syn); // if they overrode the syntax on the command line, use it
|
||||||
|
syn=Poco::trim(syn);
|
||||||
|
|
||||||
syn=Poco::toUpper(syn);
|
if (!options.supportedLanguage(syn))
|
||||||
product=Poco::trim(syn);
|
{
|
||||||
|
printf("Unsupported Language Type\n");
|
||||||
|
return(-1);
|
||||||
|
}
|
||||||
|
syn=options.convertLanguage(syn);
|
||||||
|
|
||||||
|
if (settings)
|
||||||
|
{
|
||||||
|
int x=options.printDefaults(syn);
|
||||||
|
return(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
language=syn;
|
||||||
|
|
||||||
if (isDebug()>0)
|
if (isDebug()>0)
|
||||||
{
|
{
|
||||||
printf("SYNTAX: |%s|\n",syn.c_str());
|
printf("SYNTAX: |%s|\n",language.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
@ -143,12 +168,18 @@ int CLASS::runCommandLineApp(void)
|
|||||||
for (ArgVec::const_iterator it = commandargs.begin(); it != commandargs.end(); ++it)
|
for (ArgVec::const_iterator it = commandargs.begin(); it != commandargs.end(); ++it)
|
||||||
{
|
{
|
||||||
int32_t format_flags=CONVERT_LINUX;
|
int32_t format_flags=CONVERT_LINUX;
|
||||||
Poco::File fn(*it);
|
|
||||||
|
string arg=*it;
|
||||||
|
Poco::File fn(arg);
|
||||||
int x;
|
int x;
|
||||||
std::string p = fn.path();
|
std::string p = fn.path();
|
||||||
Poco::Path path(p);
|
Poco::Path path(p);
|
||||||
//logger().information(path.toString());
|
//logger().information(path.toString());
|
||||||
|
|
||||||
|
if (!fn.exists())
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
std::string e = toUpper(path.getExtension());
|
std::string e = toUpper(path.getExtension());
|
||||||
|
|
||||||
std::string cmd = Poco::toUpper(getConfig("option.exec", "asm"));
|
std::string cmd = Poco::toUpper(getConfig("option.exec", "asm"));
|
||||||
@ -206,7 +237,7 @@ int CLASS::runCommandLineApp(void)
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
t->init();
|
t->init();
|
||||||
t->setProduct(product);
|
t->setLanguage(language);
|
||||||
t->format_flags=format_flags;
|
t->format_flags=format_flags;
|
||||||
|
|
||||||
std::string f = path.toString();
|
std::string f = path.toString();
|
||||||
@ -240,7 +271,7 @@ int CLASS::runCommandLineApp(void)
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
t->init();
|
t->init();
|
||||||
t->setProduct(product);
|
t->setLanguage(language);
|
||||||
|
|
||||||
|
|
||||||
std::string f = path.toString();
|
std::string f = path.toString();
|
||||||
@ -277,7 +308,7 @@ int CLASS::runCommandLineApp(void)
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
t->init();
|
t->init();
|
||||||
t->setProduct(product);
|
t->setLanguage(language);
|
||||||
|
|
||||||
std::string f = path.toString();
|
std::string f = path.toString();
|
||||||
t->filename = f;
|
t->filename = f;
|
||||||
|
1
qasm.h
1
qasm.h
@ -28,7 +28,6 @@ protected:
|
|||||||
virtual void displayVersion();
|
virtual void displayVersion();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
QOptions options;
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
85
qoptions.cpp
85
qoptions.cpp
@ -1,87 +1,2 @@
|
|||||||
|
|
||||||
#include <app.h>
|
|
||||||
|
|
||||||
#undef CLASS
|
|
||||||
#define CLASS QOptions
|
|
||||||
|
|
||||||
CLASS::CLASS()
|
|
||||||
{
|
|
||||||
jsonin="";
|
|
||||||
jsonobj=NULL;
|
|
||||||
parser.reset();
|
|
||||||
parser.setAllowComments(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
int CLASS::ReadFile(string path)
|
|
||||||
{
|
|
||||||
int ret=-1;
|
|
||||||
|
|
||||||
Poco::FileInputStream fs(path);
|
|
||||||
Poco::StreamCopier::copyToString(fs,jsonin);
|
|
||||||
parser.reset();
|
|
||||||
parser.setAllowComments(true);
|
|
||||||
jsonobj=parser.parse(jsonin);
|
|
||||||
|
|
||||||
config.load(path);
|
|
||||||
//config.enumerate(key,range);
|
|
||||||
return(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
Dynamic::Var CLASS::GetObject(string name)
|
|
||||||
{
|
|
||||||
JSON::Query q(jsonobj);
|
|
||||||
Dynamic::Var jresult=q.find(name);
|
|
||||||
return(jresult);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CLASS::GetBool(string name, bool def)
|
|
||||||
{
|
|
||||||
bool res=def;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Dynamic::Var jresult=GetObject(name);
|
|
||||||
if (!jresult.isEmpty())
|
|
||||||
{
|
|
||||||
if (jresult.isArray())
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
else if (jresult.isBoolean())
|
|
||||||
{
|
|
||||||
res=jresult;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch(...)
|
|
||||||
{
|
|
||||||
res=def;
|
|
||||||
}
|
|
||||||
return(res);
|
|
||||||
}
|
|
||||||
|
|
||||||
string CLASS::GetString(string name, string def)
|
|
||||||
{
|
|
||||||
string res=def;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Dynamic::Var jresult=GetObject(name);
|
|
||||||
if (!jresult.isEmpty())
|
|
||||||
{
|
|
||||||
if (jresult.isArray())
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
else if (jresult.isString())
|
|
||||||
{
|
|
||||||
res=jresult.toString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch(...)
|
|
||||||
{
|
|
||||||
res=def;
|
|
||||||
}
|
|
||||||
return(res);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
233
qoptions.h
233
qoptions.h
@ -1,6 +1,8 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "qasm.h"
|
#include "qasm.h"
|
||||||
|
|
||||||
|
using namespace Poco;
|
||||||
|
|
||||||
#define MAX_PREFIX 32
|
#define MAX_PREFIX 32
|
||||||
|
|
||||||
#define MODE_6502 0
|
#define MODE_6502 0
|
||||||
@ -26,12 +28,19 @@
|
|||||||
#define OPTION_M16_PLUS 0x8000
|
#define OPTION_M16_PLUS 0x8000
|
||||||
|
|
||||||
|
|
||||||
|
class myLayeredConfiguration : public Poco::Util::LayeredConfiguration
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
myLayeredConfiguration() : Poco::Util::LayeredConfiguration() {};
|
||||||
|
~myLayeredConfiguration() {};
|
||||||
|
};
|
||||||
|
|
||||||
#undef CLASS
|
#undef CLASS
|
||||||
#define CLASS ConfigOptions
|
#define CLASS ConfigOptions
|
||||||
class CLASS
|
class CLASS
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
vector<shared_ptr<JSONConfiguration>> configs;
|
//vector<shared_ptr<JSONConfiguration>> configs;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Poco::JSON::Parser parser;
|
Poco::JSON::Parser parser;
|
||||||
@ -40,8 +49,8 @@ public:
|
|||||||
uint16_t format_flags;
|
uint16_t format_flags;
|
||||||
|
|
||||||
uint16_t cpu_mode;
|
uint16_t cpu_mode;
|
||||||
string product;
|
string language;
|
||||||
uint16_t productlevel;
|
uint16_t langlevel;
|
||||||
string prefixes[MAX_PREFIX];
|
string prefixes[MAX_PREFIX];
|
||||||
|
|
||||||
uint8_t start_mx;
|
uint8_t start_mx;
|
||||||
@ -61,14 +70,14 @@ public:
|
|||||||
int16_t linebytes;
|
int16_t linebytes;
|
||||||
int16_t overflowbytes;
|
int16_t overflowbytes;
|
||||||
|
|
||||||
//Poco::Util::LayeredConfiguration config;
|
myLayeredConfiguration config;
|
||||||
|
|
||||||
bool usecolor;
|
bool usecolor;
|
||||||
|
|
||||||
CLASS()
|
CLASS()
|
||||||
{
|
{
|
||||||
setDefaults();
|
setDefaults();
|
||||||
setProduct("QASM");
|
setLanguage("QASM");
|
||||||
}
|
}
|
||||||
~CLASS()
|
~CLASS()
|
||||||
{
|
{
|
||||||
@ -83,7 +92,7 @@ public:
|
|||||||
bool useColor(void)
|
bool useColor(void)
|
||||||
{
|
{
|
||||||
bool res=false;
|
bool res=false;
|
||||||
if (getBool("option.color",false))
|
if (PAL::getBool("option.color",false))
|
||||||
{
|
{
|
||||||
res=true;
|
res=true;
|
||||||
}
|
}
|
||||||
@ -97,17 +106,57 @@ public:
|
|||||||
bool isQuiet(void)
|
bool isQuiet(void)
|
||||||
{
|
{
|
||||||
bool res;
|
bool res;
|
||||||
res=getBool("option.quiet",false);
|
res=PAL::getBool("option.quiet",false);
|
||||||
if (isDebug()>0)
|
if (isDebug()>0)
|
||||||
{
|
{
|
||||||
res=false;
|
res=false;
|
||||||
}
|
}
|
||||||
return(res);
|
return(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isList(void)
|
bool isList(void)
|
||||||
{
|
{
|
||||||
bool res;
|
bool res;
|
||||||
res=getBool("option.list",false);
|
res=PAL::getBool("option.list",false);
|
||||||
|
//printf("list: %d\n",res);
|
||||||
|
return(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
int printDefaults(string lang)
|
||||||
|
{
|
||||||
|
int res=-1;
|
||||||
|
string l=Poco::toUpper(lang);
|
||||||
|
if (l=="")
|
||||||
|
{
|
||||||
|
l=Poco::toUpper(language);
|
||||||
|
}
|
||||||
|
if (l!="")
|
||||||
|
{
|
||||||
|
setLanguage(l);
|
||||||
|
setCurrent();
|
||||||
|
printf("Defaults for language (%s)\n",language.c_str());
|
||||||
|
printf("\tLanguage:\t\t\t\t\t%s\n",language.c_str());
|
||||||
|
printf("\t\tlanguageLevel:\t\t\t\t%d\n",langlevel);
|
||||||
|
printf("\t\tcpu_mode:\t\t\t\t%d\n",cpu_mode);
|
||||||
|
printf("\t\tstart_mx:\t\t\t\t%d\n",start_mx);
|
||||||
|
printf("\t\tPrefixes:\n");
|
||||||
|
|
||||||
|
for (int i=0; i<MAX_PREFIX; i++)
|
||||||
|
{
|
||||||
|
if (prefixes[i].length()>0)
|
||||||
|
{
|
||||||
|
printf("\t\t\t%02d:\t\t\t%s\n",i,prefixes[i].c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//uint16_t format_flags;
|
||||||
|
|
||||||
|
|
||||||
|
//bool start_listmode;
|
||||||
|
//bool listmode;
|
||||||
|
|
||||||
|
}
|
||||||
return(res);
|
return(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -148,6 +197,7 @@ public:
|
|||||||
if (success)
|
if (success)
|
||||||
{
|
{
|
||||||
//configs.push_back(shared_ptr<JSONConfiguration>(jc));
|
//configs.push_back(shared_ptr<JSONConfiguration>(jc));
|
||||||
|
config.add(jc);
|
||||||
ret=0;
|
ret=0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -159,13 +209,6 @@ public:
|
|||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
void printCurrentOptions(void)
|
|
||||||
{
|
|
||||||
printf("Current Options:");
|
|
||||||
printf(" product: %s\n",product.c_str());
|
|
||||||
//printf(" start_mx: \%%02d\n",start_mx);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool isMerlin32(void)
|
bool isMerlin32(void)
|
||||||
{
|
{
|
||||||
return(true);
|
return(true);
|
||||||
@ -176,11 +219,15 @@ public:
|
|||||||
return(false);
|
return(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setCurrent(void)
|
||||||
|
{
|
||||||
|
start_mx=GetInteger("asm.start_mx",3);
|
||||||
|
}
|
||||||
void setDefaults(void)
|
void setDefaults(void)
|
||||||
{
|
{
|
||||||
cpu_mode=MODE_6502;
|
cpu_mode=MODE_6502;
|
||||||
product="QASM";
|
language="QASM";
|
||||||
productlevel=0;
|
langlevel=0;
|
||||||
for (int i=0; i<MAX_PREFIX; i++)
|
for (int i=0; i<MAX_PREFIX; i++)
|
||||||
{
|
{
|
||||||
prefixes[i]="";
|
prefixes[i]="";
|
||||||
@ -204,43 +251,149 @@ public:
|
|||||||
usecolor=true;
|
usecolor=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setProduct(string productName)
|
void setLanguage(string lang)
|
||||||
{
|
{
|
||||||
string old=productName;
|
//printf("request language options to %s from %s\n",lang.c_str(),language.c_str());
|
||||||
string pn=Poco::toUpper(productName);
|
|
||||||
|
string old=language;
|
||||||
|
string pn=Poco::toUpper(lang);
|
||||||
if (old!=pn)
|
if (old!=pn)
|
||||||
{
|
{
|
||||||
printf("setting product options to %s\n",pn.c_str());
|
//printf("setting language options to %s\n",pn.c_str());
|
||||||
productName=pn;
|
language=pn;
|
||||||
|
setCurrent();
|
||||||
if (pn=="QASM")
|
if (pn=="QASM")
|
||||||
{
|
{
|
||||||
setQASM();
|
setQASM();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
string convertLanguage(string lang)
|
||||||
|
{
|
||||||
|
string res;
|
||||||
|
res=lang;
|
||||||
|
res=trim(res);
|
||||||
|
res=toUpper(res);
|
||||||
|
if (res=="MERLIN16+")
|
||||||
|
{
|
||||||
|
res="MERLIN16PLUS";
|
||||||
|
}
|
||||||
|
if (res=="MERLIN8")
|
||||||
|
{
|
||||||
|
res="MERLIN";
|
||||||
|
}
|
||||||
|
|
||||||
|
return(res);
|
||||||
|
}
|
||||||
|
bool supportedLanguage(string lang)
|
||||||
|
{
|
||||||
|
bool res=false;
|
||||||
|
string r=toUpper(lang);
|
||||||
|
r=trim(r);
|
||||||
|
|
||||||
|
r=trim(r);
|
||||||
|
if (r=="MERLIN")
|
||||||
|
{
|
||||||
|
res=true;
|
||||||
|
}
|
||||||
|
else if (r=="MERLIN8")
|
||||||
|
{
|
||||||
|
res=true;
|
||||||
|
}
|
||||||
|
else if (r=="MERLIN16")
|
||||||
|
{
|
||||||
|
res=true;
|
||||||
|
}
|
||||||
|
else if (r=="MERLIN16PLUS")
|
||||||
|
{
|
||||||
|
res=true;
|
||||||
|
}
|
||||||
|
else if (r=="MERLIN16+")
|
||||||
|
{
|
||||||
|
res=true;
|
||||||
|
}
|
||||||
|
else if (r=="MERLIN32")
|
||||||
|
{
|
||||||
|
res=true;
|
||||||
|
}
|
||||||
|
else if (r=="QASM")
|
||||||
|
{
|
||||||
|
res=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return(res);
|
||||||
|
}
|
||||||
void setQASM()
|
void setQASM()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool GetBool(string name, bool def)
|
||||||
|
{
|
||||||
|
bool res=def;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//Dynamic::Var jresult=GetObject(name);
|
||||||
|
//if (!jresult.isEmpty())
|
||||||
|
//{
|
||||||
|
// if (jresult.isArray())
|
||||||
|
// {
|
||||||
|
|
||||||
|
// }
|
||||||
|
// else if (jresult.isBoolean())
|
||||||
|
// {
|
||||||
|
// res=jresult;
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
catch(...)
|
||||||
|
{
|
||||||
|
res=def;
|
||||||
|
}
|
||||||
|
return(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
string GetString(string name, string def)
|
||||||
|
{
|
||||||
|
string res=def;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//config
|
||||||
|
}
|
||||||
|
catch(...)
|
||||||
|
{
|
||||||
|
res=def;
|
||||||
|
}
|
||||||
|
return(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t GetInteger(string name, int32_t def)
|
||||||
|
{
|
||||||
|
int32_t res=def;
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
std::vector<std::string> keys;
|
||||||
|
config.keys(keys);
|
||||||
|
for (unsigned int i=0;i<keys.size();i++)
|
||||||
|
{
|
||||||
|
printf("key[%d]: %s\n",i,keys[i].c_str());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
res=config.getInt(name);
|
||||||
|
}
|
||||||
|
catch(...)
|
||||||
|
{
|
||||||
|
res=def;
|
||||||
|
//throw;
|
||||||
|
}
|
||||||
|
return(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#undef CLASS
|
|
||||||
#define CLASS QOptions
|
|
||||||
|
|
||||||
class CLASS
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
Poco::Util::JSONConfiguration config;
|
|
||||||
Poco::JSON::Parser parser;
|
|
||||||
string jsonin;
|
|
||||||
Dynamic::Var jsonobj=NULL;
|
|
||||||
CLASS();
|
|
||||||
int ReadFile(string path);
|
|
||||||
Dynamic::Var GetObject(string name);
|
|
||||||
|
|
||||||
bool GetBool(string name, bool def=false);
|
|
||||||
string GetString(string name, string def="");
|
|
||||||
};
|
|
||||||
|
|
||||||
#undef CLASS
|
#undef CLASS
|
12
test.s
12
test.s
@ -1,8 +1,10 @@
|
|||||||
|
lst off
|
||||||
* [QASM] SYNTAX MERLIN16
|
* [QASM] SYNTAX MERLIN16
|
||||||
* [QASM] Filetype $06
|
* [QASM] Filetype $06
|
||||||
* [QASM] AuxType $2000
|
* [QASM] AuxType $2000
|
||||||
* [QASM] Volume TESTASM test.2mg 800K prodos 2mg
|
* [QASM] Volume TESTASM test.2mg 800K prodos 2mg
|
||||||
* [QASM] save TESTASM :SOURCE:${FILE}.bin
|
* [QASM] copyto TESTASM :SOURCE:${FILE}.bin
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
xc off
|
xc off
|
||||||
@ -20,7 +22,7 @@ begin
|
|||||||
;]m equ *
|
;]m equ *
|
||||||
; lda begin
|
; lda begin
|
||||||
; lda ]m
|
; lda ]m
|
||||||
lst on
|
;lst on
|
||||||
;end
|
;end
|
||||||
|
|
||||||
_mymac mac
|
_mymac mac
|
||||||
@ -32,7 +34,7 @@ _mymac mac
|
|||||||
_ascmac mac
|
_ascmac mac
|
||||||
asc ]1,]2,8D
|
asc ]1,]2,8D
|
||||||
eom
|
eom
|
||||||
lst off
|
;lst off
|
||||||
;var 'one';'two';'three'
|
;var 'one';'two';'three'
|
||||||
justlable ;line with just a lable
|
justlable ;line with just a lable
|
||||||
start
|
start
|
||||||
@ -51,9 +53,9 @@ another lda #$00 ;line with everything
|
|||||||
--^
|
--^
|
||||||
]1 nop
|
]1 nop
|
||||||
nop
|
nop
|
||||||
lst
|
;lst
|
||||||
bra ]1
|
bra ]1
|
||||||
|
|
||||||
;typ $06
|
;typ $06
|
||||||
sav 0/test.bin
|
sav 0/test.bin
|
||||||
lst off
|
;lst off
|
||||||
|
Loading…
x
Reference in New Issue
Block a user