MACRO &lab _NewHandle &lab ldx #$0902 jsl $E10000 MEND MACRO &lab _CloseGS ¶ms &lab jsl $E100A8 dc i2"$2014" dc i4"¶ms" MEND MACRO &lab _OpenGS ¶ms &lab jsl $E100A8 dc i2"$2010" dc i4"¶ms" MEND MACRO &lab _ReadGS ¶ms &lab jsl $E100A8 dc i2"$2012" dc i4"¶ms" MEND MACRO &lab pulllong &addr1,&addr2 &lab ANOP AIF C:&addr1=0,.a AIF C:&addr2=0,.b LCLC &C &C AMID &addr1,1,1 AIF "&C"="[",.zeropage pullword &addr1 sta &addr2 pullword &addr1+2 sta &addr2+2 MEXIT .a pullword pullword MEXIT .b pullword &addr1 pullword &addr1+2 MEXIT .zeropage ldy #&addr2 pullword &addr1,y ldy #&addr2+2 pullword &addr1,y MEND MACRO &lab pullword &SYSOPR &lab ANOP pla AIF C:&SYSOPR=0,.end sta &SYSOPR .end MEND MACRO &lab pushlong &addr,&offset &lab ANOP LCLC &C LCLC &REST &C AMID &addr,1,1 AIF "&C"="#",.immediate AIF "&C"="[",.zeropage AIF C:&offset=0,.nooffset AIF "&offset"="s",.stack pushword &addr+2,&offset pushword &addr,&offset MEXIT .nooffset pushword &addr+2 pushword &addr MEXIT .immediate &REST AMID &addr,2,L:&addr-1 dc I1'$F4',I2'(&REST)|-16' dc I1'$F4',I2'&REST' MEXIT .stack pushword &addr+2,s pushword &addr+2,s MEXIT .zeropage ldy #&offset+2 pushword &addr,y ldy #&offset pushword &addr,y MEND MACRO &lab pushword &SYSOPR &lab ANOP AIF C:&SYSOPR=0,.b LCLC &C &C AMID "&SYSOPR",1,1 AIF ("&C"="#").AND.(S:LONGA),.immediate lda &SYSOPR pha MEXIT .b pha MEXIT .immediate LCLC &REST LCLA &BL &BL ASEARCH "&SYSOPR"," ",1 AIF &BL>0,.a &BL SETA L:&SYSOPR+1 .a &REST AMID "&SYSOPR",2,&BL-2 dc I1'$F4',I2'&REST' MEND MACRO &lab longm &lab ANOP rep #%00100000 longa on MEND MACRO &lab shortm &lab ANOP sep #%00100000 longa off MEND MACRO &lab _GetIRQEnable &lab ldx #$2903 jsl $E10000 MEND MACRO &lab _IntSource &lab ldx #$2303 jsl $E10000 MEND 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 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 pld tsc clc adc #&worklen+&totallen tcs aif &len=0,.j tya .j rtl mend MACRO &LAB ~DISPOSEALL &W &LAB PW &W LDX #$1102 JSL $E10000 MEND MACRO &LAB PW &SYSOPR &LAB ANOP AIF C:&SYSOPR=0,.B LCLC &C &C AMID "&SYSOPR",1,1 AIF ("&C"="#").AND.(S:LONGA),.IMMEDIATE LDA &SYSOPR PHA MEXIT .B PHA MEXIT .IMMEDIATE LCLC &REST LCLA &BL &BL ASEARCH "&SYSOPR"," ",1 AIF &BL>0,.A &BL SETA L:&SYSOPR+1 .A &REST AMID "&SYSOPR",2,&BL-2 DC I1'$F4',I2'&REST' MEND MACRO &lab _MMStartUp &lab ldx #$0202 jsl $E10000 MEND MACRO &lab movelong &a,&b &lab lcla &immed lclc &string &string amid "&a",2,l:&a &immed asearch "&a",#,1 aif s:longa=1,.long aif &immed=0,.noimmed1 lda #<&string sta &b lda #>&string sta &b+1 lda #^&string sta &b+2 lda #0 sta &b+3 mexit .noimmed1 moveword &a,&b moveword &a+2,&b+2 mexit .long moveword &a,&b aif &immed=0,.long2 moveword #^&string,&b+2 mexit .long2 moveword &a+2,&b+2 mend MACRO &lab moveword &a,&b &lab lcla &immed lclc &string &string amid "&a",2,l:&a &immed asearch "&a",#,1 lda &a sta &b aif s:longa=1,.long aif &immed=0,.noimmed1 lda #>&string sta &b+1 mexit .noimmed1 lda &a+1 sta &b+1 .long mend MACRO &LAB ~UNPACKBYTES &L1,&W,&L2,&L3 &LAB PHA PL &L1 PW &W PL &L2 PL &L3 LDX #$2703 JSL $E10000 MEND MACRO &LAB PL &ADDR,&OFFSET &LAB ANOP LCLC &C LCLC &REST &C AMID &ADDR,1,1 AIF "&C"="#",.IMMEDIATE AIF "&C"="[",.ZEROPAGE AIF C:&OFFSET=0,.NOOFFSET AIF "&OFFSET"="S",.STACK PW &ADDR+2,&OFFSET PW &ADDR,&OFFSET MEXIT .NOOFFSET PW &ADDR+2 PW &ADDR MEXIT .IMMEDIATE &REST AMID &ADDR,2,L:&ADDR-1 dc I1'$F4',I2'(&REST)|-16' dc I1'$F4',I2'&REST' MEXIT .STACK PW &ADDR+2,S PW &ADDR+2,S MEXIT .ZEROPAGE LDY #&OFFSET+2 PW &ADDR,Y LDY #&OFFSET PW &ADDR,Y MEND