Das ist auf der PC-SIG Disk Nr.21.
Restauration IBM 5150
-
-
Es geht weiter! Danke an Toast_r , der mir die zwei SA400L plus Software zugeschickt hat!
Je nach Wert wird der Schrittmotor für den Spurwechsel langsamer oder schneller angesteuert... SA400 hat laut Datenblatt 40ms nötig.
Kurze Ergänzung: das SA400 hat 40ms, dein SA400L benötigt aber nur 20ms.
-
dein SA400L benötigt aber nur 20ms
Ah, danke für die Info. Dann kann ich ja noch feinjustieren.
-
Jetzt geht die Suche los. Gottseidank ist das BIOS des IBM 5150 sauber im Handbuch dokumentiert. Nach etwas Suche findet man "DISK_BASE" - den Datenblock für die FDC-Parameter. SRT ist hier "0xC" - also 2*4=8ms. Ich setze SRT auf "0x0", also 2x16=32ms. Eines meiner Sonder-EPROMs gebrannt, anstelle des originalen BIOS' eingesetz - und - nix geht. Ach ja, das BIOSprüft sich ja zu Beginn selbst auf additive Prüfsumme modulo 256 - da sollte Null rauskommen. Das letzte Byte im BIOS ist 0x77 - Wenn der SRT-Parameter statt 0xCF jetzt 0x0F, also 0xC0 kleiner ist, dann mache ich einfach mal das letzte Byte 0x77 um 0xC0 größer. Das ergibt 0x137 - Modulo 256 also 0x37. Jetzt das EPROM neu gebrannt...
Die Idee mit der Anpassung der Steprate direkt im BIOS hat mich auf die Idee gebracht, mal hier nachzuschauen ...
;==============================================================
; Super PC/Turbo XT BIOS for Intel 8088 or NEC "V20" Motherboards
; Additions by Ya`akov Miles (1987) and Jon Petrosky <Plasma> (2008-2017)
;==============================================================
Warum? Da ich das original IBM BIOS ein wenig unkomfortabel finde, benutze ich schon seit längerer Zeit für meine IBM PC und XT nur das "Super PC/Turbo XT BIOS". Bisher habe ich kein Probleme damit gehabt; es funktioniert einwandfrei.
... und siehe da, in Zeile 2998 findet sich folgende Prozedur:
;==============================================================
; Interrupt 1Eh - Diskette Parameter Table
;==============================================================
entry 0EFC7h ; IBM entry for disk param
proc int_1E far
db 11001111b ; Disk parameter table
db 2
db 25h
db 2
db 8
db 2Ah
db 0FFh
db 50h
db 0F6h
db 19h
db 4
endp int_1E
;==============================================================
Die Parameter sind bis auf 19h identisch mit denen im original BIOS.
Das "Super PC/Turbo XT BIOS" hat den weiteren Vorteil, das man es ganz einfach neu übersetzten kann:
"Once assembled and linked, the actual BIOS image is the last 8K of the EXE
produced, with the exception of the final checksum byte which needs to be
calculated and added to the end. (The checksum byte makes the sum of all the
bytes in the image = 0 mod 256.)"
Getestet habe ich die Änderung der Steprate bislang nicht, da ich für meine Floppies nicht mehr als 8ms benötige. Ich wüsste aber nicht, warum es nicht funktionieren sollte.
Grundsätzlich funktioniert die Erzeugung eines neuen BIOS jedoch einwandfrei; habe ich schon mehrfach gemacht und anschließend mit meinem Galep 5 neu "gebrannt".
-
Mit eben diesem BIOS und dem Patchen des Disk Parameter Table auf 32ms Steprate habe ich die Laufwerke getestet, bevor sie an Wolfgang gegangen sind.
Änderung in der ASM Datei gemacht, make ausgeführt, und die erzeugte ROM-Datei aus dem EPROM-Verzeichnis gebrannt.
Einfacher geht's wirklich nicht.
-
Jedes mal das BIOS zu patchen, ... ist natürlich ein wenig mühsam. Wie gut, daß es das Program DEBUG gibt. Nachfolgend ein Beispiel für das Shugart 400L mit einer Schrittgeschwindigkeit von 20 ms. Der Wert srt=6 entspricht 10 ms, das Ganze mal 2 ergibt 20 ms (F=1 ms ... 0=16 ms).
Code
Alles anzeigenTextdatei: STEPRATE.DEB A 100 MOV AX,0000 ; segment DS=0000 MOV DS,AX LDS DI,[0078] ; load pointer using DS, the DPT MOV BYTE PTR [DI],6F ; srt=6, head unload time=F INT 13 ; important, reset the disk MOV AH,4C ; return to DOS (4C) with INT 21 ; INT 21 R CX 12 ; length 12 byte N STEPRATE.COM ; create filename STEPRATE.COM W ; write Q ; and quit
Nun einfach DEBUG starten mit:
Das war es schon.
Der Interrupt 1Eh zeigt ja genau auf die Tabelle mit den Diskettenparametern. Da ein Interruptvektoren eine Größe von genau 4 Byte hat, ermittelt
sich der Offset zu 1Eh x 4 = 78h. Und genau bei 0000:0078 findet man die Adresse an der die Parameter letztendlich im Speicher zu finden sind.
Nun noch für die wichtigsten STEPRATEs (3, 6, 10, 20 ms) jeweils eine Datei erzeugen und man ist für alle Fälle gewappnet.
Bei meinem IBM PC 5150 (Super PC/Turbo XT BIOS) mit zwei TANDON TM100-2A sah das Ganze dann wie folgt aus:
Code
Alles anzeigenvorher: DEBUG <ENTER> -D 0000:0078 L 4 0000:0070 22 05 00 00 "... -D 0000:0522 L B 0000:0520 DF 02 25 02 09 2A-FF 50 F6 0F 02 ..%..*.P... -Q nachher: DEBUG <ENTER> -D 0000:0078 L 4 0000:0070 22 05 00 00 "... -D 0000:0522 L B 0000:0520 6F 02 25 02 09 2A-FF 50 F6 0F 02 o.%..*.P... -Q
20 ms für das TM100-2A sind natürlich genauso "falsch" wie 6 oder 8 ms für das Shugart SA400L.
-
Der Gedanke ist schön, aber um debug starten zu können, muß man erstmal DOS booten - was nicht klappt, wenn das BIOS die Laufwerke nicht gebändigt bekommt.