Informacje dodatkowe     Informacje dodatkowe o Amidze


Komputer Amiga jest wprost idealną platformą do tworzenia i tesowania programów, napisanych
w asemblerze procesora Motorola 68000. Ten procesor posiadają Amigi 500, 500+, 600, 1000, 2000
oraz CDTV. Programy asemblera 68000 można przełożyć na kod procesora MC68020. Jest to bardzo
łatwe, gdyż mnemoniki i argumenty instrukcji dla obu tych procesorów są identyczne. Oczywiście pro-
cesor MC68020 posiada ponadto dodatkowe instrukcje, nieobsługiwane przez MC68000. W procesor
MC68020 są wyposażone Amigi 1200, 2500, CD32 i tańsze egzemplarze A3000. Jest wiele programów
przeznaczonych do tworzenia i testowania kodu asemblera MC68000 na Amidze, np. Master Seka 1.1
(kompilator z debugerem), czy Amiga Monitor 1.01-p (asembler/desasembler, umożliwia łatwe monito-
rowanie działania programów i podgląd zawartości pamięci). Ponadto można bez problemu przenosić
dane z Amigi na PC i odwrotnie, na dyskietce w formacie MS-DOS o pojemności 720 kB (lub 1.44 MB,
jeśli Amiga posiada stację dyskietek HD). W tym celu na Amidze, należy zamontować urządzenie
"PC0:" następującą mountlistą:

FileSystem = L:CrossDosFilesystem
Device = mfm.device
Flags = 1
Surfaces = 2
BlocksPerTrack = 9
Reserved = 1
Unit = 0
Mount = 1
Interleave = 0
LowCyl = 0
HighCyl = 79
Buffers = 5
BufMemType = 0
StackSize = 4096
Priority = 10
GlobVec = -1
DosType = 0x4D534400
Przedstawiona mountlista montuje urządzenie "PC0:" o pojemności
720 kB (DD). Aby zwiększyć pojemność do 1.44 MB (HD), należy
zmienić parametr "BlocksPerTrack = 18".

Mountlistę należy zapisać w pliku "DEVS:DOSDrivers/PC0".
Do zamontowania urządzenia "PC0:" niezbędne są pliki:
"DEVS:mfm.device" oraz "L:CrossDOSFileSystem".

Następnie w CLI trzeba wpisać polecenie "MOUNT PC0:".


Na komputerze PC również istnieją programy do tworzenia i testowania programów dla procesora
MC68000. Jest dostępne np. całe środowisko programistyczne o nazwie "IDE68K 2.21" (Integrated
Development Environment). Umożliwia ono pisanie programów w języku C i asemblerze dla pro-
cesorów: MC68000/68020/68881/68882/68332 (CPU32). Po kompilacji kodu asemblera 68000,
otrzymuje się plik ASCII (rozszerzenie ".HEX") z kodami szesnastkowymi instrukcji procesora.
Niestety nie można uzyskać pliku wykonywalnego dla Amigi. Ominąłem ten problem, pisząc dwa
skrypty w języku QBasic. Pierwszy "68000.BAS" zamienia plik ".HEX" z kodami szesnastkowymi
ASCII instrukcji procesora, na plik binarny z instrukcjami procesora. Drugi skrypt "AMIEXE.BAS"
zamienia ten plik binarny, na plik wykonywalny Amigi. W ten sposób otrzyma się plik wykonywalny
identyczny, jak ten z kompilatora "Master Seka 1.1". Nagłówek i koniec takiego pliku (64-bajty),
wygląda następująco:

000003F300000000000000020000000000000001xxxxxxxx00000001000003E9xxxxxxxx
INSTRUKCJE + DOPEŁNIENIE (bajty $00)
00000000000003EC00000000000003F2000003EB00000001000003F2

Takiego programu nie można uruchomić z dołączonej ikony (IconX). Po uruchomieniu programu
w systemie Workbench, widnieje on na liście procesów systemowych (wyświetlanej poleceniem
"STATUS FULL", wpisanym w CLI) i posiada następujące parametry:
Stack: 4096 bytes, Priority: 0, GV: 150.

xxxxxxxx - wartość binarna, obliczana według algorytmu:

   move.l #$nnnnnnn,D1
   move.l D1,D2
   lsr.l  #2,D2
   ror.l  #2,D1
   swap   D1
   rol.w  #8,D1
   tst.b  D1
   beq.s  A
   addq.l #1,D2
A: addq.l #1,D2
   move.l D2,$190000
   rts
    Funkcje rejestrów procesora:

D1 - wartość binarna, określająca rozmiar pliku z instrukcjami
(w bajtach). Jeśli plik zawiera liczbę bajtów niepodzielną przez 4,
to należy go uzupełnić bajtami $00 tak, aby jego rozmiar stał się
podzielny przez 4. Maksymalna wartość $0nnnnnnn przenoszona
do rejestru D1, nie powinna przekroczyć $03FFFFFF (67108863).

D2 - wartość xxxxxxxx.

Wartość xxxxxxxx można również obliczyć za pomocą skryptu QBasic, o nazwie "SYMEXE.BAS".
W zmiennej "size", należy podać rozmiar binarnego pliku z instrukcjami procesora (nie może być
większy niż 16777216 bajtów). Po uruchomieniu skryptu, zostanie wyświetlona wartość szesna-
stkowa 4-bajtów, będących poszukiwaną wartością xxxxxxxx.

Problemem przy przenoszeniu plików tekstowych (np. kodów źródłowych asemblera) z Amigi na PC
i odwrotnie, jest sposób zapisu końca każdej linii tekstu. Na Amidze koniec linii jest oznaczany bajtem
$0A, natomiast na PC są to dwa bajty $0D0A. Problem ten rozwiązałem pisząc dwa, proste skrypty
QBasic. Pierwszy "AMI-PC.BAS" tworzy z pliku tekstowego Amigi, plik tekstowy dla PC (dodaje bajt
$0D przed każdym bajtem $0A). Drugi "PC-AMI.BAS" zamienia plik tekstowy PC, na plik tekstowy
Amigi (usuwa każdy bajt $0D).

We wszystkich wymienionych wyżej skryptach QBasic, występują zmienne tekstowe:
src$ - zawiera ścieżkę dostępu do pliku źródłowego. Plik ten jest otwierany
           tylko do odczytu i nie są w nim dokonywane żadne zmiany.
dst$ - zawiera ścieżkę dostępu do pliku wynikowego, w którym
           ma być zapisany wynik działania danego skryptu.