User Tag List

Показано с 1 по 10 из 1333

Тема: Самодельный компьютер на Z80 и не только

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #26

    Регистрация
    18.01.2010
    Адрес
    Крым
    Сообщений
    248
    Спасибо Благодарностей отдано 
    11
    Спасибо Благодарностей получено 
    42
    Поблагодарили
    35 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Думаю, наиболее просто иметь Ардуино, и подключаться 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
    [свернуть]
    Последний раз редактировалось M80; 18.10.2023 в 08:23.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Самодельный станок для намотки ТВЗ
    от Ратмир в разделе Творчество
    Ответов: 3
    Последнее: 25.05.2017, 13:32
  2. Самодельный телевизор
    от KALDYH в разделе Творчество
    Ответов: 34
    Последнее: 18.09.2013, 13:09
  3. Самодельный kickstart под ЛУТ :D
    от fan в разделе Amiga
    Ответов: 6
    Последнее: 21.08.2010, 16:18
  4. Лучший самодельный компьютер
    от roxx в разделе Зарубежные компьютеры
    Ответов: 10
    Последнее: 08.12.2007, 22:53
  5. Самодельный принтер
    от Ewgeny7 в разделе Несортированное железо
    Ответов: 3
    Последнее: 07.08.2005, 18:11

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •