Annotation of gforth/arch/r8c/asm.fs, revision 1.6
1.1 pazsan 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:
1.2 pazsan 11: \ only forth definitions
1.1 pazsan 12:
1.2 pazsan 13: require asm/basic.fs
1.1 pazsan 14:
1.2 pazsan 15: also ASSEMBLER definitions
1.1 pazsan 16:
1.3 pazsan 17: require asm/target.fs
18:
1.1 pazsan 19: \ for tests only hfs 07:47 04/24/92
20:
1.3 pazsan 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 ! ;
1.1 pazsan 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
1.5 pazsan 34: VARIABLE <.B>
1.1 pazsan 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
1.5 pazsan 53: <,> OFF <.B> OFF ssave ;
1.1 pazsan 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 )
1.2 pazsan 137: ?DO [ forth ] I [ assembler ] @ <M> @ =
138: IF [ forth ] I [ assembler ] 1 cells + @ swap 0= LEAVE THEN
1.1 pazsan 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 )
1.2 pazsan 149: ?DO [ forth ] I [ assembler ] @ <M> @ =
150: IF [ forth ] I [ assembler ] 1 cells + @ swap 0= LEAVE THEN
1.1 pazsan 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:
1.5 pazsan 165: : OPC, <OPC> C@ X C, <OPC> 1+ C@ X C, ;
166:
1.1 pazsan 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"
1.5 pazsan 208: <OPC> 2 + c@ %00000001 and 0= IF <.b> on THEN
1.1 pazsan 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:
1.5 pazsan 222: : rh1, <OPC> 2 + c@ <OPC> c!
223: <OPC> 3 + c@ $F0 and <M> 1+ c@ $0F and or <M> 1+ c! ;
1.1 pazsan 224: \ ----------------------------------------------------------------------------------------------
225: \ ----------------------------------------------------------------------------------------------
1.5 pazsan 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 ;
1.1 pazsan 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
1.5 pazsan 240: \ ----------------------------------------------------------------------------------------------
241: : GROUP1.W: CREATE C, ( opc -- )
242: DOES> c@ X C,
243: opnd?
244: IF X , THEN
245: RESET ;
1.1 pazsan 246: %11110100 GROUP1.W: JMP.W
1.5 pazsan 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 ;
1.1 pazsan 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
1.5 pazsan 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 ;
1.1 pazsan 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?
1.3 pazsan 274: IF abs8? IF X C, ELSE X , THEN THEN ;
1.1 pazsan 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
1.3 pazsan 282: abs8? IF X C, ELSE X , THEN ;
1.1 pazsan 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
1.3 pazsan 290: X C, ;
1.1 pazsan 291:
292: : ctrl,abs:16 opnd? <d-opnd> !
293: ctrl, ,abs:16
294: >opc OPC,
295: d-opnd?
296: 0= ABORT" operand expected"
1.3 pazsan 297: X , ;
1.1 pazsan 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?
1.3 pazsan 355: IF abs8? IF X C, ELSE X , THEN THEN ;
1.1 pazsan 356:
357: : [SB],ctrl opnd? <d-opnd> !
358: [SB], ,ctrl
359: >opc OPC,
1.3 pazsan 360: abs8? IF X C, ELSE X , THEN ;
1.1 pazsan 361:
362: : [FB],ctrl opnd? <d-opnd> !
363: [FB], ,ctrl
364: >opc OPC,
365: >8B? ABORT" displacement > 8 Bit"
1.3 pazsan 366: X C, ;
1.1 pazsan 367:
368: : #,ctrl #, ,ctrl
369: <M> 1+ C@ %01111111 and <M> 1+ C!
370: >opc OPC,
1.3 pazsan 371: X , ;
1.1 pazsan 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,
1.3 pazsan 425: opnd? IF 8B? IF X C, ELSE X , THEN THEN ;
1.1 pazsan 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
1.3 pazsan 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 ;
1.1 pazsan 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,
1.3 pazsan 452: 8B? IF X C, ELSE X , THEN ;
1.1 pazsan 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,
1.3 pazsan 459: X C, ;
1.1 pazsan 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,
1.3 pazsan 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 ;
1.1 pazsan 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,
1.3 pazsan 485: abs:16 ' (abs:16) TAB, # ' (#) TAB,
1.1 pazsan 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
1.5 pazsan 513: 2ByteOPC(dsp8/dsp16) %00000000 %01111101 GROUP2: jmpi.a
1.1 pazsan 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?
1.3 pazsan 524: IF abs8? IF X C, ELSE X , THEN THEN ;
1.1 pazsan 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
1.3 pazsan 532: abs8? IF X C, ELSE X , THEN ;
1.1 pazsan 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
1.3 pazsan 540: X C, ;
1.1 pazsan 541:
542: : q#,abs:16 opnd? <d-opnd> !
543: q#, ,abs:16
544: >opc OPC,
545: d-opnd?
546: 0= ABORT" operand expected"
1.3 pazsan 547: X , ;
1.1 pazsan 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?
1.3 pazsan 572: IF abs8? IF X C, ELSE X , THEN THEN ;
1.1 pazsan 573:
574: : R,[SB] opnd? <d-opnd> !
575: ,[SB]
576: >opc OPC,
1.3 pazsan 577: abs8? IF X C, ELSE X , THEN ;
1.1 pazsan 578:
579: : R,[FB] opnd? <d-opnd> !
580: ,[FB]
581: >opc OPC,
582: >8B? ABORT" displacement > 8 Bit"
1.3 pazsan 583: X C, ;
1.1 pazsan 584:
585: : R,abs:16 opnd? <d-opnd> !
586: ,abs:16
587: >opc OPC,
1.5 pazsan 588: X , ;
1.1 pazsan 589: \ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
590: : [An],R opnd? <d-opnd> !
591: [An],
592: >opc OPC,
593: s-opnd?
1.3 pazsan 594: IF abs8? IF X C, ELSE X , THEN THEN ;
1.1 pazsan 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?
1.3 pazsan 601: IF abs8? IF X C, ELSE X , THEN THEN
1.1 pazsan 602: d-opnd?
1.3 pazsan 603: IF abs8? IF X C, ELSE X , THEN THEN ;
1.1 pazsan 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?
1.3 pazsan 610: IF abs8? IF X C, ELSE X , THEN THEN
611: abs8? IF X C, ELSE X , THEN ;
1.1 pazsan 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?
1.3 pazsan 618: IF abs8? IF X C, ELSE X , THEN THEN
1.1 pazsan 619: >8B? ABORT" displacement > 8 Bit"
1.3 pazsan 620: X C, ;
1.1 pazsan 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?
1.3 pazsan 627: IF abs8? IF X C, ELSE X , THEN THEN
1.5 pazsan 628: X , ;
1.1 pazsan 629: \ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
630: : [SB],R opnd? <d-opnd> !
631: [SB],
632: >opc OPC,
1.5 pazsan 633: abs8? IF X C, ELSE X , THEN ;
1.1 pazsan 634:
635: : [SB],[An] opnd? <d-opnd> !
636: [SB], ,[An]
637: >opc OPC,
638: s-opnd? d-opnd? and IF swap THEN
1.5 pazsan 639: abs8? IF X C, ELSE X , THEN
1.1 pazsan 640: d-opnd?
1.3 pazsan 641: IF abs8? IF X C, ELSE X , THEN THEN ;
1.1 pazsan 642:
643: : [SB],[SB] opnd? <d-opnd> !
644: [SB], ,[SB]
645: >opc OPC,
1.5 pazsan 646: swap
647: abs8? IF X C, ELSE X , THEN
648: abs8? IF X C, ELSE X , THEN ;
1.1 pazsan 649:
650: : [SB],[FB] opnd? <d-opnd> !
651: [SB], ,[FB]
652: >opc OPC,
1.5 pazsan 653: swap
654: abs8? IF X C, ELSE X , THEN
1.1 pazsan 655: >8B? ABORT" displacement > 8 Bit"
1.3 pazsan 656: X C, ;
1.1 pazsan 657:
658: : [SB],abs:16 opnd? <d-opnd> !
659: [SB], ,abs:16
660: >opc OPC,
1.5 pazsan 661: swap
662: abs8? IF X C, ELSE X , THEN
663: X , ;
1.1 pazsan 664: \ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
665: : [FB],R opnd? <d-opnd> !
666: [FB],
667: >opc OPC,
668: >8B? ABORT" displacement > 8 Bit"
1.5 pazsan 669: X C, ;
1.1 pazsan 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"
1.5 pazsan 676: X C,
1.1 pazsan 677: d-opnd?
1.3 pazsan 678: IF abs8? IF X C, ELSE X , THEN THEN ;
1.1 pazsan 679:
680: : [FB],[SB] opnd? <d-opnd> !
681: [FB], ,[SB]
682: >opc OPC,
1.5 pazsan 683: swap
1.1 pazsan 684: >8B? ABORT" displacement > 8 Bit"
1.5 pazsan 685: X C,
686: abs8? IF X C, ELSE X , THEN ;
1.1 pazsan 687:
688: : [FB],[FB] opnd? <d-opnd> !
689: [FB], ,[FB]
690: >opc OPC,
1.5 pazsan 691: swap
1.1 pazsan 692: >8B? ABORT" displacement > 8 Bit"
1.5 pazsan 693: X C,
1.1 pazsan 694: d-opnd?
1.3 pazsan 695: IF 8B? IF X C, ELSE X , THEN THEN ;
1.1 pazsan 696:
697: : [FB],abs:16 opnd? <d-opnd> !
698: [FB], ,abs:16
699: >opc OPC,
1.5 pazsan 700: swap
1.1 pazsan 701: >8B? ABORT" displacement > 8 Bit"
1.3 pazsan 702: X C,
1.5 pazsan 703: X , ;
1.1 pazsan 704: \ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
705: : abs:16,R opnd? <d-opnd> !
706: abs:16,
707: >opc OPC,
1.5 pazsan 708: X , ;
1.1 pazsan 709:
710: : abs:16,[An] opnd? <d-opnd> !
711: abs:16, ,[An]
712: >opc OPC,
713: s-opnd? d-opnd? and IF swap THEN
1.5 pazsan 714: X ,
1.1 pazsan 715: d-opnd?
1.3 pazsan 716: IF abs8? IF X C, ELSE X , THEN THEN ;
1.1 pazsan 717:
718: : abs:16,[SB] opnd? <d-opnd> !
719: abs:16, ,[SB]
720: >opc OPC,
1.5 pazsan 721: swap
722: X ,
723: abs8? IF X C, ELSE X , THEN ;
1.1 pazsan 724:
725: : abs:16,[FB] opnd? <d-opnd> !
726: abs:16, ,[FB]
727: >opc OPC,
1.5 pazsan 728: swap
729: X ,
1.1 pazsan 730: >8B? ABORT" displacement > 8 Bit"
1.3 pazsan 731: X C, ;
1.1 pazsan 732:
733: : abs:16,abs:16 opnd? <d-opnd> !
734: abs:16, ,abs:16
735: >opc OPC,
1.5 pazsan 736: swap
737: X ,
738: X , ;
1.1 pazsan 739: \ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
740: : #,R opnd? <d-opnd> !
741: #,
742: >opc OPC,
1.5 pazsan 743: <.b> @ IF X C, ELSE X , THEN ;
1.1 pazsan 744:
745: : #,[An] opnd? <d-opnd> !
746: #, ,[An]
747: >opc OPC,
748: d-opnd?
1.5 pazsan 749: IF abs8? IF X C, ELSE X , THEN THEN
750: <.b> @ IF X C, ELSE X , THEN ;
1.1 pazsan 751:
752: : #,[SB] opnd? <d-opnd> !
753: #, ,[SB]
754: >opc OPC,
1.5 pazsan 755: abs8? IF X C, ELSE X , THEN
756: <.b> @ IF X C, ELSE X , THEN ;
1.1 pazsan 757:
758: : #,[FB] opnd? <d-opnd> !
759: #, ,[FB]
760: >opc OPC,
761: >8B? ABORT" displacement > 8 Bit"
1.5 pazsan 762: X C,
763: <.b> @ IF X C, ELSE X , THEN ;
1.1 pazsan 764:
765: : #,abs:16 opnd? <d-opnd> !
766: #, ,abs:16
767: >opc OPC,
1.3 pazsan 768: X ,
1.5 pazsan 769: <.b> @ IF X C, ELSE X , THEN ;
1.1 pazsan 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
1.4 pazsan 862: generic %01010000 %01111100 %11111111 %01111000 GROUP4: mul.b:g
863: generic %01000000 %01111100 %11111111 %01110000 GROUP4: mulu.b:g
1.1 pazsan 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
1.4 pazsan 875: generic %01010000 %01111101 %11111111 %01111001 GROUP4: mul.w:g
876: generic %01000000 %01111101 %11111111 %01110001 GROUP4: mulu.w:g
1.1 pazsan 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: \ ----------------------------------------------------------------------------------------------
1.5 pazsan 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: \ ----------------------------------------------------------------------------------------------
1.1 pazsan 918: \ register definition
1.5 pazsan 919: ' R2 Alias rp
1.1 pazsan 920: ' R0 Alias tos
921: ' A1 Alias ip
922: ' A0 Alias w
923: ' [A1] Alias [ip]
924: ' [A0] Alias [w]
925:
926: \ ----------------------------------------------------------------------------------------------
927:
1.6 ! pazsan 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<
1.2 pazsan 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
1.1 pazsan 948:
949: HERE SWAP -
950: CR .( Length of Assembler: ) . .( Bytes ) CR
1.2 pazsan 951:
1.1 pazsan 952:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>