Программы для «Специалиста»

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

Moderator: Lavr

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

Re: Программы для «Специалиста»

Post by Lavr »

Lavr wrote: А вот DB8085 disassembler, что я брал вот здесь: Dick's Web Page (W3SYY),
меня немного подвёл. Он неверно декомпилирует инструкцию CNZ (код 0С4Н).
:osad:
Я хотел ещё тогда написать автору, но увидел, что автор приложил исходники, и вполне можно разобраться самому.
Но руки как-то не дотянулись... :-?

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

Жаль только форматирует он текст ассемблера табуляцией - это не во всех редакторах одинаково
хорошо выглядит... (На удивление хорошо в MS Word выглядит, и там многие косяки легко поправить! :wink: )

В итоге сразу получается текст примерно вот такой красивости:

Code: Select all

LF95A:
     LXI  H,L0000    ;F95A  21 00 00
LF95D:
     LDAX D          ;F95D  1A
     INX  D          ;F95E  13
     CPI  0DH        ;F95F  FE 0D
     JZ   LF98E      ;F961  CA 8E F9
     CPI  2CH        ;F964  FE 2C
     RZ              ;F966  C8
     CPI  20H        ;F967  FE 20
     JZ   LF95D      ;F969  CA 5D F9
     SUI  30H        ;F96C  D6 30
     JM   LFAAE      ;F96E  FA AE FA
     CPI  0AH        ;F971  FE 0A
     JM   LF982      ;F973  FA 82 F9
     CPI  11H        ;F976  FE 11
     JM   LFAAE      ;F978  FA AE FA
     CPI  17H        ;F97B  FE 17
     JP   LFAAE      ;F97D  F2 AE FA
     SUI  07H        ;F980  D6 07
А тут мне снова понадобилось кое-что декомпилировать для 580ВМ80, и я вспомнил про этот дизассемблер...
Всё оказалось довольно просто: инструкцию CNZ (код 0С4Н) он распознаёт, но в таблице размера
инструкций автор ошибочно проставил, что CNZ - инструкция однобайтная, типа RNZ, что и даёт сбой.
Не критично - но неприятно... :(

В общем, я один байт подправил в исходнике и в ЕХЕ-шнике, и всё вроде как заработало правильно:
DIZ8080.zip
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16942
Joined: 21 Oct 2009 08:08
Location: Россия

ОС CP/M-80 для ПК "Специалист_MX"

Post by Lavr »

.
Я не планировал специально данную подборку, но в процессе работы над своими задачами обстоятельства и любопытство вынудили меня потратить время, и решил я выложить здесь результаты, чтобы никто не терял времени так как я.

Возможно, кто-то скажет, что всё известно, и я ломился в открытую дверь... но я при самых тщательных поисках этой "двери" не нашел... :osad:

Обстоятельством было то, что мне был необходим чистый код драйвера DSP314.COM, пока он не начал свои модификации.

Но драйвер DSP314.COM указан в автозагрузке, файл PROFILE.SUB - текстовый, аналог AUTOEXEC.BAT в CP/M.
Надо отредактировать PROFILE.SUB, но на диске CPM_BEST.ODI нет никакого редактора:

Image

Поскольку меня больше интересовала своя задача, я просто удалил файл автозагрузки:
ERA PROFILE.SUB
а потом вытащил драйвер DSP314.COM без запуска посредством
SID DSP314.COM

Image

И когда я уже свою задачу разрешил, взыграло уже любопытство: Как же так, ведь в составе CP/M обязательно должен быть ED.COM - простейший редактор!
Тут и память мне подкинула, как в годах дремучих писали в технической литературе:"Если на вашей машине установлена ОС CP/M, это открывает доступ к океану программного обеспечения!" :esmile:

И я решил, что быстренько найду ED.COM в сети и добавлю его на диск CPM_BEST.ODI .
И таки, если хотите - можете смеяться - я редактор ED.COM за целый день НЕ-НА-ШЕЛ! :esurprised:
Но зато нашел HELP к нему... и искать редактор ED.COM мне расхотелось - он строковый, я к такому не привык...

Ну а что? ED.COM - единственный редактор под CP/M? Нет! И я стал искать просто редакторы под CP/M, нашел их штук так пять... но все они НЕ РАБОТАЛИ под моей версией ОС CP/M! :roll:

Вот тут мне уже О-О-О-ЧЕНЬ ИНТЕРЕСНО СТАЛО! :wink: Ну и где ОН - "океан программного обеспечения"? :lol:
В итоге я нашел всего один рабочий редактор текста: "WORD MASTER" - WM.COM , причем судя по всему он уже адаптирован Orionsoft в 1995 году.

Ну а дальше, как говорится, "раз пошла такая пьянка", я решил доразыскать под эту CP/M остальной "джентльменский набор" программного обеспечения бородатых лет:
- компилятор языка ассемблер и
- интерпретатор (и желательно компилятор) языка BASIC.

И скажу я вам, "океан программного обеспечения" для процессора i8080 оказался очень неглубоким! :osad:

В архиве ниже:
Specialist.zip
CPM_BEST.ODI - оригинальный диск CP/M V2.2 от Шевцова, куда я добавил WM.COM;
CPM_ASSM.ODI - компилятор языка ассемблер и редактор WM.COM;
CPM_BASC.ODI - интерпретатор и компилятор языка BASIC (здесь и был найден WM.COM).
(Здесь же есть редактор MED.COM , но он хочет Z80.) Всё это под emu.
Ни одного варианта запущенной системы не сохранил, ибо emu при сохранении теряет CP/M диск. :-?

Все программы по крайней мере запускаются: редактор WM.COM редактирует простые текстовые файлы, компилятор языка ассемблер - компилирует, интерпретатор Бейсика - Бесит... :wink:
Компилятор не проверял - там несколько замороченная процедура, но в хелпах описание есть.

Также в архиве начальные сведения об ОС CP/M, если кто её никогда не видел, и прочие хелпы, а также утилита, позволяющая редактировать диски *.ODI под ОС Windows.

Играться подано! Do, please! :ebiggrin:
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16942
Joined: 21 Oct 2009 08:08
Location: Россия

Re: ОС CP/M-80 для ПК "Специалист_MX"

Post by Lavr »

Lavr wrote: 25 Mar 2026 12:00CPM_BASC.ODI - интерпретатор и компилятор языка BASIC (здесь и был найден WM.COM).
...
Компилятор не проверял - там несколько замороченная процедура, но в хелпах описание есть.
Когда в поисках редактора неожиданно нашелся и компилятор языка BASIC, который запускается под i8080, меня это прямо-таки заинтриговало! :roll:
На рубеже 90-х мы с другом специально ездили в Воронеж с целью приобрести CP/M для i8080 и именно BASIC-компилятор, но не срослось у нас тогда... "не взлетело". :-?

Возникло желание сейчас что-то попробовать скомпилировать...
(Кстати, компилятор языка BASIC я брал здесь: http://rdk.regionsv.ru/lang-basic.htm
ссылку привожу, так как там есть и другая версия компилятора BASIC, кроме той, что я выложил).

Но неожиданно выяснил, что ПК "Специалист МХ" это несколько не совсем удобная машина для работы под CP/M-80, поскольку нет как таковой клавиши [Ctrl], a ОС CP/M эту клавишу очень любит. :wink:

 Команды с Ctrl в CP/M

Code: Select all

•	CTRL + H — удаление символа слева от курсора. На некоторых терминалах это повторяет удалённый символ, на других — перемещает курсор на один символ влево.
•	CTRL + I — ввод кода табуляции (аналогично клавише TAB).
•	CTRL + P — включение или выключение функции эхо на принтер. При включении данные, отображаемые на LCD-экране, выводятся на принтер (или другое устройство, назначенное как LST:) каждый раз при нажатии клавиши RETURN.
•	CTRL + R — перепечатывание содержимого текущей командной строки.
•	CTRL + S — на мгновение останавливает текущую обработку (аналогично клавише PAUSE). Обработка может быть продолжена при повторном вводе этой команды.
•	CTRL + U — отмена текущей командной строки и перемещение курсора на следующую строку на экране для ввода другой команды.
•	CTRL + X — стирание текущей командной строки и перемещение курсора обратно в начало строки.
•	CTRL + Z — завершение ввода с клавиатуры (используется в комбинации с некоторыми временными командами CP/M).

А второе, что меня удивило и даже покоробило - в BASIC-е нет команды CLS ! :o

Я значит пишу на пробу то, что обычно работало везде:

Code: Select all

10 CLS
20 PRINT"HELLO!"
И CLS вызывает ошибку! :roll:CLS1, и CLS2, и CLR... )

Более того, я и под DOS любил начинать bat-файл строчками:

Code: Select all

@CLS
@ECHO OFF
Но и такого CLS в CP/M тоже нет! :-?

И я сгоряча решил, что сейчас я мигом научу эту CP/M делать CLS - ну пусть я не знаю систему, главное начать с адреса 0100Н и не использовать системных вызовов! И я это быстренько написал! :lol:

 Так не надо писать CLS в CP/M

Code: Select all

        ORG 0100H

;------ Очистка экрана
CLR_SCR:
        PUSH H
        PUSH B
        LXI  H,0000H  ; значение, необходимое
        DAD  SP       ; чтобы получить указатель стека
        SHLD STACK    ; сохраним указатель стека
        LXI  SP,0C000H; SCREEN RAM END
        LHLD 0C65CH   ; цвет фона
        LXI  B,0300H  ; SCREEN LENGH: (0BFFFH-9000H)/16 байт
M45:
        PUSH H; 1  заносим цвет фона
        PUSH H; 2  в адреса экранного ОЗУ
        PUSH H; 3  как в стек
        PUSH H; 4
        PUSH H; 5
        PUSH H; 6
        PUSH H; 7
        PUSH H; 8 x 2 = 16 байт
        DCX  B;   уменьшим счётчик
        MOV  A,B; проверим
        ORA  C  ; достигли ли нуля
        JNZ  M45; если нет, повторим цикл

        LHLD STACK; считаем значение указателя стека
        SPHL      ; восстановим указатель стека

        LXI  H,0000H; курсор в верхний угол
        SHLD 0C63EH ; в ячейки курсора

        POP  B
        POP  H

        MVI  C,00H
        JMP  0005H; WarmBoot BIOS

STACK:  DW   0000H
        DB   0FFH ; чтобы видеть конец программы

        END

А оно экран не стирало и после первой же операции, следующей за CLS ОС CP/M падала... :osad:

В общем я зело призадумался... прочитал про функции CP/M - BIOS... и со второго захода всё взлетело коротко и быстро: :D

Code: Select all

  ORG 100H

  MVI  C,02H
  MVI  E,1FH
  CALL 0005H
  RET
  JMP  0000H
  END
(После RET - чисто подстраховка, если понадобится заменить RET на NOP.)
Кто также, как и я, любит CLS - ниже в архиве он, упакованный в 256 байт, как CP/M любит:
CLS.zip
А клавиша [Ctrl] - я решил, что надо ввести в ПК "Специалист МХ" такую клавишу и не мучиться... :-?
(Мучиться-то можно: клавиши [F1]...[F7] изображают [Ctrl]+что-то... [F4], кстати = ^C; драйвер Шевцова клавиши курсора переиначивает, но мучительно это... :-? )

Когда ПК "Специалист" стал "Специалист МХ" в матрице клавиатуры "потеряли" 2 клавиши:
Key_SP.png
Одна из клавиш называлась [ПВ] - повторный ввод (код 80Н), она и будет теперь [Ctrl]! :lol:

Вместо одного из байтов 20Н подпатчил 80Н... вместо второго - подпатчил 1FН - для личного удобства. :ebiggrin:

Code: Select all

C600 81 0C 19 1A 80 1F 20 08 09 18 0A 0D
C610 51 5E 53 4D 49 54 58 42 40 2C 2F 5F
C620 46 59 57 41 50 52 4F 4C 44 56 5C 2E
C630 4A 43 55 4B 45 4E 47 5B 5D 5A 48 3A
C640 3B 31 32 33 34 35 36 37 38 39 30 2D
C650 1B 8A 00 01 02 03 04 05 06 8B 8C 1F
Ну и конфигурацию клавиатуры emu (LAYOUTMX.KBD) тоже подправил:

Code: Select all

enter bksp . = - ins ? ?
end      / \ H 0 F9  ? ?
right    , V Z 9 F8  ? ?
tab      ; D ] 8 F7  ? ?
left     B L [ 7 F6  ? ?
space    X O G 6 F5  ? ?
del      T R N 5 F4  ? ?
lctrl|rctrl I P E 4 F3  ? ?
down     M A K 3 F2  ? ?
up       S W U 2 F1  ? ?
home     ' Y C 1 caps ? ?
lalt     Q F J ` esc ? ?
lshift
ОС RAMFOS клавишу с кодом 80Н опознаёт, осталось подпатчить пакет, чтобы он понял, что это - [Ctrl]! :wink:
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16942
Joined: 21 Oct 2009 08:08
Location: Россия

Re: ОС CP/M-80 для ПК "Специалист_MX"

Post by Lavr »

Lavr wrote: 28 Mar 2026 20:58Вместо одного из байтов 20Н подпатчил 80Н... вместо второго - подпатчил 1FН - для личного удобства. :ebiggrin:
Если кто хочет этот фокус повторить, то патчить надо конечно же SPMX.ROM вот в этом месте:

Code: Select all

Offset      0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F
--------   ------------------------------------------------
00000430   81 0C 19 1A 80 1F 20 08  09 18 0A 0D 00 C0 00 C6   Ѓ...Ђ. ......А.Ж
00000440   51 5E 53 4D 49 54 58 42  40 2C 2F 5F BB FF 00 00   Q^SMITXB@,/_»я..
00000450   46 59 57 41 50 52 4F 4C  44 56 5C 2E 00 00 00 00   FYWAPROLDV\.....
00000460   4A 43 55 4B 45 4E 47 5B  5D 5A 48 3A B1 00 00 00   JCUKENG[]ZH:±...
00000470   3B 31 32 33 34 35 36 37  38 39 30 2D 05 0A 00 00   ;1234567890-....
00000480   1B 8A 00 01 02 03 04 05  06 8B 8C 1F 00 00 06 30   .Љ.......‹Њ....0
А второй код 1FН я ввёл в матрицу вот для чего: клавиатура ПК "Специалист МХ" вот такая:
Key_SPMX.png
1FН - это код клавиши [CTP], у меня на клавиатуре в правом верхнем углу клавиша [Delete], она и по смыслу - [CTP]! :wink: А он был заведен на [Insert] рядом, что очень сбивало и мешало.

Теперь и [Delete], и [Insert] - обе - [CTP], хотя это можно было решить и иначе - вот в этой строчке:

Code: Select all

enter bksp . = - ins ? ?
подправить

Code: Select all

enter bksp . = - ins|del ? ?
You do not have the required permissions to view the files attached to this post.
iLavr