С такими именами, как «сигнал ввода-вывода» и «отображение памяти», все сделано намного сложнее, чем есть на самом деле, и, следовательно, у человека создается впечатление, что в нем гораздо больше, и это охватывает сложную тему. Тенденция сейчас такова, что люди рассматривают это как нечто новое. Но это очень далеко от случая. Даже Бэббидж в 1830-х годах управлял своим принтером, для этого требовался сигнал ввода-вывода, хотя и с помощью акселя и зубчатого колеса. Например, в машинах Героя Александрийского 2000 лет назад или в кинотеатрах еще во времена Греции, они всегда тянули веревку из множества различных веревок, чтобы управлять освещением или пейзажем, каждая веревка похожа на линию входа и выхода, она как Проще говоря, адрес - это «какая строка», т.е. какую вещь, память или устройство мы выбираем,
Хотя большие мэйнфрейм-компьютеры, которые заполняли здания шкафами, в 40-х годах использовали такие вещи, как 64-битные, и, следовательно, имели дело с отображением ввода-вывода точно так же, как и тогда, например, Конрад Цузе и его компьютер размером с комнату использовали плавающие Точка, которая имела около 20 цифр в десятичном виде в 1930-х годах, и должна была управлять такими вещами, как его принтер, его различные индикаторы лампочек и его переключатели. Но на крошечных микропроцессорах дело обстоит иначе: они не представлялись до 60-х годов и создавались до 1971 года. Все эти методы, использующие 8-битную логику в 80-х, использовались для микропроцессоров в 4-битных в 70-х, 2-битных в 60-х и использовались в 16бит в 90 ' s, когда все начали приобретать компьютер и, следовательно, потому что он был перед ними, впервые начали обсуждать эту тему ввода-вывода и отображения памяти, и это стало чем-то новым, появившимся с появлением Интернета; затем у нас были 32-битные компьютеры в 00-х и 64-битные компьютеры в 10-х, что привело к бесконечным дискуссиям по поводу памяти. Чтобы ответить на ваш вопрос, я буду говорить о микросхемах, которые любители электроники купили 30-40 лет назад, как, например, в то время, когда я это делал, поскольку позже все стало настолько продвинутым, что я не смог собрать более поздние микросхемы, но Принципы теперь одни и те же, ворота просто спрятаны внутри больших чипов в черной рамке, которые включают в себя другие выводы, которые выполняют эти операции гораздо чаще параллельно (например, включение многих восьмеричных защелок,
Ну, я ничего не знаю обо всех новых языках или о том, как сейчас на современных ПК, но я могу рассказать вам, как это было в старые времена, когда я делал компьютеры с чипами.
Все средства I / O Mapping и Memory отображают в простых терминах, если вы взяли пример с лампочками для какого-то торжества и проводили провода к каждому и называли лампочки Местами памяти (т.е. лампочки представляют память в RAM, либо включено или выключено, и если вы выберете местоположение 0, вы получите провод 0, местоположение 1, провод 1, провод 2, провод 2 и т. д.), если вы добавили еще несколько проводов, например, один провод - это звонок, то это конкретное местоположение не является памятью. это устройство, которое вы выводите, используя команду OUT, чтобы оно звонило. Но он рассматривается как область памяти с точки зрения компьютера, потому что он точно так же подключается к MPU. Если был добавлен другой провод, которым был внешний выключатель, это устройство ввода-вывода, которое будет инструкцией IN для ПК. Так что это называется I / O Mapped I / O.
Теперь на компьютерах провода на шинах представляют собой адресные линии или линии данных, НО они в двоичном виде, то есть с 2 проводами вы можете иметь 00 01 10 11, т.е. 4 комбинации 2 ^ 2, то есть с 8 линиями 2 ^ 8 = 256 возможностей 20 строк 2 ^ 20 = 1048576 с 30 линиями 2 ^ 30 = 1073741824 (1 гига) возможностей с 30 линиями. Вот почему он называется MAPPED, а не просто говорит о вводе-выводе и памяти, они говорят о сопоставлении ввода-вывода и отображении памяти, потому что вы отображаете провода как комбинацию и двоичное кодирование их. Так что, если, скажем, у вас было 2 провода, 4 комбинации, они не могут быть просто подключены к лампам (не говоря уже об усилении тока, необходимом для крошечных напряжений от MPU, и предотвращении тока обратной связи), но 2 провода имеют чтобы пройти через декодер (мы использовали 138 для декодирования 3 строк в 8 строк, 164 для декодирования 4 двоичных строк в 16 строк. После прохождения через декодер эти 2 строки, например, A0 и A1 (адрес 0 и адрес 1 (ЛИНИИ)), становятся 4 линиями (вкл или выкл) для конкретной лампы, которую вы ведете (в случае на компьютере, ПАМЯТЬ), но в некоторых случаях эти местоположения вместо этого выбирают какое-либо устройство ввода / вывода и говорят вместо этого «использовать меня», то есть, как и в случае с памятью, когда данные найдены, данные затем передаются в одну или другую сторону (используя умную логику трех состояний для отключения напряжения в пути). каждый раз) на линиях шины данных D0..7 или D0..31 или любого другого размера, данные на компьютере (у вас есть 2-битный, 4-битный, 8-битный, 16-битный, 32-битный, 64-битный, 128-битный, 256-битный, компьютер, что угодно компьютер, который вы строите). Таким образом, данные естественным образом поступают в или из линий данных в память или на устройство ввода-вывода (если оно отображено в памяти), но ЭТО НЕ СЛЕДУЕТ смешивать с инструкциями IN / OUT, THIS IN и OUT означают из некоторого ДРУГОГО блока памяти ввода-вывода, специального блока памяти ввода-вывода внутри MPU, назначенного специально только для ввода-вывода, то есть (не сопоставленного с памятью), это пространство ввода-вывода, которое вы не всегда получаете на некоторых микропроцессорах, например, я не думаю, что у нас это было на 6502, но у нас это было на z80. Более художественные чипы используют только отображение памяти, например, в игровых приставках и т. Д., Более разумные, но неинтересные (оставшиеся в книге) чипы также используются для ввода-вывода. Ввод-вывод с отображением в памяти обеспечивает повышенную скорость, поскольку он включает адресацию памяти (что является очень быстрым для ОЗУ), поэтому компьютер графического типа использует только отображение памяти для ввода-вывода, чтобы получить скорость. I / O Mapped I / O назначается для медленных портов, например, RS232 или параллельного порта, и использует команды IN OUT. е. (не отображена память), это пространство ввода / вывода, которое вы не всегда получаете на некоторых микропроцессорах, например, я не думаю, что оно было у нас на 6502, но у нас оно было на z80. Более художественные чипы используют только отображение памяти, например, в игровых приставках и т. Д., Более разумные, но неинтересные (оставшиеся в книге) чипы также используются для ввода-вывода. Ввод-вывод с отображением в памяти обеспечивает повышенную скорость, поскольку он включает адресацию памяти (что является очень быстрым для ОЗУ), поэтому компьютер графического типа использует только отображение памяти для ввода-вывода, чтобы получить скорость. I / O Mapped I / O назначается для медленных портов, например, RS232 или параллельного порта, и использует команды IN OUT. е. (не отображена память), это пространство ввода / вывода, которое вы не всегда получаете на некоторых микропроцессорах, например, я не думаю, что оно было у нас на 6502, но у нас оно было на z80. Более художественные чипы используют только отображение памяти, например, в игровых приставках и т. Д., Более разумные, но неинтересные (оставшиеся в книге) чипы также используются для ввода-вывода. Ввод-вывод с отображением в памяти обеспечивает повышенную скорость, поскольку он включает адресацию памяти (что является очень быстрым для ОЗУ), поэтому компьютер графического типа использует только отображение памяти для ввода-вывода, чтобы получить скорость. I / O Mapped I / O назначается для медленных портов, например, RS232 или параллельного порта, и использует команды IN OUT. более разумные, но неинтересные (оставшиеся в книге) чипы также используют пространство ввода / вывода. Ввод-вывод с отображением в памяти обеспечивает повышенную скорость, поскольку он включает адресацию памяти (что является очень быстрым для ОЗУ), поэтому компьютер графического типа использует только отображение памяти для ввода-вывода, чтобы получить скорость. I / O Mapped I / O назначается для медленных портов, например, RS232 или параллельного порта, и использует команды IN OUT. более разумные, но неинтересные (оставшиеся в книге) чипы также используют пространство ввода / вывода. Ввод-вывод с отображением в памяти обеспечивает повышенную скорость, поскольку он включает адресацию памяти (что является очень быстрым для ОЗУ), поэтому компьютер графического типа использует только отображение памяти для ввода-вывода, чтобы получить скорость. I / O Mapped I / O назначается для медленных портов, например, RS232 или параллельного порта, и использует команды IN OUT.
Теперь, если вместо того, чтобы добавить два провода, если вы фактически заменили два провода, которые изначально были на лампах, взяли некоторые из этих ламп и заменили их другими вещами, например колоколом на одном и переключателем на другом, на них теперь нет ссылок (выбрано ) с инструкциями IN и OUT соответственно, на них ссылаются, обращаясь к той конкретной области памяти, которая выбирает те провода (которые были первоначально лампочками). Так что это ввод-вывод с отображением в память.
Ввод / вывод с отображением в памяти означает, что фактическая адресная шина, которая обычно поступает в память (ОЗУ), также подключена к ДРУГИМ декодерам (логическим декодерам), и когда она распознает конкретную двоичную комбинацию сигналов адреса, она выдает высокий выходной (например, если у вас была нагрузка, а не ворота, и вы сказали, что если это, а не то и так, с использованием выводов A0..A20 или любого другого размера вашей адресной шины), то этот высокий сигнал ВКЛЮЧАЕТ защелку, (для конкретного устройства, такого как последовательный порт, параллельный порт), эта защелка затем передает данные по шине данных через устройство ввода-вывода. Это для записи на устройство ввода-вывода. Считывание работает наоборот, устройство ввода-вывода передает данные обратно, и, если я правильно помню, оно отправляет точно такую же комбинацию кодов адреса в адресные строки.
Я полагаю, что сегодня это должно работать так же, за исключением того, что они будут содержать гораздо больше строк данных и адресов.
Вы буквально ПРОВОДИТЕ I / O к адресным строкам. Следовательно, ввод-вывод эффективно отображается в пространстве памяти, как если бы это была память. Но другая защелка не позволяет адресным контактам одновременно получать доступ к оперативной памяти, поэтому вы не получаете напряжения двух адресов или источников данных на одной линии, которые могут повредить микросхемы.
С инструкцией IN и OUT мы сделали это 40 лет назад на чипе z80. Это относится к особым случаям, когда микросхема фактически имеет дело с самим вводом / выводом другим способом, то есть она не отображена в памяти. (т.е. с отображенной памятью вы просто читаете или записываете в область памяти, но с IN и OUT вы уже сообщаете CPU, что это сигнал ввода-вывода, а не память). Таким образом, с инструкцией IN / OUT, это имеет свое собственное адресное пространство ввода / вывода (которое является дополнительным для памяти оперативной памяти), этот оперативный модуль ввода / вывода, как кажется, имеет набор адресов точно такой же, за исключением того, что вы напрямую получаете доступ к устройству через присоединение декодера к этим адресам ввода / вывода, и вы не получаете доступ к устройству ввода / вывода со стандартных выводов адреса, это для инструкции IN / OUT.
которые для этого случая лучше всего передавать как строки кодов ASCII для букв и цифр. Эти команды точно такие же, как если бы вы использовали инструкции IN и OUT в цикле, где count - это длина строки.
Если вы обращаетесь, например, к динамику ПК, вы просто будете передавать один фрагмент данных за раз, используя OUT.
Если бы вы читали с параллельного порта, вы бы выполняли IN и использовали код для адреса ввода-вывода порта. Записывая его, например, чтобы управлять старыми принтерами или робототехникой с помощью электронных сигналов, вы будете использовать команду OUT. Параллельный порт и последовательный порт (старый RS232) являются типичными портами, которые использовались. RS232 - это последовательные данные, только один бит может входить или выходить, поэтому, если вы читаете с rs232, у вас будет только 1 бит соответствующего байта, такой же, как при выводе. Максимальная скорость передачи составляет около 17 кГц для rs232, но они часто использовались для управления электроникой. В те времена я использовал для построения схем rs232, например, для считывания напряжений или управления микроконтроллерами PIC. Каждый порт называется, например, COM1 COM2 COM3 COM4, и они имеют адреса ввода-вывода. Я не уверен, что под рукой, но они похожи, например, 3F8h 378h (h = шестнадцатеричный адрес)
Я не уверен насчет современных портов, но если вы выполняете запись на USB, скорее всего это будет ввод-вывод с отображением в памяти для большей скорости.
Порт клавиатуры PS / 2, я думаю, что для чтения данных с клавиатуры используется инструкция IN. Это заменяет старый RS232, но я полагаю, что у него немного другая спецификация.
Дисковод обычно отображался в памяти, по-видимому, так и сейчас, то есть вы не управляете диском с инструкциями ввода / вывода, они будут слишком медленными. Но порты все равно медленные, поэтому это не имеет значения, например, принтер работает медленнее, чем требуется скорость передачи данных, по сравнению с потрясающей, например, 200 мегабайт / секунду, требуемой от жесткого диска. Динамик, ему нужна только частота звука около 10 или 20, скажем, 20 кГц было бы достаточно для зуммера, следовательно, это ввод / вывод. Медленные вещи используют I / O, инструкции IN / OUT. Следовательно, вероятно, USB теперь подключен к памяти, вам придется проверить его.
Лучший способ понять это так. На старых компьютерах еще в 80-х годах иногда вы хотели управлять каким-то устройством, которое вы создали, и не имели никаких спецификаций для выходных портов (так как в те дни производитель скрывал это, чтобы некоторые компании, например, компании по производству джойстиков и картриджей) могли продвигаться вперед в рынок по какой-то коммерческой сделке). Вам нужно было открыть компьютер и буквально припаять провода к некоторым точкам на адресной шине, например, вы припаяли три провода к некоторым точкам в цепи на безопасном расстоянии (чтобы не повредить микросхему нагревом), те точки, соединенные схемой печатной платы, например, с выводами A15, A7 и A1 на микропроцессоре. И вам, как правило, нужно было бы подключить линию MREQ (строку запроса памяти и / или линию RD / WR, чтобы сделать более точный сигнал, и добавить это в логику «или нет», но если бы вы были умны, вы могли бы просто сделать это с адресными линиями) А затем вы подключили эти три провода + этот дополнительный сигнал типа Ready (например, линия MREQ RD или WR, чтобы дать какой-нибудь активный низкий или высокий уровень (который потребовал бы возможного дополнительного НЕ вентиль здесь), чтобы сказать, что ДАННЫЕ готовы к линии СЕЙЧАС) через 4 входа И вентиль, который дал выход на светодиод через резистор 200 Ом, у вас есть собственная память, сопоставленная высокоскоростным вводом / выводом в светодиод , который можно защелкнуть через защелку SR или защелку типа D, чтобы сохранить ее в 1-битной памяти на внешней плате. Здесь 15 - это строка 32 КБ, 7 - это строка 64, 1 - это строка 2 (двоичный код работает в степени 2, поэтому А1 равен 2 ^ 1, А7 равен 2 ^ 7 и А15 равен 2 ^ 15), поэтому если вы адресуемое местоположение 32768 + 64 + 2 = 32834 = F041 в шестнадцатеричном виде, используя LDA или STA или LD на старых MPU в ассемблере, вы должны вывести на этот светодиод, это было бы ярко, если бы резистор был, скажем, около 100 Ом. Таким образом, вы выполнили ввод-вывод с отображением в память, который настолько прост, насколько это возможно, вы можете сделать это сегодня, припаяв к тем же адресным строкам mpu. Но вы бы не сделали этого сейчас из-за деликатности схем. Но вы также можете присоединиться к линиям данных D0..7 (в прежние времена) или, скажем, d0..31 теперь для 32-битных на старом 486 ПК. Затем, если вы обратились к этому месту в машинном коде, загрузив аккумулятор со значением 8 (mov ax, 8 в настоящее время) или сохранив это значение аккумулятора в адресном месте (mov F041h, аккумулятор ax, вы бы ДАЖЕ получили сегодня, что привело к приходу Обратите внимание, что 8 в примере - это то, что находится на шине данных, в данном конкретном случае мы не передаем данные, мы просто включаем конкретное устройство (светодиод включен, если мы выбрали устройство ТА, здесь просто светодиод), таким образом, в этом примере не имеет значения, какое число у нас есть с этой инструкцией MOV ax, 8, это может быть, например, mov ax, 243, и мы все равно включили бы светодиод на линии F041h, когда затем выполняем mov F041h, так как так как мы используем один и тот же адрес. Видите ли, есть адресные строки и есть строки данных. Поэтому, когда вы обращаетесь к 3F8 в COM1 или к какому-либо адресу, карта памяти ввода / вывода просто отправляет сигнал на порт, например, ps / 2, а вентиль and проверяет, есть ли у вас 1110000100 в строках, т.е. 3 1000 - это F, а 0100 - это 8, см. Двоичное в шестнадцатеричное преобразование. Если в тех битовых позициях, где есть 1, появляются высокие напряжения, то порт, например, rs232 или ps / 2, устанавливается в активное состояние, т. Е. Он активирован, это активирует защелки с помощью сигнала включения микросхемы CE или микросхемы CS. выберите простой. В соответствии с инструкцией 8 это может быть, например, mov ax, 243, и мы все равно включили бы светодиод на линии F041h, когда затем выполняем mov F041h, так как мы используем тот же адрес. Видите ли, есть адресные строки и есть строки данных. Поэтому, когда вы обращаетесь к 3F8 в COM1 или к какому-либо адресу, карта памяти ввода / вывода просто отправляет сигнал на порт, например, ps / 2, а вентиль and проверяет, есть ли у вас 1110000100 в строках, т.е. 3 1000 - это F, а 0100 - это 8, см. Двоичное в шестнадцатеричное преобразование. Если в тех битовых позициях, где есть 1, появляются высокие напряжения, то порт, например, rs232 или ps / 2, устанавливается в активное состояние, т. Е. Он активирован, это активирует защелки с помощью сигнала включения микросхемы CE или микросхемы CS. выберите простой. В соответствии с инструкцией 8 это может быть, например, mov ax, 243, и мы все равно включили бы светодиод на линии F041h, когда затем выполняем mov F041h, так как мы используем тот же адрес. Видите ли, есть адресные строки и есть строки данных. Поэтому, когда вы обращаетесь к 3F8 в COM1 или к какому-либо адресу, карта памяти ввода / вывода просто отправляет сигнал на порт, например, ps / 2, а вентиль and проверяет, есть ли у вас 1110000100 в строках, т.е. 3 1000 - это F, а 0100 - это 8, см. Двоичное в шестнадцатеричное преобразование. Если в тех битовых позициях, где есть 1, появляются высокие напряжения, то порт, например, rs232 или ps / 2, устанавливается в активное состояние, т. Е. Он активирован, это активирует защелки с помощью сигнала включения микросхемы CE или микросхемы CS. выберите простой. так как мы используем один и тот же адрес. Видите ли, есть адресные строки и есть строки данных. Поэтому, когда вы обращаетесь к 3F8 в COM1 или к какому-либо адресу, карта памяти ввода / вывода просто отправляет сигнал на порт, например, ps / 2, а вентиль and проверяет, есть ли у вас 1110000100 в строках, т.е. 3 1000 - это F, а 0100 - это 8, см. Двоичное в шестнадцатеричное преобразование. Если в тех битовых позициях, где есть 1, появляются высокие напряжения, то порт, например, rs232 или ps / 2, устанавливается в активное состояние, т. Е. Он активирован, это активирует защелки с помощью сигнала включения микросхемы CE или микросхемы CS. выберите простой. так как мы используем один и тот же адрес. Видите ли, есть адресные строки и есть строки данных. Поэтому, когда вы обращаетесь к 3F8 в COM1 или к какому-либо адресу, карта памяти ввода / вывода просто отправляет сигнал на порт, например, ps / 2, а вентиль and проверяет, есть ли у вас 1110000100 в строках, т.е. 3 1000 - это F, а 0100 - это 8, см. Двоичное в шестнадцатеричное преобразование. Если в тех битовых позициях, где есть 1, появляются высокие напряжения, то порт, например, rs232 или ps / 2, устанавливается в активное состояние, т. Е. Он активирован, это активирует защелки с помощью сигнала включения микросхемы CE или микросхемы CS. выберите простой. 11 - 3, 1000 - F, а 0100 - 8, см. Двоичное в шестнадцатеричное преобразование. Если в тех битовых позициях, где есть 1, появляются высокие напряжения, то порт, например, rs232 или ps / 2, устанавливается в активное состояние, т. Е. Он активирован, это активирует защелки с помощью сигнала включения микросхемы CE или микросхемы CS. выберите простой. 11 - 3, 1000 - F, а 0100 - 8, см. Двоичное в шестнадцатеричное преобразование. Если в тех битовых позициях, где есть 1, появляются высокие напряжения, то порт, например, rs232 или ps / 2, устанавливается в активное состояние, т. Е. Он активирован, это активирует защелки с помощью сигнала включения микросхемы CE или микросхемы CS. выберите простой.
На фиксаторе это активная точка E Enable или активная активная выходная мощность низкого уровня. Т.е. в описанном выше примере мы используем адреса для выбора (путем декодирования) КАКОГО устройства ввода / вывода, которое мы хотим использовать (т. Е. В примере загорается светодиод, если выбрано это устройство ввода / вывода. Так что это линия включения Затем, когда устройство ввода-вывода выбрано, данные передаются из шины данных (D0..7 в старые времена или пример D0..63 для 64-битного компьютера) через восьмеричные защелки 373 в старом дни, это триггеры D-типа, которые хранят данные внутри триггеров. При активном высоком фронте тактовых импульсов данные проходят и сохраняются. Этот фронт тактового импульса будет поступать из сигнала «DATA RDY» в сигнале данных у него есть разные имена, я не знаю, как это называется сейчас, поэтому для 64-битных у нас есть 8 восьмеричных защелок. И они используют двунаправленные защелки для управления данными в любом случае или в трех состояниях, так что, когда устройство ввода-вывода не используется, линии данных находятся в состоянии высокого импеданса. Таким образом, поэтому вы выбираете устройство ввода-вывода с комбинацией в адресных строках, это число, например, 3f8h в OUT 3F8h, 7, а данные, здесь в примере 7, это то, что передается по линиям данных, в По команде OUT данные передаются OUT в защелку данных и выводятся на устройство ввода-вывода. Если бы у вас был IN, вы бы выполняли команду, например, IN 3f8h, 800h, (я ожидаю, но я не знаю синтаксис ассемблера x86), я имею в виду, что для IN вы вводите данные из линии данных (после выбора адреса, например, здесь 3f7h, который выбирает устройство ввода / вывода), эти данные поступают с устройства ввода / вывода, через триггеры D-типа в защелке данных (по одному на каждый бит линий шины данных) и вводится в контакты D0..7 или (D0..63 на современных ПК) на блоке микропроцессора MPU ). В этом примере я поместил IN 3f8h, 800h, чтобы показать, что как только данные поступают, они сохраняются в адресе 800h. Синтаксис x86, я думаю, отличается, вы должны будете, вероятно, сделать в 3f8h, ну или что-то подобное, то есть в регистр сначала с поступающими данными, затем вы будете перемещать 800h, ах, то есть перемещать данные в память расположение в ОЗУ, (если вы хотите сохранить его) или сделать что-то еще с помощью ах и т. д. ах - это примерный регистр, это может быть любой, al, bh, bl и т. д., но проверьте синтаксис, каждая система на ассемблере немного отличается, я не эксперт по x86. Опять же, я использую 3f8h в качестве примера адреса ввода / вывода, есть сотни,
Принимая во внимание, что когда вы обращаетесь к памяти (ОЗУ, например, 64-байтовые статические оперативные памяти и динамические ОЗУ в 70-х годах, 8 КБ RAM и DRAM в 80-х годах, строки SIMMS имеют по несколько мегабайт каждая (модуль памяти в одну строку) в 90-х годах, и теперь в форме модулей DDR, содержащих модули DIMM, модули памяти с двумя последовательными линиями, я не проверял, но последние, вероятно, каждый, несомненно, имеют по несколько гигабайт на каждый маленький чип), если это не адрес ввода-вывода (очень немногие адреса являются адресами ввода-вывода, в настоящее время память в миллионах или более раз находится в адресном пространстве, чем ввод-вывод на современном компьютере), вы все равно используете те же инструкции чтения-записи данных в память, но вы не управляя некоторыми внешними логическими схемами, которые ищут эти биты, вместо этого эти контакты адреса и данных подключаются непосредственно к микросхемам ОЗУ.
В машинном коде адреса ввода / вывода и адресация памяти выглядят одинаково, как будто они оба являются обращениями к памяти, но то, что происходит физически, в реальной электронной схеме полностью отличается.