Konference: Počítač SHARP MZ-800 a emulátory
Od: | Pavel Železo |
Datum: | 9.10.2003 08:39 |
Předmět: | ad. MZIX - lockovani Z-80 |
ad. MZIX - lockovani Z-80: |
Mozna se Vam bude hodit povidani, ktere v sekci Speccy na Pandore pridal Pavel Cimbal. Tyka se lockovani Z-80 a s MZIXem tedy uzce souvisi:
Pavel Cimbal (Zilog) piše:
podotykam ze locky treba kodovat _atomicky_.
kod typu:
otestuj lock
pokud nastaven odskoc nekam
nastav lock
.....
zrus lock
neni spravny. mezi sejmutim stavu locku a jeho nastavenim nesmi mit
druhy subjekt (preruseni) moznost intervence. Jinak se stane, ze prvni
sejme odemceny stav, a jeste nez ho obsadi, sejme ho i druhy a take
obsadi -> kolize.
Test a nastaveni musi probehnout atomicky, tj. jednim vrzem tam nacpat
hodnotu LOCKED a zaroven nacist, co tam bylo. Typicky instrukce EX
(mem),reg, TSL atd. Ty bohuzel Z80 nema. Jedine EX (SP),HL, ktera je
ovsem zamyslena k necemu uuuplne jinemu. EI/DI je divne, muzeme prijit o
preruseni, ktere ani nema s lockem co do cineni. Nastesti mame
nepublikovane instrukce, konkretne rotace s kopii do registru:
SCF
RL (IX+N),A
JR NZ,...
Nastavim carry (chci zabrat lock), rotaci ho do bytu nasunu, a zaroven
podle nenulove hodnoty A zjistim, ze ho uz nekdo drzel, a nemam tedy
narok pokracovat v sekci. Ma nasunuta jednicka tak jen potvrzuje
okamzity stav a nijak nevadi. Pokud byl ale registr nulovy, nikdo lock
nedrzel, a ma jednicka okamzite vsem potencialnim dalsim tazatelum
zabrani vstoupit do teze sekce, jako jsem ja. Jednicku nikdy nevyroluji
ven, protoze tam pri dotazu cpou svou dalsi. Jedine az na konci sekde
dam LD (IX+N),0, sekci tim odblokuji.
Toto nemusi byt kopirovanio na kazdem pocatku kriticke sekce, obvykle to
vyusti v rutinu typu:
LD A,#lock_no
CALL SETLOCK
z=free, nz=engaged
LD A,#lock_no
CALL UNLOCK
-
rutina pak uz udela :
SETLOCK: push IX
ld IX,locktable
SCF
codeplace: RL (ix+A),A
pop IX
ret
UNLOCK: push IX
ld ix,locktable
ld (IX+A),0
pop ix
ret
Coz snadno vyresime (adresace (ix+A) nexistuje) treba pomoci ld xl,a a
zarovnanim tabulky na zacatek 256-stranky, nebo proste jen udanim
nizsiho byte (cela tedy v jedne strance - pro malou tabulku tedy zadne
riziko ani omezeni, konkretni offset jeji polohy ve strance muzeme dat
jako #DEFINE). Co vy na to?
Z.
Timto zdravim Prof. Doc. Pavla Tvrdika CSc., protoze nam velmi hezky a
vtipne objasnil filozoficke zalezitosti kolem semaforu, lockovani a
kodovani paralelnich systemu ;). Lockovani na Z-80 je pole neorane, a
zajimaji mne vase nazory na tuto problematiku, hlavne vyvojarsky
zainteresovanych lidi (baze, busy?).
--
PS: do konference Speccy je treba se prihlasit.
zelez
Ostatní příspěvky vlákna:
[2003/1 (22)] [2003/2 (25)] [2003/3 (14)] [2003/4 (20)] [2003/5 (73)] [2003/6 (108)] [2003/7 (88)] [2003/8 (81)] [2003/9 (146)] [2003/10 (60)] [2003/11 (12)] [2003/12 (5)]