-
Notifications
You must be signed in to change notification settings - Fork 30
/
Copy pathasm-test.mu4
155 lines (136 loc) · 3.71 KB
/
asm-test.mu4
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
| This file is part of muforth: https://muforth.dev/
|
| Copyright 2002-2025 David Frech. (Read the LICENSE for details.)
| We want to test the assembler and disassembler. Let's try to assemble
| every opcode; we can check the results both by dumping the bytes and by
| disassembling them.
__meta
hex
label everything
( 00 - 0f)
nop
0 ajmp
1234 ljmp
a rr
a inc B inc @r0 inc @r1 inc
r0 inc r1 inc r2 inc r3 inc r4 inc r5 inc r6 inc r7 inc
( 10 - 1f)
0 PSW .5 bclr-force? until ( jbc)
0 acall
4567 lcall
a rrc
a dec B dec @r0 dec @r1 dec
r0 dec r1 dec r2 dec r3 dec r4 dec r5 dec r6 dec r7 dec
( 20 - 2f)
0 PSW .5 bclr? until ( jb)
100 ajmp
ret
a rl
12 # a add B a add @r0 a add @r1 a add
r0 a add r1 a add r2 a add r3 a add r4 a add r5 a add r6 a add r7 a add
( 30 - 3f)
0 PSW .5 bset? until ( jnb)
100 acall
reti
a rlc
34 # a addc B a addc @r0 a addc @r1 a addc
r0 a addc r1 a addc r2 a addc r3 a addc r4 a addc r5 a addc r6 a addc r7 a addc
( 40 - 4f)
0 u>= until ( jc)
200 ajmp
a PSW orl
0cc # PSW orl
30 # a orl B a orl @r0 a orl @r1 a orl
r0 a orl r1 a orl r2 a orl r3 a orl r4 a orl r5 a orl r6 a orl r7 a orl
( 50 - 5f)
0 u< until ( jnc)
200 acall
a PSW anl
0cc # PSW anl
30 # a anl B a anl @r0 a anl @r1 a anl
r0 a anl r1 a anl r2 a anl r3 a anl r4 a anl r5 a anl r6 a anl r7 a anl
( 60 - 6f)
80 0!= until ( jz)
300 ajmp
a PSW xrl
0cc # PSW xrl
30 # a xrl B a xrl @r0 a xrl @r1 a xrl
r0 a xrl r1 a xrl r2 a xrl r3 a xrl r4 a xrl r5 a xrl r6 a xrl r7 a xrl
( 70 - 7f)
80 0= until ( jnz)
300 acall
P0 .1 c orl
@a+dptr jmp
73 # a mov 73 # P0 mov 73 # @r0 mov 73 # @r1 mov
73 # r0 mov 73 # r1 mov 73 # r2 mov 73 # r3 mov 73 # r4 mov 73 # r5 mov 73 # r6 mov 73 # r7 mov
( 80 - 8f)
80 again ( sjmp)
400 ajmp
P0 .1 c anl
@a+pc a movc
ab div
ACC B mov
@r0 B mov @r1 B mov
r0 B mov r1 B mov r2 B mov r3 B mov r4 B mov r5 B mov r6 B mov r7 B mov
( 90 - 9f)
cafe # dptr mov
400 acall
c 28 .6 mov
@a+dptr a movc
34 # a subb B a subb @r0 a subb @r1 a subb
r0 a subb r1 a subb r2 a subb r3 a subb r4 a subb r5 a subb r6 a subb r7 a subb
( a0 - af)
P0 .1 / c orl
500 ajmp
P0 .6 c mov
dptr inc
ab mul
0a5 c, ( the only undefined instruction)
B @r0 mov B @r1 mov
B r0 mov B r1 mov B r2 mov B r3 mov B r4 mov B r5 mov B r6 mov B r7 mov
( b0 - bf)
2f .7 / c anl
500 acall
PSW .0 cpl
c cpl
100 20 # a = until
100 B a = until
100 44 # @r0 = until 100 44 # @r1 = until
100 44 # r0 = until 100 44 # r1 = until 100 44 # r2 = until 100 44 # r3 = until
100 44 # r4 = until 100 44 # r5 = until 100 44 # r6 = until 100 44 # r7 = until
( c0 - cf)
PSW push
600 ajmp
P0 .3 clr
c clr
a swap
B a xch
@r0 a xch @r1 a xch
r0 a xch r1 a xch r2 a xch r3 a xch r4 a xch r5 a xch r6 a xch r7 a xch
( d0 - df)
PSW pop
600 acall
P0 .2 setb
c setb
a da
140 ACC decz? until
@r0 a xchd @r1 a xchd
140 r0 decz? until 140 r1 decz? until 140 r2 decz? until 140 r3 decz? until
140 r4 decz? until 140 r5 decz? until 140 r6 decz? until 140 r7 decz? until
( e0 - ef)
@dptr a movx
700 ajmp
@r0 a movx @r1 a movx
a clr
P1 a mov
@r0 a mov @r1 a mov
r0 a mov r1 a mov r2 a mov r3 a mov r4 a mov r5 a mov r6 a mov r7 a mov
( f0 - ff)
a @dptr movx
700 acall
a @r0 movx a @r1 movx
a cpl
a PSW mov
a @r0 mov a @r1 mov
a r0 mov a r1 mov a r2 mov a r3 mov a r4 mov a r5 mov a r6 mov a r7 mov
( Fini!) ;c