1: \ FORTH Assembler for R8C hfs 23:54 25.12.05
2: \
3: \ Autor: Heinz Schnitter (hfs)
4: \
5: \ Information:
6: \
7: \ - R8C.ASM is a table driven assembler.
8: \ - R8C.ASM supports OPCodes of Renesas R8C Microcomputer in
9: \ postfix notation.
10:
11: \ only forth definitions
12:
13: require asm/basic.fs
14:
15: also ASSEMBLER definitions
16:
17: require asm/target.fs
18:
19: \ for tests only hfs 07:47 04/24/92
20:
21: \ : TC, base @ >r hex 0 <# # # #> type r> base ! ;
22: \ : T, base @ >r hex 0 <# # # # # #> type r> base ! ;
23: : ta, base @ >r hex 0 <# # # # # # #> type r> base ! ;
24:
25:
26: HERE ( Begin )
27:
28: \ VARIABLEs and RESET hfs 10:03 04/23/92
29:
30: VARIABLE SSP \ save of SP
31: VARIABLE <,> \ two addrs
32: VARIABLE <M> \ mode searched for in table
33: VARIABLE <OPC> \ OPCode
34: VARIABLE <.B>
35: VARIABLE <S-OPND>
36: VARIABLE <D-OPND>
37:
38: \ for tests only hfs 07:47 04/24/92
39:
40: : 2hex. dup base @ >r hex 0 <# # # #> type bl emit r> base ! ;
41: : 4hex. dup base @ >r hex 0 <# # # # # #> type bl emit r> base ! ;
42: : hfs cr ." hurah" ;
43: : opc. <OPC> 4 dump ;
44: : m. <M> c@ 2hex. <M> 1+ c@ 2hex. ;
45: \ for tests only
46:
47: : ssave SP@ SSP ! ;
48:
49: : RESET ( clears all variables )
50: 0 <M> C! $0FF <M> 1+ C!
51: 0 <OPC> C! $0FF <OPC> 1+ C!
52: <S-OPND> OFF <D-OPND> OFF
53: <,> OFF <.B> OFF ssave ;
54:
55: : opnd? ( -- N ) SSP @ SP@ - 1 cells - 1 cells / ;
56: : ,? <,> @ ;
57: : S-OPND? <S-OPND> @ ;
58: : D-OPND? <D-OPND> @ ;
59:
60: : WITHIN >R OVER > SWAP R> <= 0= OR 0= ;
61:
62: : 4B? ( n -- n f ) ( within -8 .. 7 ? )
63: DUP -$8 $7 WITHIN ;
64: : >4B? ( n -- n f ) 4B? 0= ;
65:
66: : 8B? ( n -- n f ) ( within -128 .. 127 ? )
67: DUP -$80 $7F WITHIN ;
68: : >8B? ( n -- n f ) 8B? 0= ;
69:
70: $07 CONSTANT abs3
71: : abs3? ( n -- n f ) DUP abs3 u< ;
72: : >abs3? ( n -- n f ) abs3? 0= ;
73:
74: $0ff CONSTANT abs8
75: : abs8? ( n -- n f ) DUP abs8 u< ;
76: : >abs8? ( n -- n f ) abs8? 0= ;
77:
78: : >opc <M> 1+ C@ <OPC> 1+ C! ;
79:
80: : M: CREATE C, C,
81: DOES> ,?
82: IF dup C@ <M> c@ $F0 AND OR <M> c!
83: 1+ C@ <M> 1+ c@ $F0 AND OR <M> 1+ c!
84: ELSE dup C@ 4 lshift <M> c@ $0F AND OR <M> c!
85: 1+ C@ 4 lshift <M> 1+ c@ $0F AND OR <M> 1+ c!
86: THEN ;
87:
88: \ address-modes hfs
89:
90: %0000 0 M: R0 ' R0 alias R0L ' R0 alias C
91: %0001 0 M: R1 ' R1 alias R0H ' R1 alias D
92: %0010 0 M: R2 ' R2 alias R1L ' R2 alias Z
93: %0011 0 M: R3 ' R3 alias R1H ' R3 alias S
94: %0100 0 M: A0 ' A0 alias B
95: %0101 0 M: A1 ' A1 alias O
96: %0110 0 M: [A0] ' [A0] alias I
97: %0111 0 M: [A1] ' [A1] alias U
98: %1010 0 M: [SB]
99: %1011 0 M: [FB]
100: %1111 0 M: abs:16
101: %0000 1 M: #
102: %0001 1 M: INTBL
103: %0010 1 M: INTBH
104: %0011 1 M: FLG
105: %0100 1 M: ISP
106: %0101 1 M: SP
107: %0110 1 M: SB
108: %0111 1 M: FB
109:
110: \ %0000 2 M: [SP]
111:
112: \ two cells are used for each adress mode in the table:
113: \
114: \ cell 1 contains the src and dst MODE# searched for.
115: \
116: \ Cell 2 contains the xt of the action word for this address mode.
117: \
118: \ | #src#dst|src dst| |
119: \ |.....76543210 76543210 .....7654321076543210|
120: \ | MODE | xt |
121:
122: : TABLE: ( -- addr ) \ generate new table
123: CREATE HERE DUP 1 cells + , RESET ;
124:
125: : ;TABLE ( addr -- ) \ change endpoint
126: HERE SWAP ! ;
127:
128: : TAB, ( xt opcode -- )
129: <M> @ , , RESET ;
130:
131: : SEARCH.MODE.2 ( addr -- xt )
132: TRUE SWAP
133: DUP C@ <OPC> C! ( opc from GROUP2: )
134: DUP 1+ C@ <OPC> 1+ C! ( opc from GROUP2: )
135: 2 + @ DUP @ ( tableaddr )
136: SWAP 1 cells + ( end+2 begin )
137: ?DO [ forth ] I [ assembler ] @ <M> @ =
138: IF [ forth ] I [ assembler ] 1 cells + @ swap 0= LEAVE THEN
139: 2 cells +LOOP ABORT" Addressmode failed" ;
140:
141: : SEARCH.MODE.4 ( addr -- xt )
142: TRUE SWAP
143: DUP C@ <OPC> C! ( opc from GROUP4: )
144: DUP 1+ C@ <OPC> 1+ C! ( opc from GROUP4: )
145: DUP 2 + C@ <OPC> 2 + C! ( opc from GROUP4: )
146: DUP 3 + C@ <OPC> 3 + C! ( opc from GROUP4: )
147: 4 + @ DUP @ ( tableaddr )
148: SWAP 1 cells + ( end+2 begin )
149: ?DO [ forth ] I [ assembler ] @ <M> @ =
150: IF [ forth ] I [ assembler ] 1 cells + @ swap 0= LEAVE THEN
151: 2 cells +LOOP ABORT" Addressmode failed" ;
152:
153: \ GROUPS hfs 07:18 04/24/92
154:
155: : GROUP2: CREATE C, C, , ( xt opc opc -- )
156: DOES> SEARCH.MODE.2 EXECUTE RESET ;
157:
158: : GROUP4: CREATE C, C, C, C, , ( xt opc opc opc opc -- )
159: DOES> SEARCH.MODE.4 EXECUTE RESET ;
160:
161: \ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
162: : , opnd? <s-opnd> ! ssave <,> ON ;
163: \ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
164:
165: : OPC, <OPC> C@ X C, <OPC> 1+ C@ X C, ;
166:
167: : [An], <M> 1+ C@ $F0 AND
168: CASE
169: %01100000 of s-opnd? \ [A0]
170: IF abs8? IF %10000000 ELSE %11000000 THEN
171: <M> 1+ C@ $0F AND OR <M> 1+ C! THEN
172: endof
173: %01110000 of s-opnd? \ [A1]
174: IF abs8? IF %10010000 ELSE %11010000 THEN
175: <M> 1+ C@ $0F AND OR <M> 1+ C! THEN
176: endof
177: ENDCASE ;
178:
179: : ,[An] <M> 1+ C@ $0F AND
180: CASE
181: %0110 of d-opnd? \ [A0]
182: IF abs8? IF %1000 ELSE %1100 THEN
183: <M> 1+ C@ $F0 AND OR <M> 1+ C! THEN
184: endof
185: %0111 of d-opnd? \ [A1]
186: IF abs8? IF %1001 ELSE %1101 THEN
187: <M> 1+ C@ $F0 AND OR <M> 1+ C! THEN
188: endof
189: ENDCASE ;
190:
191: : [SB], s-opnd?
192: IF >abs8? IF %11100000 <M> 1+ C@ $0F AND OR <M> 1+ C! THEN
193: ELSE ." displacement expected" ABORT THEN ;
194:
195: : ,[SB] d-opnd?
196: IF >abs8? IF %1110 <M> 1+ C@ $F0 AND OR <M> 1+ C! THEN
197: ELSE ." displacement expected" ABORT THEN ;
198:
199: : [FB], s-opnd? 0= ABORT" displacement expected" ;
200:
201: : ,[FB] d-opnd? 0= ABORT" displacement expected" ;
202:
203: : abs:16, s-opnd? 0= ABORT" absolute Adr expected" ;
204:
205: : ,abs:16 d-opnd? 0= ABORT" absolute Adr expected" ;
206:
207: : #, s-opnd? 0= ABORT" operand expected"
208: <OPC> 2 + c@ %00000001 and 0= IF <.b> on THEN
209: <OPC> 2 + c@ <OPC> c!
210: <OPC> 3 + c@ <M> 1+ c@ $0F and or <M> 1+ c! ;
211:
212: : q#, s-opnd? 0= ABORT" operand expected"
213: s-opnd? d-opnd? and IF swap THEN
214: >4B? ABORT" immediate > 4 Bit"
215: 4 lshift <M> 1+ c@ $0F and or <M> 1+ c! ;
216:
217: : ctrl, <M> 1+ C@ %10000000 OR <M> 1+ C! ;
218:
219: : ,ctrl <M> 1+ C@ $0F and 4 lshift
220: <M> 1+ C@ $F0 and 4 rshift OR %10000000 or <M> 1+ C! ;
221:
222: : rh1, <OPC> 2 + c@ <OPC> c!
223: <OPC> 3 + c@ $F0 and <M> 1+ c@ $0F and or <M> 1+ c! ;
224: \ ----------------------------------------------------------------------------------------------
225: \ ----------------------------------------------------------------------------------------------
226: : GROUP1.B: CREATE C, ( opc -- )
227: DOES> c@ X C,
228: opnd?
229: IF >8B? ABORT" displacement > 8 Bit" X C, THEN
230: RESET ;
231: %01101000 GROUP1.B: JGEU ' JGEU alias JC
232: %01101001 GROUP1.B: JGTU
233: %01101010 GROUP1.B: JEQ ' JEQ alias JZ
234: %01101011 GROUP1.B: JN
235: %01101100 GROUP1.B: JLTU ' JLTU alias JNC
236: %01101101 GROUP1.B: JLEU
237: %01101110 GROUP1.B: JNE ' JNE alias JNZ
238: %01101111 GROUP1.B: JPZ
239: %11111110 GROUP1.B: JMP.B
240: \ ----------------------------------------------------------------------------------------------
241: : GROUP1.W: CREATE C, ( opc -- )
242: DOES> c@ X C,
243: opnd?
244: IF X , THEN
245: RESET ;
246: %11110100 GROUP1.W: JMP.W
247: \ ----------------------------------------------------------------------------------------------
248: : GROUP2.B: CREATE C, C, ( opc opc -- )
249: DOES> dup c@ X C, 1+ c@ X C,
250: opnd?
251: IF >8B? ABORT" displacement > 8 Bit" X C, THEN
252: RESET ;
253: %11001000 %01111101 GROUP2.B: JLE
254: %11001001 %01111101 GROUP2.B: JO
255: %11001010 %01111101 GROUP2.B: JGE
256: %11001100 %01111101 GROUP2.B: JGT
257: %11001101 %01111101 GROUP2.B: JNO
258: %11001110 %01111101 GROUP2.B: JLT
259: \ ----------------------------------------------------------------------------------------------
260: : GROUP2.F: CREATE C, C, ( opc opc -- )
261: DOES> dup c@ X C, 1+ c@ <M> 1+ C@ or X C,
262: RESET ;
263: %00000101 %11101011 GROUP2.F: FCLR
264: %00000100 %11101011 GROUP2.F: FSET
265: \ ----------------------------------------------------------------------------------------------
266: : ctrl,R opnd? <d-opnd> !
267: ctrl,
268: >opc OPC, ;
269:
270: : ctrl,[An] opnd? <d-opnd> !
271: ctrl, ,[An]
272: >opc OPC,
273: d-opnd?
274: IF abs8? IF X C, ELSE X , THEN THEN ;
275:
276: : ctrl,[SB] opnd? <d-opnd> !
277: ctrl, ,[SB]
278: >opc OPC,
279: d-opnd?
280: IF >abs8? IF %1110 <M> 1+ C@ $F0 AND OR <M> 1+ C! THEN
281: ELSE ." displacement expected" ABORT THEN
282: abs8? IF X C, ELSE X , THEN ;
283:
284: : ctrl,[FB] opnd? <d-opnd> !
285: ctrl, ,[An]
286: >opc OPC,
287: d-opnd?
288: IF >8B? ABORT" displacement > 8 Bit"
289: ELSE ." displacement expected" ABORT THEN
290: X C, ;
291:
292: : ctrl,abs:16 opnd? <d-opnd> !
293: ctrl, ,abs:16
294: >opc OPC,
295: d-opnd?
296: 0= ABORT" operand expected"
297: X , ;
298:
299: Table: st-control-reg
300: INTBL , R0 ' ctrl,R TAB, INTBL , R1 ' ctrl,R TAB,
301: INTBL , R2 ' ctrl,R TAB, INTBL , R3 ' ctrl,R TAB,
302: INTBL , A0 ' ctrl,R TAB, INTBL , A1 ' ctrl,R TAB,
303: INTBL , [A0] ' ctrl,[An] TAB, INTBL , [A1] ' ctrl,[An] TAB,
304: INTBL , [SB] ' ctrl,[SB] TAB, INTBL , [FB] ' ctrl,[FB] TAB,
305: INTBL , abs:16 ' ctrl,abs:16 TAB,
306: INTBH , R0 ' ctrl,R TAB, INTBH , R1 ' ctrl,R TAB,
307: INTBH , R2 ' ctrl,R TAB, INTBH , R3 ' ctrl,R TAB,
308: INTBH , A0 ' ctrl,R TAB, INTBH , A1 ' ctrl,R TAB,
309: INTBH , [A0] ' ctrl,[An] TAB, INTBH , [A1] ' ctrl,[An] TAB,
310: INTBH , [SB] ' ctrl,[SB] TAB, INTBH , [FB] ' ctrl,[FB] TAB,
311: INTBL , abs:16 ' ctrl,abs:16 TAB,
312: FLG , R0 ' ctrl,R TAB, FLG , R1 ' ctrl,R TAB,
313: FLG , R2 ' ctrl,R TAB, FLG , R3 ' ctrl,R TAB,
314: FLG , A0 ' ctrl,R TAB, FLG , A1 ' ctrl,R TAB,
315: FLG , [A0] ' ctrl,[An] TAB, FLG , [A1] ' ctrl,[An] TAB,
316: FLG , [SB] ' ctrl,[SB] TAB, FLG , [FB] ' ctrl,[FB] TAB,
317: FLG , abs:16 ' ctrl,abs:16 TAB,
318: ISP , R0 ' ctrl,R TAB, ISP , R1 ' ctrl,R TAB,
319: ISP , R2 ' ctrl,R TAB, ISP , R3 ' ctrl,R TAB,
320: ISP , A0 ' ctrl,R TAB, ISP , A1 ' ctrl,R TAB,
321: ISP , [A0] ' ctrl,[An] TAB, ISP , [A1] ' ctrl,[An] TAB,
322: ISP , [SB] ' ctrl,[SB] TAB, ISP , [FB] ' ctrl,[FB] TAB,
323: ISP , abs:16 ' ctrl,abs:16 TAB,
324: SP , R0 ' ctrl,R TAB, SP , R1 ' ctrl,R TAB,
325: SP , R2 ' ctrl,R TAB, SP , R3 ' ctrl,R TAB,
326: SP , A0 ' ctrl,R TAB, SP , A1 ' ctrl,R TAB,
327: SP , [A0] ' ctrl,[An] TAB, SP , [A1] ' ctrl,[An] TAB,
328: SP , [SB] ' ctrl,[SB] TAB, SP , [FB] ' ctrl,[FB] TAB,
329: SP , abs:16 ' ctrl,abs:16 TAB,
330: SB , R0 ' ctrl,R TAB, SB , R1 ' ctrl,R TAB,
331: SB , R2 ' ctrl,R TAB, SB , R3 ' ctrl,R TAB,
332: SB , A0 ' ctrl,R TAB, SB , A1 ' ctrl,R TAB,
333: SB , [A0] ' ctrl,[An] TAB, SB , [A1] ' ctrl,[An] TAB,
334: SB , [SB] ' ctrl,[SB] TAB, SB , [FB] ' ctrl,[FB] TAB,
335: SB , abs:16 ' ctrl,abs:16 TAB,
336: FB , R0 ' ctrl,R TAB, FB , R1 ' ctrl,R TAB,
337: FB , R2 ' ctrl,R TAB, FB , R3 ' ctrl,R TAB,
338: FB , A0 ' ctrl,R TAB, FB , A1 ' ctrl,R TAB,
339: FB , [A0] ' ctrl,[An] TAB, FB , [A1] ' ctrl,[An] TAB,
340: FB , [SB] ' ctrl,[SB] TAB, FB , [FB] ' ctrl,[FB] TAB,
341: FB , abs:16 ' ctrl,abs:16 TAB,
342:
343: ;TABLE
344:
345: st-control-reg %11111111 %01111011 GROUP2: stc
346:
347: \ ----------------------------------------------------------------------------------------------
348: : R,ctrl ,ctrl
349: >opc OPC, ;
350:
351: : [An],ctrl opnd? <d-opnd> !
352: [An], ,ctrl
353: >opc OPC,
354: s-opnd?
355: IF abs8? IF X C, ELSE X , THEN THEN ;
356:
357: : [SB],ctrl opnd? <d-opnd> !
358: [SB], ,ctrl
359: >opc OPC,
360: abs8? IF X C, ELSE X , THEN ;
361:
362: : [FB],ctrl opnd? <d-opnd> !
363: [FB], ,ctrl
364: >opc OPC,
365: >8B? ABORT" displacement > 8 Bit"
366: X C, ;
367:
368: : #,ctrl #, ,ctrl
369: <M> 1+ C@ %01111111 and <M> 1+ C!
370: >opc OPC,
371: X , ;
372:
373: Table: ld-control-reg
374: R0 , INTBL ' R,ctrl TAB, R0 , INTBH ' R,ctrl TAB,
375: R0 , FLG ' R,ctrl TAB, R0 , ISP ' R,ctrl TAB,
376: R0 , SP ' R,ctrl TAB, R0 , SB ' R,ctrl TAB,
377: R0 , FB ' R,ctrl TAB,
378: R1 , INTBL ' R,ctrl TAB, R1 , INTBH ' R,ctrl TAB,
379: R1 , FLG ' R,ctrl TAB, R1 , ISP ' R,ctrl TAB,
380: R1 , SP ' R,ctrl TAB, R1 , SB ' R,ctrl TAB,
381: R1 , FB ' R,ctrl TAB,
382: R2 , INTBL ' R,ctrl TAB, R2 , INTBH ' R,ctrl TAB,
383: R2 , FLG ' R,ctrl TAB, R2 , ISP ' R,ctrl TAB,
384: R2 , SP ' R,ctrl TAB, R2 , SB ' R,ctrl TAB,
385: R2 , FB ' R,ctrl TAB,
386: R3 , INTBL ' R,ctrl TAB, R3 , INTBH ' R,ctrl TAB,
387: R3 , FLG ' R,ctrl TAB, R3 , ISP ' R,ctrl TAB,
388: R3 , SP ' R,ctrl TAB, R3 , SB ' R,ctrl TAB,
389: R3 , FB ' R,ctrl TAB,
390: A0 , INTBL ' R,ctrl TAB, A0 , INTBH ' R,ctrl TAB,
391: A0 , FLG ' R,ctrl TAB, A0 , ISP ' R,ctrl TAB,
392: A0 , SP ' R,ctrl TAB, A0 , SB ' R,ctrl TAB,
393: A0 , FB ' R,ctrl TAB,
394: A1 , INTBL ' R,ctrl TAB, A1 , INTBH ' R,ctrl TAB,
395: A1 , FLG ' R,ctrl TAB, A1 , ISP ' R,ctrl TAB,
396: A1 , SP ' R,ctrl TAB, A1 , SB ' R,ctrl TAB,
397: A1 , FB ' R,ctrl TAB,
398: [A0] , INTBL ' [An],ctrl TAB, [A0] , INTBH ' [An],ctrl TAB,
399: [A0] , FLG ' [An],ctrl TAB, [A0] , ISP ' [An],ctrl TAB,
400: [A0] , SP ' [An],ctrl TAB, [A0] , SB ' [An],ctrl TAB,
401: [A0] , FB ' [An],ctrl TAB,
402: [A1] , INTBL ' [An],ctrl TAB, [A1] , INTBH ' [An],ctrl TAB,
403: [A1] , FLG ' [An],ctrl TAB, [A1] , ISP ' [An],ctrl TAB,
404: [A1] , SP ' [An],ctrl TAB, [A1] , SB ' [An],ctrl TAB,
405: [A1] , FB ' [An],ctrl TAB,
406: [SB] , INTBL ' [SB],ctrl TAB, [SB] , INTBH ' [SB],ctrl TAB,
407: [SB] , FLG ' [SB],ctrl TAB, [SB] , ISP ' [SB],ctrl TAB,
408: [SB] , SP ' [SB],ctrl TAB, [SB] , SB ' [SB],ctrl TAB,
409: [SB] , FB ' [FB],ctrl TAB,
410: [FB] , INTBL ' [FB],ctrl TAB, [FB] , INTBH ' [FB],ctrl TAB,
411: [FB] , FLG ' [FB],ctrl TAB, [FB] , ISP ' [FB],ctrl TAB,
412: [FB] , SP ' [FB],ctrl TAB, [FB] , SB ' [FB],ctrl TAB,
413: [FB] , FB ' [FB],ctrl TAB,
414: # , INTBL ' #,ctrl TAB, # , INTBH ' #,ctrl TAB,
415: # , FLG ' #,ctrl TAB, # , ISP ' #,ctrl TAB,
416: # , SP ' #,ctrl TAB, # , SB ' #,ctrl TAB,
417: # , FB ' #,ctrl TAB,
418: ;TABLE
419:
420: ld-control-reg %00000000 %11101011 %11111111 %01111010 GROUP4: ldc
421:
422: \ ----------------------------------------------------------------------------------------------
423: : (R) <OPC> 1+ c@ <M> 1+ c@ 4 rshift or <M> 1+ c!
424: >opc OPC,
425: opnd? IF 8B? IF X C, ELSE X , THEN THEN ;
426:
427:
428: : ([An]) <OPC> 1+ c@ <M> 1+ c@ 4 rshift or <M> 1+ c!
429: <M> 1+ C@ $0F AND
430: CASE
431: %0110 of opnd? \ [A0]
432: IF abs8? IF %1000 ELSE %1100 THEN
433: <M> 1+ C@ $F0 AND OR <M> 1+ C! THEN
434: endof
435: %0111 of opnd? \ [A1]
436: IF abs8? IF %1001 ELSE %1101 THEN
437: <M> 1+ C@ $F0 AND OR <M> 1+ C! THEN
438: endof
439: ENDCASE
440: >opc OPC,
441: <opc> c@ %01111101 = <opc> 1+ c@ %00101100 = and \ $12345 [ao] jmpi.w
442: <opc> c@ %01111101 = <opc> 1+ c@ %00101101 = and \ $12345 [a1] jmpi.w
443: or
444: IF opnd? IF 8B? IF X C, ELSE ta, THEN THEN
445: ELSE opnd? IF 8B? IF X C, ELSE X , THEN THEN THEN ;
446:
447: : ([SB]) <OPC> 1+ c@ <M> 1+ c@ 4 rshift or <M> 1+ c!
448: opnd?
449: IF >abs8? IF %1110 <M> 1+ C@ $F0 AND OR <M> 1+ C! THEN
450: ELSE ." displacement expected" ABORT THEN
451: >opc OPC,
452: 8B? IF X C, ELSE X , THEN ;
453:
454: : ([FB]) <OPC> 1+ c@ <M> 1+ c@ 4 rshift or <M> 1+ c!
455: opnd?
456: IF >8B? ABORT" displacement > 8 Bit"
457: ELSE ." displacement expected" ABORT THEN
458: >opc OPC,
459: X C, ;
460:
461: : (abs:16) <OPC> 1+ c@ <M> 1+ c@ 4 rshift or <M> 1+ c!
462: opnd? 0= ABORT" operand expected"
463: >opc OPC,
464: X , ;
465:
466: : (#) opnd? 0= ABORT" operand expected"
467: <OPC> 1+ c@ %01000000 =
468: IF <OPC> c@
469: CASE
470: %01110100 OF %01111100 <OPC> c! ENDOF
471: %01110101 OF %01111101 <OPC> c! ENDOF
472: ENDCASE
473: ELSE
474: ." push.?:g only" ABORT
475: THEN %11100010 <M> 1+ c!
476: >opc OPC,
477: 8B? IF X C, ELSE X , THEN ;
478:
479: Table: 2ByteOPC(dsp8/dsp16) \ 2ByteOPC(dsp8/dsp16)
480: R0 ' (R) TAB, R1 ' (R) TAB,
481: R2 ' (R) TAB, R3 ' (R) TAB,
482: A0 ' (R) TAB, A1 ' (R) TAB,
483: [A0] ' ([An]) TAB, [A1] ' ([An]) TAB,
484: [SB] ' ([SB]) TAB, [FB] ' ([FB]) TAB,
485: abs:16 ' (abs:16) TAB, # ' (#) TAB,
486: ;TABLE
487:
488: 2ByteOPC(dsp8/dsp16) %11110000 %01110110 GROUP2: abs.b
489: 2ByteOPC(dsp8/dsp16) %11100000 %01110110 GROUP2: adcf.b
490: 2ByteOPC(dsp8/dsp16) %11010000 %01110110 GROUP2: div.b
491: 2ByteOPC(dsp8/dsp16) %11000000 %01110110 GROUP2: divu.b
492: 2ByteOPC(dsp8/dsp16) %10010000 %01110110 GROUP2: divx.b
493: 2ByteOPC(dsp8/dsp16) %01010000 %01110100 GROUP2: neg.b
494: 2ByteOPC(dsp8/dsp16) %01110000 %01110100 GROUP2: not.b:g
495: 2ByteOPC(dsp8/dsp16) %11010000 %01110100 GROUP2: pop.b:g
496: 2ByteOPC(dsp8/dsp16) %01000000 %01110100 GROUP2: push.b:g
497: 2ByteOPC(dsp8/dsp16) %10100000 %01110110 GROUP2: rolc.b
498: 2ByteOPC(dsp8/dsp16) %10110000 %01110110 GROUP2: rorc.b
499:
500: 2ByteOPC(dsp8/dsp16) %11110000 %01110111 GROUP2: abs.w
501: 2ByteOPC(dsp8/dsp16) %11100000 %01110111 GROUP2: adcf.w
502: 2ByteOPC(dsp8/dsp16) %11010000 %01110111 GROUP2: div.w
503: 2ByteOPC(dsp8/dsp16) %11000000 %01110111 GROUP2: divu.w
504: 2ByteOPC(dsp8/dsp16) %10010000 %01110111 GROUP2: divx.w
505: 2ByteOPC(dsp8/dsp16) %01010000 %01110101 GROUP2: neg.w
506: 2ByteOPC(dsp8/dsp16) %01110000 %01110101 GROUP2: not.w:g
507: 2ByteOPC(dsp8/dsp16) %11010000 %01110101 GROUP2: pop.w:g
508: 2ByteOPC(dsp8/dsp16) %01000000 %01110101 GROUP2: push.w:g
509: 2ByteOPC(dsp8/dsp16) %10100000 %01110111 GROUP2: rolc.w
510: 2ByteOPC(dsp8/dsp16) %10110000 %01110111 GROUP2: rorc.w
511:
512: 2ByteOPC(dsp8/dsp16) %00100000 %01111101 GROUP2: jmpi.w
513: 2ByteOPC(dsp8/dsp16) %00000000 %01111101 GROUP2: jmpi.a
514:
515: \ ----------------------------------------------------------------------------------------------
516: : q#,R opnd? <d-opnd> !
517: q#,
518: >opc OPC, ;
519:
520: : q#,[an] opnd? <d-opnd> !
521: q#, ,[an]
522: >opc OPC,
523: d-opnd?
524: IF abs8? IF X C, ELSE X , THEN THEN ;
525:
526: : q#,[sb] opnd? <d-opnd> !
527: q#, ,[sb]
528: >opc OPC,
529: d-opnd?
530: IF >abs8? IF %1110 <M> 1+ C@ $F0 AND OR <M> 1+ C! THEN
531: ELSE ." displacement expected" ABORT THEN
532: abs8? IF X C, ELSE X , THEN ;
533:
534: : q#,[fb] opnd? <d-opnd> !
535: q#, ,[fb]
536: >opc OPC,
537: d-opnd?
538: IF >8B? ABORT" displacement > 8 Bit"
539: ELSE ." displacement expected" ABORT THEN
540: X C, ;
541:
542: : q#,abs:16 opnd? <d-opnd> !
543: q#, ,abs:16
544: >opc OPC,
545: d-opnd?
546: 0= ABORT" operand expected"
547: X , ;
548: Table: quick
549: # , R0 ' q#,R TAB, # , R1 ' q#,R TAB,
550: # , R2 ' q#,R TAB, # , R3 ' q#,R TAB,
551: # , A0 ' q#,R TAB, # , A1 ' q#,R TAB,
552: # , [A0] ' q#,[An] TAB, # , [A1] ' q#,[An] TAB,
553: # , [SB] ' q#,[SB] TAB, # , [FB] ' q#,[FB] TAB,
554: # , abs:16 ' q#,abs:16 TAB,
555: ;TABLE
556:
557: quick %00000000 %11001000 GROUP2: add.b:q
558: quick %00000000 %11010000 GROUP2: cmp.b:q
559: quick %00000000 %11011000 GROUP2: mov.b:q
560:
561: quick %00000000 %11001001 GROUP2: add.w:q
562: quick %00000000 %11010001 GROUP2: cmp.w:q
563: quick %00000000 %11011001 GROUP2: mov.w:q
564:
565: \ ----------------------------------------------------------------------------------------------
566: : R,R >opc OPC, ;
567:
568: : R,[An] opnd? <d-opnd> !
569: ,[An]
570: >opc OPC,
571: d-opnd?
572: IF abs8? IF X C, ELSE X , THEN THEN ;
573:
574: : R,[SB] opnd? <d-opnd> !
575: ,[SB]
576: >opc OPC,
577: abs8? IF X C, ELSE X , THEN ;
578:
579: : R,[FB] opnd? <d-opnd> !
580: ,[FB]
581: >opc OPC,
582: >8B? ABORT" displacement > 8 Bit"
583: X C, ;
584:
585: : R,abs:16 opnd? <d-opnd> !
586: ,abs:16
587: >opc OPC,
588: X , ;
589: \ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
590: : [An],R opnd? <d-opnd> !
591: [An],
592: >opc OPC,
593: s-opnd?
594: IF abs8? IF X C, ELSE X , THEN THEN ;
595:
596: : [An],[An] opnd? <d-opnd> !
597: [An], ,[An]
598: >opc OPC,
599: s-opnd? d-opnd? and IF swap THEN
600: s-opnd?
601: IF abs8? IF X C, ELSE X , THEN THEN
602: d-opnd?
603: IF abs8? IF X C, ELSE X , THEN THEN ;
604:
605: : [An],[SB] opnd? <d-opnd> !
606: [An], ,[SB]
607: >opc OPC,
608: s-opnd? d-opnd? and IF swap THEN
609: s-opnd?
610: IF abs8? IF X C, ELSE X , THEN THEN
611: abs8? IF X C, ELSE X , THEN ;
612:
613: : [An],[FB] opnd? <d-opnd> !
614: [An], ,[FB]
615: >opc OPC,
616: s-opnd? d-opnd? and IF swap THEN
617: s-opnd?
618: IF abs8? IF X C, ELSE X , THEN THEN
619: >8B? ABORT" displacement > 8 Bit"
620: X C, ;
621:
622: : [An],abs:16 opnd? <d-opnd> !
623: [An], ,abs:16
624: >opc OPC,
625: s-opnd? d-opnd? and IF swap THEN
626: s-opnd?
627: IF abs8? IF X C, ELSE X , THEN THEN
628: X , ;
629: \ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
630: : [SB],R opnd? <d-opnd> !
631: [SB],
632: >opc OPC,
633: abs8? IF X C, ELSE X , THEN ;
634:
635: : [SB],[An] opnd? <d-opnd> !
636: [SB], ,[An]
637: >opc OPC,
638: s-opnd? d-opnd? and IF swap THEN
639: abs8? IF X C, ELSE X , THEN
640: d-opnd?
641: IF abs8? IF X C, ELSE X , THEN THEN ;
642:
643: : [SB],[SB] opnd? <d-opnd> !
644: [SB], ,[SB]
645: >opc OPC,
646: swap
647: abs8? IF X C, ELSE X , THEN
648: abs8? IF X C, ELSE X , THEN ;
649:
650: : [SB],[FB] opnd? <d-opnd> !
651: [SB], ,[FB]
652: >opc OPC,
653: swap
654: abs8? IF X C, ELSE X , THEN
655: >8B? ABORT" displacement > 8 Bit"
656: X C, ;
657:
658: : [SB],abs:16 opnd? <d-opnd> !
659: [SB], ,abs:16
660: >opc OPC,
661: swap
662: abs8? IF X C, ELSE X , THEN
663: X , ;
664: \ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
665: : [FB],R opnd? <d-opnd> !
666: [FB],
667: >opc OPC,
668: >8B? ABORT" displacement > 8 Bit"
669: X C, ;
670:
671: : [FB],[An] opnd? <d-opnd> !
672: [FB], ,[An]
673: >opc OPC,
674: s-opnd? d-opnd? and IF swap THEN
675: >8B? ABORT" displacement > 8 Bit"
676: X C,
677: d-opnd?
678: IF abs8? IF X C, ELSE X , THEN THEN ;
679:
680: : [FB],[SB] opnd? <d-opnd> !
681: [FB], ,[SB]
682: >opc OPC,
683: swap
684: >8B? ABORT" displacement > 8 Bit"
685: X C,
686: abs8? IF X C, ELSE X , THEN ;
687:
688: : [FB],[FB] opnd? <d-opnd> !
689: [FB], ,[FB]
690: >opc OPC,
691: swap
692: >8B? ABORT" displacement > 8 Bit"
693: X C,
694: d-opnd?
695: IF 8B? IF X C, ELSE X , THEN THEN ;
696:
697: : [FB],abs:16 opnd? <d-opnd> !
698: [FB], ,abs:16
699: >opc OPC,
700: swap
701: >8B? ABORT" displacement > 8 Bit"
702: X C,
703: X , ;
704: \ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
705: : abs:16,R opnd? <d-opnd> !
706: abs:16,
707: >opc OPC,
708: X , ;
709:
710: : abs:16,[An] opnd? <d-opnd> !
711: abs:16, ,[An]
712: >opc OPC,
713: s-opnd? d-opnd? and IF swap THEN
714: X ,
715: d-opnd?
716: IF abs8? IF X C, ELSE X , THEN THEN ;
717:
718: : abs:16,[SB] opnd? <d-opnd> !
719: abs:16, ,[SB]
720: >opc OPC,
721: swap
722: X ,
723: abs8? IF X C, ELSE X , THEN ;
724:
725: : abs:16,[FB] opnd? <d-opnd> !
726: abs:16, ,[FB]
727: >opc OPC,
728: swap
729: X ,
730: >8B? ABORT" displacement > 8 Bit"
731: X C, ;
732:
733: : abs:16,abs:16 opnd? <d-opnd> !
734: abs:16, ,abs:16
735: >opc OPC,
736: swap
737: X ,
738: X , ;
739: \ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
740: : #,R opnd? <d-opnd> !
741: #,
742: >opc OPC,
743: <.b> @ IF X C, ELSE X , THEN ;
744:
745: : #,[An] opnd? <d-opnd> !
746: #, ,[An]
747: >opc OPC,
748: d-opnd?
749: IF abs8? IF X C, ELSE X , THEN THEN
750: <.b> @ IF X C, ELSE X , THEN ;
751:
752: : #,[SB] opnd? <d-opnd> !
753: #, ,[SB]
754: >opc OPC,
755: abs8? IF X C, ELSE X , THEN
756: <.b> @ IF X C, ELSE X , THEN ;
757:
758: : #,[FB] opnd? <d-opnd> !
759: #, ,[FB]
760: >opc OPC,
761: >8B? ABORT" displacement > 8 Bit"
762: X C,
763: <.b> @ IF X C, ELSE X , THEN ;
764:
765: : #,abs:16 opnd? <d-opnd> !
766: #, ,abs:16
767: >opc OPC,
768: X ,
769: <.b> @ IF X C, ELSE X , THEN ;
770: \ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
771: Table: generic
772: R0 , R0 ' R,R TAB, R0 , R1 ' R,R TAB,
773: R0 , R2 ' R,R TAB, R0 , R3 ' R,R TAB,
774: R0 , A0 ' R,R TAB, R0 , A1 ' R,R TAB,
775: R0 , [A0] ' R,[An] TAB, R0 , [A1] ' R,[An] TAB,
776: R0 , [SB] ' R,[SB] TAB, R0 , [FB] ' R,[FB] TAB,
777: R0 , abs:16 ' R,abs:16 TAB,
778:
779: R1 , R0 ' R,R TAB, R1 , R1 ' R,R TAB,
780: R1 , R2 ' R,R TAB, R1 , R3 ' R,R TAB,
781: R1 , A0 ' R,R TAB, R1 , A1 ' R,R TAB,
782: R1 , [A0] ' R,[An] TAB, R1 , [A1] ' R,[An] TAB,
783: R1 , [SB] ' R,[SB] TAB, R1 , [FB] ' R,[FB] TAB,
784: R1 , abs:16 ' R,abs:16 TAB,
785:
786: R2 , R0 ' R,R TAB, R2 , R1 ' R,R TAB,
787: R2 , R2 ' R,R TAB, R2 , R3 ' R,R TAB,
788: R2 , A0 ' R,R TAB, R2 , A1 ' R,R TAB,
789: R2 , [A0] ' R,[An] TAB, R2 , [A1] ' R,[An] TAB,
790: R2 , [SB] ' R,[SB] TAB, R2 , [FB] ' R,[FB] TAB,
791: R2 , abs:16 ' R,abs:16 TAB,
792:
793: R3 , R0 ' R,R TAB, R3 , R1 ' R,R TAB,
794: R3 , R2 ' R,R TAB, R3 , R3 ' R,R TAB,
795: R3 , A0 ' R,R TAB, R3 , A1 ' R,R TAB,
796: R3 , [A0] ' R,[An] TAB, R3 , [A1] ' R,[An] TAB,
797: R3 , [SB] ' R,[SB] TAB, R3 , [FB] ' R,[FB] TAB,
798: R3 , abs:16 ' R,abs:16 TAB,
799:
800: A0 , R0 ' R,R TAB, A0 , R1 ' R,R TAB,
801: A0 , R2 ' R,R TAB, A0 , R3 ' R,R TAB,
802: A0 , A0 ' R,R TAB, A0 , A1 ' R,R TAB,
803: A0 , [A0] ' R,[An] TAB, A0 , [A1] ' R,[An] TAB,
804: A0 , [SB] ' R,[SB] TAB, A0 , [FB] ' R,[FB] TAB,
805: A0 , abs:16 ' R,abs:16 TAB,
806:
807: A1 , R0 ' R,R TAB, A1 , R1 ' R,R TAB,
808: A1 , R2 ' R,R TAB, A1 , R3 ' R,R TAB,
809: A1 , A0 ' R,R TAB, A1 , A1 ' R,R TAB,
810: A1 , [A0] ' R,[An] TAB, A1 , [A1] ' R,[An] TAB,
811: A1 , [SB] ' R,[SB] TAB, A1 , [FB] ' R,[FB] TAB,
812: A1 , abs:16 ' R,abs:16 TAB,
813:
814: [A0] , R0 ' [An],R TAB, [A0] , R1 ' [An],R TAB,
815: [A0] , R2 ' [An],R TAB, [A0] , R3 ' [An],R TAB,
816: [A0] , A0 ' [An],R TAB, [A0] , A1 ' [An],R TAB,
817: [A0] , [A0] ' [An],[An] TAB, [A0] , [A1] ' [An],[An] TAB,
818: [A0] , [SB] ' [An],[SB] TAB, [A0] , [FB] ' [An],[FB] TAB,
819: [A0] , abs:16 ' [An],abs:16 TAB,
820:
821: [A1] , R0 ' [An],R TAB, [A1] , R1 ' [An],R TAB,
822: [A1] , R2 ' [An],R TAB, [A1] , R3 ' [An],R TAB,
823: [A1] , A0 ' [An],R TAB, [A1] , A1 ' [An],R TAB,
824: [A1] , [A0] ' [An],[An] TAB, [A1] , [A1] ' [An],[An] TAB,
825: [A1] , [SB] ' [An],[SB] TAB, [A1] , [FB] ' [An],[FB] TAB,
826: [A1] , abs:16 ' [An],abs:16 TAB,
827:
828: [SB] , R0 ' [SB],R TAB, [SB] , R1 ' [SB],R TAB,
829: [SB] , R2 ' [SB],R TAB, [SB] , R3 ' [SB],R TAB,
830: [SB] , A0 ' [SB],R TAB, [SB] , A1 ' [SB],R TAB,
831: [SB] , [A0] ' [SB],[An] TAB, [SB] , [A1] ' [SB],[An] TAB,
832: [SB] , [SB] ' [SB],[SB] TAB, [SB] , [FB] ' [SB],[FB] TAB,
833: [SB] , abs:16 ' [SB],abs:16 TAB,
834:
835: [FB] , R0 ' [FB],R TAB, [FB] , R1 ' [FB],R TAB,
836: [FB] , R2 ' [FB],R TAB, [FB] , R3 ' [FB],R TAB,
837: [FB] , A0 ' [FB],R TAB, [FB] , A1 ' [FB],R TAB,
838: [FB] , [A0] ' [FB],[An] TAB, [FB] , [A1] ' [FB],[An] TAB,
839: [FB] , [SB] ' [FB],[SB] TAB, [FB] , [FB] ' [FB],[FB] TAB,
840: [FB] , abs:16 ' [FB],abs:16 TAB,
841:
842: # , R0 ' #,R TAB, # , R1 ' #,R TAB,
843: # , R2 ' #,R TAB, # , R3 ' #,R TAB,
844: # , A0 ' #,R TAB, # , A1 ' #,R TAB,
845: # , [A0] ' #,[An] TAB, # , [A1] ' #,[An] TAB,
846: # , [SB] ' #,[SB] TAB, # , [FB] ' #,[FB] TAB,
847: # , abs:16 ' #,abs:16 TAB,
848:
849: abs:16 , R0 ' abs:16,R TAB, abs:16 , R1 ' abs:16,R TAB,
850: abs:16 , R2 ' abs:16,R TAB, abs:16 , R3 ' abs:16,R TAB,
851: abs:16 , A0 ' abs:16,R TAB, abs:16 , A1 ' abs:16,R TAB,
852: abs:16 , [A0] ' abs:16,[An] TAB, abs:16 , [A1] ' abs:16,[An] TAB,
853: abs:16 , [SB] ' abs:16,[SB] TAB, abs:16 , [FB] ' abs:16,[FB] TAB,
854: abs:16 , abs:16 ' abs:16,abs:16 TAB,
855: ;TABLE
856:
857: generic %01100000 %01110110 %11111111 %10110000 GROUP4: adc.b
858: generic %01000000 %01110110 %11111111 %10100000 GROUP4: add.b:g
859: generic %00100000 %01110110 %11111111 %10010000 GROUP4: and.b:g
860: generic %10000000 %01110110 %11111111 %11000000 GROUP4: cmp.b:g
861: generic %11000000 %01110100 %11111111 %01110010 GROUP4: mov.b:g
862: generic %01010000 %01111100 %11111111 %01111000 GROUP4: mul.b:g
863: generic %01000000 %01111100 %11111111 %01110000 GROUP4: mulu.b:g
864: generic %00110000 %01110110 %11111111 %10011000 GROUP4: or.b:g
865: generic %01110000 %01110110 %11111111 %10111000 GROUP4: sbb.b
866: generic %01010000 %01110110 %11111111 %10101000 GROUP4: sub.b:g
867: generic %00000000 %01110110 %11111111 %10000000 GROUP4: tst.b
868: generic %00010000 %01110110 %11111111 %10001000 GROUP4: xor.b
869:
870: generic %01100000 %01110111 %11111111 %10110001 GROUP4: adc.w
871: generic %01000000 %01110111 %11111111 %10100001 GROUP4: add.w:g
872: generic %00100000 %01110111 %11111111 %10010001 GROUP4: and.w:g
873: generic %10000000 %01110111 %11111111 %11000001 GROUP4: cmp.w:g
874: generic %11000000 %01110101 %11111111 %01110011 GROUP4: mov.w:g
875: generic %01010000 %01111101 %11111111 %01111001 GROUP4: mul.w:g
876: generic %01000000 %01111101 %11111111 %01110001 GROUP4: mulu.w:g
877: generic %00110000 %01110111 %11111111 %10011001 GROUP4: or.w:g
878: generic %01110000 %01110111 %11111111 %10111001 GROUP4: sbb.w
879: generic %01010000 %01110111 %11111111 %10101001 GROUP4: sub.w:g
880: generic %00000000 %01110111 %11111111 %10000001 GROUP4: tst.w
881: generic %00010000 %01110111 %11111111 %10001001 GROUP4: xor.w
882:
883: \ ----------------------------------------------------------------------------------------------
884: : R1H,R rh1, r,r ;
885:
886: : R1H,[An] rh1, r,[An] ;
887:
888: : R1H,[SB] rh1, r,[SB] ;
889:
890: : R1H,[FB] rh1, r,[FB] ;
891:
892: : R1H,abs:16 rh1, r,abs:16 ;
893:
894: Table: r1h-group
895: R1H , R0L ' R1H,R TAB, R1H , R0H ' R1H,R TAB,
896: R1H , R1L ' R1H,R TAB, R1H , R3 ' R1H,R TAB,
897: R1H , A0 ' R1H,R TAB, R1H , A1 ' R1H,R TAB,
898: R1H , [A0] ' R1H,[An] TAB, R1H , [A1] ' R1H,[An] TAB,
899: R1H , [SB] ' R1H,[SB] TAB, R1H , [FB] ' R1H,[FB] TAB,
900: R1H , abs:16 ' R1H,abs:16 TAB,
901: ;TABLE
902:
903: r1h-group %11101111 %01110101 %11101111 %01110101 GROUP4: shl.w
904: r1h-group %11111111 %01110101 %11111111 %01110101 GROUP4: sha.w
905:
906: r1h-group %11101111 %01110100 %11101111 %01110100 GROUP4: shl.b
907: r1h-group %11111111 %01110100 %11111111 %01110100 GROUP4: sha.b
908:
909: \ to do hfs
910: \ # %00000000 %11100001 GROUP2: rot.w
911: \ # %00000000 %11110001 GROUP2: sha.w
912: \ # %00000000 %11101001 GROUP2: shl.w
913: \ # %00000000 %11100000 GROUP2: rot.b
914: \ # %00000000 %11110000 GROUP2: sha.b
915: \ # %00000000 %11101000 GROUP2: shl.b
916:
917: \ ----------------------------------------------------------------------------------------------
918: \ register definition
919: ' R2 Alias rp
920: ' R0 Alias tos
921: ' A1 Alias ip
922: ' A0 Alias w
923: ' [A1] Alias [ip]
924: ' [A0] Alias [w]
925:
926: \ ----------------------------------------------------------------------------------------------
927:
928: $68 Constant u<
929: $69 Constant u<=
930: $6A Constant 0<>
931: $6B Constant 0>=
932: $6C Constant u>=
933: $6D Constant u>
934: $6E Constant 0=
935: $6F Constant 0<
936:
937: : IF >r reset r> X c, X here 0 X c, ;
938: : THEN >r reset r> X here over - swap X c! ;
939: : ELSE >r reset r> $FE IF swap THEN ;
940: : WHILE >r reset r> IF swap ;
941: : BEGIN reset X here ;
942: : UNTIL >r reset r> X c, X here - X c, ;
943: : AGAIN >r reset r> $FE UNTIL ;
944: : REPEAT >r >r reset r> r> AGAIN THEN ;
945:
946:
947: \ include asm-test.fs
948:
949: HERE SWAP -
950: CR .( Length of Assembler: ) . .( Bytes ) CR
951:
952:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>