в разработке!

User Tag List

Страница 3 из 3 ПерваяПервая 123
Показано с 21 по 22 из 22

Тема: Автозапуск программ ОС СР/М на Корвете

  1. #21

    Регистрация
    12.05.2018
    Адрес
    с. Телешовка, Киевская обл., Украина
    Сообщений
    38
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    14 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Serebriakov Посмотреть сообщение
    Сработает автозапуск после выхода из программы или не сработает зависит только от самой программы - видимо есть разные способы завершить свою работу.
    Совершенно верно. Автозапуск сработает только в том случае, когда программа завершилась вызовом функции "теплый старт". При этом сбрасываются/реинициализируются некоторые устройства и переменные, перезагружается CCP (вот поэтому и происходит автозапуск) и BDOS. А вот если ничего такого не требуется и не предполагается запускать программу из пакетного файла, то можно завершить работу программы командой RET (вполне "законный" способ: CCP после загрузки .COM файла передает управление командой CALL 0100H). А вот теперь нажать ^C... И автозапуск сработает (ну если прописан)!!!
    Цитата Сообщение от Serebriakov Посмотреть сообщение
    Например, при выходе из Proffer Commander (PROF.COM) - снова запускается строка из автозапуска (даже если это не сам командер, а что-то другое), т.е. срабатывает «холодный старт» с автозапуском.
    На самом деле это "теплый старт", при "холодном" тем более сработает.
    Цитата Сообщение от Serebriakov Посмотреть сообщение
    А вот Клад (KLAD1.COM) всегда выбрасывает строго в командную строку A> , как при «теплом старте» без флага в BIOS CP/M (бита режима).
    Скорее всего завершается командой RET, а не "теплым стартом". И вряд ли существует такой флаг. Автозапуск происходит потому что команда прописывается в буфер ввода CCP прям в его образе на диске.
    Код:
    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
    Все же флаг есть но это внутренняя переменная CCP и используется им только при обработке файла $$$.SUB. Т.е. для успешного выполнения $$$.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
    Вывод: CP/M-80 не умеет обрабатывать файлы .SUB (кроме специально подготовленного утилитой SUBMIT файла $$$.SUB)
    Идея: написать на АСМе утилитку (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
    Последний раз редактировалось AlexS58; 22.02.2026 в 14:48.

  2. #22

    Регистрация
    12.05.2018
    Адрес
    с. Телешовка, Киевская обл., Украина
    Сообщений
    38
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    14 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Получилось!.. Косо, криво, топорно... Но работает!
    В образе диска должен быть прописан полный путь: A:INIT (6 символов), иначе не работает. Даже если еще не прописан, то с командной строки запускать также: A:INIT.
    Никаких проверок на наличие на диске SUBMIT.COM и INITIAL.SUB нету. Если нету INITIAL.SUB - SUBMIT ругнется, если нету SUBMIT.COM - CCP ругнется...
    При желании проверки можно будет допилить.
    init.7z
    .kdi-шник перековырян вдоль и поперек - жертва множества экспериментов . INITIAL.SUB в образе мудреный
    Цитата Сообщение от AlexS58 Посмотреть сообщение
    каждая команда (программа) в нем должна завершаться вызовом "теплого старта".
    Тут я ошибся: корректно работают и в .SUB даже если завершаются командой RET.
    Последний раз редактировалось AlexS58; 24.02.2026 в 00:33.

Страница 3 из 3 ПерваяПервая 123

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. BASIC на Корвете
    от Arix в разделе Корвет
    Ответов: 83
    Последнее: 25.01.2026, 19:33
  2. Ответов: 220
    Последнее: 23.05.2023, 08:09
  3. Ответов: 33
    Последнее: 05.12.2018, 09:00
  4. автозапуск .SCL в Spin & Spectaculator
    от ultra в разделе Эмуляторы
    Ответов: 0
    Последнее: 10.02.2008, 06:07

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •