OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů


Právě je 28.03.2024, 10:08

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 6 ] 
Autor Zpráva
 Předmět příspěvku: BASIC: jak uvolnit co nejvíc RAM
PříspěvekNapsal: 24.09.2019, 00:14 
Offline
Site Admin
Uživatelský avatar

Registrován: 11.05.2013, 23:48
Příspěvky: 10111
Bydliště: Praha
Has thanked: 1953 times
Been thanked: 1517 times
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?

_________________
Amiga/Amstrad/Atari/Commodore/Mac/Nintendo/PS/PC/Sega/Tandy/ZX


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Jak se čistila RAM z BASICu?
PříspěvekNapsal: 24.09.2019, 05:45 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
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


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Jak se čistila RAM z BASICu?
PříspěvekNapsal: 24.09.2019, 10:38 
Offline
Site Admin
Uživatelský avatar

Registrován: 11.05.2013, 23:48
Příspěvky: 10111
Bydliště: Praha
Has thanked: 1953 times
Been thanked: 1517 times
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.

_________________
Amiga/Amstrad/Atari/Commodore/Mac/Nintendo/PS/PC/Sega/Tandy/ZX


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Jak se čistila RAM z BASICu?
PříspěvekNapsal: 24.09.2019, 11:50 
Offline
Pan Generální
Uživatelský avatar

Registrován: 18.05.2013, 14:56
Příspěvky: 2331
Has thanked: 303 times
Been thanked: 637 times
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.

_________________
https://cygnus.speccy.cz ZX Spectrum 128k, Betadisk, DivIDE, ESXDOS


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Jak se čistila RAM z BASICu?
PříspěvekNapsal: 24.09.2019, 12:01 
Offline
Pan Generální

Registrován: 01.12.2017, 21:01
Příspěvky: 2062
Bydliště: BA-Petržalka :(
Has thanked: 18 times
Been thanked: 323 times
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...

_________________
Oznamy o novom príspevku mi na mail chodia iba sporadicky, takže keď sa nehlásim v diskusii, tak je to tým. V 80% nepríde mail vôbec.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Jak se čistila RAM z BASICu?
PříspěvekNapsal: 24.09.2019, 14:41 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
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.


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 6 ] 

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 4 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz