Jump to content
EugenOS

78K0S, Непонятки С Системой Комманд

Recommended Posts

Добрый день всем.

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

func1:
mov A,#03h
f1_loop:
mov L,A ;{
mov H,#0FEh
mov A,[HL+8Ch] ; [FE00+idx] = [FE7C+idx] ^ [FE8C+idx];
mov H,#0FEh
xor A,[HL+7Ch]
mov H,#0FEh
mov [HL+00h],A
mov H,#0FEh
mov A,[HL+80h] ; [FE00+idx] = [FE80+idx]
mov H,#0FEh
mov [HL+00h],A
mov H,#0FEh ; [FE00+idx] = [FE8C+idx]
mov A,[HL+8Ch]
mov H,#0FEh
mov [HL+00h],A
mov A,L ; idx--
sub A,#01h
bnc loc_A5A ;}
pop BC
ret

В комментариях написано мое понимание того, что делают команды внутри цикла. Но это явный бред. По видимому "mov [HL+00h],A" зпихивает данные не в [FE00+idx]. Кто нибудь занимался этими процессорами. Подскажите как оно на самом деле работает.

Share this post


Link to post
Share on other sites

ну дык...а когда еще можно заняться хоббями? днем работа...

P.S. ну привычка такая...из рассчета, что днем читать будет большинство....я чаще днем просматриваю форумы...это вопросы ночью возникают...а "доброго времени суток" как-то коробит

Edited by EugenOS

Share this post


Link to post
Share on other sites

ну вот...как всегда в рунете, никакой информации...лишь бы первонах оставить...

Share this post


Link to post
Share on other sites

Вебинар STM32G0 – новый лидер бюджетных 32-битных микроконтроллеров от STMicroelectronics

Компания Компэл приглашает вас 25 сентября принять участие в вебинаре, который посвящен новому семейству микроконтроллеров STM32G0. Вебинар рассчитан на технических специалистов и тех, кто хорошо знаком с семейством STM32. На вебинаре будут освоены современные методы тестирования производительности микроконтроллеров на примере самых бюджетных 32-битных семейств общего назначения STM32G0 и STM32F0 и проведено их подробное сравнение.

Подробнее

Лично с таким процессором не знаком, но мнемоника ассемблера смахивает на процессор Z-80. Кстати у BNC должна быть метка f1_loop, а не loc_A5A, иначе цикла не получается) Из дизассемблера кодик выдернули?)

Вижу цикл, который перебирает "опорный адрес" некий в регистре HL от FE03 до FE00, и относительно этого адреса производятся некие операции между ячейками.

Только одного не могу понять:

[FE00+idx] ТРИЖДЫ перезаписывается за одну итерацию цикла, сначала значением XOR между ячейками FE7C+idx и FE8С+idx. Затем тут же [FE00+idx] перетирается значением с ячейки FE80+idx, и далее [FE00+idx] снова перетирается значением ячейки FE8C+idx.

Может в этом и есть где то ошибка. Ведь в результате прохождения цикла только результат третьей операции остается, а остальные две тупо бесполезны, ибо затерты. Ощущение, что между этими тремя операциями с ячейками не хватает чего то.

Еще странноваты постоянные возвраты регистра H на значение FE... Как будто команды косвенного чтения ячеек сбивают содержимое H.... это странно... На мой взгляд они не нужны (приблуда компилятора? или хуже того, странности архитектуры проца?)

Ну и Вы кусок некой подпрограммы привели.... Если бы Вы разьяснили что конкретно этот код делает в предметной, понятной сознанию области, и откуда этот код, можно было бы конкретнее попытаться разобраться. А пока целевой задачи не видно, то и правильность кода оценить сложно.

P.S.

mov [hl+00h],a - должно всё адекватно работать. Проблема скорее всего в том, что оно трижды вызывается затирая предыдущий результат.

Edited by tcoder

Share this post


Link to post
Share on other sites

смахивает на процессор Z-80.

В Z80 практикуется LD, а не MOV.

За 78K0S не скажу, но судя по интеловскому:

func1:
mov A,#03h ; А = 03
f1_loop:
mov L,A ; L = 03
mov H,#0FEh ; H = FE
mov A,[HL+8Ch] ; A = [FE8F]
mov H,#0FEh ; H = FE Нахрена опять?
xor A,[HL+7Ch] ; А = A xor [FE7F]
mov H,#0FEh ; H = FE Опять!
mov [HL+00h],A ; [FE03] = то, что получили в предпредыдущей команде
mov H,#0FEh ; H = FE О мама, снова!
mov A,[HL+80h] ; A = [FE83]
mov H,#0FEh ; H = FE Маньяки
mov [HL+00h],A ; [FE03] = то, что получили в предпредыдущей команде
mov H,#0FEh ; уже не смешно
mov A,[HL+8Ch] ; A = [FE8F]
mov H,#0FEh ; плачу
mov [HL+00h],A ; [FE03] = то, что получили в предпредыдущей команде
mov A,L ; A = L
sub A,#01h ; A = A-1
bnc loc_A5A ; куда-то ускакали
pop BC ; вытащили из стека BC
ret ; наконец-то этот бред закончился

Edited by солар

Share this post


Link to post
Share on other sites
                     

Литиевые батарейки Fanso в беспроводных датчиках пожарно-охранной сигнализации

Выбор подходящего элемента питания, способного обеспечивать требуемый уровень напряжения и выдавать необходимый ток на протяжении всего периода эксплуатации беспроводной пожарно-охранной системы является одной из первостепенных задач. Наиболее подходящим для этих целей элементом являются литий-тионилхлоридные элементы питания, а одним из наиболее конкурентоспособных производителей – компания Fanso, предлагающая своим клиентам продукты как универсальные, так и разработанные специально для решения конкретных задач.

Подробнее...

В Z80 практикуется LD, а не MOV.

LD и MOV имеют совершенно одинаковый смысл, ежу понятно. Только этот процессор судя по всему может только по 8 бит через рег А загружать, в отличии от Z80, который может сразу 16 загрузить.

Я имел ввиду состав регистров и косвенную адресацию,сходные с Z-80: тот же A на 8 бит, и те же B C D E H L, которые могут управляться отдельно и использоваться в парах BC, DE, HL при необходимости косвенной адресации на 16 бит

куда то ускакали

Это автор наредактировал, там должен быть "ускок" на метку f1_loop, тогда алгоритм похож на цикл перебирающий адреса FE03 FE00 (если не заметили - L в каждой итерации уменьшается на 1, и следом с помощью BNC происходит переход на начало цикла до тех пор, пока не произойдет переполнения, т.е. в случае 0-1=255 - цикл выйдет на конец подпрограммы, начало которой походу не показано - не вижу PUSH BC :)

А всё остальное Вы за мной повторили - трижды перезаписывается один и тот же адрес за одну итерацию, и везде натыканы H=FE. :-)

Share this post


Link to post
Share on other sites

да из дизасма...исходники на си, это кусок скомпилированного кода...

С интеловским и Z80 сам знаком, вот потому и вопрос. по логике должно было менять байтики (и оно их меняет) а по коду на асме выходит что все скидывается в ячейки FE00..FE03, причем перетирая ранее записаное...потому и возник этот вопрос. может команды еще и рег. L модифицируют? т.е. непонятки как раз там где [HL+0]

P.S. Ошибки нет. программа работает. но вот разобраться с этим куском кода на асме не выходит. т.е. понять не могу что куда заносится при модификации. в исходном коде

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

Edited by EugenOS

Share this post


Link to post
Share on other sites

По идее всё что он делает в итоге, это переносит кусок в три байта с FE8C+idx на FE00+idx. Если это не так, значит поведение этих инструкций отличается от того, что мы привыкли видеть на Z80 и на интелах 8086+ (Кстати, чем вам Intel8080 не аналог Z80 ?). Особенно настораживают постоянные возвраты FE в регистр H. По идее они не нужны там, но зачем-то стоят. Без описания инструкций не разобраться.

P.S. Еще как вариант - неверный дизассемблированный код. Скажем по ошибке разрабов дизассемблера (или по их выпендрежности чрезмерной :)), ну или при неверном выборе проца для дисазма по случайности. Но это всё вряд ли.

Можно попытаться посмотреть непосредственно коды. Но опять же без описания особо не разобраться...

P.P.S Действительно, датащит найти или сложно или невозможно. Есть только один подозрительный сайт, который не работает))) Секретный контроллер)

Edited by tcoder

Share this post


Link to post
Share on other sites
мнемоника ассемблера смахивает на процессор Z-80.
Я имел ввиду состав регистров и косвенную адресацию,сходные с Z-80

Вам надо как-то с терминами определиться, дружище. :king:

Для ТС: а попробовать даташит почитать?

Share this post


Link to post
Share on other sites

Солар, а Вы попробовали датащит сами найти? Или у Вас времени только на придирки к словам хватает? Во всяком случае из моего текста автору вполне понятно, что я имею ввиду. Может быть в терминах Вы и разбираетесь, но даже не заметили невалидной метки у инструкции BNC (по вашему мнению она просто "куда то ускакали"), хотя там очевидно, куда она должна передать управление.

Вам советую определиться с тем, помогаете ли ТС или к моим словам придираетесь:)

Share this post


Link to post
Share on other sites

На счет метки мой косяк. метку переименовал, а в команде перехода нет.

Описание системы комманд есть...но там ничего отличного от работы таких комманд в других процах не видно. Может быть есть какие-то отличия связанные именно со смещением 00+HL или еще чего-то...но в доступных мне документах об этом ни слова. Потому и спрашиваю...может есть кто-то, кто работал, например с uPD78F9116

P.S. Документация по NEC это вообще долгая и трудная песня...особенно по дискаунтед представителям...

P.P.S. Если у вас есть ДШ по данным прцам поделитесь пожалуйста...то что у меня есть зачитано до дыр в мониторе, но не объясняет данного феномена. Что этим хотел сказать компилятор не понятно...

Edited by EugenOS

Share this post


Link to post
Share on other sites

Эх, отладчик был бы. Который показывает состояние всех регистров, флагов и дамп памяти и дает возможность пошагового выполнения инструкций. Там сразу бы всё прояснилось. Вы можете показать код, из которого это скомпилировано? Может чего и прояснится.

Share this post


Link to post
Share on other sites

Не могу. Не имею кода. Есть описание библиотеки, с заголовками функций. Есть ТЗ на программу. И есть несколько последних рабочих версий прошивки. Во всех этот участок такой же (ну только адреса разнятся)

Софтовый отладчик SM78K0S. Скачать не могу. Посылают пешим сексуальным маршрутом.

Edited by EugenOS

Share this post


Link to post
Share on other sites

Для информации. ИДА не корректно дизассемблирует некоторые инструкции контроллеров 78K0S.От туда и такие проблемы. вот например:

1)то что дала ИДА:

ROM:0E60 main:								 ; CODE XREF: ROM:loc_DDp
ROM:0E60				 call !hwInit
ROM:0E63				 call !swInit
ROM:0E66				 call !readState
ROM:0E69				 movw HL,#0FE0Ch
ROM:0E6C				 set1 off_0.0		 ; RESET

2) то что было в исходном коде:

; hwinit()
 0D83	 22D10D	 CALL hwinit				 ; (0x0DD1)
; swinit();
 0D86	 22560E	 CALL swinit				 ; (0x0E56)
; readEslState();
 0D89	 22F30F	 CALL readState		 ; (0x0FF3)
; uartFlags.uartWaitPilotTone = 1;
 0D8C	 FC0CFE	 MOVW HL, #uartFlags ; (0xFE0C)
 0D8F	 0A0E		 SET1 [HL].0

P.S. Взято с разных версий программы. но этот код там остался неизменным, просто адреса сместились...потому адреса в дизасме и лист файле разные.

Edited by EugenOS

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Так перезаряд ёмкости и (или) закрытие базы быстрее происходит, Ну на частотах выше 50-100 Кгц 'целостность 'этого резистора уменьшит вероятность сквозного тока Сделайте норм тепловой контакт транзюка тп и выходников и установите ток покоя 5-10 мА для саба достаточно
    • Автомат был со складным прикладом, скорее всего. Да дереву и перевариться проще, чем металлу, вообще-то
    • 100ВА отличаются от 70Вт ровно на кпд и косинус фи . Если не один обогреватель, то 100ВА могут превратиться в 40Вт. За счёт потерь "в железе" (см. "Преобразовательные трансформаторы") .   Т.е., нагруженному трансформатору сердечник может и не понадобиться? (не смешно). С уважением В.
    • А кто введет в курс дела, как влияют дроссели/индуктивности во вторичке? Сейчас массово в хай-енд сегменте наблюдаю дроссели во вторичке. Сервис мануалов нигде не могу найти, как реализовано и какие там номиналы?   Например musical fidelity m6:   Кстати обратите внимание как сделаны провода 220В, справа.
    • Уважаемый @zeconir , спасибо за инструкцию!  Для меня это очень актуально и важно.
    • Нахожусь в Калужской области. Силовые высоковольтные конденсаторы Itelcond 4700mk 350v  и   Facon  4700mk 350v Б.У. По показанием транзистор тестер емкость 4400-4800мк ESR 0.12-0.2 Om   Потеря 0.9V для гауса в самый раз.  1шт 350р от 5шт 300р в наличии около 150шт.  
    • А приклад уже переварился?
×
×
  • Create New...