From 6295bacd000e00d7c569fdc64697a29561f1d2b1 Mon Sep 17 00:00:00 2001 From: Wojciech Kosior Date: Sat, 5 Sep 2020 14:47:13 +0200 Subject: add tclasm multiinstructions (instructions, that possibly translate to more than one) --- .../instructions.s.tcl | 54 ++++++++++++++++++++++ .../test.v | 1 + .../words_to_verify.mem | 12 +++++ 3 files changed, 67 insertions(+) create mode 100755 tests/stack_machine_multiinstructions_load_store/instructions.s.tcl create mode 120000 tests/stack_machine_multiinstructions_load_store/test.v create mode 100644 tests/stack_machine_multiinstructions_load_store/words_to_verify.mem (limited to 'tests') diff --git a/tests/stack_machine_multiinstructions_load_store/instructions.s.tcl b/tests/stack_machine_multiinstructions_load_store/instructions.s.tcl new file mode 100755 index 0000000..bd16f8a --- /dev/null +++ b/tests/stack_machine_multiinstructions_load_store/instructions.s.tcl @@ -0,0 +1,54 @@ +#!/usr/bin/env tclsh + +source tclasm.tcl + +### set stack to h1FFE00, store 4 numbers (h11223344, h55667788, h8899AABB and +### hCCDDEEFF) at addresses h00002E, h00003E, h00004E and h00005E and load them +### back to stack (only 2 will really get written to stack's memory, other 2 +### will remain in r0 and r1). Then, write them to h00F0F0, h08F0F0, h10F0F0 and +### h18F0F0. +### At the and use operand-addressing to load back value h55667788 from h00003E +### (expressed as h000040 in im + (-2) in operand) and store it to h1FFFCD +### (expressed as h1F0F0D in im + h00F0C0 in operand). + +## set up stack +set_sp 0 + +## get number h11223344 into r1, and store it - repeat for other 3 numbers; +const h11223344 +store h00002E + +const h55667788 +store h00003E + +const h8899AABB +store h00004E + +const hCCDDEEFF +store h00005E + +## get numbers back on stack +load h00002E +load h00003E +load h00004E +load h00005E + +## store copies to new locations +store h18F0F0 +store h10F0F0 +store h08F0F0 +store h00F0F0 + +## prepare operand for later store operation +const h00F0C0 + +## use operand addressing to load back value from h000018 +const -2 +load+ h000040 + +## use operand addressing to trove value to h1FFFE2 = h1FFFC0 + h000022 +# immediate value gets sign-extended here! +store+ h1F0F0D + +## finish test +halt diff --git a/tests/stack_machine_multiinstructions_load_store/test.v b/tests/stack_machine_multiinstructions_load_store/test.v new file mode 120000 index 0000000..f5b6a59 --- /dev/null +++ b/tests/stack_machine_multiinstructions_load_store/test.v @@ -0,0 +1 @@ +../stack_machine_store/test.v \ No newline at end of file diff --git a/tests/stack_machine_multiinstructions_load_store/words_to_verify.mem b/tests/stack_machine_multiinstructions_load_store/words_to_verify.mem new file mode 100644 index 0000000..14b6f32 --- /dev/null +++ b/tests/stack_machine_multiinstructions_load_store/words_to_verify.mem @@ -0,0 +1,12 @@ +// address value + 2E 11223344 + 3E 55667788 + 4E 8899AABB + 5E CCDDEEFF + + 00F0F0 11223344 + 08F0F0 55667788 + 10F0F0 8899AABB + 18F0F0 CCDDEEFF + + 1FFFCD 55667788 -- cgit v1.2.3