|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
15.07.2012, 10:50 | #1 |
Пользователь
Регистрация: 14.07.2012
Сообщений: 18
|
DprToLvt (PasToLvt). Пишу среду разработки (Эмулятор) для ПК-01 Львов на Delphi6
Команды КР580 в виде Дельфи процедур…
Правильно ли реализованы следующие процедуры: //Код Delphi Код:
Код C++ Код:
Код:
вот еще огрызок который мне пытались перевести на паскаль (Дельфи):Код Pascal tmp := src1 + src2; SetFlagAc(((src1 xor src2 xor tmp) and 16) <> 0); dst := tmp; Последний раз редактировалось Stilet; 15.07.2012 в 16:26. |
16.07.2012, 07:57 | #2 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
1. Я не увидел никаких признаков отслеживания времени выполнения команд, а между тем для i8080 (К580ВМ80) это отнюдь не маловажный фактор: обычно компьютеры на этом процессоре не имели отдельного таймера, поэтому все временнЫе интервалы реализовались посредством определенного количества команд известной продолжительности.
2. Привели бы Вы описания команд. Сами понимаете, с тех пор, когда реально программировали на i8080, прошло немало лет. Я, например, уже мало что помню. Ну и описание глобальных переменных Вашей программы тоже не помешало бы. |
16.07.2012, 19:48 | #3 | |||
Пользователь
Регистрация: 14.07.2012
Сообщений: 18
|
Цитата:
Так как они у меня работают правильно (в других командах которые работают правильно) Чтобы не «засорять» людям мозги, а хотел узнать правильно ли реализована сама «соль» команды… т.е. правильно ли применяются в процедуре признак займа?... правильна ли операция (логическая операция) над нужными регистрами?... и т.д. Цитата:
Цитата:
Код:
|
|||
16.07.2012, 19:51 | #4 |
Пользователь
Регистрация: 14.07.2012
Сообщений: 18
|
Вот все команды которые у меня «под подозрением» неправильной их реализации, а ниже описание, если кто уже забыл…
Код:
+ признак изменяется - не изменяется S - знак результата Z - признак нулевого результата Ac- дополнительный перенос P - признак четности C - признак переноса/заема Вместо D8, тип Байт S Z Ac P C ADC S | A=A+S+c | + + + + + | Сложение с учетом признака переноса "c". SBB S | A=A-S-c | + + + + + | Вычитание с учетом заема "c". ACI D8 | A=A+D8+c | + + + + + | Сложение с учетом переноса. RST V |PC-->M(SP-1,SP-2) | --- -- | Прерывание по вектору |SP=SP-2, V*8-->PC | | V*8. V = 0 ...7 SBI D8 | A=A-D8-c | + + + + + | Вычитание с учетом заема. PCHL | переход на HL | Переход по адресу, заданному в HL. XRI D8 ! A = A ¤ D8 | + + 0 + 0 | Исключающее ИЛИ. ORI D8 | A = A ! D8 | + + 0 + 0 | Логическое ИЛИ. Пока все…. |
17.07.2012, 15:47 | #5 |
Пользователь
Регистрация: 14.07.2012
Сообщений: 18
|
При переводе программ написанных в Маш.кодах (в частоности КР580) в структуру Дельфи…
структура ассемблера не позволяет перевести (транслировать) такие программы так как в структуре ассемблера: 1 .есть «досрочный» выход из процедуры минуя end, a Ret может располагаться где угодно, а также даже не однин «хвост» окончания одной процедуры… 2. есть вход в середину процедуры по метке перехода, что не позволяет среда Дельфи. 3. Также на одну метку в ассемблере возможен переход как на процедуру (Call) так и «обычный» переход (Jmp) Вопрос: Возможно ли транслирование структуры ассемблера с вот такими вот особенностями которыми обладает почти все Асм-программы в структуру Дельфи?.. Какие конструкции мне необходимо знать? |
17.07.2012, 20:40 | #6 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
1. Насколько я помню, стек при запуске программы устанавливается в 100h и растет вниз.
2. Попытка один в один переписать с языка низкого уровня на язык высокого уровня изначально обречена на провал - не стоит и пытаться этого делать. Единственный, на мой взгляд, вариант - интерпретация кодов i8080. 3. Не понял, что такое "регистры очереди команд". 4. Команда ADCB реализована неверно - она также должна устанавливать (или сбрасывать) флаг переноса в зависимости от того, помещается ли результат в байт. 5. Аналогично SBBB. 6. Аналогично ACI (или ADI?). Смысл в том, чтобы обрабатывать не только двухбайтовые числа, а числа любой длины. 7. Не знаю, как работает эмулятор, но PCHL я бы записал RgPC := RgHL. Я бы реализовал эмулятор i8080 как конечный автомат: читается байт по смещению RgPC, интерпретируется, счетчик команд смещается на 1/2/3 байта, читается следующий код команды и т.д. |
17.07.2012, 21:53 | #7 | |||
Пользователь
Регистрация: 14.07.2012
Сообщений: 18
|
Цитата:
1.Загрузка кодов в память (т.е. массив байтов 64килобайта как ПК-01) и обрабатывается в "той" памяти как бы в памяти "ПК-01 Львов", считавает команды и выполняет их Дельфийскими процедурами такими как я приводил пример. 2. Этими же дельфийскими процедурами можно написать прямо программу как программу в дельфи . Считываешь в регистры очереди команд текущую команду и еще два байта, так как команды могут быть 1,2,3 байтовые и передаешь в процедуру обработки команды, пусть она "раслебывается" (в зависимости от первого байта ) нужны ли ей второй и трейтий байт... Цитата:
ТЫ МНЕ СКАЖИ, САМО, ОСНОВНОЕ ДЕЙСТИВЕ В КОМАНДЕ Верно?... Или нет?... Цитата:
Ну и такое есть, как я писал уже, (выше в этом сообщение), но и эмуляторы такие тоже есть, а я хотел пойти бы дальше... чтобы можно было бы прям в дельфи писать проги, вот такими вот процедурами, а в дальнейшем развивать это. После написать отдельный компилятор в маш коды КР580 ПК-01 Львов, программу написанную в дельфи среде. Пускай для начала даже мнемокодами КР580 (в виде дельфи процедур)... |
|||
17.07.2012, 22:09 | #8 |
Пользователь
Регистрация: 14.07.2012
Сообщений: 18
|
Вот ссылка http://sas.forumbb.ru/viewtopic.php?id=290 на мой форум, где описание и черновой готовый модуль с примерами, скачивайте и рассматривайте. Там черновик модуля не один, поэтому скачивате последний...
вот этот: вспомогательный модуль для среды Дельфи, с возможностью компилирования программ в машинные коды ПК-01 Львов. ............. Доработанный модуль с примером игрой «Пьяный лифтер» и предыдущими примерами http://file.oboz.ua/download.php?fid=138217 |
21.07.2012, 16:47 | #9 |
Пользователь
Регистрация: 14.07.2012
Сообщений: 18
|
Существует процедура задержки (часть кода из нее)
Код:
|
21.07.2012, 22:16 | #10 | |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Цитата:
Программа будет грузить 100% одного ядра, отдавать время другим процессам не получится, и, хуже того, даже это не обеспечит стабильность временных интервалов. Любой квант времени, который Вы захотите отдать, будет лежать в интервале от нескольких до нескольких десятком мс, в худшем случае достигая сотен. Учитывая, что в i8080 время выполнения короткой команды составляет 0.0016 мс, такие интервалы выглядят совершенно неприемлемыми. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Посоветуйте среду разработки | blacktener | Софт | 10 | 18.04.2011 15:18 |
Среду разработки C++ программ. | firephenix | Помощь студентам | 6 | 17.04.2011 12:13 |
Какую среду разработки посоветуете для новичка? | yura_zb | Общие вопросы C/C++ | 3 | 25.02.2011 00:01 |
среду разработки Chrome IDE | CPU | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 5 | 07.01.2009 11:40 |