Я сейчас хочу парочку дисков на 27256 записать. Нужно их сформировать, вот и думаю как.
Вид для печати
Свои ROM-диски я готовил так:
- с помощью WinHex отделял от образа RKR, PKI или GAM кодовый блок, т.е. убирал начальный и конечный адреса, синхробайты и контрольную сумму
- в том же WinHex склеивал несколько кодовых блоков до достижения нужной длины будущего ROM-диска
- в ассемблере готовил загрузчик ROM-диска, используя шаблон из журнала "Радио" и взятые из образов адреса
- компилировал загрузчик с адреса 7400h ( в качестве ассемблера использовал 8085 SIMULATOR IDE от Oshonsoft )Код:; ПРОГРАММА УПРАВЛЕНИЯ 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
- откомпилированный загрузчик добавлял в ROM-диск с адреса 7E00h ( тоже в WinHex ), затем нулями дополнял длину диска до 7FFFh
- готовый образ ROM-диска сохранял в виде отдельного файла, который и зашивал в ПЗУ
matr0s А зачем отрезали адреса начала/конца, синхробайты и КС?
Я помню, что целиком программировал программу в ПЗУ. Из глубин памяти всплывает, что вроде как можно "писать" в ПЗУ не сразу весь дамп, а отдельными кусками, программируя их друг за другом в стык. Вот только не помню как нужно писать в память, снизу-вверх или сверху-вниз.
Читаю пока.
При загрузке с ROM-диска они не нужны; место экономится, проще стыковать блоки и рассчитывать адреса загрузки.
Вроде это в журнале "Радио" объясняли, как компоновать ROM-диск, состоящий из нескольких РФ6. Мой программатор не позволяет писать ПЗУ по частям, т.к. сначала требует очистить всю микросхему.
Сформировать РОМ-диск не сложно на самом РК-86.
Нам поможет директива Т Монитора и карандаш с листочком бумаги!
Смотрим и записываем адреса начала и конца первой программы, потом грузим в память вторую программу и директивой Т перемещаем ее в конец первой программы. Подобным образом поступаем с третьей и последующими программами. В результате формируем весь диск, оставляя место под "служебную" программу обслуживания РОМ-диска. Для простого программатора я разбил общий дамп кусками по 8Кб, т.к. этот программатор может только такими кусками по максимуму шить.
Как видно процесс создания диска довольно не сложный и все вполне Олдово:v2_wink2:
Vladimir_S, Подскажи какую ещё можно использовать Флешину в твоём Флесш диске, а то идея ведь хорошая, а никто не реализовал.
Пока есть мысль что АТ20С020 подойдёт, а вот АТ20С010 нет, т.к. сектор 128, может из 39 серии что подойдёт?
VovanRK86, Читаются то они все одинаково, но вот алгоритм записи у них всех кто в лес, кто по дрова.
Это понятно у меня одна в РОМ диске стоит, а во вторую куча мониторов записано.
Вот в этом то и дело всё, я вряд ли смогу ДОС доработать, под другую Флеш по крайней мере пока, да и времени нет, хотелось бы припаять и чтоб сразу заработало.
Может взглянуть на вопрос с другой стороны, так сказать обновить взгляд на вещи.
Схема от Матроса почему-то упорно игнорируется. http://zx.pk.ru/showpost.php?p=680018&postcount=34
НО, есть софт, есть схема которая нуждается в корректировке.
Схема расчитана на доступные флеши. Неужели не привлекательно?
Буквально недавно Alex_LG выложил свою схему эмулятора магнитофона с функцией работы РОМ-диском. http://zx.pk.ru/showpost.php?p=679255&postcount=346
Конечно хорошо-бы организовать запись на флешку, и в таком варианте, даже без записи на "магнитофон" будет просто отличная схема!
Что нам еще нужно, флешка читает/пишет, все здорово!
Думаю стоит переключиться на эту схемку :v2_wink2::v2_dizzy_bye: