DemoN/UTIL.ASM
2020-12-26 23:59:23 +03:00

924 lines
35 KiB
NASM
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.

;[]=========================================================================[]
;[] <20>®¤¯à®£à ¬¬ë-ã⨫¨âë ¬®­¨â®à -®â« ¤ç¨ª  DemoN []
;[] v0.01 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 29.08.2004 []
;[] v0.02 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 20.03.2005 []
;[] v0.03 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 25.02.2006 []
;[] v0.10 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 17.05.2006 []
;[] []
;[] SaveAllRegs - á®åà ­¥­¨¥ §­ ç¥­¨© ॣ¨áâ஢ëå ¯ à []
;[] RestAllRegs - ¢®áâ ­®¢«¥­¨¥ §­ ç¥­¨© ॣ¨áâ஢ëå ¯ à []
;[] PrnStrColor - ¯¥ç âì áâப¨ ᨬ¢®«®¢ á  âਡãâ ¬¨ []
;[] PrintReg - ¯¥ç âì ¤¢ãå¡ ©â®¢®£® ç¨á«  []
;[] PrintStrAF - ¯¥ç âì §­ ç¥­¨ï ॣ¨áâ஢®© ¯ àë AF ¨ ä« £®¢ []
;[] PrintStrReg - ¯¥ç âì §­ ç¥­¨© ॣ¨áâ஢ëå ¯ à á  ¤à¥á㥬묨 ¡ ©â ¬¨ []
;[] PrintStrWin - ¯¥ç âì ­®¬¥à®¢ ¡ ­®ª ¢ ®ª­ å []
;[] PrintSPDn - ¯¥ç âì £«ã¡¨­ë á⥪  []
;[] PrintStrSp - ¯¥ç âì §­ ç¥­¨© á⥪  []
;[] PrintDump - ¯¥ç âì ¤ ¬¯  []
;[] PrintStrDump - ¯¥ç âì áâப¨ ¤ ¬¯  []
;[] ReplSymNoPrint - § ¬¥­  ­¥¯¥ç â­ëå ᨬ¢®«®¢ ¢ áâப¥ []
;[] NumToStr16 - ä®à¬¨à®¢ ­¨¥ 16-â¨à¨ç­®£® ç¨á«  []
;[] NumToStr8 - ä®à¬¨à®¢ ­¨¥ 8-à¨ç­®£® ç¨á«  []
;[] ConvHexStr - ª®­¢¥àâ¨à®¢ ­¨¥ ç¨á«  ¢ HEX-áâபã []
;[] ConvDecStr - ª®­¢¥àâ¨à®¢ ­¨¥ 16-¡¨â­®£® ç¨á«  ¢ DEC-áâபã []
;[] CursorSet - ¯à®à¨á®¢ª  ªãàá®à  []
;[] CursorRes - ¢®áâ ­®¢«¥­¨¥ íªà ­  ¯®¤ ªãàá®à®¬ []
;[] Ld_a_bc - ç⥭¨¥ ¡ ©â  ¨§ ¯ ¬ïâ¨ á ¯à®¢¥àª®©  ¤à¥á ,  ¤à¥á ¢ BC []
;[] Ld_a_hl - ç⥭¨¥ ¡ ©â  ¨§ ¯ ¬ïâ¨ á ¯à®¢¥àª®©  ¤à¥á ,  ¤à¥á ¢ HL []
;[] Ld_hl_a - § ¯¨áì ¡ ©â  ¢ ¯ ¬ïâì á ¯à®¢¥àª®©  ¤à¥á ,  ¤à¥á ¢ HL []
;[] AdrArea - ®¯à¥¤¥«¥­¨¥ ¯à¨­ ¤«¥¦­®á⨠ ¤à¥á  ®¡« á⨠¯ ¬ï⨠[]
;[]=========================================================================[]
;[]=========================================================================[]
;[] ‘®åà ­¥­¨¥ §­ ç¥­¨© ॣ¨áâ஢ëå ¯ à []
;[]=========================================================================[]
SaveAllRegs:
ld (Reg._HL),hl
ld (Reg._DE),de
ld (Reg._BC),bc
ld (Reg._IX),ix
ld (Reg._IY),iy
push af
pop hl
ld (Reg._AF),hl
ld a,r
ld (Reg._IR),a
ld a,i
ld (Reg._IR+1),a
exx
ex af,af'
ld (Reg._HL_),hl
ld (Reg._DE_),de
ld (Reg._BC_),bc
push af
pop hl
ld (Reg._AF_),hl
ex af,af'
exx
ld hl,WinPage ;á®åà ­¥­¨¥ ­®¬¥à®¢ áâà ­¨æ
in a,(EmmWin.P0) ;0-¥ ®ª­®
ld (hl),a
inc hl
in a,(EmmWin.P1) ;1-¥ ®ª­®
ld (hl),a
inc hl
in a,(EmmWin.P2) ;2-¥ ®ª­®
ld (hl),a
inc hl
in a,(EmmWin.P3) ;3-¥ ®ª­®
ld (hl),a
ret
;[]=========================================================================[]
;[] ‚®áâ ­®¢«¥­¨¥ §­ ç¥­¨© ॣ¨áâ஢ëå ¯ à []
;[]=========================================================================[]
RestAllRegs:
ld a,(Reg._IR)
ld r,a
ld a,(Reg._IR+1)
ld i,a
ld hl,(Reg._AF)
push hl
pop af
ld hl,(Reg._HL)
ld de,(Reg._DE)
ld bc,(Reg._BC)
ld ix,(Reg._IX)
ld iy,(Reg._IY)
exx
ex af,af'
ld hl,(Reg._AF_)
push hl
pop af
ld hl,(Reg._HL_)
ld de,(Reg._DE_)
ld bc,(Reg._BC_)
ex af,af'
exx
ret
;[]=========================================================================[]
;[] <20>¥ç âì áâப¨ ᨬ¢®«®¢ []
;[] ‚室: HL -  ¤à¥á áâப¨ ᨬ¢®«®¢ []
;[] []
;[] ”®à¬ â áâப¨: 0x16, ‘⮫¡¥æ, ‘âப , ‘¨¬¢®«ë, 0x00 []
;[]=========================================================================[]
ld a,(Color.Screen) ;®á­®¢­®© 梥â
ld (PrnStrColor.L1+5),a
PrnStrColor:
ld a,(hl)
cp 0x16 ;ª®¤ ãáâ ­®¢ª¨ ¯®§¨æ¨¨ ªãàá®à 
jr nz,.L2
inc hl
ld e,(hl) ;á⮫¡¥æ
ld a,e
ld (PrtXCoord),a
inc hl
ld d,(hl) ;áâப 
inc hl
ld a,(hl) ;ᨬ¢®«
.L2 cp 0x0D
jr nz,.L3
inc d
ld a,(PrtXCoord)
ld e,a
jr .L4
.L3 cp 0x17
jr nz,.L1
inc hl
ld a,(hl)
ld (PrnStrColor.L1+5),a
inc hl
ld a,(hl)
.L1 or a
ret z ;¢ë室 ¥á«¨ ª®­¥æ áâப¨
push hl
push de
;¯¥ç âì ç/§ ¡¨®á ¨«¨ ¤áá?
ifdef D_PRINTCH_BIOS
ld h,0x03 ; âਡãâ
ld l,a
sub a ;¨¤¥­â¨ä¨ª â®à ®ª­ 
; ld a,(Demon.Bios_Win)
ld bc,SysSymb*256+Bios.Win_Put_Sym
rst BiosRst
else
ld b,0x03
ld c,Dss.WrChar
rst DssRst
endif
pop de
pop hl
inc e
.L4 inc hl
jr PrnStrColor
PrtXCoord db 0
;[]=========================================================================[]
;[] <20>¥ç âì ¤¢ãå¡ ©â®¢®£® ç¨á«  []
;[] ‚室: DE - ª®®à¤¨­ âë ¯¥ç â¨ []
;[] HL - §­ ç¥­¨¥ ॣ¨áâ஢®© ¯ àë []
;[]=========================================================================[]
PrintReg:
di
push hl
ld c,Bios.Lp_Set_Place ;ãáâ ­®¢ª  ¯®§¨æ¨¨ ¯¥ç â¨
rst BiosRst
pop hl
ld a,(DecHex) ;á¨á⥬ áç¨á«¥­¨ï
or a
jr z,.Hex
ld de,.String
call ConvDecStr
jr .Print
.Hex ld a,"#"
ld (.String),a
ld c,l
ld a,h
call ConvHexStr
ld (.String+1),hl ;áâ à訩 ¡ ©â
ld a,c
call ConvHexStr
ld (.String+3),hl ;¬« ¤è¨© ¡ ©â
.Print ld hl,.String ;¯¥ç â ¥¬ ï áâப 
ld bc,5*256+Bios.Lp_Print_Ln2 ;¢ ॣ.B ¤«¨­  áâப¨
rst BiosRst
ei
ret
.String db "#0123"
;[]=========================================================================[]
;[] <20>¥ç âì §­ ç¥­¨ï ॣ¨áâ஢®© ¯ àë AF ¨ ä« £®¢ []
;[] ‚室: DE - ª®®à¤¨­ âë ¯¥ç â¨ []
;[] HL - §­ ç¥­¨¥ ॣ¨áâ஢®© ¯ àë []
;[]=========================================================================[]
PrintStrAF:
ld a,h ;§­ ç¥­¨¥ ॣ¨áâà  A
push hl
ld (.String+11),a
ld hl,.String+1 ;¤¢®¨ç­®¥ §­ ç¥­¨¥
push de
ld de,0x3031 ;"01"
ld b,8
.L1 rlca
jr c,$+5
ld (hl),d ;"0"
jr $+3
ld (hl),e ;"1"
inc hl
djnz .L1
pop de
inc b ;B=1
inc hl
inc hl
call ReplSymNoPrint
pop hl
ld a,l ;ä« £¨
push hl
ld hl,.Flags
ld b,8
res 3,a ;á¡à®á ­¥¨§¢¥áâ­ëå ä« £®¢
res 5,a
.L2 rlca
jr c,$+6
set 5,(hl) ;á¡à®è¥­
jr $+4
res 5,(hl) ;ãáâ ­®¢«¥­
inc hl
djnz .L2
pop hl
push de
call PrintReg ;¯¥ç âì §­ ç¥­¨ï ॣ.¯ àë
pop de
push de
ld a,6
add a,e
ld e,a
ld c,Bios.Lp_Set_Place
di
rst BiosRst
ld hl,.String
ld bc,13*256+Bios.Lp_Print_Ln2 ;¢ ॣ.B ¤«¨­  áâப¨
di
rst BiosRst
pop de
inc d
dec e
dec e
dec e
ld c,Bios.Lp_Set_Place
di
rst BiosRst
ld hl,.Flags
ld bc,8*256+Bios.Lp_Print_Ln2 ;¢ ॣ.B ¤«¨­  áâப¨
di
rst BiosRst
ei
ret
.String db '%01010101 " "'
.Flags db "SZ.H.PNC"
;[]=========================================================================[]
;[] <20>¥ç âì §­ ç¥­¨© ॣ¨áâ஢ëå ¯ à á  ¤à¥á㥬묨 ¡ ©â ¬¨ []
;[] ‚室: DE - ª®®à¤¨­ âë ¯¥ç â¨ []
;[] HL - §­ ç¥­¨¥ ॣ¨áâ஢®© ¯ àë []
;[]=========================================================================[]
PrintStrReg:
push hl
ld b,h
ld c,l
call Ld_a_bc ;ld a,(bc)  ¤à¥áã¥¬ë¥ ¡ ©âë
ld (.String+10),a
call ConvHexStr
ld (.String),hl
inc bc
call Ld_a_bc ;ld a,(bc)
ld (.String+11),a
call ConvHexStr
ld (.String+2),hl
inc bc
call Ld_a_bc ;ld a,(bc)
ld (.String+12),a
call ConvHexStr
ld (.String+5),hl
inc bc
call Ld_a_bc ;ld a,(bc)
ld (.String+13),a
call ConvHexStr
ld (.String+7),hl
ld hl,.String+10 ;§ ¬¥­  ­¥¯¥ç â­ëå ᨬ¢®«®¢
ld b,4
call ReplSymNoPrint
pop hl
push de
call PrintReg ;¯¥ç âì §­ ç¥­¨ï ॣ.¯ àë
pop de
di
ld a,6
add a,e
ld e,a
ld c,Bios.Lp_Set_Place ;ãáâ ­®¢ª  ¯®§¨æ¨¨ ¯¥ç â¨
rst BiosRst
ld hl,.String ;¯¥ç â ¥¬ ï áâப 
ld bc,14*256+Bios.Lp_Print_Ln2 ;¢ ॣ.B ¤«¨­  áâப¨
rst BiosRst
ei
ret
.String db "0123 4567 ABCD"
;[]=========================================================================[]
;[] <20>¥ç âì ­®¬¥à®¢ ¡ ­®ª ¢ ®ª­ å []
;[] ‚室: HL -  ¤à¥á á®åà ­¥­­ëå ­®¬¥à®¢ []
;[]=========================================================================[]
PrintStrWin:
ld hl,WinPage ;¢ë¢®¤ ­®¬¥à®¢ ¡ ­®ª ¢ ®ª­ å
ld de,.String+3
ld b,4
.L1 push bc
ld a,(hl)
inc hl
push hl
ld l,a
ld h,0
call NumToStr8 ;ª®­¢¥àâ¨à®¢ ­¨¥ ¢ HEX-áâபã
inc de
inc de
inc de
pop hl
pop bc
djnz .L1
ld hl,.String
jp PrnStrColor-6
.String db 0x16,0x02,0x12,"#01"
db 0x16,0x08,0x12,"#02"
db 0x16,0x0E,0x12,"#03"
db 0x16,0x14,0x12,"#04",0
;[]=========================================================================[]
;[] <20>¥ç âì £«ã¡¨­ë á⥪  []
;[]=========================================================================[]
PrintSPDn:
ld a,(StackDown)
ld l,a
ld a,0x7F
cp l ;®âà¨æ â¥«ì­®¥?
jr nc,.L1
res 7,l ;á¡à®á¨âì ¬¨­ãá
inc a
sub l
ld l,a
.L1 ld h,0
ld de,.String+1
push de
call ConvDecStr8
pop hl
dec hl
ld bc,3*256+"0"
ld (hl),c
ld a,(hl) ;£ è¥­¨¥ ­¥§­ ç é¨å ­ã«¥©
cp c
jr nz,$+8
ld a,0x20
ld (hl),a
inc hl
djnz $-8
ld a,(StackDown)
bit 7,a
jr z,$+6
dec hl ;®âà¨æ â¥«ì­®¥ ç¨á«®
ld a,"-"
ld (hl),a
ld de,0x140A
ld c,Bios.Lp_Set_Place ;ãáâ ­®¢ª  ¯®§¨æ¨¨ ¯¥ç â¨
di
rst BiosRst
ld hl,.String ;¯¥ç â ¥¬ ï áâப 
ld bc,4*256+Bios.Lp_Print_Ln2 ;¢ ॣ.B ¤«¨­  áâப¨
di
rst BiosRst
ei
ret
.String ds 4
;[]=========================================================================[]
;[] <20>¥ç âì §­ ç¥­¨© á⥪  []
;[]=========================================================================[]
PrintStrSP:
ld a,(.StrSp) ;áâப  á ¢¥à設®© á⥪ 
inc a
jr z,.L4 ;¥á«¨ ¢¥à設  á⥪  ­¥ ¯®¯ ¤ ¥â ¢ ¤ ¬¯
ld hl,(Reg._SP)
dec hl
dec hl
inc hl
inc hl
dec a
jr nz,$-3
ld (StackDump),hl
.L4 ld hl,(StackDump) ;­ ç «® ¤ ¬¯ 
ld de,#1601 ;ª®®à¤¨­ âë ¯¥ç â¨
ld a,-1
ld (.StrSp),a
ld b,8 ;ª®«-¢® áâப ¤ ¬¯ 
.L3 push bc
push de ;ª®®à¤¨­ âë
push hl
or a ;á¡à®á ä« £  C
ld a,b
ld bc,(Reg._SP) ; ¤à¥á ¢¥à設ë á⥪ 
sbc hl,bc
jr nz,.L2
ld b,a
ld a,8
sub b
ld (.StrSp),a ;­®¬¥à áâப¨ ¢ ¤ ¬¯¥ á ¢¥à設®© á⥪ 
ld a,(Color._SP) ;梥⠢¥à設ë á⥪ 
jr .L2+3
.L2 ld a,(Color.Screen) ;®á­®¢­®© 梥â
ld (.L1+1),a ;§ ¯¨á «¨ 梥â
ld c,Bios.Lp_Set_Place ;ãáâ ­®¢ª  ¯®§¨æ¨¨ ¯¥ç â¨
di
rst BiosRst
.L1 ld e,0 ;梥⠯®¤á¢¥âª¨
ld bc,11*256+Bios.Lp_Print_Atr ;¢ ॣ.B ¤«¨­  áâப¨
rst BiosRst
pop hl
pop de
push de
push hl
call PrintReg ;¯¥ç âì  ¤à¥á 
pop hl
pop de
push de
dec hl
dec hl
push hl
ld a,6
add a,e
ld e,a
inc hl
inc hl
call Ld_a_hl
ld c,a
inc hl
call Ld_a_hl
ld l,a
ld h,c
call PrintReg ;¯¥ç âì §­ ç¥­¨ï á⥪ 
pop hl
pop de
inc d
pop bc
djnz .L3
ei
ret
.StrSp db 6
;[]=========================================================================[]
;[] <20>¥ç âì ¤ ¬¯  []
;[]=========================================================================[]
PrintDump:
ld de,0x160E ;ª®®à¤¨­ âë
ld hl,(Dump1)
ld b,8 ;ª®«¨ç¥á⢮ áâப
push de
push bc
push hl
call PrintStrDump
pop hl
ld bc,16
add hl,bc
pop bc
pop de
inc d ;á«¥¤ãîé ï áâப 
djnz $-14
ret
ld hl,Dump ;¢ë¢®¤ ¤ ¬¯ 
; ld de,0x160E ;ª®®à¤¨­ âë
ld b,8 ;ª®«¨ç¥á⢮ áâப
push de
push bc
ld c,(hl) ;¬« ¤è¨© ¡ ©â  ¤à¥á 
inc hl
push hl
ld h,(hl) ;áâ à訩 ¡ ©â  ¤à¥á 
ld l,c
call PrintStrDump
pop hl
inc hl
pop bc
pop de
inc d ;á«¥¤ãîé ï áâப 
djnz $-15
ret
;[]=========================================================================[]
;[] <20>¥ç âì áâப¨ ¤ ¬¯  []
;[] ‚室: DE - ª®®à¤¨­ âë ¯¥ç â¨ []
;[] HL -  ¤à¥á ­ ç «  áâப¨ []
;[]=========================================================================[]
PrintStrDump:
push de
push hl
ld b,h
ld c,l
ld de,.String
ld ix,.String+41
push ix
ld a,8
.L1 exa
call Ld_a_bc ;ld a,(bc)
ld (ix),a
inc ix
call ConvHexStr
ex de,hl
ld (hl),e
inc hl
ld (hl),d
inc hl
ex de,hl
inc bc
call Ld_a_bc ;ld a,(bc)
ld (ix),a
inc ix
call ConvHexStr
ex de,hl
ld (hl),e
inc hl
ld (hl),d
inc hl
inc hl
ex de,hl
inc bc
exa
dec a
jr nz,.L1
ld b,16
pop hl
call ReplSymNoPrint ;§ ¬¥­  ­¥¯¥ç â­ëå ᨬ¢®«®¢
pop hl
pop de
push de
call PrintReg ;¯¥ç âì  ¤à¥á  áâப¨
pop de
di
ld a,7
add a,e
ld e,a
ld c,Bios.Lp_Set_Place ;ãáâ ­®¢ª  ¯®§¨æ¨¨ ¯¥ç â¨
rst BiosRst
ld hl,.String
ld bc,57*256+Bios.Lp_Print_Ln2 ;¢ ॣ.B ¤«¨­  áâப¨
rst BiosRst
ei
ret
.String db "1000 2000 3000 4000 5000 6000 7000 8000 "
db "0123456789ABCDEF"
;[]=========================================================================[]
;[] ‡ ¬¥­  ­¥¯¥ç â­ëå ᨬ¢®«®¢ ¢ áâப¥ []
;[] ‚室: B - ¤«¨­  áâப¨ []
;[] HL -  ¤à¥á ­ ç «  áâப¨ []
;[]=========================================================================[]
ReplSymNoPrint:
ld a,(SymbolNoPrint)
ld c,a
.L1 ld a,(hl)
cp 127
jr z,$+10
cp 0xFF
jr z,$+6
cp " "
jr nc,$+3
ld (hl),c
inc hl
djnz .L1
ret
;[]=========================================================================[]
;[] ”®à¬¨à®¢ ­¨¥ 16-⨡¨â­®£® ç¨á«  []
;[] ‚室: DE -  ¤à¥á ¡ãä¥à  []
;[] HL - ç¨á«® []
;[]=========================================================================[]
NumToStr16:
ld a,(DecHex) ;á¨á⥬ áç¨á«¥­¨ï
or a
jp nz,ConvDecStr
ld a,"#"
ld (de),a
inc de
ld c,l
ld a,h
call ConvHexStr
ex de,hl
ld (hl),e ;áâ à訩 ¡ ©â
inc hl
ld (hl),d
inc hl
ex de,hl
ld a,c
call ConvHexStr
ex de,hl
ld (hl),e ;¬« ¤è¨© ¡ ©â
inc hl
ld (hl),d
inc hl
ex de,hl
ret
;[]=========================================================================[]
;[] ”®à¬¨à®¢ ­¨¥ 8-¡¨â­®£® ç¨á«  []
;[] ‚室: DE -  ¤à¥á ¡ãä¥à  []
;[] HL - ç¨á«® []
;[]=========================================================================[]
NumToStr8:
ld a,(DecHex) ;á¨á⥬ áç¨á«¥­¨ï
or a
jp nz,ConvDecStr8
.Hex ld a,"#"
ld (de),a
inc de
ld a,l
call ConvHexStr
ex de,hl
ld (hl),e
inc hl
ld (hl),d
inc hl
ex de,hl
ret
;[]=========================================================================[]
;[] Š®­¢¥àâ¨à®¢ ­¨¥ ç¨á«  ¢ HEX-áâபã []
;[] ‚室: A - ç¨á«® []
;[] ‚ë室: HL - HEX-áâப  []
;[]=========================================================================[]
ConvHexStr:
push af
rrca
rrca
rrca
rrca
and 0x0F
add a,0x30
cp 0x3A
jr c,$+4
add a,7
ld l,a
pop af
and 0x0F
add a,0x30
cp 0x3A
jr c,$+4
add a,7
ld h,a
ret
;[]=========================================================================[]
;[] Š®­¢¥àâ¨à®¢ ­¨¥ 16-¡¨â­®£® ç¨á«  ¢ DEC-áâபã []
;[] ‚室: HL - ç¨á«® []
;[] DE -  ¤à¥á ­ ç «  DEC-áâப¨ []
;[]=========================================================================[]
ConvDecStr:
ld bc,-10000
ld a,0xFF
inc a
add hl,bc
jr c,$-2
sbc hl,bc
add a,"0"
ld (de),a
inc de
ld bc,-1000
ld a,0xFF
inc a
add hl,bc
jr c,$-2
sbc hl,bc
add a,"0"
ld (de),a
inc de
ConvDecStr8:
ld bc,-100
ld a,0xFF
inc a
add hl,bc
jr c,$-2
sbc hl,bc
add a,"0"
ld (de),a
inc de
ConvDecStr8_1:
ld bc,-10
ld a,0xFF
inc a
add hl,bc
jr c,$-2
sbc hl,bc
add a,"0"
ld (de),a
inc de
ld a,l
add a,"0"
ld (de),a
inc de
ret
;[]=========================================================================[]
;[] <20>à®à¨á®¢ª  ªãàá®à  []
;[] ‚室: B - ¤«¨­  ªãàá®à  []
;[] HL - ª®®à¤¨­ âë ªãàá®à  []
;[]=========================================================================[]
CursorSet:
ld (CursorRes+1),hl
ex de,hl
ld l,b ;à §¬¥à ¯® ¢¥à⨪ «¨
ld h,1 ;à §¬¥à ¯® £®à¨§®­â «¨
ld (CursorRes+4),hl
ld ix,.Buffer
push de
push hl
push ix
push bc
ifdef D_PRINTCH_BIOS
xor a
ld c,Bios.Win_Copy_Win ;ª®¯¨à®¢ ­¨¥ ¢ ¡ãä¥à
di
rst BiosRst
ei
else
ld a,(BankDebug)
ld b,a
ld c,Dss.WinCopy
rst DssRst
endif
pop bc ;¢ B ¤«¨­  ªãàá®à 
pop hl
push hl
inc hl
ld a,(hl) ;梥â ᨬ¢®«®¢
ld (CursorRes.L1+1),a
ld a,(Color.Cursor)
.L1 ld (hl),a
inc hl ;ª ¡ ©âã 梥â 
inc hl
djnz .L1
pop ix
pop hl
pop de
ifdef D_PRINTCH_BIOS
xor a
ld c,Bios.Win_Restore_Win ;¢ë¢®¤ ªãàá®à  ­  íªà ­
di
rst BiosRst
ei
else
ld a,(BankDebug)
ld b,a
ld c,Dss.WinRest
rst DssRst
endif
ret
.Buffer ds 22*2 ;max ¤«¨­  ªãàá®à 
;[]=========================================================================[]
;[] ‚®áâ ­®¢«¥­¨¥ íªà ­  ¯®¤ ªãàá®à®¬ []
;[]=========================================================================[]
CursorRes:
ld de,0 ;ª®®à¤¨­ âë
ld hl,0 ;à §¬¥à
ld b,l ;¤«¨­ 
push de
push hl
ld hl,CursorSet.Buffer
push hl
.L1 ld a,0 ;梥â
inc hl ;ª ¡ ©âã 梥â 
jr CursorSet.L1
;[]=========================================================================[]
;[] —⥭¨¥ ¡ ©â  ¨§ ¯ ¬ïâ¨ á ¯à®¢¥àª®©  ¤à¥á  []
;[] ‚室: BC ¨«¨ HL -  ¤à¥á ¢ ¯ ¬ï⨠[]
;[] ‚ë室: A - áç¨â ­­ë© ¡ ©â []
;[]=========================================================================[]
Ld_a_bc:
ld a,11000000b ;¯à®¢¥àª  ¤¨ ¯ §®­ 
and b
jr z,.L1 ;¢ 0-¬ ®ª­¥
cp 10000000b ;¢® 2-®¬ ®ª­¥
ld a,(bc)
ret nz ;¢®§¢à é ¥¬ ¡ ©â, ¥á«¨ ­¥â
ld a,(WinPage+2) ;­®¬¥à ¡ ­ª¨ ¯®¤ ®â« ¤ç¨ª®¬
out (EmmWin.P3),a ;¢ âà¥âì¥ ®ª­® ¥¥
set 6,b ;ª®à४â¨à㥬  ¤à¥á
ld a,(bc) ;ç¨â ¥¬ ¡ ©â
res 6,b ;¢®áâ ­ ¢«¨¢ ¥¬  ¤à¥á
jr Ld_a_hl.L1
.L1 ld a,(WinPage) ;­®¬¥à ¡ ­ª¨ ¢ 0-¬
out (EmmWin.P3),a ;¢ âà¥âì¥ ®ª­® ¥¥
set 6,b ;ª®à४â¨à㥬  ¤à¥á
set 7,b
ld a,(bc) ;ç¨â ¥¬ ¡ ©â
res 6,b ;¢®áâ ­ ¢«¨¢ ¥¬  ¤à¥á
res 7,b
jr Ld_a_hl.L1
Ld_a_hl:
ld a,11000000b ;¯à®¢¥àª  ¤¨ ¯ §®­ 
and h
jr z,.L2 ;¢ 0-¬ ®ª­¥
cp 10000000b ;¢® 2-®¬ ®ª­¥
ld a,(hl)
ret nz ;¢®§¢à é ¥¬ ¡ ©â, ¥á«¨ ­¥â
ld a,(WinPage+2) ;­®¬¥à ¡ ­ª¨ ¯®¤ ®â« ¤ç¨ª®¬
out (EmmWin.P3),a ;¢ âà¥âì¥ ®ª­® ¥¥
set 6,h ;ª®à४â¨à㥬  ¤à¥á
ld a,(hl) ;ç¨â ¥¬ ¡ ©â
res 6,h ;¢®áâ ­ ¢«¨¢ ¥¬  ¤à¥á
jr .L1
.L2 ld a,(WinPage) ;­®¬¥à ¡ ­ª¨ ¢ 0-¬ ®ª­¥
out (EmmWin.P3),a ;¢ âà¥âì¥ ®ª­® ¥¥
set 6,h ;ª®à४â¨à㥬  ¤à¥á
set 7,h
ld a,(hl) ;ç¨â ¥¬ ¡ ©â
res 6,h ;¢®áâ ­ ¢«¨¢ ¥¬  ¤à¥á
res 7,h
.L1 push af
ld a,(WinPage+3) ;­®¬¥à ¡ ­ª¨ ¨§ 3-£® ®ª­ 
out (EmmWin.P3),a ;¢®áâ ­ ¢«¨¢ ¥¬
pop af
ret
;[]=========================================================================[]
;[] ‡ ¯¨áì ¡ ©â  ¢ ¯ ¬ïâì á ¯à®¢¥àª®©  ¤à¥á  []
;[] ‚室: HL -  ¤à¥á ¢ ¯ ¬ï⨠[]
;[] A - § ¯¨á뢠¥¬ë© ¡ ©â []
;[]=========================================================================[]
Ld_hl_a:
push af
ld a,11000000b ;¯à®¢¥àª  ¤¨ ¯ §®­ 
and h
jr z,.L2 ;¢ 0-®¬ ®ª­¥
cp 10000000b ;¢® 2-®¬ ®ª­¥?
jr z,.L1
pop af
ld (hl),a ;§ ¯¨á «¨ ¡ ©â, ¥á«¨ ­¥â
ret
.L1 ld a,(WinPage+2) ;­®¬¥à ¡ ­ª¨ ¯®¤ ®â« ¤ç¨ª®¬
out (EmmWin.P3),a ;¢ âà¥âì¥ ®ª­® ¥¥
set 6,h ;ª®à४â¨à㥬  ¤à¥á
pop af
ld (hl),a ;¯¨è¥¬ ¡ ©â
jr .L3
.L2 ld a,(WinPage) ;­®¬¥à ¡ ­ª¨ ¢ 0-®¬
out (EmmWin.P3),a ;¢ âà¥âì¥ ®ª­® ¥¥
set 6,h ;ª®à४â¨à㥬  ¤à¥á
set 7,h
pop af
ld (hl),a ;¯¨è¥¬ ¡ ©â
res 7,h ;¢®áâ ­ ¢«¨¢ ¥¬  ¤à¥á
.L3 res 6,h
ld a,(WinPage+3) ;­®¬¥à ¡ ­ª¨ ¨§ 3-£® ®ª­ 
out (EmmWin.P3),a ;¢®áâ ­ ¢«¨¢ ¥¬
ret
;[]=========================================================================[]
;[] Ž¯à¥¤¥«¥­¨¥ ¯à¨­ ¤«¥¦­®á⨠ ¤à¥á  ®¡« á⨠¯ ¬ï⨠[]
;[] ‚室: HL - ­¨¦­¨©  ¤à¥á ®¡« á⨠¯ ¬ï⨠[]
;[] DE - ¢¥àå­¨©  ¤à¥á ®¡« á⨠¯ ¬ï⨠[]
;[] BC -  ¤à¥á []
;[] ‚ë室: ä« £ C -  ¤à¥á ­¥ ¯à¨­ ¤«¥¦¨â ®¡« á⨠¯ ¬ï⨠[]
;[] ä« £ NC -  ¤à¥á ¯à¨­ ¤«¥¦¨â ®¡« á⨠¯ ¬ï⨠[]
;[]=========================================================================[]
AdrArea:
or a
sbc hl,bc
ret c
ex de,hl
or a
sbc hl,bc
ccf
ret