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

Klaud

  • Moderator
  • *****
  • Wiadomości: 5427
  • Miejsce pobytu:
    trzecia planeta od Słońca
  • KL
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 »
KL
-----
R Tape loading error 0:1

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4220
  • 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: 2879
  • 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.

Klaud

  • Moderator
  • *****
  • Wiadomości: 5427
  • Miejsce pobytu:
    trzecia planeta od Słońca
  • KL
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 :)
KL
-----
R Tape loading error 0:1

Klaud

  • Moderator
  • *****
  • Wiadomości: 5427
  • Miejsce pobytu:
    trzecia planeta od Słońca
  • KL
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 »
KL
-----
R Tape loading error 0:1

matofesi

  • *****
  • Wiadomości: 1814
  • 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.

Klaud

  • Moderator
  • *****
  • Wiadomości: 5427
  • Miejsce pobytu:
    trzecia planeta od Słońca
  • KL
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

KL
-----
R Tape loading error 0:1

matofesi

  • *****
  • Wiadomości: 1814
  • 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 wynik.tap zrodlo.asm

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 ;)