; LAST UPDATE: 20.02.2025 savelij ;[]----------------------------------------------------------[] ; Процедура вывода текстовых строк на графический экран 640x256 ; с обрезанием левого края текста ; На вход: ; IX - Кол-во пикселей под вывод строки ; HL - адрес текстовой строки ; DE - позиция вывода по X ; BC - позиция вывода по Y ; A - цвет печати (7-4бит PAPER, 3-0бит INK) ; (конец строки - 0) PrnRangPathL PUSH DE PUSH BC PUSH AF DI GETPORT WINSP.CPU0 PUSH AF LD A,(RAMPAGES.FNFONT) SETPORT WINSP.CPU0,,0 LD BC,0x0000 LD D,HIGH (FONT_RAW)-0xC0 PUSH HL LD A,(HL) PrRangL INC HL LD E,A LD A,(DE) ADD A,A ADD A,C LD C,A LD A,B ADC A,0x00 LD B,A LD A,(HL) OR A JR NZ,PrRangL PUSH IX POP HL SBC HL,BC LD C,L LD B,H POP HL JR NC,PrRngLE LD A,C SUB 0x1A LD IXL,A LD A,B SBC A,0x00 LD IXH,A LD A,(HL) EX AF,AF' INC HL INC HL PrRngL0 LD BC,0x0000 INC HL LD A,(HL) PrRngL1 INC HL LD E,A LD A,(DE) ADD A,A ADD A,C LD C,A LD A,B ADC A,0x00 LD B,A LD A,(HL) CP 0x5C JR NZ,PrRngL1 ADD IX,BC JR NC,PrRngL0 DEC HL LD (HL),'.' DEC HL LD (HL),'.' DEC HL LD (HL),'\\' DEC HL LD (HL),':' DEC HL EX AF,AF' LD (HL),A PrRngLE POP AF SETPORT WINSP.CPU0,,0 EI POP AF POP BC POP DE JP PrnTxtLnIFF ;[]----------------------------------------------------------[] ; Процедура вывода текстовых строк на графический экран 640x256 ; с обрезанием левого края текста ; На вход: ; IX - Кол-во пикселей под вывод строки ; HL - адрес текстовой строки ; DE - позиция вывода по X ; BC - позиция вывода по Y ; A - цвет печати (7-4бит PAPER, 3-0бит INK) ; (конец строки - 0) PrnRangPathR PUSH AF PUSH BC PUSH DE DI GETPORT WINSP.CPU0 PUSH AF LD A,(RAMPAGES.FNFONT) SETPORT WINSP.CPU0,,0 LD BC,0x0000 LD D,HIGH (FONT_RAW)-0xC0 PUSH HL LD A,(HL) PrRangR INC HL LD E,A LD A,(DE) ADD A,A ADD A,C LD C,A LD A,B ADC A,0x00 LD B,A LD A,(HL) OR A JR NZ,PrRangR PUSH IX POP HL SBC HL,BC EX DE,HL POP HL JR NC,PrRngRE LD A,E SUB 0x1A LD IXL,A LD A,D SBC A,0x00 LD IXH,A LD D,HIGH (FONT_RAW)-0xC0 LD A,(HL) EX AF,AF' INC HL INC HL PrRngR0 LD BC,0x0000 INC HL LD A,(HL) PrRngR1 INC HL LD E,A LD A,(DE) ADD A,A ADD A,C LD C,A LD A,B ADC A,0x00 LD B,A LD A,(HL) CP 0x5C JR NZ,PrRngR1 ADD IX,BC JR NC,PrRngR0 DEC HL LD (HL),'.' DEC HL LD (HL),'.' DEC HL LD (HL),'\\' DEC HL LD (HL),':' DEC HL EX AF,AF' LD (HL),A LD BC,0x0000 PUSH HL LD A,(HL) PrRngR2 INC HL LD E,A LD A,(DE) ADD A,A ADD A,C LD C,A LD A,B ADC A,0x00 LD B,A LD A,(HL) OR A JR NZ,PrRngR2 POP HL PrRngRE POP AF SETPORT WINSP.CPU0,,0 EI POP DE EX DE,HL OR A SBC HL,BC EX DE,HL POP BC POP AF JP PrnTxtLnIFF ;[]----------------------------------------------------------[] ; Процедура вывода текстовых строк на графический экран 640x256 ; с обрезанием левого края текста ; На вход: ; IX - Кол-во пикселей под вывод строки ; HL - адрес текстовой строки ; DE - центр вывода по X ; BC - позиция вывода по Y ; A - цвет печати (7-4бит PAPER, 3-0бит INK) ; (конец строки - 0) PrnRangPathC PUSH BC PUSH AF PUSH DE DI GETPORT WINSP.CPU0 PUSH AF LD A,(RAMPAGES.FNFONT) SETPORT WINSP.CPU0,,0 PrnRangC LD BC,0x0000 LD D,HIGH (FONT_RAW)-0xC0 PUSH HL LD A,(HL) PrRangC INC HL LD E,A LD A,(DE) ADD A,A ADD A,C LD C,A LD A,B ADC A,0x00 LD B,A LD A,(HL) OR A JR NZ,PrRangC PUSH IX POP HL SBC HL,BC EX DE,HL POP HL JR NC,PrRngCE PUSH IX LD A,E SUB 0x1A LD IXL,A LD A,D SBC A,0x00 LD IXH,A LD A,(HL) EX AF,AF' INC HL INC HL LD D,HIGH (FONT_RAW)-0xC0 PrRngC0 LD BC,0x0000 INC HL LD A,(HL) PrRngC1 INC HL LD E,A LD A,(DE) ADD A,A ADD A,C LD C,A LD A,B ADC A,0x00 LD B,A LD A,(HL) CP 0x5C JR NZ,PrRngC1 ADD IX,BC JR NC,PrRngC0 DEC HL LD (HL),'.' DEC HL LD (HL),'.' DEC HL LD (HL),'\\' DEC HL LD (HL),':' DEC HL EX AF,AF' LD (HL),A POP IX JR PrnRangC PrRngCE POP AF SETPORT WINSP.CPU0,,0 EI POP DE EX DE,HL SRL B RR C OR A SBC HL,BC EX DE,HL POP AF POP BC JP PrnTxtLnIFF ;[]----------------------------------------------------------[] ; Процедура вывода текстовых строк на графический экран 640x256; ; в режиме IFF шрифта ; На вход: ; HL - адрес текстовой строки ; DE - позиция вывода по X ; BC - позиция вывода по Y ; A - цвет печати (7-4бит PAPER, 3-0бит INK) ; (конец строки - 0) PrnTxtLnIFF PUSH IY LD IYL,C ; Y координата LD B,A GETPORT WINSP.Y_PORT ; Сохраняем Y порт PUSH AF GETPORT WINSP.CPU1 LD IYH,A DI EXX SPMOUSE MOUSEF.REFRESH EXX CALL InsPrintColor PUSH DE ; X координата EXX POP BC SRL B RR C SET 6,B LD HL,PrnPAPp ; PAPER буфер LD DE,PrnINKp ; INK буфер EXX LD C,L ; Адрес строки LD B,H ; Итак: ; BC - Aдрес строки ; 'HL - буфер PAPER ; 'DE - буфер INK ; 'BC - X координата печати в видео ОЗУ ; LY - Y координата печати GETPORT WINSP.CPU0 PUSH AF LD A,(RAMPAGES.FNFONT) SETPORT WINSP.CPU0,,0 ACCEL ACCELCMD.SET_BUFFER LD A,0x08 ACCEL ACCELCMD.OFF LD A,(BC) INC BC OR A JR Z,PrnIFFe PrnIFFloop LD L,A LD H,HIGH (FONT_RAW)-0xC0 PUSH BC LD B,(HL) ; длина символа INC H LD E,(HL) INC H LD D,(HL) LD HL,0x0008 EX DE,HL SETPORT WINSP.CPU1,0x50 PrnIFFlp1 ACCEL ACCELCMD.COPY LD A,(HL) ACCEL ACCELCMD.OFF EXX LD A,IYL SETPORT WINSP.Y_PORT,,0 ACCEL ACCELCMD.COPY OR (HL) EX DE,HL XOR (HL) ACCEL ACCELCMD.COPY_VERT LD (BC),A ACCEL ACCELCMD.OFF EX DE,HL INC BC EXX ADD HL,DE DJNZ PrnIFFlp1 POP BC LD A,IYH SETPORT WINSP.CPU1,,0 LD A,(BC) INC BC OR A JR NZ,PrnIFFloop PrnIFFe LD L,C ; Адрес строки LD H,B POP AF SETPORT WINSP.CPU0,,0 EI POP AF SETPORT WINSP.Y_PORT,,0 POP IY RET ;[]----------------------------------------------------------[] ; Процедура вывода текстовых строк на графический экран 640x256; ; На вход: ; HL - адрес текстовой строки ; DE - позиция вывода по X ; BC - позиция вывода по Y ; A - цвет печати (7-4бит PAPER, 3-0бит INK) ; (конец строки - 0) PrnTxtLnNorm PUSH IY LD IYL,C ; Y координата LD B,A GETPORT WINSP.Y_PORT ; Сохраняем Y порт PUSH AF GETPORT WINSP.CPU1 LD IYH,A DI EXX SPMOUSE MOUSEF.REFRESH EXX CALL InsPrintColor PUSH DE ; X координата EXX POP BC SRL B RR C SET 6,B LD HL,PrnPAPp ; PAPER буфер LD DE,PrnINKp ; INK буфер EXX LD C,L ; Адрес строки LD B,H ; Итак: ; BC - Aдрес строки ; 'HL - буфер PAPER ; 'DE - буфер INK ; 'BC - X координата печати в видео ОЗУ ; LY - Y координата печати GETPORT WINSP.CPU0 PUSH AF LD A,(RAMPAGES.FNFONT) SETPORT WINSP.CPU0,,0 ACCEL ACCELCMD.SET_BUFFER LD A,0x08 ACCEL ACCELCMD.OFF LD A,(BC) INC BC OR A JR Z,PrnNORe PrnNORloop LD L,A LD H,HIGH (IFFFONT_RAW)-0xC0 PUSH BC LD E,(HL) INC H LD A,(HL) ADD A,HIGH (IFFFONT_RAW)-0xC0 LD D,A LD HL,0x0008 EX DE,HL SETPORT WINSP.CPU1,0x50 LD B,0x04 PrnNORlp1 ACCEL ACCELCMD.COPY LD A,(HL) ACCEL ACCELCMD.OFF EXX LD A,IYL SETPORT WINSP.Y_PORT,,0 ACCEL ACCELCMD.COPY OR (HL) EX DE,HL XOR (HL) ACCEL ACCELCMD.COPY_VERT LD (BC),A ACCEL ACCELCMD.OFF EX DE,HL INC BC EXX ADD HL,DE DJNZ PrnNORlp1 POP BC LD A,IYH SETPORT WINSP.CPU1,,0 LD A,(BC) INC BC OR A JR NZ,PrnNORloop PrnNORe LD L,C ; Адрес строки LD H,B POP AF SETPORT WINSP.CPU0,,0 EI POP AF SETPORT WINSP.Y_PORT,,0 POP IY RET ;[]----------------------------------------------------------[] ; Процедура вывода текстовых строк на графический экран 640x256; ; На вход: ; HL - адрес текстовой строки ; DE - позиция вывода по X ; C - позиция вывода по Y ; B - кол-во печатаемых символов ; A - цвет печати (7-4бит PAPER, 3-0бит INK) ; (конец строки - 0) PrnTxtLnNormC PUSH IY LD IYL,C ; Y координата LD IYH,B ; кол-во симв LD B,A GETPORT WINSP.Y_PORT ; Сохраняем Y порт PUSH AF GETPORT WINSP.CPU1 PUSH AF SETPORT WINSP.CPU1,0x50 DI EXX SPMOUSE MOUSEF.REFRESH EXX CALL InsPrintColor PUSH DE ; X координата EXX POP BC SRL B RR C SET 6,B LD HL,PrnPAPp ; PAPER буфер LD DE,PrnINKp ; INK буфер EXX LD C,L ; Адрес строки LD B,H ; Итак: ; BC - Aдрес строки ; 'HL - буфер PAPER ; 'DE - буфер INK ; 'BC - X координата печати в видео ОЗУ ; LY - Y координата печати ; IN A,(PAGE0) GETPORT WINSP.CPU0 PUSH AF LD A,(RAMPAGES.FNFONT) SETPORT WINSP.CPU0,,0 ACCEL ACCELCMD.SET_BUFFER LD A,0x08 ACCEL ACCELCMD.OFF PrnNORloopC LD A,(BC) INC BC LD L,A LD H,HIGH (IFFFONT_RAW)-0xC0 PUSH BC LD E,(HL) INC H LD A,(HL) ADD A,HIGH (IFFFONT_RAW)-0xC0 LD D,A LD HL,0x0008 EX DE,HL LD B,0x04 PrnNORlp1c ACCEL ACCELCMD.COPY LD A,(HL) ACCEL ACCELCMD.OFF EXX LD A,IYL SETPORT WINSP.Y_PORT,,0 ACCEL ACCELCMD.COPY OR (HL) EX DE,HL XOR (HL) ACCEL ACCELCMD.COPY_VERT LD (BC),A ACCEL ACCELCMD.OFF EX DE,HL INC BC EXX ADD HL,DE DJNZ PrnNORlp1c POP BC DEC IYH JR NZ,PrnNORloopC POP AF SETPORT WINSP.CPU0,,0 EI POP AF SETPORT WINSP.CPU1,,0 POP AF SETPORT WINSP.Y_PORT,,0 POP IY RET InsPrintColor LD A,B CP 0x00 .PrvCOLp EQU $-1 RET Z LD (.PrvCOLp),A AND 0x0F ; INK LD C,A RLCA RLCA RLCA RLCA OR C EXX LD HL,PrnINKp ; INK буфер CPL REPT 7 LD (HL),A INC HL ENDM LD (HL),A EXX LD A,B AND 0xF0 ; PAPER LD B,A RRCA RRCA RRCA RRCA OR B EXX LD DE,PrnPAPp ; PAPER буфер XOR (HL) ; XOR с INK REPT 7 LD (DE),A INC DE ENDM LD (DE),A EXX RET PrnINKp DB 8 DUP 0 PrnPAPp DB 8 DUP 0