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

Autor Wątek: SFX + muzyka na c64 w assemblerze?  (Przeczytany 2573 razy)

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

Offline Kisiel

  • Level 7
  • *******
  • Wiadomości: 11447
  • Number 7 in all users competition...
    • http://wiki.projekt64.filety.pl/doku.php
SFX + muzyka na c64 w assemblerze?
« Odpowiedź #15 dnia: 19 Listopada 2010, 15:52 »
 no  to  dodaj  sei.
idz wyprostowany wśród tych co idą na kolanach

...w przypadku checi zakupu UK1541,GA,MA,T8500,T7501 prosze o kontakt na Facebooku, haslo: UK1541....

Offline BagoZonde

  • Level 6
  • ******
  • Wiadomości: 1055
    • http://www.commocore.com
SFX + muzyka na c64 w assemblerze?
« Odpowiedź #16 dnia: 22 Listopada 2010, 18:20 »
 Dzięki  uka  za  kod.  Nie  różnił  się  on  praktycznie  niczym  w  porównaniu  do  mojego  poza  jedną  rzeczą,  której  nie  rozumiem.  
   
  W  moim  przypadku  zczytywałem  naciśnięcie  klawisza  poprzez  JSR  $FFE4  czyli  GETIN.  
   
  Innymi  słowy  taka  oto  prymitywna  procedurka:  
   
  LDA  $D011  
  AND  #$EF  
  STA  $D011  
   
  LOOP:  
  JSR  $FFE4  
  BEQ  LOOP  
   
  LDA  $D011  
  ORA  #$10  
  STA  $D011  
   
  RTS  
   
  ...zadziała  raz,  a  za  drugim  razem  już  ekranu  nie  wróci,  nie  wiem  dlaczego.  
   
  Co  do  monitora,  wiem,  że  bardzo  dużo  zachodu  z  tym,  jednakże  żaden  z  uruchamianych  assemblerów  nie  poszedł  mi  poprawnie  pod  VICE.  Jaki  moglibyście  polecić,  cross  assemblery  raczej  odpadają  choć  kto  wie.  
   

Offline BagoZonde

  • Level 6
  • ******
  • Wiadomości: 1055
    • http://www.commocore.com
SFX + muzyka na c64 w assemblerze?
« Odpowiedź #17 dnia: 22 Listopada 2010, 18:51 »
 Co  do  assemblera  jestem  laikiem,  ale  instynkt  mi  podpowiada,  że  JSR  $FFE4  po  włączeniu  czy  wyłączeniu  ekranu  czeka  na  input  z  jakiegoś  innego  źródła  niż  klawiatura  i  to  jest  ten  problem.  Właśnie  na  tym  stanąłem  w  projekcie,  który  piszę  -  próbowałem  dodać  wyłączeniu  screenu  i  potem  włączenie.  Tam  z  kolei  przy  pierwszym  uruchomieniu  ekran  się  pojawia,  ale  zamarza  właśnie  na  tym  JSR  $FFE4  prawdopodobnie.  
   

Offline BagoZonde

  • Level 6
  • ******
  • Wiadomości: 1055
    • http://www.commocore.com
SFX + muzyka na c64 w assemblerze?
« Odpowiedź #18 dnia: 22 Listopada 2010, 19:01 »
 Tak,  to  JSR  $FFE4  powodował  zawieszenie  programu.  Cała  pętla  stawała  właśnie  w  tym  miejscu  mimo  tego,  że  jeżeli  żaden  klawisz  nie  był  naciśnięty  -  powinna  wykonywać  się  dalsza  część  pętli.  Spróbuję  więc  przerobić  wszystko  na  ten  $DC01  a  o  JSR  $FFE4  muszę  głębiej  poczytać.  Macie  pojęcie  co  takiego  może  się  gryźć>?  
   
  Odnośnie  bombardowania  kanału  głośności  -  będę  te  tajniki  zgłębiał  na  dniach.  
   

Offline BagoZonde

  • Level 6
  • ******
  • Wiadomości: 1055
    • http://www.commocore.com
SFX + muzyka na c64 w assemblerze?
« Odpowiedź #19 dnia: 22 Listopada 2010, 20:33 »
 Z  tym  JSR  $FFE4  chyba  się  trochę  poddaję.  A  wszystko  chyba  tak  naprawdę  dotyczy  emulatora  Vice.  Nie  mogę  się  doczekać,  by  sprawdzić  to  na  prawdziwym  sprzęcie  -  choć  chciałbym,  by  chodziło  to  też  pod  emulatorem.  Taki  prosty  kod:  
   
  0900  JSR  $FFE4  
  0903  CMP  #$11  
  0905  BNE  $0900  
  0907  RTS  
   
  zawiesza  mi  przy  drugim  uruchomieniu  z  monitora  (G  0900)  a  z  kolei  wywołanie  SYS  2304  nie  zawiesza.  
   
  Mimo  wszystko  nie  mogę  wprowadzić  do  programu  wyłączania  ekranu  na  chwilę  i  ponowne  jego  włączanie.  Zaś  co  do  $DC00  i  $DC01  -  to  działało  by  to  chyba  znakomicie  z  tego  co  widzę  -  ale  jak  odróżnić  tam  naciśnięcie  kursora  w  górę  od  kursora  w  dół?  I  analogicznie:  kursora  w  lewo  z  kursorem  w  prawo.  
   

Offline uka

  • Level 3
  • ***
  • Wiadomości: 101
SFX + muzyka na c64 w assemblerze?
« Odpowiedź #20 dnia: 22 Listopada 2010, 23:30 »
 cmp  $DC01  to  bezpośrednie  odwołanie  do  układu  CIA  z  którym  sprzężona  jest  klawiatura.  Przy  czym  żeby  wiedzieć  konkretnie  który  klawisz  ma  być  \'wykrywany\'  to  trzeba  jeszcze  wziaść  pod  uwagę  drugi  z  portów  danych  ($DC00).  DC01  -  rząd  DC00  kolumna  w  matrycy  klawiatury.  
  <br><br>  
  tutaj  jest  rozpiska:  http://sta.c64.org/cbm64kbdlay.html\' target=_blank>http://sta.c64.org/cbm64kbdlay.html
  <br><br>  
  Druga  sprawa,  to  wydaje  mi  się  że  Twój  kod  jest  jak  najbardziej  ok.  Poprostu  komenda  sys  zapisuje  adres  powrotu  z  podprogramu  (coś  jak  JSR)  i  po  rts  jest  gdzie  wrocić  a  goto  z  monitora  to  takie  chamskie  przestawienie  wskaźnika  instrukcji  (PC)  po  którym  przy  rts  program  skacze  w  cholere  ;)

Offline uka

  • Level 3
  • ***
  • Wiadomości: 101
SFX + muzyka na c64 w assemblerze?
« Odpowiedź #21 dnia: 22 Listopada 2010, 23:31 »
 No  to  sobie  po  brejkowałem  :P

Offline BagoZonde

  • Level 6
  • ******
  • Wiadomości: 1055
    • http://www.commocore.com
SFX + muzyka na c64 w assemblerze?
« Odpowiedź #22 dnia: 23 Listopada 2010, 00:56 »
 Dzięki  uka  za  brejki  ;).  Time-brejki  ;).  
   
  Odnośnie  $DC01  to  rozumiem  działanie  tego,  z  tym,  że  powiedz  mi  jak  np:  odczytać  wciśnięcie  konkretnego  klawisza  kursora?  
   
  Akurat  w  głównym  menu  mojego  projektu  opcje  wybiera  się  kursorami  w  górę  i  w  dół.  Jeżeli  więc  do  $DC00  wrzucę  $FE  to  odczytam  z  $DC01  przy  wciśnięciu  klawisza  góra  lub  dół  -  tą  samą  wartość  czyli  dla  kolumny  $7F.  Trochę  bez  sensu  więc.  To  samo  dotyczy  klawiszy  lewo/prawo.  Jest  na  to  jakaś  rada?  
   
  Dodatkowo  w  tym  menu  można  także  się  posługiwać  joystickiem  w  porcie  2  czyli  brane  są  wartości  spod  $DC00.  
   
  Wolałbym  więc  JSR  $FFE4.  
   

Offline uka

  • Level 3
  • ***
  • Wiadomości: 101
SFX + muzyka na c64 w assemblerze?
« Odpowiedź #23 dnia: 23 Listopada 2010, 01:34 »
 c000  SEI  
  c001  LDY  #$0E  
  c003  STY  $D020  
  c006  LDA  #$FE  
  c008  STA  $DC00  ;sprawdz  czy  jest  wcisniety  kursor  lewo/prawo  
  c00b  LDA  #$FB  
  c00d  CMP  $DC01  
  c010  BNE  $C00D  
  c012  LDY  #$02  
  c014  LDA  #$FD  ;sprawdz  czy  jest  tez  wcisniety  shift  
  c016  STA  $DC00  
  c019  LDA  #$7F  
  c01b  CMP  $DC01  
  c01e  BNE  $C003  
  c020  LDY  #$01  
  c022  JMP  $C003  
   
   
  rozgraniczenie  lewego  prawego  kursora  (bez  uwzglednienia  shift  lock`a).  Bedą  sie  zmieniac  kolory  ramki  w  zaleznosci  od  kierunku.  
   
   

Offline BagoZonde

  • Level 6
  • ******
  • Wiadomości: 1055
    • http://www.commocore.com
SFX + muzyka na c64 w assemblerze?
« Odpowiedź #24 dnia: 23 Listopada 2010, 08:41 »
 No  tak!  Przestawiłem  się  na  myślenie,  że  klawisz  kursora  to  klawisz  kursora,  a  przecież  na  C64  mamy  SHIFTa.  Tak  to  jest  jak  się  siedzi  na  emulatorze.

Offline BagoZonde

  • Level 6
  • ******
  • Wiadomości: 1055
    • http://www.commocore.com
SFX + muzyka na c64 w assemblerze?
« Odpowiedź #25 dnia: 28 Listopada 2010, 05:11 »
 Wracając  do  głównego  tematu  tego  wątku,  zacząłem  mocniej  wczytywać  się  w  te  digisy  i  NMI  zarazem.  Powiedzcie  mi  jedną  rzecz,  bo  osiwieją  mi  od  myślenia  wszystkie  włosy:  do  $d418  muszę  zapodać  starszy  bit  miejsca,  gdzie  znajduje  się  sample?

lda  sample
and  #15
sta  $d418

Jeżeli  tak,  to  czy  ten  sample  może  być  zwyczajnym  ustawieniem  dla  kanału  #3  takich  wartości  jak  FREQ,  ADSR,  PULSEWIDTH?  Musi  się  też  gdzieś  kończyć.  Hmm...