mirror of
https://github.com/mi57730/a2d.git
synced 2024-06-16 19:29:28 +00:00
Macros for relocated procs
This commit is contained in:
parent
8b66a9faa0
commit
d15e52eb53
|
@ -1598,9 +1598,7 @@ draw_title_bar:
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
;; Following proc is copied to $B1
|
;; Following proc is copied to $B1
|
||||||
save_org := *
|
PROC_AT adjust_txtptr_copied, $B1
|
||||||
.proc adjust_txtptr_copied
|
|
||||||
.org $B1
|
|
||||||
dummy_addr := $EA60
|
dummy_addr := $EA60
|
||||||
|
|
||||||
loop: inc TXTPTR
|
loop: inc TXTPTR
|
||||||
|
@ -1619,8 +1617,7 @@ loop: inc TXTPTR
|
||||||
sec
|
sec
|
||||||
sbc #$D0 ; carry set if successful
|
sbc #$D0 ; carry set if successful
|
||||||
end: rts
|
end: rts
|
||||||
.endproc
|
END_PROC_AT
|
||||||
.org save_org + .sizeof(adjust_txtptr_copied)
|
|
||||||
sizeof_adjust_txtptr_copied = .sizeof(adjust_txtptr_copied)
|
sizeof_adjust_txtptr_copied = .sizeof(adjust_txtptr_copied)
|
||||||
|
|
||||||
da_end := *
|
da_end := *
|
||||||
|
|
|
@ -899,9 +899,7 @@ path0: .res 65, 0
|
||||||
;;; Launch FILER - used if machine is not 128k
|
;;; Launch FILER - used if machine is not 128k
|
||||||
;;; Relocated to $300 before invoking
|
;;; Relocated to $300 before invoking
|
||||||
|
|
||||||
saved_org := *
|
PROC_AT launch_filer, $300
|
||||||
.proc launch_filer
|
|
||||||
.org $300
|
|
||||||
|
|
||||||
sys_start := $2000
|
sys_start := $2000
|
||||||
|
|
||||||
|
@ -931,13 +929,12 @@ path0: .res 65, 0
|
||||||
|
|
||||||
filename:
|
filename:
|
||||||
PASCAL_STRING "FILER"
|
PASCAL_STRING "FILER"
|
||||||
.endproc
|
|
||||||
|
END_PROC_AT
|
||||||
.assert .sizeof(launch_filer) <= $D0, error, "Routine length exceeded"
|
.assert .sizeof(launch_filer) <= $D0, error, "Routine length exceeded"
|
||||||
|
|
||||||
;;; ============================================================
|
;;; ============================================================
|
||||||
|
|
||||||
.org (saved_org + .sizeof(launch_filer))
|
|
||||||
|
|
||||||
filenum:
|
filenum:
|
||||||
.byte 0 ; index of file being copied
|
.byte 0 ; index of file being copied
|
||||||
|
|
||||||
|
|
24
macros.inc
24
macros.inc
|
@ -675,6 +675,30 @@ loop: lda src,x
|
||||||
.endmacro
|
.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
|
;;; Flow Control
|
||||||
;;; ============================================================
|
;;; ============================================================
|
||||||
|
|
|
@ -57,14 +57,16 @@ while (<STDIN>) {
|
||||||
$_ .= ' ' while length($_) % $tab;
|
$_ .= ' ' while length($_) % $tab;
|
||||||
$_ .= ':= ' . $expression . ' ';
|
$_ .= ':= ' . $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
|
# scope - flush left
|
||||||
my ($opcode, $arguments) = ($1 // '', $2 // '');
|
my ($opcode, $arguments) = ($1 // '', $2 // '');
|
||||||
|
|
||||||
$_ = $opcode . ' ' . $arguments;
|
$_ = $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
|
# conditional - half indent left
|
||||||
my ($opcode, $arguments) = ($1 // '', $2 // '');
|
my ($opcode, $arguments) = ($1 // '', $2 // '');
|
||||||
|
|
Loading…
Reference in New Issue
Block a user