aboutsummaryrefslogtreecommitdiff
path: root/amforth-6.5/msp430/words/reg-a.asm
blob: 89d3b8b3ae23bacc5a3e905feeab25ca5758ec6c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
; ( -- n2 ) 
; Extended VM
; Read memory pointed to by register A (Extended VM)
CODEHEADER(XT_AFETCH,2,"a@")
    SUB #2,PSP
    MOV TOS,0(PSP)
    MOV @REG_A,TOS
    NEXT

; ( n1 -- n2 )
; Extended VM
; Read memory pointed to by register A plus offset (Extended VM)
CODEHEADER(XT_NAFETCH,3,"na@")
    ADD REG_A,TOS
    MOV @TOS,TOS
    NEXT

; ( -- n ) 
; Extended VM
; Read memory pointed to by register A, increment A by 1 cell (Extended VM)
CODEHEADER(XT_AFETCHPLUS,3,"a@+")
    SUB #2,PSP
    MOV TOS,0(PSP)
    ADD REG_A,TOS
    MOV @TOS,TOS
    ADD #2,REG_A
    NEXT

; ( -- n )
; Extended VM
; Read memory pointed to by register A, decrement A by 1 cell (Extended VM)
CODEHEADER(XT_AFETCHMINUS,3,"a@-")
    SUB #2,PSP
    MOV TOS,0(PSP)
    ADD REG_A,TOS
    MOV @TOS,TOS
    SUB #2,REG_A
    NEXT

; ( n -- )
; Extended VM
; Write memory pointed to by register A (Extended VM)
CODEHEADER(XT_ASTORE,2,"a!")
    MOV TOS,@REG_A
    MOV @PSP+,TOS
    NEXT

; ( n offs -- )
; Extended VM
; Write memory pointed to by register A plus offset (Extended VM)
CODEHEADER(XT_NASTORE,3,"na!")
    ADD REG_A, TOS
    MOV @PSP+,X
    MOV X,@TOS
    MOV @PSP+,TOS
    NEXT

; ( -- n2 )
; Extended VM
; Write memory pointed to by register A, increment A by 1 cell (Extended VM)
CODEHEADER(XT_ASTOREPLUS,3,"a!+")
    MOV TOS,@REG_A
    MOV @PSP+,TOS
    ADD #2,REG_A
    NEXT

; ( -- n2 )
; Extended VM
; Write memory pointed to by register A, decrement A by 1 cell (Extended VM)
CODEHEADER(XT_ASTOREMINUS,3,"a!-")
    MOV TOS,@REG_A
    MOV @PSP+,TOS
    SUB #2,REG_A
    NEXT

; ( n -- )
; Extended VM
; Write to A register (Extended VM)
CODEHEADER(XT_TO_A,2,">a")
    MOV TOS,REG_A
    MOV @PSP+,TOS
    NEXT

; ( n1 -- n2 ) 
; Extended VM
; read the A register (Extended VM)
CODEHEADER(XT_A_FROM,2,"a>")
    SUB #2,PSP
    MOV REG_A,TOS
    NEXT

; for more information read
; http://www.complang.tuwien.ac.at/anton/euroforth/ef08/papers/pelc.pdf
;  adapted index based access from X/Y registers
;    note: offset is byte address, not cell!