Atari CIO Routines

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