;LAST UPDATE: 31.07.2017 savelij
 
 
 
_VERS_CORE      EQU 12
 
_VERS_3         EQU 40
 
_VERS_4         EQU 108
 
_VERS_5         EQU 124
 
 
 
_BFOFFBITS      EQU 0X0A                        ;4
 
_BCSIZE         EQU 0X0E                        ;4
 
_BCWIDTH        EQU 0X12
 
_BCHEIGTH_CORE  EQU 0X14
 
_BCHEIGTH_345   EQU 0X16
 
_BCBITCOUNT_COR EQU 0X18
 
_BCBITCOUNT_345 EQU 0X1C
 
 
 
BUF_COLORS      EQU 0XB800
 
 
 
;[BMPVIEW]
 
BMPVIEW         CALL REST_COLCURS               ;СТИРАНИЕ КУРСОРА
 
                PEC_ON M_SHADOW_BF
 
                
 
                CALL LOAD_BMP
 
                CALL CMP_BMPFORMAT              ;ПРОВЕРКА ФОРМАТА BMP ФАЙЛА
 
                JR C,BMPVIEW1                   ;НЕ ПОДДЕРЖИВАЕТСЯ, НЕ ВЫВОДИМ ИЗОБРАЖЕНИЕ
 
                CALL CREATE_PAL                 ;СОЗДАНИЕ ПАЛИТРЫ
 
                CALL SET_COLORS                 ;ГЕНЕРАЦИЯ ТАБЛИЦЫ ЦВЕТОВ ДЛЯ ЗАМЕНЫ
 
                LD A,1
 
                LD HL,SCR_PAL
 
                RST8 _SETUP_PAL                 ;УСТАНОВКА СОЗДАННОЙ ПАЛИТРЫ
 
;               CALL CONV_BMP
 
                CALL OUT_SCREEN                 ;ЗАГРУЗКА ИЗОБРАЖЕНИЯ
 
                XOR A
 
                RST8 _SETUP_PAL                 ;УСТАНОВКА SPECTRUM ПАЛИТРЫ
 
 
 
BMPVIEW1        LD BC,WIN_A1
 
                LD A,0X7A
 
                OUT (C),A
 
                LD BC,0XFF77
 
                LD A,0XA3
 
                OUT (C),A
 
                CALL SET_7FFD_0
 
                PEC_OFF M_SHADOW_BF
 
                LD SP,(LD_FILE_SP)
 
                POP IY
 
                POP IX
 
                POP HL
 
                JP _RULILKA                     ;ПРОДОЛЖЕНИЕ ПРОСМОТРА
 
 
 
;300/40=C 1024/64 0000001100000000/01000000 
 
;CONV_BMP       LD HL,(VERT_SIZE)
 
;               DEC HL
 
;               LD C,L
 
;               ADD HL,HL
 
;               ADD HL,HL
 
                
 
;               RET
 
 
 
;[ВЫВОД НА ЭКРАН ИЗОБРАЖЕНИЯ ИЗ ЗАГРУЖЕННОГО BMP ФАЙЛА]
 
OUT_SCREEN      LD BC,CONF_128
 
                LD A,0X19
 
                OUT (C),A
 
                LD A,RAM_FLASHER
 
                CALL SET_CPU1
 
                LD BC,0XFF77
 
                LD A,0XA0
 
                OUT (C),A                       ;ВКЛЮЧЕНИЕ ЭКРАНА EGA 320x200x16c
 
                LD HL,CPU3+40*199               ;АДРЕС НАЧАЛА ПОСЛЕДНЕЙ СТРОКИ ЭКРАНА
 
                LD D,HIGH (BUF_COLORS)
 
                LD BC,-80
 
                EXX
 
                LD BC,CONF_128
 
                LD DE,CPU1
 
                LD HL,(CPU1+_BFOFFBITS)         ;СМЕЩЕНИЕ ДО ПИКСЕЛЕЙ ИЗОБРАЖЕНИЯ
 
                ADD HL,DE
 
                LD DE,0X1B1F
 
                LD IXL,200                      ;ВЫСОТА ЭКРАНА
 
COPYPIC2        LD IXH,40                       ;ШИРИНА ЭКРАНА
 
COPYPIC1        LD A,(HL)       ;0
 
                INC HL
 
                OUT (C),D
 
                EXX
 
                LD E,A
 
                LD A,(DE)
 
                LD (HL),A       ;7 6
 
                EXX
 
                LD A,(HL)       ;1
 
                INC HL
 
                OUT (C),E
 
                EXX
 
                LD E,A
 
                LD A,(DE)
 
                LD (HL),A       ;5 4
 
                LD A,%00100000
 
                XOR H
 
                LD H,A
 
                EXX
 
                BIT 7,H
 
                JP Z,COPYPIC4
 
                LD HL,CPU1
 
                LD A,RAM_FLASHER+1
 
                CALL SET_CPU1
 
COPYPIC4        LD A,(HL)       ;2
 
                INC HL
 
                OUT (C),D
 
                EXX
 
                LD E,A
 
                LD A,(DE)
 
                LD (HL),A       ;3 2
 
                EXX
 
                LD A,(HL)       ;3
 
                INC HL
 
                OUT (C),E
 
                EXX
 
                LD E,A
 
                LD A,(DE)
 
                LD (HL),A       ;1 0
 
                LD A,%00100000
 
                XOR H
 
                LD H,A
 
                INC HL
 
                EXX
 
                DEC IXH
 
                JP NZ,COPYPIC1
 
                EXX
 
                ADD HL,BC
 
                EXX
 
                DEC IXL
 
                JP NZ,COPYPIC2
 
                XOR A
 
                IN A,(0XFE)
 
                CPL
 
                AND 0X1F
 
                JR Z,$-6
 
                XOR A
 
                IN A,(0XFE)
 
                CPL
 
                AND 0X1F
 
                JR NZ,$-6
 
                LD BC,CONF_128
 
                LD A,0X1B
 
                OUT (C),A
 
                CALL CLEAREGA1
 
                LD BC,CONF_128
 
                LD A,0X1F
 
                OUT (C),A
 
CLEAREGA1       XOR A
 
                LD D,A
 
                LD E,A
 
                LD H,A
 
                LD L,A
 
                ADD HL,SP
 
                LD SP,0
 
CLEAREGA2       REPT 0X20
 
                PUSH DE
 
                ENDM
 
                DEC A
 
                JP NZ,CLEAREGA2
 
                LD SP,HL
 
                RET
 
 
 
SCR_PAL         DUPL 0X10,0                     ;СОЗДАННАЯ ПАЛИТРА ИЗ ФАЙЛА
 
 
 
BLUE_3          DB 0,B_L,B_H,B_L|B_H
 
GREEN_3         DB 0,G_L,G_H,G_L|G_H
 
RED_3           DB 0,R_L,R_H,R_L|R_H
 
 
 
;[ГЕНЕРАТОР ЦВЕТА В ФОРМАТЕ ATM VGA ЭКРАНА ДЛЯ ЗАМЕНЫ БАЙТОВ ИСХОДНОГО ИЗОБРАЖЕНИЯ]
 
SET_COLORS      LD HL,BUF_COLORS
 
SETCOLORS1      LD E,L
 
                LD A,E
 
                AND 7
 
                RLCA
 
                RLCA
 
                RLCA
 
                LD D,A
 
                LD A,E
 
                AND 8
 
                RLCA
 
                RLCA
 
                RLCA
 
                RLCA
 
                OR D
 
                LD D,A
 
                LD A,E
 
                AND 0X70
 
                RRCA
 
                RRCA
 
                RRCA
 
                RRCA
 
                OR D
 
                LD D,A
 
                LD A,E
 
                AND 0X80
 
                RRCA
 
                OR D
 
                LD (HL),A
 
                INC L
 
                JR NZ,SETCOLORS1
 
                RET
 
 
 
;[КОНВЕРТОР ПАЛИТРЫ BMP ФАЙЛА В ФОРМАТ ПАЛИТРЫ ATM]
 
CREATE_PAL      LD HL,CPU1+_BCSIZE+1
 
                LD D,(HL)
 
                DEC HL
 
                LD E,(HL)
 
                ADD HL,DE
 
                EX DE,HL                        ;DE=СМЕЩЕНИЕ ДО ПАЛИТРЫ BMP ФАЙЛА
 
                LD HL,SCR_PAL+0X0F              ;БУФЕР СОЗДАВАЕМОЙ ПАЛИТРЫ
 
                LD A,0X10
 
                EXX
 
                LD D,0
 
                EXX
 
SETPAL1         EX AF,AF'
 
                LD A,(DE)
 
                AND 0XC0
 
                RLCA
 
                RLCA
 
                EXX
 
                LD HL,BLUE_3
 
                LD E,A
 
                ADD HL,DE
 
                LD A,(HL)
 
                EXX
 
                LD B,A          ;BLUE
 
                INC DE
 
                LD A,(DE)
 
                AND 0XC0
 
                RLCA
 
                RLCA
 
                EXX
 
                LD HL,GREEN_3
 
                LD E,A
 
                ADD HL,DE
 
                LD A,(HL)
 
                EXX
 
                OR B
 
                LD B,A          ;GREEN
 
                INC DE
 
                LD A,(DE)
 
                AND 0XC0
 
                RLCA
 
                RLCA
 
                EXX
 
                LD HL,RED_3
 
                LD E,A
 
                ADD HL,DE
 
                LD A,(HL)
 
                EXX
 
                OR B            ;RED
 
                CPL
 
                LD (HL),A
 
                DEC HL
 
                INC DE
 
                INC DE
 
                EX AF,AF'
 
                DEC A
 
                JP NZ,SETPAL1
 
                RET
 
 
 
;[ПРОВЕРКА ФОРМАТА BMP ФАЙЛА НА ПРЕДМЕТ ПОДДЕРЖКИ (ПОДДЕРЖИВАЕТСЯ ТОЛЬКО 16 ЦВЕТНЫЕ BMP)]
 
CMP_BMPFORMAT   LD A,(CPU1+_BCSIZE)
 
                CP _VERS_CORE
 
                LD B,1
 
                JR Z,CMPBMPFORM1
 
                CP _VERS_3
 
                LD B,2
 
                JR Z,CMPBMPFORM1
 
                CP _VERS_4
 
                LD B,3
 
                JR Z,CMPBMPFORM1
 
                CP _VERS_5
 
                LD B,4
 
                JR Z,CMPBMPFORM1
 
                SCF
 
                RET
 
 
 
CMPBMPFORM1     LD HL,CPU1+_BCWIDTH
 
                LD E,(HL)
 
                INC HL
 
                LD D,(HL)
 
                LD (HORIZ_SIZE),DE              ;ШИРИНА ЗАГРУЖЕННОГО ИЗОБРАЖЕНИЯ
 
                INC HL
 
                LD A,B
 
                DEC A
 
                JR Z,CMPBMPFORM2
 
                LD A,(HL)
 
                INC HL
 
                OR (HL)
 
                SCF
 
                RET NZ
 
CMPBMPFORM2     LD HL,320                       ;ДЛЯ ШИРИНЫ НЕ БОЛЕЕ 320 ТОЧЕК
 
                AND A
 
                SBC HL,DE
 
                SCF
 
                RET NZ
 
                LD HL,CPU1
 
                LD A,B
 
                DEC A
 
                LD DE,_BCHEIGTH_CORE
 
                JR Z,CMPBMPFORM4
 
                LD DE,_BCHEIGTH_345
 
CMPBMPFORM4     ADD HL,DE
 
                LD E,(HL)
 
                INC HL
 
                LD D,(HL)
 
                LD (VERT_SIZE),DE               ;ВЫСОТА ЗАГРУЖЕННОГО ИЗОБРАЖЕНИЯ
 
                INC HL
 
                LD A,B
 
                DEC A
 
                JR Z,CMPBMPFORM3
 
                LD A,(HL)
 
                INC HL
 
                OR (HL)
 
                SCF
 
                RET NZ
 
CMPBMPFORM3     LD HL,200                       ;ДЛЯ ВЫСОТЫ НЕ БОЛЕЕ 200 ТОЧЕК
 
                AND A
 
                SBC HL,DE
 
                SCF
 
                RET NZ
 
                LD HL,CPU1
 
                LD A,B
 
                DEC A
 
                LD DE,_BCBITCOUNT_COR
 
                JR Z,CMPBMPFORM5
 
                LD DE,_BCBITCOUNT_345
 
CMPBMPFORM5     ADD HL,DE
 
                LD A,(HL)
 
                CP 4
 
                RET Z
 
                SCF
 
                RET
 
 
 
;[LOAD_16K]
 
LOAD_16K        LD HL,CPU1
 
                LD A,0X20
 
                RST8 _COM_FAT,_READ_FILE
 
                RET
 
 
 
;[LOAD_BMP]
 
LOAD_BMP        LD A,RAM_FLASHER
 
LOADBMP2        CALL SET_CPU1
 
                PUSH AF
 
                CALL LOAD_16K
 
                JR C,LOADBMP1
 
                POP AF
 
                INC A
 
                JR LOADBMP2
 
 
 
LOADBMP1        POP AF
 
                LD A,RAM_FLASHER
 
SET_CPU1        PUSH BC
 
                LD BC,WIN_P1
 
                OUT (C),A
 
                POP BC
 
                RET
 
 
 
HORIZ_SIZE      DW 0
 
VERT_SIZE       DW 0