ага IDA Pro
ага IDA Pro
Доработал прошивку, добавил обработку esc-последовательности перемещающую курсор. Теперь Тетрис от ЮТ-88 (и ряд других программ) запускается.
Я разобрался с системными переменными. Там оказалось 6 байт неиспользуемого пространства. А мне как раз был нужен один байт для обработки esc-последовательностей. (Да и несколько переменных можно было использовать без последствий в собственных целях.)
Патч вотКод:org 0F7C0h defCursorAddr: ds 2 ; Адрес курсора по умолчанию loadErrorPtr: ds 2 ; Указатель на loadError. Запускается в случае ошибки загрузки программы с магнитофона. vinxru_nocursor:ds 1 ; ПАТЧ. Отключение отбражения курсора, если FF vinxru_escFlag: ds 1 ; ПАТЧ. Обработка esc-последовательности устаналивающей положение курсора tapeFormat: ds 1 ; Формат записи на магнитофон: 0-собственный, FF-РК86 (Изменяется директивой УС+S) unknown_3: ds 1 ; Инициализируется значением 3 и не используется forCmdO: ds 1 ; Длина имени введенная в директиве O (используется только директивой O) charAtCursor: ds 1 ; Символ находящийся под курсором cursorAddr: ds 2 ; Адрес курсора в видеопамяти outputTapeDely: ds 1 ; Скорость записи на магнитофон inputTapeDelay: ds 1 ; Скорость загрузки с магнитофона forInputTape: ds 1 ; Используется только функцией загрузки с магнитофона. Содержит 0 или FF cmdLineLastChr: ds 2 ; Функция inputString заносит сюда адрес последнего символа в строке lastJmp: ds 2 ; Используется только директивой J. Она заносит сюда первый аргумент, если агрумент не указан, то использует это значение. ds 4 ; НЕ ИСПОЛЬЗУЕТСЯ forDirL: ds 2 ; Используется только директивой L. Она заносит сюда первый аргумент, если агрумент не указан, то использует это значение. cmd_param3: ds 2 ; 1 параметр (Заполняется фунукуией parseParams и директивой I) cmd_param2: ds 2 ; 2 параметр cmd_param1: ds 2 ; 3 параметр cmdLine: ds 32 ; Командная строка 32 байта.
И целиком исходники, компилятор, скомпилированная прошивка во вложении.Код:vinxru_esc: ; Переход в зависимости от ESC ld a, (vinxru_escFlag) dec a ld a, c jp m, esc_step0 jp z, esc_step1 jp po, esc_step2 esc_step3: ; Шаг 3 sbc a, 20h ld e, a xor a ld d, a add hl, de ; Выход esc_ret0: xor a jp esc_ret4 ;---------------------------------------------------------------------------- esc_step0: ; Шаг 0 cp 1Bh jp nz, esc_none ld a, 1 jp esc_ret4 ;---------------------------------------------------------------------------- esc_none: cp 1Fh ; удаленный оригинальный код jp z, clearScreen ; удаленный оригинальный код jp putChar_er ; переход на оригинальный код ;---------------------------------------------------------------------------- esc_step1: ; Шаг 1 cp 59h ; 'Y' jp nz, esc_ret0 ld a, 2 jp esc_ret4 ;---------------------------------------------------------------------------- esc_step2: ; Шаг 2 and 1Fh ld l, a ; h-будет обрезано ниже add hl, hl add hl, hl add hl, hl add hl, hl add hl, hl add hl, hl ld a, 4 ; --------------------------------------------------------------------------- esc_ret4: ld (vinxru_escFlag), a ; На всякий случай. Если изменить положение курсора в ; середине esc-последовательности, то будет баг. ld a, h and 07h or (VIDEO_MEM>>8)&~7 ld h, a ; *** jp saveCursorAddr
Надо бы еще добавить все стандартные точки входа РК86. Все необходимые функции в прошивке присутствуют, только нет точек входа.
И еще сделать отключение курсора, а то он в играх закрывает изображение.
Последний раз редактировалось vinxru; 30.04.2012 в 01:14.
2 ИСПРАВЛЕНИЕ ОШИБКИ
Еще одна ошибка, из за которой визуально-некорректно работает удаление в консоли. Вместо перемещения курсора влево (код 8), в консоль выводилась псевдографика (код 3)
ROM:F919 ld a, 3
заменил на
ROM:F919 ld a, 8
3 ДОРАБОТКА ДЛЯ СОВМЕСТИМОСТИ С ПРОГРАММАМИ РК86
Директива X отключает и включает отображение курсора. (Например, игра Бармен со включенным курсором не запустится вообще).
---------- Post added at 15:22 ---------- Previous post was at 15:05 ----------
Бармен запустился Вот этой последовательностью команд:
УС+T <- Включает режим записи на магнитофон РК-86
УС+R <- Включает режим очистки экрана РК-86
X <- Отключает курсор
R <- Загружает с автоопределением скорости.
Выложил прошивку.
Последний раз редактировалось vinxru; 30.04.2012 в 14:35.
4 Функция вывода символа (F809) портит регистр A. Например, из за этого не работал Пекмен.
5 Расширил точки входа. Функция инициализации перенесена в конец ПЗУ (на её месте теперь точки входа). Изменена одна команда в стандартной функции сканирования клавиатуры для того, что бы сделать сканирование без ожидания (F81B).
Функция загрузки с магнитофона (F824) возвращает расчетный CRC, а не считанный с ленты. Вообще поведение функций загрузки (F824) и сохранения (F827) будeт сильно отличаться от РК86.
Остальные точки входа работают стандартно.
Последний раз редактировалось vinxru; 30.04.2012 в 01:16.
6 Теперь компьютер пищит при выводе в консоль символа с кодом 7. Место в прошивке кончилось, поэтому пришлось пожертвовать функцией F824 загрузка программы с магнитофона. Её никто все равно не использует.
7 При очистке экрана курсор теперь устанавливается в верхний левый угол.
Прошивку выложил.
Игр на ней работает уже много. CHESS2.RKR, CIRCUS.RKR, KALAH.RKR, KRESTNO.RKR, RENDZU.RKR, REVERSI2.RKR, RIKOSHET.RKR, SP_GAMES.RKR, TETRIS1.RKR, TETRIS4.RKR... дальше пока не смотрел.
Основная проблема - это высота экрана в 32 символа. Многие игры очищают экран 25-ю переводами строк и верхние 5 строк при этом не очищаются.
---------- Post added at 00:57 ---------- Previous post was at 00:36 ----------
И да. Клавиши ЗБ (аналог Backspace) у этого компьютера нет. Вместо ЗБ там стоит клавиша подчеркивания. А функцию удаления выполняет стрелка влево, она возвращает код 8.
И для сравнения, эта клавиша _ реагирует на шифт и контрол. А клавиши управления курсором, ввод, пробел не реагируют.
Последний раз редактировалось vinxru; 02.05.2012 в 11:01.
Спаял плату. Не хватает только ерунды (двух разъемов, нескольких конденсаторов, резисторов, диодов, переменника и КТ315).
Разъемы:
1) 2 контакта - Сброс
2) 2 контакта - Выход звука
3) 2 контакта - Выход видео
4) 34 контакта - Клавиатура + магнитофон + неиспользуемые 4 бита порта ВВ55 под расширение
5) 40 контактов - Системная шина
6) 4 контакта - Питание
Последний раз редактировалось vinxru; 02.05.2012 в 11:05.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Воткнул кварц на 16 Мгц (пиксель клок 8 Мгц), получившийся видеосигнал распознался монитором. Точно измерить частоту строк не могу, так как в синхросигнале почему то находится символ-клок. Из за этого и полосы на мониторе. Возможно коротыш.
Причем, сначала полосы были черные на белом фоне. А потом стали белые на черном фоне.
Последний раз редактировалось vinxru; 03.05.2012 в 01:26.
3 забытых соединения в схеме. 15 оборванных дорожек. 1 ошибка в ПЗУ.
Никогда в жизни больше не буду делать такие тонкие дорожки и двухстороннюю подпайку деталей - это гемороище. Лучше на две платы раскину компьютер.
Судя по тому, что к D4 подключена логическая единица, ширина символа 7 пикселей.
Так как сдвиг регистра происходит с фиксированной частотой 8 Мгц. Он не может быстрее сдвигаться никак. Первый такт на выходе лог. единица, второй такт из ПЗУ и т.д. Следовательно, что бы увидеть символ целиком, должно быть 7 тактов на символ.
Но счетчик считает только до 6. На схеме не использован вывод счетчика D2, что бы организовать сравнение с семью. И вообще, элементов не хватает.
Или подбирать конденсатор с точностью до пикофарада, что бы организовать деление на 7 (что крайне извращенно), либо в схеме ошибка.
по "оригинальной схеме" вообще не сильно понятно откуда берутся сигналы 8,9,10
.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)