Proteus C++ DLL's

Использование и разработка софта (преимущественно на ПЦ)

Moderator: Shaos

User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

HardWareMan wrote:
Lavr wrote:А тебе типа того - не нужно? Типа, - вы в паскале тут поковыряйтесь, что я в децтве написал?
Мне? Нет. Я предпочитаю настоящее ИРЛ.
Да вот и нам как-то твой паскаль без надобности... хотя - спасибо за исходники,
может быть кому и пригодятся...

Хотя я сам предпочитаю делать конкретный проект заново, а не ковыряться в
устаревшей "пасквилятине".

Все предпочитают воплощать свои идеи, а не копошиться в потёмках чужих... :wink:
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

aav8 wrote:
Получается довольно забавная вещь - у нам ВСЕ устройства в одном проекте синхронизируются
от одного источника - это минимальный интервал - 1 пикосекунда!
И VSM.HPP тип для времени определен как _int64 ...
Значит что я конкретно по проекту сейчас предполагаю: вот такие конструкции
для выводов сделать индексными:

Code: Select all

       Pin1->setstate(time, 1, SLO);
       Pin2->setstate(time, 1, SHI);
       Pin3->setstate(time, 1, SLO);
       Pin4->setstate(time, 1, SHI);
чтобы в цикле операцией сдвига получать байт кода операции и байты данных.
Адреса также выставлять по ножкам в цикле используя сдвиг.

Внешние запросы слушать вот здесь:

Code: Select all

VOID FFDEVICE::simulate (ABSTIME time, DSIMMODES mode)
{
//--- заставим нашу модель читать состояние её входных линий (istate()),
//--- и отображать реакцию на него в симуляции:
  Pin3->setstate(time, 1, Pin1->istate());
  Pin4->setstate(time, 1, Pin2->istate());
//--- мы читаем значения состояния входов Pin1 и Pin2, и через 1 "тик" часов
//---(1 пикосекунда) относительно текущего времени (time) мы устанавливаем
//--- это же состояние на соответствующих выходах Pin3 и Pin4.
//--- в действительности таких быстрых устройства просто нет, так, что необходимо
//--- назначать большие значения задержек. Ещё лучшее, если величины задержек
//--- назначаются через константу. И ещё лучше, если они передаются в программу
//--- как параметры модели.
}
Реагировать на все события согласно точным временным интервалам примерно вот так:

Code: Select all

  ckt->setcallback(100000000, this, 0x25); 
//---  для этого назначим, что через 1 секунду (время, измеряется в пикосекундах)
//---  после того, как прозойдёт пуск будет вызвана функция возврата (callback)
//---  с кодом события (event) 0x25.
//---  реакцию на событие с кодом 0x25 добавим в FFDEVICE::callback (time, eventid)
//---  в виде: if (eventid == 0x25){ ...  };

VOID FFDEVICE::callback (ABSTIME time, EVENTID eventid)
{
 if(eventid == 0x25)
   {
    if(ishigh(Pin3->istate()))
      {
       Pin3->setstate(time, 1, SLO);
       Pin4->setstate(time, 1, SHI);
      }
     else
      {
       Pin3->setstate(time, 1, SHI);
       Pin4->setstate(time, 1, SLO);
//----- если наш случай вызван, мы изменяем состояние выхода на противоположное,
//----- и запускаем таймер снова на 1 секунду, после чего снова будет вызвана
//----- функция возврата (callback).
    }
    ckt->setcallback(time + 100000000, this, 0x25);
   }
Это только работающие прикидки из чужой модели...

И я ещё планирую посмотреть, как реализовали свою модель Z80 авторы CEDAR Logic Simulator.

Image
Источник

Я хотя и скачал их исходники:
http://cedarlogic.svn.sourceforge.net/v ... trunk/Z80/
но почитать, как я тут обещал, времени так и не нашел... :(

А принцип у них тот-же... симуляция логических состояних выходов при малых шагах по времени.

И последнее: если ты беспокоишься, что этого размера времени нам не хватит
"тип для времени определен как _int64", то симуляторы реально поступают так:
пишут результаты расчета в файловый буфер, а когда буфер переполнен, выводят запрос:
"Очистить буфер и продолжить расчет? или закончить расчет?"

Если "Очистить...", то последние значения принимаются за начальные условия, время обнуляется
и длинный цикл начинается сначала.


PS. Потихоньку подобрался к компиляции библиотеки и созданию графической модели i8080 из Z80...
iLavr
aav8
Maniac
Posts: 287
Joined: 05 Nov 2008 19:47
Location: 81.28.208.238

Post by aav8 »

Значит что я конкретно по проекту сейчас предполагаю: вот такие конструкции
для выводов сделать индексными
Я примерно так сделал:
описание:

Code: Select all

  // Выводы
  IDSIMPIN* pinCLK;       // тактирование
  IDSIMPIN* pinData[8];   // данные
  IDSIMPIN* pinAddr[16];  // адреса
  IDSIMPIN* pinReset;     // сброс
  IDSIMPIN* pinM1;        // M1
  IDSIMPIN* pinBusRq;     // BusREQ
подключение:

Code: Select all

  { // *** Подключение к выводам ... ********************************

    pinCLK=instance->getdsimpin("CLK",true); // тактирование

	char s[100];
    int  i;

    for(i=0;i<8;i++) { // ******************* связать с данными ... *
      wsprintf(s,"D%lu",i);
      pinData[i] = instance->getdsimpin(s,true);
    }  // *********************************** ... связать с данными *

    for(i=0;i<16;i++) { // ***************** связать с адресами ... *
      wsprintf(s,"A%lu",i);
      pinAddr[i] = instance->getdsimpin(s,true);
    }  // ********************************** ... связать с адресами *

    pinReset=instance->getdsimpin("$RESET$",true); // Reset
    pinM1   =instance->getdsimpin("$M1$",   true); // M1
    pinBusRq=instance->getdsimpin("$BUSRQ$",true); // BUSQ

  } // *** ... Подключение к выводам ********************************
установка:

Code: Select all

  int            i;
  unsigned short v=Addr;

  for(i=0;i<16;i++) {
    if(v & 1) pinAddr[i]->setstate(time,0,SHI);
	else      pinAddr[i]->setstate(time,0,SLO);
	v=v>>1; // след. бит
  }
Реагировать на все события согласно точным временным интервалам примерно вот так:
Code:
ckt->setcallback(100000000, this, 0x25);
Я думаю достаточно будет привязаться просто к CLK или внутреннему генератору модели - все равно внутри все происходит синхронно.
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

aav8 wrote:Я примерно так сделал:

Code: Select all

  int            i;
  unsigned short v=Addr;

  for(i=0;i<16;i++) {
    if(v & 1) pinAddr[i]->setstate(time,0,SHI);
	else      pinAddr[i]->setstate(time,0,SLO);
	v=v>>1; // след. бит
  }
Приятно, что похоже мыслим в одном направлении... :wink:
Ну у меня дальше план такой: получаем в цикле, вот как ты нарисовал,
КОП, и, по аналогии с имеющимися эмуляторами, находим подпрограмму
его реализации.

И вот здесь придётся вместо привычных действий реализовать "дрыгание
ножками
" по характерным диаграммам. Ничего не поделаешь - трудоёмко...
У меня ещё как назло книжка Z80 CPU с таймингами куда-то делась... :(
Надо скачать - где-то на форуме была ссылка.
aav8 wrote:
Lavr wrote:Реагировать на все события согласно точным временным интервалам...
Я думаю достаточно будет привязаться просто к CLK или внутреннему
генератору модели - все равно внутри все происходит синхронно.
Я думал вот так: получив вызов изменения значения на выводе - мы смотрим,
что надо сделать и задаём характерную задержку по фронту или спаду TimeDelay
(ну там что-то 15нс ... 25нс)

Code: Select all

  ckt->setcallback(TimeDelay, this, 0x25); 
И когда она отработает - то вызовет нас в callback-функцию, где мы начинаем
выполнение...

Поправь меня, если что-то я задумал не так...


PS. Закончил про компиляцию графической модели в библиотеку Proteus...
iLavr
aav8
Maniac
Posts: 287
Joined: 05 Nov 2008 19:47
Location: 81.28.208.238

Post by aav8 »

Примерно такие мысли:
Определяем, что CLK изменился и вызываем собственно
процессор, с текущим состоянием CLK.
Процессор у себя внутри помнит в каком он состоянии
и чегой-то делает.
В самом процессоре есть таблица 256*20. В таблице хранятся
адреса функций для каждой команды и каждого такта.
А проц. чисто тупо перебирает эту таблицу, и вызывает
функции, обеспечивающие каждый такт.
Плюсы такого подхода:
- все наглядно
- при необходимости все это легко подправить/изменить.
- если таблицу сделать трехмерной, модель будет поддерживать и
все остальные подобные процессоры (i8080,8085 ...)
Минусы:
- большой объем и много писанины ~20кБ на проц.
- не совсем точная модель - события привязаны к тикам, хотя
для дерганья ножками можно указать задержку.
Насчет callback - ов я тоже сначала думал, но в этом деле
думаю очень просто заблудиться.
УРА! - нашел User Manual на Z80 family
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

aav8 wrote:В самом процессоре есть таблица 256*20. В таблице хранятся
адреса функций для каждой команды и каждого такта.
А проц. чисто тупо перебирает эту таблицу, и вызывает
функции, обеспечивающие каждый такт.
Плюсы такого подхода:
- все наглядно
- при необходимости все это легко подправить/изменить.
- если таблицу сделать трехмерной, модель будет поддерживать и
все остальные подобные процессоры (i8080,8085 ...)
Минусы:
- большой объем и много писанины ~20кБ на проц.
- не совсем точная модель - события привязаны к тикам, хотя
для дерганья ножками можно указать задержку.
Подумаю... с разбегу не осознал плюсы и минусы...
aav8 wrote:УРА! - нашел User Manual на Z80 family
Кинь ссылочку... я Z80 CPU - так и не нашел пока... :(

И два вопроса принципиальных:
Если делаем Z80, - будем реализовывать регенерацию ОЗУ по адресной шине?

Если делаем i8080, - как будем учитывать, что C1 и C2 амплитудой 12В ?
А также, что у процессора три питания?
Для схемотехники устройств - это важно в принципе, а уж если вспомнить о разводке
плат, то просто безусловно...

Или ограничимся недо-Z80 и недо-i8080 с некоторыми условностями?

И я пока ничего не нашел по передаче параметров в модель из текстового скрипта...
Тебе попалось что-нибуть в VSM SDK на этот повод?
iLavr
aav8
Maniac
Posts: 287
Joined: 05 Nov 2008 19:47
Location: 81.28.208.238

Post by aav8 »

!! практически заработало !!
Сейчас ест-но NOP, и еще какаято команда с кодом 0x01
Для этой команды подобие микрокода тоже самое что и для NOP
Тайминги чисто тупо переписывал из мануала - одну ножку ноль
другую в 1...
Показать к сожалению не могу - все осталось на работе - иногда
удается позанимать этой штукой.
Начал вписывать в таблицу кое-какие команды - и столкнулся
с проблемой - что у Z80 есть 2-х байтовые команды...
Кинь ссылочку... я Z80 CPU - так и не нашел пока...
Только в понедельник - все там...
Если делаем Z80, - будем реализовывать регенерацию ОЗУ по адресной шине?
Я думаю с этим никаких проблем не встанет
Если делаем i8080, - как будем учитывать, что C1 и C2 амплитудой 12В ?
А также, что у процессора три питания?
У нас цифровая модель - поэтому можно подавать любое
напряжение больше, наверное 0В.
я пока ничего не нашел по передаче параметров в модель из текстового скрипта...
Тебе попалось что-нибуть в VSM SDK на этот повод?
Не совсем понятно.
*****************************************
Теперь у меня вопросы/ответы:
В какой момент увеличивать/увеличивается счетчк косанд?
- я думаю в первом такте первого цикла.
Проверка прерываний происходит тамже или где-то
в последнем такте команды?
Захват шины (ПДП) - явление синхронное или несинхронное?
- наверное синхронное, но возможно в любом цикле или такте.
*****************************************
Чиркните несколько строчек кода на ассеблере
для i8080 которым можно будет протестировать хотя-бы
часть команд.
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

aav8 wrote:Начал вписывать в таблицу кое-какие команды - и столкнулся
с проблемой - что у Z80 есть 2-х байтовые команды...
И 3-х байтовые - тоже есть... :wink:
aav8 wrote:Теперь у меня вопросы/ответы:
В какой момент увеличивать/увеличивается счетчк косанд?
Сразу после выдачи адреса на шину...
aav8 wrote:Проверка прерываний происходит тамже или где-то
в последнем такте команды?
Это точно написано в мануале, для z80 - я просто не помню...
aav8 wrote:Захват шины (ПДП) - явление синхронное или несинхронное?
- наверное синхронное, но возможно в любом цикле или такте.
Асинхронное, но через регистры привязывают к Ф2, а вот когда точно проверяют -
на диаграмме в описании обычно показывают...
aav8 wrote:Чиркните несколько строчек кода на ассеблере
для i8080 которым можно будет протестировать хотя-бы
часть команд.
А как ты будешь убеждаться, что они правильно работают?
В принципе - могу выложить asm-программу, где есть все команды i8080, я использовал
её как тест ядра эмулятора...
Тебе в asm-виде или сразу в bin?

Кладу в бинарнике: TEST8080.BIN
Там программы нет как таковой, коды нарастают от 0 до 255, учтены неопубликованные.
В 2-х и 3-байтных командах 2-й и 3-й байты = 00Н.

На asm это вот что:

Code: Select all

 NOP
 LXI  B,0000H
 STAX B
 INX  B
 INR  B
 DCR  B
 MVI  B,00H
 RLC
 NOP
 DAD  B
 LDAX B
 DCX  B
 INR  C
 DCR  C
 MVI  C,00H
 RRC
 NOP
 LXI  D,0000H
 STAX D
 INX  D
 INR  D
 DCR  D
 MVI  D,00H
 RAL
 NOP
 DAD  D
 LDAX D
 DCX  D
 INR  E
 DCR  E
 MVI  E,00H
 RAR
 NOP
 LXI  H,0000H
 SHLD 0000H
 INX  H
 INR  H
 DCR  H
 MVI  H,00H
 DAA
 NOP
 DAD  H
 LHLD 0000H
 DCX  H
 INR  L
 DCR  L
 MVI  L,00H
 CMA
 NOP
 LXI  SP,0000H
 STA  0000H
 INX  SP
 INR  M
 DCR  M
 MVI  M,00H
 STC
 NOP
 DAD  SP
 LDA  0000H
 DCX  SP
 INR  A
 DCR  A
 MVI  A,00H
 CMC
 MOV  B,B
 MOV  B,C
 MOV  B,D
 MOV  B,E
 MOV  B,H
 MOV  B,L
 MOV  B,M
 MOV  B,A
 MOV  C,B
 MOV  C,C
 MOV  C,D
 MOV  C,E
 MOV  C,H
 MOV  C,L
 MOV  C,M
 MOV  C,A
 MOV  D,B
 MOV  D,C
 MOV  D,D
 MOV  D,E
 MOV  D,H
 MOV  D,L
 MOV  D,M
 MOV  D,A
 MOV  E,B
 MOV  E,C
 MOV  E,D
 MOV  E,E
 MOV  E,H
 MOV  E,L
 MOV  E,M
 MOV  E,A
 MOV  H,B
 MOV  H,C
 MOV  H,D
 MOV  H,E
 MOV  H,H
 MOV  H,L
 MOV  H,M
 MOV  H,A
 MOV  L,B
 MOV  L,C
 MOV  L,D
 MOV  L,E
 MOV  L,H
 MOV  L,L
 MOV  L,M
 MOV  L,A
 MOV  M,B
 MOV  M,C
 MOV  M,D
 MOV  M,E
 MOV  M,H
 MOV  M,L
 HLT
 MOV  M,A
 MOV  A,B
 MOV  A,C
 MOV  A,D
 MOV  A,E
 MOV  A,H
 MOV  A,L
 MOV  A,M
 MOV  A,A
 ADD  B
 ADD  C
 ADD  D
 ADD  E
 ADD  H
 ADD  L
 ADD  M
 ADD  A
 ADC  B
 ADC  C
 ADC  D
 ADC  E
 ADC  H
 ADC  L
 ADC  M
 ADC  A
 SUB  B
 SUB  C
 SUB  D
 SUB  E
 SUB  H
 SUB  L
 SUB  M
 SUB  A
 SBB  B
 SBB  C
 SBB  D
 SBB  E
 SBB  H
 SBB  L
 SBB  M
 SBB  A
 ANA  B
 ANA  C
 ANA  D
 ANA  E
 ANA  H
 ANA  L
 ANA  M
 ANA  A
 XRA  B
 XRA  C
 XRA  D
 XRA  E
 XRA  H
 XRA  L
 XRA  M
 XRA  A
 ORA  B
 ORA  C
 ORA  D
 ORA  E
 ORA  H
 ORA  L
 ORA  M
 ORA  A
 CMP  B
 CMP  C
 CMP  D
 CMP  E
 CMP  H
 CMP  L
 CMP  M
 CMP  A
 RNZ
 POP  B
 JNZ  0000H
 JMP  0000H
 CNZ  0000H
 PUSH B
 ADI  00H
 RST  0
 RZ
 RET
 JZ   0000H
 JMP  0EE11H
 CZ   0000H
 CALL 0AA55H
 ACI  00H
 RST  1
 RNC
 POP  D
 JNC  0000H
 OUT  00H
 CNC  0000H
 PUSH D
 SUI  00H
 RST  2
 RC
 RET
 JC   0000H
 IN   00H
 CC   0000H
 CALL 0BB44H
 SBI  00H
 RST  3
 RPO
 POP  H
 JPO  0000H
 XTHL
 CPO  0000H
 PUSH H
 ANI  00H
 RST  4
 RPE
 PCHL
 JPE  0000H
 XCHG
 CPE  0000H
 CALL 0CC33H
 XRI  00H
 RST  5
 RP
 POP  PSW
 JP   0000H
 DI
 CP   0000H
 PUSH PSW
 ORI  00H
 RST  6
 RM
 SPHL
 JM   0000H
 EI
 CM   0000H
 CALL 0DD22H
 CPI  00H
 RST  7
PS. Кое-где нули во 2-м и 3-м байтах я заменял, оказывется, в тестовых целях... Это не ошибки. 8)
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

aav8 wrote:Показать к сожалению не могу - все осталось на работе - иногда
удается позанимать этой штукой.
Может я тебе закину куда-нибуть дистрибутив VC++ 5.0?
Он маленький - всего 83 Метра, но к нашей задаче подходит...

Я вот на работе практически не имею времени позаниматься нашей затеей,
поэтому поставил VC++ 5.0 дома.

Только скажи - куда закинуть, а то я не пользовался всякими "рапидшарами"... :(
iLavr
aav8
Maniac
Posts: 287
Joined: 05 Nov 2008 19:47
Location: 81.28.208.238

Post by aav8 »

И 3-х байтовые - тоже есть...
Это уже интересней...
Ну я думаю в последнем такте части команды подменять код
на что-то больше 256 и проходить таблицу еше раз.
А потом еще раз... Таблица уже будет примерно на 270 строк.
И туда-же всунуть обработку прерываний.
В принципе - могу выложить asm-программу, где есть все команды i8080
Подойдет
А как ты будешь убеждаться, что они правильно работают?
Пока не знаю. Надо реализовать все команды хотя-бы i8080
а потом попробовать напустить на все это дело тест, про который
говорилось в соседней теме.
aav8
Maniac
Posts: 287
Joined: 05 Nov 2008 19:47
Location: 81.28.208.238

Post by aav8 »

Lavr - для статьи про создание моделей в Proteus -
я нарисовал несколько классов в C++ для дерганья пинами.
В стиле pinX=true; pinY=false; Я думаю они пригодятся.
И в этом-же стиле для чтения состояния.
Есть аналогичное для 8 и 16 - бит шин.
Но к сожалению выложить это смогу только в понедельник.
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

aav8 wrote:Надо реализовать все команды хотя-бы i8080
а потом попробовать напустить на все это дело тест, про который
говорилось в соседней теме.
Я тебе под "все команды i8080" приготовил достойный корпусок! :lol:

Image
Файл проекта

Библиотека теперь будет: RU_CPU
Файлы из папки LIBRARY проекта - положить в папку LIBRARY Proteus.
Из папки SAMPLES переложить проект K580BM80 в SAMPLES Proteus.
И она сразу в Proteus объявится...

Выводы питания +12В, и -5В - ввёл, но временно обозначил неактивными...
Тактовые сигналы С1, С2 поэтому будем временно признавать - амплитуды ТТЛ.
Ну а когда решим точно - там исправить недолго...

Файл динамической библиотеки - по умолчанию там: K580BM80.DLL, (символы все латиница!)
если захочешь поменять название - ну ты знаешь, как это делается...

Модель с корпусом, хелпом и всеми необходимыми прибамбасами... как говорит Хардыч, -
"с блэкджэком и феньками..." :lol:

Вот заодно и проверим, - не напортачил ли я где чего... :wink: но проверял довольно тщательно...


PS. Да, вот ещё - я ввел задержки распространения - как параметр. Их можно будет менять извне.
Если щёлкнешь по выделенной модели - ты их увидишь: по 30nS - так справочник обещает...
Но вот пока не раскопал, как передать значение параметра внутрь модели. Ну я уже говорил
это ранее здесь...
Last edited by Lavr on 30 Nov 2012 09:26, edited 2 times in total.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

aav8 wrote:Lavr - для статьи про создание моделей в Proteus -
я нарисовал несколько классов в C++ для дерганья пинами.
В стиле pinX=true; pinY=false; Я думаю они пригодятся.
И в этом-же стиле для чтения состояния.
Есть аналогичное для 8 и 16 - бит шин.
Но к сожалению выложить это смогу только в понедельник.
Ага - это хорошо! Кстати, я так подгадал там в начале топика - твой пост второй,
и если есть настроение, - можешь в начале своего поста листинги выложить...

Я немного тормознулся - всё-же хочу сделать задержки через callback-функцию,
т.к. самим считать не надо, она - сама отрабатывает задержку.

Я заодно сделал перевод хелпа по используемым при создании модели функциям.
Чтобы прокомментировать свои исходники...

Я хочу, чтобы у кого есть желание - тоже могли подключится к созданию моделей.
Сложного-то ничего нет, а вот в хелпах копаться муторно...
Но раз уж я прокопался - постараюсь расписать процесс популярно для всех. :wink:


PS. Ну и я не очень быстрый писатель на С++... так - любитель... :oops:
iLavr
aav8
Maniac
Posts: 287
Joined: 05 Nov 2008 19:47
Location: 81.28.208.238

Post by aav8 »

Я тебе под "все команды i8080" приготовил достойный корпусок!
Круто - и очень здорово.
Файл динамической библиотеки - по умолчанию там: K580BM80.DLL
У меня DLL называется x80.DLL - в том смысле, что должна подойти
для похожих процов. Конкретный тип вроде передается
в DLL и на основе этого устанавливает внутренние флаги и
подключение к выводам.
В идеале должно работать как Z80 и можно добавить как
один из режимов i8085 (если кого-то будет интересовать).
В случае i8080 непонятные команды исполняются как NOP.
До задержек и прочего - на будующее.
Я прикидываю, что почти неделя уйдет на вбивание
тайминга команд. Буду пока все делать внутри корпуса Z80,
но система команд от i8080 - на данном этапе оно проще.
Для начального тестирования думаю нарисовать
схемку с двумя портами (вход/выход), 8 кнопок и столькоже
светодиодов, 2764 и чегой-то пробовать.
***************
Относительно i8080 -
Придется обрабатывать оба тактовых сигнала - по Ф1 начинается
машинный такт.
Блин а него-же еще и SYNС...
***************
.. чтой-то мне уже захотелось еще и модель 589ИК и 580ВВ51...
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

По непонятным командам ВМ80 я тут таблицу сводил уже. Так как никто тут не собирается рисовать печатку в протеусе, можно сократить Ф1 оставив только Ф2. Или как вариант вживление ГФ24 в модель ВМ80 (по типовой схеме и с/без делителя на 9).