HP Time-Shared BASIC — HP Time-Shared BASIC

PODSTAWOWE Współdzielenie czasu HP
Paradygmat tryb rozkazujący
Deweloper Mike Green
Po raz pierwszy pojawiły się przed 1969 ; 52 lata temu ( 1969 )
OS HP 2100
Wpływem
Dartmouth BASIC
Pod wpływem
Por. SDS BASIC , Integer BASIC , Atari BASIC , wiele innych

HP Time-Shared BASIC ( HP TSB ) jest BASIC język programowania tłumacza dla Hewlett-Packard „s 2000 HP linii minikomputer opartych o podziale czasu, systemy komputerowe. TSB jest historycznie godna uwagi jako platforma, która wydała pierwsze publiczne wersje gry Star Trek .

W systemie zaimplementowano dialekt języka BASIC, a także podstawowe konto użytkownika i bibliotekę programów, która umożliwia jednoczesne korzystanie z systemu wielu osobom. Systemy były główną siłą na początku i w połowie lat 70. i wygenerowały dużą liczbę programów. Firma HP utrzymywała bazę danych programów wniesionych do programu, a klienci mogli zamawiać je na taśmie dziurkowanej za symboliczną opłatą.

Większość BASIC-ów z lat 70-tych wywodzi swoją historię z oryginalnego BASIC-a Dartmouth z lat 60-tych, ale wczesne wersje Dartmouth nie obsługiwały zmiennych łańcuchowych, a producenci dodawali własne rozwiązania. Doprowadziło to do dwóch ogólnych stylów; DEC wprowadził te MID/LEFT/RIGHTfunkcje, podczas gdy TSB używał systemu bardziej zbliżonego do Fortranu i innych języków z dzieleniem tablic .

Gdy mikrokomputery zaczęły wchodzić na rynek w połowie lat 70., pojawiło się wiele nowych BASIC-ów, które opierały swoje parsery na składni DEC lub HP. Altair BASIC , oryginalna wersja tego, co stało się Microsoft BASIC , był wzorowany na BASIC-PLUS firmy DEC . Inne, w tym Integer BASIC firmy Apple , Atari BASIC i North Star BASIC były wzorowane na stylu HP. To sprawiało, że konwersje między tymi platformami były nieco trudne, jeśli napotkano obsługę ciągów.

Nomenklatura

Oprogramowanie było również znane pod nazwą wersjonowaną, powiązaną z wersją sprzętową, na której działało, np. HP 2000C Time-Shared BASIC, a system operacyjny był dostępny w różnych odmianach — 2000A, 2000B, 2000C, High-Speed ​​2000C, 2000E, i 2000F.

W niektórych publikacjach HP określa ten język jako „Access BASIC”. To pasowało do nazewnictwa komputerów, na których działał, znanych w niektórych publikacjach jako „2000/Access”. Wydaje się, że ta terminologia była używana tylko krótko, gdy platforma została uruchomiona po raz pierwszy.

Szczegóły platformy

Z wyjątkiem systemów 2000A i 2000E, system realizowany jest w architekturze dwuprocesorowej . Jeden w pełni skonfigurowany procesor 2100-series HP służy do wykonywania większość kodu systemu i cały kod użytkownika, a drugi, mniejszy procesor 2100-series HP służy do obsługi RS-232 linii szeregowej, przez którą raz -dzielenie podłączonych użytkowników. W zależności od konfiguracji sprzętowej system obsługuje do 16 lub do 32 jednoczesnych zdalnych użytkowników.

Typowym terminalem dla systemu TSB był Teletype Model 33 ASR i podłączony bezpośrednio do procesora I/O lub przez modem lub sprzęgacz akustyczny . Nazwy rachunków są kombinacją jednego znaku alfabetycznego, po którym następują trzy cyfry dziesiętne, np . B001. Konta uprzywilejowane zaczynały się na literę „A” i miały dodatkowe możliwości przechowywania poleceń i programów. Superuser konto jest A000. Ten schemat umożliwia do 26 000 kont użytkowników.

Podczas wykonywania programy użytkownika są zamieniane na dysk ze stałą głowicą  — fizycznie dysk, ale działający jak bęben magnetyczny . Programy użytkownika, które nie są wykonywane, są przechowywane na nośniku z ruchomą głowicą lub na dysku załadowanym pakietem . Uprzywilejowani użytkownicy mogą również przechowywać programy na znacznie szybszym bębnie. Kopia zapasowa dysku twardego została utworzona na taśmie magnetycznej .

Nazwy programów i plików składają się z maksymalnie sześciu znaków alfabetycznych (AZ) i cyfr (0-9). Programy są przechowywane w formacie tokenizowanym za pomocą polecenia SAVE. Mogą być również przechowywane w formacie częściowo skompilowanym za pomocą polecenia CSAVE, co pozwala na szybsze uruchomienie. Ponieważ system był ściśle związany z użyciem powszechnie dostępnych teledrukarek, zakończenia linii w plikach składały się ze znaku powrotu karetki (ASCII CR, 0D szesnastkowo), po którym następował znak wysuwu wiersza (ASCII LF, 0A szesnastkowo).

Składnia

Język jest dość standardową implementacją BASIC, zapewniając zintegrowane środowisko edycji i środowiska wykonawczego. Wyciągi są analizowane pod kątem poprawnej składni, gdy są wprowadzane, a następnie przechowywane w formie tokenizowanej. Każda instrukcja BASIC musi znajdować się w jednoznacznie ponumerowanej linii, np.

10 PRINT "HELLO WORLD"

Numery wierszy są obowiązkowe, a instrukcje są automatycznie umieszczane w rosnącej kolejności numerycznej. Wiersze TSB mogą zawierać jedną instrukcję, łączenie wielu instrukcji z dwukropkiem, jak w MS BASIC nie jest obsługiwane. Wiele przypisania zmiennych są dozwolone, na przykład , . Jak w większości wersji BASIC, użycie słowa „LET” było opcjonalne. 20 LET A=B=C=42

W najwcześniejszej wersji (2000A) język obsługiwał następujące funkcje. Późniejsze wersje dodały o wiele więcej funkcji.

  • Bezwarunkowe sterowanie przepływem programu za pomocą GOTOinstrukcji i podprogramów za pomocą instrukcji GOSUBiRETURN
  • Warunkowa kontrola przepływu za pomocą IF/THENinstrukcji
  • Obliczona kontrola przepływu za pomocą instrukcji GOTO/OFiGOSUB/OF
  • Pętla FORi NEXTinstrukcje blokowe oparte na zmiennych
  • Przechowywanie danych w kodzie za pomocą DATA, READ, i RESTOREoświadczeń
  • Wejście i wyjście z użytkownikowi lub dysku pliku poprzez INPUT, READ #, PRINT, PRINT #, i IF END #sprawozdania
  • Zmienne liczbowe w postaci „A” lub „To n ” (gdzie A oznacza jeden list i n wynosi jeden, opcjonalnie cyfra) przechowywanej jako 32-bitowe zmiennoprzecinkowych liczb
  • Zmienne łańcuchowe w postaci "A$" (gdzie A to pojedyncza litera), przechowujące od 0 do 72 znaków
  • Jedno- lub dwuwymiarowe zmienne macierzowe (tablicowe) w postaci „A[x]” lub „A[x,y]”
  • Operacje na macierzach za pomocą instrukcji ( MAT READ, MAT INPUT, MAT PRINT, MAT=) i operacji ( +, -, *, ZER, CON, IDN, INV, TRN)
  • Operatory logiczne ( AND, OR, NOT) i operatory relacyjne ( <, <=, =, #, <>, >=, and >)
  • Wbudowane funkcje matematyczne, w tym trygonometryczne ( SIN, COS, TAN, ATN), logarytmy ( LOG, EXP), pierwiastek kwadratowy ( SQR), generator liczb losowych ( RND), inne ( ABS, INT, SGN, MIN, MAX), oraz funkcje zdefiniowane przez użytkownika
  • Operacje na taśmie dziurkowanej przy użyciu zdalnych terminali teledrukarki elektromechanicznej Teletype Model 33

Obsługa ciągów

Łańcuchy w TSB są traktowane jako tablica znaków, a nie pojedynczy obiekt wieloznakowy. Domyślnie przydzielany jest im jeden znak w pamięci, a jeśli potrzebny jest łańcuch o większej długości, należy o nich wspomnieć przed użyciem. Na przykład utworzy ciąg, który może zawierać maksymalnie 10 znaków. Maksymalna długość łańcucha w TSB to 72 znaki. DIM A$[10]

Dostęp do podciągów w ciągach uzyskuje się za pomocą notacji „ slicing ”: lub , gdzie podciąg zaczyna się od skrajnego lewego znaku określonego przez indeks L i przechodzi do skrajnego prawego znaku określonego przez indeks R, lub formy, w której podciąg zaczyna się od skrajnego lewego znaku określony przez indeks L i kontynuuje do końca ciągu. TSB akceptuje zamiennie () lub []. Indeksy tablicy i podciągu zaczynają się od 1. A$(L,R)A$[L,R]A$[L]

Stoi to w ostrym kontraście do BASIC-ów podążających za wzorcem DEC, które używają funkcji takich jak LEFT$(), MID$()i RIGHT$()do dostępu do podciągów, chociaż ANSI BASIC nadal używa podobnej składni podciągów do wprowadzonej przez Hewlett-Packard. Notacji HP można również użyć po stronie docelowej instrukcji LET lub INPUT, aby zmodyfikować część istniejącej wartości ciągu, na przykład lub , czego nie można zrobić we wczesnych implementacjach LEFT/MID/RIGHT. 100 A$[3,5]="XYZ"120 B$[3]="CHANGE ALL BUT FIRST TWO CHARS"

Główną zaletą tego stylu dostępu do ciągów jest to, że eliminuje potrzebę skomplikowanego zarządzania pamięcią, które jest wymagane w przypadku zmiany długości ciągów. MS BASIC miał długą bibliotekę do obsługi kompresji pamięci poprzez usuwanie martwej przestrzeni ze sterty łańcuchów, gdy systemowi zabrakło pamięci. Był również notorycznie powolny i był kilkakrotnie modyfikowany w ciągu swojego życia, aby poprawić wydajność lub naprawić błędy. Wadą stylu TSB jest to, że ciąg zawsze zajmuje pełną ilość miejsca DIMed, nawet jeśli ciąg wewnątrz jest pusty, a proste zadania, takie jak konkatenacja, mogą potencjalnie przepełnić ciąg, chyba że na początku został ustawiony duży rozmiar.

Późniejsze wersje Dartmouth BASIC zawierały zmienne łańcuchowe, oparte na tym samym wzorcu, który można znaleźć w BASIC-PLUS i MS BASIC. Jednak ta wersja nie używała funkcji LEFT/MID/RIGHT do manipulowania ciągami, ale zamiast tego używała CHANGEpolecenia, które konwertowało ciąg do i z równoważnych wartości ASCII. Firma HP wprowadziła identyczną funkcjonalność, zmieniając tylko nazwę na CONVERT. Dodatkowo można użyć pojedynczego cudzysłowu do konwersji stałej numerycznej na znak ASCII, co pozwala na zbudowanie łańcucha w częściach; utworzył ciąg "ABCDEF", bez potrzeby używania funkcji. A$='23 '64 '49 "DEF"CHR$()

Polecenia MAT

Późniejsze wersje Dartmouth BASIC zawierały zestaw MATpoleceń, które umożliwiały wykonywanie operacji na całych tablicach ( macierzach ) za pomocą jednej instrukcji. Były one również dostępne w późniejszych wersjach TSB. W najprostszej formie the MATjest używany jako alternatywna forma LET, stosując wyrażenie do wszystkich elementów tablicy. Na przykład:

100 DIM A(20),B(20)
...
200 MAT A=A+B

Doda wartość każdej wartości w B do każdego wpisu w A w taki sam sposób jak:

100 DIM A(20),B(20)
...
200 FOR I=1 TO 20
210 A[I]=A[I]+B[I]
220 NEXT I

Oprócz tego, że kod jest krótszy i bardziej oczywisty, te polecenia mają również tę zaletę, że są wysoce zoptymalizowane i łatwo przewyższają użycie FOR/NEXT. Dodatkowe funkcje i instrukcje modyfikują PRINTi INPUT, odwracają tablice oraz budują macierze tożsamości i tym podobne w jednej instrukcji.

Inne różnice

TSB zawiera również szereg mniejszych różnic w stosunku do innych dialektów. Do najważniejszych należą:

  • # jest opcjonalną formą nierównego porównania, identyczną z <>
  • computed-goto przy użyciu ON...GOTO/GOSUBskładni nie jest obsługiwane. Zamiast tego wykonuje tę samą funkcję, wybierając numer wiersza z listy na podstawie jego pozycji porządkowej. Na przykład zawsze przejdzie do linii 10, natomiast rozgałęzi się do innych linii, jeśli wartość A wynosi 1, 2 lub 3.GOTO expression OF 1,2,3...GOTO 1 OF 10,20,30GOSUB A OF 100,200,300
  • Operatorów logicznych i relacyjnych można używać w dowolnym wyrażeniu matematycznym, zwracając 0 dla fałszu lub 1 dla prawdy, co było nietypowe dla języków BASIC w tamtych czasach, ale popularne w językach takich jak C . Na przykład rozgałęzi się do wiersza 1600, jeśli C lub D są większe od zera, ponieważ wyrażenie zostanie ocenione jako „prawda” w . Jeśli C i D są równe zero, oceni to jako „fałsz” i gałąź nie zostanie wzięta.IF C+D THEN 1600C+DIFIF
  • TSB zawiera ENTER, odmianę standardowego INPUToświadczenia, które jest kontynuowane po upływie limitu czasu. ENTERma trzy wejścia, limit czasu w sekundach, zmienną zwrotną zawierającą rzeczywisty czas, który upłynął (lub kod stanu), a na końcu dane wejściowe użytkownika. Na przykład poczeka 15 sekund, aż użytkownik wpisze pojedynczy znak. T będzie zawierać rzeczywisty czas, jaki zajęły, -256, jeśli upłynął limit czasu, lub -257 lub -258, aby wskazać problemy z terminalem.ENTER 15,T,A$[1,1]
  • Podczas drukowania stałych łańcuchowych (literałów) w wierszu nie są potrzebne średniki. Na przykład nie wymaga średników między stałymi łańcuchowymi a zmienną A. Niektóre inne BASIC, w tym MS, również obsługują tę składnię. Inni, jak Atari czy Integer, nie.PRINT "THE NUMBER IS"A", TRY A LARGER VALUE."
  • Przecinki w PRINTużyciu tabulatora zatrzymują bardzo 15 znaków, pozostawiając 12 na końcu wiersza do 72.
  • LINFunkcja działa jako pionowe odpowiednik TAB. wstawi trzy znaki powrotu karetki, potencjalnie w istniejącym wierszu, jeśli aktywny był końcowy średnik lub przecinek, podczas gdy przypadek specjalny zawsze przejdzie do następnego wiersza. Integer BASIC miał podobną funkcję, zwaną .LIN(3)LIN(-1)VTAB

Zobacz też

Bibliografia

Cytaty

Bibliografia

Zewnętrzne linki