Цитата Сообщение от gdv2002 Посмотреть сообщение
Нужно их сформировать, вот и думаю как.
Свои ROM-диски я готовил так:
- с помощью WinHex отделял от образа RKR, PKI или GAM кодовый блок, т.е. убирал начальный и конечный адреса, синхробайты и контрольную сумму
- в том же WinHex склеивал несколько кодовых блоков до достижения нужной длины будущего ROM-диска
- в ассемблере готовил загрузчик ROM-диска, используя шаблон из журнала "Радио" и взятые из образов адреса
Код:
; ПРОГРАММА УПРАВЛЕНИЯ ROM-DISK/32K ДЛЯ КОМПЬЮТЕРА 
; "РАДИО-В6РК" С OБ'EMOM ОЗУ ПОЛЬЗОВАТЕЛЯ 32К.
; ПРОГРАММА УПРАВЛЕНИЯ ЗАФИКСИРОВАНА В ПЗУ 
; ПО АДРЕСАМ 7E00H-7FFFH. УКАЗАННУЮ ОБЛАСТЬ ПЗУ 
; ЗАПРЕЩЕНО ИСПОЛЬЗОВАТЬ ПОД ROM-DISK. 
; ПРОГРАММА ИЗ ПЗУ В ОЗУ ПЕРЕНОСИТСЯ ЗАГРУЗЧИКОМ, 
; (В MONITORE) ПО ДИРЕКТИВЕ "U" И ЗАНИМАЕТ 
; ВЕРХНИЕ АДРЕСА ОЗУ, НАЧИНАЯ С 7400Н.
	.ORG    07400H  ;
PRINT	.EQU    0F818H  ; ВЫВОД СООБЩЕНИЯ НА ЭКРАН 
WW	.EQU	0F803H	; ВВОД С КЛАВИАТУРЫ 
WYW	.EQU	0F809H	; ВЫВОД СИМВОЛА НА ЭКРАН 
CONST	.EQU	6     	; ЧИСЛО ПРОГРАММ 
M0:	LXI	H,S01 	; ВЫВЕСТИ КАТАЛОГ 
M1:	CALL	PRINT 	; ROM-DISK/32K 
	CALL    WW    	; ВЫБОР МЕНЮ. 
	CPI     'Z'   	; УСТАНОВКА ПАМЯТИ В 0?
 	JZ      ZERO  	; НЕТ,
	CPI     'S'   	; ЗАПИСЬ ВО ВРЕМЕННЫЙ 
	JZ      SAVE  	; БУФЕР?- НЕТ,
 	CPI     'L'   	; СЧИТЫВАНИЕ В ТЕКСТОВЫЙ 
	JZ      LOAD  	; БУФЕР?-НЕТ, 
	SUI     30H   	; ВХОДИТ ЛИ НАЖАТАЯ 
	JM      M0    	; ЦИФРА В ДИАПАЗОН 
	CPI     CONST 	; УКАЗАННЫХ ЗНАЧЕНИЙ? 
	JNC     M0    	; НЕТ, ПОВТОРИТЬ ВВОД. 
	MOV     B,A   	; ДА, КОД СОХРАНИТЬ. 
	ORA     A     	; ЭТО 0?   
	JNZ     M2    	; НЕТ, НА ВЫЧИСЛЕНИЕ АДРЕСОВ. 
	XRA     A     	; ДА, ОЧИСТИТЬ СЛУЖЕБНУЮ 
	STA     2117H 	; ЯЧЕЙКУ ПАМЯТИ BASIC. 
M2:	LXI     D,6   	; ШАГ ПОИСКА ПО ТАБЛИЦЕ. 
	LXI     H,TABL	; БАЗОВЫЙ АДРЕС ТАБЛИЦЫ. 
	XRA     A     	; СОДЕРЖИМОЕ АККУМУЛЯТОРА 
M3:	CMP     B     	; РАВНО ХРАНИМОМУ КОДУ? 
	JZ      M4    	; ДА, ВЗЯТЬ АДРЕСА ПРОГРАММЫ. 
	DAD     D     	; НЕТ, ПЕРЕЙТИ НА СЛЕДУЮЩУЮ 
	INR     A     	; СТРОКУ ТАБЛИЦЫ, УВЕЛИЧИТЬ ДАННЫЕ
	JMP     M3    	; АККУМУЛЯТОРА И ВНОВЬ СРАВНИТЬ 
M4:	SPHL          	; ИСПОЛЬЗУЯ СТЕК,
	POP     H     	; ВЗЯТЬ 
	POP     D     	; АДРЕСА 
	POP     B     	; ПРОГРАММЫ. 
	DCX     SP    	; ПОСЛЕДНИЙ АДРЕС 
	DCX     SP    	; -СТАРТОВЫЙ .
; ПОДПРОГРАММА MONITORA, ОБЕСПЕЧИВАЮЩАЯ КОПИРОВАНИЕ 
; ДАННЫХ ИЗ АДРЕСУЕМОЙ ОБЛАСТИ ПЗУ В АДРЕСУЕМУЮ 
; ОБЛАСТЬ ОЗУ ПОЛЬЗОВАТЕЛЯ. 
	CALL    0FA68H	; ПЕРЕСЫЛКА ПРОГРАММЫ. 
	POP     H     	; ВЗЯТЬ АДРЕС 
	PCHL          	; И ЗАПУСТИТЬ ПРОГРАММУ.
; ПОДПРОГРАММА СЧИТЫВАНИЯ ФАЙЛА ИЗ ВРЕМЕННОГО БУФЕРА 
; В ТЕКСТОВЫЙ БУФЕР РЕДАКТОРА "МИКРОН". 
LOAD:	LXI     H, S04 	; ПОДТВЕРДИТЬ 
	CALL    PRINT 	; ВЫБОР СЧИТЫВАНИЯ. 
	LXI     H,4A00H	; НАЧАЛЬНЫЙ АДРЕС 
	LXI     D,2100H	; BPEMEHHOГO БУФЕРА. 
RD0:	LXI     B,28FFH	; OБ'EM ФАЙЛА. 
RD1:	MOV     A,M   	; ПЕРЕСЛАТЬ
	STAX    D     	; ФАЙЛ 
	INX     H     	; И3
	INX     D     	; ВРЕМЕННОГО БУФЕРА 
	DCX     B     	; B ТЕКСТОВЫЙ БУФЕР 
	MOV     A,B   	; С АДРЕСА 2100Н. 
	ORA     C     	; 
	JNZ     RD1   	; 
	JMP     M0    	; ВЫЙТИ В МЕНЮ.
; ПОДПРОГРАММА СОХРАНЕНИЯ ФАЙЛА ВО ВРЕМЕННОМ 
; БУФЕРЕ. ЕСЛИ ОБ'ЕМ ФАЙЛА ПРЕВЫШАЕТ 28FFH, ТО 
; ОПЕРАЦИЯ ПО ХРАНЕНИЮ НЕ ВЫПОЛНЯЕТСЯ. 
SAVE:	LXI     H, 2100H 
S1:	MOV     A,M   	; ПРОВЕРИТЬ РАЗМЕР
	CPI     0FFH  	; ФАЙЛА. 
	JZ      S2    	; ЕСЛИ ФАЙЛ HE УМЕЩАЕТСЯ 
	INX     H     	; ВО ВРЕМЕННОМ 
	MOV     A,H   	; БУФЕРЕ, ТО 
	CPI     4AH   	; 
	JNZ     S1    	;
	LXI     H,S06 	; СООБЩИТЬ, А ПЕРЕСЫЛКУ 
	JMP     M1    	; HE ПРОИЗВОДИТЬ.
S2:	LXI 	H,S03 	; ИНАЧЕ
	CALL 	PRINT 	; ПОДТВЕРДИТЬ ЗАПИСЬ
	LXI 	H,2100H	; ВО ВРЕМЕННЫЙ БУФЕР.
	LXI 	D,4A00H ;
	JMP 	RD0 	; УйТИ НА ЗАПИСЬ.
; ПОДПРОГРАММА ОЧИСТКИ ПАМЯТИ (ЗАПИСЬ "0"
; BO ВСЕ ДОСТУПНЫЕ ПОЛЬЗОВАТЕЛЮ ЯЧЕЙКИ ОЗУ,
; КРОМЕ ЯЧЕЕК, НАЧИНАЯ С 7400Н).
ZERO:	LXI 	H,S05 	; ПОДТВЕРДИТЬ ПРИЕМ
	CALL 	PRINT 	; ОПЕРАЦИИ СБРОСА RAM.
	LXI 	H,0 	;
Z1:	MVI 	M,0 	; ОЧИСТИТЬ
	INX 	H 	; ПАМЯТЬ.
	MOV 	A,H 	;
	CPI 	74H 	; ЕСЛИ АДРЕС БОЛЬШЕ
	JNZ 	Z1 	; 7400Н, ТО ВЫЙТИ
	JMP 	M0 	; В МЕНЮ.
S01:	.DB 	1FH,0CH,0AH,2AH,52H,4FH,4DH;
	.DB     2DH,44H,49H,53H,4BH,2FH,33H;
	.DB	32H,4BH,2AH,20H,56H,32H,2EH;
	.DB	30H,2DH,39H,31H;
	.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
S03:	.DB 	19H		;
S04:	.DB 	19H		;
S05:	.DB 	19H,7FH,08H,0
S06:	.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	; DRIV/260
	.DW 	7A95H,7DFFH,0		; PROGR
	.END
- компилировал загрузчик с адреса 7400h ( в качестве ассемблера использовал 8085 SIMULATOR IDE от Oshonsoft )
- откомпилированный загрузчик добавлял в ROM-диск с адреса 7E00h ( тоже в WinHex ), затем нулями дополнял длину диска до 7FFFh
- готовый образ ROM-диска сохранял в виде отдельного файла, который и зашивал в ПЗУ