1
0
mirror of https://github.com/fadden/6502bench.git synced 2024-07-04 16:30:01 +00:00
Commit Graph

189 Commits

Author SHA1 Message Date
Andy McFadden
c80be07f73 Work around Merlin 32 instruction parsing bug
The 2014-label-dp test now passes.  Prior regression tests are
unaffected.

Also, renamed an IGenerator interface to more accurately reflect
its role.

(issue #37)
2018-11-02 13:49:27 -07:00
Andy McFadden
2096bd2c66 Document another assembler quirk
(see issue #39)
2018-10-31 15:28:01 -07:00
Andy McFadden
7aa3e4dbcd Show "assembling" when assembling
Merlin 32 is slow enough with a 64K data file that you have
enough time to read the text.
2018-10-30 16:41:56 -07:00
Andy McFadden
50e8be186a Add 2014-label-dp
This is primarily to exercise a Merlin 32 failure (issue #37).
However, it also exercises a problem with cc65 (issue #40).
Currently, only 64tass can assemble this project.
2018-10-30 16:07:35 -07:00
Andy McFadden
3cb1596d90 Add more bugs & quirks 2018-10-30 15:42:13 -07:00
Andy McFadden
e995747cb0 Code cleanup
Should be no change in behavior.

(issue #32) (issue #35) (issue #36)
2018-10-29 15:48:19 -07:00
Andy McFadden
f307ffe8c0 Replace another instance of double-arrow glyph
Change 80da6c replaced \u23e9 (black right-pointing double triangle)
with a downward-pointing triangle, because it didn't render under
Win7 or Linux.  It was also being used in the "info" window.  This
change replaces that occurrence with a right-pointing triangle.
2018-10-29 12:59:58 -07:00
Andy McFadden
18994ef772 Update comments 2018-10-27 12:46:10 -07:00
Andy McFadden
c46afe377e Document the "spaces in bytes column" feature 2018-10-27 12:34:59 -07:00
Andy McFadden
372eea385d Clarify 2018-10-26 15:59:00 -07:00
Andy McFadden
a8af7e8794 Improve the "common" expression formatter
To avoid confusing the assembler, expressions with a leading
parenthesis like "(foo & $ffff) + 1" are prefixed with a "0+".  This
is not necessary if the operand begins with a '#'.

(issue #16)
2018-10-26 15:45:39 -07:00
Andy McFadden
975ae1eb28 Speculative fix for reported FormatDataOp crash
This adds a null check on the dfd argument in FormatDataOp() to see
if we can prevent a crash.  The opcode/operand are presented as
"!FAILED!" to make it obvious to the user that something has gone
wrong.  Hopefully this will allow capture of a project that exhibits
the problem.
2018-10-26 15:19:27 -07:00
Andy McFadden
2cb6b55802 Generalize expression style setting
Before you could choose between Merlin-style and generic.  Now
there's a combo box that lets you choose Merlin, cc65, or
"common", the latter being used for 64tass.
2018-10-24 17:23:30 -07:00
Andy McFadden
da91f86043 Get 64tass expressions working
We now insert parenthesis as needed.  This can cause problems in
some situations, so we always prefix parenthetical expressions with
"0+", which looks goofy and is unnecessary for immediate operands.
But it does generate working source code.

Renamed the "simple" expression mode to "common", as it's not
particularly simple but is what you'd expect most assemblers to do.
(OTOH, life has been full of surprises.)

(issue #16)
2018-10-24 14:57:09 -07:00
Andy McFadden
61914c8f79 Progress toward 64tass expression support
Gave cc65 its own expression generator, as the precedence table seems
atypical if not unique.  Configured 64tass to use the "simple"
expression mode.

Added some operations on a 32-bit constant to 2007-labels-and-symbols
to exercise the current worst-case expression (shift + AND + add).
Tweaked the Merlin expression generator to handle it.

(issue #16)
2018-10-24 13:17:03 -07:00
Andy McFadden
f26a03869a Finish the underscore handling in the label localizer
Correctly handle pre-existing underscores and avoidance of
"reserved" labels.

Also, add more underscores to 2012-label-localizer to exercise
the code.

(issue #16)
2018-10-23 20:40:09 -07:00
Andy McFadden
f7e5cf2f45 Progress toward 64tass support
Most tests pass, but 2007-labels-and-symbols fails because the
expressions recognized by 64tass don't match up with either of the
other assemblers.

This is currently using a workaround for the local label syntax.
64tass uses '_' as the prefix, which is unfortunate since SourceGen
explicitly allowed underscores in labels.  (So does 64tass for that
matter, but it treats labels specially when the '_' comes first.)
We will need to rename any non-local user labels that start with '_'.

(issue #16)
2018-10-23 20:08:01 -07:00
Andy McFadden
eec37b684e Split C64 system def into .PRG/.BIN
One starts with a 16-bit load address, one does not.  Not sure
this is the right way to go, but it's worth a try.

(issue #33)
2018-10-23 12:30:19 -07:00
Andy McFadden
96ee33ae8c Optionally add spaces in the "bytes" column
Affects the display list and copy/paste text.  Makes the column
three spaces wider, but makes it easier to read.
2018-10-21 21:08:48 -07:00
Andy McFadden
80da6cc1df Replace symbol used to indicate embedded instructions
We were using \u23e9, BLACK RIGHT-POINTING DOUBLE TRIANGLE, but
neither Win7 SP1 nor Linux was able to display the glyph.  It also
gets all puffy in web browsers.  We now use \u25bc, BLACK
DOWN-POINTING TRIANGLE, which seems to work everywhere.  It also
feels more appropriate, because it appears next to the "containing"
opcode, with the embedded instruction appearing on the following
line.
2018-10-21 18:46:03 -07:00
Andy McFadden
7f06fdc079 Define a max asm column width 2018-10-21 17:51:07 -07:00
Andy McFadden
59f79645d2 Update docs for new assembler configuration scheme 2018-10-21 16:54:44 -07:00
Andy McFadden
ab9287fef8 Progress toward new assembler configuration
Changed the "quick config" buttons for the asm config and pseudo-op
tabs into a drop-list and "set" button.  The default values for
each assembler are now defined in the Asm*.cs file, rather than in
the settings code.
2018-10-21 16:36:48 -07:00
Andy McFadden
9aabd988a8 Progress toward new assembler configuration
Use configured column widths when generating output.

The regression test always uses the assembler-preferred default
widths.
2018-10-20 21:24:28 -07:00
Andy McFadden
4f9af30455 Progress toward new assembler configuration
Rather than have each assembler get its own app config string for
the cross-assembler executable, we now have a collection of per-
assembler config items, of which the executable path name is one
member.  The Asm Config tab has an auto-generated pop-up to select
the assembler.

The per-assembler settings block is serialized with the rather
unpleasant JSON-in-JSON approach, but nobody should have to look
at it.

This also adds assembler-specific column widths to the settings
dialog, though they aren't actually used yet.
2018-10-20 20:35:32 -07:00
Andy McFadden
f81c534d25 Merge Gen* and Asm* source files
Each supported assembler has an IGenerator interface and an
IAssembler interface.  They're still two separate classes, but now
both are implemented in the same source file.  (They'll probably
stay separate classes, since the two have little interaction.)

I'm keeping the "Asm*" filename.  Seems the more natural fit.

Also, changed AssemblerInfo to try to get all assembler-specific
stuff into a single table.
2018-10-17 13:50:28 -07:00
Andy McFadden
42e5223efb Version 1.1.0-dev1 2018-10-17 13:11:12 -07:00
Andy McFadden
1756fa081b Version 1.0.0 2018-10-16 10:32:48 -07:00
Andy McFadden
25b7faf43b Hex dump shows file offset, not address 2018-10-15 17:24:32 -07:00
Andy McFadden
23a4852838 Fix goto-by-offset
Most of the decorative items associated with a file offset are
placed before the item in the display list, and given a span of
zero.  This yields the correct behavior in a binary search: an
exact match finds the decorative item (e.g. a blank line), while a
match partway into the instruction or multi-byte data item causes
the binary search to move on to the next line, where it's resolved.

The problem is that we were adding a blank line *after* instructions
in the no-continue case.  If the binary search found the blank line
before it found the instruction, it would guess "too high" rather
than "too low", and miss the actual instruction line.

We now set a flag and add the blank line as part of the following
item.  We do a little dance at the start to ensure that the blank
line doesn't disappear during a partial update.
2018-10-15 14:13:59 -07:00
Andy McFadden
46cb5ac6ce Version 1.0.0-beta2 2018-10-12 10:04:16 -07:00
Andy McFadden
a47e5bb895 Minor tweak to note formatting 2018-10-11 17:51:32 -07:00
Andy McFadden
e8d7057c2f Make the codeListView column-width setting work like the others
Don't serialize on every column change, just mark app settings as
"dirty" and box it up before writing the settings file.
2018-10-11 17:19:09 -07:00
Andy McFadden
2b6a76fad0 Recognize mouse thumb-button for navigate-back
There's a common convention for using one of the thumb buttons on
the side of the mouse to mean "back", notably in web browsers.  I
keep hitting it without thinking about it, so let's just make it
official.
2018-10-11 17:03:08 -07:00
Andy McFadden
b97f7ca3d8 Fix add-label shortcut for adjusted operands
When you edit the operand of an instruction that targets an in-file
address, you're given the opportunity to specify a shortcut that
applies the symbol to the instruction's target address in addition
to or instead of defining a weak symbol reference on the instruction
being edited.

This didn't work right for operands with adjustments, e.g. the store
instructions in self-modifying code.  It put the label at the
unadjusted offset, which does nothing useful.

We now correctly back up to the start of the instruction or multi-
byte data area.
2018-10-11 16:48:55 -07:00
Andy McFadden
b97a25797a Add some more Applesoft zero-page locations 2018-10-11 16:48:30 -07:00
Andy McFadden
ec33c74cd5 Add symbols for Atari Lynx
Another system I know nothing about.
2018-10-11 14:51:54 -07:00
Andy McFadden
26f8a01b5d Add a C128 Kernal entry point list
Looks like the C64 stuff is also available to the C128, so include
this and the C64 defs in the C128 system definition.
2018-10-11 10:46:47 -07:00
Andy McFadden
1ad4bcb150 Add a C64 Kernal entry point list
I know nothing about the C64, but there's a lot of info on the web.
This stuff looked important.

(issue #19)
2018-10-11 10:01:04 -07:00
Andy McFadden
457c981a2e Fix selection highlight update call
Change acf19870 fixed one bug but introduced another: the call to
update the highlight happened before the selection was restored, so
it could potentially refer to a line that no longer existed.
2018-10-10 17:37:24 -07:00
Andy McFadden
a4e3680655 Remove some test symbols from Cxxx-IO 2018-10-10 16:41:33 -07:00
Andy McFadden
52388b4065 Update some comments 2018-10-10 16:41:03 -07:00
Andy McFadden
9363c3d852 Show a warning when running under Mono 2018-10-10 12:32:12 -07:00
Andy McFadden
b7dc8e1711 Improve behavior under Mono
Worked around two crashes in Mono 5.16's WinForms implementation.
(See mono/mono#11070 for the details.)

Still very unstable, but it no longer crashes on startup.

Also, tweaked the "about" box title.
2018-10-10 11:07:04 -07:00
Andy McFadden
275c6dec8c Version 1.0.0-beta1 2018-10-09 20:34:47 -07:00
Andy McFadden
acf19870c2 Add advanced tutorial
Also, fixed a bug where the operand highlight would get out of sync
after an edit.
2018-10-09 14:55:16 -07:00
Andy McFadden
fd6d8273a9 Add custom flag updaters for ROL/ROR
There are some useful interactions between C/N and maybe Z.  Added
a quick test to 1003-flags-and-branches.

Also, updated the 2008-address-changes tests.  Change b37d3dba
extended the nearby-target range of out-of-file symbols by one, so
one line that didn't get an operand label now does.
2018-10-09 13:15:41 -07:00
Andy McFadden
0851746123 Merge branch 'master' of https://github.com/fadden/6502bench 2018-10-09 10:24:37 -07:00
Andy McFadden
705c6e383b Clean up HTML in manual 2018-10-09 10:04:10 -07:00
Andy McFadden
e31de84641 Add remaining Applesoft BASIC tokens 2018-10-08 18:03:04 -07:00
Andy McFadden
c182ecba35
Fix items in angle brackets 2018-10-08 17:11:03 -07:00
Andy McFadden
a83e4a2b8e Move menu items back to Actions menu when context menu closes
Otherwise you can't open the Actions menu with Alt-A.  This seems
like a flaw in WinForms, but maybe there's a reason for it.

(issue #26)
2018-10-08 16:25:34 -07:00
Andy McFadden
d728025144 Support command-line invocation 2018-10-08 16:18:56 -07:00
Andy McFadden
2c03216da9 Move symbol file and extension script docs into manual
Once upon a time, symbol files and extension scripts could only be
defined in the RuntimeData directory, so having the documentation
there made sense.  Since both of these things can now be defined in
project directories, the documentation belongs in the manual.

(issue #27)
2018-10-08 15:30:43 -07:00
Andy McFadden
b37d3dba02 Expand reach of external symbol nearby-target test
If PTR is defined as an external symbol, we were automatically
symbol-ifying PTR+1.  Now we also symbolify PTR+2.  This helps with
24-bit pointers on the 65816, and 16-bit "jump vectors", where the
address is preceded by a JMP opcode.

Removed the "AMPERV_" symbol I added to make the tutorial look
right.
2018-10-08 13:15:16 -07:00
Andy McFadden
3a001c5f8a Merge menu items for "edit operand" and "edit data"
The instruction operand editor and data operand editor are very
different, but there's no need to impose that distinction on the
user.  They want to edit the operand either way.  We now provide a
single "edit operand" menu item, and open the appropriate dialog
based on what they have selected.

This uses Ctrl+O as the keyboard shortcut, stealing it from
File > Open.

(issue #11)
2018-10-08 12:49:26 -07:00
Andy McFadden
9be99a7cac Make hint application less annoying
Two changes:
(1) Code and data hints are now only applied to the first byte on
    each selected line.  This allows you to slap a code hint on a
    string without lighting up the whole string.  Inline-data hints
    and hint removal work as before.
(2) Added a menu item (with Ctrl+D as shortcut) to toggle the state
    of the uncategorized data analyzer.  This makes it easy to turn
    off the feature that put the code into a string in the first
    place.
2018-10-07 21:55:44 -07:00
Andy McFadden
93c76e219f Add keyboard shortcuts for applying hints
Each is a two-key combo.  Hit Ctrl+H, then Ctrl+C/D/I/R as desired.
Hitting Ctrl+H followed by any other key results in an error beep.
2018-10-07 21:13:37 -07:00
Andy McFadden
360204a16d Add parent window to all MessageBox.Show() invocations
Every once in a while, SourceGen will become unresponsive when it
tries to show a MessageBox.  In the debugger you can see the GC
running frantically, but the stack trace is just sitting on the
MessageBox show call.  Apparently, if you don't specify a parent
window argument, the MessageBox will occasionally end up behind
everything else, and you can get stuck.

I'm not sure what the GC frenzy is about, or whether this will fix
what I'm seeing, but it's easy to do and might solve the problem.

cf. https://stackoverflow.com/q/3467403/294248
2018-10-07 13:13:00 -07:00
Andy McFadden
74037928ee Version 1.0.0-alpha3 2018-10-07 12:22:01 -07:00
Andy McFadden
b4d47df637 Add split-address table formatting to tutorial
Also, show generated symbol name in preview list.
2018-10-07 10:39:41 -07:00
Andy McFadden
309cc88a54 Improve split-address table formatter
Don't enable OK unless at least one address is valid.
Don't apply code hints unless asked.
Rename a couple of things for clarity.
Add documentation to manual.

(issue #10)
2018-10-06 21:15:59 -07:00
Andy McFadden
f4e4ac842d First cut of split-address table formatter
Allows specification of table data in various ways, for 16-bit and
24-bit addresses.  Shows a preview so you can see if the addresses
look about right.  Adds permanent labels at target offsets if none
are present.  Optionally sets code hints.

Works beautifully on the A2-Amper-fdraw example, but needs some
additional testing, documentation, etc.  Dialog is more complicated
that I would have liked, mostly because of 65816 support, but I
think it'll do.

(issue #10)
2018-10-06 18:05:31 -07:00
Andy McFadden
d4726dac7e Rough prototype of split-address table formatter 2018-10-06 09:16:31 -07:00
Andy McFadden
3c4e6cfe7a Another swing at first-word-is-load-addr
If we set the length word to assemble at address zero, the rest of
the code will try to use it as a zero-page label, so don't do that.
Instead, we use the start address, creating an overlapping region.
Easy enough to edit if that's undesirable.

(issue #23)
2018-10-05 20:55:05 -07:00
Andy McFadden
440eec2396 Use two .ORGs for first-word-is-load-addr
First is always at zero, second is at the address.  This puts an
ORG directive right at the start of the code, and avoids potentially
assembler-specific wrap-around behavior when the desired load
address is $0000 or $0001.

(issue #23)
2018-10-05 17:25:41 -07:00
Andy McFadden
92add74fc3 Add first-word-is-load-addr parameter to system definitions
If set, the first word of the file is used to set the load address.
The initial code entry hint is placed at offset +000002 instead of
the start of the file.

Set it to true for the C64 system definition.

(issue #23)
2018-10-05 15:39:44 -07:00
Andy McFadden
a23c7e5ab6 Rename undocumented 6502 opcodes to match Unintended Opcodes doc
These *almost* match what cc65 has, and are accepted as primary or
aliases by 64tass.

This combines the LAX and LXA operations.  LXA is the immediate
form of LAX, and behaves somewhat differently (and is unstable).
I was treating them as two separate operations with independent
mnemonics, but that doesn't seem to be the preferred way to
handle it.

The cc65 generator wasn't generating LAX before; now it does.  This
required nudging the width disambiguator, as LAX is a second
example of an instruction with both DP,Y and ABS,Y operands.

(issue #20)
2018-10-05 14:28:45 -07:00
Andy McFadden
2d1ef37a13 Switch some hotkeys around
Ctrl+L -> edit label
Ctrl+; -> edit comment (looks funny in menu)
Ctrl+M -> edit long comment
Ctrl+N -> edit note (was "new project")
Ctrl+W -> nothing (was "close project")

(issue #11)
2018-10-05 13:13:11 -07:00
Andy McFadden
4639af8b0e Strip single-byte format items on single-byte instructions
It's possible to have format descriptors on instructions that are
left over from when the bytes were treated as data.  Single-byte
formats were being allowed on single-byte instructions, which
confused things later when the code tried to apply the format to
an instruction with no operand.
2018-10-05 11:10:03 -07:00
Andy McFadden
e6b0438d5d Rename DomainManager property to DomainMgr
(issue #18)
2018-10-04 15:29:47 -07:00
Andy McFadden
8aba1c4fba Revise documentation 2018-10-04 15:15:44 -07:00
Andy McFadden
37bbc3bd41 Flip name/value columns in Symbols window
The Symbols window showed Type-Name-Value, which feels like the
natural order.  However, the Value field has a narrow max width,
while the Name field can get pretty long.  It makes more sense to
let Name fill out to the right edge, allowing the user to scroll
horizontally to view longer-than-usual names.

Also, noticed that the column sort preference wasn't being
restored.  Fixed that.

(Issue #12)
2018-10-02 13:55:23 -07:00
Andy McFadden
99a77c0341 Add Atari Lynx placeholder and 65SC02 definition 2018-10-02 13:18:45 -07:00
Andy McFadden
ea2bc67ef4 Output code for v2.17 when cc65 isn't found
We were generating code for > 2.17, with various bug fixes, but
since that's not shipping yet it won't be usable by anybody who
doesn't have a tip-of-tree cc65 installation.
2018-10-01 17:11:09 -07:00
Andy McFadden
31450d8314 Adjust default column widths for side panel ListViews 2018-10-01 16:51:32 -07:00
Andy McFadden
93b21b16f8 Fix some comments 2018-10-01 15:24:27 -07:00
Andy McFadden
78906dcf58 Record main window location as well as size
If the main window was maximized before, maximize it when we
restart.

Changed the preferences to record the width of the right panels,
rather than the splitter distance, which is actually the width of
the middle of the screen.

Seems to work correctly on my non-uniform multi-monitor setup.  I
added a check to confirm that the middle of the title bar falls in
the working area of the screen that WinForms thinks we're in, so it
shouldn't be possible to "lose" a window off the edge by dragging
it or by changing screen resolutions.
2018-10-01 15:04:23 -07:00
Andy McFadden
b27accc9d3 Add installation notes to README
Also, add a link to the tutorial near the top of the manual's index
page.
2018-10-01 11:09:04 -07:00
Andy McFadden
60aa252352 Improve chances of running under Mono
Updated the RuntimeData directory finder to work, and made the
stuff that crashed when the directory wasn't found crash in less
obvious ways.  Under Mono+Linux it still falls over with some
complaints about ListViews.  This will need some work.
2018-10-01 10:28:03 -07:00
Andy McFadden
11174b8e75 Exit without crashing when app init fails 2018-09-30 21:41:46 -07:00
Andy McFadden
c11af41019 Placate the static code analyzer 2018-09-30 21:25:26 -07:00
Andy McFadden
b9558c58d4 Update READMEs 2018-09-30 15:10:08 -07:00
david-schmidt
7f2a0b2cfc More Apple /// details 2018-09-29 00:31:32 -04:00
david-schmidt
405e155881 Flesh out symbols in Apple /// ROM and I/O space 2018-09-29 00:10:37 -04:00
david-schmidt
b477720a2a Whitespaces 2018-09-28 19:43:33 -04:00
david-schmidt
fd8f5e499c Skeletal support for Apple /// 2018-09-28 18:06:35 -04:00
Andy McFadden
76c532c6a6 Fix stack overflow (hopefully)
The code that tries to make the last column of the Symbols and
References windows exactly fit the window goes into an infinite
loop for everybody except me.  I'm removing the feature for now.
2018-09-28 13:40:40 -07:00
Andy McFadden
2c6212404d Initial file commit 2018-09-28 10:05:11 -07:00