mirror of
https://github.com/fadden/6502bench.git
synced 2024-12-11 13:50:13 +00:00
f31b7f5822
The masks should only be applied to address symbols. We were rejecting constants that didn't match the pattern.
109 lines
3.0 KiB
Plaintext
109 lines
3.0 KiB
Plaintext
; Copyright 2019 faddenSoft. All Rights Reserved.
|
|
; See the LICENSE.txt file for distribution terms (Apache 2.0).
|
|
|
|
*SYNOPSIS Symbol set 1 for test 2021-external-symbols
|
|
|
|
; Platform symbols aren't applied to file data.
|
|
CodeWrap @ $0f00 $1000 ;encases program
|
|
|
|
; SameName2 and SameName3 are replaced by later file
|
|
SameName1 @ $2000
|
|
SameName2 @ $2010
|
|
SameName3 @ $2020
|
|
|
|
; Symbols with the same values but different names are defined
|
|
; in later files. Names are chosen to not provide a strict
|
|
; alphabetical progression.
|
|
;
|
|
; These do not have widths, so we can check N+1 to confirm that it does
|
|
; not resolve to a symbol.
|
|
SameValA_C @ $2100
|
|
SameValB_B @ $2110
|
|
SameValC_A @ $2120
|
|
|
|
; Test overlap with project symbol. Declare at $2202(4b), and $220a(1b).
|
|
ChkProj1 @ $2200 4
|
|
ChkProj2 @ $2204 4
|
|
|
|
; Overlapping regions, defined within a single platform file. We
|
|
; should always use the most-recently-defined symbol. When all
|
|
; else is equal, alphabetical.
|
|
Over1 @ $3000 16 ;$3000-300f, inclusive
|
|
Over2 @ $3002 8 ;$3002-3009
|
|
Over3 @ $3006 7 ;$3006-300c
|
|
Over2a @ $3006 1 ;$3006
|
|
|
|
; Expected result:
|
|
; $3000-3001: Over1
|
|
; $3002-3005: Over2
|
|
; $3006 : Over4
|
|
; $3007-300c: Over3
|
|
; $300d-300f: Over1
|
|
|
|
; Overlapping regions defined in multiple files. The later definition
|
|
; takes priority. So while SepOver1 would normally end at $3102,
|
|
; instead it steps on the first two bytes of SepOver2.
|
|
SepOver2 @ $3102 4 ;$3102-3105, inclusive
|
|
|
|
; Test overlap with local variable. Declare at $41(2b).
|
|
OverVar @ $40 4
|
|
|
|
; Test bank wrap.
|
|
BankWrap @ $fff0 $20
|
|
|
|
; Width specifiers on constants should be ignored.
|
|
FatConst = $4000 8
|
|
|
|
; I/O direction test
|
|
ReadOnly < $5000 2 ;R
|
|
WriteOnly > $5001 2 ;W
|
|
|
|
|
|
;
|
|
; MULTI_MASK tests.
|
|
;
|
|
; The behavior of overlapping masks is not currently defined, so we don't test
|
|
; that scenario.
|
|
;
|
|
|
|
; overlaps with multi range in second symbol file
|
|
AlsoMoreMultiZero @ $c110 ;winner
|
|
|
|
*MULTI_MASK $ff00 $c000 $000f ;$c000-c00f, repeats $c010-c01f, etc. to $c0ff
|
|
MultiZero @ $c000
|
|
AlsoMultiZero @ $c010 ;wins (alphabetically)
|
|
MultiOne @ $c021
|
|
; Test: C000, C010, C020, C0F0
|
|
; Test: C001, C011, C021
|
|
; Test: C002, C012, C022
|
|
|
|
MultiRead < $c004 3 ;$c004/5/6, read-only
|
|
MultiWrite > $c005 3 ;$c005/6/7, write-only
|
|
; Test: read C003 C004 C005 C006 C007
|
|
; Test: write C004 C005 C006 C007 C008
|
|
|
|
; try a non-matching constant; should be accepted without complaint
|
|
MultiConst = $4567
|
|
|
|
|
|
;
|
|
; Invalid values. These cause a warning at load time, and the symbol will
|
|
; be ignored.
|
|
;
|
|
|
|
; Not in range.
|
|
MultiInvalid @ $1234
|
|
|
|
; Not all covered addresses are inside the masked range.
|
|
TooLong @ $c0f8 $a
|
|
|
|
;
|
|
; Badly-formed MULTI_MASK entries. These cause a warning at load time, and
|
|
; the directive will be ignored.
|
|
;
|
|
*MULTI_MASK $fffff $ffff $ffff ;range
|
|
*MULTI_MASK $ffff $fffff $ffff ;range
|
|
*MULTI_MASK $ffff $ffff $fffff ;range
|
|
|
|
*MULTI_MASK
|