Annotation of gforth/arch/c165/prim.fs, revision 1.3
1.1 pazsan 1:
2: start-macros
3:
4: $04 Rb: tosl $05 Rb: tosh
5: $08 Rb: temp1l $09 Rb: temp1h
6:
7: $00 Rw: sp $01 Rw: rp $02 Rw: tos $03 Rw: ip
8: $04 Rw: temp1 $05 Rw: temp2
9:
10: : next,
11: \ cc_uc , (debug calla, \ Debugger-Aufruf
12: temp1 , ip ]+ mov, \ fetch cfa
13: temp2 , temp1 ]+ mov, \ get code address
14: cc_uc , temp2 ] jmpi,
15: ;
16:
17: : next1,
18: temp2 , temp1 ]+ mov,
19: cc_uc , temp2 ] jmpi,
20: ;
21:
22: end-macros
23:
24: Label into-forth
25: ip , $ffff # mov,
26: sp , $fd80 # mov,
27: rp , $fde0 # mov,
28: next,
29: End-Label
30:
31: Label (dout)
32: _s0tic . 7 , here jnb, _s0tic . 7 bclr,
33: _s0tbuf , rl6 movb, ret,
34: End-Label
35:
36: Start-Macros
37:
38: \ : dout, >r rl6 , r> # movb,
39: \ cc_uc , (dout) Calla, ;
40:
41: : dout, drop ;
42:
43: end-macros
44:
45: Code: :docol
46: ': dout,
47: rp -] , ip mov, \ store IP on return stack
48: ip , temp1 mov, \
49: ip , 2 # add, \ zum PFA
50: next,
51: End-Code
52:
53: Code ;s
54: '; dout,
55: ip , rp ]+ mov, \ fetch callback address
56: next,
57: End-Code
58:
59: \ Rest 25jul97jaw
60:
61: Code: :dovar
62: '2 dout,
63: sp -] , tos mov,
64: temp1 , 2 # add,
65: tos , temp1 mov,
66: next,
67: End-Code
68:
69: Code: :docon
70: '1 dout,
71: sp -] , tos mov,
72: temp1 , 2 # add,
73: tos , temp1 ] mov,
74: next,
75: End-Code
76:
77: Code: :dodoes
78: '6 dout,
79: rp -] , ip mov,
80: ip , temp1 ] mov,
81: sp -] , tos mov,
82: temp1 , 2 # add,
83: tos , temp1 mov,
84: next,
85: End-Code
86:
87: Code: :dodefer
88: '4 dout,
89: temp1 , 2 # add,
90: temp1 , temp1 ] mov,
91: Next1,
92: End-Code
93:
94: Code execute ( xt -- ) \ execute colon definition
95: 'E dout,
96: temp1 , tos mov,
97: tos , sp ]+ mov,
98: Next1,
99: End-Code
100:
101: \ Zusatzroutinen zu bedingten Befehlen ( 17.06.96/KK )
102: Code branch ( -- ) \ Inline-Sprung ausfhren
103: ip , ip ] add, next,
104: End-Code
105:
106: Code ?branch ( f -- ) \ Test und Sprung bei 0
107: tos , tos mov,
108: cc_z IF, tos , sp ]+ mov, ip , ip ] add, next, THEN,
109: tos , sp ]+ mov, ip , 2 s# add, next,
110: End-Code
111:
112: Code lit ( -- n ) \ Inline-Literal lesen
113: sp -] , tos mov, tos , ip ]+ mov, next,
114: End-Code
115:
116: \ Stack Words ( 17.06.96/KK )
117:
118: Code dup ( n -- n n ) \ TOS verdoppeln
119: sp -] , tos mov, next,
120: End-Code
121:
122: Code 2dup ( d -- d d ) \ TOS/NOS verdoppeln
123: temp1 , sp ] mov, sp -] , tos mov,
124: sp -] , temp1 mov, next,
125: End-Code
126:
127: Code drop ( n -- ) \ TOS entfernen
128: tos , sp ]+ mov, next,
129: End-Code
130:
131: Code 2drop ( d -- ) \ TOS/NOS entfernen
132: sp , 2 s# add, tos , sp ]+ mov, next,
133: End-Code
134:
135: Code swap ( n1 n2 -- n2 n1 ) \ TOS/NOS vertauschen
136: temp1 , sp ] mov, sp ] , tos mov, tos , temp1 mov,
137: next,
138: End-Code
139:
140: Code over ( n1 n2 -- n1 n2 n1 ) \ NOS verdoppeln
141: sp -] , tos mov, tos , sp 2 #] mov, next,
142: End-Code
143:
144: Code rot ( n1 n2 n3 -- n2 n3 n1 ) \ Rotieren
145: temp1 , sp ]+ mov, temp2 , sp ]+ mov,
146: sp -] , temp1 mov, sp -] , tos mov,
147: tos , temp2 mov, next, End-Code
148:
149: Code -rot ( n1 n2 n3 -- n3 n1 n2 ) \ Rotieren
150: temp1 , sp ]+ mov, temp2 , sp ]+ mov,
151: sp -] , tos mov, sp -] , temp2 mov,
152: tos , temp1 mov, next, End-Code
153:
154: Code sp@
155: sp -] , tos mov,
156: tos , sp mov,
157: next,
158: End-Code
159:
160: Code sp!
161: sp , tos mov,
162: tos , sp ]+ mov,
163: next,
164: End-Code
165:
166: Code rp@
167: sp -] , tos mov,
168: tos , rp mov,
169: next,
170: End-Code
171:
172: Code rp!
173: rp , tos mov,
174: tos , sp ]+ mov,
175: next,
176: End-Code
177:
178: Code r>
179: sp -] , tos mov,
180: tos , rp ]+ mov,
181: next,
182: End-Code
183:
184: Code >r
185: rp -] , tos mov,
186: tos , sp ]+ mov,
187: next,
188: End-Code
189:
190: Code r@
191: sp -] , tos mov,
192: tos , rp ] mov,
193: next,
194: End-Code
195:
196: \ Arithmetik ( 17.06.96/KK )
197:
198: Code + ( n1 n2 -- n3 ) \ Addition
199: tos , sp ]+ add, next,
200: End-Code
201:
202: Code - ( n1 n2 -- n3 ) \ Subtraktion
203: temp1 , tos mov, tos , sp ]+ mov,
204: tos , temp1 sub, next,
205: End-Code
206:
207: Code and ( n1 n2 -- n3 ) \ Logische AND-Verknpfung
208: tos , sp ]+ and, next,
209: End-Code
210:
211: Code xor ( n1 n2 -- n3 ) \ Logische AND-Verknpfung
212: tos , sp ]+ xor, next,
213: End-Code
214:
215: Code or ( n1 n2 -- n3 ) \ Logische OR-Verknpfung
216: tos , sp ]+ or, next,
217: End-Code
218:
219: Code 0= ( n -- f ) \ Test auf 0
220: tos , tos mov,
221: cc_z IF, tos , -1 # mov, ELSE, tos , 0 s# mov, THEN,
222: next,
223: End-Code
224:
225: Code = ( n1 n2 -- f ) \ Test auf Gleichheit
226: tos , sp ]+ sub,
227: cc_z IF, tos , -1 # mov, ELSE, tos , 0 s# mov, THEN,
228: next,
229: End-Code
230:
231: \ Memory ( 01.01.97/KK )
232:
233: Code c@ ( addr -- c ) \ Byte auslesen
234: tosl , tos ] movb, tosh , 0 s# movb, next,
235: End-Code
236:
237: Code @ ( addr -- n ) \ Wort auslesen
238: tos , tos ] mov, next,
239: End-Code
240:
241: Code c! ( c addr -- ) \ Byte schreiben
242: temp1 , sp ]+ mov, tos ] , temp1l movb,
243: tos , sp ]+ mov, next,
244: End-Code
245:
246: Code ! ( n addr -- ) \ Wort schreiben
247: temp1 , sp ]+ mov, tos ] , temp1 mov,
248: tos , sp ]+ mov, next,
249: End-Code
250:
251:
252: \ SIO-Grundroutinen ( 09.06.96/KK )
1.3 ! dvdkhlng 253: Code (key?) ( -- f ) \ Flag, ob Zeichen anliegt
1.1 pazsan 254: sp -] , tos mov, tos , 0 s# mov,
255: _s0ric . 7 , here 6 + jnb,
256: tos , 1 s# sub, next, End-Code
257: Code (key) ( -- char ) \ Zeichen holen
258: _s0ric . 7 , here jnb, _s0ric . 7 bclr, sp -] , tos mov,
259: tosh , 0 s# movb, tosl , _s0rbuf movb, next, End-Code
1.3 ! dvdkhlng 260: Code (emit?) ( -- f ) \ Flag, ob Zeichen ausgebbar
1.1 pazsan 261: sp -] , tos mov, tos , 0 s# mov,
262: _s0tic . 7 , here 6 + jnb,
263: tos , 1 s# sub, next, End-Code
264: Code (emit) ( char -- ) \ Zeichen ausgeben
265: _s0tic . 7 , here jnb, _s0tic . 7 bclr,
266: _s0tbuf , tosl movb, tos , sp ]+ mov, next, End-Code
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>