Commodore BASIC - Commodore BASIC

Commodore BASIC
Designet av Microsoft
Utvikler Microsoft
Første gang dukket opp 1977 ; 44 år siden ( 1977 )
Plattform PET til C128

Commodore BASIC , også kjent som PET BASIC eller CBM-BASIC , er dialekt av BASIC programmeringsspråket som brukes i Commodore International 's 8-bit datamaskin linje, som strekker seg fra PET 1977 til C128 av 1985.

Kjernen er basert på 6502 Microsoft BASIC , og som sådan deler den mange egenskaper med andre 6502 BASICs av tiden, for eksempel Applesoft BASIC . Commodore lisensierte BASIC fra Microsoft i 1977 på grunnlag av "betal en gang, ingen royalties" etter at Jack Tramiel avslått Bill Gates tilbud om et gebyr på $ 3 per enhet, med uttalelsen "Jeg er allerede gift" og ville ikke betale mer enn $ 25 000 for en evigvarende lisens.

Den originale PET -versjonen var veldig lik den opprinnelige Microsoft -implementeringen med få modifikasjoner. BASIC 2.0 på C64 var også lik, og ble også sett på noen C128 -er og andre modeller. Senere PETs inneholdt BASIC 4.0, lik originalen, men la til en rekke kommandoer for å jobbe med disketter .

BASIC 3.5 var den første som virkelig avviket, og la til en rekke kommandoer for grafikk og lydstøtte på C16 og Plus/4. BASIC 7.0 ble inkludert i Commodore 128, og inkluderte strukturerte programmeringskommandoer fra Plus/4's BASIC 3.5, samt søkeord designet spesielt for å dra nytte av maskinens nye evner. En sprite -editor og maskinspråkmonitor ble lagt til. Den siste, BASIC 10.0, var en del av Commodore 65 som ikke ble utgitt .

Historie

Commodore tok kildekoden til BASIC for flatgebyr og videreutviklet den internt for alle deres andre 8-biters hjemmemaskiner. Det var ikke før Commodore 128 (med V7.0) at en Microsoft -opphavsrettsvarsel ble vist. Imidlertid hadde Microsoft bygd et påskeegg i versjon 2 eller "oppgradering" Commodore Basic som beviste sin opprinnelse: å skrive kommandoen (uklar) WAIT 6502, 1vil resultere i at den Microsoft!vises på skjermen. (Påskeegget var godt tilslørt-meldingen dukket ikke opp ved demontering av tolken.)

Den populære Commodore 64 kom med BASIC v2.0 i ROM til tross for at datamaskinen ble utgitt etter PET/CBM -serien som hadde versjon 4.0 fordi 64 var ment som en hjemmemaskin, mens PET/CBM -serien var rettet mot forretnings- og utdanningsbruk der det innebygde programmeringsspråket deres ble antatt å bli mer brukt. Dette sparte produksjonskostnader, ettersom V2 passer inn i mindre ROM -er.

Tekniske detaljer

Programredigering

En praktisk funksjon i Commodores ROM -resident BASIC -tolk og KERNAL var redaktøren i fullskjerm . Selv om Commodore -tastaturer bare har to piltaster som vekslet retning da skift -tasten ble holdt inne, tillot skjermredigereren brukerne å skrive inn direkte kommandoer eller skrive inn og redigere programlinjer hvor som helst på skjermen. Hvis en linje var prefiks med et linjenummer, ble den tokenisert og lagret i programminnet. Linjer som ikke begynte med et tall ble utført ved å trykke på RETURNtasten når markøren tilfeldigvis befant seg på linjen. Dette markerte en betydelig oppgradering i programmet inngangsgrensesnitt i forhold til andre felles hjem datamaskinen grunnleggende på den tiden, som vanligvis brukes linje redaktører , påkalles av en egen EDITkommando, eller en "kopi markør" som avkortet linjen ved markørposisjonen.

Den hadde også muligheten til å lagre navngitte filer på hvilken som helst enhet, inkludert kassetten -en populær lagringsenhet i PET-dagene, og en som forble i bruk gjennom levetiden til 8-biters Commodores som en billig form for masselagring . De fleste systemer støttet bare filnavn på diskett , noe som gjorde det vanskeligere å lagre flere filer på andre enheter. Brukeren av et av disse andre systemene måtte legge merke til opptakerens display på stedet for filen, men dette var unøyaktig og utsatt for feil. Med PET (og BASIC 2.0) kan filer fra kassetter be om navn. Enheten ville søke etter filnavnet ved å lese data i rekkefølge, uten å ignorere filnavn som ikke samsvarer. Filsystemet ble også støttet av en kraftig poststruktur som kan lastes inn eller lagres i filer. Commodore kassettdata ble registrert digitalt, i stedet for billigere (og mindre pålitelige) analoge metoder som ble brukt av andre produsenter. Derfor var den spesialiserte databasen påkrevd i stedet for en standard båndopptaker. Det var tilgjengelige adaptere som brukte en analog-til-digital-omformer for å tillate bruk av en standard opptaker, men disse koster bare litt mindre enn databasen.

Den LASTE kommandoen kan brukes med valgfri parameter , en som vil aktivere et program inn i den minneadresse som inneholdes i de første to byter av filen (disse bytes blir forkastet og ikke holdes tilbake i minnet). Hvis parameteren 1 ikke brukes, vil programmet lastes inn i starten av BASIC -programområdet, som er veldig forskjellig mellom maskiner. Noen Commodore BASIC -varianter levert BLOADog BSAVEkommandoer som fungerte som sine kolleger i Applesoft BASIC , lastet inn eller lagret bitmaps fra spesifiserte minnesteder.

PET støtter ikke programmer som kan flyttes, og LOAD -kommandoen vil alltid lastes inn ved de to første bytes som finnes i programfilen. Dette skapte et problem når du prøvde å laste BASIC -programmer lagret på andre Commodore -maskiner ettersom de ville lastes på en høyere adresse enn der PET's BASIC forventet at programmet skulle være, det var løsninger for å "flytte" programmer til riktig sted. Hvis et program ble lagret på en CBM-II- maskin, var den eneste måten å laste det på et PET på ved å endre de to første byteene med en disksektorredaktør ettersom CBM-II-serien hadde sitt BASIC-programområde på $ 0, noe som ville resultere i et PET som prøver å laste inn på null -siden og låse seg.

Commodore BASIC søkeord kan bli forkortet ved å skrive første en unshifted tastetrykk, og deretter en forskjøvet tastetrykk på neste bokstav. Dette satte den høye biten , noe som fikk tolken til å slutte å lese og analysere setningen i henhold til en oppslagstabell. Dette betydde at utsagnet opp til der den høye biten ble satt ble akseptert som en erstatning for å skrive ut hele kommandoen. Siden alle BASIC -nøkkelord ble lagret i minnet som enkeltbyte -tokens, var dette imidlertid en bekvemmelighet for setningsoppføring i stedet for en optimalisering.

I standard sett med store bokstaver vises skiftede tegn som et grafisk symbol; f.eks. kommandoen GOTO,, kan forkortes G{Shift-O}(som lignet på skjermen). De fleste slike kommandoer var to bokstaver lange, men i noen tilfeller var de lengre. I slike tilfeller var det en tvetydighet, så det var nødvendig med flere uforskyvede bokstaver i kommandoen, for eksempel ( ) som kreves for . Noen kommandoer hadde ingen forkortet form, enten på grunn av korthet eller tvetydighet med andre kommandoer. For eksempel, kommandoen, hadde ingen forkortelse fordi stave kolliderte med separate søkeord, som lå nærmere til begynnelsen av søkeordet oppslagstabellen . Den sterkt brukte kommandoen hadde en enkelt snarvei, slik det var vanlig i de fleste BASIC -dialektene i Microsoft. Forkortelse av kommandoer med skiftede bokstaver er unik for Commodore BASIC. GΓGO{Shift-S}GO♥GOSUBINPUTINPUT#PRINT?

Denne tokeniseringsmetoden hadde en feil slik at hvis en inkluderte en REM(BASIC -setning for å legge til en kommentar til koden) etterfulgt av a {Shift-L}, når han prøvde å se programoppføringen, ville BASIC -tolken umiddelbart avbryte oppføringen, vise a ?SYNTAX ERRORog gå tilbake til READY.spør. Denne feilen ble brukt til en viss effekt av programmerere som ønsket å prøve å beskytte arbeidet sitt, selv om det var ganske enkelt å omgå.

Ved å forkorte søkeord, var det mulig å få plass til mer kode på en enkelt programlinje (som kan ta opp to skjermlinjer på 40-kolonnedisplayer-dvs. C64 eller PET, eller fire linjer på VIC-20s 22-kolonners display). Dette tillot en liten besparelse på overhead for å lagre ellers nødvendige ekstra programlinjer, men ikke noe mer. Alle BASIC -kommandoer ble tokenisert og tok opp 1 byte (eller to, for flere kommandoer i BASIC 7 eller BASIC 10) i minnet, uansett hvilken vei de ble angitt. Slike lange linjer var en plage å redigere. Den LISTkommando som vises hele kommandoordet - som strekker seg programmet linjen utover 2 eller 4 rasterlinjene som kan skrives inn i programminnet.

Opptreden

I likhet med den originale Microsoft BASIC -tolken , er Commodore BASIC tregere enn den opprinnelige maskinkoden . Testresultater har vist at kopiering av 16 kilobyte fra ROM til RAM tar mindre enn et sekund i maskinkode, sammenlignet med over et minutt i BASIC. For å utføre raskere enn tolken begynte programmerere å bruke forskjellige teknikker for å fremskynde utførelsen. Den ene var å lagre ofte brukte flytende verdier i variabler i stedet for å bruke bokstavelige verdier, ettersom tolkning av et variabelnavn var raskere enn å tolke et bokstavelig tall. Siden flytende punkt er standardtype for alle kommandoer, er det raskere å bruke flytende tall som argumenter i stedet for heltall. Når hastigheten var viktig, konverterte noen programmerere deler av BASIC -programmer til 6502 eller 6510 samlingsspråk som ble lastet separat fra en fil eller POKEd til minne fra DATA -setninger på slutten av BASIC -programmet, og utført fra BASIC ved hjelp av SYSkommandoen, enten fra direkte modus eller fra selve programmet . Når kjøringshastigheten til maskinspråket var for stor, for eksempel for et spill eller når de ventet på brukerinndata, kunne programmerere avstemme ved å lese utvalgte minnesteder (for eksempel $ C6 for 64 eller $ D0 for 128, som angir størrelsen på tastaturkøen) for å forsinke eller stoppe kjøringen.


En unik egenskap ved Commodore BASIC er bruk av kontrollkoder for å utføre oppgaver som å tømme skjermen eller plassere markøren i et program; disse kan påberopes enten ved å utstede en kommando der X tilsvarer kontrollkoden som skal utstedes (for eksempel er kontrollkoden for å slette skjermen) eller ved å trykke den aktuelle tasten mellom anførselstegn, og dermed trykke + etter et sitat vil føre til at BASIC viser den visuelle representasjonen av kontrollkoden (i dette tilfellet et omvendt hjerte) som deretter blir handlet på ved programkjøring (direkte utskrift av kontrollkodene bruker mindre minne og kjøres raskere enn å påkalle en CHR $ -funksjon). Dette er i sammenligning med andre implementeringer av BASIC som vanligvis har dedikerte kommandoer for å tømme skjermen eller flytte markøren. PRINT CHR$(X)PRINT CHR$(147)⇧ ShiftCLR HOME

BASIC 3.5 og nyere har riktige kommandoer for å slette skjermen og flytte markøren.

Programlinjer i Commodore BASIC krever ikke mellomrom hvor som helst (men LIST -kommandoen vil alltid vise en mellom linjenummeret og setningen), for eksempel , og det var vanlig å skrive programmer uten mellomrom. Denne funksjonen ble lagt til for å spare minne siden tokenizeren aldri fjerner mellomrom mellom søkeord: tilstedeværelsen av mellomrom resulterer i ekstra byte i det tokeniserte programmet som bare hoppes over under kjøring. Mellomrom mellom linjenummeret og programerklæringen fjernes av tokenizeren. 100 IFA=5THENPRINT"YES":GOTO1600x20

Programlinjer kan totalt være på 80 tegn på de fleste maskiner, men maskiner med 40 kolonnetekster vil føre til at linjen brytes rundt til neste linje på skjermen, og på VIC-20, som hadde en 22-kolonneskjerm, kan programlinjer oppta så mange som fire. BASIC 7.0 på Commodore 128 økte grensen for en programlinje til 160 tegn (fire linjer på 40 kolonner eller to linjer på 80 kolonner). Ved å bruke forkortelser som i ?stedet for PRINT, er det mulig å passe enda mer på en linje. BASIC 7.0 viser a? STRENGER FOR LANGTfeil hvis brukeren skriver inn en programlinje over 160 tegn. Tidligere versjoner gir ingen feil og viser bare KLAR -ledeteksten to linjer ned hvis linjelengden overskrides. Linjenummeret telles i antall tegn på programlinjen, så et femsifret linjenummer vil resultere i fire færre tegn tillatt enn et ett siffer.

Rekkefølgen på utførelsen av Commodore BASIC -linjer ble ikke bestemt av linjenummerering; i stedet fulgte den rekkefølgen linjene ble knyttet til i minnet. Programlinjer ble lagret i minnet som en enkelt koblet liste med en peker (som inneholder adressen til begynnelsen av den neste programlinjen), et linjenummer og deretter den tokeniserte koden for linjen. Mens et program ble lagt inn, ville BASIC stadig omorganisere programlinjer i minnet, slik at linjenumrene og pekerne alle var i stigende rekkefølge. Etter at et program ble angitt, kan manuell endring av linjenumre og pekere med POKE- kommandoene imidlertid tillate utførelse uten ordre eller til og med gi hver linje det samme linjenummeret. I de første dagene, da BASIC ble brukt kommersielt, var dette en programvarebeskyttelsesteknikk for å motvirke tilfeldig endring av programmet.

Linjenumre kan variere fra 0 til 65520 og det kan ta fem byte å lagre uavhengig av hvor mange sifre det er i linjenummeret, selv om utførelsen er raskere jo færre sifre det er. Å sette flere utsagn på en linje vil bruke mindre minne og utføres raskere.

GOTO- og GOSUB -setninger vil søke nedover fra gjeldende linje for å finne et linjenummer hvis et fremoverhopp utføres, i tilfelle et hopp bakover, vil de gå tilbake til starten av programmet for å begynne å søke. Dette vil bremse større programmer, så det er å foretrekke å sette ofte brukte underrutiner nær starten av et program.

Variablenavn har bare 2 tegn; dermed variabelnavn VARIABLE1, VARIABLE2og VAalle refererer til samme variabel.

Commodore BASIC støtter også bitvise operatører - AND, OR og XOR , selv om denne funksjonen var en del av Microsoft 6502 BASIC -kjernen, ble den vanligvis utelatt i andre implementeringer som Applesoft BASIC .

Det opprinnelige tallformatet til Commodore BASIC, i likhet med det til overordnede MS BASIC , var flytende punkt . De fleste moderne BASIC -implementeringer brukte en byte for karakteristikken ( eksponenten ) og tre byte for mantissen . Nøyaktigheten til et flytende punktnummer ved hjelp av en tre-byte mantissa er bare omtrent 6,5 desimal siffer, og avrundingsfeil er vanlig. 6502 implementeringer av Microsoft BASIC brukte 40-biters flytende punktaritmetikk, noe som betyr at variabler tok fem byte å lagre (fire byte mantissa og en byte for eksponenten) i motsetning til 32-biters flytende punkt som finnes i BASIC-80.

Mens 8080/Z80 -implementeringer av Microsoft BASIC støttet heltall og doble presisjonsvariabler, var 6502 implementeringer bare flytende punkt.

Selv om Commodore BASIC støtter signerte heltallsvariabler (angitt med et prosenttegn) i området -32768 til 32767, brukes de i praksis bare for matrisevariabler og tjener funksjonen til å bevare minne ved å begrense matriseelementer til to byte hver (en rekke med 2000 elementer vil oppta 10 000 byte hvis de er erklært som et flytende punkt -array, men bare 4000 hvis deklareres som et heltall array). Betegner en hvilken som helst variabel som heltall får BASIC ganske enkelt til å konvertere den tilbake til flytende punkt, bremse programutførelsen og kaste bort minne ettersom hvert prosenttegn tar en ekstra byte å lagre (siden dette også gjelder for heltall -matriser, bør programmereren unngå å bruke dem med mindre det er veldig store matriser brukes som ville overstige tilgjengelig minne hvis de lagres som flytende punkt). Det er heller ikke mulig å POKE- eller PEEK -minnesteder over 32767 med adresse definert som et signert heltall.

En periode (.) Kan brukes i stedet for tallet 0 (altså i stedet for eller i stedet for ), dette vil utføres litt raskere. 10 A=.10 A=010 FOR A=. TO 10010 FOR A=0 to 100

Den SYS uttalelse, brukes til å starte maskinen språklige programmer, ble lagt til av Commodore og var ikke i den opprinnelige Microsoft BASIC-kode, som inneholdt kun USR funksjon for å påkalle maskin språk rutiner. Den laster automatisk CPU-registerene med verdiene i $ 30C-$ 30F (C64, varierer på andre maskiner) -dette kan brukes til å overføre data til maskinspråksrutiner eller som et middel til å kalle kernalfunksjoner fra BASIC (som et eksempel , tømmer skjermen). POKE 780,147:SYS 65490

Siden andre 8-biters Commodore-maskiner enn C128 ikke kan starte diskprogramvare automatisk, er den vanlige teknikken å inkludere en BASIC-stubbe som å starte programkjøring. Det er mulig å starte programvare automatisk etter lasting og ikke kreve at brukeren skriver inn en RUN -setning, dette gjøres ved å ha et stykke kode som kroker den BASIC "klare" vektoren til $ 0302 . 10 SYS 2048

Som med de fleste andre versjoner av Microsoft BASIC , hvis en matrise ikke deklareres med en DIM -setning, settes den automatisk til ti elementer (i praksis 11 siden matriseelementer telles fra 0). Større matriser må deklareres, ellers vil BASIC vise en feil når programmet kjøres, og en matrise kan ikke re-dimensjoneres i et program med mindre alle variabler er slettet via en CLR-setning. Numeriske matriser fylles automatisk med nuller når de opprettes. Det kan være en kort forsinkelse i programkjøringen hvis en stor matrise er dimensjonert.

Strengvariabler representeres ved å merke variabelnavnet med et dollartegn. Således er de variable AA$, AAog AA%vil hvert bli forstått som tydelig. Arrayvariabler anses også å skille seg fra enkle variabler, og derfor refererer ikke A og A (1) til den samme variabelen. Størrelsen på en strengmatrise refererer bare til hvor mange strenger som er lagret i matrisen, ikke størrelsen på hvert element, som tildeles dynamisk. I motsetning til noen andre implementeringer av Microsoft BASIC, krever ikke Commodore BASIC strengplass for å bli reservert ved starten av et program.

I motsetning til andre 8-biters maskiner som Apple II, har Commodores maskiner alle en innebygd klokke som initialiseres til 0 når den slås på og oppdateres med hver hake i PIA/VIA/TED/CIA-timeren, altså 60 ganger i sekundet . Det er tildelt to systemvariabler i BASIC, TI og TI $ , som begge inneholder gjeldende tid. TI er skrivebeskyttet og kan ikke endres; Dette vil resultere i en syntaksfeilmelding. TI $ kan brukes til å angi tiden via en seks tallstreng (det oppstår en feil ved bruk av en annen streng enn seks tall). Klokken er ikke en veldig pålitelig metode for tidvisning siden den stopper når avbrudd blir slått av (utført av noen kernalrutiner) og tilgang til IEC (eller IEEE -porten på PET) -porten vil bremse klokkeoppdateringen med noen få flått.

Den RND funksjon i Commodore BASIC kan benytte klokken for å generere tilfeldige tall; dette oppnås med RND (0) , men det er av relativt begrenset bruk ettersom bare tall mellom 0 og 255 returneres. Ellers fungerer RND på samme måte som andre implementeringer av Microsoft BASIC ved at en pseudo-tilfeldig sekvens brukes via en fast 5-byte frøverdi lagret ved strøm på på minnesteder $ 8B- $ 8F på C64 (plasseringen er forskjellig fra andre maskiner). RND med et hvilket som helst tall høyere enn 0 vil generere et tilfeldig tall som er slått sammen fra verdien som er inkludert i RND -funksjonen og frøverdien, som oppdateres med 1 hver gang en RND -funksjon utføres. RND med et negativt tall går til et punkt i sekvensen til gjeldende frøverdi spesifisert av tallet.

Siden generering av ekte tilfeldige tall er umulig med RND -setningen, er det mer typisk på C64 og C128 å bruke SID -brikkens hvite støy -kanal for tilfeldige tall.

BASIC 2.0 led notorisk av ekstremt treg søppelinnsamling av strenger. Søppelinnsamling blir automatisk påkalt når en FRE -funksjon kjøres, og hvis det er mange strengvariabler og matriser som har blitt manipulert i løpet av et program, kan det ta mer enn en time å rydde dem under de verste forholdene. Det er heller ikke mulig å avbryte søppeloppsamling ettersom BASIC ikke skanner RUN/STOP -tasten mens du utfører denne rutinen. BASIC 4.0 introduserte et forbedret søppelsamlingssystem med ryggpekere og alle senere implementeringer av Commodore BASIC har det også.

Den FRE funksjon i BASIC 2,0 LED av et annet teknisk feil i at den ikke kan håndtere signerte tall enn 32.768, således hvis funksjonen blir startet på en C64 (38k BASIC minne), en negativ mengde ledig BASIC minne vil bli vist (tilsette 65535 til det rapporterte nummeret vil få riktig mengde ledig minne). PET og VIC-20 hadde aldri mer enn 32k totalt minne tilgjengelig for BASIC, så denne begrensningen ble ikke tydelig før C64 ble utviklet. Den FRE funksjonen på BASIC 3,5 og 7,0 rettet opp dette problemet og FRE på BASIC 7,0 var også "delt" i to funksjoner, en for å vise gratis BASIC programteksten minne og den andre for å vise fri variabel minne.

Alternativer

Simons 'BASIC oppstartsskjerm

Mange BASIC -utvidelser ble utgitt for Commodore 64, på grunn av de relativt begrensede mulighetene til den opprinnelige BASIC 2.0. En av de mest populære utvidelsene var DOS Wedge , som var inkludert på Commodore 1541 Test/Demo Disk . Denne utvidelsen på 1 KB til BASIC la til en rekke diskrelaterte kommandoer, inkludert muligheten til å lese en diskkatalog uten å ødelegge programmet i minnet. Funksjonene ble deretter innlemmet i forskjellige tredjepartsutvidelser, for eksempel den populære Epyx FastLoad- kassetten. Andre BASIC-utvidelser la til flere søkeord for å gjøre det lettere å kode sprites, lyd og høyoppløselig grafikk som Simons 'BASIC .

Selv om BASIC 2.0 mangel på lyd- eller grafikkfunksjoner var frustrerende for mange brukere, hevdet noen kritikere at det til slutt var gunstig siden det tvang brukeren til å lære maskinspråk.

Begrensningene til BASIC 2.0 på C64 førte til bruk av innebygd ROM-maskinspråk fra BASIC. For å laste en fil til et angitt minnested, vil filnavnet, stasjonen og enhetsnummeret bli lest av et anrop :; plasseringen vil bli spesifisert i X- og Y -registerene :; og lasten rutine ville bli kalt: . SYS57812"filename",8POKE780,0:POKE781,0:POKE782,192SYS65493

Et diskmagasin for C64, Loadstar , var et sted for hobbyprogrammerere, som delte samlinger av proto-kommandoer for BASIC, kalt med SYS address + offsetkommandoen.

Fra et moderne programmeringssynspunkt presenterte de tidligere versjonene av Commodore BASIC en rekke dårlige programmeringsfeller for programmereren. Ettersom de fleste av disse problemene stammer fra Microsoft BASIC , led praktisk talt alle hjemmebaserte datamaskiner BASIC i epoken av lignende mangler. Hver linje i et Microsoft BASIC -program ble tildelt et linjenummer av programmereren. Det var vanlig praksis å øke tallene med en verdi (5, 10 eller 100) for å gjøre det enklere å sette inn linjer under programredigering eller feilsøking, men dårlig planlegging betydde at det å sette inn store deler i et program ofte krevde omstrukturering av hele koden. En vanlig teknikk var å starte et program på noen lav linjenummer med en ON ... GOSUB hoppe tabellen , med liket av programmet strukturert i seksjoner som starter på et bestemt linjenummer som 1000, 2000 og så videre. Hvis en stor seksjon måtte legges til, kan den bare tildeles det neste tilgjengelige hovedlinjenummeret og settes inn i hoppetabellen.

Senere BASIC -versjoner på Commodore og andre plattformer inkluderte en DELETE og RENUMBER -kommando, samt en AUTO linjenummereringskommando som automatisk ville velge og sette inn linjenumre i henhold til en valgt økning. I tillegg behandles alle variabler som globale variabler. Det er vanskelig å lage klart definerte løkker, noe som ofte får programmereren til å stole på GOTO -kommandoen (dette ble senere utbedret i BASIC 3.5 med tillegg av kommandoene DO, LOOP, WHILE, UNTIL og EXIT ). Flag -variabler måtte ofte opprettes for å utføre visse oppgaver. Tidligere BASIC fra Commodore mangler også feilsøkingskommandoer, noe som betyr at feil og ubrukte variabler er vanskelige å fange. HVIS ... DA ... ELSE strukturer, en standard del av Z80 Microsoft BASIC, ble lagt til BASIC 3.5 etter å ha vært utilgjengelig i tidligere versjoner av Commodore BASIC.

Bruk som brukergrensesnitt

I likhet med andre hjemmemaskiner , startet Commodores maskiner direkte inn i BASIC -tolken. BASICs fil- og programmeringskommandoer kan legges inn i direkte modus for å laste og kjøre programvare. Hvis programkjøringen ble stoppet ved hjelp av RUN/STOP -tasten, ville variable verdier beholdes i RAM og kunne SKRIVES ut for feilsøking. 128 dedikerte til og med sin andre 64k -bank til variabel lagring, slik at verdier kunne vedvare til en NEWeller RUNkommando ble utstedt. Dette, sammen med den avanserte skjermredigereren som følger med Commodore BASIC, ga programmeringsmiljøet en REPL -lignende følelse; programmerere kan sette inn og redigere programlinjer på hvilken som helst skjermplassering, interaktivt bygge programmet. Dette er i motsetning til datidens forretningsorienterte operativsystemer som CP/M eller MS-DOS , som vanligvis startet opp i et kommandolinjegrensesnitt . Hvis det var nødvendig med et programmeringsspråk på disse plattformene, måtte det lastes inn separat.

Mens noen versjoner av Commodore BASIC inkluderte diskspesifikke DLOADog DSAVEkommandoer, manglet versjonen som er innebygd i Commodore 64 disse, noe som krever at brukeren angir harddiskens enhetsnummer (vanligvis 8 eller 9) til standardkommandoen LOAD, som ellers var standard på bånd. En annen utelatelse fra Commodore 64s BASIC 2.0 var en DIRECTORYkommando for å vise innholdet på en disk uten å tømme hovedminnet. På de 64 ble visning av filer på en disk implementert som å laste et "program" som, når det ble oppført, viste katalogen som et pseudo BASIC -program, med filens blokkstørrelse som linjenummer. Dette førte til at programmet som ble lastet over ble overskrevet. Addons som DOS Wedge overvant dette ved å gjengi katalogoppføringen direkte til skjermminnet.

Versjoner og funksjoner

En liste over CBM BASIC -versjoner i kronologisk rekkefølge, med flere funksjoner:

Utgitte versjoner

  • V1.0: PET 2001 med chiclet-tastatur og innebygd Datassette (original PET)
    • matriser begrenset til 256 elementer
    • PEEK -kommandoen er eksplisitt deaktivert over BASIC ROM -steder over $ C000
  • V2.0 (første utgivelse): PET 2001 med tastatur for full reise og oppgraderings-ROMer
    • legge til støtte for IEEE-488
    • forbedret søppelsamlingen
    • fikse matrisefeil
    • Påskeegg - å angi WAIT6502,[nummer] viser MICROSOFT!et vilkårlig antall ganger
  • V4.0: PET/CBM 4000/8000 -serien (og sen versjon PET 2001)
    • diskoperasjoner : DLOAD,DSAVE,COPY,SCRATCH,etc. (15 i alt)
    • diskfeilkanalvariabler: DS,DS$
    • sterkt forbedret søppelinnsamlingsytelse
  • V2.0 (andre utgivelse, etter 4.0): VIC-20 ; C64
  • V4+: CBM-II- serien (aka B, P-område)
    • Minnehåndtering: BANK
    • flere diskoperasjoner :BLOAD, BSAVE,DCLEAR
    • formatert utskrift: PRINT USING,PUDEF
    • feiloppbevaring: DISPOSE
    • alternativ forgrening: ELSE
    • dynamisk feilhåndtering: TRAP,RESUME,ERR$()
    • fleksibel DATAlesing: RESTORE [linetall]
    • streng søkefunksjon: INSTR
  • V3.5: C16/116 , Plus/4
    • lyd- og grafikkommandoer
    • joystick -inngang:JOY
    • desimalheksadesimal konvertering:DEC(),HEX$()
    • strukturert looping: DO,LOOP,WHILE,UNTIL,EXIT
    • tildeling av funksjonstaster: KEY(også direkte modus)
    • programoppføring/redigering: AUTO,DELETE,RENUMBER
    • feilsøking (sporing):TRON, TROFF
    • MLM -kommando:MONITOR
    • C (1) 16, Plus/4 påskeegg - skriv inn SYS 52650
  • V7.0: C128
    • flere lyd og grafikk-kommandoer, inkludert sprite håndtering
    • innebygd sprite-editor: SPRDEF
    • blokker med flere utsagn for IF THEN ELSEstrukturer:BEGIN,BEND
    • padle , lightpen -inngang:POT,PEN
    • eksklusiv eller funksjon:XOR
    • få variabel adresse: POINTER
    • vindu i tekstmodus: WINDOW
    • kontrollert tidsforsinkelse: SLEEP
    • Minnehåndtering: SWAP,FETCH,STASH,FRE(1)
    • brukte 128 -bankens bytte til å lagre programkode separat fra variabler. Variable verdier vil bli bevart på tvers av programkjøringer hvis programmet ble startet med GOTO -kommandoen.
    • flere diskoperasjoner :BOOT,DVERIFY
    • CPU -hastighetsjustering: FAST,SLOW(2 mot 1 MHz)
    • gå inn i C64 -modus: GO64
    • udokumentert, fungerer: RREG(les CPU -registre etter a SYS)
    • uimplementerte kommandoer: OFF,QUIT
    • C128 Påskeegg - skriv inn SYS 32800,123,45,6

Uutgitte versjoner

  • V3.6: Commodore LCD (uutgitt prototype). Nesten identisk med V7.0, med følgende forskjeller:
    • VOLUME i stedet for VOL
    • EXIT i stedet for QUIT
    • FAST,SLOW kommandoer ikke tilstede
    • Tilleggskommando: POPUPS
  • V10: Commodore 65 (ikke utgitt prototype)
    • kommandoer for grafikk/video: PALETTE,GENLOCK
    • mus input:MOUSE,RMOUSE
    • SEQverktøyet tekstfil ( ):TYPE
    • programredigering: FIND,CHANGE
    • Minnehåndtering: DMA,FRE(2)
    • uimplementerte kommandoer: PAINT,LOCATE,SCALE,WIDTH,SET,VIEWPORT,PASTE,CUT

Bemerkelsesverdige utvidelsespakker

Referanser

Kilder

BASIC 2.0
  • Angerhausen et al. (1983). The Anatomy of the Commodore 64 (for full referanse, se C64 -artikkelen).
GRUNNLEGGENDE 3.5
  • Gerrard, Peter; Bergin, Kevin (1985). Komplett COMMODORE 16 ROM demontering . Gerald Duckworth & Co. Ltd. ISBN  0-7156-2004-5 .
GRUNNLEGGENDE 7.0
  • Jarvis, Dennis; Springer, Jim D. (1987). BASIC 7.0 Internt . Grand Rapids, Michigan: Abacus Software, Inc. ISBN  0-916439-71-2 .
GRUNNLEGGENDE 10.0