Важная информация

User Tag List

Страница 3 из 36 ПерваяПервая 1234567 ... ПоследняяПоследняя
Показано с 21 по 30 из 352

Тема: Корвет: ExtROM Open Source extender

  1. #21
    R.I.P.
    Регистрация
    16.09.2009
    Адрес
    г. Харьков
    Сообщений
    1,466
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от forth32 Посмотреть сообщение
    Поправь меня если ошибаюсь, но, насколько я помню, в меге 128 нет прерывания PINCHANGE. Его вообще почти ни в одной меге нет - это для тинек обычное дело. Если бы было - я бы не ныл тут о сложности захвата адреса, а ловил бы любое самое малое изменение в адресном порте в виде прерывания Но зато есть штук 8 обычных extint, и какое-то из них наверняка выведено на нулевой бит какого-нибудь порта.

    Во, глянул даташт. PD0=INT0, как раз то что надо.
    я же готовился
    для мег их >1 как я понял, у тинек 1

    Цитата Сообщение от forth32 Посмотреть сообщение
    Я, наверно, еще тупой после вчерашнего, но что-то не могу понять из вкладки 3, куда ты собирался выводить старший и младший байты адреса. На порты A и C, что ли? Я так понимаю, это даже не чистая мега, а ты уже какую-то плату собрал и даже разъемы поставил (колока А табилцы).
    просто дома есть такое (оно под другую задачу было)

    https://dl.dropboxusercontent.com/u/...t/P1460181.JPG
    https://dl.dropboxusercontent.com/u/...t/P1800331.JPG
    http://kosmodrom.com.ua/razrabotka/m...8kit-board.php
    под нее и думал.

    правда сейчас должны приехать ардуинки, может с ними буду пробовать
    ---------- Post added at 09:40 ---------- Previous post was at 09:37 ----------

    Цитата Сообщение от forth32 Посмотреть сообщение
    Кстати, в не сохранилось ли у тебя копий тех схем? Там ссылки уже дохлые. А глянуть было бы интересно.
    https://yadi.sk/d/vBSOiBOlTVDaX
    https://yadi.sk/d/D0D6buftTVDmY
    https://yadi.sk/d/PiSCUxKCTVDpR
    https://yadi.sk/d/bJm-K9scTVDry
    Последний раз редактировалось esl; 16.06.2014 в 10:52.

  2. #22
    SaintTurnip
    Гость

    По умолчанию

    PINCHANGE
    извините, объясните, почему нельзя в духе

    while(not_enough) { porta=read_eeprom(portb+offset) } ?

  3. #23
    R.I.P.
    Регистрация
    16.09.2009
    Адрес
    г. Харьков
    Сообщений
    1,466
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от eugeniusz Посмотреть сообщение
    извините, объясните, почему нельзя в духе

    while(not_enough) { porta=read_eeprom(portb+offset) } ?
    Можно, но тогда надо под это дело 8 пинов отдать
    А так можно одним обойтись, если это сработает.

    Да, код сложнее но что делать.

    По идее для скорости надо не из eeprom читать а из буфера в озу

    Это как всегда или-или, что важнее.
    Чем меньше пинов - тем проще проц поставить можно.

  4. #24
    Activist
    Регистрация
    17.04.2011
    Адрес
    Санкт-Петербург
    Сообщений
    324
    Спасибо Благодарностей отдано 
    32
    Спасибо Благодарностей получено 
    200
    Поблагодарили
    48 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от eugeniusz Посмотреть сообщение
    извините, объясните, почему нельзя в духе

    while(not_enough) { porta=read_eeprom(portb+offset) } ?
    Бесконечным циклом читать данные по нужному адресу и выставлять в выходной порт? Интересная идея.

    Я тут давеча уже говорил, что нужно уложиться в 9 машинных тактов 580ВМ80. Как минимум. Лучше, наверное, в 8, чтобы к моменту чтения данные в порту уже стабилизировались. Попробуй прикинь, в какой кусок программного кода на ассемблере развернется твоя красивая строка на C? Уложишься в 3.2 мкс?

    Кстати, может быть и уложишься. Я думаю что код будет примерно такой:
    Код:
               LDI     R0,ROMDATA_H
    LOOP:
               IN       ZL,PINB
               ADD    ZL,ROMDATA_L
               ADC    ZL,R0  
               LPM    R16,Z
               OUT    PORTA,R16
               TST    ENDFLAG
               BRNE  LOOP
    Ну и выход из этого цикла по прерыванию, устанавливающему флаг endflag. Лень вспоминать растактовку, но это будет примерно 10 тактов. На 16 МГц это будет 0.6 мкс.

    Но встает проблема синхронизации. Ты можешь выбрать адрес незадолго до того, как он поменялся на входе, и выставить хосту неправильный байт. Пока выбираешь новый адрес, ищешь байт и пихаешь на выход - хост успеет неправильный байт прочитать. Наверное. Хотя, пожалуй, при цикле в 0.6 мкс данные успеют обновиться. Короче, тут проверять надо. Как только поборю лень и припаяю кабель к разъему DB37 - проверю и расскажу что получилось.

    ---------- Post added at 22:01 ---------- Previous post was at 21:58 ----------

    Цитата Сообщение от esl Посмотреть сообщение
    Можно, но тогда надо под это дело 8 пинов отдать
    А так можно одним обойтись, если это сработает.
    Чтобы обойтись 1 пином, надо гарантированно поймать момент перезапуска ОПТС - у тебя ведь жесткая привязка к последовательности адресов. А как, все же, RESET собираешься ловить? По дерганию ножки select?
    Последний раз редактировалось forth32; 16.06.2014 в 23:03.

  5. #25
    SaintTurnip
    Гость

    По умолчанию

    esl, один пин сэкономит не много, а программу усложнит. стоит ли?

    forth32, оптимистично исходил из трех циклов while к одном чтению. даже если компьютер выставит новый адрес в самый невыгодный момент, то следующего цикла ждать недолго - у нас полно времени, чтобы прочитать и выдать данные (если быть точным, то два полных цикла while).

    сколько времени будут устанавливаться данные на порту атмеги не знаю, но едва ли это сотни наносекунд. еще 0.1-0.5 мкс на прохождение данных через ВВ55. таким образом, даже при неудачном стечении обстоятельств у процессора данные будут актуальными целых 1-2 мкс и как раз в нужный момент, если верить твоему замечанию "от момента выдачи адреса до считывания данных проходят 2 коротких однобайтовых инструкции (ex de,hl и dec de). Это 9 тактов или 3.6 мкс"

    По идее для скорости надо не из eeprom читать а из буфера в озу
    прикинь, в какой кусок программного кода на ассемблере развернется твоя красивая строка на C
    это была идея на псевдокоде.

  6. #26
    R.I.P.
    Регистрация
    16.09.2009
    Адрес
    г. Харьков
    Сообщений
    1,466
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от forth32 Посмотреть сообщение
    Чтобы обойтись 1 пином, надо гарантированно поймать момент перезапуска ОПТС - у тебя ведь жесткая привязка к последовательности адресов. А как, все же, RESET собираешься ловить? По дерганию ножки select?
    конечно, он же ОБЯЗАТЕЛЬНО дергается чтоб ОПТС определил что есть EXT ROM
    т.к. на оригинальной железке как понял он выставляет CS для ПЗУ.
    ну и проверка та что на вход PIC

    на него прерыание и вход в режим EXT BOOT

    ---------- Post added at 23:54 ---------- Previous post was at 23:53 ----------

    Цитата Сообщение от eugeniusz Посмотреть сообщение
    esl, один пин сэкономит не много, а программу усложнит. стоит ли?
    экономия 7 пинов а не 1

  7. #27
    SaintTurnip
    Гость

    По умолчанию

    экономия 7 пинов а не 1
    я говорил про 7 ног в условиях избытка. или есть какие-то планы?

  8. #28
    R.I.P.
    Регистрация
    16.09.2009
    Адрес
    г. Харьков
    Сообщений
    1,466
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от eugeniusz Посмотреть сообщение
    я говорил про 7 ног в условиях избытка. или есть какие-то планы?
    я насчитывал 14 необходимых портов, если к ним кщк 7 прибавить это уже 21

    а вообще надо пробовать, и смотреть что возможно.

  9. #29
    R.I.P.
    Регистрация
    16.09.2009
    Адрес
    г. Харьков
    Сообщений
    1,466
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от forth32 Посмотреть сообщение
    Тут, конечно, от момента выдачи адреса до считывания данных проходят 2 коротких однобайтовых инструкции (ex de,hl и dec de). Это 9 тактов или 3.6 мкс.
    посчитал тут такты немного, имхо там больше тактов

    определение EXTROM
    его ловим как инициатор старта "загрузчика"
    сначала ставит c.7=0
    потом ставит c.7=1 (это для нас признак начала работы)
    с момента c.7=1 до первого чтения 67 тактов
    Код:
    RAM:04C5                 mvi     m, 0Eh 	 ;0 000 111 0 (setc.7=0)
    RAM:04C7 ;
    RAM:04C7                 ldax    d
    RAM:04C8                 cma
    RAM:04C9                 ani     1
    RAM:04CB                 jz      noRom
    RAM:04CE                 mvi     m, 0Fh
    RAM:04D0                 ldax    d		 ; 7
    RAM:04D1                 ani     1 		 ; 7
    RAM:04D3                 jnz     okRom		 ; 10
    ...
    RAM:0546 okRom:                                  ; CODE XREF: RAM:04D3j
    RAM:0546                 mvi     l, 0Bh		 ;  7	FA0B PPI0.RUS
    RAM:0548                 mvi     m, 90h 	 ; 10	 1 00 1 0 0 0 0 = A - in, BC - OUT 
    RAM:054A                 mvi     l, 9		 ;  7	FA09 PPI0.B
    RAM:054C                 mvi     m, 4 		 ; 10	set ext addr=0004
    RAM:054E                 xchg 			 ;  4
    RAM:054F                 dcx     d 		 ;  5  	67=7+7+10+7+10+7+10+4+5 after c.7=1
    RAM:0550                 ldax    d 		 ;! 7 !
    дальше, самый короткий интервал между сменой бита в адрессе и чтением - 33такта

    вот в этом куске
    Код:
    RAM:054E                 xchg 			 ;  4
    RAM:054F                 dcx     d 		 ;  5  	67=7+7+10+7+10+7+10+4+5 after c.7=1
    RAM:0550                 ldax    d 		 ;! 7 !
    RAM:0551                 mov     l, a 		 ;  4
    RAM:0552                 call    extRomIncAddr 	 ; 17+16  33T aftrer bit change  
    RAM:0555                 ldax    d 		 ;
    RAM:0556                 mov     h, a
    т.е. самый короткий цикл - 33 такта
    в циклах чтения/проверки/сравнения минимум вроде 43 такта

    Скрытый текст


    Код:
    RAM:04BC ExtROM:                                 ; CODE XREF: RAM:04AAj
    RAM:04BC                 call    CLS
    RAM:04BF                 lxi     h, PPI2_RUS
    RAM:04C2                 lxi     d, PIC_RUS
    RAM:04C5                 mvi     m, 0Eh 	 ;0 000 111 0 (setc.7=0)
    RAM:04C7 ;
    RAM:04C7                 ldax    d
    RAM:04C8                 cma
    RAM:04C9                 ani     1
    RAM:04CB                 jz      noRom
    RAM:04CE                 mvi     m, 0Fh
    RAM:04D0                 ldax    d		 ; 7
    RAM:04D1                 ani     1 		 ; 7
    RAM:04D3                 jnz     okRom		 ; 10
    RAM:04D6
    RAM:04D6 noRom:                                  ; CODE XREF: RAM:04CBj
    RAM:04D6                 ora     c
    RAM:04D7                 jz      R_LOAD_TST
    RAM:04DA                 lxi     h, mNoRom       ; "Подключите внешнее ПЗУ"
    RAM:04DD                 jmp     msgHalt
    RAM:04E0 ; ---------------------------------------------------------------------------
    RAM:04E0
    RAM:04E0 romError:                               ; CODE XREF: RAM:0574j
    RAM:04E0                 lxi     h, mRomError    ; "Внешнее ПЗУ неисправно"
    RAM:04E3
    RAM:04E3 msgHalt:                                ; CODE XREF: RAM:04DDj
    RAM:04E3                 lxi     d, ACZU
    RAM:04E6                 call    toSCR
    RAM:04E9
    RAM:04E9 _HALT:                                  ; CODE XREF: RAM:05B0j
    RAM:04E9                                         ; RAM:05C0j
    RAM:04E9                 hlt
    
    
    RAM:0546 okRom:                                  ; CODE XREF: RAM:04D3j
    RAM:0546                 mvi     l, 0Bh		 ;  7	FA0B PPI0.RUS
    RAM:0548                 mvi     m, 90h 	 ; 10	 1 00 1 0 0 0 0 = A - in, BC - OUT 
    RAM:054A                 mvi     l, 9		 ;  7	FA09 PPI0.B
    RAM:054C                 mvi     m, 4 		 ; 10	set ext addr=0004
    RAM:054E                 xchg 			 ;  4
    RAM:054F                 dcx     d 		 ;  5  	67=7+7+10+7+10+7+10+4+5 after c.7=1
    RAM:0550                 ldax    d 		 ;! 7 !
    RAM:0551                 mov     l, a 		 ;  4
    RAM:0552                 call    extRomIncAddr 	 ; 17+16  33T aftrer bit change  
    RAM:0555                 ldax    d 		 ;
    RAM:0556                 mov     h, a
    RAM:0557                 call    extRomIncAddr
    RAM:055A                 push    h 		 ; 4,5 START addr
    RAM:055B                 ldax    d
    RAM:055C                 mov     h, a
    RAM:055D                 mvi     l, 0
    RAM:055F                 call    extRomIncAddr
    RAM:0562                 push    h
    RAM:0563                 ldax    d
    RAM:0564                 mov     b, a
    RAM:0565                 call    resetRomAddr
    RAM:0568                 mvi     c, 0
    RAM:056A
    RAM:056A crcLoop:                                ; CODE XREF: RAM:0570j
    RAM:056A                 ldax    d		 ; 7
    RAM:056B                 add     c 		 ; 4
    RAM:056C                 mov     c, a 		 ; 5
    RAM:056D                 call    extRomIncAddr 	 ; 17+16
    RAM:0570                 jnz     crcLoop 	 ; 10 
    RAM:0573                 inr     c 		 
    RAM:0574                 jnz     romError
    RAM:0577                 call    resetRomAddr
    RAM:057A
    RAM:057A rom2ramLoop:                            ; CODE XREF: RAM:0580j
    RAM:057A                 ldax    d 		 ; 7
    RAM:057B                 mov     m, a 		 ; 7
    RAM:057C                 inx     h 		 ; 5
    RAM:057D                 call    extRomIncAddr   ; 17+16
    RAM:0580                 jnz     rom2ramLoop 	 ; 10 
    RAM:0583                 call    resetRomAddr
    RAM:0586                 lxi     h,  ACZU+40h
    RAM:0589                 xthl
    RAM:058A                 mvi     c, 38h ; '8'
    RAM:058C
    RAM:058C VerifyRom:                              ; CODE XREF: RAM:05B9j
    RAM:058C                 ldax    d 			; 7 
    RAM:058D                 cmp     m 			; 7
    RAM:058E                 jz      VerifyRomNextByte
    RAM:0591                 xchg
    RAM:0592                 xthl
    RAM:0593                 call    PutHexDE
    RAM:0596                 mvi     m, 20h ; ' '
    RAM:0598                 inx     h
    RAM:0599                 ldax    d
    RAM:059A                 call    PutHexA
    RAM:059D                 mvi     m, 20h ; ' '
    RAM:059F                 inx     h
    RAM:05A0                 xthl
    RAM:05A1                 mov     a, m
    RAM:05A2                 xthl
    RAM:05A3                 call    PutHexA
    RAM:05A6
    RAM:05A6 loc_5A6:                                ; CODE XREF: RAM:05ACj
    RAM:05A6                 mvi     m, 20h ; ' '
    RAM:05A8                 inx     h
    RAM:05A9                 mov     a, l
    RAM:05AA                 ani     0Fh
    RAM:05AC                 jnz     loc_5A6
    RAM:05AF                 dcr     c
    RAM:05B0                 jz      _HALT
    RAM:05B3                 xthl
    RAM:05B4                 xchg
    RAM:05B5
    RAM:05B5 VerifyRomNextByte:                      ; CODE XREF: RAM:058Ej
    RAM:05B5                 inx     h
    RAM:05B6                 call    extRomIncAddr 	 ;17+16
    RAM:05B9                 jnz     VerifyRom 	 ;10
    RAM:05BC                 pop     h
    RAM:05BD                 mov     a, c
    RAM:05BE                 cpi     38h ; '8'
    RAM:05C0                 jnz     _HALT
    RAM:05C3                 pop     h
    RAM:05C4                 pchl
    RAM:05C4 ; ---------------------------------------------------------------------------
    RAM:05C5 mNoRom:         .text "Подключите внешнее ПЗУ"
    RAM:05C5                 .db 0
    RAM:05DC mRomError:      .text "Внешнее ПЗУ неисправно" ; DATA XREF: RAM:romErroro
    RAM:05DC                 .db 0
    RAM:05F3
    RAM:05F3 ; =============== S U B R O U T I N E =======================================
    RAM:05F3
    RAM:05F3
    RAM:05F3 resetRomAddr:                           ; CODE XREF: RAM:0565p
    RAM:05F3                                         ; RAM:0577p ...
    RAM:05F3                 xra     a
    RAM:05F4                 inx     d
    RAM:05F5                 stax    d
    RAM:05F6                 inx     d
    RAM:05F7                 stax    d
    RAM:05F8                 dcx     d
    RAM:05F9                 dcx     d
    RAM:05FA                 ret
    RAM:05FA ; End of function resetRomAddr
    RAM:05FA
    RAM:05FB
    RAM:05FB ; =============== S U B R O U T I N E =======================================
    RAM:05FB
    RAM:05FB
    RAM:05FB extRomIncAddr:                          ; CODE XREF: RAM:0552p
    RAM:05FB                                         ; RAM:0557p ...
    RAM:05FB                 inx     d	;5		 5
    RAM:05FC                 ldax    d	;7		12
    RAM:05FD                 inr     a	;5		17
    RAM:05FE                 stax    d	;7		24 	
    RAM:05FF                 dcx     d	;5		29 	 5
    RAM:0600                 rnz		;11 yes/5	40/34 	16 (after bit change)
    RAM:0601                 inx     d 	;5		39
    RAM:0602                 inx     d	;5		44
    RAM:0603                 ldax    d	;7		51
    RAM:0604                 inr     a	;5		56
    RAM:0605                 stax    d	;7		63
    RAM:0606                 dcx     d	;5		68
    RAM:0607                 dcx     d	;5		73
    RAM:0608                 cmp     b	;4		77
    RAM:0609                 ret		;10		87
    RAM:0609 ; End of function extRomIncAddr
    RAM:0609
    [свернуть]

  10. #30
    Activist
    Регистрация
    17.04.2011
    Адрес
    Санкт-Петербург
    Сообщений
    324
    Спасибо Благодарностей отдано 
    32
    Спасибо Благодарностей получено 
    200
    Поблагодарили
    48 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от esl Посмотреть сообщение
    посчитал тут такты немного, имхо там больше тактов
    Ну, я гворил об этом:
    Код:
    Start_ext_ROM:				; CODE XREF: 0000:04CEj
    		ld	l, 0Bh
    		ld	(hl), 90h ; 'Р' ; IOP3 CWR
    					; порты	B C - на вывод
    					; Порт A - ввод
    					; режим	0
    		ld	l, 9		; IOP3 port B
    		ld	(hl), 4		; (b)=4
    		ex	de, hl
    		dec	de
    		ld	a, (de)		; Читаем порт A
    		ld	l, a		; -> L
    ld (hl),4 - выставляет адрес. Потом 2 короткие инструкции и чтение порта. Я тогда еще не понял до конца твою идею об обработке адреса по перепадам A0. Если так - то да, это первый читаемый байт и адрес его заранее известен.
    Очень хочется проверить ее в железе. Но все как-то руки не поднимаются браться за паяльник. Заканчиваю отладку сервера CP/N-90, чтобы уже проверенное описание проткола опубликовать. А так я уже и программу для AVR написал, и мегу-32 в загашнике нашел. Осталось 12 проводков от разъема к макетке протянуть и мегу зашить.

Страница 3 из 36 ПерваяПервая 1234567 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Open source firmware for the Spectrum
    от zx-kit в разделе Разный софт
    Ответов: 60
    Последнее: 29.05.2014, 13:53
  2. open-source эмуляторы под .NET
    от Sawyer в разделе Эмуляторы
    Ответов: 1
    Последнее: 04.01.2011, 17:47
  3. GP2X F100 Open Source Gaming Console
    от CodeMaster в разделе Зарубежные компьютеры
    Ответов: 3
    Последнее: 12.06.2010, 23:51
  4. Open Source эмуль...
    от rg_software в разделе Эмуляторы
    Ответов: 50
    Последнее: 06.12.2006, 11:57

Ваши права

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