Это тогда надо браться за развитие VC3. :)
Вид для печати
Не очень изящно, но на первый взгляд работает.
Столкнулся с такой штукой, в VC не запускаются программы просто по ВК, нужно сначала нажать СС+ВК а потом ВК... Как то уже исправлял в файле VC.EXT помоему, но могу путать что то. Попробовал подложить файл со старого настроенного VC3 этому исправленному, но увы, то же самое. Подскажите, как исправить, чтобы COM и EXE запускались по ВК без лишних движений ?
В остальном, все работает, диск D в доступе, спасибо!!!
- - - Добавлено - - -
autoexec.bat - просто супер сила !!!
Я уже писал тут, что в РДС на реальном железе есть проблема с переключением РУС/ЛАТ, вот сейчас выясняются интересные подробности... Проблема эта, как оказалось, совсем не связана с дребезгом, причина скорее в самой схеме: на ёмкостной клавиатуре как будто всегда нажаты клавиши, поэтому простая проверка состояния клавиатуры, как в РДС, выдаёт вместо кода FF (ничего не нажато) почти случайные значения, чаще всего это 41h, 43h или 00h (на моём Векторе). И, самое интересное, это совершенно не влияет на работу клавиатуры -- ни одна программа на Векторе не сигнализирует о "залипших" клавишах, в том числе и "Тест устройств". Я даже не могу сказать, было ли это изначально, или проявилось со временем.
Проверить клавиатуру можно вот такой простой программкой:
Исходники
Код:.org 0100h
START: DI
LXI H,0C008h
LXI D,0C000h ; область экрана C000-DFFF
MVI A,8AH
OUT 0
XRA A
OUT 3
LOOP: IN 2
STAX D ; пишем считанное значение в экран
MVI M,81h ; стираем (для наглядности)
INX D
INX H
INR A
JZ START ; возврат к началу, если "клавиши не нажаты" (=FFh)
MVI A,0E0h ; конец экранной области, старший байт
CMP H
JNZ L_NXT
MVI H,0C0h ; возврат к началу экрана
L_NXT: CMP D
JNZ LOOP
MVI D,0C0h ; возврат к началу экрана
JMP LOOP
.end
[свернуть]
Запустить этот тест можно из монитора-отладчика, либо загрузить, как ROM. В случае "залипания" клавиатуры по экрану будет быстро бежать блок 8 байт * 81h, как у меня на живом Векторе, а в эмуляторах он просто висит в начале экрана и двигается только при нажатии клавиш.
Пока, думаю, в РДС надо будет исправить подпрограмму чтения клавиатуры, чтобы при получении по "IN 2" кода, отличного от FFh проверялась вся клавиатура, а потом делался вывод по нажатиям на РУС/ЛАТ и СС.
Если я правильно понял, проблема возникает при попытке узнать единомоментно (активировав все ряды) статус клавиатуры. Вроде в векторовских программах это не было особо распространено, опрашивали каждый ряд отдельно.
Именно так. Есть два варианта схемы ёмкостной клавиатуры Вектора, у меня астраханская схема, возможно в другом варианте этого бага нет... Или у меня просто конденсаторы посохли, от чего таймеры в клавиатуре глючат.
Ну как не распространено... Было достаточно часто, в той же Т-34/Т-72 есть, эта проверка использовалась для обхода опроса всей клавиатуры в подпрограмме обработки прерывания. Просто там, с этим багом, каждый раз исполняется проверка всех клавиш, и в результате баг не заметен. А в играх да, скорее всего, опрашивали только клавиши управления, там эта глобальная проверка не обязательна.
Исправил работу РДС с клавиатурой, теперь клавиши РУС/ЛАТ и СС нормально отрабатывают и на моём Векторе. Ну и попутно оптимизировал алгоритмы -- полная проверка клавиатуры выполняется примерно на 20% быстрее, и на 75% быстрее при отсутствии нажатий (по сравнению с предыдущей версией).
Архив с РДС: Вложение 77384
Исходники на гитхабе обновлены.
Обновил РДС в соответствии с патчем ivagorа, что ускорило отрисовку символов на экране.
Тестовый вывод 2240 символов (коды 255...32, 10 раз) даёт среднюю скорость примерно 820 символов в секунду против 788 сим./сек. в прошлой версии. Тестировал вот этой программкой (с исходниками): Вложение 77592
Архив с РДС: Вложение 77591
Исходники на гитхабе обновлены.
На телеграм-канале, посвящённом Вектору, была интересная ссылка на архив ПО, и там есть несколько неизвестных вариантов МДОСа, а именно:
MikroDOS ver.3.1, монитор ver.5.1, режим 64 х 32, г. Харьков, 1993г.:
Вложение 79938
MikroDOS ver.3.1, монитор ver.4.1, режим 32 х 32, г. Харьков, 1992г.:
Вложение 79939
Тот самый легендарный "цветной мдос"?
Ну и ещё есть немного всяких утилит под МДОС, в том числе, например, Работа с дисками MS-DOS. (C) Терентьев С.В. (г. Харьков, 1995г.).:
Вложение 79940
Наверно мне надо завязывать приводить ссылки на находки, их как-будто не было.
Вопрос по МикроДОС (стихи). Насколько мне известно, существует два способа обеспечить автостарт с диска МикроДОС.
Первый: прописать COM-файл в файле INITIAL.SUB, служащий неким аналогом AUTOEXEC.BAT.
Здесь есть проблема, независимо от версии МикроДОС, после завершения обработки INITIAL.SUB или после возврата из запущенного приложения (если оно было одно), в консоль выводится строчка @@@@@@@@@@@@@@@@@@@@@@@@@@@@. Этих символов @ будет тем больше, чем больше приложений (команд) было выполнено в INITIAL.SUB. Судя по всему это фича.
Вопрос: как заткнуть этот "фонтан"? Что надо обнулить?
Второй: прописать в системных дорожка МикроДОС, с каким-то (не знаю каким) смещением имя файла, который мы хотим автостартовать с диска. Видел такие fdd-образы на Базисе, но ещё не анализировал.
Как я понимаю, необходимо изменить, например, MDBOLD47.COM (или от какой-нибудь Т-72), а затем SYSGEN-ом его записать, типа: SYSGEN A:MDBOLD56.COM A:100
Но там же, наверняка, CRC, или пофиг (похоже что пофиг, попробовал поменять INITIAL SUB найденный поиском по бинарнику - удалось)?
Вопрос: М.б. уже известно конкретное смещение на примере какой-нибудь МикроДОС?
Bootsector имеет служебную информацию, по которой загрузчик смотрит куда грузить (правда далеко не все зарузчики смотрят, большинство просто грузят с 100h адреса)
struct BootSector
{
WORD LoadAddress;
WORD RunAddress;
WORD LoadSectorCount;
BYTE SizeDisk; /* 0-5.25", 1-8" */
BYTE Density; /* 0-FM, 1-MFM */
BYTE TpI; /* 0-48 TpI, 1-96 TpI, 2-135 TpI */
BYTE SkewFactor; /* 1-no sector tranlation else = len(_SecTran) */
BYTE SecSize; /* 0-128, 1-256, 2-512, 3-1024 */
BYTE InSide; /* 0-single, 1-double */
WORD SecPerTrack;
WORD TrkPerDisk;
/*DPB*/
WORD SPT; /* logical sector(128) per track */
BYTE BSH; /* block shift */
BYTE BLM; /* block shift mask */
BYTE EXM; /* extent mask EXM=(BLM+1)*128/1024 - 1 - [DSM/256] */
WORD DSM; /* disk size - 1 */
WORD DRM; /* dir entry - 1 */
WORD AL; /* dir allocation */
WORD CKS; /* dir check table size CKS=(DRM+1)/4; 0 for fixed disk */
WORD OFS; /* offset, reserved tracks count */
BYTE CheckSum;
BYTE SecTran[96];
};