Autor Wątek: Jupiter ACE - programowanie w ASM (TASM/ZASM)  (Przeczytany 9292 razy)

KWF

  • Moderator
  • *****
  • Wiadomości: 6823
  • Miejsce pobytu:
    trzecia planeta od Słońca
  • "I co ja robię tu, u-u, co Ty tutaj robisz ..."
    • Insta do lasownia
Jupiter ACE - programowanie w ASM (TASM/ZASM)
« dnia: 2020.10.05, 09:18:11 »
Większość materiałów na temat programowania w asemblerze odnosi się do archaicznego TASM (Telemark Assembler) i pod niego są szablony (templates) do generowania plików TAP dla Jupitera ACE. Co prawda TASM w do wersji 3.1 działa całkiem sprawnie pod DOSboxem, jednak jego używanie jest archeologią stosowaną. Ostatnia wersja TAMSa o numerze 3.2 działa z lini komend Windowsa, ale nie działa pod DOSboxem, więc poza kręgiem moich zainteresowań.

Osobiście do gustu bardziej przypadł mi ZASM, który jest ciągle rozwijany (najnowsza wersja pochodzi z września tego roku). Dlaczego ZASM? Ponieważ z automatu potrafi dodać sumę kontrolną do generowanych bloków TAP (na odpowiednim miejscu), a także dokleić odpowiedni nagłówek oraz dodać długość następnego bloku w pliku TAP. Aha, no i jest dla nieokienkowych.

Dokumentacja ZASM opisuje w jaki sposób generować pliki TAP (https://k1.spdns.de/Develop/Projects/zasm/Documentation/z92.htm) dla ZX Spectrum i Jupitera ACE. Opisuje ona różnicę między tymi formatami, ALE opis jest do wersji starszej niż 4.2 i nie działa poprawnie w nowszych wersjach kompilatora. Generowane tą metodą TAPy mają za długi nagłówek (o dwa bajty). Dla własnych celów stworzyłem sobie dwa szablony pod ZASMa 4.2.x, aby łatwo i wygodnie generować poprawne pliki TAP, które można wczytać do emulatora (w moim przypadku ZXSP).

DICT_template - szablon dla TAPa z definicjami nowych słów w FORTH; wczytywanie przez:
LOAD nazwa
BIN_template - szablon TAPa z kodem binarnym wczytywanym pod zadany adres w pamięci RAM; wczytywanie przez:
0 0 BLOAD nazwa
W ZIPie są dwa przykładowe pliki DICT.TAP i BIN.TAP wygenerowane z tych szablonów. Są to wersje rozwojowe i można je sobie dowolnie modyfikować, np. przez dodanie autostartu, czy łączenie wielu bloków w jeden plik.

Szablony przeniosłem na GitHuba, aby łatwiej nimi zarządzać.

https://github.com/McKlaud76/JACE-TAP-templates
« Ostatnia zmiana: 2020.10.13, 12:54:59 wysłana przez Klaud »
KWF
-----
R Tape loading error 0:1
Moje zabawki: https://github.com/McKlaud76

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4537
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: Jupiter ACE - programowanie w ASM (TASM/ZASM)
« Odpowiedź #1 dnia: 2020.10.05, 13:28:20 »
Dzięki wielkie, przyda się!

tooloud

  • *****
  • Wiadomości: 3185
  • Miejsce pobytu:
    Warszawa
  • mydłem go!
Odp: Jupiter ACE - programowanie w ASM (TASM/ZASM)
« Odpowiedź #2 dnia: 2020.10.05, 20:49:07 »
fajnie fajnie! jeszcze tylko to wczytać na Jupitera :)
dużo sprzętu mało czasu.

KWF

  • Moderator
  • *****
  • Wiadomości: 6823
  • Miejsce pobytu:
    trzecia planeta od Słońca
  • "I co ja robię tu, u-u, co Ty tutaj robisz ..."
    • Insta do lasownia
Odp: Jupiter ACE - programowanie w ASM (TASM/ZASM)
« Odpowiedź #3 dnia: 2020.10.05, 20:53:42 »
Eee, to już jesteśmy w domu ;) tap2tzx przeskaluje TAPa do TZXa z timingami ZX Spectrum i można wczytywać przez TZXduino :)
KWF
-----
R Tape loading error 0:1
Moje zabawki: https://github.com/McKlaud76

KWF

  • Moderator
  • *****
  • Wiadomości: 6823
  • Miejsce pobytu:
    trzecia planeta od Słońca
  • "I co ja robię tu, u-u, co Ty tutaj robisz ..."
    • Insta do lasownia
Odp: Jupiter ACE - programowanie w ASM (TASM/ZASM)
« Odpowiedź #4 dnia: 2020.10.08, 11:59:33 »
Do kompletu dołożyłem autostart:

AUTOSTART_template - szablon TAPa z autostartem; wczytywanie przez:
0 0 BLOAD autostart
Oraz przykładowe TAPy wygenerowane z tych szablonów.
« Ostatnia zmiana: 2020.10.13, 12:55:09 wysłana przez Klaud »
KWF
-----
R Tape loading error 0:1
Moje zabawki: https://github.com/McKlaud76

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: Jupiter ACE - programowanie w ASM (TASM/ZASM)
« Odpowiedź #5 dnia: 2020.10.08, 12:15:37 »
To ja tylko przypomnę dla lubiących pasmo: https://www.speccy.pl/forum/index.php?topic=5592.msg84984#msg84984

Niestety nie umiem tego przekompilować pod Windowsem.

KWF

  • Moderator
  • *****
  • Wiadomości: 6823
  • Miejsce pobytu:
    trzecia planeta od Słońca
  • "I co ja robię tu, u-u, co Ty tutaj robisz ..."
    • Insta do lasownia
Odp: Jupiter ACE - programowanie w ASM (TASM/ZASM)
« Odpowiedź #6 dnia: 2020.10.09, 08:43:29 »
I jeszcze garść przydatnych informacji:

--- Mapa pamięci
0000 - 1FFF = ROM
2000 - 23FF = 768 charmap + 256 PAD (CPU priority)
2400 - 27FF = 768 charmap + 256 PAD (Video priority)
2800 - 2BFF = 1KB charset (CPU priority)
2C00 - 2FFF = 1KB charset (Video priority)
3000 - 3BFF = RAM 1KB x 3 mirrors
3C00 - 3FFF = RAM 1KB
3C00 - FFFF = Expansion RAM (0-48KB)


--- Rejestry Z80 i ich wykorzystanie przez FORTHa
A,Flags     - Temporary
BC          - Temporary
DE          - Temporary
HL          - Temporary
IX          - System Variables ($3C00)
IY          - Interpreter Pointer
SP          - Return Stack Pointer (IP on top)
$3C3B       - Data Stack Pointer
RST n       - Used for core stack ops

KWF
-----
R Tape loading error 0:1
Moje zabawki: https://github.com/McKlaud76

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: Jupiter ACE - programowanie w ASM (TASM/ZASM)
« Odpowiedź #7 dnia: 2020.10.13, 08:47:04 »
Jakby komuś było potrzebne, to w załączniku przekompilowane dla Windows pasmo z moim patchem generującym TAPy dla Jupitera. Wywyołuje się np:
pasmo --jace zrodlo.asm wynik.tap

W efekcie daje TAPa którego podłączamy do emulatora (albo konwertujemy na tzx etc.) i wczytujemy przez
0 0 bload wynik

Jeśli w kodzie znajdowała się dyrektywa END to całość się załaduje i automatycznie uruchomi od tego adresu. Jeśli nie, to tylko załaduje od adresu z ORG.

Ten tryb nie nadaje się oczywiście do wszystkich zastosowań - przede wszystkim nie da się w ten sposób skompilować kodu osadzanego w słowniku FORTH. Potrzebna mi była metoda szybkiego generowania TAPów z demami do testowania i stąd właśnie ta poprawka.

Kod jest skompilowany statycznie przy użyciu MinGW - kompilacja innym kompilatorem da pewnie mniejsze EXE, ale to już wykracza poza moje umiejętności obsługi Windows ;)
« Ostatnia zmiana: 2022.04.26, 12:04:48 wysłana przez KWF »

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: Jupiter ACE - programowanie w ASM (TASM/ZASM)
« Odpowiedź #8 dnia: 2022.04.26, 10:52:15 »
Po dyskusjach o fizycznym wczytywaniu programów do Jupitera i procedurze konwersji przysiadłem i poprawiłem pasmo dodając do niego kolejny tryb generowania --jacex
Wywołanie tak jak dotychczas
pasmo --jacex zrodlo.asm wynik.tzx
(tak... w poprzednim poście parametry były podane w niepoprawnej kolejności ;)) (poprawione przez moderatora)

Plik wynikowy powinien mieć format "przeskalowany" do Jupitera i wgrywać się poprawnie na fizycznym sprzęcie przy użyciu "wgrywadełek" albo stosownego programu odtwarzającego TZXy.

Wczytanie (i uruchomienie) kodu to - jak dotychczas
0 0 bload wynik

W załączniku archiwum z patchem (uwaga - jakość kodu może wypalić wzrok ;)) oraz pasmo.exe skompilowane statycznie dla Windows.
« Ostatnia zmiana: 2022.04.26, 12:04:30 wysłana przez KWF »

tooloud

  • *****
  • Wiadomości: 3185
  • Miejsce pobytu:
    Warszawa
  • mydłem go!
Odp: Jupiter ACE - programowanie w ASM (TASM/ZASM)
« Odpowiedź #9 dnia: 2022.04.26, 15:10:35 »
czy ten sam plik daje radę wczytać w emulator?
dużo sprzętu mało czasu.

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: Jupiter ACE - programowanie w ASM (TASM/ZASM)
« Odpowiedź #10 dnia: 2022.04.26, 15:23:00 »
Oczywiście. Tylko jak podglądasz w "managerze taśmy" to śmiesznie wygląda bo tam są bloki z nietypowymi timingami i się pokazują jako "Turbo speed block" ;)

tooloud

  • *****
  • Wiadomości: 3185
  • Miejsce pobytu:
    Warszawa
  • mydłem go!
Odp: Jupiter ACE - programowanie w ASM (TASM/ZASM)
« Odpowiedź #11 dnia: 2022.04.26, 15:38:16 »
a to spoko, bo wychodzi, że jest to taki "all-in-one" czyli ten sam plik docelowo do użycia na prawdziwym sprzęcie można testować pod emulatorem. Aha - czy dobrze kojarzę, że masz EightyOne przerobiony czy "fabryczny"?
dużo sprzętu mało czasu.

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: Jupiter ACE - programowanie w ASM (TASM/ZASM)
« Odpowiedź #12 dnia: 2022.04.26, 15:48:57 »
Starsza wersja lekko przerobiona. Oryginalna nie obsługuje AY na portach ZX 128 - znaczy da się to włączyć, ale w Jupku po prostu nie działa. Poszukaj - wrzucałem tu gdzieś przekompilowaną wersję. Próbowałem skompilować nowszą, ale @SAJ zrobił tam jakiś magic, żeby to się kompilowało i ja nie umiem tego powtórzyć - windowsowe programy mnie nie lubią ;)

edit: Tu jest: https://www.speccy.pl/forum/index.php?topic=5656.msg85916#msg85916 :)

tooloud

  • *****
  • Wiadomości: 3185
  • Miejsce pobytu:
    Warszawa
  • mydłem go!
Odp: Jupiter ACE - programowanie w ASM (TASM/ZASM)
« Odpowiedź #13 dnia: 2022.04.26, 16:33:21 »
Dzięki, zaciągnąłem.
dużo sprzętu mało czasu.