No, soudím, že tohoto se bát nemusíš :) Fakt dobrý.
Mimochodem, když jsi psal o Commodore, tak jsem se neudržel, málem jsem se přizabil na otočném křesle s kolečky, když jsem šplhal po skříni, ale našel jsem… svůj první počítač. Škoda jen, že už k němu nemám zdroj… :-(
Jakozto byvaly atarista netusim co dela POP. Oni snad na applisti meli v basicu nejaky zasobnik?
S temi floaty v atari-basicu: Je pravda ze vypocet desive zpomalovaly, jeste navic pouzivaly BCD kod pro ulozeni mantissy, takze i plytvaly pameti, ale na druhou stranu to melo nasledek ze kdyz nekdo napsal
for a=1 to 10 step 0.1
tak to fungovalo jak by zacatecnik ocekaval, takze to melo aspon tuhle pedagogickou vyhodu.
Jo a ty floatovy rutiny nebyly soucasti tech 8kB kde byl BASIC, ale sidlily v 16kB OS-ROM, nekde pobliz te diry kam byly namapovany periferie. Vsechny ty rutiny se vesly do 4kB. Ted teda nevim jestli k nim patrily i funkce (log, exp, sin, cos, atd.) ale +,–,*,/ tam bylo urcite. Aspon si to takhle pamatuju, ale je to uz dlouho tak me neberte moc vazne.
Taky si nepamatuji, ze bych to casto pouzival, ale konstrukci typu:
100 IF X<0 THEN POP:GOTO 200
si pamatuju.
Ten error 13 mi pripomel dalsi skvelou vec v BASICu a to prikaz TRAP, kterym bylo mozne implementovat TRY-CATCH-FINALLY. Cislo chyby bylo ulozene v nejake bunce pameti v zero page, tusim adresa 195(?) a kdyz si clovek navic cisla chyb dal do promenych, bylo to dost citelne.
> Ted teda nevim jestli k nim patrily i funkce (log, exp, sin, cos, atd.)
To si najdeš tady
http://www.atari8.cz/calp/data/pha_pr_8/
Advan basic se dá stáhnout tady:
http://advan.oldos.net/
Dobrý optimalizující kompilátor – a navíc v kódu lze kombinovat BASIC a assembler, v assembleru se dá přistupovat k BASICovým proměnným.
nikdy jsem Advan Basic nezkousel, protoze jsem mezitim zacal laborovat se strojakm, ale vypada to dost uchvatne:
„Advan BASIC was already pretty fast. Now it's the fastest BASIC in Atari history. In our Sieve Benchmark, the Advan Optimizing Compiler is about four times faster than the MMG Compiler, six times faster than regular Advan, 20 times faster than compiled Turbo-BASIC XL and 120 times faster than uncompiled Atari BASIC. In fact, it's more than half the speed of ACTION!- that's getting real close to pure assembly language.“
Pokud byl skutecne az 120× rychlejsi nez Atari Basic a pametove to bylo vyhodne, tak mozna bylo lepsi se na strojak nakonec vykaslat :-)
Mozna by bylo dobre jeste dodat, ze Basic, stejne jako DOS pro Atari vyvinula firma Shepardson Microsystems. Ve vyvoji basicu pak pokracovala OSS, ktera vydala Basic XL a XE. U nas jsem tyto jazyky nikdy nevidel, ale s jejich assemblerem MAC/65 se asi setkal kazdy osmibitovy atarista.
Ja uz myslel, ze se k memu prvnimu pocitaci (C64) tato rubrika nedostane a je to tady. Moc diki za clanek :)
Jen bych dodal, ze Basic se pozdeji dostal do min vykonnych stroju jako napr. http://en.wikipedia.org/wiki/Sharp_EL-5120 kterou jsem vlastnil a bylo az k nevire, co vsechno se dalo na teto kalkulacce naprogramovat. Od jednoduchych her, az po screensaver s nahodne se obejevujicima hvezdickama, ale ja delal v te dobe hlavne aplikace do skoly.
Na stredni stihla projet celou tridu a vsichni meli z te pisemky jednicku. A aby ne, kdyz jenom vlozili parametry ktere meli v zadani a pak jen mackali Enter a opisovali co vydeli na display(i).
Ucitelka byla prijemne prekvapena jak se vsichni „pripravili“ a ja taky, jakozto test aplikace v produkcnim prostedi probehl bez problemu :D
Diky moc za doplneni. Jeste doplnim toto doplneni :-) o informaci, ze OSS vydala jazyk Action!, coz byla na osmibitovych Atarkach docela bomba. V podstate slo o orezane Cecko a Pascal (chybely tusim struktury, FP a spousta runtime funkci), ale prekladalo se primo do stojaku a vysledek byl docela rychly.
Pro ZX Spectrum byly minimálně dva kompilery HiSoft BASIC compiler a IUC88+.
K IUC88+ kdysi vyšel podrobný návod … už nevím kde, nejspíš v ZX Magazínu. Kompilací skutečně došlo k výraznému zrychlení, ale pokud vím, tak kompiler měl omezení, jedním z nich byla tuším možnost používat pouze integer (16bit). Naopak byl docela malý a vměstnal se do paměti spolu se zdrojovým kódem i zkompilovaným výsledkem. Detaily si už nepamatuju, nepoužil jsem ho víc než 15 let.
Nedávno som nahliadol do svojich starých denníkov (ehm), a dočítal sa ako som sa pobavil na popise neexistujúceho jazyka Tera Basic (alebo Tear?), pravdepodobne v časopise Mikrobáze. Viem že tam boli popísané príkazy ako „smoke“ (počítač začne dymiť), a myslím že tam bolo aj niečo ako:
if ja then high score
if kolega then zero
… nespomenie si na to niekto?
Jo a ešte k obrázku „Obrázek 17: Úvodní obrazovka interpretru jazyka BASIC na počítači Commodore C64.“ – internetový prezerač Opera dlho obsahoval uživateľký CSS, ktorý stránky zobrazoval v takomto štýle, volalo sa to „nostalgia“ a už nejaký čas je to preč.
http://wiki.operacesky.net/Opera_Lover_-_4-7_den-Obsah#Nostalgie_.7Bnostalgia.css.7D
Zajímavé, vždy jsem si myslel , že první dílo Microsoftu byl BASIC pro CP/M, což jsem si myslel zřejmě špatně.
Neplánujete napsat něco jako „Softwarové dějiny“ ? ( třeba jen pro Home a PC ) Jak to vlastně bylo s Microsoftem, Digital research atd. Co to byl ten ISIS2.
Jako to bylo s DOSem, proč se nechytil CP/M86 a GEM atd. a i české firmy 602 apod. I záčatky implementace Unixů ( Xenix … ) na PC.
Řekl bych, že o tom víte v česku asi nejvíc a dost lidí by to zajímalo.
Díky.
Neco jako „SW dejiny“ planuju :-) ale jeste nevim, do jake hloubky. Ta „mainstreamova“ historie je jasna (MS, CP/M, Xerox, unixy, SGI…) ale jeste nevim, zda psat i o slepych cestach vyvoje. Ale spatny napad to urcite neni, treba takovy Xenix, GEM, je uz pozapomenuty a mladsi kolegove si uz nepamatuji ani T602 nebo NC (a proto nedelaji v MC :-)
Díky, už se těším. Já si právě myslím, že psát o těch slepých cestách je právě důležité. Protože software, který přetrval, se formoval právě vlivem v té době konkurenčních produktů. To dává klíč pochopení k tomu, proč je Dos, Windows i Linux právě takový, jaký je. Ze Sw ( iHW ) produktů „mrtvých větví“ se lze poučit, „kde udělali soudruzi chybu“, technickou, ale častěji obchodní, takže jejich produkt se neprosadil.
Zajimavy clanek o programovani na ZX81 je tady:
http://f6.bloguje.cz/823204-zx81-kdyz-schazi-pamet.php
Maly pruvodce Basicem na ZX spectru http://www.fi.muni.cz/usr/jkucera/pv109/2004/xnovotn3speccy.htm
PS: Na tom emulatoru se neda poradne pracovat, dokud nedam oknu fuse rezim porad na popredi a pod to si nehodim http://www.nvg.ntnu.no/sinclair/computers/zxspectrum/gallery/images/speckeys_jpg.jpg
--- C
if (podminka)
telo bloku
else if (podminka)
telo bloku
else
telo bloku
--- ZX spectrum
10 INPUT a
20 PRINT „Zadane cislo je ";
30 if a < 10 THEN PRINT "mensi jak“;
40 if a = 10 THEN PRINT „presne“;
50 if a > 10 THEN PRINT „vesti jak“;
60 PRINT " deset.„
…
10 INPUT a
20 PRINT "Zadane cislo je ";“mensi jak" AND a < 10;„presne“ AND a=10;„vesti jak“ AND a>10;" deset.„: REM prvne vyraz a pak retezec mi to nevzalo
--- C
for (v1;v2;v3) příkaz
--- ZX spectrum
10 FOR a = 2 TO 5 STEP 0.5
20 PRINT a,;
30 NEXT a: PRINT
--- C
double v1;
while (v2) {
příkaz
v3;
}
--- ZX spectrum
10 LET a=2
20 IF a>5 THEN GO TO 40
30 PRINT a,;: LET a=a+.5: GO TO 20
…
10 LET a=2: IF a>5 THEN GOTO 30
20 PRINT a,;: LET a=a+.5: IF a<=5 THEN GO TO 20
…
10 LET a=2: GO TO 30
20 PRINT a,;: LET a=a+.5
30 IF a<=5 THEN GO TO 20
--- C
v1;
do {
příkaz
v3;
} while (v2)
--- ZX spectrum
10 LET a=2
20 PRINT a,;: LET a=a+.5: IF a<=5 THEN GO TO 20
--- C
switch (n) {
case 0: // následující kód se provede, je-li n nulové
…
case 1: // následující kód se provede je-li n==1
// a také je-li n nulové, protože jsme nepoužili break
…
break;
case 2: // následující kód se provede jen je-li n==2
…
}
--- ZX spectrum
10 LET break=60: INPUT a
20 IF a>2 OR a<0 THEN GO TO 50
30 GO TO 40+a
40 PRINT "<0..0.5)“: GO TO break
41 PRINT „<0.5..1.5)“: GO TO break
42 PRINT „<1.5..2>“: GO TO break
50 PRINT „jinak“
…
10 LET break=60: INPUT a
20 IF a<>INT a OR a>2 OR a<0 THEN GO TO 50
30 GO TO 40+a
40 PRINT „urcite jen nula“
41 PRINT „nula nebo jedna“: GO TO break
42 PRINT „dva“: GO TO break
50 PRINT „jinak“
--- ZX spectrum
10 LET top=15: DIM z(top): DIM p(top): REM Zasobnik pomocnych promenych a parametru rekurzivni Fce
20 INPUT „Zadej faktorial: ";p(top): GO SUB 100: PRINT z(top): STOP
100 REM Simulace "rekurzivni Fce“
110 PRINT top;„: p – ";p(top);“, z – „;z(top)
120 IF p(top)=0 THEN LET z(top)=1: RETURN
130 REM Snizeni vrcholu zasobniku, nacteni parametru, zavolani Fce, obnoveni vrcholu
140 IF top=1 THEN PRINT "Preteceni zasobniku!“: STOP
150 LET top=top-1: LET p(top)=top(top-1)-1: GO SUB 100: LET top=top+1
160 LET z(top)=p(top)*z(top-1)
170 RETURN
…
10 LET top=15: DIM p(top): REM Zasobnik parametru rekurzivni Fce
20 INPUT „Zadej faktorial: ";p(top): GO SUB 100: PRINT rekurze: STOP
100 REM Simulace "rekurzivni Fce“
110 PRINT top;„: p – ";p(top)
120 IF p(top)=0 THEN LET rekurze=1: RETURN
130 REM Snizeni vrcholu zasobniku, nacteni parametru, zavolani Fce, obnoveni vrcholu
140 IF top=1 THEN PRINT "Preteceni zasobniku!“: STOP
150 LET top=top-1: LET p(top)=top(top-1)-1: GO SUB 100: LET top=top+1
160 LET rekurze=p(top)*rekurze
170 RETURN
ZX umel vytvaret vlastni prikazy? Tak na tohle si uz vubec nepamatuji…
http://scratchpad.wikia.com/wiki/DEF_FN
Snad jedine matne… ze to stejne nefungovalo.. protoze ta fce MIN je tam zapsana spatne.
10 DEF FN Q(x,y)=x-(x-y)*(x>y)
15 INPUT „Zadej cislo:“;a,„a druhy:“;b
20 PRINT „Mensi z ";a;“ a „;b;“ je:";FN Q(a,b)
Jo s tim se daly delat kouzla, ale asi by spouste lidem vstavaly vlasy hruzou kdyby videli v goto goniometrickou fci .)
Byl jsem hrozne prekvapeny kdyz jsem se prvne docetl ze GO TO je spatny. A pri uceni PASCALU jsem se divil co na tom vsichni maji, vzdyt to vsechno mohu udelat i v BASICU. A chvilku to trvalo nez jsem zjistil ze programy se nepisi pro hrani. A proto prehlednost/citelnost/rychlost vyvoje/udrzby je dulezita a dostal do krve while, do-loop kde goto maskuji pomoci continue a break. Jediny rozdil oproti goto je, ze je hned videt kam program pokracuje.
Ale obcas mi stejne jeste goto chybi… bylo to takovy svobodny. .) Nejaky break(3) co by vyskocil ze tri smycek, nebo nedavno jsem psal nejaky brain pro deskovou hru a v jednom okamziku zjistim ze cas vyprsel a potrebuji opustit rekurzivni fci z libovolneho zanoreni. Neprisel jsem na to, jak to bez hrani se zasobnikem udelat, tak jsem musel vracet konstantu „cas_vyprsel“ a hned jsem udelal chybu, kdyz se mi ta konstanta ulozila jako platna hodnota pozice do hashe .), protoze jsem v casti s hashem taky volal rekurzivne fci pro killer variantu a zapomnel vlozit po obdrzeni vysledku kontrolu jestli jen nemam opustit fci.
jj, ze zacatku jsem mel podobne pocity. Prvni program v Placalu, co nam ucitel napsal na tabuli, pocital obvod kruznice a jak je u Pascalu zvykem, bylo to minimalne na 10 radku (samanske tance typu: program x(input, output), var, begin, end s teckou atd.) a ja si porad rikal, co na tom vsichni vidi kdyz se da jednoduse napsat:
10 ? "Zadej r:" 20 INPUT A 30 ? "Obvod="; A*2*3.1415
Samozrejme ze s prichodem slozitejsich datovych struktur a algoritmu se vyhoda strukturovanych jazyku nakonec ukazala :-)
<hereze>
Jeste k tomu clanku „GOTO considered harmful“ od Dijkstry. Trosku me pripadne, ze nekteri autori a autority ten clanek snad vubec necetli (nebo nepochopili) a vyvozuji zavery pouze z titulku toho clanku :-)
Protoze ono GOTO samo o sobe spatne neni, je to proste prikaz, pomoci nehoz se daji vytvaret klasicke strukturovane prikazy (ktere Dijstra samozrejme prosazuje), tj. WHILE a REPEAT-UNTIL.
Problem GOTO je v tom, ze s nim clovek (krome „cisteho“ pouziti) muze prasit, ale to muze i v nekterych jinych „cistych“ jazycich – treba menit hodnotu ridici promene smycky FOR (nekdy to pravda nejde, zalezi na jazyku), pouzivat longjmp() atd.
GOTO navic neni nejvetsi problem BASICu, tim je (IMHO) existence pouze globalnich promennych a jejich automaticka inicializace. Pokud by toto bylo vyreseno (napriklad zmenou prikazu GOSUB/RETURN s novym prikazem pro zacatek podprogramu), byl by i klasicky BASIC s cislovanymi radky a GOTO pouzitelny i pro psani vetsich aplikaci.
</hereze>
Svojho casu som zacal robit na konvertore grafickych prikazov z PMD-85 na Spectrum.
Bolo to vo forme podprogramov a aj ked som to nikdy nedokoncil, podarilo sa mi urobit zakladne prikazy – SCALE, PLOT a MOVE. Spectrum SCALE nemalo – hodnoty som ulozil a pri prikazoch PLOT a MOVE som potom prerataval pevnu poziciu x a y na zaklade velkosti danych pri SCALE.
BPLOT a BMOVE som mal premyslene ale nedokoncil som ich.
Motivaciou bola kniha „Basic u Mikropocitacu“ ktora obsahovala vela dobrych prikladov pre PMD-85. Pomocou mojich podprogramov sa mi podarilo jednoduchym prepisanim programu z knihy vykreslit na didaktiku obrazok ktory bol aj na obalke knihy ;)
C64 měl procesor 6510, ne 6502
>>Poměrně jednoduchý trik, pomocí něhož bylo možné na úvodní obrazovce interpretru jazyka BASIC zobrazit více než osm spritů.
tohle rozhodně jednoduchý trik nebyl a v žádném existujícím basicu nešel napsat. jednalo se o sprite-multiplexer a bylo třeba pracovat s rastrovým přerušením. vsadím se, že v době největší slávy c64 ho u nás nezvládlo víc jak 20–30 lidí :-)
jasne, 6510, ta 02 mi ulitla, omlouvam se.
Co me tesi, ze jsem ten trik (jakozto Atarista a ne Commodorista :-) nakonec taky zvladl, ono to opravdu neni tak slozite, staci zmenit jen nekolik registru (vubec i pres rozdily mezi Atarkem, komousem a treba i VGAckem na PC se pri znalosti toho, jak se obraz generuje a co se da menit na kazdem obrazovem radku ty efekty delaly docela snadno). Asi nejslozitejsi bylo to cele spravne nasynchronizovat, ale jen pro zobrazeni x-spritu ani toto nebylo tak slozite, kdyz na jejich presne pozici nezalezelo.