Hello world!

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

Moderator: Shaos

Post Reply
User avatar
Shaos
Admin
Posts: 23664
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: Hello world!

Post by Shaos »

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

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: 23664
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: Hello world!

Post by Shaos »

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

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

Re: Hello world!

Post by Mondx »

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

Re: Hello world!

Post by Mondx »

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

Re: Hello world!

Post by Shaos »

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

Re: Hello world!

Post by Mondx »

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

Re: Hello world!

Post by Mondx »

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

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: 23664
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: Hello world!

Post by Shaos »

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

Re: Hello world!

Post by Mondx »

"Мы по разному видим мир!"
Attachments

Скриншот 30-09-2024 200605.jpg
Скриншот 30-09-2024 200605.jpg (195.93 KiB) Viewed 829 times

User avatar
Shaos
Admin
Posts: 23664
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: Hello world!

Post by Shaos »

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

Re: Hello world!

Post by Mondx »

У меня тут завалялась замечательная платка под названием WEMOS XI. А замечательна она тем, что у неё выведено аж 30 пинов. А тогда, с её помощью, очень легко получается эмулятор 2764. И даже 27256. Ну чем плохо то! И тот же вывод по UART делается без каких либо телодвижений. Думаю, просто песня для ретростроителей.)
Attachments

wemosxi-2.jpg
wemosxi-2.jpg (26.22 KiB) Viewed 763 times

User avatar
Shaos
Admin
Posts: 23664
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: Hello world!

Post by Shaos »

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

Re: Hello world!

Post by Mondx »

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