*My SYSTEXT *Version 6 OPEN=3 GETREC=5 GETCHR=7 PUTREC=9 PUTCHR=11 CLOSE=12 STATIS=13 SPECIL=14 DRAWLN=$11 FILLIN=$12 RENAME=$20 DELETE=$21 FORMAT=$22 LOCKFL=$23 UNLOCK=$24 POINT=$25 NOTE=$26 IOCFRE=$FF APPEND=$01 DIRECT=$02 OPNRD=$04 OPNWT=$08 OPNRW=$0C MXDMOD=$10 INSCLR=$20 SCREDT='E' KBD='K' DISPLY='S' PRINTR='P' CASSET='C' MODEM='M' DISK='D' EOL=$9B CR=EOL Z=$00 TRUE=$FFFF ON=TRUE FALSE=0 OFF=FALSE *--------------- CASINI=$02 WARMST=$08 BOOT?=$09 DOSVEC=$0A DOSINI=$0C APPMHI=$0E POKMSK=$10 BRKKEY=$11 RTCLOK=$12 SOUNDR=$41 ATRACT=$4D DRKMSK=$4E COLRSH=$4F VDSLST=$200 VKEYBD=$208 VTIMR1=$210 VTIMR2=$212 VTIMR4=$214 VIMIRQ=$216 CDTMV1=$218 CDTMV2=$21A CDTMV3=$21C CDTMV4=$21E CDTMV5=$220 VVBLKI=$222 VVBLKD=$224 CDTMA1=$226 CDTMA2=$228 CDTMF3=$22A SRTIMR=$22B CDTMF4=$22C CDTMF5=$22E SDMCTL=$22F SDLSTL=$230 SDLSTH=$231 SSKCTL=$232 COLDST=$244 GPRIOR=$26F PADDL0=$270 STICK0=$278 PTRIG0=$27C STRIG0=$284 SHFLK=$2BE PCOLR0=$2C0 PCOLR1=$2C1 PCOLR2=$2C2 PCOLR3=$2C3 COLOR0=$2C4 COLOR1=$2C5 COLOR2=$2C6 COLOR3=$2C7 COLOR4=$2C8 MEMLO=$2E7 CRSINH=$2F0 CHACT=$2F3 CHBAS=$2F4 CH=$2FC DDEVIC=$300 DUNIT=$301 DCOMND=$302 DSTATS=$303 DBUFLO=$304 DBUFHI=$305 DTIMLO=$306 DBYTLO=$308 DBYTHI=$309 DAUX1=$30A DAUX2=$30B ICCOM=$342 ICSTA=$343 ICBAL=$344 ICBAH=$345 ICPTL=$346 ICPTH=$347 ICBLL=$348 ICBLH=$349 ICAX1=$34A ICAX2=$34B DSKINV=$E453 CIOV=$E456 IOCB0=$00 IOCB1=$10 IOCB2=$20 IOCB3=$30 IOCB4=$40 IOCB5=$50 IOCB6=$60 IOCB7=$70 SIOV=$E459 SETVBV=$E45C SETMR1=1 SETMR2=2 SETMR3=3 SETMR4=4 SETMR5=5 SETIMM=6 SETDEF=7 XITVBL=$E462 WARMSV=$E474 COLDSV=$E477 HPOSP0=$D000 HPOSP1=$D001 HPOSP2=$D002 HPOSP3=$D003 M0PF=$D000 M1PF=$D001 M2PF=$D002 M3PF=$D003 HPOSM0=$D004 HPOSM1=$D005 HPOSM2=$D006 HPOSM3=$D007 P0PF=$D004 P1PF=$D005 P2PF=$D006 P3PF=$D007 M0PL=$D008 M1PL=$D009 M2PL=$D00A M3PL=$D00B SIZEP0=$D008 SIZEP1=$D009 SIZEP2=$D00A SIZEP3=$D00B P0PL=$D00C P1PL=$D00D P2PL=$D00E P3PL=$D00F SIZEM=$D00C GRAFP0=$D00D TRIG0=$D010 TRIG1=$D011 TRIG2=$D012 TRIG3=$D013 GRAFM=$D011 COLPM0=$D012 COLPF0=$D016 COLPF1=$D017 COLPF2=$D018 COLPF3=$D019 COLBK=$D01A PRIOR=$D01B VDELAY=$D01C GRACTL=$D01D HITCLR=$D01E CONSOL=$D01F POT0=$D200 AUDF1=$D200 AUDF2=$D202 AUDF3=$D204 AUDF4=$D206 AUDC1=$D201 AUDC2=$D203 AUDC3=$D205 AUDC4=$D207 AUDCTL=$D208 ALLPOT=$D208 KBCODE=$D209 STIMER=$D209 RANDOM=$D20A SERIN=$D20A SKREST=$D20A POTGO=$D20B SEROUT=$D20C IRQEN=$D20E IRQST=$D20E SKCTL=$D20F SKSTAT=$D20F PORTA=$D300 PORTB=$D301 PACTL=$D302 PBCTL=$D303 DMACTL=$D400 CHACTL=$D401 DLISTL=$D402 DLISTH=$D403 HSCROL=$D404 VSCROL=$D405 PMBASE=$D407 CHBASE=$D409 WSYNC=$D40A VCOUNT=$D40B NMIEN=$D40E NMIRES=$D40F NMIST=$D40F DLBL1=$00 DLBL2=$10 DLBL3=$20 DLBL4=$30 DLBL5=$40 DLBL6=$50 DLBL7=$60 DLBL8=$70 DLJMP=$01 DLJVB=$41 DLHSCR=$10 DLVSCR=$20 DLLMS=$40 DLINT=$80 DLAM2=2 DLAM3=3 DLAM4=4 DLAM5=5 DLAM6=6 DLAM7=7 DLAM8=8 DLAM9=9 DLAM10=10 DLAM11=11 DLAM12=12 DLAM13=13 DLAM14=14 DLAM15=15 DLBM0=DLAM2 DLBM1=DLAM6 DLBM2=DLAM7 DLBM3=DLAM8 DLBM4=DLAM9 DLBM5=DLAM10 DLBM6=DLAM11 DLBM7=DLAM13 DLBM8=DLAM15 SWSTRT=$01 SWSEL=$02 SWOPT=$04 JYR=$08 JYL=$04 JYB=$02 JYF=$01 *Macro library *Version9 * Data placement MEMMACRO address ORG%1+offset LOC%1+develop ENDM USEMACRO address :otmpset*O :ltmpset*L MEM%1 ENDM USEENDMACRO org:otmp loc:ltmp ENDM * 8-bit arithmetic ADDMACRO 8con/loc [,index reg] %Lclc IF['[%2]'='[X]']OR['[%2]'='[Y]']  adc%1,%2 ELSE  adc%1 ENDIF ENDM SUBMACRO 8con/loc [,index reg] %Lsec IF['[%2]'='[X]']OR['[%2]'='[Y]']  sbc%1,%2 ELSE  sbc%1 ENDIF ENDM DIVMACRO pwrof2 %Llsra %MCset%1/2 IF%MC>1  DIV%MC ELSE %MC set0 ENDIF ENDM MULMACRO pwrof2 %Lasla %MCset%1/2 IF%MC>1  MUL%MC ELSE %MC set0 ENDIF ENDM BMPMACRO loc [,index reg] ,8con IF['[%2]'='[X]']OR['[%2]'='[Y]'] %L lda%1,%2  add#%3  sta%1,%2 ELSE %L lda%1  add#%2  sta%1 ENDIF ENDM BAKMACRO loc [,index reg] ,8con IF['[%2]'='[X]']OR['[%2]'='[Y]'] %L lda%1,%2  sub#%3  sta%1,%2 ELSE %L lda%1  sub#%2  sta%1 ENDIF ENDM * 16-bit arithmetic ADWMACRO loc1,loc2,destloc %Llda%1 add%2 sta%3 lda%1+1 adc%2+1 sta%3+1 ENDM SBWMACRO loc1,loc2,destloc %Llda%1 sub%2 sta%3 lda%1+1 sbc%2+1 sta%3+1 ENDM BMPWMACRO address,16con %Llda%1 add#low[%2] sta%1 IF[high %2]=0  bcc?%K  inc%1+1 ?%K=* ELSE  lda%1+1  adc#high[%2]  sta%1+1 ENDIF ENDM BAKWMACRO address,16con %Llda%1 sub#low[%2] sta%1 IF[high %2]=0  bcs?%K  dec%1+1 ?%K=* ELSE  lda%1+1  sbc#high[%2]  sta%1+1 ENDIF ENDM DEWMACRO word %Llda%1 bne?%K dec%1+1 ?%Kdec%1 ENDM INWMACRO word %Linc%1 bne?%K inc%1+1 ?%K=* ENDM * Conditional branches BGEMACRO loc %Lbcs%1 ENDM BGTMACRO loc %Lbcc?%K bne%1 ?%K=* ENDM BLEMACRO loc %Lbcc%1 beq%1 ENDM BLTMACRO loc %Lbcc%1 ENDM BNZMACRO loc %Lbne%1 ENDM BZMACRO loc %Lbeq%1 ENDM * Conditional jumps JMIMACRO loc %Lbpl?%K jmp%1 ?%K=* ENDM JPLMACRO loc %Lbmi?%K jmp%1 ?%K=* ENDM JCSMACRO loc %Lbcc?%K jmp%1 ?%K=* ENDM JCCMACRO loc %Lbcs?%K jmp%1 ?%K=* ENDM JGEMACRO loc %Lblt?%K jmp%1 ?%K=* ENDM JGTMACRO loc %Lble?%K jmp%1 ?%K=* ENDM JLEMACRO loc %Lbgt?%K jmp%1 ?%K=* ENDM JLTMACRO loc %Lbge?%K jmp%1 ?%K=* ENDM JNEMACRO loc %Lbz?%K jmp%1 ?%K=* ENDM JNZMACRO loc %Lbz?%K jmp%1 ?%K=* ENDM JEQMACRO loc %Lbnz?%K jmp%1 ?%K=* ENDM JZMACRO loc %Lbnz?%K jmp%1 ?%K=* ENDM * Auto decrement and branches DXPLMACRO loc %Ldex IF%1='*'  bpl*-1 ELSE  IF[[*>%1]&[[*-%1]<126]]OR[[*<%1]&[[%1-*]<129]]  bpl%1  ELSE  jpl%1  ENDIF ENDIF ENDM DYPLMACRO loc %Ldey IF%1='*'  bpl*-1 ELSE  IF[[*>%1]&[[*-%1]<126]]OR[[*<%1]&[[%1-*]<129]]  bpl%1  ELSE  jpl%1  ENDIF ENDIF ENDM DXNZMACRO loc %Ldex IF%1='*'  bnz*-1 ELSE  IF[[*>%1]&[[*-%1]<126]]OR[[*<%1]&[[%1-*]<129]]  bnz%1  ELSE  jnz%1  ENDIF ENDIF ENDM DYNZMACRO loc %Ldey IF%1='*'  bnz*-1 ELSE  IF[[*>%1]&[[*-%1]<126]]OR[[*<%1]&[[%1-*]<129]]  bnz%1  ELSE  jnz%1  ENDIF ENDIF ENDM DCPLMACRO address,loc %Ldec%1 IF%2='*'  IF%1<$100  bpl*-2  ELSE  bpl*-3  ENDIF ELSE  IF[[*>%2]&[[*-%2]<126]]OR[[*<%2]&[[%2-*]<129]]  bpl%2  ELSE  jpl%2  ENDIF ENDIF ENDM DCNZMACRO address,loc %Ldec%1 IF%2='*'  IF%1<$100  bnz*-2  ELSE  bnz*-3  ENDIF ELSE  IF[[*>%2]&[[*-%2]<126]]OR[[*<%2]&[[%2-*]<129]]  bnz%2  ELSE  jnz%2  ENDIF ENDIF ENDM * 8-bit comparison CPIMACRO loc [,index reg] ,8con IF['[%2]'='[X]']OR['[%2]'='[Y]'] %L lda%1,%2  cmp#%3 ELSE %L lda%1  cmp#%2 ENDIF ENDM CPBMACRO loc1,loc2 %Llda%1 cmp%2 ENDM * 16-bit comparison CPWMACRO loc1,loc2 %Llda%1+1 cmp%2+1 bne?%K lda%1 cmp%2 ?%K=* ENDM CPIWMACRO loc,16con %Llda%1+1 cmp#high[%2] bne?%K lda%1 cmp#low[%2] ?%K=* ENDM * Memory manipulation STBMACRO 8con,loc [,index reg] %Llda#%1 IF['[%3]'='[X]']OR['[%3]'='[Y]']  sta%2,%3 ELSE  sta%2 ENDIF ENDM MVBMACRO loc1 [,index reg] ,loc2 [,index reg] IF['[%4]'='[X]']OR['[%4]'='[Y]'] %L lda%1,%2  sta%3,%4 ELSE  IF['[%2]'='[X]']OR['[%2]'='[Y]'] %L lda%1,%2  sta%3  ELSE %L lda%1  IF['[%3]'='[X]']OR['[%3]'='[Y]']  sta%2,%3  ELSE  sta%2  ENDIF  ENDIF ENDIF ENDM MVWMACRO word1,word2 %Llda%1 sta%2 lda%1+1 sta%2+1 ENDM STWMACRO 16con,word %Llda#low[%1] sta%2 lda#high[%1] sta%2+1 ENDM * Stack manipulation PHRMACRO %Lpha txa pha tya pha ENDM PLRMACRO %Lpla tay pla tax pla ENDM PHXMACRO %Ltxa pha ENDM PLXMACRO %Lpla tax ENDM PHYMACRO %Ltya pha ENDM PLYMACRO %Lpla tay ENDM * Miscellaneous ATTRACTMACRO %Leorcolrsh anddrkmsk ENDM *Files macro library *Version 3 * Close file FCLOSEMACRO iocb %L IF'%1'<>'X' ldx#%1*$10 ENDIF stbclose,iccom,x jsrciov ENDM * Open file FOPENMACRO iocb,devname,aux1,aux2 %L IF'%1'<>'X' ldx#%1*$10 ENDIF stbopen,iccom,x stblow[%2],icbal,x stbhigh[%2],icbah,x stb%3,icax1,x stb%4,icax2,x jsrciov ENDM * Get character or record * Type = "CHR" or "REC" * If no length, then length = $FFFF FGETMACRO iocb,type,address,length %L IF'%1'<>'X' ldx#%1*$10 ENDIF IF'%2'='CHR' stbgetchr,iccom,x ELSE stbgetrec,iccom,x ENDIF stblow[%3],icbal,x stbhigh[%3],icbah,x IF'[%4]'<>'[]' stblow[%4],icbll,x stbhigh[%4],icblh,x ELSE stb$ff,icbll,x staicblh,x ENDIF jsrciov ENDM FGET1MACRO iocb %L IF'%1'<>'X' ldx#%1*$10 ENDIF stbgetchr,iccom,x stb0,icbll,x staicblh,x jsrciov ENDM * Put character or record * Type = "CHR" or "REC" * If no length, then length = $FFFF FPUTMACRO iocb,type,address,length %L IF'%1'<>'X' ldx#%1*$10 ENDIF IF'%2'='CHR' stbputchr,iccom,x ELSE stbputrec,iccom,x ENDIF stblow[%3],icbal,x stbhigh[%3],icbah,x IF'[%4]'<>'[]' stblow[%4],icbll,x stbhigh[%4],icblh,x ELSE stb$ff,icbll,x staicblh,x ENDIF jsrciov ENDM FPUT1MACRO iocb %L IF'%1'<>'X' ldx#%1*$10 ENDIF pha stbputchr,iccom,x stb0,icbll,x staicblh,x pla jsrciov ENDM * "Special" command (XIO...) FSPECMACRO iocb,command,devname,aux1,aux2 %L IF'%1'<>'X' ldx#%1*$10 ENDIF stb%2,iccom,x stblow[%3],icbal,x stbhigh[%3],icbah,x stb%4,icax1,x stb%5,icax2,x jsrciov ENDM * File status * If devname, then open & close iocb FSTATMACRO iocb,devname %L IF'%1'<>'X' ldx#%1*$10 ENDIF stbstatis,iccom,x IF'[%2]'<>'[]' stblow[%3],icbal,x stbhigh[%3],icbah,x ENDIF jsrciov ENDM