;------------------- INIT PROCEDURES FOR BGE---------------------------

; Одноразовые процедуры затираемые модулями после использования

run_init      ; собственно инициация BGE
         ld hl,Main
         push hl
         LD (SPP),SP
     ;    ld a,#31   ; ld sp,nn
     ;   ld (RUN),a
     ;   ld hl,(SPP)
     ;   ld (RUN+1),hl ; ставим в RUN -> ld sp,xxxx

        LD A,GUIPage+#10
        LD (GUI_PAGE),A
        LD A,SuxPage+#10
        LD (STORE_PAGE),A
        LD A,#10
        LD (S_PAGE),A
        LD HL,Resident
        LD (ResAdr),HL

        call startCONF    ; AUTOCONF
stoppara

        call MemBrFill     ; Закидываем в свободные остатки памяти данные кистей

        ld hl,INIT_ADD
        ld de,#C000-lnINIT
        push de
        ld bc,lnINIT
        ldir
        ret

INIT_ADD
        xor a
        call LPGN1
        XOR A
        LD (vext),A
        LD A,(ExtPage)
        CP 6+1
       jr c,noexpa
        LD A,#FF
        LD (vext),A
noexpa  CALL IniSup
        LD A,LOAD_CAT
        CALL GUI
        CALL LdSup
        LD A,(ExtPage)
        CP 6+1
        JR NC,okext
        XOR A
        LD (vext),A
        LD (ssup+4),A
        CALL IniSup
okext   call CH_KEMPS  ; проверка джойстика и мыши ; /DA
        call IniSup
        CALL SAVEOBJ
        CALL LdGfx
    ;    CALL Fldlst
   ;     ld a,12          ; устанавливаем пиксельную маску /DA
   ;     call LPGN2
        ld hl,RUN.b
       push hl
        xor a
      ; jp PMask.init      ; устанавливаем пиксельную маску /DA
        call PMask.init
       jp   Fldlst

; at MISC
ldgfx   LD A,GUIPage
        CALL RAM

        LD HL,FnGfx
        CALL FromName
        LD C,#0A
        CALL DOS_FUNC_
        RET C
        LD DE,FILE_PARAM
        LD BC,#10
        LDIR
        LD A,(SEC_LEN)
        CP 28
        RET NC
        LD HL,#A500
        LD DE,(START_SEC)
        ;LD BC,#1805
          ld b,a       ; /DA
          cp 24
         ret c
         jr z,1F
          ld b,25
1         ld c,5
          push bc
        CALL DOS_FUNC_
          pop bc
        RET C
          ld a,b       ; есть ли цвет для главного меню ? ; /DA
          cp 24
         jr z,2F
          ld a,(#A500+6144)
          ld hl,BUTTONS+4  ; color
          ld de,8
          ld b,BUTTONS.num
1         ld (hl),a
          add hl,de
         djnz 1B
2
        LD HL,#A500+#1000
        LD DE,#C000
        LD BC,2048
        LDIR

         ld a,RamPage|#10
        CALL RAM

        ld hl,#A500+2047
        ld de,#A800+2047
        ld bc,2048
        lddr


         ld a,#A8
        LD (rasch+1),A
        LD IX,cutix
        ld de,#DB00

        ld b,4  ;3
dz2     PUSH BC
          dec b
       jr nz,1F
         inc (ix+0)
         inc (ix+0)
         inc (ix+0)
         push de
         ld de,sprSPACES
         dec (ix+2)
         call SaveWS
         inc (ix+2)
         pop de
         inc (ix+0)
         ld b,bgeSPRTnum-48
       jr dz1               
1       LD B,16         
dz1     PUSH BC
        CALL SaveWS
        INC (IX+0)
        INC (IX+0)
        POP BC
        DJNZ dz1
        POP BC
        XOR A
        LD (IX+0),A
        INC (IX+1)
        INC (IX+1)
        DJNZ dz2

        LD IX,cutix2
        ld de, TBUFF
        CALL SaveWS
        ld hl, TBUFF
        LD DE,ARWSPR
        LD BC,10*2
        LDIR
        call GUI_E
        LD A,#40
        LD (rasch+1),A
        JP outpgn
     
ch_kemps  ; проверка наличия kempston joistick и mouse если установлены галочки.
         ld a,(vjoy)
         or a
        jr z,1F
         call .JOI
1        ld a,(vmouse)
         or a
        ret z
.mouse   ld de,#0200

         ld bc,#FADF      ; кнопки не должны быть нажаты
1        in a,(c)
         or #F0        ; игнорим возможное колёсико 2008г.
         inc a
        jr nz,3F       ; нет мыши

         dec de
         ld a,d
         or e
        jr nz,1B
        ret
3        xor a
         ld (vmouse),a
        ret

.joi     ld c,4
1        xor a         ; проверяем младьшие биты на 0 (джойстик не должен быть нажат)
         in a,(#1F)    ; поскольку встречал реализацию джойстика (Delta C 48K но х.з. может и 128 где быть)
         and #1F       ; где старшие биты плавали.
        jr nz,2F
        djnz 1B
         dec c
        jr nz,1B
         ret
2        xor a
         ld (vjoy),a    ; джойстика нет
        ret




.JOI      EQU #C000-($-.joi)
.MOUSE    EQU #C000-($-.mouse)
CH_KEMPS  EQU #C000-($-ch_kemps)
LdGfx     EQU #C000-($-ldgfx)
lnINIT    EQU $-INIT_ADD

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

  ;;;; Теперь подключается из файла 'autoconf.asm'       /DA v3.12
  
        INCLUDE "autoconf.asm"
  
;;at RDrive
;AUTOCONF        
;        CALL TST
;START1  LD A,(ExtPage)
;        LD (RPAGE),A
;        LD A,2
;        jp ONPAGE

;;тестирование конфигурации компьютера
;TST     CALL    TABINIT
;        DI
;        LD BC,#7FFD
;    ld a,#fe
;    in a,(#fe)
;    rra
;    jr nc,I7FFD ;Caps Shift = 128K
;        LD      A,(#08)
;        CP      #C3
;        JR      NZ,ITURBO
;        LD      HL,TYPEC
;        SET 7,(HL) ;???Scorp
;ITURBO ;LD HL,(1111)
;       ;LD BC,#FFF7
;       ;LD A,%00011111 ;64K ROM only!
;       ;CALL OUTC_A
;       ;LD DE,(#C000+1111)
;       ;AND A
;       ;SBC HL,DE
;       ;LD BC,#FFF7
;       ;LD A,255
;       ;CALL OUTC_A
;        ;LD BC,#7FFD
;        LD A,#17
;        OUT (C),A
;        LD A,#FF
;        LD (#C000),A
;        LD A,#40;#C0
;       CALL ATMTESTOUT
;        XOR A
;        LD (#C000),A
;        LD A,#F8
;       CALL ATMTESTOUT
;        LD A,(#C000)
;        AND A
;        LD BC,#7FFD
;        LD A,#10
;        OUT (C),A
;       JR  Z,IDFFD

;        LD      HL,TYPEC
;        SET     3,(HL)
;        JR      I7FFD
;MM_ATM  DB      #DB,#1F,#C9
;IDFFD   LD      DE,#0007
;        LD      BC,#DFFD
;        CALL    TSTB
;        JR      NZ,I1FFD
;        LD      HL,TYPEC
;        SET     2,(HL)
;        JR      I7FFD
;I1FFD   LD      DE,#0010
;        LD      B,#1F
;        CALL    TSTB
;        JR      NZ,IFDFD
;        LD      HL,TYPEC
;        SET     1,(HL)
;        JR      I7FFD
;IFDFD   LD      B,C
;        LD      D,#11
;        CALL    TSTB
;        JR      NZ,I7FFD
;        LD      HL,TYPEC
;        SET     4,(HL)
;I7FFD   LD      B,#7F
;        CALL    TSTB
;        JR      NZ,SIZED
;        LD      HL,TYPEC
;        SET     0,(HL)
;SIZED   CALL    VIRT
;        LD      A,(ExtPage)
;        CP      8
;        JR      C,ENDING
;        LD      HL,TYPEC
;        LD      A,(HL)
;        DEC     A
;        JR      NZ,ENDING
;        SET     5,(HL)
;ENDING  XOR     A
;        CALL    EX_RAM
;        EI
;        RET

;ATMTESTOUT
;        LD BC,#FFF7
;        CALL OUTC_A ;на неАТМ пишет в #FF
;       ;LD BC,#EFF7
;       ;XOR A
;       ;OUT (C),A
;        LD A,(23830)
;        LD C,#FF
;        CALL OUTC_A
;        LD A,#D0
;        LD C,#1F
;       ;CALL OUTC_A
;       ;LD BC,#7FFD
;       ;LD A,#10
;       ;OUT (C),A
;        JP OUTC_A

;TSTB    LD      IX,#FFFF
;        OUT     (C),E
;        CALL    TSTB1
;        LD      L,(IX)
;        LD      (IX),E
;        OUT     (C),D
;        CALL    TSTB1
;        LD      H,(IX)
;        LD      (IX),D
;        OUT     (C),E
;        CALL    TSTB1
;        LD      A,(IX)
;        CP      E
;        LD      (IX),L
;        OUT     (C),D
;        PUSH    AF
;        CALL    TSTB1
;        POP     AF
;        LD      (IX),H
;        RET

;TSTB1   LD      A,B
;        CP      #7F
;        RET     Z
;        PUSH    BC
;        LD      B,#7F
;        LD      A,#10
;        OUT     (C),A
;        POP     BC
;        RET
;VIRT    LD      IX,#C000
;        LD      HL,RSCT+63
;        LD      B,64
;V_R11   LD      A,B
;        DEC     A
;        CALL    EX_RAM
;        LD      C,(IX+0)
;        LD      (HL),C
;        LD      (IX+0),A
;        DEC     HL
;        DJNZ    V_R11
;        PUSH    AF
;        LD      A,LENTABL
;        LD      (ExtPage),A
;        POP     AF
;        LD      DE,TABL_PG
;V_R20   LD      A,(DE)
;        CP      #FF
;        JR      Z,V_R30
;        CALL    EX_RAM
;        CP      (IX+0)
;        JR      Z,V_R22
;        PUSH    DE
;        LD      HL,TABL_PG+LENTABL
;        AND     A
;        SBC     HL,DE
;        PUSH    HL
;        POP     BC
;        PUSH    DE
;        POP     HL
;        INC     HL
;        LDIR
;        PUSH    HL
;        LD      HL,ExtPage
;        DEC     (HL)
;        POP     HL
;        POP     DE
;        DEC     DE
;V_R22   INC     DE
;        JR      V_R20
;V_R30   LD      B,64
;        LD      HL,RSCT
;V_R31   LD      A,64
;        SUB     B
;        CALL    EX_RAM
;        LD      A,(HL)
;        LD      (IX+0),A
;        INC     HL
;        DJNZ    V_R31
;        RET

;DEBUG   PUSH    DE
;        POP     HL
;NO_PG1  DEC     DE
;        LD      A,(DE)
;        CP      #FF
;        JR      Z,NO_PG2
;        CP      C
;        JR      NZ,NO_PG1
;        SBC     HL,DE
;        PUSH    HL
;        POP     BC
;        PUSH    DE
;        POP     HL
;        INC     HL
;        LDIR
;        PUSH    HL
;        LD      HL,ExtPage
;        DEC     (HL)
;        POP     HL
;        DEC     HL
;        DEC     HL
;NO_PG2  EX      DE,HL
;        RET

;;инициализациа таблицы банков, исключаются
;;банки 2,5.
;TABINIT LD      HL,TABL_PG-1
;        LD      (HL),255
;        INC     HL
;        XOR     A
;TABI1   LD      (HL),A
;TABI2   INC     A
;        CP      2
;        JR      Z,TABI2
;        CP      5
;        JR      Z,TABI2
;        INC     HL
;        CP      LENTABL+2
;        JR      NZ,TABI1
;        LD      (HL),255
;        LD      HL,RSCT
;        PUSH    HL
;        POP     DE
;        INC     DE
;        LD      BC,63
;        LD      (HL),B
;        LDIR
;        INC     B
;        LD      (TYPEC),BC
;        RET

;-----------------------------------------------------------
; начальная загрузка кистей bge 3.11  ; /DA

MemBrFill
           ;   call .move
              ld hl,.ToName
              call FromName
              ld c,#0A
              call DOS_FUNC_
             ret c
              ld de,FILE_PARAM
              ld bc,#10
              ldir
              ld a,(SEC_LEN)
              cp #04
             ret nz
              ld b,a
              ld hl,.brs_boof ; Brs_sv_s
              ld de,(START_SEC)
              ld c,5
              call DOS_FUNC_
             ret c
               ld a,PgnPage2
               call RAM
               ld hl,.brs_boof
               ld de,Brs_Psv
               ld bc,1024
               ldir
              jp RAM_GUI 

;.move           ; analog macro 'BRS_to_PAGES' in 'Bge.asm'
;             ld a,PgnPage2
;             call RAM
;             ld hl,Brs_Psv
;             ld de,P7Free
;             ld bc,LenP7Brs
;             ldir
;            IF LenP6Brs
;             ld a,PgnPage1
;             call RAM
;             ld de,P6Free
;             ld bc,LenP6Brs
;             ldir
;            ENDIF
;             call RAM_GUI
;            IF LenMBrs
;             ld de,MFree
;             ld bc,LenMBrs
;             ldir
;            ENDIF
;            ret

.ToName      DB "bgebrs  brs",0
.brs_boof    

; начальные значения кистей BGE перенесены в файл BRS_data.asm /DA

              


      

             ASSERT lnINIT < 512
             ASSERT  $ < #C000-1024-64  ; 64 for stack
             DISPLAY "  lnINIT        :",/a, lnINIT
             DISPLAY "Length Init     :",/a, $-run_init