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

Zpět na zprávu

Celé vlákno · 2 zprávy

Re: [SharpMZ] Stare projekty (Unikarta) + mk3

Martin Lukasek <martin.lukasek@[doména skryta]> SHARP MZ-800

Super, kdyby slo to CR+LF poresti nejakym nastavenim, bylo by to bezva. Na druhou stranu, poprat se s tim da nastavenim vetsiny terminalu. Bohuzel, ne vsechny to umi. Na Linuxu je problem, kdybys posilal oba znaky? Bez nastaveni terminalu telnet na Woknech vypada takto

 

 

Kdyz budes mit nejakou dalsi betaverzi, tak posli, rad vyzkousim. Jeste by mozna bylo fajn, kdyby sel nastavit timeout, ted mi to prijde docela rychle, zvlast kdyz clovek dela pokusy a necha to chvili trcet.

 

To API pro DNS resolver mi prijde dost detailni, je otazka, zda je to vubec potreba. Aby Ti brzo nedosly cisla prikazu ;-) Treba ty Lookupy nebo ta prace s implicitni domenou mi z pohledu aplikace na Sharpovi neprijdou dulezite.

 

Hezky vecer

 

Martin

 

 

 

From: Michal Hučík (sharpemupandora.cz) [mailto:ordoz[doména skryta]]
Sent: Monday, November 25, 2013 10:38 AM
To: Konference "Počítač SHARP MZ-800 a emulátory"
Subject: Re: Stare projekty (Unikarta) + mk3
Importance: Low

 


Martine, je super, ze mam konecne nejakou zpetnou vazbu o tom, jak novy firmware funguje na ostatnich Unikartach.

S temi CR a LF je to docela mrzeni a myslim, ze se k tomu jeste budu muset vratit a nejak to umravnit. Zrejme by si to mel kazdy konfigurovat primo na sve Unikarte a to samostatne jak pro Ushell rs232/tcp, tak i pro debugovaci vypisy.
Take jsem premyslel, zda tam nenaimplementovat i nejaky debug stream, ktery by mi ty ladici informace posilal treba pres UDP nekam do terminalu.

Momentalne mam hotovou aplikacni vrstvu pro DHCP, HTTP GET, DNS resolver a FTP klient. O vikendu jsem zacal psat a testovat API. Je to zatim jen tak cvicne a je velmi pravdepodobne, ze se to zmenni. Tady je na ochutnavku aktualni popis API pro DNS resolver:


DNS Resolver:
//
// Pro DNS dotazy mame v multitasku k dispozici nekolik vlaken.
// Kazde vlakno se muze nezavisle dotazovat bud na domenove jmeno, nebo na IP adresu.
//
// Vlozeni dotazu probiha prikazem cmdRLSVQUERYA, nebo cmdRLSVQUERYN. Po jeho uspesnem vlozeni
// obdrzime cislo vlakna, ktere vyrizuje nas dotaz. Pokud dotaz nelze spustit, tak obdrzime
// hodnotu -1 (0xff) pokud DNS resolver nebezi, nebo -2 (0xfe) pokud neni k dispozici zadne volne vlakno.
//
// U kazdeho jednotliveho dotazu se nastavuje jeho interrupt mode. Jestlize ma vlakno v interrupt mode
// hodnotu 1, tak jakmile je tento dotaz zodpovezen, nebo ukoncen s chybou, tak Unikarta posle do Sharpa interrupt.
// Zaroven hodnota interrupt mode 1 zajisti uzamceni vlakna proti tomu, aby bylo prepsano jinym dotazem drive,
// nez bude precten vysledek.
//
// Precteni vysledku vlakna se provede prikazem cmdRLSVTHREAD. Tento prikaz deaktivuje interrupt
// vytvoreny timto vlaknem a odemkne vlakno pro dalsi pouziti.
//
// Vlakna u kterych neni nastaven interrupt mode mohou byt okamzite po dokonceni dotazu opet pouzita.
//
//
#define cmdRSLVSTRT     0x80    // Zapne, nebo prekonfiguruje DNS resolver.
                                //
                                // Vstup:       4B - IP adresa DNS serveru (a.b.c.d):
                                //              1. a
                                //              2. b
                                //              3. c
                                //              4. d
                                //
                                // Pokud jiz resolver bezi, tak se pouze zmeni adresa DNS serveru.
                                // Jestlize pri teto zmene prave probihaly nejake dotazy, tak samozrejme skonci jako STATE_ERROR.


#define cmdRSLVSTOP     0x81    // Vypne DNS resolver.


#define cmdRSLVGCFG     0x82    // Precteni konfigurace DNS resolveru.
                                //
                                // Vystup: 4B - ipadresa
                                //
                                // Pokud nameserver nebezi (viz cmdRSLVSTATUS), vraci 00 00 00 00


#define cmdRSLVGDOMAIN  0x83    // Precteni implicitni domeny.
                                //
                                // Vystup: string, 0x0d

#define cmdRSLVSDOMAIN  0x84    // Nastaveni implicitni domeny.
                                //
                                // Vstup: string, 0x0d

#define cmdRSLVSTATUS   0x85    // Sdeli status DNS resolveru:
                                //
                                // Vystup:
                                //
                                //      1B - pocet vlaken,
                                //           nebo 0x00 pokud DNS resolver nebezi
                                //     
                                //      Pokud 1. bajt nebyl 0x00, tak nasleduje tabulka ve ktere je kazde vlakno zastoupeno jednim bajtem.
                                //      Jsou razeny postupne od vlakna s ID 0 az po posledni.
                                //
                                //      0. - 3. bit:
                                //              0 - STATE_UNUSED
                                //              1 - STATE_NEW
                                //              2 - STATE_ASKING
                                //              4 - STATE_DONE
                                //              8 - STATE_ERROR
                                //
                                //      7. bit - interrupt mode
                                //              Pokud je bit nastaven, tak to znamena, ze po vyrizeni vlakna (STATE_DONE, nebo STATE_ERROR)
                                //              bude poslan do Sharpa interrupt.


#define cmdRLSVQUERYA   0x86    // Zadost o preklad jmena na IP adresu (query):
                                //
                                // Vstup:
                                //      1B - interrupt mode:
                                //              0x00 - rezim interruptu je pro tento dotaz vypnuty
                                //              0x01 - jakmile prejde vlakno s timto dotazem do STATE_DONE,
                                //                      nebo STATE_ERROR, tak posle do Sharpa interrupt
                                //
                                //      string. 0x0d - domenove jmeno (pokud je v resolveru nakonfigurovana
                                //                      implicitni domena, tak staci pouzit jen prvni cast domenoveho
                                //                      jmena a resolver si za nej sam prida tecku a nazev domeny)
                                //
                                // Vystup: 1B cislo vlakna, ktere vyrizuje tento dotaz, nebo:
                                //      0xff - resolver nebezi

#define cmdRLSVQUERYN   0x87    // Zadost o preklad IP adresy na jmeno (query):
                                //
                                // Vstup:
                                //      1B - mode:
                                //              1. bit je nastaveni interruptu
                                //                      0 - interrupt neni aktivovan
                                //                      1 - po dokonceni posleme do Sharpa interrupt
                                //      4B - IP adresa
                                //
                                // Vystup: 1B cislo vlakna, ktere vyrizuje tento dotaz, nebo:
                                //      0xff - resolver nebezi
                           
                           
#define cmdRLSVTHREAD   0x88    // Precte vlakno z resolveru.
                                //
                                // Vstup - 1B cislo vlakna                               
                                //
                                // Vystup:
                                //      1B status (viz. cmdRSLVSTATUS), nebo:
                                //              0xff - resolver nebezi
                                //              0xfe - pokud cislo vlakna neni validni
                                //
                                //      Nasledujici data budou validni jen v pripade, ze 1. bajt mel hodnotu STATE_DONE.
                                //
                                //      1B typ dotazu:
                                //              0x00 - podle jmena se resolvovala IP
                                //              0x01 - podle IP se hledalo jmeno
                                //
                                //      4B - IP adresa
                                //
                                //      1B - delka domenoveho jmena + 0x0d
                                //
                                //      string, 0x0d - domenove jmeno
                                //
                                // Pokud byl pri dotazu u vlakna pozadovan interrupt, tak se timto prikazem pro dane vlakno deaktivuje.
       
       
#define cmdRLSVLOOKA    0x89    // Lookup - prohledne jiz uspesne dokoncene thready, zda se se v nich nenachazi preklad domenoveho jmena na IP adresu
                                //
                                // Vstup:
                                //
                                //      string. 0x0d - domenove jmeno (pokud je v resolveru nakonfigurovana
                                //                      implicitni domena, tak staci pouzit jen prvni cast domenoveho
                                //                      jmena a resolver si za nej sam prida tecku a nazev domeny)
                                //
                                // Vystup: 1B - odpoved, zda byl lookup uspesny, nebo:
                                //      0xff - resolver nebezi
                                //
                                //              0 - nenalezeno
                                //              1 - nalezeno 
                                //
                                //      Pokud bylo nalezeno, tak nasleduji 4B s IP adresou.
                           
                                                     
#define cmdRLSVLOOKN    0x8A
                                // Lookup - prohledne jiz uspesne dokoncene thready, zda se se v nich nenachazi preklad IP adresy na jmeno.
                                //
                                // Vstup:
                                //
                                //      4B - IP adresa
                                //
                                // Vystup:
                                //      1B - delka domenoveho jmena, nebo
                                //              0x00 - nenalezeno
                                //
                                //      string, 0x0d
                           
                           
#define cmdRLSVIP2TXT   0x8b    // Prevod IP adresy na text - "192.168.0.1\x0d"
                                //
                                // Vstup: 4B - IP adresa
                                //
                                //
                                // Vystup:
                                //
                                //      1B delka retezce
                                //      string, 0x0d
                                //


#define cmdRLSVTXT2IP   0x8c    // Prevod textu - "192.168.0.1\x0d" na IP.
                                //
                                // Vstup: string + 0x0d
                                //
                                //
                                // Vystup:
                                //
                                //      1B - uspesnost prevodu
                                //              0 - nepovedlo se
                                //              1 - povedlo se a nasleduje IP
                                //
                                //      4B - IP adresa




Dne 25.11.2013 0:45, Martin Lukasek (sharpemupandora.cz) napsal(a):

Cau chlapi,

 

tak jsem se konecne dostal k otestovani sitovani na Unikarte a vse e mi slape na obou kartach v pohode. Na puvodni Michalove a Vaskove Unikarte chodi shell, LANINFO, NETSTAT, APR, LISTEN a samozrejme pinga ;-) Naprogramovani pres Flash Loader slo naprosto hladce. Jak Michal pise, sviti jen jedna LEDka. Asi bych i uvital CR+LF misto jen LF, protoze jedu na widlich, ale to je otazka na flame ;-) Mam to zatim bez propojky z ENC signal /INT do pinu c.52 v STM32 (PC11) a slape to v pohode. Ushell pro Win jsem zatim neupravoval, ale urcite to udelam.

 

Na Bohousove unikarte je zatim jen LANINFO, ale zase je navic web server, kde je super featurka zobrazeni obrazovky ;-) To je moc pekne. Co takhle live stream i s ovladanim klavesnice, proste Remote Console? Ehmm, jo, vim, uz mlcim ;-)

 

Uz se tesim na nejakou tu API podporu. S temi sitovymi hrami bych nebyl tak skepticky. Urcite neco osobne zkusim napsat.

 

Krasny vecer

 

Martin

 


---
POZOR! Provoz systému Pandora.cz bude k 30. listopadu 2013 ukončen.
Více informací: http://goo.gl/b99cI

 


---
POZOR! Provoz systému Pandora.cz bude k 30. listopadu 2013 ukončen.
Více informací: http://goo.gl/b99cI

Re: [SharpMZ] Stare projekty (Unikarta) + mk3

Michal Hucik - ORDOZ <ordoz@[doména skryta]> SHARP MZ-800


Ahoj Martine,

abych rekl pravdu, tak to pridani \r pred kazdy \n neni v pripade TCP Ushellu zrovna nejjednodussi ... Obe varianty shellu, RS232 i TCP, pouzivaji stejne jadro a stejne konstanty  - rozumej textove retezce z FLASH. U RS232 celkem jednoduse pridavame CR pred kazdy LF ve vystupni funkci sprintf(), ktera zpracuje retezec znak po znaku a ty pak odesila rovnou na seriovy vystup.
V pripade TCP verze shellu vsak ty textove data odchazeji trochu jinou metodou. Nejlepsim resenim by tedy bylo bud jejich "nastrihani" tak, aby sel ven kazdy radek textu a kazda koncovka jednim samostatnym packetem, coz je docela neekonomicke. Nebo vytvorenim dalsiho bufferu do ktereho by se ty texty nejprve poskladaly ve spravnem formatovani - na coz zase v pripade teto Unikarty nemame pameti na rozdavani. V pripade kratkych textu ted odesilame obsah packetu primo z FLASH a v pripade, ze jde o poskladanou odpoved, tak pouzivame univerzalni IO buffer Ushellu. To znamena, ze napr. LANINFO jsem si tedy nejprve rozepsal a spocital vsechny mozne kombinace delky vsech variabilnich textu a pak jsem to natvrdo poskladal tak, aby jsme se vzdy vesli do maximalni delky toho IO bufferu. Takze napr. pridanim dalsiho znaku ke kazdemu radku ve vystupu z LANINFO by jsme museli cely prikaz preskladat tak, aby se nam tam zase vesel. Ne ze by se jednalo o svetoborny problem, nicmene do jeho finalniho vyreseni se mi ted moc nechce :)

Chtel jsem ti navrhnout at pouzivas putty ve kterem si lze zapnout pridavani CR znaku, ale byl jsem docela prekvapeny, jak je ve win7 telnet v putty priserne pomaly (at uz pridava, nebo nepridava CR). Je zajimave, ze kdyz se v tom samem putty pripojim pres ssh nekam do linuxu a udelam telnet z nej, tak uz to zase beha krasne rychle. Vyrazne rychlejsi uz byl ve windows telneti klient od Microsoftu, ktery zrejme pouzivas, ale taky to nebyla zadna velka slava :(

Co se tyka auto disconnect timeoutu, tak asi nejlepsi bude naimplementovat do shellu prikaz, kterym si bude mozne zmenit jeho hodnotu, nebo jej uplne vypnout. Ten auto disconnect je tam hlavne proto, ze kdyz je na Ushellu poveseny jeden klient, tak uz se tam nepripoji zadny dalsi. Ja tady mam bezne otevreno treba 20 xtermu a docela rychle zapominam, ze jsem v nekterem neco nechal otevrene :) Pro debugovani pouzivam RS232. Prenosy souboru na SD provadim pres TCP shell - je fajn, ze kvuli tomu uz ted nemusim zavirat terminal s debugovacimi vypisy.

Dalsi testovaci verzi firmware se chystam vydat co mozna nejdrive.

BTW: tato nova konference uz ma v tuto chvili 41 prihlasenych ucastniku. Nekteri dokonce ani nebyli prihlaseni na pandore - alespon ne pod stejnou mailovou adresou. Musim rict, ze kdyz sem ted pisu o tom jak neco programuju, tak mam i trochu tremu :)

S pozdravem -  
    Michal Hucik


Dne 26.11.2013 20:56, Martin Lukasek napsal(a):

Super, kdyby slo to CR+LF poresti nejakym nastavenim, bylo by to bezva. Na druhou stranu, poprat se s tim da nastavenim vetsiny terminalu. Bohuzel, ne vsechny to umi. Na Linuxu je problem, kdybys posilal oba znaky? Bez nastaveni terminalu telnet na Woknech vypada takto

 

 

Kdyz budes mit nejakou dalsi betaverzi, tak posli, rad vyzkousim. Jeste by mozna bylo fajn, kdyby sel nastavit timeout, ted mi to prijde docela rychle, zvlast kdyz clovek dela pokusy a necha to chvili trcet.

 

To API pro DNS resolver mi prijde dost detailni, je otazka, zda je to vubec potreba. Aby Ti brzo nedosly cisla prikazu ;-) Treba ty Lookupy nebo ta prace s implicitni domenou mi z pohledu aplikace na Sharpovi neprijdou dulezite.

 

Hezky vecer

 


Přílohy

  • soubor-1
    image/png · 43 kB · 677 x 342 px