08.01.91 07.29.91 ((64'er 10/91, Leserforum Red: bl)) ================================================================================ ..zu4 Die zwei vertragen sich nicht ..4t ^^FIch besitze einen neuen C-64-II. Ist meine Floppy 1571 gleichzeitig mit der Datasette angeschlossen, kann ich mit der Diskettenstation nichts mehr anfangen: Ständig erscheint >>Device not present<<. Der Recorder arbeitet normal, allerdings kommt manchmal nach >>Press Play on Tape<< die READY-Meldung, ohne daß der Computer irgendetwas geladen hat. Entferne ich das serielle Floppy-Kabel, funktioniert alles. Den Chip CIA 2 habe ich bereits ausgetauscht -- ohne Erfolg. Was stört den gleichzeitigen Betrieb der beiden Speichermedien?^^N ..ls Jürgen Matuschka, Zwickau ..zu4 Start mit SYS ..4t ^^FAus dem Buch >>64 intern<< von Data Becker habe ich den Maschinensprache-Monitor abgetippt. Wie starte ich ihn?^^N ..ls Tom Steinert, Chemnitz ..4t Bei diesem Programm handelt es sich um einen DATA-Lader, der wie jedes normale Basic-Programm mit RUN startet. Durch die Zeile 35 im Listing wird er automatisch initialisiert: >>SYS 36864<<. Wer die Diskettenversion benutzt, muß das Monitor-Programm absolut laden (mit >>,8,1<<), dann NEW und denselben SYS-Befehl eingeben. ..ls Die Redaktion ..zu4 Comal-Fundgrube ..4t ^^FFrage von Dirk Schulz in der 64'er 8/91, Seite: Mich interessiert die Programmiersprache Comal-80 für den C 64. Wo gibt es das Modul 2.01?^^N ..4t Das Modul inkl. Handbuch und einer Demo-Diskette mit Programmierbeispielen erhalten Sie für 203 Mark bei: ^^KD. Sperling, Hard- und Software, Westersteig 38, 2260 Niebüll, Tel. 04661/3725. ..ls Maik Altmann, Potsdam ..zu4 Sound-Fragen ..4t ^^FChris Hülsbeck hat vor einiger Zeit eine Digi-Routine programmiert, die viele Freaks ergänzt und verbessert haben. Daraus entstand das Public-Domain-Programm >>Rock-Monitor<<. Nun herrscht aber ein ständiger Mangel an digitalisierten Sounds. Seit langem versuche ich vergeblich, eigene Samples zu verwenden, die ich mit dem D.A.I.S.Y-System digitalisiere. Geht das überhaupt? Welche anderen Sound-Programme gibt es, die Digis und normale Soundchip-Musik parallel spielen können, evtl. sogar mit zwei Digi-Kanälen gleichzeitig (wie es beispielsweise die >>Maniacs of Noise<< im Intro von >>Turbo-Outrun<< vormachten)?^^N ..ls Sven Körber, Neustadt ..zu4 Problem mit dem Simon's-Basic-Modul ..4t ^^FFrage von Christian Engelahrdt in der 64'er 7/91, Seite 61: Wenn ich das Modul mit der Basic-Erweiterung aus dem Expansionsport entferne und anschließend den C 64 wieder einschalte, zeigt der Bildschirm noch immer die Einschaltmeldung, außerdem nimmt die Tastatur keine Eingaben mehr an. ..4t Bevor Sie den Computer ausschalten, müssen Sie im Direktmodus eingeben: ..li SYS 64760 ..4t Damit verläßt der C 64 >>Simon's Basic<<: das normale Basic 2.0 ist wieder aktiv. Anschließend muß ein POKE-Befehl folgen, um die Modulkennung zu zerstören: ..li POKE 32773,0 ..4t Jetzt aber keinen Reset auslösen oder die Taste drücken! Entfernen Sie das Modul und schalten Sie den C 64 wieder ein: Simon's Basic ist weg! ..ls Philipp Cornelius, Berlin ..zu4 PC-Tastatur am C 64 ..4t ^^FFrage von Ralf Hottmeyer und Tim Niemeyer in der 64'er 6/91, Seite 53: Läßt sich die bedeutend komfortablere PC-Tastatur am C 64 anschließen?^^N ..4t Es geht beispielweise mit einem Hardware-Interface (s. 64'er 9/89). Das Interface wird zwischen Computer und PC-Tastatur geschaltet. Nachteil: Man muß den Computer öffnen. Es gibt aber auch ein Software-Interface, bei dem die Tastatur über den Kassettenport mit dem C 64 verbunden ist. Leider werden dann verschiedene Tasten nicht erkannt (s. 64'er 4/89). Ich schlage vor: Die Tastatur komplett umbauen! Die Tasten muß man durch isolierte Drähte oder eine 13 x 44 cm große Platine verbinden. Allerdings bringt auch diese Methode Nachteile: Viele Fehlerquellen, großer Aufwand. Trotzdem: Ein C 64 oder 128er mit PC-Tastatur sieht einfach besser und professioneller aus! Wer genaueres wissen möchte, soll mir schreiben. ..ls Achim Hensel, Blankensteiner Str. 261 B, 4630 Bochum 1 ..zu4 Der umgekehrte Weg ..4t ^^F99 Prozent aller Programme fragen einen bestimmten Tastendruck in einer Warteschleife ab. Wird die Taste gedrückt, verzweigt das Programm zur entsprechenden Routine. Ich möchte aber folgendes erreichen: Das Programm soll ständig überprüfen, ob eine bestimmte Taste gedrückt ist -- wenn nicht, macht es ganz normal weiter, also die genau umgekehrte Funktion!^^N ..ls Bernd Lorenz, Menden ..4t Nichts leichter als das. Das Betriebssystem des C 64 macht es nämlich jede 1/60-Sekunde: Neben anderen wichtigen Aufgaben die Tastatur abfragen (das geht mit dem vielgerühmten Interrupt, abgekürzt IRQ). Wenn Sie nun vor die Interrupt-Routine ein eigenes Programm schalten, kann man z.B. eine bestimmte Taste abfragen lassen und entsprechend reagieren: Bei nichtgedrückter Taste geht's beim C 64 wie gewohnt weiter. Allerdings ist das nur in Maschinensprache zu realisieren, Basic ist viel zu langsam. Ein simples Beispiel: Folgendes Programm beobachtet die Leertaste . Wird sie gedrückt, fungiert sie als Pausentaste -- der Computer unterbricht seine Arbeit (z.B. praktisch bei der Ausgabe eines Listings oder Ausführung eines Programms!). Wenn Sie die Taste erneut antippen oder auch gar nicht betätigen, geht's ganz normal weiter. Hier das Programm für unsere Assembler-Freaks (es läßt sich mit jedem beliebigen Maschinensprache-Monitor eingeben!): ..li A C000 LDA #$0B A C002 STA $0314 A C005 LDA #$C0 A C007 STA $0315 A C00A RTS A C00B LDA $CB A C00D CMP #$3C A C00F BNE $C01A A C011 JSR $EA87 A C014 LDA $C6 A C016 CMP #$01 A C018 BEQ $C011 A C01A LDA #$00 A C01C STA $C6 A C01E JMP $EA31 ..4t Zum Speichern müssen Sie den Bereich $C000 bis $C021 angeben. Der IRQ-Vektor in den Adressen $0314/0315 wird auf die Tastenstop-Routine ab $C00B gerichtet. Wurde die Leertaste nicht gedrückt, macht der Computer mit der normalen Interrupt-Funktion $EA31 weiter. Für unsere Basic-Freunde gibt's das Programm als DATA-Lader zum Abtippen: ..li 10 FOR I=49152 TO 49184 20 READD: POKEI,D: NEXT 30 SYS 49152: NEW 40 DATA 169,011,141,020,003 45 DATA 169,192,141,021,003 50 DATA 096,165,203,201,060 55 DATA 208,009,032,135,234 60 DATA 165,198,201,001,240 65 DATA 247,169,000,133,198 70 DATA 076,049,234 ..4t Wer lieber eine andere Taste als verwenden möchte, muß den letzten DATA-Wert (060) in Zeile 50 ändern. Im Assembler-Listing ist es die Speicherstelle $C00E. Beachten Sie aber, daß nicht die normalen ASCII-Codes der Tasten gelten, sondern die Werte, wie sie von Adresse $CB (203) interpretiert werden! Einige Beispiele zur Auswahl: = 4, = 57, = 54, <@> = 46, = 63. Wir empfehlen, als Pausentaste immer eine zu wählen, die man selten benutzt. ..ls Die Redaktion ..zu4 C 128 mit anderer Floppy ..4t ^^FKann ich das Disc-Drive 8250 an meinen C 128D anschließen? Was muß ich dabei beachten? Kann ich den Floppy-Beschleuniger Prologic-DOS auch mit dem internen Laufwerk 1571 im 128'er-Modus benutzen?^^N ..ls Monika Kempe, Trossingen ..zu4 Die Daten sind futsch ..4t ^^FVor einigen Wochen habe ich mir die RAM-Erweiterung 1764 zugelegt. Jetzt habe ich über 2000 freie Blöcke als Speicherplatz zur Verfügung, wesentlich mehr als auf beiden Seiten einer Diskette. Nur: Führe ich einen Reset durch, gehen mir alle Daten und Programme in der RAM-Disk verloren -- jedenfalls komme ich nicht mehr an sie ran (obwohl ich vermute, daß sie sich noch immer im Speicher der RAM-Erweiterung befinden!). Bei Geos beispielweise kann man sie mit dem File >>Reboot<< zurückholen! Gibt's eine Software-Lösung, die dasselbe bewirkt und ohne Geos arbeitet?^^N ..ls Kiro Stengel, Chemnitz ..zu4 Fragen zum VIC-Chip ..4t ^^FWieviele Videobanken gibt es und wie kann ich zwischen ihnen umschalten? Wie läßt sich z.B. in der oberen Bildschirmhälfte Hires-Grafik anzeigen, darunter aber der normale Textbildschirm?^^N ..ls Dirk Rudolph, Dresden ..4t Der Videochip VIC des C 64 kann 16 KByte (16384 Byte) adressieren, daher lassen sich im Gesamtspeicher des Computers genau vier Adreßbereiche (Videobanken) aktivieren (65536 : 16384 = 4): ^^FVIC-Bank 0:^^N Speicherstelle 0 bis 16383 (das ist die normale Konfiguration), ^^FVIC-Bank 1:^^N Adresse 16384 bis 32767, ^^FVIC-Bank 2:^^N Speicherzelle 32768 bis 49151, ^^FVIC-Bank 3:^^N Adresse 49152 bis 65535. Gesteuert wird diese Einteilung durch die ersten beiden Bits in Adresse $DD00 (56576). Der Normalwert dieser Achtelbytes ergibt addiert >>3<<, d.h., beide Bits sind aktiviert (Bank 0). Die Bitwerte der anderen VIC-Konfigurationen: Bank 1 = 2, Bank 2 = 1, Bank 3 = 0. Ein Beispiel zur Einstellung der VIC-Bank 2: ..li POKE 56576,PEEK(56576) OR 1 ..4t Noch eine weitere Speicherzelle muß umgestellt werden: Der Zeiger auf den Bildschirmspeicher in Adresse 648. Dessen Normalinhalt ist 4, multipliziert mit 256 ergibt das die Zahl 1024: Hier beginnt das Bildschirm-RAM in der Normaleinstellung des C 64. Da der VIC mit der Einstellung für Bank 2 jetzt aber den Speicherbereich ab Adresse 32768 überblickt, muß auch das Bildschirm-RAM verschoben werden: 32768 + 1024 = 33792. Diese Summe, geteilt durch 256, ergibt die Zahl >>132<<, die Sie noch in Adresse 648 POKEn müssen: ..li POKE 648,132 ..4t Jetzt ist die Einstellung der gewünschten VIC-Bank korrekt. Beachten Sie, daß sich auch alle anderen Adressen (z.B. Hires-Grafik oder geänderter Zeichensatz) relativ verschieben. Sie behalten zwar den Normalinhalt, der in VIC-Bank 0 gilt, der Beginn des neuen Speicherbereichs wird vom Computer -- anders als bei Adresse 648 --automatisch addiert. Die zweite Frage gilt dem Split-Screen: Hires-Grafik und Textmodus auf ein und demselben Bildschirm. Diese Methode verwenden z.B. viele Adventure-Spiele. Zunächst ist die Speicherstelle $D012 (53266) im VIC-Chip relevant. Sie speichert die Nummer der Rasterzeile, die der Kathodenstrahl des Monitors beim ständigen Aufbau des Bildschirms (24 x pro Sekunde) durchläuft. Da der Rasterzeilenwert >>255<< übersteigen kann, dient das Bit 7 der Adresse $D011 (53265) als Übertrags-Flag. Wenn Sie jetzt einen bestimmten Wert in die Speicherzelle 53266 schreiben, wird die Zahl zwischengespeichert und dauernd mit dem aktuellen Rastenzeilenwert verglichen. Stimmen beide Werte überein, findet der Raster-Interrupt statt: Bit 0 in Adresse $D019 (53273) wird gesetzt (=1). Soll gleichzeitig ein Interrupt des Mikroprozessors stattfinden (das ist beim Split-Screen nötig), muß auch Bit 0 der Adresse $D020 (53274) eingeschaltet werden. Wenn Sie nun die IRQ-Vektoren in den Adressen $0314/0315 (788/789) auf eine eigene Maschinensprache-Routine richten, erreichen Sie den geteilten Bildschirm. Das macht unser Beispielprogramm ab $C000 (49152), das Sie mit jedem Maschinensprache-Monitor eingeben können: ..li A C000 SEI A C001 LDX #$12 A C003 LDY #$C0 A C005 STX $0314 A C008 STY $0315 A C00B LDA #$81 A C00D STA $D01A A C010 CLI A C011 RTS A C012 LDA $D019 A C015 AND #$01 A C017 BEQ $C041 A C019 STA $D019 A C01C LDA #$3B A C01E PHA A C01F LDA #$18 A C021 PHA A C022 LDX #$D0 A C024 LDA $D012 A C027 BPL $C033 A C029 PLA A C02A PLA A C02B LDA #$1B A C02D PHA A C02E LDA #$15 A C030 PHA A C031 LDX #$10 A C033 STX $D012 A C036 PLA A C037 STA $D018 A C03A PLA A C03B STA $D011 A C03E JMP $FEBC A C041 JMP $EA31 ..4t Geben Sie zum Speichern der Routine $C000 als Anfangs- und $C044 als Endadresse an. Gestartet wird der Split-Screen mit >>SYS 49152<<. Wer keinen Maschinensprache-Monitor besitzt, kann den Basic-Lader abtippen: ..li 10 FOR I=49152 TO 49219 20 READD: POKE I,D: NEXT 30 SYS 49152 40 DATA 120,162,018,160,192 41 DATA 142,020,003,140,021 42 DATA 003,169,129,141,026 43 DATA 208,088,096,173,025 44 DATA 208,041,001,240,040 45 DATA 141,025,208,169,059 46 DATA 072,169,024,072,162 47 DATA 208,173,018,208,016 48 DATA 010,104,104,169,027 49 DATA 072,169,021,072,162 50 DATA 016,142,018,208,104 51 DATA 141,024,208,104,141 52 DATA 017,208,076,188,254 53 DATA 076,049,234 ..4t Nach dem Start mit RUN erscheint ein in Hires-Grafik (oben) und Text (unten) geteilter Bildschirm. Möchten Sie die Position der Rasterzeile verändern (z.B. den oberen Bereich verkleinern), geschieht das durch Ändern des ersten Werts (208) in der DATA-Zeile 47. Im Assembler-Listing ist es die Speicherstelle $C023. ..ls Die Redaktion ..zu4 Mit Bildschirm, bitte... ..4t ^^FWenn man ein Programm von Datasette lädt, zeigt der C 64 normalerweise kein Bild auf dem Monitor. Nun habe ich aber bei einigen Maschinensprache-Programmen gesehen, daß es doch geht, während des Ladens den Bildschirm eingeschaltet zu lassen. Kann ich diesen Effekt auch mit Basic 2.0 erzielen oder sind dazu Maschinensprache-Kenntnisse nötig?^^N ..ls Marcus Seifried, Kempten ..4t Da geht mit Basic gar nichts. Der VIC-Chip und die CPU (Zentraleinheit des C 64) greifen abwechselnd auf denselben Datenbus zu. Beim Laden von Datasette könnte es dadurch zu zeitkritischen Problemen kommen, die den Computer abstürzen lassen. Um das zu verhindern, schaltet das Betriebssystem während des Kassettenzugriffs den VIC-Chip einfach ab: Der Bildschirm verschwindet. Wenn Sie das ändern möchten, dürfen Sie nicht in die vorhanden Betriebssystem-Routinen eingreifen (wie es z.B. der Basic-Interpreter ständig macht), sondern müssen sich eigene Laderoutinen in Maschinensprache schreiben. ..ls Die Redaktion ..zu4 Wenn die Müllmänner kommen... ..4t ^^FBei längerem Suchen in einer indexsequentiellen Datei legt der C 64 manchmal Verschnaufpausen ein, die bis zu fünf Minuten dauern können. Woher kommt das, und wie kann man es vermeiden?^^N ..ls Peter Hegenwart, Bochum ..4t Wenn der C 64 sehr viel Zeichenketten (Strings) zu verarbeiten hat, muß er ab und zu seinen Speicherplatz aufräumen: Er überprüft, welche Variablen noch gebraucht werden, den Rest schmeißt er auf den Müll. Dadurch entstehende Lücken werden mit den noch aktuellen Variablentexten oder -werten geschlossen. Die Vergleichs- und Verschiebearbeit kann daher relativ lange dauern, denn der gesamte Variablenspeicher wird neu organisiert. Der Fachausdruck für diese Funktion heißt >>Garbage Collection<<. Wenn Sie in Ihrem Programm öfter mit >>SYS 46374<< die Betriebssystem-Routine für die String-Müllabfuhr aktivieren, lassen sich jedoch solch extrem lange Wartezeiten verhindern: Sie zwingen damit den C 64, erst gar nicht so viel Abfall anzusammeln! ..ls Die Redaktion ..zu4 Eingaben unerwünscht ..4t ^^FWie verhindere ich Eingaben von der Tastatur? Vor allem würde ich gerne außer Gefecht setzen! Geht das mit einem POKE?^^N ..ls Thomas Eisele, Mannheim ..4t Tastatureingaben verhindert man mit POKE 649,0 (in dieser Adresse speichert der C 64 die Größe des Tastaturpuffers, normalerweise den Wert >>10<<). Die Taste wird mit POKE 788,52 gesperrt, durch POKE 788,49 läßt sie sich wieder aktivieren. Achtung: Die Tastenkombination ist davon nicht betroffen! Sie zeigt nach wie vor Wirkung. Um sie ebenfalls zu sperren, gilt POKE 808,225 (mit POKE 808,237 stellt man die Normalfunktion wieder her). ..ls Die Redaktion