flex_nav/fnwin.a80

1125 lines
20 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: 30.03.2025 savelij
;[]----------------------------------------------------------[]
;<3B>à®æ¥¤ãà  ®âç¨áª¨ 0 íªà ­ 
;<3B>  ¢å®¤: A - 梥⠮âç¨á⪨ (00-0Fh)
ClearScreen AND 0x0F
LD E,A
RLCA
RLCA
RLCA
RLCA
OR E
LD E,A
GETPORT WINSP.Y_PORT
LD C,A
GETPORT WINSP.CPU1
LD B,A
PUSH BC
SETPORT WINSP.CPU1,0x50
LD HL,0x4000
LD BC,320
DI
EXX
SPMOUSE MOUSEF.REFRESH
EXX
ACCEL ACCELCMD.SET_BUFFER
LD A,0x00
InScrLp
ACCEL ACCELCMD.FILL_VERT
LD (HL),E
ACCEL ACCELCMD.OFF
INC HL
DEC BC
LD A,B
OR C
JR NZ,InScrLp
EI
POP BC
LD A,B
SETPORT WINSP.CPU1,,0
LD A,C
SETPORT WINSP.Y_PORT,,0
RET
;[]----------------------------------------------------------[]
; <20>à®æ¥¤ãà  ¢ë¢®¤  ®ª®­ ­  £à ä¨ç¥áª¨© íªà ­ 640x256x16 ;
;[]----------------------------------------------------------[]
MakeWindow: EX (SP),IY
PUSH IX
PUSH HL
PUSH DE
PUSH BC
PUSH AF
GETPORT WINSP.Y_PORT ; ‘®å࠭塞 Y ¯®àâ
PUSH AF
LD A,(IY+0x00)
LD (MakeWindow.Type),A
BIT 7,A
JR Z,.L4
INC IY
LD HL,0x0000
LD (MakeWindow.PositX),HL
LD (MakeWindow.PositY),HL
LD (MakeWindow.LenX),HL
LD (MakeWindow.LenY),HL
JR .L2
.L4 CP 0x7F
JR Z,.L2
LD L,(IY+0x01) ; Š®®à¤¨­ â  X
LD H,(IY+0x02)
SRL H
RR L
LD (MakeWindow.PositX),HL
LD L,(IY+0x03) ; Š®®à¤¨­ â  Y
LD H,(IY+0x04)
LD (MakeWindow.PositY),HL
LD L,(IY+0x05) ; H „«¨­  ®ª­  ¯® X
LD H,(IY+0x06)
SRL H
RR L
LD (MakeWindow.LenX),HL
LD L,(IY+0x07) ; V „«¨­  ®ª­  ¯® Y
LD H,(IY+0x08)
LD (MakeWindow.LenY),HL
LD A,(MakeWindow.Type)
DEC A
JR NZ,.L3
LD HL,MakeWindow.Buffer
LD A,(MakeWindow.Open)
ADD A,A
LD C,A
ADD A,A
ADD A,A
ADD A,C
ADD A,L
LD L,A
JR NC,.L1
INC H
.L1 LD DE,(MakeWindow.PositX)
LD (HL),E
INC HL
LD (HL),D
INC HL
LD DE,(MakeWindow.PositY)
LD (HL),E
INC HL
LD (HL),D
INC HL
LD DE,(MakeWindow.LenX)
LD (HL),E
INC HL
LD (HL),D
INC HL
LD DE,(MakeWindow.LenY)
LD (HL),E
INC HL
LD (HL),D
INC HL
LD DE,(MakeWindow.Free)
LD (HL),E
INC HL
LD (HL),D
.L3 LD DE,0x0009
ADD IY,DE ; ޝ¨á â¥«ì ­  ­ ç «® ¯®¤®¡'¥ªâ®¢
LD A,(MakeWindow.Type)
OR A
CALL NZ,StoreWindow
CALL PutRectan ; —¥à⨬ ¯àאַ㣮«ì­¨ª ®ª­ 
.L2 LD HL,.L2
PUSH HL
LD A,(IY+0x00) ; ⥪ã騩 ¯®¤®¡'¥ªâ ®ª­ 
INC IY
CP WINSUBOBJ.TEXT;0x01 ; ⥪á⮢ ï áâப 
JP Z,PutTxtLine
CP WINSUBOBJ.FILL;0x02 ; ¬¥áâ® ¤«ï § £®«®¢ª 
JP Z,PutHeadPlc
CP WINSUBOBJ.BORDER;0x03 ; 㣫㡫¥­¨¥ ¢ ®ª­¥
JP Z,PutDRectan
CP WINSUBOBJ.BUTTON;0x04 ; ª­®¯ª 
JP Z,PutURectan
CP WINSUBOBJ.BUTTONTEXT;0x05 ; ª­®¯ª  á ⥪á⮬
JP Z,PutButton
CP WINSUBOBJ.HORIZLINE;0x06 ; £®à¨§®­â «ì­ ï «¨­¨ï
JP Z,PutHorizLine
CP WINSUBOBJ.VERTICLINE;0x07 ; ¢¥à⨪ «ì­ ï «¨­¨ï
JP Z,PutVertLine
CP WINSUBOBJ.ICONLEFTARROW;0x08 ; ¨ª®­ª  "áâ५ª  ¢«¥¢®"
JP Z,PutSBleft
CP WINSUBOBJ.ICONRIGHTARROW;0x09 ; ¨ª®­ª  "áâ५ª  ¢¯à ¢®"
JP Z,PutSBright
CP WINSUBOBJ.ICONUPARROW;0x0A ; ¨ª®­ª  "áâ५ª  ¢¢¥àå"
JP Z,PutSBup
CP WINSUBOBJ.ICONDOWNARROW;0x0B ; ¨ª®­ª  "áâ५ª  ¢­¨§"
JP Z,PutSBdown
CP WINSUBOBJ.RESTOREWIN;0x7F ; ¢®ááâ ­®¢«¥­¨¥ ç á⨠íªà ­ 
JP Z,RestoreWindow
CP WINSUBOBJ.ADRTEXT
JP Z,PutAdrTxtLine
POP HL
POP AF
SETPORT WINSP.Y_PORT,,0 ; ¢®ááâ. Y port
POP AF
POP BC
POP DE
POP HL
POP IX
EX (SP),IY
RET
;--------------------------------------------------------------
; Ž¡« áâì ¤ ­­ëå ®ª­ 
.PositX DEFW 0x0000 ;  ¤à¥á X ª®®à¤¨­ âë ®ª­ 
.PositY DEFW 0x0000 ; Y ª®®à¤¨­ â  ®ª­ 
.LenX DEFW 0x0000 ; ¤«¨­  ®ª­  X/2
.LenY DEFW 0x0000 ; ¤«¨­  ®ª­  Y
.Free DEFW 0x0000
.Open DEFB 0x00 ; Š®«-¢® ®âªàëâëå ®ª®­
.Type DEFB 0x00
.Buffer DUPL 0x40,0
;--------------------------------------------------------------
; <20>à®æ¥¤ãà  á®åà ­¥­¨ï ¯àאַ㣮«ì­®© ¯«®áª®á⨠¢ ¡ãä¥à
StoreWindow DI
PUSH IY
SPMOUSE MOUSEF.REFRESH
POP IY
GETPORT WINSP.CPU3
PUSH AF
GETPORT WINSP.CPU1
PUSH AF
SETPORT WINSP.CPU1,0x50
LD HL,(MakeWindow.Free)
LD A,H
AND 0xC0
RLCA
RLCA
EXX
LD HL,RAMPAGES.BuffPg1
ADD A,L
LD L,A
JR NC,.L1
INC H
.L1 LD A,(HL)
SETPORT WINSP.CPU3,,0
EXX
LD A,H
OR 0xC0
LD H,A
LD DE,(MakeWindow.PositX)
SET 6,D
LD A,(MakeWindow.PositY)
LD IXH,A
LD A,(MakeWindow.LenY)
LD IXL,A
LD (.SavLen1),A
ACCEL ACCELCMD.SET_BUFFER
LD A,0x00
.SavLen1 EQU $-1
ACCEL ACCELCMD.OFF
LD BC,(MakeWindow.LenX)
.SavRect PUSH BC
LD B,0x00
LD C,IXL
PUSH HL
ADC HL,BC
POP HL
JR Z,.L2
JR NC,.SavRec1
.L2 LD HL,0xC000
EXX
INC HL
LD A,(HL)
SETPORT WINSP.CPU3,,0
EXX
.SavRec1 LD A,IXH
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.COPY_VERT
LD A,(DE)
ACCEL ACCELCMD.COPY
LD (HL),A
ACCEL ACCELCMD.OFF
ADD HL,BC
POP BC
INC DE
DEC BC
LD A,B
OR C
JR NZ,.SavRect
EI
POP AF
SETPORT WINSP.CPU1,,0
POP AF
SETPORT WINSP.CPU3,,0
LD A,H
AND 0x3F
LD H,A
EXX
LD A,L
SUB LOW (RAMPAGES.BuffPg1)
EXX
RRCA
RRCA
OR H
LD H,A
LD (MakeWindow.Free),HL
LD HL,MakeWindow.Open
INC (HL)
RET
;[]----------------------------------------------------------[]
; <20>à®æ¥¤ãà  ¢®ááâ ­®¢«¥­¨ï ¯àאַ㣮«ì­®© ¯«®áª®áâ¨
RestoreWindow LD HL,MakeWindow.Open
LD A,(HL)
OR A
RET Z
DEC (HL)
HALT
DI
PUSH IY
SPMOUSE MOUSEF.REFRESH
POP IY
GETPORT WINSP.CPU3
PUSH AF
GETPORT WINSP.CPU1
PUSH AF
SETPORT WINSP.CPU1,0x50
LD HL,MakeWindow.Buffer
LD A,(MakeWindow.Open)
ADD A,A
LD C,A
ADD A,A
ADD A,A
ADD A,C
ADD A,L
LD L,A
JR NC,.L1
INC H
.L1 LD E,(HL)
INC HL
LD D,(HL)
INC HL
SET 6,D
LD A,(HL)
INC HL
INC HL
LD IXH,A
LD C,(HL)
INC HL
LD B,(HL)
INC HL
LD A,(HL)
INC HL
INC HL
LD (.RstLen1),A
LD IXL,A
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
LD (MakeWindow.Free),HL
LD A,H
AND 0xC0
RLCA
RLCA
EXX
LD HL,RAMPAGES.BuffPg1
ADD A,L
LD L,A
JR NC,.L2
INC H
.L2 LD A,(HL)
SETPORT WINSP.CPU3,,0
EXX
LD A,H
OR 0xC0
LD H,A
ACCEL ACCELCMD.SET_BUFFER
LD A,0x00
.RstLen1 EQU $-1
ACCEL ACCELCMD.OFF
.RstRect PUSH BC
LD B,0x00
LD C,IXL
PUSH HL
ADC HL,BC
POP HL
JR Z,.L3
JR NC,.RstRec1
.L3 LD HL,0xC000
EXX
INC HL
LD A,(HL)
SETPORT WINSP.CPU3,,0
EXX
.RstRec1
ACCEL ACCELCMD.COPY
LD A,(HL)
ACCEL ACCELCMD.OFF
LD A,IXH
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.COPY_VERT
LD (DE),A
ACCEL ACCELCMD.OFF
ADD HL,BC
POP BC
INC DE
DEC BC
LD A,B
OR C
JR NZ,.RstRect
EI
POP AF
SETPORT WINSP.CPU1,,0
POP AF
SETPORT WINSP.CPU3,,0
RET
;[]==========================================================[]
; <20>à®æ¥¤ãà  ç¥à祭¨ï ¯àאַ㣮«ì­®© ¯«®é ¤¨ ®ª­ 
PutRectan HALT
DI
PUSH IY
SPMOUSE MOUSEF.REFRESH
POP IY
GETPORT WINSP.CPU1
PUSH AF
SETPORT WINSP.CPU1,0x50
LD HL,(MakeWindow.PositX) ; ¯®§. ®ª­ 
SET 6,H
LD A,(MakeWindow.LenY) ; ¤«¨­  ®ª­  -(¯®¤á¢¥âª +⥭ì)
SUB 0x02
LD (.TmpLen1),A
LD A,(MakeWindow.PositY)
LD D,A
SETPORT WINSP.Y_PORT,,0
LD E,COLORP.WHITE + COLORI.WHITE;0xFF
LD (HL),E
INC A
SETPORT WINSP.Y_PORT,,0
LD BC,(MakeWindow.LenX)
DEC BC
DEC BC
ACCEL ACCELCMD.SET_BUFFER
LD A,0x00
.TmpLen1 EQU $-1
ACCEL ACCELCMD.FILL_VERT
LD (HL),E
ACCEL ACCELCMD.OFF
LD (HL),COLORP.WHITE + COLORI.BLACKGRAY;0xF7
INC HL
LD E,COLORP.HIGHGRAY + COLORI.HIGHGRAY;0x88
.PtRect1 LD A,D
SETPORT WINSP.Y_PORT,,0
LD (HL),COLORP.WHITE + COLORI.WHITE;0xFF
INC A
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.FILL_VERT
LD (HL),E
ACCEL ACCELCMD.OFF
LD (HL),COLORP.BLACKGRAY + COLORI.BLACKGRAY;0x77
INC HL
DEC BC
LD A,B
OR C
JR NZ,.PtRect1
LD A,D
SETPORT WINSP.Y_PORT,,0
LD (HL),COLORP.WHITE + COLORI.BLACKGRAY;0xF7
INC A
SETPORT WINSP.Y_PORT,,0
LD E,COLORP.BLACKGRAY + COLORI.BLACKGRAY;0x77
ACCEL ACCELCMD.FILL_VERT
LD (HL),E
ACCEL ACCELCMD.OFF
LD (HL),E
EI
POP AF
SETPORT WINSP.CPU1,,0
RET
; <20>¥ç âì ⥪á⮢®© áâப¨ ¯® 㪠§ ­­®¬ã  ¤à¥áã  ¤à¥áã
PutAdrTxtLine LD HL,(MakeWindow.PositX)
SLA L
RL H
LD E,(IY+0x00) ; Xpos
INC IY
LD D,(IY+0x00)
INC IY
ADD HL,DE
EX DE,HL
LD HL,(MakeWindow.PositY)
LD C,(IY+0x00) ; Ypos
INC IY
LD B,(IY+0x00)
INC IY
ADD HL,BC
LD C,L
LD B,H
LD A,(IY+0x00) ; Color
INC IY
LD L,(IY+0)
INC IY
LD H,(IY+0) ; €¤à¥á ⥪áâ 
INC IY
PUSH IY
LD A,H
OR L
CALL NZ,PrnTxtLnIFF ; ¯¥ç â âì ¥á«¨  ¤à¥á ­¥ 0
POP IY
RET
;[]===========================================================[]
PutTxtLine LD HL,(MakeWindow.PositX)
SLA L
RL H
LD E,(IY+0x00) ; Xpos
INC IY
LD D,(IY+0x00)
INC IY
ADD HL,DE
EX DE,HL
LD HL,(MakeWindow.PositY)
LD C,(IY+0x00) ; Ypos
INC IY
LD B,(IY+0x00)
INC IY
ADD HL,BC
LD C,L
LD B,H
LD A,(IY+0x00) ; Color
INC IY
PUSH IY
POP HL
CALL PrnTxtLnIFF
PUSH HL
POP IY
RET
;[]===========================================================[]
PutHeadPlc DI
PUSH IY
SPMOUSE MOUSEF.REFRESH
POP IY
LD HL,(MakeWindow.PositX)
SET 6,H
LD C,(IY+0x00)
INC IY
LD B,(IY+0x00)
INC IY
SRL B
RR C
ADD HL,BC
LD C,(IY+0x00)
INC IY
INC IY
LD A,(MakeWindow.PositY)
ADD A,C
LD IXL,A
LD C,(IY+0x00)
INC IY
LD B,(IY+0x00)
INC IY
SRL B
RR C
LD A,(IY+0x00)
INC IY
INC IY
LD (.TmpLen2),A
LD A,(IY+0x00)
AND 0x0F
RLCA
RLCA
RLCA
RLCA
OR (IY+0x00)
LD D,A
INC IY
GETPORT WINSP.CPU1
PUSH AF
SETPORT WINSP.CPU1,0x50
ACCEL ACCELCMD.SET_BUFFER
LD A,0x00
.TmpLen2 EQU $-1
ACCEL ACCELCMD.OFF
.PtHead1 LD A,IXL
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.FILL_VERT
LD (HL),D
ACCEL ACCELCMD.OFF
INC HL
DEC BC
LD A,B
OR C
JR NZ,.PtHead1
EI
POP AF
SETPORT WINSP.CPU1,,0
RET
;[]===========================================================[]
PutDRectan LD HL,(MakeWindow.PositX)
SET 6,H
LD C,(IY+0x00)
INC IY
LD B,(IY+0x00)
INC IY
SRL B
RR C
ADD HL,BC
LD C,(IY+0x00)
INC IY
INC IY
LD A,(MakeWindow.PositY)
ADD A,C
LD IXL,A
LD C,(IY+0x00)
INC IY
LD B,(IY+0x00)
INC IY
SRL B
RR C
DEC BC
LD A,C
DEC A
LD (.TmpLen4),A
LD A,(IY+0x00)
INC IY
INC IY
SUB 0x02
LD (.TmpLen3),A
ADD A,IXL
INC A
LD IXH,A
GETPORT WINSP.CPU1
PUSH AF
SETPORT WINSP.CPU1,0x50
DI
ACCEL ACCELCMD.SET_BUFFER
LD A,0x00
.TmpLen3 EQU $-1
ACCEL ACCELCMD.OFF
LD A,IXL
SETPORT WINSP.Y_PORT,,0
LD E,COLORP.BLACKGRAY + COLORI.BLACKGRAY;0x77
LD (HL),E
INC A
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.FILL_VERT
LD (HL),E
ACCEL ACCELCMD.OFF
LD (HL),COLORP.BLACKGRAY + COLORI.WHITE;0x7F
PUSH HL
ADD HL,BC
LD A,IXL
SETPORT WINSP.Y_PORT,,0
LD E,COLORP.WHITE + COLORI.WHITE;0xFF
LD (HL),E
INC A
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.FILL_VERT
LD (HL),E
ACCEL ACCELCMD.OFF
LD (HL),E
POP HL
INC HL
LD A,IXL
SETPORT WINSP.Y_PORT,,0
LD E,COLORP.BLACKGRAY + COLORI.BLACKGRAY;0x77
ACCEL ACCELCMD.SET_BUFFER
LD A,0x00
.TmpLen4 EQU $-1
ACCEL ACCELCMD.FILL
LD (HL),E
ACCEL ACCELCMD.OFF
LD A,IXH
SETPORT WINSP.Y_PORT,,0
LD E,COLORP.WHITE + COLORI.WHITE;0xFF
ACCEL ACCELCMD.FILL
LD (HL),E
ACCEL ACCELCMD.OFF
EI
POP AF
SETPORT WINSP.CPU1,,0
RET
;[]===========================================================[]
PutURectan LD HL,(MakeWindow.PositX)
SET 6,H ; | 0x4000
LD C,(IY+0x00) ; 00
INC IY ; 0->1
LD B,(IY+0x00) ; 01
INC IY ; 1->2
SRL B
RR C
ADD HL,BC
LD C,(IY+0x00) ; 02
INC IY ; 2->3
INC IY ; 3->4
LD A,(MakeWindow.PositY)
ADD A,C
LD IXL,A
LD C,(IY+0x00) ; 04
INC IY ; 4->5
LD B,(IY+0x00) ; 05
INC IY ; 5->6
SRL B
RR C
DEC BC
LD A,C
DEC A
LD (.TmpLen6),A
LD A,(IY+0x00) ; 06
INC IY ; 6->7
INC IY ; 7->8
SUB 0x02
LD (.TmpLen5),A
ADD A,IXL
INC A
LD IXH,A
GETPORT WINSP.CPU1
PUSH AF
SETPORT WINSP.CPU1,0x50
DI
ACCEL ACCELCMD.SET_BUFFER
LD A,0x00
.TmpLen5 EQU $-1
ACCEL ACCELCMD.OFF
LD A,IXL
SETPORT WINSP.Y_PORT,,0
LD E,COLORP.WHITE + COLORI.WHITE;0xFF
LD (HL),E
INC A
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.FILL_VERT
LD (HL),E
ACCEL ACCELCMD.OFF
LD (HL),COLORP.WHITE + COLORI.BLACKGRAY;0xF7
PUSH HL
ADD HL,BC
LD A,IXL
SETPORT WINSP.Y_PORT,,0
LD E,COLORP.BLACKGRAY + COLORI.BLACKGRAY;0x77
LD (HL),E
INC A
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.FILL_VERT
LD (HL),E
ACCEL ACCELCMD.OFF
LD (HL),E
POP HL
INC HL
LD A,IXL
SETPORT WINSP.Y_PORT,,0
LD E,COLORP.WHITE + COLORI.WHITE;0xFF
ACCEL ACCELCMD.SET_BUFFER
LD A,0x00
.TmpLen6 EQU $-1
ACCEL ACCELCMD.FILL
LD (HL),E
ACCEL ACCELCMD.OFF
LD A,IXH
SETPORT WINSP.Y_PORT,,0
LD E,COLORP.BLACKGRAY + COLORI.BLACKGRAY;0x77
ACCEL ACCELCMD.FILL
LD (HL),E
ACCEL ACCELCMD.OFF
EI
POP AF
SETPORT WINSP.CPU1,,0
RET
;[]===========================================================[]
PutButton LD HL,(MakeWindow.PositX)
SLA L
RL H
LD E,(IY+0x00) ; Xpos
LD D,(IY+0x01)
ADD HL,DE
INC HL
INC HL
INC HL
INC HL
EX DE,HL
LD HL,(MakeWindow.PositY)
LD C,(IY+0x02) ; Ypos
LD B,(IY+0x03)
ADD HL,BC
INC HL
LD C,L
LD B,H
PUSH DE
PUSH BC
CALL PutURectan
POP BC
POP DE
LD A,(IY+0x00) ; Color
INC IY
PUSH IY
POP HL
CALL PrnTxtLnIFF
PUSH HL
POP IY
RET
;[]===========================================================[]
PutHorizLine LD HL,(MakeWindow.PositX)
SET 6,H
LD C,(IY+0x00)
INC IY
LD B,(IY+0x00)
INC IY
SRL B
RR C
ADD HL,BC
LD C,(IY+0x00)
INC IY
INC IY
LD A,(MakeWindow.PositY)
ADD A,C
LD IXL,A
LD C,(IY+0x00)
INC IY
LD B,(IY+0x00)
INC IY
SRL B
RR C
LD E,COLORP.BLACKGRAY + COLORI.BLACKGRAY;0x77
PUSH HL
CALL .HorizLn
POP HL
INC IXL
LD E,COLORP.WHITE + COLORI.WHITE;0xFF
.HorizLn DI
GETPORT WINSP.CPU1
PUSH AF
SETPORT WINSP.CPU1,0x50
LD A,IXL
SETPORT WINSP.Y_PORT,,0
LD A,B
OR A
JR Z,.HorLn1
ACCEL ACCELCMD.SET_BUFFER
LD A,0x00
ACCEL ACCELCMD.FILL
LD (HL),E
ACCEL ACCELCMD.OFF
INC H
.HorLn1 LD A,C
LD (.TmpLen8),A
ACCEL ACCELCMD.SET_BUFFER
LD A,0x00
.TmpLen8 EQU $-1
ACCEL ACCELCMD.FILL
LD (HL),E
ACCEL ACCELCMD.OFF
EI
POP AF
SETPORT WINSP.CPU1,,0
RET
;[]===========================================================[]
PutVertLine LD HL,(MakeWindow.PositX)
SET 6,H
LD C,(IY+0x00)
INC IY
LD B,(IY+0x00)
INC IY
SRL B
RR C
ADD HL,BC
LD C,(IY+0x00)
INC IY
INC IY
LD A,(MakeWindow.PositY)
ADD A,C
LD IXL,A
LD A,(IY+0x00)
INC IY
INC IY
LD (.TmpLen9),A
GETPORT WINSP.CPU1
PUSH AF
SETPORT WINSP.CPU1,0x50
DI
LD DE,(COLORP.BLACKGRAY + COLORI.BLACKGRAY) << 8 + COLORP.WHITE + COLORI.WHITE;0x77FF
LD A,IXL
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.SET_BUFFER
LD A,0x00
.TmpLen9 EQU $-1
ACCEL ACCELCMD.FILL_VERT
LD (HL),D
ACCEL ACCELCMD.OFF
INC HL
LD A,IXL
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.FILL_VERT
LD (HL),E
ACCEL ACCELCMD.OFF
EI
POP AF
SETPORT WINSP.CPU1,,0
RET
;[]===========================================================[]
PutSBleft LD HL,SBleft
JR PutSButton
PutSBright LD HL,SBright
JR PutSButton
PutSBup LD HL,SBup
JR PutSButton
PutSBdown LD HL,SBdown
PutSButton EX DE,HL
LD HL,(MakeWindow.PositX)
SET 6,H
LD C,(IY+0x00)
INC IY
LD B,(IY+0x00)
INC IY
SRL B
RR C
ADD HL,BC
EX DE,HL
LD C,(IY+0x00)
INC IY
INC IY
LD A,(MakeWindow.PositY)
ADD A,C
LD C,A
GETPORT WINSP.CPU1
PUSH AF
SETPORT WINSP.CPU1,0x50
DI
ACCEL ACCELCMD.SET_BUFFER
LD A,0x08
ACCEL ACCELCMD.OFF
LD B,0x08
PutSBlp PUSH BC
LD A,C
SETPORT WINSP.Y_PORT,,0
ACCEL ACCELCMD.COPY
LD A,(HL)
LD (DE),A
ACCEL ACCELCMD.OFF
LD BC,0x0008
ADD HL,BC
POP BC
INC C
DJNZ PutSBlp
EI
POP AF
SETPORT WINSP.CPU1,,0
RET
; á¯à ©â¨ª ¤«ï áªà®««¡ à  "áâ५ª  ¢«¥¢®"
SBleft
; DEFB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x77
; DEFB 0xFF,0x88,0x88,0x88,0x80,0x00,0x88,0x77
; DEFB 0xFF,0x88,0x88,0x80,0x00,0x00,0x88,0x77
; DEFB 0xFF,0x88,0x80,0x00,0x00,0x08,0x88,0x77
; DEFB 0xFF,0x88,0x80,0x00,0x00,0x08,0x88,0x77
; DEFB 0xFF,0x88,0x88,0x00,0x88,0x88,0x88,0x77
; DEFB 0xFF,0x88,0x88,0x80,0x88,0x88,0x88,0x77
; DEFB 0xFF,0x77,0x77,0x77,0x77,0x77,0x77,0x77
DB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x77 ; 0
DB 0xFF,0x88,0x88,0x88,0x80,0x00,0x88,0x77 ; 1
DB 0xFF,0x88,0x88,0x80,0x00,0x08,0x88,0x77 ; 2
DB 0xFF,0x88,0x80,0x00,0x00,0x88,0x88,0x77 ; 3
DB 0xFF,0x88,0x80,0x00,0x00,0x88,0x88,0x77 ; 4
DB 0xFF,0x88,0x88,0x80,0x00,0x08,0x88,0x77 ; 5
DB 0xFF,0x88,0x88,0x88,0x80,0x00,0x88,0x77 ; 6
DB 0xFF,0x77,0x77,0x77,0x77,0x77,0x77,0x77 ; 7
; á¯à ©â¨ª ¤«ï áªà®««¡ à  "áâ५ª  ¢¯à ¢®"
SBright
; DEFB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x77
; DEFB 0xFF,0x88,0x88,0x08,0x88,0x88,0x88,0x77
; DEFB 0xFF,0x88,0x88,0x00,0x88,0x88,0x88,0x77
; DEFB 0xFF,0x88,0x88,0x00,0x08,0x88,0x88,0x77
; DEFB 0xFF,0x88,0x88,0x00,0x08,0x88,0x88,0x77
; DEFB 0xFF,0x88,0x88,0x00,0x88,0x88,0x88,0x77
; DEFB 0xFF,0x88,0x88,0x08,0x88,0x88,0x88,0x77
; DEFB 0xFF,0x77,0x77,0x77,0x77,0x77,0x77,0x77
DB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF ; 0
DB 0xFF,0x88,0x00,0x08,0x88,0x88,0x88,0x77 ; 1
DB 0xFF,0x88,0x80,0x00,0x08,0x88,0x88,0x77 ; 2
DB 0xFF,0x88,0x88,0x00,0x00,0x08,0x88,0x77 ; 3
DB 0xFF,0x88,0x88,0x00,0x00,0x08,0x88,0x77 ; 4
DB 0xFF,0x88,0x80,0x00,0x08,0x88,0x88,0x77 ; 5
DB 0xFF,0x88,0x00,0x08,0x88,0x88,0x88,0x77 ; 6
DB 0xFF,0x77,0x77,0x77,0x77,0x77,0x77,0x77 ; 7
; á¯à ©â¨ª ¤«ï áªà®««¡ à  "áâ५ª  ¢¢¥àå"
SBup
; DEFB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x77
; DEFB 0xFF,0x88,0x88,0x88,0x88,0x88,0x88,0x77
; DEFB 0xFF,0x88,0x88,0x80,0x08,0x88,0x88,0x77
; DEFB 0xFF,0x88,0x88,0x00,0x00,0x88,0x88,0x77
; DEFB 0xFF,0x88,0x00,0x00,0x00,0x00,0x88,0x77
; DEFB 0xFF,0x88,0x88,0x88,0x88,0x88,0x88,0x77
; DEFB 0xFF,0x88,0x88,0x88,0x88,0x88,0x88,0x77
; DEFB 0xFF,0x77,0x77,0x77,0x77,0x77,0x77,0x77
DB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF ; 0
DB 0xFF,0x88,0x88,0x88,0x88,0x88,0x88,0x77 ; 1
DB 0xFF,0x88,0x88,0x80,0x08,0x88,0x88,0x77 ; 2
DB 0xFF,0x88,0x88,0x00,0x00,0x88,0x88,0x77 ; 3
DB 0xFF,0x88,0x80,0x00,0x00,0x08,0x88,0x77 ; 4
DB 0xFF,0x88,0x00,0x08,0x80,0x00,0x88,0x77 ; 5
DB 0xFF,0x88,0x00,0x88,0x88,0x00,0x88,0x77 ; 6
DB 0xFF,0x77,0x77,0x77,0x77,0x77,0x77,0x77 ; 7
; á¯à ©â¨ª ¤«ï áªà®««¡ à  "áâ५ª  ¢­¨§"
SBdown
; DEFB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x77
; DEFB 0xFF,0x88,0x88,0x88,0x88,0x88,0x88,0x77
; DEFB 0xFF,0x88,0x88,0x88,0x88,0x88,0x88,0x77
; DEFB 0xFF,0x88,0x00,0x00,0x00,0x00,0x88,0x77
; DEFB 0xFF,0x88,0x88,0x00,0x00,0x88,0x88,0x77
; DEFB 0xFF,0x88,0x88,0x80,0x08,0x88,0x88,0x77
; DEFB 0xFF,0x88,0x88,0x88,0x88,0x88,0x88,0x77
; DEFB 0xFF,0x77,0x77,0x77,0x77,0x77,0x77,0x77
DB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF ; 0
DB 0xFF,0x88,0x88,0x88,0x88,0x88,0x88,0x77 ; 1
DB 0xFF,0x88,0x00,0x88,0x88,0x00,0x88,0x77 ; 2
DB 0xFF,0x88,0x00,0x08,0x80,0x00,0x88,0x77 ; 3
DB 0xFF,0x88,0x80,0x00,0x00,0x08,0x88,0x77 ; 4
DB 0xFF,0x88,0x88,0x00,0x00,0x88,0x88,0x77 ; 5
DB 0xFF,0x88,0x88,0x80,0x08,0x88,0x88,0x77 ; 6
DB 0xFF,0x77,0x77,0x77,0x77,0x77,0x77,0x77 ; 7
;[]----------------------------------------------------------[]
; <20>à®æ¥¤ãà  ¨­¢¥àâ¨à®¢ ­¨ï ¯àאַ㣮«ì­®© ¯«®áª®áâ¨
; <20>  ¢å®¤:
; HL - X ª®®à¤¨­ â 
; BC - Y ª®®à¤¨­ â 
; HX - ¤«¨­  Y
; LX - ¤«¨­  X
; D - ⥪ã騩 梥â
; E - ­ã¦­ë© 梥â
InvertRectan PUSH IY
GETPORT WINSP.Y_PORT ; ‘®å࠭塞 Y ¯®àâ
PUSH AF
GETPORT WINSP.CPU1
PUSH AF
SETPORT WINSP.CPU1,0x50
LD IYL,C
LD C,IXH
LD B,IXL
SRL H
RR L
SET 6,H
LD IXL,E
LD IXH,D
LD A,D
AND 0xF0
LD IYH,A
RRCA
RRCA
RRCA
RRCA
OR IYH
LD D,A
AND 0x0F
LD IYH,A
LD E,IXH
LD A,E
AND 0x0F
RLCA
RLCA
RLCA
RLCA
OR IYH
LD IXH,A
EXX
LD A,IXL
AND 0xF0
LD IYH,A
RRCA
RRCA
RRCA
RRCA
OR IYH
LD D,A
AND 0x0F
LD IYH,A
LD E,IXL
LD A,E
AND 0x0F
RLCA
RLCA
RLCA
RLCA
OR IYH
LD B,A
AND 0xF0
LD IYH,A
RRCA
RRCA
RRCA
RRCA
OR IYH
LD C,A
EXX
.PrnInvLp LD A,IYL
SETPORT WINSP.Y_PORT,,0
PUSH HL
EXX
POP HL
EXX
PUSH HL
PUSH BC
CALL InvLnLp
POP BC
POP HL
INC IYL
DEC C
JR NZ,.PrnInvLp
POP AF
SETPORT WINSP.CPU1,,0
POP AF
SETPORT WINSP.Y_PORT,,0
POP IY
RET
InvLnLp LD A,(HL)
INC HL
CP D
JR NZ,CmpInv2
EXX
LD (HL),D
INC HL
EXX
DJNZ InvLnLp
RET
CmpInv2 CP E
JR NZ,CmpInv3
EXX
LD (HL),E
INC HL
EXX
DJNZ InvLnLp
RET
CmpInv3 CP IXH
JR NZ,SetInv4
EXX
LD (HL),B
INC HL
EXX
DJNZ InvLnLp
RET
SetInv4 EXX
LD (HL),C
INC HL
EXX
DJNZ InvLnLp
RET