SCELBAL
SCELBAL , skrót od SCientific ELEmentary BAsic Language , to wersja języka programowania BASIC wydana w 1976 roku dla SCELBI i innych wczesnych mikrokomputerów opartych na procesorach Intel 8008 i 8080 , takich jak Mark-8 . Późniejsze dodatki do języka obejmowały rozszerzony pakiet matematyczny i obsługę ciągów . Oryginalna wersja wymagała 8 kB pamięci RAM , natomiast dodatki wymagały co najmniej 12 kB.
Język został opublikowany w formie książki, z sekcjami wprowadzającymi, po których następują schematy blokowe , a następnie kod asemblera 8008 . W książce opisano sposoby oszczędzania większej ilości pamięci, na przykład wyłączanie tablic i sposób, w jaki użytkownik może dodawać własne nowe funkcje do języka.
Historia
Głównym autorem SCELBAL jest Mark Arnold, który był uczniem szkoły średniej w 1974 roku, kiedy ogłoszono SCELBI. Arnold przyjaźnił się z profesorami na Uniwersytecie Wyoming (UW) i za ich pośrednictwem załatwił założenie konta na ich komputerze typu mainframe Sigma 7 . Pierwsza wersja tego, co stało się SCELBAL, została napisana dla tej maszyny. Później tego samego roku napisał kompilator krzyżowy 8008 .
Arnold rozpoczął studia na UW w 1975 roku i skontaktował się z Natem Wadsworthem, jednym z założycieli SCELBI, przedstawiając pomysł skompilowanej wersji BASIC-a dla ich nowej platformy. Byłby to system wieloprzebiegowy, pozwalający na zapisanie wersji pośrednich na kasecie magnetofonowej . Byłoby to bardzo uciążliwe w użyciu, ale powodowałoby utworzenie programów, które działałyby na modelach systemu 4 kB 8H. Wadsworth opowiadał się za interpreterem , który wymagałby 8 kB i który byłby dostępny w nowych modelach systemu 8B. W języku tym zastosowano zmiennoprzecinkowe opublikowane przez Wadswortha w 1975 r Programowanie w języku maszynowym dla 8008 .
Ostateczne uzgodnienie kontraktu, który obejmował wysłanie Arnoldowi systemu rozwojowego 8B, zajęło Wadsworthowi kilka miesięcy. To znacznie opóźniło wydanie języka na rok 1976. Arnold spekulował, że gdyby nie te opóźnienia, SCELBAL mógłby zostać wydany mniej więcej w tym samym czasie co Altair BASIC pod koniec 1975. Po raz pierwszy zostało to zaprezentowane w obszernym artykule w drugim numerze Dr Dziennik Dobba z lutego 1976 r.
Wydanie SCLEBAL zostało ogłoszone w reklamie w numerze Byte z czerwca 1976 roku. Reklama nie łączyła konkretnie języka z platformą SCELBI, zamiast tego oferowała się po prostu w formie książkowej jako kompletna lista źródeł umożliwiająca utworzenie wersji BASIC-a na dowolnym systemie 8008 lub 8080 z wymaganymi 8 kB pamięci RAM. Cena książki wyniosła 49 dolarów, czyli około 233 dolarów w 2021 roku.
Opis
SCELBAL użył 32-bitowego (czterobajtowego) formatu zmiennoprzecinkowego do obliczeń numerycznych, z 23-bitową mantysą , 1-bitowym znakiem mantysy, 7-bitowym wykładnikiem i 1-bitowym znakiem wykładnika. Zostały one zorganizowane w odwrotnej kolejności, z najmniej znaczącym bajtem mantysy w pierwszym bajcie, po nim następuje środkowy, a następnie najbardziej znaczący bajt ze znakiem w górnym bicie. Wykładnik pojawił się jako ostatni, ponownie ze znakiem w górnym bicie. Podręcznik zawiera dobrze udokumentowany kod montażu dla całego pakietu matematycznego, łącznie z punktami wejścia i uwagami dotyczącymi użytkowania. W tej epoce powszechne były formaty 32-bitowe, podczas gdy późniejsze wersje języka BASIC, począwszy od Microsoft BASIC dla MOS 6502 , ogólnie przyjmowały format 40-bitowy (pięć bajtów) w celu zwiększenia precyzji.
Poza tym SCELBAL był podobny do innych dialektów języka BASIC, w tym wczesnych wersji MS, takich jak Altair BASIC , pozbawionych zmiennych łańcuchowych i operatorów oraz szeregu funkcji matematycznych. Pozostałe różnice były mniej wyraźne. Instrukcja IF
miała opcjonalną formę IF...GOTO
, która usuwała potrzebę THEN
, IF X < Y GOTO 100
. Zachowano także krótką formę w stylu MS dla tej samej koncepcji, IF X < Y THEN 100
. Pozwoliło to również na warunkowe wykonanie innych instrukcji, takich jak IF X < Y THEN PRINT X
.
Język podstawowy nie obsługiwał obsługi ciągów znaków, chociaż w PRINT można było używać dosłownych (stałych) ciągów znaków
i posiadał funkcje pomocnicze CHR
do drukowania znaków niedrukowalnych oraz TAB
do zapewniania układu. Co dziwne, system wymagał, ASCII miały ustawiony najwyższy bit, więc aby przekonwertować normalne kody znaków ASCII na kody znaków SCELBI, trzeba było dodać lub odjąć 128. Na przykład
WYDRUKUJ „WITAM” ; CHR ( 172 ); CHR ( 160 ); "ŚWIAT"
aby wygenerować na wyjściu ciąg „HELLO, WORLD”.
INPUT
normalnie odczytałby tekst wprowadzony przez użytkownika jako liczbę, ale pozwoliłby, aby znak dolara wskazywał, że wartość powinna być odczytywana jako kod SCELBI. Na przykład INPUT A
odczytałoby wprowadzone przez użytkownika „1” w A jako wartość zmiennoprzecinkową 1, podczas gdy INPUT A$
spowodowałoby ustawienie A na 177, 49 (ASCII dla „1”) + 128. Dodatkowo, gdy używany jest znak dolara, tradycyjne „?” monit nie jest drukowany, a polecenie powraca do języka zaraz po wprowadzeniu pojedynczego znaku, zamiast czekać na powrót karetki, jak w normalnym przypadku.
Wśród kilku innych różnic było to, że polecenie NEW
znalezione w MS, które usuwa istniejący kod programu i dane, nosi nazwę SCR
od „scratch”, a funkcja USR
, która nazywa się procedurą języka maszynowego , to UDF
od „funkcji zdefiniowanej przez użytkownika” „. UDF
umożliwiał przekazanie pojedynczego parametru zmiennoprzecinkowego do funkcji zdefiniowanej przez użytkownika, której kod w języku maszynowym musiał zostać załadowany do pamięci w ustalonym miejscu przed uruchomieniem.
Kody błędów zostały zredukowane do dwóch liter, a kody LOAD
i SAVE
zostały dostarczone w formie szablonowej i oczekiwano, że zostaną zaimplementowane po przeniesieniu na różne platformy. Numery linii mogą wynosić od 1 do 999999, podczas gdy większość języków BASIC używa 16-bitowych liczb całkowitych i dlatego obsługuje linie od 1 do 32767 lub od 1 do 65535.
Funkcje językowe
- Jeśli nie zaznaczono inaczej, zaczerpnięto z podręcznika z 1976 r.
Polecenia
Tylko tryb natychmiastowy
W dokumentacji określany jako tryb „wykonawczy”.
SCR
- SCR, odpowiednik MS
NEW
LIST
RUN
LOAD
SAVE
Tryb natychmiastowy lub programowy
DRUKUJ
WEJŚCIE Podobnie jak MS,
- może akceptować wiele zmiennych,
WEJŚCIE A , B , C.
Nie uwzględniono ciągu podpowiedzi. LET
- Podobnie jak MS,
LET
był opcjonalny, więc15 LET X = 10
i15 X = 10
są równoważne. JEŚLI...TO
JEŚLI...GOTO
- Alternatywna forma
JEŻELI...TO
. GOTO
- Wygląda na to, że „wersja ze spacjami”
GO TO
nie była obsługiwana. GOSUB...POWRÓT
DO...DO...KROKU...NASTĘPNY
- Podobnie jak w MS,
KROK
jest opcjonalny i przyjmuje się, że wynosi 1.NEXT
wymagał zmiennej, w przeciwieństwie do późniejszych wersji MS. Tablice REM
END
DIM
- działały jak w MS, ale były opcjonalne i można je było wyłączyć, aby oszczędzać pamięć. Obsługiwane były tylko tablice jednowymiarowe, a łączna liczba elementów wszystkich tablic wynosiła 64 liczby.
Funkcje
INT
SGN
ABS
SQR
RND
- Podobnie jak w MS, pobiera zmienną fikcyjną i zwraca wartość od 0 do 1.
CHR
- Zwróć uwagę na brak $ znalezionego w MS, które używa
CHR$
. ZAKŁADKA
UDF
Rozszerzenia
SCELBI opublikował dwa rozszerzenia systemu: Dodatek dotyczący funkcji matematycznych i Dodatek dotyczący ciągów znaków.
Dodatek dotyczący funkcji matematycznych
Dodatek dotyczący funkcji matematycznych dodał pięć nowych funkcji przestępnych : SIN
, COS
, EXP
, LOG
i ATN
.
Dodatek do sznurka
Dodatek ciągów był nieco większy niż funkcje matematyczne i zawierał szereg nowych funkcji.
Ciągi mogą mieć długość do 80 znaków, a system może przechowywać łącznie 64 zmienne łańcuchowe. Dowolna z tych 64 lub wszystkie mogą być tablicami jednowymiarowymi, ale całkowita liczba nadal musiała wynosić w sumie 64 ciągi. Co dziwne, tablice ciągów nie wymagały DIM
.
W przeciwieństwie do MS BASIC i obsługi ciągów Dartmouth BASIC , która go zainspirowała, SCELBI zastosował styl manipulacji ciągami „krojenia”, który można znaleźć we współczesnych językach BASIC, takich jak SDS BASIC , HP Time-Shared BASIC i Northstar BASIC lub późniejszy Atari BASIC . Zamiast używać funkcji takich jak LEFT$
, RIGHT$
, MID$
aby uzyskać dostęp do podciągów, zastosowano składnię dostępu do tablicy z dwukropkiem poprzedzającym punkt początkowy i opcjonalnie średnikiem poprzedzającym długość. Ponieważ SCELBAL obsługiwał także tablice łańcuchowe, pierwszą liczbą w akcesorach tablicy był indeks tablicy i była ona opcjonalna, jeśli zmienna nie była tablicą. I tak na przykład kod:
10 LET A$ = „Witajcie” 20 DRUKUJ A$ ( : 2 ; 3 )
spowoduje wydrukowanie na wyjściu „ELL”. Jeśli użyto tablicy, składnia wymagała indeksu tablicy w pierwszym parametrze:
100 LET A$ ( 1 ) = „Witajcie” 150 LET A$ ( 2 ) = „ŚWIAT” 200 DRUKUJ A$ ( 2 : 2 ; 3 )
spowoduje wydrukowanie na wyjściu „ORL”. SCELBAL pozwolił także na pominięcie średnika, który określa znaki od punktu początkowego do końca ciągu. I tak na przykład kod:
210 DRUKUJ $ ( 2 : 2 )
spowodowałoby wypisanie na wyjściu „ORLD”.
Chociaż jest podobny do SDS BASIC, istnieje zasadnicza różnica w sposobie działania w porównaniu z innymi językami BASIC, które używają składni wycinania, ponieważ ostatnim parametrem jest długość, a nie pozycja. Przykładowo w Atari BASIC podobnie wyglądający kod:
20 DRUKUJ A$ ( 2 , 3 )
zamiast tego wyświetli „EL”, ponieważ instrukcja oznacza „wydrukuj wszystkie znaki między pozycjami 2 i 3”. W ten sposób SCELBAL działa w sposób bardziej podobny do MS BASIC, gdzie odpowiednikami są:
20 DRUKUJ ŚREDNIE $ ( A$ , 2 , 3 )
I
210 DRUKUJ PRAWO ( A$ ( 2 ), 2 )
Aby dodać pełną obsługę ciągów znaków, w dodatku zastąpiono oryginalny CHR
CHR $
, który odpowiadał składni swojego odpowiednika w MS. Podobnie zmodyfikowano INPUT , tak aby zmienne łańcuchowe działały jak zmienne numeryczne, czekając na powrót karetki, a następnie przypisując całe dane wprowadzone przez użytkownika do powiązanej zmiennej łańcuchowej.
Dodano także funkcje pomocnicze LEN
i ASC
oraz VAL$ ,
aby przekonwertować ciąg zawierający wartość liczbową na ciąg znaków reprezentujący tę liczbę. Podobnie jak w MS, do łączenia używano znaku +
operator.
Cytaty
Bibliografia
- Arnold, Marek; Wadsworth, Nat (1976). SCELBAL: język wyższego poziomu dla systemów 8008/8080 (PDF) . Doradztwo komputerowe SCELBI.
- Arnold, Marek (1977). SCELBAL Dodatek dotyczący funkcji matematycznych . Doradztwo komputerowe SCELBI.
- Arnold, Marek (1977). Dodatek do strun SCELBAL . Doradztwo komputerowe SCELBI.