EugenOS

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

15 сообщений в этой теме

EugenOS    1

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

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

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]. Кто нибудь занимался этими процессорами. Подскажите как оно на самом деле работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
EugenOS    1

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

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

Изменено пользователем EugenOS
  • Не одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
EugenOS    1

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
tcoder    276

Лично с таким процессором не знаком, но мнемоника ассемблера смахивает на процессор 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 - должно всё адекватно работать. Проблема скорее всего в том, что оно трижды вызывается затирая предыдущий результат.

Изменено пользователем tcoder

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
солар    116

смахивает на процессор 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 ; наконец-то этот бред закончился

Изменено пользователем солар

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
tcoder    276
В 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. :-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
EugenOS    1

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

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

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

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

Изменено пользователем EugenOS

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
tcoder    276

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

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

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

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

Изменено пользователем tcoder

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
солар    116
мнемоника ассемблера смахивает на процессор Z-80.
Я имел ввиду состав регистров и косвенную адресацию,сходные с Z-80

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
tcoder    276

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
EugenOS    1

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

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

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

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

Изменено пользователем EugenOS

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
tcoder    276

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
EugenOS    1

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

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

Изменено пользователем EugenOS

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
EugenOS    1

Для информации. ИДА не корректно дизассемблирует некоторые инструкции контроллеров 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. Взято с разных версий программы. но этот код там остался неизменным, просто адреса сместились...потому адреса в дизасме и лист файле разные.

Изменено пользователем EugenOS

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас