Action! + asm.

Moje eksperymenty z Action! trwają i ten język programowania coraz bardziej mi się podoba. Po przeczytaniu „Assembly language and Action!” z Reference Manuala zacząłem się zastanawiać w jaki sposób łączyć ze sobą programy (binarne) w Action! i istniejące procedury w assemblerze. Są dwa sposoby: dla prostych procedur kod maszynowy 6502 można umieścić bezpośrednio w pliku źródłowym Action! w nawiasach [ ]. mads potrafi wygenerować listing, z którego taki żółtodziób jak ja może sobie skopiować kolejne rozkazy procesora i wstawić w nawias. Biorąc pod uwagę, że cała biblioteka runtime Action! jest tak zrobiona zastanawiałem się jak dołączyć bardziej skomplikowane procedury bez konieczności konwertowania ich do takiej postaci (o ile to w ogóle możliwe). Jakub na forum AOL mile mnie zaskoczył: wystarczy „skleić” pliki binarne np. za pomocą polecenia cat pod Linuksem (lub Cygwinem pod Windows).

Prosty przykład pokaże fajność tego połączenia, a wspomniany rozdział manuala wyjaśnia, że do procedury w asm można przekazać aż do 16 bajtów parametrów (poprzez akumulator A, rejestry X i Y i stronę zerową $A3-$AF):

ASMPROC.ASM:

org $600

lda #0
sta 710
rts

org $607

lda #52
sta 710
rts

ASMTEST.ACT:

include "H1:RUNTIME.ACT"

proc test1=$600()
proc test2=$607()

proc main()

card i

printe("Action! jest super !")

do
 test1()
 sound(0,121,10,6)
 for i=1 to 10000 do od

 test2()
 sound(0,50,10,6)
 for i=1 to 10000 do od
od

return

Po assemblacji łączymy oba pliki: cat ASMPROC.obx ASMTEST.BIN > ASMTEST.xex i gotowe.

Powiem krótko: cieszy mnie to niezmiernie :). Po 20-latach odkrywam na nowo jak niesamowitym urządzeniem było małe Atari… Połączenie Action! z assemblerem daje pełną swobodę i ogromne możliwości. Coś jak połączenie szkieletu w pythonie i modułów wymagających wydajności w C.