nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 13 Aug 2020 13:51



Reply to topic  [ 311 posts ]  Go to page Previous  1 ... 3, 4, 5, 6, 7, 8, 9 ... 21  Next
Proteus C++ DLL's 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
HardWareMan wrote:
Lavr wrote:
А тебе типа того - не нужно? Типа, - вы в паскале тут поковыряйтесь, что я в децтве написал?

Мне? Нет. Я предпочитаю настоящее ИРЛ.

Да вот и нам как-то твой паскаль без надобности... хотя - спасибо за исходники,
может быть кому и пригодятся...

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

Все предпочитают воплощать свои идеи, а не копошиться в потёмках чужих... :wink:

_________________
iLavr


28 Nov 2012 08:48
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
aav8 wrote:
Quote:
Получается довольно забавная вещь - у нам ВСЕ устройства в одном проекте синхронизируются
от одного источника - это минимальный интервал - 1 пикосекунда!

И VSM.HPP тип для времени определен как _int64 ...

Значит что я конкретно по проекту сейчас предполагаю: вот такие конструкции
для выводов сделать индексными:
Code:
       Pin1->setstate(time, 1, SLO);
       Pin2->setstate(time, 1, SHI);
       Pin3->setstate(time, 1, SLO);
       Pin4->setstate(time, 1, SHI);

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

Внешние запросы слушать вот здесь:
Code:
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:
  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/viewvc/cedarlogic/trunk/Z80/
но почитать, как я тут обещал, времени так и не нашел... :(

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

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

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


PS. Потихоньку подобрался к компиляции библиотеки и созданию графической модели i8080 из Z80...

_________________
iLavr


28 Nov 2012 09:14
Profile
Maniac

Joined: 05 Nov 2008 20:47
Posts: 278
Location: 81.28.208.238
Reply with quote
Post 
Quote:
Значит что я конкретно по проекту сейчас предполагаю: вот такие конструкции
для выводов сделать индексными

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

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

    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:
  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; // след. бит
  }

Quote:
Реагировать на все события согласно точным временным интервалам примерно вот так:
Code:
ckt->setcallback(100000000, this, 0x25);

Я думаю достаточно будет привязаться просто к CLK или внутреннему генератору модели - все равно внутри все происходит синхронно.


28 Nov 2012 19:26
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
aav8 wrote:
Я примерно так сделал:
Code:
  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:
  ckt->setcallback(TimeDelay, this, 0x25);

И когда она отработает - то вызовет нас в callback-функцию, где мы начинаем
выполнение...

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


PS. Закончил про компиляцию графической модели в библиотеку Proteus...

_________________
iLavr


29 Nov 2012 15:56
Profile
Maniac

Joined: 05 Nov 2008 20:47
Posts: 278
Location: 81.28.208.238
Reply with quote
Post 
Примерно такие мысли:
Определяем, что CLK изменился и вызываем собственно
процессор, с текущим состоянием CLK.
Процессор у себя внутри помнит в каком он состоянии
и чегой-то делает.
В самом процессоре есть таблица 256*20. В таблице хранятся
адреса функций для каждой команды и каждого такта.
А проц. чисто тупо перебирает эту таблицу, и вызывает
функции, обеспечивающие каждый такт.
Плюсы такого подхода:
- все наглядно
- при необходимости все это легко подправить/изменить.
- если таблицу сделать трехмерной, модель будет поддерживать и
все остальные подобные процессоры (i8080,8085 ...)
Минусы:
- большой объем и много писанины ~20кБ на проц.
- не совсем точная модель - события привязаны к тикам, хотя
для дерганья ножками можно указать задержку.
Насчет callback - ов я тоже сначала думал, но в этом деле
думаю очень просто заблудиться.
УРА! - нашел User Manual на Z80 family


29 Nov 2012 19:27
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
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


30 Nov 2012 05:08
Profile
Maniac

Joined: 05 Nov 2008 20:47
Posts: 278
Location: 81.28.208.238
Reply with quote
Post 
!! практически заработало !!
Сейчас ест-но NOP, и еще какаято команда с кодом 0x01
Для этой команды подобие микрокода тоже самое что и для NOP
Тайминги чисто тупо переписывал из мануала - одну ножку ноль
другую в 1...
Показать к сожалению не могу - все осталось на работе - иногда
удается позанимать этой штукой.
Начал вписывать в таблицу кое-какие команды - и столкнулся
с проблемой - что у Z80 есть 2-х байтовые команды...
Quote:
Кинь ссылочку... я Z80 CPU - так и не нашел пока...

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

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

У нас цифровая модель - поэтому можно подавать любое
напряжение больше, наверное 0В.
Quote:
я пока ничего не нашел по передаче параметров в модель из текстового скрипта...
Тебе попалось что-нибуть в VSM SDK на этот повод?

Не совсем понятно.
*****************************************
Теперь у меня вопросы/ответы:
В какой момент увеличивать/увеличивается счетчк косанд?
- я думаю в первом такте первого цикла.
Проверка прерываний происходит тамже или где-то
в последнем такте команды?
Захват шины (ПДП) - явление синхронное или несинхронное?
- наверное синхронное, но возможно в любом цикле или такте.
*****************************************
Чиркните несколько строчек кода на ассеблере
для i8080 которым можно будет протестировать хотя-бы
часть команд.


30 Nov 2012 06:11
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
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:
 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


30 Nov 2012 06:23
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
aav8 wrote:
Показать к сожалению не могу - все осталось на работе - иногда
удается позанимать этой штукой.

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

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

Только скажи - куда закинуть, а то я не пользовался всякими "рапидшарами"... :(

_________________
iLavr


30 Nov 2012 07:18
Profile
Maniac

Joined: 05 Nov 2008 20:47
Posts: 278
Location: 81.28.208.238
Reply with quote
Post 
Quote:
И 3-х байтовые - тоже есть...

Это уже интересней...
Ну я думаю в последнем такте части команды подменять код
на что-то больше 256 и проходить таблицу еше раз.
А потом еще раз... Таблица уже будет примерно на 270 строк.
И туда-же всунуть обработку прерываний.
Quote:
В принципе - могу выложить asm-программу, где есть все команды i8080

Подойдет
Quote:
А как ты будешь убеждаться, что они правильно работают?

Пока не знаю. Надо реализовать все команды хотя-бы i8080
а потом попробовать напустить на все это дело тест, про который
говорилось в соседней теме.


30 Nov 2012 07:27
Profile
Maniac

Joined: 05 Nov 2008 20:47
Posts: 278
Location: 81.28.208.238
Reply with quote
Post 
Lavr - для статьи про создание моделей в Proteus -
я нарисовал несколько классов в C++ для дерганья пинами.
В стиле pinX=true; pinY=false; Я думаю они пригодятся.
И в этом-же стиле для чтения состояния.
Есть аналогичное для 8 и 16 - бит шин.
Но к сожалению выложить это смогу только в понедельник.


30 Nov 2012 09:14
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
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 - так справочник обещает...
Но вот пока не раскопал, как передать значение параметра внутрь модели. Ну я уже говорил
это ранее здесь...

_________________
iLavr


Last edited by Lavr on 30 Nov 2012 10:26, edited 2 times in total.



30 Nov 2012 09:54
Profile
Supreme God
User avatar

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

Ага - это хорошо! Кстати, я так подгадал там в начале топика - твой пост второй,
и если есть настроение, - можешь в начале своего поста листинги выложить...

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

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

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


PS. Ну и я не очень быстрый писатель на С++... так - любитель... :oops:

_________________
iLavr


30 Nov 2012 10:03
Profile
Maniac

Joined: 05 Nov 2008 20:47
Posts: 278
Location: 81.28.208.238
Reply with quote
Post 
Quote:
Я тебе под "все команды i8080" приготовил достойный корпусок!

Круто - и очень здорово.
Quote:
Файл динамической библиотеки - по умолчанию там: K580BM80.DLL

У меня DLL называется x80.DLL - в том смысле, что должна подойти
для похожих процов. Конкретный тип вроде передается
в DLL и на основе этого устанавливает внутренние флаги и
подключение к выводам.
В идеале должно работать как Z80 и можно добавить как
один из режимов i8085 (если кого-то будет интересовать).
В случае i8080 непонятные команды исполняются как NOP.
До задержек и прочего - на будующее.
Я прикидываю, что почти неделя уйдет на вбивание
тайминга команд. Буду пока все делать внутри корпуса Z80,
но система команд от i8080 - на данном этапе оно проще.
Для начального тестирования думаю нарисовать
схемку с двумя портами (вход/выход), 8 кнопок и столькоже
светодиодов, 2764 и чегой-то пробовать.
***************
Относительно i8080 -
Придется обрабатывать оба тактовых сигнала - по Ф1 начинается
машинный такт.
Блин а него-же еще и SYNС...
***************
.. чтой-то мне уже захотелось еще и модель 589ИК и 580ВВ51...


30 Nov 2012 10:55
Profile
Banned
User avatar

Joined: 20 Mar 2005 14:41
Posts: 2146
Location: От туда
Reply with quote
Post 
По непонятным командам ВМ80 я тут таблицу сводил уже. Так как никто тут не собирается рисовать печатку в протеусе, можно сократить Ф1 оставив только Ф2. Или как вариант вживление ГФ24 в модель ВМ80 (по типовой схеме и с/без делителя на 9).


30 Nov 2012 11:13
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 311 posts ]  Go to page Previous  1 ... 3, 4, 5, 6, 7, 8, 9 ... 21  Next

Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.