Доработка позволит стандартному Львову работать с MFM дисками.
Ранее это было возможно только на Z80.
Доработка очень проста! Требуемые детали: 2 резистора, 1 диод и 1 транзистор. Работа занимает 30 минут. Полная обратная совместимость Львова и контроллера со всем старым софтом.
Доработка использует существующий RDY триггер Львова и его артефакт
подвешивание компьютера при обращении к младшим портам.
Длительность цикла data pump сократилась с 48 мкс до 23 мкс при требуемых для MFM 32 мкс. Это позволяет 100% надежно работать из ПЗУ. При работе из RAM длительность цикла на пределе, но тоже работает!
Шаг №1 Доработка Львова.
- разрезать одну дорожку
- установить диод и резистор
- припаять провод на разъем ВНЕШ1
Готово! Проверьте работоспособность, ничего не должно было поменяться.
Шаг №2 Доработка контроллера.
Смотрите прилагаемую PCAD и PDF схему. Дополнения нарисованы над ВГ93
- перерезать одну дорожку. сигнал А7 от ножек 11 и 12 ЛА2.
сами ножки 11 и 12 подключить на +5В через резистор R4
- припаять провода, как показано на схеме, используя свободные вентили обозначенные на схеме
- установить резистор и транзистор (можно КТ315 приклеить к плате и припаять нужные провода)
- припаять провод на коннектор ВНЕШ1
Готово! Проверьте работоспособность, ничего не должно было поменяться.
Шаг №3 Установка модифицированной версии хамелеона.
- прошить РФ2 rom файлом из прилагаемого soft архива
(BTW там прилагается asm файл с исходниками)
- установить во Львов
Готово! Проверьте работоспособность, MFM работает.
Шаг №4 Записать диск с доработанной програмой FORMAT из прилагаемого dsk образа.
Вот как это выглядит:
--------------------------
Для любопытных. Суть изменений софта.
FORMAT был переделан на вызов data pump процедур из ПЗУКод:1 CPU T = 450 ns MFM 32 mks/byte = 71 T WRITE SECTOR CPU T ROM:C060 loc_C060: ROM:C060 ROM:C060 DB E4 10 in a, (0E4h) ; Read IRQ/DRQ Status, Apply Mask, Wait for DRQ ROM:C062 A1 4 and c ROM:C063 CA 60 C0 17 jp z, loc_C060 ; Read IRQ/DRQ Status, Apply Mask, Wait for DRQ ROM:C066 7E 7 ld a, (hl) ; Next Data byte ROM:C067 D3 E3 10 out (0E3h), a ; Load VG93 DR ROM:C069 23 5 inc hl ; Next address in write buffer ROM:C06A F2 60 C0 17 jp p, loc_C060 ; IRQ=Bit7=0 Repeat ROM:C06D C9 ret READ SECTOR ROM:C7E6 loc_C7E6: ROM:C7E6 ROM:C7E6 DB E4 10 in a, (0E4h) ROM:C7E8 A1 4 and c ROM:C7E9 CA E6 C7 17 jp z, loc_C7E6 ; Read IRQ/DRQ Status Register, Apply Mask, Repeat ROM:C7EC DB E3 10 in a, (0E3h) ; Read VG93 DR ROM:C7EE F8 3 ret m ; Return if IRQ=Bit7=1 ROM:C7EF 77 7 ld (hl), a ; Store in Read Buffer ROM:C7F0 23 5 inc hl ; Next address in read buffer ROM:C7F1 C3 E6 C7 10 jp loc_C7E6 MODIF. WRITE SECTOR CPU T Saves 4T ROM:C060 loc_C060: ROM:C060 ROM:C060 DB E4 10 in a, (0E4h) ; Read IRQ/DRQ Status, Apply Mask, Wait for DRQ ROM:C062 A1 4 and c ROM:C063 CA 60 C0 17 jp z, loc_C060 ; Read IRQ/DRQ Status, Apply Mask, Wait for DRQ ROM:C066 7E 7 ld a, (hl) ; Next Data byte ROM:C067 D3 E3 10 out (0E3h), a ; Load VG93 DR ROM:C069 F8 3 ret m ; Return if IRQ=Bit7=1 ROM:C06A 23 5 inc hl ; Next address in write buffer ROM:C06B C3 60 C0 10 jp loc_C060 ; Repeat LOCK.PORT========== WRITE SECTOR CPU T TOTAL 49T !! 3T max wait on RAM access = 23 mks loc_C060: DB E4 10 in a, (064h) ; Read IRQ/DRQ Status, Apply Mask, Wait for DRQ A1 4 and c 7E 7 ld a, (hl) ; Next Data byte D3 E3 10 out (0E3h), a ; Load VG93 DR F8 3 ret m ; Return if IRQ=Bit7=1 23 5 inc hl ; Next address in write buffer C3 60 C0 10 jp loc_C060 ; Repeat READ SECTOR loc_C7E6: DB E4 10 in a, (064h) A1 4 and c DB E3 10 in a, (0E3h) ; Read VG93 DR F8 3 ret m ; Return if IRQ=Bit7=1 77 7 ld (hl), a ; Store in Read Buffer 23 5 inc hl ; Next address in read buffer C3 E6 C7 10 jp loc_C7E6




Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 
