Совершенно верно. Автозапуск сработает только в том случае, когда программа завершилась вызовом функции "теплый старт". При этом сбрасываются/реинициализируются некоторые устройства и переменные, перезагружается CCP (вот поэтому и происходит автозапуск) и BDOS. А вот если ничего такого не требуется и не предполагается запускать программу из пакетного файла, то можно завершить работу программы командой RET (вполне "законный" способ: CCP после загрузки .COM файла передает управление командой CALL 0100H). А вот теперь нажать ^C... И автозапуск сработает (ну если прописан)!!!
На самом деле это "теплый старт", при "холодном" тем более сработает.
Скорее всего завершается командой RET, а не "теплым стартом". И вряд ли существует такой флаг. Автозапуск происходит потому что команда прописывается в буфер ввода CCP прям в его образе на диске.
Все же флаг есть но это внутренняя переменная CCP и используется им только при обработке файла $$$.SUB. Т.е. для успешного выполнения $$$.SUB необходимо его наличие и каждая команда (программа) в нем должна завершаться вызовом "теплого старта".Код:CBASE JMP COMMAND ;execute command processor (ccp). JMP CLEARBUF ;entry to empty input buffer before starting ccp. ; ; Standard cp/m ccp input buffer. Format is (max length), ; (actual length), (char #1), (char #2), (char #3), etc. ; INBUFF DB 127 ;length of input buffer. DB 0 ;current length of contents. DB 'Copyright' DB ' 1979 (c) by Digital Research ' DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 INPOINT DW INBUFF+2 ;input line pointer
Вывод: CP/M-80 не умеет обрабатывать файлы .SUB (кроме специально подготовленного утилитой SUBMIT файла $$$.SUB)Код:; Batch (or SUBMIT) processing information storage. ; BATCH DB 0 ;batch mode flag (00 if no submit file, ff if submitting). BATCHFCB:DB 0,'$$$ SUB',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Идея: написать на АСМе утилитку (INIT.COM, напрмер), которая должна быть прописана в автозапуск. Где-то в области констант и переменных BIOS (в странице F700, например) найти свободную ячейку под флаг; при запусе проверить: если установлен - передать управление CCP, если не установлен - установить и запустить SUBMIT INITIAL (проверять их наличие или нет - дело вкуса, если нет - ну ругнется при перезагрузке). В любом случае INIT.COM не должна завершаться "теплым стартом", иначе "зациклимся".
Проблема: никак не пойму как из своей программы запустить другую программу (как это делает Проффер, например).
Еще вариант
Код:; ******************************************************** ; * Base of CCP contains the following code/data * ; * ccp: jmp ccpstart (start with command) * ; * jmp ccpclear (start, clear command) * ; * ccp+6 127 (max command length) * ; * ccp+7 comlen (command length = 00) * ; * ccp+8 ' ... ' (16 blanks) * ; ******************************************************** ; * Normal entry is at ccp, where the command line given * ; * at ccp+8 is executed automatically (normally a null * ; * command with comlen = 00). An initializing program * ; * can be automatically loaded by storing the command * ; * at ccp+8, with the command length at ccp+7. In this * ; * case, the ccp executes the command before prompting * ; * the console for input. Note that the command is exe-* ; * cuted on both warm and cold starts. When the command* ; * line is initialized, a jump to "jmp ccpclear" dis- * ; * ables the automatic command execution. * ; ******************************************************** ; jmp ccpstart ;start ccp with possible initial command jmp ccpclear ;clear the command buffer maxlen: db 127 ;max buffer length comlen: db 0 ;command length (filled in by dos) ; (command executed initially if comlen non zero) combuf: db ' ' ;8 character fill db ' ' ;8 character fill db 'COPYRIGHT (C) 1979, DIGITAL RESEARCH '; 38 ds 128-($-combuf) ; total buffer length is 128 characters comaddr:dw combuf ;address of next to char to scan



Ответить с цитированием
. INITIAL.SUB в образе мудреный 