Konference: Počítač SHARP MZ-800 a emulátory
Od: | Martin Lukasek |
Datum: | 30.10.2011 22:18 |
Předmět: | Re: Unikarta FW rev.60 |
Re: Unikarta FW rev.60: |
Ahoj,
tak jsem se konecne dostal alespon k Ushell. Znovu jsem to preklopil na PC a tentokrat jsem si dal praci, abyh do toho nezasahoval moc zivelne a dalo se to kdykoli
aktualizovat, kdyz vydas novejsi verzi.
V podstate se lisi zacatek, kde otevirani toho serialu je fakt na Win a LINUX uplne jine. Muzeme to zavrapovat do nejake init funkce nebo udelat ifdefama. Pak jsem si napsal
par funkci, v podstate je potreba, abys obdobne zabalil read a write, ktery pouzivas, delal jsem to tak, abych se prizpusobil spis ja, takze v zasade staci ve Tvem zdrojaku
prejmenovat.
void ClosePort ( HANDLE pd, struct termios *oldtio )
void ReadResult ( HANDLE pd, char *result, unsigned char result_len )
BOOL WriteSer( HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite )
BOOL ReadSer( HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead )
Jinak jsem se s par drobnostmi docela natrapil, za prve polynom, ktery pouzivas na CRC je jiny nez ktery pouzivam ja a ktery pouzivaji standardni PC programy, takze mi chvili
trvalo, nez jsem pochopil, ze mi to ani vyjit nemuze. Jsem natvrdlej. Nakonec jsem zvolil nejjednodusii reseni a vzal jsem si zdrojaky na CRC32 z STM.
Dalsi legrace byla s prenosem. Cteni v pohode okolo 11,5 kB/s, ale zapis cca 1 kB/s. Pomerne rychle jsem prisel na to, ze to dela ten zapis po bajtu. Zajimavy je, ze u cteni
to nevadi. Jenze, kdyz jsem to zacal zapisovat po 128 bajtech, tak to nefungovalo spolehlive, padalo to, timeoutovalo, psalo blby data do souboru. Po par hodinach zkoumani
jsem prisel na uplne jednoduchou vec. Po kazdem zapisu na serial je potreba na chvili vratit cas systemu (Sleep(0)) a slape to jako vino. Takze jsem upravil zapisovou rutinu,
obodbne jako cteni. Vsechno flaknu do pameti a pak vysypu na serial jako x 128 bajtovych bufferu + zbytek. Rychlost zapisu cca 9.5 kB/s. To uz je docela ok.
Podle toho, jak se vypisuji ty tecky pri cteni a zapisu je videt, ze se cteni bufferuje cca po 2 kB, kdyzto zapis se hned a plynule odesila.
Jo, jeste jsem upravil na zacatku to vypisovani helpu, pri zadnem argumentu to nevypise help, ale vriti se to do otevreni portu a to mi na Win pada, kdyz sahnu na neexistujici
argument. Taky se neodalokovava RAM alokovana malloc(), ale je pravda, ze ten program pak proste skonci, takze co uz, ale tak nejak z principu to tam asi dodelam ;-) Jo a samo
se nepocita s mnohamegabajtovyma souborama, ktery by se nemusely vlezt do RAM, ale to asi nikdo pres seriak posilat nebude ;-)))) To jen, ze neni osetrenej ten malloc().
Taky mne napadlo jedno drobne vylepseni UShellu. Nechces tam dodelat VER prikaz? Ja si to obcas testuju pres Putty, idealne po nahrani noveho fw a tak bych hned vedel, ze je
to ok. Monza by stacilo jen prihodit verzi do hlasky po resetu.
Ve finale jsem chtel vyzkouset opravdovy serial a nejen USB, ale to mi teda neslo. Za prve je trochu zrada na Unikarte, asi jsem pouzil spatny konektor, ale je hodne vzadu od
kraje desky, takze mi tam nejde poradne zastrcit kabel s koncovkami. Tak jsem to pres redukce prodlouzil, ale ani tak mi to neslape. Mozna mam blby kabel, budu to muset
premerit. Taky muzu mit nejakou zradu na portu v PC. Nejlepsi co se mi podarilo dostat je pri resetu Unikarty par paznaku. Zkousel nekdo normalni serial na Unikarte?
Spustitelny EXE je na http://www.8bity.cz/files/Sharp/UniUSARTshell_exe.zip.
Zdrojaky se daji stahnout z http://www.8bity.cz/files/Sharp/UniUSARTshell_src.zip.
Krasny den, Martin.
Ostatní příspěvky vlákna:
[2011/1 (52)] [2011/2 (9)] [2011/3 (2)] [2011/4 (9)] [2011/5 (8)] [2011/7 (1)] [2011/8 (40)] [2011/9 (146)] [2011/10 (116)] [2011/11 (29)] [2011/12 (110)]