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

User Tag List

Страница 6 из 8 ПерваяПервая ... 2345678 ПоследняяПоследняя
Показано с 51 по 60 из 71

Тема: Ленинградский монитор и другие программы для СПЕЦИАЛИСТА

  1. #51
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    Павлодар
    Сообщений
    2,867
    Благодарностей: 1454
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от fifan Посмотреть сообщение
    Если эта фотка - то я сохранил.
    Да, это одна из них. Именно про него я и говорил.

    - - - Добавлено - - -

    barsik, в противовес я бы предложил поставить 245 буфер, например. Но если есть ВВ55 то почему бы и нет? А методику подключения большого ОЗУ и/или ПЗУ мы уже обкатали.


    4 5ти вольтовых 512КБайт флешки (2МБайта) с возможностью записи. Подключается ко второму ППА. Запоминается средний байт адреса (A[15:8]), так же как и у вас. Детали проекта где-то у fifan'а.
    Последний раз редактировалось HardWareMan; 30.03.2017 в 07:39.

  2. #52
    Activist
    Регистрация
    05.04.2013
    Адрес
    с. Починки, Нижегородская обл.
    Сообщений
    331
    Благодарностей: 202
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Не следил за обсуждением с самого начала, так что подключаюсь к обсуждению только сейчас.
    Во-первых, спасибо за интересные материалы, ну и несколько комментариев.

    Цитата Сообщение от barsik Посмотреть сообщение
    Сначала попробовал эмулятор EMU80 V4.0. И тут обнаружилось, что файлы в формате ORD этот эмулятор СПЕЦИАЛИСТА не грузит. Это безобразие, ведь формат ORD - это универсальный формат для 8-ми разрядок, непривязанный к формату на ленте и позволяющий иметь все параметры блока - имя, адреса и контрольную сумму. Поиски в дистрибутивах конвертора ORD в RKS результата тоже не дали.
    Я никогда не работал с реальным Специалистом, даже не думал, что для него может понадобиться орионовский формат ORD. Какой софт для Специалиста использовал ORD? В каком виде сделать нужно его загрузку в эмуляторе?


    Цитата Сообщение от barsik Посмотреть сообщение
    в эмуляторе EMU80, если я правильно понял, вообще не поддерживается формат загрузки по сбросу
    В эмуляторе по умолчанию для удобства подключен патченый Монитор, в котором заблокирована загрузка по сбросу. Если подключить оригинальный, то загрузка rk(s)-файлов по сбросу будет доступна. Но тогда для выхода в Монитор каждый раз после сброса придется нажимать функциональную клавишу для прерывания попытки загрузки. С другими Мониторами, надеюсь, тоже будет работать, нужно только при необходимости поправить адреса перехвата процедур работы с магнитофоном (адрес ret в emu80 не нужен, только адрес начала).

    Цитата Сообщение от barsik Посмотреть сообщение
    стати, конфига и эмулятора СПЕЦИАЛИСТА в варианте КООП SP-580 тоже не нашёл,
    Пока вообще ничего про этот вариант знаю, не видел даже в эмуляторах. Буду благодарен, если подскажете ресурсы, где можно узнать поподробнее про SP-580.


    Цитата Сообщение от barsik Посмотреть сообщение
    впечатляет, что возможен ввод из WAV-файла, как из магнитофона. Это очень крутое свойство и в эмуляторе EMU80 его явно не хватает.
    Будет. Чуть позже - когда руки дойдут.

    - - - Добавлено - - -

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    Я имею одну идею как сохранить их так, чтобы это был не тупой WAV, но который мог бы быть восстановлен в случае необходимости. Но для работы мне нужны записи. И это не TAP/TZX, т.к. те заточены под Спектрум.
    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    нужно для эмуляторов РК-шек приспособить расово верный .tzx
    Цитата Сообщение от DDp Посмотреть сообщение
    Напрямую непойдёт, другой формат бита и байта. Но можно сделать свой, "по мотивам". А расширение, например, .TRK
    Очень интересная тема, тоже давно уже думаю об этом.
    В принципе, можно и TZX использовать с ID блока, кажется, 15 - direct recording. Но TZX все-таки больше спектрумовский, некрасиво это. Можно создать свой. Или, быть может, уже существуют какие-то подобные форматы для замены WAV? В общем, хотелось бы обсудить...
    Последний раз редактировалось Pyk; 30.03.2017 в 11:52.

  3. #53
    Activist
    Регистрация
    14.05.2013
    Адрес
    г. Москва
    Сообщений
    234
    Благодарностей: 54
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Pyk Посмотреть сообщение
    Буду благодарен, если подскажете ресурсы, где можно узнать поподробнее про SP-580.
    http://www.spetsialist-mx.ru/schemes/SP580.png
    http://www.spetsialist-mx.ru/Soft/SP580.rar

  4. Этот пользователь поблагодарил uart за это полезное сообщение:
    Pyk (30.03.2017)

  5. #54
    Master Аватар для barsik
    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    943
    Благодарностей: 305
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Привожу описание эл.диска из документации для ACP/M 1.55E ОРИОНА. Это версия ДОС позволяющая обходиться без дисковода. С МГ-ленты грузится файл, он автоматически стартует, форматирует эл.диск и записывает на него программу обмена с МГ и выходит в CP/M 60К. Здесь вся необходимая программисту информация. Вообще-то это текст из письма пользователю ACP/M 1.55E, но использовался как ДОК к эл.диску (потому сохранился).

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



    ............... ЭЛЕКТРОННЫЙ ДИСК, УСТРОЙСТВО И ИСПОЛЬЗОВАНИЕ

    Электронный диск представляет собой узел регенерации ОЗУ типа 565РУ7 и интерфейсную БИС типа 580ВВ55 для связи с центральным компьютером. Плата обладает своим задающим генератором и все сигналы для своей работы вырабатывает сама. Тем самым плата полностью независит от основного компьютера, что позволяет выключать его питание, без потери информации на диске. Потребление при отсутствии обращений к диску не превышает 300 мА (на 555, при 155 серии намного больше). При наличии буферной ёмкости в 50.000 МКФ не страшны провалы питания до 2 секунд.

    На плате эл.диска установлены две банки ОЗУ 565РУ7 и ещё две банки могут быть напаяны сверху (методос "PACK-UP), позволяя иметь в максимуме 1 мбайт. Также на плате располагается панелька под ПЗУ 27127/27256 (16/32 кб). Кроме такой платы варианта 1990 года, была выпущена партия плат 1989 года, без ПЗУ и с всего одной банкой РУ7.

    Данная конструкция разрабатывалась для СПЕЦИАЛИСТА , где во-первых нет излишних портов (как на ОРИОНЕ) и не буферизованы шины процессора. Поэтому весь интерфейс осуществляется через одну единственную ППА 580ВВ55, нагружая шину (D0-D7, A0,A1) нагрузкой всего одного входа порта. На СПЕЦИАЛИСТЕ с тактом 2.0 МГЦ допускается длина соединительного кабеля до 35 см, без ухудшения надёжности. На СПЕЦИАЛИСТЕ с тактом 2.5 или 2.75 МГЦ длина кабеля не должна превышать 15 см, причём в случае применения ИМС 155-й серии и большого количества ПЗУ РФ2 (более 3-х) шина будет перегружена и нельзя будет одновременно подключить контроллер НГМД.

    Рекомендуется установка 580ВК28, благодаря чему удаётся поднять такт на 580-м процессоре (!) до 3.75 МГЦ и даже 4.0 МГЦ (это достигается за счёт ВК28, а также понижения питания КР580 до 4.75 В, - только процессора, питание ОЗУ: >= 5.0 В). Длину кабеля при ВК28 можно сделать 35 см. При применении в СПЕЦИАЛИСТЕ Z80 проблем с перегрузкой шин не наблюдалось до частоты 4.25 МГЦ. Что касается ОРИОНА, то здесь проблем подключения меньше - у некоторых работает уже несколько месяцев и на такте 5.0 МГЦ.

    Исходя из вышеизложенного, рекомендуется применять в СПЕЦИАЛИСТЕ Z80 с большей мощностью выходов, а именно 'GOLDSTAR' с буквой А. Можно также - GOLDSTAR-B или даже SHARP с любой буквой, что конечно решает все проблемы с перегрузкой шин, но глупо из-за их печкообразности. На ОРИОНЕ наоборот, целесообразно применять Z80 с хилыми выходами: ZILOG, TOMPSON, NEC, MME, TOSHIBA или их КМОП-варианты (8C0004) или даже SU880 (10 мА), т.к процессор в ОРИОНЕ буферизован.

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

    D0-D7 ... шина данных
    A0,A1 ... шина адреса
    /WR ..... запись (в память, т.е /MEMW)
    /RD ...... чтение (/MEMR)
    /CS ...... чип-селект (СПЕЦИАЛИСТ - FD00, ОРИОН - F780)
    RESET .. сброс (прямой не инверсный)
    GND ..... GROUND, системная земля.

    Всего в кабеле 15 проводков МГТФ-0.03 (для земли лучше провод потолще).

    Принцип работы: Для адресации в 512К требуется 19 адресов A0...A18. Для хранения этого адреса на плате имеются 3 регистра: младшего байта адреса (N байта в секторе), старшего байта адреса (N сектора в банке), и регистр хранящий адреса A16...A18 (N банки). Эти регистры непрерывно сохраняют этот текущий адрес (даже после сброса), - тем самым процессор может читать или писать данные из этой ячейки диска. Первые два из этих регистров 8-ми разрядные, выполнены на счётчиках с переносом 155ИЕ7.

    С помощью сигнала с выхода PC3 ППА формируется так называемый строб инкремента адреса, от которого счётчики увеличивают свое состояние на 1. Таким образом при чтении/записи в пределах 64-х кбайт (одной условной банки) существует возможность не устанавливать при обращении к последующей ячейке новый адрес. Достаточно выдать строб инкремента и читать/писать далее.

    Установка старшего и младшего байта адреса (А0-А15), т.е запись в эти счётчики также осуществляется стробами адреса: старшего (PC5) и младшего (PC4). Что касается адресов A16...A18, то они формируются по разному для вариантов 256/512К и для варианта 1 мбайт, а именно: в варианте 1 мбайт также используется регистр на ИЕ7 и строб для его записи (PC6). В вариантах же диска 1989 и 1990 годов на 256 и 512К эти адреса формируются непосредственно портом (это позволяет с'экономить одну ИЕ7). Т.е в твоей плате адресам A16...A18 соответствуют выходы PC0...PC2.

    Все данные вводятся в диск через порт A, а считываются через порт B БИС ВВ55. Выходы порта C формируют управляющие сигналы. Таким образом назначание портов и разрядов такое:

    PA0-PA7 - данные для ввода в диск (ВВ55 - на вывод)
    PB0-PB7 - данные с диска (ВВ55 всегда на ввод)

    Порт 'C' программируется на вывод и управляется поразрядно:

    PC0-PC2 - это адреса A16...A18
    PC3 - строб инкремента адреса
    PC4 - строб записи младших 8-ми разрядов адреса (A0-A7)
    PC5 - строб записи старших 8-ми разрядов адреса (A8-A15)
    PC6 - блокировка записи диска 256К и сигнал ROM/RAM в дисках 512К (с ПЗУ 27256)
    PC7 - строб записи в ячейку

    Сигналы стробов должны быть постоянно в 1. При формировании строба на эти выходы выводится на короткое время 0, затем возврат в 1. Запись осуществляется по уровню, т.е если держать стробы =0 и менять данные в порту A, то в регистрах будет то же, что на выходах порта A. Если адреса равны, то стробы можно выдавать одновременно (т.е установить адреса A0-A18=0 и записать в эту ячейку 0, - можно всего одной командой STA PORTC,040H). Строб инкремента (PC3) работает по переднему фронту.

    Рассмотрим работу с диском. Для записи надо:

    1. Вывести в порт A адреса A0-A7
    2. Выдать строб PC4
    3. Вывести в порт A адреса A8-A15
    4. Выдать строб PC5
    5. Вывести в разрядах PC0-PC2 адреса A16-A18
    6. Вывести в порт A подлежащие записи данные
    7. Выдать строб записи

    При этом, если сигнал ROM/RAM (или защита от записи) был равен 1, то данные будут записаны. Если надо записывать в следующую ячейку, то пункты 1-5 не выполняются, а выдаётся строб инкремента.

    Для чтения надо:

    1-5. Установить адреса (как при записи, см.выше)
    6. Просто считать с порта B данные

    Далее можно выдать строб инкремента и считать следующий байт и т.д. Для диска 256К значение разряда PC6 не важно - это просто блокировка и защита от записи, на чтение не влияет. В диске 512К значение сигнала на выходе PC6 определяет считывается ROM или RAM. При PC6=0 считывается ПЗУ 27256, при PC6=1 считывается ячейка RAM-диска. Естественно этот сигнал выполняет и старую вункцию, т.к записать в ROM нельзя.

    Пара слов о программах для RAM-диска. Немного истории. Первый RAM-диск появился в конце 1988 и имел всего 64К. В 1989 использовались эл.диски на 128К (уже именно такой конструкции, с ППА в качестве интерфейса). В конце 1989 удалось изготовить партию печ.плат на 128/256К.

    Первую простую файловую систему написал А.Кузнецов. RAMDOS версии 1.0 была написана легендарным программистом В.Ивинских в конце 1989. Также был доработан для работы с файлами его редактор SCREEN и уже в начале 1990 была сделана первая версия программы RAMDOS-COMMANDER. Летом 1990 В.Ивинских доработал RAMDOS до версии 1.4 и коммандер версии 1.3, ставшие классикой программирования для КР580. И вскоре, пользуясь RAMDOS, В.Ивинских адаптировал для СПЕЦИАЛИСТА MANIC-MINER от Синклера, работу которую без эл.диска сделать было бы невозможно. В дальнейшем В.Ивинских в конце 1990 разработал новую версию RAMDOS-COMMANDER, использовав специально написанный им графический интерфейс с открывающимися окнами (получить представление о нём можно посмотрев ROM-WRITER В.Ивинских, есть его и ОРИОН-версия).

    К несчастью, наступили времена дисководов. Осенью 1990 уже 5 пользователей СПЕЦИАЛИСТ-а имели CP/M, хотя платы КНГМД были выпущены только в конце 1990 года (потому достались уже орионщикам). Несмотря на это, эл.диски нашли отличное применение и в среде CP/M, т.к до появления первых программ копирования на одном НГМД (А.Новгородов 08.1991) эл.диск был единственным способом скопировать файл размером более TPA (36К).

    Для RAMDOS, из-за полного упадка СПЕЦИАЛИСТА, ухода в начале 1991 В.Ивинских в профессиональные программисты, и появления CP/M, - ничего серьёзного создано не было. К 1992 "спецов" осталось ~5 человек и они не пишут сами (чисто пользователи). Можно упомянуть форт-систему работающую с файлами RAMDOS, граф редактор Е.Якубовского V4.0, DISK DOCTOR Максима Белова и мои программки TX_FORM (делает 2 колонки по 48/60 символов с выравниванием краёв для печати текстов мелкошрифтом), FILE MANAGER и SPRITE_EDITOR. Хотя планируется адаптировать ассемблер Z80 А.Балдина для ОРИОНА для RAMDOS (его орионовские ассемблеры для КР580 и Z80 позволяют, при наличии в ОРИОНЕ 256К, транслировать программы с объёмом исходника до 180К за счёт использования INCLUDE). К сожалению, владельцы ОРИОНА используют эл.диски исключительно для CP/M, не имея никакого представления о RAMDOS.

    На мой взгляд, наличие эл.диска обьёмом в 512К и турбо-среды программирования на ассемблере (прошитой в ПЗУ ЭД) для программиста полезнее, чем наличие CP/M и КНГМД. В турбо-среде переход между программами (редактор-ассемблер-отладчик) осуществляется мгновенно (загрузка 32К - 0.3 сек).

    Сравните, в RAMDOS, закончив редактирование программы, - хлоп на кнопку - и Вы в ассемблере и уже идёт ассемблирование, через 30 секунд (тест в 36 кб) - готово, хлоп по кнопке - программа загружена в рабочие адреса, текст программы записан в файл и Вы в отладчике, можете начинать прогон или отладку.

    А как то же делается в CP/M? В редакторе, закончив редактирование, записываете файл на диск. Запускаете ассемблер, ждёте (лязг дисковода 10 минут), и если дискета не сдохнет (что бывает часто с дискетами ИЗОТ и ГМД), то вскоре выясняется, что в тексте куча ошибок. Опять загружаете редактор (каждый раз пишете имя редактора, затем имя файла). Редактирует и снова трранслируете. Если наконец ошибок нет, загружаете компоновщик, - опять 10 минут износа дискет и головок и... бац. Готово. Теперь с помощью программы LOAD делаете из HEX-файла COM-файл. Затем запускаете ZSID3, командой R загружаете Ваш файл и, наконец, начинаете отладку и... - конечно ничего не работает. В злобе Вы вырываете последние волосы с головы... Надо снова запускать редактор и загружать исходник на редактирование. Но прошло 25 минут и Вы уже забыли, какие изменения Вы делали в тексте и потеряли нить Вашей программистской мысли.

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

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

    (c) barsik. Текст написан, предположительно, в середине 1992.
    .
    [свернуть]


    Цитата Сообщение от Pyk
    Не думал, что для Специалиста может понадобиться орионовский формат ORD. Какой софт для Специалиста использовал ORD? В каком виде сделать нужно его загрузку в эмуляторе?
    А разве формат ORD Вы где-то поддерживаете? В эмуляторе ОРИОНА формат ORD только на дискетах.

    Я предпочёл бы, чтобы формат ORD читался бы как основной TAPE-формат данного компьютера. Это избавит меня и всех остальных пользователей эмулятора от необходимости вручную заносить адреса, считать КС блоков и подставлять их в TAPE-файл (GAM, RKS, RKA, RKP, RKO, RKR). А файл ORD остаётся пригодным и для дисководной версии, отчего число копий файла в разных форматах не плодится.

    Формат ORD лишь изначально был орионовским в 1991, когда его впервые стали использовать на дисководах. Но ОРИОН не единственный компьютер, у которого адреса старта файлов произвольные, а не ровно 100H. Вместо того чтобы "разводить" море разных форматов для разных компьютеров удобно использовать один единственный формат ORD, что я и делаю. У меня на винте все файлы разных компьютеров - в формате ORD.

    Любая команда загрузки с ленты должна понимать формат принятый на данном компьютере, а также формат ORD. Поэтому, если в эмуляторе СПЕЦИАЛИСТА при загрузке по I выбрать ORD-файл, он тоже должен загрузиться и стартануть, как RKS файл с именем. Эмулятор должен сам конвертировать файл ORD в формат RKS. Тогда мне не придётся это делать вручную. Т.е по умолчанию, ORD формат должен соответствовать формату с именем принятому на данном компьютере, а если такого формата нет, как например для РК86, то естественно, единственному формату, что принят для РК86. Тогда мне не придётся вручную считать КС блоков и подставлять их в GAM-файл.

    Кстати, какое расширение имеют файлы СПЕЦИАЛИСТА в формате без имени? Т.е те файлы, что грузятся по сбросу (это файлы созданные древним волковским монитором и те, что используются командами R/W орловского монитора). Такой формат тоже должен быть. Т.к, если я по сбросу попытаюсь загрузить файл в формате RKS (т.е с именем), то будет улёт. Если особого имени ещё нет, то для таких файлов в имени можно вставлять слово (auto), что значит, что это программа и она грузится по сбросу.

    Как я понимаю, загрузка TAPE-файлов работает так:

    При первом (за 5 секунд) обращении к RDBYTE запрашивается имя и открывается файл. Затем по каждому вызову RDBYTE из открытого файла читается очередной байт, пока файл не кончится или пока после последнего обращения к RDBYTE не пройдёт 5 секунд. Тогда файл закрывается. Потому если за 5 секунд запустить новую загрузку, то происходит чтение из конца открытого файла (когда размер файла не точно равен размеру блока указанному в заголовке).

    Как поведёт себя эмулятор в такой ситуации? ROM-BIOS загрузив блок по сбросу, запускает его. Этот блок включает другой формат МГ-ленты, двухчастотку и начинает загрузку второго блока, записанного в реале в формате MSX. По первому же вызову RDBYTE мы попадём уже на другую точку отлова (для формата MSX). Что произойдёт? Эмулятор будет продолжать чтение из открытого файла, или запросит имя нового файла (файла второго блока идущего в другом формате записи)? Правильно читать из первого файла.

    PS. Раз уж зашла речь о формате ORD, то очень неудобно реализовано в трёх эмуляторах ОРИОНА использование ROM-диска и квазидисков ORDOS.

    Требуется с помощью хитроумных ухищрений вручную формировать ROM/RAM диски (а также дискеты), что крайне неудобно и неоперативно. В моём эмуляторе ОРИОНА это сделано удобнее. Файлы с расширением ORD автоматически грузятся из каталогов ORDOS.A, ORDOS.B, ORDOS.C, ORDOS.D (и точно также формируется и "дискета" - все файлы автоматически перегружаются туда из каталога FILES.DOS). Поэтому легко набить все 4 квазидиска ORDOS-файлами и менять набор файлов в квазидисках оперативно.

    Кстати, у Вас и оперативной замены ПЗУ ROM-BIOS без разрушения ОЗУ тоже нет. Это неудобно.

    Цитата Сообщение от Pyk
    В эмуляторе по умолчанию патченый Монитор, в котором заблокирована загрузка по сбросу. Если подключить оригинальный, то загрузка RKS-файлов по сбросу будет доступна
    Это хорошая новость, т.к плохо переношу стандартные мониторы.

    Цитата Сообщение от Pyk
    Если поставить оригинальный монитор, то тогда для выхода в Монитор каждый раз после сброса придется нажимать функциональную клавишу для прерывания попытки загрузки по сбросу
    Но так и должно быть. Так и есть на реальном СПЕЦИАЛИСТЕ. Хотя есть мониторы, которые сами (без нажатия клавиш) выходят на C800, если нет сигнала.

    Цитата Сообщение от Pyk
    С другими Мониторами, надеюсь, тоже будет работать, нужно только при необходимости поправить адреса перехвата процедур работы с магнитофоном (адрес возврата из подпрограмм RDBYTE/WRBYTE в EMU80 не нужен, только адрес начала)
    То, что адрес возврата не нужен это хорошо, т.к адрес входа у меня один C377 (это же стандартный вход), а выходы меняются в зависимости от формата. Получается, что эмулятор B2M удобно использовать для WAV-файлов а EMU80 для обычных RKS файлов.

    Цитата Сообщение от Pyk
    Цитата Сообщение от barsik
    впечатляет, что возможен ввод из WAV-файла, как из магнитофона... этого свойства в эмуляторе EMU80 явно не хватает
    Будет. Чуть позже.
    При этом нельзя ли сделать так, чтобы я видел WAV-файл при работе магнитофона. Не имя файла (хотя имя тоже надо видеть), а картинку его частотно-временной диаграммы (или осцилограммы на медленной развертке), также как это выглядит в программе "Звукозапись" Windows. Можно в отдельном окне отображать картинку стилизованного аудио магнитофона, как это делают в программах проигрывателях MP3 и WAV. Можно отображать счётчик ленты и в отдельном окне, как 'Play list' в проигрывателях список файлов данной кассеты. Тогда вообще всё будет выглядеть близко к реалу.

    И кстати, в реальном магнитофоне есть клавиша ПАУЗА. И иметь её и в эмуляторе не помешает. Например, у меня есть блоки WAV-файлов (неизвестно что). Так вот, чтобы не пришлось нарезать большой файл на фрагменты (а как это сделать, если идёт многоблочная загрузка, отчего не ясно, - это новый файл или блок от предыдущей многоблочной программы). Тогда и нужна пауза. Считал WAV файл в ОЗУ, нажал на паузу, выгрузил считанный файл в обычном виде (в смысле байтами, не звуками), а затем снова запустил команду ввода и "отпустил" клавишу ПАУЗА для считки очередного файла.
    Последний раз редактировалось barsik; 30.03.2017 в 18:33.

  6. #55
    Master Аватар для barsik
    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    943
    Благодарностей: 305
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Как делать многоблочные программы для СПЕЦИАЛИСТА

    В связи с попытками доработать эмуляторы СПЕЦИАЛИСТА для верной работы с магнитофоном полезно почитать эту древнюю инструкцию для программистов для СПЕЦИАЛИСТА. Здесь есть информация и про копировщик программ СПЕЦИАЛИСТА.

    Как делать многоблочные программы для СПЕЦИАЛИСТА


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

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

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

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

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

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

    Запускается п/п-мма C3F9. Смысл её работы в следующем. Сначала на ленте ищется синхробайт Е6. Пока он не найден или нет сигнала, эта п/п-ма крутится на одном месте. Как только синхробайт пойман, то вводятся 4 последующих байта. Два первых определяют с какого адреса загружать вводимый блок в ОЗУ (адрес начала блока), 2 следующих - адрес конца блока в ОЗУ. После этого п/п-ма C3F9 вводит блок и заносит его в ОЗУ по заданным адресам. Ввод заканчивается при заполнении последней ячейки. Адрес начала блока заносится в ячейку 8FE3 (ASTART). И на этом работа п/п-мы C3F9 заканчивается.

    Далее загрузчик с помощью команды PCHL передает управление введенной программе (по адресу начала блока). Никакого контроля на правильность ввода не осуществляется. Таким образом блок грузящийся по сбросу имеет вид:

    - цепочка нулевых-байт (пилотон),
    - синхробайт Е6,
    - нач.адрес блока (мл.байт, старший байт),
    - конечный адрес блока (мл.б,ст.б)
    - и сам блок.

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

    Эти мониторы имеют директивы R/W работающие в таком-же формате, за исключением того, что сразу-же за блоком следует контр.сумма: сразу-же, а не как в "уродском" формате РК-86, где "К.С" идет только после дополнительной цепочки нулей и еще одного синхробайта Е6 (кроме того в РК-86 "перепутаны" адреса блока, т.е у них сначала идёт старший, потом младший байты адреса). Кроме директив R/W МОНИТОР имеет директивы I/O - формат с именем файла (имя до 17 символов, запрашивается). Запись имеет следующий вид:

    - пилотон (256 нулевых байтов)
    - синхробайт E6
    - 3 байта D9
    - имя файла (до 17 символов считая и завершающий 0)
    - длинный пилотон (768 нулевых байтов)
    - синхробайт Е6
    - нач.адр
    - кон.адр
    - сам файл
    - контрольная сумма.

    Т.е по сути к волковскому формату добавлен только заголовок со своим пилотоном. Формат RAMDOS-Commander-а полностью совместим с таким форматом, т.к дополнительные параметры файла (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 0DH,0AH,0
    Эта программа очистит экран, напишет "ПРИВЕТ !" и будет вводить новый блок, а потом его запустит на исполнение. Пусть второй блок будет такой:

    Код:
    .
          ORG 1000H
          LXI H,TXT2
          CALL 0C438H	    ; вывод TXT2
          JMP 0C800H	    ; выход в монитор
    TXT2: DB 'КОНЕЦ ВВОДА',0
    После загрузки этого второго блока будет выдано сообщение TXT2 и "выйдем" в монитор. Такой ввод возможен только в разные адреса, ведь после ввода второго блока еще продолжает работать первый блок. Однако в BIOS имеется п/программа C453, которая вводит и автоматически запускает на исполнение введенный блок. Если использовать эту подпрограмму, то второй блок можно грузить прямо на место расположения первого (если первый блок уже не нужен).

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

    Код:
    .
        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. Эти программы предназначены для работы с блоками в одном стандартном двухфазном формате записи на ленту. Поэтому многие пользователи столкнувшись с тем, что копировщик не позволил им скопировать защищенные форматом записи блочные программы СПЕЦИАЛИСТА, напрасно ругали программу копировщик SP-COPY.

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

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

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

    Режимов работы всего 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 !").

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

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

    Чтобы сделать описанную выше блочную загрузку игры можно воспользоваться компоновщиком, а если скорость ввода не меняется то можно обойтись ленинградским монитором и копировщиком. Все блоки готовятся заранее и записываются на ленту причем первые 2 блока обязательно из тех-же адресов, где они будут работать! Остальные - всё равно. Эти блоки записывают на ленту, причем для блоков 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 (2-х частотн.с побайтовой синхр-ей) или напр-р "синклеровский"). А также в ОЗУ хранятся адреса важных п/п-м самого монитора (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-2,75 МГЦ для КР580, и до двойного Турбо в 4,0 МГЦ при замене процессора на Z80. При разработке блочных загрузчиков это необходимо учитывать. Ибо, если например, ваш загрузчик контролирует время до начала очередного блока с целью защиты от копирования, а т.к из-за отсутствия прерываний считать время можно только програмно, то при загрузке на машине с двойным тактом, программа, подождав вдвое меньшее время будет вынуждена уничтожить всё ОЗУ, полагая что мерзкий кракер пытается ломать вашу защиту. Проще всего узнать скорость машины можно "посмотрев" константу записи, которая также инициализируется по сбросу.

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

    Чистяков Владимир, С-Петербург, апрель 1993
    [свернуть]
    Последний раз редактировалось barsik; 27.12.2017 в 22:19.

  7. Эти 3 пользователя(ей) поблагодарили barsik за это полезное сообщение:
    Pyk (29.12.2017), uart (27.12.2017), zx_ (27.12.2017)

  8. #56
    Master Аватар для barsik
    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    943
    Благодарностей: 305
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Турбирование СПЕЦИАЛИСТА чтобы работал КНГМД от КОРВЕТА

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

    Эта схема была разработана мной в 1988 году, т.к в экран телевизора не умещался весь растр целиком, что неприятно. Впоследствии оказалось, что такая доработка необходима и для подключения дисковода. Кроме того небольшим изменением схемы получается экран 512*256, что позволяет иметь 64 символа шрифта 8*10 в строке или 80 символов 6*10. Но это уже другая тема, т.к тогда получается почти другой компьютер.

    Если тупо использовать инструкцию типа "здесь разрезать здесь соединить", то это затруднит поиск ошибок, если ошибиться в проводах. Да и всегда лучше понимать суть схемы. Т.к нумерация выводов вентилей в схеме МК 02.1987 и в схеме ЭКСПРЕСС не совпадает, то в скобках, когда названия вентилей отличаются, приводится нумерация ЭКСПРЕСС. Не совпадают выводы DD1.4, DD11.1, а вентили DD9.1 и DD9.2 в базовой схеме в схеме ЭКСПРЕСС это D6.2 и D1.5.

    Для начала следует знать, как устроен видеогенератор СПЕЦИАЛИСТА. Цепи с выходов счётчиков с номерами 1,2,3,4,5,6 следовало правильно назвать H1, H2, H4, H8, H16, H32 (т.к соответствует сдвигу позиций экр.байтов по горизонтали), а на мультиплексоре эти веса соответствуют адресам A8...A13.

    Эта группа счётчиков в базовой схеме считает до 63, а при поступлении 64-го импульса от ЗГ сбрасывается в 0. Вентиль D6.1 формирует гашение по строкам при весах счётчиков от 0 до 15, что приводит к видимости 48-ми экранных байтов при весах счётчиков от 16 до 63 и экрану с 9000.

    Задача, заменить кварц 8 МГЦ на 10 МГЦ. Чтобы частота строк не изменилась коэффициент деления счётчика строк надо изменить с 64 до 80. Для этого надо ввести еще один каскад деления на ТМ2. Этот триггер взводится по заднему фронту цепи H32 (это цепь 6, D3/12), формируя вес H64.

    Перенос в счётчик линий растра, т.е на вход D3/1, который раньше делался по ССИ (при весе 52), теперь удобно делать по взводу доп.триггера, т.е при весе 64. Когда конкретно делается перенос в счётчики по вертикали - не важно, лишь бы он был до начала следующей строки.

    При этом в каждой строке старые счётчики по достижении веса 64 обнуляются и начинают снова считать пока не достигнут веса 16. По достижении веса 16 (при взведённом триггере, т.е при весе H64=1) схемой совпадения на вес 64 и 16 вся цепочка счётчиков сбрасывается, обеспечивая коэфф-т деления 80. Схему совпадений можно сделать на логике (даже на 2-х диодах), но удобнее и чтобы избежать "опасных гонок" это делается на второй половинке триггера.

    В базовой схеме ССИ формируется комбинаторной схемой, которая формирует 1 при весах от 4 до 9. Это элементы DD6.1, DD1.4, DD6.3, DD11.1. В схеме ЭКСПРЕСС нумерация вентилей та же, но сами вентили иные, т.е не совпадают надписи на входах и выходах вентилей. Т.к при повышении коэфф-та деления до 80-ти, веса от 0 до 15 пробегают дважды, то теперь и веса от 4 до 9 также пробегают дважды. Это значит, что формируется два ССИ.

    Если доп.логикой просто запретить второй ССИ, что формируется при весах выше 64, то всё будет работать, но т.к ССИ будет уже не по центру сигнала гашения по строками, растр съедет влево. Легко отцентровать растр задержав ССИ на RC-цепочке (именно так и делалось в первом варианте схемы), но грамотнее просто применить иную схему совпадений для формирования ССИ при весах от 72 до 79, что простейшим образом и делает вентиль D11.1.

    RC цепочка служит для удлинения сигнала сброса триггеров и счётчиков и вообще-то работает и без неё, но грамотно удлинить сигнал сброса, т.к могут попасться счётчики работающие медленнее, чем триггер. Элемент D6.3 после переделки освобождается. Понятно, что при применении ТМ2 не из 155-той серии, оставлять висящие входы не стоит. После доработки, если загрузчик зверковский, то МГ-константы 28 и 3С надо заменить на 3C и 4C. Если же Ваш загрузчик сам настраивается на скорость записи, то менять константы не обязательно.

    1. Заменить кварц 8 МГЦ на кварц 10 МГЦ.
    2. D3.14 отрезать от D2/7 и проводом соединить с D2/12
    3. Освободить D1.4, т.е отрезать DD1/11,DD1/10 (D6/4, D6/5)
    4. Установить доп.триггер (на ЭКСПРЕССЕ напаивается на 155ЛА2 D10) и смонтировать по схеме
    5. Подключить D1.4/11 к D3/12 (цепь 6), а D1.4/10 к 3-й ноге доп.триггера
    6. DD11.1/9 (D11.1/12) отрезать от D2/2 и подключить к D2/6
    7. DD11.1/10 (D11.1/13) отрезать от D6.3/10 и подключить к TM2/5

    Таким образом с помощью одного триггера повышается такт СПЕЦИАЛИСТА до 2.5 МГЦ. Но если подключать КНГМД с ВГ93 не требуется и используется не телевизор, а монитор, то чтобы экран не особо плющился, а в то же время быстродействие увеличилось на 12.5%, лучше применить кварц 9 МГЦ, изменив коэффициент пересчёта на 72.
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	2.5 МГЦ в СПЕЦИАЛИСТЕ.jpg 
Просмотров:	35 
Размер:	23.2 Кб 
ID:	63559  
    Последний раз редактировалось barsik; 26.01.2018 в 13:41.

  9. Эти 2 пользователя(ей) поблагодарили barsik за это полезное сообщение:
    SYR-ALEX (30.12.2017), zx_ (30.12.2017)

  10. #57
    Пользователь Специалиста Аватар для fifan
    Регистрация
    30.05.2007
    Адрес
    г. Лянтор, Сургутского р-на, ХМАО
    Сообщений
    3,062
    Благодарностей: 654
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я не пойму каким образом связаны последние два поста с названием темы? Удаляю.
    http://nick-name.ru/forum/Fifan.gif
    Сайт про ПК "Специалист" и его клоны http://www.spetsialist-mx.ru/
    Web site about computer Spetsialist and its clones http://www.spetsialist-mx.ru/ (yet only in Russian)

  11. #58
    Master Аватар для barsik
    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    943
    Благодарностей: 305
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Зачем сразу удалять? Уже один раз Вы эту инструкцию удалили. Пришлось набирать второй раз. Если удалите снова, то набирать тот же самый текст в третий раз не стану.

    А посты как раз таки непосредственно связаны с темой. Первый пост про подпрограммы монитора и их использование и про другие программы. Зашла в другой теме речь о доработках эмуляторов для ввода по сбросу и понадобилось выложить это руководство по использованию подпрограмм ПЗУ. Чего тут оффтопного? Гораздо бОльшие отклонения от тем игнорируются модераторами, хотя действительно отводят от темы.

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

    А последний пост тоже не вне темы. Дисководные DOS тоже являются программами, а чтобы эти программы работали нужно заменить кварц в СПЕЦИАЛИСТЕ. Значит перед тем как выложить дисковую DOS, я просто вынужден опубликовать эту схему. Всё логично и нет никакого нарушения. А если уж так раздражает, то можно переименовать тему, сделав её ещё более длинной. "Ленинградский монитор и другие программы для СПЕЦИАЛИСТА, а также разные доработки железа СПЕЦИАЛИСТА, которые требуются для работы этих программ". Разве такое длинное название будет лучше?

    Скоро нарисую схему и напишу инструкцию как расширять ОЗУ заменой на РУ7 и путём напайки второй банки РУ5 вторым этажом. Но боюсь, что за выкладку ещё одной схемы в этой теме меня снова забанят на полгода "за злостный оффтоп". Так что потерпите немного. Примерно через неделю эту схему отсюда удалю и создам какую-нибудь другую тему. Но никак не могу придумать название, чтобы модераторы не доставали за оффтоп. Пока придумал название темы "Обо всём, что связано со СПЕЦИАЛИСТОМ".
    Последний раз редактировалось barsik; 30.12.2017 в 11:31.

  12. #59
    Пользователь Специалиста Аватар для fifan
    Регистрация
    30.05.2007
    Адрес
    г. Лянтор, Сургутского р-на, ХМАО
    Сообщений
    3,062
    Благодарностей: 654
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Уговорил. Всех с наступающим!
    http://nick-name.ru/forum/Fifan.gif
    Сайт про ПК "Специалист" и его клоны http://www.spetsialist-mx.ru/
    Web site about computer Spetsialist and its clones http://www.spetsialist-mx.ru/ (yet only in Russian)

  13. #60
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    Павлодар
    Сообщений
    2,867
    Благодарностей: 1454
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    barsik, прекрати быть таким унылым. Алсо твоя тяга к стаскиванию всех околотемных (и иногда, кстати, не очень околотемных) вещей в одну кучу (а чаще даже в один пост) утомляет и хочется бросить все и уйти.

    Сделай тему "Доработка xxx, необходимая для запуска программы yyy" и там описывай. Людям будет понятнее и никакого загромождения. И ты всегда можешь дать внутреннюю ссылку на тему любому спрашивающему. Научись уже сортировать и упорядочивать свои мысли наконец.

    Касаемо твоих мыслей относительно модерирования данного ресурса: ты уже очень давно (во время первого своего пришествия) нам всем все предельно ясно разьяснил. Не нужно повторять это по поводу и без повода.

Страница 6 из 8 ПерваяПервая ... 2345678 ПоследняяПоследняя

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

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

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

Похожие темы

  1. PS/2 адаптер клавиатуры для Специалиста
    от fifan в разделе Специалист
    Ответов: 220
    Последнее: 24.03.2017, 20:53
  2. Ответов: 143
    Последнее: 02.01.2017, 20:51
  3. Ответов: 46
    Последнее: 15.03.2014, 15:56
  4. Есть 3 кассеты для Специалиста...
    от Bolt в разделе Специалист
    Ответов: 60
    Последнее: 27.10.2013, 13:24
  5. Изучается спрос на плату для Специалиста
    от Павел Рябцов в разделе Барахолка (архив)
    Ответов: 109
    Последнее: 30.11.2010, 10:16

Ваши права

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