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

Autor Wątek: run zamiast sys xxxx  (Przeczytany 799 razy)

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

nyar

  • Gość
run zamiast sys xxxx
« dnia: 23 Września 2007, 02:18 »
 Witam  ponownie  !  
  Moje  pytanie  jest  być  może  banalne  a  być  może  nie...  
  chciałbym  zrobić  tak  żeby  napisany  program  w  asmie  wywołać  komendą  run  spod  basica  
  np.  sys  (2049)  i  zapisac  go  w  jednym  kawalku  na  dyskietce.  
  Pytanie  jak  to  zrobic  ?    
  z  góry  dzieki  za  odpowiedź



Offline Skull

  • Level 6
  • ******
  • Wiadomości: 2034
run zamiast sys xxxx
« Odpowiedź #1 dnia: 23 Września 2007, 03:38 »
 To  znów  ja.    
  Linia  basica...  niby  prosta  rzecz,  a  tak  w  jednym  zdaniu  sie  nie  da  opisać.  
  Szkoda  że  TASM  nie  ma  takiej  opcji  żeby  ją  wpisać  automatycznie.  
   
  Zasada  jest  niby  prosta:  
   
  po  SYS  musisz  wpisać  adres  na  twój  program  w  postaci  dziesiętnej.  
   
  Jak  np  masz  w  TASM-e  *=$c000  to  po  sys  powinno  być  49152.  
  Gorzej  to  wpisać  w  TASM-ie,  żeby  zawsze  było,  ale  się  da.  
  Nie  chce  mi  się  tu  rozwodzić  nad  dokładnym  opisem  jak  to  zrobić.  Napisz  o  d  którego  adresu  zaczyna  Ci  się  program  w  TASM,  a  ja  Ci  podam  linijkę  którą  umieścisz  na  początku  algorytmu  w  TASM,  żeby  Ci  się  pojawiło  SYS    \'\'    
  pzdr

nyar

  • Gość
run zamiast sys xxxx
« Odpowiedź #2 dnia: 23 Września 2007, 12:29 »
 dzięki  za  błyskawiczną  odpowiedź  na  2  posty  :)  
  $07d0  start  programu  
  I  jak  sie  nie  myle  chodzi  o  to  żeby  program  na  początku  swojej  pracy  wygenerował    
  10  sys  (2000)  w  basicu.  
  No  i  właśnie  mnie  to  interesuje  jak  to  zrobić.  Jeśli  znasz  jakis  art  na  ten  temat  albo  przykładowe  źródłowki  to  byłbym  wdzięczny  
  pozdro

Offline Skull

  • Level 6
  • ******
  • Wiadomości: 2034
run zamiast sys xxxx
« Odpowiedź #3 dnia: 23 Września 2007, 14:04 »
 Najłatwiej  to  zrozumieć  wpisując  komendę,  a  później  \'podglądając\'  ją  w  jakimś  monitorze  (w  Vice  ALT+M).  
  A  więc  uruchamiasz  emulator  (albo  oryginalne  c64  z  jakimś  modułem  który  ma  monitor,  czyli  final,  albo  AR),  i  od  razu  wpisujesz  :  
  10  SYS  2000  (enter)  
  teraz  wchodzisz  do  monitora  (w  Vice  ALT+M)  i  wpisujesz  komendę:  m  0800(bo  od    $0800  zaczynają  się  programy  w  Basic).  
  Wyświetli  Ci  się  coś  takiego:  
   
  >C:0800    00  0c  08  0a    00  9e  20  32      ......  2  
  >C:0808    30  30  30  00    00  00...  
   
  tak  właśnie  jest  reprezentowana  ta  linijka  Basica  w  pamięci.  
  A  teraz  co  po  kolei...  
   
  00  -  początek  Basicu,  
  0c  08  -  para:młodszy  i  starszy  bajt  numeru  następnej  linii  Basica  ($080c),  
  0a  00  -  para:młodszy  i  starszy  bajt  numer  linii  Basica  (nasze  10  przed  SYS),  
  9e  -  znaczy  tyle  co  instrukcja  SYS,  
  20  -  spacja  między  SYS  a  2000,  
  32  30  30  30  -  \'2000\'  nasz  adres,  
  00  -  koniec  linii  (tej  10),  
  00  00  -  następna  linia  (ta  $080c),  której  nie  ma  to  znaczy,  że  już  koniec  programu.  
   
  A  więc  jeśli  chcesz  to  umieścić  w  TASM-ie  po  prostu  wpisz  na  początku:  
  *=$0800  
  .byte  $00,$0c,$08,$0a,$00,$9e,$20,$32,$30,$30, $  30,$00,$00,$00  
  *=$07d0  
  ...  
  i  tu  dalej  twój  program.  
  pzdr  
   
  ps.  Co  do  materiałów  na  ten  temat  to  polecam  B.Frelka  (jest  na  czytelni  www.retroreaders.pl)

nyar

  • Gość
run zamiast sys xxxx
« Odpowiedź #4 dnia: 23 Września 2007, 18:15 »
 zrobiłem  tak  jak  napisałeś  ale  coś  nie  do  końca  to  wszystko  chce  mi  działać...  
   
  dla  przykładu  :  
   
  10  sys  (10000)  w  basicu  to  będzie  :  
   
  >C:0800    00  0f  08  0a    00  9e  20  28    31  30  30  30      ......  (1000  
  >C:080c    30  29  00  00    00  00  00  00    00  00  00  00      0)..........  
  w  maszynowym  
   
  zapisałem  to  do  assemblera  w  postaci  :  
   
  *=$0800  
  .byte  $00,$0f,$08,$0a,$00,$9e  
  .byte  $20,$28,$31,$30,$30,$30  
  .byte  $30,$29  ;te  zera  olałem  
  *=$2710  
  ldx#$21  
  wpak:  lda  tekst,x  
  sta$0400,x  
  dex  
  bpl  wpak  
  rts  
  tekst:  .text  :  \'prawdziwy  maniak\'  
  .text  \'  petli  sie  nie  boi\'  
   
  po  naciśnięciu  <=  3  ,S  program  wraca  do  basica  i  mruga  ready  
  ok  spoko  wpisuje  RUN  i  ...działa  !!!  jedyny  problem  w  tym  ,że  wyświetla  to  wszystko  z  controlem  (krzaczki).  Próbowałem  napisać  tekst  w  assemblerze  z  controlem  lecz  kilka  literek  z  controlem  jest  zarezerwowane  dla  assemblera  :/  m.in  t  
   
   
  Druga  sprawa  to,  że  jak  assembluje  to  do    pliku  wykonywalnego  PRG  i  go  odpale  to  NIC  nie  wyświetla  po  RUN  nawet  krzaczków  :(  
  gdy  zlistuje  pod  basiciem  to  wyswietla  dodatkowa  dziwna  linię  :  
  LIST  
  10  sys  (10000)NEW!EXP`CMD  
  63248  -PRAWDZIWY  MANIAK  PETLI  SIE  NIE  BOI  
  READY  
   

Offline Skull

  • Level 6
  • ******
  • Wiadomości: 2034
run zamiast sys xxxx
« Odpowiedź #5 dnia: 23 Września 2007, 23:40 »
 Nie  olewaj  tych  zer  na  końcu  bo  są  ważne!  
  3  zera  na  końcu  oznaczają  koniec  programu  w  Basic-u,  jak  ich  nie  wpisałeś  to  po  list  miałeś  dziwne  krzaczki.  Interpreter  nie  znalazł  końca  i  wyświetlał    wszystko  jak  leci  w  pamięci,  a  że  to  wychodziło  mu  losowo  to  już  nie  jego  wina.  
   
  pzdr

nyar

  • Gość
run zamiast sys xxxx
« Odpowiedź #6 dnia: 24 Września 2007, 00:28 »
 hejka  to  samo  sie  dzieje  jak  przepisze  wszystkie  zera  z  tej  linijki,  bądź  tak  jak  napisałeś  tylko  3.  
  Te  krzaczki  po  kombinacji  shift+c=  zamieniają  sie  w  prawdziwy  tekst..  być  może  to  jest  wina  tego  ze  w  assemblerze  wszystko  pisze  sie  małymi  literami...  
  po  zassemblowaniu  do  pliku  i  odpaleniu  go  niestety  nie  ma  nawet  tych  `krzaczków`  
  Krzaczki  pojawiają  sie  tylko  jak  w  asmie  wklepie  <=,3,S  RUN  ,zaś  shift+c=  zamienia  to  w  czytelny  tekst...  
  można  coś  źle  zassemblowac  ?  
  Do  assemblacji  użyłem  kombinacji  <=,5,  nazwa  return.  
  pozdro  
   

nyar

  • Gość
run zamiast sys xxxx
« Odpowiedź #7 dnia: 24 Września 2007, 00:55 »
 czytam  właśnie  Frelka  i  tam  jest  opisane  ,że  w  w  adresach  $0800  do  $0831  zawierać  sie  powinna  linijka  programu  w  basicu  bootująca  program  
  a  w  adresach  $0880  do  $08a2  `przeładowywacz`(loader/reloader  ?)  w  asmie...  właśnie  probuję  to  doczytać  i  może  to  rozgryzę.  
  pozdro

nyar

  • Gość
run zamiast sys xxxx
« Odpowiedź #8 dnia: 24 Września 2007, 01:00 »
 dopisałem  zera  tekst  nadal  sie  nie  wyświetla  po  assemblacji,  zaś  jak  zapuszczę  LIST  ,wtedy  rzeczywiście  już  nie  ma  żadnych  dziwnych  dodatkowych  linijek  :)  
   

Offline Skull

  • Level 6
  • ******
  • Wiadomości: 2034
run zamiast sys xxxx
« Odpowiedź #9 dnia: 24 Września 2007, 12:39 »
 Hej,  
  Znaki  wyświetlane  za  pomocą  .text  różnią  się  trochę  od  tych  wyświetlanych  na  ekranie,  ponieważ  mają  inne  kodowanie  (ASCII,  CMB).  
     
  Dopisz:  and  #$BF  
    między  lda  tekst,x  ,a  sta  $0400,x  i  powinno  być  dobrze.  
   
  Ze  zgraniem  do  pliku  -  zarówno  tej  linii  basica  jak  i  programu  w  assemblerze  nie  jest  już  tak  prosto.  
  Zgrywanie  do  jednego  pliku  ma  \'charakter  ciągły\',  czyli  nie  można  sobie  zaznaczyć  żeby  komputer  zgrał  linijkę  basica,  a  do  niej  `dołożył`  program  w  assemblerze.    
  Wynika  to  z  tego,  że  zgrywać  można  jeden  cały  obszar  z  pamięci.  Linijka  basica  znajduje  się  od  $0800  do  $08xx,  a  twój  program  od  $2c10  do  $2cxx,  czyli  zgrać  wszystko  trzeba  by  od  $0800  do  $2cxx,  a  więc  również  to  co  się  znajduje  między  $08xx  do  $2c10,  a  to  już  ponad  2Kb  :)  (troche  się  marnuje  tej  pamięci:P  )  
  Ale  możesz  to  zrobić  w  monitorze  emulatora  (komenda:  s  \'program\'  0  0800  2c80).  
   
  No  niestety  nie  jest  to  wszystko  takie  fajnie  elastyczne  jak  by  się  chciało.    
  Dlatego  polecam  jednak  przejście  na  pisanie  programów  spod  PC.  Czyli  w  edytorze  tekstowym  połączonym  z  jakimś  kompilatorem  do  formatu  C64    (polecam  relunch64,  a  compilator  64tass  -  ma  identyczną  składnię  jak  TurboAssembler,  a  więc  bez  trudu  przeniesiesz  każdy  algorytm).  
  Tam  zasada  jest  podobna,  a  do  tego  dokładając  jakiś  program  linkująca-kompresujacy  (np  exomizer),  w  rezultacie  (oczywiście  po  konfiguracji  tego  wszystkiego  w  całość)  będziesz  miał  pliczki  wynikowe  takie  jak  sobie  zażyczysz  i  nie  `marnujące`  pamięci.  
  O  przeklejaniu  gotowych  tekstów  (np  z  tego  wątku)  do  kodu  źródłowego  programu  nie  wspomnę    \'\'    
  Oszczędzisz  czas  i  nerwy.  pzdr  
   
  ps.  czemu  adres  po  sys  umieszczasz  w  nawiasach  ?  -  to  zbędne.    
   

Offline Skull

  • Level 6
  • ******
  • Wiadomości: 2034
run zamiast sys xxxx
« Odpowiedź #10 dnia: 24 Września 2007, 12:42 »
 Aha  ..  zmusiłeś  mnie  do  wpisania  tego  w  TurboAssie    \'\'    
  linie  basica  *=$0800  ...  
  umieść  dopiero  za  kodem  bo  tak  po  <-  +  3  i  `s`  tass  skacze  do  0800  zamiast  $2c10  
   

nyar

  • Gość
run zamiast sys xxxx
« Odpowiedź #11 dnia: 24 Września 2007, 17:07 »
 hmm  a  jakby  program  napisać  w  adresie  zaraz  po  linii  basica  ?  
   
  to  ze  sys  napisałem  w  nawiasie  to  dlatego  ze  wcześniej  podglądałem  monitorem  i  listem  co  sie  dzieje  z  rożnymi  gierkami  podczas  bootu  np.  turrican  II  wysypał  wartość  sys  w  nawiasie  wiec  pomyślałem  ze  to  jest  ok.  
   
  poprobuję  z    tym  programem  na  pc  który  mi  poleciłeś.  
  pozdro

nyar

  • Gość
run zamiast sys xxxx
« Odpowiedź #12 dnia: 24 Września 2007, 18:14 »
 udało  się  program  zajmuje  od  $0800  do  $0840  (64b)  pamięci  czyli  chyba  niedużo  :D  
  odpala  sie  komendą  run  spod  basica  :)  
  monitor  z  finala  III  sie  przydał.  
  wielkie  dzieki  i  pozdro  
   
   

Offline KB777

  • Level 6
  • ******
  • Wiadomości: 2430
  • -profil nieaktywny-
run zamiast sys xxxx
« Odpowiedź #13 dnia: 25 Września 2007, 12:21 »
 Tak  w  ogóle  to  na  Komodę  powstały  narzędzia,  które  to  samo  by  załatwiły.  
   
  Taki  np.  Crosslinker  (*)  -  poskłada  pliki  do  kupy,  skompresuje  i  doda  SYS  xxxx  do  odpalania  z  Basica.  
   
  (*)  Pewnie  jest  dużo  nowszych  i  lepszych  -  ten  dotarł  do  mnie  na  dyskietce  PD  64+4,  więc  to  było  wieki  temu  ;)
-profil nieaktywny-

Offline Skull

  • Level 6
  • ******
  • Wiadomości: 2034
run zamiast sys xxxx
« Odpowiedź #14 dnia: 25 Września 2007, 14:21 »
 Oczywiście,  jest  wiele  linkerów  na  c64.  
  Tyle,  że  opłacalność  ich  używania  jest  wtedy,  gdy  linkujesz  już  wszystkie  gotowe  części  kodu  jak  i  dane.  
   
  Trudno  sobie  wyobrazić,  żeby  ktoś  każdorazowo  po  poprawieniu  kilku  linijek  w  swoim  programie  od  nowa  go  linkował,  żeby  zobaczyć  efekt  -  przecież  to  żmudna  i  syzyfowa  praca.  
   
  Kiedyś  nie  korzystało  się  z  PC-tów,  i  pisanie  większych  programów  wiązało  się  w  znacznej  mierze  z  zawziętością  kodera,  ale  teraz,  czemu  nie  korzystać  z  mocy  obliczeniowych  piecy.  
   
  Przygodę  z  programowaniem  na  c64  rozpocząłem  już  dawno  (początek  lat  90-tych),  później  była  przerwa,  a  teraz  wznowiłem  ją  na  nowo  (pod  koniec  2005)przy  okazji  dokończenia  wcześniej  zaczętej  gry.  Wiadomo,  że  człowiek  nie  ma  tyle  czasu  co  kiedyś  i  traktuje  to  jako  hobby  \'od  czasu  do  czasu\'.  
   
  Początkowo  wróciłem  do  Tass-a  pod  emulatorem,  ale  szybko  okazało  się,  że  pamięć  commodorka  (który  w  takim  układzie  ma  oprócz  kodu  właściwego,  ma  program  assembler-a  i  źródłówkę  i  zmienne)  jest  za  malutka.    
  Później  kombinowałem  z  dołączaniem  różnych  kart  rozszerzeń  w  emu  i  specjalnymi  wersjami  Tassa  wykorzystującymi  te  rozszerzenia  -  na  próżno,  one  też  miały  ograniczenia  (np.  max  4096  linii  kodu  -  a  uwierzcie  mi  że  przy  pisaniu  gier  to  jest  zaledwie  mała  cząstka).  
  Broniłem  się  przed  Pc-towskimi  crossassemblerami  do  końca    \'\'  ,  ale  niestety  musiałem  dać  za  wygraną  \'\'    
  Całe  szczęście,  że  był  TASS64  (Taboo-sów),  który  ma  składnie  identyczną  z  TASS-em  na  c64,  bo  jak  miałbym  zamieniać  wszystko  w  składni  programu  to  bym  to  olał  i  dał  sobie  już  dawno  spokój.  
   
  Ludzie  ze  sceny  na  prawdę  napisali  już  wiele  programów  i  programików  wykorzystujących  PC  ułatwiających  życie  i  jeszcze  piszą!  
  Teraz  kodowanie  staje  się  już  przyjemnością    \'\'