User Tag List

Показано с 1 по 10 из 190

Тема: Новый старый квазидиск

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    06.02.2018
    Адрес
    г. Волгоград
    Сообщений
    1,065
    Спасибо Благодарностей отдано 
    582
    Спасибо Благодарностей получено 
    471
    Поблагодарили
    253 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Отключение BLK_INT от Д2 дало определённо положительный эффект: теперь тест "Дождь" даже при продолжительном тестировании не показывает ошибок, "Тест квазидиска" тоже, но "жёлтый" тест КД бракует все микросхемы, да и ещё стандартный "Тест устройств" случайным образом бракует чипы. Также MDOS 2.0 грузится и по "8" не показывает ошибок... но глючит на записи в КД.

    Значит, исправляем схему в соответствии с последней доработкой:


    Новая схема и разводка в архиве (гербер не делал): kd_sram11_1.7z

    И продолжаем тестировать:

    TestKDst

    Очистка всего КД и заполнение значением 0AA55h в режиме "стек" с последующим контролем и подсчётом ошибок
    Код:
            .ORG    00100h
    L_0100: LXI  D, L_DATA
            PUSH D          ; сохраняем в стеке ссылку
    L_MAIN: POP  D          ; считываем ссылку
            LDAX D          ; загружаем A по ссылке
            ORA  A
            JZ   L_DONE     ; переход, если там ноль ---->>>>
            INX  D          ; DE=DE+1
            PUSH D          ; сохраняем в стеке новую ссылку
            DI              ; запрещаем прерывания
            OUT     010h    ; отправляем в порт
            LXI  H, 0000h   ; заполнение памяти
            DAD  SP         ; SP+0 в HL
            SHLD    L_SAVE  ; сохранить указатель на стек
            LXI  D, 0FFFFh  ; чем заполнять -- предварительная очистка памяти
            LXI  H, 8000h   ; сколько/2
            LXI  SP,0000h   ; свой указатель на стек
    L_LP0:  PUSH D          ; заполняем через стек...
            DCX  H
            MOV  A, L
            ORA  H
            JNZ     L_LP0   ; зациклено
            LXI  D, 0AA55h  ; чем заполнять
            LXI  H, 8000h   ; сколько/2
            LXI  SP,0000h   ; свой указатель на стек
    L_LP1:  PUSH D          ; заполняем через стек...
            DCX  H
            MOV  A, L
            ORA  H
            JNZ     L_LP1   ; зациклено
            LXI  H, 8000h   ; сколько/2
    L_LP2:  POP  B          ; вычитываем и проверяем записанное
            MOV  A, B
            CMP  D          ; если старший байт прочитанного не равен записанному
            JNZ     L_ERROR ; обработка ошибки
            MOV  A, C
            CMP  E          ; если младший байт прочитанного не равен записанному
            JNZ     L_ERROR ; обработка ошибки
    L_RET:  DCX  H
            MOV  A, L
            ORA  H
            JNZ     L_LP2   ; зациклено
            XRA  A          ; обнуляем аккумулятор
            OUT     010h    ; отправляем в порт -- отключаем КД
            LHLD    L_SAVE  ; считать сохранённый указатель на стек в HL
            SPHL            ; восстанавливаем SP
            EI              ; разрешаем прерывания
            LXI  D, L_TEXT2 ; вывод количества найденных ошибок
            MVI  C, 009h
            CALL 5          ; вывод сообщения
            LHLD    L_ERRS  ; считываем количество
            CALL    L_BHEX  ; выводим H в шестнадцатиричном виде
            MOV  H, L
            CALL    L_BHEX  ; выводим L в шестнадцатиричном виде
            LXI  H, 00000h
            SHLD    L_ERRS  ; обнуляем счётчик ошибок
            JMP     L_MAIN
    ;
    L_ERROR:SHLD    L_SAVE2 ; сохранить счётчик
            LHLD    L_ERRS  ; считываем количество ошибок
            INX  H
            SHLD    L_ERRS  ; количество ошибок +1
            LHLD    L_SAVE2 ; восстановить счётчик
            JMP L_RET       ; возврат в цикл
    ;
    L_DONE: LXI  D, L_TEXT
            MVI  C, 009h
            CALL 5          ; вывод сообщения
            RET             ; выход из программы
    ;
    L_BHEX: MOV  A, H       ; H-входное значение для вывода
            RRC
            RRC
            RRC
            RRC             ; сдвиг вправо на 4 бита
            CALL    L_BIT   ; выводим старшие 4 бита
            MOV  A, H       ; восстанавливаем значение
    L_BIT:  ANI     00Fh    ; оставляем младшие 4 бита
            CPI     00Ah
            JM      L_B10   ; если меньше 10
            ADI     007h    ; +7
    L_B10:  ADI     030h    ; +30h
            MVI  D, 000h
            MOV  E, A
            MVI  C, 002h    ; вывод символа
            PUSH H          ; сохраняем HL
            CALL 5
            POP  H          ; восстанавливаем HL
            RET
    ;
    L_SAVE: .dw 0000h
    L_SAVE2:.dw 0000h
    L_TEXT: .db 0Dh, 0Ah, "-- konec testa --$"
    L_TEXT2:.db 0Dh, 0Ah, "o{ibok = $"
    L_DATA: .db 1Ch         ; 00011100b -- вкл. 3 банк как стек на КД
            .db 18h         ; 00011000b -- вкл. 2 банк как стек на КД
            .db 14h         ; 00010100b -- вкл. 1 банк как стек на КД
            .db 10h         ; 00010000b -- вкл. 0 банк как стек на КД
            .db 00h         ; конец
    L_ERRS: .dw 0000h       ; количество ошибок
            .END
    [свернуть]

    TestKDoz

    Тест КД в режиме "ОЗУ" с предварительной полной очисткой, в т.ч. областей по доработке Баркаря, с подсчётом ошибок записи.
    Код:
            .ORG    00100h
    L_0100: LXI  D, L_DATA  ; для начала очистка КД
            PUSH D          ; сохраняем в стеке ссылку
    L_CLEAR:POP  D          ; считываем ссылку
            LDAX D          ; загружаем A по ссылке
            ORA  A
            INX  D          ; DE=DE+1
            PUSH D          ; сохраняем в стеке новую ссылку
            JZ   L_NEXT     ; переход, если там ноль ---->>>>
            DI              ; запрещаем прерывания
            OUT     010h    ; отправляем в порт
            LXI  H, 0000h
            DAD  SP         ; SP+0 в HL
            SHLD    L_SAVE  ; сохранить указатель на стек
            LXI  D, 0FFFFh  ; чем заполнять -- предварительная очистка памяти
            LXI  H, 8000h   ; сколько/2
            LXI  SP,0000h   ; свой указатель на стек
    L_LP0:  PUSH D          ; заполняем КД через стек...
            DCX  H
            MOV  A, L
            ORA  H
            JNZ     L_LP0   ; зациклено
            XRA  A          ; обнуляем аккумулятор
            OUT     010h    ; отправляем в порт -- отключаем КД
            LHLD    L_SAVE  ; считать сохранённый указатель на стек в HL
            SPHL            ; восстанавливаем SP
            EI              ; разрешаем прерывания
            JMP     L_CLEAR ; цикл очистки
    ;
    L_NEXT: LXI  D, L_TEXT1
            MVI  C, 009h
            CALL 5          ; вывод сообщения об окончании очистки КД
    L_CHK:  POP  D          ; считываем ссылку
            LDAX D          ; загружаем A по ссылке
            ORA  A
            JZ   L_DONE     ; переход, если там ноль ---->>>>
            INX  D          ; DE=DE+1
            PUSH D          ; сохраняем в стеке новую ссылку
            DI              ; запрещаем прерывания
            OUT     010h    ; отправляем в порт
            LXI  H, 08000h  ; заполнение памяти -- сколько
            LXI  B, 08000h  ; с какого адреса
    L_LP1:  MVI  A, 055h    ; чем заполнять
            STAX B          ; пишем
            LDAX B          ; читаем в A
            CPI     055h    ; сравниваем
            JZ      L_GOOD  ; значения равны
            PUSH H          ; сохранить счётчик
            LHLD    L_ERRS  ; считываем количество ошибок
            INX  H
            SHLD    L_ERRS  ; количество ошибок +1
            POP  H          ; восстановить счётчик
    L_GOOD: INX  B
            DCX  H
            MOV  A, L
            ORA  H
            JNZ     L_LP1   ; пока HL не обнулится
            XRA  A          ; обнуляем аккумулятор
            OUT     010h    ; отправляем в порт -- отключаем КД
            EI              ; разрешаем прерывания
            LXI  D, L_TEXT2 ; вывод количества найденных ошибок
            MVI  C, 009h
            CALL 5          ; вывод сообщения
            LHLD    L_ERRS  ; считываем количество
            CALL    L_BHEX  ; выводим H в шестнадцатиричном виде
            MOV  H, L
            CALL    L_BHEX  ; выводим L в шестнадцатиричном виде
            LXI  H, 00000h
            SHLD    L_ERRS  ; обнуляем счётчик ошибок
            JMP     L_CHK   ; цикл проверки
    ;
    L_DONE: LXI  D, L_TEXT
            MVI  C, 009h
            CALL 5          ; вывод сообщения об окончании проверки КД
            RET             ; выход из программы
    ;
    L_BHEX: MOV  A, H       ; H-входное значение для вывода
            RRC
            RRC
            RRC
            RRC             ; сдвиг вправо на 4 бита
            CALL    L_BIT   ; выводим старшие 4 бита
            MOV  A, H       ; восстанавливаем значение
    L_BIT:  ANI     00Fh    ; оставляем младшие 4 бита
            CPI     00Ah
            JM      L_B10   ; если меньше 10
            ADI     007h    ; +7
    L_B10:  ADI     030h    ; +30h
            MVI  D, 000h
            MOV  E, A
            MVI  C, 002h    ; вывод символа
            PUSH H          ; сохраняем HL
            CALL 5
            POP  H          ; восстанавливаем HL
            RET
    ;
    L_SAVE: .dw 0000h
    L_TEXT: .db 0Dh, 0Ah, "-- konec testa --$"
    L_TEXT1:.db 0Dh, 0Ah, "-- o~istka kd wypolnena --$"
    L_TEXT2:.db 0Dh, 0Ah, "o{ibok = $"
    L_DATA: .db 01Ch        ; 00011100b -- вкл. 3 банк как стек на КД
            .db 018h        ; 00011000b -- вкл. 2 банк как стек на КД
            .db 014h        ; 00010100b -- вкл. 1 банк как стек на КД
            .db 010h        ; 00010000b -- вкл. 0 банк как стек на КД
            .db 000h        ; на второй этап
            .db 0E3h        ; 11100011b -- вкл. 3 банк как ОЗУ 8000h-FFFFh
            .db 0E2h        ; 11100010b -- вкл. 2 банк как ОЗУ 8000h-FFFFh
            .db 0E1h        ; 11100001b -- вкл. 1 банк как ОЗУ 8000h-FFFFh
            .db 0E0h        ; 11100000b -- вкл. 0 банк как ОЗУ 8000h-FFFFh
            .db 000h        ; конец
    L_ERRS: .dw 0000h       ; количество ошибок
            .END
    [свернуть]

    TestKDo2

    Аналогичен предыдущему тесту, только тут тестирование выполняются в два этапа -- сначала цикл записи, а потом цикл проверки. В конце также показывается количество ошибок.
    Код:
            .ORG    00100h
    L_0100: LXI  D, L_DATA  ; для начала очистка КД
            PUSH D          ; сохраняем в стеке ссылку
    L_CLEAR:POP  D          ; считываем ссылку
            LDAX D          ; загружаем A по ссылке
            ORA  A
            INX  D          ; DE=DE+1
            PUSH D          ; сохраняем в стеке новую ссылку
            JZ   L_NEXT     ; переход, если там ноль ---->>>>
            DI              ; запрещаем прерывания
            OUT     010h    ; отправляем в порт
            LXI  H, 0000h
            DAD  SP         ; SP+0 в HL
            SHLD    L_SAVE  ; сохранить указатель на стек
            LXI  D, 0FFFFh  ; чем заполнять -- предварительная очистка памяти
            LXI  H, 8000h   ; сколько/2
            LXI  SP,0000h   ; свой указатель на стек
    L_LP0:  PUSH D          ; заполняем КД через стек...
            DCX  H
            MOV  A, L
            ORA  H
            JNZ     L_LP0   ; зациклено
            XRA  A          ; обнуляем аккумулятор
            OUT     010h    ; отправляем в порт -- отключаем КД
            LHLD    L_SAVE  ; считать сохранённый указатель на стек в HL
            SPHL            ; восстанавливаем SP
            EI              ; разрешаем прерывания
            JMP     L_CLEAR ; цикл очистки
    ;
    L_NEXT: LXI  D, L_TEXT1
            MVI  C, 009h
            CALL 5          ; вывод сообщения об окончании очистки КД
    L_CHK:  POP  D          ; считываем ссылку
            LDAX D          ; загружаем A по ссылке
            ORA  A
            JZ   L_DONE     ; переход, если там ноль ---->>>>
            INX  D          ; DE=DE+1
            PUSH D          ; сохраняем в стеке новую ссылку
            DI              ; запрещаем прерывания
            OUT     010h    ; отправляем в порт
            LXI  H, 08000h  ; заполнение памяти -- сколько
            LXI  B, 08000h  ; с какого адреса
    L_LP1:  MVI  A, 055h    ; чем заполнять
            STAX B          ; пишем
            INX  B
            DCX  H
            MOV  A, L
            ORA  H
            JNZ     L_LP1   ; пока HL не обнулится
            LXI  H, 08000h  ; считываем -- сколько
            LXI  B, 08000h  ; с какого адреса
    L_LP2:  LDAX B          ; читаем в A
            CPI     055h    ; сравниваем
            JZ      L_GOOD  ; значения равны
            PUSH H          ; сохранить счётчик
            LHLD    L_ERRS  ; считываем количество ошибок
            INX  H
            SHLD    L_ERRS  ; количество ошибок +1
            POP  H          ; восстановить счётчик
    L_GOOD: INX  B
            DCX  H
            MOV  A, L
            ORA  H
            JNZ     L_LP2   ; пока HL не обнулится
            XRA  A          ; обнуляем аккумулятор
            OUT     010h    ; отправляем в порт -- отключаем КД
            EI              ; разрешаем прерывания
            LXI  D, L_TEXT2 ; вывод количества найденных ошибок
            MVI  C, 009h
            CALL 5          ; вывод сообщения
            LHLD    L_ERRS  ; считываем количество
            CALL    L_BHEX  ; выводим H в шестнадцатиричном виде
            MOV  H, L
            CALL    L_BHEX  ; выводим L в шестнадцатиричном виде
            LXI  H, 00000h
            SHLD    L_ERRS  ; обнуляем счётчик ошибок
            JMP     L_CHK   ; цикл проверки
    ;
    L_DONE: LXI  D, L_TEXT
            MVI  C, 009h
            CALL 5          ; вывод сообщения об окончании проверки КД
            RET             ; выход из программы
    ;
    L_BHEX: MOV  A, H       ; H-входное значение для вывода
            RRC
            RRC
            RRC
            RRC             ; сдвиг вправо на 4 бита
            CALL    L_BIT   ; выводим старшие 4 бита
            MOV  A, H       ; восстанавливаем значение
    L_BIT:  ANI     00Fh    ; оставляем младшие 4 бита
            CPI     00Ah
            JM      L_B10   ; если меньше 10
            ADI     007h    ; +7
    L_B10:  ADI     030h    ; +30h
            MVI  D, 000h
            MOV  E, A
            MVI  C, 002h    ; вывод символа
            PUSH H          ; сохраняем HL
            CALL 5
            POP  H          ; восстанавливаем HL
            RET
    ;
    L_SAVE: .dw 0000h
    L_TEXT: .db 0Dh, 0Ah, "-- konec testa --$"
    L_TEXT1:.db 0Dh, 0Ah, "-- o~istka kd wypolnena --$"
    L_TEXT2:.db 0Dh, 0Ah, "o{ibok = $"
    L_DATA: .db 01Ch        ; 00011100b -- вкл. 3 банк как стек на КД
            .db 018h        ; 00011000b -- вкл. 2 банк как стек на КД
            .db 014h        ; 00010100b -- вкл. 1 банк как стек на КД
            .db 010h        ; 00010000b -- вкл. 0 банк как стек на КД
            .db 000h        ; на второй этап
            .db 0E3h        ; 11100011b -- вкл. 3 банк как ОЗУ 8000h-FFFFh
            .db 0E2h        ; 11100010b -- вкл. 2 банк как ОЗУ 8000h-FFFFh
            .db 0E1h        ; 11100001b -- вкл. 1 банк как ОЗУ 8000h-FFFFh
            .db 0E0h        ; 11100000b -- вкл. 0 банк как ОЗУ 8000h-FFFFh
            .db 000h        ; конец
    L_ERRS: .dw 0000h       ; количество ошибок
            .END
    [свернуть]
    Архив с откомпилированными тестами: MyTestKD_new.7z

    Что получается:
    1. Тест в режиме "стек" ни разу не показал ни одной ошибки.
    2. Тест в режиме "ОЗУ" в один этап показывает от 0 до 10 случайных ошибок, в два этапа до 30. Это плохо... Есть подозрение на большие задержки в Д5 и Д6, но, с другой стороны, данные на ШАВВ должны появляться раньше, чем на ШАП будет сформирован полный адрес. Надо ещё подумать...

    И ещё остаётся питание. Проблемы в нём точно есть, но пока у меня не готов БП на замену.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. ПК8000 - Софт: Старый и Новый
    от ivagor в разделе ПК8000
    Ответов: 344
    Последнее: 08.11.2025, 06:55
  2. Старый-Новый Язык Noahsoft PL65
    от ezswift в разделе Atari
    Ответов: 25
    Последнее: 19.04.2023, 09:32
  3. Новый старый ZX-Next: сборка, тестирование, производство.
    от ZXFanat в разделе Несортированное железо
    Ответов: 51
    Последнее: 01.10.2011, 08:41
  4. про новый-старый спектрум
    от xailar в разделе ZX Концепции
    Ответов: 3
    Последнее: 06.12.2010, 10:42
  5. ПК8000 - Квазидиск
    от Mick в разделе ПК8000
    Ответов: 86
    Последнее: 13.10.2008, 19:17

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •