flex_nav/fnsys.a80

949 lines
13 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.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

; LAST UPDATE: 08.03.2025 savelij
;[]-----------------------------------------------------------[]
;<3B>à®æ¥¤ãà  ã¬­®¦¥­¨ï (8*8bit)
;<3B>  ¢å®¤: E*C
;<3B>  ¢ë室:HL-१ã«ìâ â
Mult8 SUB A
LD L,A
LD H,A
LD D,A
CP C
RET Z
CP E
RET Z
LD H,C
LD B,0x08
.L1 ADD HL,HL
JR NC,.L2
ADD HL,DE
.L2 DJNZ .L1
RET
;<3B>à®æ¥¤ãà  ã¬­®¦¥­¨ï (16*8bit)
;<3B>  ¢å®¤: DE*C
;<3B>  ¢ë室:A+HL-१ã«ìâ â
Mult16X8 SUB A
LD L,A
LD H,A
CP C
RET Z
OR D
OR E
RET Z
LD A,C
LD BC,8 << 8
.L1 ADD HL,HL
RLA
JR NC,.L2
ADD HL,DE
ADC A,C
.L2 DJNZ .L1
RET
;<3B>à®æ¥¤ãà  ã¬­®¦¥­¨ï (16*16bit)
;<3B>  ¢å®¤: DE*BC
;<3B>  ¢ë室:HL-१ã«ìâ â
Mult16 LD HL,0x0000
LD A,0x10
.L1 RR B
RR C
JR NC,.L2
ADD HL,DE
.L2 RL E
RL D
DEC A
JR NZ,.L1
RET
;<3B>à®æ¥¤ãà  ã¬­®¦¥­¨ï (32bit)
;<3B>  ¢å®¤: DE*BC
;<3B>  ¢ë室:HL+DE-१ã«ìâ â
Mult16X16 PUSH IX
EX DE,HL
LD E,0x00
LD D,E
LD IXL,E
LD IXH,D
LD A,0x20
.L1 ADD IX,IX
ADC HL,HL
RL E
RL D
JR NC,.L2
ADD IX,BC
JR NC,.L2
INC HL
.L2 DEC A
JR NZ,.L1
LD E,IXL
LD D,IXH
POP IX
RET
;<3B>à®æ¥¤ãà  ã¬­®¦¥­¨ï (32bit)
;<3B>  ¢å®¤: HL+DE*BC
;<3B>  ¢ë室:HL+DE-१ã«ìâ â
Mult32 PUSH IX
LD IX,0x0000
LD A,0x20
EX DE,HL
.L1 ADD IX,IX
ADC HL,HL
RL E
RL D
JR NC,.L2
ADD IX,BC
JR NC,.L2
INC HL
.L2 DEC A
JR NZ,.L1
LD E,IXL
LD D,IXH
POP IX
RET
;<3B>à®æ¥¤ãà  ¤¥«¥­¨ï (16bit)
;<3B>  ¢å®¤: BC/DE
;<3B>  ¢ë室:BC-१ã«ìâ â
; HL-®áâ â®ª
Divis16X16 LD A,D
OR E
RET Z
LD HL,0x0000
LD A,B
LD B,0x10
.L1 RL C
RLA
ADC HL,HL
SBC HL,DE
CCF
JR NC,.L4
.L2 DJNZ .L1
RL C
RLA
LD B,A
RET
.L3 RL C
RLA
ADC HL,HL
ADD HL,DE
JR C,.L2
.L4 DJNZ .L3
RL C
RLA
ADD HL,DE
LD B,A
RET
;<3B>à®æ¥¤ãà  ¤¥«¥­¨ï (24x16bit)
;<3B>  ¢å®¤: H+L+C/DE
;<3B>  ¢ë室:A -१ã«ìâ â
; HL-®áâ â®ª
Divis24X16 LD A,D
CPL
LD D,A
LD A,E
CPL
LD E,A
INC DE
LD A,C
LD B,0x08
.L1 ADD HL,HL
JR C,.L2
ADD A,A
JR NC,.L4
INC HL
.L4 PUSH HL
ADD HL,DE
JR NC,.L5
EX (SP),HL
INC A
.L5 POP HL
DJNZ .L1
RET
.L2 ADC A,A
JR NC,.L3
INC HL
.L3 ADD HL,DE
DJNZ .L1
RET
;<3B>à®æ¥¤ãà  ¤¥«¥­¨ï 32/16bit=16bit
;<3B>  ¢å®¤: HL+DE/BC
;<3B>  ¢ë室:DE-१ã«ìâ â
; HL-®áâ â®ª
Divis32X16 LD A,0x10
.L2 EX DE,HL
ADD HL,HL
EX DE,HL
ADC HL,HL
SBC HL,BC
JR NC,.L1
ADD HL,BC
DEC A
JR NZ,.L2
RET
.L1 INC DE
DEC A
JR NZ,.L2
RET
;<3B>à®æ¥¤ãà  ¤¥«¥­¨ï 32/16bit=32bit
;<3B>  ¢å®¤: HL+DE/BC
;<3B>  ¢ë室:HL+DE-१ã«ìâ â
; BC-®áâ â®ª
Divis32 PUSH IX
LD IXL,E
LD IXH,D
EX DE,HL
LD HL,0x0000
LD A,0x20
.L1 ADD IX,IX
RL E
RL D
ADC HL,HL
SBC HL,BC
JR NC,.L2
DEC IX
ADD HL,BC
.L2 INC IX
DEC A
JR NZ,.L1
LD C,L
LD B,H
EX DE,HL
LD E,IXL
LD D,IXH
POP IX
RET
;[]===================================================================[]
;<3B>  ¢å®¤:
; A:BC:HL - ç¨á«® 40 ¡¨â
; DE - ¡ãä¥à
ConvNumTxt40: PUSH IX
LD IX,ConvertFlg
RES 7,(IX+0x00)
PUSH BC
EXX
LD HL,ConNumbExit
LD (ChooseStringFormat.address),HL
POP HL
LD E,0x17
LD BC,0x4876
EXX
ld bc,0xE800
; E':BC':BC = 100,000,000,000
call ConNumb40
exx
ld e,0x02
ld bc,0x540B
exx
ld bc,0xE400
; E':BC':BC = 10,000,000,000
CALL ConNumb40
exx
ld e,0x00
ld bc,0x3B9A
exx
ld bc,0xCA00
; E':BC':BC = 1,000,000,000
CALL ConNumb40
; E':BC':BC = 100,000,000
CALL ConvNumTxt32_Shared.skip_1
POP IX
RET
;[]-----------------------------------------------------------[]
;Š®­¢¥àâ¥à ç¨á«  32¡¨â ¢ ⥪áâ
;<3B>  ¢å®¤:
; BC+HL - ç¨á«® 32 ¡¨â
; DE - ¡ãä¥à
ConvNumTxt32 PUSH IX
LD IX,ConvertFlg
RES 7,(IX+0x00)
PUSH BC
EXX
LD HL,ConNumbExit
LD (ChooseStringFormat.address),HL
POP HL
EXX
call ConvNumTxt32_Shared
POP IX
RET
ConvNumTxt32_Shared:
LD BC,0xCA00
EXX
LD BC,0x3B9A ;1'000'000'000
EXX
CALL ConNumb32
.skip_1: LD BC,0xE100
EXX
LD BC,0x05F5 ;100'000'000
EXX
CALL ConNumb32
LD BC,0x9680
EXX
LD BC,0x0098 ;10'000'000
EXX
CALL ConNumb32
LD BC,0x4240
EXX
LD BC,0x000F ;1'000'000
EXX
CALL ConNumb32
LD BC,0x86A0
EXX
LD BC,0x0001 ;100'000
EXX
CALL ConNumb32
LD BC,10000 ;10'000
EXX
LD BC,0x0000
EXX
CALL ConNumb32
LD BC,1000 ;1'000
CALL ConNumb16
LD BC,100 ;100
CALL ConNumb16
LD BC,10 ;10
CALL ConNumb16
LD A,L
ADD A,'0'
LD (DE),A
INC DE
RET
;Š®­¢¥àâ¥à ç¨á«  16¡¨â ¢ ⥪áâ
;<3B>  ¢å®¤:
; HL - ç¨á«® 16 ¡¨â
; DE - ¡ãä¥à
ConvNumTxt16 PUSH IX
PUSH BC
LD IX,ConNumbExit
ld (ChooseStringFormat.address),IX
LD IX,ConvertFlg
RES 7,(IX+0x00)
LD BC,10000 ;10'000
CALL ConNumb16
LD BC,1000 ;1'000
CALL ConNumb16
LD BC,100 ;100
CALL ConNumb16
LD BC,10 ;10
CALL ConNumb16
LD A,L
ADD A,'0'
LD (DE),A
INC DE
POP BC
POP IX
RET
;Š®­¢¥àâ¥à ç¨á«  8¡¨â ¢ ⥪áâ
;<3B>  ¢å®¤:
; A - ç¨á«® 8 ¡¨â
; DE - ¡ãä¥à
ConvNumTxt8 PUSH IX
PUSH BC
LD IX,ConNumbExit
ld (ChooseStringFormat.address),IX
LD IX,ConvertFlg
RES 7,(IX+0x00)
LD C,100
CALL ConNumb8
LD C,10
CALL ConNumb8
ADD A,'0'
LD (DE),A
INC DE
POP BC
POP IX
RET
;----------------------------------------------------------------------;
ConNumb40: exx
ld d,'0'-1
exx
and a
.loop: sbc hl,bc
exx
sbc hl,bc
sbc a,e
inc d
exx
jp nc,.loop
add hl,bc
exx
adc hl,bc
adc a,e
ex af,af'
ld a,d
exx
JR ConNumb8.exit
ConNumb32: LD A,'0' - 1
OR A
.loop: INC A
SBC HL,BC
EXX
SBC HL,BC
EXX
JR NC,.loop
ADD HL,BC
EXX
ADC HL,BC
EXX
JR ChooseStringFormat
ConNumb16: LD A,'0' - 1
OR A
.loop: INC A
SBC HL,BC
JR NC,.loop
ADD HL,BC
JR ChooseStringFormat
ConNumb8: LD B,'0' - 1
.loop: INC B
SUB C
JR NC,.loop
ADD A,C
EX AF,AF'
LD A,B
.exit: CALL ChooseStringFormat
EX AF,AF'
RET
ConvertFlg DEFB 0x00
ChooseStringFormat:
JP 0x0000
.address: equ $-2
ConNumbExit: CP "0"
JR Z,.skip
SET 7,(IX+0x00)
.skip: BIT 7,(IX+0x00)
RET Z
LD (DE),A
INC DE
RET
;[]-----------------------------------------------------------[]
;Š®­¢¥àâ¥à ⥪áâ  ¢ ç¨á«® 32 ¡¨â
;<3B>  ¢å®¤:
; DE - ⥪áâ
;<3B>  ¢ë室:
; HL+IX - ç¨á«®
; CY - ®è¨¡ª 
ConvTxtNum32 LD IX,0x0000
LD HL,0x0000
ConvTN1 LD A,(DE)
CP 0x21
CCF
RET NC
SUB 0x30
RET C
CP 0x0A
CCF
RET C
INC DE
ADD IX,IX
ADC HL,HL
RET C
PUSH HL
PUSH IX
ADD IX,IX
ADC HL,HL
RET C
ADD IX,IX
ADC HL,HL
RET C
POP BC
ADD IX,BC
POP BC
ADC HL,BC
RET C
LD C,A
LD B,0x00
ADD IX,BC
LD C,B
ADC HL,BC
RET C
JR ConvTN1
;Š®­¢¥àâ¥à ⥪áâ  ¢ ç¨á«® 16 ¡¨â
;<3B>  ¢å®¤:
; DE - ⥪áâ
;<3B>  ¢ë室:
; HL - ç¨á«®
; CY - ®è¨¡ª 
ConvTxtNum16 LD HL,0x0000
ConvTN2 LD A,(DE)
CP 0x21
CCF
RET NC
SUB 0x30
RET C
CP 0x0A
CCF
RET C
INC DE
ADD HL,HL
RET C
PUSH HL
ADD HL,HL
RET C
ADD HL,HL
RET C
POP BC
ADD HL,BC
RET C
LD C,A
LD B,0x00
ADD HL,BC
RET C
JR ConvTN2
;[]-----------------------------------------------------------[]
MoveBytes LD A,B
OR A
JR Z,MvByte1
DI
ACCEL ACCELCMD.SET_BUFFER
LD A,0x00
MvByte0
ACCEL ACCELCMD.COPY
LD A,(HL)
LD (DE),A
ACCEL ACCELCMD.OFF
INC H
INC D
DEC B
JR NZ,MvByte0
EI
MvByte1 LD A,C
OR A
RET Z
LD (Mvlen1),A
DI
ACCEL ACCELCMD.SET_BUFFER
LD A,0x00
Mvlen1 EQU $-1
ACCEL ACCELCMD.COPY
LD A,(HL)
LD (DE),A
ACCEL ACCELCMD.OFF
EI
LD A,C
ADD A,E
LD E,A
JR NC,.L1
INC D
.L1 LD A,C
ADD A,L
LD L,A
RET NC
INC H
RET
MoveBytesUp LD A,B
OR A
JR Z,MovUp1
DI
ACCEL ACCELCMD.SET_BUFFER
LD A,0x00
MovUp0 DEC H
DEC D
ACCEL ACCELCMD.COPY
LD A,(HL)
LD (DE),A
ACCEL ACCELCMD.OFF
DEC B
JR NZ,MovUp0
EI
MovUp1 LD A,C
OR A
RET Z
LD (LenUp+1),A
SBC HL,BC
EX DE,HL
SBC HL,BC
EX DE,HL
DI
ACCEL ACCELCMD.SET_BUFFER
LenUp LD A,0x00
ACCEL ACCELCMD.COPY
LD A,(HL)
LD (DE),A
ACCEL ACCELCMD.OFF
EI
RET
;[]----------------------------------------------------------[]
Resident LD (ResCall),DE
IN B,(C)
PUSH BC
OUT (C),A
CALL 0x0000
ResCall EQU $-2
POP BC
OUT (C),B
RET
;[]----------------------------------------------------------[]
; Š®­ª â¥­ æ¨ï áâப¨. „®¡ ¢«ï¥âáï áâப  ¨§ hl ¢ ª®­¥æ áâப¨ ¢ de. <20>ã«ì ª®¯¨àã¥âáï ⮦¥.
; (hl) -> (de)
ConcatString: ex hl,de
.loop: ld a,(hl)
or a
jr z,.end
inc hl
jr .loop
.end: ex hl,de ;‚­¨¬ ­¨¥!!! ®¦¨¤ ¥âáï, çâ® ¤ «ìè¥
; ¨¤¥â CopyString, ¯®í⮬㠥᫨ ¬¥¦¤ã í⨬¨ ¯/¯ ¤®¡ ¢¨«¨ çâ®-â® - ¤®¡ ¢ì ¢ë§®¢ CopyString!
;[]----------------------------------------------------------[]
; Š®¯¨à®¢ ­¨¥ áâப¨ ¤® ­ã«ï. <20>ã«ì ª®¯¨àã¥âáï ⮦¥.
; (hl) -> (de)
CopyString: ld a,(hl)
ldi
or a
jr nz,CopyString
dec de
ret
;[]----------------------------------------------------------[]
; Š®¯¨à®¢ ­¨¥ áâப¨ ¤® ­ã«ï ¨«¨ ¯à®¡¥« . ª®­¥æ ¤®¡ ¢«ï¥âáï ­ã«ì.
; (hl) -> (de)
;!FIXIT ¥á«¨ ­¥ ¡ã¤¥â 0 ¨ ¯à®¡¥«  - ¬®¦¥â ¬­®£® § ¯®à®âì
CopyWord: ld bc, 0x20FF
.loop: ld a,(hl)
ldi
or a
ret z
cp b
jr nz,.loop
dec de
xor a
ld (de),a
ret
;[]----------------------------------------------------------[]
; ‘à ¢­¥­¨¥ áâப¨ á ãç¥â®¬ ॣ¨áâà .
; (®¡à §¥æ ¤®«¦¥­ § ª ­ç¨¢ âìáï ­ã«¥¬)
; ¢å®¤: de - string1
; hl - string2 (®¡à §¥æ)
; ¢ë室: "z" - string1 = string2
; "c" - string1 < string2
; ¨­ ç¥ - string1 > string2
;[]----------------------------------------------------------[]
CompareStrings: ld a,(de)
cp (hl)
ret nz
inc hl
inc de
ld a,(hl)
or a
jr nz,CompareStrings ; ®¡à §¥æ ­¥ § ª®­ç¥­
ld a,(de)
cp (hl)
ret
;<3B>®¨áª ª®­æ  á«®¢  ¨«¨ áâப¨
;> hl - áâப 
;< hl - ª®­¥æ áâப¨ ¨«¨
SkipWord: ld b,0x20
.loop: ld a,(hl)
inc hl
cp b
jr z,.skipSpace
and a
jr nz,.loop
.end: dec hl
ret
.skipSpace: ld a,(hl)
cp b
ret nz
inc hl
jr .skipSpace
;[]----------------------------------------------------------[]
SetCMOSPrint: EX AF,AF'
LD (CMOSposXT),HL
LD (CMOSposYT),DE
LD A,B
LD (CMOSColorT),A
SUB A
LD L,A
LD H,A
LD (CMOSPrint),A
LD (CMOSTime),HL
LD (CMOSTime+2),A
LD (CMOSData),HL
LD (CMOSData+2),A
LD HL,CMOSTimeT
LD DE,CMOSDataT
LD A,'0'
LD B,0x03
.L1 LD (HL),A
INC HL
LD (HL),A
INC HL
INC HL
LD (DE),A
INC DE
LD (DE),A
INC DE
INC DE
DJNZ .L1
EX AF,AF'
LD (CMOSOut),A
OR A
JR Z,TestCMOS
EXX
LD (CMOSposXD),HL
LD (CMOSposYD),DE
LD A,B
LD (CMOSColorD),A
EXX
JR TestCMOS
ResCMOSPrint: LD A,0x01
LD (CMOSPrint),A
RET
TestCMOS: LD A,(CMOSFlag)
OR A
RET Z
LD A,(CMOSPrint)
OR A
RET NZ
PUSH IX
HALT
;!TEST
;DI
SPDSS DSSF.GETTIME
;!TEST
;EI
PUSH DE
PUSH IX
EX DE,HL
LD HL,(CMOSTime)
OR A
SBC HL,DE
JR NZ,PrnCMOSTime
LD A,(CMOSTime+2)
CP B
JR Z,TCMOS1
PrnCMOSTime: EX DE,HL
LD (CMOSTime),HL
LD A,B
LD (CMOSTime+2),A
LD DE,CMOSTimeT
LD A,H
CALL GetCMOS
INC DE
LD A,L
CALL GetCMOS
INC DE
LD A,(CMOSTime+2)
CALL GetCMOS
LD HL,CMOSTimeT
LD DE,(CMOSposXT)
LD BC,(CMOSposYT)
LD A,(CMOSColorT)
CALL PrnTxtLnIFF
TCMOS1 POP IX
POP DE
LD A,(CMOSOut)
OR A
JP Z,TCMOSex
PUSH IX
POP HL
LD BC,1900
OR A
SBC HL,BC
LD B,L
LD HL,(CMOSData)
OR A
SBC HL,DE
JR NZ,PrnCMOSData
LD A,(CMOSData+2)
CP B
JP Z,TCMOSex
PrnCMOSData EX DE,HL
LD (CMOSData),HL
LD A,B
LD (CMOSData+2),A
LD DE,CMOSDataT
LD A,H
CALL GetCMOS
INC DE
LD A,L
CALL GetCMOS
INC DE
LD A,(CMOSData+2)
CALL GetCMOS
LD A,(CMOSOut)
DEC A
JR NZ,TCMOS2
LD HL,CMOSDataT
LD DE,(CMOSposXD)
LD BC,(CMOSposYD)
LD A,(CMOSColorD)
CALL PrnTxtLnIFF
JR TCMOSex
TCMOS2 LD DE,CMOSDataT1
LD A,H
CALL ConvNumTxt8
LD A,' '
LD (DE),A
INC DE
LD A,L
DEC A
ADD A,A
LD L,A
ADD A,A
ADD A,L
LD HL,Month
ADD A,L
LD L,A
JR NC,.L1
INC H
.L1 LD A,' '
.L2 LDI
CP (HL)
JR NZ,.L2
LD (DE),A
INC DE
PUSH IX
POP HL
CALL ConvNumTxt16
SUB A
LD (DE),A
LD HL,(CMOSposXD)
LD (CMOSclX),HL
LD HL,(CMOSposYD)
LD (CMOSclY),HL
LD A,(CMOSColorD)
AND 0xF0
RRCA
RRCA
RRCA
RRCA
LD (CMOScol),A
MAKEWINDOW WINSUBOBJ.WOBIND
W_FILL 0,0,76,8,COLORI.BLACK
W_END
CMOSclX EQU $ - 10
CMOSclY EQU $ - 8
CMOScol EQU $ - 2
LD HL,CMOSDataT1
LD DE,(CMOSposXD)
LD BC,(CMOSposYD)
LD A,(CMOSColorD)
CALL PrnTxtLnIFF
TCMOSex POP IX
RET
;CMOSPrint: DB 0x01
CMOSOut: DB 0
CMOSposXT: DW 0
CMOSposYT: DW 0
CMOSColorT: DB 0
CMOSTime: DB 3 DUP 0
CMOSTimeT: DB "00:00:00",0
CMOSposXD: DW 0
CMOSposYD: DW 0
CMOSColorD: DB 0
CMOSData: DB 3 DUP 0
CMOSDataT: DB "00/00/00",0
CMOSDataT1: DB 14 DUP ' '
GetCMOS: EX DE,HL
LD BC,(('0' - 1) << 8) | 10;0x2F0A
.L1 INC B
SUB C
JR NC,.L1
ADD A,C
LD (HL),B
INC HL
ADD A,'0'
LD (HL),A
INC HL
EX DE,HL
RET
Month: DB "Jan "
DB "Febr "
DB "March "
DB "Apr "
DB "May "
DB "June "
DB "July "
DB "Aug "
DB "Sept "
DB "Oct "
DB "Nov "
DB "Dec "
;[]----------------------------------------------------------[]
SetClock: LD A,(MouseFlag)
OR A
RET Z
PUSH IY
PUSH IX
PUSH HL
PUSH DE
PUSH BC
GETPORT WINSP.CPU3
PUSH AF
LD A,(RAMPAGES.FNFONT)
SETPORT WINSP.CPU3,,0
LD IX,CLOCK_BMP;ClockBMP
LD HL,14 << 8 + 9
LD DE,7 << 8 | 4
SPMOUSE MOUSEF.LOAD_IMAGE
POP AF
SETPORT WINSP.CPU3,,0
POP BC
POP DE
POP HL
POP IX
POP IY
HALT
RET
SetMouse LD A,(MouseFlag)
OR A
RET Z
PUSH IY
PUSH IX
PUSH HL
PUSH DE
PUSH BC
GETPORT WINSP.CPU3
PUSH AF
LD A,(RAMPAGES.FNFONT)
SETPORT WINSP.CPU3,,0
LD IX,MOUSE_BMP;MouseBMP
LD HL,13 << 8 + 9
LD DE,0
SPMOUSE MOUSEF.LOAD_IMAGE
POP AF
SETPORT WINSP.CPU3,,0
POP BC
POP DE
POP HL
POP IX
POP IY
HALT
RET