Не, всё забывается, всё теряется, поэтому лучше два раза повторить одно и то же, в разных местах. :)
Вид для печати
Вопрос по МикроДОС (стихи). Насколько мне известно, существует два способа обеспечить автостарт с диска МикроДОС.
Первый: прописать 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];
};