EM400 - tekstowy interfejs użytkownika: Różnice pomiędzy wersjami
Nie podano opisu zmian |
Nie podano opisu zmian |
||
| (Nie pokazano 1 pośredniej wersji utworzonej przez tego samego użytkownika) | |||
| 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 ( | | <code>clear</code> || || zerowanie, reset (klucz CLEAR) | ||
|- | |- | ||
| <code>bin</code> || || start ładowania binarnego | | <code>bin</code> || || start ładowania binarnego (klucz BIN) | ||
|- | |- | ||
| <code>oprq</code> || || | | <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 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. | ||
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.