Да - диаграмму из "Радио" мы здесь на форуме тоже привели
Отличная диаграмка - журнал к сожалению не
нашел - наверное на даче.
Сразу вопросик - SYNC и выдача слова состояния по времени
совпадают - передний фронт SYNC с данными, и аналогично
задний. У меня при аналогичной тактировки не захотелось писаться
в ОЗУ - Я поднимал WR в высокое состояние, и одновременно
ШД переключал в 3-е состояние. Сейчас сделал вот-так:
Code: Select all
/*** 04-12-2012 ****************** aav@lora.nsk.su [Алексеев А.В.] ***
* Цикл записи *
*********************************************************************/
void _stdcall mWrite3(bool F1,bool F2,x80* o) { // ****** такт 3 ... *
if(F1) {
} else {
o->pinMREQ=true;
o->pinWR =true;
o->tNxt=tNxtT;
}
} // *************************************************** ... такт 3 *
void _stdcall mWrite2(bool F1,bool F2,x80* o) { // ****** такт 2 ... *
if(F1) {
} else {
o->pinWR=false;
o->tNxt=mWrite3;
}
} // **************************************************** ... такт 2 *
void _stdcall mWrite1(bool F1,bool F2,x80* o) { // ****** такт 1 ... *
if(F1) {
o->tNxt=mWrite1;
} else {
o->pinMREQ=false;
o->busData=Data;
o->tNxt=mWrite2;
}
} // **************************************************** ... твкт 1 *
void _stdcall mWrite(bool F1,bool F2,x80* o,unsigned short A,unsigned char D,tagTx T) { // * запись ... *
o->busAddr=A;
Data=D;
tNxtT=T;
mWrite1(F1,F2,o);
//sh(o,"mWrite");
} // **************************************************** ... запись *
Я немного озадачился по поводу сигнала RESET.
В оригиналах моделей Протезуса обычно реагируют просто на его наличие.
По справочным данным - у него есть минимальная длительность в тактах.
Мне кажется, при старте нашей модели эту минимальную длительность
надо отработать просто обязательно - не зависимо от уровня на самом входе RESET.
И второй вопрос: если в схеме так получается, что RESET установлен активным
постоянно - что должна делать наша модель в этом случае?
Тактовые сигналы Ф1 и Ф2 при этом ведь в модель поступают!
Сейчас примерно так:
Code: Select all
/*** 27-11-2012 ***************** aav@lora.nsk.su [Алексеев А.В.] ***
* Симуляция *
********************************************************************/
VOID x80model::simulate (ABSTIME time,DSIMMODES mode) {
Digital::time=time;
if(!time) { // **************************** запуск симулятора ... *
Reset();
oldCLK=false;
return;
} // ************************************** ... запуск симулятора *
if(!pinReset) Reset(); // сброс
bool CLK=pinCLK; // состояние CLK
if(CLK == oldCLK) return; // CLK не изменился
oldCLK=CLK;
Exec(CLK,0);
}
Т.е. если Reset активен - все остальное игнорируется.
А сама модель обрабатывает его вот так:
Code: Select all
/*** 28-11-2012 ***************** aav@lora.nsk.su [Алексеев А.В.] ***
* Сброс *
********************************************************************/
unsigned long _stdcall x80::Reset(void) {
tNxt=m1t1; // первый такт первый цикл
busAddr=PC=0;
busData.Z();
pinMREQ=true;
pinRD =true;
pinWR =true;
pinM1 =true;
pinRFSH=true;
return 0;
}
По поводу минимальной длительности - надо будет подумать.
Этот вопрос не совсем понял...
Если ты про Jxx ADDR - то да ADDR_lo и ADDR_hi - должны по шине данных заскочить в WZ.
Конечно, если ты именно это имел в виду...
Да - именно это имел в виду - буду читать все байты, а потом
принимать решение.