mirror of
https://github.com/mi57730/a2d.git
synced 2025-01-28 02:34:40 +00:00
Macros for relocated procs
This commit is contained in:
parent
8b66a9faa0
commit
d15e52eb53
@ -1598,9 +1598,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
|
||||
@ -1619,8 +1617,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)
|
||||
|
||||
da_end := *
|
||||
|
@ -899,9 +899,7 @@ path0: .res 65, 0
|
||||
;;; Launch FILER - used if machine is not 128k
|
||||
;;; Relocated to $300 before invoking
|
||||
|
||||
saved_org := *
|
||||
.proc launch_filer
|
||||
.org $300
|
||||
PROC_AT launch_filer, $300
|
||||
|
||||
sys_start := $2000
|
||||
|
||||
@ -931,13 +929,12 @@ path0: .res 65, 0
|
||||
|
||||
filename:
|
||||
PASCAL_STRING "FILER"
|
||||
.endproc
|
||||
|
||||
END_PROC_AT
|
||||
.assert .sizeof(launch_filer) <= $D0, error, "Routine length exceeded"
|
||||
|
||||
;;; ============================================================
|
||||
|
||||
.org (saved_org + .sizeof(launch_filer))
|
||||
|
||||
filenum:
|
||||
.byte 0 ; index of file being copied
|
||||
|
||||
|
24
macros.inc
24
macros.inc
@ -675,6 +675,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
|
||||
;;; ============================================================
|
||||
|
@ -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 // '');
|
||||
|
Loading…
x
Reference in New Issue
Block a user