Совершенно верно. Автозапуск сработает только в том случае, когда программа завершилась вызовом функции "теплый старт". При этом сбрасываются/реинициализируются некоторые устройства и переменные, перезагружается 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

