1
0
mirror of https://github.com/fadden/6502bench.git synced 2024-07-14 05:28:55 +00:00
6502bench/SourceGen/SGTestData/Expected/2010-target-adjustment_acme.S
Andy McFadden 4981c3cdbb Fix ACME code gen "overflow"
ACME has a "real" PC and a "pseudo" PC.  The "real" PC determines the
initial position in a 64KB buffer used to hold assembler output.  If
the amount of code generated runs off the end, the assembler fails
with "produced too much code".

The source code generator in SourceGen was outputting a "real" PC
for the first address range and "psuedo" PCs for any address ranges
that followed.  This produced nice results for code with a single
range, but caused problems for multi-range sources if the initial
range was high in memory and a later range was lower in memory.
While the assembler isn't actually generating more than 64KB of code,
ACME's buffer management was detecting an overflow.

Now, if a source file has multiple address ranges, we set the "real"
PC to $0000 and use a "pseudo" PC for all ranges.  Output for projects
with a single address range is unmodified.
2020-05-14 16:37:33 -07:00

88 lines
1.8 KiB
ArmAsm

!cpu 65816
* = $0000
!pseudopc $1000 {
!as
!rs
load11 lda #$11
@L1002 ldx #$22
@load33 ldy #$33
@L1006 lda #$44
@predat bra @L1042
!word $0123
@dat1 !word $4567
!word $89ab
@L1010 !word $cdef
@L1012 !word $0011
@L1014 !word $2233
!byte $80
!text "The quick brown fox"
!byte $80
!word @L1042
!word @L1041
!word @L1042+1
@fill0 !fill 16,$00
@L1041 !byte $80
@L1042 lda @predat+2
lda @L1041
asl @dat1
rol @dat1+2
ror @L1010
and @L1012
ora @L1014
lda @fill0
sta @fill0+4
lda @fill0+8
sta @fill0+12
jsr @L1002
lda @L1006
@L1069 pea @L1069-1
per @L1069-1
lda @L1069+1
lda @L1069+2
lda #$ea
@L1077 sta @L1077
@L107A sta @L107A+1
sta $107f ;self-ref; operand format refs nonexistent symbol
brl @L2002
!byte $80
@dat81 !byte $81
} ;!pseudopc
!pseudopc $2000 {
@L2000 !byte $82
!byte $83
@L2002 bit @L2002
lda @dat81
lda @L2000
bra @L2018
@L200D !byte $7c
@L200E !byte $7d
@L200F !byte $7e
!byte $7f
@nearby !byte $80
!byte $81
!byte $82
!byte $83
@L2015 !byte $84
@L2016 !byte $85
@L2017 !byte $86
@L2018 lda @L200D
lda @L200E
lda @L200F
lda @nearby-1
lda @nearby
lda @nearby+1
lda @nearby+2
lda @nearby+3
lda @L2015
lda @L2016
lda @L2017
rts
} ;!pseudopc