Add emit word

This commit is contained in:
Dominic Grimm 2022-09-07 12:28:26 +02:00
parent 20dfd1244d
commit cf1af6b412
No known key found for this signature in database
GPG key ID: A6C051C716D2CE65
4 changed files with 58 additions and 10 deletions

View file

@ -0,0 +1,43 @@
.include "$lib/core.asm"
.include "$lib/std.asm"
.include "$lib/main.asm"
.define MEM_CALL_STACK, CORE_MEM_MEM
.macro stack_transfer_alu
.std_ld
tlr CORE_REG_B
.std_ld
tlr CORE_REG_A
.endmacro
.macro call_word, call_word_arg_0_label
ts (OFFSET + 14)
tlr CORE_REG_A
ts MEM_CALL_STACK
set
ts call_word_arg_0_label
tlr CORE_REG_PC
.endmacro
.macro return_word
.std_get MEM_CALL_STACK
tlr CORE_REG_PC
.endmacro
.jump_main
data:
data_strings:
words:
main:
.main main
push 10
tss
tls
tss
tls
.std_ld
tlr CORE_REG_A
.std_set CORE_MEM_CHR
.std_ld
tlr CORE_REG_A
.std_set CORE_MEM_CHR
.std_ld
tlr CORE_REG_A
.std_set CORE_MEM_CHR
.std_stop

Binary file not shown.

View file

@ -1 +1 @@
." t;;;;;;;;;;;;;;;;;;;;;;est\n"
0x0a dup dup emit emit emit

View file

@ -174,14 +174,6 @@ impl compiler::Compilable<compiler::Data, hence::parser::ast::Body> for Instruct
},
]),
Instruction::Swap => Ok(vec![
// hence::parser::ast::Node::Call {
// name: "ld".to_string(),
// arg: Some(hence::arg::Arg::Variable("CORE_REG_A".to_string())),
// },
// hence::parser::ast::Node::Call {
// name: "ld".to_string(),
// arg: Some(hence::arg::Arg::Variable("CORE_REG_B".to_string())),
// },
hence::parser::ast::Node::MacroCall {
name: "std_ld".to_string(),
args: vec![],
@ -242,7 +234,20 @@ impl compiler::Compilable<compiler::Data, hence::parser::ast::Body> for Instruct
args: vec![hence::arg::Arg::Variable("CORE_MEM_OUT".to_string())],
},
]),
Instruction::Emit => Ok(vec![]),
Instruction::Emit => Ok(vec![
hence::parser::ast::Node::MacroCall {
name: "std_ld".to_string(),
args: vec![],
},
hence::parser::ast::Node::Call {
name: "tlr".to_string(),
arg: Some(hence::arg::Arg::Variable("CORE_REG_A".to_string())),
},
hence::parser::ast::Node::MacroCall {
name: "std_set".to_string(),
args: vec![hence::arg::Arg::Variable("CORE_MEM_CHR".to_string())],
},
]),
Instruction::Space => Ok(vec![]),
Instruction::Spaces => Ok(vec![]),
Instruction::Cr => Ok(vec![