C64Power Forum
Ogólne => Forum Ogólnodyskusyjne => Wątek zaczęty przez: Gelip w 04 Lutego 2011, 14:40
-
Może ktoś mi pomóc wpisać i uruchomić program Muzyka z magnetofonu w assemblerze? http://www.c64.cba.pl/index.php?text_id=57
Próbuję w Monitorze Action Replay i w programie Turbo Assembler 1.1F (Mr. Fiz) ale coś mi nie wychodzi. Ta wersja jest z polską instrukcją, którą przepisałem do pliku .doc i ma nie 72 tylko 70 funkcji :-) (Mr. Fiz albo przeoczył 2 funkcje albo pomylił numerowanie :-) ). Wrzucam program z moją instrukcją PL. http://rapidshare.com/files/446150337/Turbo_Assembler_1.1f.rar
-
Co konkretnie nie wychodzi? W tasie najpierw <-C, potem definiujesz gdzie ma się zaczynać program, czyli przykładowo *=4096, przepisujesz kod odtwarzacza ;) i jak już gotowe <-3 uruchamia program.
-
W Monitorze Actiona:
najpierw w pierwszej linii trzeba podać adres startowy programu (np: $C000 = 49152) wraz z komendą rozpoczynającą pisanie programu \'A\' a potem to już samo leci... naciskanie klawisza RETURN oznaczyłem [return]
A $C000 LDX #$00 [return]
STX $D011 [return]
SEI [return]
LDX #$00 [return]
LDA $DC0D [return]
AND #$10 [return]
BEQ $C011 [return]
LDX #$0F [return]
STX $D418 [return]
JMP $C006 [return]
[return] (naciskamy sam klawisz bez wpisywania czegokolwiek)
X [return] (wychodzimy z monitora)
sys 49152 (uruchamiamy program z poziomu BASIC`a)
i włączasz magnetofon z kasetą w środku, tylko nie oczekuj za wiele...
W \'Commodore & Amiga\' nr 09/92 na str. 22 był artykuł pt: PROGRAMOTEKA: DIGITALIZACJA I MAGNETOFON z podobnym programem tylko, że ładowało się go z poziomu BASIC`a. Gazetka do ściągnięcia na http://ca-fan.pl/ w dziale download
-
Zaraz mnie normalnie coś trafi
Czemu te assemblery są takie różne i w każdym inaczej się wpisuje kod. Działam na emulatorze CCS64 V3.6 w WinXP SP2. Pobrałem obraz cartridge`a Final 3 z http://www.c64.ch/programming i próbuję wpisać kod według instrukcji tam zawartych. Nie mogę wpisać adresu $C000 w pierwszej linii. Po wpisaniu A $C000 LDX #$00 i Enter pojawia się znak zapytania w miejscu znaku dolara $. Korzystają z instrukcji na wymienionej stronie zaczynam od innego adresu od A2000 i mogę wpisywać kod dalej ale utknąłem na lini BEQ i nie wiem jaki adres mam wpisać. Dlaczego linie nie są numerowane po kolei z krokiem co 1? Sorry ale zupełnie nie znam się na assemblerze i proszę o wytłumaczenie jak krowie na rowie jak wpisać ten programik :-). Zacząłem tak:
.A2000 LDX #$00
.A2002 STX $D011
.A2005 SEI
.A2006 LDX #$00
.A2008 LDA $DC0D
.A200B AND #$10
.A200D BEQ i tutaj nie wiem co wpisać bo chyba nie $C011
i w ostatniej linii mam wpisać JMP 2006 (skok do linii gdzie zaczyna się LOOP?)
Pobrałem wszystkie wersje Action z Action Replay i której mam użyć aby zacząć od adresu $C000 ?
Link wideo
Wpisałem ten listing z C&A i działa, ale mam mały problem bo nie mam prawdziwego C64 i magnetofonu a jedynie emulator. Zrobiłem tak:
1. Za pomocą programu Audiotap skonwertowałem pierwszy lepszy plik WAV z muzyką do pliku TAP
2. W emulatorze uruchomiłem program z listingu z C&A
3. Przez F9 wszedłem do menu Tape Device 1..., zaznaczyłem utworzony wcześniej plik TAP i zamiast F1=Run wybrałem F2=Select Tape
4. Dźwięk było słychać ale bardzo marnej jakości. Podejrzewam, że to wina konwertera Audiotap który skonwertował plik WAV do TAP obniżając jakość WAV. Gdy porównamy plik wav i tap w WinHex to widać jak bardzo plik tap jest mniejszy od wav
Search for differences
1. C:\\lato.tap: 358 656 bytes
2. C:\\lato.wav: 18 155 654 bytes
Jak wstawić same dane samplingu z pliku WAV do pliku TAP za pomocą edytora np. WinHex? Chodzi o to aby w emulatorze otworzyć wirtualną kasetę ale z danymi audio a nie piskami. Czy to ma sens, czy lepiej nie będzie niż po skonwertowaniu pliku WAV do TAP za pomocą Audiotap?
-
Po pierwsze mia ma większego sensu bawić się tymi programami, jeśli nie ma się C64 z magnetofonem. Jeśli czytałeś artykuł w C&A to pewnie wiesz że jakość odtwarzanego dźwięku będzie kiepska z wiadomych względów.
Jeżeli chcesz używać obraz cartridge`a FINAL 3 to pomiń znak $ pomiędzy \'A\' a \'c000\' w pierwszej lini. A reszta tak samo. Programy różnią się między sobą szczegółami obsługi. tak jak różnią się np: pakiety biurowe pod windows`em, niby robią to samo i obsługa jest podobna, ale... różnią się trochę obsługą. Sposób wpisywania programów zależy od tego jakiego programu użyjesz do wpisania programu (trochę to zawiłe).
Proponuję na początek poszukać sobie jakiegoś kursu asamblera dla c64 i poczytać (coś jest na C64 POWER w dziale artykuły/asembler). Poszukać sobie jaka jest różnica pomiędzy programami: \'monitor\' i \'asembler\'. I znaleźć instrukcje obsługi któregoś z nich.
Oryginalny program, który znajduje się na c64.cba.pl ma dwa skoki z etykietą, zamiast adresu LOOP i NOSND. Jeśli chcesz wpisywać program od innego adresu początkowego to albo trzeba przeliczyć adres skoku albo użyć etykiety. Forma etykiety zależy niestety od programu którego chcesz używać do wpisania...
-
Do zabawy polecam gotowca, można nim słuchać kaset z muzyką na C64, ale jak przedmówca wspomniał, jakość pozostawia wiele do życzenia. Niemniej jednak można posłuchać, fajna ciekawostka ;)
http://noname.c64.org/csdb/release/?id=12834
-
OK, rozumiem, że jakość dźwięku będzie taka sama jak uzyskana w emulatorze. Skoro tak to faktycznie kiepska jakość :-( . Myślałem, że tym sposobem można posłuchać muzyki z Datasette nie przerabiając wtyczki, że taki program przekieruje - jak leci -(bez przetwarzania) sygnał z taśmy na port w C64 do którego podłączamy np. wieżę lub inny odbiornik dźwięku. No nic, dzięki za pomoc.
-
\'Dlaczego linie nie są numerowane po kolei z krokiem co 1?\'
\'i w ostatniej linii mam wpisać JMP 2006 (skok do linii gdzie zaczyna się LOOP?)\'
Nie są to numery linii, tylko adresy w pamięci. Następny adres jest wyliczany na
podstawie tego ile bajtów w pamięci zajmuje bieżący rozkaz. Przeważnie sam mnemonik
zajmuje 1 bajt + argumenty (to już różnie, w zależności np. od tego czy argumentem
jest adres i czy jest on 8 mio czy 16 bitowy).
$ - oznacza że jest to liczba w postaci szesnastkowej, przyjęło się że w asemblerze operujemy na liczbach szesnastkowych, niektóre dopuszczają stosowanie zapisu dziesiętnego.
# - oznacza że jest to liczba, a nie adres w pamięci, dla adresu nie podajemy #
LDA #$01 - oznacza załadowanie akumulatora wartością 01
LDA $01 - oznacza żę do akumulatora ładujesz zawartość komórki o adresie $01
Polecam poczytać kurs asemblera z C&A.
-
OK. Dzięki. Do zyga: Mam prośbę. Mógłbyś nagrać do AVI jak wpisać ten program? Emulator CCS64 V3.6 - Shift+Alt+V (nowsza wersja wymaga Framework 3.5) np. za pomocą obrazu cartridge`a Action_Replay_V6.0_6.0_1989_PAL.crt z paczki http://rr.c64.org/w/images/9/92/Action_Replay_all_rr.c64.org_2010-10.rar
Emulator w wersji 3.6 -> http://rapidshare.com/files/156311230/Computerbrains.CCS64.v3.6.rar
Myślę, że to co napisałeś + sposób wpisywania kodu pozwoli mi zrozumieć o co biega szybciej niż czytanie obszernych poradników :-)