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...

  • Сообщения

    • В одном ИИП попадался вообще полный минимализм. Термистор NTC на 50 Ом, включенный последовательно вентилятору. Сам термистор прижат к радиатору выпрямительных диодов. Работает.
    • Этот загадочный параметр - производительность вентилятора по объёму перекачиваемого воздуха, помноженная на создаваемое им разряжение. Неэлектрическая величина. К потребляемой от сети электрической мощности имеет весьма опосредованное отношение, примерно как зависимость грузоподъемности автомобиля от мощности двигателя.
    • Падает 8,5 Вольт при R44 5КОм При R44 200КОм падает 2,6В, При этом на выходе +16,3 Вольт В моем случае 0,18В, 0,79В, 1,4В при R44 5КОм При R44 200КОм - 0,14В, 0,73В, 1,35В. При этом на выходе +16,3 Вольт   Скорее всего. Был вечер и сетевое напряжение сильно гуляло.   Вы имели ввиду R18? На R17 у меня падает 0,82В при R44 5КОм При R44 200КОм все те же 0,8В. При этом на выходе +16,3 Вольт     А со вторым каналом что посоветуете делать, тоже менять или оставить как есть.
    • Автомобильные ланзароподобные видны сразу с полпинка Парень,который привез этот сабвуфер вчера,пояснил что электрики чего то там баловались с подключением и в итоге саб *упал на колени* Я спросил так может предохранитель помер и все? На что он грустно ответил типа я то себя знаю и предохранителем мол никогда в жизни не обходились))) Вам придется его делать. Смех и только. Ну чего,бум ваять
    • А детишки там на кой по садику слоняются?
    • Думаю на фильтрах, шланге и щётках оставляет. Все они такие, те что бытовые. Жрать киловатты горазды, а вот пыль и другой мусор затягивать, не особо. Я когда этот пылесос лет 5 назад выбирал, то проверил штук 6 разных, единственное в чем ступил, не узнал стоимость расходки)) А так, по эффективности уборки и цене, был лучшим вариантом. У меня у родителей есть пылесос витек, у него потребляемая заявляется под 2 квт, а эффективная, в районе 400вт с копейками. В сравнении с моим, он действительно кажется раза в 2 хуже собирает мусор.
    • 15 Вольт как раз и равняется напряжению полностью заряженной 12 Вольтовой батареи (10 банок по 1,5 Вольта). Т.е. батарея заряжается нормально. Цель какая замеров напряжения? Ну а то, что скачет на холостом ходу и при полном заряде - так это зависит от алгоритма заряда батареи, заложенного производителем, который нам неведом.
×
×
  • Create New...