Исходники или дизассемблированный монитор специалиста

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

Moderator: Lavr

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

Re: Исходники или дизассемблированный монитор специалиста

Post by Lavr »

fifan wrote:Если нужно могу выложить исходники всего RAMFOSа правда в мнемонике Z80.
А чем ты их компилируешь в мнемониках Z80?
Я свои исходники в мнемониках i8080 обычно ассемблером из пакета RAMFOS компилирую...
iLavr
User avatar
fifan
Devil
Posts: 917
Joined: 06 Oct 2006 03:17
Location: г.Лянтор,Сургутского р-на,ХМАО

Re: Исходники или дизассемблированный монитор специалиста

Post by fifan »

Есть такой ассемблер-утилита на пс от Медногова (автора многих игр для Спеутрума), который называется "Ассемблер 512 для Z80". Я им пользуюсь давно - https://zx-pk.ru/threads/27-kross-assem ... =1#post860

На самой железке (Специалист) ассемблера для Z80 я не нашёл. Пытался сам что-то наваять - не получилось...
User avatar
Lavr
Supreme God
Posts: 16936
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Исходники или дизассемблированный монитор специалиста

Post by Lavr »

Lavr wrote: 11 Jul 2019 02:58Нигде не могу найти исходники хотя бы одного монитора "Специалиста"... :-?
В очередной раз понадобились мне исходники "Загрузчика" Специалиста уточнить некоторые особенности
его системных вызовов, но снова нигде не нашел, хотя, помнится, не раз мы различную специфику обсуждали...

Потратил время и дизассемблировал сам. Честно говоря, увидел много интересного... :roll:
В процессе работы использовал информацию со следующих ресурсов:
https://emu80.org/docs/spec_techinfo
https://alemorf.github.io/retro_computers/computer.html?id=Specialist
https://alemorf.github.io/retro_computers/Specialist/russian.monitor1.html

Исходники прилагаю с нужным ассемблером и "сопутствующими товарами". :wink:
SP_LOADER.zip

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

Давно хотелось мне иметь мобильный вариант ПК "Специалист" с таким вот экранчиком:
LOADSRL2.PNG
Но при этом не хотелось отказываться от механизма вывода на дисплей, ну что-то типа такого:
http://www.nedopc.org/forum/viewtopic.php?p=105633#p105633

Хотелось также оставить совместимость с существующим софтом хотя бы в рамках пакета RAMFOS.
Нравятся мне его Ассемблер, Дизассеблер и прочая требуха... либо просто привык. :lol:

Решение вырисовалось пока следующее: у дисплея NOKIA 3310 объём памяти (84х48)/8 = 504 байта.
Если сориентироваться на экранное ОЗУ ПК "Специалист", то это займёт: 504 байта / 48 байт = 10,5 ~ 11 строк.
Но первые 10 строк всех программ под RAMFOS - это верхняя служебная строка, которая практически
не меняется в процессе работы программы!
LOADSRM.PNG
Вот там и имеет смысл разместить буферное ОЗУ для дисплея NOKIA 3310! 8)
Тем более, что интерфейс SPI этого дисплея аппаратно схож с выводом видеосигнала ПК "Специалист".
Те же сдвиговые регистры, но только с дополнительным стробом - можно допилить аппаратно.
Довольно похожий вариант я тестировал несколько для другой задачи:
http://www.nedopc.org/forum/viewtopic.php?p=138289#p138289

А можно и чисто программно решить проблему: ввести в ПК "Специалист" прерывание по кадру, и во
время этого прерывания чисто программным путём перекидывать 504 байта дисплея NOKIA 3310 из ОЗУ
через какой-либо порт хотя бы из одного регистра.
Такой способ успешно тестировал на вот этой железке и всё весьма быстро было:
http://www.nedopc.org/forum/viewtopic.php?p=157230#p157230

Обдумаю обе эти идеи под PROTEUS...
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16936
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Исходники или дизассемблированный монитор специалиста

Post by Lavr »

Lavr wrote: 06 Feb 2026 05:52В процессе работы использовал информацию со следующих ресурсов:
https://emu80.org/docs/spec_techinfo
https://alemorf.github.io/retro_computers/computer.html?id=Specialist
https://alemorf.github.io/retro_computers/Specialist/russian.monitor1.html
Несколько оффтоп здесь... но попался мне по одному из адресов весьма неплохой и
шустрый "Online эмулятор компьютера Специалист". :kruto:
А я когда встречаю какой-либо подобный эмулятор, не могу отказать себе в удовольствии
"погамать" в любимую игрушку! :lol:
Online SP-1.png
К сожалению, в меню этого эмулятора компьютера Специалист её не было...
Пришлось немного пораскинуть мозгами и подставить её в качестве file_samfox.js :wink:
Я надеюсь, Саманта Фокс на меня за это не обидится. :mrgreen:

Если Алексей Морозов не забывает наш форум, выкладываю ниже ему для коллекции эту
игрушку в формате *.js
file_babnik.zip
А если кто в неё не играл, то там же она в формате *.rks :roll:

Игрушка классная тем, что фактически не зависит от любых Мониторов, главное,
чтобы экран начинался с 9000H и порт клавиатуры попадал в диапазон 0F800-0FFFFH.
(В моём варианте порты ППА - под RAMFOS: 0FFE0-0FFE3H, попадают куда надо.)

На примере этой игрушки я в своё время постигал как устроены игрушки, ассемблер,
дизассемблер и шестнадцатеричные патчи... 8)

Управление очень простое:
[1],[2],[3] - выбрать уровень сложности: [1] - самый быстрый;
[4] - влево;
[5] - вверх;
[6] - вправо;
[7] - выстрел влево;
[8] - вниз;
[9] - выстрел вправо;
[0] - стой на месте.

Таким образом, пальцы двух рук на клавишах на одной линии - играть очень удобно! :kruto:
И управление в игре сделано грамотно: если персонаж бежит, и впереди поворот
вверх или вниз, клавишу можно нажать чуть заранее и он четко повернёт!

Let's play! :ebiggrin:

P.S. А если Виктор Пыхонин к нам иногда заглядывает, то вот это неверно, надо бы исправить:
Порт A и младшая половина C программируются на вывод, порт B - на ввод. Осуществляется сканирование методом бегущего "0" путем записи в порты A и C и анализа порта B.
Порт A и младшая половина C программируются на ввод, порт B - на вsвод. Осуществляется сканирование методом бегущего "0" путем записи в порт B и анализа портов A и C.
Насколько позволяет судить исходник, "бегущего "0"" там нет...
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16936
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Исходники или дизассемблированный монитор специалиста

Post by Lavr »

Lavr wrote: 06 Feb 2026 05:52... созрела у меня одна мысль, для реализации которой мне и понадобились исходники.
Дизассемблировал и сам Монитор к этому Загрузчику.
Мне со своими хотелками надо куда-то впиявить свои подпрограммы вывода на LCD,
поэтому исходник Монитора мне также понадобился.

Комментировал не так подробно, как Загрузчик, но мне это так подробно и не надо.
Расставил "говорящие" метки, у меня пока вопросов не возникло, кроме одного:
судя по исходнику, перепутаны местами две функции работы с HIMEM - C830H и C833H.
Возможно, потом это где-то подправили, но в журнале Моделист конструктор, 1988,
№9. с.45-47.
явно напутано.

Кстати, Монитор этот от А.Орлова, и потом он же предлагал какие-то модернизации.
Я использовал бинарники из пакета emu от b2m, поскольку других у меня давно нет,
ибо много лет пользовался RAMFOS.
В этой связи я, видимо, всех несколько дезинформировал: код Загрузчика, похоже, не
оригинальный от Волкова, а от В.Зверкова: Моделист конструктор, 1989,№4. с.21-23.
"Программа для системной ПЗУ". Я уже по мере использования своей модели клавиатуры
ощутил, что что-то не совсем по Волкову из 1987 года. :-?

Выкладываю архив как есть, ибо уже собрался патчить, а оригинал надо бы сохранить здесь: :wink:
SP_MONITOR.zip
В архиве также OCR описания программы Монитор из журнала в формате M$ Word.
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16936
Joined: 21 Oct 2009 08:08
Location: Россия

Начальный загрузчик ОС CP/M-80

Post by Lavr »

.
В связи с моими изысканиями в области шрифтов для LCD в составе ПК "Специалист", дизассемблировал я начальный загрузчик ОС CP/M-80, адаптированной Шевцовым под железо ПК "Специалист МХ".

Image

Есть у него там интересная фича по переключению графического режима "на лету" по горячей клавише:
BIOS_CPM1.png
Но, как оказалось, чисто судя по тексту уже, есть у него интересная опция обмена файлами между ОС CP/M-80 и ОС RAMFOS, о которой я ранее не знал. :-?

Исходники загрузчика ОС CP/M-80 выкладываю:
BOOT_CPM.zip
Я не писал обширных комментариев, поскольку очень помогает вот этот рисунок:

Image

Который сам я и нарисовал много лет назад, проверив всё это на реальном железе ПК "Специалист МХ".
На тот момент подобная карта памяти представлялась весьма необычной! 8)

Да, и работает как загрузчик, так и сама ОС CP/M-80 под последней версией ОС RAMFOS, где при наличии дискеты с CP/M-80 идёт её загрузка по нажатию [F6], а при отсутствии дискеты включается вот такой ROMDISK.
BIOS_CPM2.png
Specialist_MX screen driver V3.14 дизассемблировать только начал. Он работает уже в карте памяти ОС CP/M-80 (в архиве она есть).
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16936
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Начальный загрузчик ОС CP/M-80

Post by Lavr »

Lavr wrote: 08 Mar 2026 09:28Есть у него там интересная фича по переключению графического режима "на лету" по горячей клавише:

Image

Specialist_MX screen driver V3.14 дизассемблировать только начал. Он работает уже в карте памяти ОС CP/M-80 (в архиве она есть).
Дизассемблировал я, наконец, этот драйвер 80 символов в строке - DSP314.COM. :-?
Сложным довольно-таки процесс оказался: драйвер стартует как программа CP/M
в 1-й странице ОЗУ, перегружает свой код в нулевую страницу и фактически
постоянно занимается патчами самого себя и программ взаимодействия страниц
ОЗУ ПК "Специалист". :osad:

Исходники - ниже:
FONT3.zip
На мой взгляд, есть в коде некоторые странные ошибки, которые, тем не менее,
не затрагивают сам драйвер 80 символов в строке. Однако, как есть, драйвер
в ПЗУ работать не сможет, он активно использует факт, что в ПК "Специалист"
вся память, кроме 32 байт портов УВВ, это - ОЗУ.

Драйвер я аккуратно вытащил и проверил демонстрашкой:
FONT3.png
Код и образ демо для emu - также в архиве.
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
pyzhman
Writer
Posts: 20
Joined: 28 Oct 2025 23:21

Re: Исходники или дизассемблированный монитор специалиста

Post by pyzhman »

Адская работа.
И как они в бытность не дошли до шрифта 2х4?... А что, в двоичной системе перекрывает весь алфавит. Ладно, плюс цифры и знаки пусть будет 2х5 или 3х3. Вот и родили бы впереди планеты всей QR-код. Ведь в воздухе витало изобретение. :lol:
User avatar
Lavr
Supreme God
Posts: 16936
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Исходники или дизассемблированный монитор специалиста

Post by Lavr »

pyzhman wrote: 24 Mar 2026 05:20Адская работа.
И как они в бытность не дошли до шрифта 2х4?...
Честно говоря, и этот-то шрифт в реальной жизни - "вырви глаз", что называется... :-?
А я его видел и на "Специалисте" и на ZX_Spectrum...

Реально 64 символа в строке у "Специалиста" вполне хватало писать обычные тексты.
Причем в редакторе той версии "Специалиста" , которым я пользовался, 64 символа в строке не были ограничением.
Только на экране отображались 64 символа, но строка могла уйти "за экран". Потом эту фичу зачем-то зарубили. :osad:

Lavr wrote: 22 Mar 2026 12:15На мой взгляд, есть в коде некоторые странные ошибки, ...
Если кому-либо этот драйвер интересен, как часть CP/M, то самая странная ошибка вот эта:

Code: Select all

L40: EQU  0FFF4H; - 0FFF7H резерв по описанию RAMFOS
L41: EQU  0FFF5H
По этим адресам портов УВВ в ПК "Специалист_МХ", насколько я знаю, никаких аппаратных средств нет. :roll:
УВВ-SP-MX.png
У меня были некоторые предположения, исходя из ассемблерного текста, где идёт обращения к этим портам.
Но я оставил эти догадки при себе, ибо моих целей это не касалось.


А сам этот драйвер DSP314.COM для версии CP/M ПК "Специалист_МХ" действительно важен вот по этой причине:
Lavr wrote: 08 Mar 2026 09:28... есть у него интересная опция обмена файлами между ОС CP/M-80 и ОС RAMFOS, о которой я ранее не знал. :-?
Пакет RAMFOS работает только с нулевой страницей ОЗУ, а ОС CP/M-80 - работает в первой.
И нет никаких иных средств передать массив данных или какую либо программу этой самой CP/M, чтобы она записала это на свои диски.
BST_CPM11.png
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16936
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Исходники или дизассемблированный монитор специалиста

Post by Lavr »

Lavr wrote: 24 Mar 2026 07:32
Lavr wrote: 22 Mar 2026 12:15На мой взгляд, есть в коде некоторые странные ошибки, ...
Если кому-либо этот драйвер интересен, как часть CP/M, то самая странная ошибка вот эта:

Code: Select all

L40: EQU  0FFF4H; - 0FFF7H резерв по описанию RAMFOS
L41: EQU  0FFF5H
По этим адресам портов УВВ в ПК "Специалист_МХ", насколько я знаю, никаких аппаратных средств нет. :roll:
У меня были некоторые предположения, исходя из ассемблерного текста, где идёт обращения к этим портам.
Но я оставил эти догадки при себе, ибо моих целей это не касалось.
В общем мои "некоторые предположения, исходя из ассемблерного текста" полностью оправдались, когда я более внимательно проанализировал эти участки текста.
Они мне и сразу показались очень знакомыми на вид, но смущала предваряющая их настройка канала 0 таймера К580ВИ53, который в ПК "Специалист МХ" - источник звука. :-?

Но код безусловно свидетельствует о том, что по адресам 0FFF4H, 0FFF5H у автора программы явно аппаратно был подключен i8251 или его отечественный аналог КР580ВВ51, причём частоту для него как раз определяет канала 0 таймера К580ВИ53! :roll:

Code: Select all

     MVI  A,36H ; 0011.0110 B
;                         0 - двоичный счет
;                      011  - режим 3 "меандр"
;                   11      - чтение/запись слова
;                 00        - канал 0
     STA  TMYC  ;    РУС таймера ВИ53

     MVI  A,0A0H
     STA  TIM0 ; Timer_0 - Sound
     MVI  A,01H; 01A0H = 416
     STA  TIM0 ; 4807 Hz = 4,8 kHz

     STA  K5B  ; ?

     LXI  H,L41 ; 0FFF5H
     MOV  M,A   ; 01H
     MOV  M,A   ; 01H

     MVI  M,40H ; Reset command word - команда сброса
     MVI  M,0CDH;
;            1100 1101 B
;                   01 - 1/16 частоты CLK: 4807 Hz / 16 = 300 Hz;
;                 11   - 8 бит данных;
;              00      - без контроля четности;
;            11        - 2 стоп-бита

     MVI  M,27H ;
;           0010 0111 B
;                   1 - передача разрешена;
;                  1  - готовность терминала к передаче (DTR)
;                 1   - приём разрешен;
;                0    - TxD line work normally;
;              0      - Don't Reset the error flags;
;             1       - запрос терминалу о готовности к приему (RTS)

     CALL K5C+1 ; K5C+1=K5C+1 - переход на 2-й байт  LXI  B,0C5E5H ;
Это настройка УСАПП КР580ВВ51 - он у автора молотит куда-то на частоте 300 Hz.

Кстати, именно этот код и вызвал мои смутные догадки, которые в итоги оправдались, ибо не так уж и давно я сам писал очень похожий код:

Re: вв51 i8251 - http://www.nedopc.org/forum/viewtopic.php?p=174930#p174930

Отсюда я и взял комментарии к настройке КР580ВВ51 в коде Шевцова. :lol:

Ну а дальше он дублирует вывод в УСАПП:

Code: Select all

     MVI  A,0A0H
     STA  TIM0 ; Timer_0 - Sound
     MVI  A,01H; 01A0H = 416
     STA  TIM0 ; 4807 Hz = 4,8 kHz
K68:
     LDA  PPA1 ; PORT B
     ANI  02H  ; 0000.0010b Shift
     JZ   K69  ; Shift pressed!

     LDA  L41  ; 0FFF5H
     ANI  81H  ; 1000.0001b
     CPI  81H  ; 1000.0001b
     JNZ  K68

     MOV  A,C
     STA  L40  ; 0FFF4H ПЕРЕДАЧА C
Всё по правилам, всё путём... смущает только одно - в эмуляторах ПК "Специалист" УСАПП КР580ВВ51 не поддерживается, и как это всё не виснет на участке:

Code: Select all

     LDA  L41  ; 0FFF5H
     ANI  81H  ; 1000.0001b
     CPI  81H  ; 1000.0001b
     JNZ  K68
Это просто удивительно! :esurprised:

Удивляет также другое, в документации Шевцова ни слова не сказано про наличие аппаратного УСАПП КР580ВВ51...

 HELP_CPM.TXT

Code: Select all

-------------------------------------------------------------
      Распределение памяти при работе с CP/M-80:
-------------------------------------------------------------
 1. Основная страница ОЗУ:
----------------------------
  0000h-8FFFh - свободно(или оболочка BP.COM);
  9000h-BFFFh - экран;
  C000h-D1EFh - знакогенератор и Bios RAMFOS (используются
                для работы CP/M);
  D1F0h-D2FFh - стек и служебные ячейки Bios RAMFOS;
  D300h-D3FFh - свободно;
  D400h-D4FFh - программа выработки псевдо-аппаратного
                курсора CP/M и программа связи Bios CP/M
                и Bios RAMFOS(или драйвер - DSPxxx);
  D500h-FFBFh - свободно(или драйвер экрана - DSPxxx);
  FFC0h-FFDFh - программа связи страниц ОЗУ;


  2. Дополнительная страница ОЗУ:
---------------------------------
  0000h-00FFh - служебное ОЗУ CP/M-80; 256 байт
  0100h-C3FFh - свободно (программы CP/M);
  ...
  ...                                              = 0C300H (49920 байт)
  ...
  C400h-D9FFh - CP/M-80 V2.2;                      = 1600H (5632 байт)

  DA00h-E34Fh - Bios V1.xx(последняя V1.04);       = 0A00H (2560 байт)

  E400h-EFFFh - ОЗУ под буфер,каталог и т.д. CP/M; = 0C00H (3072 байт)

  F000h-FFBFh - свободно(или драйвер RAM2+.COM).   = 0FC0H (4032 байт)

  FFC0h-FFDFh - программа связи страниц ОЗУ;
--------------------------------------------------------------

--------------------------------------------------------------
              РУКОВОДСТВО  ПОЛЬЗОВАТЕЛЯ
                      CP/M-80
--------------------------------------------------------------

 Запуск CP/M производится также как  и  MX_DOS  (кнопка  F6) с
системной дискеты. Перенесена CP/M-80 на "Специалист_MX" с  ПК
"Orion_128" (использовалась версия автора  М.Бриджиди  с  Bios
V2.61).  CP/M  работает  в  области   RAMDISKA(1-я  страница).
 После того как запустится СР/М-80 можете директивой  DIR вы-
вести на экран список файлов. Затем директивой TYPE имя.расши-
рение (например A>ТYPE HELP.TXT) вывести  на  экран  текстовые
файлы.  А  далее  руководствуйтесь  информацией  в  файле   -
- "HELP-CPM.TXT". Более подробную информацию по ОС СР/М см.  в
журналах  "Радио"  и  "Радиолюбитель"(см.  статьи  посвященные
СР/М-80 для ПК "Орион-128"). Также весьма полезно будет  озна-
комиться с книгой:
  Уэйт М., Ангермейер Дж.  "Операционная система СР/М 80" -
  - М.:Радио и связь, 1986г.

--------------------------------------------------------------

 Для нормальной работы ОС CP/M-80 необходимо в контроллер ди-
сковода внести небольшое дополнение (эта и  другие  доработки
есть в графическом файле DiskKont.PNX):

 Необходимо разъеденить вывод DD4.2 - 9 с выводом DD8 - 9 и
включить следующую схему:

                        -----       K555ЛИ1
                       !   & !
    к DD4.2 выв.9 <----!     !
                       !     !-----> к DD8 выв.9
                  !----!     !
                  !    !     !
                  !     -----
                  !
                  !
                  !
                  !
                  !
       --------   !    K555TM2
      !  !   Т !  !
      О S!     О--
      !  !     !
      ! C!     !       Остальные выводы триггера S,R,C
  ----! D!     !       необходимо подключить соответственно
  !   !  !     !       выводам S,R,C триггера DD4.2
  !   О R!     !
  !   !  !     !
  !    --------
  !
  !
  -------------> к шине данных РАЗРЯД D2(если считать от 0);

--------------------------------------------------------------

                "SGcpmx.x COM" V2.0

 Программа  инициализации   несистемной   дискеты,   то   есть
генерации на ДИСК (только DS/DD - двухсторонний  диск/двойной
плотности записи, 80 дорожек) операционной  системы   CP/M-80
с Bios V1.xx. Программа имеет встроенное форматирование дис-
кет.
--------------------------------------------------------------

   Фанат компьютера "Specialist_MX" Шевцов А.В. *AVSh*

**************************************************************
*АДРЕС:352650, г. Апшеронск, Краснодарский край, Соцгородок, *
*                 д. 31, кв. 17.                             *
*                 Шевцов  Александр  Викторович.             *
**************************************************************

iLavr