flex_nav/fnbar.a80

597 lines
9.4 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

; LAST UPDATE: 07.03.2025 savelij
;[]-----------------------------------------------------------[]
InitScrollBar LD C,(IX + BAR.PAGEL)
LD B,(IX + BAR.PAGEH) ; Š®«-¢® í«¥¬. ­  áâà.
LD L,C
LD H,B
LD E,(IX + BAR.MAXL)
LD D,(IX + BAR.MAXH) ; ¬ ªá.í«¥¬¥­â®¢
LD A,D
OR E
JR NZ,.L1
INC DE
.L1 OR A
SBC HL,DE
JR C,.L2
ADD HL,DE
EX DE,HL
.L2 PUSH DE
LD E,(IX + BAR.MAXLL)
LD D,(IX + BAR.MAXLH) ; Š®«-¢® ¢¨¤. í«¥¬. * à §¬¥à ¡ à 
CALL Mult16X16 ; DE * BC = HL + DE
POP BC ; /¬ ªá.í«¥¬¥­â®¢
CALL Divis32X16 ; HL + DE / BC = DE (HL-®áâ)
LD A,H
OR L
JR Z,.L3
INC DE
.L3 LD HL,0x0003
SBC HL,DE
JR C,.L4
LD DE,0x0003
.L4 LD (IX + BAR.LENL),E ; = ¤«¨­  ¡ à 
LD (IX + BAR.LENH),D ; = ¤«¨­  ¡ à 
RET
PrnHScrBar PUSH IY
GETPORT WINSP.Y_PORT
PUSH AF
GETPORT WINSP.CPU1
LD IYL,A
LD L,(IX + BAR.FIRSTL) ; FirstFile
LD H,(IX + BAR.FIRSTH)
LD E,(IX + BAR.PAGEL)
LD D,(IX + BAR.PAGEH)
LD C,(IX + BAR.MAXL) ; EquipFiles
LD B,(IX + BAR.MAXH)
LD A,B
OR C
JR NZ,.L1
INC BC
.L1 PUSH BC
PUSH HL
ADD HL,DE
SBC HL,BC
POP HL
JR C,.L2
JR Z,.L2
LD L,C
LD H,B
SBC HL,DE
JR NC,.L2
LD HL,0x0000
.L2 EX DE,HL
LD C,(IX + BAR.MAXLL)
LD B,(IX + BAR.MAXLH)
CALL Mult16X16
POP BC
CALL Divis32X16
LD A,D
OR E
JR Z,.L3
PUSH DE
SRL D
RR E
JR NC,.L4
INC DE
.L4 LD L,(IX + BAR.XL)
LD H,(IX + BAR.XH)
SRL H
RR L
SET 6,H
LD A,(IX + BAR.YL)
LD C,A
LD B,COLORP.HIGHGRAY + COLORI.HIGHGRAY;0x88
SETPORT WINSP.CPU1,0x50
DI
ACCEL ACCELCMD.SET_BUFFER
LD A,0x08
ACCEL ACCELCMD.OFF
.L5 LD A,C
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.FILL_VERT
LD (HL),B
ACCEL ACCELCMD.OFF
INC HL
DEC DE
LD A,D
OR E
JR NZ,.L5
LD A,IYL
SETPORT WINSP.CPU1,,0
EI
POP DE
.L3 PUSH DE
LD L,(IX + BAR.XL)
LD H,(IX + BAR.XH)
ADD HL,DE
LD E,(IX + BAR.LEFTL)
LD D,(IX + BAR.LEFTH)
LD A,D
OR E
JR Z,.L6
EX DE,HL
SETPORT WINSP.Y_PORT,0xC0
LD (HL),E
INC HL
LD (HL),D
EX DE,HL
.L6 PUSH HL
SRL H
RR L
SET 6,H
LD A,(IX + BAR.YL)
LD C,A
LD E,(IX + BAR.LENL)
LD D,(IX + BAR.LENH)
LD A,D
OR A
JR NZ,.L7
LD A,E
CP 0x06
JR NC,.L7
LD E,0x06
.L7 SRL D
RR E
JR C,.L8
DEC DE
.L8 DEC DE
SETPORT WINSP.CPU1,0x50
DI
ACCEL ACCELCMD.SET_BUFFER
LD A,0x06
ACCEL ACCELCMD.OFF
LD B,COLORP.WHITE + COLORI.WHITE;0xFF
LD A,C
SETPORT WINSP.Y_PORT,,0
LD (HL),B
INC A
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.FILL_VERT
LD (HL),B
ACCEL ACCELCMD.OFF
LD (HL),0xF7
INC HL
.L9 LD A,C
SETPORT WINSP.Y_PORT,,0
LD (HL),B
INC A
SETPORT WINSP.Y_PORT,,0
LD A,COLORP.HIGHGRAY + COLORI.HIGHGRAY;0x88
ACCEL ACCELCMD.FILL_VERT
LD (HL),A
ACCEL ACCELCMD.OFF
LD (HL),COLORP.BLACKGRAY + COLORI.BLACKGRAY;0x77
INC HL
DEC DE
LD A,D
OR E
JR NZ,.L9
LD A,C
SETPORT WINSP.Y_PORT,,0
LD (HL),0xF7
INC A
SETPORT WINSP.Y_PORT,,0
LD A,COLORP.BLACKGRAY + COLORI.BLACKGRAY;0x77
ACCEL ACCELCMD.FILL_VERT
LD (HL),A
ACCEL ACCELCMD.OFF
LD (HL),A
INC HL
EX DE,HL
LD A,IYL
SETPORT WINSP.CPU1,,0
EI
POP HL
LD C,(IX + BAR.LENL)
LD B,(IX + BAR.LENH)
PUSH BC
ADD HL,BC
LD C,(IX+BAR.RIGHTL)
LD B,(IX+BAR.RIGHTH)
LD A,B
OR C
JR Z,.L10
SETPORT WINSP.Y_PORT,0xC0
LD A,L
LD (BC),A
INC BC
LD A,H
LD (BC),A
.L10 POP BC
LD L,(IX + BAR.MAXLL)
LD H,(IX + BAR.MAXLH)
OR A
SBC HL,BC
POP BC
JR Z,.L11
JR C,.L11
OR A
SBC HL,BC
JR Z,.L11
JR C,.L11
EX DE,HL
SRL D
RR E
JR Z,.L11
LD A,(IX + BAR.YL)
LD C,A
LD B,COLORP.HIGHGRAY + COLORI.HIGHGRAY;0x88
SETPORT WINSP.CPU1,0x50
DI
ACCEL ACCELCMD.SET_BUFFER
LD A,0x08
ACCEL ACCELCMD.OFF
.L12 LD A,C
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.FILL_VERT
LD (HL),B
ACCEL ACCELCMD.OFF
INC HL
DEC DE
LD A,D
OR E
JR NZ,.L12
LD A,IYL
SETPORT WINSP.CPU1,,0
EI
.L11 POP AF
SETPORT WINSP.Y_PORT,,0
POP IY
RET
PrnVScrBar PUSH IY
GETPORT WINSP.Y_PORT
PUSH AF
GETPORT WINSP.CPU1
LD IYH,A
LD L,(IX + BAR.FIRSTL) ; FirstFile
LD H,(IX + BAR.FIRSTH)
LD E,(IX + BAR.PAGEL)
LD D,(IX + BAR.PAGEH)
LD C,(IX + BAR.MAXL) ; EquipFiles
LD B,(IX + BAR.MAXH)
LD A,B
OR C
JR NZ,.L1
INC BC
.L1 PUSH BC
PUSH HL
ADD HL,DE
SBC HL,BC
POP HL
JR C,.L2
JR Z,.L2
LD L,C
LD H,B
SBC HL,DE
JR NC,.L2
LD HL,0x0000
.L2 EX DE,HL
LD C,(IX + BAR.MAXLL)
LD B,(IX + BAR.MAXLH)
CALL Mult16X16
POP BC
CALL Divis32X16
LD A,(IX + BAR.YL)
LD IYL,A
LD A,D
OR E
JR Z,.L3
PUSH DE
LD A,E
LD (.L4),A
LD L,(IX + BAR.XL)
LD H,(IX + BAR.XH)
SRL H
RR L
SET 6,H
LD D,COLORP.HIGHGRAY + COLORI.HIGHGRAY;0x88
SETPORT WINSP.CPU1,0x50
DI
ACCEL ACCELCMD.SET_BUFFER
LD A,0x00
.L4 EQU $-1
ACCEL ACCELCMD.OFF
LD B,0x08
.L5 LD A,IYL
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.FILL_VERT
LD (HL),D
ACCEL ACCELCMD.OFF
INC HL
DJNZ .L5
LD A,IYL
ADD A,E
LD IYL,A
LD A,IYH
SETPORT WINSP.CPU1,,0
EI
POP DE
.L3 PUSH DE
LD L,(IX + BAR.YL)
LD H,(IX + BAR.YH)
ADD HL,DE
LD E,(IX + BAR.LEFTL)
LD D,(IX + BAR.LEFTH)
LD A,D
OR E
JR Z,.L6
EX DE,HL
SETPORT WINSP.Y_PORT,0xC0
LD (HL),E
INC HL
LD (HL),D
EX DE,HL
.L6 PUSH HL
LD L,(IX + BAR.XL)
LD H,(IX + BAR.XH)
SRL H
RR L
SET 6,H
LD A,(IX + BAR.LENL)
LD C,A
SUB 0x02
LD (.L7),A
SETPORT WINSP.CPU1,0x50
DI
ACCEL ACCELCMD.SET_BUFFER
LD A,0x00
.L7 EQU $-1
ACCEL ACCELCMD.OFF
LD DE,(COLORP.WHITE + COLORI.WHITE) << 8 + COLORP.HIGHGRAY + COLORI.HIGHGRAY;0xFF88
LD A,IYL
SETPORT WINSP.Y_PORT,,0
LD (HL),D
INC A
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.FILL_VERT
LD (HL),D
ACCEL ACCELCMD.OFF
LD (HL),COLORP.WHITE + COLORI.BLACKGRAY;0xF7
INC HL
LD B,0x06
.L8 LD A,IYL
SETPORT WINSP.Y_PORT,,0
LD (HL),D
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
DJNZ .L8
LD A,IYL
SETPORT WINSP.Y_PORT,,0
LD (HL),COLORP.WHITE + COLORI.BLACKGRAY;0xF7
INC A
SETPORT WINSP.Y_PORT,,0
LD A,COLORP.BLACKGRAY + COLORI.BLACKGRAY;0x77
ACCEL ACCELCMD.FILL_VERT
LD (HL),A
ACCEL ACCELCMD.OFF
LD (HL),A
INC HL
LD A,IYL
ADD A,C
LD IYL,A
LD A,IYH
SETPORT WINSP.CPU1,,0
EI
POP HL
LD C,(IX + BAR.LENL)
LD B,(IX + BAR.LENH)
PUSH BC
ADD HL,BC
LD C,(IX + BAR.RIGHTL)
LD B,(IX + BAR.RIGHTH)
LD A,B
OR C
JR Z,.L9
SETPORT WINSP.Y_PORT,0xC0
LD A,L
LD (BC),A
INC BC
LD A,H
LD (BC),A
.L9 POP BC
LD L,(IX + BAR.MAXLL)
LD H,(IX + BAR.MAXLH)
OR A
SBC HL,BC
POP BC
JR Z,.L10
JR C,.L10
OR A
SBC HL,BC
JR Z,.L10
JR C,.L10
LD A,L
LD (.L11),A
LD L,(IX+BAR.XL)
LD H,(IX+BAR.XH)
SRL H
RR L
SET 6,H
LD D,COLORP.HIGHGRAY + COLORI.HIGHGRAY;0x88
SETPORT WINSP.CPU1,0x50
DI
ACCEL ACCELCMD.SET_BUFFER
LD A,0x00
.L11 EQU $-1
ACCEL ACCELCMD.OFF
LD B,0x08
.L12 LD A,IYL
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.FILL_VERT
LD (HL),D
ACCEL ACCELCMD.OFF
INC HL
DJNZ .L12
LD A,IYH
SETPORT WINSP.CPU1,,0
EI
.L10 POP AF
SETPORT WINSP.Y_PORT,,0
POP IY
RET
;[]-----------------------------------------------------------[]
InitProcess SUB A
LD (IX + PROC.CURL1),A
LD (IX + PROC.CURH1),A
LD (IX + PROC.CURL2),A
LD (IX + PROC.CURH2),A
LD (IX + PROC.CORRL),A
LD (IX + PROC.CORRH),A
LD C,(IX + PROC.MAXLL) ; Œ ªá/¬ ªá.¤«¨­ã ¯à®æ¥á 
LD B,(IX + PROC.MAXLH)
LD E,(IX + PROC.MAXL1)
LD D,(IX + PROC.MAXH1)
LD L,(IX + PROC.MAXL2)
LD H,(IX + PROC.MAXH2)
CALL Divis32X16 ; HL + DE / BC = DE (HL-®áâ)
LD A,H
OR L
JR Z,.L2
INC DE ; = ª®íä䍿¨¥­â
.L2 LD HL,9
OR A
SBC HL,DE
JR C,.L1
LD A,(IX + PROC.MAXL2)
OR (IX + PROC.MAXH2)
JR NZ,.L1
LD E,(IX + PROC.MAXL1)
LD D,(IX + PROC.MAXH1)
LD BC,1000
LD (IX + PROC.CORRL),C
LD (IX + PROC.CORRH),B
CALL Mult16X16
LD C,(IX + PROC.MAXLL) ; Œ ªá/¬ ªá.¤«¨­ã ¯à®æ¥á 
LD B,(IX + PROC.MAXLH)
CALL Divis32X16 ; HL + DE / BC = DE (HL-®áâ)
.L1 LD (IX + PROC.COEFL),E
LD (IX + PROC.COEFH),D
RET
PrnProcess PUSH IY
GETPORT WINSP.Y_PORT
PUSH AF
GETPORT WINSP.CPU1
LD IYL,A
LD E,(IX + PROC.CURL1)
LD D,(IX + PROC.CURH1)
LD L,(IX + PROC.CURL2)
LD H,(IX + PROC.CURH2)
LD A,(IX + PROC.CORRL)
OR (IX + PROC.CORRH)
JR Z,.L1
LD C,(IX + PROC.CORRL)
LD B,(IX + PROC.CORRH)
CALL Mult16X16
.L1 LD C,(IX + PROC.COEFL)
LD B,(IX + PROC.COEFH)
CALL Divis32X16
LD L,(IX + PROC.XL)
LD H,(IX + PROC.XH)
SRL H
RR L
SET 6,H
LD A,D
OR E
JR Z,.L2
PUSH DE
PUSH HL
LD L,(IX + PROC.MAXLL)
LD H,(IX + PROC.MAXLH)
OR A
SBC HL,DE
JR NC,.L3
ADD HL,DE
EX DE,HL
.L3 POP HL
SRL D
RR E
JR NC,.L4
INC DE
.L4 LD A,(IX + PROC.YL)
LD C,A
LD A,(IX + PROC.COLOR)
AND 0xF0
LD B,A
RRCA
RRCA
RRCA
RRCA
OR B
LD B,A
SETPORT WINSP.CPU1,0x50
DI
ACCEL ACCELCMD.SET_BUFFER
LD A,0x0A
ACCEL ACCELCMD.OFF
.L5 LD A,C
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.FILL_VERT
LD (HL),B
ACCEL ACCELCMD.OFF
INC HL
DEC DE
LD A,D
OR E
JR NZ,.L5
LD A,IYL
SETPORT WINSP.CPU1,,0
EI
POP DE
.L2 PUSH HL
LD L,(IX + PROC.MAXLL)
LD H,(IX + PROC.MAXLH)
OR A
SBC HL,DE
EX DE,HL
POP HL
JR Z,.L6
JR C,.L6
SRL D
RR E
JR NC,.L7
INC DE
.L7 LD A,(IX + PROC.YL)
LD C,A
LD A,(IX + PROC.COLOR)
AND 0x0F
LD B,A
RLCA
RLCA
RLCA
RLCA
OR B
LD B,A
SETPORT WINSP.CPU1,0x50
DI
ACCEL ACCELCMD.SET_BUFFER
LD A,0x0A
ACCEL ACCELCMD.OFF
.L8 LD A,C
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.FILL_VERT
LD (HL),B
ACCEL ACCELCMD.OFF
INC HL
DEC DE
LD A,D
OR E
JR NZ,.L8
LD A,IYL
SETPORT WINSP.CPU1,,0
EI
.L6 POP AF
SETPORT WINSP.Y_PORT,,0
POP IY
RET