60 Commits

Author SHA1 Message Date
Cat's Eye Technologies
8f53f2d213 For scripts, use the Python interpreter that's found on the path. 2014-05-17 07:19:35 +01:00
Michael C. Martin
f48071add9 Merge pull request #22 from catseye/printable-chars-in-listing
Good catch. Merging that in 2.1.
2014-05-14 09:10:10 -07:00
Michael Martin
5b64c9701e Refactor the label mapper to be more like the lister. 2014-05-14 05:56:59 -07:00
Michael Martin
bac908bff5 Much prettier label map files 2014-05-09 23:55:56 -07:00
Michael Martin
70f93b22eb Rework label map collection
This uses a pass to interrogate the system for locations, then dumps
those out instead. It handles includes, anonymous labels, and basic
macros, but it does so in a somewhat ugly way. This data can be
readily abbreviated and should also be re-sorted.
2014-05-09 23:11:09 -07:00
Cat's Eye Technologies
1ab61cd3be The ASCII characters DEL (127) and US (31) are not printable. 2014-04-26 13:16:15 +01:00
Cat's Eye Technologies
c0bf2e98b7 A very, *very* poor-man's version of label<->address dump. Ugh! 2014-03-24 12:32:17 +00:00
gardners
d407791aa9 Merge github.com:michaelcmartin/Ophis into temp 2014-03-23 16:53:39 +10:30
gardners
a7994f9e85 4502 instructions INW and DEW are Zero Page, not Absolute 2014-03-23 16:51:01 +10:30
Michael Martin
42f01f7cd6 Bump minor version number and copyright dates 2014-03-22 22:09:11 -07:00
Michael Martin
3f13609932 Post-merge adjustments to 4502 patch. 2014-03-22 22:03:06 -07:00
gardners
adf965fc9d fix SBX (ZeroPage), Z for 4502 2014-02-08 02:56:41 +10:30
gardners
bcfd08c750 Fix 16-bit immediate mode. 2014-02-08 02:55:26 +10:30
gardners
dcc37f5751 Implement test for 4502 extensions.
Fix numerous bugs revealed through tests, some more remain.
2014-02-08 02:51:42 +10:30
gardners
591fc2fe35 make addressing mode cooercion work with varying addressing mode
lists.
2014-02-08 02:19:14 +10:30
gardners
5c162d2407 restore branch expansion for non-4502 targets 2014-02-08 01:59:42 +10:30
gardners
6856da1bbf fix various bugs with 4502 assembly. 2014-02-07 20:52:11 +10:30
gardners
5c4b23cbee fix 16-bit branch out-by-one error 2014-02-07 20:23:56 +10:30
gardners
dec3106744 implement new 4510 addressing modes.
promote relative branches to 16-bit when required.
2014-02-07 20:22:06 +10:30
gardners
c4be540f49 add 4502 option to Ophis command line. 2014-02-06 22:23:28 +10:30
gardners
ccef1b663f update Opcodes.py to include 4502 opcodes 2014-02-06 22:20:24 +10:30
gardners
7686b21396 update addressing modes. Add 4502 to chipsets.txt 2014-02-06 22:19:38 +10:30
gardners
45e79d5583 add 4502 opcode table. 2014-02-06 22:06:40 +10:30
Michael Martin
364b39edfb First draft of listfile support.
The .listfile pragma and the -l command line option will select the
output file for the listing.
2013-04-13 19:57:24 -07:00
Michael Martin
e5ac21f0f9 Second attempt at implementation of the BBXn instructions for Rockwell 65c02 chips.
Reliable technical documentation for how these instructions are decoded is a
little thin on the ground online, so some of this implementation is still
speculative.
2013-01-27 20:18:08 -08:00
Michael C. Martin
1c7174e696 Merge pull request #14 from catseye/fix-templabelcount
Declare templabelcount as a global in atom().
2013-01-10 22:25:03 -08:00
Cat's Eye Technologies
5fc504c6c1 Exit with exit code 1 if there were errors, 0 otherwise. 2012-10-25 10:51:39 +01:00
Cat's Eye Technologies
0b020a827b Add missing 'sys.' and remove unused module import. 2012-08-03 20:13:00 -05:00
Cat's Eye Technologies
45784e9b95 Declare templabelcount as a global in atom(). 2012-07-28 13:34:51 -05:00
Michael Martin
4ad16be245 Put tools under src 2012-06-16 02:07:02 -07:00
Michael Martin
5362a635c8 Fix up some typos in meta text. 2012-06-16 01:37:55 -07:00
Michael Martin
9ef2b91e9e packaging for 2.0 release 2012-06-13 00:24:21 -07:00
Michael Martin
7f650e787d Fix the bugs the test suite found
- .require now tracks absolute paths of loaded files
 - stricter checking of .incbin arguments
 - fix charmap reset directive
 - Allow register names (a, x, y) as labels, with warning
 - Allow opcode names as labels, with warning
2012-06-12 06:29:03 -07:00
Michael Martin
382a6a218b Set STDOUT to binary mode on Windows if needed 2012-06-10 18:53:49 -07:00
Michael Martin
cc9acf3ce4 Bugfix: Let Collapse Pass reverse collapses
This can happen if a branch extender pass shifts a load's target
label past the zero-page boundary.
2012-06-08 22:23:42 -07:00
Michael Martin
6e30cc4153 Wide instruction format for 65c02 2012-06-08 21:45:38 -07:00
Michael Martin
23700276a6 Introduce wide-mode override opcodes.
This solves the --no-collapse problem by letting you force
Absolute mode on an instruction by instruction bases, which is
usually going to be what you want anyway.
2012-06-06 05:13:19 -07:00
Michael Martin
4891849e4a Pass control command line options.
It turns out that --enable-collapse is fundamentally misguided. We'll
need a better solution for that. --no-branch-extension looks pretty good.
2012-06-06 04:33:21 -07:00
Michael Martin
7e503df96f Bugfix: .include wasn't blocking later .requires
When crossing directories, this will still be wrong, but that's a
larger fix for later.
2012-06-04 00:35:53 -07:00
Michael Martin
9323067e91 Improve .incbin to let its arguments be arbitrary expressions
This introduces a new IR node for mutable-during-assembly ranges.
In the common case, where offset and range are hardcoded or missing,
it continues with the older, more efficient behavior.
2012-06-03 23:50:29 -07:00
Michael Martin
9ea0962e52 Fixed missing import. 2012-06-03 20:22:48 -07:00
Michael Martin
86e58efce8 Merge catseye's incbin-range enhancement.
Needed a little work to merge cleanly, but no real surprises.

This isn't a complete solution yet, but it will work for the
basic case. It should allow expressions and gracefully handle
non-hardcoded cases (while still efficiently handling hardcoded
ones).
2012-06-03 20:00:40 -07:00
Michael Martin
cf0df92fb1 Wrap up the new file/dir handling.
An .outfile directive lets sources suggest default filenames.

Also, .include, .require, .incbin, and .charmapbin are relative
to their _source file_ as opposed the _directory you called Ophis
from_, like it really should have always been.
2012-06-03 19:50:17 -07:00
Michael Martin
17f68399ef Allow support for multiple input files.
To account for this change, output files are now prefixed with the
-o option, and if none is specified, it defaults to 'ophis.bin'.
2012-06-03 18:32:25 -07:00
Michael C. Martin
14a37ca879 Massive code modernization spree.
Full PEP8 compliance. Also, booleans have been inserted where
they make sense (introduced in 2.3!) and I haven't knowingly
added anything that will break 2.3 compatibility.

At this point the code really doesn't look like it was written
ten years ago. Hooray!
2012-06-02 00:04:15 -07:00
Michael Martin
f83379287f Don't destroy the OptParser.
As long as we're not gratuitously breaking compatibility, this
cleanup isn't available in 2.3 and it's not like ophis runs long
enough for this to be an issue anyway.
2012-06-01 00:39:12 -07:00
Michael C. Martin
d955fe00a1 Switch to "new-style" classes, because come on.
Ophis was originally written for Python 2.1, and it kind of shows.
Python 2.3 introduced booleans and optparse, so there's no reason
to not use new-style classes.
2012-06-01 00:24:51 -07:00
Michael C. Martin
e47073bc1d New command-line system.
This is a full optparse-based parser for all the options we want
to have in Ophis 2.0, but the pass-disablers aren't working yet.

This also doesn't handle positional arguments the way we hope
to eventually; that will come later.

optparse is deprecated in 2.7, but its replacement isn't available
in any previous version of Python, so we avoid it so as to not
gratuitously break compatibility on older machines.

It would be nice to at least stay usable on stock Leopard Macs (2.5).
2012-06-01 00:09:25 -07:00
Michael C. Martin
eae4ea7dcd Extend .advance to allow a filler expression. 2012-05-30 20:45:37 -07:00
Michael Martin
e58d5ccaac Win32 installer.
Includes the py2exe script, the version of the MSVC++ runtime Python 2.7
needs, and an NSIS script to assemble the installables out of the checkout
tree.

NB: Even though MakeNSIS is multiplatform, it should only be run on
Windows, since otherwise the linebreaks in the README won't be
Notepad-friendly.
2012-05-30 08:32:52 -07:00