Важная информация

User Tag List

Страница 25 из 56 ПерваяПервая ... 212223242526272829 ... ПоследняяПоследняя
Показано с 241 по 250 из 556

Тема: DSDOS для ПРК "Орион-128"

  1. #241
    Guru
    Регистрация
    16.12.2008
    Адрес
    Kharkov, Ukraina
    Сообщений
    2,221
    Спасибо Благодарностей отдано 
    4
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    18 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Скажу честно. Прикольная система. Но расширения от слова нуль - тут.
    Электроника КР-02, MSX YIS-503IIR, Орион-128, Ленинград-2, Pentagon-128k, MSX2 YIS-503IIIR, MSX-EXT, ...

  2. #241
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #242
    Guru Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,220
    Спасибо Благодарностей отдано 
    473
    Спасибо Благодарностей получено 
    899
    Поблагодарили
    591 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    Lightbulb АССЕМБЛЕР DSDOS

    Καλημέρα για όλα!

    Делюсь новой "поделкой". Заначка этого ПО датирована у меня в исходниках аж 1999-ым годом, тогда была написана основная часть движка, но к сожалению в силу жизненных обстоятельств проект был заброшен. Сейчас возникла насущная необходимость и проект был воскрешён и доведён до боевого образца, в связи с чем и решил его опубликовать.

    Итак, речь идёт о компиляторе языка ассемблера. Доселе я пользовался замечательным ассемблером из пакета "Микрон" (а точнее усовершенствованным вариантом - АССЕМБЛЕР «М&S»), адаптированным под Орион-128+ORDOS (а впоследствии и под DSDOS), но его возможности были исчерпаны и возникла потребность в бόльшем функционале. Основной проблемой микроновского ассемблера является ограничение на размер компилируемого кода и всего 6 значащих символов у меток/констант. Также не хватает условной компиляции и некоторых других "плюшек", без которых конечно обойтись можно, но порой тоскливо.
    Сразу оговорюсь, что при разработке нового ассемблера (далее - "DSDOS ASSM" или просто "DASM") я руководствовался исключительно своими потребностями, без особой оглядки на моду, "вражеские" стандарты и прочие условности. Идеология как и у всего проекта DSDOS: максимальная скорость работы, максимальный комфорт использования, минимальный занимаемый объём, никакой глобализации - только решение насущных задач в рамках платформы Ориона.

    В основу положен функционал микроновского ассемблера, о котором можно почитать тут, в связи с этим в описании буду стараться не пересказывать функционал Микрона, а расскажу о нововведениях и отличиях.

    Основные ТТХ:

    ■ синтаксис команд: Intel_8080 style (MOV, STA, LHLD и т.д.);
    ■ поддержка некоторых команд МП Z80 (альт.регистры, короткие переходы, циклы, операции с отдельными битами регистров*);
    ■ максимальное кол-во значимых символов меток/констант - 14;
    ■ поддержка латинских и русских букв (регистрочувств.), а также символов псевдографики в именах меток/констант;
    ■ регистронезависимое написание команд, операторов и операндов (MOV A,B | mov a,b | MoV a,B | etc.);
    ■ логические операции над константами ("И", "ИЛИ", "НЕ", "ИСКЛЮЧАЮЩЕЕ ИЛИ");
    ■ поддержка двоичной, восьмеричной, десятичной и шестнадцатеричной с/с.
    ■ ускоренная обработка таблицы меток (методом деления пополам);
    ■ размер буфера выходного кода до 28 Кб**
    ■ буфер меток/констант до 1700 шт.**
    ■ условная компиляция кода;
    ■ мультифайловая компиляция (разбиение исходного кода на несколько файлов);
    ■ динамическое подключение текста при компиляции;
    ■ динамическое подключение бинарных данных (ресурсов) из файлов;
    ■ заполнение массива константой;
    ■ множественные ORG;

    * в настоящей версии (v2.7) реализована поддержка команд переключения наборов регистров на альтернативные (EXX и EXA), остальные будут добавляться по мере реальной необходимости.

    ** в настоящей версии буфер таблицы меток и выходного кода единый, расположен в дополнительной странице ОЗУ, в адресном пр-ве 8000..EFFFh, в ТТХ указаны предельные значения каждого параметра, при компиляции реального кода одновременно они недостижимы, и фактические значения будут меньше. В планах добавление возможности работы с расширенным ОЗУ (с потерей квазидиска), в таком варианте буферы таблицы меток и выходного кода будут расположены в разных страницах, и предельные значения будут фиксированные: до 3840 меток и до 60 Кб выходного кода независимо!


    Мультифайловая компиляция (файл проекта)

    При написании больших программ (около 8 Кб и более) всплывает страничное ограничение Ориона, т.к. тело ассемблера, исходный текст программы, таблица меток и выходной код физически расположены в одной странице ОЗУ и на всё про всё отведено 48 Кб. Для обхода ограничения выбрана стратегия "размазывания" исходного текста программы на несколько файлов (далее - модулей) и размещение таблицы меток с выходным кодом в дополнительной (системной) странице ОЗУ #1. Текстовый редактор Gemini-EDIT в ОС DSDOS позволяет одновременно работать с восемью текстовыми файлами, т.о. работа с "размазанным" исходником не представляет трудностей, при этом ассемблер обрабатывает модули по очереди, загружая в ОЗУ только один (текущий).
    Список модулей в порядке их обработки перечислен в специальном файле проекта "*.PR" или "*.P", имя которого указывается в качестве параметра при вызове DASM.

    Пример файла проекта MYPRG.PR:
    Код:
    ; Исходник программы MYPRG (из двух частей)
    
    PART1.AS ;  часть I
    PART2.AS ;  часть II
    Файлы модулей должны находиться на том же диске, где файл проекта.

    Файл "*.PR" может содержать следующую информацию:
    - имя файла модуля;
    - комментарий;
    - пустая строка.

    Имя файла модуля указывается в формате ОС DSDOS, задание имени диска не поддерживается. Одна строка может содержать только описание одного модуля. Информация после имени файла через пробел игнорируется, что можно использовать в качестве комментария.
    Строка с комментарием должна начинаться с символа ";". Пробелы в начале строк, а также пустые строки игнорируются при обработке.
    Команды компилятора и операторы языка ассемблера в файле проекта не поддерживаются!
    Содержимое файла проекта используется на всех стадиях компиляции, т.о. оно постоянно находится в основной странице ОЗУ и "отъедает" часть буфера текущего модуля.
    На каждом проходе компилятор подгружает очередной модуль согласно списку из файла проекта и обрабатывает его, при это на экран выводится имя файла подгруженного модуля.
    С точки зрения программиста, разбиение исходного текста на модули никак не влияет на процесс его обработки. Виртуально компилятор воспринимает весь текст целиком.
    Т.о. если встречается команда условной компиляции в одном модуле, то её действие также распространяется на последующие. Однако действие команды принудительного окончания обработки (END) распространяется только на текущий модуль!

    Компилятор определяет алгоритм работы по расширению рабочего файла, указанного при вызове DASM. Если расширение ".PR" или ".P", то рабочий файл интерпретируется, как файл проекта, в таком случае компилятор ищет в нём файлы модулей. В противном случае рабочий файл интерпретируется, как монофайловый исходник (обычно с расширением ".AS" или ".A") и DASM непосредственно приступает к его компиляции. При загрузке файлов производится проверка формата, и если файл не является текстовым, то работа компилятора прерывается с сообщением: "Ошибка формата".

    Рабочий диск задаётся при указании имени рабочего файла при вызове DASM. На этом диске также размещается файл выходного кода, имя которого по-умолчанию формируется компилятором автоматически по следующему принципу: часть имени исходного файла модуля или проекта до точки расширения (но не более семи символов), плюс символ исполняемого файла - "$".
    Имя файла выходного кода может быть задано программистом в исходном коде - с помощью команды FILE (см. далее).


    Буферизация данных

    В процессе работы компилятор создаёт в буферном ОЗУ следующие данные: таблицу меток/констант и выходной код программы. При успешном завершении компиляции выходной код сохраняется в файл.
    Буфер расположен в дополнительной странице ОЗУ, в адресном пр-ве 8000..EFFFh. На первом проходе компиляции создаётся таблица меток, а на втором, сразу после таблицы, - выходной код.
    Есть две ключевые точки при заполнении буфера:

    1) Превышение порога BFFFh
    2) Превышение порога EFFFh

    В первом случае данные попадают в область атрибутов цвета C000..EFFFh, и чтобы на экране не было мусора, DASM автоматически переключает режим отображения на монохромный.
    Во втором случае достигнута верхняя граница буфера и процесс компиляции прерывается, с выводом соответствующего сообщения об ошибке. Синтетический тест показал, что при данном размере буфера возможна компиляция выходного кода размером до 20 Кб. Предельное значение может варьироваться в зависимости от содержимого реального кода программы и количества используемых меток/констант.
    На время использования буфера, на квазидиске во временном файле "~DASM" сохраняется содержимое области драйверов B000..BFFFh ОС DSDOS, по окончании компиляции оно восстанавливается (временный файл удаляется).

    Все вышеописанные процессы с буферизацией актуальны для текущей версии, не использующей расширенное ОЗУ квазидиска.


    Системы счисления (с/с)

    DASM поддерживает следующие с/с:

    1) Двоичная (bin)
    2) Восьмеричная (oct)
    3) Десятичная (dec)
    4) Шестнадцатеричная (hex)

    Двоичные числовые константы обозначаются символом "b" (или "%") после всех разрядов числа. Допустимые цифры "0" и "1". Незначащие нули в начале можно опускать. Максимальное количество разрядов - 16.

    Пример:
    Код:
    MVI A,1111b ;  [A] = 0Fh
    LXI H,1111000010101110% ;  [HL] = F0AEh
    Восьмеричные числовые константы обозначаются символом "o" после всех разрядов числа. Допустимы цифры "0..7". Незначащие нули в начале можно опускать. Максимальное количество разрядов - 6.

    Пример:
    Код:
    MVI A,17o ;  [A] = 0Fh
    LXI H,177777o ;  [HL] = FFFFh
    Десятичные числовые константы записываются в привычном виде и не требуют спец. символов после цифр. Допустимы цифры "0..9". Незначащие нули в начале можно опускать. Максимальное количество разрядов - 5.

    Пример:
    Код:
    MVI A,15 ;  [A]=0Fh
    LXI H,32768 ;  [HL] = 8000h
    Шестнадцатеричные числовые константы обозначаются символом "h" после всех разрядов числа. Допустимы цифры "0..9" и буквы "A..F" (или "a..f"). Незначащие нули в начале можно опускать. Если число начинается с буквы, то перед ней обязательно требуется указывать незначащий ноль, в противном случае компилятор интерпретирует значение, как метку. Максимальное количество значащих разрядов - 4.

    Пример:
    Код:
    MVI A,0Fh ; [A]=15
    LXI H,0F800h ;  [HL] = F800h
    Регистр символа признака с/с также не имеет значения.


    Выражения

    В качестве числовых значений операндов возможно использование выражений с применением числовых/символьных констант, меток и следующих математических и логических операций:

    1) Сложение "+"
    2) Вычитание "-"
    3) Умножение "*"
    4) Деление "/"
    5) Побитовая инверсия - "~" *
    6) Логическое И - "&"
    7) Логическое ИЛИ - "|"
    8) Логическое ИСКЛЮЧАЮЩЕЕ ИЛИ - "#"

    * в случае слов действует только на младший байт (для исключения ложной ошибки "Значение вне диапазона" при использовании с однобайтовыми операндами), для полной инверсии слова можно использовать конструкцию "Var # FFFFh"

    Вычисление производится последовательно слева-направо, без приоритетов. Знак инверсии ставится перед числом/константой/меткой, остальные - между ними. При взятии значения с инверсией, сначала применяется инверсия, а затем выполняет операция.
    При вычислении все значения представлены в виде слов, т.о. результат всегда находится в диапазоне 0..65535. Если при выполнении операции происходит переполнение или "уход в минус", то выводится ошибка: "Переполнение", при этом результат вычисления остаётся корректный (с учётом отбрасывания битов за пределами слова). Например, "65535 + 2" вызовет ошибку переполнения, а в результат запишется значение "1". Аналогично, "0 - 1 = FFFFh" .
    В случае однобайтовых операндов компилятор проверяет, чтобы значение выражения было в диапазоне 0..255, и при превышении верхней границы выводит ошибку: "Значение вне диапазона". При этом в выходной код записывается значение младшего байта слова результата.

    Например:
    Код:
    VAR:EQU 0A8FFh
    MVI A,VAR ; здесь компилятор выдаст ошибку-предупреждение, а регистру [A] будет присвоено значение FFh
    При попытке деления на ноль компилятор выводит соответствующую ошибку, при этом дальнейшая обработка выражения прерывается, в выходной код записывается результат, посчитанный до момента обнаружения ошибки.

    Скрытый текст

    Некоторые примеры выражений:
    Код:
    MVI B,1111b + ~0Fh ; регистру [A] будет присвоено значение FFh
    
    VAR1:EQU 0F800h
    VAR2:EQU 0F8FEh
    VAR3:EQU VAR2 - VAR1 ;  VAR3 = FEh (F8FEh - F800h)
    MVI A,VAR2-VAR1 ; ошибки выхода за границы байта не будет, регистру [A] будет присвоено значение FEh (F8FEh - F800h)
    
    VAR4:EQU VAR1 # 800h ; F800h xor 800h = F000h
    LXI H,VAR4 | 2FFh + ~VAR3 ;  VAR3 or 2FFh = F2FFh, инверсия от VAR3 = 01h, [HL] = F2FFh + 01h = F300h
    
    VAR5:EQU 'a' ;  VAR5 = 61h
    MVI C,VAR5 & 5Fh ;  регистру [C] будет присвоено значение 'A' (41h)
    MVI A,'b' & 5Fh ;  регистру [A] будет присвоено значение 'B' (42h)
    
    CALL VAR4 | VAR5 ;  вызов п/п по адресу F061h (F000h or 61h)
    DCR B
    JNZ $ - ~VAR3 ;  условный переход к предыдущей команде (DCR B)
    
    VAR6:EQU $+1 ;  VAR6 = адресу операнда следующей команды (MVI A,0)
    MVI A,0
    
    LXI D,VAR6 / 20o ;  [DE] = VAR6/16
    
    VAR7:EQU 'A' * 'B' # 0FFFFh ;  VAR7 = инверсия от (41h * 42h) = EF3Dh
    [свернуть]



    Команды ассемблера

    DASM поддерживает два вида команд: внешние и внутренние. Внешние задаются через параметры командной строки, внутренние - в исходном тексте программы.


    Режим трансляции

    Команда имеет два варианта: внешний и внутренний.

    Внешняя - ключ "/n", внутреняя - MODE n
    где n - номер режима (1, 2 или 3)

    Приоритет внутренним командам, причём их может быть в тексте исходника несколько, режим меняется динамически на каждом проходе по факту обработки очередной команды MODE. По-умолчанию компилятор использует режим №1.

    В режиме №1 компилятор при обнаружении ошибки, выводит на экран причинную строку исходника, под ней текстовое описание ошибки и приостанавливает обработку, продолжение - по нажатию любой клавиши. В планах сделать возможность перехода в текстовый редактор к строке с данной ошибкой.
    По окончании компиляции выводится следующая информация:

    - кол-во ошибок;
    - кол-во меток/констант;
    - адреса блока выходного кода и его длина;
    - имя и номер рабочей страницы ОЗУ выходного файла.

    При выходе в ОС, блокируется возврат в оболочку ОС DSDOS, чтобы можно было проанализировать результат работы.

    Режим №2 аналогичен предыдущему, в результаты добавлена распечатка таблицы меток/констант.

    Режим №3 аналогичен режиму №1, но при обнаружении ошибок обработка не приостанавливается, и блокировка возврата в оболочку - только при наличии ошибок.

    Притормозить вывод сообщений компилятора и распечатку таблицы меток/констант можно нажатием и удержанием любой клавиши, кроме [Esc] - она прерывает компиляцию с выходом в ОС.

    Во время компиляции на экран в развлекательных целях выводится символьная анимация процесса =)


    Система команд

    Внутренняя команда. Синтаксис: CPU type
    где type=0 - только команды МП i8080, type=1 - разрешена обработка доп. команд МП Z80.

    В режиме "0" разрешена компиляция только команд МП i8080 (КР580ВМ80), доп. команды Z80 вызовут ошибку и процесс компиляции будет прерван. Команда полезна для самоконтроля программиста в случаях написания кода под платформу на МП i8080. По-умолчанию DASM использует режим "0".

    Дополнительные команды Z80:

    EXX - переключение набора РОН на альтернативный;
    EXA - переключение набора регистров PSW на альтернативный (аналог EX AF,AF' в синтаксисе Zilog)

    В планах добавление: JR <offs>, JR(cond) <offs>, BIT r,n, SET r,n, LDIR и других.


    Имя и номер рабочей страницы ОЗУ выходного файла

    Внутренняя команда. Синтаксис: FILE filename [, page]
    где filename - имя файла (от 1 до 8 символов)
    page - номер рабочей страницы ОЗУ (0 или 1).

    Имя файла указывается в формате ОС DSDOS. Указание диска не допускается, файл всегда сохраняется на рабочий диск, где размещеных файлы исходного кода программы.
    Номер рабочей страницы ОЗУ необязательный параметр, по-умолчанию его значение = 0.


    Рабочая страница ОЗУ выходного файла

    Внутренняя команда. Синтаксис: PAGE page
    page - номер рабочей страницы ОЗУ (0 или 1).

    Задаёт номер рабочей страницы ОЗУ выходного кода (без задания имени файла). Её действие полностью аналогично применению параметра "page" в предыдущей команде.


    Вставка (включение) текста в исходник

    Внутренняя команда. Синтаксис: INCL filename
    где filename - имя файла (от 1 до 8 символов)

    Имя файла указывается в формате ОС DSDOS. Указание диска не допускается, включаемый файл должен присутствовать на рабочем диске, где размещен(ы) файл(ы) исходного кода программы.
    Команда вставляет в текущую позицию текст из файла, т.о. он обрабатывается в составе основного текста программы.
    Отсутствие включаемого файла на диске прервёт компиляцию.
    Вставка текста требует наличия соответствующего кол-ва свободной памяти в ОЗУ буфера исходника. При нехватке памяти компиляция будет прервана с ошибкой "Недостаточно ОЗУ".


    Вставка блока данных

    Внутренняя команда. Синтаксис: DATA filename
    где filename - имя файла (от 1 до 8 символов)

    Имя файла указывается в формате ОС DSDOS. Указание диска не допускается, включаемый файл должен присутствовать на рабочем диске, где размещен(ы) файл(ы) исходного кода программы.

    Команда вставляет в выходной код по текущему адресу данные из файла. Счётчик адресов увеличивается на длину файла.
    Отсутствие включаемого файла на диске прервёт компиляцию.
    При нехватке памяти в буфере выходного кода компиляция будет прервана с ошибкой "Недостаточно ОЗУ".


    Установка счётчика адресов

    Внутренняя команда. Синтаксис: ORG addr
    где addr - физический адрес (0000..FFFFh, допускается использование выражений).

    Команда инициализирует текущий счётчик адресов.
    Отличительной особенностью DASM является документированная возможность многократного применения команды в тексте программы!
    Первая встретившаяся компилятору команда ORG также определяет адрес посадки выходного файла. Последующие влияют только на адресацию внутри идущего за ними кода. По-умолчанию ORG=0.
    Применение нескольких команд ORG позволяет делать вставки кода, предназначенного для работы в других областях памяти.
    При вставке такого "внешнего" кода посреди основного, необходимо предварительно сохранять в переменной текущее значение счётчика адресов, а после окончания "внешнего" кода восстанавливать с помощью повторной команды ORG, в качестве параметра которой указывать сохранённый адрес плюс длину "внешнего" кода.

    Пример:
    Код:
    ORG 0
    ; ...ОСНОВНОЙ БЛОК
    
    EXT_CUT: ;  адрес окончания (прерывания) основного блока
    
    ORG 0F300h ;  ORG "внешнего" блока = F300h
    
    EXT_BEGN: ;  адрес начала "внешнего" блока
    
    ; ...код "внешнего" блока
    
    EXT_END: ;  адрес конца "внешнего" блока
    
    ORG EXT_END - EXT_BEGN + EXT_CUT ;  восстановление счётчика адресов основного блока
    
    ; ...ПРОДОЛЖЕНИЕ КОДА ОСНОВНОГО БЛОКА

    Условная компиляция

    В процессе работы DASM отслеживает состояние т.н. флага компиляции. Если флаг сброшен, то обработка кода не выполняется, компилятор в этом режиме воспринимает только команды условной компиляции и команду окончания текста END. Если флаг установлен, то компиляция выполняется в обычном режиме. По-умолчанию флаг компиляции всегда установлен, для его модификации в DASM есть три команды: IF, ELSE и ENDF, действие каждой из которых распространяется до появления следующей.

    Задание условия

    Внутренняя команда. Синтаксис: IF cond
    где cond - значение условия (0 или 1, допустимы любые значения от 0 до 65535).

    При cond=0 флаг компиляции сбрасывается (обработка команд выключена), при cond>0 флаг устанавливается (обработка команд включена).
    Условие может быть представлено выражением.

    Инверсия условия

    Внутренняя команда. Синтаксис: ELSE

    Изменяет значение флага компиляции на противоположное.

    Отмена условия

    Внутренняя команда. Синтаксис: ENDF

    Устанавливает флаг компиляции, обработка команд включается.

    Скрытый текст


    Пример:
    Код:
    Тип_платформы:EQU 0 ; 0 - "Орион-128", 1 - "Орион-ПРО"
    
    PT_KBRD_128:EQU 0F400h
    PT_KBRD_PRO:EQU 1Ah
    ; ...
    IF Тип_платформы
    IN PT_KBRD_PRO
    ELSE
    LDA PT_KBRD_128
    ENDF
    
    ANI 40h
    JZ IsCTRL
    ; ...
    [свернуть]



    Генерация массивов

    Массив одинаковых байтов

    Внутренняя команда. Синтаксис: DDB byte, count
    где byte - однобайтовая константа* (0..255)
    count - количество повторений (1..65535**)

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

    Команда является как бы комбинацией стандартных DB byte и DS count, она вставляет массив из count-элементов, заполненный константой byte.


    Массив одинаковых слов

    Внутренняя команда. Синтаксис: DDW word, count
    где word - двухбайтовая константа* (0..65535)
    count - количество повторений (1..32767**)

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

    Команда является как бы комбинацией стандартных DW word и DS count, она вставляет массив из count-элементов, заполненный константой word.


    Скрытый текст

    Пример кода, написанного с использованием нововведений DASM:
    Код:
    ; Классика жанра - "Хэллоу Ворлд!"
    ; (C) 2017 CoolHacker, 27.10.2017
    
    MODE 2
    CPU 0
    FILE HELLO$, 0
    
    ORG 0
    
    JMP Старт
    
    INCL BIOS.H
    INCL CONIO.H
    
    Старт:
    LXI H,MSG_HelloWorld
    CALL ShowMSG
    JMP EscSHELL
    
    MSG_HelloWorld:DB 13
    DDB '<', 10
    DB ' Хэллоу, Ворлд! '
    DDB '>', 10
    DB 0
    
    END
    [свернуть]


    __________________________________________________ __________________________________________________ ____________

    Ссылка для скачивания - http://denn.ru/8bit/orion/soft/dasm/ASSM$.ori

    ► Новый ассемблер будет включён в сборки ОС DSDOS v3.87 (coming soon...) вместо ассемблера «М&S».


    Скриншоты интерфейса из эмулятора:


    * мультифайловая компиляция


    * показ ошибки и распечатка таблицы меток


    Продолжение тут - http://zx-pk.ru/threads/21984-dsdos-...l=1#post936060
    Последний раз редактировалось Denn; 09.11.2017 в 01:46. Причина: добавлен пример кода с использованием нововведений DASM
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  4. #243
    Master
    Регистрация
    30.05.2017
    Адрес
    г. Алматы, Казахстан
    Сообщений
    902
    Спасибо Благодарностей отдано 
    62
    Спасибо Благодарностей получено 
    255
    Поблагодарили
    145 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Если была бы шапка с ссылками или хотя бы историей обновлений в первой сообщении этой темы, было бы проще ориентироваться или возможно это привлекло других орионщиков. Я например прочитав там, что данная ось работает только с КНГМД из
    Цитата Сообщение от Denn Посмотреть сообщение
    из журнала РАДИО №12/1992, стр. 14-15
    дальше и не интересовался. О том что новые версии работают и с другими контроллерами узнал из параллельной ветки.

  5. #244
    Guru Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,220
    Спасибо Благодарностей отдано 
    473
    Спасибо Благодарностей получено 
    899
    Поблагодарили
    591 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Sancho45, замечание справедливое. Я давно уже думал о том, что начало темы не отражает текущей ситуации, а информация слишком "размазана" по портянкам. С другой стороны вся инфа взаимосвязана и исторически последовательна, поэтому грохать интро не хотелось бы.
    Были мысли каким-то образом "похоронить" эту тему и завести новую, но наверное это не очень хорошо...
    Правильнее будет сделать подробную страничку на стороннем ресурсе, а здесь в заглавном посте дать ссылку. Пока актуальная информация коллекционируется тут - vk.com/dsdos_orion.

    По КНГМД скорее наоборот: в будущих версиях планирую уйти от штатной поддержки дискет, т.к. сейчас актуальнее НЖМД и SDHC, а код обслуживания дискет занимает место, которого катастрофически не хватает.
    Последний раз редактировалось Denn; 29.10.2017 в 17:40.
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  6. #245
    Guru Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,220
    Спасибо Благодарностей отдано 
    473
    Спасибо Благодарностей получено 
    899
    Поблагодарили
    591 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от OrionExt Посмотреть сообщение
    Скажу честно. Прикольная система. Но расширения от слова нуль - тут.
    Вот это тоже относится к предыдущему замечанию. Недостаток информации. Есть и расширения, и возможность подмены модулей ОС, установка своих драйверов, взаимодействие модулей и т.д..
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  7. #246
    Activist Аватар для Stampmaker
    Регистрация
    08.02.2015
    Адрес
    г. Санкт-Петербург
    Сообщений
    240
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    13
    Поблагодарили
    5 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Denn Посмотреть сообщение
    По КНГМД скорее наоборот: в будущих версиях планирую уйти от штатной поддержки дискет
    как вариант использовать подключаемый драйвер

  8. #247
    Guru Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,220
    Спасибо Благодарностей отдано 
    473
    Спасибо Благодарностей получено 
    899
    Поблагодарили
    591 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Stampmaker Посмотреть сообщение
    как вариант использовать подключаемый драйвер
    Именно так.
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  9. #248
    Guru Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,220
    Спасибо Благодарностей отдано 
    473
    Спасибо Благодарностей получено 
    899
    Поблагодарили
    591 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    Post Ассемблер DSDOS

    Программирование на Ассемблере DSDOS

    Для существенного упрощения процесса написания программ на ассемблере в среде ОС DSDOS, предлагается библиотечная модель организации кода, в которой программный интерфейс ОС и наборы некоторых функциональных узлов оформлены в виде т.н. библиотек, подключаемых к программе с помощью инструкции INCL <file>. Т.о. основной код программы не загромождается лишней информацией, а для обращения к ресурсам ОС и подпрограммам библиотек используются осмысленные имена констант, переменных и меток. Назначение подпрограмм библиотек и список их входных/выходных параметров можно в любой момент посмотреть в самих файлах библиотек, открыв их в редакторе.

    Предлагается следующая организация структуры DSDOS-программы:

    1. Блок описания (назначение, номер версии, информация об авторе, дата создания/изменения и т.п.);
    2. Блок настройки компилятора (режим трансляции, имя и адрес посадки файла выходного кода);
    3. Стартовый блок (контроль платформы, среды и версии ОС DSDOS, если требуется);
    4. Блок программного интерфейса ОС и подключаемых библиотек;
    5. Основной код программы.

    В случае многофайлового проекта п.1 можно вынести непосредственно в файл проекта *.PR, пп.2-4 в файл заголовочного модуля, а п.5 в модуль(и) основного кода.
    В будущем планируется разработка т.н. AssmBuilder™ - среды разработки, в которой создание кода будет частично автоматизировано, а именно выбор модели организации кода, подключение необходимых библиотек, генерация нужного количества файлов-модулей, контроль версий и т.п. будет выполняться автоматически на этапе создания проекта, на основании выбора опций.
    А пока среда для разработки DSDOS-программ оформлена в виде набора файлов библиотек, стартового шаблона будущей программы согласно вышеописанному концепту и пакетного файла для генерации необходимой среды на диске Ориона.

    Пакет разработки можно скачать по ссылке - http://denn.ru/8bit/orion/soft/dasm/dsdos_sdk.rar или в OriNET - \OriNET\[DSDOS]\API\

    Архив содержит следующий набор файлов (в формате *.ORI):

    DSDOS.L - базовая библиотека с описанием точек входа ресурсов ОС DSDOS, используется всеми остальными модулями;
    BIOS.L - интерфейс модуля BIOS (версия ОС, установка расширений BIOS);

    CONIO.L - интерфейс базовых подпрограмм модуля консольного ввода-вывода;
    KBRD.L - интерфейс доп. подпрограмм обслуживания клавиатуры модуля консольного ввода-вывода;
    CURSOR.L - интерфейс подпрограмм управления курсором модуля консольного ввода-вывода;
    TXTSCR.L - интерфейс дополнительных подпрограмм модуля консольного ввода-вывода (выбор экрана, оконный режим, работа с цветом и др.);
    EXTDRV.L - интерфейс установки расширений модуля консольного ввода-вывода;

    BOOT.L - интерфейс настройки среды при загрузке ОС (тест аппаратной части, установка доступа дисков и др.);
    RAMTOP.L - интерфейс управления/контроля верхней границы ОЗУ пользователя;
    CCP.L - интерфейс командного процессора;
    ERRORS.L - интерфейс обработки ошибок ОС;
    SHELL.L - интерфейс управления оболочкой ОС;

    CLBRD.L - интерфейс работы с буфером обмена;
    RTC.L - интерфейс контроля системной даты и времени (установка, запрос, синхронизация с сервером, преобразование форматов);
    RS232.L - интерфейс работы с последовательными портами и ORI-сервером;

    FILE.L - интерфейс подпрограмм работы с файлами и дисками;
    DIR.L - интерфейс подпрограмм работы с каталогом;
    ROMD.L - интерфейс подпрограмм обслуживания ROM-диска;
    FDD.L - интерфейс подпрограмм обслуживания КНГМД;

    CMDL.L - библиотека обработки параметров командной строки;

    !MKWORK% - пакетный файл для генерации среды разработки на квазидиске ПРК Орион;
    !NEW.AS - шаблон новой программы.

    Содержимое архива необходимо развернуть в папку на виртуальном диске (или на дискете), открыть диск на Орионе и запустить файл !MKWORK%. В результате, на диске "B:" будет создана среда разработки: файлы библиотек, файл шаблона новой программы и конфигурационный файл для редактора Gemini-EDIT со списком необходимых открытых файлов. Далее остаётся только запустить редактор (по клавише "ЗБ" из оболочки), в котором откроется файл шаблона и можно начинать писать свою программу.


    Скрытый текст

    Содержимое файла шаблона новой программы:
    Код:
    ; *** Шаблон программы для ОС DSDOS ***
    ; © 2017 <Автор> /Регион/
    ; Версия: 1.0a
    
    ; Создано:  08.11.2017
    ; Изменено: 15.11.2017
    
    ; *** Настройки компилятора ***
    
    MODE 3 ; режим трансляции (1..3)
    FILE NEWPROG$ ; имя выходного файла
    ORG 0 ; а/п программы
    
    ; *** Стартовый модуль (обязательный) ***
    
    ; настройка проверки аппаратной части:
    HW_TYPE:EQU 0; 0 - без проверки платформы, 1 - требуется Орион-128, 2 - требуется Орион-ПРО
    HW_RAM:EQU 0; 0 - без проверки объёма ОЗУ, 1 - 64 кб, 2 - 128 кб, 4 - 256 кб, 8 - 512 кб требуется;
    
    ; настройка проверки версии ОС:
    OS_VERSION:EQU 38h; 0 - без проверки, иначе - требуемый номер версии (BCD)
    
    INCL START.L ; размещается в самом начале кода!
    
    
    ; *** Интерфейс п/п ОС DSDOS ***
    
    INCL DSDOS.L
    ; версия ОС, модуль расширения BIOS
    ;INCL BIOS.L
    ; консольный ввод-вывод
    INCL CONIO.L
    ;INCL KBRD.L
    ;INCL CURSOR.L
    ;INCL TXTSCR.L
    ;INCL EXTDRV.L
    ; загрузка ОС, среда, оболочка
    ;INCL BOOT.L
    ;INCL RAMTOP.L
    ;INCL CCP.L
    ;INCL ERRORS.L
    ;INCL SHELL.L
    ; буфер обмена
    ;INCL CLBRD.L
    ; дата/время
    ;INCL RTC.L
    ; последовательный порт, ORI-сервер
    ;INCL RS232.L
    ; файловая система, диски
    ;INCL FILE.L
    ;INCL DIR.L
    ;INCL ROMD.L
    ;INCL FDD.L
    
    
    ; *** Библиотеки ***
    
    ;INCL CMDL.L
    
    
    ; *** Основной код программы ***
    
    START:
    
    RET
    
    END
    В блоке подключения файлов указан полный базовый список библиотек, включение большинства которых закомментировано. Дело в том, что включение библиотек увеличивает выходной код программы, в связи с этим в реальной программе имеет смысл подключать только необходимые.
    [свернуть]


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


    Стартовый блок

    Важно:
    - код стартового блока должен располагаться в самом начале программы (включение модуля START.L), на него будет передано управление операционной системой при запуске программы!
    - основной код программы должен начинаться с метки "START", на неё в случае успешного запуска передаётся управление из модуля стартового блока!

    Для настройки параметров стартового модуля требуется обязательная инициализация следующих переменных:

    HW_TYPE - контроль платформы: 0 - не выполнять, требуется: 1 - Орион-128, 2 - Орион-ПРО;
    HW_RAM - контроль объёма ОЗУ: 0 - не выполнять, требуется: 1 - 64 кб, 2 - 128 кб, 4 - 256 кб, 8 - 512 кб;
    OS_VERSION - контроль версии ОС: 0 - не выполнять, иначе - требуемый номер версии (в двоично-десятичном виде, например 38h = версия не ниже 3.8).

    Стартовый блок осуществляет проверку на запуск программы в среде ОС DSDOS, и в случае отсутствия таковой выводит средствами Монитора ПРК "Орион" сообщение "ПО для ОС DSDOS", по нажатию любой клавиши передаётся управление по адресу F800h.
    В случае активации контроля платформы, выполняется проверка с помощью соответствующей функции ОС. При несоответствии выводится сообщение "Требуется ОРИОН-xxx" (вместо "xxx" тип требуемой платформы) и производится выход в ОС.
    При активации контроля объёма ОЗУ, выполняется соответствующая проверка (через API DSDOS), и если объём имеющегося ОЗУ ПРК меньше требуемого, то выводится сообщение "Требуется xxx Кб ОЗУ" (вместо "xxx" требуемый объём ОЗУ) и производится выход в ОС.
    В случае активации проверки версии ОС, таковая выполняется по принципу "больше или равна указанной". Если текущая версия ОС ниже требуемой, то осуществляется выход в ОС с сообщением "Требуется ОС vX.X".

    Если какой-либо контроль неактивирован (параметр равен 0), то в финальную программу не включается соответствующий фрагмент кода проверки.


    Имена меток системных библиотек

    DASM поддерживает регистрозависимое, а также русскоязычное написание имён меток, т.о. программист может творчески подойти к процессу. Чтобы выделить подпрограммы, переменные и константы системных библиотек, их имена пишутся только заглавными буквами, разделение смысловых конструкций с помощью символа нижнего подчёркивания "_".
    Имена системных констант начинаются с конструкции "DEF_...", имена системных переменных с "VAR_...", имена системных подпрограмм по принципу "ОБЪЕКТ_ДЕЙСТВИЕ" (например, FILE_LOAD). Последнее (касательно имён п/п) не является строгим правилом, имена п/п установки параметров начинаются с действия "SET_...", п/п запроса параметров "GET_..." (например, SET_DISK, GET_CURS_POS).


    Пример программы (обработка параметров командной строки)

    В качестве примера рассмотрим программу, которая анализирует командную строку, и если находит там параметры или ключи, то выводит их на экран в порядке обнаружения (слева-направо). Для упрощения задачи программиста используется готовая библиотека CMDL.L, которая включена в пакет разработки.

    Скрытый текст

    Код программы:
    Код:
    ; *** Пример обработки командной строки ***
    ; (C) 2017  Соловьев Д.Н. /Санкт-Петербург/
    ; 15.11.2017
    
    ; *** Настройки компилятора ***
    
    MODE 3
    FILE CMDTEST$
    ORG 0
    
    ; Стартовый модуль (обязательный)
    
    ; настройка проверки аппаратной части:
    HW_RAM:EQU 0
    HW_TYPE:EQU 0
    
    ; настройка проверки версии ОС:
    OS_VERSION:EQU 38h; требуемый номер версии
    
    INCL START.L
    
    
    ; *** Интерфейс п/п ОС DSDOS ***
    
    INCL DSDOS.L
    INCL SHELL.L
    INCL CONIO.L
    
    
    ; *** Библиотеки ***
    
    INCL CMDL.L
    
    
    ; *** Переменные ***
    
    VAR_COUNT:DB 0; кол-во параметров +1
    
    
    ; *** Основной код программы ***
    
    START:
    ; получение кол-ва параметров ком.строки
    CALL GET_CMDL_COUNT
    RZ
    MOV A,B
    INR A
    STA VAR_COUNT
    
    MainLOOP:
    ; цикл получения и вывода значений параметров
    LDA VAR_COUNT
    SUB B
    ADI '0'
    STA VAR_NUMBER
    
    CALL SHOW_MSG
    DB 13,'Параметр #'
    VAR_NUMBER:DB 'x = ',0
    
    ; анализ очередного параметра командной строки
    CALL GET_CMDL_ITEM
    RC
    JZ PrintKEY
    
    PrintITEM:
    ; вывод значения параметра
    LDAX D
    CPI ' '+1
    JC NextITEM
    MOV C,A
    CALL PRINT_C
    INX D
    JMP PrintITEM
    
    PrintKEY:
    ; вывод значения ключа "/x" или "-x"
    MVI C,'■'
    CALL PRINT_C
    MOV C,A
    CALL PRINT_C
    
    NextITEM:
    ; проверка на окончание
    DCR B
    JNZ MainLOOP
    JMP SHELL_OFF
    
    END
    [свернуть]


    ОС при успешном запуске программы передаёт ей в регистровой паре [DE] адрес указателя на содержимое командной строки, следующее сразу за именем программы. Если параметры отсутствуют, то по адресу в [DE] будет байт признака окончания строки 00h (в ОС считается признаком конца любой байт со значением меньше 20h). Если пользователь при запуске программы ввёл доп. параметры, то они разделяются символом пробела, а ключи (специальные параметры, указывающие на режим работы программы) начинаются с символа "/" или "-".
    При старте с помощью подпрограммы GET_CMDL_COUNT библиотеки CMDL.L мы сначала определяем количество доп. параметров командной строки. Если установлен флаг нуля (<Z>=1), то это означает, что доп. параметры отсутствуют, и мы командой RZ выходим в ОС. В противном случае в регистре [B] у нас содержится общее количество доп. параметров, введённых пользователем, которое мы инкрементируем и сохраняем в переменную VAR_COUNT для последующего вычисления номера очередного обрабатываемого параметра.
    Далее идёт главный цикл обработки параметров. Сначала с помощью подпрограммы SHOW_MSG библиотеки CONIO.L выводится сообщение: "Параметр №xx". Затем с помощью подпрограммы GET_CMDL_ITEM запрашиваем очередной параметр командной строки и в зависимости от его типа (ключ или нет) производим посимвольный вывод содержимого параметра (с помощью подпрограммы PRINT_C библиотеки CONIO.L) до символа пробела или окончания строки. Подпрограмма GET_CMDL_ITEM использует указатель в регистровой паре [DE], содержимое которой портить нельзя!
    После уменьшаем счётчик количества параметров (в регистре [B]), делаем проверку на окончание и переходим на начало цикла.
    В конце обработки всех параметров выходим в ОС через подпрограмму отключения автовозврата в оболочку SHELL_OFF библиотеки SHELL.L. Вызов последней необходим для того, чтобы была возможность увидеть результаты работы программы в случае присутствия доп. параметров в командной строке.



    [пост редактируется...]
    Последний раз редактировалось Denn; 15.11.2017 в 17:54.
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  10. #249
    Guru Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,220
    Спасибо Благодарностей отдано 
    473
    Спасибо Благодарностей получено 
    899
    Поблагодарили
    591 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    Lightbulb DSDOS v3.87

    Обещанная "предновогодняя" сборка ОС DSDOS v3.87 для обеих платформ: Орион-128 и Орион-ПРО.
    Почти год не выкладывал обновления, за это время накопилось некоторое количество изменений. Вот краткий список:

    ► новый интерфейс загрузчика;
    ► упразднена возможность загрузки ОС с дискеты;
    ► добавлен автодетект RAM-дисков (ЭД™ или RAM7) и подгрузка соответствующих драйверов;
    ► поддержка RTC на базе БИС КР512ВИ1;
    ► автосинхронизация даты и времени с ORI-сервером при загрузке ОС;
    ► регистрация платформы на ORI-сервере (требуется сервер v3.12 и выше!);
    ► отображение даты и времени в оболочке SHELL (при наличии в системе RTC);
    ► некоторые доработки модуля ввода-вывода (CONIO);
    ► полная русификация краткой справки по командам ОС (в CCP);
    ► в версии утилиты FORMAT$ для ПРК "Орион-128" добавлено форматирование диска "E:";
    ► оптимизация кода всех модулей ОС, ещё большее ускорение вывода символов на экран;
    ► программная блокировка возврата в оболочку;
    ► в оболочке добавлена команда быстрого возврата в текстовый редактор, независимо от содержимого панелей;
    ► также добавлена команда просмотра/редактирования файлов в hex-виде (утилита HEXEDIT$);
    ► переработан код текстового редактора Gemini-EDIT, ускорены алгоритмы обработки фрагментов текста и поиска/замены;
    ► изменения некоторых горячих клавиш в текстовом редакторе, добавление новых комбинаций;
    ► в настройках текстового редактора по-умолчанию настроен шаблон рабочих файлов "*.AS" вместо "*.TXT";
    ► в сборку включён новый Ассемблер DSDOS вместо "M&S";
    ► в сборках "Программист" включены библиотеки API DSDOS, портов ввода-вывода и шаблон исходного кода новой программы под DSDOS;
    ► традиционная оптимизация кода системных утилит, вывод справки с отменой возврата в оболочку;
    ► в сборки добавлена утилита обслуживания мини-программатора популярных ПЗУ Winbond 27C512 (публикация будет чуть позже).

    Из печального: очень хотел, но, увы, физически не успел сделать поддержку HDD и SDHC. С другой стороны, есть чем заняться в следующем году


    Загрузчик (BOOT)

    Вывод информации переведён на API DSDOS, с соответствующими скоростью и красотой



    Вывод информации загрузчика становится возможным после загрузки модулей ОС, до этого момента в левом верхнем углу экрана штатными средствами ПЗУ Монитора выводятся точки - каждая соответствует одному успешно загруженному модулю. Также средствами монитора выводится сообщения об ошибке, если таковая случится в процессе загрузки модуля.
    По-прежнему, во время загрузки ОС производится автодетект аппаратуры, при этом на экран выводится соответствующая информация.
    Для ПРК "Орион-128" дополнительно теперь определяется наличие RAM-диска (ЭД™ или быстрый RAM7), подгружается соответствующий драйвер и активируется диск "E:".
    В случае обнаружения соединения с ORI-сервером производится синхронизация текущей даты, а в случае наличия в системе RTC - синхронизация их показаний даты и времени с сервером.
    Загрузка ОС по-прежнему очень быстрая, поэтому если требуется поизучать выводимую загрузчиком информацию, то нужно нажать и удерживать любую символьную клавишу.


    Поддержка RTC

    Для обеих платформ теперь поддерживаются аппаратные часы реального времени на отечественной БИС КР512ВИ1.
    Для ПРК "Орион-128" RTC должна находиться по адресам F7Bxh, для "Орион-ПРО" по адресам 5xh.
    Утилита DATE$ теперь записывает информацию о текущей дате в RTC. Для работы с показаниями времени добавлена отдельная утилита TIME$. После первого запуска RTC (или после фатального провала питания) требуется инициализация с помощью утилиты TIME$, которая программирует RTC определённым образом в формате ОС DSDOS (24-часовой формат, без автоперевода зимнее-летнее, двоичный формат хранения, а также сигнатура DSDOS в CMOS).
    В оболочке ОС (SHELL), справа в строке команд/статуса всегда отображаются дата и время (если RTC присутствует и корректно инициализирована).



    Программно RTC доступны через соответствующие функции API DSDOS.


    Оптимизация кода

    Периодически находятся лазейки для ускорения алгоритмов и уменьшения объёма кода. Всё это крайне актуально на фоне слабых ресурсов ПРК. Повышается комфорт работы (ускоряется отклик системы). Уменьшение объёма кода позволяет добавлять новый функционал.
    На этот раз удалось скомбинировать вывод символа с помощью стековых операций с пропуском "лишних" переключений банков ОЗУ, что дало небольшой, но всё же ощутимый прирост скорости.
    В текстовом редакторе оптимизация коснулась самых часто используемых во время редактирования алгоритмов стяжки/раздвижки текста, тестирования всего файла на ошибки и поиска/замены фрагмента.
    В драйверах RAM-дисков (ЭД™ и RAM7) ощутимо ускорена запись файлов за счёт отказа от пересохранения всего каталога, по факту записывается только один заголовок причинного файла (16 байт).


    Изменения в модуле ввода-вывода

    В подпрограмме ввода символа (01h или INPUT_KEY в библиотеке CONIO.L) добавились выходные параметры - регистры флагов предустановлены в зависимости от того, были нажаты или нет, часто используемые клавиши: [Enter], [Esc] или [F4]. Это упрощает код обработки в ПО.

    Дополнены управляющие коды подпрограммы вывода символа (00h или PRINT_C в библиотеке CONIO.L). Добавлен код табуляции (смещение к ближайшей позиции, кратной восьми). Добавлен код вывода символа из набора курсоров: 1Ch+<код>, где "код" = 00..1Fh; на экран выводится соответствующий курсор как обычный символ (не XOR-наложением).
    Добавлен код включения/выключения цветного вывода символов: 1Eh+<код>, где код = 00h (монохромный) или 01h (цветной). Скорректирована отработка управляющего кода 18h из крайнего правого угла, теперь курсор переходит в левый верхний угол экрана (ранее был возврат каретки).

    Добавлена новая п/п ввода hex-байта (06h или INPUT_BYTE_HEX в библиотеке CONIO.L).


    Управление признаком возврата в оболочку (SHELL)

    При запуске программ из оболочки по [Enter], выставляется признак возврата в оболочку при выходе из программы. Это удобно. Но! Бывают ситуации, когда требуется вдумчиво изучить информацию, которую программа вывела на экран в процессе работы и осуществила выход в ОС. Ранее для этого был только механизм удержания [Shift], что иногда не удобно.
    Теперь введена возможность программно управлять признаком возврата в оболочку. Например, большинство утилит, будучи запущеные без параметров, выводят на экран справку. В настоящей сборке все утилиты в этом режиме отключают возврат в оболочку.
    Программно контроль признака возврата доступен через библиотеку SHELL.L.

    В API DSDOS также появилась возможность получить код последней системной ошибки (п/п GET_LAST_ERROR в библиотеке ERRORS.L).


    Новый Ассемблер DSDOS

    Предлагает более удобный интерфейс, более богатый функционал и позволяет использовать библиотечную модель программирования. Поддерживает мультифайловую компиляцию и позволяет писать ПО большого объёма.
    Подробно описан в предыдущем посте.


    Текстовый редактор Gemini-EDIT v5.5

    Является основным инструментом при написании ПО на ПРК "Орион". В связи с активным использованием "вражеской" клавиатуры PS/2 и навыкам от IBM-совместимых ПК, были адаптированы комбинации горячих клавиш. В основном изменения коснулись ухода от некоторых сочетаний вида [АР2]-затем-<буква> в пользу сочетаний [Ctrl]+<буква>, а также дублирование вариантов сочетаний для работы с буфером обмена (Ctrl+[Ins], Shift+[Ins], Shift+[Del], Ctrl+[C], Ctrl+[V]).
    Более подробно см. встроенную справку редактора.
    Также для повышения комфорта при программировании на Орионе, сделан быстрый возврат в редактор (клавиша [Забой] в оболочке) и шаблон рабочих файлов редактора по-умолчанию - "*.AS". Возможно расширение шаблона к виду "*.A", в таком случае в каталог также будут включены файлы с расширением ".A".
    Команда вызова внешней программы из редактора (ранее Ctrl+[G], теперь Ctrl+[P]) ассоциирована с клавишей [P] - (P)roject. В случае компиляции ассемблером файлов проекта, удобно пользоваться именно этой функцией редактора, т.к. при обычном вызове ассемблера всегда подставляется текущий текстовый файл, что в случае редактирования AS-модуля приведёт к неверной обработке. С помощью [Esc]-затем-[P] нужно прописать вызов Ассемблера, а в качестве параметра указать имя файла проекта "*.PR", т.о. независимо от текущего редактируемого файла, компилироваться всегда будет весь проект. Последующие вызовы можно уже делать через [Ctrl]+[P], ввод параметров при этом не потребуется (они хранятся в настройках редактора).
    Сочетания [Esc]-затем-[G] и [Ctrl]+[G] изменены на работу с псевдографикой.


    Утилита FORMAT$ для ПРК "Орион-128"

    Добавлен функционал форматирования RAM-диска "E:". Утилита автоматически определяет тип RAM-диска (ЭД™ или RAM7) и применяет соответствующий алгоритм инициализации.


    ▼▼▼ Ссылки для скачивания различных вариантов сборок ▼▼▼

    Внимание! Архивы были обновлены 28.12.2017 !


    Для ПРК ОРИОН-128/512:

    ПЗУ ROM-диска объёмом 64 Кб

    ПЗУ ROM-диска объёмом 128 Кб

    ПЗУ ROM-диска объёмом 256 Кб

    ПЗУ ROM-диска объёмом 512 Кб

    Поддержка RAM5 (RAM-диск 1024 Кб в составе ЭД™ 1x1, порт #F50xh) и RAM7 (быстрый RAM-диск 1024 Кб в виде платы расширения, порт #F7Fxh) теперь автоматическая, никаких отдельных сборок для каждого варианта не требуется!


    Для ПК ОРИОН-ПРО:

    "Стандарт", ПЗУ ROM-диска объёмом 64 Кб
    "Стандарт", ПЗУ ROM-диска объёмом 256 Кб

    "Геймер", ПЗУ ROM-диска объёмом 64 Кб
    "Геймер", ПЗУ ROM-диска объёмом 256 Кб

    "Программист", ПЗУ ROM-диска объёмом 64 Кб
    "Программист", ПЗУ ROM-диска объёмом 256 Кб

    Внутри архивов под объёмы 256 Кб находится два варианта: одним полным образом (файл romdisk.bin) для новой версии ROM-диска, и соотв. кол-вом файлов по 64 Кб (файлы romdiskN.bin) для старого варианта (в составе мультикарты).
    Последний раз редактировалось Denn; 28.12.2017 в 23:12. Причина: Обновлены архивы сборок 28.12.2017! Кто скачaл ранее - перескачайте.
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  11. Этот пользователь поблагодарил Denn за это полезное сообщение:

    shapipovo (13.08.2019)

  12. #250
    Member Аватар для makbar
    Регистрация
    04.06.2016
    Адрес
    г. Ярославль
    Сообщений
    100
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sancho45 Посмотреть сообщение
    Если была бы шапка с ссылками или хотя бы историей обновлений в первой сообщении этой темы, было бы проще ориентироваться или возможно это привлекло других орионщиков. Я например прочитав там, что данная ось работает только с КНГМД из
    дальше и не интересовался. О том что новые версии работают и с другими контроллерами узнал из параллельной ветки.
    Разработчик КНГМД для Специалиста и Ориона128, автор SPDOS (журнал "Радио" 12/1992, 1-2/1993). Манускрипт, датированный 1993-94гг: Отладка контроллера SPDOS SPDOS v4.3

Страница 25 из 56 ПерваяПервая ... 212223242526272829 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 17
    Последнее: 26.12.2015, 23:22
  2. продам платы "Орион-128"
    от AHTuXPuCT в разделе Барахолка (архив)
    Ответов: 70
    Последнее: 19.06.2012, 20:39
  3. Платы ром-диска "Орион-128"
    от AL.EX в разделе Барахолка (архив)
    Ответов: 45
    Последнее: 10.06.2012, 12:54
  4. Куплю плату "Орион-ПРО"
    от АлександрПП в разделе Барахолка (архив)
    Ответов: 3
    Последнее: 15.05.2011, 20:48
  5. Ответов: 0
    Последнее: 15.08.2010, 14:38

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •