{"id":476873,"date":"2026-04-21T19:27:17","date_gmt":"2026-04-21T19:27:17","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=476873"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=476873","title":{"rendered":"\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u041e\u0421 RT-11: \u043a\u043e\u043f\u0430\u0435\u043c\u0441\u044f \u0432 \u0438\u0441\u0445\u043e\u0434\u043e\u043c \u043a\u043e\u0434\u0435. \u0427\u0430\u0441\u0442\u044c \u043f\u0435\u0440\u0432\u0430\u044f"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><strong>RT-11<\/strong> \u2014 \u044d\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0438\u0437 1970-\u0445 \u0433\u043e\u0434\u043e\u0432 \u0434\u043b\u044f \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043c\u0438\u043d\u0438-\u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 <strong>PDP-11<\/strong> \u0444\u0438\u0440\u043c\u044b DEC. \u0412 \u0421\u0421\u0421\u0420 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u043f\u043e\u0434 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 \u042d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u0430 60, \u0414\u0412\u041a, \u0411\u041a 0011\u041c. \u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043b\u044e\u0431\u0438\u0442 \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u0447\u0443\u0436\u043e\u0439 \u043a\u043e\u0434 \u0432 \u043f\u043e\u0438\u0441\u043a\u0430\u0445 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u043e\u0439 \u044d\u0441\u0442\u0435\u0442\u0438\u043a\u0438 \u2014 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u0438\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<h2>\u0413\u0440\u0430\u043d\u0438\u0446\u044b \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f<\/h2>\n<p>\u042f\u0434\u0440\u043e RT-11 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u043e\u0441\u044c \u0432 \u0432\u0438\u0434\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0443\u0442\u0438\u043b\u0438\u0442\u044b sysgen \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438 \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u0436\u0435\u043b\u0435\u0437\u043e \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u2014 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0438\u0440\u0430\u043b \u044f\u0434\u0440\u043e Linux. \u0421\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u043d\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e: Unix \u0442\u043e\u0436\u0435 \u0437\u0430\u0440\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 DEC.<\/p>\n<p>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u044f\u0434\u0440\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0434\u043b\u044f \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f, \u043d\u043e, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043e\u043d \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435 \u0438 \u0432\u0441\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0432\u044b\u0440\u0435\u0437\u0430\u043d\u044b. \u0418\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0434\u0435\u043b\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u043a\u0430\u043a \u0431\u0435\u0441\u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0435. \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438 \u043a \u043a\u043e\u0434\u0443 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043d\u0438\u0433\u0438:<\/p>\n<ol>\n<li>\n<p><a href=\"https:\/\/bitsavers.org\/pdf\/dec\/pdp11\/rt11\/v4.0_Mar80\/3b\/AA-H379A-TC_RT-11_V4.0_Software_Support_Manual_Mar81.pdf\" rel=\"noopener noreferrer nofollow\">RT-11 Software Support Manual<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/bitsavers.org\/pdf\/dec\/pdp11\/rt11\/v5.6_Aug91\/AA-PD6NA-TC_RT-11_System_Internals_Manual_Aug91.pdf\" rel=\"noopener noreferrer nofollow\">RT\u201311 System Internals Manual<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/bitsavers.org\/pdf\/dec\/pdp11\/rt11\/v4.0_Mar80\/3a\/AA-H378A-TC_RT-11_V4.0_Programmers_Reference_Manual_Mar80.pdf\" rel=\"noopener noreferrer nofollow\">RT-11 Programmer&#8217;s Reference Manual <\/a> <\/p>\n<\/li>\n<\/ol>\n<p>\u0412 \u043d\u0438\u0445 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432. \u0410 \u0435\u0449\u0435 \u043e\u0431\u044a\u0435\u043c \u043a\u043e\u0434\u0430 \u043d\u0435\u0432\u0435\u043b\u0438\u043a \u2014 \u043e\u043a\u043e\u043b\u043e 2 \u0442\u044b\u0441. \u0441\u0442\u0440\u043e\u043a \u043d\u0430 \u0444\u0430\u0439\u043b.<\/p>\n<p><strong>\u0421\u043e\u0441\u0442\u0430\u0432 \u044f\u0434\u0440\u0430:<\/strong><\/p>\n<ol>\n<li>\n<p><strong>RMON <\/strong>\u2014 \u0440\u0435\u0437\u0438\u0434\u0435\u043d\u0442\u043d\u044b\u0439 \u043c\u043e\u043d\u0438\u0442\u043e\u0440, \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>USR <\/strong>\u2014 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439. \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0432\u044b\u0433\u0440\u0443\u0436\u0435\u043d \u043d\u0430 \u0434\u0438\u0441\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u044c \u043c\u0435\u0441\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>\u0414\u0440\u0430\u0439\u0432\u0435\u0440\u044b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432.<\/strong><\/p>\n<\/li>\n<li>\n<p><strong>KMON <\/strong>\u2014 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c. \u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0442\u043e\u0436\u0435 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<\/li>\n<\/ol>\n<p>\u0420\u0435\u0437\u0438\u0434\u0435\u043d\u0442\u043d\u044b\u0439 \u043c\u043e\u043d\u0438\u0442\u043e\u0440 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445: \u043e\u0434\u043d\u043e\u0437\u0430\u0434\u0430\u0447\u043d\u043e\u043c, \u0434\u0432\u0443\u0445\u0437\u0430\u0434\u0430\u0447\u043d\u043e\u043c \u0438 \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e. \u041c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043e\u0434\u043d\u043e\u0437\u0430\u0434\u0430\u0447\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0432 \u0447\u0430\u0441\u0442\u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 \u0438 \u0434\u0432\u0443\u0445\u0437\u0430\u0434\u0430\u0447\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0432 \u0447\u0430\u0441\u0442\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043d\u043e\u0433\u043e\u0437\u0430\u0434\u0430\u0447\u043d\u043e\u0441\u0442\u0438. \u0418\u0437 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u0432 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0434\u0430. KMON \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0437\u0430 \u0441\u043a\u043e\u0431\u043a\u0430\u043c\u0438.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440\u044b (\u043f\u0441\u0435\u0432\u0434\u043e)\u043a\u043e\u0434\u0430 \u0431\u0443\u0434\u0443\u0442 \u0432 \u0432\u0438\u0434\u0435, \u043f\u0435\u0440\u0435\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u043c \u043d\u0430 \u044f\u0437\u044b\u043a \u0421\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d \u0441\u043e\u0437\u0434\u0430\u043d \u0434\u043b\u044f PDP-11. \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 70-\u0445 \u043f\u0430\u043c\u044f\u0442\u0438 \u0431\u044b\u043b\u043e \u043c\u0430\u043b\u043e, \u0435\u0435 \u0441\u0442\u0430\u0440\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043b\u0438, \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u0438\u043d\u0443 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u0443\u0436\u0438\u043c\u0430\u043b\u0438 \u0434\u043e \u0448\u0435\u0441\u0442\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432. \u041d\u0435 \u0443\u0434\u0438\u0432\u043b\u044f\u0439\u0442\u0435\u0441\u044c \u043c\u0430\u043b\u043e\u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u0448\u0435\u0441\u0442\u0438\u0431\u0443\u043a\u0432\u0435\u043d\u043d\u044b\u043c \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u044f\u043c \u0432 \u043a\u043e\u0434\u0435. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0421\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0434\u043e\u0436\u0438\u043b\u0438 \u0434\u043e \u043d\u0430\u0448\u0438\u0445 \u0434\u043d\u0435\u0439.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c \u043f\u0440\u043e \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0432\u0432\u043e\u0434-\u0432\u044b\u0432\u043e\u0434. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u2014 \u043f\u0440\u043e \u0444\u0430\u0439\u043b\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443. \u0412 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u2014 \u043f\u0440\u043e \u043c\u043d\u043e\u0433\u043e\u0437\u0430\u0434\u0430\u0447\u043d\u043e\u0441\u0442\u044c.<\/p>\n<h2>\u0422\u0435\u043c\u0430 1. \u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0432\u0432\u043e\u0434-\u0432\u044b\u0432\u043e\u0434<\/h2>\n<p>PDP-11 \u2014 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u044b\u0439 \u0438 \u043e\u0434\u043d\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u044b\u0439. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044f \u0442\u0438\u043f\u0430 \u0436\u0435\u0441\u0442\u043a\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 \u0431\u0435\u0437 \u0443\u0447\u0430\u0441\u0442\u0438\u044f \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 RT-11 \u0444\u0443\u043d\u043a\u0446\u0438\u044f QMANGR \u043b\u0438\u0448\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e QCOMP, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0438\u043d\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043e \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. <\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0442\u0438 \u0432 \u0434\u0432\u0443\u0445 \u043c\u0435\u0441\u0442\u0430\u0445:<\/p>\n<ul>\n<li>\n<p>QMANGR \u2014 \u0435\u0441\u043b\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0431\u044b\u043b\u0430 \u043f\u0443\u0441\u0442\u0430 (\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u0437\u0430\u043d\u044f\u0442\u043e).<\/p>\n<\/li>\n<li>\n<p>QCOMP \u2014 \u0435\u0441\u043b\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u043b\u043e\u0441\u044c. <\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0443\u0434\u043e\u0431\u0435\u043d, \u043a\u043e\u0433\u0434\u0430 RT-11 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u043c\u043d\u043e\u0433\u043e\u0437\u0430\u0434\u0430\u0447\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435: \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u0430\u0438\u0432\u0430\u0435\u0442, \u043a\u043e\u0433\u0434\u0430 \u043e\u0434\u043d\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430, \u0430 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441 \u043c\u0435\u043d\u044c\u0448\u0438\u043c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c (\u043f\u0440\u0438\u0432\u0435\u0442 node.js).<\/p>\n<h3>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/h3>\n<p>\u0412 \u043f\u0430\u043c\u044f\u0442\u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043e \u043c\u0435\u0441\u0442\u043e \u0434\u043b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 \u0442\u0438\u043f\u0430 QueueElement. \u041f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043f\u0430\u043c\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 <strong>\u043e\u0434\u0438\u043d <\/strong>\u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u043d\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 QSET \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u0447\u0435\u0440\u0435\u0434\u0438. \u0412 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 AVAIL \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442.<\/p>\n<pre><code class=\"cpp\">\/\/ \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430typedef struct QueueElement {    \/\/ Q.LINK - \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442    struct QueueElement *link;    \/\/ Q.CSW - \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u043a\u0430\u043d\u0430\u043b\u0430    Channel *csw;    \/\/ Q.BLKN - \u043d\u043e\u043c\u0435\u0440 \u0431\u043b\u043e\u043a\u0430 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435    uint16_t block_number;    \/\/ Q.FUNC - \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f (0 = \u0447\u0442\u0435\u043d\u0438\u0435\/\u0437\u0430\u043f\u0438\u0441\u044c \u0438 \u0442.\u0434.)    uint8_t func;    \/\/ Q.UNIT - \u043d\u043e\u043c\u0435\u0440 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 1 \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 DX1)    uint8_t unit;    \/\/ Q.BUFF - \u0430\u0434\u0440\u0435\u0441 \u0431\u0443\u0444\u0435\u0440\u0430 (\u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u0438)    uint16_t *buffer;    \/\/ Q.WCNT - \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043b\u043e\u0432 (\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0438\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c)    int16_t word_count;    \/\/ Q.COMP - \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438    void (*completion)(void);} QueueElement;\/\/ \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430QueueElement QSTART;QueueElement* AVAIL = &amp;QSTART;int16_t QCNT = 1;int16_t QSIZE = 1;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0444\u0430\u0439\u043b\u043e\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0444\u0430\u0439\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f Channel:<\/p>\n<pre><code class=\"cpp\">typedef struct {    \/\/ C.CSW - Channel Status Word    uint16_t csw;    \/\/ C.SBLK - \u043d\u043e\u043c\u0435\u0440 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u0444\u0430\u0439\u043b\u0430 (0 \u0435\u0441\u043b\u0438 \u043d\u0435 \u0444\u0430\u0439\u043b)    uint16_t start_block;    \/\/ C.LENG - \u0434\u043b\u0438\u043d\u0430 \u0444\u0430\u0439\u043b\u0430 \u0432 \u0431\u043b\u043e\u043a\u0430\u0445 (\u0435\u0441\u043b\u0438 \u043e\u0442\u043a\u0440\u044b\u0442 \u0447\u0435\u0440\u0435\u0437 .LOOKUP)    \/\/ \u0438\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 (\u0435\u0441\u043b\u0438 \u043e\u0442\u043a\u0440\u044b\u0442 \u0447\u0435\u0440\u0435\u0437 .ENTER)    uint16_t length;    \/\/ C.USED - \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0431\u043b\u043e\u043a    uint16_t used_block;uint16_t unused_field;    \/\/ C.DEVQ - \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0436\u0438\u0434\u0430\u044e\u0449\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432\u0432\u043e\u0434\u0430\/\u0432\u044b\u0432\u043e\u0434\u0430    uint8_t device_queue;    \/\/ C.UNIT - \u043d\u043e\u043c\u0435\u0440 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430    uint8_t unit;    \/\/ C.SIZ - \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u043b\u043e\u043a\u0430 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445    uint16_t block_size;} Channel;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432\u0432\u043e\u0434-\u0432\u044b\u0432\u043e\u0434 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430:<\/p>\n<pre><code class=\"cpp\">typedef struct DeviceQueue {    \/\/ \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 (LQE)    QueueElement *last;    \/\/ \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 (CQE)    QueueElement *first;    \/\/ \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0435\u0440\u0435\u0442 \u0432 \u0440\u0430\u0431\u043e\u0442\u0443 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043e\u0447\u0435\u0447\u0435\u0434\u0438 (CQE)void (*start)(struct DeviceQueue*);    \/\/ ... \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430    \/\/ interrupt_vector, interrupt_handler, stat} DeviceQueue;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h3>QMANGR: \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c<\/h3>\n<p>\u0412\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430 \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430. \u0417\u0430\u0431\u0438\u0440\u0430\u0435\u0442 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0435\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430.<\/p>\n<pre><code class=\"cpp\">\/** * @param block - \u043d\u043e\u043c\u0435\u0440 \u0431\u043b\u043e\u043a\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 * @param device - \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 * @param channel - \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 CSW (Channel Status Word) - \u0437\u0430\u043f\u0438\u0441\u044c \u043a\u0430\u043d\u0430\u043b\u0430 * @param buffer - \u0430\u0434\u0440\u0435\u0441 \u0431\u0443\u0444\u0435\u0440\u0430 * @param word_count - \u0434\u043b\u0438\u043d\u0430 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0433\u043e\/\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0432 \u0441\u043b\u043e\u0432\u0430\u0445 * @param unit - \u043d\u043e\u043c\u0435\u0440 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 * @param completion - \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f * @param is_async - \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0432\u0432\u043e\u0434-\u0432\u044b\u0432\u043e\u0434 *\/void QMANGR(uint16_t block, DeviceQueue *device, Channel *channel,     uint16_t *buffer, uint16_t word_count, uint8_t unit,void (*completion)(void), bool is_async){    QueueElement *current_elem;        \/\/ \u041e\u0436\u0438\u0434\u0430\u0435\u043c \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438    do {        INTON();        INTOFF();    } while (QCNT &lt;= 0);        \/\/ \u0417\u0430\u0431\u0438\u0440\u0430\u0435\u043c \u043e\u0434\u0438\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445    QCNT--;    current_elem = AVAIL;    AVAIL = current_elem-&gt;link;        INTON();        \/\/ \u0417\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043e\u0447\u0435\u0440\u0435\u0434\u0438    current_elem-&gt;link = NULL;    current_elem-&gt;csw = channel;        \/\/ \u0415\u0441\u043b\u0438 \u0443\u0436\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0442\u043e \u043f\u043e\u0434\u043e\u0436\u0434\u0435\u043c \u0438\u0445 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f    while (channel-&gt;device_queue == 255) {        \/\/ \u043f\u0443\u0441\u0442\u043e\u0439 \u0446\u0438\u043a\u043b \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f\/\/ \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0430 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u0438 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\/\/ \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442 device_queue\/\/ \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0446\u0438\u043a\u043b \u043d\u0435 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439    }    \/\/ \u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u043a\u0430\u043d\u0430\u043b\u0435    channel-&gt;device_queue++;        \/\/ \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435    QueueElement *fill_ptr = current_elem;    fill_ptr-&gt;block_number = block;    fill_ptr-&gt;func = 0; \/\/ \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u0432\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0447\u0442\u0435\u043d\u0438\u044f\/\u0437\u0430\u043f\u0438\u0441\u0438    fill_ptr-&gt;unit = unit;    fill_ptr-&gt;buffer = buffer;    fill_ptr-&gt;word_count = word_count;    fill_ptr-&gt;completion = completion;        INTOFF();        \/\/ \u041f\u043e\u043c\u0435\u0449\u0430\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430QueueElement *first_elem = device-&gt;first;if (first_elem != NULL) {\/\/ \u041e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0435 \u043f\u0443\u0441\u0442\u0430 - \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043a\u043e\u043d\u0435\u0446device-&gt;last-&gt;link = current_elem;device-&gt;last = current_elem;} else {\/\/ \u041e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u0443\u0441\u0442\u0430 - \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0438 \u043f\u0435\u0440\u0432\u044b\u043c, \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043cdevice-&gt;first = current_elem;device-&gt;last = current_elem;\/\/ \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430device-&gt;start(device);}        INTON();        \/\/ \u0415\u0441\u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430\u044f, \u0442\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u043c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f    if (!is_async) {        \/\/ \u041e\u0436\u0438\u0434\u0430\u0435\u043c, \u043f\u043e\u043a\u0430 \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0435 \u0441\u0442\u0430\u043d\u0435\u0442 0        while (channel-&gt;device_queue != 0) {            \/\/ \u043f\u0443\u0441\u0442\u043e\u0439 \u0446\u0438\u043a\u043b \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f        }    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h3>QCOMP: \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438<\/h3>\n<p>\u0412\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f. \u041e\u043d\u0430:<\/p>\n<ol>\n<li>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438 \u043a\u0430\u043d\u0430\u043b\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0423\u0434\u0430\u043b\u044f\u0435\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f, \u0435\u0441\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 (\u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c).<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"cpp\">\/** * @param device - \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 *\/void QCOMP(DeviceQueue *device){    QueueElement *qe = device-&gt;first;    int channel_num;    void (*comp)(void);        channel = qe-&gt;csw;        \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0431\u0438\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0441\u0442\u0430\u0442\u0443\u0441\u0435 \u043a\u0430\u043d\u0430\u043b\u0430    if (channel-&gt;csw &amp; HARD_ERROR_BIT) {        \/\/ HALT - \u043e\u0441\u0442\u0430\u043d\u043e\u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430        exit(EXIT_FAILURE);    }           \/\/ \u0423\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u043c \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u043a\u0430\u043d\u0430\u043b\u0435    channel-&gt;device_queue--;        \/\/ \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430    GETPSW();    INTOFF();        \/\/ \u0423\u0434\u0430\u043b\u044f\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430    \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0435\u0441\u0442\u044c \u043b\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442    if (qe-&gt;link != NULL) {        \/\/ \u041e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0435 \u043f\u0443\u0441\u0442\u0430 - \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c CQE        device-&gt;first = qe-&gt;link;    } else {        \/\/ \u041e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u0443\u0441\u0442\u0430 - \u043e\u0447\u0438\u0449\u0430\u0435\u043c LQE \u0438 CQE        device-&gt;first = NULL;device-&gt;last = NULL;    }        \/\/ \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445    qe-&gt;link = AVAIL;    AVAIL = qe;    QCNT++;        \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043a\u043e\u0434 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f (COMP)    comp = qe-&gt;completion;        \/\/ \u0412\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430    PUTPSW();  \/\/ \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 INTON    \/\/ \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044fif (comp != NULL) {comp();}        \/\/ \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438    \/\/ \u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430    if (device-&gt;first != NULL) {        device-&gt;start(device);    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 \u0434\u0430\u043b\u0435\u0435 \u0438\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u043f\u0440\u043e \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0434\u0430 \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 .READ. <\/p>\n<h2>\u0422\u0435\u043c\u0430 2. \u0414\u0440\u0430\u0439\u0432\u0435\u0440 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0434\u0430 DX (\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f)<\/h2>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043a\u043e\u0434\u0430 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0434\u0430 DX, \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0447\u0442\u0435\u043d\u0438\u044f\/\u0437\u0430\u043f\u0438\u0441\u0438. \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"https:\/\/bitsavers.org\/pdf\/dec\/disc\/rx02\/EK-0RX02-TM-001_RX02_Tech_Oct78.pdf\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>. \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0441 \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u043c\u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d <a href=\"https:\/\/bitsavers.org\/pdf\/dec\/pdp11\/rt11\/v4.0_Mar80\/3b\/AA-H379A-TC_RT-11_V4.0_Software_Support_Manual_Mar81.pdf\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>\u041a\u0440\u0430\u0442\u043a\u043e \u043f\u0440\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u0435\u043a\u0442\u043e\u0440\u0430. \u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0435\u043a\u0442\u043e\u0440\u0430 \u0440\u0430\u0432\u0435\u043d 128 \u0431\u0430\u0439\u0442\u0430\u043c. \u041d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0432\u0430 \u0430\u0434\u0440\u0435\u0441\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0440\u0442\u044b \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 DX:<\/p>\n<pre><code class=\"cpp\">\/\/ \u043f\u043e\u0440\u0442 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043a\u043e\u043c\u0430\u043d\u0434 \u0438 \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u0443\u0441\u0430#define RX_CS 0177170\/\/ \u043f\u043e\u0440\u0442 \u0434\u043b\u044f \u043f\u0440\u0438\u0435\u043c\u0430 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445#define RX_DB 0177172<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<ol>\n<li>\n<p>\u0412 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043a\u043e\u043c\u0430\u043d\u0434 RX_CS \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 CS_READ.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 RX_DB \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u043e\u043c\u0435\u0440 \u0441\u0435\u043a\u0442\u043e\u0440\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0412 RX_DB \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u043e\u043c\u0435\u0440 \u0434\u043e\u0440\u043e\u0436\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u043e\u0436\u0434\u0430\u0442\u044c, \u043f\u043e\u043a\u0430 \u043d\u0430 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0435\u0442 \u0441\u0435\u043a\u0442\u043e\u0440 \u0441 \u0434\u0438\u0441\u043a\u0430 \u0432 \u0441\u0432\u043e\u0439 \u0431\u0443\u0444\u0435\u0440.<\/p>\n<\/li>\n<li>\n<p>\u0412 RX_CS \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 CS_EMPTY_BUF.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0437 RX_DB \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e 128\/2=64 \u0440\u0430\u0437 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043b\u043e\u0432\u043e \u0437\u0430 \u0441\u043b\u043e\u0432\u043e\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0441\u0432\u043e\u0435\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430).<\/p>\n<\/li>\n<\/ol>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f DXSTRT \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e. \u041f\u043e \u0441\u0443\u0442\u0438 \u043e\u043d\u0430 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0438\u0437 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435.<\/p>\n<pre><code class=\"cpp\">\/\/ \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430DeviceQueue dx_driver = { .start = DXSTRT };\/\/ \u0430\u0434\u0440\u0435\u0441 \u0431\u0443\u0444\u0435\u0440\u0430uint16_t* BUFFER_ADDR;\/\/ \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043d\u043e\u043c\u0435\u0440 \u0441\u0435\u043a\u0442\u043e\u0440\u0430uint16_t RX_LSN;\/\/ \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438int16_t RX_FUNC2;\/\/ \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0439\u0442 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f\/\u0437\u0430\u043f\u0438\u0441\u0438uint16_t BYTE_COUNT;\/\/ \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439bool is_first_int;void DXSTRT(DeviceQueue* device){    QueueElement *cqe = device-&gt;first;        int16_t oper = CS_GO;    \/\/ \u043a\u043e\u043b-\u0432\u043e \u0441\u043b\u043e\u0432, \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0442\u0435\u043d\u0438\u0435    int16_t word_count = cqe-&gt;word_count;    if (word_count &lt; 0) {        \/\/ \u0437\u0430\u043f\u0438\u0441\u044coper = oper | CS_WRITE;        word_count = -word_count;    } else {\/\/ \u0447\u0442\u0435\u043d\u0438\u0435oper = oper | CS_READ;}\/\/ \u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438BYTE_COUNT = word_count * 2;    BUFFER_ADDR = cqe-&gt;buffer;    RX_FUNC2 = oper;\/\/ \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043d\u043e\u043c\u0435\u0440 \u0441\u0435\u043a\u0442\u043e\u0440\u0430\/\/ 1 \u0431\u043b\u043e\u043a = 4 \u0441\u0435\u043a\u0442\u043e\u0440\u0430RX_LSN = cqe-&gt;block_number * 4;    is_first_int = true;    uint16_t* cs_ptr = (uint16_t*)RX_CS;\/\/\u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0431\u0438\u0442 CS_INT, \u0447\u0442\u043e\u0431\u044b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435, \/\/\u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0438 \u0433\u043e\u0442\u043e\u0432\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b    *cs_ptr |= CS_INT;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0434 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043e \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a DXINT. \u041e\u043d \u043f\u0440\u043e\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0438\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u0435\u043a\u0442\u043e\u0440 \u043d\u0430 \u0434\u0438\u0441\u043a \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 cqe-&gt;word_count. <\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434, \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0432 \u043f\u043e\u0440\u0442 RX_CS, \u0438\u043c\u0435\u044e\u0442 0 \u0432 \u0431\u0438\u0442\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f CS_INT. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043d\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u0418 \u043a\u043e\u0434 \u0443\u0437\u043d\u0430\u0435\u0442 \u043e \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u0447\u0442\u0435\u043d\u0438\u0435\u043c \u0438\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f RX_CS \u0431\u0438\u0442\u0430 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438.<\/p>\n<pre><code class=\"cpp\">\/\/ \u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\/\/ \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0431\u0438\u0442\u0430 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438#define WAIT_READY    do { } while (!(*cs_ptr &amp; 0x00FF));#define WAIT_READY2   do { } while (!(*cs_ptr &amp; CS_TRANSFER));#define CHECK_ERROR   if (!(*cs_ptr &amp; CS_TRANSFER)) { RXERR2(device); return; }void DXINT(){DeviceQueue* device = &amp;dx_driver;    uint16_t* cs_ptr = (uint16_t*)RX_CS;    uint16_t* db_ptr = (uint16_t*)RX_DB;    \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0441\u0442\u0430\u0442\u0443\u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430    if (*cs_ptr &amp; CS_ERR) {        RXERR2(device);        return;    }    uint16_t size = 128; \/\/ \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0435\u043a\u0442\u043e\u0440\u0430 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445    if (CS_WRITE &amp; RX_FUNC2) { \/\/ \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0434\u0438\u0441\u043a        if (!is_first_int) {\/\/ \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u0435\u043a\u0442\u043e\u0440\u0430            if (!NEXT_SEC(device, size)) {    return;}        }        \/\/ \u041a\u043e\u0434 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \"\u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0431\u0443\u0444\u0435\u0440\"        SILOFE(CS_GO | CS_FILL_BUF, size, true);    } else if (!is_first_int) { \/\/ \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0434\u0438\u0441\u043a\u0430        \/\/ \u041a\u043e\u0434 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \"\u043e\u043f\u0443\u0441\u0442\u043e\u0448\u0438\u0442\u044c \u0431\u0443\u0444\u0435\u0440\"        SILOFE(CS_GO | CS_EMPTY_BUF, size, false);        if (!NEXT_SEC(device, size)) {    return;}    }    \/\/ \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u0435\u043a\u0442\u043e\u0440\u0430 \u0432 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b    \/\/ \u0438\u0437 RXLSN \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c: \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0434\u043e\u0440\u043e\u0436\u043a\u0443 (0..75), \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0435\u043a\u0442\u043e\u0440 (1..26)    uint16_t track = RX_LSN \/ 26;    uint16_t sector = RX_LSN % 26 + 1;    \/\/ \u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0435    *cs_ptr = RX_FUNC2;    WAIT_READY;    CHECK_ERROR;    \/\/ \u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u0435\u043a\u0442\u043e\u0440 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0434\u0430\u043d\u043d\u044b\u0445    *db_ptr = sector;WAIT_READY;    CHECK_ERROR;    \/\/ \u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0434\u043e\u0440\u043e\u0436\u043a\u0443 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0434\u0430\u043d\u043d\u044b\u0445    *db_ptr = track;    is_first_int = false;    *cs_ptr |= CSINT;}bool NEXT_SEC(DeviceQueue* device, uint16_t size){    \/\/\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0430\u0434\u0440\u0435\u0441 \u0431\u0443\u0444\u0435\u0440\u0430 \u043d\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0435\u043a\u0442\u043e\u0440\u0430    BUFFER_ADDR = BUFFER_ADDR + (size \/ 2);    ++RX_LSN;    BYTE_COUNT -= size;        if (BYTE_COUNT &gt; 0) {        return true;              }\/\/ \u043d\u0430 \u044d\u0442\u043e\u043c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430    BYTE_COUNT = 0;\/\/\u041e\u0447\u0438\u0449\u0430\u0435\u043c CS \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430    uint16_t* cs_ptr = (uint16_t*)RX_CS;    *cs_ptr = 0; \/\/ \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f    QCOMP(device);    return false;}void SILOFE(uint16_t cmd, int max_buffer, bool is_fill){    uint16_t* cs_ptr = (uint16_t*)RX_CS;    uint16_t* db_ptr = (uint16_t*)RX_DB;    \/\/\u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440    *cs_ptr = cmd;    uint16_t byte_count = BYTE_COUNT;    if (byte_count == 0) {        goto lzf;    }        \/\/ \u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0441\u0435\u043a\u0442\u043e\u0440\u0430    if (byte_count &gt; max_buffer) {        byte_count = max_buffer;    }    uint16_t* R2 = BUFFER_ADDR;    \/\/ \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430\/\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0431\u0443\u0444\u0435\u0440\u0430    do {         WAIT_READY2;        if (is_fill) {            *db_ptr = *R2;            R2++;        } else {            *R2 = *db_ptr;            R2++;        }        byte_count -= 2;    } while (byte_count &gt; 0);    lzf:    uint16_t t;    \/\/ \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0443\u043b\u044f\u043c\u0438 \u043e\u0441\u0442\u0430\u0442\u043a\u0430    while (true) {         WAIT_READY;        if (*cs_ptr &amp; CS_TRANSFER) {            if (is_fill) {                *db_ptr = 0;            } else {                t = *db_ptr;            }        } else {            \/\/ \u0437\u043d\u0430\u0447\u0438\u0442 CS_DONE            break;        }    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h2>\u0422\u0435\u043c\u0430 3. \u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b<\/h2>\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043e\u0431\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u043a \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0443 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432. \u0418\u0445 \u0441\u043f\u0438\u0441\u043e\u043a \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"https:\/\/bitsavers.org\/pdf\/dec\/pdp11\/rt11\/v4.0_Mar80\/3a\/AA-H378A-TC_RT-11_V4.0_Programmers_Reference_Manual_Mar80.pdf\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>. \u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 EMT \u2014 \u043f\u043e \u0441\u0443\u0442\u0438 \u044d\u0442\u043e \u0432\u044b\u0437\u043e\u0432 \u043f\u043e\u0434\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0430\u0434\u0440\u0435\u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0430\u043d \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <img decoding=\"async\" class=\"formula inline\" source=\"30_8\" alt=\"30_8\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/37\/372\/3725c47c00e049faae5ed702b739233f.svg\" width=\"24\" height=\"12\" data-width=\"3.25\" data-height=\"1.881\" data-vertical-align=\"-0.375\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/37\/372\/3725c47c00e049faae5ed702b739233f.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/37\/372\/3725c47c00e049faae5ed702b739233f.svg 781w\" loading=\"lazy\" decode=\"async\"\/>. \u0412 \u043c\u043e\u043c\u0435\u043d\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 RT-11  \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0442\u0430\u043c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044e EMTPRO, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0432 \u0440\u043e\u043b\u0438 \u0434\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440\u0430, \u043f\u0435\u0440\u0435\u0430\u0434\u0440\u0435\u0441\u0443\u044f \u0432\u044b\u0437\u043e\u0432 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0435\u0433\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0439, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 EMT 375. \u0412 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 R0 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e EMT 375. \u041f\u0435\u0440\u0432\u044b\u0439 \u0431\u0430\u0439\u0442 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u2014 \u043d\u043e\u043c\u0435\u0440 \u043a\u0430\u043d\u0430\u043b\u0430, \u0432\u0442\u043e\u0440\u043e\u0439 \u2014 \u043d\u043e\u043c\u0435\u0440 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0421\u043e\u0441\u0442\u0430\u0432 \u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0444\u043b\u0430\u0433 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u0438 \u043a\u043e\u0434 \u043e\u0448\u0438\u0431\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 ERRBYT \u2014 \u044f\u0447\u0435\u0439\u043a\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441 \u0430\u0434\u0440\u0435\u0441\u043e\u043c <img decoding=\"async\" class=\"formula inline\" source=\"52_8\" alt=\"52_8\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/9d\/9d8\/9d8171c7dc32eab02eb12dd707b67900.svg\" width=\"24\" height=\"12\" data-width=\"3.25\" data-height=\"1.881\" data-vertical-align=\"-0.375\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/9d\/9d8\/9d8171c7dc32eab02eb12dd707b67900.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/9d\/9d8\/9d8171c7dc32eab02eb12dd707b67900.svg 781w\" loading=\"lazy\" decode=\"async\"\/>.<\/p>\n<pre><code class=\"assembly\">; (\u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0432 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435 MACRO-11 - \u0432\u043e\u0441\u043c\u0435\u0440\u0438\u0447\u043d\u044b\u0435); \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044bARGS:   .BYTE   CHANNEL; \u043d\u043e\u043c\u0435\u0440 \u043a\u0430\u043d\u0430\u043b\u0430 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430.BYTE#10; \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 .READ        .WORD   BLOCK; \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u0431\u043b\u043e\u043a\u0430 \u0432 \u0444\u0430\u0439\u043b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u0431\u0443\u0444\u0435\u0440        .WORD   USRBUF; \u0430\u0434\u0440\u0435\u0441 \u0431\u0443\u0444\u0435\u0440\u0430        .WORD   1000; \u0434\u043b\u0438\u043d\u0430 \u0431\u0443\u0444\u0435\u0440\u0430 \u0432 \u0441\u043b\u043e\u0432\u0430\u0445,                         ; \u0442.\u0435. \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c        .WORD   0; \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0432\u0432\u043e\u0434-\u0432\u044b\u0432\u043e\u0434; \u0432\u044b\u0437\u043e\u0432        MOV     ARGS,R0        EMT     375        BCS     IO_ERROR<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0430 \u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f EMTPRO \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">\/\/ \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e#define CHNUM   16\/\/ \u043d\u0430\u0431\u043e\u0440 \u0438\u0437 16 \u043a\u0430\u043d\u0430\u043b\u043e\u0432Channel _CSW[CHNUM];\/\/ \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u0430\u043d\u0430\u043b\u043e\u0432uint16_t I_CNUM = CHNUM;\/\/ \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043d\u0430\u0431\u043e\u0440 \u043a\u0430\u043d\u0430\u043b\u043e\u0432Channel* I_CSW = &amp;_CSW[0];bool EMTPRO(EmtParams *params){    if (params-&gt;channel_num &gt;= I_CNUM) {        MONERR(7\/*CHAN_E*\/, 0, false);        return false;    }    switch (params-&gt;function)    {        case FUNC_LOOKUP:            return LOOKUP(&amp;I_CSW[params-&gt;channel_num], params-&gt;file_name, params-&gt;channel_num);            break;        case FUNC_READ:            return READ(&amp;I_CSW[params-&gt;channel_num], params-&gt;block, params-&gt;buffer, params-&gt;size,                 params-&gt;completion, params-&gt;is_async);            break;        case FUNC_WRITE:            return WRITE(&amp;I_CSW[params-&gt;channel_num], params-&gt;block, params-&gt;buffer, params-&gt;size);            break;        case FUNC_CSTAT:            return CSTAT(&amp;I_CSW[params-&gt;channel_num], params-&gt;buffer);            break;\/\/ ...\/\/ \u0438 \u043c\u043d\u043e\u0433\u0438\u0435-\u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b                default:            exit(EXIT_FAILURE);    }    return false;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h3>\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 .READ<\/h3>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b: \u043d\u043e\u043c\u0435\u0440 \u043a\u0430\u043d\u0430\u043b\u0430, \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u0431\u043b\u043e\u043a\u0430 \u0432 \u0444\u0430\u0439\u043b\u0435, \u0430\u0434\u0440\u0435\u0441 \u0431\u0443\u0444\u0435\u0440\u0430, \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0443\u0444\u0435\u0440\u0430 \u0432 \u0441\u043b\u043e\u0432\u0430\u0445 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430. <\/p>\n<p>\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435: \u0447\u0442\u0435\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u0430 \u0438\u0437 \u043a\u0430\u043d\u0430\u043b\u0430 \u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u0435\u0433\u043e \u0432 \u0431\u0443\u0444\u0435\u0440. \u0415\u0441\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0443\u0444\u0435\u0440\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430, \u0442\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u043b\u043e\u043a\u043e\u0432.<\/p>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0430\u043a\u043e\u0439:<\/p>\n<ol>\n<li>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c \u043d\u043e\u043c\u0435\u0440\u0430 \u0431\u043b\u043e\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0437 \u043a\u0430\u043d\u0430\u043b\u0430 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0434\u0440\u0430\u0439\u0432\u0435\u0440.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 QMANGR \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430.<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"cpp\">bool READ(Channel *channel, uint16_t block, uint16_t* buffer, uint16_t size,void (*completion)(void), bool is_async) {    \/\/ \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 actual_size: \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0432 (&lt;= size) \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0432\u044b\u0439\u0442\u0438 \u0437\u0430 \u043a\u043e\u043d\u0435\u0446 \u0444\u0430\u0439\u043b\u0430uint16_t actual_size;    uint16_t result = TSWCNT(block, size, channel, &amp;actual_size);    if (result == 7) {\/\/ \u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0439 \u0431\u043b\u043e\u043a \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0444\u0430\u0439\u043b\u0430        return false;    }    \/\/ \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (\u0431\u0438\u0442\u044b 1-5) \u0438\u0437 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u043a\u0430\u043d\u0430\u043b\u0430    uint16_t csw = channel-&gt;csw;     uint16_t dev_index = (csw &amp; INDEX_MASK) &gt;&gt; 1;          \/\/ \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b $ENTRY    DeviceQueue* lqe = ENTRY[dev_index];        \/\/ \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e\u0433\u043e \u043d\u043e\u043c\u0435\u0440\u0430 \u0431\u043b\u043e\u043a\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 =\/\/ \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u0432 \u0444\u0430\u0439\u043b\u0435 + \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u0444\u0430\u0439\u043b\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435    uint16_t physical_block = block + channel-&gt;start_block;        \/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0447\u0442\u0435\u043d\u0438\u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430    QMANGR(physical_block, lqe, channel, buffer, actual_size, channel-&gt;unit, completion, is_async);        return true;}uint16_t TSWCNT(uint16_t block, uint16_t size, Channel *channel, uint16_t *buffer_size) {    *buffer_size = size;        if (channel-&gt;start_block == 0) {        \/\/ \u0424\u0430\u0439\u043b \u043d\u0435 \u043e\u0442\u043a\u0440\u044b\u0442        return 0;    }        \/\/ \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0439 \u0431\u043b\u043e\u043a \u0441 \u0434\u043b\u0438\u043d\u043e\u0439 \u0444\u0430\u0439\u043b\u0430 \u0432 \u0431\u043b\u043e\u043a\u0430\u0445    uint16_t file_last_block = channel-&gt;length;    if (block &gt;= file_last_block) {        \/\/ \u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0439 \u0431\u043b\u043e\u043a \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0444\u0430\u0439\u043b\u0430        \/\/ \u041e\u0448\u0438\u0431\u043a\u0430 \"Attempted to write past end-of-file.\"        EMTERR(0);        return 7;    }        \/\/ \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u0438\u043d\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432 \u0431\u043b\u043e\u043a\u0438    uint16_t req_blocks = *buffer_size;\/\/ \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c 256 \u0434\u043b\u044f \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f \u0432\u0432\u0435\u0440\u0445    \/\/ req_blocks := (req_blocks + 256) \/ 256    req_blocks += 0x00FF;    req_blocks &amp;= 0xFF00;    req_blocks &gt;&gt;= 8;        \/\/ \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0431\u043b\u043e\u043a\u043e\u0432 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u0444\u0430\u0439\u043b\u0430    \/\/ \u0431\u043b\u043e\u043a \u043a\u043e\u043d\u0446\u0430 \u0431\u0443\u0444\u0435\u0440\u0430: \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u043b\u043e\u043a + \u0434\u043b\u0438\u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432 \u0431\u043b\u043e\u043a\u0430\u0445    uint16_t last_block_to_read = block + req_blocks;        uint16_t remaining_blocks = file_last_block - last_block_to_read;    if (remaining_blocks &gt;= 0) {        \/\/ \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043b\u043e\u043a\u043e\u0432 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u0444\u0430\u0439\u043b\u0430        return 2;    }        \/\/ \u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043b\u043e\u043a\u043e\u0432 - \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043e    \/\/ \u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u043b\u043e\u043a\u043e\u0432 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u0444\u0430\u0439\u043b\u0430    uint16_t remaining = last_block_to_read + remaining_blocks - block;    \/\/ \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0434\u043b\u0438\u043d\u0443 \u0432 \u0431\u043b\u043e\u043a\u0430\u0445 \u0432 \u0434\u043b\u0438\u043d\u0443 \u0432 \u0441\u043b\u043e\u0432\u0430\u0445    remaining = (remaining &lt;&lt; 8) | (remaining &gt;&gt; 8); \/\/ SWAB*buffer_size = remaining;        return 1;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 .WRITE \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 .READ, \u0442\u043e\u043b\u044c\u043a\u043e actual_size \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0432 QMANGR \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u2014 \u044d\u0442\u043e \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u0438.<\/p>\n<p>***<\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u043f\u0435\u0440\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043f\u043e\u0432\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e RT-11 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430. \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c \u043f\u0440\u043e \u0444\u0430\u0439\u043b\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0438 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1026302\/\">https:\/\/habr.com\/ru\/articles\/1026302\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>RT-11 \u2014 \u044d\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0438\u0437 1970-\u0445 \u0433\u043e\u0434\u043e\u0432 \u0434\u043b\u044f \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043c\u0438\u043d\u0438-\u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 PDP-11 \u0444\u0438\u0440\u043c\u044b DEC. \u0412 \u0421\u0421\u0421\u0420 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u043f\u043e\u0434 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 \u042d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u0430 60, \u0414\u0412\u041a, \u0411\u041a 0011\u041c. \u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043b\u044e\u0431\u0438\u0442 \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u0447\u0443\u0436\u043e\u0439 \u043a\u043e\u0434 \u0432 \u043f\u043e\u0438\u0441\u043a\u0430\u0445 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u043e\u0439 \u044d\u0441\u0442\u0435\u0442\u0438\u043a\u0438 \u2014 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u0438\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u0435.\u0413\u0440\u0430\u043d\u0438\u0446\u044b \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f\u042f\u0434\u0440\u043e RT-11 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u043e\u0441\u044c \u0432 \u0432\u0438\u0434\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0443\u0442\u0438\u043b\u0438\u0442\u044b sysgen \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438 \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u0436\u0435\u043b\u0435\u0437\u043e \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u2014 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0438\u0440\u0430\u043b \u044f\u0434\u0440\u043e Linux. \u0421\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u043d\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e: Unix \u0442\u043e\u0436\u0435 \u0437\u0430\u0440\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 DEC.\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u044f\u0434\u0440\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0434\u043b\u044f \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f, \u043d\u043e, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043e\u043d \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435 \u0438 \u0432\u0441\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0432\u044b\u0440\u0435\u0437\u0430\u043d\u044b. \u0418\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0434\u0435\u043b\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u043a\u0430\u043a \u0431\u0435\u0441\u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0435. \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438 \u043a \u043a\u043e\u0434\u0443 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043d\u0438\u0433\u0438:RT-11 Software Support ManualRT\u201311 System Internals ManualRT-11 Programmer&#8217;s Reference Manual  \u0412 \u043d\u0438\u0445 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432. \u0410 \u0435\u0449\u0435 \u043e\u0431\u044a\u0435\u043c \u043a\u043e\u0434\u0430 \u043d\u0435\u0432\u0435\u043b\u0438\u043a \u2014 \u043e\u043a\u043e\u043b\u043e 2 \u0442\u044b\u0441. \u0441\u0442\u0440\u043e\u043a \u043d\u0430 \u0444\u0430\u0439\u043b.\u0421\u043e\u0441\u0442\u0430\u0432 \u044f\u0434\u0440\u0430:RMON \u2014 \u0440\u0435\u0437\u0438\u0434\u0435\u043d\u0442\u043d\u044b\u0439 \u043c\u043e\u043d\u0438\u0442\u043e\u0440, \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438.USR \u2014 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439. \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0432\u044b\u0433\u0440\u0443\u0436\u0435\u043d \u043d\u0430 \u0434\u0438\u0441\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u044c \u043c\u0435\u0441\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.\u0414\u0440\u0430\u0439\u0432\u0435\u0440\u044b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432.KMON \u2014 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c. \u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0442\u043e\u0436\u0435 \u0432\u044b\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438.\u0420\u0435\u0437\u0438\u0434\u0435\u043d\u0442\u043d\u044b\u0439 \u043c\u043e\u043d\u0438\u0442\u043e\u0440 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445: \u043e\u0434\u043d\u043e\u0437\u0430\u0434\u0430\u0447\u043d\u043e\u043c, \u0434\u0432\u0443\u0445\u0437\u0430\u0434\u0430\u0447\u043d\u043e\u043c \u0438 \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e. \u041c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043e\u0434\u043d\u043e\u0437\u0430\u0434\u0430\u0447\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0432 \u0447\u0430\u0441\u0442\u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 \u0438 \u0434\u0432\u0443\u0445\u0437\u0430\u0434\u0430\u0447\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0432 \u0447\u0430\u0441\u0442\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043d\u043e\u0433\u043e\u0437\u0430\u0434\u0430\u0447\u043d\u043e\u0441\u0442\u0438. \u0418\u0437 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u0432 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0434\u0430. KMON \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0437\u0430 \u0441\u043a\u043e\u0431\u043a\u0430\u043c\u0438.\u041f\u0440\u0438\u043c\u0435\u0440\u044b (\u043f\u0441\u0435\u0432\u0434\u043e)\u043a\u043e\u0434\u0430 \u0431\u0443\u0434\u0443\u0442 \u0432 \u0432\u0438\u0434\u0435, \u043f\u0435\u0440\u0435\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u043c \u043d\u0430 \u044f\u0437\u044b\u043a \u0421\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d \u0441\u043e\u0437\u0434\u0430\u043d \u0434\u043b\u044f PDP-11. \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 70-\u0445 \u043f\u0430\u043c\u044f\u0442\u0438 \u0431\u044b\u043b\u043e \u043c\u0430\u043b\u043e, \u0435\u0435 \u0441\u0442\u0430\u0440\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043b\u0438, \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u0438\u043d\u0443 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u0443\u0436\u0438\u043c\u0430\u043b\u0438 \u0434\u043e \u0448\u0435\u0441\u0442\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432. \u041d\u0435 \u0443\u0434\u0438\u0432\u043b\u044f\u0439\u0442\u0435\u0441\u044c \u043c\u0430\u043b\u043e\u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u0448\u0435\u0441\u0442\u0438\u0431\u0443\u043a\u0432\u0435\u043d\u043d\u044b\u043c \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u044f\u043c \u0432 \u043a\u043e\u0434\u0435. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0421\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0434\u043e\u0436\u0438\u043b\u0438 \u0434\u043e \u043d\u0430\u0448\u0438\u0445 \u0434\u043d\u0435\u0439.\u0418\u0442\u0430\u043a, \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c \u043f\u0440\u043e \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0432\u0432\u043e\u0434-\u0432\u044b\u0432\u043e\u0434. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u2014 \u043f\u0440\u043e \u0444\u0430\u0439\u043b\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443. \u0412 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u2014 \u043f\u0440\u043e \u043c\u043d\u043e\u0433\u043e\u0437\u0430\u0434\u0430\u0447\u043d\u043e\u0441\u0442\u044c.\u0422\u0435\u043c\u0430 1. \u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0432\u0432\u043e\u0434-\u0432\u044b\u0432\u043e\u0434PDP-11 \u2014 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u043e\u0434\u043d\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u044b\u0439 \u0438 \u043e\u0434\u043d\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u044b\u0439. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0435\u0440\u0438\u0444\u0435\u0440\u0438\u044f \u0442\u0438\u043f\u0430 \u0436\u0435\u0441\u0442\u043a\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 \u0431\u0435\u0437 \u0443\u0447\u0430\u0441\u0442\u0438\u044f \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 RT-11 \u0444\u0443\u043d\u043a\u0446\u0438\u044f QMANGR \u043b\u0438\u0448\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430. \u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e QCOMP, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0438\u043d\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043e \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u0417\u0430\u043f\u0443\u0441\u043a \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0442\u0438 \u0432 \u0434\u0432\u0443\u0445 \u043c\u0435\u0441\u0442\u0430\u0445:QMANGR \u2014 \u0435\u0441\u043b\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0431\u044b\u043b\u0430 \u043f\u0443\u0441\u0442\u0430 (\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0435 \u0437\u0430\u043d\u044f\u0442\u043e).QCOMP \u2014 \u0435\u0441\u043b\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u043b\u043e\u0441\u044c. \u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0443\u0434\u043e\u0431\u0435\u043d, \u043a\u043e\u0433\u0434\u0430 RT-11 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u043c\u043d\u043e\u0433\u043e\u0437\u0430\u0434\u0430\u0447\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435: \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u0430\u0438\u0432\u0430\u0435\u0442, \u043a\u043e\u0433\u0434\u0430 \u043e\u0434\u043d\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430, \u0430 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441 \u043c\u0435\u043d\u044c\u0448\u0438\u043c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c (\u043f\u0440\u0438\u0432\u0435\u0442 node.js).\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445\u0412 \u043f\u0430\u043c\u044f\u0442\u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043e \u043c\u0435\u0441\u0442\u043e \u0434\u043b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 \u0442\u0438\u043f\u0430 QueueElement. \u041f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043f\u0430\u043c\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043e\u0434\u0438\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u043d\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 QSET \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u0447\u0435\u0440\u0435\u0434\u0438. \u0412 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 AVAIL \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442.\/\/ \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430typedef struct QueueElement {    \/\/ Q.LINK &#8212; \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442    struct QueueElement *link;    \/\/ Q.CSW &#8212; \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u043a\u0430\u043d\u0430\u043b\u0430    Channel *csw;    \/\/ Q.BLKN &#8212; \u043d\u043e\u043c\u0435\u0440 \u0431\u043b\u043e\u043a\u0430 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435    uint16_t block_number;    \/\/ Q.FUNC &#8212; \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f (0 = \u0447\u0442\u0435\u043d\u0438\u0435\/\u0437\u0430\u043f\u0438\u0441\u044c \u0438 \u0442.\u0434.)    uint8_t func;    \/\/ Q.UNIT &#8212; \u043d\u043e\u043c\u0435\u0440 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 1 \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 DX1)    uint8_t unit;    \/\/ Q.BUFF &#8212; \u0430\u0434\u0440\u0435\u0441 \u0431\u0443\u0444\u0435\u0440\u0430 (\u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u0438)    uint16_t *buffer;    \/\/ Q.WCNT &#8212; \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043b\u043e\u0432 (\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0438\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c)    int16_t word_count;    \/\/ Q.COMP &#8212; \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438    void (*completion)(void);} QueueElement;\/\/ \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430QueueElement QSTART;QueueElement* AVAIL = &amp;QSTART;int16_t QCNT = 1;int16_t QSIZE = 1;\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0444\u0430\u0439\u043b\u043e\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0444\u0430\u0439\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f Channel:typedef struct {    \/\/ C.CSW &#8212; Channel Status Word    uint16_t csw;    \/\/ C.SBLK &#8212; \u043d\u043e\u043c\u0435\u0440 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u0444\u0430\u0439\u043b\u0430 (0 \u0435\u0441\u043b\u0438 \u043d\u0435 \u0444\u0430\u0439\u043b)    uint16_t start_block;    \/\/ C.LENG &#8212; \u0434\u043b\u0438\u043d\u0430 \u0444\u0430\u0439\u043b\u0430 \u0432 \u0431\u043b\u043e\u043a\u0430\u0445 (\u0435\u0441\u043b\u0438 \u043e\u0442\u043a\u0440\u044b\u0442 \u0447\u0435\u0440\u0435\u0437 .LOOKUP)    \/\/ \u0438\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 (\u0435\u0441\u043b\u0438 \u043e\u0442\u043a\u0440\u044b\u0442 \u0447\u0435\u0440\u0435\u0437 .ENTER)    uint16_t length;    \/\/ C.USED &#8212; \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0431\u043b\u043e\u043a    uint16_t used_block;uint16_t unused_field;    \/\/ C.DEVQ &#8212; \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0436\u0438\u0434\u0430\u044e\u0449\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432\u0432\u043e\u0434\u0430\/\u0432\u044b\u0432\u043e\u0434\u0430    uint8_t device_queue;    \/\/ C.UNIT &#8212; \u043d\u043e\u043c\u0435\u0440 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430    uint8_t unit;    \/\/ C.SIZ &#8212; \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u043b\u043e\u043a\u0430 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445    uint16_t block_size;} Channel;\u041d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432\u0432\u043e\u0434-\u0432\u044b\u0432\u043e\u0434 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430:typedef struct DeviceQueue {    \/\/ \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 (LQE)    QueueElement *last;    \/\/ \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 (CQE)    QueueElement *first;    \/\/ \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0435\u0440\u0435\u0442 \u0432 \u0440\u0430\u0431\u043e\u0442\u0443 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043e\u0447\u0435\u0447\u0435\u0434\u0438 (CQE)void (*start)(struct DeviceQueue*);    \/\/ &#8230; \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430    \/\/ interrupt_vector, interrupt_handler, stat} DeviceQueue;QMANGR: \u043f\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c\u0412\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430 \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430. \u0417\u0430\u0431\u0438\u0440\u0430\u0435\u0442 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0435\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430.\/** * @param block &#8212; \u043d\u043e\u043c\u0435\u0440 \u0431\u043b\u043e\u043a\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 * @param device &#8212; \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 * @param channel &#8212; \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 CSW (Channel Status Word) &#8212; \u0437\u0430\u043f\u0438\u0441\u044c \u043a\u0430\u043d\u0430\u043b\u0430 * @param buffer &#8212; \u0430\u0434\u0440\u0435\u0441 \u0431\u0443\u0444\u0435\u0440\u0430 * @param word_count &#8212; \u0434\u043b\u0438\u043d\u0430 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0433\u043e\/\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0432 \u0441\u043b\u043e\u0432\u0430\u0445 * @param unit &#8212; \u043d\u043e\u043c\u0435\u0440 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 * @param completion &#8212; \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f * @param is_async &#8212; \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0432\u0432\u043e\u0434-\u0432\u044b\u0432\u043e\u0434 *\/void QMANGR(uint16_t block, DeviceQueue *device, Channel *channel,     uint16_t *buffer, uint16_t word_count, uint8_t unit,void (*completion)(void), bool is_async){    QueueElement *current_elem;        \/\/ \u041e\u0436\u0438\u0434\u0430\u0435\u043c \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438    do {        INTON();        INTOFF();    } while (QCNT &lt;= 0);        \/\/ \u0417\u0430\u0431\u0438\u0440\u0430\u0435\u043c \u043e\u0434\u0438\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445    QCNT&#8212;;    current_elem = AVAIL;    AVAIL = current_elem-&gt;link;        INTON();        \/\/ \u0417\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043e\u0447\u0435\u0440\u0435\u0434\u0438    current_elem-&gt;link = NULL;    current_elem-&gt;csw = channel;        \/\/ \u0415\u0441\u043b\u0438 \u0443\u0436\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0442\u043e \u043f\u043e\u0434\u043e\u0436\u0434\u0435\u043c \u0438\u0445 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f    while (channel-&gt;device_queue == 255) {        \/\/ \u043f\u0443\u0441\u0442\u043e\u0439 \u0446\u0438\u043a\u043b \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f\/\/ \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043d\u0430 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u0438 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\/\/ \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442 device_queue\/\/ \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0446\u0438\u043a\u043b \u043d\u0435 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439    }    \/\/ \u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u043a\u0430\u043d\u0430\u043b\u0435    channel-&gt;device_queue++;        \/\/ \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435    QueueElement *fill_ptr = current_elem;    fill_ptr-&gt;block_number = block;    fill_ptr-&gt;func = 0; \/\/ \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u0432\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0447\u0442\u0435\u043d\u0438\u044f\/\u0437\u0430\u043f\u0438\u0441\u0438    fill_ptr-&gt;unit = unit;    fill_ptr-&gt;buffer = buffer;    fill_ptr-&gt;word_count = word_count;    fill_ptr-&gt;completion = completion;        INTOFF();        \/\/ \u041f\u043e\u043c\u0435\u0449\u0430\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430QueueElement *first_elem = device-&gt;first;if (first_elem != NULL) {\/\/ \u041e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0435 \u043f\u0443\u0441\u0442\u0430 &#8212; \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043a\u043e\u043d\u0435\u0446device-&gt;last-&gt;link = current_elem;device-&gt;last = current_elem;} else {\/\/ \u041e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u0443\u0441\u0442\u0430 &#8212; \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0438 \u043f\u0435\u0440\u0432\u044b\u043c, \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043cdevice-&gt;first = current_elem;device-&gt;last = current_elem;\/\/ \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430device-&gt;start(device);}        INTON();        \/\/ \u0415\u0441\u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430\u044f, \u0442\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u043c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f    if (!is_async) {        \/\/ \u041e\u0436\u0438\u0434\u0430\u0435\u043c, \u043f\u043e\u043a\u0430 \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0435 \u0441\u0442\u0430\u043d\u0435\u0442 0        while (channel-&gt;device_queue != 0) {            \/\/ \u043f\u0443\u0441\u0442\u043e\u0439 \u0446\u0438\u043a\u043b \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f        }    }}QCOMP: \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438\u0412\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f. \u041e\u043d\u0430:\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f.\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438 \u043a\u0430\u043d\u0430\u043b\u0430.\u0423\u0434\u0430\u043b\u044f\u0435\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430.\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445.\u0412\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f, \u0435\u0441\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e.\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 (\u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c).\/** * @param device &#8212; \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 *\/void QCOMP(DeviceQueue *device){    QueueElement *qe = device-&gt;first;    int channel_num;    void (*comp)(void);        channel = qe-&gt;csw;        \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0431\u0438\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0441\u0442\u0430\u0442\u0443\u0441\u0435 \u043a\u0430\u043d\u0430\u043b\u0430    if (channel-&gt;csw &amp; HARD_ERROR_BIT) {        \/\/ HALT &#8212; \u043e\u0441\u0442\u0430\u043d\u043e\u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430        exit(EXIT_FAILURE);    }           \/\/ \u0423\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u043c \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u043a\u0430\u043d\u0430\u043b\u0435    channel-&gt;device_queue&#8212;;        \/\/ \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430    GETPSW();    INTOFF();        \/\/ \u0423\u0434\u0430\u043b\u044f\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430    \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0435\u0441\u0442\u044c \u043b\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442    if (qe-&gt;link != NULL) {        \/\/ \u041e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0435 \u043f\u0443\u0441\u0442\u0430 &#8212; \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c CQE        device-&gt;first = qe-&gt;link;    } else {        \/\/ \u041e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u0443\u0441\u0442\u0430 &#8212; \u043e\u0447\u0438\u0449\u0430\u0435\u043c LQE \u0438 CQE        device-&gt;first = NULL;device-&gt;last = NULL;    }        \/\/ \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445    qe-&gt;link = AVAIL;    AVAIL = qe;    QCNT++;        \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043a\u043e\u0434 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f (COMP)    comp = qe-&gt;completion;        \/\/ \u0412\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430    PUTPSW();  \/\/ \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 INTON    \/\/ \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044fif (comp != NULL) {comp();}        \/\/ \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438    \/\/ \u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430    if (device-&gt;first != NULL) {        device-&gt;start(device);    }}\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 \u0434\u0430\u043b\u0435\u0435 \u0438\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437 \u043f\u0440\u043e \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0434\u0430 \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 .READ. \u0422\u0435\u043c\u0430 2. \u0414\u0440\u0430\u0439\u0432\u0435\u0440 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0434\u0430 DX (\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f)\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043a\u043e\u0434\u0430 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0434\u0430 DX, \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0447\u0442\u0435\u043d\u0438\u044f\/\u0437\u0430\u043f\u0438\u0441\u0438. \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0437\u0434\u0435\u0441\u044c. \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0441 \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u043c\u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0437\u0434\u0435\u0441\u044c.\u041a\u0440\u0430\u0442\u043a\u043e \u043f\u0440\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u0435\u043a\u0442\u043e\u0440\u0430. \u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0435\u043a\u0442\u043e\u0440\u0430 \u0440\u0430\u0432\u0435\u043d 128 \u0431\u0430\u0439\u0442\u0430\u043c. \u041d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0432\u0430 \u0430\u0434\u0440\u0435\u0441\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0440\u0442\u044b \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-476873","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/476873","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=476873"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/476873\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=476873"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=476873"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=476873"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}