Mikrosha. Kapitel Zwei ROM und BSVV


Im vorherigen Kapitel habe ich den Eisenteil meines Microsha PC SD-Kartencontrollers beschrieben. Und dieses Kapitel erschien programmphilosophisch. Wen kümmert es - willkommen!


ROM schreiben

Wie ich im vorherigen Teil geschrieben habe, habe ich einen alten ROM-Programmierer für LPT. Ich wollte nicht mit der LPT-Emulation kommunizieren, außerdem musste ich verstehen, wie der Programmierer funktioniert, wie er gesteuert wird, alle seine Befehle und Zeitverzögerungen.

Dann rief ich meinen Bruder an, der Zivildienstleister ist und arbeitet. Ich bat ihn, mich bei der Arbeit anzurufen und dort meinen ersten IBM ThinkPad 760ed-Laptop abzuholen. Und am nächsten Tag hatte ich die Buche.


Ich war jedoch noch nicht bereit zu blinken. Ich musste alle Adressen von 6xxx in Fxxx ändern, wobei xxx 12 Bit der Firmware-Adresse ist. Dies war aufgrund der Architektur des KP580VM80A-Prozessors erforderlich, da sein Befehlssystem keine Codeübertragung von einem Speicherbereich in einen anderen beinhaltet, was einige Schwierigkeiten verursacht.
Aus diesem Grund habe ich viel Zeit gebraucht, um die Firmware allgemein zu bearbeiten, da sich aufgrund der Codeoptimierung auf niedriger Ebene zwischen den Unterprogrammen „Löcher“ bildeten. Die Größe dieser nicht verwendeten Abschnitte erreichte manchmal 10 Bytes, und ich konnte mir eine solche Verschwendung nicht leisten. Ich musste die Gelenke verschieben und sicherstellen, dass der Code bei Anrufen und Übergängen nicht verschoben wurde.

Letztendlich habe ich eine minimal funktionsfähige Firmware zusammengestellt. Dies ist immer noch eine grobe Option, die normalerweise den festgelegten Code in zusätzlichen RAM und Übertragungssteuerung laden kann. Die Feuchtigkeit der Firmware liegt in der Tatsache, dass ich bisher keine gute Optimierung und ein bequemes Gerät für die Funktionalität gefunden habe, die ich "Brücken" nenne. Diese Funktionalität wird für die vollständige Nutzung des gesamten zusätzlichen Arbeitsspeichers benötigt. Aber ich war verwirrt bei der Arbeit mit dem Stack, habe viele Pannen festgestellt und beschlossen, das Problem für später zu belassen, aber für den Anfang sollte es ausreichen, nur 4 KB neuen RAM zu verwenden. Danach kann diese Funktionalität hinzugefügt werden, wenn klar wird, welche Anforderungen an das Betriebssystem erforderlich sind. Und neben dem Platz unter den "Brücken" hatte ich ungefähr 600 Bytes freien Speicherplatz.

Ich habe den gesamten freien Speicherplatz mit 0xFF-Bytes gefüllt. Dadurch kann ich in Zukunft neue Blöcke im ROM „fertigstellen“, ohne den gesamten Speicher mit ultravioletter Strahlung zu löschen. Tatsache ist, dass diese "EPROMs" so angeordnet sind, dass die Firmware darin besteht, 1 in einem Bit in 0 zu ändern. Somit kann 0xFF in einen beliebigen Code umgewandelt werden. Außerdem habe ich nach ein paar Schlüsselübergängen "JMP" 3 Codes 0xFF hinterlassen. Auf diese Weise können Sie die JMP-Codes selbst in 0x00 (NOP) umwandeln, und der Übergang wird abgebrochen. Fügen Sie jedoch einen weiteren Übergang hinzu, der aus diesen drei 0xFF besteht.

Als nächstes brauchte ich 12 Volt Strom. Zuerst wollte ich mich mit dem Mikrosh-Netzteil verbinden, aber dann sah ich eine Wendung in der Mitte des Stromkabels des ThinkPad. Ich erinnere mich, wie diese Wendung auftrat, diese Buche wurde von einem Auto aus angetrieben, um alle Arten von „Januar“ und „Bosh“ abzustimmen, als die ersten Einspritzmeißel auftauchten.
Nachdem ich die Drehung verdreht hatte, wickelte ich dort ein Kabel mit einem DJK-11b-Stecker ein und die rote LED am Programmierer leuchtete fröhlich auf.

Nachdem ich den Laptop eingeschaltet hatte, sah ich Folgendes:

Gleichzeitig war einmal pro Sekunde „dzzzzz-CLAT !!!“ zu hören.
Ja! Dies bedeutete, dass die Festplatte im Laptop nicht funktionierte. Ich war 10-15 Minuten lang traurig und dann wurde mir klar, dass nicht alles verloren ging und dass dieses ThinkPad eine CD-ROM hat. Beim Stöbern im Müll habe ich 3 DVD-Rohlinge gefunden, aber ich brauche eine CD!

Dann rief ich meinen Bruder erneut an und bat ihn, 3 CD-R-Discs in Auchan zu kaufen. Um die Erstellung einer CD-ROM mit MS-DOS 6.22 hier zu beschreiben, halte ich es für sinnlos. Ich füge nur hinzu, dass ich zusätzlich zu MS-DOS das Nähprogramm "PGM02101" (es ist gerade unter dos) und die Firmware selbst in Form der Datei "ROM_V1.BIN" platziert habe "Und" Norton Commander "Version 5.0.

Also nimm zwei. Nachdem ich die Buche eingeschaltet habe, lege ich den Rohling in die CD-ROM und drücke "F1". Eine gelbe LED leuchtet auf der CD-ROM auf und ich höre "kva-kva-kva-kva-pyk!", Dann eine Pause und wieder "kva-kva-kva-kva-pyk!" Dies geschieht ungefähr zwanzig Mal, und dann erscheint eine mysteriöse Inschrift:


Höchstwahrscheinlich bedeutet dies, dass der „Sidyuk“ auch gebogen ist.

Es gab keinen anderen Ausweg, als das CD-ROM-Laufwerk zu zerlegen. Es stellte sich heraus, dass es viel Staub war und mir immer noch nicht klar war, woher Schwarzpulver stammte. Es war mir nicht klar, zumal seit dem letzten Gebrauch dieser Buche mindestens fünf Jahre vergangen waren und sie die ganze Zeit auf einem Regal aus Zellophan lag. Dann entschied ich, dass es Tangris war, und säuberte es mutig von der Auffahrt. Außerdem schmierte er die Führungsköpfe leicht mit Lithol und rieb die Linse mit einem Baumwollohrstab mit Alkohol ein.

Es half, das Laufwerk blinzelte, krächzte und ich sah eine DOS-Eingabeaufforderung auf dem Bildschirm. HURRA!
"Norton" wurde nicht gestartet. Es ist ein Fehler beim Lesen (oder Schreiben) von Laufwerk A: "aufgetreten. Ich dachte, er würde etwas für seine eigenen Zwecke aufnehmen, konnte aber nicht auf die CD-ROM schreiben. Nun, zur Hölle mit ihm, jetzt kann ich nicht einmal verstehen, warum ich ihn brauchte.
Im Allgemeinen bietet "DIR" und dann "pgm02101.exe" und jetzt auf dem Bildschirm das lang erwartete Programm PGM02 die Auswahl eines LPT-Ports an. Wählen Sie LPT 1 (0x378).

Die K573RF5-Firmware benötigt eine zusätzliche + 25V-Stromversorgung. Ich hatte das Glück, ein Gerät mit einer solchen Spannung zu finden. Ich habe einen HP Deskjet 2050a-Drucker, daher wird er von einem 30-V-Netzteil gespeist. Zum Glück hatte ich ein Multimeter und es war leicht, die Polarität am Stecker herauszufinden.

Nach dem Firmware-Prozess stellte sich heraus, dass die Firmware nicht funktioniert. Das heißt, der Prozess endet, aber im ROM-Chip wird 0xFF noch an allen Adressen gelesen. Die Methode zum Stechen mit einem Multimeter in der Buchse zeigte, dass am PGM-Pin keine Programmierspannung anliegt. Es stellte sich heraus, dass der VT17-Transistor (KT815G) im Programmiergerät „geflogen“ war und ich ihn ändern musste.

Es wurde getan! Und richtig lesen!

Unerwartetes Fußversagen

Als der ROM-Chip in den Controller kam, wollte ich seine Lesbarkeit überprüfen. Ich wollte den Systemmonitor verwenden und den Bereich 0xF000-0xF7FF mit der Direktive "D" anzeigen. Ich habe "DF0" gedrückt ... Als ich "0" gedrückt habe, ist nichts passiert, die Taste hat nicht funktioniert.
Dann tippte ich "DEFFF, F7FF" und nachdem ich "VK" gedrückt hatte, sah ich auf dem Bildschirm, was ich wollte. Um den Download von der SD-Karte zu starten, musste jedoch "GF000" eingegeben und "VK" gedrückt werden.

Zuerst dachte ich, dass die Angelegenheit in den Kontakten war, aber wie sich herausstellte, funktionierten einige Schlüssel nicht. Dies waren die Tasten "8", "Leerzeichen", "Yu", "X", "P", "b" und der Aufwärtspfeil.
Als ich das Diagramm öffnete, sah ich, dass dies die erste vertikale Schlüsselspalte ist. Der PB0-Pin des D39-Chips (KR580BB55) war für diese Säule verantwortlich. Übrigens sind in der Schaltung Dioden zum Entkoppeln der Säulen angegeben, tatsächlich sind jedoch 300-Ohm-Widerstände installiert.


Was ist das? Der Hack des Herstellers?
Ersetzen Sie diese Widerstände bei der Reparatur durch Dioden. Aber wie teste ich den Controller?

Neue Hoffnung

Ich musste das ThinkPad und den Programmierer erneut mit Netzteilen bereitstellen. An den Adressen 0xF7CE - 0xF7D0 habe ich die Codes 0xC3, 0x00, 0xF0 "beendet"; was bedeutet, JMP F000.

Jetzt ist das Starten nicht nur mit dem Befehl „GF000“ möglich, sondern auch mit dem Befehl „GF7CE“, bei dem nicht funktionierende Schlüssel nicht beteiligt sind. Nach dem Start hat alles geklappt und anstelle des Betriebssystems wurde ein Programm geladen, das „MIKROSHA OS“ auf den Bildschirm brachte.

Ich kann jetzt keine Reparaturen durchführen, aber der KR580VV55-Mikrochip enthält zwei Teile, und der zweite wird praktisch nicht verwendet. Es gibt eine Idee, sie auszutauschen und dann die fehlerhafte zu ersetzen. Deshalb rief ich zum dritten Mal meinen Bruder an und bat mich, eine Entlötpumpe, Flussmittel "LTI-120", Lot und ... eine weitere Mikrosha mitzubringen.

Ja, ich habe Mikrosh nicht alleine und der, den er mitgebracht hat, ist fast ein Museumsbeispiel "in Öl". Die Sache ist, dass mein Vater, als er mir Mikrosha kaufte, gebeten wurde, einen anderen zu kaufen, und er kaufte ihn. Aber etwas ging schief und der Mann weigerte sich aus irgendeinem Grund, es zu nehmen.
Also lag sie 30 Jahre.


Übrigens gibt es bei diesem zweiten Mikrosha auch Widerstände anstelle von Dioden, und da beide Autos aus derselben Charge stammen, ist dies vermutlich in der gesamten Charge der Fall.



Dabei müssen die Widerstände sorgfältig gegen Dioden ausgetauscht werden.
In der Zwischenzeit werde ich es verwenden, um dieses Projekt abzuschließen. Ja, es gibt auch die dritte Mikrosha, aber ich werde ein anderes Mal über sie sprechen. Ich kann nur sagen, dass es "in jenen Tagen" von einem meiner Klassenkameraden stark entstellt wurde und ich es langsam wiederherstelle, aber es wird nicht authentisch sein, sondern im Gegenteil zu Superfähigkeiten modifiziert und bereits Mikrocontroller und CPLD verwenden. Dies wird ein anderes Projekt sein.

Auflistungen und Codes


Der Code
:20000000CDD0F0FE00CA1AF021D5F4CD18F8C39DF821E9F4CD18F8C39DF821FAEF977723F4
:20002000772377237711F5EF123EE01B12CD2FF4FE00C208F03A00E0FEEBCA69F03AFFE1DB
:20004000FEAAC211F001C6E111FDEF0A12031B0A12031B0A12031B0A12CD2FF4FE00C2080E
:20006000F03A00E0FEEBC211F03AFFE1FEAAC211F001CEF411BBE1CDDBF7FE00C211F00174
:20008000FAEF1A0213031A0213031A0213031A02CD2FF4FE00C208F006063AF4EF3C3C324A
:2000A000F4EFCDB9F0C5CD2FF4C1FE00C208F005C29AF0C300E0FFFFFF21FDEF7E3C77FE8C
:2000C00000C2CBF02B7DFEF9C2BCF0C9000000001E20CD87F5FE01CAE1F01DC2D2F03EE0ED
:2000E000C9CDC8F51E60CD00F5FE00CAF5F01DC2E6F03EE1C91E20CD50F5FE00CA06F11DF7
:20010000C2F7F03EE2C97A32FEEF97C9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF68
:20012000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF
:20014000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF
:20016000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F
:20018000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F
:2001A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F
:2001C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F
:2001E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F
:20020000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE
:20022000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE
:20024000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE
:20026000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E
:20028000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E
:2002A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E
:2002C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E
:2002E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E
:20030000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD
:20032000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD
:20034000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD
:20036000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D
:20038000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D
:2003A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D
:2003C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D
:2003E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D
:20040000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC
:20042000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3AFEEFE640FE40C259F43E51CD00F63AFAAB
:20044000EFCD00F63AFBEFCD00F63AFCEFCD00F63AFDEFCD00F6C38BF43AFDEF373F17320B
:20046000F2EF3AFCEF1732F1EF3AFBEF1732F0EF3E51CD00F63AF0EFCD00F63AF1EFCD00EC
:20048000F63AF2EFCD00F697CD00F63E95CD00F616FFCD6CF6FE00CAA1F415C292F43EFD5F
:2004A000C9CD6CF6FEFECAB0F415C2A1F43EFCC921F4EF56235E2600CD6CF61213CD6CF6E7
:2004C000121325C2B8F4CD6CF6CD6CF697C94D6963724F53000D0A6F7B69626B612053442A
:2004E000206B617274790D0A000D0A6F7B69626B61207A616772757A6B69204F530D0A0092
:200500003E77CD00F697CD00F6CD00F6CD00F6CD00F63DCD00F616FFCD6CF6FE01CA27F597
:2005200015C218F53EE0C93E69CD00F63E40CD00F697CD00F6CD00F6CD00F63CCD00F61650
:20054000FFCD6CF6FEFFC24FF515C241F53EE1C93E7ACD00F697CD00F6CD00F6CD00F6CD4D
:2005600000F63CCD00F616FFCD6CF6FEFFC277F515C268F53EE2C94FCD6CF657CD6CF6CD29
:200580006CF6CD6CF679C93EB032FFEF164C3EF032FFEF3EB032EEEF15C28EF59732FFEFBC
:2005A0003E40CD00F697CD00F6CD00F6CD00F6CD00F63E95CD00F616FFCD6CF6FE01CAC7ED
:2005C000F515C2B9F53EFFC93E48CD00F697CD00F6CD00F63CCD00F63EAACD00F63E87CDF9
:2005E00000F616FFCD6CF6FEFFC2F0F515C2E4F5CD6CF6CD6CF6CD6CF6CD6CF6C9000000E8
:2006000047C5473AFFEFE60E4FE521FFEF78E68077F65077780747E68077F65077780747F0
:20062000E68077F65077780747E68077F65077780747E68077F65077780747E68077F65077
:2006400077780747E68077F65077780747E68077F650777932FFEFE1C178C90000000000E7
:20066000000000000000000000000000D5E521FFEF1190D073727EE601074773727EE6015E
:20068000B0074773727EE601B0074773727EE601B0074773727EE601B0074773727EE6013A
:2006A000B0074773727EE601B0074773727EE601B0E1D1C9FFFFFFFFFFFFFFFFFFFFFFFF8B
:2006C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A
:2006E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A
:20070000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9
:20072000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9
:20074000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9
:20076000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF99
:20078000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF79
:2007A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF59
:2007C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFC300F032FFEFC300E032FFEFE90A03FE00CAD3
:2007E000EBF7671A13BCCADBF73EFFC9E521FFEF5E720A73E1C9E521FFEF5E720273E1C957
:00000001FF
Hier ist der vollständige Firmware-Code im HEX-Format (2048 Byte). Um die Binärdatei abzurufen, können Sie das Dienstprogramm HEX2BIN verwenden.

Auflistung
F000: CALL F0D0
F003: CPI A,00
F005: JZ F01A
F008: LXI H,F4D5
F00B: CALL F818
F00E: JMP F89D
F011: LXI H,F4E9
F014: CALL F818
F017: JMP F89D
F01A: LXI H,EFFA
F01D: SUB A
F01E: MOV M,A
F01F: INX H
F020: MOV M,A
F021: INX H
F022: MOV M,A
F023: INX H
F024: MOV M,A
F025: LXI D,EFF5
F028: STAX D
F029: MVI A,E0
F02B: DCX D
F02C: STAX D
F02D: CALL F42F
F030: CPI A,00
F032: JNZ F008
F035: LDA E000
F038: CPI A,EB
F03A: JZ F069
F03D: LDA E1FF
F040: CPI A,AA
F042: JNZ F011
F045: LXI B,E1C6
F048: LXI D,EFFD
F04B: LDAX B
F04C: STAX D
F04D: INX B
F04E: DCX D
F04F: LDAX B
F050: STAX D
F051: INX B
F052: DCX D
F053: LDAX B
F054: STAX D
F055: INX B
F056: DCX D
F057: LDAX B
F058: STAX D
F059: CALL F42F
F05C: CPI A,00
F05E: JNZ F008
F061: LDA E000
F064: CPI A,EB
F066: JNZ F011
F069: LDA E1FF
F06C: CPI A,AA
F06E: JNZ F011
F071: LXI B,F4CE
F074: LXI D,E1BB
F077: CALL F7DB
F07A: CPI A,00
F07C: JNZ F011
F07F: LXI B,EFFA
F082: LDAX D
F083: STAX B
F084: INX D
F085: INX B
F086: LDAX D
F087: STAX B
F088: INX D
F089: INX B
F08A: LDAX D
F08B: STAX B
F08C: INX D
F08D: INX B
F08E: LDAX D
F08F: STAX B
F090: CALL F42F
F093: CPI A,00
F095: JNZ F008
F098: MVI B,06
F09A: LDA EFF4
F09D: INR A
F09E: INR A
F09F: STA EFF4
F0A2: CALL F0B9
F0A5: PUSH B
F0A6: CALL F42F
F0A9: POP B
F0AA: CPI A,00
F0AC: JNZ F008
F0AF: DCR B
F0B0: JNZ F09A
F0B3: JMP E000
F0B6: RST 7
F0B7: RST 7
F0B8: RST 7
F0B9: LXI H,EFFD
F0BC: MOV A,M
F0BD: INR A
F0BE: MOV M,A
F0BF: CPI A,00
F0C1: JNZ F0CB
F0C4: DCX H
F0C5: MOV A,L
F0C6: CPI A,F9
F0C8: JNZ F0BC
F0CB: RET
F0CC: NOP
F0CD: NOP
F0CE: NOP
F0CF: NOP
F0D0: MVI E,20
F0D2: CALL F587
F0D5: CPI A,01
F0D7: JZ F0E1
F0DA: DCR E
F0DB: JNZ F0D2
F0DE: MVI A,E0
F0E0: RET
F0E1: CALL F5C8
F0E4: MVI E,60
F0E6: CALL F500
F0E9: CPI A,00
F0EB: JZ F0F5
F0EE: DCR E
F0EF: JNZ F0E6
F0F2: MVI A,E1
F0F4: RET
F0F5: MVI E,20
F0F7: CALL F550
F0FA: CPI A,00
F0FC: JZ F106
F0FF: DCR E
F100: JNZ F0F7
F103: MVI A,E2
F105: RET
F106: MOV A,D
F107: STA EFFE
F10A: SUB A
F10B: RET
F10C: RST 7
-------------------
F42E: RST 7
F42F: LDA EFFE
F432: ANI40
F434: CPI A,40
F436: JNZ F459
F439: MVI A,51
F43B: CALL F600
F43E: LDA EFFA
F441: CALL F600
F444: LDA EFFB
F447: CALL F600
F44A: LDA EFFC
F44D: CALL F600
F450: LDA EFFD
F453: CALL F600
F456: JMP F48B
F459: LDA EFFD
F45C: STC
F45D: CMC
F45E: RAL
F45F: STA EFF2
F462: LDA EFFC
F465: RAL
F466: STA EFF1
F469: LDA EFFB
F46C: RAL
F46D: STA EFF0
F470: MVI A,51
F472: CALL F600
F475: LDA EFF0
F478: CALL F600
F47B: LDA EFF1
F47E: CALL F600
F481: LDA EFF2
F484: CALL F600
F487: SUB A
F488: CALL F600
F48B: MVI A,95
F48D: CALL F600
F490: MVI D,FF
F492: CALL F66C
F495: CPI A,00
F497: JZ F4A1
F49A: DCR D
F49B: JNZ F492
F49E: MVI A,FD
F4A0: RET
F4A1: CALL F66C
F4A4: CPI A,FE
F4A6: JZ F4B0
F4A9: DCR D
F4AA: JNZ F4A1
F4AD: MVI A,FC
F4AF: RET
F4B0: LXI H,EFF4
F4B3: MOV D,M
F4B4: INX H
F4B5: MOV E,M
F4B6: MVI H,00
F4B8: CALL F66C
F4BB: STAX D
F4BC: INX D
F4BD: CALL F66C
F4C0: STAX D
F4C1: INX D
F4C2: DCR H
F4C3: JNZ F4B8
F4C6: CALL F66C
F4C9: CALL F66C
F4CC: SUB A
F4CD: RET
F4CE: MOV C,L
F4CF: MOV L,C
F4D0: MOV H,E
F4D1: MOV M,D
F4D2: MOV C,A
F4D3: MOV D,E
F4D4: NOP
F4D5: DCR C
F4D6: LDAX B
F4D7: MOV L,A
F4D8: MOV A,E
F4D9: MOV L,C
F4DA: MOV H,D
F4DB: MOV L,E
F4DC: MOV H,C
F4DD: ENOP
F4DE: MOV D,E
F4DF: MOV B,H
F4E0: ENOP
F4E1: MOV L,E
F4E2: MOV H,C
F4E3: MOV M,D
F4E4: MOV M,H
F4E5: MOV A,C
F4E6: DCR C
F4E7: LDAX B
F4E8: NOP
F4E9: DCR C
F4EA: LDAX B
F4EB: MOV L,A
F4EC: MOV A,E
F4ED: MOV L,C
F4EE: MOV H,D
F4EF: MOV L,E
F4F0: MOV H,C
F4F1: ENOP
F4F2: MOV A,D
F4F3: MOV H,C
F4F4: MOV H,A
F4F5: MOV M,D
F4F6: MOV M,L
F4F7: MOV A,D
F4F8: MOV L,E
F4F9: MOV L,C
F4FA: ENOP
F4FB: MOV C,A
F4FC: MOV D,E
F4FD: DCR C
F4FE: LDAX B
F4FF: NOP
F500: MVI A,77
F502: CALL F600
F505: SUB A
F506: CALL F600
F509: CALL F600
F50C: CALL F600
F50F: CALL F600
F512: DCR A
F513: CALL F600
F516: MVI D,FF
F518: CALL F66C
F51B: CPI A,01
F51D: JZ F527
F520: DCR D
F521: JNZ F518
F524: MVI A,E0
F526: RET
F527: MVI A,69
F529: CALL F600
F52C: MVI A,40
F52E: CALL F600
F531: SUB A
F532: CALL F600
F535: CALL F600
F538: CALL F600
F53B: INR A
F53C: CALL F600
F53F: MVI D,FF
F541: CALL F66C
F544: CPI A,FF
F546: JNZ F54F
F549: DCR D
F54A: JNZ F541
F54D: MVI A,E1
F54F: RET
F550: MVI A,7A
F552: CALL F600
F555: SUB A
F556: CALL F600
F559: CALL F600
F55C: CALL F600
F55F: CALL F600
F562: INR A
F563: CALL F600
F566: MVI D,FF
F568: CALL F66C
F56B: CPI A,FF
F56D: JNZ F577
F570: DCR D
F571: JNZ F568
F574: MVI A,E2
F576: RET
F577: MOV C,A
F578: CALL F66C
F57B: MOV D,A
F57C: CALL F66C
F57F: CALL F66C
F582: CALL F66C
F585: MOV A,C
F586: RET
F587: MVI A,B0
F589: STA EFFF
F58C: MVI D,4C
F58E: MVI A,F0
F590: STA EFFF
F593: MVI A,B0
F595: STA EFEE
F598: DCR D
F599: JNZ F58E
F59C: SUB A
F59D: STA EFFF
F5A0: MVI A,40
F5A2: CALL F600
F5A5: SUB A
F5A6: CALL F600
F5A9: CALL F600
F5AC: CALL F600
F5AF: CALL F600
F5B2: MVI A,95
F5B4: CALL F600
F5B7: MVI D,FF
F5B9: CALL F66C
F5BC: CPI A,01
F5BE: JZ F5C7
F5C1: DCR D
F5C2: JNZ F5B9
F5C5: MVI A,FF
F5C7: RET
F5C8: MVI A,48
F5CA: CALL F600
F5CD: SUB A
F5CE: CALL F600
F5D1: CALL F600
F5D4: INR A
F5D5: CALL F600
F5D8: MVI A,AA
F5DA: CALL F600
F5DD: MVI A,87
F5DF: CALL F600
F5E2: MVI D,FF
F5E4: CALL F66C
F5E7: CPI A,FF
F5E9: JNZ F5F0
F5EC: DCR D
F5ED: JNZ F5E4
F5F0: CALL F66C
F5F3: CALL F66C
F5F6: CALL F66C
F5F9: CALL F66C
F5FC: RET
F5FD: NOP
F5FE: NOP
F5FF: NOP
F600: MOV B,A
F601: PUSH B
F602: MOV B,A
F603: LDA EFFF
F606: ANI0E
F608: MOV C,A
F609: PUSH H
F60A: LXI H,EFFF
F60D: MOV A,B
F60E: ANI80
F610: MOV M,A
F611: ORI50
F613: MOV M,A
F614: MOV A,B
F615: RLC
F616: MOV B,A
F617: ANI80
F619: MOV M,A
F61A: ORI50
F61C: MOV M,A
F61D: MOV A,B
F61E: RLC
F61F: MOV B,A
F620: ANI80
F622: MOV M,A
F623: ORI50
F625: MOV M,A
F626: MOV A,B
F627: RLC
F628: MOV B,A
F629: ANI80
F62B: MOV M,A
F62C: ORI50
F62E: MOV M,A
F62F: MOV A,B
F630: RLC
F631: MOV B,A
F632: ANI80
F634: MOV M,A
F635: ORI50
F637: MOV M,A
F638: MOV A,B
F639: RLC
F63A: MOV B,A
F63B: ANI80
F63D: MOV M,A
F63E: ORI50
F640: MOV M,A
F641: MOV A,B
F642: RLC
F643: MOV B,A
F644: ANI80
F646: MOV M,A
F647: ORI50
F649: MOV M,A
F64A: MOV A,B
F64B: RLC
F64C: MOV B,A
F64D: ANI80
F64F: MOV M,A
F650: ORI50
F652: MOV M,A
F653: MOV A,C
F654: STA EFFF
F657: POP H
F658: POP B
F659: MOV A,B
F65A: RET
F65B: NOP
F65C: NOP
F65D: NOP
F65E: NOP
F65F: NOP
F660: NOP
F661: NOP
F662: NOP
F663: NOP
F664: NOP
F665: NOP
F666: NOP
F667: NOP
F668: NOP
F669: NOP
F66A: NOP
F66B: NOP
F66C: PUSH D
F66D: PUSH H
F66E: LXI H,EFFF
F671: LXI D,D090
F674: MOV M,E
F675: MOV M,D
F676: MOV A,M
F677: ANI01
F679: RLC
F67A: MOV B,A
F67B: MOV M,E
F67C: MOV M,D
F67D: MOV A,M
F67E: ANI01
F680: ORA B
F681: RLC
F682: MOV B,A
F683: MOV M,E
F684: MOV M,D
F685: MOV A,M
F686: ANI01
F688: ORA B
F689: RLC
F68A: MOV B,A
F68B: MOV M,E
F68C: MOV M,D
F68D: MOV A,M
F68E: ANI01
F690: ORA B
F691: RLC
F692: MOV B,A
F693: MOV M,E
F694: MOV M,D
F695: MOV A,M
F696: ANI01
F698: ORA B
F699: RLC
F69A: MOV B,A
F69B: MOV M,E
F69C: MOV M,D
F69D: MOV A,M
F69E: ANI01
F6A0: ORA B
F6A1: RLC
F6A2: MOV B,A
F6A3: MOV M,E
F6A4: MOV M,D
F6A5: MOV A,M
F6A6: ANI01
F6A8: ORA B
F6A9: RLC
F6AA: MOV B,A
F6AB: MOV M,E
F6AC: MOV M,D
F6AD: MOV A,M
F6AE: ANI01
F6B0: ORA B
F6B1: POP H
F6B2: POP D
F6B3: RET
F6B4: RST 7
---------------------
F7CD: RST 7
F7CE: JMP F000
F7D1: STA EFFF
F7D4: JMP E000
F7D7: STA EFFF
F7DA: PCHL
F7DB: LDAX B
F7DC: INX B
F7DD: CPI A,00
F7DF: JZ F7EB
F7E2: MOV H,A
F7E3: LDAX D
F7E4: INX D
F7E5: CMP H
F7E6: JZ F7DB
F7E9: MVI A,FF
F7EB: RET
F7EC: PUSH H
F7ED: LXI H,EFFF
F7F0: MOV E,M
F7F1: MOV M,D
F7F2: LDAX B
F7F3: MOV M,E
F7F4: POP H
F7F5: RET
F7F6: PUSH H
F7F7: LXI H,EFFF
F7FA: MOV E,M
F7FB: MOV M,D
F7FC: STAX B
F7FD: MOV M,E
F7FE: POP H
F7FF: RET
Hier ist eine Auflistung: Leere Leerzeichen wurden zur Vereinfachung entfernt.

Die Subroutinen zum Senden und Lesen von Bytes befinden sich an den Adressen 0xF600 bzw. 0xF66C. Sie sind in erweiterter Form ohne Schleifen geschrieben. Dies ergibt eine hohe Geschwindigkeit des Programms.

Ich werde noch einmal erwähnen, dass dies eine rohe erste Version ist, die sich merklich ändern und ergänzt wird. Aber jetzt brauche ich keine akustische Belastung durch die I-Direktive.

Start Gerät

Wie bereits erwähnt, befindet sich im Bootsektor unter der Adresse 0x1BB die Signatur „MicrOS“ und danach 4 Bytes mit der Adresse des Betriebssystemprogramms. BSVV lädt 7 Sektoren mit 512 Bytes im Bereich 0xE000 - 0xEDFF und überträgt die Steuerung an die Adresse 0xE000. Das Laden erfolgt auf der Nullseite. Der Rest der Seiten wird bei Bedarf bereits vom Betriebssystem ausgefüllt (und wann ich Brücken bauen werde). Für die korrekte "Installation" des Betriebssystems auf der SD-Karte schreiben Sie nach dem Formatieren die Datei vom Betriebssystem. Suchen Sie dann die Nummer des ersten Sektors dieser Datei und schreiben Sie die Signatur und Adresse in den Bootsektor. Die Adresse muss in Sektoren (und nicht in Bytes) angegeben werden. Die Big-Endian-Bytereihenfolge, d. H. Das letzte Low-Byte (mit hoher Adresse).

Übrigens werde ich diesen Installationsprozess des Betriebssystems automatisieren, vielleicht sogar mit Mikroshi-Tools. Dann wird es eine weitere Unterroutine in BSVV geben.

Was weiter?

Jetzt sollte ich anfangen, Betriebssystem zu schreiben, aber vorher habe ich beschlossen, ein anderes Programm zu schreiben. SD-Karten sind jetzt einen Cent wert, und ich wollte eine separate SD-Karte mit Spielen erstellen. Nehmen Sie also alle Spiele auf, die ich im Internet auf dieser Karte finden kann, und erstellen Sie anstelle des Betriebssystems ein Programm, das mir eine große Liste von Spielen anzeigt. Sie können ein Spiel auch nach Namen suchen, wenn Sie über die Tastatur eingeben. Nach Auswahl eines Spiels wird es in den Arbeitsspeicher geladen und gestartet.

Mit einem solchen Programm kann ich Spiele auf Mikrosh spielen, ohne mich um die Arbeit in der DOS-Konsole kümmern zu müssen. Ich werde ein solches Programm "Game Manager" nennen. Und über sie wird höchstwahrscheinlich das nächste Kapitel sein.

Und auf einer anderen Karte plane ich, ein normales DOS für Programme wie Basic, Editor und Assembler usw. zu erstellen.

Einige Texte und Popularisierung der Programmierung

Irgendwie saßen mein Bruder und ich da und rauchten und er fragte, warum ich so nachdenklich aussehe.

Zu dieser Zeit habe ich über „Brücken“ nachgedacht und es war notwendig, ein Unterprogramm „LDA-Brücke“ zu erstellen. Aber wie man über ein solches Problem mit einer Person spricht, die weder über Programmierung noch über Assembler noch über die Funktionsweise des Prozessors Bescheid weiß, und im Allgemeinen ...

Ich habe so angefangen:
Stellen Sie sich vor, ich sage, es gibt 8 Lagerhäuser, und jedes hat einen Chef. Es gibt einen Kurier. Die Aufgabe besteht darin, den Versand von Waren von Lager zu Lager zu arrangieren, es gibt jedoch Einschränkungen. Eine weitere Schwierigkeit ist die Geschwindigkeit.
Ich habe versucht zu sagen, dass der Kuriercode sehr groß ist und dass es viele Aufrufe an den Stapel und viele Operationen mit Registern gibt. Dann stellte mir mein Bruder zum vollständigen Verständnis Fragen, und ich beantwortete sie, und es funktionierte!

Nachdem er gefragt hatte, ob es möglich sei, 8 Kuriere herzustellen, bei denen jeder an sein Lager angeschlossen war und er sich nicht erinnern musste, zu wem er zurückkehren sollte, kehrte er immer in sein Lager zurück.
Dies hat den Betrieb wirklich stark vereinfacht und beschleunigt. Bevor Sie die Seite wechseln, müssen Sie die aktuelle Seite nicht mehr kennen und sich merken, um zurückkehren zu können. Sie können sofort die Seite wechseln und die Daten lesen. Schalten Sie dann die Seite auf die festgelegte Seite und kehren Sie zurück. Dies führte zwar zu Ergebnissen, nahm zwar etwas Platz in Anspruch, erhöhte jedoch die Produktivität erheblich.

Zwischensumme

Meine HelloWorld wird auf beiden Computern erfolgreich gestartet. Die Zeit vom Drücken von „VK“ bis zum Erscheinen der Inschrift beträgt nicht mehr als zwei Sekunden (3584 Byte). Vielmehr ca. 1,5 Sekunden. Genauer kann man nichts messen. Ich denke, das ist ein gutes Ergebnis.

Das ist alles für jetzt. Vielen Dank für Ihre Aufmerksamkeit! Fortsetzung folgt…

All Articles