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

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

Author:  liberation [ 09 Jul 2012, 10:27 ]
Post subject:  Re: DprToLvt (PasToLvt)

Quote:
там и другие тайны есть, однако.
в частности, после вывода заставки заново повторяется инициализация системы (не железо, которое программируют один раз перед этим, но распределение памяти, стек, повторно копируют бейсик в ОЗУ и т.п.)
Мож, пора уже выложить листинг стандартного ПЗУ с Вашими краткими комментариями? Потом будет уточнять детали и дорабатывать "бамажку". :D

Author:  sas9568635 [ 09 Jul 2012, 13:24 ]
Post subject:  Re: DprToLvt (PasToLvt)

Quote:
Кстати, а что там с popcornfvi такого сложного?
1. Есть адреса использующиеся одновременно как процедурный вход и как вход для условного (безусловного) перехода...
2. Некторорые части кода выглядят как процедурная часть и тот код должен заканчиваться RET (end;), но в коде (внутри процедуры) есть метки на которые переходят из других процедур (или основной программы) а также есть метки выхода из процедуры в основную программу. Вообще такое в дельфи (да и в других языках недопустимо), для понятности приведу примеры:

Procedure Proc1;
Begin
m1: ........
goto m2;
end;

BEGIN
m2:
...... Goto m1;
.... Goto Proc1;
END.

Не один из таких переходов является недопустимым! Дак это я еще приметивные примеры написал...
Что то еще есть подобное...
на асме реализовано, дак оно верно и правильно, а вот преобразовать в стуктуру паскаля непридумаешь как...
К слову, Аэрокобра, писанна грамотно! :-) Преобразовалась на УРА! Но запуск закончился прорисовкой картинки и попыткой чего-то там еще прорисовать...
видимо где-то не очень корректно преобразовал...

Author:  Zelya [ 09 Jul 2012, 14:12 ]
Post subject:  Re: DprToLvt (PasToLvt)

Quote:
Не один из таких переходов является недопустимым!
Еще как допустимы! И часто желанны, аки блудницы ;). Вот хотя бы абстрагированный простенький примерчик процедурки из моего движка:
Code:
ReadKey: 
  ....  //check key etc.
  key_up:
     ...//change Y
     ret
  key_left:
     ...//change X
     ret
  key_up_left:
     call key_up
     jmp key_left
А еще еще поинтересней места, где, например, мы вклиниваемся в середину процедуры, чтобы вместо спрайта 24х24 вывести спрайт 24х16.

Author:  sas9568635 [ 09 Jul 2012, 15:05 ]
Post subject:  Re: DprToLvt (PasToLvt)

Quote:
Еще как допустимы! И часто желанны, аки блудницы ;). Вот хотя бы абстрагированный простенький примерчик процедурки из моего движка.... А еще еще поинтересней места, где, например, мы вклиниваемся в середину процедуры...
Подожди.... Это на каком языке програмирования?.. Это ж СИ наверное?...
А я про Дельфи! Как там такие конструкции допустимы?.. Насколько я знаю, это принцип языка паскаля, что подобные конструкции недопустимы (т.е. выход из середины процедур, вход в середину процедуры) и т.д. Я к этому привык и уже так или иначе считаю это правильным, чтобы программа не была похожа на "запутанный клубок с нитками" и в ней можно былобы разобраться кому нить другому ( ну или даже самому спустя некоторое время :-) )

Author:  Zelya [ 09 Jul 2012, 15:18 ]
Post subject:  Re: DprToLvt (PasToLvt)

Quote:
Подожди.... Это на каком языке програмирования?.. Это ж СИ наверное?...
Это ж Асм, наверное ;). Зуб даю в 90% прог все так и будет. И если Ваша реализация этого не предусмотрит - Вам будет очень туго, так как ограничения железа заставляют оптимизировать все подряд, выгрызая каждый такт проца.

Author:  liberation [ 09 Jul 2012, 15:42 ]
Post subject:  Re: DprToLvt (PasToLvt)

Quote:
И если Ваша реализация этого не предусмотрит - Вам будет очень туго, так как ограничения железа заставляют оптимизировать все подряд, выгрызая каждый такт проца.
Динамическая модификация тела программы - огромное зло! Даже по меркам "Львова". Но иногда без нее действительно никуда, если поджимает быстродействие. Но лучше все-таки не доходить до таких крайностей. :wink:

Author:  sadfsdfsdaf [ 09 Jul 2012, 21:13 ]
Post subject:  Re: DprToLvt (PasToLvt)

to sas9568635:
Quote:
Это ж Асм, наверное ;). Зуб даю в 90% прог все так и будет. И если Ваша реализация этого не предусмотрит - Вам будет очень туго
и я бы ещё не советовал забывать про самомодификацию кода, это тоже будет на каждом шагу, т.к. индексных регистров в 8080 "как-бы нет".

а насчёт структурирования потока выполнения в виде дерева (с входом/выходом в начале и конце узла) или в общем виде в качестве графа - так ведь дядька Вирт не стал бы свой паскаль разрабатывать, если бы ему ассемблер нравился :-) ..... впрочем, на языке высокого уровня так тоже можно писать - погугли про SWITCH от А.Шалыто

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

Вот реализовал сегодня (правда еще не отпалировал) возможность загрузки и запуска ЛВТ-файлов (как в эмулятор)... игрушка Rick.lvt, заработала на УРА! :-) видимо не она не использует те процедуры ПЗУ.. которые у меня почему то не все работают... :-) :-) (видомо нереализованны порты).
Скажите а если Порты кроме (вывода на экран) нереализованы и загружается ПЗУ а также запускается по С000(E000) должен ли он при этом загрузиться и работать нормально?... т.е на экране все должно так же происходить?... как при загрузке нормального Львова?... вот только на нажатие клавиш не должен реагировать (ес-но) ну и звука небудет?!...

Author:  sas9568635 [ 11 Jul 2012, 19:09 ]
Post subject:  Re: DprToLvt (PasToLvt)

Объясните мне пожалуйста принцип работы портов ввода /вывода… в частности порта
( Порт C ( ввод и вывод ) - D2H ( 210 ) )
Вот как понял его работу я, Правильно ли это?
RegA:=255
Out D2
IN D2
RegA =*
* Если приходят все «1» во всех разрядах ни одна клавиша не нажата ?!....
* Если клавиша нажата то «0» приходит в тот разряд в котором нажата клавиша (а если несколько одновременно то и в остальных разрядах тоже «0» соответственно)
А вот если
RegA:=0
Out D2
IN D2
RegA =
Что тогда приходит? Какая зависимость от нажатых клавиш?...
Разряды RegA которые ( с 0 по 3) посылаемые командой Out D2 ?... остаются неизменными и возвращаются IN D2?...
Верно ли это все мной сказаннное?...

Author:  sadfsdfsdaf [ 18 Jul 2012, 15:22 ]
Post subject:  Re: DprToLvt (PasToLvt)

Quote:
Объясните мне пожалуйста принцип работы портов ввода /вывода… в частности порта D2H
все порты ВВ55 программируются один единственный раз при включении на работу в непрерывном режиме, т.е. при вводе/выводе данные непосредственно появляются на требуемых ножках.

в случае с клавиатурой собирается квадратная матрица, через резистор линии по входу подключаются на +5В, линии по выходу идут через диод (чтобы не было КЗ) и клавишу. По нажатию клавиши в узлах решётки соединяются линии входа и выхода.

А теперь "магия": если в порту выхода выставить 0, то, при нажатой клавише, произойдёт на соответствующем участке падение напряжения и по линии входа мы получим тоже 0 (иначе там всегда 1, которая будет через резистор от +5В). Так сделано, чтобы исключить электрические наводки и помехи. В принципе, схемное решение стандартное. Клавиатура опрашивается выставлением последовательно 0 на соотв. линии выхода и анализом линий входа.

Да, ты можешь выдать на линии выхода всё что угодно, хоть 0 на все разряды, но тогда ты не сможешь отличить между собой клавиши разных строк (столбцов) клавиатурной матрицы. Но, да, если надо всего лишь проверить факт нажатия любой клавиши, то так поступать можно.

(http://en.wikipedia.org/wiki/Pull-up_resistor)

Author:  sas9568635 [ 19 Jul 2012, 21:48 ]
Post subject:  Re: DprToLvt (PasToLvt)

sadfsdfsdaf, СПАСИБО!

А вот еще такой вопрос:
Каждая комнда иммет длительность в циклах.
Являеться ли цикл = 1/х секунды? Я правильно понимаю?
Далее...

Тогда команда LXI длительность в 10 циклов = 10*(1/х)сек на ее выполнение
а команда STAX длительность в 7 циклов = 10*(1/х)сек на ее выполнение

Так надо реализовывать задержку в командах?... Это грамотно будет?...

Author:  Zelya [ 20 Jul 2012, 10:41 ]
Post subject:  Re: DprToLvt (PasToLvt)

sas9568635
Quote:
Являеться ли цикл = 1/х секунды? Я правильно понимаю?
Вы понимаете правильно. Х - это частота процессора. При частоте 2,5 МГц, пауза на такт будет составлять менее миллионной доли секунды. Ни один даже самый крутой комп с самой модной средой разработки не позволит Вам "по-чесному" оперировать такими маленькими паузами. Более того, сама Делфийская программа вызывает свои методы куда дольше этих задержек.
Поэтому для эмуляторов существует следующий подход. Вы, скажем 50 раз в секунду вызываете главный метод. В нем есть переменная, отвечающая за циклы, cycles = 2 500 000/50 = 50 000. Далее идет цикл, пока cycles больше нуля выполняем команду и уменьшаем cycles на количество циклов. Вот так как-то.

Author:  sas9568635 [ 22 Jul 2012, 12:40 ]
Post subject:  Re: DprToLvt (PasToLvt)

Производил сегодня измерения быстродействия эмуляторов Е3000, Башкирия и мой втроенный в модуль DprToLvt.dll вот что у меня получилось
//Измерения скорости на игрушке AIDSJU.emu в холостом режиме (не играя) (счет времени
//в правом верхнем углу, при запуске игры)
//Колво едениц времени в игре
//Имуль/1 мин/2 мин/3мин/
//Е3000/073/145/218/
//Башкирия/081/161/214/
//МОЙ (при 2400000 в одном цикле)/078/159/238/

т.е. один цикл в команде (или как правильно выразится) должен быть (установлен) по времени
1/2400000 секунды?!...
т.е. уменя это так: SetDelay1Cycle(2400000);

Author:  Zelya [ 24 Jul 2012, 11:42 ]
Post subject:  Re: DprToLvt (PasToLvt)

Если Вы вызываете SetDelay1Cycle(2400000); каждую секунду, и там выполняете инструкций на такое же число тактов, то тогда у Вас действительно один такт 1/2400000 секунды. Обычно, кстати, вызывают чаще. Например 50 раз в секунду, чтобы перерисовывать экран с частотой 50 Гц.

Author:  liberation [ 02 Aug 2012, 14:22 ]
Post subject:  Re: DprToLvt (PasToLvt)

Тема предсказуемо заглохла, но работы тем не менее продолжаются. Специально обученный спам-робот принес нам относительно свежую сводку с фронтов борьбы за урожай:
Quote:
Об эмуляторе.
Просто написать эмулятор старого процессора (старого компьютера) не представляет никакого интереса, так как их немало написано в т.ч. для ПК-01 Львов и никого этим не удивишь, и себя любимого тоже. А вот сделать так, как я хочу, т.е. использовать Дельфи для написания программ и компиляции под ПК-01 Львов (это словно в ПК-01 установлена Дельфи и пишешь проги для нее же) вот это интересно! Вот такого еще никто не реализовывал насколько я знаю.
Почему именно ПК-01 Львов?.. – А Это мой первый компьютер. А первый компьютер ,как первая любовь, не забывается…. :-)

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