CGA и CF IDE адаптер на Altera MAX10

16-битные ПЦ-совместимые компьютеры с процессорами 8086/8088/80286 работающие под управлением ДОС

Moderator: Shaos

newold86
Devil
Posts: 716
Joined: 30 Nov 2013 11:08
Location: WWW

Re: CGA и CF IDE адаптер на Altera MAX10

Post by newold86 »

Vic3Dexe wrote:Ну т.е., если я хочу файл почитать прямо в видеопамять через DMA - никак?
Так вроде DMA в PC вообще не предназначен для пересылки память-память ?
Vic3Dexe
Doomed
Posts: 370
Joined: 16 Dec 2014 11:58
Location: Киев

Re: CGA и CF IDE адаптер на Altera MAX10

Post by Vic3Dexe »

newold86 wrote:память-память
С каких пор файл - это память? :)
newold86
Devil
Posts: 716
Joined: 30 Nov 2013 11:08
Location: WWW

Re: CGA и CF IDE адаптер на Altera MAX10

Post by newold86 »

Vic3Dexe wrote:
newold86 wrote:память-память
С каких пор файл - это память? :)
А, в смысле, прямо из диска ? Действительно...
newold86
Devil
Posts: 716
Joined: 30 Nov 2013 11:08
Location: WWW

Re: CGA и CF IDE адаптер на Altera MAX10

Post by newold86 »

Эх, люблю я со странными вещами заморачиваться... Итак, вроде сделал достаточно нормальную работу с SD картой - все, как с "нормальным" контроллером жесткого диска. Но - иногда виснет из-за того, что SD карта не выдает ожидаемый ответ. Виснет довольно редко - обычно можно прогнать минимум пару-тройку тестов CheckIt'а для определения скорости доступа к HDD.
В ходе разборок я выяснил (не спрашивайте, как !), что нужно сделать, чтобы не зависало. А нужно всего лишь сместить кусок кода основного (не моего !) BIOS на пару байт вниз... Основной BIOS - это практически 100% BIOS от PC/XT последней версии, только у меня все собрано в 16К вместо двух ROM по 32K. В смысле, весь код на месте, просто собран в одном месте, а не разбросан.
Все, что можно, проверил на предмет отсутствия абсолютных ссылок и т.п. вещей. Да и если бы они и были, то все равно сложно себе представить, что может оказать такой эффект...
Tronix
Doomed
Posts: 662
Joined: 18 Nov 2013 02:38
Location: Москва

Re: CGA и CF IDE адаптер на Altera MAX10

Post by Tronix »

newold86 wrote: Так вроде DMA в PC вообще не предназначен для пересылки память-память ?
Я не пробовал, но тут дядька пишет что можно, если на время отключать рефреш:

Code: Select all

                      DMA Transfers for FAST Memory Moves                     

If you ever have the need for super fast moves of blocks of memory and you
can put up with a lot of restrictions in order to gain the speed there is a
method in the PC environment to move bytes at the rate of one every 3 clock
cycles. Compare that to the clocks for a rep movsb and then say that isn't
fast. This isn't for every programmer and it certainly isn't for every time
you need to move a few bytes.
         The DMA chip is a four channel device. Channel 0 is reserved for
refresh of memory that requires at least 256 consecutive bytes be read some-
where in memory at intervals less than about 4ms. The other three channels
are available for such things as transferring information to and from the
disk drives or the ports. Interesting trivia so far, but not very useful in
moving memory around. It gets worse. The 8259 DMA doesn't know anything about
segments. It only knows a 64k universe. This is where the Page registers come
in. The page registers decide which page (on 64k boundaries) the 8259 will
look at for any operation. There are not, as you might guess, 4 page 
registers,but only 2 plus a default. If it is not channel 1 or 2 then it uses 
the default register programmed as channel 3.
         A careful reading of the data sheet of the 8259 discloses that it is
capable of doing a memory to memory transfer but only between channels 0 and
1. That is why this method is a little tricky to use. In order to set up your
own parameters you have to disable the timer from asking for a DMA from chan-
nel 0 every x milliseconds and reconfigure the 8259 and assume the respon-
sibility for doing the memory refresh. It actually sounds worse than it is.
The configuring and re configuring of the 8259 doesn't take all that long, so
the time is made up after only moving a few tens of bytes, and if you move at
least 256 CONSECUTIVE bytes the memory refresh requirement is met for another
2 or 3 milliseconds. The page registers are taken care of by setting channels
1 and 3 to the same value.
         Given below is an example of a program I wrote just to test the
idea.  A lot of the setup is too complex to explain in this short article, but
if you are interested in checking it all out you will need a data sheet on
the 8259.  This worked nicely on my machine and should on most compatibles 
just the way it is.  With the not-so-compatible it may very well not.  I hope 
this listing is well enough commented so you can figure it out and make use of 


it sometime. 

`                                DMA SOURCE

PAGE 60,132
TITLE DMA MEMORY TO MEMORY
DMA      EQU 0
STACK       SEGMENT PUBLIC 'STACK'
     DB  32 DUP('STACK')
STACK       ENDS
DATA     SEGMENT PUBLIC 'DATA'
SOURCE      DW   08000H
TARGET      DW   09000H
NUMBER      DW   800H
INCDEC      DB   0
PAGER       DB   0BH    ;PAGE (O TO F)
FILL     DB 0    ;2 IF A FILL OP
DATA     ENDS
ASSUME      CS:CODE,DS:DATA,ES:DATA
CODE     SEGMENT PUBLIC 'CODE'
START:
     MOV AX,DATA
     MOV DS,AX
     MOV AX,0B800H
     MOV ES,AX
PAGE:
     MOV AL,PAGER ;PAGE TO OPERATE IN
     OUT 83H,AL
UNDMA:
     OUT 0DH,AL   ;MASTER RESET OF DMA
     MOV DX,03D8H
     MOV AL,1
     OUT DX,AL
     MOV AX,SOURCE     ;WHERE IS IT COMING FROM
     OUT 0H,AL
     MOV AL,AH
     OUT 0H,AL
     MOV AX,TARGET     ;WHERE TO PUT IT
     OUT 2H,AL
     MOV AL,AH
     OUT 2H,AL
     MOV AX,NUMBER     ;HOW MANY
     OUT 3H,AL
     MOV AL,AH
     OUT 3H,AL
     MOV AL,009H  ;ENABLE M TO M,COMPRESSED
     OR  AL,FILL  ;WILL BE 2 IF FILL OP
     OUT 8H,AL
     MOV AL,088H  ;BLOCK MODE, INC, READ
     OR  AL,INCDEC     ;WILL BE 20H IF DEC
     OUT 0BH,AL
     MOV AL,85H   ;BLOCK MODE, INC, WRITE
     OR  AL,INCDEC     ;WILL BE 20H IF DEC
     OUT 0BH,AL
     MOV AL,4    ;THIS IS THE REQUEST
     OUT 9,AL    ;DO IT
     MOV AL,9
     OUT DX,AL
RESET:      OUT  0DH,AL  ;THIS IS A MASTER RESET
     OUT 0CH,AL   ;RESET F/L F/F
     MOV AL,01
     OUT 0,AL
     OUT 0,AL
REINIT:  
     MOV AL,0
     OUT 83H,AL   ;MOVES REFRESH TO BASE PAGE
     MOV AL,0FFH
     OUT 1,AL
     PUSH   AX
     OUT 1,AL
     OUT 0BH,AL
     INC AL  ;MODE CHAN3
     OUT 0BH,AL
     PUSH   AX
     POP AX
     POP AX
     POP AX
     MOV AH,4CH
     INT 21H
CODE     ENDS
END      START
newold86
Devil
Posts: 716
Joined: 30 Nov 2013 11:08
Location: WWW

Re: CGA и CF IDE адаптер на Altera MAX10

Post by newold86 »

newold86 wrote:А нужно всего лишь сместить кусок кода основного (не моего !) BIOS на пару байт вниз
Все отменяется - закономерность пока надежно поймать не могу :(
newold86
Devil
Posts: 716
Joined: 30 Nov 2013 11:08
Location: WWW

Re: CGA и CF IDE адаптер на Altera MAX10

Post by newold86 »

Подзадолбало пока выискивать причину зависания :( , решил отвлечься и побаловаться с чем-то другим. Хочу допилить Disney Sound System и запустить какую-нибудь успокаивающую музыку :)
Заодно взглянул, что там генерит мой супернавороченный ЦАП :) , состоящий из целого резистора и конденсатора:
tek00002.png
Синус состоит из 32 шагов (больше было лень набивать табличку в ассемблере), поэтому видны ступеньки. Но вообще, честно говоря, удивило, как такое примитивное решение может выдавать такой довольно правильный сигнал...

P.S. Эх (мечтательно :) ), если бы еще Vic3Dexe помог прикрутить свой видеоадаптер к моей плате...
You do not have the required permissions to view the files attached to this post.
Mixa64
Doomed
Posts: 480
Joined: 25 Aug 2009 07:02
Location: Москва

Re: CGA и CF IDE адаптер на Altera MAX10

Post by Mixa64 »

Tronix wrote: тут дядька пишет что можно, если на время отключать рефреш:

Code: Select all

                      DMA Transfers for FAST Memory Moves                     
...
The 8259 DMA doesn't know anything about
segments.
...
Ну, то, что страничные регистры ПДП у XT сделаны по доброй традиции дебильно, это понятно, но почему 8259 вдруг начал уметь ПДП??
Vic3Dexe
Doomed
Posts: 370
Joined: 16 Dec 2014 11:58
Location: Киев

Re: CGA и CF IDE адаптер на Altera MAX10

Post by Vic3Dexe »

newold86 wrote:если бы еще Vic3Dexe помог прикрутить свой видеоадаптер к моей плате
Так помощь какая нужна-то? :o
Я вроде на все вопросы отвечал...
Vic3Dexe
Doomed
Posts: 370
Joined: 16 Dec 2014 11:58
Location: Киев

Re: CGA и CF IDE адаптер на Altera MAX10

Post by Vic3Dexe »

Tronix wrote:Я не пробовал, но тут дядька пишет что можно, если на время отключать рефреш
Ыы... народ, я не про память-память спрашивал, я про устройство-память.
Т.е. допустим, чтение с флопика/винта посредством DMA. Запишется, скажем заставка игрушки напрямую в видеопамять?
Получается, что нет. Что лично для меня весьма странно.
newold86
Devil
Posts: 716
Joined: 30 Nov 2013 11:08
Location: WWW

Re: CGA и CF IDE адаптер на Altera MAX10

Post by newold86 »

Vic3Dexe wrote:
newold86 wrote:если бы еще Vic3Dexe помог прикрутить свой видеоадаптер к моей плате
Так помощь какая нужна-то? :o
Я вроде на все вопросы отвечал...
Ну не шмогла я... :)
newold86
Devil
Posts: 716
Joined: 30 Nov 2013 11:08
Location: WWW

Re: CGA и CF IDE адаптер на Altera MAX10

Post by newold86 »

Tronix wrote:Архив со всей требухой здесь: https://cloud.mail.ru/public/3SrbC9zHWL4J/sb-vanin.zip
Что-то я в упор там схему не вижу...
Tronix
Doomed
Posts: 662
Joined: 18 Nov 2013 02:38
Location: Москва

Re: CGA и CF IDE адаптер на Altera MAX10

Post by Tronix »

newold86 wrote:
Tronix wrote:Архив со всей требухой здесь: https://cloud.mail.ru/public/3SrbC9zHWL4J/sb-vanin.zip
Что-то я в упор там схему не вижу...
Ну, дыкть... Времена то стародавние, DOS, перестройка, OrCad 3.1, fido, и то не у всех. :) Короче там в HPGL схема, типа язык такой древний для принтеров/плоттеров, что-то типа ESC-последовательностей, тока расширен.
Есть тулзы всякие, позволяющие сей артефакт конвертировать. Например hp2xx линуховая. Но чтоб никого не мучить, прикладываю PNG.
You do not have the required permissions to view the files attached to this post.
Last edited by Tronix on 06 Nov 2017 22:59, edited 1 time in total.
newold86
Devil
Posts: 716
Joined: 30 Nov 2013 11:08
Location: WWW

Re: CGA и CF IDE адаптер на Altera MAX10

Post by newold86 »

Tronix wrote:... прикладываю PNG.
Пока вижу только картину "Белый квадрат" :)
Tronix
Doomed
Posts: 662
Joined: 18 Nov 2013 02:38
Location: Москва

Re: CGA и CF IDE адаптер на Altera MAX10

Post by Tronix »

newold86 wrote:
Tronix wrote:... прикладываю PNG.
Пока вижу только картину "Белый квадрат" :)
Приложил архивом в предыдущем посте.