Mikrosha. Capítulo dois ROM e BSVV


No capítulo anterior, descrevi a parte de ferro do meu controlador de cartão SD Microsha PC. E este capítulo saiu programa-filosófico. Quem se importa - bem-vindo!


Gravação de ROM

Como escrevi na parte anterior, tenho um antigo programador de ROM para o LPT. Eu não queria me comunicar com a emulação LPT, além disso, teria que entender como o programador funciona, como é controlado, todos os seus comandos e atrasos de tempo.

Então liguei para meu irmão, que trabalha em serviços comunitários e trabalha. Pedi para ele me ligar no trabalho e pegar meu primeiro laptop IBM ThinkPad 760ed lá. E no dia seguinte eu tive a faia.


No entanto, eu ainda não estava pronto para piscar. Eu precisava alterar todos os endereços de 6xxx para Fxxx, onde xxx é 12 bits do endereço do firmware. Isso foi necessário devido à arquitetura do processador KP580VM80A; seu sistema de comandos não envolve a transferência de código de uma área de memória para outra, o que causa algumas dificuldades.
A propósito, por causa disso, levei muito tempo para editar o firmware em geral, porque, como resultado da otimização de código de baixo nível, começaram a se formar “buracos” entre os subprogramas. O tamanho dessas seções não utilizadas às vezes chegava a 10 bytes, e eu não podia me permitir tal desperdício. Eu tive que mudar as juntas e garantir que o código "não saísse" nas chamadas e transições.

Por fim, montei um firmware minimamente viável. Essa ainda é uma opção grosseira, que normalmente pode carregar o código estabelecido em RAM adicional e controle de transferência. A umidade do firmware está no fato de que até agora não consegui uma boa otimização e um dispositivo conveniente da funcionalidade que chamo de "pontes". Essa funcionalidade é necessária para o uso completo de toda a RAM adicional. Mas fiquei confuso ao trabalhar com a pilha, percebi muitas falhas e decidi deixar o problema para mais tarde, mas por enquanto, usar apenas 4 KB de nova RAM deve ser suficiente para começar. E depois disso, será possível adicionar essa funcionalidade, quando ficar claro quais requisitos são necessários para o sistema operacional. E além do espaço deixado sob as "pontes", eu tinha cerca de 600 bytes de espaço livre.

Preenchi todo o espaço livre com 0xFF bytes, o que me permitirá “terminar” novos blocos na ROM no futuro sem apagar toda a memória com radiação ultravioleta. O fato é que essas "EPROMs" são organizadas de forma que o firmware consiste em alterar 1 em um pouco para 0. Portanto, 0xFF pode ser transformado em qualquer código. Além disso, após algumas transições de teclas “JMP”, deixei 3 códigos 0xFF. Isso permitirá que você transforme os códigos JMP em 0x00 (NOP) e a transição será cancelada, mas faça outra transição depois, fazendo com que esses três 0xFF sejam colocados.

Em seguida, eu precisava de energia de 12 volts. No começo, eu queria me conectar ao Mikrosh PSU, mas depois vi uma torção no meio do cabo de alimentação do ThinkPad. Lembro-me de como essa reviravolta apareceu, essa faia era alimentada por um carro, para afinação de chips de todos os tipos de "janeiro" e "Bosh", quando a primeira injeção de "cinzéis" apareceu.
Depois de torcer a torção, enrolei um cabo com um conector DJK-11b e o LED vermelho no programador acendeu alegremente.

Depois de ligar o laptop, vi o seguinte:

Ao mesmo tempo, "dzzzzz-CLAT !!!" era ouvido uma vez por segundo.
Sim! Isso significava que o disco rígido do laptop não estava funcionando. Fiquei triste por 10 a 15 minutos e percebi que nem tudo estava perdido e que este ThinkPad possui um CD-ROM. Revirando o lixo, encontrei 3 espaços em branco no DVD, mas preciso de um CD!

Então liguei para meu irmão novamente e pedi para comprar 3 discos CD-R em Auchan. Para descrever a criação de um CD-ROM com o MS-DOS 6.22 aqui, acho que não faz sentido, acrescentarei que, além do MS-DOS, coloquei o programa de costura "PGM02101" (está abaixo dos dos) e o próprio firmware na forma do arquivo "ROM_V1.BIN "E" Norton Commander "versão 5.0.

Então pegue dois. Depois de ligar a faia, coloquei o espaço em branco no CD-ROM e pressione "F1". Um LED amarelo acende no CD-ROM e ouço "kva-kva-kva-kva-pyk!", Depois uma pausa e novamente "kva-kva-kva-kva-pyk!" Isso acontece cerca de vinte vezes e, em seguida, aparece uma inscrição misteriosa:


Muito provavelmente isso significa que o "sidyuk" também está dobrado.

Não havia outra saída senão desmontar a unidade de CD-ROM. Acabou sendo muito pó e ainda não está claro para mim pó preto, de onde veio, não estava claro para mim, especialmente porque pelo menos cinco anos se passaram desde o último uso dessa faia e todo esse tempo estava deitado em uma prateleira de celofane. Então decidi que era Tangris, e limpei-o com ousadia da entrada. Além disso, ele esfregou levemente as cabeças-guia com litol e esfregou as lentes com um "bastão" de algodão com álcool.

Ajudou, a unidade piscou, coaxou e vi um prompt do DOS na tela. HOORAY!
“Norton” não foi iniciado, ocorreu um erro “Erro de disco ao ler (ou gravar) a unidade A:”. Eu pensei que ele estava gravando algo para seus próprios propósitos, mas não conseguiu gravar no CD-ROM. Bem, para o inferno com ele, agora nem consigo entender por que eu precisava dele.
Em geral, “DIR”, depois “pgm02101.exe” e agora na tela o tão esperado programa PGM02 oferece a opção de escolher uma porta LPT. Escolha LPT 1 (0x378).

O firmware do K573RF5 requer uma fonte de alimentação adicional de + 25V. Tive a sorte de encontrar uma unidade com essa voltagem. Eu tenho uma impressora HP Deskjet 2050a, portanto ela é alimentada por uma fonte de alimentação de 30V. Felizmente, eu tinha um multímetro e foi fácil descobrir a polaridade no conector.

Após o processo do firmware, verificou-se que o firmware não funciona. Ou seja, o processo termina, mas no chip ROM 0xFF ainda é lido em todos os endereços. O método de cutucar com um multímetro no soquete mostrou que não há tensão de programação no pino PGM. Aconteceu que o transistor VT17 (KT815G) "voou" no programador e tive que trocá-lo.

Tem sido feito! E leia corretamente!

Falha inesperada no pé

Quando o chip ROM entrou no controlador, eu queria verificar sua legibilidade. Eu queria usar o Monitor do Sistema e exibir a área 0xF000-0xF7FF usando a diretiva "D". Apertei “DF0” ... Quando apertei “0” nada aconteceu, a tecla não funcionou.
Então digitei “DEFFF, F7FF” e depois de pressionar “VK”, vi o que queria na tela. Mas, para iniciar o download do cartão SD, era necessário inserir "GF000" e pressionar "VK".

No começo, pensei que o assunto estava nos contatos, mas, como se viu, várias chaves não funcionaram. Essas eram as teclas "8", "espaço", "Yu", "X", "P", "b" e a seta para cima.
Abrindo o diagrama, vi que esta é a primeira coluna vertical de chaves. O pino PB0 do chip D39 (KR580BB55) foi responsável por esta coluna. A propósito, os diodos são indicados no circuito para desacoplar as colunas, mas, na verdade, resistores de 300 Ohm estão instalados.


O que é isso? O hack do fabricante?
Ao reparar, substitua esses resistores por diodos. Mas como faço para testar o controlador?

Nova Esperança

Eu tive que implantar o ThinkPad e o programador com fontes de alimentação novamente. Nos endereços 0xF7CE - 0xF7D0 eu "terminei" os códigos 0xC3, 0x00, 0xF0; o que significa JMP F000.

Agora é possível iniciar não apenas com o comando "GF000", mas também com o "GF7CE", onde as chaves não funcionais não estão envolvidas. Após o início, tudo deu certo e, em vez do sistema operacional, foi carregado um programa que trouxe “MIKROSHA OS” para a tela.

Não posso realizar reparos agora, mas existem duas peças no microchip KR580VV55 e a segunda praticamente não é usada. Existe uma idéia para trocá-los e substituir o defeituoso. Portanto, na terceira vez, liguei para meu irmão e me pedi para trazer uma bomba dessoldadora, fluxo "LTI-120", solda e ... outra Mikrosha.

Sim, eu não tenho Mikrosh sozinho, e o que ele trouxe é quase um exemplo de museu "em óleo". O fato é que, quando meu pai me comprou Mikrosha, ele foi convidado a comprar outro, e ele comprou. Mas algo deu errado, e o homem, por algum motivo, recusou-se a aceitá-lo.
Então ela ficou deitada por 30 anos.


A propósito, neste segundo Mikrosha também existem resistores em vez de diodos, e como os dois carros são do mesmo lote, suponho que seja o caso em todo o lote.



Será necessário alterar cuidadosamente os resistores para diodos.
Enquanto isso, vou usá-lo para concluir este projeto. Sim, há também o terceiro Mikrosha, mas vou falar sobre ela em outro momento. Só posso dizer que foi severamente desfigurado por um dos meus colegas de classe "naquela época" e estou restaurando-o lentamente, mas não será autêntico, mas, pelo contrário, modificado para super capacidades, e já usando microcontroladores e CPLD. Este será um projeto diferente.

Listagens e códigos


O 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
Aqui está o código completo do firmware no formato HEX (2048 bytes). Para obter o binário, você pode usar o utilitário HEX2BIN.

Listagem
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
Aqui está uma lista, foram removidos lugares vazios por conveniência.

As sub-rotinas de envio e leitura de bytes estão localizadas nos endereços 0xF600 e 0xF66C, respectivamente, são escritas em formato expandido sem loops, o que proporciona uma alta velocidade do programa.

Mencionarei mais uma vez que esta é uma primeira versão bruta, que mudará visivelmente e será complementada. Mas agora eu não preciso de carregamento acústico através da diretiva “I”.

Dispositivo de iniciaçâo

Como já mencionado, no setor de inicialização no endereço 0x1BB está a assinatura “MicrOS” e, depois, 4 bytes com o endereço do programa do SO. O BSVV carrega 7 setores de 512 bytes na área 0xE000 - 0xEDFF e transfere o controle para o endereço 0xE000. O carregamento é realizado na página zero. O restante das páginas já será preenchido pelo sistema operacional, se necessário (e quando vou construir pontes). Para a "Instalação" correta do sistema operacional no cartão SD, após a formatação, escreva o arquivo no sistema operacional. Em seguida, encontre o número do primeiro setor desse arquivo e escreva a assinatura e o endereço no setor de inicialização. O endereço deve ser especificado em setores (e não em bytes). A ordem de bytes big endian, ou seja, o último byte baixo (com endereço alto).

A propósito, eu vou automatizar esse processo de instalação do sistema operacional, talvez usando as ferramentas Mikroshi, e haverá outra sub-rotina no BSVV.

Qual é o próximo?

Agora eu deveria começar a escrever o SO, mas antes disso eu decidi escrever outro programa. Agora, os cartões SD valem um centavo e eu queria criar um cartão SD separado com jogos. Ou seja, grave todos os jogos que posso encontrar na Internet neste cartão e, em vez do SO, crie um programa que me mostre uma grande lista de jogos. Você também pode procurar um jogo pelo nome ao entrar pelo teclado. Depois de escolher um jogo, ele é carregado na RAM e lançado.

Esse programa me permitirá jogar no Mikrosh sem me preocupar com o trabalho no console do DOS. Vou chamar esse programa, "Game Manager". E sobre ela, provavelmente, será o próximo capítulo.

E em outro cartão, pretendo criar um DOS normal para programas como Basic, Editor e Assembler, etc.

Algumas letras e popularização da programação

De alguma forma, meu irmão e eu sentamos e fumamos, e ele perguntou por que eu tinha uma aparência tão pensativa?

Naquela época, eu pensava em “pontes” e era necessário criar um subprograma “LDA-Bridge”. Mas como falar desse problema para uma pessoa que não conhece programação, montador, nem como o processador funciona e, em geral ...

comecei assim:
imagine, digo que existem 8 armazéns e cada um tem um chefe. Há um correio. A tarefa é organizar o transporte de mercadorias de armazém em armazém, mas há limitações. E outra dificuldade é a velocidade.
Tentei dizer que o código de correio acaba sendo muito grande e gera muitas chamadas para a pilha e muitas operações com registros. Então, para um entendimento completo, meu irmão me fez perguntas e eu as respondi, e funcionou!

Depois que perguntou se era possível fazer 8 correios, onde cada um estava anexado ao seu armazém e ele não precisava se lembrar para quem retornar, ele sempre voltava ao seu armazém.
Isso realmente simplificou bastante e agiliza as operações. Agora, antes de mudar de página, você não precisa conhecer e lembrar a página atual para retornar. Você pode mudar imediatamente a página e ler os dados. E então mude a página para a especificada e retorne. Isso produziu resultados, embora ocupasse um pouco de espaço, mas aumentou significativamente a produtividade.

Subtotal

Meu HelloWorld é iniciado com êxito em ambas as máquinas. O tempo desde o pressionamento de “VK” até a aparência da inscrição não leva mais que dois segundos, em 3584 bytes. Em vez disso, cerca de 1,5 segundos. Não há nada para medir com mais precisão. Eu acho que esse é um bom resultado.

É tudo por agora. Obrigado pela atenção! Continua…

All Articles