Autor Wątek: Ktoś pomoże rozkminić krótki program w formacie TZX lub Z80 dla celów R&D?  (Przeczytany 7310 razy)

damik

  • Fresh rosin sniffer ;)
  • *****
  • Wiadomości: 2426
  • Miejsce pobytu:
    Generalnie Polska, głównie Bytom czasem Bielsko-Biała oraz okolice
  • ZX'owy i nie tylko...
Mam prośbę do wyjadaczy kodowania w ZX Spectrum, bo robię akurat przymiarkę do projektu nowego IF programowanego joysticka dla ZX81 ale program dla jest mnie mało czytelny w tej formie.
Chciałbym przerobić raczej chyba prosty program z ZX Spectrum pod ZX81 który zaprogramuje moją zmodyfikowaną wersję IF Joya od DK'Tronics.
Na podglądzie pliku Z80 jaki wygenerowałem emulatorem widać że kawałek jest chyba w basicu a reszta prawdopodobnie w assmie, ale mam za małą wiedzę i nie bardzo jestem też programistą by to dissasemblować w takiej formie by można było przerobić to na kod do ZX81 uwzględniający też nieco inną mapę klawiatury.
Dla kogoś to może być tylko chwila a ja musiałbym pewnie ryć tygodniami jakiś toolchain dla Speccy.

Jeśli ktoś uprzejmie mógłby mi to rozkminić na zwykły basic lub też kod w mnemonikach assembler'a Z80 to już resztę sobie chyba ogarnę  pod ZX81 lub ZX80 bo assembler Z80 nie był mi kiedyś tak zupełnie obcy.  ;)

Ktoś pomoże w tym temacie ?

« Ostatnia zmiana: 2022.03.23, 00:03:18 wysłana przez damik »
Wszystkiego po trochu: Schwarz, mydło i powidło... konsole, stare i nieco nowsze komputery oraz akcesoria i duperele.

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Bez wdawania się w to co robi - tylko wyciągnąłem ten kawałek kodu (2500 bajtów od 30000) i przepuściłem przez disassembler.

Jakbyś potrzebował coś więcej to wołaj ;)

damik

  • Fresh rosin sniffer ;)
  • *****
  • Wiadomości: 2426
  • Miejsce pobytu:
    Generalnie Polska, głównie Bytom czasem Bielsko-Biała oraz okolice
  • ZX'owy i nie tylko...
Dziękuję matofesi, to już coś na początek :)
Jeszcze gdybyś zasugerował mi jakiś sensowny emulator pod PC z debugerem i możliwością krokowego śledzenia wykonywanego kodu oraz podglądem ekranu Speccy w innym oknie.
Wszystkiego po trochu: Schwarz, mydło i powidło... konsole, stare i nieco nowsze komputery oraz akcesoria i duperele.

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Kod przeczyszczony.
Głównie "rozdłubałem" dane z końcówki - grafika, teksty itp., poprawiłem adresy, tablice adresów. Kod w tej chwili daje się assemblować poprawnie po zmianie adresów więc raczej wyłapałem wszystko ;)

Co do emu z debuggerem - nie wiem co ci polecić, bo właściwie nie używam. Używam czasem Fuse, które nie ma wygodnego debuggera ale za to bardzo dobrze emuluje. Pod windowsem to nawet nie wiem co ci podpowiedzieć.

damik

  • Fresh rosin sniffer ;)
  • *****
  • Wiadomości: 2426
  • Miejsce pobytu:
    Generalnie Polska, głównie Bytom czasem Bielsko-Biała oraz okolice
  • ZX'owy i nie tylko...
Super, dzięki wielkie.
Teraz to już jest bardziej przyswajalne.
Trochę są tam zagmatwane operacje na portach i/o do tego interface.
Generalnie próbuję wyczaić jak to do końca miało konfigurować to ustrojstwo, musi być gdzieś jakaś tablica kodów jakie wysyła program do tego urządzenia by zamapować konkretny klawisz.
Wszystkiego po trochu: Schwarz, mydło i powidło... konsole, stare i nieco nowsze komputery oraz akcesoria i duperele.

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
No to jeszcze trochę, ale tym razem to już wszystko - dalej nie chce mi się bawić ;)

"Rozkomentowałem" ci podstawowe rzeczy, zmieniłem niektóre etykiety.

Wychodzi mi, że główna część programująca interfejs to procedura l_76FE - pobiera tam dane z tablic l_7A9E i l_7AAF do których zapisuje dane wyskanowane w procedurze l_7675.

Całe programowanie jest dziwaczne - interfejs ma 17 różnych dolnych połówek portów na których słucha. Wysyła się na nie bity, które ma ustawiać/zerować na danych portach oraz (na górnej połówce adresu) górną połówkę adresu klawiatury. Ale nie do końca chce mi się wgryzać w ten kod - on tam robi jakąś kontrolę kolizji tak, żeby poprawnie obsługiwać kilka bitów z tego samego półwiersza klawiatury. Tyle, że w takiej sytuacji moim zdaniem ma za mało adresów, bo "kolizyjnych" kombinacji wyszło mi 20 ;)

Nie wiem co o tym sądzić, ale mam nadzieję, że coś z tego zrozumiesz ;)

damik

  • Fresh rosin sniffer ;)
  • *****
  • Wiadomości: 2426
  • Miejsce pobytu:
    Generalnie Polska, głównie Bytom czasem Bielsko-Biała oraz okolice
  • ZX'owy i nie tylko...
Wow, szybko działasz  :o
Mnie by to pewnie zajęło wiele dni zanim bym to jakoś rozczesał i pokomentował  ???
Dzięki raz jeszcze za update tego kodu.  :)
Wszystkiego po trochu: Schwarz, mydło i powidło... konsole, stare i nieco nowsze komputery oraz akcesoria i duperele.

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Dobra... usiłowałem to głębiej zrozumieć, ale nic mi z tego nie wynika ;)

Liczba kombinacji, które tam są robione jest masakryczna. Jedyna sensowna metoda to skopiowanie całej procedury od l_76FE aż do l_7A4C-1 oraz tablic l_7A9E i l_7AAF a następnie ustawienie tej drugiej zgodnie z oczekiwaniami procedury i call do l_76FE. A oczekiwania są takie, że w pierwszym z pary bajtów ma się znaleźć bajt z ustawionym wszystkim oprócz bitu da klawisza, który nas interesuje a w drugim górna połówka adresu klawiatury - np. dla klawisza D będzie to %11111011 czyli $FB i $FD (bo adres do $FDFE). Tablica ma 10 bajtów - po dwa dla każdego kierunku. Jeśli w "bitach" jest FF to jak rozumiem ten kierunek nie jest obsługiwany.

Ale czy to wszystko pomoże ci przerobić interface dla ZX81 to ja nie jestem pewien ;)

damik

  • Fresh rosin sniffer ;)
  • *****
  • Wiadomości: 2426
  • Miejsce pobytu:
    Generalnie Polska, głównie Bytom czasem Bielsko-Biała oraz okolice
  • ZX'owy i nie tylko...
Zobaczymy co z tego wyjdzie, najpierw muszę złożyć prototyp tego urządzenia a potem odgruzować moje stare książki i notatki do ZX81 wtedy pokombinować z uruchamianiem programu na realnym sprzęcie bo żaden emulator nie obsługuje raczej tego hardware.
Trzeba będzie przepisać na nowo interface użytkownika i podpiąć do tego procedury konfigurujące to ustrojstwo z oryginalnego kodu tak jak sugerowałeś.
W każdym razie mam już od czego zacząć bo mniej więcej teraz już wiem co gdzie tam jest w pierwotnym kodzie. :)
Wszystkiego po trochu: Schwarz, mydło i powidło... konsole, stare i nieco nowsze komputery oraz akcesoria i duperele.

ZX Freeq

  • *****
  • Wiadomości: 1833
  • Miejsce pobytu:
    Warszawa
Ja ostatnio używałem kombajnika RetroVirtualMachine. Jest tam debugger, pokazuje wszystkie rejestry, pamięć, można skakać co 1 adres, do breakpointów, co jedną klatkę itd.
ZX80|ZX81+16kB+PandAY|ZX 48k/+/128k+/+2/+2A/+3/Vega/Next|QL+QIDE|JS128|Timex 2048+2040|UK2086|FDD3000+3.5''|AY|ZX HD|Divide2k11/2k14|DivMMC/PicoDivSD|BetaDisk 128|Opus|Masakrator FM|If 1/2/Microdrv|Multiface 1|+2A\B SDI-1|SJS 1/2|ZX Printer|TZXDuino|+3 HxC USB|ZXUno|Omni
Z88|A500/600|PC200|Ent128

Gelip

  • *****
  • Wiadomości: 765
    • Sysprep WinXP SP2 64-bit for pure UEFI with ACPI, AHCI, NVMe, USB 3.x
Dziękuję matofesi, to już coś na początek :)
Jeszcze gdybyś zasugerował mi jakiś sensowny emulator pod PC z debugerem i możliwością krokowego śledzenia wykonywanego kodu oraz podglądem ekranu Speccy w innym oknie.
Spectaculator, EmuZWin
"Byte" Personal Computer
Брестское ПО средств вычислительной техники