0100 ; CIOMAC.LIB›0110 ;›0120 CIOMAC›0130 ;›0140 .IF .NOT .DEF OSEQU›0150 .ERROR "must include OSEQU.M65"›0160 .ENDIF ›0170 ;›0180 ; MACRO: @CH›0190 ;›0200 .MACRO @CH ›0210 .IF %1>7›0220 LDA %1›0230 ASL A›0240 ASL A›0250 ASL A›0260 ASL A›0270 TAX ›0280 .ELSE ›0290 LDX #%1*16›0300 .ENDIF ›0310 .ENDM ›0320 ;›0330 ;›0340 ;›0350 ; MACRO: @CV›0360 ;›0370 ; Loads Constant or Value into›0380 ; accumultor (A-register)›0390 ;›0400 .MACRO @CV ›0410 .IF %1<256›0420 LDA #%1›0430 .ELSE ›0440 LDA %1›0450 .ENDIF ›0460 .ENDM ›0470 ;›0480 .MACRO @LA ›0490 @CV %1›0500 .ENDM ›0510 ;›0520 ;›0530 ; MACRO: @FL›0540 ;›0550 ; @FL is used to establish a›0560 ; filespec (file name)›0570 ;›0580 .MACRO @FL ›0590 .IF %1<256›0600 JMP *+%1+4›0610 @F .BYTE %$1,0›0620 LDA # <@F›0630 STA ICBAL,X›0640 LDA # >@F›0650 STA ICBAH,X›0660 .ELSE ›0670 LDA # <%1›0680 STA ICBAL,X›0690 LDA # >%1›0700 STA ICBAH,X›0710 .ENDIF ›0720 .ENDM ›0730 ;›0740 ;›0750 ;›0760 ; MACRO: XIO›0770 ;›0780 ; FORM: XIO cmd,ch[,aux1,aux2][,filespec]›0790 ;›0800 ; performs I/O operations by›0810 ; itself or as called by other›0820 ; macros. Used as BASIC XIO.›0830 ;›0840 .MACRO XIO ›0850 @CH %2›0860 @CV %1›0870 STA ICCOM,X›0880 .IF %0>=4›0890 @CV %3›0900 STA ICAX1,X›0910 @CV %4›0920 STA ICAX2,X›0930 .ELSE ›0940 LDA #0›0950 STA ICAX1,X›0960 STA ICAX2,X›0970 .ENDIF ›0980 .IF %0=2 .OR %0=4›0990 @FL "S:"›1000 .ELSE ›1010 @@IO .= %0›1020 @FL %$(@@IO)›1030 .ENDIF ›1040 JSR CIOV›1050 .ENDM ›1060 ;›1070 ;›1080 ;›1090 ; MACRO: OPEN›1100 ;›1110 ; FORM: OPEN ch,aux1,aux2,filespec›1120 ;›1130 ; will attempt to open the given›1140 ; channel as in the BASIC open›1150 ; command›1160 ;›1170 .MACRO OPEN ›1180 .IF %4<256›1190 XIO OPEN,%1,%2,%3,%$4›1200 .ELSE ›1210 XIO OPEN,%1,%2,%3,%4›1220 .ENDIF ›1230 .ENDM ›1240 ;›1250 ;›1260 ;›1270 ; MACROS: BGET and BPUT›1280 ;›1290 ; FORM: BGET ch,buf,len›1300 ; BPUT ch,buf,len›1310 ;›1320 ; performs block I/O›1330 ;›1340 ; first: a common macro›1350 ;›1360 .MACRO @GP ›1370 @CH %1›1380 LDA #%4›1390 STA ICCOM,X›1400 LDA # <%2›1410 STA ICBAL,X›1420 LDA # >%2›1430 STA ICBAH,X›1440 LDA # <%3›1450 STA ICBLL,X›1460 LDA # >%3›1470 STA ICBLH,X›1480 JSR CIOV›1490 .ENDM ›1500 ;›1510 .MACRO BGET ›1520 @GP %1,%2,%3,GETCHR›1530 .ENDM ›1540 ;›1550 .MACRO BPUT ›1560 @GP %1,%2,%3,PUTCHR›1570 .ENDM ›1580 ;›1590 ;›1600 ;›1610 ; MACRO: PRINT›1620 ;›1630 ; FORM: PRINT ch[,buffer[,length]]›1640 ;›1650 ; used to print text. Length›1660 ; must be given or else buffer›1670 ; must be a literal string in›1680 ; quotes. Like BASIC PRINT #.›1690 ;›1700 .MACRO PRINT ›1710 .IF %0>1›1720 .IF %2<128›1730 JMP *+4+%2›1740 @IO .BYTE %$2,$9B›1750 @GP %1,@IO,%2+1,PUTREC›1760 .ELSE ›1770 .IF %0=2›1780 @GP %1,%2,255,PUTREC›1790 .ELSE ›1800 @GP %1,%2,%3,PUTREC›1810 .ENDIF ›1820 .ENDIF ›1830 .ELSE ›1840 JMP *+4›1850 @IO .BYTE $9B›1860 @GP %1,@IO,1,PUTREC›1870 .ENDIF ›1880 .ENDM ›1890 ;›1900 ;›1910 ;›1920 ; MACRO: INPUT›1930 ;›1940 ; FORM: INPUT ch,buf,len›1950 ;›1960 ; performs input as in BASIC›1970 ; INPUT command›1980 ;›1990 .MACRO INPUT ›2000 .IF %0=2›2010 @GP %1,%2,255,GETREC›2020 .ELSE ›2030 @GP %1,%2,%3,GETREC›2040 .ENDIF ›2050 .ENDM ›2060 ;›2070 ;›2080 ;›2090 ; MACRO: CLOSE›2100 ;›2110 ; FORM: CLOSE ch›2120 ;›2130 ; closes channel ch›2140 ;›2150 .MACRO CLOSE ›2160 @CH %1›2170 LDA #CLOSE›2180 STA ICCOM,X›2190 JSR CIOV›2200 .ENDM ›2210 ;›2220 ;›2230 ;›2240 ; MACRO: P›2250 ;›2260 ; FORM: P [ch,] buffer›2270 ;›2280 ; Calls PRINT and uses channel 0›2290 ; if only one parameter is given›2300 ; buffer may be a literal string›2310 ; in quotes. Like BASIC ?.›2320 ;›2330 .MACRO P ›2340 .IF %0>2›2350 ERROR "P: Two parameters max"›2360 .ELSE ›2370 .IF %0=2›2380 .IF %2<128›2390 PRINT %1,%$2›2400 .ELSE ›2410 PRINT %1,%2›2420 .ENDIF ›2430 .ELSE ›2440 .IF %0=0›2450 PRINT 0›2460 .ELSE ›2470 .IF %1<128›2480 PRINT 0,%$1›2490 .ELSE ›2500 PRINT 0,%1›2510 .ENDIF ›2520 .ENDIF ›2530 .ENDIF ›2540 .ENDIF ›2550 .ENDM ›2560 ;›2570 ;›2580 ;›2590 ; MACRO: I›2600 ;›2610 ; FORM: I buffer›2620 ;›2630 ; same as BASIC input except›2640 ; for ch 0 only for up to›2650 ; 40 bytes›2660 ;›2670 .MACRO I ›2680 INPUT 0,%1,40›2690 .ENDM ›2700 ;›2710 ;›2720 ;›2730 ; MACROS: GET & PUT›2740 ;›2750 ; FORM: (GET or PUT) ch,buffer›2760 ;›2770 ; Same as BASIC GET # or PUT #.›2780 ;›2790 .MACRO GET ›2800 BGET %1,%2,1›2810 .ENDM ›2820 .MACRO PUT ›2830 BPUT %1,%2,1›2840 .ENDM ›2850 ;›2860 ;›2870 ;›2880 ; MACRO: LP›2890 ;›2900 ; FORM: LP [string]›2910 ;›2920 ; same as BASIC LP.›2930 ;›2940 .MACRO LP ›2950 OPEN 7,8,0,"P:"›2960 .IF %0=1›2970 PRINT 7›2980 .ELSE ›2990 PRINT 7,%2›3000 .ENDIF ›3010 CLOSE 7›3020 .ENDM ›3030 ;›3040 ;›3050 ;›3060 ;›3070 ; MACRO: POS›3080 ;›3090 ; FORM: POS X,Y›3100 ;›3110 ; same as BASIC position›3120 ;›3130 .MACRO POS ›3140 LDA # <%1›3150 STA COLCRS›3160 LDA # >%1›3170 STA COLCRS+1›3180 LDA #%2›3190 STA ROWCRS›3200 .ENDM ›3210 ;›3220 ;›3230 ;›