Konference: Počítač SHARP MZ-800 a emulátory

Od: Michal Hučík
Datum: 11.1.2012 15:41
Předmět: Re: Floppy driver


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 (sharpemu tu byla ta zakroucena vec pandora.cz) napsal(a):
>
> 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 (sharpemu tu byla ta zakroucena vec pandora.cz) napsal(a):
>>
>>
>>
>> Dne 10.1.2012 3:01, Radek Suk (sharpemu tu byla ta zakroucena vec pandora.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
>>
>>
>> ---
>
>
> ---

 
[2012/1 (125)] [2012/2 (34)] [2012/3 (57)] [2012/4 (46)] [2012/5 (40)] [2012/6 (44)] [2012/7 (64)] [2012/8 (57)] [2012/9 (32)] [2012/10 (55)] [2012/11 (25)] [2012/12 (63)]


[1999 (1)] [2000 (168)] [2001 (733)] [2002 (459)] [2003 (654)] [2004 (224)] [2005 (105)] [2006 (182)] [2007 (201)] [2008 (294)] [2009 (363)] [2010 (782)] [2011 (522)] [2012 (642)] [2013 (442)]