Přejít na obsah
ARCHIVEKArchiv e-mailových konferencí o 8bitových počítačích Archiv Pandory 1999 až 2013

Původní podoba příspěvku

Michal Hučík Zpět na příspěvek

Surová data tak, jak byla v roce 2013 stažena z Pandory (HTML zdroj bez úprav, osobní e-mailové adresy jsou maskované).

<!-------------------------------------------------------------->

<!-------------------------------------------------------------->
<table width="100%"><tr><td align="left" valign="middle"></td><td align=right valign="middle"></td></tr></table><BR>     <font><br/> Takze jsem nahrubo otestoval chovani SIO a tady je dalsi znackovana verze. Prozatim jeste taguju "postaru". Od priste to mozna zacneme znacit nejak chytreji.<br/> <br/> Zmeny a novinky (nektere uz tady byly zmineny, ale chci aby bylo vse pohromade):<br/> <br/> 1.) Je potreba udelat opravu zapojeni signalu RTS a CTS u obvodu FT232RL - viz tento strucny navod <a href="http://ordoz.com/sharp/unicard_files/oprava_PCB_RTSCTS_u_FT232RL/">http://ordoz.com/sharp/unicard_files/oprava_PCB_RTSCTS_u_FT232RL/</a><br/> <br/> 2.) Byl konecne nejak dotazen Ushell, tady je jednou a naposledy jeho kompletni popis, ktery lze jinak nalezt v hlavicce souboru USARTshell.c:<br/> <br/> /*<br/>  *<br/>  * USARTshell bezi na USART1, ktery se pri startu nastavi na 115200 bps.<br/>  *<br/>  * Pokud existuje soubor /unicard/ushelldisabled.cfg, tak je po startu USART1 ihned k dispozici<br/>  * pro Sharpa jako emulovane SIO.<br/>  *<br/>  * Po startu se USARTshell vzdy ozve hlasenim "Unicard - USART Shell" a na dalsim radku <br/>  * oznami reset prostredi "OK:RESET".<br/>  *<br/>  * Chovani USARTshellu je ovlivnitelne ze Sharpa pres API MZFREPO:<br/>  *<br/>  *      cmdUSHELLON     - zapnuti shellu, vypnuti emu_SIO<br/>  *      cmdUSHELLOFF    - vypnuti shellu, zapnuti emu_SIO<br/>  *      cmdUSART1BPS    - nastaveni BPS pro USART1<br/>  *<br/>  * Pri vkladani prikazu je na USART1 vraceno s kazdym znakem jeho echo, takze v terminalu<br/>  * bude videt co se do unikarty pise.<br/>  *<br/>  * Zadost o provedeni vkladaneho prikazu se provede zaslanim znaku s hodnotou<br/>  * mensi jak 0x20 a vetsi, nez 0x00. Po vlozeni takoveho znaku posle unikarta <br/>  * znak '\'n' (0x0d, 0x0a).<br/>  *<br/>  *<br/>  * Prikazy USARTshellu:<br/>  * ====================<br/>  *<br/>  *<br/>  *      \'x00<br/>  *              Jediny binarni prikaz.<br/>  *              Provede reset vstupniho prikazoveho bufferu.<br/>  *              Pokud se cte soubor, nebo adresar, tak bude zavren.<br/>  *              Po vykonani prikazu unikarta odpovi "\'nOK:RESET\'n".<br/>  *<br/>  *      <br/>  *      MKDIR &lt;path&gt;<br/>  *              Vytvorit adresar. Odpoved "OK:MKDIR &lt;path&gt;\'n" pokud se jej podarilo <br/>  *              vytvorit, jinak "ERR:MKDIR &lt;path&gt;\'n".<br/>  *<br/>  *<br/>  *      UNLINK &lt;filepath&gt;<br/>  *              Smazat soubor/adresar. "OK:UNLINK &lt;filepath&gt;\'n" pokud se smazal, <br/>  *              nebo "ERR:UNLINK &lt;filepath&gt;\'n" pri chybe.<br/>  *<br/>  *<br/>  *      FILELIST &lt;path&gt;<br/>  *              Vypise obsah adresare stejnym zpusobem, jakym to dela MZFREPO jen s<br/>  *              tim rozdilem, ze mezi polozkami posila 0x0d, 0x0a.<br/>  *              Pri uspesnem otevreni adresare vraci "OK:FILELIST &lt;path&gt;\'n", pak <br/>  *              nasleduje seznam souboru. Na konci seznamu posle "OK:FILELIST_DONE\'n".<br/>  *              Pokud se nepodarilo adresar otevrit, tak vraci "ERR:FILELIST &lt;path&gt;\'n".<br/>  *              Pokud pri nacitani jednotlivych polozek adresare dojde k chybe,<br/>  *              tak unikarta posle "ERR:READDIR\'n"<br/>  *<br/>  *      READDIR &lt;path&gt;<br/>  *              Precteni polozek adresare v binarni strukture FILINFO.<br/>  *<br/>  *      READ &lt;filepath&gt;<br/>  *              Otevre soubor pro cteni. Vraci "OK:READ &lt;filepath&gt;\'n". Potom nasleduje<br/>  *              jiz v binarnim tvaru jako DWORD pocet bajtu, ktere budou poslany a    <br/>  *              za nimi je poslan obsah souboru. <br/>  *              Po uspesnem odeslani nasleduje hlaseni o uzavreni souboru a CRC32 "OK:CLOSE 0x????????\'n". <br/>  *              Pokud pri cteni souboru dojde k chybe, tak posle "ERR:READ\'n" a dalsi data jiz neposila.   <br/>  *<br/>  *<br/>  *      OPEN &lt;filepath&gt;<br/>  *      NEW &lt;filepath&gt; <br/>  *              Otevre soubor pro zapis. NEW - zaklada vzdy novy soubor, pokud<br/>  *              jiz existuje, tak vrati "ERR:NEW &lt;filepath&gt;\'n", jinak "OK:NEW &lt;filepath&gt;\'n".<br/>  *              Pri pouziti OPEN bude existujici soubor prepsan, pokud neexistuje, tak<br/>  *              se vytvori novy a nasleduje OK:, nebo ERR:.<br/>  *              Po uspesnem otevreni souboru prejde vstup USARTshellu do binarniho rezimu<br/>  *              ve kterem ocekava jako DWORD pocet bajtu, ktere budou do souboru zapsany.<br/>  *              Po prijeti techto 4 bajtu unikarta posle HEX ASCII hodnotu cisla, ktere  <br/>  *              prijala, napr. "OK:SIZE 0xdeadbeef\'n". Dalsi bajty uz jsou ulozeny do    <br/>  *              otevreneho souboru.<br/>  *              Po uspesnem prenosu oznami uzavreni souboru a CRC32 "OK:CLOSE 0x????????\'n".<br/>  *              Pokud pri zapisu dojde k chybe, tak unikarta posle "ERR:WRITE\'n" a<br/>  *              ukonci binarni rezim.<br/>  *              Pokud dele nez 2 sekundy neprijdou zadna data, tak unikarta soubor<br/>  *              uzavre a prejde zpet do prikazoveho rezimu s hlasenim "ERR:DATA_TIMEOUT\'n".<br/>  *<br/>  *<br/>  *      FDDREMOUNT &lt;0..3&gt;<br/>  *              Odmountuje prislusnou FD mechaniku a zavola remount, ktery se provede<br/>  *              standardne podle obsahu /unicard/fd&lt;0..3&gt;.cfg<br/>  *<br/>  *      DATE<br/>  *      DATE YYYY-MM-DD HH:MM:SS<br/>  *              Bez parametru vrati aktualni cas. Pokud jsou uvedeny parametry,<br/>  *              tak se pokusi podle nich nastavit datum a cas v RTC a vrati takovy<br/>  *              cas, jaky se po teto zmene vyskytuje v RTC.<br/>  *<br/>  *<br/> */<br/> <br/> <br/> <br/> 3. Byl pridan modul emu_SIO, ktery zpristupnil pro Sharpa USART1. Pro spravnou funkci SIO je potreba aktualizovat firmware arbitra CPLD XC9356.<br/> Zde je popis chovani a obsluhy, ktery je mozne nalezt v hlavicce souboru emu_SIO.c:<br/> <br/> /*<br/>  *<br/>  * SIO data port:               0x52<br/>  * SIO cmd/status port:         0x53<br/>  *<br/>  *<br/>  * Rychlost portu v bps se nastavuje pres API MZFREPO jako dword.<br/>  *<br/>  *<br/>  * Status:<br/>  * =======<br/>  *              0. bit - nastaven oznamuje data v prijimacim bufferu<br/>  *<br/>  *              1. bit - sdeluje aktualni stav signalu CTS<br/>  *<br/>  *              2. bit - oznamuje volne misto v odesilacim bufferu<br/>  *<br/>  *              3. bit - <br/>  *<br/>  *              4. bit - 1 = aktivni RX interrupt<br/>  *<br/>  *              5. bit - 1 = aktivni TX interrupt<br/>  *<br/>  *              6. bit - 1 == error, RX data lost - doslo k pokusu o zapis do RX bufferu<br/>  *                       ve kterem uz nebylo v tu chvili misto<br/>  *                       Po vyskytu chyby zustane bit nastaven az do RESET, nebo ERRRES.<br/>  * <br/>  *              7. bit - 1 == error, TX data lost - doslo k pokusu o zapis do TX bufferu<br/>  *                       ve kterem uz nebylo v tu chvili misto<br/>  *                       Po vyskytu chyby zustane bit nastaven az do RESET, nebo ERRRES.<br/> */<br/> <br/> /*<br/>  *<br/>  * Prikazy:<br/>  * ========<br/>  *<br/>  * Pozn.: Horni 2 bity prikazu se pouzivaji pro rizeni internich stavu WR,RD a dalsi bajt registru.<br/>  * Prikaz je nyni dekodovan jako 4 bitove cislo podle bitu 0 az 3. <br/> */<br/>   <br/> #define siocmdRESET     0x00<br/> /*<br/>  *      RESET   Provede reset portu, tzn.: zlikviduje aktualni obsah prijimaciho i <br/>  *              odesilaciho bufferu,  vynuluje registry RXINT a TXINT, zakaze <br/>  *              generovani interruptu EINT = 0, zapne RTS a CTS rizeni toku.  <br/>  *              Vynuluje citac ztracenych bajtu a tim i bity 6 a 7 ve statusu.<br/> */<br/>   <br/> #define siocmdERRRES    0x01<br/> /*<br/>  *      ERRRES  Vynuluje citac ztracenych bajtu a tim i bity 6 a 7 ve statusu.<br/> */<br/>   <br/> #define siocmdERRGET    0x02<br/> /*      ERRGET  Vrati 2 bajty - stav citace ztracenych bajtu pro RX a TX. Pokud je <br/>  *              pocet ztracenych bajtu vetsi, nez 255, tak vraci 0xff.<br/> */<br/>   <br/> #define siocmdEINT      0x03<br/> /*<br/>  *      EINT    Povoli generovani interruptu, EINT = 1.<br/> */<br/>   <br/> #define siocmdDINT      0x04<br/> /*<br/>  *      DINT    Zakaze generovani interruptu, EINT = 0.<br/> */<br/>   <br/> #define siocmdRXINT     0x05<br/> /*<br/>  *      RXINT   Nasledujicim zapisem se nastavi minimalni pocet bajtu, ktere musi byt <br/>  *              v prijimacim bufferu, aby byl vyvolan interrupt. Nulova hodnota zakazuje<br/>  *              generovani interruptu podle stavu prijimaciho bufferu.<br/>  *              Pokud po prikazu nasleduje cteni, tak obdrzime hodnotu, ktera je nyni v RXINT.<br/> */<br/>   <br/> #define siocmdTXINT     0x06<br/> /* <br/>  *      TXINT   Nasledujicim zapisem se nastavi minimalni pocet volnych bajtu, ktere musi byt <br/>  *              k dispozici v odesilacim bufferu, aby byl vyvolan interrupt. Nulova hodnota zakazuje<br/>  *              generovani interruptu podle stavu odesilaciho bufferu.<br/>  *              Pokud po prikazu nasleduje cteni, tak obdrzime hodnotu, ktera je nyni v TXINT.<br/> */<br/>   <br/> #define siocmdRXBUF     0x07<br/> /*<br/>  *      RXBUF   Naslednym ctenim zjistime aktualni pocet bajtu v prijimacim bufferu.<br/>  *              Prectenim dalsiho bajtu obdrzime celkovou velikost prijimaciho bufferu - 1.<br/> */<br/>   <br/> #define siocmdTXBUF     0x08<br/> /*<br/>  *      TXBUF   Naslednym ctenim zjistime aktualni pocet volnych bajtu v odesilacim bufferu.<br/>  *              Prectenim dalsiho bajtu obdrzime celkovou velikost odesilaciho bufferu - 1. <br/> */<br/>   <br/> #define siocmdRTS       0x09<br/> /*<br/>  *      RTS     Zapisem dalsiho bajtu nastavime rizeni toku RTS 0 - vypnuto, cokoliv jineho zapnuto.<br/>  *              Ctenim zjistime aktualni stav tohoto nastaveni.<br/>  *              Po vypnuti eizeni toku prejde signal RTS do urovne '1'.<br/> */<br/>   <br/> #define siocmdCTS       0x0a<br/> /*<br/>  *      CTS     Zapisem dalsiho bajtu nastavime rizeni toku CTS 0 - vypnuto, cokoliv jineho zapnuto.<br/>  *              Ctenim zjistime aktualni stav tohoto nastaveni.<br/> */<br/>   <br/> #define siocmdRTSBIT    0x0b<br/> /*<br/>  *      RTSBIT  Prectenim bajtu zjistime aktualni stav signalu RTS. Pokud je rizeni toku<br/>  *              pomoci RTS vypnuto, tak potom zapisem muzeme uroven tohoto signalu zmenit.<br/>  *              Pri zapnutem rizeni toku pres RTS bude zapis ignorovan.<br/> */<br/>   <br/> <br/> 4. Do MZFREPO byl pridan prikaz pro zjisteni stavu interruptu volaneho z unikarty:<br/> <br/> #define cmdINTCALLER    0x11    // Sdeli kdo je volajicim interruptu. Kody volajicich periferii jsou definovany v mzint.<br/>                                 //<br/>                                 // Vystup:      1B - mzintFLAG<br/> <br/> V tuto chvili mame v mzint definovany tyto 3 ID periferii, ktere mohou volat interrupt:<br/> <br/> #define mzintFDC        (1 &lt;&lt; 0)<br/> #define mzintSIORX      (1 &lt;&lt; 1)<br/> #define mzintSIOTX      (1 &lt;&lt; 2)<br/> <br/> <br/> 5. V souvislosti s Ushellem a SIO byly do MZFREPO pridany tyto prikazy:<br/> <br/> // USART:<br/> #define cmdUSHELLON     0x70    // Zapne USARTshell, vypne emu_SIO.<br/> <br/> #define cmdUSHELLOFF    0x71    // Vypne USARTshell, zapne emu_SIO.<br/> <br/> #define cmdUSARTBPS     0x72    // Nastaveni BPS pro USART1.<br/>                                 //<br/>                                 // Vstup:       DWORD - rychlost<br/> <br/> <br/> Na mem webu je nyni aktualni verze .bin s FW pro STM32. Stejne tak jsem tam nahral i .jed a .svf s FW pro CPLD.<br/> Zdrojove kody a Linuxovy komunikacni program pro praci s Ushellem naleznete na svn.<br/> <br/> Michal<br/> <br/> </font>