Z80-MBC2 отладка
Удалось разобраться почему Z80-MBC2 не заработала на 8 МГц с моей прошивкой.
Дело в том что микроконтроллер не мгновенно выставляет данные на портах, и не мгновенно считывает.
Из-за этих задержек код на шине данных держится слишком долго и мешает z80 читать следующую инструкцию из памяти.Код:// В этом месте MCU предоставляет данные Z80 PORTA = data; digitalWrite(WAIT_RES_, LOW); // Отключаем WAIT while(!digitalRead(IORQ_)); // Здесь с задержкой определяется что цикл ввода-вывода закончен DDRA = 0x00; // И здесь после дополнительной задержки переключаем порт на ввод PORTA = 0xFF; digitalWrite(WAIT_RES_, HIGH);
Исправленный вариант
Протестировал этот код на всех частотах и ошибок не заметил. Конечно, желательно еще логическим анализатором или осциллографом потыкать.Код:cli(); unsigned char i = clockMode; // Переменная обратно пропорциональная частоте 0 - 8 МГц, 1 - 4МГц, 2 - 2.6 МГц, 3 - 2МГц digitalWrite(WAIT_RES_, LOW); // Now is safe reset WAIT while(i--) // set enough time to latch data { __asm("nop"); } DDRA = 0x00; // Configure Z80 data bus D0-D7 (PA0-PA7) as input with pull-up PORTA = 0xFF; digitalWrite(WAIT_RES_, HIGH); sei();
Но оно и так работает, может потом...
Если кто-то заинтересовался то код здесь: https://bitbucket.org/rudolff/ios-z80-mbc2/src/master/
Комментарии
Трекбэков
Всего трекбэков 0
Ссылка трекбэка: