1
0
mirror of https://github.com/fadden/6502bench.git synced 2024-07-06 16:29:03 +00:00
6502bench/SourceGen/RuntimeData
Andy McFadden 2a41d70e04 Allow explicit widths in project/platform symbols, part 1
The ability to give explicit widths to local variables worked out
pretty well, so we're going to try adding the same thing to project
and platform symbols.

The first step is to allow widths to be specified in platform files,
and set with the project symbol editor.  The DefSymbol editor is
also used for local variables, so a bit of dancing is required.
For platform/project symbols the width is optional, and is totally
ignored for constants.  (For variables, constants are used for the
StackRel args, so the width is meaningful and required.)

We also now show the symbol's type (address or constant) and width
in the listing.  This gets really distracting when overused, so we
only show it when the width is explicitly set.  The default width
is 1, which most things will be, so users can make an aesthetic
choice there.  (The place where widths make very little sense is when
the symbol represents a code entry point, rather than a data item.)

The maximum width of a local variable is now 256, but it's not
allowed to overlap with other variables or run of the end of the
direct page.  The maximum width of a platform/project symbol is
65536, with bank-wrap behavior TBD.

The local variable table editor now refers to stack-relative
constants as such, rather than simply "constant", to make it clear
that it's not just defining an 8-bit constant.

Widths have been added to a handful of Apple II platform defs.
2019-10-01 16:00:08 -07:00
..
Apple Allow explicit widths in project/platform symbols, part 1 2019-10-01 16:00:08 -07:00
Atari Add symbols for Atari Lynx 2018-10-11 14:51:54 -07:00
Commodore Add a C128 Kernal entry point list 2018-10-11 10:46:47 -07:00
Help Minor fixes 2019-09-27 13:43:58 -07:00
Nintendo Initial file commit 2018-09-28 10:05:11 -07:00
TestData Initial file commit 2018-09-28 10:05:11 -07:00
ExportTemplate.html Make links less distracting in HTML output 2019-09-22 16:45:08 -07:00
LegalStuff.txt Initial file commit 2018-09-28 10:05:11 -07:00
README.md Add default text encoding mode to system definition 2019-08-14 18:03:40 -07:00
RuntimeData.csproj Initial file commit 2018-09-28 10:05:11 -07:00
SGStyle.css Make links less distracting in HTML output 2019-09-22 16:45:08 -07:00
SystemDefs.json Add default text encoding mode to system definition 2019-08-14 18:03:40 -07:00

Runtime Data

Symbol files and analyzer scripts are split into directories by platform manufacturer.

The Visual Studio project (RuntimeData.csproj) exists so you can edit scripts with IntelliSense and error highlighting. Everything here is distributed as source, not in compiled form; all compilation occurs at run time.

SystemDefs.json

This file defines the systems available in the "new project" screen. The following fields are mandatory:

  • Name - Short name that identifies the system.
  • GroupName - Short string used to group common items together in the UI.
  • CPU - Type of CPU used. The string must be part of the known set (see CpuDef.cs)
  • Speed - Clock rate, in MHz, of the CPU on the system. When multiple speeds are possible, use the most common, favoring NTSC over PAL.
  • SymbolFiles - List of platform symbol file identifiers (see below).
  • ExtensionScripts - List of extension script file identifiers (see below).
  • Parameters - List of optional parameters (see below).

The currently-supported parameters are:

  • load-address=<addr> - Specify the initial load address. The default is 0x1000.
  • entry-flags=<flag-set> - Specify the processor status flag values to use at entry points. This is intended for use on the 65802/65816, and may be one of "emulation", "native-short", and "native-long". The default is "emulation".
  • undocumented-opcodes={true|false} - Enable or disable undocumented opcodes. They are disabled by default.
  • first-word-is-load-addr={true|false} - If true, the first two bytes of the file contain the load address.
  • default-text-encoding=<mode> - Specify default character encoding. Use "c64-petscii" for PETSCII. The default is low/high ASCII.

All of these things can be changed after the project has begun, but it's nice to have them configured in advance.

SymbolFiles and ExtensionScripts use file identifiers, which look like "RT:Apple/ProDOS8.sym65". The "RT:" means that the file lives in the RuntimeData directory, and the rest is a partial pathname. Files that live in the same directory as the project file are prefixed with "PROJ:". All symbol files and extension scripts must live in the RuntimeData directory or project file directory, or they will not be loaded.

All "RT:" identifier paths are relative to the RuntimeData directory. The Group Name is not automatically added.

Platform Symbol Files and Extension Scripts

These are described in the "Advanced Topics" section of the manual (here).

Misc Files

LegalStuff.txt, Logo.png, and AboutImage.png are displayed by SourceGen, on the start screen and the About box.