;
;   ‘¨á⥬­ ï ¯à®£à ¬¬  ¤«ï ãáâ ­®¢ª¨ ¯®¢ë襭­ëå (>60 Hz) ç áâ®â ®¡­®¢«¥­¨ï 
;   íªà ­  §  áç¥â á­¨¦¥­¨ï à §à¥è¥­¨ï 
;   (¤«ï ¯¥à¥å®¤®¢:  1024å768*60-->800å600*98
;                     800å600*60-->640å480*94)
;
;   Š®¬¯¨«¨à®¢ âì FASM'®¬
;
;   !!!!!_à¥¤ã¯à¥¦¤¥­¨¥_!!!!!:
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;!   ⥪ã騩 ¬®¬¥­â ¯à®£à ¬¬  ­®á¨â Š‘…ˆŒ…’€‹œ›‰ (!) å à ªâ¥à, ¯®í⮬㠢ᥣ¤    !
;! ®áâ ¥âáï ¢¥à®ïâ­®áâì ¯®àç¨ ®¡®à㤮¢ ­¨ï (â.¥. ¬®­¨â®à ). Žá®¡¥­­® íâ® ª á ¥âáï ¢á¥å!
;! â¥å, 祩 ¬®­¨â®à ­¥ ¨¬¥¥â § é¨âë ®â ¯¥à¥£à㧮ª ¯® ç áâ®â¥.                         !
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;     
;---------------------------------------------------------------------

  use32              ; ¢ª«îç¨âì 32-¡¨â­ë© ०¨¬  áᥬ¡«¥à 
  org    0x0         ;  ¤à¥á æ¨ï á ­ã«ï

  db     'MENUET01'  ; 8-¡ ©â­ë© ¨¤¥­â¨ä¨ª â®à MenuetOS
  dd     0x01        ; ¢¥àá¨ï § £®«®¢ª  (¢á¥£¤  1)
  dd     START       ;  ¤à¥á ¯¥à¢®© ª®¬ ­¤ë
  dd     I_END       ; à §¬¥à ¯à®£à ¬¬ë
  dd     0x1000      ; ª®«¨ç¥á⢮ ¯ ¬ïâ¨
  dd     0x1000      ;  ¤à¥á ¢¥à設ë áâíª 
  dd     0x0         ;  ¤à¥á ¡ãä¥à  ¤«ï ¯ à ¬¥â஢ (­¥ ¨á¯®«ì§ã¥âáï)
  dd     0x0         ; § à¥§¥à¢¨à®¢ ­®

include '..\..\..\macros.inc' ; ¬ ªà®áë ®¡«¥£ç îâ ¦¨§­ì  áᥬ¡«¥à騪®¢!

;---------------------------------------------------------------------
;---  €—€‹Ž Žƒ€ŒŒ›  ----------------------------------------------
;---------------------------------------------------------------------

START:
;       mcall 5,10
        mov     ecx, 1
        mov     edx, drvinfo
        push    @f
        jmp     call_driver
@@:
;       jmp run_launcher

        mov     ecx, 2
        push    @f
call_driver:
        mcall 21,13
        ret
@@:
;       cmp eax,-1
        inc     eax
       je   run_launcher
;       cmp  ecx,280
;       je  change_vrr
;       cmp  ecx,277
;       je  change_vrr
;       cmp  ecx,6
;       je  change_vrr
;       cmp  ecx,7
;       je  change_vrr
;       jmp  run_launcher
change_vrr:
;       mov ax,cx
;       dec cx
;       shl cx,1
;       xor edx,edx
;       mov dx,[vidmode+ecx]
;       mov ebx,ecx
;       shl ebx,2
;       add ebx,ecx   ; ebx=ebx*5
;       shr ax,8
;       dec ax
;       shl ax,1
;       add ebx,eax
;       ror edx,16
;       mov dx,[_m1+ebx]
;       rol edx,16
        ;mov eax,ecx
        mov     eax, 10
        cmp cx,277+3
        je  yes_277
        cmp cx,274+3
        jne yes_280
     yes_274:
        add al,10
     yes_277:
        add al,10
     yes_280:
        mov     edx, [_m1+eax-2]
        lea     dx, [ecx-3]
        push    run_launcher
        mov     ecx, 3
        jmp     call_driver
run_launcher:
       mcall 70,launcher
       mcall -1
launcher:
        dd      7
        dd      0
        dd      0
        dd      0
        dd      0
        db      '/sys/LAUNCHER'
I_END:                             ; ¬¥âª  ª®­æ  ¯à®£à ¬¬ë
        db      ?       ; system loader will zero all memory after program end
                        ; this byte will be terminating zero for launcher string
; \begin{Serge}
                        ; A you really believe it?
                        ; Áëàæåí, êòî âåðóåò, òåïëî åìó íà ñâåòå!
; \end{Serge}
drvinfo:   ; 512 bytes driver info area
; +0   - Full driver name
; +32  - Driver version
; +64  - Word List of support video modes (max 32 positions)
; +128 - 5 words list of support vertical rate to each present mode
      org $+32
drvver:
      org $+32
vidmode:
      org $+64
_m1:
      org drvinfo+200h