flex_nav/fninit.a80

603 lines
11 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: 27.04.2025 savelij
;[]==========================================================[]
InitVideoMode
SPDSS DSSF.GETVMOD
LD C,A ; ⥪ã騩 ०¨¬ íªà ­ 
LD A,(InitFlg)
OR A
JR NZ,.L1
LD A,C
LD (VMode),A
LD A,B ; áâà ­¨æ  íªà ­ 
LD (VScrn),A
.L1 LD HL,WorkBuffer
SPBIOS BIOSF.FN_VERSION
;!TODO ¯à®¢¥àïâì ­  ¯®á«¥¤­¨© ¡¨®á
AND A
LD HL,-0x101;ACEX.Config_ID.Sp2000
SBC HL,BC
JR Z,.L2
SPBIOS BIOSF.RST_CONF_CUSTOM,,-3
.L2:
;????? âãâ áâ àë© ¢ à¨ ­â ¢ë¤ ç¨ FN_VERSION ¯à®¢¥àï¥âáï. <20>®¤ã¬ âì.
; LD A,%0000'1101 ; ­ã¦­ë¥ ¡¨âë ¤«ï ¯®àâ  All_Mode
; AND L
; SUB %0000'1101
; JR Z,InitVM1
; IN A,(SCREEN_SWITCH)
; PUSH AF
; LD C,BIOS.RST_CONF.SP97_2
; RST ToBIOS
; SUB A
; OUT (BorderColor),A
; POP AF
; OUT (SCREEN_SWITCH),A
InitVM1
SPDSS DSSF.SETVMOD,0,SETVMOD.GRF640X256
SUB A
CALL ClearScreen
InitPAL LD HL,PALETTE
LD DE,0x1000
SPBIOS BIOSF.PIC_SET_PAL,0xFF,0
RET
;[]----------------------------------------------------------[]
ResVideoMode LD B,0x00
VScrn EQU $-1
LD A,0x00
VMode EQU $-1
PUSH IY
SPDSS DSSF.SETVMOD
POP IY
RET
;[]==========================================================[]
InitDrivers SUB A
LD (CMOSFlag),A
LD L,A
LD H,A
LD (TestCoords.PrvTabl),HL
LD (TestCoords.PrMousX),HL
LD (TestCoords.PrMousY),HL
SPDSS DSSF.GETMEM,7
JR NC,InitDrv
CALL ResVideoMode
LD HL,NoEnMemory
SPDSS DSSF.PCHARS
LD A,(RAMPAGES.FNPAGESID)
SPDSS DSSF.FREEMEM
SPDSS DSSF.EXIT,0x1E
NoEnMemory DZ "Not enough memory to run program.\r\n"
InitDrv LD (RAMPAGES.BufferID),A
LD HL,RAMPAGES.FLX
SPBIOS BIOSF.GETMEMBLKPAGES
.skip:
SPDSS DSSF.CURDISK
JR C,.skip
LD A,C
CP 12
JR C,.L1
LD A,11
.L1 LD (NUM_DEVICES),A
SPDSS DSSF.GETTIME
JR C,.L3
LD A,D
CP 32
CCF
JR C,.L3
LD A,E
CP 13
CCF
JR C,.L3
LD A,H
CP 24
CCF
JR C,.L3
LD A,L
CP 60
CCF
.L3 LD A,0x00
JR C,.L2
INC A
.L2 LD (CMOSFlag),A
LD A,0x00
InitFlg EQU $-1
OR A
CALL Z,FirstInit
CALL SETUP_DISKS
SPMOUSE MOUSEF.INIT
LD A,(MouseFlag)
OR A
LD C,MOUSEF.SHOW
JR NZ,.L1
LD C,MOUSEF.HIDE
.L1
SPMOUSE
;!TEST enable shared interrupts
;Check BIOS version
SPBIOS BIOSF.DRV_VERSION
AND A
LD HL,2 << 8 + 54 ;!HARDCODE (¬¨­¨¬ «ì­ ï ¢¥àá¨ï)-1 ¤«ï  ªâ¨¢ æ¨¨ ¯à¥à뢠­¨©
SBC HL,DE
RET NC ; ¢ë室, ¥á«¨ ¢¥àá¨ï ­¨¦¥ 2.55
LD BC,WINSP.CPU2
IN B,(C)
SETPORT WINSP.CPU2,0xFE
LD A,0xAA
LD (0x0127 + CPU2),A;(SYS_PAGE.INT_ID - #4000),A ;!HARDCODE SYS_PAGE.INT_ID - #4000
OUT (C),B
RET
FirstInit
SPDSS DSSF.BOOTDSK,0
ADD A,'A'
LD (ShellFile),a ; fndosln.z80
SPDSS DSSF.CURDISK
LD HL,LeftPanel + PANEL.CURRPATH
PUSH HL
ADD A,'A'
LD (HL),A
INC HL
LD (HL),':'
INC HL
SPDSS DSSF.CURDIR
POP HL
LD DE,RightPanel + PANEL.CURRPATH
LD BC,0x0100
LDIR
GETPORT WINSP.CPU1
PUSH AF
LD A,(RAMPAGES.FNFUNCT)
SETPORT WINSP.CPU1,,0
LD HL,FlexDIRECTORY
SPDSS DSSF.APPINFO,1
JP C,.L5
LD HL,FlexDIRECTORY
SPDSS DSSF.CHDIR
JP C,.L5
LD HL,SetupName
SPDSS DSSF.OPEN,,1
JR C,.L5
PUSH AF
LD HL,WorkBuffer
push hl
push hl
ld (hl),0
pop de
ld bc,0x00ff
inc de
ldir
pop hl
LD DE,0x0100
SPDSS DSSF.READ
POP AF
SPDSS DSSF.CLOSE
LD HL,WorkBuffer
LD DE,SetupHead
LD B,11
.L3 LD A,(DE)
CP (HL)
JR NZ,.L5
INC HL
INC DE
DJNZ .L3
LD DE,PALETTE
LD BC,0x0040
LDIR
LD A,(HL)
INC HL
OR A
JR Z,.L4
LD A,(HL)
INC HL
AND 0x01
LD (MouseFlag),A
LD DE,LeftPanel
PUSH DE
LDI
LDI
LDI
POP DE
EX DE,HL
LD BC,PANEL.FILEMASK
ADD HL,BC
EX DE,HL
SUB A
.L1 LDI
CP (HL)
JR NZ,.L1
LD (DE),A
INC HL
LD DE,RightPanel
PUSH DE
LDI
LDI
LDI
POP DE
EX DE,HL
LD BC,PANEL.FILEMASK
ADD HL,BC
EX DE,HL
SUB A
.L2 LDI
CP (HL)
JR NZ,.L2
LD (DE),A
.L4 inc hl
ld a,(hl) ;¯ à ¬¥âà -  ¢â® ᬥ­  ¯ ­¥«¨ ¯à¨ ᬥ­¥ ¤¨áª  ­  ­¥©
ld (AutoActivatePanel),a
inc hl
CALL InitPAL
.L5 POP AF
SETPORT WINSP.CPU1,,0
LD DE,InitExtention
LD A,(RAMPAGES.FNHELP)
LD C,WINSP.CPU1
CALL Resident
LD HL,LeftPanel + PANEL.CURRPATH
SPDSS DSSF.CHDIR
LD A,0x01
LD (InitFlg),A
RET
; ®¡­®¢«¥­¨¥ ¢ â ¡«¨æ¥ ¢ë¡®à  ¤¨áª®¢ ­  ¯ ­¥«¨
SETUP_DISKS LD HL,BgDISKl ; ¤¨áª¨ «¥¢®© ¯ ­¥«¨
LD DE,BgDISKr ; ¤¨áª¨ ¯à ¢®© ¯ ­¥«¨
LD BC,FORMTABL.SIZE * 2
LD A,(NUM_DEVICES)
.L1 ADD HL,BC
INC HL
RES FORMTABL.B_ENDTABL,(HL)
DEC HL
EX DE,HL
ADD HL,BC
INC HL
RES FORMTABL.B_ENDTABL,(HL)
DEC HL
EX DE,HL
DEC A
JR NZ,.L1
INC HL
SET FORMTABL.B_ENDTABL,(HL)
EX DE,HL
INC HL
SET FORMTABL.B_ENDTABL,(HL)
RET
;[]----------------------------------------------------------[]
ResDrivers
SPMOUSE MOUSEF.HIDE
LD A,(RAMPAGES.BufferID)
SPDSS DSSF.FREEMEM
;!TEST disable shared interrupts
LD BC,WINSP.CPU2
IN B,(C)
SETPORT WINSP.CPU2,PAGE.SYSTEM;0xFE
XOR A
LD (0x0127 + CPU2),A ;!HARDCODE SYS_PAGE.INT_ID
OUT (C),B
RET
;[]==========================================================[]
InitScreen
MAKEWINDOW WINSUBOBJ.NOSTORE
W_MAIN 0,0,640,256
W_FILL 4,2,632,10,COLORI.BLACK
W_TEXT 16,3,COLORI.WHITE,"Flex Navigator v\{FLEX_VERS.NAVIGATOR}"
W_HORIZLINE 0,13,640
W_TEXT 16,17,COLORP.HIGHGRAY,"File Select Options View Config About"
W_HORIZLINE 0,27,640
W_VERTICLINE 318,30,12
W_HORIZLINE 0,43,640
W_HORIZLINE 0,211,640
W_VERTICLINE 318,214,10
W_HORIZLINE 0,225,640
W_BORDER 252,228,384,12
W_FILL 254,229,380,10,COLORI.PANEL
W_HORIZLINE 0,241,640
W_BUTTON 0,242,80,14
W_TEXT 22,245,COLORP.HIGHGRAY,"F1 Help"
W_BUTTON 80,242,80,14
W_TEXT 100,245,COLORP.HIGHGRAY,"F3 View"
W_BUTTON 160,242,80,14
W_TEXT 182,245,COLORP.HIGHGRAY,"F4 Edit"
W_BUTTON 240,242,80,14
W_TEXT 260,245,COLORP.HIGHGRAY,"F5 Copy"
W_BUTTON 320,242,80,14
W_TEXT 334,245,COLORP.HIGHGRAY,"F6 Rename"
W_BUTTON 400,242,80,14
W_TEXT 414,245,COLORP.HIGHGRAY,"F7 MakeDir"
W_BUTTON 480,242,80,14
W_TEXT 496,245,COLORP.HIGHGRAY,"F8 Delete"
W_BUTTON 560,242,80,14
W_TEXT 580,245,COLORP.HIGHGRAY,"F10 Quit"
W_END
LD A,(CMOSFlag)
OR A
RET Z
MAKEWINDOW WINSUBOBJ.WOBIND
W_BORDER 500,15,136,12
W_END
LD HL,0x01FC
LD DE,0x0012
LD B,0x80
EXX
LD HL,0x022E
LD DE,0x0012
LD B,0x80
EXX
LD A,0x02
JP SetCMOSPrint
;[]==========================================================[]
InitPanels LD (InitPanFlg),A
LD HL,LeftPanel+PANEL.VIEWFLAG
LD A,(RightPanel+PANEL.VIEWFLAG)
OR (HL)
AND 0x02
JR NZ,InitPanTree
LD IY,LeftPanel
CALL InitPanelE
LD IY,RightPanel
CALL InitPanelE
JR InitPanExit
InitPanTree LD IY,LeftPanel
BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
JR NZ,.L1
LD IY,RightPanel
.L1 CALL InitPanelE
InitPanExit LD HL,LeftPanel
LD DE,PANEL.CURRPATH
BIT 7,(HL)
JR NZ,.L2
LD HL,RightPanel
.L2 PUSH HL
ADD HL,DE
SPDSS DSSF.CHDIR
POP IY
RET
InitPanel SUB A
InitPanel1 LD (InitPanFlg),A
InitPanelE LD A,(InitPanFlg)
BIT 0,A
CALL Z,SetClock
CALL PrintDisks
CALL PrintPath
BIT PANELFLAG.B_PRNDOSPATH,(IY+PANEL.PANELFLAG)
CALL NZ,PrintDOSPath
LD A,(IY+PANEL.VIEWFLAG)
AND VIEWFLAG.MASK
JP NZ,InitPPanel
LD L,(IY+PANEL.XL)
LD H,(IY+PANEL.XH)
LD (PanelN1),HL
INC HL
INC HL
LD (PanelN2),HL
LD (PanelN6),HL
LD (PanelN3),HL
LD (Nbut1),HL
LD (Nfile),HL
LD DE,0x0010
ADD HL,DE
LD (PanelN4),HL
LD (Nbut1+2),HL
LD (Nbar1),HL
LD (IY+PANEL.BARXL),L
LD (IY+PANEL.BARXH),H
LD (IY+PANEL.BARYL),0xC9
LD (IY+PANEL.BARYH),0x00
LD DE,0x0114
ADD HL,DE
LD (PanelN5),HL
LD (Nbar2+2),HL
LD (Nbut2),HL
LD (IY+PANEL.BARMLL),E
LD (IY+PANEL.BARMLH),D
LD DE,0x0010
ADD HL,DE
LD (Nbut2+2),HL
LD (Nfile+2),HL
LD (IY+PANEL.FPL),0x33
LD (IY+PANEL.FPH),0x00
; Šà âª ï ¯ ­¥«ì
MAKEWINDOW WINSUBOBJ.WOBIND
PanelN1 EQU $+1
W_BORDER 0,59,312,151
PanelN2 EQU $+1
W_FILL 0,60,308,149,COLORI.PANEL
PanelN3 EQU $+1
W_ICONLEFTARROW 0,201
PanelN4 EQU $+1
W_FILL 0,201,276,8,COLORI.HIGHGRAY
PanelN5 EQU $+1
W_ICONRIGHTARROW 0,201
PanelN6 EQU $+1
W_FILL 0,213,310,12,COLORI.HIGHGRAY
W_END
LD HL,NormMouse
LD DE,PanelPlaceL
BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG)
JR Z,.L1
LD DE,PanelPlaceR
.L1 PUSH DE
LD BC,0x0050
LDIR
POP HL
LD C,0x32
ADD HL,BC
LD (IY+PANEL.BARLFL),L
LD (IY+PANEL.BARLFH),H
LD C,0x0E
ADD HL,BC
LD (IY+PANEL.BARRTL),L
LD (IY+PANEL.BARRTH),H
JP InitPanEx
NormMouse
Nfile DEFW 0, 0, 63,199,%0000000000000000,0,NewFile,RESIDENT.MarkFile
Nbut1 DEFW 0, 0,201,209,%0000000000000011,0,ScrollDown,0
Nbut2 DEFW 0, 0,201,209,%0000000000000011,0,ScrollUp,0
Nbar1 DEFW 0, 0,201,209,%0000000000000000,0,PageUp,0
Nbar2 DEFW 0, 0,201,209,%0000000000000000,0,PageDown,0
; <20>®¤à®¡­ ï ¯ ­¥«ì ¨ ¯ ­¥«ì á ¤¥à¥¢®¬
InitPPanel LD L,(IY+PANEL.XL)
LD H,(IY+PANEL.XH)
LD (PanelP1),HL
INC HL
INC HL
LD (PanelP2),HL
LD (PanelP6),HL
LD (Pfile),HL
LD DE,0x0124
ADD HL,DE
LD (PanelP3),HL
LD (PanelP4),HL
LD (PanelP5),HL
LD (Pbut1),HL
LD (Pbut2),HL
LD (Pbar1),HL
LD (Pbar2),HL
LD (Pfile+2),HL
LD (IY+PANEL.BARXL),L
LD (IY+PANEL.BARXH),H
LD DE,0x0010
ADD HL,DE
LD (Pbut1+2),HL
LD (Pbut2+2),HL
LD (Pbar1+2),HL
LD (Pbar2+2),HL
LD (IY+PANEL.BARYL),0x44
LD (IY+PANEL.BARYH),0x00
LD (IY+PANEL.BARMLL),0x85
LD (IY+PANEL.BARMLH),0x00
LD (IY+PANEL.FPL),0x12
LD (IY+PANEL.FPH),0x00
MAKEWINDOW WINSUBOBJ.WOBIND
PanelP1 EQU $+1
W_BORDER 0,59,312,151
PanelP2 EQU $+1
W_FILL 0,60,308,149,COLORI.PANEL
PanelP3 EQU $+1
W_ICONUPARROW 0,60
PanelP4 EQU $+1
W_FILL 0,68,16,133,COLORI.HIGHGRAY
PanelP5 EQU $+1
W_ICONDOWNARROW 0,201
PanelP6 EQU $+1
W_FILL 0,213,310,12,COLORI.HIGHGRAY
W_END
LD HL,PodrMouse
LD DE,PanelPlaceL
BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG)
JR Z,.L1
LD DE,PanelPlaceR
.L1 PUSH DE
LD BC,0x0050
LDIR
POP HL
LD BC,0x0036
ADD HL,BC
LD (IY+PANEL.BARLFL),L
LD (IY+PANEL.BARLFH),H
LD BC,0x000E
ADD HL,BC
LD (IY+PANEL.BARRTL),L
LD (IY+PANEL.BARRTH),H
JP InitPanEx
PodrMouse
Pfile DW 0, 0, 63,207,%0000000000000000,0,NewFile,RESIDENT.MarkFile
Pbut1 DW 0, 0, 60, 68,%0000000000000011,0,ScrollDown,0
Pbut2 DW 0, 0,201,209,%0000000000000011,0,ScrollUp,0
Pbar1 DW 0, 0, 68, 0,%0000000000000000,0,PageUp,0
Pbar2 DW 0, 0, 0,209,%0000000000000000,0,PageDown,0
InitPanEx LD A,(InitPanFlg)
BIT 0,A
JR NZ,.L2
PUSH IY
PUSH IY
POP HL
LD DE,PANEL.CURRPATH
ADD HL,DE
SPDSS DSSF.CHDIR
POP IY
JR NC,.L1
CALL DOSError
PUSH IY
SPDSS DSSF.CURDISK
POP IY
PUSH IY
POP HL
LD DE,PANEL.CURRPATH
ADD HL,DE
ADD A,'A'
LD (HL),A
INC HL
LD (HL),':'
INC HL
PUSH IY
SPDSS DSSF.CURDIR
POP IY
JP InitPanel
.L1 CALL ReadDIR
LD A,(InitPanFlg)
BIT 1,A
CALL NZ,FindPrevFile
.L2 CALL PrintDIR
CALL SetInvert
CALL PrnFileInfo
PUSH IY
POP IX
LD DE,PANEL.BARXL
ADD IX,DE
CALL InitScrollBar
LD A,(IY+PANEL.VIEWFLAG)
AND VIEWFLAG.MASK
PUSH AF
CALL Z,PrnHScrBar
POP AF
CALL NZ,PrnVScrBar
CALL SetMouse
LD A,(InitPanFlg)
BIT 0,A
RET NZ
LD HL,LeftPanel+PANEL.VIEWFLAG
LD A,(RightPanel+PANEL.VIEWFLAG)
OR (HL)
AND 0x02
RRCA
LD (TreeFlag),A
BIT VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
RET Z
PUSH IY
BIT PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG)
LD IY,RightPanel
LD HL,LeftPanel + PANEL.CURRPATH
LD DE,RightPanel + PANEL.CURRPATH
JR Z,.L3
LD IY,LeftPanel
LD HL,RightPanel + PANEL.CURRPATH
LD DE,LeftPanel + PANEL.CURRPATH
.L3 SUB A
.L4 LDI
CP (HL)
JR NZ,.L4
LD (DE),A
CALL InitPanelE
POP IY
RET
InitPanFlg DEFB 0x00