{"id":500619,"date":"2026-10-28T11:13:30","date_gmt":"2026-10-28T08:13:30","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=500619"},"modified":"2026-10-28T11:13:30","modified_gmt":"2026-10-28T08:13:30","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=500619","title":{"rendered":"\u042d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 Game Boy Color \u043d\u0430 MicroPython: Pok\u00e9mon Crystal \u043d\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446-\u0431\u0435\u0439\u0434\u0436\u0435 \u0441 RP2350"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0417\u0430\u043a\u043e\u043d\u0447\u0438\u0432 <a href=\"https:\/\/spf13.com\/p\/zelda-on-my-conference-badge\/\" rel=\"noopener nofollow\">\u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 NES<\/a>, \u044f \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u043d\u0430 \u043d\u0451\u043c \u043a\u0443\u0447\u0443 \u0438\u0433\u0440, \u0438 \u0432\u0441\u0435 \u0448\u043b\u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e. \u041d\u0430 \u0431\u0435\u0439\u0434\u0436\u0435 \u044f \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u0448\u0451\u043b \u043f\u0435\u0440\u0432\u044b\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u0437\u0435\u043c\u0435\u043b\u0438\u0439 Zelda. \u0418 \u0442\u0443\u0442 \u043c\u0435\u043d\u044f \u0437\u0430\u0446\u0435\u043f\u0438\u043b\u043e: \u0432 Zelda \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c, \u043d\u043e \u043f\u043e \u0444\u043e\u0440\u043c\u0435 \u0431\u0435\u0439\u0434\u0436 \u043a\u0443\u0434\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 Game Boy, \u0447\u0435\u043c \u043d\u0430 NES. \u0410 \u043d\u0430 Game Boy \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c \u0438 Zelda, \u0438 Pok\u00e9mon. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u043e, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e \u0436\u0435\u043b\u0435\u0437\u043e Game Boy \u044f \u0442\u043e\u043b\u043a\u043e\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u043d\u0430\u044e? \u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/fa\/e9\/50\/fae950bde2b6969308faab0df714f8bf.png\" alt=\"\u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u044d\u043a\u0440\u0430\u043d Game Boy Color \u043d\u0430 \u0431\u0435\u0439\u0434\u0436\u0435 GitHub Universe 2026\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/fa\/e9\/50\/fae950bde2b6969308faab0df714f8bf.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/fa\/e9\/50\/fae950bde2b6969308faab0df714f8bf.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u044d\u043a\u0440\u0430\u043d Game Boy Color \u043d\u0430 \u0431\u0435\u0439\u0434\u0436\u0435 GitHub Universe 2026<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0430\u043a \u0447\u0442\u043e \u044f \u0441\u043d\u043e\u0432\u0430 \u0432\u0437\u044f\u043b \u0432 \u043d\u0430\u043f\u0430\u0440\u043d\u0438\u043a\u0438 Gemini \u0438 \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043f\u043e\u0442\u044f\u043d\u0435\u0442 \u043b\u0438 \u0442\u0430 \u0436\u0435 \u043f\u043b\u0430\u0442\u0430 <a href=\"https:\/\/badger.github.io\/about-badge\/\" rel=\"noopener nofollow\">Badger<\/a> \u043d\u0430 <a href=\"https:\/\/pip.raspberrypi.com\/documents\/RP-008373-DS-2-rp2350-datasheet.pdf\" rel=\"noopener nofollow\">RP2350<\/a> Game Boy \u0438 Game Boy Color. \u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043a\u043e\u0434\u0430 Viper \u0432 MicroPython \u0438 8 \u041c\u0411 QSPI PSRAM \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u043f\u0440\u0435\u0436\u043d\u0438\u043c\u0438, \u0430 \u0432\u043e\u0442 \u0433\u043e\u043b\u043e\u0432\u043e\u043b\u043e\u043c\u043a\u0430 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0438 \u043a\u0430\u0440\u0442\u0440\u0438\u0434\u0436\u0430 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0441\u043e\u0432\u0441\u0435\u043c \u0434\u0440\u0443\u0433\u043e\u0439.<\/p>\n<p>\u041e\u043f\u044b\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u0432 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u043d\u0435 \u043d\u0443\u0436\u0435\u043d: \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0435\u0440\u043c\u0438\u043d \u044f \u043e\u0431\u044a\u044f\u0441\u043d\u044e \u043f\u043e \u0445\u043e\u0434\u0443 \u0434\u0435\u043b\u0430.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/extt\/ab\/05\/3f\/ab053f63757bc6e9ed31085196489719.gif\" alt=\"\u042d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 Game Boy Color \u043d\u0430 \u0431\u0435\u0439\u0434\u0436\u0435 GitHub Universe 2026\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/extt\/ab\/05\/3f\/ab053f63757bc6e9ed31085196489719.gif 780w,&#10;       https:\/\/habrastorage.org\/extt\/ab\/05\/3f\/ab053f63757bc6e9ed31085196489719.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u042d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 Game Boy Color \u043d\u0430 \u0431\u0435\u0439\u0434\u0436\u0435 GitHub Universe 2026<\/figcaption><\/div>\n<\/figure>\n<h3>\u042f \u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e SM83 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0449\u0435. \u041d\u0435 \u0442\u0443\u0442-\u0442\u043e \u0431\u044b\u043b\u043e<\/h3>\n<p>\u0412 NES \u0441\u0442\u043e\u0438\u0442 Ricoh 2A03, \u0443\u0440\u0435\u0437\u0430\u043d\u043d\u044b\u0439 MOS 6502: \u0442\u0440\u0438 8-\u0431\u0438\u0442\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 (<code>A<\/code>, <code>X<\/code>, <code>Y<\/code>), \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0441\u0442\u0435\u043a\u0430 \u0438 56 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439. \u0412\u0441\u0451 \u044f\u0434\u0440\u043e \u043f\u043e\u043c\u0435\u0449\u0430\u043b\u043e\u0441\u044c \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 <code>@micropython.viper<\/code> \u043d\u0430\u0434 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0431\u0430\u043d\u043a\u043e\u0432.<\/p>\n<p>\u0412 Game Boy \u0441\u0442\u043e\u0438\u0442 Sharp SM83 (<code>LR35902<\/code>), \u0433\u0438\u0431\u0440\u0438\u0434 8080 \u0438 Z80: \u0432\u043e\u0441\u0435\u043c\u044c 8-\u0431\u0438\u0442\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 (<code>A, F, B, C, D, E, H, L<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u043f\u0430\u0440\u044b <code>AF, BC, DE, HL<\/code>), \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0441\u0442\u0435\u043a\u0430, \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u043a\u043e\u043c\u0430\u043d\u0434 \u0438 512 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439. \u042d\u0442\u043e 256 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043e\u043f\u043a\u043e\u0434\u043e\u0432 \u043f\u043b\u044e\u0441 \u0435\u0449\u0451 256 \u0437\u0430 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c <code>0xCB<\/code>, \u0432 \u0434\u0435\u0432\u044f\u0442\u044c \u0440\u0430\u0437 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0443 6502.<\/p>\n<pre><code>        MOS 6502 (NES)                  Sharp SM83 (Game Boy Color)\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510       \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u2502 Registers: A, X, Y        \u2502       \u2502 Registers: A, F, B, C, D, E, H, L \u2502\u2502 Opcodes:   56 base        \u2502  vs   \u2502 Opcodes:   512 (256 base + 256 CB)\u2502\u2502 Banking:   Cartridge discrete     \u2502 Banking:   ROM, VRAM, WRAM, SRAM  \u2502\u2502 Speed:     1.79 MHz flat  \u2502       \u2502 Speed:     4.19 MHz \/ 8.38 MHz GBC\u2502\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518       \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u0437\u0430\u0442\u043e \u0441 \u044d\u043a\u0440\u0430\u043d\u043e\u043c \u0432\u0441\u0451 \u043f\u0440\u043e\u0449\u0435:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c<\/p>\n<\/th>\n<th>\n<p align=\"left\">GBC (<code>apps\/gbc\/emu.py<\/code>)<\/p>\n<\/th>\n<th>\n<p align=\"left\">NES (<code>apps\/nes\/emu.py<\/code>)<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0432 \u043a\u0430\u0434\u0440\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">23 040<\/p>\n<\/td>\n<td>\n<p align=\"left\">61 440<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0421\u0442\u0440\u043e\u043a \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043a\u0438 \u043d\u0430 \u043a\u0430\u0434\u0440<\/p>\n<\/td>\n<td>\n<p align=\"left\">154<\/p>\n<\/td>\n<td>\n<p align=\"left\">262<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0422\u0430\u043a\u0442\u043e\u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u043d\u0430 \u043a\u0430\u0434\u0440<\/p>\n<\/td>\n<td>\n<p align=\"left\">17 556<\/p>\n<\/td>\n<td>\n<p align=\"left\">29 606<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0441\u043f\u0440\u0430\u0439\u0442\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">40<\/p>\n<\/td>\n<td>\n<p align=\"left\">64<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0431\u0430\u043d\u043a\u0430 CHR (\u0431\u0430\u0439\u0442)<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<td>\n<p align=\"left\">8 192<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0432 2,67 \u0440\u0430\u0437\u0430 \u043c\u0435\u043d\u044c\u0448\u0435, \u0441\u0442\u0440\u043e\u043a \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043a\u0438 \u0432 1,7 \u0440\u0430\u0437\u0430 \u043c\u0435\u043d\u044c\u0448\u0435.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0443\u043b\u043e\u0436\u0438\u0442\u044c\u0441\u044f \u0432 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f MicroPython, \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c \u043f\u044f\u0442\u044c \u043f\u0440\u0438\u0451\u043c\u043e\u0432 Viper, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432 \u0441\u0431\u043e\u0440\u043a\u0435 \u0434\u043b\u044f NES \u043d\u0435 \u0431\u044b\u043b\u043e.<\/p>\n<pre><code>ViperTypeError: viper:8004<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041d\u0430 NES \u043f\u0440\u0435\u0436\u043d\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u043b. \u0423 6502 \u0442\u0440\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430, <code>A<\/code>, <code>X<\/code> \u0438 <code>Y<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 <code>PC<\/code>, <code>SP<\/code>, <code>P<\/code> \u0438 \u043f\u0430\u0440\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u0435\u0449\u0451 \u0432\u043b\u0435\u0437\u0430\u043b\u0438 \u0432 \u0447\u0435\u0442\u044b\u0440\u0435 \u0431\u044b\u0441\u0442\u0440\u044b\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 Viper (<code>r0<\/code>\u2013<code>r3<\/code>). 56 \u043e\u043f\u043a\u043e\u0434\u043e\u0432 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043b\u0438\u0441\u044c \u0446\u0435\u043f\u043e\u0447\u043a\u043e\u0439 <code>if\/elif<\/code> \u0433\u043b\u0443\u0431\u0438\u043d\u043e\u0439 55, \u043f\u043e\u0442\u043e\u043c \u043e\u043d\u0430 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0430\u0441\u044c \u0432 \u043f\u044f\u0442\u0438\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a, \u0438 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0434\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0443\u043f\u0430\u043b\u0430 \u0432\u0434\u0432\u043e\u0435. \u041e\u0434\u0438\u043d \u0446\u0438\u043a\u043b Viper, \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0430 \u043f\u0430\u043c\u044f\u0442\u0438, \u0432\u0441\u0451 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a.<\/p>\n<p>SM83 \u0442\u0443\u0434\u0430 \u043d\u0435 \u0432\u043b\u0435\u0437\u0430\u0435\u0442. \u0412\u043e\u0441\u0435\u043c\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 (<code>A<\/code>, <code>F<\/code>, <code>B<\/code>, <code>C<\/code>, <code>D<\/code>, <code>E<\/code>, <code>H<\/code>, <code>L<\/code>) \u043f\u043b\u044e\u0441 <code>PC<\/code>, <code>SP<\/code> \u0438 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438 \u0442\u0430\u043a\u0442\u043e\u0432 \u0432 \u0447\u0435\u0442\u044b\u0440\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043d\u0435 \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f: \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b Cortex-M33 \u0437\u0430\u043d\u044f\u0442\u044b \u043f\u043e\u0434 \u0441\u0442\u0435\u043a, \u043a\u0430\u0434\u0440 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u0438 \u0440\u0430\u043d\u0442\u0430\u0439\u043c. \u042d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c <code>viper:8004<\/code>: \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b \u043d\u0435 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435.<\/p>\n<p>\u0414\u0435\u0448\u0438\u0444\u0440\u0430\u0442\u043e\u0440 \u0442\u043e\u0436\u0435 \u043d\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u0442\u0441\u044f. \u0414\u0435\u0440\u0435\u0432\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u043d\u0430 56 \u043e\u043f\u043a\u043e\u0434\u0430\u0445, \u0434\u043b\u044f 512 (256 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0438 256 \u0441 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c <code>CB<\/code>) \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e \u0431\u044b \u043e\u043a\u043e\u043b\u043e 500 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439. \u0422\u043e, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u043b\u043e \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 NES \u0431\u044b\u0441\u0442\u0440\u044b\u043c, \u0434\u043b\u044f Game Boy \u0434\u0430\u0436\u0435 \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>\u041e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0434\u0432\u0435 \u0437\u0430\u0434\u0430\u0447\u0438: \u0433\u0434\u0435 \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432\u043e\u0441\u0435\u043c\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0438 \u043a\u0430\u043a \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c 512 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0431\u0435\u0437 512 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439.<\/p>\n<h3>\u0412\u043e\u0441\u0435\u043c\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043d\u0435 \u0432\u043b\u0435\u0437\u0430\u044e\u0442 \u0432 \u0447\u0435\u0442\u044b\u0440\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u0447\u0438\u0442\u0430\u0442\u044c \u043e\u043f\u043a\u043e\u0434 \u043d\u0435 \u043a\u0430\u043a \u043e\u0434\u043d\u043e \u0447\u0438\u0441\u043b\u043e, \u0430 \u043a\u0430\u043a \u0442\u0440\u0438 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445, 512 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0441\u0445\u043b\u043e\u043f\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u043b\u043e\u043a\u043e\u0432. \u041d\u043e \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443, 8-\u0431\u0438\u0442\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0438\u0437 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 Viper \u0432 \u043f\u043b\u043e\u0441\u043a\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c: \u0432\u043e\u0441\u0435\u043c\u044c \u0431\u0430\u0439\u0442 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <code>0x14500<\/code> \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0433\u043e <code>bytearray<\/code> (<code>self.mem = bytearray(0x14A00)<\/code>):<\/p>\n<pre><code># CPU 8-bit Register File in flat arena (0x14500..0x14507)# Index: 0=B, 1=C, 2=D, 3=E, 4=H, 5=L, 6=(HL) indirect pointer, 7=A<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0418\u043d\u0434\u0435\u043a\u0441 <code>6<\/code> \u043e\u0441\u043e\u0431\u044b\u0439: \u0432 \u044d\u0442\u043e\u043c \u0431\u0438\u0442\u043e\u0432\u043e\u043c \u043f\u043e\u043b\u0435 SM83 \u043e\u043d \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u043e\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u043f\u0430\u043c\u044f\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 <code>(HL)<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043b\u0435\u0436\u0430\u0442 \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c <code>0, 1, 2, 3, 4, 5, 7<\/code>.<\/p>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Z80 \u0438 SM83 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043d\u0430 \u0431\u0443\u043c\u0430\u0433\u0435 \u0432 <em>\u0432\u043e\u0441\u044c\u043c\u0435\u0440\u0438\u0447\u043d\u043e\u0439<\/em> \u0441\u0438\u0441\u0442\u0435\u043c\u0435. \u0415\u0441\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u0431\u0430\u0439\u0442 \u043e\u043f\u043a\u043e\u0434\u0430 \u043f\u043e \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044e 8, \u043e\u043d \u0440\u0430\u0441\u043f\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0442\u0440\u0438 \u0432\u043e\u0441\u044c\u043c\u0435\u0440\u0438\u0447\u043d\u044b\u0435 \u0446\u0438\u0444\u0440\u044b (<code>x<\/code>, <code>y<\/code>, <code>z<\/code>), \u0438 \u044d\u0442\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044f \u043d\u0430\u0431\u043e\u0440\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439:<\/p>\n<pre><code>x: int = op &gt;&gt; 6          # Bits 7-6: Opcode category (0..3)y: int = (op &gt;&gt; 3) &amp; 7    # Bits 5-3: Destination register or ALU operation (0..7)z: int = op &amp; 7           # Bits 2-0: Source register or condition code (0..7)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0423 \u0432\u0441\u0435\u0445 64 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 <code>LD r, r'<\/code> (<code>0x40..0x7F<\/code>) <code>x == 1<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u0438 \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u044f\u0442\u044c \u0441\u0442\u0440\u043e\u043a Viper:<\/p>\n<pre><code>if x == 1:    # 0x40..0x7F: LD r[y], r[z] or HALT (0x76)    if op == 0x76:        halted = 1    else:        vr1: int = 0        if z == 6:            hl1: int = (int(mem[0x14504]) &lt;&lt; 8) | int(mem[0x14505])            vr1 = read_memory(hl1)        else:            vr1 = int(mem[0x14500 + z])        if y == 6:            write_memory((int(mem[0x14504]) &lt;&lt; 8) | int(mem[0x14505]), vr1)        else:            mem[0x14500 + y] = vr1<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041e\u0434\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0448\u0435\u0441\u0442\u044c\u0434\u0435\u0441\u044f\u0442 \u0447\u0435\u0442\u044b\u0440\u0435 \u043e\u043f\u043a\u043e\u0434\u0430, \u0430 <code>y<\/code> \u0438 <code>z<\/code> \u0432\u044b\u0431\u0438\u0440\u0430\u044e\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440-\u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a.<\/p>\n<p>\u041f\u0440\u0438 <code>x == 2<\/code> \u0442\u0435 \u0436\u0435 \u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044f \u0437\u0430\u0434\u0430\u044e\u0442 \u0432\u0441\u0435 \u0432\u043e\u0441\u0435\u043c\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0410\u041b\u0423 \u043d\u0430\u0434 <code>A<\/code> \u0438 <code>r[z]<\/code> (<code>ADD<\/code>, <code>ADC<\/code>, <code>SUB<\/code>, <code>SBC<\/code>, <code>AND<\/code>, <code>XOR<\/code>, <code>OR<\/code>, <code>CP<\/code>): \u0435\u0449\u0451 \u0448\u0435\u0441\u0442\u044c\u0434\u0435\u0441\u044f\u0442 \u0447\u0435\u0442\u044b\u0440\u0435 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0432 \u043e\u0434\u043d\u043e\u043c \u0431\u043b\u043e\u043a\u0435.<\/p>\n<p>256 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c <code>0xCB<\/code> \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u0442\u0430\u043a \u0436\u0435: <code>cb_x == 1<\/code> \u2014 \u044d\u0442\u043e <code>BIT<\/code>, <code>2<\/code> \u2014 <code>RES<\/code>, <code>3<\/code> \u2014 <code>SET<\/code>, \u0430 <code>0<\/code> \u2014 \u0441\u0434\u0432\u0438\u0433, \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0434\u0432\u0438\u0433 \u0438\u043b\u0438 \u043e\u0431\u043c\u0435\u043d \u0442\u0435\u0442\u0440\u0430\u0434 <code>y<\/code> \u043d\u0430\u0434 <code>r[z]<\/code>. \u041f\u044f\u0442\u044c\u0434\u0435\u0441\u044f\u0442 \u0441\u0442\u0440\u043e\u043a \u0431\u0438\u0442\u043e\u0432\u043e\u0439 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u043b\u0438 \u0441\u043e\u0442\u043d\u0438 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439.<\/p>\n<h3>\u0427\u0435\u0442\u044b\u0440\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u0432\u043c\u0435\u0441\u0442\u043e \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443<\/h3>\n<p>\u041d\u0430 NES \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0445\u0438\u0442\u0440\u0438\u0442\u044c. \u041e\u0417\u0423, PPU, APU, PRG-ROM: \u0432\u0441\u0451 \u043b\u0435\u0436\u0438\u0442 \u0442\u0430\u043c, \u043a\u0443\u0434\u0430 \u0435\u0433\u043e \u043f\u0440\u0438\u043f\u0430\u044f\u043b\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0447\u0442\u0435\u043d\u0438\u0435 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0430\u0434\u0440\u0435\u0441\u0430, \u0438 \u0433\u043e\u0442\u043e\u0432\u043e.<\/p>\n<p>\u041d\u0430 Game Boy \u0442\u0430\u043a \u043d\u0435 \u0432\u044b\u0439\u0434\u0435\u0442. \u041f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0432\u0438\u0434\u0438\u0442 64 \u041a\u0411, \u043d\u043e \u043a\u0430\u0440\u0442\u0440\u0438\u0434\u0436 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043c\u0435\u043d\u044f\u0435\u0442 \u0442\u043e, \u0447\u0442\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0437\u0430 \u044d\u0442\u0438\u043c \u043e\u043a\u043d\u043e\u043c:<\/p>\n<ul>\n<li>\n<p><code>$0000..$3FFF<\/code>: 16 \u041a\u0411 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0431\u0430\u043d\u043a\u0430 ROM 0;<\/p>\n<\/li>\n<li>\n<p><code>$4000..$7FFF<\/code>: 16 \u041a\u0411 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u043e\u0433\u043e \u0431\u0430\u043d\u043a\u0430 ROM (\u0434\u043e 125\/128\/512 \u0431\u0430\u043d\u043a\u043e\u0432 \u0443 <code>MBC1<\/code>\/<code>MBC3<\/code>\/<code>MBC5<\/code>);<\/p>\n<\/li>\n<li>\n<p><code>$A000..$BFFF<\/code>: 8 \u041a\u0411 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 SRAM (4 \u0431\u0430\u043d\u043a\u0430);<\/p>\n<\/li>\n<li>\n<p><code>$C000..$CFFF<\/code>: 4 \u041a\u0411 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0431\u0430\u043d\u043a\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 WRAM 0;<\/p>\n<\/li>\n<li>\n<p><code>$D000..$DFFF<\/code>: 4 \u041a\u0411 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u043e\u0439 WRAM (\u0431\u0430\u043d\u043a\u0438 1\u20137 \u0447\u0435\u0440\u0435\u0437 <code>SVBK<\/code> \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <code>$FF70<\/code>);<\/p>\n<\/li>\n<li>\n<p><code>$E000..$FDFF<\/code>: \u044d\u0445\u043e-\u043e\u0431\u043b\u0430\u0441\u0442\u044c, \u0437\u0435\u0440\u043a\u0430\u043b\u043e <code>$C000..$DDFF<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0430 \u0430\u0434\u0440\u0435\u0441 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438: \u0435\u0441\u043b\u0438 \u043e\u043d \u0432 \u044d\u0442\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435, \u0434\u0435\u043b\u0430\u0435\u043c \u043e\u0434\u043d\u043e, \u0435\u0441\u043b\u0438 \u0432 \u0442\u043e\u043c \u2014 \u0434\u0440\u0443\u0433\u043e\u0435:<\/p>\n<pre><code>if addr &lt; 0x8000: ...elif addr &lt; 0xA000: ...elif addr &lt; 0xC000: ...elif addr &lt; 0xD000: ...elif addr &lt; 0xE000: ...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0427\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043b\u0435\u0433\u043a\u043e \u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0442\u0435\u043c, \u043a\u0430\u043a \u043a\u0430\u0440\u0442\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 \u0440\u0438\u0441\u0443\u044e\u0442 \u0432\u043e \u0432\u0441\u0435\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0445. \u041d\u043e Game Boy \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 4,19 \u041c\u0413\u0446, \u0430 GBC \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0432\u0434\u0432\u043e\u0435 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0442\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u0440\u0430\u0437 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u041c\u044b \u0441\u043d\u043e\u0432\u0430 \u0443\u043f\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0432 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0441\u043a\u0440\u043e\u043c\u043d\u043e\u0433\u043e \u0436\u0435\u043b\u0435\u0437\u0430. \u041a\u0430\u0436\u0434\u044b\u0439 <code>if<\/code> \u2014 \u044d\u0442\u043e \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 Cortex-M33 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0430 \u043f\u0440\u043e\u043c\u0430\u0445 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440.<\/p>\n<p>\u0425\u0438\u0442\u0440\u043e\u0441\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043b\u044e\u0431\u043e\u0439 \u0430\u0434\u0440\u0435\u0441 Game Boy 16-\u0431\u0438\u0442\u043d\u044b\u0439, \u0442\u043e \u0435\u0441\u0442\u044c \u0447\u0435\u0442\u044b\u0440\u0435 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u044b\u0435 \u0446\u0438\u0444\u0440\u044b \u0432\u0440\u043e\u0434\u0435 <code>$D123<\/code>. \u0412 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u044d\u0442\u043e <code>1101 0001 0010 0011<\/code>: \u043b\u0435\u0432\u044b\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u0431\u0438\u0442\u0430 (15\u201312) \u2014 \u0441\u0442\u0430\u0440\u0448\u0430\u044f \u0442\u0435\u0442\u0440\u0430\u0434\u0430, \u043f\u0440\u0430\u0432\u044b\u0435 \u0434\u0432\u0435\u043d\u0430\u0434\u0446\u0430\u0442\u044c (11\u20130) \u2014 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 4 \u041a\u0411.<\/p>\n<p>\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0432 4 \u041a\u0411 \u2014 \u044d\u0442\u043e 4096 = 2\u00b9\u00b2 \u0431\u0430\u0439\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0434\u0432\u0438\u0433 \u0432\u043f\u0440\u0430\u0432\u043e \u043d\u0430 12 (<code>addr &gt;&gt; 12<\/code>) \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u043c\u043b\u0430\u0434\u0448\u0438\u0435 \u0434\u0432\u0435\u043d\u0430\u0434\u0446\u0430\u0442\u044c \u0431\u0438\u0442 \u0438 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u0440\u0448\u0443\u044e \u0442\u0435\u0442\u0440\u0430\u0434\u0443: \u043e\u0442 0 \u0434\u043e 15. \u0428\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u0440\u043e\u0432\u043d\u043e 64 \u041a\u0411. \u041c\u0430\u0441\u043a\u0430 \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 (<code>addr &amp; 0xFFF<\/code>) \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u043b\u0430\u0434\u0448\u0438\u0435 \u0434\u0432\u0435\u043d\u0430\u0434\u0446\u0430\u0442\u044c \u0431\u0438\u0442, \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 0\u20134095 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.<\/p>\n<p><code>$D123<\/code> \u2192 <code>0xD<\/code> (\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 13) + <code>0x123<\/code> (\u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 291). \u0421\u0442\u0430\u0440\u0448\u0430\u044f \u0442\u0435\u0442\u0440\u0430\u0434\u0430 \u0441\u0430\u043c\u0430 \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u043a\u0430\u043a\u043e\u0439 \u0431\u0430\u043d\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u043d\u0438\u043a\u0430\u043a\u043e\u0439 <code>if<\/code> \u043d\u0435 \u043d\u0443\u0436\u0435\u043d. \u042f \u0434\u0435\u0440\u0436\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0438\u0437 16 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 <code>self.st<\/code> (\u044f\u0447\u0435\u0439\u043a\u0438 32\u201347 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 <code>array('i', [0]*64)<\/code>) \u0441 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 <code>self.mem<\/code> \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0443\u044e \u0435\u0451 \u043f\u0440\u044f\u043c\u043e \u044d\u0442\u043e\u0439 \u0442\u0435\u0442\u0440\u0430\u0434\u043e\u0439:<\/p>\n<pre><code>Address Range    Page Slot     Mapped Arena Region$8000..$8FFF     st[40]   \u2500\u2500\u25ba  0x0000 (VRAM Bank 0 or 1, low)$9000..$9FFF     st[41]   \u2500\u2500\u25ba  0x1000 (VRAM Bank 0 or 1, high)$A000..$AFFF     st[42]   \u2500\u2500\u25ba  0xC000 + (sram_bank &lt;&lt; 13)$B000..$BFFF     st[43]   \u2500\u2500\u25ba  0xD000 + (sram_bank &lt;&lt; 13)$C000..$CFFF     st[44]   \u2500\u2500\u25ba  0x4000 (WRAM Bank 0)$D000..$DFFF     st[45]   \u2500\u2500\u25ba  0x4000 + (wram_bank &lt;&lt; 12)$E000..$EFFF     st[46]   \u2500\u2500\u25ba  0x4000 (Echo WRAM0)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0431\u0430\u043d\u043a\u0430 \u2014 \u043e\u0434\u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c, \u0431\u0435\u0437 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<pre><code># Switching GBC WRAM bank (SVBK at $FF70)wb: int = vw &amp; 7if wb == 0: wb = 1st[REG_WRAM_BANK] = wbst[45] = 0x4000 + (wb &lt;&lt; 12)  # Slot 45 points to the active 4KB WRAM bank<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0410 \u0447\u0442\u0435\u043d\u0438\u0435 \u2014 \u0447\u0435\u0442\u044b\u0440\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f:<\/p>\n<pre><code># 4KB Page Table lookup in Viperpage_offset: int = st[32 + (addr &gt;&gt; 12)]val: int = int(mem[page_offset + (addr &amp; 0xFFF)])<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041d\u0430\u0439\u0442\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u043d\u0430\u043b\u043e\u0436\u0438\u0442\u044c \u043c\u0430\u0441\u043a\u0443, \u0441\u043b\u043e\u0436\u0438\u0442\u044c, \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0431\u0430\u043d\u043a\u043e\u0432 \u043f\u0440\u043e\u043f\u0430\u043b\u043e \u0438\u0437 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439.<\/p>\n<h3>\u041b\u0435\u043d\u0438\u0432\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0432\u0443\u0445\u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442\u043d\u044b\u0445 \u043a\u0430\u0440\u0442\u0440\u0438\u0434\u0436\u0435\u0439 \u043f\u043e \u0448\u0438\u043d\u0435 QSPI \u043d\u0430 115 \u041c\u0413\u0446<\/h3>\n<p>\u041a\u0430\u0440\u0442\u0440\u0438\u0434\u0436\u0438 NES \u0438\u0437 \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0432\u0435\u0441\u0438\u043b\u0438 \u043e\u0442 40 \u0434\u043e 256 \u041a\u0411, \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u041e\u0417\u0423 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435. \u041a\u0430\u0440\u0442\u0440\u0438\u0434\u0436\u0438 Game Boy Color \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435: <em>Link\u2019s Awakening DX<\/em> \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 1 \u041c\u0411 (64 \u0431\u0430\u043d\u043a\u0430 \u043f\u043e 16 \u041a\u0411), \u0430 <em>Pok\u00e9mon Crystal<\/em> \u2014 2 \u041c\u0411 (128 \u0431\u0430\u043d\u043a\u043e\u0432).<\/p>\n<p>\u0427\u0442\u0435\u043d\u0438\u0435 2 \u041c\u0411 \u0441 QSPI Flash \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u043e\u0434\u0432\u0435\u0448\u0438\u0432\u0430\u0435\u0442 \u0431\u0435\u0439\u0434\u0436 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434. \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u0440\u0430\u0437\u043e\u0433\u043d\u0430\u043b\u0438 RP2350 \u0447\u0435\u0440\u0435\u0437 <code>machine.freq(300_000_000)<\/code>, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0438\u0433\u0440\u0430\u0442\u044c \u0437\u0430\u043f\u0430\u0441 \u043d\u0430 \u043a\u0430\u0434\u0440, \u0431\u0435\u0439\u0434\u0436 \u043d\u0430\u043c\u0435\u0440\u0442\u0432\u043e \u0437\u0430\u0432\u0438\u0441\u0430\u043b \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0431\u0430\u043d\u043a\u043e\u0432. \u0412\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0438\u043c \u043e\u0442\u0432\u0430\u043b\u0438\u0432\u0430\u043b\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442 \u043f\u043e USB, \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c MonaOS \u0443\u0434\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0435\u0434\u0451\u0440\u0433\u0438\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0438\u0442\u0430\u043d\u0438\u044f.<\/p>\n<p>\u0423\u0437\u043a\u0438\u043c \u043c\u0435\u0441\u0442\u043e\u043c \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043e\u0431\u0449\u0430\u044f \u0448\u0438\u043d\u0430 QMI:<\/p>\n<pre><code>                    RP2350 Microcontroller                   \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510                   \u2502  Cortex-M33 Cores    \u2502                   \u2502      520 KB SRAM     \u2502                   \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                              \u2502 QMI Bus (clk_sys \/ 2)              \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510              \u2502                               \u2502        XIP_CS0 (Flash)                 XIP_CS1 (PSRAM)   \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510        \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510   \u2502    16 MB QSPI Flash  \u2502        \u2502   8 MB QSPI PSRAM    \u2502   \u2502  (Firmware &amp; ROMs)   \u2502        \u2502   (Heap &amp; Buffers)   \u2502   \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518        \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0428\u0442\u0430\u0442\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430 RP2350 \u2014 150 \u041c\u0413\u0446, \u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0431\u0435\u0439\u0434\u0436\u0430 \u0433\u043e\u043d\u044f\u0435\u0442 \u0435\u0433\u043e \u043d\u0430 230 \u041c\u0413\u0446 (\u0440\u0430\u0437\u0433\u043e\u043d \u043d\u0430 53%). \u0421\u0443\u0434\u044f \u043f\u043e <a href=\"https:\/\/github.com\/badger\/home\/blob\/main\/hardware\/README.md\" rel=\"noopener nofollow\">\u0441\u0445\u0435\u043c\u0435 \u0431\u0435\u0439\u0434\u0436\u0430<\/a> \u0438 <a href=\"https:\/\/github.com\/pimoroni\/tufty2350\/blob\/main\/board\/pimoroni_tufty2350.h\" rel=\"noopener nofollow\">\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043f\u043b\u0430\u0442\u044b <code>tufty2350<\/code><\/a> \u043e\u0442 Pimoroni, 16 \u041c\u0411 Flash Winbond <code>W25Q128JVPIQ<\/code> \u0438 8 \u041c\u0411 PSRAM AP Memory <code>APS6404L-3SQR-ZR<\/code> (<code>PSRAM_CS<\/code> \u043d\u0430 <code>GPIO8<\/code>) \u0434\u0435\u043b\u044f\u0442 \u043b\u0438\u043d\u0438\u0438 <code>QSPI_SD0..3<\/code> \u0438 <code>QSPI_SCLK<\/code> \u043f\u0440\u0438 <code>PICO_FLASH_SPI_CLKDIV = 2<\/code> (<code>clk_sys \/ 2<\/code>). \u041d\u0430 230 \u041c\u0413\u0446 QSPI \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0435:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"\\frac{230\\text{ \u041c\u0413\u0446}}{2} = 115\\text{ \u041c\u0413\u0446}\" alt=\"\\frac{230\\text{ \u041c\u0413\u0446}}{2} = 115\\text{ \u041c\u0413\u0446}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/90\/900\/90001215ad309e25af1141fbcf34a477.svg\" width=\"161\" height=\"38\" data-width=\"20.076\" data-height=\"4.778\" data-vertical-align=\"-1.824\" style=\"width: 20.076ex; height: 4.778ex; vertical-align: -1.824ex\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/90\/900\/90001215ad309e25af1141fbcf34a477.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/90\/900\/90001215ad309e25af1141fbcf34a477.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u041e\u0431\u0435 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b \u043f\u0430\u043c\u044f\u0442\u0438 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u044b \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043d\u0430 133 \u041c\u0413\u0446 (\u0432 <code>pimoroni_tufty2350.h<\/code> \u0443\u043a\u0430\u0437\u0430\u043d\u043e <code>266 MHz<\/code> \u043a\u0430\u043a <em>\u00ab\u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0439 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c, \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0441\u043d\u0438\u0436\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u0443 PSRAM\u00bb<\/em>), \u0442\u0430\u043a \u0447\u0442\u043e \u0443 115 \u041c\u0413\u0446 \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0437\u0430\u043f\u0430\u0441 \u043f\u043e \u0442\u0430\u0439\u043c\u0438\u043d\u0433\u0430\u043c. \u041d\u0430 300 \u041c\u0413\u0446 QSPI \u0432\u044b\u0445\u043e\u0434\u0438\u043b \u043d\u0430 150 \u041c\u0413\u0446, \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u043f\u0430\u0441\u043f\u043e\u0440\u0442\u043d\u044b\u0445 133 \u041c\u0413\u0446 \u043e\u0431\u0435\u0438\u0445 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c. \u042f\u0434\u0440\u043e Cortex-M33 \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u043b\u043e, \u043d\u043e \u043f\u0430\u043a\u0435\u0442\u043d\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0430\u043d\u043a\u043e\u0432 \u043f\u043e 16 \u041a\u0411 \u0438\u0437 Flash (<code>XIP_CS0<\/code>) \u0432 PSRAM (<code>XIP_CS1<\/code>) \u043f\u043e \u043e\u0431\u0449\u0435\u0439 \u0448\u0438\u043d\u0435 QMI \u0432\u0435\u0448\u0430\u043b\u043e \u0436\u0435\u043b\u0435\u0437\u043e.<\/p>\n<p>\u041d\u0430 \u0431\u0435\u0439\u0434\u0436\u0435 8 \u041c\u0411 PSRAM \u043e\u0442\u0434\u0430\u043d\u044b \u043f\u043e\u0434 \u043a\u0443\u0447\u0443 MicroPython (<code>gc.mem_free()<\/code> \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 <code>8,189,632<\/code> \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 \u0431\u0430\u0439\u0442), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0438 \u0432\u044b\u0442\u0435\u0441\u043d\u044f\u0442\u044c \u0431\u0430\u043d\u043a\u0438, \u043d\u0438 \u0440\u0430\u0437\u0433\u043e\u043d\u044f\u0442\u044c \u0448\u0438\u043d\u0443 \u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c:<\/p>\n<ul>\n<li>\n<p>\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0448\u0442\u0430\u0442\u043d\u044b\u0435 <strong>230 \u041c\u0413\u0446<\/strong>, \u0447\u0442\u043e\u0431\u044b \u0448\u0438\u043d\u0430 QMI \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u043d\u0430 115 \u041c\u0413\u0446;<\/p>\n<\/li>\n<li>\n<p>\u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0432 PSRAM \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u043e\u0434 \u0432\u0435\u0441\u044c \u043a\u0430\u0440\u0442\u0440\u0438\u0434\u0436 (<code>self.rom = bytearray(self.num_banks * 16384)<\/code>) \u0441 <code>direct_rom = True<\/code> \u0438 \u043e\u0442\u043a\u0430\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0439 \u0431\u0443\u0444\u0435\u0440 \u0438\u0437 20 \u044f\u0447\u0435\u0435\u043a, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0432\u044b\u043b\u0435\u0442\u0438\u0442 <code>MemoryError<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u0430\u043d\u043a\u0438 0 \u0438 1, \u0447\u0442\u043e\u0431\u044b \u0438\u0433\u0440\u0430 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b\u0430 \u0441\u0440\u0430\u0437\u0443, \u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u0430\u043d\u043a \u043f\u043e 16 \u041a\u0411 \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 (<code>self.mem[0x14300 + bank] = slot<\/code>) \u0438 \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 PSRAM \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u0441\u0435\u0430\u043d\u0441\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u043e \u0443\u0431\u0440\u0430\u043b\u043e \u0438 \u043c\u043d\u043e\u0433\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u043d\u0443\u044e \u043f\u0430\u0443\u0437\u0443 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435, \u0438 \u0434\u0451\u0440\u0433\u0430\u043d\u044c\u0435 Flash \u043f\u043e\u0441\u0440\u0435\u0434\u0438 \u0438\u0433\u0440\u044b.<\/p>\n<h3>\u041c\u0430\u0441\u0448\u0442\u0430\u0431 1,5\u00d7<\/h3>\n<p>\u042d\u043a\u0440\u0430\u043d Game Boy \u2014 160\u00d7144, \u044d\u043a\u0440\u0430\u043d \u0431\u0435\u0439\u0434\u0436\u0430 \u2014 320\u00d7240. \u0414\u043b\u044f \u0443\u0434\u0432\u043e\u0435\u043d\u0438\u044f \u043c\u0435\u0441\u0442\u0430 \u043c\u0430\u043b\u043e, \u043d\u043e 1,5\u00d7 (240\u00d7216, \u0441 \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u043c \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e \u0441\u0445\u0435\u043c\u0435 <code>2:1:2:1<\/code>) \u0432\u043b\u0435\u0437\u0430\u0435\u0442, \u0438 \u044d\u0442\u043e \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043d\u0435\u043f\u043b\u043e\u0445\u0438\u043c \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441\u043e\u043c.<\/p>\n<p>\u041d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0435\u0440\u043f\u0438\u043c\u043e. \u0427\u0430\u0441\u0442\u044c \u043b\u0438\u043d\u0438\u0439 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u0434\u0432\u043e\u0435 \u0442\u043e\u043b\u0449\u0435, \u0447\u0430\u0441\u0442\u044c \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043f\u0440\u0435\u0436\u043d\u0435\u0439. \u0417\u0430\u0442\u043e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u044e \u0432\u044b\u0441\u043e\u0442\u0443 \u044d\u043a\u0440\u0430\u043d\u0430 (216 \u0438\u0437 240 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439. \u2014 <em>\u041f\u0440\u0438\u043c. \u043f\u0435\u0440.<\/em>), \u0445\u043e\u0442\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0435 \u0442\u0430\u043a, \u043a\u0430\u043a \u0437\u0430\u0434\u0443\u043c\u0430\u043d\u043e \u0432 \u0438\u0433\u0440\u0435.<\/p>\n<p>\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u044f \u043e\u0441\u0442\u0430\u0432\u0438\u043b, \u043d\u043e \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u043a\u043b\u044e\u0447\u0438\u043b \u0440\u043e\u0434\u043d\u043e\u0439 <strong>1:1<\/strong>: 160\u00d7144 \u043f\u043e \u0446\u0435\u043d\u0442\u0440\u0443 \u044d\u043a\u0440\u0430\u043d\u0430 320\u00d7240, \u043e\u0434\u0438\u043d \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u0416\u041a-\u044d\u043a\u0440\u0430\u043d\u0430 \u043d\u0430 \u043e\u0434\u0438\u043d \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u0431\u0435\u0439\u0434\u0436\u0430, \u0438 \u043f\u043e\u043b\u0435 \u0432\u043e\u043a\u0440\u0443\u0433 \u043f\u043e\u0448\u0438\u0440\u0435.<\/p>\n<pre><code>   320 px (Badge Screen Width)\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u2502  GUTTER (80 px)   160x144 LCD   GUTTER (80px)\u2502\u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 48 px Top\u2502 \u2502 spf13 labs   \u2502              \u2502            \u2502 \u2502\u2502 \u2502 60 fps       \u2502   1:1 NATIVE \u2502   [SAV]    \u2502 \u2502\u2502 \u2502              \u2502   PIXEL      \u2502            \u2502 \u2502 144 px LCD\u2502 \u2502 [D-PAD HUD]  \u2502              \u2502            \u2502 \u2502\u2502 \u2502 (Active)     \u2502              \u2502            \u2502 \u2502\u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2502 48 px Bottom\u2502                 GAME BOY COLOR               \u2502\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412 \u0440\u0435\u0436\u0438\u043c\u0435 1:1 \u043f\u0438\u043a\u0441\u0435\u043b\u044c-\u0430\u0440\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a, \u043a\u0430\u043a \u0437\u0430\u0434\u0443\u043c\u0430\u043b\u0438 \u0445\u0443\u0434\u043e\u0436\u043d\u0438\u043a\u0438, \u043d\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0440\u0430\u0437\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0435\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0447\u043a\u0430\u0445. \u0412\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u0440\u0430\u044f \u043b\u0443\u043f\u0430 \u0434\u043b\u044f Game Boy, \u043e\u0431\u044b\u0447\u043d\u043e\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u0442\u0435\u043a\u043b\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043a\u0440\u0435\u043f\u0438\u043b\u043e\u0441\u044c \u043d\u0430\u0434 \u044d\u043a\u0440\u0430\u043d\u043e\u043c. \u041c\u043e\u0436\u0435\u0442, \u043a\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0442\u0430\u043a\u0443\u044e \u0434\u043b\u044f \u0431\u0435\u0439\u0434\u0436\u0430 \ud83d\ude42<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/36\/50\/76\/3650763a15b8d3c8bca83447bddaeb01.jpg\" alt=\"Joyplus Handy Boy \u2014 \u043b\u0443\u043f\u0430 \u0434\u043b\u044f \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e Game Boy, \u043e\u0434\u043d\u0430 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0445 \u043b\u0438\u043d\u0437, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0434\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u0432 90-\u0445\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/36\/50\/76\/3650763a15b8d3c8bca83447bddaeb01.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/36\/50\/76\/3650763a15b8d3c8bca83447bddaeb01.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Joyplus Handy Boy \u2014 \u043b\u0443\u043f\u0430 \u0434\u043b\u044f \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e Game Boy, \u043e\u0434\u043d\u0430 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0445 \u043b\u0438\u043d\u0437, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0434\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u0432 90-\u0445<\/figcaption><\/div>\n<\/figure>\n<p><em>Joyplus Handy Boy \u0441 \u043b\u0443\u043f\u043e\u0439 \u0438 \u0441\u0442\u0435\u0440\u0435\u043e\u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0430\u043c\u0438. \u0424\u043e\u0442\u043e: <\/em><a href=\"https:\/\/commons.wikimedia.org\/wiki\/User:ComputerHotline\" rel=\"noopener nofollow\"><em>Thomas Bresson<\/em><\/a><em>, <\/em><a href=\"https:\/\/creativecommons.org\/licenses\/by\/3.0\" rel=\"noopener nofollow\"><em>CC BY 3.0<\/em><\/a><\/p>\n<p>\u0415\u0441\u043b\u0438 \u043e\u0442\u0446\u0435\u043d\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u043a\u043d\u043e 160\u00d7144, \u043f\u043e \u0431\u043e\u043a\u0430\u043c \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u043b\u044f \u043f\u043e 80 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439, \u0430 \u0441\u0432\u0435\u0440\u0445\u0443 \u0438 \u0441\u043d\u0438\u0437\u0443 \u043f\u043e 48. \u041f\u0443\u0441\u0442\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0440\u044f\u0434\u043e\u043c \u0441 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u0439 \u0438\u0433\u0440\u043e\u0439 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u043e\u0448\u0438\u0431\u043a\u0430, \u0434\u0430 \u0438 \u0443 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0433\u043e Game Boy \u0432\u043e\u043a\u0440\u0443\u0433 \u044d\u043a\u0440\u0430\u043d\u0430 \u043f\u043b\u0430\u0441\u0442\u0438\u043a, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043b \u0440\u0430\u043c\u043a\u0443: \u0441\u0443\u043c\u0435\u0440\u0435\u0447\u043d\u043e-\u0441\u0435\u0440\u044b\u0439 \u0444\u043e\u043d, \u0442\u043e\u043d\u043a\u0438\u0435 \u0437\u043e\u043b\u043e\u0442\u044b\u0435 \u043f\u043e\u043b\u043e\u0441\u044b \u0438 \u043a\u0440\u0435\u043c\u043e\u0432\u0430\u044f \u043d\u0430\u0434\u043f\u0438\u0441\u044c <code>GAME BOY COLOR<\/code> \u0432\u043d\u0438\u0437\u0443 (\u0434\u043b\u044f \u043c\u043e\u043d\u043e\u0445\u0440\u043e\u043c\u043d\u044b\u0445 \u043a\u0430\u0440\u0442\u0440\u0438\u0434\u0436\u0435\u0439 <code>.gb<\/code> \u043e\u043d\u0430 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 <code>GAME BOY POCKET<\/code>). \u041d\u0430 \u043b\u0435\u0432\u043e\u043c \u043f\u043e\u043b\u0435 \u2014 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u0430\u043d\u0435\u043b\u044c \u0441 \u0437\u0430\u0440\u044f\u0434\u043e\u043c \u0431\u0430\u0442\u0430\u0440\u0435\u0438, \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 \u043a\u0430\u0434\u0440\u043e\u0432 \u0438 \u0436\u0438\u0432\u043e\u0439 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u043e\u0439 \u0441\u0435\u043d\u0441\u043e\u0440\u043d\u043e\u0439 \u043a\u0440\u0435\u0441\u0442\u043e\u0432\u0438\u043d\u044b \u0438 \u043a\u043d\u043e\u043f\u043e\u043a, \u043d\u0430 \u043f\u0440\u0430\u0432\u043e\u043c \u2014 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f <code>SAV<\/code> \u0438 <code>RES<\/code>.<\/p>\n<p><em>Link\u2019s Awakening DX<\/em><\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/18\/84\/60\/1884609a236052d886699e13aa9555cc.png\" alt=\"Link's Awakening DX \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 1:1 \u043d\u0430 \u0431\u0435\u0439\u0434\u0436\u0435 GitHub Universe 2026\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/18\/84\/60\/1884609a236052d886699e13aa9555cc.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/18\/84\/60\/1884609a236052d886699e13aa9555cc.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Link&#8217;s Awakening DX \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 1:1 \u043d\u0430 \u0431\u0435\u0439\u0434\u0436\u0435 GitHub Universe 2026<\/figcaption><\/div>\n<\/figure>\n<p><em>Pok\u00e9mon Crystal<\/em><\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/3a\/54\/51\/3a5451672c62d89e280c638b5bb6cf01.png\" alt=\"Pok\u00e9mon Crystal \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 1:1 \u043d\u0430 \u0431\u0435\u0439\u0434\u0436\u0435 GitHub Universe 2026\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/3a\/54\/51\/3a5451672c62d89e280c638b5bb6cf01.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/3a\/54\/51\/3a5451672c62d89e280c638b5bb6cf01.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Pok\u00e9mon Crystal \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 1:1 \u043d\u0430 \u0431\u0435\u0439\u0434\u0436\u0435 GitHub Universe 2026<\/figcaption><\/div>\n<\/figure>\n<p><em>Super Mario Land<\/em><\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/14\/ef\/68\/14ef683a3cde88fbfb51cf9973307cfe.png\" alt=\"Super Mario Land \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 1:1 \u043d\u0430 \u0431\u0435\u0439\u0434\u0436\u0435 GitHub Universe 2026\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/14\/ef\/68\/14ef683a3cde88fbfb51cf9973307cfe.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/14\/ef\/68\/14ef683a3cde88fbfb51cf9973307cfe.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Super Mario Land \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 1:1 \u043d\u0430 \u0431\u0435\u0439\u0434\u0436\u0435 GitHub Universe 2026<\/figcaption><\/div>\n<\/figure>\n<p><em>Tetris DX<\/em><\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/b1\/2d\/d4\/b12dd4c9a5a9d29d20dad59fcf430571.png\" alt=\"Tetris DX \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 1:1 \u043d\u0430 \u0431\u0435\u0439\u0434\u0436\u0435 GitHub Universe 2026\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/b1\/2d\/d4\/b12dd4c9a5a9d29d20dad59fcf430571.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/b1\/2d\/d4\/b12dd4c9a5a9d29d20dad59fcf430571.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Tetris DX \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 1:1 \u043d\u0430 \u0431\u0435\u0439\u0434\u0436\u0435 GitHub Universe 2026<\/figcaption><\/div>\n<\/figure>\n<h3>\u0421 ROM-\u0430\u043c\u0438 \u0434\u043b\u044f GBC \u0432\u0441\u0451 \u0435\u0449\u0451 \u0445\u0438\u0442\u0440\u0435\u0435<\/h3>\n<p>\u0416\u0435\u043b\u0435\u0437\u043e \u043f\u0440\u043e\u0436\u0438\u043b\u043e \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u043b\u0433\u043e. \u041c\u043e\u043d\u043e\u0445\u0440\u043e\u043c\u043d\u044b\u0439 Game Boy \u0432\u044b\u0448\u0435\u043b \u0432 \u042f\u043f\u043e\u043d\u0438\u0438 21 \u0430\u043f\u0440\u0435\u043b\u044f 1989 \u0433\u043e\u0434\u0430, \u0430 \u0432\u0435\u0440\u0441\u0438\u044f Color, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u0443 SM83 \u0443\u0434\u0432\u043e\u0438\u043b\u0438 \u0434\u043e 8,4 \u041c\u0413\u0446, \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e 21 \u043e\u043a\u0442\u044f\u0431\u0440\u044f 1998 \u0433\u043e\u0434\u0430, \u0447\u0435\u0440\u0435\u0437 \u0434\u0435\u0432\u044f\u0442\u044c \u043b\u0435\u0442, \u0438 \u0441 \u0442\u0435\u043c \u0436\u0435 \u0432\u0438\u0434\u0435\u043e\u0447\u0438\u043f\u043e\u043c \u043d\u0430 160\u00d7144. Nintendo \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u043b\u0430 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u043e GB\/GBC \u0434\u043e \u043c\u0430\u0440\u0442\u0430 2003 \u0433\u043e\u0434\u0430. \u041a \u043a\u043e\u043d\u0446\u0443 \u044d\u0442\u043e\u0433\u043e \u0441\u0440\u043e\u043a\u0430 \u043d\u0435\u0438\u0441\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043d\u0435 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c, \u0438 \u043f\u043e\u0437\u0434\u043d\u0438\u0435 \u0438\u0433\u0440\u044b \u0434\u043b\u044f GBC \u0432\u044b\u0436\u0438\u043c\u0430\u044e\u0442 \u0438\u0437 \u0436\u0435\u043b\u0435\u0437\u0430 \u0432\u0441\u0451, \u0447\u0442\u043e \u043e\u043d\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442: \u043e\u0442 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u044f \u043e\u043a\u043d\u0430 \u043f\u043e\u0441\u0440\u0435\u0434\u0438 \u043a\u0430\u0434\u0440\u0430 \u0434\u043e \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0448\u0440\u0438\u0444\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0438\u0437 ROM.<\/p>\n<h4>\u041e\u043a\u043d\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u0435\u043b\u0438\u0442 \u044d\u043a\u0440\u0430\u043d, \u043d\u0430\u0434\u043e \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u043e<\/h4>\n<p>\u0412 <em>Oracle of Ages<\/em>, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0448\u044c \u043a \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0443, \u0432\u043d\u0438\u0437\u0443 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u043a\u043d\u043e \u0434\u0438\u0430\u043b\u043e\u0433\u0430, \u0438 \u0441\u043f\u0440\u0430\u0439\u0442\u044b \u043c\u0438\u0440\u0430 \u0440\u0438\u0441\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u043f\u0440\u044f\u043c\u043e \u043f\u043e\u0432\u0435\u0440\u0445 \u0442\u0435\u043a\u0441\u0442\u0430.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043e\u043a\u043d\u043e \u0434\u0438\u0430\u043b\u043e\u0433\u0430 \u0432\u043d\u0438\u0437\u0443 \u044d\u043a\u0440\u0430\u043d\u0430 (<code>LY = 80..143<\/code>), \u0438\u0433\u0440\u0430 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0441\u043b\u043e\u0439 Window (\u0431\u0438\u0442 5 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 <code>LCDC<\/code>) \u043f\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044e <code>LYC == LY<\/code> \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 80 \u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0435\u0433\u043e \u0441\u043d\u043e\u0432\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u044f VBlank. \u041c\u043e\u0439 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0435\u043d\u0434\u0435\u0440\u0435\u0440 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b \u043e\u0434\u0438\u043d <code>WY<\/code> \u043d\u0430 \u0432\u0435\u0441\u044c \u043a\u0430\u0434\u0440 \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 143 \u0438 \u0441\u0443\u0434\u0438\u043b \u043e\u0431\u043e \u0432\u0441\u0435\u0445 144 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u043f\u043e \u0442\u043e\u043c\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u044b\u043b\u043e \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u0430\u0434\u0440\u0430. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u0435\u0440\u0435\u0434\u0432\u0438\u0433\u0430\u0435\u043c\u044b\u0435 \u043a\u0430\u043c\u043d\u0438 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 <code>0..79<\/code> \u0432\u0435\u043b\u0438 \u0441\u0435\u0431\u044f \u0442\u0430\u043a, \u0431\u0443\u0434\u0442\u043e \u0438\u0445 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043e\u043a\u043d\u043e, \u0430 \u0441\u043f\u0440\u0430\u0439\u0442\u044b \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 <code>80..143<\/code> \u0440\u0438\u0441\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u043f\u043e\u0432\u0435\u0440\u0445 \u0442\u0435\u043a\u0441\u0442\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e VBlank \u0443\u0436\u0435 \u0441\u0431\u0440\u043e\u0441\u0438\u043b \u0431\u0438\u0442 5 <code>LCDC<\/code>.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c <code>LCDC<\/code>, <code>SCY<\/code>, <code>SCX<\/code>, <code>WX<\/code> \u0438 <code>WY<\/code> \u0432 <code>0x14600<\/code> \u0438 <code>0x14840<\/code>, \u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u043e\u043a\u043d\u0430 \u0432 <code>0x14900<\/code>, \u0440\u0435\u043d\u0434\u0435\u0440\u0435\u0440 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0440\u043e\u0432\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u0432\u0438\u0434\u0435\u043b \u0432\u0438\u0434\u0435\u043e\u0447\u0438\u043f \u043d\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435:<\/p>\n<pre><code># Snapshot per-scanline LCDC, SCY, SCX, WX, WY for visible lines 0..143if sl &lt; 144:    sl_off: int = 0x14600 + (sl &lt;&lt; 2)    mem[sl_off]     = mem[0x14140]  # LCDC    mem[sl_off + 1] = mem[0x14142]  # SCY    mem[sl_off + 2] = mem[0x14143]  # SCX    mem[sl_off + 3] = mem[0x1414B]  # WX    mem[0x14840 + sl] = mem[0x1414A]  # WY<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<h4>\u0414\u0432\u043e\u0439\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438 \u0431\u044e\u0434\u0436\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0438<\/h4>\n<p>\u0412 <em>Link\u2019s Awakening DX<\/em> \u0433\u043b\u044e\u043a \u0431\u044b\u043b \u0441\u0442\u0440\u0430\u043d\u043d\u0435\u0435: \u0434\u0432\u0443\u0445\u0442\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0445\u043e\u0434\u044c\u0431\u044b \u041b\u0438\u043d\u043a\u0430 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0448\u0430\u0433\u0435 \u043d\u0430 \u043e\u0434\u0438\u043d \u043a\u0430\u0434\u0440 \u0432\u044b\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043b\u0430\u0441\u044c \u043d\u0430\u0438\u0437\u043d\u0430\u043d\u043a\u0443, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0445\u043e\u0434\u044c\u0431\u0435 \u0432\u043d\u0438\u0437, \u0430 \u0432\u043b\u0435\u0432\u043e \u0438 \u0432\u043f\u0440\u0430\u0432\u043e \u2014 \u043d\u0438\u043a\u043e\u0433\u0434\u0430.<\/p>\n<p>\u041f\u0440\u0438 \u0445\u043e\u0434\u044c\u0431\u0435 \u0432\u043b\u0435\u0432\u043e \u0438\u043b\u0438 \u0432\u043f\u0440\u0430\u0432\u043e \u0434\u0432\u0430 \u0441\u043f\u0440\u0430\u0439\u0442\u0430 \u041b\u0438\u043d\u043a\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 8\u00d716 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u0435. \u041f\u0440\u0438 \u0445\u043e\u0434\u044c\u0431\u0435 \u0432\u043d\u0438\u0437 \u043a\u0430\u0436\u0434\u044b\u0435 8 \u043a\u0430\u0434\u0440\u043e\u0432 \u0438\u0433\u0440\u0430 \u043c\u0435\u043d\u044f\u0435\u0442 \u0438\u0445 \u0442\u0430\u0439\u043b\u044b \u0432 VRAM (<code>$8000<\/code>\/<code>$8020<\/code>) \u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442 <code>hflip<\/code> (<code>0x20<\/code>) \u0443 \u043e\u0431\u0435\u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 OAM (<code>$FE0B<\/code>\/<code>$FE0F<\/code>).<\/p>\n<p><em>Link\u2019s Awakening DX<\/em> \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 GBC (\u0431\u0438\u0442 7 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 <code>KEY1<\/code>), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0443 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043e <strong>228 M-\u0446\u0438\u043a\u043b\u043e\u0432<\/strong> \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0445 114. \u0421 \u0431\u044e\u0434\u0436\u0435\u0442\u043e\u043c \u0432 114 \u0441\u0442\u0440\u043e\u043a\u0430 \u043e\u0431\u0440\u044b\u0432\u0430\u043b\u0430\u0441\u044c \u0440\u043e\u0432\u043d\u043e \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u0442\u0430\u0439\u043b\u0430 \u0432 VRAM \u0438 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u0432 OAM, \u0438 \u041b\u0438\u043d\u043a \u043d\u0430 \u043a\u0430\u0434\u0440 \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u0441\u044f \u0440\u0430\u0437\u0432\u0451\u0440\u043d\u0443\u0442\u044b\u043c \u043d\u0430\u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443:<\/p>\n<pre><code>target_cyc: int = 228 if st[REG_DOUBLE_SPD] else 114<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0440\u0435\u0436\u0438\u043c \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0441\u0432\u043e\u0438 \u043f\u043e\u043b\u043d\u044b\u0435 228 \u0446\u0438\u043a\u043b\u043e\u0432 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0443, \u0440\u0430\u0437\u0440\u044b\u0432 \u0438\u0441\u0447\u0435\u0437.<\/p>\n<h4>\u0423\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0441\u0442\u0435\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 ROM<\/h4>\n<p>\u041a\u043e\u0433\u0434\u0430 \u044f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b <em>Pok\u00e9mon Crystal<\/em>, \u0432\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u043e\u0440\u0430 \u041e\u0443\u043a\u0430 \u0438 \u0432\u0441\u0435 \u0440\u0430\u043c\u043a\u0438 \u043c\u0435\u043d\u044e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u043f\u0443\u0441\u0442\u044b\u043c\u0438 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430\u043c\u0438.<\/p>\n<p>\u042f \u0438 \u043d\u0435 \u0437\u043d\u0430\u043b, \u0447\u0442\u043e \u0436\u0435\u043b\u0435\u0437\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0442\u043e, \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u0434\u0435\u043b\u0430\u0435\u0442 \u0438\u0433\u0440\u0430. \u0427\u0442\u043e\u0431\u044b \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u043e\u0431\u0438\u0442\u043d\u044b\u0435 \u0442\u0430\u0439\u043b\u044b \u0448\u0440\u0438\u0444\u0442\u0430 \u0438 \u0440\u0430\u043c\u043e\u043a \u0432 \u0434\u0432\u0443\u0445\u0431\u0438\u0442\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0432 WRAM, <em>Pok\u00e9mon Crystal<\/em> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <code>FarCopyBytesDouble_DoubleBankSwitch<\/code> (<code>$0DEF<\/code>). \u042d\u0442\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 <strong>SP \u0432 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0439 \u0431\u0430\u043d\u043a ROM (<\/strong><code><strong>$4000..$7FFF<\/strong><\/code><strong>)<\/strong>, \u0432 \u0446\u0438\u043a\u043b\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 <code>POP DE<\/code>, \u0432\u044b\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u044f \u043f\u043e \u0434\u0432\u0430 \u0431\u0430\u0439\u0442\u0430 \u043a\u0430\u0436\u0434\u044b\u0435 3 M-\u0446\u0438\u043a\u043b\u0430, \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0447\u0435\u0440\u0435\u0437 HDMA \u0432\u043e \u0432\u0440\u0435\u043c\u044f HBlank (<code>$4209<\/code>) \u0438 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>RES 7, (HL)<\/code> \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <code>$FF55<\/code> (<code>424A: cb be<\/code>).<\/p>\n<p>\u042f \u0438\u0441\u0445\u043e\u0434\u0438\u043b \u0438\u0437 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e <code>SP<\/code> \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432 \u041e\u0417\u0423, \u0430 <code>RES 7<\/code> \u2014 \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u0431\u0438\u0442\u043e\u0432\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f, \u0438 \u043e\u0431\u0430 \u0448\u0430\u0433\u0430 \u043b\u043e\u043c\u0430\u043b\u0438\u0441\u044c. \u041a\u043e\u0433\u0434\u0430 <code>POP rr<\/code> \u043f\u0440\u0438 <code>SP &lt; 0x8000<\/code> \u0441\u0442\u0430\u043b \u0447\u0438\u0442\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043e\u043a\u043d\u043e ROM, \u0430 \u0441\u0431\u0440\u043e\u0441 \u0431\u0438\u0442\u0430 7 \u0432 <code>$FF55<\/code> \u0441\u0442\u0430\u043b \u0442\u0440\u0430\u043a\u0442\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u043e\u0442\u043c\u0435\u043d\u0430 HDMA (\u0430 \u043d\u0435 \u043a\u0430\u043a GP-DMA \u043d\u0430 128 \u0442\u0430\u0439\u043b\u043e\u0432 <code>0x7F<\/code>), \u041e\u0443\u043a \u0438 \u0440\u0430\u043c\u043a\u0438 \u0432\u0435\u0440\u043d\u0443\u043b\u0438\u0441\u044c.<\/p>\n<pre><code>@micropython.viperdef update_palettes_cgb_16(st: ptr32, mem: ptr8, fpal: ptr16):    st[REG_PAL_DIRTY] = 0    for i in range(32):        i2: int = i &lt;&lt; 1        bgr: int = int(mem[0x14200 + i2]) | (int(mem[0x14201 + i2]) &lt;&lt; 8)        r5: int = bgr &amp; 0x1F        g5: int = (bgr &gt;&gt; 5) &amp; 0x1F        b5: int = (bgr &gt;&gt; 10) &amp; 0x1F        col_bg: int = (r5 &lt;&lt; 11) | (g5 &lt;&lt; 6) | b5        if i &amp; 3:            col_bg = col_bg | 0x0020        fpal[i] = col_bg<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412\u043c\u0435\u0441\u0442\u0435 \u0441 \u0440\u0435\u043d\u0434\u0435\u0440\u0435\u0440\u043e\u043c \u0444\u043e\u043d\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043f\u0443\u0441\u0442\u044b\u0435 \u0442\u0430\u0439\u043b\u044b, \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u043a\u0430\u0434\u0440\u0430 \u043f\u043e \u043d\u0430\u0448\u0438\u043c \u0437\u0430\u043c\u0435\u0440\u0430\u043c \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043e\u0442 1,5 \u0434\u043e 2,8 \u043c\u0441.<\/p>\n<h3>\u0420\u041f\u0413 \u043d\u0430 \u0448\u043d\u0443\u0440\u043a\u0435 \u0434\u043b\u044f \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446-\u043a\u043e\u0440\u0438\u0434\u043e\u0440\u043e\u0432<\/h3>\n<p>\u041f\u043e \u043d\u0430\u0448\u0438\u043c \u0437\u0430\u043c\u0435\u0440\u0430\u043c \u043d\u0430 \u0431\u0435\u0439\u0434\u0436\u0435, \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 12 \u043c\u0441, \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u2014 \u0432 3 \u043c\u0441, \u0438 \u0446\u0438\u043a\u043b \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0431\u044e\u0434\u0436\u0435\u0442 16,6 \u043c\u0441, \u043d\u0443\u0436\u043d\u044b\u0439 \u0434\u043b\u044f 60 \u0413\u0446.<\/p>\n<p>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0442\u043e\u0436\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c: \u044d\u0442\u043e \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0431\u0435\u0439\u0434\u0436 \u043d\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438.<\/p>\n<ul>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c <code>A + B<\/code> \u0438\u043b\u0438 <code>START + SELECT<\/code> 650 \u043c\u0441 (<code>now - self.menu_hold_start &gt;= 650<\/code> \u0432 <code>apps\/gbc\/__init__.py<\/code>; \u0435\u0441\u0442\u044c \u0435\u0449\u0451 \u0442\u0430\u0439\u043c\u0435\u0440 <code>AUTO_SAVE_IDLE_MS<\/code> \u043d\u0430 60 \u0441\u0435\u043a\u0443\u043d\u0434, \u0435\u0441\u043b\u0438 \u043a\u043d\u043e\u043f\u043a\u0438 \u043d\u0435 \u043d\u0430\u0436\u0438\u043c\u0430\u044e\u0442), \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u043d\u044e \u043f\u0430\u0443\u0437\u044b \u0441 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043e\u043c \u043a\u0430\u0434\u0440\u043e\u0432, \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c\u0438 \u0441\u0442\u0440\u043e\u043a \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043a\u0438, \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043e\u043c \u0438 \u0432\u044b\u0445\u043e\u0434\u043e\u043c.<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u0441\u0430\u043d\u0438\u0435 \u0441\u0435\u043d\u0441\u043e\u0440\u043d\u043e\u0439 \u043f\u043b\u043e\u0449\u0430\u0434\u043a\u0438 HOME \u043d\u0430 \u043e\u0431\u043e\u0440\u043e\u0442\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <code>machine.Pin.board.BUTTON_HOME.irq<\/code>, \u0430 \u0442\u043e\u0442 \u2014 <code>save_state(sync_sram=True)<\/code>: \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0430 84 \u041a\u0411 \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u043e Flash \u043f\u0435\u0440\u0435\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c \u0432 MonaOS.<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u043e\u0434 \u043e\u0442\u043a\u0440\u044b\u0442: <a href=\"https:\/\/github.com\/spf13\/universe-2026-badge-hacks\" rel=\"noopener nofollow\">github.com\/spf13\/universe-2026-badge-hacks<\/a>. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u0431\u0435\u0439\u0434\u0436:<\/p>\n<ul>\n<li>\n<p>\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0431\u0435\u0439\u0434\u0436 \u043f\u043e USB, \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u0432 MonaOS <strong>USB Disk<\/strong> \u0438 \u0441\u043c\u043e\u043d\u0442\u0438\u0440\u0443\u0439\u0442\u0435 \u0434\u0438\u0441\u043a;<\/p>\n<\/li>\n<li>\n<p>\u0441\u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0439\u0442\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0438 \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0439\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435:<\/p>\n<\/li>\n<\/ul>\n<pre><code>git clone https:\/\/github.com\/spf13\/universe-2026-badge-hacks.gitcd universe-2026-badge-hacksCopy-Item -Recurse -Force .\\apps\\gbc F:\\apps\\<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<ul>\n<li>\n<p>\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435 \u0432 <code>F:\\apps\\gbc\\roms\\<\/code> \u0441\u0432\u043e\u0438 \u0437\u0430\u043a\u043e\u043d\u043d\u043e \u0441\u043d\u044f\u0442\u044b\u0435 \u0434\u0430\u043c\u043f\u044b <code>.gb<\/code>\/<code>.gbc<\/code> (\u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u044b\u0435 \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u043c \u043f\u0440\u0430\u0432\u043e\u043c ROM \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043d\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f): <\/p>\n<ul>\n<li>\n<p><code>zelda_ladx.gbc<\/code> (<em>Link\u2019s Awakening DX<\/em>)<\/p>\n<\/li>\n<li>\n<p><code>pokemon_crystal.gbc<\/code> (<em>Pok\u00e9mon Crystal<\/em>)<\/p>\n<\/li>\n<li>\n<p><code>dw_1_2.gbc<\/code> (<em>Dragon Warrior I &amp; II<\/em>)<\/p>\n<\/li>\n<li>\n<p><code>tetris_dx.gbc<\/code> (<em>Tetris DX<\/em>)<\/p>\n<\/li>\n<li>\n<p><code>zelda_ages.gbc<\/code> (<em>Oracle of Ages<\/em>)<\/p>\n<\/li>\n<li>\n<p><code>mario_land.gb<\/code> (<em>Super Mario Land<\/em>)<\/p>\n<\/li>\n<li>\n<p><code>ff_legend.gb<\/code> (<em>The Final Fantasy Legend<\/em>)<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u0438\u0437\u0432\u043b\u0435\u043a\u0438\u0442\u0435 \u0434\u0438\u0441\u043a, \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043b\u0430\u0443\u043d\u0447\u0435\u0440 GBC, \u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0438\u0442\u0435 \u0431\u0435\u0439\u0434\u0436 \u0432\u0432\u0435\u0440\u0445 \u043d\u043e\u0433\u0430\u043c\u0438 \u0438 \u0438\u0433\u0440\u0430\u0439\u0442\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430 \u043d\u0430\u0434 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u043c Game Boy Color \u0437\u0430\u043e\u0434\u043d\u043e \u0443\u0441\u043a\u043e\u0440\u0438\u043b\u0430 \u0438 <a href=\"https:\/\/spf13.com\/p\/zelda-on-my-conference-badge\/\" rel=\"noopener nofollow\">\u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 NES<\/a>. \u041a\u043e\u0433\u0434\u0430 \u043f\u044f\u0442\u044c \u043f\u0440\u0438\u0451\u043c\u043e\u0432 Viper \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043d\u0430 SM83, \u044f \u043f\u0435\u0440\u0435\u043d\u0451\u0441 \u0438\u0445 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 <code>apps\/nes\/emu.py<\/code>: \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0431\u0430\u043d\u043a\u043e\u0432 CHR \u0447\u0435\u0440\u0435\u0437 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 (<code>REG_CHR_B0_OFF<\/code> \/ <code>REG_CHR_B1_OFF<\/code> \u0432\u043d\u0443\u0442\u0440\u0438 <code>self.mem<\/code> \u0432\u043c\u0435\u0441\u0442\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f 8192 \u0431\u0430\u0439\u0442 \u0432 Python \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438); \u0432\u0441\u0435 262 \u0441\u0442\u0440\u043e\u043a\u0438 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043a\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 Viper \u0432\u043c\u0435\u0441\u0442\u043e \u0432\u044b\u0445\u043e\u0434\u0430 \u043f\u043e <code>REG_CHR_DIRTY<\/code>; \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043b\u0438\u0442\u0440\u044b \u0432 Viper \u043f\u043e \u0444\u043b\u0430\u0433\u0443 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 (<code>REG_PAL_DIRTY<\/code>); \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438\u043c\u0451\u043d \u0441 \u0440\u0430\u0437\u0432\u0451\u0440\u043d\u0443\u0442\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u043f\u043e 8 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0432 <code>render_bg_32<\/code>; \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 \u0431\u044b\u0441\u0442\u0440\u044b\u0435 \u043f\u0443\u0442\u0438 \u0434\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u043e\u0432 \u0438 \u0446\u0438\u043a\u043b\u043e\u0432 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043c\u0435\u043d\u044f \u043d\u0430 \u0448\u0435\u0435 \u0432\u0438\u0441\u0438\u0442 Game Boy Color, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 1:1 \u0438\u0434\u0443\u0442 <em>Link\u2019s Awakening DX<\/em> \u0438 <em>Pok\u00e9mon Crystal<\/em>. \u0415\u0441\u043b\u0438 \u0431\u0443\u0434\u0435\u0442\u0435 \u043d\u0430 Universe \u0432 \u0421\u0430\u043d-\u0424\u0440\u0430\u043d\u0446\u0438\u0441\u043a\u043e, \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442\u0435 \u043f\u043e\u0437\u0434\u043e\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1100444\/\">https:\/\/habr.com\/ru\/articles\/1100444\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0417\u0430\u043a\u043e\u043d\u0447\u0438\u0432 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 NES, \u044f \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u043d\u0430 \u043d\u0451\u043c \u043a\u0443\u0447\u0443 \u0438\u0433\u0440, \u0438 \u0432\u0441\u0435 \u0448\u043b\u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e. \u041d\u0430 \u0431\u0435\u0439\u0434\u0436\u0435 \u044f \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u0448\u0451\u043b \u043f\u0435\u0440\u0432\u044b\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u0437\u0435\u043c\u0435\u043b\u0438\u0439 Zelda. \u0418 \u0442\u0443\u0442 \u043c\u0435\u043d\u044f \u0437\u0430\u0446\u0435\u043f\u0438\u043b\u043e: \u0432 Zelda \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c, \u043d\u043e \u043f\u043e \u0444\u043e\u0440\u043c\u0435 \u0431\u0435\u0439\u0434\u0436 \u043a\u0443\u0434\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 Game Boy, \u0447\u0435\u043c \u043d\u0430 NES. \u0410 \u043d\u0430 Game Boy \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c \u0438 Zelda, \u0438 Pok\u00e9mon. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u043e, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e \u0436\u0435\u043b\u0435\u0437\u043e Game Boy \u044f \u0442\u043e\u043b\u043a\u043e\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u043d\u0430\u044e? \u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e.\u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u044d\u043a\u0440\u0430\u043d Game Boy Color \u043d\u0430 \u0431\u0435\u0439\u0434\u0436\u0435 GitHub Universe 2026\u0422\u0430\u043a \u0447\u0442\u043e \u044f \u0441\u043d\u043e\u0432\u0430 \u0432\u0437\u044f\u043b \u0432 \u043d\u0430\u043f\u0430\u0440\u043d\u0438\u043a\u0438 Gemini \u0438 \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043f\u043e\u0442\u044f\u043d\u0435\u0442 \u043b\u0438 \u0442\u0430 \u0436\u0435 \u043f\u043b\u0430\u0442\u0430 Badger \u043d\u0430 RP2350 Game Boy \u0438 Game Boy Color. \u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043a\u043e\u0434\u0430 Viper \u0432 MicroPython \u0438 8 \u041c\u0411 QSPI PSRAM \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u043f\u0440\u0435\u0436\u043d\u0438\u043c\u0438, \u0430 \u0432\u043e\u0442 \u0433\u043e\u043b\u043e\u0432\u043e\u043b\u043e\u043c\u043a\u0430 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0438 \u043a\u0430\u0440\u0442\u0440\u0438\u0434\u0436\u0430 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0441\u043e\u0432\u0441\u0435\u043c \u0434\u0440\u0443\u0433\u043e\u0439.\u041e\u043f\u044b\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u0432 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u043d\u0435 \u043d\u0443\u0436\u0435\u043d: \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0435\u0440\u043c\u0438\u043d \u044f \u043e\u0431\u044a\u044f\u0441\u043d\u044e \u043f\u043e \u0445\u043e\u0434\u0443 \u0434\u0435\u043b\u0430.\u042d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 Game Boy Color \u043d\u0430 \u0431\u0435\u0439\u0434\u0436\u0435 GitHub Universe 2026\u042f \u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e SM83 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0449\u0435. \u041d\u0435 \u0442\u0443\u0442-\u0442\u043e \u0431\u044b\u043b\u043e\u0412 NES \u0441\u0442\u043e\u0438\u0442 Ricoh 2A03, \u0443\u0440\u0435\u0437\u0430\u043d\u043d\u044b\u0439 MOS 6502: \u0442\u0440\u0438 8-\u0431\u0438\u0442\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 (A, X, Y), \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0441\u0442\u0435\u043a\u0430 \u0438 56 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439. \u0412\u0441\u0451 \u044f\u0434\u0440\u043e \u043f\u043e\u043c\u0435\u0449\u0430\u043b\u043e\u0441\u044c \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 @micropython.viper \u043d\u0430\u0434 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0431\u0430\u043d\u043a\u043e\u0432.\u0412 Game Boy \u0441\u0442\u043e\u0438\u0442 Sharp SM83 (LR35902), \u0433\u0438\u0431\u0440\u0438\u0434 8080 \u0438 Z80: \u0432\u043e\u0441\u0435\u043c\u044c 8-\u0431\u0438\u0442\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 (A, F, B, C, D, E, H, L, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u043f\u0430\u0440\u044b AF, BC, DE, HL), \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0441\u0442\u0435\u043a\u0430, \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u043a\u043e\u043c\u0430\u043d\u0434 \u0438 512 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439. \u042d\u0442\u043e 256 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043e\u043f\u043a\u043e\u0434\u043e\u0432 \u043f\u043b\u044e\u0441 \u0435\u0449\u0451 256 \u0437\u0430 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c 0xCB, \u0432 \u0434\u0435\u0432\u044f\u0442\u044c \u0440\u0430\u0437 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0443 6502.        MOS 6502 (NES)                  Sharp SM83 (Game Boy Color)\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510       \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u2502 Registers: A, X, Y        \u2502       \u2502 Registers: A, F, B, C, D, E, H, L \u2502\u2502 Opcodes:   56 base        \u2502  vs   \u2502 Opcodes:   512 (256 base + 256 CB)\u2502\u2502 Banking:   Cartridge discrete     \u2502 Banking:   ROM, VRAM, WRAM, SRAM  \u2502\u2502 Speed:     1.79 MHz flat  \u2502       \u2502 Speed:     4.19 MHz \/ 8.38 MHz GBC\u2502\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518       \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\u041f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u0437\u0430\u0442\u043e \u0441 \u044d\u043a\u0440\u0430\u043d\u043e\u043c \u0432\u0441\u0451 \u043f\u0440\u043e\u0449\u0435:\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044cGBC (apps\/gbc\/emu.py)NES (apps\/nes\/emu.py)\u041f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0432 \u043a\u0430\u0434\u0440\u043523 04061 440\u0421\u0442\u0440\u043e\u043a \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043a\u0438 \u043d\u0430 \u043a\u0430\u0434\u0440154262\u0422\u0430\u043a\u0442\u043e\u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u043d\u0430 \u043a\u0430\u0434\u044017 55629 606\u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0441\u043f\u0440\u0430\u0439\u0442\u043e\u04324064\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0431\u0430\u043d\u043a\u0430 CHR (\u0431\u0430\u0439\u0442)08 192\u041f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0432 2,67 \u0440\u0430\u0437\u0430 \u043c\u0435\u043d\u044c\u0448\u0435, \u0441\u0442\u0440\u043e\u043a \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043a\u0438 \u0432 1,7 \u0440\u0430\u0437\u0430 \u043c\u0435\u043d\u044c\u0448\u0435.\u0427\u0442\u043e\u0431\u044b \u0443\u043b\u043e\u0436\u0438\u0442\u044c\u0441\u044f \u0432 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f MicroPython, \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c \u043f\u044f\u0442\u044c \u043f\u0440\u0438\u0451\u043c\u043e\u0432 Viper, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432 \u0441\u0431\u043e\u0440\u043a\u0435 \u0434\u043b\u044f NES \u043d\u0435 \u0431\u044b\u043b\u043e.ViperTypeError: viper:8004\u041d\u0430 NES \u043f\u0440\u0435\u0436\u043d\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u043b. \u0423 6502 \u0442\u0440\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430, A, X \u0438 Y, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 PC, SP, P \u0438 \u043f\u0430\u0440\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u0435\u0449\u0451 \u0432\u043b\u0435\u0437\u0430\u043b\u0438 \u0432 \u0447\u0435\u0442\u044b\u0440\u0435 \u0431\u044b\u0441\u0442\u0440\u044b\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 Viper (r0\u2013r3). 56 \u043e\u043f\u043a\u043e\u0434\u043e\u0432 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043b\u0438\u0441\u044c \u0446\u0435\u043f\u043e\u0447\u043a\u043e\u0439 if\/elif \u0433\u043b\u0443\u0431\u0438\u043d\u043e\u0439 55, \u043f\u043e\u0442\u043e\u043c \u043e\u043d\u0430 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0430\u0441\u044c \u0432 \u043f\u044f\u0442\u0438\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a, \u0438 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0434\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0443\u043f\u0430\u043b\u0430 \u0432\u0434\u0432\u043e\u0435. \u041e\u0434\u0438\u043d \u0446\u0438\u043a\u043b Viper, \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0430 \u043f\u0430\u043c\u044f\u0442\u0438, \u0432\u0441\u0451 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a.SM83 \u0442\u0443\u0434\u0430 \u043d\u0435 \u0432\u043b\u0435\u0437\u0430\u0435\u0442. \u0412\u043e\u0441\u0435\u043c\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 (A, F, B, C, D, E, H, L) \u043f\u043b\u044e\u0441 PC, SP \u0438 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438 \u0442\u0430\u043a\u0442\u043e\u0432 \u0432 \u0447\u0435\u0442\u044b\u0440\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043d\u0435 \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f: \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b Cortex-M33 \u0437\u0430\u043d\u044f\u0442\u044b \u043f\u043e\u0434 \u0441\u0442\u0435\u043a, \u043a\u0430\u0434\u0440 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u0438 \u0440\u0430\u043d\u0442\u0430\u0439\u043c. \u042d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c viper:8004: \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b \u043d\u0435 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435.\u0414\u0435\u0448\u0438\u0444\u0440\u0430\u0442\u043e\u0440 \u0442\u043e\u0436\u0435 \u043d\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u0442\u0441\u044f. \u0414\u0435\u0440\u0435\u0432\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u043d\u0430 56 \u043e\u043f\u043a\u043e\u0434\u0430\u0445, \u0434\u043b\u044f 512 (256 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0438 256 \u0441 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c CB) \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e \u0431\u044b \u043e\u043a\u043e\u043b\u043e 500 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439. \u0422\u043e, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u043b\u043e \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 NES \u0431\u044b\u0441\u0442\u0440\u044b\u043c, \u0434\u043b\u044f Game Boy \u0434\u0430\u0436\u0435 \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f.\u041e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0434\u0432\u0435 \u0437\u0430\u0434\u0430\u0447\u0438: \u0433\u0434\u0435 \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432\u043e\u0441\u0435\u043c\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0438 \u043a\u0430\u043a \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c 512 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0431\u0435\u0437 512 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439.\u0412\u043e\u0441\u0435\u043c\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043d\u0435 \u0432\u043b\u0435\u0437\u0430\u044e\u0442 \u0432 \u0447\u0435\u0442\u044b\u0440\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435\u0415\u0441\u043b\u0438 \u0447\u0438\u0442\u0430\u0442\u044c \u043e\u043f\u043a\u043e\u0434 \u043d\u0435 \u043a\u0430\u043a \u043e\u0434\u043d\u043e \u0447\u0438\u0441\u043b\u043e, \u0430 \u043a\u0430\u043a \u0442\u0440\u0438 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445, 512 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0441\u0445\u043b\u043e\u043f\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u043b\u043e\u043a\u043e\u0432. \u041d\u043e \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443, 8-\u0431\u0438\u0442\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0438\u0437 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 Viper \u0432 \u043f\u043b\u043e\u0441\u043a\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c: \u0432\u043e\u0441\u0435\u043c\u044c \u0431\u0430\u0439\u0442 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 0x14500 \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0433\u043e bytearray (self.mem = bytearray(0x14A00)):# CPU 8-bit Register File in flat arena (0x14500..0x14507)# Index: 0=B, 1=C, 2=D, 3=E, 4=H, 5=L, 6=(HL) indirect pointer, 7=A\u0418\u043d\u0434\u0435\u043a\u0441 6 \u043e\u0441\u043e\u0431\u044b\u0439: \u0432 \u044d\u0442\u043e\u043c \u0431\u0438\u0442\u043e\u0432\u043e\u043c \u043f\u043e\u043b\u0435 SM83 \u043e\u043d \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u043e\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u043f\u0430\u043c\u044f\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 (HL), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043b\u0435\u0436\u0430\u0442 \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c 0, 1, 2, 3, 4, 5, 7.\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Z80 \u0438 SM83 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043d\u0430 \u0431\u0443\u043c\u0430\u0433\u0435 \u0432 \u0432\u043e\u0441\u044c\u043c\u0435\u0440\u0438\u0447\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435. \u0415\u0441\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u0431\u0430\u0439\u0442 \u043e\u043f\u043a\u043e\u0434\u0430 \u043f\u043e \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044e 8, \u043e\u043d \u0440\u0430\u0441\u043f\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0442\u0440\u0438 \u0432\u043e\u0441\u044c\u043c\u0435\u0440\u0438\u0447\u043d\u044b\u0435 \u0446\u0438\u0444\u0440\u044b (x, y, z), \u0438 \u044d\u0442\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044f \u043d\u0430\u0431\u043e\u0440\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439:x: int = op &gt;&gt; 6          # Bits 7-6: Opcode category (0..3)y: int = (op &gt;&gt; 3) &amp; 7    # Bits 5-3: Destination register or ALU operation (0..7)z: int = op &amp; 7           # Bits 2-0: Source register or condition code (0..7)\u0423 \u0432\u0441\u0435\u0445 64 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 LD r, r&#8217; (0x40..0x7F) x == 1, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u0438 \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u044f\u0442\u044c \u0441\u0442\u0440\u043e\u043a Viper:if x == 1:    # 0x40..0x7F: LD r[y], r[z] or HALT (0x76)    if op == 0x76:        halted = 1    else:        vr1: int = 0        if z == 6:            hl1: int = (int(mem[0x14504]) &lt;&lt; 8) | int(mem[0x14505])            vr1 = read_memory(hl1)        else:            vr1 = int(mem[0x14500 + z])        if y == 6:            write_memory((int(mem[0x14504]) &lt;&lt; 8) | int(mem[0x14505]), vr1)        else:            mem[0x14500 + y] = vr1\u041e\u0434\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0448\u0435\u0441\u0442\u044c\u0434\u0435\u0441\u044f\u0442 \u0447\u0435\u0442\u044b\u0440\u0435 \u043e\u043f\u043a\u043e\u0434\u0430, \u0430 y \u0438 z \u0432\u044b\u0431\u0438\u0440\u0430\u044e\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440-\u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a.\u041f\u0440\u0438 x == 2 \u0442\u0435 \u0436\u0435 \u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044f \u0437\u0430\u0434\u0430\u044e\u0442 \u0432\u0441\u0435 \u0432\u043e\u0441\u0435\u043c\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0410\u041b\u0423 \u043d\u0430\u0434 A \u0438 r[z] (ADD, ADC, SUB, SBC, AND, XOR, OR, CP): \u0435\u0449\u0451 \u0448\u0435\u0441\u0442\u044c\u0434\u0435\u0441\u044f\u0442 \u0447\u0435\u0442\u044b\u0440\u0435 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0432 \u043e\u0434\u043d\u043e\u043c \u0431\u043b\u043e\u043a\u0435.256 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c 0xCB \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u0442\u0430\u043a \u0436\u0435: cb_x == 1 \u2014 \u044d\u0442\u043e BIT, 2 \u2014 RES, 3 \u2014 SET, \u0430 0 \u2014 \u0441\u0434\u0432\u0438\u0433, \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0434\u0432\u0438\u0433 \u0438\u043b\u0438 \u043e\u0431\u043c\u0435\u043d \u0442\u0435\u0442\u0440\u0430\u0434 y \u043d\u0430\u0434 r[z]. \u041f\u044f\u0442\u044c\u0434\u0435\u0441\u044f\u0442 \u0441\u0442\u0440\u043e\u043a \u0431\u0438\u0442\u043e\u0432\u043e\u0439 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u043b\u0438 \u0441\u043e\u0442\u043d\u0438 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439.\u0427\u0435\u0442\u044b\u0440\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u0432\u043c\u0435\u0441\u0442\u043e \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443\u041d\u0430 NES \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0445\u0438\u0442\u0440\u0438\u0442\u044c. \u041e\u0417\u0423, PPU, APU, PRG-ROM: \u0432\u0441\u0451 \u043b\u0435\u0436\u0438\u0442 \u0442\u0430\u043c, \u043a\u0443\u0434\u0430 \u0435\u0433\u043e \u043f\u0440\u0438\u043f\u0430\u044f\u043b\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0447\u0442\u0435\u043d\u0438\u0435 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0430\u0434\u0440\u0435\u0441\u0430, \u0438 \u0433\u043e\u0442\u043e\u0432\u043e.\u041d\u0430 Game Boy \u0442\u0430\u043a \u043d\u0435 \u0432\u044b\u0439\u0434\u0435\u0442. \u041f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0432\u0438\u0434\u0438\u0442 64 \u041a\u0411, \u043d\u043e \u043a\u0430\u0440\u0442\u0440\u0438\u0434\u0436 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043c\u0435\u043d\u044f\u0435\u0442 \u0442\u043e, \u0447\u0442\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0437\u0430 \u044d\u0442\u0438\u043c \u043e\u043a\u043d\u043e\u043c:$0000..$3FFF: 16 \u041a\u0411 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0431\u0430\u043d\u043a\u0430 ROM 0;$4000..$7FFF: 16 \u041a\u0411 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u043e\u0433\u043e \u0431\u0430\u043d\u043a\u0430 ROM (\u0434\u043e 125\/128\/512 \u0431\u0430\u043d\u043a\u043e\u0432 \u0443 MBC1\/MBC3\/MBC5);$A000..$BFFF: 8 \u041a\u0411 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 SRAM (4 \u0431\u0430\u043d\u043a\u0430);$C000..$CFFF: 4 \u041a\u0411 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0431\u0430\u043d\u043a\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 WRAM 0;$D000..$DFFF: 4 \u041a\u0411 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u043e\u0439 WRAM (\u0431\u0430\u043d\u043a\u0438 1\u20137 \u0447\u0435\u0440\u0435\u0437 SVBK \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 $FF70);$E000..$FDFF: \u044d\u0445\u043e-\u043e\u0431\u043b\u0430\u0441\u0442\u044c, \u0437\u0435\u0440\u043a\u0430\u043b\u043e $C000..$DDFF.\u041f\u0435\u0440\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0430 \u0430\u0434\u0440\u0435\u0441 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438: \u0435\u0441\u043b\u0438 \u043e\u043d \u0432 \u044d\u0442\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435, \u0434\u0435\u043b\u0430\u0435\u043c \u043e\u0434\u043d\u043e, \u0435\u0441\u043b\u0438 \u0432 \u0442\u043e\u043c \u2014 \u0434\u0440\u0443\u0433\u043e\u0435:if addr &lt; 0x8000: &#8230;elif addr &lt; 0xA000: &#8230;elif addr &lt; 0xC000: &#8230;elif addr &lt; 0xD000: &#8230;elif addr &lt; 0xE000: &#8230;\u0427\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043b\u0435\u0433\u043a\u043e \u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0442\u0435\u043c, \u043a\u0430\u043a \u043a\u0430\u0440\u0442\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 \u0440\u0438\u0441\u0443\u044e\u0442 \u0432\u043e \u0432\u0441\u0435\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0445. \u041d\u043e Game Boy \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 4,19 \u041c\u0413\u0446, \u0430 GBC \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0432\u0434\u0432\u043e\u0435 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0442\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u0440\u0430\u0437 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u041c\u044b \u0441\u043d\u043e\u0432\u0430 \u0443\u043f\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0432 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0441\u043a\u0440\u043e\u043c\u043d\u043e\u0433\u043e \u0436\u0435\u043b\u0435\u0437\u0430. \u041a\u0430\u0436\u0434\u044b\u0439 if \u2014 \u044d\u0442\u043e \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 Cortex-M33 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0430 \u043f\u0440\u043e\u043c\u0430\u0445 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440.\u0425\u0438\u0442\u0440\u043e\u0441\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043b\u044e\u0431\u043e\u0439 \u0430\u0434\u0440\u0435\u0441 Game Boy 16-\u0431\u0438\u0442\u043d\u044b\u0439, \u0442\u043e \u0435\u0441\u0442\u044c \u0447\u0435\u0442\u044b\u0440\u0435 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u044b\u0435 \u0446\u0438\u0444\u0440\u044b \u0432\u0440\u043e\u0434\u0435 $D123. \u0412 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u044d\u0442\u043e 1101 0001 0010 0011: \u043b\u0435\u0432\u044b\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u0431\u0438\u0442\u0430 (15\u201312) \u2014 \u0441\u0442\u0430\u0440\u0448\u0430\u044f \u0442\u0435\u0442\u0440\u0430\u0434\u0430, \u043f\u0440\u0430\u0432\u044b\u0435 \u0434\u0432\u0435\u043d\u0430\u0434\u0446\u0430\u0442\u044c (11\u20130) \u2014 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 4 \u041a\u0411.\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0432 4 \u041a\u0411 \u2014 \u044d\u0442\u043e 4096 = 2\u00b9\u00b2 \u0431\u0430\u0439\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0434\u0432\u0438\u0433 \u0432\u043f\u0440\u0430\u0432\u043e \u043d\u0430 12 (addr &gt;&gt; 12) \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u043c\u043b\u0430\u0434\u0448\u0438\u0435 \u0434\u0432\u0435\u043d\u0430\u0434\u0446\u0430\u0442\u044c \u0431\u0438\u0442 \u0438 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u0440\u0448\u0443\u044e \u0442\u0435\u0442\u0440\u0430\u0434\u0443: \u043e\u0442 0 \u0434\u043e 15. \u0428\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u0440\u043e\u0432\u043d\u043e 64 \u041a\u0411. \u041c\u0430\u0441\u043a\u0430 \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 (addr &amp; 0xFFF) \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u043b\u0430\u0434\u0448\u0438\u0435 \u0434\u0432\u0435\u043d\u0430\u0434\u0446\u0430\u0442\u044c \u0431\u0438\u0442, \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 0\u20134095 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.$D123 \u2192 0xD (\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 13) + 0x123 (\u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 291). \u0421\u0442\u0430\u0440\u0448\u0430\u044f \u0442\u0435\u0442\u0440\u0430\u0434\u0430 \u0441\u0430\u043c\u0430 \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u043a\u0430\u043a\u043e\u0439 \u0431\u0430\u043d\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u043d\u0438\u043a\u0430\u043a\u043e\u0439 if \u043d\u0435 \u043d\u0443\u0436\u0435\u043d. \u042f \u0434\u0435\u0440\u0436\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0438\u0437 16 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 self.st (\u044f\u0447\u0435\u0439\u043a\u0438 32\u201347 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 array(&#8216;i&#8217;, [0]*64)) \u0441 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 self.mem \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0443\u044e \u0435\u0451 \u043f\u0440\u044f\u043c\u043e \u044d\u0442\u043e\u0439 \u0442\u0435\u0442\u0440\u0430\u0434\u043e\u0439:Address Range    Page Slot     Mapped Arena Region$8000..$8FFF     st[40]   \u2500\u2500\u25ba  0x0000 (VRAM Bank 0 or 1, low)$9000..$9FFF     st[41]   \u2500\u2500\u25ba  0x1000 (VRAM Bank 0 or 1, high)$A000..$AFFF     st[42]   \u2500\u2500\u25ba  0xC000 + (sram_bank &lt;&lt; 13)$B000..$BFFF     st[43]   \u2500\u2500\u25ba  0xD000 + (sram_bank &lt;&lt; 13)$C000..$CFFF     st[44]   \u2500\u2500\u25ba  0x4000 (WRAM Bank 0)$D000..$DFFF     st[45]   \u2500\u2500\u25ba  0x4000 + (wram_bank &lt;&lt; 12)$E000..$EFFF     st[46]   \u2500\u2500\u25ba  0x4000 (Echo WRAM0)\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0431\u0430\u043d\u043a\u0430 \u2014 \u043e\u0434\u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c, \u0431\u0435\u0437 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f:# Switching GBC WRAM bank (SVBK at $FF70)wb: int = vw &amp; 7if wb == 0: wb = 1st[REG_WRAM_BANK] = wbst[45] = 0x4000 + (wb &lt;&lt; 12)  # Slot 45 points to the active 4KB WRAM bank\u0410 \u0447\u0442\u0435\u043d\u0438\u0435 \u2014 \u0447\u0435\u0442\u044b\u0440\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f:# 4KB Page Table lookup in Viperpage_offset: int = st[32 + (addr &gt;&gt; 12)]val: int = int(mem[page_offset + (addr &amp; 0xFFF)])\u041d\u0430\u0439\u0442\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u043d\u0430\u043b\u043e\u0436\u0438\u0442\u044c \u043c\u0430\u0441\u043a\u0443, \u0441\u043b\u043e\u0436\u0438\u0442\u044c, \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0431\u0430\u043d\u043a\u043e\u0432 \u043f\u0440\u043e\u043f\u0430\u043b\u043e \u0438\u0437 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439.\u041b\u0435\u043d\u0438\u0432\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0432\u0443\u0445\u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442\u043d\u044b\u0445 \u043a\u0430\u0440\u0442\u0440\u0438\u0434\u0436\u0435\u0439 \u043f\u043e \u0448\u0438\u043d\u0435 QSPI \u043d\u0430 115 \u041c\u0413\u0446\u041a\u0430\u0440\u0442\u0440\u0438\u0434\u0436\u0438 NES \u0438\u0437 \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0432\u0435\u0441\u0438\u043b\u0438 \u043e\u0442 40 \u0434\u043e 256 \u041a\u0411, \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u041e\u0417\u0423 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435. \u041a\u0430\u0440\u0442\u0440\u0438\u0434\u0436\u0438 Game Boy Color \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435: Link\u2019s Awakening DX \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 1 \u041c\u0411 (64 \u0431\u0430\u043d\u043a\u0430 \u043f\u043e 16 \u041a\u0411), \u0430 Pok\u00e9mon Crystal \u2014 2 \u041c\u0411 (128 \u0431\u0430\u043d\u043a\u043e\u0432).\u0427\u0442\u0435\u043d\u0438\u0435 2 \u041c\u0411 \u0441 QSPI Flash \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u043e\u0434\u0432\u0435\u0448\u0438\u0432\u0430\u0435\u0442 \u0431\u0435\u0439\u0434\u0436 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434. \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u0440\u0430\u0437\u043e\u0433\u043d\u0430\u043b\u0438 RP2350 \u0447\u0435\u0440\u0435\u0437 machine.freq(300_000_000), \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0438\u0433\u0440\u0430\u0442\u044c \u0437\u0430\u043f\u0430\u0441 \u043d\u0430 \u043a\u0430\u0434\u0440, \u0431\u0435\u0439\u0434\u0436 \u043d\u0430\u043c\u0435\u0440\u0442\u0432\u043e \u0437\u0430\u0432\u0438\u0441\u0430\u043b \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0431\u0430\u043d\u043a\u043e\u0432. \u0412\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0438\u043c \u043e\u0442\u0432\u0430\u043b\u0438\u0432\u0430\u043b\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442 \u043f\u043e USB, \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c MonaOS \u0443\u0434\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0435\u0434\u0451\u0440\u0433\u0438\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0438\u0442\u0430\u043d\u0438\u044f.\u0423\u0437\u043a\u0438\u043c \u043c\u0435\u0441\u0442\u043e\u043c \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043e\u0431\u0449\u0430\u044f \u0448\u0438\u043d\u0430 QMI:                    RP2350 Microcontroller                   \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510                   \u2502  Cortex-M33 Cores    \u2502                   \u2502      520 KB SRAM     \u2502                   \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                              \u2502 QMI Bus (clk_sys \/ 2)              \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510              \u2502                               \u2502        XIP_CS0 (Flash)                 XIP_CS1 (PSRAM)   \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510        \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510   \u2502    16 MB QSPI Flash  \u2502        \u2502   8 MB QSPI PSRAM    \u2502   \u2502  (Firmware&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-500619","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/500619","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=500619"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/500619\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=500619"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=500619"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=500619"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}