SID Karte für den Atari 8 Bit ?

1, 2

von HiassofT » Do 3. Aug 2006, 15:38
TePe hat geschrieben:Kann jemand das Programm hier mal auf Syntaxfehler abklopfen ?

http://tp.homepage.t-online.de/basic.txt

Das gibt leider einen 404 :-(

Noch ein Hinweis: Der Atari verwendet standardmäßig das Zeichen 155 für EOL (statt LF oder CR+LF), Du musst also das ASCII File noch nach ATASCII konvertieren oder mit einem Editor/Programm/... Deiner Wahl das EOL Zeichen ändern.

so long,

Hias

von TePe » Do 3. Aug 2006, 16:42

von HiassofT » Do 3. Aug 2006, 17:28
TePe hat geschrieben:http://tp.homepage.t-online.de/xl/basic.txt

In Zeile 210 und 270 hat ein "THEN" vor dem GOTO gefehlt, die Steuerzeichen in der ersten Zeile (im Print) haben das Basic auch ein wenig verwirrt. Das "READY" am Ende muß natürlich auch weg.

Ich hab' mal das File als normales BASIC File abgespeichert und ein ATR drausgemacht: http://www.horus.com/~hias/tmp/tepe.zip
Einfach Disk booten und dann LOAD "D:BASIC.BAS" eingeben.

so long,

Hias

von Beetle » Do 3. Aug 2006, 20:21
Der "Ding" ist schonmal cool. Wer weiss, vielleicht bau ichs mir ja doch ein?

Gruss,
Stefan

von TePe » Fr 4. Aug 2006, 00:25
Das Basic Programm bleibt leider in einer Schleife hängen, der erste Ton wird angespielt dann steht alles.

Das passiert auch ohne SID und sogar wenn man das Programm einfach in einen Emulator, also ohne Hardware eingibt :(

Mein 800XE übrigens :)))

Bild

Hier übrigens ein paar SID Tunes die ich mal aufwendig aufgenommen habe mit einem externen SID mit eigenen Netzteil und Abschirmung. Habe dazu zwei 6581/SID1 selektiert und parallel laufen lassen damit das Klangbild ein wenig voller wird bzw es ergibt sich ein minimaler Stereoeffekt.

http://tp.homepage.t-online.de/sids/jeff.ogg
Schöner tiefer Bass

http://tp.homepage.t-online.de/sids/lightforce6581.ogg
Ein Klassik Tune von Rob Hubbard, geht an die Grenze
des 6581, verzerrt auf vielen 6581er zu doll und auf
dem 8580 fehlt der gewollte Effekt.

http://tp.homepage.t-online.de/sids/scenario.ogg
Schöner Halleffekt

http://tp.homepage.t-online.de/sids/t2.ogg
Super Song für Turrican2, echt heftig wenn man bedenkt
wie farblos das Spiel doch auf dem C64 bleiben muss ;)

http://tp.homepage.t-online.de/sids/tanz.ogg
Ein Stück von Welle:Erdball auf einem besonderen 8580
von mir neu aufgenommen. Knackt schön :)

http://tp.homepage.t-online.de/sids/xout.ogg
Hammerbass

Tschau TP

von HiassofT » Fr 4. Aug 2006, 00:51
TePe hat geschrieben:Das Basic Programm bleibt leider in einer Schleife hängen, der erste Ton wird angespielt dann steht alles.

You have mail :-)

Für alle anderen auch nochmal hier: Problem dürfte die Zeile 270 sein "270 IF T > TI THEN GOTO 270". Evtl. könnte ein "GOTO 260" stattdessen funktionieren.

so long,

Hias

von TePe » Fr 4. Aug 2006, 01:26
Nee die Zeile ist wohl so gewollt...

Killt man die Zeile 270 spult sich der Song im Schnelldurchlauf ab bleibt allerdings nicht hängen...
Den Ton vom Atari hab ich übrigens auf die schnelle mit meiner Digicam abgegriffen, also nicht wundern weils so rauscht.

C64
http://tp.homepage.t-online.de/xl/64.mp3

Atari
http://tp.homepage.t-online.de/xl/xe.mp3

So soll sich der Song anhören
http://tp.homepage.t-online.de/xl/song.mp3

Naja ist jetzt nicht mehr so wichtig das Basic Programm zu laufen zu bekommen, vieleicht hat ja jemand Bock was eigenes zu bauen und zu schreiben. Die Hardware ist jedenfalls echt simpel !!!

TP

von HiassofT » Fr 4. Aug 2006, 10:55
TePe hat geschrieben:Nee die Zeile ist wohl so gewollt...

Killt man die Zeile 270 spult sich der Song im Schnelldurchlauf ab bleibt allerdings nicht hängen...

Ich kenne mich mit dem Commodore Basic nicht wirklich aus, aber kann es evtl. sein, daß die Variable "TI" die aktuelle Zeit zurückliefert? Jedenfalls wird sie sonst nirgends im Programm gesetzt. Das würde von der restlichen Programmlogik her durchaus Sinn machen.

Ersetze in den Zeilen 180 und 270 "TI" einfach mal durch "(PEEK(20) + 256*PEEK(19) + 65536*PEEK(18))", das ist dann ein Counter der 50 mal in der Sekunde um 1 hochgezählt wird.

Naja ist jetzt nicht mehr so wichtig das Basic Programm zu laufen zu bekommen, vieleicht hat ja jemand Bock was eigenes zu bauen und zu schreiben. Die Hardware ist jedenfalls echt simpel !!!

So, nun der nächste Erweiterungsvorschlag:

Nimm noch einen 74LS138 (3-zu-8 Dekoder) dazu, damit kannst Du die benötigten 32 Bytes exakt ausdekodieren. Wenn Du Lust hast, kannst Du dann auch insgesamt 8 SIDs an den Atari hängen :-)

Pin 1 kommt an A5, Pin 2 an A6 und Pin 3 an A7. Pin 4 und Pin 5 kommen an die /CCTL Leitung vom Modul-Port, Pin 6 fix an VCC (+5V). An den Pins 7 und 9..15 hast Du nun sozusagen ausdekodierte /CE Signale:

Für $D500-$D51F hängst Du den SID an Pin 15 (Y0), für $D520-$D52F an Pin 14 ... Pin 9 ist $D5C0-$D5DF, Pin 7 $D5E0-$D5FF.

Zieht man die anderen Module für den Atari in Betracht, wäre $D520-$D53F zB recht günstig als Standard-Adresse für eine Single-SID-Erweiterung geeignet, der Bereich wird sehr selten verwendet.

Gib' mal Bescheid, wenn Du die 8 SIDs fertig verlötet hast :-)

so long,

Hias

von TePe » Fr 4. Aug 2006, 22:11
Also 8 SIDs machen in meinen Augen keinen Sinn...

C64 User haben es in 20 Jahren nicht geschaft 2 SIDs auszulasten...

http://www.cbmgallery.com/pictures/00041.shtml

Wir sollten das Problem der 1,76 -> 1 Mhz angehen...
Es seih den man kann das in Software regeln, glaubs aber nicht recht.

Ein Arbeitskollege macht viel mit Atmel-uController rum, kann man damit etwas anstellen ?

TP

von guus » Fr 4. Aug 2006, 23:25
Hallo,

Mit ein Atmel kann mann sehr viel machen.
Vielleicht auch das wass wir brauchen, aber es geht vielleicht auch einfacher, mit ein Gal. :lol:

Die volgende Idee geht vielleicht. :idea:
Versorge, über ein Gal, den SID mit zwei Clock-Signale.
Einmal 1,79 geteilt durch 2, um die Register zu programmieren.
Und wenn der Chip nicht angesprochen wird, bekommt er 1Mhz aus eine sepatare Quelle.
So sollte es so gut wie möglich korrekt sein.

mfg.
Guus

von TePe » Sa 5. Aug 2006, 00:30
Ich denke wenn man die 1,76 nur durch 2 teilt klappt der Speichertransfer nicht mehr ????

Faktor 0,88 wären für viele Sachen "noch" ausreichend, fürs erste sowieso !!!

TP

von guus » Sa 5. Aug 2006, 11:13
Hallo TePe,

Es ist meist so dass schneller nicht geht, aber langsamer kein problem ist. :?

Eine andere möglichkeit gibt es auch:
Wenn den Bildschirm ausgeschaltet wird, kann der Atari auch nach 1 Mhz herunter getaktet werden.
Es ist dann hoffentlich immer noch schnell genug für der Refresh des Ram. (Sonnst S-Ram)

Die methode mit zwei Clock-Signale hab ich schon mal benützt.
Es wird auch in ein Apple-Rechner mit ein 68000 gemacht.
Einige I/O-Chips (und der VME-Bus) machen auch nicht auf volle geschwindigkeit mit.
Ich hab dan dafür ein I/O-State-Machine gemacht.
Damit würde sicher gestellt das den I/O-Ablauf mit niedrige geschwindigkeit voll ablauft.
Dies war immer der Fall in ein bestimter Addressraum.

mfg.
Guus

von mega-hz » Sa 5. Aug 2006, 22:13
ich hab da ne evt. viel einfachere Idee:

Am IRQ Eingang des 6502s kann man den ganzen Rechner
mit nem Taktsignal "runtertakten", fast bis zum stillstand!
Das habe ich mit nem einfachen 555-Timer und nem Poti mal
gemacht, um schwierige Spiele spielen zu können :-)
Damit sollte es möglich sein, immer beim Zugriff auf die SID-Adressen einen bestimmten Takt anzulegen, welcher als Ergebnis etwa 1Mhz ergibt!

Gruß,
Wolfram.

von TePe » Sa 5. Aug 2006, 22:39
JETZT WEIS ICH ENDLICH WARUM DIE C64 LEUTE IHRE BILDSCHIRME SCHWARZ SCHALTEN UM RAUSCHFREIE MUSIK ZU HÖREN :lol::lol::lol::lol::lol::lol::lol::lol::lol::lol::lol::lol::lol::lol::lol::lol::lol:

von TePe » Sa 5. Aug 2006, 22:42
Jetzt aber mal ehrlich. Was wäre denn die einfachste Lösung um zumindest einfache HVSC SIDs auf dem ATARI abspielen zu können. Was muss man den zB an so einem Song alles patchen ?

D400 -> D500 is klar

TP

von HiassofT » Di 8. Aug 2006, 13:22
Das mit dem NE555 am IRQ-Eingang funktioniert so nicht - das beeinflusst nur die mittlere CPU-Geschwindigkeit, nicht aber das Bus-Timing.

Die einzige funktionierende Lösung ist, wie auch von Guus vorgeschlagen, eine Glue-Logic mit einer State-Machine und dahinter dann ein SID in Original-Geschwindigkeit (mit separatem Takt).

Schreibzugriffe lassen sich so noch relativ einfach realisieren, bei Lesezugriffen wird's haarig, da die 6502 CPU leider keine Waitstates (also Anhalten der CPU) unterstützt. Genauer gesagt unterstützt die CPU im Atari sowas schon (für den ANTIC Zugriff), aber das gibt dann Probleme, weil das ja schon vom ANTIC verwendet wird. Schreibzugriffe könnte man aber folgendermassen machen:

Alle Adress-, Daten- und Steuerleitungen zum SID laufen in ein CPLD. Bei einem Schreibzugriff auf eine der SID-Adressen speichert der CPLD die Adress- und Datenbits in FlipFlops und setzt den internen State auf "muss Daten schreiben". Dieser Teil des CPLD wird mit der CPU-Frequenz des Ataris angesprochen.

Der andere Teil der Logik läuft mit der Frequenz des SIDs und checkt zu Beginn jedes SID Clock-Cycles, ob neue Daten zu schreiben sind. Wenn ja, legt es die Adressen und Daten auf die Leitungen zum SID und setzt /CE und R/W des SIDs auf Low. Am Ende des Clock-Cycles werden die Leitungen wieder zurückgenommen und der interne State auf "fertig" gesetzt.

Wegen der nötigen Software-Anpassungen: Mit den .sid Files (aus der HVSC) kenne ich mich nicht wirklich aus, wenn ich das richtig verstanden habe enthalten sie aber auch 6502 Code, den die SID-Player dann emulieren müssen. Diesen Code müsste man am Atari natürlich auch anpassen, automatisch wird das wohl kaum gehen. Man müsste den gesamten Code analysieren und alle Zugriffe auf die C64 Chips anpassen (zB CIA Timer durch Pokey Timer ersetzen). Da ist dann wohl Handarbeit angesagt. Vielleicht kann aber noch irgendwer, der sich damit besser auskennt, ein wenig was dazu schreiben.

so long,

Hias

von andymanone » Fr 18. Aug 2006, 16:29
Hi,

habe leider zu spät dieses Thema gesehen
da es ja scheinbar schon abgegessen ist :wink:

Vielleicht aber doch interessant:

Habe 1989 eine STEREO-SID Prototyp-Platine für den Expansion-Port des 130XE entworfen/gebaut.
Und: es kam sogar was raus :roll: !

Muß mal schauen ob ich dieses Teil in meinen Katakomben noch irgendwie wiederfinde (hatte mehrere Umzüge seither hinter mir :? ).

Vielleicht finde ich auch noch meine Aufzeichnungen wieder,
weil: genau erinnern kann ich mich nicht mehr wie ich das gelöst hatte :oops:
Ist ja schon ein paar Jährchen her :roll:

Grüsse,
andYMan
1, 2