Aktualności: C64 Power - online od stycznia 2000 !

Autor Wątek: błędy :/  (Przeczytany 367 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

nyar

  • Gość
błędy :/
« dnia: 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  :/  
   
   



Offline Skull

  • Level 6
  • ******
  • Wiadomości: 2034
błędy :/
« Odpowiedź #1 dnia: 23 Września 2007, 03:29 »
 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

nyar

  • Gość
błędy :/
« Odpowiedź #2 dnia: 23 Września 2007, 13:36 »
 w  ldx  wpisałem  #$21  czyli  33  ,  żeby  tekst  sie  cały  zmieścił  
  dzięki  za  pomoc  
  pozdro