Pro načítání či ukládání dat lze ve vlastním programu efektivně použít povely OPEN, BGET nebo BPUT a CLOSE. Všechny tyto příkazy jsou implementovány například v TBASICu (standardní Atari BASIC má místo BGET a BPUT pouze GET a PUT pro přečtení/zápis vždy jen jednoho bytu), my se však podíváme na provedení Assemblerové.
K tomu bych ještě rád dodal, že považuji za velmi dobré, když užitkové programy nabízí ukládání a načítání svých dat přes CIO - tedy přes zařízení:název. Daleko pohodlněji se s nimi pak pracuje a díky tomu je též možné využívat pro data libovolné médium (např. disk, kazeta, turbo - kilové bloky), stejně tak jako virtuální zařízení (např. v emulátorech přístup přes H: na harddisk), včetně případných dalších "budoucích" zařízení. A to vše bez potřeby jakýchkoliv zásahů do programu samotného a bez nutnosti vyrábět speciální verze pro jednotlivé typy médií.
Následující příklad obsahuje tři rutiny. První provede otevření souboru "D:FILENAME.EXT", druhá načtení 1024 bytů dat do paměti od adresy $5000 (20480 decimálně), třetí uzavře soubor. Vše je okomentované a velmi názorné, takže není problém upravit si zdrojový kód pro vlastní potřeby včetně obměny BGET za BPUT pro ukládání dat.
CIOV .EQU $E456 ;vektor CIO rutiny CHA .EQU $30 ;kanál IOCB3 ADR .EQU $5000 ;adresa začátku dat LEN .EQU $03FF ;délka dat ;OPEN #3,4,0,"D:FILENAME.EXT" OPEN LDX #CHA LDA #3 STA $0342,X LDA #4 ;4=čtení,8=zápis STA $034A,X LDA #0 STA $034B,X LDA #[<FNAME] STA $0344,X LDA #[>FNAME] STA $0345,X JSR CIOV ;v Y vrací status RTS FNAME .BYTE "D:FILENAME.EXT",0 ;BGET #3,ADR,LEN BGET LDX #CHA LDA #7 ;7=BGET,11=BPUT STA $0342,X LDA #[<ADR] ;DB adresa začátku STA $0344,X LDA #[>ADR] ;HB adresa začátku STA $0345,X LDA #[<LEN] ;DB počet bytů STA $0348,X LDA #[>LEN] ;HB počet bytů STA $0349,X JSR CIOV ;v Y vrací status RTS
Poznámka:
Po návratu z CIO rutiny obdržíme v Y registru status IO operace. Potřebujeme-li znát počet skutečně načtených bytů, například v případě, že při čtení došlo k chybě dosažením konce souboru, můžeme jej přečíst z adres:
LDA $0348,X ;DB počet bytů LDA $0349,X ;HB počet bytů CLOSE LDX #CHA LDA #$0C STA $0342,X JSR CIOV ;v Y vrací status RTS