Comodor BASIC

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Commodore BASIC (în primele versiuni PET BASIC ) este dialectul limbajului BASIC utilizat în linia de 8 biți a computerelor de casă Commodore International , începând de la PET din 1977 până la C128 din 1985.

Nucleul său se baza pe Microsoft BASIC adaptat pentru procesorul MOS 6502 . Având în vedere originile sale, a împărtășit o mare parte din cod cu alte BASIC pentru 6502 din perioadă, cum ar fi Applesoft BASIC .

Introducerea comenzilor pe Commodore PET

fundal

Bill Gates a oferit inițial o licență bazată pe plata unei redevențe de 3 USD pentru fiecare instalație a interpretului său, dar Jack Tramiel , șeful Commodore, a respins propunerea cu expresia „ Sunt deja căsătorit ” și a propus o înțelegere bazată pe un cheltuieli unice de 25.000 USD pentru o licență perpetuă și nelimitată (diferite versiuni circulă pe suma plătită, care variază între 10.000 USD și 30.000 USD în funcție de sursă). Microsoft era încă o companie mică și căuta mereu fonduri, așa că Gates a acceptat propunerea și i-a acordat Commodore utilizarea Microsoft BASIC cu licența fără redevențe ; [1] în paralel, deoarece Apple reușise să obțină o licență perpetuă fără alte redevențe pentru Applesoft BASIC .

Caracteristici

Interpret de comandă și verificarea erorilor

Interpretul BASIC rezident la ROM și KERNAL a fost o bună implementare a editorului de ecran complet , care a permis utilizatorilor să introducă și să editeze comenzi directe sau linii de program oriunde pe ecran - pur și simplu prin apăsarea tastei RETURN fiecare dată când cursorul a fost mutat. Găsit pe o linie care conține o declarație BASIC validă. Acest lucru a marcat un mare pas înainte în interfețele de intrare a programului comparativ cu BASIC-ul prezent pe computerele de acasă ale vremii, care foloseau în general editori de linie, invocați de comenzi EDIT sau similare.

C64 BASIC implementează, de asemenea, un sistem de control al erorilor care, totuși, nu a fost întotdeauna eficient, ceea ce a făcut posibilă verificarea corectitudinii încărcării programelor de pe bandă în memorie folosind seturi de date . Acest lucru s-a întâmplat exclusiv cu copiile de siguranță efectuate în mod normal fără utilizarea programelor turbo: programul prin comanda „SAVE” a fost salvat de două ori consecutiv și, în timpul fazei de citire a programului și total invizibil pentru utilizator, ambele înregistrări au fost citite și ulterior comparate între ele . În cazul în care cele două exemplare nu corespundeau unele cu altele, a fost generată „ LOAD ERROR ”. De asemenea, a fost posibil să se utilizeze o alternativă pentru încărcător / economizor față de cele din sistemul de operare, ceea ce a permis încărcarea și economisirea mai rapidă a casetei. Un semnal particular a identificat începutul unui bloc de date (în general, un program) și, pentru a-l găsi, utilizatorul a fost, în general, obligat să deruleze încet prin casetă, pornind-o cu butonul „Redare” .

Viteza în execuție

Cu toate acestea, a fost extrem de lent în comparație cu limbajul mașinii . Testele au arătat că copierea a 16 kilobyți de memorie de la ROM la RAM durează mai puțin de o secundă în limbajul mașinii, dar mai mult de 2 minute în BASIC. Pentru a încerca să facă față lentității interpretului, programatorii au început să folosească diverse trucuri pentru a accelera execuția. Unul a fost să stochezi numere întregi folosite frecvent în variabile, mai degrabă decât să le folosești direct, deoarece interpretarea unui nume de variabilă a luat mai puțin timp decât extrapolarea numărului din listarea sursă. Deși liniile de cod au fost numerotate, ordinea de execuție a acestora nu a urmat ordinea numerică, ci mai degrabă ordinea în care au fost stocate în memorie. La introducerea codului, liniile au fost rearanjate automat pentru a urma ordinea numerică, dar schimbând (prin instrucțiunile POKE ) memoria în care a fost stocat programul, numerotarea ar putea fi stricată, răsturnând-o sau chiar dând aceeași numerotare tuturor linii, fără ca acest lucru să interfereze cu execuția programului (în afară de instrucțiunile de salt, cum ar fi GOSUB , care necesită un număr de linie ca parametru). Aceeași caracteristică, totuși, ar putea fi utilizată pentru a renumerota liniile de program, pentru a face loc noilor instrucțiuni, dacă s-a folosit un increment de unitate între o linie și cealaltă, fără a lăsa spațiu pentru alte linii de cod.

Jetoane

Jetoanele Commodore BASIC pot fi abreviate prin introducerea primei litere (sau a primei în cazul unor jetoane similare), urmată de o literă deplasată , obținută prin apăsarea tastei „SHIFT” în același timp cu tasta literă (a apărut litera deplasată sub forma unui simbol grafic). Jetonul scurtat a fost recunoscut în același mod ca și cel complet; astfel, un număr mai mare de comenzi ar putea fi introdus în linia de bază (bufferul de intrare a acceptat maximum 88 de caractere). Odată ce intrarea a fost completată cu Return, fiecare simbol al liniei de bază a fost apoi convertit automat într-un singur cod de octeți și astfel salvat în memorie. Comanda LIST furnizată pentru a revizui jetoanele, convertind codurile de 1 octet cu jetoanele din mers. Formatul numeric nativ al Commodore BASIC, ca în cazul strămoșului său Microsoft BASIC, a fost punctul virgul . Toate operațiile aritmetice au fost efectuate folosind numere în acest format; operațiile între numere întregi implicau conversia operanzilor înainte și înapoi de la formatul în virgulă mobilă. Multe implementări BASIC ale perioadei au folosit 1 octet pentru exponent și 3 pentru mantisă . Acest lucru a cauzat probleme în aplicațiile comerciale, deoarece acuratețea punctului mobil cu 3 octeți de mantisă este de aproximativ 6,5 zecimale, iar erorile de rotunjire erau frecvente. Commodore, pe de altă parte, a optat pentru o mantisă de 4 octeți, ceea ce a făcut ca BASIC să fie mult mai precis și, prin urmare, mai potrivit pentru lumea afacerilor decât multe alte BASIC ale perioadei.

Variabilele

Numele variabilelor au fost limitate la două caractere în lungime: caracterele care depășesc această limită au fost ignorate. Aceasta înseamnă că numele „AREA” și „ARENA” se refereau la aceeași variabilă „AR”. Cu toate acestea, funcția de detectare automată a cuvintelor cheie a limbii a fost disponibilă fără a fi nevoie de spații care să separe diferitele elemente gramaticale. De exemplu, puteți scrie

 10 FORK = 1TO10: PRINTK; "- ACEST CICL": NEXTK

Folosirea spațiilor ar avea în schimb:

 10 PENTRU K = 1 Până la 10: IMPRIMĂ K; „-CICLUL”: URMĂTORUL K

Această caracteristică, deși face codul mai puțin lizibil, salvează (puțină) memorie disponibilă în acel moment (memoria RAM necesară pentru a stoca spațiile).

Deși reduce lizibilitatea, această caracteristică poate face codul ambigu pentru sistem:

 IFSTAND64THENSTOP

conține mai multe „combinații” de jetoane valide (unele semnificative semantic și altele nu):

 DACĂ S TAN D64 OPRIȚI
DACĂ ST ȘI 64 ATUNCI OPRIȚI

totuși identificarea jetoanelor de către sistem) va recunoaște o singură formă, prima din exemplul anterior, deoarece toate jetoanele prezente în ordinea scrierii sunt identificate: IF, TAN, THEN și STOP (ST este o variabilă rezervată, dar nu are simbol și este tratat de rutina de manipulare a variabilelor ca excepție).

Extensii

Versiunea istorică

BAZĂ 1.0

Implementat în PET 2001

  • bug: matrice limitate la 256 de elemente
  • eroare: comanda PEEK a eșuat pentru locațiile de memorie mai mari de $ C000

BASIC 2.0

Commodore BASIC 2.0 pe un Commodore 64

Folosit în PET din 2001 cu o tastatură și ROM actualizate, în VIC-20 și C64

  • s-au remediat majoritatea erorilor de 1.0
  • Ou de Paște PET - introduceți WAIT 6502,1

BAZA 4.0

Implementat în PET / CBM 4000/8000 (și cele mai recente versiuni ale PET 2001)

  • noi operații pe dischetă : DLOAD,DSAVE,COPY,SCRATCH, etc. (15 în total)
  • variabile de stare pentru erori de disc: DS,DS$

BASIC 4+

Folosit în CBM-II (modelele B și P).

  • au adăugat comenzile DCLEAR,BANK,BLOAD,BSAVE,DISPOSE . Aceste comenzi vor fi apoi implementate toate pe C128 (succesorul seriei CBM-II care a fost un dezastru și a fost retras aproape imediat de pe piață) cu excepția DISPOSE deoarece nu mai este necesar din cauza unui management diferit al stivei. Jetoanele comenzilor sunt totuși diferite între CBM-II și C128 limitând portabilitatea binară a surselor.

BAZĂ 3.5

Versiunea 3.5 pe un Commodore 16

Folosit pe C16 / 116 și Plus / 4

  • comenzi grafice și sonore: GRAPHIC, CIRCLE, PAINT, DRAW, BOX, SOUND, VOL etc.
  • managementul portului joystick- ului: JOY
  • conversie hexagonală : DEC(),HEX$()
  • Date flexibile citite DATA : RESTORE [ număr rown ]
  • funcție de căutare șir: INSTR
  • formatarea tipăririi: PRINT USING,PUDEF
  • suport pentru executarea codului pentru condiții (IF) care sunt false: ELSE
  • bucle structurate: DO,LOOP,WHILE,UNTIL,EXIT
  • atribuiți funcții tastelor funcționale: KEY (și modul direct)
  • inserarea / editarea programului: AUTO,DELETE,RENUMBER
  • gestionarea dinamică a erorilor: TRAP,RESUME,ERR$()
  • instrucțiuni de depanare (urmărire): TRON,TROFF
  • Monitor sistem : MONITOR
  • Ou de Paște pe C (1) 16 și Plus / 4 - SYS 52650

DE BAZĂ 7.0

Folosit în C128

  • alte comenzi grafice și sonore, inclusiv gestionarea spritei
  • managementul paletei și stiloului optic : POT,PEN
  • exclusiv sau funcțional: XOR
  • regăsirea adreselor variabilelor: POINTER
  • gestionarea ferestrelor în modul text: WINDOW
  • instrucțiune de așteptare temporizată: SLEEP
  • gestionarea memoriei: BANK,SWAP,FETCH,STASH
  • operații suplimentare pe disc : BOOT,BLOAD,BSAVE,DVERIFY,DCLEAR
  • Reglarea vitezei procesorului: FAST,SLOW (respectiv 2 și 1 MHz)
  • comandă nedocumentată: RREG (citește registrele CPU după executarea unei comenzi SYS )
  • comenzi nedocumentate și care nu funcționează: OFF,QUIT
  • Ou de Paște pe C128 - SYS 32800,123,45,6

BAZE 10

Versiune concepută pentru Commodore 65 , dar niciodată lansată. Caracteristici incluse:

  • comenzi grafice și video: PALETTE,GENLOCK
  • gestionarea mouse-ului : MOUSE,RMOUSE
  • gestionarea secvențială a fișierelor text: TYPE
  • editare programe: FIND,CHANGE
  • gestionarea memoriei: DMA , FRE( 0 | 1 | 2 )
  • comenzi neimplementate: PAINT,LOCATE,SCALE,WIDTH,SET,VIEWPORT
    PASTE,CUT

Notă

  1. ^ Declarație de Jack Tramiel la sărbătoarea aniversară a Commodore 64 la Muzeul de istorie a computerului , 10 decembrie 2007 Copie arhivată , la computerhistory.org . Adus la 13 septembrie 2008 (arhivat din original la 11 decembrie 2008) . [1]

Bibliografie

Elemente conexe

Alte proiecte

linkuri externe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT