Ahoj,
na web jsem uploadnul prozatim asi posledni verzi fdc driveru
http://ordoz.com/sharp/fddrv/
Stav je nasledujici:
- rutiny pro neupraveny radic jsem odzkousel u sebe na FDC Horava
- rutiny pro HD upraveny radic jsou prozatim zrejme funkcni jen v
emulatoru, abych mel alespon jistotu, ze je funkcni princip, tak jsem si
nakompiloval hybridni kod, ktery pouzival stejnou DRQ rutinu, ale bez
interruptu a odzkousel taktez na neupravenem FDC. Vice asi bez
skutecneho radice nesvedu.
Jako soucast zdrojoveho kodu jsem pribalil i adresar s predkompilovanymi
testy:
fddrv.mzf
fddrv_write.mzf
fddrv_int.mzf
fddrv_int_write.mzf
Testy vyzaduji naformatovanou 720kB disketu, ktera ma na 1. stope Sharp
format (256 B sector size). Precte se 1. sektor a ulozi na adresu
0x6000, nasledne 2. sektor, ktery se ulozi na adresu 0x7000. Pri write
variante testu se jeste navic upraveny obsah 1. sektoru zapise na
disketu do pozice 2.sektoru. Po uspesnem ukonceni testu se vypise Done a
zastavi se motor.
Zdrojaky kompiluju v Linuxu. Pro kompilaci je potreba mit zhruba stejne
nastroje jako uvadi Fuzzy pro kompilaci mzixu:
- sdcc>=3.1 (http://sdcc.sourceforge.net)
- asxxxx 5.x (http://shop-pdp.kent.edu/ashtml/asxxxx.htm)
- mzftools>=0.2.2 (http://mzftools.sourceforge.net/wiki/index.php/MZFTools)
Pouziva se linker z asxxxx, takze pred slinkovanim je potreba v Makefile
nastavit jeste cestu ke knihovnam z SDCC (promenna SDCC_LIB_PATH) a nasledne
pomoci "make z80libs" vytvorit potrebny seznam knihoven tak, aby jej
pochroustala nova verze linkeru. Pak uz jen make a v pripade, ze mate pripojenou
unikartu, tak make upl - pokud je v systemu k dispozici utilita USARTshell.
Pokud s tim budete mit problem, tak se klidne ozvete treba pres skype
"ordoz_nb" - pouzivam jej radeji, nez icq.
Radku, diky za zaslane rutiny - ono to na prvni pohled vypada dost
podobne jako to co je v driveru. Ja jsem pri psani kritickych casti
driveru pouzil v podstate zjednoduseny opis funkci z cp/m 1.4 a z HD
cp/m 4.1 a predpokladam. Pokud tedy ty testovaci programky selhaly, tak
jsem zrejme neco blbe opsal. (Predpokladam, ze tvuj radic prokazatelne
pracuje s cp/m 4.1 a testovaci disketa odpovida vyse uvedenym pozadavkum).
Pak se obavam, ze bez toho aniz bych mel na stole funkcni radic ve
kterem si muzu nazivo porovnat rozdily pri praci s cp/m 4.1 a s mym fdc
driverem, tak jsem vicemene s dalsim vyvojem skoncil. Pokud by jsi s tim
chtel zaexperimentovat sam, nebo pokud byl jsi byl tak hodny a zapujcil
mi FDC, tak bych to udelal podle neho. (Navic pokud mas po ruce funkcni
upraveny FDC Horava, tak bych jej docela rad pouzil i jako referencni
radic pro HD upravu toho meho radice :)
Michal
Dne 10.1.2012 13:18, Radek Suk (sharpemupandora.cz) napsal(a):
Zobrazit citovaný text (131 řádků)
>
> Jeste pred usnutim jsem si rikal ze je tam stejne jina chyba, protoze
> to co pisi bude problem az u HD disket ale u DD se to neprojevi - zde
> je dvojnasobny cas. Jinak i posledni verze nefunguje.
>
> Idelani je dat zdrojaky na http://ordoz.com/sharp/fddrv/ a napsat co
> presne pouzivas pro preklad - logicky to delas v Linuxu alespon podle
> souboru. Take bych to cisloval tak napr fddrv7.mzf - ja stejne to
> prejmenovavam na 8 znaku nez to dam do Sharpa a to uz proto abych to
> nepopletl.
>
>
> Michale posilam klicovou cast z MZ DOSu at vidis jak to resim ja.
> Mozna ti to pomuze nebo to muze nekoho inspirovat.
>
> Radek
>
>
> makej: ld de,(z_bufer) ; de-kam davat data
> makej0: push de ; cy-0 input cy-1 output a-kod
> ;
> ld (makej3+1),a ;
> ld a,3h
> out (0fch),a ; znemozni preruseni PIO-a
> di
> in a,(0d8h) ; nulovani INTRQ vystupu radice
> ld de,freemem
> ld hl,10h
> ld bc,3
> ldir ; oblast 10h uloz
> ld l,20h
> ld c,7
> ldir ; oblast 20h uloz
> ex de,hl
> ld hl,kondopameti-1
> jr c,makej1
> ld hl,kondoradice-1
> makej1: dec de
> ld c,7
> lddr ; rutinka pro data z/do radice (oblast
> 10h a 20h)
> ld a,0c3h
> ld (10h),a
> ld hl,makej5
> ld (11h),hl
> im 0
> ld a,(fyztyp)
> bit 3,a
> ld a,1h ; clock - 1 Mhz DD-typ
> jr z,makej2
> ld a,7h ; clock - 2 Mhz HD-typ
> makej2: out (0dfh),a
> pop de
> push de
> ld a,(de) ; pro pripad ze je zapis do radice je nutno
> cpl ; mit uz v acc pripraven bajt
> ld hl,makej4 ; adresa skoku
> ld c,0d8h
> makej3: ld b,0
> ei
> out (c),b ; vysli instrukci
> makej4: jp (hl) ; nekonecna smycka
>
> makej5: pop hl ; vyrovnani zasobniku
> in a,(0d8h) ; prevezmi status
> di
> push de
> xor a
> out (0dfh),a ; clock - 1 Mhz
> ld hl,freemem
> ld de,10h
> ld bc,3
> ldir ; oblast 10h obnov
> ld e,20h
> ld c,7
> ldir ; oblast 20h obnov
> im 2
> ld a,83h
> out (0fch),a ; povol preruseni od PIO-a
> pop de ; kolik bajtu jsem precetl
> pop bc ; kde zacina bufer
> ld hl,(delsek) ; pocet bajtu ktere se maji prenest
> add hl,bc
> and a ; preneslo se spravny pocet bajtu ?
> sbc hl,de ; 0 - ano
> ret
>
> zacdoradice: ; doda 1 bajt do radice
> out (0dbh),a
> inc de
> ld a,(de) ; delka rutinky je 7 bajtu !
> cpl
> ei
> ret
> kondoradice:
>
> zacdopameti: ; prevezme 1 bajt z radice
> in a,(0dbh)
> cpl
> ld (de),a ; delka rutinky je 7 bajtu !
> inc de
> ei
> ret
> kondopameti:
>
> freemem: ds 10 ; sem ulozim co je pri spusteni od adresy 20h a 10h
>
>
> Dne 10.1.2012 8:58, Michal Hučík (sharpemupandora.cz) napsal(a):
>>
>>
>>
>> Dne 10.1.2012 3:01, Radek Suk (sharpemupandora.cz) napsal(a):
>>>
>>>
>>> Proto asi bude stacit zmenit to RETI na RET. Proc vlastne chces delat
>>> RETI, vzdyt je to uplne k nicemu - preci neovladas zadny Z80 periferni
>>> obvod timto prerusenim?
>>>
>>
>> Ahoj Radku, mas pravdu ... divam se do zdrojaku HD cp/m a vidim tam RET
>> a ne RETI ... ja jsem ho tam dal asi proste ze slusnosti ;)
>> Posilam verzi ve ktere je pouze EI a RET, tak jsem zvedavy.
>>
>> Michal
>>
>>
>> ---
>
>
> ---