Rutina pro BGET a BPUT

Radek Štěrba, RASTER

Pokud ve svém programu potřebujete načíst nějaká data z daného souboru, nejčastěji se používá příkaz BGET. Způsob použití je následující:

N=1   ..číslo používaného kanálu
OPEN #N,4,0,"zařízení:název" ..otevření souboru pro čtení
BGET #N,adresa,početbytů  ..načtení dat do RAM od udané adresy
CLOSE #N  ..zavření souboru

Čtení dat tímto způsobem je velice rychlé a snadno použitelné. Jediným problémem ovšem je, že příkaz BGET není mezi vestavěnými příkazy BASIC ROM, ale je to příkaz TBASICu. V BASICu jsme omezeni pouze na funkci GET pro čtení jednoho bytu. Ta jde také použít, ale už ne tak efektně:

N=1   ..číslo používaného kanálu
OPEN #N,4,0,"zařízení:název" ..otevření souboru pro čtení
FOR X=adresa TO adresa+početbytů-1: GET#N,A: POKE X,A: NEXT X  ..načtení dat do RAM od udané adresy
CLOSE #N  ..zavření souboru

Načítání tímto způsobem bude trvat podstatně delší dobu.

Proto jsem vyrobil strojovou rutinu, která nabízí stejné možnosti jako příkazy BGET a BPUT. Její připojení k programu a použití je velice snadné:

  1. Načtěte svůj BASIC program.
  2. Přesvědčte se, že váš program nepoužívá řádek číslo 32767. Pokud ano, přemístěte ho jinam.
    Povelem ENTER"D:BGEBPU.LB" přihrajte jeden řádek (bude mít číslo 32767), na kterém se nachází deklarace a textová proměnná (string) s definicí strojové rutiny.
  3. Proveďte LIST 32767 a přemístěte tento řádek na začátek svého programu. (Na jeho původním místě ho zrušte!)
  4. Kdekoli v programu můžete používat volání strojového programu umístěného v textové proměnné pro funkci BGET nebo BPUT. Volání je následující:
BGET:
A=USR(ADR(BGP$),číslokanálu,4,adresa,početbytů)

BPUT:
A=USR(ADR(BGP$),číslokanálu,8,adresa,početbytů)

V proměnné A se v obou případech objeví status operace - tj. číslo chyby v případě, že nastane. Jinak je proměnná A menší než 128 (vše v pořádku).

Poznámky:
Rutina nahrazuje pouze BGET či BPUT. Povely OPEN a CLOSE musíte použít stejným způsobem jako dříve.
Neopomíjejte kontrolovat hodnotu proměnné, kterou rutina vrací. V případě chyby totiž nedojde k vybuzení ERRORu, ale projeví se to pouze v této hodnotě.
Nezapomeňte, že textovou proměnnou BGP$ nesmíte v žádném případě změnit. Vedlo by to k poškození strojové rutiny a při jejím volání k zablokování systému.
Tato rutina je určena k volnému používání...