; LAST UPDATE: 30.03.2025 savelij ;[]----------------------------------------------------------[] ;Процедура отчиски 0 экрана ;На вход: A - цвет отчистки (00-0Fh) ClearScreen AND 0x0F LD E,A RLCA RLCA RLCA RLCA OR E LD E,A GETPORT WINSP.Y_PORT LD C,A GETPORT WINSP.CPU1 LD B,A PUSH BC SETPORT WINSP.CPU1,0x50 LD HL,0x4000 LD BC,320 DI EXX SPMOUSE MOUSEF.REFRESH EXX ACCEL ACCELCMD.SET_BUFFER LD A,0x00 InScrLp ACCEL ACCELCMD.FILL_VERT LD (HL),E ACCEL ACCELCMD.OFF INC HL DEC BC LD A,B OR C JR NZ,InScrLp EI POP BC LD A,B SETPORT WINSP.CPU1,,0 LD A,C SETPORT WINSP.Y_PORT,,0 RET ;[]----------------------------------------------------------[] ; Процедура вывода окон на графический экран 640x256x16 ; ;[]----------------------------------------------------------[] MakeWindow: EX (SP),IY PUSH IX PUSH HL PUSH DE PUSH BC PUSH AF GETPORT WINSP.Y_PORT ; Сохраняем Y порт PUSH AF LD A,(IY+0x00) LD (MakeWindow.Type),A BIT 7,A JR Z,.L4 INC IY LD HL,0x0000 LD (MakeWindow.PositX),HL LD (MakeWindow.PositY),HL LD (MakeWindow.LenX),HL LD (MakeWindow.LenY),HL JR .L2 .L4 CP 0x7F JR Z,.L2 LD L,(IY+0x01) ; Координата X LD H,(IY+0x02) SRL H RR L LD (MakeWindow.PositX),HL LD L,(IY+0x03) ; Координата Y LD H,(IY+0x04) LD (MakeWindow.PositY),HL LD L,(IY+0x05) ; H Длина окна по X LD H,(IY+0x06) SRL H RR L LD (MakeWindow.LenX),HL LD L,(IY+0x07) ; V Длина окна по Y LD H,(IY+0x08) LD (MakeWindow.LenY),HL LD A,(MakeWindow.Type) DEC A JR NZ,.L3 LD HL,MakeWindow.Buffer LD A,(MakeWindow.Open) ADD A,A LD C,A ADD A,A ADD A,A ADD A,C ADD A,L LD L,A JR NC,.L1 INC H .L1 LD DE,(MakeWindow.PositX) LD (HL),E INC HL LD (HL),D INC HL LD DE,(MakeWindow.PositY) LD (HL),E INC HL LD (HL),D INC HL LD DE,(MakeWindow.LenX) LD (HL),E INC HL LD (HL),D INC HL LD DE,(MakeWindow.LenY) LD (HL),E INC HL LD (HL),D INC HL LD DE,(MakeWindow.Free) LD (HL),E INC HL LD (HL),D .L3 LD DE,0x0009 ADD IY,DE ; Описатель на начало подоб'ектов LD A,(MakeWindow.Type) OR A CALL NZ,StoreWindow CALL PutRectan ; Чертим прямоугольник окна .L2 LD HL,.L2 PUSH HL LD A,(IY+0x00) ; текущий подоб'ект окна INC IY CP WINSUBOBJ.TEXT;0x01 ; текстовая строка JP Z,PutTxtLine CP WINSUBOBJ.FILL;0x02 ; место для заголовка JP Z,PutHeadPlc CP WINSUBOBJ.BORDER;0x03 ; углубление в окне JP Z,PutDRectan CP WINSUBOBJ.BUTTON;0x04 ; кнопка JP Z,PutURectan CP WINSUBOBJ.BUTTONTEXT;0x05 ; кнопка с текстом JP Z,PutButton CP WINSUBOBJ.HORIZLINE;0x06 ; горизонтальная линия JP Z,PutHorizLine CP WINSUBOBJ.VERTICLINE;0x07 ; вертикальная линия JP Z,PutVertLine CP WINSUBOBJ.ICONLEFTARROW;0x08 ; иконка "стрелка влево" JP Z,PutSBleft CP WINSUBOBJ.ICONRIGHTARROW;0x09 ; иконка "стрелка вправо" JP Z,PutSBright CP WINSUBOBJ.ICONUPARROW;0x0A ; иконка "стрелка вверх" JP Z,PutSBup CP WINSUBOBJ.ICONDOWNARROW;0x0B ; иконка "стрелка вниз" JP Z,PutSBdown CP WINSUBOBJ.RESTOREWIN;0x7F ; восстановление части экрана JP Z,RestoreWindow CP WINSUBOBJ.ADRTEXT JP Z,PutAdrTxtLine POP HL POP AF SETPORT WINSP.Y_PORT,,0 ; восст. Y port POP AF POP BC POP DE POP HL POP IX EX (SP),IY RET ;-------------------------------------------------------------- ; Область данных окна .PositX DEFW 0x0000 ; адрес X координаты окна .PositY DEFW 0x0000 ; Y координата окна .LenX DEFW 0x0000 ; длина окна X/2 .LenY DEFW 0x0000 ; длина окна Y .Free DEFW 0x0000 .Open DEFB 0x00 ; Кол-во открытых окон .Type DEFB 0x00 .Buffer DUPL 0x40,0 ;-------------------------------------------------------------- ; Процедура сохранения прямоугольной плоскости в буфер StoreWindow DI PUSH IY SPMOUSE MOUSEF.REFRESH POP IY GETPORT WINSP.CPU3 PUSH AF GETPORT WINSP.CPU1 PUSH AF SETPORT WINSP.CPU1,0x50 LD HL,(MakeWindow.Free) LD A,H AND 0xC0 RLCA RLCA EXX LD HL,RAMPAGES.BuffPg1 ADD A,L LD L,A JR NC,.L1 INC H .L1 LD A,(HL) SETPORT WINSP.CPU3,,0 EXX LD A,H OR 0xC0 LD H,A LD DE,(MakeWindow.PositX) SET 6,D LD A,(MakeWindow.PositY) LD IXH,A LD A,(MakeWindow.LenY) LD IXL,A LD (.SavLen1),A ACCEL ACCELCMD.SET_BUFFER LD A,0x00 .SavLen1 EQU $-1 ACCEL ACCELCMD.OFF LD BC,(MakeWindow.LenX) .SavRect PUSH BC LD B,0x00 LD C,IXL PUSH HL ADC HL,BC POP HL JR Z,.L2 JR NC,.SavRec1 .L2 LD HL,0xC000 EXX INC HL LD A,(HL) SETPORT WINSP.CPU3,,0 EXX .SavRec1 LD A,IXH SETPORT WINSP.Y_PORT,,0 ACCEL ACCELCMD.COPY_VERT LD A,(DE) ACCEL ACCELCMD.COPY LD (HL),A ACCEL ACCELCMD.OFF ADD HL,BC POP BC INC DE DEC BC LD A,B OR C JR NZ,.SavRect EI POP AF SETPORT WINSP.CPU1,,0 POP AF SETPORT WINSP.CPU3,,0 LD A,H AND 0x3F LD H,A EXX LD A,L SUB LOW (RAMPAGES.BuffPg1) EXX RRCA RRCA OR H LD H,A LD (MakeWindow.Free),HL LD HL,MakeWindow.Open INC (HL) RET ;[]----------------------------------------------------------[] ; Процедура восстановления прямоугольной плоскости RestoreWindow LD HL,MakeWindow.Open LD A,(HL) OR A RET Z DEC (HL) HALT DI PUSH IY SPMOUSE MOUSEF.REFRESH POP IY GETPORT WINSP.CPU3 PUSH AF GETPORT WINSP.CPU1 PUSH AF SETPORT WINSP.CPU1,0x50 LD HL,MakeWindow.Buffer LD A,(MakeWindow.Open) ADD A,A LD C,A ADD A,A ADD A,A ADD A,C ADD A,L LD L,A JR NC,.L1 INC H .L1 LD E,(HL) INC HL LD D,(HL) INC HL SET 6,D LD A,(HL) INC HL INC HL LD IXH,A LD C,(HL) INC HL LD B,(HL) INC HL LD A,(HL) INC HL INC HL LD (.RstLen1),A LD IXL,A LD A,(HL) INC HL LD H,(HL) LD L,A LD (MakeWindow.Free),HL LD A,H AND 0xC0 RLCA RLCA EXX LD HL,RAMPAGES.BuffPg1 ADD A,L LD L,A JR NC,.L2 INC H .L2 LD A,(HL) SETPORT WINSP.CPU3,,0 EXX LD A,H OR 0xC0 LD H,A ACCEL ACCELCMD.SET_BUFFER LD A,0x00 .RstLen1 EQU $-1 ACCEL ACCELCMD.OFF .RstRect PUSH BC LD B,0x00 LD C,IXL PUSH HL ADC HL,BC POP HL JR Z,.L3 JR NC,.RstRec1 .L3 LD HL,0xC000 EXX INC HL LD A,(HL) SETPORT WINSP.CPU3,,0 EXX .RstRec1 ACCEL ACCELCMD.COPY LD A,(HL) ACCEL ACCELCMD.OFF LD A,IXH SETPORT WINSP.Y_PORT,,0 ACCEL ACCELCMD.COPY_VERT LD (DE),A ACCEL ACCELCMD.OFF ADD HL,BC POP BC INC DE DEC BC LD A,B OR C JR NZ,.RstRect EI POP AF SETPORT WINSP.CPU1,,0 POP AF SETPORT WINSP.CPU3,,0 RET ;[]==========================================================[] ; Процедура черчения прямоугольной площади окна PutRectan HALT DI PUSH IY SPMOUSE MOUSEF.REFRESH POP IY GETPORT WINSP.CPU1 PUSH AF SETPORT WINSP.CPU1,0x50 LD HL,(MakeWindow.PositX) ; поз. окна SET 6,H LD A,(MakeWindow.LenY) ; длина окна -(подсветка+тень) SUB 0x02 LD (.TmpLen1),A LD A,(MakeWindow.PositY) LD D,A SETPORT WINSP.Y_PORT,,0 LD E,COLORP.WHITE + COLORI.WHITE;0xFF LD (HL),E INC A SETPORT WINSP.Y_PORT,,0 LD BC,(MakeWindow.LenX) DEC BC DEC BC ACCEL ACCELCMD.SET_BUFFER LD A,0x00 .TmpLen1 EQU $-1 ACCEL ACCELCMD.FILL_VERT LD (HL),E ACCEL ACCELCMD.OFF LD (HL),COLORP.WHITE + COLORI.BLACKGRAY;0xF7 INC HL LD E,COLORP.HIGHGRAY + COLORI.HIGHGRAY;0x88 .PtRect1 LD A,D SETPORT WINSP.Y_PORT,,0 LD (HL),COLORP.WHITE + COLORI.WHITE;0xFF INC A SETPORT WINSP.Y_PORT,,0 ACCEL ACCELCMD.FILL_VERT LD (HL),E ACCEL ACCELCMD.OFF LD (HL),COLORP.BLACKGRAY + COLORI.BLACKGRAY;0x77 INC HL DEC BC LD A,B OR C JR NZ,.PtRect1 LD A,D SETPORT WINSP.Y_PORT,,0 LD (HL),COLORP.WHITE + COLORI.BLACKGRAY;0xF7 INC A SETPORT WINSP.Y_PORT,,0 LD E,COLORP.BLACKGRAY + COLORI.BLACKGRAY;0x77 ACCEL ACCELCMD.FILL_VERT LD (HL),E ACCEL ACCELCMD.OFF LD (HL),E EI POP AF SETPORT WINSP.CPU1,,0 RET ; Печать текстовой строки по указанному адресу адресу PutAdrTxtLine LD HL,(MakeWindow.PositX) SLA L RL H LD E,(IY+0x00) ; Xpos INC IY LD D,(IY+0x00) INC IY ADD HL,DE EX DE,HL LD HL,(MakeWindow.PositY) LD C,(IY+0x00) ; Ypos INC IY LD B,(IY+0x00) INC IY ADD HL,BC LD C,L LD B,H LD A,(IY+0x00) ; Color INC IY LD L,(IY+0) INC IY LD H,(IY+0) ; Адрес текста INC IY PUSH IY LD A,H OR L CALL NZ,PrnTxtLnIFF ; печатать если адрес не 0 POP IY RET ;[]===========================================================[] PutTxtLine LD HL,(MakeWindow.PositX) SLA L RL H LD E,(IY+0x00) ; Xpos INC IY LD D,(IY+0x00) INC IY ADD HL,DE EX DE,HL LD HL,(MakeWindow.PositY) LD C,(IY+0x00) ; Ypos INC IY LD B,(IY+0x00) INC IY ADD HL,BC LD C,L LD B,H LD A,(IY+0x00) ; Color INC IY PUSH IY POP HL CALL PrnTxtLnIFF PUSH HL POP IY RET ;[]===========================================================[] PutHeadPlc DI PUSH IY SPMOUSE MOUSEF.REFRESH POP IY LD HL,(MakeWindow.PositX) SET 6,H LD C,(IY+0x00) INC IY LD B,(IY+0x00) INC IY SRL B RR C ADD HL,BC LD C,(IY+0x00) INC IY INC IY LD A,(MakeWindow.PositY) ADD A,C LD IXL,A LD C,(IY+0x00) INC IY LD B,(IY+0x00) INC IY SRL B RR C LD A,(IY+0x00) INC IY INC IY LD (.TmpLen2),A LD A,(IY+0x00) AND 0x0F RLCA RLCA RLCA RLCA OR (IY+0x00) LD D,A INC IY GETPORT WINSP.CPU1 PUSH AF SETPORT WINSP.CPU1,0x50 ACCEL ACCELCMD.SET_BUFFER LD A,0x00 .TmpLen2 EQU $-1 ACCEL ACCELCMD.OFF .PtHead1 LD A,IXL SETPORT WINSP.Y_PORT,,0 ACCEL ACCELCMD.FILL_VERT LD (HL),D ACCEL ACCELCMD.OFF INC HL DEC BC LD A,B OR C JR NZ,.PtHead1 EI POP AF SETPORT WINSP.CPU1,,0 RET ;[]===========================================================[] PutDRectan LD HL,(MakeWindow.PositX) SET 6,H LD C,(IY+0x00) INC IY LD B,(IY+0x00) INC IY SRL B RR C ADD HL,BC LD C,(IY+0x00) INC IY INC IY LD A,(MakeWindow.PositY) ADD A,C LD IXL,A LD C,(IY+0x00) INC IY LD B,(IY+0x00) INC IY SRL B RR C DEC BC LD A,C DEC A LD (.TmpLen4),A LD A,(IY+0x00) INC IY INC IY SUB 0x02 LD (.TmpLen3),A ADD A,IXL INC A LD IXH,A GETPORT WINSP.CPU1 PUSH AF SETPORT WINSP.CPU1,0x50 DI ACCEL ACCELCMD.SET_BUFFER LD A,0x00 .TmpLen3 EQU $-1 ACCEL ACCELCMD.OFF LD A,IXL SETPORT WINSP.Y_PORT,,0 LD E,COLORP.BLACKGRAY + COLORI.BLACKGRAY;0x77 LD (HL),E INC A SETPORT WINSP.Y_PORT,,0 ACCEL ACCELCMD.FILL_VERT LD (HL),E ACCEL ACCELCMD.OFF LD (HL),COLORP.BLACKGRAY + COLORI.WHITE;0x7F PUSH HL ADD HL,BC LD A,IXL SETPORT WINSP.Y_PORT,,0 LD E,COLORP.WHITE + COLORI.WHITE;0xFF LD (HL),E INC A SETPORT WINSP.Y_PORT,,0 ACCEL ACCELCMD.FILL_VERT LD (HL),E ACCEL ACCELCMD.OFF LD (HL),E POP HL INC HL LD A,IXL SETPORT WINSP.Y_PORT,,0 LD E,COLORP.BLACKGRAY + COLORI.BLACKGRAY;0x77 ACCEL ACCELCMD.SET_BUFFER LD A,0x00 .TmpLen4 EQU $-1 ACCEL ACCELCMD.FILL LD (HL),E ACCEL ACCELCMD.OFF LD A,IXH SETPORT WINSP.Y_PORT,,0 LD E,COLORP.WHITE + COLORI.WHITE;0xFF ACCEL ACCELCMD.FILL LD (HL),E ACCEL ACCELCMD.OFF EI POP AF SETPORT WINSP.CPU1,,0 RET ;[]===========================================================[] PutURectan LD HL,(MakeWindow.PositX) SET 6,H ; | 0x4000 LD C,(IY+0x00) ; 00 INC IY ; 0->1 LD B,(IY+0x00) ; 01 INC IY ; 1->2 SRL B RR C ADD HL,BC LD C,(IY+0x00) ; 02 INC IY ; 2->3 INC IY ; 3->4 LD A,(MakeWindow.PositY) ADD A,C LD IXL,A LD C,(IY+0x00) ; 04 INC IY ; 4->5 LD B,(IY+0x00) ; 05 INC IY ; 5->6 SRL B RR C DEC BC LD A,C DEC A LD (.TmpLen6),A LD A,(IY+0x00) ; 06 INC IY ; 6->7 INC IY ; 7->8 SUB 0x02 LD (.TmpLen5),A ADD A,IXL INC A LD IXH,A GETPORT WINSP.CPU1 PUSH AF SETPORT WINSP.CPU1,0x50 DI ACCEL ACCELCMD.SET_BUFFER LD A,0x00 .TmpLen5 EQU $-1 ACCEL ACCELCMD.OFF LD A,IXL SETPORT WINSP.Y_PORT,,0 LD E,COLORP.WHITE + COLORI.WHITE;0xFF LD (HL),E INC A SETPORT WINSP.Y_PORT,,0 ACCEL ACCELCMD.FILL_VERT LD (HL),E ACCEL ACCELCMD.OFF LD (HL),COLORP.WHITE + COLORI.BLACKGRAY;0xF7 PUSH HL ADD HL,BC LD A,IXL SETPORT WINSP.Y_PORT,,0 LD E,COLORP.BLACKGRAY + COLORI.BLACKGRAY;0x77 LD (HL),E INC A SETPORT WINSP.Y_PORT,,0 ACCEL ACCELCMD.FILL_VERT LD (HL),E ACCEL ACCELCMD.OFF LD (HL),E POP HL INC HL LD A,IXL SETPORT WINSP.Y_PORT,,0 LD E,COLORP.WHITE + COLORI.WHITE;0xFF ACCEL ACCELCMD.SET_BUFFER LD A,0x00 .TmpLen6 EQU $-1 ACCEL ACCELCMD.FILL LD (HL),E ACCEL ACCELCMD.OFF LD A,IXH SETPORT WINSP.Y_PORT,,0 LD E,COLORP.BLACKGRAY + COLORI.BLACKGRAY;0x77 ACCEL ACCELCMD.FILL LD (HL),E ACCEL ACCELCMD.OFF EI POP AF SETPORT WINSP.CPU1,,0 RET ;[]===========================================================[] PutButton LD HL,(MakeWindow.PositX) SLA L RL H LD E,(IY+0x00) ; Xpos LD D,(IY+0x01) ADD HL,DE INC HL INC HL INC HL INC HL EX DE,HL LD HL,(MakeWindow.PositY) LD C,(IY+0x02) ; Ypos LD B,(IY+0x03) ADD HL,BC INC HL LD C,L LD B,H PUSH DE PUSH BC CALL PutURectan POP BC POP DE LD A,(IY+0x00) ; Color INC IY PUSH IY POP HL CALL PrnTxtLnIFF PUSH HL POP IY RET ;[]===========================================================[] PutHorizLine LD HL,(MakeWindow.PositX) SET 6,H LD C,(IY+0x00) INC IY LD B,(IY+0x00) INC IY SRL B RR C ADD HL,BC LD C,(IY+0x00) INC IY INC IY LD A,(MakeWindow.PositY) ADD A,C LD IXL,A LD C,(IY+0x00) INC IY LD B,(IY+0x00) INC IY SRL B RR C LD E,COLORP.BLACKGRAY + COLORI.BLACKGRAY;0x77 PUSH HL CALL .HorizLn POP HL INC IXL LD E,COLORP.WHITE + COLORI.WHITE;0xFF .HorizLn DI GETPORT WINSP.CPU1 PUSH AF SETPORT WINSP.CPU1,0x50 LD A,IXL SETPORT WINSP.Y_PORT,,0 LD A,B OR A JR Z,.HorLn1 ACCEL ACCELCMD.SET_BUFFER LD A,0x00 ACCEL ACCELCMD.FILL LD (HL),E ACCEL ACCELCMD.OFF INC H .HorLn1 LD A,C LD (.TmpLen8),A ACCEL ACCELCMD.SET_BUFFER LD A,0x00 .TmpLen8 EQU $-1 ACCEL ACCELCMD.FILL LD (HL),E ACCEL ACCELCMD.OFF EI POP AF SETPORT WINSP.CPU1,,0 RET ;[]===========================================================[] PutVertLine LD HL,(MakeWindow.PositX) SET 6,H LD C,(IY+0x00) INC IY LD B,(IY+0x00) INC IY SRL B RR C ADD HL,BC LD C,(IY+0x00) INC IY INC IY LD A,(MakeWindow.PositY) ADD A,C LD IXL,A LD A,(IY+0x00) INC IY INC IY LD (.TmpLen9),A GETPORT WINSP.CPU1 PUSH AF SETPORT WINSP.CPU1,0x50 DI LD DE,(COLORP.BLACKGRAY + COLORI.BLACKGRAY) << 8 + COLORP.WHITE + COLORI.WHITE;0x77FF LD A,IXL SETPORT WINSP.Y_PORT,,0 ACCEL ACCELCMD.SET_BUFFER LD A,0x00 .TmpLen9 EQU $-1 ACCEL ACCELCMD.FILL_VERT LD (HL),D ACCEL ACCELCMD.OFF INC HL LD A,IXL SETPORT WINSP.Y_PORT,,0 ACCEL ACCELCMD.FILL_VERT LD (HL),E ACCEL ACCELCMD.OFF EI POP AF SETPORT WINSP.CPU1,,0 RET ;[]===========================================================[] PutSBleft LD HL,SBleft JR PutSButton PutSBright LD HL,SBright JR PutSButton PutSBup LD HL,SBup JR PutSButton PutSBdown LD HL,SBdown PutSButton EX DE,HL LD HL,(MakeWindow.PositX) SET 6,H LD C,(IY+0x00) INC IY LD B,(IY+0x00) INC IY SRL B RR C ADD HL,BC EX DE,HL LD C,(IY+0x00) INC IY INC IY LD A,(MakeWindow.PositY) ADD A,C LD C,A GETPORT WINSP.CPU1 PUSH AF SETPORT WINSP.CPU1,0x50 DI ACCEL ACCELCMD.SET_BUFFER LD A,0x08 ACCEL ACCELCMD.OFF LD B,0x08 PutSBlp PUSH BC LD A,C SETPORT WINSP.Y_PORT,,0 ACCEL ACCELCMD.COPY LD A,(HL) LD (DE),A ACCEL ACCELCMD.OFF LD BC,0x0008 ADD HL,BC POP BC INC C DJNZ PutSBlp EI POP AF SETPORT WINSP.CPU1,,0 RET ; спрайтик для скроллбара "стрелка влево" SBleft ; DEFB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x77 ; DEFB 0xFF,0x88,0x88,0x88,0x80,0x00,0x88,0x77 ; DEFB 0xFF,0x88,0x88,0x80,0x00,0x00,0x88,0x77 ; DEFB 0xFF,0x88,0x80,0x00,0x00,0x08,0x88,0x77 ; DEFB 0xFF,0x88,0x80,0x00,0x00,0x08,0x88,0x77 ; DEFB 0xFF,0x88,0x88,0x00,0x88,0x88,0x88,0x77 ; DEFB 0xFF,0x88,0x88,0x80,0x88,0x88,0x88,0x77 ; DEFB 0xFF,0x77,0x77,0x77,0x77,0x77,0x77,0x77 DB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x77 ; 0 DB 0xFF,0x88,0x88,0x88,0x80,0x00,0x88,0x77 ; 1 DB 0xFF,0x88,0x88,0x80,0x00,0x08,0x88,0x77 ; 2 DB 0xFF,0x88,0x80,0x00,0x00,0x88,0x88,0x77 ; 3 DB 0xFF,0x88,0x80,0x00,0x00,0x88,0x88,0x77 ; 4 DB 0xFF,0x88,0x88,0x80,0x00,0x08,0x88,0x77 ; 5 DB 0xFF,0x88,0x88,0x88,0x80,0x00,0x88,0x77 ; 6 DB 0xFF,0x77,0x77,0x77,0x77,0x77,0x77,0x77 ; 7 ; спрайтик для скроллбара "стрелка вправо" SBright ; DEFB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x77 ; DEFB 0xFF,0x88,0x88,0x08,0x88,0x88,0x88,0x77 ; DEFB 0xFF,0x88,0x88,0x00,0x88,0x88,0x88,0x77 ; DEFB 0xFF,0x88,0x88,0x00,0x08,0x88,0x88,0x77 ; DEFB 0xFF,0x88,0x88,0x00,0x08,0x88,0x88,0x77 ; DEFB 0xFF,0x88,0x88,0x00,0x88,0x88,0x88,0x77 ; DEFB 0xFF,0x88,0x88,0x08,0x88,0x88,0x88,0x77 ; DEFB 0xFF,0x77,0x77,0x77,0x77,0x77,0x77,0x77 DB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF ; 0 DB 0xFF,0x88,0x00,0x08,0x88,0x88,0x88,0x77 ; 1 DB 0xFF,0x88,0x80,0x00,0x08,0x88,0x88,0x77 ; 2 DB 0xFF,0x88,0x88,0x00,0x00,0x08,0x88,0x77 ; 3 DB 0xFF,0x88,0x88,0x00,0x00,0x08,0x88,0x77 ; 4 DB 0xFF,0x88,0x80,0x00,0x08,0x88,0x88,0x77 ; 5 DB 0xFF,0x88,0x00,0x08,0x88,0x88,0x88,0x77 ; 6 DB 0xFF,0x77,0x77,0x77,0x77,0x77,0x77,0x77 ; 7 ; спрайтик для скроллбара "стрелка вверх" SBup ; DEFB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x77 ; DEFB 0xFF,0x88,0x88,0x88,0x88,0x88,0x88,0x77 ; DEFB 0xFF,0x88,0x88,0x80,0x08,0x88,0x88,0x77 ; DEFB 0xFF,0x88,0x88,0x00,0x00,0x88,0x88,0x77 ; DEFB 0xFF,0x88,0x00,0x00,0x00,0x00,0x88,0x77 ; DEFB 0xFF,0x88,0x88,0x88,0x88,0x88,0x88,0x77 ; DEFB 0xFF,0x88,0x88,0x88,0x88,0x88,0x88,0x77 ; DEFB 0xFF,0x77,0x77,0x77,0x77,0x77,0x77,0x77 DB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF ; 0 DB 0xFF,0x88,0x88,0x88,0x88,0x88,0x88,0x77 ; 1 DB 0xFF,0x88,0x88,0x80,0x08,0x88,0x88,0x77 ; 2 DB 0xFF,0x88,0x88,0x00,0x00,0x88,0x88,0x77 ; 3 DB 0xFF,0x88,0x80,0x00,0x00,0x08,0x88,0x77 ; 4 DB 0xFF,0x88,0x00,0x08,0x80,0x00,0x88,0x77 ; 5 DB 0xFF,0x88,0x00,0x88,0x88,0x00,0x88,0x77 ; 6 DB 0xFF,0x77,0x77,0x77,0x77,0x77,0x77,0x77 ; 7 ; спрайтик для скроллбара "стрелка вниз" SBdown ; DEFB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x77 ; DEFB 0xFF,0x88,0x88,0x88,0x88,0x88,0x88,0x77 ; DEFB 0xFF,0x88,0x88,0x88,0x88,0x88,0x88,0x77 ; DEFB 0xFF,0x88,0x00,0x00,0x00,0x00,0x88,0x77 ; DEFB 0xFF,0x88,0x88,0x00,0x00,0x88,0x88,0x77 ; DEFB 0xFF,0x88,0x88,0x80,0x08,0x88,0x88,0x77 ; DEFB 0xFF,0x88,0x88,0x88,0x88,0x88,0x88,0x77 ; DEFB 0xFF,0x77,0x77,0x77,0x77,0x77,0x77,0x77 DB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF ; 0 DB 0xFF,0x88,0x88,0x88,0x88,0x88,0x88,0x77 ; 1 DB 0xFF,0x88,0x00,0x88,0x88,0x00,0x88,0x77 ; 2 DB 0xFF,0x88,0x00,0x08,0x80,0x00,0x88,0x77 ; 3 DB 0xFF,0x88,0x80,0x00,0x00,0x08,0x88,0x77 ; 4 DB 0xFF,0x88,0x88,0x00,0x00,0x88,0x88,0x77 ; 5 DB 0xFF,0x88,0x88,0x80,0x08,0x88,0x88,0x77 ; 6 DB 0xFF,0x77,0x77,0x77,0x77,0x77,0x77,0x77 ; 7 ;[]----------------------------------------------------------[] ; Процедура инвертирования прямоугольной плоскости ; На вход: ; HL - X координата ; BC - Y координата ; HX - длина Y ; LX - длина X ; D - текущий цвет ; E - нужный цвет InvertRectan PUSH IY GETPORT WINSP.Y_PORT ; Сохраняем Y порт PUSH AF GETPORT WINSP.CPU1 PUSH AF SETPORT WINSP.CPU1,0x50 LD IYL,C LD C,IXH LD B,IXL SRL H RR L SET 6,H LD IXL,E LD IXH,D LD A,D AND 0xF0 LD IYH,A RRCA RRCA RRCA RRCA OR IYH LD D,A AND 0x0F LD IYH,A LD E,IXH LD A,E AND 0x0F RLCA RLCA RLCA RLCA OR IYH LD IXH,A EXX LD A,IXL AND 0xF0 LD IYH,A RRCA RRCA RRCA RRCA OR IYH LD D,A AND 0x0F LD IYH,A LD E,IXL LD A,E AND 0x0F RLCA RLCA RLCA RLCA OR IYH LD B,A AND 0xF0 LD IYH,A RRCA RRCA RRCA RRCA OR IYH LD C,A EXX .PrnInvLp LD A,IYL SETPORT WINSP.Y_PORT,,0 PUSH HL EXX POP HL EXX PUSH HL PUSH BC CALL InvLnLp POP BC POP HL INC IYL DEC C JR NZ,.PrnInvLp POP AF SETPORT WINSP.CPU1,,0 POP AF SETPORT WINSP.Y_PORT,,0 POP IY RET InvLnLp LD A,(HL) INC HL CP D JR NZ,CmpInv2 EXX LD (HL),D INC HL EXX DJNZ InvLnLp RET CmpInv2 CP E JR NZ,CmpInv3 EXX LD (HL),E INC HL EXX DJNZ InvLnLp RET CmpInv3 CP IXH JR NZ,SetInv4 EXX LD (HL),B INC HL EXX DJNZ InvLnLp RET SetInv4 EXX LD (HL),C INC HL EXX DJNZ InvLnLp RET