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