-
Notifications
You must be signed in to change notification settings - Fork 29
/
asm-alts.mu4
33 lines (24 loc) · 1.16 KB
/
asm-alts.mu4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
( This file is part of muforth: https://muforth.dev/
Copyright 2002-2024 David Frech. (Read the LICENSE for details.)
( Make it easy to use - in both the assembler and disassembler - both the
"factory" - ie, manufacturer - and alternate opcode names.)
( In the assembler, define opcodes with opname rather than create or
constant.)
( Compile factory ops with opname)
: opname ( const) constant 0 , ( alt pointer) ;
( Compile alternate ops with alt, directly after the factory name - alt
names find the factory definition by following their link pointer.)
: >factory ( 'alt-code - 'factory-code) >link @ link> ;
: factory> ( 'factory-code - 'alt-code) >body cell+ @ ;
: alt
last-created @ ip> ( 'factory-code) >body cell+ ( alt slot)
create here body> ( 'alt-code) swap !
does> body> >factory execute ;
( In the disassembler, use .op to print the following opcode name. The
variable alt-names specifies use of the alternate, if there is one.)
variable alt-names
: (.op) pop @+ push ( fetch following cfa)
alt-names @ if factory> then >name type space ;
compiler
: .op compile (.op) .assembler. \chain ( should be factory op) ;
forth