diff --git a/henceforth/examples/test.asm b/henceforth/examples/test.asm new file mode 100644 index 0000000..8325d62 --- /dev/null +++ b/henceforth/examples/test.asm @@ -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 \ No newline at end of file diff --git a/henceforth/examples/test.bin b/henceforth/examples/test.bin new file mode 100644 index 0000000..3a9fe76 Binary files /dev/null and b/henceforth/examples/test.bin differ diff --git a/henceforth/examples/test.fth b/henceforth/examples/test.fth index 8455af2..8646ba3 100644 --- a/henceforth/examples/test.fth +++ b/henceforth/examples/test.fth @@ -1 +1 @@ -." t;;;;;;;;;;;;;;;;;;;;;;est\n" +0x0a dup dup emit emit emit diff --git a/henceforth/src/lib/compiler/instruction.rs b/henceforth/src/lib/compiler/instruction.rs index 1be274f..60e34aa 100644 --- a/henceforth/src/lib/compiler/instruction.rs +++ b/henceforth/src/lib/compiler/instruction.rs @@ -174,14 +174,6 @@ impl compiler::Compilable 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 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![