Первая прошивка «Электроники МК-152» оказалась неуспешной.

Это обзор материала, опубликованного в Контакте по адресу: https://vk.com/topic-10838600_33160857

Прошил в W78E516D-PG файл W78test1.bin размером в 64Кб. Вставил в «Электронику МК-152», запустил.

Итог хороший в том смысле, что ЭКВМ не сгорела. :-) После замены микроконтроллера обратно на W77LE516P всё работает нормально.

Но ожидаемого видеоэффекта не получилось. Вместо вывода пунктира где-то в середине экрана (64 байтов 10101010) и последующего зависания при включении ЭКВМ с новой прошивкой получается тёмный экран. При повторных включениях — светлый экран.

Либо адрес буфера индикатора у меня неверный (например, в МК-161 и МК-152 они различаются), либо W78E516D-PG не подходит, либо формат буфера индикатора на самом низком уровне другой. У кого есть схемы двух «Электроник», можете посмотреть?

Возможно, конечно, что я допустил ошибку в программировании W78E516D-PG или в ручном компилировании в машинный код. Ведь это моя самая первая программа для 8052.

; Переход за пределы таблицы прерываний
0000+   80 6e           SJMP start
0002    ff
0003+   32              RETI                    ; заблокировать прерывание
000B+   32              RETI                    ; заблокировать прерывание
0013+   32              RETI                    ; заблокировать прерывание
001B+   32              RETI                    ; заблокировать прерывание
0023+   32              RETI                    ; заблокировать прерывание
002B+   32              RETI                    ; заблокировать прерывание
0033+   32              RETI                    ; заблокировать прерывание
003B+   32              RETI                    ; заблокировать прерывание
0043+   32              RETI                    ; заблокировать прерывание
004B+   32              RETI                    ; заблокировать прерывание
0053+   32              RETI                    ; заблокировать прерывание
005B+   32              RETI                    ; заблокировать прерывание
0063+   32              RETI                    ; заблокировать прерывание

start:
; Сбросить прерывания IE.0-IE.6 и особенно IE.7 (адрес A8)
0070+   75 a8 00        MOV     IE,#00          ; Обнулить регистр a8 (IE)

; Установить P4 в mode 0 -- регистры C2 (P4CONA) и C3 (P4CONB)
0073+   75 c2 00        MOV     P4CONA,#00
0076+   75 c3 00        MOV     P4CONB,#00

; Обнулить P4.0 P4.1 P4.2 P4.3 -- регистр D8
; Подать единицу на P4.1 -- регистр D8 (SFR P4), записать 02
0079+   75 d8 02        MOV     P4,#02

007c+   78 40           MOV     R0,#40          ; Цикл 64 раза
007e+   90 b1 b1        MOV     DPTR,#b1b1      ; Адрес 0xb1b1 в DPTR
0081+   74 aa           MOV     A,#aa           ; Константа AA в A

lll:
0083+   f0              MOVX    @DPTR,A         ; Записать AA по адресу
0084+   a3              INC     DPTR            ; Адрес++
0085+   d8 fc           DJNZ    R0, lll         ; цикл lll

; Обнулить P4.0 P4.1 P4.2 P4.3 -- регистр D8 (SFR P4), записать 00
0087+   75 d8 00        MOV     P4,#00

stop:
008a+   80 fe           SJMP    stop             ; перейти на stop
008c    ff
; конец
Undefined

Comments

Есть необходимость в ручной трансляции? Насколько я помню, даже компилятор Си был в открытом доступе.

Мне удобней сперва запустить маленький и понятный код. Понять, он вообще выполняется там? Или нет.

Необходимости нет, конечно. Желающие смогут писать на Си. Когда будет ясно, как обращаться к индикатору, клавиатуре и другим устройствам, программы можно будет писать хоть на языке Ада. :-)

Сама Каллисто для W77/W78 будет писаться на ассемблере, разумеется. Точнее — на своём промежуточном языке. Разумеется, без ручной трансляции. Периодически задумываюсь о мета-трансляции (Каллисто на Каллисто), но для этого пришлось бы разрабатывать Каллисто ещё и под винду или OS X, чего хочется избежать.

Для Каллисто имеет смысл сделать кросс-транслятор с мнемокода МК161.

Кросс-транслятор это хорошая идея и поможет людям.

Но конкретно для Каллисто — слишком дорого. Все примитивы я буду кодировать в ассемблер 8052 ручками, работая лично кросс-транслятором и изучая ваши советы, пожелания. Наша прошивка должна быть быстрой, компактной, надёжной.

Так что компилятор с языка МК в код W77LE516P пусть кто-нибудь другой возьмёт на себя. Если он будет свободной программой (а не закрыт, как новосибирская прошивка), в нём можно будет повторно использовать код из Каллисто.

Вот здесь туториал, как программировать на Си под однокристалку, которая в ЭКВМ (англ.):
https://www.ikalogic.com/part-1-introduction-to-8051-microcontrollers/

Правда, основная задача (с которой я и начинал диалог) пока не решена — как выводить точки на индикатор и опрашивать клавиши клавиатуру, пока никто не выяснил.

Для начала можно было бы точки вывести в самое начало ОЗУ экрана, а не в середину, чтобы уж наверняка. Ну, и начальную установку провести:

Начальная установка модуля
Для начальной установки модуля необходимо подать сигнал RES равный логическому «0» длительностью не
менее 1 мкс. При этом модуль выполняет команды установки Display Start Line в 0, DisplayOff. После
деактивации сигнала RES (переключения в логическую «1» с временем фронта не более 200 нс) необходимо
дождаться сброса битов BUSY и RESET в регистре состояния обоих кристаллов или выдержать паузу не менее
10 мкс. После этого модуль нормально функционирует. Чтение статуса можно выполнять даже при активном
сигнале RES (равном логическому «0»).

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Vitasam, большое спасибо за документацию. Она очень важна!

Я просто писал в адресное пространство — думая, что на него отображён буфер, как во многих отечественных ПК. Оказывается же, что у MT–12864J есть своя система команд. Сюжет становится интересней. :-)

Нам надо подобрать такую последовательность адресов и кодов, чтобы операции записи этих кодов по этим адресам выводили точку. Есть идеи, что мне попробовать в первую очередь для «Электроники МК-152» (я пока экспериментирую на настольной модели)?

Думаю, пока можно принять, что сообщённая нам информация про P4.1 и B100 истинна и верна для МК-152. Но если у вас осталась схема, хорошо бы перепроверить. МК-152 у меня одна и сжечь её не хотелось бы.

P.S. А начальную установку как? К чему этот сигнал RES подключен и как регистр состояния считать? Можно в начале экрана. Мне хотя бы где-нибудь получить подтверждение, что программа записалась в W78 и успешно работает в МК-152. Хоть пукалкой, азбукой Морзе буду на первых порах общаться! :-)

Я думаю, что ОЗУ экрана не входит в общее адресное пространство, туда надо писать средствами контроллера экрана через параллельный порт последнего. В таблице 3 мануала на экран: команды Set Page, Set Address и Write Data to Ram.

А куда пины экрана подключены, без схем не понять.

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Я думаю, что ОЗУ экрана не входит в общее адресное пространство, туда надо писать средствами контроллера экрана

Согласен.

через параллельный порт последнего.

Вроде бы писали, что контроллер экрана включён во внешнее адресное пространство и доступен через MOVX с адресом B100 — ну и, возможно, B101.

И куда RES экрана подключен, тоже без схем не понять.

У вас эти схемы есть, успели скачать с сайта разработчика?

Если экран доступен через B100 или B101, то, видимо, это адрес шины данных контроллера экрана. Надо попробовать туда позаписывать те команды из мануала экрана.

Нет, схем нет, сунулся было скачать в свете этой активности, но опоздал.

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Vitasam wrote: Если экран доступен через B100 или B101, то, видимо, это адрес шины данных контроллера экрана. Надо попробовать туда позаписывать те команды из мануала экрана.

Мне нужна последовательность этих команд и адресов, куда их записывать. Конечно, они могли повесить DB7…DB0 не на шину данных (как я думал), а на младшие биты адресной шины — такое нельзя исключать.

Когда будет разработана последовательность, я её закодирую в машинный код W78, прошью и проверю на живой МК-152.

Vitasam wrote: Нет, схем нет, сунулся было скачать в свете этой активности, но опоздал.

Проверьте личку на этом сайте или вк. Убрать лежавшие годами схемы из общего доступа в самый ответственный момент было, конечно, эпично. :-)

AtH wrote: Убрать лежавшие годами схемы из общего доступа в самый ответственный момент было, конечно, эпично. :-)

Снова открываю для себя новые глубины, откуда стучат.

Однако, если производитель не хочет переделки своего устройства, лучше бы и оставить эту затею. Полагаю, что в такой ситуации программирование для ARM или даже Saturn для HP будет куда более простым делом.

Я полностью присоединяюсь к Сергею - лучше оставить эту затею. Производитель активно препятствует созданию новых прошивок, а ты стараешься повысить привлекательность его, производителя, железа.

Портировать Каллисто на HP, или еще куда. Что не стоит 7500 рублей и более массово.

А то, что не отечественная железяка - так прошивка - это уже 80% отечественного, а железо, при определенных усилиях, решаемо (типа российского swissMicro)

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Можно подробней насчёт SwissMicro? Как это решаемо, откуда внезапно появится отечественная железка?

Если кто-нибудь ещё (например, Сергей Фролов или Арбинада) развернёт производство ПМК в России, я только «за» и буду «повышать привлекательность» вашего железа. Но за последние 16 лет, увы, что-то получается производить только вот у таких. Без серьёзных политических/социальных изменений, на мой взгляд, ничто больше и не сможет производиться в России.

Так что пока объективно имеем дело с тем, с чем увы, приходится в России дело иметь. Убрать схемотехнику из онлайна, это ещё мелочи. Спасибо, что вообще её когда-то выкладывали. Работникам луганского (да и донецкого) аэропорта, например, не повезло куда сильней.

Производсто не обязательно разворачивать сразу и всё. Можно через краудфандинг. Часы Pebble на моей руке - яркий пример тому.

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Что за границей можно выпускать электронику и оттуда заказывать — это ясно.

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

При этом даже уровня СЕМИКО не хватает, чтобы наладить в России торговлю калькуляторами через магазины. Сейчас у нас развёрнуто производство только МК-152/162/1152 и их вариантов. И это не просто так. Экономическая картина такая, что тесно связанные казнокрады-бездельники воруют и на свободе, а простого предпринимателя обнаглевшие «силовики» могут просто снести бульдозером без решения суда — как в «ночь длинных ковшей».

Будут другие ПМК выпускаться в России, перенести на них Каллисто сложности не составит. Но пока этого нет — лучшее, что мы можем в пределах России, это вставлять свои прошивки в уже готовые изделия Новосибирска. Заодно отлаживая систему. А как и где она пригодится, никто не знает.

Друзья-товарищи, давайте избегать поворота на политические темы. Не потому, что запрещено, а потому что вменяемым людям все и так ясно, привлекать же "на огонёк" невменяемых не стоит. В крайнем случае можно завести тему в "Кабачке", который виден только зарегистрированным пользователям.

HP я упомянул только для примера, поскольку для 50g разработка в кодах официально разрешена, есть также опции подгрузки двоичных библиотек. Есть и другой вариант, HP 30b, стоимостью около $30. В нем тоже стоит процессор ARM, и его легко перепрошить. Исходники имеются на Sourceforge. На его основе сделан известный opensource калькулятор WP-34s: http://commerce.hpcalc.org/34s.php
Можно взять за основу для форт-калькулятора.

Производители CASIO и TI предоставляют SDK для расширения.

HP-30b это хороший кандидат на форт-калькулятор. Также как и msp432

C другой стороны появился уже спортивный интерес - запустить экран в ЭКВМ :)

А политику в общих темах надо исключать. Плюсомётом, как в старом добром ФИДО.

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

в запуске индикатора? Если бы у меня этот МК-161 был - то запустил бы.
Естественно, запись в него не как в область памяти, а побайтно, перемежаясь с командами управления.

На своих ресурсах я политику запретил. Т.к. много хороших людей по этому поводу разругивается. Был один случай в Москве, когда шофёр убил своего работодателя — не сошедшись во взглядах на украинский вопрос. Политические страсти, увы, прямо по Марксу оказались сильней профессиональной этики и профессиональных отношений.

Но в правилах, а насколько я вижу, и в практике, политические беседы у Арбинады не запрещены. Я получил в СССР гражданство, также являюсь делегатом Съезда граждан СССР IV созыва и участвую в Рабочей группе, помогая советским патриотам с использованием своих знаний. Часть которых, кстати, получена ещё в СССР — благодаря бесплатному советскому образованию, дешёвой технической литературе и т.п.

Упускать возможность для остановки геноцида советского народа и молчать, когда поднимаются вопросы, тесно связанные с освобождением нашей советской Родины — ну это я делаю только тогда, когда в силу оккупации это требуется по тактической причине.

HP 30b интересен. Но в России его приобрести ещё сложней, чем МК-161.

Потом однажды производственные мощности СЕМИКО перейдут в руки рабочих Новосибирска — ну или советский народ построит крупные отечественные заводы, где наладит выпуск каких-нибудь МК-161ВП1, на порядки превосходящие современные 8-битные разработки со скромными 22 Мгц.

Созданное нами во время оккупации, даже в условиях сопротивления режима, будет помогать нашей стране. Для зарубежья же все наши попытки, в большинстве своём, это лишь пустой чих. Плевать им оттуда, с их высоких экономических гор, на наши леса, сугробы и прошивки.

Вам только вот броневичка не хватает. Сильно.
Но мое мнение таково, что политике в технических форумах не место. Если уж так охота, то сделайте темку соответствующую.

По поводу какого-то кода для первичной проверки - сбросьте мне на инфо@avl.by схемы 152/161, и я при свободном временном окне что-нибудь напишу маленькое. На асме не обещаю, но на с - вполне.

Я тут разбавлю политику псевдокодом. Уважаемый ЗГГОГ поправит меня, надеюсь :)

; *************************************************
; Работа с экраном MT–12864J, псевдокод
;
; <a href="http://www.melt.com.ru/docs/MT-12864J.pdf">http://www.melt.com.ru/docs/MT-12864J.pdf</a>
; *************************************************
;
; Макросы
    DISP_PORT               EQU     0xB100
    DISP_RST                EQU     P1.1
    DISP_RW                 EQU     P2.1
    DISP_E1                 EQU     P2.6
    DISP_E2                 EQU     P2.0
    DISP_A0                 EQU     P2.2
    DISP_E                  EQU     P4.1
    SET_DISPLAY_ON          EQU     0x3F
    SET_DISPLAY_OFF         EQU     0x3E
    (SET_START_LINE N)      EQU    (0xC0 or (0x3F and N))
    (SET_PAGE N)            EQU    (0xB8 or (0x07 and N))
    (SET_ADDRESS N)         EQU    (0x40 or (0x3F and N))
;
; Для  начальной установки модуля необходимо подать сигнал RES
; равный  логическому  «0»  длительностью  не менее 1 мкс. При этом
; модуль выполняет команды установки Display Start Line в 0,
; DisplayOff.  После деактивации  сигнала  RES  (переключения в
; логическую  «1» с временем  фронта  не  более 200  нс) необходимо
; дождаться сброса битов BUSY и  RESET в регистре состояния обоих 
; кристаллов или выдержать паузу не менее 10  мкс. После этого
; модуль нормально функционирует. Чтение статуса можно выполнять
; даже при активном сигнале RES (равном логическому «0»).
;
; --- Cброс дисплея
    Clr     DISP_RST
    Delay   1
    Set     DISP_RST
    Delay   10
;
; Чтение (запись) информации из (в) модуль осуществляется по страницам
; (64х8 бит или 64х1 байт). Каждая страница представлена как 64 байта.
; Для чтения или записи байта данных по произвольному адресу необходимо
; предварительно установить страницу ОЗУ и установить адрес внутри  
; страницы ОЗУ. Это осуществляется командами «Set Page» и «Set Address» 
; соответственно. После этого можно прочитать или записать байт данных.
; В режиме чтения данных после команд «Set Page» и «Set Address» необходимо 
; однократно выполнить «пустую» операцию чтения, результат которой не 
; использовать.
; Модуль поддерживает непрерывную последовательность операций чтения или 
; записи: после чтения (записи) одного байта счетчик адреса автоматически
; увеличивается  на 1 и  модуль  готов  к  новой  операции  чтения (записи)
; по  следующему  адресу  без  предварительной  установки  страницы ОЗУ и
; адреса. Счетчик  адреса считает  только  внутри  одной  страницы!  
; При  достижении  адреса  63  следующим  значением  счетчика  будет 0 и т.д.
; Между любыми двумя передачами данных или команд, необходимо выдержать
; паузу не менее 8 мкс. Или ожидать сброса флага BUSY в регистре состояния
; того кристалла, к которому будет обращение.
;
; --- Запись байта 0xAA в начало экранного ОЗУ
    Clr         DISP_RW                           ; Выбрать режим записи
    Clr         DISP_A0                           ; Выбрать режим команд
    Set         DISP_E                            ; Установить строб данных
    Write       DISP_PORT   SET_DISPLAY_ON        ; Включить дисплей
    Write       DISP_PORT   (SET_PAGE 0)          ; Установить страницу
    Write       DISP_PORT   (SET_ADDRESS 0)       ; Установить адрес
    Set         DISP_A0                           ; Выбрать режим данных
    Write       DISP_PORT   0xAA                  ; Записать байт данных
    Clr         DISP_E                            ; Очистить строб данных
    Delay       8

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

Vitasam wrote:
Set DISP_E ; Установить строб данных
...
Clr DISP_E ; Очистить строб данных

Со стробом данных я не уверен, правильно ли использую, похоже надо во время каждой записи в порт дерагть строб в 1 и 0

---------------------------
Истина где-то рядом
www.litres.ru/vitaliy-samurov/dozvonitsya-do-devy/

А какие такие особенные производственные мощности необходимы ? В случае с МК-161, ну может быть фрезеровальный станок для сверления дырок под тактовые кнопки и экранчики. Есть ли у них плэйсер и специальная печь для пайки поверхностного монтажа ? Да не факт. Возможно заказывали они платы и монтаж снова у наших китайских друзей.

Так что мощности у рабочих Новосибирска в какой то мере и так есть, нет мотивации что то производить. Не смотря на всякие козни "кровавого режыма", крайне сомнительно, что он может являться сколько нибудь значимым фактором препятствующим производству программируемых микрокалькуляторов в России.

СЕМИКО не может раскрутиться вовсе не по причине козней "режыма", а потому что у них подход изначально параноидально направленный против потенциального потребителя их устройств. Даже малые козыри они благополучно профукали и начали завинчивать гайки. Советы не учли (маркетинг у них считается матерным словом), но продолжали голосить про козни неблагожелателей, которые дескать всё испортили. А эти "неблагожелатели" меж прочим поддержали СЕМИКО материально, купив свой экземпляр легендарного устройства.

В общем мои мысли склоняются к тому, что надо просто держать курс без меркантильного расчёта. Писать Каллисто (и приспосабливать другие форты) под разные потенциально полезные платформы. Приспосабливать разные платки. Делать клавиатуру (для упрощения заказал микромембранные СМД кнопки с AliExpress). Корпуса на 3д принтерах и фрезере. Придёт день и рабочие России выкатят работоспособные недорогие!!! варианты, которые каждый желающий в простой форме сможет прошить своей прошивкой или общественной. И будет доступен код под это железо, чтобы можно было натворить всё что душа пожелает и не изобретать библиотеки под экранчик, клавиатуру, карту памяти и т.п. Вот что следовало сделать СЕМИКО, не опасаясь что мифические конкуренты всё украдут. Вообще в наше время больше зарабатывают на консультировании и кастомизации популярных штуковин, чем на самих устройствах !!!

«Режим» РФ сейчас поддерживает не производителя, а вора. Воровать нефть из России, сбывать на Запад и делить выручку — как пример. Всякие «нанораспилы», как второй пример. Дворцы, яхты, частные самолёты воров — третий.

Новосибирск рассказывал, что на одного производителя приходится по десять нахлебников, любящих «контролировать» и ещё получать деньги за свою вредоносную деятельность.

Технически производительные мощности в России есть — и не только в Новосибирске. Они действительно не такие уж особенные. Устаревшие, архаичные социальные отношения — главное, что мешает производству. И тут Новосибирск как раз заодно с режимом. Давление, которое производилось на разработчиков Каллисто, шло в том числе со стороны «главного инженера» СЕМИКО.

Согласен, что однажды мы всю эту шушеру победим и опять люди станут свободны в творчестве и производстве на родной земле!

Комментарий был перемещен и теперь находится здесь.

Приступил к кодированию псевдокода уважаемого Vitasam. Не тороплюсь, хотя уже поужинать, видимо, не успел — все магазины и едальни вокруг закрываются в 11 вечера.

Сейчас занимаюсь временными задержками. Почему-то советская документация по ВЕ51 и буржуйская по W77LE516P дают одинаковое время исполнения инструкции DJNZ в 2 машинных цикла.

Datasheet по W78E516D даёт на ту же инструкцию DJNZ аж 24 "W78E516D/W78E058D series Clock cycles"!

Пока рассчитываю задержки, исходя из гипотезы о правильности Datasheet. Но если кто из железячников может прокомментировать такую невероятную разницу в производительности, буду признателен.

Съездил в ночной магазин и добавил продуктов в холодильник, полностью опустошённый покупкой программатора. На карточке осталось всего 33 рубля, зато прошёл платёж на AliExpress.com. Это даёт надежду, что через месяц у меня в Москве появятся родные W77LE516P, на которые и рассчитана схема ЭКВМ.

Пока ужинал, вчитывался в умные книжки по К1816ВЕ51 и datasheet по W78E516D, сравнивая их между собой и исследуя сохранившуюся у меня схему «Электроники». Вот, что удалось узнать (краткая информация опубликована в основной теме в Контакте):

Тактовый генератор «Электроники» основан на кварце BQ2, который задаёт тактовую частоту OSC = 22,1184 МГц. Схема подключения кварца, правда, немного отличается от той, что в моём справочнике. Длительность одного такта (англ-кит clock cycle) равна 45,2112 нс.

Эта частота поступает на входы XTAL1 и XTAL2 однокристалки (ножки 21 и 20). Почему-то Новосибирск их обозвал BQ1 и BQ2, но раз им так удобней…

Внутри кристалла эта частота делится пополам, чтобы тактировать шесть состояний S1-S6: CLK = OSC/2 = 11,0592 МГц. Практического применения при написании прошивки у этой частоты мало, но для полноты приведу здесь значение её периода в 90,4225 нс.

Один машинный цикл (англ-кит machine cycle operation) по умолчанию составляет 12 тактов, то есть занимает 542,535 нс. Машинные циклы происходят с частотой 1,8432 МГц.

Большинство команд выполняются за 1 или 2 машинных циклов, то есть 12 или 24 тактов. Команды умножения и деления выполняются за 4 цикла (48 тактов).

W78E516D также способна работать в режиме 6T, когда один цикл содержит 6 тактов. Нам он, надеюсь, не понадобится, т.к. этот режим ограничен тактовой частотой 20 МГц, что немного меньше OSC «Электроники».

Разобрав эту важную матчасть, возвращаюсь к кодированию псевдокода. Продуктов должно хватить на плодотворную ночь.