Mikrosha. Bagian dua ROM dan BSVV


Pada bab sebelumnya, saya menggambarkan bagian besi pengontrol kartu SD PC Microsha saya. Dan bab ini keluar program-filosofis. Siapa yang peduli - selamat datang!


ROM tulis

Seperti yang saya tulis di bagian sebelumnya, saya memiliki programer ROM lama untuk LPT. Saya tidak ingin berkomunikasi dengan emulasi LPT, di samping itu, saya harus memahami bagaimana programmer bekerja, bagaimana ia dikontrol, semua perintah dan waktu tunda.

Kemudian saya menelepon saudara lelaki saya, yang adalah pekerja layanan masyarakat dan bekerja. Saya memintanya untuk menelepon saya di tempat kerja dan mengambil laptop IBM ThinkPad 760ed pertama saya di sana. Dan hari berikutnya aku punya beech.


Namun, saya belum siap untuk mem-flash. Saya perlu mengubah semua alamat dari 6xxx ke Fxxx, di mana xxx adalah 12 bit dari alamat firmware. Ini diperlukan karena arsitektur prosesor KP580VM80A, sistem komandonya tidak melibatkan transfer kode dari satu area memori ke yang lain, yang menyebabkan beberapa kesulitan.
Ngomong-ngomong, karena ini, saya butuh banyak waktu untuk mengedit firmware secara umum, karena sebagai hasil dari optimasi kode tingkat rendah, "lubang" mulai terbentuk di antara subprogram. Ukuran dari bagian-bagian yang tidak terpakai ini kadang-kadang mencapai 10 byte, dan saya tidak mampu menyia-nyiakannya. Saya harus menggeser sendi dan memastikan bahwa kode "tidak pindah" pada panggilan dan transisi.

Pada akhirnya, saya mengumpulkan firmware yang minimal. Ini masih opsi kasar, yang biasanya dapat memuat kode yang diletakkan dalam RAM tambahan dan kontrol transfer. Kelembaban firmware terletak pada kenyataan bahwa sejauh ini saya belum datang dengan optimasi yang baik dan perangkat fungsional yang nyaman yang saya sebut "jembatan". Fungsi ini diperlukan untuk penggunaan penuh dari semua RAM tambahan. Tetapi saya menjadi bingung dalam bekerja dengan tumpukan saya menangkap banyak gangguan dan memutuskan untuk meninggalkan masalah untuk nanti, tetapi untuk saat ini, hanya menggunakan 4 KB RAM baru harus cukup untuk memulai. Dan setelah itu akan dimungkinkan untuk menambahkan fungsi ini, ketika akan menjadi jelas persyaratan apa yang diperlukan untuk Sistem Operasi. Dan selain ruang yang tersisa di bawah "jembatan", saya memiliki sekitar 600 byte ruang kosong.

Saya mengisi semua ruang kosong dengan byte 0xFF, ini akan memungkinkan saya untuk "menyelesaikan" blok baru ke ROM di masa depan tanpa menghapus semua memori dengan radiasi ultraviolet. Faktanya adalah bahwa "EPROMs" ini diatur sehingga firmware terdiri dari mengubah 1 sedikit menjadi 0. Dengan demikian, 0xFF dapat diubah menjadi kode apa pun. Selain itu, setelah beberapa transisi utama “JMP” saya meninggalkan 3 kode 0xFF. Ini akan memungkinkan Anda untuk mengubah kode JMP sendiri menjadi 0x00 (NOP) dan transisi akan dibatalkan, tetapi menempatkan transisi lain setelah itu, membuatnya dari ketiga 0xFF ini.

Selanjutnya, saya membutuhkan daya 12 volt. Pada awalnya saya ingin terhubung ke Mikrosh PSU, tetapi kemudian saya melihat twist di tengah kabel daya ThinkPad. Saya ingat bagaimana twist ini muncul, beech ini ditenagai oleh mobil, untuk penyetelan chip segala macam "Januari" dan "Bosh", ketika "pahat" injeksi pertama kali muncul.
Setelah memutar twist, saya membungkus kabel dengan konektor DJK-11b di sana dan LED merah pada programmer menyala riang.

Setelah menyalakan laptop, saya melihat yang berikut:

Pada saat yang sama, "dzzzzz-CLAT !!!" terdengar satu detik sekali.
Iya! Ini berarti bahwa HDD di laptop tidak berfungsi. Saya sedih selama 10-15 menit, dan kemudian saya menyadari bahwa tidak semuanya hilang, dan ThinkPad ini memiliki CD-ROM. Mengaduk-aduk sampah, saya menemukan 3 DVD kosong, tapi saya butuh CD!

Kemudian saya menelepon saudara saya lagi dan meminta untuk membeli 3 CD-R di Auchan. Untuk menjelaskan pembuatan CD-ROM dengan MS-DOS 6.22 di sini, saya pikir tidak masuk akal, saya hanya akan menambahkan bahwa selain MS-DOS, saya menempatkan program menjahit "PGM02101" (ini hanya di bawah dos) dan firmware itu sendiri dalam bentuk file "ROM_V1.BIN "Dan" Norton Commander "versi 5.0.

Jadi, ambil dua. Setelah menyalakan beech, saya memasukkan yang kosong di CD-ROM, dan tekan "F1". LED kuning menyala pada CD-ROM dan saya mendengar "kva-kva-kva-kva-pyk!", Kemudian jeda dan lagi "kva-kva-kva-kva-kva-pyk!" Ini terjadi sekitar dua puluh kali, dan kemudian sebuah prasasti misterius muncul:


Kemungkinan besar ini berarti bahwa "sidyuk" juga bengkok.

Tidak ada jalan keluar selain membongkar drive CD-ROM. Ternyata banyak debu dan masih belum jelas bagi saya bubuk hitam, dari mana asalnya, itu tidak jelas bagi saya, terutama karena setidaknya lima tahun telah berlalu sejak penggunaan terakhir beech ini dan selama ini berbaring di rak di plastik. Kemudian saya memutuskan bahwa itu Tangris, dan dengan berani membersihkannya dari drive. Selain itu, ia sedikit mengolesi kepala pemandu dengan lithol dan menggosok lensa dengan tongkat "telinga" dengan alkohol.

Itu membantu, drive berkedip, serak, dan saya melihat prompt DOS di layar. HOORAY!
"Norton" tidak memulai, kesalahan "membaca kesalahan disk (atau menulis) drive A:" terjadi. Saya pikir dia merekam sesuatu untuk keperluannya sendiri, tetapi tidak bisa menulis ke CD-ROM. Yah, persetan dengan dia, sekarang aku bahkan tidak bisa mengerti mengapa aku membutuhkannya.
Secara umum, "DIR", dan kemudian "pgm02101.exe" dan sekarang di layar program PGM02 yang ditunggu-tunggu menawarkan untuk memilih port LPT. Pilih LPT 1 (0x378).

Firmware K573RF5 membutuhkan catu daya + 25V tambahan. Saya cukup beruntung menemukan unit dengan voltase seperti itu. Saya memiliki printer HP Deskjet 2050a, jadi ini didukung oleh catu daya 30V. Untungnya, saya memiliki multimeter dan mudah untuk mengetahui polaritas pada konektornya.

Setelah proses firmware, ternyata firmware tidak berfungsi. Artinya, prosesnya berakhir, tetapi dalam chip ROM 0xFF masih dibaca di semua alamat. Metode menyodok dengan multimeter di soket menunjukkan bahwa tidak ada tegangan pemrograman pada pin PGM. Ternyata transistor VT17 (KT815G) “terbang” di programmer, dan saya harus mengubahnya.

Itu sudah diselesaikan! Dan baca dengan benar!

Kegagalan kaki yang tidak terduga

Ketika chip ROM masuk ke controller, saya ingin memeriksa keterbacaannya. Saya ingin menggunakan Monitor Sistem dan menampilkan area 0xF000-0xF7FF menggunakan petunjuk "D". Saya menekan "DF0" ... Ketika saya menekan "0" tidak ada yang terjadi, kuncinya tidak berfungsi.
Kemudian saya mengetik "DEFFF, F7FF" dan setelah menekan "VK" saya melihat apa yang saya inginkan di layar. Tetapi untuk memulai pengunduhan dari kartu SD, Anda harus memasukkan "GF000" dan tekan "VK".

Awalnya saya berpikir bahwa masalahnya ada di kontak, tetapi ternyata sejumlah kunci tidak berfungsi. Ini adalah tombol "8", "spasi", "Yu", "X", "P", "b" dan panah ke atas.
Membuka diagram, saya melihat bahwa ini adalah kolom kunci vertikal pertama. Pin PB0 dari chip D39 (KR580BB55) bertanggung jawab untuk kolom ini. Omong-omong, dioda ditunjukkan dalam rangkaian untuk decoupling kolom, tetapi pada kenyataannya, 300 Ohm resistor dipasang.


Apa itu? Retasan pabrikan?
Saat memperbaiki, ganti resistor ini dengan dioda. Tapi bagaimana cara menguji controller?

Harapan baru

Saya harus menggunakan ThinkPad dan programmer dengan catu daya lagi. Di alamat 0xF7CE - 0xF7D0 saya "selesai" kode 0xC3, 0x00, 0xF0; yang berarti JMP F000.

Memulai sekarang dimungkinkan tidak hanya dengan perintah "GF000", tetapi juga dengan "GF7CE", di mana kunci yang tidak berfungsi tidak terlibat. Setelah memulai, semuanya berjalan dengan baik, dan bukannya OS, sebuah program dimuat yang membawa "MIKROSHA OS" ke layar.

Saya tidak bisa melakukan perbaikan sekarang, tetapi ada dua potong di microchip KR580VV55, dan yang kedua praktis tidak digunakan. Ada ide untuk menukar mereka, dan kemudian ganti yang salah. Oleh karena itu, ketiga kalinya saya menelepon saudara saya, dan meminta saya untuk membawa pompa pematrian, fluks "LTI-120", solder dan ... Mikrosha lain.

Ya, saya tidak punya Mikrosh sendirian, dan yang ia bawa hampir merupakan contoh museum “dengan minyak”. Masalahnya adalah ketika ayah saya membelikan saya Mikrosha, ia diminta untuk membeli yang lain, dan ia membelinya. Tetapi ada yang tidak beres, dan lelaki itu karena suatu alasan menolak untuk menerimanya.
Jadi dia berbaring selama 30 tahun.


Ngomong-ngomong, pada Mikrosha kedua ini ada juga resistor bukan dioda, dan karena kedua mobil dari batch yang sama, saya kira itu adalah kasus di seluruh batch.



Penting untuk secara hati-hati mengubah resistor menjadi dioda dalam hal ini.
Sementara itu, saya akan menggunakannya untuk menyelesaikan proyek ini. Ya, ada juga Mikrosha ketiga, tapi aku akan membicarakannya lain kali. Saya hanya bisa mengatakan bahwa itu sangat cacat oleh salah satu teman sekelas saya "pada masa itu" dan saya perlahan memulihkannya, tetapi itu tidak akan asli, tetapi sebaliknya diubah menjadi kemampuan super, dan sudah menggunakan mikrokontroler dan CPLD. Ini akan menjadi proyek yang berbeda.

Daftar dan Kode


Kode
: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
Berikut adalah kode firmware lengkap dalam format HEX (2048 bytes). Untuk mendapatkan biner, Anda bisa menggunakan utilitas HEX2BIN.

Daftar
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
Ini adalah daftar, tempat kosong telah dihapus untuk kenyamanan.

Pengiriman byte dan membaca byte subrutin terletak di alamat 0xF600 dan 0xF66C, masing-masing, mereka ditulis dalam bentuk diperluas tanpa loop, ini memberikan kecepatan tinggi dari program.

Saya akan menyebutkan sekali lagi bahwa ini adalah versi mentah dan pertama, yang akan berubah dan ditambahkan. Tapi sekarang saya tidak perlu memuat akustik melalui arahan “Saya”.

Perangkat boot

Seperti yang telah disebutkan, di sektor boot di alamat 0x1BB adalah tanda tangan "MicrOS", dan setelah itu 4 byte dengan alamat program OS. BSVV memuat 7 sektor 512 byte di area 0xE000 - 0xEDFF dan mentransfer kontrol ke alamat 0xE000. Memuat dilakukan di halaman nol. Sisa halaman sudah akan diisi oleh OS, jika perlu (dan ketika saya akan membangun jembatan). Untuk "Instalasi" yang benar dari OS pada kartu SD, setelah memformat, tulis file dari OS. Kemudian cari nomor sektor pertama dari file ini dan tulis tanda tangan dan alamatnya di sektor boot. Alamat harus ditentukan dalam sektor (dan bukan dalam byte). Urutan byte Big-endian, yaitu byte terendah terakhir (dengan alamat tinggi).

Omong-omong, saya akan mengotomatiskan proses instalasi OS ini, bahkan mungkin menggunakan alat Mikroshi, maka akan ada subrutin lain dalam BSVV.

Apa berikutnya?

Sekarang saya harus mulai menulis OS, tetapi sebelum itu saya memutuskan untuk menulis program lain. Kartu SD sekarang bernilai satu sen, dan saya ingin membuat kartu SD terpisah dengan permainan. Yaitu, rekam semua permainan yang dapat saya temukan di Internet pada kartu ini, dan bukannya OS membuat program yang menunjukkan daftar permainan yang besar. Anda juga dapat mencari game dengan nama saat memasukkan dari keyboard. Setelah memilih game, game dimuat ke dalam RAM dan diluncurkan.

Program seperti itu akan memungkinkan saya untuk bermain game di Mikrosh tanpa repot-repot bekerja di konsol DOS. Saya akan memanggil program semacam itu, "Game Manager." Dan tentang dia, kemungkinan besar, akan menjadi bab berikutnya.

Dan di kartu lain, saya berencana untuk membuat DOS normal untuk program-program seperti Basic, Editor dan Assembler, dll.

Beberapa lirik dan mempopulerkan pemrograman

Entah bagaimana, saudara lelaki saya dan saya duduk dan merokok, dan dia bertanya mengapa saya memiliki pandangan yang sangat bijaksana?

Saat itu saya sedang memikirkan “jembatan” dan perlu membuat subprogram “LDA-Jembatan”. Tetapi bagaimana berbicara tentang masalah seperti itu kepada seseorang yang tidak tahu tentang pemrograman, atau tentang assembler, atau tentang bagaimana prosesor bekerja, dan secara umum ...

Saya mulai seperti ini:
Bayangkan, saya mengatakan bahwa ada 8 gudang, dan masing-masing memiliki bos. Ada seorang kurir. Tugasnya adalah mengatur pengiriman barang dari gudang ke gudang, tetapi ada batasannya. Dan kesulitan lainnya adalah kecepatan.
Saya mencoba mengatakan bahwa kode kurir ternyata sangat besar, dan ternyata banyak panggilan ke stack dan banyak operasi dengan register. Kemudian, untuk pemahaman yang lengkap, saudara lelaki saya bertanya kepada saya, dan saya menjawabnya, dan itu berhasil!

Begitu dia bertanya apakah mungkin membuat 8 kurir, di mana masing-masing terpasang ke gudangnya dan dia tidak perlu mengingat siapa yang harus kembali, dia selalu kembali ke gudangnya.
Ini sangat disederhanakan dan mempercepat operasi. Sekarang, sebelum berpindah halaman, Anda tidak perlu tahu dan mengingat kembali halaman saat ini, Anda dapat segera beralih halaman dan membaca data. Dan kemudian beralih halaman ke yang ditentukan keras dan kembali. Ini menghasilkan hasil, meskipun memakan sedikit ruang, tetapi secara signifikan meningkatkan produktivitas.

Subtotal

HelloWorld saya berhasil diluncurkan di kedua mesin. Waktu dari menekan "VK" ke tampilan prasasti tidak lebih dari dua detik, sebesar 3.584 byte. Melainkan sekitar 1,5 detik. Tidak ada yang lebih tepat untuk diukur. Saya pikir ini adalah hasil yang bagus.

Itu saja untuk saat ini. Terimakasih atas perhatiannya! Bersambung…

All Articles