Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Eltrox Hurton
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Mikrokomputer COBRA 1

coberr 24 Aug 2021 22:57 184167 862
  • #841
    coberr
    Level 19  
    andrzejlisek wrote:
    Jeżeli w tym gnieździe jest praktycznie wszystko, to nie widzę najmniejszego sensu instalowania innego gniazda,


    sęk w tym - ze do zlącza nie jest podlączone wszystko - zapomniano m.in. o najważniejszej linii - jaką jest linia zasilania lub linia RESET.
    do tego - jak ktoś sobie przeanalizuje oryginalne artykuły z AV - w opisie gniazda są aż cztery błedy - juz nie pamietam teraz. Nalezy przy tym uważać.

    Cobra AV część 7 (schemat str. 16)

    Jest: Linia A9 na pinie 14A (13A wolny)
    powinno być: Linia A9 na pinie 13A (14A wolny)

    Jest: Pin 15A: wolny
    powinno być: Pin 15A: GND

    Jest: Pin 32A: wolny
    powinno być: Pin 32A: GND

    Jest: Pin 27B: wolny
    powinno być: Pin 27B: GND

    ja, ostatnio naprawiając oraz modyfikując pewną oryginalną cobrę dołożyłem do zlącza krawędziowego dwie linie:

    Pin 21A - RESET\ (możliwie najbliżej procesora)
    Pin 7A, 8A - VCC (do zasilania zewn. kardridźa - w miarę bezpiecznie i daleko od pozostałych pinów)
    Taką modyfikację uwzględnił bodajze w swojej przelotce Zdzisiek)

    należy również pamiętac o tym - ze COBRA została tak zaprojektowana - aby głownym zarządcą byl Z80 COBRY.
    nie ma możliwości przejecia magistrali przez urządzenia zewnętrzne -a tym samym wprowadzenia linii wszystkich magistrali: danych adresowej oraz sterującej - w stan wysokiej impedancji.

    Złącze 64pin jest ogólnie ok. ale nie do końca zgodzę się z wypowidzią Zdziska - odnośnie okrajania złącza .
    Myśle ze ma to sens - jesli naprawde logicznie przeanalizuje sie wymagane/zbędne sygnały oraz ich rozmieszczenie.

    mysle ze warto wziąć pod uwagę fakt, że wiele osób ma w swoich zapasach całe stada róznych złącz (np.zgodnych z IDC) / taśm /przewodów łączących oecetowych i peceto-podobnych i chciałoby takie zachomikowane "przydasie"zużyć. Są one niejednokrotnie tańsze i łatwiej dostępne (i często w większym asortymencie oraz różnorodności).

    Warto projektowac równiez pod to i trzymać sie standardów złącz zgodnych z PECETami :) (bardzo ogólnie to ujmując). Oczywiscie warto odchodzic od złącz ELTRY - mimo , że dośc dobre ale już coraz gorzej dostępne:)

    Jako ciekawostke równiez podam - moze kogos to zainteresuje - oryginalne złącze COBRY (ELTRA) jest oparte na rastrze 2,54mm - zatem bez problemu wlezie w nie zwykła czarna listwa (gniazdo) typu GOLDPIN - to tak - gdyby ktoś nie posiadał żeńskiego złącza ELTRY.

    Gdy budowalem swojego "kynarowca" - udało mnie się zmiescić absolutnie wszystkie niezbędne sygnały - wlącznie z masą i VCC na złączu 50-pinowym. W wyniku czego mogłem bez problemu użyć od razu kiedys zakupionych złącz IDC -do połączenia płytek - to taki tylko przykład. Ale wydaje mnie sie ze warto wziąć to pod uwagę.

    Co do błędów znalezionych w AV ( tekst , schematy, opisy, oscylogramy, rysunki płytek) jest ich dobre kilkanaście - ząś gdyby się dokładniej wgryźć w temat - okazałoby sie, że jest ich kilkadziesiąt - podejrzewam w granicach 30-40).
    (to taka informacja - jesli kogos to interesuje)
  • Eltrox Hurton
  • #842
    sq2bvn
    Level 14  
    Czy jest jakaś wizja jak miałoby wyglądać prawidłowe złącze? Właśnie rysuję zdalną ładowarkę debadźer do systemu i w sumie bym dostosował się do już jedynej i słusznej wersji złącza - takie samo dałbym do COBRA Studio.
  • #844
    sq2bvn
    Level 14  
    coberr wrote:
    usystematyzowania tego co juz jest


    Czy to już jest to gdzieś usystematyzowane?

    Dodano po 7 [godziny] 9 [minuty]:

    atmeg8 wrote:
    O stacjai FDD będę myślał .


    Zobacz FDD - jakie to proste. Na tej samej ATMEGA aż prosi się zrobić MULTI_IO kartridża...

    Mikrokomputer COBRA 1 Mikrokomputer COBRA 1

    Można też użyć specjalizowanego układu np. DP8473. Są one dostępne na Ali.

    Tu jest przykład jak tym sterować ADRUINO.
    https://github.com/dhansel/ArduinoFDC
  • Eltrox Hurton
  • #846
    sq2bvn
    Level 14  
    coberr wrote:
    nie bardzo


    No to może zbierz w całość swoją wiedzę w jakiejś infografice... myślę, że masz jedno z największych tu kobra-stażów.
  • #847
    coberr
    Level 19  
    sq2bvn wrote:
    No to może zbierz w całość swoją wiedzę w jakiejś infografice... myślę, że masz jedno z największych tu kobra-stażów.


    Kiedyś tak sie zastanawiałem nad stworzeniem takiej listy ale już powstało tyle poprawionych "COBR" ze nie wiem czy ma to jeszcze sens.
    Oryginałow nie ma aż tylu , żeby był z tym jakiś potworny problem.

    Co do stazu - to mysle ze największy staż w tworzeniu sprzetu i oprogramowania ma tu chyba zdecydowanie kol. Zdzisiek :)
    Bez Niego - ten komputer by nie istniał w takiej formie jak obecnie.
  • #848
    wieswas
    Level 33  
    Napisałem w kodzie maszynowym Z-80 prostą grę TENIS na wzór dawnej gry telewizyjnej na AY-3-8500. Gra się do 10 zdobytych punktów.
    Zawiera się w adresach COBRY od 5000 do 55CC czyli 1484 bajty
    Adres startowy 5000 hex
    Pytanie: dla programów w kodzie maszynowym jaki jest optymalny obszar pamięci, aby nie kolidował z rozbudowywanym oprogramowaniem systemowym ?
    Mikrokomputer COBRA 1 Mikrokomputer COBRA 1
  • #849
    zdzis_ek
    Level 15  
    Według mojej wiedzy obszar wolnej pamięci do pisania swoich programów maszynowych mieści się w zakresie od 0000h do prawie C000.
    Sam program "Monitor Cobra 1" zaczyna się od adresu C000h, ale w momencie startu komputera program monitora przed samym C000h umieszcza swoje zmienne.
    Nie pamiętam dokładnie ile, chyba 32 bajty.
    Wychodzi jakieś prawie 48kB wolnej pamięci pod pisanie swoich programów maszynowych.
    Inaczej ma się sprawa pisania programów w Basic.
    Tak, że spokojnie możesz pisać swoje programy maszynowe od adresu 0000h, nie jak teraz to robisz od adresu 5000h.
  • #850
    coberr
    Level 19  
    ja bym tu dodał jeszcze specyficzny przypadek (chociaż już dzisiaj mało spotykany i raczej nie powinno być z tym problemu).

    W czasach początków cobry - ludzie mieli rozne rozmiary pamieci RAM - nie to co dzisiaj (48KB).
    Efekt byl taki - ze jesli ktoś miał 16KB RAM - dekoder COBRY powielał to na trzy obszary - w efekcie na koncu każdego obszaru powinien być widziany ten "mini obszar" ze zmiennymi.

    Jesli ktoś miał 32KB pamieci - to bank "0" (16KB) był cały wolny - zaś kolejne 1 i 2 - były ze soba powielane - tak aby były widoczne przed obszarem C000h.


    Wydaje mnie sie zatem - ze jesli piszesz sobie programy w assemblerze - to masz dwa wyjscia:

    1. pisać te programy jako w pelni relokowalne (np z wykorzystaniem instrukcji krótkich skoków)
    2. najlepiej wykorzystać pierwsze 16KB pamieci.(z uwzględnieniem tych kilkudziesięciu bajtów na końcu) jesli program jest dłuższy niz 16 KB - no to trudno .

    ale generalnie cobra jest tak mało popularna - a jesli juz ktoś ją posiada to i tak w wiekszosci przypadkow ma 48KB RAM - ze nie powinienes mieć z tym problemow.

    Jedynie jesli chcesz aby w jakiś sposób twoj program wspólpracował z BASICem - nalezy pamietać o adresach przez niego (i programy) uzywanych.
  • #851
    zdzis_ek
    Level 15  
    Trzeba jeszcze wspomnieć, że start mikroprocesora Z80CPU po załączeniu zasilania, czy też resecie rozpoczyna się czytaniem instrukcji (programu)
    od adresu 0000h.
    Wydawać by się mogło, że tam zawsze jest umieszczony program startujący komputera i nie można od tego adresu pisać swoich programów.
    Nic bardziej mylnego, Cobra1 posiada oszusta adresowego, dzięki któremu startuje od adresu C000h.
    Pamięci dynamiczne 16kilo-bitowe wymagają kilku napięć zasilania i chyba raczej mało kto z nich korzystał.
    Ja w tamtych latach od razu montowałem pamięci 64 kilo-bitowe.
    Zakładając, że mamy na pokładzie 48kB łatwo jest policzyć ile mamy wolnej przestrzeni na swoje programy.
    Wystarczy uruchomić Basic i wpisać komendę "PRINT MEM", wyświetli nam się liczba wolnej przestrzeni dla Basic.
    Wynosi ona 31701 bajty, co w zapisie hex jest to 7BD5h.
    Programy pisane w Basic są umieszczane od adresu 4000h, dodając do tego 7BD5h (wolnej pamięci) otrzymamy wartość BBD5h.
    Jest to góry adres wolnej pamięci.
    Zamieniając zapis hex na dec otrzymamy liczbę wolnych bajtów na nasze programy licząc od adresu 0.
    BBD5 = 48085 bajty.
  • #852
    sq2bvn
    Level 14  
    wieswas wrote:
    Gra się do 10 zdobytych punktów.
    Zawiera się w adresach COBRY od 5000 do 55CC


    Grę udało mi się zapakować do kartridża i uruchomić.





    Zrobiłem wsad do EPROM. Całość kompiluję asemblerem z SDCC. Grę uruchamia się poleceniem G c740
    Teoretycznie mógłbyś wkleić zamiast drugiego bloku swój kod mnemoniczny i skompilować całość. Wówczas komentarze i etykiety ułatwiłyby zrozumienie kodu.

    Na moim egzemplarzu COBRA1 zauważyłem, że paletki przesuwają się bardzo wolno a jedna ,od której odlatuje piłka, jest całkiem zablokowana. Dodatkowo, u mnie nie ma dźwięku. Jakbyś miał ochotę mogę podpowiedzieć jak do gry dodać dźwięki na układ dźwiękowy AY. Wystarczy zmodyfikować plik tenis.s - a kompilację uruchamiać make.bat . Oczywiście trzeba mieć zainstalowane SDCC.

    Code: c
    Log in, to see the code


    Wszystkie pliki tenisa SDCC.

    COBRA-TENI..DCC.ZIP Download (39.6 kB)
  • #853
    wieswas
    Level 33  
    Na końcu listingu programu podałem informację, że po odbiciu piłki rakietka staje się nieaktywna, a aktywna staje się rakietka przeciwnika. Wynika to z konstrukcji klawiatury, która po naciśnięciu równocześnie dwóch klawiszy odczytuje ten klawisz, który jest wcześniej w szeregu lub zwraca kod niebędący żadnym z wciśniętych klawiszy.
    Szybkość ruchu także opisałem w uwagach na końcu listingu.
    Aby przyspieszyć grę wystarczy zmienić zawartość adresu 51A8 z obecnej wartości 02hex na 01hex lub całkiem pominąć podprogram TIME zmieniając zawartość agresu 51A7 z 06hex na C9hex. Oczywiście to opóźnienie dotyczy obiegu całej pętli ( odczyt wćiśniętego klawisza i ewentualny jeden krok rakietki oraz jeden krok ruchu piłki)
    Szybsza będzie zarówno rakietka jak i piłka.
    Dźwięk jest zgodny z najnowszą wersją emulatora COBRY na PC. [D3,FE OUT(FE),A]
    Chciałbym zapytać, czy w emulatorze COBRY jest też emulowana obsługa układu AY ?
  • #854
    andrzejlisek
    Level 28  
    wieswas wrote:
    Chciałbym zapytać, czy w emulatorze COBRY jest też emulowana obsługa układu AY ?


    Nie ma układu AY w emulatorze.

    Czy jest wypracowany jakiś standard, czy co jeden to inaczej podłączył?
  • #855
    sq2bvn
    Level 14  
    andrzejlisek wrote:
    Czy jest wypracowany jakiś standard, czy co jeden to inaczej podłączył?


    W moim rozwiązaniu jest tak jak w Spectrum.

    Dodano po 1 [minuty]:

    wieswas wrote:
    Dźwięk jest zgodny z najnowszą wersją emulatora COBRY na PC. [D3,FE OUT(FE),A]


    U mnie nie ma dźwięku w grze. Jak jest uruchomiony monitor, mam dźwięk od klawiszy.
    Nie rozumiem czemu tak jest.

    Dodano po 5 [minuty]:

    andrzejlisek wrote:
    Nie ma układu AY w emulatorze.


    Gdzieś widziałem bibliotekę na PC do emulacji AY...
  • #856
    wieswas
    Level 33  
    Do "sq2bvn"
    Emulator COBRY ma uproszczoną procedurę dźwięku w stosunku do ZX SPECTRUM, to znaczy programy dźwiękowe ZX SPECTRUM są prawidłowo odtwarzane na COBRZE, ale odwrotnie to nie działa, ponieważ ZX SPECTRUM korzysta z tego samego numeru portu OUT(FE),A ale dodatkowo sprawdza stan 4 bitu akumulatora. Musi on być zmieniany co drugie wywolanie rozkazu OUT(FE),A raz 1 raz 0 raz 1 raz 0...
    Ten port FE w ZX SPECTRUM jest wykorzystany równocześnie do zapisu danych na magnetofon, zmianę atrybutów ramiki, np.koloru ramki podczas zapisu danych. Dlatego też w ZX SPECTRUM istotne jest jakie stany mają poszczególne bity akumulatora w chwili wywołania rozkazu OUT(FE),A. Dla dźwięku istotny jest jedynia 4 bit, ale musi on być naprzemiam 1 i 0.
    COBRA wykorzystuje do zapisu na magnetofon inny numer portu wyjściowego (1B), więc można było uprościć procedurę dźwięku.
    W emulatorze COBRY zawartość akumulatora nie jest sprawdzana, więc upraczcza to procedurę dźwięku. Każde wywołanie rozkazu OUT(FE),A wykonuje odwrócenie stanu wyjścia głośnikowego z 1 na 0 i odwrotnie.
    Pisanie programów z obsługą dźwięku jest wówczas prostsze. Akumulator w czasie grania dźwięku może zawierać inne, dowolne dane.
    Okupione jest to jednak kompatybilnością jednostronną: programy z ZX SPECTRUM na COBRE a nie odwrotnie

    Pisząc kolejne programy postaram się rozbudować procedurę dźwięku, aby przed wywołaniem rozkazu OUT(FE),A zmienić akumulator A na A' (08hex EX AF,AF'), sprawdzić czy 4 bit akumulatora był 1 czy zerem (CB,67hex BIT 4,A) i ustawić odwrotnie tzn. (CB,E7hex SET 4,A gdy był 0, lub (CB,A7hex RES 4,A gdy byl 1), a następnie wysłać zawartość akumulatora na port FE (D3,FEhex OUT(FE),A) i znów zamienić A z A' (08hex EX A,A') .
    Dla obecnego emulatora nie będzie to miało żadsnego znaczenia, bo i tak nie sprawdza 4 bitu, zaś dla emulatora w pełni zgodnego z ZX SPECTRUM, lub dla COBRY z hardwarem układu dźwiękowego zgodnym w pełni z ZX SPECTRUM dźwięk powinien działać.
    Użytkownicy oryginalnej COBRY, w której odtwarzany jest tylko BEEP mogą dekodować 4 bit portu FE i też powinno działać
  • #857
    sq2bvn
    Level 14  
    wieswas wrote:
    Emulator COBRY ma uproszczoną procedurę dźwięku w stosunku do ZX SPECTRUM, to znaczy programy dźwiękowe ZX SPECTRUM są prawidłowo odtwarzane na COBRZE, ale odwrotnie to nie działa, ponieważ ZX SPECTRUM korzysta z tego samego numeru portu OUT(FE),A ale dodatkowo sprawdza stan 4 bitu akumulatora. Musi on być zmieniany co drugie wywolanie rozkazu OUT(FE),A raz 1 raz 0 raz 1 raz 0...


    Miałem na myśli obsługę układu AY-3-8910. Zdzis_ek ma AY-3-8912 ale ten jest drogi i trudno dostępny. Mój jest z Ali i nie był drogi. Dodatkowo pełno ich jest w sprzedaży więc można komponować na ten syntezatorek. Myślałem o konwersji na bibliotekę ARMa by udźwiękowić swoje projekty na 32 bity...

    Tak jak jest na schemacie poniżej.
    AY.pdf Download (97.36 kB)

    A tak wygląda test zagrania na tym układzie. Sprawdzone na moim egzemplarzu :)
    Code: avrasm
    Log in, to see the code



    Dzięki temu gra może mieć fajne dźwięki. Same sample można robić za pomocą Vortex Tracker II.

    https://www.youtube.com/watch?v=hHiCYjGBJrE
    https://www.youtube.com/watch?v=uWfMPqd3WxY
    https://www.youtube.com/watch?v=Dmhtc5S4atU


    Wiadomo, że istnieją co najmniej 2 egzemplarze co odtwarzają dźwięki na AY. Można przyjąć, że to byłby taki AYowy standard. Gdzieś wcześniej w wątku jest wideo z egzemplarzem COBRA1 kolegi zdzis_ek, która gra właśnie na AY. Moja COBRA1 gra podobnie.

    Tutaj jest strona poświęcona PT3 i tam jest peeeełno informacji.

    https://bulba.untergrund.net/progr_e.htm

    Też jest tam jak odtwarzać dźwięki PT3 na PC z poziomu programu emulatorów.
    "Site author Sergey Bulba" odpisuje i udziela porad. Mnie odpisał i nawet dostałem kod jak weryfikować czy blok danych to muzyczka czy coś innego. Sergey używa angielskiego.


    Mój egzemplarz COBRA1 ma źródło przerwań INT i mogę odtwarzać dźwięki w tle prostym ustawieniem bitu w rejestrze kontrolnym dźwięku. Ułatwia to też obsługę klawiatury bowiem klawiatura chodzi bardziej równo.

    Swoją drogą ogłoszono, że zakończył życie twórca ZX Spectrum w wieku 81 lat i do końca robił projekty.
  • #858
    andrzejlisek
    Level 28  
    Patrząc na kod źródłowy emulatora i powoli przypominając sobie, jak to było, widzę, że zapis na magnetofon jest na porcie 1C, a nie 1B.

    Generowanie dźwięku faktycznie polega na zapisie na port FE, liczy się sam fakt zapisania czegokolwiek na FC, każde zapisanie zmienia stan generatora na przeciwny i wytwarzanie dźwieku z polega na samym zapisie z określoną częstotliwośią.

    Dodatkowo, jest jeszcze drugi generator, w którym można zapisać na port 00 lub 08 i tutaj jest istotne, czy zapisywana wartość jest 0 czy nie-0. W tym przypadku, wytwarzanie dźwięku polega na cyklicznym zapisywaniu wartości 0 lub innej niż 0. Powtórzenie zapisu 0 bądź nie-0 nie wpływa na dźwięk.

    Pierwszy generator już nie pamiętam na użytek czego był potrzebny, ten drugi generator był zrobiony pod katarynkę w którejś wersji menu Zdzis_ka.

    Nie wiem, czy będę miał możliwość w najbliższym czasie, ale będę miał to na uwadze, dziękuję za materiały odnośnie AY.

    Nie jest problemem, jak dwa różne generatory są pod tym samym adresem i jest konflikt. W tym przypadku można dodać w opcjach wybór rodzaju generatora.

    W międzyczasie trafiłem na dwa filmiki przedstawiające drukarkę Mera-Blonie D-100, obsługiwaną w emulatorze:
    https://www.youtube.com/watch?v=RKiEsexNDNc
    https://www.youtube.com/watch?v=bqsN3o29IfU
    Sposób prowadzenia taśmy barwiącej bardzo przypomina maszynę do pisania.
  • #859
    sq2bvn
    Level 14  
    andrzejlisek wrote:
    Nie wiem, czy będę miał możliwość w najbliższym czasie, ale będę miał to na uwadze, dziękuję za materiały odnośnie AY.


    Istnieje też player plików PT3 na COBRA1. Dzięki Sergeyowi udało się to uruchomić również na COBRA1.
  • #860
    sq2bvn
    Level 14  
    wieswas wrote:
    Trochę odbiegnę od obecnie dyskutowanego wątku zamieszczając prostą grę zręcznościową: PELOTA, napisaną bezpośrednio w kodzie maszynowym Z-80
    Pierwsze podejście było zbyt ambitne.


    Uruchomiłem tę grę na swoim egzemplarzu. Tryka całkiem nieźle :)



    Wsad do kartridża tutaj...

    PELOTA.zip Download (39.25 kB)

    Uruchomienie G c730
  • #861
    zdzis_ek
    Level 15  
    Ja również zapakowałem grę "Pelota" i grę "Tenis" do wsadu 8M2.
    Mikrokomputer COBRA 1
    Głównie chodziło mi aby w tym wsadzie umieścić program do sterowania kostką LED "Cube 4 x 4 x 4", zamiar się powiódł.
    Okazało się jednak, że nie umieściłem we wsadzie do semigrafiki oryginalnego generatora znaków do Cobry1.
    Widać to poniżej, "wskaż różnice między obrazkami":
    Mikrokomputer COBRA 1 Mikrokomputer COBRA 1
    Dodatkowo byłem przekonany, że pozostałą część pamięci wypełnia generator podstawowy, niestety nie.
    Pozostała pamięć wypełniona jest jakimś zestawem znaków z menu, już nie wiem jakiego.
    W tym wypadku gra "Pelota" jest wyświetlana tak:
    Mikrokomputer COBRA 1
    Dodałem oryginalny generator semigrafiki i pozostałą część wolnej pamięci eprom wypełniłem tym generatorem.
    Mając wolne gniazdo cartridge mogłem w nim umieścić kostkę Led Cube.
    Sfilmowałem całe to wydarzenie, niestety użyłem kiepskiej jakości aparatu do filmowania.
    Strasznie "trzepie" obrazem.

    Trudno jest filmować patrząc co się filmuje i jednocześnie zerkać na klawiaturę.
    Może gdybym miał zeza byłoby nieco łatwiej :)
    Ale jest jak jest, w załączniku pliki do pobrania.
  • #862
    andrzejlisek
    Level 28  
    zdzis_ek wrote:
    Trudno jest filmować patrząc co się filmuje i jednocześnie zerkać na klawiaturę.

    To prawda, jednak w tym przypadku kamera mogłaby być na statywie, a jak nie masz statywu, to warto zrobić jego substytut z książek, pudełek itp.
  • #863
    zdzis_ek
    Level 15  
    Posiadam mały statyw ( moja produkcja), filmowałem niestety z "ręki".
    Mogłem również filmować smartfonem (lepsza jakość), tak się jednak nie stało.
    Filmik nie będzie startował w żadnych konkursach, chyba, że w kategorii, jak nie powinno się filmować :)