RUЭВМ
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.
Октябрь 2020
ПнВтСрЧтПтСбВс
   1234
567891011
12131415161718
19202122232425
262728293031 

Календарь Календарь

Последние темы
» Флейм только по теме "Радио-86РК".
автор barsik Сегодня в 08:51

» BDS-C лучший компилятор для разработки игр РК86
автор barsik Сегодня в 02:02

» Разное
автор Viktor2312 Сегодня в 01:00

» К210. Общая тема по GPIO. Практика.
автор ведущий_специалист Вчера в 19:52

» К210. Общая тема по GPIO. Теория.
автор Viktor2312 Вчера в 15:13

» Kendryte K210 достойный микроконтроллер с ИИ
автор Viktor2312 Вчера в 11:59

» Можно ли на бейсике написать динамичную игру для РК86 ?
автор barsik Вчера в 07:36

» Простые доработки ZX-48К: RAM-монитор в ПЗУ и экран на E000
автор barsik Вчера в 07:35

» Общие вопросы по ПЭВМ Ириша
автор Viktor2312 Ср Окт 28 2020, 19:54

» Радио-86РК: Расширение ПЗУ
автор barsik Ср Окт 28 2020, 08:04

» Язык программирования С.
автор Viktor2312 Вт Окт 27 2020, 23:56

» Радио-86РК: внешние видео-адаптеры
автор ведущий_специалист Вт Окт 27 2020, 17:06

» Улучшение видео возможностей РК86
автор ведущий_специалист Вт Окт 27 2020, 09:25

» Часы на ВЛИ
автор Viktor2312 Вт Окт 27 2020, 05:06

» "Орион-128". Статьи, заметки, очерки, разное...
автор barsik Пн Окт 26 2020, 17:35

» Эмулятор радио 86рк
автор barsik Пн Окт 26 2020, 13:20

» Программирование для РК86
автор barsik Сб Окт 24 2020, 10:52

» Разработка "Радио - РК2019М".
автор barsik Ср Окт 21 2020, 20:33

» БВС-1
автор Viktor2312 Вс Окт 04 2020, 20:58

» 4 Октября. Спутник-1.
автор Viktor2312 Вс Окт 04 2020, 15:49

» Тема для вопросов, консультаций и т. д...
автор Viktor2312 Пт Окт 02 2020, 12:02

» Улучшение цвета Специалиста
автор Viktor2312 Пт Окт 02 2020, 09:50

» ZX Microdrive
автор barsik Вт Сен 29 2020, 02:44

» Трансформатор электронный Taschibra 230/12В 60Вт для галогенных ламп. Перестал работать.
автор Viktor2312 Ср Сен 23 2020, 15:05

» Купил с али БП 12в 100w для питания LED лент подсветки. Проблема
автор Viktor2312 Вс Сен 20 2020, 18:07

Самые активные пользователи за месяц
Viktor2312
ОРИОН - ОРИОН-128 и магнитофон Vote_l10ОРИОН - ОРИОН-128 и магнитофон Voting10ОРИОН - ОРИОН-128 и магнитофон Vote_r10 
barsik
ОРИОН - ОРИОН-128 и магнитофон Vote_l10ОРИОН - ОРИОН-128 и магнитофон Voting10ОРИОН - ОРИОН-128 и магнитофон Vote_r10 
ведущий_специалист
ОРИОН - ОРИОН-128 и магнитофон Vote_l10ОРИОН - ОРИОН-128 и магнитофон Voting10ОРИОН - ОРИОН-128 и магнитофон Vote_r10 
RN1TZ
ОРИОН - ОРИОН-128 и магнитофон Vote_l10ОРИОН - ОРИОН-128 и магнитофон Voting10ОРИОН - ОРИОН-128 и магнитофон Vote_r10 
freddy
ОРИОН - ОРИОН-128 и магнитофон Vote_l10ОРИОН - ОРИОН-128 и магнитофон Voting10ОРИОН - ОРИОН-128 и магнитофон Vote_r10 
Atari1974
ОРИОН - ОРИОН-128 и магнитофон Vote_l10ОРИОН - ОРИОН-128 и магнитофон Voting10ОРИОН - ОРИОН-128 и магнитофон Vote_r10 

Поиск
 
 

Результаты :
 


Rechercher Расширенный поиск


ОРИОН-128 и магнитофон

Перейти вниз

ОРИОН - ОРИОН-128 и магнитофон Empty ОРИОН-128 и магнитофон

Сообщение  barsik в Пн Дек 31 2018, 03:51

1
В этой теме можно выложить и обсудить (если будет с кем) всё, что касается магнитофона. Например, схемы прогрессивных МГ-адаптеров, обсудить быстрые и более надёжные форматы записи на МГ-ленту, загрузку программ используя режим "диктофон" телефона и т.п.

Вот для начала рисунки МГ-адаптеров, что есть в виде файлов. Чуть позднее дополню рисунком ещё одного адаптера на 554СА3.

ОРИОН - ОРИОН-128 и магнитофон TapeReaderwith554CA3.1544849073


ОРИОН - ОРИОН-128 и магнитофон MGadaptersgisterezisom.1545697870


ОРИОН - ОРИОН-128 и магнитофон MG-adapterna1006VI1.1545698159
barsik
barsik
Мастер++

Сообщения : 740
Дата регистрации : 2016-11-10
Откуда : С-Петербург

Вернуться к началу Перейти вниз

ОРИОН - ОРИОН-128 и магнитофон Empty Многоблочная загрузка в ОРИОН

Сообщение  barsik в Пн Дек 31 2018, 03:52

2
В самом начале популярности ОРИОНА, т.е в начале 1991 года, несколько программ для него распространялись в виде МГ-записей на кассете, которые не скопировать средствами монитора. Хотя это на самом деле и не было защитой от копирования.

Первый пакет программ для ОРИОНА, появившийся в феврале 1991 года представлял собой ~15 игр для ОРИОНА, которые были получены переделкой программ от Специалиста. Вскоре выяснилось, что на рынках появились настоящие пираты, продающие программы, не имея к ним никакого отношения.

Все программы первого пакета распространялись без защиты. Появление пиратов мгновенно сделало бессмысленными разработку или конверсию новых программ для ОРИОНА, т.е лишило программистов всякого материального стимула (а голого энтузиазма хватает всего на несколько программ). Программистам стало просто обидно тратить немалый труд и время ради того, чтобы затем какой-то молодой негодяй продавал их труд для обогащения. Но к моменту, когда на рынках пираты начали свою деятельность почти все программы от Специалиста (за исключением Jet-Set, Manic-Miner и DTE ) разошлись без защиты от копирования.

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

SP-Copy и многоблочная загрузка:

SP-Copy работает только при КР580, т.к недокументированные команды использованы для защиты его кода от модификаций (кстати до сих пор никто не сломал) и загружается прямо в экран (чтобы не занимать ОЗУ), занимая 4 кб из 12. Копировщик SP-Copy вовсе не предназначен для борьбы с пиратством. Он был разработан лишь для копирования многоблочных программ, хотя попутно оказался удобным и для копирования обычных одноблочных программ (очень ускорял копирование кассет).

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

При выборе режима "вывода на ленту", т.е по нажатии <SAVE> блоки выдаются на запись в том же самом виде, какой была исходная запись. А защита от копирования обычно заключается в смене низкоуровневого формата записи.

Для изготовления многоблочных программ применяется программа "компоновшик", которая позволяет делать многоблочные программы (средствами базового монитора это не сделать). А для изготовления защищённых от копирования программ применяются инсталляторы. Они неуниверсальны, а делаются конкретно для каждой игры, которая защищается от копирования.

На Специалисте (где загрузка по сбросу) иногда применялась простейшая защита от копирования, совсем простая, непреодолимая лишь для полных чайников, основанная на смене МГ-константы записи на ленту. Тогда первый блочок перехватывает управление, грузит и стартует крошечный второй блочок с загрузчиком, который подставляет в ячейку 8FFF нестандартную МГ-константу и уходит на стандартную процедуру ввода блока с автозапуском. Сама программа впритык записанная на ленте третьим блоком выведена не со стандартной скоростью, причём пауза между блоками неразличима (она заполнена мусором, в котором отсутствует синхро байт E6). Такая программа выглядит как обычная, но не грузится.

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

Это стало возможным после появления коммерческих программ от кооператива SP-580, которые были защищены от пиратов именно так. Кракнуть такую защиту мог только высоко-квалифицированный программист. И такие виртуозы нашлись. Не прошло и года и уже в 1989 году все программы пакета SP-580 были кракнуты, переделаны под журнальный монитор и широко разошлись по всей стране.

Настоящая защита от копирования использует другой формат, который копировщиком не копируется. Не двухфазный, а двухчастотный, который тоже имеет множество разновидностей. Например, с побайтовой синхронизацией и без неё. Тогда один из блоков содержит свой загрузчик, который и осуществляет ввод в нестандартном и некопируемом имеющимися программами формате. Обычно в качестве защищённого формата использовался MSX-формат кооператива SP-580 или родной или он же с небольшой модификацией.

Такие защищённые программы никак не скопировать не кракнув загрузчик (который для борьбы с кракером защищён запутанностью кода и недокумментированными командами КР580). Такие программы, кстати, не вводятся и в эмуляторы.

К сожалению, хотя защита программ не представляла большого труда, все программы Специалиста адаптированные в 1990 году для ОРИОНА были отданы без защиты. Это считалось необходимым ради популяризации ОРИОНА. Но это было неверное решение.

Многоблочная загрузка лучше, если программа большая и грузится долго. При этом работает не примитивный загрузчик байта из ПЗУ, а более лучший загрузчик, который, например сразу останавливает ввод по ошибке, по тайм-ауту и по ошибке КС блока. Потому, если ошибка, это сразу проявляется не тратя время человека напрасно на ввод остатка файла.


Но как перехватывать управление у монитора. Для РК86 в ж.Радио была пара статей на эту тему. А про ОРИОН нет, т.к для него практически сразу стал использоваться дисковод. Вот как делается перехват управления в ОРИОНЕ.

F3D1: 31 C0 F3 ----- LXI SP,0F3C0H
F3D4: CD 24 F8 ----- CALL 0F824H
F3D8: D1 F3 -------- адрес F3D1- новый адрес при тайм-аут МГ-сигнал

Этот блочок вводится на адрес F3D1, затирая служ.ячейки ПЗУ. При этом в ячейках F3D8/D9, что хранят адрес вылета по тайм-аут МГ-сигнала, подставляется другой адрес, - адрес программы, которая, как видите, содержит всего 2 команды, установка стека и переход на стандартную подпрограмму загрузки массива.

На ленте:
- пилотон (256 байтов 00)
- адрес начала блока: 0F3H, 0D1H (именно такой порядок, старший, младший)
- адрес конца блока: 0FFH, 0FFH (например) или другой
- приведённый выше блок
- пауза такой длительности:

Спойлер:

        LD      BC,1000H
LOOP:   DEC     BC
        LD      A,B
        OR      C
        JP      NZ,LOOP


- коды первого блока загрузчика в формате:
пилотон, Е6, нач.адр, кон.адрес, блок, контр.сумма

Ещё можно перехватывать управление грузя блок в стек. Но такой трюк зависит от версии ПЗУ F800 и программы которой грузят, если в ходе загрузки стек процессора другой, то не сработает.


Последний раз редактировалось: barsik (Вт Авг 06 2019, 21:28), всего редактировалось 2 раз(а) (Обоснование : исправил грамматическую ошибку)
barsik
barsik
Мастер++

Сообщения : 740
Дата регистрации : 2016-11-10
Откуда : С-Петербург

Вернуться к началу Перейти вниз

ОРИОН - ОРИОН-128 и магнитофон Empty как делать многоблочные программы

Сообщение  barsik в Пн Дек 31 2018, 14:42

3
В качестве приложения к предыдущему посту, чтобы было яснее о чём речь, вот какая-то статья о многоблочной загрузке, хотя она и не относится к ОРИОНУ (принципы те же).

К сожалению, в те годы, когда были популярны отечественные 8-ми разрядки, было трудно обмениваться информацией с любителями компьютеров в других городах. Из-за этого из программистов почти никто не знал, что они могут защитить свои программы от использования их паразитами. Если бы отечественные программисты-любители умели защищать свои программы, то программ несомненно было бы написано больше.

Для РК86 несколькими кооператорами также использовались многоблочные программы (в основном цветные), и им даже при вводе удавалось подменять стандартную п/п-мму ПЗУ на свою, при которой экран не гаснет. Это большое достижение для РК86.


Спойлер:

               КАК ДЕЛАТЬ ПРОГРАММЫ С АВТОМАТИЧЕСКОЙ ЗАГРУЗКОЙ
               ===============================================

     Некоторые видели,  как красиво загружаются с магнитофона игровые программы
ZX-SPECTRUM и других иностранных игровых компьютеров. Программы для СПЕЦИАЛИСТА
могут загружаться также эффектно, тем более, что в СПЕЦИАЛИСТЕ загрузка осущес-
твляется сразу по сбросу,  т.е нет необходимости набора команды  с  клавиатуры:
запустил магнитофон нажал на кнопку и любуйся "эффектами" загрузки.  Весьма эф-
фектна загрузка заставки прямо в экран, бегущий счетчик, отсчитывающий время до
окончания загрузки, двигающиеся спрайты и блоки,  вывод текста-описания игры во
время ее загрузки с ленты и другие подобные эффекты.   Кроме  задачи  украшения
процесса загрузки,  блочная автоматическая загрузка позволяет решить задачу за-
щиты от копирования коммерческих программ,  т.к при блочной загрузке появляется
возможность изменить формат записи на ленту,  тем самым затрудняя задачу взлома
защиты кракеру (нельзя путать два разных термина - кракер и хакер;  в то  время
как хакер,  это высококвалифицированный программист-любитель,  не  занимающийся
пиратством,  кракер - программист-вредитель ломающий  защиты  с  целью  просла-
виться и заработать на пиратстве, т.е понятие кракер равноценно понятию вор).

    Данная статья предназначена для начинающих программистов для СПЕЦИАЛИСТА  и
предполагает то,  что читатель уже знает все  стандартные  подпрограммы  BIOS-а
СПЕЦИАЛИСТА.  Основная задача статьи помочь программисту научиться делать  мно-
гоблочные программы и программы защищенные от копирования. Сразу необходимо за-
метить,  что эта статья относится только к "настоящему  СПЕЦИАЛИСТУ",    т.е  к
СПЕЦИАЛИСТУ в самой стандартной версии, а именно аппаратура соответствует 48-ми
килобайтной журнальной версии (МК-1987,N2),  BIOS - базовый  загрузчик  Волкова
(MK-1987,N5) или любой другой полностью совместимый BIOS (напр: зверковский или
ленинградский  МОНИТОР  любой  версии).    Версии   аппаратуры    и    программ
кооп."SP-580", Афанасьева, "КОЛЕД" и других,  совместимы не 100% и имеют другие
"стандартные" подпрограммы.

   Для начала вспомним, что происходит при работе загрузчика сразу после нажа-
тия на кнопку СБРОС волковский загрузчик сразу "вылетает" на адрес C444.  Здесь
осуществляется инициализация системных переменных BIOS.  Для  этого  вызывается
стандартная подпрограмма пересылки блока: C42D - переброска  блока  (HL)...(DE)
-> (BC).  Далее п/п-ма C438 (PRINT) выводит на экран код "СТР" (очистка экрана)
и  сообщение:  "PROGRAMM?"  (в  ленинградском  мониторе    выводится    надпись
"ЛЕНИНГРАД-1989") и вот здесь начинается самое интересное.  Запускается п/п-мма
C3F9. Смысл ее работы: сначала на ленте ищется синхробайт "Е6". Пока он не най-
ден или нет сигнала,  эта п/п-ма "крутится" на одном месте.  Как только синхро-
байт пойман, то вводятся 4 последующих байта. Два первых байта определяют с ка-
кого адреса загружать вводимый блок в ОЗУ (адрес начала блока), два следующих -
адрес конца блока в ОЗУ.  После этого п/п-ма C3F9 вводит блок и заносит  его  в
ОЗУ по заданным адресам.  Ввод заканчивается при заполнении  последней  ячейки.
Адрес начала блока заносится в ячейку 8FE3. И на этом работа п/п-мы C3F9 закан-
чивается.  Далее загрузчик с помощью команды PCHL передает управление введенной
программе (по адресу начала блока).  Никакого контроля на правильность ввода не
осуществляется.

     Таким образом блок грузящийся по сбросу  имеет  вид:  цепочка  нулевых-байт
(пилотон), синхробайт Е6, нач.адрес блока (мл.байт, старший байт), конечный ад-
рес блока (мл.байт,ст.байт) и сам блок.  В таком формате работал монитор Волко-
ва (монитор-1985 на 8D00).  Этот МОНИТОР сейчас уже вышел из моды,   и  не  ис-
пользуется на СПЕЦИАЛИСТАХ и все пользователи с сентября 1988  года  используют
только  орловский  МОНИТОР  (обычно  в  комплекте  со  зверковским  загрузчиком
МК-89/4) или гораздо более совершенный ленинградский монитор (В.Ивинских).  Эти
мониторы имеют директивы R/W работающие в таком-же формате,  за исключением то-
го, что сразу-же за блоком следует контр.сумма.  Сразу-же,  а не как в уродском
формате РК86, где КС идет только после дополнительной цепочки нулей и еще одно-
го синхробайта Е6 (кроме того в РК86 перепутаны адреса блока,  т.е у них снача-
ла идёт старший, потом младший байты адреса).

    Кроме директив R и W МОНИТОР имеет директивы I и O - формат с именем  файла
(имя до 17 символов,  запрашивается).  Запись имеет следующий вид: пилотон (256
0-вых байт), синхробайт E6, 3 байта D9,  имя файла,  длинный пилотон (768 0-вых
байт), синхробайт Е6,нач.адр, кон.адр, файл, контр.сумма.  Т.е по сути добавлен
только "заголовок" со своим пилотоном. Формат RAMDOS-COMMANDER-а полностью сов-
местим с таким форматом,  т.к дополнительные относящиеся к DOS параметры  файла
(CSUM,  SCODE,  WBYTE,  ADRAM) передаются вслед за именем файла до синхро-байта
(потому и не мешают).

    Это теория.  Как же делаются многоблочные автоматически загружающиеся прог-
раммы?  Идея заключается в том,  что сначала загружается маленькая  программка,
для "раскрутки". Она может грузиться по сбросу или перехватывать управление при
работе директив ввода - R/I/Y/Z. После загрузки этой программки,  ей передается
управление, а дальше она уже делает, что хочет.

   Первый пример. Пусть по сбросу загружается следующая программа:

       ORG     0
       LXI     H,TXT1          ; HL-адрес текста
       CALL    0C438H          ; выводим текст (C818)
       CALL    0C3F9H          ; вводим новый блок
       LHLD    8FE3H           ; и передаем
       PCHL                    ; ему управление

TXT1:  DB      1FH,'ПРИВЕТ !'
       DB      13,10,0

   Эта программа очистит экран, напишет "ПРИВЕТ !" и будет вводить новый блок,
а потом его запустит на исполнение. Пусть второй блок будет такой:

       ORG     1000H
       LXI     H,TXT2
       CALL    0C438H           ; вывод TXT2
       JMP     0C800H           ; выход в монитор

TXT2:  DB      'КОНЕЦ ВВОДА',0

    После загрузки этого второго блока будет выдано сообщение TXT2 и  выйдем  в
монитор.  Такой ввод возможен только в разные адреса,  ведь после ввода второго
блока еще продолжает работать первый блок.  Однако в BIOS  имеется  п/программа
C453,  которая вводит и автоматически запускает на исполнение  введенный  блок.
Если использовать эту подпрограмму,  то второй блок можно грузить прямо на мес-
то расположения первого (если первый блок уже не нужен).


    Это всё для блоков загружаемых по указанным адресам.  Но  BIOS  СПЕЦИАЛИСТА
позволяет загружать блоки и по адресам,  задаваемым программой.  Тогда на ленте
должны отсутствовать начальный и конечный адреса загрузки блока.  Итак  C422  -
п/п-ма, которая загружает блок по произвольным адресам.  Ей надо указать,  куда
загружать блок в регистрах HL,DE. Вот пример. первый блок:

       LXI     H,TXT1
       CALL    0C438H      ; вывод сообщения
       LXI     H,1000H     ; указываем начальный
       LXI     D,17FFH     ; и конечный адреса
       CALL    0C422H      ; вводим 2 килобайта
       JMP     1000H       ; и запускаем

   Таким образом BIOS СПЕЦИАЛИСТА  предоставляет  4  стандартные  подпрограммы
ввода блока.  Они описаны во всей литературе по СПЕЦИАЛИСТУ и должны безусловно
поддерживаться на всех его клонах:

C3F9 - ввод блока с  поиском синхробайта, адреса
       начала  и конца  блока  указаны  на ленте

C422 - ввод блока с поиском синхробайта,  адреса
       начала и конца  блока  заданы  в HL  и DE

C414 - то же  самое,  но без поиска синхробайта,
       позволяет иметь синхробайт не равный E6

C453 - ввод блока с  поиском синхробайта и авто-
       матическим  запуском  блока на исполнение

    Как видите,  благодаря наличию этих удобных п/п-м и процедуры  загрузки  по
сбросу делать автоматически загружаемые программы для СПЕЦИАЛИСТА  совсем  нес-
ложно. Однако теперь теперь перед программистом возникает задача - а как же за-
писать на ленту блоки один за другим,  да еще в некоторых не  указывать  адреса
загрузки,  а в других указывать.  Также встает задача последующего  копирования
блочных программ. Обе эти задачи были блестяще решены еще в 1988 г  В.Ивинских.
Записывать блоки на ленту можно используя ранние версии ленинградского МОНИТОРА
(до 2.7),  в которых возможности директив работы с лентой существенно расширены
(можно вводить/выводить блоки в указанных выше форматах).

    Тем не менее,  специально для создания и копирования многоблочных  программ
В.Ивинских в конце 1988 года разработал две программы: КОМПОНОВЩИК  и  КОПИРОВ-
ЩИК.  Эти программы предназначены для работы с блоками в стандартном двухфазном
формате записи на ленту. Поэтому некоторые пользователи столкнувшись с тем, что
КОПИРОВЩИК не позволяет им копировать защищенные форматом записи программы нап-
расно ругали программу КОПИРОВЩИК (SP-COPY).

    Сначала рассмотрим назначение программы КОМПОНОВЩИК.  Эта программа  позво-
ляет загрузить в ОЗУ компьютера с ленты заранее подготовленные блоки,    причем
все они должны быть в стандартном формате монитора (с именем по директиве "О").
При вводе КОМПОНОВЩИК запоминает параметры введенных блоков: адреса,  длины пи-
лотонов, имена, константы ввода. Далее можно, установив требуемые параметры вы-
вода, вновь вывести эти блоки на ленту и получить готовую многоблочную програм-
му.  Отличительная особенность КОМПОНОВЩИКА - автоматическое  определение  кон-
станты чтения (для владельцев ленинградского МОНИТОРА это не особенность, ибо в
нем настройка на скорость осуществляется при работе всех директив ввода,  в том
числе и для формата ZX, чего нет в самом ZX).

    После запуска КОМПОНОВЩИКА внизу экрана появляется главное меню  программы.
Выбранный режим отображается путем "инверсии".  В начале надо  запустить  режим
"LOAD" (нажатием <ВК>) и ввести все заранее подготовленные блоки. Вводимые бло-
ки укладываются в ОЗУ один за другим (общий объем не более 8000H),  а на экране
в виде таблицы отображается информация о введенных блоках.  Когда  введены  все
блоки,  выходят в меню нажатием <СТР>.  Режим "EDIT"  позволяет  корректировать
длину цепочки нулевых байтов перед блоком  при  записи  на  ленту:  миним.длина
соответствует 01,  максим.  - 09 и выбирается нажатием на  соотвующую  цифровую
клавишу.  Каждая единица дает 85 нулевых байтов (поэтому 03 - стандартная длина
256).  Далее нажатием <+> и <-> можно определить выводить адреса начала и конца
блока или нет.  Клавишами управления курсором влево и вправо можно задать  кон-
станту записи (25-99).  В режиме "DELETE" можно удалить самый последний введен-
ный блок,  нажав на <ПС> (а не <ВК>!),  и так можно удалить все блоки (тут надо
осторожнее). Режим "SAVE". Тут все просто - <ВК> и на ленту пошли блоки один за
другим в заданных форматах и с нужными скоростями. "EXIT" - это выход в МОНИТОР
по адресу C800.

    Теперь о копировщике SP-COPY.  За несколько лет В.Ивинских сделал его  мно-
жество версий. Наибольшее распространение получили версии 1.3/1.4 и версия  2.2
(MSХ). Все версии загружаются по сбросу,  причем работают прямо из экранной об-
ласти (как жаловались несообразительные пользователи - работает хорошо, но вид-
на "грязь" у правого края экрана).  Т.е сама программа размещаясь в  экране  не
занимает места в ОЗУ для программ, оставляя для буфера ввода все 36К ровно. Эта
программа абсолютно не использует никаких п/п-мм в ПЗУ и даже стек переносит  в
экранную область.

    Скопировать SP-COPY версий 1.x можно им самим, но не стоит пытаться что-ли-
бо менять в программе,  впрочем вряд ли это у вас получится.  SP-COPY версии  2
защищен от копирования, вы можете попробовать его скопировать только с ленты на
ленту (полезно пропустить сигнал через компаратор).  Режимов работы всего  3  и
всё очень просто.  Режим выбирается клавишами "вверх / вниз" и  запускается  по
<ВК>. Отмена режима - <СТР>. Последний введенный блок можно удалить в любом ре-
жиме, нажав <НР>/<СТР> (одновременно).  Скорость вывода общая для всех блоков -
и устанавливается "стрелками вправо-влево". Скорость ввода определяется автома-
тически и запоминается;  "автоматически" вычисляется и устанавливается соответ-
ствующая константа вывода. Режим "EXIT" - выход в монитор.

    А теперь рассмотрим какие блоки применялись в некоторых блочных  программах
СПЕЦИАЛИСТА, сделанных в Ленинграде,  на примере простейшего блочного загрузчи-
ка игры с заставкой.  Игра загружается по сбросу (это наиболее удобно).  Первым
загружается и сразу запускается маленький стартовый блок (100 байт).   Он  очи-
щает экран,  выводит надпись "НЕ ВЫКЛЮЧАЙТЕ МАГНИТОФОН..." (или по английски  -
"DO NOT STOP YOUR TAPE NOW...").   Далее  определяется  константа  чтения  (т.к
пользователь может не иметь ленинградского МОНИТОРА, где это делается автомати-
чески впроцедуре поиска синхро-байта) и управление передается программе C453  -
загрузка следующего блока с его автоматическим запуском.  Пока всё просто.   То
есть первый блок на ленте имеет вид:

    Нач.адрес
    Кон.адрес
    Вывод надписи
    Опред-е конст.чт.
    JMP 0C453H
    Контр.сумма

   В этом блоке контр.сумма не используется, но в последующих блоках она имеет
значение. Следующий блок - загрузчик всего остального. Его структура:

    Нач.адрес
    Кон.адрес
    Вывод текста "GAME IS LOADING"
    Загрузка программы вывода заставки (бл.3)
    Загрузка картинки-заставки         (бл.4)
    CALL программы вывода картинки
    Загрузка блоков игры               (бл.5)
    JMP игра
    Контр.сумма

    Таким образом 2-й блок по загрузке и запуску не отличается от первого - так
же загружается и автоматически запускается (хоть так как константа  чтения  те-
перь не важна,  этот блок можно для повышения надежности грузить  со  скоростью
вдвое медленнее).  Вся дальнейшая загрузка осуществляется под управлением  этой
программы - загрузчика (блока 2). Заметьте ! - последующие 3 блока уже не имеют
начального и конечного адресов. Программа-загрузчик знает их заранее. Этот заг-
рузчик уже не использует П/П-мы BIOS СПЕЦИАЛИСТА, а имеет свою собственную, бо-
лее совершенную программу ввода с магнитофона,  - она осуществляет текущий кон-
троль качества ввода, подстраивается под скорость записи,  проверяет контр.сум-
мы и может делать различные чудеса,  типа бегущего счетчика,  полос по бордюру,
двигающихся блоков и т.п. Впрочем эти эффекты вовсе не являются чудесами, а яв-
ляются обычным делом для владельцев ленинградского монитора (где бегущий  счет-
чик адреса и поддержка бордюра входят прямо в стандартные п/п-мы ввода/  вывода
байта). Текущий контроль ввода сразу-же позволяет определить "останов" магнито-
фона или провал в записи (попробуйте остановить ленту - сразу же запищит и  за-
мигает надпись "TAPE LOADING ERROR !").

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

    Чтобы сделать описанную выше блочную загрузку  игры  можно  воспользоваться
компоновщиком,  а если скорость ввода не меняется то можно обойтись  ленинград-
ским монитором и копировщиком.  Все блоки готовятся заранее и  записываются  на
ленту причем первые два блока обязательно из тех-же адресов,  где они будут ра-
ботать! Остальные - всё равно.  Эти блоки записывают на ленту,  причем для бло-
ков 1 и 2 нужно выводить адреса загрузки, а для блоков 3,4 и 5 не надо,  и даже
нельзя.  Иначе весь блок будет считан со сдвижкой на 4 байта!  кроме того между
блоком 4 и блоком 5 необходима пауза побольше - т.е длинный пилотон перед  бло-
ком 5.  Это необходимо,  чтобы успела отработать программа копирования в  экран
цветной заставки. Тут уж без компоновщика, одним копировщиком не обойтись кста-
ти копировщик при копировании всегда считает и запоминает длину пилотона,  поэ-
тому если вы будете нажимать <ВК> позже начала пилотона,  то пилотон  на  копии
будет короче, чем на оригинале.

    Чтобы облегчить вам разработку собственных блочных загрузчиков,  рассмотрим
простую 4-х блочную программку.  Проделайте всё сами на компьютере.  С  помощью
редактора и ассемблера подготовьте на ленте 4 файла (уже в машинных кодах разу-
меется).

БЛОК 1: ORG     0
        LXI     H,TXT1
        CALL    0C438H
        JMP     0C453H

TXT1:   DB      1FH,'ЗАГРУЖЕН БЛОК 1',0

БЛОК 2: ORG     0
        LXI     H,TXT2
        CALL    0C438H
        LXI     H,100H
        LXI     D,KON3-1 ; конечный адрес блока 3
        MVI     A,0FFH   ; подставьте после трансляции
        CALL    0C416H   ; программы блока 3
        JMP     100H

TXT2:   DB      13,10,'ЗАГРУЖЕН БЛОК 2',0

БЛОК 3: ORG     100H
        LXI     H,TXT3
        CALL    0C438H
        CALL    0C3F9H
        LXI     H,TXT4
        LHLD    8FE3H
        CALL    0CC6CH   ; вывод HL в HEX-виде
        PCHL

TXT3:   DB      13,10,'ЗАГРУЖЕН БЛОК 3',0
TXT4:   DB      13,10,'ЗАГРУЖЕН БЛОК 4 С АДРЕСА: ',0
KON3:                    ; это адрес конца блока 3

БЛОК 4: ORG     200H
        LXI     H,TXT5
        CALL    0C438H
        JMP     OC800H  ; выход в монитор

TXT5:   DB      13,10,'БЛОК 4 ОТРАБОТАЛ !',0

    Тут применены все виды загрузки.  При компоновке для блоков 1,2  и  4  надо
указывать их адреса загрузки (т.е "+" в таблице компоновщика),  для блока  3  -
нет.  Но в блоке 2 должны быть заданы его начальный и конечный адреса.    Думаю
проделать этот простейший пример сможет каждый.  Применив  немного  фантазии  и
свои несложные програмки вы  можете  значительно  "украсить"  процесс  загрузки
имеющихся у вас игр (например: сделайте процесс загрузки с  двойным  дублирова-
нием блоков или с выводом сообщения после ввода  очередного  блока:  "до  конца
загрузки осталось XX мин.  XX сек.").  Советуем также разобрать стартовые блоч-
ки-загрузчики, примененные,  например в копировщике или других блочных програм-
мах. Изучив их загрузчики, вы сможете "выдрать" надежные п/программы чтения, из
игр  вы  можете  взять  подпрограмму  ввода  заставки  прямо  в    экран    (по
синклеровски). А изучение загрузчиков защищенных от копирования программ позво-
лит вам и самим защищать свои программы,  что позволит вам  спокойно  продавать
ваши программы, не опасаясь пиратов.

     К сожалению,  самостоятельно нарисовать графическим  редактором  приличную
картинку заставку почти невозможно (если вы не художник). Поэтому выходом здесь
может быть использование заставок или спрайтов из игр ZX-SPECTRUM.   Для  этого
служит программа В.Ивинских ZX-PICTURE.  Она позволяет считывать с ленты  прог-
раммы в формате СИНКЛЕРА и использовать графику из его заставок.

    Несколько замечаний.  Для СПЕЦИАЛИСТА существует несколько  версий  BIOS  и
МОНИТОРОВ (ни один из этих МОНИТОРОВ нельзя даже сравнивать по качеству  с  ле-
нинградским).  Все эти программы большей частью совместимы с  BIOS  Волкова  по
системным п/программам в ПЗУ,  но служебные  ячейки  в  ОЗУ  обычно  используют
по-разному.  Например в ленинградском МОНИТОРЕ  векторизованы  все  стандартные
п/программы,  что означает,  что любая из них может быть заменена  п/программой
пользователя (напр: можно загрузить магн.драйвер,  который заменив  стандартные
п/п-мы ввода/вывода байта на МГ,  изменит формат работы с магнитофоном  на  MSX
(двух частотный с побайтовой синхр-ей) или, напр-р,  синклеровский),  а также в
ОЗУ хранятся адреса важных п/п-м самого монитора (CCP), служебные ячейки RAMDOS
и т.д. Именно благодаря такому расширению количества служебных ячеек BIOS,  ле-
нинградский монитор и стал таким гибким и удобным.  Поэтому,  чтобы  обеспечить
совместимость со всеми используемыми системными программами не стоит  использо-
вать для загрузчиков ОЗУ по адресам служебных ячеек (256 байт ниже экрана), де-
лать блочные программы использующие нестандартные входные точки разных BIOS-ов,
а также перехватывающие управление за счет служебных ячеек.

    Конечно эффектно,  когда программа вышибает управление у монитора и Вы  при
попытке загрузить обычный файл директивой I, вдруг видите на экране разные нео-
жиданные чудеса.  Однако это приведет к неудобству других пользователей,   ведь
для СПЕЦИАЛИСТА столько-же мониторов, сколько крупных городов в стране.  Поэто-
му для трюков следует использовать лишь стандартные ячейки.  Некоторые из  этих
стандартных ячеек приведены ниже:

8FE3/E4 - при работе п/п-мы C3F9  сюда заносится
          адрес начала введенной в ОЗУ программы

8FE7/E8 - адрес начала знакогенератора сдвинутый
          вправо  на  3  разряда

8FEC - признак   регистра   РУС/ЛАТ  (8А ИЛИ 3А)

8FEF/F0 - код нажатой клавиши по верхн. Регистру

8FF1/F2 - частота/длительность  звука при работе
          станд.подпрограммы вывода звука - C170

8FF6/F7 - ячейка  временного хранения стека (SP)

8FFA/FB - "маска"  при  выводе  на  экран  (XRA)

8FFC - вертикальная координата курсора (0...255)

8FFD - горизонтальн.координата курсора (0...191)

8FFE - константа записи.  Зависит от такта  про-
       цессора. Для 2 МГЦ=28H,  2,5=34H, 4,0=5FH

8FFF - константа ввода.   При  такте 2МГЦ = 3CH.
       Для 2,5 МГЦ = 4CH,  для  4 МГЦ = 80H. Для
       ленинградского монитора  при работе п/п-м
       с поиском с/б это значение не играет роли
       т.к сюда  заносится автоматически опреде-
       ленная константа ввода, но при работе п/п
       ввода  байта, эта ячейка ОЗУ также важна.

    И еще один совет.  В последнее время  многие  "специалисты"  повышают  такт
процессора до 2,5-3,25 МГЦ для КР580,  и даже до 4,0 МГЦ при замене  процессора
на иностранный процессор Zilog-80. При разработке блочных загрузчиков это необ-
ходимо учитывать, ибо,  если например ваш загрузчик контролирует время до нача-
ла очередного блока (естественно, чтобы замучить кракера),  а т.к считать время
можно только програмно, то при загрузке на машине с двойным тактом,  программа,
подождав вдвое меньшее время,  будет вынуждена уничтожить всё ОЗУ,  полагая что
кракер пытается ломать вашу защиту.  Проще всего узнать скорость  машины  можно
"посмотрев" константу записи, которая также инициализируется по сбросу.

    Этот текст был написан в 1989.  Сейчас он был лишь немного доработан.  Сле-
дует также заметить,  что всё,  что здесь описано,  было разработано В.Ивинских
еще в 1988 году.  Тем не менее эти материалы могут  помочь  начинающим  сделать
первые шаги в программировании,  кого-то подтолкнут к  собственным  разработкам
(возможно и для ОРИОНА) поэтому этот текст и  был  предложен  для  планируемого
журнала для любителей ОРИОНА В.Леонтьева.

                 Чистяков Владимир, С-Петербург, апрель 1993



Последний раз редактировалось: barsik (Пн Дек 31 2018, 15:49), всего редактировалось 6 раз(а)
barsik
barsik
Мастер++

Сообщения : 740
Дата регистрации : 2016-11-10
Откуда : С-Петербург

Вернуться к началу Перейти вниз

ОРИОН - ОРИОН-128 и магнитофон Empty Re: ОРИОН-128 и магнитофон

Сообщение  Viktor2312 в Пн Дек 31 2018, 14:55

4
Спасибо за информацию, очень интересно и возможно в будущем пригодится. Побольше бы таких содержательных и полезных постов.
Viktor2312
Viktor2312
Гуру+

Сообщения : 12558
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

ОРИОН - ОРИОН-128 и магнитофон Empty Re: ОРИОН-128 и магнитофон

Сообщение  Спонсируемый контент

5

Спонсируемый контент


Вернуться к началу Перейти вниз

Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения