WIP to find crashing problem generating eturtle.exe
[hf86v099.git] / asmtest.f
1 \ ASSEMBLER TEST PROGRAM\r
2 \r
3 CHAR " PARSE CPU" ENVIRONMENT? DROP\r
4 CHAR " PARSE 8086" COMPARE\r
5 [IF] CR .( This assembler is for 8086 only.) ABORT [THEN]\r
6 \r
7 BASE @\r
8 GET-ORDER\r
9 MARKER ~ASMTEST\r
10 \r
11 VARIABLE TEST-POINTER\r
12 \r
13 : 2CONSTANT\r
14     CREATE , , DOES> 2@ ;\r
15 \r
16 : INIT-TEST   ( -- )\r
17     xhere TEST-POINTER ! ;\r
18 \r
19 CHAR " PARSE model" ENVIRONMENT? DROP\r
20 CHAR " PARSE ROM Model" COMPARE 0=\r
21 CHAR " PARSE model" ENVIRONMENT? DROP\r
22 CHAR " PARSE RAM Model" COMPARE 0= OR\r
23 [IF]\r
24   : ZZ   (  N1 ... NN -- )\r
25       xhere\r
26       BEGIN ( n ... n addr)\r
27          1-  DUP  C@\r
28          ROT <> IF\r
29              TEST-POINTER @ 10 DUMP\r
30              -1 ABORT" failed"\r
31          THEN\r
32          DUP\r
33       TEST-POINTER @ =  UNTIL\r
34       DROP\r
35       INIT-TEST ;\r
36 [THEN]\r
37 CHAR " PARSE model" ENVIRONMENT? DROP\r
38 CHAR " PARSE EXE Model" COMPARE 0=\r
39 [IF]\r
40   : ZZ   (  N1 ... NN -- )\r
41       xhere\r
42       BEGIN ( n ... n addr)\r
43          1-  DUP  codeB@\r
44          ROT <> IF\r
45              TEST-POINTER @ 10 DUMP\r
46              -1 ABORT" failed"\r
47          THEN\r
48          DUP\r
49       TEST-POINTER @ =  UNTIL\r
50       DROP\r
51       INIT-TEST ;\r
52 [THEN]\r
53 \r
54 \ ---------- all is in hex from here to end\r
55 \r
56 HEX\r
57 \r
58 ALSO ASSEMBLER\r
59 \r
60 INIT-ASM\r
61 \r
62 \ ----------\r
63 \r
64 1234 CONSTANT BVAR\r
65 1235 CONSTANT WVAR\r
66 1237 CONSTANT LVAR\r
67 \r
68 123B CONSTANT SUBR\r
69 \r
70 9876 5432 2CONSTANT FARSUB\r
71 \r
72 \ ----------\r
73 \r
74 INIT-TEST\r
75 \r
76 AAA,                                                             37 ZZ\r
77 AAD,                                                         D5  0A ZZ\r
78 AAM,                                                         D4  0A ZZ\r
79 AAS,                                                             3F ZZ\r
80 \r
81 DX BX ADC,                                                   11  D3 ZZ\r
82 0 [BX+SI] CX ADC,                                            13  08 ZZ\r
83 CX 0 [BX+SI] ADC,                                            11  08 ZZ\r
84 3456 # WVAR ) ADC,                           81  16  35  12  56  34 ZZ\r
85 5 # AX ADC,                                              15  05  00 ZZ\r
86 \r
87 \ ----------\r
88 \r
89 BX SP ADD,                                                   01  DC ZZ\r
90 ES: 967 [BX+DI] BP ADD,                          26  03  A9  67  09 ZZ\r
91 AX 967 [BX+DI] ADD,                                  01  81  67  09 ZZ\r
92 AX 0 [BX+DI] ADD,                                            01  01 ZZ\r
93 6789 # SI ADD,                                       81  C6  89  67 ZZ\r
94 5432 # WVAR ) WORD ADD,                      81  06  35  12  32  54 ZZ\r
95 5 # AX ADD,                                              05  05  00 ZZ\r
96 SP DI AND,                                                   21  E7 ZZ\r
97 DS: 1234 [BP+SI] BL AND,                         3E  22  9A  34  12 ZZ\r
98 BP CS: 4567 [BP+SI] AND,                         2E  21  AA  67  45 ZZ\r
99 BP 0 [BP+SI] AND,                                            21  2A ZZ\r
100 6789 # BX AND,                                       81  E3  89  67 ZZ\r
101 1234 # WVAR ) WORD AND,                      81  26  35  12  34  12 ZZ\r
102 5 # AL AND,                                                  24  05 ZZ\r
103 \r
104 \ ----------\r
105 \r
106 xhere 48 - # CALL,                                       E8  B5  FF ZZ\r
107 FARSUB # FAR CALL,                               9A  76  98  32  54 ZZ\r
108 WVAR [BP+DI] CALL,                                   FF  93  35  12 ZZ\r
109 0 [BP+DI] CALL,                                              FF  13 ZZ\r
110 CX CALL,                                                     FF  D1 ZZ\r
111 LVAR ) FAR CALL,                                     FF  1E  37  12 ZZ\r
112 \r
113 CBW,                                                             98 ZZ\r
114 CLC,                                                             F8 ZZ\r
115 CLD,                                                             FC ZZ\r
116 CLI,                                                             FA ZZ\r
117 CMC,                                                             F5 ZZ\r
118 \r
119 \ ----------\r
120 \r
121 67 # CH CMP,                                             82  FD  67 ZZ\r
122  AH BH CMP,                                                  38  E7 ZZ\r
123 0 [SI] CL CMP,                                               3A  0C ZZ\r
124 SS:  AL 0 [SI] CMP,                                      36  38  04 ZZ\r
125  9678 # WVAR ) WORD CMP,                     81  3E  35  12  78  96 ZZ\r
126  5432 # AX CMP,                                          3D  32  54 ZZ\r
127 \r
128 BYTE CMPS,                                                       A6 ZZ\r
129 WORD CMPS,                                                       A7 ZZ\r
130 \r
131 CWD,                                                             99 ZZ\r
132 \r
133 \ ----------\r
134 \r
135 DAA,                                                             27 ZZ\r
136 DAS,                                                             2F ZZ\r
137 \r
138 BX DEC,                                                          4B ZZ\r
139 BL DEC,                                                      FE  CB ZZ\r
140 BVAR [SI] BYTE DEC,                                  FE  8C  34  12 ZZ\r
141 WVAR [DI] WORD DEC,                                  FF  8D  35  12 ZZ\r
142 0 [SI] WORD DEC,                                             FF  0C ZZ\r
143 \r
144 CL DIV,                                                      F6  F1 ZZ\r
145 BX DIV,                                                      F7  F3 ZZ\r
146 BVAR ) BYTE DIV,                                     F6  36  34  12 ZZ\r
147 HLT,                                                             F4 ZZ\r
148 \r
149 \ ----------\r
150 \r
151 CL IDIV,                                                     F6  F9 ZZ\r
152 BX IDIV,                                                     F7  FB ZZ\r
153 BVAR ) BYTE IDIV,                                    F6  3E  34  12 ZZ\r
154 \r
155 CL IMUL,                                                     F6  E9 ZZ\r
156 BX IMUL,                                                     F7  EB ZZ\r
157 BVAR ) BYTE IMUL,                                    F6  2E  34  12 ZZ\r
158 \r
159 7B # AL IN,                                                  E4  7B ZZ\r
160 7B # AX IN,                                                  E5  7B ZZ\r
161 DX AL IN,                                                        EC ZZ\r
162 DX AX IN,                                                        ED ZZ\r
163 \r
164 \ ----------\r
165 \r
166 AX INC,                                                          40 ZZ\r
167 AL INC,                                                      FE  C0 ZZ\r
168 5 [SI] BYTE INC,                                         FE  44  05 ZZ\r
169 0 [BP] WORD INC,                                         FF  46  00 ZZ\r
170 \r
171 17 INT,                                                      CD  17 ZZ\r
172 3 INT,                                                           CC ZZ\r
173 \r
174 INTO,                                                            CE ZZ\r
175 \r
176 IRET,                                                            CF ZZ\r
177 \r
178 \ ----------\r
179 \r
180 xhere 3 + JA,                                                77  01 ZZ\r
181 xhere 4 - JA,                                                77  FA ZZ\r
182 \r
183 xhere 3 + JAE,                                               73  01 ZZ\r
184 xhere 4 - JNC,                                               73  FA ZZ\r
185 \r
186 xhere 3 + JB,                                                72  01 ZZ\r
187 xhere 4 - JC,                                                72  FA ZZ\r
188 \r
189 xhere 3 + JBE,                                               76  01 ZZ\r
190 xhere 4 - JBE,                                               76  FA ZZ\r
191 \r
192 \ ----------\r
193 \r
194 xhere 3 + JCXZ,                                              E3  01 ZZ\r
195 \r
196 xhere 3 + JE,                                                74  01 ZZ\r
197 xhere 4 - JZ,                                                74  FA ZZ\r
198 \r
199 xhere 3 + JG,                                                7F  01 ZZ\r
200 xhere 4 - JG,                                                7F  FA ZZ\r
201 \r
202 xhere 3 + JGE,                                               7D  01 ZZ\r
203 xhere 4 - JGE,                                               7D  FA ZZ\r
204 \r
205 \ ----------\r
206 \r
207 xhere 3 + JL,                                                7C  01 ZZ\r
208 xhere 4 - JL,                                                7C  FA ZZ\r
209 \r
210 xhere 3 + JLE,                                               7E  01 ZZ\r
211 xhere 4 - JLE,                                               7E  FA ZZ\r
212 \r
213 xhere 7 + JU,                                                EB  05 ZZ\r
214 \r
215 xhere 1234 + # JMP,                                      E9  31  12 ZZ\r
216 FARSUB # FAR JMP,                                EA  76  98  32  54 ZZ\r
217 WVAR ) JMP,                                          FF  26  35  12 ZZ\r
218 BX JMP,                                                      FF  E3 ZZ\r
219 LVAR [SI] FAR JMP,                                   FF  AC  37  12 ZZ\r
220 0 [SI] FAR JMP,                                              FF  2C ZZ\r
221 \r
222 \ ----------\r
223 \r
224 xhere 3 + JNE,                                               75  01 ZZ\r
225 xhere 4 - JNZ,                                               75  FA ZZ\r
226 \r
227 xhere 3 + JNO,                                               71  01 ZZ\r
228 xhere 3 + JNS,                                               79  01 ZZ\r
229 \r
230 xhere 3 + JPO,                                               7B  01 ZZ\r
231 xhere 4 - JPO,                                               7B  FA ZZ\r
232 \r
233 \ ----------\r
234 \r
235 xhere 3 + JO,                                                70  01 ZZ\r
236 \r
237 xhere 3 + JPE,                                               7A  01 ZZ\r
238 xhere 4 - JPE,                                               7A  FA ZZ\r
239 \r
240 xhere 3 + JS,                                                78  01 ZZ\r
241 \r
242 LAHF,                                                            9F ZZ\r
243 \r
244 LVAR [BX] AX LDS,                                    C5  87  37  12 ZZ\r
245 0 [BX] AX LDS,                                               C5  07 ZZ\r
246 \r
247 LVAR [BX] BX LEA,                                    8D  9F  37  12 ZZ\r
248 0 [BX] BX LEA,                                               8D  1F ZZ\r
249 \r
250 \ ----------\r
251 \r
252 LVAR [BX] BX LES,                                    C4  9F  37  12 ZZ\r
253 0 [BX] BX LES,                                               C4  1F ZZ\r
254 \r
255 LOCK, BYTE LODS,                                             F0  AC ZZ\r
256 WORD LODS,                                                       AD ZZ\r
257 \r
258 xhere 8 - LOOP,                                              E2  F6 ZZ\r
259 xhere 9 - LOOPE,                                             E1  F5 ZZ\r
260 xhere 3 + LOOPNE,                                            E0  01 ZZ\r
261 \r
262 \ ----------\r
263 \r
264 0 [SI] SI MOV,                                               8B  34 ZZ\r
265 2 [SI] SI MOV,                                           8B  74  02 ZZ\r
266 DS: AL BVAR [BP] MOV,                            3E  88  86  34  12 ZZ\r
267 AX WVAR [BX] MOV,                                    89  87  35  12 ZZ\r
268 AX 0 [BX] MOV,                                               89  07 ZZ\r
269 DS: BVAR [BP] AL MOV,                            3E  8A  86  34  12 ZZ\r
270 WVAR [BX] AX MOV,                                    8B  87  35  12 ZZ\r
271 DX CX MOV,                                                   8B  CA ZZ\r
272 DX AX MOV,                                                   8B  C2 ZZ\r
273 WVAR ) BP MOV,                                       8B  2E  35  12 ZZ\r
274 BP WVAR ) MOV,                                       89  2E  35  12 ZZ\r
275 9876 # DX MOV,                                           BA  76  98 ZZ\r
276 1 # DX MOV,                                              BA  01  00 ZZ\r
277 1 # DL MOV,                                                  B2  01 ZZ\r
278 LVAR  # WORD  WVAR ) MOV,                     C7 06  35  12  37  12 ZZ\r
279 67 # BVAR ) BYTE MOV,                            C6  06  34  12  67 ZZ\r
280 CX SS MOV,                                                   8E  D1 ZZ\r
281 DS CX MOV,                                                   8C  D9 ZZ\r
282 WVAR ) ES MOV,                                       8E  06  35  12 ZZ\r
283 CS WVAR ) MOV,                                       8C  0E  35  12 ZZ\r
284 \r
285 BYTE MOVS,                                                       A4 ZZ\r
286 WORD MOVS,                                                       A5 ZZ\r
287 \r
288 \ ----------\r
289 \r
290 CL MUL,                                                      F6  E1 ZZ\r
291 BX MUL,                                                      F7  E3 ZZ\r
292 BVAR ) BYTE MUL,                                     F6  26  34  12 ZZ\r
293 \r
294 BL NEG,                                                      F6  DB ZZ\r
295 BX NEG,                                                      F7  DB ZZ\r
296 WVAR [BX] WORD NEG,                                  F7  9F  35  12 ZZ\r
297 \r
298 NOP,                                                             90 ZZ\r
299 BL NOT,                                                      F6  D3 ZZ\r
300 BX NOT,                                                      F7  D3 ZZ\r
301 WVAR [BX] WORD NOT,                                  F7  97  35  12 ZZ\r
302 0 [BX] WORD NOT,                                             F7  17 ZZ\r
303 \r
304 \ ----------\r
305 \r
306 BH DL OR,                                                    08  FA ZZ\r
307 0 [SI] DH OR,                                                0A  34 ZZ\r
308 BL 0 [SI] OR,                                                08  1C ZZ\r
309 6789 # BX OR,                                        81  CB  89  67 ZZ\r
310 7698 # WVAR ) WORD OR,                       81  0E  35  12  98  76 ZZ\r
311 5  # AX OR,                                              0D  05  00 ZZ\r
312 \r
313 44 # AX OUT,                                                 E7  44 ZZ\r
314 45 # AL OUT,                                                 E6  45 ZZ\r
315 DX AX OUT,                                                       EF ZZ\r
316 DX AL OUT,                                                       EE ZZ\r
317 \r
318 \ ----------\r
319 \r
320 AX POP,                                                          58 ZZ\r
321 ES POP,                                                          07 ZZ\r
322 WVAR [BX] WORD POP,                                  8F  87  35  12 ZZ\r
323 \r
324 POPF,                                                            9D ZZ\r
325 \r
326 AX PUSH,                                                         50 ZZ\r
327 CS PUSH,                                                         0E ZZ\r
328 WVAR [BX] WORD PUSH,                                 FF  B7  35  12 ZZ\r
329 0 [BX] WORD PUSH,                                            FF  37 ZZ\r
330 \r
331 PUSHF,                                                           9C ZZ\r
332 \r
333 \ ----------\r
334 \r
335 CX 1 RCL,                                                    D1  D1 ZZ\r
336 AX CL RCL,                                                   D3  D0 ZZ\r
337 WVAR )    WORD RCL,                                  D1  16  35  12 ZZ\r
338 WVAR ) CL WORD RCL,                                  D3  16  35  12 ZZ\r
339 \r
340 CL 1 RCR,                                                    D0  D9 ZZ\r
341 AL CL RCR,                                                   D2  D8 ZZ\r
342 BVAR )    BYTE RCR,                                  D0  1E  34  12 ZZ\r
343 BVAR ) CL BYTE RCR,                                  D2  1E  34  12 ZZ\r
344 \r
345 \ ----------\r
346 \r
347 REP, BYTE LODS,                                              F3  AC ZZ\r
348 REPE, BYTE LODS,                                             F3  AC ZZ\r
349 REPNE, BYTE LODS,                                            F2  AC ZZ\r
350 \r
351 RET,                                                             C3 ZZ\r
352 5 +RET,                                                  C2  05  00 ZZ\r
353 FAR RET,                                                         CB ZZ\r
354 1234 FAR +RET,                                           CA  34  12 ZZ\r
355 \r
356 \r
357 \ ----------\r
358 \r
359 CL 1 ROR,                                                    D0  C9 ZZ\r
360 \r
361 AL CL ROR,                                                   D2  C8 ZZ\r
362 BVAR )     BYTE ROR,                                 D0  0E  34  12 ZZ\r
363 BVAR ) CL  BYTE ROR,                                 D2  0E  34  12 ZZ\r
364 \r
365 \r
366 CL 1 ROL,                                                    D0  C1 ZZ\r
367 AL CL ROL,                                                   D2  C0 ZZ\r
368 BVAR )    BYTE ROL,                                  D0  06  34  12 ZZ\r
369 BVAR ) CL BYTE ROL,                                  D2  06  34  12 ZZ\r
370 \r
371 SAHF,                                                            9E ZZ\r
372 \r
373 \r
374 \ ----------\r
375 \r
376 CL 1 SHL,                                                    D0  E1 ZZ\r
377 AL CL SHL,                                                   D2  E0 ZZ\r
378 BVAR )    BYTE SHL,                                  D0  26  34  12 ZZ\r
379 BVAR ) CL BYTE SHL,                                  D2  26  34  12 ZZ\r
380 \r
381 \ ----------\r
382 \r
383 CL 1 SAR,                                                    D0  F9 ZZ\r
384 AL CL SAR,                                                   D2  F8 ZZ\r
385 BVAR )    BYTE SAR,                                  D0  3E  34  12 ZZ\r
386 BVAR ) CL BYTE SAR,                                  D2  3E  34  12 ZZ\r
387 \r
388 CH BH SBB,                                                   18  EF ZZ\r
389 0 [SI] CX SBB,                                               1B  0C ZZ\r
390 CL 0 [SI] SBB,                                               18  0C ZZ\r
391 6789 # BX SBB,                                       81  DB  89  67 ZZ\r
392 9988 # WVAR ) WORD SBB,                      81  1E  35  12  88  99 ZZ\r
393 5 # AX SBB,                                              1D  05  00 ZZ\r
394 \r
395 \ ----------\r
396 \r
397 BYTE SCAS,                                                       AE ZZ\r
398 WORD SCAS,                                                       AF ZZ\r
399 \r
400 CL 1 SHR,                                                    D0  E9 ZZ\r
401 AL CL SHR,                                                   D2  E8 ZZ\r
402 BVAR )    BYTE SHR,                                  D0  2E  34  12 ZZ\r
403 BVAR ) CL BYTE SHR,                                  D2  2E  34  12 ZZ\r
404 \r
405 STC,                                                             F9 ZZ\r
406 \r
407 STD,                                                             FD ZZ\r
408 \r
409 \ ----------\r
410 \r
411 STI,                                                             FB ZZ\r
412 \r
413 BYTE STOS,                                                       AA ZZ\r
414 WORD STOS,                                                       AB ZZ\r
415 \r
416 DH DL SUB,                                                   28  F2 ZZ\r
417 0 [SI] CX SUB,                                               2B  0C ZZ\r
418 DL 0 [SI] SUB,                                               28  14 ZZ\r
419 6789 # BX SUB,                                       81  EB  89  67 ZZ\r
420 1234  # WVAR ) WORD SUB,                     81  2E  35  12  34  12 ZZ\r
421 5 # AX SUB,                                              2D  05  00 ZZ\r
422 \r
423 \ ----------\r
424 \r
425 SI SI TEST,                                                  85  F6 ZZ\r
426 CX 0 [SI] TEST,                                              85  0C ZZ\r
427 6789 # BX TEST,                                      F7  C3  89  67 ZZ\r
428 1239 # WVAR ) WORD TEST,                     F7  06  35  12  39  12 ZZ\r
429 5 # AX TEST,                                             A9  05  00 ZZ\r
430 \r
431 WAIT,                                                            9B ZZ\r
432 \r
433 DI AX XCHG,                                                      97 ZZ\r
434 BL AL XCHG,                                                  86  C3 ZZ\r
435 BX CX XCHG,                                                  87  CB ZZ\r
436 DX WVAR ) XCHG,                                      87  16  35  12 ZZ\r
437 \r
438 \ ----------\r
439 \r
440 XLAT,                                                            D7 ZZ\r
441 \r
442 BX SI XOR,                                                   31  DE ZZ\r
443 0 [SI] CX XOR,                                               33  0C ZZ\r
444 DX 0 [SI] XOR,                                               31  14 ZZ\r
445 6789 # BX XOR,                                       81  F3  89  67 ZZ\r
446 1234 # WVAR ) WORD XOR,                      81  36  35  12  34  12 ZZ\r
447 5 # AX XOR,                                              35  05  00 ZZ\r
448 \r
449 \ ----------\r
450 \r
451 INIT-ASM\r
452 1 L:    BX POP,\r
453         BX POP,\r
454         1 L# JNZ,                                    5B  5B  75  FC ZZ\r
455 \r
456         2 L# JNZ,\r
457         BX POP,\r
458         BX POP,\r
459 2 L:    BX POP,                                  75  02  5B  5B  5B ZZ\r
460 \r
461 3 L:    BX POP,\r
462         4 L# JNZ,\r
463         BX POP,\r
464         3 L# JNZ,\r
465 4 L:    BX POP,                          5B  75  03  5B  75  FA  5B ZZ\r
466 \r
467 5 L:    BX POP,\r
468         6 L# JNZ,\r
469         BX POP,\r
470         6 L# JNZ,\r
471         BX POP,\r
472 6 L:    BX POP,\r
473         5 L# JNZ,             5B  75  04  5B  75  01  5B  5B  75 F6 ZZ\r
474 \r
475 \r
476 \ ---------- back to decimal here\r
477 \r
478 ~ASMTEST\r
479 SET-ORDER\r
480 BASE !\r
481 \r
482 CHAR " PARSE FILE" ENVIRONMENT?\r
483 [IF]\r
484   0= [IF] << CON [THEN]\r
485 [ELSE] << CON\r
486 [THEN]\r