Думаю, наиболее просто иметь Ардуино, и подключаться 3-мя концами к схеме на CPU 8080. У меня z80/2 мгц. На 2,5 мгц тоже работает.
Идея в том, что Ардуино по запросам от CPU выставляет данные с USB-UART. При этом CPU нет необходимости привязываться к временам UART. Скоростью UART можно играться. Думаю, 38400 вполне.
Код Ардуино очень прост:
Скрытый текст
Код:// z80 <- Arduino serial 17:27 17.10.2023 OKF #define NAME "z80 <- Arduino serial" #define VERSION "0.3" #define UART_BAUDRATE 19200 #define WAIT_TIME 0 //debug // GND #define WAIT 2 //PORTD! #define DATA 3 #define IOR 4 #define in(x) DDRD &= ~(1<<(x)) #define out(x) DDRD |= 1<<(x) #define on(x) PORTD |= 1<<(x) #define off(x) PORTD &= ~(1<<(x)) #define pin(x) (PIND & 1<<(x)) #define di() cli() #define BAUD_SETTING ((F_CPU / 4 / UART_BAUDRATE - 1) / 2) #define con_begin() (UBRR0H = BAUD_SETTING>>8, UBRR0L = BAUD_SETTING, \ UCSR0A = 1<<U2X0 | 1<<UDRE0, UCSR0B = 1<<RXEN0) #define con_available() (UCSR0A & 1<<RXC0) #define con_read() UDR0 void setup() { on(WAIT); out(WAIT); con_begin(); di(); } // выставим стартовый бит по запросу от CPU inline void put_start() { while (pin(IOR)); //ждём IOR off(WAIT); //тормозим CPU off(DATA); out(DATA); //выставляем старт бит _delay_ms(WAIT_TIME); on(WAIT); //запускаем CPU while (!pin(IOR)); //ождаем снятия IOR in(DATA); //убираем старт } // биты данных по запросу от CPU inline void put_data(uint8_t c) { while (pin(IOR)); off(WAIT); c & 1 ? on(DATA) : off(DATA); //выставляем данные аналогично старт out(DATA); _delay_ms(WAIT_TIME); on(WAIT); while (!pin(IOR)); in(DATA); } // стоповый бит inline void put_stop() { while (pin(IOR)); off(WAIT); on(DATA); out(DATA); //стоп on(WAIT); while (!pin(IOR)); in(DATA); } void loop() { if (con_available()) { uint8_t ch = con_read(); put_start(); for (uint8_t i = 0; i < 8; i++, ch >>= 1) put_data(ch); } put_stop(); }[свернуть]
Со стороны CPU:
Скрытый текст
Код:; serial from Arduino PIN equ 0 ;RX_PORT, D7 - data ; wait start bit loop1 defl $ in a,(PIN) ;wait request ld b,4 loop defl $ djnz loop rlca ;d7 jr c,loop1 ld b,8 ;receive data loop defl $ in a,(PIN) rlca ;d7 rr c djnz loop loop defl $ in a,(PIN) ;stop rlca ;d7 jr nc,loop call ConOut jr loop1[свернуть]




Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 






Ленинград-1 48К