PC-01 Lviv

It is currently 28 Apr 2024, 00:19

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 17 8 9 10 1115 Next
Author Message
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 09 Jul 2012, 10:27 
Offline
User avatar

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

_________________
Carthago delenda est, Carthaginem delendam esse


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 09 Jul 2012, 13:24 
Offline

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

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

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

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


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 09 Jul 2012, 14:12 
Offline
Site Admin
User avatar

Joined: 24 Jul 2008, 12:05
Posts: 1070
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.


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 09 Jul 2012, 15:05 
Offline

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


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 09 Jul 2012, 15:18 
Offline
Site Admin
User avatar

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


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 09 Jul 2012, 15:42 
Offline
User avatar

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

_________________
Carthago delenda est, Carthaginem delendam esse


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 09 Jul 2012, 21:13 
Offline

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

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


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 10 Jul 2012, 22:51 
Offline

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


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 11 Jul 2012, 19:09 
Offline

Joined: 20 Apr 2012, 16:00
Posts: 372
Location: Конотоп
Объясните мне пожалуйста принцип работы портов ввода /вывода… в частности порта
( Порт 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?...
Верно ли это все мной сказаннное?...


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 18 Jul 2012, 15:22 
Offline

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

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

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

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

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


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 19 Jul 2012, 21:48 
Offline

Joined: 20 Apr 2012, 16:00
Posts: 372
Location: Конотоп
sadfsdfsdaf, СПАСИБО!

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

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

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


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 20 Jul 2012, 10:41 
Offline
Site Admin
User avatar

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


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 22 Jul 2012, 12:40 
Offline

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

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


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 24 Jul 2012, 11:42 
Offline
Site Admin
User avatar

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


Top
   
 Post subject: Re: DprToLvt (PasToLvt)
PostPosted: 02 Aug 2012, 14:22 
Offline
User avatar

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

_________________
Carthago delenda est, Carthaginem delendam esse


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 215 posts ]  Go to page Previous 17 8 9 10 1115 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 4 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