Важная информация
RSS лента

Helbr

Z80-MBC2 отладка

Оценить эту запись
Удалось разобраться почему Z80-MBC2 не заработала на 8 МГц с моей прошивкой.
Дело в том что микроконтроллер не мгновенно выставляет данные на портах, и не мгновенно считывает.

Код:
        
    // В этом месте MCU предоставляет данные Z80
    PORTA = data;
    digitalWrite(WAIT_RES_, LOW);             // Отключаем WAIT
    while(!digitalRead(IORQ_)); // Здесь с задержкой определяется что цикл ввода-вывода закончен

    DDRA = 0x00;  // И здесь после дополнительной задержки переключаем порт на ввод
    PORTA = 0xFF;
    digitalWrite(WAIT_RES_, HIGH);
Из-за этих задержек код на шине данных держится слишком долго и мешает z80 читать следующую инструкцию из памяти.

Исправленный вариант
Код:
        
    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/
Метки: Нет Добавить / редактировать метки
Категории
Без категории

Комментарии

Трекбэков