Mam taki sobie komputerek edukacyjny na procesorze ATMEL 8052 i poprzez RS-232 łączyć się można z PC.
Tak to 30 lat temu ktoś wymyślił i tak to działa. Opisane w czasopiśmie ELEKTRONIKA DLA WSZYSTKICH
W PC wybieram CMD, mam dostęp do DOSa i jego komend, ustawiam transmisję
MODE COM1: 4800,n,8,1
z PC przesyłam pliki w formacie INTELHEX do komputerka
COPY nazwa pliku COM1
I wszystko działa, transmisja kończy się i następuje powrót do DOSa.
Można wprowadzać następne polecenia.
Ale, jak przesyłam dane INTELHEX z komputerka do PC
COPY COM1 nazwa pliku
to.... transmisja się wykonuje ale PC nie wraca do DOSa, w linii poleceń kursor stale miga jak gdyby PC oczekiwał końca transmisji, etc... etc....
Co pomaga. Muszę wyłączyć (zamknąć) DOSa i odczyt pliku do którego przesłane były dane pojawiają się.
Czyli transmisja zrealizowała się.
Pytanie dla biegłych, dlaczego po zakończeniu transmisji nie sygnalizuje tego DOS PCta, tak jak robi to w wypadku nadawania.
Hm.... może procedura transmisji z komputerka ma jakiś błąd i nie wysyła do PC kodu końca transmisji?

2

Cześć,

Wydaje mi się, że procedura odczytu z RS232 nie ma poprawnej obsługi timeout, tzn. COPY jakoś działa nie tak. Po prostu po pewnym czasie bez przesyłania danych PC powinien zamknąć łącze i wysłać przynajmniej komunikat o braku dalszych danych i powrócić do terminala, a wydaje mi się, że komunikat, że nie może odczytać danych z urządzenia COM1: byłby co najmniej na miejscu. Tak przeważnie powinno być. Na marginesie - nie wiem jaki miałby być kod końca transmisji dla komendy COPY  - PC nie wie jaką długość ma kod ściągany z komputerka :)

tOri

Różne różności dla Atari i nie tylko - przydatne, bądź nie ale i tak warto zajrzeć...
http://atari.myftp.org  Atari - Power without price and necessary elements with some sh*t onboard
https://reversing.pl SSL enabled site

3

Przeczytałem, rozumiem.
Z tym kodem końca transmisji to tylko moje przypuszczenie.
Jak pracowałem na obrabiarce numerycznej to komputerek współpracował z tym na maszynie SIENENS.
Transmisja była po RS-232 i koniec transmisji sygnalizowany był kodem 00. Po prostu na końcu pliku umieścić należało dwa bajty zerowe.
Dla komputerka napisałem procedury zapisu, odczytu które uwzględniały ten fakt i współpracowało aż miło.

Tu, jak nadpisuje plik o tej samej nazwie pokaże się komunikat czy zatwierdzić T/N, ale potem jak pisałem kursor miga i DOS czegoś oczekuje.... poczekam dłużej, może ten timeout to czas trzech miesięcy... :)

4 Ostatnio edytowany przez tOri (2023-02-01 19:01:25)

A próbowałeś może przełączników w komendzie COPY?

np. plik binary?

COPY /B COM1: nazwa pliku

bo raczej nie ASCII...

Pozdrawiam
tOri

edit:

osobiście poleciłbym jakiś program komunikacyjny do transferu plików

Różne różności dla Atari i nie tylko - przydatne, bądź nie ale i tak warto zajrzeć...
http://atari.myftp.org  Atari - Power without price and necessary elements with some sh*t onboard
https://reversing.pl SSL enabled site

5

Nie próbowałem z przełącznikami komend. Popróbuję.
Swoje doświadczenia opieram na instrukcji do komputerka, a tam jest że goła komenda COPY wystarcza
Przed laty miałem innego PCta z chyba Windowsem95,98 ???? Nie pamiętam i działało.
Potem zmieniłem sprzęt etc..etc... i DOSa wywołuję przez CMD i transmisja do PC nie jest tym czym było.
Do komputerka mam różne przystawki dorobione, ważne że do niego przesłać mogę dane, odczyt danych mniej istotny. Ostatecznie do tej pory radziłem sobie w wyżej opisany sposób.
Zapytałem, bo fajnie by było jakby transmitowało w obie strony bez cudowania.

A komputerek z Atari dogaduje się perfekcyjnie, więc zakładam że jego procedury są OK, a coś w PC źle ustawione.... ja coś źle robię ???.....Niestety na PC znam się tak jak na chirurgi, więc nic nie wymyślę.

6 Ostatnio edytowany przez uicr0Bee (2023-02-01 22:34:28)

Skoro wywołujesz CMD, to rozumiem że to jakaś wersja Windows. A jak sam napisałeś to już nie jest 95 ani 98, które tak naprawdę były graficznymi nakładkami na "prawdziwy" DOS, tylko pewnie mówimy co najmniej o XP, albo 7, a może 10? W takim razie to co uruchamiasz przez CMD, to tak naprawdę nie jest DOS, tylko Wiersz poleceń Windows. Może popatrz w Menadżerze urządzeń, czy dla portu COM są jakieś ustawienia do zmiany. W komputerze z którego piszę nie mam portu COM, więc nie mogę podejrzeć czy w Windows 10 są w Menadżerze urządzeń jakieś ustawienia dla COM, gdy komputer go ma. Tak jak napisał tOri, jakiś program komunikacyjny mógłby uprościć sprawę, ale nie używałem takich już od dekad, więc nic nie potrafię polecić. PuTTy może, ale ja w nim znam tylko korzystanie z ssh :)

<-- Kontakt przez "E-mail" gdyż albowiem moja skrzynka "PW" jest pełna i zaprawdę nie mam czego usunąć.

--== Kup Pan/i dyskietkę http://www.atari.org.pl/forum/viewtopic.php?id=18887 ==--

7

Jest tak jak piszesz. Siedzę i kombinuję. Może coś w ustawieniach trzeba zmienić.
Po latach wracam do dawnych zabawek. Programuję sobie jazdę modelu samochodu na gąsienicach sterowanego procesorem AT89C2051. Może uda się komputerek zaprezentować na jednym z "posiedzeń" na Atari on line, jako coś co było.
Fajnie byłoby gdyby działało jak dawniej. Jak nie, trudno. Zapis/odczyt działa mi przy współpracy z Atari. Na PC piszę procedurki, asembleruję do postaci INTELHEX. Gdyby reszta działała, byłoby super.
I tak dobrze że gotowy plik można przesłać do komputerka z programować ATMELA, nie muszę korzystać z pomocy ATARI.

8

Zenon/Dial napisał/a:

nie muszę korzystać z pomocy ATARI

Heh, i to uważasz za wadę naforum Atarowskim... :/ Zrzędy się robią z ludzi na stare lata, spróbuj prawdziwym DOSem pod DOSBOXEM z ustawionymi portami, może pomóc.

Sikor umarł...

9

:)
1. Nie uważam za wadę. Atari jest zbyt cenne by kabelkiem łączone było z dużym bratem.
2. Łatwo powiedzieć, żebym wiedział jak to zrobić (wstyd, ale nie wiem)

10

Jeśli kopiujesz PC -> coś przez COPY albo COPY /B , to COPY wie ile ma do skopiowania i zamyka port po przesłaniu i wraca do DOS.
Jeśli włączasz COPY COM1 plikodbierający, to polecenie COPY czeka ąż tamta strona zamknie połączenie bo skąd DOS/PC ma wiedzieć, że wszystko zostało wysłane? Jak by to to miało działac inaczej np. do takiego telnetu?
Co robi sie na tym komputerku aby zaczął wysyłać do PC?
RS ma ogólnie linie sterujące do tego RTS/CTS/DTR/DSR ale zakładam, że nie są wykorzystywane.

11

Komputerek przesyła plik w formacie INTELHEX. Ma w sobie procedurę do tego napisaną. Podaje się adres początku danych w pamięci, adres końca i wyślij i transmituje
Kabelek RS-232 używa tylko trzech sygnałów, masa, wyślij, odbierz, bez potwierdzeń. Tak to zostało zaprojektowane, opisane i zrobione
Może w projekcie coś było niedopracowane i nie działa jak trzeba.
Sam format INTELHEX jako ostatni rekord zawiera w sobie informację że plik się kończy. Tu pewnie leży przyczyna że PC nie reaguje na to. Jakieś ustawienia w konfiguracji transmisji trzeba zrobić.... coś tam, coś tam.... nie mam zielonego pojęcia.

12

Nie wiem, jaki Windows, ale była jeszcze różnica w działaniu CMD oraz COMMAND.
Może nie w działaniu samej komendy COPY ale warto sprawdzić.

13 Ostatnio edytowany przez seban (2023-02-02 13:35:08)

Hej!

@Zenon: z tego co pamiętam z czasów używania RS-ów, Modemów i DOS-a to transmisja z kanału znakowego jakim może być port COM: była kończona gdy w strumieniu danych znalazł się tzw. control-character oznaczający koniec pliku (EOF), a przypadku PC/DOS była to sekwencja generowana po naciśnięciu control+Z, więc jeżeli to ATMEL nadaje w stronę PC to spróbuj jako ostatni wysyłany bajt pliku wysłać bajt o wartości 26 (dec), czyli 0x1A (hex).

Nie sprawdziłem tego jeszcze więc traktuj moje wywody z dużą dawką ostrożności, bo piszę "z pamięci" która bywa mocno zawodna.

Na pytanie dlaczego kiedyś to działało, odpowiedź może być taka że być może kiedyś BIOS czy DOS inaczej traktowały odbiór danych i miały założony jakiś timeout po którym po prostu kopiowanie się kończyło lub oczekiwane było nadanie znaku "BREAK" na linii transmisyjnej (zero logiczne utrzymujące się dłużej niż 10 bitów). Nie wiem czy obecne systemy Windows potrafią prawidłowo taki sygnał zinterpretować. Wszystko też zależy od portu jaki masz na płycie, nie wiem czy używasz prawdziwego RS232 czy też jakiejś przejściówki RS232-USB, ale część takich przejściówek nie potrafi prawidłowo rozpoznać sygnału BREAK na linii RX.

Podsumowując ta moją nieco przydługą odpowiedź, możesz spróbować wysyłać ten dodatkowy bajt na końcu danych (#26 / $1A) lub też po zakończonej transmisji ustawić linię TX po stronie ATMEL-a na logiczne "0", na tyle długo aby komputer PC zorientował się że został nadany sygnał BREAK.

14

Port COM1 nie ma przybudówek, jedyne translator napięć ma komputerek (+-12V)
Pewnie ten dodatkowy bajt załatwił by sprawę, ale trzeba by procedurę transmisji napisać od nowa (poprawić) a to psuje całą zabawę.
Nazwijmy to, w swoim systemie komputerek ma procedurę która formatuje przesyłane dane do formatu INTELHEX, ma procedurę transmisji, obliczania sumy kontrolnej.... etc...
To by trzeba zmodyfikować, na nowo programować EPROM i takie tam.....
Jak nic się nie wymyśli to trudno, przeżyłem do teraz. Jak pisałem, ważniejsze że komputerek odbiera dane z PC i w dwie strony łączy się z ATARI.
Właśnie po latach studiuję instrukcję i próbuję znaleźć notatki, może na coś się natknę, coś przeoczyłem...
Nie mam co robić to grzebię w przeszłości.... :)

15 Ostatnio edytowany przez seban (2023-02-02 17:19:23)

Jeżeli nie chcesz niż przerabiać po stronie kodu w ATMEL-u, to jeżeli korzystasz z windows i program w ATMEL wysyła to jako IntelHEX, a więc właściwie ciąg znaków ASCII, to można wykorzystać jakiś program terminalowy (np. "TerraTerm Pro" lub PuTTY i używając którychś z tych programów, można mieć konsolę terminala która będzie mogła odebrać ciąg znaków z portu COM. Potem to co wyszło na konsolę można sobie albo zapisać do pliku albo skopiować do schowka i gdzieś przenieść. Nie potrzeba odpalać CMD i używać polecenia Copy. Nie wiem którego Windows używasz, jeżeli jakiegoś starszego to w nim był wbudowany program terminalowy (HyperTerminal).

A jeżeli dodatkowo trzeba wysyłać jakieś dziwne sekwencje do tej płytki z ATMEL-em aby cokolwiek zechciała odpowiedzieć (np. jakąś nie czysto tekstową sekwencję bajtów) to można skorzystać z takiego narzędzia jak terminal od Br@y++. Jest to dość wiekowy soft, używałem go za czasów windows 7, miał mocno rozbudowane opcje wysyłania różnych sekwencji bajtów, makra, etc. Niestety nie wiem czy obecnie działa to jeszcze pod Windows 10, nie mam pod ręką żadnego nowożytnego Windows aby to sprawdzić.

Jest też trzecia opcja, trzeba by napisać sobie prosty program który odbierze taki plik intel-hex z portu szeregowego i zapisze go do pliku.

ps) grzebanie w przeszłości, szczególnie takiej może dać dużo radości :) Zatem życzę owocnego grzebania w projekcie :D

16

seban napisał/a:

Niestety nie wiem czy obecnie działa to jeszcze pod Windows 10, nie mam pod ręką żadnego nowożytnego Windows aby to sprawdzić.

Działa, używam produkcyjnie w jednym projekcie.

"Was powinny uzbrojone służby wyciągać z domów do punktów szczepień, a potem zamykać do pi* za rozpowszechnianie zagrożenia epidemicznego" - Epi 2021
"Powinno się pałować tylko tych co tego nie rozumieją. No i nie szmatki i nie chirurgiczne tylko min FFP3, to by miało jakiś sens. U mnie we firmie, to jak przychodzi bezmaskowiec, to stoi w deszczu przed firmą" - Pin 2021

17

syscall napisał/a:

Działa, używam produkcyjnie w jednym projekcie.

Dzięki za info! Warto wiedzieć że ten program nadal funkcjonuje pod nowszymi wersjami windy :)

18

Komputerek nie robi żadnych dziwnych sekwencji.
Nadawanie wygląda tak: standardowo transmisja ustawiona na 4800 bodów.
Klawisz S, nadawanie, oczekuje na podanie adresu początku i końca bloku pamięci. Np. 8000 8100, zatwierdzenie i leci.
Z danych w tym obszarze procedura tworzy plik INTELHEX i tyle. PC powinien to odebrać i plik można przechować do późniejszego wykorzystania. Odbiór z PC jest jeszcze prostszy. Wystarczy nacisnąć klawisz L, uruchomić w PC transmisję  COPY nazwa pliku COM1 i leci.... komputerek sam się zatrzyma a dane są w jego pamięci. Wszystko co potrzebne zapisane byłow pliku INTELHEX.
Do zestawu dołączony był assembler, programy pisać można w dowolnym edytorze w konwencji ATMEL 8051, zasemblować. Gotowy plik INTELHEX przesłać do komputerka, przetestować, etc..etc... po prostu uczyć się programować.
Na komputerku też wprowadzić można ręcznie kody programu, przetestować, poprawić, przesłać do PC, do magazynu.
Pisałem wcześniej że używałem go do współpracy z obrabiarką numeryczną. Plik danych leciał jako jednolity, bajt za bajtem, niezależnie jak długi. Najdłuższe pliki to około 12000 bajtów, bez potwierdzeń, jako jeden ciąg.
Procedurki napisałem, działało. Komputerka używałem zamiast papierowych taśm perforowanych. Tak na marginesie, komputerek potrafi transmitować z szybkością 57600 bodów. Swoje procedurki do współpracy z Atari pisałem i osiągałem ponad 90000 bodów. Ale to jako ciekawostka.
OK, spróbuję uruchomić wskazane programy terminalowe.

19

To może suma kontrolna transmisji sie nie zgadza i pc nie sygnalizuje błędu a jedynie zawisa transmisja?

"Was powinny uzbrojone służby wyciągać z domów do punktów szczepień, a potem zamykać do pi* za rozpowszechnianie zagrożenia epidemicznego" - Epi 2021
"Powinno się pałować tylko tych co tego nie rozumieją. No i nie szmatki i nie chirurgiczne tylko min FFP3, to by miało jakiś sens. U mnie we firmie, to jak przychodzi bezmaskowiec, to stoi w deszczu przed firmą" - Pin 2021

20 Ostatnio edytowany przez Zenon/Dial (2023-02-06 18:01:13)

Za chiny nie chce to działać.
Metodą prób i błędów wymyśliłem taką procedurę.
Załączony PC i komputerek
W PC wybierz - uruchom - potem CMD i pokazuje się plansza DOS
Ustawiam ścieżkę dostępu do folderu z plikami dla komputerka
cd/asema/aaa
Ustawiam parametry transmisji, mode com1 4800,n,8,1
Wpisuję polecenie kopiowania, copy com1 nazwa pliku
Na komputerku wybieram opcję wyślij, więc stuk w klawisz S, podaję adresy początku i końca bloku danych np C000, C2000
Naciskam klawisz WYKONAJ (ENTER, RETURN Atarowskie) i jak najszybciej naciskam w PC klawisz ENTER.
Diabli wiedzą co się dzieje..... komputerek sygnalizuje że plik przesłany, a PC "wisi", kursor miga i koniec zabawy.
Zamykam całkowicie DOSa, w edytorze wywołuję plik który powinien się zapełnić przesłanymi danymi. I o dziwo... jest, ale brak początku, reszta jest ok.
No to powtórka. Uruchamiam DOSa, transmisję jak powyżej ale teraz wpierw naciskam ENTER w PC, potem klawisz WYKONAJ w komputerku i jak poprzednio po zakończeniu transmisji PC "wisi", a że nazwa pliku była ta sama to pojawił się komunikat czy go nadpisać. Zatwierdzam że tak -T- i podgląd edytorem nic nie daje. Plik jaki był taki jest.... porażka.
Nie całkiem, ponownie zamykam DOSa, edytor sygnalizuje że plik został zmodyfikowany, uaktualniony
Otwieram go i Ooooo.... są w nim dane które komputerek przesłał. Od początku do końca poprawne nic nie zostało zatracone.
Ktoś rozumie co się dzieje, bo ja nie mam zielonego pojęcia. Ale działa. Wykonałem tym sposobem wiele prób i transmituje się.
Czy w galaktyce jest podobna procedura by cokolwiek zadziałało jak nie chce działać?