; модуль меню настроек

           ORG PgnAdr      ; адрес старта модуля

SetUpMenuOVR   ld (.retad+1),hl
               call BSetUpMenu
               xor a
.retad        jp 0

BSetUpMenu   ld (.spp),sp
             
             

             ld ix,WSetUp
             ld a,%1111
.n1          ld ix,WSetUp
             ld (ix+6),a            
             ld sp,0
.spp    EQU $-2
  
             ld a,(ExtMem_)
             cp WSetUp.Opdrv
            jr c,2F
             cp #FF
            jr nz,1F           ; опция загрузки драйвера
             ld hl,WSetUp.ram255 
             ld (WSetUp.aRAM),hl
            jr 3F           
1            xor a
             ld (ExtMem_),a
2            ld hl,WsRAM.txt+1
             ld c,a
             add a,a
             add a,c
             ld c,a
             ld b,0
             add hl,bc
             ld a,(hl)
             ld (WSetUp.aRAM),a
             inc hl
             ld a,(hl)
             ld (WSetUp.aRAM+1),a
             
3            call ReSetUp   
                     
             call Winn_
             cp #FF
            jp z,setEXIT
             ld bc,.tab
             ld e,a
             call TAB_JP
             call IniSetUp
             ld a,%1101
            jr .n1
        
.tab         DW  .Ret     ; 0   Mouse
             DW  .Ret     ; 1   Scroller
             DW  .Ret     ; 2   Swap buttons
             DW  .Ret     ; 3   Slow mouse
             DW  .Ret     ; 4   kempston joystick
             DW  S_Curs   ; 5   Cursor
             DW  .Ret     ; 6   A:
             DW  .Ret     ; 7   B:
             DW  .Ret     ; 8   C:
             DW  .Ret     ; 9   D:
             DW  .sRAM    ; 10  RAM:
             DW  Sloupe   ; 11  Loupe ___
             DW  .Ret     ; 12  Loupe x8
             DW  .Ret     ; 13  Old grig x4
             DW  SvConfig ; 14  Save
             
.sRAM        ld ix,WsRAM
             call POPUP
             ld hl,CLOSENK_
             push hl
             ld (ix+6),%1110
.sW          call Win_             
             cp #FF
            ret z                      
             cp WSetUp.Opdrv
            jr z, 1F            ; опция загрузки драйвера
            ret nc
.extRet      ld (v_ext),a            
.Ret        ret
1            push ix
             ld hl,.sortDrv           
             call FilerE
            jr c,1F
             ld a,SearchSrtF11
             call GUI
1            pop ix
            jr nc,1F
             ld (ix+6),%1100 
            jr .sW 
1             ld hl,(BYTES_LEN)
              ld a,h
              or a
             jr nz,.sW
              ld a,l
              cp 65
             jr nc,.sW
              ld a,(SEC_LEN)
              cp 2
             jr nc,.sW

              ld hl,FILE_NAME
              ld de,v_ramDRVname
              ld bc,8              
              ldir
              ld a,#FF
             jr .extRet


.sortDrv   DB %0001,"ram",#00
           DB %1011,2,254,#FF
    
             
WSetUp      DB 9,2,18,21,7,6*8,%00001111
; Bit 0 - окно с заголовком/без
; Bit 1 - "перерисовать" окно да/нет
; Bit 2 - тискать окно по экрану да/нет
; Bit 3 - выход из окна-ткнуть только лишь за пределами (CANCEL)
           DB 0
           DW .txt             ; объект-текст
           DW .sel             ; объект-подсветка (выборка)
           DW 2                ; горячие клавиши ; объект-кнопки (выборка)           
           DW .flags           ; объект-флажки
           DW #FFFF


.txt    MSG_SETUP_Head : DB 13     ; Настройки
        MSG_SETUP_Mouse : DB 13    ; Мышь:
        MSG_SETUP_Scroll : DB 13   ; скроллер
        MSG_SETUP_SMB : DB 13      ; обмен кнопок
        MSG_SETUP_Slow_M : DB 13   ; медленная мышь
        MSG_SETUP_Joi : DB 13      ; Kempstone джойстик
        MSG_SETUP_Cursor : DB 13   ; Курсор_
        DB 15,13,#17,3," "             ; -----------------
        MSG_SETUP_Turbo : DB 13    ;  Турбо-диски
        DB " A:",#17,4," B:"           ; A  x    B  x    C  x    D  x
        DB #17,8," C:",#17,12," D:",13        
        DB 15,13                       ; -----------------       
        DB "RAM:                     "
        DB #17,3,#0A                   ; RAM: чето-там
.aRAM   DW .ram0
        DB 15,13                   ; -----------------       
        MSG_SETUP_Loup : DB 13     ; Лупа_
        MSG_SETUP_Loup8 : DB 13    ; Лупа x8
        MSG_SETUP_LpGRD4 :DB 13    ; старая сетка x4       
        DB 15,13                   ; -----------------
        MSG_DISK_Save : DB 13      ; Сохранить
        DB 0
        

.ram0        DB  "128 K",0                    ; 0
.ram1        DB  "-AUTO-",0                   ; 1
.ram2        DB  "KAY 256 K",0                ; 2
.ram3        DB  "Scorpion 256 K",0           ; 3
.ram4        DB  "KAY-1024 K",0               ; 4
.ram5        DB  "Scorpion ZS-1024 K",0       ; 5
.ram6        DB  "PROFI 256-1024 K",0         ; 6 
.ram7        DB  "Pentagon 512 K",0           ; 7
.ram8        DB  "Pentagon-1024SL",0          ; 8
.ram9        DB  "ATM TURBO 256-512 K",0      ; 9
.ram10       DB  "ATM TURBO 2+ 512 K",0       ; 10  rev 6.40
.ram11       DB  "ATM TURBO 2+ 1024 K",0      ; 11 rev 7.10

.Opdrv EQU 12
.ram255      DB  "Driver: "                   ; 11 загрузка драйвера
.ramDRVname  DB  "RAMdrv  ",0                 ; имя файла 8 байт без расширения (расширение ram)


.sel     DB 1,3,16,128+6,%11      ; 0-5
         DB 1,11,3,1,%11          ; 6
         DB 5,11,3,1,%11          ; 7
         DB 9,11,3,1,%11          ; 8
         DB 13,11,3,1,%11         ; 9
         DB 1,13,16,1,%11         ; 10
         DB 1,15,16,128+3,%11     ; 11,12,13
         DB 1,19,16,1,%11         ; 14
         DB #FF
         
    ; x, y, номер опции, состояние (#00/#FF)     
.flags   
            DB 16,3,0,#FF         ; kempston mouse
.fkmouse  EQU $-1
             DW .rflgs          
            DB 16,4,1,0 
.fscrlr   EQU $-1                 ; scroller
             DW .rflgs
            DB 16,5,2,0           
.fswpBTN  EQU $-1                 ; swap buttons
             DW .rflgs
            DB 16,6,3,0
.fslowMs  EQU $-1                 ; slow mouse
             DW .rflgsSLm
            DB 16,7,4,#FF
.fkjoist  EQU $-1                 ; kempston joistick
             DW .rflgs
            DB 3,11,6,0
.ftdA  EQU $-1
             DW .sf_dTurbo
            DB 7,11,7,0
.ftdB  EQU $-1       
             DW .sf_dTurbo 
            DB 11,11,8,0
.ftdC  EQU $-1
             DW .sf_dTurbo
            DB 15,11,9,0
.ftdD  EQU $-1
             DW .sf_dTurbo
            DB 16,16,12,0
.floupX8 EQU $-1
             DW .rflgs
            DB 16,17,13,0
.flOldx4 EQU $-1
             DW .rflgs
            DB #FF
                       
.rflgs       ld a,(.fkmouse)
             ld (v_mouse),a
             ld a,(.fscrlr)
             ld (v_mscroller),a
             ld a,(.fswpBTN)
             ld (v_rever),a            
             ld a,(.fkjoist)
             ld (v_joy),a
             ld a,(.floupX8)
             ld (v_mgnX8),a
             ld a,(.flOldx4)
             ld (v_mgnG4),a
             call IniSetUp
            ret
.rflgsSLm    ld a,(.fslowMs)
             call guiRAM
            jp MOUSDR.speed ; установка скорости мыши

            
.sf_dTurbo    ; флаги турбодисков   
             ld a,(.ftdA)
             and %0001
             ld c,a
             ld a,(.ftdB)
             and %0010
             or c
             ld c,a
             ld a,(.ftdC)
             and %0100
             or c
             ld c,a
             ld a,(.ftdD)
             and %1000
             or c
             ld (MODE),a
             ld (v_turbofs),a
            ret                    
                                       
WsRAM      DB 0,0,16,15,7*8,7*8,%1110
           DB 0
           DW .txt
           DW .sel
           DW #FFFF
           
.txt        DB #0A : DW WSetUp.ram0
            DB #0A : DW WSetUp.ram1
            DB #0A : DW WSetUp.ram2
            DB #0A : DW WSetUp.ram3
            DB #0A : DW WSetUp.ram4
            DB #0A : DW WSetUp.ram5
            DB #0A : DW WSetUp.ram6
            DB #0A : DW WSetUp.ram7
            DB #0A : DW WSetUp.ram8
            DB #0A : DW WSetUp.ram9
            DB #0A : DW WSetUp.ram10
            DB #0A : DW WSetUp.ram11
            DB "Load RAM driver"
            DB 0
            
.sel        DB 1,1,14,128+13,%11
            DB #FF
            

;---------------------------------------- 

setEXIT       call CLOSE       
IniSetUp      ld hl,s_var     ;  Инициализация настроек из области записи  
              ld a,(hl)    ; v_mouse
              inc hl          
              ld (MICE),a
              ld a,(hl)  ; v_rever
              inc hl  
              ld (MB),a
              ld a,(hl)  ; v_joy
              inc hl
              ld (KJOY),a
              ld a,(hl)  ; v_turbofs
              inc hl
              ld (MODE),a
              ld a,(hl)  ; v_ext for new  started
              ld (ExtMem_),a
              inc hl
              ld a,(hl)  ; v_mscroller
              inc hl
              call guiRAM
              or a
              ld a,#C9    ; [ret] for 0
             jr z,1F
              xor a   
1             ld (MO4),a
             push hl 
              ld a,TEST     ; тестирование и инициализация мыши (скроллера мыши) и джойстика
              call GUI
             pop hl                           
              ld a,(hl)  ; v_step
              inc hl
              ld (STEP),a
              ld (STEPN),a
              ld a,(hl)  ; v_level
              inc hl
              ld (LEVEL),a
              ld (LEVELN),a
              ld a,(hl)  ; v_speed
              inc hl
              ld (SPEED),a
              ld (SPEEDN),a
              ld a,(hl)       ; vmgnX8  /DA
              inc hl
              ld (Magnify_x8),a
              ld a,(hl)       ; v_mgnG4
              inc hl
              ld (OldGrd4.set_),a
              call OldGrd4
              ld a,(hl)        ; v_mslow
              inc hl
              push hl           ; slow mouse
              call guiRAM
              call MOUSDR.speed ; установка скорости мыши
              pop hl
              ld a,(hl)        ; v_mgncur
              inc hl
              ld (RadiMgn_CUR.CURview),a
              ld a,(hl)        ; v_mgn2bt
              inc hl
              ld (RadiMgn_CUR.CURrmb),a
              ld a,(hl)        ; v_mgnsm
              inc hl
              ld (FlagsMgn_CUR.PixSmooth),a
              ld a,(hl)        ; v_mgnfs
              inc hl
              ld (FlagsMgn_CUR.FireScroll),a
              ld a,(hl)        ; v_mgnsa
        ;      ld (FlagsMgn_CUR.ArwScroll),a
              ld hl,v_ramDRVname
              ld de,ramDRVname
              ld bc,8
              ldir
             ret
             
             
;---------------- чтение настроек из файла             
LdConfig      call SvConfig.nilbuf
              ld hl,Fn_Sup
              call FromName
              ld hl,FBUFF
              ld de,256
              ld bc,#01AE
              call guiRAM
              ld a,DOS_FUNC
              call GUI_
             jr c,1F
              ld de,s_var
              ld bc,e_var-s_var
              ld hl,FBUFF
              ldir
1             call IniSetUp                
ReSetUp       ld hl,s_var     ; Настройки из системы в переменные записи
              ld a,(MICE)
              ld (WSetUp.fkmouse),a
              ld (hl),a    ; v_mouse
              inc hl
              ld a,(MB)
              ld (WSetUp.fswpBTN),a
              ld (hl),a    ; v_rever
              inc hl
              ld a,(KJOY)
              ld (WSetUp.fkjoist),a
              ld (hl),a    ; v_joy
              inc hl
              ld a,(MODE)
              ld (hl),a    ; v_turbofs
              inc hl
              ld c,a
              bit 0,c
              call .stMODE_
              ld (WSetUp.ftdA),a
              bit 1,c
              call .stMODE_
              ld (WSetUp.ftdB),a
              bit 2,c
              call .stMODE_
              ld (WSetUp.ftdC),a
              bit 3,c
              call .stMODE_
              ld (WSetUp.ftdD),a
              ld a,(ExtMem_)
              ld (hl),a    ; v_ext                    
              inc hl       
              call guiRAM
              ld a,(MO4)
              or a
              ld a,#FF
             jr z,1F
              xor a             
1             ld (WSetUp.fscrlr),a
              ld (hl),a    ; v_mscroller
              inc hl
              ld a,(STEP)
              ld (hl),a    ; v_step
              inc hl
              ld a,(LEVEL)
              ld (hl),a    ; v_level
              inc hl
              ld a,(SPEED)
              ld (hl),a    ; v_speed
              inc hl
              ld a,(Magnify_x8)
              ld (WSetUp.floupX8),a
              ld (hl),a   ; vmgnX8
              inc hl
              ld a,(OldGrd4.set_)
              ld (WSetUp.flOldx4),a
              ld (hl),a   ; v_mgnG4
              inc hl
              call guiRAM
              ld a,(MOUSDR.speed+1)
              or a
             jr z,1F
              ld a,#FF              
1             ld (WSetUp.fslowMs),a
              ld (hl),a    ; v_mslow
              inc hl
              ld a,(RadiMgn_CUR.CURview)
              ld (hl),a    ; v_mgncur
              inc hl
              ld a,(RadiMgn_CUR.CURrmb)
              ld (hl),a    ; v_mgn2bt
              inc hl
              ld a,(FlagsMgn_CUR.PixSmooth)
              ld (hl),a    ; v_mgnsm
              inc hl
              ld a,(FlagsMgn_CUR.FireScroll)
              ld (hl),a    ; v_mgnfs
              inc hl
          ;    ld a,(FlagsMgn_CUR.ArwScroll)
          ;    ld (hl),a    ; v_mgnsa
              ld hl,ramDRVname
              push hl
              ld de,v_ramDRVname 
              ld bc,8
              ldir
              pop hl
              ld c,8
              ld de,WSetUp.ramDRVname
              ldir
             ret   
            
.stMODE_      ld a,#FF
             ret nz
              inc a
             ret  
              
;----------------------- настройка курсорного девайса
S_Curs  ld a,%1110
.l0     ld ix,W_Cur
        ld (ix+6),a  
        call POPUPdr
        
        ld a,(v_step)
        ld de,s_w
        call GetNumA
        ld a,(v_level)
        ld de,l_w
        call GetNumA
        ld a,(v_speed)
        ld de,p_w
        call GetNumA
        
        call Win_
        cp #FF
       jp z,CLOSE
        ld e,a
        sub 3
       jr nc,1F 
        ld a,e
1       ld hl,v_step ; последовательность v_step, v_level, v_speed
        ld c,a
        ld b,0
        add hl,bc 
        ld a,e      
        cp 3
        ld a,(hl)
       jr c,1F
        dec a
       jr nz,2F      
1       inc a
2       ld (hl),a
        ld a,%1100
       jr .l0


W_Cur   DB 0,0,10,5,4*8,4,%1110,0
        DW T_Cur
        DW S_Cur
        DW #FFFF

T_Cur   MSG_SETUP_Step : DB " 000",13
s_w     EQU $-4
        DB 22,7,1,"+ -",13
        DB 22,1,1,13

        MSG_SETUP_Level : DB " 000",13
l_w     EQU $-4
        DB 22,7,2,"+ -",13
        DB 22,1,2,13

        MSG_SETUP_Speed : DB " 000",13
p_w     EQU $-4
        DB 22,7,3,"+ -",0

S_Cur   DB 7,1,1,128+3,%11
        DB 8,1,1,128+3,%11
        DB #FF
        

;------------------------------------------------

Fn_Sup   DB "bgesys  sup"

SvConfig   call .nilbuf
           ld hl,s_var
           ld bc,e_var-s_var
           ld de,FBUFF
           push de
           ldir
           ld hl,Fn_Sup
           call FromName
           pop hl
           ld de,256
           ld bc,#010B
           ld a,DOS_FUNC
          jp GUI_

.nilbuf    call guiRAM
           ld hl,FBUFF
           ld de,FBUFF+1
           ld (hl),0
           ld bc,255
           ldir
          ret
                  
                       
s_var
; данные для настройки работы BGE
v_mouse      DB #FF             ; мышь
v_rever      DB #00             ; реверс
v_joy        DB #FF             ; джойстик
v_turbofs    DB %0000           ; битовые флаги турбодисков
v_ext        DB #01             ; расш. память
v_mscroller  DB #FF             ; флаг скроллера мыши (kempston)
v_step       DB #06             ; переменные для курсора
v_level      DB #0A             ; переменные для курсора
v_speed      DB #01             ; переменные для курсора
v_mgnX8      DB 0               ; тип лупы                        ; /DA
v_mgnG4      DB 0               ; возвращать ли старый вариант сетки x4
v_mslow      DB 0               ; медленная мышь
v_mgncur     DB 0               ; тип курсора лупы
v_mgn2bt     DB 0               ; тип 2-й кнопки мыши
v_mgnsm      DB #FF             ; флаг плавности
v_mgnfs      DB #FF             ; флаг скролла при огне
v_mgnsa      DB #FF             ; флаг смещения стрелки при перемещении окна линзы 
v_ramDRVname DB "bgeRAMdrram",0 ; имя внешнего драйвера верхней памяти
e_var

           
          ASSERT  ($-s_var) < 255               
          ORG s_var+256            
;---------------------------------------------------
LSetUpMenu       EQU $-SetUpMenuOVR
             ASSERT  $ < #C000
     ;   ENT

      DISPLAY " len SetUpMenu :",/a, LSetUpMenu
      