Subversion Repositories Kolibri OS

Rev

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

  1.                         ;;      ZiS test -- Art J    ;;
  2.  
  3.  
  4.   use32              ;
  5.   org    0x0         ;
  6.  
  7.   db     'MENUET01'  ;
  8.   dd     0x01        ;
  9.   dd     START       ;
  10.   dd     I_END       ;
  11.   dd     0x1000      ;
  12.   dd     0x1000      ;
  13.   dd     0x0         ;
  14.   dd     0x0         ;
  15.  
  16. include 'MACROS.INC' ;
  17.  
  18. PCIE_SPACE      equ     0xF0000000
  19. PCIE_ADDR       equ     0xF00A3000    ; bdf0:20.3  = SB7xx LPC Config Registers
  20. BOX_COLOR       equ     0xE0D8D0
  21.  
  22. START:
  23.  
  24.         mov     edx, 0x88
  25.         add     edx, PCIE_ADDR
  26.         mov     eax, 0x00010101
  27.         mov     [edx], eax
  28.  
  29.  
  30. red:
  31.  
  32.     call draw_window
  33.  
  34. still:
  35.     mcall 10            ; event waiting
  36.  
  37.     cmp  eax,1          ; redraw window
  38.     je   red            ;
  39.     cmp  eax,2          ; key pressed?
  40.     je   key            ;
  41.     cmp  eax,3          ; button hit?
  42.     je   button         ;
  43.  
  44.     jmp  still          ; none of that
  45.  
  46. ;---------------------------------------------------------------------
  47.  
  48.  key:                  ; key pressed
  49.    jmp    red
  50.  
  51. ;---------------------------------------------------------------------
  52.  
  53.   button:
  54.     mcall 17            ; get the button ID
  55.     cmp   ah, 1
  56.     jne   .bt2
  57.     mcall -1
  58. .bt2:
  59.         cmp     ah, 2
  60.         jne     .bt3
  61.         sub     [Reg],4   ; Rg# decrement
  62.         jmp     red
  63. .bt3:
  64.         cmp     ah, 3
  65.         jne     .bt4
  66.         add     [Reg],4   ; Rg# increment
  67.         jmp     red
  68. .bt4:
  69.         cmp     ah, 4
  70.         jne     .bt5
  71.         add     [Reg],4*16      ; PgDn
  72.         jmp     red
  73. .bt5:
  74.         cmp     ah, 5
  75.         jne     .bt6
  76.         mov     edx, [Reg]
  77.         cmp     edx, 4*16
  78.         jb      @f
  79.         sub     edx, 4*16
  80.         mov     [Reg],edx      ; PgUp
  81.         jmp     red
  82. @@:
  83.         xor     edx, edx
  84.         mov     [Reg], edx
  85.         jmp     red
  86.  
  87. .bt6:
  88.         cmp     ah, 6
  89.         jne     still
  90.         mcall   37, 1           ; get the mouse pointer
  91.         shr     eax, 16         ; only X needed
  92.         sub     eax, 124        ; check the left border
  93.         jb      red
  94.         xor     edx, edx
  95.         mov     ebx, 12
  96.         div     ebx
  97.         cmp     eax, 32         ; check the right border
  98.         jnb     red
  99.         mov     ecx, 31
  100.         sub     ecx, eax         ; reverse the bit order
  101.         mov     ebx, [Rct]
  102.         btc     ebx, ecx        ; invert the bit
  103.         mov     eax, [Reg]
  104.         add     eax, PCIE_ADDR
  105.         mov     [Rct], ebx
  106.         mov     [eax], ebx
  107.  
  108.     jmp   red
  109.  
  110.  
  111. ;------------------------------------------------
  112. print_config_reg:
  113. ;------------------------------------------------
  114.         mov     eax, [reg]
  115.         and     eax, 0x0FFC
  116.         mov     ebx, 4*65536+256   ; 4 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     eax, [reg]
  124.         add     eax, PCIE_ADDR
  125.         mov     ecx, [eax]
  126.         add     edx, 36*65536      ; right column
  127.         mov     ebx, 8*65536+256   ; 8 hex digits
  128.         mcall 47                   ; print config data
  129.         ret
  130. ;------------------------------------------------
  131. read_nbconfig:
  132. ; in:  dl = reg#  |  out: eax = data
  133. ;------------------------------------------------
  134.         mov     ebx, 0xF0000000
  135.         and     edx, 0x0FC
  136.         mov     eax, dword [ebx+edx]
  137.         ret
  138. ;------------------------------------------------
  139. write_nbconfig:
  140. ; in: dl = reg#; eax = data
  141. ;------------------------------------------------
  142.         mov     ebx, 0xF0000000
  143.         and     edx, 0x0FC
  144.         mov     dword [ebx+edx], eax
  145.         ret
  146.  
  147. ;------------------------------------------------
  148. ;read_htiunbind:
  149. ; in:  [HTr] = reg#  |  out: eax = data
  150. ;------------------------------------------------
  151. ;        mov     dl,  0x94
  152. ;        mov     al,  byte[HTr]
  153. ;        and     eax, 0x07C
  154. ;        call    write_nbconfig
  155. ;        add     dl,  4
  156. ;        call    read_nbconfig
  157. ;        ret
  158. ;------------------------------------------------
  159. ;write_htiunbind:
  160. ; in:  [HTr] = reg#; ecx = data
  161. ;------------------------------------------------
  162. ;        mov     dl,  0x94
  163. ;        mov     al,  byte[Reg]
  164. ;        and     eax, 0x017C
  165. ;        call    write_nbconfig
  166. ;        add     dl,  4
  167. ;        mov     ecx, eax
  168. ;        call    write_nbconfig
  169. ;        sub     dl,  4
  170. ;        mov     eax, 0x0
  171. ;        call    write_nbconfig
  172. ;        ret
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180. ;------------------------------------------------
  181.     draw_window:
  182. ;------------------------------------------------
  183.  
  184.  
  185.     mcall 12, 1
  186.     mcall 0, 600*65536+530, 120*65536+290, 0x1499AAA0,,title
  187. ; -----------------------------------------------------------------
  188. ; BUTTONS:   Xleft    Xwid,  Ytop    Yheig
  189.     mcall 8, 370*65536+ 40,  26*65536+ 18, 2, 0x99AABB ;  <<
  190.     mcall  ,              ,  51*65536+ 18, 3,          ;  >>
  191.     mcall  , 425*65536+ 90,  26*65536+ 18, 4,          ; PCIe Cfg
  192.     mcall  ,              ,  51*65536+ 18, 5,          ; NB config
  193.     mcall  , 117*65536+400,  97*65536+ 40, 6,          ; Bits
  194.  
  195.         mov     edx, [Reg]
  196.         add     edx, PCIE_ADDR          ; reading the current reg content
  197.         mov     ecx, [edx]
  198.         mov     [Rct], ecx
  199.  
  200.         mov     ebx, bitstr2
  201.         inc     ebx
  202.         mov     edx, [Rct]
  203.         mov     ecx, 0x80000000
  204.         xor     eax, eax
  205. .stringtest:
  206.         test    edx, ecx
  207.         jz      @f
  208.         mov     byte [ebx+eax*2],'I'    ; bit dump
  209.         jmp     .nextbit
  210. @@:
  211.         mov     byte [ebx+eax*2],'0'
  212. .nextbit:
  213.         inc     eax
  214.         shr     ecx, 1
  215.         jnz     .stringtest
  216.  
  217. ; button txt:  X *65536+ Y
  218.     mcall  4, 378*65536+32 ,0x10000000, butstr2,3
  219.     mcall  ,  378*65536+57 ,          , butstr3,
  220.     mcall  ,  436*65536+32 ,          , butstr4,9
  221.     mcall  ,  436*65536+57 ,          , butstr5,
  222.  
  223.     mcall  4, 122*65536+101,0          , bitstr0,65
  224.     mcall  ,  122*65536+110,0          , bitstr1,65
  225.     mcall  ,  122*65536+117,0          , bitstr2,65
  226.     mcall  ,  122*65536+126,0          , bitstr3,65
  227. ; -----------------------------------------------------------------
  228. ;    draw the reg-value box
  229.         mov     ebx, 10*65536+100       ; Xleft | Xwidth
  230.         mov     ecx, 26*65536+250       ; Ytop  | Yheight
  231.         mov     edx, BOX_COLOR
  232.         mcall   13
  233. ;    draw the reg-address box
  234.         mov     ebx, 206*65536+146      ; Xleft | Xwidth
  235.         mov     cx, 44                  ; Yheight only
  236.         mcall   13
  237. ;    draw ZiS status box
  238. ;        mov     ebx, 206*65536+274      ; Xleft | Xwidth
  239. ;        mov     ecx,  84*65536+ 64      ; Ytop  | Yheight
  240. ;        mcall   13
  241. ;    draw the dump box
  242. ;        mov     ebx, 206*65536+274      ; Xleft | Xwidth
  243. ;        mov     ecx, 190*65536+232      ; Ytop  | Yheight
  244. ;        mcall   13
  245.  
  246. ;    fill the data box
  247.         mov     ebx, [Reg]
  248.         mov     [reg],ebx
  249.         mov     bx, 40         ; upper position
  250.         mov     [stY],bx
  251. .print_reg_names:
  252.         call    print_config_reg
  253.         add     [stY],14
  254.         add     [reg], 4
  255.         mov     edx,[Reg]
  256.         add     edx,16*4
  257.         cmp     edx,[reg]
  258.         ja      .print_reg_names
  259.  
  260. ;   fill the status box
  261.         mcall   4, 210*65536+30,0,str1,12
  262.         mcall   ,  210*65536+44, ,str2,
  263.         mcall   ,  210*65536+56, ,str3,
  264.         mov     ecx, PCIE_ADDR
  265.         mov     edx, 300*65536+30
  266.         mov     ebx, 8*65536+256
  267.         mcall   47
  268.         add     dx, 14
  269.         mov     ecx,[Reg]
  270.         mov     esi, 0
  271.         mcall   47
  272.         add     dx,14
  273.         mov     ecx, [Rct]
  274.         mcall   47
  275.  
  276. ;    print extra info
  277.         mov     ebx, 120*65536+180
  278.         xor     ecx, ecx
  279.         mov     edx, info1
  280. @@:
  281.         mcall   4,,,,66
  282.         add     edx, 66
  283.         add     ebx, 14
  284.         cmp     edx, info_end
  285.         jb      @b
  286.  
  287.  
  288.     mcall 12, 2                    ; äã­ªæ¨ï 12: á®®¡é¨âì Ž‘ ®¡ ®âà¨á®¢ª¥ ®ª­ 
  289.  
  290. ret
  291.  
  292.  
  293. align 4
  294. ;-------------------------------------------------
  295.  
  296.   pix   dd  0x55AACC33
  297.   pxX   dd  200
  298.   pxY   dd  160
  299.   stX   dw  18
  300.   stY   dw  0
  301.   reg   dd  0
  302.  
  303.   Rct   dd  0        ; reg content
  304.   Reg   dd  0x00     ; reg number
  305.  
  306.  
  307.  title db '          SB710 LPC Config Registers - LPC_Reg ',0
  308. ;------------------------------------------------------------------------------------
  309.  reg_str   db   'Reg#| hex.Value  '
  310. ;------------------------------------------------------------------------------------
  311. str1    db      'bdf address:'
  312. str2    db      'Reg. number:'
  313. str3    db      'Reg.content:'
  314.  
  315.  butstr2 db ' << '
  316.  butstr3 db ' >> '
  317.  butstr4 db 'Next Page'
  318.  butstr5 db 'Prev Page'
  319.  
  320. bitstr0  db     '31',209,205,209,205,209,205,209,205,209,205,209,205,'24',\
  321.                 209,205,209,205,209,205,209,205,209,205,209,205,209,205,'16',\
  322.                 209,'15',205,209,205,209,205,209,205,209,205,209,205,209,'8',\
  323.                 205,'7',209,205,209,205,209,205,209,205,209,205,209,205,209,'0',184
  324. bitstr1  db     179,' | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ',179
  325. bitstr2  db     179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179,'9 8 7 6',\
  326.                 179,'5 4 3 2',179,'1 0 9 8',179,'7 6 5 4',179,'3 2 1 0',179
  327. bitstr3  db     212,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
  328.                 205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
  329.                 205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,205,207,\
  330.                 205,207,205,207,205,207,205,207,205,207,205,190
  331.  
  332. info1   db      '--------------------------- extra info ---------------------------'
  333. info2   db      '| reg 00[31:16] (DeviceID): 439D = SB7100/710/750 LPC bus        |'
  334.         db      '| reg                                                            |'
  335.         db      '| reg                                                            |'
  336.         db      '| reg                                                            |'
  337.         db      '------------------------------------------------------------------'
  338. info_end:
  339.  
  340. I_END:          ; end of program
  341.  
  342.         rd 256
  343.  
  344. align 256
  345. st_0:
  346.