|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Author |
Message |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Назначение префикса — модификация поведения следующей за префиксом команды.
Это байты типа DD, FD или ED и т.д.
Подробнее можешь прочитать здесь: [url=http://www.emuverse.ru/wiki/Zilog_Z80/Система_команд]Zilog Z80/Система команд[/url]
Префиксы позволяют при 8-битной шине данных иметь возможность выполнять более 256 кодов операций.
То есть: встреченный в программе префикс как бы переключает выполнение на " другую таблицу".
И процессор интерпретирует следующий байт совсем иначе, как если бы он его встретил в виде
этого же КОП-а, но без префикса...
В результате микропроцессор Z80 имеет 696 уникальных кодов операций (в отличие
от 244 кодов операций i8080).
_________________ iLavr
Last edited by Lavr on 02 Dec 2012 09:43, edited 1 time in total.
|
02 Dec 2012 09:34 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
Ну да, эти мануалы намного авторитетнее, оригиналов из далёких 80х.
SYNC i8080 выдает в каждом машинном цикле. И подтверждение этому арбитры памяти в наших Специалистах-Орионах, использующие SYNC как сигнал необходимого обращения к памяти в следующем такте. Но именно то, что SYNC нам выдает и несет информацию, что хочет процессор: КОП (М1) или не КОП. И даже стэк или порт. Обсуждали же.
|
02 Dec 2012 10:07 |
|
|
aav8
Maniac
Joined: 05 Nov 2008 19:47 Posts: 287 Location: 81.28.208.238
|
Сайт www . z80 . info вороде оттуда выкачивал User Manual
|
02 Dec 2012 17:55 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Алё! Не забывай, что нам и хелпы неплохо пополнить!
Чтобы всех заинтересованных людей к проекту привлечь...
Я вобщем-то расписал уже в старте топика полностью, как DLL под Proteus создаётся, и что в ней к чему..
_________________ iLavr
|
03 Dec 2012 01:59 |
|
|
He3HauKo
Senior
Joined: 09 Aug 2012 11:20 Posts: 176 Location: 95.135.174.189
|
А не в лень вам будет создать самую простою модель к ПРОТЭУС, к примеру инвертор(лог НЕ), и бросить сюда исходник?
_________________Хочу стать всезнайкой
|
03 Dec 2012 14:06 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ну тебе "в лень" что ли взять полные исходники в начале топика, подправить две строчки
и самому скомпилировать их?
Там инвертор в пол-пинка получается, вот их там два без задержки:
И как задержку делать - я там расписал... самому же интереснее! Можешь инвертор, а можешь и что посложнее сделать... Там премудрости то: "если входной Pin - в " 0" - то сделаем так... а если входной Pin = " 1", то установим выходной Pin иначе... установить выходной Pin3 в " 0"...
установить выходной Pin4 в " 1"...
_________________ iLavr
|
03 Dec 2012 15:02 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Процесс потихонечку пошел... сделал отладочный стенд - дёргать
K580BM80A за ножки...
Надо будет схему потактовой отладки приспособить. Хоть на генераторе можно
и любую низкую частоту выставить, но неудобно без статических состояний...
Похоже, удобнее будет, чтобы по фронтам и спадам С1, С2 происходила остановка.
_________________ iLavr
|
03 Dec 2012 18:19 |
|
|
aav8
Maniac
Joined: 05 Nov 2008 19:47 Posts: 287 Location: 81.28.208.238
|
Что-то совсем занимать времени не было.
Как обещал - немного текста
Digital.H
| | | | Code: /*** 29-11-2012 ***************** aav@lora.nsk.su [Алексеев А.В.] *** * Для цифровых моделей. * ********************************************************************/ #ifndef _Digital_H_ /********************************************************************/ /*** 30-11-2012 ***************** aav@lora.nsk.su [Алексеев А.В.] *** * Общий класс. * ********************************************************************/
class Digital {
public:
static ABSTIME time;
};
/*** 30-11-2012 ***************** aav@lora.nsk.su [Алексеев А.В.] *** * Одна ножка * ********************************************************************/
class Pin : public Digital {
public:
virtual void _stdcall operator = (bool); // установить состояние virtual _stdcall operator bool (void); // получить состояние
virtual void _stdcall operator = (IDSIMPIN*); // привязать пин
protected:
IDSIMPIN* SimPin;
};
/*** 30-11-2012 ***************** aav@lora.nsk.su [Алексеев А.В.] *** * Шина * ********************************************************************/
class Bus : public Digital {
public:
void _stdcall Connect(IDSIMPIN** PinS,int i,IDSIMPIN* Pin) { PinS[i]=Pin; } // привязать пин
protected:
void _stdcall Set(IDSIMPIN** PinS,int n,unsigned long D); unsigned long _stdcall Get(IDSIMPIN** PinS,int n); void _stdcall Z(IDSIMPIN** PinS,int n);
};
/*** 30-11-2012 ***************** aav@lora.nsk.su [Алексеев А.В.] *** * Шина 16 бит * ********************************************************************/
class Bus16 : public Bus {
public:
virtual void _stdcall operator = (unsigned short); // установить состояние virtual _stdcall operator unsigned short (void); // получить состояние virtual void _stdcall Z(void) { Bus::Z(SimPinS,16); } // 3 - состояние
void _stdcall Connect(int N,IDSIMPIN* Pin) { Bus::Connect(SimPinS,N,Pin); } // привязать пин
protected:
IDSIMPIN* SimPinS[16];
};
/*** 30-11-2012 ***************** aav@lora.nsk.su [Алексеев А.В.] *** * Шина 8 бит * ********************************************************************/
class Bus8 : public Bus {
public:
virtual void _stdcall operator = (unsigned char); // установить состояние virtual _stdcall operator unsigned char (void); // получить состояние virtual void _stdcall Z(void) { Bus::Z(SimPinS,8); } // 3 - состояние
void _stdcall Connect(int N,IDSIMPIN* Pin) { Bus::Connect(SimPinS,N,Pin); } // привязать пин
// protected:
IDSIMPIN* SimPinS[8];
};
| | | | |
Digital.CPP | | | | Code: *** 29-11-2012 ****************** aav@lora.nsk.su [Алексеев А.В.] *** * Для цифровых моделей. * *********************************************************************/
#include <Windows.h> #include <vsm.HPP>
#include "Digital.H"
/********************************************************************/
ABSTIME Digital::time;
/*** 30-11-2012 ***************** aav@lora.nsk.su [Алексеев А.В.] *** * Одна ножка * ********************************************************************/
void _stdcall Pin::operator = (bool V) { // * установить состояние ... *
if(V) SimPin->setstate(time,0,SHI); else SimPin->setstate(time,0,SLO);
} // ************************************* ... установить состояние *
_stdcall Pin::operator bool (void) { // ***** получить состояние ... *
if(ishigh(SimPin->istate())) return true; return false;
} // *************************************** ... получить состояние *
void _stdcall Pin::operator = (IDSIMPIN* V) { // * привязать пин ... *
SimPin=V;
} // ******************************************** ... привязать пин *
/*** 30-11-2012 ***************** aav@lora.nsk.su [Алексеев А.В.] *** * Шина * ********************************************************************/
void _stdcall Bus::Set(IDSIMPIN** PinS,int n,unsigned long D) { // * установить данные ... *
int i; unsigned long v=D;
for(i=0;i < n;i++) { if(v & 1) PinS[i]->setstate(time,0,SHI); else PinS[i]->setstate(time,0,SLO); v=v>>1; // след. бит }
} // **************************************** ... установить данные *
unsigned long _stdcall Bus::Get(IDSIMPIN** PinS,int n) { // * получить данные ... *
int i; unsigned long v=0; int Bit;
for(i=n-1;i >= 0;i--) {
v=v << 1; // место для след. бит Bit=0; if(ishigh(PinS[i]->istate())) Bit=1; v|=Bit;
}
return v;
} // ****************************************** ... получить данные *
void _stdcall Bus::Z(IDSIMPIN** PinS,int n) { // * 3 - состояние ... *
int i; unsigned long v=0; int Bit;
for(i=0;i < n;i++) { if(v & 1) PinS[i]->setstate(time,0,FLT); }
} // ****************************************** ... 3- состояние *
/*** 30-11-2012 ***************** aav@lora.nsk.su [Алексеев А.В.] *** * Шина 16 бит * ********************************************************************/
void _stdcall Bus16::operator = (unsigned short V) { // * установить состояние ... *
Set(SimPinS,16,V);
} // ************************************* ... установить состояние *
_stdcall Bus16::operator unsigned short (void) { // ***** получить состояние ... *
return (unsigned short)Get(SimPinS,16);
} // *************************************** ... получить состояние *
/*** 30-11-2012 ***************** aav@lora.nsk.su [Алексеев А.В.] *** * Шина 8 бит * ********************************************************************/
void _stdcall Bus8::operator = (unsigned char V) { // * установить состояние ... *
Set(SimPinS,8,V);
} // ************************************* ... установить состояние *
_stdcall Bus8::operator unsigned char (void) { // ***** получить состояние ... *
return (unsigned char)Get(SimPinS,8);
} // *************************************** ... получить состояние *
| | | | |
В начале симуляции вставить такую строчку Так подключаться к выводам А вот так можно использовать:
Обнаружил, что после выдачи информации на шину данных
читается что попало...
|
03 Dec 2012 18:20 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Гуд! А то вон видишь выше - заказ поступил... NOT в цифровую модель запихать, а мы всё никак " такую ерунду, как процессор" не доделаем...
Не совсем понял этот момент... может у тебя на шину данных никто не подаёт логических уровней?
Это же симуляция - емкостей шин здесь нет! Ты хотя бы pull-up резисторами притяни
шину данных к Vcc=+5V...
В отличие от реальных цифровых схем - в Протезусе " висящий вход" не определён логически.
Если у тебя включена анимация логики, как у меня - на картинке выше, то неподключенный
вход Протезус обозначит серым...
Я пока до чтения с шины не дошел. Выдаю разные сигнатуры и смотрю, как лучше реализовать
фронты и разные ситуации по реакции на входные сигналы...
PS. Ты не гонись сильно... это я такой "резвый" потому, что месяц назад, три недели посвятил этому Протезусу в связи с моделями ламп. Сутками сидел, не вылезая из хелпов и компьютера... Но разобрался немного... А сейчас - мы никуда особо-то не торопимся....
_________________ iLavr
|
03 Dec 2012 18:50 |
|
|
aav8
Maniac
Joined: 05 Nov 2008 19:47 Posts: 287 Location: 81.28.208.238
|
Сообразил - надо переводить в Z-состояние.
|
04 Dec 2012 01:39 |
|
|
aav8
Maniac
Joined: 05 Nov 2008 19:47 Posts: 287 Location: 81.28.208.238
|
По - порцу - сегодня немного удалось позаниматься.
Сделал отдельный набор функий которые занимаются
первым циклом и по набору для чтения и записи в память.
По коду операции в таблице определяю что это
это за команда.
На данный момент работают коды с 0x00 до 0x03 и их анвлоги.
Дольше я думаю пойдет быстрее (без учета времени).
|
04 Dec 2012 08:01 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Кстати говоря, господа из Labcenter Electronics освоили микропроцессор i8086...
Обращаю наше внимание - они по своей традиции не используют внешний CLK!
Мне кажется, что это завязано на возможность пошаговой отладки.
Когда вся времянка формируется внутри модели процессора, то видимо,
просто перевести модель в пошаговый режим.
Внешнему генератору изнутри CPU DLL не скомандуешь - тормознуть!
Глядя на эту картинку вспоминается диалог из фильма "Коммандо"...
Proteus VSM for 8086 - £295.00
Да и на остальные продукты - цены совсем не децкие...
_________________ iLavr
|
04 Dec 2012 13:03 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Да у нас прямо под носом пример Debug-log окна! И куда я только смотрю...
В функции setup
Окно отладки сразу открывается, после чего валим в него, что хотим, вот так:
синтаксис, как у printf(...).
_________________ iLavr
|
04 Dec 2012 17:08 |
|
|
aav8
Maniac
Joined: 05 Nov 2008 19:47 Posts: 287 Location: 81.28.208.238
|
Тоже присобачил ISTATUSPOPUP - показывает внутреннее состояние. Только почемуто на F10,F11 не реагирует. А так очень все удобно.
|
05 Dec 2012 23:33 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А ты не пробовал юзать вот такую функцию из VSM API?
По идее сразу сворачивает состояние шины данных в байт. И я ещё реакцию на фронты заюзал: На спады - тоже есть аналог:
_________________ iLavr
|
06 Dec 2012 07:40 |
|
|
Who is online |
Users browsing this forum: No registered users and 51 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
|
|