А хорошие машинки как правило делаются для себя. А потом уже получают общественное признание.
А хорошие машинки как правило делаются для себя. А потом уже получают общественное признание.
Вобщем, отвечаю сам себе, ну и может кому ещё потребуется для быстрой заливки софта.
1. Дампим, любым удобным способом, флэшку в файл.
2. Пилим, опять-же любым удобно-доступным способом, полученный в первом пункте файл, на куски. Размер всех кусков, за исключением последнего 8192 кБ, а последний - что останется.
3. Кускам даём имена с номером, чтоб потом не перепутать при сборке. Расширение .xdi, чтоб Штейнблюмом открыть.
4. Запускаем Штейнблюм. Жмём открыть образ, выбираем интересующий кусок, распиленного образа. Говорим открыть.
5. Теперь Штейнблюм попросит поправить параметры .xdi. Прикрепляю здесь содержимое .ini файла для второго, и далее до предпоследнего, дисков. Для первого и последнего потребуются изменения, опишу ниже. Содержимое сохраняем в файл <любое имя файла>.ini
Скрытый текст
Код:[main] format_id="" ;additional format specification string skew_factor=0 ;sector skew factor or sector order date_stamp=2 ;date stamps format. (0=>none, 1=>CP/M standart, 2=>non standart (used in Z80DOS and DOS+ for example)) ver=0 ;version of ini-file format [xdi] len=00 ;Sector length = 80h shl len. (0=>128, 1=>256, 2=>512, 3=>1024) den=01 ;Heads number - 1 sec=0080 ;Sectors per Track trk=0100 ;Tracks number spt=0080 ;logical Sectors (128-byte records) per track. (Not used in SteinBlume) bsh=05 ;Block shift. Block size = 80h shl bsh. (3=>1k, 4=>2k, 5=>4k...). (Not used in SteinBlume) blm=1F ;Block mask. Block size = 80h * (blm + 1). (7=>1k, 0Fh=>2k, 1Fh=>4k...) exm=01 ;Extent mask. Extent size = 4000h * (exm + 1). (0=>16k, 1=>32k, 3=>64k, 7=>128k) dsm=07FB ;Blocks number (without) directory. dsm = (tracks_number - off) * spt * 80h / block_size - 1. (dsm = (tracks_number - off) * spt * 80h - (drm + 1) * 20h) / block_size). (Not used in SteinBlume) drm=01FF ;(no. of directory entries)-1 al=00F0 ;Directory allocation bitmap. (Not used in SteinBlume) cks=0080 ;Directory size in 128-bytes records off=0000 ;Offset, number of reserved tracks[свернуть]
6. Жмем кнопку "загрузить" и выбираем сохранённый перед этим файл. После этого можно смело жать кнопку "ОК".
7. Теперь исправления для первого и последнего кусков. Дело в том, что в начале первого файла нужно учесть системную область, а в последнем - его размер. Для первого, параметр в последней строчке "off=0001", для последнего, меняем "trk=" по правилу: CF 32 MB -> 00E0, 64 MB -> 00A0, 128 MB -> 0040.
8. Собственно, всё... единственное наблюдение, если диск CР/M был только отформатирован и туда ещё ничего не писали на Аюше, нужно выбрать все файлы, они отображаются с вопросительным знаком, и удалить их. Иначе програмка считает, что нет свободного места. Ну, а вобщем, с этого места уже "интуитивно понятно". Скорость заправки прибора софтом увеличивается в десятки раз!
9. Чуть совсем не забыл... склеиваем куски в соответствии с нумерацией, опять-же любым доступным образом, ну и заливаем обратно на флэшку.
Доброго всем дня!
Решил немного вернуться к теме и обратиться к автору, как к авторитету, но если кто-нибудь другой ответит, я тоже не обижусь:
поскольку меня CP/M задела своим крылом только чуть, да и то в качестве студента, работающего в терминальном классе, и, скорее всего, это была MP/M, то можно сказать, что я с нею совершенно не знаком. Поэтому вопрос: каким образом запускаются или адаптируются программы для этой ОСи, чтоб ввод-вывод ориентировался не на терминальный порт, а на видеоконсоль, состоящую из AVR и PIC контроллеров? Безусловно, сама ОСь работает с ними отлично, а вот прикладной софт так и норовит вывести всё куда-то в сторону.
Заранее благодарен!
А прикладной софт работает через ОСь.
Т. Е. весь ввод|вывод идёт через стандартные вызовы СР/М. А сама же ОСь работает через "BIOS", который пишется уже под конкретное железо...
А если софт лезет "налево", значит он уже написан под конкретное железо, например игры, которые работают напрямую с экраном...
Последний раз редактировалось alx32; 26.06.2019 в 15:10.
Пишу по памяти.
Стандартное приложение CP/M не оперирует понятиями RS-232, оно пишет/читает консоль (есть разновидности консолей, об этом ниже), а также в ряд устройств - Printer/LPT (запись символа и чтение статуса), Puncher (только вывод), Reader (только чтение).
- Про Puncher/Reader (те самые бумажные карточки) сразу забудем, аппаратно их уже нет, остались только вектора BIOS как напоминание (к слову их использование под что-то другое не принято, тупо пропадает место в таблице векторов BIOS).
- Printer в BIOS встречается реализованным, и с ним всё понятно: байт туда, байт оттуда.
- С консолью (условно, экран+клавиатура) чуть сложнее это посимвольное устройство (тоже на запись/чтение байта) в CPM2.2 делится/переназначается на несколько подвидов в зависимости от того как установлен байт по адресу 3 (IOBYTE, он состоит из четырех 2-битных величин):
Соответственно, если пользовательское приложение хочет писать на экран (CRT) и читать какую-то физически подключенную клавиатуру, оно кладет в ячейку (3) значение 149, и весь дальнейший ввод-вывод в консоль (подпрограммы CONOUT/CONIN/CONST BIOS) идет на устройство CRT(TV). Для переключения вывода/чтения на TTY(RS232) нужно в ячеку (3) положить значение 148.Код:;The IOBYTE lives at address 3 (in the Zero Page) and should be changed using ;BDOS calls 7 and 8 (get/set IOBYTE). The value is bitmapped: ; ; Bits Bits 6,7 Bits 4,5 Bits 2,3 Bits 0,1 ; Device LIST PUNCH READER CONSOLE ; ; Value ; 00 TTY: TTY: TTY: TTY: ; 01 CRT: PTP: PTR: CRT: ; 10 LPT: UP1: UR1: BAT: ; 11 UL1: UP2: UR2: UC1: ; ;* BAT = batch mode. Use the current Reader for console input, and the current ; List (printer) device as the console output. ; ; * CRT = Standard console (keyboard and terminal screen). ; * LPT = Standard line printer. ; * PTP = Standard Paper Tape Punch. ; * PTR = Standard Paper Tape Reader. ; * TTY = Teletype device, eg a serial port. ; * UC1 = User defined (ie implementation dependent) console device. ; * UL1 = User defined (ie implementation dependent) printer device. ; * UPn = User defined (ie implementation dependent) output device. ; * URn = User defined (ie implementation dependent) input device.
В свою очередь подпрограммы CONOUT/CONIN/CONST BIOS должны содержать код switch по значению ячейки (3) - в зависимости от ее содежримого гнать выводимый пользователем символ либо на TV, либо на RS232. Сделано ли это в BIOS Аюши - вопрос к авторам, в принципе оно просто делается (при наличии подпрограмм для устройств). Я у себя в клоне CP/M такое делал, и очень понравилось: чудесным образом начинают работать всякие терминальные вещи типа Кермита (который издревле имеет режим сборки под управление потоками через IOBYTE).
- - - Добавлено - - -
Штатно переключить iobyte можно классической утилиой STAT:
STAT DEV: - текущие назначения устройств
STAT CON:=CRT: - ввод/вывод с теминала CRT (TV)
STAT CON:=TTY: - система переключается на ввод/вывод по RS-232.
- - - Добавлено - - -
Вот тут еще обсуждали, читать начиная с этого поста:
https://zx-pk.ru/threads/12367-zhele...l=1#post537195
Последний раз редактировалось Error404; 26.06.2019 в 17:10. Причина: очепятки
Лучше сделать и жалеть, чем не сделать и жалеть.
Некоторые из моих поделок тут: https://github.com/serge-404
Если косяк с последней версией платы, то беру паузу для взгляда на сорцы биоса. Не должно было бы так работать, ибо Error404 правильно про iobyte написал...
Отличие последней версии платы от первоначальной в том, что на декодер порта вывода видеоадаптера заведена линия А0, которая должна быть в "нуле" при обращении. Ранее эта линия игнорировалась и запись в порт вывода был возможен по любому доступному адресу ( у мну мож поэтому всё норм работает, и WS, и DBASE - последняя пока без перекодировки вывода под VT100). Вот и гляну, мож я где-то переменную укосяпорил неверно...
Вывод и ввод в СР/М исключительно "терминальный"...
Наконец получил плату, готовлюсь к сборке. С вашего позволения, пара ламерских вопросов:
1) Что происходит вокруг D17.2, почему у нее 5 нога торчит в воздухе? Здесь вот:
В принципе, тот же вопрос и по D17.1.
2) Как думаете, возможно ли вместо 580ВВ51 (нету у меня) вкорячить некую Motorolla MC68661? Картинки издалека похожи -) Вдруг кто сталкивался?
3) Будет ли Аюша стартовать без атмеги и пика? С целью потыкать в нее палочкой через RS-232 в мониторе...
1. По D17. Неподключенный вход в 155 серии должен восприниматься как "1", и ИСКЛ.ИЛИ должен работать как инвертор. Я не пробовал, в моей разводке печатной платы все свободные входы на +5в через 2кОм.
2. Без pic и atmega будет работать с перемычкой на 27-28 нога атмеги (уже об этом писали).
TTL микросхемы воспринимают висящий вход, однозначно, как единицу, но так поступают только в любительских конструкциях. В коммерческих всё должно быть однозначно. А вот в МОП сериях висящие входы дают такие чудеса, что даже в "мигалке лампочкой" такое не позволяют
Отправлено с моего iPad используя Tapatalk
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)