- плагин доделан, описание/history в cdplayer.txt рядом с плагином. FE 1.09 - исправлено: при выходе из редактора с несохраненным файлом и запросе на сохранение клавиша Enter теперь работает как подтверждение сохранения. FN 1.16 - встроенный editor переехал в плагин откуда и запускается по F4, из FN удален. - встроенный viewer переехал в плагин откуда и запускается по F3, из FN удален. - встроенный help переехал в плагин откуда и запускается при нажатии F1, из FN удален. - загрузка плагина отделена от запуска, теперь можно запускать плагины не только из панели FN. - добавлен макрос формирования заголовка для плагинов. - добавлена поддержка работы плагинов в адреса 0x4000-0x7FFF (окно 1) в дополнение к старым 0xC000-0xBFFF (окно 3), пока используется в плагине cdplayer. - в окнах с ошибкой переделан на 2 типа окон вместо многих под каждую ошибку. - исправлена потеря цвета при печати текста по указанному адресу. - текстовым файлам вернул кодировку CP866, readme.md оставлен в кодировке UTF8.
499 lines
9.3 KiB
Plaintext
499 lines
9.3 KiB
Plaintext
|
||
; LAST UPDATE: 25.07.2025 savelij
|
||
|
||
;[]----------------------------------------------------------[]
|
||
ResFire: LD A,(MouseFlag)
|
||
OR A
|
||
RET Z
|
||
RsFire1 CALL TestCMOS
|
||
SPMOUSE MOUSEF.READ_STATE
|
||
OR A
|
||
RET Z
|
||
JR RsFire1
|
||
|
||
;[]----------------------------------------------------------[]
|
||
; <20>஢¥àª ª®®à¤¨ â ¬ëè¨ ¯® â ¡«¨æ¥
|
||
; <20> ¢å®¤:
|
||
; IX - €¤à¥á â ¡«¨æë
|
||
TestCoords: CALL TestCMOS
|
||
SPMOUSE MOUSEF.READ_STATE
|
||
EX AF,AF'
|
||
LD BC,0x0000
|
||
.PrvTabl EQU $-2
|
||
LD A,IXL
|
||
CP C
|
||
JR NZ,.L2
|
||
LD A,IXH
|
||
CP B
|
||
JR Z,.L3
|
||
.L2 LD (.PrvTabl),IX
|
||
CALL ResMInvert
|
||
LD BC,ResFire
|
||
PUSH BC
|
||
SUB A
|
||
LD (RunFlag),A
|
||
JR .L4
|
||
|
||
.L3 LD A,0x01
|
||
LD (RunFlag),A
|
||
EX AF,AF'
|
||
OR A
|
||
JR NZ,.L4
|
||
PUSH HL
|
||
LD BC,0x0000
|
||
.PrMousX EQU $-2
|
||
OR A
|
||
SBC HL,BC
|
||
POP HL
|
||
JR NZ,.L4
|
||
EX DE,HL
|
||
PUSH HL
|
||
LD BC,0x0000
|
||
.PrMousY EQU $-2
|
||
OR A
|
||
SBC HL,BC
|
||
POP HL
|
||
EX DE,HL
|
||
RET Z
|
||
.L4 LD (.PrMousX),HL
|
||
LD (.PrMousY),DE
|
||
CoordLp LD C,(IX+FORMTABL.X_MIN) ; 00
|
||
LD B,(IX+FORMTABL.X_MIN + 1) ; 01
|
||
OR A
|
||
SBC HL,BC
|
||
ADD HL,BC
|
||
JP C,NxtCrds
|
||
LD C,(IX+FORMTABL.X_MAX) ; 02
|
||
LD B,(IX+FORMTABL.X_MAX + 1) ; 03
|
||
SBC HL,BC
|
||
ADD HL,BC
|
||
JP NC,NxtCrds
|
||
LD C,(IX+FORMTABL.Y_MIN) ; 04
|
||
LD B,(IX+FORMTABL.Y_MIN + 1) ; 05
|
||
OR A
|
||
EX DE,HL
|
||
SBC HL,BC
|
||
ADD HL,BC
|
||
EX DE,HL
|
||
JP C,NxtCrds
|
||
LD C,(IX+FORMTABL.Y_MAX) ; 06
|
||
LD B,(IX+FORMTABL.Y_MAX + 1) ; 07
|
||
EX DE,HL
|
||
SBC HL,BC
|
||
ADD HL,BC
|
||
EX DE,HL
|
||
JP NC,NxtCrds
|
||
LD C,A
|
||
LD A,(MouseFlag)
|
||
OR A
|
||
LD A,C
|
||
JR Z,CoordL1
|
||
BIT FORMTABL.B_INV1,(IX+FORMTABL.FLAG) ; 08
|
||
CALL NZ,SetSelect1
|
||
CoordL1 BIT FORMTABL.B_STATICINV,(IX+FORMTABL.FLAG) ; 08
|
||
CALL NZ,SetSelect2
|
||
LD C,0x00
|
||
RunFlag EQU $-1
|
||
DEC C
|
||
JP NZ,NxtCrds1
|
||
LD C,A
|
||
LD A,(MouseFlag)
|
||
OR A
|
||
RET Z
|
||
LD A,C
|
||
OR A ; ¥â ®£ï
|
||
JR Z,Execute1
|
||
BIT 0,A
|
||
JR Z,Execute2
|
||
BIT FORMTABL.B_BUTTON,(IX+FORMTABL.FLAG) ; 08
|
||
CALL NZ,PushButton
|
||
CCF
|
||
RET NC
|
||
OR A
|
||
BIT FORMTABL.B_WORKBUTTON,(IX+FORMTABL.FLAG) ; 08 ; à ¡®ç ï ª®¯ª
|
||
RET NZ
|
||
LD C,(IX+FORMTABL.FIRE_LEFT) ; 0C ; § ¯ã᪠¯® «¥¢®© ª®¯ª¥
|
||
LD B,(IX+FORMTABL.FIRE_LEFT + 1) ; 0D
|
||
LD A,B
|
||
OR C
|
||
JP Z,NxtCrds1
|
||
BIT FORMTABL.B_EXECNORETLMB,(IX+FORMTABL.FLAG) ; 08 ; § ¯ã᪠¡¥§ ¢®§¢à â
|
||
JR Z,.L1
|
||
POP AF
|
||
.L1 PUSH BC
|
||
BIT FORMTABL.B_INV1,(IX+FORMTABL.FLAG) ; 08
|
||
CALL NZ,ResSelect1
|
||
CALL ResSelect2
|
||
OR A
|
||
BIT FORMTABL.B_CLOSEWIN,(IX+FORMTABL.FLAG + 1) ; 09
|
||
RET Z
|
||
WINDOWCLOSE
|
||
RET
|
||
|
||
Execute1 LD C,(IX+FORMTABL.FIRE_NOFIRE) ; 0A ; § ¯ã᪠¡¥§ ®£ï
|
||
LD B,(IX+FORMTABL.FIRE_NOFIRE + 1) ; 0B
|
||
LD A,B
|
||
OR C
|
||
JR Z,NxtCrds1
|
||
BIT FORMTABL.B_EXECONLY,(IX+FORMTABL.FLAG) ; 08 ; § ¯ã᪠¡¥§ ¢®§¢à â
|
||
JR Z,.L1
|
||
POP AF
|
||
.L1 PUSH BC
|
||
BIT FORMTABL.B_INV1,(IX+FORMTABL.FLAG) ; 08
|
||
CALL NZ,ResSelect1
|
||
CALL ResSelect2
|
||
OR A
|
||
BIT FORMTABL.B_EXECNOPRESS,(IX+FORMTABL.FLAG) ; 08
|
||
RET Z
|
||
WINDOWCLOSE
|
||
RET
|
||
|
||
Execute2 LD C,(IX+FORMTABL.FIRE_RIGHT) ; 0E ; § ¯ã᪠¯® ¯à ¢®© ª®¯ª¥
|
||
LD B,(IX+FORMTABL.FIRE_RIGHT + 1) ; 0F
|
||
LD A,B
|
||
OR C
|
||
JR Z,NxtCrds1
|
||
BIT FORMTABL.B_EXECNORETRMB,(IX+FORMTABL.FLAG) ; 08 ; § ¯ã᪠¡¥§ ¢®§¢à â
|
||
JR Z,.L1
|
||
POP AF
|
||
.L1 PUSH BC
|
||
BIT FORMTABL.B_INV1,(IX+FORMTABL.FLAG) ; 08
|
||
CALL NZ,ResSelect1
|
||
CALL ResSelect2
|
||
OR A
|
||
BIT FORMTABL.B_WORKBUTTON,(IX+FORMTABL.FLAG + 1) ; 09
|
||
RET Z
|
||
WINDOWCLOSE
|
||
RET
|
||
|
||
NxtCrds LD C,A
|
||
LD A,(MouseFlag)
|
||
OR A
|
||
LD A,C
|
||
JR Z,NxtCrds0
|
||
BIT FORMTABL.B_INV1,(IX+FORMTABL.FLAG) ; 08
|
||
CALL NZ,ResSelect1
|
||
NxtCrds0 BIT FORMTABL.B_STATICINV,(IX+FORMTABL.FLAG) ; 08
|
||
CALL NZ,SetSelect2
|
||
NxtCrds1 LD BC,FORMTABL.SIZE;0x0010
|
||
ADD IX,BC
|
||
BIT FORMTABL.B_ENDTABL,(IX+FORMTABL.X_MIN + 1) ; ª®¥æ â ¡«¨æë?
|
||
JP Z,CoordLp
|
||
OR A
|
||
RET
|
||
|
||
ResMInvert PUSH IX
|
||
PUSH HL
|
||
PUSH DE
|
||
PUSH AF
|
||
LD BC,FORMTABL.SIZE;0x0010
|
||
ResCrds RES FORMTABL.B_FIRENOINV,(IX+FORMTABL.FLAG + 1) ; 09
|
||
RES FORMTABL.B_HZ,(IX+FORMTABL.FLAG + 1) ; 09
|
||
ADD IX,BC
|
||
BIT FORMTABL.B_ENDTABL,(IX+FORMTABL.X_MIN + 1)
|
||
JR Z,ResCrds
|
||
POP AF
|
||
POP DE
|
||
POP HL
|
||
POP IX
|
||
RET
|
||
|
||
SetSelect1 BIT FORMTABL.B_FIRENOINV,(IX+FORMTABL.FLAG + 1) ; 09
|
||
RET NZ
|
||
SET FORMTABL.B_FIRENOINV,(IX+FORMTABL.FLAG + 1) ; 09
|
||
PUSH AF
|
||
PUSH HL
|
||
PUSH DE
|
||
PUSH IX
|
||
LD L,(IX+FORMTABL.X_MIN) ; 00
|
||
LD H,(IX+FORMTABL.X_MIN + 1) ; 01
|
||
LD C,(IX+FORMTABL.Y_MIN) ; 04
|
||
LD B,(IX+FORMTABL.Y_MIN + 1) ; 05
|
||
LD A,(IX+FORMTABL.X_MAX) ; 02
|
||
SUB (IX+FORMTABL.X_MIN) ; 00
|
||
EX AF,AF'
|
||
LD A,(IX+FORMTABL.Y_MAX) ; 06
|
||
SUB (IX+FORMTABL.Y_MIN) ; 04
|
||
LD IXH,A
|
||
EX AF,AF'
|
||
SRL A
|
||
LD IXL,A
|
||
LD DE,(COLORP.HIGHGRAY + COLORI.BLACK) << 8 | (COLORP.BLUE + COLORI.WHITE);0x804F
|
||
CALL InvertRectan
|
||
POP IX
|
||
PUSH IX
|
||
NxCrds1 LD BC,FORMTABL.SIZE;0x0010
|
||
ADD IX,BC
|
||
BIT FORMTABL.B_ENDTABL,(IX+FORMTABL.X_MIN + 1) ; 01 ; ¯à®¢¥àª ª®æ â ¡«¨æë?
|
||
JR NZ,NxCrds2
|
||
BIT FORMTABL.B_INV1,(IX+FORMTABL.FLAG) ; 08
|
||
CALL NZ,ResSelect1
|
||
JR NxCrds1
|
||
|
||
NxCrds2 POP IX
|
||
POP DE
|
||
POP HL
|
||
POP AF
|
||
RET
|
||
|
||
ResSelect1 BIT FORMTABL.B_FIRENOINV,(IX+FORMTABL.FLAG + 1) ; 09
|
||
RET Z
|
||
RES FORMTABL.B_FIRENOINV,(IX+FORMTABL.FLAG + 1) ; 09
|
||
PUSH IX
|
||
PUSH HL
|
||
PUSH DE
|
||
LD L,(IX+FORMTABL.X_MIN) ; 00
|
||
LD H,(IX+FORMTABL.X_MIN + 1) ; 01
|
||
LD C,(IX+FORMTABL.Y_MIN) ; 04
|
||
LD B,(IX+FORMTABL.Y_MIN + 1) ; 05
|
||
LD A,(IX+FORMTABL.X_MAX) ; 02
|
||
SUB (IX+FORMTABL.X_MIN) ; 00
|
||
EX AF,AF'
|
||
LD A,(IX+FORMTABL.Y_MAX) ; 06
|
||
SUB (IX+FORMTABL.Y_MIN) ; 04
|
||
LD IXH,A
|
||
EX AF,AF'
|
||
SRL A
|
||
LD IXL,A
|
||
LD DE,(COLORP.BLUE + COLORI.WHITE) << 8 | (COLORP.HIGHGRAY + COLORI.BLACK);0x4F80
|
||
CALL InvertRectan
|
||
POP DE
|
||
POP HL
|
||
POP IX
|
||
RET
|
||
|
||
SetSelect2 BIT FORMTABL.B_HZ,(IX+FORMTABL.FLAG + 1) ; 09
|
||
RET NZ
|
||
SET FORMTABL.B_HZ,(IX+FORMTABL.FLAG + 1) ; 09
|
||
PUSH IX
|
||
PUSH HL
|
||
PUSH DE
|
||
PUSH AF
|
||
LD L,(IX+FORMTABL.X_MIN) ; 00
|
||
LD H,(IX+FORMTABL.X_MIN + 1) ; 01
|
||
LD C,(IX+FORMTABL.Y_MIN) ; 04
|
||
LD B,(IX+FORMTABL.Y_MIN + 1) ; 05
|
||
LD A,(IX+FORMTABL.X_MAX) ; 02
|
||
SUB (IX+FORMTABL.X_MIN) ; 00
|
||
EX AF,AF'
|
||
LD A,(IX+FORMTABL.Y_MAX) ; 06
|
||
SUB (IX+FORMTABL.Y_MIN) ; 04
|
||
LD IXH,A
|
||
EX AF,AF'
|
||
SRL A
|
||
LD IXL,A
|
||
LD DE,(COLORP.HIGHGRAY + COLORI.BLACK) << 8 | (COLORP.BLUE + COLORI.WHITE);0x804F
|
||
CALL InvertRectan
|
||
POP AF
|
||
POP DE
|
||
POP HL
|
||
POP IX
|
||
RET
|
||
|
||
ResSelect2 PUSH HL
|
||
PUSH DE
|
||
PUSH IX
|
||
LD IX,(TestCoords.PrvTabl)
|
||
LD BC,FORMTABL.SIZE;0x0010
|
||
NxCrds3 BIT FORMTABL.B_STATICINV,(IX+FORMTABL.FLAG) ; 08
|
||
JR NZ,ResSel22
|
||
ADD IX,BC
|
||
BIT FORMTABL.B_ENDTABL,(IX+FORMTABL.X_MIN + 1) ; 01 ; ¯à®¢¥àª ª®æ â ¡«¨æë?
|
||
JR NZ,ResSel2E
|
||
JR NxCrds3
|
||
|
||
ResSel22 BIT FORMTABL.B_HZ,(IX+FORMTABL.FLAG + 1) ; 09
|
||
JR Z,ResSel2E
|
||
RES FORMTABL.B_HZ,(IX+FORMTABL.FLAG + 1) ; 09
|
||
LD L,(IX+FORMTABL.X_MIN) ; 00
|
||
LD H,(IX+FORMTABL.X_MIN + 1) ; 01
|
||
LD C,(IX+FORMTABL.Y_MIN) ; 04
|
||
LD B,(IX+FORMTABL.Y_MIN + 1) ; 05
|
||
LD A,(IX+FORMTABL.X_MAX) ; 02
|
||
SUB (IX+FORMTABL.X_MIN) ; 00
|
||
EX AF,AF'
|
||
LD A,(IX+FORMTABL.Y_MAX) ; 06
|
||
SUB (IX+FORMTABL.Y_MIN) ; 04
|
||
LD IXH,A
|
||
EX AF,AF'
|
||
SRL A
|
||
LD IXL,A
|
||
LD DE,(COLORP.BLUE + COLORI.WHITE) << 8 | (COLORP.HIGHGRAY + COLORI.BLACK);0x4F80
|
||
CALL InvertRectan
|
||
ResSel2E POP IX
|
||
POP DE
|
||
POP HL
|
||
RET
|
||
|
||
PushButton PUSH HL
|
||
PUSH DE
|
||
LD L,(IX+FORMTABL.X_MIN) ; 00
|
||
LD H,(IX+FORMTABL.X_MIN + 1) ; 01
|
||
LD E,(IX+FORMTABL.Y_MIN) ; 04
|
||
LD D,(IX+FORMTABL.Y_MIN + 1) ; 05
|
||
LD A,(IX+FORMTABL.X_MAX) ; 02
|
||
SUB (IX+FORMTABL.X_MIN) ; 00
|
||
LD C,A
|
||
LD A,(IX+FORMTABL.Y_MAX) ; 06
|
||
SUB (IX+FORMTABL.Y_MIN) ; 04
|
||
LD B,A
|
||
PUSH HL
|
||
PUSH DE
|
||
PUSH BC
|
||
CALL PutPushBut
|
||
LD A,0x0A
|
||
LD (PausePh+1),A
|
||
PushLp PUSH IX
|
||
CALL TestRun
|
||
POP IX
|
||
PushLp1
|
||
SPMOUSE MOUSEF.READ_STATE
|
||
OR A
|
||
JR Z,PushButtEx
|
||
BIT 0,A
|
||
JR Z,PushButtEx
|
||
LD C,(IX+FORMTABL.X_MIN) ; 00
|
||
LD B,(IX+FORMTABL.X_MIN + 1) ; 01
|
||
OR A
|
||
SBC HL,BC
|
||
ADD HL,BC
|
||
JR C,PushButtEx
|
||
LD C,(IX+FORMTABL.X_MAX) ; 02
|
||
LD B,(IX+FORMTABL.X_MAX + 1) ; 03
|
||
SBC HL,BC
|
||
ADD HL,BC
|
||
CCF
|
||
JR C,PushButtEx
|
||
EX DE,HL
|
||
LD C,(IX+FORMTABL.Y_MIN) ; 04
|
||
LD B,(IX+FORMTABL.Y_MIN + 1) ; 05
|
||
OR A
|
||
SBC HL,BC
|
||
ADD HL,BC
|
||
JR C,PushButtEx
|
||
LD C,(IX+FORMTABL.Y_MAX) ; 06
|
||
LD B,(IX+FORMTABL.Y_MAX + 1) ; 07
|
||
SBC HL,BC
|
||
CCF
|
||
JR C,PushButtEx
|
||
PausePh LD A,0x00
|
||
OR A
|
||
JR Z,PushLp
|
||
DEC A
|
||
LD (PausePh+1),A
|
||
HALT
|
||
JR PushLp1
|
||
|
||
PushButtEx POP BC
|
||
POP DE
|
||
POP HL
|
||
PUSH AF
|
||
CALL PutPopBut
|
||
POP AF
|
||
POP DE
|
||
POP HL
|
||
RET
|
||
|
||
TestRun BIT FORMTABL.B_WORKBUTTON,(IX+FORMTABL.FLAG) ; 08
|
||
RET Z
|
||
LD C,(IX+FORMTABL.FIRE_LEFT) ; 0C
|
||
LD B,(IX+FORMTABL.FIRE_LEFT + 1) ; 0D
|
||
PUSH BC
|
||
RET
|
||
|
||
PutPushBut LD A,COLORP.WHITE | COLORI.BLACKGRAY;0xF7
|
||
JR PutButt
|
||
|
||
PutPopBut LD A,COLORP.BLACKGRAY | COLORI.WHITE;0x7F
|
||
PutButt PUSH IY
|
||
EX AF,AF'
|
||
GETPORT WINSP.CPU1
|
||
PUSH AF
|
||
SETPORT WINSP.CPU1,0x50
|
||
GETPORT WINSP.Y_PORT
|
||
PUSH AF
|
||
SRL H
|
||
RR L
|
||
SET 6,H
|
||
LD IYL,E
|
||
SRL C
|
||
DEC C
|
||
DEC C
|
||
LD A,C
|
||
LD (ButLen3),A
|
||
LD A,B
|
||
SUB 0x02
|
||
LD (ButLen1),A
|
||
LD (ButLen2),A
|
||
ADD A,IYL
|
||
INC A
|
||
LD IYH,A
|
||
EX AF,AF'
|
||
PUSH AF
|
||
AND 0xF0
|
||
LD E,A
|
||
RRCA
|
||
RRCA
|
||
RRCA
|
||
RRCA
|
||
OR E
|
||
LD D,A
|
||
POP AF
|
||
AND 0x0F
|
||
LD E,A
|
||
RLCA
|
||
RLCA
|
||
RLCA
|
||
RLCA
|
||
OR E
|
||
LD E,A
|
||
DI
|
||
LD A,IYL
|
||
SETPORT WINSP.Y_PORT,,0
|
||
LD (HL),E
|
||
INC A
|
||
SETPORT WINSP.Y_PORT,,0
|
||
ACCEL ACCELCMD.SET_BUFFER
|
||
LD A,0x00
|
||
ButLen1 EQU $-1
|
||
ACCEL ACCELCMD.FILL_VERT
|
||
LD (HL),E
|
||
ACCEL ACCELCMD.OFF
|
||
LD (HL),E
|
||
INC HL
|
||
ACCEL ACCELCMD.SET_BUFFER
|
||
LD A,0x00
|
||
ButLen3 EQU $-1
|
||
ACCEL ACCELCMD.OFF
|
||
LD A,IYL
|
||
SETPORT WINSP.Y_PORT,,0
|
||
ACCEL ACCELCMD.FILL
|
||
LD (HL),E
|
||
ACCEL ACCELCMD.OFF
|
||
LD A,IYH
|
||
SETPORT WINSP.Y_PORT,,0
|
||
ACCEL ACCELCMD.FILL
|
||
LD (HL),D
|
||
ACCEL ACCELCMD.OFF
|
||
LD B,0x00
|
||
ADD HL,BC
|
||
LD A,IYL
|
||
SETPORT WINSP.Y_PORT,,0
|
||
LD (HL),D
|
||
INC A
|
||
SETPORT WINSP.Y_PORT,,0
|
||
ACCEL ACCELCMD.SET_BUFFER
|
||
LD A,0x00
|
||
ButLen2 EQU $-1
|
||
ACCEL ACCELCMD.FILL_VERT
|
||
LD (HL),D
|
||
ACCEL ACCELCMD.OFF
|
||
LD (HL),D
|
||
EI
|
||
POP AF
|
||
SETPORT WINSP.Y_PORT,,0
|
||
POP AF
|
||
SETPORT WINSP.CPU1,,0
|
||
POP IY
|
||
RET
|