IBM 1130
Deweloper | IBM Boca Raton |
---|---|
Producent | IBM |
Typ | minikomputer |
Data wydania | 1965 |
Cena wprowadzająca | ~ 1000 USD miesięcznie za wynajem, co odpowiada około 8600 USD w 2021 r |
Przerwane | początek lat 80 |
Jednostki wysłane | 10 000 szac. |
System operacyjny | Monitor dysku 2 (DM2) |
procesor | 16-bitowa, adresowana słowem, 15-bitowa przestrzeń adresowa |
Pamięć | Rdzeń magnetyczny |
Składowanie | Dysk IBM 2310 |
Wyjmowany schowek | Pojedyncza kaseta z dyskiem IBM 2515 |
Wyświetlacz | IBM 1627 Calcomp, IBM 2250 , opcjonalnie |
Wejście | karta perforowana , taśma papierowa , konsola |
Łączność | Adapter komunikacji synchronicznej IBM (SCA) |
Wymiary | rozmiar biurka: szerokość 58,5 cala, głębokość 29 cali, wysokość 44,125 cala |
Masa | 660 funtów |
Cel marketingowy | małe firmy inżynieryjne, szkoły |
Kompatybilność wsteczna |
przez Fortrana |
Poprzednik | IBM 1620 , IBM 650 |
Następca |
Seria IBM/1 System IBM/7 |
Powiązany | System sterowania procesem IBM 1800 |
Strona internetowa |
IBM 1130 Computing System, wprowadzony w 1965 roku, był wówczas najtańszym komputerem IBM . Binarna 16-bitowa maszyna była sprzedawana na wrażliwe na ceny rynki techniczne intensywnie korzystające z obliczeń, takie jak edukacja i inżynieria, zastępując dziesiętny IBM 1620 w tym segmencie rynku. Typowe instalacje obejmowały 1-megabajtowy napęd dyskowy, na którym przechowywany był system operacyjny, kompilatory i programy obiektowe, a źródła programu były generowane i utrzymywane na kartach perforowanych . Fortran był najczęściej używanym językiem programowania, ale dostępnych było kilka innych, w tym APL .
Model 1130 był również używany jako inteligentny interfejs do podłączania wyświetlacza graficznego IBM 2250 lub jako stacja robocza do zdalnego wprowadzania zadań (RJE), podłączona do komputera mainframe System / 360 .
Opis
Całkowita seria produkcyjna 1130 została oszacowana na 10 000. Model 1130 zapisał się w historii komputerów, ponieważ (i jego klony innych producentów) umożliwił wielu ludziom pierwszą bezpośrednią interakcję z komputerem. Jego stosunek ceny do wydajności był dobry, aw szczególności zawierał niedrogie, wymienne magazyny dyskowe z niezawodnym, łatwym w użyciu oprogramowaniem, które może być dostępne w kilku językach wysokiego poziomu. Niska cena (od około 32 000 USD lub 41 000 USD z dyskiem) i dobrze wyważony zestaw funkcji umożliwiły rozwój interaktywnego programu „otwartego sklepu” .
IBM 1130 wykorzystuje to samo opakowanie elektroniki, zwane Solid Logic Technology (SLT), co w System/360 . Ma 16-bitową architekturę binarną, podobnie jak późniejsze minikomputery, takie jak PDP-11 i Data General Nova .
Przestrzeń adresowa wynosi 15 bitów, co ogranicza 1130 do 32 768 16-bitowych słów ( 65 536 bajtów ) pamięci. 1130 wykorzystuje pamięć z rdzeniem magnetycznym , do której procesor adresuje granice słów, używając trybów adresowania bezpośredniego, pośredniego i indeksowanego.
modele
IBM wdrożył pięć modeli 1131 Central Processing Unit, głównego komponentu przetwarzającego IBM 1130. Modele od 1 do 5 opisują czas cyklu pamięci rdzenia, a także zdolność modelu do przechowywania na dysku. Litera od A do D dołączona do numeru modelu wskazuje ilość zainstalowanej pamięci rdzeniowej.
Jednostka centralna IBM 1131 waży około 760/1050 funtów (345/477 kg).
Czas cyklu pamięci | |||||
---|---|---|---|---|---|
Pamięć rdzenia |
3,6 μs, bez dysku wewnętrznego |
3,6 μs plus dyski |
2,2 μs plus dyski |
5,6 μs (3,6 μs: patrz poniżej), pojedynczy dysk |
2,2 μs, bez dysku wewnętrznego |
4096 słów | Model 1A | Wzór 2A | ——— | Wzór 4A | ——— |
8192 słów | Wzór 1B | Wzór 2B | Wzór 3B | Wzór 4B | Wzór 5B |
16 384 słów | Model 1C | Model 2C | Model 3C | ——— | Model 5C |
32 768 słów | Model 1D | Model 2D | Model 3D | ——— | Model 5D |
Model 4 był tańszym produktem z czasem cyklu 5,6 μs. Niektórzy nabywcy ulepszeń wydajności zauważyli, że dostosowanie w terenie w celu osiągnięcia poprawy było zaskakująco trywialne.
Drukarka IBM 1132 polega na procesorze 1130, a nie na wewnętrznej logice, aby określić, kiedy uruchomić obracające się koła drukujące. Drukarki do Modelu 4 działają wolniej, ale wolniejszy procesor nadal nie może za nimi nadążyć. przerwania najwyższego poziomu (przerwanie kolumny czytnika kart poziomu 0 lub przerwanie drukarki poziomu 1), działał z szybszym czasem cyklu 3,6 μs. Niektórzy użytkownicy Modelu 4 napisaliby fałszywy sterownik drukarki który nie odrzucił przerwania drukarki, aby skorzystać z wyższej szybkości procesora. Jednak przerwania niższego poziomu są wyłączone podczas tego interwału, nawet przerwanie końca karty (poziom 4) z czytnika kart 1442.
Produkty kontynuacyjne
IBM 1800 , ogłoszony w listopadzie 1964, jest poprzednikiem IBM 1130 do zastosowań w sterowaniu procesami . Wykorzystuje sprzęt, a nie pamięć rdzeniową dla trzech rejestrów indeksowych i zawiera dwie dodatkowe instrukcje (CMP i DCM) oraz dodatkowe możliwości obsługi przerwań i wejścia /wyjścia . Jest następcą IBM 1710 , ponieważ IBM 1130 jest następcą IBM 1620 .
IBM 1500 to wieloużytkownikowy system edukacyjny oparty na IBM 1130 lub IBM 1800. Może łączyć się z maksymalnie 32 stacjami roboczymi uczniów, z których każda ma różne możliwości audiowizualne .
Poza tym IBM nie wyprodukował żadnych kompatybilnych następców systemów 1130. IBM System/7 to system kontroli procesów i czasu rzeczywistego, a IBM Series/1 to 16-bitowy minikomputer ogólnego przeznaczenia, oba o różnej architekturze od 1130 i od siebie nawzajem.
Chronologia
- 11 lutego 1965 - IBM wprowadza 1130 (modele 1A, 1B, 2A i 2B). Zapowiedziano również drukarkę IBM 1132, najtańszą internetową drukarkę komputerową, jaką IBM kiedykolwiek ogłosił w tamtym czasie.
- Czwarty kwartał 1965 – Pierwsze dostawy do klientów rozpoczynają się z fabryki w San Jose.
- 31 marca 1966 – IBM wprowadza system edukacyjny IBM 1500.
- Kwiecień 1966 – wysłano IBM 1800.
- 9 sierpnia 1966 - IBM wprowadza adapter komunikacji synchronicznej 1130, który umożliwia podłączenie małego systemu 1130 za pomocą zwykłych dzierżawionych linii telefonicznych do dowolnego modelu IBM System / 360 i działanie jako terminal komunikacyjny.
- 17 kwietnia 1967 — Ogłoszono czterokierunkowe rozszerzenie modelu 1130 (modele 2C, 2D, 3B, 3C i 3D), obejmujące:
- Pięć razy więcej miejsca na dysku i cztery razy więcej pamięci rdzenia;
- Dodatkowa prędkość przetwarzania o prawie 40 procent większa niż wcześniej dostępna;
- Więcej i szybszych urządzeń peryferyjnych, w tym czytnika znaczników optycznych;
- Ulepszony komercyjny pakiet programistyczny.
- Styczeń 1968 – Rozpoczęły się pierwsze dostawy modeli 1130 2C, 2D, 3B, 3C i 3D.
- Lipiec 1968 – Fabryka Boca Raton rozpoczyna wysyłkę modelu 1130.
- 22 lipca 1971 – 1130 Modele 4A i 4B zostają wprowadzone na nowych poziomach ekonomicznych.
- Wrzesień 1971 – Rozpoczęły się pierwsze dostawy do klientów modelu 1130 4.
- 31 maja 1972 – Ogłoszono modele 1C, 1D, 5B, 5C i 5D.
- 1973 - Xerox 530 został wprowadzony na rynek jako potencjalny następca klientów IBM 1130. Zamówienia na Xerox 530 zostały uznane za „zachęcające” od stycznia 1974 r.
Oprogramowanie
Aby zmaksymalizować szybkość i zaoszczędzić miejsce, system operacyjny i kompilatory są napisane w całości w języku asemblera i wykorzystują rzadkie dziś techniki, w tym mieszanie kodu i danych, a także samomodyfikujący się kod .
Wiele programów użytkownika odbywa się w Fortranie . Kompilator 1130 Fortran może działać na maszynie zawierającej tylko 4096 słów rdzenia — chociaż skompilowany program może nie zmieścić się na takiej maszynie. W tym wieloprzebiegowym kompilatorze każda „faza” przetwarza cały program źródłowy i stanowi kolejny krok w kierunku kodu maszynowego. Na przykład pierwsza faza wczytuje instrukcje źródłowe do pamięci, odrzuca wiersze komentarza, usuwa spacje z wyjątkiem literałów tekstowych, łączy linie kontynuacji i identyfikuje etykiety. Kompilator jest dostępny w wersji rezydującej na dysku oraz na 8-kanałowej perforowanej taśmie papierowej lub karty perforowane.
Najszerzej używanym systemem operacyjnym dla 1130 jest Disk Monitor System Version 2 (DM2), wprowadzony w 1967 roku. DM2 to system wsadowy zorientowany na jedno zadanie . Wymaga systemu z co najmniej 4 KB pamięci rdzeniowej i jednym zintegrowanym dyskiem 2310 do przechowywania systemu. Supervisor jest malutki jak na współczesne standardy i zawiera różne szczegóły systemowe, takie jak procedury przerwań pierwszego poziomu, zwane podprogramami poziomu przerwań , a także sterownik dysku i procedury ładowania interpretera poleceń sterujących zadaniami oraz sterownik czytnika kart. Sterowniki urządzeń dla innych urządzeń we/wy wymaganych przez zadanie są włączane w ramach ładowania tego zadania, co może również obejmować zastąpienie podstawowego sterownika dysku bardziej zaawansowanym sterownikiem. Podczas wykonywania pracy tylko a monitor rezydentny , zwany Skeleton Supervisor , rezyduje w pamięci. Ten Supervisor wymaga tylko 1020 bajtów, więc pierwsza dostępna pamięć zadania zaczyna się od adresu /01FE (szesnastkowo) lub słowa 510. Kiedy zadanie kończy się lub zostaje przerwane, nadzorca ładuje analizator rekordów kontroli monitorowania (MCRA), aby odczytać kontrolę zadania dla Następny. Gdy zadanie jest uruchomione, Supervisor jest nieaktywny. Poza sterownikami urządzeń i przetwarzaniem przerwań, cały czas procesora jest całkowicie poświęcony zadaniu. Inne programy dystrybuowane jako część systemu operacyjnego to zrzut pamięci narzędzie, DUMP i program narzędziowy , DUP .
Dostępny był system programowania kart / taśm papierowych do obsługi systemów bez dysku.
Istnieje hierarchia sterowników urządzeń: te, których nazwy kończą się na Z, są przeznaczone dla języka Fortran, na przykład DISKZ, podczas gdy programiści asemblera mogą używać DISK0, a DISK1 był jeszcze szybszy w czytaniu wielu sektorów dysku. Ale DISKZ rozpoczyna adresowanie sektora od pierwszego dostępnego nieużywanego sektora, podczas gdy inne zaczynają się od sektora zerowego dysku, umożliwiając programiście niezaznajomionemu z organizacją dysku przypadkowe zastąpienie programu ładującego.
Inne języki programowania dostępne w modelu 1130 to
Jest nawet francuskojęzyczny kompilator ALGOL , w którym na przykład " Debut...Fin;
" zastępuje " Begin...End;
". Wszystkie wiadomości są w języku francuskim, więc celem jest „kompilacja Bonne”.
Eastern Michigan University opracował kompilator Fortran IV dla 1130, znany jako Fortran-EMU, jako alternatywę dla kompilatora Fortran IV (podzbiór) dostarczonego przez IBM. Dodaje wiele funkcji Fortran IV nieobsługiwanych przez kompilator IBM, w tym typ danych LOGICAL, sześcioliterowe nazwy zmiennych i rozszerzoną diagnostykę. Kompilator Fortran-EMU był dystrybuowany jako talia kart perforowanych w formacie pliku obrazu dysku z usuniętym całym pozostałym obszarem systemowym, aby zapobiec kopiowaniu innych modułów, które normalnie znajdowałyby się na tym samym dysku, takich jak asembler lub kompilatory.
Oklahoma State University opracował kompilator ALGOL 68 , napisany w ANSI Fortran 1966.
Interpreter FOCAL został opracowany na Uniwersytecie Michigan.
IBM dystrybuował również dużą bibliotekę programów, zarówno obsługiwanych przez IBM (Typ I i II), jak i nieobsługiwanych (Typ III i IV).
Ponieważ 1130 był skierowany głównie na rynek naukowy, dominowały programy naukowe i inżynieryjne:
- Pakiet podprogramów naukowych
- Narysuj i wykreśl podprogramy
- Program przepływu obciążenia systemu elektroenergetycznego
- Regresja wielokrotna
- Obliczanie prądów zwarciowych systemu dystrybucji energii elektrycznej
- Analiza rur
- Geometria współrzędnych COGO
- Ciągłe modelowanie systemu (CSMP)
- Programowanie liniowe Optymalizacja matematyczna System podprogramów
- Solver systemów inżynierii budowlanej (STRESS)
- System statystyczny
Model 1130 zajmował również niszę jako maszyna do przetwarzania danych dla mniejszych organizacji:
- 1130 Komercyjny pakiet podprogramów
- System Informacji Studenckiej
- CPM/PERT
Istnieje również oprogramowanie specjalnego przeznaczenia:
- Zdalne wprowadzanie zadań (RJE)
- Skład
Kontrola pracy
Operacja wsadowa 1130 jest kierowana przez zapisy kontrolne w głównym strumieniu wejściowym (czytnik kart lub taśmy papierowej). Istnieją dwa rodzaje zapisów kontroli, zapisy kontroli monitora i zapisy kontroli przełożonego.
Zapisy kontroli monitora
Rekordy kontroli monitora są identyfikowane przez //␢,
po którym następuje „kod pseudooperacji” w kolumnach 4–7. „␢” oznacza pojedynczą spację.
Rekord kontroli | Funkcjonować |
---|---|
//␢* komentarze |
Zawiera komentarz do wydrukowania na liście zadań w kolumnach od 5 do 80 |
//␢PRACA |
Identyfikuje początek zadania |
//␢ASM |
Wywołuje Asembler |
//␢DLA |
Wywołuje kompilator FORTRAN |
//␢PAUZA |
Zatrzymuje system do momentu naciśnięcia klawisza START konsoli |
//␢TYP |
Przełącza z drukarki na konsolę w celu sterowania wejściem i wyjściem rekordu |
//␢TENDENCJĘ |
Anuluje efekt //␢TYP
|
//␢DUP |
Wywołuje program Disk Utility |
//␢XEQ |
Odczytuje i przekazuje kontrolę do głównego programu |
Rekord JOB
może mieć literę „T” w kolumnie 8, aby wskazać, że wszelkie pliki dodane do obszaru użytkownika przez to zadanie powinny zostać usunięte na końcu. Kolumny od 11 do 15 mogą zawierać etykietę wkładu; system sprawdza, czy określona kaseta jest zamontowana przed kontynuowaniem.
Rekord XEQ
może zawierać nazwę uruchamianego programu w kolumnach od 8 do 12. Jeśli zostanie to pominięte, zostanie wykonany program aktualnie znajdujący się w pamięci roboczej. Jeśli kolumna 14 zawiera literę „L”, a program jest w formacie systemu dyskowego (nie obrazu rdzenia), program Core Load Builder wydrukuje mapę rdzenia. Jeśli po tej instrukcji występuje LOCAL
NOCAL
lub FILES
Rekordy kontroli przełożonego, kolumny 16 i 17 zawierają liczbę tych zapisów. Kolumna 19 opcjonalnie wskazywała, która procedura sterownika dysku ma być połączona. „0”, „1” lub „N”, żądanie DISK1, DISK2 lub DISKN, dowolny inny znak, w tym spacja, żąda DISKZ, procedury dyskowej FORTRAN.
Zapisy kontroli przełożonego
Rekordy kontroli nadzorcy zaczynają się od znaku „*” w kolumnie 1, po którym bezpośrednio następuje polecenie pseudo-operacja w kolumnie 2. Są to LOKALNE
, NOKALNE
i PLIKI
dla Core Load Builder. Rekordy kontrolne DUP mają podobny format. Te rekordy sterują łączeniem programów, albo dla // XEQ
, albo dla komendy DUP *STORECI
.
Rekord kontroli | Opis |
---|---|
*LOKALNY |
Dostarcza listę podprogramów, które będą ładowane jako nakładki w czasie wykonywania, a nie dołączone do programu głównego |
*NOKAL |
Dostarcza listę podprogramów, które mają być połączone z programem głównym, nawet jeśli nigdy nie są wywoływane. Są to zwykle albo procedury debugowania, do których operator może ręcznie przejść z konsoli, albo procedury obsługi przerwań |
*AKTA |
Zrównuje numery identyfikacyjne plików z instrukcji FORTRAN DEFINE FILE lub instrukcji Assembler FILE z nazwanymi plikami na dysku. |
Procedura operacyjna
Trwałe wspomnienia IBM 1130 mogły wynikać z jego potrzeby ciągłej interwencji człowieka. Zwykle zajmowało go wykonywanie „zadań” określonych przez talię kart perforowanych . Operator-człowiek ładowałby zadania do czytnika kart i rozdzielał je z powrotem na zadania w celu zwrotu, być może wraz z wydrukiem, wysyłającemu. Operator musiałby również obserwować 1130 w poszukiwaniu dowodów nieprawidłowego lub zablokowanego zadania i interweniować, naciskając klawisz INT REQ na klawiaturze, aby przejść do początku następnego zadania.
Oznaczeniem początku zadania była dziurkowana karta, która zaczynała się od // JOB
. Każda karta, która zaczynała się od //
była poleceniem dla Supervisora i nie mogła być używana jako program użytkownika lub dane. Inne polecenia obejmowały // DUP
do uruchamiania programu Disk Utility Program (aby usunąć pliki lub dodać plik w obszarze tymczasowym do kolekcji plików) i // XEQ
do wykonania nazwanego programu z dysku. Jeśli program użytkownika próbował odczytać kartę poleceń, standardowa procedura czytnika kart zasygnalizowałaby programowi koniec wprowadzania danych i zapisała zawartość tej karty dla przełożonego.
- Początkowe ładowanie programu (IPL)
W przeciwieństwie do IBM 360, w którym urządzenie startowe można wybrać z konsoli systemowej, IBM 1130 można „uruchomić” (IPL: ładowanie programu początkowego) tylko z urządzenia zewnętrznego: czytnika kart lub czytnika taśmy papierowej.
Procedura ładowania początkowego odczytuje jedną kartę z czytnika kart. Karta rozruchowa zawiera kod binarny do odczytu zawartości sektora zerowego dysku, który z kolei obsługuje przerwanie „operacja zakończona” z dysku i wykonuje dodatkowe odczyty dysku, aby przygotować 1130 do pierwszego zadania karty perforowanej. Cały proces trwa około sekundy.
- Procedury odzyskiwania
Kiedy IBM 1130 jest uruchamiany, Supervisor jest nadal w pamięci i prawdopodobnie nienaruszony, ponieważ pamięć rdzenia zachowuje swój stan bez zasilania. Jeśli operator stwierdzi, że program użytkownika utknął w martwym punkcie, nadzorca może wyczuć naciśnięcie klawisza, aby przerwać program i przejść do następnej // karty. Supervisor nie jest chroniony przed modyfikacją przez źle napisane zadanie, co może wymagać od operatora ponownego uruchomienia 1130. Nie było też ochrony przed zapisem na dysk. Jeśli kopia oprogramowania systemowego na dysku zostanie zmodyfikowana, można ją odtworzyć, ponownie ładując ją z około 4000 kart perforowanych kodowanych binarnie (około dwóch pudełek).
Organizacja dysku
Dysk IBM 2310 przechowuje sektory o długości 320 słów (640 bajtów) plus jednowyrazowy adres sektora. Cylinder składa się z dwóch ścieżek na górnej i dolnej powierzchni 2315 lub jednego talerza na pakiecie dysków 1316 używanym w 2311. Każdy cylinder dysku zawiera osiem sektorów. Sektor jest logicznie podzielony przez monitor na szesnaście bloków dyskowych po 20 słów (40 bajtów) każdy. Blok dysku jest jednostką przydziału plików.
System rozróżnia kasety systemowe , które zawierają monitor i narzędzia wraz z danymi użytkownika, oraz kasety niesystemowe , które zawierają tylko dane użytkownika. Wszystkie wkłady zawierają informacje o cylindrze 0, w tym tabelę uszkodzonych cylindrów, identyfikator wkładu i program ładowania początkowego ( kod ładowania początkowego ). W przypadku kaset niesystemowych program ładujący po prostu wyświetla komunikat o błędzie i czeka, jeśli zostanie podjęta próba rozruchu z tej kasety. Na kasecie systemowej jest to program zimnego startu , po którym następuje obszar komunikacji oraz monitor rezydentny w sektorze pierwszym i drugim. Sektory od trzeciego do piątego zawierają tabelę równoważności lokalizacji systemu (SLET) — katalog wszystkich faz wszystkich programów monitorujących. Inne informacje kontrolne wypełniają pierwszą ścieżkę.
Obszar systemowy jest obecny na wkładach systemowych. Zawiera program Disk Monitor i opcjonalnie kompilator FORTRAN, asembler i bufor obrazu rdzenia używany do łączenia relokowalnych programów. Zawiera również katalogi plików użytkownika — Fixed Location Equivalence Table (FLET) i Location Equivalence Table (LET),
Po obszarze systemowym kaseta zawiera do trzech logicznych podziałów: obszar stały , obszar użytkownika i pamięć robocza . Zarówno obszar stały, jak i obszar użytkownika przechowują nietymczasowe programy i dane. Stały rozmiar obszaru jest definiowany przez DUP i przechowuje dane oraz programy tylko w formacie obrazu rdzenia. Nie jest przepakowywany po usunięciu plików. Obszar użytkownika przechowuje dane i programy w dowolnym formacie. Granica między obszarem użytkownika a roboczą pamięcią masową „pływa” — obszar użytkownika rozszerza się w miarę dodawania plików i kurczy, gdy jest przepakowywany w celu odzyskania miejsca z usuniętych plików. Jeśli plik wymaga modyfikacji, zwykle stosuje się // DUP
polecenia, aby go usunąć, co spowoduje przeniesienie kolejnych plików z powrotem w celu wypełnienia luki, a następnie nadanie tej nazwy plikowi tymczasowemu jako nowej wersji pliku. Rzadko modyfikowane pliki migrują zatem w kierunku początku dysku, gdy dołączane są nowe pliki lub nowe wersje, a często modyfikowane pliki są przechowywane na końcu dysku.
Pamięć robocza rozpoczyna się po ostatnim pliku w obszarze użytkownika i zajmuje całe pozostałe miejsce na kasecie. Może zawierać jeden plik tymczasowy utworzony przez system lub użytkownika, taki jak dane wyjściowe kompilatora lub aplikacji. Ten plik może zostać usunięty po zakończeniu bieżącego zadania, chyba że zostanie zapisany w stałym obszarze lub w obszarze użytkownika.
Wszystkie pliki dyskowe są ciągłymi blokami dyskowymi, więc nie ma fragmentacji . Program może używać i modyfikować nazwane pliki, ale nie może ich rozszerzać poza utworzony rozmiar. Program, który tworzy więcej niż jeden plik, musi mieć wszystkie oprócz jednego wstępnie przydzielone przez pakiet DUP.
Przy ograniczonej przestrzeni dyskowej pliki źródłowe programów są zwykle przechowywane jako talie kart. Użytkownicy mający większe wymagania mogą mieć własny dysk zawierający system operacyjny, ale tylko swoje pliki, i musieliby wymienić dysk systemowy „puli” na swój własny i ponownie uruchomić system, gdy ich programy mają być uruchomione. Pewną ulgę przynosi system z drugim dyskiem, który można w całości przeznaczyć na kod i dane jednego użytkownika.
Pakiet dysków lub kaseta są inicjowane do użytku w 1130 przez procedurę inicjowania pakietu dysków (DIPR). Ta procedura skanuje dysk i zapisuje adresy sektorów na wszystkich cylindrach, zaznacza uszkodzone sektory i zapisuje identyfikator kasety na cylindrze zerowym. DIPR to samodzielny program , który jest ładowany z kart lub taśmy papierowej i akceptuje identyfikator kasety z konsoli systemowej.
Program narzędziowy dyskowy (DUP)
Disk Utility Program (DUP) udostępnia polecenia do przesyłania programów, podprogramów i danych. Jest wywoływany przez kartę kontroli zadania // DUP
, po której następuje jedna lub więcej kart kontrolnych:
Komenda | Funkcjonować |
---|---|
*SKLEP |
Przechowuj program w formacie systemu dyskowego (obiekt przenośny) |
*SKLEP |
Przechowuj program w Core Image Format (w pełni połączony i przeniesiony) |
*MAGAZYN DANYCH | Zapisz plik danych na dysku |
*PRZECHOWYWANE DANE | Załaduj ponownie zrzucony program obrazu rdzenia |
* STOREMOD | Zastąp lub utwórz plik dysku |
*WYSYPISKO | Zrzuć plik danych z dysku |
*DUMPDANE | Zrzuć dowolne sektory z dysku |
*KOLEK |
Wydrukuj tabelę równoważności lokalizacji dysku (LET) i tabelę równoważności stałych lokalizacji (FLET), jeśli istnieje stały obszar |
*USUWAĆ | Usuń program lub plik danych |
Inne polecenia, głównie do użytku przez administratora systemu, definiują lub rozszerzają Fixed Area, usuwają kompilator FORTRAN i/lub Assembler z systemu oraz przywracają poprawne adresy sektorów do Working Storage, jeśli zostały zmodyfikowane.
Operandy muszą być umieszczone w stałych kolumnach. Kod urządzenia źródłowego znajduje się w kolumnach 13 i 14, urządzenie docelowe w kolumnach 17 i 18. Te kody urządzeń to:
- UA – obszar użytkownika
- FX – Stały obszar (bez „zakresów” jak w wersji 360; tylko ciągła przestrzeń)
- WS – Magazyn pracy
- CD – karta dziurkowana/główne urządzenie wejściowe (może to być PT : taśma papierowa)
- PR – Drukarnia
Opcjonalnie nazwa programu może być zakodowana w kolumnach od 21 do 25, a pole licznika w kolumnach od 27 do 30. Interpretacja tych pól zależy od żądanej funkcji DUP.
Programy można konwertować do szybciej ładującego się formatu za pomocą polecenia STORECI , które wywołuje Core Image Builder (odpowiednik DM2 Linkage Editor 360). Alternatywnie program może przechodzić przez ten proces za każdym razem, gdy ma zostać uruchomiony, aw przypadku rzadko używanych programów jest to preferowane w celu zaoszczędzenia miejsca na dysku.
Następująca karta kontrolna instruuje DUP, aby wziął bieżącą zawartość pamięci roboczej i przeniósł ją do obszaru użytkownika, nazywając ją PROGZ. DUP zna rozmiar pliku w magazynie roboczym. Rozmiar obszaru użytkownika zostanie powiększony o rozmiar pliku, a rozmiar pamięci roboczej zostanie odpowiednio zmniejszony.
Urządzenia peryferyjne
Pamięć dyskowa służy do przechowywania systemu operacyjnego, kodu obiektowego i danych, ale kod źródłowy jest przechowywany na kartach perforowanych.
Podstawowy model 1130 był dostarczany z napędem dyskowym uruchamianym cewką drgającą IBM 2310 , zwanym „Ramkit”, z działu produktów ogólnych IBM w San Jose. Ich pojedyncze kasety IBM 2315 wielkości pudełka po pizzy mieszczą 512 000 słów lub 1 024 000 bajtów (mniej niż 3,5-calowa dyskietka HD 1,44 MB lub nawet 5,25-calowa dyskietka HD 1,2 MB).
Konsola do pisania IBM 1053 wykorzystuje mechanizm IBM Selectric , co oznacza, że można zmienić krój pisma lub zestaw znaków, zastępując wydrążony element wielkości piłki golfowej. Dostępny jest specjalny element typu dla APL , potężnego języka programowania zorientowanego na tablice , używającego specjalnej notacji symbolicznej. Rząd 16 przełączników dwustabilnych na konsoli do pisania można indywidualnie testować z poziomu programów, używając na przykład specjalnej instrukcji języka Fortran IF (SENSE SWITCH i ) .
Inne dostępne urządzenia peryferyjne obejmowały:
- Drukarki – drukarki liniowe IBM 1132 i IBM 1403
- Karta dziurkowana - czytnik kart / dziurkacz IBM 1442 i czytnik kart IBM 2501
- Taśma papierowa - dziurkacz do taśmy papierowej IBM 1055, czytnik taśmy papierowej IBM 1054 i czytnik taśmy papierowej IBM 1134
- Dysk — dysk IBM 2311
- Taśma magnetyczna — od 1968 r. dyski do przechowywania danych na taśmie magnetycznej IBM 2415 były dostępne jako RPQ .
- Grafika — wyświetlacz graficzny IBM 2250 .
- Kolorowy ploter pisakowy - ploter bębnowy IBM 1627 .
- Czytnik znaczników optycznych — czytnik stron znaczników optycznych IBM 1231
- Komunikacja — synchroniczny adapter komunikacyjny (SCA). IBM 1130 MTCA, dla adaptera sterowania wieloma terminalami , ogłoszony w 1970 roku, umożliwiał podłączenie do czterech terminali 2741 do IBM 1130, do użytku z APL.
Aby uprościć projektowanie urządzeń peryferyjnych, polegają one na procesorze. Czytnik kart nie ma buforów pamięci, ale zamiast tego przekazuje procesorowi przerwanie poziomu zerowego (najwyższy priorytet) po odczytaniu każdej pojedynczej kolumny karty. Jeśli CPU nie odpowie i nie zapisze dwunastu bitów danych, zanim kolejne takie przerwanie wskaże, że następna kolumna została odczytana, dane zostaną utracone. Podobnie drukarka 1132 polega na oprogramowaniu w 1130. Kiedy litera, taka jak A
, znajdzie się na swoim miejscu, CPU musi przeanalizować zbuforowaną linię tekstu i złożyć tablicę bitów, która wskaże 1132, które pozycje drukowania powinny być wydrukowane z A.
_ Jeśli procesor nie może zareagować, zanim A
obróci się z pozycji, prędkość drukowania może ulec znacznemu pogorszeniu.
Inne urządzenia peryferyjne akceptują tekst w kodzie specyficznym dla urządzenia, wygodnym dla jego sprzętu. CPU musi przetłumaczyć go na lub z kodu EBCDIC, w którym CPU przetwarza tekst.
Przegląd zestawu instrukcji
Instrukcje miały formaty krótkie (jedno słowo) i długie (dwa słowa). Większość instrukcji obliczeniowych, ładowania i przechowywania odnosiła się do jednego rejestru (zwykle ACC) i lokalizacji pamięci. Lokalizacja pamięci została zidentyfikowana w krótkim formacie przez 8-bitowe przesunięcie ze znakiem z bieżącego adresu lub jednego z rejestrów indeksowych; lub w długim formacie, przez pełny 15-bitowy adres, który można zindeksować i określić kierunek. Pamięć była adresowana w jednostkach słów.
Model 1130 obsługiwał natywnie tylko dane binarne o pojedynczej i podwójnej precyzji (16 i 32 bity) przechowywane w formacie big-endian . Dane zmiennoprzecinkowe o standardowej i rozszerzonej precyzji (32 i 48 bitów) oraz dane dziesiętne były obsługiwane za pomocą podprogramów.
Transfery warunkowe były oparte na (a) bieżącej zawartości akumulatora lub (b) wskaźnikach przeniesienia i przepełnienia ustalonych przez operację poprzedzającą. Przelewy mogły odbywać się przez pominięcie (co zakładało, że następna instrukcja była krótka) lub przez oddział. Wystąpiło pominięcie, jeśli którykolwiek z określonych testów był prawdziwy. Gałąź wystąpiła, jeśli żaden z określonych testów nie był prawdziwy.
Rejestry główne: IAR = Rejestr adresowy instrukcji ACC = Akumulator EXT = Rejestr rozszerzeń XRx = Rejestry indeksowe: x = 1,2,3 Zaimplementowane jako słowa pamięci 1,2,3, a nie jako rejestry sprzętowe. Testy stanu: Z Akumulator zero - Akumulator ujemny + Akumulator dodatni E Akumulator parzysty C Wskaźnik przeniesienia wyłączony O Wskaźnik przepełnienia wyłączony 1130 Zestaw instrukcji Mnemoniki: LD = Ładuj ACC STO = Zapisz ACC LDD = Ładuj podwójnie (ACC i EXT) STD = Zapisz podwójnie ( ACC & EXT) LDX = Indeks obciążenia STX = Indeks zapisu LDS = Stan obciążenia STS = Stan zapisu A = Dodaj ACC AD = Dodaj podwójnie S = Odejmij ACC SD = Odejmij podwójnie M = Pomnóż D = Podziel AND = Boolean AND OR = Boolean OR XOR = Boolean Exclusive OR SLA = Przesunięcie w lewo ACC SLT = Przesunięcie w lewo ACC i EXT SLCA = Przesunięcie w lewo i zliczanie ACC SLC = Przesunięcie w lewo i zliczanie ACC i EXT SRA = Przesunięcie w prawo ACC SRT = Przesunięcie w prawo ACC i EXT RTE = Obrót w prawo ACC & EXT BSC = Warunkowe rozgałęzienie lub pominięcie (zależne od modyfikatora), tj. BP BNP BN BNN BZ BNZ BC BO BOD BOSC — Warunkowe rozgałęzienie lub pominięcie (zamiennie dla BSC z ustawionym bitem 9) Wyjście z bieżącego poziomu przerwania. BSI = Rozgałęzienie i zapisanie IAR MDX = Modyfikuj indeks i pomiń (zwiększ IAR o jeden, jeśli znak się zmieni lub stanie się zerem) WAIT = Zatrzymaj NOP = Brak operacji (alternatywa dla SLA 0) XIO = Wykonaj I/O 1800 Mnemoniki dodatkowej instrukcji: CMP = Porównaj ACC DCM = Podwójne porównanie Mnemoników równoważnych ACC i EXT Asembler dysku wprowadził kilka mnemoników równoważnych istniejącym instrukcjom, które mają na celu wyjaśnienie intencji programisty: SKP — Pomiń warunek, odpowiednik krótkiego BSC B — Bezwarunkowe rozgałęzienie, odpowiednik BSC bez określone warunki BP — akumulator gałęzi dodatni, odpowiednik BSC określający warunek „+” BNP — akumulator gałęzi nie dodatni BN — akumulator gałęzi ujemny BNN — akumulator gałęzi nieujemny BZ — akumulator gałęzi zero BNZ — akumulator gałęzi niezerowy BC — gałąź włączona BO - Branch on Overflow BOD - Branch Accumulator Odd MDM - Modify Memory, odpowiednik nieindeksowanego długiego formatu MDX XCH - Exchange Accumulator and Extension, odpowiednik RTE 16 Format krótkiej instrukcji (jedno 16-bitowe słowo): 1 bity 0...45678. .....5 OP---FTTDisp---- OP to Operacja F to format 0 = Krótki TT to Tag Disp to Przemieszczenie Długi format instrukcji (dwa 16-bitowe słowa): 1 1 Bity 0...456789.. ...50...........................5 OP---FTTIMod----Adres--------- OP to Operacja F to format 1 = Długie TT to Tag I to bit pośredni Mod to modyfikator Efektywne obliczanie adresu (EA): F = 0 | fa = 1, ja = 0 | F = 1, I = 1 Adresowanie bezpośrednie| Adresowanie bezpośrednie| Adresowanie pośrednie ------------------------------------------------ ------------------- TT = 00 | EA = Displ + IAR | EA = Dodaj | EA = C/Dodaj TT = 01 | EA = Displ + XR1 | EA = Dodaj + XR1 | EA = C/Dodaj + XR1 TT = 10 | EA = Displ + XR2 | EA = Dodaj + XR2 | EA = C/Dodaj + XR2 TT = 11 | EA = Displ + XR3 | EA = Dodaj + XR3 | EA = C/Dodaj + XR3 ------------------------------------------ ------------------------ Disp = Zawartość pola przemieszczenia Add = Zawartość pola adresu instrukcji C = Zawartość lokalizacji określonej przez Add lub Add + XR
- Zarezerwowana pamięć
Najniższe adresy pamięci rdzeniowej miały zastosowania podyktowane albo przez sprzęt, albo przez konwencję:
Adres | Stosowanie |
---|---|
/0000 | Zgodnie z konwencją zawierał instrukcję B *-1 , która rozgałęziała się w nieskończoność, dopóki operator nie zauważył, że wszystkie kontrolki IAR konsoli są ciemne i opróżnił zadanie, naciskając Int Req lub restartując. |
/0001 | XR1. Adresy pamięci rejestrów indeksowych pozwalały na bezpośrednie przemieszczanie się między nimi, na przykład z LDX I1 2
|
/0002 | XR2. |
/0003 | XR3. |
/0008 | Adres programu obsługi przerwania poziomu 0 (o najwyższym priorytecie) — przerwanie 1442 czytnika kart/dziurkowania „kolumna gotowa”. |
/0009 | Adres programu obsługi przerwania poziomu 1 — drukarka 1132 i adapter komunikacji synchronicznej. Programy obsługi tego i niższych przerwań musiałyby przetestować słowo stanu, aby określić, które urządzenie przerwało. |
/000A=10 | Adres procedury obsługi przerwania poziomu 2 — pamięć dyskowa, kanał dostępu do pamięci. |
/000B=11 | Adres procedury obsługi przerwania poziomu 3 — ploter 1627, kanał dostępu do pamięci. |
/000C=12 | Adres programu obsługi przerwania poziomu 4 — czytnik taśmy papierowej 1134, dziurkacz taśmy papierowej 1055, konsola, dziurkacz odczytu kart 1442, czytnik kart 2501, drukarka 1403, czytnik znaczników optycznych 1231, urządzenie Storage Access Channel. |
/000D=13 | Adres programu obsługi przerwania poziomu 5 (o najniższym priorytecie) — przełączniki zatrzymania i przerwania konsoli, kanał dostępu do pamięci masowej. |
/0020=32 | Pierwsze słowo pola skanowania dla drukarki 1132 (/0020–/0027). |
/0026=38 | Ostatnie pełne słowo pola skanowania. |
/0027=39 | Wykorzystana połowa: 120 kolumn = 120 bitów = siedem 16-bitowych słów plus 8 bitów. |
/0038=56 | EXIT do przełożonego/powrót do monitora (CALL EXIT) |
Programowanie
podprogramy
Model 1130 nie obsługuje sprzętowo stosu . Większość podprogramów jest wywoływana za pomocą instrukcji BSI (Branch and Store IAR). Spowoduje to umieszczenie wartości IAR (adresu zwrotnego) pod adresem docelowym i przekazanie kontroli do miejsca docelowego+1. Podprogramy powracają tam, gdzie zostały przywołane przy tej okazji, używając gałęzi pośredniej przez to pierwsze słowo podprogramu. Umieszczanie adresu zwrotnego w wierszu było wówczas powszechną techniką komputerów, takich jak Hewlett-Packard HP 2100 , DEC PDP-8 i Scientific Data Systems SDS 920 .
Tak więc podprogram o nazwie SIMPL może być zorganizowany w następujący sposób (komentarze następują po argumencie instrukcji):
SIMPL: DC *-* To jest punkt wejścia, początkowo wypełniony zerem. (niezależnie od tego, co robi procedura) BI SIMPL Powrót pośrednim oddziałem na adres znaleziony w lokacji SIMPL. END SIMPL Instruuje asembler, że źródło procedury SIMPLE jest kompletne.
Podprogram miałby następującą nazwę:
BSI L SIMPL Zadzwoń do SIMPL. L (długie) jest potrzebne, jeśli SIMPL jest oddalone o więcej niż -128 lub +127 słów.
Zwykle używana byłaby pseudooperacja CALL .
Jak pokazano, punktem wejścia podprogramu jest DC *-*
, pseudooperacja asemblera używana do definiowania stałej (zajmującej jedno słowo pamięci) o wartości określonej przez wyrażenie. Znak * oznacza bieżący adres zestawu, więc *-* daje w wyniku zero. Zapisanie tego zamiast 0 zapewnia wizualnie wyróżniającą się uwagę, że znacząca wartość (adres zwrotny) zostanie tam umieszczona w czasie wykonywania. Punkt wejścia nie musi być pierwszym słowem podprogramu. Rzeczywiście, poprzedzające słowo może być początkiem dwuwyrazowej bezpośredniej instrukcji rozgałęzienia, której pole adresowe znajduje się w SIMPL. Następnie zwroty mogą być realizowane przez gałęzie jednowyrazowe: B SIMPL-1
Gdy wywoływany jest SIMPL, instrukcja BSI zastępuje *-*
bieżącą wartością IAR, która jest adresem tuż za instrukcją BSI. Po tym, jak SIMPL zrobi wszystko, co jest napisane, BI SIMPL
rozgałęzia się nie do SIMPL, ale pośrednio przez niego, kontynuując w ten sposób wykonywanie instrukcji następującej po instrukcji BSI, która wywołała SIMPL.
Bez dodatkowych ustaleń w celu ochrony adresu zwrotnego rekursja jest niemożliwa: jeśli SIMPL wywoła sam siebie lub wywoła podprogram, który go wywołał, jego pierwotny adres zwrotny zostanie nadpisany. Ponowne wejście jest problematyczne z tego samego powodu: procedura obsługi przerwania musi powstrzymać się od wywołania jakiegokolwiek podprogramu, który mógł być kodem, który został przerwany.
Osoba wywołująca SIMPL może przekazać jej parametry, którymi mogą być wartości lub adresy wartości. Parametry mogą być kodowane w linii (bezpośrednio po instrukcji BSI) lub umieszczane w rejestrach indeksowych XR1 i XR2. Jeśli parametry są umieszczone w linii, SIMPL modyfikuje swój własny adres zwrotny, więc jego ostateczna gałąź pośrednia powraca poza parametry.
Funkcje całkowitoliczbowe pojedynczej liczby całkowitej oczekują parametru w akumulatorze i zwracają tam swój wynik. Funkcje zmiennoprzecinkowe wykorzystują akumulator zmiennoprzecinkowy (obszar dwóch słów zarezerwowany przez bibliotekę zmiennoprzecinkową, trzy słowa dla rozszerzonej precyzji) i tak dalej.
Konwencja kodowania 0 jako wartości początkowej w punkcie wejścia oznacza, że jeśli błąd programowania doprowadzi do powrotu SIMPL przed pierwszym wywołaniem, wykonanie przeskoczy do komórki pamięci 0. Jak wspomniano powyżej, zwyczajowo mieć lokalizację 0 zawiera gałąź do lokalizacji 0. 1130 utknąłby w lokalizacji 0, a światła IAR na konsoli byłyby całkowicie ciemne, co jasno wskazywałoby, że program się nie powiódł.
Powiązanie z procedurami bibliotecznymi
W przypadku podprogramów, które byłyby wywoływane wiele razy (na przykład podprogramy arytmetyki zmiennoprzecinkowej), ważne jest, aby zmniejszyć rozmiar każdego wywołania do jednego słowa. Takie „procedury biblioteczne” wykorzystują protokół LIBF. Jest bardziej złożony niż protokół CALL opisany w poprzedniej sekcji, ale LIBF ukrywa złożoność przed autorem programu w języku asemblera.
Procedury biblioteczne są adresowane przez rejestr indeksowy XR3. (Podprogramy Fortran używają rejestru indeksu XR1 dla adresów parametrów i adresu zwrotnego, ale rejestr XR2 jest nieużywany.) XR3 wskazuje na sekwencję wektorów transferowych składających się z trzech słów , tak że pierwszy wpis to -128 słów od wartości XR3. Programista wywołuje procedurę biblioteczną za pomocą pseudooperacji LIBF , która łączy nie bezpośredni
BSI
z procedurą, ale jednowyrazową indeksowaną instrukcję rozgałęzienia ( BSI 3 disp
), którego przemieszczenie (-128, -125 itd.) identyfikuje początek wektora transferu procedury.
Wektor transferu jest przygotowywany przez moduł ładujący powiązania, gdy składa on program. Wpis wektora transferu do funkcji bibliotecznej o nazwie SIMPL ma następującą postać:
DC *-* Słowo, w którym BSI przechowuje adres zwrotny. BL SIMPL Rozgałęzienie do początku funkcji bibliotecznej.
Sposób, w jaki SIMPL wiedział, gdzie znajduje się jego adres zwrotny, polega na tym, że gdyby SIMPL został zadeklarowany jako procedura LIBF, moduł ładujący powiązania zmodyfikowałby kod SIMPL, umieszczając adres wpisu wektora transferu SIMPL na SIMPL + 2. Podprogramy LIBF, w przeciwieństwie do podprogramów CALL, nie rozpoczynają się od dyrektywy DC przechowującej adres zwrotny (znajduje się on w wektorze przesyłowym), ale od rzeczywistego kodu, jak następuje:
SIMPL STX 1 RCVR1+1 Zapisz wartość XR1 dzwoniącego w pobliskiej lokalizacji. LDX I1 *-* Program ładujący linkage zmienia słowo adresowe, aby wskazywało na wektor transferu.
Umieszczenie adresu wektora transferu SIMPL na SIMPL+2 pozostawia miejsce na jednowyrazową instrukcję zapisania wybranego rejestru indeksowego, tutaj XR1. Wtedy pośrednia instrukcja LDX wskazuje XR1 nie na wektor transferu, ale przez niego na adres powrotu lub na dowolne parametry przechowywane bezpośrednio po BSI. SIMPL następnie robi wszystko, do czego został napisany, uzyskując dostęp do dowolnych parametrów w linii przez XR1 (w takim przypadku musi zwiększyć XR1 dla adresu zwrotnego) i zwraca w następujący sposób:
STX 1 RETN+1 Zapisz XR1, aby przygotować się do użycia go jako adresu zwrotnego. RCVR1 LDX L1 *-* Pierwsza instrukcja SIMPL zmodyfikowała ten adres. Teraz * przywróć pierwotną wartość XR1. RETN BL *-* Ta instrukcja została zmodyfikowana dwie instrukcje temu; powrót.
- Przykład
Załóżmy, że wywołanie SIMPL w stylu LIBF odbywa się pod adresem 100. Wtedy adresem zwrotnym będzie 101, ponieważ BSI 3 disp
jest instrukcją jednowyrazową. XR3 wskazuje na grupę wektorów transferowych. Jeśli wektor transferu dla SIMPL rozpocząłby się pod adresem 2000, wówczas BSI zostałby złożony z disp tak
, że XR3+disp = 2000. Wykonanie BSI przechowuje 101 w lokalizacji 2000 i przeskakuje do lokalizacji 2001. W 2001 jest to długość dwóch słów przeskocz do punktu wejścia SIMPL, który program ładujący powiązania mógł umieścić pod adresem 300.
Skok w dal przenosi kontrolę na SIMPL. Po instrukcji w 300 przechowuje XR1, instrukcją w 301 jest LDX I 1 2000
, program ładujący łączący umieścił 2000 w lokalizacji 302. To nie ładuje 2000 do XR1; jest to instrukcja pośrednia i ładuje zawartość 2000, czyli 101, adresu zwrotnego dla tego wywołania do SIMPL.
W pokazanej powyżej sekwencji powrotu, gdy sterowanie czasowe osiągnie RETN, tam jest instrukcja BL 101
, która wraca do wywołującego. (Jeżeli w 101 jest jeden lub więcej parametrów liniowych, SIMPL zwiększyłby XR1 do wartości 102 lub wyższej i byłby to adres docelowy instrukcji B.
)
- Wariacje
Jeśli SIMPL wziął parametry zakodowane w linii zgodnie z instrukcją BSI, SIMPL uzyskuje do nich dostęp z adresowaniem indeksowanym wyłączonym z XR1. Pierwszy można uzyskać przez LD 1 0
, drugi przez LD 1 1
i tak dalej. Jeżeli drugim parametrem jest adres rzeczywistego parametru, to LD I 1 1
otrzymuje jego wartość. Przed powrotem SIMPL zwiększa XR1 poza n parametrów za pomocą instrukcji takiej jak MDX 1 n
, aby umieścić właściwą wartość w RETN+1.
B1n , która
odmówiła przywrócenia pierwotnej wartości XR1, mogłaby pominąć powyższe kroki i powrócić z prostym aby pominąć n parametrów w linii. Jednak taka procedura nie może zostać wywołana przez inne procedury LIBF, ponieważ zakłóca ona użycie XR1 przez wywołującego w celu uzyskania dostępu do jej własnych parametrów i adresu zwrotnego.
Złożoność LIBF oszczędza pamięć dla często wywoływanych podprogramów: Sprzężenie LIBF wymaga jednego słowa na wywołanie, plus trzy słowa na wpis wektora transferu i dodatkowy kod w samej procedurze, podczas gdy powiązanie CALL wymaga dwóch słów na wywołanie, ponieważ większość WYWOŁANIA będą kierowane na adres poza zasięgiem słów od -128 do +127 jednowyrazowego kodu operacji.
Rejestr XR3 musi wskazywać na wpisy wektora transferu dla procedur bibliotecznych, a nie na tablicę wysyłkową zawierającą tylko ich adresy, ponieważ ta ostatnia wymagałaby wywoływania procedur LIBF z pośrednią instrukcją BSI. Te instrukcje mają długość dwóch słów, więc taki projekt zanegowałby oszczędności rozmiaru kodu LIBF. Limit ośmiu bitów dla disp jednowyrazowego kodu instrukcji ogranicza użycie procedur LIBF do nie więcej niż 85 odrębnych wpisów.
Modyfikacja kodu
W poprzednich sekcjach pokazano, że kod i dane są przemieszane. W programowaniu 1130 powszechna jest modyfikacja pól adresowych instrukcji iw rzeczywistości modyfikacja całych instrukcji.
Przez kompilator Fortran
Kompilator języka Fortran tworzy samomodyfikujący się kod podczas generowania kodu dla dowolnych podprogramów (podprogramów lub funkcji), które mają parametry. Kompilator buduje tablicę każdej lokalizacji, w której podprogram odwołuje się do jednego ze swoich parametrów, i kompiluje jako pierwszą instrukcję w ciele podprogramu wywołanie podprogramu o nazwie SUBIN, który używa tabeli do modyfikacji pola adresowego każdego odniesienia do jako rzeczywisty adres parametru podczas bieżącego wywołania. SUBIN tworzy te poprawki za każdym razem, gdy podprogram jest wywoływany.
Gdy program w języku Fortran wywołuje podprogram, po wywołaniu pojawiają się adresy dowolnych parametrów. Na przykład instrukcja Fortran CALL SIMPL(X) może skompilować się w:
BSI L SIMPL DC X Adres X, na którym SIMPL ma działać
W ramach podprogramu dostęp do parametrów można uzyskać poprzez pośrednie adresowanie indeksowane, jak pokazano powyżej w Wariacjach , więc biorąc pod uwagę, że XR1 zostało odpowiednio przygotowane, parametr całkowity można załadować do akumulatora za pomocą instrukcji takiej jak ta:
LD I1 0 Załaduj do akumulatora wartość pierwszego parametru (offset 0).
Zamiast tego kompilator użył adresowania bezpośredniego. Kiedy SUBIN działa, uzyskuje adres X i łata pole adresu instrukcji, aby stało się:
LD LX Załaduj wartość X do akumulatora
Zalety SUBIN są następujące:
- Aby uzyskać adres argumentu, pośrednia instrukcja indeksowana wymaga trzech cykli pamięci (rejestr indeksu znajduje się w pamięci), podczas gdy instrukcja dostępu bezpośredniego wymaga tylko jednego.
- Jeśli SIMPL miałby przekazać jeden ze swoich parametrów do dowolnego podprogramu, który spodziewa się otrzymać adres swojego parametru (w tym wszystkie procedury LIBF dla arytmetyki zmiennoprzecinkowej), SUBIN jest potrzebny do podania rzeczywistego adresu oryginalnego parametru.
Wadami SUBIN są czas potrzebny do uruchomienia i pamięć wymagana dla tabeli odniesień. Rozmiar tej tabeli jest sumą 5, liczby parametrów i liczby referencji; jeśli ta suma przekroczy 511, kompilacja zakończy się niepowodzeniem. W przypadku podprogramów z wieloma odniesieniami do parametru autor podprogramu może skopiować parametr do zmiennej lokalnej.
Przez użytkownika
Modyfikowanie całych instrukcji było wówczas powszechną techniką. Na przykład, chociaż 1130 ma instrukcję OR, składnia Fortranu nie daje możliwości jej zapisania. Można zdefiniować funkcję całkowitą IOR, umożliwiając logiczne OR jako część wyrażenia Fortran, takiego jak:
M = 3 * IOR ( ja , J ) + 5
Kompilator Fortran umieszcza adresy I i J w jednej linii i oczekuje wyniku w akumulatorze. Użycie IOR(I,J) w wyrażeniu Fortran kompiluje następujące cztery słowa:
BSI L IOR Dwuwyrazowy skok na początek funkcji IOR. DC IA jednowyrazowy parametr liniowy: adres I. DC JA jednowyrazowy parametr liniowy: adres J.
w ogóle nie oblicza I ani J. Zamiast tego zastępuje powyższe cztery słowa następującymi:
LD LI Ładowanie akumulatora za pomocą I (instrukcja dwuwyrazowa) OR LJ OR akumulator za pomocą J (instrukcja dwuwyrazowa)
Po wykonaniu tej transformacji nie wraca poza koniec czterowyrazowego bloku (który właśnie zmodyfikował). Zamiast tego rozgałęzia się do dokładnego adresu, z którego został wywołany pierwotnie. Instrukcja BSI już nie istnieje; to, co jest teraz, to dwie instrukcje, które właśnie napisał. Łączą te dwie liczby całkowite z instrukcją OR języka maszynowego i pozostawiają wynik w akumulatorze, zgodnie z wymaganiami.
Wywołanie IOR i przekształcenie czterowyrazowego bloku następuje najwyżej raz na przebieg programu. Jeśli linia Fortran zilustrowana powyżej zostanie wykonana ponownie, będzie działać szybciej niż za pierwszym razem. Podobne funkcje można opracować dla innych użytecznych operacji.
Funkcja, która sama się modyfikuje, tak jak robi to IOR, nie może być użyta w podprogramie języka Fortran na żadnym z parametrów tego podprogramu (chociaż mogłaby być użyta do łączenia zmiennych lokalnych), ponieważ jest niezgodna z omówionym powyżej podprogramem SUBIN. Transformacja IOR jego czterowyrazowej sekwencji wywołującej, pokazana powyżej, przesuwa lokalizację adresu zmiennej I. Przy kolejnych wywołaniach podprogramu Fortran, tabela odniesień do parametrów byłaby błędna, a SUBIN załatałby niewłaściwe słowo, w w tym przypadku umieszczenie nowego adresu I nad kodem operacji LUB.
Rozszerzona precyzja
1130 FORTRAN oferuje dwa formaty zmiennoprzecinkowe: 32-bitowy format „standardowej precyzji” i 40-bitowy format „rozszerzonej precyzji”.
Standardowy format precyzji zawiera 24-bitowy znak dopełnienia do dwóch , podczas gdy rozszerzona precyzja wykorzystuje 32-bitowy znak dopełnienia do dwóch . Ten format w pełni wykorzystuje 32-bitowe operacje procesora na liczbach całkowitych. Rozszerzony format zajmuje trzy 16-bitowe słowa, przy czym osiem bitów wyższego rzędu pierwszego słowa jest nieużywanych. Cechą charakterystyczną obu formatów jest 8-bitowe pole zawierające potęgę dwójki przesuniętą o 128. Operacje arytmetyczne na liczbach zmiennoprzecinkowych są wykonywane przez oprogramowanie.
Karta opcji kompilatora *EXTENDED PRECISION
mówi kompilatorowi FORTRAN, aby używał 40 bitów zamiast 32 bitów dla wszystkich danych zmiennoprzecinkowych, nie ma możliwości mieszania formatów.
Duże programy Fortran
Dane, którymi należy manipulować, oraz instrukcje, które nimi manipulują, muszą znajdować się razem w pamięci rdzenia. Kluczowym ograniczeniem jest ilość zainstalowanej pamięci (od 4096 do 32768 słów). Fortran zapewnia kilka technik pisania dużych programów pomimo tego ograniczenia.
- LOKALNE podprogramy
Fortran pozwolił, aby każdy podprogram był oznaczony jako „LOKALNY” (Load-on-Call). Każdy podprogram LOKALNY jest nakładką ; jest częścią programu wykonywalnego rezydującego na dysku, ale jest ładowany do pamięci rdzenia (jeśli jeszcze tam nie jest) w czasie, gdy jest wywoływany. Na przykład sześć podprogramów LOKALNYCH wymagałoby tylko tyle pamięci rdzenia, co największy, zamiast całkowitej ilości dla wszystkich sześciu. Jednak żaden z sześciu nie może powoływać się na inny, ani bezpośrednio, ani za pośrednictwem podprogramów pośredniczących.
- Programy w fazach
Cały program Fortran może przekazać kontrolę do następnej fazy, wychodząc do Supervisora z instrukcją załadowania następnej fazy do pamięci rdzenia. Duży program można podzielić na trzy części, osobno skompilowane, zwane CZĘŚCIĄ 1, CZĘŚCIĄ 2 i CZĘŚCIĄ 3. Wykonywanie jest rozpoczynane przez // XEQ PART1
iw odpowiednim momencie PART1 wykona instrukcję Fortran CALL LINK(PART2)
i tak dalej. Nazwa kolejnego programu w CALL nie może być zmienna, ale logika programu może decydować o tym, czy sterowanie zostanie przeniesione do innej fazy i która CALL LINK
zostanie wykonana. Jak wspomniano powyżej , sam kompilator Fortran został napisany w ten sposób, z każdą fazą kompilacji realizowaną przez oddzielny program.
- WSPÓLNE przechowywanie danych
Programy, takie jak programy Fortran, znajdują się pod adresami pamięci o niskim rdzeniu (tuż nad Supervisorem). Fortran przydziela miejsce pod najwyższymi adresami dla dowolnych zmiennych i tablic zadeklarowanych jako WSPÓLNE. Jeżeli faza kontynuacyjna programu zawiera odpowiednią deklarację WSPÓLNĄ, wówczas informacje w tym wspólnym obszarze mogą być udostępniane między fazami. Fazy mogłyby bez problemu pominąć deklarację COMMON, pod warunkiem, że fazy te nie byłyby tak duże, aby ich kod programu wtargnął do obszaru wspólnego. Magazyn COMMON nie tylko udostępnia dane między fazami; zmienne COMMON o niższej pamięci mogą być używane do przekazywania danych między programem głównym i podprogramami w ramach jednej fazy, chociaż dane mogą zostać utracone przy przejściu do następnej fazy.
Przykłady programowania
Przykłady można wykonać na emulatorze IBM 1130 dostępnym pod adresem IBM 1130.org .
Przykładowa talia programu asemblera
Następująca lista pokazuje talię kart , która kompiluje i uruchamia program asemblera , który wyświetla talię kart na drukarce wierszowej.
// JOB // ASM *LIST * LCARD.ASM - LISTA TALII KART DO DRUKARKI WIERSZOWEJ * * PROGRAM * NOWA STRONA NA DRUKARCE * A ODCZYTAJ KARTĘ * KONWERTUJ FORMAT * DRUKUJ LINII NA DRUKARCE * GOTO A * START LIBF PRNT1 PRZEJDŹ DO NOWEJ STRONY NA 1132 DC /3100 DRUKARKA KANAŁ 1-NOWA STRONA * NEXTC KARTA LIBF0 ODCZYT Z CZYTNIKA KART 1442 DC /1000 STEROWANIE DO ODCZYTU DC CBUFF ZAPIS 80 KOLUMN CINP LIBF CARD0 DC 0 B CINP PĘTLA DO CZYTANIA KARTY * LIBF ZIPCO CONVERT KARTA DO DRUKARKI DC /1100 ROZPAKOWANA W, ROZPAKOWANA DC CBUFF+1 BUFOR WEJŚCIOWY DC PBUFF+1 BUFOR WYJŚCIOWY DC LICZBA 80 ZNAKÓW WYWOŁAJ HLEBC HOLLERITH DO EBCDIC * LIBF PRNT1 DRUKUJ 80 ZNAKÓW DC /2000 KOD STERUJĄCY DO WYDRUKOWANIA DC PBUFF BUFOR WYDRUKUJ DC PERR BŁĄD WYDRUKOWANIA POUT LIBF PRNT1 SPRAWDZ DRUKOWANIE ZAKOŃCZONE DC 0 B POUT PĘTLA DO ZAKOŃCZENIA * B NASTĘPNA ODCZYTAJ KARTĘ * * DANE * CBUFF DC 80 80 KOLUMN NA KARTĘ BSS 80 * PBUFF DC 40 40 SŁÓW 80 ZNAKÓW BSS 40 * PERR DC 0 BI PERR TO POWRACA DO * PROGRAMU OBSŁUGI BŁĘDÓW DRUKARKI *, KTÓRY ZAKOŃCZY PROGRAM * KONIEC STARTU PROGRAMU PUNKT WEJŚCIA // XEQ DANE TESTOWE 1 HELLO WORLD DANE TESTOWE 2
W tym zadaniu asembler pozostawia wynik swojego asemblera w obszarze tymczasowym dysku systemowego, a polecenie XEQ wykonuje zawartość obszaru tymczasowego. Dziwnie wyglądający END START
ma dwa znaczenia: koniec źródła asemblera i nazwę punktu wejścia procedury, który ma etykietę START.
Źródło asemblera zaczyna się od kolumny 21 karty, a nie kolumny pierwszej. W systemach bez napędu dyskowego asembler wbijałby kod na początek właśnie odczytanej karty (czytnik kart był w rzeczywistości czytnikiem-dziurkiem, ze stacją dziurkującą po stacji odczytu), a następnie odczytywał następną kartę. Aby obsłużyć przednie gałęzie i tym podobne, drugie przejście asemblera dosłownie obejmowało drugie przejście kart przez czytnik / dziurkacz. Gdyby potrzebne były zmiany w źródle, programista zduplikowałby karty, aby uzyskać talię z pustymi kolumnami 1-20, gotową do następnego przejścia przez asembler.
Zgodnie z konwencją, bufory są poprzedzone liczbą słów. DC (Define Constant) gromadzi słowo zliczania, a następujący po nim BSS (Block
Started
by Symbol) rezerwuje wymaganą liczbę słów dla bufora. Bufor kart wymaga 80 słów, po jednym dla każdej kolumny kart. Sterownik CARD0 odczytuje dosłownie każdą kolumnę karty, używając 12 z 16 bitów w słowie buforowym, przy czym bit jest włączony dla każdego otworu wyciętego w odpowiednim rzędzie dla tej kolumny. Wzór stempli zazwyczaj opisuje znak tekstowy za pomocą kodu Holleritha . Klawiatura konsoli umożliwia również wprowadzanie danych do programu w kodzie Holleritha, co jest jedynym przypadkiem dwóch urządzeń używających tego samego kodowania znaków.
Jednak procedura drukarki działa z tekstem w 8-bitowym EBCDIC z dwoma znakami na słowo, co wymaga bufora na 40 słów. Program używa procedury bibliotecznej ZIPCO do przeprowadzenia konwersji. Wbrew pozorom instrukcja CALL HLEBC
nie jest wykonywana, ponieważ HLEBC nie jest podprogramem, ale dostarczoną przez IBM tablicą konwersji Hollerith-to-EBCDIC. Instrukcja CALL dostarcza ZIPCO adres tabeli i zapewnia, że program ładujący łączący uwzględni tabelę w programie, a zatem jest piątym parametrem ZIPCO, chociaż zajmuje dwa słowa pamięci: słowo kodowe operacji BSI dla CALL to nieużywane, a więc zwykle marnowane, ale drugie słowo ekspansji CALL HLEBC
to adres tabeli HLEBC potrzebnej firmie ZIPCO. Po konwersji program wysyła skonwertowane dane wyjściowe, teraz w buforze PBUFF, do drukarki za pośrednictwem sterownika PRNT1. Ponownie program zapętla się, dopóki sterownik drukarki nie zgłosi zakończenia, a następnie program odczyta następną kartę.
Ten przykład nie zawiera kodu decydującego o zatrzymaniu. Bardziej kompletny program sprawdzałby karty zaczynające się od //
, co oznacza początek następnego zadania. Aby jak najszybciej zatrzymać czytnik kart, program mógłby sprawdzić kod Holleritha /
przed konwersją karty na EBCDIC.
Asynchroniczne operacje we/wy i wydajność
Wezwanie do CARD0 w celu odczytania karty inicjuje tę operację i natychmiast wraca do dzwoniącego, który może wykonać inną czynność. Jednak przykładowy program nie próbuje nakładać danych wejściowych i wyjściowych przy użyciu buforów, mimo że ma dwa oddzielne obszary robocze; po prostu zapętla się z powrotem do CIMP, aby przetestować od nowa. Gdy CARD0 wykryje przerwanie zakończenia operacji czytnika kart, zwraca jedno słowo dalej, pomijając w ten sposób skok z powrotem do CIMP i opuszczając pętlę.
Przykładowe procedury nie uruchamiają urządzeń we/wy z najwyższą szybkością. Warto zauważyć, że czytnik kart, zaledwie kilka milisekund po zgłoszeniu zakończenia odczytu karty, rozpocznie sekwencję zatrzymania, po której nowe polecenie odczytu będzie musiało czekać, aby zainicjować kolejny cykl odczytu. Czytnik IBM 1442 mógł odczytywać 400 kart na minutę przy pełnej prędkości, ale niewielkie wahanie w poleceniach odczytu zmniejszyłoby jego przepustowość o połowę lub gorzej. Program Fortran nie mógł ukończyć nawet najprostszego przetwarzania danych wejściowych na czas, a więc nie mógł odczytywać kart z pełną prędkością. Jedna wspólna pętla Fortran DO
do odczytu kart powodowała, że silnik zatrzymywał się i uruchamiał tak często, że przyspieszał zużycie. Dzięki buforowaniu sterowanie czytnikiem kart mogło nakładać się na przetwarzanie, a czytnik mógł działać z pełną prędkością przez duże talie danych, ale pamięć dla bardziej złożonego programu i buforów była często na wagę złota.
Nawet z asemblerem i podwójnym buforowaniem program wyświetlający talię kart z czytnika IBM 2501 (1000 kart na minutę) na drukarce liniowej nie mógł nadążyć, ponieważ translacja z wzorców otworów na karty do EBCDIC dla drukarki wykonana przez EBPRT był zbyt wolny; zamiast tego potrzebne były bardziej złożone ZIPCO i HLEBC, jak w przykładzie.
Przykładowa sesja APL\1130
Poniższy obraz przedstawia prostą sesję APL \ 1130. Ta sesja została przeprowadzona za pomocą symulatora 1130 dostępnego na stronie IBM 1130.org . Powyższa sesja przedstawia logowanie, dodawanie liczb całkowitych od 1 do 100, generowanie tablicy dodawania liczb całkowitych 1..5 i wylogowanie.
Konkurencyjne systemy
W tym samym roku, w którym wprowadzono 1130, firma Digital Equipment Corporation wprowadziła mniejszy, tańszy i lepiej sprzedający się 12-bitowy PDP-8 , uznawany za pierwszy minikomputer, który odniósł sukces.
Wpływ 1130
- Brian Utley był kierownikiem projektu w latach trzydziestych XII wieku podczas jego opracowywania i wprowadzania. Brian powiedział na trzeciej imprezie 11/30, że zanim IBM Marketing nazwał 1130, był znany jako Small Engineering Computer System lub SECS. Początkowa architektura miała 18 bitów, ale została zmieniona na 16 bitów ze względu na wpływ Systemu / 360 . Pełny dialog z jego prezentacji z 2005 roku jest dostępny na stronie IBM1130.org .
- Znany projektant oprogramowania Grady Booch po raz pierwszy zetknął się z programowaniem na IBM 1130:
... Waliłem w drzwi lokalnego biura sprzedaży IBM, aż sprzedawca się nade mną zlitował. Po krótkiej rozmowie wręczył mi [instrukcję] Fortrana. Jestem pewien, że dał mi go, myśląc: „Nigdy więcej nie usłyszę od tego dzieciaka”. Wróciłem w następnym tygodniu, mówiąc: „To jest naprawdę fajne. Przeczytałem całość i napisałem mały program. Gdzie mogę znaleźć komputer?” Ku mojej radości kolega znalazł mi czas na programowanie na IBM 1130 w weekendy i późnym wieczorem. To było moje pierwsze doświadczenie z programowaniem i muszę podziękować anonimowemu sprzedawcy IBM za rozpoczęcie mojej kariery. Dziękuję, IBMie.
- Guru LISP Guy Steele napisał interpreter LISP dla IBM 1130, kiedy był w szkole średniej ( Boston Latin School , która miała IBM 1130 do użytku uczniów). Jego kod i dokumentacja dla LISP 1.6, wraz z podsumowaniem bieżących prac nad uruchomieniem go w ramach symulacji, są dostępne na stronie IBM1130.org .
- Chuck Moore chciał nazwać swój nowy język „Czwartym”, ale system operacyjny IBM 1130 był ograniczony do nazw składających się z pięciu znaków, więc ostatecznie nazwano go FORTH .
- Dan Bricklin , twórca programu VisiCalc , rozpoczął swoją przygodę z programowaniem, kiedy nauczył się i używał IBM 1130 w ramach projektu National Science Foundation Computer/Math Summer Project dla uczniów szkół średnich, zorganizowanego na University of Pennsylvania w 1966 roku.
- IBM 1130 z 8 kilosłowami rdzenia został użyty do pierwszego na świecie pełnoetatowego badania Search for Extraterrestrial Intelligence w The Ohio State University Radio Observatory . Ten sprzęt wykrył Wow! sygnał .
- Charles Goldfarb , ojciec SGML , opisuje pracę instalującą system składu oparty na IBM 1130, który „ostatecznie zmienił moją karierę”, kierując go w stronę ogólnych znaczników:
System składał się z komputera IBM 1130, maszyny wielkości biurka z 8 KB pamięci głównej, napędem dyskowym 512 KB, czytnikiem taśmy papierowej Teletype CX i dziurkaczem taśmy papierowej BRPE oraz fotomechaniczną zecerem Photon 713. Zadanie to było moim pierwszym doświadczeniem w zarządzaniu bazą danych dokumentów do odczytu maszynowego: nauczyłem się ostrożnie zwijać dziurkowaną taśmę papierową, aby można ją było schludnie przechowywać w cylindrycznych koszach na śmieci. W międzyczasie, choć o tym nie wiedziałem, zasadzono korzenie uogólnionego znacznika. W przeszłości rękopisy elektroniczne zawierały kody kontrolne lub makra, które powodowały formatowanie dokumentu w określony sposób („specyficzne kodowanie”). Z kolei kodowanie ogólne, które rozpoczęło się pod koniec lat 60. XX wieku, wykorzystuje znaczniki opisowe (na przykład „nagłówek” zamiast „format-17”).
- Alan Kay używał IBM 1130 we wczesnych pracach nad graficznym interfejsem użytkownika do swojego doktoratu. praca magisterska w 1969 r.
- Hutchinson Central Technical High School („Hutch Tech”) w Buffalo w stanie Nowy Jork używał IBM 1130 w pierwszym w kraju czteroletnim programie nauczania informatyki w liceum w 1969 r. Robert Santuci był szefem programu informatycznego i prowadził zajęcia z programowania i logiki indukcyjnej .
- Inżynier z IBM został zatrudniony przez Signetics i włączył szereg funkcji architektonicznych z IBM 1130 do jednoukładowego procesora Signetics 2650 .
1130s dzisiaj
Spośród około 10 000 wyprodukowanych systemów od 2023 r. Istnieją następujące:
- ACONIT w Grenoble we Francji posiada kompletny system 1130.
- Muzeum Historii Komputerów ( Mountain View, Kalifornia ) ma system 1130.
- COSECANS ( Bazylea, Szwajcaria ).
- National Museum of Computing (TNMOC) (Bletchley Park, Wielka Brytania) posiada kompletny system 1130.
- Uniwersytet w Stuttgarcie (Niemcy) posiada funkcjonalny system 1130.
- Carl Claunch obecnie przywraca system 1130.
Apokryfy
Spekulacje na temat tego, dlaczego produktowi nadano numer 1130, koncentrowały się na następujących możliwościach:
- Ponieważ 1130 był małą maszyną naukową, liczbę wybrano przez pomnożenie 360 (jak w IBM 360 ) przez π .
- Ta godzina 11:30 była porą dnia, w której planiści produktu znaleźli się w impasie, jeśli chodzi o nazwę produktu.
- Że 1130 był 11. projektem komputerowym IBM i miał 30 instrukcji.
Inni spekulowali, że istnienie IBM 1130 wyjaśnia, dlaczego żaden komputer oznaczony „11/30” nigdy nie pojawił się w rodzinie maszyn PDP-11 .
Zobacz też
Notatki
Linki zewnętrzne
- komunikaty prasowe IBM 1130 , chronologia, zdjęcia, folder z faktami.
- IBM 1130.org Norm Aleks i Brian Knittel, która zawiera ważne informacje o 1130 oraz symulator do pobrania obsługujący środowiska DMS R2V12 i APL.
- www.ibm1130.net to witryna Howarda Shubsa poświęcona 1130.
- Osobiste konto Arnolda Reinholda z 1130. Tekst stąd został włączony do tego artykułu za zgodą
- Zestaw plików PDF składający się ze zeskanowanych instrukcji IBM 1130
- Strona Kym Farnik na temat Retro Computing, w szczególności 1130
- Dyskusja o (wówczas) centrum obliczeniowym Angle Park, które było wyposażone w IBM 1130
- IBM 1130 Zdjęcia Boba Rosenblooma
- IBM 1130 na Columbia University, witryna Computing History.
- Zbiór Flickr szczegółowych zdjęć wykonanych przez Petera Vaughana IBM 1130 w National Museum of Computing