PC-01 Lviv

It is currently 27 Apr 2024, 15: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 1 2 3 4 515 Next
Author Message
PostPosted: 17 Sep 2012, 05:39 
Offline
User avatar

Joined: 13 Feb 2012, 15:32
Posts: 341
Location: Россия
забыл ...
за тестовый экземпляр взял Aero Cobra

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

дописано:
отловил баги , теперь вроде значения совпадают, разбираюсь с видео


Last edited by MARAT_BEST on 18 Sep 2012, 10:30, edited 1 time in total.

Top
   
PostPosted: 17 Sep 2012, 08:02 
Offline
User avatar

Joined: 13 Feb 2012, 15:32
Posts: 341
Location: Россия
что то уже выводит
пока очень медленно


Last edited by MARAT_BEST on 26 Sep 2012, 00:42, edited 1 time in total.

Top
   
PostPosted: 17 Sep 2012, 11:33 
Offline
User avatar

Joined: 11 Aug 2008, 17:05
Posts: 1405
Location: Украина
Quote:
какой можете подсказать дебагер для JavaScript чтобы можно было записывать значения переменных и массивов на диск. Стандартными средствами JavaScript запись нет.
Да, такой возможности в браузерном js нет, да нужды в ней никакой нет. Отправляйте данные ajax-запросом на сервер, а там напишите простенькую сохранялку на php/python/node.js.

_________________
Carthago delenda est, Carthaginem delendam esse


Top
   
PostPosted: 17 Sep 2012, 11:47 
Offline

Joined: 20 Apr 2012, 16:00
Posts: 372
Location: Конотоп
Quote:
в идеале я так понимаю нужно считать Byte из массива видео, преобразовать его в 4 точки(по цветам) и вывести на экран ? (вот тут я уже забыл как это делалось на львове)
Code:
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;
...............................
Вот как у меня реализовано в моем модуле, если чего непонятно - спрашивай!


Top
   
PostPosted: 17 Sep 2012, 14:47 
Offline
Site Admin
User avatar

Joined: 24 Jul 2008, 12:05
Posts: 1070
MARAT_BEST
В Javascript единственный известный мне более-менее быстрый способ отрисовки, это обращение к рисунку, как к массиву байтов. Для этого я и использую
Code:
var imgd = ctx.getImageData(0,0,256,256);
var pix = imgd.data;
В цикле, каждый байт видеопамяти раскладывается в 4 номреа цвета для 4-х пискелей, и потом во внутреннем цикле вычисляется реальный цвет, согласно полученному номеру.

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

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


Top
   
PostPosted: 17 Sep 2012, 17:19 
Offline

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

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

У меня весь экран (Львова) 256х256 подроблен на куски 8х8, при попадании выводимого пикселя в какой-то из квадратов 8х8, перечерчивается весь тот квадрат. Насколько я понял самый оптимальный способ.


Top
   
PostPosted: 17 Sep 2012, 17:51 
Offline
Site Admin
User avatar

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

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

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

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

Правда, она слишком жестока - с ассемблерными вставками. Дальше - гуглите сами :)


Top
   
PostPosted: 17 Sep 2012, 19:17 
Offline

Joined: 20 Apr 2012, 16:00
Posts: 372
Location: Конотоп
Quote:
Разбираться с Делфи я не буду
???!!!! - Да я вообще-то написал тот пост так как он по теме "Хочу написать свой эмулятор ПК-01 Львов на Delphi"...:-) т.е для MARAT_BEST если он хочет конечно...
=================
А вообще я не понимаю.... Зачем отрисовка 50 раз в сек.... У меня отрисовывает часть (8х8) экрана только во время его вывода и только то (тот 8х8) что выводится?... И все впорядке! (Это вопрос ко всем)


Top
   
PostPosted: 18 Sep 2012, 01:01 
Offline
User avatar

Joined: 13 Feb 2012, 15:32
Posts: 341
Location: Россия
Quote:
Quote:
какой можете подсказать дебагер для JavaScript чтобы можно было записывать значения переменных и массивов на диск. Стандартными средствами JavaScript запись нет.
Да, такой возможности в браузерном js нет, да нужды в ней никакой нет. Отправляйте данные ajax-запросом на сервер, а там напишите простенькую сохранялку на php/python/node.js.
:) интересный способ, как получить доступ на сервер ?

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


Top
   
PostPosted: 18 Sep 2012, 01:02 
Offline
User avatar

Joined: 13 Feb 2012, 15:32
Posts: 341
Location: Россия
Quote:
Quote:
в идеале я так понимаю нужно считать Byte из массива видео, преобразовать его в 4 точки(по цветам) и вывести на экран ? (вот тут я уже забыл как это делалось на львове)
Code:
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 !!! Спасибо !!!


Top
   
PostPosted: 18 Sep 2012, 02:41 
Offline
User avatar

Joined: 13 Feb 2012, 15:32
Posts: 341
Location: Россия
Отрисовка в Delphi достаточно быстрая.
Все функции работы с графикой просто обертки API функций.

клава заработала !!!


Last edited by MARAT_BEST on 18 Sep 2012, 10:29, edited 1 time in total.

Top
   
PostPosted: 18 Sep 2012, 09:56 
Offline
User avatar

Joined: 13 Feb 2012, 15:32
Posts: 341
Location: Россия
подшаманил цвет и так по мелочи

разбираюсь со звуком ... пока глухо как в танке (в прямом и переносном смысле) :(


Last edited by MARAT_BEST on 20 Sep 2012, 05:14, edited 1 time in total.

Top
   
PostPosted: 18 Sep 2012, 23:18 
Offline

Joined: 07 Dec 2010, 16:54
Posts: 227
Quote:
Да в Дельфи видимо тоже не из быстрых... без всяких исхитрении быстрота вывода на экран сводится на нет... Вот хорошо бы было если бы тупо перечерчивать весь экран из-зо одного пикселя и быстродествие было такое чтобы "покрывало все" .... :-) Ну это видимо фантастика... :-)
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
никаких проблем :-)
Code:
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
);


Top
   
PostPosted: 20 Sep 2012, 05:16 
Offline
User avatar

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


Top
   
PostPosted: 21 Sep 2012, 05:27 
Offline
User avatar

Joined: 13 Feb 2012, 15:32
Posts: 341
Location: Россия
Доброго времени суток.
1.начал делать деббагер
2.черно белый режим (вот таким я его и видел в детстве на телике) :lol:
3.исправлена загрузка dump
4.добавлена клавиатура (пока рисунок)


Last edited by MARAT_BEST on 25 Sep 2012, 07:28, edited 1 time in total.

Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 215 posts ]  Go to page Previous 1 2 3 4 515 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 6 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:
Powered by phpBB® Forum Software © phpBB Limited