Commit Graph

75 Commits

Author SHA1 Message Date
Kelvin Sherlock fc62d0c9e7 'a' as an operand is ignored.
Based on testing with Merlin-16+ 4.12, this seems to apply in all cases

inc a -> equivalent to inc
lda a -> equivalent to lda (bad address mode error)

if you do have an 'a' label, you need to specify the address mode, eg

lda |a, lda >a, lda <a
2021-08-31 18:08:08 -04:00
Kelvin Sherlock 8d65e4c290 link script ext support
"label ext" should import label (an absolute ent from a .L file) into the local symbol table.
handled by setting the linkgeqbit.
2021-05-03 23:50:56 -04:00
Kelvin Sherlock 59925b3a08 qlinkgs - implement the len/pos linker opcodes
len [label]

sets label = size of most recently linked/imported file

  pos [label]

sets label = size of current segment.  If no label, resets the position variable to 0.

label is added to the symbol table as an absolute entry.

Testing in merlin 16+, these are absolute entry labels, not gequ labels
Merlin does not include any ds fill in the len/pos, but that decision
seems questionable. these do include a ds fill for both.
2021-05-01 12:37:26 -04:00
Kelvin Sherlock b92683ed43 REL DS calculation is based on the total segment size, not the current file.
additionally, it was block moving the size of the DS fill rather than the size of the relocation records.
2021-04-27 16:39:22 -04:00
Lane Roathe b1867bb1e3
Merge pull request #58 from ksherlock/ovr_off
qlinkgs - OVR OFF was checking for 'F' instead of 'O'.
2021-04-26 08:59:35 -07:00
Lane Roathe e7852a03a6
Merge pull request #57 from ksherlock/link_badlabel_error2
qlinkgs - fix a couple cosmetic issues with error display
2021-04-26 08:58:50 -07:00
Kelvin Sherlock c12743b943 OVR OFF was checking for 'F' instead of 'O'. 2021-04-25 22:37:31 -04:00
Kelvin Sherlock b0fbd610c9 1. some, not all, badlable errors have bit $80 set (fatal indicator I believe). this is missing from the error table so they generate an undefined error.
2. error code isn't reloaded when checking for constraint/not resolved errors (which are handled specially), which would result in a second undefined error for them.
2021-04-24 21:04:58 -04:00
Kelvin Sherlock f35e76b682 In Merlin, link script GEQU (and KBD) values are available to the assembler and the linker, as absolute values.
This makes them available in the link phase (asm phase was already supported).
2021-04-23 23:38:25 -04:00
Kelvin Sherlock 8216c6f489 linker was relocating absolute entries (ie xxx equ $1234 ; ent xxx).
$20 is the bit in the on-disk symbol table for an absolute entry, linkabsbit (%0000_0100_0000_0000) is the correct bit in memory.
2021-04-11 22:03:55 -04:00
Lane Roathe bdbf62fe36
Merge pull request #53 from ksherlock/dw-star
qasm gs - update program counter w/in data operands
2020-10-12 08:46:02 -07:00
Kelvin Sherlock 4a380871cd ddb - update pcobjptr after each item. 2020-10-11 20:41:36 -04:00
Kelvin Sherlock bc29319414 allow comma in quoted string during address check
example:

pea ',' or pea #',' previously generated a bad address mode error.

The addmode function expected an X,Y, or S after the , which is how it generated the error.

Changed to skip , search within the quoted string.

test case:

* previously caused an error
	pea #','
	pea ','
	pea #","
	pea ","
	pea ','+','

* still cause and error (as they should):
	pea ',',y
	pea #',',y
* unterminated string:
	pea  '
2020-10-10 22:52:56 -04:00
Lane Roathe f7e30ea543
Merge pull request #50 from ksherlock/pass-1-errors
qasm iigs: print the line when an error is encountered on first pass
2020-06-08 09:44:50 -07:00
Kelvin Sherlock 8c94aa51c3 when an error is encountered in the first pass, print the line for better debugging. Previously, errors only printed the line on the second pass. 2020-06-06 18:03:54 -04:00
Kelvin Sherlock f6408be2c0 tab to label column instead of using a space. This results in nicer output when line numbers increment in size (9 -> 10, 99 -> 110, etc) 2020-06-06 16:13:05 -04:00
Kelvin Sherlock 0976282d81 update program counter (for eval purposes) after each argument in data statements.
db,dw,da,adr,adrl all allow multiple arguments.  In merlin, the value of * is updated after each argument.  in qasm, the value of * is not updated.

Encountered assembling marinetti.
2020-05-31 16:06:14 -04:00
Kelvin Sherlock 5ba4d043e5 merlin linker truncates opcodes to 3-characters.
This allows for things like `TYPe` and `LINk`
2020-05-30 13:26:20 -04:00
Kelvin Sherlock ca29613395 external, shifted references were always generating an interseg OMF relocation record even when in the same OMF segment (in which case they would reference segment 0 which is wrong). 2020-05-26 22:48:47 -04:00
Lane Roathe b5955278c3
Merge pull request #46 from ksherlock/label-15-2
qasm iigs: two more label length stragglers
2020-05-25 23:10:59 -07:00
Kelvin Sherlock f6e5812894 a couple more linker label size adjustments. 2020-05-25 23:08:15 -04:00
Kelvin Sherlock f5f3846a6d two more label length straglers 2020-05-25 18:32:17 -04:00
Kelvin Sherlock b4bf2c1611 fix to macro operand parsing for quoted strings
macro operand parsing code was a little too clever and had problems if both ' and " delimiters were present.

new code uses separate loops for handing delimited strings and raw strings, to keep things simpler and more correct.

```
xx	mac
	asc ]1
	eom

	xx '"hello"'
	xx "'hello'"
	xx 'hello'
	xx "hello"
	xx 'abc',00
	xx ff

 ```
before:
```
Assembling macstr.s

Bad operand in line: 5.

Bad operand in line: 6.
                     1 xx           mac
                     2              asc  ]1
                     3              eom
                     4
008000:              5              xx   '"hello"'
008000: 22 68 65 6C  5              asc  '"hello"'

008004: 6C 6F 22
                     5              eom
008007:              6              xx   "'hello'"
008007: A7 E8 E5 EC  6              asc  "'hello'"

00800B: EC EF A7
                     6              eom
00800E:              7              xx   'hello'
00800E: 68 65 6C 6C  7              asc  'hello'
008012: 6F
                     7              eom
008013:              8              xx   "hello"
008013: E8 E5 EC EC  8              asc  "hello"
008017: EF
                     8              eom
008018:              9              xx   'abc',00
008018: 61 62 63 00  9              asc  'abc',00
                     9              eom
00801C:              10             xx   ff
00801C: FF           10             asc  ff
                     10             eom

End of QuickASM assembly. 29 bytes, 2 errors, 22 lines, 1 symbols.

Elapsed time = < 1 second.
```

after:
```
Assembling macstr.s

                     1 xx           mac
                     2              asc  ]1
                     3              eom
                     4
008000:              5              xx   '"hello"'
008000: 22 68 65 6C  5              asc  '"hello"'
008004: 6C 6F 22
                     5              eom
008007:              6              xx   "'hello'"
008007: A7 E8 E5 EC  6              asc  "'hello'"
00800B: EC EF A7
                     6              eom
00800E:              7              xx   'hello'
00800E: 68 65 6C 6C  7              asc  'hello'
008012: 6F
                     7              eom
008013:              8              xx   "hello"
008013: E8 E5 EC EC  8              asc  "hello"
008017: EF
                     8              eom
008018:              9              xx   'abc',00
008018: 61 62 63 00  9              asc  'abc',00
                     9              eom
00801C:              10             xx   ff
00801C: FF           10             asc  ff
                     10             eom

End of QuickASM assembly. 29 bytes, 0 errors, 22 lines, 1 symbols.

Elapsed time = < 1 second.
```
2020-05-25 16:14:13 -04:00
Kelvin Sherlock 4b3caaf78f Don't try to do message center stuff when there was a message center error. 2020-05-24 22:45:17 -04:00
Kelvin Sherlock 1f241d42c8 infinite loop parsing the command table file
I don't remember the full details because it was a few months ago but there was an infinite loop on statup when parsing the command table.
2020-05-24 22:42:28 -04:00
Lane Roathe fb12ad70f7
Merge pull request #43 from ksherlock/sym32
Update label/symbol size from 15 to 31.
2020-05-24 16:18:58 -07:00
Lane Roathe 80839b641c
Update src/data/sym.equates.S ds section with proper offset values 2020-05-24 16:18:51 -07:00
Kelvin Sherlock 89b7308c15 Update labels/symbol size from 15 to 31.
Magic number offsets are also replaced with named constants.

Merlin 16+ increased the label size from 12 to 26 at some point and the 15-char limit causes duplicate label errors on some Merlin source code.
2020-05-24 18:37:21 -04:00
Kelvin Sherlock 8f7427d11d symbol table needs to be no-cross-bank since qasm uses mvn to copy entries into it (mvn won't cross banks) 2020-05-24 17:53:33 -04:00
Kelvin Sherlock 275f49e43e ent label-list operand should only execute on the second pass, after all labels are defined. 2020-01-15 21:00:16 -05:00
Kelvin Sherlock 9c8abb1bb7 quick link was pulling x/y in the wrong order (when no subtype was specified). 2020-01-14 20:45:48 -05:00
Lane Roathe 9f510117c0
Merge pull request #38 from ksherlock/undo-illegal-address
(qasm iigs) - add back error checking disabled for relative value bug
2020-01-13 19:18:10 -08:00
Kelvin Sherlock da1c2e8222 adds back error checking which was previously disabled due to the illegal relative value bug.
also fixes a couple tool macro typos that slipped in before
2020-01-13 22:13:16 -05:00
Kelvin Sherlock 861bb44d32 only add .S extension as necessary
modifies the asm command line, linker command line, and linker ASM/PUT/IF opcodes to only append a .S suffix if it's not already present.

this is more consistent with Merlin 16+ and less surprising for people who use the command-line asm or link commands.
2020-01-13 21:58:52 -05:00
Kelvin Sherlock 93a79855fb reset dumor to 0, not $8000, at DEND.
should fix a bug where DUM * (or DUM label) generates absolute values.
2020-01-11 19:01:41 -05:00
Kelvin Sherlock 7336daffbf fix y2k overflow.
_ReadTimeHex returns the year as an offset from 1900, so 2020 is 120, which overflows ('0' + 12 is ascii '<')

subtract 100, repeatedly, until it fits in 2 digits.  Should last into 2100.
2020-01-06 19:46:24 -05:00
Kelvin Sherlock fa3554f6e5 missing macros :) 2020-01-05 23:56:11 -05:00
Kelvin Sherlock a0bc5de359 assembler - use named tool macros 2020-01-05 19:11:28 -05:00
Kelvin Sherlock 1fe4590e2c use tool macros instead of numbers. also use normal tool macro case 2020-01-05 18:57:10 -05:00
Kelvin Sherlock 8d66e85d2c self-build linker.
will also build with merlin 16+, other than USR differences.
2020-01-05 18:31:35 -05:00
Kelvin Sherlock b45553c992 tweaks to self-compile qasm with qasm.
other than USR opcode differences, it should build with merlin 16+ as well.
2020-01-05 18:06:32 -05:00
Lane Roathe 81a1e5a37d
Merge pull request #32 from ksherlock/ksherlock-patch-3
(IIgs qasm) Add system 6.0 / System 6.0.1 macros
2020-01-03 10:36:31 -08:00
ksherlock 700524b0f2
(IIgs qasm) Add system 6.0 / System 6.0.1 macros
I regenerated the pre-compiled toolmacs file based on GSBug's toolcall list (plus Marinetti toolcalls).

This includes new tools from system 6.0/6.01 and a a few name updates. The _DU is gone I don't know what that is offhand and I dare say nobody used it since it doesn't exist.
2020-01-02 14:29:18 -05:00
Lane Roathe 2e27f6e785
Merge pull request #29 from ksherlock/ksherlock-patch-2
fix internal macro expansion
2019-12-29 18:33:12 -08:00
ksherlock 937c527344
fix internal macro expansion
I'm not sure why that line was commented out, but y has an undefined value at this point so it will read a random offset into the line.
2019-12-28 14:30:45 -05:00
ksherlock 92cffed07b
stack imbalance printing the hours elapsed
probably never noticed because no assembly ever took that long.
2019-12-27 22:25:42 -05:00
marketideas eba951f00f moving some test scripts around 2019-11-20 10:20:43 -08:00
marketideas e2dd7ab645 test 2019-11-19 17:09:58 -08:00
marketideas 2e6f8af54e all tests assemble, ]vars seem to be working 2019-11-19 11:27:17 -08:00
marketideas 572bdd5879 just a few more parser fixes 2019-11-19 09:22:27 -08:00