Цитата Сообщение от Максагор Посмотреть сообщение
Вот предлагаю всем сюда заглядывающим юзерам реального железа обсудить вопрос: а оно нам надо?

P.S. отдельно повторяю вопрос о том, как это все работает с точки зрения программиста? - тут у меня неясности.
Как бы это устройство не на каждый комп налезет, вернее если использовать мультиколор, так как в основоном имеющиеся демо расчитаны на трансфер
в 4 такта (2 такта на чтение и 2 такта на запись) и не все компы смогут это осилисть из за несовпадения фаз записи в память без артифактов
Напомню что минимально коректное число тактов для клоков совпадающих с RAS/ - это 3 такта. Тоесть при любой ситуации в память запишутся данные.
Я на Фениксе пробовал, вот мультиколор там и не пошел.
А больше 4 тактов мультиколор развалится.
Кроме того у чипа нет ввода RESET. Иными словами, если трансфер не завершен, то шина не освободится никогда и даже если нажать на кнопку сброс компьютера. Поможет только выключение питания. Тоесть эту схему надо дорабатывать на предмет отсоединения сисналов захвата шины при сбросе, чтобы процессор смог проинициализировать систему.
Если работать с портами, то вполне модет сгодится и вроде на сайте Велесофта есть Easy HDD.
Кроме того там же есть примеры вывода мультиколора (Multitech) c сырцами.

Вот к примеру один из них:
Код:
    org   0CB20h

MLT_Viewer_Init:
    di  
    ld  hl,0FE00h
    ld  de,0FE01h
    ld  bc,100h
    ld  (hl),0CBh ; '╦'
    ldir  
    ld  a,0FEh  ; '■'
    ld  i,a
    im  2
    ld  de,4000h
    ld  hl,0CE00h
    ld  bc,1800h
    ldir  
    ei  

MLT_Viewer_Loop:
    halt  
    xor a
    in  a,(0FEh)
    cpl 
    and 1Fh
    jr  z,MLT_Viewer_Loop
    ld  a,3Fh
    ld  i,a
    im  1
    ret 

    org 0CBCBh

MLT_Viewer_Interrupt:
    push  af
    push  bc
    push  de
    push  hl
    push  ix
    ld  d,1Dh
    ld  e,0E6h
    push  de
    ld  hl,5800h
    push  hl

    ld  hl,MLT_Viewer_Data_0
    ld  b,14h
    ld  c,6Bh
    otir  

    ld  hl,5820h
    ld  de,0E700h
    ld  b,17h
loc_0_CBEB:
    push  bc
    ld  (MLT_Viewer_Addr_Src),de
    ld  (MLT_Viewer_Addr_Dest),hl
    push  hl
    ld  hl,MLT_Viewer_Data_1
    ld  b,9
    otir  
    pop hl
    inc d
    push  de
    ld  de,20h  ; ' '
    add hl,de
    pop de
    pop bc
    djnz  loc_0_CBEB

    ld  hl,MLT_Viewer_Data_2
    ld  b,6
    otir  

    ld  b,0C6h  ; '╞'
MLT_Viewer_Delay:
    djnz  MLT_Viewer_Delay

    ld  bc,206Bh
    ld  hl,87B3h      ;команды Enable DMA + Force Ready
    ld  de,0CF0Dh                       ;команда Load
    ld  a,b
    ld  xl,18h
    out (c),e
    out (6Bh),a

MLT_Viewer_Loop_Line:
    out (c),d
    out (c),l
    out (c),h
    add a,b

    out (c),e
    out (6Bh),a
    out (c),d
    out (c),l
    out (c),h
    add a,b

    out (c),e
    out (6Bh),a
    out (c),d
    out (c),l
    out (c),h
    add a,b

    out (c),e
    out (6Bh),a
    out (c),d
    out (c),l
    out (c),h
    add a,b

    out (c),e
    out (6Bh),a
    out (c),d
    out (c),l
    out (c),h
    add a,b

    out (c),e
    out (6Bh),a
    out (c),d
    out (c),l
    out (c),h
    add a,b

    out (c),e
    out (6Bh),a
    out (c),d
    out (c),l
    out (c),h
    xor a
    ld  e,b
    ld  d,a
    pop hl
    add hl,de
    pop de
    inc e
    push  de
    push  hl
    ld  a,0ADh  ; 'н'
    out (6Bh),a
    out (c),l
    out (c),h
    ld  a,20h ; ' '
    out (c),d
    out (6Bh),a
    out (c),e
    ld  hl,87B3h      ;команды Enable DMA + Force Ready
    ld  de,0CF0Dh                       ;команда Load
    dec xl
    jr  nz,MLT_Viewer_Loop_Line

    pop hl
    pop de
    pop ix
    pop hl
    pop de
    pop bc
    pop af
    ei  
    ret 

MLT_Viewer_Data_0:
    db  0C3h        ;команда RESET DMA
    db  0C7h        ;команда Reset Port A Timing
    db  0CBh                            ;команда Reset Port B Timing
                      ;--- WR0 Control Bytes -----
    db    7Dh                             ;настраиваем командный регистр (трансфер A->B)
    db      0       ;адрес памяти младший байт  
    db  0E6h                            ;адрес памяти старший байт  
    db    1Fh                             ;число байт для пересылки младший байт
    db      0                               ;число байт для пересылки старший байт
                      ;--- WR1 Control Bytes -----
    db    54h                             ;настраиваем командный регистр (трансфер A <- память)
    db      2                               ;количество циклов на передачу
                                                        ;--- WR2 Control Bytes -----
    db    50h                             ;настраиваем командный регистр (трансфер B -> память)
    db      2                               ;количество циклов на передачу
                                                        ;--- WR3 Control Bytes -----
    db  0C0h                            ;настраиваем командный регистр (Enable DMA)
                                                        ;--- WR4 Control Bytes -----
    db  0ADh                            ;настраиваем командный регистр (адрес куда будет трансфер)
    db      0       ;адрес памяти младший байт   
    db    58h                             ;адрес памяти старший байт  
                                                        ;--- WR5 Control Bytes -----
    db    82h       ;настраиваем командный регистр (без WAIT)

    db  0CFh        ;команда Load
    db  0B3h                            ;команда Force Ready
    db    87h                             ;команда Enable DMA

MLT_Viewer_Data_1:
                      ;--- WR0 Control Bytes -----
    db    1Dh                             ;настраиваем командный регистр (трансфер A->B)
MLT_Viewer_Addr_Src:
    dw      0
                                                        ;--- WR4 Control Bytes -----
    db  0ADh                            ;настраиваем командный регистр (адрес куда будет трансфер)
MLT_Viewer_Addr_Dest:
    dw      0                               ;адрес памяти 
    db  0CFh        ;команда Load
    db  0B3h                            ;команда Force Ready
    db    87h                             ;команда Enable DMA

MLT_Viewer_Data_2:
                      ;--- WR0 Control Bytes -----
    db    1Dh       ;настраиваем командный регистр (трансфер A->B)
    dw      0E600h                          ;адрес памяти 
              ;--- WR4 Control Bytes -----
    db  0ADh                            ;настраиваем командный регистр (адрес куда будет трансфер)
    dw      5800h 

    .end