Rev 87 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?
спецификации на прошивку НГС для демы на бухальт2013
- поддержка механимзма обмена через host-порты B3 BB как в оригинале
- поддержка всех SPI портов как в оригинале
- поддержка переключения частоты z80
- 4 порта для пейджинга 4 очков по 16к рамы: выводятся инвертированные номера
страниц (#7f^number, number=0..7f, 2Mb)
!!! пока нет, совместимо с нгс-конфой
- zx-dma на чтение (хост читает) с префетчем (8 или 16 байт)
--> нужна ли перестановка указателя DMA с хоста? если нужна, то зачем и в каком
виде?
!!! пока не нужна
- sdcard dma (sdcard->ram): чтение 512 байт с SPI в fpga-память, запись бёрстом
512 байт (1024 такта Z80+busrq/busack)
- mp3 dma (ram->mp3): чтение бёрстом 512 байт из RAM в fpga-память, запись в
mp3-чип с троттлингом с его стороны.
--> нужно ли дма в RAM, или может быть начитка сдкарты в fpga - посылка в mp3?
!!! нужно дма в рам.
--> достаточно ли 1 машнки dma (которое или читает сдкарту или пишет мр3) или
--> надо 2 независимых?
!!! пока 2 независимых
- таймер со скоростью 37500гц/2,4,8,16,32,64,128,256 == 146.48гц, 292.97гц и т.д.
- прерывания: NMI от хоста, конец дма, таймер. приоритеты, вектор -- код
команды RST (можно применять im0, im1, im2).
--> или от хоста тоже INT?
!!! нет
- вочдог: надо его пинать раз в секунду, иначе ресет прошивки и уход на бут
оригинальной ngs-прошивки в альтеру.
--> девайсы для умножения, деления? Например умножатор:
out (port),lo1,hi1,lo2,hi2:in LL,LH,HL,HH,(port)
!!! пока не нужны
Свободные порты в НГС: #0C, #0D, #0E, #1A, #20..#3F
#20, #21, #22, #23: маппинг 16к паг в очки 0,1,2,3. Номера: неинвертированные
(write only) несдвинутые (0..4Мб=0..255, на некоторых НГС только 2Мб).
#22, #23 -- перекрывают MPAG, EXMPAG. norom действует для
тех же очек, что и обычно.
#0E: частота таймерного прерывания: значение | частота, Гц (write only)
----------+-------------
(default) #00 | 37500/1 = 37500
#01 | 37500/2 = 18750
#02 | 37500/4 = 9375
#03 | 37500/8 = 4687.5
#04 | 37500/16 = 2343.75
#05 | 37500/64 = 585.9375
#06 | 37500/256 = 146.484375
#07 | 37500/1024 = 36.62109375
#0C: INTENA: бит | функция (write only)
-----+-----------------------
7 | set/reset bit
6 |
5 |
4 |
3 |
2 | enable MP3 dma end int (default=0)
1 | enable SD dma end int (default=0)
0 | enable timer int (default=1)
#0D: INTREQ: бит | функция (read/write)
-----+----------------
7 | set/reset bit
6 |
5 |
4 |
3 |
2 | MP3 dma end pending
1 | SD dma end pending
0 | timer int pending
Приоритеты прерываний: От младшего бита (наивысший) к старшим.
Вектор прерывания: для бита 0 - #FF, для бита 1 - #F7 и т.д. до бита 6 -- #CF
(коды команд RST #38, RST #30, ..., RST #08).
Считывание вектора прерываний снимает бит INTREQ, соответствующий взятому прерыванию.