upgrade
[rrq/rrqforth.git] / memory.asm
index ff888938b34a4a831d950fd6180b07569f877e05..8f8f51e9bc37193f5a4a3b6deae09512cc0df1f1 100644 (file)
        WORD p_tfa2namez,'TFA>NAMEZ',fasm
        ;; (  tfa -- char* )
        pop rax
-       push qword[rax+32]
+       add rax,32
+       push rax
+       next
+
+       WORD p_cfa2tfa,'CFA>TFA',fasm
+       ;; ( cfa -- tfa )
+       pop rax
+       cfa2tfa rax
+       push rax
        next
 
        WORD p_cfa2flags_get,'CFA>FLAGS@',fasm
@@ -62,9 +70,9 @@
        ;; ( addr -- v )
        ;; Load the (unsigned) byte v from address addr.
        pop rax
-       mov bl,[rax]
-       push 0
-       mov [rsp],bl
+       xor rbx,rbx
+       mov bl,byte [rax]
+       push rbx
        next
        
        WORD p_Cput, 'C!',fasm
        mov byte [rax], bl
        next
 
+       WORD p_Wget, 'W@',fasm
+       ;; ( addr -- v )
+       ;; Load the (unsigned) double-byte v from address addr.
+       pop rax
+       xor rbx,rbx
+       mov bx,word [rax]
+       push rbx
+       next
+       
+       WORD p_Wput, 'W!',fasm
+       ;; ( v addr -- )
+       ;; Store byte value v at address addr.
+       pop rax
+       pop rbx
+       mov word [rax], bx
+       next
+
+       WORD p_Dget, 'D@',fasm
+       ;; ( addr -- v )
+       ;; Load the (unsigned) double-byte v from address addr.
+       pop rax
+       xor rbx,rbx
+       mov ebx,dword [rax]
+       push rbx
+       next
+       
+       WORD p_Dput, 'D!',fasm
+       ;; ( v addr -- )
+       ;; Store byte value v at address addr.
+       pop rax
+       pop rbx
+       mov dword [rax], ebx
+       next
+
        WORD p_2get, '2@',fasm
        ;; ( addr -- v2 v1 )
        ;; Load the cell pair {v1,v2} from address addr.