C64Power Forum

Inne => Offtopic => Wątek zaczęty przez: kabel w 23 Listopada 2008, 16:51

Tytuł: programowanie
Wiadomość wysłana przez: kabel w 23 Listopada 2008, 16:51
 Czy  ktoś  wie  jak  pisać  programy  (na  c64)ze  słowem  IF  \'\'    \'\'  bo  narazie  mi  nie  wychodzi  \'\'    \'\'  
Tytuł: programowanie
Wiadomość wysłana przez: TuMe64 w 23 Listopada 2008, 17:36
 1  INPUT  A$  
  2  IF  A$=\'ALA\'  THEN  PRINT  \'  ONA  MA  KOTA\'  
   
   
  IF  warunek  (w  tym  wypadku  zmienna  tekstowa  A$  wprowadzona  za  pomocą  INPUT  musi  być  identyczna  z  zapisaną  w  cudzysłowie  czyli  ALA  )  THEN  czyli  skutek  w  tym  wypadku  wyświetlenie  PRINT  na  ekranie  tekstu  zawartego  w  cudzysłowie)  
   
   
   
   
Tytuł: programowanie
Wiadomość wysłana przez: Gizmoń w 23 Listopada 2008, 20:26
 Kilka  przykładów:  
   
  -Jeśli  szukasz  znaku  na  ekranie:  
   
  10  FOR  A=0  to  999  
  20  X=PEEK(1024+A)  
  30  IF  X=46  THEN  PRINT  \'ZNALEZIONO!\'  
  40  NEXT  
   
  Powyższy  program  wyszukuje  na  ekranie  komputera  znak  kropki  (jego  kod  to  46)  i  jeśli  go  znajdzie  (X=46)  to  pokazuje  komunikat  ZNALEZIONO!.  
   
  -Jeśli  robisz  menu  w  programie:  
   
  10  GET  A$:  IF  A$=\'\'  THEN  10  
  20  IF  A$=\'A\'  THEN  PRINT  \'WCISNIETO  KLAWISZ  A\';  
  30  IF  A$=\'B\'  THEN  PRINT  \'WCISNIETO  KLAWISZ  B\';  
  40  IF  A$=\'X\'  THEN  END  
  50  GOTO  10  
   
  Program  sprawdza,  czy  wciśnięto  jakiś  klawisz  (jeśli  tak,  to  A$<>\'\',  jeśli  nie,  to  A$=\'\').  Po  wciśnięciu  sprawdza  jaki  to  klawisz  (IF  A$=\'A\'  then  ...).  Średnik  po  poleceniu  PRINT  powoduje  wyświetlanie  tekstu  w  tej  samej  linijce.  Jeśli  wciśniesz  X  to  program  zakończy  pracę.  Linia  50  zapobiega  wyłączeniu  programu  po  wciśnięciu  innego  klawisza  niż  A,B  lub  X.  
   
Tytuł: programowanie
Wiadomość wysłana przez: kabel w 24 Listopada 2008, 17:59
 A  Z  KOMENDĄ  PRINT  JAK  ROBIC  (NIE  ZATRZYMUJE  SIE)  
Tytuł: programowanie
Wiadomość wysłana przez: Gizmoń w 24 Listopada 2008, 19:00
 Co  masz  na  myśli?
Tytuł: programowanie
Wiadomość wysłana przez: TuMe64 w 24 Listopada 2008, 19:40
 musisz  pisać  zrozumialej...
Tytuł: programowanie
Wiadomość wysłana przez: kabel w 25 Listopada 2008, 16:10
 napisany  program:  
   
   
   
  1  poke  53280,7:poke  53281,8:poke  646,0  
  2  get  a$:if  a$  <>\'\'then  goto  2  
  3  print\'opcje:  
                  a-  wylistuj  program\'  
  4  print\'r-  reset  programu  
                  z-  zmien  kolor  ramki\'  
  5  if  a$=\'a\'then  list:if  a$=\'r\'  then  load  
  \'przykladowy  program\',8  
  6  if  a$=\'z\'then  poke  53280,1  
  7  print\'dziekuje\'  
   
  gdy  włącze  program:  
   
   
  opcje:  
  a-  wylistuj  program  
  r-  reset  programu  
  z-  zmien  kolor  ramki  
  dziekuje  
   
  ready.  
   
   
                                         
                                       
   
Tytuł: programowanie
Wiadomość wysłana przez: TuMe64 w 25 Listopada 2008, 19:08
 linia  2  -  ta  z  GET  A$  powinna  być  po  tym  jak  program  wyświetli  opcje  na  ekranie  a  przed  liniami  z  IF  i  powinna  raczej  wyglądać  tak  :  
   
  (numer  lini)GET  A$:IF  A$=\'\'THEN  GOTO(numer  lini)  
   
  spróbuj...  
   
   
   
   
   
Tytuł: programowanie
Wiadomość wysłana przez: zyga w 26 Listopada 2008, 09:24
 Jeżeli  po  `then`  ma  występować  `goto`  możesz  pominąć  albo  `then`  albo  `goto`.  Program  dalej  będzie  działał  :)
Tytuł: programowanie
Wiadomość wysłana przez: Gizmoń w 27 Listopada 2008, 16:01
 Ja  bym  ten  program  napisał  tak:  
   
  10  poke  53280,7:poke  53281,8    
  20  ?  \'Opcje:\'    
  30  ?  \'a-  wylistuj  program\'    
  40  ?  \'r-  reset  programu\'    
  50  ?  \'z-  zmien  kolor  ramki\'    
  60  Get  A$:  IF  A$=\'\'  then  60  
  70  if  A$=\'a\'  then  list  
  80  if  A$=\'r\'  then  run  
  90  if  A$=\'z\'  then  poke  53280,1  
  100  ?  \'dziekuje\'  
   
  Znak  zapytania  jest  zamienny  ze  słowem  PRINT.  Mam  pytanie  do  czego  służy  to  polecenie:  
   
  poke  646,0  
   
  Czyżby  umożliwiało  wczytanie  programu  z  dyskietki  poleceniem    
   
  80  if  A$=\'r\'  then  load  \'program  testowy\',8  
   
  ?  
   
  Zawsze,  jak  próbowałem  tak  zrobić  (bez  polecenia  poke  646,0),  wczytany  program  to  były  jakieś  przypadkowe  znaki  itp.      
   
   
Tytuł: programowanie
Wiadomość wysłana przez: Gizmoń w 27 Listopada 2008, 16:12
 Pamiętaj,  że  taka  komenda:  
   
  10  GET  A$:  IF  A$=\'\'  THEN  10  
   
  Powoduje,  że  program  oczekuje  na  wciśnięcie  jakiegoś  klawisza,  i  do  tego  momentu  nic  innego  nie  zrobi  (zatrzyma  się).  Z  tego  powodu,  Twój  program  po  uruchomieniu  zmieniał  kolor  ramki  i  czekał.  Po  wciśnięciu  klawisza  wyświetlał  menu  i  kończył  pracę.  
   
  Polecam  też  numerować  linie  co  10  (10,  20,  30,  40,  ...,  1500,  1510,  1520  itd)  
  Co  umożliwia  dodanie  do  programu  czegoś,  o  czym  zapomniałeś  pisząc  go.  Numerując  co  1,  nie  dopiszesz  potem  linii,  np.  115,5  (czyt.  sto  piętnaście  i  pół).    \'\'  
Tytuł: programowanie
Wiadomość wysłana przez: kabel w 27 Listopada 2008, 18:05
 Poke  646,0-133  to  zmiana  koloru  tekstu
Tytuł: programowanie
Wiadomość wysłana przez: TuMe64 w 27 Listopada 2008, 18:08
 0-133    \'\'  ?  kurka..  Komodorek  ma  16  kolorów  czyli  0  -  15  ....
Tytuł: programowanie
Wiadomość wysłana przez: kabel w 27 Listopada 2008, 18:13
 A  ja  dałem  133  i  był  taki  ciemnozielony(taki  jak  w  PET)
Tytuł: programowanie
Wiadomość wysłana przez: TuMe64 w 27 Listopada 2008, 19:44
 komodorek  ma  16  kolorów...  zwiększając  liczbę  chyba  zaklinasz  rzeczywistość  Szamanie  :)  0-15  a  potem  powtarzają  się...  przykro  mi  :(  lajf  iz  brutal    \'\'  
Tytuł: programowanie
Wiadomość wysłana przez: Gizmoń w 27 Listopada 2008, 21:51
 Wystarczy  spojrzeć  na  to  od  strony  binarnej,  i  wszystko  jasne:  
   
  000001  
  000010  
  000011  
  000100  
  000101  
  000110  
  000111  
  001000  
  001001  
  001010  
  001011  
   
  Wystarczy  spojrzeć  na  ostatnie  dwie  cyfry.  Ich  układ  co  pewien  czas  powtarza  się,  prawda?  
  Oczywiście  powyższy  przykład  pokazuje  na  czym  polega  \'powtarzanie  się\'  kolorów,  jeśli  przekroczymy  liczbę  3  a  nie  15  (a  więc  tak  jakby  komodorek  miał  4  kolory  zamiast  16,  co  jednak  nie  przeszkadza  w  zrozumieniu  mechanizmu  kodowania  koloru    \'\'  ).  Pozostałe  cyferki  już  nie  mają  znaczenia.  Z  tego  powodu  w  prawdziwym  C64  wpisanie  liczb:  
  0,  16,  32,  48,  64  itd.  zawsze  spowoduje  zmianę  koloru  na  czarny  (cztery  pierwsze  bity  będą  miały  wartość  0  co  po  zamianie  na  wartość  liczbową  daje  również  oczywiście  zero).  
   
  A  wracając  do  Twojego  programu  (tego  z  błędami)  -  nawet  jeśli  w  wersji  mojej  (poprawionej)  zastąpisz:  
   
  IF  A$=\'R\'  THEN  RUN  
   
  Linijką:  
   
  IF  A$=\'R\'  THEN  LOAD  \'PROGRAM  TESTOWY\',8  
   
  Załadowany  program  to  już  będzie  tylko  kupa  bezsensownych  liter  i  innych  znaków.  I  powiem  szczerze,  nie  wiem  do  tej  pory  jak  to  zrobić,  by  jeden  program  mógł  wczytać  drugi  tak,  by  ten  drugi  zadziałał.  Na  razie  udało  mi  się  to  tylko  dla  króciutkich  programów  (max  4  linie)  których  jedynym  zadaniem  było  wczytanie  drugiego  programu,  a  ten  drugi  wczytywał  pierwszy  i  tak  w  kółko.
Tytuł: programowanie
Wiadomość wysłana przez: zyga w 28 Listopada 2008, 11:36
 Wg.  instrukcji  BlackBoxa  możliwe  jest  coś  takiego:  
  \'<-ME  -  MERGE  -  ta  dyrektywa  powina  być  stosowana  tylko  do  programów  napisanych  w  BASIC`u  i  zapisanych  na  taśmie  z  headertype  1.  Instrukcja  działa  podobnie  jak  <-L,  z  tą  różnicą,  że  jeśli  w  pamięci  komputera  znajdował  się  jakiś  program  napisany  w  BASIC`u,  to  nie  zostanie  on  usunięty,  ale  do  tego  programu  zostanie  dołączony  wczytywany  program.  Wskazane  jest,  by  program  doczytywany  miał  numery  linii  wyższe  niż  poprzedni.  W  przeciwnym  razie  należy  dokonać  przenumerowania  (instrukcja  <-R  -  RENUMBER).  Sposób  zastosowania:  <-ME  lub  <-ME\'NAZWA\'.\'
Tytuł: programowanie
Wiadomość wysłana przez: TuMe64 w 28 Listopada 2008, 16:19
 chyba  nierozumiem  was...  czy  chodzi  Wam  o  dogrywanie  kawałka  programu  do  programu  głównego  czy  wgrywanie  przez  program  główny  innego  programu?  jeśli  chodzi  o  to  drugie  to  nie  ma  problemu...
Tytuł: programowanie
Wiadomość wysłana przez: kabel w 28 Listopada 2008, 16:43
 Też  prawda  powtarzają  sie  
   
Tytuł: programowanie
Wiadomość wysłana przez: Gizmoń w 28 Listopada 2008, 17:04
 TuMe64:  
   
  Jeśli  takie  coś  (przykładowo):  
   
  10  ?  CHR$  (147)  
  20  GET  A$:  IF  A$=\'\'  THEN  20  
  30  LOAD  \'EDYTOR  SPRITE\',8  
   
  Ma  wczytać  mi  mój  program  o  nazwie  edytor  sprite,  który  ma  z  500  linii,  z  wczytanego  programu  zostają  same  szczątki.  Czasem  nawet  widać,  że  był  to  program,  ale  jest  w  nim  masa  błędów,  np.  
   
  50  IF  X=129  THEN  IF  PEEK  RUN  XA=\'  
  60  IF  X=137  THEN  NEW  XY=517  OPEN#  
  CLOSEX$  
  80  RUNPOKECLOSELOADSAVEOPENIFPEEK?#@$#%FDHH VHBHRYTHRV  HTRVH  NHGGN  
  90  LISTPRINT  \'TRWA  KODOWANIE  OBRAZKA...\':  GOTO  LISTNEWOPEN#  
   
  Oczywiście  wczytany  program  chce  się  sam  uruchomić,  ale  nie  może  z  powodu  tych  błędów  (od  razu  wywala  SYNTAX  ERROR  IN  50).  Nie  jest  to  zależne  od  tego,  skąd  wczytuję  program  (czy  z  dyskietki,  czy  z  magnetofonu  -  zawsze  takie  samo  zachowanie).  Więc  chyba  jest  inaczej,  z  TYM  DRUGIM  problem  jest!
Tytuł: programowanie
Wiadomość wysłana przez: Kisiel w 28 Listopada 2008, 17:08
 a  to  jakiś  problem  wywołanie  na  ramkę?  ustawiasz  tak  dzielnik  częstotliwości  jak  ci  się  chce  i  tyle.  Ograniczeniem  jest  tylko  to  ile  w  stanie  jest  odebrać  danych  układ  SID.
Tytuł: programowanie
Wiadomość wysłana przez: chateau w 28 Listopada 2008, 17:24
 tos  sie  wstrzelil  Kisiel...
Tytuł: programowanie
Wiadomość wysłana przez: kabel w 30 Listopada 2008, 13:23
 A  i  jeszcze  jedno  pytanie:jak  tworzyć  muzyke  (na  c64)  do  programów  pisanych  w  basic`u  \'\'  
Tytuł: programowanie
Wiadomość wysłana przez: Chippy w 04 Stycznia 2009, 14:34
 Zrobić  tak,  aby  muzyka  leciała  w  tle  podczas  jakiegoś  programu  w  BASIC`u,  i  ten  player  nie  był  napisany  w  assemblerze,  nie  da  się.  Możesz  najwyżej  zrobić  z  DATA  i  z  paru  instrukcji  muzykę  \'podczas  bezczynności  programu\',  której  przykładowy  kod  przepiszę  ci  w  wolnym  czasie.  Jest  też  coś  takiego  jak  przerwania,  ale  nie  będę  ciebie  w  to  wgłębiać.
Tytuł: programowanie
Wiadomość wysłana przez: Chippy w 04 Stycznia 2009, 14:41
 Przepiszę  ci  kawałek  z  mojej  stareńkiej  książki  do  c64:  
   
   
  7.2.  PROGRAM  PRZYKŁADOWY  
   
  Jako  pierwsze  trzeba  ustalić  jakie  głosy  (generatory  dźwięku)  chce  się  wykorzystać.  Następnie  ustala  się  cztery  podstawowe  parametry  (głośność,kształt  itd.).  Istnieje  oczywiście  możliwość  równoczesnego  wykorzystania  trzech  generatorów.  Program  przykładowy  wykorzystuje  jeden  głos.  
   
  10SI=54272:FL=SI:FH=SI+1:W=SI+4:A=SI+5:H =SI+6:l=SI+24  
  20  POKEL,15  
  30  POKEA,16+9  
  40  POKEH,4*16+4  
  50  POKEFH,29:POKEFL,69  
  60  POKEW,17  
  70  FORT=1TO500:NEXT  
  80  POKEW,0:POKEA,0:POKEH,0  
   
  W  wolnym  czasie  dokoncze  :)