OldComp.cz
https://oldcomp.cz/

BASIC: jak uvolnit co nejvíc RAM
https://oldcomp.cz/viewtopic.php?f=40&t=9450
Stránka 11

Autor:  misticjoe [ 24.09.2019, 00:14 ]
Předmět příspěvku:  BASIC: jak uvolnit co nejvíc RAM

Neberte mě úplně vážně, protože jsem byl odjakživa textovkář. Ale zase na druhou stranu, Spectrum má na textovky RAM habakuk. Jen jsem měl docela často problém, že jsem obdržel hlášku "out of memory". Jasně, bylo to za tunou PRINTů a IF THEN GOTO GOSUB TO NEXT RETURN atp. Ale stejně. Když jsem to uložil, tak reálně program zabíral třeba 12kB. Prostě prd. A to jsem mohl mít na začátku nějaký ten CLEAR 27635, nebo co to bylo přesně.
A proto se ptám - jak si pro BASIC uvolnit co nejvíc RAM, abych mohl napsat normální textovku. Prosím o radu jak pro 48kB, tak 128kB Spectrum. Díky

BTW: není na Spectru nějaký BASIC, co by se podobal AMOSu, který vlastně vychází z BASICu pro SAMa?

Autor:  Busy [ 24.09.2019, 05:45 ]
Předmět příspěvku:  Re: Jak se čistila RAM z BASICu?

misticjoe píše:
Neberte mě úplně vážně, protože jsem byl odjakživa textovkář. Ale zase na druhou stranu, Spectrum má na textovky RAM habakuk. Jen jsem měl docela často problém, že jsem obdržel hlášku "out of memory".
Asi si si narobil vela premennych...
misticjoe píše:
BTW: není na Spectru nějaký BASIC, co by se podobal AMOSu, který vlastně vychází z BASICu pro SAMa?
Neviem aky basic ma AMOS ale Samacky basic vychadza zo spektrackeho BetaBasic-u. Tak skus ten. Posledna verzia je (ak sa nemylim) 3.1

Autor:  misticjoe [ 24.09.2019, 10:38 ]
Předmět příspěvku:  Re: Jak se čistila RAM z BASICu?

Doda píše:
Nedelas nekdy omylem GOSUB misto GOTO, ze ktereho se nevracis? Tedy to asi vedet nebudes, ale mohlo by to byt tim.

Myslím, že GOSUBy jsem poctivě vracel.

Autor:  zxcygnus [ 24.09.2019, 11:50 ]
Předmět příspěvku:  Re: Jak se čistila RAM z BASICu?

dex píše:
A proč CLEAR?
Tím přeci snižuješ RAMTOP, a tedy zmenšuješ paměť dostupnou pro Basic a jeho proměnné.
Přesně tak.

Pro BASIC máš paměť zhruba od konce VRAM (16384+6912) + systémové proměnné BASICu do 65535.

Nejmenší RAMTOP pro nejkratší BASICové zavaděče bývá 24200 (s Betadiskem 24500). Největší RAMTOP je USR "a", což určuje začátek UDG sady (65535 - 168 bytů pro 21 znaků UDG), ale tu lze s klidem přepsat a nastavit RAMTOP maximální 65535. Po RESETu je RAMTOP právě USR "a". Po příkazu NEW se nemění. Příkaz NEW smaže BASIC, ale stroják nad RAMTOPem nechá netknutý. Softwarový ekvivalent RESETu je RANDOMIZE USR 0 (resp. 100 pro ISOROM, která resetem nemaže paměť).

Nastavíš-li RAMTOP 24100, tak to je sotva dost místa na jeden řádek s několika málo příkazy, něco jako 10 CLS: LOAD "soubor"CODE: RANDOMIZE USR VAL "24101" a žádné proměnné (píšu z hlavy bez ověřování, tak snad nekecám příliš +- pár bytů, ok?).

Často se např. nastavuje RAMTOP 32767, chceš-li do rychlé paměti od 32768 do 65535 umístit stroják a celou pomalou RAM použít pro BASIC.

Místo obsazené proměnnými v BASICu vymažeš příkazem CLEAR bez parametrů. Některé ROM umí zobrazit zbývající místo (ISOROM rovnítkem). Pak si samozřejmě musíš proměnné znovu nadefinovat, resp. spuštěním programu se tak stane... má to význam, pokud bys měl např. nadefinovaná velká pole.

Obsah polí nemusíš nutně definovat programem, ale můžeš je načíst jako soubor. Nicméně textovky většinou mají uložené texty v příkazech DATA odkud si je načítají pomocí READ a pomocí RESTORE se určuje řádek odkud číst. (Mrkni do Indiana Jones a Chrám zkázy, Bearlandu a dalších...)

Samotný Sinclair BASIC je docela dost úsporný. Trochu místa můžeš ušetřit leda psaním číselných konstant do VAL "číslo", ale u textové hry se obávám, že texty samotné zaberou tak jako tak většinu prostoru.

Autor:  PotPalo [ 24.09.2019, 12:01 ]
Předmět příspěvku:  Re: Jak se čistila RAM z BASICu?

misticjoe píše:
...jak si pro BASIC uvolnit co nejvíc RAM ...

Dať CLEAR čo najväčší. Volná pamäť pre BASIC (program+premenné+dočasná pamäť) je medzi 23755 a číslom v CLEAR (samozrejme mínus pár sto bytov).

A nevytvárať zbytočne moc premenných, treba ich recyklovať. :D Zvyčajne mám niekoľko pevných premenných programu, a potom takzvané pracovné, ktoré používam pre FOR...NEXT.

CLEAR 27000 je pre textovku v BASICu naozaj príliš nízko. Pozri si hru Chrobák Truhlík, tá je v BASICu, koľko to zaberá miesta.


edit: najmenšiu RAMTOP som videl 23999. Tam bolo v loaderi iba CLEAR, LOAD a USR...

Autor:  Busy [ 24.09.2019, 14:41 ]
Předmět příspěvku:  Re: Jak se čistila RAM z BASICu?

zxcygnus píše:
Některé ROM umí zobrazit zbývající místo
Ba priam vsetky. Prikazom
Kód:
PRINT 65535 - USR 7962
zistis kolko volneho miesta mas k dispozicii pre basic.

Pozor, pokial vyhodnujes vyraz s retazcami, mal by si mat dostatok priestoru pre ulozenie medzivysledkov.
Napriklad ked spravis nieco ako
Kód:
LET a$=b$+c$
tak by si mal mat minimalne dvojnasobok miesta nez zabera vysledok - jednak pre docasne ulozenie medzivysledku a dvak pre vytvorenie noveho a$ do ktoreho sa tento medzivysledok nasledne skopiruje.

Stránka 11 Všechny časy jsou v UTC + 1 hodina [ Letní čas ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/