MACRO &lab subroutine &parms,&work &lab anop aif c:&work,.a lclc &work &work setc 0 .a gbla &totallen gbla &worklen &worklen seta &work &totallen seta 0 aif c:&parms=0,.e lclc &len lclc &p lcla &i &i seta c:&parms .b &p setc &parms(&i) &len amid &p,2,1 aif "&len"=":",.c &len amid &p,1,2 &p amid &p,4,l:&p-3 ago .d .c &len amid &p,1,1 &p amid &p,3,l:&p-2 .d &p equ &totallen+3+&work &totallen seta &totallen+&len &i seta &i-1 aif &i,^b .e tsc sec sbc #&work tcs inc a phd tcd phb phk plb mend MACRO &lab return &r &lab anop lclc &len aif c:&r,.a lclc &r &r setc 0 &len setc 0 ago .h .a &len amid &r,2,1 aif "&len"=":",.b &len amid &r,1,2 &r amid &r,4,l:&r-3 ago .c .b &len amid &r,1,1 &r amid &r,3,l:&r-2 .c aif &len<>2,.d ldy &r ago .h .d aif &len<>4,.e ldx &r+2 ldy &r ago .h .e aif &len<>10,.g ldy #&r ldx #^&r ago .h .g mnote 'Not a valid return length',16 mexit .h aif &totallen=0,.i lda &worklen+1 sta &worklen+&totallen+1 lda &worklen sta &worklen+&totallen .i plb pld tsc clc adc #&worklen+&totallen tcs aif &len=0,.j tya .j rtl mend MACRO &lab LD2 &val,&adr &lab lcla &count lda #&val &count seta 1 .loop sta &adr(&count) &count seta &count+1 aif &count>c:&adr,.done ago ^loop .done mend MACRO &lab jeq &loc &lab bne *+5 jmp &loc mend MACRO &lab add2 &arg1,&arg2,&dest lclc &char &lab clc &char amid &arg1,1,1 aif "&char"="@",.at1 lda &arg1 ago .add .at1 &char amid &arg1,2,1 aif "&char"="x",.x1 aif "&char"="X",.x1 aif "&char"="y",.y1 aif "&char"="Y",.y1 ago .add .x1 txa ago .add .y1 tya .add adc &arg2 &char amid &dest,1,1 aif "&char"="@",.at2 sta &dest ago .b .at2 &char amid &dest,2,1 aif "&char"="x",.x2 aif "&char"="X",.x2 aif "&char"="y",.y2 aif "&char"="Y",.y2 ago .b .x2 tax ago .b .y2 tay .b mend MACRO &lab if2 &var,&rel,&val,&label &lab ago .skip ble bgt .skip lclc &char1 lclc &char2 &char1 amid &var,1,1 &char2 amid &var,2,1 aif "&char1"="@",.index lda &var .cmp cmp &val ago .branch .index aif "&char2"="x",.x1 aif "&char2"="X",.x1 aif "&char2"="y",.y1 aif "&char2"="Y",.y1 ago ^cmp .x1 cpx &val ago .branch .y1 cpy &val .branch &char1 amid &rel,1,1 aif "&char1"="@",.done b&rel &label .done mend MACRO &lab bgt &loc &lab beq *+4 bcs &loc mend MACRO &lab ble &loc &lab bcc &loc beq &loc mend MACRO &lab iny2 &lab iny iny mend MACRO &lab name &lab anop aif DebugSymbols=0,.pastName brl pastName&SYSCNT dc i'\$7771' dc i1'L:&lab',c'&lab' pastName&SYSCNT anop .pastName MEND