nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 11:13



Reply to topic  [ 23 posts ]  Go to page 1, 2  Next
SD контроллер для Радио 86РК и Апогея в частности. 
Author Message
Retired

Joined: 27 Mar 2013 04:55
Posts: 587
Location: 62.192.229.16
Reply with quote
Собственно, идея пока такая:

Image

Image

Микроконтроллер эмулирует ПЗУ на 256 байт, в котором будет начальный загрузчик. Загрузить и запустить программу из внешнего ПЗУ можно на любом потомке Радио 86РК с помощью команд R0,100 G.

(Хотя исключения есть, например в Партнере 01.01 нет встроенного параллельного порта. Его вынесли на отдельно продающийся модуль.)

Если в определенном порядке прочитать адреса ПЗУ, то вместо эмулятора ПЗУ включается уже обкатанный SD контроллер. После выполнения команды опять включается эмулятор ПЗУ.


Last edited by vinxru on 02 Nov 2013 01:00, edited 1 time in total.



01 Nov 2013 12:49
Profile
Devil

Joined: 26 May 2003 06:57
Posts: 859
Reply with quote
vinxru wrote:
После выполнения команды опять включается эмулятор ПЗУ.

Для гарантии, можно включать ПЗУ при любом несоблюдении протокола. Если случайно осталось выключенным ПЗУ команда R0,100 снова его включит.

_________________
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/


02 Nov 2013 00:49
Profile WWW
Retired

Joined: 27 Mar 2013 04:55
Posts: 587
Location: 62.192.229.16
Reply with quote
Post 
Ага, обязательно.

Спаял плату. Надо будет перерезвести, что бы сверху под SD-картой дорожек не было, а то боюсь коротнут.

Image


02 Nov 2013 12:02
Profile
Retired

Joined: 27 Mar 2013 04:55
Posts: 587
Location: 62.192.229.16
Reply with quote
Post 
Забыл подключить сброс. Плата получилась деталями вниз, не подумал, что у Апогея плата закреплена деталями вниз.

Первый код. Эмуляция ПЗУ.

Code:
  DDRD = 0;    // Шина адреса
  DDRC = 0x3F; // 0-5 Шина данных
  DDRB = 0xC1; // 6-7 - Шина данных, 0 - Светодиод
  PORTB.0 = 1; // Зажечь светодиод
  while(1) {   
    PORTC = data[(unsigned char)PIND];
    PORTB.6 = PORTC.6, PORTB.7 = PORTC.7;
  }


P.S. Нашел таки драйвера для программатора BM9010 под Win 7 64 бита, чему очень рад.


04 Nov 2013 13:19
Profile
Retired

Joined: 27 Mar 2013 04:55
Posts: 587
Location: 62.192.229.16
Reply with quote
Post 
Протокол будет таким

Сначала на шину адреса устанавливаем значения 19, 23, 87. Они отличаются одним битом, поэтому шума между ними быть не должно.

Далее, компьютер читает адреса 86,87,86,87,86,87... каждый байт 86 является тактовым импульсом, т.е. подтверждением приема/передачи байта.

Если синхронизация удалась, то МК выставляет на шину данных ERR_START, а после тактового импульса ERR_OK_WAIT. Код ERR_OK_WAIT может держаться неопределенное кол-во тактов. В это время происходит инициализация флешки.

Потом ERR_OK_WAIT меняется на ERR_OK_NEXT если все нормально. Или возвращается код ошибки.

Компьютер должен переключить порт на выход и передать команду. В примере ниже команда BOOT - единственный байт 0

На это МК отвечает ERR_OK_WAIT (много раз), ERR_OK_ADDR, адрес загрузки L, адрес загрузки H, ERR_OK_WAIT (много раз)

Потом выдает содержимое файла блоками: 0, длина L, длина H, данные (HL раз), ERR_OK_WAIT (много раз)

Если данных не осталось, выдает ERR_OK_READ

Code:
     .org 0h

DATA_PORT       = 0EE00h
ADDR_PORT       = 0EE01h
CTL_PORT        = 0EE03h
SEND_MODE       = 10001011b ; Настройка: 1 0 0 A СH 0 B CL   1=ввод 0=вывод
RECV_MODE       = 10011011b

ERR_START         = 040h
ERR_WAIT          = 041h
ERR_OK_DISK     = 042h
ERR_OK          = 043h
ERR_OK_READ       = 044h
ERR_OK_ENTRY     = 045h
ERR_OK_WRITE     = 046h
ERR_OK_ADDR    = 047h

Entry:
     ; Первым этапом происходит синхронизация с контроллером
     ; 256 попыток. Для этого в регистр C заносится 0

     ; А в стек заносится адрес перезагрузки 0C000h

     LXI   B, 0F800h
     PUSH   B     

     JMP   Boot

     NOP

;----------------------------------------------------------------------------
; Отправка и прием байта

Rst1:
     INX   H      ; HL = ADDR_PORT
     MVI   M, 86
     MVI   M, 87
     DCX   H      ; HL = DATA_PORT
     MOV   A, M
     RET

;----------------------------------------------------------------------------
; Ожидание готовности МК

Rst2:
WaitForReady:
     Rst   1
     CPI   ERR_WAIT
     JZ      WaitForReady
     RET

;----------------------------------------------------------------------------

RetrySync:
     ; Попытки
     DCR C
     RZ            ; Ошибка синхронизации, перезагрузка

Boot:
     ; Режим передачи (освобождаем шину) и инициализируем HL
     MVI   A, RECV_MODE
     CALL SetMode

     ; Начало любой команды
     MVI   M, 19
     MVI   M, 23
     MVI   M, 87

     ; Если есть синхронизация, то контроллер ответит ERR_START
     Rst   1         
     CPI   ERR_START
     JNZ   RetrySync

     ; Дальше будет ERR_OK_WAIT, ERR_OK_NEXT
     ; Инициализация флешки
     Rst   2
     CPI   ERR_OK_ADDR
     JNZ   Rst1      ; Ошибка, освобождаем шину и перезагрузка

     ; ERR_OK_NEXT высталенный МК будет висеть на шине до следующего RST,
     ; только после него МК освободит шину и мы сможем включить режим передачи.
     Rst   1     

     ; Режим передачи     
     MVI   A, SEND_MODE
     CALL SetMode

     ; Код команды
       XRA   A
     Rst   1

     ; МК читает данные во время тактового импульса, т.е. он уже их прочитал.
     ; Включаем режим приема, т.е. освобождаем шину.

     ; Режим приема
     MVI   A, RECV_MODE
     CALL SetMode

     ; МК захватит шину во время тактового импульса (первого RST)

     ; Дальше будет ERR_OK_WAIT, ERR_OK_RKS
     Rst   2
     CPI   ERR_OK_RKS
     JNZ   Rst1      ; Ошибка, освобождаем шину и перезагрузка
     
     ; Удаляем из стека 0F800h
     POP   B

     ; Адрес загрузки в BC
     Rst   1
     MOV   C, A
     Rst   1
     MOV   B, A

     ; Сохраняем в стек адрес запуска
     PUSH   B

     ; Подождать, пока МК прочитает очередной блок денных
RecvLoop:
     Rst   2
     CPI   ERR_OK_READ
     JZ      Rst1      ; Всё загружено, освобождаем шину и запуск
     ORA   A
     JNZ   0F800h   ; Ошибка, перезагрузка (не отпускаем контроллер)

     ; Принять очередной блок
     Rst   1
     MOV   E, A
     Rst   1
     MOV   D, A
RecvBlock:
     Rst   1
     STAX   B
     INX   B
     DCX   D
     MOV   A, E
     ORA   D
     JNZ   RecvBlock
     JMP   RecvLoop

      ; Прием/передача
SetMode:
     LXI   H, CTL_PORT
     MOV   M, A
     DCX   H
     DCX   H      ; HL = ADDR_PORT
     RET
.End


108 байт.


05 Nov 2013 03:36
Profile
Retired

Joined: 27 Mar 2013 04:55
Posts: 587
Location: 62.192.229.16
Reply with quote
Post 
У кого есть опыт заказа плат в Китае? Может изготовить несколько плат? Я думаю разойдутся.


05 Nov 2013 04:36
Profile
Doomed
User avatar

Joined: 05 Apr 2011 12:45
Posts: 491
Location: Великий Новгород
Reply with quote
Post 
если будет заказ. то я одну платку возьму.

_________________
танцуй пока живешь под каплями огненного дождя...


05 Nov 2013 05:07
Profile WWW
Doomed

Joined: 10 Mar 2012 16:21
Posts: 598
Location: РФ
Reply with quote
Post 
А я бы и две шт. не против.. А какова будет цена ?


05 Nov 2013 15:15
Profile
Retired

Joined: 27 Mar 2013 04:55
Posts: 587
Location: 62.192.229.16
Reply with quote
Post 
Печатная плата примерно такого размеру в Zorel стоит 6$.

Деталей там на 4$ (ATMega8, разъем SD, 7 резисторов, 2 диода, 1 светодиод, 4 конденсатора).

Итого 10$

Разъем из комплекта Апогея сами припаяете.

Это для самостоятельной сборки будет.

А что бы я захотел для вас их собрать, надо десяток заказов и 1000 рублей за готовое устройство. :) Это заказать детали с ибея, заказать платы, спаять всё, прошить, отмыть, проверить и отправить платы почтой.

Самое скучное тут - это тащиться на почту и стоять час в очереди.


06 Nov 2013 00:09
Profile
Doomed
User avatar

Joined: 05 Apr 2011 12:45
Posts: 491
Location: Великий Новгород
Reply with quote
Post 
а зачем паять кому то? когда интереснее это самому делать.

_________________
танцуй пока живешь под каплями огненного дождя...


06 Nov 2013 04:29
Profile WWW
Retired

Joined: 27 Mar 2013 04:55
Posts: 587
Location: 62.192.229.16
Reply with quote
Post 
Помимо пальщиков, есть еще программисты, ностальгирующие и просто коллекционеры


06 Nov 2013 04:35
Profile
Writer

Joined: 13 Jun 2013 21:48
Posts: 24
Location: г.Зерноград, Ростовская область
Reply with quote
Post 
Сабж работает? Где взять схему для самостоятельного изготовления?

_________________
ZX-Spectrum 128(краснодарский вариант)+YM+Covox+3,5" FDD+5,25" FDD+Nemo controller+HDD+CD-ROM+PS/2 Keyboard+PS/2 Mouse(остальное в проекте...) (Всё самодельное)


09 Jan 2014 03:31
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22411
Location: Silicon Valley
Reply with quote
Post 
Mifody wrote:
Сабж работает? Где взять схему для самостоятельного изготовления?


Да схема же вроде в самом верху

Другой вопрос где взять прошивку?...

P.S. Оно? https://github.com/vinxru/VinxFs

_________________
:dj: https://mastodon.social/@Shaos


09 Jan 2014 19:30
Profile WWW
Writer

Joined: 13 Jun 2013 21:48
Posts: 24
Location: г.Зерноград, Ростовская область
Reply with quote
vinxru wrote:
Собственно, идея пока такая:

Ааа.. Я думал это пока только идея такая..
vinxru, а контроллер планируется адаптировать для Вектора,Партнёра,Львова,Башкирии? А то у них с загрузкой прог всё грустно. ((( На Башкирии вобще без танцев с бубном даже через мафон не загрузить, так как проги только в образах дисков..

_________________
ZX-Spectrum 128(краснодарский вариант)+YM+Covox+3,5" FDD+5,25" FDD+Nemo controller+HDD+CD-ROM+PS/2 Keyboard+PS/2 Mouse(остальное в проекте...) (Всё самодельное)


10 Jan 2014 01:12
Profile
Devil

Joined: 26 May 2003 06:57
Posts: 859
Reply with quote
Mifody wrote:
На Башкирии вобще без танцев с бубном даже через мафон не загрузить, так как проги только в образах дисков..

Надо будет подумать. Можно сделать прогу и тоже поместить на образ диска. Она будет выбирать файл и жужжать его через звуковую карту. Таким образом, запустив эмулятор и эту прогу можно будет выбрать файл и передать его на реальный компьютер.

Хотя, придётся писать процедуру вывода на магнитофон через динамик, может потом и не считаться. Проще, наверное, сделать специальный конфиг, в котором вывод на магнитофон будет не в файл, а прямо на биппер. Но можно и через файл.

_________________
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/


10 Jan 2014 01:20
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 23 posts ]  Go to page 1, 2  Next

Who is online

Users browsing this forum: No registered users and 12 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.