PDA

Просмотр полной версии : Специалист_МХ2: новые программы для нового Специалиста.



fifan
01.10.2011, 21:02
Начинаю тему для свода всех размышлений по написанию и использованию новых программ для Специалиста_МХ2. Первым в этом деле был HardWareMan с его переделанным Монитором-4 и Loaderом. Я продолжаю своим SpetsCommanderом.

Пока хочу с помощью него загружать под STD rks файлы с SD карты и файлы с Flash-диска от HardWareManа. Под МХ будут загружаться файл-образы odi, реальные дискеты (если контроллер дисковода подключен), либо просто ROM-диск пользователя. Сделал только вывод заголовка файлов. Половина процедур, если HardWareMan не против, взято с его Лоадера для загрузки ПЗУ образа с SD карты. Вот например, экран вывода заголовка файлов Flash-диска (http://www.zx.pk.ru/showpost.php?p=411460&postcount=350).

Очень нуждаюсь в процедурах простейшего опроса клавиш, а то готовые любого Монитора слишком большие. А также необходим подсчёт оставшейся памяти в использовании и определения типа ПК: Специалист, МХ, МХ2.

shoorick
02.10.2011, 20:24
Очень нуждаюсь в процедурах простейшего опроса клавиш, а то готовые любого Монитора слишком большие.
выдай 0 на нижнюю линию клавиш и 1 на все остальные, а потом считывай только столбцы: все основные нужные клавиши находятся на этой линии: стрелки, пробел, вк, пс и пв. ВВ55: PA, PC0-3 - ввод, PB - вывод

AlexFantasy
03.10.2011, 20:28
Пока не запустил Специалист_МХ2 пишу Коммандер, так его назовём,
MX-Commander
MX2Commander
SpetsCommander

А ваще скриншот смотрится классно!!!

fifan
03.10.2011, 21:01
Пока назвал просто Commander by Fifan. Из предложенных AlexFantasy: первые два не пойдут, хочу сделать универсальный файл-менеджер, над третьим подумаю. Пока обкатываю в эмуляторе. Нужно написать подпрограммы для обслуживания клавиш, задел дал shoorick (великий гуру по писанию программ под Спец). Вот ещё скриншоты соответственно в STD, 8 цветов и МХ, цвет отключён.
Хочу написать универсальную программу для всех клонов, да ещё и с поддержкой SD карты (загрузка bin, rks и odi форматов). Ну и конечно реальный дисковод не обойдём стороной. Пока думаю как программно отличить STD от МХ.

AlexFantasy
03.10.2011, 23:12
Пока назвал просто Commander by Fifan. Из предложенных AlexFantasy: первые два не пойдут, хочу сделать универсальный файл-менеджер, над третьим подумаю.
FiComm;)

---------- Post added at 22:12 ---------- Previous post was at 22:10 ----------


FiComm;) или просто fic и плюс ко всему команду такую добавить!
А может ficus.... ???? Просто ficus????

balu_dark
04.10.2011, 00:11
Пока думаю как программно отличить STD от МХ.

А цвет или особенности вывода изображения - отличия есть?
Зачем спрашиваю - выводим при старте окошко типа как у нерегистренного тотал командера типа : "для запуска нажмите зеленую кнопочку" ну и сделать 2 кнопки раскрашеные по разному стандарту - одну под MX вторую под стандарт. в соответствии с нажатой и выбирать режим.

второй вариант - иметь в еепромке/ромдиске/часах - некий флаг. который выставлять после первого запуска софта(после вопроса о типе).

например если с цветами не прокатит то предположить что в оригинальном ромдиске (стандартном) в конце прошивки лежит скорее всего FF а в МХ просто при подготовке ром диска положить туда например 2 символа M и X. и при запуске читать - если FFFF тогда стандарт , а если MX - ну тут само собой.

HardWareMan
04.10.2011, 07:27
Вот сразу не подумал, что-то. Надо было сделать так: чтение из IOP+1CH - состояние режима (два бита, MODE0..MODE3), чтение из IOP+1DH - номер банка дополнительного ОЗУ. У ПЗУ у нас нету страниц, так что остальное не нужно. Но да, теперь нам придется делать "патч" на платке.

fifan
04.10.2011, 16:57
Нашёл как определить тип компьютера. Я записываю в порт РУС ВВ55 клавиатуры управляющее слово, а затем из порта предназначенного для ввода данных с клавиатуры (в моём случае РА) считываю данные. Если все единицы, то значит я верно указал адреса ВВ55 (для МХ и Стандарта они отличаются). Сейчас у меня выводится тип компьютера (Стандарт или МХ) и количество цветов (8 или 16).

b2m
04.10.2011, 17:11
Если все еденицы, то по этому адресу устройства нет. Надо бы наоборот сделать: настроить порт на вывод, записать в порт ноль (а можно и не записывать, всё равно ноль будет) и считать его. Если считаешь ноль, то там есть ВВ55, а если еденицы, то порта нет. Памяти (которая дала бы тот же эффект) на тех адресах быть не может. Но чтобы удостовериться на все 100%, можно затем настроить порт на ввод и сразу считать из порта. Из памяти считается прежде записанный ноль, а из клавиатурной ВВ55 - еденицы.

---------- Post added at 18:11 ---------- Previous post was at 18:06 ----------

Т.е. алгоритм такой:
1. настраиваем на вывод, записываем ноль
2. читаем из порта - должно быть ноль
3. настраиваем на ввод
4. читаем из порта - должны быть еденицы.

А то, что работает в эмуляторе, не обязательно будет работать на реале.

fifan
08.10.2011, 20:40
Сделал опрос клавиатуры по алгоритму b2m, только нижней строки. Из представленных скриншотов видно как выбирается драйв панели (пока только правой), а также перемещение курсора по именам файлов. Пока не сделал одинаковый вывод в нижнюю строку панели имени текущего файла (там пока из последней строки). На очереди работа с SD картой, а именно вывод файла BIOS.BIN и файлов с расширением rks. Используется драйвер от HardWareManа Loader V5.

fifan
11.10.2011, 20:41
Очередная ревизия SpetsCommanderа. На очереди - загрузка с SD карты. К сожалению не знаю как эмулировать SD карту на эмуляторе от b2m. Буду проверять на реальной железке (Специалист_МХ на Reverse u10).

b2m
12.10.2011, 00:06
К сожалению не знаю как эмулировать SD карту на эмуляторе от b2m.
Спрашивай, что непонятно. Специалист-МХ2 эмулируется в полном объёме, включая SD карту. Путь к образу SD карты указан в конфиге.

fifan
12.10.2011, 05:11
Специалист-МХ2 эмулируется в полном объёме, включая SD карту.
На реальном Специалисте-МХ2 система при сбросе сама грузит образ ПЗУ в память. Вот как здесь (http://www.youtube.com/watch?v=z1Ifo-6ciqk). Сейчас при старте эмулятора просто грузится Монитор-4 из ПЗУ.

b2m
12.10.2011, 10:22
На реальном Специалисте-МХ2 система при сбросе сама грузит образ ПЗУ в память. Вот как здесь (http://www.youtube.com/watch?v=z1Ifo-6ciqk). Сейчас при старте эмулятора просто грузится Монитор-4 из ПЗУ.
Подставь ПЗУ от реального Специалиста-МХ2, будет грузиться с SD карты. Или скажи, где скачать новую версию, я заменю. То, что лежит у тебя на сайте, грузит монитор из ПЗУ.

Error404
13.10.2011, 21:53
Очередная ревизия SpetsCommanderа. На очереди - загрузка с SD карты. К сожалению не знаю как эмулировать SD карту на эмуляторе от b2m. Буду проверять на реальной железке (Специалист_МХ на Reverse u10).

Смутило:


Основная память: 48к, свободно 48к
РАМ-Диск: 512к, свободно 512к

А сам коммандер в какой памяти работает?

Файловые системы на SD (какие, кстати - вряд ли те же что и на прочих носителях?) поддерживаются (или будут поддерживаться) ОС? Т.е. коммандер туда лазает (или планируется лазать) напрямую или через подпрограммы ОС?

fifan
14.10.2011, 05:22
У меня пока нет подпрограмм подсчёта объёма свободной памяти, цифры 48 и 512 просто забиты. Пока коммандер грузится с нулевого адреса. Когда справлюсь с загрузкой с SD карты - перемещу его в другое место, наверное ближе к видеопамяти.

fifan
15.10.2011, 19:32
Сейчас намерен сделать полную подпрограмму определения кода нажатой клавиши по таблицам (http://www.zx.pk.ru/showpost.php?p=424143&postcount=504). Ранее я сделал опрос только нижней строки клавиатуры.

---------- Post added at 21:32 ---------- Previous post was at 21:26 ----------


Файловые системы на SD (какие, кстати - вряд ли те же что и на прочих носителях?) поддерживаются (или будут поддерживаться) ОС? Т.е. коммандер туда лазает (или планируется лазать) напрямую или через подпрограммы ОС?
Используются подпрограммы с Loader V5 от HardWareManа. Пока он (лоадер) умеет грузит с SD карты любой Монитор с Загрузчиком и другими программами в режиме Стандарт объёмом не более 12 кБайт одним файлом (в первоисточнике файл BIOS.BIN). Назначение Коммандера будет в считывании каталога, манипуляциями с файлами и запуск выбранного.

HardWareMan
16.10.2011, 12:41
Предлагаю стыкануться с Фифаном и грамотно распилить ПЗУ и HMA режима стандарт. Я бы тогда занялся конкретно BIOSом и DOSом. А он пускай клепает оболочки дешевые. :3

fifan
16.10.2011, 16:19
Предлагаю стыкануться с Фифаном и грамотно распилить ПЗУ и HMA режима стандарт. Я бы тогда занялся конкретно BIOSом и DOSом. А он пускай клепает оболочки дешевые. :3
Давай. Вот сырок - bios.a80. Твой загрузчик пока не используется. Пока ненужное закомментированно. Каталоги читаются из временных буферов: дискеты - образ odi, ROM-диск - из самой прошивки МХ, а вот Flash-диск - из каталога flash.bin. Ещё отдельно подгружаются файлы fdd.a80, romdisk_mx.a80 и romdisk_std.a80.

HardWareMan
16.10.2011, 17:14
; подпрограмма сложения данных
; вход [BC] - 2-е слагаемое
; вход [HL] - 1-е слагаемое
; выход [HL] - сумма
HexAdd scf
ccf
ld a, c
add a, l
ld l, a ; l=l+c
ld a, b
add a, h
ld h, a ; h=h+b
ret nc
inc h
ret
лицоладонь.жпг ADC для кого придумали? DAD в конце концов?!...

b2m
16.10.2011, 18:00
Что ругаешься? Может он так задумывал. :)
Код ведь не соответствует add hl,bc ;)

fifan
16.10.2011, 18:41
Я всё писал в мнемонике Z80, но для совместимости с ВМ80 (эмулятор всё равно расширенные команды не пропускает - заточен под ВМ80). А приведённая подпрограмма учитывает перенос в старший разряд. Если и adc пойдёт, то напишите. Чуть подзабыл ассемблер, лет 7 со времен писания программ под Скорпион прошло...

HardWareMan
16.10.2011, 19:00
Я всё писал в мнемонике Z80, но для совместимости с ВМ80 (эмулятор всё равно расширенные команды не пропускает - заточен под ВМ80). А приведённая подпрограмма учитывает перенос в старший разряд. Если и adc пойдёт, то напишите. Чуть подзабыл ассемблер, лет 7 со времен писания программ под Скорпион прошло...
Если по условию нужно сложить именно [HL] и [BC] как 16ти битную арифметику, то:
1. Не нужно сбрасывать 'C', т.к. первая команда сложения не учитывает этот флаг.
2. Корректировать старший байт нужно ДО второго сложения.
3. А значит, подпрограмма будет выглядить так:

PUSH PSW
MOV A,L
ADD C
MOV L,A
MOV A,H
ADC B
MOV H,A
POP PSW
RET
4. Но если вспомнить таблицу команд ВМ80, то можно просто сделать DAD B и всего делов...

PS Я предлагаю использовать TASM и в родных мнемониках ВМ80.

fifan
16.10.2011, 19:09
4. Но если вспомнить таблицу команд ВМ80, то можно просто сделать DAD B и всего делов...
Вот это и применим. Спасибо![COLOR="Silver"]

HardWareMan
16.10.2011, 19:43
лицоладонь.2
это чё? обфускация команды "DAD B"?
Никак нет. Результат совершенно другой. :3

fifan
16.10.2011, 20:00
А вот коды этой подпрограммы и некоторых других я взял то с сайта Shoorickа (если автор не против), конкретнее с архива (http://www.spetsialist-mx.ru/Soft/spec.rar).

HardWareMan
17.10.2011, 07:33
Я уже выкладывал этот док на соседнем форуме, но думаю, что он понадобиться и тут. Это реплика удобной таблички команд 580ВМ80 из журнала Радио, статья про Радио-86РК. Думаю, что в соседней ветке про Радио и Орион она тоже будет полезна. ;)

breeze
17.10.2011, 13:52
Начинаю тему для свода всех размышлений по написанию и использованию новых программ для Специалиста_МХ2. Первым в этом деле был HardWareMan с его переделанным Монитором-4 и Loaderом. Я продолжаю своим SpetsCommanderом.

Класс! Когда видишь, как люди делают подобные вещи, у самого начинают руки чесаться и хочется тоже что-то сделать! Удачи с проектом!

HardWareMan
17.10.2011, 14:21
Я, пожалуй, начну с BIOSа. И так понятно, что это ответственная часть. В самом BIOSе всего несколько ключевых подпрограмм. И начну я с вывода символа.

Вывод символа будет стандартный для Спеца (для поддержки совместимости): 64х25, даже координатная сетка будет та же. Только реализация будет быстрой и с поддержкой цвета. Задумок много, пока только оформлю хотелки. Для начала все будет писаться для именно для стандарт режима, потом допилится и до МХа.

1. Полная совместимость со старыми программами, которые печатают старый текст в режиме КОИ7. А значит будет управляющий код, переключающий КОИ7 и ... (нет, не КОИ8р, я его с линупсов не люблю. :3) ср866. Почему? FAT. Этим все сказано.

2. Полная поддержка цвета. 5/8 для стандарта и 16 для МХа. Символы будут выводиться без проверки на перекрытие байтом атрибутов двух символов. Так что эстетическая сторона полностью на совести программистов. :3

3. Поддержка ESC кодов. Вообще, весь сервис планируется именно через ESC последовательности. Во первых, они стандартны (вроде как), а во вторых - можно придумать много своих, не теряя в совместимости со старыми программами.

Пошерстил журнальчики про Орион, 86РК и Спец и нарыл следующие управляющие коды, которые будет поддерживаться моим выводом символа:

07H - Гудок
08H - Влево, с переходом на строку выше на границе экрана
0AH - Перевод строки со скроллингом
0CH - Домой
0DH - Возврат каретки
18H - Вправо с переходом на следующую строку на границе экрана
19H - Вверх со скроллингом
1AH - Вниз со скроллингом
1FH - Очистка экрана
7FH - Инверсия вывода (выключается повтором кода)

1BH - ESC:
1BH, 41H - Вверх
1BH, 42H - Вниз
1BH, 43H - Вправо
1BH, 44H - Влево
1BH, 45H - Стирание экрана
1BH, 48H - Домой
1BH, 4AH - Стирание ниже курсора
1BH, 4BH - Стирание правее курсора
1BH, 59H, (XXH+20H), (YYH+20H) - Позиция курсора
1BH, 61H - Гашение курсора
1BH, 62H - Восстановление курсора
Эта таблица не полная, поэтому призываю к активному обсуждению и дополнению ее. Так же, будет введен код управления направления автосмещения. По умолчанию, это курсор вправо. Но можно будет задавать вверх, вниз, влево и даже отменять автоматическое перемещение. Это позволит быстро рисовать всяческие рамки. ;) Так же, хочется повторить много управляющих кодов из МХа, но там они однобайтовые, что в нашем случае не подходит: у нас полная кодовая страница ср866, за исключением кодом менее 20Н. Давайте обсудим это и я примусь за реализацию.

Ах да, сам вывод символа будет запускаться из ПЗУ и сам фонт так же будет находиться в ПЗУ. Как в стандарте, так и в МХе.

Error404
17.10.2011, 15:23
Я, пожалуй, начну с BIOSа. И так понятно, что это ответственная часть. В самом BIOSе всего несколько ключевых подпрограмм. И начну я с вывода символа.

Вывод символа будет стандартный для Спеца (для поддержки совместимости): 64х25, даже координатная сетка будет та же.


Будет ли Монитор иметь константы в ОЗУ, описывающие геометрию экрана (как в Орионе) - на Орионе это позволяло уменьшать "область экрана драйвера" (вводить служебные строки, не попадающие под искейп-обработку)?



3. Поддержка ESC кодов. Вообще, весь сервис планируется именно через ESC последовательности. Во первых, они стандартны (вроде как), а во вторых - можно придумать много своих, не теряя в совместимости со старыми программами.

Пошерстил журнальчики про Орион, 86РК и Спец и нарыл следующие управляющие коды, которые будет поддерживаться моим выводом символа:


Я правильно понял, будешь идти по возможности близко к стандартам VT-52?

Вот результат моих исследований:


VT52 compliant codes
====================

Orion Monitor-2 Orion CPM (ACPM) MYZ80 CPM.EXE
--------------- ---------------- -------------

01h ------------ ------------ HOME
04h ------------ ------------ CLS+HOME

07h BELL BELL BELL
+ 08h cursor LEFT cursor LEFT BACKSPACE
+ 09h TAB TAB TAB
+ 0Ah LF LF LF
0Bh ------------ ------------ cursor UP
0Ch HOME ------------ CLS
+ 0Dh CR CR CR

18h cursor RIGHT cursor RIGHT CLREOLN
19h cursor UP cursor UP -----------
1Ah cursor DOWN cursor DOWN CLS+HOME

1Eh ------------ ------------ HOME
+ 1Fh CLS+HOME CLS+HOME CR+LF

+ 7Fh INVERSE ------------ -----------

+ 1Bh+34h='4' ------------ LineWrap ON -----------
+ 1Bh+35h='5' ------------ LineWrap OFF -----------
+ 1Bh+36h='6' ------------ Inverse ON -----------
+ 1Bh+37h='7' ------------ Inverse OFF -----------

1Bh+3Ah=':' ------------ cursor ON CLS
1Bh+3Bh=';' ------------ cursor OFF CLS

+ 1Bh+41h='A' cursor UP cursor UP cursor UP
+ 1Bh+42h='B' cursor DOWN cursor DOWN cursor DOWN
+ 1Bh+43h='C' cursor RIGHT cursor RIGHT cursor RIGHT
+ 1Bh+44h='D' cursor LEFT cursor LEFT cursor LEFT
+ 1Bh+45h='E' CLS CLS CLS+HOME

+ 1Bh+48h='H' HOME HOME HOME
1Bh+49h='I' ------------ set/get ActiveScreen reverse LineFeed
+ 1Bh+4Ah='J' CLRREOSCR CLRREOSCR CLRREOSCR
+ 1Bh+4Bh='K' CLREOLN CLREOLN CLREOLN
1Bh+4Ah='L' ------------ INSROW INSROW
1Bh+4Bh='M' ------------ DELROW DELROW

1Bh+52h='R' ------------ set cursor height DELROW

+ 1Bh+59h='Y'+X+Y cursor position cursor position cursor position

1Bh+64h='d' ------------ ----------- CLRBOSCR
1Bh+65h='e' [ ------------ ----------- cursor ON
1Bh+66h='f' ------------ ----------- cursor OFF

1Bh+6Ah='j' ------------ ----------- save cursor
1Bh+6Bh='k' ------------ ----------- restore cursor position
1Bh+6Ch='l' ------------ ----------- clear line

1Bh+6Fh='o' ------------ ----------- CLRBOLN
1Bh+70h='p' ------------ ----------- Inverse ON
1Bh+71h='q' ------------ ----------- Inverse OFF

1Bh+76h='v' ------------ ----------- line wrap on
1Bh+77h='w' ------------ ----------- line wrap off

Коды помеченные "+" должны быть реализованы обязательно в минимальном наборе (т.е. вместе с другими, возможно не только они).

Использование только "+"-помеченных кодов позволило мне написать коммандер (исходники на сайте) работающий не только как в "классическом" MS-DOS эмуляторе CP/M, так и на всех VT-52 версиях CP/M Ориона. Кроме того, этот коммандер корректно отображается в RS-232 терминальных клиентах, понимающих VT52 (например стандартном виндовозном HyperTerm). Этот результат на Орионе больше не одним псевдографическим коммандером не достигнут - все прочие рисуют по RS-232 кашу даже при включенной эмуляции VT52.



Так же, будет введен код управления направления автосмещения. По умолчанию, это курсор вправо. Но можно будет задавать вверх, вниз, влево и даже отменять автоматическое перемещение. Это позволит быстро рисовать всяческие рамки. ;) Давайте обсудим это и я примусь за реализацию.


Файл во вложении - описание Esc-последовательностей драйвера ACPM Ориона. Оконные функции реализовывались через коды расширенного драйвера VT-52 Ориона - последовательностью Esc+W (и не только: стандартные ESC,'L' , ESC,'M' внутри окна дают вертикальный скроллинг содержимого окна вверх/вниз). Esc-W в Орионе реализовано не совместимо с "оконными" искейпами эмулятора MyZ80, но оконные Esc-расширения стандарта VT-52 и не прижились в "стандартных" CP/M приложениях - не используются почти нигде, и как бы это помягче сказать - вообще "недостандартизованы" (неполны, неудобны, не совпадают от мануала к мануалу).



Ах да, сам вывод символа будет запускаться из ПЗУ и сам фонт так же будет находиться в ПЗУ. Как в стандарте, так и в МХе.

Будут ли векторизированы в ОЗУ подпрограммы Монитора, адрес фонта в некоторой ячейке и т.д.? Это даст подключать пользовательские драйвера и фонты... Например для CР/M, 64х25 - это мало, неудобно. Иногда надо 64х24, и почти всегда надо 80х25, т.е. по любому в CP/М придется подгружаемый драйвер иметь.

HardWareMan
17.10.2011, 15:43
Будет ли Монитор иметь константы в ОЗУ, описывающие геометрию экрана (как в Орионе) - на Орионе это позволяло уменьшать "область экрана драйвера" (вводить служебные строки, не попадающие под CLS и т.п.)?
Обязательно.

Я правильно понял, будешь идти по возможности близко к стандартам VT-52?
Получается так. Очень полезная информация.

Будут ли векторизированы в ОЗУ подпрограммы Монитора, адрес фонта в некоторой ячейке и т.д.? Это даст подключать пользовательские драйвера и фонты... Например для CР/M 64х25 - это мало, неудобно. Надо 80х25, т.е. по любому в CP/М придется подгружаемый драйвер иметь.
Обязательно, причем по стандартным адресам. Например, режим совместимости КОИ7 + задаваемый адрес фонтогенератора позволит запустить ED^7000 без каких-либо проблем. ;)

Самая громоздкая часть предполагается быть в ПЗУ, а в ОЗУ в стандартном месте загрузчика будет шлюз перехода. Но тем не менее, мы имеем еще 10КБ ОЗУ (за исключением 2КБ области загрузчика), так что места для драйверов хватит. Единственное, о чем я еще пока думаю, это правильное планирование этой HMA. Логично, закинуть ячейки вверх, а пользователю оставить непрерывный блок 0000-8FFF, без дырок. Но так же логично оставить ячейки в 8Fxx (для совместимости в том числе), а чтото системное подгружать в HMA (например ED^7000 работает в 7000 :3, на орионе я его переносил в А000 и даже прикручивал к ORDOS, заменив подпрограммы работы с мафоном на процедурки работы с диском В, а тут мы его можем загрузить, скажем, с D400, как у МХа, оставив тексту места вплоть до 8EFF). Поэтому, нужно будет обсудить данный момент.
Так же, нужно проанализировать все часто используемые ESC последовательности терминала и редко используемые (или не применимые в рамках Спеца) заменить на нужные отсутствующие.

shoorick
19.10.2011, 16:10
если автор не против
не против :)

fifan
19.10.2011, 16:26
не против :)
Я использовал некоторые подпрограммы мат. вычислений из файлов math.inc и graf.inc из упомянутого несколько постов назад архива.

P.S. Написал полную подпрограмму опроса кода нажатой клавиши. :v2_dizzy_keyboard: Какую задержку использовать для устранения дребезга и где её ставить - до или после нажатия?:speccy: Принялся за определение количества страниц RAM-диска в режиме МХ. Использую предложенный HardWareManом способ.

balu_dark
19.10.2011, 17:03
по идее - задержка от дребезга - стоит МЕЖДУ двумя опросами.
Логика простая - сделал опрос ряда - запомнил значение - подождал сколько то циклов - опросил повторно. затем сравнил между собой и с результатом прошлого опроса.
если в данном опросе оба бита совпадают и равны уровню нажатия(у одних клав это еденица - у других ноль - это уже от схемы зависит) клавиша нажата.
если не совпадают или оба нули - а предыдущий опрос было нажато - сбрасываем флаг нажатия кнопки. Сохраняем текушее значение флагов для данного ряда.

Както так. но нужен буфер по байту на каждый ряд из 8ми кнопок.

fifan
28.10.2011, 18:39
Немного продвинулся по Коммандеру. Исправил ошибки вывода каталога Flash-диска. Добавил писк при нажатии клавиш для режима МХ. На последнем скриншоте видна панель RAM-диска. Пока в ней определяется количество подключенных страниц от 1 до 8. В дальнейшем данный драйв попытаюсь сделать сплошным от 64 до 512 кБайт. Только нужно продумать механизм соединения страниц между собой. В RAMFOSе возможно было работать одновременно только с одной страницей кратной 64 кБайт. Возможно Афанасьев и продумал механизм записи программ в смежных страницах, но я этого не заметил. При копировании дисков в эмуляторе, если конец программы не укладывался в текущую страницу, то вся программа записывалась в следующую страницу.
На очереди - определение конфигурации ПК Специалист_МХ2. Данный комп в двух режимах ведёт себя как его клоны Стандартный и МХ.

HardWareMan
28.10.2011, 19:15
Единственное, что подходит - это свой формат от NC с FAT. В первых 4х байтах можно хранить номер страницы. Но тогда RAMFOS это безобразие не увидит, да. Неужели RAMFOS не понимает больше 64К дополнительного ОЗУ? Я же видел код, там ограничение в 16 страниц. Просто я никогда не ставил столько ОЗУ, да и не было возможности в кружке...

fifan
28.10.2011, 20:18
На очереди - определение конфигурации ПК Специалист_МХ2. Данный комп в двух режимах ведёт себя как его клоны Стандартный и МХ.
HardWareMan, а есть регистр в Специалисте_МХ2, по которому можно было судить что данный комп перед нами?

---------- Post added at 22:18 ---------- Previous post was at 21:56 ----------


При копировании дисков в эмуляторе, если конец программы не укладывался в текущую страницу, то вся программа записывалась в следующую страницу.
HardWareMan: Неужели RAMFOS не понимает больше 64К дополнительного ОЗУ?

Сейчас ещё раз убедился в эмуляторе от b2m в правдивости моей догадки. RAMFOS похоже работает только с 64 кБайтами. Этот недостаток можно изменить - продумать процедуру записи сплошь можно все 512 кБайт. Как в NC на писишке и других файловых менеджерах - выделили несколько файлов и копируй, перемещай или удаляй.:v2_dizzy_snowball2:
Это можно сделать так. Сделать таблицу из трёх байт на каждую страницу:
1. число целых файлов поместившихся на страницу;
2. два байта размера поместившегося файла на данной странице.

fifan
15.01.2012, 09:38
Единственное, что подходит - это свой формат от NC с FAT. В первых 4х байтах можно хранить номер страницы. Но тогда RAMFOS это безобразие не увидит, да. Неужели RAMFOS не понимает больше 64К дополнительного ОЗУ? Я же видел код, там ограничение в 16 страниц. Просто я никогда не ставил столько ОЗУ, да и не было возможности в кружке...

RAMFOS похоже работает только с 64 кБайтами. Этот недостаток можно изменить - продумать процедуру записи сплошь можно все 512 кБайт. Как в NC на писишке и других файловых менеджерах - выделили несколько файлов и копируй, перемещай или удаляй.:v2_dizzy_snowball2:
Это можно сделать так. Сделать таблицу из трёх байт на каждую страницу:
1. число целых файлов поместившихся на страницу;
2. два байта размера поместившегося файла на данной странице.
Да лучше как предложил HardWareMan: "В первых 4х байтах можно хранить номер страницы", но разместить эти байты в дескрипторе файла. Напомню его формат:

+---------+----------------------------------------------------+
|Смещение | Назначение |
+---------+----------------------------------------------------+
| 0 0h |3 байта D3h - признак заголовка |
| 3 3h |8 байт имени |
| 11 0Bh |1 байт пробел |
| 12 0Ch |3 байта расширение (тип файла) |
| 15 0Fh |1 байт - 8Ch/8Bh - признак сохранённости/ |
| |несохранённости файла (используется в RAMFOS) |
| 16 10h |3 байта - дата: число, месяц и год в двоично- |
| |десятичном формате (например, число 21 будет 21h) |
| 19 13h |1 байт - номер 1-го сектора дорожки (1...5 - |
| |0-я сторона, 6...10 - 1-я сторона) |
| 20 14h |1 байт - номер 1-ой дорожки (0...79) |
| 21 15h |2 байта (слово) объем файла/каталога в Кбайтах |
| 23 17h |1 байт - 00h/FFh - признак файла/каталога |
| 24 18h |2 байта - начальный (стартовый) адрес загрузки файла|
| 26 1Ah |2 байта - конечный адрес загрузки файла |
| 28 1Ch |2 байта - контрольная сумма файла |
| 30 1Eh |2 байта (используются в RAMFOS, назначение не ясно) |
+---------+----------------------------------------------------+
Последние два байта со смещением 30 юзаем. Хватит ли двух байт?

fifan
13.03.2012, 21:22
Очередная ревизия SpetsCommander'а. Сейчас считывается каталог Flash-диска напрямую с диска, подключенного к ППА программатора (ВВ55 №2). Т.к. на реальном Специалисте_МХ2 я диск ещё не подключил, то использовал эмулятор для экспериментов. Работает также версия разделённая на две части: загружаемая в ОЗУ с нулевого адреса и "прошитая" в системное ПЗУ. В ПЗУ программа уместилась в адреса #d000...#efff. Из стандартных подпрограмм используются #c81b- сканирование клавиатуры без ожидания. [A]=0FFh - если не нажата, иначе [A] - сканкод. Всё пространство #c000...#cfff занято стандартным Монитором.
В дальнейшем планирую сделать запуск программ с Flash-диска. Так же необходимо сделать поддержку по F3/F4/F9. Соответственно просмотр файла/редактирование файла/меню. Так же необходимо поддержать работу с SD картой в плане загрузки rks файлов. Всё это касаемо STD режима. В МХ режиме будет поддержан дисковод, RAM/ROM-диски.

HardWareMan
14.03.2012, 08:41
Работаю над драйвером SD карты и vFAT. Надо бы стукануться на предмет распила памяти. FATу нужен хороший кусок памяти под буферы...

fifan
14.03.2012, 11:06
Седня вечером стуканусь. А под Flash-диск какое максимальное количество файлов можно рассчитывать? - необходимо для расчёта буфера каталога.

fifan
15.03.2012, 18:02
Сделал запуск программ с Flash-диска (http://radikal.ru/F/s42.radikal.ru/i097/1110/fc/bcbf05b1f4d8.png.html), испытано в конфигурации "Специалист_МХ2". Пробовал под обычный Специалист (STD) - работает, хотя ещё физически Flash-диск никто к нему не подключал...

fifan
23.03.2012, 16:36
Перешёл на создание миниредактора. Сейчас командер выводит на экран дамп памяти, вызываться будет по F4 с экрана панелей. В будущем - редактирование памяти.

fifan
24.03.2012, 09:26
Отладил перемещение содержимого выводимого на экран редактора вниз - скроллинг всех строк вверх, ввод нижней строки памяти. Скроллинг вверх и вниз будет в пределах памяти файла загружаемого в ОЗУ. Сейчас возможен только просмотр дампа памяти и символьного просмотра, редактирование добавится в файлах, которые можно будет записать (SD карта). Данная версия командера заточена под STD, но часть функций уже отлажена под МХ (в том числе и с дисководом) и ждёт своего часа.

fifan
14.04.2012, 19:24
Очередная версия программы. Изменения:
1. Изменена прошивка для Специалиста_МХ2 - переделан загрузчик с ПЗУ и вставлены подпрограммы в свободное место прошивки, в том числе и обслуживающие SD карту (пока никак не задействованы).
2. Переделаны мелкие ошибки в редакторе и в подпрограмме очистки окна перед прорисовкой нового.

Теперь в прошивке стандртные векторы перехода на подпрограммы таковы:

org #d100

ColdStart jp ColdStartJ ; Холодный старт
WarmStart jp WarmStartJ ; Тёплый старт
Input jp InputJ ; Ввод символа с ожиданием. [A] - символ
ScanKey jp ScanKeyJ ; Сканирование клавиатуры без ожидания. [A]=0FFh - если не нажата, иначе [A] - сканкод
OutSymbol jp OutSymbolJ ; Вывод символа из [A] с управляющими кодами
OutText jp OutTextJ ; Печать текста из [HL] до кода 00h
ClearScr jp ClearScrJ ; Очистка экрана
ScrollUp jp ScrollUpJ ; Скроллинг экрана вверх на 1 символ
SystemBeep jp SystemBeepJ ; Системный гудок, тональность зависит от регистра
CMPHLDE jp CMPHLDEJ ; Сравнение HL и DE на равность, < и >
InitMemCard jp InitMemCardR ; Инит карты памяти, выход: [A] код ошибки карты, 00H - OK.
LoadSystem jp LoadSystemJ ; Загрузка системы. Портит все регистры, возвращает в [A] флаг успешности
WaitASecond jp WaitASecondJ ; подпрограмма 1 секундного ожидания
CompareMem jp CompareMemJ ; Сравнение данных в памяти [HL] и [DE] размером в [BC]
DiskReadSec jp DiskReadSecR ; Чтение сектора. Сохраняет все, в [A] код ошибки (00 = ОК)

Все данные подпрограммы от HardWareMan'а и большинство из них используется в Loader Ver.5 (загрузчик с SD карты под STD). Данная BIOS используется для организации вывода на экран в RAM TEST BY FIFAN (http://www.nedopc.org/nedopc/upload/test_mx.rar).

fifan
27.08.2012, 06:00
Дошёл я в написании программы до считывания с дискет. Представляю вам версию 1.27. Пока грузится с дискеты, по позже сделаю загрузку с ROM-диска. Поддержка: считывание каталога и запуск программ с ROM-диска, считывание каталогов с дискеты. Версия испытывалась на классическом МХ в эмулляторе от b2m.

Нашёл глюк: при заходе в каталог нулевой длины все рвно что-то считывается с диска. Я попадаю на удалённый каталог. Нужно вывести надпись "Нет файлов" и по ВК вернуться к предыдущему каталогу.

Сделал недавно: вывод имён подкаталогов. Для углубления строения MX_DOS дискеты хочу сделать программку, которая показывает распределение файлов по таблице FAT. Т.к. все программы в системе записываются кратные одному сектору (1024 байт=1 кБайт) то решил сделать рабочий буфер в этот размер и все операции (копирование/перемещение) будут делаться через него.

Дмитрий
27.08.2012, 11:51
fifan, в №46 сообщении третий скриншот - и на левой и на правой панели курсор присутствует, активная панель не помечена... как-то немного запутывает. Сделай указание активной панели, либо с неактивной курсор убирай.

fifan
27.08.2012, 16:51
fifan, в №46 сообщении третий скриншот - и на левой и на правой панели курсор присутствует, активная панель не помечена... как-то немного запутывает. Сделай указание активной панели, либо с неактивной курсор убирай.
Правильно подмечено. Я ещё не сделал активацию конкретной панели (левой или правой). Планирую активировать подсветкой самой верхней надписи выбранного диска. Активацию буду делать когда дойду до операций копирования/перемещения с панели на панель. Сейчас пока взялся за редактор (F4), который выводит символы и псевдографику блоком по 256 байт.

fifan
14.09.2012, 20:48
Версия SpetsCommander'а №1.30. Взялся за переход между панелями - сделал выделение панели путём инвертирования надписи диска/директория. Необходимо организовать запоминание переменных панели (номер диска, номер текущей строки и др.) и начинать написание процедуры копирования, хотя бы на RAM-диск. В этом топике выкладываю данную версию программы в виде пары cpu/i80 для загрузки в эмуляторах b2m или spmx_v42 (http://www.spetsialist-mx.ru/index26.html). Жаль, что некоторые коды нажатия клавиатуры нельзя использовать для своих нужд (http://www.zx.pk.ru/showpost.php?p=539275&postcount=595) (у меня ещё не работает код #08 - стрелка влево).

fifan
04.12.2012, 17:43
Т.к. к новому Специалисту (Специалисту_МХ2 (http://www.zx.pk.ru/showthread.php?t=12316)) подключается Flash-диск от HardWareMan'а (http://www.zx.pk.ru/showpost.php?p=428022&postcount=562), то я сделал программу (на основе подпрограмм от SpetsCommander'а) запуска программ с него.
Пока пробую её на эмуляторе от b2m. Для справки: готовая программа вывода и запуска программ с Flash-диска существует и в основной прошивке Специалиста_МХ2. Вызывается она директивой @ из-под Монитора-4. Если позволит место в прошивке, то я заменю вызов подпрограммы обслуживания @ данной программой.

fifan
05.12.2012, 16:14
Исправил ошибку определения свободного места в ОЗУ в программе "External Flash Disk". Внедряю программу в прошивку Специалиста_МХ2.

fifan
06.12.2012, 20:13
HardWareMan, услышь меня! Я тут сталкнулся с переходом из 3-го (STD) во 2-й (MX) режим в Спеце_МХ2. На ассемблере как это писать. А то кроме отключения ПЗУ и включения 8-ми цветов в 3-м режиме я ничего не откопал:

ld a, #03
ld (#7ff8), a

HardWareMan
06.12.2012, 21:23
Все верно. Только выполнять это надо в области памяти, общей для обоих режимов, чтобы там не всплыло какое-нибудь устройство. Я у себя это делал в экранной области ОЗУ, но можно и в другом, заведомо общем, месте.

fifan
07.12.2012, 17:56
Это всё ясно. Ну как мне практически перейти из одного режима в другой?

HardWareMan
08.12.2012, 08:34
Для начала, давай вспомним карту памяти в разных режимах:
http://savepic.ru/3452498.png
Очевидно, что для перехода между режимами нужно использовать тот тип памяти, который находится в обоих режимах. В нем располагаем шлюз. Это может быть ПЗУ (прыг из режима 3.0 в 2), или ОЗУ. Остальное, я думаю, сам догадаешься.

fifan
08.12.2012, 11:30
Для перехода из 3-го во 2-й режим я писал в ячейку F7FE данные (я думаю любые?), но никакого перехода не было. Хуже ситуация во 2-м режиме - при попытке записи в ячейку FFFF эмулятор (я использую от b2m) виснит. Вообще-то писать в ячейки FFFC...FFFE как-бы не есть хорошо (насчёт FFFF Афанасьев не упоминал), они предназначены для включения/выключения RAM/ROM дисков. А у тебя в них располагаются ячейки перехода в другие режимы.
С приведённой тобой таблицей я полностью согласен.
Может я не прав тогда объясни. Я хотел грузить свою программу из ROM диска пользователя (второй режим, из-под RAMFOS) в ОЗУ, потом прыгать в 3-й режим и там её (программу) запускать. Что-то не выходит.

HardWareMan
08.12.2012, 13:36
Для перехода из 3-го во 2-й режим я писал в ячейку F7FE данные (я думаю любые?), но никакого перехода не было.
Все верно. На железе оно работает - из монитора в STD я перехожу в МХ. Только после переключения надо прыгать в 0, чтобы ПЗУ проинициализировал режим МХ. Согласно карте, из ПЗУ это сделать нельзя.

Хуже ситуация во 2-м режиме - при попытке записи в ячейку FFFF эмулятор (я использую от b2m) виснит. Вообще-то писать в ячейки FFFC...FFFE как-бы не есть хорошо (насчёт FFFF Афанасьев не упоминал), они предназначены для включения/выключения RAM/ROM дисков. А у тебя в них располагаются ячейки перехода в другие режимы.
Эмулятор разве поддерживает наш специалист? Если да, то полностью ли? По поводу ячейки FFFF тут все просто - оригинальная схема МХа разрешает только 3 состояния: 0, 1 и 2. Если поставить состояние 3, то оно автоматом заменяется на 2. Таким образом, для оригинального МХа FFFE и FFFF полностью одинаковые. И функция моих портов точно такая же, как и у оригинального (за исключением FFFF). Просто, FFFD перехватывает данные, чтобы можно было иметь больше одной страницы расширенного ОЗУ.

Может я не прав тогда объясни. Я хотел грузить свою программу из ROM диска пользователя (второй режим, из-под RAMFOS) в ОЗУ, потом прыгать в 3-й режим и там её (программу) запускать. Что-то не выходит.
После загрузки программы из ROMдиска в ОЗУ тебе не обязательно оставаться в режиме 2, можно включить режим 0, как если бы ты собирался запустить эту программу в режиме МХа. А там уже карта проще. Ищешь свободное место в адресах 8000H...EFFFH и там располагаешь шлюз перехода. Ты же помнишь, что регистр цвета в режиме 3 еще и управляет ПЗУ, поэтому использовать 0000H...7FFFH опасно. Однако можно просто в регистр цвета записывать слово управления до переключения режима. Соответственно, действия должны быть такими:
[Режим 0, 1 или 2]
1. Записать в регистр цвета МХ нужный режим STD: 5/8 цвет и вкл/выкл ПЗУ (думаю, что раз ты грузишь программу, то скорее выкл ПЗУ).
2. Пишешь в ячейку включения режима 3 FFFFH.
[Режим 3]
3. Прыгаешь на нужный тебе адрес.
Опционально можно очистить экран перед прыгом, но большинство программ это делают сами. И еще ты должен помнить то, что карта поменяется и значит стек надо либо распологать так, чтобы при переключении карт памяти он не попал на ПЗУ или порты или переназначать его перед запуском загруженной в ОЗУ программы. Так же, в режиме STD наличие монитора в адресах C000H..CFFFH обязательно. Поэтому, наиболее оптимальным решением будет предварительная загрузка пропатченного монитора в эти адреса и потом уже переключение. Суть патча в том, чтобы после инициализации он сам прыгнул на запускаемую программу (монитор и адрес перехода в его теле могу подсказать). Тогда на шаге 3 нужно прыгать в С000Н, а все остальное (в том числе и стек) он сделает сам.

fifan
08.12.2012, 15:11
Всё понятно. HardWareMan, а ситуация сейчас такова, что кроме как записи в ROM-диск пользователя (кстати тоже усечённый с 32 до 16 кБ) больше никак программы не загрузить в Специалист_МХ2 (SD карта тобой в смысле драйвера не продвигается, магнитофон отстой использовать).
Остаётся одно - запускать с RAMFOSа программу из ROM-диска, переключаться в STD режим и там всё разворачивать. Охота по максимуму всё заюзать, в том числе и твои подпрограммы (не использующие подпрограммы Мониторов и RAMFOSа), а именно OutSymbol, OutText и другие. Как-то их нужно оформить прошитыми в пзу. Но свободное место есть только в первой половине твоей прошивки и будет работать только в STD. Что думаешь?

b2m
08.12.2012, 15:28
Эмулятор разве поддерживает наш специалист? Если да, то полностью ли?
По крайней мере, карта памяти эмулируется именно такая. Если ещё актуальную раскладку портов распишешь, то точно скажу - полностью, или нет.

HardWareMan
08.12.2012, 19:13
Что думаешь?
Расчехлил свой спец (http://www.nedopc.org/forum/viewtopic.php?p=100879#100879), буду пилить.

fifan
01.03.2013, 17:32
После некоторого перерыва вновь вернулся к писанию программ.
1. Прошивка в "стандартный" Специалист для запуска программ с Flash-диска готова. См. ниже в атаче. Мапер памяти с этой прошивкой таков:
C000...CFFF - Монитор-2, оставлен как BIOS для запуска программ
D000...D7FF - пока пустое место
D800...EFFF - сама программа External Flash Disk.
Соответственно запуск проги так: GD800.
2. После некоторых размышлений решил, что под "стандартный" Специалист нужно только оставить запуск программ с Flash-диска и SD карты. Поэтому от SpetsCommander'а отпочковалась программа Standart Spetsialist Browser. Сейчас я добиваюсь от неё работу с SD картой. Всё отлаживаю на эмуляторе от b2m. Автора эмулятора попросил сделать мне для этих целей конфигурацию.
3. SpetsCommander теперь дабавлю ещё одним диском: F-Flash-диск.

HardWareMan
01.03.2013, 18:48
Я, кстати, тоже предлагаю обзывать диски не по порядку а по типу: D - Disk, F - Flash, R - RAM Disk. Ну и так далее.

vinxru
01.03.2013, 20:39
А почему бы не вынести сам коммандер на флешку или SD. Тогда не придется перепрошивать ПЗУ, при обновлении. А в ПЗУ будет лишь загрузчик.

Еще бы я предложил сделать в этом ПЗУ несколько стандартных точек входа. Типа загрузка файла в память, загрузка содержимого каталога в память.

Тогда бы можно было менять аппаратную часть при неизменном коммандере.

fifan
01.03.2013, 21:02
Еще бы я предложил сделать в этом ПЗУ несколько стандартных точек входа.
Я тоже за. Какие подпрограммы будем садить в ПЗУ?

vinxru
01.03.2013, 21:33
D800 - Загрузка коммандера и передача ему управления. В A возвращается код ошибки.

D803 - Загрузка файла указанного в HL и передача ему управления. В A возвращается код ошибки.

D806 - Загрузка файла указанного в HL в память по адресу DE. Если BC не равен нулю, то размер файла должен быть равен BC. В A возвращается код ошибки.

D809 - Получение первого из списка файлов папки HL в память по адресу DE. (Формат надо придумать.) В A возвращается код ошибки.

D80С - Получение следующих файлов в память по адресу DE. (Формат надо придумать.) В A возвращается код ошибки.

D80F - Получение свободного места на флешка. На входе A - буква диска. В A возвращается код ошибки.


Потом еще будут нужны функции сохранения файла, переименования файла, удаления файла, создания папки.

И совсем круто было бы продумать работу с файлами. open, read, write, seek, close. Но это сложно и не нужно наверное пока. Но предусмотреть под них резерв стоит.

---------- Post added at 20:33 ---------- Previous post was at 20:30 ----------

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

HardWareMan
01.03.2013, 21:51
Лично я считаю, что должно быть 3 уровня подпрограмм. Как и в любом другом месте.

Уровень 1, самый низкий. Здесь работа с железом: клавиатура, экран, низкоуровневый сервис, работа с картой на уровне считать/писать сектор. По сути - это таблица вызовов BIOS (в нашей аналогии - загрузчика ПСПЗУ).

Уровень 2, средний. Здесь работа с логическими единицами ресурсов, как то работа с памятью, сюда же надо абстрагировать работу с FS на всех дисках.

Уровень 3, верхний. Здесь, собственно, прикладной сервис. По сути - это сервис DOS.

По этому плану я сейчас пилю поддержку карты для Специалиста МХ2, и сейчас я на стадии поддержки записи на SD. Как только это закончу, я тут же напишу утилиту загрузки файлов с кассеты и буду цифровать все кассеты сразу на карту (возможно получится в автоматическом режиме даже).

vinxru
01.03.2013, 22:09
Я предлагаю зашить в ПЗУ работу с файловой системой. Ну и функции на уровне секторов то же будут, но особо и не нужна.

У тебя на флешке используется собственная файловая система. Простая, понятная.

У кого то будет FAT (большой и сложный), у кого то TRDOS, у кого то CP/M. А может кто то напишет сетевой драйвер, тогда работа с секторами будет невозможна. Типа меня.

Если ФС разместить в BIOS, то любая программа сможет использовать максимально ОЗУ. В ОЗУ не будет ядра операционной системы. И при этом загружать файлы в память.

---------- Post added at 21:05 ---------- Previous post was at 21:05 ----------

Клавиатура, экран поддерживаются оригинальным биосом.

---------- Post added at 21:09 ---------- Previous post was at 21:05 ----------

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

Сразу после запуска BIOS будет поддерживать только флешку. Но можно загрузить драйвер любого устройства и он будет доступен через вызовы BIOS.

---------- Post added at 21:09 ---------- Previous post was at 21:09 ----------

То есть предусмотреть функцию ПОДКЛЮЧИТЬ ДИСК.

UPD: Еще изменение атрибутов.

HardWareMan
01.03.2013, 22:17
У тебя на флешке используется собственная файловая система. Простая, понятная.
Кто сказал? Ты путаешь с FLASH ROM диском. а я говорю за SD. Там у меня vFAT. Иначе нет смысла. Ее предназначение - обмен данными с ПЦ в первую очередь.

Error404
02.03.2013, 23:31
Я предлагаю зашить в ПЗУ работу с файловой системой. Ну и функции на уровне секторов то же будут, но особо и не нужна.
...
У кого то будет FAT (большой и сложный), у кого то TRDOS, у кого то CP/M. А может кто то напишет сетевой драйвер, тогда работа с секторами будет невозможна. Типа меня.


Только не забудьте векторизировать ПЗУ-шные подпрограммы через табличку адресов подпрограмм, размещаемую в ОЗУ (по дефолту смотрящие в Монитор). Чтобы для замены драйвера не надо было непременно перешивать ПЗУ, а можно было решить подгружаемым в ОЗУ модулем, который изменяя этот фрагмент просто переключит на себя подпрограммы. А еще лучше предусмотреть многостраничные вектора (номер_страницы+адрес), чтобы дравера можно было размещать не в основной странице ОЗУ (в основной программам пользователя и так тесно).

fifan
03.03.2013, 07:41
Вы пока выясняете я сделал работу с SD картой в браузере. Почему-то не работает запуск загруженных файлов. Идея такая. Сначала я инициализирую SD карту и контроллер. Потом считываю в каталог все RKS файлы (пока их два). Вывожу каталог. Потом выбираю файл для запуска. Теперь нужно представить формат RKS файла:
1. Два байта - адрес запуска он же и начальный;
2. Два байта - конечный адрес;
3. Тело файла размером (конечный адрес-начальный адрес);
4. Контрольная сумма.
По моей специфике я сначала любой найденный файл гружу с нулевого адреса ОЗУ. Потом выясняю по начальному адресу куда нужно переместить блок кода. Считывание блока кода с SD карты работает, а вот потом программа отказывается перемещаться куда ей надо и запускаться (подпрограмма CalcStartEnd считывает последовательно четыре байта и размещает их соответственно в E,D,C и B; в Size находится размер блока):

RKSRun1 ld hl, #0000
call CalcStartEnd ; [DE] - начальный адрес, [BC] - конечный адрес
ld hl, (Size)
ld b, h
ld c, l
ex de, hl
ld (Start), hl
ex de, hl
ld hl, #0004 ; начало блока данных
RKSRun2 ld a, (hl)
ld (de), a ; перенос байта
dec bc
jp nz, RKSRun3 ; переход, если ещё не последний адрес
ld hl, (Start) ; стартовый адрес
jp (hl) ; запуск программы

RKSRun3 inc de
inc hl ; инкремент адресов
jp RKSRun2 ; цикл переноса

b2m
03.03.2013, 14:21
dec bc (т.е. DCX B) не устанавливает флагов. Видимо флаг Z уже после CalcStartEnd установлен был.

---------- Post added at 15:21 ---------- Previous post was at 15:10 ----------

Кстати, если области копирования будут пересекаться (а они наверняка будут пересекаться), то нужно учитывать, куда производится копирование: вверх или вниз. Если вниз, то надо с конца копировать, а если вверх, то сначала, как у тебя. Т.о. у тебя будут работать только те программы, которые работают с нуля, или с адреса, превышающего размер программы.

HardWareMan
03.03.2013, 15:40
dec bc (т.е. DCX B) не устанавливает флагов. Видимо флаг Z уже после CalcStartEnd установлен был
Когда счетчик - регистровая пара, нужно жертвовать аккумулятором. В его случае придется делать так:
DCX B
MOV A,B
ORA C
JNZ LOOP

fifan
03.03.2013, 16:47
Копирование будет вниз, если программа должна запускаться с нулевого адреса, т.к. тело программы начинается с 0004 (4 байта сначала это - начальный и конечный адреса). Т.е. с 0004 в 0000, 0005 в 0001 и т.д.
Копирование вверх, если программа должна запускаться с не нулевого адреса, например с 4000 (как одна из программ в моём случае). Т.е. с 0004 в 4000, 0005 в 4001 и т.д.
Таким образом, вроде в обоих случаях пересечения не должно быть. Попробую применить подсказку от HardWareMan'а. Кстати, спасибо тебе за твой набор подпрограмм для работы с SD/MMC контроллером (входит в составную часть Специалиста_МХ2). Переделал только п/п FindSystem для поиска сначала всех RKS файлов (для составления каталога), потом и для поиска и загрузки одного конкретного выбранного файла.

fifan
03.03.2013, 18:14
Всё. Заработало! Браузер файлов Flash-диска и SD/MMC карты для "стандартного" Специалиста готов. Тестировал на эмуляторе от b2m. У кого есть возможность протестируйте на реальном железе. Для этого как минимум нужен интерфейс Flash-диска от HardWareMan'а подключенного к порту программатора. Как максимум нужен контроллер SD/MMC карты по схеме Специалиста_МХ2. Прошивка шьётся во всё пространство ПЗУ. Запуск - с адреса D000.

fifan
03.03.2013, 18:25
Небольшой косяк, нет здравая недоработка. При работе с файлами с Flash-диска в служебной строке в нижней правой части экрана высвечивается имя файла, затем начальный и конечный адрес программы загрузки её в ОЗУ. В режиме SD карты начальный адрес всегда равен нулю, конечный рассчитывается по размеру файла. Чтоб печатать реальные адреса необходимо было бы как минимум ещё раз считывать файл полностью или один сектор для запоминания всего четырёх адресов начала и конца программы. Этого делать я не стал. Ещё немного скриншотов.

fifan
05.04.2013, 19:55
Упёрся в стенку. В браузере для STD хорошо работает запуск файлов с SD карты. Там программа начинается с #8000 и не затрагивает пользовательскую область до этого адреса, куда обычно загружается считанная программа и запускается чаще всего с нуля.
В МХ всё по другому. Там с нуля я разместил сам браузер, но при загрузке программы с SD карты, последняя затирает мой браузер. Может кто подскажет как размещать и где загрузчик программы.

HardWareMan
05.04.2013, 22:09
В МХе все системные программы располагают в верхней памяти. обычно это сегменты Dxxx и Exxx. Не помню точно, но вроде утилиты грузятся в E400. Нужно глянуть в них.

PS На затравку:
http://savepic.org/3199624m.png (http://savepic.org/3199624.png)

fifan
22.04.2013, 20:13
Я тоже расположил свой SpetsCommander с D400. Но он за последнее время разросся до больших размеров и мне уже не хватает места под буферы дисков: флопи, SD. Я не дружу наверное с установкой стека, т. к. при попытке открамсать килобайт-другой с 8000 упорно сопротивляется прога. Подскажите как верно мне выйти из ситуации.

fifan
26.04.2013, 06:16
Я таки заставил работать свой SpetsCommander в эмуляторе b2m. Но он работает только если его загружать через Open по рабочим адресам. Попытался записать файлом в образ дискеты odi - файл не запускается в MX-DOS. Адреса программы таковы:
d400...e3ff - программа
e400...ffbf - подпрограммы
7e00...8dff - текстовые вкладки.
Последнее у меня грузится при старте программы с отдельного файла.
Я специально оставил c000...d3ff для RAMFOSа и совместимости с ПО Специалиста_МХ. Ранее при попытке писать в эти адреса чего-либо программа становилась неработоспособной или что-то делалось не так. Хотя я не использую ни одну встроенную функцию BIOS, даже вывод символа и работа с клавиатурой у меня свои от HardWareMan'а.
Для проверки работы с SD картой и Flash-диском необходимо заставить нормально работать программу в конфигурации Специалиста_МХ2.
В дальнейшем в планах сделать переключение между панелями, копирование, удаление, перемещение файлов. Последние операции буду производить через RAM-диск. Т.к. MX-DOS работает с файлами по одному сектору, т.е. по 1024 байт, то целесообразнее сделать буфер в 1 кБайт. Буду юзать RAM-диск объёмом 8 страниц по 64 кБайта. В конце каждой страницы есть общая область памяти "окно микропроцессора" (http://www.spetsialist-mx.ru/index18.html), то буду брать 63 кБайта в каждой странице.

fifan
12.05.2013, 14:19
В SpetsCommander'е сделал загрузку программы с нуля, потом всё располагается по соответствующим адресам. Из последнего: копирования файлов с дискеты в RAM-диск, построение каталогов всех дисков напрямую с носителей, а не через буфер каталога. Сейчас добиваюсь вывода всего каталога с RAM-диска - я его делаю сплошным, все 512 кБайт на один экран. В RAMFSO'е и MX-DOS'е каталоги выводились постранично и переключались по НР+->.

fifan
31.07.2013, 20:28
После отпуска взялся за допиливания своих программ.
1. Программа SpetsBrowser - запуск файлов считанных с Flash-диска или с SD карты. Нашёл некоторые ошибки - исправил. Запуск как и прежде с D000. Прошивка (BIOS.ROM) 12 кБайт ставится на любой STD Специалист. В ней в первых 2 кБайтах располагается Монитор 2.
2. Разработка SpetsCommander'а движется медленно. Поставил защиту от дураков. Если кто попытается её запустить в Специалисте_МХ (если у кого имеется таковой), то каталоги программ с Flash-диска и SD карты не запустятся. По прежнему никак не могу перейти с 2-го в 3 режим в Специалисте_МХ2. Это мне необходимо для запуска в STD программ с Flash-диска или файлов RKS с SD карты. Буду дальше вникать в подсказки от HardWareMan'а.

fifan
01.08.2013, 17:28
Что-то не как программы правильно не запускаются в STD режиме из под SpetsCommander'а. Хотя вроде все рекомендации от HardWareMan'а выполнил.
Вот программа:

StdFileRun call ClearScr ; очистка экрана
ld a, #03
ld (#fffa), a
ld a, #03
ld (#ffff), a
ld hl, (Start) ; начальный адрес
jp (hl) ; запуск файла
Пояснения: ClearScr - подпрограмма очистки экрана. В начале запускаемая программа сидит по рабочим адреса. Start - адрес запуска программы.

Вопрос к b2m: возможно ли в эмуляторе вывести режим работы Специалиста_МХ2? По схеме (http://www.spetsialist-mx.ru/schemes/SpetsialistMX2.pdf) это сигналы M0 и M1 на втором листе.

Вот видео запуска (http://youtu.be/PfOpbS2NX9s) файла с SD карты.

b2m
01.08.2013, 21:27
Всё вроде верно. Говори, где скачать свежую версию - посмотрю, в чём проблема.

fifan
02.08.2013, 05:34
Да мне нужна только индикация режима работы Специалиста_МХ2 в рабочем окне эмулятора, а саму программу я постараюсь сам доделать.

HardWareMan
02.08.2013, 06:33
Давай по порядку, что ты делаешь, когда жмется запуск игры.

b2m
02.08.2013, 09:47
Вот конфиг, в момент переключения режима выдаёт сообщение. Изврат, конечно, но по другому без доработки эмулятора никак.

fifan
02.08.2013, 16:19
Давай по порядку, что ты делаешь, когда жмется запуск игры.
1. Переносится программа по рабочим адресам, например с нуля. Адрес старта в Start.
2. Очищается экран - процедура твоя ClearScr с Loader'а.
3. Включается 8 цветный экран, ПЗУ:
ld a, #03
ld (#fffa), a
4. Включается третий режим:
ld a, #03
ld (#ffff), a
5. Запуск программы по адресу в Start.
Установка стека так:
ld hl, VarBase
ld (StackSave), hl
ld sp, hl
...
; Переменные
VarBase equ #8e90
StackSave equ VarBase+#00 ; времянка для хранения стека
... описание переменных:
Start equ VarBase+#13 ; стартовый адрес


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

b2m
02.08.2013, 16:52
Не увидел. Где должно появиться? Выполнял указанный мною код. Должно было быть переключение из 2-го в 3-й режим. При старте Специалиста_МХ2 по директиве X тоже должен быть переход из 3-го во 2-й режим - надписи нигде не наблюдал.
А ты оба файла в config распаковал?

fifan
02.08.2013, 17:15
А ты оба файла в config распаковал?
Сейчас оба распаковал. После сообщения писк и на клавиатуру не реагирует долго. При запуске файла в RAMFOSе множественный выход сообщений.

---------- Post added at 19:12 ---------- Previous post was at 19:09 ----------

Прикольно оказывается у меня при запуске файла в STD идёт переход из 0-го в 3-й! Я думал что работаю из 2-го режима.

---------- Post added at 19:15 ---------- Previous post was at 19:12 ----------

А понял. В самом начале у меня есть такая строка:
ld (#fffc), a ; включение основного ОЗУ
до этого аккумулятор обнуляется - вот и переход в 0-й режим. Теперь понимаю почему и в МХ не акти всё работает - ПЗУ-то нет! Хотя я этой строкой просто временно включал основное ОЗУ - это в МХ - то норма!

b2m
02.08.2013, 17:37
А понял. В самом начале у меня есть такая строка:
ld (#fffc), a ; включение основного ОЗУ
до этого аккумулятор обнуляется - вот и переход в 0-й режим.
Аккумулятор тут ни при чём, режим задаётся младшими битами адреса, куда данные пишешь. Тут адрес #fffc, младшие два бита нулевые - чистое совпадение. Обрати на это внимание в будущем.

HardWareMan
02.08.2013, 17:39
Про окружение для STD программ не забыл? Там надо загружать монитор и инициализировать кучу его переменных.

b2m
02.08.2013, 17:42
Про окружение для STD программ не забыл? Там надо загружать монитор и инициализировать кучу его переменных.
:v2_clap2:

fifan
02.08.2013, 18:08
Вау! Как всё сложно-то.:(

HardWareMan
02.08.2013, 18:21
Вау! Как всё сложно-то.:(
Да ничего подобного. Т.к. монитор у нас грузится в ОЗУ (с адреса C000h), то мы грузим стандартный монитор, правим переход на программу, грузим программу и только после этого прыгаем не на программу а на монитор, точнее на ПСПЗУ по адресу С000h. Сначала отработает загрузчик, затем он прыгнет в монитор, а после инициализации монитора прыгнет на нашу программку автоматически. Даже все проще, технически, нужно инициализировать только ПСПЗУ, а монитор должен только присутствовать. Объясняю почему: ПСПЗУ является неким БИОС, поэтому его надо инициализировать полностью, чтобы он проинитил оборудование, расставил стек, вектора ввода и вывод символа и всякие свои константы. Затем можно просто прыгнуть в целевую программу. А вот они то уже 100% зависят от ПСПЗУ, и большинство из них - от монитора. В общем, чуть попозже, я подготовлю ПСПЗУ и монитор специально для запуска STD окружения.

Я думал такие очевидные вещи вы учли. Ведь даже в чистом МХ нужно грузить монитор Волкова, чтобы запускать старые программки. А сам переход между режимами, конечно, не сложный...

HardWareMan
02.08.2013, 18:53
Нет, в STD режиме он так же копируется в ОЗУ, но после перехода в МХ его сам RAMFOS уничтожает. В общем вот тебе бинарник (во вложении). Порядок запуска таков:
1. Ты грузишь программу "по месту". Естественно, она должна быть рассчитана под STD и учитывать распределение памяти STD.
2. Ты грузишь этот монитор.
3. Ты заносишь адрес старта в ячейку C846h (через SHLD, младший байт в C846h, старший в C847h).
4. Ты делаешь действия по переключению, которые ты тут уже описывал (настройка палитры и смена режима).
5. Ты прыгаешь на С000h.

Отличия данного монитора от стандартного такие:

C000 00 NOP
C001 00 NOP
C002 00 NOP
***
C450 C3 00 C8 JMP C800H // Этот джамп перенаправляет на монитор
***
C845 C3 XX XX JMP XXXXH // Этот джамп перенаправляет на целевую программу
В оригинальном ПСПЗУ, в первых ячейках стоит JMP C003, что в принципе нам не мешает, но если ты будешь копировать ПСПЗУ и монитор из внутреннего ПЗУ, то там стоит команда STA 7FFA, которая используется для отключения ПЗУ. Технически, ты можешь ее использовать, перед прыгом задав в [A] нужный режим. А в XXXXH заносишь адрес старта программы. Если будешь использовать копию монитора из ПЗУ, тогда твои действия будут такими:
1. Загружаем программу по месту расположения.
2. Втыкаем режим 3 (не забываем о шлюзе, т.к. карта поменяется).
3. Включаем ПЗУ в режиме 3.
4. Копируем ПСПЗУ и монитор с C000H.
5. Патчим его согласно таблицы выше.
6. прыгаем на C000H.
Не забываем стереть экран перед этими действиями.

Попробуешь, отпишись.

fifan
02.08.2013, 21:31
Что-то не выходит. Кстати ячейки для адреса в Мониторе-4 другие (#c849/a). Глянь не замыленным взглядом что не так?

ld a, #00 ; ПЗУ включено
ld (#f7f8), a
ld a, #03
ld (#ffff), a
ld hl, #0100
ld de, #c000
LoopStd ld a, (hl)
ld (de), a
inc hl
inc de
ld a, h
cp #14
jp nz, LoopStd
ld hl, (Start)
ld a, l
ld (#c849), a
ld a, h
ld (#c84a), a
call ClearScr ; очистка экрана
ld a, #03 ; ПЗУ включено, 8 цветов
jp #c000

---------- Post added at 23:31 ---------- Previous post was at 23:06 ----------

В Мониторе-4 вместо:
C845 C3 XX XX JMP XXXXH // Этот джамп перенаправляет на целевую программу
стоит:
C845 CD 4B C8 CALL C84BH

HardWareMan
02.08.2013, 21:38
Ячейки правильные. CD (т.е. CALL), который ты там видишь, это вызов ввода буфера команды монитора. Нам он не нужен, поэтому я его заменил на JMP. Поэтому, делай правильно, + замени CD на C3. Я забыл это упомянуть, сорри. Кстати, в C450 тоже стоит CD на подпрограмму загрузки, надо заменить на C3 00 C8.

fifan
02.08.2013, 22:15
Ячейки правильные. CD (т.е. CALL), который ты там видишь, это вызов ввода буфера команды монитора. Нам он не нужен, поэтому я его заменил на JMP. Поэтому, делай правильно, + замени CD на C3. Я забыл это упомянуть, сорри. Кстати, в C450 тоже стоит CD на подпрограмму загрузки, надо заменить на C3 00 C8.
Уже делал - не работает. Правильно ли я включаю/выключаю ПЗУ, а то такое ощущение, что адрес вообще не записывается.

---------- Post added 03.08.2013 at 00:15 ---------- Previous post was 02.08.2013 at 23:46 ----------

Смотрю отладчик. А с #0100 в #c000 ничего-то не копируется, почему-то разные области памяти в них - в чём дело? А вот коды c3 00 c8 и c3 XX XX пишутся, даже адрес XX XX верно записывается.

HardWareMan
02.08.2013, 22:26
Согласно схеме, лог.0 на разряде D0 включает ПЗУ, а лог.1 выключает. а ты туда 3 пишешь (8 цветов, выключенное ПЗУ). Это перед копированием. Выключать ПЗУ надо после копирования. Т.е., сначала 2 пишем, а потом 3. Ах да! Ты пишешь в F7F8h ДО переключения в режим 3, а в режиме 0, 1 и 2 данный порт по адресу FFF8.

fifan
02.08.2013, 22:31
Попробую, спасибо.

fifan
02.08.2013, 22:52
Прекрасно! Запуск файлов в STD режиме заработал! Ещё раз спасибо, HardWareMan! ;)
В атаче - файл прошивки (описание см. выше на несколько постов - specsvgatest2.bin). Плюс в архиве файл образа необходимый для эмулятора b2m. Его можете создать сами из своих rks файлов. bios.bin сохранил для проверки загрузчика Loader (см. упомянутое описание выше). Поддерживается также запуск файлов с Flash-диска. Исходники выложу завтра. :v2_thumb:

fifan
03.08.2013, 06:39
Вот исходники и сам ассемблер. Основной файл - bios_mx.a80.

fifan
04.08.2013, 16:36
Расчихлил свой Специалист_МХ2 первой ревизии. Вставил новую прошивку и ... Программа определяет что у меня не МХ2, а МХ. Это не есть хорошо. Я сделал, что только на МХ2 возможна работа с SD картой и Flash-диском. Так что там у меня в коде:

ld hl, #8000
call ROMdiskRD
ld a, c
cp #ff
jp nz, MX1
ld a, #f2 ; Специалист_МХ2
jp MX2

MX1 ld a, #20 ; Специалист_МХ
MX2 ld hl, MX
ld (hl), a
В Специалисте_МХ2 прошивка (ROM-диск) в режиме МХ размером 32 кБайта. Я обращаюсь к ячейке #8000, а там реальная железка считывает код #ff?!
Нужно как-то пофиксить эту проблему - найти другой способ определения типа Специалиста: МХ или МХ2.

HardWareMan
04.08.2013, 21:00
В обычном МХ ПЗУ занимает 48КБ. До С000H, куда копируется ОСь при загрузке. Но это если весь ROM диск существует, ибо минимум надо 16КБ под сам RAMFOS. В МХ2 ROM диск RAMFOSа не нужен, поэтому ПЗУ для упрощения занимает 32КБ. Ответ напрашивается сам: либо прописываем в прошивку МХ2 специальный токен, наличие которого однозначно определит МХ2 (причем и в STD тоже можно положить токен). Либо делать детект на наличие STD режима, которого нет у МХа.

fifan
04.08.2013, 21:28
делать детект на наличие STD режима, которого нет у МХа.
А это мысль. Как среагирует на данный код МХ:

ld a, 3
ld (#ffff), a
По идее ни как.

---------- Post added at 23:28 ---------- Previous post was at 23:22 ----------

С токенами было бы очень просто.

HardWareMan
05.08.2013, 06:35
Это просто. Включаем STD и проверяем область F800-FFFF (лучше если ниже FFE0). У STD там одинаковое по 4 байта (лучше трогать только РУС). А еще лучше, проверять запись в ячейки F8x0..F8x2 (не трогая РУС!), если пишутся ВСЕ - это МХ, иначе STD режим МХ2. Системный ППА настроен так, что один из портов не прописывается. Перед записью сохранять статус порта, чтобы вернуть настройку (особенно важно для порта С).

А это мысль. Как среагирует на данный код МХ:

ld a, 3
ld (#ffff), a
По идее ни как.
Среагирует, но именно так же, как и:

ld a, 2
ld (#ffff), a
Там по схеме, если старший триггер установлен (адрес 1х), то младший принудительно сбрасывается им в 0 (т.е. запись 11 равноценна 10).
http://savepic.org/4310586.png

fifan
05.08.2013, 17:04
проверять запись в ячейки F8x0..F8x2 (не трогая РУС!), если пишутся ВСЕ - это МХ, иначе STD режим МХ2. Системный ППА настроен так, что один из портов не прописывается. Перед записью сохранять статус порта, чтобы вернуть настройку (особенно важно для порта С).
В ячейки F8x0..F8x2 писать/читать я смогу. А как сохранять статус порта?

HardWareMan
05.08.2013, 19:59
Считываешь порт, сохраняешь где-нибудь. Работаешь с портом как с ячейкой ОЗУ. Потом записываешь сохраненный вариант.

fifan
05.08.2013, 21:00
Кажись написал, только пишется в МХ, не пишется в МХ2. Так должно быть? :v2_dizzy_botan: Сам не понял что спросил. :v2_dizzy_tired2:

; Определение типа компьютера
ld a, #03
ld (#ffff), a ; переход в 3-й режим
ld (#ffb0), a ; запись в ячейку #ffb0
ld a, (#ffb0) ; считывание с ячейки #ffb0
cp #03
jp z, MX1 ; пишется - Специалист_МХ
xor a
ld (#f01c), a ; переход в 0-й режим
ld a, #f2 ; Специалист_МХ2
jp MX2

MX1 ld (#fffc), a
ld a, #20 ; Специалист_МХ
MX2 ld hl, MX
ld (hl), a

HardWareMan
06.08.2013, 06:27
Да, у МХа там ОЗУ (как и у режимов 0...2 МХ2), а в STD там ППА клавиатуры. Но че-то у тебя алгоритм какой-то не такой...

b2m
06.08.2013, 10:36
Среагирует, но именно так же, как и:


ld a, 2
ld (#ffff), a


Так же как и на


ld a, 3
ld (#fffe), a



ld (#ffff), a



ld (#fffe), a

Давайте не будем никого вводить в заблуждение, не обязательно писать в порт число 2 или 3, можно писать любое число. Главное - адрес порта.

fifan
06.08.2013, 10:57
Запись в #ffff - это переключение режима (0,1,2; для STD - другая ячейка) в Специалисте_МХ2. В реальном Специалисте_МХ такого порта нет. Согласен, что писать можно любое число, но только для #fffc и #fffe, а для #fffd - это переключатели RAM-дисков - нужно писать номер страницы (http://www.spetsialist-mx.ru/index18.html).

b2m
06.08.2013, 15:29
Запись в #ffff - это переключение режима (0,1,2; для STD - другая ячейка) в Специалисте_МХ2.
У меня схема не актуальная, что-ли? Как туда шина данных попадает?

fifan
06.08.2013, 16:43
Верно однако! b2m, ты прав, извиняюсь. Из описания работы Специалиста_МХ2 (http://www.spetsialist-mx.ru/index21.html):
IOP + 1CH - 4 байта - U0, регистр режима (0...3)
или:
#fffc - 0-й режим - включение основной памяти, отключение RAM/ROM-дисков;
#fffd - 1-й режим - включение RAM-дисков;
#fffe - 2-й режим - включение ROM-дисков;
#ffff - 3-й режим - включение STD режима.
Переход из STD режима:
#f7fc - 0-й режим - включение основной памяти, отключение RAM/ROM-дисков;
#f7fd - 1-й режим - включение RAM-дисков;
#f7fe - 2-й режим - включение ROM-дисков.

---------- Post added at 18:43 ---------- Previous post was at 18:36 ----------


Но че-то у тебя алгоритм какой-то не такой...
Да вроде верно:
1. переходим в STD режим;
2. пишим в #ffb0 байт;
3. считываем из #ffb0 байт;
4. сравниваем его с записанным и если равен (запись произошла), то переходим на запись пробела в ячейку вывода символа Специалист_МХ_, переход в 0-й режим;
5. если запись не произошла, то переходим на запись двойки в ячейку вывода символа Специалист_МХ2, переход в 0-й режим.

fifan
07.08.2013, 18:29
b2m, а вот какая разница между конфигурацией SpetsialistFD и SpetsialistMX2?
Оба должны грузить файл dos.rks по R с Loader'ом от HardWareMan. Первая конфигурация не грузит файл bios.bin с образа SD карты, вторая - грузит. Скриншоты в атаче.

b2m
08.08.2013, 10:20
Конфигурация SpecialistFD имела изначально только FlashDisk, а потом ты попросил добавить SD. А поскольку это было во времена, когда вы ещё не определились с адресом портов контроллера SD, то там так и осталось F100-F1FF.

fifan
08.08.2013, 11:01
Да, да. Там адреса SD контроллера пересекаются с портом программатора. Хотя почему-то в SpetsBrowser'е используется последовательно сначала считывание с Flash-диска, а потом и с SD карты (по S в приложенном файле ПЗУ запуск программы по GD000). Но там забиты адреса других портов:

;порт программатора для STD
PP0_STD equ #f004 ; порт A
PP1_STD equ #f005 ; порт B
PP2_STD equ #f006 ; порт C
PP3_STD equ #f007 ; порт РУС

SPIData equ #f100 ;
SPICtrl equ #f101 ;
А в Loadrer'е нужно посмотреть какие. А вот нашёл:

SPIData equ #f000 ;
SPICtrl equ #f001 ;

b2m
08.08.2013, 12:33
У меня есть два файла dos.bin (без заголовка), в одном обращение к SD по адресам F100-F101, в другом FFF4-FFF5. Я помню, вручную сделал из одного другой. Вариант с адресами F000-F001 тоже вроде был, какое-то время. В том dos.rks, который есть у меня, тоже FFF4-FFF5, т.е. это для МХ/МХ2.

fifan
08.08.2013, 17:08
По хорошему для обращения к SD карте необходимо выбирать адреса #f000/#f001, но это для STD режима и они совпадают с адресами портов А и В дополнительного адаптера (для подключения программатора). В Специалисте_МХ2 для контроллера SD карты я забил адреса (/U3) #fff0/#fff1. Такие различные адреса требуют изменения ПО текущего (Loader'а от HardWareMan'а) и будущего (SpetsCommander). Если я запущу контроллер дисковода (я надеюсь) данные адреса необходимо будет сменить на /U2 (#fff4/#fff5). Ты, b2m, написал что использовал именно эти адреса для МХ2.
Вывод такой. Т.к. Loader (dos.rks) используется для загрузки системы только в режиме STD, то необходимо в нём поставить адреса #f000/#f001, как и задумывал автор. Это наверное, трудно сделать в эмуляторе (два устройства, один адрес), но на железке можно выбирать SD или Flash физически отключать ненужное.

---------- Post added at 19:08 ---------- Previous post was at 19:00 ----------

b2m, ещё, я хотел спросить, как в эмуляторе организована работа с образами дискет odi. Отдельные части odi файла считываются в память посекторно или есть особые точки в MX-DOSе для обращения к отельным процедурам считывания/записи c/на дискет. Вообще как организована эмуляция ВГ93.

b2m
08.08.2013, 18:29
Вывод такой. Т.к. Loader (dos.rks) используется для загрузки системы только в режиме STD, то необходимо в нём поставить адреса #f000/#f001, как и задумывал автор.
Если мы говорим о режиме STD компьютера MX2, то по этому адресу будет системный ППА. А если говорить о стандартном Специалисте, то загрузчик БИОСа там не имеет смысла, т.к. там у нас ПЗУ.


Это наверное, трудно сделать в эмуляторе (два устройства, один адрес), но на железке можно выбирать SD или Flash физически отключать ненужное.
Можно многое сделать, но переключателя в эмуляторе пока действительно нет. Хотя можно и сделать.


ещё, я хотел спросить, как в эмуляторе организована работа с образами дискет odi. Отдельные части odi файла считываются в память посекторно или есть особые точки в MX-DOSе для обращения к отельным процедурам считывания/записи c/на дискет. Вообще как организована эмуляция ВГ93.
Эмуляция ВГ93 сделана на уровне портов. Эмулируемая программа пишет в регистр команд команду чтения, а из порта данных считывает сектор побайтно. Единственное, что не реализовано - команда форматирования.

HardWareMan
09.08.2013, 06:35
Вывод такой. Т.к. Loader (dos.rks) используется для загрузки системы только в режиме STD, то необходимо в нём поставить адреса #f000/#f001, как и задумывал автор.
Если мы говорим о режиме STD компьютера MX2, то по этому адресу будет системный ППА. А если говорить о стандартном Специалисте, то загрузчик БИОСа там не имеет смысла, т.к. там у нас ПЗУ.
Неверно. Если говорить о базовом варианте из 80х, тогда да, есть 8 устройств (сегменты по 2КБ начиная с 0C000H), 7 из которых было ПЗУ (первое обязательное, а остальные опциональные). Последнее, 8е - это системный ППА. Но в таком виде компьютер никому был не нужен, ибо даже у РК86 второй ППА был заложен изначально. Поэтому, 7й сегмент так же был отдан ППА и в итоге, схема устоялась как 6 сегментов ПЗУ (0C000H...0EFFFH) и 2 сегмента для дополнительного ППА и системного ППА (0F000H...0FFFFH). Считаю, что этот вариант и нужно держать как базовый.

b2m
09.08.2013, 10:07
Считаю, что этот вариант и нужно держать как базовый.
Мне показалось, fifan говорил о том, что при переключении MX2 в режим STD вся область F000-F7FF будет отведена одному устройству, как в базовом варианте, например контроллеру SD-карты. Но это ведь не так? Судя по схеме, там будут повторяться 8 устройств по 4 байта (MX2), первым из которых является системный ППА.

А к контроллеру SD-карты в базовом варианте, да, можно обращаться по адресам F000-F001. Такую конфигурацию для моего эмулятора я где-то тут уже выкладывал.

HardWareMan
09.08.2013, 10:53
В точечности так!

fifan
11.08.2013, 18:13
Прошил ПЛИС SD контроллера, вставил новую ПЗУ, прошитую SpetsCommander'ом. Включаю и ... Нет обращения ни к SD карте, ни к Flash-диску. Начал смотреть схему и нашёл, что под МХ2 сигнал /U6 (выборка порта программатора) активна не сначала области #f000 (как в реальном STD Специалисте), а по таким адресам:
#f004...#f007, #f024...#f027, и так далее через каждые 32 байта до #f7e4. Значит в программе мне необходимо учитывать этот факт:

;порт программатора для STD
PP0_STD equ #f004 ; порт A
PP1_STD equ #f005 ; порт B
PP2_STD equ #f006 ; порт C
PP3_STD equ #f007 ; порт РУС

SPIData equ #f004 ; регистр данных SPI
SPICtrl equ #f005 ; регистр управления и статуса
В реальном Специалисте эти адреса тоже должны работать.
Зато теперь верно определяется тип ПК Специалист_МХ2 по приведённой ранее программе (http://www.zx.pk.ru/showpost.php?p=619196&postcount=109), только убрал не нужные записи чисел в аккумулятор при смене режима.

fifan
19.08.2013, 19:40
Что-то никак не могу конкретно указать адреса работы с Flash-диском и SD картой на реальном Специалисте_МХ2.
Под STD вроде Flash-диск работает - встроенная директива @ Монитора-4:
PortA=f004...PortRUS=f007.
Под STD контроллер SD карты не работает - не верно выставлены адреса в Loadere (скопировал в пустое место прошивки весь Loader, запускаю так (http://www.zx.pk.ru/showpost.php?p=618461&postcount=72)):
SPIData=fff4; SPICtrl=fff5.
SpetsCommander файлы грузит в 0-м режиме. Нужно верно указать сегменты памяти /U6 и /U3 для Flash-диска и контроллера SD карты соответственно. Пока так и не работает:
PortA=ffe4...PortRUS=ffe7;
SPIData=fff0; SPICtrl=fff1.
Помогите разобраться.

HardWareMan
20.08.2013, 01:06
В STD нужно указывать 7Fxx.

b2m
20.08.2013, 11:07
fifan, я не был уверен насчёт области FFE0-FFFF в режиме STD, поэтому в эмуляторе там такие-же порты, как и в других режимах. Если повнимательнее посмотреть схему, то там на всю область F800-FFFF клавиатурная ВВ55. Поэтому в STD (с учётом на будущее) лучше обращаться к F700-F7FF.

fifan
20.08.2013, 11:28
В эмуляторе все чётко работает, на железке нет. Интересно заметил такой факт. При переходе к программе External flash disk по @ директиве монитора-4 сразу горят светодиоды контроллера SD карты светодиоды засвечиваются оба и красный и зелёный. Hardwareman, так и должно быть? Сегодня перешью пзушку. Так какие адреса указывать в STD? А то вы оба указали разные. В МХ похоже я верные указал, я думаю что последний раз я прошил полудохлую пзушку - глюки с ней постоянно.

b2m
20.08.2013, 13:03
Так какие адреса указывать в STD? А то вы оба указали разные.
Я думаю, HardWareMan просто опечатался.


В эмуляторе все чётко работает, на железке нет.
Ясен пень, в эмуляторе в этом режиме по адресам FFE0-FFFF есть указанные тобой порты, а на железке - нет. Попробуй с этим конфигом:

fifan
20.08.2013, 14:13
С этим конфигом SD карта не видна

b2m
20.08.2013, 14:36
Сделай SPIData=f7f4; SPICtrl=f7f5 - увидит.

fifan
20.08.2013, 17:13
Не прошло. Хочу сказать, что не верно я порты вибираю при работе с SD картой. Поясню почему. Я писал ранее, что в SpetsCommander'е работа с SD картой ведётся в первом МХ режиме. После выбора и размещения файла в ОЗУ по рабочим адресам идёт переход в STD, настройка Монитора и запуск программы. В плисине SD контроллера присутствуют такие внутренности (см. вложение).
Т.е. при работе в МХ (сигнал МХ=1) идёт выборка по сигналу U3.

HardWareMan
20.08.2013, 18:48
Я думаю, HardWareMan просто опечатался.
Так точно, сэр! Порты в STD: F0xx ... F7xx.

В плисине SD контроллера присутствуют такие внутренности (см. вложение).
Т.е. при работе в МХ (сигнал МХ=1) идёт выборка по сигналу U3.
Зачем ты так сделал?

fifan
20.08.2013, 19:56
Ты ж предложил U3 использовать.

---------- Post added at 21:24 ---------- Previous post was at 21:02 ----------

Между делом сейчас слим прошивку с реальной ПЗУ и смотрю:
1. под STD считывание с Flash-диска игр работает. Адреса: f004...f007;
2. под STD Loader выдаёт ошибку: вставьте карту, горят оба светодиода. Адреса: f704, f705;
3. под MX считывание с Flash-диска не работает. Первый же байт считывает ff и программа выдаёт Нет файлов, я так сделал когда не считывается ни один байт. Адреса стандартные: ffe4...ffe7;
4. под МХ SD контроллер - ошибка та же - вставьте карту. Но датчик вставленной карты работает, проверял. Адреса: fff0, fff1. Светятся так же два светодиода.

---------- Post added at 21:56 ---------- Previous post was at 21:24 ----------

Наверное осциллографом сигналы проверю. Вдруг даже обращения к интерфейсам нет.

b2m
20.08.2013, 22:08
Ты ж предложил U3 использовать.
Да, он предлагал U3, т.е. FFF0-FFF3. Но я намекнул ему, что эти порты использовались для дисковода, и хорошо бы оставить совместимость. Поэтому мы решили использовать для SD область FFF4-FFF7, а это по схеме U2.

fifan
08.05.2014, 17:59
После некоторого перерыва восстановил и обновил программу FATViewer для Специалиста_МХ/МХ2. Она выводит на экран таблицу FAT загруженной дискеты. Управление только двумя кнопками: A и B - по названию дисководов. Программа позволяет визуально оценить заполненность дискеты.

fifan
17.10.2014, 19:17
Снова обновил одну из своих программ, а именно RAM Test. Напомню, что она является альтернативной тестовой программе для Специалиста_МХ. Оригинальная тестирует основное ОЗУ и RAM-диск объёмом 256 кБайт. Я сделал тестирование диска любого объёма, вплоть до 512 кБайт.

fifan
13.01.2015, 15:02
Обновил программу Standart Spetsialist Browser. Она служит для запуска на обычных (не МХ) клонах файлов с SD карты. Для её работы необходим SD интерфейс от Vinxru.
В атаче представлены файлы:
spets_br0.rks для запуска в эмуляторе. Подставляется файл каталога SD карты test_cat.bin. Запуск не работает;
spets_br.rks для запуска на реальном Специалисте;
SpetsBrowser.a80 - исходник в формате ASM80WIN;

Необходимо на SD карту записать до 50 rks файлов, а в папку Boot три файла от Vinxru и сам spets_br.rks. Пока вход в папки не работает. Для нормальной работы используйте shell.rks.

Ewgeny7
14.01.2015, 14:37
Лучше бы тётку голую нарисовали вместо Усатого... :)

fifan
14.01.2015, 14:46
Лучше бы тётку голую нарисовали вместо Усатого... :)
Это Vinxru, я его спрашивал - он не против.

fifan
21.04.2015, 14:15
Гламурненько раскрасил свой SpetsCommander. Пока отлаживаю код в эмуляторе от b2m. Ещё не сделал: переход между панелями, операции копирования и удаления. Доделую реальную железку МХ и буду пробовать. Пока в атаче - ПЗУ и образ дискеты для поглядеть в эмуле. В этой версии сделал подгрузку оверлеев (выбирается при старте с дискеты или ROM-диска), которые располагаются в 8-й странице RAM-диска и вызываются подпрограммы от туда по мере надобности.

CityAceE
20.04.2016, 08:57
Обновил программу Standart Spetsialist Browser
А слово Standart в названии умышленно с ошибкой написано?

fifan
20.04.2016, 10:51
Уже исправил. Спасибо за замечание.

Кстати я исправил версию, была ошибка - не было формирования директория не корневого каталога SD карты. Позже выложу последнюю версию. Кстати она работоспособна - проверял на Специалисте с SD контроллером от Vinxru.

fifan
02.01.2017, 20:51
После длинного перерыва вновь взялся за SpetsCommander. Поменял способ построения программы. Реанимировал блок считывания директория с SD карты от HardWareMan'а. В прошлой версии программы из-за нехватки памяти пришлось вводить загрузки файла оверлеев в последнюю страницу RAM-диска. Возобновил поддержку Flash-диска (от HardWareMan'а из МХ2). Всё делаю в эмуляторе от b2m.

Применяются подпрограммы:
1. печати текста и поддержки SD карты от HardWareMan'а (Loader V5);
2. поддержки Flash-диска от HardWareMan'а (прошивка МХ2).

Применяется конфигурация для b2m от PVV - управляющие регистры #fff4 и #fff5.

fifan
29.01.2020, 20:57
Между делом решил выложить программы, написанные мной и проверены на Сябре с мапером МХ. Они будут работать на любом Специалисте МХ.
Первая из них - улучшенная версия теста основной памяти и ROM-диска. Исправлен механизм определения количества страниц RAM-диска. Теоретически определяется любое количество страниц от 1 до 8. Хотя реально все используют реальное количество - 1,2,4 или 8.
Вторая - тест клавиатуры Специалиста МХ. Подсвечивается нажимаемая клавиша и её 16-ный код.

Напомню, что i80 - это файл кодового блока, cpu - это файл, где указанны адреса загрузки и запуска программы в памяти.

SpaceEngineer
21.11.2021, 23:46
Добрый день. SpetsCommander можно считать завершенным? Он поддерживает запись на flash disk, если да, то какие чипы? Atmel, AMD, и пр - у всех разный алгоритм записи.
Какой формат рам/ром/флеш дисков? Непрерывный, как в рамфос, или fat-подобный? Поддерживаются ли драйверы, т.е. можно ли разработать новый накопитель, и подсунуть драйвер?

SpaceEngineer
24.11.2021, 00:38
Погодите-ка, SpetsCommander это не то же самое, что Commander/MXOS? Уж больно похожи.
https://zx-pk.ru/threads/26630-os-dlya-spetsialista_mkh-commander-mxos.html

SpaceEngineer
10.12.2021, 15:03
fifan, в тесте памяти на ч/б видеовыходе не видно эффекта "заполнения" иконок микросхем. Можно переделать, чтобы он рисовал их шахматным паттерном? (Я еще не спаял контроллер цвета). Для цветного видеовыхода ничего не изменится, если в регистр цвет писать одинаковый цвет для фона и графики.
А как тест основного озу происходит? Вижу, что экран просто заливается нулями. Разве это тест? Оригинальный ТЕСТ_МХ заливает шахматным паттерном, используя трюк с регистром цвета.
В эмуляторе последняя банка рам-диска не проходит тест.

fifan
10.12.2021, 17:21
1. Используйте для ч/б изображения другой тест или свой напишите. В своём я ничего переделывать не буду. Меня и такой тест устраивает.
2. Свой тест я писал по Тесту_МХ и делал всё как там, кроме вывода результатов работы.
3. В эмуляторе разберитесь сначала с настройками размера RAM-диска. На реальном компьютере (проверял на Сябре) всё чётко работает.

SpaceEngineer
10.12.2021, 17:34
fifan, поделитесь, если не трудно, ссылкой на Тест_МХ, который работает с 256 кб. Тот, что я нашел в архиве вашего сайта, умеет только 64 кб (я его дизассемблировал, и увидел, что код переключения страниц записывает мусор в регистр номера страницы, т.е. эта версия теста была создана до введения нескольких страниц памяти).

fifan
10.12.2021, 17:41
У меня ничего не осталось. Афанасьев (автор Специалиста МХ) когда-то мне передавал образы дискет, там я многое нашёл. Все исходники я дизассемблировал с оригинальной программы, подсматривал комментарии автора теста в листингах программы. Пока до конца года архив сайта ещё живёт, потом ничего не будет.

SpaceEngineer
15.12.2021, 03:01
fifan, есть версия теста для MX2? Тот, что выложен на предыдущей странице, виснет после отрисовки микросхем ОЗУ.

fifan
16.12.2021, 17:48
есть версия теста для MX2?
Hardwareman делал свой, "патчил" обычный Рюмика. Где он сейчас, я не знаю. Это для режима std.

SpaceEngineer
16.12.2021, 19:07
Ладно, придется ваш хакнуть, потому что я не вижу результат на ч/б экране. Рам-диск из РУ5 работает, а из 41256 не хочет. При этом, если махнуть местами сигналы /CAS рам диска и основной памяти, все работает.