Pristine Ack-5.5
[Ack-5.5.git] / mach / 6500 / cg / table
1 "$Id: table,v 1.7 1994/06/24 12:54:33 ceriel Exp $"
2 #define em_bsize        2       /* must be equal to EM_BSIZE */
3 #define ND      !defined($1)
4 #define D       defined($1)
5 #define BASE    240
6 #define MIN     (0-BASE)
7 #define MAX     (254-em_bsize-BASE)
8 #define IN(x)   (x>=MIN && x<=MAX)
9 #define IND(x)  (x>=MIN && x<=(MAX-2))
10
11 /*****************************************************\
12 ****                                               ****
13 ****     6 5 0 0   B A C K   E N D   T A B L E     ****
14 ****                                               ****
15 \*****************************************************/
16
17
18 /*
19  *   INTEGER SIZE:   16 bits
20  *   POINTER SIZE:   16 bits
21  *   NO FLOATS
22  */
23
24
25 EM_WSIZE = 2
26 EM_PSIZE = 2
27 EM_BSIZE = 2
28
29
30
31 /*********************\
32 *  R E G I S T E R S  *
33 \*********************/
34
35 REGISTERS:
36 AA = ("a",1), REG.
37 XX = ("x",1), REG.
38 AX = ("<dummy>",2,AA,XX), R16.
39
40 /* AX is a registerpair, A contains the highbyte of a word and
41  * X contains the lowbyte
42  */
43
44
45 /***************\
46 *  T O K E N S  *
47 \***************/
48
49 TOKENS:
50 IMMEDIATE       = {INT off;} 1  "#%[off]" /* a fake token the
51                                            * cgg needs one
52                                            */
53
54
55
56 /***********************************\
57 *  T O K E N E X P R E S S I O N S  *
58 \***********************************/
59
60 TOKENEXPRESSIONS:
61 AAA = IMMEDIATE         /* a fake tokenexpression
62                          * the cgg needs one
63                          */
64
65
66 /***********\
67 *  C O D E  *
68 \***********/
69
70 CODE:
71
72 /* GROUP 1 - LOAD */
73
74 loc ($1%256)==($1/256)  | |
75                 allocate(R16)
76                 "lda #[$1].l"
77                 "tax"
78                                         | %[a] | |
79 loc      | |
80                 allocate(R16)
81                 "lda #[$1].h"
82                 "ldx #[$1].l"
83                                         | %[a] | |
84 ldc highw(1)==loww(1) && (loww(1)%256)==(loww(1)/256) | |
85                 allocate(R16)
86                 "lda #[%(loww(1)%)].l"
87                 "tax"
88                 "jsr Push"
89                                         | %[a] | |
90 ldc      | |
91                 allocate(R16)
92                 "lda #[%(highw(1)%)].h"
93                 "ldx #[%(highw(1)%)].l"
94                 "jsr Push"
95                 "lda #[%(loww(1)%)].h"
96                 "ldx #[%(loww(1)%)].l"
97                                         | %[a] | |
98 lol IN($1)      | |
99                 allocate(R16)
100                 "ldy #BASE+$1"
101                 "lda (LBl),y"
102                 "tax"
103                 "iny"
104                 "lda (LBl),y"
105                                         | %[a] | |
106 lol     | |
107                 allocate(R16)
108                 "lda #[$1].h"
109                 "ldx #[$1].l"
110                 "jsr Lol"
111                                         | %[a] | |
112 loe     | |
113                 allocate(R16)
114                 "lda $1+1"
115                 "ldx $1"
116                                         | %[a] | |
117 lil IN($1)      | |
118                 allocate(R16)
119                 "ldy #BASE+$1"
120                 "lda (LBl),y"
121                 "tax"
122                 "iny"
123                 "lda (LBl),y"
124                 "jsr Loi"
125                                         | %[a] | |
126 lil     | |
127                 allocate(R16)
128                 "lda #[$1].h"
129                 "ldx #[$1].l"
130                 "jsr Lol"
131                 "jsr Loi"
132                                         | %[a] | |
133 lof $1==0       | R16 |
134                 "jsr Loi"
135                                         | %[1] | |
136 lof    | |
137                 allocate(R16)
138                 "lda #[$1].h"
139                 "ldx #[$1].l"
140                 "jsr Adi2"
141                 "jsr Loi"
142                                         | %[a] | |
143 lal     | |
144                 allocate(R16)
145                 "clc"
146                 "lda #[$1].l"
147                 "adc LB"
148                 "tax"
149                 "lda #[$1].h"
150                 "adc LB+1"
151                                         | %[a] | |
152 lae     | |
153                 allocate(R16)
154                 "lda #[$1].h"
155                 "ldx #[$1].l"
156                                         | %[a] | |
157 lxl $1==0       | |
158                 allocate(R16)
159                 "lda LB+1"
160                 "ldx LB"
161                                         | %[a] | |
162 lxl $1<=255     | |             /* n restricted to a max of 255 */
163                 allocate(R16)
164                 "ldx #[$1].l"
165                 "jsr Lxl"
166                                         | %[a] | |
167 lxa $1==0       | |
168                 allocate(R16)
169                 "jsr Lxa1"
170                                         | %[a] | |
171 lxa $1<=255     | |             /* n restricted to a max of 255 */
172                 allocate(R16)
173                 "ldx #[$1].l"
174                 "jsr Lxa2"
175                                         | %[a] | |
176 loi $1==1       | R16 |
177                 "jsr Loi1"
178                                         | %[1] | |
179 loi $1==2       | R16 |
180                 "jsr Loi"
181                                         | %[1] | |
182 loi $1==4       | R16 |
183                 "jsr Ldi"
184                                         | | |
185 loi D           | R16 |
186                 "ldy #[$1].h"
187                 "sty NBYTES+1"
188                 "ldy #[$1].l"
189                 "jsr Loil"
190                                         | | |
191 los $1==2       | R16 |
192                 "jsr Los"
193                                         | | |
194 ldl IND($1)     | |
195                 allocate(R16)
196                 "ldy #BASE+$1+3"
197                 "lda (LBl),y"
198                 "pha"
199                 "dey"
200                 "lda (LBl),y"
201                 "tax"
202                 "pla"
203                 "jsr Push"
204                 "dey"
205                 "lda (LBl),y"
206                 "pha"
207                 "dey"
208                 "lda (LBl),y"
209                 "tax"
210                 "pla"
211                                         | %[a] | |
212 ldl     | |
213                 allocate(R16)
214                 "lda #[$1].h"
215                 "ldx #[$1].l"
216                 "jsr Locaddr"
217                 "jsr Ldo"
218                                         | | |
219 lde     | |
220                 allocate(R16)
221                 "lda $1+3"
222                 "ldx $1+2"
223                 "jsr Push"
224                 "lda $1+1"
225                 "ldx $1"
226                                         | %[a] | |
227 ldf $1==0       | R16 |
228                 "jsr Ldi"
229                                         | | |
230 ldf     | |
231                 allocate(R16)
232                 "lda #[$1].h"
233                 "ldx #[$1].l"
234                 "jsr Adi2"
235                 "jsr Ldi"
236                                         | | |
237 lpi     | |
238                 allocate(R16)
239                 "lda #[$1].h"
240                 "ldx #[$1].l"
241                                         | %[a] | |
242
243
244 /* GROUP 2 - STORE */
245
246 stl IN($1)      | R16 |
247                 "ldy #BASE+1+$1"
248                 "sta (LBl),y"
249                 "txa"
250                 "dey"
251                 "sta (LBl),y"
252                                         | | |
253 stl     | |
254                 allocate(R16)
255                 "lda #[$1].h"
256                 "ldx #[$1].l"
257                 "jsr Stl"
258                                         | | |
259 ste     | R16 |
260                 "sta $1+1"
261                 "stx $1"
262                                         | | |
263 sil IN($1)      | |
264                 allocate(R16)
265                 "ldy #BASE+$1"
266                 "lda (LBl),y"
267                 "tax"
268                 "iny"
269                 "lda (LBl),y"
270                 "jsr Sti"
271                                         | | |
272 sil     | |
273                 allocate(R16)
274                 "lda #[$1].h"
275                 "ldx #[$1].l"
276                 "jsr Lol"
277                 "jsr Sti"
278                                         | | |
279 stf $1==0       | R16 |
280                 "jsr Sti"
281                                         | | |
282 stf     | |
283                 allocate(R16)
284                 "lda #[$1].h"
285                 "ldx #[$1].l"
286                 "jsr Adi2"
287                 "jsr Sti"
288                                         | | |
289 sti $1==1       | R16 |
290                 "jsr Sti1"
291                                         | | |
292 sti $1==2       | R16 |
293                 "jsr Sti"
294                                         | | |
295 sti $1==4       | R16 |
296                 "jsr Sdi"
297                                         | | |
298 sti D   | R16 |
299                 "ldy #[$1].h"
300                 "sty NBYTES+1"
301                 "ldy #[$1].l"
302                 "jsr Stil"
303                                         | | |
304 sts $1==2       | R16 |
305                 "jsr Sts"
306                                         | | |
307 sdl IND($1)     | R16 |
308                 "ldy #BASE+$1"
309                 "pha"
310                 "txa"
311                 "sta (LBl),y"
312                 "iny"
313                 "pla"
314                 "sta (LBl),y"
315                 "jsr Pop"
316                 "iny"
317                 "pha"
318                 "txa"
319                 "sta (LBl),y"
320                 "iny"
321                 "pla"
322                 "sta (LBl),y"
323                                         | | |
324 sdl     | |
325                 allocate(R16)
326                 "lda #[$1].h"
327                 "ldx #[$1].l"
328                 "jsr Locaddr"
329                 "jsr Sdo"
330                                         | | |
331 sde     | R16 |
332                 "sta $1+1"
333                 "stx $1"
334                 "jsr Pop"
335                 "sta $1+3"
336                 "stx $1+2"
337                                         | | |
338 sdf $1==0       | R16 |
339                 "jsr Sdi"
340                                         | | |
341 sdf     | |
342                 allocate(R16)
343                 "lda #[$1].h"
344                 "ldx #[$1].l"
345                 "jsr Adi2"
346                 "jsr Sdi"
347                                         | | |
348
349
350 /* GROUP 3 - INTEGER ARITHMETIC */
351
352 loc lol adi (IN($2) && $3==2)   | |
353                 allocate(R16)
354                 "ldy #BASE+$2"
355                 "clc"
356                 "lda #[$1].l"
357                 "adc (LBl),y"
358                 "tax"
359                 "iny"
360                 "lda #[$1].h"
361                 "adc (LBl),y"
362                                         | %[a] | |
363 lol loc adi     | | | | loc $2 lol $1 adi $3 |
364 lol lol adi (IN($1) && IN($2) && $3==2) | |
365                 allocate(R16)
366                 "ldy #BASE+$1+1"
367                 "lda (LBl),y"
368                 "pha"
369                 "dey"
370                 "lda (LBl),y"
371                 "ldy #BASE+$2"
372                 "clc"
373                 "adc (LBl),y"
374                 "tax"
375                 "iny"
376                 "pla"
377                 "adc (LBl),y"
378                                         | %[a] | |
379 lol loe adi (IN($1) && $3==2) | |
380                 allocate(R16)
381                 "ldy #BASE+$1"
382                 "clc"
383                 "lda (LBl),y"
384                 "adc $2"
385                 "tax"
386                 "iny"
387                 "lda (LBl),y"
388                 "adc $2+1"
389                                         | %[a] | |
390 loe lol adi     | | | | lol $2 loe $1 adi $3 |
391 loe loe adi $3==2       | |
392                 allocate(R16)
393                 "clc"
394                 "lda $1"
395                 "adc $2"
396                 "tax"
397                 "lda $1+1"
398                 "adc $2+1"
399                                         | %[a] | |
400 loc loe adi $3==2       | |
401                 allocate(R16)
402                 "clc"
403                 "lda #[$1].l"
404                 "adc $2"
405                 "tax"
406                 "lda #[$1].h"
407                 "adc $2+1"
408                                         | %[a] | |
409 loe loc adi     | | | | loc $2 loe $1 adi $3 |
410 ldl adi IND($1) && $2==2        | |
411                 allocate(R16)
412                 "ldy #BASE+$1"
413                 "clc"
414                 "lda (LBl),y"
415                 "iny"
416                 "iny"
417                 "adc (LBl),y"
418                 "tax"
419                 "dey"
420                 "lda (LBl),y"
421                 "iny"
422                 "iny"
423                 "adc (LBl),y"
424                                         | %[a] | |
425 lde adi $2==2   | |
426                 allocate(R16)
427                 "clc"
428                 "lda $1"
429                 "adc $1+2"
430                 "tax"
431                 "lda $1+1"
432                 "adc $1+3"
433                                         | %[a] | |
434 loc adi $2==2 | R16 |
435                 "pha"
436                 "txa"
437                 "clc"
438                 "adc #[$1].l"
439                 "tax"
440                 "pla"
441                 "adc #[$1].h"
442                                         | %[1] | |
443 lol adi IN($1) && $2==2 | R16 |
444                 "pha"
445                 "ldy #BASE+$1"
446                 "clc"
447                 "txa"
448                 "adc (LBl),y"
449                 "tax"
450                 "iny"
451                 "pla"
452                 "adc (LBl),y"
453                                         | %[1] | |
454 loe adi $2==2   | R16 |
455                 "pha"
456                 "clc"
457                 "txa"
458                 "adc $1"
459                 "tax"
460                 "pla"
461                 "adc $1+1"
462                                         | %[1] | |
463 lol lol adi IN($1) && !IN($2) && $3==2
464                 | | | | lol $2 lol $1 adi $3 |
465 adi $1==2       | R16 |
466                 "jsr Adi2"
467                                         | %[1] | |
468 adi $1==4       | |
469                 allocate(R16)
470                 "jsr Adi4"
471                                         | | |
472 adi ND  | R16 |
473                 "jsr Test2"
474                 "jsr Adi2"
475                                         | %[1] | |
476 loc lol sbi (IN($2) && $3==2)   | |
477                 allocate(R16)
478                 "ldy #BASE+$1"
479                 "sec"
480                 "lda #[$1].l"
481                 "sbc (LBl),y"
482                 "tax"
483                 "iny"
484                 "lda #[$1].h"
485                 "sbc (LBl),y"
486                                         | %[a] | |
487 lol loc sbi     | | | | lol $1 loc 0-$2 adi $3 |
488 lol lol sbi (IN($1) && IN($2) && $3==2) | |
489                 allocate(R16)
490                 "ldy #BASE+$1+1"
491                 "lda (LBl),y"
492                 "pha"
493                 "dey"
494                 "lda (LBl),y"
495                 "ldy #BASE+$2"
496                 "sec"
497                 "sbc (LBl),y"
498                 "tax"
499                 "iny"
500                 "pla"
501                 "sbc (LBl),y"
502                                         | %[a] | |
503 lol loe sbi (IN($1) && $3==2) | |
504                 allocate(R16)
505                 "ldy #BASE+$1"
506                 "sec"
507                 "lda (LBl),y"
508                 "sbc $2"
509                 "tax"
510                 "iny"
511                 "lda (LBl),y"
512                 "sbc $2+1"
513                                         | %[a] | |
514 loe lol sbi (IN($2) && $3==2) | |
515                 allocate(R16)
516                 "ldy #BASE+$1"
517                 "sec"
518                 "lda $2"
519                 "sbc (LBl),y"
520                 "tax"
521                 "iny"
522                 "lda $2+1"
523                 "sbc (LBl),y"
524                                         | %[a] | |
525 loe loe sbi $3==2       | |
526                 allocate(R16)
527                 "sec"
528                 "lda $1"
529                 "sbc $2"
530                 "tax"
531                 "lda $1+1"
532                 "sbc $2+1"
533                                         | %[a] | |
534 loc loe sbi $3==2       | |
535                 allocate(R16)
536                 "sec"
537                 "lda #[$1].l"
538                 "sbc $2"
539                 "tax"
540                 "lda #[$1].h"
541                 "sbc $2+1"
542                                         | %[a] | |
543 loe loc sbi     | | | | loe $1 loc 0-$2 adi $3 |
544 ldl sbi IND($1) && $2==2        | |
545                 allocate(R16)
546                 "ldy #BASE+$1+2"
547                 "sec"
548                 "lda (LBl),y"
549                 "dey"
550                 "dey"
551                 "sbc (LBl),y"
552                 "tax"
553                 "ldy #BASE+$1+3"
554                 "lda (LBl),y"
555                 "dey"
556                 "dey"
557                 "sbc (LBl),y"
558                                         | %[a] | |
559 lde sbi $2==2   | |
560                 allocate(R16)
561                 "sec"
562                 "lda $1+2"
563                 "sbc $1"
564                 "tax"
565                 "lda $1+3"
566                 "sbc $1"
567                                         | %[a] | |
568 loc sbi $2==2   | R16 |
569                 "pha"
570                 "txa"
571                 "sec"
572                 "sbc #[$1].l"
573                 "tax"
574                 "pla"
575                 "sbc #[$1].h"
576                                         | %[1] | |
577 lol sbi IN($1) && $2==2 | R16 |
578                 "pha"
579                 "ldy #BASE+$1"
580                 "sec"
581                 "txa"
582                 "sbc (LBl),y"
583                 "tax"
584                 "iny"
585                 "pla"
586                 "sbc #[$1].h"
587                                         | %[1] | |
588 loe sbi $2==2 | R16 |
589                 "pha"
590                 "sec"
591                 "txa"
592                 "sbc $1"
593                 "tax"
594                 "pla"
595                 "sbc $1+1"
596                                         | %[1] | |
597 sbi $1==2       | R16 |
598                 "jsr Sbi2"
599                                         | %[1] | |
600 sbi $1==4       | |
601                 allocate(R16)
602                 "jsr Sbi4"
603                                         | | |
604 sbi ND  | R16 |
605                 "jsr Test2"
606                 "jsr Sbi2"
607                                         | %[1] | |
608 loc lol mli (IN($2) && $3==2)   | |
609                 allocate(R16)
610                 "lda #[$1].l"
611                 "sta ARTH"
612                 "lda #[$1].h"
613                 "sta ARTH+1"
614                 "ldy #BASE+$2"
615                 "lda (LBl),y"
616                 "sta ARTH+2"
617                 "iny"
618                 "lda (LBl),y"
619                 "sta ARTH+3"
620                 "jsr Mlinp"
621                                         | %[a] | |
622 lol loc mli     | | | | loc $2 lol $1 mli $3 |
623 lol lol mli (IN($1) && IN($2) && $3==2) | |
624                 allocate(R16)
625                 "ldy #BASE+$1"
626                 "lda (LBl),y"
627                 "sta ARTH"
628                 "iny"
629                 "lda (LBl),y"
630                 "sta ARTH+1"
631                 "ldy #BASE+$2"
632                 "lda (LBl),y"
633                 "sta ARTH+2"
634                 "iny"
635                 "lda (LBl),y"
636                 "sta ARTH+3"
637                 "jsr Mlinp"
638                                         | %[a] | |
639 lol loe mli (IN($1) && $3==2) | |
640                 allocate(R16)
641                 "ldy #BASE+$1"
642                 "lda (LBl),y"
643                 "sta ARTH"
644                 "iny"
645                 "lda (LBl),y"
646                 "sta ARTH+1"
647                 "lda $2"
648                 "sta ARTH+2"
649                 "lda $2+1"
650                 "sta ARTH+3"
651                 "jsr Mlinp"
652                                         | %[a] | |
653 loe lol mli (IN($2) && $3==2) | | | | lol $2 loe $1 mli $3 |
654 loe loe mli $3==2       | |
655                 allocate(R16)
656                 "lda $1"
657                 "sta ARTH"
658                 "lda $1+1"
659                 "sta ARTH+1"
660                 "lda $2"
661                 "sta ARTH+2"
662                 "lda $2+1"
663                 "sta ARTH+3"
664                 "jsr Mlinp"
665                                         | %[a] | |
666 loc loe mli $3==2       | |
667                 allocate(R16)
668                 "lda #[$1].l"
669                 "sta ARTH"
670                 "lda #[$1].h"
671                 "sta ARTH+1"
672                 "lda $2"
673                 "sta ARTH+2"
674                 "lda $2+1"
675                 "sta ARTH+3"
676                 "jsr Mlinp"
677                                         | %[a] | |
678 loe loc mli     | | | | loc $2 loe $1 mli $3 |
679 ldl mli IND($1) && $2==2        | |
680                 allocate(R16)
681                 "ldy #BASE+$1"
682                 "lda (LBl),y"
683                 "sta ARTH"
684                 "iny"
685                 "lda (LBl),y"
686                 "sta ARTH+1"
687                 "iny"
688                 "lda (LBl),y"
689                 "sta ARTH+2"
690                 "iny"
691                 "lda (LBl),y"
692                 "sta ARTH+3"
693                 "jsr Mlinp"
694                                         | %[a] | |
695 lde mli $2==2   | |
696                 allocate(R16)
697                 "lda $1"
698                 "sta ARTH"
699                 "lda $1+1"
700                 "sta ARTH+1"
701                 "lda $1+2"
702                 "sta ARTH+2"
703                 "lda $1+3"
704                 "sta ARTH+3"
705                 "jsr Mlinp"
706                                         | %[a] | |
707 loc mli $2==2 | R16 |
708                 "stx ARTH"
709                 "sta ARTH+1"
710                 "lda #[$1].l"
711                 "sta ARTH+2"
712                 "lda #[$1].h"
713                 "sta ARTH+3"
714                 "jsr Mlinp"
715                                         | %[1] | |
716 lol mli IN($1) && $2==2 | R16 |
717                 "stx ARTH"
718                 "sta ARTH+1"
719                 "ldy #BASE+$1"
720                 "lda (LBl),y"
721                 "sta ARTH+2"
722                 "iny"
723                 "lda (LBl),y"
724                 "sta ARTH+3"
725                 "jsr Mlinp"
726                                         | %[1] | |
727 loe mli $2==2   | R16 |
728                 "stx ARTH"
729                 "sta ARTH+1"
730                 "lda $1"
731                 "sta ARTH+2"
732                 "lda $1+1"
733                 "sta ARTH+3"
734                 "jsr Mlinp"
735                                         | %[1] | |
736 lol lol mli IN($1) && !IN($2) && $3==2
737                 | | | | lol $2 lol $1 mli $3 |
738 mli $1==2       | R16 |
739                 "jsr Mli2"
740                                         | %[1] | |
741 mli $1==4       | |
742                 allocate(R16)
743                 "jsr Mli4"
744                                         | | |
745 mli ND  | R16 |
746                 "jsr Test2"
747                 "jsr Mli2"
748                                         | %[1] | |
749 loc lol dvi (IN($2) && $3==2)   | |
750                 allocate(R16)
751                 "ldy #BASE+$2"
752                 "lda (LBl),y"
753                 "sta ARTH"
754                 "iny"
755                 "lda (LBl),y"
756                 "sta ARTH+1"
757                 "lda #[$1].l"
758                 "sta ARTH+2"
759                 "lda #[$1].h"
760                 "sta ARTH+3"
761                 "ldy #1"
762                 "sty UNSIGN"
763                 "jsr Div"
764                                         | %[a] | |
765 lol loc dvi (IN($1) && $3==2)   | |
766                 allocate(R16)
767                 "lda #[$2].l"
768                 "sta ARTH"
769                 "lda #[$2].h"
770                 "sta ARTH+1"
771                 "ldy #BASE+$1"
772                 "lda (LBl),y"
773                 "sta ARTH+2"
774                 "iny"
775                 "lda (LBl),y"
776                 "sta ARTH+3"
777                 "ldy #1"
778                 "sty UNSIGN"
779                 "jsr Div"
780                                         | %[a] | |
781 lol lol dvi (IN($1) && IN($2) && $3==2) | |
782                 allocate(R16)
783                 "ldy #BASE+$2"
784                 "lda (LBl),y"
785                 "sta ARTH"
786                 "iny"
787                 "lda (LBl),y"
788                 "sta ARTH+1"
789                 "ldy #BASE+$1"
790                 "lda (LBl),y"
791                 "sta ARTH+2"
792                 "iny"
793                 "lda (LBl),y"
794                 "sta ARTH+3"
795                 "ldy #1"
796                 "sty UNSIGN"
797                 "jsr Div"
798                                         | %[a] | |
799 lol loe dvi (IN($1) && $3==2) | |
800                 allocate(R16)
801                 "ldy #BASE+$1"
802                 "lda (LBl),y"
803                 "sta ARTH+2"
804                 "iny"
805                 "lda (LBl),y"
806                 "sta ARTH+3"
807                 "lda $2"
808                 "sta ARTH"
809                 "lda $2+1"
810                 "sta ARTH+1"
811                 "ldy #1"
812                 "sty UNSIGN"
813                 "jsr Div"
814                                         | %[a] | |
815 loe lol dvi (IN($2) && $3==2) | |
816                 allocate(R16)
817                 "ldy #BASE+$2"
818                 "lda (LBl),y"
819                 "sta ARTH"
820                 "iny"
821                 "lda (LBl),y"
822                 "sta ARTH+1"
823                 "lda $2"
824                 "sta ARTH+2"
825                 "lda $2+1"
826                 "sta ARTH+3"
827                 "ldy #1"
828                 "sty UNSIGN"
829                 "jsr Div"
830                                         | %[a] | |
831 loe loe dvi $3==2       | |
832                 allocate(R16)
833                 "lda $2"
834                 "sta ARTH"
835                 "lda $2+1"
836                 "sta ARTH+1"
837                 "lda $1"
838                 "sta ARTH+2"
839                 "lda $1+1"
840                 "sta ARTH+3"
841                 "ldy #1"
842                 "sty UNSIGN"
843                 "jsr Div"
844                                         | %[a] | |
845 loc loe dvi $3==2       | |
846                 allocate(R16)
847                 "lda #[$1].l"
848                 "sta ARTH+2"
849                 "lda #[$1].h"
850                 "sta ARTH+3"
851                 "lda $2"
852                 "sta ARTH"
853                 "lda $2+1"
854                 "sta ARTH+1"
855                 "ldy #1"
856                 "sty UNSIGN"
857                 "jsr Div"
858                                         | %[a] | |
859 loe loc dvi $3==2       | |
860                 allocate(R16)
861                 "lda #[$2].l"
862                 "sta ARTH"
863                 "lda #[$2].h"
864                 "sta ARTH+1"
865                 "lda $1"
866                 "sta ARTH+2"
867                 "lda $1+1"
868                 "sta ARTH+3"
869                 "ldy #1"
870                 "sty UNSIGN"
871                 "jsr Div"
872                                         | %[a] | |
873 ldl dvi IND($1) && $2==2        | |
874                 allocate(R16)
875                 "ldy #BASE+$1"
876                 "lda (LBl),y"
877                 "sta ARTH"
878                 "iny"
879                 "lda (LBl),y"
880                 "sta ARTH+1"
881                 "iny"
882                 "lda (LBl),y"
883                 "sta ARTH+2"
884                 "iny"
885                 "lda (LBl),y"
886                 "sta ARTH+3"
887                 "ldy #1"
888                 "sty UNSIGN"
889                 "jsr Div"
890                                         | %[a] | |
891 lde dvi $2==2   | |
892                 allocate(R16)
893                 "lda $1"
894                 "sta ARTH"
895                 "lda $1+1"
896                 "sta ARTH+1"
897                 "lda $1+2"
898                 "sta ARTH+2"
899                 "lda $1+3"
900                 "sta ARTH+3"
901                 "ldy #1"
902                 "sty UNSIGN"
903                 "jsr Div"
904                                         | %[a] | |
905 loc dvi $2==2 | R16 |
906                 "stx ARTH+2"
907                 "sta ARTH+3"
908                 "lda #[$1].l"
909                 "sta ARTH"
910                 "lda #[$1].h"
911                 "sta ARTH+1"
912                 "ldy #1"
913                 "sty UNSIGN"
914                 "jsr Div"
915                                         | %[1] | |
916 lol dvi IN($1) && $2==2 | R16 |
917                 "stx ARTH+2"
918                 "sta ARTH+3"
919                 "ldy #BASE+$1"
920                 "lda (LBl),y"
921                 "sta ARTH"
922                 "iny"
923                 "lda (LBl),y"
924                 "sta ARTH+1"
925                 "ldy #1"
926                 "sty UNSIGN"
927                 "jsr Div"
928                                         | %[1] | |
929 loe dvi $2==2   | R16 |
930                 "stx ARTH+2"
931                 "sta ARTH+3"
932                 "lda $1"
933                 "sta ARTH"
934                 "lda $1+1"
935                 "sta ARTH+1"
936                 "ldy #1"
937                 "sty UNSIGN"
938                 "jsr Div"
939                                         | %[1] | |
940 dvi $1==2       | R16 |
941                 "jsr Dvi2"
942                                         | %[1] | |
943 dvi $1==4       | |
944                 allocate(R16)
945                 "jsr Dvi4"
946                                         | | |
947 dvi ND  | R16 |
948                 "jsr Test2"
949                 "jsr Dvi2"
950                                         | %[1] | |
951 rmi $1==2       | R16 |
952                 "jsr Rmi2"
953                                         | %[1] | |
954 rmi $1==4       | |
955                 allocate(R16)
956                 "jsr Rmi4"
957                                         | | |
958 rmi ND  | R16 |
959                 "jsr Test2"
960                 "jsr Rmi2"
961                                         | %[1] | |
962 ngi $1==2       | R16 |
963                 "jsr Ngi2"
964                                         | %[1] | |
965 ngi $1==4       | |
966                 allocate(R16)
967                 "lda SP+1"
968                 "ldx SP+2"
969                 "jsr Ngi4"
970                                         | | |
971 ngi ND  | R16 |
972                 "jsr Test2"
973                 "jsr Ngi2"
974                                         | %[1] | |
975 sli $1==2       | R16 |
976                 "jsr Sli2"
977                                         | %[1] | |
978 sli $1==4       | R16 |
979                 "jsr Sli4"
980                                         | | |
981 sli ND  | R16 |
982                 "jsr Test2"
983                 "jsr Sli2"
984                                         | %[1] | |
985 sri $1==2       | R16 |
986                 "jsr Sri2"
987                                         | %[1] | |
988 sri $1==4       | R16 |
989                 "jsr Sri4"
990                                         | | |
991 sri ND  | R16 |
992                 "jsr Test2"
993                 "jsr Sri2"
994                                         | %[1] | |
995
996
997 /* GROUP 4 - UNSIGNED ARITHMETIC */
998
999 loc lol adu     | | | | loc $1 lol $2 adi $3 |
1000 lol loc adu     | | | | lol $1 loc $2 adi $3 |
1001 lol lol adu     | | | | lol $1 lol $2 adi $3 |
1002 lol loe adu     | | | | lol $1 loe $2 adi $3 |
1003 loe lol adu     | | | | loe $1 lol $2 adi $3 |
1004 loe loe adu     | | | | loe $1 loe $2 adi $3 |
1005 loc loe adu     | | | | loc $1 loe $2 adi $3 |
1006 loe loc adu     | | | | loe $1 loc $2 adi $3 |
1007 ldl adu         | | | | ldl $1 adi $2 |
1008 lde adu         | | | | lde $1 adi $2 |
1009 loc adu         | | | | loc $1 adi $2 |
1010 lol adu         | | | | lol $1 adi $2 |
1011 loe adu         | | | | loe $1 adi $2 |
1012 adu             | | | | adi $1 |
1013
1014 loc lol sbu     | | | | loc $1 lol $2 sbi $3 |
1015 lol loc sbu     | | | | lol $1 loc $2 sbi $3 |
1016 lol lol sbu     | | | | lol $1 lol $2 sbi $3 |
1017 lol loe sbu     | | | | lol $1 loe $2 sbi $3 |
1018 loe lol sbu     | | | | loe $1 lol $2 sbi $3 |
1019 loe loe sbu     | | | | loe $1 loe $2 sbi $3 |
1020 loc loe sbu     | | | | loc $1 loe $2 sbi $3 |
1021 loe loc sbu     | | | | loe $1 loc $2 sbi $3 |
1022 ldl sbu         | | | | ldl $1 sbi $2 |
1023 lde sbu         | | | | lde $1 sbi $2 |
1024 loc sbu         | | | | loc $1 sbi $2 |
1025 lol sbu         | | | | lol $1 sbi $2 |
1026 loe sbu         | | | | loe $1 sbi $2 |
1027 sbu             | | | | sbi $1 |
1028
1029 loc lol mlu (IN($2) && $3==2)   | |
1030                 allocate(R16)
1031                 "lda #[$1].l"
1032                 "sta ARTH"
1033                 "lda #[$1].h"
1034                 "sta ARTH+1"
1035                 "ldy #BASE+$2"
1036                 "lda (LBl),y"
1037                 "sta ARTH+2"
1038                 "iny"
1039                 "lda (LBl),y"
1040                 "sta ARTH+3"
1041                 "ldy #0"
1042                 "sty UNSIGN"
1043                 "jsr Mul"
1044                                         | %[a] | |
1045 lol loc mlu     | | | | loc $2 lol $1 mlu $3 |
1046 lol lol mlu (IN($1) && IN($2) && $3==2) | |
1047                 allocate(R16)
1048                 "ldy #BASE+$1"
1049                 "lda (LBl),y"
1050                 "sta ARTH"
1051                 "iny"
1052                 "lda (LBl),y"
1053                 "sta ARTH+1"
1054                 "ldy #BASE+$2"
1055                 "lda (LBl),y"
1056                 "sta ARTH+2"
1057                 "iny"
1058                 "lda (LBl),y"
1059                 "sta ARTH+3"
1060                 "ldy #0"
1061                 "sty UNSIGN"
1062                 "jsr Mul"
1063                                         | %[a] | |
1064 lol loe mlu (IN($1) && $3==2) | |
1065                 allocate(R16)
1066                 "ldy #BASE+$1"
1067                 "lda (LBl),y"
1068                 "sta ARTH"
1069                 "iny"
1070                 "lda (LBl),y"
1071                 "sta ARTH+1"
1072                 "lda $2"
1073                 "sta ARTH+2"
1074                 "lda $2+1"
1075                 "sta ARTH+3"
1076                 "ldy #0"
1077                 "sty UNSIGN"
1078                 "jsr Mul"
1079                                         | %[a] | |
1080 loe lol mlu (IN($2) && $3==2) | | | | lol $2 loe $1 mlu $3 |
1081 loe loe mlu $3==2       | |
1082                 allocate(R16)
1083                 "lda $1"
1084                 "sta ARTH"
1085                 "lda $1+1"
1086                 "sta ARTH+1"
1087                 "lda $2"
1088                 "sta ARTH+2"
1089                 "lda $2+1"
1090                 "sta ARTH+3"
1091                 "ldy #0"
1092                 "sty UNSIGN"
1093                 "jsr Mul"
1094                                         | %[a] | |
1095 loc loe mlu $3==2       | |
1096                 allocate(R16)
1097                 "lda #[$1].l"
1098                 "sta ARTH"
1099                 "lda #[$1].h"
1100                 "sta ARTH+1"
1101                 "lda $2"
1102                 "sta ARTH+2"
1103                 "lda $2+1"
1104                 "sta ARTH+3"
1105                 "ldy #0"
1106                 "sty UNSIGN"
1107                 "jsr Mul"
1108                                         | %[a] | |
1109 loe loc mlu     | | | | loc $2 loe $1 mlu $3 |
1110 ldl mlu IND($1) && $2==2        | |
1111                 allocate(R16)
1112                 "ldy #BASE+$1"
1113                 "lda (LBl),y"
1114                 "sta ARTH"
1115                 "iny"
1116                 "lda (LBl),y"
1117                 "sta ARTH+1"
1118                 "iny"
1119                 "lda (LBl),y"
1120                 "sta ARTH+2"
1121                 "iny"
1122                 "lda (LBl),y"
1123                 "sta ARTH+3"
1124                 "ldy #0"
1125                 "sty UNSIGN"
1126                 "jsr Mul"
1127                                         | %[a] | |
1128 lde mlu $2==2   | |
1129                 allocate(R16)
1130                 "lda $1"
1131                 "sta ARTH"
1132                 "lda $1+1"
1133                 "sta ARTH+1"
1134                 "lda $1+2"
1135                 "sta ARTH+2"
1136                 "lda $1+3"
1137                 "sta ARTH+3"
1138                 "ldy #0"
1139                 "sty UNSIGN"
1140                 "jsr Mul"
1141                                         | %[a] | |
1142 loc mlu $2==2 | R16 |
1143                 "stx ARTH"
1144                 "sta ARTH+1"
1145                 "lda #[$1].l"
1146                 "sta ARTH+2"
1147                 "lda #[$1].h"
1148                 "sta ARTH+3"
1149                 "ldy #0"
1150                 "sty UNSIGN"
1151                 "jsr Mul"
1152                                         | %[1] | |
1153 lol mlu IN($1) && $2==2 | R16 |
1154                 "stx ARTH"
1155                 "sta ARTH+1"
1156                 "ldy #BASE+$1"
1157                 "lda (LBl),y"
1158                 "sta ARTH+2"
1159                 "iny"
1160                 "lda (LBl),y"
1161                 "sta ARTH+3"
1162                 "ldy #0"
1163                 "sty UNSIGN"
1164                 "jsr Mul"
1165                                         | %[1] | |
1166 loe mlu $2==2   | R16 |
1167                 "stx ARTH"
1168                 "sta ARTH+1"
1169                 "lda $1"
1170                 "sta ARTH+2"
1171                 "lda $1+1"
1172                 "sta ARTH+3"
1173                 "ldy #0"
1174                 "sty UNSIGN"
1175                 "jsr Mul"
1176                                         | %[1] | |
1177 lol lol mlu IN($1) && !IN($2) && $3==2
1178                 | | | | lol $2 lol $1 mlu $3 |
1179 mlu $1==2       | R16 |
1180                 "jsr Mlu2"
1181                                         | %[1] | |
1182 mlu $1==4       | |
1183                 allocate(R16)
1184                 "jsr Mlu4"
1185                                         | | |
1186 mlu ND  | R16 |
1187                 "jsr Test2"
1188                 "jsr Mlu2"
1189                                         | %[1] | |
1190
1191 loc lol dvu (IN($2) && $3==2)   | |
1192                 allocate(R16)
1193                 "ldy #BASE+$2"
1194                 "lda (LBl),y"
1195                 "sta ARTH"
1196                 "iny"
1197                 "lda (LBl),y"
1198                 "sta ARTH+1"
1199                 "lda #[$1].l"
1200                 "sta ARTH+2"
1201                 "lda #[$1].h"
1202                 "sta ARTH+3"
1203                 "ldy #0"
1204                 "sty UNSIGN"
1205                 "jsr Duv"
1206                                         | %[a] | |
1207 lol loc dvu (IN($1) && $3==2)   | |
1208                 allocate(R16)
1209                 "lda #[$2].l"
1210                 "sta ARTH"
1211                 "lda #[$2].h"
1212                 "sta ARTH+1"
1213                 "ldy #BASE+$1"
1214                 "lda (LBl),y"
1215                 "sta ARTH+2"
1216                 "iny"
1217                 "lda (LBl),y"
1218                 "sta ARTH+3"
1219                 "ldy #0"
1220                 "sty UNSIGN"
1221                 "jsr Duv"
1222                                         | %[a] | |
1223 lol lol dvu (IN($1) && IN($2) && $3==2) | |
1224                 allocate(R16)
1225                 "ldy #BASE+$2"
1226                 "lda (LBl),y"
1227                 "sta ARTH"
1228                 "iny"
1229                 "lda (LBl),y"
1230                 "sta ARTH+1"
1231                 "ldy #BASE+$1"
1232                 "lda (LBl),y"
1233                 "sta ARTH+2"
1234                 "iny"
1235                 "lda (LBl),y"
1236                 "sta ARTH+3"
1237                 "ldy #0"
1238                 "sty UNSIGN"
1239                 "jsr Duv"
1240                                         | %[a] | |
1241 lol loe dvu (IN($1) && $3==2) | |
1242                 allocate(R16)
1243                 "ldy #BASE+$1"
1244                 "lda (LBl),y"
1245                 "sta ARTH+2"
1246                 "iny"
1247                 "lda (LBl),y"
1248                 "sta ARTH+3"
1249                 "lda $2"
1250                 "sta ARTH"
1251                 "lda $2+1"
1252                 "sta ARTH+1"
1253                 "ldy #0"
1254                 "sty UNSIGN"
1255                 "jsr Duv"
1256                                         | %[a] | |
1257 loe lol dvu (IN($2) && $3==2) | |
1258                 allocate(R16)
1259                 "ldy #BASE+$2"
1260                 "lda (LBl),y"
1261                 "sta ARTH"
1262                 "iny"
1263                 "lda (LBl),y"
1264                 "sta ARTH+1"
1265                 "lda $2"
1266                 "sta ARTH+2"
1267                 "lda $2+1"
1268                 "sta ARTH+3"
1269                 "ldy #0"
1270                 "sty UNSIGN"
1271                 "jsr Duv"
1272                                         | %[a] | |
1273 loe loe dvu $3==2       | |
1274                 allocate(R16)
1275                 "lda $2"
1276                 "sta ARTH"
1277                 "lda $2+1"
1278                 "sta ARTH+1"
1279                 "lda $1"
1280                 "sta ARTH+2"
1281                 "lda $1+1"
1282                 "sta ARTH+3"
1283                 "ldy #0"
1284                 "sty UNSIGN"
1285                 "jsr Duv"
1286                                         | %[a] | |
1287 loc loe dvu $3==2       | |
1288                 allocate(R16)
1289                 "lda #[$1].l"
1290                 "sta ARTH+2"
1291                 "lda #[$1].h"
1292                 "sta ARTH+3"
1293                 "lda $2"
1294                 "sta ARTH"
1295                 "lda $2+1"
1296                 "sta ARTH+1"
1297                 "ldy #0"
1298                 "sty UNSIGN"
1299                 "jsr Duv"
1300                                         | %[a] | |
1301 loe loc dvu $3==2       | |
1302                 allocate(R16)
1303                 "lda #[$2].l"
1304                 "sta ARTH"
1305                 "lda #[$2].h"
1306                 "sta ARTH+1"
1307                 "lda $1"
1308                 "sta ARTH+2"
1309                 "lda $1+1"
1310                 "sta ARTH+3"
1311                 "ldy #0"
1312                 "sty UNSIGN"
1313                 "jsr Duv"
1314                                         | %[a] | |
1315 ldl dvu IND($1) && $2==2        | |
1316                 allocate(R16)
1317                 "ldy #BASE+$1"
1318                 "lda (LBl),y"
1319                 "sta ARTH"
1320                 "iny"
1321                 "lda (LBl),y"
1322                 "sta ARTH+1"
1323                 "iny"
1324                 "lda (LBl),y"
1325                 "sta ARTH+2"
1326                 "iny"
1327                 "lda (LBl),y"
1328                 "sta ARTH+3"
1329                 "ldy #0"
1330                 "sty UNSIGN"
1331                 "jsr Duv"
1332                                         | %[a] | |
1333 lde dvu $2==2   | |
1334                 allocate(R16)
1335                 "lda $1"
1336                 "sta ARTH"
1337                 "lda $1+1"
1338                 "sta ARTH+1"
1339                 "lda $1+2"
1340                 "sta ARTH+2"
1341                 "lda $1+3"
1342                 "sta ARTH+3"
1343                 "ldy #0"
1344                 "sty UNSIGN"
1345                 "jsr Duv"
1346                                         | %[a] | |
1347 loc dvu $2==2 | R16 |
1348                 "stx ARTH+2"
1349                 "sta ARTH+3"
1350                 "lda #[$1].l"
1351                 "sta ARTH"
1352                 "lda #[$1].h"
1353                 "sta ARTH+1"
1354                 "ldy #0"
1355                 "sty UNSIGN"
1356                 "jsr Duv"
1357                                         | %[1] | |
1358 lol dvu IN($1) && $2==2 | R16 |
1359                 "stx ARTH+2"
1360                 "sta ARTH+3"
1361                 "ldy #BASE+$1"
1362                 "lda (LBl),y"
1363                 "sta ARTH"
1364                 "iny"
1365                 "lda (LBl),y"
1366                 "sta ARTH+1"
1367                 "ldy #0"
1368                 "sty UNSIGN"
1369                 "jsr Duv"
1370                                         | %[1] | |
1371 loe dvu $2==2   | R16 |
1372                 "stx ARTH+2"
1373                 "sta ARTH+3"
1374                 "lda $1"
1375                 "sta ARTH"
1376                 "lda $1+1"
1377                 "sta ARTH+1"
1378                 "ldy #0"
1379                 "sty UNSIGN"
1380                 "jsr Duv"
1381                                         | %[1] | |
1382 dvu $1==2       | R16 |
1383                 "jsr Dvu2"
1384                                         | %[1] | |
1385 dvu $1==4       | |
1386                 allocate(R16)
1387                 "jsr Dvu4"
1388                                         | | |
1389 dvu ND  | R16 |
1390                 "jsr Test2"
1391                 "jsr Dvu2"
1392                                         | %[1] | |
1393
1394 rmu $1==2       | R16 |
1395                 "jsr Rmu2"
1396                                         | %[1] | |
1397 rmu $1==4       | |
1398                 allocate(R16)
1399                 "jsr Rmu4"
1400                                         | | |
1401 slu     | | | | sli $1 |
1402 sru $1==2       | R16 |
1403                 "jsr Sru2"
1404                                         | %[1] | |
1405 sru $1==4       | R16 |
1406                 "jsr Sru4"
1407                                         | | |
1408 sru ND  | R16 |
1409                 "jsr Test2"
1410                 "jsr Sru2"
1411                                         | %[1] | |
1412
1413
1414 /* GROUP 6 - POINTER ARITHMETIC */
1415
1416 adp $1==0       | | | | |
1417 adp     | | | | loc $1 adi 2 |
1418 ads $1==2       | R16 |
1419                 "jsr Adi2"
1420                                         | %[1] | |
1421 ads ND  | R16 |
1422                 "jsr Test2"
1423                 "jsr Adi2"
1424                                         | %[1] | |
1425 sbs $1==2       | R16 |
1426                 "jsr Sbi2"
1427                                         | %[1] | |
1428 sbs ND  | R16 |
1429                 "jsr Test2"
1430                 "jsr Sbi2"
1431                                         | %[1] | |
1432
1433
1434 /* GROUP 7 INCREMENT/DECREMENT/ZERO */
1435
1436 inc     | R16 |
1437                 "inx"
1438                 "bne 1f"
1439                 "clc"
1440                 "adc #1\n1:"
1441                                         | %[1] | |
1442 inl IN($1)      | |
1443                 allocate(R16)
1444                 "ldy #BASE+$1"
1445                 "clc"
1446                 "lda (LBl),y"
1447                 "adc #1"
1448                 "sta (LBl),y"
1449                 "bcc 1f"
1450                 "iny"
1451                 "lda (LBl),y"
1452                 "adc #0"
1453                 "sta (LBl),y\n1:"
1454                                         | | |
1455 inl D   | |
1456                 allocate(R16)
1457                 "lda #[$1].h"
1458                 "ldx #[$1].l"
1459                 "jsr Lol"
1460                 "inx"
1461                 "bne 1f"
1462                 "clc"
1463                 "adc #1"
1464                 "1: jsr Stii"
1465                                         | | |
1466 ine     | |
1467                 "inc $1"
1468                 "bne 1f"
1469                 "inc $1+1\n1:"
1470                                         | | |
1471 dec     | R16 |
1472                 "cpx #0"
1473                 "bne 1f"
1474                 "sec"
1475                 "sbc #1"
1476                 "1: dex"
1477                                         | %[1] | |
1478 del IN($1)      | |
1479                 allocate(R16)
1480                 "ldy #BASE+$1"
1481                 "sec"
1482                 "lda (LBl),y"
1483                 "sbc #1"
1484                 "sta (LBl),y"
1485                 "bcs 1f"
1486                 "iny"
1487                 "lda (LBl),y"
1488                 "sbc #0"
1489                 "sta (LBl),y\n1:"
1490                                         | | |
1491 del     | |
1492                 allocate(R16)
1493                 "lda #[$1].h"
1494                 "ldx #[$1].l"
1495                 "jsr Lol"
1496                 "cpx #0"
1497                 "bne 1f"
1498                 "sec"
1499                 "sbc #1"
1500                 "1: dex"
1501                 "jsr Stii"
1502                                         | | |
1503 dee     | |
1504                 "ldy $1"
1505                 "bne 1f"
1506                 "dec $1+1"
1507                 "1: dey"
1508                 "sty $1"
1509                                         | | |
1510 zrl IN($1)      | |
1511                 allocate(R16)
1512                 "ldy #BASE+$1"
1513                 "lda #0"
1514                 "sta (LBl),y"
1515                 "iny"
1516                 "sta (LBl),y"
1517                                         | | |
1518 zrl     | |
1519                 allocate(R16)
1520                 "lda #[$1].h"
1521                 "ldx #[$1].l"
1522                 "jsr Zrl"
1523                                         | | |
1524 zre     | |
1525                 "ldy #0"
1526                 "sty $1"
1527                 "sty $1+1"
1528                                         | | |
1529 zer $1==2       | |
1530                 allocate(R16)
1531                 "lda #0"
1532                 "tax"
1533                                         | %[a] | |
1534 zer $1==4       | |
1535                 allocate(R16)
1536                 "lda #0"
1537                 "tax"
1538                 "jsr Push"
1539                                         | %[a] | |
1540 zer $1>0 && $1<=256     | |
1541                 allocate(R16)
1542                 "ldy #$1-1"
1543                 "jsr Zer"
1544                                         | | |
1545
1546
1547 /* GROUP 8 - CONVERT (stack: source, source size, dest. size (top)) */
1548
1549 loc loc cii $1==1 && $2==2      | R16 |
1550                 "txa"
1551                 "bpl 1f"
1552                 "lda #0xff"
1553                 "bne 2f"
1554                 "1:  lda #0\n2:"
1555                                         | %[1] | |
1556 cii     | R16 |
1557                 "jsr Cii"
1558                                         | | |
1559 cui     | | | | cii |
1560 ciu     | | | | cii |
1561 cuu     | | | | cii |
1562 loc loc cui $1==$2      | | | | |
1563 loc loc ciu $1==$2      | | | | |
1564 loc loc cuu $1==2 && $2==4 | | | | loc 0 |
1565
1566
1567 /* GROUP 9 - LOGICAL */
1568
1569 and $1==2       | R16 |
1570                 "sta ARTH+1"
1571                 "stx ARTH"
1572                 "jsr Pop"
1573                 "and ARTH+1"
1574                 "pha"
1575                 "txa"
1576                 "and ARTH"
1577                 "tax"
1578                 "pla"
1579                                         | %[1] | |
1580 and $1<=254     | |
1581                 allocate(R16)
1582                 "ldy #[$1].l"
1583                 "jsr And"
1584                                         | | |
1585 and ND  | R16 |
1586                 "jsr TestFFh"
1587                 "jsr Pop"
1588                 "iny"
1589                 "jsr And"
1590                                         | | |
1591 ior $1==2       | R16 |
1592                 "sta ARTH+1"
1593                 "stx ARTH"
1594                 "jsr Pop"
1595                 "ora ARTH+1"
1596                 "pha"
1597                 "txa"
1598                 "ora ARTH"
1599                 "tax"
1600                 "pla"
1601                                         | %[1] | |
1602 ior $1<=254     | |
1603                 allocate(R16)
1604                 "ldy #[$1].l"
1605                 "jsr Ior"
1606                                         | | |
1607 ior ND  | R16 |
1608                 "jsr TestFFh"
1609                 "jsr Pop"
1610                 "iny"
1611                 "jsr Ior"
1612                                         | | |
1613 xor $1==2       | R16 |
1614                 "sta ARTH+1"
1615                 "stx ARTH"
1616                 "jsr Pop"
1617                 "eor ARTH+1"
1618                 "pha"
1619                 "txa"
1620                 "eor ARTH"
1621                 "tax"
1622                 "pla"
1623                                         | %[1] | |
1624 xor $1<=254     | |
1625                 allocate(R16)
1626                 "ldy #[$1].l"
1627                 "jsr Xor"
1628                                         | | |
1629 xor ND  | R16 |
1630                 "jsr TestFFh"
1631                 "jsr Pop"
1632                 "iny"
1633                 "jsr Xor"
1634                                         | | |
1635 com $1==2       | R16 |
1636                 "eor #0xff"
1637                 "pha"
1638                 "txa"
1639                 "eor #0xff"
1640                 "tax"
1641                 "pla"
1642                                         | %[1] | |
1643 com $1<=254     | |
1644                 allocate(R16)
1645                 "ldy #[$1].l"
1646                 "jsr Com"
1647                                         | | |
1648 com ND  | R16 |
1649                 "jsr TestFFh"
1650                 "jsr Pop"
1651                 "iny"
1652                 "jsr Com"
1653                                         | | |
1654 rol $1==2       | R16 |
1655                 "jsr Rol"
1656                                         | %[1] | |
1657 rol $1==4       | R16 |
1658                 "jsr Rol4"
1659                                         | | |
1660 rol ND  | R16 |
1661                 "jsr Test2"
1662                 "jsr Rolw"
1663                                         | %[1] | |
1664 ror $1==2       | R16 |
1665                 "jsr Ror"
1666                                         | %[1] | |
1667 ror $1==4       | R16 |
1668                 "jsr Ror4"
1669                                         | | |
1670 ror ND  | R16 |
1671                 "jsr Test2"
1672                 "jsr Rorw"
1673                                         | %[1] | |
1674
1675
1676 /* GROUP 10 - SETS */
1677
1678 loc inn $1<0 && $2==2   | R16 |
1679                 "lda #0"
1680                 "tax"
1681                                         | %[1] | |
1682 loc inn $2==2 && $1==0  | R16 |
1683                 "txa"
1684                 "and #1"
1685                 "tax"
1686                 "lda #0"
1687                                         | %[1] | |
1688 loc inn $2==2 && $1>0 && $1<16  | R16 |
1689                 "ldy #$1"
1690                 "stx ARTH"
1691                 "1: lsr a"
1692                 "ror ARTH"
1693                 "dey"
1694                 "bne 1b"
1695                 "lda ARTH"
1696                 "and #1"
1697                 "tax"
1698                 "lda #0"
1699                                         | %[1] | |
1700 loc inn zeq $1>0 && $1<16 && $2==2      | R16 |
1701                 "ldy #$1+1"
1702                 "stx ARTH"
1703                 "1: lsr a"
1704                 "ror ARTH"
1705                 "dey"
1706                 "bne 1b"
1707                 "bcc $1"
1708                                         | | |
1709 loc inn zne $1>0 && $1<16 && $2==2      | R16 |
1710                 "ldy #$1+1"
1711                 "stx ARTH"
1712                 "1: lsr a"
1713                 "ror ARTH"
1714                 "dey"
1715                 "bne 1b"
1716                 "bcs $1"
1717                                         | | |
1718 inn $1==2       | R16 |
1719                 "txa"
1720                 "tay"
1721                 "jsr Pop"
1722                 "stx ARTH"
1723                 "1: lsr a"
1724                 "ror ARTH"
1725                 "dey"
1726                 "bne 1b"
1727                 "lda ARTH"
1728                 "and #1"
1729                 "tax"
1730                 "lda #0"
1731                                 | %[1] | |
1732 inn zeq $1==2   | R16 |
1733                 "txa"
1734                 "tay"
1735                 "jsr Pop"
1736                 "stx ARTH"
1737                 "1: lsr a"
1738                 "ror ARTH"
1739                 "dey"
1740                 "bpl 1b"
1741                 "lda ARTH"
1742                 "bcc $2"
1743                                 | %[1] | |
1744 inn zne $1==2   | R16 |
1745                 "txa"
1746                 "tay"
1747                 "jsr Pop"
1748                 "stx ARTH"
1749                 "1: lsr a"
1750                 "ror ARTH"
1751                 "dey"
1752                 "bpl 1b"
1753                 "bcs $2"
1754                                 | %[1] | |
1755 inn $1<=256     | R16 |
1756                 "ldy #$1-1"
1757                 "jsr Inn"
1758                                         | %[1] | |
1759 inn ND  | R16 |
1760                 "jsr TestFFh"
1761                 "jsr Pop"
1762                 "jsr Inn"
1763                                         | %[1] | |
1764 loc set $2==2 && $1>=0 && $1<16 | |
1765                 allocate(R16)
1766                 "ldy #$1"
1767                 "lda #0"
1768                 "sta ARTH"
1769                 "sec"
1770                 "1: rol ARTH"
1771                 "rol a"
1772                 "dey"
1773                 "bpl 1b"
1774                 "ldx ARTH"
1775                                         | %[a] | |
1776 set $1==2       | R16 |
1777                 "txa"
1778                 "tay"
1779                 "lda #0"
1780                 "sta ARTH"
1781                 "sec"
1782                 "1: rol ARTH"
1783                 "rol a"
1784                 "bpl 1b"
1785                 "ldx ARTH"
1786                                         | %[1] | |
1787 set $1<=256     | R16 |
1788                 "ldy #$1-1"
1789                 "jsr Set"
1790                                         | | |
1791 set ND  | R16 |
1792                 "jsr TestFFh"
1793                 "jsr Pop"
1794                 "jsr Set"
1795                                         | | |
1796
1797
1798 /* GROUP 11 - ARRAY */
1799
1800 lae lar defined(rom(1,3)) | | | | lae $1 aar $2 loi rom(1,3) |
1801 lar $1==2       | R16 |
1802                 "jsr Lar"
1803                                         | | |
1804 lar ND  | R16 |
1805                 "jsr Test2"
1806                 "jsr Lar"
1807                                         | | |
1808 lae sar defined(rom(1,3)) | | | | lae $1 aar $2 sti rom(1,3) |
1809 sar $1==2       | R16 |
1810                 "jsr Sar"
1811                                         | | |
1812 sar ND  | R16 |
1813                 "jsr Test2"
1814                 "jsr Sar"
1815                                         | | |
1816 lae aar $2==2 && rom(1,3)==1 && rom(1,1)==0 | | | | adi 2 |
1817 lae aar $2==2 && rom(1,3)==1 && rom(1,1)!=0 | |
1818                                     | | adi 2 adp 0-rom(1,1) |
1819 lae aar $2==2 && rom(1,3)==2 && rom(1,1)==0 | R16 |
1820                 "pha"
1821                 "txa"
1822                 "asl a"
1823                 "tax"
1824                 "pla"
1825                 "rol a"
1826                                         | %[1] | adi 2 |
1827 lae aar $2==2 && rom(1,3)==2 && rom(1,1)!=0 | R16 |
1828                 "pha"
1829                 "txa"
1830                 "asl a"
1831                 "tax"
1832                 "pla"
1833                 "rol a"
1834                                     | %[1] | adi 2 adp (0-rom(1,1))*2 |
1835 lae aar $2==2 && rom(1,3)>2 && rom(1,1)==0 | |
1836                                         | | loc rom(1,3) mli 2 adi 2 |
1837 lae aar $2==2 && rom(1,3)>2 && rom(1,1)!=0 | |
1838                 | | loc rom(1,3) mli 2 adi 2 adp (0-rom(1,1))*rom(1,3) |
1839 aar $1==2       | R16 |
1840                 "jsr Aar"
1841                                         | %[1] | |
1842 aar ND  | R16 |
1843                 "jsr Test2"
1844                 "jsr Aar"
1845                                         | %[1] | |
1846
1847
1848 /* GROUP 12 - COMPARE */
1849
1850 cmi $1==2       | R16 |
1851                 "jsr Cmi"
1852                                         | %[1] | |
1853 cmi $1==4       | |
1854                 allocate(R16)
1855                 "jsr Cmi4"
1856                                         | %[a] | |
1857 cmi ND  | R16 |
1858                 "jsr Test2"
1859                 "jsr Cmi"
1860                                         | %[1] | |
1861 cmu $1==2       | R16 |
1862                 "jsr Cmu2"
1863                                         | %[1] | |
1864 cmu $1==4       | |
1865                 allocate(R16)
1866                 "jsr Cmu4"
1867                                         | %[a] | |
1868 cmu ND  | R16 |
1869                 "jsr Test2"
1870                 "jsr Cmu"
1871                                         | | |
1872 cmp     | |
1873                                         | | cmu 2 |
1874 cms $1==2       | |
1875                 allocate(R16)
1876                 "ldy #2"
1877                 "jsr Cms"
1878                                         | %[a] | |
1879 cms $1==4       | |
1880                 allocate(R16)
1881                 "ldy #4"
1882                 "jsr Cms"
1883                                         | %[a] | |
1884 cms ND  | R16 |
1885                 "jsr TestFFh"
1886                 "iny"
1887                 "jsr Cms"
1888                                         | %[1] | |
1889 tlt     | R16 |
1890                 "jsr Tlt"
1891                                         | %[1] | |
1892 tle     | R16 |
1893                 "jsr Tle"
1894                                         | %[1] | |
1895 teq     | R16 |
1896                 "jsr Teq"
1897                                         | %[1] | |
1898 tne     | R16 |
1899                 "jsr Tne"
1900                                         | %[1] | |
1901 tge     | R16 |
1902                 "jsr Tge"
1903                                         | %[1] | |
1904 tgt     | R16 |
1905                 "jsr Tgt"
1906                                         | %[1] | |
1907
1908
1909 /* GROUP 13 - BRANCH */
1910
1911 bra     | |
1912                 remove(ALL)
1913                 "jmp $1"
1914                                         | | |
1915
1916 blt     | R16 |
1917                 "jsr Sbi2"
1918                 "bmi $1"
1919                                         | | |
1920 ble     | R16 |
1921                 "jsr Sbi2"
1922                 "bmi $1"
1923                 "bne 1f"
1924                 "txa"
1925                 "beq $1\n1:"
1926                                         | | |
1927 beq     | R16 |
1928                 "sta BRANCH+1"
1929                 "stx BRANCH"
1930                 "jsr Pop"
1931                 "cmp BRANCH+1"
1932                 "bne 1f"
1933                 "cpx BRANCH"
1934                 "beq $1\n1:"
1935                                         | | |
1936 bne     | R16 |
1937                 "sta BRANCH+1"
1938                 "stx BRANCH"
1939                 "jsr Pop"
1940                 "cmp BRANCH+1"
1941                 "bne $1"
1942                 "cpx BRANCH"
1943                 "bne $1"
1944                                         | | |
1945 bge     | R16 |
1946                 "jsr Sbi2"
1947                 "bpl $1"
1948                                         | | |
1949 bgt     | R16 |
1950                 "jsr Sbi2"
1951                 "bmi 1f"
1952                 "bne $1"
1953                 "txa"
1954                 "bne $1\n1:"
1955                                         | | |
1956
1957 cmi zlt $1==2 | | | | blt $2 |
1958 cmp zlt | | | | blt $2 |
1959 zlt     | R16 |
1960                 "tay"
1961                 "bmi $1"
1962                                         | | |
1963 cmi zle $1==2 | | | | ble $2 |
1964 cmp zle | | | | ble $2 |
1965 zle     | R16 |
1966                 "tay"
1967                 "bmi $1"
1968                 "bne 1f"
1969                 "txa"
1970                 "beq $1\n1:"
1971                                         | | |
1972 cmi zeq $1==2 | | | | beq $2 |
1973 cmp zeq | | | | beq $2 |
1974 cms zeq $1==2 | | | | beq $2 |
1975 zeq     | R16 |
1976                 "tay"
1977                 "bne 1f"
1978                 "txa"
1979                 "beq $1\n1:"
1980                                         | | |
1981 cmi zne $1==2 | | | | bne $2 |
1982 cmp zne | | | | bne $2 |
1983 cms zne $1==2 | | | | bne $2 |
1984 zne     | R16 |
1985                 "tay"
1986                 "bne $1"
1987                 "txa"
1988                 "bne $1"
1989                                         | | |
1990 cmi zge $1==2 | | | | bge $2 |
1991 cmp zge | | | | bge $2 |
1992 zge     | R16 |
1993                 "tay"
1994                 "bpl $1"
1995                                         | | |
1996 cmi zgt $1==2 | | | | bgt $2 |
1997 cmp zgt | | | | bgt $2 |
1998 zgt     | R16 |
1999                 "tay"
2000                 "bmi 1f"
2001                 "bne $1"
2002                 "txa"
2003                 "bne $1\n1:"
2004                                         | | |
2005
2006
2007 /* GROUP 14 - PROCEDURE CALL */
2008
2009 cai     | R16 |
2010                 "stx ADDR"
2011                 "sta ADDR+1"
2012                 "jsr Indir"
2013                                         | | |
2014 cal     | |
2015                 remove(ALL)
2016                 "jsr $1"
2017                                         | | |
2018 lfr $1==2 | |
2019                 allocate(R16)
2020                 "lda #0"
2021                 "ldx #RETURN"
2022                 "jsr Loi"
2023                                         | %[a] | |
2024 lfr $1==4 | |
2025                 allocate(R16)
2026                 "lda #0"
2027                 "ldx #RETURN"
2028                 "jsr Ldi"
2029                                         | | |
2030 lfr ret $1==$2  | | | | ret 0 |
2031 asp lfr ret $2==$3 | | | | ret 0 |
2032 ret $1==0 || $1==2 || $1==4     | |
2033                 allocate(R16)
2034                 "ldy #$1"
2035                 "jmp Ret"
2036                                         | | |
2037
2038
2039 /* GROUP 15 - MISCELLANOUS */
2040
2041 asp     | |
2042                 allocate(R16)
2043                 "lda #[$1].h"
2044                 "ldx #[$1].l"
2045                 "jsr Asp"
2046                                         | | |
2047 ass $1==2       | R16 |
2048                 "jsr Asp"
2049                                         | | |
2050 ass ND  | R16 |
2051                 "jsr Test2"
2052                 "jsr Pop"
2053                 "jsr Asp"
2054                                         | | |
2055 blm $1==0       | | | | asp 4 |
2056 blm D   | R16 |
2057                 "ldy #[[$1].h+1]"
2058                 "sty NBYTES+1"
2059                 "ldy #[$1].l"
2060                 "jsr Blm"
2061                                         | | |
2062 bls $1==2       | R16 |
2063                 "sta NBYTES+1"
2064                 "inc NBYTES+1"
2065                 "txa"
2066                 "tay"
2067                 "jsr Pop"
2068                 "jsr Blm"
2069                                         | | |
2070 bls ND  | R16 |
2071                 "jsr Test2"
2072                 "sta NBYTES+1"
2073                 "inc NBYTES+1"
2074                 "txa"
2075                 "tay"
2076                 "jsr Pop"
2077                 "jsr Blm"
2078                                         | | |
2079 csa     | R16 |
2080                 "jmp Csa"
2081                                         | | |
2082 csb     | R16 |
2083                 "jmp Csb"
2084                                         | | |
2085 dch     | | | | loi 2 |
2086 dup $1==2       | R16 |
2087                 "jsr Push"
2088                                         | %[1] | |
2089 dup $1<=256     | |
2090                 allocate(R16)
2091                 "ldy #[$1].l"
2092                 "jsr Dup"
2093                                         | | |
2094 dus $1==2       | R16 |
2095                 "jsr TestFFh"
2096                 "iny"
2097                 "jsr Dup"
2098                                         | | |
2099 exg $1==2       | R16 |
2100                 "jsr Exg2"
2101                                         | %[1] | |
2102 exg $1<=255     | |
2103                 allocate(R16)
2104                 "ldy #$1"
2105                 "jsr Exg"
2106                                         | | |
2107 fil     | |
2108                 "ldy #[$1].l"
2109                 "sty hol0+4"
2110                 "ldy #[$1].h"
2111                 "sty hol0+5"
2112                                         | | |
2113 gto     | |
2114                 allocate(R16)
2115                 "lda #[$1].h"
2116                 "ldx #[$1].l"
2117                 "jmp Gto"
2118                                         | | |
2119 lim     | |
2120                 allocate(R16)
2121                 "ldx IGNMASK"
2122                 "lda IGNMASK+1"
2123                                         | %[a] | |
2124 lin     | |
2125                 "ldy #[$1].l"
2126                 "sty hol0"
2127                 "ldy #[$1].h"
2128                 "sty hol0+1"
2129                                         | | |
2130 lni     | |
2131                 "inc hol0"
2132                 "bne 1f"
2133                 "inc hol0+1\n1:"
2134                                         | | |
2135 lor $1==0       | |
2136                 allocate(R16)
2137                 "ldx LB"
2138                 "lda LB+1"
2139                                         | %[a] | |
2140 lor $1==1       | |
2141                 allocate(R16)
2142                 "ldx SP+2"
2143                 "lda SP+1"
2144                                         | %[a] | |
2145 lor $1==2       | |
2146                 allocate(R16)
2147                 "ldx HP"
2148                 "lda HP+1"
2149                                         | %[a] | |
2150 lpb     | | | | adp 2 |
2151 mon     | R16 |
2152                 "jsr Mon"
2153                                         | %[1] | |
2154 nop     | STACK |
2155 #ifdef DEBUG
2156                 allocate(R16)
2157                 "jsr Printstack"
2158 #endif
2159                                         | | |
2160 rck     | R16 | | | |
2161 rtt     | |
2162                 remove(ALL)
2163                 "jmp Rtt"
2164                                         | | |
2165 sig     | R16 |
2166                 "pha"
2167                 "txa"
2168                 "pha"
2169                 "ldx ERRPROC"
2170                 "lda ERRPROC+1"
2171                 "jsr Push"
2172                 "pla"
2173                 "sta ERRPROC"
2174                 "pla"
2175                 "sta ERRPROC+1"
2176                                         | | |
2177 sim     | R16 |
2178                 "stx IGNMASK"
2179                 "sta IGNMASK+1"
2180                                         | | |
2181 str $1==0       | R16 |
2182                 "stx LB"
2183                 "sta LB+1"
2184                 "tay"
2185                 "sec"
2186                 "txa"
2187                 "sbc #BASE"
2188                 "sta LBl"
2189                 "tya"
2190                 "sbc #0"
2191                 "sta LBl+1"
2192                                         | | |
2193 str $1==1       | R16 |
2194                 "stx SP+2"
2195                 "sta SP+1"
2196                                         | | |
2197 str $1==2       | R16 |
2198                 "stx HP"
2199                 "sta HP+1"
2200                                         | | |
2201 trp     | R16 |
2202                 "jsr Trap"
2203                                         | | |
2204 lol lal sti $1==$2 && $3==1 | | | | | /* throw away funny C-proc-prolog */
2205
2206         | STACK |
2207                 allocate(R16)
2208                 "jsr Pop"
2209                                         | %[a] | |
2210
2211 /* FLOATING POINT
2212  * Every EM floating point instruction is translated
2213  * into a library call. At present, these library
2214  * routines generate an 'Illegal EM instruction' trap.
2215  */
2216
2217
2218 adf $1==4       | STACK |
2219                 "jsr Adf4"
2220                                         | | |
2221 adf $1==8       | STACK |
2222                 "jsr Adf8"              | | |
2223
2224 sbf $1==4       | STACK |
2225                 "jsr Sbf4"
2226                                         | | |
2227 sbf $1==8       | STACK |
2228                 "jsr Sbf8"              | | |
2229
2230 mlf $1==4       | STACK |
2231                 "jsr Mlf4"
2232                                         | | |
2233 mlf $1==8       | STACK |
2234                 "jsr Mlf8"              | | |
2235
2236 dvf $1==4       | STACK |
2237                 "jsr Dvf4"
2238                                         | | |
2239 dvf $1==8       | STACK |
2240                 "jsr Dvf8"              | | |
2241
2242 ngf $1==4       | STACK |
2243                 "jsr Ngf4"
2244                                         | | |
2245 ngf $1==8       | STACK |
2246                 "jsr Ngf8"              | | |
2247
2248 zrf $1==4       | STACK |
2249                 "jsr Zrf4"
2250                                         | | |
2251 zrf $1==8       | STACK |
2252                 "jsr Zrf8"              | | |
2253
2254 cmf $1==4       | STACK |
2255                 "jsr Cmf4"
2256                                         | | |
2257 cmf $1==8       | STACK |
2258                 "jsr Cmf8"              | | |
2259
2260 fef $1==4       | STACK |
2261                 "jsr Fef4"
2262                                         | | |
2263 fef $1==8       | STACK |
2264                 "jsr Fef8"              | | |
2265
2266 fif $1==4       | STACK |
2267                 "jsr Fif4"
2268                                         | | |
2269 fif $1==8       | STACK |
2270                 "jsr Fif8"              | | |
2271
2272 cfi             | STACK |
2273                 "jsr Cfi"               | | |
2274
2275 cif             | STACK |
2276                 "jsr Cif"               | | |
2277
2278 cuf             | STACK |
2279                 "jsr Cuf"               | | |
2280
2281 cff             | STACK |
2282                 "jsr Cff"               | | |
2283
2284 cfu             | STACK |
2285                 "jsr Cfu"               | | |
2286
2287 lfr $1==8       | STACK |
2288                 "jsr Lfr8"              | | |
2289
2290 ret $1==8       | STACK |
2291                 "jmp Ret8"              | | |
2292
2293 /*************\
2294 *  M O V E S  *
2295 \*************/
2296
2297 MOVES:  (AAA,AAA,"nop")
2298
2299 STACKS:  (R16, , "jsr Push")