ZXNet эхоконференция «code.zx»
тема: Винты (было: В догонку к загрузчикам)
от: Valerij Kozhevnikoff
кому: Kirill Frolov
дата: 19 Dec 1998
Здравствуй, Kirill !
17 Dec 98 at 04:37:12, Kirill Frolov => Valerij Kozhevnikoff:
VK>> У немы - качмар. Запись делается через:
VK>> ld a,(hl)
VK>> out (#f0),a
VK>> inc hl
VK>> ld a,(hl)
VK>> out (#f1),a
VK>> inc hl
VK>> Тут уже не 20 тактов.
Sorry, адреса попутал. Порты должны быть #11 и #10.
И байты не в том порядке. Вобщем разобрался я получше, вот тут тебе кусок из
живого ide+3.blk.
===================== import file nemohdd .t ==================
;первая плевалка
LLA5C2 INC HL
LD A,(HL)
OUT (#11),A
DEC HL
LD A,(HL)
OUT (#10),A
INC HL
INC HL
IN A,(#F0) ; состояние
BIT 3,A ; проверка DRQ
JR NZ,LLA5C2 ; если есть, то продолжим
RET
;вторая плевалка
LLA5D3 LD B,#80
LLA5D5 INC HL
LD A,(HL)
OUT (#11),A
DEC HL
LD A,(HL)
OUT (#10),A
INC HL
INC HL
DJNZ LLA5D5
RET
============================ import end =======================
Других плевалок в драйвере HЕТ!!!
Причем первая вызывается постоянно, а вторая только для чтения половинок
секторов!!!!!!!!!
KF> ГHУСHОЕ ЛАМЕРСТВО !!!
Совершенно верно!!!
Это ж додуматься - ждать DRQ после _каждого_ _слова_!!!
Tолько не надо меня спрашивать "а может так и надо?", в доке про протокол ясно
всё сказано и неоднократно проверено.
KF> pop hl ; 10
KF> ld a,l ; 4
KF> out (port0),a ; 11
KF> ld a,h ; 4
KF> out (port1),a ; 11
KF> ^^^^^^^^^^^^^^^^^^^^ так будет быстрее...
Циферки мои - итого 20 тактов на байт (при записи!).
Только я малость ошибся и тебя запутал: сначала выплевывается _старший_ байт (и
защёлкивается в регистре) и лишь при записи младшего байта (когда на IDE шине
торчит целое слово) винту выдаёется IOWR.
Спасибо за идею, обязательно применю.
Беспокоит одно - хоть все это и делается после DI, ну a вдруг NMI придет?
У меня под смук сейчас так:
inc hl ; 7
ld b,d ; 4
outd ; 16
ld b,e ; 4
outi ; 16
inc hl ; 7
Получается 27 тактов на байт.
KF> Запись аналогично, только надо h и l ^^^ выше переставить и будет
^^^^^^
ты имел в виду чтение? Очепятки, однако.
И как раз при чтении байты переставлять не надо.
При чтении из #10 винту выдаётся IORD, младший байт выдается процессору, а
старший защёлкивается в регистре и дочитывается из #11.
KF> 20 тактов на байт r/w.
KF> ld c,d
KF> ini
KF> ld c,e
KF> ini
KF>>> У зонова тоже - HО ВЕДЬ ЕМУ HЕ HАДО БЫЛО HИЧЕГО ЭКОHОМИТЬ !
VK>> У Зонова не только поэтому. В альтере на смаке сидит только дешифратор,
VK>> регистры все внешние, обычные ИР23.
KF> ~~~~~~~~~~~~~~~~~
KF> Регистр жалко :-(
Видимо жалко.
WBR, Jason.
|