flex_nav/fn_sys.a80
savelij13 8f458146bc - для ошибок у которых нет текста описания теперь выдает всегда
текст ошибки "Unknown Error".
- исправлена ошибка приводящая к вылету при копировании нескольких файлов
  на уже существующие и выборе отмены от продолжения копирования.
2026-01-22 17:36:03 +03:00

915 lines
13 KiB
Plaintext
Raw 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: 03.08.2025 savelij
;[]-----------------------------------------------------------[]
; <20>à®æ¥¤ãà  ã¬­®¦¥­¨ï (8*8bit)
; <20>  ¢å®¤: E * C
; <20>  ¢ë室:
; HL - १ã«ìâ â
Mul_8X8_16b: 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
; <20>à®æ¥¤ãà  ã¬­®¦¥­¨ï (16*8bit)
; <20>  ¢å®¤: DE * C
; <20>  ¢ë室:
; AHL - १ã«ìâ â
Mul_16X8_24b: 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
; <20>à®æ¥¤ãà  ã¬­®¦¥­¨ï (16*16bit)
; <20>  ¢å®¤: DE * BC
; <20>  ¢ë室:
; HL - १ã«ìâ â
Mul_16X16_16b: 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
; <20>à®æ¥¤ãà  ã¬­®¦¥­¨ï (32bit)
; <20>  ¢å®¤: DE * BC
; <20>  ¢ë室:
; HLDE - १ã«ìâ â
Mul_16X16_32b: 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
; <20>à®æ¥¤ãà  ã¬­®¦¥­¨ï (32bit)
; <20>  ¢å®¤: HLDE * BC
; <20>  ¢ë室:
; HLDE - १ã«ìâ â
Mul_32X16_32b: 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
; <20>à®æ¥¤ãà  ¤¥«¥­¨ï (16bit)
; <20>  ¢å®¤: BC / DE
; <20>  ¢ë室:
; BC - १ã«ìâ â
; HL - ®áâ â®ª
Div_16X16_16b_16b:
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
; <20>à®æ¥¤ãà  ¤¥«¥­¨ï (24x16bit)
; <20>  ¢å®¤: HLC / DE
; <20>  ¢ë室:
; A -१ã«ìâ â
; HL - ®áâ â®ª
Div_24X16_8b_16b:
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
; <20>à®æ¥¤ãà  ¤¥«¥­¨ï 32/16bit=16bit
; <20>  ¢å®¤: HLDE / BC
; <20>  ¢ë室:
; DE - १ã«ìâ â
; HL - ®áâ â®ª
Div_32X16_16b_16b:
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
; <20>à®æ¥¤ãà  ¤¥«¥­¨ï 32/16bit=32bit
; <20>  ¢å®¤: HLDE/BC
; <20>  ¢ë室:
; HLDE - १ã«ìâ â
; BC-®áâ â®ª
Div_32X16_32b_16b:
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>  ¢å®¤:
; ABCHL - ç¨á«® 40 ¡¨â
; DE - ¡ãä¥à
ConvertNumbers_40b:
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>  ¢å®¤:
; BCHL - ç¨á«® 32 ¡¨â
; DE - ¡ãä¥à
ConvertNumbers_32b:
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¡¨â ¢ ⥪áâ
; <20>  ¢å®¤:
; HL - ç¨á«® 16 ¡¨â
; DE - ¡ãä¥à
ConvertNumbers_16b:
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¡¨â ¢ ⥪áâ
; <20>  ¢å®¤:
; A - ç¨á«® 8 ¡¨â
; DE - ¡ãä¥à
ConvertNumbers_8b:
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 ¡¨â
; <20>  ¢å®¤:
; DE - ⥪áâ
; <20>  ¢ë室:
; HLIX - ç¨á«®
; CY - ®è¨¡ª 
atoi_32b: 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 ¡¨â
; <20>  ¢å®¤:
; DE - ⥪áâ
; <20>  ¢ë室:
; HL - ç¨á«®
; CY - ®è¨¡ª 
atoi_16b: 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
;[]-----------------------------------------------------------[]
MoveBytesInc: 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
MoveBytesDec: 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
;[]----------------------------------------------------------[]
; Š®­ª â¥­ æ¨ï áâப¨. „®¡ ¢«ï¥âáï áâப  ¨§ hl ¢ ª®­¥æ áâப¨ ¢ de. <20>ã«ì ª®¯¨àã¥âáï ⮦¥.
; (hl) -> (de)
STRCAT: 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)
STRCPY: ld a,(hl)
ldi
or a
jr nz,STRCPY
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
;[]----------------------------------------------------------[]
STRCMP: ld a,(de)
cp (hl)
ret nz
inc hl
inc de
ld a,(hl)
or a
jr nz,STRCMP ; ®¡à §¥æ ­¥ § ª®­ç¥­
ld a,(de)
cp (hl)
ret
; <20>®¨áª ª®­æ  á«®¢  ¨«¨ áâப¨
; > 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
;[]----------------------------------------------------------[]
; HL - X ¯®§¨æ¨ï ¢ë¢®¤  ¢à¥¬¥­¨
; DE - Y ¯®§¨æ¨ï ¢ë¢®¤  ¢à¥¬¥­¨
; B - 梥⠢뢮¤  ¢à¥¬¥­¨
; HL' - X ¯®§¨æ¨ï ¢ë¢®¤  ¤ âë
; DE' - Y ¯®§¨æ¨ï ¢ë¢®¤  ¤ âë
; B' - 梥⠢뢮¤  ¤ âë
; A - ä®à¬ â ¢ë¢®¤  ¬¥áïæ  ¢ ¤ â¥
; 1 - ¬¥áïæ ¢ë¢®¤¨âáï ç¨á«®¬
; 2 - ¬¥áïæ ¢ë¢®¤¨âáï ⥪á⮬,
; ç¨á«® ¢ë¢®¤¨âáï ¡¥§ ¢¥¤ã饣® ­ã«ï
CMOSPrintDateTime:
LD (CMOSpos.CMOSOut),A
LD (CMOSpos.posXtime),HL
LD (CMOSpos.posYtime),DE
LD A,B
LD (CMOSpos.colorTime),A
SUB A
LD L,A
LD H,A
LD (CMOSPrint),A
LD (CMOSpos.Time),HL
LD (CMOSpos.Time + 2),A
EXX
LD (CMOSpos.posXDate),HL
LD (CMOSpos.posYDate),DE
LD A,B
LD (CMOSpos.colorDate),A
EXX
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 ; DE,IX á®åà ­¨«¨ ¤¥­ì,¬¥áïæ £®¤
EX DE,HL
LD HL,(CMOSpos.Time)
OR A
SBC HL,DE
JR NZ,.PrnCMOSTime
LD A,(CMOSpos.Time + 2)
CP B
JR Z,.TCMOS1
.PrnCMOSTime: EX DE,HL
LD (CMOSpos.Time),HL
LD A,B
LD (CMOSpos.Time + 2),A
LD DE,CMOSpos.TimeTXT
LD A,H ; ç áë
CALL Conv4CMOS
INC DE
LD A,L ; ¬¨­ãâë
CALL Conv4CMOS
INC DE
LD A,(CMOSpos.Time + 2) ; ᥪ㭤ë
CALL Conv4CMOS
LD HL,CMOSpos.TimeTXT
LD DE,(CMOSpos.posXtime)
LD BC,(CMOSpos.posYtime)
LD A,(CMOSpos.colorTime)
CALL PrintTxtLine_IFF
.TCMOS1 POP IX
POP DE ; DE,IX ¢®ááâ ­®¢¨«¨ ¤¥­ì,¬¥áïæ,£®¤
LD A,(CMOSpos.CMOSOut)
OR A
JP Z,TCMOSexit
EX DE,HL
LD (CMOSpos.Date),HL ; ¤¥­ì,¬¥áïæ
LD (CMOSpos.Date + 2),IX ; £®¤
LD A,(CMOSpos.CMOSOut)
DEC A
JR NZ,.TCMOS2
; ¢ë¢®¤ ¤ âë ¢¢¨¤¥ 02.08.2025
LD DE,CMOSpos.DateTXT
LD A,H
CALL Conv4CMOS
INC DE
LD A,L
CALL Conv4CMOS
INC DE
LD HL,(CMOSpos.Date + 2)
CALL ConvertNumbers_16b
LD HL,CMOSpos.DateTXT
LD DE,(CMOSpos.posXDate)
LD BC,(CMOSpos.posYDate)
LD A,(CMOSpos.colorDate)
CALL PrintTxtLine_IFF
JR TCMOSexit
; ¢ë¢®¢ ¤ âë ¢¢¨¤¥ 2 Aug 2025
.TCMOS2 LD DE,CMOSpos.DateT1
LD A,H
CALL ConvertNumbers_8b
LD A,' '
LD (DE),A
INC DE
LD A,L
DEC A
ADD A,A
ADD A,A
LD HL,Month
ADD A,L
LD L,A
ADC A,H
SUB L
LD H,A
LD A,' '
.L2 LDI
CP (HL)
JR NZ,.L2
LDI
LD HL,(CMOSpos.Date + 2)
CALL ConvertNumbers_16b
SUB A
LD (DE),A
LD HL,CMOSpos.DateT1
LD DE,(CMOSpos.posXDate)
LD BC,(CMOSpos.posYDate)
LD A,(CMOSpos.colorDate)
CALL PrintTxtLine_IFF
TCMOSexit POP IX
RET
Conv4CMOS: EX DE,HL
LD BC,(('0' - 1) << 8) + 10
.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
CMOSpos
.CMOSOut: DB 0 ; ⨯ ¢ë¢®¤  ¤ âë:
; 0 - â¥áâ
; 1 - ¤¥­ì/¬¥áïæ/£®¤
; 2 - ¤¥­ì ¬¥áïæ £®¤
.posXtime: DW 0 ; ¯®§¨æ¨ï X ¤«ï ¢à¥¬¥­¨
.posYtime: DW 0 ; ¯®§¨æ¨ï Y ¤«ï ¢à¥¬¥­¨
.colorTime: DB 0 ; 梥⠤«ï ¢à¥¬¥­¨
.Time: DB 3 DUP 0 ; ç áë,¬¨­ãâë,ᥪ㭤ë
.TimeTXT: DZ "00:00:00"
.posXDate: DW 0 ; ¯®§¨æ¨ï X ¤«ï ¤ âë
.posYDate: DW 0 ; ¯®§¨æ¨ï Y ¤«ï ¤ âë
.colorDate: DB 0 ; 梥⠤«ï ¤ âë
.Date: DD 0 ; ¤¥­ì,¬¥áïæ,£®¤
.DateTXT: DZ "00.00.0000"
.DateT1: DB 14 DUP 0
Month: DB "Jan "
DB "Feb "
DB "Mar "
DB "Apr "
DB "May "
DB "Jun "
DB "Jul "
DB "Aug "
DB "Sep "
DB "Oct "
DB "Nov "
DB "Dec "
;[]----------------------------------------------------------[]
PointerMouseClock:
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
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
PointerMousePointer:
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
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