Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1.                 ;;      rs780 PCIe Core indirect regs test
  2.                 ;;      (C) art_zh 2010
  3.                 ;;      <kolibri@jerdev.co.uk>
  4.  
  5.  
  6.   use32              ;
  7.   org    0x0         ;
  8.  
  9.   db     'MENUET01'  ;
  10.   dd     0x01        ;
  11.   dd     START       ;
  12.   dd     I_END       ;
  13.   dd     0x1000      ;
  14.   dd     0x1000      ;
  15.   dd     0x0         ;
  16.   dd     0x0         ;
  17.  
  18. include 'MACROS.INC' ;
  19.  
  20. PCIE_SPACE      equ     0xF0000000
  21. PCIEIND_INDEX   equ     0xF00000E0
  22. PCIEIND_DATA    equ     0xF00000E4
  23. BOX_COLOR       equ     0xE0D8D0
  24.  
  25. START:
  26.  
  27.  
  28.  
  29.  
  30.  
  31. red:
  32.  
  33.     call draw_window
  34.  
  35. still:
  36.     mcall 10            ; event waiting
  37.  
  38.     cmp  eax,1          ; redraw window
  39.     je   red            ;
  40.     cmp  eax,2          ; key pressed?
  41.     je   key            ;
  42.     cmp  eax,3          ; button hit?
  43.     je   button         ;
  44.  
  45.     jmp  still          ; none of that
  46.  
  47. ;---------------------------------------------------------------------
  48.  
  49.  key:                  ; key pressed
  50.    jmp    red
  51.  
  52. ;---------------------------------------------------------------------
  53.  
  54.   button:
  55.     mcall 17            ; get the button ID
  56.     cmp   ah, 1
  57.     jne   .bt2
  58.     mcall -1
  59. .bt2:
  60.         cmp     ah, 2
  61.         jne     .bt3
  62.         dec     [Reg]           ; Rg# decrement
  63.         jmp     red
  64. .bt3:
  65.         cmp     ah, 3
  66.         jne     .bt4
  67.         inc     [Reg]           ; Rg# increment
  68.         jmp     red
  69. .bt4:
  70.         cmp     ah, 4
  71.         jne     .bt5
  72.         add     [Reg],16        ; PgDn
  73.         jmp     red
  74. .bt5:
  75.         cmp     ah, 5
  76.         jne     .bt6
  77.         mov     edx, [Reg]
  78.         cmp     edx, 16
  79.         jb      @f
  80.         sub     edx, 16
  81.         mov     [Reg],edx      ; PgUp
  82.         jmp     red
  83. @@:
  84.         xor     edx, edx
  85.         mov     [Reg], edx
  86.         jmp     red
  87.  
  88. .bt6:
  89.         cmp     ah, 6
  90.         jne     still
  91.         mcall   37, 1           ; get the mouse pointer
  92.         shr     eax, 16         ; only X needed
  93.         sub     eax, 124        ; check the left border
  94.         jb      red
  95.         xor     edx, edx
  96.         mov     ebx, 12
  97.         div     ebx
  98.         cmp     eax, 32         ; check the right border
  99.         jnb     red
  100.         mov     ecx, 31
  101.         sub     ecx, eax         ; reverse the bit order
  102.         mov     ebx, [Rct]
  103.         btc     ebx, ecx        ; invert the bit
  104.         mov     eax, [Reg]
  105.         mov     [Rct], ebx
  106.         call    write_pcieind
  107.  
  108.     jmp   red
  109.  
  110.  
  111. ;------------------------------------------------
  112. print_config_reg:
  113. ;------------------------------------------------
  114.         mov     eax, [Reg]
  115. ;        and     eax, 0x0FF
  116.         mov     ebx, 3*65536+256   ; 3 hex digits
  117.         mov     ecx, eax
  118.         mov     dx,[stX]
  119.         shl     edx,16             ; = X*65536
  120.         mov     dx,[stY]           ; = edx + Y
  121.         mov     esi,0
  122.         mcall 47                   ; print reg#
  123.         mov     ecx, edx
  124.         call    read_pcieind
  125.         mov     edx, ecx
  126.         mov     ecx, eax
  127.         add     edx, 36*65536      ; right column
  128.         mov     ebx, 8*65536+256   ; 8 hex digits
  129.         mcall 47                   ; print config data
  130.         ret
  131.  
  132. ;------------------------------------------------
  133. read_pcieind:
  134. ; in:  [Reg] = reg#  |  out: eax = [Rct] = data
  135. ;------------------------------------------------
  136.         mov     edx,  PCIEIND_INDEX
  137.         xor     eax, eax
  138.         mov     al,  byte [Reg]
  139. ;        or      eax, 0x00020000 ; 2=translate to GPP; 1 = to SB; 0 = GFX (default)
  140.         mov     [edx], eax
  141.         add     dl,  4
  142.         mov     eax, [edx]
  143.         mov     [Rct], eax
  144.         ret
  145.  
  146. ;------------------------------------------------
  147. write_pcieind:
  148. ; in:  [Reg] = reg#; [Rct] = data
  149. ;------------------------------------------------
  150.         mov     edx,  PCIEIND_INDEX
  151.         xor     eax, eax
  152.         mov     al,  byte [Reg]
  153. ; set bits [18:16] as shown above^ to access GPP os SB bridges  ^
  154.         mov     [edx], eax
  155.         add     dl,  4
  156.         mov     eax, [Rct]
  157.         mov     [edx], eax
  158.         sub     dl,  4
  159.         xor     eax, eax        ; reg#1 = SCRATCH
  160.         inc     al
  161.         mov     [edx], eax      ; safely switch the index
  162.         ret
  163.  
  164.  
  165. ;------------------------------------------------
  166.     draw_window:
  167. ;------------------------------------------------
  168.  
  169.  
  170.     mcall 12, 1
  171.     mcall 0, 600*65536+530, 410*65536+290, 0x1494A0B0,,title
  172. ; -----------------------------------------------------------------
  173. ; BUTTONS:   Xleft    Xwid,  Ytop    Yheig
  174.     mcall 8, 370*65536+ 40,  26*65536+ 18, 2, 0x94A0B0 ;  <<
  175.     mcall  ,              ,  51*65536+ 18, 3,          ;  >>
  176.     mcall  , 425*65536+ 90,  26*65536+ 18, 4,          ; Next Page
  177.     mcall  ,              ,  51*65536+ 18, 5,          ; Prev Page
  178.     mcall  , 117*65536+400,  97*65536+ 40, 6,          ; Bits
  179.  
  180.         call    read_pcieind
  181.  
  182.         mov     ebx, bitstr2
  183.         inc     ebx
  184.         mov     edx, [Rct]
  185.         mov     ecx, 0x80000000
  186.         xor     eax, eax
  187. .stringtest:
  188.         test    edx, ecx
  189.         jz      @f
  190.         mov     byte [ebx+eax*2],'I'    ; bit dump
  191.         jmp     .nextbit
  192. @@:
  193.         mov     byte [ebx+eax*2],'0'
  194. .nextbit:
  195.         inc     eax
  196.         shr     ecx, 1
  197.         jnz     .stringtest
  198.  
  199. ; button txt:  X *65536+ Y
  200.     mcall  4, 378*65536+32 ,0x10000000, butstr2,3
  201.     mcall  ,  378*65536+57 ,          , butstr3,
  202.     mcall  ,  436*65536+32 ,          , butstr4,9
  203.     mcall  ,  436*65536+57 ,          , butstr5,
  204.  
  205.     mcall  4, 122*65536+101,0          , bitstr0,65
  206.     mcall  ,  122*65536+110,0          , bitstr1,65
  207.     mcall  ,  122*65536+117,0          , bitstr2,65
  208.     mcall  ,  122*65536+126,0          , bitstr3,65
  209. ; -----------------------------------------------------------------
  210. ;    draw the reg-value box
  211.         mov     ebx, 10*65536+100       ; Xleft | Xwidth
  212.         mov     ecx, 26*65536+250       ; Ytop  | Yheight
  213.         mov     edx, BOX_COLOR
  214.         mcall   13
  215. ;    draw the reg-address box
  216.         mov     ebx, 206*65536+146      ; Xleft | Xwidth
  217.         mov     cx, 44                  ; Yheight only
  218.         mcall   13
  219.  
  220. ;    fill the data box
  221.         mov     bx, 40         ; upper position
  222.         mov     [stY],bx
  223.         mov     eax, [Reg]
  224.         mov     [reg], eax     ; store original#
  225. .print_reg_names:
  226.         call    print_config_reg
  227.         add     [stY],14
  228.         inc     [Reg]
  229.         mov     edx,[reg]
  230.         mov     eax, 16
  231.         add     eax, edx
  232.         cmp     eax,[Reg]
  233.         ja      .print_reg_names
  234.         mov     [Reg], edx      ; restore original#
  235.  
  236. ;   fill the status box
  237.         mcall   4, 210*65536+30,0,str1,12
  238.         mcall   ,  210*65536+44, ,str2,
  239.         mcall   ,  210*65536+56, ,str3,
  240.         call    read_pcieind
  241.         mov     ecx, PCIEIND_DATA
  242.         mov     edx, 300*65536+30
  243.         mov     ebx, 8*65536+256
  244.         mcall   47
  245.         add     dx, 14
  246.         mov     ecx,[Reg]
  247.         mov     esi, 0
  248.         mcall   47
  249.         add     dx,14
  250.         mov     ecx, [Rct]
  251.         mcall   47
  252.  
  253. ;    print extra info
  254.         mov     ebx, 120*65536+170
  255.         xor     ecx, ecx
  256.         mov     edx, info1
  257. @@:
  258.         mcall   4,,,,66
  259.         add     edx, 66
  260.         add     ebx, 14
  261.         cmp     edx, info_end
  262.         jb      @b
  263.  
  264.  
  265.     mcall 12, 2                    
  266.  
  267. ret
  268.  
  269.  
  270. align 4
  271. ;-------------------------------------------------
  272.  
  273.   pix   dd  0x55AACC33
  274.   pxX   dd  200
  275.   pxY   dd  160
  276.   stX   dw  18
  277.   stY   dw  0
  278.   reg   dd  0
  279.  
  280.   Rct   dd  0        ; reg content
  281.   Reg   dd  0x00     ; reg number
  282.  
  283.  
  284.  title db '          RS780 PCIe Core indirect registers ',0
  285. ;------------------------------------------------------------------------------------
  286.  reg_str   db   'Reg#| hex.Value  '
  287. ;------------------------------------------------------------------------------------
  288. str1    db      'bdf address:'
  289. str2    db      'Reg. number:'
  290. str3    db      'Reg.content:'
  291.  
  292.  butstr2 db ' << '
  293.  butstr3 db ' >> '
  294.  butstr4 db 'Next Page'
  295.  butstr5 db 'Prev Page'
  296.  
  297. bitstr0  db     '31',209,205,209,205,209,205,209,205,209,205,209,205,'24',\
  298.                 209,205,209,205,209,205,209,205,209,205,209,205,209,205,'16',\
  299.                 209,'15',205,209,205,209,205,209,205,209,205,209,205,209,'8',\
  300.                 205,'7',209,205,209,205,209,205,209,205,209,205,209,205,209,'0',184
  301. bitstr1  db     179,' | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ',179
  302. bitstr2  db     179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179,'9 8 7 6',\
  303.                 179,'5 4 3 2',179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179
  304. bitstr3  db     212,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
  305.                 205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
  306.                 205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
  307.                 205,207,205,207,205,207,205,207,205,207,205,190
  308.  
  309. info1   db      '------------- PCIe Core indirect registers shortlist -------------'
  310.         db      '|                                                                |'
  311. info2   db      '| reg 13 - timeout status;   28,29 - line control                |'
  312.         db      '| reg 41 - buffer status;    42 - decoder errors                 |'
  313.         db      '| reg 46 - symbol control;   60-62  impedance/strength control   |'
  314.         db      '| reg 71-78 latency control; 82-8F  ???                          |'
  315.         db      '| reg EF - ERROR RESET;      F0-FF  error counters               |'
  316.         db      '------------------------------------------------------------------'
  317. info_end:
  318.  
  319. I_END:          ; end of program
  320.  
  321.         rd 256
  322.  
  323. align 256
  324. st_0:
  325.