Och, wenn man unbedingt will, kann man das auch in Basic machen.
Ist dann halt nur etwas langsamer.
Hallo Besucher, der Thread wurde 6,7k mal aufgerufen und enthält 31 Antworten
letzter Beitrag von mc71 am
Fragen zu Commodore BASIC 4.0 / Commodore 8096-SK
- Telespielator
- Erledigt
-
-
Bei ON ... GOTO (oder ON ... GOSUB) braucht man natürlich eien Kontrollvariable, die eine kleine ganze Zahl ist. Trotzdem ist das eleganter als Fallunterscheidungen mit langen Listen von IF ... THEN ... Zeilen.
Das berechnete GOTO der Sinclair-Rechner ist zwar zunächst einmal eine nette Spielerei. Aber wenn ein elegantes ON typ GOTO 500, 600, 700 zwangsweise zu einem kryptschen GO TO 400+typ*100 mutiert (weil es kein ON gibt) und das Konstrukt sich noch nichtmal RENUMBERn läßt... dann mag man es gar ncht mehr so dolle leiden.
(letztlich war es ja nur der Platzmangel im ZX81, daß sie die normale formel-Auswertung genommen haben- und beim Commodore hat's halt nicht für die Fallunterscheidung zwischen GOTO und RUN gelangt, sodaß GOTO fälschlich auch ohne Parameter durchgeht...)
-
Aber wenn ein elegantes ON typ GOTO 500, 600, 700 zwangsweise zu einem kryptschen GO TO 400+typ*100 mutiert (weil es kein ON gibt) und das Konstrukt sich noch nichtmal RENUMBERn läßt... dann mag man es gar ncht mehr so dolle leiden.
Stimmt! Daran hatte ich noch gar nicht gedacht. Damit hat sich der eigentlich erledigt. ON GOTO ist eindeutige die bessere Lösung.
-
An die Möglichkeit, statt GOTO 123 auch RUN 123 zu benutzen, hatte ich gar nicht gedacht. Aber löscht RUN nicht alle Variablen usw.?
-
Ja, klar. Es ging mir um die Frage, warum die Zeilennummer-Auswertung überhaupt mit Wert 'null' zurückkommt, wenn keine Nummer angegeben wird- anstatt einen Syntax-Error zu werfen. Daß GOTO sich dann zusätzöich noch die Prüfung auf ein Zeilenende oder Doppelpunkt spart, bevor es tatsächlich springt, kommt dann noch erschwerend hinzu (das waren die Fragen aus #1, die bislang noch offen waren)
-
Ich dachte das wäre beantwortet: BASIC spart sich die Fehlerauswertung, damit es in 8KByte reinpasst. Ist halt so.
-
Ich habe noch eine Frage zu Musik auf dem CBM bzw. in diesem Fall auf dem C64.
Hier wird das ja sehr verständlich beschrieben und ich habe damit jetzt auch schon
rumprobiert und es macht mir großen Spaß, den 8000er zum Dudeln zu bekommen.
Nachdem ich damals vom C16 auf den C64 umgestiegen bin, habe ich mich immer
geärgert, dass es die Programmierung mit SOUND und VOL nicht gibt, das BASIC 3.5
ist da wirklich angenehmer.
Im PET FAQ heißt es:Zitat
HOW DO I MAKE SOUND ON MY PET? This process sets the PET's shift register in a free-running state where the signal is used for sound generation. By adjusting the pattern of the output and the frequency you can produce a wide variety of sounds, and even music! Three pokes are required to make sound: POKE 59467,16 (turn on port for sound output use 0 to turn it off*) POKE 59466,octave (octave number, see below) POKE 59464,frequency (0 for no sound) After setting 59467 you can adjust 59466 and 59464 to get any sort of sound, but to get music you need to set them with specific values, here is a three-octave note table: Note Table: octave=15 octave=51 octave=85 Note Oct.0 Oct.1 ! Oct.1 Oct.2 ! Oct.2 Oct.3 Freq ------------+-------------+-------------- B 251 125 ! 251 125 ! 251 125 C 238 118 ! 238 118 ! 238 118 C# 224 110 ! 224 110 ! 224 110 D 210 104 ! 210 104 ! 210 104 D# 199 99 ! 199 99 ! 199 99 E 188 93 ! 188 93 ! 188 93 F 177 88 ! 177 88 ! 177 88 F# 168 83 ! 168 83 ! 168 83 G 158 78 ! 158 78 ! 158 78 G# 149 74 ! 149 74 ! 149 74 A 140 69 ! 140 69 ! 140 69 A# 133 65 ! 133 65 ! 133 65 Set 59466 with octave range desired and play notes by setting the frequency in 59464. To stop any sound use POKE 59464,0. * Note, due to a hardware bug, leaving the shift register in free running mode will cause problems when attempting to use the datasette so always POKE 59467,0 before attempting to use any tape commands. The process for using and playing sound can also be done on the 64/128 and VIC-20 the same connector pins are involved but the POKEs are different: Instead of 59467, 59466, and 59464 for the PET use these: on the VIC-20: 37147, 37146, and 37144 on the 64 or 128: 56587, 56586, and 56584...wobei mich der letzte Absatz hat aufhorchen lassen. Drei POKES und der C64 gibt Laut? Zu schön,
um wahr zu sein. Und so ist es scheinbar auch. Ich habe das ausprobiert wie beschrieben, aber
der Cevi blieb stumm. Was habe ich falsch gemacht? -
Im PET FAQ heißt es:
...wobei mich der letzte Absatz hat aufhorchen lassen. Drei POKES und der C64 gibt Laut? Zu schön,um wahr zu sein. Und so ist es scheinbar auch. Ich habe das ausprobiert wie beschrieben, aber
der Cevi blieb stumm. Was habe ich falsch gemacht?Nichts, die Beschreibung scheint einfach nur Quark zu sein. Die angegebenen drei Adressen sind Register von CIA2 ($ddXX); Sound macht im C64 aber der SID ($d4XX).
Laut Beschreibung erzeugt der PET den Sound mit einem Schieberegister, das könnte man theoretisch auch mit einem C64 machen, aber:
1. bräuchte man dafür Zusatzhardware am Userport (nur dort liegen die Pins der Schieberegister an), um tatsächlich Audio-Output zu erzeugen.
2. müsste man die richtigen CIA-Register beschreiben; die angegebenen Zahlen sind aber die Adressen der TOD-Register, also der Echtzeituhr. -
Habe dem Bo mal 'ne Mail geschrieben, mal sehen, ob er antwortet!
-
Für die CBM-8000 Reihe gab es auch Pascal. Hat Vorteile gegenüber Basic und ist schnell erlernt.
-
Danke für die Info und nun BTT:
Bo hat geantwortet:
ZitatI'm afraid I'm not the author, just the librarian, especially of the
stuff from the ftp site.I'm skeptical of anything that claims pin compatibility between the user
ports of the PET and VIC/C64 though.
Nichts neues also... Aber der Autor steht ja auch samt E-Mail-Adresse oben, den Larry habe ich jetzt also auch nochmal angeschrieben, aber die E-Mail-Adresse existiert nicht mehr, kam zurück. Mist! -
Beim VC20 kann das klappen, der hat auch eine VIA 6522, es braucht aber den Lautsprecher am Userport (wie auch bei den älteren piepserlosen PET, da war das eine Standardbastelei) und ich hab' keine Ahnung, mit welchen Systemfunktionen der Shiftregister-Sound beim VC20 kollidiert.
Der C64 hat eine CIA 6526 am Userport (und ein paar Bits der zweiten), die hat auch ein Schieberegister, das arbeitet aber völlig anders als bei der VIA und gibt seine Werte auch auf anderen Userport-Pins aus. Es reicht also nicht, nur die Basisadresse des Chuips anzupassen. Dafür _könnte_ man, weil die Shift-Register beider CIA am Port anliegen, beim C64 sogar Zweikanal-Sound erzeugen (mit einem zweiten Piepser am Userport, is' ja klar)