PC-01 Lviv

It is currently 13 May 2024, 23:41

Forum Games WEB Tape Loader Twitter RSS

All times are UTC+03:00




Post new topic  Reply to topic  [ 215 posts ]  Go to page Previous 14 5 6 7 815 Next
Author Message
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 14 Jun 2012, 16:58 
Offline

Joined: 07 Dec 2010, 16:54
Posts: 227
Quote:
В ПК-01 делается вывод в видеопамять побайтово (если нужно блок, то в цикле) посредством заполнения байтов видеопамяти, которые сразу же и отрисовываються...!!!??? Всегда ли так это?,
детальнее не скажу, возможно процессор какие-то циклы пропускает, когда к этой же памяти обращается видеоформирователь.
специальных контроллеров нет (как, например, на Радио-РК).
Quote:
поэтому я и оптимизировал под это, т.е. "подробил" весь экран на кусочки 4х4.
при попадении байта в какой-то из этих кусоков, отрисовывается только этот кусок
это не слишком разумно, отрисовки чаще чем Х раз в секунду быть не может (кадровая частота экрана телевизора).
т.е. рисовать ты можешь (и Львов может), но никто этого не увидит.
Quote:
Также делаю и кеширование т.е. если в видеопамать попадает такой же байт как там есть, она его не отрисовывает заново, возможно так надо будет сделать и с отдельными 4пикселами, из которых состоит это байт... если конечно такое понадобится.
имеет смысл рассматривать не каждую запись, а пакет на заданный интервал (1/50 сек или по ключевым событиям).

в общем, лучше вывести блок 32х32, чем 32 фрагмента 4х4 - идея такая.


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 14 Jun 2012, 18:55 
Offline

Joined: 20 Apr 2012, 16:00
Posts: 372
Location: Конотоп
Quote:
в общем, лучше вывести блок 32х32, чем 32 фрагмента 4х4 - идея такая.
Процедура дробления экрана у меня регулируемая от 2х2 до 64х64, задаешь значение, такими квадратами и "дробить" будет... время покажет, как оно нада, может даже каждый раз самостоятельно устанавливать желаемую "дробежку"...


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 16 Jun 2012, 18:59 
Offline

Joined: 20 Apr 2012, 16:00
Posts: 372
Location: Конотоп
Не могу понять… Помогите.
Вот допустим код из асм-программы
CPI(33); при этом регистр А =32.
Результат получается либо (-1) если резутат брать по Integer;
Либо 255, если результат брать по Byte
При проверке «Эмулятор 3000», флаг четности P выдает нулю…т.е.( если P=0 то нечетное количество единиц.)
Моя процедура вычисления выдает P =1, т.е = четное колво единиц, хоть в 255, хоть в (-1)
При положительных резутатах моя процедура работает ПРАВИЛЬНО!
А вот как быть если результ минусовых? Как правильно считать кол-во битов-единиц в ОТРИЦАТЕЛЬНОМ числе?


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 16 Jun 2012, 19:08 
Offline

Joined: 29 Mar 2012, 21:35
Posts: 115
Quote:
Как правильно считать кол-во битов-единиц в ОТРИЦАТЕЛЬНОМ числе?
Точно также, как и в положительном. Если в Е3000 есть разница, то он с ошибкой. Посмотри в моём, мой в точности соответствует реальному процессору, т.к. сверялся с реальным процессором очень хорошим тестом и разницы не было выявлено.


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 16 Jun 2012, 19:32 
Offline

Joined: 20 Apr 2012, 16:00
Posts: 372
Location: Конотоп
Quote:
Точно также, как и в положительном.
Дак а поточнее если 32 сравнить с 33 результат равен чему 255? (дак это четное колво единиц)... или если не четное тогда надо брать результ по модулю от минус единицы...
Как вообще реализована процедура установке этого флага...
у меня вот так вот
Code:
wremb:=0;
if (ResByte and 128) =128 then wremb:=wremb+1; if (ResByte and 64) =64 then wremb:=wremb+1;
if (ResByte and 32) =32 then wremb:=wremb+1; if (ResByte and 16) =16 then wremb:=wremb+1;
if (ResByte and 8) = 8 then wremb:=wremb+1; if (ResByte and 4) = 4 then wremb:=wremb+1;
if (ResByte and 2) = 2 then wremb:=wremb+1; if (ResByte and 1) = 1 then wremb:=wremb+1;
[b]if (wremb mod 2) = 0 then SetFlagP(True) else SetFlagP(False);[/b]
В чем ошибка? Исходники на Си и асме мне большого толку не дают, так как я незнаю структуры Си и для меня вот такое это сплошная абракадабра....
Quote:
RgF = i8080_flags[tmp2 = (RgA-tmp1) & 0xFF];
if (RgA < tmp1) RgF |= f_C;
if ((tmp2 ^ RgA ^ tmp1) & 0x10) RgF |= f_A;
Quote:
Если в Е3000 есть разница, то он с ошибкой.
Дело в том что этот пример (из Студии) работает одинаково ПРАВИЛЬНО и в вашем эммуляторе и в студии и в Е3000...
Quote:
Посмотри в моём, мой в точности соответствует реальному процессору, т.к. сверялся с реальным процессором очень хорошим тестом и разницы не было выявлено.
Да я вообще не пойму как вашим пользоваться... Например, как открыть файл чтобы он был сразу "на паузе"? для последующей прокрутки пошагово с самого первого байта...


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 17 Jun 2012, 14:44 
Offline

Joined: 29 Mar 2012, 21:35
Posts: 115
Quote:
если 32 сравнить с 33 результат равен чему 255? (дак это четное колво единиц)
Ну правильно, у меня mvi a,32 / cpi 33 тоже установит флаг P
Может в E3000 флаг паритета устанавливается не по результату, а по содержимому регистра A? Но это ошибка.
Quote:
у меня вот так вот
Вроде всё верно. Хотя, по таблице быстрее.
Quote:
Дело в том что этот пример (из Студии) работает одинаково ПРАВИЛЬНО и в вашем эммуляторе и в студии и в Е3000...
Если Е3000 неправильно выставляет флаг P, то одинаково работать не должно.
Quote:
Да я вообще не пойму как вашим пользоваться... Например, как открыть файл чтобы он был сразу "на паузе"? для последующей прокрутки пошагово с самого первого байта...
При желании, можно и моим пользоваться :)
Вот Zelya сделает стыковку своей Студии с моим эмулятором, тогда будет удобнее.
А пока надо делать так:
- запускаем Львов
- заходим в отладчик, идём на начало программы (которая ещё не загружена), ставим точку останова
- запускаем дальше, пишем bload"",r и выбираем нужный файл
После загрузки сработает точка останова.

Сейчас загрузка *.lvt намеренно сделана так, что сначала проходит инициализация биоса и бейсика, а затем бейсик грузит программу. Просто я не копал, что и где нужно инициализировать для запуска той или другой программы (бинарной или на васике), и откуда запускать.


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 17 Jun 2012, 17:10 
Offline

Joined: 20 Apr 2012, 16:00
Posts: 372
Location: Конотоп
Quote:
Ну правильно, у меня mvi a,32 / cpi 33 тоже установит флаг P
Хм... просмотрю позже, по вашему эмулятору ... может я чего не так досмотрел...
Quote:
Вроде всё верно. Хотя, по таблице быстрее.
Пока быстродействия хватает не хочу заморачиваться.... а там видно будет...
Хотя все основное падение быстродейстивия при выводе на экран в Битмап, точнее при его прорисовке, причем падение такое, что раздражает в корень.. :oops: :shock: Боюсь чтобы на этом у меня полный обломс не получился, т.е. что быстродействие "садится" выводом на экран, да так что оно становиться хуже оригинального львова... Вот это уж точно финиш будет... и грош цена моей среде... :oops: :shock:
Quote:
При желании, можно и моим пользоваться :)
Ну наверное... :-) Програмисты - это такие люди которые пишут программы ДЛЯ ЛЮДЕЙ! :-)
Quote:
А пока надо делать так:
Расмотрю позже... но уже по кол-ву шагов вижу, что в Е3000 это проще, и не надо точку искать начала проги...:
- запуск Е3000
- жмем "Пауза"
- открыть файл
- открыть отладчик
и в отладчике на точке старта в режиме "пауза", загруженная программа...


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 17 Jun 2012, 18:15 
Offline

Joined: 20 Apr 2012, 16:00
Posts: 372
Location: Конотоп
…Если кому интересно вот вид примеров-программ адаптированных под мою среду. Эти примеры из уроков к LvivStudio. Спасибо автору за то, что он есть! И примеры к LvivStudio тоже… :-)
Думаю, что компилятор создать для подобных (по сложности структуры) программ, сложностей особых не будет представлять, тем более Дельфи своей проверкой перед компилированием моим компилятором, мне поможет.. :-) Да и структура Паскаля, я думаю такая, что ее проще компилировать, чем асм… :-)
Команды переходов процссесора КР580 я думаю реализовывать не стоит, а постепенно переходить на вид типа «If FlagZ=False then goto m32788; // JNZ ADR | Переход при Z=0», т.е. переходить на аналоги JNZ и т.п. ,все приближая среду к языку высокого уровня… компилятор я думаю, кодить такое научим… :-)
Вот первые три примера работают правильно, «застрял» на «//Урок 5. Стек. Сравнения. Стартовое поле.» которая работает неправильно по сравнению с другими эмуляторами.
Code:
// Урок ??1 или ???2
Label m32788,m32798;
BEGIN
MVIA(0);
out_($c2);
//MVIA(35);
//STA 0BE38h	;32774
//CALL 0EBBCh – не реализовано
LXIH($5010);
LXID(63);
MVIA(8);
m32788: MVIM(255);
INXH;
MVIM(255);
DADD;
DCRA;
If FlagZ=False then goto m32788;   //  JNZ ADR  | ! Переход при  Z=0
m32798: goto m32798;
END.
Code:
//Урок 3. Метки. Переменные. Процедуры. (PCStudio)
Procedure draw;
Label draw_cycle;
begin
	LXID(63);
	MVIA(8);
draw_cycle:
        MOVMB;
	INXH;
	MOVMB;
	DADD;
	DCRA;
If FlagZ=False then goto draw_cycle;   //  JNZ ADR  | ! Переход при  Z=0
end;

Label main_cycle;
Var BORDER:Word;
BEGIN
//SetRegisterWiew(false); // вывод регистров после каждой команды
BORDER:=$0BE38;
	MVIA(0);
	out_($c2);
	MVIA(0);
	STA(BORDER);
	//CALL 0EBBCh	;	Clear screen - не реализовано
       	MVIB(255);
        LXIH($5001);
        draw;
       	MVIB(15);
	LXIH($5007);
        draw;
       	MVIB(240);
      	LXIH($500D);
        draw;
main_cycle: goto main_cycle;
END.
Code:
//Урок 4. Игровое поле. Математические операции.
Procedure draw;
Label draw_cycle;
begin
MOVAL;
RLC;
MOVLA;
MOVAH;
RLC;
MOVHA;
MVIA(64);
ADDH;
MOVHA;
LXID(63);
MVIA(8);

draw_cycle:
	MOVMB;
	INXH;
	MOVMB;
	DADD;
	DCRA;
If FlagZ=False then goto draw_cycle;   //  JNZ ADR  | ! Переход при  Z=0
end;

Label main_cycle;
Var BORDER:Word;
BEGIN
//SetRegisterWiew(false); // вывод регистров после каждой команды
BORDER:=$0BE38;
	MVIA(0);
	out_($c2);
	MVIA(0);
	STA(BORDER);
	//CALL 0EBBCh	;	Clear screen - не реализовано
       	MVIB(255);
        LXIH($5001);
	MVIH(0);
	MVIL(0);
	draw;
	MVIB(15);
	MVIH(1);
	MVIL(1);
	draw;
	MVIB(240);
	MVIH(2);
	MVIL(2);
	draw;
main_cycle: goto main_cycle;
END.

Вот эта прога-пример работает неправильно!( см.ниже)
Code:
//Урок 5. Стек. Сравнения. Стартовое поле.
Procedure draw;
Label draw_cycle;
begin
	MVIA(0);
	OUT_($C2);

	DCRL;
	DCRH;

	MOVAL;
	RLC;
	MOVLA;

	MOVAH;
	RLC;
	MOVHA;

	MVIA(64);
	ADDH;
	MOVHA;

	LXID(63);
	MVIA(8);

draw_cycle:
        MOVMB;
        INXH;
        MOVMB;
        DADD;
        DCRA;
If FlagZ=False then goto draw_cycle;   //  JNZ ADR  | ! Переход при  Z=0
        MVIA(2);//
        OUT_($C2);
end;

/// НАЧАЛО ОСНОВНОЙ ПРОГРАММЫ
Label init1,init2,init_put127,init3,init5,init4,main_cycle;
BEGIN
//SetRegisterWiew(false); // вывод регистров после каждой команды
	MVIH(33);
init1:
	MVIL(33);
init2: 	PUSHH;
	MOVAL;
	CPI(0);
If FlagZ=True  then goto init_put127;
	CPI(33);
If FlagZ=True  then goto init_put127;
	MOVAH;
	CPI(0);
If FlagZ=True  then goto init_put127;
	CPI(33);
If FlagZ=True  then goto init_put127;
	goto init3;
init_put127:
	MVIM(127);
	goto init4;
init3:
	MVIB(15);
	MOVAL;
	CPI(3);
If FlagS=True  then goto init5;   //  JM ADR  | ! Переход при  S=1
	CPI(31);
If FlagS=False then goto init5;   //  JP ADR  | ! Переход при  S=0
	MOVAH;
	CPI(3);
If FlagS=True  then goto init5;   //  JM ADR  | ! Переход при  S=1
	CPI(31);
If FlagS=False then goto init5;   //  JP ADR  | ! Переход при  S=0
	MVIB(0);
init5:
	MOVMB;
	draw;
init4:	POPH;
	DCRL;
If FlagS=False then goto init2;   //  JP ADR  | ! Переход при  S=0
	DCRH;
If FlagS=False then goto init1;   //  JP ADR  | ! Переход при  S=0
main_cycle: goto main_cycle;
END.
Все примеры с форума http://www.old-games.ru/forum/showthrea ... d4&t=50209

Для некоторых:не шаришь ты liberation, весь смак работы в такой среде, даже мнемо командами асм КР580... :lol: :wink:
... раз ты "котил бочку" на мою еще не выпущенную среду, то я видимо, в нее впишу так : If детект liberation then выход и самоуничтожение и без разговоров :lol: :P :P :P :wink:


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 17 Jun 2012, 19:18 
Offline

Joined: 29 Mar 2012, 21:35
Posts: 115
Quote:
по кол-ву шагов вижу, что в Е3000 это проще
Можно и мой эмулятор настроить так, что будет гораздо проще.
В корневом каталоге эмулятора лежит файл EMU.ext, в нём описывается способ загрузки программ с определённым расширением. Можно добавить туда загрузку, например, файлов *.lvbin:
Code:
lvbin : loader {
  config="Lvov"
  loadaddr=8000
  cmd[0].start=8000
}
Тогда файлы *.lvbin будут загружаться по адресу 8000h и оттуда-же запускаться (файл не должен иметь привычного заголовка, только сама программа). Чтобы запускать с отладкой можно использовать ключ /d, например так: EMU.exe test.lvbin /d

Однако, запуск программы без инициализации биоса имеет ряд недостатков: не инициализированы порты, служебные ячейки биоса, да и указатель стека SP.

Кстати, если в том-же каталоге, где загружаемый *.lvbin лежит ещё и листинг *.lst (с тем же именем), то он подключится автоматически, т.е. отладка будет сразу по исходному тексту!


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 17 Jun 2012, 23:17 
Offline
User avatar

Joined: 11 Aug 2008, 17:05
Posts: 1405
Location: Украина
Quote:
Для некоторых:не шаришь ты liberation, весь смак работы в такой среде, даже мнемо командами асм КР580... :lol: :wink:
... раз ты "котил бочку" на мою еще не выпущенную среду, то я видимо, в нее впишу так : If детект liberation then выход и самоуничтожение и без разговоров :lol: :P :P :P :wink:
От лица некоторых сообщаю, что наш искрометный друг получает творческий отпуск от форумных дел, дабы в целительном уединении спокойно завершить свой апокалиптический труд. По трудам их узнаете их. :D

_________________
Carthago delenda est, Carthaginem delendam esse


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 27 Jun 2012, 09:10 
Offline

Joined: 20 Apr 2012, 16:00
Posts: 372
Location: Конотоп
Выкладываю пока «топорный черновик» модуля, "Dpr(Pas)ToLV"
http://sas.forumbb.ru/viewtopic.php?id=290#p1995


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 27 Jun 2012, 10:11 
Offline
Site Admin
User avatar

Joined: 24 Jul 2008, 12:05
Posts: 1070
sas9568635

Напишите, пожалуйста, коротенькую инструкцию как им пользоваться, желательно со скриншотами. А то отсутствие информацииотпугивает, особенно тех, кто не использует Делфи.


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 27 Jun 2012, 11:03 
Offline

Joined: 20 Apr 2012, 16:00
Posts: 372
Location: Конотоп
Quote:
Напишите, пожалуйста, коротенькую инструкцию как им пользоваться, желательно со скриншотами. А то отсутствие информацииотпугивает, особенно тех, кто не использует Делфи.
Ну ты даешь.... :-)
А как можно написать коротенькую иструкции к МОДУЛЮ?.. :-) Это же не готовая программа, и не ГОТОВЫЙ язык программирования, не ГОТОВЫЙ эмулятор конце-концов... Модуль - это дополнение, Это ЧАСТЬ СРЕДЫ ПРОГРАМИРОВАНИЯ....

Ну хорошо... смеха ради...
1. Запустите среду дельфи
2. Откройте любой из примеров (Example02.dpr Example03.dpr Example04.dpr Example05.dpr
Example06.dpr)
3. Нажмите F9 - запуск, или пошаговый режим (F7, F8), при необходимости прервать запущенную программу (Ctrl+F2)...

Для создания новых програм, необходимо раположить файл DLLFP.pas и DprPasToLV.dll в каталог с новой программой прописать в проект uses DLLFP in 'DLLFP.pas'; пример (шаблон) пустой программы - Shablon.dpr

Как подключать и испльзовать модуль к другой среде, например C или C++ я этого незнаю,
так как другую среду я никогда не использовал и даже в глаза не видел.


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 27 Jun 2012, 11:11 
Offline
Site Admin
User avatar

Joined: 24 Jul 2008, 12:05
Posts: 1070
Хоть я и немножечко в курсе дел делфийских, но представьте себе, что я никогда не запускал Делфи и не знаю Паскаля. Но люблю и умею программировать для "Львова".
Распишите короткий пример пошагово. Кладем файлы туда-то, создаем такой-то проект, используя такие-то инструкции получаем "Hello word". Ну а для более глубокого изучения есть примеры.


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 27 Jun 2012, 11:20 
Offline

Joined: 20 Apr 2012, 16:00
Posts: 372
Location: Конотоп
Quote:
....особенно тех, кто не использует Делфи.
Вот и обсудите те кто не использует Дельфи как прикручивается и используется DLL-модуль-дельфи и его процедуры в ваших любимых средах программирования...
Хотя я лично думаю, что без разницы начем писанн DLL-модуль если та среда расчитана на использование их.
В дельфи как я уже писал дается так
Code:
uses   DLLFP in 'DLLFP.pas'; // Функции и процедуры Модуля DprPasToLV.dll
Это прикручиваеться файл-модуль(DLLFP.pas') содержащий название процедур модуля (DprPasToLV.dll) которые будут использоваться в Вашей программе...

Можно конечно не прикручивать и не использовать файл (DLLFP.pas), но тогда описание всех (ну либо те которые будут использованы) процедур модуля DprPasToLV.dll необходимо прописать напрямую в файл-проект-прогрмаму, а это не очень удобно. Т.е проще говоря, все содержимое файла DLLFP.pas, должно быть вместо:
Code:
uses
  DLLFP in 'DLLFP.pas'; // Функции и процедуры Модуля DprPasToLV.dll
Просмотрите файл DLLFP.pas там все функции которые можно использовать видны как на ладони, некорых есть и описание.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 215 posts ]  Go to page Previous 14 5 6 7 815 Next

Forum Games WEB Tape Loader Twitter RSS

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 5 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:
cron
Powered by phpBB® Forum Software © phpBB Limited