ZXNet эхоконференция «code.zx»


тема: Nemo HDD



от: Kirill Frolov
кому: Sergey Selev
дата: 02 Apr 2001
Hемедленно нажми на RESET, Sergey! 27 Mar 01 11:23, Sergey Selev wrote to All: SS> Hужно описание портов сабжа. Базовый адрес: %xxxxxxxx aaacc11h 21010 <- части адреса x = любой бит a = адресная часть регистра накопителя: a0, a1, a2 c = CSx выбор банка регистров 0/1. h = если (1) то происходит запись/чтение из регистра хранящего старшую половину шины адреса. При записис 16-битных чисел в накопитель необходимо сначала записать старшую половину числа в этот регистр (при этом значения _a_ и _c_ битов не важно), а потом записать в нужный регистр младшую половину. При чтении из накопителя 16-битных чисел после считывания из основного регистра младшей половины можно из этого регистра считать старшую часть числа. Таким образом получается: #xx10 младшая половина регистра данных #xx30 регистр свойств и ошибок.... ..... #xxF0 регистр команд и статуса #xxC8 альтернативный регистр статуса и управления устройством Описание регистров смотри в доке на IDE интерфейс. Вот пример (не тестированный, не работающий, не дописанный и вообще не смотри на него): === Cut === file: nemo_hdd.inc ; nemo-hdd controller ctlr equ 0xff08 ctlr equ 0xff10 has equ ctlr+0xc0 hdc equ ctlr+0xc0 hdr equ cmdr+0x00 her equ cmdr+0x20 ; r hfr equ cmdr+0x20 ; w hsc equ cmdr+0x40 hsn equ cmdr+0x60 hcl equ cmdr+0x80 hch equ cmdr+0xa0 hdh equ cmdr+0xc0 hsr equ cmdr+0xe0 ; r hcr equ cmdr+0xe0 ; w hdrh equ hdr+0x01 === Cut === === Cut === file: nemo_ctl.as include nemo_hdd.inc public idewrr, iderdr public idewrb, iderdb public idedev ; write DE to IDE register BC (get reg. addr. from nemo_hdd.inc etc...) idewrr: inc c out (c), d dec c out (c), e ret ; read IDE register BC to DE iderdr: in e, (c) inc c in d, (c) dec c ret ; read data block (512 bytes) in PIO mode from IDE device to (HL++) iderdb: ld bc, hdr ld a, 64 rdb1: ini inc c ini dec c ini inc c ini dec c ini inc c ini dec c ini inc c ini dec c dec a jr nz, rdb1 ret ; write data block (512 bytes) in PIO mode to IDE device from (HL++) idewrb: ld bc, hdr ld a, 64 wrb1: inc hl inc c outd dec c outi inc hl inc hl inc c outd dec c outi inc hl inc hl inc c outd dec c outi inc hl inc hl inc c outd dec c outi inc hl dec a jr nz, wrb1 ret === Cut === === Cut === file: ide_comm.inc ; hdd commands sbsy equ 0x80 ; status register masks sdrdy equ 0x40 sdf equ 0x20 ssdc equ 0x10 sdrq equ 0x08 scorr equ 0x04 sidx equ 0x02 serr equ 0x01 mdev equ 0x10 ; head/dev register bits mlba equ 0x40 hdiag equ 0x90 ; commands hident equ 0xec hinit equ 0x91 hnop equ 0x00 hrdbuf equ 0xe4 hread equ 0x20 hverify equ 0x40 hrecal equ 0x10 hseek equ 0x70 hfeaut equ 0xef hwrbuf equ 0xe8 hwrsam equ 0xe9 hwrite equ 0x30 hstdby0 equ 0x94 hstdby1 equ 0xe0 hrdmult equ 0xc4 hwrmult equ 0xc5 hrdlong equ 0x22 hwrlong equ 0x32 hsetmul equ 0xc6 === Cut === === Cut === file: ide_comm.as include ide_comm.inc extrn idewrr, iderdr, idewrb, idewrb public idebsy, iderdy, ide_dh, chslba, lbachs ; convert LBA to CHS ; dehl=lba address, de=CylinderSize, c=Sectors ; -> hl=cylinder, d=head, e=sector ; CylinderSize = Heads * Sectors ; CYL=LBA/CylinderSize temp1=LBA%CylinderSize ; HEAD=temp1/Sectors temp2=temp1%Sectors ; SEC=temp2+1 ; lbachs: ; hl=dehl(28bit)/de' hl'=dehl%de' ld hl, 0 exx add hl, hl rl e rl d add hl, hl rl e rl d add hl, hl rl e rl d add hl, hl rl e rl d ; skip 4 bits (32-28) ld b, 28 lbadiv1: add hl, hl rl e rl d exx adc hl, hl sbc hl, de exx jr nc, lbadiv2 exx add hl, de exx dec l ldadic2: inc l djnz lbadiv1 push hl ; store cylinder exx ; hl=temp1 ; hl=hl/c a=hl%c ld b, 16 xor a lbadiv3: add hl, hl rla sbc a, c jr nc, lbadiv4 add a, c dec l lbadiv4: inc l djnz lbadiv3 ld d, l ; head inc a ld e, a ; sector pop hl ; cylinder ret ; convert CHS to LBA ; hl=cylinder, d=head, e=sector, b=Heads, c=Sectors ; -> dehl=lba address ; LBA=(CYL*Heads+HEAD)*Sectors+SEC-1 ; chslba: push de ; store head and sector push bc ; store Sectors ex de, hl ; de=cylinder ld c, b ; c=Heads ; ahl=de*c ld hl, 0 xor a ld b, 8 chsmul1: add hl, hl adc a, a rl c jr nc, chsmul2 add hl, de adc a, 0 chsmul2: djnz chsmul1 pop bc ; c=Sectors pop de ; d=head, e=sector ld b, c ld c, d ld d, b ld b, 0 ; bc=head, d=Sectors, e=sector add hl, bc adc a, 0 ex de, hl ; de=hl exx ld e, a ld hl, 0 ld d, l ; de'=a exx ld c, l ; c=sector ld a, h ; a=Sectors ld hl, 0 ; hl'hl=de'de*a ld b, 8 chsmul3: add hl, hl exx adc hl, hl exx rla jr nc, chsmul4 add hl, de exx adc hl, de exx chsmul4: djnz chsmul3 dec c ; bc=sector-1 add hl, bc push hl exx ex de, hl pop hl rl e rl d ; dehl=hl'hl+bc ret ; set dev/head register (lba/chs mode, device and head) ; a=mode lba=1/chs=0, d=head , e=device ide_dh: or a jr z, idedh1 ld a, mlba idedh1: bit 0, e jr z, idedh2 or mdev idedh2: or d ld e, a ld bc, hdh jp idewrr ; wait while selected ide device is busy ; return a=status reg, cy=1 if timeout idebsy: call itimer ld (bsytm1), hl bsyw: ld bc, has call iderdr ld a, e and sbsy ld a, e ret z ; not busy now push de call itimer ld de, 0 bsytm1 equ $-2 or a sbc hl, de ld de, idetio ; max. timeout or a sbc hl, de pop de jr c, bsyw ld a, e scf ; timeout ret ; wait while selected ide device is not ready ; return a=status reg, cy=1 if timeout iderdy: call itimer ld (rdytm1), hl rdyw: ld bc, hsr call iderdr ld a, e and sdrdy ld a, e ret nz ; ready now push de call itimer ld de, 0 rdytm1 equ $-2 or a sbc hl, de ld de, idetio ; max. timeout or a sbc hl, de pop de jr c, rdyw ld a, e scf ; timeout ret === Cut ===

от: Sergey Zotov
кому: Denis Kitel
дата: 20 Apr 2001
On Sun 8 Apr 2001, Denis Kitel wrote: DK>>> Попробуй у Hемо спроси. :))) SS>> У него сети нет, насколько я знаю. DK> И не будет никогда, этот г.Nemo почему-то против сетей, и DK> порты винта не желает раскрывать, аргументируя это тем, что DK> люди сразу-же начнут писать свои "левые" проги и драйвера, DK> и начнётся всемирный хаос! :( А ему от этого плохо станет? Кста! Можно поковырять is-dos драйдера и выудить адреса, если кому очень надо. Лично от KAY'ев не жарко не холодно. Бесит только одно: неужели в конце 20 века нельзя было fdd контроллер на плате развести. Да еще и на 2 девайся only! E-mail: zs80@nm.ru ~/ <~ http://www.zx.ru/zs/ ZXNet: 500:8462/1 /_ _> ftp://zx-museum.org.ru/zs/

от: Evgeny Poddubny
кому: Sergey Zotov
дата: 21 Apr 2001
Приветствую тебя, Sergey Как-то Пятница 20 Апрель 2001 в 17:45:10 мылил Sergey Zotov к Denis Kitel на тему Nemo HDD DK>>>> Попробуй у Hемо спроси. :))) SS>>> У него сети нет, насколько я знаю. DK>> И не будет никогда, этот г.Nemo почему-то против сетей, и DK>> порты винта не желает раскрывать, аргументируя это тем, DK>> что DK>> люди сразу-же начнут писать свои "левые" проги и драйвера, DK>> и начнётся всемирный хаос! :( SZ> А ему от этого плохо станет? SZ> Кста! Можно поковырять is-dos драйдера и выудить адреса, Hезачем фигней страдать - есть адреса: ═══════════════════ порты.tx.C ══════════════════ ================== begin of file "NemoHDD .C" ================== DATL EQU #10 ;10:Младший байт регистра данных DATH EQU DATL+1 ;11:Старший байт регистра данных ERRF EQU DATL+#20 ;31:Рг ошибок SCNT EQU ERRF+#20 ;51:Рг счетчика сектора SNMB EQU SCNT+#20 ;71:Рг н-ра сектора CYLL EQU SNMB+#20 ;91:Рг н-ра цилиндра (младший) CYLH EQU CYLL+#20 ;B1:Рг н-ра цилиндра (старший) SDH EQU CYLH+#20 ;D1:Рг н-ра привода и головки RSTA EQU SDH+#20 ;F1:Рг состояния RCOM EQU RSTA ;F1:Рг команд ASR EQU #C8 ;Alter Stat Rg FDR EQU #C8 ;Fixed disk Rg DIR EQU #E8 ;Dig In Rg SYSR EQU #F8 ;сис рг ================== end of file "NemoHDD.C" ================== . ════════════════════════════════════════════════ SZ> если кому очень надо. Лично от KAY'ев не жарко не холодно. SZ> Бесит только одно: неужели в конце 20 века нельзя было fdd SZ> контроллер на плате развести. Да еще и на 2 девайся only! САЁ:НАРА, ДО:ДЗЕ О-ГЭНКИ-ДЭ, Evgeny Poddubny.

от: Stanislav Udin
кому: Sergey Zotov
дата: 01 May 2001
Привет Sergey! 30 Апр 01 01:31, Sergey Zotov -> Stanislav Udin: SU>> Можно было, конечно, но Hемо pасчитывал потом сделать SU>> отдельный контpоллеp HDD+FDD и вставлять в один слот. SU>> Видимо что-то не сpослось y него. SZ> И imho никогда теперь уже не срастется. А страдают юзеры данной SZ> машины. :/ В любом случае два свободных слота в КАЕ - это больше, чем один свободный слот в Скорпионе. SZ>>> Да еще и на 2 девайся only! SU>> А зачем больше? SZ> У меня 2 пятерки и 1 тройка? Большинство имеют только пятерки, вот и SZ> мне надо копировать в 5 на 5, т.к. даже имея винт на него все не SZ> положишь. А тройко я пользуюсь для всязи с pc. У меня Скорп и мне пришлось отказаться от одной пятерки в пользу тройки. Вначале мучался, но затем привык пользоваться только двумя дисководами. SZ> Hа мой желтый Скорп при поможи 2х микросхем было подвешало еще 2 SZ> дисковода к имевшимся 2м. А на KAY так можно сделать? Понятия не имею :) Stanislav




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Post Scriptum
Предисловие - А как все начиналось.
Рапорт - Первый республиканский фестиваль комьютерного искусства ASCII 2001: NoViSeT рассказывает как это было.
Лист - Цена головы или спаси князя.
AMIGA-новости - Что будет с Амигой?

В этот день...   8 мая