From 3583fc8379424e58ba6192305dac1f9abd44a2db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juhani=20Krekel=C3=A4?= Date: Thu, 18 Aug 2022 14:37:12 +0300 Subject: [PATCH] Fully implement stack-based memory manipulation in calculator.asm --- calculator.asm | 49 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/calculator.asm b/calculator.asm index d3b1a44..0a92c33 100644 --- a/calculator.asm +++ b/calculator.asm @@ -247,7 +247,7 @@ stSwap: ; Memory ; ------------------------------------------------------------------ -; a p -- +; b ptr -- stStoreByte: cleq r0, r0, popWord store storeByteHigh, r0 @@ -257,6 +257,53 @@ stStoreByte: or r0, r1 breq r0, r0, storeByte +; ptr -- b +stLoadByte: + cleq r0, r0, popWord + store loadByteHigh, r0 + store loadByteLow, r1 + cleq r0, r0, loadByte + xor r1, r1 + or r1, r0 + xor r0, r0 + breq r0, r0, pushWord + +; n ptr -- +stStoreWord: + cleq r0, r0, popWord + cleq r0, r0, tmpStoreWord01 + store storeByteHigh, r0 + store storeByteLow, r1 + cleq r0, r0, peekWord + cleq r0, r0, storeByte + cleq r0, r0, tmpLoadWord01 + cleq r0, r0, incWord + store storeByteHigh, r0 + store storeByteLow, r1 + cleq r0, r0, popWord + xor r0, r0 + or r0, r1 + breq r0, r0, storeByte + +; ptr -- n +stLoadWord: + cleq r0, r0, peekWord + store loadByteHigh, r0 + store loadByteLow, r1 + cleq r0, r0, loadByte + cleq r0, r0, tmpStoreWord01 + cleq r0, r0, popWord + cleq r0, r0, incWord + store loadByteHigh, r0 + store loadByteLow, r1 + cleq r0, r0, loadByte + xor r2, r2 + or r2, r0 + cleq r0, r0, tmpLoadWord01 + xor r1, r1 + or r1, r2 + breq r0, r0, pushWord + ; ================================================================== ; Low-level functions ; ==================================================================