C64Power Forum
Ogólne => Forum Ogólnodyskusyjne => Wątek zaczęty przez: nyar w 23 Września 2007, 02:13
-
Czy mógłby mi ktoś wskazać błąd z listingu :
*=$2710
LDX #$2C
WPAK LDA TEKST, X
STA $0400, X
DEX
BNE WPAK
RTS
TEKST .TEXT \'PRAWDZIWY MANIAK PETLI SIE NIE BOI\'
strzałka w lewo, 3, s
za każdym razem kiedy to wklepuje w tasm to tekst mi przerzuca do drugiej linijki i wyskakuje *illegal mnemonic*
Natomiast jeżeli wpiszę tylko \'prawdziwy maniak\' to po odpaleniu nie wyświetla pierwszej litery w 1 wierszu i 1 kolumnie oraz wyświetla dużo małp po tekście.
Czy funkcja konwertująca .TEXT działa tylko w jednej linijce ?
jak powinien poprawnie wyglądać ten listing
PS. Listing jest z c64 power z artykułu o programowaniu w assemblerze chyba cz. 2
używam tasm 7.0 na VICE 1.21
testowałem na prawdziwym sprzęcie z tasm 6.0 na pokladzie i to samo sie dzieje :/
-
Hej!
Commodore 64 może wyświetlić w jednym wierszu 40 znaków. Twój tekst o ile się nie pomyliłem ma 32 znaki, plus 2 cudzysłowy to 34, plus 5 na TEKST to 39, plus kolejne 5 na .TEXT to już 44 i jeszcze dwie spacje - jedna między TEKST a .TEXT, a druga między .TEXT a cudzysłów -> razem 46. Trochę za dużo jak na jedną linię.
Druga sprawa TASM to edytor, ma ustawione tabulatory na mnemoniki itd.
Najprościej mówiąc nijak tego w jednej linijce nie zmieścisz.
Ale... możesz to spokojnie wpisać w dwóch
TEKST .TEXT \'PRAWDZIWY MANIAK \'
.TEXT \'PETLI SIE NIE BOI\'
... i tak jest poprawnie.
W kodzie jest też błąd - napis ma 32 znaki, a tam jest pętla na $2C, czyli na 44. To za dużo dlatego wyświetlają Ci się małpy (akurat w pamięci dalej są zera - a małpa to zero).
Jeszcze problem pierwszego znaku...
Tak zapisana w programie pętla go... pomija, ponieważ, gdy po komendzie DEX pojawi się zero (czyli indeks na pierwszy znak[ czyli `P`] opuszcza pętlę i go nie wyświetli.
A teraz poprawki :
w linii z LDX [czyli ustawiania licznika pętli] wpisz wartość 31 [$1f] zamiast $2c,
a po DEX nie wpisuj BNE WPAK tylko BPL WPAK - wtedy pętla się nie zakończy przed pierwszym znakiem.
Pozdro
-
w ldx wpisałem #$21 czyli 33 , żeby tekst sie cały zmieścił
dzięki za pomoc
pozdro