{"id":367181,"date":"2024-05-21T03:15:42","date_gmt":"2024-05-21T03:15:42","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=367181"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=367181","title":{"rendered":"<span>\u041d\u0430 \u043f\u043e\u043c\u043e\u0439\u043a\u0443? \u041d\u0438\u043a\u0430\u043a \u043d\u0435\u0442! \u041f\u0438\u0448\u0435\u043c \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0434\u0435\u0448\u0435\u0432\u044b\u0445 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u0432<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/86b\/fa4\/02a\/86bfa402a83c50a9bd309beb4e68c9f0.jpg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/86b\/fa4\/02a\/86bfa402a83c50a9bd309beb4e68c9f0.jpg\" data-blurred=\"true\"\/><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u0440\u0438\u0435\u0445\u0430\u0442\u044c \u0432 \u043f\u0443\u043d\u043a\u0442 \u043f\u0440\u0438\u0435\u043c\u0430 \u043c\u0435\u0442\u0430\u043b\u043b\u043e\u043b\u043e\u043c\u0430, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0435 \u043a\u0443\u0447\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u0432 \u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0445 \u00ab\u043e\u0442\u0445\u043e\u0434\u043e\u0432\u00bb, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u043e\u044f\u0442 \u043f\u043e\u0434 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u043d\u0435\u0431\u043e\u043c \u0438 \u0436\u0434\u0443\u0442, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0434\u0451\u0442 \u0438\u0445 \u0447\u0435\u0440\u0451\u0434 \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0438 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0438 \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043c\u043d\u043e\u0433\u0438\u0435 \u0434\u0435\u0432\u0430\u0439\u0441\u044b \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0430\u0431\u043e\u0447\u0438\u043c\u0438 \u0434\u0430\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043b\u0435\u0436\u0430\u043d\u0438\u044f \u043f\u043e\u0434 \u043f\u0430\u043b\u044f\u0449\u0438\u043c \u0441\u043e\u043b\u043d\u0446\u0435\u043c \u0438 \u043f\u0440\u043e\u043b\u0438\u0432\u043d\u044b\u043c\u0438 \u0434\u043e\u0436\u0434\u044f\u043c\u0438, \u0430 \u0441\u0434\u0430\u043b\u0438 \u0438\u0445 \u0432 \u0447\u0435\u0440\u043c\u0435\u0442 \u043f\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u00ab\u043d\u0435 \u043d\u0443\u0436\u0435\u043d, \u043d\u0430\u0434\u043e\u0435\u043b, \u043a\u0443\u043f\u0438\u043b \u043d\u043e\u0432\u044b\u0439\u00bb \u0438 \u0442. \u043f. \u042f \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u044e \u044d\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c, \u0432\u0435\u0434\u044c \u0434\u0430\u0436\u0435 \u0432 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043a\u043d\u043e\u043f\u043e\u0447\u043d\u044b\u0435 \u0437\u0432\u043e\u043d\u0438\u043b\u043a\u0438 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u0434\u043e\u0445\u043d\u0443\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0436\u0438\u0437\u043d\u044c, \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439, \u043d\u043e \u043c\u0430\u043b\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0444\u0430\u043a\u0442: \u0434\u043b\u044f \u043d\u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 C \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0436\u0435\u043b\u0435\u0437\u043e \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 \u0432 \u0441\u0432\u043e\u0438\u0445 \u0446\u0435\u043b\u044f\u0445. \u0410 \u044d\u0442\u043e, \u043d\u0430 \u043c\u0438\u043d\u0443\u0442\u043e\u0447\u043a\u0443, \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c: \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u0441 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u043e\u0439, \u0432\u0438\u0431\u0440\u043e\u043c\u043e\u0442\u043e\u0440, \u0434\u0438\u043d\u0430\u043c\u0438\u043a, \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430 \u0438 GSM-\u0440\u0430\u0434\u0438\u043e\u043c\u043e\u0434\u0443\u043b\u044c \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u044b\u0445\u043e\u0434\u0430 \u0432 \u0441\u0435\u0442\u044c. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0441 \u0432\u0430\u043c\u0438: \u0443\u0437\u043d\u0430\u0435\u043c, \u043d\u0430 \u043a\u0430\u043a\u0438\u0445 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0435 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u044b, \u043a\u0430\u043a\u0438\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0438 \u0433\u0434\u0435 \u0432\u0437\u044f\u0442\u044c \u0434\u043b\u044f \u043d\u0438\u0445 SDK, \u0430 \u0432 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u043d\u0430\u043f\u0438\u0448\u0435\u043c 2D-\u0438\u0433\u0440\u0443 \u0441 \u043d\u0443\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u043c\u043d\u043e\u0433\u0438\u0445 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0445 \u043a\u043d\u043e\u043f\u043e\u0447\u043d\u0438\u043a\u0430\u0445. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e? \u0422\u043e\u0433\u0434\u0430 \u0436\u0434\u0443 \u0432\u0430\u0441 \u043f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c!<br \/>  <a name=\"habracut\"><\/a><\/p>\n<h4><font color=\"#454cee\">\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435:<\/font><\/h4>\n<p>  <\/p>\n<ul>\n<li> <a href=\"#0\">\u041d\u0435 J2ME \u0435\u0434\u0438\u043d\u044b<\/a><\/li>\n<li> <a href=\"#1\">\u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b<\/a><\/li>\n<li> <a href=\"#2\">\u041a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u043d\u0442\u0430\u0439\u043c<\/a><\/li>\n<li> <a href=\"#3\">\u041a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u043d\u0442\u0430\u0439\u043c: Win32<\/a><\/li>\n<li> <a href=\"#4\">\u041a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u043d\u0442\u0430\u0439\u043c: MRE<\/a><\/li>\n<li> <a href=\"#5\">\u041a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u043d\u0442\u0430\u0439\u043c: VXP<\/a><\/li>\n<li> <a href=\"#6\">\u041d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u043f\u0438\u0448\u0435\u043c \u0438\u0433\u0440\u0443<\/a><\/li>\n<li> <a href=\"#7\">\u0422\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0435\u0432\u0430\u0439\u0441\u0430\u0445<\/a><\/li>\n<li> <a href=\"#8\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u041d\u0435 J2ME \u0435\u0434\u0438\u043d\u044b<\/font><\/h2>\n<p><a name=\"0\"><\/a><br \/>  \u0414\u0443\u043c\u0430\u044e, \u043c\u043d\u043e\u0433\u0438\u0435 \u043c\u043e\u0438 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0438 \u043f\u043e\u043c\u043d\u044f\u0442 \u043e \u0442\u0430\u043a\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435, \u043a\u0430\u043a J2ME. Java-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u043b\u0438 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u0432 \u0432 2000-\u0445 \u0433\u043e\u0434\u0430\u0445. API \u0434\u043b\u044f \u043d\u0438\u0445 \u0431\u044b\u043b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0435\u043b\u0438 \u043e\u0442 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0438 \u041e\u0421 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0430 \u043f\u043e\u0440\u043e\u0433 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0431\u044b\u043b \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0438\u0437\u043a\u0438\u0439 \u0438 \u0434\u0430\u0436\u0435 \u043d\u043e\u0432\u0438\u0447\u043a\u0438 \u043c\u043e\u0433\u043b\u0438 \u0437\u0430 \u043f\u0430\u0440\u0443 \u0434\u043d\u0435\u0439 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0438\u0433\u0440\u0443\u0448\u043a\u0443 \u0438\u043b\u0438 \u043a\u0430\u043a\u043e\u0435-\u043d\u0438\u0431\u0443\u0434\u044c GUI-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435!<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/c0f\/ef3\/3b3\/c0fef33b3533afc2de4170bf192a8c6e.jpg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/c0f\/ef3\/3b3\/c0fef33b3533afc2de4170bf192a8c6e.jpg\" data-blurred=\"true\"\/><\/div>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0435 \u043e\u0434\u043d\u0438\u043c J2ME \u043c\u044b \u0431\u044b\u043b\u0438 \u0435\u0434\u0438\u043d\u044b: \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u043f\u044b\u0442\u0430\u043b\u0438\u0441\u044c \u0437\u0430\u043d\u044f\u0442\u044c \u043d\u0438\u0448\u0443 Java \u043d\u0430 \u0440\u044b\u043d\u043a\u0435. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043d\u0438\u0445 \u044f <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/787548\/\">\u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b \u0432 \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 3D-\u0438\u0433\u0440\u044b \u043f\u043e\u0434 Sony Ericsson \u0441 \u043d\u0443\u043b\u044f<\/a>: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0431\u044b\u043b\u0430 \u0442\u0430\u043a\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u043d\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430\u0445 Sony Ericsson \u0441\u0435\u0440\u0438\u0438 T, \u043a\u0430\u043a Mophun, \u0430 CDMA-\u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430\u043c\u0438 \u0441 \u0447\u0438\u043f\u0441\u0435\u0442\u0430\u043c\u0438 Qualcomm \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043d\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 BREW. \u041f\u043e\u0436\u0430\u043b\u0443\u0439, \u044f \u043d\u0435 \u0431\u0443\u0434\u0443 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u0442\u044c \u043e .sis \u0438 .cab \u2014 \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u044b \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u043e\u0432, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u00ab\u0444\u0438\u0447\u0435\u0444\u043e\u043d\u043e\u0432\u00bb.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/863\/49e\/2da\/86349e2da4cbdc5b73a459a0b2416760.jpg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/863\/49e\/2da\/86349e2da4cbdc5b73a459a0b2416760.jpg\" data-blurred=\"true\"\/><\/div>\n<p>  <i><font color=\"#4682B4\">\u0418\u0433\u0440\u0430 \u0434\u043b\u044f Mophun3D<\/font><\/i><\/p>\n<p>  \u0412 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442, \u0431\u043b\u0438\u0436\u0435 \u043a 2006-2007 \u0433\u043e\u0434\u0443, \u043f\u0440\u0438\u043b\u0430\u0432\u043a\u0438 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0445 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0438\u0442\u0435\u0439\u043b\u0435\u0440\u043e\u0432 (\u043f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u044d\u0442\u043e \u0431\u044b\u043b\u0438 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u044b Fly) \u0438 \u043d\u0435\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0434\u0430\u0432\u0446\u043e\u0432 \u043d\u0430 \u0440\u044b\u043d\u043a\u0430\u0445 \u0437\u0430\u043f\u043e\u043b\u043e\u043d\u0438\u043b\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0435 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u043b\u0438 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043d\u0435\u043c\u044b\u0441\u043b\u0438\u043c\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0434\u043b\u044f \u0442\u0435\u0445 \u043b\u0435\u0442 \u0437\u0430 \u043a\u043e\u043f\u0435\u0439\u043a\u0438, \u0434\u0430 \u0435\u0449\u0451 \u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u0438 \u0444\u043b\u0430\u0433\u043c\u0430\u043d\u0441\u043a\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u0431\u0440\u0435\u043d\u0434\u043e\u0432. \u041f\u043e\u0436\u0430\u043b\u0443\u0439, \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0442\u0430\u043a\u0438\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u0432 \u0431\u044b\u043b\u0430 Nokla TV E71\/E72 (\u0434\u0430, \u0438\u043c\u0435\u043d\u043d\u043e \u00ab\u043d\u043e\u043a\u043b\u0430\u00bb), \u0432\u044b\u0448\u0435\u0434\u0448\u0430\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 2008 \u0433\u043e\u0434\u0443 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0432\u0448\u0430\u044f\u0441\u044f \u0430\u0436 \u0434\u043e 2011 \u0433\u043e\u0434\u0430! \u0417\u0430 2-3 \u0442\u044b\u0441\u044f\u0447\u0438 \u0440\u0443\u0431\u043b\u0435\u0439 (\u044d\u0442\u043e \u043c\u0435\u043d\u0435\u0435 100 \u0431\u0430\u043a\u0441\u043e\u0432), \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u043e\u043b\u0443\u0447\u0430\u043b \u0437\u0434\u043e\u0440\u043e\u0432\u044b\u0439 2.4&#8243; \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u0441 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c 240&#215;320 \u0432\u0435\u0441\u044c\u043c\u0430 \u043d\u0435\u043f\u043b\u043e\u0445\u043e\u0433\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 (\u043a\u043e\u0433\u0434\u0430 \u0432 \u0442\u0435 \u0433\u043e\u0434\u044b \u043c\u043d\u043e\u0433\u0438\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u043b\u0438 \u0445\u043e\u0434\u0438\u0442\u044c \u0441 176&#215;220), \u0434\u0430 \u0435\u0449\u0451 \u0438 \u0441 \u0442\u0430\u0447\u0441\u043a\u0440\u0438\u043d\u043e\u043c, \u0433\u0438\u0440\u043e\u0441\u043a\u043e\u043f, \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0439 \u0433\u0440\u043e\u043c\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u043c\u0438\u043a (\u043f\u0443\u0441\u0442\u044c \u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439), \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 SD-\u043a\u0430\u0440\u0442\u043e\u0447\u0435\u043a \u0434\u043e 32\u0413\u0431, \u043d\u0435\u0440\u0435\u0434\u043a\u043e \u0444\u0440\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0443\u044e \u043a\u0430\u043c\u0435\u0440\u0443, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u043c\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0434\u0438\u0437\u0430\u0439\u043d \u0441 \u0432\u0441\u0442\u0430\u0432\u043a\u0430\u043c\u0438 \u0438\u0437 \u0430\u043b\u044e\u043c\u0438\u043d\u0438\u044f. \u0427\u0430\u0441\u0442\u0435\u043d\u044c\u043a\u043e \u043a\u0438\u0442\u0430\u0439\u0446\u044b \u0437\u0430\u0431\u043e\u0442\u043b\u0438\u0432\u043e \u043a\u043b\u0430\u043b\u0438 \u0432 \u043a\u043e\u0440\u043e\u0431\u043a\u0443 \u0435\u0449\u0451 \u0447\u0435\u0445\u043e\u043b\u044c\u0447\u0438\u043a \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \ud83d\ude42<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/0b5\/4c4\/24a\/0b54c424a7e6dd3a0e0036d6f74d6822.jpg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/0b5\/4c4\/24a\/0b54c424a7e6dd3a0e0036d6f74d6822.jpg\" data-blurred=\"true\"\/><\/div>\n<p>  \u0411\u044b\u043b\u0438 \u0434\u0430\u0436\u0435 \u043f\u043e\u043b\u043d\u044b\u0435 \u043a\u043e\u043f\u0438\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043e\u0442 Nokia. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043a\u0438\u0442\u0430\u0439\u0446\u044b \u043b\u044e\u0431\u0438\u043b\u0438 \u043f\u043e\u0434\u0434\u0435\u043b\u044b\u0432\u0430\u0442\u044c \u043c\u0430\u0441\u0441\u043e\u0432\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0430 S40: \u043e\u043d\u0438 \u0431\u044b\u043b\u0438 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c\u0438 \u0438 \u043a\u0438\u0442\u0430\u0439\u0446\u044b \u0445\u043e\u0442\u0435\u043b\u0438 \u043e\u0442\u043a\u0443\u0441\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u043a\u0443\u0441\u043e\u043a \u0440\u044b\u043d\u043a\u0430 \u0443 Nokia. \u041f\u0443\u0441\u0442\u044c \u0438 \u0440\u044b\u043d\u043a\u0430 \u0441\u0435\u0440\u043e\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u2014 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0432 \u0441\u0430\u043b\u043e\u043d\u0430\u0445 \u0441\u0432\u044f\u0437\u0438 \u043f\u043e\u0434\u0434\u0435\u043b\u043a\u0438 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0434\u0430\u0432\u0430\u043b:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/f44\/2a7\/408\/f442a7408716b4423777b7dbd0d083b2.jpg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/f44\/2a7\/408\/f442a7408716b4423777b7dbd0d083b2.jpg\" data-blurred=\"true\"\/><\/div>\n<p>  \u041d\u043e \u0431\u044b\u043b\u0430 \u0438 \u043b\u043e\u0436\u043a\u0430 \u0434\u0451\u0433\u0442\u044f \u0432 \u044d\u0442\u043e\u0439 \u0431\u043e\u0447\u043a\u0435 \u043c\u0435\u0434\u0430: \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0435 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u044b \u043e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u043d\u0435 \u0438\u043c\u0435\u043b\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 Java, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u043c\u043d\u043e\u0433\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0440\u0430\u0437\u043e\u0447\u0430\u0440\u043e\u0432\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0432 \u043d\u0438\u0445 \u0438\u0437-\u0437\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041d\u0438\u043a\u0430\u043a\u043e\u0439 \u0442\u0435\u0431\u0435 \u043e\u043f\u0435\u0440\u044b, \u0430\u0441\u044c\u043a\u0438, \u0438\u0433\u0440\u2026 \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u044d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u043e\u0442\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 Sun, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 J2ME-\u043c\u0430\u0448\u0438\u043d\u044b (JBed\/JBlend) \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0447\u0438\u043f\u0430 \u0444\u043b\u044d\u0448-\u043f\u0430\u043c\u044f\u0442\u0438 \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u043e\u0431\u044a\u0451\u043c\u0430.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/1c1\/dc4\/5ed\/1c1dc45ed16169a5bf01455a3b3492a2.jpg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/1c1\/dc4\/5ed\/1c1dc45ed16169a5bf01455a3b3492a2.jpg\" data-blurred=\"true\"\/><\/div>\n<p>  \u041d\u043e \u043c\u043d\u043e\u0433\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043d\u0435 \u0437\u043d\u0430\u043b\u0438, \u0447\u0442\u043e \u0442\u0430\u043a\u0438\u0435 \u0434\u0435\u0432\u0430\u0439\u0441\u044b \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043d\u043e \u0438 \u0443\u043c\u0435\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0435 <b>\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435<\/b> \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u043c C! \u0412\u0441\u0435\u043c\u0443 \u043f\u043e\u043c\u0435\u0448\u0430\u043b\u0430 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0430\u044f \u043a\u043e\u0441\u0442\u044b\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u0442\u043e\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u0441\u0442\u044c. \u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u043b\u0430\u0441\u044c \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c \u0440\u044b\u043d\u043a\u0435. \u0414\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u044b\u043b\u043e \u0432\u0432\u043e\u0434\u0438\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432 \u043d\u043e\u043c\u0435\u0440\u043e\u043d\u0430\u0431\u0438\u0440\u0430\u0442\u0435\u043b\u0435, \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u043d\u0443\u0436\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443, \u0430 SDK \u0434\u043e\u043b\u0433\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0431\u044b\u043b\u043e \u043f\u043b\u0430\u0442\u043d\u044b\u043c \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439 \u0438\u0437 \u041a\u0438\u0442\u0430\u044f. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0434\u0435\u0432\u0430\u0439\u0441\u0435 \u2014 \u0431\u044b\u043b\u0438 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c\u044e.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/87b\/2f0\/c38\/87b2f0c381774a2a13938d76e1e6f6a2.jpg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/87b\/2f0\/c38\/87b2f0c381774a2a13938d76e1e6f6a2.jpg\" data-blurred=\"true\"\/><\/p>\n<p>  \u0412 \u0440\u0430\u043d\u043d\u0438\u0445 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 Mythroad (MRP, MiniJ) \u043e\u0442 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 SkyWorks, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u0441\u0432\u043e\u044e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f\u043c \u0447\u0438\u043f\u0441\u0435\u0442\u043e\u0432. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 MRP \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430\u0445 \u0441 \u0447\u0438\u043f\u0441\u0435\u0442\u0430\u043c\u0438 <b>MediaTek<\/b>, <b>Spreadtrum<\/b>, \u0430 \u0442\u0430\u043a\u0436\u0435 <b>MStar<\/b> (\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e Coolsand). Mythroad \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 API \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0436\u0435\u043b\u0435\u0437\u043e\u043c \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u0430\u043a UI-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0442\u0430\u043a \u0438 \u0438\u0433\u0440, \u043a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, Mythroad \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u043b \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0432 \u043e\u0434\u043d\u043e\u043c \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0435 \u0441 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 \u0438 \u0434\u0430\u0436\u0435 \u0438\u043c\u0435\u043b \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u044f\u0437\u044b\u043a \u043f\u043e\u043c\u0438\u043c\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0430\u043a\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u044b\u043b\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 dsm_gm.mrp \u0438 \u0438\u0433\u0440\u0443 \u0432 \u043f\u0430\u043f\u043a\u0443 <b>mythroad<\/b> \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u043b\u0438 \u043d\u0430 \u0444\u043b\u044d\u0448\u043a\u0435, \u0430 \u0437\u0430\u0442\u0435\u043c \u043d\u0430\u0431\u0440\u0430\u0442\u044c \u0432 \u043d\u043e\u043c\u0435\u0440\u043e\u043d\u0430\u0431\u0438\u0440\u0430\u0442\u0435\u043b\u0435 \u043a\u043e\u0434 *#220807#, \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0439 \u043f\u0435\u0440\u0432\u043e\u0439 SIM-\u043a\u0430\u0440\u0442\u0435. \u041a\u043e\u0441\u0442\u044b\u043b\u044c\u043d\u043e? \u041a\u043e\u0441\u0442\u044b\u043b\u044c\u043d\u043e! \u041e\u0442\u043a\u0443\u0434\u0430 \u043e\u0431 \u044d\u0442\u043e\u043c \u0437\u043d\u0430\u0442\u044c \u0441\u0440\u0435\u0434\u043d\u0435\u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e? \u041d\u0435 \u043e\u0442\u043a\u0443\u0434\u0430! \u041d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e!<\/p>\n<p>  \u042d\u0442\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u0430\u0441\u044c \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u043f\u043e\u0434\u0434\u0435\u043b\u043e\u043a \u043f\u043e\u0434 \u0431\u0440\u0435\u043d\u0434\u043e\u0432\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 Nokia, Sony Ericsson \u0438 Samsung, \u0430 \u0442\u0430\u043a\u0436\u0435 iPhone \u0438 \u043d\u0430 \u043c\u043d\u043e\u0433\u0438\u0445 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0445 \u043a\u043d\u043e\u043f\u043e\u0447\u043d\u044b\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430\u0445 2008-2010 \u0433\u043e\u0434\u043e\u0432.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/450\/8fa\/0fd\/4508fa0fd54ebb4380da9afa26058b91.jpg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/450\/8fa\/0fd\/4508fa0fd54ebb4380da9afa26058b91.jpg\" data-blurred=\"true\"\/><\/div>\n<p>  \u0411\u043b\u0438\u0436\u0435 \u043a 2010 \u0433\u043e\u0434\u0443 MediaTek \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u0441\u0432\u043e\u044e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u043b\u0430 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c MRP \u2014 WRE (VXP). \u042d\u0442\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0431\u044b\u043b\u0430 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0448\u0438\u0440\u0435 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0431\u044b\u043b \u0434\u043e\u0441\u0442\u0443\u043f \u043a UART) \u0438 \u0435\u0451 API \u0431\u044b\u043b \u0432\u043f\u043e\u043b\u043d\u0435 \u0443\u0434\u043e\u0431\u043d\u043e \u0447\u0438\u0442\u0430\u0435\u043c \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430, \u0430 SDK \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0434\u043b\u044f \u0432\u0441\u0435\u0445. \u041e\u0434\u0438\u043d \u043d\u044e\u0430\u043d\u0441 \u0432\u0441\u0451 \u043f\u043e\u0440\u0442\u0438\u043b \u2014 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u043a IMSI (\u0434\u0430\u0436\u0435 \u043d\u0435 IMEI) \u0441\u0438\u043c\u043a\u0438 \u0432 \u0434\u0435\u0432\u0430\u0439\u0441\u0435 \u0438 \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u0435\u0432\u0430\u0439\u0441\u0430\u0445 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0438 \u043f\u0435\u0440\u0435\u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u0443\u044e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e SIM \u0438\u043b\u0438 \u043f\u0430\u0442\u0447\u0438\u043d\u0433 \u0434\u0430\u043c\u043f\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 \u043d\u0430 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0438. \u042d\u0442\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u0430\u0441\u044c \u043d\u0430 \u043c\u043d\u043e\u0433\u0438\u0445 \u043a\u043d\u043e\u043f\u043e\u0447\u043d\u0438\u043a\u0430\u0445 \u0438 \u0441\u043c\u0430\u0440\u0442-\u0447\u0430\u0441\u0438\u043a\u0430\u0445 2010-2020 \u0433\u043e\u0434\u043e\u0432: \u043a \u043d\u0438\u043c \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043d\u043e\u0432\u043e\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u044b Nokia, \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u044b DNS \u0438 DEXP, Explay \u0438 \u0442. \u043f. \u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u0441 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c VXP \u0432 \u043f\u0440\u043e\u0432\u043e\u0434\u043d\u0438\u043a\u0435 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0433\u043e. \u041d\u043e \u0441 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0438\u043c\u0435\u043b\u0438\u0441\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b: \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c VXP \u0434\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u0438 2.0 \u0438 \u0432\u044b\u0448\u0435, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043b\u0438\u0448\u044c \u0431\u0435\u043b\u044b\u0439 \u044d\u043a\u0440\u0430\u043d. \u041d\u0443 \u0445\u043e\u0442\u044c \u043d\u0435 \u0441\u043e\u0444\u0442\u0440\u0435\u0441\u0435\u0442, \u0438 \u043d\u0430 \u0442\u043e\u043c \u0441\u043f\u0430\u0441\u0438\u0431\u043e!<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/976\/153\/afd\/976153afda79dbb601710814ceb7a624.jpg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/976\/153\/afd\/976153afda79dbb601710814ceb7a624.jpg\" data-blurred=\"true\"\/><\/div>\n<p>  <i><font color=\"#4682B4\">\u0414\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u0435 \u0442\u0430\u043a\u0438\u0435 \u0447\u0430\u0441\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 MRE, \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0443\u0436\u043d\u043e \u043e\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443<\/font><\/i><\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b&lt;<\/font><\/h2>\n<p>  <a name=\"1\"><\/a><\/p>\n<p>  \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0445 \u043a\u043d\u043e\u043f\u043e\u0447\u043d\u044b\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u0431\u0430\u0437\u0435 \u043e\u0434\u043d\u0438\u0445 \u0438 \u0442\u0435\u0445 \u0436\u0435 \u0447\u0438\u043f\u0441\u0435\u0442\u043e\u0432. \u0412 \u043a\u043e\u043d\u0446\u0435 \u043d\u0443\u043b\u0435\u0432\u044b\u0445 \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0447\u0438\u043f\u0441\u0435\u0442\u044b MT6225, SC6520 \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0447\u0438\u043f\u044b \u043e\u0442 Coolsand. \u0421\u0440\u0435\u0434\u043d\u0438\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u0434\u0435\u0432\u0430\u0439\u0441\u0430 \u0431\u044b\u043b\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438:<\/p>\n<ul>\n<li> <b>\u041f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440<\/b>: ARMv5 \u044f\u0434\u0440\u043e \u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 ~104\u041c\u0413\u0446, ARM926EJ-S. \u041d\u0435\u0442 FPU, \u0435\u0441\u0442\u044c Thumb. \u0411\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043c\u043e\u0433\u043b\u0430 \u0437\u0430\u0431\u0440\u0430\u0442\u044c \u0441\u0435\u0431\u0435.<\/li>\n<li> <b>\u041e\u0417\u0423<\/b>: ~4\u041c\u0431 SDRAM. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u043c \u0431\u044b\u043b\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e 512\u041a\u0431-1\u041c\u0431 Heap&#8217;\u0430. \u042d\u0442\u043e, \u0432 \u0446\u0435\u043b\u043e\u043c, \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u043c\u0430\u043b\u043e \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0439.<\/li>\n<li> <b>\u0424\u043b\u044d\u0448-\u043f\u0430\u043c\u044f\u0442\u044c<\/b>: ~32\u041c\u0431, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u043f\u0430\u0440\u0443 \u0441\u043e\u0442\u0435\u043d \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442. \u0414\u0430, \u0432\u044b \u043d\u0435 \u043e\u0441\u043b\u044b\u0448\u0430\u043b\u0438\u0441\u044c, \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442! \u041e\u0434\u043d\u0430\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c MicroSD-\u0444\u043b\u044d\u0448\u043a\u0438 \u0434\u043e 32\u0413\u0431.<\/li>\n<li> <b>\u0414\u0438\u0441\u043f\u043b\u0435\u0439<\/b>: \u043e\u0442 128&#215;128 \u0434\u043e 320&#215;480, \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0435\u0441\u0442\u044c 18-\u0431\u0438\u0442\u043d\u044b\u0439 \u0446\u0432\u0435\u0442 (262.000 \u0446\u0432\u0435\u0442\u043e\u0432), \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 TV E71\/E72 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u043f\u043b\u043e\u0445\u0430\u044f TN-\u043c\u0430\u0442\u0440\u0438\u0446\u0430 \u0441 \u0445\u043e\u0440\u043e\u0448\u0438\u043c\u0438 \u0443\u0433\u043b\u0430\u043c\u0438 \u043e\u0431\u0437\u043e\u0440\u0430 \u0438 \u044f\u0440\u043a\u043e\u0439 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u043e\u0439. \u0418\u043d\u043e\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u0442\u0430\u0447\u0441\u043a\u0440\u0438\u043d.<\/li>\n<li> <b>\u0417\u0432\u0443\u043a<\/b>: \u0433\u0440\u043e\u043c\u043a\u0438\u0439 \u0434\u0438\u043d\u0430\u043c\u0438\u043a, \u043d\u0430\u0443\u0448\u043d\u0438\u043a\u0438.<\/li>\n<li> <b>\u0410\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0442\u043e\u0440<\/b>: ~800\u043c\u0410\u0447, \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u0435\u0432\u0430\u0439\u0441\u0430\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438 2.000\u043c\u0410\u0447, \u0430 \u0442\u043e \u0438 \u0431\u043e\u043b\u044c\u0448\u0435!<\/li>\n<li> <b>\u0412\u0432\u043e\u0434<\/b>: \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430, \u0438\u043d\u043e\u0433\u0434\u0430 \u0431\u044b\u043b\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 QWERTY.<\/li>\n<li> <b>\u0412\u043d\u0435\u0448\u043d\u0438\u0435 \u0448\u0438\u043d\u044b<\/b>: \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u044b\u043b \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d UART, \u043f\u0440\u0438\u0447\u0451\u043c \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u043f\u0440\u044f\u043c\u043e \u0441 \u043f\u043b\u0430\u0442\u044b \u2014 \u043e\u043d \u0431\u044b\u043b \u044f\u0432\u043d\u043e \u043f\u043e\u0434\u043c\u0435\u0447\u0435\u043d! \u0412\u0437\u044f\u0442\u044c GPIO \u0441 \u043f\u0440\u043e\u0446\u0430 \u043d\u0435 \u0432\u044b\u0439\u0434\u0435\u0442 (\u043a\u0440\u043e\u043c\u0435, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u0438\u0431\u0440\u043e\u043c\u043e\u0442\u043e\u0440\u0430), SPI \u0438 I2C \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b. \u0412\u043d\u0435\u0448\u043d\u0438\u0435 \u0448\u0438\u043d\u044b \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e UART \u0447\u0435\u0440\u0435\u0437 GPIO-\u043c\u043e\u0441\u0442 \u0438\u0437 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430.<\/li>\n<\/ul>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u043f\u043b\u043e\u0445\u0438\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u0434\u043b\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0441\u0440\u0430\u0437\u0443 \u0432\u0441\u0451. \u041d\u0430 \u0431\u0430\u0437\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u0434\u0435\u0432\u0430\u0439\u0441\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e, \u0438 HMI-\u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u0441 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u0430\u043a\u0438\u043c-\u043d\u0438\u0431\u0443\u0434\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c, \u0438 \u0438\u0433\u0440\u043e\u0432\u0443\u044e \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0441 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430\u043c\u0438\u2026 \u0434\u0430 \u043d\u0430 \u0447\u0442\u043e \u0444\u0430\u043d\u0442\u0430\u0437\u0438\u0438 \u0445\u0432\u0430\u0442\u0430\u0435\u0442! \u0418 \u044d\u0442\u043e \u0437\u0430 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e 200-300 \u0440\u0443\u0431\u043b\u0435\u0439, \u0435\u0441\u043b\u0438 \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0431\/\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0438\u043b\u0438 600 \u0440\u0443\u0431\u043b\u0435\u0439, \u0435\u0441\u043b\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u043d\u043e\u0432\u043e\u043c. \u042d\u0442\u043e \u0434\u0435\u0448\u0435\u0432\u043b\u0435, \u0447\u0435\u043c \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0434\u0435\u0432\u0430\u0439\u0441 \u0441 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c \u0441\u0430\u043c\u043e\u043c\u0443 \u0438\u0437 \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e \u041c\u041a (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, RP2040) \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439. \u041a\u0441\u0442\u0430\u0442\u0438, \u0434\u0435\u0448\u0435\u0432\u044b\u0435 2.4&#8243; \u0434\u0438\u0441\u043f\u043b\u0435\u0438 \u043d\u0430 \u0430\u043b\u0438\u043a\u0435 \u2014 \u044d\u0442\u043e \u043d\u0438 \u0447\u0442\u043e \u0438\u043d\u043e\u0435, \u043a\u0430\u043a \u043d\u0435\u0432\u043e\u0441\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u0434\u0438\u0441\u043f\u043b\u0435\u0435\u0432 \u0434\u043b\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u0432 \u043d\u0430 \u0441\u043a\u043b\u0430\u0434\u0430\u0445! \u0410 \u0432\u044b \u0434\u0443\u043c\u0430\u043b\u0438, \u043e\u0442\u043a\u0443\u0434\u0430 \u0442\u0430\u043c \u0437\u043d\u0430\u0447\u043a\u0438 \u043d\u0430 \u0442\u0430\u0447\u0441\u043a\u0440\u0438\u043d\u0435 \u0441\u043d\u0438\u0437\u0443?<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/d9b\/991\/cb5\/d9b991cb58901dcc87a7aaf848379813.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/d9b\/991\/cb5\/d9b991cb58901dcc87a7aaf848379813.png\"\/><\/div>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043b\u0438\u0448\u044c \u0442\u0435\u043e\u0440\u0438\u0435\u0439 \u0438 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u0443\u044e 2D-\u0438\u0433\u0440\u0443\u0448\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043d\u0430 \u0442\u0440\u0435\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445 \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u043a\u043e\u0434\u0435 \u0441\u0430\u043c\u043e\u0439 \u0438\u0433\u0440\u044b: Windows, MRP (Mythroad) \u0438 VXP. \u041d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442\u044c \u0442\u0430\u043a\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u043e\u0442 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0440\u0430\u043d\u0442\u0430\u0439\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u0438\u0433\u0440\u044b.<\/p>\n<p>  \u0418\u0433\u0440\u0443\u0448\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0439: 2D \u0441\u043a\u0440\u043e\u043b\u043b-\u0448\u0443\u0442\u0435\u0440 \u0441 \u0432\u0438\u0434\u043e\u043c \u0441\u0432\u0435\u0440\u0445\u0443, \u0430-\u043b\u044f Asteroids. \u041b\u0435\u0442\u0430\u0435\u043c \u043f\u043e \u043a\u043e\u0441\u043c\u043e\u0441\u0443, \u0438 \u0441\u0442\u0440\u0435\u043b\u044f\u0435\u043c \u043f\u043e \u0432\u0440\u0430\u0436\u0434\u0435\u0431\u043d\u044b\u043c \u043a\u043e\u0440\u0430\u0431\u043b\u0438\u043a\u0430\u043c, \u0441\u0442\u0430\u0440\u0430\u044f\u0441\u044c \u043d\u0435 \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u043f\u043e\u0434 \u0432\u0440\u0430\u0436\u0435\u0441\u043a\u0438\u0435 \u043b\u0430\u0437\u0435\u0440\u044b. \u0412\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u043e \ud83d\ude42<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/de3\/a29\/363\/de3a2936325f8e2ac55e1c0864ef85c8.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/de3\/a29\/363\/de3a2936325f8e2ac55e1c0864ef85c8.png\"\/><\/div>\n<p>  <\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0447\u0430\u0441\u0442\u044c: \u041a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u043d\u0442\u0430\u0439\u043c<\/font><\/h2>\n<p>  <a name=\"2\"><\/a>\u0418\u0442\u0430\u043a, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0442 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438\u0433\u0440\u044b? \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c:<\/p>\n<ul>\n<li> <b>\u0413\u0440\u0430\u0444\u0438\u043a\u0430<\/b>: \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u044d\u043a\u0440\u0430\u043d\u0430, \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u0441\u043f\u0440\u0430\u0439\u0442\u043e\u0432 \u0441 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c\u044e (\u0431\u0435\u0437 \u0430\u043b\u044c\u0444\u0430-\u0431\u043b\u0435\u043d\u0434\u0438\u043d\u0433\u0430, \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043b\u043e\u0440\u043a\u0435\u0439), \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u0442\u0435\u043a\u0441\u0442\u0430. \u041f\u0440\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 API \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u0438, \u0430 \u043d\u0435 \u0433\u043e\u0440\u043e\u0434\u0438\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0431\u043b\u0438\u0442\u0442\u0435\u0440. \u0424\u043e\u0440\u043c\u0430\u0442 \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d: RGB565 (65\u043a \u0446\u0432\u0435\u0442\u043e\u0432).<\/li>\n<li> <b>\u0420\u0435\u0441\u0443\u0440\u0441\u044b<\/b>: \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u043c \u043e\u0431\u0440\u0430\u0437\u0435 \u0441 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0438\u0433\u0440\u043e\u0439. \u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0432\u0441\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u044b \u0432 \u0432\u0438\u0434\u0435 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0431\u0430\u0439\u0442 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u0430\u0445. \u042f \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c<a href=\"https:\/\/lvgl.io\/tools\/imageconverter_v9\"> \u0432\u043e\u0442 \u044d\u0442\u043e\u0439 \u0442\u0443\u043b\u0437\u043e\u0439<\/a> \u0434\u043b\u044f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u0441\u043f\u0440\u0430\u0439\u0442\u043e\u0432 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0431\u0430\u0439\u0442\u043e\u0432.<\/li>\n<li> <b>\u0417\u0432\u0443\u043a<\/b>: \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0445\u043e\u0442\u044f-\u0431\u044b \u043e\u0434\u043d\u043e\u0433\u043e WAV-\u043f\u043e\u0442\u043e\u043a\u0430. \u041f\u043e\u0447\u0435\u043c\u0443 \u043e\u0434\u043d\u043e\u0433\u043e? \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u043d\u0430 \u0432\u0441\u0435\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445 \u0435\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u043c\u0443 \u043c\u0438\u043a\u0448\u0435\u0440\u0443\u2026 \u0434\u0430 \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0432\u0435\u0437\u0434\u0435 \u0435\u0441\u0442\u044c \u043f\u0440\u044f\u043c\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a PCM (\u043f\u0440\u0438\u0432\u0435\u0442 MRP), \u0438\u043d\u043e\u0433\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u043e\u0434\u043d\u0438\u043c \u043a\u0430\u043d\u0430\u043b\u043e\u043c \u0434\u043b\u044f WAV-\u0437\u0432\u0443\u043a\u0430 \u0431\u0435\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0430\u0443\u0434\u0438\u043e\u0444\u0430\u0439\u043b\u043e\u0432 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e.<\/li>\n<li> <b>\u0412\u0432\u043e\u0434<\/b>: \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f \u043e\u0442 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043c\u043e\u043d\u043e\u0431\u043b\u043e\u043a\u0430: \u0441\u0442\u0440\u0435\u043b\u043a\u0438, OK, \u043b\u0435\u0432\u044b\u0439 \u0438 \u043f\u0440\u0430\u0432\u044b\u0435 \u0441\u043e\u0444\u0442\u043a\u0435\u0438.<\/li>\n<li> <b>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430<\/b>: \u043d\u0435 \u043d\u0430 \u0432\u0441\u0435\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0437 stdlib. \u041a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0432 MRP \u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u00ab\u044d\u043b\u044c\u0444\u0430\u0445\u00bb \u0434\u043b\u044f Motorola, \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440, rand \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u041d\u0430 \u0442\u0430\u043a\u0438\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445, \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0438\u043d\u043a\u043b\u0443\u0434\u044b \u0434\u0435\u0444\u0430\u0439\u043d\u0430\u043c\u0438 \u043f\u043e\u0434\u043c\u0435\u043d\u044f\u044e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430 \u0441\u0432\u043e\u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438:\n<pre><code class=\"cpp\">#define malloc system_alloc #define free system_free<\/code><\/pre>\n<p>  \u041d\u043e \u0435\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u0438\u0433\u0440\u0430 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u0430\u044f, \u0442\u043e \u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u0438\u043d\u043a\u043b\u0443\u0434\u044b \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c.<\/li>\n<\/ul>\n<p>  \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u0441\u0451 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e, \u0432\u0435\u0440\u043d\u043e? \u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0445\u0432\u0430\u0442\u0438\u0442 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u0438\u0433\u0440\u044b:<\/p>\n<pre><code class=\"cpp\">void sysLogf(char* fmt, ...); void* sysAlloc(int len); void sysFree(void* ptr); int sysRand();  int gGetScreenWidth(); int gGetScreenHeight(); int gGetScreenColorDepth(); \/\/ Almost always 16 void gClearScreen(CColor* color); void gDrawBitmap(CBitmap* bmp, int x, int y); void gDrawText(char* text, int x, int y, CColor* color);  bool inHasTouchScreen(); int inGetKeyState(); bool inIsAnyKeyPressed(); int inGetPointerX(); int inGetPointerY();  void gameStart(); void gameUpdate(); void gameDraw(); <\/code><\/pre>\n<p>  <\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">Win32<\/font><\/h2>\n<p>  <a name=\"3\"><\/a>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0436\u0435 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041d\u0430\u0447\u043d\u0451\u043c \u0441 Win32, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u043e \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u0438\u0433\u0440\u0443 \u043c\u043e\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u041f\u041a.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/793\/c3d\/234\/793c3d2347c5ac996ce22b94441e1eb1.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/793\/c3d\/234\/793c3d2347c5ac996ce22b94441e1eb1.png\"\/><\/div>\n<p>  \u041d\u0430 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0435 \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043e\u043a\u043d\u043e 240&#215;320, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 GAPI \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e-\u0443\u0441\u043a\u043e\u0440\u0435\u043d\u043d\u044b\u0439 OpenGL, \u0430 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0432\u043e\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438 GetAsyncKeyState. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u043e\u0447\u043a\u0438 \u0432\u0445\u043e\u0434\u0430, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u043a\u043d\u0430 \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 GL \u0438 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0443 \u043d\u0430\u0441 \u0442\u0430\u043a\u0430\u044f:<\/p>\n<pre><code class=\"cpp\">void gInit() { hwnd = CreateWindowA(\"STATIC\", \"2D Framework\", WS_VISIBLE | WS_SYSMENU, 0, 0, gGetScreenWidth(), gGetScreenHeight(), 0, 0, 0, 0); hPrimaryDC = GetDC(hwnd);  PIXELFORMATDESCRIPTOR pfd; ZeroMemory(&amp;pfd, sizeof(pfd));  if (!SetPixelFormat(hPrimaryDC, ChoosePixelFormat(hPrimaryDC, &amp;pfd), &amp;pfd)) { sysLogf(\"SetPixelFormat failed\\n\"); exit(-1); }  hGL = wglCreateContext(hPrimaryDC); wglMakeCurrent(hPrimaryDC, hGL);  sysLogf(\"Renderer: %s\\n\", glGetString(GL_RENDERER)); sysLogf(\"Vendor: %s\\n\", glGetString(GL_VENDOR)); sysLogf(\"Version: %s\\n\", glGetString(GL_VERSION));  glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);  glMatrixMode(GL_PROJECTION); glOrtho(0, gGetScreenWidth(), gGetScreenHeight(), 0, 0, 1); }<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"cpp\">void winMainLoop() { while (IsWindow(hwnd)) { MSG msg;  while (PeekMessageA(&amp;msg, hwnd, 0, 0, PM_REMOVE)) DefWindowProc(hwnd, msg.message, msg.wParam, msg.lParam);  gameUpdate(); gameDraw();  glFinish(); SwapBuffers(hPrimaryDC);  Sleep(1000 \/ 60); } }  int main(int argc, char** argv) { sysLogf(\"Portable 2D framework\\n\"); sysLogf(\"Version: \" VERSION \"\\n\");  gInit();  gameStart(); winMainLoop(); } <\/code><\/pre>\n<p>  \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0441\u043f\u0440\u0430\u0439\u0442\u043e\u0432 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u0430\u044f \u2014 OGL 1.0, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e FFP, \u0432\u0441\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u2014 \u044d\u0442\u043e 2 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u043a\u0432\u0430\u0434. \u0421\u043f\u0440\u0430\u0439\u0442 \u0437\u0430\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443, \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u0430\u0434\u0440\u044b \u0440\u0435\u044e\u0437\u0430\u0435\u0442\u0441\u044f \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u0430\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430. \u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u0441\u0435\u0433\u043e \u0440\u0435\u043d\u0434\u0435\u0440\u0435\u0440\u0430 \u2014 \u0442. \u0435. \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u00ab\u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a\u00bb, \u0431\u0435\u0437 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0430\u0442\u043b\u0430\u0441\u043e\u0432, \u0431\u043b\u0435\u043d\u0434\u0438\u043d\u0433\u0430 \u0446\u0432\u0435\u0442\u043e\u0432:<\/p>\n<pre><code class=\"cpp\">void gClearScreen(CColor* color) { float r = (float)color->r \/ 255; float g = (float)color->g \/ 255; float b = (float)color->b \/ 255;  glClearColor(r, g, b, 1.0f); glClear(GL_COLOR_BUFFER_BIT); }  #define GL_UNSIGNED_SHORT_5_6_5 0x8363 #define TEXTURE_COLORKEY 63519  void gPrepareBitmap(CBitmap* bmp) { GLuint tex[1]; glGenTextures(1, &amp;tex);  sysLogf(\"Uploading texture %dx%d\\n\", bmp->width, bmp->height);  unsigned char* data = (unsigned char*)malloc(bmp->width * bmp->height * 4);  \/\/ Quick endian flip &amp; color-space conversion for (int i = 0; i &lt; bmp->width * bmp->height; i++) { unsigned short pixel = *((unsigned short*)&amp;bmp->pixels[i * 2]);  float r = (float)(pixel &amp; 31) \/ 32; float g = (float)((pixel >> 5) &amp; 63) \/ 64; float b = (float)(pixel >> 11) \/ 32;  data[i * 4 + 2] = (unsigned char)(r * 255); data[i * 4 + 1] = (unsigned char)(g * 255); data[i * 4] = (unsigned char)(b * 255);  data[i * 4 + 3] = pixel == TEXTURE_COLORKEY ? 0 : 255; }  glBindTexture(GL_TEXTURE_2D, tex[0]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, bmp->width, bmp->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);  free(data);  bmp->_platData = tex[0]; }  void gDrawBitmap(CBitmap* bmp, int x, int y) { gDrawBitmapEx(bmp, x, y, 0, 0); }  void gDrawBitmapEx(CBitmap* bmp, int x, int y, CColor* colorKey, CColor* mulColor) { if (!bmp->_platData) gPrepareBitmap(bmp);  glBindTexture(GL_TEXTURE_2D, (GLuint)bmp->_platData);  glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex2i(x, y); glTexCoord2f(1, 0); glVertex2i(x + bmp->width, y); glTexCoord2f(1, 1); glVertex2i(x + bmp->width, y + bmp->height); glTexCoord2f(0, 1); glVertex2i(x, y + bmp->height); glEnd(); } <\/code><\/pre>\n<p>  \u0421 \u0432\u0432\u043e\u0434\u043e\u043c \u0442\u043e\u0436\u0435 \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e. \u0415\u0441\u0442\u044c \u0431\u0438\u043d\u0434\u0438\u043d\u0433 \u043a\u043d\u043e\u043f\u043e\u043a \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b \u043a \u043a\u043d\u043e\u043f\u043a\u0430\u043c \u043d\u0430 \u043a\u0435\u0439\u043f\u0430\u0434\u0435 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430. inGetKeyState \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0437\u0430 \u043a\u0430\u0434\u0440, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u041e\u0421 \u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043d\u0430\u0436\u0430\u0442\u044b\u0445 \u043a\u043d\u043e\u043f\u043e\u043a \u043d\u0430 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0435 \u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043d\u043e\u043f\u043e\u043a \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043a\u043d\u043e\u043f\u043e\u043a \u043d\u0430 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0435.<\/p>\n<pre><code class=\"cpp\">static int inKeyBinding[] = { VK_LEFT, KEY_LEFT, 'A', KEY_LEFT, VK_RIGHT, KEY_RIGHT, 'D', KEY_RIGHT, VK_UP, KEY_UP, 'W', KEY_UP, VK_DOWN, KEY_DOWN, 'S', KEY_DOWN, 'Q', KEY_LS, 'E', KEY_RS };  bool inHasTouchScreen() { return false; }  int inGetKeyState() { int result = 0;  for (int i = 0; i &lt; (sizeof(inKeyBinding) \/ sizeof(int)) \/ 2; i++) { if (GetAsyncKeyState(inKeyBinding[i * 2]) &amp; 0x8000) result |= inKeyBinding[i * 2 + 1]; }  return result; }  bool inIsAnyKeyPressed() { return inGetKeyState() != 0; }  int inGetPointerX() { return 0; }  int inGetPointerY() { return 0; }<\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/d7e\/a78\/321\/d7ea78321f07c848f4e24f6d6865836f.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/d7e\/a78\/321\/d7ea78321f07c848f4e24f6d6865836f.png\"\/><\/div>\n<p>  <\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">MiniJ<\/font><\/h2>\n<p>  <a name=\"4\"><\/a>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430 \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0439 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u2014 MRP. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u2014 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 API \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043f\u0440\u0430\u0439\u0442\u043e\u0432. \u0421\u0432\u044f\u0437\u0430\u043d\u043e \u044d\u0442\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0441\u043e\u0444\u0442\u0432\u0430\u0440\u043d\u044b\u0439 \u0431\u043b\u0438\u0442\u0442\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0434\u0430\u0436\u0435 \u0441 \u043f\u0440\u044f\u043c\u044b\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u043a \u0441\u043a\u0440\u0438\u043d\u0431\u0443\u0444\u0435\u0440\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0430 \u0432 \u0447\u0438\u043f\u0441\u0435\u0442\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u0431\u0443\u0444\u0435\u0440\u043e\u043c \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432 \u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0438:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/a11\/c87\/3f0\/a11c873f052e229ded3b258deb0eb94e.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/a11\/c87\/3f0\/a11c873f052e229ded3b258deb0eb94e.png\"\/><\/div>\n<p>  SDK \u0434\u043b\u044f MRE \u043c\u043e\u0436\u043d\u043e <a href=\"https:\/\/disk.yandex.ru\/d\/f4yy1OMCX0MkzQ\">\u043d\u0430\u0439\u0442\u0438 \u0437\u0434\u0435\u0441\u044c<\/a> (SKYSDK.zip): \u043e\u043d\u043e \u0443\u0436\u0435 \u043f\u0440\u043e\u043f\u0430\u0442\u0447\u0435\u043d\u043e \u043e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u043a\u0443\u043f\u043a\u0438 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438. MRP \u043d\u0435 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 10 \u043b\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0434\u0443\u043c\u0430\u044e, \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c Abandonware. \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 compiler\/mrpbuilder.NET1.exe. \u0417\u0430 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0435 SDK \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f 4pda AjlekcaHgp MejlbHukoB, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0437\u0434\u043e\u0431\u044b\u043b \u0438\u0445 \u043d\u0430 \u0432\u0441\u044f\u043a\u0438\u0445 csdn \u0438 \u0432\u044b\u043b\u043e\u0436\u0438\u043b \u0432 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \ud83d\ude42<\/p>\n<p>  \u0423 MRP \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u0431\u043e\u0440\u043a\u0438, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0445. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 MRP \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u043c\u0438 \u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u043c\u0438 \u0434\u0438\u0441\u043f\u043b\u0435\u0435\u0432, \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0436\u043c\u0435\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0432 \u043d\u0443\u0436\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442. \u0414\u0430\u0431\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043b\u043e\u043c\u0430\u0442\u044c, \u044f \u0437\u0430\u044e\u0437\u0430\u043b \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0435 \u043f\u0443\u0442\u0438:<\/p>\n<p>  <code>[information]<br \/>  projectname=game.mpr<br \/>  filename=game.mrp<br \/>  appname=ScrollShooter<br \/>  appid=30001<br \/>  version=100<br \/>  visible=1<br \/>  cpu=3<br \/>  vendor=monobogdan<br \/>  output=bin\\game.mrp<br \/>  description=ScrollShooter game by monobogdan<br \/>  include=D:\/SKYSDK\/include\/,D:\/SKYSDK\/include\/plugins\/<br \/>  config=mtk240<\/p>\n<p>  [config_mtk240]<br \/>  output=bin\\game.mrp<br \/>  bmp_mode=normal<br \/>  plat=mtk<br \/>  [files]<br \/>  file42 = platform\\plat_mrc.c<br \/>  file44 = game.c<br \/>  file45 = resources\\gamedata.c<br \/>  file46 = graphics.c<br \/>  <\/code><\/p>\n<p>  \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"bash\">mrpbuilder.net1.exe game.mpr<\/code><\/pre>\n<p>  \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f: <b>mrc_init<\/b> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0430 mrc_event \u043f\u0440\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f. \u0412\u0441\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u0430\u044f: \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0442\u0430\u0439\u043c\u0435\u0440 \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438\u0433\u0440\u044b \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0438\u0433\u0440\u044b:<\/p>\n<pre><code class=\"cpp\"> void mrc_draw(int32 data) { mrc_clearScreen(0, 0, 128);  gameUpdate(); gameDraw();  mrc_refreshScreen(0, 0, 240, 320); }  int32 mrc_init(void) { mrc_getScreenInfo(&amp;screenInfo);  gameStart();  \/\/ Allocate timer globalTimer = mrc_timerCreate(); mrc_timerStart(globalTimer, 1000 \/ 30, 0, mrc_draw, 1);  return MR_SUCCESS; }  int32 mrc_extRecvAppEvent(int32 app, int32 code, int32 param0, int32 param1) {         return MR_SUCCESS; } int32 mrc_extRecvAppEventEx(int32 code, int32 p0, int32 p1, int32 p2, int32 p3, int32 p4,int32 p5) {         return MR_SUCCESS; }   int32 mrc_pause(void) { return MR_SUCCESS; }   int32 mrc_resume(void) { return MR_SUCCESS; }   int32 mrc_exitApp(void) {  return MR_SUCCESS; }  <\/code><\/pre>\n<p>  \u0421 \u0432\u0432\u043e\u0434\u043e\u043c \u0442\u043e\u0436\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0435\u0442, \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043d\u043e\u043f\u043e\u043a \u043f\u0440\u0438\u043b\u0435\u0442\u0430\u044e\u0442 \u043a\u0430\u043a \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0432 mrc_event. \u041f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u043a\u0435\u0439\u043a\u043e\u0434\u044b MRE \u0432 \u043d\u0430\u0448\u0438 \u043a\u0435\u0439\u043a\u043e\u0434\u044b \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0438\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435:<\/p>\n<pre><code class=\"cpp\">int32 mrc_event(int32 ev, int32 p0, int32 p1) { int key = p0; int vKey = 0;  switch(key) { case MR_KEY_LEFT: vKey = KEY_LEFT; break; case MR_KEY_RIGHT: vKey = KEY_RIGHT; break; case MR_KEY_UP: vKey = KEY_UP; break; case MR_KEY_DOWN: vKey = KEY_DOWN; break;  case MR_KEY_SELECT: vKey = KEY_OK; break; case MR_KEY_SOFTLEFT: vKey = KEY_LS; break; case MR_KEY_SOFTRIGHT: vKey = KEY_RS; break; }  if(ev == MR_KEY_PRESS) keyState |= vKey;  if(ev == MR_KEY_RELEASE) keyState &amp;= ~vKey;  return MR_SUCCESS;  } <\/code><\/pre>\n<p>  \u041e\u043f\u044f\u0442\u044c \u0436\u0435, \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c MRP-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0434 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0439 \u043a\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 MRP \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a-\u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432. \u041b\u0438\u043d\u043a\u0435\u0440 \u0441\u043b\u0438\u043d\u043a\u0443\u0435\u0442 \u0432\u0430\u0448\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u043d\u043e \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0438\u0445 \u0432\u044b\u0437\u043e\u0432 \u0432\u044b\u0432\u0430\u043b\u0438\u0442\u0441\u044f \u0432 SIGSEGV \u0438 \u0441\u043e\u0444\u0442\u0440\u0435\u0441\u0435\u0442 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u0422\u0430\u043a\u0436\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0438\u0447\u0435\u0433\u043e \u0438\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u0438\u043a\u0430\u0445 (\u0442. \u0435. stdlib.h, string.h \u0438 \u0442. \u0434.), \u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f MRP \u0438 \u0434\u0435\u0444\u0430\u0439\u043d\u0438\u0442\u0441\u044f \u0432 mrc_base.h<\/p>\n<pre><code class=\"cpp\">void* sysAlloc(int len) { return mrc_malloc(len); }  void sysFree(void* ptr) { mrc_free(ptr); }  int sysRand() { mrc_sand(mrc_getUptime()); return mrc_rand(); } <\/code><\/pre>\n<p>  \u0427\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0437\u0430\u0449\u0438\u0442\u044b \u043f\u0430\u043c\u044f\u0442\u0438 \u0442\u043e\u043b\u043a\u043e\u043c \u043d\u0435\u0442. \u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u0430\u0434\u0430\u0435\u0442 \u0432 SIGSEGV \u0438\u043b\u0438 \u043f\u043e\u0440\u0442\u0438\u0442 \u043f\u0430\u043c\u044f\u0442\u044c \u2014 \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u0441\u0443\u0434\u044f \u043f\u043e \u0432\u0441\u0435\u043c\u0443, \u0440\u0435\u0431\u0443\u0442\u0438\u0442 Watchdog. \u0417\u0430\u0449\u0438\u0442\u044b \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0438\u043a\u0430\u043a\u043e\u0439, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u044f\u0434\u0440\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u0438 \u0447\u0438\u043f\u0441\u0435\u0442\u0430. <a href=\"https:\/\/habr.com\/ru\/users\/jpegqs\/\" class=\"user_link\">jpegqs<\/a>, \u043f\u043e\u043a\u0443\u043c\u0435\u043a\u0430\u0435\u043c \u043d\u0430\u0434 \u044d\u0442\u0438\u043c? \ud83d\ude42<\/p>\n<p>  \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0440\u0435\u043d\u0434\u0435\u0440\u0435\u0440\u0443. \u0422\u0443\u0442 \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0434\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, gClearScreen \u043e\u0447\u0438\u0449\u0430\u0435\u0442 \u044d\u043a\u0440\u0430\u043d, \u0430 gDrawBitmap \u0440\u0438\u0441\u0443\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0440\u0430\u0439\u0442 \u0441 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c \u043f\u0438\u043a\u0441\u0435\u043b\u044f RGB565. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 ROP \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f BM_TRANSPARENT \u2014 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, mrc_bitmapShowEx \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u0435\u0432\u044b\u0439 \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441\u043d\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u0438 \u0431\u0435\u0437 \u0430\u043b\u044c\u0444\u0430-\u0431\u043b\u0435\u043d\u0434\u0438\u043d\u0433\u0430.<\/p>\n<pre><code class=\"cpp\"> void gClearScreen(CColor* color) { mrc_clearScreen(color->r, color->g, color->b); }  void gDrawBitmap(CBitmap* bmp, int x, int y) { mrc_bitmapShowEx((uint16*)bmp->pixels, x, y, bmp->width, bmp->width, bmp->height, BM_TRANSPARENT, 0, 0); } <\/code><\/pre>\n<p>  \u0414\u0430, \u0432\u0441\u0451 \u0432\u043e\u0442 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e. \u0420\u0430\u043d\u0442\u0430\u0439\u043c \u0442\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0445 \u0434\u0435\u0432\u0430\u0439\u0441\u0430\u0445 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e.<\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">VXP<\/font><\/h2>\n<p>  <a name=\"5\"><\/a>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a VXP \u2014 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043d\u0435\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0439, \u0447\u0435\u043c MRP. \u041f\u043e\u0436\u0430\u043b\u0443\u0439, \u043d\u0430\u0447\u0430\u0442\u044c \u0441\u0442\u043e\u0438\u0442 \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e VXP \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0430\u0436 \u0432 \u0442\u0440\u0451\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445: MRE 1.0, MRE 2.0 \u0438 MRE 3.0. \u0412 MRE 2.0 \u0438 \u0432\u044b\u0448\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u043b\u044e\u0441\u043e\u0432 (\u0432 MRE 1.0 \u0442\u043e\u043b\u044c\u043a\u043e Plain C) \u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e GUI-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430, MRE 1.0 \u0436\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0433\u0443\u0439 \u0441\u0430\u043c\u043e\u043c\u0443. \u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0430 \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u043a\u043d\u043e\u043f\u043e\u0447\u043d\u044b\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u0432 \u0438 \u0441\u043c\u0430\u0440\u0442-\u0447\u0430\u0441\u0438\u043a\u043e\u0432 \u043d\u0430 \u0447\u0438\u043f\u0441\u0435\u0442\u0430\u0445 MediaTek, \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 6235 \u0438 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u043d\u0438\u044f 6261D. SDK \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c <a href=\"https:\/\/disk.yandex.ru\/d\/npwVPOtcXQ2d2Q\">\u0432\u043e\u0442 \u0437\u0434\u0435\u0441\u044c (\u0441\u043c MRE_SDK_3.0)<\/a>.<\/p>\n<p>  VXP \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u0431\u043e\u043b\u0435\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0435\u043d \u0447\u0435\u043c MRE, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u044b \u0441 \u0447\u0438\u043f\u0441\u0435\u0442\u0430\u043c\u0438 MediaTek. \u041d\u043e \u0447\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0435 \u2014 \u0435\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0443\u0430\u0440\u0442\u0443 \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445 \u043b\u0438\u0431\u043e \u043a\u043e\u0441\u0442\u044b\u043b\u0435\u0439! \u0422\u043e \u0435\u0441\u0442\u044c, \u0435\u0441\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c GPIO-\u043c\u043e\u0441\u0442 \u043d\u0430 \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0439 ESP32, \u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043c\u043e\u0449\u043d\u044b\u0439 \u041c\u041a \u0441 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u043e\u0439, \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438, \u0434\u0438\u0441\u043f\u043b\u0435\u0435\u043c, \u0437\u0432\u0443\u043a\u043e\u043c \u0438 \u0442. \u0434. \u0417\u0432\u0443\u0447\u0438\u0442 \u043d\u0435 \u0445\u0438\u043b\u043e, \u0434\u0430? \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u0438 \u043a BT, \u0438 \u043a GPRS, \u0438 \u043a SMS \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445 \u043b\u0438\u0431\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/26e\/400\/488\/26e4004881d35515a3a20160377c7052.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/26e\/400\/488\/26e4004881d35515a3a20160377c7052.png\"\/><\/div>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u0431\u043e\u0447\u043a\u0435 \u043c\u0451\u0434\u0430 \u043d\u0430\u0448\u043b\u0430\u0441\u044c \u0438 \u043b\u043e\u0436\u043a\u0430 \u0434\u0451\u0433\u0442\u044f: \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 MRE-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u043a\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0438 \u043a\u0440\u044f\u043a\u0430\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u0442\u0430\u0440\u044b\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 ADS, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e C89 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0432 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u0446\u0438\u043a\u043b\u0430 \u0438\u043b\u0438 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043d\u0430\u0447\u0430\u043b\u0435, \u043a\u0430\u043a \u0432 Pascal). ADS \u0443\u0436\u0435 \u0432\u0440\u043e\u0434\u0435 \u043a\u0430\u043a Abandonware, \u0442\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u0440\u043e\u0434\u0435 \u043d\u0435 \u043d\u0430\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u2026 \u043d\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e.<\/p>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u0435\u0432\u0430\u0439\u0441\u0430\u0445 (\u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c, \u0444\u0438\u0440\u043c\u0435\u043d\u043d\u044b\u0445 Nokia \u0430-\u043b\u044f 225), \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 \u0443 \u0432\u0441\u0435\u0445 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u043e\u0432, \u043b\u0438\u0431\u043e \u0435\u0441\u043b\u0438 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0439, \u0442\u043e \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u043a \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c\u0443 IMSI.<\/p>\n<p>  \u041a \u0442\u043e\u043c\u0443 \u0436\u0435, \u043a\u0430\u0436\u0434\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435, \u0441\u043a\u043e\u043b\u044c\u043a\u043e Heap-\u043f\u0430\u043c\u044f\u0442\u0438 \u0435\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c. \u041e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u2014 ~500\u041a\u0431, \u0442\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0441\u044f \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0430 \u0432\u0441\u0435\u0445 MRE-\u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430\u0445.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/b65\/bb8\/2cd\/b65bb82cd315b196ee6abc5b2308e883.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/b65\/bb8\/2cd\/b65bb82cd315b196ee6abc5b2308e883.png\"\/><\/div>\n<p>  \u0417\u0430\u0442\u043e \u0443 VXP \u0435\u0441\u0442\u044c \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u044b\u0439 \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u043f\u043e\u0434 Windows. \u041d\u043e \u0437\u0430\u0447\u0435\u043c \u043e\u043d \u043d\u0430\u043c, \u0435\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u043f\u043e\u0440\u0442 \u0438\u0433\u0440\u044b \u043f\u043e\u0434 Win32 \u0435\u0441\u0442\u044c? \ud83d\ude42<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/5fb\/c57\/f99\/5fbc57f9967c379af31955195551ab11.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/5fb\/c57\/f99\/5fbc57f9967c379af31955195551ab11.png\"\/><\/div>\n<p>  \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u0442\u043e\u0447\u043a\u0438 \u0432\u0445\u043e\u0434\u0430, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u043a\u043e\u0438\u0445 \u0431\u044b\u0432\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e. \u0414\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0432\u043e\u0434\u0430 \u0438 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0432\u0441\u0435\u0433\u043e \u0442\u0440\u0438: sysevt (\u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043e\u043a\u043d\u0430), keyboard (\u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430. \u0415\u0441\u0442\u044c \u043f\u043e\u043b\u043d\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 QWERTY-\u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440), pen (\u0442\u0430\u0447\u0441\u043a\u0440\u0438\u043d).<\/p>\n<pre><code class=\"cpp\">void vm_main(void) { layers[0] = -1; gameStart();  vm_reg_sysevt_callback(handle_sysevt); vm_reg_keyboard_callback(handle_keyevt); vm_reg_pen_callback(handle_penevt); } <\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e MRE-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u0444\u043e\u043d\u0435, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442\u044c \u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0438 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u044e \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u0427\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u0443\u0441\u0432\u043e\u0438\u0442\u044c \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u2014 <b>\u0432 MRE \u043d\u0435\u0442 \u043f\u043e\u043d\u044f\u0442\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0438 \u0437\u0430\u0449\u0438\u0442\u044b \u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u0430\u043a \u043d\u0430 \u041f\u041a \u0438 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0445 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u0430\u0445. \u041b\u044e\u0431\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043f\u043e\u0440\u0442\u0438\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u0438\u043b\u0438 \u0441\u0442\u0435\u043a \u041e\u0421, \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u043b\u0438 \u0432\u0430\u0448\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0435 \u00ab\u0443\u0431\u0438\u0440\u0430\u0435\u0442\u00bb \u043f\u043e\u0441\u043b\u0435 \u0441\u0435\u0431\u044f, \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0441\u0442\u0430\u043d\u0443\u0442\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0434\u0443\u0442 \u043a \u0437\u0430\u0432\u0438\u0441\u0430\u043d\u0438\u044e<\/b>. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, WatchDog \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u0432\u043e\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u0432 \u0447\u0443\u0432\u0441\u0442\u0432\u043e (\u0441\u043e\u0444\u0442\u0440\u0435\u0441\u0435\u0442\u043e\u043c) \u0437\u0430 1-2 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u041d\u043e \u043a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 MRE, \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439 \u0431\u043e\u043d\u0443\u0441: \u043f\u0440\u044f\u043c\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c \u0447\u0438\u043f\u0441\u0435\u0442\u0430 \ud83d\ude42<\/p>\n<pre><code class=\"cpp\">void handle_sysevt(VMINT message, VMINT param) { switch (message) { case VM_MSG_CREATE: case VM_MSG_ACTIVE: layers[0] = vm_graphic_create_layer(0, 0,  vm_graphic_get_screen_width(), vm_graphic_get_screen_height(), -1);  vm_graphic_set_clip(0, 0,  vm_graphic_get_screen_width(),  vm_graphic_get_screen_height());  screenBuf = vm_graphic_get_layer_buffer(layers[0]); gTimer = vm_create_timer(16, onTimerTick);  break;  case VM_MSG_PAINT:  break;  case VM_MSG_INACTIVE: case VM_MSG_QUIT: if( layers[0] != -1 ) vm_graphic_delete_layer(layers[0]);  vm_delete_timer(gTimer);  break; } } <\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0441 \u043a\u043d\u043e\u043f\u043e\u043a. \u0422\u0443\u0442 \u0432\u0441\u0451 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0442\u0430\u043a\u0436\u0435, \u043a\u0430\u043a \u0438 \u043d\u0430 MRE, \u043b\u0438\u0448\u044c \u0438\u043c\u0435\u043d\u0430 \u0434\u0435\u0439\u0444\u0430\u043d\u043e\u0432 \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0438\u0441\u044c \ud83d\ude42<\/p>\n<pre><code class=\"cpp\">void handle_keyevt(VMINT event, VMINT keycode) { int vKey = 0;  switch(keycode) { case VM_KEY_LEFT: vKey = KEY_LEFT; break; case VM_KEY_RIGHT: vKey = KEY_RIGHT; break; case VM_KEY_UP: vKey = KEY_UP; break; case VM_KEY_DOWN: vKey = KEY_DOWN; break;  case VM_KEY_OK: vKey = KEY_OK; break; case VM_KEY_LEFT_SOFTKEY: vKey = KEY_LS; break; case VM_KEY_RIGHT_SOFTKEY: vKey = KEY_RS; break; }  if(event == VM_KEY_EVENT_DOWN) keyState |= vKey;  if(event == VM_KEY_EVENT_UP) keyState &amp;= ~vKey; } <\/code><\/pre>\n<p>  \u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e, \u043a \u0433\u0440\u0430\u0444\u0438\u043a\u0435! \u041f\u043e\u0436\u0430\u043b\u0443\u0439, \u0441\u0442\u043e\u0438\u0442 \u0441\u0440\u0430\u0437\u0443 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0431\u043e\u043b\u0435\u0435 20-30 FPS \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0432\u044b \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u0434\u0430\u0436\u0435 \u0441 \u043f\u0440\u044f\u043c\u044b\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c \u043a \u0444\u0440\u0435\u0439\u043c\u0431\u0443\u0444\u0435\u0440\u0443. \u041f\u043e\u0445\u043e\u0436\u0435, \u044d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0432 MRE \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0437\u0430\u043c\u043e\u0440\u043e\u0447\u0435\u043d\u043d\u0430\u044f \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0430\u043b\u044c\u0444\u0430-\u043a\u0430\u043d\u0430\u043b\u0430 (\u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438\/\u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432, \u0441\u0430\u043c \u043f\u0438\u043a\u0441\u0435\u043b\u044c\u0444\u043e\u0440\u043c\u0430\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 RGB565) \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u043b\u043e\u0435\u0432. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043f\u043e\u0445\u043e\u0436\u0435 \u0435\u0441\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0434\u0438\u0441\u043f\u043b\u0435\u044f. <\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/65c2b681a5e031d47d42efcf\" data-style=\"\" id=\"65c2b681a5e031d47d42efcf\" width=\"\"><\/div>\n<\/div>\n<p>  <i><font color=\"#4682B4\">\u0421\u043e\u0444\u0442\u0432\u0430\u0440\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434 \u0441\u043f\u0440\u0430\u0439\u0442\u043e\u0432<\/font><\/i><\/p>\n<p>  \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e, MRE \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0442\u043e, \u0447\u0442\u043e \u0432\u0441\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435\u2026 GIF. \u0414\u0430, \u0432\u0435\u0441\u044c\u043c\u0430 \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440. \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0439, \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0431\u043b\u0438\u0442\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0437 RAM. \u0412\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u043d\u044e\u0430\u043d\u0441 \u2014 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<pre><code class=\"cpp\">void vm_graphic_blt(     VMBYTE * dst_disp_buf,      VMINT x_dest,      VMINT y_dest,      VMBYTE * src_disp_buf,      VMINT x_src,      VMINT y_src,      VMINT width,      VMINT height,      VMINT frame_index ); <\/code><\/pre>\n<p>  dst_disp_buf \u2014 \u044d\u0442\u043e \u0446\u0435\u043b\u0435\u0432\u043e\u0439 RGB565-\u0431\u0443\u0444\u0435\u0440. \u041b\u043e\u0433\u0438\u0447\u043d\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c, \u0447\u0442\u043e \u0438 src_disp_buf \u2014 \u0442\u043e\u0436\u0435 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 RGB565-\u0431\u0443\u0444\u0435\u0440! \u041d\u043e \u043a\u0430\u043a \u0431\u044b \u043d\u0435 \u0442\u0430\u043a. \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043a\u0440\u0430\u0439\u043d\u0435 \u0441\u043a\u0443\u0434\u043d\u0430\u044f, \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0441\u0438\u0434\u0435\u0442\u044c \u0438 \u043f\u043e\u043a\u0443\u043c\u0435\u043a\u0430\u0442\u044c, \u043e\u0442\u043a\u0443\u0434\u0430 \u0432 \u043e\u0431\u044b\u0447\u043d\u043e\u043c 565 \u0431\u0443\u0444\u0435\u0440\u0435 \u0432\u043e\u0437\u044c\u043c\u0435\u0442\u0441\u044f \u0438\u043d\u0434\u0435\u043a\u0441 \u043a\u0430\u0434\u0440\u0430. \u0421 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u043e\u0439 \u043f\u0440\u0438\u0448\u0451\u043b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c 4pda Ximik_Boda \u2014 \u043e\u043d \u0441\u043a\u0438\u043d\u0443\u043b \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0434\u0451\u0442 \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u0430\u0434\u0440\u0430. \u0412 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0435 \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0440\u043e\u0432\u043d\u044b\u043c \u0441\u0447\u0435\u0442\u043e\u043c \u043d\u0438\u0447\u0435\u0433\u043e!<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/930\/2c6\/452\/9302c6452be44922f8cf2787f1c7ac23.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/930\/2c6\/452\/9302c6452be44922f8cf2787f1c7ac23.png\"\/><\/div>\n<p>  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b \u0441\u043e\u0444\u0442\u043e\u0432\u044b\u0439 \u0431\u043b\u0438\u0442\u0442\u0438\u043d\u0433, \u043d\u043e \u043e\u043d \u0431\u0435\u0437\u0431\u043e\u0436\u043d\u043e \u043b\u0430\u0433\u0430\u043b. \u041c\u043d\u0435 \u0441\u0442\u0430\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 blt \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0438\u2026 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043e\u0442\u043f\u0430\u043b\u0438 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u044f \u043f\u043e\u0433\u043b\u044f\u0434\u0435\u043b \u0432 \u0414\u0428 \u0447\u0438\u043f\u0441\u0435\u0442\u0430: \u0442\u0443\u0442 \u0435\u0441\u0442\u044c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0439 \u0431\u043b\u0438\u0442\u0442\u0438\u043d\u0433. \u0418 \u0434\u0430\u0436\u0435 \u0441 \u043d\u0438\u043c \u0434\u0435\u0432\u0430\u0439\u0441 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0434\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 20FPS!<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/post_images\/fcd\/b3f\/055\/fcdb3f055e799332cf0f0c5521506cd3.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/fcd\/b3f\/055\/fcdb3f055e799332cf0f0c5521506cd3.png\"\/><\/div>\n<p>  \u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0448\u0443\u0441\u0442\u0440\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0438, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u0430\u043d\u0432\u0430\u0441 (\u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438, Bitmap \u0432 MRE), \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u043a \u043d\u0435\u043c\u0443 layer, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0431\u0443\u0444\u0435\u0440 \u0441\u043b\u043e\u044f \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0443\u0434\u0430 \u043d\u0430\u0448\u0443 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443. \u0414\u0430, \u0432\u043e\u0442 \u0442\u0430\u043a \u0432\u043e\u0442 \u0437\u0430\u043c\u043e\u0440\u043e\u0447\u0435\u043d\u043d\u043e:<\/p>\n<pre><code class=\"cpp\">void gPrepareBitmap(CBitmap* bmp) { VMINT cnvs = vm_graphic_create_canvas(bmp->width, bmp->height); VMINT layer = vm_graphic_create_layer_ex(0, 0, bmp->width, bmp->height, VM_COLOR_888_TO_565(255, 0, 255), VM_BUF, vm_graphic_get_canvas_buffer(cnvs)); memcpy(vm_graphic_get_layer_buffer(layer), bmp->pixels, bmp->width * bmp->height * 2);  vm_graphic_canvas_set_trans_color(cnvs, VM_COLOR_888_TO_565(255, 0, 255));  bmp->_platData = (void*)cnvs; }  void gDrawBitmap(CBitmap* bmp, int x, int y) { int i, j; if(!bmp->_platData) gPrepareBitmap(bmp);  vm_graphic_blt(screenBuf, x, y, vm_graphic_get_canvas_buffer((VMINT)bmp->_platData), 0, 0, bmp->width, bmp->height, 1); }<\/code><\/pre>\n<p>  \u0418 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0432\u0441\u0451 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0448\u0443\u0441\u0442\u0440\u043e \ud83d\ude42<br \/>  \u0412 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u043c \u0436\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u0430\u044f. \u0414\u0430, \u0431\u0435\u0437 \u0431\u043e\u043b\u044f\u0447\u0435\u043a \u043d\u0435 \u043e\u0431\u043e\u0448\u043b\u043e\u0441\u044c, \u043d\u043e \u0432\u0441\u0451 \u0436\u0435 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u044b \u0432\u043f\u043e\u043b\u043d\u0435 \u0441\u0435\u0431\u0435 \u0435\u0441\u0442\u044c.<\/p>\n<p>  \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u0438\u0433\u0440\u044b.<\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u041f\u0438\u0448\u0435\u043c \u0433\u0435\u0439\u043c\u043f\u043b\u0435\u0439<\/font><\/h2>\n<p>  <a name=\"6\"><\/a>\u0420\u0430\u043d\u0442\u0430\u0439\u043c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u043f\u0438\u0441\u0430\u0442\u044c \u0438\u0433\u0440\u0443\u0448\u043a\u0443. \u0425\u043e\u0442\u044c \u043f\u0438\u0448\u0435\u043c \u043c\u044b \u043d\u0430 Plain-C, \u044f \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e +- \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439, \u0441\u0442\u0435\u0439\u0442\u043e\u0432 \u0438 \u0442. \u043f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u0443 \u043d\u0430\u0441 \u0441\u0442\u0430\u043d\u0435\u0442 <b>CWorld<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u0440\u0430\u043d\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043d\u0430 \u043f\u0443\u043b\u044b \u0441 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u0432 \u0441\u0446\u0435\u043d\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u0433\u0440\u043e\u043a\u0430 \u0438 \u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435:<\/p>\n<pre><code class=\"cpp\">typedef struct { CPlayer player;  int nextSpawn; \/\/ In ticks  CEnemy* enemyPool[ENEMY_POOL_SIZE]; CProjectile* projectilePool[PROJECTILE_POOL_SIZE]; } CWorld; <\/code><\/pre>\n<p>  \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u0442\u0435\u0439\u0442\u043e\u0432 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u0430\u044f \u2014 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u043c\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e. \u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u0432 \u0433\u043b\u0430\u0432\u043d\u043e\u043c \u043c\u0435\u043d\u044e \u043d\u0430 \u00ab\u0441\u0442\u0430\u0440\u0442\u00bb, \u043d\u0430\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0438\u0440 \u0437\u0430\u043d\u043e\u0432\u043e \u0438 \u043d\u0430\u0447\u0430\u0442\u044c \u0433\u0435\u0439\u043c\u043f\u043b\u0435\u0439, \u043f\u0440\u0438 \u0441\u043c\u0435\u0440\u0442\u0438 \u0438\u0433\u0440\u043e\u043a\u0430 \u2014 \u0437\u0430\u043a\u0438\u043d\u0443\u0442\u044c \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u043d\u044e. \u0421\u0442\u0435\u0439\u0442\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u0442\u0440\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438: \u043f\u0435\u0440\u0435\u0445\u043e\u0434 (\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f), \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430.<\/p>\n<pre><code class=\"cpp\">typedef void(CGameStateCallback)();<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043d\u043e\u0432\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u043e\u0432, \u0442\u043e \u0432\u0432\u043e\u0434\u0438\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 CEnemyClass, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0443\u044e \u0432\u0440\u0430\u0433\u043e\u0432 \u0438 \u0438\u0445 \u0444\u043b\u0430\u0433\u0438 \u2014 \u043c\u043e\u0433\u0443\u0442 \u043b\u0438 \u043e\u043d\u0438 \u0441\u0442\u0440\u0435\u043b\u044f\u0442\u044c \u043f\u043e \u0438\u0433\u0440\u043e\u043a\u0443 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043b\u0435\u0442\u044f\u0442 \u0432\u043d\u0438\u0437 (\u0430\u0441\u0442\u0435\u0440\u043e\u0438\u0434\u044b), \u043a\u0430\u043a \u043e\u043d\u0438 \u043f\u0435\u0440\u0435\u0434\u0432\u0438\u0433\u0430\u044e\u0442\u0441\u044f (\u0437\u0438\u0433\u0437\u0430\u0433\u0430\u043c\u0438 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440) \u0438 \u0442. \u043f.<\/p>\n<pre><code class=\"cpp\">typedef struct { CBitmap* sprite;  int speed;  int maxHealth; int flags; int projectileDamage; int contactDamage; } CEnemyClass;  typedef struct { CEnemyClass* _class;  int health; int nextAttack; int x, y; } CEnemy;          \/\/ Asteroid enemyClasses[0].sprite = &amp;sprEnemy1; enemyClasses[0].flags = ENEMY_FLAG_NONE; enemyClasses[0].maxHealth = 45; enemyClasses[0].contactDamage = 15; enemyClasses[0].speed = 2;  \/\/ Regular unit enemyClasses[1].sprite = 0; enemyClasses[1].flags = ENEMY_FLAG_CAN_SHOOT; enemyClasses[1].contactDamage = 20; enemyClasses[1].projectileDamage = 20;  \/\/ ZigZag shooter enemyClasses[2].sprite = 0; enemyClasses[2].flags = ENEMY_FLAG_CAN_SHOOT | ENEMY_FLAG_ZIG_ZAG_MOVEMENT; enemyClasses[2].contactDamage = 20; enemyClasses[2].projectileDamage = 10; <\/code><\/pre>\n<p>  \u0410 \u0442\u0430\u043a\u0436\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0438\u0433\u0440\u043e\u043a\u0430:<\/p>\n<pre><code class=\"cpp\">typedef struct { int health; int frags; int score;  int speed;  int nextAttack; int x, y; } CPlayer; <\/code><\/pre>\n<p>  \u0412\u0441\u0451! \u0414\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0433\u0440\u044b \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \ud83d\ude42<br \/>  \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0438. \u0412\u043e\u043e\u0431\u0449\u0435, \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440 \u0432 \u0438\u0433\u0440\u0430\u0445 \u0434\u043b\u044f \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u043b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435. Heap&#8217;\u0430 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u0430\u043b\u043e (~600\u041a\u0431), \u0434\u0430 \u0438 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043a\u0430\u043a \u044d\u0442\u043e\u0442 \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d, \u0435\u0441\u0442\u044c \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440 \u0438 \u043a\u0443\u0447\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u041e\u0421.<\/p>\n<p>  \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u0451\u0442\u0430 \u043a\u043e\u0440\u0430\u0431\u043b\u0438\u043a\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0441\u0442\u0440\u0435\u043b\u043a\u0438 \u0438 \u043d\u0435 \u0443\u043b\u0435\u0442\u0430\u0442\u044c \u0437\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u044d\u043a\u0440\u0430\u043d\u0430, \u0430 \u0435\u0449\u0451 \u0434\u043b\u044f \u043a\u0440\u0430\u0441\u043e\u0442\u044b \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u00ab\u0432\u044b\u043b\u0435\u0442\u0430\u0442\u044c\u00bb \u0438\u0437 \u043d\u0438\u0436\u043d\u0435\u0439 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u044d\u043a\u0440\u0430\u043d\u0430 \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u0438\u0433\u0440\u044b:<\/p>\n<pre><code class=\"cpp\">        \/\/ Player update int keys = inGetKeyState(); int horizInput = 0;  if (keys &amp; KEY_LEFT) horizInput = -1;  if (keys &amp; KEY_RIGHT) horizInput = 1;  if(world.player.y > gGetScreenHeight() - sprPlayer.height - 16) world.player.y -= world.player.speed;  world.player.x += horizInput * world.player.speed; world.player.x = clamp(world.player.x, 0, gGetScreenWidth() - sprPlayer.width); <\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u0443\u043b\u0430\u043c \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438. \u041a\u0430\u043a \u0432\u044b \u0443\u0436\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u043b\u0438, \u0438\u0445 \u0432\u0441\u0435\u0433\u043e \u0434\u0432\u0430 \u2014 \u0432\u0440\u0430\u0433\u0438 \u0438 \u043b\u0435\u0442\u044f\u0449\u0438\u0435 \u0441\u043d\u0430\u0440\u044f\u0434\u044b. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u043f\u0430\u0432\u043d\u0430 \u0432\u0440\u0430\u0433\u043e\u0432\/\u0441\u043d\u0430\u0440\u044f\u0434\u043e\u0432 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u0430\u044f: \u043c\u044b \u043e\u0431\u0445\u043e\u0434\u0438\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043f\u0443\u043b\u0430, \u0435\u0441\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0435-\u043d\u0443\u043b\u0435\u0432\u043e\u0439, \u0437\u043d\u0430\u0447\u0438\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u0432\u0441\u0451 \u0435\u0449\u0451 \u0436\u0438\u0432 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0446\u0435\u043d\u0435. \u0415\u0441\u043b\u0438 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u2014 \u0437\u043d\u0430\u0447\u0438\u0442 \u044f\u0447\u0435\u0439\u043a\u0430 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u0430 \u0438 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0441\u043f\u0430\u0432\u043d\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442:<\/p>\n<pre><code class=\"cpp\">CEnemy* spawnEnemy(CEnemyClass* _class) { int i;  for (i = 0; i &lt; sizeof(world.enemyPool) \/ sizeof(CEnemy*); i++) { CEnemy* enemy;  if (world.enemyPool[i]) continue;  enemy = (CEnemy*)sysAlloc(sizeof(CEnemy)); memset(enemy, 0, sizeof(CEnemy)); enemy->_class = _class; enemy->health = _class->maxHealth; enemy->x = randRange(0, gGetScreenWidth() - _class->sprite->width); enemy->y = randRange(-_class->sprite->height * 4, -_class->sprite->height);   return world.enemyPool[i] = enemy; }  return 0; } <\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u043e\u0431\u0445\u043e\u0434\u0435 \u043f\u0443\u043b\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u0430\u0434\u0440\u0430, \u043c\u044b \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438 \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f <b>Think<\/b> \u0432\u0435\u0440\u043d\u0443\u043b\u0430 true, \u0437\u043d\u0430\u0447\u0438\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u0438 \u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c:<\/p>\n<pre><code class=\"cpp\">        \/\/ Enemy update for (i = 0; i &lt; sizeof(world.enemyPool) \/ sizeof(CEnemy*); i++) { if (world.enemyPool[i]) { if (enemyThink(world.enemyPool[i])) { sysFree(world.enemyPool[i]); world.enemyPool[i] = 0; } } } <\/code><\/pre>\n<p>  \u0410 \u0432\u043e\u0442 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f Think:<\/p>\n<pre><code class=\"cpp\">\/\/ If returns true, then enemy should be destroyed bool enemyThink(CEnemy* enemy) { enemy->y += enemy->_class->speed;  if (enemy->y > gGetScreenHeight() || enemy->health &lt;= 0) return true;  return false; } <\/code><\/pre>\n<p>  \u041d\u043e \u043a\u043e\u0440\u0430\u0431\u043b\u0438\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0436\u0435 \u043e\u0442\u043a\u0443\u0434\u0430-\u0442\u043e \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f! \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f nextSpawn, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0442\u0438\u043f \u0441\u043f\u0430\u0432\u043d\u0435\u0440\u0430 \u2014 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u0438\u043b\u0438 \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u0438\u043a\u043e\u0432):<\/p>\n<pre><code class=\"cpp\">        world.nextSpawn--;  if (world.nextSpawn &lt; 0) { \/\/ randRange(0, 3) CEnemy* enemy = spawnEnemy(&amp;enemyClasses[0]);  world.nextSpawn = randRange(40, 70); } <\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: \u043c\u044b \u0443\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0435\u0442\u0430\u0442\u044c \u0438 \u043f\u043e\u0443\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0432\u0440\u0430\u0436\u0435\u0441\u043a\u0438\u0445 \u043a\u043e\u0440\u0430\u0431\u043b\u0438\u043a\u043e\u0432! <\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/65c2c91dee339fd48bbd06e2\" data-style=\"\" id=\"65c2c91dee339fd48bbd06e2\" width=\"\"><\/div>\n<\/div>\n<p>\u041d\u043e \u0434\u043b\u044f \u0438\u0433\u0440\u044b \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043a\u0430 \u043c\u0430\u043b\u043e\u0432\u0430\u0442\u043e. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u0440\u0435\u043b\u044f\u0442\u044c \u043b\u0430\u0437\u0435\u0440\u0430\u043c\u0438! \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043e\u0431\u0445\u043e\u0434 \u043f\u0443\u043b\u0430 \u0441\u043d\u0430\u0440\u044f\u0434\u043e\u0432 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u043d\u0430 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u0441\u043f\u0430\u0432\u043d\u0435\u043d\u043d\u044b\u0439 \u0432\u0440\u0430\u0436\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u0440\u0430\u0431\u043b\u0438\u043a: \u0435\u0441\u043b\u0438 \u0441\u043d\u0430\u0440\u044f\u0434 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u043a\u043e\u0440\u0430\u0431\u043b\u0438\u043a\u043e\u043c, \u0442\u043e \u043c\u044b \u043e\u0442\u043d\u0438\u043c\u0435\u043c \u0443 \u043a\u043e\u0440\u0430\u0431\u043b\u0438\u043a\u0430 HP, \u0430 \u0441\u043d\u0430\u0440\u044f\u0434 \u2014 \u0437\u0430\u0434\u0435\u0441\u043f\u0430\u0432\u043d\u0438\u043c. \u0415\u0441\u043b\u0438 \u0443 \u043a\u043e\u0440\u0430\u0431\u043b\u0438\u043a\u0430 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043c\u0435\u043d\u044c\u0448\u0435 \u0438\u043b\u0438 0 HP, \u0442\u043e \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043a\u0430\u0434\u0440\u0435 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0443\u0431\u0440\u0430\u043d \u0438\u0437 \u0441\u0446\u0435\u043d\u044b.<\/p>\n<pre><code class=\"cpp\">\/\/ Projectile update for (i = 0; i &lt; sizeof(world.projectilePool) \/ sizeof(CProjectile*); i++) { if (world.projectilePool[i]) { world.projectilePool[i]->y += world.projectilePool[i]->dir * world.projectilePool[i]->speed;  for (j = 0; j &lt; sizeof(world.enemyPool) \/ sizeof(CEnemy*); j++) { if (world.enemyPool[j]) { if (aabbTest(world.projectilePool[i]->x, world.projectilePool[i]->y, sprLaser.width, sprLaser.height,  world.enemyPool[j]->x, world.enemyPool[j]->y, world.enemyPool[j]->_class->sprite->width, world.enemyPool[j]->_class->sprite->height)) { world.enemyPool[j]->health -= world.projectilePool[i]->damage;  sysFree(world.projectilePool[i]); world.projectilePool[i] = 0; break; } } } } } <\/code><\/pre>\n<p>  <\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/65c2c91d2331bb9d718e47fa\" data-style=\"\" id=\"65c2c91d2331bb9d718e47fa\" width=\"\"><\/div>\n<\/div>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0442\u0440\u0435\u043b\u044c\u0431\u044b \u0442\u043e\u0436\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0438 \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u0430\u0439\u043c\u0435\u0440\u0430:<\/p>\n<pre><code class=\"cpp\">         if (keys &amp; KEY_OK &amp;&amp; world.player.nextAttack &lt; 0) { spawnProjectile(world.player.x + (sprPlayer.width \/ 2), world.player.y, -1, 15, 35); world.player.nextAttack = 15; }          world.player.nextAttack--; <\/code><\/pre>\n<p>  \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/65c2c91d315cc3d4a1c74357\" data-style=\"\" id=\"65c2c91d315cc3d4a1c74357\" width=\"\"><\/div>\n<\/div>\n<p>\u0423\u0436\u0435 \u0447\u0442\u043e-\u0442\u043e \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u0449\u0435\u0435 \u0438\u0433\u0440\u0443! \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043b\u0438\u0448\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0434\u0441\u0447\u0435\u0442 \u043e\u0447\u043a\u043e\u0432, \u043c\u0435\u043d\u044e\u0448\u043a\u0443, \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0438\u0434\u044b \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u043e\u0432, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0431\u043e\u043d\u0443\u0441\u044b \u0438 \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0433\u043e\u0442\u043e\u0432\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0430\u044f \u0430\u0440\u043a\u0430\u0434\u0430. \u0412 \u0446\u0435\u043b\u043e\u043c, \u0432\u044b\u0448\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u0445 2D-\u0438\u0433\u0440 \u043d\u0430 Plain C. \u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u0431\u0430\u0437\u043e\u0439 \u0438 \u0434\u043b\u044f \u0432\u0430\u0448\u0438\u0445 \u0438\u0433\u0440: \u0432 \u0442\u0435\u043c\u0435 \u043e \u043a\u0438\u0442\u0430\u0445 \u043d\u0430 4pda \u044f \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b \u043d\u0435\u043c\u0430\u043b\u043e \u043b\u044e\u0434\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e \u043d\u0435 \u0437\u043d\u0430\u043b\u0438, \u0441 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0430\u0442\u044c.<\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0427\u0442\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c?<\/font><\/h2>\n<p>  <a name=\"6\"><\/a>\u041d\u043e \u0431\u0435\u0437 \u0442\u0435\u0441\u0442\u043e\u0432 \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043d\u0435 \u0431\u044b\u043b \u0431\u044b \u0442\u0430\u043a\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c! \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c \u0438\u0433\u0440\u0443 \u043d\u0430 \u0434\u0432\u0443\u0445 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430\u0445, \u043a\u0430\u043a \u0432\u044b \u0443\u0436\u0435 \u0434\u043e\u0433\u0430\u0434\u0430\u043b\u0438\u0441\u044c, \u043e\u0434\u0438\u043d \u2014 Nokla TV E71, \u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u2014 \u043a\u043b\u043e\u043d Nokia 6700, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0430\u0440\u0438\u043b \u043c\u043d\u0435 \u043c\u043e\u0439 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u041d\u0438\u043a\u0438\u0442\u0430.<\/p>\n<p>  \u041d\u0430 TV E71 \u0438\u0433\u0440\u0430 \u0438\u0434\u0451\u0442 \u043d\u0435 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0447\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u0434\u0440\u043e. \u041a\u0430\u0434\u0440\u043e\u0432 15 \u0442\u043e\u0447\u043d\u043e \u0435\u0441\u0442\u044c, \u0447\u0442\u043e, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 240&#215;320, \u0432\u0435\u0441\u044c\u043c\u0430 \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u0434\u0435\u0432\u0430\u0439\u0441\u0430.<\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/65c486e3a5e031d47d43e92d\" data-style=\"\" id=\"65c486e3a5e031d47d43e92d\" width=\"\"><\/div>\n<\/div>\n<p>  \u041d\u0430 6700,, \u0434\u0430\u0436\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0431\u043e\u043b\u0435\u0435 \u043d\u0438\u0437\u043a\u043e\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u2014 176&#215;220, \u0434\u0435\u043b\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u2014 ~15FPS! \u041d\u043e \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043c\u043e\u0436\u043d\u043e. \u0423\u0436\u0435 \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u00ab\u0430\u0432\u0442\u043e\u0440 \u043d\u0430\u0433\u043e\u0432\u043d\u043e\u043a\u043e\u0434\u0438\u043b, \u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u043e\u0435\u0442 \u0438\u0437-\u0437\u0430 \u043d\u0438\u0437\u043a\u043e\u0433\u043e FPS\u00bb? \u0410\u043d-\u043d\u0435\u0442, \u044f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0438\u0433\u0440\u044b \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u2014 \u043e\u043d\u0438 \u0438\u0434\u0443\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \ud83d\ude41 \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0442\u0430\u043a\u043e\u0432\u044b \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.<\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/65c486e3aeb5569d7b330ade\" data-style=\"\" id=\"65c486e3aeb5569d7b330ade\" width=\"\"><\/div>\n<\/div>\n<p>  \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438\u0433\u0440\u044b \u0441 Makefile&#8217;\u0430\u043c\u0438 \u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0434\u043b\u044f Visual Studio \u0438 MRELauncher \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043d\u0430 <a href=\"https:\/\/github.com\/monobogdan\/mregame\">\u043c\u043e\u0451\u043c GitHub<\/a>. \u0421\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u0438\u0437\u0443\u0447\u0430\u0439\u0442\u0435 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0435\u0433\u043e \u0432 \u043b\u044e\u0431\u044b\u0445 \u0446\u0435\u043b\u044f\u0445 \ud83d\ude42<\/p>\n<h2><font color=\"#1c22be\">\u276f<\/font> <font color=\"#454cee\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/font><\/h2>\n<p>  <a name=\"7\"><\/a>\u041d\u043e \u0432 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u043c \u0436\u0435, \u0434\u0435\u043c\u043a\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u043a\u043e\u043b\u044c\u043d\u043e\u0439, \u043a\u0430\u043a \u0438 \u0441\u0430\u043c \u043e\u043f\u044b\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u0432. \u0412 \u043e\u0431\u0449\u0435\u043c \u0438 \u0446\u0435\u043b\u043e\u043c, \u043a\u0438\u0442\u0430\u0439\u0446\u044b \u043f\u044b\u0442\u0430\u043b\u0438\u0441\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c API \u0438 \u043f\u0440\u0438\u0432\u043b\u0435\u0447\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043a \u0441\u0432\u043e\u0435\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435. \u0415\u0441\u043b\u0438 \u0440\u0430\u0434\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u043d\u0430 API \u0434\u043b\u044f Elf&#8217;\u043e\u0432 \u043d\u0430 Motorola, \u043c\u043e\u0436\u043d\u043e \u0443\u0436\u0430\u0441\u043d\u0443\u0442\u044c\u0441\u044f \u043e\u0442 state-based \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b P2K. \u0410 \u0442\u0443\u0442 \u0442\u0435\u0431\u0435 init, event, draw \u2014 \u0438 \u0432\u0441\u0451!<\/p>\n<p>  \u041d\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u043c\u0435\u0448\u0430\u043b\u0430 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u0430\u044f \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u0441\u0442\u044c \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u043a\u043e\u0441\u0442\u044b\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430. \u0410 \u0432\u0435\u0434\u044c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0438\u0448\u0435\u043a \u0431\u044b\u043b\u043e: \u0434\u0430\u0436\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0438\u0441\u0430\u0442\u044c \u0438 \u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u044f\u0434\u0440\u0430!<br \/>  \u0410 \u0432\u044b \u043a\u0430\u043a \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0435? \u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0432\u0434\u043e\u0445\u043d\u0443\u0442\u044c \u0432 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0435 \u043a\u043d\u043e\u043f\u043e\u0447\u043d\u0438\u043a\u0438 \u043d\u043e\u0432\u0443\u044e \u0436\u0438\u0437\u043d\u044c, \u0443\u0437\u043d\u0430\u0432 \u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043d\u0430 \u043d\u0438\u0445?<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/3c9\/11a\/3e3\/3c911a3e33ee299f1a230c91424cf48b.jpg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/3c9\/11a\/3e3\/3c911a3e33ee299f1a230c91424cf48b.jpg\" data-blurred=\"true\"\/><br \/>  <i><font color=\"#4682B4\">\u041a\u0440\u0443\u0442\u044b\u0435 \u0434\u0435\u0432\u0430\u0439\u0441\u044b \u043d\u0430 \u0444\u043e\u043d\u0435 \u043a\u043e\u0432\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0448\u0435 \u0430\u0432\u0442\u043e\u0440\u0430 \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430. \u0412\u0441\u0451 \u043a\u0430\u043a \u0432\u044b \u043b\u044e\u0431\u0438\u0442\u0435 \ud83d\ude42<\/font><\/i><\/p>\n<p>  P. S.: \u0414\u0440\u0443\u0437\u044c\u044f! \u0412\u0440\u0435\u043c\u044f \u043e\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u044f \u043f\u0438\u0448\u0443 \u043f\u043e\u0441\u0442 \u043e \u043f\u043e\u0438\u0441\u043a\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0445 \u0434\u0435\u0432\u0430\u0439\u0441\u043e\u0432 (\u043f\u043e\u0434\u0434\u0435\u043b\u043e\u043a, \u0440\u0435\u043f\u043b\u0438\u043a, \u0437\u0430\u043a\u043e\u0441\u043e\u0432 \u043d\u0430 \u0430\u0439\u0444\u043e\u043d\u044b, \u0441\u0430\u043c\u0441\u0443\u043d\u0433\u0438, \u0441\u043e\u043d\u0438, HTC \u0438 \u0442. \u043f.) \u0434\u043b\u044f \u0431\u0443\u0434\u0443\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u0435\u0439. \u041e\u0434\u043d\u0430\u043a\u043e \u043e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0438 \u043f\u0438\u0448\u0443\u0442 \u00ab\u0433\u0434\u0435 \u0436 \u0442\u044b \u0431\u044b\u043b \u043c\u0435\u0441\u044f\u0446 \u043d\u0430\u0437\u0430\u0434, \u043c\u0435\u0448\u043e\u043a \u0442\u0430\u043a\u0438\u0445 \u0432\u044b\u0431\u0440\u043e\u0441\u0438\u043b!\u00bb, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u0432 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043e \u043f\u043e\u0438\u0441\u043a\u0435 \u0434\u0435\u0432\u0430\u0439\u0441\u043e\u0432 \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430. \u0415\u0441\u0442\u044c \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0447\u0442\u043e-\u0442\u043e \u0432\u044b\u043a\u0438\u043d\u0443\u0442\u044c \u0438\u043b\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432 \u0447\u0435\u0440\u043c\u0435\u0442? \u0414\u0430\u0436\u0435 \u043d\u0435\u0440\u0430\u0431\u043e\u0447\u0443\u044e \u00ab\u043d\u0435\u0432\u043a\u043b\u044e\u0447\u0430\u0439\u043a\u0443\u00bb \u0438\u043b\u0438 \u043f\u043e\u043b\u0443\u0440\u0430\u0431\u043e\u0447\u0443\u044e? \u0410 \u043c\u043e\u0436\u0435\u0442, \u0443 \u044d\u0442\u0438\u0445 \u0434\u0435\u0432\u0430\u0439\u0441\u043e\u0432 \u0435\u0441\u0442\u044c \u0448\u0430\u043d\u0441 \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435! \u0421\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0432 <a href=\"https:\/\/habr.com\/ru\/articles\/784786\/\">\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u043f\u043e\u0441\u0442\u0435<\/a>, \u0447\u0442\u043e \u044f \u0434\u0435\u043b\u0430\u044e \u0441 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u043c\u0438 \u043f\u043e\u0434\u0434\u0435\u043b\u043a\u0430\u043c\u0438 \u043d\u0430 \u0430\u0439\u0444\u043e\u043d\u044b, \u0441\u0430\u043c\u0441\u0443\u043d\u0433\u0438, \u043c\u0430\u043a\u0431\u0443\u043a\u0438 \u0438 \u0430\u0439\u043f\u0430\u0434\u044b! \u0414\u0430 \u0438 \u0447\u0435\u0433\u043e \u0443\u0436 \u0442\u0430\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c: \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0443\u0436\u0435 \u0441\u0430\u043c\u0430 \u043f\u043e \u0441\u0435\u0431\u0435 \u0432\u0435\u0441\u044c\u043c\u0430 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440!<\/p>\n<p>  \u041f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0441\u044f \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b? \u0423 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u043a\u0430\u043d\u0430\u043b \u0432 <a href=\"https:\/\/t.me\/monobogdann\">\u0422\u0435\u043b\u0435\u0433\u0435<\/a>, \u043a\u0443\u0434\u0430 \u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u044e \u0431\u044d\u043a\u0441\u0442\u0435\u0439\u0434\u0436 \u0441\u043e \u0441\u0442\u0430\u0442\u0435\u0439, \u0432\u0441\u044f\u043a\u0438\u0435 \u043c\u044b\u0441\u043b\u0438 \u0438 \u0441\u043e\u0432\u0435\u0442\u044b \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u043c\u043e\u043d\u0442\u0430 \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0434 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0434\u0435\u0432\u0430\u0439\u0441\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u043e\u0432\u0440\u0435\u043c\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u044e \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0441\u0432\u043e\u0438 \u043d\u043e\u0432\u044b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438. 1-2 \u043f\u043e\u0441\u0442\u0430 \u0432 \u0434\u0435\u043d\u044c, \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043c\u0443\u0441\u043e\u0440\u0430!<\/p>\n<hr\/>\n<p>  <\/p>\n<h4><font color=\"#454cee\">\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0437\u0430\u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u044d\u0442\u043e:<\/font><\/p>\n<ul>\n<li>\u27a4 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/787896\/\">\u0421\u0443\u0440\u043e\u0432\u044b\u0439 \u043c\u043e\u0434\u0434\u0438\u043d\u0433 \u0438\u0437 \u043d\u0443\u043b\u0435\u0432\u044b\u0445: \u043a\u0430\u043a \u044d\u043d\u0442\u0443\u0437\u0438\u0430\u0441\u0442\u044b \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u043b\u0438 \u043e\u0431\u044a\u0451\u043c \u041e\u0417\u0423 \u0432 \u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u0445?<\/a><\/li>\n<li>\u27a4 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/790556\/\">\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e Rust. 1\/4<\/a><\/li>\n<li>\u27a4 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/789538\/\">\u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430 \u0434\u043b\u044f E-Ink \u044d\u043a\u0440\u0430\u043d\u043e\u0432. \u04271. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u0438\u0442\u0430\u043d\u0438\u044f<\/a><\/li>\n<li>\u27a4 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/774070\/\">\u041a\u0430\u043a \u043f\u0440\u043e\u043a\u043b\u044f\u0442\u0438\u0435 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u043e\u0439 \u0441\u0442\u0435\u043d\u044b \u0436\u0434\u0430\u043b\u043e \u043c\u0435\u043d\u044f 20 \u043b\u0435\u0442<\/a><\/li>\n<li>\u27a4 <a href=\"https:\/\/habr.com\/ru\/companies\/timeweb\/articles\/790838\/\">35 \u043b\u0435\u0442 SimCity<\/a><\/li>\n<\/ul>\n<p>  <a href=\"https:\/\/timeweb.cloud\/?i=106909\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/b5\/pj\/of\/b5pjofdoxth14ro-rjsrn7sbmiy.png\" data-src=\"https:\/\/habrastorage.org\/webt\/b5\/pj\/of\/b5pjofdoxth14ro-rjsrn7sbmiy.png\"\/><\/a><\/h4>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><\/p>\n<div class=\"tm-article-poll-container\"><!--[--><\/p>\n<div class=\"tm-article-poll tm-article-poll_variant-bordered\">\n<div class=\"tm-notice tm-notice_positive tm-article-poll__notice\"><!----><\/p>\n<div class=\"tm-notice__inner\"><!----><\/p>\n<div class=\"tm-notice__content\" data-test-id=\"notice-content\"><!--[--><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/companies\/timeweb\/articles\/791072\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><!--]--><\/div>\n<\/div>\n<\/div>\n<p><!--[--><\/p>\n<div class=\"tm-article-poll__header\">\u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b?<\/div>\n<div class=\"tm-article-poll__answers\"><!--[--><\/p>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">66.67% <\/span><span class=\"tm-article-poll__answer-label\">\u0414\u0430. \u041d\u0435 \u0437\u043d\u0430\u043b \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u043e\u0434 \u043a\u0438\u0442\u0430\u0439\u0446\u0435\u0432 \u043c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0434\u0430 \u0435\u0449\u0451 \u0438 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435!<\/span><span class=\"tm-article-poll__answer-votes\">106<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width: 66.67%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">30.82% <\/span><span class=\"tm-article-poll__answer-label\">\u0414\u0430, \u043d\u043e \u0431\u0435\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u043b\u044e\u0434\u0435\u0439 \u043a \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 \u043d\u0435 \u043f\u0440\u0438\u0432\u043b\u0435\u0447\u044c. \u0416\u0434\u0451\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u0434\u0435\u0432\u0430\u0439\u0441\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u041c\u041a!<\/span><span class=\"tm-article-poll__answer-votes\">49<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 30.82%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">2.52% <\/span><span class=\"tm-article-poll__answer-label\">\u041d\u0435\u0442. \u0413\u0430\u043c\u043d\u043e, \u0430\u0444\u0444\u0442\u0430\u0440 \u043c\u0443\u0434\u0430\u043a.<\/span><span class=\"tm-article-poll__answer-votes\">4<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 2.52%\"><\/div>\n<\/div>\n<\/div>\n<p><!--]--><\/div>\n<div class=\"tm-article-poll__stats\"> \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 159 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.   \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u043b\u0438\u0441\u044c 25 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. <\/div>\n<p><!--]--><\/div>\n<div class=\"tm-article-poll tm-article-poll_variant-bordered\">\n<div class=\"tm-notice tm-notice_positive tm-article-poll__notice\"><!----><\/p>\n<div class=\"tm-notice__inner\"><!----><\/p>\n<div class=\"tm-notice__content\" data-test-id=\"notice-content\"><!--[--><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/companies\/timeweb\/articles\/791072\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><!--]--><\/div>\n<\/div>\n<\/div>\n<p><!--[--><\/p>\n<div class=\"tm-article-poll__header\">\u0411\u044b\u043b\u0438 \u043b\u0438 \u0443 \u0432\u0430\u0441 \u0442\u0430\u043a\u0438\u0435 \u043a\u0438\u0442\u0430\u0439\u0447\u0438\u043a\u0438?<\/div>\n<div class=\"tm-article-poll__answers\"><!--[--><\/p>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">39.33% <\/span><span class=\"tm-article-poll__answer-label\">\u0423\u0433\u0443, \u0431\u044b\u043b\u0438.<\/span><span class=\"tm-article-poll__answer-votes\">70<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 39.33%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">60.67% <\/span><span class=\"tm-article-poll__answer-label\">\u041d\u0435\u0442, \u043d\u0435 \u0431\u044b\u043b\u043e.<\/span><span class=\"tm-article-poll__answer-votes\">108<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width: 60.67%\"><\/div>\n<\/div>\n<\/div>\n<p><!--]--><\/div>\n<div class=\"tm-article-poll__stats\"> \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 178 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.   \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u043b\u0438\u0441\u044c 13 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. <\/div>\n<p><!--]--><\/div>\n<p><!--]--><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/791072\/\"> https:\/\/habr.com\/ru\/articles\/791072\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/post_images\/86b\/fa4\/02a\/86bfa402a83c50a9bd309beb4e68c9f0.jpg\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/86b\/fa4\/02a\/86bfa402a83c50a9bd309beb4e68c9f0.jpg\" data-blurred=\"true\"\/><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u0440\u0438\u0435\u0445\u0430\u0442\u044c \u0432 \u043f\u0443\u043d\u043a\u0442 \u043f\u0440\u0438\u0435\u043c\u0430 \u043c\u0435\u0442\u0430\u043b\u043b\u043e\u043b\u043e\u043c\u0430, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0435 \u043a\u0443\u0447\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u0432 \u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0445 \u00ab\u043e\u0442\u0445\u043e\u0434\u043e\u0432\u00bb, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u043e\u044f\u0442 \u043f\u043e\u0434 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u043d\u0435\u0431\u043e\u043c \u0438 \u0436\u0434\u0443\u0442, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0434\u0451\u0442 \u0438\u0445 \u0447\u0435\u0440\u0451\u0434 \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0438 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0438 \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043c\u043d\u043e\u0433\u0438\u0435 \u0434\u0435\u0432\u0430\u0439\u0441\u044b \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0430\u0431\u043e\u0447\u0438\u043c\u0438 \u0434\u0430\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043b\u0435\u0436\u0430\u043d\u0438\u044f \u043f\u043e\u0434 \u043f\u0430\u043b\u044f\u0449\u0438\u043c \u0441\u043e\u043b\u043d\u0446\u0435\u043c \u0438 \u043f\u0440\u043e\u043b\u0438\u0432\u043d\u044b\u043c\u0438 \u0434\u043e\u0436\u0434\u044f\u043c\u0438, \u0430 \u0441\u0434\u0430\u043b\u0438 \u0438\u0445 \u0432 \u0447\u0435\u0440\u043c\u0435\u0442 \u043f\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u00ab\u043d\u0435 \u043d\u0443\u0436\u0435\u043d, \u043d\u0430\u0434\u043e\u0435\u043b, \u043a\u0443\u043f\u0438\u043b \u043d\u043e\u0432\u044b\u0439\u00bb \u0438 \u0442. \u043f. \u042f \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u044e \u044d\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c, \u0432\u0435\u0434\u044c \u0434\u0430\u0436\u0435 \u0432 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043a\u043d\u043e\u043f\u043e\u0447\u043d\u044b\u0435 \u0437\u0432\u043e\u043d\u0438\u043b\u043a\u0438 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u0434\u043e\u0445\u043d\u0443\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0436\u0438\u0437\u043d\u044c, \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439, \u043d\u043e \u043c\u0430\u043b\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0444\u0430\u043a\u0442: \u0434\u043b\u044f \u043d\u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 C \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0436\u0435\u043b\u0435\u0437\u043e \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 \u0432 \u0441\u0432\u043e\u0438\u0445 \u0446\u0435\u043b\u044f\u0445. \u0410 \u044d\u0442\u043e, \u043d\u0430 \u043c\u0438\u043d\u0443\u0442\u043e\u0447\u043a\u0443, \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c: \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u0441 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u043e\u0439, \u0432\u0438\u0431\u0440\u043e\u043c\u043e\u0442\u043e\u0440, \u0434\u0438\u043d\u0430\u043c\u0438\u043a, \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430 \u0438 GSM-\u0440\u0430\u0434\u0438\u043e\u043c\u043e\u0434\u0443\u043b\u044c \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u044b\u0445\u043e\u0434\u0430 \u0432 \u0441\u0435\u0442\u044c. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0441 \u0432\u0430\u043c\u0438: \u0443\u0437\u043d\u0430\u0435\u043c, \u043d\u0430 \u043a\u0430\u043a\u0438\u0445 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0435 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u044b, \u043a\u0430\u043a\u0438\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0438 \u0433\u0434\u0435 \u0432\u0437\u044f\u0442\u044c \u0434\u043b\u044f \u043d\u0438\u0445 SDK, \u0430 \u0432 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u043d\u0430\u043f\u0438\u0448\u0435\u043c 2D-\u0438\u0433\u0440\u0443 \u0441 \u043d\u0443\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u043c\u043d\u043e\u0433\u0438\u0445 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0445 \u043a\u043d\u043e\u043f\u043e\u0447\u043d\u0438\u043a\u0430\u0445. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e? \u0422\u043e\u0433\u0434\u0430 \u0436\u0434\u0443 \u0432\u0430\u0441 \u043f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c!  <\/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-367181","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/367181","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=367181"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/367181\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=367181"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=367181"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=367181"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}