Pokey-Divisor berechnen und einstellen

Moderator: Rockford

Antworten
Benutzeravatar
dl7ukk
Beiträge: 542
Registriert: 25.08.2021 23:03
Has thanked: 75 times
Been thanked: 103 times
Kontaktdaten:

Pokey-Divisor berechnen und einstellen

Beitrag von dl7ukk »

Hallo,

Wie berechnet man den Pokey-Divisor für eine bestimmte Sio Geschwindigkeit ?

Vor über 30 Jahren hat Ralf/ NORTOBOR einen Treiber für die elektronische Schreibmaschine Erika S30004 (jenseits der Elbe unter anderem Namen verkauft...) programmiert, der die Erika über den PIA/ Joyport anspricht. Das funktioniert auch seitdem tadellos.

Nun wollten wir versuchen den Treiber umzuschreiben um die Erika "ATARI konform" über die Sio-Schnittstelle anzusprechen. Dazu benötigen wir aber zunächst ersteinmal eine Baudrate von 1200 Bd.

Einige Hinweise zum Einstellen der Baudrate haben wir schon gefunden, sind aber ohne die Grundlagen dennoch nicht weiter gekommen. Im ProfiBuch steht etwas über die Sound-Programmierung des Pokey's, im Altirra Hardware-Manual stehen Hinweise zu $D204ff aber nur für die höheren Baudraten und schließlich gibt einen Beitrag im Mag 102 wo die Sio und das Protokoll in Bezug auf die Kommunikation mit Disk-Laufwerken (+ Turbo) beschrieben ist.

Auch konnte ich mit einem Tape-Kopierer (Translater 1.2 [1987 by SVUS]) die Werte für die doppelte Tape-Baudrate auslesen. Das wäre das, was wir benötigen. $D204ff: CF A0 02 A8 28 C0, wobei $D204 im Bereich von $C8 bis $D8 pendelt. Was beim Tape-Input verständlich ist.

Unsere grundlegende Frage ist nun, wie berechnet man den Poke-Div/ die Sio-Baudrate und welche Pokey-Register sind dabei ($D204/6 +??) ggf noch zu beachten :?: :?: :?:


dl7ukk

HiassofT
Beiträge: 143
Registriert: 17.08.2021 11:03
Wohnort: Salzburg, Austria
Has thanked: 12 times
Been thanked: 57 times
Kontaktdaten:

Re: Pokey-Divisor berechnen und einstellen

Beitrag von HiassofT »

Die Formel für die Baud-Rate ist baud = basisfrequenz / ( 2 * (divisor + 7) )

Umgeformt also divisor = ( basisfrequenz / (2 * baud) ) - 7

Bei PAL Rechnern ist die Basisfrequenz 3.546894 MHz / 2 also 1.773447 MHz - bei NTSC sind's 3.579545 MHz / 2 also 1.7897725 MHz

Für 1200 Baud wär das also ca 732 (lo=220, hi=2) - ich hoff ich hab mich nicht verrechnet :-)

Der divisor kommt nach in AUDF3/4 (lo/hi), AUDCTL musst Du auf $28 setzen und AUDC4 auf $A0 (oder $A8 wenn Du das piepsen hören möchtest).

Siehe auch mein highspeed code (da wird nur das lo-byte gesetzt, AUDF4 ist immer 0): https://github.com/HiassofT/highspeed-s ... #L176-L197

so long,

Hias

Benutzeravatar
dl7ukk
Beiträge: 542
Registriert: 25.08.2021 23:03
Has thanked: 75 times
Been thanked: 103 times
Kontaktdaten:

Re: Pokey-Divisor berechnen und einstellen

Beitrag von dl7ukk »

.
Danke hias für die schnelle Antwort.
.
... Siehe auch mein highspeed code (da wird nur das lo-byte gesetzt, AUDF4 ist immer 0) ...
Deinen highspeed code hatte ich indirekt schon "benutzt".

diag.atr im atariserver und beim Lesen des dd-atr; mit dem Freezer $D204ff ausgelesen. Das ging auch soweit prima. Nur das Dein atariserver nicht für lowspeed vorgesehen ist und damit beim Pokey-Div 63 endet. Aber ich konnte schön sehen wie $D204 "hochgezählt".

Gruß

dl7ukk

HiassofT
Beiträge: 143
Registriert: 17.08.2021 11:03
Wohnort: Salzburg, Austria
Has thanked: 12 times
Been thanked: 57 times
Kontaktdaten:

Re: Pokey-Divisor berechnen und einstellen

Beitrag von HiassofT »

Der atariserver sollte bis divisor 255 mitmachen, nicht aber der Highspeed SIO Code:

Der verwendet intern die oberen beiden Bits des divisor bytes um das Highspeed Protokoll (Ultra-Speed, 1050 Turbo, Happy, XF551) zu speichern. Ultra Speed geht damit bis max divisor 63, aber das ist ja schon deutlich langsamer als Standard SIO und somit in der Praxis keine grosse Einschränkung. Immerhin heisst es ja auch "Highspeed" SIO Code und nicht "Lowspeed" SIO Code :-)

so long,

Hias

Benutzeravatar
dl7ukk
Beiträge: 542
Registriert: 25.08.2021 23:03
Has thanked: 75 times
Been thanked: 103 times
Kontaktdaten:

Re: Pokey-Divisor berechnen und einstellen

Beitrag von dl7ukk »

Hi,
.
HiassofT hat geschrieben:
24.10.2022 19:36
Der atariserver sollte bis divisor 255 mitmachen,
Aber wie könnte ich das einstellen? "S" stellt Hi-Sio bist 63 ein, aber wie vorgesehen, mit dem Hi-Sio Code.
Habe ich was übersehen in der Anleitung ?

Und womit sollte ich prüfen? diag.atr ist ja nicht dafür vorgesehen. Ich staune ohnehin, dass atariserver & diag meine Spielereien mitmacht. :D :D

Gruß

dl7ukk

HiassofT
Beiträge: 143
Registriert: 17.08.2021 11:03
Wohnort: Salzburg, Austria
Has thanked: 12 times
Been thanked: 57 times
Kontaktdaten:

Re: Pokey-Divisor berechnen und einstellen

Beitrag von HiassofT »

Ah, sorry, Du hast völlig recht - atariserver erlaubt standardmässig nur Divisor bis 63.

Hab grad mal den Code gecheckt, 2009 hab ich da 2 Checks eingebaut (in ParseHighSpeedParameters in tools/MiscUtils.cpp und in SetHighSpeedParameters in tools/DeviceManager.cpp) die überprüfen ob der Divisor kleiner 64 ist.

Aus atariserver Sicht gibt's dafür keinen technischen Grund, höchstwahrscheinlich hab ich das aber eingebaut da ja der Highspeed SIO Code damals auch schon die oberen 2 Bits für Turbo/... Protokolle verwendet hatte und somit 64-255 zu "lustigen" Fehlern geführt hätte.

Du könntest die 2 Checks aber natürlich ändern und auf 255/256 statt 63/64 überprüfen, mein Highspeed Code wird damit nicht klar kommen aber mit anderen Codes (zB Happy/Speedy Code von TurboDos, SpartaDos etc oder mit QMEG/Speedy/ OS) könnte es klappen :-)

Andererseits ist "Highspeed" SIO mit 3400 Baud dann wohl auf Dauer doch nicht so prickelnd :-)

so long,

Hias

Benutzeravatar
dl7ukk
Beiträge: 542
Registriert: 25.08.2021 23:03
Has thanked: 75 times
Been thanked: 103 times
Kontaktdaten:

Re: Pokey-Divisor berechnen und einstellen

Beitrag von dl7ukk »

HiassofT hat geschrieben:
24.10.2022 21:16
Ah, sorry, Du hast völlig recht - atariserver erlaubt standardmässig nur Divisor bis 63.
Du könntest die 2 Checks aber natürlich ändern und auf 255/256 statt 63/64 überprüfen,
Das werde ich mit Sicherheit nicht tun, vielleicht im nächsten Leben ...

Mal im Ernst, ich habe mich an atarisio gewöhnt, es macht was es soll und das ist gut so. Ich dagegen habe kaum Ahnung von dem was ich tu.

Gruß

dl7ukk

HiassofT
Beiträge: 143
Registriert: 17.08.2021 11:03
Wohnort: Salzburg, Austria
Has thanked: 12 times
Been thanked: 57 times
Kontaktdaten:

Re: Pokey-Divisor berechnen und einstellen

Beitrag von HiassofT »

Für den Normalbetrieb würd ich atariserver auch so lassen wie es ist - völlig klar.

Wenn Du aber mal das Bedürfnis hast etwas weiter zu "spielen" kannst Du die eingebaute Sperre problemlos bis 255 aushebeln. Dabei kann nichts gröberes schief gehen. Im schlimmsten Fall verschluckt sich dann mein Highspeed Patch und lädt nicht mehr ganz sauber. Ist ja nicht so als würdest Du eine 10mA superflinke Feinsicherung durch einen 6.3mm Stahlbolzen ersetzen, in dem konkreten Fall ist das recht gefahrlos.

Solche "Spielereien" unterstütze ich übrigens absolut, solche ähnliche Sachen macht jeder regelmässig der Software entwickelt bzw testet. Manchmal ist es eben notwendig "mal schnell eben" auszuprobieren wie etwas zB mit der 10-fachen Datenmenge oder mit einem Zehntel der Geschwindigkeit läuft und dann ist es sehr praktisch wenn man dafür einfach bestehende Tools/Programme verwenden bzw einfach abändern kann.

Also keine Scheu vor'm "Rumspielen"!

so long,

Hias

Benutzeravatar
dl7ukk
Beiträge: 542
Registriert: 25.08.2021 23:03
Has thanked: 75 times
Been thanked: 103 times
Kontaktdaten:

Re: Pokey-Divisor berechnen und einstellen

Beitrag von dl7ukk »

Code: Alles auswählen

	if (pokeyDivisor >= 64) {
		AERROR("illegal high speed pokey divisor %d", pokeyDivisor);
		return false;

Code: Alles auswählen

}
	if (l < 0 || l > 63) {
		return false;
werde ich Morgen mal probieren

dl7ukk

Benutzeravatar
dl7ukk
Beiträge: 542
Registriert: 25.08.2021 23:03
Has thanked: 75 times
Been thanked: 103 times
Kontaktdaten:

Re: Pokey-Divisor berechnen und einstellen

Beitrag von dl7ukk »

Guten Morgen,

nach einem kleinem Fehler beim Backup von /local/bin, konnte ich atariserver ohne den Check auf Pokey-Div 63 neu compilieren.
Bildschirmfoto zu 2022-10-25 09-43-46.png
diag.atr wird wohl auch auf die Übertragungsrate aufpassen, bis 63 funktionierte es. Der nächste Versuch mit BiBoDos 5.4N lieferte die Erkenntnis, daß dort die Übertragungsrate fest eingestellt ist, bzw der HighSpeed Treiber auch für LowSpeed verwendet werden muß.

Mit BiBoDos 5.4F war ich dann aber erfolgreich.
Bildschirmfoto zu 2022-10-25 10-05-02.png
Erstaunlich wie universell der High-Speed Code in atarisio ist.

Ich habe wieder 'ne Menge gelernt und es hat viel Spaß macht. Da die Erika 1200 Baud braucht, muß mir noch etwas Anderes zum Experimentieren/ Testen einfallen. Das der ATARI 600 Bd und 1200 Bd beim Data-Input kann ist klar (Translator :arrow: oben) . Also wird es auch im Output funktionieren und mit der Formel von oben kommt Ralf bestimmt weiter.

Danke auf jeden Fall für Deine Hilfestellung :!: :!: :!:

Jetzt gilt es mein System wieder aufzuräumen.


Gruß

dl7ukk

Benutzeravatar
dl7ukk
Beiträge: 542
Registriert: 25.08.2021 23:03
Has thanked: 75 times
Been thanked: 103 times
Kontaktdaten:

Re: Pokey-Divisor berechnen und einstellen

Beitrag von dl7ukk »

Hi
.
HiassofT hat geschrieben:
24.10.2022 17:29
Die Formel für die Baud-Rate ist baud = basisfrequenz / ( 2 * (divisor + 7) )
Umgeformt also divisor = ( basisfrequenz / (2 * baud) ) - 7
Bei PAL Rechnern ist die Basisfrequenz 3.546894 MHz / 2 also 1.773447 MHz
Für 1200 Baud wär das also ca 732 (lo=220, hi=2) - ich hoff ich hab mich nicht verrechnet :-)
Man, ist das lange her :shock: War aber trotzdem nicht alles umsonst in der Schule.
Das Umstellen der Formel gelang im dritten Anlauf (und einen Blick auf des Nachbars Zettel :D )
Beim Rechnen hat ein Computer geholfen.

Dein Ergebnis stimmt. :!:

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast