Нажмите на изображение для увеличения. 

Название:	IMG_20170917_192734.jpg 
Просмотров:	201 
Размер:	77.5 Кб 
ID:	62209
Ну вот, жизненный цикл макетки подошел к завершению. Свои задачи она выполнила и теперь ей на смену должна прийти другая, более сложная.
Вот простейший "монитор", который я для нее написал. Работает он через последовательный порт. Его основная функция - загрузка файлов через терминал в ОЗУ и запуск программ с адреса 8000h. Кроме того имеются подпрограммы ввода и вывода. Ввод с использованием прерываний и аппаратным управлением потоком.
Код:
include "8085.inc"
;----RST 0---------------------------------------------------------------------------------------------------------
	di
	lxi	sp,ramtop
	jmp	init
	nop
;----RST 1---Разрешение передачи /RTS вкл-----------------------------------------------------
	mvi	a,rxe+txen+dtr+rts
	out	cusart
	ret
	nop
	nop
	nop
;----RST 2---Вывод строки [HL] в терминал---------------------------------------------------
strout:	mov	a,m	; загрузка символа
	ana	a	; проверка конца сообщения
	rz
	rst	3	; вывод символа
	inx	h
	jmp	strout	; к следующему символу
;----RST 3--Вывод символа в терминал---------------------------------------------------------
chout:	push	psw
sym1:	in	cusart	; загрузка слова состояния
	ani	txrdy+dsr	; проверочная маска
	cpi	txrdy+dsr	; проверка готовности передатчика
	jnz	sym1	; если не готов то sym1
	pop	psw
	out	dusart	; вывод в порт
	ret
	nop
	nop
;----RST 5--Вывод HEX в терминал---------------------------------------------------------------
hexout:	push	psw
	rrc
	rrc
	rrc
	rrc
	call	nibout
	pop	psw
	call	nibout
	ret
	nop
	nop
	nop
;----RST 7--Обработчик прерываний УСАПП------------------------------------------------
int:	push	psw
	mvi	a,rxe+txen+dtr
	out	cusart	; /RTS выкл
	in	dusart	; чтение из порта
	sta	lastch	; сохранение символа в переменной
	pop	psw
	ei
	ret
;------Главный цикл--------------------------------------------------------------------------------------
loop:	hlt		; ожидание
	lda	lastch	; последний принятый символ
	rst	3	; вывод символа
	cpi	6Ch	; если "L"
	jz	sload	; то переход к загрузке
	cpi	67h	; если "G"
	jz	goto	; запуск программы в озу
	rst	1	; /RTS вкл
	jmp	loop
;------Загрузка через порт--------------------------------------------------------------------------
sload:	lxi	h,loadstr	; адрес строки
	rst	2	; вывод строки
	lxi	h,ramp	; загрузка указателя
	rst	1	; /RTS вкл
sload1:	hlt
	lda	lastch	; загружаем байт в аккумулятор
	mov	m,a	; записываем в память
	inx	h	; HL+1
	rst	3	; вывод символа
	rst	1	; /RTS вкл
	jmp	sload1	; цикл загрузки
;------Запуск программы с адреса 8000h---------------------------------------------------
goto:	lxi	h,gotostr	; адрес строки
	rst	2	; вывод строки
	rst	1	; /RTS вкл
	call	8000h
	lxi	h,endstr	; адрес строки
	rst	2	; вывод строки
	rst	1	; /RTS вкл
	ret
;------Инициализация-----------------------------------------------------------------------------------
init:	call	initusart
	lxi	h,introstr	; адрес строки
	rst	2	; вывод строки
	ei
	jmp	loop
;---Установка ВВ51 в исходное состояние-----------------------------------------------
initusart:	xra	a
	out	cusart
	out	cusart
	out	cusart
	mvi	a,ir	; Сброс
	out	cusart
	mvi	a,s2400
	out	cusart	; Установка режима порта
	rst	1	; /RTS вкл
	ret
;----печать HEX младшего полубайта----------------------------------------------------
nibout:	ani	0Fh
	cpi	0Ah
	jm	nib1
	adi	7
nib1:	adi	30h
	rst	3	; вывод символа
	ret
;-------------------------------------Данные----------------------------------------------------------------
introstr:	db	0dh,'Monitor nano:',0dh,00h
loadstr:	db	0dh,'Loading:',0dh,00h
gotostr:	db	0dh,'Go 8000h',0dh,00h
endstr:	db	0dh,'End program.',0dh,00h
;--------------------Константы и указатели--------------------------------------------------------
ramtop=	087DFh	; Верхушка свободной памяти
ramp=	08000h	; Начало оперативной памяти
lastch=	087E1h	; Редактируемый символ
;---Адреса регистров УСАПП----------------------------------------------------------------------
dusart=	00h		; регистр данных
cusart=	01h		; регистр команд
;---Режимы УСАПП--------------------------------------------------------------------------------------
s9600=	04Eh	;9600_8_no_1
s2400=	04Fh	;2400_8_no_1
;---Команды УСАПП------------------------------------------------------------------------------------
txen=	01h	; Передатчик включен
dtr=	02h	; Устройство готово
rxe=	04h	; Приемник включен
sbrk=	08h	; Прерывание передачи
er=	10h	; Сброс ошибок приема
rts=	20h	; Передача разрешена
ir=	40h	; Программный сброс
eh=	80h	; Режим Hunt
;---Регистр состояния УСАПП-----------------------------------------------------------------------
txrdy=	01h	; Передатчик готов
rxrdy=	02h	; Приемник готов
txe=	04h	; Передача закончена
pe=	08h	; Ошибка четности
oe=	10h	; Ошибка переполнения
fe=	20h	; Ошибка формата
syndet=	40h	; Синхросимвол найден
dsr=	80h	; Передатчик терминала готов
Схема контроллера простейшая, включение компонентов типовое - КР580ВМ80, КР580ГФ24 с кварцем 22.1184 Мгц, КР580ВК28(38), В качестве ПЗУ используется AT28C64, начинается с адреса 0000h, ОЗУ статика КР537РУ10 2кб с адреса 8000h. "Дешифратор адреса" выполнен на ЛА3, тактовая частота процессора 2.4576 МГц подается и на тактовый вход КР580ВВ51. Поделенные на 16 при помощи ИЕ5 тактовые импульсы подаются на /TxC /RxC ВВ51, обеспечивая скорость порта 2400 и 9600.