EM400 - tekstowy interfejs użytkownika: Różnice pomiędzy wersjami

Z MERA 400 wiki
Przejdź do nawigacji Przejdź do wyszukiwania
(Utworzono nową stronę "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 ws…")
 
Nie podano opisu zmian
 
(Nie pokazano 2 pośrednich wersji utworzonych przez tego samego użytkownika)
Linia 11: Linia 11:
Interfejs nasłuchuje na wskazanym porcie TCP na interfejsie loopback (127.0.0.1).
Interfejs nasłuchuje na wskazanym porcie TCP na interfejsie loopback (127.0.0.1).


=== Protokół ===
= 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:
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:
Linia 24: Linia 24:
* Maksymalna długość linii wejściowej to 65536 bajtów. Dłuższa linia jest odrzucana w całości z błędem.
* 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 ====
== Format liczb ==


Argumenty liczbowe są interpretowane według prefiksu:
Argumenty liczbowe są interpretowane według prefiksu:
Linia 42: Linia 42:
Argumenty typu włącz/wyłącz przyjmują wyłącznie <code>on</code> i <code>off</code>.
Argumenty typu włącz/wyłącz przyjmują wyłącznie <code>on</code> i <code>off</code>.


=== Lista komend ===
= Lista komend =


{| class="wikitable"
{| class="wikitable"
Linia 71: Linia 71:
| <code>brkdel</code> || <code>id</code> || Usunięcie pułapki
| <code>brkdel</code> || <code>id</code> || Usunięcie pułapki
|-
|-
| <code>start</code> || || uruchomienie procesora
| <code>start</code> || || uruchomienie procesora (podniesienie klucza START)
|-
|-
| <code>stop</code> || || zatrzymanie procesora
| <code>stop</code> || || zatrzymanie procesora (opuszczenie klucza START)
|-
|-
| <code>cycle</code> || || Wykonanie jednego cyklu
| <code>cycle</code> || || Wykonanie jednego cyklu (klucz CYCLE)
|-
|-
| <code>clear</code> || || zerowanie (reset)
| <code>clear</code> || || zerowanie, reset (klucz CLEAR)
|-
|-
| <code>bin</code> || || start ładowania binarnego
| <code>bin</code> || || start ładowania binarnego (klucz BIN)
|-
|-
| <code>oprq</code> || || OPRQ — zgłoszenie operatora
| <code>oprq</code> || || zgłoszenie operatora (klucz OPRQ)
|-
|-
| <code>clock</code> || <code>[on|off]</code> || Stan zegara lub jego włączenie/wyączenie
| <code>clock</code> || <code>[on|off]</code> || Stan zegara lub jego włączenie/wyączenie (klucz CLOCK)
|-
|-
| <code>ips</code> || || Średnia liczba instrukcji na sekundę
| <code>ips</code> || || Średnia liczba instrukcji na sekundę
Linia 94: Linia 94:
|}
|}


=== Opis komend ===
= Opis komend =


==== state ====
== state ==


Zwraca bieżący stan procesora.
Zwraca bieżący stan procesora.
Linia 103: Linia 103:
  OK: STOP
  OK: STOP


==== reg ====
== reg ==


Bez argumentów wypisuje wszystkie rejestry:
Bez argumentów wypisuje wszystkie rejestry:
Linia 119: Linia 119:
Dostępne rejestry: R0-R7, IC, AC, AR, IR, SR, RZ, KB (klucze binarne pulpitu)
Dostępne rejestry: R0-R7, IC, AC, AR, IR, SR, RZ, KB (klucze binarne pulpitu)


==== int ====
== 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.
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.
Linia 128: Linia 128:
  OK: 0x04000000
  OK: 0x04000000


==== mem ====
== mem ==


Odczytuje wymaganą liczbę słów z danego segmentu począwszy od podanego adresu.  
Odczytuje wymaganą liczbę słów z danego segmentu począwszy od podanego adresu.  
Linia 135: Linia 135:
  OK: 0x0000 0x0000 0x0000 0x0000
  OK: 0x0000 0x0000 0x0000 0x0000


==== memw ====
== memw ==


Zapisuje kolejne słowa począwszy od podanego adresu. Liczba wartości jest
Zapisuje kolejne słowa począwszy od podanego adresu. Liczba wartości jest
Linia 143: Linia 143:
  OK: 2 words written
  OK: 2 words written


==== memmap ====
== memmap ==


Zwraca mapę zajętości segmentu jako 16-bitową maskę stron.
Zwraca mapę zajętości segmentu jako 16-bitową maskę stron.
Linia 150: Linia 150:
  OK: 0x000f
  OK: 0x000f


==== load ====
== load ==


Ładuje plik do pamięci.
Ładuje plik do pamięci.
Linia 157: Linia 157:
  OK: 1024 words loaded from file test.bin
  OK: 1024 words loaded from file test.bin


==== eval ====
== eval ==


Oblicza wyrażenie w kontekście bieżącego stanu maszyny i zwraca wynik dziesiętnie.
Oblicza wyrażenie w kontekście bieżącego stanu maszyny i zwraca wynik dziesiętnie.
Linia 171: Linia 171:
  ERR: syntax error, unexpected end of file (at 6-6)
  ERR: syntax error, unexpected end of file (at 6-6)


==== brk / brkdel ====
== 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
Pozwala dodać pułapkę. Pułapka jest wyrażeniem obliczanym przed każdą instrukcją. Gdy wynik jest niezerowy, procesor jest zatrzymywany. Zwracany jest numer
Linia 181: Linia 181:
  OK: Removed breakpoint: 0
  OK: Removed breakpoint: 0


==== clock ====
== clock ==


Zwraca stan lub włącza/wyłącza zegar (timer zgłaszający przerwanie zegarowe).
Zwraca stan lub włącza/wyłącza zegar (timer zgłaszający przerwanie zegarowe).
Linia 190: Linia 190:
  OK: 0
  OK: 0


==== ips ====
== ips ==


Średnia liczba wykonanych instrukcji na sekundę od poprzedniego wywołania.
Średnia liczba wykonanych instrukcji na sekundę od poprzedniego wywołania.
Linia 197: Linia 197:
  OK: 1934281
  OK: 1934281


==== log / logc ====
== log / logc ==


<code>log</code> włącza i wyłącza logowanie jako całość, <code>logc</code> zarządza poszczególnymi komponentami logowania.
<code>log</code> włącza i wyłącza logowanie jako całość, <code>logc</code> zarządza poszczególnymi komponentami logowania.
Linia 212: Linia 212:
Opis komponentów można znaleźć [https://mera400.pl/EM400_-_konfiguracja#Logowanie tutaj]
Opis komponentów można znaleźć [https://mera400.pl/EM400_-_konfiguracja#Logowanie tutaj]


==== quit ====
== quit ==


Kończy pracę emulatora.
Kończy pracę emulatora.


=== Składnia wyrażeń dla brk i eval ===
= Składnia wyrażeń dla brk i eval =


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


==== Literały ====
= Literały =


{| class="wikitable"
{| class="wikitable"
Linia 234: Linia 234:
|}
|}


==== Elementy stanu maszyny ====
= Elementy stanu maszyny =


{| class="wikitable"
{| class="wikitable"
Linia 262: Linia 262:
|}
|}


==== Operatory ====
= Operatory =


Od najwyższego priorytetu:
Od najwyższego priorytetu:
Linia 282: Linia 282:


Dostępny jest także jednoargumentowy minus oraz nawiasy okrągłe.
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

Aktualna wersja na dzień 12:33, 30 sie 2026

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 (podniesienie klucza START)
stop zatrzymanie procesora (opuszczenie klucza START)
cycle Wykonanie jednego cyklu (klucz CYCLE)
clear zerowanie, reset (klucz CLEAR)
bin start ładowania binarnego (klucz BIN)
oprq zgłoszenie operatora (klucz OPRQ)
clock off] Stan zegara lub jego włączenie/wyączenie (klucz CLOCK)
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.