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

Od: Michal Hučík
Datum: 1.1.2012 10:57
Předmět: Re: Floppy driver



Ahoj Radku,

myslim si, ze dokud ma radic nejaka data, tak bude BUSY - divam se na 
komentovany vypis ROM a vidim, ze je tam cteni z FD realizovano velice 
podobnym zpusobem:

0998                 ;
0999                 ;  Cte data z Floppy disku
1000                 ;
1001                  tu byla ta zakroucena vec FDREAD:
1002  E5A7 CD96E6            CALL   tu byla ta zakroucena vec FDTR?      ; spocti stopu a sektor
1003  E5AA CDFBE5            CALL   tu byla ta zakroucena vec FDPREP     ; priprav disk a registry 
(CALL  tu byla ta zakroucena vec FDSEL - zapne motor a vybere disk)
1004  E5AD CD1BE6    JE5AD:  CALL   tu byla ta zakroucena vec FDTR       ; nastav stopu (ulozi 
stopu do datoveho registru FDC a nastavi stranu)
1005  E5B0 CD28E5            CALL   tu byla ta zakroucena vec FDSEEK     ;  fyzicky ji hledej
1006  E5B3 C290E6            JP    NZ,FDERR2   ;    nezadarilo se
1007  E5B6 CD2BE6            CALL   tu byla ta zakroucena vec FDSEC      ; nastav sektor
1008  E5B9 F3                DI                ; prerusovat se nesmi, proto
1009  E5BA 3E94              LD    A,94H       ;   povolit preruseni
1010  E5BC CD4EE6            CALL  FDSTRT      ; zahajit cteni sektoru
1011  E5BF 0600      JE5BF:  LD    B,0         ; 256 bytu
1012  E5C1 DBD8      JE5C1:  IN    A,(<FDCTR)  ; status
1013  E5C3 0F                RRCA
1014  E5C4 381A              JR    C,JE5E0     ; chyba
1015  E5C6 0F                RRCA
1016  E5C7 38F8              JR    C,JE5C1     ; not ready
1017  E5C9 EDA2              INI               ; precist byte
1018  E5CB 20F4              JR    NZ,JE5C1    ; jeste se cte dalsi



Asi nam to v tuto chvili moc nerekne, ale upravil jsem cteci rutinu tak, 
aby se jeste pred tim return ( -3 ) ulozil FDC_STATUS a pocet 
prenesenych bajtu na adresu 0x5000:

         dbg_sts = FDC_STS;
         * (unsigned char *) 0x5000 = dbg_sts;
         * (unsigned int *) 0x5001 = read_size;
         if ( dbg_sts != 0xff ) {
             retval = -3;        // vsechny status bity ted musi byt nulove!
             break;
         };


Takze bych chtel opet poprosit, jestli by Radek, nebo nekdo, kdo je po 
silvestru ready :) mohl vyzkouset tuto verzi a jestli READ_ADDR skonci 
zase s ERR = 253, tak potom RESET + M a zjistit obsah 3 bajtu na adrese 
0x5000. Dekuju.

Michal

Dne 1.1.2012 6:45, Radek Suk (sharpemu tu byla ta zakroucena vec pandora.cz) napsal(a):
>
>
> Ahoj Michale
>
> Pripada mi to, ze v teto rutine vyskocis kdyz je dokoncen prikaz a 
> Busy jde na nulu. Ale protoze neprevezmes posledni bajt tak DRQ je 
> jeste nahore. Zkus zkontrolovat zda mas read_size=6 ci jen 5.
>
> Radek


Připojené soubory:

fddrv.mzf
 
[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)]