With the disassembler
coming together so easy and a nice table of op codes and their associated mnemonics,
it seemed to me that I had everything to write an assembler as well. This was
not part of my original plans for an emulator but the idea of having an
emulator that was able to take source code and let you edit it while running
the program would be nice. When I implement the interpreter I am going to need
to write a lot of small chunks of assembly language and step over it to make
sure things are working. A built-in assembler would greatly aid this work and
would even be very handy for game development.
Looking at
the structure for my table, I realized that looking up mnemonics and finding
the associated OP Codes would be trivial to implement. A map of mnemonics can
be created with each mnemonic having a list of the different variants of the
instructions and the associated OP code. If you know the mnemonic and the address
mode, the OP code would simply be a traversal of the list. Here is the code for
generating the map.
for (inst in m6502.commands) { if (mapOfOpCodes.containsKey(inst.OPString)) mapOfOpCodes[inst.OPString]!!.add(inst) else { mapOfOpCodes.put(inst.OPString, arrayListOf<M6502Instruction>(inst)) } }
Traditional
6502 assembly language is not that difficult to parse. Or at least it does not
appear to be. It should be possible to write a simple tokenizer and a simple
parser to break down the assembly language and determine which address mode it
is. Of course, there are other aspects to assembling such as directives and
labels but how hard can they be? As it turns out a bit harder than I expected
but not really that hard.
While the
assembler was not in my original design goals, with the above code coming into
my head while I was still getting the disassembler written, I managed to
convince myself that this would be an interesting path to explore. As I write
this I have the assembler functioning and a partially implemented solution for labels
so it is well on it’s way. Development on it is now slow as I am using most of
my spare time to finish my Santa trilogy. The first of the three games will be
posted this Friday since even in Canada Black Friday is when the Christmas season
begins. Or at least the shopping part.
Next week
will be a look at the game which was developed without Adobe Animate CC, though
still using the Create.js libraries. If you don’t have money to spend on Creative
Cloud but have Action Script or Flash experience then this is actually a viable
path. Even without Flash experience, the Create.js library is a good library to
use for JavaScript games. More on that next week.
No comments:
Post a Comment