Merge remote-tracking branch 'origin/disasm'

This commit is contained in:
Joshua Bell 2019-03-30 08:23:51 -07:00
commit 345f08a5ab
3 changed files with 30 additions and 7 deletions

View File

@ -1526,9 +1526,7 @@ draw_title_bar:
.endproc
;; Following proc is copied to $B1
save_org := *
.proc adjust_txtptr_copied
.org $B1
PROC_AT adjust_txtptr_copied, $B1
dummy_addr := $EA60
loop: inc TXTPTR
@ -1547,8 +1545,7 @@ loop: inc TXTPTR
sec
sbc #$D0 ; carry set if successful
end: rts
.endproc
.org save_org + .sizeof(adjust_txtptr_copied)
END_PROC_AT
sizeof_adjust_txtptr_copied = .sizeof(adjust_txtptr_copied)

View File

@ -679,6 +679,30 @@ loop: lda src,x
.endmacro
;;; ============================================================
;;; Placed Procedures
;;; ============================================================
;;; Usage:
;;; PROC_AT relocated_proc, $300
;;; .assert * = $300, ...
;;; ...
;;; END_PROC_AT
;;; .assert * = back to normal
.macro PROC_AT name, addr
.proc name
saved_org := *
.org addr
.proc __inner__
.endmacro
.macro END_PROC_AT
.endproc ; __inner__
.org saved_org + .sizeof(__inner__)
.endproc
.endmacro
;;; ============================================================
;;; Flow Control
;;; ============================================================

View File

@ -57,14 +57,16 @@ while (<STDIN>) {
$_ .= ' ' while length($_) % $tab;
$_ .= ':= ' . $expression . ' ';
} elsif (m/^(\.(?:end)?(?:proc|scope|macro|struct|enum)\b)\s*(.*)$/) {
} elsif (m/^(\.(?:end)?(?:proc|scope|macro|struct|enum)\b)\s*(.*)$/ ||
m/^(\b(?:END_)?(?:PROC_AT)\b)\s*(.*)$/) {
# scope - flush left
my ($opcode, $arguments) = ($1 // '', $2 // '');
$_ = $opcode . ' ' . $arguments;
} elsif (m/^(\.(?:if\w*|elseif|else|endif)\b)\s*(.*)$/) {
} elsif (m/^(\.(?:if\w*|elseif|else|endif)\b)\s*(.*)$/ ||
m/^(\b(?:IF_\w+|ELSE|END_IF)\b)\s*(.*)$/) {
# conditional - half indent left
my ($opcode, $arguments) = ($1 // '', $2 // '');