Odp: Początki z asemblerem na Atari 800 XL
Spoko.
Musisz się przyzwyczaić, że 'XXL vs Pin/Draco' to taki lokalny folklor.
Nic groźnego, oni tak mają :).
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
Tenebra na Atari ST/STE Wersja gry na duże atari.
Wyniki FujiCup 2023 Wyniki konkursu FujiCup na najlepszą grę dla 8-bit Atari w 2023 roku zostały ogłoszone!
TONY na małe Atari Nowa gra na małe Atari, w Hiresie, produkcja Rafała Dudka (brat XXL-a), Popmilo i Caruso.
Cosmic Hero 2 Bohater ratujący Ziemię w kryzysowej sytuacji powraca po 30 latach.
VI. Basque Tournament of Atari 2600 Kolejna relacja, wśród otrzymywanych od naszego przyjaciela Egoitza z Kraju Basków.
Strony Poprzednia 1 2
Zaloguj się lub zarejestruj by napisać odpowiedź
Spoko.
Musisz się przyzwyczaić, że 'XXL vs Pin/Draco' to taki lokalny folklor.
Nic groźnego, oni tak mają :).
w przypadku QA o ile dobrze pamiętam:
opt %00010101 - asemblacja do RAM
opt %00100101 - asemblacja do pliku
EDIT: Uważaj aby w przypadku asemblacji bezpośrednio do RAM obszar w który asemblujesz znajdował sie ponad MemHI, które to ustawia sie w oknie setup. W przeciwnym wypadku zniszczysz albo sam asembler albo dos-a albo bufor etykiet który tworzy QA tuż przed granicą MemHI.
Ostatnio edytowany przez seban (2017-07-13 12:00:51)
Lokalny folklor na poziomie tylko ubarwia wątek :)
Jak rozumiem polecenie opt... wydaje gdzieś tam z poziomu QA?
na początku programu
Jak rozumiem polecenie opt... wydaje gdzieś tam z poziomu QA?
Hmm, pomoże to: http://atarionline.pl/biblioteka/materi … mbler.djvu
Strona 19 opisuje parametry opt. Poza tym - lektura tajemnic atari na początek wystarczy. Z drobnymi modyfikacjami zadziała też kod z Ruszczyca (w instrukcji o ile pamiętam są opisane różnice w edytorach).
przy okazji innej dyskusji w tym miejscu:
http://www.atari.org.pl/forum/viewtopic … 05#p200105
... załączyłem dwa przykłady kodu które kompilują się bezpośrednio pod QA. Scroll kompiluje się bezpośrednio do RAM, a "Fly Dots" generuje plik wykonywalny DOS-u na dyskietkę (o ile nie jest zabezpieczone przed zapisem, bo wtedy Error 163 :P)
Zabawy ciąg dalszy. W Tajemnicach Atari, w jednym z artykułów jest tak napisane: "QA udostępnia dla uruchamianego programu osobny ekran, do którego można zaglądać w każdej chwili, także w trybie edycji."
Osobny ekran?
OPT 21
ORG 1152
LDA 712
STA 710
RTS
END
Poczyniłem taki program, wszystko się asembluje i uruchamia ale ja nie widzę efektu.. Pomocy Panie i Panowie.
Program zaczyna się od adresu 1152 czyli $0480 szesnastkowo. Upewnij się, że taki adres uruchomienia masz w menu Setup w QA.
Jak już uruchomisz, to cały ten program wykonuje się w czasie 0.0000079 sekundy, po czym wraca do QA. Dlatego nie zdążysz zauważyć jego rezultatu. Po uruchomieniu możesz natomiast przełączyć na tzw. ekran użytkownika, wciśnij w QA Shift+Control+Spacja.
@chicago: dodam tylko że to o co pytasz jest dokładnie wyjaśnione w instrukcji do QA, do której dwie osoby w tym wątku podawały link to tejże instrukcji. O "ekranie użytkownika" i sposobie jego "podejrzenia" napisano na stroni 37 podręcznika. Naprawdę warto przeczytać "podręcznik użytkownika".
Sorry, przepraszam, fakt,że instrukcję tylko przewertowałem. Ale program zasadniczo ogarnąłem już. Pytanie mam do tego programu z Tajemnic Atari:
OPT 21 opcje
ORG 1152 skąd
*--- deklaracje
ZEGAR EQU 20
RAMKA EQU 712
KLAW EQU 764
NIC EQU 255
*--- zapamiętaj kolor
LDX RAMKA
*--- mrugaj ramką
MRUGAJ LDA ZEGAR
STA RAMKA
*--- sprawdź klawisz
LDY KLAW
INY (255+1=0)
BEQ MRUGAJ
*--- skasuj klawisz
LDY #NIC
STY KLAW
*--- odtwórz kolor
STX RAMKA
*--- koniec
RTS
END
Te dwie linijki:
INY (255+1=0)
BEQ MRUGAJ
INY to jak rozumiem, zwiększa zawartość rejestru o 1. A jaką rolę pełni nawias: (255+1=0)? I jak wcześniej czytałem BEQ to skok warunkowy, gdy wartości są równe(polecenie porównujące CMP, którego tutaj nie ma).
Pozdrawiam
Ten nawias to tylko komentarz. BEQ oznacza skok, gdy wskaźnik Z = 0. Wskaźnik ten kasowany/ustawiany jest w wielu sytuacjach, jedną z nich jest CMP. W tym konkretnym przypadku skok do MRUGAJ nastąpi gdy dzięki INY rejestr Y osiągnie 0 (czyli właśnie 255+1).
Ostatnio edytowany przez larek (2017-07-20 21:21:40)
Czy te dwa polecenia są wykonywane przy każdym przebiegu programu? One występują po pętli MRUGAJ.
LDY #NIC
STY KLAW
Bo jak rozumiem
LDY KLAW ładuje do REJESTRU y LICZBĘ 255, następnie ona jest zwiększana o 1.
Cześć!
ta komórka pamięci 764, przechowuje kod ostatnio naciśniętego klawisza. Gdy nic nie jest wciśnięte to jest tam wartość 255. sekwencja
ldy #nic ; (nic=255)
sty klaw
daje taki efekt że po wyjściu z programu, mimo iż nacisnąłeś klawisz aby go przerwać.. nie spowoduje reakcji systemu operacyjnego/programu nadrzędnego (np. QA z którego uruchamiasz ten kod). Jest to jakby wyzerowanie bufora klawiatury (w tym wypadku 1-bajtowego bufora).
A jeżeli chodzi o:
ldy KLAW
iny
beq ...
to jest to trochę "optymalizacja" na siłę... co utrudnia zrozumienie kodu początkującym...
w normalnym wypadku napisałbym tak:
lda KLAW
cmp #255
beq ...
a więc sprawdzamy czy wciśnięto jakiś klawisz, jeżeli nic nie wciśnięto (255) to skok BEQ zostanie wykonany i mamy skod do "mrugaj".
Autor kodu postanowił zmusić czytającego do myślenia i napisał to inaczej
do rej. Y ładuje kod klawisza, zwiększa ten kod o 1, co w przypadku 255 (nic nie wciśnięto) da wartość 0, potem rozkaz BEQ wykona się tylko wtedy gdy flaga "Z" w rej. statusu 6502 jest wyzerowana (a więc nastąpiło zero w wyniku operacji... w tym wypadku INY). W każdym innym wypadku (gdy zawartość KLAW nie będzie równa 255) wynik operacji INY nie będzie zerem więc wykonywanie pętli zostanie przerwane.
Strony Poprzednia 1 2
Zaloguj się lub zarejestruj by napisać odpowiedź
[ Wygenerowano w 0.078 sekund, wykonano 17 zapytań ]