Přejít na obsah
ARCHIVEKArchiv e-mailových konferencí o 8bitových počítačích Archiv Pandory 1999 až 2013

Původní podoba příspěvku

Petr Žydek Zpět na příspěvek

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>definitivní verze IDE16 (varianta E):</B></td><td align=right valign="middle"></td></tr></table><BR><p>Obecný programátorský popis IDE16 chystám<br/>v HTML, s obrázky a komentářem. U datového<br/>portu 78H se využívá skutečnosti, že u<br/>instrukcí s nepřímou adresou<br/>(IN A,(C); OUT (C),A; INI; INIR; OUTI; OTIR)<br/>se posílá obsah B registru na AD8-AD15.<br/>Tento při např. OUTI automaticky dekrementuje<br/>a je oním rozhodovacím elementem při směrování<br/>dat na IDE. Vždycky je třeba přenést SUDÝ počet<br/>bajtů např. při odesílání čtyř bajtů se tyto<br/>přenesou jako dva "dvoubajty":</p> <p>ld bc,0478H&nbsp;&nbsp; ; počet bajtů, adresa datového portu<br/>ld hl,"odkud" ; adresa bloku dat<br/>outi&nbsp;&nbsp; ; B bylo 04 tj. sudé ... data se zachytí <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v registru pro DD0-DD7 IDE<br/>outi&nbsp;&nbsp; ; B bylo 03 tj. liché ... data projdou<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; registrem pro DD8-DD15 HDD na IDE piny<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DD8-DD15, data zachycená v registru pro<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DD0-DD7 se ukáží na IDE pinech DD0-DD7<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aktivuje se /IOW signál, HDD přijme data-<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dva bajty najednou, aniž by tušil, že<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; první z nich byl připraven předem<br/>outi&nbsp;&nbsp; ; B bylo 02 tj. sudé ... stejné jako B=04h<br/>outi&nbsp;&nbsp; ; B bylo 01 tj. liché ... stejné jako při B=03H<br/>přenos je ukončen</p> <p>V praxi je blok dat vždy dlouhý 512 bajtů, takže má<br/>smysl transakci zahajovat s nulou v B:</p> <p>ld hl,"odkud"<br/>ld bc,0078H<br/>vyber aktivní IDE jednotku<br/>iniciuj příslušné registry stopy, sektoru atd.<br/>in 7fH,a&nbsp;&nbsp; ; čti IDE status (event. čekej)<br/>ld a,31H&nbsp; ; příkaz zapsání sektoru<br/>out (7fH),a&nbsp; ; odešli<br/>in (7fH),a&nbsp; ; čti IDE status (event. čekej)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; čeká se na 58H (device ready, data request)<br/>OTIR&nbsp;&nbsp; ; odešle 256 bajtů dat počínaje adresou "odkud"<br/>OTIR&nbsp;&nbsp; ; odešle zbylých 256 bajtů dat, B se před touto<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; instrukcí přetočilo znovu k nule a HL je<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; o 256 bajtů vyšší (není třeba přenastavovat)<br/>přenos je ukončen<br/>in 7fH,a&nbsp;&nbsp; ; čti status (měl by být 50H=device ready, bez chyb)</p> <p>Ono se to bez těch obrázků těžko vysvětluje, ale všechno vyplývá<br/>ze schemat a pravdivostních tabulek...</p> <p>Petr de Zviqov</p>