Hello world!

Микропроцессоры и микроконтроллеры от фирмы Zilog, а также компьютеры на них построенные

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Hello world!

Post by Shaos »

b2m wrote:
Shaos wrote:А вот сколько процентов процессорного времени отдавалось на пропихивание текста в ВГ75? Главный проц вообще успевал что-то делать по основной программе?...
Так в РК-шке проц тормозится на время "пропихивания" текста. Это соответствует (ну почти) его работе по пропихиванию текста. Вот если бы у 8080 была команда OTIR, то и вообще бы не было никакой разницы. Ну почти.
Ну там ПДП всё-таки, а тут - 100% софтово…
Я тут за главного - если что шлите мыло на me собака shaos точка net
Mondx
Doomed
Posts: 505
Joined: 10 Aug 2022 07:27
Location: Crimea

Re: Hello world!

Post by Mondx »

На минимальных, типа hello world и подобных, весьма сложно вести обмен со старшим братом. Загрузка например, отладка. Потому что нет UART, потому что софтово сложно высчитывать такты, потому что многое мешает. Ардуино популярно, доступно и недорого.
Идея в том, что бы запрашивать данные по требованию, а МК при этом их бы предоставлял. Нужно всего 3 пина.

Code: Select all

// 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();
}
При этом, со стороны z80 это может выглядеть так:

Code: Select all

; 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
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Hello world!

Post by Shaos »

z80 <- Arduino serial это как-то через COM-порт?

Как физически выглядит подключение этих 3 проводов?
Я тут за главного - если что шлите мыло на me собака shaos точка net
Mondx
Doomed
Posts: 505
Joined: 10 Aug 2022 07:27
Location: Crimea

Re: Hello world!

Post by Mondx »

Shaos wrote: Как физически выглядит подключение этих 3 проводов?
1. Запрос от z80 (/RD & /IORQ).
2. Бит данных от МК (D7).
3. /WAIT от МК.
Mondx
Doomed
Posts: 505
Joined: 10 Aug 2022 07:27
Location: Crimea

Re: Hello world!

Post by Mondx »

Shaos wrote:z80 <- Arduino serial это как-то через COM-порт?
Что значит? Ардуино с ПК соединён через COM-порт, он и является посредником для z80. Особенность в том, что z80 не нужно выдерживать никакие времянки. Запросил - получил, типа.
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Hello world!

Post by Shaos »

Ну можно по идее и без ардуино если не через COM, а через LPT с шелезякой общаться - дёргаешь нужными битиками программно со стороны PC и всего делов ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
Mondx
Doomed
Posts: 505
Joined: 10 Aug 2022 07:27
Location: Crimea

Re: Hello world!

Post by Mondx »

Ну да. Только где сейчас COM или LPT? А USB всегда. И попробуй ты в Windows выдержать времянки! В любом случае USB-TTL нужен, а Ардуино по цене с ним равнозначен. Более того, ты с ним можешь накрутить и дополнительных фишек или нет?
Mondx
Doomed
Posts: 505
Joined: 10 Aug 2022 07:27
Location: Crimea

Re: Hello world!

Post by Mondx »

А ещё, не знаю как там у вас в Штатах ("я не была"), а у нас особой дешевизной пользуются LGT8F328P и их производные. Которые и пошустрее и выводов имеют поболее, нежели у ваших хвалёных Атмелов.)
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Hello world!

Post by Shaos »

Mondx wrote:Ну да. Только где сейчас COM или LPT? А USB всегда. И попробуй ты в Windows выдержать времянки! В любом случае USB-TTL нужен, а Ардуино по цене с ним равнозначен. Более того, ты с ним можешь накрутить и дополнительных фишек или нет?
Ну PCI-Express платки до сих пор доставаемы - и COM, и LPT (у меня например в компе воткнуто) и линух их видит вот прям сразу...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Hello world!

Post by Shaos »

Mondx wrote:А ещё, не знаю как там у вас в Штатах ("я не была"), а у нас особой дешевизной пользуются LGT8F328P и их производные. Которые и пошустрее и выводов имеют поболее, нежели у ваших хвалёных Атмелов.)
Я поглядел - например на амазоне "ваш хвалёный" LGT8F328P стоит десятку за штучку, а его "оригинал" ардуино-нано - пятнашку за 3 штуки (т.е. $5 за один)...
Я тут за главного - если что шлите мыло на me собака shaos точка net
Mondx
Doomed
Posts: 505
Joined: 10 Aug 2022 07:27
Location: Crimea

Re: Hello world!

Post by Mondx »

"Мы по разному видим мир!"
You do not have the required permissions to view the files attached to this post.
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Hello world!

Post by Shaos »

Американский тариф на китайскую электронику в действии :)
Да и наверное дядюшка Ляо к вам поближе будет...
Я тут за главного - если что шлите мыло на me собака shaos точка net
Mondx
Doomed
Posts: 505
Joined: 10 Aug 2022 07:27
Location: Crimea

Re: Hello world!

Post by Mondx »

У меня тут завалялась замечательная платка под названием WEMOS XI. А замечательна она тем, что у неё выведено аж 30 пинов. А тогда, с её помощью, очень легко получается эмулятор 2764. И даже 27256. Ну чем плохо то! И тот же вывод по UART делается без каких либо телодвижений. Думаю, просто песня для ретростроителей.)
You do not have the required permissions to view the files attached to this post.
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Hello world!

Post by Shaos »

Тоже типа ардуино?
Я тут за главного - если что шлите мыло на me собака shaos точка net
Mondx
Doomed
Posts: 505
Joined: 10 Aug 2022 07:27
Location: Crimea

Re: Hello world!

Post by Mondx »

Ну да. А что смущает? Ты можешь использовать её как хочешь. В т.ч. и без Ардуино среды. Ничто не мешает.