<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=22&amp;t=16741&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-11-08T21:21:32+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=22&amp;t=16741&amp;mode</id>
<entry>
<author><name><![CDATA[xbary]]></name></author>
<updated>2016-11-08T21:21:32+01:00</updated>
<published>2016-11-08T21:21:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16741&amp;p=174172#p174172</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16741&amp;p=174172#p174172"/>
<title type="html"><![CDATA[Re: Pseudointerpreter poleceń]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16741&amp;p=174172#p174172"><![CDATA[
<div class="quotetitle">SylwekK napisał(a):</div><div class="quotecontent"><br />Dokładnie - copy Rom do Ram, przełączenie pamięci i można było szaleć do woli. A w ogóle to zająłem się asemblerem bo chciałem nieśmiertelność w grach robić. Po pierwszej trafnej zamianie LDA #$03 na LDA #$FF potoczyło się już lawinowo... Nie miałem w kolekcji gry, która by nie była zhakowana <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> chociaż przyznam, że nad jedną to chyba tydzień albo dwa przesiedziałem, a główny problem to było obejście autostartu po załadowaniu i zatrzymanie po rozpakowaniu... dało się <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /><br /></div><br /><br />heh nieźle , to podobne wygi jesteśmy <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> jak assembler był w jednym palcu, to dogrzebałem się do dwóch albo trzech muzyczek nie używanych w Super Mario Bros na kasecie (pirat że aż śmierdzi) później okazało się że plansze jakieś krótkie , a jeszcze później powstał edytor plansz a wszystko trzepane w assemblerze w monitorze <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> hehe a cała kaseta nowych boulder dashy z etapami i grafiką swoją <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />to było MEGA <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=447">xbary</a> — 8 lis 2016, o 21:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2016-11-08T21:08:29+01:00</updated>
<published>2016-11-08T21:08:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16741&amp;p=174169#p174169</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16741&amp;p=174169#p174169"/>
<title type="html"><![CDATA[Re: Pseudointerpreter poleceń]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16741&amp;p=174169#p174169"><![CDATA[
Dokładnie - copy Rom do Ram, przełączenie pamięci i można było szaleć do woli. A w ogóle to zająłem się asemblerem bo chciałem nieśmiertelność w grach robić. Po pierwszej trafnej zamianie LDA #$03 na LDA #$FF potoczyło się już lawinowo... Nie miałem w kolekcji gry, która by nie była zhakowana <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> chociaż przyznam, że nad jedną to chyba tydzień albo dwa przesiedziałem, a główny problem to było obejście autostartu po załadowaniu i zatrzymanie po rozpakowaniu... dało się <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 8 lis 2016, o 21:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xbary]]></name></author>
<updated>2016-11-08T20:52:59+01:00</updated>
<published>2016-11-08T20:52:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16741&amp;p=174166#p174166</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16741&amp;p=174166#p174166"/>
<title type="html"><![CDATA[Re: Pseudointerpreter poleceń]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16741&amp;p=174166#p174166"><![CDATA[
<div class="quotetitle">SylwekK napisał(a):</div><div class="quotecontent"><br />Projekt mimo prostoty warty uwagi (już gdzieś się natknąłem na podobne rozwiązania). Są sytuacje gdzie zamiast przeprogramowywać uC w jakimś sterowniku zarządzającym procesem mechanicznym nawet operator, który nie ma pojęcia o programowaniu w prosty sposób pisze skrypt i gotowe - maszyna inaczej działa. Interpretery to w ogóle ciekawa sprawa. Sam lata temu rozbudowywałem i tak świetny jeżyk BASIC jaki posiadał Commodore+4, o dodatkowych kilkanaście opcji, które ułatwiały i drastycznie przyspieszały programy pisane w tym języku, np. wyszukiwanie słowa w liniach DATA - READ był strasznie mozolny, a procedura napisana w asemblerze robiła to błyskawicznie przeszukując kilkaset linii w ułamku sekundy.<br /></div><br /><br />Ja nawet popełniłem na C64 wczytywane rozszerzenie podstawowego basica o funkcje okienek w trybie tekstowym oraz obsługa myszki sterowanej joystickiem i kilka gadgetów buttonów itd:) ehh to były czasy. A pomyśleć że jedne GUi okienkowe co się widziało to było zauważone w gazecie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> na zdjęciu. Pamiętam że napisałem notatnik , kalkulator i edytor znaków <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />---<br /><br /><br />Gdzieś widziałeś taki projekt?, ja też widziałem coś takiego.<br /><br />Wracając do C64 , pewnie ktoś by sobie pomyślał , gdzie w takiej małej pamięci interpreter Basica i do tego rozszerzany, pomimo że sam interpreter był w pamięci ROM <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> ... pamiętam że robiło się taki myk: kopiowało się pamięć od $a000 do $c000 z ROM do RAM <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> następnie wyłączało się ROM <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> i i już można było tzw inż.wsteczną coś dopisać w monitorze-debugerze języka maszynowego <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=447">xbary</a> — 8 lis 2016, o 20:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Situs]]></name></author>
<updated>2016-11-06T18:19:49+01:00</updated>
<published>2016-11-06T18:19:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16741&amp;p=173961#p173961</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16741&amp;p=173961#p173961"/>
<title type="html"><![CDATA[Re: Pseudointerpreter poleceń]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16741&amp;p=173961#p173961"><![CDATA[
if(czas &amp;&amp; ochota)<br />{<br /> dodam więcej poleceń i pomyślę nad if ;<br />}<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14339">Situs</a> — 6 lis 2016, o 18:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2016-11-06T18:06:21+01:00</updated>
<published>2016-11-06T18:06:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16741&amp;p=173959#p173959</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16741&amp;p=173959#p173959"/>
<title type="html"><![CDATA[Re: Pseudointerpreter poleceń]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16741&amp;p=173959#p173959"><![CDATA[
Projekt mimo prostoty warty uwagi (już gdzieś się natknąłem na podobne rozwiązania). Są sytuacje gdzie zamiast przeprogramowywać uC w jakimś sterowniku zarządzającym procesem mechanicznym nawet operator, który nie ma pojęcia o programowaniu w prosty sposób pisze skrypt i gotowe - maszyna inaczej działa. Interpretery to w ogóle ciekawa sprawa. Sam lata temu rozbudowywałem i tak świetny jeżyk BASIC jaki posiadał Commodore+4, o dodatkowych kilkanaście opcji, które ułatwiały i drastycznie przyspieszały programy pisane w tym języku, np. wyszukiwanie słowa w liniach DATA - READ był strasznie mozolny, a procedura napisana w asemblerze robiła to błyskawicznie przeszukując kilkaset linii w ułamku sekundy.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 6 lis 2016, o 18:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Situs]]></name></author>
<updated>2016-11-06T17:58:38+01:00</updated>
<published>2016-11-06T17:58:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16741&amp;p=173958#p173958</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16741&amp;p=173958#p173958"/>
<title type="html"><![CDATA[Re: Pseudointerpreter poleceń]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16741&amp;p=173958#p173958"><![CDATA[
Po całym kodzie musi być jeszcze jeden enter by działało - koniec lini jest gdy program napotka enter. <br />Daję kod(stl trzeba zainstalować):<br />pseudointerpreter_v2.ino<br />[syntax=cpp]#include &lt;SD.h&gt;<br />#include &lt;ArduinoSTL.h&gt;<br /><br />using namespace std ;<br />File plik ;<br /><br />void setup()<br />{<br />  Serial.begin(9600) ;<br />  while(!SD.begin(4))<br />  {<br />    Serial.println(&quot;Blad inicjalizacji karty SD!&quot;) ;<br />    delay(333) ;<br />  }<br />  plik = SD.open(&quot;test.txt&quot;) ; //tu wpisac nazwe pliku<br />}<br /><br />void loop()<br />{<br />  uint8_t licznik ;<br />  string tekst ;<br />  while(1)<br />  {<br />    if(plik.available())<br />    {<br />      char temp1 = plik.read() ;<br />      if(temp1 != '\n')<br />      {<br />        tekst += temp1 ;<br />        licznik = licznik + 1 ;<br />      }<br />      else if(temp1 == ';') //sredniki to komentarze, trzeba zignorować to co po nich jest<br />      {<br />        while(plik.read() != '\n') ;<br />        plik.seek(plik.position()-1) ;//cofanie o 1<br />        break ;<br />      }<br />      else<br />      {<br />        break ;<br />      }<br />      licznik = licznik + 1 ;<br />    }<br />  }<br />  tekst&#91;licznik-1&#93; = 0 ; //usuwanie \n<br />  <br />  rozpoznaj(tekst) ; //wykonanie komend<br />}[/syntax]rozpoznaj.ino[syntax=cpp]char liczby&#91;&#93; = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'} ;<br />char litery&#91;&#93; = &quot;abcdefghijklmnoprstqwxyrzvABCDEFGHIJKLMNOPRSTUWQXYWZV-&quot; ;<br />uint32_t skok&#91;10&#93; = {0} ;<br /><br />void rozpoznaj(string komd)<br />{<br />  if(komd.find(&quot;tryb&quot;) != string::npos)<br />  {<br />    if(komd.find(&quot;-p&quot;) != string::npos)<br />    {<br />      if(komd.find(&quot;-s&quot;) != string::npos) //sprawdzanie czy sa wszystkie czlony komendy<br />      {<br />        if(komd.find_first_of(liczby, komd.find(&quot;-p&quot;)+2))<br />        {<br />          if(komd.find_first_of(liczby, komd.find(&quot;-s&quot;)+2))<br />          {<br />            uint8_t port = 0 ;<br />            uint8_t stan = komd&#91;komd.find_first_of(liczby, komd.find(&quot;-s&quot;)+2)&#93;-0x30 ;<br />            if((komd.find_first_of(liczby, komd.find(&quot;-p&quot;)) != string::npos) &amp;&amp; (komd.find_first_of(litery, 2+komd.find(&quot;-p&quot;))  &gt;  komd.find_first_of(liczby, 1+komd.find_first_of(liczby, 2+komd.find(&quot;-p&quot;))) ))<br />            {<br />              uint8_t ppos = komd.find(&quot;-p&quot;) + 2 ;<br />              uint8_t spos = komd.find(&quot;-s&quot;) + 2 ;<br />              <br />              uint8_t fnumpos = komd.find_first_of(liczby, ppos) ;<br />              uint8_t snumpos = komd.find_first_of(liczby, komd.find_first_of(liczby, ppos)+1) ;<br /><br />              port = (komd&#91;fnumpos&#93;-0x30) * 10 + (komd&#91;snumpos&#93;-0x30) ;<br />            }<br />            else<br />            {<br />              port = komd&#91;komd.find_first_of(liczby, komd.find(&quot;-p&quot;)+2)&#93;-0x30 ;<br />            }<br />            pinMode(port, stan) ;<br />          }<br />        }<br />      }<br />    }<br />  }<br />  else if(komd.find(&quot;ustaw&quot;) != string::npos)<br />  {<br />    if(komd.find(&quot;-p&quot;) != string::npos)<br />    {<br />      if(komd.find(&quot;-s&quot;) != string::npos)<br />      {<br />        if(komd.find_first_of(liczby, komd.find(&quot;-p&quot;)+2))<br />        {<br />          if(komd.find_first_of(liczby, komd.find(&quot;-s&quot;)+2))<br />          {<br />            uint8_t port = 0 ;<br />            uint8_t stan = komd&#91;komd.find_first_of(liczby, komd.find(&quot;-s&quot;)+2)&#93;-0x30 ;<br />            if((komd.find_first_of(liczby, komd.find(&quot;-p&quot;)) != string::npos) &amp;&amp; (komd.find_first_of(litery, 2+komd.find(&quot;-p&quot;))  &gt;  komd.find_first_of(liczby, 1+komd.find_first_of(liczby, 2+komd.find(&quot;-p&quot;))) ))<br />            {<br />              uint8_t ppos = komd.find(&quot;-p&quot;) + 2 ;<br />              uint8_t spos = komd.find(&quot;-s&quot;) + 2 ;<br />              <br />              uint8_t fnumpos = komd.find_first_of(liczby, ppos) ;<br />              uint8_t snumpos = komd.find_first_of(liczby, komd.find_first_of(liczby, ppos)+1) ;<br /><br />              port = (komd&#91;fnumpos&#93;-0x30) * 10 + (komd&#91;snumpos&#93;-0x30) ;<br />            }<br />            else<br />            {<br />              port = komd&#91;komd.find_first_of(liczby, komd.find(&quot;-p&quot;)+2)&#93;-0x30 ;<br />            }<br />            digitalWrite(port, stan) ;<br />          }<br />        }<br />      }<br />    }<br />  }<br />  else if(komd.find(&quot;lbl&quot;) != string::npos)<br />  {<br />    if(komd.find(&quot;-n&quot;) != string::npos)<br />    {<br />      if(komd.find_first_of(liczby, komd.find(&quot;-n&quot;)+2))<br />      {<br />        skok&#91;komd&#91;komd.find_first_of(liczby, komd.find(&quot;-n&quot;)+2)&#93;-0x30&#93; = plik.position()-8 ;<br />      }<br />    }<br />  }<br />  else if(komd.find(&quot;goto&quot;) != string::npos)<br />  {<br />    if(komd.find(&quot;-n&quot;) != string::npos)<br />    {<br />      if(komd.find_first_of(liczby, komd.find(&quot;-n&quot;)+2))<br />      {<br />        plik.seek(skok&#91;komd&#91;komd.find_first_of(liczby, komd.find(&quot;-n&quot;)+2)&#93;-0x30&#93;) ;<br />      }<br />    }<br />  }<br />  else if(komd.find(&quot;czekaj&quot;) != string::npos)<br />  {<br />    if(komd.find(&quot;-c&quot;) != string::npos)<br />    {<br />      if(komd.find_first_of(liczby, komd.find(&quot;-n&quot;)+2))<br />      {<br />        delay(((komd&#91;komd.find_first_of(liczby, komd.find(&quot;-s&quot;)+2)&#93;-0x30)*100)+100) ;<br />      }<br />    }<br />  }<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14339">Situs</a> — 6 lis 2016, o 17:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Situs]]></name></author>
<updated>2016-11-06T16:56:51+01:00</updated>
<published>2016-11-06T16:56:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=16741&amp;p=173951#p173951</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=16741&amp;p=173951#p173951"/>
<title type="html"><![CDATA[Pseudointerpreter poleceń]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=16741&amp;p=173951#p173951"><![CDATA[
Witam. Po przeczytaniu definicji interpretera na Wikipedii postanowiłem coś takiego zrobić. Użyłem algorytmów STL. Działanie jest proste : odczytywanie linii z karty SD, wykonanie poleceń i ignorowanie komentarzy czyli tekstów po średniku aż do końca linii. W walce z uniknięciem plątaniny kabli zastosowałem Ethernet shield bo jest już na nim gniazdo na kartę SD i dzielniki napięcia. Oto lista poleceń:<ul><li>tryb -p(pin) -s(stan) -- ustawianie trybu pracy pinu jako we lub wy. </li><li>ustaw -p(pin) -s(stan) -- ustawianie stanu wysokiego lub niskiego na pinie</li><li>lbl -n(cyfra) -- label do którego skoczy goto(cyfra od 0 do 9)</li><li>czekaj -c(czas) -- Czeka podaną liczbę czasu(-c to ms opoznienia / 100 - 100</li></ul><br />Zinterpretuje i wykona zarówno polecenia typu ustaw-p2-s1 jak i ustaw    -p  2  bezuzytecznyTekst  -s    1<br /><br /><a href="https://obrazkiforum.atnel.pl/14339/d2a1f0d3140c45b43c9d33ec4ef53369.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/14339/d2a1f0d3140c45b43c9d33ec4ef53369.jpg" alt="Obrazek" /></a><a href="https://obrazkiforum.atnel.pl/14339/8f7506bab641a1b0fe843fb5e69dbd1c.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/14339/8f7506bab641a1b0fe843fb5e69dbd1c.jpg" alt="Obrazek" /></a><br /><br /><div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><br /><br />Umieszczam spakowany plik RAR, jest tam plik na kartę SD, instrukcja podłączenia karty SD, oraz instrukcja instalacji STL - plik instalacja-czytac.txt<br />Szkic jest dość długi i skomplikowany, dlatego ośmielam się wstawić ten projekt na forum.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14339">Situs</a> — 6 lis 2016, o 16:56</p><hr />
]]></content>
</entry>
</feed>