Elektroda.pl
Elektroda.pl
X

Search our partners

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

Mikrokomputer COBRA 1

coberr 29 Apr 2021 13:45 174633 739
  • #721
    sajmosia
    Level 16  
    Czy jest gdzies opis formatu pliku REL ?
  • CSICSI
  • #722
    sq2bvn
    Level 12  
    sajmosia wrote:
    Czy jest gdzies opis formatu pliku REL ?


    No właśnie nie widzę opisu.
    *.rel jest skompilowanym plikiem asemblera do linkowania.

    Można uprościć sobie życie i zapisywać obraz w postaci pliku *.s i kazać kompilować do *.rel samemu SDCC.
    W ten sposób strzeżemy się przed ewentualną zmianą struktury pliku *.rel spowodowaną rozwojem samego SDCC.

    Może takie coś w pliku screen_1.asm:

    Code: x86asm
    Log in, to see the code



    gdzie blok .db jest blokiem danych o obrazie.
    Wówczas można obraz przekopiować do pamięci obrazu zwykłym memcpy();

    Code: c
    Log in, to see the code


    Wówczas w test.c

    Code: c
    Log in, to see the code





    Kompilowanie tak:

    Code: bash
    Log in, to see the code



    screen_1.rel powstaje w procesie kompilacji, ale jest tam kosmos. Chyba *asm będzie łatwiejszy.

    Robiąc grę tworzę tyle plików screen_* ile jest plansz i wszystko kompiluję razem. Plansze zostają w obszarze przeznaczonego dla kodu. Może lepsze wizje?

    Załączam mój kodek testowy.
    3a.zip Download (8.08 kB)
  • CSICSI
  • #724
    sq2bvn
    Level 12  
    sajmosia wrote:
    Dolozylem opcje exportu do asm i jako naglowek do C (*.h).


    Dzięki - super, majówka zapowiada się kiepsko - zimno i mokro. Więc spróbuję zrobić jakieś demo z takimi plikami.

    Swoją drogą pomyślałem sobie, że tą samą drogą można tworzyć obrazy ROM z programami BASIC.
    Czyli:
    Tworzę właściwy plik crt0.s
    Tworzę nagłówek z treścią interpretera BASIC również jako basic.s ale tutaj podaję dyrektywę org bo BASIC chyba będzie nierelokowalny (czyli kod zawiera skoki z adresowaniem absolutnym);
    Tworzę konwerterem blok tekstowy z programem BASICa;
    Linkuję i mam.


    Teoretycznie można by wręcz zautomatyzować generowanie treści cartridge, czyi te wszystkie loadery i podział na kawałki itd obsługiwać jednym narzędziem. Z tego co widzę sporo adresów jest absolutna więc można to robić wedle szablonu....




    Nie wiadomo czy BASIC może działać bez bloku monitora. Trzeba będzie to jakoś zbadać.


    Swoją drogąSTM32CubeIDE zrobiło mnie w trąbę, bo ustawiałem liczniki w konfiguratorze i nie było efektu. Okazało się, że ustawienia z konfiguratora nie przechodzą do kodu wynikowego.

    Dodano po 42 [minuty]:

    Plik *.asm nie kompiluje się bezbłędnie póki nie zmienię w nagłówku .global na .globl.
    Kiedy jest .global kompilator nie generuje pliku *.rel

    Dodano po 19 [minuty]:

    Mikrokomputer COBRA 1

    Co do pliku *.h tutaj wygodnym podejściem będzie kompilować blok danych jako plik *.c, a w pliku nagłówkowym *.h że jest to extern. Czemu? Bo wówczas można linkować obrazek z wieloma plikami *.c i nie będzie powtórzeń tego samego bloku w kodzie wynikowym...

    Sugerowałbym dać w screen_1.c

    Code: c
    Log in, to see the code



    Natomiast w screen_1.h

    Code: c
    Log in, to see the code



    W procesie kompilacji blok danych pójdzie do obiektu screen_1.rel i może też trafić do biblioteki, natomiast screen_1.h można dodawać tyle razy ile się chce a program będzie wciąż pracował na tej samej jedynej kopii bloku danych.
  • #725
    sq2bvn
    Level 12  
    Jak widać na obrazku, umieszczenie bloku danych zaraportowano w pliku screen_1.lst - jest tam całe 0x300 bajtów, czyli tyle ile miało być.

    Mikrokomputer COBRA 1
  • #726
    sajmosia
    Level 16  
    Ciesze sie, ze dziala :)

    co do zmiany "global" na "globl" to mozna zrobic samemu w pliku "FrmMain.cs" linia 233.

    Pozdr.
  • #728
    zdzis_ek
    Level 15  
    Quote:
    Nie wiadomo czy BASIC może działać bez bloku monitora. Trzeba będzie to jakoś zbadać.


    Basic nie będzie działał.
    Już nawet sama obsługa klawiatury odwołuje się do procedur w monitorze.
  • #730
    sq2bvn
    Level 12  
    Witam ponownie,
    trochę potestowałem omawiane procedury generowania plansz i ogólnie to działa.
    Program testowy dodałem do postu. Co ciekawe po skompilowaniu plik *.rel z *.asm i *.c jest identyczny, jeśli doda się te znaczniki z nagłówków - one są zerowe i jak ich nie ma też się kompiluje. Nie ustaliłem jeszcze po co one są.

    4a3.zip Download (40.68 kB)

    Kobrowcy mogą sobie załadować BINa do cartridge. Program wykonuje się prawidłowo na moim egzemplarzu. Ewentualnie proszę o info jeśli na klasycznej płytce są jakieś problemy. Niestety problem kresek trochę przeszkadza :(



    Wykonanie animacji dzięki programowi do generowania ekranów to kilka chwil edycji i już gotowe.

    Fajnie, że dodałeś te zmiany - wyprzedziłeś mnie :) Ja zdążyłem zmienić ten .globl. Teraz można porównać pliki wynikowe, czy ładnie wchodzą do projektu testowej animacji :) Mamy kawałek CobraAPI :)

    Oto jak tryka test na lokalnym COBRA 1.

    [img-0] Mikrokomputer COBRA 1 Mikrokomputer COBRA 1

    No to teraz przydałoby się zrobić uploader BASIC.
    Wizja jest taka:
    - program PC skonwertuje BIN BASICa na tablicę, później SDCC zrobi z tego obiekt *.rel.
    - konwerter TXT - > blok BASIC zrobi program C, następnie SDCC zrobi z tego obiekt *.rel.
    - SDCC zrobi kod loadera z ROM do RAM;
    - skok do BASIC w RAM;
    - wykonanie RUN? A może da się automatycznie ten RUN wykonać?

    Wówczas:
    piszesz program BASIC w notatniku na PC,
    robisz cartridge z programem
    bawisz się do bólu
    ...
  • #731
    sq2bvn
    Level 12  
    Dodałem do testera blok zawierający monitor.
    Ciekawe zjawisko. Jak blok monitora 2048 jest od adresu 0xc000 to COBRA 1 uruchamia się. Jak dodam blok do testera i przenoszę go do adresu 0x0000 i tam skaczę maszyna zawiesza się.

    Czy ktoś może ma jakiś pomysł co jest źle zrobione?
  • #732
    sq2bvn
    Level 12  
    Jaki adres ma układ dźwiękowy AY? Mam tu fajną procedurę odtwarzającą sample jednakże nie bardzo wiadomo jaki adres będzie dobry dla układu AY?

    Code: c
    Log in, to see the code


    Analizując schemat wnioskuję, że będzie taka lista rejestrów specjalnych SFR.
    Ale gdzie zamontować układ dźwiękowy AY?
    COBRA będzie miała BEEP, katarynkę oraz AY.
  • #733
    coberr
    Level 19  
    A ja tym razem trochę z innej beczki.
    Jako , że walczę z uruchomieniem oryginalnej COBRY1 (już dziala) - nadarzyla się okazja do przetestowania
    Wyjścia VIDEO- które w swoich konstrukcjach Stosuje kol. Zdzisek.

    poniżej zamieszczam garść informacji oraz moich spostrzeżeń - bbyc może przydadzą się one osobom,
    które chciałyby dodać do swojej cobry wyjście video lub ew. zmodyfikować istniejące.

    Zastanawiam sie przy okazji - skąd pochodzi projekt tego układu - bo chyba raczej nie był tworzony specjalnie do cobry- a raczej
    został zaadaptowany do potrzeb. (tak podejrzewam)

    miałbym również prośbę - do osób używających obecnie cobrę z tym układem - aby przetestowały jeden specyficzny przypadek (opisany poniżej) na telewizorze kineskopowym.

    a zatem po kolei:

    1. rys. a przedstawia oryginalny ufragment układu COBRY1 (z moimi modyfikacjami w poostaci dodanych oznaczeń sygnałów)
    Tu tlumaczyć nic nie trzeba - sygnal video odkłada sie na rezystorze R12 będącym już częscią modulatora i moduluje amplitudowo przebieg w.cz.

    jedyne co można dodać to:
    CMIG - aktywny jedynie w fazie powrotu promienia elektronowego przy założeniu - że nie ma impulsu synchronizacji.
    CSYNC - Zespolony sygnal synchronizacji - równiez aktywny w fazie powrotu.
    CVID - sygnal VIDEO - aktywny jedynie w fazie wybierania.

    2.rys. b. - układ stosowany z powodzeniem przez kol. Zdziska.
    Tu nalezy się więcej wyjaśnien.
    Układ działa - jednak jesli przyjrzeć sie mu bliżej - wychodzi kilka problemów:

    - niewłaściwa (zbyt niska) wartośc sygnału lumninancji w fazie wybierania.
    - przy maksymalnej ustawionej jaskrawości oraz kontraście podczas wczytywania programu z magnetofonu na polu znakowym widoczne są przebijające pasy z pola ramki (BORDER)

    Czy ktoś mógłby to sprawdzić w takich warunkach na jakimś kineskopowcu? czy tylko u mnie występuje ten efekt?
    Podejrzewam zbyt duże wartości obu kondensatorów (już nie testowałem mniejszych wartości - np. 47uF czy nawet 10uF)
    może warto przetestować?
    -zastanawia mnie biegunowość kondensatorów w układzie (nie mierzylem jeszcze napięć)
    -monitor potrafi czasem zerwać synchronizację przy wczytywaniu programów.

    3. Rys. c) - moja propozycja modyfikacji dla oryginalnej cobry - mająca na celu "uniezaleznienie" ewentualnego wpływu obwodu modulatora na poziomy sygnału video.
    po prostu warto dodać kopie całej mattrycy rezystorowo diodowej i po sprawie. zaś sygnal z drugiej - podać juz na wejscie układu kształtującego sygnał video.

    I teraz nalezy sie dodatkowe wyjaśnienie do pkt. 2. chodzi o niewlasciwą wartośc poziomów sygnalów w każdej z faz.(wybieranie/wygaszanie)
    Aby trzymac "jakiś tam" standard - powinniśmy utrzymać na wejsciu video sygnał o wartości~1Vpp:
    0,3V - poziom imnp. synchronizacj H/V.
    0,7V - poziom sygn. luminancji w fazie wybierania.
    ~0,2V - przykładowy poziom sygnału MIG podczas wczytywania z magntetofonu (pow. poz. czerni)
    ( poziom ten nalezy dobrac tak- aby nie wpływal za bardzo na poziom czerni "całkowitego" sygnalu wizyjnego (niestety układ ten jest bardzo na to podatny)

    W oryginalnym układzie cobry daje sie w miarę wygodnie regulować niezależnie wszystkie poziomy sygnalów:
    R5 - poziom luminancji w fazie wybierania
    R6 - poziom sygnału MIG w fazie powrotu (wygaszania)
    R7 - poziom czerni oraz jednoczesnie impulsów synchronizacji (ten nalezy dobrac jako pierwszy - nawet przy odlączonych R5 i R6)

    W efekcie dobrane zostaly następujące wartości dla nowego wyjścia VIDEO
    R5A=150R ; R6A=820R ;R7A = 1,2K

    Proponuję potestowac - jeśli ktos zechce.
    Taka modyfikacja umożliwila uzyskanie ładnego jasnego i kontrastowwego obrazu na ustawionych regulatorach (kontrast /jaskrawość) na poziomie nieco poniżej 50%.
    Dodatrkowo - jakby zniknęły problemy z synchronizacją podczas wczytywania programów. (potestuję to jeszcze)

    I w zasadzie na koniec uwaga:
    wydaje mnie się- że w cobrze mógł zostać popelniony bląd.

    Oryginalne wartości - jak na rys. a. jednak coś mnie sie zdaje - że własciwie rezystory R5 i R7 powinny zostac zamienione miejscami (lub przynajmniej powinna zostac obniżona wartośc R5)
    Sygnał z modulatora równiez nie jest jakiś przesadnie "jaskrawy".

    Napiszcie co o tym sądzicie.

    (załącznik lepszej jakości - bo cos elektroda zżarła jakość)
  • #734
    sq2bvn
    Level 12  
    coberr wrote:
    Napiszcie co o tym sądzicie.


    Czy masz może jakąś normę na zespolony sygnał wizji?
    Żeby coś sensownego powiedzieć, trzeba będzie odnieść się standardu. W standardzie powinny być zdefiniowane wartości nominalne oraz tolerancje. Możliwe, że podejrzany sygnał spełnia wymogi. A te pasy to chyba powinny być, bo magnetofon i linia wideo jest na wspólnej linii - coś mi się przypomina. Też nad ty się zastanawiałem w czasie uruchomienia magnetofonu.

    Ogólnie interesują mnie metody generowania różnych obrazów i chętnie pownikam w zagadnienie.

    Z innej beczki:

    Czy ktoś wie jak to się dzieje że w ROMach zdzis_ka jest monitor i uruchamia się z automatu program plansza wyboru?
  • #735
    sajmosia
    Level 16  
    sq2bvn wrote:
    coberr wrote:
    Napiszcie co o tym sądzicie.


    Czy ktoś wie jak to się dzieje że w ROMach zdzis_ka jest monitor i uruchamia się z automatu program plansza wyboru?


    Zdzis_ek pewnie wie...
  • #736
    sq2bvn
    Level 12  
    sajmosia wrote:
    Zdzis_ek pewnie wie...


    Pomyślałem, że może dodałbym ten monitor jako deklarację do crt0.s
    Wówczas oprogramowanie zachowałoby kobrość na właściwym poziomie. Ala BIOS w PC.
    Dodatkowo, w C można by porobić wrappery do procedur w monitorze i w programach usera wołać oryginalne procedury monitora. Tym bardziej, że temat procedur monitora był już rozpoznawany. A może ma ktoś źródło w komentarzami autora do tego monitora?
  • #737
    coberr
    Level 19  
    sq2bvn wrote:

    Czy masz może jakąś normę na zespolony sygnał wizji?
    Żeby coś sensownego powiedzieć, trzeba będzie odnieść się standardu. W standardzie powinny być zdefiniowane wartości nominalne oraz tolerancje. Możliwe, że podejrzany sygnał spełnia wymogi. A te pasy to chyba powinny być, bo magnetofon i linia wideo jest na wspólnej linii - coś mi się przypomina. Też nad ty się zastanawiałem w czasie uruchomienia magnetofonu.


    norme podałem (pkt 3) - a na oscylogramach masz róznice - miedzy ukladem przed i po modyfikacjach.
  • #738
    sq2bvn
    Level 12  
    coberr wrote:
    norme podałem (pkt 3) - a na oscylogramach masz róznice - miedzy ukladem przed i po modyfikacjach.


    Myślałem o jakiejś normie PN-EN, albo coś takiego gdzie jest zapisane: to ma być 1V +/- 5% .... jakieś przebiegi itd... pewnie jest coś takiego. W poniedziałek poszukam takiej normy.
  • #739
    coberr
    Level 19  
    sq2bvn wrote:
    coberr wrote:
    norme podałem (pkt 3) - a na oscylogramach masz róznice - miedzy ukladem przed i po modyfikacjach.


    Myślałem o jakiejś normie PN-EN, albo coś takiego gdzie jest zapisane: to ma być 1V +/- 5% .... jakieś przebiegi itd... pewnie jest coś takiego. W poniedziałek poszukam takiej normy.


    nie musisz szukać - ja podalem to ze źródeł - zresztą z sygnalem VIDeo (stacja nadawcza TV ) akurat miałem sporo do czynienia :)

    Ma być 0,3V impulsy synchro; 0,7V - 100% white.
    Impulsow MIG sie nie czepiaj - bo te są dobrane tak, aby za bardzo nie szarpało obrazem. Zakurat w tej wersji układu (tranzystorowa) zmiana poziomu tych impulsów wpływa niestety znacząco na poziom czerni oraz bieli w okresie wybierania.
    Jak pisałem - podejrzewam . że winne są pojemności. (być moze za duże - nie wiem nie testowałem)
  • #740
    zdzis_ek
    Level 15  
    Quote:
    Z innej beczki:

    Czy ktoś wie jak to się dzieje że w ROMach zdzis_ka jest monitor i uruchamia się z automatu program plansza wyboru?


    Ostatnią instrukcją we wsadzie programu "monitor" jest instrukcja C9
    Wykonanie jej powoduje zgłoszenie się na ekranie programu monitor.
    Ja tą instrukcję zastępuję swoimi programami (przy już uruchomionym programie monitora, lecz jeszcze nie zgłaszającym się na ekranie)
    Samo przejście do zgłoszenia się programu monitora na ekranie (gdyby była taka konieczność) wymaga jedynie po wykonaniu moich podprogramów wpisania tego C9 które usunąłem.
    Może ten obrazek trochę pomoże, sama rozpiska nie jest jeszcze ukończona.
    Mikrokomputer COBRA 1

    Mam jeszcze wsad 6ML w którym po załączeniu komputerka pokazuje się na kilka sekund Logo Cobra1 i chwilę gra katarynka.
    Mikrokomputer COBRA 1
    Dodatkowo wsad wawiera jeszcze dwa programy, prosty test katarynki i prosty test generatorów znaków.
    Można to obejrzeć przed programowaniem pamięci w dołączonym emulatorze do wsadu.
    Mikrokomputer COBRA 1 Mikrokomputer COBRA 1
    Do pobrania w załącznikach.