Код:
; ПРОГРАММА УПРАВЛЕНИЯ 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 )