Подскажите пож-та, если можете. Я делаю прыжок в месте, где выполняются 16битные команды, на ram-адрес 08800000, что соответствует концу рома, процессор сам при этом меняет режим и начинает исполнять команды в 32 битном режиме, далее делаю возврат, и он не переключается обратно на 16битный режим. 5 дней уже пытаюсь сделать. Вот лог процессора, в который я добавил комментарии:
Собираю адрес в регистре r1 и делаю прыжок
080754FA 2188 mov r1, #0x88 R00=00000014 R01=0000001a R02=0000000f R03=0807c8b4 R04=0807c938 R05=00000015 R06=fffffdac R07=00000000 R08=03000e30 R09=030005cc R10=00000100 R11=000001ff R12=00000000 R13=03007e9c R14=08074885 R15=080754fc
080754FC 0509 lsl r1, r1, #0x14 R00=00000014 R01=00000088 R02=0000000f R03=0807c8b4 R04=0807c938 R05=00000015 R06=fffffdac R07=00000000 R08=03000e30 R09=030005cc R10=00000100 R11=000001ff R12=00000000 R13=03007e9c R14=08074885 R15=080754fe
080754FE 4708 bx r1 R00=00000014 R01=08800000 R02=0000000f R03=0807c8b4 R04=0807c938 R05=00000015 R06=fffffdac R07=00000000 R08=03000e30 R09=030005cc R10=00000100 R11=000001ff R12=00000000 R13=03007e9c R14=08074885 R15=08075500
Восстанавливаю старые команды, которые я затёр прыжком, но уже в 32битном режиме
08800000 e0900004 adds r0, r0, r4 R00=00000014 R01=08800000 R02=0000000f R03=0807c8b4 R04=0807c938 R05=00000015 R06=fffffdac R07=00000000 R08=03000e30 R09=030005cc R10=00000100 R11=000001ff R12=00000000 R13=03007e9c R14=08074885 R15=08800004
08800004 e3a02000 mov r2, #0x0 R00=0807c94c R01=08800000 R02=0000000f R03=0807c8b4 R04=0807c938 R05=00000015 R06=fffffdac R07=00000000 R08=03000e30 R09=030005cc R10=00000100 R11=000001ff R12=00000000 R13=03007e9c R14=08074885 R15=08800008
08800008 e19000f2 ldrsh r0, [r0, r2] R00=0807c94c R01=08800000 R02=00000000 R03=0807c8b4 R04=0807c938 R05=00000015 R06=fffffdac R07=00000000 R08=03000e30 R09=030005cc R10=00000100 R11=000001ff R12=00000000 R13=03007e9c R14=08074885 R15=0880000c
Собираю адрес в регистре, чтобы прыгнуть на него, т.е. вернуться обратно
0880000C e3a01008 mov r1, #0x8 R00=fffffb9b R01=08800000 R02=00000000 R03=0807c8b4 R04=0807c938 R05=00000015 R06=fffffdac R07=00000000 R08=03000e30 R09=030005cc R10=00000100 R11=000001ff R12=00000000 R13=03007e9c R14=08074885 R15=08800010
08800010 e1b01601 movs r1, r1, lsl #0x0c R00=fffffb9b R01=00000008 R02=00000000 R03=0807c8b4 R04=0807c938 R05=00000015 R06=fffffdac R07=00000000 R08=03000e30 R09=030005cc R10=00000100 R11=000001ff R12=00000000 R13=03007e9c R14=08074885 R15=08800014
08800014 e2811075 add r1, r1, #0x75 R00=fffffb9b R01=00008000 R02=00000000 R03=0807c8b4 R04=0807c938 R05=00000015 R06=fffffdac R07=00000000 R08=03000e30 R09=030005cc R10=00000100 R11=000001ff R12=00000000 R13=03007e9c R14=08074885 R15=08800018
08800018 e1b01201 movs r1, r1, lsl #0x04 R00=fffffb9b R01=00008075 R02=00000000 R03=0807c8b4 R04=0807c938 R05=00000015 R06=fffffdac R07=00000000 R08=03000e30 R09=030005cc R10=00000100 R11=000001ff R12=00000000 R13=03007e9c R14=08074885 R15=0880001c
0880001C e2811005 add r1, r1, #0x5 R00=fffffb9b R01=00080750 R02=00000000 R03=0807c8b4 R04=0807c938 R05=00000015 R06=fffffdac R07=00000000 R08=03000e30 R09=030005cc R10=00000100 R11=000001ff R12=00000000 R13=03007e9c R14=08074885 R15=08800020
08800020 e1b01401 movs r1, r1, lsl #0x08 R00=fffffb9b R01=00080755 R02=00000000 R03=0807c8b4 R04=0807c938 R05=00000015 R06=fffffdac R07=00000000 R08=03000e30 R09=030005cc R10=00000100 R11=000001ff R12=00000000 R13=03007e9c R14=08074885 R15=08800024
Прыгаю на адрес
08800024 e12fff11 bx r1 R00=fffffb9b R01=08075500 R02=00000000 R03=0807c8b4 R04=0807c938 R05=00000015 R06=fffffdac R07=00000000 R08=03000e30 R09=030005cc R10=00000100 R11=000001ff R12=00000000 R13=03007e9c R14=08074885 R15=08800028
И тут процессор не переключается обратно на 16битный режим, а начинает выполнять 16битные команды в 32битном режиме, и игра поэтому виснет
08075500 41081109 tstmi r8, r9, lsl #0x02 R00=fffffb9b R01=08075500 R02=00000000 R03=0807c8b4 R04=0807c938 R05=00000015 R06=fffffdac R07=00000000 R08=03000e30 R09=030005cc R10=00000100 R11=000001ff R12=00000000 R13=03007e9c R14=08074885 R15=08075504В документации написано, что режимы меняются командой bx.
Прилагаю оригинальный ром, и ром с моими изменениями который виснет, с которого писал логи
https://disk.yandex.ru/d/jb2-imm6xOzobw