Subversion Repositories Kolibri OS

Rev

Rev 9053 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1.  
  2. SECTION .text
  3.  
  4. global go.os.Sleep
  5. global go.os.Event
  6. global go.os.GetButtonID
  7. global go.os.CreateButton
  8. global go.os.Exit
  9. global go.os.Redraw
  10. global go.os.Window
  11. global go.os.WriteText
  12. global go.os.GetTime
  13. global go.os.DrawLine
  14. global go.os.DrawBar
  15. global go.os.DebugOutHex
  16. global go.os.DebugOutChar
  17. global go.os.DebugOutStr
  18. global go.os.WriteText2
  19.  
  20. global runtime.memequal32..f
  21. runtime.memequal32..f:
  22.     ret
  23.  
  24. global runtime.memequal8..f
  25. runtime.memequal8..f:
  26.     ret
  27.  
  28. global runtime.memequal
  29. runtime.memequal:
  30.     ret
  31.  
  32. global go.os.SetByteString
  33. go.os.SetByteString:
  34.   push ebp
  35.   mov ebp, esp
  36.   mov eax, [ebp+8]
  37.   mov ebx, [ebp+12]
  38.   mov ecx, [ebp+16]
  39.   mov dh, [ebp+20]
  40.   mov byte[eax+ecx], dh
  41.   mov esp, ebp
  42.   pop ebp
  43.   ret
  44.  
  45. global __go_runtime_error
  46. global __go_register_gc_roots
  47. global __unsafe_get_addr
  48.  
  49. __unsafe_get_addr:
  50.   push ebp
  51.   mov ebp, esp
  52.   mov eax, [ebp+8]
  53.   mov esp, ebp
  54.   pop ebp
  55.   ret
  56.  
  57. __go_register_gc_roots:
  58. __go_runtime_error:
  59.   ret
  60.  
  61. global runtime.writeBarrier
  62. global runtime.gcWriteBarrier
  63. runtime.writeBarrier:
  64.     mov eax, [esp+8]
  65.     mov ebx, [esp+12]
  66.     mov dword[eax], ebx
  67.     ret
  68.  
  69. global runtime.strequal..f
  70. runtime.strequal..f:
  71.     mov eax,[esp+8]
  72.     mov ebx,[esp+16]
  73.     mov ecx,0
  74.     strcmp_loop:
  75.         mov byte dl,[eax+ecx]
  76.         mov byte dh,[ebx+ecx]
  77.         inc ecx
  78.         cmp dl,0
  79.         je strcmp_end_0
  80.         cmp byte dl,dh
  81.         je strcmp_loop
  82.         jl strcmp_end_1
  83.         jg strcmp_end_2
  84.     strcmp_end_0:
  85.         cmp dh,0
  86.         jne strcmp_end_1
  87.         xor ecx,ecx
  88.         ret
  89.     strcmp_end_1:
  90.         mov ecx,1
  91.         ret
  92.     strcmp_end_2:
  93.         mov ecx,-1
  94.         ret
  95.  
  96. runtime.gcWriteBarrier:
  97.     mov eax, [esp+8]
  98.     mov ebx, [esp+12]
  99.     mov dword[eax], ebx
  100.     ret
  101.  
  102. global runtime.goPanicIndex
  103. runtime.goPanicIndex:
  104.     ret
  105.  
  106. global runtime.registerGCRoots
  107. runtime.registerGCRoots:
  108.     ret
  109.  
  110. global memcmp
  111. memcmp:
  112.     push ebp
  113.     mov ebp,esp
  114.     mov     esi, [ebp+8]    ; Move first pointer to esi
  115.     mov     edi, [ebp+12]    ; Move second pointer to edi
  116.     mov     ecx, [ebp+16]    ; Move length to ecx
  117.  
  118.     cld                         ; Clear DF, the direction flag, so comparisons happen
  119.                                 ; at increasing addresses
  120.     cmp     ecx, ecx            ; Special case: If length parameter to memcmp is
  121.                                 ; zero, don't compare any bytes.
  122.     repe cmpsb                  ; Compare bytes at DS:ESI and ES:EDI, setting flags
  123.                                 ; Repeat this while equal ZF is set
  124.     setz    al
  125.     mov esp,ebp
  126.     pop ebp
  127.     ret
  128.  
  129.  
  130. go.os.Sleep:
  131.     push ebp
  132.     mov ebp,esp
  133.         mov eax, 5
  134.         mov ebx, [ebp+8]
  135.         int 0x40
  136.     mov esp,ebp
  137.     pop ebp
  138.     ret
  139.  
  140.  
  141. go.os.Event:
  142.         mov eax, 10
  143.         int 0x40
  144.         ret
  145.  
  146. go.os.GetButtonID:
  147.   mov   eax,17
  148.   int   0x40
  149.   test  al,al
  150.   jnz   .no_button
  151.   shr   eax,8
  152.   ret
  153. .no_button:
  154.   xor   eax,eax
  155.   dec   eax
  156.   ret
  157.  
  158. go.os.Exit:
  159.         mov eax, -1
  160.         int 0x40
  161.     ret
  162.  
  163. go.os.Redraw:
  164.     push ebp
  165.     mov ebp,esp
  166.         mov eax, 12
  167.         mov ebx, [ebp+8]
  168.         int 0x40
  169.     mov esp,ebp
  170.     pop ebp
  171.     ret
  172.  
  173. go.os.Window:
  174.     push ebp
  175.     mov ebp,esp
  176.         mov ebx, [ebp+8]
  177.         shl ebx, 16
  178.         or ebx, [ebp+16]
  179.         mov ecx, [ebp+12]
  180.         shl ecx, 16
  181.         or ecx, [ebp+20]
  182.         mov edx, 0x14
  183.         shl edx, 24
  184.         or edx, 0xFFFFFF
  185.         mov esi, 0x808899ff
  186.         mov edi, [ebp+24]
  187.         xor eax, eax
  188.         int 0x40
  189.     mov esp,ebp
  190.     pop ebp
  191.     ret
  192.  
  193. go.os.WriteText:
  194.     push ebp
  195.     mov ebp,esp
  196.     mov eax,4
  197.     mov ebx,[ebp+8]
  198.     shl ebx,16
  199.     mov bx,[ebp+12]
  200.     mov ecx,[ebp+16]
  201.     mov edx,[ebp+20]
  202.     mov esi,[ebp+24]
  203.     int 0x40
  204.     mov esp,ebp
  205.     pop ebp
  206.     ret
  207.  
  208. go.os.WriteText2:
  209.     push ebp
  210.     mov ebp,esp
  211.     mov eax,47
  212.     mov ebx,[ebp+8]
  213.     shl ebx,16
  214.     mov ecx,[ebp+12]
  215.     mov edx,[ebp+20]
  216.     shl edx,16
  217.     add edx, [ebp+24]
  218.     mov esi,[ebp+28]
  219.     int 0x40
  220.     mov esp,ebp
  221.     pop ebp
  222.     ret
  223.  
  224. go.os.DrawLine:
  225.     push ebp
  226.     mov ebp,esp
  227.     mov ebx,[ebp+8]
  228.     shl ebx,16
  229.     mov bx,[ebp+16]
  230.     mov ecx,[ebp+12]
  231.     shl ecx,16
  232.     mov cx,[ebp+20]
  233.     mov edx,[ebp+24]
  234.     mov eax,38
  235.     int 0x40
  236.     mov esp,ebp
  237.     pop ebp
  238.     ret
  239.  
  240. go.os.DrawBar:
  241.     push ebp
  242.     mov ebp,esp
  243.     mov   eax,13
  244.     mov   ebx,[ebp+8]
  245.     shl   ebx,16
  246.     mov   bx,[ebp+16]
  247.     mov   ecx,[ebp+12]
  248.     shl   ecx,16
  249.     mov   cx,[ebp+20]
  250.     mov   edx,[ebp+24]
  251.     int   0x40
  252.     mov esp,ebp
  253.     pop ebp
  254.     ret
  255.  
  256. go.os.GetTime:
  257.     mov eax, 3
  258.     int 0x40
  259.     ret
  260.  
  261. go.os.DebugOutHex:
  262.     mov eax, [esp+4]
  263.     mov   edx, 8
  264.     .new_char:
  265.     rol   eax, 4
  266.     movzx ecx, al
  267.     and   cl,  0x0f
  268.     mov   cl,  [__hexdigits + ecx]
  269.     pushad
  270.     mov eax, 63
  271.     mov ebx, 1
  272.     int 0x40
  273.     popad
  274.     dec   edx
  275.     jnz   .new_char
  276.     ret
  277.  
  278. go.os.DebugOutChar:
  279.    mov al, [esp+4]
  280.    pushf
  281.    pushad
  282.    mov  cl,al
  283.    mov  eax,63
  284.    mov  ebx,1
  285.    int  0x40
  286.    popad
  287.    popf
  288.    ret
  289.  
  290. go.os.DebugOutStr:
  291.    mov  edx,[esp+4]
  292.    mov  eax,63
  293.    mov  ebx,1
  294.  m2:
  295.    mov  cl, [edx]
  296.    test cl,cl
  297.    jz   m1
  298.    int  40h
  299.    inc  edx
  300.    jmp  m2
  301.  m1:
  302.    ret
  303.  
  304. go.os.CreateButton:
  305.   push  ebp
  306.   mov   ebp,esp
  307.   mov   eax, 8
  308.   mov ebx, [ebp+8]
  309.   shl ebx, 16
  310.   mov bx, [ebp+16]
  311.   mov ecx, [ebp+12]
  312.   shl ecx, 16
  313.   mov cx, [ebp+20]
  314.   mov edx, [ebp+24]
  315.   mov esi, [ebp+28]
  316.   int   0x40
  317.   mov   esp,ebp
  318.   pop   ebp
  319.   ret
  320.  
  321. SECTION .data
  322. __hexdigits:
  323.   db '0123456789ABCDEF'
  324.  
  325. __test:
  326.     dd __hexdigits
  327.     dd 15