{"id":327596,"date":"2022-01-10T08:57:22","date_gmt":"2022-01-10T08:57:22","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=327596"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=327596","title":{"rendered":"<span>\u0414\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0438\u0433\u0440 \u043d\u0430 GBA<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\" class=\"article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/ze\/kk\/7w\/zekk7wazxwvmnocgyavn1ccjmn8.png\"\/><\/p>\n<p>  \u042d\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u0443\u0435\u0442 \u0438\u0433\u0440\u044b \u0441 Raspberry Pi \u043d\u0430 \u043f\u043e\u0440\u0442\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u043a\u043e\u043d\u0441\u043e\u043b\u044c Game Boy Advance \u0447\u0435\u0440\u0435\u0437 \u0435\u0433\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442. \u0412\u0438\u0434\u0435\u043e \u0438 \u0430\u0443\u0434\u0438\u043e \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u0436\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u044c, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0430 \u0433\u0435\u0439\u043c\u0431\u043e\u0435 \u0438\u0433\u0440\u044b \u0441 \u043b\u044e\u0431\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b (\u043e\u0442\u0441\u044e\u0434\u0430 \u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 Remote Play \u2014 \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a)<\/p>\n<p>  <a name=\"habracut\"><\/a><\/p>\n<p>  <b>\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438:<\/b><\/p>\n<ul>\n<li>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043b\u044e\u0431\u0443\u044e \u0438\u0433\u0440\u0443 \u043d\u0430 GBA \u0447\u0435\u0440\u0435\u0437 RetroPie<\/li>\n<li>120\u044580 \u043c\u043e\u0449\u043d\u044b\u0445 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439!<\/li>\n<li>~60fps \u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/li>\n<li>\u0420\u0435\u0442\u0440\u043e-\u0440\u0430\u0441\u0442\u0440 \u043a\u0430\u043a \u043d\u0430 \u0441\u0442\u0430\u0440\u043e\u043c \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0435 ?<\/li>\n<li>\u0415\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u043e\u0449\u043d\u044b\u0445 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u043d\u0430 \u0440\u0430\u0437\u043e\u0433\u043d\u0430\u043d\u043d\u044b\u0445 GBA<\/li>\n<li>\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0430\u0443\u0434\u0438\u043e!<\/li>\n<li><s>\u0412\u044b\u043b\u0435\u0442\u044b \u043d\u0430 Game Boy Micro! (\u0434\u0430-\u0434\u0430, \u044d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c)<\/s><\/li>\n<\/ul>\n<p>  \u0421\u043e\u0437\u0434\u0430\u043d\u043e <a href=\"https:\/\/r-labs.io\/\">[r]labs<\/a><\/p>\n<p>  \u0417\u0430\u0446\u0435\u043d\u0438\u0442\u0435 \u043c\u043e\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b:<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/rodri042\/piugba\/\">piuGBA<\/a>: \u042d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 PIU ?\u2199\ufe0f\u2198\ufe0f\u2b1c\u2196\ufe0f\u2197\ufe0f?<\/li>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-link-connection\">gba-link-connection<\/a>: \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u0435\u0440\u0430 ???<\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435:<\/h3>\n<p>  <\/p>\n<ul>\n<li>\u0414\u0435\u043c\u043e-\u0432\u0438\u0434\u0435\u043e<\/li>\n<li>\u041a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/li>\n<li>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430<\/li>\n<li>GBA Jam 2021<\/li>\n<li>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u0438<\/li>\n<li>\u0414\u0435\u043c\u043e-\u0432\u0438\u0434\u0435\u043e<\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/61c2dd766a73daf6662a1cae\" data-style=\"\" id=\"61c2dd766a73daf6662a1cae\" width=\"\"><\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/61c2de3d1370783b8bf931c8\" data-style=\"\" id=\"61c2de3d1370783b8bf931c8\" width=\"\"><\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/61c2de3d122cc8f638696908\" data-style=\"\" id=\"61c2de3d122cc8f638696908\" width=\"\"><\/div>\n<\/div>\n<p>  <\/p>\n<h3>\u041a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442:<\/h3>\n<p>  \u26a0\ufe0f \u0412 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0442\u0430\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043f\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0432\u044b \u043d\u0430\u0439\u0434\u0451\u0442\u0435 \u043d\u0438\u0436\u0435! \u26a0\ufe0f<\/p>\n<p>  <b>\u041f\u043e \u0441\u0443\u0442\u0438, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0434\u0432\u0435:<\/b><\/p>\n<ul>\n<li>\u041d\u0430 Game Boy Advance \u0441\u0442\u043e\u0438\u0442 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9E%D0%B1%D1%80%D0%B0%D0%B7_%D0%9F%D0%97%D0%A3\">\u043e\u0431\u0440\u0430\u0437 \u041f\u0417\u0423<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435<\/li>\n<li>\u041d\u0430 RaspberryPi \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435<\/li>\n<\/ul>\n<p>  \u041f\u0417\u0423 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 GBA \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u043c\u0443\u043b\u044c\u0442\u0438\u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u0430\u0431\u0435\u043b\u044c Game Boy Advance. \u041a\u0430\u0440\u0442\u0440\u0438\u0434\u0436 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d.<\/p>\n<h3>\u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0434\u0430\u043d\u043d\u044b\u0445<\/h3>\n<p>  \u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Game_Link_Cable\">\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u0430\u0431\u0435\u043b<\/a>\u044c Game Boy Advance, \u043f\u0440\u0438\u043f\u0430\u044f\u043d\u043d\u044b\u0439 \u043a \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430\u043c \u043d\u0430 RaspberryPi.<\/p>\n<p>  <img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/sa\/78\/ct\/sa78ctoy9xk5m4exma4he8hslbo.png\"\/><br \/>  <i>\u0420\u0430\u0441\u043f\u0438\u043d\u043e\u0432\u043a\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u0430\u0431\u0435\u043b\u044f GBA<\/i><\/p>\n<h3>\u0420\u0435\u0436\u0438\u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445<\/h3>\n<p>  GBA \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e <a href=\"https:\/\/problemkaputt.de\/gbatek.htm#gbacommunicationports\">\u0440\u0435\u0436\u0438\u043c\u043e\u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445<\/a>. \u0420\u0430\u0431\u043e\u0442\u0430 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 \u043a\u0430\u0431\u0435\u043b\u044f \u0438 \u043f\u043e\u0440\u0442\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0440\u0435\u0436\u0438\u043c\u0430. \u0421\u0430\u043c\u044b\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0435 \u0440\u0435\u0436\u0438\u043c\u044b:<\/p>\n<ul>\n<li><b>\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c:<\/b> \u043f\u043e \u0441\u0443\u0442\u0438 \u044d\u0442\u043e 3 \u0440\u0435\u0436\u0438\u043c <a href=\"https:\/\/ru.wikipedia.org\/wiki\/Serial_Peripheral_Interface\">SPI<\/a>, \u043d\u043e \u0437\u0434\u0435\u0441\u044c \u043e\u043d \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u201c\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c\u201d. \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u0438\u0431\u043e 256 \u041a\u0431\u0438\u0442\/\u0441\u0435\u043a \u043b\u0438\u0431\u043e 2 \u041c\u0431\u0438\u0442\/\u0441\u0435\u043a, \u0441 \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438 \u043f\u043e 8 \u0438\u043b\u0438 32 \u0431\u0438\u0442\u0430.<\/li>\n<li><b>\u0420\u0435\u0436\u0438\u043c \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u0435\u0440\u0430:<\/b> \u0442\u043e, \u0447\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0433\u0435\u0439\u043c\u0435\u0440\u044b, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043c\u043e\u0436\u0435\u0442 \u0434\u043e 4 \u043a\u043e\u043d\u0441\u043e\u043b\u0435\u0439 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 115200 \u0431\u0438\u0442\/\u0441, \u0430 \u043f\u0430\u043a\u0435\u0442\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e 16 \u0431\u0438\u0442.<\/li>\n<li><b>GPIO (\u0432\u0432\u043e\u0434\/\u0432\u044b\u0432\u043e\u0434 \u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f):<\/b> <a href=\"https:\/\/ru.wikipedia.org\/wiki\/GPIO\">\u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432\u0432\u043e\u0434\u0430\/\u0432\u044b\u0432\u043e\u0434\u0430 \u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f<\/a>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0430\u043c\u0438, \u0432\u0438\u0431\u0440\u043e\u043c\u043e\u0442\u043e\u0440\u0447\u0438\u043a\u0430\u043c\u0438 \u0438 \u043f\u0440\u043e\u0447\u0438\u043c\u0438 \u043c\u0435\u043b\u043e\u0447\u0430\u043c\u0438.<\/li>\n<\/ul>\n<p>  \u0414\u043b\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043a\u0430\u0434\u0440\u043e\u0432 \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c: <b>\u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c<\/b> \u043d\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 2 \u041c\u0431\u0438\u0442\/\u0441\u0435\u043a \u0441 \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438 \u043f\u043e 32 \u0431\u0438\u0442\u0430.<\/p>\n<h3>\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c\/SPI<\/h3>\n<p>  SPI \u044d\u0442\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442, \u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0434\u0443\u043f\u043b\u0435\u043a\u0441\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u043c \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435\u043c \u043d\u0430 \u043c\u043d\u043e\u0433\u0438\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445. \u0421\u0432\u044f\u0437\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043c\u0435\u0436\u0434\u0443 \u0432\u0435\u0434\u0443\u0449\u0438\u043c \u0438 \u0432\u0435\u0434\u043e\u043c\u044b\u043c (\u043f\u043e\u0434\u0447\u0438\u043d\u0451\u043d\u043d\u044b\u043c) \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438, \u0438 \u043a\u043e\u0433\u0434\u0430 \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u0442 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b, \u043e\u0431\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443 \u0434\u0430\u043d\u043d\u044b\u0435 (\u0431\u0438\u0442 \u0437\u0430 \u0431\u0438\u0442\u043e\u043c).<\/p>\n<p>  <img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/-g\/kb\/df\/-gkbdf1c3sf6rad3y8aa1m4tvhk.png\"\/><br \/>  <i>\u0421\u0445\u0435\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u044b SPI. \u041e\u0431\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0441\u0434\u0432\u0438\u0433 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0434\u043b\u044f \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0431\u0438\u0442\u043e\u0432. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0435\u0441\u0442\u044c <a href=\"https:\/\/ru.wikipedia.org\/wiki\/Serial_Peripheral_Interface#%D0%9F%D1%80%D0%B8%D0%B5%D0%BC_%D0%B8_%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%B2_SPI\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/i><\/p>\n<p>  GBA \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u043a\u0430\u043a \u0432\u0435\u0434\u0443\u0449\u0438\u0439, \u0438 \u043a\u0430\u043a \u0432\u0435\u0434\u043e\u043c\u044b\u0439, \u043d\u043e RaspberryPi \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u043a \u0432\u0435\u0434\u0443\u0449\u0438\u0439. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c Raspberry.<\/p>\n<p>  \u0414\u043b\u044f \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e 4 \u0441\u0438\u0433\u043d\u0430\u043b\u0430: CLK (\u0442\u0430\u043a\u0442), MOSI (\u0432\u044b\u0445\u043e\u0434 \u0432\u0435\u0434\u0443\u0449\u0435\u0433\u043e, \u0432\u0445\u043e\u0434 \u0432\u0435\u0434\u043e\u043c\u043e\u0433\u043e), MISO (\u0432\u0445\u043e\u0434 \u0432\u0435\u0434\u0443\u0449\u0435\u0433\u043e, \u0432\u044b\u0445\u043e\u0434 \u0432\u0435\u0434\u043e\u043c\u043e\u0433\u043e), GND (\u0437\u0435\u043c\u043b\u044f)<\/p>\n<p>  \u041d\u0430 GBA \u0437\u0430 \u043d\u0438\u0445 \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b 5 (SC), 3 (SI) \u0438 6 (GND). \u041d\u0430 RPI \u044d\u0442\u043e \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b GPIO 11 (SPI0 SCLK), GPIO 10 (SPI0 MOSI), GPIO 9 (SPI0 MISO), \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 GND.<\/p>\n<p>  <img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/c8\/q_\/g1\/c8q_g1g07w9a5qr1eesw6wfkqb0.png\"\/><br \/>  <i>\u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 GBA \u0438 RaspberryPi<\/i><\/p>\n<p>  <b>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430 GBA:<\/b><\/p>\n<ul>\n<li>\u0415\u0441\u043b\u0438 \u0432\u044b \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442\u0435 \u0434\u0432\u0430 Game Boy Advance, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0431\u0435\u043b\u044c \u043e\u0442 Game Boy Color, \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0432\u044f\u0437\u044c \u0431\u0443\u0434\u0435\u0442 \u043e\u0434\u043d\u043e\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0439: \u0432\u0435\u0434\u043e\u043c\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u0430 \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0443\u043b\u0438.<\/li>\n<li>\u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 2 \u041c\u0431\/\u0441 \u043d\u0430\u0434\u0451\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u043f\u0440\u043e\u0432\u043e\u0434\u0430\u0445, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043e \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f. \u041f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u0442\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u044f\u0442: \u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u0434\u043b\u0438\u043d\u043d\u044b\u043c \u043a\u0430\u0431\u0435\u043b\u0435\u043c, \u043e\u043d\u043e \u043d\u0435 \u201c\u043d\u0435\u043d\u0430\u0434\u0451\u0436\u043d\u043e\u0435\u201d, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0435.<\/li>\n<\/ul>\n<p>  <b>\u041a\u043e\u0434:<\/b><\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/raspi\/src\/SPIMaster.h#L24\">SPI\u0412\u0435\u0434\u0443\u0449\u0438\u0439<\/a> \u0434\u043b\u044f Raspberry Pi <\/li>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/gba\/src\/SPISlave.h#L15\">SPI\u0412\u0435\u0434\u043e\u043c\u044b\u0439<\/a> \u0434\u043b\u044f GBA<\/li>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/gba-jam\/gba\/src\/gbajam\/SPIMaster.h#L8\">SPI\u0412\u0435\u0434\u0443\u0449\u0438\u0439<\/a> \u0434\u043b\u044f GBA (\u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0434\u043b\u044f \u0434\u0436\u0435\u043c\u0430 GBA Jam)<\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c<\/h3>\n<p>  \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u0432 \u0441\u0432\u043e\u0438\u0445 \u0442\u0435\u0441\u0442\u0430\u0445 \u043d\u0430 Raspberry Pi 3:<\/p>\n<ul>\n<li><b>\u0414\u0432\u0443\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u0441\u0432\u044f\u0437\u044c:<\/b> 1,6 \u041c\u0431\/\u0441. \u041f\u0440\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0432\u044b\u0448\u0435 \u043d\u0430 Raspberry Pi \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u0430\u044f \u0435\u0440\u0443\u043d\u0434\u0430.<\/li>\n<li><b>\u041e\u0434\u043d\u043e\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u044f\u044f:<\/b> 2,6 \u041c\u0431\/\u0441. \u041f\u0440\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u0430\u043a\u0435\u0442\u044b.<\/li>\n<li><b>\u041e\u0434\u043d\u043e\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u044f\u044f \u043d\u0430 \u0440\u0430\u0437\u043e\u0433\u043d\u0430\u043d\u043d\u043e\u043c GBA:<\/b> 4,8 \u041c\u0431\/\u0441 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043a\u0440\u0438\u0441\u0442\u0430\u043b\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u0441\u0446\u0438\u043b\u043b\u044f\u0442\u043e\u0440\u0430 12 \u041c\u0413\u0446 \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e (4,194\u041c\u0433\u0446).<\/li>\n<\/ul>\n<p>  \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0434\u043d\u043e\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0439 \u0441\u0432\u044f\u0437\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430\u043c \u0432\u0430\u0436\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0441 GBA. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043a\u043e\u0434 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430\u043c\u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442\u0432\u0435\u0442\u0430.<\/p>\n<p>  \u0412\u043e \u0432\u0441\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 Raspberry Pi \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0436\u0438\u0434\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434, \u0447\u0442\u043e\u0431\u044b \u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0443 \u0431\u0435\u0434\u043d\u043e\u0433\u043e \u0433\u0435\u0439\u043c\u0431\u043e\u044f \u043e\u0442\u0434\u043e\u0445\u043d\u0443\u0442\u044c.<\/p>\n<p>  <img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/5a\/rh\/rq\/5arhrqqevq_cftdb9htecxzltrs.png\"\/><br \/>  <i>\u0422\u0435\u0441\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438<\/i><\/p>\n<p>  \u041a\u0430\u0436\u0434\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 4 000 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u0449\u0451 \u043f\u043e 5 000. \u041d\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043e\u043d\u0438 \u0432\u0441\u0435 \u0431\u0443\u0434\u0443\u0442 \u0437\u0435\u043b\u0451\u043d\u044b\u0435. \u0422\u043e\u0447\u043a\u0430 \u0441\u043f\u0440\u0430\u0432\u0430 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0451\u043d\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u0415\u0441\u043b\u0438 \u043e\u043d\u0430 \u043a\u0440\u0430\u0441\u043d\u0430\u044f \u2014 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443. <\/p>\n<p>  <b>\u041a\u043e\u0434:<\/b><\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/raspi\/src\/SPIMaster.h#L80\">\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0435\u0440\u0435\u0434 \u043a\u0430\u0436\u0434\u044b\u043c \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u043e\u043c<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/gba\/src\/Benchmark.h#L54\">\u0422\u0435\u0441\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 GBA<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/raspi\/src\/Benchmark.h#L31\">\u0422\u0435\u0441\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 RPI<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/raspi\/out\/config.cfg#L1\">\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f SPI<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 MISO<\/h3>\n<p>  \u0412 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u043c SPI \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u0431\u0435\u0437 \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u0442 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b, \u0430 \u043f\u0440\u0438\u0451\u043c \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043b\u043e\u0436\u0438\u0442\u0441\u044f \u043d\u0430 \u0432\u0435\u0434\u043e\u043c\u043e\u0433\u043e. \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 GBA \u0438\u043d\u043e\u0433\u0434\u0430 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0437\u0430\u043d\u044f\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u044b\u0432\u043e\u0434\u043e\u043c \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0441\u043b\u0430\u0442\u044c \u0432\u0435\u0434\u0443\u0449\u0435\u043c\u0443 \u0441\u0438\u0433\u043d\u0430\u043b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f.<\/p>\n<p>  \u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0432 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0435 GBA, \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u044f \u0432\u0435\u0434\u043e\u043c\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 MISO \u043d\u0430 HIGH \u2014 \u043c\u0430\u0441\u0442\u0435\u0440 \u043f\u0440\u043e\u0447\u0442\u0451\u0442 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u0430\u043a \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 GPIO \u0438 \u0431\u0443\u0434\u0435\u0442 \u043e\u0436\u0438\u0434\u0430\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0432\u0435\u0434\u043e\u043c\u044b\u0439 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u0441\u044f \u043d\u0430 LOW.<\/p>\n<p>  <img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/8bd\/3f7\/2ab\/8bd3f72abbfa144f6edac58effabf44b.gif\"\/><br \/>  <i>\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043d\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0439 \u043c\u043d\u0435 \u043d\u0438\u0447\u0435\u0433\u043e!<\/i><\/p>\n<p>  <b>\u041a\u043e\u0434:<\/b><\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/gba\/src\/SPISlave.h#L46\">\u0412\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0432\u0435\u0434\u043e\u043c\u044b\u0439)<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/raspi\/src\/SPIMaster.h#L83\">\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 MISO (\u0432\u0435\u0434\u0443\u0449\u0438\u0439)<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u0412\u0438\u0434\u0435\u043e<\/h3>\n<p>  <b>\u0421\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u044d\u043a\u0440\u0430\u043d\u043d\u044b\u0445 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439<\/b><\/p>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c <a href=\"https:\/\/ru.wikipedia.org\/wiki\/Raspberry_Pi_OS\">Raspbian<\/a>, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0430\u0434\u0440\u043e\u0432\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u043b \u0441 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u043d\u0430 GBA: <b>240\u0445160<\/b>. \u041f\u043e\u043c\u043e\u0433\u0443\u0442 \u043d\u0430\u043c \u0432 \u044d\u0442\u043e\u043c \u0434\u0432\u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 <code>framebuffer_width<\/code> \u0438<code> framebuffer_height<\/code> \u0432\u043d\u0443\u0442\u0440\u0438 \/<code>boot\/config.txt<\/code><\/p>\n<p>  \u041b\u0438\u043d\u0443\u043a\u0441 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u044d\u043a\u0440\u0430\u043d\u0430 (\u043a\u0430\u0434\u0440\u043e\u0432\u044b\u0435 \u0431\u0443\u0444\u0435\u0440\u044b) \u0432 \u0444\u0430\u0439\u043b\u0430\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <code>\/dev\/fb0<\/code>. \u042d\u0442\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u043d\u043e \u043d\u0435 \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0440\u0430\u0437\u043c\u0435\u0440\u043d\u044b\u0445 \u0438\u0433\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, OpenGL, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c Raspberry Pi. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0447\u0442\u043e\u0431\u044b \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0446\u0432\u0435\u0442\u0430 \u0441 \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <i>API DispmanX<\/i> (\u0432\u044b\u0437\u044b\u0432\u0430\u044f <code>vc_dispmanx_snapshot(...)<\/code> \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0437\u0430 \u043a\u0430\u0434\u0440), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043d\u0430\u043c \u0445\u043e\u0440\u043e\u0448\u0443\u044e<a href=\"https:\/\/en.wikipedia.org\/wiki\/RGBA_color_model#ARGB32\"> RGBA32<\/a> \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0441\u043e \u0432\u0441\u0435\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u044d\u043a\u0440\u0430\u043d\u0430.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/rz\/n_\/oj\/rzn_ojh5tqp9ytrgrm5lol0mlqa.jpeg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/rz\/n_\/oj\/rzn_ojh5tqp9ytrgrm5lol0mlqa.jpeg\" data-blurred=\"true\"\/><br \/>  <i>\u041e\u0434\u0438\u043d \u0438\u0437 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u0434\u0440\u043e\u0432\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430<\/i><\/p>\n<p>  <b>\u041a\u043e\u0434:<\/b><\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/raspi\/src\/FrameBuffer.h#L17\">\u041a\u0430\u0434\u0440\u043e\u0432\u044b\u0439 \u0431\u0443\u0444\u0435\u0440<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u0412\u044b\u0432\u043e\u0434 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d GBA<\/h3>\n<p>  GBA \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u043e\u0434\u0435\u043b\u044c <i>RGB555 (15 \u0431\u0438\u0442 \u043d\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430)<\/i>, \u0442\u043e \u0435\u0441\u0442\u044c 5 \u0431\u0438\u0442 \u043d\u0430 \u043a\u0440\u0430\u0441\u043d\u044b\u0439, 5 \u043d\u0430 \u0437\u0435\u043b\u0451\u043d\u044b\u0439 \u0438 5 \u043d\u0430 \u0441\u0438\u043d\u0438\u0439 \u0431\u0435\u0437 \u0430\u043b\u044c\u0444\u0430-\u043a\u0430\u043d\u0430\u043b\u0430. \u0422\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e <i>little-endian<\/i> \u0441\u0438\u0441\u0442\u0435\u043c\u0430 (\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043c\u043b\u0430\u0434\u0448\u0435\u0433\u043e \u043a \u0441\u0442\u0430\u0440\u0448\u0435\u043c\u0443), \u0442\u043e \u043f\u0435\u0440\u0432\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c \u0438\u0434\u0451\u0442 \u043a\u0440\u0430\u0441\u043d\u044b\u0439.<\/p>\n<p>  \u0414\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u044d\u0442\u0438\u0445 \u0446\u0432\u0435\u0442\u043e\u0432 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d, \u043e\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 3 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u044b\u0445 \u0440\u0435\u0436\u0438\u043c\u0430. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b 4 \u0440\u0435\u0436\u0438\u043c, \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f 8-\u0431\u0438\u0442\u043d\u043e\u0439 \u043e\u0442\u0441\u044b\u043b\u043a\u043e\u0439 \u043a \u043f\u0430\u043b\u0438\u0442\u0440\u0435 \u0438\u0437 256 15-\u0431\u0438\u0442\u043d\u044b\u0445 \u0446\u0432\u0435\u0442\u043e\u0432. \u041d\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 4 \u0440\u0435\u0436\u0438\u043c\u0430 VRAM \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 8-\u0431\u0438\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u0440\u043e\u0447\u0435\u0441\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0430\u0434\u0440\u0435\u0441\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u0441\u043b\u043e\u0432\u043e\/\u0441\u043b\u043e\u0432\u043e.<\/p>\n<p>  <img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/f_\/-z\/-s\/f_-z-sgqxyidmccl_iist1qjnds.png\"\/><br \/>  <i>\u0421\u0445\u0435\u043c\u0430 15-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430<\/i><\/p>\n<p>  <b>\u041a\u043e\u0434:<\/b><\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/gba\/src\/Utils.h#L32\">\u0412\u044b\u0432\u043e\u0434 \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u0432 4 \u0440\u0435\u0436\u0438\u043c\u0435<\/a><\/li>\n<\/ul>\n<p>  <b>\u0426\u0432\u0435\u0442\u043e\u0432\u043e\u0435 \u043a\u0432\u0430\u043d\u0442\u043e\u0432\u0430\u043d\u0438\u0435:<\/b><\/p>\n<p>  Raspberry Pi \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u0432\u0430\u043d\u0442\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u0434\u0440 \u043f\u043e \u0446\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u043f\u0430\u043b\u0438\u0442\u0440\u0435 \u0432 256 \u0446\u0432\u0435\u0442\u043e\u0432 (\u0442.\u0435. \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0446\u0432\u0435\u0442\u043e\u0432 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f). \u041f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043a\u0432\u0430\u043d\u0442\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0430 \u0441\u0430\u043c\u0443\u044e \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0430\u043b\u0438\u0442\u0440\u0443 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u0430\u0434\u0440\u0430. \u042d\u0442\u043e \u0431\u044b\u043b \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0445\u043e\u0442\u044c \u043e\u043d \u0438 \u0445\u043e\u0440\u043e\u0448\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u0412 \u0438\u0442\u043e\u0433\u0435 \u044f \u0441\u0442\u0430\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u043f\u0430\u043b\u0438\u0442\u0440\u0443 (<a href=\"https:\/\/en.wikipedia.org\/wiki\/List_of_software_palettes#6-8-5_levels_RGB\">\u044d\u0442\u0443<\/a>) \u0438 \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0442\u044c \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430 \u043a \u0431\u0430\u0439\u0442\u0443 \u0446\u0432\u0435\u0442\u0430 \u0438\u0437 \u043f\u0430\u043b\u0438\u0442\u0440\u044b.<\/p>\n<p>  <img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/5_\/cq\/vo\/5_cqvo0xpwadp7gvbkiousjly_u.png\"\/><br \/>  <i>\u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b<\/i><\/p>\n<p>  <img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/8e\/vl\/a0\/8evla0jinv8jy_4lltyitsgw_ay.png\"\/><br \/>  <i>\u041a\u0432\u0430\u043d\u0442\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435<\/i><\/p>\n<p>  \u0414\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0431\u043e\u0440\u0430 \u0446\u0432\u0435\u0442\u043e\u0432, \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 RPI \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0430 16 \u041c\u0431 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u201cpalette cache\u201d (<i>\u043a\u044d\u0448 \u043f\u0430\u043b\u0438\u0442\u0440\u044b \u2014 \u043f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a\u0430<\/i>) \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c\u0438 \u0446\u0432\u0435\u0442\u043e\u0432\u044b\u043c\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438. \u0422\u0430\u043a\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0446\u0432\u0435\u0442\u043e\u0432 (2^24) \u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u0446\u0432\u0435\u0442\u0430 \u0432 \u043f\u0430\u043b\u0438\u0442\u0440\u0435 \u2014 1 \u0431\u0430\u0439\u0442.<\/p>\n<p>  <b>\u041a\u043e\u0434:<\/b><\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/gba\/src\/Palette.h#L6\">15-\u0431\u0438\u0442\u043e\u0432\u0430\u044f \u043f\u0430\u043b\u0438\u0442\u0440\u0430 \u043d\u0430 GBA<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/raspi\/src\/Palette.h#L12\">24-\u0431\u0438\u0442\u043e\u0432\u0430\u044f \u043f\u0430\u043b\u0438\u0442\u0440\u0430 \u043d\u0430 RPI<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/raspi\/src\/Palette.h#L52\">\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0433\u043e \u0446\u0432\u0435\u0442\u0430<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/raspi\/src\/Palette.h#L68\">Palette cache<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/raspi\/src\/Palette.h#L111\">\u041a\u043e\u0434 JavaScript \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h3>\n<p>  \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043a\u0430\u0434\u0440\u043e\u0432\u044b\u0439 \u0431\u0443\u0444\u0435\u0440 \u0438\u043c\u0435\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 <i>240\u0445160<\/i>, \u0434\u0430\u043d\u043d\u044b\u0435, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0435 \u043d\u0430 GBA \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c, \u0442\u0430\u043a \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0443\u0431\u043e\u0439\u043d\u043e\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0432\u0430\u0441 \u0432\u0430\u0436\u043d\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u0435\u0439, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 <i>120\u044580<\/i> \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/www.coranac.com\/tonc\/text\/gfx.htm#sec-mos\">\u044d\u0444\u0444\u0435\u043a\u0442 \u043c\u043e\u0437\u0430\u0438\u043a\u0438<\/a>, \u0447\u0442\u043e\u0431\u044b \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u043b \u0432\u0435\u0441\u044c \u044d\u043a\u0440\u0430\u043d. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0432\u0430\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0440\u0430\u0432\u044f\u0442\u0441\u044f \u0441\u0442\u0430\u0440\u044b\u0435 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D0%BE-%D0%BB%D1%83%D1%87%D0%B5%D0%B2%D1%8B%D0%B5_%D0%BF%D1%80%D0%B8%D0%B1%D0%BE%D1%80%D1%8B\">\u043a\u0438\u043d\u0435\u0441\u043a\u043e\u043f\u044b<\/a>, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c <i>240\u044580<\/i> \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043b\u0438\u043d\u0438\u0438 \u0440\u0430\u0441\u0442\u0440\u0430 \u043c\u0435\u0436\u0434\u0443 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u043c\u0438 \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438.<\/p>\n<p>  Raspberry Pi \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0438\u043a\u0441\u0435\u043b\u044c, \u043d\u0435 \u043a\u0440\u0430\u0442\u043d\u044b\u0439 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0443. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0434\u043b\u044f \u0448\u0438\u0440\u0438\u043d\u044b \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430 \u04452, \u043e\u043d \u043e\u0442\u0431\u0440\u043e\u0441\u0438\u0442 \u0432\u0441\u0435 \u043d\u0435\u0447\u0451\u0442\u043d\u044b\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0438, \u0438 \u0432 \u0438\u0442\u043e\u0433\u0435 \u0448\u0438\u0440\u0438\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 <i>120<\/i>, \u0430 \u043d\u0435 <i>240<\/i>. <\/p>\n<p>  \u041d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u044d\u0442\u043e \u0432\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043f\u0440\u0438 \u0440\u0435\u043d\u0434\u0435\u0440\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e 4 \u0440\u0435\u0436\u0438\u043c GBA \u0431\u0443\u0434\u0435\u0442 \u043e\u0436\u0438\u0434\u0430\u0442\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u0443 <i>240\u0445160<\/i> \u2014 \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u044c \u044d\u043a\u0440\u0430\u043d\u0430.<\/p>\n<p>  <b>\u0422\u0440\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0433\u043e \u0436\u0435 \u043a\u043b\u0438\u043f\u0430 120\u044580<\/b><\/p>\n<p>  <img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/65f\/051\/444\/65f0514444dc0b091601ed7097f4440f.gif\"\/><br \/>  <i>\u0411\u0435\u0437 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/i><\/p>\n<p>  <img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/762\/9b2\/e09\/7629b2e09ac156b7a7c4eac06ef7bfdd.gif\"\/><br \/>  <i>\u0423\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0441 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u043c \u043c\u043e\u0437\u0430\u0438\u043a\u0438<\/i><\/p>\n<p>  <img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/f78\/cfb\/b2b\/f78cfbb2b6ff63fb098762265577712e.gif\"\/><br \/>  <i>\u0421 \u043b\u0438\u043d\u0438\u044f\u043c\u0438 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043a\u0438<\/i><\/p>\n<p>  <b>\u041a\u043e\u0434:<\/b><\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/raspi\/src\/GBARemotePlay.h#L303\">\u041e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u043d\u0430 RPI<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/gba\/src\/_main.cpp#L79\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043c\u043e\u0437\u0430\u0438\u043a\u0438 \u043d\u0430 GBA<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/gba\/src\/_main.cpp#L180\">\u0412\u044b\u0431\u043e\u0440 \u043a\u0443\u0440\u0441\u043e\u0440\u0430 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 GBA<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u0421\u0436\u0430\u0442\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/h3>\n<p>  <b>\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f (\u043e\u0440\u0438\u0433. Temporal diffs)<\/b><\/p>\n<p>  \u041a\u043e\u0434 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c \u043d\u0430 \u043d\u043e\u0432\u043e\u043c \u043a\u0430\u0434\u0440\u0435, \u0438 \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u201c\u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c\u201d, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c: \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0435\u0441\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u201ccompression\u201d (\u043f\u043e\u0440\u043e\u0433 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f; <i>\u201c\u0441\u0436\u0430\u0442\u0438\u0435\u201d \u2014 \u043f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a\u0430<\/i>), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442 \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0446\u0432\u0435\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c.<\/p>\n<p>  \u041d\u0430 \u0441\u0442\u0430\u0434\u0438\u0438 \u0441\u0436\u0430\u0442\u0438\u044f \u043e\u043d \u0441\u043e\u0437\u0434\u0430\u0451\u0442 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%91%D0%B8%D1%82%D0%BE%D0%B2%D0%B0%D1%8F_%D0%BA%D0%B0%D1%80%D1%82%D0%B0\">\u0431\u0438\u0442\u043e\u0432\u0443\u044e \u043a\u0430\u0440\u0442\u0443<\/a>, \u0433\u0434\u0435 1 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0442\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f, \u0430 0 \u2014 \u0447\u0442\u043e \u043e\u043d \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u043f\u0440\u0435\u0436\u043d\u0438\u043c. \u0417\u0430\u0442\u0435\u043c \u043e\u043d \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u0430\u0440\u0442\u0443 \u0438 \u0432\u0441\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u0441 1.<\/p>\n<p>  <i>\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u0430\u0440\u0442\u044b \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0439 13&#215;1<\/i><\/p>\n<p>  <b>\u041a\u043e\u0434:<\/b><\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/raspi\/src\/ImageDiffRLECompressor.h#L8\">ImageDiffRLECompressor<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/raspi\/src\/GBARemotePlay.h#L211\">\u041f\u0435\u0440\u0435\u043d\u043e\u0441 \u0431\u0438\u0442\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/gba\/src\/_main.cpp#L239\">\u0420\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0430<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/gba\/src\/Protocol.h#L93\">\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0440\u043e\u0433\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u0438\u043d \u0441\u0435\u0440\u0438\u0439<\/h3>\n<p>  \u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0431\u0443\u0444\u0435\u0440 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0301\u0433\u043e \u0441\u0436\u0430\u0442\u0438\u044f (<i>\u043e\u0440\u0438\u0433. \u201ctemporal compression\u201d<\/i>) \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u043b\u0438\u043d \u0441\u0435\u0440\u0438\u0439. <\/p>\n<p>  \u0412 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445 \u0441 \u043f\u0430\u043b\u0438\u0442\u0440\u043e\u0439 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u043e\u0434\u043d\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430. \u041b\u0438\u0431\u043e \u0436\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043c\u0435\u043d\u044b \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435, \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u0447\u0451\u0440\u043d\u044b\u0435, \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c N \u0447\u0451\u0440\u043d\u044b\u0445 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 (N \u0431\u0430\u0439\u0442), \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c 1 \u0431\u0430\u0439\u0442, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0438\u0439 N \u0438 2 \u0431\u0430\u0439\u0442\u0430, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0438\u0435 \u0447\u0451\u0440\u043d\u044b\u0439 \u0446\u0432\u0435\u0442. \u042d\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BB%D0%B8%D0%BD_%D1%81%D0%B5%D1%80%D0%B8%D0%B9\">\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u0438\u043d \u0441\u0435\u0440\u0438\u0439<\/a> (\u0438\u043b\u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432).<\/p>\n<p>  \u041f\u0440\u0430\u0432\u0434\u0430, \u041a\u0414\u0421 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u043b\u0443\u0447\u0448\u0430\u0435\u0442 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e: \u0438\u043d\u043e\u0433\u0434\u0430 \u0431\u0443\u0444\u0435\u0440 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u0438\u043d\u043d\u0435\u0435 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u0430\u0439\u0442 \u0441 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442 \u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u044d\u0442\u0438\u0445 \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432. \u041f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0432 \u0434\u0432\u0430 \u044d\u0442\u0430\u043f\u0430, \u0438 \u041a\u0414\u0421 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0436\u0430\u0442\u044c. \u0417\u0430\u0442\u0435\u043c \u0432 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u0430\u0434\u0440\u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0431\u0438\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043b\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u041a\u0414\u0421 \u0438\u043b\u0438 \u043d\u0435\u0442.<\/p>\n<p>  <img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/m8\/x1\/ie\/m8x1ieaj-6kb2odd8bvq6q5h1wi.png\"\/><br \/>  <i>\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0436\u0430\u0442\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430<\/i><\/p>\n<p>  <b>\u041a\u043e\u0434:<\/b><\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/gba\/src\/_main.cpp#L131\">\u0411\u0438\u0442, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 \u041a\u0414\u0421 \u0432 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u0430\u0434\u0440\u0430<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/raspi\/src\/GBARemotePlay.h#L265\">\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u0438\u043d \u0441\u0435\u0440\u0438\u0439<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/gba\/src\/_main.cpp#L184\">\u0420\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0430 \u0434\u043b\u0438\u043d \u0441\u0435\u0440\u0438\u0439<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u041e\u0431\u0440\u0435\u0437\u043a\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0439 (<i>\u043e\u0440\u0438\u0433. Trimming the diffs<\/i>)<\/h3>\n<p>  \u0414\u043b\u044f \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0430 <i>120\u044580<\/i> \u0431\u0438\u0442\u043e\u0432\u0430\u044f \u043a\u0430\u0440\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0432 <i>1200 \u0431\u0430\u0439\u0442 (120\u042580\/8)<\/i>. \u042d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0434\u043b\u044f \u043f\u043e\u043a\u0430\u0434\u0440\u043e\u0432\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u044c \u043e\u0442 \u043f\u0435\u0440\u0432\u043e\u0439 1 \u0434\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 1, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 32-\u0431\u0438\u0442\u043d\u044b\u043c\u0438 \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438.<\/p>\n<p>  <code> v startPacket v endPacket<br \/>  PACKET 0 PACKET 1 PACKET 2 PACKET 3 PACKET 4 PACKET 5<br \/>  BYTE 0 BYTE 1 BYTE 2 BYTE 3 BYTE 4 BYTE 5 BYTE 6 BYTE 7 BYTE 8 BYTE 9 BYTE 10 BYTE 11 BYTE 12 BYTE 13 BYTE 14 BYTE 15 BYTE 16 BYTE 17 BYTE 18 BYTE 19 BYTE 20 BYTE 21 BYTE 22 BYTE 23<br \/>  00000000000000000000000000000000000000000000000000000000000000000000000000100100110010000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000<br \/>   ^ startPixel ^endPixel<br \/>   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ packetsToSend<\/code><\/p>\n<h3>\u0412\u0432\u043e\u0434<\/h3>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u0434\u0440 GBA \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043d\u0430\u0436\u0430\u0442\u044b\u0445 \u043a\u043d\u043e\u043f\u043a\u0430\u0445 \u043d\u0430 Raspberry Pi. \u041e\u043d \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0440\u0435\u0435\u0441\u0442\u0440 <a href=\"https:\/\/www.coranac.com\/tonc\/text\/keys.htm\">REG_KEYINPUT<\/a> \u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442 \u0435\u0433\u043e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u043c\u0435\u043d\u0430 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438.<\/p>\n<p>  <img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/kz\/gm\/wc\/kzgmwcc8li6_zlxqkcgnmeq6quo.png\"\/><br \/>  <i>\u0411\u0438\u0442\u044b \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043a\u043d\u043e\u043f\u043a\u0438 \u041d\u0415 \u043d\u0430\u0436\u0430\u0442\u044b. \u0421\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u0434\u0438\u0437\u0430\u0439\u043d!<\/i><\/p>\n<p>  \u041d\u0430 Linux \u0435\u0441\u0442\u044c <code>\/dev\/uinput<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c \u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0438\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0433\u0435\u0439\u043c\u043f\u0430\u0434 \u0432 \u043a\u0430\u043a\u043e\u043c \u0443\u0433\u043e\u0434\u043d\u043e \u0432\u0438\u0434\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0435 \u0434\u0436\u043e\u0439\u0441\u0442\u0438\u043a\u0438 \u0438 \u043f\u043e\u0442\u043e\u043c \u0441\u043e\u043e\u0442\u043d\u0435\u0441\u044f D-pad \u0433\u0435\u0439\u043c\u0431\u043e\u044f \u0441 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438.<\/p>\n<p>  \u041d\u0430 \u043f\u0435\u0440\u0432\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u044b\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0433\u0435\u0439\u043c\u043f\u0430\u0434 \u0441 \u0442\u043e\u0439 \u0436\u0435 \u0440\u0430\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u043a\u043d\u043e\u043f\u043e\u043a, \u0447\u0442\u043e \u0443 GBA. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0436\u0435 \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0441\u0430\u043c\u043e\u043c\u0443 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b <code>controls.cfg<\/code> \u0438 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u043a\u043b\u0430\u0432\u0438\u0448 \u0432 \u043d\u0451\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0438\u0433\u0440\u044b \u0441 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u043c\u0438 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430\u043c\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>  <b>\u041a\u043e\u0434:<\/b><\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v0.9\/raspi\/src\/VirtualGamepad.h#L27\">\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0433\u0435\u0439\u043c\u043f\u0430\u0434 (\u043f\u0435\u0440\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f)<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/raspi\/src\/VirtualGamepad.h#L74\">\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0433\u0435\u0439\u043c\u043f\u0430\u0434 (\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0432\u0435\u0440\u0441\u0438\u044f)<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/raspi\/out\/controls.cfg#L1\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/raspi\/out\/config.cfg#L7\">\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0433\u0435\u0439\u043c\u043f\u0430\u0434\u0430<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u041e\u0431\u0437\u043e\u0440 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430<\/h3>\n<p>  \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u043e\u0432 <code>reset<\/code> (\u0441\u0431\u0440\u043e\u0441\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a)<\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u0430\u0434\u0440\u0430 \u0448\u0430\u0433\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435:<\/p>\n<ul>\n<li><i>(\u0421\u0431\u0440\u043e\u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438)<\/i><\/li>\n<li>\u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u043a\u0430\u0434\u0440\u0430 <i>(\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 RPI)<\/i><\/li>\n<li>\u041d\u0430\u0447\u0430\u043b\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u0430\u0434\u0440\u043e\u0432<\/li>\n<li>\u041e\u0431\u043c\u0435\u043d \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438<\/li>\n<li><i>(\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441 \u0437\u0432\u0443\u043a\u0430, \u0435\u0441\u043b\u0438 \u043e\u043d \u0435\u0441\u0442\u044c)<\/i><\/li>\n<li>\u041d\u0430\u0447\u0430\u043b\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439<\/li>\n<li>\u041f\u0435\u0440\u0435\u043d\u043e\u0441 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439<\/li>\n<li>\u041a\u043e\u043d\u0435\u0446 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u0430\u0434\u0440\u0430<\/li>\n<li>\u0420\u0435\u043d\u0434\u0435\u0440 <i>(\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 GBA)<\/i><\/li>\n<\/ul>\n<p>  <b>\u041a\u043e\u0434:<\/b><\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/gba\/src\/_main.cpp#L92\">\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0446\u0438\u043a\u043b GBA<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/raspi\/src\/GBARemotePlay.h#L48\">\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0446\u0438\u043a\u043b RPI<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/gba\/src\/Protocol.h#L4\">\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u043e\u0432 reset<\/h3>\n<p>  \u0427\u0430\u0441\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0434\u0430\u043d\u043d\u043e\u043c reset \u043f\u0430\u043a\u0435\u0442\u0435: <\/p>\n<p>  <code>10011001100010000111000000000000<br \/>  ____________________^###****$$$$<br \/>  | || | |<br \/>   > magic number || | > render mode: frame width and height<br \/>   || > control layout: defined in the configuration file<br \/>   | > compression: affects temporal diffs' threshold<br \/>   > CPU overclock flag: if 1, it uses overclocked SPI timings<\/code><\/p>\n<p>  <img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/dx\/5k\/qn\/dx5kqnvsdta2pxonxkj9ntbwlsk.png\"\/><br \/>  <i>\u041c\u0435\u043d\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f<\/i><\/p>\n<p>  <b>\u041a\u043e\u0434:<\/b><\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/gba\/src\/RuntimeConfig.h#L68\">\u041c\u0435\u043d\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/gba\/src\/_main.cpp#L114\">\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u043e\u0432 reset \u043d\u0430 GBA<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/raspi\/src\/GBARemotePlay.h#L180\">\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u043e\u0432 reset \u043d\u0430 RPI<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u041e\u0431\u043c\u0435\u043d \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438<\/h3>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u0448\u0430\u0433\u0435 GBA \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0432\u043e\u0438 \u0432\u0432\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u0430\u043a\u0435\u0442 <i>frame metadata <\/i>(\u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u0430\u0434\u0440\u0430)<\/p>\n<p>  <code>00000000000000000000000000000000<br \/>  ^#**************$$$$$$$$$$$$$$$$<br \/>  ||| |<br \/>  ||| > start pixel index (for faster GBA rendering)<br \/>  || > number of expected pixel packets<br \/>  | > compressed flag: if 1, the frame is RLEncoded<br \/>   > audio flag: if 1, the frame includes an audio chunk<\/code><\/p>\n<p>  \u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u044d\u0442\u043e\u0442 \u043f\u0435\u0440\u0435\u043d\u043e\u0441 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0434\u0432\u0430\u0436\u0434\u044b. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0437 \u043a\u0430\u0436\u0434\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 \u043f\u0430\u043a\u0435\u0442. \u0415\u0441\u043b\u0438 \u043e\u043d\u0438 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 => <b>\u0421\u0431\u0440\u043e\u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a!<\/b><\/p>\n<p>  <b>\u041a\u043e\u0434:<\/b><\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/gba\/src\/_main.cpp#L124\">\u041e\u0431\u043c\u0435\u043d \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043d\u0430 GBA<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/raspi\/src\/GBARemotePlay.h#L198\">\u041e\u0431\u043c\u0435\u043d \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043d\u0430 RPI<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u0410\u0443\u0434\u0438\u043e<\/h3>\n<p>  \u0414\u043b\u044f \u0430\u0443\u0434\u0438\u043e \u043d\u0430 GBA \u0431\u044b\u043b <a href=\"https:\/\/github.com\/pinobatch\/gsmplayer-gba\">\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d<\/a> \u0430\u0443\u0434\u0438\u043e \u043a\u043e\u0434\u0435\u043a <a href=\"https:\/\/ru.wikipedia.org\/wiki\/GSM-FR\">GSM Full Rate<\/a>. \u041e\u043d \u043e\u0436\u0438\u0434\u0430\u0435\u0442 33-\u0431\u0430\u0439\u0442\u043e\u0432\u044b\u0435 \u0430\u0443\u0434\u0438\u043e\u0444\u0440\u0435\u0439\u043c\u044b, \u043d\u043e \u0447\u0442\u043e\u0431\u044b \u0443\u0446\u0435\u043b\u0435\u0442\u044c \u043f\u0440\u0438 \u043f\u0430\u0434\u0435\u043d\u0438\u0438 \u0444\u0440\u0435\u0439\u043c\u043e\u0432, \u043e\u043d\u0438 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u0431\u043b\u043e\u043a\u0438, \u0430 \u0438\u0445 \u0434\u043b\u0438\u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f <code>AUDIO_CHUNK_SIZE<\/code><\/p>\n<p>  <b>\u041a\u043e\u0434:<\/b><\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/gba\/src\/Protocol.h#L16\">\u041f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0430\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0430\u0443\u0434\u0438\u043e\u0431\u043b\u043e\u043a\u043e\u0432<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u0427\u0442\u0435\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0430\u0443\u0434\u0438\u043e<\/h3>\n<p>  \u0421\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b Raspberry Pi \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u0443\u044e <a href=\"https:\/\/www.alsa-project.org\/wiki\/Matrix:Module-aloop\">\u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u0430\u0443\u0434\u0438\u043e\u043a\u0430\u0440\u0442\u0443<\/a>. \u041a\u043e\u0433\u0434\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043c\u043e\u0434\u0443\u043b\u044c (<code>sudo modprobe snd-aloop<\/code>), \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u043d\u043e\u0432\u044b\u0445 \u0437\u0432\u0443\u043a\u043e\u0432\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (\u0434\u043b\u044f \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u043f\u0438\u0441\u0438).<\/p>\n<p>  <img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/a5\/to\/gs\/a5togszyqomlsiisbkbdjcvo6hi.png\"\/><br \/>  <i>\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f<\/i><\/p>\n<p>  <img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/gl\/av\/oj\/glavoj7cx-nmp9vf9p3uel_1jbg.png\"\/><br \/>  <i>\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0437\u0430\u0445\u0432\u0430\u0442\u0430 \u0437\u0432\u0443\u043a\u0430<\/i><\/p>\n<p>  \u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0430\u043a\u043e\u0432: \u0435\u0441\u043b\u0438 \u043e\u0434\u043d\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 \u0437\u0432\u0443\u043a \u043d\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>hw:0,0,0<\/code> (\u043a\u0430\u0440\u0442\u0430 0, \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e 0, \u0441\u0443\u0431\u043f\u043e\u0442\u043e\u043a 0), \u0434\u0440\u0443\u0433\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043d\u0430 <code>hw:0,1,0<\/code>, \u0438 \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0430\u0443\u0434\u0438\u043e. \u0427\u0442\u043e\u0431\u044b \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u0437\u0432\u0443\u043a \u0441 \u041e\u0421, \u0430\u0443\u0434\u0438\u043e\u0432\u044b\u0445\u043e\u0434\u043e\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u0442\u043e\u044f\u0442\u044c \u043a\u0430\u0440\u0442\u044b \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u0438 (<i>\u043e\u0440\u0438\u0433. loopback cards<\/i>).<\/p>\n<h3>\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0440\u0435\u0439\u043c\u043e\u0432 GSM<\/h3>\n<p>  \u041a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 GSM \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e<a href=\"http:\/\/ffmpeg.org\/\"> ffmpeg<\/a>. \u041f\u043e\u0440\u0442 GBA \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0432 18157 \u0413\u0446, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u043a\u0430\u0437\u0430\u0442\u044c \u0435\u043c\u0443 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441\u0432\u043e\u0438\u0445 \u0441\u0432\u0435\u0440\u043e\u043a \u2014 \u201c\u0434\u0430-\u0434\u0430, \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043e\u043d\u0430 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u043d\u043e \u043c\u043d\u0435 \u043f\u043b\u0435\u0432\u0430\u0442\u044c\u201d, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443. <\/p>\n<p>  \u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<p>  <code>&lt;<br \/>  ffmpeg -f alsa -i hw:0,1 -y -ac 1 -af 'aresample=18157' -strict unofficial -c:a gsm -f gsm -loglevel quiet -<br \/>  ><\/code><\/p>\n<p>  <i>\u041a\u043b\u044f\u043d\u0443\u0441\u044c, \u044d\u0442\u043e \u0430\u0443\u0434\u0438\u043e!<\/i><\/p>\n<p>  <b>\u041a\u043e\u0434:<\/b><\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/raspi\/src\/LoopbackAudio.h#L21\">\u0410\u0443\u0434\u0438\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u0438<\/a> (<i>\u043e\u0440\u0438\u0433. LoopbackAudio<\/i>)<\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430\u043c\u0438 Linux<\/h3>\n<p>  \u0422\u0438\u0440\u0435 \u2014 \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b ffmpeg \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u201c\u043e\u0442\u043f\u0440\u0430\u0432\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0430 <code>stdout\u201d<\/code>. \u041a\u043e\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441 \u043f\u043e\u0442\u043e\u043a\u043e\u043c <a href=\"https:\/\/man7.org\/linux\/man-pages\/man3\/popen.3.html\">popen<\/a> \u0438 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0451 \u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440.<\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u043d\u043e\u0441 \u0444\u0440\u0435\u0439\u043c\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0440\u0435\u043c\u044f, \u0438\u043d\u043e\u0433\u0434\u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u0430\u0443\u0434\u0438\u043e\u0444\u0440\u0435\u0439\u043c\u043e\u0432, \u0447\u0435\u043c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u0415\u0441\u043b\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u0441 \u044d\u0442\u0438\u043c \u043d\u0435 \u0434\u0435\u043b\u0430\u0442\u044c, \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438\u0437 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0445 \u0430\u0443\u0434\u0438\u043e \u0438 \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0441\u043b\u0443\u0448\u0430\u0442\u044c \u0444\u0440\u0435\u0439\u043c\u044b \u0438\u0437 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e, \u0435\u0449\u0451 \u0438 \u0441 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439.<\/p>\n<p>  <img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/2a6\/9da\/23d\/2a69da23d5f93667686a2ede923caab8.gif\"\/><br \/>  <i>\u041d\u0430\u0448 \u0433\u0435\u0439\u043c\u0431\u043e\u0439 \u0442\u0443\u0441\u0438\u0442 \u043f\u043e\u0434 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0435 \u0430\u0443\u0434\u0438\u043e\u0444\u0440\u0435\u0439\u043c\u044b<\/i><\/p>\n<p>  \u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0435\u0441\u0442\u044c <a href=\"https:\/\/man7.org\/linux\/man-pages\/man2\/ioctl.2.html\">ioctl<\/a> (\u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432) \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <a href=\"https:\/\/docs.oracle.com\/cd\/E19683-01\/806-6546\/kermes8-28\/index.html\">FIONREAD<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043c \u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u043d\u044b\u0445 \u0431\u0430\u0439\u0442\u043e\u0432. \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438\u0445, \u043c\u044b \u043f\u0440\u0438\u0437\u043e\u0432\u0451\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Splice_(system_call)\">splice<\/a>; \u043e\u043d \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0442 \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0435 \u0431\u0430\u0439\u0442\u044b \u0432 <code>\/dev\/null<\/code>.<\/p>\n<p>  <b>\u041a\u043e\u0434:<\/b><\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/raspi\/src\/LoopbackAudio.h#L82\">\u041f\u0440\u043e\u043f\u0443\u0441\u043a \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0445 \u0431\u0430\u0439\u0442\u043e\u0432<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u0423\u0441\u043f\u0435\u0432\u0430\u0435\u043c \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435<\/h3>\n<p>  \u042d\u0442\u043e \u0431\u044b\u043b\u0430 \u0441\u0430\u043c\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u0430. GBA \u0438 \u0431\u0435\u0437 \u0442\u043e\u0433\u043e \u0437\u0430\u043d\u044f\u0442 \u0432\u044b\u0432\u043e\u0434\u043e\u043c \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0432 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435, \u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u0435\u0449\u0451 \u0438 \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0442\u044c GSM \u0444\u0440\u0435\u0439\u043c\u044b! \u0418 \u0431\u0435\u0437 \u0437\u0430\u0434\u0435\u0440\u0436\u0435\u043a. \u041c\u043d\u043e\u0433\u0438\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0442\u0435\u0440\u043f\u0435\u0442\u044c \u043d\u0438\u0437\u043a\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u043a\u0430\u0434\u0440\u043e\u0432, \u043d\u043e \u0432\u043e\u0442 \u0441\u043b\u044b\u0448\u0430\u0442\u044c \u043f\u0438\u0441\u043a \u0438\u043b\u0438 \u043d\u0435 \u0441\u043b\u044b\u0448\u0430\u0442\u044c \u043d\u0438\u0447\u0435\u0433\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043c\u0435\u0436\u0434\u0443 \u0430\u0443\u0434\u0438\u043e\u0441\u044d\u043c\u043f\u043b\u0430\u043c\u0438 \u043d\u0435\u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u043e \u0434\u043b\u044f \u0432\u0441\u0435\u0445.<\/p>\n<p>  \u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044f \u043f\u043e\u043d\u044f\u043b, <i>GSMPlayer<\/i> \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u0442 GSM \u0444\u0440\u0435\u0439\u043c\u044b, \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0441\u044d\u043c\u043f\u043b\u044b \u0432 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u0431\u0443\u0444\u0435\u0440 \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 <a href=\"https:\/\/www.coranac.com\/tonc\/text\/dma.htm\">DMA1<\/a> \u043d\u0430 \u0438\u0445 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u0430\u0443\u0434\u0438\u043e \u0430\u0434\u0440\u0435\u0441\u0443 GBA, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0433\u043b\u0430\u0441\u0443\u0435\u0442\u0441\u044f \u0441 \u043a\u043e\u043f\u0438\u0435\u0439 <a href=\"https:\/\/www.coranac.com\/tonc\/text\/timers.htm\">Timer 0<\/a>.<\/p>\n<p>  <img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/jh\/yg\/gu\/jhyggudkzwolhzd7fj3dy3y4pfm.png\"\/><br \/>  <i>\u042f, \u043f\u044b\u0442\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u0434 GSMPlayer<\/i><\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e, \u043f\u043e\u043c\u0435\u0445\u0438 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435, \u0430\u0443\u0434\u0438\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0432\u043e\u0432\u0440\u0435\u043c\u044f. \u0412 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0438\u0433\u0440\u0430\u0445 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <a href=\"https:\/\/www.coranac.com\/tonc\/text\/video.htm#sec-blanks\">\u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 VBlank<\/a>, \u043d\u043e \u0437\u0434\u0435\u0441\u044c \u044d\u0442\u043e \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041d\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 2,6 \u041c\u0431\u0441 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u043e\u0447\u0435\u043d\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0446\u0438\u043a\u043b\u043e\u0432, \u0438 \u0435\u0441\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0435\u0449\u0451 \u043e\u0434\u043d\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u043f\u0430\u043a\u0435\u0442\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u0434\u0443\u0442 \u0432 \u0445\u0430\u043e\u0441.<\/p>\n<p>  \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043b\u044e\u0431\u0443\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c: \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0430\u0443\u0434\u0438\u043e (\u043c\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u0432 VBlank), \u043c\u044b \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0430\u0443\u0434\u0438\u043e, \u0430 \u0437\u0430\u0442\u0435\u043c \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f, \u0441\u043e\u043e\u0431\u0449\u0430\u044f Raspberry Pi \u0433\u0434\u0435 \u043c\u044b \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442. \u041f\u0440\u0438 \u043b\u044e\u0431\u044b\u0445 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0445 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u0430\u0445, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438 \u043f\u0430\u043a\u0435\u0442\u0430\u0445 <code>TRANSFER_SYNC_PERIOD<\/code> \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 RPI \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0432\u0443\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 (\u043d\u0430 \u043d\u0438\u0437\u043a\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438), \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u201c\u0440\u0435\u0436\u0438\u043c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u201d.<\/p>\n<p>  <b>\u041a\u043e\u0434:<\/b><\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/raspi\/src\/ReliableStream.h#L9\">ReliableStream<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/gba\/src\/_main.cpp#L274\">\u041d\u0430\u0447\u0430\u043b\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/raspi\/src\/ReliableStream.h#L87\">\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0440\u0435\u0436\u0438\u043c\u0430 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/gba\/src\/SPISlave.h#L38\">\u041f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u043e\u0432<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u0420\u0430\u0437\u0433\u043e\u043d EWRAM<\/h3>\n<p>  \u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e, GBA \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0437\u043e\u0433\u043d\u0430\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u044e\u044e RAM \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e <a href=\"https:\/\/en.wikipedia.org\/wiki\/Wait_state\">\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f<\/a> \u0432\u043c\u0435\u0441\u0442\u043e \u0434\u0432\u0443\u0445. \u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043d\u0430 GameBoy Micro \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u044b\u043b\u0435\u0442\u0430\u0435\u0442, \u043d\u043e \u043a\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u044d\u0442\u043e \u0432\u0441\u0451 \u043d\u0430 GB Micro?<\/p>\n<p>  <img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/uj\/mn\/1o\/ujmn1omz5bjjgsql7eefshyseow.png\"\/><br \/>  <i>\u041f\u0430\u0440\u0435\u043d\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 GB Micro \u0441 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u043c \u043a \u043d\u0435\u043c\u0443 Raspberry Pi<\/i><\/p>\n<p>  <b>\u041a\u043e\u0434:<\/b><\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/blob\/v1.1\/gba\/src\/Utils.h#L21\">\u0420\u0430\u0437\u0433\u043e\u043d EWRAM<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430<\/h3>\n<p>  <b>\u041f\u043e\u043b\u043d\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e: <\/b><\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/61c2f254edd610f626b80ddd\" data-style=\"\" id=\"61c2f254edd610f626b80ddd\" width=\"\"><\/div>\n<\/div>\n<p>  <b>\u0411\u044b\u0441\u0442\u0440\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e:<\/b><\/p>\n<ul>\n<li>\u041f\u0440\u0438\u043f\u0430\u044f\u0439\u0442\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u0430\u0431\u0435\u043b\u044c \u043a Raspberry Pi, \u0441\u043b\u0435\u0434\u0443\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 \u201c\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c\/SPI\u201d <\/li>\n<\/ul>\n<p>  <\/p>\n<ul>\n<li>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 <a href=\"https:\/\/retropie.org.uk\/docs\/First-Installation\/\">RetroPie<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<ul>\n<li>\u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b RetroArch \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435:<\/li>\n<\/ul>\n<p>  <code>Settings -> Video -> Scaling -> Aspect ratio -> 4:3<br \/>  Configuration File -> Save current configuration<\/code><\/p>\n<ul>\n<li>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 <code>sudo raspi-config<\/code> \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435:<\/li>\n<\/ul>\n<p>  <b>Interface Options:<\/b> Enable SPI<\/p>\n<ul>\n<li>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 <code>sudo apt-get install -y wiringpi python-pigpio python3-pigpio<\/code><\/li>\n<\/ul>\n<p>  \u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0432 <code>\/boot\/config.txt<\/code><\/p>\n<p>  <i>&lt;<br \/>  # Set Aspect Ratio (4:3)<br \/>  hdmi_safe=0<br \/>  disable_overscan=1<br \/>  hdmi_group=2<br \/>  hdmi_mode=6<\/p>\n<p>  # Set GBA Resolution<br \/>  framebuffer_width=240<br \/>  framebuffer_height=160<br \/>  ><\/i><\/p>\n<ul>\n<li>\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0432 <code>\/home\/pi\/gba-remote-play<\/code> (\u0438\u0437 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 <a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/releases\">Releases<\/a>)<\/li>\n<\/ul>\n<p>  <\/p>\n<ul>\n<li>\u0418\u0437 \u0442\u043e\u0439 \u0436\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 <code>chmod +x gbarplay.sh multiboot.tool raspi.run<\/code><\/li>\n<\/ul>\n<p>  <\/p>\n<ul>\n<li>\u041e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0439\u0442\u0435 <code>\/etc\/rc.local<\/code> \u0438 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0442\u0443\u0434\u0430 <code>\/home\/pi\/gba-remote-play\/gbarplay.sh &amp;<\/code> \u043f\u0435\u0440\u0435\u0434 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 <code>exit 0<\/code><\/li>\n<\/ul>\n<p>  <\/p>\n<ul>\n<li>\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0432\u0430\u0448 Game Boy Advance<\/li>\n<\/ul>\n<p>  <\/p>\n<h3>\u0410\u0443\u0434\u0438\u043e (\u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e)<\/h3>\n<p>  <i>\u042d\u0442\u0430 \u0447\u0430\u0441\u0442\u044c \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430 Raspberry Pi \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b \u0434\u043b\u044f \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u0434\u043e\u0431\u0440\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u043e\u0433\u043e \u0430\u0443\u0434\u0438\u043e, \u0442\u0443\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u043e\u043b\u043e\u043d\u043a\u0443 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0437\u0432\u0443\u043a \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430. \u0412\u0434\u043e\u0431\u0430\u0432\u043e\u043a \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0430\u0443\u0434\u0438\u043e \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0430 \u0432 \u0432\u0438\u0434\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430, \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0437\u0432\u0443\u043a\u0430 \u043e\u0447\u0435\u043d\u044c \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u0445\u0443\u0434\u0448\u0430\u0435\u0442 \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u043a\u0430\u0434\u0440\u043e\u0432. \u0421\u043e \u0437\u0432\u0443\u043a\u043e\u043c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0440\u0441\u0438\u044f v1.0.<\/i><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435, \u0447\u0442\u043e\u0431\u044b \u0437\u0432\u0443\u043a \u0432\u044b\u0445\u043e\u0434\u0438\u043b \u0438\u0437 \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u043d\u0430 GBA, \u0432\u043e\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f:<\/p>\n<p>  \u041f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0437\u0430\u0445\u0432\u0430\u0442\u0438\u0442\u0435 \u0444\u0430\u0439\u043b <u>video-and-audio.zip<\/u> \u0438\u0437 \u0432\u0435\u0440\u0441\u0438\u0438 <a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/releases\/v1.0\">v1.0<\/a><\/p>\n<p>  \u0418\u0437\u043c\u0435\u043d\u0438\u0442\u0435 <code>\/etc\/modprobe.d\/alsa-base.conf<\/code> \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p>  <code>&lt;<br \/>  options snd_aloop index=0<br \/>  options snd_bcm2835 index=1<br \/>  options snd_bcm2835 index=2<br \/>  options snd slots=snd-aloop,snd-bcm2835<br \/>  ><\/code><\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 <code>cat \/proc\/asound\/modules<\/code>, \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<p>  <code>&lt; <br \/>  0 snd_aloop<br \/>   1 snd_bcm2835<br \/>   2 snd_bcm2835<br \/>  ><\/code><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 <u>sudo modprobe snd-aloop<\/u> \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 <b>Loopback (Stereo Full Duplex)<\/b> \u043a\u0430\u043a \u0430\u0443\u0434\u0438\u043e\u0432\u044b\u0445\u043e\u0434 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<\/p>\n<h3>GBA Jam 2021<\/h3>\n<p>  \u0411\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0431\u044b\u043b\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0434\u043b\u044f \u0434\u0436\u0435\u043c\u0430 <a href=\"https:\/\/itch.io\/jam\/gbajam21\">GBA Jam 2021<\/a>. \u0422\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0434\u0436\u0435\u043c\u0430 \u043f\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c (\u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u043b\u043e\u0441\u044c \u0432\u043d\u0435\u0448\u043d\u0435\u0435 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435), \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 <a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/releases\/v1.0\">Releases<\/a> \u0435\u0441\u0442\u044c \u0434\u0435\u043c\u043e-\u0432\u0435\u0440\u0441\u0438\u044f, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u0434\u0438\u043d GBA \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0438\u0434\u0435\u043e \u0441\u043e \u0437\u0432\u0443\u043a\u043e\u043c \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 GBA \u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u0430\u0431\u0435\u043b\u044c.<\/p>\n<p>  <b>\u0412\u043e\u0442 \u0432\u0438\u0434\u0435\u043e:<\/b><\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/61c2f254ad041b3b9bfdc877\" data-style=\"\" id=\"61c2f254ad041b3b9bfdc877\" width=\"\"><\/div>\n<\/div>\n<p>  \u041a\u043e\u0434 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0434\u0435\u043c\u043e-\u0432\u0435\u0440\u0441\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u0432\u0435\u0442\u043a\u0435 <a href=\"https:\/\/github.com\/rodri042\/gba-remote-play\/compare\/v1.0...gba-jam?expand=1\">#gba-jam<\/a><\/p>\n<h3>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u0438<\/h3>\n<p>  \u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u0431\u044b\u043b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430:<\/p>\n<ul>\n<li>GBA hardware access by <a href=\"https:\/\/www.coranac.com\/projects\/#tonc\">libtonc<\/a><\/li>\n<li>GBA audio decompression by <a href=\"https:\/\/github.com\/pinobatch\/gsmplayer-gba\">gsmplayer-gba<\/a><\/li>\n<li>GBA multiboot writer by <a href=\"https:\/\/github.com\/akkera102\/gba_03_multiboot\">gba_03_multiboot<\/a><\/li>\n<li>Raspberry PI SPI transfers by the <a href=\"https:\/\/www.airspayce.com\/mikem\/bcm2835\/\">C library for Broadcom BCM 2835<\/a><\/li>\n<\/ul>\n<p>  \u0412 \u0434\u0435\u043c\u043e \u0434\u043b\u044f GBA Jam \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e \u0434\u0432\u0430 \u043a\u043b\u0438\u043f\u0430 \u0438\u0437 Blender \u043f\u043e\u0434 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439 Creative Commons:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=Z4C82eyhwgU\">Caminandes 2: Gran Dillama<\/a><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=SkVqJ1SGeL0\">Caminandes 3: Llamigos<\/a><\/li>\n<\/ul>\n<p>  \u0410 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.coranac.com\/tonc\/text\/toc.htm\">TONC:<\/a> \u0421\u0430\u043c\u043e\u0435 \u043b\u0443\u0447\u0448\u0435\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e GBA \u0432\u0441\u0435\u0445 \u0432\u0440\u0435\u043c\u0451\u043d \u0438 \u043d\u0430\u0440\u043e\u0434\u043e\u0432<\/li>\n<li><a href=\"https:\/\/problemkaputt.de\/gbatek.htm\">GBATEK:<\/a> \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043f\u043e NO$GBA \u0441 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043f\u043e GBA<\/li>\n<li><a href=\"https:\/\/github.com\/tasanakorn\/rpi-fbcp\/blob\/master\/main.c\">dispmanx API<\/a><\/li>\n<li><a href=\"https:\/\/blog.marekkraus.sk\/c\/linuxs-uinput-usage-tutorial-virtual-gamepad\/\">\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e<\/a> \u043f\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e uinput \u043d\u0430 Linux<\/li>\n<li><a href=\"https:\/\/sysplay.in\/blog\/linux\/2019\/06\/playing-with-alsa-loopback-devices\/\">\u0418\u0433\u0440\u0430\u0435\u043c\u0441\u044f \u0441 ALSA loopback-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438<\/a><\/li>\n<\/ul>\n<p>  \u0418 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u043c\u043e\u0435\u043c\u0443 \u0434\u0440\u0443\u0433\u0443 \u041b\u0443\u043a\u0430\u0441\u0443 \u0424\u0440\u0438\u0437\u0435\u043a\u0443 (<a href=\"https:\/\/github.com\/Hazematman\">@Hazematman<\/a>), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u043d\u0438\u044f\u043c \u043e \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u2014 \u043e\u043d \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043c\u043e\u0433 \u043c\u043d\u0435 \u0441 \u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u0441\u043a\u0438\u043c\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c\u0438.<\/p>\n<p>  <a href=\"https:\/\/cloud.timeweb.com\/?utm_source=habr&amp;utm_medium=banner&amp;utm_campaign=cloud&amp;utm_content=direct&amp;utm_term=low\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" data-src=\"https:\/\/habrastorage.org\/webt\/wn\/cq\/lp\/wncqlp9abeml4npwzsybuvhzcta.png\"\/><\/a><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \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\/company\/timeweb\/blog\/597131\/\"> https:\/\/habr.com\/ru\/company\/timeweb\/blog\/597131\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\" class=\"article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/ze\/kk\/7w\/zekk7wazxwvmnocgyavn1ccjmn8.png\"\/><\/p>\n<p>  \u042d\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u0443\u0435\u0442 \u0438\u0433\u0440\u044b \u0441 Raspberry Pi \u043d\u0430 \u043f\u043e\u0440\u0442\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u043a\u043e\u043d\u0441\u043e\u043b\u044c Game Boy Advance \u0447\u0435\u0440\u0435\u0437 \u0435\u0433\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442. \u0412\u0438\u0434\u0435\u043e \u0438 \u0430\u0443\u0434\u0438\u043e \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u0436\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u044c, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0430 \u0433\u0435\u0439\u043c\u0431\u043e\u0435 \u0438\u0433\u0440\u044b \u0441 \u043b\u044e\u0431\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b (\u043e\u0442\u0441\u044e\u0434\u0430 \u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 Remote Play \u2014 \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a)<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-327596","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/327596","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=327596"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/327596\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=327596"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=327596"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=327596"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}