diff --git a/SourceGen/AsmGen/IGenerator.cs b/SourceGen/AsmGen/IGenerator.cs index fc33913..1449acd 100644 --- a/SourceGen/AsmGen/IGenerator.cs +++ b/SourceGen/AsmGen/IGenerator.cs @@ -58,6 +58,9 @@ namespace SourceGen.AsmGen { /// AssemblerQuirks Quirks { get; } + /// + /// Label localization object. Behavior is assembler-specific. + /// LabelLocalizer Localizer { get; } /// @@ -73,8 +76,7 @@ namespace SourceGen.AsmGen { /// is primarily intended for undocumented ops, which don't have standard mnemonics, /// and hence can vary between assemblers. /// - /// - /// + /// Opcode to replace. /// Replacement mnemonic, an empty string if the original is fine, or /// null if the op is not supported at all and should be emitted as hex. string ReplaceMnemonic(OpDef op); @@ -83,10 +85,10 @@ namespace SourceGen.AsmGen { /// Generates an opcode/operand pair for a short sequence of bytes (1-4 bytes). /// Does not produce any source output. /// - /// - /// - /// - /// + /// Offset to data. + /// Number of bytes (1-4). + /// Opcode mnemonic. + /// Formatted operand. void GenerateShortSequence(int offset, int length, out string opcode, out string operand); /// @@ -99,21 +101,21 @@ namespace SourceGen.AsmGen { /// /// Outputs one or more lines of data for the specified offset. /// - /// + /// Offset to data. void OutputDataOp(int offset); /// /// Outputs an equate directive. The numeric value is already formatted. /// - /// - /// - /// + /// Symbol label. + /// Formatted value. + /// End-of-line comment. void OutputEquDirective(string name, string valueStr, string comment); /// /// Outputs a code origin directive. /// - /// + /// 24-bit address. void OutputOrgDirective(int address); /// @@ -122,33 +124,47 @@ namespace SourceGen.AsmGen { /// Merlin32 always sets both values (e.g. "MX %00"), cc65 sets each register /// individually (".A16", ".I8"). We need to accommodate both styles. /// - /// - /// - /// - /// - /// + /// Offset of change. + /// Previous value for M flag. + /// Previous value for X flag. + /// New value for M flag. + /// New value for X flag. void OutputRegWidthDirective(int offset, int prevM, int prevX, int newM, int newX); /// - /// Output a line of source code. All elements must be fully formatted. The - /// items will be padded with spaces to fit specific column widths. + /// Output a line of source code. All elements must be fully formatted, except for + /// certain assembler-specific things like ':' on labels. The items will be padded + /// with spaces to fit specific column widths. /// - /// - /// - /// - /// + /// Optional label. + /// Opcode mnemonic. + /// Operand; may be empty. + /// Optional comment. void OutputLine(string label, string opcode, string operand, string comment); /// - /// Output a line of source code. + /// Output a line of source code. This will be output as-is. /// - /// + /// Full text of line to outut. void OutputLine(string fullLine); } public class AssemblerQuirks { + /// + /// Are the arguments to MVN/MVP reversed? + /// public bool BlockMoveArgsReversed { get; set; } + + /// + /// Does the assembler configure assembler widths based on SEP/REP, but doesn't + /// track the emulation bit? + /// public bool TracksSepRepNotEmu { get; set; } + + /// + /// Is the assembler unable to generate relative branches that wrap around banks? + /// (Note this affects long-distance BRLs that don't appear to wrap.) + /// public bool NoPcRelBankWrap { get; set; } } } \ No newline at end of file diff --git a/SourceGen/RuntimeData/Apple/Cxxx-IO.sym65 b/SourceGen/RuntimeData/Apple/Cxxx-IO.sym65 index 55a6ad8..bd4ad3a 100644 --- a/SourceGen/RuntimeData/Apple/Cxxx-IO.sym65 +++ b/SourceGen/RuntimeData/Apple/Cxxx-IO.sym65 @@ -30,7 +30,7 @@ CLR80VID @ $C00C ;W 40 columns SET80VID @ $C00D ;W 80 columns CLRALTCHAR @ $C00E ;W primary char set SETALTCHAR @ $C00F ;W alternate char set -KBDSTRB @ $C010 ;WR keyboard strobe +KBDSTRB @ $C010 ;RW keyboard strobe RDLCBNK2 @ $C011 ;R status of selected $Dx bank RDLCRAM @ $C012 ;R status of $Dx ROM / $Dx RAM RDRAMRD @ $C013 ;R status of main/aux RAM reading @@ -86,7 +86,7 @@ DIAGTYPE @ $C046 ;W self-test diagnostics CLRVBLINT @ $C047 ;W clear VBL interrupt CLRXYINT @ $C048 ;W clear XY interrupt -EMUBYTE @ $C04F ;WR used by emulators to identify themselves +EMUBYTE @ $C04F ;RW used by emulators to identify themselves TXTCLR @ $C050 ;RW display graphics TXTSET @ $C051 ;RW display text