Initial revision
authorsater <none@none>
Fri, 13 Jul 1984 11:12:23 +0000 (11:12 +0000)
committersater <none@none>
Fri, 13 Jul 1984 11:12:23 +0000 (11:12 +0000)
mach/6500/cg/mach.c [new file with mode: 0644]
mach/6500/cg/mach.h [new file with mode: 0644]
mach/6500/cg/table [new file with mode: 0644]

diff --git a/mach/6500/cg/mach.c b/mach/6500/cg/mach.c
new file mode 100644 (file)
index 0000000..f57dadb
--- /dev/null
@@ -0,0 +1,72 @@
+con_part(sz,w) register sz; word w; {
+
+       while (part_size % sz)
+               part_size++;
+       if (part_size == EM_WSIZE)
+               part_flush();
+       if (sz == 1) {
+               w &= 0xFF;
+               if (part_size)
+                       w <<= 8;
+               part_word |= w;
+       } else {
+               assert(sz == 2);
+               part_word = w;
+       }
+       part_size += sz;
+}
+
+con_mult(sz) word sz; {
+       long l;
+
+       if (sz != 4)
+               fatal("bad icon/ucon size");
+       l = atol(str);
+       fprintf(codefile,".short\t%d\n",(int) l);
+       fprintf(codefile,".short\t%d\n",(int) (l >> 16));
+}
+
+con_float() {
+       fatal("no reals");
+}
+
+
+prolog(nlocals) full nlocals; {
+
+       fprintf(codefile,"\tjsr Pro\n");
+       if (nlocals == 0)
+               return;
+       else
+               fprintf(codefile,
+       "\tldx #[%d].h\n\tlda #[%d].l\n\tjsr Lcs\n",
+                                       nlocals, nlocals);
+}
+
+mes(type) word type; {
+       int argt ;
+
+       switch ( (int)type ) {
+       case ms_ext :
+               for (;;) {
+                       switch ( argt=getarg(
+                           ptyp(sp_cend)|ptyp(sp_pnam)|sym_ptyp) ) {
+                       case sp_cend :
+                               return ;
+                       default:
+                               strarg(argt) ;
+                               fprintf(codefile,".define %s\n",argstr) ;
+                               break ;
+                       }
+               }
+       default :
+               while ( getarg(any_ptyp) != sp_cend ) ;
+               break ;
+       }
+}
+
+char    *segname[] = {
+       ".text",        /* SEGTXT */
+       ".data",        /* SEGCON */
+       ".data",        /* SEGROM */
+       ".bss"          /* SEGBSS */
+};
diff --git a/mach/6500/cg/mach.h b/mach/6500/cg/mach.h
new file mode 100644 (file)
index 0000000..47f0355
--- /dev/null
@@ -0,0 +1,24 @@
+#define ex_ap(y)        fprintf(codefile,".extern %s\n",y)
+#define in_ap(y)        /* nothing */
+
+#define newilb(x)       fprintf(codefile,"%s:\n",x)
+#define newdlb(x)       fprintf(codefile,"%s:\n",x)
+#define dlbdlb(x,y)     fprintf(codefile,"%s = %s\n",x,y)
+#define newlbss(l,x)    fprintf(codefile,"%s: .space\t%d\n",l,x);
+
+#define cst_fmt         "%d"
+#define off_fmt         "%d"
+#define ilb_fmt         "I%02x%x"
+#define dlb_fmt         "_%d"
+#define hol_fmt         "hol%d"
+
+#define hol_off         "%d+hol%d"
+
+#define con_cst(x)      fprintf(codefile,".word\t%d\n",x)
+#define con_ilb(x)      fprintf(codefile,".word\t%s\n",x)
+#define con_dlb(x)      fprintf(codefile,".word\t%s\n",x)
+
+#define modhead         ""
+
+#define id_first        '_'
+#define BSS_INIT        0
diff --git a/mach/6500/cg/table b/mach/6500/cg/table
new file mode 100644 (file)
index 0000000..0c7f686
--- /dev/null
@@ -0,0 +1,2212 @@
+#define em_bsize       2       /* must be equal to EM_BSIZE */
+#define        ND      !defined($1)
+#define        D       defined($1)
+#define        BASE    240
+#define MIN    (0-BASE)
+#define MAX    (254-em_bsize-BASE)
+#define IN(x)  (x>=MIN && x<=MAX)
+#define IND(x) (x>=MIN && x<=(MAX-2))
+
+/*****************************************************\
+****                                              ****
+****     6 5 0 0   B A C K   E N D   T A B L E    ****
+****                                              ****
+\*****************************************************/
+
+
+/*
+ *   INTEGER SIZE:   16 bits
+ *   POINTER SIZE:   16 bits
+ *   NO FLOATS
+ */
+
+
+EM_WSIZE = 2
+EM_PSIZE = 2
+EM_BSIZE = 2
+
+
+
+/*********************\
+*  R E G I S T E R S  *
+\*********************/
+
+REGISTERS:
+AA = ("a",1), REG.
+XX = ("x",1), REG.
+AX = ("<dummy>",2,AA,XX), R16.
+
+/* AX is a registerpair, A contains the highbyte of a word and
+ * X contains the lowbyte
+ */
+
+
+/***************\
+*  T O K E N S  *
+\***************/
+
+TOKENS:
+IMMEDIATE      = {INT off;} 1  "#%[off]" /* a fake token the
+                                          * cgg needs one
+                                          */
+
+
+
+/***********************************\
+*  T O K E N E X P R E S S I O N S  *
+\***********************************/
+
+TOKENEXPRESSIONS:
+AAA = IMMEDIATE                /* a fake tokenexpression
+                        * the cgg needs one
+                        */
+
+
+/***********\
+*  C O D E  *
+\***********/
+
+CODE:
+
+/* GROUP 1 - LOAD */
+
+loc ($1%256)==($1/256) | |
+               allocate(R16)
+               "lda #[$1].l"
+               "tax"
+                                       | %[a] | |
+loc     | |
+               allocate(R16)
+               "lda #[$1].h"
+               "ldx #[$1].l"
+                                       | %[a] | |
+ldc highw(1)==loww(1) && (loww(1)%256)==(loww(1)/256) | |
+               allocate(R16)
+               "lda #[%(loww(1)%)].l"
+               "tax"
+               "jsr Push"
+                                       | %[a] | |
+ldc     | |
+               allocate(R16)
+               "lda #[%(highw(1)%)].h"
+               "ldx #[%(highw(1)%)].l"
+               "jsr Push"
+               "lda #[%(loww(1)%)].h"
+               "ldx #[%(loww(1)%)].l"
+                                       | %[a] | |
+lol IN($1)     | |
+               allocate(R16)
+               "ldy #BASE+$1"
+               "lda (LBl),y"
+               "tax"
+               "iny"
+               "lda (LBl),y"
+                                       | %[a] | |
+lol    | |
+               allocate(R16)
+               "lda #[$1].h"
+               "ldx #[$1].l"
+               "jsr Lol"
+                                       | %[a] | |
+loe    | |
+               allocate(R16)
+               "lda $1+1"
+               "ldx $1"
+                                       | %[a] | |
+lil IN($1)     | |
+               allocate(R16)
+               "ldy #BASE+$1"
+               "lda (LBl),y"
+               "tax"
+               "iny"
+               "lda (LBl),y"
+               "jsr Loi"
+                                       | %[a] | |
+lil    | |
+               allocate(R16)
+               "lda #[$1].h"
+               "ldx #[$1].l"
+               "jsr Lol"
+               "jsr Loi"
+                                       | %[a] | |
+lof $1==0      | R16 |
+               "jsr Loi"
+                                       | %[1] | |
+lof    | |
+               allocate(R16)
+               "lda #[$1].h"
+               "ldx #[$1].l"
+               "jsr Adi2"
+               "jsr Loi"
+                                       | %[a] | |
+lal    | |
+               allocate(R16)
+               "clc"
+               "lda #[$1].l"
+               "adc LB"
+               "tax"
+               "lda #[$1].h"
+               "adc LB+1"
+                                       | %[a] | |
+lae    | |
+               allocate(R16)
+               "lda #[$1].h"
+               "ldx #[$1].l"
+                                       | %[a] | |
+lxl $1==0      | |
+               allocate(R16)
+               "lda LB+1"
+               "ldx LB"
+                                       | %[a] | |
+lxl $1<=255    | |             /* n restricted to a max of 255 */
+               allocate(R16)
+               "ldx #[$1].l"
+               "jsr Lxl"
+                                       | %[a] | |
+lxa $1==0      | |
+               allocate(R16)
+               "jsr Lxa1"
+                                       | %[a] | |
+lxa $1<=255    | |             /* n restricted to a max of 255 */
+               allocate(R16)
+               "ldx #[$1].l"
+               "jsr Lxa2"
+                                       | %[a] | |
+loi $1==1      | R16 |
+               "jsr Loi1"
+                                       | %[1] | |
+loi $1==2      | R16 |
+               "jsr Loi"
+                                       | %[1] | |
+loi $1==4      | R16 |
+               "jsr Ldi"
+                                       | | |
+loi D          | R16 |
+               "ldy #[$1].h"
+               "sty NBYTES+1"
+               "ldy #[$1].l"
+               "jsr Loil"
+                                       | | |
+los $1==2      | R16 |
+               "jsr Los"
+                                       | | |
+ldl IND($1)    | |
+               allocate(R16)
+               "ldy #BASE+$1+3"
+               "lda (LBl),y"
+               "pha"
+               "dey"
+               "lda (LBl),y"
+               "tax"
+               "pla"
+               "jsr Push"
+               "dey"
+               "lda (LBl),y"
+               "pha"
+               "dey"
+               "lda (LBl),y"
+               "tax"
+               "pla"
+                                       | %[a] | |
+ldl    | |
+               allocate(R16)
+               "lda #[$1].h"
+               "ldx #[$1].l"
+               "jsr Locaddr"
+               "jsr Ldo"
+                                       | | |
+lde    | |
+               allocate(R16)
+               "lda $1+3"
+               "ldx $1+2"
+               "jsr Push"
+               "lda $1+1"
+               "ldx $1"
+                                       | %[a] | |
+ldf $1==0      | R16 |
+               "jsr Ldi"
+                                       | | |
+ldf    | |
+               allocate(R16)
+               "lda #[$1].h"
+               "ldx #[$1].l"
+               "jsr Adi2"
+               "jsr Ldi"
+                                       | | |
+lpi    | |
+               allocate(R16)
+               "lda #[$1].h"
+               "ldx #[$1].l"
+                                       | %[a] | |
+
+
+/* GROUP 2 - STORE */
+
+stl IN($1)     | R16 |
+               "ldy #BASE+1+$1"
+               "sta (LBl),y"
+               "txa"
+               "dey"
+               "sta (LBl),y"
+                                       | | |
+stl    | |
+               allocate(R16)
+               "lda #[$1].h"
+               "ldx #[$1].l"
+               "jsr Stl"
+                                       | | |
+ste    | R16 |
+               "sta $1+1"
+               "stx $1"
+                                       | | |
+sil IN($1)     | |
+               allocate(R16)
+               "ldy #BASE+$1"
+               "lda (LBl),y"
+               "tax"
+               "iny"
+               "lda (LBl),y"
+               "jsr Sti"
+                                       | | |
+sil    | |
+               allocate(R16)
+               "lda #[$1].h"
+               "ldx #[$1].l"
+               "jsr Lol"
+               "jsr Sti"
+                                       | | |
+stf $1==0      | R16 |
+               "jsr Sti"
+                                       | | |
+stf    | |
+               allocate(R16)
+               "lda #[$1].h"
+               "ldx #[$1].l"
+               "jsr Adi2"
+               "jsr Sti"
+                                       | | |
+sti $1==1      | R16 |
+               "jsr Sti1"
+                                       | | |
+sti $1==2      | R16 |
+               "jsr Sti"
+                                       | | |
+sti $1==4      | R16 |
+               "jsr Sdi"
+                                       | | |
+sti D  | R16 |
+               "ldy #[$1].h"
+               "sty NBYTES+1"
+               "ldy #[$1].l"
+               "jsr Stil"
+                                       | | |
+sts $1==2      | R16 |
+               "jsr Sts"
+                                       | | |
+sdl IND($1)    | R16 |
+               "ldy #BASE+$1"
+               "pha"
+               "txa"
+               "sta (LBl),y"
+               "iny"
+               "pla"
+               "sta (LBl),y"
+               "jsr Pop"
+               "iny"
+               "pha"
+               "txa"
+               "sta (LBl),y"
+               "iny"
+               "pla"
+               "sta (LBl),y"
+                                       | | |
+sdl    | |
+               allocate(R16)
+               "lda #[$1].h"
+               "ldx #[$1].l"
+               "jsr Locaddr"
+               "jsr Sdo"
+                                       | | |
+sde    | R16 |
+               "sta $1+1"
+               "stx $1"
+               "jsr Pop"
+               "sta $1+3"
+               "stx $1+2"
+                                       | | |
+sdf $1==0      | R16 |
+               "jsr Sdi"
+                                       | | |
+sdf    | |
+               allocate(R16)
+               "lda #[$1].h"
+               "ldx #[$1].l"
+               "jsr Adi2"
+               "jsr Sdi"
+                                       | | |
+
+
+/* GROUP 3 - INTEGER ARITHMETIC */
+
+loc lol adi (IN($2) && $3==2)  | |
+               allocate(R16)
+               "ldy #BASE+$2"
+               "clc"
+               "lda #[$1].l"
+               "adc (LBl),y"
+               "tax"
+               "iny"
+               "lda #[$1].h"
+               "adc (LBl),y"
+                                       | %[a] | |
+lol loc adi    | | | | loc $2 lol $1 adi $3 |
+lol lol adi (IN($1) && IN($2) && $3==2) | |
+               allocate(R16)
+               "ldy #BASE+$1+1"
+               "lda (LBl),y"
+               "pha"
+               "dey"
+               "lda (LBl),y"
+               "ldy #BASE+$2"
+               "clc"
+               "adc (LBl),y"
+               "tax"
+               "iny"
+               "pla"
+               "adc (LBl),y"
+                                       | %[a] | |
+lol loe adi (IN($1) && $3==2) | |
+               allocate(R16)
+               "ldy #BASE+$1"
+               "clc"
+               "lda (LBl),y"
+               "adc $2"
+               "tax"
+               "iny"
+               "lda (LBl),y"
+               "adc $2+1"
+                                       | %[a] | |
+loe lol adi    | | | | lol $2 loe $1 adi $3 |
+loe loe adi $3==2      | |
+               allocate(R16)
+               "clc"
+               "lda $1"
+               "adc $2"
+               "tax"
+               "lda $1+1"
+               "adc $2+1"
+                                       | %[a] | |
+loc loe adi $3==2      | |
+               allocate(R16)
+               "clc"
+               "lda #[$1].l"
+               "adc $2"
+               "tax"
+               "lda #[$1].h"
+               "adc $2+1"
+                                       | %[a] | |
+loe loc adi    | | | | loc $2 loe $1 adi $3 |
+ldl adi IND($1) && $2==2       | |
+               allocate(R16)
+               "ldy #BASE+$1"
+               "clc"
+               "lda (LBl),y"
+               "iny"
+               "iny"
+               "adc (LBl),y"
+               "tax"
+               "dey"
+               "lda (LBl),y"
+               "iny"
+               "iny"
+               "adc (LBl),y"
+                                       | %[a] | |
+lde adi $2==2  | |
+               allocate(R16)
+               "clc"
+               "lda $1"
+               "adc $1+2"
+               "tax"
+               "lda $1+1"
+               "adc $1+3"
+                                       | %[a] | |
+loc adi $2==2 | R16 |
+               "pha"
+               "txa"
+               "clc"
+               "adc #[$1].l"
+               "tax"
+               "pla"
+               "adc #[$1].h"
+                                       | %[1] | |
+lol adi IN($1) && $2==2 | R16 |
+               "pha"
+               "ldy #BASE+$1"
+               "clc"
+               "txa"
+               "adc (LBl),y"
+               "tax"
+               "iny"
+               "pla"
+               "adc (LBl),y"
+                                       | %[1] | |
+loe adi $2==2  | R16 |
+               "pha"
+               "clc"
+               "txa"
+               "adc $1"
+               "tax"
+               "pla"
+               "adc $1+1"
+                                       | %[1] | |
+lol lol adi IN($1) && !IN($2) && $3==2
+               | | | | lol $2 lol $1 adi $3 |
+adi $1==2      | R16 |
+               "jsr Adi2"
+                                       | %[1] | |
+adi $1==4      | |
+               allocate(R16)
+               "jsr Adi4"
+                                       | | |
+adi ND | R16 |
+               "jsr Test2"
+               "jsr Adi2"
+                                       | %[1] | |
+loc lol sbi (IN($2) && $3==2)  | |
+               allocate(R16)
+               "ldy #BASE+$1"
+               "sec"
+               "lda #[$1].l"
+               "sbc (LBl),y"
+               "tax"
+               "iny"
+               "lda #[$1].h"
+               "sbc (LBl),y"
+                                       | %[a] | |
+lol loc sbi    | | | | lol $1 loc 0-$2 adi $3 |
+lol lol sbi (IN($1) && IN($2) && $3==2) | |
+               allocate(R16)
+               "ldy #BASE+$1+1"
+               "lda (LBl),y"
+               "pha"
+               "dey"
+               "lda (LBl),y"
+               "ldy #BASE+$2"
+               "sec"
+               "sbc (LBl),y"
+               "tax"
+               "iny"
+               "pla"
+               "sbc (LBl),y"
+                                       | %[a] | |
+lol loe sbi (IN($1) && $3==2) | |
+               allocate(R16)
+               "ldy #BASE+$1"
+               "sec"
+               "lda (LBl),y"
+               "sbc $2"
+               "tax"
+               "iny"
+               "lda (LBl),y"
+               "sbc $2+1"
+                                       | %[a] | |
+loe lol sbi (IN($2) && $3==2) | |
+               allocate(R16)
+               "ldy #BASE+$1"
+               "sec"
+               "lda $2"
+               "sbc (LBl),y"
+               "tax"
+               "iny"
+               "lda $2+1"
+               "sbc (LBl),y"
+                                       | %[a] | |
+loe loe sbi $3==2      | |
+               allocate(R16)
+               "sec"
+               "lda $1"
+               "sbc $2"
+               "tax"
+               "lda $1+1"
+               "sbc $2+1"
+                                       | %[a] | |
+loc loe sbi $3==2      | |
+               allocate(R16)
+               "sec"
+               "lda #[$1].l"
+               "sbc $2"
+               "tax"
+               "lda #[$1].h"
+               "sbc $2+1"
+                                       | %[a] | |
+loe loc sbi    | | | | loe $1 loc 0-$2 adi $3 |
+ldl sbi IND($1) && $2==2       | |
+               allocate(R16)
+               "ldy #BASE+$1+2"
+               "sec"
+               "lda (LBl),y"
+               "dey"
+               "dey"
+               "sbc (LBl),y"
+               "tax"
+               "ldy #BASE+$1+3"
+               "lda (LBl),y"
+               "dey"
+               "dey"
+               "sbc (LBl),y"
+                                       | %[a] | |
+lde sbi $2==2  | |
+               allocate(R16)
+               "sec"
+               "lda $1+2"
+               "sbc $1"
+               "tax"
+               "lda $1+3"
+               "sbc $1"
+                                       | %[a] | |
+loc sbi $2==2  | R16 |
+               "pha"
+               "txa"
+               "sec"
+               "sbc #[$1].l"
+               "tax"
+               "pla"
+               "sbc #[$1].h"
+                                       | %[1] | |
+lol sbi IN($1) && $2==2 | R16 |
+               "pha"
+               "ldy #BASE+$1"
+               "sec"
+               "txa"
+               "sbc (LBl),y"
+               "tax"
+               "iny"
+               "pla"
+               "sbc #[$1].h"
+                                       | %[1] | |
+loe sbi $2==2 | R16 |
+               "pha"
+               "sec"
+               "txa"
+               "sbc $1"
+               "tax"
+               "pla"
+               "sbc $1+1"
+                                       | %[1] | |
+sbi $1==2      | R16 |
+               "jsr Sbi2"
+                                       | %[1] | |
+sbi $1==4      | |
+               allocate(R16)
+               "jsr Sbi4"
+                                       | | |
+sbi ND | R16 |
+               "jsr Test2"
+               "jsr Sbi2"
+                                       | %[1] | |
+loc lol mli (IN($2) && $3==2)  | |
+               allocate(R16)
+               "lda #[$1].l"
+               "sta ARTH"
+               "lda #[$1].h"
+               "sta ARTH+1"
+               "ldy #BASE+$2"
+               "lda (LBl),y"
+               "sta ARTH+2"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+3"
+               "jsr Mlinp"
+                                       | %[a] | |
+lol loc mli    | | | | loc $2 lol $1 mli $3 |
+lol lol mli (IN($1) && IN($2) && $3==2) | |
+               allocate(R16)
+               "ldy #BASE+$1"
+               "lda (LBl),y"
+               "sta ARTH"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+1"
+               "ldy #BASE+$2"
+               "lda (LBl),y"
+               "sta ARTH+2"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+3"
+               "jsr Mlinp"
+                                       | %[a] | |
+lol loe mli (IN($1) && $3==2) | |
+               allocate(R16)
+               "ldy #BASE+$1"
+               "lda (LBl),y"
+               "sta ARTH"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+1"
+               "lda $2"
+               "sta ARTH+2"
+               "lda $2+1"
+               "sta ARTH+3"
+               "jsr Mlinp"
+                                       | %[a] | |
+loe lol mli (IN($2) && $3==2) | | | | lol $2 loe $1 mli $3 |
+loe loe mli $3==2      | |
+               allocate(R16)
+               "lda $1"
+               "sta ARTH"
+               "lda $1+1"
+               "sta ARTH+1"
+               "lda $2"
+               "sta ARTH+2"
+               "lda $2+1"
+               "sta ARTH+3"
+               "jsr Mlinp"
+                                       | %[a] | |
+loc loe mli $3==2      | |
+               allocate(R16)
+               "lda #[$1].l"
+               "sta ARTH"
+               "lda #[$1].h"
+               "sta ARTH+1"
+               "lda $2"
+               "sta ARTH+2"
+               "lda $2+1"
+               "sta ARTH+3"
+               "jsr Mlinp"
+                                       | %[a] | |
+loe loc mli    | | | | loc $2 loe $1 mli $3 |
+ldl mli IND($1) && $2==2       | |
+               allocate(R16)
+               "ldy #BASE+$1"
+               "lda (LBl),y"
+               "sta ARTH"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+1"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+2"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+3"
+               "jsr Mlinp"
+                                       | %[a] | |
+lde mli $2==2  | |
+               allocate(R16)
+               "lda $1"
+               "sta ARTH"
+               "lda $1+1"
+               "sta ARTH+1"
+               "lda $1+2"
+               "sta ARTH+2"
+               "lda $1+3"
+               "sta ARTH+3"
+               "jsr Mlinp"
+                                       | %[a] | |
+loc mli $2==2 | R16 |
+               "stx ARTH"
+               "sta ARTH+1"
+               "lda #[$1].l"
+               "sta ARTH+2"
+               "lda #[$1].h"
+               "sta ARTH+3"
+               "jsr Mlinp"
+                                       | %[1] | |
+lol mli IN($1) && $2==2 | R16 |
+               "stx ARTH"
+               "sta ARTH+1"
+               "ldy #BASE+$1"
+               "lda (LBl),y"
+               "sta ARTH+2"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+3"
+               "jsr Mlinp"
+                                       | %[1] | |
+loe mli $2==2  | R16 |
+               "stx ARTH"
+               "sta ARTH+1"
+               "lda $1"
+               "sta ARTH+2"
+               "lda $1+1"
+               "sta ARTH+3"
+               "jsr Mlinp"
+                                       | %[1] | |
+lol lol mli IN($1) && !IN($2) && $3==2
+               | | | | lol $2 lol $1 mli $3 |
+mli $1==2      | R16 |
+               "jsr Mli2"
+                                       | %[1] | |
+mli $1==4      | |
+               allocate(R16)
+               "jsr Mli4"
+                                       | | |
+mli ND | R16 |
+               "jsr Test2"
+               "jsr Mli2"
+                                       | %[1] | |
+loc lol dvi (IN($2) && $3==2)  | |
+               allocate(R16)
+               "ldy #BASE+$2"
+               "lda (LBl),y"
+               "sta ARTH"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+1"
+               "lda #[$1].l"
+               "sta ARTH+2"
+               "lda #[$1].h"
+               "sta ARTH+3"
+               "ldy #1"
+               "sty UNSIGN"
+               "jsr Div"
+                                       | %[a] | |
+lol loc dvi (IN($1) && $3==2)  | |
+               allocate(R16)
+               "lda #[$2].l"
+               "sta ARTH"
+               "lda #[$2].h"
+               "sta ARTH+1"
+               "ldy #BASE+$1"
+               "lda (LBl),y"
+               "sta ARTH+2"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+3"
+               "ldy #1"
+               "sty UNSIGN"
+               "jsr Div"
+                                       | %[a] | |
+lol lol dvi (IN($1) && IN($2) && $3==2) | |
+               allocate(R16)
+               "ldy #BASE+$2"
+               "lda (LBl),y"
+               "sta ARTH"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+1"
+               "ldy #BASE+$1"
+               "lda (LBl),y"
+               "sta ARTH+2"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+3"
+               "ldy #1"
+               "sty UNSIGN"
+               "jsr Div"
+                                       | %[a] | |
+lol loe dvi (IN($1) && $3==2) | |
+               allocate(R16)
+               "ldy #BASE+$1"
+               "lda (LBl),y"
+               "sta ARTH+2"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+3"
+               "lda $2"
+               "sta ARTH"
+               "lda $2+1"
+               "sta ARTH+1"
+               "ldy #1"
+               "sty UNSIGN"
+               "jsr Div"
+                                       | %[a] | |
+loe lol dvi (IN($2) && $3==2) | |
+               allocate(R16)
+               "ldy #BASE+$2"
+               "lda (LBl),y"
+               "sta ARTH"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+1"
+               "lda $2"
+               "sta ARTH+2"
+               "lda $2+1"
+               "sta ARTH+3"
+               "ldy #1"
+               "sty UNSIGN"
+               "jsr Div"
+                                       | %[a] | |
+loe loe dvi $3==2      | |
+               allocate(R16)
+               "lda $2"
+               "sta ARTH"
+               "lda $2+1"
+               "sta ARTH+1"
+               "lda $1"
+               "sta ARTH+2"
+               "lda $1+1"
+               "sta ARTH+3"
+               "ldy #1"
+               "sty UNSIGN"
+               "jsr Div"
+                                       | %[a] | |
+loc loe dvi $3==2      | |
+               allocate(R16)
+               "lda #[$1].l"
+               "sta ARTH+2"
+               "lda #[$1].h"
+               "sta ARTH+3"
+               "lda $2"
+               "sta ARTH"
+               "lda $2+1"
+               "sta ARTH+1"
+               "ldy #1"
+               "sty UNSIGN"
+               "jsr Div"
+                                       | %[a] | |
+loe loc dvi $3==2      | |
+               allocate(R16)
+               "lda #[$2].l"
+               "sta ARTH"
+               "lda #[$2].h"
+               "sta ARTH+1"
+               "lda $1"
+               "sta ARTH+2"
+               "lda $1+1"
+               "sta ARTH+3"
+               "ldy #1"
+               "sty UNSIGN"
+               "jsr Div"
+                                       | %[a] | |
+ldl dvi IND($1) && $2==2       | |
+               allocate(R16)
+               "ldy #BASE+$1"
+               "lda (LBl),y"
+               "sta ARTH"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+1"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+2"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+3"
+               "ldy #1"
+               "sty UNSIGN"
+               "jsr Div"
+                                       | %[a] | |
+lde dvi $2==2  | |
+               allocate(R16)
+               "lda $1"
+               "sta ARTH"
+               "lda $1+1"
+               "sta ARTH+1"
+               "lda $1+2"
+               "sta ARTH+2"
+               "lda $1+3"
+               "sta ARTH+3"
+               "ldy #1"
+               "sty UNSIGN"
+               "jsr Div"
+                                       | %[a] | |
+loc dvi $2==2 | R16 |
+               "stx ARTH+2"
+               "sta ARTH+3"
+               "lda #[$1].l"
+               "sta ARTH"
+               "lda #[$1].h"
+               "sta ARTH+1"
+               "ldy #1"
+               "sty UNSIGN"
+               "jsr Div"
+                                       | %[1] | |
+lol dvi IN($1) && $2==2 | R16 |
+               "stx ARTH+2"
+               "sta ARTH+3"
+               "ldy #BASE+$1"
+               "lda (LBl),y"
+               "sta ARTH"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+1"
+               "ldy #1"
+               "sty UNSIGN"
+               "jsr Div"
+                                       | %[1] | |
+loe dvi $2==2  | R16 |
+               "stx ARTH+2"
+               "sta ARTH+3"
+               "lda $1"
+               "sta ARTH"
+               "lda $1+1"
+               "sta ARTH+1"
+               "ldy #1"
+               "sty UNSIGN"
+               "jsr Div"
+                                       | %[1] | |
+dvi $1==2      | R16 |
+               "jsr Dvi2"
+                                       | %[1] | |
+dvi $1==4      | |
+               allocate(R16)
+               "jsr Dvi4"
+                                       | | |
+dvi ND | R16 |
+               "jsr Test2"
+               "jsr Dvi2"
+                                       | %[1] | |
+rmi $1==2      | R16 |
+               "jsr Rmi2"
+                                       | %[1] | |
+rmi $1==4      | |
+               allocate(R16)
+               "jsr Rmi4"
+                                       | | |
+rmi ND | R16 |
+               "jsr Test2"
+               "jsr Rmi2"
+                                       | %[1] | |
+ngi $1==2      | R16 |
+               "jsr Ngi2"
+                                       | %[1] | |
+ngi $1==4      | |
+               allocate(R16)
+               "lda SP+1"
+               "ldx SP+2"
+               "jsr Ngi4"
+                                       | | |
+ngi ND | R16 |
+               "jsr Test2"
+               "jsr Ngi2"
+                                       | %[1] | |
+sli $1==2      | R16 |
+               "jsr Sli2"
+                                       | %[1] | |
+sli $1==4      | R16 |
+               "jsr Sli4"
+                                       | | |
+sli ND | R16 |
+               "jsr Test2"
+               "jsr Sli2"
+                                       | %[1] | |
+sri $1==2      | R16 |
+               "jsr Sri2"
+                                       | %[1] | |
+sri $1==4      | R16 |
+               "jsr Sri4"
+                                       | | |
+sri ND | R16 |
+               "jsr Test2"
+               "jsr Sri2"
+                                       | %[1] | |
+
+
+/* GROUP 4 - UNSIGNED ARITHMETIC */
+
+loc lol adu    | | | | loc $1 lol $2 adi $3 |
+lol loc adu    | | | | lol $1 loc $2 adi $3 |
+lol lol adu    | | | | lol $1 lol $2 adi $3 |
+lol loe adu    | | | | lol $1 loe $2 adi $3 |
+loe lol adu    | | | | loe $1 lol $2 adi $3 |
+loe loe adu    | | | | loe $1 loe $2 adi $3 |
+loc loe adu    | | | | loc $1 loe $2 adi $3 |
+loe loc adu    | | | | loe $1 loc $2 adi $3 |
+ldl adu                | | | | ldl $1 adi $2 |
+lde adu                | | | | lde $1 adi $2 |
+loc adu                | | | | loc $1 adi $2 |
+lol adu                | | | | lol $1 adi $2 |
+loe adu                | | | | loe $1 adi $2 |
+adu            | | | | adi $1 |
+
+loc lol sbu    | | | | loc $1 lol $2 sbi $3 |
+lol loc sbu    | | | | lol $1 loc $2 sbi $3 |
+lol lol sbu    | | | | lol $1 lol $2 sbi $3 |
+lol loe sbu    | | | | lol $1 loe $2 sbi $3 |
+loe lol sbu    | | | | loe $1 lol $2 sbi $3 |
+loe loe sbu    | | | | loe $1 loe $2 sbi $3 |
+loc loe sbu    | | | | loc $1 loe $2 sbi $3 |
+loe loc sbu    | | | | loe $1 loc $2 sbi $3 |
+ldl sbu                | | | | ldl $1 sbi $2 |
+lde sbu                | | | | lde $1 sbi $2 |
+loc sbu                | | | | loc $1 sbi $2 |
+lol sbu                | | | | lol $1 sbi $2 |
+loe sbu                | | | | loe $1 sbi $2 |
+sbu            | | | | sbi $1 |
+
+loc lol mlu (IN($2) && $3==2)  | |
+               allocate(R16)
+               "lda #[$1].l"
+               "sta ARTH"
+               "lda #[$1].h"
+               "sta ARTH+1"
+               "ldy #BASE+$2"
+               "lda (LBl),y"
+               "sta ARTH+2"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+3"
+               "ldy #0"
+               "sty UNSIGN"
+               "jsr Mul"
+                                       | %[a] | |
+lol loc mlu    | | | | loc $2 lol $1 mlu $3 |
+lol lol mlu (IN($1) && IN($2) && $3==2) | |
+               allocate(R16)
+               "ldy #BASE+$1"
+               "lda (LBl),y"
+               "sta ARTH"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+1"
+               "ldy #BASE+$2"
+               "lda (LBl),y"
+               "sta ARTH+2"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+3"
+               "ldy #0"
+               "sty UNSIGN"
+               "jsr Mul"
+                                       | %[a] | |
+lol loe mlu (IN($1) && $3==2) | |
+               allocate(R16)
+               "ldy #BASE+$1"
+               "lda (LBl),y"
+               "sta ARTH"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+1"
+               "lda $2"
+               "sta ARTH+2"
+               "lda $2+1"
+               "sta ARTH+3"
+               "ldy #0"
+               "sty UNSIGN"
+               "jsr Mul"
+                                       | %[a] | |
+loe lol mlu (IN($2) && $3==2) | | | | lol $2 loe $1 mlu $3 |
+loe loe mlu $3==2      | |
+               allocate(R16)
+               "lda $1"
+               "sta ARTH"
+               "lda $1+1"
+               "sta ARTH+1"
+               "lda $2"
+               "sta ARTH+2"
+               "lda $2+1"
+               "sta ARTH+3"
+               "ldy #0"
+               "sty UNSIGN"
+               "jsr Mul"
+                                       | %[a] | |
+loc loe mlu $3==2      | |
+               allocate(R16)
+               "lda #[$1].l"
+               "sta ARTH"
+               "lda #[$1].h"
+               "sta ARTH+1"
+               "lda $2"
+               "sta ARTH+2"
+               "lda $2+1"
+               "sta ARTH+3"
+               "ldy #0"
+               "sty UNSIGN"
+               "jsr Mul"
+                                       | %[a] | |
+loe loc mlu    | | | | loc $2 loe $1 mlu $3 |
+ldl mlu IND($1) && $2==2       | |
+               allocate(R16)
+               "ldy #BASE+$1"
+               "lda (LBl),y"
+               "sta ARTH"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+1"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+2"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+3"
+               "ldy #0"
+               "sty UNSIGN"
+               "jsr Mul"
+                                       | %[a] | |
+lde mlu $2==2  | |
+               allocate(R16)
+               "lda $1"
+               "sta ARTH"
+               "lda $1+1"
+               "sta ARTH+1"
+               "lda $1+2"
+               "sta ARTH+2"
+               "lda $1+3"
+               "sta ARTH+3"
+               "ldy #0"
+               "sty UNSIGN"
+               "jsr Mul"
+                                       | %[a] | |
+loc mlu $2==2 | R16 |
+               "stx ARTH"
+               "sta ARTH+1"
+               "lda #[$1].l"
+               "sta ARTH+2"
+               "lda #[$1].h"
+               "sta ARTH+3"
+               "ldy #0"
+               "sty UNSIGN"
+               "jsr Mul"
+                                       | %[1] | |
+lol mlu IN($1) && $2==2 | R16 |
+               "stx ARTH"
+               "sta ARTH+1"
+               "ldy #BASE+$1"
+               "lda (LBl),y"
+               "sta ARTH+2"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+3"
+               "ldy #0"
+               "sty UNSIGN"
+               "jsr Mul"
+                                       | %[1] | |
+loe mlu $2==2  | R16 |
+               "stx ARTH"
+               "sta ARTH+1"
+               "lda $1"
+               "sta ARTH+2"
+               "lda $1+1"
+               "sta ARTH+3"
+               "ldy #0"
+               "sty UNSIGN"
+               "jsr Mul"
+                                       | %[1] | |
+lol lol mlu IN($1) && !IN($2) && $3==2
+               | | | | lol $2 lol $1 mlu $3 |
+mlu $1==2      | R16 |
+               "jsr Mlu2"
+                                       | %[1] | |
+mlu $1==4      | |
+               allocate(R16)
+               "jsr Mlu4"
+                                       | | |
+mlu ND | R16 |
+               "jsr Test2"
+               "jsr Mlu2"
+                                       | %[1] | |
+
+loc lol dvu (IN($2) && $3==2)  | |
+               allocate(R16)
+               "ldy #BASE+$2"
+               "lda (LBl),y"
+               "sta ARTH"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+1"
+               "lda #[$1].l"
+               "sta ARTH+2"
+               "lda #[$1].h"
+               "sta ARTH+3"
+               "ldy #0"
+               "sty UNSIGN"
+               "jsr Duv"
+                                       | %[a] | |
+lol loc dvu (IN($1) && $3==2)  | |
+               allocate(R16)
+               "lda #[$2].l"
+               "sta ARTH"
+               "lda #[$2].h"
+               "sta ARTH+1"
+               "ldy #BASE+$1"
+               "lda (LBl),y"
+               "sta ARTH+2"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+3"
+               "ldy #0"
+               "sty UNSIGN"
+               "jsr Duv"
+                                       | %[a] | |
+lol lol dvu (IN($1) && IN($2) && $3==2) | |
+               allocate(R16)
+               "ldy #BASE+$2"
+               "lda (LBl),y"
+               "sta ARTH"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+1"
+               "ldy #BASE+$1"
+               "lda (LBl),y"
+               "sta ARTH+2"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+3"
+               "ldy #0"
+               "sty UNSIGN"
+               "jsr Duv"
+                                       | %[a] | |
+lol loe dvu (IN($1) && $3==2) | |
+               allocate(R16)
+               "ldy #BASE+$1"
+               "lda (LBl),y"
+               "sta ARTH+2"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+3"
+               "lda $2"
+               "sta ARTH"
+               "lda $2+1"
+               "sta ARTH+1"
+               "ldy #0"
+               "sty UNSIGN"
+               "jsr Duv"
+                                       | %[a] | |
+loe lol dvu (IN($2) && $3==2) | |
+               allocate(R16)
+               "ldy #BASE+$2"
+               "lda (LBl),y"
+               "sta ARTH"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+1"
+               "lda $2"
+               "sta ARTH+2"
+               "lda $2+1"
+               "sta ARTH+3"
+               "ldy #0"
+               "sty UNSIGN"
+               "jsr Duv"
+                                       | %[a] | |
+loe loe dvu $3==2      | |
+               allocate(R16)
+               "lda $2"
+               "sta ARTH"
+               "lda $2+1"
+               "sta ARTH+1"
+               "lda $1"
+               "sta ARTH+2"
+               "lda $1+1"
+               "sta ARTH+3"
+               "ldy #0"
+               "sty UNSIGN"
+               "jsr Duv"
+                                       | %[a] | |
+loc loe dvu $3==2      | |
+               allocate(R16)
+               "lda #[$1].l"
+               "sta ARTH+2"
+               "lda #[$1].h"
+               "sta ARTH+3"
+               "lda $2"
+               "sta ARTH"
+               "lda $2+1"
+               "sta ARTH+1"
+               "ldy #0"
+               "sty UNSIGN"
+               "jsr Duv"
+                                       | %[a] | |
+loe loc dvu $3==2      | |
+               allocate(R16)
+               "lda #[$2].l"
+               "sta ARTH"
+               "lda #[$2].h"
+               "sta ARTH+1"
+               "lda $1"
+               "sta ARTH+2"
+               "lda $1+1"
+               "sta ARTH+3"
+               "ldy #0"
+               "sty UNSIGN"
+               "jsr Duv"
+                                       | %[a] | |
+ldl dvu IND($1) && $2==2       | |
+               allocate(R16)
+               "ldy #BASE+$1"
+               "lda (LBl),y"
+               "sta ARTH"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+1"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+2"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+3"
+               "ldy #0"
+               "sty UNSIGN"
+               "jsr Duv"
+                                       | %[a] | |
+lde dvu $2==2  | |
+               allocate(R16)
+               "lda $1"
+               "sta ARTH"
+               "lda $1+1"
+               "sta ARTH+1"
+               "lda $1+2"
+               "sta ARTH+2"
+               "lda $1+3"
+               "sta ARTH+3"
+               "ldy #0"
+               "sty UNSIGN"
+               "jsr Duv"
+                                       | %[a] | |
+loc dvu $2==2 | R16 |
+               "stx ARTH+2"
+               "sta ARTH+3"
+               "lda #[$1].l"
+               "sta ARTH"
+               "lda #[$1].h"
+               "sta ARTH+1"
+               "ldy #0"
+               "sty UNSIGN"
+               "jsr Duv"
+                                       | %[1] | |
+lol dvu IN($1) && $2==2 | R16 |
+               "stx ARTH+2"
+               "sta ARTH+3"
+               "ldy #BASE+$1"
+               "lda (LBl),y"
+               "sta ARTH"
+               "iny"
+               "lda (LBl),y"
+               "sta ARTH+1"
+               "ldy #0"
+               "sty UNSIGN"
+               "jsr Duv"
+                                       | %[1] | |
+loe dvu $2==2  | R16 |
+               "stx ARTH+2"
+               "sta ARTH+3"
+               "lda $1"
+               "sta ARTH"
+               "lda $1+1"
+               "sta ARTH+1"
+               "ldy #0"
+               "sty UNSIGN"
+               "jsr Duv"
+                                       | %[1] | |
+dvu $1==2      | R16 |
+               "jsr Dvu2"
+                                       | %[1] | |
+dvu $1==4      | |
+               allocate(R16)
+               "jsr Dvu4"
+                                       | | |
+dvu ND | R16 |
+               "jsr Test2"
+               "jsr Dvu2"
+                                       | %[1] | |
+
+rmu $1==2      | R16 |
+               "jsr Rmu2"
+                                       | %[1] | |
+rmu $1==4      | |
+               allocate(R16)
+               "jsr Rmu4"
+                                       | | |
+slu    | | | | sli $1 |
+sru $1==2      | R16 |
+               "jsr Sru2"
+                                       | %[1] | |
+sru $1==4      | R16 |
+               "jsr Sru4"
+                                       | | |
+sru ND | R16 |
+               "jsr Test2"
+               "jsr Sru2"
+                                       | %[1] | |
+
+
+/* GROUP 6 - POINTER ARITHMETIC */
+
+adp $1==0      | | | | |
+adp    | | | | loc $1 adi 2 |
+ads $1==2      | R16 |
+               "jsr Adi2"
+                                       | %[1] | |
+ads ND         | R16 |
+               "jsr Test2"
+               "jsr Adi2"
+                                       | %[1] | |
+sbs $1==2      | R16 |
+               "jsr Sbi2"
+                                       | %[1] | |
+sbs ND | R16 |
+               "jsr Test2"
+               "jsr Sbi2"
+                                       | %[1] | |
+
+
+/* GROUP 7 INCREMENT/DECREMENT/ZERO */
+
+inc    | R16 |
+               "inx"
+               "bne 1f"
+               "clc"
+               "adc #1\n1:"
+                                       | %[1] | |
+inl IN($1)     | |
+               allocate(R16)
+               "ldy #BASE+$1"
+               "clc"
+               "lda (LBl),y"
+               "adc #1"
+               "sta (LBl),y"
+               "bcc 1f"
+               "iny"
+               "lda (LBl),y"
+               "adc #0"
+               "sta (LBl),y\n1:"
+                                       | | |
+inl D  | |
+               allocate(R16)
+               "lda #[$1].h"
+               "ldx #[$1].l"
+               "jsr Lol"
+               "inx"
+               "bne 1f"
+               "clc"
+               "adc #1"
+               "1: jsr Stii"
+                                       | | |
+ine    | |
+               "inc $1"
+               "bne 1f"
+               "inc $1+1\n1:"
+                                       | | |
+dec    | R16 |
+               "cpx #0"
+               "bne 1f"
+               "sec"
+               "sbc #1"
+               "1: dex"
+                                       | %[1] | |
+del IN($1)     | |
+               allocate(R16)
+               "ldy #BASE+$1"
+               "sec"
+               "lda (LBl),y"
+               "sbc #1"
+               "sta (LBl),y"
+               "bcs 1f"
+               "iny"
+               "lda (LBl),y"
+               "sbc #0"
+               "sta (LBl),y\n1:"
+                                       | | |
+del    | |
+               allocate(R16)
+               "lda #[$1].h"
+               "ldx #[$1].l"
+               "jsr Lol"
+               "cpx #0"
+               "bne 1f"
+               "sec"
+               "sbc #1"
+               "1: dex"
+               "jsr Stii"
+                                       | | |
+dee    | |
+               "ldy $1"
+               "bne 1f"
+               "dec $1+1"
+               "1: dey"
+               "sty $1"
+                                       | | |
+zrl IN($1)     | |
+               allocate(R16)
+               "ldy #BASE+$1"
+               "lda #0"
+               "sta (LBl),y"
+               "iny"
+               "sta (LBl),y"
+                                       | | |
+zrl    | |
+               allocate(R16)
+               "lda #[$1].h"
+               "ldx #[$1].l"
+               "jsr Zrl"
+                                       | | |
+zre    | |
+               "ldy #0"
+               "sty $1"
+               "sty $1+1"
+                                       | | |
+zer $1==2      | |
+               allocate(R16)
+               "lda #0"
+               "tax"
+                                       | %[a] | |
+zer $1==4      | |
+               allocate(R16)
+               "lda #0"
+               "tax"
+               "jsr Push"
+                                       | %[a] | |
+zer $1>0 && $1<=256    | |
+               allocate(R16)
+               "ldy #$1-1"
+               "jsr Zer"
+                                       | | |
+
+
+/* GROUP 8 - CONVERT (stack: source, source size, dest. size (top)) */
+
+loc loc cii $1==1 && $2==2     | R16 |
+               "txa"
+               "bpl 1f"
+               "lda #0FFh"
+               "bne 2f"
+               "1:  lda #0\n2:"
+                                       | %[1] | |
+cii    | R16 |
+               "jsr Cii"
+                                       | | |
+cui    | | | | cii |
+ciu    | | | | cii |
+cuu    | | | | asp 4 |
+
+
+/* GROUP 9 - LOGICAL */
+
+and $1==2      | R16 |
+               "sta ARTH+1"
+               "stx ARTH"
+               "jsr Pop"
+               "and ARTH+1"
+               "pha"
+               "txa"
+               "and ARTH"
+               "tax"
+               "pla"
+                                       | %[1] | |
+and $1<=254    | |
+               allocate(R16)
+               "ldy #[$1].l"
+               "jsr And"
+                                       | | |
+and ND | R16 |
+               "jsr TestFFh"
+               "jsr Pop"
+               "iny"
+               "jsr And"
+                                       | | |
+ior $1==2      | R16 |
+               "sta ARTH+1"
+               "stx ARTH"
+               "jsr Pop"
+               "ora ARTH+1"
+               "pha"
+               "txa"
+               "ora ARTH"
+               "tax"
+               "pla"
+                                       | %[1] | |
+ior $1<=254    | |
+               allocate(R16)
+               "ldy #[$1].l"
+               "jsr Ior"
+                                       | | |
+ior ND | R16 |
+               "jsr TestFFh"
+               "jsr Pop"
+               "iny"
+               "jsr Ior"
+                                       | | |
+xor $1==2      | R16 |
+               "sta ARTH+1"
+               "stx ARTH"
+               "jsr Pop"
+               "eor ARTH+1"
+               "pha"
+               "txa"
+               "eor ARTH"
+               "tax"
+               "pla"
+                                       | %[1] | |
+xor $1<=254    | |
+               allocate(R16)
+               "ldy #[$1].l"
+               "jsr Xor"
+                                       | | |
+xor ND | R16 |
+               "jsr TestFFh"
+               "jsr Pop"
+               "iny"
+               "jsr Xor"
+                                       | | |
+com $1==2      | R16 |
+               "eor #0FFh"
+               "pha"
+               "txa"
+               "eor #0FFh"
+               "tax"
+               "pla"
+                                       | %[1] | |
+com $1<=254    | |
+               allocate(R16)
+               "ldy #[$1].l"
+               "jsr Com"
+                                       | | |
+com ND | R16 |
+               "jsr TestFFh"
+               "jsr Pop"
+               "iny"
+               "jsr Com"
+                                       | | |
+rol $1==2      | R16 |
+               "jsr Rol"
+                                       | %[1] | |
+rol $1==4      | R16 |
+               "jsr Rol4"
+                                       | | |
+rol ND | R16 |
+               "jsr Test2"
+               "jsr Rolw"
+                                       | %[1] | |
+ror $1==2      | R16 |
+               "jsr Ror"
+                                       | %[1] | |
+ror $1==4      | R16 |
+               "jsr Ror4"
+                                       | | |
+ror ND | R16 |
+               "jsr Test2"
+               "jsr Rorw"
+                                       | %[1] | |
+
+
+/* GROUP 10 - SETS */
+
+loc inn $1<0 && $2==2  | R16 |
+               "lda #0"
+               "tax"
+                                       | %[1] | |
+loc inn        $2==2 && $1==0  | R16 |
+               "txa"
+               "and #1"
+               "tax"
+               "lda #0"
+                                       | %[1] | |
+loc inn        $2==2 && $1>0 && $1<16  | R16 |
+               "ldy #$1"
+               "stx ARTH"
+               "1: lsr a"
+               "ror ARTH"
+               "dey"
+               "bne 1b"
+               "lda ARTH"
+               "and #1"
+               "tax"
+               "lda #0"
+                                       | %[1] | |
+loc inn zeq $1>0 && $1<16 && $2==2     | R16 |
+               "ldy #$1+1"
+               "stx ARTH"
+               "1: lsr a"
+               "ror ARTH"
+               "dey"
+               "bne 1b"
+               "bcc $1"
+                                       | | |
+loc inn zne $1>0 && $1<16 && $2==2     | R16 |
+               "ldy #$1+1"
+               "stx ARTH"
+               "1: lsr a"
+               "ror ARTH"
+               "dey"
+               "bne 1b"
+               "bcs $1"
+                                       | | |
+inn $1==2      | R16 |
+               "txa"
+               "tay"
+               "jsr Pop"
+               "stx ARTH"
+               "1: lsr a"
+               "ror ARTH"
+               "dey"
+               "bne 1b"
+               "lda ARTH"
+               "and #1"
+               "tax"
+               "lda #0"
+                               | %[1] | |
+inn zeq $1==2  | R16 |
+               "txa"
+               "tay"
+               "jsr Pop"
+               "stx ARTH"
+               "1: lsr a"
+               "ror ARTH"
+               "dey"
+               "bpl 1b"
+               "lda ARTH"
+               "bcc $2"
+                               | %[1] | |
+inn zne $1==2  | R16 |
+               "txa"
+               "tay"
+               "jsr Pop"
+               "stx ARTH"
+               "1: lsr a"
+               "ror ARTH"
+               "dey"
+               "bpl 1b"
+               "bcs $2"
+                               | %[1] | |
+inn $1<=256    | R16 |
+               "ldy #$1-1"
+               "jsr Inn"
+                                       | %[1] | |
+inn ND | R16 |
+               "jsr TestFFh"
+               "jsr Pop"
+               "jsr Inn"
+                                       | %[1] | |
+loc set $2==2 && $1>=0 && $1<16        | |
+               allocate(R16)
+               "ldy #$1"
+               "lda #0"
+               "sta ARTH"
+               "sec"
+               "1: rol ARTH"
+               "rol a"
+               "dey"
+               "bpl 1b"
+               "ldx ARTH"
+                                       | %[a] | |
+set $1==2      | R16 |
+               "txa"
+               "tay"
+               "lda #0"
+               "sta ARTH"
+               "sec"
+               "1: rol ARTH"
+               "rol a"
+               "bpl 1b"
+               "ldx ARTH"
+                                       | %[1] | |
+set $1<=256    | R16 |
+               "ldy #$1-1"
+               "jsr Set"
+                                       | | |
+set ND | R16 |
+               "jsr TestFFh"
+               "jsr Pop"
+               "jsr Set"
+                                       | | |
+
+
+/* GROUP 11 - ARRAY */
+
+lae lar defined(rom(1,3)) | | | | lae $1 aar $2 loi rom(1,3) |
+lar $1==2      | R16 |
+               "jsr Lar"
+                                       | | |
+lar ND | R16 |
+               "jsr Test2"
+               "jsr Lar"
+                                       | | |
+lae sar defined(rom(1,3)) | | | | lae $1 aar $2 sti rom(1,3) |
+sar $1==2      | R16 |
+               "jsr Sar"
+                                       | | |
+sar ND | R16 |
+               "jsr Test2"
+               "jsr Sar"
+                                       | | |
+lae aar $2==2 && rom(1,3)==1 && rom(1,1)==0 | | | | adi 2 |
+lae aar $2==2 && rom(1,3)==1 && rom(1,1)!=0 | |
+                                   | | adi 2 adp 0-rom(1,1) |
+lae aar $2==2 && rom(1,3)==2 && rom(1,1)==0 | R16 |
+               "pha"
+               "txa"
+               "asl a"
+               "tax"
+               "pla"
+               "rol a"
+                                       | %[1] | adi 2 |
+lae aar $2==2 && rom(1,3)==2 && rom(1,1)!=0 | R16 |
+               "pha"
+               "txa"
+               "asl a"
+               "tax"
+               "pla"
+               "rol a"
+                                   | %[1] | adi 2 adp (0-rom(1,1))*2 |
+lae aar $2==2 && rom(1,3)>2 && rom(1,1)==0 | |
+                                       | | loc rom(1,3) mli 2 adi 2 |
+lae aar $2==2 && rom(1,3)>2 && rom(1,1)!=0 | |
+               | | loc rom(1,3) mli 2 adi 2 adp (0-rom(1,1))*rom(1,3) |
+aar $1==2      | R16 |
+               "jsr Aar"
+                                       | %[1] | |
+aar ND | R16 |
+               "jsr Test2"
+               "jsr Aar"
+                                       | %[1] | |
+
+
+/* GROUP 12 - COMPARE */
+
+cmi $1==2      | R16 |
+               "jsr Cmi"
+                                       | %[1] | |
+cmi $1==4      | |
+               allocate(R16)
+               "jsr Cmi4"
+                                       | %[a] | |
+cmi ND | R16 |
+               "jsr Test2"
+               "jsr Cmi"
+                                       | %[1] | |
+cmu $1==2      | R16 |
+               "jsr Cmu2"
+                                       | %[1] | |
+cmu $1==4      | |
+               allocate(R16)
+               "jsr Cmu4"
+                                       | %[a] | |
+cmu ND | R16 |
+               "jsr Test2"
+               "jsr Cmu"
+                                       | | |
+cmp    | |
+                                       | | cmu 2 |
+cms $1==2      | |
+               allocate(R16)
+               "ldy #2"
+               "jsr Cms"
+                                       | %[a] | |
+cms $1==4      | |
+               allocate(R16)
+               "ldy #4"
+               "jsr Cms"
+                                       | %[a] | |
+cms ND | R16 |
+               "jsr TestFFh"
+               "iny"
+               "jsr Cms"
+                                       | %[1] | |
+tlt    | R16 |
+               "jsr Tlt"
+                                       | %[1] | |
+tle    | R16 |
+               "jsr Tle"
+                                       | %[1] | |
+teq    | R16 |
+               "jsr Teq"
+                                       | %[1] | |
+tne    | R16 |
+               "jsr Tne"
+                                       | %[1] | |
+tge    | R16 |
+               "jsr Tge"
+                                       | %[1] | |
+tgt    | R16 |
+               "jsr Tgt"
+                                       | %[1] | |
+
+
+/* GROUP 13 - BRANCH */
+
+bra    | |
+               remove(ALL)
+               "jmp $1"
+                                       | | |
+
+blt    | R16 |
+               "jsr Sbi2"
+               "bmi $1"
+                                       | | |
+ble    | R16 |
+               "jsr Sbi2"
+               "bmi $1"
+               "bne 1f"
+               "txa"
+               "beq $1\n1:"
+                                       | | |
+beq    | R16 |
+               "sta BRANCH+1"
+               "stx BRANCH"
+               "jsr Pop"
+               "cmp BRANCH+1"
+               "bne 1f"
+               "cpx BRANCH"
+               "beq $1\n1:"
+                                       | | |
+bne    | R16 |
+               "sta BRANCH+1"
+               "stx BRANCH"
+               "jsr Pop"
+               "cmp BRANCH+1"
+               "bne $1"
+               "cpx BRANCH"
+               "bne $1"
+                                       | | |
+bge    | R16 |
+               "jsr Sbi2"
+               "bpl $1"
+                                       | | |
+bgt    | R16 |
+               "jsr Sbi2"
+               "bmi 1f"
+               "bne $1"
+               "txa"
+               "bne $1\n1:"
+                                       | | |
+
+cmi zlt $1==2 | | | | blt $2 |
+cmp zlt        | | | | blt $2 |
+zlt    | R16 |
+               "tay"
+               "bmi $1"
+                                       | | |
+cmi zle $1==2 | | | | ble $2 |
+cmp zle | | | | ble $2 |
+zle    | R16 |
+               "tay"
+               "bmi $1"
+               "bne 1f"
+               "txa"
+               "beq $1\n1:"
+                                       | | |
+cmi zeq $1==2 | | | | beq $2 |
+cmp zeq | | | | beq $2 |
+cms zeq $1==2 | | | | beq $2 |
+zeq    | R16 |
+               "tay"
+               "bne 1f"
+               "txa"
+               "beq $1\n1:"
+                                       | | |
+cmi zne $1==2 | | | | bne $2 |
+cmp zne | | | | bne $2 |
+cms zne $1==2 | | | | bne $2 |
+zne    | R16 |
+               "tay"
+               "bne $1"
+               "txa"
+               "bne $1"
+                                       | | |
+cmi zge $1==2 | | | | bge $2 |
+cmp zge | | | | bge $2 |
+zge    | R16 |
+               "tay"
+               "bpl $1"
+                                       | | |
+cmi zgt $1==2 | | | | bgt $2 |
+cmp zgt | | | | bgt $2 |
+zgt    | R16 |
+               "tay"
+               "bmi 1f"
+               "bne $1"
+               "txa"
+               "bne $1\n1:"
+                                       | | |
+
+
+/* GROUP 14 - PROCEDURE CALL */
+
+cai    | R16 |
+               "stx ADDR"
+               "sta ADDR+1"
+               "jsr Indir"
+                                       | | |
+cal    | |
+               remove(ALL)
+               "jsr $1"
+                                       | | |
+lfr $1==2 | |
+               allocate(R16)
+               "lda #0"
+               "ldx #RETURN"
+               "jsr Loi"
+                                       | %[a] | |
+lfr $1==4 | |
+               allocate(R16)
+               "lda #0"
+               "ldx #RETURN"
+               "jsr Ldi"
+                                       | | |
+lfr ret $1==$2 | | | | ret 0 |
+asp lfr ret $2==$3 | | | | ret 0 |
+ret $1==0 || $1==2 || $1==4    | |
+               allocate(R16)
+               "ldy #$1"
+               "jmp Ret"
+                                       | | |
+
+
+/* GROUP 15 - MISCELLANOUS */
+
+asp    | |
+               allocate(R16)
+               "lda #[$1].h"
+               "ldx #[$1].l"
+               "jsr Asp"
+                                       | | |
+ass $1==2      | R16 |
+               "jsr Asp"
+                                       | | |
+ass ND | R16 |
+               "jsr Test2"
+               "jsr Pop"
+               "jsr Asp"
+                                       | | |
+blm $1==0      | | | | asp 4 |
+blm D  | R16 |
+               "ldy #[[$1].h+1]"
+               "sty NBYTES+1"
+               "ldy #[$1].l"
+               "jsr Blm"
+                                       | | |
+bls $1==2      | R16 |
+               "sta NBYTES+1"
+               "inc NBYTES+1"
+               "txa"
+               "tay"
+               "jsr Pop"
+               "jsr Blm"
+                                       | | |
+bls ND | R16 |
+               "jsr Test2"
+               "sta NBYTES+1"
+               "inc NBYTES+1"
+               "txa"
+               "tay"
+               "jsr Pop"
+               "jsr Blm"
+                                       | | |
+csa    | R16 |
+               "jmp Csa"
+                                       | | |
+csb    | R16 |
+               "jmp Csb"
+                                       | | |
+dch    | | | | loi 2 |
+dup $1==2      | R16 |
+               "jsr Push"
+                                       | %[1] | |
+dup $1<=256    | |
+               allocate(R16)
+               "ldy #[$1].l"
+               "jsr Dup"
+                                       | | |
+dus $1==2      | R16 |
+               "jsr TestFFh"
+               "iny"
+               "jsr Dup"
+                                       | | |
+exg $1==2      | R16 |
+               "jsr Exg2"
+                                       | %[1] | |
+exg $1<=255    | |
+               allocate(R16)
+               "ldy #$1"
+               "jsr Exg"
+                                       | | |
+fil    | |
+               "ldy #[$1].l"
+               "sty hol0+4"
+               "ldy #[$1].h"
+               "sty hol0+5"
+                                       | | |
+gto    | |
+               allocate(R16)
+               "lda #[$1].h"
+               "ldx #[$1].l"
+               "jmp Gto"
+                                       | | |
+lim    | |
+               allocate(R16)
+               "ldx IGNMASK"
+               "lda IGNMASK+1"
+                                       | %[a] | |
+lin    | |
+               "ldy #[$1].l"
+               "sty hol0"
+               "ldy #[$1].h"
+               "sty hol0+1"
+                                       | | |
+lni    | |
+               "inc hol0"
+               "bne 1f"
+               "inc hol0+1\n1:"
+                                       | | |
+lor $1==0      | |
+               allocate(R16)
+               "ldx LB"
+               "lda LB+1"
+                                       | %[a] | |
+lor $1==1      | |
+               allocate(R16)
+               "ldx SP+2"
+               "lda SP+1"
+                                       | %[a] | |
+lor $1==2      | |
+               allocate(R16)
+               "ldx HP"
+               "lda HP+1"
+                                       | %[a] | |
+lpb    | | | | adp 2 |
+mon    | R16 |
+               "jsr Mon"
+                                       | %[1] | |
+nop    | |
+               allocate(R16)
+               "jsr Printstack"
+                                       | | |
+rck    | R16 | | | |
+rtt    | |
+               remove(ALL)
+               "jmp Rtt"
+                                       | | |
+sig    | R16 |
+               "pha"
+               "txa"
+               "pha"
+               "ldx ERRPROC"
+               "lda ERRPROC+1"
+               "jsr Push"
+               "pla"
+               "sta ERRPROC"
+               "pla"
+               "sta ERRPROC+1"
+                                       | | |
+sim    | R16 |
+               "stx IGNMASK"
+               "sta IGNMASK+1"
+                                       | | |
+str $1==0      | R16 |
+               "stx LB"
+               "sta LB+1"
+               "tay"
+               "sec"
+               "txa"
+               "sbc #BASE"
+               "sta LBl"
+               "tya"
+               "sbc #0"
+               "sta LBl+1"
+                                       | | |
+str $1==1      | R16 |
+               "stx SP+2"
+               "sta SP+1"
+                                       | | |
+str $1==2      | R16 |
+               "stx HP"
+               "sta HP+1"
+                                       | | |
+trp    | R16 |
+               "jsr Trap"
+                                       | | |
+lol lal sti $1==$2 && $3==1 | | | | | /* throw away funny C-proc-prolog */
+
+       | STACK |
+               allocate(R16)
+               "jsr Pop"
+                                       | %[a] | |
+
+
+/*************\
+*  M O V E S  *
+\*************/
+
+MOVES:  (AAA,AAA,"nop")
+
+STACKS:  (R16, , "jsr Push")