Mikrosha Capitulo dos ROM y BSVV


En el capítulo anterior, describí la parte de hierro de mi controlador de tarjeta SD de Microsha PC. Y este capítulo salió del programa filosófico. ¿A quién le importa? ¡Bienvenido!


Escritura ROM

Como escribí en la parte anterior, tengo un viejo programador de ROM para LPT. No quería comunicarme con la emulación LPT, además, tendría que entender cómo funciona el programador, cómo se controla, todos sus comandos y demoras.

Luego llamé a mi hermano, que trabaja en el servicio comunitario y trabaja. Le pedí que me llamara al trabajo y recogiera mi primera computadora portátil IBM ThinkPad 760ed allí. Y al día siguiente tuve la haya.


Sin embargo, aún no estaba listo para flashear. Necesitaba cambiar todas las direcciones de 6xxx a Fxxx, donde xxx son 12 bits de la dirección de firmware. Esto fue necesario debido a la arquitectura del procesador KP580VM80A; su sistema de comando no implica la transferencia de código de un área de memoria a otra, lo que causa algunas dificultades.
Por cierto, debido a esto, me llevó mucho tiempo editar el firmware en general, porque como resultado de la optimización de código de bajo nivel, comenzaron a formarse "agujeros" entre los subprogramas. El tamaño de estas secciones no utilizadas a veces alcanzaba los 10 bytes, y no podía permitirme ese despilfarro. Tuve que cambiar las articulaciones y asegurarme de que el código "no se moviera" en llamadas y transiciones.

Finalmente, armé un firmware mínimamente viable. Esta sigue siendo una opción cruda, que normalmente puede cargar el código establecido en RAM adicional y control de transferencia. La humedad del firmware radica en el hecho de que hasta ahora no he encontrado una buena optimización y un dispositivo conveniente de la funcionalidad que llamo "puentes". Esta funcionalidad es necesaria para el uso completo de toda la RAM adicional. Pero me confundí al trabajar con la pila, detecté muchos problemas técnicos y decidí dejar el problema para más tarde, pero por ahora, usar solo 4 KB de RAM nueva debería ser suficiente para comenzar. Y después de eso será posible agregar esta funcionalidad, cuando quede claro qué requisitos son necesarios para el Sistema Operativo. Y además del espacio dejado debajo de los "puentes", tenía alrededor de 600 bytes de espacio libre.

Llené todo el espacio libre con 0xFF bytes, esto me permitirá "terminar" nuevos bloques en ROM en el futuro sin borrar toda la memoria con radiación ultravioleta. El hecho es que estas "EPROM" están dispuestas de modo que el firmware consiste en cambiar 1 en un bit a 0. Por lo tanto, 0xFF puede convertirse en cualquier código. Además, después de un par de transiciones clave "JMP" dejé 3 códigos 0xFF. Esto le permitirá convertir los códigos JMP ellos mismos en 0x00 (NOP) y la transición se cancelará, pero coloque otra transición después de eso, haciéndolo desde estos tres 0xFF.

Luego, necesitaba energía de 12 voltios. Al principio quería conectarme a la fuente de alimentación Mikrosh, pero luego vi un giro en el medio del cable de alimentación del ThinkPad. Recuerdo cómo apareció este giro, esta haya fue alimentada desde el automóvil, para el ajuste de chips de todo tipo de "enero" y "Bosh", cuando aparecieron los primeros "cinceles" de inyección.
Después de torcer el giro, envolví un cable con un conector DJK-11b y el LED rojo del programador se iluminó alegremente.

Después de encender la computadora portátil, vi lo siguiente:

Al mismo tiempo, se escuchó "dzzzzz-CLAT !!!" una vez por segundo.
¡Si! Esto significaba que el HDD en la computadora portátil no funcionaba. Estuve triste durante 10-15 minutos, y luego me di cuenta de que no todo estaba perdido, y que este ThinkPad tiene un CD-ROM. Mientras hurgaba entre la basura, encontré 3 DVD en blanco, ¡pero necesito un CD!

Luego volví a llamar a mi hermano y le pedí que comprara 3 discos CD-R en Auchan. Para describir la creación de un CD-ROM con MS-DOS 6.22 aquí, creo que no tiene sentido, solo agregaré que, además de MS-DOS, coloqué el programa de costura "PGM02101" (está justo debajo de DOS) y el firmware en forma del archivo "ROM_V1.BIN "Y" Norton Commander "versión 5.0.

Entonces toma dos. Después de encender la haya, puse el espacio en blanco en el CD-ROM y presioné "F1". Se enciende un LED amarillo en el CD-ROM y escucho "kva-kva-kva-kva-pyk!", Luego una pausa y nuevamente "kva-kva-kva-kva-pyk!" Esto sucede unas veinte veces, y luego aparece una misteriosa inscripción: lo


más probable es que esto signifique que el "sidyuk" también está doblado.

No había otra salida que desmontar la unidad de CD-ROM. Resultó ser mucho polvo y todavía no estaba claro para mí el polvo negro, de dónde venía, no estaba claro para mí, más aún desde que habían pasado al menos cinco años desde el último uso de esta haya y todo este tiempo yacía en un estante de celofán. Entonces decidí que era Tangris, y audazmente lo limpié del disco. Además, untó ligeramente las cabezas guía con litol y frotó la lente con un bastoncillo de algodón con alcohol.

Ayudó, la unidad parpadeó, crujió y vi un mensaje de DOS en la pantalla. HOORAY!
"Norton" no se inició, se produjo un error "Error de disco al leer (o escribir) unidad A:". Pensé que estaba grabando algo para sus propios fines, pero no podía escribir en el CD-ROM. Bueno, al diablo con él, ahora ni siquiera puedo entender por qué lo necesitaba.
En general, "DIR", y luego "pgm02101.exe" y ahora en la pantalla, el tan esperado programa PGM02 ofrece elegir un puerto LPT. Elija LPT 1 (0x378).

El firmware K573RF5 requiere una fuente de alimentación adicional de + 25V. Tuve la suerte de encontrar una unidad con tal voltaje. Tengo una impresora HP Deskjet 2050a, por lo que funciona con una fuente de alimentación de 30V. Afortunadamente, tenía un multímetro y fue fácil descubrir la polaridad en el conector.

Después del proceso de firmware, resultó que el firmware no funciona. Es decir, el proceso finaliza, pero en el chip ROM 0xFF todavía se lee en todas las direcciones. El método de pinchar con un multímetro en el zócalo mostró que no hay voltaje de programación en el pin PGM. Resultó que el transistor VT17 (KT815G) "voló" en el programador, y tuve que cambiarlo.

¡Se ha hecho! Y leer correctamente!

Falla inesperada del pie

Cuando el chip ROM entró en el controlador, quería comprobar su legibilidad. Quería usar el Monitor del sistema y mostrar el área 0xF000-0xF7FF usando la directiva "D". Presioné "DF0" ... Cuando presioné "0" no pasó nada, la tecla no funcionó.
Luego escribí "DEFFF, F7FF" y después de presionar "VK" vi lo que quería en la pantalla. Pero para comenzar la descarga desde la tarjeta SD, era necesario ingresar "GF000" y presionar "VK".

Al principio pensé que el asunto estaba en los contactos, pero resultó que varias teclas no funcionaron. Estas fueron las teclas "8", "espacio", "Yu", "X", "P", "b" y la flecha hacia arriba.
Al abrir el diagrama, vi que esta es la primera columna vertical de teclas. El pin PB0 del chip D39 (KR580BB55) fue responsable de esta columna. Por cierto, los diodos están indicados en el circuito para desacoplar las columnas, pero de hecho, se instalan resistencias de 300 ohmios.


¿Qué es? El truco del fabricante?
Al reparar, reemplace estas resistencias con diodos. Pero, ¿cómo pruebo el controlador?

Nueva Esperanza

Tuve que implementar el ThinkPad y el programador con fuentes de alimentación nuevamente. En las direcciones 0xF7CE - 0xF7D0 "terminé" los códigos 0xC3, 0x00, 0xF0; lo que significa JMP F000.

Ahora es posible comenzar no solo con el comando "GF000", sino también con el "GF7CE", donde las teclas que no funcionan no están involucradas. Después de comenzar, todo funcionó, y en lugar del sistema operativo, se cargó un programa que trajo el "SO MIKROSHA" a la pantalla.

No puedo realizar reparaciones ahora, pero hay dos piezas en el microchip KR580VV55, y la segunda prácticamente no se usa. Existe la idea de cambiarlos y luego reemplazar el defectuoso. Por lo tanto, llamé a mi hermano por tercera vez y me pidió que me trajera una bomba desoldadora, fundente LTI-120, soldadura y ... otra Mikrosha.

Sí, no tengo a Mikrosh solo, y el que trajo es casi un ejemplo de museo "en aceite". El caso es que cuando mi padre me compró Mikrosha, le pidieron que comprara otro, y él lo compró. Pero algo salió mal, y el hombre por alguna razón se negó a tomarlo.
Entonces ella yació por 30 años.


Por cierto, en este segundo Mikrosha también hay resistencias en lugar de diodos, y dado que ambos autos son del mismo lote, supongo que ese es el caso en todo el lote.



Será necesario cambiar cuidadosamente las resistencias a diodos en esto.
Mientras tanto, lo usaré para terminar este proyecto. Sí, también está la tercera Mikrosha, pero hablaré de ella en otro momento. Solo puedo decir que fue gravemente desfigurado por uno de mis compañeros de clase "en esos días" y lo estoy restaurando lentamente, pero no será auténtico, sino que, por el contrario, se modificó a supercapacidades y ya está usando microcontroladores y CPLD. Este será un proyecto diferente.

Listados y Códigos


El código
: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
Aquí está el código de firmware completo en formato HEX (2048 bytes). Para obtener el binario, puede usar la utilidad HEX2BIN.

Listado
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
Aquí hay una lista, se han eliminado los lugares vacíos para su comodidad.

Las subrutinas para enviar bytes y leer bytes se encuentran en las direcciones 0xF600 y 0xF66C, respectivamente, están escritas en forma expandida sin bucles, esto da una alta velocidad del programa.

Mencionaré una vez más que esta es una primera versión en bruto, que cambiará notablemente y se complementará. Pero ahora no necesito una carga acústica a través de la directiva "I".

Dispositivo de arranque

Como ya se mencionó, en el sector de arranque en la dirección 0x1BB se encuentra la firma "MicrOS", y luego 4 bytes con la dirección del programa OS. BSVV carga 7 sectores de 512 bytes en el área 0xE000 - 0xEDFF y transfiere el control a la dirección 0xE000. La carga se realiza en la página cero. El resto de las páginas ya serán completadas por el sistema operativo, si es necesario (y cuando construiré puentes). Para la correcta "Instalación" del sistema operativo en la tarjeta SD, después de formatear, escriba el archivo desde el sistema operativo. Luego encuentre el número del primer sector de este archivo y escriba la firma y la dirección en el sector de arranque. La dirección debe especificarse en sectores (y no en bytes). El orden de bytes Big-endian, es decir, el último byte bajo (con dirección alta).

Por cierto, voy a automatizar este proceso de instalación del sistema operativo, tal vez incluso usando las herramientas de Mikroshi, entonces habrá otra subrutina en BSVV.

¿Que sigue?

Ahora debería comenzar a escribir OS, pero antes decidí escribir otro programa. Las tarjetas SD ahora valen un centavo, y quería hacer una tarjeta SD separada con juegos. Es decir, grabe todos los juegos que puedo encontrar en Internet en esta tarjeta y, en lugar de OS, cree un programa que me muestre una gran lista de juegos. También puede buscar un juego por nombre al ingresar desde el teclado. Después de elegir un juego, se carga en la RAM y se inicia.

Tal programa me permitirá jugar juegos en Mikrosh sin molestarme con el trabajo en la consola de DOS. Llamaré a dicho programa "Game Manager". Y sobre ella, muy probablemente, será el próximo capítulo.

Y en otra tarjeta, planeo hacer un DOS normal para programas como Basic, Editor y Assembler, etc.

Algunas letras y popularización de la programación.

De alguna manera mi hermano y yo nos sentamos y fumamos, y él preguntó por qué tengo una mirada tan reflexiva.

En ese momento estaba pensando en "puentes" y era necesario crear un subprograma "Puente LDA". Pero cómo hablar sobre tal problema a una persona que no sabe ni sobre programación, ni sobre ensamblador, ni sobre cómo funciona el procesador, y en general ...

Comencé así:
Imagina, digo que hay 8 almacenes, y cada uno tiene un jefe. Hay un servicio de mensajería. La tarea es organizar el envío de mercancías de un almacén a otro, pero hay limitaciones. Y otra dificultad es la velocidad.
Traté de decir que el código de mensajería resulta ser muy grande y que genera muchas llamadas a la pila y muchas operaciones con registros. Luego, para una comprensión completa, mi hermano me hizo preguntas, y yo las respondí, ¡y funcionó!

Una vez que preguntó si era posible hacer 8 correos, donde cada uno estaba conectado a su almacén y no necesitaba recordar a quién regresar, siempre regresaba a su almacén.
Esto realmente simplificó enormemente y aceleró las operaciones. Ahora, antes de cambiar de página, no necesita saber y recordar la página actual para regresar, puede cambiar inmediatamente la página y leer los datos. Y luego cambie la página a la especificada y regrese. Esto arrojó resultados, aunque tomó un poco de espacio, pero aumentó significativamente la productividad.

Total parcial

My HelloWorld se lanza con éxito en ambas máquinas. El tiempo desde que se presiona "VK" hasta la aparición de la inscripción no toma más de dos segundos, en 3584 bytes. Por el contrario, alrededor de 1,5 segundos. No hay nada que medir con mayor precisión. Creo que este es un buen resultado.

Eso es todo por ahora. ¡Gracias por la atención! Continuará…

All Articles