Всё ж распиши какие выводы МК и ВВ55 соединены, чтоб не менять в последствии твою прошивку - переделаю схему и печатку.
Всё ж распиши какие выводы МК и ВВ55 соединены, чтоб не менять в последствии твою прошивку - переделаю схему и печатку.
Распишу чуть попозже.
Что то умирают у меня компьютеры.
Вчера вылетела 155ИЕ5 и пропало изображение. Перепаял.
Сегодня включаю, тестовое ПЗУ не выполняется. На экране стабильный мусор. Динамик молчит. На сброс нулевая реакция. Если вытащить и вставить ПЗУ на лету, то на экране что то происходит. Я даже увидел копирайт. ПЗУ исправно, обрывов нет, замыканий не нашел.
И второй компьютер так же перестал работать. Но там процессор больше не выдает SYNC и не шевелит шиной адреса. А процессор я запаял. Прошлая панелька работала, только если процессор прижать пальцем в нужном месте, ну я её и выпаял.
Последний раз редактировалось vinxru; 04.01.2013 в 22:53.
А как в монитор попасть?
На экране надпись "ЗАГРУЗКА?"
---------- Post added at 02:07 ---------- Previous post was at 01:46 ----------
Нашел в журнале
Кстати, а почему бы не эмулировать ВВ55 на атмеге? По моим расчётам должно получиться проще в плане преобразования протокола PS/2. Кроме того, можно и поддержку USB клавиатур сделать.
---------- Post added at 14:46 ---------- Previous post was at 14:45 ----------
Вставлять это всё дело в панельку вместо ВВ55...
Поддерживаю второе. А вот на счёт первого (эмулировать)... сложновато. Я пока приостановил работу над своим эмулятором, жду когда vinxru доведёт дело до конца.
Возможно скорости МК не хватит. Тогда я буду тормозить процессор сигналом RDY. А это еще один провод, которого нет.
И тормозить то не хочется, так как через эту же микросхему сделан вывод звука, записи на магнитофон и цвета.
---------- Post added at 14:14 ---------- Previous post was at 14:10 ----------
ИМХО сложнее. И надо будет вторгаться в схему компьютера. А сейчас схема компьютера неизменна
---------- Post added at 15:38 ---------- Previous post was at 14:14 ----------
Переписал обработчик прерывания на ассемблере. Пока результат такой:
- На тестовой ПЗУ всё работает.
- На стандартной ПЗУ (мониторе, самом первом) хрен знает.
Если нажать одну из верхних кнопок F, HELP ... NF по появляется курсор. Но курсор не мигает. Мигать курсор начинает, только когда отпускаешь клавишу. Дальше от нажатий клавиш ничего не зависит.
---------- Post added at 15:41 ---------- Previous post was at 15:38 ----------
Суть обработчика прерывания такая
Код:Если порт С на выход, то выполняем PORTC = b2c[PINB] & d2c[PIND & 0x33]; иначе выполняем PORTB = c2b[PINC]; PORTD = c2d[PINC] & (PORTD | 0x33); Плюс, меняем режим, если на порте выбранном для чтения одни единицы.Может быть МК не успевает. А может быть я ошибся где то.Код:interrupt [EXT_INT0] void ext_int0() { #asm .EQU DDRC=0x14 .EQU DDRB=0x17 .EQU DDRD=0x11 .EQU PORTB=0x18 .EQU PORTC=0x15 .EQU PORTD=0x12 ; Сохраняем флаги IN R28, 0x3F ; 1 SREG PUSH R28 ; 2 ; Если DDRC в режиме записи, то переходим ниже IN R28, DDRC ; 1 CPI R28, 0 ; 1 BRNE _v2 ; 2 ; *** ВАРИАНТ 1 *** ; PORTB = c2b[(unsigned char)PINC]; IN R28, 0x13 ; 1 PINC CPI R28, 0x3F ; 1 BREQ _v12 ; 2 LDI R29, 2 ; 1 LD R28, Y ; 2 OUT 0x18, R28 ; 1 PORTB ; PORTD = (PORTD | 0x33) & c2d[(unsigned char)PINC]; IN R28, 0x13 ; 1 PINC SUBI R28, -64 ; 1 LD R28, Y ; 2 IN R29, 0x12 ; 1 PORTD ORI R29, 0x33 ; 1 AND R29, R28 ; 1 OUT 0x12, R29 ; 1 PORTD ; Выход POP R28 OUT 0x3F, R28 ; SREG RETI ; *** ВАРИАНТ 1.2 *** _v12: ; Переводим порты B,D в режим чтения ; Переводим порт C в режим записи CLR R28 OUT DDRB, R28 SER R28 OUT PORTB, R28 OUT DDRC, R28 IN R28, DDRD ANDI R28, ~0x33 OUT DDRD, R28 IN R28, PORTD ORI R28, 0x33 OUT PORTD, R28 ; PORTC = b2c[PINB] & d2c[PIND & 0x33]; IN R28, 0x16 ; 1 PINB LDI R29, 1 ; 1 LD R28, Y ; 2 OUT 0x15, R28 ; 1 PORTC IN R28, 0x10 ; 1 PIND ANDI R28, 0x33 ; 1 LDI R29, 2 ; 1 SUBI R28, -128 ; 1 LD R28, Y ; 2 IN R29, 0x15 ; 1 PORTC AND R28, R29 ; 1 OUT 0x15, R28 ; 1 PORTC ; Выход POP R28 OUT 0x3F, R28 ; SREG RETI ; *** ВАРИАНТ 2 *** _v2: ; PORTC = b2c[PINB] & d2c[PIND & 0x33]; IN R28, 0x16 ; 1 PINB LDI R29, 1 ; 1 LD R28, Y ; 2 OUT 0x15, R28 ; 1 PORTC IN R28, 0x10 ; 1 PIND ANDI R28, 0x33 ; 1 CPI R28, 0x33 ; 1 BREQ _v21_x ; 2 LDI R29, 2 ; 1 SUBI R28, -128 ; 1 LD R28, Y ; 2 IN R29, 0x15 ; 1 PORTC AND R28, R29 ; 1 OUT 0x15, R28 ; 1 PORTC _v21_q: POP R28 OUT 0x3F, R28 ; SREG RETI ; Дополнителная проверка _v21_x: IN R28, 0x16 ; 1 PINB CPI R28, 0xFF ; 1 BRNE _v21_q ; 2 ; *** ВАРИАНТ 2.1 *** ; Переводим порт C в режим чтения ; Переводим порты B,D в режим записи CLR R28 OUT DDRC, R28 SER R28 OUT PORTC, R28 OUT DDRB, R28 IN R28, DDRD ORI R28, 0x33 OUT DDRD, R28 ; PORTB = c2b[(unsigned char)PINC]; IN R28, 0x13 ; 1 PINC LDI R29, 2 ; 1 LD R28, Y ; 2 OUT 0x18,R28 ; 1 PORTB ; PORTD = (PORTD | 0x33) & c2d[(unsigned char)PINC]; IN R28, 0x13 ; 1 PINC SUBI R28, -64 ; 1 LD R28, Y ; 2 IN R29, 0x12 ; 1 PORTD ORI R29, 0x33 ; 1 AND R29, R28 ; 1 OUT 0x12, R29 ; 1 PORTD ; Выход POP R28 OUT 0x3F, R28 ; SREG #endasm }
Последний раз редактировалось vinxru; 05.01.2013 в 16:45.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Внес несущественные поправки в обработчик прерывания. Стало чуть надежнее и быстрее. Константы на PINB заменил. Но все равно в монитор войти не удалось.
Получилось 25-50 тактов на частоте 8 Мгц. Это примерно 3-6 тактов центрального процессора. Я посмотрел ПЗУ монитора, этого времени должно хватить. Там между записью и чтением выполняется команда RET размеров в 10 тактов.
Я подумал, а ведь можно замкнуть куском провода ножки ВВ55, и тем самым получить нажатие Enter. Ну а дальше в мониторе остальные кнопки понажимать, вдруг что то работает.
Но хрен там. Замыкаю 4-ый и 20-ый контакт. И ничего.
Думаю, а попробую ка я нажать СТОП. Замыкаю 39-ую и 25-ую ноги. И ничего.
С PS/2 клавиатуры СТОП нажимается, а простым замыканием нет.
Пробовал даже отключать обработчик прерывания в МК. Тогда МК работает как набор резисторов.
Сижу в непонятках.
---------- Post added at 23:55 ---------- Previous post was at 23:54 ----------
Еще вопрос. Я впаял КР580ИК55, а надо было КР580ВВ55А
Я знаю, что у этих микросхем есть небольшие отличия в работе. При чтении из порта настроенного на вывод, в ИК55 будет прочитано FF, вместо записанного значения (вроде бы).
Может еще в этом проблема?
---------- Post added 06.01.2013 at 00:54 ---------- Previous post was 05.01.2013 at 23:55 ----------
Короче, не нажимается Enter, потому что компьютер не работает.
Теперь компьютер при нажатии на Enter стал выводить вот такое
---------- Post added at 01:32 ---------- Previous post was at 00:54 ----------
Решил проверить ПЗУ. ПЗУ исправно.
Последний раз редактировалось vinxru; 07.01.2013 в 12:32.
Стесняюсь спросить: а ты вообще-то резисторы подтягивающие все выводы клавиатуры к питанию поставил?
Вот нашёл цанговую панель на 40 контактов. Прекрасно она впишется в новую плату. С верху вставляем саму ВВ55, снизу штыри вставляем в основную плату вместо ВВ55. На нашей платке всё разводим как нам нужно. Жаль что войдёт только Atmega8 в узком 28 контактном корпусе (нет больше лишних выводов - нам ещё архиважно сброс вывести), её мы расположим внутри 40 контактной панельки.
Последний раз редактировалось fifan; 06.01.2013 в 10:02.
А монитор точно есть?
Может у тебя ПЗУ только C000-C7FF? По Enter загрузчик просто переходит на 0C800h, иначе начинает читать с магнитофона заново.
---------- Post added at 17:25 ---------- Previous post was at 17:21 ----------
Тоже интересно, сбрасывается ли в ноль порт у ИК55, если его настроить на вывод. Может и нет...
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)