 |
nedoPC.orgElectronics hobbyists community established in 2002 |
 |
Author |
Message |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|

Эмулятор «Специалист» на JavaВ принципе его как такового не было...  И его так бы и не было, если бы я его не написал. Код вставки Java-эмулятора в HTML-документ Исходники доступны ЗДЕСЬ. К действию меня сподвиг вот этот довольно давно существующий проект: Jasper - ZX Spectrum Emulator by Adam Davidson & Andrew Pollardhttp://www.liaquay.co.uk/spectrum/index.html Джентельмены Adam Davidson & Andrew Pollard люди не жадные и исходников своих не прятали. Исходники и сейчас доступны здесь: The source code is available online from http://www.odie.demon.co.uk/spectrum/jasp1_1j.zip. The AMDProgressBar class was written by Adam Doppelt.(специально проверил). Исходники весьма понятны и очень мне помогли при эмуяции ZX Spectrum на платформе J2M сотовых телефонов. Задача очень культурно и неглупо разбита на классы: Z80.class - эмуляция процессора; Spectrum.class - эмуляция ZX Spectrum; Jasper.class - интерфейс с браузером и др.; AMDProgressBar.class - полоска внизу, позволяет регулировать скорость эмуляции и др., в принципе без неё можно обойтись, поправив коды. Код HTML совершенно прост: Код HTML |  |  |  | Code: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <!-- saved from url=(0046)http://www.spectrum.lovely.net/ --><HTML><HEAD><TITLE>ZX Spectrum Emulator</TITLE> <META content="text/html; charset=windows-1251" http-equiv=Content-Type> <META content="MSHTML 5.00.2614.3500" name=GENERATOR></HEAD> <BODY bgColor=black link=red text=yellow vLink=lightgreen> <CENTER> <P><IMG alt="Coloured Line" src="ZX_Spectrum.files/linerain.gif"></P></CENTER> <CENTER> <H1>«Специалист» Emulator</H1> <CENTER> <P><IMG alt="Coloured Line" src="ZX_Spectrum.files/linerain.gif"></P></CENTER> <CENTER> <TABLE> <TBODY> <TR> <TD> <TABLE border=1> <TBODY> <TR> <TD><APPLET code=Jasper.class height=256 width=384> <PARAM NAME="snapshot" VALUE="DTE"> <PARAM NAME="sleepHack" VALUE="5"> <PARAM NAME="code" VALUE="Jasper.class"> <PARAM NAME="height" VALUE="256"> <PARAM NAME="width" VALUE="384"> <p>Sorry, this browser is not Java(tm) enabled.</p><p>It either cannot run Java(tm) applets, or the running of applets is currently disabled in your browser.</p></APPLET> </TD></TR></TBODY></TABLE> <TD align=left vAlign=top><PRE><B> Down To Earth</B>
Left Q,E,T,U,O Right W,R,Y,I,P Jump SPACE </PRE></TD></TR></TBODY></TABLE></CENTER> <CENTER> <P><IMG alt="Coloured Line" src="ZX_Spectrum.files/linerain.gif"></P></CENTER> </BODY></HTML> |  |  |  |  |
И у меня всё это запросто работало под IE 5.0 без всяких претензий и с тройным запасом по скорости. Этого никак не скажешь о сегодняшних эмуляторах на JS: http://code.google.com/p/radio86/и вдохновляющий прототип: http://jsspeccy.zxdemo.org/И броузеры - им не броузеры, и скорости эмуляции как у спринтерских черепах... Поскольку « Специалист» по идеологии очень близок к « ZX Spectrum», мне хотелось написать его эмулятор самому. По моим прикидкам это всё вполне осуществимо на основе имеющихся исходников.  Если Ленин хотел реорганизовать рабкрин, то здесь придётся в основном реорганизовать экран и карту памяти. Вижу я, что всё по жизни сам не успеешь - возможно кому-то этот проект будет интересен. PS. Идеи глупо держать под подушкой, там они гниют и тухнут. Хороший слоган!: http://easy-coding.blogspot.com/ Поэтому, кому надо - вот исходники «Специалиста» на Java.
Last edited by Lavr on 03 Feb 2013 08:09, edited 19 times in total.
|
13 Apr 2011 07:13 |
|
 |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Интересно, что события клавиш-модификаторов ALT, CONTROL, SHIFT не поступают в окно Java-апплета... никак... Ага... вот и люди тоже жалуются...
http://forums.devarticles.com/javascript-development-22/keypress-event-shift-key-specifically-in-mozilla-3044.html
|
28 Apr 2011 12:26 |
|
 |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 21369 Location: Silicon Valley
|
 |  |  |  | Lavr wrote: Напомните, куда в обычной Java идёт вывод: только в отладчик чтоль? В J2ME я этот вывод юзал для контроля параметров в отладке, а сейчас приходится заменять на: - вывод в статусную строку... |  |  |  |  |
угу - стандартный поток вывода в апплете никуда не идёт, если в браузере апплет запущен - так что только showStatus...
по поводу клавиш-модификаторов - на то они и клавиши модификаторы, чтобы поступать ВМЕСТЕ с основной клавишей
и потом ты ссылаешься на форум по JavaScript - это несколько другое
приведи полный кусок кода - что ты пытаешься сделать, а то я с ходу не врубаюсь что за doKey у тебя такой
|
28 Apr 2011 19:52 |
|
 |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А вот тут уже: showMessage( - это вывод в панельку апплета AMDProgressBarВот и у мужика код типичный: хотя и JavaScript, но сути это не меняет...
Но "эффект" одинаков и в Опере и в ИЕ...
PS. Это вобщем-то непринципиально, но не даёт мне потестить прицепленный к "Спектруму" ВВ55 через randomise usr XXXXXX, где XXXXX - моя подпрограмма...
|
29 Apr 2011 01:56 |
|
 |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
И кстати говоря, компилятор у меня ругается на метод handleEvent( Event e ) как на устаревший ( Deprecated).
Решил поискать, на что же его заменили... Нет - так и советуют юзать его...
http://www.javable.com/javaworld/08_96/01/Java и обработка событийС другой стороны в документе Deprecated List (Java 2 Platform SE v1.4.2) написано:
Но processEvent(AWTEvent) компилятор навовсе не хочет хавать никак, вываливаясь с ошибкой...
Чевойт, мне кажецца компиллер меня в заблуждение вводит неподецки... это ж не одно и то же... 
|
29 Apr 2011 02:57 |
|
 |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Shaos, похоже на потерю фокуса ввода Канвасом из-за браузера.
Переписал тест клавиш вот так:
Модификаторы отражаются как 1, 2 и 8... но порой пропадают... Не пойму закономерности. PS. Похоже вот на что: нажимаю Alt + [Key]... Нажатый Alt, ещё без [Key] браузер считает относящимся к нему, а когда нажат [Key] - то фокус ввода уже у браузера и апплет Alt + [Key] не получает... Хотя когда получает - пауза чтоль короче между Alt и [Key]... не понял пока...//------------------------------------------------------------------------------------ Я в принципе догадался... но смутила меня книга Фролова " Программирование на Java":
Бедняжки начинающие программёры ничего не увидят? 
|
29 Apr 2011 03:43 |
|
 |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Так обработчик-то на эти события один и тот-же. Он модификаторы печатает, когда они приходят.
Так, собственно, и отслеживал, как видно по коду.
Подозреваю, что фокус ввода отслеживает и броузер как раз по модификаторам...
Очень похоже на правду т.к. если не нажать [Key], а Alt - отпустить, браузер ставит фокус в строку меню, а в строке статуса пишет сообщение " Команды работы с выделенными объектами".
Фокус ввода можно вернуть в апплет только мышью. Похоже браузер приоритетно отслеживает свои горячие клавиши...
Неприятный эффект. Ввести чтоль индикатор потери фокуса ввода в апплет...
Но тест эмуляции ВВ55 заставил работать.
Теперь свои ошибки надо выловить...
|
29 Apr 2011 04:57 |
|
 |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 21369 Location: Silicon Valley
|
а - видимо специальные коды для винды (или приложения) перехватываются системой
|
29 Apr 2011 06:38 |
|
 |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
"Специ-Spectrum"
Вот такой гибрид "Специалист"-а и "ZX-Spectrum"-а у меня сейчас работает
при отладке эмуляции параллельного порта 580ВВ55.
"ZX-Spectrum" стартует по "Spectrum"овски, после чего командой
randomize usr 49152 (-> 0C000H) управление передаётся
на старт Монитора "Специалист"-а.
Порты при отладке выводятся в служебную строку .
Текстовая панель сверху отображает дополнительную информацию по вводу-выводу.
В Мониторе "Специалист"-а перехвачена функция вывода на экран - 0C037H и
перенаправлена в ПЗУ "ZX-Spectrum"-а ( RST 10H),
так что отладка параллельного порта 580ВВ55 пойдёт при выводе контекста "Специалист"-а
на экран "ZX-Spectrum"-а функциями "ZX-Spectrum"-а, если всё склеится корректно...
PS. Неприятная матрица у "Специалиста" для эмуляции - либо русские символы на месте, тогда английские не там, либо наоборот. Для игр более важнО взаимное расположение клавиш... 
|
29 Apr 2011 12:01 |
|
 |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Всё "склеилось" корректно и на удивление заработало:
Пришлось подправить патч Монитора "Специалист"-а по имитации функции вывода на экран - 0C037H:
Настройку канала экрана вынес на адрес 0C000H:
Это достаточно сделать 1 раз.
Может HardWareMan знает зачем в функции 0C818H (вывод строки до 00H) каждый
символ сопровождают кодами 7FH, 08H? 08H - ещё куда ни шло, но что делает 7FH - не знаю.
" ZX-Spectrum" понимает этот код как "(с)"
Также вычистил русские символы сообщений Монитора - "ZX-Spectrum" их не любит...
Прикольный гибрид...  я думал по жизни сделать "Специалист" с имитацией
экрана "ZX-Spectrum" и переключением с экраном "Специалист"-а, но...
Над отладкой порта ВВ55 работаю...
|
29 Apr 2011 14:57 |
|
 |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Понятно, только если быть точным, ты, вероятно, имел ввиду 08H - "курсор на 1 позицию влево"?
Поскольку "возврат каретки" - термин устоявшийся, и обозначает конкретно 0DH.
|
30 Apr 2011 04:10 |
|
 |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А как под JAVA узнать раскладку клаваиатуры пользователя? Чтоб не получилось двух переключателей "РУС/ЛАТ" в апплете и браузере...
Один метод в Инете я нашел, но что-то это несколько не то, мне кажется, да и крупноват по сравнению с ВИН-АПИ, скажем:
|
30 Apr 2011 08:39 |
|
 |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 21369 Location: Silicon Valley
|
там суть в двух строчках - они просто проверяют текущий язык в поле ввода
у тебя это не будет работать как надо во всех случаях, т.к. например запускающий твой эмуль может вообще не иметь русской раскладки, а скажем иметь японскую - и что, теперь ему нельзя русские буквы в эмуль вводить?
просто принимай коды клавиш и сам их транслируй в русский язык по состоянию некоего флага, который меняется по нажатию некоторой кнопки
|
30 Apr 2011 09:39 |
|
 |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Это понятно, только отслеживать я хочу "английскую" и "неанглийскую". Шевцов у себя
хорошо учёл в эмуляторе, что либо русские символы на месте, тогда английские не там,
либо наоборот. Для игр более важнО взаимное расположение клавиш...
Если два переключения "РУС/ЛАТ" в компьютере и эмуляторе - это приводит к неприятным
эффектам...
Поэтому хотелось отследить переключение. Ну в принципе это действительно можно
отслеживать по кодам символов, только java, мне помнится, работает в Уникоде...
Это затруднит обработку нац.символов. Я отслежу русские, а другие - не отследятся.
В "Спектруме" - хорошо, отслеживают только первые 127 символов.
|
30 Apr 2011 11:55 |
|
 |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Джентльмены, если вас конечно не затруднит - протестируйте вот здесь
он-лайн версию JX-Speccy со звуком на повод качества звука:
http://www.gameszoo.net/jxspeccy/?mn=examples
У меня звук прерывистый и отвратительный, но может это из-за низкой
тактовой ноутбука? Если звук и у вас отвратителен - он отключается
тычком мыши в экранчик JX-Speccy и нажатием F9.
Заинтересовало - пока я 580ВВ55 эмулирую, может сразу звук приделать,
раз уж исходники там не жадничают...
|
02 May 2011 04:14 |
|
|
Who is online |
Users browsing this forum: No registered users and 2 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
|
|