Subversion Repositories Kolibri OS

Rev

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

  1. ;
  2. ;   Пример программы для MenuetOS
  3. ;   озвучивает код нажатой клавиши ;)
  4. ;
  5. ;   Компилировать FASM'ом
  6. ;
  7. ;   См. также:
  8. ;     template.asm  -  пример простейшей программы (новый!)
  9. ;     rb.asm        -  контекстное меню рабочего стола
  10. ;     example2.asm  -  пример меню и дополнительных окон
  11. ;     example3.asm  -  пример меню, реализованного по-другому
  12. ;---------------------------------------------------------------------
  13.  
  14.   use32              ; включить 32-битный режим ассемблера
  15.   org    0x0         ; адресация с нуля
  16.  
  17.   db     'MENUET01'  ; 8-байтный идентификатор MenuetOS
  18.   dd     0x01        ; версия заголовка (всегда 1)
  19.   dd     START       ; адрес первой команды
  20.   dd     I_END       ; размер программы
  21.   dd     0x1000      ; количество памяти
  22.   dd     0x1000      ; адрес вершины стэка
  23.   dd     0x0         ; адрес буфера для параметров (не используется)
  24.   dd     0x0         ; зарезервировано
  25.  
  26. include 'lang.inc'
  27. include 'macros.inc' ; макросы облегчают жизнь ассемблерщиков!
  28.  
  29. ;---------------------------------------------------------------------
  30. ;---  НАЧАЛО ПРОГРАММЫ  ----------------------------------------------
  31. ;---------------------------------------------------------------------
  32.  
  33. START:
  34. ;       mcall 5,10
  35.        mcall 21,13,1,drvinfo
  36. ;       jmp run_launcher
  37.  
  38.        mcall 21,13,2
  39.        cmp eax,-1
  40.        je   run_launcher
  41. ;       cmp  ecx,280
  42. ;       je  change_vrr
  43. ;       cmp  ecx,277
  44. ;       je  change_vrr
  45. ;       cmp  ecx,6
  46. ;       je  change_vrr
  47. ;       cmp  ecx,7
  48. ;       je  change_vrr
  49. ;       jmp  run_launcher
  50. change_vrr:
  51. ;       mov ax,cx
  52. ;       dec cx
  53. ;       shl cx,1
  54. ;       xor edx,edx
  55. ;       mov dx,[vidmode+ecx]
  56. ;       mov ebx,ecx
  57. ;       shl ebx,2
  58. ;       add ebx,ecx   ; ebx=ebx*5
  59. ;       shr ax,8
  60. ;       dec ax
  61. ;       shl ax,1
  62. ;       add ebx,eax
  63. ;       ror edx,16
  64. ;       mov dx,[_m1+ebx]
  65. ;       rol edx,16
  66.         ;mov eax,ecx
  67.         xor eax,eax
  68.         sub ecx,3
  69.         mov dx,cx
  70.         cmp cx,274
  71.         je yes_274
  72.         cmp cx,277
  73.         je yes_277
  74.         jmp yes_280
  75.      yes_274:
  76.         add al,10
  77.      yes_277:
  78.         add al,10
  79.      yes_280:
  80.         add al,10
  81.         ror edx,16
  82.         mov dx,[_m1+eax]
  83.         rol edx,16
  84. ;       mov dx,bx
  85. ;       shl edx,16
  86. ;       mov  dx,cx
  87.        mcall 21,13,3
  88. ;       mcall 5,300
  89. run_launcher:
  90.        mcall 19,launcher,0
  91. ;       mcall 33,text,drvinfo,512,0
  92.        mcall -1
  93. launcher db  'LAUNCHER   '
  94. ;text      db  'TEXT       '
  95. drvinfo:   ; 512 bytes driver info area
  96. ; +0   - Full driver name
  97. ; +32  - Driver version
  98. ; +64  - Word List of support video modes (max 32 positions)
  99. ; +128 - 5 words list of support vertical rate to each present mode
  100.       org $+32
  101. drvver:
  102.       org $+32
  103. vidmode:
  104.       org $+64
  105. _m1:
  106.       org drvinfo+200h
  107.  
  108. I_END:                             ; метка конца программы
  109.