EM400 - tekstowy interfejs użytkownika

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

EM400 poza interfejsem graficznym Qt6 udostępnia prosty interfejs tekstowy, przeznaczony przede wszystkim do sterowania emulatorem przez inny program. Używają go na przykład testy emulatora. Jego konstrukcja umożliwia również sterowanie emulatorem przez użytkowników potrzebujących instalacji "headless".

Uruchomienie

em400 -u cmd

Interfejs działa wówczas na standardowym wejściu/wyjściu procesu.

em400 -u cmd:<port>

Interfejs nasłuchuje na wskazanym porcie TCP na interfejsie loopback (127.0.0.1).

Protokół

Komunikacja odbywa się tekstowo. Każda komenda to linia zakończona znakiem nowej linii. Każda odpowiedź to równiż jedna linia, zaczynająca się od statusu:

OK: <wynik>
ERR: <opis błędu>

Uwagi:

  • Nazwy komend nie rozróżniają wielkości liter.
  • Argumenty rozdziela dowolny biały znak.
  • Maksymalna długość linii wejściowej to 65536 bajtów. Dłuższa linia jest odrzucana w całości z błędem.

Format liczb

Argumenty liczbowe są interpretowane według prefiksu:

Zapis Podstawa Przykład
0x... szesnastkowo 0x40
0... ósemkowo 0100
pozostałe dziesiętnie 64

Dopuszczalny zakres to -32768..65535. Wartość jest obcinana do 16 bitów.

Argumenty typu włącz/wyłącz przyjmują wyłącznie on i off.

Lista komend

Komenda Argumenty Opis
help [komenda] Lista komend lub opis wskazanej komendy
info Wersja emulatora
state Stan procesora
reg [nazwa [wartość]] Odczyt/zapis rejestrów
int [numer] Odczyt rejestru RZ lub zgłoszenie przerwania
mem seg adres liczba_komórek Odczyt pamięci
memw <seg> <adres> <wartość> ... Zapis pamięci
memmap seg Mapa alokacji dla segmentu
load seg adres plik Załadowanie pliku do pamięci
eval wyrażenie Obliczenie wyrażenia
brk wyrażenie Dodanie pułapki
brkdel id Usunięcie pułapki
start uruchomienie procesora
stop zatrzymanie procesora
cycle Wykonanie jednego cyklu
clear zerowanie (reset)
bin start ładowania binarnego
oprq OPRQ — zgłoszenie operatora
clock off] Stan zegara lub jego włączenie/wyączenie
ips Średnia liczba instrukcji na sekundę
log off] Stan logowania lub jego włączenie/wyłączenie
logc [komponent [stan]] Stan komponentów logowania lub ich włączenie/wyłączenie
quit Zakończenie pracy emulatora

Opis komend

state

Zwraca bieżący stan procesora.

> state
OK: STOP

reg

Bez argumentów wypisuje wszystkie rejestry:

> reg
OK: R0=0x0000 R1=0x0000 R2=0x0000 R3=0x0000 R4=0x0000 R5=0x0000 R6=0x0000 R7=0x0000 IC=0x0040 AC=0x0000 AR=0x0000 IR=0x0000 SR=0x0000 RZ=0x0000 KB=0x0000

Podanie nazwy rejestru pokazuje zawartość wybranego rejestru, a nazwy i wartości powoduje jej zapis do rejestru:

> reg ic
OK: 0x0040
> reg ic 0x70
OK: 0x0070

Dostępne rejestry: R0-R7, IC, AC, AR, IR, SR, RZ, KB (klucze binarne pulpitu)

int

Bez argumentu zwraca 32-bitowy rejestr zgłoszeń RZ. Z argumentem (0..31) zgłasza przerwanie o podanym numerze i zwraca RZ po zgłoszeniu.

> int
OK: 0x00000000
> int 5
OK: 0x04000000

mem

Odczytuje wymaganą liczbę słów z danego segmentu począwszy od podanego adresu.

> mem 0 0x40 4
OK: 0x0000 0x0000 0x0000 0x0000

memw

Zapisuje kolejne słowa począwszy od podanego adresu. Liczba wartości jest dowolna (do rozmiaru segmentu).

> memw 0 0x40 0x1234 0x5678
OK: 2 words written

memmap

Zwraca mapę zajętości segmentu jako 16-bitową maskę stron.

> memmap 0
OK: 0x000f

load

Ładuje plik do pamięci.

> load 0 0 test.bin
OK: 1024 words loaded from file test.bin

eval

Oblicza wyrażenie w kontekście bieżącego stanu maszyny i zwraca wynik dziesiętnie.

> eval r0 + 1
OK: 5
> eval [0:0x40]
OK: 4660

W przypadku błędu składni zwracany jest komunikat wraz z pozycją w tekście:

> eval r0 +
ERR: syntax error, unexpected end of file (at 6-6)

brk / brkdel

Pozwala dodać pułapkę. Pułapka jest wyrażeniem obliczanym przed każdą instrukcją. Gdy wynik jest niezerowy, procesor jest zatrzymywany. Zwracany jest numer pułapki, służący później do jej usunięcia.

> brk ic == 0x100 && r1 > 0
OK: Added breakpoint: 0
> brkdel 0
OK: Removed breakpoint: 0

clock

Zwraca stan lub włącza/wyłącza zegar (timer zgłaszający przerwanie zegarowe).

> clock
OK: 1
> clock off
OK: 0

ips

Średnia liczba wykonanych instrukcji na sekundę od poprzedniego wywołania.

> ips
OK: 1934281

log / logc

log włącza i wyłącza logowanie jako całość, logc zarządza poszczególnymi komponentami logowania.

> log on
OK: 1
> logc
OK: LIB APP CPU
> logc mx 1
OK: 1
> logc mx
OK: 1

Opis komponentów można znaleźć tutaj

quit

Kończy pracę emulatora.

Składnia wyrażeń dla brk i eval

Ta sama składnia obowiązuje w komendach eval i brk. Wielkość liter nie ma znaczenia.

Literały

Zapis Znaczenie
123 dziesiętnie
0x1f szesnastkowo
017 ósemkowo
0b1010 dwójkowo

Elementy stanu maszyny

Zapis Znaczenie
r0..r7 rejestry ogólnego przeznaczenia
ic, ac, ar, ir, sr, kb rejestry systemowe
z m v c l e g y x flagi (bity rejestru R0)
rz rejestr zgłoszeń przerwań
rz[n] pojedynczy bit rejestru zgłoszeń
alarm stan ALARM
mc licznik pre-modyfikacji
rm, q, bs, nb pola rejestru SR
[adres] słowo pamięci w bieżącym bloku
[blok:adres] słowo pamięci w podanym bloku
@ramka:segment fizyczne położenie segmentu

Operatory

Od najwyższego priorytetu:

[ ]
~ !
* /
+ -
<<
>>
<  >  <=  >=
!=  <>
==
&
^
|
&&
||

Dostępny jest także jednoargumentowy minus oraz nawiasy okrągłe.

Przykład sesji

> info
OK: EM400 1.0.0
> memw 0 0x40 0x0501 0x0080
OK: 2 words written
> reg ic 0x40
OK: 0x0040
> brk ic == 0x42
OK: Added breakpoint: 0
> start
OK: START
> state
OK: STOP
> reg r1
OK: 0x0080
> quit
OK: QUIT