Quote:
Неужели все программы используют это?
Подкину уголька. Команда DAA в i8080 реализована с ошибкой, она неверно отрабатывает коррекцию после вычитания. В z80 эту багу исправили, что привело к частичной потере совместимости. Когда-то мне попадался отличный материал на эту тему, но сейчас ссылку найти не могу, поэтому ограничусь первым, что предоставил Гугль, т.е. ссылкой на форум "nedoPC" [
Тест точности эмуляции 8080].
Quote:
Я для начала пытаюсь реализовать хоть какие-то команды которые работают правильно...
Вообще, то что я пишу, т.е. в "моей среде" лучше разрабатывать с нуля. Врядле можна будет без ручной обработки, дизПАСКАЛить программы львова "в мою среду" на прямую, т.к. структура асма и паскаля разные... но ради такого можно и вручную отредактировать асм-структуру под Пас-структуру... будет утилита - "тупой перевод" команд асмЛьвова в асмПаскаля, а дальше "ножницы" и "окутутывание" процедурами Паскаля, которые должны быть обязательно в "верху" и т.д.
Чё Вы там курите?
Quote:
вот пример:
Code:
program Test;
Procedure Proba;
begin
.......
end;
Label m1;
begin
Proba;
MVIB(1);
MVIA(250);
m1:
ADDB;
goto m1;
end.
Вот к такому виду надо будет приводить "тупо" дизпаскаленные программы ПК-01.
Зато какая ЛАФА редактировать и отрабатывать программу, целой Дельфи средой со всей ее мощью это можно только представить.... и кто бы, что не говорил, да никакой асм-отладчик не заменит такого!
Поставьте себя на минутку на место пользователя своего продукта. Это взрослый человек, с профессией, семьянин, т.е. вполне состоявщийся человек, так неужели он, улучив минутку, чтобы из ностальгических соображений выпилить что-то незатейливое (ибо затейливое под "Львов" уже никто и никогда писать не будет), будет забивать себе голову тем, как транслировать синтаксис ассемблера i8080 (с которым он последний раз имел дело лет двадцать назад) в синтаксис Дельфи, да еще и радоваться мощи редактора среды DELPHI XE2, которая сейчас стоит даже в
STARTER EDITION 199 у.е.! За что все это?! Что мы Вам сделали плохого? На свете и без всего этого есть прекрасные бесплатные редакторы и целые IDE, которые не менее чудесно позволяют редактировать текст, существует уйма free трансляторов ассемблера z80, которые позволяют без проблем получать код для i8080... Что еще нужно? Ладно бы, Вы писали транслятор с какого-либо современного высокоуровнего языка в ассемблер i8080, но что мы сейчас видим, что за прелесть: "MVIB(1); MVIA(250);", - Господи, что это?! Стоп... Да там еще и
goto используется! Рукалицо...
p.s. Еще
материал про ошибку в реализации DAA.
upd. В книге А. Ларченко и Н. Родионова "ZX Spectrum & TR-DOS" нашел хорошее объяснение работы команды DAA.
Quote:
Пусть, например, нужно сложить два двоично-десятичных числа* 15 и 39 (00010101 и 00111001 соответственно).
Code:
LD A, %00010101
LD C, %00111001
ADD A,C ; A = %01001110
DAA ; A = %01010100
Согласно правилам двоичной арифметики в результате сложения в аккумулятор будет помещено число %4E, однако операция DAA скорректирует это значение, и конечный результат составит 54.
*В двоично-десятичных числах цифры от 0 до 9 кодируются четырьмя битами, причем комбинации 1010...1111 не используются. Таким образом в одном байте может быть записано только две цифры. Это расточительно с точки зрения экономии памяти, но гарантирует отсутствие ошибки "машинного" округления.