1

czegos tu nie rozumiem...

wedle dokumentacji (strona 21, pokey.pdf http://ftp.pigwa.net/stuff/collections/ … 520Info/):
skctl:
d6d5d4 =001 transfer rate set by EXTERNAL clock, recive asynchronous (channel 3,4)
             010 transfer and recive rate asynchronous (channel 4)

a teraz loader do r5:

; przelaczenie POKEY na wysyl danych
cfg_block
        lda     #$23
        sta     SKCTL
        stx     IRQEN

oraz

; przelaczenie POKEY na odbior danych
        lda     #$13
        sta     SKCTL
        sta     SKRES

po jakiego gwizda? czy dokumentacja mija sie z praktyka?

oraz pytanie pokrewne - z jaka szybkoscia jest w stanie atari odbierac dane?
z tego co rozumiem, po odebraniu danych, zglaszane jest irq i jesli procek odczyta dana z rejestru wejsciowego to pokey moze zapisac tam kolejna dana, jesli nie zdazy, to pokey zglasza data overrun i bajt idzie sie kochac do krainy wiecznych lowow

przechodze na tumiwisizm

2

czasem lepiej nie wiedzieć, ważne że działa :)

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

3

nie wazne... w tym rzecz ze nie wazne...

przechodze na tumiwisizm

4

Tego z external clockiem w pokeyu chyba nikt nie rozumie, poprawcie mnie, jeśli się mylę (bo też bym chciał wiedzieć jak i czy to działa).

Natomiast co do szybkości: zalezy od tego, czy nic się przy okazji nie dzieje, czy też nawalone jest w tle przerwań DLI na przykład. Na czysto 82 kbps powinno działać. W większości przypadków 52 kbps ($0a) jest ok, tzn. pójdzie też przy różnych obciążeniach.

Ktoś tu kiedyś pracował nad zrobieniem pokeya w VHDL-u, ale, jak zwykle, chyba mu się zwiędło. Ale gdyby nie, albo gdyby brał się za to kto inny, to niech pamięta o dorobieniu do SIO tak z 1-2 bajty FIFO, żeby SIO mogło odbierać dane nawet kiedy 6502 nie ma czasu.

KMK
? HEX$(6670358)

5

cel calej zabawy jest taki:
zrobic sio2pc dzialajace na ft232r (docelowo, w tej chwili na ft232b, bo tylko takim dysponuje) z pelna szybkoscia i w trybie bit-bang, a nie w trybie vcp

tryb vcp to tryb emulacji rs232 i jak juz pewnie wiadomo, jakos nie udaje sie wyjsc poza 19200 przy komunikacji z atari, co dziwniejsze - nie udaje sie skomunikowac na 9600 rownierz! ($56)
w trybie bit-bang jest kontrola nad kazda linia danych ukladu z osobna, kazda moze byc ustawiona jako wejscie lub wyjscie - oraz - przy ukladzie z koncowka r - linie zegarowe moga byc podlaczone z zewnatrz

uklad z koncowka b jest prostrzy i nie ma takiej mozliwosci, za to moze sygnal zegarowy wygenerowac

co wiecej, uklad pracuje 16x szybciej niz wynikalo by to z ilosci bps jaka mu sie ustawi, poniewaz serializacja i deserializacja danych jest po stronie uzytkownika
w ten sposob mozna zrobic oversampling i nie bawic sie w takie popierdolki jak ustawianie 57600, tylko dokladnie tyle, ile daje pokey

dzis sio pojdzie pod oscyloskop, ja natomiast mam prosbe do wszystkich zainteresowanych...

czy ktos moglby napisac krotki programik, ktory (pomijajac protokol sio) bedzie odbieral (command na 1) i wysylal (command na 0) 256 bajtow danych i wyswietlal to na ekranie? chodzi mi wlasnie o tryb pracy 000 - czyli zewnetrzy zegar dla odbioru i nadawania. przelaczenie trybu moglo by sie odbywac spacja, gdyby byl jeszcze wplyw na rejestry audctl, audf4 oraz skctl bylo by slodko

przechodze na tumiwisizm

6

W loaderze do R5 ustawiam SKCTL tak, jak to robi OS przy zwykłej transmisji ze stacją dysków. Też łamałem sobie nad tym głowę czemu tak jest (cały czas 0x23 nie działa) i jest to jakaś niezgodność z opisem ... nie pamiętam tylko, czy doszedłem do jakichś wniosków - za dawno to pisałem.

Candle - jak znajdę to prześlę Ci programik działający z linii komend DOS, który potrafił robić różne cuda na SIO...

pomidor

7

dzieki electron, tymczasem czy moglbys podeslac niezbedne includy do kompilacji twojego loadera do r5? niby sobie poradzilem, ale w stosunku do tego co znalazlem w source do r5, loader skompilowal sie 100 bajtow wiekszy (405) - cos nie teges... w dodatku malo dziala...
koniec koncow w celach cwiczebnych grzebie wprost w hex'ach r5.h no ale tam nie poszaleje...

przechodze na tumiwisizm

8

drac030 napisał/a:

Tego z external clockiem w pokeyu chyba nikt nie rozumie, poprawcie mnie, jeśli się mylę (bo też bym chciał wiedzieć jak i czy to działa).

http://asap.sourceforge.net/pokeydoc.zip
Otwieramy index.xml. A w temacie: registers.xml#SKCTL oraz serclk.xml

https://www.youtube.com/watch?v=jofNR_WkoCE

9

... i jestesmy tacy sami madrzy jak przed lektura... wiemy ze istnieje, na schemacie widac ze istotnie, jest wejscie bclk i to wszystko...
a ponizszy tekst:

Does any known Atari peripheral use the SIO clock lines?
Piotr: I haven't heard about any device that uses clock or interrupt lines.

rozwala...

przechodze na tumiwisizm

10

Ja też nic nie słyszałem ... :) LOL :)

STYMulator JIL ST YM2149 mjuz:k @ gnu/linux
SIUP (SIo2Usb2Pc) - SIO2PC USB Edition
PIN ready logo
3M / InD: ... na kasetach były zabezpieczenia w postaci tzw. "mikropierdnięcie" ...

11

Schemat wyjaśnia, jak działa BCLK. Wyjaśnia też, dlaczego nie można komunikować się w obie strony ze stacją przy SKCTL $23. Czyli są tam odpowiedzi na Wasze pytania. Nie wiem, co "rozwala" w moim pytaniu, na które chętnie poznałbym odpowiedź.

https://www.youtube.com/watch?v=jofNR_WkoCE

12

to w takim razie czegos znow nie rozumiem:
przy $2x na skctl mam na pierwszym mux'ie wybrane wejscie 0, a na drugim wejscie 01, tym samym dziala wewnetrzny serin_clk jak i serout_clk
czyli komunikacja powinna sie odbywac w dwie strony zgodnie z dokumentacja pokeya

przy $1x na skctl mam na pierwszym mux'ie nadal wybrane wejscie 0, za to na drugim mam wejscie 00, wiec nie dziala wysylanie asynchroniczne, bo sygnal zegarowy musi nadejsc z bclk - i to tez sie zgadza z dokumentacja

wiec mi to niewiele wyjasnia
jesli popelniam gdzies blad - to badz laskaw mi go pokazac

przechodze na tumiwisizm

13 Ostatnio edytowany przez Candle (2009-02-05 23:35:43)

ramka sio
gorny przebieg to pin #1 zlacza sio (clock in, albo bclk jak kto woli)
przebieg dolny - data out - pin #5
http://spiflash.org/ramka_sio.jpg

nie sa rownej wysokosci, druga sonda ma wbudowany dzielnik 1:10, zreszta uszkodzona :/

przechodze na tumiwisizm

14 Ostatnio edytowany przez Fox (2009-02-06 11:24:55)

b4 SKCTL jest też na schemacie SERIN i powoduje reset zegara 4 w momencie nadejścia bitu startu. To koryguje drobne różnice między prędkością wysyłania przez stację i odbierania przez komputer - to jest to, co nazywa się "async" w tabelce dla SKCTL. Wynika z tego, że odczyt ze stacji działa dla $1x, $3x, $5x i $7x. Jeśli chcemy wysyłać do stacji, to musimy to robić na zegarze POKEYa (nie wiem, co rozumiesz przez wysyłanie asynchroniczne), więc $2x, $4x, $6x i $7x. Więc wspólne ustawienie to $7x, z tym że prędkość wysyłania ustawiamy wtedy zegarem 2, a nie 4.

Nie wiem, gdzie znalazłeś "010 transfer and recive rate asynchronous (channel 4)" - nie ma tego w pokey.pdf.

Edit:
Odpowiedź na "pytanie pokrewne" z pierwszego postu: wiele zależy od tego, jak zrealizujemy transmisję. Jeśli "standardowo", tj. opierając się na liczniku POKEYa i rejestrze SERIN, to największa prędkość dla AUDF3=AUDF4=0 to 14 cykli na bit, czyli 126675 bps (z overrun jest tak jak piszesz, rozrysowane na schematach SERIN i IRQ). Możemy też próbować odczytywać 6502 bezpośrednio każdy bit z SKSTAT - w b4 jest tam wejście szeregowe. W obu przypadkach największym problemem jest, aby strona nadająca miała zbliżoną prędkość, a zwykle nie można jej płynnie regulować. Problem ten rozwiązałoby podłączenie BCLK i użycie trybu $0x lub $4x.

https://www.youtube.com/watch?v=jofNR_WkoCE

15 Ostatnio edytowany przez Candle (2009-02-06 12:59:21)

strona 21
010 transfer & receive rates set by channel 4. channel 4 output on bi-directional clock line
moze asynchronous to wielkie slowo, ale chodzilo mi o to glownie, ze atari tu dyktuje szybkosc przesylu danych
caly czas daze do tego zeby te dane jednak odbierac i wysylac przy mode 000 lub 100
w tej chwili sprzet ktorym dysponuje pozwala mi na prosta implementacje trybu 000
pozostale tryby sa do realizacji, ale krotko mowiac na zasadzie samplingu 4x oversampling wystarczy zeby zrealizowac 001 i 010
warunek konieczny - wyjscie zegarowe na pinie #1 gniazda sio - spelniony

jeszcze jedna wazna sprawa - data out, tak samo jak i clock sa bardzo zdegradowane - przy data out wyglada to na spora pojemnosc na pinie (nie mam kondensatorow przy gniezdzie sio), ale przy clocku wyglada to na dwa mozliwe stany - 0 i hi-z, czyli zamiast wyjscia totem-pole jest open-collector i narastajace zbocze jest bardzo zdegradowane
dane maja byc zatrzaskiwane na opadajacym zboczu clocka wiec dla konstruktorow atari nie bylo to problemem, zobaczymy co pokaze sampling

przechodze na tumiwisizm

16

Hej!

Jedna drobna uwaga... nie wiem na ile istotna: na schematach stacji CA-2001 oraz LDW-2000 linie "clock in" oraz "clock out" są podłączone. Nie wiem na ile oprogramowanie tych stacji z tego korzysta. Może w trybie transmisji "synchromesh" wykorzystano tą możliwość. Ale to już musiałaby się wypowiedzieć osoba która miała doczynienia z oprogramowaniem tych stacji. Może warto się przyjrzeć programowi procedurze szybkiej transmisji zarówno po stronie stacji jak i Atari.

Z tego co pamiętam Sparta DOS i DOS XL potrafią wykorzystać Synchromesh. http://atariki.krap.pl/index.php/Synchromesh

Zawsze się zastanawiałem po co linie Clk_IN i Clk_OUT są podpięte w tych stacjach. Jednak nigdy nie sprawdziłem czy stacja w jakikolwiek sposób wykorzystuje tą możliwość, czy tylko i wyłącznie zrobiono to "for future use".

17

Zdaje się, że sa podpiete tylko na wszelki wypadek. Synchromesh z tego nie korzysta.

Linię CLK OUT można wykorzystać do tego, żeby stacja automatycznie wykrywała szybkość transmisji zaprogramowaną przez komputer na pokeyu. Sygnał zegara się pojawia na wyjściu przy nadawaniu danych. Korzystają z tego, o ile mi wiadomo, te stacje: http://atariki.krap.pl/index.php/XFD601

Jednak fajniej by było, gdyby dało się zrobić odwrotnie, to znaczy podawszy sygnał z zewnątrz na wejście CLK IN zaprogramować komputerowi szybkość odbierania danych. Niestety, to jakoś nie chce działać.

KMK
? HEX$(6670358)

18

drac030: probowales? jesli tak, to pewnie dysponujesz programem ktory ustawi pokey w nasluch w takim trybie i bedzie wyswietlal to co otrzyma na ekran, chyba ze fantazja mnie poniosla... znowu...

seban: czekalem az sie odezwiesz ;]

a ktos pamieta jak 1541-ii realizuje transmisje w turbo? z tego co pamietam leci 2 bitowo i obie strony transmisji maja bardzo docyklowane procedurki
ft232 ma 8 dwukierunkowych linii do dowolnego wykozystania, jakby sie udalo zrobic pierwszy kroczek mozna by pojsc dalej

przechodze na tumiwisizm

19

Ja osobiście nie próbowałem, ale simius z tym walczył długo i zaciekle i konkluzja była taka, że nie działa. Aczkolwiek to może jest tylko trafiony pokey, trzeba próbować. Nawet miałem się kiedyś tym sam zająć, ale potem inne rzeczy wynikły i tego nie zrobiłem.

KMK
? HEX$(6670358)

20 Ostatnio edytowany przez Candle (2009-02-07 04:36:20)

no i coz
dziala!
1 bit startu (0), 8 bitow danych, 1 bit stopu (bez znaczenia), bity sa pobierane od najmlodszego do najstarszego

przetestowac sobie mozna podpinajac start i select do lini 1 i 3 gniazda sio - nie moze byc podlaczone sio2pc ani inna bzdura w tym samym czasie, bo wydajnosc pradowa guzikow jest zadna i nie wysteruje wejsc jak cos bedzie wymuszac na nich inny stan

source i binarka dla zainteresowanych tu
jakby ktos chcia powiedziec ze zrodla sa be - mogl napisac - ja pisze jak umiem, a ze nie umiem... coz - za stary jestem na nauke procedur we-wy w systemie, wole je sobie napisac

przechodze na tumiwisizm

21

O moich doświadczeniach z transmisją przez POKEY możesz poczytać w SERIOUSie, jednym z ostatnich

22

no i jak z szybkością Candle, jakie max transfery są teraz osiągalne? bo nie wiem czy mam się podniecać czy nie :)

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

23

tebe: staralem sie jak moglem najszybciej wcicskac guziki, ale mysle ze nie osiagne nawet 1kboda
moze jednak ktos zrobi loader to potestujemy?
teoretyczne max to tyle ile wyciagnie atarka odczytujac rejestr i zapisujac pod wskazany adres
clock wejsciowy nie powinien przekroczyc 1.79mhz bo pokey moze odmowic wspolpracy
174kB/s - ale w tym tepie atari raczej nie zdola zapisac danej? 10 cykli/bajt?
87kB/s daje juz 20 cykli na bajt, moze da rade?
prawde mowiac jaki jest limit na clock wejsciowy dowiemy sie jak bedzie na czym testowac
nie rozumiem tez dlaczego po odebraniu jednego bajtu program nie czeka grzecznie na nastepny tylko rysuje 255 kolejnych bajtow tej samej wartosci - domyslam sie ze rysuje je w sposob ciagly, a tym samym mam zle warunki oczekiwania na bajt
ktos moglby cos naswietlic?

zenon: zajrze!

przechodze na tumiwisizm

24 Ostatnio edytowany przez Candle (2009-02-08 06:21:04)

tymczasem idzie wysylac bajty przy zegarze bliskim 1mbit
czasami pokey zgubi bit, wiec jest odrobine za szybko na jego moziwosci, ale daje rade
po takiej zgubie trzeba mu wyslac 10 zer i wraca do normy
tu lezy sobie soft na pc
minimalny hardware zeby to zadzialalo, to wtyczka db25 i 3 kabelki - jeden od pinu #25 db25 do masy atari, drugi od pinu #2 do pinu #1 sio, 3ci od pinu #8 db25 do pinu #3 sio

uaktualnilem soft po stronie atari, tak ze odbiera dane na irq i wyswietla ladnie 256 bajtow w hex'ach
przydalo by sie rozpoznawac czy nie wystapil buffer overrun i takie tam

nadal nie ma chetnych?

przechodze na tumiwisizm

25

Zwróć uwagę na wpływ kabla połączeniowego. Zapewne masz zwykły ekranowany. Przy tak dużych częstotliwościach jest do niczego. Dają o sobie znać zjawiska falowe a z tym zwykły ekran nie radzi sobie. Poza tym połączenie jest niesymetryczne. No i jego długość nie jest bez znaczenia. Z zagadnieniem zmagali się już Twoi poprzednicy i wymyślili łącze symetryczne oraz pętle opisywaną jak pętla 20mA. No i jest coś takiego jak półtora bitu stopu by dać wystarczająco dużo czasu na wykonanie pobocznych operacji, nie tylko samej transmisji. Jako inny kabel (na już) spróbuj zastosować przewód symetryczny (dwa odcinki , tam i wewte). Nie ma mowy o dopasowaniu, ale eksperymentujesz.....