Subversion Repositories Kolibri OS

Rev

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

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;                               ;;
  3. ;;          DEVICE SETUP         ;;
  4. ;;                               ;;
  5. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  6.  
  7. ; Authors: Ville       - original version
  8. ;          A. Ivushkin - autostart (w launcher)
  9. ;          M. Lisovin  - added many feauters (apply all, save all, set time...)
  10. ;          I. Poddubny - fixed russian keymap
  11.  
  12. ;******************************************************************************
  13.   use32
  14.   org      0x0
  15.   db      'MENUET01'   ; 8 byte identifier
  16.   dd      0x01           ; header version
  17.   dd      START        ; pointer to program start
  18.   dd      I_END        ; size of image
  19.   dd      0x4000      ; reguired amount of memory
  20.   dd      0x4000      ; stack pointer (esp)
  21.   dd      I_PARAM,0    ; parameters, reserved
  22.   include 'lang.inc'
  23.   include 'macros.inc'
  24. ;******************************************************************************
  25.  
  26. LLL equ (56+3)
  27. BBB equ 25
  28.  
  29. ;******************************************************************************
  30. apply_all:
  31.  
  32.     mov  eax,6            ; load saved settings from SETUP.DAT
  33.     mov  ebx,filename
  34.     xor  ecx,ecx
  35.     or     edx,-1
  36.     mov  esi,keyboard
  37.     int  0x40
  38.  
  39.     call _midibase    ;1
  40.     call _sound_dma    ;10
  41.     call _pci_acc    ;12
  42.     call _sb16        ;4
  43.     call _wssp        ;6
  44.     call _syslang    ;5
  45.     call _keyboard    ;2
  46.  
  47.     call get_disk_info
  48.     cmp  [cd],0
  49.     jne  no_cd
  50.     call _cdbase    ;3
  51.   no_cd:
  52.     cmp  [hd],0
  53.     jne  no_hd
  54.     call _lba_read    ;11
  55.     call _hdbase    ;7
  56.     call _f32p        ;8
  57.   no_hd:
  58. ret
  59. ;-------------------------------------------------------------------------------
  60. get_disk_info:
  61.     mov  [hd],1
  62.     mov  [cd],1
  63.     mov  [hdbase],0
  64.     mov  [cdbase],0
  65.     mcall 18,11,1,table_area
  66.  
  67.   ide_0:
  68.     mov  al,[table_area+1]
  69.     shr  al,6
  70.     cmp  al,0
  71.     je    ide_1
  72.     cmp  al,01b
  73.     jnz  ide_0_cd
  74.     mov  [hdbase],1
  75.     mov  [hd],0
  76.     jmp  ide_1
  77.  
  78.   ide_0_cd:
  79.     cmp  al,10b
  80.     jnz  ide_1
  81.     mov  [cdbase],1
  82.     mov  [cd],0
  83.     cmp  [hd],0
  84.     je     all_device
  85.  
  86.   ide_1:
  87.     mov  al,[table_area+1]
  88.     shl  al,2
  89.     shr  al,6
  90.     cmp  al,0
  91.     je    ide_2
  92.     cmp  al,01b
  93.     jnz  ide_1_cd
  94.     cmp  [hd],0
  95.     je     ide_11
  96.     mov  [hdbase],2
  97.     mov  [hd],0
  98.   ide_11:
  99.     cmp  [cd],0
  100.     je     all_device
  101.     jmp  ide_2
  102.  
  103.   ide_1_cd:
  104.     cmp  al,10b
  105.     jnz  ide_2
  106.     cmp  [cd],0
  107.     je     ide_11_cd
  108.     mov  [cdbase],2
  109.     mov  [cd],0
  110.   ide_11_cd:
  111.     cmp  [hd],0
  112.     je     all_device
  113.  
  114.  ide_2:
  115.     mov  al,[table_area+1]
  116.     shl  al,4
  117.     shr  al,6
  118.     cmp  al,0
  119.     je    ide_3
  120.     cmp  al,01b
  121.     jnz  ide_2_cd
  122.     cmp  [hd],0
  123.     je     ide_21
  124.     mov  [hdbase],3
  125.     mov  [hd],0
  126.   ide_21:
  127.     cmp  [cd],0
  128.     je     all_device
  129.     jmp  ide_3
  130.  
  131.   ide_2_cd:
  132.     cmp  al,10b
  133.     jnz  ide_3
  134.     cmp  [cd],0
  135.     je     ide_21_cd
  136.     mov  [cdbase],3
  137.     mov  [cd],0
  138.   ide_21_cd:
  139.     cmp  [hd],0
  140.     je     all_device
  141.  
  142.   ide_3:
  143.     mov  al,[table_area+1]
  144.     shl  al,6
  145.     shr  al,6
  146.     cmp  al,0
  147.     je    not_device
  148.     cmp  al,01b
  149.     jnz  ide_3_cd
  150.     cmp  [hd],0
  151.     je     ide_31
  152.     mov  [hdbase],4
  153.     mov  [hd],0
  154.   ide_31:
  155.     cmp  [cd],0
  156.     jmp   all_device
  157.  
  158.   ide_3_cd:
  159.     cmp  al,10b
  160.     jnz  not_device
  161.     cmp  [cd],0
  162.     je     all_device
  163.     mov  [cdbase],4
  164.     mov  [cd],0
  165.  
  166.   all_device:
  167.   not_device:
  168.     ret
  169.  
  170. hd db 0
  171. cd db 0
  172. ;******************************************************************************
  173. apply_all_and_exit:
  174.     call apply_all
  175.     jmp  close
  176.  
  177. ;******************************************************************************
  178. set_language_and_exit:
  179.     mov  eax,26
  180.     mov  ebx,2
  181.     mov  ecx,9
  182.     int  0x40
  183. ;    cmp  eax,5
  184. ;    jne  @f
  185. ;    xor  eax,eax
  186. ;@@: mov  [keyboard],eax
  187.     cmp  eax,1
  188.     je    russian
  189.     xor  eax,eax
  190. set_lang_now:
  191.     mov  [keyboard],eax
  192.     call _keyboard
  193.     jmp  close
  194. russian:
  195.     mov  eax,3
  196.     jmp  set_lang_now
  197.  
  198. set_syslanguage_and_exit:
  199.     mov  eax,26
  200.     mov  ebx,5
  201. ;    mov  ecx,9
  202.     int  0x40
  203.     cmp  eax,4
  204.     jne  temp    ;@f
  205.     xor  eax,eax
  206. ;@@: inc  eax
  207. temp: inc  eax
  208.     mov  [syslang],eax
  209.     call _syslang
  210.     jmp  close
  211.  
  212. get_setup_values:
  213.     mcall 26,1
  214.     mov [midibase],eax
  215.     mcall 26,2,9
  216.     dec  eax
  217.     mov [keyboard],eax
  218.     mcall 26,3
  219.     mov [cdbase],eax
  220.     mcall 26,4
  221.     mov [sb16],eax
  222.     mcall 26,5
  223.     mov [syslang],eax
  224.     mcall 26,6
  225.     cmp eax,0x530
  226.     jne s_wss_2
  227.     mov eax,1
  228.     jmp get_other
  229. s_wss_2:
  230.     cmp eax,0x608
  231.     jne s_wss_3
  232.     mov eax,2
  233.     jmp get_other
  234. s_wss_3:
  235.     cmp eax,0xe80
  236.     jne s_wss_4
  237.     mov eax,3
  238.     jmp get_other
  239. s_wss_4:
  240.     mov eax,4
  241. get_other:
  242.     mov [wss],eax
  243.     mcall 26,7
  244.     mov [hdbase],eax
  245.     mcall 26,8
  246.     mov [f32p],eax
  247.     mcall 26,10
  248.     mov [sound_dma],eax
  249.     mcall 26,11
  250.     mov [lba_read],eax
  251.     mcall 26,12
  252.     mov [pci_acc],eax
  253.     ret
  254.  
  255. ;******************************************************************************
  256.  
  257. START:
  258.     cmp  [I_PARAM], 'SLAN'
  259.     je     set_syslanguage_and_exit
  260.  
  261.     cmp  [I_PARAM], 'LANG'
  262.     je     set_language_and_exit
  263.  
  264. ;    mov  eax,6                  ; load saved settings from SETUP.DAT
  265. ;    mov  ebx,filename
  266. ;    xor  ecx,ecx
  267. ;    or   edx,-1
  268. ;    mov  esi,keyboard
  269. ;    int  0x40
  270.  
  271.     cmp  [I_PARAM], 'BOOT'
  272.     je     apply_all_and_exit
  273.  
  274.     call loadtxt
  275.     call get_setup_values
  276. red:
  277.     call draw_window
  278.  
  279. still:
  280.  
  281.     cmp  word [blinkpar],0
  282.     jne  blinker
  283.     mov  eax,29         ;get system date
  284.     int  0x40
  285.     cmp  eax,[date]
  286.     je     gettime
  287.     mov  [date],eax
  288.  gettime:
  289.     mov  eax,3            ;get system time
  290.     int  0x40
  291.     cmp  ax,[time]
  292.     je     sysevent
  293.     mov  [time],ax
  294.     call drawtime
  295.  
  296.  sysevent:
  297.     mov  eax,23
  298.     mov  ebx,8            ; wait here for event with timeout
  299.     int  0x40
  300.  
  301.     cmp  eax,1
  302.     jz     red
  303.     cmp  eax,2
  304.     jz     key
  305.     cmp  eax,3
  306.     jz     button
  307.  
  308.     jmp  still
  309.  
  310.  blinker:
  311.     cmp  byte [count],6
  312.     jb     noblink
  313.     btc  dword [blinkpar],16
  314.     mov  byte [count],0
  315.     call drawtime
  316.  noblink:
  317.     inc  byte [count]
  318.     jmp  sysevent
  319.  
  320. incdectime:
  321.     cmp byte [blinkpar],0
  322.     je    still
  323.     mov esi,time
  324.     mov bl,0x23  ;border
  325.     cmp byte [blinkpar],1
  326.     je    hours
  327.     mov bl,0x59       ;minutes
  328.     inc esi
  329.   hours:
  330.     mov al,byte [esi]
  331.     cmp ah,112
  332.     je    dectime
  333.     cmp al,bl
  334.     je    noinctime
  335.      inc al
  336.      daa
  337.     jmp incdectime1
  338.   noinctime:
  339.     xor al,al
  340.   incdectime1:
  341.     mov byte [esi],al
  342.     jmp still
  343.   dectime:
  344.     cmp al,0
  345.     je    nodectime
  346.     dec al
  347.     das
  348.     jmp incdectime1
  349.   nodectime:
  350.     mov al,bl
  351.     jmp incdectime1
  352.  
  353. incdecdate:
  354.     cmp byte [blinkpar+1],0
  355.     je    still
  356.     mov esi,date
  357.     mov bl,0      ;border of years
  358.     cmp byte [blinkpar+1],1
  359.     jne days
  360.     mov bl,0x12         ;months
  361.     inc esi
  362.   days:
  363.     cmp byte [blinkpar+1],2
  364.     jne nodays
  365.     mov bl,0x31
  366.     add esi,2
  367.   nodays:
  368.     mov al,byte [esi]
  369.     cmp ah,122
  370.     je    decdate
  371.     cmp al,bl
  372.     je    noincdate
  373.     inc al ;add al,1
  374.     daa
  375.     jmp incdecdate1
  376.   noincdate:
  377.     mov al,1
  378.   incdecdate1:
  379.     mov byte [esi],al
  380.     jmp still
  381.   decdate:
  382.     cmp al,1
  383.     je    nodecdate
  384.     dec al
  385.     das
  386.     jmp incdecdate1
  387.   nodecdate:
  388.     mov al,bl
  389.     jmp incdecdate1
  390.  
  391.  
  392.   key:
  393.     ;mov  eax,2
  394.     int  0x40
  395.     cmp  ah,27
  396.     jne  still
  397.     mov  dword [blinkpar],0
  398.     call drawtime
  399.     jmp  still
  400.  
  401.   button:
  402.  
  403.     mov  eax,17
  404.     int  0x40
  405.  
  406.     cmp  ah,112
  407.     je     incdectime
  408.     cmp  ah,113
  409.     je     incdectime
  410.     cmp  ah,122
  411.     je     incdecdate
  412.     cmp  ah,123
  413.     je     incdecdate
  414.     cmp  ah,111
  415.     jne  noseltime
  416.     mov  al, [blinkpar]
  417.     cmp  al,2
  418.     jae  seltime
  419.     inc  al
  420.     jmp  seltime1
  421.   seltime:
  422.     xor  al,al
  423.   seltime1:
  424.     mov  [blinkpar],al
  425.     call drawtime
  426.     jmp  still
  427. noseltime:
  428.     cmp  ah,121
  429.     jne  noseldate
  430.     mov  al,byte [blinkpar+1]
  431.     cmp  al,3
  432.     jae  seldate
  433.     inc  al
  434.     jmp  seldate1
  435.  seldate:
  436.     xor  al,al
  437.  seldate1:
  438.     mov  [blinkpar+1],al
  439.     call drawtime
  440.     jmp  still
  441. noseldate:
  442.     cmp  ah,99
  443.     jne  nosaveall
  444.     mov  eax,33
  445.     mov  ebx,filename
  446.     mov  ecx,keyboard
  447.     mov  edx,48
  448.     xor  esi,esi
  449.     int  0x40
  450.     call settime
  451.     mov  dword [blinkpar],0
  452.     call drawtime
  453.     jmp  still
  454. nosaveall:
  455.     cmp  ah,100
  456.     jne  no_apply_all
  457.     call apply_all
  458.     jmp  still
  459. no_apply_all:
  460.  
  461.     cmp  ah,1             ; CLOSE APPLICATION
  462.     jne  no_close
  463. close:
  464.     or     eax,-1
  465.     int  0x40
  466.   no_close:
  467.  
  468.     cmp  ah,11             ; SET MIDI BASE
  469.     jnz  nosetbase1
  470.     call _midibase
  471.    nosetbase1:
  472.     cmp  ah,12
  473.     jnz  nomm
  474.     sub  [midibase],2
  475.     call draw_infotext
  476.   nomm:
  477.     cmp  ah,13
  478.     jnz  nomp
  479.     add  [midibase],2
  480.     call draw_infotext
  481.   nomp:
  482.  
  483.  
  484.     cmp  ah,4             ; SET KEYBOARD
  485.     jnz  nokm
  486.     mov  eax,[keyboard]
  487.     test eax,eax
  488.     je     downuplbl
  489.     dec  eax
  490.     jmp  nodownup
  491.    downuplbl:
  492.     mov  eax,4
  493.    nodownup:
  494.     mov  [keyboard],eax
  495.     call draw_infotext
  496.   nokm:
  497.     cmp  ah,5
  498.     jnz  nokp
  499.     mov  eax,[keyboard]
  500.     cmp  eax,4
  501.     je     updownlbl
  502.     inc  eax
  503.     jmp  noupdown
  504.    updownlbl:
  505.     xor  eax,eax
  506.    noupdown:
  507.     mov  [keyboard],eax
  508.     call draw_infotext
  509.   nokp:
  510.  
  511.  
  512.     cmp  ah,22              ; SET CD BASE
  513.     jnz  nocm
  514.     mov  eax,[cdbase]
  515.     sub  eax,2
  516.     and  eax,3
  517.     inc  eax
  518.     mov  [cdbase],eax
  519.     call draw_infotext
  520.   nocm:
  521.     cmp  ah,23
  522.     jnz  nocp
  523.     mov  eax,[cdbase]
  524.     and  eax,3
  525.     inc  eax
  526.     mov  [cdbase],eax
  527.     call draw_infotext
  528.   nocp:
  529.     cmp  ah,21
  530.     jnz  nocs
  531.     call _cdbase
  532.   nocs:
  533.  
  534.     cmp  ah,62            ; SET HD BASE
  535.     jnz  hnocm
  536.     mov  eax,[hdbase]
  537.     sub  eax,2
  538.     and  eax,3
  539.     inc  eax
  540.     mov  [hdbase],eax
  541.     call draw_infotext
  542.   hnocm:
  543.     cmp  ah,63
  544.     jnz  hnocp
  545.     mov  eax,[hdbase]
  546.     and  eax,3
  547.     inc  eax
  548.     mov  [hdbase],eax
  549.     call draw_infotext
  550.   hnocp:
  551.     cmp  ah,61
  552.     jnz  hnocs
  553.     call _hdbase
  554.   hnocs:
  555.  
  556.     cmp  ah,82            ; SET SOUND DMA
  557.     jne  no_sdma_d
  558.     mov  eax,[sound_dma]
  559.     dec  eax
  560.    sdmal:
  561.     and  eax,3
  562.     mov  [sound_dma],eax
  563.     call draw_infotext
  564.     jmp  still
  565.   no_sdma_d:
  566.     cmp  ah,83
  567.     jne  no_sdma_i
  568.     mov  eax,[sound_dma]
  569.     inc  eax
  570.     jmp  sdmal
  571.   no_sdma_i:
  572.     cmp  ah,81
  573.     jne  no_set_sound_dma
  574.     call _sound_dma
  575.     jmp  still
  576.   no_set_sound_dma:
  577.  
  578.     cmp  ah,92             ; SET LBA READ
  579.     jne  no_lba_d
  580.   slbal:
  581.     btc  [lba_read],0
  582.     call draw_infotext
  583.     jmp  still
  584.    no_lba_d:
  585.     cmp  ah,93
  586.     jne  no_lba_i
  587.     jmp  slbal
  588.   no_lba_i:
  589.     cmp  ah,91
  590.     jne  no_set_lba_read
  591.     call _lba_read
  592.     jmp  still
  593.    no_set_lba_read:
  594.  
  595.  
  596.     cmp  ah,102           ; SET PCI ACCESS
  597.     jne  no_pci_d
  598.   pcip:
  599.     btc  [pci_acc],0
  600.     call draw_infotext
  601.     jmp  still
  602.   no_pci_d:
  603.     cmp  ah,103
  604.     jne  no_pci_i
  605.     jmp  pcip
  606.    no_pci_i:
  607.     cmp  ah,101
  608.     jne  no_set_pci_acc
  609.     call _pci_acc
  610.     jmp  still
  611.   no_set_pci_acc:
  612.  
  613.  
  614.   set_partition:
  615.     cmp  ah,72            ; SET FAT32 PARTITION
  616.     jnz  .nominus
  617.     mov  eax,[f32p]
  618.     sub  eax,2
  619. ;   and  eax,15          ; 3 - four partitions, 7 - eight p., 15 - sixteen, etc.
  620.     cmp  eax,15
  621.     jb    @f
  622.     mov  eax,14
  623. @@:
  624.     inc  eax
  625.     mov  [f32p],eax
  626.     call draw_infotext
  627.   .nominus:
  628.     cmp  ah,73
  629.     jnz  .noplus
  630.     mov  eax,[f32p]
  631. ;   and  eax,15          ; 3 - four partitions, 7 - eight p., 15 - sixteen, etc.
  632.     cmp  eax,15
  633.     jb    @f
  634.     mov  eax,0
  635. @@:
  636.     inc  eax
  637.     mov  [f32p],eax
  638.     call draw_infotext
  639.   .noplus:
  640.     cmp  ah,71
  641.     jnz  .noapply
  642.     call _f32p
  643.   .noapply:
  644.  
  645.     cmp  ah,32            ; SET SOUND BLASTER 16 BASE
  646.     jnz  nosbm
  647.     sub  [sb16],2
  648.     call draw_infotext
  649.   nosbm:
  650.     cmp  ah,33
  651.     jnz  nosbp
  652.     add  [sb16],2
  653.     call draw_infotext
  654.   nosbp:
  655.     cmp  ah,31
  656.     jnz  nosbs
  657.     call _sb16
  658.   nosbs:
  659.  
  660.     cmp  ah,52            ; SET WINDOWS SOUND SYSTEM BASE
  661.     jnz  nowssm
  662.     mov  eax,[wss]
  663.     sub  eax,2
  664.     and  eax,3
  665.     inc  eax
  666.     mov  [wss],eax
  667.     call draw_infotext
  668.   nowssm:
  669.     cmp  ah,53
  670.     jnz  nowssp
  671.     mov  eax,[wss]
  672.     and  eax,3
  673.     inc  eax
  674.     mov  [wss],eax
  675.     call draw_infotext
  676.   nowssp:
  677.     cmp  ah,51
  678.     jnz  nowsss
  679.     call _wssp
  680.   nowsss:
  681.  
  682.     cmp  ah,42              ; SET SYSTEM LANGUAGE BASE
  683.     jnz  nosysm
  684.     mov  eax,[syslang]
  685.     dec  eax
  686.     jz     still
  687.     mov  [syslang],eax
  688.     call draw_infotext
  689.   nosysm:
  690.     cmp  ah,43
  691.     jnz  nosysp
  692.     mov  eax,[syslang]
  693.     cmp  eax,4
  694.     je     nosysp
  695.     inc  eax
  696.     mov  [syslang],eax
  697.     call draw_infotext
  698.   nosysp:
  699.     cmp  ah,41
  700.     jnz  nosyss
  701.     call _syslang
  702.     call cleantxt
  703.     call loadtxt
  704.     call draw_window
  705.     call drawtime
  706.   nosyss:
  707.  
  708.     cmp  ah,3               ; SET KEYMAP
  709.     jne  still
  710.     call _keyboard
  711.     jmp  still
  712.  
  713.   _keyboard:
  714.     cmp [keyboard],0
  715.     jnz  nosetkeyle
  716.     mov  eax,21       ; english
  717.     mov  ebx,2
  718.     mov  ecx,1
  719.     mov  edx,en_keymap
  720.     int  0x40
  721.     mov  eax,21
  722.     inc  ecx
  723.     mov  edx,en_keymap_shift
  724.     int  0x40
  725.     mov  eax,21
  726.     mov  ecx,9
  727.     mov  edx,1
  728.     int  0x40
  729.     call alt_gen
  730.   nosetkeyle:
  731.     cmp  [keyboard],1
  732.     jnz  nosetkeylfi
  733.     mov  eax,21       ; finnish
  734.     mov  ebx,2
  735.     mov  ecx,1
  736.     mov  edx,fi_keymap
  737.     int  0x40
  738.     mov  eax,21
  739.     inc  ecx
  740.     mov  edx,fi_keymap_shift
  741.     int  0x40
  742.     mov  eax,21
  743.     mov  ecx,9
  744.     mov  edx,2
  745.     int  0x40
  746.     call alt_gen
  747.   nosetkeylfi:
  748.     cmp  [keyboard],2
  749.     jnz  nosetkeylge
  750.     mov  eax,21       ; german
  751.     mov  ebx,2
  752.     mov  ecx,1
  753.     mov  edx,ge_keymap
  754.     int  0x40
  755.     mov  eax,21
  756.     inc  ecx
  757.     mov  edx,ge_keymap_shift
  758.     int  0x40
  759.     mov  eax,21
  760.     mov  ecx,9
  761.     mov  edx,3
  762.     int  0x40
  763.     call alt_gen
  764.   nosetkeylge:
  765.     cmp  [keyboard],3
  766.     jnz  nosetkeylru
  767.     mov  eax,21       ; russian
  768.     mov  ebx,2
  769.     mov  ecx,1
  770.     mov  edx,ru_keymap
  771.     int  0x40
  772.     mov  eax,21
  773.     inc  ecx
  774.     mov  edx,ru_keymap_shift
  775.     int  0x40
  776.     call alt_gen
  777.     mov  eax,21
  778.     mov  ecx,9
  779.     mov  edx,4
  780.     int  0x40
  781.   nosetkeylru:
  782.     cmp  [keyboard],4          ;french
  783.     jnz  nosetkeylfr
  784.     mov  eax,21
  785.     mov  ebx,2
  786.     mov  ecx,1
  787.     mov  edx,fr_keymap
  788.     int  0x40
  789.     mov  eax,21
  790.     inc  ecx
  791.     mov  edx,fr_keymap_shift
  792.     int  0x40
  793.     mov  eax,21
  794.     inc  ecx
  795.     mov  edx,fr_keymap_alt_gr
  796.     int  0x40
  797.     mov  eax,21
  798.     mov  ecx,9
  799.     mov  edx,5
  800.     int  0x40
  801.   nosetkeylfr:
  802.     ret
  803.  
  804.  alt_gen:
  805.    mov eax,21
  806.    mov ecx,3
  807.    mov edx,alt_general
  808.    int 0x40
  809.    ret
  810.  
  811.  
  812.  
  813. draw_buttons:
  814.  
  815.     pusha
  816.  
  817.     shl  ecx,16
  818.     add  ecx,12
  819.     mov  ebx,(350-50)*65536+46+BBB
  820.  
  821.     mov  eax,8
  822.     int  0x40
  823.  
  824.     mov  ebx,(350-79)*65536+9
  825.     inc  edx
  826.     int  0x40
  827.  
  828.     mov  ebx,(350-67)*65536+9
  829.     inc  edx
  830.     int  0x40
  831.  
  832.     popa
  833.     ret
  834.  
  835.  
  836.  
  837. ; ********************************************
  838. ; ******* WINDOW DEFINITIONS AND DRAW  *******
  839. ; ********************************************
  840.  
  841.  
  842. draw_window:
  843.  
  844.     pusha
  845.  
  846.     mov  eax,12
  847.     mov  ebx,1
  848.     int  0x40
  849.  
  850.     xor  eax,eax           ; DRAW WINDOW
  851.     mov  ebx,40*65536+355+BBB
  852.     mov  ecx,40*65536+300
  853.     mov  edx,0x82111199
  854.     mov  esi,0x805588dd
  855.     mov  edi,0x005588dd
  856.     int  0x40
  857.  
  858.     mov  eax,4
  859.     mov  ebx,8*65536+8
  860.     mov  ecx,0x10ffffff
  861.     mov  edx,labelt
  862.     cmp  [syslang],4
  863.     je     ruslabel
  864.     add  edx,20
  865.   ruslabel:
  866.     mov  esi,26
  867.     int  0x40
  868.  
  869.     mov  eax,8               ; CLOSE BUTTON
  870.     mov  ebx,(355+BBB-19)*65536+12
  871.     mov  ecx,5*65536+12
  872.     mov  edx,1
  873.     mov  esi,0x005588dd
  874.     int  0x40
  875.                    ; APPLY ALL
  876.     mov  ebx,(350-79)*65536+100
  877.     mov  ecx,251*65536+12
  878.     mov  edx,100
  879.     int  0x40
  880.     add  ecx,16*65536           ; SAVE ALL
  881.     dec  edx
  882.     int  0x40
  883.  
  884.     mov  esi,0x5580c0
  885.  
  886.     mov  edx,11
  887.     mov  ecx,43
  888.     call draw_buttons
  889.  
  890.     mov  edx,41
  891.     mov  ecx,43+8*8
  892.     call draw_buttons
  893.  
  894.     mov  edx,21
  895.     mov  ecx,43+4*8
  896.     call draw_buttons
  897.  
  898.     mov  edx,31
  899.     mov  ecx,43+2*8
  900.     call draw_buttons
  901.  
  902.     mov  edx,3
  903.     mov  ecx,43+10*8
  904.     call draw_buttons
  905.  
  906.     mov  edx,51
  907.     mov  ecx,43+12*8
  908.     call draw_buttons
  909.  
  910.     mov  edx,61
  911.     mov  ecx,43+6*8
  912.     call draw_buttons
  913.  
  914.     mov  edx,91
  915.     mov  ecx,43+18*8
  916.     call draw_buttons
  917.  
  918.     mov  edx,71
  919.     mov  ecx,43+14*8
  920.     call draw_buttons
  921.  
  922.     mov  edx,81
  923.     mov  ecx,43+16*8
  924.     call draw_buttons
  925.  
  926.     mov  edx,101
  927.     mov  ecx,43+20*8
  928.     call draw_buttons
  929.  
  930.     mov  edx,111
  931.     mov  ecx,43+22*8 ; 22
  932.     call draw_buttons
  933.  
  934.     mov  edx,121
  935.     mov  ecx,43+24*8 ; 24
  936.     call draw_buttons
  937.  
  938.     call draw_infotext
  939.  
  940.     mov  eax,12
  941.     mov  ebx,2
  942.     int  0x40
  943.  
  944.     popa
  945.     ret
  946.  
  947.  
  948.  
  949. draw_infotext:
  950.  
  951.     pusha
  952.  
  953.     mov  eax,[keyboard]               ; KEYBOARD
  954.     test eax,eax
  955.     jnz  noen
  956.     mov  [text00+LLL*10+28],dword 'ENGL'
  957.     mov  [text00+LLL*10+32],dword 'ISH '
  958.   noen:
  959.     cmp  eax,1
  960.     jnz  nofi
  961.     mov  [text00+LLL*10+28],dword 'FINN'
  962.     mov  [text00+LLL*10+32],dword 'ISH '
  963.   nofi:
  964.     cmp  eax,2
  965.     jnz  noge
  966.     mov  [text00+LLL*10+28],dword 'GERM'
  967.     mov  [text00+LLL*10+32],dword 'AN  '
  968.   noge:
  969.     cmp  eax,3
  970.     jnz  nogr
  971.     mov  [text00+LLL*10+28],dword 'RUSS'
  972.     mov  [text00+LLL*10+32],dword 'IAN '
  973.   nogr:
  974.     cmp  eax,4
  975.     jnz  nofr
  976.     mov  [text00+LLL*10+28],dword 'FREN'
  977.     mov  [text00+LLL*10+32],dword 'CH  '
  978.   nofr:
  979.  
  980.  
  981.     mov  eax,[syslang]                ; SYSTEM LANGUAGE
  982.     dec  eax
  983.     test eax,eax
  984.     jnz  noen5
  985.     mov  [text00+LLL*8+28],dword 'ENGL'
  986.     mov  [text00+LLL*8+32],dword 'ISH '
  987.   noen5:
  988.     cmp  eax,1
  989.     jnz  nofi5
  990.     mov  [text00+LLL*8+28],dword 'FINN'
  991.     mov  [text00+LLL*8+32],dword 'ISH '
  992.   nofi5:
  993.     cmp  eax,2
  994.     jnz  noge5
  995.     mov  [text00+LLL*8+28],dword 'GERM'
  996.     mov  [text00+LLL*8+32],dword 'AN  '
  997.   noge5:
  998.     cmp  eax,3
  999.     jnz  nogr5
  1000.     mov  [text00+LLL*8+28],dword 'RUSS'
  1001.     mov  [text00+LLL*8+32],dword 'IAN '
  1002.   nogr5:
  1003.     cmp  eax,4
  1004.     jne  nofr5
  1005.     mov  [text00+LLL*8+28],dword 'FREN'
  1006.     mov  [text00+LLL*8+32],dword 'CH  '
  1007.   nofr5:
  1008.  
  1009.  
  1010.     mov  eax,[midibase]
  1011.     mov  esi,text00+LLL*0+32
  1012.     call hexconvert                 ; MIDI BASE
  1013.  
  1014.  
  1015.     mov  eax,[sb16]                 ; SB16 BASE
  1016.     mov  esi,text00+LLL*2+32
  1017.     call hexconvert
  1018.  
  1019.  
  1020.     mov  eax,[wss]                 ; WSS BASE
  1021.     cmp  eax,1
  1022.     jnz  nowss1
  1023.     mov  [wssp],dword 0x530
  1024.   nowss1:
  1025.     cmp  eax,2
  1026.     jnz  nowss2
  1027.     mov  [wssp],dword 0x608
  1028.   nowss2:
  1029.     cmp  eax,3
  1030.     jnz  nowss3
  1031.     mov  [wssp],dword 0xe80
  1032.   nowss3:
  1033.     cmp  eax,4
  1034.     jnz  nowss4
  1035.     mov  [wssp],dword 0xf40
  1036.   nowss4:
  1037.  
  1038.     mov  eax,[wssp]
  1039.     mov  esi,text00+LLL*12+32
  1040.     call hexconvert
  1041.  
  1042.     mov  eax,[cdbase]                ; CD BASE
  1043.     cmp  eax,1
  1044.     jnz  noe1
  1045.     mov  [text00+LLL*4+28],dword 'PRI.'
  1046.     mov  [text00+LLL*4+32],dword 'MAST'
  1047.     mov  [text00+LLL*4+36],dword 'ER  '
  1048.   noe1:
  1049.     cmp  eax,2
  1050.     jnz  nof1
  1051.     mov  [text00+LLL*4+28],dword 'PRI.'
  1052.     mov  [text00+LLL*4+32],dword 'SLAV'
  1053.     mov  [text00+LLL*4+36],dword 'E   '
  1054.   nof1:
  1055.     cmp  eax,3
  1056.     jnz  nog1
  1057.     mov  [text00+LLL*4+28],dword 'SEC.'
  1058.     mov  [text00+LLL*4+32],dword 'MAST'
  1059.     mov  [text00+LLL*4+36],dword 'ER  '
  1060.   nog1:
  1061.     cmp  eax,4
  1062.     jnz  nog2
  1063.     mov  [text00+LLL*4+28],dword 'SEC.'
  1064.     mov  [text00+LLL*4+32],dword 'SLAV'
  1065.     mov  [text00+LLL*4+36],dword 'E   '
  1066.   nog2:
  1067.  
  1068.  
  1069.     mov  eax,[hdbase]                  ; HD BASE
  1070.     cmp  eax,1
  1071.     jnz  hnoe1
  1072.     mov  [text00+LLL*6+28],dword 'PRI.'
  1073.     mov  [text00+LLL*6+32],dword 'MAST'
  1074.     mov  [text00+LLL*6+36],dword 'ER  '
  1075.   hnoe1:
  1076.     cmp  eax,2
  1077.     jnz  hnof1
  1078.     mov  [text00+LLL*6+28],dword 'PRI.'
  1079.     mov  [text00+LLL*6+32],dword 'SLAV'
  1080.     mov  [text00+LLL*6+36],dword 'E   '
  1081.   hnof1:
  1082.     cmp  eax,3
  1083.     jnz  hnog1
  1084.     mov  [text00+LLL*6+28],dword 'SEC.'
  1085.     mov  [text00+LLL*6+32],dword 'MAST'
  1086.     mov  [text00+LLL*6+36],dword 'ER  '
  1087.   hnog1:
  1088.     cmp  eax,4
  1089.     jnz  hnog2
  1090.     mov  [text00+LLL*6+28],dword 'SEC.'
  1091.     mov  [text00+LLL*6+32],dword 'SLAV'
  1092.     mov  [text00+LLL*6+36],dword 'E   '
  1093.   hnog2:
  1094.  
  1095.  
  1096.     mov  eax,[f32p]              ; FAT32 PARTITION
  1097.     add  al,48
  1098.     mov  [text00+LLL*14+28],al
  1099.  
  1100.     mov  eax,[sound_dma]          ; SOUND DMA
  1101.     add  eax,48
  1102.     mov  [text00+LLL*16+28],al
  1103.  
  1104.     mov  eax,[lba_read]
  1105.     call onoff                  ; LBA READ
  1106.     mov  [text00+LLL*18+28],ebx
  1107.  
  1108.     mov  eax,[pci_acc]
  1109.     call onoff                  ; PCI ACCESS
  1110.     mov  [text00+LLL*20+28],ebx
  1111.  
  1112.     mov  eax,13
  1113.     mov  ebx,175*65536+85
  1114.     mov  ecx,40*65536+205
  1115.     mov  edx,0x80111199-19
  1116.     int  0x40
  1117.  
  1118.     mov  edx,text00
  1119.     mov  ebx,10*65536+45
  1120.     mov  eax,4
  1121.     mov  ecx,0xffffff
  1122.     mov  esi,LLL
  1123.   newline:
  1124.     int  0x40
  1125.     add  ebx,8
  1126.     add  edx,LLL
  1127.     cmp  [edx],byte 'x'
  1128.     jnz  newline
  1129.  
  1130.     popa
  1131.     ret
  1132.  
  1133.   drawtime:
  1134.     mov  ax,[time]              ;hours 22
  1135.     mov  cl,1
  1136.     call unpacktime
  1137.     mov  [text00+LLL*22+28],word bx
  1138.     mov  al,ah                  ;minutes
  1139.     inc  cl
  1140.     call unpacktime
  1141.     mov  [text00+LLL*22+31],word bx
  1142.     mov  eax,[date]
  1143.     mov  ch,3
  1144.     call unpackdate
  1145.     mov  [text00+LLL*24+34],word bx      ;year   24
  1146.     mov  al,ah
  1147.     mov  ch,1
  1148.     call unpackdate
  1149.     mov  [text00+LLL*24+28],word bx      ;month
  1150.     bswap eax
  1151.     mov  al,ah
  1152.     inc  ch
  1153.     call unpackdate
  1154.     mov  [text00+LLL*24+31],word bx      ;day
  1155.  
  1156.     mov  eax,13
  1157.     mov  ebx,175*65536+85
  1158.     mov  ecx,40*65536+205
  1159.     mov  edx,0x80111199-19
  1160.     int  0x40
  1161.  
  1162.     mov  edx,text00
  1163.     mov  ebx,10*65536+45
  1164.     mov  eax,4
  1165.     mov  ecx,0xffffff
  1166.     mov  esi,LLL
  1167.   newline1:
  1168.     int  0x40
  1169.     add  ebx,8
  1170.     add  edx,LLL
  1171.     cmp  [edx],byte 'x'
  1172.     jnz  newline1
  1173.     ret
  1174.  
  1175.   unpacktime:
  1176.     cmp  byte [blinkpar],cl      ;translate packed number to ascii
  1177.     jne  unpack1
  1178.   chkblink:
  1179.     bt dword [blinkpar],16
  1180.     jnc  unpack1
  1181.     xor  bx,bx
  1182.     ret
  1183.   unpackdate:
  1184.     cmp  byte [blinkpar+1],ch
  1185.     je     chkblink
  1186.   unpack1:
  1187.     xor  bx,bx
  1188.     mov  bh,al
  1189.     mov  bl,al
  1190.     and  bh,0x0f
  1191.     shr  bl,4
  1192.     add  bx,0x3030
  1193.     ret
  1194.  
  1195.   hexconvert:          ;converting dec to hex in ascii
  1196.     xor  ebx,ebx
  1197.     mov  bl,al
  1198.     and  bl,15
  1199.     add  ebx,hex
  1200.     mov  cl,[ebx]
  1201.     mov  [esi],cl
  1202.     shr  eax,4
  1203.     xor  ebx,ebx
  1204.     mov  bl,al
  1205.     and  bl,15
  1206.     add  ebx,hex
  1207.     mov  cl,[ebx]
  1208.     dec  esi
  1209.     mov  [esi],cl
  1210.     shr  eax,4
  1211.     xor  ebx,ebx
  1212.     mov  bl,al
  1213.     and  bl,15
  1214.     add  ebx,hex
  1215.     mov  cl,[ebx]
  1216.     dec  esi
  1217.     mov  [esi],cl
  1218.     ret
  1219.  
  1220. onoff:
  1221.     cmp [syslang],4
  1222.     jne norus1
  1223.     mov ebx,'ДА  '
  1224.     cmp eax,1
  1225.     je    exitsub
  1226.     mov ebx,'НЕТ '
  1227.     ret
  1228.  norus1:
  1229.     mov ebx,'ON  '
  1230.     cmp eax,1
  1231.     je    exitsub
  1232.     mov ebx,'OFF '
  1233.  exitsub:
  1234.     ret
  1235.  
  1236. _midibase:
  1237.     mov  eax,21
  1238.     mov  ebx,1
  1239.     mov  ecx,[midibase]
  1240.     int  0x40
  1241.  ret
  1242.  
  1243. _cdbase:
  1244.     mov  eax,21
  1245.     mov  ebx,3
  1246.     mov  ecx,[cdbase]
  1247.     int  0x40
  1248.  ret
  1249.  
  1250. _hdbase:
  1251.     mov  eax,21
  1252.     mov  ebx,7
  1253.     mov  ecx,[hdbase]
  1254.     int  0x40
  1255.     ret
  1256.  
  1257. _sound_dma:
  1258.     mov  eax,21
  1259.     mov  ebx,10
  1260.     mov  ecx,[sound_dma]
  1261.     int  0x40
  1262.     ret
  1263.  
  1264. _lba_read:
  1265.     mov  eax,21
  1266.     mov  ebx,11
  1267.     mov  ecx,[lba_read]
  1268.     int  0x40
  1269.     ret
  1270.  
  1271. _pci_acc:
  1272.     mov  eax,21
  1273.     mov  ebx,12
  1274.     mov  ecx,[pci_acc]
  1275.     int  0x40
  1276.     ret
  1277.  
  1278. _f32p:
  1279.     mov  eax,21
  1280.     mov  ebx,8
  1281.     mov  ecx,[f32p]
  1282.     int  0x40
  1283.  ret
  1284.  
  1285. _sb16:
  1286.     mov  eax,21
  1287.     mov  ebx,4
  1288.     mov  ecx,[sb16]
  1289.     int  0x40
  1290.     ret
  1291.  
  1292. _wssp:
  1293.     mov  eax,21
  1294.     mov  ebx,6
  1295.     mov  ecx,[wssp]
  1296.     int  0x40
  1297.  ret
  1298.  
  1299. _syslang:
  1300.     mov  eax,21
  1301.     mov  ebx,5
  1302.     mov  ecx,[syslang]
  1303.     int  0x40
  1304.  ret
  1305.  
  1306. loadtxt:
  1307.     cld
  1308.     mov  edi,text00
  1309.     mov  ecx,428
  1310.     cmp  [syslang],4
  1311.     jne  norus
  1312.     mov  esi,textrus
  1313.     jmp  sload
  1314.   norus:
  1315.     mov  esi,texteng
  1316.   sload:
  1317.     rep  movsd
  1318.     ret
  1319.  
  1320. cleantxt:
  1321.     xor  eax,eax
  1322.     mov  ecx,428
  1323.     cld
  1324.     mov  edi,text00
  1325.     rep stosd
  1326.     mov  [text00+1711],byte 'x'
  1327.     ret
  1328.  
  1329. settime:
  1330.     mov  dx,0x70
  1331.     call startstopclk
  1332.     dec  dx
  1333.     mov  al,2         ;set minutes
  1334.     out  dx,al
  1335.     inc  dx
  1336.     mov  al,byte [time+1]
  1337.     out  dx,al
  1338.     dec  dx
  1339.     mov  al,4         ;set hours
  1340.     out  dx,al
  1341.     inc  dx
  1342.     mov  al,byte [time]
  1343.     out  dx,al
  1344.     dec  dx
  1345.     mov  al,7         ;set day
  1346.     out  dx,al
  1347.     inc  dx
  1348.     mov  al,byte [date+2]
  1349.     out  dx,al
  1350.     dec  dx
  1351.     mov  al,8         ;set month
  1352.     out  dx,al
  1353.     inc  dx
  1354.     mov  al,byte [date+1]
  1355.     out  dx,al
  1356.     dec  dx
  1357.     mov  al,9         ;set year
  1358.     out  dx,al
  1359.     inc  dx
  1360.     mov  al,byte [date]
  1361.     out  dx,al
  1362.     dec  dx
  1363.     call startstopclk
  1364.     ret
  1365.  
  1366. startstopclk:
  1367.     mov  al,0x0b
  1368.     out  dx,al
  1369.     inc  dx
  1370.     in     al,dx
  1371.     btc  ax,7
  1372.     out  dx,al
  1373.     ret
  1374.  
  1375. ; DATA AREA
  1376. count:      db 0x0
  1377. blinkpar: dd 0x0
  1378. time:      dw 0x0
  1379. date:      dd 0x0
  1380.  
  1381. filename: db 'SETUP   DAT',0
  1382.  
  1383. textrus:
  1384.  
  1385.     db 'База MIDI ROLAND MPU-401  : 0x320           - +   Применить'
  1386.     db '                                                           '
  1387.     db 'База SoundBlaster 16      : 0x240           - +   Применить'
  1388.     db '                                                           '
  1389.     db 'База CD-ROMа              : PRI.SLAVE       - +   Применить'
  1390.     db '                                                           '
  1391.     db 'База ЖД-1                 : PRI.MASTER      - +   Применить'
  1392.     db '                                                           '
  1393.     db 'Язык системы              : ENGLISH         - +   Применить'
  1394.     db '                                                           '
  1395.     db 'Раскладка клавиатуры      : ENGLISH         - +   Применить'
  1396.     db '                                                           '
  1397.     db 'База WSS                  : 0x200           - +   Применить'
  1398.     db '                                                           '
  1399.     db 'Раздел FAT32 на ЖД-1      : 1               - +   Применить'
  1400.     db '                                                           '
  1401.     db 'Звуковой канал DMA        : 1               - +   Применить'
  1402.     db '                                                           '
  1403.     db 'Включить LBA              : OFF             - +   Применить'
  1404.     db '                                                           '
  1405.     db 'Доступ к шине PCI         : OFF             - +   Применить'
  1406.     db '                                                           '
  1407.     db 'Системное время           :  0:00           - +     Выбор  '
  1408.     db '                                                           '
  1409.     db 'Системная дата (м,д,г)    : 00/00/00        - +     Выбор  '
  1410.     db '                                                           '
  1411.     db 'ВНИМАНИЕ:                                    Применить все '
  1412.     db 'ИСПОЛЬЗУЙТЕ ДОСТУП К FAT-32 ОСТОРОЖНО!                     '
  1413.     db 'НЕ ЗАБУДЬТЕ СОХРАНИТЬ НАСТРОЙКИ              Сохранить все '
  1414.     db 'x'
  1415.  
  1416. texteng:
  1417.  
  1418.     db 'MIDI: ROLAND MPU-401 BASE : 0x320           - +     APPLY  '
  1419.     db '                                                           '
  1420.     db 'SOUND: SB16 BASE          : 0x240           - +     APPLY  '
  1421.     db '                                                           '
  1422.     db 'CD-ROM BASE               : PRI.SLAVE       - +     APPLY  '
  1423.     db '                                                           '
  1424.     db 'HARDDISK-1 BASE           : PRI.MASTER      - +     APPLY  '
  1425.     db '                                                           '
  1426.     db 'SYSTEM LANGUAGE           : ENGLISH         - +     APPLY  '
  1427.     db '                                                           '
  1428.     db 'KEYBOARD LAYOUT           : ENGLISH         - +     APPLY  '
  1429.     db '                                                           '
  1430.     db 'WINDOWS SOUND SYSTEM BASE : 0x200           - +     APPLY  '
  1431.     db '                                                           '
  1432.     db 'FAT32-1 PARTITION IN HD-1 : 1               - +     APPLY  '
  1433.     db '                                                           '
  1434.     db 'SOUND DMA CHANNEL         : 1               - +     APPLY  '
  1435.     db '                                                           '
  1436.     db 'LBA READ ENABLED          : OFF             - +     APPLY  '
  1437.     db '                                                           '
  1438.     db 'PCI ACCESS FOR APPL.      : OFF             - +     APPLY  '
  1439.     db '                                                           '
  1440.     db 'SYSTEM TIME               :  0:00           - +    SELECT  '
  1441.     db '                                                           '
  1442.     db 'SYSTEM DATE (M,D,Y)       : 00/00/00        - +    SELECT  '
  1443.     db '                                                           '
  1444.     db 'NOTE:                                           APPLY ALL  '
  1445.     db 'TEST FAT32 FUNCTIONS WITH EXTREME CARE                     '
  1446.     db 'SAVE YOUR SETTINGS BEFORE QUIT MENUET           SAVE ALL   '
  1447.     db 'x'
  1448.  
  1449. labelt:
  1450.     db     'НАСТРОЙКА УСТРОЙСТВ MENUET DEVICE SETUP       '
  1451.  
  1452. hex db     '0123456789ABCDEF'
  1453.  
  1454. alt_general:
  1455.  
  1456. ;     db   ' ',27
  1457. ;     db   ' @ $  {[]}\ ',8,9
  1458. ;     db   '            ',13
  1459. ;     db   '             ',0,'           ',0,'4',0,' '
  1460. ;     db   '             ',180,178,184,'6',176,'7'
  1461. ;     db   179,'8',181,177,183,185,182
  1462. ;     db   'ABCD',255,'FGHIJKLMNOPQRSTUVWXYZ'
  1463. ;     db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1464. ;     db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1465. ;     db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1466.  
  1467.  
  1468. en_keymap:
  1469.  
  1470.      db   '6',27
  1471.      db   '1234567890-=',8,9
  1472.      db   'qwertyuiop[]',13
  1473.      db   '~asdfghjkl;',39,96,0,'\zxcvbnm,./',0,'45 '
  1474.      db   '@234567890123',180,178,184,'6',176,'7'
  1475.      db   179,'8',181,177,183,185,182
  1476.      db   'AB<D',255,'FGHIJKLMNOPQRSTUVWXYZ'
  1477.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1478.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1479.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1480.  
  1481.  
  1482. en_keymap_shift:
  1483.  
  1484.      db   '6',27
  1485.      db   '!@#$%^&*()_+',8,9
  1486.      db   'QWERTYUIOP{}',13
  1487.      db   '~ASDFGHJKL:"~',0,'|ZXCVBNM<>?',0,'45 '
  1488.      db   '@234567890123',180,178,184,'6',176,'7'
  1489.      db   179,'8',181,177,183,185,182
  1490.      db   'AB>D',255,'FGHIJKLMNOPQRSTUVWXYZ'
  1491.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1492.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1493.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1494.  
  1495.  
  1496. fr_keymap:
  1497.  
  1498.      db   '6',27
  1499.      db   '&О"',39,'(-Н_УР)=',8,9
  1500.      db   'azertyuiop^$',13
  1501.      db   '~qsdfghjklmТ',0,0,'*wxcvbn,;:!',0,'45 '
  1502.      db   '@234567890123',180,178,184,'6',176,'7'
  1503.      db   179,'8',181,177,183,185,182
  1504.      db   'AB<D',255,'FGHIJKLMNOPQRSTUVWXYZ'
  1505.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1506.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1507.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1508.  
  1509.  
  1510.  
  1511. fr_keymap_shift:
  1512.  
  1513.  
  1514.      db   '6',27
  1515.      db   '1234567890+',8,9
  1516.      db   'AZERTYUIOPХФ',13
  1517.      db   '~QSDFGHJKLM%',0,'ЦWXCVBN?./',0,'45 '
  1518.      db   '@234567890123',180,178,184,'6',176,'7'
  1519.      db   179,'8',181,177,183,185,182
  1520.      db   'AB>D',255,'FGHIJKLMNOPQRSTUVWXYZ'
  1521.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1522.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1523.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1524.  
  1525.  
  1526. fr_keymap_alt_gr:
  1527.  
  1528.  
  1529.      db   '6',27
  1530.      db   28,'~#{[|Ш\^@]}',8,9
  1531.      db   'azertyuiop^$',13
  1532.      db   '~qsdfghjklmТ',0,0,'*wxcvbn,;:!',0,'45 '
  1533.      db   '@234567890123',180,178,184,'6',176,'7'
  1534.      db   179,'8',181,177,183,185,182
  1535.      db   'AB<D',255,'FGHIJKLMNOPQRSTUVWXYZ'
  1536.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1537.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1538.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1539.  
  1540.  
  1541.  
  1542.  
  1543. fi_keymap:
  1544.  
  1545.      db   '6',27
  1546.      db   '1234567890+[',8,9
  1547.      db   'qwertyuiop',192,'~',13
  1548.      db   '~asdfghjkl',194,193,'1',0,39,'zxcvbnm,.-',0,'45 '
  1549.      db   '@234567890123',180,178,184,'6',176,'7'
  1550.      db   179,'8',181,177,183,185,182
  1551.      db   'AB<D',255,'FGHIJKLMNOPQRSTUVWXYZ'
  1552.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1553.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1554.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1555.  
  1556.  
  1557. fi_keymap_shift:
  1558.  
  1559.      db   '6',27
  1560.      db   '!"#П%&/()=?]',8,9
  1561.      db   'QWERTYUIOP',200,'~',13
  1562.      db   '~ASDFGHJKL',202,201,'1',0,'*ZXCVBNM;:_',0,'45 '
  1563.      db   '@234567890123',180,178,184,'6',176,'7'
  1564.      db   179,'8',181,177,183,185,182
  1565.      db   'AB>D',255,'FGHIJKLMNOPQRSTUVWXYZ'
  1566.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1567.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1568.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1569.  
  1570.  
  1571.  
  1572. ge_keymap:
  1573.  
  1574.      db   '6',27
  1575.      db   '1234567890?[',8,9
  1576.      db   'qwertzuiop',203,'~',13
  1577.      db   '~asdfghjkl',194,193,'1',0,39,'yxcvbnm,.-',0,'45 '
  1578.      db   '@234567890123',180,178,184,'6',176,'7'
  1579.      db   179,'8',181,177,183,185,182
  1580.      db   'AB<D',255,'FGHIJKLMNOPQRSTUVWXYZ'
  1581.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1582.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1583.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1584.  
  1585.  
  1586. ge_keymap_shift:
  1587.  
  1588.      db   '6',27
  1589.      db   '!"#$%&/()=',197,']',8,9
  1590.      db   'QWERTZUIOP',195,'~',13
  1591.      db   '~ASDFGHJKL',202,201,'1',0,'*YXCVBNM;:_',0,'45 '
  1592.      db   '@234567890123',180,178,184,'6',176,'7'
  1593.      db   179,'8',181,177,183,185,182
  1594.      db   'AB>D',255,'FGHIJKLMNOPQRSTUVWXYZ'
  1595.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1596.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1597.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1598.  
  1599. ru_keymap:
  1600.  
  1601.      db   '6',27
  1602.      db   '1234567890-=',8,9
  1603.      db   'йцукенгшщзхъ',13
  1604.      db   0,"фывапролджэ"
  1605.      db   0xf1, '-/'
  1606.      db   "ячсмитьбю",'.-','45 '
  1607.      db   '@234567890123',180,178,184,'6',176,'7'
  1608.      db   179,'8',181,177,183,185,182
  1609.      db   'AB<D',255,'FGHIJKLMNOPQRSTUVWXYZ'
  1610.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1611.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1612.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1613.  
  1614.  
  1615.  
  1616. ru_keymap_shift:
  1617.  
  1618.      db   '6',27
  1619.      db   '!"N;%:?*()_+',8,0
  1620.      db   "ЙЦУКЕНГШЩЗХЪ",13
  1621.      db   0,"ФЫВАПРОЛДЖЭ"
  1622.      db   0xf0, '-\'
  1623.      db   "ЯЧСМИТЬБЮ",',-','45 '
  1624.      db   '@234567890123',180,178,184,'6',176,'7'
  1625.      db   179,'8',181,177,183,185,182
  1626.      db   'AB>D',255,'FGHIJKLMNOPQRSTUVWXYZ'
  1627.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1628.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1629.      db   'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  1630.  
  1631. I_PARAM   dd 0
  1632.  
  1633. keyboard  dd 0x0
  1634. midibase  dd 0x320
  1635. cdbase      dd 0x2
  1636. sb16      dd 0x220
  1637. syslang   dd 0x1
  1638. wss      dd 0x1
  1639. wssp      dd 0x0
  1640. hdbase      dd 0x1
  1641. f32p      dd 0x1
  1642. sound_dma dd 0x1
  1643. lba_read  dd 0x1
  1644. pci_acc   dd 0x1
  1645.  
  1646. text00:
  1647.  
  1648. I_END:
  1649. table_area:
  1650.