flex_nav/fninput.a80

802 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: 20.03.2025 savelij
;[]----------------------------------------------------------[]
InputLine LD (InpLnData),IX
LD (.InpMous),HL
SET 7,(IX+0x01)
SUB A
LD (IX+0x02),A
LD (IX+0x03),A
CALL InsInpLnCol
PUSH IX
POP HL
LD DE,LenInpData
ADD HL,DE
PUSH HL
LD E,(IX+0x04)
ADD HL,DE
LD (HL),D
LD (IX+0x02),E
POP HL
LD DE,WorkBuffer
LD A,(IX+0x02)
LD (DE),A
INC DE
LD A,(IX+0x03)
LD (DE),A
INC DE
LD A,(IX+0x04)
LD (DE),A
INC DE
LD C,A
LD B,0x00
OR B
JR Z,.L1
LDIR
.L1 CALL PrintInpLn.L1
.InpLineLp HALT
CALL ChCursor
LD IX,0x0000
.InpMous EQU $-2
CALL TestCoords
SPDSS DSSF.TESTKEY
JR Z,.InpLineLp
RES 7,D
BIT KEYBSTAT.B_ALT,B
JR NZ,.InpLineLp
LD IX,InpTable2
BIT KEYBSTAT.B_CTRL,B
JR NZ,.NextInpKeys
LD IX,InpTable1
.NextInpKeys LD L,(IX+0x00)
INC L
JR Z,.InpLineLp1
INC IX
DEC L
LD H,(IX+0x00)
INC IX
LD C,(IX+0x00)
INC IX
LD B,(IX+0x00)
INC IX
OR A
SBC HL,DE
JR NZ,.NextInpKeys
LD IX,(InpLnData)
LD HL,.InpLineLp
PUSH HL
PUSH BC
PUSH IX
SPDSS DSSF.SCANKEY
POP IX
RET
.InpLineLp1 LD IX,(InpLnData)
LD HL,.InpLineLp
PUSH HL
PUSH IX
SPDSS DSSF.SCANKEY
POP IX
LD A,E
JR InsertSymbol
.InpLnExtN POP HL
LD IX,(InpLnData)
CALL ResCursor
XOR A
RET
.InpLnExtC POP HL
LD IX,(InpLnData)
CALL ResCursor
PUSH IX
POP HL
LD DE,LenInpData
ADD HL,DE
EX DE,HL
LD HL,WorkBuffer
LD A,(HL)
INC HL
LD (IX+0x02),A
LD A,(HL)
INC HL
LD (IX+0x03),A
LD A,(HL)
INC HL
LD (IX+0x04),A
LD C,A
LD B,0x00
LD A,B
OR C
SCF
RET Z
LDIR
RET
InpLnData DEFW 0x0000 ; €¤à¥á ®¯¨á â¥«ï áâப¨
; +00 Œ ªá¨¬ «ì­ ï ¤«¨­  áâப¨
; +01 ”« £ £®â®¢­®áâ¨
; +02 ⥪ãé ï X ¯®§¨æ¨ï ªãàá®à 
; +03 ⥪ãé ï AddX
; +04 ª®«¨ç¥á⢮ ¢¢¥¤¥­­ëå ᨬ¢®«®¢
; +05 X ¯®§¨æ¨ï áâப¨ ­  íªà ­¥
; +07 Y ¯®§¨æ¨ï áâப¨ ­  íªà ­¥
; +09 X ¤«¨­  áâப¨ ­  íªà ­¥
; +0B –¢¥â áâப¨
; +0C ...á ¬  áâப 
InpTable1 DW SC.ESC << 8 | 0x1B, InputLine.InpLnExtC
DW SC.ENTER << 8 | 0x0D, InputLine.InpLnExtN
DW SC.XENTER << 8 | 0x0D, InputLine.InpLnExtN
DW SC.X4 << 8, ILleft
DW SC.X6 << 8, ILright
DW SC.BKSP << 8 | 0x08, ILdelet
DW SC.XDEL << 8, IL_del_
DW SC.X7 << 8, ILhome
DW SC.X1 << 8, ILend
DB 0xFF
InpTable2 DW SC.X4 << 8, ILwordL
DW SC.X6 << 8, ILwordR
DW SC.BKSP << 8, ILdelWR
DB 0xFF
InsertSymbol CP ' '
RET C
EX AF,AF'
BIT 7,(IX+0x01) ; ready
CALL NZ,ClearInpLn
LD A,(IX+0x04) ; InpytSymb
SUB (IX+0x00) ; Max len
RET NC
LD A,(IX+0x04)
SUB (IX+0x02)
JR Z,NotInsert
; ‚¢®¤ ¢ á¥à¥¤¨­ã ⥪áâ 
LD C,A
LD B,0x00
PUSH IX
POP HL
LD DE,LenInpData
ADD HL,DE
LD E,(IX+0x04)
ADD HL,DE
LD E,L
LD D,H
DEC HL
LDDR
NotInsert PUSH IX
POP HL
LD DE,LenInpData
ADD HL,DE
LD E,(IX+0x02)
ADD HL,DE
EX AF,AF'
LD (HL),A
INC (IX+0x04)
INC (IX+0x02)
JP PrintInpLn
; Clear Buffer
ClearInpLn RES 7,(IX+0x01)
PUSH IX
POP HL
LD DE,LenInpData
ADD HL,DE
LD B,(IX+0x00)
SUB A
.L1 LD (HL),A
INC HL
DJNZ .L1
LD (IX+0x02),A
LD (IX+0x03),A
LD (IX+0x04),A
JP PrintInpLn
; Šãàá®à ¢«¥¢® ­  ®¤­® ¬¥áâ®
ILleft RES 7,(IX+0x01)
LD A,(IX+0x02)
DEC A
RET M
LD (IX+0x02),A
JP PrintInpLn
; Šãàá®à ¢¯à ¢® ­  ®¤­® ¬¥áâ®
ILright RES 7,(IX+0x01)
LD A,(IX+0x02)
CP (IX+0x04)
RET Z
INC (IX+0x02)
JP PrintInpLn
; delete
ILdelet BIT 7,(IX+0x01) ; ready
CALL NZ,ClearInpLn
LD A,(IX+0x02)
OR A
RET Z
PUSH IX
POP HL
LD DE,LenInpData
ADD HL,DE
LD E,(IX+0x02)
ADD HL,DE
LD E,L
LD D,H
DEC DE
LD A,(IX+0x04)
SUB (IX+0x02)
JR Z,ILDel1
LD C,A
LD B,0x00
LDIR
SUB A
ILDel1 LD (DE),A
DEC (IX+0x02)
DEC (IX+0x04)
JP PrintInpLn
; Delete Char in Current Position
IL_del_ BIT 7,(IX+0x01) ; ready
CALL NZ,ClearInpLn
PUSH IX
POP HL
LD DE,LenInpData
ADD HL,DE
LD E,(IX+0x02)
ADD HL,DE
INC HL
LD E,L
LD D,H
DEC DE
LD A,(IX+0x04)
SUB (IX+0x02)
RET Z
LD C,A
LD B,0x00
LDIR
SUB A
LD (DE),A
DEC (IX+0x04)
JP PrintInpLn
; Home
ILhome RES 7,(IX+0x01)
LD A,(IX+0x02)
OR A
RET Z
SUB A
LD (IX+0x02),A
JP PrintInpLn
; End string
ILend RES 7,(IX+0x01)
LD A,(IX+0x04)
CP (IX+0x02)
RET Z
LD (IX+0x02),A
JP PrintInpLn
; Word right
ILwordR RES 7,(IX+0x01)
LD A,(IX+0x04)
SUB (IX+0x02)
RET Z
LD B,A
PUSH IX
POP HL
LD DE,LenInpData
ADD HL,DE
LD E,(IX+0x02)
ADD HL,DE
LD C,E
.L2 LD A,(HL)
CP ' '
JR Z,.L3
CP ','
JR Z,.L3
CP '.'
JR Z,.L3
CP '\\'
JR Z,.L3
INC HL
INC C
DJNZ .L2
JR .L4
.L3 LD A,(HL)
CP ' '
JR Z,.L1
CP ','
JR Z,.L1
CP '.'
JR Z,.L1
CP '\\'
JR NZ,.L4
.L1 INC HL
INC C
DJNZ .L3
.L4 LD (IX+0x02),C
JP PrintInpLn
; Word left
ILwordL RES 7,(IX+0x01)
LD A,(IX+0x02)
OR A
RET Z
LD B,A
LD C,B
PUSH IX
POP HL
LD DE,LenInpData
ADD HL,DE
LD E,C
ADD HL,DE
.L3 DEC HL
DEC C
LD A,(HL)
CP ' '
JR Z,.L2
CP ','
JR Z,.L2
CP '.'
JR Z,.L2
CP 0x5C
JR Z,.L2
DJNZ .L3
JR .L5
.L2 LD A,(HL)
CP ' '
JR Z,.L1
CP ','
JR Z,.L1
CP '.'
JR Z,.L1
CP '\\'
JR NZ,.L4
.L1 DEC HL
DEC C
DJNZ .L2
.L4 INC C
.L5 LD (IX+0x02),C
JP PrintInpLn
; Delete word
ILdelWR RES 7,(IX+0x01)
LD A,(IX+0x02)
OR A
RET Z
LD B,A
LD C,B
PUSH IX
POP HL
LD DE,LenInpData
ADD HL,DE
LD E,C
ADD HL,DE
LD A,(IX+0x04)
SUB B
LD E,A
PUSH HL
DEC HL
DEC C
LD A,(HL)
CP ' '
JR Z,.L4
CP ','
JR Z,.L4
CP '.'
JR Z,.L4
CP '\\'
JR Z,.L4
DEC B
JR Z,.L6
.L3 DEC HL
DEC C
LD A,(HL)
CP ' '
JR Z,.L2
CP ','
JR Z,.L2
CP '.'
JR Z,.L2
CP '\\'
JR Z,.L2
DJNZ .L3
JR .L6
.L4 LD A,(HL)
CP ' '
JR Z,.L1
CP ','
JR Z,.L1
CP '.'
JR Z,.L1
CP '\\'
JR NZ,.L2
.L1 DEC HL
DEC C
DJNZ .L4
.L2 INC HL
INC C
.L6 LD A,(IX+0x02)
LD (IX+0x02),C
SUB C
LD C,A
EX AF,AF'
LD A,(IX+0x04)
SUB C
LD (IX+0x04),A
LD C,E
LD B,0x00
EX DE,HL
POP HL
LD A,C
OR A
JR Z,.L7
LDIR
.L7 EX DE,HL
EX AF,AF'
LD B,A
SUB A
.L5 LD (HL),A
INC HL
DJNZ .L5
JP PrintInpLn
;[]----------------------------------------------------------[]
InsInpLnCol LD L,(IX+0x07)
LD H,(IX+0x08)
LD (FillILy),HL
LD A,(IX+0x0B)
AND 0x0F ; INK
LD C,A
RLCA
RLCA
RLCA
RLCA
OR C
LD HL,PrnINKl ; INK ¡ãä¥à
LD B,0x08
CPL
.L1 LD (HL),A
INC HL
DJNZ .L1
LD B,A
LD A,(IX+0x0B)
AND 0xF0 ; PAPER
LD C,A
RRCA
RRCA
RRCA
RRCA
LD (FillILc),A
OR C
XOR B
LD HL,PrnPAPl ; PAPER ¡ãä¥à
LD B,0x08
.L2 LD (HL),A
INC HL
DJNZ .L2
RET
PrintInpLn CALL ResCursor
.L1 LD A,(IX+0x02)
SUB (IX+0x03)
JR NC,PrnInpLn1
LD A,(IX+0x03)
SUB Step
LD (IX+0x03),A
JR PrintInpLn.L1
PrnInpLn1 PUSH IX
POP HL
LD DE,LenInpData
ADD HL,DE
LD E,(IX+0x03)
ADD HL,DE
OR A
CALL NZ,TstInpLnLen ; <20>  ¢å®¤: HL-­ ç «® ¢ë¢®¤ 
; € -ª®«.ᨬ¢.¤® ªãàá®à 
PUSH IY
PUSH IX
LD A,(IX+0x07)
LD IYL,A ; Y ª®®à¤¨­ â 
LD A,(IX+0x04)
LD IYH,A
GETPORT WINSP.Y_PORT ; ‘®å࠭塞 Y ¯®àâ
PUSH AF
EXX
LD HL,PrnPAPl
LD DE,PrnINKl
LD C,(IX+0x05)
LD B,(IX+0x06)
SRL B
RR C
SET 6,B
EXX
LD C,(IX+0x09)
LD B,(IX+0x0A)
SRL B
RR C
LD IXL,C
LD C,L ; €¤à¥á áâப¨
LD B,H
GETPORT WINSP.CPU1
LD IXH,A
DI
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,IYH
OR A
JR Z,PrnInpE
LD A,(BC)
INC BC
PInpLnP 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
PrnLoopInp
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
DEC IXL
JR Z,.L1
DJNZ PrnLoopInp
.L1 POP BC
LD A,IXH
SETPORT WINSP.CPU1,,0
LD A,IXL
OR A
JR Z,PrnInpE
DEC IYH
JR Z,PrnInpE
LD A,(BC)
INC BC
OR A
JR NZ,PInpLnP
PrnInpE POP AF
SETPORT WINSP.CPU0,,0
EI
POP AF
SETPORT WINSP.Y_PORT,,0
LD A,IXL
OR A
JR Z,PrnInE1
LD L,A
LD H,0x00
ADD HL,HL
LD (FillILl),HL
EXX
PUSH BC
EXX
POP HL
RES 6,H
ADD HL,HL
LD (FillILx),HL
MAKEWINDOW WINSUBOBJ.WOBIND
W_FILL 0x0000,0x0000,0x0000,8,0x00
W_END
FillILx EQU $-10
FillILy EQU $-8
FillILl EQU $-6
FillILc EQU $-2
PrnInE1 POP IX
POP IY
JP SetCursor
PrnINKl DB 8 DUP 0
PrnPAPl DB 8 DUP 0
TstInpLnLen PUSH IY
LD IYL,A
LD IYH,A
DI
GETPORT WINSP.CPU0
PUSH AF
LD A,(RAMPAGES.FNFONT)
SETPORT WINSP.CPU0,,0
LD D,HIGH (FONT_RAW)-0xC0
TstInpLn PUSH HL
LD BC,0x0000
TstInpL LD E,(HL)
INC HL
LD A,(DE)
ADD A,A
ADD A,C
LD C,A
LD A,B
ADC A,0x00
LD B,A
DEC IYL
JR NZ,TstInpL
LD L,(IX+0x09)
LD H,(IX+0x0A)
OR A
SBC HL,BC
JR NC,TstInpE
POP HL
LD BC,Step
ADD HL,BC
LD A,(IX+0x03)
ADD A,C
LD (IX+0x03),A
LD A,IYH
SUB C
LD IYH,A
LD IYL,A
JR TstInpLn
TstInpE POP HL
POP AF
SETPORT WINSP.CPU0,,0
EI
POP IY
RET
SetCursor PUSH IX
POP HL
LD DE,LenInpData
ADD HL,DE
LD E,(IX+0x03)
ADD HL,DE
LD BC,0x0000
LD A,(IX+0x02)
SUB E
JR Z,StCurs1
EX AF,AF'
DI
GETPORT WINSP.CPU0
PUSH AF
LD A,(RAMPAGES.FNFONT)
SETPORT WINSP.CPU0,,0
LD D,HIGH (FONT_RAW)-0xC0
EX AF,AF'
StCurs0 EX AF,AF'
LD E,(HL)
INC HL
LD A,(DE)
ADD A,A
ADD A,C
LD C,A
LD A,B
ADC A,0x00
LD B,A
EX AF,AF'
DEC A
JR NZ,StCurs0
POP AF
SETPORT WINSP.CPU0,,0
EI
StCurs1 LD (CurShiftX),BC
LD A,0x01
LD (CurCursor),A
LD A,CursTimer
LD (CrTimer),A
SetCr LD L,(IX+0x05)
LD H,(IX+0x06)
LD BC,(CurShiftX)
ADD HL,BC
SRL H
RR L
SET 6,H
GETPORT WINSP.CPU1
LD C,A
GETPORT WINSP.Y_PORT
LD B,A
PUSH BC
LD DE,CursBuffer
LD C,(IX+0x07)
DEC C
LD A,(IX+0x0B)
AND 0x0F
LD B,A
RLCA
RLCA
RLCA
RLCA
OR B
LD B,A
SETPORT WINSP.CPU1,0x50
DI
LD A,C
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.SET_BUFFER
LD A,0x09
ACCEL ACCELCMD.COPY_VERT
LD A,(HL)
ACCEL ACCELCMD.COPY
LD (DE),A
ACCEL ACCELCMD.OFF
LD A,C
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.FILL_VERT
LD (HL),B
ACCEL ACCELCMD.OFF
EI
POP BC
LD A,B
SETPORT WINSP.Y_PORT,,0
LD A,C
SETPORT WINSP.CPU1,,0
RET
ResCursor LD L,(IX+0x05)
LD H,(IX+0x06)
LD BC,(CurShiftX)
ADD HL,BC
SRL H
RR L
SET 6,H
GETPORT WINSP.CPU1
LD C,A
GETPORT WINSP.Y_PORT
LD B,A
PUSH BC
LD DE,CursBuffer
LD B,(IX+0x07)
DEC B
LD C,WINSP.Y_PORT
SETPORT WINSP.CPU1,0x50
DI
ACCEL ACCELCMD.SET_BUFFER
LD A,0x09
ACCEL ACCELCMD.COPY
LD A,(DE)
OUT (C),B
ACCEL ACCELCMD.COPY_VERT
LD (HL),A
ACCEL ACCELCMD.OFF
EI
POP BC
LD A,B
SETPORT WINSP.Y_PORT,,0
LD A,C
SETPORT WINSP.CPU1,,0
RET
ChCursor LD HL,CrTimer
DEC (HL)
RET NZ
LD (HL),CursTimer
LD IX,(InpLnData)
LD A,(CurCursor)
XOR 0x01
LD (CurCursor),A
JR Z,ResCursor
JP SetCr
CurShiftX DEFW 0x00
CrTimer DEFB 0x00
CurCursor DEFB 0x00
CursBuffer DB 9 DUP 0