Proteus C++ DLL's

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

Moderator: Shaos

aav8
Maniac
Posts: 287
Joined: 05 Nov 2008 19:47
Location: 81.28.208.238

Post by aav8 »

А ты не пробовал юзать вот такую функцию из VSM API?
Code:
data = (BYTE)databus->getbusvalue(); //--- чтение данных
Да, пробовал.
У этой шины вроде-как два варианта:
в одном варианте передается список имен пин-ов,
в другом случае - для шины можно получить/установить
отдельно состояние каждого пин-а. Да и модель уже была
нарисована...
---------------
Ну вот добрался до собственно арифметики.
Пока только инкременты/декременты.
Знак и ноль понятно как анализировать.
Четность - просто посчитать кол-во битов.
Вспомогательный перенос (между тетрадами) -
думаю сравнивать 4-ый бит в аккумуляторе до операции
и после - если изменился - значит перенос имел место.
Простой перенос - анализировать 9-ый бит (модель
работает на 32-битной машине).
А вот Z80 вроде-как формирует признак переполнения? Вроде его
впихивает в четность? Что-то не совсем это понял - да и
сильно не разбирался. Хотя уже сейчас надо. И Z80 вроде
поддерживает бит ¹1 в регистре признаков - тоже надо все
это разобрать...
Я собираюсь внутри модели поддерживать слово состояния
от i8080 - для выдачи по SYNC и двойной набор регистров
от Z80.
-------------------
В окне состояния проца показываю все внутренние регистры
регистр состояния.
Решил еще добавить туда дизассемблированную текущую
команду с о всеми операндами... и на это споткнулся - сие
невозможно. Будет просто мнемоника команды.
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

aav8 wrote:Четность - просто посчитать кол-во битов.
Мне кажется четность быстрее по таблице...
aav8 wrote:Вспомогательный перенос (между тетрадами) -
думаю сравнивать 4-ый бит в аккумуляторе до операции
и после - если изменился - значит перенос имел место.
В этом моменте Шаос и Дёмин - правильные решения вроде как определили в этом топике.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Lavr wrote:
aav8 wrote:Четность - просто посчитать кол-во битов.
Мне кажется четность быстрее по таблице...
Я как-то занимался подсчётом CRC, и пришел к выводу, что табличный способ
самый быстрый. А четность - это как разновидность, и Дёмин её получает из
вот такой таблицы:

Code: Select all

int parity_table[] = {
    1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,
    0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0,
    0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0,
    1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,
    0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0,
    1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,
    1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,
    0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0,
    0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0,
    1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,
    1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,
    0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0,
    1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,
    0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0,
    0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0,
    1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,
};
Lavr wrote:
aav8 wrote:Вспомогательный перенос (между тетрадами) -
думаю сравнивать 4-ый бит в аккумуляторе до операции
и после - если изменился - значит перенос имел место.
В этом моменте Шаос и Дёмин - правильные решения вроде как определили в этом топике.
Исходник Дёмина, который проходит все тесты, вот здесь, взглянь, чтобы велосипедов
не изобретать, код весьма понятный... :kruto:
iLavr
aav8
Maniac
Posts: 287
Joined: 05 Nov 2008 19:47
Location: 81.28.208.238

Post by aav8 »

Исходник Дёмина, который проходит все тесты, вот здесь, взглянь, чтобы велосипедов
не изобретать, код весьма понятный...
Да все понятно и в кое-в чем помогает.
Добрался ровно до половины команд.
Действительно четность через таблицу это так просто.
Надо как-то придумать подцепить к этой штуке терминал,
что-бы можно было прогнать тест.
Сейчас чисто тупо ПЗУ с адреса 0 и ОЗУ с 32768.
Сейчас команды проверяю вручную.
И для простоты считаю что все машинные циклы в 3 такта,
первый цикл в 4 такта. Потом буду вставлять пустышки.
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

aav8 wrote:Надо как-то придумать подцепить к этой штуке терминал,
что-бы можно было прогнать тест.
Любой дисплей? Или непосредственно RS-232 serial от самого "Протезуса"?

Ты намекни, как ты хочешь это сделать - и я попробую прицепить...

Только, правда неизвестно пока - работают ли верно команды, значит терминал
нужен чисто автономный?
Получил параллельно байт - и сам его показал? Так?
iLavr
aav8
Maniac
Posts: 287
Joined: 05 Nov 2008 19:47
Location: 81.28.208.238

Post by aav8 »

Ты намекни, как ты хочешь это сделать - и я попробую прицепить...

Только, правда неизвестно пока - работают ли верно команды, значит терминал
нужен чисто автономный?
Получил параллельно байт - и сам его показал? Так?
Да именно автономный - чисто тупо я записываю бай в какой-то
адрес - и эта штука показывает мне этот символ. Все это внутри
Протеуса. Т.е. как-бы паралельный терминал.
Есть-но команды полность не проверены.
Я подумывал про какую-либо схему преобразования паралельного
в последовательный интерфейс - что-то типа ВВ51... Но ее
моделировать пока не хочется - хотя планы имеются.
Появилась идея использовать команды RIM SIM от 8085
в качестве ввода вывода - они будут работать с физическим
портом внутри Win, а туда прицепить терминалу от Win.
Или через com0com завернуть все это дело обратно в Протеус...
Или может придумать свою микросхему - переходник с ШД на RS232
- этакая урезаная/обрезаная/расширеная ВВ51 - работает на
одной скорости, скажем 9600, всегда готова (организовать внутри
большой FIFO). Получается примерно 16 ног - 8 данных, выборка,
запись и чтение, и ест-но последовательный вход и выход.
Без входа можно пока обойтись. Потом эти наработки
пригодятся для настоящеи ВВ51.
Пока такие мысли ...
aav8
Maniac
Posts: 287
Joined: 05 Nov 2008 19:47
Location: 81.28.208.238

Post by aav8 »

Я думаю - нужно будет все-таки реализовать ВВ 51,
ест-но с миниальным функционалом - см. пред. сообщение.
*************************
Наверное скоро можно будет сново заняться
своей идеей - тема ZILOG/маленький комп...
*************************
Думаю за неделю осилить вторую половину набора команд.
Но там как-раз начнется вся логика и арифметика...
И еще вопросы (они касаются именно модели):
команда DAD в User manual написано что она исполняется
за не один цикл. Что в это время происходит на выводах.
В описании 8080 написано, что тратится 10 тактов.
Я думаю 4 такта на M1 и по три на остальные. Нужно-ли при
этом формировать SYNC для 8080? - или ну его нафиг?
По поводу условных переходв/вызовов/возвратов - когда
условие не выполняется - проц считывает адреса перехода
или просто перескакивает на след. команду? - или ну его
нафиг? - может сразу перейти на след. команду и вставить
пустышки для тайминга?
У кого есть компы в железе пж-ста посмотрите эти
воросы - или ну его нафиг? (конечто повторяюсь).
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

aav8 wrote:Да именно автономный - чисто тупо я записываю бай в какой-то
адрес - и эта штука показывает мне этот символ. Все это внутри
Протеуса. Т.е. как-бы паралельный терминал.
Если только это - то мне кажется, что достаточно регистра-защелки со стробом,
на выходы которого навешан 7-сегментный 16-ричный индикатор.
Ну и селектор адреса на входе...

Размышления по поводу урезанной ВВ51 - не понял в этой связи...
Если ты просто хочешь видеть протокол внешний, на мой взгляд - самый простой
последовательный интерфейс - SPI.

Image

И в Протезусе есть SPI-дебаггер...

В отличие от RS-232, SPI - не требует жесткой времянки: выставил бит,
и простробировал его
- ну по типу DATA <- Strob для принтера...


Если ты всё же хочешь ВВ51 - то это вопрос отдельный...
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

aav8 wrote:Да именно автономный - чисто тупо я записываю бай в какой-то
адрес - и эта штука показывает мне этот символ.
А если совсем заморачиваться неохота - можно попробовать компонент LptPim:

Image

Данные - на D0-D7, /WR - на /Strobe, остальные выставить - что "всё всегда готово"... :wink:
И попробовать выставить текстовый принтер с печатью в файл или LPT-monitor задействовать.


PS. Если штатные средства не осиливают такой трюк, то - Portmon
Copyright (C) 1999 Mark Russinovich http://www.sysinternals.com
iLavr
aav8
Maniac
Posts: 287
Joined: 05 Nov 2008 19:47
Location: 81.28.208.238

Post by aav8 »

Нашел в Протеусе 8250 - как раз должно подойти.
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

aav8 wrote:И еще вопросы (они касаются именно модели):
команда DAD в User manual написано что она исполняется
за не один цикл. Что в это время происходит на выводах.
В описании 8080 написано, что тратится 10 тактов.
Число машинных циклов в команде изменяется от 1 для однобайтовых команд с регистровой адресацией до 5 для трехбайтовых сложных команд. Исключение составляет команда DAD, которая выполняется за три машинных цикла, но обращение к памяти происходит только в первом цикле.
Image

То есть, SYNC, либо M1 у неё выполняются один раз в первом цикле.
После чего она к памяти и УВВ не обращается, а значит ногами никак не дрыгает! :o

Забавно... если у i8080 10 различных циклов, то эти два, судя по всему - "внеклассовые"? :wink:

Image
Last edited by Lavr on 09 Dec 2012 23:22, edited 1 time in total.
iLavr
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Действительно. Команда DAD во время М2 и М3 шину не дергает.
Image
И, похоже, не только DAD.
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

HardWareMan wrote:Действительно. Команда DAD во время М2 и М3 шину не дергает.
Ну а как тогда квалифицируют её "М2 и М3" из числа 10 известных?

И, кстати говоря,...
HardWareMan wrote:SYNC i8080 выдает в каждом машинном цикле.
Ты своё памятное слово из трёх букв назад себе возьмёшь, или как?
Учитель танкистов... :wink:
iLavr
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Lavr wrote:И, кстати говоря,...
HardWareMan wrote:SYNC i8080 выдает в каждом машинном цикле.
Ты своё памятное слово из трёх букв назад себе возьмёшь, или как?
Учитель танкистов... :wink:
И опять мимо. Скорее секи сюда:
Image
Т.е. DAD это исключение из правил. А исключения как раз таки подтверждают правило. Так что только DAD не делает внешних движений на шине в М2 и М3. Твой ход.
aav8
Maniac
Posts: 287
Joined: 05 Nov 2008 19:47
Location: 81.28.208.238

Post by aav8 »

Все про DAD понятьненько.
Я тоже пердполагал что проц внутри пропускает эту команду
через АЛУ (в отличии от INX/DCX) - поэтому и такое время
исполнения.
Я думаю, ничего страшного не будет, если модель просто
на эти 10-4=6 тактов ничего не будет делать? В принципе
потом это можно будет подправить.
И похожий вопрос про условные переходы - читаются - ли
байты адреса перехода? - я думаю в модели их можно будет
просто проскочить.
Что-то не совсем понимаю в татировании 8080
между спадом Ф2 фронтом Ф1 есть пауза или нет? Когда первый
раз увидел такие диаграммы (Радио за 80-ый год) - там такт
был поделен на четыре части - первая четверть Ф1, потом 2
части - Ф2 и потом все одыхают.