EM400 - uruchamianie programów
W emulatorze EM400, oprócz uruchomienia systemu operacyjnego CROOK-5 z obrazu dysku, można uruchomić dowolny program napisany dla MERY-400. Najprostszym przypadkiem jest uruchomienie programu działającego w obszarze systemu operacyjnego, czyli w bloku pamięci 0. W repozytorium ze źródłami assemblera EMAS znajdują się dwa przykładowe programy, których uruchomienie zostało poniżej opisane.
Wymagania
Do uruchomienia przykładów potrzebne są:
- zainstalowany emulator EM400 wraz z emulatorem terminala e4term,
- zainstalowany assembler EMAS.
Assemblacja przykładów
Pierwszym krokiem do uruchomienia przykładowych programów jest ich zassemblowanie do postaci binarnego kodu wynikowego. Po pobraniu obu źródeł, można to zrobić wydając dwa polecenia:
emas loops.asm -O raw -o loops.bin emas print.asm -O raw -o print.bin
Tak przygotowane pliki loops.bin i print.bin są gotowe do załadowania w emulatorze EM400.
Uruchomienie programów
Aby uruchomić emulator EM400, potrzebny będzie plik konfiguracyjny. Poniżej przedstawiona jest przykładowa, minimalna konfiguracja, pozwalająca uruchomić oba przykładowe programy. Zapisać ją należy do pliku em400.ini w katalogu, w którym znajdują się oba zassemblowane przykłady. Z tej lokalizacji będzie również uruchamiany emulator.
[log] enabled = false [cpu] fpga = false speed_real = false throttle_granularity = 10 clock_period = 10 clock_start = false stop_on_nomem = true user_io_illegal = false awp = true modifications = false kb = 0 [memory] elwro_modules = 1 mega_modules = 0 hardwired_segments = 2 [sound] enabled = false [io] channel_15 = char [dev15.0] type = terminal transport = tcp port = 32000 speed = 9600
loops.bin
Program loops.bin jest prostym programem prezentującym różne sposoby iterowania z użyciem instrukcji assemblera. Można go uruchomić bez konieczności podłączania terminala, a jego efekty można obserwować jedynie w interfejsie debugera emulatora EM400. Aby uruchomić emulator i załadować program loops.bin, należy wydać polecenie:
em400 -c em400.ini -p loops.bin
Po uruchomieniu emulatora w oknie terminala pojawi się podstawowy interfejs użytkownika EM400 - debuger systemu.
Jeśli nie są widoczne wszystkie elementy interfejsu użytkownika, należy zwiększyć rozmiar okna terminala lub zmniejszyć czcionkę.
W takim stanie program jest załadowany do pamięci emulowanego komputera, ale procesor jest zatrzymany, o czym informuje pole "CPU status" w lewym dolnym rogu okna terminala. Ten przykładowy program przeznaczony jest do wykonania krokowego. Wykonanie pojedynczej instrukcji programu możliwe jest po wydaniu polecenia cycle. Można wtedy w oknie "ASM" obserwować wykonanie kolejnych instrukcji, a w oknach "System registers" i "User registers" zmiany stanów rejestrów maszyny. Program wykonuje kilka pętli po 10 kroków każda.
Ostatnią instrukcją programu jest instrukcja "hlt 000". Ponieważ procesor jest cały czas zatrzymany, a poleceniem "cycle" wymuszane są kolejne kroki pracy CPU, to nie będzie miała ona żadnego praktycznego efektu. Ale program można oczywiście uruchomić nie-krokowo. Można to zrobić ustawiając licznik rozkazów ponownie na adres 0 poleceniem ic=0, resetując system poleceniem clear, a następnie uruchamiając procesor poleceniem start.
print.bin =
Program print.bin jest przykładowym programem wypisującym (w najprostszy możliwy sposób) ciąg znaków na terminalu podłączonym do emulatora. Aby go uruchomić, należy wydać polecenie podobne do poprzedniego, ale z programem print.bin jako argumentem przełącznika -p:
em400 -c em400.ini -p print.bin
Następnie, w osobnym okienku, należy uruchomić emulator terminala e4term, podłączając go do działającego emulatora EM400:
e4term 127.0.0.1 32000
e4term łączy się z EM400 na porcie 32000, który w pliku konfiguracyjnym został wcześniej zdefiniowany jako port dla urządzenia 0 w kanale znakowym 15, które jest terminalem.
Po podpięciu terminala, w debugerze EM400 można wydać polecenie "start" - w oknie z podłączonym terminalem powinien pojawić się napis "Hello world!". Podobnie jak w przypadku programu loops.bin i ten program można wykonać krokowo.