Mikrosha. Chapitre deux ROM et BSVV


Dans le chapitre précédent, j'ai décrit la partie en fer de mon contrôleur de carte SD Microsha PC. Et ce chapitre est sorti programme-philosophique. Peu importe - bienvenue!


Écriture ROM

Comme je l'ai écrit dans la partie précédente, j'ai un ancien programmeur ROM pour LPT. Je ne voulais pas communiquer avec l'émulation LPT, en plus, je devrais comprendre comment fonctionne le programmeur, comment il est contrôlé, toutes ses commandes et ses délais.

J'ai ensuite appelé mon frère, qui travaille dans les services communautaires et travaille. Je lui ai demandé de m'appeler au travail et d'aller y chercher mon premier ordinateur portable IBM ThinkPad 760ed. Et le lendemain, j'ai eu le hêtre.


Cependant, je n'étais pas encore prêt à flasher. J'ai eu besoin de changer toutes les adresses de 6xxx à Fxxx, où xxx est 12 bits de l'adresse du firmware. Cela était nécessaire en raison de l'architecture du processeur KP580VM80A; son système de commande n'implique pas de transfert de code d'une zone mémoire à une autre, ce qui pose quelques difficultés.
Soit dit en passant, à cause de cela, il m'a fallu beaucoup de temps pour éditer le firmware, car à la suite de l'optimisation de code de bas niveau, des «trous» ont commencé à se former entre les sous-programmes. La taille de ces sections inutilisées atteignait parfois 10 octets, et je ne pouvais pas me permettre un tel gaspillage. J'ai dû déplacer les articulations et m'assurer que le code "ne sortait pas" lors des appels et des transitions.

En fin de compte, j'ai mis au point un micrologiciel minimalement viable. Il s'agit toujours d'une option brute, qui peut normalement charger le code défini dans de la RAM supplémentaire et contrôler le transfert. L'humidité du firmware réside dans le fait que jusqu'à présent je n'ai pas trouvé une bonne optimisation et un dispositif pratique de la fonctionnalité que j'appelle des "ponts". Cette fonctionnalité est nécessaire pour utiliser pleinement toute la mémoire RAM supplémentaire. Mais je suis devenu confus en travaillant avec la pile, j'ai attrapé beaucoup de problèmes et j'ai décidé de laisser le problème pour plus tard, mais pour l'instant, utiliser seulement 4 Ko de nouvelle RAM devrait être suffisant pour commencer. Et après cela, il sera possible d'ajouter cette fonctionnalité, quand il sera clair quelles exigences sont nécessaires pour le système d'exploitation. Et en plus de l'espace laissé sous les "ponts", j'avais environ 600 octets d'espace libre.

J'ai rempli tout l'espace libre avec des octets 0xFF, cela me permettra de «finir» de nouveaux blocs dans la ROM à l'avenir sans effacer toute la mémoire avec un rayonnement ultraviolet. Le fait est que ces "EPROM" sont agencées de telle sorte que le firmware consiste à changer 1 dans un bit en 0. Ainsi, 0xFF peut être transformé en n'importe quel code. De plus, après quelques transitions clés «JMP», j'ai laissé 3 codes 0xFF. Cela vous permettra de transformer les codes JMP eux-mêmes en 0x00 (NOP) et la transition sera annulée, mais mettez une autre transition après, en la faisant à partir de ces trois 0xFF.

Ensuite, j'avais besoin d'une alimentation de 12 volts. Au début, je voulais me connecter au bloc d'alimentation Mikrosh, mais j'ai ensuite vu une torsion au milieu du câble d'alimentation du ThinkPad. Je me souviens de la façon dont cette torsion est apparue, ce hêtre était propulsé par une voiture, pour le réglage des puces de toutes sortes de «janvier» et de «Bosh», lorsque les premiers «burins» à injection sont apparus.
Après avoir tordu la torsion, j'ai enveloppé un câble avec un connecteur DJK-11b là-bas et la LED rouge sur le programmateur s'est allumée joyeusement.

Après avoir

allumé l'ordinateur portable, j'ai vu ce qui suit: En même temps, "dzzzzz-CLAT !!!" se faisait entendre une fois par seconde.
Oui! Cela signifiait que le disque dur de l'ordinateur portable ne fonctionnait pas. J'ai été triste pendant 10 à 15 minutes, puis j'ai réalisé que tout n'était pas perdu et que ce ThinkPad avait un CD-ROM. En fouillant dans la poubelle, j'ai trouvé 3 DVD vierges, mais j'ai besoin d'un CD!

J'ai ensuite rappelé mon frère et demandé d'acheter 3 disques CD-R à Auchan. Pour décrire la création d'un CD-ROM avec MS-DOS 6.22 ici, je pense que cela n'a aucun sens, je vais simplement ajouter qu'en plus de MS-DOS, j'ai placé le programme de couture "PGM02101" (il est juste sous DOS) et le firmware lui-même sous la forme du fichier "ROM_V1.BIN "Et" Norton Commander "version 5.0.

Alors, prenez-en deux. Après avoir allumé le hêtre, j'ai mis le blanc dans le CD-ROM et j'ai appuyé sur "F1". Une LED jaune s'allume sur le CD-ROM et j'entends "kva-kva-kva-kva-pyk!", Puis une pause et encore "kva-kva-kva-kva-pyk!" Cela se produit une vingtaine de fois, puis une inscription mystérieuse apparaît:


Cela signifie probablement que le «sidyuk» est également plié.

Il n'y avait pas d'autre moyen que de démonter le lecteur de CD-ROM. Il s'est avéré être beaucoup de poussière et toujours pas clair pour moi de poudre noire, d'où il venait, ce n'était pas clair pour moi, d'autant plus qu'au moins cinq ans s'étaient écoulés depuis la dernière utilisation de ce hêtre et pendant tout ce temps, il était couché sur une étagère en cellophane. Ensuite, j'ai décidé qu'il s'agissait de Tangris et je l'ai nettoyé hardiment du lecteur. De plus, il a légèrement enduit les têtes de guidage de lithol et frotté la lentille avec un bâton «d'oreille» en coton avec de l'alcool.

Cela a aidé, le lecteur cligna des yeux, croassa, et je vis une invite DOS sur l'écran. HOORAY!
«Norton» n'a pas démarré, une erreur «Erreur de lecture (ou d'écriture) du disque A:» s'est produite. Je pensais qu'il enregistrait quelque chose pour ses propres besoins, mais ne pouvait pas écrire sur le CD-ROM. Eh bien, au diable avec lui, maintenant je ne comprends même pas pourquoi j'avais besoin de lui.
En général, «DIR», puis «pgm02101.exe» et maintenant à l'écran le programme tant attendu PGM02 propose de choisir un port LPT. Choisissez LPT 1 (0x378).

Le firmware du K573RF5 nécessite une alimentation supplémentaire de + 25 V. J'ai eu la chance de trouver une unité avec une telle tension. J'ai une imprimante HP Deskjet 2050a, donc elle est alimentée par une alimentation 30V. Heureusement, j'avais un multimètre et il était facile de connaître la polarité sur le connecteur.

Après le processus du firmware, il s'est avéré que le firmware ne fonctionne pas. Autrement dit, le processus se termine, mais dans la puce ROM, 0xFF est toujours lu à toutes les adresses. La méthode de piquer avec un multimètre dans la prise a montré qu'il n'y a pas de tension de programmation sur la broche PGM. Il s'est avéré que le transistor VT17 (KT815G) a «volé» dans le programmateur, et j'ai dû le changer.

C'est fait! Et lisez bien!

Échec inattendu du pied

Lorsque la puce ROM est entrée dans le contrôleur, j'ai voulu vérifier sa lisibilité. Je voulais utiliser le Moniteur système et afficher la zone 0xF000-0xF7FF en utilisant la directive "D". J'ai appuyé sur «DF0» ... Lorsque j'ai appuyé sur «0», rien ne s'est produit, la touche n'a pas fonctionné.
Ensuite, j'ai tapé "DEFFF, F7FF" et après avoir appuyé sur "VK", j'ai vu ce que je voulais à l'écran. Mais pour démarrer le téléchargement à partir de la carte SD, il fallait saisir «GF000» et appuyer sur «VK».

Au début, je pensais que l'affaire était dans les contacts, mais il s'est avéré qu'un certain nombre de clés ne fonctionnaient pas. Ce sont les touches "8", "espace", "Yu", "X", "P", "b" et la flèche vers le haut.
En ouvrant le diagramme, j'ai vu qu'il s'agit de la première colonne verticale de touches. La broche PB0 de la puce D39 (KR580BB55) était responsable de cette colonne. Soit dit en passant, les diodes sont indiquées dans le circuit de découplage des colonnes, mais en fait, des résistances de 300 Ohms sont installées.


Qu'Est-ce que c'est? Le hack du constructeur?
Lors de la réparation, remplacez ces résistances par des diodes. Mais comment puis-je tester le contrôleur?

Un nouvel espoir

J'ai dû déployer à nouveau le ThinkPad et le programmateur avec des alimentations. Aux adresses 0xF7CE - 0xF7D0, j'ai "terminé" les codes 0xC3, 0x00, 0xF0; ce qui signifie JMP F000.

Maintenant, le démarrage est possible non seulement avec la commande "GF000", mais aussi avec la "GF7CE", où les touches non fonctionnelles ne sont pas impliquées. Après le démarrage, tout a fonctionné, et au lieu du système d'exploitation, un programme a été chargé qui a affiché «MIKROSHA OS» à l'écran.

Je ne peux pas effectuer de réparations maintenant, mais il y a deux morceaux dans la puce KR580VV55, et le second n'est pratiquement pas utilisé. Il y a une idée de les échanger, puis de remplacer la défectueuse. Par conséquent, j'ai appelé mon frère pour la troisième fois et m'a demandé de m'apporter une pompe à dessouder, du flux LTI-120, de la soudure et ... un autre Mikrosha.

Oui, je n’ai pas Mikrosh seul, et celui qu’il a amené est presque un exemple de musée «à l’huile». Le fait est que lorsque mon père m'a acheté Mikrosha, on lui a demandé d'en acheter un autre, et il l'a acheté. Mais quelque chose a mal tourné, et pour une raison quelconque, l'homme a refusé de le prendre.
Elle a donc passé 30 ans.


Soit dit en passant, sur ce deuxième Mikrosha, il y a aussi des résistances au lieu des diodes, et comme les deux voitures sont du même lot, je suppose que c'est le cas dans tout le lot.



Il sera nécessaire de changer soigneusement les résistances en diodes dans ce cas.
En attendant, je vais l'utiliser pour terminer ce projet. Oui, il y a aussi la troisième Mikrosha, mais je parlerai d'elle une autre fois. Je peux seulement dire qu'il a été gravement défiguré par l'un de mes camarades de classe "à cette époque" et je le restaure lentement, mais il ne sera pas authentique, mais au contraire modifié en super capacités, et utilisant déjà des microcontrôleurs et CPLD. Ce sera un projet différent.

Inscriptions et codes


Le 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
Voici le code complet du firmware au format HEX (2048 octets). Pour obtenir le binaire, vous pouvez utiliser l'utilitaire HEX2BIN.

Référencement
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
Voici une liste, les emplacements vides en ont été supprimés pour plus de commodité.

Les sous-programmes d'envoi et de lecture d'octets sont situés aux adresses 0xF600 et 0xF66C, respectivement, ils sont écrits sous forme développée sans boucles, ce qui donne une vitesse élevée du programme.

Je mentionnerai encore une fois qu’il s’agit d’une première version brute, qui changera sensiblement et sera complétée. Mais maintenant, je n'ai plus besoin de chargement acoustique via la directive «I».

Périphérique de démarrage

Comme déjà mentionné, dans le secteur de démarrage à l'adresse 0x1BB se trouve la signature «MicrOS», et après elle 4 octets avec l'adresse du programme OS. BSVV charge 7 secteurs de 512 octets dans la zone 0xE000 - 0xEDFF et transfère le contrôle à l'adresse 0xE000. Le chargement s'effectue sur la page zéro. Le reste des pages sera déjà rempli par l'OS, si nécessaire (et quand je construirai des ponts). Pour une "Installation" correcte de l'OS sur la carte SD, après le formatage, écrivez le fichier à partir de l'OS. Recherchez ensuite le numéro du premier secteur de ce fichier et écrivez la signature et l'adresse dans le secteur de démarrage. L'adresse doit être spécifiée en secteurs (et non en octets). L'ordre des octets Big-endian, c'est-à-dire le dernier octet faible (avec une adresse élevée).

Soit dit en passant, je vais automatiser ce processus d'installation du système d'exploitation, peut-être même en utilisant les outils Mikroshi, puis il y aura un autre sous-programme dans BSVV.

Et après?

Maintenant, je devrais commencer à écrire OS, mais avant cela, j'ai décidé d'écrire un autre programme. Les cartes SD valent maintenant un sou, et je voulais créer une carte SD séparée avec des jeux. Autrement dit, enregistrez tous les jeux que je peux trouver sur Internet sur cette carte, et au lieu de OS, créez un programme qui me montre une grande liste de jeux. Vous pouvez également rechercher un jeu par son nom lors de la saisie à partir du clavier. Après avoir choisi un jeu, il est chargé dans la RAM et lancé.

Un tel programme me permettra de jouer à des jeux sur Mikrosh sans prendre la peine de travailler dans la console DOS. J'appellerai un tel programme "Game Manager". Et à son sujet, très probablement, sera le prochain chapitre.

Et sur une autre carte, je prévois de créer un DOS normal pour des programmes tels que Basic, Editor et Assembler, etc.

Quelques paroles et vulgarisation de la programmation

D'une manière ou d'une autre, mon frère et moi nous sommes assis et avons fumé, et il m'a demandé pourquoi j'avais un regard si réfléchi?

A cette époque, je pensais aux «ponts» et il fallait créer un sous-programme «LDA-Bridge». Mais comment parler d'un tel problème à une personne qui ne connaît ni la programmation, ni l'assembleur, ni le fonctionnement du processeur, et en général ...

J'ai commencé comme ça:
Imaginez, je dis qu'il y a 8 entrepôts, et chacun a un patron. Il y a un courrier. La tâche consiste à organiser l'expédition des marchandises d'un entrepôt à l'autre, mais il y a des limites. Et une autre difficulté est la vitesse.
J'ai essayé de dire que le code de messagerie se révèle être très volumineux et qu'il se traduit par de nombreux appels à la pile et de nombreuses opérations avec des registres. Ensuite, pour une compréhension complète, mon frère m'a posé des questions, et j'ai répondu, et ça a marché!

Une fois qu'il a demandé s'il était possible de faire 8 coursiers, où chacun était attaché à son entrepôt et qu'il n'avait pas besoin de se rappeler à qui retourner, il revenait toujours à son entrepôt.
Cela a considérablement simplifié et accéléré les opérations. Maintenant, avant de changer de page, vous n'avez pas besoin de connaître et de vous souvenir de la page actuelle pour revenir, vous pouvez immédiatement changer de page et lire les données. Et puis basculez la page vers le disque dur spécifié et revenez. Cela a donné des résultats, même s'il a pris un peu de place, mais il a considérablement augmenté la productivité.

Total

My HelloWorld se lance avec succès sur les deux machines. Le temps qui s'écoule entre «VK» et l'apparition de l'inscription ne prend pas plus de deux secondes, soit 3 584 octets. Plutôt, environ 1,5 seconde. Il n'y a rien à mesurer plus précisément. Je pense que c'est un bon résultat.

C'est tout pour le moment. Merci pour l'attention! À suivre…

All Articles