	wmachemu 0.0.1-current README

wmachemu jest emulatorem "maszyny W" uywanej na wykadach Postaw
Informatyki na kierunku Automatyka i Robotyka na wydziale Automatyki,
Elektroniki i Informatyki na Politechnice lskiej w Gliwicach.

Jest to alternatywa dla emulatrora dostpnego na stronie tego przedmiotu,
ktry jest dostpny tylko w formie wykonywalnej dla systemu Microsoft
Windows.

Obecna wersja skada si z trzech czci:
	wmachemu - waciwy emulator maszyny W
	wucc - kompilator mikrokodu
	was - assembler

Z emulatora korzysta si w nastpujcy sposb:
$ wmachemu -l mikrokod obraz1 [obraz2]

Przewanie aduje si dwa obrazy. Jeden z danymi, a drugi mniejszy
z programem. Dane wtedy umieszcza si na kocu pierwszego pliku.
Przewanie zadania ukadane w taki spobb, e taki sposb adowania
proramw wystarcza.

Przed uruchomieniem trzeba mie skompilowany mikrokod. Robi si to poprzez
$ wucc -o plik_wyjsciowy plik_wejsciowy

Trzeba take skompilowa wczeniej program:
$ was -o plik_wyjsciowy plik_wejsciowy

Przykadowo, by uruchomi program 2 (prog2.asm) z katalogu examples mona
wykona nastpujce polecenia:

$ cd examples
$ wucc -o w_machine.bin w_machine	# wygenerowanie mikrokodu
$ was -o prog2 prog2.asm		# skompilowanie programu
$ echo -e "\x04\x09" | dd of=dane bs=1 seek=30 count=2
					# wygenerowanie pliku z danymi.
					# na 30 bajcie jest 0x04, a na 31 0x09
$ wmachemu -l w_machine.bin dane prog2

Obecnie domylnie wspieranych jest kilka maszyn. Ich porwnania znajduje
si w tablicy poniej:

Maszyna					W	WIO	WK	WE
Szeroko magistrali danych [bit]	8	8	8	8
Szeroko magistrali adresowej [bit]	5	5	6	7
Szeroko licznika instrukcji [bit]	5	5	6	7
Rozmiar pamici RAM [b]			32	32	32	128
Rozmiar nieprog. pamici RAM [b]	0	0	0	0
Rozmiar pamici ROM [b]			0	0	32	0
Obsugiwane rozkazy:
0 - hlt					+	+	+	-
0 - hxchg				-	-	-	+
1 - add					+	+	+	+
2 - sub					+	+	+	+
3 - or					+	+	+	+
4 - and					+	+	+	+
5 - store				+	+	+	+
6 - jmp		skok bezwzgldny	+	+	-	-
6 - jmp 	skok wzgldny		-	-	+	+
7 - jz		skok bezwzgldny	+	+	-	-
7 - jz 		skok wzgldny		-	-	+	+
GPIO (jezeli jest to adres w pamici)	-	0 io	0 io	0 io
flags					-	-	-	1 io
poczatkowa warto licznika instrukcji	0	0	0	0

Maszyna W jest w peni kompatybilna z maszyn wykadow w zakresie
programu oraz prawie w peni kompatybilna w przypadku mikrokodu. Maszyna
WIO posiada dodatkowy mikrorozkaz io, ktry daje moliwo definiowania
rnego rodzaju portw io w przestrzeni adresowej. Przestrze ta jest dzielona
z pamici operacyjn. Jeeli pod danym adresem nie ma adnego portu
to zwracana jest zawarto pamici. Do pamici zawsze mona si dosta
w przypadku, gdy sygna sterujcy io nie wystpuje. Jako, e przewanie
pocztek pamici zajmuje kod, do ktrego nie trzeba mie dostpu
jako do danych mona w to miejsce wrzuci porty.

Maszyna WK uywa nieznacznie rnicego si mikrokodu, ktry posiada
zaimplementowane skoki wzgldne zamist bezwzgldnych (wymaga to
moliwoci przesyu danych z magistrali S na magistral A). Dodatkowo
z licznikiem zintegrowany jest sumator o szerokoci licznika. Sumator
podczony jest do magistrali A, a uruchamiany jest sygnaem poziomowym
wejr. Sygna impulsowy do zatrzanicia wyniku w rejestrze L generowany
jest automatycznie (wejr * CLK). W stosunku do maszyn W i WIO rozszerzona
zostaa szeroko magistrali adresowej oraz licznika instrukcji do 6-bitw.
Przy adowaniu danych na szersz magistral bit najstarszy jest zwielokratniany
(liczby zachowuj znak).

Maszyna WE zamiast instrukcji hlt posiada instrukcj hxchg. Daje ona moliwo
dostpu do caej 7-bitowej przestrzeni adresowej (cznie z adresami 0 i 1
okupowanymi przez GPIO i flags). Dostp jest zarwno do zapisu jak i do
odczytu. Zapis realizowany jest jednak przez xorowanie danych. Tak wic
przewanie wymagane jest dwukrotne uycie tej instrukcji. Poza tym instrukcja
ta daje moliwo poredniego adresowania. Oczywicie wystpujce w niej
xorowanie danych mona wykorzysta jako operacj xor.

Zatrzymanie maszyny mona realizowa za pomoc wpisu 0x80 do wirtualnego
rejestru flags dostpnego pod adresem 1.

Raporty o bdach lub proby dodanie jaki cech naley kierowa na
adres krzysiek@podlesie.net.
