; LAST UPDATE: 25.11.2022 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, M_B_L, M_B_H, M_B_L | M_B_H
GREEN_3 DB 0, M_G_L, M_G_H, M_G_L | M_G_H
RED_3 DB 0, M_R_L, M_R_H, M_R_L | M_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