Хочу написать свой эмулятор ПК-01 Львов на Delphi
- MARAT_BEST
- Posts: 341
- Joined: 13 Feb 2012, 15:32
- Location: Россия
Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi
забыл ...
за тестовый экземпляр взял Aero Cobra
какой можете подсказать дебагер для JavaScript чтобы можно было записывать значения переменных и массивов на диск. Стандартными средствами JavaScript запись нет.
дописано:
отловил баги , теперь вроде значения совпадают, разбираюсь с видео
за тестовый экземпляр взял Aero Cobra
какой можете подсказать дебагер для JavaScript чтобы можно было записывать значения переменных и массивов на диск. Стандартными средствами JavaScript запись нет.
дописано:
отловил баги , теперь вроде значения совпадают, разбираюсь с видео
Last edited by MARAT_BEST on 18 Sep 2012, 10:30, edited 1 time in total.
- MARAT_BEST
- Posts: 341
- Joined: 13 Feb 2012, 15:32
- Location: Россия
Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi
что то уже выводит
пока очень медленно
пока очень медленно
Last edited by MARAT_BEST on 26 Sep 2012, 00:42, edited 1 time in total.
- liberation
- Posts: 1405
- Joined: 11 Aug 2008, 17:05
- Location: Украина
- Contact:
Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi
Да, такой возможности в браузерном js нет, да нужды в ней никакой нет. Отправляйте данные ajax-запросом на сервер, а там напишите простенькую сохранялку на php/python/node.js.MARAT_BEST wrote:какой можете подсказать дебагер для JavaScript чтобы можно было записывать значения переменных и массивов на диск. Стандартными средствами JavaScript запись нет.
Carthago delenda est, Carthaginem delendam esse
-
- Posts: 372
- Joined: 20 Apr 2012, 16:00
- Location: Конотоп
Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi
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;
...............................
Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi
MARAT_BEST
В Javascript единственный известный мне более-менее быстрый способ отрисовки, это обращение к рисунку, как к массиву байтов. Для этого я и использую
В цикле, каждый байт видеопамяти раскладывается в 4 номреа цвета для 4-х пискелей, и потом во внутреннем цикле вычисляется реальный цвет, согласно полученному номеру.
i8080_do_opcodes(20000000); - это хак, чтобы игрок каждый раз не лицезрел заставку
А вот почему после него не совпадают данные, я, пока, сказать не могу. Перед ним совпадают?
Насчет скорости вывода изображения. Не знаю, как в Делфи, но в большинстве языков прямые функции для битмапа чаще всего катастрофически медленны. Погуглите что-то про быстрое попиксельное изменение рисунков (чаще всего, так же как и в Javascript, будет идти работа с массивом байтов в памяти).
В Javascript единственный известный мне более-менее быстрый способ отрисовки, это обращение к рисунку, как к массиву байтов. Для этого я и использую
Code: Select all
var imgd = ctx.getImageData(0,0,256,256);
var pix = imgd.data;
i8080_do_opcodes(20000000); - это хак, чтобы игрок каждый раз не лицезрел заставку

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


==============
По сути:
Я делаю вывод вот так вот.
TMainForm = class(TForm)
MainForm.Canvas.Draw(……);
У меня весь экран (Львова) 256х256 подроблен на куски 8х8, при попадании выводимого пикселя в какой-то из квадратов 8х8, перечерчивается весь тот квадрат. Насколько я понял самый оптимальный способ.
Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi
sas9568635
Оптимальный вариант это 50 раз в секудну обновлять всю картинку по видеопамяти. Если скорость не позволяет, то можно предусмотреть frameskip - пропускать отрисовку нескольких кадров.
Насчет тормознутости работы с битмапом, как я уже писал, это классическая проблема. Каждый язык имеет свое решение (для Javascript вы уже видели). Разбираться с Делфи я не буду, первый линк Гугла дал такую статейку:
http://www.delphimaster.ru/articles/pixels/
Правда, она слишком жестока - с ассемблерными вставками. Дальше - гуглите сами
Оптимальный вариант это 50 раз в секудну обновлять всю картинку по видеопамяти. Если скорость не позволяет, то можно предусмотреть frameskip - пропускать отрисовку нескольких кадров.
Насчет тормознутости работы с битмапом, как я уже писал, это классическая проблема. Каждый язык имеет свое решение (для Javascript вы уже видели). Разбираться с Делфи я не буду, первый линк Гугла дал такую статейку:
http://www.delphimaster.ru/articles/pixels/
Правда, она слишком жестока - с ассемблерными вставками. Дальше - гуглите сами

-
- Posts: 372
- Joined: 20 Apr 2012, 16:00
- Location: Конотоп
Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi
???!!!! - Да я вообще-то написал тот пост так как он по теме "Хочу написать свой эмулятор ПК-01 Львов на Delphi"...Zelya wrote:Разбираться с Делфи я не буду

=================
А вообще я не понимаю.... Зачем отрисовка 50 раз в сек.... У меня отрисовывает часть (8х8) экрана только во время его вывода и только то (тот 8х8) что выводится?... И все впорядке! (Это вопрос ко всем)
- MARAT_BEST
- Posts: 341
- Joined: 13 Feb 2012, 15:32
- Location: Россия
Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi
liberation wrote:Да, такой возможности в браузерном js нет, да нужды в ней никакой нет. Отправляйте данные ajax-запросом на сервер, а там напишите простенькую сохранялку на php/python/node.js.MARAT_BEST wrote:какой можете подсказать дебагер для JavaScript чтобы можно было записывать значения переменных и массивов на диск. Стандартными средствами JavaScript запись нет.

PS.в принципе уже не нужно, так отдебагерил

- MARAT_BEST
- Posts: 341
- Joined: 13 Feb 2012, 15:32
- Location: Россия
Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi
То что дохтур прописал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; ...............................

- MARAT_BEST
- Posts: 341
- Joined: 13 Feb 2012, 15:32
- Location: Россия
Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi
Отрисовка в Delphi достаточно быстрая.
Все функции работы с графикой просто обертки API функций.
клава заработала !!!
Все функции работы с графикой просто обертки API функций.
клава заработала !!!
Last edited by MARAT_BEST on 18 Sep 2012, 10:29, edited 1 time in total.
- MARAT_BEST
- Posts: 341
- Joined: 13 Feb 2012, 15:32
- Location: Россия
Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi
подшаманил цвет и так по мелочи
разбираюсь со звуком ... пока глухо как в танке (в прямом и переносном смысле)
разбираюсь со звуком ... пока глухо как в танке (в прямом и переносном смысле)

Last edited by MARAT_BEST on 20 Sep 2012, 05:14, edited 1 time in total.
-
- Posts: 227
- Joined: 07 Dec 2010, 16:54
Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi
http://msdn.microsoft.com/en-us/library ... 85%29.aspxsas9568635 wrote:Да в Дельфи видимо тоже не из быстрых... без всяких исхитрении быстрота вывода на экран сводится на нет... Вот хорошо бы было если бы тупо перечерчивать весь экран из-зо одного пикселя и быстродествие было такое чтобы "покрывало все" ....Ну это видимо фантастика...
никаких проблем

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
);
- MARAT_BEST
- Posts: 341
- Joined: 13 Feb 2012, 15:32
- Location: Россия
Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi
Изменил вывод на экран - стало намного быстрее
Сделал Reset
Сделал загрузку LVT бинарных , basic и и дампов
и так по мелочи
Сделал Reset
Сделал загрузку LVT бинарных , basic и и дампов
и так по мелочи
- MARAT_BEST
- Posts: 341
- Joined: 13 Feb 2012, 15:32
- Location: Россия
Re: Хочу написать свой эмулятор ПК-01 Львов на Delphi
Доброго времени суток.
1.начал делать деббагер
2.черно белый режим (вот таким я его и видел в детстве на телике)
3.исправлена загрузка dump
4.добавлена клавиатура (пока рисунок)
1.начал делать деббагер
2.черно белый режим (вот таким я его и видел в детстве на телике)

3.исправлена загрузка dump
4.добавлена клавиатура (пока рисунок)
Last edited by MARAT_BEST on 25 Sep 2012, 07:28, edited 1 time in total.
Who is online
Users browsing this forum: No registered users and 1 guest