Atari CIO Routines#
00010 .LI OFF
00020 *
00030 *
00040 IOCOM = $342
00050 IOBUFF = $344
00060 IOLEN = $348
00070 IOAUX1 = $34A
00080 IOAUX2 = $34B
00090 *
00100 CIO = $E456
00110 *
00120 *
00130 CLOSEF = 12
00140 OPENF = 3
00150 GETB = 7
00160 PUTB = 11
00170 FORMATF = 254
00180 *
00190 *
00200 *
00210 ------------------------------
00220 * Routinen zum Schliessen,
00230 * Oeffnen, Lesen von Bytes,
00240 * Schreiben von Bytes und
00250 * Formattieren von Datenfiles
00260 * bzw Disketten
00270 ------------------------------
00280 *
00290 *
00300 *
00310 ------------------------------
00320 * CLOSE:
00330 * Datenkanalnummer *16 im
00340 * <X> Register.
00350 *
00360 ------------------------------
00370 *
00380 CLOSE LDA #CLOSEF
00390 STA $342,X
00400 JSR CIO
00410 BPL .1
00420 JMP ERROR
00430 .1 RTS
00440 *
00450 ------------------------------
00460 *
00470 * OPEN:
00480 * <X> Register: Datenkanal*16+
00490 * OPENspezifikation
00500 * 4: Lesen
00510 * 6: Directory
00520 * 8: Schreiben
00530 * 9: Append
00540 * 12: Update
00550 *
00560 * <A> Register: LO-Byte des
00570 * Filenamepointers
00580 *
00590 * <Y> Register: HI-Byte des
00600 * Filenamepointers
00610 *
00620 ------------------------------
00630 *
00640 OPEN PHA
00650 TXA
00660 PHA
00670 AND #$70
00680 TAX
00690 PLA
00700 AND #$F
00710 STA IOAUX1,X
00720 LDA #0
00730 STA IOAUX2,X
00740 PLA
00750 STA IOBUFF,X
00760 TYA
00770 STA IOBUFF+1,X
00780 LDA #OPENF
00790 STA IOCOM,X
00800 JSR CIO
00810 BPL .1
00820 JMP ERROR
00830 .1 RTS
00840 *
00850 ------------------------------
00860 *
00870 * GETBYTES:
00880 * <A> Register: Page des Buffers
00890 * <X> Register: Datenkanal*16
00900 * <Y> Register: Laenge der Bytes
00910 ------------------------------
00920 *
00930 GETBYTES STA IOBUFF+1,X
00940 LDA #GETB
00950 STA IOCOM,X
00960 TYA
00970 STA IOLEN,X
00980 LDA #0
00990 STA IOBUFF,X
01000 STA IOLEN+1,X
01010 JMP CIO
01020 BPL .1
01030 JMP ERROR
01040 .1 RTS
01050 *
01060 ------------------------------
01070 *
01080 * PUTBYTES:
01090 * <A> Register: Page des Buffers
01100 * <X> Register: Datenkanal*16
01110 * <Y> Register: Laenge der Bytes
01120 ------------------------------
01130 *
01140 PUTBYTES STA IOBUFF+1,X
01150 LDA #PUTB
01160 STA IOCOM,X
01170 TYA
01180 STA IOLEN,X
01190 LDA #0
01200 STA IOBUFF,X
01210 STA IOLEN+1,X
01220 JMP CIO
01230 BPL .1
01240 JMP ERROR
01250 .1 RTS
01260 *
01270 ------------------------------
01280 *
01290 * FORMAT:
01300 * <A> Register: LO-Byte der De-
01310 * viceaddresse
01320 * <Y> Register: HI-Byte der De-
01330 * viceaddresse
01340 * <X> Register: Datenkanal*16
01350 *
01360 ------------------------------
01370 *
01380 FORMAT STA IOBUFF,X
01390 TYA
01400 STA IOBUFF+1,X
01410 LDA #FORMATF
01420 STA IOCOM,X
01430 JSR CIO
01440 BPL .1
01450 JMP ERROR
01460 .1 RTS
01470 *
01480 ------------------------------
01490 *
01500 ERROR TYA
01510 RTS
01520 *
01530 * Hier sollte eine eigene Feh-
01540 * lerroutine stehen.
01550 * <Y> Register haelt Fehler-
01560 * nummer.
Call CIO from Atari Basic#
00010 .LI OFF
00020 *
00030 ****************
00040 * *
00050 * CIO-Routinen *
00060 * *
00070 ****************
00080 *
00090 *
00100 *
00110 CIOV .EQ $E456
00120 *
00130 ICCOM .EQ $0342
00140 ICSTAT .EQ $0343
00150 ICBALO .EQ $0344
00160 ICBLEN .EQ $0348
00170 *
00180 COUNT .EQ $CD
00190 *
00200 *
00210 *
00220 *
00230 *
00240 *
00250 START PLA Parameterzahl holen
00260 *
00270 PLA Daten-
00280 PLA kanalnr.
00290 ASL holen
00300 ASL *16
00310 ASL als
00320 ASL Index nach
00330 TAX nach <X>
00340 *
00350 PLA Kommando
00360 PLA holen
00370 STA ICCOM,X
00380 *
00390 PLA Daten
00400 STA ICBALO+1,X
00410 PLA addresse
00420 STA ICBALO,X holen
00430 *
00440 PLA Daten-
00450 STA ICBLEN+1,X
00460 PLA laenge
00470 STA ICBLEN,X holen
00480 *
00490 EXEC JSR CIOV CIO aufrufen
00500 *
00510 LDA ICSTAT Status
00520 STA $D4 ins
00530 LDA #0 Ueberga-
00540 STA $D5 beregis-
00550 RTS ter