
Сообщение от
Stampmaker

Сообщение от
basik
Если ROM-диска нет, то выводится промпт "? R/F/H" ?". По нажатию на R грузится ORDOS с ROM-диска
это как такое возможно?
Всё так и есть. Сами смотрите в листинге. Когда мы нажали СБРОС и вывалились в запрос каманды R/F/H, то пока длится CONIN у нас достаточно времени, чтобы подключить ROM-диск и только потом нажать <R>. ROM-диск в М3 определяется по наличию байта C3 в ROM-диске по адресу 7FD, а в М2 с затратой большего числа байтов (чтением двух первых байтов ROM-диска и если они не равны, значит ROM-диск есть).
Если же при сбросе удерживать клавишу <G> или <I>, то игнорируя наличие ROM-диска будет загрузка с винта или из флопа. Причём при последующих нажатиях на кнопку СБРОС ничего уже удерживать не надо, т.к первое нажатие запомнится в последней ячейке ОЗУ F3FF и автоматически будет происходить загрузка из того-же устройства.
Код:
.
CALL XF81B
INC A
LD HL,0F3FFH
JP Z,NOPRES
LD (HL),A
NOPRES: LD A,(HL)
CP 'G'
JP Z,DIR_F
CP 'I'
JP Z,DIR_H
ORDOS:
LD DE,0BFFFH ; загрузка ORDOS c ROM-диска и старт
LD HL,7FDH
LD (DOPPPA+1),HL
LD A,(DOPPPA)
CP 0C3H
JP NZ,NOROMD ; если в ROM-диске на 7FD не байт C3
LD L,E
L30: LD (DOPPPA+1),HL
LD A,(DOPPPA)
LD (DE),A
DEC DE
DEC HL
LD A,H
OR A
JP P,L30
JP 0BFFDH
; ──────────────────────────────────────────────
TITR: defb 1FH,'?'
defb 13,10,'R/F/H ?',0
NOROMD: LD HL,TITR
CALL MSSG
CALL MCONIN
CP 'R'
JP Z,ORDOS
CP 'H'
JP Z,DIR_H
CP 'F'
JP NZ,NOROMD
DIR_F: LD A,0D0H ; команда ПРИНУДИТЕЛЬНОЕ ПРЕРЫВАНИЕ
CALL EXECW
. . . . . . . .