Backend

Xoʻsh, Brick Game oʻyinlarida qanday protsessordan foydalanilgan? 2-qism

Oldingi maqolani yozayotganimda menga tajriba uchun tetrislarning navbatdagi namunalari kelayotgan edi va birinchi boʻlib mana shuni oldim:

Oldingi maqolani yozayotganimda menga tajriba uchun tetrislarning navbatdagi namunalari kelayotgan edi va birinchi boʻlib mana shuni oldim:

Allaqanday Taksun Brick Game


Bunday Tetrislar taxminan asrimiz birinchi oʻn yilligi oxirida sotuvga chiqa boshladi. Oldingi muvaffaqiyatsizlikning takrorlanishidan qoʻrqib, unda kristallni dekapsulyatsiya qilishning yangi usulini sinab koʻrdim. Buning mohiyati quyidagicha: kompaund tomchisi fen yordamida yumshoq, lekin moʻrt boʻlmagan (taxminan 150 daraja) holatgacha qizdiriladi. Qizdirishni toʻxtatmasdan ehtiyotkorlik bilan skalpel uchida kompaundni dastlab platadan, keyin esa oʻta ehtiyotkorlik bilan kristalldan ham ajratib olishga harakat qilamiz. Buni aytish oson, lekin aslida aksincha. Garchi uch urinishimning hammasi muvaffaqiyatli boʻlgan boʻlsa-da, pinsetning ehtiyotsiz harakati bilan kristallga zarar yetkazish ehtimoli hali ham yuqori. Biroq uy sharoitida noqulay boʻlgan har qanday kimyodan foydalanishga hojat yoʻq edi.

Shunday qilib, birinchi tetris kristalli:

Asl hajmda


Kutilganidek, texnik jarayon ancha tigʻiz. Afsuski, hech qanday taniqlik belgisi yoʻq, faqat 2008 raqami bor va bu maska yaratilgan yil boʻlsa kerak.

Chuqurroq tahlil qilishga urinmayman, lekin qisqacha aytadigan boʻlsak: yuqori oʻng burchakda 7,5 Kb ROM (buni optik mikroskop orqali vizual oʻqish juda qiyin boʻladi deb oʻylayman), uning ostida 384 B RAM mavjud. Yuqori chap burchakda esa koʻrsatmalar deshifratori (unga koʻra mikrokontrollerni aniqlashga harakat qilib koʻrish mumkin) bor. Yanglishishdan qoʻrqaman, ammo bu HT-443ʼga hech qanday aloqasi boʻlmagan 8 bitli mikrokontroller deb oʻylayman.

Navbatdagi Tetris qoʻlimga bir uyum lash-lush koʻrinishida tushdi, shuning uchun uning risoladagi davridagi koʻrinishini bilmayman. Platada 12/8/2002 sanasi koʻrsatilgan va tugmachalarning joylashuviga koʻra bu 2000-yillar boshiga xos boʻlgan 1 in 9999. Qurilma kristallining surati:

Katta hajmda


Mutlaqo bir xil arxitektura va kristallning maydoni ham deyarli oʻshanday, faqat joylashuvida biroz farq bor. 3 Kb ROM, 160 B RAM. Yana hech bir taniqlik belgisi yoʻq, faqat yil (?) — 2003.

Mana, tadbirning asosiy qahramoni — Tayvanning E-Star kompaniyasi ishlab chiqargan Super Brick Game E-23 PLUS MARK II 96 in 1:

Super Brick Game E-23 PLUS MARK II 96 IN 1


Undagi kompaund tomchisi oldingi ikkitasidagiga qaraganda ancha katta, shu sababli dekapsulyatsiya uchun yarim soatdan koʻproq ovora boʻldim. Ammo natija bunga arziydi:

Asl hajmda


Eski qadrdon HT-943 (u, shuningdek, HT443A0 ham), faqat avvalgi maqoladagi namunadan atigi bir yosh katta.

Kristallarning oʻlchamini solishtirish uchun guruh fotosuratini oldim:

Brick Gameʼda 1993, 2003 va 2008-yillarda (chapdan oʻngga) foydalanilgan mikrokontroller kristallari


Albatta, bu toʻrtta namunaga koʻra xulosa chiqarish juda erta, ammo Brick Game hali Tayvanda ishlab chiqarilayotgan 90-yillarning boshi va oʻrtalarida uning asosiy platformasi 4 bitli Holtek mikrokontrollerlari boʻlgan. 90-yillarning oxiri va 2000-yillarning boshlariga kelib bunday oʻyinchoqlar Xitoyda ommaviy ishlab chiqarila boshlanganda esa asosiy platforma mahalliy fabrikalarga yaqinroq boʻlgan platformaga oʻzgarganini taxmin qilish mumkin.

ROM ni oʻqish

Tabiiyki, meni birinchi navbatda ROM qiziqtirardi, ammo bir qarashda hafsalam pir boʻldi — u deyarli oʻqib boʻlmaydigan holatda edi:

ROM sohasining yoritkich toʻgʻri nurlari ostidagi fotosurati.


Yaxshiyamki, kristall burchak ostida yoritilsa, natija ideal boʻlmasa ham, lekin ancha yaxshilanar ekan:

ROM sohasining vertikal yoritkich qiya tushgan nurlari ostidagi fotosurati.


Endi “normal” tranzistorlardan hech qachon ochilmaydigan (uni bu yerda yoʻq deb hisoblash mumkin) tranzistorning kuchlanish chegarasini oshirish maqsadida polikremniy ostidagi oksid qatlami qalinligi oshirilgan tranzistorlarga oʻtish chegaralari aniq koʻrinib turibdi. Navbatdagi tasvirda qizil nuqtalar bilan “normal” tranzistorlar belgilangan, ularning oksidosti qatlami deshifrator signali orqali ochishga imkon beradi.


Endi bitlardan iborat bu boʻtqani qanday qilib baytlar ketma-ketligiga aylantirish yoki boshqacha qilib aytganda, ishni davom ettirish imkonini beradigan ROM obrazini olish mumkin?

Oʻtgan maqolada bu mavzuga biroz toʻxtalib oʻtgan edim, lekin bu yerda batafsilroq hikoya qilishga harakat qilaman. Buning ustiga, masala kutganimdan qiyinroq ekan.

ROM va yaqin atrofni batafsil koʻrib chiqamiz:


Ilgari taʼkidlaganimdek, har bir baytning bitta razryadiga tegishli bitlar yuqoridagi rasmda qora toʻrtburchaklar bilan belgilangan guruhlarga toʻplanadi. Baytni toʻgʻri oʻqish uchun bitlarning ustunligini aniqlashimiz kerak. Buning uchun ichki shinani (har bir guruhga ulangan) baytlar ustunligi datashitdagi koʻrsatmalar tavsifi orqali tiklanadigan koʻrsatma deshifratorigacha kuzatib borish mumkin. Shu tarzda aniqlangan razryad raqami tasvirda son bilan koʻrsatilgan.

Yuqorida har biridan ROM atrofidagi deshifrator chiziqlariga bir juft — toʻgʻridan toʻgʻri va invertorlangan (guruhga mos ravishda rangli chiziqlar bilan belgilangan) signal ketgan tranzistorlarning 12 ta takrorlanadigan guruhini (rangli toʻrtburchaklar bilan belgilangan) ajratib koʻrsatish mumkin. Oʻqilayotgan baytning 12 bitli adresi ushbu chiziqlar tomonidan belgilanadi, tranzistorlar guruhi esa koʻrsatmalar hisoblagichi, maʼlumotlar toʻplami (bu yerda u bir darajali) va qandaydir yordamchi mantiqning registr sxemalarini shakllantiradi deb taxmin qilish tabiiydir. Baytlarni toʻgʻri oʻqish tartibini bilish uchun deshifrator chiziqlari adres razryadlari ketma-ketligi bilan qanday bogʻliqligini aniqlash kerak. Bu bitlarning razryadi bilan bogʻliq holatga qaraganda biroz murakkabroq. 12 ta razryadning barchasi biz ilgariroq ustunligini aniqlagan 8 bitli ichki shinaga ulangan. Demak, razryadlarning bir qismi (chap va oʻngdagi toʻrt guruh) shinaning pastki razryadlarini oʻzaro boʻlib oladi. Shuning uchun oʻng tarafdagi sakkizta guruhga toʻliq mos keladigan va toʻrtta chap guruh uchun farq qiladigan registrlarning boshqaruv chiziqlarini qoʻshimcha tahlil qilishga toʻgʻri keldi. Demak, adresning chapdagi toʻrt biti koʻrsatmalar hisoblagichiga oʻngdagi 8 tadan alohida tarzda kiritiladi va shunga koʻra ularning ustunligi yuqori deb taxmin qilish mumkin. Tasvirda adres tartib raqamlari ham koʻrsatilgan.

Sxemani toʻliq tiklamasdan men aniqlay olmagan ikkita jihat bor: deshifrator chiziqlari juftligining qaysi biri toʻgʻridan toʻgʻri, qaysi biri esa invertorlangan signalni tashishi. Bu savol bitlarga ham taalluqli. Maʼlum boʻlishicha, ROMʼdan oʻqish tartibining 2 ta, baytni oʻqishning ham 2 ta varianti mavjud va bu juda maqbuldir.

Ammo amalda ayrim muammolarga duch keldim. Dastlab har bir variantning oʻnlab baytini qoʻlda oʻqib chiqdim, uni disassembly (dizassembl) qildim va u yerda kutganimni koʻrmadim. Men esa datashitdagi maʼlumotlarga asoslanib, bekor qilishdan soʻng mikrokontroller ishini boshlaydigan nol adresdagi shartsiz oʻtish kabi narsa bilan qarshilashni kutgandim. Xuddi shu shartsiz oʻtishlarni signaldagi uzilishlar yoki ular ishlatilmagan taqdirda, hech boʻlmaganda reti keladigan 4–8-manzillarda koʻrishni kutgandim. Ammo variantlarning biri ikkinchisidan gʻalatiroq edi va yuqorida bayon etilgan nazariyamizga mos kelmaydigan boshqa, ROMʼning ehtimoli kamroq bir talay oʻqish tartiblarini qayta tekshirishimga toʻgʻri keldi. Hech bir natijaga erisholmay, dastlabki toʻrtta variantdan maʼlum darajada normal boʻlgan birini tanlab, ROMʼni oʻqishni davom ettirdim va asta-sekin bu haqiqatan ham oʻqish uchun toʻgʻri variant ekaniga ishonch hosil qila boshladim. Shunchaki proshivka mualliflari signal uzilishlarni butunlay eʼtiborsiz qoldirgan va umuman olganda, biroz kutilmagan koʻrsatmalardan, masalan, ish boshlanganda xotira katagida darhol dekrement sodir boʻlishi va 0xEʼning hech qayerga jismonan ulanmagan PA portga chiqarilishidan foydalangan:

000:    dec [R3R2]                      ;0F
001:    timer on                        ;38
002:    mov A, 0xE                      ;7E
003:    out PA, A                       ;30
004:    mov R1R0, 0xFF                  ;5F0F
006:    in A, PP                        ;34
007:    ja0 04C                         ;804C
009:    mov A, 0xF                      ;7F
00A:    call E67                        ;FE67
00C:    jmp 002                         ;E002

Emulyator

Demak, toʻgʻri yoʻlda ekanimga ishonch hosil qilgach, ROMʼni ochishni davom ettirib, parallel ravishda unda biroz oldinroq yozishni boshlagan emulyatorimni sozladim. Bir necha kunlik bunday ish natijasida proshivka toʻliq tiklandi, emulyator tamoman sozlandi, ROM obrazidagi yaqqol xatolar tuzatildi. Nihoyat “U tirik!” deb qichqirgan Viktor Frankenshteyn his-tuygʻularni his qilgan holda displeyda uzoq kutilgan “01” ni koʻrdim.


Brick Game emulyatori

Albatta, avvaliga unchalik ham chiroyli emas edi — bu vaqtda displey segmentlaridan oʻyin maydonining faqat bir qismini qoʻshgan edim. Aytgancha, segmentlar xaritasini tiklayotganda, ular bir xil tarzda joylashmaganidan hayron boʻldim: bitta raqam uchun segmentlar bir tarzda, qoʻshni raqam uchun boshqacha tarzda, oʻyin maydonining bir qismi unday, boshqasi esa bunday — ushbu displey uchun kod yozgan dasturchilarga havas qilmayman.

Emulyator hali xom (masalan, ovoz umuman yoʻq) va bu ishni oxiriga yetkazishim hali aniq emas, ammo kimgadir oʻz emulyatorini yozish qiziq boʻlsa, u hozir ham proshivkani tadqiq qilishda yordam berishi mumkin. Shunchaki oʻyin oʻynash, oʻtgan vaqtlarni qumsash mumkin. Ilova sozlashning bazaviy vositalarini qoʻllab-quvvatlaydi, barcha registr va RAM tarkibini tezda oʻzgartirish mumkin. U PyQt6 yordamida Pythonʼda yozilgan, shuning uchun bu kutubxona tomonidan qoʻllab-quvvatlanadigan barcha operatsion tizimlarda (Linux, Windows va macOS) ishlashi mumkin. Manbalar githubʼda mavjud, oʻsha yerda proshivka obrazini ham topish mumkin.

Ehtimol, hali ham xatolar qolgan boʻlishi mumkin. Shuning uchun sizda Tetrisning xuddi shunday modeli boʻlsa va uning ishlashida asl nusxasidagiga nisbatan farqni sezsangiz, bu haqida yozing. Tuzatishga harakat qilaman.

 

Manba: Так какой же процессор использовался в играх Brick Game? Часть 2

#Brick Game
#Tetris
#Mikroelektronika
Mohirdev Telegram

Telegram kanalimizga obuna bo’lishni unutmang

Obuna bo'lish
habr.com

habr.com

habr.com

O'xshash maqolalar

SI-trener: yangi kasb boʻyicha katta qoʻllanma
Sunʼiy intellekt
YangiSoha

18-aprel, 2024

SI-trener: yangi kasb boʻyicha katta qoʻllanma

Neyrotarmoqlarni tarbiyalaydigan va oʻqitadigan kishilar bilan muloqot qilamiz.

Maqolani o'qish
GitHub nima va undan qanday foydalanish mumkin?
github
guide

18-aprel, 2024

GitHub nima va undan qanday foydalanish mumkin?

Dunyodagi eng mashhur AyTi loyihalar hostingi va birgalikda dasturlash platformasi haqida qisqacha qoʻllanma

Maqolani o'qish
4 milliard if operatori

16-aprel, 2024

4 milliard if operatori

Yaqinda ijtimoiy tarmoqlarni koʻrib chiqayotib, mana bu skrinshotga duch keldim. Albatta, unga yangi boshlayotgan dasturchining computer scienceʼdagi klassik muammo — qoldiq bilan boʻlinishni hal qilishga boʻlgan urinishini tanqid qilgan koʻplab dargʻazab sharhlar hamroh edi.

Maqolani o'qish
Bosim ostida testdan oʻtkazish (testing): biz avtonom sinov tizimini qanday yaratdik?
testing
machine learning

9-aprel, 2024

Bosim ostida testdan oʻtkazish (testing): biz avtonom sinov tizimini qanday yaratdik?

Birmuncha vaqt avval dasturni ishchi nusxa (production instance)ga yuklashdan soʻng avtomatik  testdan oʻtkazish (testing) kerak boʻladigan loyihada ishlagandim. Avtomatlashtirilgan testdan oʻtkazish (testing) bu – toʻliq sinovdan oʻtkazilmasdan oldin dasturiy taʼminotga yaqinda qoʻshilgan yoki oʻzgartirilgan funksiyalar oʻz oʻrnida ishlayotganini tezkor tekshirish usuli. Bu usul batafsil testdan oʻtkazishdan avval asosiy funksiyalar ishlayotganiga amin boʻlishga yordam beradi va oʻz-oʻzidan sifatni taʼminlashdagi tezkor bosqich sanaladi. Testdan oʻtkazish sozlamalari reliz turiga qarab dinamik ravishda oʻzgarib turishi kerak, chunki frontend va bekend relizlar turli vaqtlarda chiqarilgan hamda turlicha testdan oʻtkazish sozlamalarini talab etgan boʻladi.

Maqolani o'qish
Pomidorlardan qutulib qolish choralari: IT-konferensiya uchun ajoyib maʼruza tayyorlash

9-aprel, 2024

Pomidorlardan qutulib qolish choralari: IT-konferensiya uchun ajoyib maʼruza tayyorlash

Konferensiyada nutq soʻzlashga tayyorgarlik — maʼruzachidan koʻp vaqt va kuch talab qiladigan murakkab jarayon. Shuning uchun nega u yerga borayotganingizni, nima soʻzlab berishni va bilishni xohlayotganingizni tushunishingiz kerak. Axir oʻrtaga siz va siz vakillik qilayotgan kompaniyaning obroʻ-eʼtibori tikilgan boʻladi. Bundan tashqari, mashhur konferensiyalar chipta narxi ozmuncha emas va hech kim bu pul behuda ketishini istamaydi.

Maqolani o'qish