34. Bloky pamäte: DPEEK, DPOKE, MOVE, -MOVE, BPUT, BGET, %PUT, %GET

Na čo to je

PEEK a POKE pracujú s jedným bajtom. Turbo-BASIC XL pridáva príkazy pre dva bajty naraz a pre celé kusy pamäte: skopírovať ich inam, zapísať do súboru, prečítať zo súboru. Čo v Atari BASICu trvalo slučkou sekundy, je tu jeden príkaz.

Ako sa to píše

ZápisČo robí
DPEEK(a)funkcia: dvojbajtové číslo z adries a a a+1 – to isté ako PEEK(a)+256*PEEK(a+1)
DPOKE a,vzapíše číslo 0–65535 do dvoch bajtov
MOVE odkiaľ,kam,koľkoskopíruje koľko bajtov; postupuje od začiatku
-MOVE odkiaľ,kam,koľkoto isté, ale postupuje od konca
BPUT #k,adresa,koľkozapíše kus pamäte do súboru
BGET #k,adresa,koľkoprečíta kus súboru do pamäte
%PUT #k,číslozapíše číslo do súboru v šiestich bajtoch, tak ako ho drží pamäť
%GET #k,premennáprečíta ho späť

Celý program

Súbor examples/blocks.tbas:

Turbo Basic XL
10 REM DPEEK, DPOKE, MOVE, BPUT, BGET, %PUT, %GET
20 PRINT "The screen is at ";DPEEK(88)
30 DPOKE 1536,12345
40 PRINT DPEEK(1536);" = ";PEEK(1536);" + 256*";PEEK(1537)
50 DIM A$(12),B$(12)
60 A$="HELLO, WORLD":B$="............"
70 MOVE ADR(A$),ADR(B$),5
80 PRINT B$
90 -MOVE ADR(A$),ADR(A$)+2,10
100 PRINT A$
110 REM A block of memory and a number into a file and back
120 OPEN #1,8,0,"D:BLOCK.DAT"
130 BPUT #1,ADR(B$),12
140 %PUT #1,3.14159
150 CLOSE #1
160 B$="????????????":X=0
170 OPEN #1,4,0,"D:BLOCK.DAT"
180 BGET #1,ADR(B$),12
190 %GET #1,X
200 CLOSE #1
210 PRINT B$;" ";X

Preklad a spustenie

Basic26 blocks.tbas --sim

Čo uvidíš

The screen is at 48192
12345 = 57 + 256*48
HELLO.......
HEHELLO, WOR
HELLO....... 3.14159

Ako to funguje

Na čo sa MOVE používa

Časté chyby

Čo sa staloČo sa stane
MOVE pri prekrývaní smerom nahorzačiatok bloku sa rozkopíruje cez celý zvyšok
viac bajtov, než má cieľ miestaprepíše sa, čo leží za ním – iné premenné, program
BGET za koncom súboruERROR- 136
%GET číta niečo, čo nezapísal %PUTnezmyselné číslo
poradie MOVE kam,odkiaľkopíruje sa opačne; prvý je zdroj
DPOKE hodnoty nad 65535ERROR- 3

Vyskúšaj si

  1. Ulož pole desiatich čísel do súboru cez %PUT v slučke a prečítaj ho späť.
  2. Vyplň reťazec hviezdičkami: zapíš jednu na začiatok a zvyšok sprav cez MOVE s prekrytím o jeden bajt. (Tu sa „chyba“ z prvého riadka tabuľky hodí.)
  3. V emulátore: zaplň obrazovku textom a cez MOVE skopíruj jej hornú polovicu do dolnej.

Zhrnutie

Späť: 33. Čas · Ďalej: 35. Kruhy a výplne