From: sater Date: Fri, 13 Jul 1984 11:12:23 +0000 (+0000) Subject: Initial revision X-Git-Tag: release-5-5~6199 X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=28960f5d32d408bcaa553c826b0f5c17fe54d6a2;p=ack.git Initial revision --- diff --git a/mach/6500/cg/mach.c b/mach/6500/cg/mach.c new file mode 100644 index 000000000..f57dadb0a --- /dev/null +++ b/mach/6500/cg/mach.c @@ -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 index 000000000..47f035523 --- /dev/null +++ b/mach/6500/cg/mach.h @@ -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 index 000000000..0c7f68601 --- /dev/null +++ b/mach/6500/cg/table @@ -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 = ("",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")