C64Power Forum
Ogólne => Szukam, zapomniałem, nie pamiętam tytułu... => Wątek zaczęty przez: pawciopl w 29 Czerwca 2009, 15:35
-
Poszukuję listingi programów napisanych w basic`u , tak abym mógł je sobie przepisać na komodorcu i uruchomić .
-
ściągnij sobie skany książek powyżej albo z retroreaders numery kebaba czy też c&a - tam będzie sporo...
-
http://www.bombjack.org/commodore/books/pdf/Mostly_BASIC%20Applications_for_your_Commodore_64_Book_1.pdf
http://www.bombjack.org/commodore/books/pdf/Mostly_BASIC%20Applications_for_your_Commodore_64_Book_2.pdf
http://www.bombjack.org/commodore/books/pdf/24_Tested_Ready-To-Run_Game_Programs_in_BASIC.pdf
http://www.bombjack.org/commodore/books/pdf/34_More_Tested_Game_Programs_in_BASIC.pdf
A tutaj masz listing programu jaki ostatnio napisałem. :) Wykreśla on na ekranie jeden z najsłynniejszych fraktali - zbiór Mandelbrota. Na C64 całość będzie trwała kilka lub kilkanaście godzin, więc lepiej uruchamieć w emulatorze z najszybszą mozliwą prędkością.
5 POKE 53280,6
10 POKE 53272, PEEK (53272) OR 8
20 POKE 53265, PEEK (53265) OR 32
40 FOR Y = 1024 TO 2023
50 POKE Y, 246
60 NEXT Y
70 FOR X = 8192 TO 16191
80 POKE X, 0
90 NEXT X
100 D = 3/266
110 E = 2/200
120 FOR X = 0 TO 266
130 FOR Y = 0 TO 199
140 GOSUB 500
150 IF C = 50 THEN K = X + 53 : GOSUB 1000
160 NEXT Y
170 NEXT X
180 GOTO 180
500 A = 0
510 B = 0
520 C = 0
530 X2 = (D * X) - 2
540 Y2 = (E * Y) - 1
550 A2 = A* A- B * B
560 B2 = 2 * A * B
570 A = A2 + X2
580 B = B2 + Y2
590 Z = A * A + B * B
600 IF Z >= 4 THEN RETURN
610 C = C + 1
620 IF C = 50 THEN RETURN
630 GOTO 530
1000 PY = INT (Y / 8)
1010 PX = INT (K / 8)
1020 LIN = Y AND 7
1030 BIT = 7 - (K AND 7)
1040 BAJT = 8192 + PY * 320 + PX * 8 + LIN
1050 POKE BAJT, PEEK (BAJT) OR (2 ^ BIT)
1060 RETURN
-
Dzięki ! o takie amatorskie programy mi chodziło ja postaram się umieścić także swoje
-
Pisz pisz i przepisuj, potem trafisz na taką linię:
10 sys(2064)
Potem zaczniesz się zastanawiać co się po tym sys(2064) dzieje i... może zaczniesz programować?
-
Na razie monitor i te \'inne\' sprawy mnie odstraszają :)
-
W ogóle się tym nie przejmuj. Jeśli sprawia Ci radochę pisanie w BASICU, pisz w BASICU. Będziesz miał ochotę spróbować kodu maszynowego, spróbujesz. Nie będziesz miał - nie spróbujesz.
Ja kiedyś pisałem dość sporo w kodzie maszynowym. Sam język w miarę pamiętam, ale wyleciały mi z głowy wszystkie adresy, obsługa przerwań, grafiki itp. Czasami ciągnie mnie by sobie przypomnieć, ale jak próbuję z jakąś książką, to mnie odrzuca. :) A w BASICU coś sobie skrobnę od czasu do czasu i mnie to zwyczajnie cieszy. Tak więc - do roboty! No i wrzucaj listingi programów, choćby najbanalniejszych. Ja Cię nie wyśmieję. ;)
-
Tomaaz: wpisałem Twój program do mojego C64. Po trzynastu godzinach pracy (od 11 w nocy do południa następnego dnia) uzyskałem taki efekt:
http://obrazki.elektroda.net/73_1246703885.jpg
http://obrazki.elektroda.net/91_1246703952.jpg
Bardzo fajny żuczek
-
fajny sprzęt elektroniczny masz w domu
Jak chcesz zobaczyć inne ciekawe fraktale szybciej liczone obejrzyj np. winteractive albo coma light 12 oxyronu
-
No, sprzęt jest fajny
W większości własnej roboty
---
Mam różne własne programy. Napisz, jaki by Cię interesował, a go spróbuję przepisać (w nawiasach jest podana długość programu):
-Generator funkcji (strasznie, by nie powiedzieć inaczej, długi; obsługuje trzy kanały SIDa, ustawienia pokazywane są jako ramka poruszająca się nad skalą, generuje przebiegi: trójkątny, piłokształtny, prostokątny o regulowanym wypełnieniu i biały szum. Można je na siebie nakładać, regulować ich amplitudę, częstotliwość itp.)
-Program do projektowania obiektów Sprite (też strasznie długi; obiekt rysuje się myszką lub joystickiem na większej części ekranu - jeden piksel ma wielkość czcionki. Następnie obrazek można zakodować tak jak to się robi dla obiektów Sprite (ale wszystko robi komputer w około 20s). Pokazuje się podgląd, który można powiększyć 2x. Obrazki w formie gotowej serii liczb można zapisać na dyskietce, przepisać z ekranu, wydrukować. Do wydrukowania niezbędny jest odpowiedni interfejs User Port, głowica z drukarki igłowej, kartka papieru i kalka
. Z dyskietki można obrazek wczytać i edytować.)
-
-Program do porządkowania zawartości dyskietki (mogę przepisać; umożliwia zmianę nazwy pliku, usunięcie jednego lub serii plików, formatowanie dyskietki. W każdym momencie można zobaczyć katalog dysku)
-Program do sprawdzania zawartości pamięci (też jakoś przepiszę; pokazuje zawartość z określonego przedziału lub śledzi zmiany w jednej komórce. Umożliwia też wpisanie do przedziału lub jednej komórki jakiejś liczby)
-Gra - lecisz balonem, przeszkadzają Ci inne balony i nieruchome (!) ptaszki, musisz w określonym czasie (chyba 40s)dolecieć do czarnego balonu
. Wbrew pozorom nie jest to takie łatwe. (troszkę długaśny)
-Prototyp sterownika myszy (krótki; porusza wskaźnikiem w formie krzyżyka)
-Zegarek wielofunkcyjny (łatwo się przepisze, ma budzik, minutnik i takie tam różne)
Mam też programy wykorzystujące User Port (sterownik wyświetlacza widmowego, głowicy z drukarki igłowej (ten program jest też częścią innego, do projektowania duszków), program parkujący mechanizm kserokopiarki itp.). Wymagają odpowiedniego interfejsu podłączanego do user portu.
-
A Ty masz te programy tylko na oryginalnym C64 czy też na PC. Bo jak one takie długie, to ciężko Ci będzie przepisywać. Jak masz na PC to podeślij mi mailem tego od spriteów i tego od dźwięku.
A ode mnie jeszcze jeden fraktal. Tym razem prostszy, ale za to z polskim rodowodem - \'Trójkąt Sierpińskiego\'. No i na efekt nie trzeba czekać tak długo. :)
5 POKE 53280,6
10 POKE 53272, PEEK (53272) OR 8
20 POKE 53265, PEEK (53265) OR 32
40 FOR Y = 1024 TO 2023
50 POKE Y, 246
60 NEXT Y
70 FOR X = 8192 TO 16191
80 POKE X, 0
90 NEXT X
100 X1 = 160
110 X2 = 160
120 Y1 = 0
130 Y2 = 0
140 FOR K = 1 TO 50000
150 LOS = INT (RND (1) * 3)
160 IF LOS = 0 THEN X1 = (X2 + 160) / 2 : Y1 = Y2 / 2
170 IF LOS = 1 THEN X1 = X2 / 2 : Y1 = (Y2 + 200) / 2
180 IF LOS = 2 THEN X1 = (X2 + 320) / 2 : Y1 = (Y2 + 200) / 2
190 GOSUB 1000
200 X2 = X1
210 Y2 = Y1
220 NEXT K
230 GOTO 230
1000 PY = INT (Y1 / 8)
1010 PX = INT (X1 / 8)
1020 LIN = Y1 AND 7
1030 BIT = 7 - (X1 AND 7)
1040 BAJT = 8192 + PY * 320 + PX * 8 + LIN
1050 POKE BAJT, PEEK (BAJT) OR (2 ^ BIT)
1060 RETURN
-
Niestety, te programy mam tylko na oryginalnym C64
Ale to nic, mogę spróbować przepisać (bo nawet porządnej drukarki do C64 nie mam). Akurat są takie deszczowe dni...
Zacznę od generatora funkcji.
-
Właśnie zobaczyłem listing programu \'od dźwięków\' zajmującego 18 bloków dyskietki (program do projektowania duszków zajmuje aż 22 bloki). Ostatnia linia ma numer 1750 (w tym drugim aż 6080), a odstępy nie zawsze wynoszą 10. Niestety tyle zajmuje obsługa suwaczków nad skalami i innych gadżetów. Może więc zrobię inaczej: nagram program(y) na taśmę, i te piski zapiszę na komputerze (prawdopodobnie *.WAV). Plik wyślę lub umieszczę w internecie. Trzeba go będzie sobie nagrać na taśmę i wrzucić do komputerowego kaseciaka (a może emulatory mają wirtualny magnetofon?).
-
O przepisywaniu to nawet nie myśl. To mordęga. A i bez błędów się pewnie nie obejdzie (poprawianie zajmnie więcej czasu niż przepisywanie).
Ja nie mam C64. Nie wiem też czy ta metoda z WAV jest dobra. Może znajdziesz program, który przerobi tego WAVa na PRG? Ktoś bardziej obeznany w sprawach sprzętowych powinien się wypowiedzieć.
-
Ja dołożę do tego swoje trzy grosze: Bardzo dobra jest książka Rüdigera Baumanna \'Grafika komputerowa\'. Facet prowadzi człowieka za rączką, pokazując mu jak tworzyć w BASIC-u grafikę. Ksiazka jest REWELACYJNA i warto ja mieć w swoich zbiorach. Ktoś tu kiedyś już nawet jej szukał - bywa na Allegro. Sam mam, ale kompletnie brak mi czasu na zeskanowanie jej. Żałuję, niestety życie (a przede wszystkim zdobywanie kasy na to życie) jest ważniejsze. Ale może jednak mi sie uda znaleźć trochę czasu...
-
Też ją mam, ale jeszcze nie przestudiowałem jej do końca. Polecam, bo książka chcąc nie chcąc wprowadza do turbo assemblera.
-
Emulatory MAJĄ wirtualne magnetofony, a i jest program WAV-PRG i Tape64 (ten ostatni pod DOSa) do konwertowania WAV->PRG i na odwrót. Poza tym najlepszy do transferu C64-PC-C64 jest kabelek XE1541 i pecet z DOSem i programem 64HDD - emuluje 1541 w plikach D64.
-
Kilka ciekawych programów można znaleźć w książce Romana Poznańskiego.
http://www.filety.net/arty/literatura/offline/przygody-z-komputerem.rar
-
Ja kiedyś napisałem wiele programów w Basicu, ale większość to takie durnoty xD. Jednak były tez warte uwagi jak np. program do zamieniania liczb binarnych na dziesiętne i odwrotnie, program do robienia duszków - rysowało się joystickiem.
A mam pytanie. Jak w emulatorze odpalić te programy których listingi niektórzy z was podali? Wkleić to trzeba najpierw do notatnika tak? A co dalej?
-
A nie możesz po prostu przepisać?
Możesz też skorzystać z tego programu http://www.ajordison.co.uk/index.html .
W emulatorze VICE istnieje możliwość bezpośredniego wklejania tekstu, ale - przynajmniej u mnie - zamiast liter pojawiają się różne znaczki (cyfry pozostają niezmienione). Jest na to jakaś rada?
-
a gdzie reszta wątku?
-
Właśnie zaskoczyłem - możesz jeszcze fasta dorobić bo tam jest symetria - czyli jak spojrzysz na pointy:
(Xmin ; Y Min) = (Xmin ; Ymax)
Chyba jasne to - jak poprawisz będzie 2 x szybciej :)
-
W tym uproszczonym przypadku zbioru Mandelbrota rzeczywiście można tak zrobić, ale jeśli chciałbyś wprowadzić np. opcję powiększania, to już oczywiście nie będzie to działać.
Dzięki i pozdrawiam!
-
Ja właśnie o TYM przypadku mówię :)
Powiedziałeś \'A\' - to i \'B\' - popraw 2 x szybciej będzie - czy to nie fajne ?
-
130 FOR Y = 0 TO 99
...
150 IF C = 50 THEN K = X + 53 : GOSUB 1000: Y = 199 - Y : GOSUB 1000
Nie jestem pewien czy dokladnie tak, bo nie mam w tym momencie dostepu do emulatora (jak rowniez do polskich znakow
).
-
Jakbyś mógł to popraw i cały wrzuć OK
-
Poprzednia poprawka byla zla. Tu jest calosc i teraz powino byc OK.
5 POKE 53280,6
10 POKE 53272, PEEK (53272) OR 8
20 POKE 53265, PEEK (53265) OR 32
40 FOR Y = 1024 TO 2023
50 POKE Y, 246
60 NEXT Y
70 FOR X = 8192 TO 16191
80 POKE X, 0
90 NEXT X
100 D = 3/266
110 E = 2/200
120 FOR X = 0 TO 266
130 FOR H = 0 TO 99
140 GOSUB 500
150 IF C = 50 THEN K = X + 53 : Y = H : GOSUB 1000 : H = 199 - Z : GOSUB 1000
160 NEXT Z
170 NEXT X
180 GOTO 180
500 A = 0
510 B = 0
520 C = 0
530 X2 = (D * X) - 2
540 Y2 = (E * Y) - 1
550 A2 = A* A- B * B
560 B2 = 2 * A * B
570 A = A2 + X2
580 B = B2 + Y2
590 Z = A * A + B * B
600 IF Z >= 4 THEN RETURN
610 C = C + 1
620 IF C = 50 THEN RETURN
630 GOTO 530
1000 PY = INT (Y / 8)
1010 PX = INT (K / 8)
1020 LIN = Y AND 7
1030 BIT = 7 - (K AND 7)
-
Zle mi sie wkleilo.
5 POKE 53280,6
10 POKE 53272, PEEK (53272) OR 8
20 POKE 53265, PEEK (53265) OR 32
40 FOR Y = 1024 TO 2023
50 POKE Y, 246
60 NEXT Y
70 FOR X = 8192 TO 16191
80 POKE X, 0
90 NEXT X
100 D = 3/266
110 E = 2/200
120 FOR X = 0 TO 266
130 FOR H = 0 TO 99
140 GOSUB 500
150 IF C = 50 THEN K = X + 53 : Y = H : GOSUB 1000 : Y = 199 - H : GOSUB 1000
160 NEXT Z
170 NEXT X
180 GOTO 180
500 A = 0
510 B = 0
520 C = 0
530 X2 = (D * X) - 2
540 Y2 = (E * Y) - 1
550 A2 = A* A- B * B
560 B2 = 2 * A * B
570 A = A2 + X2
580 B = B2 + Y2
590 Z = A * A + B * B
600 IF Z >= 4 THEN RETURN
610 C = C + 1
620 IF C = 50 THEN RETURN
630 GOTO 530
1000 PY = INT (Y / 8)
1010 PX = INT (K / 8)
1020 LIN = Y AND 7
1030 BIT = 7 - (K AND 7)
1040 BAJT = 8192 + PY * 320 + PX * 8 + LIN
1050 POKE BAJT, PEEK (BAJT) OR (2 ^ BIT)
1060 RETURN
-
Sprawdziłeś, że działa? Tak pytam bo ja jeszcze nie...
-
Nie, bo wciaz w podrozy.
-
komorka tak samo jak u mnie? ze nie masz pl znakow...
-
Laptop, ale nie moj i bez polskich znakow.
-
Mandelbrot - poprawiona (szybsza) wersja.
5 POKE 53280,6
10 POKE 53272, PEEK (53272) OR 8
20 POKE 53265, PEEK (53265) OR 32
40 FOR Y = 1024 TO 2023
50 POKE Y, 246
60 NEXT Y
70 FOR X = 8192 TO 16191
80 POKE X, 0
90 NEXT X
100 D = 3/266
110 E = 2/200
120 FOR X = 0 TO 266
130 FOR H = 0 TO 99
140 GOSUB 500
150 IF C = 50 THEN K = X + 53 : Y = H : GOSUB 1000 : Y = 199 - H : GOSUB 1000
160 NEXT H
170 NEXT X
180 GOTO 180
500 A = 0
510 B = 0
520 C = 0
530 X2 = (D * X) - 2
540 Y2 = (E * Y) - 1
550 A2 = A* A- B * B
560 B2 = 2 * A * B
570 A = A2 + X2
580 B = B2 + Y2
590 Z = A * A + B * B
600 IF Z >= 4 THEN RETURN
610 C = C + 1
620 IF C = 50 THEN RETURN
630 GOTO 530
1000 PY = INT (Y / 8)
1010 PX = INT (K / 8)
1020 LIN = Y AND 7
1030 BIT = 7 - (K AND 7)
1040 BAJT = 8192 + PY * 320 + PX * 8 + LIN
1050 POKE BAJT, PEEK (BAJT) OR (2 ^ BIT)
1060 RETURN
-
Dałbyś gdzieś linka do wersji z d64 czy t64, żeby nie trzeba było wpisywać
-
@wegi: np. w vice można przeklejać
-
i jest jeszcze błąd w linii :
540 Y2 = (E * Y) - 1
zamiast Y powinno być H
-
listingi tez sie przydaja tym, co nie maja zadnych nosnikow np. kaset
-
wegi, dalbym linka i zrobil to raz i porzadnie, gdybym miel swobodny dostep do emulatora i do komputera w ogole.
skull, dzieki!
-
dzięki dzięki skull - już nie mogę się pastwić nad Tomaaz`em - ale jak będziesz miał dostęp to w końcu zrobisz gotowe do pobrania Tomaaz?
-
Wróciłem, przyjrzałem się i... było źle.
Tutaj wersja ostateczna do ściągnięcia - http://w684.wrzuta.pl/plik/0f5U1rcoRyp/mandelbrot .
A tu listing:
5 POKE 53280,6
10 POKE 53272, PEEK (53272) OR 8
20 POKE 53265, PEEK (53265) OR 32
40 FOR Y = 1024 TO 2023
50 POKE Y, 246
60 NEXT Y
70 FOR X = 8192 TO 16191
80 POKE X, 0
90 NEXT X
100 D = 3/266
110 E = 2/200
120 FOR X = 0 TO 266
130 FOR H = 0 TO 100
140 GOSUB 500
150 IF C = 50 THEN K = X + 53 : Y = H : GOSUB 1000 : Y = 200 - H : GOSUB 1000
160 NEXT H
170 NEXT X
180 GOTO 180
500 A = 0
510 B = 0
520 C = 0
530 X2 = (D * X) - 2
540 Y2 = (E * H) - 1
550 A2 = A* A- B * B
560 B2 = 2 * A * B
570 A = A2 + X2
580 B = B2 + Y2
590 Z = A * A + B * B
600 IF Z >= 4 THEN RETURN
610 C = C + 1
620 IF C = 50 THEN RETURN
630 GOTO 530
1000 PY = INT (Y / 8)
1010 PX = INT (K / 8)
1020 LIN = Y AND 7
1030 BIT = 7 - (K AND 7)
1040 BAJT = 8192 + PY * 320 + PX * 8 + LIN
1050 POKE BAJT, PEEK (BAJT) OR (2 ^ BIT)
1060 RETURN
-
@Gornipio:
cyt \' listingi tez sie przydaja tym, co nie maja zadnych nosnikow np. kaset \'
Raczej chodzi tu o wartość poznawczą, możliwość przeanalizowania kodu. Bo praca z komputerem bez jakiejkolwiek pamięci masowej mija się z celem. Chociaż pamiętam że kiedyś wpisałem z Bajtka \'Tylko o Atari\' grę Tron i nie wyłączałem komputera przez kilka dni, bo nie miałem magnetofonu ;)
-
@zyga niezłe ;P
-
Offtopic, ale pamiętam z magnetofoniarskich czasów, że gdy zacząłem rysować w ArtStudio (głównie dlatego że pozwalało ono zapisywać obrazki na taśmie), na jednej stronie kasety 60 minut - zapis w normalu - mieściły się 3 obrazki :) Masakrą było czekanie aż obrazek się zapisze...
Do wyświetlania używałem potem procedurki z C&A wklepanej pod monitorem z BlackBoxa v8. A następnie zawartość pamięci zapisywałem z poziomu Black Boxa już w turbo z dodaną basicową linią sys. Black Box miał fajną instrukcję <-W służącą do zapisu zawartości pamięci z zadanym adresem początkowym i końcowym. Można było w ten sposób ominąć słynne Micrus Copy zmieniając adres startowy na wcześniejszy. Potem wystarczało załadować program poleceniem <-L\'\',1,1 i heja :)
Na wspominki mi się zebrało....
-
A jak się dorobiłem carta FC to już był hajlajf, bo można było ustawić znaczniki początka i końca programu w basicu i wydać komendę PACK ! To jedyna znana mi mozliwość skorzystania z packera dla magnetofoniarzy.
-
@Tomaaz spójrz na pętlę i przeanalizuj co się stanie, jak zamiast
630 GOTO 530
będzie
630 GOTO 550
...
-
Coś mi się na oko widzi, że efekt będzie ten sam, tylko trochę na czasie zaoszczędzimy. Aleś wypatrzył po trzech miesiącach.
-
Domyślasz się dlaczego patrzyłem... (?)...
-
Czyżbyś jednak zdecydował się napisać to w asemblerze?
Może byście ze skullem napisali ten kod w postaci dyskusji takiej jak w przypadku \'Sierpińskiego\'? To by było coś.
-
Czemu jednak - przecież mówiłem że to zrobię...
Teraz jest wszystko łatwe - Seriously fast multiplication na talerzu (codebase) - G. Tylor i Jackasser RULES
Trzeba to zrobić na 32bit integerach żeby się z float nie cackać.
-
Wiesz, to było tak dawno, że... W każdym razie ja wciąż jestem zainteresowany zagadnieniem.