Просмотр полной версии : Компьютер "Robotron 1715(M)"
Посмотрел логи и возник (глупый) вопрос - а размер сектора у роботрона точно 512 байт?
Что то там такое в логах мелькает, что наводит на мысли о 128 или 1024 байтах.
Нет, вроде 1024. А к чему вопрос?
К - а 800 (как и теледиск) с таким форматом умеет создавать-работать :) Подозреваю, что теледиск - да, а 800 - просто не помню - давно я его уже гонял (когда переносил образы с СМ-1420 на Квант-4С через писюк :) )..
Но судя по тому, что об 1024 известно, я так понимаю, что этот вопрос как-то решён...
Извиняюсь за подъем некротемы.
В Ленинградском компьютерном клубе восстановили Robotron 1715M
(и я заполнил маленькую карточку на него)
https://lenclub.sensi.org/dokuwiki/doku.php?id=robotron1715m
Всякая критика принимается.
Особенно приветствуются гайды про ДОС-программы записи дискет и перенос CP/M. Мне Линух ближе и я делал на нём.
Продублирую здесь свой пост с соседнего форума.
Когда-то давным-давно я безуспешно искал игру PILOTS для Robotron 1715. Почти восемь лет назад мне удалось найти основной файл PILOTS.COM. Но сразу после запуска программа пытается загрузить оверлейный модуль. Чтобы обойти эту проблему и хоть как-то запустить игрушку, я частично её дизассемблировал и поставил заглушку. А три года назад удалось найти архив, который содержит и оверлейный файл PILOTS.000.
Сам точно не зная зачем, я увлёкся дизассемблированием и декомпиляцией игры. В результате был получен полный исходный код на Паскале.
В программе применяется прямое обращения к видеопамяти из-за чего невозможна корректная работает на модели 1715М(W). Поэтому было решено модифицировать исходный код так, чтобы игра запускалась и одинаково работала и на 1715 и на 1715М. Работа велась довольно вяло и с перерывами, но была завершена.
При запуске определяется модель машины, устанавливаются адреса видеопамяти, подпрограммы пересылки в/из видеопамяти и константа частоты процессора для корректной работы процедуры задержки DELAY. Все изображения в игре созданы для кодировки SC619 (большие и малые латинские буквы), поэтому при запуске на модели 1715М выполняется сравнение загруженного знакогенератора с этой кодировкой и, в случае несовпадения, заменяется на SC619 с последующим возвращением исходного знакогенератор в конце игры.
Кроме того, модификация и оптимизация коснулась, в основном, инициализации, представления и вывода текстовых данных, заключения повторяющихся последовательностей в подпрограммы. В результате объём исполняемого кода существенно сократился, и вся игра могла бы уместиться в один исполняемый .COM-файл, но я решил оставить оверлеи, чтобы как и в оригинале, перед их запуском машина делала паузу и шуршала дискетой :)
Кроме того, исправлены две ошибки:
- "потеря" вертолётом шасси при подъёме и последующем повороте в направлении движения;
- заворот на конец предыдущей строки летящих влево птиц.
При первом запуске в заставке к игре вместо оригинальной copyright-строки выдаётся новая бегущая, после окончания пробега или при нажатии на любую клавишу выводится оригинальная статическая. При этом, в copyright-строке после 'Terminal:', если запуск произведён на 1715W, выводится инверсная строка 'PC 1715W'
АЛГОРИТМЫ, ЛОГИКА И ВИЗУАЛИЗАЦИЯ в обновлённой версии ОСТАЛИСЬ ПРЕЖНИМИ И НЕ ПОСТРАДАЛИ!
Думаю, настало время поделиться оригинальной версией игры для 1715 и новой версией, способной работать на обеих моделях.
Архив PILOTS_W.zip, включает в себя:
- оригинальную версию игры для 1715 ( файлы PILOTS.COM, PILOTS.000, PILOTS.DAT);
- модифицированную версию для запуска на обеих моделях (файлы PILOTSW.COM и PILOTSW.000 );
- образ дискеты 1024*5*80 *2 с этими файлами (файл PILOTSW.CPM);
- перевод инструкций к игре и тестам ( PILOTS.pdf).
83596
на Robotron 1715 нету ни графики ни звука. Это конторская машинка с зелёным текстовым дисплеем. Максимум что можно - рисовать буковками и ASCII-ART. (На M можно грузить свои фонты.)
Вопрос: какой ESC командой грузятся эти фонты? Или просто пишутся в память?
Например, на BBC micro символ с номером N программируется так: #17 N <8 байт>, начиная с верхнего. N = #F0..#FF (это неточно).
Вопрос: какой ESC командой грузятся эти фонты? Или просто пишутся в память?
В программе применяется прямое обращения к видеопамяти из-за чего невозможна корректная работает на модели 1715М(W).
Оно?
shattered
19.01.2026, 20:14
Вопрос: какой ESC командой грузятся эти фонты? Или просто пишутся в память?
посмотрите, как это делает MODCS.COM
похоже, что через BDOS call 113
Вопрос: какой ESC командой грузятся эти фонты? Или просто пишутся в память?
Просто пишутся в память.
Сначала я сделал то, что посоветовал ув. shattered, а именно посмотрел MODCS.COM.
Процитирую своё сообщение от 19.01.2024 с phantom.sannata.org:
Чтобы узнать как пересылать данные в/из видеоОЗУ и знакогенератор я дизассемблировал резидент LOADCS.RSX, который специально для этого предназначен (см.файл SCP30_1715w.pdf) Дизассембляж-в файле LOADCS.lst. Этот резидент пришит к программе MODCS.COM, который грузит знакогенератор. Главный его недостаток - нельзя задать количество пересылаемых байт, оно фиксировано - 2048.
Из него я узнал последовательность действий по пересылке.
Сначала задаётся направление передачи, для этого надо вызвать функцию BIOS+54h с параметром в регистре ВС:
ВС=FF01 - из области программы(текущий банк) в видеоОЗУ (банк 0);
ВС=01FF - из видеоОЗУ (банк 0) в область программы (текущий банк).
После этого вызвать функцию BIOS+48h с параметрами:
BC=количество пересылаемых байт (должно быть не менее двух !!!)
DE=адрес источника
HL=адрес получателя.
!!! НО В САМОМ НАЧАЛЕ НЕОБХОДИМО УСТАНОВИТЬ УКАЗАТЕЛЬ СТЕКА SP НА АДРЕС, КОТОРЫЙ РАСПОЛОЖЕН В ОБЩЕЙ ОБЛАСТИ, ТО ЕСТЬ ВЫШЕ С000h, А В САМОМ КОНЦЕ ВЕРНУТЬ ЕГО НАЗАД !!! Если этого не сделать, то крах обеспечен - пробовал :)
То есть так:
ld (0C100h), sp
ld sp, 0C100h
ld bc, 0FF01h
call BIOS_54 ;(F203h+54h = F257h )
ld hl, dst
ld de, src
ld bc, size
call BIOS_48; (F203h+48h = F24Bh )
ld a, 20h ; вроде работает и без этого,
out (19h), a ; но так сделано в LOADCS
ld sp, (0C100h)
Адрес знакогенератора 2000h.
Функции BIOS осуществляют пересылку посредством DMA.
Я делал просто LDIR'ом.
На всякий случай адрес страницы, где я писал о своих изысканиях https://phantom.sannata.org/viewtopic.php?p=780574#top, последние сообщения
Просто пишутся в память.
Это отход от принципа байтового устройства i/o. Адаптация к другому экрану становится сложнее. Правильнее - как загрузка шрифта в принтер, команда и сам шрифт выводятся через conout.
Кстати, у меня где-то есть rogue и sokoban для роботрона. Под эмулем - ОК. Запись состояния не работает, но это проблема эмуля. Есть текстовые адвентюры и ещё что-то. Найду, если интересно.
Адаптация к другому экрану становится сложнее. Правильнее - как загрузка шрифта в принтер, команда и сам шрифт выводятся через conout.
Может быть и правильнее, но гораздо медленнее, а когда надо поменять весь шрифт - то и неудобно. На каждый символ городить ESC-последовательность.
Найду, если интересно.
Конечно, интересно.
На каждый символ городить ESC-последовательность.
Зачем на каждый? В моём эмуляторе терминала так:
ESC & w n m <данные>, (m-n+1)*8 байт
w =ширина
n =с какого
m =по какой
при загрузке одной буквы n=m
Всё передаётся одним куском. Если ширина "не та" - всё игнорируется. Эмулятор живёт в странице, которая может быть разной. И не болит голова за совместимость, оно само всё положит куда надо. Шрифты в принтер загружаются похоже, команда "ESC &" подсмотрена у Epson. Если нужна скорость - никто не запрещает залезть в память напрямую.
Конечно, интересно.
Это чуть позже, сейчас нет под рукой.
shattered
21.01.2026, 19:49
r1715mt.v2.ima -- почти совпадает с r1715mt.cpm из архива эмулятора b2m,
на этом диске -- редакция SCP 3 под именем ТОС/М 1.0
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot