Applesoft BASIC - Applesoft BASIC

Applesoft ZÁKLADNÍ
Původní autoři Marc McDonald
Ric Weiland
První vydání 1977 ; Před 44 lety ( 1977 )
Stabilní uvolnění
Applesoft II / 1978 ; Před 43 lety ( 1978 )
Operační systém Řada Apple II
Typ Microsoft ZÁKLADNÍ

Applesoft BASIC je dialekt Microsoft BASIC , vyvinutý Marcem McDonaldem a Ricem Weilandem , dodávaný s počítačem řady Apple II . Nahrazuje Integer BASIC a je BASIC in ROM ve všech počítačích řady Apple II po původním modelu Apple II . Je také označován jako FP BASIC (od „s plovoucí desetinnou čárkou “) kvůli příkazu Apple DOS použitému k jeho vyvolání namísto INTpro Integer BASIC.

Applesoft BASIC dodala společnost Microsoft a její název je odvozen od názvů společností Apple i Microsoft . Zaměstnanci společnosti Apple, včetně Randy Wiggintona , přizpůsobili tlumočníka společnosti Microsoft pro Apple II a přidali několik funkcí. První verze Applesoftu byla vydána v roce 1977 na magnetofonové kazetě a postrádala náležitou podporu grafiky ve vysokém rozlišení. Applesoft II , který byl k dispozici na kazetě a disku a v ROM Apple II Plus a následujících modelech, byl vydán v roce 1978. Je to tato poslední verze, která má určité rozdíly v syntaxi a podporuje grafiku Apple II s vysokým rozlišením režimy, což je obvykle synonymum pro výraz „Applesoft“.

Kompilátor Applesoft, TASC (The AppleSoft Compiler) , byl vydán společností Microsoft v roce 1981.

Dějiny

Když Steve Wozniak psal Integer BASIC pro Apple II , neimplementoval podporu pro matematiku s pohyblivou řádovou čárkou, protože se primárně zajímal o psaní her, což byl úkol, na který stačila celá čísla. V roce 1976 společnost Microsoft vyvinula Microsoft BASIC pro technologii MOS 6502 , ale v té době neexistoval žádný produkční počítač, který by ji používal. Když se Microsoft dozvěděl, že Apple má stroj 6502, zeptal se, zda má společnost zájem o licencování BASIC, ale Steve Jobs odpověděl, že Apple již jeden má.

Apple II byl představen veřejnosti na West Coast Computer Faire v dubnu 1977 a byl k dispozici k prodeji v červnu. Jednou z nejčastějších stížností zákazníků na počítač byl nedostatek základní matematiky s plovoucí desetinnou čárkou. Problematičtější bylo, že konkurenční osobní počítač Commodore PET měl od začátku tlumočníka BASIC s plovoucí desetinnou čárkou. Protože Wozniak - jediný člověk, který rozuměl Integer BASIC dostatečně dobře na to, aby přidal funkce s plovoucí desetinnou čárkou - byl zaneprázdněn diskem a ovladačem Disk II a Apple DOS , obrátil se Apple na Microsoft.

Apple údajně získal osmiletou licenci na Applesoft BASIC od Microsoftu za paušální poplatek 31 000 $, v roce 1985 ji obnovil prostřednictvím ujednání, které Microsoftu poskytlo práva a zdrojový kód pro verzi BASIC pro Macintosh od Applu . Applesoft byl navržen tak, aby byl zpětně kompatibilní s Integer BASIC a používá jádro implementace Microsoft 6502 BASIC, která zahrnuje použití příkazu GET pro detekci stisknutí kláves a nevyžaduje žádné mezery na programových řádcích. Zatímco Applesoft BASIC je pomalejší než Integer BASIC, má mnoho funkcí, které starší BASIC postrádá:

  • Atomové řetězce: Řetězec již není pole znaků (jako v Integer BASIC a C ); místo toho je to objekt sbíraný odpadky (jako ve Scheme a Javě ). To umožňuje řetězcová pole; vytváří řada z jedenácti řetězcových proměnných číslovány 0-10.DIM A$(10)
  • Vícerozměrná pole (čísla nebo řetězce)
  • Proměnné s plovoucí desetinnou čárkou s jednou přesností s 8bitovým exponentem a 31bitovým významem a vylepšenými matematickými schopnostmi, včetně trigonometrie a logaritmických funkcí
  • Příkazy pro grafiku s vysokým rozlišením
  • DATAProhlášení, s READa RESTOREpříkazy, pro které představují číselné a řetězec hodnoty v množství
  • CHR$, STR$A VALfunkce pro převod mezi řetězcem a číselných typů (oba jazyky přece mělo ASCfunkci)
  • Uživatelem definované funkce : jednoduché jednořádkové funkce napsané v BASICu s jediným parametrem
  • Chybové chytání: umožnění programům BASIC zpracovávat neočekávané chyby pomocí podprogramu napsaného v BASICu

Naopak Applesoft postrádá MOD(zbytek) operátor z Integer BASIC.

Přizpůsobení BASIC pro Apple II byla únavná práce, protože Apple obdržel zdrojový výpis pro Microsoft 6502 BASIC, který se ukázal být buggy a také vyžadoval přidání Integer BASIC příkazů. Vzhledem k tomu, že Apple neměl po ruce žádného assembleru 6502, byl vývojový tým nucen odeslat zdrojový kód přes telefonní linky do Call Computer, zařízení, které nabízelo služby kompilátoru. Jednalo se o extrémně únavný, pomalý proces a poté, co Call Computer ztratil zdrojový kód kvůli poruše zařízení, jeden z programátorů, Cliff Huston, použil svůj vlastní počítač IMSAI 8080 ke křížové montáži ZÁKLADNÍHO zdroje.

Funkce

Applesoft je podobný BASIC 2.0 společnosti Commodore kromě funkcí zděděných z Integer BASIC. Existuje několik drobných rozdílů, jako například nedostatek bitových operátorů společnosti Applesoft; jinak většina programů BASIC, které nepoužívají funkce závislé na hardwaru, poběží na obou BASIC.

Příkaz PR# přesměruje výstup na rozšiřující kartu a IN# přesměruje vstup z rozšiřující karty. Číslo slotu karty je uvedeno za PR# nebo IN# v příkazu. Pokud ve slotu není žádná karta, počítač se uzamkne. PR#0 obnoví výstup na obrazovku se 40 sloupci a IN#0 na klávesnici.

Příkaz PR# lze použít k přesměrování výstupu na tiskárnu (např. ), Kde x je číslo slotu obsahující kartu portu tiskárny. Pro odeslání výpisu ZÁKLADNÍHO programu na tiskárnu uživatel napíše . 10 PR#x:PRINT"Hello!"PR#x:LIST

PR#6 způsobuje, že Applesoft spouští diskové jednotky (i když řadič Disk II může být v jakémkoli slotu, obvykle je ve slotu 6). PR#3 se přepne do režimu textu 80 sloupců, pokud je k dispozici karta 80 sloupců.

Stejně jako u Commodore BASIC jsou číselné proměnné uloženy jako 40bitové s plovoucí desetinnou čárkou; každá proměnná vyžaduje pět bajtů paměti. Programátor může označit proměnné jako celočíselné tak, že je bude sledovat se znakem procenta. V takovém případě použijí dva bajty a jsou omezeny rozsahem -32768 až 32767; BASIC je však interně převádí zpět na plovoucí desetinnou čárku, přičemž každé znaménko procent také zabírá další bajt programového kódu, takže v praxi je tato funkce užitečná pouze pro snížení využití paměti velkých proměnných pole.

Funkce RND generuje pseudonáhodné zlomkové číslo mezi 0 a 1. RND(0)vrací naposledy generované náhodné číslo. RND se záporným číslem přeskočí do bodu v pořadí určeném konkrétním použitým záporným číslem. RND s jakoukoli kladnou hodnotou vygeneruje další číslo v pořadí, nezávislé na dané skutečné hodnotě. Místa $ 4E a $ 4F, u kterých systém cykluje hodnoty nepřetržitě při čekání na stisknutí uživatelských kláves, lze PEEKOVAT, aby poskytly skutečně náhodné hodnoty, které lze použít jako počáteční (když negovaný) RND. Například po zadání z klávesnice „x = rnd (-1*(peek (78)+256*(peek (79))))“) nasadí RND s hodnotami $ 4E a $ 4F.

Stejně jako ostatní implementace Microsoft BASIC, Applesoft zahodí mezery (mimo řetězce a komentáře) na programových řádcích. LISTpřidává mezery při zobrazování kódu kvůli čitelnosti. Protože LIST přidává mezeru před a za každé tokenizované klíčové slovo, často vytváří dvě mezery v řadě, kde by pro čitelnost stačilo jedno.

Výchozí výzva pro INPUTje otazník. PRINTnepřidává úvodní mezeru před čísla.

Coleco tvrdil, že jeho Adama SmartBASIC domácím počítači byl zdrojový kód kompatibilní s Applesoft. Společnost Microsoft licencovala BASIC kompatibilní s Applesoft na VTech pro svůj klon Laser 128 .

Omezení

Prostřednictvím několika raných modelů Apple II Applesoft BASIC nepodporoval používání malých písmen v programech, s výjimkou řetězců. PRINTje platný příkaz, ale printi Printza následek chybu syntaxe.

Applesoft postrádá několik příkazů a funkcí společných většině interpretů Microsoft BASIC jiných než 6502, například:

  • INSTR (vyhledejte podřetězec v řetězci)
  • PRINT USING (formátovat čísla v tištěném výstupu)
  • INKEY$ (zkontrolujte stisknutí klávesy bez zastavení programu; ačkoli PEEK na umístění $ C000 této akce dosáhne)
  • LPRINT (výstup na tiskárnu místo na obrazovku)

Applesoft nemá příkazy pro zpracování souborů nebo disků, kromě ukládání a načítání programů pomocí kazetové pásky. Diskový operační systém Apple II, známý jednoduše jako DOS, rozšiřuje jazyk, aby takové schopnosti poskytoval.

Významná jsou pouze první dvě písmena názvů proměnných. Například „LOW“ a „LOSS“ jsou považovány za stejnou proměnnou a pokus o přiřazení hodnoty „LOSS“ přepíše jakoukoli hodnotu přiřazenou „LOW“. Programátor se také musí vyvarovat po sobě jdoucích písmen, která jsou příkazy nebo operacemi Applesoft. Název „SCORE“ pro proměnnou je interpretován jako obsahující OR booleovský operátor , vykreslený jako SC OR E. "BACKGROUND" obsahuje GRpříkaz k vyvolání grafického režimu s nízkým rozlišením a má za následek chybu syntaxe.

Zvuk a grafika

Jedinou zvukovou podporou je možnost PRINTznaku zvonku ASCII vydat zvukový signál systému a PEEKpříkaz kliknutím na reproduktor. Jazyk není dostatečně rychlý, aby dokázal produkovat více než barytonové hlášky z opakovaných kliknutí. Programy však mohou ukládat rutinu strojového jazyka, která má být volána ke generování elektronických hudebních tónů v rozsahu několika oktáv.

Applesoft podporuje grafický displej s nízkým rozlišením ( lores ), kde lze zobrazit 16 barevných pixelů vodorovně a až 48 svisle v 16 barvách a režim 280 s 192 vysokým rozlišením ( najímá ). Existují příkazy pro vykreslování pixelů a kreslení vodorovných a svislých čar v lore. Nábor umožňuje kreslení libovolných čar. Tabulky tvarů na bázi vektoru lze použít k kreslení objektů v grafice najímání. Skládají se z vodorovných a svislých čar a celé tvary lze zmenšit na větší velikosti a otočit do libovolného úhlu. Neexistuje žádné ustanovení pro míchání textu a grafiky, kromě čtyř řádků textu společnosti Apple v dolní části displeje najímání.

Počínaje Apple IIe byl na počítačích s pamětí 128 kB k dispozici režim „dvojitého vysokého rozlišení“. Tento režim v podstatě duplikuje rozlišení původního režimu najímání, ale zahrnuje všech 16 barev palety lores. Applesoft neposkytuje přímou podporu pro tento režim. Režimy specifické pro Apple IIgs rovněž nejsou podporovány.

Rozšíření

Applesoft BASIC lze rozšířit dvěma způsoby: příkazem ampersand (&) a funkcí USR (). Toto jsou dvě funkce, které volají rutiny strojového jazyka nízké úrovně uložené v paměti, což je užitečné pro rutiny, které musí být rychlé nebo vyžadují přímý přístup k libovolným funkcím nebo datům v paměti. Funkce USR () přebírá jeden numerický argument a lze ji naprogramovat tak, aby odvozovala a vracela vypočítanou hodnotu funkce, která bude použita v číselném výrazu. „&“ je ve skutečnosti zkratka pro CALL s adresou, která je předdefinována.

Hmyz

Nedostatek s chycením chyb přes ONERRznamená, že systémový zásobník není resetován, pokud se nevyvolá rutina zpracování chyb RESUME, což může vést ke zhroucení. Vestavěná funkce generátoru pseudonáhodných čísel RNDje schopna produkovat předvídatelnou sérii výstupů díky způsobu, jakým je generátor nasazen při prvním zapnutí. Toto chování je v rozporu s tím, jak funkci popisuje dokumentace společnosti Apple.

Výkon

Wozniak původně označoval svůj Integer BASIC jako „Game BASIC“ (po jeho napsání, aby mohl implementovat Breakout klon pro svůj nový počítač). Několik akčních her bylo napsáno v Applesoftu BASIC, z velké části proto, že použití čísel s plovoucí desetinnou čárkou pro všechny matematické operace snižuje výkon.

Programy Applesoft BASIC jsou uloženy jako propojený seznam řádků; a GOTOnebo GOSUBtrvá lineární čas . Některé programy mají podprogramy nahoře, aby se zkrátil čas na jejich volání.

Na rozdíl od Integer BASIC, Applesoft nepřevádí doslovná čísla (jako 100) ve zdrojovém kódu na binární, když je zadán řádek. Řetězec ASCII je spíše převeden při každém spuštění řádku. Jelikož vyhledávání proměnných je často rychlejší než tato konverze, může být rychlejší uložit numerické konstanty použité uvnitř smyček do proměnných před zadáním smyčky.

Ukázkový kód

Hello World , s inverzním videem a znakem zvonku , spusťte a poté zadejte

Hello World in Applesoft BASIC lze zadat jako následující:

10TEXT:HOME
20?"HELLO WORLD"

Na stejném řádku kódu lze zahrnout více příkazů, pokud jsou odděleny dvojtečkou ( :). ?Mohou být použity v Applesoft BASIC (a téměř všechny verze aplikace Microsoft BASIC) jako zkratku pro „tisk“, ačkoli hláskování slovo je nejen přijatelné, ale kanonický-Applesoft převedeny „?“ v zadaných programech na stejný token jako „PRINT“ (tedy pomocí „?“ se ve skutečnosti neuloží žádná paměť), takže se buď zobrazí jako „PRINT“, když je program uveden. Výše uvedený program se zobrazí v LISTpříkazu jako:

10  TEXT : HOME
20  PRINT "HELLO WORLD"

Když byl Applesoft II BASIC původně vydán v polovině roku 1978, vyšel na kazetové kazetě a mohl být načten do paměti pomocí monitoru jazyků strojů Apple II. Když v roce 1979 nahradil vylepšený Apple II+ původní II, Applesoft byl nyní součástí ROM a automaticky se spustil při zapnutí, pokud nebyla k dispozici žádná zaváděcí disketa. Naopak Integer BASIC byl nyní odstraněn z ROM a přeměněn na spustitelný soubor na disku DOS 3.3.

Raná evoluce

Původní Applesoft, uložený v paměti RAM, jak je dokumentováno v jeho referenční příručce z listopadu 1977, má menší kód tlumočníka než pozdější Applesoft II, zabírá 8½ kb paměti, namísto 10 kb používaných pozdějším Applesoft II. V důsledku toho postrádá řadu funkcí příkazů vyvinutých pro novější hlavní verzi:

  • Všechny příkazy podporující grafiku Apple „s vysokým rozlišením“ (celkem 9)
  • Chybové chycení pomocí ONERR ... GOTO a RESUME
  • Strojově rutinní zkratka volání „&“
  • Screen-clearing HOME (volání rutiny systémové ROM)
  • Ovládání textového výstupu NORMÁLNÍ, INVERZNÍ, FLASH a RYCHLOST =
  • Funkce tiskového prostoru SPC () je v příručce uvedena mezi vyhrazenými slovy, ale není jinak dokumentována ( dokumentována je funkce tisku TAB () )
  • Ukládání numerických polí na kazetovou pásku: OBCHODOVÁNÍ a ZNOVU
  • Odezva zařízení: ČEKEJTE

stejně jako několik novějších verzí, které již byly přítomny v Integer BASIC společnosti Apple:

  • Vymazání programového řádku: DEL
  • Běžný přístup ke stroji: CALL
  • Přístup k periferním zařízením: IN# a PR# (ačkoli IN bez „#“ je uveden mezi vyhrazenými slovy)
  • Ovládání rozsahu paměti: HIMEM: a LOMEM:
  • Sledování provádění pro ladění: TRACE a NOTRACE
  • Umístění obrazovky: HTAB a VTAB
  • Podprogram rušící POP
  • Funkce PDL () pro čtení analogových řadičů a SCRN () pro čtení grafické obrazovky s nízkým rozlišením (oba přistupují k rutinám systémové ROM)

Navíc jeho grafické příkazy s nízkým rozlišením mají různá jména od svých protějšků Integer BASIC/Applesoft II. Všechna jména příkazů jsou ve formátu PLTx, takže GR, COLOR =, PLOT, HLIN a VLIN se nazývají PLTG, PLTC, PLTP, PLTH a PLTV. Příkaz pro návrat do textového režimu, v jiných verzích známý jako TEXT, je jednoduše TEX a nese podmínku, že musí být posledním příkazem na řádku programu.

Applesoft BASIC 1.x byl blíže původnímu kódu Microsoft 6502 BASIC než pozdější Applesoft II; zachovala velikost paměti? zobrazí výzva k autorským právům společnosti Microsoft. Aby byla zachována konzistence s Integer BASIC, byla výzva „Ok“ z kódu Microsoftu nahrazena znakem]. Applesoft 1.x také vyzval uživatele při načítání, pokud si přál zakázat příkaz REM a klíčové slovo LET v příkazech přiřazení výměnou za grafické příkazy lores.

Funkce USR () je také definována odlišně a slouží jako záloha pro chybějící příkaz CALL. Jeho argument není pro předání číselné hodnoty rutině strojového jazyka, ale je místo toho adresou volání samotné rutiny; neexistuje žádný „háček“ pro předdefinování adresy. Všech několik příkladů v příručce používá tuto funkci pouze pro přístup k rutinám „monitorování systému ROM“ nebo ke zkrácení rutin uživatelů k manipulaci s rutinami ROM. Není uveden žádný kód pro výpočet hodnoty vrácené samotnou funkcí; funkce je vždy zobrazena jako přiřazená k „fiktivním“ proměnným, které, bez akce pro nastavení hodnoty podle uživatelského kódu, obdrží pouze nesmyslnou hodnotu, která je jim předána zpět. Dokonce i přístupné rutiny ROM, které vracejí hodnoty (v příkladech ty, které poskytují službu funkcí PDL () a SCRN ()), mají pouze uloženy své hodnoty podle uživatelských rutin na místech, která jsou v následném příkazu odděleně VYHLEDÁVÁNA.

Na rozdíl od Integer BASIC a Applesoft II, booleovské operátory AND, OR a NOT provádějí bitové operace se 16bitovými celočíselnými hodnotami. Pokud jsou uvedeny hodnoty mimo tento rozsah, dojde k chybě.

Výrazy OUT a PLT (a výše uvedené IN) se objevují v seznamu vyhrazených slov, ale v manuálu nejsou nikde vysvětleny.

Viz také

Reference

externí odkazy