nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 18 Sep 2020 05:19



Reply to topic  [ 311 posts ]  Go to page Previous  1 ... 11, 12, 13, 14, 15, 16, 17 ... 21  Next
Proteus C++ DLL's 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Я тут ссылочку полезную по PROTEUS выложу. Она и мне часто бывает нужна с разных машин...

FAQ (ЧаВО) по PROTEUS для начинающих и не только

Пусть здесь будет, чтобы находилась легко... :wink:

_________________
iLavr


20 Nov 2015 09:59
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
aav8 wrote:
там z80 а система команд i8080

Ну и поскольку "там z80", я решил на этом "z80" погонять свой проект Nedo-"Специалист" на UB880... 8)
И выяснилось вот что: под Windows_7 и Proteus 7.7 эта библиотека - х80.dll
так сразу и не работат... :wink: Засада в том, что Proteus 7.7 не говорит, что для
работы х80.dll необходима динамическая библиотека msvcr100d.dll.

Её можно скачать в Интернете, хотя бы вот здесь, и положить её в папку BIN Proteus-a,
чтобы не морочить себе голову регистрацией *.dll.
После чего этот "z80 с системой команд i8080" в Proteus 7.7 под Windows_7 работает нормально.

А вот под Windows 98 в Proteus 6.7 ситуация хуже, поскольку эта msvcr100d.dll,
как мне кажется, не довольна Windows 98.
Proteus 6.7 останавливается на этапе компиляции проекта с ошибкой:

FATAL: [DD1] External model DLL "x80.DLL" not found. GLE=0x0000001F.

GLE=0x0000001F, насколько я понимаю, это ERROR_GEN_FAILURE.

Танцы с бубнами пока не помогли, поскольку не ясно, в чем проблема у msvcr100d.dll под Windows 98

_________________
iLavr


06 Jan 2016 19:06
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Ну и поскольку терять-то как бы было и нечего, решился я на такой вот последний эксперимент...

Вызываемые msvcr100d.dll функции WinAPI, которых нет в KERNEL32.dll от Вынь 98 впервые
появляются в KERNEL32.dll от Вынь ХР.
Я пропатчил msvcr100d.dll, чтобы она вызывала KERNEL33.dll и положил ей рядом KERNEL32.dll
от Вынь ХР, переименованный в KERNEL33.dll. :egeek:

Ну я также посмотрел, что KERNEL32.dll от Вынь ХР "хочет" ntdll.dll, которой нет в Вынь 98, но
я её тоже рядом приложил... :wink:
Я, конечно, понимаю, что ntdll.dll тоже чего-нибуть "хочет", но так в папку Протеуса весь Вынь ХР
перекочует... может и так справятся... 8)

Результат при старте проекта Протеуса был следующий:

13297 12:25:44 Isis Read C:\PROTEUS 6 PROFESSIONAL\BIN\PROSPICE.DLL SUCCESS Offset: 261120 Length: 4096
13298 12:25:44 Isis FindOpen C:\PROTEUS 6 PROFESSIONAL\SAMPLES\1_I8080\X80.DLL NOTFOUND
13299 12:25:44 Isis FindOpen C:\PROTEUS 6 PROFESSIONAL\MODELS\X80.DLL SUCCESS x80.dll
13300 12:25:44 Isis FindClose C:\PROTEUS 6 PROFESSIONAL\MODELS\X80.DLL SUCCESS
13301 12:25:44 Isis Attributes C:\PROTEUS 6 PROFESSIONAL\MODELS\X80.DLL SUCCESS GetAttributes
13302 12:25:44 Isis Directory C:\PROTEUS 6 PROFESSIONAL\MODELS\X80.DLL SUCCESS QUERY
13303 12:25:44 Isis Open C:\PROTEUS 6 PROFESSIONAL\MODELS\X80.DLL SUCCESS OPENEXISTING READONLY DENYWRITE
13304 12:25:44 Isis Read C:\PROTEUS 6 PROFESSIONAL\MODELS\X80.DLL SUCCESS Offset: 0 Length: 64
13305 12:25:44 Isis Seek C:\PROTEUS 6 PROFESSIONAL\MODELS\X80.DLL SUCCESS Beginning Offset: 232
13306 12:25:44 Isis Read C:\PROTEUS 6 PROFESSIONAL\MODELS\X80.DLL SUCCESS Offset: 232 Length: 248
13307 12:25:44 Isis Seek C:\PROTEUS 6 PROFESSIONAL\MODELS\X80.DLL SUCCESS Beginning Offset: 232
13308 12:25:44 Isis Read C:\PROTEUS 6 PROFESSIONAL\MODELS\X80.DLL SUCCESS Offset: 232 Length: 488
13309 12:25:44 Isis Directory C:\PROTEUS 6 PROFESSIONAL\MODELS\X80.DLL SUCCESS QUERY
13310 12:25:44 Isis Read C:\PROTEUS 6 PROFESSIONAL\MODELS\X80.DLL SUCCESS Offset: 72704 Length: 3584
13311 12:25:44 Isis Read C:\PROTEUS 6 PROFESSIONAL\MODELS\X80.DLL SUCCESS Offset: 70144 Length: 2560
13312 12:25:44 Isis Attributes C:\PROTEUS 6 PROFESSIONAL\BIN\MSVCR100D.DLL SUCCESS GetAttributes
13313 12:25:44 Isis Directory C:\PROTEUS 6 PROFESSIONAL\BIN\MSVCR100D.DLL SUCCESS QUERY
13314 12:25:44 Isis Open C:\PROTEUS 6 PROFESSIONAL\BIN\MSVCR100D.DLL SUCCESS OPENEXISTING READONLY DENYWRITE
13315 12:25:44 Isis Read C:\PROTEUS 6 PROFESSIONAL\BIN\MSVCR100D.DLL SUCCESS Offset: 0 Length: 64
13316 12:25:44 Isis Seek C:\PROTEUS 6 PROFESSIONAL\BIN\MSVCR100D.DLL SUCCESS Beginning Offset: 232
13317 12:25:44 Isis Read C:\PROTEUS 6 PROFESSIONAL\BIN\MSVCR100D.DLL SUCCESS Offset: 232 Length: 248
13318 12:25:44 Isis Seek C:\PROTEUS 6 PROFESSIONAL\BIN\MSVCR100D.DLL SUCCESS Beginning Offset: 232
13319 12:25:44 Isis Read C:\PROTEUS 6 PROFESSIONAL\BIN\MSVCR100D.DLL SUCCESS Offset: 232 Length: 408
13320 12:25:44 Isis Directory C:\PROTEUS 6 PROFESSIONAL\BIN\MSVCR100D.DLL SUCCESS QUERY
13321 12:25:44 Isis Read C:\PROTEUS 6 PROFESSIONAL\BIN\MSVCR100D.DLL SUCCESS Offset: 1447936 Length: 1024
13322 12:25:44 Isis Read C:\PROTEUS 6 PROFESSIONAL\BIN\MSVCR100D.DLL SUCCESS Offset: 1381376 Length: 4096
13323 12:25:44 Isis Read C:\PROTEUS 6 PROFESSIONAL\BIN\MSVCR100D.DLL SUCCESS Offset: 1385472 Length: 4096
13324 12:25:44 Isis Attributes C:\PROTEUS 6 PROFESSIONAL\BIN\KERNEL33.DLL SUCCESS GetAttributes
13325 12:25:44 Isis Directory C:\PROTEUS 6 PROFESSIONAL\BIN\KERNEL33.DLL SUCCESS QUERY
13326 12:25:44 Isis Open C:\PROTEUS 6 PROFESSIONAL\BIN\KERNEL33.DLL SUCCESS OPENEXISTING READONLY DENYWRITE
13327 12:25:44 Isis Read C:\PROTEUS 6 PROFESSIONAL\BIN\KERNEL33.DLL SUCCESS Offset: 0 Length: 64
13328 12:25:44 Isis Seek C:\PROTEUS 6 PROFESSIONAL\BIN\KERNEL33.DLL SUCCESS Beginning Offset: 248
13329 12:25:44 Isis Read C:\PROTEUS 6 PROFESSIONAL\BIN\KERNEL33.DLL SUCCESS Offset: 248 Length: 248
13330 12:25:44 Isis Seek C:\PROTEUS 6 PROFESSIONAL\BIN\KERNEL33.DLL SUCCESS Beginning Offset: 248
13331 12:25:44 Isis Read C:\PROTEUS 6 PROFESSIONAL\BIN\KERNEL33.DLL SUCCESS Offset: 248 Length: 408
13332 12:25:44 Isis Directory C:\PROTEUS 6 PROFESSIONAL\BIN\KERNEL33.DLL SUCCESS QUERY
13333 12:25:44 Isis Read C:\PROTEUS 6 PROFESSIONAL\BIN\KERNEL33.DLL SUCCESS Offset: 491008 Length: 4096
13334 12:25:44 Isis Read C:\PROTEUS 6 PROFESSIONAL\BIN\KERNEL33.DLL SUCCESS Offset: 495104 Length: 4096
13335 12:25:44 Isis Read C:\PROTEUS 6 PROFESSIONAL\BIN\KERNEL33.DLL SUCCESS Offset: 467968 Length: 4096
13336 12:25:44 Isis Read C:\PROTEUS 6 PROFESSIONAL\BIN\KERNEL33.DLL SUCCESS Offset: 472064 Length: 4096
13337 12:25:44 Isis Close C:\PROTEUS 6 PROFESSIONAL\BIN\MSVCR100D.DLL SUCCESS CLOSE_FINAL
13338 12:25:44 Isis Close C:\PROTEUS 6 PROFESSIONAL\MODELS\X80.DLL SUCCESS CLOSE_FINAL
13339 12:25:44 Isis Close C:\PROTEUS 6 PROFESSIONAL\BIN\KERNEL33.DLL SUCCESS CLOSE_FINAL
13340 12:25:44 Isis Read C:\PROTEUS 6 PROFESSIONAL\BIN\PROSPICE.DLL SUCCESS Offset: 265216 Length: 4096
13341 12:25:44 Isis Read C:\PROTEUS 6 PROFESSIONAL\BIN\SPICESIM.DLL SUCCESS Offset: 719872 Length: 4096
13342 12:25:44 Isis Read C:\PROTEUS 6 PROFESSIONAL\BIN\PROSPICE.DLL SUCCESS Offset: 58880 Length: 4096
13343 12:25:44 Isis Read C:\WINDOWS\SYSTEM\SHELL32.DLL SUCCESS Offset: 81920 Length: 4096
13344 12:25:44 Isis Read C:\PROTEUS 6 PROFESSIONAL\BIN\SPICESIM.DLL SUCCESS Offset: 883712 Length: 4096
13345 12:25:44 Isis Read C:\PROTEUS 6 PROFESSIONAL\BIN\LOADERS.DLL SUCCESS Offset: 44032 Length: 4096
13346 12:25:44 Isis Read C:\PROTEUS 6 PROFESSIONAL\BIN\LOADERS.DLL SUCCESS Offset: 64512 Length: 4096
13347 12:25:44 Isis Close C:\PROTEUS 6 PROFESSIONAL\BIN\PROSPICE.DLL SUCCESS CLOSE_FINAL
13348 12:25:44 Isis Close C:\PROTEUS 6 PROFESSIONAL\BIN\SPICEINP.DLL SUCCESS CLOSE_FINAL
13349 12:25:44 Isis Close C:\PROTEUS 6 PROFESSIONAL\BIN\SPICESIM.DLL SUCCESS CLOSE_FINAL
13350 12:25:44 Isis Close C:\PROTEUS 6 PROFESSIONAL\BIN\OBJITF.DLL SUCCESS CLOSE_FINAL
13351 12:25:44 Isis Close C:\PROTEUS 6 PROFESSIONAL\BIN\DSIM.DLL SUCCESS CLOSE_FINAL
13352 12:25:44 Isis Close C:\PROTEUS 6 PROFESSIONAL\BIN\LOADERS.DLL SUCCESS CLOSE_FINAL
13353 12:25:44 Isis FindOpen C:\WINDOWS\TEMP\LISA5145.SDF SUCCESS LISA5145.SDF
13354 12:25:44 Isis FindClose C:\WINDOWS\TEMP\LISA5145.SDF SUCCESS
13355 12:25:44 Isis Delete C:\WINDOWS\TEMP\LISA5145.SDF ACCDENIED
13356 12:25:44 Isis Attributes C:\WINDOWS\MEDIA\DING.WAV SUCCESS GetAttributes
13357 12:25:44 Isis Open C:\WINDOWS\MEDIA\DING.WAV SUCCESS OPENEXISTING READONLY DENYNONE
13358 12:25:44 Isis Ioctl C: SUCCESS Subfunction: 08h
13359 12:25:44 Isis Attributes C:\WINDOWS\MEDIA\DING.WAV SUCCESS Get Modify
13360 12:25:44 Isis Close C:\WINDOWS\MEDIA\DING.WAV SUCCESS CLOSE_FINAL
13361 12:25:44 Isis FindOpen C:\PROTEUS 6 PROFESSIONAL\RESULTS\*.PDF SUCCESS AB66C4CC.PDF


Видно, что PROSPICE.DLL Протеуса вызвала x80.dll - модель z80, та в свою очередь вызвала
MSVCR100D.DLL, из которой, как ей и велели, был вызван KERNEL33.DLL.
Все обращения к KERNEL33.DLL прошли "успешно", но она в свою очередь ntdll.dll не вызывала.
После чего Протеус, "подумав" своими *.DLL сказал мне DING.WAV, записал протокол ошибок,
и выдал уже известный результат:

FATAL: [DD1] External model DLL "x80.DLL" not found. GLE=0x0000001F (= ERROR_GEN_FAILURE)

В общем из Венды 98 не сделать "локальный" Вынь ХР, похоже... :ebiggrin:

_________________
iLavr


08 Jan 2016 04:00
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
В общем, постигло меня разочарование некоторое даже, что рожденная здесь в муках модель
микропроцессора z80
не шевелится под моим замшелым Протезусом 6.7 и штопаной-перештопаной
Вендой-98... :-?
Поэтому, как агностик по вероисповеданию, в последние дни православных Рождественских праздников
решил я эту ситуацию кардинально исправить - и исправил! :egeek:
Заодно и поправил всякую неудобную мелочевку....
Так что архив с работающей везде моделью z80 можно скачать здесь: Z80ALL.rar
В архиве всё разложено в папки, из которых файлы следует переложить в одноименные папки, там
где у вас установлен Протеус.

После старта Протеуса микропроцессор(ы) z80 становятся доступны в меню элементов:

Image
Увеличить

Красной рамкой обведены НАШИ z80 (у Протеуса есть и свои, но он их не поддерживает...)

По сути у нас теперь 2 бибиотеки с z80, в каждой из которых есть еще 8 свободных мест,
если захочется "оживить" весь комплект z80.

Библиотека x80MCS - поддерживает модель z80, работоспособную в Вендах, начиная с ХР, и для
неё может понадобиться файл MSVCR100D.DLL (я его приложил, проверенный на моей Венде 7).
Библиотека Z80Zilog - поддерживает модель z80, работоспособную в Венде 98, и, по идее -
во всех остальных Вендах тоже (но я этого не проверял). Этой модели файл MSVCR100D.DLL не нужен.

Есть в архиве - 3 примера, демонстрирующие корректную работу модели z80, и могущие стать
основой для собственных проектов.
Карта памяти во всех трех демо-проектах одинакова: внизу - 8 кБайт ПЗУ с тестовой программой,
в верхних адресах - 56 кБайт ОЗУ. В пространстве УВВ по адресам 0F8H...0FFH расположен
UART i8250A. (Я был удивлен неимоверно, но и в моём замшелом Протезусе 6.7 эта модель есть!)
Вот скриншот проекта 8080_2.DSN :

Image
Увеличить

При запуске симуляции отрабатывается тест на верность исполнения набора инструкций
микропроцессора i8080 :
Code:
;***********************************************************************
; MICROCOSM ASSOCIATES  8080/8085 CPU DIAGNOSTIC VERSION 1.0  (C) 1980
;***********************************************************************
; Load into virtual altair with: ALTAIR L=TEST.HEX
; Then press F2 to view screen, and 'G' to execute the test.
;
;DONATED TO THE "SIG/M" CP/M USER'S GROUP BY:
;KELLY SMITH, MICROCOSM ASSOCIATES
;3055 WACO AVENUE
;SIMI VALLEY, CALIFORNIA, 93065
;(805) 527-9321 (MODEM, CP/M-NET (TM))
;(805) 527-0518 (VERBAL)
;

У теста всего 2 результата:
"CPU IS OPERATIONAL" и
" CPU HAS FAILED! ERROR EXIT=$"

В нашем случае - результат, похоже, что положительный :wink: (проект 8080_3.DSN)...

Image
Увеличить

Ну и из скриншота видно, почему моделей микропроцессора z80 в библиотеках по две:
я добавил каждой модели УГО, по стандарту IEC, что ближе к нашему ГОСТ и мне больше
нравится внешне. Инверсные выводы с кружкАми добавлять не стал, поскольку в среде
Протезуса они выглядят как "яйцо сбоку", а я люблю - кружок на периметре УГО...

Если что-то пойдет не так, Протезус может начать ругаться:

Reading netlist...
FATAL: [DD1] External model DLL "x80.DLL" not found.
(Get Last Error) GLE=0x00000002. = ERROR_FILE_NOT_FOUND

Это он не нашел x80.dll или Z80.dll - они должны быть в
его папке MODELS.

(Get Last Error) GLE=0x00000485. = ERROR_DLL_NOT_FOUND
Это он не нашел файл MSVCR100D.DLL или что-то еще сопутствующее.

(Get Last Error) GLE=0x0000001F. = ERROR_GEN_FAILURE
Это он все нашел, но случился по пути "Генерал Файлура"! :ebiggrin:

В общем - удачи всем в освоении модели, а то она теперь в Протезусе есть, а никто как бы
и не рад что-ли? :roll:


P.S. Огромное спасибо aav8 - ЗА ВСЁ ! :kruto:

_________________
iLavr


09 Jan 2016 19:49
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Ну и поскольку рабочая модель микропроцессора z80 у нас теперь есть, я возжаждал, чтобы была в
Протезусе полноценная интегрированная среда (IDE) для разработки проектов на z80/i8080.
А для этого мне хотелось, чтобы был довольно мощный ассемблер конкретно для мнемоник i8080, ибо
их многие у нас тут, да и не только у нас, ностальгически любят.

Для работы с ассемблерными файлами i8080 у нас многие используют Fasm, и Tasm, и Nasm, но это не
специализированые трансляторы мнемоник i8080, а табличные, и хотя я их пробовал некоторое неудовлетворение
оставалось, поскольку хотелось, чтобы не пришлось ломать старые привычки от ассемблера "Микрон",
с которым многие тут выросли, и чтобы все написанные ранее программы на ассемблере для любимого
К580ВМ80А можно было компилировать не подправляя.

Сам я привык к ассемблеру "Специалиста_МХ" - схожего с "Микроном", но запускать всякий раз эмулятор
"Специалиста_МХ"
тоже поднадоело, с учетом, что в нем не работает мышь, "копи-паст" и прочие
современные "кунштюки"...
Да и возможностей самогО транслятора хотелось уже помощнее.

Я уже начал писать собственный Ассемблер на Ассемблере, подражая ассемблеру "Специалиста_МХ",
но пару дней назад я снова наткнулся на весьма интересный проект, который я видел и ранее, но
тогда он мне казался несколько громоздким:
The Intel 8080 Assembler by Jay Cotton and Claude Sylvai - (исходники проекта)

Хотя исходники эти я скачал со страницы нашего коллеги Александра Дёмина (да пребудет с ним
Великая Сила! :wink: ), поскольку он их пробовал хотя бы скомпилировать и даже ошибочку в них нашел.

Мне сразу понравилось, что этот Intel 8080 Assembler без малейших затруднений и ошибок оттранслировал
пару моих крупных ассемблерных исходника системы RAMFOS "Специалиста_МХ".
У ассемблера оказались весьма развитые средства работы со строкой аргументов операнда, а также
наличие макросредств.
Я подправил пару шероховатостей при работе с кириллицей и одну странную ситуацию, являющуюся
анахронизмом, когда всё, что начинается с 1-й позиции строки - это метки...
Ну и, погоняв Intel 8080 Assembler на разных примерах, я пришел к выводу, что это на 99% - то,
чего мне, собственно, и хотелось.
Поэтому я его опробировал в среде Протезуса и на его основе скомпоновал Intel 8080 IDE.

Компилятор Intel 8080 Assembler можно скачать вот здесь. (пароль архива 123)

В папке ASM8080 находятся 5 файлов:
ASM8080.exe - сам компилятор Intel 8080 Assembler;
ASM8080D.txt - документация от авторов проекта (чуть дополнена мной);
ASM8080.BAT - пакетный файл для компиляции с листингом;
ASSM4K.ASM - исходник компилятора Assm "Специалиста_МХ";
TENNISIO.ASM - исходник игры Pong моего проекта в Протезусе.

Ассемблерные файлы приложены для тестирования компилятора Intel 8080 Assembler и в принципе для
IDE Протезуса они не нужны.

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

_________________
iLavr


16 Jan 2016 19:24
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Итак, если архив скачан, папку ASM8080 помещаем в директорию Tools Протезуса.
Там находятся и другие компиляторы микропроцессорных устройств, эмулируемых этим пакетом.
У меня эта папка расположена, как хотел при инсталяции сам Протезус по умолчанию:

C:\Program Files\Labcenter Electronics\Proteus 6 Professional\Tools

Заходим далее в директорию:

C:\Program Files\Labcenter Electronics\Proteus 6 Professional\SAMPLES

где создаем папку проекта с моделью микропроцессором z80, у меня - Pong_i8080.

Распаковываем в нее файлы проекта и далее все манипуляции проделаем на его основе.
8080_T2.DSN
8080_T2.PWI
TENNISIO.ASM - это то же самое, что и в архиве компилятора Intel 8080 Assembler.

Из папки C:\Program Files\Labcenter Electronics\Proteus 6 Professional\BIN
запускаем isis.exe
Загружаем из C:\Program Files\Labcenter Electronics\Proteus 6 Professional\SAMPLES\Pong_i8080
проект 8080_T2.DSN

В принципе всё можно проделать и на пустом листе проекта, но тогда нечем буде опробовать
скомпилированый бинарник программы.

Подключаем наш компилятор к Протезусу через опцию Source верхней строки меню:

Image

Появится вот такая вкладка:

Image

Кнопкой New создаем новый инструмент (Tool) для компиляции в Протезусе из папки:

C:\Program Files\Labcenter Electronics\Proteus 6 Professional\Tools\ASM8080\ASM8080.exe

ASM8080 - будет зарегистрированное название инструмента, ASM8080.exe - его исполняемый файл.

Расставляем, как на рисунке все расширения файлов и переменную %1 для передачи компилятору
имени исходного файла.
Вьюер для LST-файла лучше не указывать - он будет слегка назойливо мешать. Но если надо -
здесь указывается путь к текстовому редактору или другому вьюеру, которым автоматически
будет показан LST-файл после компиляции.
Если выставить "галку" Always Build: - компиляция будет происходить при каждом старте симуляции
проекта, что не совсем удобно и даже мешает.
Охраняем настройки Кнопкой ОК.

В верхней строке меню через опцию Source выбираем следуюшую позицию:

Image

В выпавшем окне следует указать путь к своему любимому програмистскому редактору с контекстной
подсветкой кода и прочим "блэкджэком и ..т.д." :wink:

Image

У меня это - A Tech Group Professional Notepad. Если нужно - делаем коррекцию полей Open... Save...
Закрываем вкладку Кнопкой ОК.

Теперь в верхней строке меню через опцию Source выбираем вкладку исходного файла:

Image

И в открывшемся окне кнопкой New добавляем ассемблерный файл TENNISIO.ASM из папки проекта:

Image

C:\Program Files\Labcenter Electronics\Proteus 6 Professional\SAMPLES\Pong_i8080\TENNISIO.ASM

Указываем, чем будем его компилировать: инструмент ASM8080
И выставляем опцию -l, чтобы при компиляции создавался файл листинга.

Командная строка запуска получится такая:

C:\Program Fi...ols\ASM8080\ASM8080.exe TENNISIO.ASM -l

Сохраняем настройки Кнопкой ОК. IDE среда практически готова!

Если теперь в верхней строке меню через опцию Source кликнуть по имени файла TENNISIO.ASM -

Image

он откроется на редакцию в указанном Вами редакторе (у меня - вот так):

Image

А если через опцию Source верхней строки меню запустить компиляцию,

Image

то её процесс отобразит встроеный вьюер Proteus.

Image

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

С другой стороны, если при компиляции случится ошибка:

Image

то редактор LST-файла её сразу покажет, иначе придется открывать LST-файл вручную в папке проекта.

Сформированные компилятором файлы помещаются в папку проекта.
TENNISIO.LST
TENNISIO.BIN
TENNISIO.HEX


Файл .BIN или .HEX указываются в качестве "прошивки" ПЗУ проекта, и проект можно запускать на симуляцию.

С таким вот IDE я привык работать с мироконтроллерами PIC, теперь это можно задействвать и для
проектов на z80(i8080).
Желаю приятной работы! :lol:


P.S. Если кто опробует работу с макросами Intel 8080 Assembler - отпишитесь мне в личку, поскольку
макросы я не тестировал - вдруг что не так...

_________________
iLavr


16 Jan 2016 19:44
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Проверил я работу транслятора с макросами. Просто никогда не писал макросов под i8080.
Оказалось, практически так же как и везде... 8)

Вот такой макрос компилирует нормально:
Code:
print macro; объявление макроса
    LXI H,1000H
    CALL 0F818H
endm

    ORG  0000H;
START:
    print
    LXI SP,7FFFH; set Stack
    ...

A вот такой макрос компилятору не понравился:
Macro parameters are not supported! ("STR")
Code:
print macro STR; объявление макроса
    LXI H,STR
    CALL 0F818H
endm

    ORG  0000H;
START:
    print
    LXI SP,7FFFH; set Stack
    ...

_________________
iLavr


16 Jan 2016 21:17
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Тут что хорошо - по тексту исходников (а исходники откомментированы обильно) авторы везде
ссылаются, как ни странно, на конкретные положения от Intel, на основе которых они обрабатывают
ту или иную ситуацию.

Мне это тоже понравилось - это не выглядит "ну как взбрело в голову автору", и мне почитать
было очень даже полезно.
Кстати, разбор строки аргумента сделан по принципу обратной польской записи и на стеках.
Опять же авторы дают ссылки на алгоритмы, которые использовали.

Так что с такими добротными исходниками всё поправимо.

Ну и хотя я несколько торопился, поскольку праздники кончились и пора бросать хобби и браться за
серьезную работу, ибо поднакопилось уже, но успел я заметить, что исправленный мной
анахронизм "всё, что начинается с 1-й позиции строки - это метки" авторы тоже придумали не сами.

А что касается макросов с параметром, то я под К580ВМ80А их не юзал никогда - ну не было их в тех
наших старых ассемблерах, но если они сильно понадобятся - можно и добавить, ибо исходники открытые.
Но я вчера сам вспоминал, как они должны выглядеть макросы, ибо пользовался ими еще под ассемблером
для PIC - ну не скажу, что я в принципе испытал прилив энтуазизма!

Intel 8080 Assembler поддерживает еще такую полезную вещь, как #include, хотя меня это всегда
больше путает - вечно забываешь, чего там #include, поскольку не перед глазами... :wink:


P.S. Всех - с прошедшими Новогодними каникулами! Let's 'arbaiten'! :lol:

_________________
iLavr


17 Jan 2016 07:21
Profile
Maniac

Joined: 05 Nov 2008 20:47
Posts: 279
Location: 81.28.208.238
Reply with quote
Приветик Всем!!!
С прошедшими праздниками!!
Тема продолжает жить!

Некоторые особенности и мысли по поводу модели x80:

В проекте можно использовать только один проц.
Тормознутость имеет место быть по причине того, что все обращение к периферии
проходит через proteus (в отличии от микроконтроллеров).

В режиме останова можно посмотреть выполняемую команду и содержимое регистров.
Если исходник/листинг программы преобразовать в файл с расширением std или stb (точно
не помню - надо глянуть в примерах proteus - формат довольно понятный) то отладку можно
проводить как в нормальном IDE.


17 Jan 2016 10:34
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
aav8 wrote:
Тормознутость имеет место быть по причине того, что все обращение к периферии
проходит через proteus (в отличии от микроконтроллеров).

Сам процессор весьма шустрый - тест делает даже на моем любимом убогом PII-360MHz
очень быстро, особенно когда я частоту выставил 2000000 Hz. :wink:

Тормознутость в моем проекте Tennis_i8080 связана в значительной мере с моделью LCD
индикатор Nokia 3310
, поскольку он занимается отрисовкой на экран.

По этой же причине у меня там процессор на тактовой частоте 500000 Hz - если больше,
то индикатор Nokia 3310 начинает отрисовываться рывками где-то по трети своего экрана.

Ну на быстрых машинах этого не заметно, просто у меня старый ноут великолепно расточен
для работы - никак не обустрою также хорошо новый ноут с Intel Atom 1.8 GGz.


И, кстати, насчет модели LCD индикатор Nokia 3310: никто не встречал её вариант без
надписи Demo Version ?

Image

Мне кажется, в ней работают с альфа-каналом или прозрачностью - а это сильнее её тормозит.

Я сам пробовал написать модель LCD по имеющимся в сети исходникам, просто вывод на
экран работает гораздо быстрее!

_________________
iLavr


17 Jan 2016 11:15
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
aav8 wrote:
Если исходник/листинг программы преобразовать в файл с расширением std или stb (точно
не помню - надо глянуть в примерах proteus - формат довольно понятный) то отладку можно
проводить как в нормальном IDE.

Посмотрел в своем Proteus-e, скорее всего это файл с расширением .SDI, потому как для языков
высокого уровня генерируется .cof-файл для отладки.

Надо будет поинтересоваться, что у него за формат...

P.S. Да, действительно, файл .SDI... раскопал вот:
Quote:
Чтобы отлаживать программу на ассемблере в Proteus нужен файл с расширением *.SDI
Для AVR он генерируется с помощю небольшой утилитки из папки ...\AVRASM, и имя той программы avrddx.EXE
Чтобы сгенерировлть нужный для отладки *.SDI нада написать в командной строке:
C:\...\..\AVRASM\avrddx EXTRAM1.LST

И утилита создаст файл EXTRAM1.SDI .


P.P.S. Ну и формат файла .SDI действительно несложен, если это он:
Quote:
Запись содержит 4 поля:
1 - адрес ячейки памяти
2 - машинный код операции
3 - метка
4 - текст исходной программы

Все поля разделены запятыми.

Например:
1 - 2 - 3 - 4
0003,00,MainLoop,MainLoop: nop


В тех строчках, где есть адрес можно ставить брейкпоинт.

_________________
iLavr


17 Jan 2016 12:10
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Что-то у меня этот фокус с .SDF-файлом не прошел... :osad:

Быстренько я сделал в редакторе .SDF-файл, вроде нигде не ошибся...
Code:
,,,  ;-------------------------------;
,,,  ;   TENNIS.ASM  15.08.2010      ;
,,,  ; веpсия под RAMFOS минимальная ;
,,,  ;-------------------------------;
,,,
,,,        00 00      ORG  0000H;
,,START:,
0000,31 FF 7F,,      LXI SP,7FFFH; set Stack
0003,CD 2D 00,,      CALL INIVARS; init var-s in RAM
0006,CD 2E 00,,      CALL CLS
,,,  ; 21 C8 06 13 20 0C
,,,  ;~~~~~~~~~~~~~~~~INIT LCD~~~~~~~~~~~~~~~~~~~~~
0009,CD 2B 00,,      CALL LCD_RST
000C,3E 21,,      MVI  A,21H
000E,CD 2C 00,,      CALL LCD_COM
0011,3E C8,,      MVI  A,0C8H
0013,CD 2C 00,,      CALL LCD_COM
0016,3E 06,,      MVI  A,06H
0018,CD 2C 00,,      CALL LCD_COM
001B,3E 13,,      MVI  A,13H
001D,CD 2C 00,,      CALL LCD_COM
0020,3E 20,,      MVI  A,20H
0022,CD 2C 00,,      CALL LCD_COM
0025,3E 0C,,      MVI  A,0CH
0027,CD 2C 00,,      CALL LCD_COM
002A,76,,        HLT
,,,  ;~~~~~~~~~~~~~~~~CLEAR LCD~~~~~~~~~~~~~~~~~~~~~
,,LCD_RST:,
002B,C9,,        RET
,,LCD_COM:,
002C,C9,,        RET
,,INIVARS:,
002D,C9,,        RET
,,CLS:,
002E,C9,,        RET
,,,        END


Запустил проект в режиме отладки, а он отладочного окна не показывает... :osad:

Я так думаю, что поскольку у нас программа не в самом процессоре, а в ПЗУ, Proteus не понимает,
что надо включать отладчик для .SDF-файла прошивки ПЗУ.

В других проектах программа "внутри процессора" и там отладчик включают вот так:
Attachment:
SDIDEBUG.gif
SDIDEBUG.gif [ 22.52 KiB | Viewed 7622 times ]

А у нашего такого меню не выкатывают. Да и откуда ему знать - что он пользует программу
TENNISIO.hex из ПЗУ - U4, к которой прилагается
TENNISIO.sdi.

Я попробовал Proteus обмануть и в текстовых свойствах добавил ему строку:
PROGRAM=TENNISIO.hex
но что-то он на это не купился... :-?

_________________
iLavr


17 Jan 2016 14:21
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Быстренько я сделал в редакторе .SDF-файл, вроде нигде не ошибся...

Действительно, нигде я не ошибся, и .SDF-файл создал правильный.

Я открыл первый попавшийся проект с PIC16F84A, и подсунул ему вот эти файлы:
TENNISIO.hex
TENNISIO.sdi.
После чего дал команду - шаг в отладку, и проект с PIC16F84A отработал всё четко...
Attachment:
SDI_PIC16.gif
SDI_PIC16.gif [ 9.37 KiB | Viewed 7619 times ]

Либо у меня Proteus зело старый, что может быть, (v 6.7 Pro).
Либо сам Proteus не имеет информации, что следует подсунуть .SDF-файл при отладке нашему ЦПУ.
Я склонен к этой версии, т.к. у других микроконтроллеров Proteus-у известен .НЕХ-файл программы
и он использует в отладке одноименный .SDF-файл.

_________________
iLavr


17 Jan 2016 15:17
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
aav8 wrote:
Если исходник/листинг программы преобразовать в файл с расширением std или stb (точно
не помню - надо глянуть в примерах proteus - формат довольно понятный) то отладку можно
проводить как в нормальном IDE.
Если предполагалось, что при наличии .SDI-файла отладка осуществляется сугубо за счет возможностей ISIS.EXE,
то этого, на мой взгляд, не произойдет, если функции по отладке не прописаны в модели.
А в модели x80.dll они, судя по всему, не прописаны.

Насколько я посмотрел HELP по Proteus VSM SDK, то отладочным окном управляют несколько функций VSM API:
Attachment:
SDIHELP.gif
SDIHELP.gif [ 19.15 KiB | Viewed 7616 times ]

И самая первая из них как раз и указывает имя отладочного .SDI-файла: setfile(CHAR *ddxfile).

Для того чтобы по имени .НЕХ-файла сформировать имя необходимого .SDI-файла, во всех dll-
библиотеках процессорных моделей явно присутствует сигнатура SDI:
Attachment:
SDISIGN.gif
SDISIGN.gif [ 3.83 KiB | Viewed 7616 times ]

А в библиотеке x80.dll модели Z80 сигнатуры SDI я не нашел. Следовательно, модель Z80 на .SDI-файл
функцией setfile(CHAR *ddxfile) не указывает, позтому он не загружается и отладка в окне не происходит.
Что, собственно, и наблюдается в действительности.

Эх... сначала так обрадовался я, что так всё просто! :lol: А оно совсем просто не бывает... :osad:

_________________
iLavr


17 Jan 2016 18:34
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Насколько я посмотрел HELP по Proteus VSM SDK...

И весь механизм-то такой красивой отладки в IDE вырисовывается довольно-таки примитивным!
Я-то несколько наивно думал, что при отсутствии отладочного .SDI-файла, у моделей есть свой
собственный встроенный дизассемблер... :-?

Но всё несколько прозаичней: при компиляции создается этот самый .SDI-файл с форматированной
отладочной информацией, самое главное в которой - столбец адресов.
Attachment:
SDI_Z80.gif
SDI_Z80.gif [ 7.63 KiB | Viewed 7602 times ]

Proteus ISIS умеет только красиво показать этот .SDI-файл, который указывают ему из модели.

А далее в пошаговом прохождении модель передает Proteus ISIS текуший адрес на каждом шаге, а уже
сам ISIS находит нужную строку в .SDI-файле и подсвечивает её на экране.

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

В случае с нашим процессором z80 ситуация несколько осложняется тем, что программа расположена
вне процессора и может быть из нескольких HEX-файлов.
К примеру, в ПЗУ - некий BIOS.HEX, а в ОЗУ - PROG.HEX. Я не уверен, что Proteus ISIS умеет работать с
несколькими .SDI-файлами.
Тогда, вероятно, необходимо сформировать общий .SDI-файл, и в любом случае его надо явно указать
модели, видимо, как-то так:
Attachment:
SDIMENU.gif
SDIMENU.gif [ 9.62 KiB | Viewed 7602 times ]

Добавить эту строку в меню не сложно, в текстовом скрипте модели её вводят вот так:
{ITFMOD=Interface Model,HIDDEN STRING}
{PROGRAM=Program File,FILENAME,FALSE,,Intel Hex Files/*.HEX}


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

_________________
iLavr


18 Jan 2016 08:15
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 311 posts ]  Go to page Previous  1 ... 11, 12, 13, 14, 15, 16, 17 ... 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.