|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
CGA и CF IDE адаптер на Altera MAX10
Author |
Message |
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 707 Location: WWW
|
Так вроде DMA в PC вообще не предназначен для пересылки память-память ?
|
05 Nov 2017 00:54 |
|
|
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
С каких пор файл - это память?
|
05 Nov 2017 01:48 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 707 Location: WWW
|
А, в смысле, прямо из диска ? Действительно...
|
05 Nov 2017 02:18 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 707 Location: WWW
|
Эх, люблю я со странными вещами заморачиваться... Итак, вроде сделал достаточно нормальную работу с SD картой - все, как с "нормальным" контроллером жесткого диска. Но - иногда виснет из-за того, что SD карта не выдает ожидаемый ответ. Виснет довольно редко - обычно можно прогнать минимум пару-тройку тестов CheckIt'а для определения скорости доступа к HDD. В ходе разборок я выяснил (не спрашивайте, как !), что нужно сделать, чтобы не зависало. А нужно всего лишь сместить кусок кода основного (не моего !) BIOS на пару байт вниз... Основной BIOS - это практически 100% BIOS от PC/XT последней версии, только у меня все собрано в 16К вместо двух ROM по 32K. В смысле, весь код на месте, просто собран в одном месте, а не разбросан. Все, что можно, проверил на предмет отсутствия абсолютных ссылок и т.п. вещей. Да и если бы они и были, то все равно сложно себе представить, что может оказать такой эффект...
|
05 Nov 2017 10:08 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Я не пробовал, но тут дядька пишет что можно, если на время отключать рефреш: | | | | Code: 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
| | | | |
|
05 Nov 2017 10:27 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 707 Location: WWW
|
Все отменяется - закономерность пока надежно поймать не могу
|
05 Nov 2017 12:21 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 707 Location: WWW
|
Подзадолбало пока выискивать причину зависания , решил отвлечься и побаловаться с чем-то другим. Хочу допилить Disney Sound System и запустить какую-нибудь успокаивающую музыку Заодно взглянул, что там генерит мой супернавороченный ЦАП , состоящий из целого резистора и конденсатора: Синус состоит из 32 шагов (больше было лень набивать табличку в ассемблере), поэтому видны ступеньки. Но вообще, честно говоря, удивило, как такое примитивное решение может выдавать такой довольно правильный сигнал... P.S. Эх (мечтательно ), если бы еще Vic3Dexe помог прикрутить свой видеоадаптер к моей плате...
|
06 Nov 2017 01:03 |
|
|
Mixa64
Doomed
Joined: 25 Aug 2009 07:02 Posts: 459 Location: Москва
|
Ну, то, что страничные регистры ПДП у XT сделаны по доброй традиции дебильно, это понятно, но почему 8259 вдруг начал уметь ПДП??
|
06 Nov 2017 13:07 |
|
|
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
Так помощь какая нужна-то? Я вроде на все вопросы отвечал...
|
06 Nov 2017 13:53 |
|
|
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
Ыы... народ, я не про память-память спрашивал, я про устройство-память. Т.е. допустим, чтение с флопика/винта посредством DMA. Запишется, скажем заставка игрушки напрямую в видеопамять? Получается, что нет. Что лично для меня весьма странно.
|
06 Nov 2017 13:57 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 707 Location: WWW
|
Ну не шмогла я...
|
06 Nov 2017 21:53 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 707 Location: WWW
|
Что-то я в упор там схему не вижу...
|
06 Nov 2017 22:39 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Ну, дыкть... Времена то стародавние, DOS, перестройка, OrCad 3.1, fido, и то не у всех. Короче там в HPGL схема, типа язык такой древний для принтеров/плоттеров, что-то типа ESC-последовательностей, тока расширен. Есть тулзы всякие, позволяющие сей артефакт конвертировать. Например hp2xx линуховая. Но чтоб никого не мучить, прикладываю PNG.
Last edited by Tronix on 06 Nov 2017 22:59, edited 1 time in total.
|
06 Nov 2017 22:53 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 707 Location: WWW
|
Пока вижу только картину "Белый квадрат"
|
06 Nov 2017 22:54 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Приложил архивом в предыдущем посте.
|
06 Nov 2017 22:59 |
|
|
Who is online |
Users browsing this forum: No registered users and 6 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|