Surová data tak, jak byla v roce 2013 stažena z Pandory (HTML zdroj bez úprav, osobní e-mailové adresy jsou maskované).
<!-------------------------------------------------------------->
<table width="100%"><tr><td align="left" valign="middle"><B>ad. MZIX - lockovani Z-80:</B></td><td align=right valign="middle"></td></tr></table><BR><p>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:</p> <p>Pavel Cimbal (Zilog) piše:</p> <p>podotykam ze locky treba kodovat _atomicky_.<br/>kod typu:<br/><br/>otestuj lock<br/>pokud nastaven odskoc nekam<br/>nastav lock<br/>.....<br/>zrus lock<br/><br/>neni spravny. mezi sejmutim stavu locku a jeho nastavenim nesmi mit<br/>druhy subjekt (preruseni) moznost intervence. Jinak se stane, ze prvni<br/>sejme odemceny stav, a jeste nez ho obsadi, sejme ho i druhy a take<br/>obsadi -> kolize.<br/><br/>Test a nastaveni musi probehnout atomicky, tj. jednim vrzem tam nacpat<br/>hodnotu LOCKED a zaroven nacist, co tam bylo. Typicky instrukce EX<br/>(mem),reg, TSL atd. Ty bohuzel Z80 nema. Jedine EX (SP),HL, ktera je<br/>ovsem zamyslena k necemu uuuplne jinemu. EI/DI je divne, muzeme prijit o<br/>preruseni, ktere ani nema s lockem co do cineni. Nastesti mame<br/>nepublikovane instrukce, konkretne rotace s kopii do registru:<br/><br/>SCF<br/>RL (IX+N),A<br/>JR NZ,...<br/><br/>Nastavim carry (chci zabrat lock), rotaci ho do bytu nasunu, a zaroven<br/>podle nenulove hodnoty A zjistim, ze ho uz nekdo drzel, a nemam tedy<br/>narok pokracovat v sekci. Ma nasunuta jednicka tak jen potvrzuje<br/>okamzity stav a nijak nevadi. Pokud byl ale registr nulovy, nikdo lock<br/>nedrzel, a ma jednicka okamzite vsem potencialnim dalsim tazatelum<br/>zabrani vstoupit do teze sekce, jako jsem ja. Jednicku nikdy nevyroluji<br/>ven, protoze tam pri dotazu cpou svou dalsi. Jedine az na konci sekde<br/>dam LD (IX+N),0, sekci tim odblokuji.<br/><br/>Toto nemusi byt kopirovanio na kazdem pocatku kriticke sekce, obvykle to<br/>vyusti v rutinu typu:<br/><br/>LD A,#lock_no<br/>CALL SETLOCK<br/>z=free, nz=engaged<br/><br/>LD A,#lock_no<br/>CALL UNLOCK<br/>-<br/><br/>rutina pak uz udela :<br/><br/><br/>SETLOCK: push IX<br/>ld IX,locktable<br/>SCF<br/>codeplace: RL (ix+A),A<br/>pop IX<br/>ret<br/><br/>UNLOCK: push IX<br/>ld ix,locktable<br/>ld (IX+A),0<br/>pop ix<br/>ret<br/><br/>Coz snadno vyresime (adresace (ix+A) nexistuje) treba pomoci ld xl,a a<br/>zarovnanim tabulky na zacatek 256-stranky, nebo proste jen udanim<br/>nizsiho byte (cela tedy v jedne strance - pro malou tabulku tedy zadne<br/>riziko ani omezeni, konkretni offset jeji polohy ve strance muzeme dat<br/>jako #DEFINE). Co vy na to?<br/><br/>Z.<br/><br/>Timto zdravim Prof. Doc. Pavla Tvrdika CSc., protoze nam velmi hezky a<br/>vtipne objasnil filozoficke zalezitosti kolem semaforu, lockovani a<br/>kodovani paralelnich systemu ;). Lockovani na Z-80 je pole neorane, a<br/>zajimaji mne vase nazory na tuto problematiku, hlavne vyvojarsky<br/>zainteresovanych lidi (baze, busy?).<br/><br/>-- <br/>PS: do konference Speccy je treba se prihlasit.</p> <p>zelez</p>