Subversion Repositories Kolibri OS

Rev

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

  1.                 ;;      rs780 HT misc registers 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. PCIE_ADDR       equ     0xF0000000      ; bus 0, dev 0 fn 0 -- don't change!
  22. MISC_NB_INDEX   equ     0xF0000060      ; index reg for inderect space access
  23. MISC_NB_DAT     equ     0xF0000064      ; inderect space data register
  24. BOX_COLOR       equ     0xE0D8D0
  25.  
  26. START:
  27.  
  28.  
  29.  
  30.  
  31.  
  32. red:
  33.  
  34.     call draw_window
  35.  
  36. still:
  37.     mcall 10            ; event waiting
  38.  
  39.     cmp  eax,1          ; redraw window
  40.     je   red            ;
  41.     cmp  eax,2          ; key pressed?
  42.     je   key            ;
  43.     cmp  eax,3          ; button hit?
  44.     je   button         ;
  45.  
  46.     jmp  still          ; none of that
  47.  
  48. ;---------------------------------------------------------------------
  49.  
  50.  key:                  ; key pressed
  51.    jmp    red
  52.  
  53. ;---------------------------------------------------------------------
  54.  
  55.   button:
  56.     mcall 17            ; get the button ID
  57.     cmp   ah, 1
  58.     jne   .bt2
  59.     mcall -1
  60. .bt2:
  61.         cmp     ah, 2
  62.         jne     .bt3
  63.         dec     [Reg]     ; Rg# decrement
  64.         jmp     red
  65. .bt3:
  66.         cmp     ah, 3
  67.         jne     .bt4
  68.         inc     [Reg]     ; Rg# increment
  69.         jmp     red
  70. .bt4:
  71.         cmp     ah, 4
  72.         jne     .bt5
  73.         add     [Reg],16      ; PgDn
  74.         jmp     red
  75. .bt5:
  76.         cmp     ah, 5
  77.         jne     .bt6
  78.         mov     edx, [Reg]
  79.         cmp     edx, 16
  80.         jb      @f
  81.         sub     edx, 16
  82.         mov     [Reg],edx      ; PgUp - general case
  83.         jmp     red
  84. @@:
  85.         xor     edx, edx
  86.         mov     [Reg], edx     ; PgUp - the upper page
  87.         jmp     red
  88.  
  89. .bt6:
  90.         cmp     ah, 6
  91.         jne     still
  92.         mcall   37, 1           ; get the mouse pointer
  93.         shr     eax, 16         ; only X needed
  94.         sub     eax, 124        ; check the left border
  95.         jb      red
  96.         xor     edx, edx
  97.         mov     ebx, 12
  98.         div     ebx
  99.         cmp     eax, 32         ; check the right border
  100.         jnb     red
  101.         mov     ecx, 31
  102.         sub     ecx, eax        ; reverse the bit order
  103.         mov     ebx, [Rct]
  104.         btc     ebx, ecx        ; invert the bit
  105.         mov     [Rct], ebx
  106.         call    write_misc
  107.  
  108.     jmp   red
  109.  
  110.  
  111. ;------------------------------------------------
  112. print_config_reg:
  113. ;------------------------------------------------
  114.         mov     eax, [Reg]
  115.         and     eax, 0x07F
  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           ; store edx
  124.         call    read_misc          ; get content
  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_misc:
  134. ; in:  [Reg] = reg#  |  out: eax = [Rct] = data
  135. ;------------------------------------------------
  136.         mov     edx,  MISC_NB_INDEX
  137.         mov     al,  byte[Reg]
  138.         and     eax, 0x07F
  139.         mov     [edx], eax
  140.         add     dl,  4
  141.         mov     eax, [edx]
  142.         mov     [Rct], eax
  143.         ret
  144. ;------------------------------------------------
  145. write_misc:
  146. ; in:  [Reg] = reg#; [Rct] = data
  147. ;------------------------------------------------
  148.         mov     edx,  MISC_NB_INDEX
  149.         mov     al,  byte[Reg]
  150.         and     eax, 0x07F
  151.         or      eax, 0x080    ; WriteEnable bit
  152.         mov     [edx], eax
  153.         add     dl,  4
  154.         mov     eax, [Rct]
  155.         mov     [edx], eax
  156.         sub     dl,  4
  157.         xor     eax,   eax
  158.         mov     [edx], eax    ; safety precaution
  159.         ret
  160.  
  161.  
  162. ;------------------------------------------------
  163.     draw_window:
  164. ;------------------------------------------------
  165.  
  166.  
  167.     mcall 12, 1
  168.     mcall 0, 72*65536+530, 410*65536+290, 0x14A0B8A0,,title
  169. ; -----------------------------------------------------------------
  170. ; BUTTONS:   Xleft    Xwid,  Ytop    Yheig
  171.     mcall 8, 370*65536+ 40,  26*65536+ 18, 2, 0xA0B8A0 ;  <<
  172.     mcall  ,              ,  51*65536+ 18, 3,          ;  >>
  173.     mcall  , 425*65536+ 90,  26*65536+ 18, 4,          ; Next Page
  174.     mcall  ,              ,  51*65536+ 18, 5,          ; Prev Page
  175.     mcall  ,117*65536+ 400,  97*65536+ 40, 6,          ; Bits
  176.  
  177.         call    read_misc       ; read the current reg
  178.  
  179.         mov     ebx, bitstr2
  180.         inc     ebx
  181.         mov     edx, [Rct]
  182.         mov     ecx, 0x80000000
  183.         xor     eax, eax
  184. .stringtest:
  185.         test    edx, ecx
  186.         jz      @f
  187.         mov     byte [ebx+eax*2],'I'    ; bit dump
  188.         jmp     .nextbit
  189. @@:
  190.         mov     byte [ebx+eax*2],'0'
  191. .nextbit:
  192.         inc     eax
  193.         shr     ecx, 1
  194.         jnz     .stringtest
  195.  
  196. ; button txt:  X *65536+ Y
  197.     mcall  4, 378*65536+32 ,0x10000000, butstr2,3
  198.     mcall  ,  378*65536+57 ,          , butstr3,
  199.     mcall  ,  436*65536+32 ,          , butstr4,9
  200.     mcall  ,  436*65536+57 ,          , butstr5,
  201.  
  202.     mcall  4, 122*65536+101,0          , bitstr0,65
  203.     mcall  ,  122*65536+110,0          , bitstr1,65
  204.     mcall  ,  122*65536+117,0          , bitstr2,65
  205.     mcall  ,  122*65536+126,0          , bitstr3,65
  206. ; -----------------------------------------------------------------
  207. ;    draw the reg-value box
  208.         mov     ebx, 10*65536+100       ; Xleft | Xwidth
  209.         mov     ecx, 26*65536+250       ; Ytop  | Yheight
  210.         mov     edx, BOX_COLOR
  211.         mcall   13
  212. ;    draw the reg-address box
  213.         mov     ebx, 206*65536+146      ; Xleft | Xwidth
  214.         mov     cx, 44                  ; Yheight only
  215.         mcall   13
  216.  
  217. ;    fill the data box
  218.         mov     bx, 40         ; upper position
  219.         mov     [stY],bx
  220.         mov     eax, [Reg]     ; store original#
  221.         mov     [reg], eax
  222. .print_reg_names:
  223.         call    print_config_reg
  224.         add     [stY],14
  225.         inc     [Reg]
  226.         mov     edx,[reg]
  227.         mov     eax, 16
  228.         add     eax, edx
  229.         cmp     eax,[Reg]
  230.         ja      .print_reg_names
  231.         mov     [Reg], edx      ; restore original#
  232.  
  233. ;   fill the status box
  234.         mcall   4, 210*65536+30,0,str1,12
  235.         mcall   ,  210*65536+44, ,str2,
  236.         mcall   ,  210*65536+56, ,str3,
  237.         call    read_misc               ; refresh the content
  238.         mov     ecx, MISC_NB_DAT
  239.         mov     edx, 300*65536+30
  240.         mov     ebx, 8*65536+256
  241.         mcall   47
  242.         add     dx, 14
  243.         mov     ecx,[Reg]
  244.         mov     esi, 0
  245.         mcall   47
  246.         add     dx,14
  247.         mov     ecx, [Rct]
  248.         mcall   47
  249.  
  250. ;     print extra info
  251.         mov     ebx, 120*65536+160
  252.         xor     ecx, ecx
  253.         mov     edx, info1
  254. @@:
  255.         mcall   4,,,,66
  256.         add     edx, 66
  257.         add     ebx, 14
  258.         cmp     edx, info_end
  259.         jb      @b
  260.  
  261.     mcall 12, 2                    ; äã­ªæ¨ï 12: á®®¡é¨âì Ž‘ ®¡ ®âà¨á®¢ª¥ ®ª­ 
  262.  
  263. ret
  264.  
  265.  
  266. align 4
  267. ;-------------------------------------------------
  268.  
  269.   pix   dd  0x55AACC33
  270.   pxX   dd  200
  271.   pxY   dd  160
  272.   stX   dw  18
  273.   stY   dw  0
  274.   reg   dd  0        ; reg-storage
  275.  
  276.   Rct   dd  0        ; reg content
  277.   Reg   dd  0x00     ; reg number
  278.  
  279.  
  280.  title db '                       RS780 NB MISC Indirect Registers ',0
  281. ;------------------------------------------------------------------------------------
  282.  reg_str   db   'Reg#| hex.Value  '
  283. ;------------------------------------------------------------------------------------
  284. str1    db      'access addr:'
  285. str2    db      'Reg. number:'
  286. str3    db      'Reg.content:'
  287.  
  288.  butstr2 db ' << '
  289.  butstr3 db ' >> '
  290.  butstr4 db 'Next Page'
  291.  butstr5 db 'Prev Page'
  292.  
  293. bitstr0  db     '31',209,205,209,205,209,205,209,205,209,205,209,205,'24',\
  294.                 209,205,209,205,209,205,209,205,209,205,209,205,209,205,'16',\
  295.                 209,'15',205,209,205,209,205,209,205,209,205,209,205,209,'8',\
  296.                 205,'7',209,205,209,205,209,205,209,205,209,205,209,205,209,'0',184
  297. bitstr1  db     179,' | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ',179
  298. bitstr2  db     179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179,'9 8 7 6',\
  299.                 179,'5 4 3 2',179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179
  300. bitstr3  db     212,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
  301.                 205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
  302.                 205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
  303.                 205,207,205,207,205,207,205,207,205,207,205,190
  304.  
  305. info1   db      '---------------- Indirect registers shortlist --------------------'
  306.         db      '                                                                  '
  307. info2   db      ' reg00: hides acces to pcie config registers and some hardware    '
  308.         db      ' reg08,0B : PCIe link config & IOC control                        '
  309.         db      ' reg0C : select/disable bridges                                   '
  310.         db      ' reg32-39, 22-26 : PCIE_NBCONFIG bits                             '
  311.         db      ' reg40-43 : GPIO pads   | regs74-79 : SCRATCH                     '
  312.         db      '------------------------------------------------------------------'
  313. info_end:
  314.  
  315. I_END:          ; end of program
  316.  
  317.         rd 256
  318.  
  319. align 256
  320. st_0:
  321.