EM400 - uruchamianie programów

Z MERA 400 wiki
Przejdź do nawigacji Przejdź do wyszukiwania

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.

Interfejs EM400 z załadowanym programem loops.bin
Interfejs EM400 z załadowanym programem loops.bin

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 przez wydanie 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.

Poprzednio wydane polecenie można przywołać wciskając klawisz strzałki w górę.

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. Program wykona się cały, procesor przejdzie do stanu "WAIT", sygnalizowanym w lewym dolnym rogu okna, a w oknie "ASM" zobaczymy, że kursor wskazujący aktualną instrukcję zatrzymał się po instrukcji "hlt 000".

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.