DD300254A5 - Ein system fuer die fernbetaetigte fehlersuche, korrektur und universelle arbeit eines personalcomputers - Google Patents
Ein system fuer die fernbetaetigte fehlersuche, korrektur und universelle arbeit eines personalcomputers Download PDFInfo
- Publication number
- DD300254A5 DD300254A5 DD34316790A DD34316790A DD300254A5 DD 300254 A5 DD300254 A5 DD 300254A5 DD 34316790 A DD34316790 A DD 34316790A DD 34316790 A DD34316790 A DD 34316790A DD 300254 A5 DD300254 A5 DD 300254A5
- Authority
- DD
- German Democratic Republic
- Prior art keywords
- mov
- computer
- program
- call
- pop
- Prior art date
Links
Abstract
Die Erfindung betrifft einen Personalcomputer * der mit einem Ferndiagnostikprogramm ausgestattet ist, das in einem Chip in einem Festspeicher gespeichert ist und automatisch mittels des Standard ROM BIOS fuer den optionalen Gebrauch abgerufen wird. Wenn diese Option ausgewaehlt wird, befaehigt das den Rechner, mittels des Telefonnetzes mit einem anderen Rechner in Verbindung zu treten, der Systemfehler suchen kann, grundlegende Aufbauprogramme betreiben kann, und der im allgemeinen das Computersystem so betreiben kann, als ob der Basisaufruf den PC lokal betaetigen wuerde. Die Erfindung betrifft ebenfalls ein Chip fuer die Anordnung in einem Personalcomputer, und in dem ein Programm gespeichert wird, um die erforderlichen Synchronisationssignale fuer einen Basisrechner zu liefern, und der Programme aufweist, um die "Befehlsinterpretation" fuer die Einrichtung einer Basis-Neben-Beziehung zwischen dem Basisrechner und dem Personalcomputer an einem entfernten Ort zu liefern, und der mit dem besagten Chip ausgestattet ist, das die vollstaendige Steuerung des besagten PC ermoeglicht (mit der Ausnahme, die durch die Nebeneinrichtung "Unterbrechung" zur Verfuegung gestellt wird).{Personalcomputer; Ferndiagnostikprogramm; Telefonnetz; Systemfehler; Aufbauprogramm; Basisaufruf, lokal; Programm; Synchronisationssignal; Befehlsinterpretation; Basis-Neben-Beziehung, entfernt; Chip; Steuerung; Nebeneinrichtung; Unterbrechung}
Description
Hierzu 1 Seite Zeichnung und 24 Seiten Tabellen
Die Erfindung betrifft einen Personalcomputer (PC), der mit einem ROM BIOS Chip-Speicher, einer Zentraleinheit, einem RAM-Speicher, einem seriellen Eingabe/Ausgabetor, einem Modem (Modulator-Demodulator), einer Tastatur und einem Monitor versehen ist. Die Erfindung betrifft ebenfalls einen Nur-Lesespeicher (ROM) für die Anordnung in einem Personalcomputer. Derartige Computer sind gut bekannte Standardgeräte, die nach einem Standard gebaut werden, wie er ursprünglich von der IBM Corporation vorgegeben wurde, der aber jetzt ein Industriestandard ist, der von einer großen Anzahl von unabhängigen Herstellern befolgt wird.
Innerhalb dieses Standards sind eine sehr große Anzahl von Variationen betreffs der RAM-Speichergröße, der Anzahl und Ausführung der Eingabe/Ausgabetore, der Anzahl und Ausführung der Ausrüstung, wie beispielsweise der Floppy-disk-Stationen, Hard-disks, des Coprozessors, der mehr oder weniger komplizierten grafischen Karten, Netze und Kommunikationseinrichtungen, usw. möglich. Ein PC wird normalerweise mit einer Hauptplatte geliefert, die einen ROM BIOS Chip-Speicher und eine Anzahl von Kartenschlitzen aufweist, wo die Karten für das Steuern der Plattenantriebe angebracht werden, die die Eingabe/Ausgabetore, usw. bereitstellen, ebenso wie für verschiedene ardere Karten und Extras, wie beispielsweise ein Mathematikprozessorchip. Bei älteren Modellen befinden sich auf der Hauptolatte oc er anderswo eine Anzahl von Konfigurationsschaltern, d. h., manuell einstellbare Schalter („Dip-Schalter"), die benutzt. /erden, um Daten für die tatsächliche Speichergröße einzustellen, und die Nummern und Ausführungen der verschiedenen Geräte im Computer. Angesichts der Tatsache, daß immer mehr solcher Ausrüstungen normal geworden sind, die eine übermäßige Anzahl von Schaltern erfordern, ist diese Methode der Definition d6r Konfiguration der einzelnen Maschinen undurchführbar geworden, und
daher wurde das Dip-Schaltersystem universell gegen ein System von einstellbaren Speicherzellen ausgetauscht, deren Information sich ändern muß, wenn der Computer mit mehr Speichern oder weiteren Geräten verbessert wird. Im Gegensatz zu den festen ROM-Spoichern, wie sie für den ROM BIOS verwendet werden, kann dieser programmierbare Konfigurationsspeicher, ein CMOS RAM, Daten durch beispielsweise elektrische Störungen, eine ausgefallene Batterie, usw. verlieren, und er wird dann neu eingestellt werden müssen, und bis das geschehen ist, wird der Computer nicht benutzbar sein. Nur etwa 10% der PC-Nutzer sind in der Lage, diese erforderliche grundlegende Einrichtung vorzunehmen, ohne daß ein übermäßiger Zeitaufwand für das Studieren der zu befolgenden Anleitung aufzuwenden ist, und die meisten von ihnen müssen den Service benachrichtigen oder das ausgefallene Compiitersystem einer Werkstatt zuführen. Tatsächlich wird die Mehrzahl der PC-Nutzer nicht einmal in der Lage sein, den Fehler zu bestimmen. Außerdem nimmt die Kompliziertheit des CMOS-RAM-Systems laufend zu, ebenso wie die Anwendungen, für die die PCs eingesetzt werden, wie beispielsweise die Netzwerkkommunikation, usw. Vom Gesichtspunkt des Wartungspersonals ist es oftmals schwierig, d6n Grund iür das Versagen des Computers zu ermitteln, da der Besitzer häufig telefonisch informiert und die Symptome unklar oder unverständlich beschreibt. Es wäre daher von beträchtlichem Nutzen, wenn das Wartungspersonal das gestörte Computersystem von der Ferne aus überprüfen könnte, und zwar vom Zeitpunkt des Betreibens des Computers an so zeitig wie möglich, wobei das PC-System schrittweise am Service-Computermonitor untersucht wird, der über das Telefonnetz in einer Basis-Neben-Konfiguration arbeitet. Sie könnten dann selbst den Zustand des Computers sehen, gerade so als ob man tatsächlich am Computer sitzen würde. Sie könnten einen ausgefallenen CMOS-RAM-Speicher zurückstellen, verschiedene Testprogramme durchführen, usw. und oftmals das Computersystem nach einigen Minuten in dan Arbeitsbefehl bringen. In anderen Fällen kann es möglich sein, ein ausgefallenes Bauelement zu identif zieren, das der Wartungsingenieur dann beim Anruf mitbringen könnte.
Um eine Lösung für dieses Problem der Ferndiagnostik zu liefern, schlägt die vorliegende Erfindung vor, daß ein Computer der votangehend erwähnten Ausführung zur Verfügung gestellt wird, wie er in der charakterisierenden Klausel des Patentanspruchs 1 angeführt wird. Sie schlägt ebenfalls einen Nur-Lesespeicher für die Anordnung in einem Personalcomputer vor und die Ausstattung mit einem Programm, wie es im Patentanspruch 5 aufgeführt wird.
Um das Vertrauen des Benutzers des Computers zu bewahren, und um seine Sicherheit zu gewährleisten, wird dem Benutzer die Möglichkeit gegeben, zu beobachten, was für eine Information dem Basisrechner zugeführt wird. Der Benutzer kann beispielsweise Dateien im Speicher, beispielsweise auf Hard-disks, haben, von denen er nicht möchte, daß andere sie losen. Daher zeigt gemäß einon Aspekt der Erfindung der Monitor des Benutzers, was die ganze Zeit getan wird, und zwar mit der Möglichkeit, daß der Benutzer die Kommunikation sofort unterbrechen kann, wenn er sieht, daß ein Zugriff zu einer vertraulichen Datei vom Basis-PC erfolgt, wobei das auf seinem Monitor gezeigt wird. Wann auch immer der Benutzer "unterbrechen" möchte, wird ein Drücken von CTRL/ALT + DEL in der üblichen Weise dazu führen, daß der PC die Modem-Kommunikation unterbricht und ein sogenanntes „kaltes Urladen" durchführt (nicht das übliche „warme Urladen").
Entsprechend der Erfindung wird eine Programmfolge hinzugefügt, die als Teil des normalen ROM BIOS eingeschlossen werden soll, wobei es sich um Hardware oder Firmware in dem Sinne handelt, daß sie einen Teil des „eingebrannten" oder festen Speicherbefehlsvorrates bildet, der im Computer angeordnet ist. Jedesmal, wenn der Computer gestartet wird (urgeladen wird), wird dieses zusätzliche Programm vom ROM BIOS aufgerufen, und der Benutzer hat die Option, diese Möglichkeit anzuwenden, oder, wenn er davon Abstand nimmt, wird das Urladeverfahren weitar in der üblichen Weise abgewickelt. Wenn die Möglichkeit, die das fernbetätigte Urladen des Nebenrechners unter der Kontrolle des Basisrechners gestattet, gefordert wird, wird der Basisrechner (der Computer in der Werkstatt) mit einem anderen Programm versehen werden, um zu gestatten, daß dieses Merkmal (HOSTREM, COM) angewendet wird.
Ein wichtiges Merkmal der Erfindung ist, daß sie vom angewandten Betriebssystem unabhängig ist, und daß sie gleichermaßen gut funktioniert, ob der Benutzer beispielsweise ein MS-DOS, PC-DOS oder UNIX besitzt. Jeder Personalcomputer ist mit einem ROM BIOS ausgestattet, und obgleich eine Anzahl von unterschiedlichen ROM-BIOS-Ausführungen auf dem Markt sind, verrichten sie alle im wesentlichen das gleiche (BIOS ist die Abkürzung für Basic Input Output Systeme). Beim ROM BIOS gibt es Ge'.ehle, die die CPU-Suche nach ROM-BIOS-Erweiterungsprogrammen durch Untersuchen von verschiedenen bekannten Adressen im System vornehmen, und nachdem ein derartiges Programm identifiziert und geprüft wurde, wird das ROM BIOS jenem Programm eine Steuerung verleihen. Entsprechend der vorliegenden Erfindung ist ein derartiges Programm in der Hardware angeordnet, und das gestattet, daß ein Fernbasisrechner die erforderlichen diagnostischen Aufgaben verrichtet. Es muß ebenfalls betont werden, daß die Erfindung gleichermaßen gut funktionieren wird, ob die CPU in 8086,8088,80286, 80386 oder ein anderer kompatibler Prozessor ist.
Ein sehr spezielles.''. -kmal des Systems der Erfindung ist, daß die Kommunikation und die Basis-Neben-Beziehung eingerichtet wird, bevor das Betriebssystem eingeführt wird, da das Programm funktionell einen Teil des ROM BIOS bildet, und sie wird daher vor und unabhängig von irgendeinem Betriebssystem eingeführt. Um die Kommunikation ebenfalls während und nach der Installation des Betriebssystems aufrechtzuerhalten, ist es erforderlich, einen bestimmten Speicherraum im RA !-Speicher des Nebengerätes zu reservieren. Etwa 3kByte werden benötigt, und die Größe des RAM-Speichers, der für das Betriebssystem zur Verfügung steht, wird entsprechend reduziert. Außerdem wird die Steuerung über das Serientor, das für die Kommunikation benutzt wird, aufrechterhalten, und sie wird nicht durch dh Installation des Betriebssystems unterbrochen. Das Musterprogramm, das in den Tabellen gezeigt wird, verrichtet alles das, wenn das Betriebssystem das MS-DOS (PC-DOS) ist. Wenn andere Betriebssysteme verwendet werden sollen, können Modifikationen erforderlich sein.
Bei der Einrichtung einer Basis-Neben-Beziehung zwischen zwei Computern, die voneinander entfernt sind, gibt es an sich nichts Neues. Nach dem bisherigen Stand der Technik konnte das jedoch nicht anders abgewickelt werden als durch die Benutzung des Betriebssystems des Nebengerätes, das daher zuerst installiert werden mußte. Da ein fehlerhafter Computer immer gewiß nicht in der Lage sein wird, ein Betriebssystem zu laden, kann eine derartige Basis-Neben-Beziehung nach dam bisherigen Stand der Technik nicht für den Zweck der Erfindung benutzt werden.
Die Erfindung wird jetzt unbegrenzt durch die Schritte veranschaulicht, die vom Benutzer eingeleitet werden, wenn gewünscht wird, daß eine Ferndiagnostik und ein Ferntest gestattet werden.
Die Abbildung 1 zeigt ein schematisches Blockschaltbild. Die Tabelle A zeigt ein Programm für den Basisrechner. Die Tabelle B zeigt ein Programm, das in tier Hardware („Firmware") des Nebenrechners angeordnet wird. Beide Programme werden in der Assemblersprache geschrieben.
Wenn der Besitzer eines Personalcomputers möchte, daß sein Computersystem entsprechend der Erfindung geprüft wird, sind die folgenden Schritte zu unternehmen:
1. Der Besitzer nimmt Kontakt zu seiner Wartungswerkstatt auf und bitte um eine Wartungsdiagnostik, und er gibt die Telefonnummer an, die für die Kommunikation zu benutzen ist.
2. Der Besitzer schließt seinen Computer an die Telefonleitung mittels eines Modem in der üblichen Weise an und schaltet seinen Computer ein (Abbildung). Wenn er einen Optiondatensatz auf seinem Monitor erhält, beispielsweise „Für die Ferndiagnostik R drücken", wählt er jene Option, indem er „R" tippt. Seine Tastaturkommunikation mit seinem eigenen Computer ist jetzt unterbrochen, und die Steuerung kann jetzt von der Wartungswerkstatt übernommen werden, nachdem sie gewählt und die Zugriffsprozedur abgeschlossen haben. Die einzige Option, die für den Benutzer offen ist, ist die, daß er CTRL/ ALT + DEL tippen kann, um die Kommunikation „zu unterbrechen" (oder natürlich den Computer abzuschalten). (Wenn er nicht „R" innerhalb von 5see tippt, wird sich die Standardstartprozedur fortsetzen.)
3. Das Wartungspersonal benutzt eine Standardkommunikationssoftware, um die Telefonnummer das Besitzers zu wählen, und um, nachdem sich die Kommunikation in der normalen Weise eingerichtet hat, das richtige Kennwort für den Zugriff zum Ferncomputer zu liefern.
4. In der Werkstatt und auf dom Monitor des Besitzers wird jetzt eine Anzahl von Listen vorgelegt. Außerdem wird ein Menü mit bestimmten Optionen gezeigt.
Damit die ferngesteuerte Kommunikation eingerichtet werden kann, ist es erforderlich, daß der Besitzer die Ferndiagnostikoption während der Abarbeitung des ROM BIOS wählt, damit das Programm abgearbeitet werden kann. Das wird nun jedesmal einmal abgewickelt, wenn der PC gestartet wird, und es besteht daher keine Gefahr, daß der Zugriff zu anderen Zeiten erhalten werden kann, selbst wenn der Computer am Telefonnetz angeschlossen bleibt. Wenn Hacker einen Zugriff durch bestimmte andere Hilfsmittel erreichen, können sie nicht das „Ferndiagnostiksystem" verwenden.
Die tatsächliche Einrichtung der Kommunikation wird von der Werkstatt aus mittels eines Standardkommunikationsprogramms vorgenommen, das Befehle sendet, um ihrem Modem zu befehlen, mit dem Fernmodem des Computers in Kommunikation zu troten, der diagnostiziert werden soll. Ist die Kommunikation erst einmal eingerichtet, wird der Ferncomputer seine Seriennummer (immer in seinem ROM BIOS vorlian Jen) an die Werkstatt senden, und die Werkstatt sendet die empfangene Seriennummer gemeinsam mit einem Kennwort zurück, und das richtige Kennwort gestattet die Fortsetzung der Kommunikation zwischen dem Basisrechner und dem Nebenrechnr . Das besagte Kennwort wird daher in das im ROM vorhandene Programm eingebaut und kann für alle Computer das gleiche soin, die von der Firma geliefert werden, zu der die Werkstatt gehört, so daß sie zu ihren eigenen Produkten einen Zugriff haben kann und diese warten kann, aber sie wird nicht in der Lage sein, einen Zugriff zu PCs anderer Unternehmen zu haben.
Das Personal der Werkstatt kann jetzt damit beginnen, die erwähnten Optionen zu verwenden, um das System zu diagnostizieren, und das Kennen der Seriennummer gestattet die Korrektur der Einstellungen eines jeden einzelnen Systems. Der zu diagnostizierende Computer muß mit einem festen ROM-Programm versehen sein, wie beispielsweise REMCMOS aus Tabelle B, und für das Fernurladen muß die Werkstatt ein Programm besitzen, das damit kompatibel ist, wie HOSTREM.COM aus Tabelle A. Sie werden in der Assemblersprache augeführt, werden aber natürlich in der Maschinensprache assemblies und verwendet. Das „Hardware"-Programm kann nach einer der vier Möglichkeiten installiert werden:
1. Einfügung in die ROM BIOS-Chips auf der PC-Hauptplatte (FOOOOh-FFFFFh).
2. Als separate EPROMS auf der PC-Hauptplatte angordnet. Einige Ausführungen der Hauptplatten sind für ein Hinzufügen derartiger EXTENDED BIOS-Chips (EOOOOh) vorbereitet oder alternativ durch Verwendung von zwei 27512 EPROMS, um die ROM BIOS-Chips zu ersetzen.
3. In die Hard-Disc Controller Card ROM BIOS eingefügt oder ausgetauscht.
4. Auf einer vollständig separaten Karte, die irgendwo im Adressenbereich COOOOh bis EOOOOh adressiert werden kann. Bei einem jeden dieser letzten drei Fälle wird das Standard-ROM BIOS das Programm als REMCMOS bei seiner Standardstartprozedur der Überprüfung der Adressen von COOOOh bis EOOOOh in 800-h-Sprügen vorfinden, und es wird ein Programm von bestimmter Länge identifizieren, und wenn die Prüf summe in Ordnung ist, wird die Steuerung auf jenes Programm übergehen. Der Fall 1 wird fordern, daß die ROM-BIOS-Erweiterungssuche in das FOOOOh-Segment ausgedehnt wird.
Eine vollständige Erklärung der Funktionsprinzipien des Standard-ROM BIOS kann im Handbuch „Personal System/2 and Personal Computer BIOS Interface Technical Reference" (IBM Corporation, Boca Raton, FL, 1987) vorgefunden werden, worauf wir uns hierin beziehen.
In das ROM-BIOS-System ist ein spezielles Merkmal eingebaut, das durch die Erfindung benutzt wird. Wenn der Computer zum ersten Mal Strom erhält, erhält er seinen ersten Befehl von einer Festadresse im ROM-BIOS-Programm (FFFFOh), der die Abarbeitung des ROM BIOS startet. In diesem Urladeprogramm, das verschiedene Programmstarts der gesamten Hardware im Computer vornimmt, ist immer eine Suche nach ROM-BIOS-Erweiterungsprogrammen bei vorgegebenen Adressen vorhanden, die mit der Adresse COOOOh beg. inen, und die in 800-h-Stufen bis zu (aber nicht einschließlich) EOOOOh fortlaufen (64 Adressen), danach bei EOOOO (eine Adresse). Das BIOS kann leicht modifiziert werden, um seine erste Suche aufF7800h anstelle von 0000h zu erweitern, und jedes Programm, das in den ROM BIOS-Chips enthalten ist, wird daher ebenfalls ermittelt werden und eine Steuerung erhalten.
Für eine jede dieser Adressen wird eine Prüfung vorgenommen, ob ein Programmstartkennzeichen vorgefunden wird. Das ROM BIOS kann von einer Fertigung zur anderen variieren, aber diese Suchvorgänge werden immer durchgeführt, um die IBM-Kompatibilität aufrechtzuerhalten. Andere Geräte können bei einer oder mehreren dieser Adressen installiert werden, aber es wird immer eine vorhanden sein, ,die für die Einordnung des Startes des REMCMOS-Programms der Erfindung benutzt werden kann.
ausgewählt wird, automatisch alles tun, was erforderlich ist, um die Kommunikation mittels des beigefügten Modems zugestatten (es wird das Serientor mit der höchsten Toradresse dafür benutzen, wodurch gestattet wird, daß eine weitere
eingerichtet ist, wird es mit der Seriennummer des PC antworten, wodurch gestattet wird, daß der Basisrechner auf die relativen
zurückgibt, und indem er ein Kennwort liefert, um Zugang zum System des Benutzers zu erhalten. Nur ein Versuch ist gostattet,ein ungültiges Kennwort führt zur Unterbrechung der Kommunikation des PC des Benutzers und zum erneuten Urladen („kaltes
zeitaufwendig zu machen.
über die Einrichtung des Systems (wobei alles zum Bildschirm des Benutzers zurückgebracht wird) beginnen, wobei damitgestartet wird, ob das System durch den PC-Schutz (ein PC-Zugriffssteuersystem) geschützt ist oder nicht, und wenn nicht, wirdgefragt, ob die Diagnostik fortgesetzt werden sollte oder nicht. Wenn eine Fortsetzung gefordert wird, berichtet der PC des
akzeptiert.
spezielle Software für das System, um die Synchronisation der zwei in Verbindung stehenden Computer zu gestatten, und die„Befehlsinterpretation", „HOSTREM.COM", die mit der Kommunikations-Software durchlaufen kann, beispielsweise als ein„Editor-Programm".
als nächstes die seriellen Toradressen und danach die Adressen aller anderen Karten im System (beispielsweise Hard Disk
1. Durchlauf durch das grundlegende Systemeinrichtungsprogramm (CMOS-Installation).
2. Durchlaufen eines Ausprüfprogramms "DEBUG", das die Prüfung aller Speicherbereiche im PC gestattet, wie beispielsweise die Daten, die durch das ROM BIOS eingesetzt werden, die Toradressen, usw.
3. Prüfen der Torkommunikation. Der Basisrechner ist in der Lage, ein vorhandenes Tor als ein „Ausgabetor" zu benennen und ein vorhandenes Tor als ein "Eingabetor" (einschließlich irgendeines parallelen Tores, aber ausschließlich des Tores, das für die „Ferndiagostnik" verwendet wird), wodurch gestattet wird, daß der Basisrechner Befehle an irgendwelche Zusatzgeräte sendet und irgendwelche Antworten von jenem Zusatzgerät empfängt. Die erforderlichen seriellen Torparameter werden erfragt und vom Basisrechner eingegeben.
4. Die Urladeprozedur ist fortzuführen, wobei die Kommunikation offen gehalten wird, und danach sind die erforderlichen Befehle zu geben, damit eine Software in einem Adreßbuch durchlaufen kann, einschließlich der Adreßbuchstabe, usw. Die Nebenanlage führt die normalen Tastaturunterbrechungsvektoren zurück, so daß der Benutzer irgendein erforderliches Kennwort eingeben kann, wenn sein System urgeladen wird (beispielsweise PC-Schutz), und auf das Synchronisationssignal warten wird, bevor fortgefahren wird. Das wird vom Basisrechner geliefert, der DOS aus seiner Kommunikations-Software eingibt und die spezielle gelieferte Software durchlaufen läßt, HOSTREM. COM. Das liefert automatisch das erforderliche Synchronisationssignal zur Neb6nanlage und liefert die „Befehlsinterpretation", die benötigt wird, um den Neben-PC zu steuern.
Zu diesem Zeitpunkt wird der Basisrechner die vollständige Steuerung über den PC des Benutzers haben und kann die Adreßbuchsuchen durchführen und irgendwelche Programme durchlaufen lassen. Der Benutzer besitzt noch die Fähigkeit, die Verbindung durch CTRL/ALT + DELzu unterbrechen, wenn er den Basisrechnerzugriff stoppen will, aber diese sind die einzigen Tasten, die ihm zur Benutzung zur Verfügung stehen; in keiner Weise kann er das Durchlaufen der Software seitens des Basisrechners „stören".
5. Aus; angszugriff. Diese Option gestattet, daß der Basisrechner optional einen Datensatz an den Benutzer tippt, bevor dann entweder ein erneutes Durchlaufen der Speicher- und Einrichtungsprogramme, das kalte erneute Urladen des PC des Benutzers erfolgt oder das Urladen des PC des Benutzers fortgesetzt wird (wenn keine Veränderung bei der PC-Einstellung vorgenommen wurde, wenn ein erneutes Urladen gefordert wird).
Das beispielhafte Hardware-Programm REMCMOS aus der Tabelle B wird etwa 8kBytes des ROM-Speichers einnehmen und könnte theoretisch Platz in den Standard-ROM-BIOS-Chips finden, die normalerweise nicht vollständig verwendet werden. Aus Gründen des Urheberrechtes und ebenfalls aus praktischen Gründen ist es oftmals geeigneter, das Programm in einer Erweiterung anzuordnen, wie es vorangehend beschrieben wurde.
Bei der beispielhaften Ausführung der Erfindung benutzt das Programm, wenn die Menüauswahl 4 genommen wird, die Videounterbrechung 10h, um die Videodaten zum Basis-PC zu leiten, bevor gestattet wird, daß das lokale ROM-BIOS-Unterbrechungsprogramm sie auf den lokalen Bildschirm (Nebengerät) bringt, und es benutzt diese Unterbrechung, um zu prüfen, ob das Betriebssystem installiert wurde oder nicht. Das erfolgt mit jeder Anforderung, den lokalen Bildschirm zu verändern, wodurch eine vollständige Steuerung zur Verfügung gestellt wird. Nachdem das Betriebssystem goladen wurde und durchläuft, übernimmt danach das Programm ebenfalls wieder die Steuerung über die Tastaturunterbrechungen/und das Programm ersetzt diese durch seine eigenen, so daß eine jede Betriebssystemanforderung nach einem Tastaturbefehl im Nebengerät zum Basisrechner gelenkt wird, und seine Antworten werden benutzt, um das Nebenbetriebssystem mit den erforderlichen Befehlen zu versehen. Die Fernurladebetriebsart des Basisrechners wird durch die Tastenkombination ALT/-(Minus) beendet. Das führt dazu, daß der Neben-PC den Datensatz „BREAKING COMMUNICATION" (Unterbrechen der Kommunikation) auf den Bildschirm bringt und in der „normalen" Weise zurücksendet und danach ein ,.kaltes" erneutes Urladen durchführt. Nachdem der Datensatz als Bestätigung zurückgeführt wurde, wird der Basisrochner danach aus dem HOSTREM zurück zum DOS gelassen.
Das beschriebene diagnostische System wird in der Lage sein, solange zu funktionieren wie ein Minimum an Geräten im untersuchten Computer arbeitet. Es muß eine arbeitende CPU, ein arbeitendos Tor und ein gewisser arbeitender RAM-Speicher sowie eine Tastatur vorhanden sein, um das Ferndiagnostikprogramm einzugeben. Der Monitor muß beispielsweise nicht einen Arbeitsbefehl für das diagnostische System haben, um vom Gesichtspunkt der Werkstatt aus zu arbeiten, aber ein vorsichtiger Eigentümer kann sich dann von der Benutzung des Systems ternhalten, da er nicht überprüfen kann, ob die Werkstatt in seinem Computer arbeitet. Ein unterbrochener Monitor würde immerhin zur Werkstatt gesendet, was leicht zu diagnostizieren ist
Zusätzlich wird ein MODEM gefordert.
Die Erfindung darf nicht als auf die beispielhafte Ausführung mit den Programmen, wie sie in der Assemblersprache aufgezeigt werden, begrenzt angesehen werden, sondern sie muß so verstanden werden, daß sie nur durch die als Anhang beigefügten Patentansprüche abgegrenzt wird.
300
Table A -7-
ι TfM profraa ia und for reaole control of lh· «acM» under tot. Il aaiuaea that tha eoMunleal lon channel la already opan and thai tka RUN MHOTE opt lot. haa beea choaan. Il Mrat eeade a atarlup algnat aa4 th«a roapnnde approprlately to Keaaagee reqvaellng Interrupt 10 or I«.
(Wh
co«baa· | •qu | JfIh |
ooalatb | 0bh«4 | |
•« Into | •q» | CChM |
;h*rd cod· Ida eoua cbanaal ;eod lh· Interrupt vector ;and the Interrupt vector
ruftrM aefaant
org IOOb • atm
JiP elart
t T%· original Interrupt vaster
•ooalntk 4«
oooalnto d«
regelO
regelt
ilOfrag·
IaKeIdkdkdb<bdbdbdbdblab·!
db db db db db db db
db db db db db db db db db db db db db db db db db
db db db
IKfTI(I
db db db
lnue db
ciua db
cburr db
cbeod label
cbheed d"
cblail d«
brie
brte ι
label brte HBBCCDD BLBLBUL 11000000b 10OO11OOb ICIOOOIIb I 0100000b IOOOOOOOb I 1000000b
I 110 11 I Ib
I1 ιοί 11 Ib
10100000b HlIIIOOb I IIOIIOOb IUlIOOOOb 11oo1111 b
1000111 Ib IIOIOOOOb IOOOOOOOb IOOOOOOOb
IOOOOOOOb IOOOOOOOb I I 1011 lib
label h/ti
AC
BS
10000000b
IOOOOOOOb
IOOOOOOOb
13a dup (7!
brte
runotlon iO
;3
;Oah :Obh :Och :Odh
;0.h
:Ofb ;10h
: 11 h
:12h
}0 read oau« byte tool J
;epeciricd interrupt ouaber ;oheckeua yle
cburr
a200h !«landed oode ror all/-
; Routine to eat up reflatere ready Co porfora the Interrupt: fro· IeII•etrege:
InItB db doneval «qu
ah.I al.I bh.l bl.l ch.l cl dh.l
•I I ' ♦21
• •41
• Si
• SI •7
rah rat rbh rbl rch rcl rdh rdl
; Roulina to aave raglalera ror coaaunlcaltoo purpoeei eaverege:
aov
IQV OV OV «OV
ret
Uli.ah Idl·!I.al ld:>2!.bb IdIOI.bl IdIMI .ch Idi'Sl.cl Idl··l.dh ldi-7l.dl
;rah,ah ;rel.al irbh.bh .Tbl.bl : rch.ch :rcl.cl irdh.dh :rdi.d!
; Theae ere the cfiaunl ce I lone routlnee. ; Perror« required part InlI le 1 eat lon lnltport:
ov dl.coabaae•dd dl.t
el.Obh
OU
au o
OUdec
di.] • I.I di.«I df al .di
:»el OU12. dir and rl·
: Interrupt enable rcflater
!enable Input characcr tote; Interrupt handling routines
; Routine to lncraaont th· burfor pointer In BXlnobplri
Inc bxcap bx.orrael obondJm IpOIO
ov bx.orraet cburr
IpOIO:
ret i
; Routine Io read a charaotor fro« the circular buffer (Including itrc (olcbi:
puah btClI
«ov bi.cbbeadcap bl.obtall
;aov al.lb«! Juat aa good
(ClOZOi goiOJO:
Je ov | goiozu al.deiOlbil |
call | taobptr |
ov | obh»d.bi |
ale | |
J«< | ahort gcxOSO |
etc | |
pop | bi |
• ti | |
ret |
;ao««lhtBLg Iq buffer
: Routine to ator« charaotef* Into tha circular bufrer. used by c»«lat putchi
ClI
ov bx.obtallcall lnobptrcap bx.cbhead
;loie the character
;atora the now character
Jt | PC020 | |
ov | bi.obtall | |
aov | di:Olbil.al | |
ΌΙΟ: | call | lnobplr |
aov | cbtall.bl | |
all | ||
ret | ||
land I | α the | character lnpu |
ico.IM | push | di |
puah | ca | |
pop | d· | |
ti | ||
puah | al | |
pueh | bi | |
pueh | dk | |
ov | di.ooab··· | |
• dd | di.S | |
In | al ,di | |
teel | al .1 | |
Jl | cl_02 | |
BOV | di.coabaae | |
In | al .di | |
Ol_0l : | ||
cell | putch | |
C l_02: | ||
BOV | al.2Oh | |
out | 20h.»1 | |
pop | di | |
pop | bi | |
pop | ax | |
pop | da | |
lrel |
,for line atalui rollsler
;Check data ready :no character there
;put character Into lh· buf fer ; reeel Inierrupt control I et*
; Routine write· th· oharacar to lh« aortal port iendch;
pueh dx
aov dx, coabe.ee
dx.O
cap Je add pueh
In and cap jnc
pop out
pop ret
lOQO di,5 ax
al.dx al.eOh al ,6Oh BC020
dx.ooabaae
ax
dx.al
dx
:ir no port then don't try ! ode* QontroI reflalor
,chock trtnealt hold «aptv ;«alt LUI
:aend the ohracler
; ThIi routine writ·· the null terminated aaaaage fro· (de:»l> to the ; «oriel port onIy. a end a:
pueb al
001:
ladet?
or a I .el
je ·Β09β
eel I senden
jap abort »bOOI
• 099:
pop at
ret
:Thia routine build« an Interrupt rcqueet ίrom the co·« otanncl•tolreq:
fr_OIO:
; aov ah,I
lnt | 16b | .act the nett character |
cap | al,doneval | |
Jl | |r_l Italnus | |
cell | tfolchx | |
JC | (Γ 010 | |
Veil Jl | ti .4Oh tf r_010 | |
«P jne | •1.1Oh «r_020 | |
teil | al.SOh | |
jnl | tr 020 | |
Hostrem.asm
ov bi.afriit IIOfrafa
καν di.οί(··1 rajalO
Jap ihort ir_030 »r_OIO:
: cap al,Hh :Interrupt Il ra«.uaal T
ov dl.offaat γ·(·Ι· ir_OJO:
«v Inua.al jraaaabar intarrapt auabar
aad al,Offh-OcOo ;tak· off lh· tat tr9a alt· (f r_0*01
eall Ktclii iaacond I MdII I
ov ah.O
»M Vi.ai ial hai AI valua (I.a. fesollon auakar)
»ov ah.lbil i(at ruiil.ra raqvilrad byt·
•hi ah.I ialraaAr (at JJI *T_O«Ot
add et »a. a I ;add to aim
ato«b ;put taglttr lato »!„«a (r_OI9i
ahl ah.I
Jao »r_OTO «r_0«0:
oall (atoh* lfatok aait eoaaa hyla
Jib ahorl irJOIO iput la raf »r_OTOi
cap ah.O
Jm «r_Oie i
«r_ilOO> jail valuaa aal up
: call fatohx !fat tha caua bria
Jo fr_IOO
t oap al.otUB
> Ja C-IiO ;i(oora cbackiua for no« 1
'r_IIO:
olo
rat fr_altalaui:
a to
rat
: roullna to aat up nlllliri and ptrfora lnlarrupt dolntlO:
bov al.offitl Γβ<·ΙΟ
call aatratf·
InI 1Oh
rat :
;Koulln· to aal up Γ·(·<·π aod partora lotarrupt I· dolalie:
ov al.offaat ratal·
oall a«lra(a
InI Hh
rat
Thla la tha aaln aotrr polot
: flrat attach tha coaaualoa.1 lana ohaanal lalarrup
atart:
aov a ι,Ο
»ov aa.al
aov ai.aa:loaalalbl
bov loooalntbl,ax
bov ai,··:IcoalBlol
bov toooalatc],al
ov ai.aa:tcoBlatb«2)
bov loooatatbo) ,ai
ov ai,aa.Icoalntc»2l
aov loooalnto»2l,ax
ClI
ov al.offaat ncoalnt
oov aa:lcoalntbl,ax
aov oa:(coalato],ax
aov ax,ca
bov aa:looalnlb»21 ,ax
bov aa:(aoulntc»2l,ax
atl
puab ca
pop aa ; tnltlallaa lhi* acraan
aov ax,03h
InI 1Oh ilnltlallaa acraoo 5end lh· InI I IaI I aat lon atrlay;
call lnltport
bov al.cffaat InTIa
ca) I aanda
rr 100:
call (otraq ;fctch ncit lnlarrup raiiuaat
; Jc ailt_prof
aov al.lnua
laat al,SOh ;la It Intl<b7
Jm rr_200 :r«·
; cap al.lOh
: Jne rr_200
call dolntlO
Jap ahorl rr_IO0 :oo reply to lplarrupl rr 200!
csll dolnll«
puab ai :Vaap uaor'a coa».*nd
puahf
xchg al,ah
calI aandch :aand »h
ichf al .ah
cal I aande'i ;and al
aov al,O :aol for zero
popr :|cl fl'ia
jo rr_2lO
Inc ai :>el lor non-xoro rr 210:
call aendch :>nd aand flaf brla
pop ai :-aa uier'a coaaand
cnp ax.doncval ;lo axll7
jne rr_IOO
ov ah, I
lnt Uh ;aay to fatchf
Ji exlll ;no aiii .proji
aov ah,O
lot Ha ailtl: Spaolal coaplatloa kav typad. laatora latarrupt and axilell
iclaar kar fro« kbd buffar
10 r ai | .»X |
«ov «« | |
JOV ftf | .(ocoalftLbl |
ov «a | itooalatbl.AE |
BOV B1 | 1(000«.Blal |
BOV Ol | Mooelnlol.ftx |
BOV ! | ,foooiiUl»*ai |
BOV «1 | ilco«Ull>*2l,fti |
BOV Bl | ,(ooo«lBte*2| |
BOV «1 | i(oo«lato*2l .t>x |
ti | |
lot aoh | |
ruar«B and* | |
•Ad «airy |
A-I
Table B
by Midud Sunns, Itt».
: TbU is lbe taioactive setup module which tllows alteration of ihc CMOS : memory and varicv· letu to be performed. U Ii intended to be run in ROM : extensions and lbe assumption U thai the system wQl reboot oa completion,
oc equ lbh bs equ I
SOURCE CODE (ASSEMBLER) POR REMOTE CONTROL AND DIAGNOSTICS SYSTEM, by Michael Stevens. 1919.
: TtUj b the w-.cractivc setup nodule «Aich allows alteration of (be CMOS ; memory «nd various tests Io be performed. It U intended Io be run io ROM ',CMcasioasandlhctsumptioabihitibesysuawiUrcbootoou equ If equ IO
lntS equ | jmp | IhM | ;for accurate liming deliys | :label with value uro needed χι cod of prog Kf to | push | JIdOlO: | nor | di | leading zeroes blinked. | P |
ini9 equ | : this is byic 7 | 9h*4 | jto user kbd tUowcd | '.cilculuc piii bouodxry | push | mov | IX | |||
lnib equ | rom_nif | 44 | ;IRQ< | 55h.Ouh Λ0Μ BIOS EXTENSION PROGlO | push | div | CX | |||
Ulic equ | sn/ | 4S | .[RQ] | ;rome»t/200h .SIGNATURE ind LENGTH BYTE | push | ichg | dx | |||
inif equ | Ofb'4 | :IRQ7 | push | idd | H | |||||
uiilO equ | dxic_bylc | lOh'4 | ;vidini | mov | stosb | CXJ | ||||
im 16 equ | ι6α·4 | Jcbdini | mov | mov | «I." | |||||
ini2l equ | scrvicc_nug | 2th»4 | "S/N" | eld | Ol | ^buffer si ic | ||||
teiup segment | "OOOOOOOO'.O ;uc saiil number returned iftcf | rep | jne | siosb | :ιο bluix fill | |||||
assume | irurnsl db | ds:daia.cs:sciup | :CONNECT received | e dec | eld | di | ||||
or* | Ob | 8 '.lupply moalh |ocs bcrc. byte 8 (byte * even | pop | U | :blink the bu/tcf | |||||
prog_sian: | ;cprom) | SId | :poim to Ixu chxnact | |||||||
a.lf.lCConuct vouf PC dcilcr ία service" | ||||||||||
rom.desc | db | cr.li.O | di.dv | :Γι11 bullcr bkciwvds | ||||||
tixnsiu db | 10h | crJf.lf.Typc "R" for Remote Dixgoostics'.aJf.O | cx.lO | |||||||
sucooi: | . Routine IO convtn AX to ascii decimal in 5-bytc buffer addressed by ES:DI. | CX | :mxkc 32 bit number ia DXAX | |||||||
sun | ; Value is right justified. | ax.dx | ||||||||
uiodoc: | il.'O· | .dividend in AX rcnuindci in DX | ||||||||
db | ||||||||||
db | av.d« | |||||||||
IX.Il | ;put byte imo buffc/ | |||||||||
db | JIdOK | :t-ci retiduc | ||||||||
:ilroofc to do | ||||||||||
db | ||||||||||
db | ||||||||||
pop | nmOtO: | mov | <JX | ;iniommlsii | -.with ZR-I | mov | al.loh | |
pop | iodsb | CX | man of buffer | ;cven if nothing entered | call | gctcmos | ||
pop | sub | ax | -.digits used | |||||
pop | xcbg | di | :io coav io bex number | |||||
ret | mul | |||||||
DcwTOce: | add | |||||||
push | loop | di | -.result to far | |||||
call | cmp | readme | !highest byte | |||||
pop | ret | ti | ; to bin | |||||
cmp | exj | ;old res in ax, new digit in di | ||||||
jx | ocwmcm_rct | ;old · 10 | ||||||
oeg | CX | ;addinecw | ||||||
add | CXj | :come out with result ia ax | ||||||
mov | bl.10 | ;good return. ZR « O | ||||||
χ or | ax ax | |||||||
: Routine to display and if necessary correct memory as stored in CMOS | ||||||||
dxju | fixmcra: | |||||||
fmOIO: | ||||||||
al.tr | ||||||||
tx4x | ||||||||
bl | ||||||||
ax.dx | ||||||||
nmOlO | ||||||||
bl.O | ||||||||
-9-
mov ih.il
mov al,ISb
call getcmos :ietch buc memory into AX
mov di/}ffsclramlsii
call axtodec :sct up dispby
mov sixiiTsct ouncul
call writcra .display dcclircd base meer 3ry
cal! writcra :iod now inc figure
mov al,ISh
call getcmos
mov ah,al
mov al.Hh
fctcmos :fctd> extended mctcory into AX
dijofTset mra2siz
axtodoc .set up display
sijofTsci mmcss2
writcm '.display occlarcd extended memory
wrilcro ;xnd tbc figure
callmovcallmovcallcall
: now ask if to change fmOIS:
mov siAffsci mroesslcall wrilcmpush si
mov exj di Dcwmcm
ji i'mOI6
: reset values in CMOS to lbcne actually entered
:ends ai sun of digit area
pop call
(mO16:
movcallmovmovcallroovcall1.Td
mov call mov
movcallpushmovpopcall
dl.lih
pulcmos
al ^h
dl.lbh
puicmos
xl.Och
gacmos
al.Ocfh
dl.Och
puicmos
:hisc memory low byte
:bisc memory high byte ;auuxnc moEOry now correct
:cIcj/ the diugrccme« bit ;J»· Klup changed
si.off set mmcss2
v.Tiicm
Ii
exj
di
nevk-mem
fmO90
ends at sun of digit area
mov | αι,cn |
call | (.UUi..-,. |
mov | «I Jh |
mov | dl.tSa |
call | pulcmo* |
mov | i).Och |
call | jetcroos |
tod | al.0cln |
mov | dljOeh |
call | putcrooi |
mov | OTjlajJOh |
Itod | fmOlO |
σον al.wordcic
;cxicodcd mesiocy high byte fiptwi^ memory now corroci
- ;clear the disagreement bü •jham tctup changed ;show and ksk ag aü>«etbO4O:
OUljmp
faO9Ch
ία
cropjnibemovmovout
dx.al thonsctb040
al.bl
setb.err
dx
al.Obh
UjJ
dijJ
;xs above ;ioiiialisc the pon
:i/ not urne !tctouCLdirandru
ICt
ictbOJO:
; Simple routine lo will ι while (pri^mkxul to value in CL). wiiubiu
mov countX) wabOlO:
cmp cJxouni
j*e wabOIO ;wih till count > elret
; These routines communicaic with ibe serial port, biuddiv dw l047.76SJM.192.9o.4J .24.12.6.3.2 maxbaud eo,u (S-bauddivV2 mum rale* above
; SPADDS MOVED TO DATA AREA SO THAT IT CAN BE CONVERTED
; PORTS INSTALLED
; convert addresses (ο a msg to report com poru found: This KU tbc baud rate of pon specified in DX according Io the value in AL.
: O «110.1 «ISO. 2 = 300.3-600.4 = 1200.5 = 2400.6 »4800.7 «9600.
: 8 « 19200.9 - 3 WOO. 10 - 56000
: coicr «ith di the pon Io set up
sclbaud:
in crap
tub mov mov out
aLdi
al.bl
«etb.err
<U.3
«J.I
Ν 4)
KIbOoO:
jmp abort tctbO60
IO
cmpyu accinpoppopeicrei
al.bl selb_err dx al Ax bx
:UOotumc
ümorupt enable rcgiser
:caablc input character interrupt
:ifno(sjme
-.rctiorc lo base rcgiucr address
:clcar anythio( ia the buffer
Ktb_err:
push | scibOIO: | in | sclbO:0: | in | selbO30: | in | «X | :kccp baud ourn in bl | :crnp | :rcps(cr 0 (divisor Is bits) |
push | cmp | cmp | cmp | bx | :conirol register address | :if not same | ;kccp for cmp | |||
cmp | JIU | jiu | Jn1 | al.maxbaud | ;bl=16-bit | |||||
j« | mov | xchg | inc | '.keep for cmp | .word search | |||||
mov | rol | inc | inc | :set lhe divisor latch address bit | ax.cs:biuddiv[bx] :this does use es:, but j | |||||
add | mov | mov | dx.3 | |||||||
mov | sub | OUI | seib_crr -.out of range | db OOh.OOh eic | bljl | :cmp | ||||
mov | mov | jmp | bljl | cnu $-pw_code | dxjl | :if not ium | ||||
OUl | OUl | dx.3 | 0 | shon scibO2O | ||||||
jmp | jmp | al.&Oh | :rcgisicr 1 (divisor ms bill) | |||||||
pv._codc | ahjl | al.dx | al.dx | :kecp for cmp | ||||||
p»_code_len | dxjl | ah Jl | iJ.bl | |||||||
db | shon scibOIO | seib_ea | sclb_eiT | |||||||
bh.O | lh .al | |||||||||
bl.l | dx | |||||||||
bl.il | .cmp | |||||||||
di.al | :if not same | |||||||||
shon scibO3O | ||||||||||
.conirol rebsicr add/cM | ||||||||||
al.dt | ||||||||||
al.bl | ||||||||||
seib.cn | ||||||||||
d> | ||||||||||
dx |
mov call pop popStCret
fj.olTset ^on_rcg_en
wriicrn :write to both
bx
ax
: Pul the base address of the lia aviilablc serial pon inu) DX.
; Will be zero if no serial poru found, keeps a dec count of ports found; (moocmpit) and complcnd pouts Io one after the Ua good pon foundgeibuc:
push ix
gbOOIO:
push | bx | :$ possible addresses to chock | dx | :sjvc original value |
«or | bx.bi | :for OO good com pon | al.dx | :Γιηι test paucm |
mov | cx.t | ah j) | ||
mov | bp.I | :ai the cod already ? | al .55h | |
mov | dxjpadds(bx) | :no poru found ? | dxjl | |
or | dx.dx | .1.0 | ||
i« | gb9999 | |||
inc | dx | :feich id register | ||
inc | dx | :check expected zero bits | ||
in | al.dx | :cnd lest | ||
ICSl | al.Oreh | xm is really available by lcsliof the line control register | ||
jnc | gb9999 | inc | ||
in | ||||
mov | ||||
rnov | ||||
OUl | ||||
mov |
jmp shoncbOOll
cust_code db OOb.OOb .eic :cunomcr's own id pn»
gbOOIl:
in | ti.Λα | :if no good |
cmp | al.55h | .vxxxxi tesi rulicra |
jnc | EDV9V9 | |
mov | al.Oub | |
out | dxjJ | |
mov | fbrci: | pop | 1.0 | ;ori| setup | inc | bx |
jmp (MO 12: | pop | short »bOOI2 | cmp | bi.offsci c bend | ||
in | rtl | alAt | jne | ibpOIO | ||
cmp | al.Oaah | mov | bxAffscl cbuff | |||
joe | (bv999 | ucsct to bast address | ||||
mov | al Jh | vcadiocluf | ||||
out | dxjd | -.this pon OK | ||||
dec | dx | :uy oui pon | ||||
dec | <J« | •fxxa pon to connec* | ||||
dec | il | |||||
in | ύΑχ | |||||
mov | bp.bx | |||||
tdd | bxj | ;oo good com port found | ||||
inc | modem pci | •.Im food pon found | ||||
loop | (bOOIO | :iruodx | ||||
»MW: (Ot | ixM | ;wbcrc Io stop | ||||
cmp | bp..| | ialrcady has offset spadds loaded | ||||
Ji | fbrct | |||||
mov | bx.bp | |||||
mov | dx.spadds(bx| | |||||
idd | bU | |||||
add | comptend,bx | |||||
: Rouiinc io increment ibc buffer pointer in BX | ||||||
bx | iocbptt: | |||||
U | ||||||
; Interrupt hwdlini routines | ||||||
ibpOIO:
; Routine Io read a character from the circular buffer. | push | bx | :somethin( in buffer | ihon fcO3O | inc | push | bx |
geich: | cmp | bi.offsci pbend | |||||
cli | jnc | cli | ippOIÜ | ||||
fcOOS: | mov | bx^bhcid | mov | mov | bx.off κι pbufT | ||
cmp | bx.cbiail | b> | |||||
rci | |||||||
j< | fcO2O | : Kouunc Io κ | jd a character from Ihc extra pon circular buffer. | ||||
C | mov | al.dsfi(bx| :gctchar | ; IrKrcmcni extra pon circular buffer pointer. | feipch: | |||
call | incbpu | incpptr: | bi | ||||
mov | cbhcad.bx | fpcOOS | |||||
dc | |||||||
jmp | bi.pbhcjd | ||||||
sa | ippOIO: | ||||||
fcO2O: | |||||||
pop | |||||||
gcOJO: | sli | ||||||
ret | |||||||
ipcOIO:
CpcO2O: 0*030:
cmp jeDOVcall mov
ck jmp
sic
popsuret
n>c020
lncpptr pbheaiUn
al.lbx) just ti jood?
.somrthlnt In buffer
short fpcO3O
;ootbJnf in buffer bx
: Routine to store chancier into Ibc circular buffer, used by ints OBh and OCb puicb:
cti mov bxxbtailcall incbptr
cmp bxjcbhcad ;lf buffer full
je | ptc020 | ;k»c the character | cli | bt pbujl | '.ifbuffafull | mov | counl.O | ;if oo pcm tbco doo't try | |
mov | bxxblail | mov | incpplr | .lose ibc chancier | push | d> | |||
mov | ds.O|bx|jJ | Wxc the pew character | call | bi^ohcad | mov | dx.buc«dd | '.roodcni control register | ||
cmp | suppscni.O | -.echo required? | cmp | ppcO2O | ;storc Ibc new character | or | di.dx | ||
jox | ptcOIO | :cio | jc | bx.pbuil | je | scO90 | |||
plcOIO: | call | scTDch | mov | diOtbxJjJ | push | ai | |||
call | incbptr | mov | scmcb | add | dxj | :cbcrjt iransmit bold empty | |||
ptcO2O: | mov | cbtiil.bx | call | incpptr | :ifok | ||||
C | call | pbuil.bx | in | al.dx | :iimcout? | ||||
sti | mov | and | al.60h | ;wiii till so | |||||
ret | : Routine writes the character Io the serial pon. | cmp | al .6Oh | .err :rct with error | |||||
: Routine IO store chancier into ihc cxtn pcm circular bu/Tcr. | sti | scndch: | j' | SCO» | |||||
putpch: | rcl | cmp | coum.6 | ||||||
jbc | sc020 | ||||||||
jmp | short scndch_ | :Kod inc character. | |||||||
mov | di.bivcjdd | ||||||||
pop | at | ||||||||
OUl | dt.al | ||||||||
scO2O: | |||||||||
pop | dt | ||||||||
ck | |||||||||
rcl | |||||||||
ppc020: | |||||||||
scOM: | |||||||||
scO90: | |||||||||
pop
S-3
popncret
<U
; Routine wriicj Uk character io tbe cxlr» Kritl or pinllcl pon. seadpch:
push dx
mov dx,ouuadd
or dxjdx
je spOW
push ax
Mid dx.5
mov Ci1IOO
Uf no pon ihcn uy pinllcl aixxicm control rcgiaer
pop | H | •.recover next oibMe la al |
oll | ccovhxluc | icoovcn |
pop | ax | ;orifiatial |
mov | ah.0 | |
mov | el.« | ahJfl factor used |
ihl | axjcl | .split Ihc nibbles, fim in lh |
ihr | aW | ;sccood nibble (o al |
push | U | ;kccp Kcood nibble to ah" |
mov | Il Jh | |
cill | coavhx2uc | ;convcn |
pop | U | recover next nibble m al |
ull | coovhiT-iv: | -.coavcn |
Rl |
spO2O:
!check transmit bold empty
spO3O:
push c<
in tlAx
«ad tl.60h
crop a),60b
pop ex
jt ipOJO
push ex
mov cl.l
call waiubii
pop ex
loop spO2O
pop ix
sie
: Routioc teodi tnd displays ihc chancier ia ti »τι loch:
..•Jl
scodch
scmcb:
;wiii till so ipoplhccbar
mov pop oui
di.ouiudd
ai
dial
spO90:
spO99:
mov dx.ou(padd
or dx.dx
je spO99
out dxjJ eic
pop d» rci
:send ibe character.
:NC
; convcns hex char in al to ascii ready for sending to pon and locaj screen convhx2asc:
cmp al.9jbe schxO2Oand add
schxOIO:
add call rcl
al.Odfh al.-A"T)"-IO
al/TT wriicch
:capitalise
:scmi ascii con« π
:convcn to ascii :lo port and screes
: routine ycnii ax to modem and screen in ~ nibbles aud followed by a " " writeehh»_Kp:
call writcchhi ;siop al si>bp
mov aJ." **call whicchfCI
: routine Knd> ax hex Io pon and writes ixii nibbles to sciccn
push | bx | ;ity | far | aJ.olh | ;jcan code for DEL? | xor | pressed? | JlU | XXJX | -.CTRL ♦ ALT |
mov | bx.7h | ;to the screen | ax | ax | mov | nini9_boolup | CSJJl | |||
mov | ah.M | es | aJ.IOh | mov | jmp | ax.cvl417h) | ||||
tnl | I Oh | al.oOtt | ilhjj | and | niw9_booiup | ιλ .OfOCKh | ||||
pop | bi | : kbd int handling routine, kills local kbd Input | 11.83 | ax | keyboard control pon | cmp | nini9 endp | axXCOch | :hanfup aod rc-boot' | |
ret | oini9 proc | nini9_del | 6IhJj | |||||||
push | al.20h | nini9_done | ||||||||
push | : Here Io ifnorc keyboard. | 20b Jj | proc near | |||||||
in | in | CS | su_999 | |||||||
cmp | push | ax | cndp | |||||||
μ | or | |||||||||
nini9_dooe: | out | :rcset inlerrupl controlk | ||||||||
pop | ||||||||||
out | ||||||||||
mov | ||||||||||
out | : DEL key pressed | |||||||||
pop | : This is where wc put ine code to look for special interrupt | |||||||||
pop | features. | |||||||||
irci | ||||||||||
nini9_del: |
wrilcchhx: | H | '.keep al |
puth | aljJl | :scnd hich bytc in ah fir*! |
mov | cl.4 | :shifi fact« used |
mov | ah.O | |
mov | uxl | '.split Ihc nibbles, fini in ih |
NhI | alxl | :sercnd nibble to al |
SV | >K | :kccp second nibble ir. al |
puih | ;fira nii>Mc | |
r.iov | convhi2xsc | !convert and send |
cill | ||
; specifics which registers are required for which functions
; Rcpstcn arc transmiitcd in order ah,al bb,bl.ch^l,dh.dl and ooly
: if corrcspoivding bit is set for the roq sled functionilOfrejs label byte
: AABBCCDD
: HUfLIILIIL function
11 CXXXXOb :0
ICXX)I KOb :l
lOKKXlllb :2
IOI(XXXX>b :3
l(XXXi("Jb :«
HCXXXXXJb
db db db db db db db
I)IUI 11 Ib
:6
db db db db db db db db db db db db db
1110111 Ib
10IUXX)Ob 111 UlOOb UlOIIOOb lOllOOOOb 11001111b 100011 lib HOlOOOOb 10000000b 10000000b 10000000b 10000000b UlOIIIIb
il6(rcp label byte
db 10000000b
db 10000000b
db 10000000b
:b ;c
;<1
;c
;f
MO
.11
:0 ;1 ;2
ilO.OIO ilO.O
Uli mov mov mov mov mov add mov or shl imp•j.lodsb
;ih goes !mood with inc type 40b bit
SlVCTCgS
b*/}ffs?iilOfrcp:
aljh ;typcinal
ah.O :16-bii type
:get address of register transfer byte
;sei u type 10b Im ;ib being tent now
cill add
ί10.030:
; Routine to se« up register* ready to pcrfonn the iotemipt ict/ep:
raov mov racrv mov mov mov mov mov rci
ahjsi) iU$UI];r»l bh4il+2] bl4«+3|;rbl
inh
:rbh ;rch
•jao flip IiTcCUd bercsbljeiaccrapjoemovUli
il.40b ah.l i10.020
scndch csuni.il
ah.l
ilO.OIO
si
ah.O
i!0_030
al .c sum
sendch
Cl4u+j|;rcl oUsi+7|;rdl
: Roitioe Io «vc registers for communication purposesuvacp:
request his been seat to remote. Now perform local i10.040:
roov siAffsctreplO
cill selrcp
p-jshf
call dwordpl/ds:(olcUiillO)
pop di
mov |di)jhmov |di+l).al;ral,ilmov
raov
mov
mov
mov
mov
ret
:no flags changed bor
|di+2|.th
|di»4|ih |di*5|.cl;rcl.cl
[di«6|.dh
irbh.bh
.rdh.dh ;rdl.dlpopPO?
SI
ds
1200b
; Same Tor imemip< 16 bui doa'i do local in this cajc
im 10.00:
push Ii
push da
push es
ai.ai
;noi installed yet
;and uic ure of bloody DOS here loo
mov
cmp M.origini2l_seg μ int'.O.OOI
cli
mov u.offscl nc»intl6 mov es:(iml6).iA mov u.ds :cct the dau se;
mov ο:|ίηιΙ6-»2].ΐΛ .so wc set up for our ioi 16 routine
: ctwtc our ints arc able Io receive tbc reply io iotl6 requests in aUih
:stop DOS uiicrfcrinc with our im sysicro
aJ.0(Th-l8h
and
out 2 lh Jl
mov di.bucadd
inc dt
mov al. I
oui di.il imlO.OOl:
pop es
pop da
pop n
SIi
eld
nu$h St
push di
mov di.ofTsctrcgslO
:raodcm port address
-.assume port im cnaMc bii has been reset loo :sct üit inicmipt bit!!!!
mi 16.C0 | proc Tar | ;ah will go is type 16 int 0< |
sti | ||
eld | ||
push | si | |
push | di | ;clur csum |
mov | di.ofTjci rcpl6 | .gel address of register transfer byte |
call | savacjs | |
iml6_0l: | ||
mov | si-oflsctrcgilo+l | :iypc 16b bit |
mov | b>.oiTsct il6frcp | :ΛΗ goinj now |
mov | ji .ah | :scodüurypc 16 |
mov | ah.O | |
; mov | csumjh | |
add | buji | |
mov | ah.cs:|ba) | |
: mov | aJ.I6h | |
or | al.OcOh | |
ihl | ah.l | :get out tbc top bit |
jmp | short i 16.020 | :iodsend ah |
Ü6.0I0: | ||
lodsb | :no more to seod now | |
116.020: | ||
call | ||
add | c sum jS | |
16 030: | ||
shl | ah.l | |
jc | •16.010 | |
inc | M | |
cmp | in.O | |
jnc | 116.030 | |
call scndcb -just the checksum '
request has been .«ni lo remote. Now return wiih given values
; mov <UJIpt_eddiJ ;pon address Io ux
; ice IfBS has'caused pin 14 lo Ul
«dd dxj.
in tlAi
MX al.04a . ;PS still low?
ji niiufO3O;ycs. must be BC
jmp »bon ninif_coal
oini'jJO: ;al has rc| biu
or «1,02b :pin 14 UlC/ Rcq low
out <Ujl
tub dJtjt
in al.d* ;read the diu pins
: system (BS) use« byte 02b *s rwiKb. one 02h byte indicates sun of diu
crap iljulk
pi nimrtMO
caov aJ.V :»cbg 7" for 02h byie
ninflTMO:
cill puipcb
;storc in special circular butter aod u> son
; buffer contains: 1. 7birMxJediu~.cr.li
: «2. T. ISh «no barcode dan
add | C | pep | dij | :back to reg | f | ;clca/ ihc WQ line | lasich.O | '.remember stan rocsiigc iddrcs | :iJI mcisifc tested, iod NC |
in | pop | '.fetch nc χ ι in pul ch*nc\ct | |||||||
and | pop | al.0fDi-02h | ;pin 14 User Req High | lasicb.O | bytc ptr cs:|si).O :somc checks arc in es: sepncnl | ;cnd of buffc/ | |||
out | pop | dial | uaiunsgl | »msOVO | :is it c* pcc ι cd ? | ||||
nintf.coni: | irci | pclch | :yc» | ||||||
mov | ninif endp | al.20h | bx | wms090 | :«t up »pun | ||||
oui | 2WuI | bx.si | al.cs:|si| | ;and keep looting | |||||
pop | es | wms020 | ;ιο ncxi buc | ||||||
pop | ds | si.bi | *.1ooV ll nc il | ||||||
pop | di | shon wrasOlO | |||||||
pop | si | ;rc-uuULic$ intcmipt miblcd | si | ||||||
shon wmsOlO | |||||||||
du | : Wail till specified message is seen on the line. | ||||||||
ο | uiiunsg: | dx | |||||||
bi | mov | b» | |||||||
II | wiiimsf I: | ||||||||
cmp | |||||||||
j« | |||||||||
wiil_no_cr: | |||||||||
push | |||||||||
mov | |||||||||
umsOlO: | |||||||||
cmp | |||||||||
j« | |||||||||
cill | |||||||||
je | |||||||||
cmp | |||||||||
JC | |||||||||
ΠΙΟν | |||||||||
jmp | |||||||||
inc | |||||||||
jmp | |||||||||
wmsOVO: | |||||||||
: (X1P | |||||||||
|Mp ret | |||||||||
call | ouuncs | ImOOS: | mov | imOlO: | mov | C im020: | ret | cUi | ;io local scrocn cnly | Aecp trying tbe buffer | wmOOS: | SIC | wmOlO: | mov | lastch.0 | ;kcep buffa sun | :soc if "CONNECT· reed | :sce if "NO CARRIER- reed | dijoffsci asebiud | Joch baud me and cA |
mov | call | call | waiiabil | ;wait I foe | ;14 iocs wail | jmp | mov | ».80 | ||||||||||||
call | wiiubil | mov | jnc | call | listch.O | ;found msg | rudm | |||||||||||||
mov | si/jffset plussa | call | crop | si joffset ioi ims I | 'jtart mit toq again | waiunodl | ill msg into buffer | :rcstorc buffa sun | ||||||||||||
call | scodn | mov | jbe | scsdm | bixbhcad | Sl .OffSit COtUTKSS | .not found cither msg | |||||||||||||
; allow lime Io settle | mov | ciA | bi | WliUIUg | sifltlset oocarricr | |||||||||||||||
mov | call | waJubil | -,wall I tec | : This routine waits for the modem to answer tbc pbooc | cl.4 | b> | wiiunsg | !found this msg | ||||||||||||
call | jmp | COUDl1O | »aiunod: | wiiubil ;i)low; | wmOIO | bi | ;rct with CY set | |||||||||||||
mov | cbbcjAbi | wroOOS | ||||||||||||||||||
stafflet obness | !inhering | waiunodl: | bi | cbbeid.bi | ||||||||||||||||
waitmsf | cmp | shon waiunodl | ||||||||||||||||||
imO2O | jt | |||||||||||||||||||
mov | ||||||||||||||||||||
μ-usb | shon wm_020 | |||||||||||||||||||
mov | ||||||||||||||||||||
'jcsct osg start | call | |||||||||||||||||||
mov | ||||||||||||||||||||
cill | ||||||||||||||||||||
COUOU20-J3 a timeout for modem response | pop | |||||||||||||||||||
UuOIO | joe | |||||||||||||||||||
cl.254 | mov | |||||||||||||||||||
wiilabit | push | |||||||||||||||||||
sbnniniimod | mov | |||||||||||||||||||
call | ||||||||||||||||||||
pop | ||||||||||||||||||||
jnc | ||||||||||||||||||||
mov | ||||||||||||||||||||
jtrp |
wmOIS:
: Send a few new lines, wait a bit and then clear any junk characters on
: line before continuing.
mov six>ffsci clrmcsi
cill | scndm | :discird iny chiraclcs rud |
mov | cl.4 | ;ind reset CY flig |
cill | wiiubtt | |
wm_010: | ||
cill | getch | |
j« | wra_OI0 | |
eic | ||
wm_020: | ||
rct | ||
: This idulinc iniliiliscs tbe modem iniuiioJ:
mov si.offsct concompn
;uy which pein assumed for modem: This routine converts BCD in al into ascii in ix (high in al. Ιο» in ah). bcd2i.vc:
push ex '
-€
I16.040:
ctll .
icmov
tl6_O4l:
cilljeαηρ
il6_0U:
push
tcich 116.040
fetch
06.0*1
axjdoocval
boocup
tx
calljccropmovcallpop
iml6_rccpop pop pop irl
bootup:
pushxormovmovmovmovmovmovmovmovmovpopjmp
il6
al.O
tijofTselrctslo
sctrc(t
ax
di
(i
df
eodp
ds axji
ax.oMinilO
ci:in(10jx
ax.oldir.cIO»?
u:in<iO»2ju
a>.oldmil6
:ih value
:put these bade m ah
:al value
;<et icro value and these
'.set zero flat
-.«ruh (lip u »et
call | ioic.OO: | Ui | puipch | isuxe in special druil ir buJTcr | ;for Iioc sucus register |
jmp | push | short uubOZ | ;io finish fananipt | ||
inib.coai: | push | '.chock dau ready | |||
pop | push | dx | ;do character there | ||
pop | mov | bx | |||
pop | add | u | |||
push! | in | ||||
call | tesi | dword pu ds^oldinib) | |||
pop | jt | ds | |||
l/ti | mov | ||||
ία | |||||
cmp | |||||
jru | a» | ||||
bx | |||||
dx | |||||
dxjMScadd | |||||
dx.5 | |||||
al At | |||||
(J.I | |||||
uuc.OJ | |||||
dxjMscadd | |||||
al Ax | |||||
alxr | |||||
intcOl | |||||
-45-
inicOla:
mov lauchM :ihoHf · er received
intcOl:
call
nicO2:
putch
;pu character into the butter
:rcplicc vectors Ukcn so trol .i.vnjup wotks COCTOÜ)· before :lhc bootup command
es
su
: Huidk the chiricicr input interrupt intb.OO:
stipush axpush bxpush d&mov di.buetdd
dx3
al.di
al.I
intb.03
dxAucadd
imbOla:
imbOI:
addintestj«movincmpjni
mov call
:chcck um ready :no chuacicr ibctc
inttO2:
alxi inlbOI
lasten al '.show ι er received
puich
al.20h
'.put chancvu into the buffer .reset interrupt control!«
di bi
2X
ds
movoutpoppoppoppopiicl
inlb.O.V . Chock ft« character from tested pon if xuipxd niov di.insadd
oi dx.di ichcck it pon mipicd
jc inlb_conl :if not doni boihcr
add d>,5
in al.dx
IcM al.l
\i inlbconl .nochaiihcr:
raov | intc_03: | al.20h | ',reset interrupt controller | C | call | intf.fXJ: | dx.insadd | ;checx if pon usigDcd |
oi'l | 20bjü | pop | nintf proc | dx.dx | :if ootdoo't bother | |||
pop | dx | ircl | push | intc_cont | ||||
pop | bx | push | dx.5 | |||||
pop | ax | pu^h | il.dt | |||||
pop | ds | pusb | ü.\ | .no char there | ||||
ircl | push | intc.cont | ||||||
, Check for chirscw from tested port if usigncd. | push | di.inudd | .get char «nd | |||||
mov | push | al.dx | ;suxc in spociil cüxidir buiTa | |||||
or | push | puipch | -.to finish uncmipt | |||||
je | push | short intcO2 | ||||||
add | push | |||||||
in | pop | dx | ||||||
ICU | pop | bi | ||||||
j* | IX | |||||||
mov | ||||||||
in | dword ptr ds:(oldintc) .let bios do it | |||||||
call | ds | |||||||
jmp | ||||||||
inic_conc. | ||||||||
pop | fir | |||||||
pop | IK | |||||||
pop | bi | |||||||
pushl* | CX | |||||||
dx | ||||||||
si | ||||||||
di | ||||||||
ds | ||||||||
es | ||||||||
CS | ||||||||
es | ||||||||
ds | ||||||||
CS | ||||||||
di.iiividd
οίον | cx.4 |
mov | lh jl |
TOf | ti «I |
•nd | ax.OfOfh |
*dd | tx.TX)" |
pop | CX |
etc |
; This routine converts rf».» Io dec im«] «ad outputs the ueii vilue
ouidcc:
divsun:
mov | cxJ7IOh |
CAlI | divsun |
mov | ex JeIo |
cill | divsun |
mov | c>.64b |
cill | divsun |
roov | cx.10 |
cill | divsun |
nor | OjCX |
tdd | ilJOh |
«II | wriicch |
fet | |
div | Cl |
idd | ll.30h |
cill | wriiecb |
xchg | dxjx |
>or | dx.dx |
iell_sn: tsr.OIO:
mov si.offset rocn.sv :msg is in es: seg
mov | isnO:O: | rc ι | chxpw: | il.cs:(si|:retch nextchir | .end of i/o! | ι |
or | cpwOlO: | Il Jl | :ycs | |||
J« | isnO2O | :oui to modem only | ||||
cill | scndch | .point 10 ocil byte | ||||
inc | si | |||||
jmp | »hon isnOIO | |||||
!return with mull of check
: Find oui if PCC insulted. If so then send il's ID out Io seriil port.
icllpcg.
push es
mov n .OcOOOh :stin segment for ROM EXT. cuds
mov bp.offsci cirdaddn :cifds addrs kep« here, mu I
mov sixiffsct nopcg :lcad »jib offset nopcg
push si :md keep for lucr cmp
mov | tpcgO9i: | cill | di.Odh | !cheek all pouible card addn | ;rcnorc ncxi seg |
mov | je | ti ,offset pcghere | !keep looking | ||
mov | cmp | CXj)C ghiii | 'scKouraddr | ||
rep | j' | cmpsb | |||
cmp | lpegO2 | ,gel origini] oopcgmtg offset | *,tus it been found ind seal? | ||
pCgWJ. add | j* | axJOh | :ycs | ||
cmp | cmp | ax.0fO00h | !iubnilute to show peg found | '.keep sun msg offset | |
Jb | j» | tpcgOI | !keep oexi teg addr | :uy do peg and uk if io coounue | |
jmp | cmp | short lpe gO9 | |||
pegv*. pop | jru | ti | ',sunofpcgid | ||
mov | IpCgWb: | lijoffs«! pcgme* | ;si unillercd | ||
push | StC | ti | ;iwiii ioi | ||
push | jmp | ax | :ιΠ> | ||
ull | ipcgOIO: | iendm | |||
mov | aI«:|O0hl | ||||
cdi | teadch | ||||
mov | ilxs:(9lb) | ||||
call | sendcb | ||||
mov | il.cs:|92b) | ||||
ull | sendcb | :pul msg igain and wiil reply | |||
mov | il.a:193h] | ||||
ull | iendcb | !else Dot to cootinuc | |||
mov | tx.<s:[<Hb) | ||||
mov | dx.ei:(96h] | ||||
ull | ouidcc | ||||
mov | lijottia lfcrlf | si.offsct nocardsinst :k»d no cirds msg | |||
call | wrilcm | bp/)ffset cardiddrs :ci/dl fouixf.' | |||
pop | ax | ||||
jmp | shon tpcgOI | ||||
ipc guy. pop | si | ||||
pop | CS | ||||
cmp | sijoiTsei nopcg | ||||
jru | tpcgOI O | ||||
tpcgvTC. push | si | ||||
ull | writcm | ||||
pop | si | ||||
getch | |||||
ipcgO9a | |||||
il.-y" | |||||
ipcgOIO | |||||
ii.-r· | |||||
tpcgOIO | |||||
al,"n" | |||||
ipcgO9b | |||||
al."N- | |||||
ipcgO9c | |||||
shontpcg030 | |||||
: now send cird addresses fcnoid | |||||
mov | |||||
cmp | |||||
mov
lor
mov
cmpjrumovidd
es.n bx.bi bi.cs:|O|
ipcgO03 !don'i lcsi for peg thai
ds |tip].ix ;put in the scpncni iddrcu
bp.. .10 next cird >ddrcu
: do noi idd lcriph byic. we should report ill cuds found, nu.vrx there is : in >ddrcs> clnih? this could find ι non-cxisuni ci/d if the pin·; his ι : 55 uh im j srctoc bound.vy. this ein be ui.cn into xxouni »hen uuJysing :ihcicsuliv
c IpCgOU:
lpcgO2O:
ipcgO25:
ipcgO2O :no
si.offscl cirdmsg ;cuds found oug
cill | wrilcm | !send ihe msg | .stop it B=bp |
mov | si .offset cirdaddrs' !followed by addn | :=ZR | |
cmp | si.bp | ||
J' | ipcgO30 | !keep ρσ so fir | |
lod.sw | |||
push | si | !restore pu | |
cill | •*riicchhx_scp | !IO next cird tadt | |
pop | si | ||
imp | shon ipcgO23 |
tpcgO3O:
wriiochhk_»:p converts hex in lx 10 iscii chirs iod sends 10 pod 2nd scm followed by 1 " "
Takelte ff-
push ds
xor ax.ax
mov diAX
mov 'ii.40th ;para port seg:ofCset
mov ca,4 ;max4?
mov iijodta lpadds :to fin«"" b suing
tppO2O:
lodsw ;to inc si
or axAX
jz Ipp020
itosw
loop tppOlO xoeadbertlfalMfound
pop ds
push di ;ead marker
mov (ijofTsct paraptinsg assume at least I pon found
call wriicm
mov si .offset lpadds
pop bp ;«op al ti«bp
ippO)O:
cmp | al.O | crap | binhour.23 |
ret | je | vaJOIO | |
; This routine validates the lime | cmp | binminJ9 | |
ν a] lime: | j« | vaWlO | |
dop | al Jl | ||
ICt | |||
;NZifbad
Uf(OOd
; This routine reads a message (max CX Chan) into cxdi. and tenni with O. rcadm:
push di
mov rlxjcx rmOIO-.
call getch
cmp | tppWO: | rci | si.bp |
Ji | lcllserpts: | lppCMO | |
lodsw | mov | ||
call | call | wriiechhx.scp :writc ax as doc M pon aod κ | |
jmp | mov | shonipp030 | |
mov UOIO* | |||
cmp | |||
jt | :scod serial pon addn | ||
lodsw | siAfTsei coroptrasg ;scud header msg | ||
writcm | |||
si^offset spadds -.addn odd bcrc | |||
bpxomptcnd :last pon found bcrc | |||
bp.si :rcached end? | |||
tsQJO :ycs | |||
:;ci next pon |
isOlO:
call jmp
»riicchhx.scp :writc ax as doc Io port aod scm and' sbonuOIO
: This rou:<nc converts 2 axii bytes in ax (high in iJ, low io ah) to binary : in al non uro result if cnor. '
a seibin:
sub | si/xr | :oot ascii nuroeric |
cmp | al .9 | |
ja | a2bO99 | |
xc hg | ahjj | |
sub | ii:xr | :not ascii ourocric |
cmp | al.9 | |
j« | a2M)99 | |
mov | CXJX | |
mov | al.IO | |
mul | Ch | ;siiicioifoi. |
add | al .el | |
cmp | al .al | |
ret | ||
a2bO99:
; This routine validnes the dale valdiie:
cmp | b.ndi).31 | :ova 31 |
IS | ViIOIO | |
cmp | binmon.12 | ;ovcr 12 |
Jf | mIOIO | |
cmp | binmon.O | |
J' | >jIO IO | |
cmp | binycar.99 | :ovcr 99 |
)S | vjIOIO | .ZA if good |
cmp | ||
ret | ||
je | mO2O: | siosb | rmO99: | mov | rmOIO | :ifbuflcrf\ai | push | rmcOIO: | call | rmcO20: | call | rracO99: | mov | di | :if buna full |
cmp | cmp | stosb | al.bs | !ifabadkipacc | mov | jc | siosb | iiosb | dixx | ;if a hark^yr | |||||
Joe | je | pop | rm020 | cmp | cmp | pop | |||||||||
crap | loop | rcl | ex 4x | :if already al sun of Input | jnc | je | ICl | getch | .if already at stan of input | ||||||
je | do.bspce: | rmOIO | :tbco do oothing | cmp | loop | rmcOIO | :thco do nothing , | ||||||||
Inc | call | CX | je | mov | al.bs | ||||||||||
C doc | mov | di | call | CiIl | rmcOIO | ||||||||||
jmp | call | short rroOIO | inc | cx.dx | |||||||||||
raov | dec | rmcOIO | |||||||||||||
call | jmp | do_bspce | |||||||||||||
rci | al <r | Ct | :<xno back to bosL iotb and c echo locally | ||||||||||||
rniOW | di | ||||||||||||||
rmOIO | si)on rmcOIO | ||||||||||||||
al.O | scndcb | ||||||||||||||
di | al .er | ||||||||||||||
rmcO99 | |||||||||||||||
rmcOIO | |||||||||||||||
scndch | .echo the backspace | il xx | |||||||||||||
al."" | :blank out LSc previous character | wrilech | |||||||||||||
wriiceh | :io both | ||||||||||||||
al.bs | :ana rcpoiitioa over il | il.O | |||||||||||||
wriiccb | |||||||||||||||
di | |||||||||||||||
; This routine reads a message (mti CX chars) into cs:di echoing as it docs so | |||||||||||||||
readme: | |||||||||||||||
mIOIO.
i This routine writes null leno mig Io tcrcca only
ouunes: | lodsb | C | ret | ll.ll | todib | WTD099: | ret | •W | nnOOI: | lodsb | smO99: | pop | cydO2O: | mov | si | chk_bii7_l |
or | ouuxi: | OUUTt | or | WB1O99 | or | rci | out | 7OhJu | ||||||||
it | si | je | wriicch ;scnd to boa tod our screen | j« | chk_bil7_I: | nop | ||||||||||
push | scrach | call | short wmOOI | call | push | nop | «Ijl | |||||||||
ctll | si | jmp | j« | nop | smO99 | |||||||||||
pop | thonoutmcs | jmp | nop | scndch | ||||||||||||
jmp | ; This routine writes the null laminated message from (di:o) u tbc seriil | in | smO99 | |||||||||||||
• DOCi only, sendm: | test | short stdOOI | ||||||||||||||
push | jnz | »1.7 lh | ||||||||||||||
; This routine writes tbc null lcnniaMod message from (dii) to »crul pon * lfld tlv iffrvn | pop | si | ||||||||||||||
wriiem: | ret | |||||||||||||||
wroOOI: | ||||||||||||||||
U | ||||||||||||||||
il.lO | ||||||||||||||||
7Oh jd | ||||||||||||||||
»1.7 Ih | ||||||||||||||||
«l.SOh | ||||||||||||||||
cydO20 ;»iii iill CMOS ready bit low | ||||||||||||||||
U | ||||||||||||||||
: This routine fetches the croos register specified by tJ tad puts the result | ||||||||||||||||
: into *1. | ||||||||||||||||
pcicmoj: | ||||||||||||||||
ctll | ||||||||||||||||
oul | ||||||||||||||||
nop | ||||||||||||||||
nop | ||||||||||||||||
nop | ||||||||||||||||
nop | ||||||||||||||||
nop | ||||||||||||||||
nop | ||||||||||||||||
in | ||||||||||||||||
re I | ||||||||||||||||
out | 70bjü | ;cmos oum to write |
nop | ||
nop | ||
DOp | ||
nop | ||
xchg | •141 | |
out | 7lhjd | ;out the data byte |
crap | dljeh | |
ji« | pctnO9O | ;if 100 Ur(C |
crop | dl.lOb | |
Jb | pan 090 | ;or loo small tbco doa't cluafe |
uil | Tucs | ',otberwijc et up Dew value |
ραη090:
'.Calculate CMOS checksum in AX calces:
ccsOIO:
pushxor nor
pushcalladdpopincempJbmovpopret
bi.bx
getcmos
ax
al
al .2cb ccsOIO ax.bx bx
ifinibylcforcbor. ;fcicb byte value
•.point to next CMOS byte ;all summed yet :if not do next byte '.ready for return
; Store checksum given in AX into CMOS putcs:
pushichjmovcallmovxch;callmovmovcallPOP ret
dUeh
puicmos
dUfh
al jh
puicmos
al.O
dl.Och
puicmos
IX
;siorc high byte Tint !checksum CMOS addro\
:scccod byte of checksum in CMOS
:ioclev ill cm* bits
:in cmos error byte
:store the zero for rom bioi chock
: Calculate and set up checksum fixes:
push axcall calcescall pu'cspop ax
; This rouu'ne puts Ihc value in al imo the cmos rcpMcr specified by dl.
: If CMOS byic number in appropriiic ruirc thca upduc checksum.
puicmos:
: first check thai rcf 10. bit 7 is zero (no update in progress)call chk_bil7_l
iclic al.dl
; Subroutine coovcrts λ! to bc/1 and outputs to the memory byte in dJ | ah.0 | mov | d.9 |
ouusbcd: | cl.IO | mov | di.offa:! inday |
mov | Cl | cill | [»dme |
mov | cl.J | cmp | CI.9 |
div | ah .cl | je | pdÜV9 ;if nothing reid |
mov | a».cl : bed vtlue now in «J | mov | u.word pt/ indiy |
rol | putcmos | ||
rol | |||
call | : This rouu'ne rc* 3 ihc due and sets up ihc croos chip | ||
ret | jcldnc: | ||
CiOl | uc2bio | ;lf bvalid doo'l change mythuig | ;lf bvalid doo'l change tnythinf | ;if invalid doa't change anything | mov | al,09h axgUiCT 9 holds (be year | al.Wh ircgiitcMboldsihcbour |
Jne | (dO99 | call | (CtCSMM | (aera» | |||
mov | bindiy.il | «,word pu inmoa | ix.word pa lnycar | !validate everything. KU cmosO if faulty | call | ^-/Γ?.y- | boflnc |
mov | uc2bU | uc2bia | :if bvalid doo'l dung« anything | mov | word ptr UCYCK1U | word per iicbour JJt | |
CiU | (dO99 | (dO99 | mov | sivoffjct daicbf | il.02h 'register 2 holds UK mini | ||
toe | btnmotMl | buycir.il | call | wrilcm | gacmos | ||
mov | valdate | rcl | bcd2i*c | ||||
mov | (dO99 | word pu ascmin.li | |||||
CJlI | ; This routine writes out (be currettl lime | aJ.OOb. ucgisierO holds uVseca | |||||
jne | il.Mnday | jhowiimc: | gctanos | ||||
mov | dU | mov | bcd2isc | ||||
CJlI | ouutbcd | call | word ptr nocci.ix | ||||
joe | ahbinmoo | call | si äfftet (imcbf | ||||
dl.l | mov | ||||||
mov | ouusbcd | »bow x(up changed | mov | writer-. | |||
mov | •!.btnycir | call | |||||
CJlI | dl.9 | jo NZ | call | ||||
mov | ouusbcd | mov | |||||
mov | err_flag,80b | mov | |||||
cili | •1.1 | call | |||||
mov | sl.O | call | |||||
mov | mov | ||||||
call | mov | ||||||
mov | |||||||
mov | CiU | ||||||
cmp | rcl | ||||||
(dO99:
; This routine reads (be lime aod scu up (be cmos chip (ciiimc:mov CX.6
ro ov | aiJDiiset innour |
call | readme |
cmp | CX.6 |
je | gtO99 :if nothing read |
mov | ix.word ptr inbour |
call | asc2bin |
jne | giO99 :if invalid doo'l change anything |
mov | binhourjj |
mov | ju.wofd pir inmin |
call | asc2bin |
jnc | gtO99 :if invalid doo'l change anything |
mov | birtmin.al |
call | vallime |
jnc | giO99 :if invalid doo'l change anything |
mov | al.biohour |
mov | dl.4 |
call | ouusbcd |
mov | al.binmin |
mov | dlj |
call | CHiiasbcd |
mov | il.O |
mov | dl.O |
call | outasbcd |
mov | cn_flif .SOh '.show setup changed |
mov | al.l |
cmp | al.0 |
; This routine displays (be diskette iype for diskette number in al sbowdskt:
push bx »wc working registers
push JJi
iditiOO:
add | al. 1 | !diskette number in ascu |
mov | dsklnuiE,aJ | '.put into metsage |
mov | lijofTKt ascdskt | |
call | wrilcm | !display first pan of message |
mov | al.lOh | |
call | gcicmos | |
pop | bx | ',fetch parameter |
push | bx | ;indrcsavc |
cmp | bl.O | ;if Hrst diskcuc |
jnc | sdjktOl | |
rot | al.l | |
rol | al.l | |
rol | al.l | |
rol | al.l | !•16 |
aod | al.Ofh | !mask lhis diskette iype |
mov | buoUxt dsktryp | |
mov | ab.O | |
add | bxAX | |
add | bxju | |
rnov | lh .al | :t>p< in ab ready for return |
mov | si.|bx) | '.fet correct iscii type address |
call | wrilcm | |
pop | bx | ;fctcb parameter |
mov | al.bl | |
pop | bx | !restore original value |
gtO99:
: This routine writes out UV current date: rouiine to point lo aod load uhtc poinicd to by al disk num's cylsinto ax: push ax first if al needed again!
gcicyls:
showditc: | al.07h | :rrf liicj 7 holds diy of the |
inov | {etcmos | |
oil | bcd2isc | |
cili | word pt/ iscdiy.. | U |
raov | al.OSh | :rcpsicr g holds !be mouth |
mov | gcicmos | |
call | bed: isc | |
call | ||
dec | al | !(iru in ublc = lypc I |
mov | bl.lOb | loch ublc has 10b bytes |
raul | M | |
mov | si.dskbsaddr | :offsci of ublc sun in BIOS |
«id | si.ix | :to offset of this uble |
push | ds | |
mov | dsAsibixlAn'. | 2 :gci ROM segment into ds: |
mov | «.lsi) | '.get ds:(si) cvls. leave si is set |
pop | ds | '.rcuorc ds: |
ret |
mov word pu i<cunn.u
; TbU routioe displays lbe disk type fee disk Dumber in tishowdisk:
pusfc bx uave working registers
push tx !save parameter
idd il,"l" !disk Dumber in asril
;put into messagesdskO17:
pop ds
mov tiflCtxi dsktyv "Ή
sdskOOJ:
mov SiZ)(TtCi tscdisk
call wriiem !display first pin of message
mov | gctcmos | !fetch parameter | :h«d> lodilbds |
call | bx | !tndreuve | |
pop | bi | !if Cm disk | |
push | bl.O | ||
cap | sdskOIO | ||
joe | ll.l | ||
rol | tl.l | ||
rol | ll.l | ||
rol | al.I | •.mask this disk type | |
rol sdskOlO: and | al.Ofh | :nccdour ds: | |
crop | al.Ofh | ;=" ΝΟΝΈ" | |
joc | sdskOli | !encoded byic | |
mov | tl.l9h | !for first or socood drive | |
tdd | il.W | !fetch value | '.doo'i pop ds: again |
call | getcmos | ||
sdskOU: | |||
!disk lype in al | |||
crop | ll.diskmix | ||
jbc | sdskOISt | '.bdpon | |
mov | dl.l2h | !type O | |
mov | al.O | :pui in cmos | |
call | piricmos | :fetch parameler | |
pop | ai | ||
pop | bx | ||
push | bi | '.restore original value | |
push | ax | :gd again | |
jmp | short sdsKJOJ | ||
sdskOlSi: | :prime is " NONE" | ||
mov | li.offset diO_sp2 | ||
or | al.al | .ifiypc=O | |
j' | sdskO2O | :16-bii number | |
mov | ah.0 | .I)-DC num | |
mov | di.offscidil | iascii type num | |
call | uiodcc | ||
call | gcicyli | ||
push | ds | ||
mov | d\xi%kbitain2 | :svorc dec xla bcre | |
mov | diAffscldilcy! | :in es:di | |
call | axiodcc | ||
XOf | ax .ax | al.|!u+2| :gct head info | |
mov | di .offset dl I hds | ||
mov | axiodcc | ||
call | UJI | ||
xor | ill si. M) | ||
mov | di.offsetdilsccis | ||
mov | axiodcc | ||
call | ax.|si»J| | ||
mOY | di.offsct dllprcc | ||
mov | ax.-1 | ||
cmp | sdsVOIo | ||
jnz | ds | ||
pop | ! .offset dtO_spl | ||
mov | ct.diOsize | ||
mov | movsb | ||
rep | shonsdsVOn | ||
jmp | |||
i sdskOI6: | |||
c; .jncoi | I | 7 | -,max Dumber of cylinders | - - | I fetch ptraiDctcr |
7 | snu Dumber of beads | " I " | |||
; Table layout is as follows: | 7 | -.Not used. | -306" | :ixstorc onginjJ v&luc | |
;byteO dw | 7 | !sun write prccomp cylinder | - - | ||
;byte2 db | 7 | !Notiucd | |||
;byte3 dw | 7 | »nisccUaocous control Hu (doo'l bobber) | - - | ||
!bytcS dw | 7.7.7 | !not used | |||
;bytc7 db | 7 | Janding iooe (Parking cylinder) | |||
.bytet db | 7 | •jcctorsAnck | -128- | ||
;byte9 db | 7 | Tcscrvcd for future | |||
:byiel2 dw | db | ||||
;byteU db | db | ||||
!byicIS db | db | ||||
djklypnux | db | ||||
dll | db | ||||
dilcyl | db | ||||
" 17" | |||||
dilbds | db | ||||
db | |||||
dtlsccudb | O | ||||
dllprcc | wriiem | ||||
db f | bx | ||||
sdskO2O: | al.U | ||||
call | bx | ||||
pop | |||||
mov | |||||
pop | |||||
rcl |
: This routine displays the display type aod returns in AX 0 if EG A : 2 if 40 column colour, 4 if 80 column colour οι 6 if mooochrome. sbowdisp:
push | bx | ^avc worting rcjiucn |
mov | sijiffsei ascdisp | |
call | writem | '.display first part of message |
mov | al.Mb | |
call | gcicmos | |
ror | al.I | |
TOf | al.I | |
rot | il.l | |
and | al.Ooo | ;maslc ibis display type (limes 2) |
mov | bxjoffxt dispryp | |
mov | ah.0 | |
add | bxju | |
mov | sijbx] | :gct correct ucii type Address |
call | urriicm | |
pop | bx | '.restore original value |
ret |
; This routine dirpliys whcibcr or Dot lbe nutM coprocessor U ibowmp; »
push | bi | •javc worting regisiers | :gcf corral ascii type addrcs |
mov | si.offset ucmp | ||
call | wriiem | '.display first part of message | ircsiorc original value |
mov | al. Ub | ||
call | gcicmos | ||
and | 11.02h | :mask this type (times 2) | |
mov | bx.offxi rapoiBot | ||
mov | ah.0 | ||
add | bi4J. | ||
mov | sijbx] | ||
call | writers | ||
pop | bx | ||
rei | |||
call
axiodcc: change lbe diskette lypc for number specified in al. gcldskt-
push bx
puih push mov mov cill fdjktOl:
callje cropjecmpjncmovcdicropJ»e rot rot rol rol
gdskiO2:
puih push
|dskiO3:
Inc
UKl cmp Jb mov gdikrO3i:
mov moviddaddpopmovandorpopcmp jnc tol
ι ol rol rol
CX
dx
bx.ax
rijofbet iporcr
WThCOB
gctch
ldifctOI
tSa
|d*ki99
al.-"
gdsktOI
al.lOb
tetcmos
UX)
at.i al. I al.l al.l
b» ax
al
;if buffer full ,Itivc unchanged '.try again If not spice
afoot diskette I
al.dikimui
gdsktO3a
al.O
bx,oiTsct dsktlyp lh.0
DX.U bt-ΛΧ ex
ahxh
cl.OIWi
aUl
bx
bl.O
gdskiW
al.l
jmA out OUKr diskette type
;if a valid type :dse NONE
gdskiO4:
al.l al.l il.l
mov dl.lOh
call puicmos ; κι up diskette biu in byic M
mov cUI
mov al. Uh call andcmpj« or ICU j« lest je or
gdiktOJ:
gdski99:
mov cill mov cmp
pop pop pop rc ι
gclcmos
Il ..Vh
cl.O
gdsklOS
al.l
cl.Ofh
fdsklOS
cl.OfDh
gdikiOJ
al.-iOh
dl.Mh puicmos cn. Π Jj.8Oh dl.O
di
CX
bi
:SCI Up DCW dill;CIlC lypcs
'.if no disiciics
:io show something insulted
:chcck if iwo diskettes
:ifodyone
".check if two dükcucs
;if opl vooc
:clse sei 2 drives bit
;rr«:l b)tc U :show setup chingcd :^e^ noo tcro flag
: chingc inc hxrd disk ij-pc fur numba specified in al. ccidisk:
push | mov | bx | remember parameter | • | :try ajaio if Da spKc | • |
push | call | CX | VH vcwiosn | |||
push | jmp | dx | ||||
mov | gdskOIOi: | bx.ax | ||||
mov | jiu | UAttta dikchj | φτίακ the summer label | |||
call | mov | wTÜem | ||||
|dskOO9: | jmp | Uf buffer full or empty | :if DCKdisl I | |||
mov gdakOIO: | gdik999x: | ocjldik,gOb | ;leavc unchaogcd | |||
call | call | gdch | Ui it a ajcii digit | |||
jc cmp | raov | jdskOlO al m | ||||
je | cmp | gdslc999x | ||||
crap | jru | al.TT | ||||
Jb | or | gdikOIO. | :ochoback | |||
cmp | mov | al."»" | ;cucvcniobcx | |||
j« | gdsk99«: | gdskOlOa | *ocp this digit | |||
et)! | lea | iendch | Iget wail's tbac | |||
sub | ji | al.TT | ΐΐΐΰ mwmj pi used bit | |||
push | cmp | ax | ||||
mov | jrap | al^wjudsk | unul old by 10 | |||
aod | gdskOII: | s!.7fh | ;rcstorcDcw | |||
mov | cmp | cl.lO | ;addtoold | |||
mul | jru | Cl | φ«Η back to total | |||
pop | mov | CX | ;ooa<iisuni disk? | |||
add | jrap | alxl | :ye*£mcel and sun again | |||
mov | gdskOI2: | Dexidsk.il | :gctmon | |||
C cmp | cmp | al. 15 | ||||
Jt cmp | joe | no.disi aj.dislunax | ;doo'l wail for more if ilicidy ova | |||
jbc | mov | gdskOIO | Unix disks = " INVALID DlS | |||
no_disk: | gdikOU: | '.now clrupmcss | ||||
raov | iijotftex invdsk | |||||
call | wrilcm | |||||
cmp | short gdskOO9 | |||||
jnc | ||||||
tol | gdskOII | |||||
rol | oexidjk.l | :ocbo iNc er | ||||
iol | short gdikO13 | .can lose al. know it is α bor | ||||
rol | ||||||
sendch | ||||||
aljiexidsk | ||||||
al.l | ;mark as number | |||||
gdsk99t | ||||||
al.4Ob | ||||||
KAldskjL1 | :no lon;er set must hive new KD num | |||||
al.80b | ;iod cm | |||||
gdikOU | ||||||
al al | ||||||
gdik999 | ||||||
al."-" | ||||||
£dskO12 | ||||||
ocxidsk.-l | ||||||
sbongdskOU | ||||||
al."" | ||||||
g<hkOO9 | ||||||
ücntdik.l | ||||||
al.l2h | ||||||
gcicmos | ||||||
bl.O | ||||||
gdikO2O | ||||||
aJ.I | ||||||
al.l | ||||||
Jl. I | ||||||
al.l | ||||||
8-43
300 ÄS"V-
push | C | mov | bx | Uf DM encoded type | ax | :add or sub io nexi uble |
push | mov | IU | gctcyls | !aod check again | ||
tod | lest | al.Ofli | bxjix | |||
cmp | μ | I]1OIh | !fetch extended byte | ax | ||
joe | mov | gdikOJO | bx.1024 | |||
mov | jap | tl,19h | gdskO36a | |||
add | gdskO31: | il.bl | al.neiidsk | !extended byte address | ||
CtU | add | (demos | shon gdskO3S | !store the value | ||
gdikOJO: | cmp | CX | ||||
cmp | joe | Dcxuhk.1 | ahxh | :if oot cxieoded type | ||
it | tdd | (dskO31 | :so cm iac if problems | bx | ||
cmp | gdskOSS: | Dcxldsk.-l | !false I? | dl.l9h | ||
cmp | gdskO31 | dl.bl | ||||
jbe | tljKxtdsk | ;repacedK 1 | puicmos | |||
cmp | oexldsk.l | al.OfOh | ||||
JI | il.40fa | gdskO37 | ||||
mov | gdikO35 | n.Ofh | ||||
jmp | «J.I | |||||
jdikO35i: | short idskO35 | ci.oroh | ||||
mov | !miss type 15. cither +1 or -I | aUI | ||||
gdskO36: | tljKxtdsk | bl.0 | ||||
or | al.15 | •.over our mix? | gdskCMO | |||
j* | |dskO35 | ;lf loo big go back to too | al.l | :kti up new disk lypcs | ||
iljicxldsk | '.increasing disk η um | ll.i | :si)o» seiup changed | |||
:yes. back io tcro | al.l | :sci non iero flag | ||||
al.diskm« | !tnikc e diskmix | al.l | ||||
(dskO36 | ||||||
ncxidsk.l | dl.l2h | |||||
fdskO3Sa | :iad reset lop HD zero | puicmos | ||||
al.diskmix | crr.naf.80h | |||||
short gdskO36 | dl.n | |||||
;no need to lest if icro | ||||||
al.O | : before pulling ihis number inio croos. ensure an acceptable uble exists | |||||
; in BIOS tables | ||||||
al j! | push | |||||
gdskO36a | call | |||||
mov | ||||||
pop | ||||||
cmp | ||||||
jbc | ||||||
add | ||||||
jmp | ||||||
pop | ||||||
mov | ||||||
pop | ||||||
mov | ||||||
add | ||||||
call | ||||||
tesi | ||||||
j« | ||||||
mov | ||||||
gdskO37: | ||||||
and | ||||||
or | ||||||
cmp | ||||||
jne | ||||||
rol | ||||||
rol | ||||||
rol | ||||||
rol | ||||||
gdsxO4O: | ||||||
mov | ||||||
call | ||||||
mov | ||||||
cmp | ||||||
pop | αχ | push | gdisp99: | pop | dx | !if buffo full | push | gmpOl: | call | dx | !ifbufrcrfull |
pop | CX | mov | ret | tijoflset sporcr | mov | jc | li.offsci sporcr | ||||
pop | br. | CiU | wrium | ; leave uochsofcd | ull | cmp | wriicm | ;lc jvc unchanged | |||
rcl | CiII | gelch | je | ||||||||
; chanjc the display type | jc | gdispOl | ;lry igaio if oot space | cmp | gach | !try again if rxx spice | |||||
gcldisp: | cmp | 1I.CT | jnc | grnpOI | |||||||
je | gdispS9 | mov | al ir | ||||||||
cmp | il."" | ull | grnp99 | '.nip (be bit | |||||||
J1* | gdispOl | ;misfc out oripail display type bits | ior | al." | |||||||
mov | al,Mh | !increment · | mov | pnpOl | :sct up new diskette types | ||||||
call | gctcmos | !cyclically | ull | al.Mb | !show setup changed | ||||||
mov | ahjJ | ;mnl· back io other bits | mov | gcicraos | !SCtDOQ ICSO | ||||||
and | ab.Ocfh | cmp | alj | ||||||||
add | tl.lOb | :sct up oew diskette types | pop | dl.M1 | |||||||
iod | al JOb | :sbow temp dunged | rcl | puicmos | |||||||
or | ti jb | !seiooaiero | crr_f)>g.80h | ||||||||
mov | dl.Mh | dl.O | |||||||||
cill | putcmos | dx | |||||||||
mov | err flax40b | ||||||||||
cmp | dl.O | : change lbe maths processor insiallod bit | |||||||||
geunp: | |||||||||||
dx | |||||||||||
: nxjiine to ask see if we arc required
insnul
ai.OOl:
ii ΟΙΟ:
ull mov
push ior
movmljnclooppoploopmovjrap
pop
OUUSCS CX.4
Cl C1X»
ah. I 16b ai_020 ai.OIO
CI
ai.OOI al."»" shonai_0?0
;do pcm iosulled in bascaddr yet ;apfxox 5 sec wait for kbd rcspoosc
:cm'i use COUNT. niniS OCX instilled yet
'.wait for Vcy inpui
mov (!,offset |nsms2 vdiags running · walling pbooe call In
call outmes ;eotlopon
mov lanch.0
call waiUBod ,-wait for aodcm to answer, check* mif after er
call hangup 3» carrier «ag reed
ioc CtT-(IU XOUOi errors
cmp Or-(UgJ max allowed?
jb Su-OOO ;try again
mov stoff** pon_reg_err ;afior 2 tries, give up jmp short Su-OCK-23-
su_000b:
; rest of aug is In ascbaud.
cmp word per ascbaudVTXT
je sv006 -Jungup aod uy do diags possiUc
mov lijofTset ascbaud
mov diAfftctbaud.ralcs
mov al J :if 300 baud
cmp byte pe [ύ)α ;ooly XONNECT?
jbe ocw.baud Of ODh. OAh or 0Oh SU.002:
crap byie ptr (sij." "
suOO6:
su_006: tu.OOS: SU.007:
cmp word ρσ |si|.bi :ihis will not find 600 baud!!!
jnz su_O0J
: set up the nc» baud rue if one given
mov vnxdctc.0000001 Ib il-diu. l-stop. no par.
mov d&.bascadd ;tn ibis pon
call setbiud ;with al hivinr. the corresponding rate. 2»300. etc
je sutestimp :if error in pon setup
su.OOi:
jnz Inc jmp | su 003 si short SU.002 | ;(o 600 baud, eic anax baud rates supported |
inc cmp | al aljnatbaud SU.007 | |
call mov | Stno.di. | |
call | OUUDCl | |
jmp | shon su.OOJ | |
mov inc inc | di di | |
β.η:
su_OOSa:
call | iell_sn | :civc the scnal number | :send ierial pon tSiii |
mov | suppscm.l | .suppress scm echo | :and no~* the mcmorv size bit |
call | chXpw | :gci S/N and p« and check them | |
mov | suppscm.O | ||
jnc | wail_sn | ;ifOK | |
mov | !!.offset unaul | ||
call | wriicm | :send io both screens | |
jmp | su_999 | :brcax communKaiion aod reboot PC | |
call | gctch | ||
jc | waiisn | >iii for (oahead | |
call | icllpci | :send card addrs and peg s/d or no peg | |
jnc | su.OOSi | ||
jmp | SU.999 | lbrcil comrnunk<uon and reboot PC | |
call | icllpjr>u:scnd parallel pon addrs | ||
call | icllserpu | ||
call | fixmcm |
su (U9:
SU-OlO:
call | wriieca | ; to local acroen too |
call | g«ck | |
je | Su-OtO | -,wait for ropccjc |
call | scodch | -.echo back io host |
cmp | •J.-1- | |
μ | Su-OISx | jCOOiOC lS IO ΠΙΟ tix |
cmp μ cmp | ai.-r | |
μ | ||
cmp | iDcm_rcadx | |
μ | al."4" | |
cmp | run.rcm | |
j" | al.T" | |
jmp | SU.009 | ^c-xrnknugiXnot |
SU..999 |
SU-OlJx:
jmp SU-OlJ
jmp OKiS-TUd POn-ICSt-CXi:
jmp pon_tu>
φοα teas choice
;!!!!!! racacioihiscodcUrcmc^cooirolteloacd. ruojicm:
mov lastch.0
mov itolTsci uismsl
call wrkcm ;lell both wailing for syochroa signal
mov bxibbead X(Xp buffer start rr_001:
mov | rr.OOO: | mov | sijoffset rinmcss :wait forOaahJ)aah mil rmg | inilO»dd+2xi |
push | im | bx | inil6add»?.XJ .place pointers there Γιτπ | |
call | mov | waimuf | u.offsctncwinllO | |
pop | iot | bi | cv.linll0l.ix ;bcforc vectoring to these rouitncs | |
j« | mov | rr_0OO | cj:|uiilO+21.di .bx ;dj: | |
mov | mov | cbbcadbi | ||
jmp | mov | shonrr.OOI | ||
mov | ||||
mov | u.03h | |||
mov | 10b :iniüa]isc screen | |||
mov | suppscrn.l suppress jcra ecbo for this | |||
mov | tXAX | |||
mov | CiJJ. | |||
cli | u.cs:|imlO| | |||
oldinllO^i | ||||
a>.cs:|inil0»2) | ||||
<Μιγλ\0*7λχ | ||||
ai.cs:[intl6) | ||||
oldirul6.ii | ||||
ix.cj:(inll&»2) | ||||
oldiml6-t2ji | ||||
: set up pointers for interrupt 10 (which installs IKT I6h later) | ||||
mov | ||||
mov | ||||
mov | ||||
mov | ||||
mov |
jmp inisi_9
SO.015:
1U.020:
call
call [ctduc
joe su.OIS
call showtime
call fciuroc
jnc SU.020
;finilh by replacing inu S aod 9 ind boot
:If anvüiinj pven show new due
mov si.offsct run_chotcc; Sei up diskctu ι su 110;
iI.O
Tabclie
call | χι 170* | taov | ihowdikt | mov | ro.220: | mov | al.0 |
ull | call | fcldskl | caU | call | ibowdisk | ||
call | lu.IIO | caU | call | gculilk | |||
jo« | al.l | joe | joe | w_2IO | |||
ihowdikt | |||||||
fcldskl | al.l | ||||||
«u_l20 | sliowdisk | ||||||
; ScI up hard disk parameters | gcldisk | ||||||
KI.2I0: | IU.22O |
;tf changed lbco redisplay
•M chanted ϋκα redisplay
;acccpts ·♦ . · . , na or er ;if changed thai redisplay
;if changed lbco rcdirpUy
: Sd up diiplay adap<cr parameters *u_300:
mov ti βcall showdispcall gcidisp
joe »u_300 ;if changed lbco redisplay
; Sd up maths processor bit su_400:
IDOV ll.O
call showmp
call gcimp
jnc rtu_400
:if changed tbca redisplay
: Check all correct and restart tests, continue operation or reboot SU.900:
mov aljcrr.flag
and al.0rrh-4Ob ;rcmovc msg flag
men err_nag.al ;aod replace il
mov li.oiTset cbeckmsg
call uTJicm
950:
SU.952:
su 951:
call J«
movlestjnzcitipjccropj«ICSIJ(Ucrnpj« crnpj«
cmpJiormovcmpjcucalljmp
gcich SU.95O
call jmp
: here if er reedju.UOSja:
men· and
bl.*Oh
SU.V52
al.-B"
SU.999»
al.-b"
SU.999X
bl.SOb
su
al.-C"
SU.990
al."c"
SU.990
su.OOSax
bl.40h
err_(l«t.bl
al.bs
SU.95I
do_bspce
short su_950
senden short su
:do nocd lo echo üiis cocomaod byte back lo boa ;if buffer full
;stitl tending mi{
;seiup changed?
;i( so. cooiioue not »Mowed
*,ιο coQiinue wbea testing
:bl ha.< cn_n>g
:inyltunf else, sei msg dig
dl.bl dl.0fni.40h
:io ipiorc anyihin; el»
:bl hai en_(laj: :coO of msg?
mov | JU.990: | err flafjdl | hangup | •,caned lbe 40b If set | - | Utart from ldlpcg | intsi_9: | ax ju | call | initiop: | puih | hangup | •jxnm this back lo wa' | :segO |
VM | M.40h | dx.bascadd | ;wcre «e rccing msg7 | exit proc | CMX | db | XOf | parallel pon ini | ||||||
it | *u_0Q8_cooi | dx | ^o | sti | mov | |||||||||
call | sende»! | alX) | wcbolhecr | ret | ax.oldinib | mov | ||||||||
mov | al Jf | 4xAl | Waned | exit cndp | es:inibju | ;aod rcturo int 8b | ||||||||
call | writech | d»J | ;toboih | ix.oldiatbt2 | ||||||||||
«u_950x: | dxjj | a:'unb*2jLX | ||||||||||||
jmp | tu_?50 | aljlb | ;intcrrupl enable rc peer | ax.oldintc | ||||||||||
tu_008_cooi: | al.l lh | cs:inicju | ||||||||||||
jmp | tu.OOSa | 21bjil | ;oolaiemf>u | ax.oldinu:«2 | ||||||||||
iu_999x; | a:intc+2Ax | |||||||||||||
jmp | su.'W9 | ax.40b | :ckardtrAu | ax.otdini9 | ||||||||||
CJJU | cs:(ini9|ju | |||||||||||||
; clear down various value* | ax.cs:(Ub) | βΛΛΐ<ϋαΓ?+2 | ' · jmp FFFF.-O | |||||||||||
call | ax/amaze | UdCtIRQiDU | cs:|ini9>2).u | |||||||||||
mov | cs:[13b)jLX | ax.oldint8 | ||||||||||||
iac | :bk« dau xgmest | es:|intS]ju | ||||||||||||
mov | ax.oldinl8+2 | Oeah.0.O.OflKOfIb | ||||||||||||
out | cs:linti+2].ax | |||||||||||||
add | 'take ooly occcssarY am( | ds | ||||||||||||
out | far | ax αχ | ||||||||||||
in | ClSJU | |||||||||||||
or | ; reset Interrupt vectors to original values | si.inlf | ||||||||||||
out | χ or | |||||||||||||
: return memory | mov | *. This is binary rcprcxnuijoo cH | ||||||||||||
mov | cli | : For testing just exit | ||||||||||||
mov | mov | SU.999: | ||||||||||||
mov | mov | |||||||||||||
add | mo-/ | |||||||||||||
e mov | mov | |||||||||||||
do ins l | mov | |||||||||||||
mov | ||||||||||||||
mov | ||||||||||||||
mov | ||||||||||||||
mov | ||||||||||||||
mov | ||||||||||||||
mov | ||||||||||||||
mov | ||||||||||||||
mov | ||||||||||||||
mov | ||||||||||||||
mov | ||||||||||||||
mov |
umber
call writem
call | ptOlO: | call | fetch | ;wailfortclunccr | : Pardlcl pon chosen. Which ooc ? | ptO2O: | gctpadd | pt 100: | mov | pll 10: | call | fctsadd | gcipidd | fctsidd | ;ask for puallel pon address | 1 | ;ui for pirllcl pon ddress |
je | jc | tu030 | -,coovcrt | call | ouipaddjA | cill | jc | u.baxadd | ouipiddjx | oulsaddax | |||||||
nib | cmp | al.-l" | mov | iruüap | cmp | pon.icst | shon pc200 | ax .insadd | '.initialise parallel ilcrrupt handler | '.continue by asking for tcrmimor | |||||||
cmp | jx | tl.4 | ;if invalid | call | ' xtpon.icst | J' | insadd ΛΧ | p(200 | -.new address? · | ||||||||
j« | or | ptOJO | jmp | or | gcismode | pon_tcsi | gcumode | ||||||||||
DOV | cmp | ah.0 | : serial pon chosen, which one ? | C cmp | al.baud | : «nil pon chosen, which one ? | il.biud | ||||||||||
DOV | JI | bxjoflscs tpaddt | ;fcich BIOS port addrctt | call | JC | dx.insadd | call | '.ask for address | ;isk for iddess | ||||||||
mov | cmp | ax4s:(t») | cmp | cmp | sclbiud | mov | |||||||||||
or | jne | IUI | ;wait for valid port | Jt | JCC | pon.icsi | cmp | ;cannot lest our modem pon! | :oui=in? | ||||||||
j« | jpaOSO | mov | shonptOIO | j« | ;ilrud> κι then | ||||||||||||
ret | '.Read from (icrial or parallel) | call | CiJI | -.get baud, partly and stop bits | :gcl baud, pint)- ind slop bits | ||||||||||||
poruest: DOV | tijotUa rfiype | mov | SI.OffSCl »ll)-pC ; | mov | |||||||||||||
call | wrii an | mov | wrilem | .setup pon | |||||||||||||
cill | ;with CY is set in this routine | ||||||||||||||||
(etch | jc | gctch | :if problem with pon | ||||||||||||||
ptOIO | jmp | ptl IO | '.wail for α | ||||||||||||||
il jet | ;and now write lo? | a) at | |||||||||||||||
ptlOO | ;convcn to lower cajc | pt90 | .Wriic to ?? (scriil or parallel) | ||||||||||||||
al JOb | al.20h | ||||||||||||||||
al."s" | |||||||||||||||||
ptO2O | ;if parallel . | pi 120 | |||||||||||||||
al.-p" | ;wail for valid reply | al.'p" | |||||||||||||||
P(OIO | pil 10 | ||||||||||||||||
; Pi/allcl pon chosen. Which one | :end if no out pon | ||||||||||||||||
cill | iconvcn io lower case | ||||||||||||||||
mov | |||||||||||||||||
jtnp | |||||||||||||||||
port_iciu: | :if parallel | ||||||||||||||||
jmp | :wiii for valid reply |
DOV | dx^outsadd | ;whh CY as «et in this routine | ; Now Mk for Knnmatng character | DOV | pCW: | call | pt52O: | call | xUoCCsct whaocna | ;waii for chiracter | ;portchar1 |
call | Ktbaud | it problem with port | ptXXfc | call | jc | joc | writem | Utore lumiiuor | Via chancicx Input from lhe port | ||
ic | pon_(uu | call | call | getch | ujoftxl (omcxs my transparent | ;but I/so send k> comi | |||||
jc | call | pt210 | wrUcm | wnmtad input? | |||||||
DOV | jc | lermch^al | ;if oo( look κ input port | ||||||||
DOV | crop | gttpch | :U it lhe lerminator? | ||||||||
call | jc | ρϋΙΟ | :ycs.»e«irnniihod | ||||||||
call | Kodch | ;elsc (O Uansareat | |||||||||
joe | (etch | ; ocjtl char | |||||||||
pt500 | |||||||||||
aljcrmch | ; empty lhe buffer | ||||||||||
pon.iesu | |||||||||||
teodpch | |||||||||||
ρϋΟΟ | |||||||||||
gctcb | |||||||||||
ptS20 | |||||||||||
mov siwoffsct port_rcg_crr
call wriuan \icnA mcu
jmp pon.lcxt ^CtUp pon test igiin
; All done. | xor | IXAX | ;cnd letting or choose igiin? | si | ax.raan_scg | mem_lcn.O | -Just Is aiM>lc |
ρι90: | mov | ;rouiinc to send ds^i bex lo poet and screen, ex chars coding wiih er.U* | CX | wriicchhx | sbOO9 | -.cxici para? | |
mov | ouuaddju | scnd.block: | al.":" | CiJ-OCm-OfTs | :ycs | ||
mov | inprfd^x | push | ! .offset crU" | writech | cx.OOOfb | uium asked for | |
mrv | outpaddjLX | push | wrilem | axjncni_o(Ts | CXXX | :dol6 | |
CiU | sbuiinp | : Tu-st do ι ct.1/ | CX | wriicchhx_sep | sbOO9 | ;-offs Dura | |
jmp | SU.900 | roov | si | :άο «χ aecd any offs spaces? | bx | :back ooio suet' | |
cill | si | crap | bx.16 | ||||
pop | CX | J* | |||||
pop | ;noM put the address | mov | bx | ||||
push | mov | and | XXJkX | ||||
push | cill | or | |||||
mov | j' | ||||||
call | pop | ||||||
mov | mov | ||||||
call | sub | ||||||
push | |||||||
»or | |||||||
3002?+
SbOOl:
tb002:
sb003:
ΛΟ09:
IbOIO:
sbOIOch:
JbO 12a:
JbOI 2:
st/» 3:
sbOIOb:
SbOIOi
SbOII:
sbOI5:
push | CX | ;each hex has 2 ascJ di| |
mov | cxj | |
mov | «*.-- | |
call | written | |
loop | sb002 | |
inc | ah | |
pop | CI | |
cmp | ah.6 | |
jnz | sbOO3 | :if 7 iptco dooc |
mov | al."-" | |
call | wiiiecb | |
loop | SbOOl | ;di(iu IO do |
pop | ex | :badc oolo stack |
push | ca | ;kccp oum |
push | CX | |
mov | cl.4 | |
ι or | ax.ax | |
lodib | :Γιτη char In ab | |
shl | axxl | •.«coodinal |
shr | alxl | •Situ in al. second in ah |
ich« | anal | :k(xpah |
push | ax | :convcn and send |
call | coovbjJasc | :jet back secood |
pop | ax | :inioal |
mov | aloh | :eoovcn and scod |
call | convhx2asc | |
mov | al." | |
pop | CX | |
cmp | ex.» | |
jiu | sbOIOch •I." | :»end a " " or "·" |
call | wriiccb | |
loop | sbOIO | :any length given? |
cmp | mcm_lcn.O | .yes |
iiu | sbOI2» | : no. end |
pop | CX | |
pop | si | |
jmp | sbO45 | |
mov | exjnero_ofis | |
and | ci.OOOfh | |
or | CXXX | |
j' | ston | :space offs |
mov | al."" | |
call | »τι uxh | |
loop | sbOI2 | |
jmp | shonsbOII | |
mov | CX.I6 | :pushcdc> |
pop | bx | |
push | bx | |
sub | ci.bx | |
J' | SbOII | |
mov | al."" | |
push | CX | |
mov | CX.3 | |
«.all | »nicch | |
loop | sbO I Oi | |
rxip | Cl | |
llHjp | sbOIOb | |
mov | al."" | |
call | »nicch | |
call | wriuch | |
pop ti
tub Dcmjcnwcx ;ihcK fewer to Knd dow add nxm_ofXcx ubcac done ; dow repeal ι-debug-(Ype char output
lolsb cmp al."
-26-
sbO3Ch
SbCMO:
tb030 il.-.-
al.7fh Sb(MO al."."
call wriicch loop SbOM
tbO43:
; coovtns a3cU char In al to l>ex. tttunu CY U dm hex char
asclobex: | axOlO: | cmp | ucO20: | and | ajc_ret: | rcl | m/bs: | cmp | e | shl | ah.0 | ;16-bUdi{i( | :oo CY |
DOV | Jb | sub | Ji | add | al.-O" | ||||||||
cmp | cmp | call | mov | asc_rel ;*ithCYael | |||||||||
Jb | jbe | push | pop | al."9" | |||||||||
cmp | nc | mov | rcl | ascOlO | ;somc «her chir | ||||||||
j» | jmp | call | al.TT | ||||||||||
sub | pop | sbonasc_re« | |||||||||||
jmp | call | ||||||||||||
push | al.-A" | ||||||||||||
mov | asc rcl | ||||||||||||
mov | al.-r | :caps | |||||||||||
shr | ascO2O | ;» "A" - 10. etc | |||||||||||
mov | |||||||||||||
pop | shonase_ra | ||||||||||||
inc | |||||||||||||
jinp | al.Odfh | ||||||||||||
storc_sendch: | al."A"-10 | ||||||||||||
push | ;scnd the bspacc alrcad | ||||||||||||
xcb( | |||||||||||||
call | |||||||||||||
mov | ci.di | ;blxnk | |||||||||||
mov | miOIO | ||||||||||||
mov | 9COOCh | .aodbt xtiin | |||||||||||
ax | |||||||||||||
al."" | :ici *οΜ »fa/ | ||||||||||||
wriloch | |||||||||||||
ax | :bacx I nibble | ||||||||||||
wriicch | :pul il back into store | ||||||||||||
CX | |||||||||||||
bx.(di) | |||||||||||||
cl.4 | |||||||||||||
bxjcl | |||||||||||||
|di).bx | |||||||||||||
CX | |||||||||||||
CX | :wriic ihe tscii to poo | ||||||||||||
short miOIO | :fa bex back | ||||||||||||
:gct coucl so fir | |||||||||||||
CX | |||||||||||||
ax.bx | |||||||||||||
scodch | :shl4 | ||||||||||||
xx.bx | ;add ία uSc ucxt dipt | ||||||||||||
bik.ldj) | :mov back Io cun siort | ||||||||||||
cl.4 | |||||||||||||
bx.cl | |||||||||||||
bx^x | |||||||||||||
|di|.bx | |||||||||||||
CX | |||||||||||||
--fg
(CUC(OfTs: | mov | mrOIO: | caU | mrO2O: | mov | mrOJO: | mov | mrOJS: | call | po.rct: | ret | tarjcx: | SlC | CX.4 | . ;wail for char | ;sbow and reset max chars | -.ascii char back to port | -.send uuuuctioas oa (his facility | : show ihc byte found at scgioffs. | t | pop | wbOIO: | call | sijnem_offs | :gcl the byte into rocm.block | call | wbO2O: | lac | wbO3O: | dec | jmp | mrtW): | cmp | mrO4l: | push | tlorocodch iahi |cB) aod add new value | Ata oan.block byte Io | off» | mrO70: | mov | ra/080: | call | mr_ret: | mov | mcm_lea |
mrOOJ: | mov | jc | jrap | jmp | rc ι | dxjcx | :aod reset max chin | mov | pop | jc | mov | jmp | jmp | writcbvtcxnsgx: | )t | mov | ex. I abow I bylc | a | or | jmp | call | ||||||||||||||||||||||||
cmp | di,offset memjcn | raov | push | tmp | dijoffscl mcm.block | mov | mao_read: | jmp | C | mov | si^i IH iiscai_block | di | )t | mov | cxjDcm_kn | ||||||||||||||||||||||||||||||
it | wriicbytcmsf: | (etch | ;ibonT | push | mov | j' | di | call | mov | cmp | mov | scod Mock j^/"*Pf si | CX | cmp | call | ClXl | |||||||||||||||||||||||||||||
cmp | mov | mrOIO | sendcb | push | call | cmp | ds | -.source now | push | mov | jbc | mov | di | wbOIO | jbc | pop | mr_ret | ||||||||||||||||||||||||||||
j* | call | al.bJ | tteg to offs? | short mrOOS | mov | pop | j' | dsjncm.scg | push | mov | mov | rep | U | mov | ex.16 | ||||||||||||||||||||||||||||||
crap | wrilebyic: | mrbj | movsb | mov | cmp | mov | mov | pop | dijscm_ofls | mcm_ofu Uf"*" | rruOSO | ||||||||||||||||||||||||||||||||||
it | al xx | ;ofu to lea? | mov | j« | mov | mov | mov | ajuaajict | short wri leerte | ».16 | |||||||||||||||||||||||||||||||||||
cmp | mtjac | mov | :offset mcm.block | movjb | mov | ||||||||||||||||||||||||||||||||||||||||
jz | al,":" | itodcoayl | SLOffsel mcni_wril£_cipl | call | ds | • :rcady for neu- value | mcm_ie(UDem_ | rep | rocm_offj Uf"-" | seod_block | |||||||||||||||||||||||||||||||||||
cmp | mrO2O | whtcm | si | ;nu 1 nibbles | pop | mov | short wrilcbyte ;get Dew segxifTi value | short rarO70 | |||||||||||||||||||||||||||||||||||||
it | •1."" | :any left? | si | pop | call | ||||||||||||||||||||||||||||||||||||||||
or | mrO3O | -,no. wail for separator char | ci.l | pop | mov | mcm_K(.O ;cka< labels aod buffer | si.oflsct crlf | ||||||||||||||||||||||||||||||||||||||
)t | «Ixr. | ikecp original | scnd.block | loop | call | mcm_offs,0 | writcm | ||||||||||||||||||||||||||||||||||||||
mov call | gso.ret | ;lf not hex char. Ignore | di | joe | mea_leo,0 | si.offset mcm_coai_msg | |||||||||||||||||||||||||||||||||||||||
CXXX | bvte ptr (di).O | ;«nd | mr_reu: | di/iffset mem_block | wriicm | ||||||||||||||||||||||||||||||||||||||||
mrOIO | cxj | cx.SOb | mem_lco :rcstort lcn rcqd | ||||||||||||||||||||||||||||||||||||||||||
push | bxAX | al.0 | |||||||||||||||||||||||||||||||||||||||||||
call | mrOIO | fetch | slosb | ||||||||||||||||||||||||||||||||||||||||||
pop | Λ good char reed | v»bOlO | si/)ffsct mcm_cxpl | ||||||||||||||||||||||||||||||||||||||||||
dec | CX | :aod wait for next acceptable char | alxr | :Lccp original | writem | ||||||||||||||||||||||||||||||||||||||||
jmp | storc_Kodch | mr_rcu | -.keeps Ci | di offset mcm_set | |||||||||||||||||||||||||||||||||||||||||
CX | di ,offset mcm_offs | al."-" | gcuegoffs | ||||||||||||||||||||||||||||||||||||||||||
CX | short mrO35 | wbOJO | m/040 Aocjc | ||||||||||||||||||||||||||||||||||||||||||
short mrOIO | al."+" | ||||||||||||||||||||||||||||||||||||||||||||
wbO2O | short mr_ret :esc exit | ||||||||||||||||||||||||||||||||||||||||||||
bx.ax | |||||||||||||||||||||||||||||||||||||||||||||
asciohci | wriicbyicau( | ||||||||||||||||||||||||||||||||||||||||||||
rocni_kn.O '.have wc got a koglh? | |||||||||||||||||||||||||||||||||||||||||||||
wriiebylcmsgx :oo. assume memory write | |||||||||||||||||||||||||||||||||||||||||||||
rocroJcn.EOta ;cbcckifovcr max | |||||||||||||||||||||||||||||||||||||||||||||
mr041 .ok for our buffer | |||||||||||||||||||||||||||||||||||||||||||||
mcm_lcn.SOb ;put in our max | |||||||||||||||||||||||||||||||||||||||||||||
ds | |||||||||||||||||||||||||||||||||||||||||||||
sijncm_offs | |||||||||||||||||||||||||||||||||||||||||||||
cxjscm.lca | |||||||||||||||||||||||||||||||||||||||||||||
dsjncm.scg | |||||||||||||||||||||||||||||||||||||||||||||
dijoffsct a>cni_bloci | |||||||||||||||||||||||||||||||||||||||||||||
movsb ;ifcr rcqd block to our buffer | |||||||||||||||||||||||||||||||||||||||||||||
ds | |||||||||||||||||||||||||||||||||||||||||||||
si .offset mcm.block | |||||||||||||||||||||||||||||||||||||||||||||
; dow to xmit thcK as sensible axii digits, spaced ; | |||||||||||||||||||||||||||||||||||||||||||||
push |
Jb push
wbOIO
Cl
:if ixx bei char, ίρκχχ
mr_ret I:
call
cocb
cbl6 db
cll6 db
dhl6 db
dll6 db
baseadddw count
oldinlb
oldintc
oMinlf
oldialiOdwOldiotl6dwoMiaUldw
inua db ctum db
rinmcu db cbhcad dw cbuil dw lastch db ax baud db Qocardsimt cardmsi cardaddrt
paraptmsi Ipadds dw db
comptrasg spadds dw ; dw
dw dw dw dw dw dw dw dw
comptcnd baud_nics badbiuddb no.diigs concompn modem pn insms2 db db
inuns3 run.choice
plusscs db initmsl db hinpipmsg hinpipcon oljncis db conmcssdb nocinicr ca_(lic dh
porl_rcg_cn clrmcss db nopcg tib db pcfherc db
0 0 0 0
db
dw
dw
dw
dw
OJ)
0.0
0.0
0 0
OJO
OJO
OJO
OJO
;for simple, accurate delay counts Jtbd Ua vectors
:for oripnal loterrupt vectors
:for original interrupt vectors ;for new ux21 vector»
;spcUi«d interrupt number yhoclcwmi byte
;iaiüalUaiioo patient
cbulT
cbuil
? ;u> (bow complete mij rood by iuOBh or OCb
WdUp(O)
db CTjf.-NO CARDS rNSTALLED-J)
db aJf.-CARDS INSTALLED :"jO
dw I dup (T) Λ cards muT
db
db crjr.TARALLEL PORTS :"X> !assume at least I!
4dup(?)
db Oji.-SERIAL PORTS :"J) :asaimc at lcait I!
03fSh
02rSh
03fSh
03elh
02elh
028Ob
02SIh
029Oh
O298h
dw spadds .cards output cods berc unless modified
dw "6 "."21"."42"."W"."69" ;rcverted difiu for cmp
db crJfJf.-DlAGNOSTlCS IMPOSSIBLE-.CRJ-FJ)
db crJf.-Conocci MODEM to COM"
db ~0~jnM,0 :instruci usa which port used
er .If." * Remote Diagnostics - wailing for incoming phooc call!! *"
er.If.lf.-Copyrighl MS Daiakoruuli AB. Swcdcn.".crjf
db " ATCLAB AB-Swcdco-jaJfJi
db XTRL+ALT+DEL aboru prograra"jcrjfjij)
db CT.IfJf."Waiiin( Host Synchron Signal"*rjf.0
db crJf."Cboose:~
db CT.If."l Setup check"
db cr.lf."2 Port check"
db crjf,~3 Memory read/write"
db CTjf.~4 Remote software control"
db CTJi."5 Exit and booT
db cr.lf.O
db CTJfJf1-UNAUTHORISEDACCESS-XtJi1O
"AT<fcFLIAD2ACISO=lEO".cr.O
db crJf."BREAKLNG CONNECTIOVjO
db "ATHOJiO=CEl-XrJO :hanj upjcl juio-uuwcr oif.ccbo on
-OK".0
"CONNECT"/)
di> 1TJC CARRIER-J)
db ? ;io show u-riting msg at end of serup
db CTJf1 -TORT ERROR"xr.lf J)
cr.lfjf.0
crJf.PC-GUARD NOT INSTALLED"
"PCO proiccted"
pctmes db Ifcrlf db crlf db daiebf db ascday db ascmoa db
ascyear db db
limebf db ascbour db
today inmon inycar
ascsecs db
db labour db
imwm db
db db db db db
bindijr db binmoa db binycar db binbour db binmin db
mmculdb mm Ιύΐ db
mmitit db
ascdski db dsktnumdb dsktipipdb dskupO db dsiupOiil db dskupl db
db
diiup3 db dskup4 db dlill)-p dw dskunaxcqu
dskbsadd/
ucdiip db disptpO db displpl db dijptp2 db disp<p3 db diiplyp dw
ascmp db ropO db mpl db mporooidw
dskchnpnsg
sporcr db chcclmsg
db
dtO_sp2 db dtO.spl db dtO db dlOsizc U]U
db
invdsi db disUnuequ nctidsk db
TCG Um"
crjr.O
cr.-Daceis·
"mm-—
;"-" Ii ajrood inunui nd now ;should be chmtod to 'ccyy-aua-dd-
cr.Time it ·"
"mm:-"tx. Enter new time (hh-Tmn)orcAl/corrcci"irJf
**0QJD·**
crJf.XMOS Base Memory « "jO"I2145K-.0
"I2MJK-.0
a.'TXsketie " "I = ".0
:sou7cc of " NONE" for procomp mif -NONE"U)u i · dskupsp 0 --36OK".O
•720K-.0-|.4M".OdsktipOxlskiip I .dsk(ipZ4ikup3.dsklip4
5 ;ooJy 5 dskl types recognised
dw 0c40lb.0f000b ;to hold dsk ublc baje addr in ROM
cr."Display « ".0"EGA"/)"Colour 40-.0"Colour 8O".O"Mono".0disDtpO.di sp<p 1 ,düptp2/ljiptp3
cr.--Maths proccuor is "J)
"not" ;uuulIcd~.O
"instilled".OmpO.mpl
db er .If.1 type "+"."-", HD num. or space to change.
cA to acccpt'xr.l/X)
a.lf." i>-pc space Io change or cA to acccpt"xr Ji.O db a.lf."typc CR 10 rerun ICJU. 1C1IO ccoiinuc"
:pui bick for testing, or just know it's active! " ot V to rc-booOcTJfjO
"NONE"S-diO_spl
" IN-VALlD DISK-jCiJfJ)
Ο :actual UbJa plus NONE
? :to hold, add w sub 1 from cun dsk ntun in rxidisk:
2-20
iscdiik db | er." | type cyls. beads sectors prccomp" | db | libel | db | t db | byte | :pon address for assigned scriil output |
db | crjr.TXA- | db - | db | - ι - | !ditto for pirtllel | |||
disknuddb | "I«"J | db | me«i_wrUe_expl db | dw | "306- | :diuo for Kriil input | ||
) | db | mcm_eool_ou | - 4" | '.and ptiilld input | ||||
; typical bard duk report appears as: | db | roea(_ief | db | » " | :selccicd trrminior for tnosparcni mode | |||
dsktypnuf | " 17- | tncajilit | db | O iDolocilccboiiM) | ||||
dtl | db | cncna^lcn | ||||||
dilcyl | db | moB.block | 0 | - IJT | ||||
dilhds | 0 | 0 | ||||||
',memory read dan | :pon tests diu | 0 | ||||||
dilKctsdb | raca«_ejtpS | i outsadd dw | 0 | crJf.-Entcr (HEX) Kf »die« (leofümad). ex 0040ΛΧ» 30<CR> | ||||
- | oulpadddw | 0 | aMß | |||||
dilprcc | inudd dw | db | ait.'Eata new values, "♦","-" or CR to coä'jaüß | |||||
inpadd dw | pbuff | "Type space Io conJiW. σ Io cut"jcr JfjO | ||||||
icnncb db | pbuff | dw 1 | ||||||
suppscro | 1 | |||||||
pbbcid dw | dw 7 | |||||||
pbuil dw | eOhdupO) | |||||||
O | ||||||||
: Mcssigcs used for trinspacot mode port testing
«rtiypc db a.lf.lf."Write Io puilkl Ip) er jeritl (s) ? ".0
rfiype db c/.lf.lf.-ReJd from pirilcl (p) or jcriij (i) ? ".0
whiunun | db | cr.ll. "Enicr ροπ number. .0 | cr.lf.-l IKT | .into rc; 3 |
baudrucdb | ci.lf."Choo»: b»ud rue" | cr.lf."2 150" | ||
db | cr.ir."3 300" | J oldiniS :cqu 4 | ||
db | a.U."4 600" | cun_daic>4 ;cqu S hob yevjntb. diy and bour | ||
db | a Jf." 5 1200" | S - oldiniS | ||
db | a.lf."6 ΖΜΧΓ | |||
db | cr.li.-7 4800- | |||
db | aJi."l 960(T | |||
db | ajf."9 19200" | |||
db | aaf." tO 38400" | |||
db | aJf.-M 5«ΧΧΓ | |||
db | σ.Ιί.0 | |||
db | aOf.Tuiry: (1) NONE (2) EVEN (3) ODD ".0 | |||
db | 0.If1 -WoTd lengüi <7.8) :"j0 | |||
pirily.mig | db | a.lf.-Siopbiu(IA Γ.0 | ||
word_nug | db | a.lf.T)pc required EuI key ".0 | ||
stop_msg | db | cr.liJf.'Truupirenl Mode! Exil key iboru~.crjf.0 | ||
wtuuenn | db | |||
pomcsj db | 7 | |||
hiud db | dw | |||
wordctc db | cqu | |||
oldiniS | cqu | |||
CUTT^dllC | cqu | |||
couni_b>"ic | ||||
diti_scg |
dcnd libel b)tc rimmcm cqu S-dsun
cunau cqu projsui + rimmcm ;do not include buffer ircis
dl> (I0h#200h-cun5u.c)dup(?)
300 Ζεϊ
djusizeapi $-<faurt romcxl oqa pnjpiic + djuiic ;ioul bjrtct ukco
cbuiT Ubcl bjrtc cbeod «je cbufT+lU
; Spocül drdar bufTa ibt tnrajxaK mode Input (pjnltcl ot κήιΐ) pbuir Ubei byte pbead cqu
VMKikcqu (pbeod/1000>*l -.pibiuu enough memory forourdiu nriuiic oju 3 ;givc ii lhb value for prog uie
dxu codi cod
Claims (5)
1. Einen Computer in Personalcomputerausführt, nf, dor einen ROM BIOS Chip-Speicher, eine Zentraleinheit, einen RAM-Speicher, ein serielles Eingabe/Ausgabetor, eine Tastatur und einen Monitor einschließt, dadurch gekennzeichnet, daß ein Festspeicher darin eine Fernsteuerung und ein Diagnostikprogramm enthält, die steuerbar in einer ROM BlOS-Urladefolge einschließbar sind, und zwar für die Einrichtung der Wechselkommunikation mittels des besagten Eingabe/ Ausgabetors mit einem Fernbasisrechner, damit der besagte Fernbasisrechner eine Prüf- und/oder Einrichtungsfolge für das Rechnersystem durchführen kann.
2. Einen Computer nach Patentanspruch 1, bei dem das besagte Fernsteuerungs- und Diagnostikprogramm ein Programm einschließt, um auf seinem Monitor zu zeigen, welche Prozeduren im Rechnersystem vom Fernbasisrechner durchgeführt werden.
3. Einen Computer nach Patentanspruch 1, bei dem das besagte Fernsteuerungs- und Diagnostikprogramm ein Quittungsbetriebsverfahren einschließt, das das Ausgeben eines vorbestimmten Identitätskode, der für den besagten Rechner eindeutig ist, aus dem besagten Rechner einschließt.
4. Einen Computer nach Patentanspruch 3, bei dem das besagte Fernsteuerungs- und Diagnostikprogramm ein Zugriffssteuerprogramm einschließt, das ein Quittungsbetriebsverfahren umfaßt, bei dem das Hehlen eines vorgegebenen Kennwortes die besagte Wechselverbindung durch Unterbrechen der besagten Kommunikation und durch ein „kaltes" erneutes Urladen des besagten Rechners sperren wird.
5. Einen Nur-Lesespeicher für die Anordnung in einem Personalcomputer, dadurch gekennzeichnet, daß er ein Fernsteuerungs- und Diagnostikprogramm einschließt, das eine Startadresse aufweist, die durch eine Adressennummer definiert wird, die in der Gruppe enthalten ist, die folgendes einschließt:
a) Adresse COOOh und die Adressen, die durch Addieren von 800h dazu bis zu einer Grenze von EOOOO erhalten werden,
b) EOOOOh und
c) FOOOO und Adressen, die durch Addieren von 800h dazu bis zu F7800h erhalten werden, und wobei ein erstes Programm für die Signalisierung, wenn es in einem ersten Personalcomputer angeordnet ist, zu einem Monitor einer Option, die innerhalb eines vorgegebenen Zeitintervalls mittels der Tastatur des besagten Computers aufgerufen wird, ein zweites Programm für die Einrichtung einer Kommunikation mit einem zweiten Rechner und für die Inaktivierung der besagten Tastatur des ersten Personalcomputers mit Ausnahme einer vorgegebenen „BREAK" (Unterbrechung)-Tasteneingabe, ein drittes Programm für das Abfragen eines vorgegebenen Kennwortes vom besagten zweiten Rechner und für die Unterbrechung der besagten Kommunikation bei seiner Abwesenheit und ein viertes Programm eingeschlossen sind, das den besagten zweiten Rechner befähigt, ale Basisrechner über dem besagten ersten Rechner solbst während und nach dem Urladen des Betriebssystems des Systems zu funktionieren.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP90850138 | 1990-04-11 |
Publications (1)
Publication Number | Publication Date |
---|---|
DD300254A5 true DD300254A5 (de) | 1992-05-27 |
Family
ID=5620105
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DD34316790A DD300254A5 (de) | 1990-04-11 | 1990-07-31 | Ein system fuer die fernbetaetigte fehlersuche, korrektur und universelle arbeit eines personalcomputers |
Country Status (1)
Country | Link |
---|---|
DD (1) | DD300254A5 (de) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2318658A (en) * | 1996-10-28 | 1998-04-29 | Intel Corp | Remote diagnostics after boot error |
-
1990
- 1990-07-31 DD DD34316790A patent/DD300254A5/de unknown
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2318658A (en) * | 1996-10-28 | 1998-04-29 | Intel Corp | Remote diagnostics after boot error |
US5884073A (en) * | 1996-10-28 | 1999-03-16 | Intel Corporation | System and method for providing technical support of an electronic system through a web bios |
GB2318658B (en) * | 1996-10-28 | 2001-04-18 | Intel Corp | A system and method for providing technical support of an electronic system |
DE19747396C2 (de) * | 1996-10-28 | 2003-10-23 | Intel Corp | Verfahren und Anordnung zur Schaffung einer Ferndiagnose für ein elektronisches System über ein Netz |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7739693B2 (en) | Generic application program interface for native drivers | |
DE69923243T2 (de) | Dynamische und konsistente Namensverwaltung von Speicher der zu einer Kommunikationsstelle verbunden ist | |
CN101588086B (zh) | 多插件嵌入式故障信息系统子站对录波文件的处理方法 | |
CH662025A5 (de) | Digitale vermittlungsanlage. | |
DE10047266A1 (de) | Dynamische Mac-Zuweisung und -Konfiguration | |
DE2500006A1 (de) | Wirtsdatenverarbeitungssystem und verfahren zur emulation von eingabe/ausgabe- befehlen | |
DE102005008081A1 (de) | Steuerungssystem zum Steuern einer Vielzahl von Zielrechnern | |
CN106790682A (zh) | 一种远程会诊系统 | |
CN109902073A (zh) | 日志处理方法、装置、计算机设备和计算机可读存储介质 | |
DE102012214944A1 (de) | Mobilvorrichtung und Verfahren zum Laufenlassen von zwei Plattformsystemen oder Anwendungen darauf | |
CN108510287A (zh) | 客户回访的判断方法、电子装置及计算机可读存储介质 | |
DE69823655T2 (de) | Verfahren und gerät zur synchronisation von softwarediensten zwischen softwaresystemen | |
CN107291387B (zh) | 一种双控磁盘阵列的磁盘接入方法 | |
JP2007535206A (ja) | ホーム・ロケーション・レジスタにデータ冗長性を持たせる方法 | |
DE2350229A1 (de) | Datenverarbeitungsanlage, insbesondere als steuereinrichtung fuer fernsprechvermittlungsanlagen | |
DD300254A5 (de) | Ein system fuer die fernbetaetigte fehlersuche, korrektur und universelle arbeit eines personalcomputers | |
EP0303870B1 (de) | Modular strukturiertes digitales Kommunikationssystem mit betriebstechnischen und sicherheitstechnischen Komponenten | |
CN107357698A (zh) | 一种获取bmc串口信息的方法及装置 | |
EP0358597A2 (de) | Fernsprechvermittlungseinrichtung | |
DE2325997A1 (de) | Nachrichtenvermittlungssystem | |
Cisco | System Overview | |
CN101541021B (zh) | 一种容量预警报表自动生成方法 | |
DE10206009A1 (de) | Dienstleistungs-Server | |
DE3924974A1 (de) | Fernsprechvermittlungseinrichtung | |
CN112463748A (zh) | 一种存储系统文件锁标识方法、系统、终端及存储介质 |