«Специалист» на Java

Обсуждение советского компьютера Фахiвець / Специалист и его развитие

Moderator: Lavr

User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Раскладка "Специалиста"

Post by Lavr »

Эти 74 кнопки ещё в реальном "Специалисте" меня допекли...
Разложил матрицу на клавиатуру IBM вот так (кликабельно):
Image
Цветом - символы "Специалиста". [Kbd 0/1] - смена раскладок.
[Shift-HP] пока не знаю, смогу ли отловить реальный Shift-модификатор
в виде события отдельно. Вроде есть такой приём - попробую...
Готов изловить все камни и замечания...
Чертов Юникод - весьма неудобный для табличных перекодировок... :(

HardWareMan, если я тебя правильно понял (http://www.nedopc.org/nedopc/upload/SpeZHW.pas) -
ты часть кнопок разложил на NumPad ?
viewtopic.php?t=8154&postdays=0&postorder=asc&start=60

ЗЫ. СТР задублировал - СТР на ДЕЛ удобнее (по опыту), чем на Ф12.
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Lavr wrote:Чертов Юникод - весьма неудобный для табличных перекодировок...
Затейливо до безобразия завешан Юникод на служебные клавиши... :o

Code: Select all

   <PrtScr>-не выдаёт кода;

     <Home>-Code: 3E8h;
      <End>-Code: 3E9h;
     <PgUp>-Code: 3EAh;
     <PgDn>-Code: 3EBh;
     < Up >-Code: 3ECh;
     <Down>-Code: 3EDh;
     <Left>-Code: 3EEh;
    <Right>-Code: 3EFh;
       <F1>-Code: 3F0h;
       <F2>-Code: 3F1h;
       <F3>-Code: 3F2h;
       <F4>-Code: 3F3h;
       <F5>-Code: 3F4h;
       <F6>-Code: 3F5h;
       <F7>-Code: 3F6h;
       <F8>-Code: 3F7h;
       <F9>-Code: 3F8h;
      <F10>-Code: 3F9h;
      <F11>-Code: 3FAh;
      <F12>-Code: 3FBh;
       ???        3FCh;-<PrtScr>???
  <ScrLock>-Code: 3FDh; + Shift = <NunLock>-Code: 3FFh
 <CapsLock>-Code: 3FEh
    <Pause>-Code: 400h;
   <Insert>-Code: 401h = [ Ё ]!;
(Совпадает с русской [ Ё ]!)
   <Delete>-Code: 7Fh ;
<Backspace>-Code: 08h; + RAlt = Code: 7Fh-<Delete>;
      <Esc>-Code: 1Bh; + Shift = Code: FFFFh
    <Enter>-Code: 0Ah;
      <Tab>-не выдаёт кода!;
(Хотя в Jasper: <Tab>-E MODE!)

<Shift>-mod=1 (оба);
 <Ctrt>-mod=2 (оба);
 <LAlt>-mod=8;
 <RAlt>-mod=10
PS. Через Hashtable что-ли коды в состояние матрицы переводить...
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Итак - эмуляция К580ВВ55 в среде Спектрума заработала!!!

Image

В принципе - прикольная вещь: "Специалист" с экраном "Спектрума"!
Затейливо, что оба работают. Когда выход за экран - "Спектрум"
предлагает: "scroll?". :lol:
Порт потестирую на баги и займусь переносом экрана на 9000Н.

Натолкнула меня эта поделка по пути на мысль затейливую...
viewtopic.php?t=9518

PS. Нажатие модификаторов отдельно от клавиш кодов, похоже, отследить
независимо нельзя. :-? Так что 'Shift' как отдельный "НР" в "Спеце" работать
не будет. И кодировка Юникод неудобна, в отличие от скан-кода клавиши.
Удивило, что int у JAVA 32-битый. :o Я это как-то подзабыл...
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Альфа-версия эмулятора "Специалист"

Post by Lavr »

Альфа-версия эмулятора "Специалист" на JAVA неожиданно заработала с первого
пинка без мучений ошибок и отладки.

Image

Карта памяти от оригинального Волкова. Монитор - Загрузчик + МК.
Контроллер цвета от Шевцова (0FFF8h). Под такую конфигурацию цветных
игрушек у меня нет - попробовал что под руку попало:

Image

Бордюр оставил как признак фокуса ввода окна: желтый - фокус потерян
и надпись с призывом кликнуть в экран. Зелёный - фокус ввода в окне
эмулятора.

Image

Есть возможность бордюр отключать и оставить окно эмулятора в оригинальный
размер (а можно - удвоенный по осям).

Image

Будет время - потестирую внимательнее, всё ж Z80 - в Волковском "Спеце" -
это некоторая экзотика... (за что и люблю эмуляторы) :wink:
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

«Специалист» со звуком

Post by Lavr »

Джентльмены, если вас, конечно, не затруднит, ещё раз прошу - протестируйте вот здесь
он-лайн версию JX-Speccy со звуком на повод качества звука:
http://www.gameszoo.net/jxspeccy/?mn=examples
У меня звук прерывистый и отвратительный.

В аналогичной ситуации вот здесь:
http://play.80snostalgia.com/index.php? ... miner.html
звук мне кажется более ровным и лучшим по качеству.

Мне надо как-то определиться - какой приделать «Специалисту» звук.

PS. Если вторая ссылка не запустится отсюда, то вот здесь:
http://play.80snostalgia.com/index.php? ... ent&id=176
выбрать: 25. MANIC MINER (Bug-Byte)
ткнуть мышью в экран и нажать пробел...
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Spetsialist v1.1

Post by Lavr »

Обновил эмуятор "Специалист" на Java до версии v1.1.

Вычистил некоторые глюки эмуляции клавиатуры, но, вероятно, не все.
Надо бы потестировать хоть тестом Рюмика хоть другим, поскольку в
играх глюки клавиатуры наблюдаются...

Но не во всех, в некоторых исходные клавиши управления не совсем
привычны... :wink:

Выложил также одну новую программу REDGRAF.RKS - это по сути "два
в одном" флаконе, или даже "три в одном": Васик от Волкова с
графическими расширениями и Графическим Редактором со всеми
патчами.

По загрузке стартует Васик, и кто хочет - может им пользоваться.
Но если сразу сделать сброс, и передать управление через G2000,
то получим Графический Редактор от Волкова.

Image

Мне он дюже нравился некоторой своей необычностью...

Графический Редактор можно запустить из самого Васика по адресу
8192 (2000Н), только вот команду я точно не помню - что-то USR 8192.
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Эмуляцию клавиатуры под JAVA

Post by Lavr »

Очень неудобная связка получается при эмуляции клавиатуры для оригинального "Специалиста". :(
Дело тут вот в чём: "Монитор" по [НР] перключает Цифры-Знаки, а по [НР Фикс] - Лат/Рус, но не Цифры-Знаки.
В JAVA код клавиши сразу попадает в программу в кодировке Юникод с учётом действия "шифтов", "контролов" и "альтов". Сами эти клавиши-модификаторы без клавиш-символов отдельных кодов не порождают. А с клавишей они получаются и совсем не нужны - все коды символов в Юникод уникальны и легко перекодируются в состояния порта ППА ВВ55 по таблице.
И вот тут наступает самый неприятный момент: по коду клавиши можно отследить, где нужно сбросить бит [НР] по порту В, но если при нажатом [НР] вводить с клавиши символ, а не цифру, то по логике "Монитор-а" символ просто не выводится на экран.
В пору вводить отдельные таблицы для кодов, на которые действует [НР], а на другие - [НР Фикс] , а на служебные клавиши они оба просто не действуют никак, в отличие от IBM PC... :wink:

Я сразу заложил возможность для "Специалиста-МХ", где есть символы Лат/Рус в нижнем регистре и работа клавиатуры более близка к IBM PC.

Но в оригинальном "Специалисте" глюки и ненажатия так пока есть.
Он получился как промежуточный вариант и перепиливать программу из-за особенностей "Монитор-а" желания как-то нет.

Сейчас работаю над эмуляцией "Специалиста-МХ" и если эмуляция клавиатуры и ППА ВВ55 будет приемлемой, эмуляцию клавиатуры переписывать не буду.
User avatar
fifan
Devil
Posts: 909
Joined: 06 Oct 2006 03:17
Location: г.Лянтор,Сургутского р-на,ХМАО

Post by fifan »

Добавил ссылку на данный эмулятор на свою страницу сайта - http://www.spetsialist-mx.ru/index26.html.
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Исходники "Специалист" на Java

Post by Lavr »

Я решил выложить исходники "Специалист"-а на Java.
Было у меня в планах дописать "Специалист-МХ" на Java, но как-то куража
за собой на этот шаг не замечаю пока. Может быть и сделаю...

"Специалист" на Java оказался вполне возможен, ну а остальное -
чисто дело техники.
Тем более, что может кто-то горит желанием это сделать сам.

Исходники обширно комментированы мной, чтобы не забыть что к чему, так
что вполне могут быть учебным пособием для начинающего программёра
на Java.
А может быть, кто и на Андроид код адаптирует. :wink:

Исходники, на мой взгляд, очень понятные, так что отвечать на вопросы типа
"а что это тут такое написано?", я априори отказываюсь...
Кому надо - берите as is...

Мои специальные танксы to Adam Davidson & Andrew Pollard for Jasper sources.
Считаю их во многом своими учителями, но я их ничем не беспокоил... :lol:
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:
Lavr wrote:Напомните, куда в обычной Java идёт вывод:

Code: Select all

System.out.println(" Execute on 3.5 Mhz!"); 
только в отладчик чтоль?

В J2ME я этот вывод юзал для контроля параметров в отладке, а сейчас приходится заменять на:

Code: Select all

showStatus(" Execute on 3.5 Mhz!");
- вывод в статусную строку...
угу - стандартный поток вывода в апплете никуда не идёт, если в браузере апплет запущен -
так что только showStatus...
Cтандартный поток вывода в Java-апплете оказывается идёт в Java-Консоль...

Image

Только её, оказывается, надо включить, чтобы она отображалась...

А я ещё думаю, ну столько же примеров попадается, где явно юзают

Code: Select all

System.out.println(" Мессага"); 
где же они это всё смотрят? :lol:

Зря промучался, не зная... даже специально в свою "служебную строку" выводил
отладочные сообщения... :-?
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Редактор и Ассемблер

Post by Lavr »

Добавил в набор программ эмулятора ПК "Специалист" Редактор и Ассемблер,
чтобы была возможность попрограммировать он-лайн на Асме 8080.
Точнее - получилось 2 Редактора и Ассемблера, т.к. они в одном пакете.
Исходники вытащил из архива эмулятора В.Пыхонина. Программы предварительно
проверил. Они обе рабочие.

К сожалению, в старом "Специалисте" работа с Редактором и Ассемблером затруднена
тем, что требуется помнить неочевидные сочетания управляющих клавиш.
Но по минимуму справиться всё же можно...

Пришлось и самому себе напомнить, что там и как там:
РЕДАКТОР И АССЕМБЛЕР

А.Орлов. Ваш помощник — компьютер (Редактор и Ассемблер), «Моделист-конструктор», 1988 г. ¹10, с.20-22.

Пакет программ, состоящий из Редактора и Ассемблера, является адаптированной для компьютера «Специалист» версией пакета «Микрон» (см. «Радио», 1987 г., ¹ 7, с. 22— 26) с использованием Редактора от Дизассемблера (см. «Радио», 1988 г., ¹ 3, с. 27—31).
Коды данной версии приведены в таблице 1, контрольные суммы блоков — в таблице 2. Проверить последние можно с помощью директивы K Монитора.
В исходной версии программа использует клавиши <F2>, <F4>, <AP2>, <ТАБ>, которых нет в «Специалисте», поэтому их заменяют клавиши <SAVE>, <CONT>, <EDIT>, <RUN>.
------------Image
Клавишу <УС> заменяет <F> (например, код 03 можно получить последовательным нажатием на клавиши <F> и <#>).
Текстовый буфер Редактора начинается с адреса 3000H. Запускают Редактор директивой G0 Монитора, при этом на экране появляется надпись «ED *МИКРОН*». Ниже приведены директивы для работы с Редактором.
<EDIT> + <N> — очистка памяти для нового текста. Чтобы не произошла случайная очистка, директива выполняется только в случае ответа <Y> на запрос «NEW?». После очистки устанавливается режим ввода в текстовый буфер.
<ВК> — ввод в память набранной строки.
< -> >, < <- > —перемещение курсора для исправления ошибки.
<СТР> — завершение ввода строк. После нажатия этой клавиши можно редактировать введенный текст.
<EDIT> + <В> — просмотр начала текста.
<EDIT> + <Е> — просмотр конца текста.
<EDIT> + <down>—просмотр следующей страницы текста.
<EDIT> + <uр> — просмотр предыдущей страницы текста.
< \ > — перемещение курсора к началу первой строки.
<left>, <right>, <up>, <down> — перемещение курсора к месту редактирования.
<EDIT> + <А> — ввод новой строки или группы строк. Завершение ввода заканчивается <СТР>.
<EDIT> + <L> — используется для поиска группы символов. После набора группы символов и нажатия на <ВК> производится отображение фрагмента текста, в котором встретилась данная последовательность. Для отображения следующего фрагмента с заданной группой символов служит директива <EDIT> + <R>.
<SAVE> — производится сдвижка строки за счет символа, на который указывает курсор.
<CONT> — очищается место для пропущенного символа.
<EDIT> + <CONT> —включается автораздвижка символов. Выключить ее можно директивой <EDIT> + <SAVE>.
<EDIT> + <D>—маркировка первой строки удаляемого фрагмента текста.
<up>, <down>, <EDIT>+ <down> — перемещение курсора к строке, следующей после последней удаляемой. Для исключения фрагмента текста необходимо снова набрать <EDIT> + <D>.
Отменить неправильно набранную директиву удаления фрагмента текста можно клавишей <СТР>.
<EDIT> + <О>—запись текста на магнитофон. В ответ на директиву Редактор запрашивает имя файла (можно не указывать), после его набора +<ВК> производится запись.
<EDIT> + <|>—производится поиск и считывание текста с заданным именем с магнитофона. Параллельно на экран выводятся имена всех найденных файлов. Если имя не указать, то загрузится первый встретившийся текст. Когда при считывании обнаруживается ошибка, Редактор сигнализирует об этом соответствующей надписью. В противном случае на экран выводится начальный фрагмент загруженного текста.
<EDIT> + <V>—сравнение текстов в буфере ОЗУ и на ленте. Если тексты неидентичны, выводится сообщение «ОШИБКА», а когда они совпадают — то их начальный фрагмент.
<EDIT> + <М> — вводится дополнительный фрагмент к уже имеющемуся в ОЗУ. Эта директива позволяет компоновать текст из отдельных фрагментов, записанных на ленте. Любую директиву работы с магнитофоном можно отменить, нажав на клавишу <СТР>.
<F> + <E> — выход в Монитор.
<СТР> — выход в Ассемблер. Его можно запустить также директивой G800 Монитора. При выходе в Ассемблер выводится надпись «ASSM *МИКРОН*».
Кратко перечислим основные требования к тексту на Ассемблере (подробнее об этом можно прочитать в «Радио», 1987 г., ¹ 4, с. 17—21 и «Радио», 1987 г., ¹ 7, с. 24).
Метки могут состоять из любого числа русских и латинских букв или цифр, начинаться с буквы или с символов « @ » или « ? ». Различение меток происходит по первым шести символам. Причем в качестве меток нельзя использовать имена регистров микропроцессора; каждая метка должна оканчиваться двоеточием.
В программе можно использовать следующие операторы:
ORG — указывает начало области, в которой будет работать программа;
EQU — присваивает метке определенное значение;
DB, DW — служат для занесения байтов или слов в память;
DS N — резервирует N байтов в памяти;
END — указывает на конец программы.
Комментарии отделяются символом « ; ».
В качестве операндов могут быть использованы константы, арифметические выражения, содержащие знаки «+» и «—», имена меток и регистров микропроцессора, десятичные и шестнадцатиричные числа, а также выражения, содержащие адрес текущей строки, обозначаемый « $ ».
Оттранслировать программу можно, нажав одну из трех клавиш:
<1> — на экран выводится полный протокол трансляции. Приостановить трансляцию можно клавишей <СТР>, а продолжить, нажав на любую другую клавишу. При повторном нажатии на <СТР> происходит переход в Редактор.
<2> — на экран выводится список всех встретившихся меток.
<3> — на экран выводится сообщение об обнаруженных ошибках (их число) и два адреса: адрес конца программы в области, которая предназначена ей для работы, и адрес конца в буферной области. Эти данные выводятся также и в первых двух случаях.
Оттранслированная программа всегда находится в области памяти, начинающейся с 1200H. Если программа должна работать в другой области, то ее можно перенести с помощью директивы Т Монитора. Выйти из Ассемблера в Монитор можно, нажав на клавиши <F> + <E> или на клавишу с кодом меньше чем 31H.
Данная версия рассчитана на работу в компьютере, имеющем ОЗУ с 0000H по 7FFFH.

Д. ОРЛОВ,
г. Пушкино,
Московская обл.
Надо будет, видимо, HTML-help написать, как я это сделал для эмулятора микропроцессора 6502.
iLavr
apofig
Writer
Posts: 10
Joined: 07 May 2009 13:55
Location: 91.207.210.62

Re: «Специалист» на Java

Post by apofig »

Вчера вечером в поисках новых материалов по ЛИКу нашел этот чудный топик.

Спасибо Lavr за публикацию исходников!

Базируясь на них перевел проект с Ant+Applet на Jetty+Maven+JNLP+Applet. Быстрого способа как запустить Апплет в браузерах и IDE 2022 года не нашел. Гугл подсказал что JNLP еще немного прокатит и Апплеты переделывать не придется. Пока решил на нем остановиться.

Запустил на нем ROM Лика и игру Клад (не без глюков). Прочитав топик вдумчиво понимаю причину.

Описал мануал по запуску.

Опубликовал проект на GitHub.

И поделился "наполеоновскими планами".

Спасибо всем, кто повлиял на это.

Продолжение следует.
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: «Специалист» на Java

Post by Lavr »

apofig wrote:Спасибо Lavr за публикацию исходников!
Приятно, что кому-то пригодилось... Удачи Вам! :kruto:
iLavr
apofig
Writer
Posts: 10
Joined: 07 May 2009 13:55
Location: 91.207.210.62

Re: «Специалист» на Java

Post by apofig »

Эксперименты с эмулятором продолжаются. На сегодня он умеет:
  • Загружать ROM и RKS из файла (пока что в ручном режиме в сырцах true на false надо сменить).
  • При этом можно загружать ПЗУ Лика или Специалиста.
  • Игра Клад уже работает без ошибков. Бейсик все еще глючит.
  • Появился программный ассемблер/дизассемблер. Он сейчас еще работает не полноценно, т.к. не все команды реализованы (пока что 30% готовности).
  • Появились юнит тесты - тестирующие команды процессора.
  • Появились интеграционные тесты, тестирующие что будет в результате выполнения 10M тиков на определенной ROM/игре c CPU/экраном (в формате png).
  • Постепенно переношу полезные материалы (мануалы, игры) в ресурсы проекта. Этот репозиторий планируется как единое место для всех наработок и контента.
  • Код сильно отрефакторен. Удален старый код ZX Spectrum, расширенные команды Z80, фичи, которые пока что не сильно нужны (после переноса на новый модерновый UI фреймворк часть из них верну). Сильно упрощал везде, где только можно. Разделил все GodObjects на компоненты.
Продолжение следует.
apofig
Writer
Posts: 10
Joined: 07 May 2009 13:55
Location: 91.207.210.62

Re: «Специалист» на Java

Post by apofig »

Очередная порция обновлений эмулятора.

Главное - исправлены ошибки с флагами и DAA командой. Бейсик заработал! Все команды переведены в ООП стиль. Добавлен ассемблер и дизассемблер. Можно трейсить выполнение команд программы. Добавлен keylogger с привязкой к тикам процессора. Переработана клавиатура. И много всего другого.

Продолжение следует.