{"id":465511,"date":"2025-07-01T15:23:55","date_gmt":"2025-07-01T15:23:55","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=465511"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=465511","title":{"rendered":"<span>\u0418\u0449\u0435\u043c \u0438\u0433\u0440\u044b \u0434\u043b\u044f Atari \u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/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-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2ba\/f76\/68c\/2baf7668cbe890d077fc03cfa8491a8c.png\" width=\"1312\" height=\"672\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/2ba\/f76\/68c\/2baf7668cbe890d077fc03cfa8491a8c.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2ba\/f76\/68c\/2baf7668cbe890d077fc03cfa8491a8c.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u044f \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u043e\u043a\u043e\u043b\u043e 30 \u043c\u0438\u043b\u043b\u0438\u0430\u0440\u0434\u043e\u0432 \u0444\u0430\u0439\u043b\u043e\u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e 4 \u041a\u0411. \u0418\u0437 \u044d\u0442\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a \u0438\u0437 \u043f\u043e\u043b\u043d\u043e\u0439 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 ROM Atari \u0431\u044b\u043b\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 10 \u0442\u044b\u0441\u044f\u0447. \u0417\u0430\u0442\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u043f\u0440\u043e\u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u0438\u0445 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430 Atari 2600, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043b\u0438 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0438\u0437 \u044d\u0442\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438\u0433\u0440\u043e\u0439 \u0434\u043b\u044f Atari. \u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0437\u0430\u0434\u0430\u0432\u0430\u043b, \u043e\u043d \u043d\u0438\u043a\u043e\u043c\u0443 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043e\u0433\u0440\u043e\u043c\u043d\u0443\u044e \u043f\u0443\u0441\u0442\u0443\u044e \u0442\u0440\u0430\u0442\u0443 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432. \u0427\u0442\u043e, \u0435\u0441\u043b\u0438 \u0437\u0430\u0441\u0443\u043d\u0443\u0442\u044c \u0432 GPU \u043c\u0438\u043b\u043b\u0438\u0430\u0440\u0434 \u043e\u0431\u0435\u0437\u044c\u044f\u043d \u0438 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u0445 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u0433\u0440\u0443 \u0434\u043b\u044f Atari 2600?<\/p>\n<p>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0443 GPU, \u0418\u0418 \u0438 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u043c\u043e\u0436\u0435\u043c (\u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e) \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 Python \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0430\u043c\u043f\u0438\u0442 \u043c\u0443\u0441\u043e\u0440 \u0432 ROM \u043f\u043e 4 \u041a\u0411 \u0438 \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442: \u00ab\u043f\u043e\u0445\u043e\u0436\u0435 \u043b\u0438 \u044d\u0442\u043e \u043d\u0430 \u0438\u0433\u0440\u0443?\u00bb. \u041f\u0440\u043e\u0435\u043a\u0442 \u0431\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d \u043d\u0435 \u0438\u0437 \u043d\u043e\u0441\u0442\u0430\u043b\u044c\u0433\u0438\u0438, \u043c\u043e\u0435\u0439 \u043f\u0435\u0440\u0432\u043e\u0439 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u044e \u0431\u044b\u043b\u0430 NES. \u042f \u0432\u043e\u0437\u043d\u0430\u043c\u0435\u0440\u0438\u043b\u0441\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0447\u0442\u043e \u043d\u0435\u0432\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u043c\u043e \u043e\u0431\u0448\u0438\u0440\u043d\u043e\u0435 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043d\u0430\u0439\u0434\u0451\u0442\u0441\u044f \u043b\u0438 \u0442\u0430\u043c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0435.<\/p>\n<h3>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b<\/h3>\n<p>\u041d\u0438\u043a\u0442\u043e \u043d\u0435 \u0447\u0438\u0442\u0430\u0435\u0442 \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u043a\u0440\u043e\u043b\u043b\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0440\u0430\u0437\u0443 \u0434\u0430\u043c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440, \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0441\u0430\u043c\u044b\u0435 \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u044b\u0435 \u0438\u0437 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 ROM Atari. \u0417\u0434\u0435\u0441\u044c \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0433\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u0438\u043b\u043b\u0438\u0430\u0440\u0434\u044b \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440.<\/p>\n<p><a href=\"https:\/\/bbenchoff.github.io\/assets\/pages\/finiteatarirunner.html\" rel=\"noopener noreferrer nofollow\">https:\/\/bbenchoff.github.io\/assets\/pages\/finiteatarirunner.html<\/a><\/p>\n<p><strong>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435: \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u0435 \u0433\u0440\u043e\u043c\u043a\u043e\u0441\u0442\u044c, \u0432 <\/strong><a href=\"https:\/\/github.com\/EmulatorJS\/EmulatorJS\" rel=\"noopener noreferrer nofollow\"><strong>EmulatorJS<\/strong><\/a><strong> \u0435\u0441\u0442\u044c \u0431\u0430\u0433.<\/strong><\/p>\n<h3>\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u044b \u0437\u0430\u0434\u0430\u0447\u0438<\/h3>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u0440\u0442\u0440\u0438\u0434\u0436 Atari 2600 \u2014 \u044d\u0442\u043e \u0431\u043b\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 4 \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442\u0430. \u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0432 \u043d\u0451\u043c 4096 \u0431\u0430\u0439\u0442\u043e\u0432, \u0438\u043b\u0438 32768 \u0431\u0438\u0442. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 2<sup>32768<\/sup>\u00a0\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 ROM. \u0414\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p>\u042d\u0442\u043e 10<sup>10159<\/sup>\u00a0\u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u0433\u0440 \u0434\u043b\u044f Atari.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430 \u0417\u0435\u043c\u043b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 10<sup>20<\/sup>\u00a0\u043f\u0435\u0441\u0447\u0438\u043d\u043e\u043a.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u043e\u0439 \u0412\u0441\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e 10<sup>80<\/sup>\u00a0\u043f\u0440\u043e\u0442\u043e\u043d\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<p>\u0415\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0446\u0435\u043b\u044b\u0439 \u0418\u0418-\u0434\u0430\u0442\u0430\u0446\u0435\u043d\u0442\u0440, \u0442\u043e, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0434\u043b\u044f \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0447\u0435\u0433\u043e-\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u0438\u0441\u044c \u0431\u044b \u0433\u043e\u0434\u044b. \u041d\u043e \u0435\u0441\u043b\u0438 \u043f\u043e\u0434\u043e\u0439\u0442\u0438 \u043a \u0434\u0435\u043b\u0443 \u0441 \u0443\u043c\u043e\u043c \u0438 \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e, \u0442\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u044b \u0437\u0430\u0434\u0430\u0447\u0438 \u0441\u0438\u043b\u044c\u043d\u043e \u0441\u043e\u043a\u0440\u0430\u0442\u044f\u0442\u0441\u044f. \u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u0438\u0441\u043a\u0430 \u00ab\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0439\u00bb \u0438\u0433\u0440\u044b \u0434\u043b\u044f Atari \u0431\u044b\u043b \u0431\u044b \u0442\u0430\u043a\u0438\u043c:<\/p>\n<ol>\n<li>\n<p>\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c ROM, \u0441\u0434\u0430\u043c\u043f\u0438\u0432 4 \u041a\u0411 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \/dev\/random \u0432 \u0444\u0430\u0439\u043b.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0432 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0414\u0435\u043b\u0430\u0435\u043c \u043e\u0434\u0438\u043d-\u043f\u044f\u0442\u044c \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p>\u0424\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u043c \u0438\u043b\u0438 \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0435\u043c \u0438\u0445 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0418\u0418.<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043b\u0443\u0447\u0448\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<\/ol>\n<p>\u042d\u0442\u043e \u0431\u044b \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u0435\u0441\u043b\u0438 \u0431\u044b \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f, \u043f\u043e\u043a\u0430 \u0447\u0451\u0440\u043d\u044b\u0435 \u0434\u044b\u0440\u044b \u043d\u0435 \u043f\u043e\u0433\u043b\u043e\u0442\u044f\u0442 \u0412\u0441\u0435\u043b\u0435\u043d\u043d\u0443\u044e. \u041d\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u0443\u043c\u043d\u0435\u0435 \u2014 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043d\u0430 \u0440\u0430\u043d\u043d\u0438\u0445 \u044d\u0442\u0430\u043f\u0430\u0445 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0434\u043b\u044f \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043c\u0443\u0441\u043e\u0440\u0430 \u0435\u0449\u0451 \u0434\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430. \u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a \u043d\u0430\u043c \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 ROM Atari.<\/p>\n<h3>\u042d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0438<\/h3>\n<p>\u042f \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0441\u044c \u044d\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0439 ROM, \u0430 \u043b\u0438\u0448\u044c \u043f\u044b\u0442\u0430\u044e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 <em>\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435<\/em>. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e \u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442\u044c \u043a \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0443\u043c\u043e\u043c:<\/p>\n<p><strong>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0435 \u043e\u043f\u043a\u043e\u0434\u044b: <\/strong>\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 6507 (\u0434\u0430\u043b\u044c\u0448\u0435 \u044f \u0431\u0443\u0434\u0443 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e 6502, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0431\u0435\u0441\u0438\u0442\u044c \u0432\u0430\u0441) \u0438\u043c\u0435\u0435\u0442 151 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 \u043e\u043f\u043a\u043e\u0434, \u0438 \u044d\u0442\u0438 \u043e\u043f\u043a\u043e\u0434\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432\u043e \u0432\u0441\u0435\u0439 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0435 ROM. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u0431\u0443\u0434\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0435\u0441\u0442\u044c \u043b\u0438 \u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043d\u043e\u0433\u043e \u043e\u043f\u043a\u043e\u0434\u043e\u0432. \u0412\u043e\u0442 \u043a\u0430\u043a\u0438\u0435 \u043e\u043f\u043a\u043e\u0434\u044b \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u044b:<\/p>\n<p><code>0x00, 0x01, 0x05, 0x06, 0x08, 0x09, 0x0A, 0x0D, 0x0E, 0x10, 0x11, 0x15, 0x16, 0x18, 0x19, 0x1D, 0x1E, 0x20, 0x21, 0x24, 0x25, 0x26, 0x28, 0x29, 0x2A, 0x2C, 0x2D, 0x2E, 0x30, 0x31, 0x35, 0x36, 0x38, 0x39, 0x3D, 0x3E, 0x40, 0x41, 0x45, 0x46, 0x48, 0x49, 0x4A, 0x4C, 0x4D, 0x4E, 0x50, 0x51, 0x55, 0x56, 0x58, 0x59, 0x5D, 0x5E, 0x60, 0x61, 0x65, 0x66, 0x68, 0x69, 0x6A, 0x6C, 0x6D, 0x6E, 0x70, 0x71, 0x75, 0x76, 0x78, 0x79, 0x7D, 0x7E, 0x81, 0x84, 0x85, 0x86, 0x88, 0x8A, 0x8C, 0x8D, 0x8E, 0x90, 0x91, 0x94, 0x95, 0x96, 0x98, 0x99, 0x9A, 0x9D, 0xA0, 0xA1, 0xA2, 0xA4, 0xA5, 0xA6, 0xA8, 0xA9, 0xAA, 0xAC, 0xAD, 0xAE, 0xB0, 0xB1, 0xB4, 0xB5, 0xB6, 0xB8, 0xB9, 0xBA, 0xBC, 0xBD, 0xBE, 0xC0, 0xC1, 0xC4, 0xC5, 0xC6, 0xC8, 0xC9, 0xCA, 0xCC, 0xCD, 0xCE, 0xD0, 0xD1, 0xD5, 0xD6, 0xD8, 0xD9, 0xDD, 0xDE, 0xE0, 0xE1, 0xE4, 0xE5, 0xE6, 0xE8, 0xE9, 0xEA, 0xEC, 0xED, 0xEE, 0xF0, 0xF1, 0xF5, 0xF6, 0xF8, 0xF9, 0xFD, 0xFE<\/code><\/p>\n<p>\u0421\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u043c\u0435\u044e\u0442 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c 59% \u0431\u044b\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c \u043e\u043f\u043a\u043e\u0434\u043e\u043c (151 \u0438\u0437 256 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0431\u0430\u0439\u0442\u043e\u0432). \u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u0433\u0440\u0430\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043b\u0443\u0447\u0448\u0435. \u0412 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 ROM Atari \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442 \u2014 \u044d\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u0430\u044f \u0447\u0430\u0441\u0442\u044c, \u0430 \u0432\u0441\u0451 \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0433\u043e \u2014 \u044d\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430. \u041f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0432 \u0432\u0441\u0451 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0445 ROM Atari, \u044f \u0432\u044b\u044f\u0441\u043d\u0438\u043b, \u0447\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435 75% \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u0438\u0437 \u043e\u043f\u043a\u043e\u0434\u043e\u0432.<\/p>\n<p><strong>\u0414\u0443\u0440\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0441 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u043c \u0441\u0431\u0440\u043e\u0441\u0430:<\/strong>\u00a0\u0432 ROM Atari \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u0441\u0431\u0440\u043e\u0441\u0430 \u043d\u0430 \u0442\u043e\u0447\u043a\u0443 \u0432\u0445\u043e\u0434\u0430 \u043a\u043e\u0434\u0430. \u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0434\u0432\u0430 \u0431\u0430\u0439\u0442\u0430 \u043a\u043e\u0434\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 \u043e\u0442 <code>0xF000<\/code>\u00a0\u0434\u043e <code>0xFFFF<\/code>. \u042f \u043c\u043e\u0433\u0443 \u0441\u0436\u0443\u043b\u044c\u043d\u0438\u0447\u0430\u0442\u044c, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0432 ROM \u043d\u0430 4 \u041a\u0411 \u043c\u0438\u043d\u0443\u0441 \u0434\u0432\u0430 \u0431\u0430\u0439\u0442\u0430, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u0441\u0431\u0440\u043e\u0441\u0430 \u043f\u0440\u0438 \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u0438.\u00a0<em>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u043e \u0432 4096 \u0440\u0430\u0437 \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u0430\u0431\u043e\u0442\u044b<\/em>.<\/p>\n<p><strong>\u0412\u0432\u043e\u0434 <em>\u0438 <\/em>\u0432\u044b\u0432\u043e\u0434?!<\/strong>\u00a0\u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a TIA (Television Interface Adapter), \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0432\u044b\u0432\u043e\u0434 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 RIOT (RAM-I\/O-Timer), \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043b\u0438 \u043e\u043d \u0432\u0432\u043e\u0434 \u0438 \u0432\u044b\u0432\u043e\u0434. TIA \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0439 \u0438 \u0437\u0432\u0443\u043a\u043e\u043c, \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u0432 \u0447\u0440\u0435\u0437\u0432\u044b\u0447\u0430\u0439\u043d\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0445 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0438 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 \u0432\u043e \u0432\u0441\u0435\u0445 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u0433\u0440\u0430\u0445 \u0434\u043b\u044f Atari. \u041f\u0440\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e:<\/p>\n<ul>\n<li>\n<p>90% \u0438\u0437 \u043d\u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044e \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b (<code>STA $02<\/code>,\u00a0<code>STX $06<\/code>,\u00a0<code>STY $00<\/code>).<\/p>\n<\/li>\n<li>\n<p>80% \u0438\u0437 \u043d\u0438\u0445 \u2014 \u044d\u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u044b STA, 10% \u2014 STX, 10% \u2014 STY.<\/p>\n<\/li>\n<li>\n<p>\u0427\u0430\u0441\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u0430\u044f \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044f (<code>STA $00,X<\/code>,\u00a0<code>STY $10,X<\/code>).<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0435\u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 WSYNC ($02) \u2014 18,8% \u043e\u0442 \u0432\u0441\u0435\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a TIA (\u0438\u0433\u0440\u044b \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0441 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u043e\u043c).<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b TIA, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0438\u0433\u0440\u0430\u043c\u0438:<\/p>\n<p><code>$02 (WSYNC) - 18,8% \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 - \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0441 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u043e\u043c<\/code><br \/><code>$1B (GRP0) - 8,4% \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 - \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0438\u0433\u0440\u043e\u043a\u0430 0<\/code><br \/><code>$1C (GRP1) - 7,0% \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 - \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0438\u0433\u0440\u043e\u043a\u0430 1<\/code><br \/><code>$2A (HMOVE) - 4,9% \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 - \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435<\/code><br \/><code>$0E\/$0F (PF1\/PF2) - \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u043e 7,8% - \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f<\/code><\/p>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u043b\u0435\u043f\u0443\u044e \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 TIA \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 <code>$00-$2F<\/code>, \u044f \u0438\u0441\u043a\u0430\u043b \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u043a\u043e\u043c\u0430\u043d\u0434, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u0433\u0440\u0430\u0445.<\/p>\n<p>\u0418\u0437-\u0437\u0430 \u0437\u0435\u0440\u043a\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 RIOT \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u0435\u0435. \u0412 Atari 2600 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u043f\u043e\u043b\u043d\u043e\u0435 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u043e\u0432, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u0430\u0434\u0440\u0435\u0441\u0430\u043c. \u0427\u0438\u043f RIOT \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442:<\/p>\n<ul>\n<li>\n<p>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0442\u0430\u0439\u043c\u0435\u0440\u0430: \u0438\u0445 \u043a\u0430\u043d\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 <code>$0280-$0287<\/code>, \u043d\u043e \u0438\u0437-\u0437\u0430 \u0437\u0435\u0440\u043a\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u043d\u0438 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0433\u0443\u0442 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0442\u044c\u0441\u044f \u0432 <code>$80-$87<\/code>, <code>$180-$187<\/code>, <code>$380-$387<\/code> \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430: \u0438\u0445 \u043a\u0430\u043d\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 <code>$0294-$0297<\/code>, \u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u043e\u043d\u0438 \u0437\u0435\u0440\u043a\u0430\u043b\u044f\u0442\u0441\u044f \u043d\u0430 <code>$94-$97<\/code>, <code>$194-$197<\/code> \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u0430\u0445 ROM \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 \u043e\u0442\u0437\u0435\u0440\u043a\u0430\u043b\u0435\u043d\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435. \u0422\u0438\u043f\u0438\u0447\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 <code>STA $80<\/code>\u00a0(\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0442\u0430\u0439\u043c\u0435\u0440\u0430) \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432 ROM \u0432 \u0432\u0438\u0434\u0435 <code>85 80 ; STA $80 (\u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044f \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b)<\/code>, \u0430 \u043d\u0435 \u0432 \u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u043d\u043e\u043c \u0432\u0438\u0434\u0435 <code>8D 80 02 ; STA $0280 (\u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u0430\u044f \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044f)<\/code>. \u041c\u043e\u044f \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0430 \u0438\u0449\u0435\u0442 \u0442\u0430\u043a\u0438\u0435 \u043c\u0435\u0441\u0442\u0430.<\/p>\n<p><strong>\u0412\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b.<\/strong>\u00a0\u041c\u044b \u0438\u0449\u0435\u043c \u0438\u0433\u0440\u044b, \u0430 \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0433\u0440\u0435 \u0435\u0441\u0442\u044c \u0446\u0438\u043a\u043b\u044b \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430. \u041e\u043d\u0438 \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u043c\u0430\u043d\u0434 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f (\u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0446\u0438\u043a\u043b\u043e\u0432 \u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0439) \u0438 \u043a\u043e\u043c\u0430\u043d\u0434 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 (\u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0438 \u043e\u0431\u0449\u0435\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f). \u0412 \u043a\u043e\u0434\u0435 \u043e\u043d\u0438 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f (\u0446\u0438\u043a\u043b\u043e\u0432) \u0438 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u043f\u0435\u0440\u0451\u0434 (\u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432).<\/p>\n<ul>\n<li>\n<p>\u041e\u043f\u043a\u043e\u0434\u044b \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f:\u00a0<code>0x10, 0x30, 0x50, 0x70, 0x90, 0xB0, 0xD0, 0xF0.<\/code><\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u043a\u043e\u0434\u044b \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432:\u00a0<code>0x4C<\/code>\u00a0(JMP \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0439),\u00a0<code>0x6C<\/code>\u00a0(JMP \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u044b\u0439),\u00a0<code>0x20<\/code>\u00a0(JSR \u2014 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043a \u043f\u043e\u0434\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435).<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f \u00ab\u0438\u0433\u0440\u043e\u0439\u00bb.<\/p>\n<h3>\u041a\u0430\u043b\u0438\u0431\u0440\u043e\u0432\u043a\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/h3>\n<p>\u0414\u043b\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u044d\u0442\u0438\u0445 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a \u044f \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b <a href=\"https:\/\/archive.org\/details\/Atari2600FullRomCollectionReuploadByDataghost\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u043b\u043d\u0443\u044e \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e ROM \u043a\u043e\u043d\u0441\u043e\u043b\u0438 Atari 2600<\/a>\u00a0\u0438\u0437 Internet Archive \u2014 \u0432\u0441\u0435 1530 \u043f\u0440\u043e\u0434\u0430\u0432\u0430\u0432\u0448\u0438\u0445\u0441\u044f ROM \u0434\u043b\u044f Atari. \u0421\u043a\u0440\u0438\u043f\u0442 \u043d\u0430 Python \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b \u043a\u0430\u0436\u0434\u044b\u0439 ROM \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u0447\u0451\u0442\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u0441\u0442\u0438 \u044d\u0442\u0438\u0445 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a \u0432 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0445 \u0438\u0433\u0440\u0430\u0445.<\/p>\n<h4>\u0425\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 ROM \u043f\u043e \u043c\u0435\u0442\u0440\u0438\u043a\u0430\u043c<\/h4>\n<p>\u0412\u043e\u0442 \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u0433\u0440\u044b \u0434\u043b\u044f Atari:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th data-colwidth=\"112\" width=\"112\">\n<p align=\"left\">\u041c\u0435\u0442\u0440\u0438\u043a\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">Min<\/p>\n<\/th>\n<th>\n<p align=\"left\">5-\u0439 %<\/p>\n<\/th>\n<th data-colwidth=\"100\" width=\"100\">\n<p align=\"left\">10-\u0439 %<\/p>\n<\/th>\n<th>\n<p align=\"left\">25-\u0439 %<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041c\u0435\u0434\u0438\u0430\u043d\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">75-\u0439 %<\/p>\n<\/th>\n<th>\n<p align=\"left\">90-\u0439 %<\/p>\n<\/th>\n<th>\n<p align=\"left\">95-\u0439 %<\/p>\n<\/th>\n<th>\n<p align=\"left\">Max<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0421\u0440\u0435\u0434\u043d\u0435\u0435<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td data-colwidth=\"112\" width=\"112\">\n<p align=\"left\"><strong>\u0412\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u043e\u043f\u043a\u043e\u0434\u044b (%)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">42.1%<\/p>\n<\/td>\n<td>\n<p align=\"left\">65.6%<\/p>\n<\/td>\n<td data-colwidth=\"100\" width=\"100\">\n<p align=\"left\">70.0%<\/p>\n<\/td>\n<td>\n<p align=\"left\">74.0%<\/p>\n<\/td>\n<td>\n<p align=\"left\">76.0%<\/p>\n<\/td>\n<td>\n<p align=\"left\">77.9%<\/p>\n<\/td>\n<td>\n<p align=\"left\">79.6%<\/p>\n<\/td>\n<td>\n<p align=\"left\">81.4%<\/p>\n<\/td>\n<td>\n<p align=\"left\">90.7%<\/p>\n<\/td>\n<td>\n<p align=\"left\">74.8%<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"112\" width=\"112\">\n<p align=\"left\"><strong>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a TIA<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">12<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>93<\/strong><\/p>\n<\/td>\n<td data-colwidth=\"100\" width=\"100\">\n<p align=\"left\">118<\/p>\n<\/td>\n<td>\n<p align=\"left\">186<\/p>\n<\/td>\n<td>\n<p align=\"left\">282<\/p>\n<\/td>\n<td>\n<p align=\"left\">398<\/p>\n<\/td>\n<td>\n<p align=\"left\">567<\/p>\n<\/td>\n<td>\n<p align=\"left\">743<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,847<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>341<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"112\" width=\"112\">\n<p align=\"left\"><strong>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a RIOT<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">3<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>34<\/strong><\/p>\n<\/td>\n<td data-colwidth=\"100\" width=\"100\">\n<p align=\"left\">47<\/p>\n<\/td>\n<td>\n<p align=\"left\">72<\/p>\n<\/td>\n<td>\n<p align=\"left\">111<\/p>\n<\/td>\n<td>\n<p align=\"left\">158<\/p>\n<\/td>\n<td>\n<p align=\"left\">219<\/p>\n<\/td>\n<td>\n<p align=\"left\">287<\/p>\n<\/td>\n<td>\n<p align=\"left\">891<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>134<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"112\" width=\"112\">\n<p align=\"left\"><strong>\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u0442\u0430\u0439\u043c\u0435\u0440\u0443 RIOT<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">1<\/p>\n<\/td>\n<td>\n<p align=\"left\">22<\/p>\n<\/td>\n<td data-colwidth=\"100\" width=\"100\">\n<p align=\"left\">31<\/p>\n<\/td>\n<td>\n<p align=\"left\">51<\/p>\n<\/td>\n<td>\n<p align=\"left\">78<\/p>\n<\/td>\n<td>\n<p align=\"left\">115<\/p>\n<\/td>\n<td>\n<p align=\"left\">161<\/p>\n<\/td>\n<td>\n<p align=\"left\">211<\/p>\n<\/td>\n<td>\n<p align=\"left\">723<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>95<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"112\" width=\"112\">\n<p align=\"left\"><strong>\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u0432\u0432\u043e\u0434\u0443-\u0432\u044b\u0432\u043e\u0434\u0443 RIOT<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<td>\n<p align=\"left\">8<\/p>\n<\/td>\n<td data-colwidth=\"100\" width=\"100\">\n<p align=\"left\">12<\/p>\n<\/td>\n<td>\n<p align=\"left\">18<\/p>\n<\/td>\n<td>\n<p align=\"left\">28<\/p>\n<\/td>\n<td>\n<p align=\"left\">41<\/p>\n<\/td>\n<td>\n<p align=\"left\">58<\/p>\n<\/td>\n<td>\n<p align=\"left\">74<\/p>\n<\/td>\n<td>\n<p align=\"left\">201<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>33<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"112\" width=\"112\">\n<p align=\"left\"><strong>\u041a\u043e\u043c\u0430\u043d\u0434\u044b \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">28<\/p>\n<\/td>\n<td>\n<p align=\"left\">177<\/p>\n<\/td>\n<td data-colwidth=\"100\" width=\"100\">\n<p align=\"left\">200<\/p>\n<\/td>\n<td>\n<p align=\"left\">296<\/p>\n<\/td>\n<td>\n<p align=\"left\">364<\/p>\n<\/td>\n<td>\n<p align=\"left\">528<\/p>\n<\/td>\n<td>\n<p align=\"left\">789<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,066<\/p>\n<\/td>\n<td>\n<p align=\"left\">5,928<\/p>\n<\/td>\n<td>\n<p align=\"left\">457<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"112\" width=\"112\">\n<p align=\"left\"><strong>\u041a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">3<\/p>\n<\/td>\n<td>\n<p align=\"left\">37<\/p>\n<\/td>\n<td data-colwidth=\"100\" width=\"100\">\n<p align=\"left\">54<\/p>\n<\/td>\n<td>\n<p align=\"left\">76<\/p>\n<\/td>\n<td>\n<p align=\"left\">111<\/p>\n<\/td>\n<td>\n<p align=\"left\">172<\/p>\n<\/td>\n<td>\n<p align=\"left\">260<\/p>\n<\/td>\n<td>\n<p align=\"left\">351<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,495<\/p>\n<\/td>\n<td>\n<p align=\"left\">142<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"112\" width=\"112\">\n<p align=\"left\"><strong>\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u043f\u043a\u043e\u0434\u044b<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">29<\/p>\n<\/td>\n<td>\n<p align=\"left\">125<\/p>\n<\/td>\n<td data-colwidth=\"100\" width=\"100\">\n<p align=\"left\">129<\/p>\n<\/td>\n<td>\n<p align=\"left\">137<\/p>\n<\/td>\n<td>\n<p align=\"left\">143<\/p>\n<\/td>\n<td>\n<p align=\"left\">148<\/p>\n<\/td>\n<td>\n<p align=\"left\">151<\/p>\n<\/td>\n<td>\n<p align=\"left\">151<\/p>\n<\/td>\n<td>\n<p align=\"left\">151<\/p>\n<\/td>\n<td>\n<p align=\"left\">141<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>\u0420\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434<\/h4>\n<ul>\n<li>\n<p><strong>STA (Store A)<\/strong>: 71,8% \u2014 \u0437\u0430\u043f\u0438\u0441\u044c \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0446\u0432\u0435\u0442\u043e\u0432, \u043f\u043e\u0437\u0438\u0446\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p><strong>STX (Store X)<\/strong>: 9,3% \u2014 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p><strong>STY (Store Y)<\/strong>: 8,5% \u2014 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430\u043c STX.<\/p>\n<\/li>\n<li>\n<p><strong>LDA (Load A)<\/strong>: 6,7% \u2014 \u0438\u0433\u0440\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0438 <em>\u0447\u0442\u0435\u043d\u0438\u0435<\/em> \u0438\u0437 TIA (\u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0439 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435).<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0440\u043e\u0447\u0435\u0435<\/strong>: 3,7% \u2014 \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u0430\u044f \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044f, \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c.<\/p>\n<\/li>\n<\/ul>\n<h4>\u0420\u0435\u0436\u0438\u043c\u044b \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438<\/h4>\n<ul>\n<li>\n<p><strong>\u041d\u0443\u043b\u0435\u0432\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430<\/strong>: 82,1% \u2014\u00a0<code>STA $02<\/code>,\u00a0<code>STX $1B<\/code>\u00a0(\u0441\u0430\u043c\u044b\u0435 \u0431\u044b\u0441\u0442\u0440\u044b\u0435 \u0438 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435).<\/p>\n<\/li>\n<li>\n<p><strong>\u0418\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u044f \u043f\u043e \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435<\/strong>: 13,2% \u2014\u00a0<code>STA $00,X<\/code>,\u00a0<code>STY $10,X<\/code>\u00a0(\u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0441\u043f\u0440\u0430\u0439\u0442\u043e\u0432).<\/p>\n<\/li>\n<li>\n<p><strong>\u0410\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u0430\u044f<\/strong>: 4,7% \u2014\u00a0<code>STA $001B<\/code>\u00a0(\u0440\u0435\u0434\u043a\u043e, \u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f).<\/p>\n<\/li>\n<\/ul>\n<h4>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b TIA, \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e<\/h4>\n<p><code>$02 (WSYNC) - 18,8% - \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0430 (\u0432\u0430\u0436\u043d\u0435\u0439\u0448\u0438\u0439 \u0442\u0430\u0439\u043c\u0438\u043d\u0433)<\/code><br \/><code>$1B (GRP0)  - 8,4%  - \u0434\u0430\u043d\u043d\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0438\u0433\u0440\u043e\u043a\u0430 0<\/code><br \/><code>$1C (GRP1)  - 7,0%  - \u0434\u0430\u043d\u043d\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0438\u0433\u0440\u043e\u043a\u0430 1<\/code><br \/><code>$2A (HMOVE) - 4,9%  - \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u0440\u043e\u0431-\u0438\u043c\u043f\u0443\u043b\u044c\u0441<\/code><br \/><code>$0E (PF1)   - 4,1%  - \u0440\u0435\u0433\u0438\u0441\u0442\u0440 1 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f<\/code><br \/><code>$0F (PF2)   - 3,7%  - \u0440\u0435\u0433\u0438\u0441\u0442\u0440 2 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f<\/code><\/p>\n<h4>\u0410\u043d\u0430\u043b\u0438\u0437 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 RIOT<\/h4>\n<p>\u0420\u0430\u0431\u043e\u0442\u0443 \u0441 RIOT \u043c\u043e\u0436\u043d\u043e \u0447\u0451\u0442\u043a\u043e \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u043d\u0430 \u0434\u0432\u0435 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438:<\/p>\n<p><strong>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 \u0442\u0430\u0439\u043c\u0435\u0440\u043e\u043c (78% \u0432\u0441\u0435\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 RIOT)<\/strong><\/p>\n<ul>\n<li>\n<p><strong>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b<\/strong>:\u00a0<code>$80-$87<\/code>\u00a0(\u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b 1T, 8T, 64T, 1024T \u043f\u043b\u044e\u0441 \u0447\u0442\u0435\u043d\u0438\u0435 \u0442\u0430\u0439\u043c\u0435\u0440\u0430).<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/strong>: \u0446\u0438\u043a\u043b\u044b \u0442\u0430\u0439\u043c\u0438\u043d\u0433\u043e\u0432, \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438, \u043f\u043e\u0434\u0441\u0447\u0451\u0442 \u043a\u0430\u0434\u0440\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0430\u0442\u0442\u0435\u0440\u043d<\/strong>: \u0437\u0430\u043f\u0438\u0441\u044c \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0442\u0430\u0439\u043c\u0435\u0440\u0430, \u0447\u0442\u0435\u043d\u0438\u0435 <code>$84<\/code>\u00a0\u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441\u0442\u0430\u0442\u0443\u0441\u0430.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 (22% \u0432\u0441\u0435\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 RIOT)<\/strong><\/p>\n<ul>\n<li>\n<p><strong>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b<\/strong>:\u00a0<code>$94-$97<\/code>\u00a0(\u0432\u0432\u043e\u0434 \u0441 \u0434\u0436\u043e\u0439\u0441\u0442\u0438\u043a\u0430\/\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0438 \u043a\u043e\u043d\u0441\u043e\u043b\u0438).<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/strong>: \u0447\u0442\u0435\u043d\u0438\u0435 \u0432\u0432\u043e\u0434\u0430 \u0438\u0433\u0440\u043e\u043a\u0430, \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u0441\u0431\u0440\u043e\u0441\u0430 \u0438\u0433\u0440\u044b.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0430\u0442\u0442\u0435\u0440\u043d<\/strong>: \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0447\u0442\u0435\u043d\u0438\u0435 (<code>LDA $94<\/code>), \u0432\u0440\u0435\u043c\u044f \u043e\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438.<\/p>\n<\/li>\n<\/ul>\n<h4>\u0421\u043e\u0441\u0442\u0430\u0432\u043d\u0430\u044f \u043e\u0446\u0435\u043d\u043a\u0430<\/h4>\n<p>\u0412 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439 \u043e\u0446\u0435\u043d\u043a\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u044b\u0435 \u0432\u0435\u0441\u0430, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u0433\u0440:<\/p>\n<p><code>\u041e\u0446\u0435\u043d\u043a\u0430 = (\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u043f\u043a\u043e\u0434\u043e\u0432 \u00d7 0.25) +<\/code><br \/><code>          (min(\u0414\u043e\u0441\u0442\u0443\u043f\u044b_TIA\/150, 1.0) \u00d7 0.30) +<\/code><br \/><code>          (min(\u0414\u043e\u0441\u0442\u0443\u043f\u044b_RIOT\/50, 1.0) \u00d7 0.20) +<\/code><br \/><code>          (min(\u0412\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f\/200, 1.0) \u00d7 0.15) +<\/code><br \/><code>          (min(\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u044b\/40, 1.0) \u00d7 0.10)<\/code><\/p>\n<p>\u041e\u0446\u0435\u043d\u043a\u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u0433\u0440 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043e\u0442 0,393 \u0434\u043e 1,004, \u0430 \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0432\u043d\u043e 0,853. \u042d\u0442\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u0430\u044f \u043e\u0446\u0435\u043d\u043a\u0430 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0440\u0430\u043d\u0436\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0445\u043e\u0436\u0435\u0441\u0442\u044c \u043a\u0430\u0436\u0434\u043e\u0433\u043e ROM \u043d\u0430 \u0438\u0433\u0440\u0443 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a, \u0430 \u043d\u0435 \u043e\u0434\u043d\u043e\u0439 \u043c\u0435\u0442\u0440\u0438\u043a\u0438. \u041a\u0430\u043a \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u044b\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c \u0432\u0435\u0441\u0430 \u043e\u0442\u0434\u0430\u044e\u0442 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043e\u043f\u043a\u043e\u0434\u0430\u043c \u0438 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c (TIA), \u0430 \u043f\u043e\u0442\u043e\u043a \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0432\u0432\u043e\u0434-\u0432\u044b\u0432\u043e\u0434 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u044b\u043c\u0438 \u0444\u0430\u043a\u0442\u043e\u0440\u0430\u043c\u0438.<\/p>\n<h3>\u041c\u0430\u0439\u043d\u0438\u043c \u0438\u0433\u0440\u044b \u0434\u043b\u044f Atari<\/h3>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0431\u044b\u043b\u0430 \u043a\u0440\u0430\u0439\u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u2014 \u043e\u0434\u043d\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430 Python, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b 4 \u041a\u0411 \u043c\u0438\u043d\u0443\u0441 \u0434\u0432\u0430 \u0431\u0430\u0439\u0442\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043b \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0445 \u043e\u043f\u043a\u043e\u0434\u043e\u0432, \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0445 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439 (\u0438\u043b\u0438 \u0446\u0438\u043a\u043b\u043e\u0432), \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u043d\u0430 ROM. \u041e\u043d \u0431\u044b\u043b \u043e\u0447\u0435\u043d\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u043c, \u0437\u0430 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u043e\u0441\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 300-400 ROM.<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0437\u0443\u0435\u043c\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430. \u0412 \u043c\u043e\u0451\u043c GTX 1070 \u0435\u0441\u0442\u044c 1920 \u044f\u0434\u0435\u0440 CUDA (\u044f \u0437\u043d\u0430\u044e \u044d\u0442\u043e, \u0445\u043e\u0442\u044f \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0438\u0433\u0440\u0430\u044e \u0432 TF2, Rocket League \u0438 Kerbal Space Program;\u00a0<a href=\"https:\/\/bbenchoff.github.io\/pages\/SXM2PCIe.html\" rel=\"noopener noreferrer nofollow\">nvidia, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u0430\u0440\u0438\u0442\u0435 \u043c\u043d\u0435 \u043f\u043b\u0430\u0442\u0443 H200 + SXM5 PCIe<\/a>), \u0430 \u0432 \u043c\u043e\u0451\u043c CPU \u044f\u0434\u0435\u0440 \u0432\u0441\u0435\u0433\u043e 20. \u0415\u0449\u0451 \u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u043e\u0435 \u044f\u0434\u0440\u043e CUDA \u043c\u043e\u0436\u0435\u0442 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c ROM. \u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c ROM \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u0445 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440, \u044f \u043c\u043e\u0433\u0443 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u043c\u0438\u043b\u043b\u0438\u043e\u043d ROM, \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0438\u0445 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432 CPU \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0443\u0440\u044b.<\/p>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 CUDA \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442 \u0432\u0441\u044e \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0443 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 GPU. \u041a\u0430\u0436\u0434\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b CUDA \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043e\u0434\u0438\u043d ROM \u043d\u0430 4 \u041a\u0411, \u0430 \u0437\u0430\u0442\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u0442\u043e\u0442 \u0436\u0435 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438: \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u043e\u043f\u043a\u043e\u0434\u044b, \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0451\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c TIA\/RIOT, \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u0443\u044e \u043e\u0446\u0435\u043d\u043a\u0443. \u041a\u043e\u0434 \u0431\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 CuPy:<\/p>\n<details class=\"spoiler\">\n<summary>Python<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">\"\"\" \u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 ROM Atari \u043d\u0430 CUDA \"\"\"  import cupy as cp import numpy as np import time from pathlib import Path  # \u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b ROM_SIZE = 4094  # \u0412\u0435\u043a\u0442\u043e\u0440 \u0441\u0431\u0440\u043e\u0441\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0437\u0436\u0435 BATCH_SIZE = 1024 * 256  # \u041f\u043e\u0440\u043e\u0433\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430\u0445 OPCODE_THRESHOLD = 0.58 TIA_THRESHOLD = 50 RIOT_THRESHOLD = 13 BRANCH_THRESHOLD = 150 JUMP_THRESHOLD = 37 INSTRUCTION_VARIETY = 100 MIN_SCORE = 0.52  # \u0412\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u043e\u043f\u043a\u043e\u0434\u044b 6502 (\u0432\u0441\u0435\u0433\u043e 151) VALID_OPCODES = np.array([     0x00, 0x01, 0x05, 0x06, 0x08, 0x09, 0x0A, 0x0D, 0x0E, 0x10, 0x11, 0x15, 0x16, 0x18,     0x19, 0x1D, 0x1E, 0x20, 0x21, 0x24, 0x25, 0x26, 0x28, 0x29, 0x2A, 0x2C, 0x2D, 0x2E,     0x30, 0x31, 0x35, 0x36, 0x38, 0x39, 0x3D, 0x3E, 0x40, 0x41, 0x45, 0x46, 0x48, 0x49,     0x4A, 0x4C, 0x4D, 0x4E, 0x50, 0x51, 0x55, 0x56, 0x58, 0x59, 0x5D, 0x5E, 0x60, 0x61,     0x65, 0x66, 0x68, 0x69, 0x6A, 0x6C, 0x6D, 0x6E, 0x70, 0x71, 0x75, 0x76, 0x78, 0x79,     0x7D, 0x7E, 0x81, 0x84, 0x85, 0x86, 0x88, 0x8A, 0x8C, 0x8D, 0x8E, 0x90, 0x91, 0x94,     0x95, 0x96, 0x98, 0x99, 0x9A, 0x9D, 0xA0, 0xA1, 0xA2, 0xA4, 0xA5, 0xA6, 0xA8, 0xA9,     0xAA, 0xAC, 0xAD, 0xAE, 0xB0, 0xB1, 0xB4, 0xB5, 0xB6, 0xB8, 0xB9, 0xBA, 0xBC, 0xBD,     0xBE, 0xC0, 0xC1, 0xC4, 0xC5, 0xC6, 0xC8, 0xC9, 0xCA, 0xCC, 0xCD, 0xCE, 0xD0, 0xD1,     0xD5, 0xD6, 0xD8, 0xD9, 0xDD, 0xDE, 0xE0, 0xE1, 0xE4, 0xE5, 0xE6, 0xE8, 0xE9, 0xEA,     0xEC, 0xED, 0xEE, 0xF0, 0xF1, 0xF5, 0xF6, 0xF8, 0xF9, 0xFD, 0xFE ], dtype=np.uint8)  # \u041e\u043f\u043a\u043e\u0434\u044b \u043f\u043e\u0442\u043e\u043a\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f BRANCH_OPCODES = np.array([0x10, 0x30, 0x50, 0x70, 0x90, 0xB0, 0xD0, 0xF0], dtype=np.uint8) JUMP_OPCODES = np.array([0x4C, 0x6C, 0x20], dtype=np.uint8)  def create_lookup_tables():     \"\"\"\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u043e\u0438\u0441\u043a\u0430 GPU \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 ROM\"\"\"     valid_lut = cp.zeros(256, dtype=cp.bool_)     valid_lut[VALID_OPCODES] = True          branch_lut = cp.zeros(256, dtype=cp.bool_)     branch_lut[BRANCH_OPCODES] = True          jump_lut = cp.zeros(256, dtype=cp.bool_)     jump_lut[JUMP_OPCODES] = True          # \u041f\u043e\u0438\u0441\u043a \u043a\u043e\u043c\u0430\u043d\u0434 TIA     tia_store_lut = cp.zeros(256, dtype=cp.bool_)     tia_store_lut[[0x85, 0x86, 0x84, 0x95, 0x96, 0x94]] = True          tia_load_lut = cp.zeros(256, dtype=cp.bool_)     tia_load_lut[[0xA5, 0xA6, 0xA4, 0xB5, 0xB6, 0xB4]] = True          tia_abs_lut = cp.zeros(256, dtype=cp.bool_)     tia_abs_lut[[0x8D, 0x8E, 0x8C, 0xAD, 0xAE, 0xAC]] = True          # \u041f\u043e\u0438\u0441\u043a \u043a\u043e\u043c\u0430\u043d\u0434 RIOT     riot_access_lut = cp.zeros(256, dtype=cp.bool_)     riot_access_lut[[0x85, 0x86, 0x84, 0xA5, 0xA6, 0xA4]] = True          # \u041c\u0430\u0441\u043a\u0438 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u043e\u0432 \u0430\u0434\u0440\u0435\u0441\u043e\u0432     tia_range_mask = cp.arange(256, dtype=cp.uint8) &lt;= 0x2F     riot_timer_mask = (cp.arange(256, dtype=cp.uint8) &gt;= 0x80) &amp; (cp.arange(256, dtype=cp.uint8) &lt;= 0x87)     riot_io_mask = (cp.arange(256, dtype=cp.uint8) &gt;= 0x94) &amp; (cp.arange(256, dtype=cp.uint8) &lt;= 0x97)          return {         'valid': valid_lut,         'branch': branch_lut,         'jump': jump_lut,         'tia_store': tia_store_lut,         'tia_load': tia_load_lut,         'tia_abs': tia_abs_lut,         'riot_access': riot_access_lut,         'tia_range': tia_range_mask,         'riot_timer': riot_timer_mask,         'riot_io': riot_io_mask     }  def analyze_roms(roms, lut):     \"\"\"\u0410\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c ROM \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043f\u043e\u0445\u043e\u0436\u0438\u0445 \u043d\u0430 \u0438\u0433\u0440\u044b \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432\"\"\"     batch_size = roms.shape[0]          # \u0410\u043d\u0430\u043b\u0438\u0437 \u043e\u043f\u043a\u043e\u0434\u043e\u0432     valid_opcodes_count = cp.sum(lut['valid'][roms], axis=1)     opcode_ratio = valid_opcodes_count.astype(cp.float32) \/ ROM_SIZE          # \u0410\u043d\u0430\u043b\u0438\u0437 \u043f\u043e\u0442\u043e\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f     branch_count = cp.sum(lut['branch'][roms], axis=1)     jump_count = cp.sum(lut['jump'][roms], axis=1)          # \u0410\u043d\u0430\u043b\u0438\u0437 TIA     tia_accesses = cp.zeros(batch_size, dtype=cp.int32)          # \u0410\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044f \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b     tia_store_zp = lut['tia_store'][roms[:, :-1]] &amp; lut['tia_range'][roms[:, 1:]]     tia_load_zp = lut['tia_load'][roms[:, :-1]] &amp; lut['tia_range'][roms[:, 1:]]     tia_zp_total = cp.sum(tia_store_zp | tia_load_zp, axis=1)     tia_accesses += tia_zp_total          # \u0410\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u0430\u044f \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044f     tia_abs_positions = lut['tia_abs'][roms[:, :-2]]     tia_abs_targets = lut['tia_range'][roms[:, 1:-1]] &amp; (roms[:, 2:] == 0x00)     tia_abs_total = cp.sum(tia_abs_positions &amp; tia_abs_targets, axis=1)     tia_accesses += tia_abs_total          # \u0410\u043d\u0430\u043b\u0438\u0437 RIOT     riot_accesses = cp.zeros(batch_size, dtype=cp.int32)          # \u0414\u043e\u0441\u0442\u0443\u043f \u043a \u0442\u0430\u0439\u043c\u0435\u0440\u0443     riot_timer_positions = lut['riot_access'][roms[:, :-1]]     riot_timer_targets = lut['riot_timer'][roms[:, 1:]]     riot_timer_hits = cp.sum(riot_timer_positions &amp; riot_timer_targets, axis=1)     riot_accesses += riot_timer_hits          # \u0414\u043e\u0441\u0442\u0443\u043f \u043a \u0432\u0432\u043e\u0434\u0443-\u0432\u044b\u0432\u043e\u0434\u0443     riot_io_positions = lut['riot_access'][roms[:, :-1]]     riot_io_targets = lut['riot_io'][roms[:, 1:]]     riot_io_hits = cp.sum(riot_io_positions &amp; riot_io_targets, axis=1)     riot_accesses += riot_io_hits          # \u041f\u043e\u0434\u0441\u0447\u0451\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u043f\u043a\u043e\u0434\u043e\u0432 \u0432 \u043f\u0435\u0440\u0432\u043e\u043c 1 \u041a\u0411 (\u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043a\u043e\u0434\u0430)     unique_opcodes = cp.zeros(batch_size, dtype=cp.int32)     first_kb = roms[:, :1024]  # \u041f\u0435\u0440\u0432\u044b\u0439 1 \u041a\u0411, \u0433\u0434\u0435 \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u043e\u0434          # \u041f\u043e\u0434\u0441\u0447\u0451\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u043f\u043a\u043e\u0434\u043e\u0432 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043a\u043e\u0434\u0430     for opcode in VALID_OPCODES:         has_opcode = cp.any(first_kb == opcode, axis=1)         unique_opcodes += has_opcode.astype(cp.int32)          # \u0421\u043e\u0441\u0442\u0430\u0432\u043d\u0430\u044f \u043e\u0446\u0435\u043d\u043a\u0430     scores = (         opcode_ratio * 0.25 +          cp.minimum(tia_accesses \/ 150.0, 1.0) * 0.30 +         cp.minimum(riot_accesses \/ 50.0, 1.0) * 0.20 +         cp.minimum(branch_count \/ 200.0, 1.0) * 0.15 +         cp.minimum(jump_count \/ 40.0, 1.0) * 0.10     )          # \u0420\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0445 ROM     promising = (         (opcode_ratio &gt;= OPCODE_THRESHOLD) &amp;         (tia_accesses &gt;= TIA_THRESHOLD) &amp;         (riot_accesses &gt;= RIOT_THRESHOLD) &amp;         (branch_count &gt;= BRANCH_THRESHOLD) &amp;         (jump_count &gt;= JUMP_THRESHOLD) &amp;         (unique_opcodes &gt;= INSTRUCTION_VARIETY) &amp;         (scores &gt;= MIN_SCORE)     )          return {         'scores': scores,         'opcode_ratio': opcode_ratio,         'tia_accesses': tia_accesses,         'riot_accesses': riot_accesses,         'branch_count': branch_count,         'jump_count': jump_count,         'unique_opcodes': unique_opcodes,         'promising': promising     }  def save_promising_rom(rom_data, score, rom_id, output_dir):     \"\"\"\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0435 ROM \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 number_score_timestamp.bin\"\"\"     timestamp = int(time.time())     filename = f\"{rom_id:06d}_{score:.3f}_{timestamp}.bin\"     filepath = output_dir \/ filename          with open(filepath, 'wb') as f:         f.write(rom_data.tobytes())          return filename  def main():     print(\"Finite Atari Machine - Streamlined CUDA Generator\")     print(\"=\" * 60)     print(f\"Batch size: {BATCH_SIZE:,} ROMs per batch\")     print(f\"ROM size: {ROM_SIZE:,} bytes\")     print()     print(\"Thresholds:\")     print(f\"  Opcodes: {OPCODE_THRESHOLD:.1%}\")     print(f\"  TIA: {TIA_THRESHOLD}+\")     print(f\"  RIOT: {RIOT_THRESHOLD}+\")     print(f\"  Branches: {BRANCH_THRESHOLD}+\")     print(f\"  Jumps: {JUMP_THRESHOLD}+\")     print(f\"  Unique opcodes: {INSTRUCTION_VARIETY}+\")     print(f\"  Min score: {MIN_SCORE:.2f}\")     print()          # \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e GPU     try:         gpu_props = cp.cuda.runtime.getDeviceProperties(0)         gpu_name = gpu_props['name'].decode()         total_mem = cp.cuda.runtime.memGetInfo()[1] \/\/ 1024**2         print(f\"GPU: {gpu_name}\")         print(f\"Memory: {total_mem:,} MB\")     except Exception:         print(\"GPU: CuPy device detected\")          print(\"\\nInitializing lookup tables...\")          # \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430     output_dir = Path(\"finite_atari_roms\")     output_dir.mkdir(exist_ok=True)          lookup_tables = create_lookup_tables()          # \u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430     total_generated = 0     promising_found = 0     start_time = time.time()     last_report = start_time     best_score_ever = 0.0          print(\"Starting ROM generation...\")     print(\"=\" * 60)          try:         while True:             batch_start = time.time()                          # \u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0431\u0430\u0442\u0447 ROM             roms = cp.random.randint(0, 256, size=(BATCH_SIZE, ROM_SIZE), dtype=cp.uint8)                          # \u0410\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c ROM             analysis = analyze_roms(roms, lookup_tables)                          # \u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c \u043d\u0430\u0438\u043b\u0443\u0447\u0448\u0443\u044e \u043e\u0446\u0435\u043d\u043a\u0443             current_best = float(cp.max(analysis['scores']))             if current_best &gt; best_score_ever:                 best_score_ever = current_best                          # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0435 ROM             promising_indices = cp.where(analysis['promising'])[0]                          if len(promising_indices) &gt; 0:                 # \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0435 ROM                 promising_roms = cp.asnumpy(roms[promising_indices])                 promising_scores = cp.asnumpy(analysis['scores'][promising_indices])                                  for i in range(len(promising_indices)):                     filename = save_promising_rom(                         promising_roms[i], promising_scores[i], promising_found, output_dir                     )                     promising_found += 1                          total_generated += BATCH_SIZE             batch_time = time.time() - batch_start                          # \u041e\u0442\u0447\u0451\u0442 \u043e \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0435             current_time = time.time()             if current_time - last_report &gt;= 4:                 # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u0430\u0438\u043b\u0443\u0447\u0448\u0443\u044e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 ROM \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0431\u0430\u0442\u0447\u0430                 scores = cp.asnumpy(analysis['scores'])                 best_idx = np.argmax(scores)                 best_opcodes = float(analysis['opcode_ratio'][best_idx])                 best_tia = int(analysis['tia_accesses'][best_idx])                 best_riot = int(analysis['riot_accesses'][best_idx])                 best_branches = int(analysis['branch_count'][best_idx])                 best_jumps = int(analysis['jump_count'][best_idx])                                  elapsed = current_time - start_time                 rate = total_generated \/ elapsed                 success_rate = promising_found \/ total_generated * 100 if total_generated &gt; 0 else 0                                  print(f\"\\rGenerated: {total_generated:,} | Found: {promising_found} | \"                       f\"Success: {success_rate:.8f}% | Rate: {rate:,.0f}\/sec | \"                       f\"Best: {best_score_ever:.3f} | \"                       f\"Op:{best_opcodes:.1%} TIA:{best_tia} RIOT:{best_riot} Br:{best_branches} Jmp:{best_jumps}\",                        end=\"\", flush=True)                                  last_report = current_time          except KeyboardInterrupt:         elapsed = time.time() - start_time         rate = total_generated \/ elapsed         success_rate = promising_found \/ total_generated * 100 if total_generated &gt; 0 else 0                  print(f\"\\n\\nStopped after {elapsed:.1f} seconds\")         print(f\"Total ROMs generated: {total_generated:,}\")         print(f\"Promising ROMs found: {promising_found}\")         print(f\"Success rate: {success_rate:.8f}%\")         print(f\"Average rate: {rate:,.0f} ROMs\/second\")         print(f\"Best score achieved: {best_score_ever:.4f}\")         print(f\"Results saved in: {output_dir}\")  if __name__ == \"__main__\":     main()<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0418 \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u043c\u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0430\u0436 \u043f\u043e 60 \u0442\u044b\u0441\u044f\u0447 \u00ab\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445\u00bb ROM \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0430\u043c \u044f \u043d\u0430\u0445\u043e\u0434\u0438\u043b \u043e\u0434\u0438\u043d \u00ab\u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439\u00bb ROM \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0435 2,59 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u0430 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 ROM, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 ROM \u0440\u0430\u0437 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043d\u0443\u0442.<\/p>\n<h3>\u041f\u0435\u0440\u0432\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u044b \u043d\u0435\u0443\u0434\u0430\u0447\u0438 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f<\/h3>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 <em>\u043c\u043d\u043e\u0433\u0438\u0445 \u043c\u0438\u043b\u043b\u0438\u0430\u0440\u0434\u043e\u0432<\/em>\u00a0\u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 ROM \u044f \u0441\u043e\u0431\u0440\u0430\u043b \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0434\u0435\u0441\u044f\u0442\u0438 \u0442\u044b\u0441\u044f\u0447, \u043f\u0440\u043e\u0448\u0435\u0434\u0448\u0438\u0445 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u0448\u0435 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0438. \u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u044d\u0442\u0430\u043f\u0443: \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0438\u0445 \u0432 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435.<\/p>\n<p>\u042f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0434\u0432\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u044d\u0442\u0438\u0445 \u0434\u0435\u0441\u044f\u0442\u0438 \u0442\u044b\u0441\u044f\u0447 ROM \u0432 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043f\u043e\u0445\u043e\u0436\u0438 \u043b\u0438 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0438\u0437 \u043d\u0438\u0445 \u043d\u0430 \u0438\u0433\u0440\u044b. \u041f\u0435\u0440\u0432\u044b\u043c \u0431\u044b\u043b \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440, \u043e\u0431\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 1,5 \u0442\u044b\u0441\u044f\u0447\u0430\u0445 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0445 ROM Atari (\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432) \u0438 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 1,5 \u0442\u044b\u0441\u044f\u0447\u0430\u0445 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 GPU \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 ROM (\u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432). \u041d\u0430 \u044d\u0442\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u044f \u043e\u0431\u0443\u0447\u0438\u043b \u043c\u043e\u0434\u0435\u043b\u044c (Random Forest) \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430\u043c\u0438 \u043a\u0430\u043a \u00ab\u0411\u0443\u0434\u0435\u0442 \u043b\u0438 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c ROM\u00bb \u0438 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u043c\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u00ab\u041a\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b TIA \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 2 \u0441\u0435\u043a\u0443\u043d\u0434 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f\u00bb.<\/p>\n<p>\u042d\u0442\u043e \u043d\u0430\u0443\u0447\u043d\u043e \u0442\u043e\u0447\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438. \u041f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c \u0432\u044b\u0432\u043e\u0434 \u0438\u0437 <a href=\"https:\/\/stella-emu.github.io\/\" rel=\"noopener noreferrer nofollow\">Stella<\/a> \u0438 <a href=\"https:\/\/www.mamedev.org\/\" rel=\"noopener noreferrer nofollow\">MAME<\/a>, \u044f \u0441\u043c\u043e\u0433 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043b \u043c\u043d\u0435, <em>\u043c\u043e\u0436\u0435\u0442<\/em> \u043b\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 ROM \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043d\u0430 Atari. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u044d\u0442\u043e\u0442 \u0441\u043f\u043e\u0441\u043e\u0431 \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b. \u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0432 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441 \u0441\u0430\u043c\u044b\u043c\u0438 \u0432\u044b\u0441\u043e\u043a\u0438\u043c\u0438 \u043e\u0446\u0435\u043d\u043a\u0430\u043c\u0438 \u043f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u043c\u0435\u0440\u0435 \u0431\u044b\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0447\u0451\u0440\u043d\u044b\u043c\u0438 \u044d\u043a\u0440\u0430\u043d\u0430\u043c\u0438. \u042d\u0442\u043e \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0432\u043f\u043e\u043b\u043d\u0435 \u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c, \u043a\u043e\u0433\u0434\u0430 \u044f \u043d\u0430\u0447\u0430\u043b \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c. \u0421\u0430\u043c\u044b\u0435 \u0432\u0430\u0436\u043d\u044b\u0435 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0438:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041f\u0440\u0438\u0437\u043d\u0430\u043a<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">execution_time<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.9847<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">output_lines<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.0086<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">stdout_length<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.0067<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">crashed<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.0000<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">stderr_length<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.0000<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">video_indicators<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.0000<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">audio_indicators<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.0000<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">tia_activity<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.0000<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">game_indicators<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.0000<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">error_indicators<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.0000<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u0441\u0442\u0430\u043b\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c: \u044f \u0432\u044b\u0431\u0438\u0440\u0430\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 ROM, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 <em>\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0438\u0441\u044c<\/em>, \u0430 \u043d\u0435 \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0435\u043b\u0430\u043b\u0438 <em>\u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435<\/em>. \u041f\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043e\u043d\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0438\u0441\u044c \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043b\u0438 \u0432 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0446\u0438\u043a\u043b. \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0431\u044b\u043b\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043c\u0430\u043d\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0434\u0435\u043b\u0430\u043b\u0438 \u043d\u0438\u0447\u0435\u0433\u043e, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0441\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043a \u043c\u0435\u0441\u0442\u0443 \u0440\u044f\u0434\u043e\u043c \u0441 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u043c \u0441\u0431\u0440\u043e\u0441\u0430. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0442\u0430\u043a\u043e\u0435 \u0438 <em>\u0434\u043e\u043b\u0436\u043d\u043e<\/em> \u0447\u0430\u0441\u0442\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u0430\u043c\u0443\u044e \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0434\u043b\u044f Atari:<\/p>\n<pre><code class=\"assembly\"> ; \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 $F000  F000: 4C 00 F0   ; JMP $F000 \u2014 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u043c<\/code><\/pre>\n<p>\u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441 F000 \u0438 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0430\u0434\u0440\u0435\u0441\u0443. \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u043a\u043e\u0434\u0430:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"\\frac{1}{256} \\times \\frac{1}{256} \\times \\frac{1}{256} = \\frac{1}{16777216}\" alt=\"\\frac{1}{256} \\times \\frac{1}{256} \\times \\frac{1}{256} = \\frac{1}{16777216}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/541\/379\/94c\/54137994c615d17b8fc770a27e2bdc7e.svg\" width=\"265\" height=\"42\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/541\/379\/94c\/54137994c615d17b8fc770a27e2bdc7e.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/541\/379\/94c\/54137994c615d17b8fc770a27e2bdc7e.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u0441\u0440\u0435\u0434\u0438 \u043a\u0430\u0436\u0434\u044b\u0445 16 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 ROM \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043e\u0434\u0438\u043d \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 ROM, \u043d\u0435 \u0434\u0435\u043b\u0430\u044e\u0449\u0438\u0439 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e. \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 30 \u043c\u0438\u043b\u043b\u0438\u0430\u0440\u0434\u043e\u0432 ROM \u044f \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u0435\u0433\u043e \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437. \u041d\u043e \u043c\u0435\u043d\u044f \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442.<\/p>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c, \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c. \u0418\u043b\u0438 \u0436\u0435 \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c\u0438 \u0431\u044b\u043b\u0438 \u043c\u043e\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f. \u041d\u043e \u0441\u0442\u043e\u0438\u0442 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0434\u043b\u044f \u0438\u0433\u0440 Atari \u043d\u0435\u0442 \u00ab\u043f\u043e\u0447\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e\u00bb \u043e\u0431\u0443\u0447\u0430\u044e\u0449\u0435\u0433\u043e \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430 \u2014 \u044d\u0442\u043e \u043b\u0438\u0448\u044c \u0448\u0435\u0434\u0435\u0432\u0440\u044b \u0438 \u043c\u0443\u0441\u043e\u0440.<\/p>\n<h3>\u0415\u0449\u0451 \u043e\u0434\u043d\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b: \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0432\u0441\u0451, \u0447\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e<\/h3>\n<p>\u041e\u0441\u043e\u0437\u043d\u0430\u0432, \u0447\u0442\u043e \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e \u2014 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043b \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u043b \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 ROM \u0438 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u043b \u0438\u0445 \u0432 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0443\u0440\u044b.<\/p>\n<details class=\"spoiler\">\n<summary>Python<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\"># ========================================================================== # #   \u0415\u0434\u0438\u043d\u044b\u0439 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440 Finite Atari (4 \u041a\u0411, \u0441\u0431\u0440\u043e\u0441 @ $F000) - \u0418\u0421\u041f\u0420\u0410\u0412\u041b\u0415\u041d\u041d\u0410\u042f \u0412\u0415\u0420\u0421\u0418\u042f # #   \u042d\u0442\u043e\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 ROM Atari 2600 \u043d\u0430  GPU \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 CUDA, #   \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u0442 \u0438\u0445 \u043d\u0430 GPU \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a, \u0438 \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 #   \u0438\u0445 \u0432 \u0431\u0435\u0437\u0433\u043e\u043b\u043e\u0432\u043e\u043c MAME \u043d\u0430 2 \u0441, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0435\u0441\u0442\u044c \u043b\u0438 \u0432 \u043d\u0438\u0445 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u0438\u0434\u0435\u043e. # #   \u0421\u043a\u0440\u0438\u043f\u0442 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430 GPU \u0441 CUDA \u0438 \u0441 MAME, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0432 PATH. # #   \u0412\u044b\u0432\u043e\u0434 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043f\u0430\u043f\u043a\u0443 \"finite_atari_roms\". # # ===========================================================================  from __future__ import annotations import cupy as cp, numpy as np, hashlib, subprocess, tempfile, time, textwrap from pathlib import Path from PIL import Image  # \u2500\u2500\u2500 1.  \u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 ROM_SIZE       = 4096 PAYLOAD_BYTES  = ROM_SIZE - 2 RESET_VECTOR   = (0x00, 0xF0)         # $F000 \u0432 little-endian  BATCH_SIZE     = 1024 * 256           # \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 256 \u0442\u044b\u0441\u044f\u0447 ROM \u043d\u0430 \u0431\u0430\u0442\u0447 GPU STATUS_EVERY   = 10                   # \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0442\u0447\u0435\u0439 \u043c\u0435\u0436\u0434\u0443 \u0432\u044b\u0432\u043e\u0434\u043e\u043c \u0441\u0442\u0430\u0442\u0443\u0441\u0430 OUTPUT_DIR     = Path(\"finite_atari_roms\"); OUTPUT_DIR.mkdir(exist_ok=True)  # \u041f\u043e\u0440\u043e\u0433\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0432\u0438\u0434\u0435\u043e BLACK_LEVEL          = 15             # 0-255 \u0441\u0435\u0440\u044b\u0439; \u2264 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \"\u0447\u0451\u0440\u043d\u044b\u0439\" NONBLACK_THRESHOLD   = 0.005          # \u2265 0,5 % \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u044f\u0440\u0447\u0435 \u21d2 \u0432\u0438\u0434\u0435\u043e DYNAMIC_THRESHOLD    = 0.01           # \u2265 1 % \u0445\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u21d2 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435  # \u041f\u043e\u0440\u043e\u0433\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a (\u0442\u0435 \u0436\u0435, \u0447\u0442\u043e \u0438 \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 Stella\/MAME) OPCODE_THRESHOLD    = 0.58 TIA_THRESHOLD       = 50 RIOT_THRESHOLD      = 13 BRANCH_THRESHOLD    = 150 JUMP_THRESHOLD      = 37 INSTRUCTION_VARIETY = 100 MIN_SCORE           = 0.52  # \u2500\u2500\u2500 2.  \u0422\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u043e\u0438\u0441\u043a\u0430 \u043e\u043f\u043a\u043e\u0434\u043e\u0432 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 # \u0412\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u043e\u043f\u043a\u043e\u0434\u044b 6502 \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0441\u0430\u043c\u043e\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0438\u0433\u0440 2600 VALID_OPCODES = np.array([     0x00,0x01,0x05,0x06,0x08,0x09,0x0A,0x0D,0x0E,0x10,0x11,0x15,0x16,0x18,     0x19,0x1D,0x1E,0x20,0x21,0x24,0x25,0x26,0x28,0x29,0x2A,0x2C,0x2D,0x2E,     0x30,0x31,0x35,0x36,0x38,0x39,0x3D,0x3E,0x40,0x41,0x45,0x46,0x48,0x49,     0x4A,0x4C,0x4D,0x4E,0x50,0x51,0x55,0x56,0x58,0x59,0x5D,0x5E,0x60,0x61,     0x65,0x66,0x68,0x69,0x6A,0x6C,0x6D,0x6E,0x70,0x71,0x75,0x76,0x78,0x79,     0x7D,0x7E,0x81,0x84,0x85,0x86,0x88,0x8A,0x8C,0x8D,0x8E,0x90,0x91,0x94,     0x95,0x96,0x98,0x99,0x9A,0x9D,0xA0,0xA1,0xA2,0xA4,0xA5,0xA6,0xA8,0xA9,     0xAA,0xAC,0xAD,0xAE,0xB0,0xB1,0xB4,0xB5,0xB6,0xB8,0xB9,0xBA,0xBC,0xBD,     0xBE,0xC0,0xC1,0xC4,0xC5,0xC6,0xC8,0xC9,0xCA,0xCC,0xCD,0xCE,0xD0,0xD1,     0xD5,0xD6,0xD8,0xD9,0xDD,0xDE,0xE0,0xE1,0xE4,0xE5,0xE6,0xE8,0xE9,0xEA,     0xEC,0xED,0xEE,0xF0,0xF1,0xF5,0xF6,0xF8,0xF9,0xFD,0xFE], dtype=np.uint8)  BRANCH_OPCODES = np.array([0x10,0x30,0x50,0x70,0x90,0xB0,0xD0,0xF0], dtype=np.uint8) JUMP_OPCODES   = np.array([0x4C,0x6C,0x20], dtype=np.uint8)  def create_luts():     \"\"\"\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u0443\u043b\u0435\u0432\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043f\u043e\u0438\u0441\u043a\u0430 \u0441 256 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 (cupy).\"\"\"     lut = {}     lut[\"valid\"]  = cp.zeros(256, cp.bool_); lut[\"valid\"][VALID_OPCODES]  = True     lut[\"branch\"] = cp.zeros(256, cp.bool_); lut[\"branch\"][BRANCH_OPCODES] = True     lut[\"jump\"]   = cp.zeros(256, cp.bool_); lut[\"jump\"][JUMP_OPCODES]     = True      # \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438 2600 \u0434\u043b\u044f \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a TIA\/RIOT     lut[\"tia_store\"] = cp.zeros(256, cp.bool_)     lut[\"tia_store\"][[0x84,0x85,0x86, 0x94,0x95,0x96]] = True   # STY\/STA\/STX (zp &amp; zp,x)     lut[\"tia_load\"]  = cp.zeros(256, cp.bool_)     lut[\"tia_load\" ][[0xA4,0xA5,0xA6, 0xB4,0xB5,0xB6]] = True   # LDY\/LDA\/LDX (zp &amp; zp,x)     lut[\"tia_abs\"]   = cp.zeros(256, cp.bool_)     lut[\"tia_abs\"  ][[0x8C,0x8D,0x8E, 0xAC,0xAD,0xAE]] = True   # \u0430\u043d\u0430\u043b\u043e\u0433\u0438 \u0434\u043b\u044f \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439      lut[\"riot_acc\"]  = cp.zeros(256, cp.bool_)     lut[\"riot_acc\"][[0x84,0x85,0x86, 0xA4,0xA5,0xA6]] = True      addr = cp.arange(256, dtype=cp.uint8)     lut[\"tia_range\"] = addr &lt;= 0x2F     lut[\"riot_tmr\"]  = (addr &gt;= 0x80) &amp; (addr &lt;= 0x87)     lut[\"riot_io\"]   = (addr &gt;= 0x94) &amp; (addr &lt;= 0x97)     return lut  # \u2500\u2500\u2500 3.  \u042d\u0432\u0440\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 \u043d\u0430 GPU \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 def analyse_batch(roms: cp.ndarray, lut) -&gt; tuple[np.ndarray, cp.ndarray]:     \"\"\"     \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 (interesting_mask, scores) \u0434\u043b\u044f 2D-\u043c\u0430\u0441\u0441\u0438\u0432\u0430 uint8 ROM.     \u041a\u0430\u0436\u0434\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 = \u043e\u0434\u0438\u043d ROM.     \"\"\"     valid_cnt    = cp.sum(lut[\"valid\"][roms], axis=1)     opcode_ratio = valid_cnt.astype(cp.float32) \/ ROM_SIZE     branch_cnt   = cp.sum(lut[\"branch\"][roms], axis=1)     jump_cnt     = cp.sum(lut[\"jump\"  ][roms], axis=1)      # --- \u041e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a TIA --------------------------------------------------------     tia_acc  = cp.sum((lut[\"tia_store\"][roms[:,:-1]] | lut[\"tia_load\"][roms[:,:-1]])                       &amp; lut[\"tia_range\"][roms[:,1:]], axis=1)     tia_acc += cp.sum(lut[\"tia_abs\"][roms[:,:-2]]                       &amp; lut[\"tia_range\"][roms[:,1:-1]]                       &amp; (roms[:,2:] == 0x00), axis=1)      # --- \u041e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a RIOT -------------------------------------------------------     riot_acc  = cp.sum(lut[\"riot_acc\"][roms[:,:-1]] &amp; lut[\"riot_tmr\"][roms[:,1:]], axis=1)     riot_acc += cp.sum(lut[\"riot_acc\"][roms[:,:-1]] &amp; lut[\"riot_io\" ][roms[:,1:]], axis=1)      # --- \u0420\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u0435 \u043e\u043f\u043a\u043e\u0434\u043e\u0432 \u0432 \u043f\u0435\u0440\u0432\u043e\u043c 1 \u041a\u0411 --------------------------------------     uniq = cp.zeros(roms.shape[0], dtype=cp.int32)     first_kb = roms[:, :1024]     for op in VALID_OPCODES:         uniq += cp.any(first_kb == op, axis=1)      scores = (opcode_ratio * 0.25 +               cp.minimum(tia_acc \/ 150.0, 1.0) * 0.30 +               cp.minimum(riot_acc \/ 50.0, 1.0)  * 0.20 +               cp.minimum(branch_cnt \/ 200.0, 1.0) * 0.15 +               cp.minimum(jump_cnt \/ 40.0, 1.0)   * 0.10)      interesting = ((opcode_ratio &gt;= OPCODE_THRESHOLD) &amp;                    (tia_acc      &gt;= TIA_THRESHOLD) &amp;                    (riot_acc     &gt;= RIOT_THRESHOLD) &amp;                    (branch_cnt   &gt;= BRANCH_THRESHOLD) &amp;                    (jump_cnt     &gt;= JUMP_THRESHOLD) &amp;                    (uniq         &gt;= INSTRUCTION_VARIETY) &amp;                    (scores       &gt;= MIN_SCORE))      return interesting, scores  # \u2500\u2500\u2500 4.  \u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430 Lua (\u0441\u043d\u044d\u043f\u0448\u043e\u0442 \u0434\u0432\u0443\u0445 \u043a\u0430\u0434\u0440\u043e\u0432) - \u0418\u0421\u041f\u0420\u0410\u0412\u041b\u0415\u041d\u041e \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 SNAPSHOT_LUA = textwrap.dedent(\"\"\"     local s = manager.machine.screens[\":screen\"]     local frame_count = 0     emu.register_frame_done(function ()         frame_count = frame_count + 1         if     frame_count == 1  then s:snapshot(\"first.png\")         elseif frame_count == 60 then s:snapshot(\"second.png\"); manager.machine:exit() end     end, \"snapper\") \"\"\")  # \u2500\u2500\u2500 5. \u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0432\u0438\u0434\u0435\u043e \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 def _hash16(img: Path) -&gt; str:     with Image.open(img) as im:         im = im.convert(\"L\").resize((16,16), Image.NEAREST)         return hashlib.sha1(im.tobytes()).hexdigest()  def _frame_is_nonblack(img: Path) -&gt; bool:     with Image.open(img) as im:         g = np.asarray(im.convert(\"L\"))     return (g &gt; BLACK_LEVEL).mean() &gt;= NONBLACK_THRESHOLD  def rom_video_flags(rom: bytes, *, mame=\"mame\", seconds=2.0) -&gt; tuple[bool,bool]:     \"\"\"     \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 (has_video, is_dynamic).     \u2022 has_video  \u2192 \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u0430\u0434\u0440 \u043d\u0435 \u0447\u0451\u0440\u043d\u044b\u0439     \u2022 is_dynamic \u2192 \u2265 1 % \u0445\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u043a\u0430\u0434\u0440\u043e\u043c  1 \u0438 60     \"\"\"     with tempfile.TemporaryDirectory() as td_s:         td = Path(td_s)         (td \/ \"test.bin\").write_bytes(rom)         (td \/ \"snapshot.lua\").write_text(SNAPSHOT_LUA)          base = [mame, \"a2600\", \"-cart\", \"test.bin\",                 \"-seconds_to_run\", str(seconds),                 \"-nothrottle\", \"-window\", \"-sound\", \"none\", \"-skip_gameinfo\"]          for flag in (\"-autoboot_script\", \"-script\"):             try:                 subprocess.run(base + [flag, \"snapshot.lua\"],                                cwd=td, stdout=subprocess.DEVNULL,                                stderr=subprocess.DEVNULL, timeout=seconds*5,                                check=True)                 break             except (subprocess.CalledProcessError, subprocess.TimeoutExpired):                 if flag == \"-autoboot_script\":                     continue                 return (False, False)          # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043a\u0430\u0434\u0440\u043e\u0432 \u0432 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u043f\u0430\u043f\u043a\u0435 \u0438 \u0432 \u043f\u043e\u0434\u043f\u0430\u043f\u043a\u0435 snap         f1, f2 = td \/ \"first.png\", td \/ \"second.png\"         snap_dir = td \/ \"snap\"         if not f1.exists() and snap_dir.exists():             snap_f1 = snap_dir \/ \"first.png\"             snap_f2 = snap_dir \/ \"second.png\"             if snap_f1.exists():                 f1 = snap_f1             if snap_f2.exists():                 f2 = snap_f2          if not f1.exists():             return (False, False)          nonblack = _frame_is_nonblack(f1)         if not nonblack or not f2.exists():             return (nonblack, False)          diff_bits = bin(int(_hash16(f1),16) ^ int(_hash16(f2),16)).count(\"1\")         dynamic = diff_bits \/ 256.0 &gt;= DYNAMIC_THRESHOLD         return (nonblack, dynamic)  # \u2500\u2500\u2500 6.  \u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 ROM \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 def generate_batch(n: int) -&gt; np.ndarray:     payload = np.random.randint(0, 256, size=(n, PAYLOAD_BYTES), dtype=np.uint8)     reset   = np.tile(np.array(RESET_VECTOR, dtype=np.uint8), (n,1))     return np.hstack((payload, reset))  # \u2500\u2500\u2500 7.  \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0446\u0438\u043a\u043b \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 def main():     lut = create_luts()     tot_gen = tot_int = tot_vid = tot_dyn = 0     batch_idx = 0     start = time.perf_counter()      try:         while True:             roms_cpu = generate_batch(BATCH_SIZE); tot_gen += BATCH_SIZE              roms_gpu = cp.asarray(roms_cpu)             keep, _ = analyse_batch(roms_gpu, lut)             keep = keep.get(); del roms_gpu             interesting = roms_cpu[keep]             tot_int += len(interesting)              for rom in interesting:                 has_vid, is_dyn = rom_video_flags(rom.tobytes())                  # \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c, \u0435\u0441\u043b\u0438 \u041b\u042e\u0411\u041e\u0415 \u0438\u0437 \u0443\u0441\u043b\u043e\u0432\u0438\u0439 \u0438\u0441\u0442\u0438\u043d\u043d\u043e                 if has_vid or is_dyn:                     sha = hashlib.sha1(rom).hexdigest()[:12]                     (OUTPUT_DIR \/ f\"{sha}.bin\").write_bytes(rom.tobytes())                  # \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435                 if has_vid:                     tot_vid += 1           # \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u0430\u0434\u0440 \u043d\u0435 \u0447\u0451\u0440\u043d\u044b\u0439                 if is_dyn:                     tot_dyn += 1           # \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0430 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f              batch_idx += 1             if batch_idx % STATUS_EVERY == 0:                 elapsed = time.perf_counter() - start                 rate = int(tot_gen \/ elapsed) if elapsed else 0                 print(f\"{tot_gen:,d} generated | \"                       f\"{tot_int:,d} interesting | {tot_vid:,d} with video | \"                       f\"{tot_dyn:,d} dynamic | {rate:,d} ROM\/s\", flush=True)      except KeyboardInterrupt:         pass  # \u0431\u0435\u0441\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0445\u043e\u0434      elapsed = time.perf_counter() - start     rate = int(tot_gen \/ elapsed) if elapsed else 0     print(\"\u2500\"*72)     print(f\"TOTAL: {tot_gen:,d} generated | {tot_int:,d} interesting | \"           f\"{tot_vid:,d} with video | {tot_dyn:,d} dynamic | {rate:,d} ROM\/s\")  if __name__ == \"__main__\":     main()<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u042d\u0442\u043e\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 4 \u041a\u0411 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0437\u0430\u0442\u0435\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u0442 \u0438\u0445 \u0432 \u043f\u043e\u0438\u0441\u043a\u0430\u0445 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a \u043d\u0430 GPU. \u041d\u0430 Nvidia GeForce GTX 1070 \u043e\u043d \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e <strong>62150 ROM\/\u0441<\/strong>. \u0424\u0438\u043b\u044c\u0442\u0440\u0443\u044f \u043f\u043e \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0430\u043c, \u044f \u043f\u043e\u043b\u0443\u0447\u0430\u044e \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u00ab\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u043c\u0443\u00bb ROM (\u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0449\u0435\u043c\u0443 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0438) \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0435 2,5 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u0430 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 ROM.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 ROM \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f CPU, \u0433\u0434\u0435 \u043e\u043d\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 MAME \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438. \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0432\u043e\u0434\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430, \u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u043d\u043e\u0447\u044c:<\/p>\n<p><code>TOTAL: 1,804,075,008 generated | 456 interesting | 16 with video | 11 dynamic | 62,156 ROM\/s<\/code><\/p>\n<p>\u0418\u0437 1,8 \u043c\u0438\u043b\u043b\u0438\u0430\u0440\u0434\u0430 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 ROM \u0442\u043e\u043b\u044c\u043a\u043e 456 \u043f\u0440\u043e\u0448\u043b\u0438 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0442\u0435\u0441\u0442. \u0418\u0437 \u043d\u0438\u0445 16 \u0438\u043c\u0435\u044e\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u0438\u0434\u0435\u043e\u0432\u044b\u0432\u043e\u0434, \u0443 11 \u0432\u0438\u0434\u0435\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u0434\u0432\u0438\u0436\u043d\u044b\u043c.<\/p>\n<h3>\u0427\u0442\u043e \u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b<\/h3>\n<p>\u0412\u043e\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u044d\u0442\u043e\u0433\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430. \u0412\u0441\u0435 \u044d\u0442\u0438 ROM \u0431\u044b\u043b\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0438\u0437 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u043d\u044b \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a \u0438 \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u044b \u0447\u0435\u0440\u0435\u0437 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440 Atari. \u0412\u0441\u0435 \u043e\u043d\u0438 \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 \u0432\u0438\u0434\u0435\u043e\u0432\u044b\u0432\u043e\u0434 \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0438\u043b\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6df\/d97\/f9a\/6dfd97f9a6134f8b3a6fa02dec92d88f.gif\" alt=\"Random ROM output 1\" title=\"\u041f\u043e\u043b\u043e\u0441\u044b, \u0434\u0432\u0438\u0433\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u043f\u043e \u0441\u0435\u0440\u043e\u043c\u0443 \u043f\u043e\u043b\u044e. \u041f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0434\u043e\u0436\u0434\u044c? \u0421\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u0439 \u0444\u043e\u043d, \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u043b\u043e\u0439 \u0441\u043f\u0440\u0430\u0439\u0442\u043e\u0432.\" width=\"656\" height=\"308\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6df\/d97\/f9a\/6dfd97f9a6134f8b3a6fa02dec92d88f.gif 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6df\/d97\/f9a\/6dfd97f9a6134f8b3a6fa02dec92d88f.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043e\u043b\u043e\u0441\u044b, \u0434\u0432\u0438\u0433\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u043f\u043e \u0441\u0435\u0440\u043e\u043c\u0443 \u043f\u043e\u043b\u044e. \u041f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0434\u043e\u0436\u0434\u044c? \u0421\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u0439 \u0444\u043e\u043d, \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u043b\u043e\u0439 \u0441\u043f\u0440\u0430\u0439\u0442\u043e\u0432.<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2aa\/687\/d2f\/2aa687d2f0f4e3bc83a819beec54f936.gif\" alt=\"Random ROM output 2\" title=\"\u0421\u0442\u043e\u043b\u0431\u0447\u0430\u0442\u044b\u0439 \u0433\u043b\u0438\u0442\u0447-\u0430\u0440\u0442. \u0414\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u043f\u043e \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0443, \u043f\u043e\u0447\u0442\u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u043e\u0435.\" width=\"656\" height=\"308\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2aa\/687\/d2f\/2aa687d2f0f4e3bc83a819beec54f936.gif 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2aa\/687\/d2f\/2aa687d2f0f4e3bc83a819beec54f936.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0421\u0442\u043e\u043b\u0431\u0447\u0430\u0442\u044b\u0439 \u0433\u043b\u0438\u0442\u0447-\u0430\u0440\u0442. \u0414\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u043f\u043e \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0443, \u043f\u043e\u0447\u0442\u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u043e\u0435.<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8bb\/11a\/246\/8bb11a246057d2b3ec078107ed0c8e55.gif\" alt=\"Random ROM output 3\" title=\"\u0421\u043a\u0440\u043e\u043b\u043b\u044f\u0449\u0438\u0435\u0441\u044f \u0447\u0451\u0440\u043d\u044b\u0435 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438 \u0441 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0430\u043c\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438. \u0415\u0441\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u043f\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0438!\" width=\"634\" height=\"478\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8bb\/11a\/246\/8bb11a246057d2b3ec078107ed0c8e55.gif 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8bb\/11a\/246\/8bb11a246057d2b3ec078107ed0c8e55.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0421\u043a\u0440\u043e\u043b\u043b\u044f\u0449\u0438\u0435\u0441\u044f \u0447\u0451\u0440\u043d\u044b\u0435 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438 \u0441 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0430\u043c\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438. \u0415\u0441\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u043f\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0438!<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d55\/784\/554\/d557845540e01d0511c8d15ad0793cfa.gif\" alt=\"Random ROM output 4\" title=\"\u0420\u0430\u0439 \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0451\u043d\u043d\u044b\u0445 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u044b\u0445 \u0441\u0442\u0440\u043e\u043a. \u041f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0435 \u043c\u0435\u0440\u0446\u0430\u043d\u0438\u0435 \u0441 \u043d\u0430\u043c\u0451\u043a\u043e\u043c \u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443.\" width=\"656\" height=\"336\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d55\/784\/554\/d557845540e01d0511c8d15ad0793cfa.gif 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d55\/784\/554\/d557845540e01d0511c8d15ad0793cfa.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0430\u0439 \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0451\u043d\u043d\u044b\u0445 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u044b\u0445 \u0441\u0442\u0440\u043e\u043a. \u041f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0435 \u043c\u0435\u0440\u0446\u0430\u043d\u0438\u0435 \u0441 \u043d\u0430\u043c\u0451\u043a\u043e\u043c \u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443.<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/127\/aad\/7e6\/127aad7e63d0faaea6b86c5235d52947.gif\" alt=\"Random ROM output 5\" title=\"\u0421\u0442\u0440\u0430\u043d\u043d\u043e \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u044b\u0435 \u043b\u0435\u0441\u0442\u043d\u0438\u0446\u044b? \u041e\u0434\u043d\u0430 \u0438\u0437 \u043d\u0438\u0445 \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e... \u0441\u0434\u0435\u043b\u0430\u043d\u0430 \u0432\u0440\u0443\u0447\u043d\u0443\u044e?\" width=\"1455\" height=\"565\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/127\/aad\/7e6\/127aad7e63d0faaea6b86c5235d52947.gif 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/127\/aad\/7e6\/127aad7e63d0faaea6b86c5235d52947.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0421\u0442\u0440\u0430\u043d\u043d\u043e \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u044b\u0435 \u043b\u0435\u0441\u0442\u043d\u0438\u0446\u044b? \u041e\u0434\u043d\u0430 \u0438\u0437 \u043d\u0438\u0445 \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e&#8230; \u0441\u0434\u0435\u043b\u0430\u043d\u0430 \u0432\u0440\u0443\u0447\u043d\u0443\u044e?<\/figcaption><\/div>\n<\/figure>\n<h3>\u0420\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0442\u043e\u0438\u0433\u0440\u0430<\/h3>\n<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043c\u043e\u0439 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440 \u0434\u0435\u043b\u0430\u043b \u0443\u043f\u043e\u0440 \u043d\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430, \u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u043d\u0435\u0447\u0442\u043e \u0431\u043e\u043b\u0435\u0435, \u0447\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434. ROM, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043d\u0430\u0437\u0432\u0430\u043b <code>51014<\/code>\u00a0(\u0441\u0430\u043c ROM \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u043e <a href=\"https:\/\/bbenchoff.github.io\/assets\/pages\/roms\/5101496f45e8b.bin\" rel=\"noopener noreferrer nofollow\">\u0441\u0441\u044b\u043b\u043a\u0435<\/a>) \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u043d\u0430 \u0438\u0433\u0440\u0443. \u042d\u0442\u043e \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430, \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043d\u0430 \u0432\u0432\u043e\u0434 \u0438\u0433\u0440\u043e\u043a\u0430. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043d\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u043d\u0438\u0436\u0435 GIF:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/78d\/073\/972\/78d0739724d83c5931791060a619c178.gif\" alt=\"51014 without using the controller\" title=\"51014 \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\" width=\"300\" height=\"223\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/78d\/073\/972\/78d0739724d83c5931791060a619c178.gif 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/78d\/073\/972\/78d0739724d83c5931791060a619c178.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>51014 \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430<\/figcaption><\/div>\n<\/figure>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3ca\/597\/fac\/3ca597facc4f6f8c9f66875d007c12e5.gif\" alt=\"5104, pressing Up on the joystick a few times\" title=\"51014 \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u00ab\u0432\u0432\u0435\u0440\u0445\u00bb \u043d\u0430 \u0434\u0436\u043e\u0439\u0441\u0442\u0438\u043a\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\" width=\"300\" height=\"223\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3ca\/597\/fac\/3ca597facc4f6f8c9f66875d007c12e5.gif 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3ca\/597\/fac\/3ca597facc4f6f8c9f66875d007c12e5.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>51014 \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u00ab\u0432\u0432\u0435\u0440\u0445\u00bb \u043d\u0430 \u0434\u0436\u043e\u0439\u0441\u0442\u0438\u043a\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437<\/figcaption><\/div>\n<\/figure>\n<p>ROM <code>51014<\/code>\u00a0\u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0436\u0451\u043b\u0442\u043e\u0433\u043e \u0444\u043e\u043d\u0430 \u0441 \u0434\u0432\u0443\u043c\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u043c\u0438 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043a\u0440\u0430\u0441\u043d\u044b\u043c\u0438 \u043f\u043e\u043b\u043e\u0441\u0430\u043c\u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435. \u0415\u0441\u0442\u044c \u0438 \u0442\u0440\u0435\u0442\u044c\u044f \u043f\u043e\u043b\u043e\u0441\u0430 (\u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043f\u0430\u0440\u0430 \u043a\u0440\u0430\u0441\u043d\u044b\u0445 \u043f\u043e\u043b\u043e\u0441), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u0430; \u043f\u043e\u0445\u043e\u0436\u0435, \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u0436\u0434\u044b\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u044b\u0445 \u0441\u0442\u0440\u043e\u043a \u043e\u043d\u0430 \u0440\u0430\u0437\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u043d\u0430\u0436\u0438\u043c\u0430\u0442\u044c \u00ab\u0432\u0432\u0435\u0440\u0445\u00bb \u043d\u0430 \u0434\u0436\u043e\u0439\u0441\u0442\u0438\u043a\u0435, \u044d\u0442\u0430 \u0440\u0430\u0437\u043e\u0440\u0432\u0430\u043d\u043d\u0430\u044f \u043f\u0430\u0440\u0430 \u043f\u043e\u043b\u043e\u0441 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u0412\u0432\u043e\u0434 \u0438\u0433\u0440\u043e\u043a\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434.<\/p>\n<p>\u0421 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043d\u0435 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u044f\u0435\u0442, \u043d\u043e \u0431\u0435\u0437\u0443\u043c\u043d\u043e \u043e\u0441\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0431\u044b\u043b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d <em>\u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u0442\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/em>. \u0415\u0441\u043b\u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0435\u0449\u0451 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0431\u0449\u0438\u0439 ROM, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0433\u0440\u0443!<\/p>\n<h3>\u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430?<\/h3>\n<p>\u042f \u0432\u044b\u0431\u0440\u0430\u043b Atari 2600 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a. \u042d\u0442\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u0430, \u0432 \u043d\u0435\u0439 \u043d\u0435\u0442 \u043c\u044d\u043f\u043f\u0435\u0440\u043e\u0432 \u043f\u0430\u043c\u044f\u0442\u0438, ROM \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0430 \u0435\u0449\u0451 \u0432 \u043d\u0435\u0439 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u00ab\u0437\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043b\u043e\u0433\u043e\u0442\u0438\u043f\u0430 Nintendo\u00bb, \u043a\u0430\u043a \u0432 \u043f\u0435\u0440\u0432\u043e\u043c Game Boy. \u041f\u043e \u0441\u0443\u0442\u0438, \u0435\u0441\u043b\u0438 \u0432\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0432 Atari \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0431\u0430\u0439\u0442\u044b, \u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f <em>\u0447\u0442\u043e-\u0442\u043e<\/em> \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0435. \u042d\u0442\u043e \u044f \u0438 \u0434\u043e\u043a\u0430\u0437\u0430\u043b.<\/p>\n<p>\u041c\u043d\u0435 \u043f\u043e\u0441\u043e\u0432\u0435\u0442\u043e\u0432\u0430\u043b\u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, NES \u0438\u043b\u0438 Game Boy. \u041e\u043d\u0438 \u043f\u043e\u0434\u043e\u0439\u0434\u0443\u0442 \u043d\u0435 \u0442\u0430\u043a \u0445\u043e\u0440\u043e\u0448\u043e, \u043a\u0430\u043a 2600.<\/p>\n<p><strong>NES<\/strong>\u00a0\u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u043f\u043e\u0447\u0442\u0438 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0439 \u0438\u0433\u0440\u044b \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u043c\u044d\u043f\u043f\u0435\u0440\u044b \u043f\u0430\u043c\u044f\u0442\u0438. \u041d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0431\u0430\u0439\u0442\u044b \u0432 ROM \u0438 \u043e\u0436\u0438\u0434\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430. \u0422\u043e\u0447\u043d\u0435\u0435, <em>\u043c\u043e\u0436\u043d\u043e<\/em>, \u043d\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0435\u043c \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b Atari. \u0412 NES \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u044b\u0435 ROM \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0434\u043b\u044f \u043a\u043e\u0434\u0430 \u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0438. \u041e\u043d\u0438 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430. \u041c\u043e\u0436\u043d\u043e \u0441\u0434\u0430\u043c\u043f\u0438\u0442\u044c \u0432 CHR ROM \u043c\u0443\u0441\u043e\u0440, \u043a\u043e\u0433\u0434\u0430 \u0432 PRG \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f Tetris, \u043d\u043e \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043b\u0438\u0448\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0448\u0443\u043c. \u0415\u0441\u043b\u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c PRG \u0438\u0433\u0440\u044b Mario 3 \u0438, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c, \u043a\u0430\u043a \u043e\u0434\u0438\u043d \u0440\u0430\u0437\u043e\u043a \u043c\u0438\u0433\u043d\u0451\u0442 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044c \u0441\u043f\u0440\u0430\u0439\u0442\u0430 \u041c\u0430\u0440\u0438\u043e.<\/p>\n<p><strong>Game Boy<\/strong>\u00a0\u0442\u0440\u0435\u0431\u0443\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435 ROM \u043d\u0430\u0445\u043e\u0434\u0438\u043b\u0441\u044f 48-\u0431\u0430\u0439\u0442\u043d\u044b\u0439 \u043b\u043e\u0433\u043e\u0442\u0438\u043f Nintendo. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438 \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443, \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0435\u0433\u043e \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438, \u043d\u043e, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0438\u0433\u0440\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0441\u044f, \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c\u0441\u044f \u0446\u0435\u043b\u044b\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u044b\u0439 ROM. \u0422\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0447\u0438\u043f\u044b \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0431\u0430\u043d\u043a\u043e\u0432.<\/p>\n<p>\u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u044d\u0442\u0438\u0445 \u043a\u043e\u043d\u0441\u043e\u043b\u0435\u0439, Atari 2600 \u043f\u0440\u043e\u0441\u0442\u0430 \u0434\u043e \u0442\u0443\u043f\u0438\u0437\u043d\u044b. \u041e\u043d\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u0438\u043a\u043e\u043c \u0432 ROM \u0431\u0435\u0437 \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0437\u0430\u0449\u0438\u0442\u044b. \u041e\u043d\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e \u043f\u043e\u0441\u043b\u0435 \u0434\u0435\u0432\u044f\u0442\u0438 \u043a\u043e\u043c\u0430\u043d\u0434.\u00a0\u0415\u0441\u043b\u0438 \u0442\u0440\u044f\u0441\u0442\u0438 \u044d\u0442\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043e\u043b\u0433\u043e, \u0442\u043e <em>\u0447\u0442\u043e-\u0442\u043e<\/em> \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u0430\u0434\u0435\u0442.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 LLM \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u0433\u0440 Atari. \u041d\u043e \u044f \u0441\u0447\u0438\u0442\u0430\u044e, \u0447\u0442\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e\u0442\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0432\u0435\u0441\u044c \u0441\u043c\u044b\u0441\u043b \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u041e\u0431\u0443\u0447\u0438\u0432 LLM \u043d\u0430 \u0442\u044b\u0441\u044f\u0447\u0435 \u0441 \u043b\u0438\u0448\u043d\u0438\u043c \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0445 \u0438\u0433\u0440 \u0434\u043b\u044f Atari, \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e-\u0442\u043e, \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u0449\u0435\u0435 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0443\u044e \u0438\u0433\u0440\u0443 \u0434\u043b\u044f Atari, \u0430 \u0442\u043e \u0438 \u043d\u0438\u0447\u0435\u0433\u043e. \u041c\u043e\u044f \u043c\u0435\u0442\u043e\u0434\u0438\u043a\u0430 \u0441 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0435\u0439 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0435\u0439 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0432\u044b\u0432\u043e\u0434\u0430 \u2014 \u044d\u0442\u043e \u043b\u0443\u0447\u0448\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0438\u0437 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0441\u0442\u0438. \u041c\u043e\u044f \u0446\u0435\u043b\u044c \u2014 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0433\u0440\u0430\u0431\u0435\u043b\u044c\u043d\u0443\u044e \u0438\u0433\u0440\u0443, \u043d\u043e \u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u0433\u0440\u0430\u0431\u0435\u043b\u044c\u043d\u0443\u044e \u0438\u0433\u0440\u0443 \u0438\u0437 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u0434\u043d\u044f\u0442\u044c\u0441\u044f \u043d\u0430 \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0432\u0432\u0435\u0440\u0445, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 SETI@Home, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u043c\u0430\u0448\u0438\u043d \u0438\u0449\u0443\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0432 \u043a\u043e\u0441\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0448\u0443\u043c\u0435. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435, \u0447\u0442\u043e GPU \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u043c\u0438\u0440\u0443 \u043c\u0430\u0439\u043d\u044f\u0442 \u044d\u043d\u0442\u0440\u043e\u043f\u0438\u044e \u0434\u043b\u044f \u0438\u0433\u0440 Atari, \u0430 \u0437\u0430\u0442\u0435\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0434\u043b\u044f \u043e\u0446\u0435\u043d\u043a\u0438 \u043d\u0430 \u0438\u0433\u0440\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u042d\u0442\u043e \u0430\u0431\u0441\u0443\u0440\u0434\u043d\u0430\u044f \u0438\u0434\u0435\u044f. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0441\u0442\u0430\u043d\u0435\u0442 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442. \u041f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u044d\u0442\u043e \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u043c\u0430\u0439\u043d\u0438\u0442\u044c \u043c\u0443\u0441\u043e\u0440\u043d\u044b\u0435 \u043a\u0440\u0438\u043f\u0442\u043e\u043a\u043e\u0439\u043d\u044b.<\/p>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d2b\/f3b\/818\/d2bf3b8181d473fc9b4ae5c6a686fe34.png\" alt=\"It was the best of times, it was the blurst of times?\" title=\"\" width=\"413\" height=\"314\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/d2b\/f3b\/818\/d2bf3b8181d473fc9b4ae5c6a686fe34.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d2b\/f3b\/818\/d2bf3b8181d473fc9b4ae5c6a686fe34.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041c\u044b\u0441\u043b\u044c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0438\u0437 \u0445\u0430\u043e\u0441\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0432\u0438\u0434\u0435\u043e\u0438\u0433\u0440\u044b, \u043f\u043e\u043d\u0430\u0447\u0430\u043b\u0443 \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0430\u0431\u0441\u0443\u0440\u0434\u043d\u043e\u0439, \u043d\u043e, \u0435\u0449\u0451 \u043d\u0435 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0432 \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443, \u044f \u0443\u0436\u0435 \u0437\u043d\u0430\u043b, \u0447\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u0432\u0441\u0451 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f. \u041c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u044d\u0442\u043e \u0438 \u043a\u0430\u043a \u0444\u0438\u043b\u043e\u0441\u043e\u0444\u0441\u043a\u0438\u0439\/\u043c\u044b\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442, \u0438 \u043a\u0430\u043a \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u043e\u0441\u0442\u044c.<\/p>\n<p>\u042f \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e \u0442\u0435\u043e\u0440\u0435\u043c\u0443 \u043e \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0431\u0435\u0437\u044c\u044f\u043d. \u0414\u0430, \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u043e\u0431\u0435\u0437\u044c\u044f\u043d \u0440\u0430\u043d\u043e \u0438\u043b\u0438 \u043f\u043e\u0437\u0434\u043d\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0443\u0442 \u0428\u0435\u043a\u0441\u043f\u0438\u0440\u0430, \u043d\u043e \u0438\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0435\u043c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0443 \u0412\u0441\u0435\u043b\u0435\u043d\u043d\u043e\u0439. \u042f \u043f\u0440\u043e\u0448\u0443 \u043e\u0431\u0435\u0437\u044c\u044f\u043d \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0428\u0435\u043a\u0441\u043f\u0438\u0440\u0430, \u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c <em>\u0445\u043e\u0442\u044c \u0447\u0442\u043e-\u0442\u043e<\/em>.<\/p>\n<p>\u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043b\u043e\u0432\u043e \u00abbanana\u00bb \u0432 ASCII \u0440\u0430\u0432\u043d\u0430 \u0432\u0441\u0435\u0433\u043e<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"\\frac{1}{256}^6 = \\frac{1}{281474976710656}\" alt=\"\\frac{1}{256}^6 = \\frac{1}{281474976710656}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2bb\/f43\/45a\/2bbf4345a95eda82f0aa603120c03a5c.svg\" width=\"222\" height=\"46\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2bb\/f43\/45a\/2bbf4345a95eda82f0aa603120c03a5c.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2bb\/f43\/45a\/2bbf4345a95eda82f0aa603120c03a5c.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0438\u043b\u0438 300 \u0442\u0440\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u043e\u0431\u0435\u0437\u044c\u044f\u043d. \u041d\u043e \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043d\u0435 \u00abbanana\u00bb, \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e <em>\u0441\u043b\u043e\u0432\u043e<\/em>. \u041b\u044e\u0431\u043e\u0435 \u0441\u043b\u043e\u0432\u0430\u0440\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e. \u041c\u0435\u043d\u044f \u043d\u0435 \u0432\u043e\u043b\u043d\u0443\u0435\u0442, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0438\u0433\u0440\u0430 <em>Yar\u2019s Revenge<\/em>. \u042f \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u043e\u0447\u0443 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0447\u0442\u043e-\u0442\u043e, \u0447\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043d\u0430 Atari. \u042d\u0442\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043f\u0440\u043e\u0449\u0435.<\/p>\n<p>\u0418 \u044d\u0442\u043e <em>\u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0430\u044f<\/em> \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u043c\u043e\u0435\u0439 \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0435 Atari. \u041f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0435, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0430 Atari, \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"assembly\"> ; \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0432 $F000  F000: A9 84       ; LDA #$84        - \u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u0430 (\u043a\u0440\u0430\u0441\u043d\u044b\u0439\/\u043e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u0439) F002: 85 09       ; STA $09         - \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 COLUBK (\u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0446\u0432\u0435\u0442\u0430 \u0444\u043e\u043d\u0430) F004: 85 02       ; STA $02         - \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 WSYNC (\u043e\u0436\u0438\u0434\u0430\u0435\u043c \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438) F006: 4C 04 F0    ; JMP $F004       - \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u0441\u0442\u0440\u043e\u043a\u0435 WSYNC (\u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0446\u0438\u043a\u043b)<\/code><\/pre>\n<p>\u0412\u0441\u0435\u0433\u043e \u0434\u0435\u0432\u044f\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u0438\u0445 \u0442\u043e\u0436\u0435. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c\u0441\u044f \u0441 <code>A9<\/code>, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043c\u043e\u0433\u0443\u0442 \u0438\u0434\u0442\u0438 \u043b\u044e\u0431\u044b\u0435 \u0438\u0437 128 \u0446\u0432\u0435\u0442\u043e\u0432. \u0417\u0430\u0442\u0435\u043c \u0438\u0434\u0451\u0442 <code>85 09<\/code>\u00a0\u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0446\u0432\u0435\u0442\u0430 \u0444\u043e\u043d\u0430,\u00a0<code>85 02<\/code>\u00a0\u0434\u043b\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f <code>WSYNC<\/code> \u0438 <code>4C 04 F0<\/code>\u00a0\u0434\u043b\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u043a \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u0435. \u0418\u0442\u043e\u0433\u043e<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"\\frac{1}{256} \\times \\frac{128}{256} \\times \\frac{1}{256} \\times \\frac{1}{256} \\times \\frac{1}{256} \\times \\frac{1}{256} \\times \\frac{1}{256} \\times \\frac{1}{256} \\times \\frac{1}{256} = \\frac{1}{36893488147419103232}\" alt=\"\\frac{1}{256} \\times \\frac{128}{256} \\times \\frac{1}{256} \\times \\frac{1}{256} \\times \\frac{1}{256} \\times \\frac{1}{256} \\times \\frac{1}{256} \\times \\frac{1}{256} \\times \\frac{1}{256} = \\frac{1}{36893488147419103232}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8ba\/4d0\/c5c\/8ba4d0c5c6198701ac8a6d38b558e20a.svg\" width=\"737\" height=\"42\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8ba\/4d0\/c5c\/8ba4d0c5c6198701ac8a6d38b558e20a.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8ba\/4d0\/c5c\/8ba4d0c5c6198701ac8a6d38b558e20a.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0438\u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 36 \u043f\u0435\u043d\u0442\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e\u0447\u0442\u0438 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0439 \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u0438\u043b\u043b\u0438\u0430\u0440\u0434\u043e\u0432 ROM \u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0443 <em>\u0447\u0442\u043e-\u0442\u043e<\/em> \u0437\u0430 \u0441\u0432\u043e\u0438 \u0443\u0441\u0438\u043b\u0438\u044f.<\/p>\n<p>\u0412\u0435\u0441\u044c \u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 <a href=\"https:\/\/github.com\/bbenchoff\/FiniteAtariMachine\" rel=\"noopener noreferrer nofollow\">Finite Atari Machine<\/a><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/918026\/\"> https:\/\/habr.com\/ru\/articles\/918026\/<\/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-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><\/figure>\n<p>\u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u044f \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u043e\u043a\u043e\u043b\u043e 30 \u043c\u0438\u043b\u043b\u0438\u0430\u0440\u0434\u043e\u0432 \u0444\u0430\u0439\u043b\u043e\u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e 4 \u041a\u0411. \u0418\u0437 \u044d\u0442\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a \u0438\u0437 \u043f\u043e\u043b\u043d\u043e\u0439 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 ROM Atari \u0431\u044b\u043b\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 10 \u0442\u044b\u0441\u044f\u0447. \u0417\u0430\u0442\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u043f\u0440\u043e\u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u0438\u0445 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430 Atari 2600, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043b\u0438 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0438\u0437 \u044d\u0442\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438\u0433\u0440\u043e\u0439 \u0434\u043b\u044f Atari. \u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0437\u0430\u0434\u0430\u0432\u0430\u043b, \u043e\u043d \u043d\u0438\u043a\u043e\u043c\u0443 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043e\u0433\u0440\u043e\u043c\u043d\u0443\u044e \u043f\u0443\u0441\u0442\u0443\u044e \u0442\u0440\u0430\u0442\u0443 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432. \u0427\u0442\u043e, \u0435\u0441\u043b\u0438 \u0437\u0430\u0441\u0443\u043d\u0443\u0442\u044c \u0432 GPU \u043c\u0438\u043b\u043b\u0438\u0430\u0440\u0434 \u043e\u0431\u0435\u0437\u044c\u044f\u043d \u0438 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u0445 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u0433\u0440\u0443 \u0434\u043b\u044f Atari 2600?<\/p>\n<p>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0443 GPU, \u0418\u0418 \u0438 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u043c\u043e\u0436\u0435\u043c (\u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e) \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 Python \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0430\u043c\u043f\u0438\u0442 \u043c\u0443\u0441\u043e\u0440 \u0432 ROM \u043f\u043e 4 \u041a\u0411 \u0438 \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442: \u00ab\u043f\u043e\u0445\u043e\u0436\u0435 \u043b\u0438 \u044d\u0442\u043e \u043d\u0430 \u0438\u0433\u0440\u0443?\u00bb. \u041f\u0440\u043e\u0435\u043a\u0442 \u0431\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d \u043d\u0435 \u0438\u0437 \u043d\u043e\u0441\u0442\u0430\u043b\u044c\u0433\u0438\u0438, \u043c\u043e\u0435\u0439 \u043f\u0435\u0440\u0432\u043e\u0439 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u044e \u0431\u044b\u043b\u0430 NES. \u042f \u0432\u043e\u0437\u043d\u0430\u043c\u0435\u0440\u0438\u043b\u0441\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0447\u0442\u043e \u043d\u0435\u0432\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u043c\u043e \u043e\u0431\u0448\u0438\u0440\u043d\u043e\u0435 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043d\u0430\u0439\u0434\u0451\u0442\u0441\u044f \u043b\u0438 \u0442\u0430\u043c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0435.<\/p>\n<h3>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b<\/h3>\n<p>\u041d\u0438\u043a\u0442\u043e \u043d\u0435 \u0447\u0438\u0442\u0430\u0435\u0442 \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u043a\u0440\u043e\u043b\u043b\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0440\u0430\u0437\u0443 \u0434\u0430\u043c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440, \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0441\u0430\u043c\u044b\u0435 \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u044b\u0435 \u0438\u0437 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 ROM Atari. \u0417\u0434\u0435\u0441\u044c \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0433\u0435\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u0438\u043b\u043b\u0438\u0430\u0440\u0434\u044b \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440.<\/p>\n<p><a href=\"https:\/\/bbenchoff.github.io\/assets\/pages\/finiteatarirunner.html\" rel=\"noopener noreferrer nofollow\">https:\/\/bbenchoff.github.io\/assets\/pages\/finiteatarirunner.html<\/a><\/p>\n<p><strong>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435: \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u0435 \u0433\u0440\u043e\u043c\u043a\u043e\u0441\u0442\u044c, \u0432 <\/strong><a href=\"https:\/\/github.com\/EmulatorJS\/EmulatorJS\" rel=\"noopener noreferrer nofollow\"><strong>EmulatorJS<\/strong><\/a><strong> \u0435\u0441\u0442\u044c \u0431\u0430\u0433.<\/strong><\/p>\n<h3>\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u044b \u0437\u0430\u0434\u0430\u0447\u0438<\/h3>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u0440\u0442\u0440\u0438\u0434\u0436 Atari 2600 \u2014 \u044d\u0442\u043e \u0431\u043b\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 4 \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442\u0430. \u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0432 \u043d\u0451\u043c 4096 \u0431\u0430\u0439\u0442\u043e\u0432, \u0438\u043b\u0438 32768 \u0431\u0438\u0442. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 2<sup>32768<\/sup>\u00a0\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 ROM. \u0414\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p>\u042d\u0442\u043e 10<sup>10159<\/sup>\u00a0\u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u0433\u0440 \u0434\u043b\u044f Atari.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430 \u0417\u0435\u043c\u043b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 10<sup>20<\/sup>\u00a0\u043f\u0435\u0441\u0447\u0438\u043d\u043e\u043a.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u043e\u0439 \u0412\u0441\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e 10<sup>80<\/sup>\u00a0\u043f\u0440\u043e\u0442\u043e\u043d\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<p>\u0415\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0446\u0435\u043b\u044b\u0439 \u0418\u0418-\u0434\u0430\u0442\u0430\u0446\u0435\u043d\u0442\u0440, \u0442\u043e, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0434\u043b\u044f \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0447\u0435\u0433\u043e-\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u0438\u0441\u044c \u0431\u044b \u0433\u043e\u0434\u044b. \u041d\u043e \u0435\u0441\u043b\u0438 \u043f\u043e\u0434\u043e\u0439\u0442\u0438 \u043a \u0434\u0435\u043b\u0443 \u0441 \u0443\u043c\u043e\u043c \u0438 \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e, \u0442\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u044b \u0437\u0430\u0434\u0430\u0447\u0438 \u0441\u0438\u043b\u044c\u043d\u043e \u0441\u043e\u043a\u0440\u0430\u0442\u044f\u0442\u0441\u044f. \u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u0438\u0441\u043a\u0430 \u00ab\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0439\u00bb \u0438\u0433\u0440\u044b \u0434\u043b\u044f Atari \u0431\u044b\u043b \u0431\u044b \u0442\u0430\u043a\u0438\u043c:<\/p>\n<ol>\n<li>\n<p>\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c ROM, \u0441\u0434\u0430\u043c\u043f\u0438\u0432 4 \u041a\u0411 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \/dev\/random \u0432 \u0444\u0430\u0439\u043b.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0432 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0414\u0435\u043b\u0430\u0435\u043c \u043e\u0434\u0438\u043d-\u043f\u044f\u0442\u044c \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p>\u0424\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u043c \u0438\u043b\u0438 \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0435\u043c \u0438\u0445 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0418\u0418.<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043b\u0443\u0447\u0448\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<\/ol>\n<p>\u042d\u0442\u043e \u0431\u044b \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u0435\u0441\u043b\u0438 \u0431\u044b \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f, \u043f\u043e\u043a\u0430 \u0447\u0451\u0440\u043d\u044b\u0435 \u0434\u044b\u0440\u044b \u043d\u0435 \u043f\u043e\u0433\u043b\u043e\u0442\u044f\u0442 \u0412\u0441\u0435\u043b\u0435\u043d\u043d\u0443\u044e. \u041d\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u0443\u043c\u043d\u0435\u0435 \u2014 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043d\u0430 \u0440\u0430\u043d\u043d\u0438\u0445 \u044d\u0442\u0430\u043f\u0430\u0445 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0434\u043b\u044f \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043c\u0443\u0441\u043e\u0440\u0430 \u0435\u0449\u0451 \u0434\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430. \u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a \u043d\u0430\u043c \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 ROM Atari.<\/p>\n<h3>\u042d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0438<\/h3>\n<p>\u042f \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0441\u044c \u044d\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0439 ROM, \u0430 \u043b\u0438\u0448\u044c \u043f\u044b\u0442\u0430\u044e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 <em>\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435<\/em>. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e \u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442\u044c \u043a \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0443\u043c\u043e\u043c:<\/p>\n<p><strong>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0435 \u043e\u043f\u043a\u043e\u0434\u044b: <\/strong>\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 6507 (\u0434\u0430\u043b\u044c\u0448\u0435 \u044f \u0431\u0443\u0434\u0443 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e 6502, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0431\u0435\u0441\u0438\u0442\u044c \u0432\u0430\u0441) \u0438\u043c\u0435\u0435\u0442 151 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 \u043e\u043f\u043a\u043e\u0434, \u0438 \u044d\u0442\u0438 \u043e\u043f\u043a\u043e\u0434\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432\u043e \u0432\u0441\u0435\u0439 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0435 ROM. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u0431\u0443\u0434\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0435\u0441\u0442\u044c \u043b\u0438 \u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043d\u043e\u0433\u043e \u043e\u043f\u043a\u043e\u0434\u043e\u0432. \u0412\u043e\u0442 \u043a\u0430\u043a\u0438\u0435 \u043e\u043f\u043a\u043e\u0434\u044b \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u044b:<\/p>\n<p><code>0x00, 0x01, 0x05, 0x06, 0x08, 0x09, 0x0A, 0x0D, 0x0E, 0x10, 0x11, 0x15, 0x16, 0x18, 0x19, 0x1D, 0x1E, 0x20, 0x21, 0x24, 0x25, 0x26, 0x28, 0x29, 0x2A, 0x2C, 0x2D, 0x2E, 0x30, 0x31, 0x35, 0x36, 0x38, 0x39, 0x3D, 0x3E, 0x40, 0x41, 0x45, 0x46, 0x48, 0x49, 0x4A, 0x4C, 0x4D, 0x4E, 0x50, 0x51, 0x55, 0x56, 0x58, 0x59, 0x5D, 0x5E, 0x60, 0x61, 0x65, 0x66, 0x68, 0x69, 0x6A, 0x6C, 0x6D, 0x6E, 0x70, 0x71, 0x75, 0x76, 0x78, 0x79, 0x7D, 0x7E, 0x81, 0x84, 0x85, 0x86, 0x88, 0x8A, 0x8C, 0x8D, 0x8E, 0x90, 0x91, 0x94, 0x95, 0x96, 0x98, 0x99, 0x9A, 0x9D, 0xA0, 0xA1, 0xA2, 0xA4, 0xA5, 0xA6, 0xA8, 0xA9, 0xAA, 0xAC, 0xAD, 0xAE, 0xB0, 0xB1, 0xB4, 0xB5, 0xB6, 0xB8, 0xB9, 0xBA, 0xBC, 0xBD, 0xBE, 0xC0, 0xC1, 0xC4, 0xC5, 0xC6, 0xC8, 0xC9, 0xCA, 0xCC, 0xCD, 0xCE, 0xD0, 0xD1, 0xD5, 0xD6, 0xD8, 0xD9, 0xDD, 0xDE, 0xE0, 0xE1, 0xE4, 0xE5, 0xE6, 0xE8, 0xE9, 0xEA, 0xEC, 0xED, 0xEE, 0xF0, 0xF1, 0xF5, 0xF6, 0xF8, 0xF9, 0xFD, 0xFE<\/code><\/p>\n<p>\u0421\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u043c\u0435\u044e\u0442 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c 59% \u0431\u044b\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c \u043e\u043f\u043a\u043e\u0434\u043e\u043c (151 \u0438\u0437 256 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0431\u0430\u0439\u0442\u043e\u0432). \u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u0433\u0440\u0430\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043b\u0443\u0447\u0448\u0435. \u0412 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 ROM Atari \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442 \u2014 \u044d\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u0430\u044f \u0447\u0430\u0441\u0442\u044c, \u0430 \u0432\u0441\u0451 \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0433\u043e \u2014 \u044d\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430. \u041f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0432 \u0432\u0441\u0451 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0445 ROM Atari, \u044f \u0432\u044b\u044f\u0441\u043d\u0438\u043b, \u0447\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435 75% \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u0438\u0437 \u043e\u043f\u043a\u043e\u0434\u043e\u0432.<\/p>\n<p><strong>\u0414\u0443\u0440\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0441 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u043c \u0441\u0431\u0440\u043e\u0441\u0430:<\/strong>\u00a0\u0432 ROM Atari \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u0441\u0431\u0440\u043e\u0441\u0430 \u043d\u0430 \u0442\u043e\u0447\u043a\u0443 \u0432\u0445\u043e\u0434\u0430 \u043a\u043e\u0434\u0430. \u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0434\u0432\u0430 \u0431\u0430\u0439\u0442\u0430 \u043a\u043e\u0434\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 \u043e\u0442 <code>0xF000<\/code>\u00a0\u0434\u043e <code>0xFFFF<\/code>. \u042f \u043c\u043e\u0433\u0443 \u0441\u0436\u0443\u043b\u044c\u043d\u0438\u0447\u0430\u0442\u044c, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0432 ROM \u043d\u0430 4 \u041a\u0411 \u043c\u0438\u043d\u0443\u0441 \u0434\u0432\u0430 \u0431\u0430\u0439\u0442\u0430, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u0441\u0431\u0440\u043e\u0441\u0430 \u043f\u0440\u0438 \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u0438.\u00a0<em>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u043e \u0432 4096 \u0440\u0430\u0437 \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u0430\u0431\u043e\u0442\u044b<\/em>.<\/p>\n<p><strong>\u0412\u0432\u043e\u0434 <em>\u0438 <\/em>\u0432\u044b\u0432\u043e\u0434?!<\/strong>\u00a0\u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a TIA (Television Interface Adapter), \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0432\u044b\u0432\u043e\u0434 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 RIOT (RAM-I\/O-Timer), \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043b\u0438 \u043e\u043d \u0432\u0432\u043e\u0434 \u0438 \u0432\u044b\u0432\u043e\u0434. TIA \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0439 \u0438 \u0437\u0432\u0443\u043a\u043e\u043c, \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u0432 \u0447\u0440\u0435\u0437\u0432\u044b\u0447\u0430\u0439\u043d\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0445 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0438 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 \u0432\u043e \u0432\u0441\u0435\u0445 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u0433\u0440\u0430\u0445 \u0434\u043b\u044f Atari. \u041f\u0440\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e:<\/p>\n<ul>\n<li>\n<p>90% \u0438\u0437 \u043d\u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044e \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b (<code>STA $02<\/code>,\u00a0<code>STX $06<\/code>,\u00a0<code>STY $00<\/code>).<\/p>\n<\/li>\n<li>\n<p>80% \u0438\u0437 \u043d\u0438\u0445 \u2014 \u044d\u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u044b STA, 10% \u2014 STX, 10% \u2014 STY.<\/p>\n<\/li>\n<li>\n<p>\u0427\u0430\u0441\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u0430\u044f \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044f (<code>STA $00,X<\/code>,\u00a0<code>STY $10,X<\/code>).<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0435\u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 WSYNC ($02) \u2014 18,8% \u043e\u0442 \u0432\u0441\u0435\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a TIA (\u0438\u0433\u0440\u044b \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0441 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u043e\u043c).<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b TIA, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0438\u0433\u0440\u0430\u043c\u0438:<\/p>\n<p><code>$02 (WSYNC) - 18,8% \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 - \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0441 \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u043e\u043c<\/code><br \/><code>$1B (GRP0) - 8,4% \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 - \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0438\u0433\u0440\u043e\u043a\u0430 0<\/code><br \/><code>$1C (GRP1) - 7,0% \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 - \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0438\u0433\u0440\u043e\u043a\u0430 1<\/code><br \/><code>$2A (HMOVE) - 4,9% \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 - \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435<\/code><br \/><code>$0E\/$0F (PF1\/PF2) - \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u043e 7,8% - \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f<\/code><\/p>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u043b\u0435\u043f\u0443\u044e \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 TIA \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 <code>$00-$2F<\/code>, \u044f \u0438\u0441\u043a\u0430\u043b \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u043a\u043e\u043c\u0430\u043d\u0434, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u0433\u0440\u0430\u0445.<\/p>\n<p>\u0418\u0437-\u0437\u0430 \u0437\u0435\u0440\u043a\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 RIOT \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u0435\u0435. \u0412 Atari 2600 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u043f\u043e\u043b\u043d\u043e\u0435 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u043e\u0432, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u0430\u0434\u0440\u0435\u0441\u0430\u043c. \u0427\u0438\u043f RIOT \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442:<\/p>\n<ul>\n<li>\n<p>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0442\u0430\u0439\u043c\u0435\u0440\u0430: \u0438\u0445 \u043a\u0430\u043d\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 <code>$0280-$0287<\/code>, \u043d\u043e \u0438\u0437-\u0437\u0430 \u0437\u0435\u0440\u043a\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u043d\u0438 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0433\u0443\u0442 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0442\u044c\u0441\u044f \u0432 <code>$80-$87<\/code>, <code>$180-$187<\/code>, <code>$380-$387<\/code> \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430: \u0438\u0445 \u043a\u0430\u043d\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 <code>$0294-$0297<\/code>, \u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u043e\u043d\u0438 \u0437\u0435\u0440\u043a\u0430\u043b\u044f\u0442\u0441\u044f \u043d\u0430 <code>$94-$97<\/code>, <code>$194-$197<\/code> \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u0430\u0445 ROM \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 \u043e\u0442\u0437\u0435\u0440\u043a\u0430\u043b\u0435\u043d\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435. \u0422\u0438\u043f\u0438\u0447\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 <code>STA $80<\/code>\u00a0(\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0442\u0430\u0439\u043c\u0435\u0440\u0430) \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432 ROM \u0432 \u0432\u0438\u0434\u0435 <code>85 80 ; STA $80 (\u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044f \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b)<\/code>, \u0430 \u043d\u0435 \u0432 \u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u043d\u043e\u043c \u0432\u0438\u0434\u0435 <code>8D 80 02 ; STA $0280 (\u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u0430\u044f \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044f)<\/code>. \u041c\u043e\u044f \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0430 \u0438\u0449\u0435\u0442 \u0442\u0430\u043a\u0438\u0435 \u043c\u0435\u0441\u0442\u0430.<\/p>\n<p><strong>\u0412\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b.<\/strong>\u00a0\u041c\u044b \u0438\u0449\u0435\u043c \u0438\u0433\u0440\u044b, \u0430 \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0433\u0440\u0435 \u0435\u0441\u0442\u044c \u0446\u0438\u043a\u043b\u044b \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430. \u041e\u043d\u0438 \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u043c\u0430\u043d\u0434 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f (\u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0446\u0438\u043a\u043b\u043e\u0432 \u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0439) \u0438 \u043a\u043e\u043c\u0430\u043d\u0434 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 (\u0434\u043b\u044f \u043f\u043e\u0434\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0438 \u043e\u0431\u0449\u0435\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f). \u0412 \u043a\u043e\u0434\u0435 \u043e\u043d\u0438 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f (\u0446\u0438\u043a\u043b\u043e\u0432) \u0438 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u043f\u0435\u0440\u0451\u0434 (\u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432).<\/p>\n<ul>\n<li>\n<p>\u041e\u043f\u043a\u043e\u0434\u044b \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f:\u00a0<code>0x10, 0x30, 0x50, 0x70, 0x90, 0xB0, 0xD0, 0xF0.<\/code><\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u043a\u043e\u0434\u044b \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432:\u00a0<code>0x4C<\/code>\u00a0(JMP \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0439),\u00a0<code>0x6C<\/code>\u00a0(JMP \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u044b\u0439),\u00a0<code>0x20<\/code>\u00a0(JSR \u2014 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043a \u043f\u043e\u0434\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435).<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f \u00ab\u0438\u0433\u0440\u043e\u0439\u00bb.<\/p>\n<h3>\u041a\u0430\u043b\u0438\u0431\u0440\u043e\u0432\u043a\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/h3>\n<p>\u0414\u043b\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u044d\u0442\u0438\u0445 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a \u044f \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b <a href=\"https:\/\/archive.org\/details\/Atari2600FullRomCollectionReuploadByDataghost\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u043b\u043d\u0443\u044e \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e ROM \u043a\u043e\u043d\u0441\u043e\u043b\u0438 Atari 2600<\/a>\u00a0\u0438\u0437 Internet Archive \u2014 \u0432\u0441\u0435 1530 \u043f\u0440\u043e\u0434\u0430\u0432\u0430\u0432\u0448\u0438\u0445\u0441\u044f ROM \u0434\u043b\u044f Atari. \u0421\u043a\u0440\u0438\u043f\u0442 \u043d\u0430 Python \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b \u043a\u0430\u0436\u0434\u044b\u0439 ROM \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u0447\u0451\u0442\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u0441\u0442\u0438 \u044d\u0442\u0438\u0445 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a \u0432 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0445 \u0438\u0433\u0440\u0430\u0445.<\/p>\n<h4>\u0425\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 ROM \u043f\u043e \u043c\u0435\u0442\u0440\u0438\u043a\u0430\u043c<\/h4>\n<p>\u0412\u043e\u0442 \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u0433\u0440\u044b \u0434\u043b\u044f Atari:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th data-colwidth=\"112\" width=\"112\">\n<p align=\"left\">\u041c\u0435\u0442\u0440\u0438\u043a\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">Min<\/p>\n<\/th>\n<th>\n<p align=\"left\">5-\u0439 %<\/p>\n<\/th>\n<th data-colwidth=\"100\" width=\"100\">\n<p align=\"left\">10-\u0439 %<\/p>\n<\/th>\n<th>\n<p align=\"left\">25-\u0439 %<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041c\u0435\u0434\u0438\u0430\u043d\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">75-\u0439 %<\/p>\n<\/th>\n<th>\n<p align=\"left\">90-\u0439 %<\/p>\n<\/th>\n<th>\n<p align=\"left\">95-\u0439 %<\/p>\n<\/th>\n<th>\n<p align=\"left\">Max<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0421\u0440\u0435\u0434\u043d\u0435\u0435<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td data-colwidth=\"112\" width=\"112\">\n<p align=\"left\"><strong>\u0412\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u043e\u043f\u043a\u043e\u0434\u044b (%)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">42.1%<\/p>\n<\/td>\n<td>\n<p align=\"left\">65.6%<\/p>\n<\/td>\n<td data-colwidth=\"100\" width=\"100\">\n<p align=\"left\">70.0%<\/p>\n<\/td>\n<td>\n<p align=\"left\">74.0%<\/p>\n<\/td>\n<td>\n<p align=\"left\">76.0%<\/p>\n<\/td>\n<td>\n<p align=\"left\">77.9%<\/p>\n<\/td>\n<td>\n<p align=\"left\">79.6%<\/p>\n<\/td>\n<td>\n<p align=\"left\">81.4%<\/p>\n<\/td>\n<td>\n<p align=\"left\">90.7%<\/p>\n<\/td>\n<td>\n<p align=\"left\">74.8%<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"112\" width=\"112\">\n<p align=\"left\"><strong>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a TIA<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">12<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>93<\/strong><\/p>\n<\/td>\n<td data-colwidth=\"100\" width=\"100\">\n<p align=\"left\">118<\/p>\n<\/td>\n<td>\n<p align=\"left\">186<\/p>\n<\/td>\n<td>\n<p align=\"left\">282<\/p>\n<\/td>\n<td>\n<p align=\"left\">398<\/p>\n<\/td>\n<td>\n<p align=\"left\">567<\/p>\n<\/td>\n<td>\n<p align=\"left\">743<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,847<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>341<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"112\" width=\"112\">\n<p align=\"left\"><strong>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a RIOT<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">3<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>34<\/strong><\/p>\n<\/td>\n<td data-colwidth=\"100\" width=\"100\">\n<p align=\"left\">47<\/p>\n<\/td>\n<td>\n<p align=\"left\">72<\/p>\n<\/td>\n<td>\n<p align=\"left\">111<\/p>\n<\/td>\n<td>\n<p align=\"left\">158<\/p>\n<\/td>\n<td>\n<p align=\"left\">219<\/p>\n<\/td>\n<td>\n<p align=\"left\">287<\/p>\n<\/td>\n<td>\n<p align=\"left\">891<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>134<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"112\" width=\"112\">\n<p align=\"left\"><strong>\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u0442\u0430\u0439\u043c\u0435\u0440\u0443 RIOT<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">1<\/p>\n<\/td>\n<td>\n<p align=\"left\">22<\/p>\n<\/td>\n<td data-colwidth=\"100\" width=\"100\">\n<p align=\"left\">31<\/p>\n<\/td>\n<td>\n<p align=\"left\">51<\/p>\n<\/td>\n<td>\n<p align=\"left\">78<\/p>\n<\/td>\n<td>\n<p align=\"left\">115<\/p>\n<\/td>\n<td>\n<p align=\"left\">161<\/p>\n<\/td>\n<td>\n<p align=\"left\">211<\/p>\n<\/td>\n<td>\n<p align=\"left\">723<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>95<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"112\" width=\"112\">\n<p align=\"left\"><strong>\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u0432\u0432\u043e\u0434\u0443-\u0432\u044b\u0432\u043e\u0434\u0443 RIOT<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<td>\n<p align=\"left\">8<\/p>\n<\/td>\n<td data-colwidth=\"100\" width=\"100\">\n<p align=\"left\">12<\/p>\n<\/td>\n<td>\n<p align=\"left\">18<\/p>\n<\/td>\n<td>\n<p align=\"left\">28<\/p>\n<\/td>\n<td>\n<p align=\"left\">41<\/p>\n<\/td>\n<td>\n<p align=\"left\">58<\/p>\n<\/td>\n<td>\n<p align=\"left\">74<\/p>\n<\/td>\n<td>\n<p align=\"left\">201<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>33<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"112\" width=\"112\">\n<p align=\"left\"><strong>\u041a\u043e\u043c\u0430\u043d\u0434\u044b \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">28<\/p>\n<\/td>\n<td>\n<p align=\"left\">177<\/p>\n<\/td>\n<td data-colwidth=\"100\" width=\"100\">\n<p align=\"left\">200<\/p>\n<\/td>\n<td>\n<p align=\"left\">296<\/p>\n<\/td>\n<td>\n<p align=\"left\">364<\/p>\n<\/td>\n<td>\n<p align=\"left\">528<\/p>\n<\/td>\n<td>\n<p align=\"left\">789<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,066<\/p>\n<\/td>\n<td>\n<p align=\"left\">5,928<\/p>\n<\/td>\n<td>\n<p align=\"left\">457<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"112\" width=\"112\">\n<p align=\"left\"><strong>\u041a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">3<\/p>\n<\/td>\n<td>\n<p align=\"left\">37<\/p>\n<\/td>\n<td data-colwidth=\"100\" width=\"100\">\n<p align=\"left\">54<\/p>\n<\/td>\n<td>\n<p align=\"left\">76<\/p>\n<\/td>\n<td>\n<p align=\"left\">111<\/p>\n<\/td>\n<td>\n<p align=\"left\">172<\/p>\n<\/td>\n<td>\n<p align=\"left\">260<\/p>\n<\/td>\n<td>\n<p align=\"left\">351<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,495<\/p>\n<\/td>\n<td>\n<p align=\"left\">142<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"112\" width=\"112\">\n<p align=\"left\"><strong>\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u043f\u043a\u043e\u0434\u044b<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">29<\/p>\n<\/td>\n<td>\n<p align=\"left\">125<\/p>\n<\/td>\n<td data-colwidth=\"100\" width=\"100\">\n<p align=\"left\">129<\/p>\n<\/td>\n<td>\n<p align=\"left\">137<\/p>\n<\/td>\n<td>\n<p align=\"left\">143<\/p>\n<\/td>\n<td>\n<p align=\"left\">148<\/p>\n<\/td>\n<td>\n<p align=\"left\">151<\/p>\n<\/td>\n<td>\n<p align=\"left\">151<\/p>\n<\/td>\n<td>\n<p align=\"left\">151<\/p>\n<\/td>\n<td>\n<p align=\"left\">141<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>\u0420\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434<\/h4>\n<ul>\n<li>\n<p><strong>STA (Store A)<\/strong>: 71,8% \u2014 \u0437\u0430\u043f\u0438\u0441\u044c \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0446\u0432\u0435\u0442\u043e\u0432, \u043f\u043e\u0437\u0438\u0446\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p><strong>STX (Store X)<\/strong>: 9,3% \u2014 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p><strong>STY (Store Y)<\/strong>: 8,5% \u2014 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430\u043c STX.<\/p>\n<\/li>\n<li>\n<p><strong>LDA (Load A)<\/strong>: 6,7% \u2014 \u0438\u0433\u0440\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0438 <em>\u0447\u0442\u0435\u043d\u0438\u0435<\/em> \u0438\u0437 TIA (\u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0439 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435).<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0440\u043e\u0447\u0435\u0435<\/strong>: 3,7% \u2014 \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u0430\u044f \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044f, \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c.<\/p>\n<\/li>\n<\/ul>\n<h4>\u0420\u0435\u0436\u0438\u043c\u044b \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438<\/h4>\n<ul>\n<li>\n<p><strong>\u041d\u0443\u043b\u0435\u0432\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430<\/strong>: 82,1% \u2014\u00a0<code>STA $02<\/code>,\u00a0<code>STX $1B<\/code>\u00a0(\u0441\u0430\u043c\u044b\u0435 \u0431\u044b\u0441\u0442\u0440\u044b\u0435 \u0438 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435).<\/p>\n<\/li>\n<li>\n<p><strong>\u0418\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u044f \u043f\u043e \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435<\/strong>: 13,2% \u2014\u00a0<code>STA $00,X<\/code>,\u00a0<code>STY $10,X<\/code>\u00a0(\u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0441\u043f\u0440\u0430\u0439\u0442\u043e\u0432).<\/p>\n<\/li>\n<li>\n<p><strong>\u0410\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u0430\u044f<\/strong>: 4,7% \u2014\u00a0<code>STA $001B<\/code>\u00a0(\u0440\u0435\u0434\u043a\u043e, \u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f).<\/p>\n<\/li>\n<\/ul>\n<h4>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b TIA, \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e<\/h4>\n<p><code>$02 (WSYNC) - 18,8% - \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u0430 (\u0432\u0430\u0436\u043d\u0435\u0439\u0448\u0438\u0439 \u0442\u0430\u0439\u043c\u0438\u043d\u0433)<\/code><br \/><code>$1B (GRP0)  - 8,4%  - \u0434\u0430\u043d\u043d\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0438\u0433\u0440\u043e\u043a\u0430 0<\/code><br \/><code>$1C (GRP1)  - 7,0%  - \u0434\u0430\u043d\u043d\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0438\u0433\u0440\u043e\u043a\u0430 1<\/code><br \/><code>$2A (HMOVE) - 4,9%  - \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u0440\u043e\u0431-\u0438\u043c\u043f\u0443\u043b\u044c\u0441<\/code><br \/><code>$0E (PF1)   - 4,1%  - \u0440\u0435\u0433\u0438\u0441\u0442\u0440 1 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f<\/code><br \/><code>$0F (PF2)   - 3,7%  - \u0440\u0435\u0433\u0438\u0441\u0442\u0440 2 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f<\/code><\/p>\n<h4>\u0410\u043d\u0430\u043b\u0438\u0437 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 RIOT<\/h4>\n<p>\u0420\u0430\u0431\u043e\u0442\u0443 \u0441 RIOT \u043c\u043e\u0436\u043d\u043e \u0447\u0451\u0442\u043a\u043e \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u043d\u0430 \u0434\u0432\u0435 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438:<\/p>\n<p><strong>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 \u0442\u0430\u0439\u043c\u0435\u0440\u043e\u043c (78% \u0432\u0441\u0435\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 RIOT)<\/strong><\/p>\n<ul>\n<li>\n<p><strong>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b<\/strong>:\u00a0<code>$80-$87<\/code>\u00a0(\u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b 1T, 8T, 64T, 1024T \u043f\u043b\u044e\u0441 \u0447\u0442\u0435\u043d\u0438\u0435 \u0442\u0430\u0439\u043c\u0435\u0440\u0430).<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/strong>: \u0446\u0438\u043a\u043b\u044b \u0442\u0430\u0439\u043c\u0438\u043d\u0433\u043e\u0432, \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438, \u043f\u043e\u0434\u0441\u0447\u0451\u0442 \u043a\u0430\u0434\u0440\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0430\u0442\u0442\u0435\u0440\u043d<\/strong>: \u0437\u0430\u043f\u0438\u0441\u044c \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0442\u0430\u0439\u043c\u0435\u0440\u0430, \u0447\u0442\u0435\u043d\u0438\u0435 <code>$84<\/code>\u00a0\u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441\u0442\u0430\u0442\u0443\u0441\u0430.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 (22% \u0432\u0441\u0435\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 RIOT)<\/strong><\/p>\n<ul>\n<li>\n<p><strong>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u044b<\/strong>:\u00a0<code>$94-$97<\/code>\u00a0(\u0432\u0432\u043e\u0434 \u0441 \u0434\u0436\u043e\u0439\u0441\u0442\u0438\u043a\u0430\/\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0438 \u043a\u043e\u043d\u0441\u043e\u043b\u0438).<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/strong>: \u0447\u0442\u0435\u043d\u0438\u0435 \u0432\u0432\u043e\u0434\u0430 \u0438\u0433\u0440\u043e\u043a\u0430, \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u0441\u0431\u0440\u043e\u0441\u0430 \u0438\u0433\u0440\u044b.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0430\u0442\u0442\u0435\u0440\u043d<\/strong>: \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0447\u0442\u0435\u043d\u0438\u0435 (<code>LDA $94<\/code>), \u0432\u0440\u0435\u043c\u044f \u043e\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438.<\/p>\n<\/li>\n<\/ul>\n<h4>\u0421\u043e\u0441\u0442\u0430\u0432\u043d\u0430\u044f \u043e\u0446\u0435\u043d\u043a\u0430<\/h4>\n<p>\u0412 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439 \u043e\u0446\u0435\u043d\u043a\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u044b\u0435 \u0432\u0435\u0441\u0430, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u0433\u0440:<\/p>\n<p><code>\u041e\u0446\u0435\u043d\u043a\u0430 = (\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u043f\u043a\u043e\u0434\u043e\u0432 \u00d7 0.25) +<\/code><br \/><code>          (min(\u0414\u043e\u0441\u0442\u0443\u043f\u044b_TIA\/150, 1.0) \u00d7 0.30) +<\/code><br \/><code>          (min(\u0414\u043e\u0441\u0442\u0443\u043f\u044b_RIOT\/50, 1.0) \u00d7 0.20) +<\/code><br \/><code>          (min(\u0412\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f\/200, 1.0) \u00d7 0.15) +<\/code><br \/><code>          (min(\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u044b\/40, 1.0) \u00d7 0.10)<\/code><\/p>\n<p>\u041e\u0446\u0435\u043d\u043a\u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u0433\u0440 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043e\u0442 0,393 \u0434\u043e 1,004, \u0430<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\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-465511","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/465511","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=465511"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/465511\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=465511"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=465511"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=465511"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}