; ПРОГРАММА УПРАВЛЕНИЯ ROM-DISK/32K ДЛЯ КОМПЬЮТЕРА 
;"РАДИО-В6РК" С OБ'EMOM ОЗУ ПОЛЬЗОВАТЕЛЯ 32К.
;ПРОГРАММА УПРАВЛЕНИЯ ЗАФИКСИРОВАНА В ПЗУ 
;ПО АДРЕСАМ 7E00H-7FFFH. УКАЗАННУЮ ОБЛАСТЬ ПЗУ 
;ЗАПРЕЩЕНО ИСПОЛЬЗОВАТЬ ПОД ROM-DISK. 
;ПРОГРАММА ИЗ ПЗУ В ОЗУ ПЕРЕНОСИТСЯ ЗАГРУЗЧИКОМ, 
;(В MONITORE) ПО ДИРЕКТИВЕ "U" И ЗАНИМАЕТ 
; ВЕРХНИЕ АДРЕСА ОЗУ, НАЧИНАЯ С 7400Н.
	ORG     7400Н 	;
PRINT:	EQU     0F818Н	;ВЫВОД СООБЩЕНИЯ НА ЭКРАН 
WW:	EQU	0F803Н	;ВВОД С КЛАВИАТУРЫ 
WYW:	EQU	0F609H	; ВЫВОД СИМВОЛА НА ЭКРАН 
CONST:	EQU	6     	;ЧИСЛО ПРОГРАММ 
МО:	LXI	H,SOI 	; ВЫВЕСТИ КАТАЛОГ 
MI:	CALL	PRINT 	;ROM-DISK/32K 
	CALL    WW    	; ВЫБОР МЕНЮ. 
	CPI     'Z'   	;УСТАНОВКА ПАМЯТИ В 0?
 	JZ      ZERO  	;НЕТ,
	CPI     'S'   	; ЗАПИСЬ ВО ВРЕМЕННЫЙ 
	JZ      SAVE  	; БУФЕР?- НЕТ,
 	CPI     'L'   	;СЧИТЫВАНИЕ В ТЕКСТОВЫЙ 
	JZ      LOAD  	; БУФЕР?-НЕТ, 
	SUI     30H   	; ВХОДИТ ЛИ НАЖАТАЯ 
	JM      МО    	; ЦИФРА В ДИАПАЗОН 
	CPI     CONST 	; У КАЗАННЫХ ЗНАЧЕНИЙ? 
	JNC     МО    	;НЕТ, ПОВТОРИТЬ ВВОД. 
	MOV     В,А   	;ДА, КОД СОХРАНИТЬ. 
	ORA     А     	;ЭТО 0?   
	JNZ     М2    	;НЕТ, НА ВЫЧИСЛЕНИЕ АДРЕСОВ. 
	XRA     А     	;ДА, ОЧИСТИТЬ СЛУЖЕБНУЮ 
	STA     2117Н 	;ЯЧЕЙКУ ПАМЯТИ BASIC. 
M2:	LXI     D,6   	;ШАГ ПОИСКА ПО ТАБЛИЦЕ. 
	LXI     H,TABL	; БАЗОВЫЙ АДРЕС ТАБЛИЦЫ. 
	XRA     А     	; СОДЕРЖИМОЕ АККУМУЛЯТОРА 
МЗ:	СМР     В     	; РАВНО ХРАНИМОМУ КОДУ? 
	JZ      М4    	;ДА, ВЗЯТЬ АДРЕСА ПРОГРАММЫ. 
	DAD     D     	;НЕТ, ПЕРЕЙТИ НА СЛЕДУЮЩУЮ 
	INR     А     	; СТРОКУ ТАБЛИЦЫ, УВЕЛИЧИТЬ ДАННЫЕ
	JMP     МЗ    	;АККУМУЛЯТОРА И ВНОВЬ СРАВНИТЬ 
М4:	SPHL          	;ИСПОЛЬЗУЯ СТЕК,
	POP     Н     	; ВЗЯТЬ 
	POP     D     	; АДРЕСА 
	POP     В     	; ПРОГРАММЫ. 
	DCX     SP    	; ПОСЛЕДНИЙ АДРЕС 
	DCX     SP    	; -СТАРТОВЫЙ .
; ПОДПРОГРАММА MONITORA, ОБЕСПЕЧИВАЮЩАЯ КОПИРОВАНИЕ 
; ДАННЫХ ИЗ АДРЕСУЕМОЙ ОБЛАСТИ ПЗУ В АДРЕСУЕМУЮ 
; ОБЛАСТЬ ОЗУ ПОЛЬЗОВАТЕЛЯ. 
	CALL    0FA68H	; ПЕРЕСЫЛКА ПРОГРАММЫ. 
	POP     Н     	; ВЗЯТЬ АДРЕС 
	PCHL          	;И ЗАПУСТИТЬ ПРОГРАММУ.
; ПОДПРОГРАММА СЧИТЫВАНИЯ ФАЙЛА ИЗ ВРЕМЕННОГО БУФЕРА 
;В ТЕКСТОВЫЙ БУФЕР РЕДАКТОРА "МИКРОН". 
LOAD:	LXI     Н, SO4 	; ПОДТВЕРДИТЬ 
	CALL    PRINT 	;ВЫБОР СЧИТЫВАНИЯ. 
	LXI     Н,4A00Н	;НАЧАЛЬНЫЙ АДРЕС 
	LXI     D,2100H	;BPEMEHHOГO БУФЕРА. 
RDO:	LXI     B,28FFH	;OБ'EM ФАЙЛА. 
RDI:	MOV     A,M   	;ПЕРЕСЛАТЬ
	STAX    D     	;ФАЙЛ 
	INX     H     	;И3
	INX     D     	;ВРЕМЕННОГО БУФЕРА 
	DCX     В     	;B ТЕКСТОВЫЙ БУФЕР 
	MOV     А,В   	;С АДРЕСА 2100Н. 
	ORA     С     	; 
	JNZ     RDI   	; 
	JMP     МО    	;ВЫЙТИВ МЕНЮ.
;ПОДПРОГРАММА СОХРАНЕНИЯ ФАЙЛА ВО ВРЕМЕННОМ 
; БУФЕРЕ. ЕСЛИ ОБ 'ЕМ ФАЙЛА ПРЕВЫШАЕТ 28FFH, ТО 
; ОПЕРАЦИЯ ПО ХРАНЕНИЮ НЕ ВЫПОЛНЯЕТСЯ. 
SAVE:	LXI     Н, 2100Н 
SI:	MOV     A,M   	;ПРОВЕРИТЬ РАЗМЕР
	CPI     0FFH  	; ФАЙЛА. 
	JZ     S2    	;ЕСЛИ ФАЙЛ HE УМЕЩАЕТСЯ 
	INX     Н     	;ВО ВРЕМЕННОМ 
	MOV     А, Н   	; БУФЕРЕ, ТО 
	CPI     4АН   	; 
	JNZ     SI    	;
	LXI     H,SO6 	;СООБЩИТЬ, А ПЕРЕСЫЛКУ 
	JMP     MI    	;HE ПРОИЗВОДИТЬ.
S2:	LXI 	H,SO5 	; ИНАЧЕ
	CALL 	PRINT 	;ПОДТВЕРДИТЬ ЗАПИСЬ
	LXI 	Н,2100Н	;ВО ВРЕМЕННЫЙ БУФЕР.
	LXI 	D,4A00H ;
	JMP 	RDO 	;УйТИ НА ЗАПИСЬ.
;ПОДПРОГРАММА ОЧИСТКИ ПАМЯТИ (ЗАПИСЬ "0"
;BO ВСЕ ДОСТУПНЫЕ ПОЛЬЗОВАТЕЛЮ ЯЧЕЙКИ ОЗУ,
; КРОМЕ ЯЧЕЕК, НАЧИНАЯ С 7400Н).
ZERO:	LXI 	H,SO5 	;ПОДТВЕРДИТЬ ПРИЕМ
	CALL 	PRINT 	; ОПЕРАЦИИ СБРОСА RAM.
	LXI 	Н,0 	;
Z1:	MVI 	М,0 	;ОЧИСТИТЬ
	INX 	Н 	; ПАМЯТЬ.
	MOV 	A,Н 	;
	СРI 	74Н 	;ЕСЛИ АДРЕС БОЛЬШЕ
	JNZ 	Z1 	; 7400Н, ТО ВЫЙТИ
	JMP 	МО 	;В МЕНН).
SOI:	DB 	1FH,0CH,0AH,'"ROM-DISK/32K"V2.0-91';
	DB 	0AH,0AH,0DH,'DIR:';
	DB 	0DH,0AH,'<0>-BASIC';
	DB 	0DH,0AH,'<1>-ED/ASSM';
	DB 	0DH,0AH,'<2>-DP/DDT';
	DB 	0DH,0AH,'<3>-SORT UT';
	DB 	0DH,0AH,'<4>-DRIV/260';
	DB 	0DH,0AH,'<5>-PROGR' ;
	DB 	0AH,0DH
	DB 	0AH,0DH,' <S>-BUFF' ;
	DB 	0AH,0DH,' <L>-RED' ;
	DB 	0AH,0DH,' <2>-0/RAM' ;
	DB 	0DH,0AH,0
SO3:	DB 	19H		;
SO4:	DB 	19H		;
SO5:	DB 	19H,7FH,08H,0
SO6:	DB 	0DH,'OUT OF BUFF',0
;ТАБЛИЦА АДРЕСОВ ФАЙЛОВ ROM~DISK/32K.
;ПОСЛЕДОВАТЕЛЬНО ПО КАТАЛОГУ УКАЗАНЫ;
;НАЧАЛЬНЫЙ, КОНЕЧНЫЙ АДРЕСА ФАЙЛА В ПЗУ.
;НАЧАЛЬНЫЙ АДРЕС ЭТОГО ЖЕ ФАЙЛА В ОЗУ.
TABL:	DW	0,1FFFH,0 		; BASIC
	DW 	2000H,2FFFH,0		; RED/ASSM
	DW 	3000H,3FFFH,6400H	; DP/DDT
	DW 	6E4EH,74E3H,800H 	; SORT/UT
	DW 	74E4H,7A94H,800H	; DR I V/260
	DW 	7A95H,7DFFH,0		; PROGR
	END 				;