FFORMAT/DIALOG.ASM
2025-05-02 04:08:17 +10:00

1775 lines
31 KiB
NASM
Executable File
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.

; Œ¥âª¨ "@@@" - § ª®¬¬¥­â. ª®¤, çâ®¡ë ­¥ ®âà ¡ â뢠« "Enter" ¤«ï ¢ë室  ¨§
; ListBox- .
; Œ¥âª¨ "###" - ®âà ¡®âª  "Enter" ª ª Tab
;
; ‚­ãâ७­¨¥ á®®¡é¥­¨ï
evNothing: EQU 0 ; ­¥â ᮡë⨩
evMouseFr: EQU 1 ; ­ ¦ â  ª­®¯ª  ã ¬ëè¨
evKeyboard: EQU 2 ; ­ ¦ â  ª« ¢¨è 
evCombKey: EQU 3 ; ­ ¦ â  ª®¬¡¨­ æ¨ï ª« ¢¨è
evCommand: EQU 4 ; ¯¥à¥¤ ç  ª®¬ ­¤ë
evMessage: EQU 5 ; ¯¥à¥¤ ç  á®®¡é¥­¨ï
TextLine: EQU 1
InputLine: EQU 2
ClRadioBut: EQU 3
ClCheckBut: EQU 4
ListBox: EQU 5
Button: EQU 9
Frame: EQU 10
cmOkey: EQU 36h
cmCancel: EQU 37h
cmOptions: EQU 38h
cmSave: EQU 39h
CTlabTD: EQU 47h
CTkeypadD: EQU 4Ah
CTcancD: EQU 36h
CTokD: EQU 37h
CThelpD: EQU 35h
CTbox1D: EQU 4Bh
CTbox2D: EQU 4Ch
msHiddInvr: EQU 83h
msNewElem: EQU 84h ; ­¥ ®âá«¥¦¨¢ ¥âáï
; ­ áâநâì ªãàá®à ç¥àâ®çª®©
;call SetCursor
; ®ç¨áâ¨âì íªà ­
CALL ClearDesk
; ãáâ. ¬ëèªã ¢ 業âà íªà ­ 
LD HL,312 ; X ª®®à¤¨­ â  (0-639)
LD DE,120 ; Y ª®®à¤¨­ â  (0-255)
LD C,4
RST ToDSS.Mouse
; á¡à®á¨âì 㪠§ â¥«¨ ListBox`®¢
LD HL,0
LD (CurElem0),HL
LD (CurElem1),HL
;!FIXIT CURSOR ¯¥à¥¤¥« âì ­  ¤®á
MainLOOP: ; ¯®¤¬¥­¨âì ¢¥ªâ®à ­  ᢮© (¤«ï ¬¨£ ­¨ï ªãàá®à )
; ld hl,(0039h) ;rdlow ok
; ld (vect),hl
; ld hl,rst38
; ld (0039h),hl
;
Loop1: CALL SetList ; ­ áâநâì ᯨ᮪ ¤¨áª®¢®¤®¢
Loop2: LD HL,WinMain1
CALL DialogW
LD A,(HL)
CP cmCancel
;jp z,Exit1
JP Z,Exit
CP cmOptions
JR NZ,.contin
;
LD HL,WinOptions
CALL DialogW
LD A,(HL)
CP cmOkey
JR Z,Loop1
CP cmSave
JR NZ,Loop2
CALL SaveInit ; á®åà. ­ áâனª¨ ä«®¯®¢®¤®¢
JR Loop1
;
.contin: ; ¢®ááâ. ¢¥ªâ®à
; ld hl,(vect) ;!FIXIT CURSOR ¯¥à¥¤¥« âì ªãàá®à ­  ¤®á ¨ ã¡à âì ¯¥à¥å¢ âì ¯à¥à뢠­¨©
; ld (0039h),hl
CALL SetDrive ; ãáâ. § ¤ ­­ë© ä®à¬ â ä«®¯®¢®¤®¢
LD A,(CurElem0)
LD (DISK),A ; ¤«ï ¯/¯ ä®à¬ â.
ADD A,"A"
LD (DskName),A ; ¡ãª¢  ¤¨áª 
LD (LDISK),A
; ¡«®ª ­ áâனª¨ ¯®¤ ¢ë¡à ­­ë© ä®à¬ â
CALL Setup_Map ; ­ áâனª  è¨à¨­ë ª àâë (¨ ¤à.)
CALL FSETUP ; ­ áâà. ¯à®£à ¬¬ã ­  ä®à¬ â ¤¨áª¥âë
;--
;--
Loop3: CALL Clear1
LD HL,InsDiskette ; "‚áâ ¢ì⥠¤¨áª ¢ ¤¨áª®¢®¤"
CALL DialogW ; ®âª. ®ª­® § ¯à®á 
LD A,(HL)
CP cmCancel
JR Z,MainLOOP ; ­ § ¤ ¢ ­ ç. ®ª­® fformat- 
;
LD A,(ColDialWn)
PUSH AF
LD A,37h ; 梥⠮ª­  ä®à¬ â¨à®¢ ­¨ï
LD (ColDialWn),A
LD HL,WinMain2 ; ®ª­® ¯à®æ¥áá  ä®à¬ â¨à®¢ ­¨ï
CALL PutDialWn
POP AF
LD (ColDialWn),A
CALL FFORMAT
JR Loop3
;!FIXIT CURSOR ¯¥à¥¤¥« âì ªãàá®à ­  ¤®á ¨ ã¡à âì ¯¥à¥å¢ âì ¯à¥à뢠­¨©
;Exit1: ; ¢®ááâ. ¢¥ªâ®à
; ld hl,(vect)
; ld (0039h),hl
;jp Exit
; <20> áâநâì ᯨ᮪ ¤¨áª®¢®¤®¢ ᮣ« á­® § ¤ ­­ë¬ ®¯æ¨ï¬
SetList: LD A," "
LD (DiskB),A ; ­ ç «® áâப¨ ¤¨áª  "B:"
LD C,0 ; ¤¨áª "A:"
LD HL,DriveA ; 3 ï祩ª¨ ®¯æ¨© ¤¨áª 
LD DE,DiskA+2 ; áâப  ­ §­ ç¥­¨ï
CALL SetDiskList
LD C,1 ; ¤¨áª "B:"
LD HL,DriveB ; 3 ï祩ª¨ ®¯æ¨© ¤¨áª 
LD DE,DiskB+2 ; áâப  ­ §­ ç¥­¨ï
; <20> áâனª  áâப¨ ¤¨áª®¢®¤  ᮣ« á­® § ¤ ­­ë¬ ®¯æ¨ï¬
; ¢å: C=¤¨áª (0=A,1=B)
; HL= ¤à¥á 3-å ï祥ª ®¯æ¨© ¤¨áª 
; DE= ¤à¥á áâப¨ ­ §­ ç¥­¨ï
SetDiskList: XOR A
CP (HL)
JR NZ,.loc1 ; 1.44Mb 3.5"
INC HL
CP (HL)
JR NZ,.loc2 ; 720kB 5.25"
; no device "B:"
LD (DiskB),A ; á⮯-¡ ©â ¯¥à¥¤ áâப®©
RET
.loc1: LD HL,.loc4
JR .loc3
.loc2: LD HL,.loc5
.loc3: LD A,"A"
ADD A,C
.loc6: LD (HL),A
LD BC,10
LDIR
RET
.loc4: DB "X: 1.44 Mb"
.loc5: DB "X: 720 kB"
;
DialogW: PUSH HL
; ®ç¨áâ¨âì ¡ãä¥à ª« ¢ë
LD BC,3135h
RST ToDSS
POP HL
CALL Dialog
LD HL,what
LD A,(HL)
INC HL
RET
;Žá­®¢­®© ®¡à ¡®â稪 ¤¨ «®£®¢®£® ®ª­ 
;<3B>  ¢å®¤: HL-€¤à¥á ®¯¨á â¥«ï ¤¨ «®£®¢®£® ®ª­ 
Dialog: CALL PutDialWn
;
DialogLp: CALL handleEvent ;—¨â ¥¬ ᮡë⨥
LD IX,DialTab+5 ;’ ¡«¨æ  ®¡'¥ªâ®¢
DialWlp: LD HL,DialWex
PUSH HL
LD A,(ix+1) ;’¥ªã騩 ®¡'¥ªâ
RES 7,A
CP InputLine
JP Z,EInpLine
CP ClRadioBut
JP Z,EClasterB
CP ClCheckBut
JP Z,EClasterB
CP ListBox
JP Z,EListBox
CP Button
JP Z,EButton
;
POP HL
DialWex: LD C,(ix+0)
LD B,0
ADD IX,BC ;‘«¥¤.®¡ê¥ªâ
BIT 7,(ix+0)
JR Z,DialWlp ;7-© ¡¨â - ª®­¥æ ®¡ê¥ªâ®¢ (横« ­¥ âண âì)
;
LD HL,what ; ¯®«¥ ᮡë⨩
LD DE,DialogC
PUSH DE
LD A,(HL) ; +0
INC HL
CP evKeyboard ; ᮡë⨥ ª« ¢¨ âãàë
JR Z,TstKeyD ; ¯à®¢¥àª  ­  Enter/Esc
CP evCombKey
JR Z,TstCombKeyD ; â¥áâ ­  F10
CP evCommand
JR Z,TstCmnD ; ¯à®¢¥àª  ª®¬ ­¤ ®â ¬ë誨, ª« ¢ë
;
POP DE
DialogC: JR DialogLp
TstCombKeyD: INC HL
LD A,(HL) ;+2
CP 44h ; F10
JR Z,CancelD
RET
TstKeyD: LD A,(HL) ;+1
CP 1Bh ; Esc
JR Z,CancelD
;@@@ cp 0Dh ; Enter
; jr z,OkeyD
RET
;
TstCmnD: LD A,(HL)
CP cmCancel
JR Z,CancelD
JR OkeyDn
;@@@ Ok
;OkeyD: ld hl,what
; ld (hl),evCommand
; inc hl
; ld (hl),cmOkey
OkeyDn: LD IX,DialTab+5
OkeyLp: LD DE,OkeyN ; Find clasters & get data
PUSH DE
LD A,(ix+1) ; ª ª®© ⥪. ®¡ê¥ªâ ?
RES 7,A
CP ClRadioBut
JP Z,GetClDt
CP ClCheckBut
JP Z,GetClDt
CP ListBox
JP Z,GetLstBox
POP DE
OkeyN: LD C,(ix+0)
LD B,0
ADD IX,BC ;Next object
BIT 7,(ix+0)
JR Z,OkeyLp ;NZ-End object table
DialogE: CALL ClsDial ; § ªàëâì ®ª­® ¤¨ «®£ 
POP DE ; ¢ë室 ¨§ 横«  (¢ë஢­¨âì á⥪)
JP GetFire
; Cancel
CancelD: LD HL,what
LD (HL),evCommand
INC HL
LD (HL),cmCancel
JR DialogE
PutDial: PUSH IX
LD A,(IX+2) ;with shadow
ADD A,2
LD L,A
LD A,(IX+3)
INC A
LD H,A ;Wind len
LD E,(IX+0)
LD D,(IX+1)
LD IX,WinBoxBuff+6800 ;Address Box buffers
EXX
CALL GetMousInfo
EXX
DI
kk2: LD A,(hPages.Win2) ;Page buffer
LD B,A
XOR A
LD C,BIOS.WIN_RESTORE ; ¨§ ¡ãä¥à  ¢ ⥪áâ. ®ª­®
RST ToBIOS
EI
CALL GetMousInfo
LD C,1 ; ¢ë¢¥á⨠ªãàá®à ¬ë誨
RST ToDSS.Mouse
POP IX
RET
; Close Dialog window and restore box place
ClsDial: CALL ResILCr ; á¡à®á¨âì ªãàá®à
LD IX,DialData
LD A,(IX+2) ;with shadow
ADD A,2
LD L,A
LD A,(IX+3)
INC A
LD H,A ;Wind len
LD E,(IX+0)
LD D,(IX+1)
EXX
CALL GetMousInfo
EXX
DI
LD IX,WinBoxBuff ;Address Box buffers
kk3: LD A,(hPages.Win2) ;Page buffer
LD B,A
XOR A
LD C,BIOS.WIN_RESTORE ; ¨§ ¡ãä¥à  ¢ ⥪áâ. ®ª­®
RST ToBIOS
EI
CALL GetMousInfo
LD C,1 ; ¢ë¢¥á⨠ªãàá®à ¬ë誨
RST ToDSS.Mouse
RET
;
; <20>à®æ¥¤ãà  à¨á®¢ ­¨ï ¨ ¯¥ç â¨ ¤¨ «®£®¢®£® ®ª­ 
; <20>  ¢å®¤: HL - €¤à¥á ®¯¨á â¥«ï
PutDialWn:
PUSH IY
LD IY,DialTab
LD IX,DialData
IN A,(Page3)
PUSH AF
kk4: LD A,(hPages.Win2) ;Page buffer
OUT (Page3),A
LD A,(HL) ;X position
LD (IX+0),A ;Xpos
INC HL
LD A,(HL) ;Y position
LD (IX+1),A ;Ypos
INC HL
LD A,(HL) ;Len X
LD (IX+2),A ;Xlen
INC HL
LD A,(HL) ;Len Y
LD (IX+3),A ;Ylen
INC HL
LD DE,DialName
.loc1: LDI
LD A,(HL)
OR A
JR NZ,.loc1
LDI
PUSH HL
CALL SavDial ;Save dialog place
CALL PutDialRc
LD HL,FramDSl
CALL PutDialFr ;Put Dialog frame & name
CALL PutDialSh
LD A,(IX+0) ;move window
LD (IY+0),A ; +0
INC IY
ADD A,(IX+2)
LD (IY+0),A ; +1
INC IY
LD A,(IX+1)
LD (IY+0),A ; +2
INC IY
LD A,(IX+0) ; ª®®à¤¨­ âë |þ| (§ ªà.®ª­®)
LD (IY+0),A ; +3
INC IY
LD A,(IX+1)
LD (IY+0),A ; +4
INC IY
POP HL
DialCyc: LD A,(HL) ;Next get includes objects
INC HL
BIT 7,A
JR NZ,DialExt ;End dialog label
LD DE,DialCyc
PUSH DE
CP TextLine
JP Z,PTextLn ;Put text line
CP InputLine
JP Z,PInpLine ;Put object input line
CP ClRadioBut
JP Z,PClRadioB ;Put claster radio buttons
CP ClCheckBut
JP Z,PClCheckB ;Put claster check buttons
CP ListBox
JP Z,PListBox ;Put List box
CP Button
JP Z,PButton ; ¢áâ ¢¨âì ¡ãâ®­
CP Frame
JP Z,PFrame
;
POP DE
DialExt: LD (IY+0),80h ;+5 End dialog table
POP AF
OUT (Page3),A
CALL PutDial ;Put dialog window
POP IY
; Select last element
SelLast: LD HL,DialTab+5
LD DE,ReCompBuff
LD B,0
LD C,(HL)
LD A,C
LDIR ; § ¯®«­. ¡ãä¥à  DialTab+5
LD C,A
DEC HL
LD E,L
LD D,H
OR A
SBC HL,BC
PUSH HL
LD BC,DialTab+4
OR A
SBC HL,BC
LD C,L
LD B,H
POP HL
LD A,B
OR C
JR Z,$+4
LDDR
LD HL,ReCompBuff
LD DE,DialTab+5
LD C,(HL)
LDIR
SUB A
LD (CIflag+1),A
LD IX,DialTab+5
LD HL,DIALe
PUSH HL
LD A,(IX+1)
SET 7,(IX+1)
CP InputLine
JP Z,InpLineI
CP ClRadioBut
JP Z,ClastI
CP ClCheckBut
JP Z,ClastI
CP ListBox
JP Z,PLstBoxI
CP Button
JR Z,ButtonI
POP HL
DIALe: LD C,1 ; ¢ë¢¥á⨠ªãàá®à ¬ë誨
RST ToDSS.Mouse
RET
ButtonI: LD E,(IX+2) ;Xo
LD D,(IX+4) ;Y
LD A,(IX+3) ;Xi
SUB E
LD C,A
JP SetDialInv
; Object ~Text line~
; Input: HL-label
; Format mouse table: None
;
PTextLn: LD C,(HL) ; X pos
INC HL
LD B,(HL) ; Y pos
INC HL
CALL GetPutA
LD A,(HL) ; 梥â áâப¨ ®¡ê¥ªâ  TextLine
EX AF,AF'
INC HL
.loc1: LDI
EX AF,AF'
LD (DE),A
EX AF,AF'
INC DE
LD A,(HL)
CP 0FFh
JR Z,.loc2
OR A
JR NZ,.loc1
INC HL
RET
.loc2: INC HL
LD A,(HL)
OR A
JR NZ,.loc2
INC HL
RET
; ަ¨¤ ­¨¥ ᮡë⨩
handleEvent: LD IX,what
handle1: LD (ix+0),evNothing ; what = evNoting
CALL ExmFire ; ¯®«ãç¨âì ⥪áâ. ª®®à¤. ¬ë誨
OR A ; ¡ãâ®­(ë) ¬ë誨 ­ ¦ â ?
JR NZ,ButtPrs ; ¤ 
LD C,31h ; ®¯à®á ª« ¢ë ¡¥§ ®¦¨¤ ­¨ï
RST ToDSS
RET Z ; ¡ãä¥à ª« ¢ë ¯ãáâ
LD A,E
OR A
JR Z,NewComb ; ªãàá. ª« ¢¨è¨ (+Home,End,PgUp,PgDwn)
BIT 7,D
JR NZ,NewCmb ; ª®¬¡¨­ æ¨¨ á Shift,Ctrl,Alt
LD (ix+0),evKeyboard
LD (ix+1),E ; ª®¤ ᨬ¢®« 
LD (ix+2),D ; ª®¤ áâ âãá  ª« ¢ë
RET
; Šãàá®à­ë¥ ª« ¢¨è¨
NewComb: LD (ix+0),evCombKey ; ¯à¨§­ ª ᮡëâ¨ï
LD (ix+1),E ; ¨¤¥â ­®«ì
LD (ix+2),D ; ª®¤ ªãàá.ª« ¢¨è (¨«¨ áâ âãá  ª« ¢ë)
RET
; Š®¬¡¨­ æ¨ï á Shift,Ctrl,Alt
NewCmb: LD (ix+0),evCombKey
LD (ix+1),D ; 7-© ¡¨â, ¯à¨§­ ª ­ ¦ â¨ï Ctrl,Shift,Alt
LD (ix+2),E ; ª®¤ ª« ¢¨è¨
RET
; <20> ¦ â¨¥ ¡ãâ®­  ¬ë誨
ButtPrs: BIT 1,A
RET NZ ; ­ ¦ â  ¯à ¢ ï ª« ¢¨è 
LD (ix+0),evMouseFr ; ¯à¨§­ ª ᮡëâ¨ï
LD (ix+1),L ; X Tcoord
LD (ix+2),H ; Y Tcoord
RET
what: DS 8 ; ¯®«¥ ᮡë⨩
;<3B>à®æ¥¤ãà  ¯¥à¥¤ ç¨ á®®¡é¥­¨© ¯® ®¡ê¥ªâ ¬ á ⥪ã饣® ®¡ê¥ªâ 
TransMessUp:
PUSH IY
PUSH IX
JR TransEx
;<3B>à®æ¥¤ãà  ¯¥à¥¤ ç¨ á®®¡é¥­¨© ¯® ®¡ê¥ªâ ¬ á ¯¥à¢®£® ®¡ê¥ªâ 
TransMessage:
PUSH IY
PUSH IX
LD IX,DialTab+5 ;’ ¡«¨æ  ®¡ê¥ªâ®¢
TransLp: LD HL,TransEx
PUSH HL
LD A,(IX+1) ;’¥ªã騩 ®¡ê¥ªâ
AND 7Fh ;7-© ¡¨â - ®¡ê¥ªâ ¢ë¤¥«¥­­ë©
CP InputLine
JP Z,EInpLine
CP ClRadioBut
JP Z,EClasterB
CP ClCheckBut
JP Z,EClasterB
CP ListBox
JP Z,EListBox
CP Button
JP Z,EButton
;
POP HL
TransEx: LD C,(IX+0)
LD B,0
ADD IX,BC ;‘«¥¤. ®¡ê¥ªâ
BIT 7,(IX+0)
JR Z,TransLp ;7-© ¡¨â - ª®­¥æ ®¡ê¥ªâ®¢
POP IX
POP IY
LD HL,what
LD A,(HL)
CP evMessage
RET NZ ;Test command
LD (HL),evNothing
RET
; Object ~Button~
; Input: HL-label
; Format mouse table:
; +0 - Object ~Claster check buttons"
; +1 - Xo position object
; +2 - Xi position object
; +3 - Y position object
; +4 - genered command
; +5 - Hot key
; +6 - Context
;
PButton: PUSH IY
INC IY
LD (IY+0),A ; +0 object
LD A,(HL) ; X pos
INC HL
LD C,A
ADD A,(IX+0) ; Pos X from begin screen
LD (IY+1),A ; +1 Xo
LD A,(HL) ; Y pos
INC HL
LD B,A
ADD A,(IX+1) ; Pos Y from begin screen
LD (IY+3),A ; +3 Yo
PUSH BC ; Save position
CALL GetPutA
EX DE,HL
LD C,ColButton
;LD C,A
LD B,0
LD (IY+5),B
LD A,(DE)
PButLp1: INC DE
CP '~'
JR NZ,PButN0
LD C,ColDhotkey
;LD C,A
LD A,(DE)
INC DE
LD (HL),A
INC HL
RES 5,A
LD (IY+5),A ; § ¤ âì Hot key
LD A,ColButton
AND 0F0h
OR C
LD (HL),A
INC HL
INC DE
LD C,ColButton ; 梥⠡ãâ®­  ¯®á«¥ hot-¡ãª¢ë
;LD C,A
INC B
LD A,(DE)
INC DE
PButN0: LD (HL),A
INC HL
LD (HL),C
INC HL
INC B
LD A,(DE)
OR A
JR NZ,PButLp1
INC DE
LD A,(IY+1)
ADD A,B
LD (IY+2),A
LD A,(ColDialWn) ;--
AND 0F0h
LD (HL),"Ü"
INC HL ;
LD (HL),A ;
EX DE,HL
POP BC ; Reset position
INC B
CALL GetPutA
INC DE
INC DE
LD A,(IY+2)
SUB (IY+1)
LD B,A
LD A,(ColDialWn) ;--
AND 0F0h ;
LD C,A ;
pbtn2: LD A,"ß"
LD (DE),A
INC DE
LD A,C ;
LD (DE),A ;
INC DE
DJNZ pbtn2
LD A,(HL)
INC HL
LD (IY+4),A
LD A,(HL)
INC HL
LD (IY+6),A ; Context
LD BC,7
ADD IY,BC
PUSH IY
EXX
POP HL
POP DE
OR A
SBC HL,DE
LD A,L
LD (DE),A
EXX
RET
;[]===========================================================[]
; Event button
; IX,DialTab+5
;
EButton: LD HL,what ; ᯨ᮪ ᮡë⨩
LD A,(HL)
INC HL
CP evMouseFr
JR Z,EBmouse
CP evKeyboard
JR Z,EBkeys
CP evCombKey
RET NZ
BIT 7,(IX+1)
RET NZ ; ¢ë©â¨ - ®¡ê¥ªâ ¢ë¤¥«¥­
PUSH IX
LD E,(IX+0)
LD D,0
ADD IX,DE
BIT 7,(IX+0)
POP IX
RET Z
INC HL
LD A,(HL) ;+1
CP 9 ; Shift+Tab
RET NZ
XOR A
LD (_Push+1),A ; Push flag
JP SetButt ; ¢ë¤¥«¨âì ¯à¥¤. ®¡ê¥ªâ
; ‘®¡ë⨥ ®â ¬ë誨,
; ¯à®¢¥àª  ª®®à¤¨­ â
EBmouse: LD E,(HL) ;Xcoord
INC HL
LD D,(HL) ;Ycoord
LD A,D
CP (IX+4) ;Y pos button
RET NZ ;if <> exit
LD A,E
BIT 7,(IX+2)
JR NZ,$+6
CP (IX+2) ;Xo pos
RET C ;<
BIT 7,(IX+3)
RET NZ
CP (IX+3) ;Xi pos
RET NC ;>
SUB A
LD (Kbutt+1),A
INC A
LD (_Push+1),A ;Push flag
BIT 7,(IX+1)
JR NZ,_Push
JR SetButt
; ‘®¡ë⨥ - ­ ¦ â  ª« ¢¨è 
EBkeys: XOR A
LD (_Push+1),A ; Push flag
LD A,(HL)
CP " "
JR C,ebkey1
CP "A"
RET C
ebkey1: INC HL ; hl,what+2
BIT 7,(HL) ; ­ ¦ â  ª« ¢¨è  á Ctrl,Shift,Alt ?
RET NZ ; ¤ , ¢ë©â¨
RES 5,A ; a..z -> A..Z
BIT 7,(IX+1) ; ¢ë¡à ­  ¨«¨ ­¥ ¢ë¡à ­ 
JR NZ,EBkeyN
CP 9 ; Tab
JR Z,SetButt ; ¢ë¤¥«¨âì á«¥¤. ®¡ê¥ªâ
CP 0Dh ; ###
JR Z,SetButt
JR EBkeyN1
;
EBkeyN: CP 0Dh
JR Z,EBent
EBkeyN1: CP (IX+6) ; Hot key
RET NZ
EBent: LD A,1
LD (_Push+1),A
LD (Kbutt+1),A
SetButt: CALL MoveObj ; Select Button
CALL ResDialInv ; Reset previos invert
LD IX,DialTab+5
LD E,(IX+2) ; Xo
LD D,(IX+4) ; Y
LD A,(IX+3) ; Xi
SUB E
LD C,A
CALL SetDialInv
_Push: LD A,0
OR A
JP Z,BTexit
CALL PushBut ; Push/pop ¡ãâ®­
JP C,BTexit
LD HL,what
LD (HL),evCommand
INC HL
LD A,(IX+5)
LD (HL),A
RET
;Button exit
BTexit: LD HL,what
LD (HL),evNothing
RET
; <20> ¦ âì/®â¦ âì ¡ãâ®­
PushBut: IN A,(Page3)
PUSH AF
kk5: LD A,(hPages.Win2)
OUT (Page3),A
PUSH IX
LD E,(IX+2) ;Xo
LD D,(IX+4) ;Y
LD A,(IX+3) ;Xi
SUB E
INC A ;Xi-Xo+1=Full len with shadow
LD L,A
LD H,1 ;Ylen=2 with shadow
LD (BTlen+1),HL ;Save len
LD (BTpos+1),DE ;Save pos
LD A,L
PUSH AF ;Save len
LD IX,DialData
LD A,E
SUB (IX+0)
LD C,A
LD A,D
SUB (IX+1)
LD B,A
PUSH BC
CALL GetPutA
LD C,L
SLA C
LD B,0
LD HL,ReCompBuff
EX DE,HL
LDIR
EX DE,HL
POP BC
INC B
CALL GetPutA
POP AF
LD C,A
SLA C
LD B,0
EX DE,HL
LDIR
PUSH AF
DEC A ;len without shadow
ADD A,A
LD C,A
LD B,0
LD HL,ReCompBuff
LD DE,ReCompBuff+160
LD A,20h
LD (DE),A ;shift on one pos
INC DE
LD A,(ColDialWn)
LD (DE),A
INC DE
LDIR ;move button
POP AF ;reset len
EX DE,HL
LD B,A
;LD D,20h
LD A,(ColDialWn)
btln: LD (HL),20h;D
INC HL
LD (HL),A ;without down shadow
INC HL
DJNZ btln ;$-4
LD IX,ReCompBuff+160 ;Put button
BTlen: LD HL,0
BTpos: LD DE,0
CALL testbut
JR NC,bt1
DI
IN A,(Page1)
LD B,A
XOR A
LD C,BIOS.WIN_RESTORE
RST ToBIOS
EI
LD IX,ReCompBuff+160 ;Put button
LD HL,(BTlen+1)
LD DE,(BTpos+1)
INC D
LD A,L
ADD A,A
ADD A,XL
LD XL,A
JR NC,$+4
INC XH
CALL testbut
JR NC,bt1
DI
IN A,(Page1)
LD B,A
XOR A
LD C,BIOS.WIN_RESTORE
RST ToBIOS
EI
bt1: POP IX
Kbutt: LD A,0 ; ०¨¬ ¬ë誠/ª« ¢ 
OR A
JR Z,PushLp ; ¬ë誠
LD B,8
HALT
DJNZ $-1
JR PushEx
PushLp: ; ¯à®¢¥àª  ª®®à¤¨­ â ¬ë誨
CALL ExmFire ; ¯®«ãç¨âì §­ ª. ª®®à¤. ¬ë誨
JR Z,PushEx
BIT 0,A ;1,a
JR Z,PushEx ; ­ ¦ â  «¥¢ ï ª« ¢¨è 
LD A,H
CP (IX+4) ; Y pos button
JR NZ,PushEx
LD C,(IX+2) ; Xo pos
LD B,(IX+3) ; Xi pos
INC B
LD A,L
BIT 7,C
JR NZ,$+5
CP C ; Xo pos
JR C,PushEx ; <
BIT 7,B
JR NZ,PushLp
CP B
JR C,PushLp ; >
PushEx: PUSH IX
PUSH HL
LD IX,ReCompBuff ; Put prev button
LD HL,(BTlen+1)
LD DE,(BTpos+1)
CALL testbut
JR NC,bt2
DI
IN A,(Page1)
LD B,A
XOR A
LD C,BIOS.WIN_RESTORE
RST ToBIOS
EI
LD IX,ReCompBuff ;Put button
LD HL,(BTlen+1)
LD DE,(BTpos+1)
INC D
LD A,L
ADD A,A
ADD A,XL
LD XL,A
JR NC,$+4
INC XH
CALL testbut
JR NC,bt2
IN A,(Page1)
LD B,A
XOR A
LD C,BIOS.WIN_RESTORE ; ¨§ ¡ãä¥à  ¢ ®ª­®
DI
RST ToBIOS
EI
bt2: POP HL
POP IX
POP AF
OUT (Page3),A
LD A,(Kbutt+1)
OR A
RET NZ
; ª®®à¤¨­ âë ¬ë誨
LD A,H
CP (IX+4) ;Y pos button
SCF
RET NZ
LD C,(IX+2) ;Xo pos
LD B,(IX+3) ;Xi pos
INC B
LD A,L
BIT 7,C
JR NZ,$+4
CP C ;Xo pos
RET C ;<
BIT 7,B
SCF
RET NZ
CP B ;Xi pos
CCF ;>
RET
;
testbut:
LD A,D
CP 31
RET NC
BIT 7,E
JR Z,bt0
LD A,E
LD E,0
NEG
LD C,A
SUB L
NEG
LD L,A
OR A
RET Z
RET M
LD A,C
ADD A,A
ADD A,XL
LD XL,A
JR NC,bt0
INC XH
bt0: LD A,E
CP 80
RET NC
ADD A,L
CP 80
RET C
LD A,80
SUB E
LD L,A
SCF
RET
; Moving object to first tab pos
; Input: IX-Address object
MoveObj: SET 6,(IX+0) ;Mark object
LD HL,DialTab+5
MoveOlp: BIT 6,(HL) ;Test on mark object
RES 6,(HL) ;Reset mark
RET NZ ;Exit if mark
INC HL
RES 7,(HL) ;Reset select object
DEC HL
LD DE,ReCompBuff ;Move first object in buffer
LD C,(HL) ;Len object label
LD B,0
RES 6,C
LDIR ;Move
PUSH HL
PUSH HL
LD C,(HL) ;-6
RES 6,C
ADD HL,BC ;Search end table
BIT 7,(HL)
JR Z,$-6
POP BC
OR A ;HL-End table,BC-Address 2 obj
SBC HL,BC ;HL-BC=Len table -1 object
LD C,L ;BC=Len table
LD B,H
POP HL
LD DE,DialTab+5 ;Move to begin table
PUSH DE
LD A,B
OR C
JR Z,$+4
LDIR
LD HL,ReCompBuff ;Move from buffer to end table
LD C,(HL) ;object BC=len Object label
RES 6,C
LDIR
POP HL
INC HL
SET 7,(HL) ;Setting object
DEC HL
JR MoveOlp
;[]===========================================================[]
; Setting dialog invert objects
; Input:
; E - X pos
; D - Y pos
; C - X len
SetDialInv:
PUSH IX
LD IX,DialData
IN A,(Page3)
PUSH AF ;á®åà.page4
kk6: LD A,(hPages.Win2)
OUT (Page3),A ;¢ª«.¡ãä¥à
LD L,C
LD H,1
LD (RDlIlen+1),HL ;Save len
LD (RDlIpos+1),DE ;Save pos
LD A,E
SUB (IX+0)
LD C,A
LD A,D
SUB (IX+1)
LD B,A
CALL GetPutA
EX DE,HL
LD (RDlIbuf+2),HL
LD B,E
LD E,ColDialInv
;LD E,A
LD D,ColDhotkey
;LD D,A
SetDin1: INC HL
LD A,(HL)
AND 0Fh
CP D
JR Z,setdn2 ;$+5
LD A,(HL)
;XOR E
AND 0xF0 ;
OR E ;
LD (HL),A
setdn2: INC HL
DJNZ SetDin1
LD IX,(RDlIbuf+2) ;Put Name with invert
LD HL,(RDlIlen+1)
LD DE,(RDlIpos+1)
CALL PutDialLn
POP AF
OUT (Page3),A
POP IX
RET
; Res dialog invert objects
; Input: None
ResDialInv:
PUSH IX
IN A,(Page3)
PUSH AF ;á®åà.page4
kk7: LD A,(hPages.Win2)
OUT (Page3),A ;¢ª«.¡ãä¥à
LD HL,(RDlIbuf+2)
LD A,(RDlIlen+1)
LD B,A
LD E,ColDialInv1
;LD E,A
LD D,ColDhotkey
;LD D,A
ResDin1: INC HL
LD A,(HL)
AND 0Fh
CP D
JR Z,resdn2 ;$+5
LD A,(HL)
;XOR E
AND 0xF0 ;
CP ColButton
JR Z,.loc2
OR E ;
.loc2: LD (HL),A
resdn2: INC HL
DJNZ ResDin1
RDlIbuf: LD IX,0 ;Put Name with invert
RDlIlen: LD HL,0
RDlIpos: LD DE,0
CALL PutDialLn
CIflag: LD A,0 ;1-Was claster invert
OR A
CALL NZ,ResClasInv
CALL ResILCr ; á¡à®á¨âì ªãàá®à ¢ inp.line
POP AF
OUT (Page3),A
POP IX
LD HL,what
LD (HL),evMessage
INC HL
LD (HL),msHiddInvr
JP TransMessage
; Res Claster invert
; Input: None
ResClasInv:
PUSH IX
IN A,(Page3)
PUSH AF ;á®åà.page4
kk8: LD A,(hPages.Win2)
OUT (Page3),A ;¢ª«.¡ãä¥à
PUSH HL
LD HL,(RClIbuf+2)
LD A,(RClIlen+1)
LD B,A
LD E,ColDialInv1
;LD E,A
LD D,ColDhotkey
;LD D,A
ResDin2: INC HL
LD A,(HL)
AND 0Fh
CP D
JR Z,.loc2 ;$+5
LD A,(HL)
;XOR E
AND 0xF0 ;
OR E ;
LD (HL),A ;+6
.loc2: INC HL
DJNZ ResDin2
RClIbuf: LD IX,0 ;Put Name with invert
RClIlen: LD HL,0
RClIpos: LD DE,0
CALL PutDialLn
CALL ResILCr ; á¡à®á¨âì ªãàá®à
SUB A
LD (CIflag+1),A
POP HL
POP AF
OUT (Page3),A
POP IX
RET
;[]===========================================================[]
;
PutDialLn:
LD A,D
CP 1Fh
RET NC
BIT 7,E
JR Z,pdln
LD A,E
LD E,0
NEG
LD C,A
SUB L
NEG
LD L,A
RET Z
RET M
LD A,C
ADD A,A
ADD A,XL
LD XL,A
JR NC,pdln
INC XH
pdln: LD A,E
CP 80
RET NC
ADD A,L
CP 80
JR C,$+6
LD A,80
SUB E
LD L,A
DI
kk9: LD A,(hPages.Win2)
LD B,A
XOR A
LD C,BIOS.WIN_RESTORE
RST ToBIOS
EI
RET
;!FIXIT CURSOR
; “áâ ­®¢ª  ªãàá®à  ç¥àâ®çª®©
; SetCursor: ; ¯®«ãç¨âì á¨áâ. §­ ª®£¥­¥à â®à
; ld de,0xB700 ; ¡ãä¥à ¤«ï 2kB §­ ª®£¥­¥à â®à 
; ld c,BIOS.WIN_GET_ZG
; RST ToBIOS
; ; ¯®á«¥¤­¨¥ 512 ¡ ©â (2 ­¨¦­¨¥ ç¥àâë) § ¯®«­¨âì ª®¤®¬ 0xFF
; ld hl,0xB700+1536
; ld bc,00FFh
; ._loop: ld (hl),c
; inc hl
; ld (hl),c
; inc hl
; djnz ._loop
; ; ãáâ. §­ ª®£¥­¥à â®à á ­®¬¥à®¬ 0x5B
; ld a,0x5B
; ld de,0xB700
; ld c,BIOS.WIN_SET_ZG
; RST ToBIOS
; ret
;
;-- Dialog Windows color
ColDialFr: EQU 0Fh ; 梥â à ¬ª¨ ®ª­ 
ColDhotkey: EQU 0Ch ; 梥â hot-ª« ¢¨è
ColButton: EQU 20h ; 梥⠡ãâ®­®¢
ColLstBxFr: EQU 1Fh ; 梥â à ¬ª¨ ListBox- 
ColListBox: EQU 1Fh ; 梥â ᯨ᪠ ListBox- 
ColLstBoxI: EQU 5Eh ; 梥⠢뤥«. ªãàá®à   ªâ. ®¡ê¥ªâ 
ColLstBxHI: EQU 1Eh ; 梥⠢뤥«. ªãàá®à  ­¥  ªâ. ®¡ê¥ªâ 
ColScrlBar: EQU 0Fh ; 梥â áªà®««-¡ à 
ColInpLine: EQU 0Eh ; 梥â । ªâ. ¯®«ï ¬¥âª¨ ¤¨áª¥âë
ColDialInv: EQU 0Fh ; color dialog window invert
ColDialInv1: EQU 07h ; color dialog window invert
ColFormText: EQU 31h ; 梥â ⥪áâ  ¢ ®ª­¥ ä®à¬ â¨à®¢ ­¨ï
ColFormNumber: EQU 3Eh ; æ¢¥â æ¨äà ¢ ®ª­¥ ä®à¬ â¨à®¢ ­¨ï
ColorFrame: EQU ColFormText ; 梥â à ¬ª¨ ®¡ê¥ªâ  Frame
ColDialWn: DB 17h ; 梥⠮ª­ 
FramDSl: DB "ɻȼͺºº" ; à ¬ª  ®ª­ 
SavDial: PUSH IX
LD A,(IX+2) ;with shadow
ADD A,2
LD L,A
LD A,(IX+3)
INC A
LD H,A ;Wind len
LD E,(IX+0)
LD D,(IX+1)
EXX
CALL GetMousInfo
EXX
DI
LD IX,WinBoxBuff ;Address Box buffers
kk1: LD A,(hPages.Win2) ;Page buffer
LD B,A
XOR A
LD C,BIOS.WIN_COPY ; ª®¯¨à. ¨§ ®ª­  ¢ ¡ãä¥à
RST ToBIOS
EI
CALL GetMousInfo
POP IX
RET
; <20>à®æ¥¤ãà  ®á¢®¡®¦¤¥­¨ï ¯àאַ㣮«ì­®© ¯«®é ¤¨ ¤¨ «. ®ª­ 
; <20>  ¢å®¤: IX - ®¯¨á â¥«ì
;
PutDialRc:
LD HL,WinBoxBuff+6800
LD B,(IX+3) ;Len Y
LD C,(IX+2) ;Len X
;LD E,20h
LD A,(ColDialWn)
PutRc1: LD D,C
putrc: LD (HL),20h ;E
INC HL
LD (HL),A ;window color
INC HL
DEC D
JR NZ,putrc ;$-5
INC HL ;place for shadow
INC HL
INC HL
INC HL
DJNZ PutRc1
RET
; <20>à®æ¥¤ãà  ­ «®¦¥­¨ï ­  ¯àאַ㣮«ì­ãî ¯«®é ¤ì ¤¨ «. ®ª­  à ¬ª¨
; <20>  ¢å®¤: IX - ®¯¨á â¥«ì
; HL -  ¤à¥á ®¯¨á â¥«ï à ¬ª¨
;
PutDialFr:
PUSH IY
PUSH HL
POP IY
LD HL,WinBoxBuff+6800
LD C,ColDialFr
LD A,(ColDialWn)
AND 0F0h
OR C
LD C,A
LD A,(IY+0)
LD (HL),A ;First Line
INC HL
LD (HL),C
INC HL
LD B,(IX+2) ;Len DialX
DEC B
DEC B
LD A,(IY+4)
.loc1: LD (HL),A
INC HL
LD (HL),C
INC HL
DJNZ .loc1
LD A,(IY+1)
LD (HL),A
INC HL
LD (HL),C
INC HL
INC HL
INC HL
INC HL
INC HL
;
LD E,(IX+2) ;lenX
DEC E
DEC E
LD D,B
LD B,(IX+3) ;lenY
DEC B
DEC B
LD A,(IY+5)
.loc2: LD (HL),A ;middle space window
INC HL
LD (HL),C
INC HL
ADD HL,DE
ADD HL,DE
LD (HL),A ;middle space window
INC HL
LD (HL),C
INC HL
INC HL
INC HL
INC HL
INC HL
DJNZ .loc2
;
LD A,(IY+2)
LD (HL),A ;End Line
INC HL
LD (HL),C
INC HL
LD B,(IX+2) ;Len X
DEC B
DEC B
LD A,(IY+4)
.loc3: LD (HL),A
INC HL
LD (HL),C
INC HL
DJNZ .loc3
LD A,(IY+3)
LD (HL),A
INC HL
LD (HL),C
INC HL
LD HL,DialName
LD E,L ;DE=Dial label
LD D,H
LD B,1
.loc4: INC B ;B=Len name+2 (for space)
LD A,(HL)
INC HL
OR A ;0-End name
JR NZ,.loc4
LD HL,WinBoxBuff+6800
LD A,(IX+2) ;Len X
SUB B ;LenX-Len name=Len empty
SRL A ;Len empty/2=shift
LD C,A
LD B,0
ADD HL,BC ;get address name place
ADD HL,BC
;LD (HL)," " ; ¢¥¤. ¯à®¡¥« ¨¬¥­¨ ®ª­ 
INC HL
INC HL
EX DE,HL ;HL=Adr.Name,DE=Adr.Place
.loc5: LDI ;Move
INC DE ;Attrib place
LD A,(HL)
OR A ;0-End name
JR NZ,.loc5
;LD A," " ; § ªà. ¯à®¡¥« ¨¬¥­¨ ®ª­ 
;LD (DE),A
POP IY
RET
; <20>à®æ¥¤ãà  ¢ë¢®¤  ¢ ¡ãä¥à ⥭¨ ®ª­ 
; <20>  ¢å®¤: IX -  ¤à¥á ®¯¨á â¥«ï
PutDialSh:
LD HL,WinBoxBuff+6800
LD A,(IX+2)
LD E,A
LD D,0
ADD HL,DE
ADD HL,DE
EXX
LD E,A ;¤«¨­  ®ª­  X
BIT 7,(IX+0)
JR Z,ExShD1 ;¯à ¢ ï £à ­¨æ  íªà ­ 
LD A,(IX+0)
NEG ;¢ A-­  ᪮«ìª® ®ª­® § «¥§«® §  íªà ­
SUB E ;-¤«¨­  ®ª­ =-¢¨¤¨¬ ï ç áâì
NEG
LD E,A ;¤«¨­  ¢¨¤¨¬®© ç áâ¨
ExShD1: LD D,0
LD HL,WinBoxBuff
ADD HL,DE
ADD HL,DE
LD A,(HL) ;¯¥à¢ ï «¨­¨ï ¡¥§ ⥭¨
INC HL
EXX
LD (HL),A
INC HL
EXX
LD A,(HL)
INC HL
EXX
LD (HL),A
INC HL
EXX
LD A,(HL)
INC HL
EXX
LD (HL),A
INC HL
EXX
LD A,(HL)
INC HL
EXX
LD (HL),A
INC HL
; á¥à¥¤¨­  ®ª­ 
LD B,(IX+3) ;¤«¨­  ®ª­  Y-1
DEC B
DShadLp: ADD HL,DE
ADD HL,DE
EXX
ADD HL,DE
ADD HL,DE
LD A,(HL)
INC HL
EXX
LD (HL),A
INC HL
EXX
LD A,(HL)
INC HL
EXX
AND 7
JR NZ,$+4
LD A,7
LD (HL),A
INC HL
EXX
LD A,(HL)
INC HL
EXX
LD (HL),A
INC HL
EXX
LD A,(HL)
INC HL
EXX
AND 7
JR NZ,$+4
LD A,7
LD (HL),A
INC HL
DJNZ DShadLp
ADD HL,DE ;ª®­¥æ «¨­¨¨ ¤«ï ⥭¨
ADD HL,DE
INC HL
INC HL
INC HL
INC HL
EXX
ADD HL,DE ;ª®­¥æ ¡ãä¥à 
ADD HL,DE
INC HL
INC HL
INC HL
INC HL
EXX
LD B,E
DShadL1: EXX
DEC HL ;§ ¯®«­ï¥¬ á ª®­æ 
LD A,(HL)
EXX
DEC HL
AND 7
JR NZ,$+4
LD A,7
LD (HL),A
EXX
DEC HL
LD A,(HL)
EXX
DEC HL
LD (HL),A
DJNZ DShadL1
EXX ;¤¢  ¯¥à¢ëå §­ ª®¬¥áâ  ¡¥§ ¨§¬¥­¥­¨©
DEC HL
LD A,(HL)
EXX
DEC HL
LD (HL),A
EXX
DEC HL
LD A,(HL)
EXX
DEC HL
LD (HL),A
EXX
DEC HL
LD A,(HL)
EXX
DEC HL
LD (HL),A
EXX
DEC HL
LD A,(HL)
EXX
DEC HL
LD (HL),A
RET
; Get put address in memory
; Input: BC - Coords from begin window
; Output: DE - Address put place
;
GetPutA: PUSH HL
LD HL,WinBoxBuff+6800
LD A,(IX+2) ;Len X-2
ADD A,2 ;Full len with shadow
ADD A,A ;With attributs
LD E,A ;LenX in bytes
LD D,0
LD A,B
OR A
JR Z,$+5
ADD HL,DE
DJNZ $-1
LD E,C ;$+5
ADD HL,DE ;DE-shiftX
ADD HL,DE
EX DE,HL ;DE-Address
POP HL
RET
;[]========================================================[]
; Žç¨áâ¨âì ¤¥áªâ®¯
ClearDesk: CALL setpal
; ’¨â« ¯à®£à ¬¬ë
LD DE,0000h
LD C,BIOS.LP_SET_PLACE ; ãáâ. ¯®«®¦. ªãàá®à 
RST ToBIOS
LD HL,Title
LD E,0Fh ;  âਡãâ
LD BC,#50*256+BIOS.LP_PRINT_LINE ; ¢ë¢®¤ áâப¨
RST ToBIOS
CALL Clear1
; ­¨¦­ïï ¯®«®áª 
LD DE,1F00h ; Y/X ¯®«®¦. ᨬ¢®« 
LD C,BIOS.LP_SET_PLACE ; ãáâ. ª®®à¤¨­ âë ¢ ®ª­¥
RST ToBIOS
LD A," " ; ᨬ¢®«
LD E,0Fh ;  âਡãâ
LD BC,5081h ; ¯¥ç âì ᨬ¢®«  á  âਡã⮬
RST ToBIOS
RET
Clear1: LD DE,0100h ; Y/X ¯®«®¦. ®ª­ 
LD HL,1E50h ; Y/X à §¬¥à
LD BC,408Dh ; b= âਡãâ
LD A," " ; ᨬ¢®«
RST ToBIOS
RET
;setpal: ld hl,pallete ; ¯ «¨âà 
; ld de,1000h ; ç¨á«® 梥⮢ ¯ «¨âàë/­ ç «ì­ë© 梥â
; ld bc,0FFA4h ; ¬ áª  梥â /äã­ªæ¨ï ãáâ ­®¢ª¨
; ld a,1 ; ­®¬¥à ¯ «¨âàë (0=0-© íªà ­, 1=1-© íªà ­)
; RST ToBIOS
; ret
;pallete: ; b,g,r,0
; db 0,0,0,0 ; 梥â 0, ç¥à­ë©
; db 128,0,0,0 ; 梥â 1, ᨭ¨©
; db 0,128,0,0 ; 梥â 2, §¥«¥­ë©
; db 128,128,0,0 ; 梥â 3, ¡¨àî§®¢ë© (樠­)
; db 0,0,128,0 ; 梥â 4, ªà á­ë©
; db 128,0,128,0 ; 梥â 5, ¯ãà¯ãà­ë©
; db 64,64,64,0 ; 梥â 6, ª®à¨ç­¥¢ë©
; db 128,128,128,0 ; 梥â 7, á¥àë©
;
; db 192,192,192,0 ; 梥â 8, ¡¥«ë©
; db 255,0,0,0 ; 梥â 9, £®«ã¡®©
; db 0,255,0,0 ; 梥â A, ïમ-§¥«¥­ë©
; db 255,255,0,0 ; 梥â B, ïમ-¡¨àî§®¢ë©
; db 0,0,255,0 ; 梥â C, ïમ-ªà á­ë©
; db 255,0,255,0 ; 梥â D, ïમ-¯ãà¯ãà­ë©
; db 0,255,255,0 ; 梥â E, ïમ-¦¥«âë©
; db 255,255,255,0 ; 梥â F, ïમ-¡¥«ë©
; “áâ ­®¢¨âì ¨­¢¥àá¨î ¤«ï æ¢¥â  0Fh
setpal: LD HL,pal ; ¯ «¨âà 
LD DE,0100h ; ç¨á«® 梥⮢ ¯ «¨âàë/­ ç «ì­ë© 梥â
LD BC,0FFA4h ; ¬ áª  梥â /äã­ªæ¨ï ãáâ ­®¢ª¨
LD A,4 ; ­®¬¥à ¯ «¨âàë (0=0-© íªà ­, 1=1-© íªà ­)
RST ToBIOS
LD HL,pal1
LD DE,010Fh ; ç¨á«® 梥⮢ ¯ «¨âàë/­ ç «ì­ë© 梥â
LD BC,0FFA4h
LD A,4
RST ToBIOS
;
LD HL,pal1
LD DE,0100h ; ç¨á«® 梥⮢ ¯ «¨âàë/­ ç «ì­ë© 梥â
LD BC,0FFA4h
LD A,5
RST ToBIOS
LD HL,pal
LD DE,010Fh ; ç¨á«® 梥⮢ ¯ «¨âàë/­ ç «ì­ë© 梥â
LD BC,0FFA4h
LD A,5
RST ToBIOS
;
LD HL,pal
LD DE,0100h ; ç¨á«® 梥⮢ ¯ «¨âàë/­ ç «ì­ë© 梥â
LD BC,0FFA4h
LD A,6
RST ToBIOS
LD HL,pal1
LD DE,010Fh ; ç¨á«® 梥⮢ ¯ «¨âàë/­ ç «ì­ë© 梥â
LD BC,0FFA4h
LD A,6
RST ToBIOS
;
LD HL,pal1
LD DE,0100h ; ç¨á«® 梥⮢ ¯ «¨âàë/­ ç «ì­ë© 梥â
LD BC,0FFA4h
LD A,7
RST ToBIOS
LD HL,pal
LD DE,010Fh ; ç¨á«® 梥⮢ ¯ «¨âàë/­ ç «ì­ë© 梥â
LD BC,0FFA4h
LD A,7
RST ToBIOS
RET
pal: DB 0,0,0,0
pal1: DB 255,255,255,0