Gesucht: HighSpeed Routine


Gesucht: HighSpeed Routine

von Mathy » Do 10. Mär 2005, 16:49
Hallo Leute

Gibt es ein DOS, eventuel inklusive source code, das automatisch erkennt welches HighSpeed protocol ein Laufwerk unterstuetzt und dieses dann auch gleich beim Booten verwendet?

[kann man auch ueber ein anderes Betriebssystem erreichen, dass wil ich aber vermeiden!]

Der Bootloader mit Highspeedunterstuetzung sollte moeglichst in den Bootsektoren reinpassen und die gaengigsten Protocolle unterstuetzen und die normalen SIO routinen benutzen.

Zeil waehre es, diese Routine in MyDOS ein zu bauen.

Tschuess

Mathy

von HiassofT » Do 10. Mär 2005, 17:20
Für den Freezer habe ich eine Highspeed SIO Routine geschrieben, die sowohl die Turbo1050 als auch Happy/Speedy-kompatible Floppies unterstützt. Die Highspeed Routine in MyPicoDos unterstützt ja nur Happy/Sppedy.

XF551 Support gibt's momentan noch nicht, aber das liesse sich auch
noch einbauen.

Die Routine ist ca. 500 Bytes lang, in die Boot-Sektoren passt sie also nicht...

so long,

Hias

von Mathy » Fr 11. Mär 2005, 13:45
Hallo Hias

Wenn Du mir erklaerst (anhand des Sources) was Du genau machts (oder was genau geschehen sollte), kann ich mit denken. Vielleicht kommen wir dann zu einer kuerzeren Loessung.

Tschuess
Mathy

von GoodByteXL » Do 31. Mär 2005, 20:05
Hi!

In verschiedenen GameDOS sind solche Routinen vorhanden. Allerdings testen sie in der Regel nicht sondern schalten einfach ein. Gleiches gilt für die SuperBoot-Menüs, die vor allem im angelsächsischen Sprachraum en vogue waren.. Villeicht lohnt es sich, mal dort zu untersuchen.

Ich glaube auch die Format-Routine des BiboDOS schreibt eine kleine Routine auf formatierte Disks, die die Speedy einschaltet.

von Dietrich » So 23. Apr 2006, 22:53
Mathy hat geschrieben:Der Bootloader mit Highspeedunterstuetzung sollte moeglichst in den Bootsektoren reinpassen und die gaengigsten Protocolle unterstuetzen und die normalen SIO routinen benutzen.

Nein, das ist wortwörtlich so nicht möglich, es scheitert nämlich am weitverbreiteten Ultra-Speed-Protokoll. Wenn der Bootloader die normalen SIO-Routinen benutzen soll, kann er nur die SIO-Interrupt-Routinen ändern. Dummerweise schickt das Ultra-Speed-Protokoll auch das allererste Byte in Ultra-Speed - also bevor der erste I/O-Interrupt auftritt. Damit hat man keine Chance, die SIO-Speed hochzusetzen :mad:

Eine zweite Möglichkeit wäre es, ein eigenes Ultra-Speed-SIO zu programmieren. Aber selbst die kürzeste automatische US-Routine benötigt immer noch 370 Byte Platz, also zuviel für die Bootsektoren.
Die dritte Möglichkeit, wäre das SIO nachzuprogrammieren bis zur Stelle wo es die SIO-Speed setzt und dann ins SIO im ROM direkt reinzuspringen. Ist zwar ein Hack, der nur mit dem XL/XE-OS läuft, aber eine nette Idee. Dummerweise funktioniert das nur mit der Hyper-XF, die Speedy und die Happy halten sich nämlich nicht an die SIO-Timingkonventionen von Atari. Pech!

Gruß Dietrich (der sich schon oft über das Ultra-Speed-Protokoll geärgert hat :mad:)

von HiassofT » Mo 24. Apr 2006, 00:43
Ich habe vor ca. zwei Monaten angefangen eine Highspeed SIO Routine als OS-Patch zu schreiben, der speziell mit dem MyIDE OS zusammenarbeitet. Die Highspeed SIO Routine unterstützt das Ultra-Speed Protokoll (Happy/Speedy), die Turbo 1050, XF551 und die alte Happy 810.

Hier ist die aktuelle Version: http://www.horus.com/~hias/tmp/hipatch-060316.zip
Sourcecode gibt's hier: http://www.horus.com/~hias/tmp/hisiosrc-060422.zip

Die Datei "HIPATCH.COM" kopiert das OS-ROM ins RAM und installiert statt dem internationalen Zeichensatz die Highspeed SIO Routine.

"HIPATCHR.COM" macht ziemlich das gleiche, nur verwendet dieser Code den unteren Stack-Bereich zum Speichern diverser Variablen. Mit dem Programm "DUMPOS.COM" kann ein kompletter ROM-Dump erzeugt werden, sodaß man das gepatchte OS wieder in ein EPROM o.ä. brennen kann - damit klappt's auch mit Turbo Basic :-)

so long,

Hias

von Mathy » Mo 24. Apr 2006, 01:00
Hallo Hias, Dietrich, Leute

Ich brauche/suche eine Highspeed Routine die MyDOS zum HighSpeed verleiten kann, kompatible ist zum Atari OS und alle gängigen 8 Bit Atari's (so wie Atari sie hergestellt hat), die gängigen Hochgeschwindigkeitsprotokolle unterstützt und so schnell wie möglich während MyDOS geladen wird, die höhere Geschwindigkeit einschaltet.

Eine Idee wie so eine Routine aussehen sollte/könnte, währe auch OK.

Vielleicht kann mir jemand erklären, was genau in den Bootsektoren passieren soll damit der Atari Daten aus einem Laufwerk laden kann. Vielleicht wird mir dann auch klar, warum eine HighSpeed Routine da rein soll, oder was die Vor- und Nachteile sind wenn diese Routine da oder sonstwo reingepackt wird.

Tschüß

Mathy

von HiassofT » Mo 24. Apr 2006, 01:24
Hallo Mathy!

Mathy hat geschrieben:Ich brauche/suche eine Highspeed Routine die MyDOS zum HighSpeed verleiten kann, kompatible ist zum Atari OS und alle gängigen 8 Bit Atari's (so wie Atari sie hergestellt hat), die gängigen Hochgeschwindigkeitsprotokolle unterstützt und so schnell wie möglich während MyDOS geladen wird, die höhere Geschwindigkeit einschaltet.

Nur in den 3 Bootsektoren passt die Routine nicht. In erster Linie sind die Bootsektoren dazu da, daß das DOS.SYS von der Diskette geladen wird. Außerdem enthalten sie die ersten 384 Bytes des DOS ($0700-$0880).

Du müsstest MyDOS also schon etwas gröber umkrempeln: Stelle die Highspeed SIO Routine möglichst weit vorne in den MyDOS Code. Dann musst Du noch den Boot-Code ändern: anstelle des bisherigen 2-stage Loaders (Bootsektoren+DOS.SYS) machst Du einen 3-stage Loader: Sobald der Teil von DOS.SYS, der die Highspeed SIO Routine enthält, fertig geladen ist, verwendest Du die Highspeed SIO Routine statt $E459 und lädst damit DOS.SYS weiter.

Du musst aber ein wenig aufpassen: Beim Schreiben von DOS.SYS musst Du natürlich die normale OS-Routine in die Boot-Sektoren schreiben (oder Du gibst Code in die Bootsektoren, die per default die Routine auf $E459 setzen).

Wenn Du Hilfe brauchst, gib Bescheid. Meinen Code habe ich mit ATasm entwickelt und sollte sich recht einfach ins Mac65 Format bringen lassen.

so long,

Hias

von CharlieChaplin » Mo 24. Apr 2006, 03:43
Tja,
da nutzt der ultraspeed Treiber von Bob Woolley nicht viel. Er funkt. zwar mit DOs 2.0, DOs 2.5, MyDOS und anderen aber a) benutzt er RAM unter dem OS (TB XL schaltet ihn dann halt ab!), b) funkt. er nicht mit Programmen die die Adresse $D301 verändern (z.B. RD-treiber! sowie viele ältere Programme!)...

Der einzige trick den ich dafür bisher gefunden habe, ist es erst das DOS zu booten, dann den RD-treiber und als letztes den us-treiber... (natürlich ist der nicht reset-fest)...

-------------------------------------------------------

Nebenbei bin ich da auch auf einen Bug des MyDOS oder MyDOS RD-Treibers gestossen: Wollte eine Datei von über 1 Megabyte in die RD kopieren, dann TB XL starten das wiederum ein TB Programm lädt (das die Datei von der Rd als Film abspielt)... Nun, erst DOs geladen, dann den RD-Treiber der die Subdir :Ramdisk auch in die RD kopiert - aber nur bis ca. 32kbytes, danach wäre ja nachladen von DOS angesagt, passiert aber nicht, stattdessen wird TB gestartet und der Film ist dann recht kurz...

Habe das also so abgeändert, das TB nicht mehr automat. startet - und siehe da, nun kopiert MyDOS die komplette megabyte grosse Datei in die RD (aber nicht mit ultra-speed, da der us-treiber ja erst nach dem RD-treiber geladen werden kann!). und TB muss ich am Ende von Hand starten... für das batchfile-enhancement ist mir da noch nix passendes eingefallen (außerdem braucht das BFE glaube ich min. 4 buffer und TB XL läuft dann nicht mehr)...

Jaja, MyDOS und seine Problemchen... -Andreas magenheimer.

von Dietrich » Mo 24. Apr 2006, 20:42
HiassofT hat geschrieben:Dann musst Du noch den Boot-Code ändern: anstelle des bisherigen 2-stage Loaders (Bootsektoren+DOS.SYS) machst Du einen 3-stage Loader: Sobald der Teil von DOS.SYS, der die Highspeed SIO Routine enthält, fertig geladen ist, verwendest Du die Highspeed SIO Routine statt $E459 und lädst damit DOS.SYS weiter.

Ein 2-stage Loader genügt: Packe die Highspeed-Routine möglichst weit nach vorne ins DOS (gleich hinter den Bootloader). Dann rufe im Bootloader statt des normalen SIO den folgenden Code (der natürlich auch vorne im Bootloader stehen muss) auf:

Code: Alles auswählen
GOSIO  LDA HIEND
       CMP #$60
       BEQ HIGH
       JMP SIOV   ; $E459
HIGH   JMP HISIO

wobei HIEND die Adresse des letzten Bytes der Highspeed-SIO-Routine ist. (Falls es sich um kein RTS handelt, muss Du die #$60 entsprechend ändern, nur nicht auf 0).
Effekt: Solange beim Booten die Highspeed-SIO noch nicht vollständig geladen ist, ist die abgefragte Adresse noch 0, also wird das normale SIO benutzt; sobald das letzte Byte im Speicher ist, die Highspeed-SIO. Funktioniert gut, ich hab das bei XDOS so gemacht, um die Highspeed-SIO einzuladen :smile:

Ach ja: Die Highspeed-SIO sollte abschaltbar sein, sonst gucken Leute mit MyIDE oder anderen SIO-Geräten in die Röhre, wenn sie versuchen das DOS zu booten :wink:

Gruß Dietrich

von Mathy » Mo 24. Apr 2006, 23:22
Hallo Hias und Dietrich

Danke für die Tipps!

Ich werde sie übersetzen, und dann weiter leiten an Lee (der nicht will daß seinen Namen zu oft genannt wird. Ja, bisschen komisch, aber an sonsten ein guter Kerl und Programmierer), der sich die Zähne abbeisst an MyDOS.

@Charlie: kannst Du angeben, welche Version(en) von MyDOS dieses Verhalten zeigen?

Tschüß

Mathy

von HiassofT » Di 25. Apr 2006, 01:22
Dietrich hat geschrieben:Dann rufe im Bootloader statt des normalen SIO den folgenden Code (der natürlich auch vorne im Bootloader stehen muss) auf:

Ah, das ist eine gute Idee, danke für den Tip! (hätte eigentlich auch selber drauf kommen können :-)

Ach ja: Die Highspeed-SIO sollte abschaltbar sein, sonst gucken Leute mit MyIDE oder anderen SIO-Geräten in die Röhre, wenn sie versuchen das DOS zu booten :wink:

Das ist sowieso ein Grundproblem mit allen direkt am Atari angeschlossenen Festplatten-Controllern. Eine gute Highspeed-SIO Routine sollte auch noch mit langsamen (oder nicht unterstützten) SIO-Geräten klarkommen, aber zu erkennen, daß zB die Blackbox das SIO-Gerät D1: nach D6: gemappt hat und D1: nun eine Blackbox Partition ist, ist ein Ding der Unmöglichkeit.

Ein ähnliches Problem hatten auch die meisten Highspeed SIO Patches für das OS: Sie haben sich direkt in $E459 eingeklinkt und dann beim ersten Zugriff auf Dx: festgestellt, daß die Harddisk kein Ultraspeed unterstützt. Wenn man dann zB die MyIDE Harddisk deaktiviert, werden alle Zugriffe auf das (vorher verdeckte) SIO-Gerät in Standard SIO-Speed ausgeführt.

Mein SIO-Patch verwendet da einen Trick: er klinkt sich nicht in $E459 ein sondern in $E971 (natürlich mit vorheriger Abfrage, ob das OS auch kompatibel ist). Damit wird die SIO-Routine nur dann aufgerufen, wenn auch wirklich ein SIO-Gerät angesprochen wird. Mit dem XL/XE OS sowie dem MyIDE OS funktioniert das prima, für andere OSse (sofern sie nicht eh selber eine Highspeed Routine integriert haben) müsste man nur die Adresse etwas anpassen.

so long,

Hias

von HiassofT » Di 25. Apr 2006, 01:24
Mathy hat geschrieben:Danke für die Tipps!

Ich werde sie übersetzen, und dann weiter leiten an Lee (der nicht will daß seinen Namen zu oft genannt wird. Ja, bisschen komisch, aber an sonsten ein guter Kerl und Programmierer), der sich die Zähne abbeisst an MyDOS.

Du kannst Lee gerne ausrichten, daß er mich auch direkt anmailen kann. Vor einiger Zeit hatten wir einen regen email-Kontakt, aber ich habe leider keine aktuelle email-adresse mehr von ihm.

so long,

Hias

von CharlieChaplin » So 30. Apr 2006, 23:58
nunja, (off-topic)
der von mir beschriebene bug passiert in der (bzw. meiner) neuesten MyDOS Version 4.54 (oder 4.55?). Lee hat zwar div. Patches released aber leider nie selber die Versions-nr. von MyDOS geändert. Egal, die RD-Patches für MyDOS (DOS.SYS) sind da schon drin (damit nicht Drive 0 formatiert wird)...

Weitere Beschreibung der Dateien:
- DOS.SYS => MyDOS 4.54 oder 4.55
- Dup.SYS => DUP des MyDOS
- MyRamd2.AR0 => Ramdisk-Treiber von Lee für MyDOS (als erstes Autorun-file!)
- :Ramdisk => Subdir, deren inhalt vom RD-Treiber komplett in die RD kopiert werden soll (zur Zeit ist da ein ca. 1MB großer Film drin!)
- TBXL.AR1 => Turbo Basic XL (wird für den Film-Player benötigt, liegt als 2. Autorun-File vor)
- Autorun.BAS => der Filmplayer (lädt/spielt den Film von D8:)

eigentlich sollte nach dem DOS... 1. der RD-treiber laden, das funkt.! dann 2. sollte dieser die subdir :Ramdisk in die RD (D8:) kopieren; da die subdir eine 1MB Datei beinhaltet, das DOS aber nur einen ca. 32k großen Copy-Buffer hat, müßte es mehrmals nachladen - tut es aber nicht! dann sollte 3. TB-XL geladen werden (aber erst wenn die subdir :Ramdisk komplett kopiert wurde, was leider nicht klappt!) und schließlich 4. der filmplayer der den Film von der RD abspielt;

wie gesagt, probleme gibt es bei punkt 2 und 3 (punkt 2 wird zu früh abgebrochen und punkt 3 zu früh gestartet)... dachte es läge an den nur 3 buffern - aber nachdem ich TBXL.AR1 in *.COM umbenannt habe, klappte der Kopiervorgang prima (und TB musste dann halt manuell gestartet werden)...

vielleicht verträgt sich die multi-autorun routine (*.AR0...*.AR9) nicht so ganz mit den RD-treiber-routinen (z.B. die Subdir :Ramdisk vor dem nächsten Autorun komplett in die RD zu kopieren)... keine ahnung... gruss, Andreas Magenheimer.

P.S.: Natürlich wurde der Test mit einem ATR-Image gemacht (ich kann sonst keine megabyte grossen Disks am Atari erzeugen). Aber via SIO2PC hing ein echter Atari dran...