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 ; ÿ