
В предыдущей главе я описал железную часть моего контроллера SD карты для ПЭВМ «Микроша». А эта глава вышла программно-филосовской. Кому интересно — добро пожаловать!
Как я писал в предыдущей части, у меня старенький программатор ПЗУ под LPT. Связываться с эмуляцией LPT мне не хотелось, кроме того пришлось бы разбираться как работает программатор, как он управляется, все его команды и временные задержки.
Тогда я позвонил своему брату, который является сотрудником коммунальных служб и работает. Я попросил его заехать ко мне на работу и забрать там мой первый ноутбук IBM ThinkPad 760ed. И на следующий день бук был у меня.

Однако прошивать я еще был не готов. Мне нужно было поменять все адреса с 6xxx на Fxxx, где xxx — 12 бит адреса прошивки. Это было нужно из-за архитектуры процессора КР580ВМ80А, его система команд не предполагает переноса кода из одной области памяти в другую, что вызывает некоторые трудности.
Кстати, из-за этого у меня ушло много времени на общую правку прошивки, поскольку в результате низкоуровневой оптимизации кода, между подпрограммами стали образовываться «дырки». Размер этих не используемых участков порой доходил до 10 байт, и такое расточительство я себе позволить не мог. Приходилось сдвигать стыки и убеждаться, что код «не съехал» по вызовам и переходам.
В конечном итоге, я собрал минимально жизнеспособную прошивку. Это еще сырой вариант, который может нормально загружать положенный код в доп.ОЗУ и передавать управление. Сырость-же прошивки заключается в том, что пока я не придумал хорошей оптимизации и удобного устройства того функционала, который я называю «мосты». Этот функционал нужен, для полного использования всей дополнительной ОЗУ. Но я запутался в работе со стеком наловил много глюков и решил оставить проблему на потом, а пока использовать только 4 кБ новой ОЗУ, для начала должно хватить. А после можно будет дописать этот функционал, когда уже станет видно какие требования нужны для Операционной Системы. И еще помимо места оставленного под «мосты» у меня оказалось около 600 байт свободного пространства.
Все свободное место я заполнил байтами 0xFF, это позволит в дальнейшем «дошить» в ПЗУ новые блоки не стирая всю память ультрафиолетовым излучением. Дело в том, что эти «EPROMы» устроены так, что прошивка заключается в изменении 1 в бите на 0. Таким образом 0xFF можно превратить в любой код. Кроме того, после пары ключевых переходов «JMP» я оставил по 3 кода 0xFF. Это позволит превратить сами коды «JMP» в 0x00 (NOP) и переход будет отменен, но поставить другой переход после него, сделав его из этих трех 0xFF.
Далее мне потребовалось питание 12 в. Сначала я хотел подключиться к БП Микроши, но потом увидел скрутку посредине кабеля питания ThinkPad`а. Помню как появилась эта скрутка, этот бук запитывался от автомобиля, для чиптюнинга всяких «Январей» и «Бошей», когда появились первые инжекторные «зубилы».
Раскрутив скрутку, я примотал туда кабель с разъемом «DJK-11b» и на программаторе весело зажегся красный светодиод.
После включения ноутбука я увидел следующее:

При этом раз в секунду раздавалось «дззззз-КЛАЦ!!!».
Да! Это означало, что HDD в ноутбуке не работает. Печалился я 10-15 минут, а потом понял, что еще не все потеряно, и что на этом «ThinkPad`е» имеется CD-ROM. Порывшись в барахле, я нашел 3 болванки DVD, но мне то нужно CD!
Тогда я снова позвонил брату и попросил купить а Ашане 3 болванки «CD-R». Описывать здесь создание CD диска с MS-DOS 6.22, полагаю смысла нет, добавлю только, что помимо MS-DOS я поместил на болванку программу для шитья «PGM02101» (она как раз под дос), саму прошивку в виде файла «ROM_V1.BIN» и «Norton Commander» версии 5.0.
Итак, дубль два. После включения бука, засовываю болванку в CD-ROM, и нажимаю «F1». На CD-ROM зажигается желтый светодиод и я слышу «ква-ква-ква-ква-пык!», потом пауза и снова «ква-ква-ква-ква-пык!». Так происходит раз двадцать, а потом появляется загадочная надпись:

Скорее всего это означает, что и «сидюк» тоже загнулся.
Далее выхода не было, кроме как разбирать привод CD-ROM. В нем оказалось куча пыли и еще не понятного мне черного порошка, откуда он там взялся, мне было не понятно, тем более, что с момента последнего использования этого бука прошло не менее 5ти лет и все это время он лежал на полке, в целлофане. Тогда я решил, что это «тангриз», и смело вычистил его из привода. Кроме того немного смазал литолом направляющие головки, и протер линзу ватной «ушной» палочкой со спиртом.
Это помогло, привод помигал, поквакал и я увидел на экране приглашение DOS. УРА!
«Norton» так и не запустился, возникала ошибка «Disk error reading (or writing) drive A:». Я подумал, что он что-то записывает для своих целей, а на CD-ROM записать не удавалось. Ну и черт с ним, я теперь вообще понять не могу, зачем он мне был нужен.
В общем «DIR», а потом «pgm02101.exe» и вот уже на экране долгожданная программа PGM02 предлагает выбрать LPT порт. Выбираем LPT 1 (0x378).
Для прошивки К573РФ5 требуется дополнительный источник питания +25в. Блок с таким напряжением мне посчастливилось найти. У меня есть принтер HP Deskjet 2050a, вот он и питается от БП с напряжением 30в. Благо, что у меня был мультиметр и удалось легко выяснить полярность на разъеме.
После процесса прошивки выяснилось, что прошивка не проходит. То есть процесс заканчивается, но в микросхеме ПЗУ по прежнему читается 0xFF по всем адресам. Метод тыка мультиметром в панельку показал, что отсутствует напряжение программирования на выводе PGM. Оказалось, в программаторе «полетел» транзистор VT17 (КТ815Г), и мне пришлось его поменять.

Прошилось! И прочиталось правильно!
Тогда я набрал «DEFFF,F7FF» и после нажатия «ВК» увидел на экране желаемое. Но для запуска загрузки с SD карты требовалось ввести «GF000» и нажать «ВК».
Сначала я думал, что дело в контактах, но как оказалось не работает еще ряд клавиш. Это были клавиши «8»,«пробел»,«Ю»,«Х»,«П»,«Ь» и стрелка вверх.
Открыв схему я увидел, что это первый вертикальный столбец клавиш. За этот столбец отвечал вывод PB0 микросхемы D39 (КР580ВВ55). Кстати в схеме для развязки столбцов указаны диоды, а по факту установлены резисторы номиналом 300 Ом.

Что это? Халтура производителя?
При ремонте заменю эти резисторы на диоды. Но как мне опробовать контроллер?
Теперь запуск возможен не только командой «GF000», но и «GF7CE», где не учавствуют нерабочие клавиши. После запуска все удалось, и вместо OS загрузилась программка, которая вывела «MIKROSHA OS» на экран.

Ремонт сейчас я проводить не могу, но в Микроше микросхем КР580ВВ55 две штуки, и вторая практически не используется. Есть идея поменять их местами, а потом уже заменить неисправную. Поэтому я в третий раз позвонил брату, и попросил привезти мне оловоотсос, флюс «ЛТИ-120», припой и… еще одну Микрошу.
Да-да, Микроша у меня не одна, и та, которую он привез является чуть-ли не музейным образцом «в масле». Дело все в том, что когда мой отец покупал мне Микрошу, то его попросили купить еще одну, и он купил. Но что-то пошло не так, и человек по какой-то причине отказался брать.
Так она и пролежала 30 лет.

Кстати на этой второй Микроше тоже вместо диодов стоят резисторы, и поскольку обе машинки из одной партии, то полагаю, что во всей партии такое.

Надо будет аккуратно и в этой поменять резисторы на диоды.
А пока я ей попользуюсь для того, что-бы закончить этот проект. Да, есть еще и третья Микроша, но о ней я расскажу как-нибудь в другой раз. Скажу только, что она сильно изуродована одним моим одноклассником «в те времена» и я ее потихоньку восстанавливаю, но она будет не аутентичной, а наоборот модифицирована до сверхвозможностей, и уже с применением микроконтроллеров и 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
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», а после нее 4 байта с адресом программы OS. БСВВ загружает 7 секторов по 512 байт в область 0xE000 — 0xEDFF и передает управление на адрес 0xE000. Загрузка осуществляется в нулевую страницу. Остальные страницы уже заполнит OS, если надо (и когда я налажу «мосты»). Для правильности «Установки» OS на SD карту, нужно после форматирования записать файл с OS. Потом найти номер первого сектора этого файла и прописать в загрузочный сектор сигнатуру и адрес. Адрес нужно указывать в секторах (а не в байтах). Порядок байтов Big-endian, то есть младший байт последний (со старшим адресом).Кстати, этот процесс установки OS я собираюсь автоматизировать, возможно даже средствами Микроши, тогда будет еще подпрограмма в БСВВ.
Сейчас бы следовало начать писать OS, но перед этим я решил написать другую программу. SD карты сейчас стоят копейки, и я захотел сделать отдельную SD карту с играми. То есть записать все-все игры, которые я смогу найти в интернете на эту карту, а вместо OS сделать программу, которая показывает мне большой список игр. Можно также сделать поиск игры по названию, при вводе с клавиатуры. После выбора игры, она загружается в ОЗУ и запускается.Такая программа позволит мне играть в игры на Микроше не заморачиваясь с работой в консоли DOS. Назову я такую программу «Диспетчер игр». И про нее, скорее всего, будет следующая глава.
А на другой карточке я планирую сделать уже нормальный DOS для программ типа Бейсик, Редактор и Ассемблер и т.д.
Как то мы с братом сидели и курили, и он поинтересовался почему у меня такой задумчивый вид?В то время я продумывал «мосты» и нужно было создать подпрограмму «LDA-Bridge». Но как рассказать о такой задаче человеку, который не знает ни про программирование, ни про ассемблер, ни про то как работает процессор, и вообще…
Я начал так:
Представь, говорю, что имеется 8 складов, и в каждом сидит по начальнику. Есть курьер. Задача наладить пересылку грузов со склада на склад, но есть ограничения. И еще одна трудность, это скорость.
Я пытался сказать, что код курьера получается очень большим, и что получается много обращений к стеку и много операций с регистрами. После чего, для полного понимания, брат задавал мне вопросы, а я на них отвечал, и это сработало!
Однажды он спросил, можно ли сделать 8 курьеров, где каждый прикреплен к своему складу и ему не нужно помнить к кому возвращаться, он возвращается всегда на свой склад.
Это действительно сильно упростило и убыстрило операции. Теперь не требуется перед переключением страниц узнать и запомнить текущую страницу для возврата, можно сразу переключить страницу и прочитать данные. А потом переключить страницу на жестко указанную и вернуться. Это дало результат, хоть и отняло немного места, но очень заметно повысило производительность.
На этом, пока, все. Спасибо за внимание! Продолжение следует…
Комментариев нет:
Отправить комментарий