Хочу написать свой эмулятор ПК-01 Львов на Delphi

Все об эмуляции ПК-01 "Львов" на современных платформах
User avatar
MARAT_BEST
Posts: 341
Joined: 13 Feb 2012, 15:32
Location: Россия

Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi

Post by MARAT_BEST »

забыл ...
за тестовый экземпляр взял Aero Cobra

какой можете подсказать дебагер для JavaScript чтобы можно было записывать значения переменных и массивов на диск. Стандартными средствами JavaScript запись нет.

дописано:
отловил баги , теперь вроде значения совпадают, разбираюсь с видео
Last edited by MARAT_BEST on 18 Sep 2012, 10:30, edited 1 time in total.
User avatar
MARAT_BEST
Posts: 341
Joined: 13 Feb 2012, 15:32
Location: Россия

Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi

Post by MARAT_BEST »

что то уже выводит
пока очень медленно
Last edited by MARAT_BEST on 26 Sep 2012, 00:42, edited 1 time in total.
User avatar
liberation
Posts: 1405
Joined: 11 Aug 2008, 17:05
Location: Украина
Contact:

Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi

Post by liberation »

MARAT_BEST wrote:какой можете подсказать дебагер для JavaScript чтобы можно было записывать значения переменных и массивов на диск. Стандартными средствами JavaScript запись нет.
Да, такой возможности в браузерном js нет, да нужды в ней никакой нет. Отправляйте данные ajax-запросом на сервер, а там напишите простенькую сохранялку на php/python/node.js.
Carthago delenda est, Carthaginem delendam esse
sas9568635
Posts: 372
Joined: 20 Apr 2012, 16:00
Location: Конотоп

Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi

Post by sas9568635 »

MARAT_BEST wrote:в идеале я так понимаю нужно считать Byte из массива видео, преобразовать его в 4 точки(по цветам) и вывести на экран ? (вот тут я уже забыл как это делалось на львове)

Code: Select all

const Color_:array[0..3] of Tcolor=(clBlack,clGreen,clBlue,clRed);// для соответствия цветов с паинт
...............................

Procedure WriteVRAM(addr_:word;b:Byte);// запись ( воспроиз на экран ЭКРАННОГО ОЗУ
Var pix1,pix2,pix3,pix4:byte;
x,y:Byte;
wremb:byte;
...............................

 pix1:=0;pix2:=0;pix3:=0;pix4:=0;
if (b and 128)=128 then pix1:=pix1+1; if (b and 8)=8 then pix1:=pix1+2;
if (b and 64)=64 then pix2:=pix2+1; if (b and 4)=4 then pix2:=pix2+2;
if (b and 32)=32 then pix3:=pix3+1; if (b and 2)=2 then pix3:=pix3+2;
if (b and 16)=16 then pix4:=pix4+1; if (b and 1)=1 then pix4:=pix4+2;
...............................
Вот как у меня реализовано в моем модуле, если чего непонятно - спрашивай!
User avatar
Zelya
Site Admin
Posts: 1071
Joined: 24 Jul 2008, 12:05

Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi

Post by Zelya »

MARAT_BEST
В Javascript единственный известный мне более-менее быстрый способ отрисовки, это обращение к рисунку, как к массиву байтов. Для этого я и использую

Code: Select all

var imgd = ctx.getImageData(0,0,256,256);
var pix = imgd.data;
В цикле, каждый байт видеопамяти раскладывается в 4 номреа цвета для 4-х пискелей, и потом во внутреннем цикле вычисляется реальный цвет, согласно полученному номеру.

i8080_do_opcodes(20000000); - это хак, чтобы игрок каждый раз не лицезрел заставку :) А вот почему после него не совпадают данные, я, пока, сказать не могу. Перед ним совпадают?

Насчет скорости вывода изображения. Не знаю, как в Делфи, но в большинстве языков прямые функции для битмапа чаще всего катастрофически медленны. Погуглите что-то про быстрое попиксельное изменение рисунков (чаще всего, так же как и в Javascript, будет идти работа с массивом байтов в памяти).
sas9568635
Posts: 372
Joined: 20 Apr 2012, 16:00
Location: Конотоп

Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi

Post by sas9568635 »

Zelya wrote:Не знаю, как в Делфи, но в большинстве языков прямые функции для битмапа чаще всего катастрофически медленны.

Да в Дельфи видимо тоже не из быстрых... без всяких исхитрении быстрота вывода на экран сводится на нет... Вот хорошо бы было если бы тупо перечерчивать весь экран из-зо одного пикселя и быстродествие было такое чтобы "покрывало все" .... :-) Ну это видимо фантастика... :-)
==============
По сути:
Я делаю вывод вот так вот.
TMainForm = class(TForm)
MainForm.Canvas.Draw(……);

У меня весь экран (Львова) 256х256 подроблен на куски 8х8, при попадании выводимого пикселя в какой-то из квадратов 8х8, перечерчивается весь тот квадрат. Насколько я понял самый оптимальный способ.
User avatar
Zelya
Site Admin
Posts: 1071
Joined: 24 Jul 2008, 12:05

Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi

Post by Zelya »

sas9568635

Оптимальный вариант это 50 раз в секудну обновлять всю картинку по видеопамяти. Если скорость не позволяет, то можно предусмотреть frameskip - пропускать отрисовку нескольких кадров.

Насчет тормознутости работы с битмапом, как я уже писал, это классическая проблема. Каждый язык имеет свое решение (для Javascript вы уже видели). Разбираться с Делфи я не буду, первый линк Гугла дал такую статейку:

http://www.delphimaster.ru/articles/pixels/

Правда, она слишком жестока - с ассемблерными вставками. Дальше - гуглите сами :)
sas9568635
Posts: 372
Joined: 20 Apr 2012, 16:00
Location: Конотоп

Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi

Post by sas9568635 »

Zelya wrote:Разбираться с Делфи я не буду
???!!!! - Да я вообще-то написал тот пост так как он по теме "Хочу написать свой эмулятор ПК-01 Львов на Delphi"...:-) т.е для MARAT_BEST если он хочет конечно...
=================
А вообще я не понимаю.... Зачем отрисовка 50 раз в сек.... У меня отрисовывает часть (8х8) экрана только во время его вывода и только то (тот 8х8) что выводится?... И все впорядке! (Это вопрос ко всем)
User avatar
MARAT_BEST
Posts: 341
Joined: 13 Feb 2012, 15:32
Location: Россия

Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi

Post by MARAT_BEST »

liberation wrote:
MARAT_BEST wrote:какой можете подсказать дебагер для JavaScript чтобы можно было записывать значения переменных и массивов на диск. Стандартными средствами JavaScript запись нет.
Да, такой возможности в браузерном js нет, да нужды в ней никакой нет. Отправляйте данные ajax-запросом на сервер, а там напишите простенькую сохранялку на php/python/node.js.
:) интересный способ, как получить доступ на сервер ?

PS.в принципе уже не нужно, так отдебагерил :D
User avatar
MARAT_BEST
Posts: 341
Joined: 13 Feb 2012, 15:32
Location: Россия

Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi

Post by MARAT_BEST »

sas9568635 wrote:
MARAT_BEST wrote:в идеале я так понимаю нужно считать Byte из массива видео, преобразовать его в 4 точки(по цветам) и вывести на экран ? (вот тут я уже забыл как это делалось на львове)

Code: Select all

const Color_:array[0..3] of Tcolor=(clBlack,clGreen,clBlue,clRed);// для соответствия цветов с паинт
...............................

Procedure WriteVRAM(addr_:word;b:Byte);// запись ( воспроиз на экран ЭКРАННОГО ОЗУ
Var pix1,pix2,pix3,pix4:byte;
x,y:Byte;
wremb:byte;
...............................

 pix1:=0;pix2:=0;pix3:=0;pix4:=0;
if (b and 128)=128 then pix1:=pix1+1; if (b and 8)=8 then pix1:=pix1+2;
if (b and 64)=64 then pix2:=pix2+1; if (b and 4)=4 then pix2:=pix2+2;
if (b and 32)=32 then pix3:=pix3+1; if (b and 2)=2 then pix3:=pix3+2;
if (b and 16)=16 then pix4:=pix4+1; if (b and 1)=1 then pix4:=pix4+2;
...............................
Вот как у меня реализовано в моем модуле, если чего непонятно - спрашивай!
То что дохтур прописал :D !!! Спасибо !!!
User avatar
MARAT_BEST
Posts: 341
Joined: 13 Feb 2012, 15:32
Location: Россия

Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi

Post by MARAT_BEST »

Отрисовка в Delphi достаточно быстрая.
Все функции работы с графикой просто обертки API функций.

клава заработала !!!
Last edited by MARAT_BEST on 18 Sep 2012, 10:29, edited 1 time in total.
User avatar
MARAT_BEST
Posts: 341
Joined: 13 Feb 2012, 15:32
Location: Россия

Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi

Post by MARAT_BEST »

подшаманил цвет и так по мелочи

разбираюсь со звуком ... пока глухо как в танке (в прямом и переносном смысле) :(
Last edited by MARAT_BEST on 20 Sep 2012, 05:14, edited 1 time in total.
sadfsdfsdaf
Posts: 227
Joined: 07 Dec 2010, 16:54

Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi

Post by sadfsdfsdaf »

sas9568635 wrote:Да в Дельфи видимо тоже не из быстрых... без всяких исхитрении быстрота вывода на экран сводится на нет... Вот хорошо бы было если бы тупо перечерчивать весь экран из-зо одного пикселя и быстродествие было такое чтобы "покрывало все" .... :-) Ну это видимо фантастика... :-)
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
никаких проблем :-)

Code: Select all

int SetDIBitsToDevice(
  __in  HDC hdc,
  __in  int XDest,
  __in  int YDest,
  __in  DWORD dwWidth,
  __in  DWORD dwHeight,
  __in  int XSrc,
  __in  int YSrc,
  __in  UINT uStartScan,
  __in  UINT cScanLines,
  __in  const VOID *lpvBits,
  __in  const BITMAPINFO *lpbmi,
  __in  UINT fuColorUse
);
User avatar
MARAT_BEST
Posts: 341
Joined: 13 Feb 2012, 15:32
Location: Россия

Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi

Post by MARAT_BEST »

Изменил вывод на экран - стало намного быстрее
Сделал Reset
Сделал загрузку LVT бинарных , basic и и дампов
и так по мелочи
User avatar
MARAT_BEST
Posts: 341
Joined: 13 Feb 2012, 15:32
Location: Россия

Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi

Post by MARAT_BEST »

Доброго времени суток.
1.начал делать деббагер
2.черно белый режим (вот таким я его и видел в детстве на телике) :lol:
3.исправлена загрузка dump
4.добавлена клавиатура (пока рисунок)
Last edited by MARAT_BEST on 25 Sep 2012, 07:28, edited 1 time in total.
Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest