EM400 - uruchamianie programów

Z MERA 400 wiki
Wersja z dnia 16:08, 13 gru 2021 autorstwa Amo (dyskusja | edycje) (Utworzono nową stronę "W emulatorze EM400, oprócz uruchomienia systemu operacyjnego CROOK-5 z obrazu dysku, można uruchomić dowolny program napisany dla MERY-400. Najpro...")
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
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

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.