26

Spoko.
Musisz się przyzwyczaić, że 'XXL vs Pin/Draco' to taki lokalny folklor.
Nic groźnego, oni tak mają :).

27 Ostatnio edytowany przez seban (2017-07-13 12:00:51)

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.

28

Lokalny folklor na poziomie tylko ubarwia wątek :)
Jak rozumiem polecenie opt... wydaje gdzieś tam z poziomu QA?

29

na początku programu

30

chicago napisał/a:

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

Sikor umarł...

31

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)

32

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.

33

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.

https://www.youtube.com/watch?v=jofNR_WkoCE

34

@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".

35

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

36 Ostatnio edytowany przez larek (2017-07-20 21:21:40)

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

37

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.

38

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.