米克罗莎。第二章 ROM和BSVV


在上一章中,我介绍了Microsha PC SD卡控制器的主要部分。而这一章是程序哲学的。谁在乎-欢迎光临!


ROM写

正如我在上一部分中所写,我有一个用于LPT的旧ROM编程器。我不想与LPT仿真进行通信,此外,我还必须了解程序员的工作方式,控制方式,所有命令和时间延迟。

然后我给哥哥打电话,哥哥是社区服务人员,正在工作。我要求他在工作中打电话给我,并在那里取我的第一台IBM ThinkPad 760ed笔记本电脑。第二天,我有了山毛榉。


但是,我还没准备好闪动。我需要将所有地址从6xxx更改为Fxxx,其中xxx是固件地址的12位。由于KP580VM80A处理器的体系结构,这是必需的;其命令系统不涉及从一个存储区到另一个存储区的代码传输,这会带来一些困难。
顺便说一下,正因为如此,我花了很多时间进行固件的一般编辑,因为由于底层代码优化的结果,子程序之间开始形成“漏洞”。这些未使用的部分的大小有时达到10个字节,我无法承受这样的浪费。我必须移动关节,并确保代码在调用和转换时“没有移动”。

最终,我组装了一个最低可行的固件。这仍然是一个粗略的选择,通常可以将已放置的代码加载到其他RAM中并进行传输控制。固件的缺点在于,到目前为止,我还没有为我称之为“网桥”的功能提供一个很好的优化和便捷的设备。充分利用所有其他RAM需要此功能。但是我在使用堆栈时感到困惑,因此遇到了很多故障,决定将问题留待以后再解决,但是就目前而言,仅使用4 KB的新RAM就足够了。之后,可以很容易地添加此功能,这将很清楚操作系统需要什么要求。除了在“桥”下留下的空间之外,我还有大约600字节的可用空间。

我用0xFF字节填充了所有可用空间,这使我将来可以“完成” ROM中的新块,而不会用紫外线擦除所有内存。事实是,这些“ EPROM”的排列方式使固件将1更改为0。因此,0xFF可以转换为任何代码。另外,在几次键转换“ JMP”之后,我留下了3个代码0xFF。这将使您可以将JMP代码本身转换为0x00(NOP),并且转换将被取消,但是在它之后放置另一个转换,使其从这三个0xFF开始。

接下来,我需要12伏电源。刚开始我想连接到Mikrosh PSU,但是后来我发现ThinkPad的电源线中间有弯曲。我记得这种扭曲是如何出现的,这是由汽车提供动力的山毛榉,用于在第一次注射“凿子”时对各种“一月”和“波什”进行切屑微调。
扭绞后,我用DJK-11b连接器包裹了电缆,并且编程器上的红色LED点亮。

打开笔记本电脑后,我看到了以下内容:

同时,每秒听到一次“ dzzzzz-CLAT !!!”。
是!这意味着笔记本电脑中的HDD无法正常工作。我伤心了10到15分钟,然后我意识到并没有丢失所有内容,并且此ThinkPad带有CD-ROM。翻遍垃圾,我发现了3个DVD空白,但我需要CD!

然后我再次给哥哥打电话,要求在欧尚购买3张CD-R光盘。为了在这里描述用MS-DOS 6.22创建CD-ROM,我认为这没有任何意义,我只补充说,除了MS-DOS,我还以文件“ ROM_V1.BIN”的形式放置了缝纫程序“ PGM02101”(位于dos下)和固件本身。 “和”诺顿指挥官” 5.0版。

所以拿两个。打开山毛榉后,将毛坯放入CD-ROM中,然后按“ F1”。 CD-ROM上的黄色LED点亮,我听到“ kva-kva-kva-kva-pyk!”,然后停顿一下,然后再次听到“ kva-kva-kva-kva-pyk!”。这种情况发生了大约二十次,然后出现了一个神秘的铭文:


这很可能意味着“ sidyuk”也弯曲了。

除了拆卸CD-ROM驱动器外,别无其他方法。事实证明,这是很多灰尘,但对我来说仍然不清楚黑色粉末的来源,对我来说还不清楚,特别是因为自从上次使用山毛榉以来至少已经过去了五年,而且一直以来它都躺在玻璃纸的架子上。然后,我确定它是Tangris,并大胆地将其从驱动器中清除了。另外,他用酒精轻轻涂抹了导向头,并用蘸有酒精的棉制“耳朵”棒擦了擦镜头。

它帮助了,驱动器闪烁,发出嘶哑的声音,我在屏幕上看到DOS提示符。哇!
“ Norton”未启动,发生“读取(或写入)驱动器A:磁盘错误”错误。我以为他是出于自己的目的录制东西,但无法写入CD-ROM。好吧,和他在一起,现在我什至不明白为什么我需要他。
通常,先是“ DIR”,然后是“ pgm02101.exe”,然后在屏幕上等待已久的程序PGM02提供了一个选择LPT端口的程序。选择LPT 1(0x378)。

K573RF5固件需要额外的+ 25V电源。我很幸运地找到了具有这种电压的单元。我有一台HP Deskjet 2050a打印机,所以它由30V电源供电。幸运的是,我有一个万用表,很容易找出连接器上的极性。

固件处理后,事实证明固件不起作用。即,该过程结束,但是在ROM芯片中仍在所有地址读取0xFF。用万用表插入插座的方法表明,PGM引脚上没有编程电压。事实证明,编程器中的VT17晶体管(KT815G)“飞了”,我必须对其进行更改。

它已经完成!并正确阅读!

意外足部衰竭

当ROM芯片进入控制器时,我想检查其可读性。我想使用系统监视器,并使用“ D”指令显示区域0xF000-0xF7FF。我按了“ DF0” ...当我按了“ 0”时,什么也没发生,按键不起作用。
然后我键入“ DEFFF,F7FF”,然后按“ VK”,在屏幕上看到了我想要的内容。但是要从SD卡开始下载,需要输入“ GF000”并按“ VK”。

起初我以为是联系人中的问题,但事实证明,许多键都无法使用。这些是键“ 8”,“空格”,“ Yu”,“ X”,“ P”,“ b”和向上箭头。
打开图,我看到这是键的第一垂直列。 D39芯片(KR580BB55)的PB0引脚负责此列。顺便说一句,在电路中显示了用于将列去耦的二极管,但实际上安装了300 Ohm电阻器。


它是什么?制造商的骇客?
维修时,请用二极管替换这些电阻。但是如何测试控制器?

新希望

我不得不再次部署带有电源的ThinkPad和编程器。在地址0xF7CE-0xF7D0中,我“完成”了代码0xC3、0x00、0xF0;这就是JMP F000。

现在,不仅可以使用“ GF000”命令启动,而且可以使用“ GF7CE”启动,其中不涉及非工作键。启动后,一切正常,并且加载了一个代替“ OS”的程序,该程序将“ MIKROSHA OS”显示在屏幕上。

我现在无法进行维修,但是KR580VV55微芯片有两块,而实际上第二块没有用。有一个想法可以交换它们,然后更换有故障的一个。因此,我第三次打电话给我的兄弟,要求我带一个拆焊泵,助焊剂“ LTI-120”,焊料和……另一个Mikrosha。

是的,我一个人没有米克罗什(Mikrosh),他带来的那几乎是一个博物馆的例子,“油中”。问题是当我父亲给我买了Mikrosha时,他被要求买另一个,然后他买了。但是出了点问题,该名男子出于某种原因拒绝接受。
所以她躺了30年。


顺便说一下,在第二个Mikrosha上,也有电阻器而不是二极管,并且由于两辆车都来自同一批次,所以我想整个批次都是这种情况。



在这种情况下,必须小心地将电阻更改为二极管。
同时,我将用它来完成这个项目。是的,还有第三个米克罗莎(Mikrosha),但我稍后再谈。我只能说它是“当时”我的一位同学严重毁容的,我正在慢慢地恢复它,但是它不是真实的,而是相反地被修改为超级功能,并且已经在使用微控制器和CPLD。这将是一个不同的项目。

清单和代码


编码
: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
这是十六进制格式(2048字节)的完整固件代码。要获取二进制文件,可以使用HEX2BIN实用程序。

清单
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
这是清单,为方便起见,已将其中的空白地方删除。

字节发送和读取字节子例程分别位于地址0xF600和0xF66C处,它们以扩展形式写入而没有循环,这提高了程序的速度。

我将再次提到,这是原始版本,将明显改变并加以补充。但是现在我不需要通过“ I”指令进行声学加载。

启动装置

如前所述,在引导扇区的地址0x1BB处是签名“ MicrOS”,其后是OS程序地址的4个字节。BSVV在区域0xE000-0xEDFF中装入512个字节的7个扇区,并将控制权转移到地址0xE000。加载在零页中进行。如有必要,其余页面将由OS填充(以及在我构建网桥时)。要在SD卡上正确安装OS,请在格式化后从OS写入文件。然后找到该文件第一个扇区的编号,并在引导扇区中写入签名和地址。地址必须以扇区(而不是字节)指定。Big-endian字节顺序,即最后一个低字节(具有高地址)。

顺便说一句,我将自动化该操作系统的安装过程,甚至使用Mikroshi工具,然后BSVV中将有另一个子例程。

下一步是什么?

现在我应该开始编写OS,但是在那之前我决定编写另一个程序。SD卡现在值一分钱,我想用游戏制作一张单独的SD卡。也就是说,在这张卡上记录我可以在Internet上找到的所有游戏,然后代替OS制作一个向我显示大量游戏的程序。从键盘输入时,您还可以按名称搜索游戏。选择游戏后,将其加载到RAM中并启动。

这样的程序可以让我在Mikrosh上玩游戏,而不必担心在DOS控制台中的工作。我将这种程序称为“游戏管理器”。关于她的话题,很可能会在下一章。

在另一张卡上,我计划为Basic,Editor和Assembler等程序制作普通的DOS。

一些歌词与程序设计的普及

不知何故,我的兄弟和我坐下来抽烟,他问我为什么有那么体贴的表情?

当时我正在考虑“桥梁”,因此有必要创建一个子程序“ LDA-Bridge”。但是如何向一个既不了解编程又不了解汇编程序,也不了解处理器如何工作的人谈论这个问题,总的来说......

我是这样开始的:
想象一下,我说有8个仓库,每个仓库都有一个老板。有快递员。任务是安排从一个仓库到另一个仓库的货物运输,但是有局限性。另一个困难是速度。
我试图说的是,快递代码非常大,并且导致了对堆栈的大量调用以及对寄存器的大量操作。然后,为了完全理解,我的兄弟问我问题,我回答了问题,它奏效了!

一旦他问到是否有可能制造8个快递员,每个快递员都固定在他的仓库中,而他又不需要记住要归谁,他就总是回到他的仓库。
这确实大大简化并加快了操作。现在,在切换页面之前,您无需知道并记住要返回的当前页面,您可以立即切换页面并读取数据。然后将页面切换到硬指定并返回。尽管虽然占用了一些空间,但仍产生了结果,但显着提高了生产率。

小计

我的HelloWorld在两台计算机上均成功启动。从按下“ VK”到出现铭文的时间不超过2秒,即3584字节。而是大约1.5秒。没有什么可以更精确地测量。我认为这是一个很好的结果。

目前为止就这样了。感谢您的关注!未完待续…

All Articles