С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
пообщался с многоуважаемым Vinxru. Поведал мне автор о секретах, например об обязательном контроле адреса массива rom (по файлу .map) с тем, что прописано в asm-секции. У меня почему-то смещение 0x300, посему .EQU ROM должно быть 3 вместо 1. Либо надо было крутить размер стека таким образом, чтобы переменная rom начала находиться по адресу 0x100.
После этих манипуляций эмуляция ПЗУ завелась! Ура
Но данные не совсем соотетствуют тому, что находится в файле boot.rk.
В файле: 0E 00 CD 69 00 C3 17 00
Я получаю: 0E 00 8D 79 00 83 07 00
Уже курил на тему подтяжки MISO, длины шлейфа, допаял на карточку дополнительный конденсатор, понизил скорость SPI - ничего не помогает.
При этом если запускать несколько раз R0,100, потом смотреть D0,100 - данные с одними и теми же ошибками. Посему можно сделать вывод, что при чтении с карточки они попадают во внутренний буфер уже поломанными.
Или загружаются с порта поломанными. Раскурите функцию R монитора, пересмотрите тайминги контроллера в режиме эмуляции ПЗУ. Если бы карта считывалась битой, FAT бы точно не инициализировался.
Если есть сомнения в скорости выдачи контроллером данных для ВВ55, то можно воспользоваться директивой М Монитора. Например так
И т.д.Код:-->MA001 A001 FF 00 A002 FF 00 A003 FF. -->MA000 A000 0E A001 00. -->
Медленно, но уверено.![]()
Спасибо! Бага явно где-то в скорости выдачи контроллером данных для ВВ55.
Ибо данные плавают:
-->MA000
A000 0E
A001 08 .
-->MA000
A000 03
A001 08 .
-->MA000
A000 0E
A001 88 .
и тп. в старших битах данных происходит какая-то ерунда, каждый раз новые данные.
Куда уже оптимизировать ассемблерные вставки в коде контроллера - не представляю
Дождусь Atmega8 и попробую на нем собрать и оригинальной прошивке Vinxru, надеюсь это поможет![]()
Такскажется нашел беду. Это шлейф. при чем оба глючат в одном и том же месте - на пинах данных D3-D6, тестер показывает КЗ между собой.
---------- Post added at 15:11 ---------- Previous post was at 13:25 ----------
Ура! Заработало
---------- Post added at 15:13 ---------- Previous post was at 15:11 ----------
Вывод такой: не доверяйте китайским плоским кабелям! В моем случае была лажа в том, что шлейф был на самом-деле 27-контактный, но они все чудом поместились 26-контактный в IDC-разъем))
---------- Post added at 15:27 ---------- Previous post was at 15:13 ----------
Коммандер работает. Но с курсором и клавишей ESC не очень дружит. Да и функциональные клавиши как-то не так работают.
Хотелось бы у студии узнать, на что заменить данные значения констант:
#define KEY_F1 0
#define KEY_F2 1
#define KEY_F3 2
#define KEY_F4 3
#define KEY_LEFT 8
#define KEY_TAB 9
#define KEY_ENTER 13
#define KEY_ESC 27
#define KEY_RIGHT 0x18
#define KEY_UP 0x19
#define KEY_DOWN 0x1A
#define KEY_STR 0x1F
#define KEY_SPACE 0x20
#define KEY_BKSPC 0x7F
Vinxru посоветовал поменять их на правильные значения для RK86 и пересобрать shell.rk.
---------- Post added at 16:08 ---------- Previous post was at 15:27 ----------
Vinxru сделал отдельную прогу keytest.rk (http://rghost.ru/58990926, которая показывает коды нажатых клавиш, с помощью функции биоса getch().
Так вот, нажатие на кнопки курсора выводит коды вверх: 38, вниз: 32, влево: 34, вправо: 36, что соответствует нажатиям клавиш 8,2,4,6.
Что с этим делать - пока непонятно.
От автора поступило предложение назначить кнопки курсора на альтернативные клавиши Q,A,O,P:
#define KEY_LEFT 'O'
#define KEY_RIGHT 'P'
#define KEY_UP 'Q'
#define KEY_DOWN 'A'
---------- Post added at 16:08 ---------- Previous post was at 16:08 ----------
Ну и параллельно изучить прошивку адаптера PS/2 клавиатуры, что это он такое отдает![]()
Ура! Получилось пересобрать shell.rk! Теперь навигация с помощью Q/A/O/P.
Там, кстати, кому интересно - github портит концы строк у исходников, делает \n вместо \r\n, посему компилятор c8080 ничего не понимает.
Хотфикс данной проблемы:
find . -name "*.[c|h|inc|asm]" -type f -exec perl -pi -e 's/\n/\r\n/;' {} \;
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)