C64Power Forum
Software => Programowanie => Wątek zaczęty przez: marx w 08 Marca 2016, 10:42
-
Drodzy koledzy commodorowcy, prośba o poradę. Przygotowuję się do stworzenia wystrzałowego dema na C64 ale mam drobny problem ;). Otóż piszę sobie pod Relaunch64 i odpalam źródłówki pod VICE na OSX. Pół biedy gdy moje wypociny można zamknąć w jednym pliku, wtedy wystarczy kliknąć "Run" i program się odpala. Chciałbym jednak dodać do swojego mega wystrzałowego demka muzykę. Jednym okiem rzucam na ten tutorial (https://digitalerr0r.wordpress.com/2011/05/01/commodore-64-programming-9-interrupts-and-music/ (https://digitalerr0r.wordpress.com/2011/05/01/commodore-64-programming-9-interrupts-and-music/)) i widzę, że program odwołuje się do dodatkowego pliku (music.sid). I tu pojawia się problem, jak skonfigurować Relanch'a aby po odpaleniu mojego programu, znalazł także plik music.sid? Pisząc na prawdziwym C64 nie byłoby problemu (w końcu i plik programu i plik muzyczny byłyby na tej samej dyskietce). Jak jednak "pożenić" je pod emulatorem?
Za wszelkie sugestie byłbym bardzo wdzięczny. Aha... a to wystrzałowe demo ma narazie jeden zajefajny efekt - czyszczenie ekranu i ramki :)
Pozdrawiam!
-
a jaki masz assembler podpięty do tego relauncha?
wstawiasz tak jak podano w przykładzie (składnia zależy od używanego assemblera)
org $1000-$7e
INCBIN “music.sid”
często np.
*=$1000-$7e ; te $7e to nagłówek pliku .SID, reszta to prg jak w c64
.binary "ścieżka do pliku .sid"
-
Dzięki Skull za odpowiedź. Mam podpiętego 64tass. Z tym, że mi chodzi bardziej o to jak fizycznie podpiąć plik .sid do programu. VICE po odpaleniu głównego programu .PRG nie będzie miał jakby podlinkowanego pliku .sid (po prostu polecenie INCBIN "music.sid" nie znajdzie takiego pliku)
-
proponuje zajrzeć do ksiażki, turtorialu zanim zaczynasz pytać o takie rzeczy.
Książka to nie "forum zrób mi demo"
To co napisał skull wystarczy.
-
Zdaję sobie sprawę, że pytam może o rzecz oczywistą dla niektórych. Ale chyba korona z głowy nikomu nie spadnie, nawet podczas odpowiedzi na lamerskie pytanie nowicjusza (a Ciebie Kisiel to już dawno olewam ciepłym moczem, może jeszcze kilka wizyt na AmiParty to się uspołecznisz :P)
-
incbin zlinkuje ci statycznie sida i wpakuje do prg pod wskazany adres. Żaden ze mnie koder, ale tak robiłem prg z muzyką z GoatTrackera. I polecam do wystrzałowego dema skomponowanie mimo wszystko coś własnego. Nawet bez zdolności muzycznych można przy pomocy wspomagaczy typu ChordBot na Androida przygotować coś ciekawego, wyeksportować do midi, a potem wklepać do C64. Ale na scenie bym tego nie wystawiał :D
-
Tak jak napisał Skull to będzie działać jak pominiesz nagłówek pliku SID, składnia zależy od asma może to też wyglądać tak:
*=$1000
!binary "muzyka.sid",,$7e
trzeba podać żeby zlinkował plik od ofsetu $7e
oczywiście wszystko będzie ok jeżeli load adres jest od $1000
-
Zbych, odebrałeś okazję do wysiłku umysłowego polegającego na czytaniu ze zrozumieniem.
Forum robi demo, tego jeszcze nie było :)
Robiliśmy już grę ztcp.
Nowinka.
-
Zbych, odebrałeś okazję do wysiłku umysłowego polegającego na czytaniu ze zrozumieniem.
Forum robi demo, tego jeszcze nie było :)
Robiliśmy już grę ztcp.
Nowinka.
Oj tam, oj tam, ten post była rozrywka, a gra się cały czas robi. Ja miałem dziś większy problem, nie chce zaśmiecać forum zbędnymi fragmentami kodu chociaż... jak ci się nudzi to: co spieprzyłem w tym kodzie, bo od czasu do czasu migają multipleksowane sprajty?? Podpowiedź: addAndUpdateScore wywoływane jest poza przerwaniami rastra, co jakieś... 32 ramki:
;dodaje wyniku zawartość z akumluatora i aktualizuje to co jest wyświetlane
addAndUpdateScore
pha
sed
clc
adc SCORE_REG_START
sta SCORE_REG_START
bcc .addScoreEnd
lda SCORE_REG_START+1
adc #$00
sta SCORE_REG_START+1
bcc .addScoreEnd
[...]
;update screen
.addScoreEnd
cld
lda SCORE_REG_START+2
tay
and #%00001111
ora #$20
sta SCORE_TEXT_START+SCREEN_START+1
[...]
pla
rts
;procedura w przerwaniach rastra
sprMplxIrq
pha
txa
pha
tya
pha
ldy irqPtr
lda rasterIrq,y
tax
inx
.......
pla
tay
pla
tax
pla
rti
-
@Zbych & bor@s: Dzięki chłopaki za pomoc. Problem oczywiście leżał w moim kodzie, który nie był w stanie odtworzyć poprawnie muzyczki (która de facto była już w pamięci). No cóż, nie każdy rodzi się od razu takim geniuszem jak Kisiel. Tak czy owak dzięki za miłe przyjęcie na forum ;)
-
Zbych, odebrałeś okazję do wysiłku umysłowego polegającego na czytaniu ze zrozumieniem.
Forum robi demo, tego jeszcze nie było :)
Robiliśmy już grę ztcp.
Nowinka.
Oj tam, oj tam, ten post była rozrywka, a gra się cały czas robi. Ja miałem dziś większy problem, nie chce zaśmiecać forum zbędnymi fragmentami kodu chociaż... jak ci się nudzi to: co spieprzyłem w tym kodzie, bo od czasu do czasu migają multipleksowane sprajty?? Podpowiedź: addAndUpdateScore wywoływane jest poza przerwaniami rastra, co jakieś... 32 ramki:
;dodaje wyniku zawartość z akumluatora i aktualizuje to co jest wyświetlane
addAndUpdateScore
pha
sed
clc
adc SCORE_REG_START
sta SCORE_REG_START
bcc .addScoreEnd
lda SCORE_REG_START+1
adc #$00
sta SCORE_REG_START+1
bcc .addScoreEnd
[...]
;update screen
.addScoreEnd
cld
lda SCORE_REG_START+2
tay
and #%00001111
ora #$20
sta SCORE_TEXT_START+SCREEN_START+1
[...]
pla
rts
;procedura w przerwaniach rastra
sprMplxIrq
pha
txa
pha
tya
pha
ldy irqPtr
lda rasterIrq,y
tax
inx
.......
pla
tay
pla
tax
pla
rti
pewnie problem z systemem dziesiętnym/szesnastkowym - dlatego nie używam dziesiętnego, i wydaje mi się że w 99% przypadków jest on zbędny
-
leżałem w wyrze i też tak pomyślałem. Przepełnienie i dodawanie z dupy wartości daje ciekawe wyniki, musiałbym spojrzeć w mój kod.
-
pewnie problem z systemem dziesiętnym/szesnastkowym - dlatego nie używam dziesiętnego, i wydaje mi się że w 99% przypadków jest on zbędny
Tak, jest to związane z dziesiętnym. Po prostu czasami przerwanie wywoływało się w połowie obliczeń gdy była ustawiona flaga dla BCD i wtedy dziwne rzeczy się działy.
Wystarczy w procedurze przerwań wrzucić na stos rejestr stausu i profilaktycznie wyłączyć tryb dziesiętny, czyli:
php
cld
i wszystko wróciło do normy
Tylko to nie było takie oczywiste co powoduje miganie sprajtów, tym bardziej że wtedy testowałem odtwarzanie muzyki i SFX jednocześnie więc to mnie zmyliło, a wcześniej nie zauważyłem migania bo jest ono sporadyczne.
Jak będę miał jeszcze jakąś ciekawą zagadkę to wrzucę na forum.
-
spoko wrzucaj, proponuje utworzyć nowy wątek "ZbychoZagdka"
Nie bardzo rozumiem po co używać decimal poza HID.
-
spoko wrzucaj, proponuje utworzyć nowy wątek "ZbychoZagdka"
Nie bardzo rozumiem po co używać decimal poza HID.
Np. do wyświetlenia wyników. Wydaje mi się że łatwiej (i szybciej) policzyć i wyświetlić BCD niż konwertować HEX do postaci umożliwiającej wyświetlenie, tym bardziej że to licznik kilkubajtowy.