Subversion Repositories ngs

Rev

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, соответствующий взятому прерыванию.