Gerber файлы для изготовления печатной платы (ошибка с адресом порта на запись/передачу исправлена): FTDI245RL.zip
Со стороны хоста (PC) это выглядит как виртуальный последовательный порт (/dev/tty.usbserial-XXXXXXXX или COMx), а со стороны РК - как два порта, один двунаправленный для данных, второй, только на чтение, содержит два бита статуса очередей чтения/записи. Если воткнуть плату в РК вместо D14, то порт данных будет находиться по всем четным адресам 0xAxxx, а порт статуса - по всем нечетным. Их можно читать/писать даже из Монитора, директивами D или L и M или F, соответственно.
К сожалению, в схеме допущена ошибка - вывод 5 U4 подключен к A0, а должен бы к /A0. Из-за этого данных порт на запись/передачу расположен не по четному адресу, а по нечетному, по которому на чтение выдаются биты состояния FIFO. Исправлю в следующей редакции.
Пример использования из ассемблера:
;===========================================================================
; FT245R use example
; Created by @alexcp on 18 Dec 2018
;
;
FT245R equ 0A000h ; base address of FT245R FIFO
DATA equ 0 ; Data register
STAT equ 1 ; Status register
;
; Define FIFO port
FIFO_DATA equ FT245R+DATA
FIFO_STATUS equ FT245R+STAT
RXEMPTY equ 1 ; MASK FOR RX BUFFER EMPTY
TXFULL equ 2 ; MASK FOR TX BUFFER FULL
;
;===========================================================================
; Get a character to A
;
; Return A=char, CY=0 if data received
; CY=1 if timeout
;
; Uses 4 bytes of stack including return address
;
GETCHAR:
PUSH D
LXI D,8000h ;long timeout
gc10: DCX D
MOV A,D
ORA E
JZ gc90 ;exit if timeout
LDA FIFO_STATUS ;read device status
ANI RXEMPTY
JNZ gc10 ;not ready yet.
;
; Data received: return CY=0. data in A
XRA A ;cy=0
LDA FIFO_DATA ;read data
POP D
RET
;
; Timeout: return CY=1
gc90: STC ;cy=1
POP D
RET
;
;===========================================================================
; Output character in A
;
; Uses 4 bytes of stack including return address
;
PUTCHAR:
PUSH PSW ;save byte to output
pc10: LDA FIFO_STATUS ;read device status
ANI TXFULL ;tx full ?
JNZ pc10
POP PSW
STA FIFO_DATA ;transmit char
RET
USB интерфейс позволяет связать РК с настольным компьютером и, например, запустить на нем отладчик, в моем случае NoICE. Это, конечно, не Eclipse с OpenOCD, но сильно лучше, чем никакого отладчика. Для его работы нужен небольшой монитор, который я по-быстрому передрал из готового примера для 8085 и разместил в ПЗУ, начиная с адреса F000, да простят меня поклонники ДОС 2.9. Исходник и скомпилированный .bin и .hex (готовый образ ПЗУ с монитором NoICE по адресу 0xF000 и с обычным Монитором РК86 по адресу 0xF800) прилагаются. Запуск из Монитора РК86 - командой GF000.
Одна из функций отладчика - загрузка программ в память РК. Прощай, кассетный магнитофон!
При запуске монитор NoICE записывает три байта (C3 07 F0, т.е. JMP F007h), начиная с адреса 0008h - они необходимы для корректной работы пошагового выполения и breakpoints, которые реализованы командой RST 1. Если есть настоятельная необходимость разместить что-то другое по адресам 0008h-000Ah, то можно модифицировать монитор NoICE так, чтобы он использвал либо RST 2, 3 и т.д., или CALL вместо RST.