;****************************************************************** ; вход: DE - вертикаль, HL - горизонталь, ; B - цвет точки, A - экран PIC_FN1: AND A SCF RET NZ IN A,(RGADR) PUSH AF IN A,(SLOT3) EX AF,AF' LD A,SYS_PAGE OUT (SLOT3),A LD A,(WIN_ID_0.GRAF_Y) ADD A,E OUT (RGADR),A LD A,B LD BC,(WIN_ID_0.GRAF_X) ADD HL,BC LD B,A LD A,#50 OUT (SLOT3),A LD (HL),A EX AF,AF' OUT (SLOT3),A POP AF OUT (RGADR),A RET ; вход: DE - вертикаль, HL - горизонталь. ; IX - длина линии в точках не 0 !!! ; FILL - by A ; ????? PIC_FN2: LD D,A IN A,(SLOT1) EX AF,AF' LD A,B ADD A,#50 OUT (SLOT1),A BIT 0,B LD BC,#40+#4000 JR Z,PIC_FN2_NO_2ND LD BC,#40+320+#4000 PIC_FN2_NO_2ND: ADD HL,BC LD A,E OUT (RGADR),A LD A,XH AND A JR Z,PIC_FN2_NO256 PIC_FN2_256L: LD B,64 PIC_FN2_256: LD (HL),D INC HL LD (HL),D INC HL LD (HL),D INC HL LD (HL),D INC HL DJNZ PIC_FN2_256 DEC A JR NZ,PIC_FN2_256L PIC_FN2_NO256: LD B,XL AND A RR B JR NC,PIC_FN2_NO1 LD (HL),D INC HL AND A PIC_FN2_NO1: RR B JR NC,PIC_FN2_NO2 LD (HL),D INC HL LD (HL),D INC HL AND A PIC_FN2_NO2: XOR A CP B JR Z,PIC_FN2_NO4 PIC_FN2_4: LD (HL),D INC HL LD (HL),D INC HL LD (HL),D INC HL LD (HL),D INC HL DJNZ PIC_FN2_4 PIC_FN2_NO4: EX AF,AF' OUT (SLOT1),A XOR A OUT (RGADR),A RET ;************************************************************************ ; вход: dE - вертикаль, HL - горизонталь. ; A',HL' - адрес данных во второй странице ! ; BC' - длина данных ; ВЫВОД ЛИНИИ ТОЧЕК PIC_FN3: IN A,(SLOT3) LD C,A LD A,SYS_PAGE OUT (SLOT3),A LD A,C LD (SYS_PAGE.COPY_SLOT3),A IN A,(SLOT2) LD (SYS_PAGE.COPY_SLOT2),A IN A,(SLOT1) LD (SYS_PAGE.COPY_SLOT1),A LD A,B ADD A,#50 OUT (SLOT1),A BIT 0,B LD BC,40H+04000H JR Z,PIC_FN3_NO_2ND LD BC,40H+320+04000H PIC_FN3_NO_2ND: ADD HL,BC LD A,E OUT (RGADR),A LD A,H EXX LD D,A EXX LD A,L EXX LD E,A EXX EX AF,AF' OUT (SLOT2),A EX AF,AF' LD HL,SYS_PAGE.RAMD_FAT LD L,A LD A,SYS_PAGE OUT (SLOT3),A LD A,(HL) OUT (SLOT3),A EXX LDIR BIT 6,H JR Z,PIC_FN3_NO RES 6,H EX AF,AF' PIC_FN3_NO: EXX LD A,SYS_PAGE OUT (SLOT3),A LD A,(SYS_PAGE.COPY_SLOT1) OUT (SLOT1),A LD A,(SYS_PAGE.COPY_SLOT2) OUT (SLOT2),A LD A,(SYS_PAGE.COPY_SLOT3) OUT (SLOT3),A XOR A OUT (RGADR),A RET ;************************************************************************** ;PIC_FN4: ; вход: HL - данные палитры RGB, E - начальный цвет ; D - число цветов, B - PAL-mask, A - page PAL PIC_SET_PAL: PUSH IX EX AF,AF' IN A,(RGADR) PUSH AF ; сохранить положение RGADR LD A,E OUT (RGADR),A ; начальный цвет в порт LD A,D ; сохранить число цветов EX AF,AF' ; вернуть страницу PAL BIT 7,H ; проверить адрес данных LD C,SLOT3 ; если ниже 8000h LD D,#C3 ; то граф.экран на странице 3 JR Z,.NO_PAGE1 LD D,#43 ; иначе LD C,SLOT1 ; на странице 1 .NO_PAGE1: ADD A,A PUSH AF ADD A,A AND #1C XOR #E0 ; младший байт адреса PAL LD E,A ; DE - адрес в видео-ОЗУ PUSH DE POP IX ; адрес палитры LD D,B ; маска PAL EX AF,AF' ; вернуть число цветов LD B,A ; число цветов IN E,(C) ; сохранить страницу 3 LD A,#50 ; страница графического RAM OUT (C),A POP AF JR C,PIC_GET_PAL ; цикл установки цветов палитры .loopPal: LD A,(HL) ; B AND D LD (IX+2),A INC HL LD A,(HL) ; G AND D LD (IX+1),A INC HL LD A,(HL) ; R AND D LD (IX+0),A INC HL LD A,(HL) ; Y AND D LD (IX+3),A INC HL IN A,(RGADR) INC A OUT (RGADR),A DJNZ .loopPal ; выполнять, пока не 0 .exit: OUT (C),E ; восстановить страницу 3 POP AF OUT (RGADR),A ; восстановить Y_PORT POP IX AND A RET PIC_GET_PAL: ; цикл чтения цветов палитры .loopPal: LD A,(IX+2) LD (HL),A ; B INC HL LD A,(IX+1) LD (HL),A ; G INC HL LD A,(IX+0) LD (HL),A ; R INC HL LD A,(IX+3) LD (HL),A ; Y INC HL IN A,(RGADR) INC A OUT (RGADR),A DJNZ .loopPal ; выполнять, пока не 0 JR PIC_SET_PAL.exit ;******************************************************************** PIC_FN5: ; УСТАНОВКА СТРАНИЦЫ MODE LD A,E AND 1 OUT (RGMOD),A RET ;******************************************************************* ; Установка внутренней палитры ; A - page_pal, E - номер палитры, B - тип палитры SET_PAL_INIT: LD D,A DEC B JP Z,SET_PAL_GRAF DEC B JP Z,SET_PAL_ZX DEC B JP Z,SET_PAL_IBM ; LD IX,PAL_DAT1 ; JR Z,PIC_FN6_L1 ; DEC B ; LD IX,PAL_DAT ; JR Z,PIC_FN6_L1 SCF RET ;PIC_FN6_L1: ; AND 3 ; ADD A,A ; ADD A,A ; ADD A,#E0 ; LD L,A ; LD H,#43 ; IN A,(SLOT1) ; PUSH AF ; ; LD A,#50 ; OUT (SLOT1),A ; XOR A ; OUT (RGADR),A ; EX AF,AF' ; call PAL_LOOP_M ; ; POP AF ; OUT (SLOT1),A ; XOR A ; OUT (RGADR),A ; ; RET ;****************************************************************** ; Рисование линии. ; dЕ - вертикаль, HL - горизонталь ; H' - высота, C'/DE',B' - add_parameters ; A - color PIC_FN7: LD D,A IN A,(SLOT1) PUSH AF LD A,B ADD A,#50 OUT (SLOT1),A BIT 0,B LD BC,#40+#4000 JR Z,.no_2nd LD BC,#40+320+#4000 .no_2nd: ADD HL,BC LD A,E .loop: OUT (RGADR),A ; страница видео-ОЗУ LD (HL),D EXX EX AF,AF' DEC H JR Z,.exit LD A,C ; NEXT HORIZONTAL ADD A,B LD C,A LD A,E EXX ADC A,L LD L,A EXX LD A,D EXX ADC A,H LD H,A INC E ; NEXT VERTICAL EX AF,AF' INC A JR .loop .exit: EXX POP AF OUT (SLOT1),A XOR A OUT (RGADR),A RET ;****************************************************************** ; Рисование линии. ; dЕ - вертикаль, HL - горизонталь ; H' - высота, C'/DE',B' - add_parameters ; (IX) - colors PIC_FN8: IN A,(SLOT1) PUSH AF LD A,B ADD A,#50 OUT (SLOT1),A BIT 0,B LD BC,#40+#4000 JR Z,.no_2nd LD BC,#40+320+#4000 .no_2nd: ADD HL,BC LD A,E .loop: OUT (RGADR),A ; страница видео-ОЗУ LD D,(IX) INC IX LD (HL),D EXX EX AF,AF' DEC H JR Z,.exit LD A,C ; NEXT HORIZONTAL ADD A,B LD C,A LD A,E EXX ADC A,L LD L,A EXX LD A,D EXX ADC A,H LD H,A INC E ; NEXT VERTICAL EX AF,AF' INC A JR .loop .exit: EXX POP AF OUT (SLOT1),A XOR A OUT (RGADR),A RET ;************************************************** ; Вывод спрайта на экран ; HL - горизоталь, dE - вертикаль ; A',HL' - адрес данных PIC_FN9: ;********************************* ; HL,E - координаты D - color ; B - Magnify PIC_FN10: PIC_FN11: PIC_FN12: PIC_FN13: PIC_FN14: PIC_FN15: SCF RET ;************************************ ; ; Экранные таблицы ; ;текстовое окно 80x32 LP_SCR_80: DB 40,32,0,0,27,0,0,0 DB 0, 0,0,0, 0,0,0,0 ;текстовое окно 40x32 LP_SCR_40: DB 40,32,0,0,123,0,0,0 DB 0, 0,0,0, 0,0,0,0 ;спектрумовское окно 32x24 LP_SCR_32: DB 32,24,4,4,48,1,0,0 DB 0, 0,0,0, 0,0,0,0 ;текстовое окно 64x24 LP_SCR_64: DB 32,24,4,4,155,0,0,0 DB 0, 0,0,0, 0,0,0,0 ;графическое окно 0 PIC_320X256_1: DB 40,32,0,0,32,0,8,0 DB 0, 0,0,0, 0,0,0,0 ;графическое окно 1 PIC_320X256_2: DB 40,32,0,0,96,0,48,0 DB 0, 0,0,0, 0,0, 0,0 ;************************************ ;