Subversion Repositories Kolibri OS

Rev

Rev 1997 | Rev 2484 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;
  2. ;   DEBUG BOARD for APPLICATIONS and KERNEL DEVELOPMENT
  3. ;
  4. ;   See f63
  5. ;
  6. ;   Compile with FASM for Menuet
  7. ;
  8. WRITE_LOG  equ 1
  9.  
  10. include 'lang.inc'
  11.  
  12.    use32
  13.    org    0x0
  14.    db     'MENUET01'              ; 8 byte id
  15.    dd     0x01                    ; header version
  16.    dd     START                   ; start of code
  17.    dd     I_END                   ; size of image
  18.    dd     mem                   ; memory for app
  19.    dd     mem                   ; esp
  20.    dd     filename , 0x0          ; I_Param , I_Icon
  21. include '../../../macros.inc'
  22. include 'debug.inc'
  23. purge newline
  24. MAXSTRINGS = 16
  25. TMP = 80*(MAXSTRINGS+1)
  26.  
  27. START:                          ; start of execution
  28.         mov     edi, filename
  29.         cmp     byte [edi], 0
  30.         jnz     param
  31.         mov     esi, default_filename
  32. @@:
  33.         lodsb
  34.         stosb
  35.         test    al, al
  36.         jnz     @b
  37. param:
  38.  
  39. ; allow user to see messages written before start
  40. ;     mov  ecx,4096
  41. ;    flush:
  42. ;     mov  eax,63
  43. ;     mov  ebx,2
  44. ;     mcall
  45. ;     loop flush
  46.  
  47.      mov  ecx, TMP
  48.      xor  eax, eax
  49.      mov  edi, [targ]
  50.      rep  stosb
  51.  
  52.      mov  [tmp1],'x'
  53.      mov  [tmp2],'x'
  54.  
  55.      mov  eax,14
  56.      mcall
  57.      and  eax,0xffff0000
  58.      sub  eax,399 shl 16
  59.      add  eax,399
  60.      mov  [xstart],eax
  61.  
  62.      mov  eax,48
  63.      mov  ebx,3
  64.      mov  ecx,sc
  65.      mov  edx,sizeof.system_colors
  66.      mcall
  67.   if WRITE_LOG
  68.      mov  esi, filename
  69.      call CreateFile
  70.   end if
  71.  
  72.   red:
  73.      call draw_window
  74.  
  75. still:
  76.  
  77.     mov  eax,23                 ; wait here for event
  78.     mov  ebx,1
  79.     mcall
  80.  
  81.     cmp  eax,1                  ; redraw request ?
  82.     je   red
  83.     cmp  eax,2                  ; key in buffer ?
  84.     je   key
  85.     cmp  eax,3                  ; button in buffer ?
  86.     je   button
  87.  
  88.     mov  eax,63
  89.     mov  ebx,2
  90.     mcall
  91.  
  92.     cmp  ebx,1
  93.     jne  still
  94.  
  95.   new_data:
  96.   if WRITE_LOG
  97.      pusha
  98.      mov  [tmp], al
  99.      mov  edx, tmp
  100.      mov  ecx, 1
  101.      mov  esi, filename
  102.   .write_to_logfile:
  103.      call WriteToFile
  104.      cmp  eax, 5
  105.      jne  @f
  106.      mov  esi, filename
  107.      mov  [filepos], 0
  108.      call CreateFile
  109.      jnc  .write_to_logfile
  110.   @@:
  111.      inc  [filepos]
  112.      popa
  113.   end if
  114.  
  115.     mov  ebp,[targ]
  116.   .no4:
  117.     cmp  al,13
  118.     jne  no13
  119.     and  dword[ebp-8],0
  120.     jmp  new_check
  121.    no13:
  122.     cmp  al,10
  123.     jne  no10
  124.     and  dword[ebp-8],0
  125.     inc  dword[ebp-4]
  126.     cmp  dword[ebp-4],MAXSTRINGS
  127.     jbe  .noypos
  128.     mov  dword[ebp-4],MAXSTRINGS
  129.     lea  esi,[ebp+80]
  130.     mov  edi,ebp
  131.     mov  ecx,80*(MAXSTRINGS)
  132.     cld
  133.     rep  movsb
  134.  
  135.     mov  esi,[ebp-4]
  136.     imul esi,80
  137.     add  esi,[ebp-8]
  138.     add  esi,ebp
  139.     mov  ecx,80
  140.     xor  al,al
  141.     rep  stosb
  142.   .noypos:
  143.     mov  [targ],text2
  144.     and  [krnl_cnt],0
  145.     jmp  new_check
  146.   no10:
  147.     cmp  ebp,text1
  148.     je   add2
  149.                 mov  ecx,[krnl_cnt]
  150.                   cmp  al,[krnl_msg+ecx]
  151.                 jne  .noknl
  152.                   inc  [krnl_cnt]
  153.                 cmp  [krnl_cnt],4
  154.                 jne  new_check
  155.     mov  [targ],text1
  156.         .noknl:
  157.     mov  ebp,[targ]
  158.            jecxz .add
  159.     push eax
  160.     mov  esi,krnl_msg
  161.    .l1:
  162.     lodsb
  163.     call add_char
  164.     loop .l1
  165.     pop  eax
  166.    .add:
  167.     and  [krnl_cnt],0
  168.   add2:
  169.     call add_char
  170.  
  171.   new_check:
  172.  
  173.     mov  eax,63
  174.     mov  ebx,2
  175.     mcall
  176.  
  177.     cmp  ebx,1
  178.     je   new_data
  179.  
  180.     call draw_window
  181.  
  182.     jmp  still
  183.  
  184.   key:                          ; key
  185.     mov  al,2                  ; just read it and ignore
  186.     mcall
  187.     cmp  ah,' '
  188.     je   button.noclose
  189.     jmp  still
  190.  
  191.   button:                       ; button
  192.     mov  al,17                 ; get id
  193.     mcall
  194.  
  195.     cmp  ah,1                   ; button id=1 ?
  196.     jne  .noclose
  197.  
  198.     or   eax,-1                 ; close this program
  199.     mcall
  200.   .noclose:
  201.     xor  [vmode],1
  202.     jmp  red
  203.  
  204. add_char:
  205.     push esi
  206.     mov  esi,[ebp-4]
  207.     imul esi,80
  208.     add  esi,[ebp-8]
  209.     mov  [ebp+esi],al
  210.     inc  dword[ebp-8]
  211.     cmp  dword[ebp-8],80
  212.     jb   .ok
  213.     mov  dword[ebp-8],79
  214.   .ok:
  215.     pop  esi
  216.     ret
  217.  
  218. ;   *********************************************
  219. ;   *******  WINDOW DEFINITIONS AND DRAW ********
  220. ;   *********************************************
  221.  
  222.  
  223. draw_window:
  224.  
  225.     mov  eax,12                    ; function 12:tell os about windowdraw
  226.     mov  ebx,1                     ; 1, start of draw
  227.     mcall
  228.  
  229.                                    ; DRAW WINDOW
  230.     xor  eax,eax                     ; function 0 : define and draw window
  231. ;   mov  ebx,50*65536+400          ; [x start] *65536 + [x size]
  232.     mov  ebx,[xstart]
  233.     mov  ecx,MAXSTRINGS*10+45      ; [y start] *65536 + [y size]
  234.     mov  edx,[sc.work]             ; color of work area RRGGBB,8->color gl
  235.     or   edx,0x13000000
  236.     mov  edi,title                ; WINDOW LABEL
  237.     mcall
  238.  
  239.     mov  ecx,4
  240.     mov  esi,[sc.work]
  241.     mov  ebx,296 shl 16+5*6
  242.     mov  edx,3;+1 shl 30
  243.     mcall 8,,<5,12>
  244.     mov  edx,[vmode]
  245.     lea  edx,[edx*4+duk]
  246.     mcall 4,<300,8>,,,4
  247.  
  248.     mov  ebx,15*65536+33           ; draw info text with function 4
  249.     mov  ecx,[sc.work_text]
  250.     mov  edx,text1
  251.     cmp  [vmode],0
  252.     je   .kern
  253.     mov  edx,text2
  254.   .kern:
  255.     mov  esi,80
  256.     mov  eax,4
  257.   newline:
  258.     mcall
  259.     add  ebx,10
  260.     add  edx,80
  261.     cmp  [edx],byte 'x'
  262.     jne  newline
  263.     mov  eax,12                    ; function 12:tell os about windowdraw
  264.     mov  ebx,2                     ; 2, end of draw
  265.     mcall
  266.  
  267.     ret
  268.  
  269.  
  270. if WRITE_LOG
  271. ;********************************************
  272. ;*  input:  esi = pointer to the file name  *
  273. ;********************************************
  274.  
  275. CreateFile:
  276.     pusha
  277.     mov      dword [InfoStructure],    2   ; create file
  278.     mov      dword [InfoStructure+4],  0   ; reserved
  279.     mov      dword [InfoStructure+8],  0   ; reserved
  280.     mov      dword [InfoStructure+12], 0   ; 0 bytes to write (just create)
  281.     mov      dword [InfoStructure+16], 0   ; NULL data pointer (no data)
  282.     mov      dword [InfoStructure+20], 0   ; reserved
  283.     mov      dword [InfoStructure+21], esi ; pointer to the file name
  284.     mcall    70, InfoStructure
  285.     test     eax, eax
  286.     jz       .out
  287.     stc
  288.   .out:
  289.     popa
  290.     ret
  291.  
  292. ;********************************************
  293. ;*  input:  esi = pointer to the file name  *
  294. ;*          edx = pointer to data buffer    *
  295. ;*          ecx = data length               *
  296. ;********************************************
  297.  
  298. WriteToFile:
  299.     push     ebx
  300.     mov      dword [InfoStructure],    3   ; write to file
  301.     mov      eax,  [filepos]
  302.     mov      dword [InfoStructure+4],  eax ; lower position addr
  303.     mov      dword [InfoStructure+8],  0   ; upper position addr (0 for FAT)
  304.     mov      dword [InfoStructure+12], ecx ; number of bytes to write
  305.     mov      dword [InfoStructure+16], edx ; pointer to data buffer
  306.     mov      dword [InfoStructure+20], 0   ; reserved
  307.     mov      dword [InfoStructure+21], esi ; pointer to the file name
  308.     mcall    70, InfoStructure
  309.     clc
  310.     test     eax, eax
  311.     jz       .out
  312.     stc
  313.   .out:
  314.     pop      ebx
  315.     ret
  316.  
  317.  
  318. InfoStructure:
  319.                      dd      0x0     ; subfunction number
  320.                      dd      0x0     ; position in the file in bytes
  321.                      dd      0x0     ; upper part of the position address
  322.                      dd      0x0     ; number of     bytes to read
  323.                      dd      0x0     ; pointer to the buffer to write data
  324.                      db      0
  325.                      dd      0       ; pointer to the filename
  326.  
  327. filepos  dd 0
  328. default_filename db '/sys/boardlog.txt',0
  329. tmp      db 0
  330. end if
  331.  
  332.  
  333.  
  334.  
  335. krnl_msg db 'K : '
  336. duk db 'KernUser'
  337.  
  338. ; DATA AREA
  339.  
  340. ; 11,11 > 0,-1
  341. ; 5,11  > 0,-1
  342. if lang eq ru
  343.    title    db   '„®áª  ®â« ¤ª¨ ¨ á®®¡é¥­¨©',0
  344. else if lang eq en
  345.    title    db   'General debug & message board',0
  346. else
  347.    title    db   'Allgemeines debug- & nachrichtenboard',0
  348. end if
  349.    krnl_cnt dd 0
  350.    vmode dd 1
  351.    targ  dd text2
  352. I_END:
  353.      offs dd ?
  354.      flag rb 1
  355.      rd 2
  356. ;     x1pos  dd ?
  357. ;     y1pos  dd ?
  358.      text1 rb 80*(MAXSTRINGS+1)
  359.      tmp1  db ?
  360.      rd 2
  361. ;     x2pos  dd ?
  362. ;     y2pos  dd ?
  363.      text2 rb 80*(MAXSTRINGS+1)
  364.      tmp2  db ?
  365.      xstart dd ?
  366.      sc system_colors
  367. i_end:
  368.  
  369. filename        rb      256
  370. align 4
  371. stackbuf        rb      2000h
  372. mem:
  373.