PC-01 Lviv
http://pc01.lviv.ua/forum/

DprToLvt (PasToLvt)
http://pc01.lviv.ua/forum/viewtopic.php?f=20&t=153
Page 3 of 15

Author:  sadfsdfsdaf [ 05 Jun 2012, 22:58 ]
Post subject:  Re: DprToLvt (PasToLvt)

Quote:
Quote:
Я предлагаю тебе сконцентрироваться на разработке ассемблера,
Ну допустим,… и чего там еще можна доработать?... ну «понимание меток» доработаю, все остальное я лично не понимаю нахрен оно кому надо?!
b2m говорит дело.

что ещё доделать? в ассемблер таблицу кросс-связей (какая метка откуда вызывается).
в отладчик - undo/redo, возможно в виде дерева.
Quote:
Дак если метки пока не реализованы... то без меток прямые адреса можно?
можно, но они нужны в 3-5% случаев. А без меток - это руками всё писать, без меток ассемблер бесполезен.
Quote:
есть еще вопрос: А это точно что этот листинг нужно прикричивать имеенно к асм, а не дизасм? (что так правильнее чтоль?)
дизасм не может отличить код от данных, у него нет кросс-переходов между метками, нет комментариев и макросов....
Quote:
Вообще в отличии от отладчика ассемблера с его ограниченным и «сдавленными» возможностями здесь они просто неограниченны.
в дельфи: распечатай трассу выполнения или отследи все зависимости по константе (всю цепочку команд, которая оперирует с заданным в каком-то месте аргументом). (dataflow analysis)
не сможешь.

Author:  sadfsdfsdaf [ 05 Jun 2012, 23:11 ]
Post subject:  Re: DprToLvt (PasToLvt)

Quote:
Меня терзают смутные подозрения... Вроде бы я Вас уже спрашивал про сохранившиеся записи по дизассемблированию стандартного ПЗУ ПК-01? Что-то найти удалось?
я так до них и не добрался.

кстати, ещё вспомнилось, интересное место, перевод числа в 16-ричную цифру:
Code:
adi 90h
daa
aci 40h
daa
ret
daa добавляет 66 для коррекции, если цифры больше 9, aci учитывает перенос, в результате для 0-9 добавляем 30, а для A-F добавляем ещё 7 к предыдущему (6+1).

Author:  sas9568635 [ 06 Jun 2012, 15:01 ]
Post subject:  Re: DprToLvt (PasToLvt)

Quote:
что ещё доделать? в ассемблер таблицу кросс-связей (какая метка откуда вызывается).
А пример можно?.. Как должна выглядеть эта самая "таблица кросс-связей"...

Author:  sas9568635 [ 06 Jun 2012, 20:59 ]
Post subject:  Re: DprToLvt (PasToLvt)

Правитльно ли реализована (эмуляция)команда асма MOV D,M (и ей подобные)
Code:
Procedure MOVDM;
Begin RgD:=Memory[RgHL];
end;//???
B2M, я помню что ты говорил: "к памяти надо обращаться через процедуру, а не на прямую", но пока я не "възжаю" зачем это, то вопрос пока в таком контексте....

Author:  sas9568635 [ 06 Jun 2012, 21:02 ]
Post subject:  Re: DprToLvt (PasToLvt)

Процедуры присваивания одноименных регистров делать "пустышками" ?
Code:
Procedure MOVEE;
Begin
end;
Или все-таки правильнее так вот:
Code:
Procedure MOVEE;
Begin
RgE:=RgE;
end;

Author:  sas9568635 [ 06 Jun 2012, 22:03 ]
Post subject:  Re: DprToLvt (PasToLvt)

Правильно ли реализована команда асма ADD M
Procedure ADDM;
Code:
Begin
RgA:=RgA+Memory[RgHL];
end;
Как правильно реализовать команду ADC S | A=A+S+c Сложение с учетом признака переноса "c". (S: A,B,C,D,E,H,L,M.)
Либо как правильно перевести ее реализцию с АСМа на ПАС…
Code:
; ADC B 
C88:
		mov	ah, [RgF]
		sahf
		mov	al, [RgB]
		adc	[RgA], al
		lahf
		mov	[RgF], ah
		ret

Author:  liberation [ 06 Jun 2012, 22:16 ]
Post subject:  Re: DprToLvt (PasToLvt)

Quote:
B2M, я помню что ты говорил: "к памяти надо обращаться через процедуру, а не на прямую", но пока я не "възжаю" зачем это, то вопрос пока в таком контексте....
Скорее всего подразумевалось, что стоит создать класс Memory, который обвесить после геттерами и сеттерами, чтобы контролировать доступ к "памяти". К примеру, отслеживать ситуации, когда происходит попытка записи в область ПЗУ, или обращение в область 0000h-3FFFh при включенном видеоОЗУ, чтобы после бросить аццкий эксепшен (добавить строгий режим работы с памятью, чтобы помочь разработчикам). Можно отслеживать маппинг портов на ОЗУ, хотя на ПК-01 такой штуки не было, но это может быть задел на будущее. Но я не уверен, что Дельфи поддерживает механизм геттеров/сеттеров. :wink:

Author:  sas9568635 [ 06 Jun 2012, 22:48 ]
Post subject:  Re: DprToLvt (PasToLvt)

Quote:
К примеру, отслеживать ситуации, когда происходит попытка записи в область ПЗУ, или обращение в область 0000h-3FFFh при включенном видеоОЗУ.... ...Можно отслеживать маппинг портов на ОЗУ....
Я это понял (немного разобрался) просмотрев исходнки из
; Эмулятор Львов ПК-01 ; Автор: Антон Игнатичев, 1998-2012 Файл: HARDWARE.ASM Процедуры ReadMem: WriteMem: там есть и другие.. пока не смотрел..
Quote:
Но я не уверен, что Дельфи поддерживает механизм геттеров/сеттеров. :wink:
???!!! Незнаю про что речь но я буду делать через процедуры и функции типа SetMem(addr,byte); =GetMem(addr);
а насчет "геттеров"/"сеттеров" - это не такое ли, что при записи или чтении переменной выполняется какая нить процедура по ее обработке? Если да, то в дельфи это есть, но как реализовывается, надо читать и вникать... а не хочется... :-) Я считаю, что у меня хоть и мало, но достаточно знаний реализовывать теми путями которые я знаю... Так и буду делать.
Успехов (себе) :-)

Author:  sas9568635 [ 06 Jun 2012, 22:51 ]
Post subject:  Re: DprToLvt (PasToLvt)

Правильно ли реализована команда асма {ANA B} 'A = A & B Логическое И',
Code:
 Procedure ANAB;
Begin
RgA:=RgA and RgB;
end;//???
Правильно ли реализована команда асма {XRA B} 'A = A ¤ B Исключающее ИЛИ',
Code:
 Procedure XRAB; 
Begin 
RgA:=RgA xor RgB;
end;//???
Правильно ли реализована команда асма {ORA B} 'A = A ! B Логическое ИЛИ',
Code:
 Procedure ORAB;
Begin RgA:=RgA or RgB;
end;//???

Author:  liberation [ 06 Jun 2012, 23:03 ]
Post subject:  Re: DprToLvt (PasToLvt)

Quote:
Правильно ли реализована команда асма {ANA B} 'A = A & B Логическое И',
Правильно ли реализована команда асма {XRA B} 'A = A ¤ B Исключающее ИЛИ',
Правильно ли реализована команда асма {ORA B} 'A = A ! B Логическое ИЛИ',
Учтите тот момент, что в некоторых язык различаются логические и битовые операции. Не могу вспомнить, как с этим в Дельфи.
А почему в образцах кода не присутствует логика обработки флагов?

Author:  b2m [ 06 Jun 2012, 23:34 ]
Post subject:  Re: DprToLvt (PasToLvt)

Quote:
Правильно ли реализована команда асма {ANA B} 'A = A & B Логическое И',
Правильно ли реализована команда асма {XRA B} 'A = A ¤ B Исключающее ИЛИ',
Правильно ли реализована команда асма {ORA B} 'A = A ! B Логическое ИЛИ',
Нехватает сброса флага C, и установки по результату флагов S,Z,P. Установка флага AC недокументирована, но обычно он устанавливается в ноль, кроме операции AND, в которой флаг AC устанавливается в OR третьих битов аргументов.

Арифметические команды тоже должны устанавливать все флаги.

Author:  sas9568635 [ 07 Jun 2012, 08:11 ]
Post subject:  Re: DprToLvt (PasToLvt)

Я хочу для начала создать ВСЕ комнады хотябы ТОПОРНО, а "палировка" т.е. влияние каждой на флаг буду делать потом... надеюсь пойму как это делается.... ведь другие люди это понимали как кто... откуда-то брали инфу...
А мне может по их эмуляторам это проверить?... :-) :D :P

Author:  sas9568635 [ 07 Jun 2012, 13:30 ]
Post subject:  Re: DprToLvt (PasToLvt)

Если подключаеться видеостраница
MVI A, 0
OUT 0C2h
Обращение к видио памяти должно быть начиная с $4000? Которое соответсвует $0000 самой видеопамяти… Я ПРАВИЛЬНО ПОНИМАЮ?
А что должен делать проц(комп) в случае обращения меньше $4000?
--------------------
Область ПЗУ $C000 - $FFFF , я так понял изменить нельзя… А что должен делать проц(комп) при попытке?

Author:  liberation [ 07 Jun 2012, 13:49 ]
Post subject:  Re: DprToLvt (PasToLvt)

Quote:
Если подключаеться видеостраница
MVI A, 0
OUT 0C2h
Обращение к видио памяти должно быть начиная с $4000? Которое соответсвует $0000 самой видеопамяти… Я ПРАВИЛЬНО ПОНИМАЮ?
За подключение/отключение видеоОЗУ отвечает 1-й бит порта 0С2h. После подключения видеоОЗУ адресация не меняется, вся работа с изображением происходит внутри бланка 4000-7FFFh.
Quote:
А что должен делать проц(комп) в случае обращения меньше $4000?
Если я правильно помню, то во "Львове" без всяких доработок бланк памяти 0000h-3FFFFh отображался на область 8000h-BFFFh при включении видеоОЗУ.
Quote:
Область ПЗУ $C000 - $FFFF , я так понял изменить нельзя… А что должен делать проц(комп) при попытке?
Ничего. По крайней мере пользователь никаких "спецэффектов" не наблюдает.

Author:  sas9568635 [ 07 Jun 2012, 16:16 ]
Post subject:  Re: DprToLvt (PasToLvt)

А как такое реализовать? Что это вообше такое?..
DAA |Десятичная| |коррекция | | Преобразование содержимого аккумулятора в двоично-десятичный код.

Page 3 of 15 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/