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

1203 lines
45 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.

;[]=========================================================================[]
;[] Ž¡à ¡®âª  ª« ¢¨ âãàë []
;[] v0.01 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 10.10.2004 []
;[] v0.02 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 27.03.2005 []
;[] v0.03 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 11.03.2006 []
;[] v0.10 - ¯®á«¥¤­¨¥ ¨§¬¥­¥­¨ï 14.05.2006 []
;[]=========================================================================[]
call CursorRes ;¢ëª« ªãàá®à
call Refresh ;®¡­®¢«¥­¨¥ íªà ­ 
jr Keyb
call CursorRes ;¢ëª« ªãàá®à
Keyb:
call Cursor ;¢ª« ªãàá®à
call CursorSet
ld c,Dss.ScanKey ;á®áâ®ï­¨¥ ª« ¢¨ âãàë
rst DssRst
jr z,Keyb+6
ld a,b ;á®áâ®ï­¨¥ <Shift><Alt><Ctrl>
and 11110000b
jr z,.L100
;Ž¡à ¡®âª  ª®¬¡¨­ æ¨¨ Shift + ᨬ¢®«
and 11000000b ;<Shift>
or a
jr z,.L1
ld a,d
cp 0x80+0x0F ;Shift+Tab
jr nz,Keyb+6
ld hl,Keyb.WinScreen
ld a,(hl)
dec a
jr nz,$+4
ld a,4
ld (hl),a ;­®¬¥à ®ª­  ¤ ¬¯ 
jr Keyb-3
;Ž¡à ¡®âª  ª®¬¡¨­ æ¨¨ Alt + ᨬ¢®«
.L1 ld a,b
and 11110000b
cp 00010000b ;<Alt>
jr nz,.L10
ld a,d ;¯®§¨æ¨®­­ë© ª®¤
cp 0x80+0x2B ;<Alt>+<X>
jr nz,.L10
ret z ;¢ë室
;Ž¡à ¡®âª  ª®¬¡¨­ æ¨¨ Ctrl + ᨬ¢®«
.L10 cp 00100000b ;<Ctrl>
jp nz,.L0
ld a,d ;¯®§¨æ¨®­­ë© ª®¤
cp 0x80+0x12 ;<Ctrl>+<E> (dEc/hEx)
jr nz,.L11
ld a,(DecHex)
cpl
ld (DecHex),a
jr Keyb-11
.L11 cp 0x80+0x13 ;<Ctrl>+<R> १¨¤¥­â
jr nz,.L12
call CursorRes
ld b,5 ;¤«¨­  áâப¨ ¢¢®¤ 
ld hl,0x1413
push hl
push bc
call CursorSet
pop bc
pop hl
call InputLine
jp c,Keyb-3
call PutAdres
jp c,Keyb-3
call KReg.Rez ;­®¢ë©  ¤à¥á १¨¤¥­â 
jr Keyb-11
.L12 cp 0x80+0x2A ;<Ctrl>+<Z>
jp z,.L202-2 ;¢ë¯®«­¥­¨¥ ª®¬ ­¤ë
cp 0x80+0x2C ;<Ctrl>+<C>
jp z,.L200+5 ;¢ë¯®«­¥­¨¥ ª®¬ ­¤ë
cp 0x80+0x2D ;<Ctrl>+<V>
jp z,.L203+4 ;¯à®¯ã᪠ª®¬ ­¤ë
; cp 0x80+0x48 ;<ScrollLock>
; call z,ScreenS ;á®åà ­¥­¨¥ íªà ­  ¢ ä ©«
.L13 ;...
jp .L0
;Ž¡à ¡®âª  ASCII ª®¤®¢
.L100 ld a,e
cp 0x1B ;<Esc> - ¢ª«.á¨á⥬­®£® íªà ­ 
jr nz,.L200
xor a ;¢ëª« ç á®¢
ld (ClockOn),a
ld a,(OSScreen)
ld b,a
push bc
ld a,(OSGrafMode)
ld c,Dss.SetVMod ;á¨á⥬­ë© íªà ­
rst DssRst
pop bc
ld a,(DemonScreen)
cp b
jr nz,.NoRest
ld de,0 ;…᫨ íªà ­ë Ž‘ ¨ „¥¬®­  ᮢ¯ ¤ îâ -
ld hl,#2050 ;¢®ááâ ­ ¢«¨¢ ¥¬ áªà¨­
ld a,(BufPage)
ld b,a
ld c,Dss.WinRest
ld ix,#c000
rst DssRst
.NoRest ld c,Dss.WaitKey
rst DssRst ;¦¤¥¬ Any Key
ld a,(DemonScreen)
ld b,a
ld a,3
ld c,Dss.SetVMod
push bc
rst DssRst
pop bc
ld a,(OSScreen)
cp b
call z,RefreshScreen ;…᫨ íªà ­ë ᮢ¯ ¤ îâ - ¯¥à¥à¨á®¢ë¢ ¥¬
ld a,On ;¢ª« ç á®¢
ld (ClockOn),a
jp Keyb+6
;Ž¡à ¡®âª  ¯®§¨æ¨®­­®£® ª®¤ 
.L200 ld a,d
cp 0x3b ;<F1>
jr nz,.L208
call DemonHelp
; ld c,Dss.WaitKey
; rst DssRst ;¦¤¥¬ Any Key
.NoExit call RefreshScreen
jp Keyb+6
.L208 cp 0x3d
jr nz,.L207
call LoadBinDialog
jr .NoExit
.L207
cp 0x42 ;<F8>
jr nz,.L201
ld a,Off ;ä« £ ¯à®¯ã᪠ ¯®¤¯à®£à ¬¬
jr .L202
.L201 cp 0x41 ;<F7>
jr nz,.L203
ld a,On ;ä« £ âà áá¨à®¢ª¨ ¯®¤¯à®£à ¬¬
.L202 ld (Step.Flag),a
ld hl,PrintStrSP.StrSp
ld a,(hl) ;áâப  ¢¥à設ë á⥪ 
inc a
jr nz,$+5
ld a,6 ;¢¥à­ãâì ¢¥à設ã á⥪ 
ld (hl),a
call Step
jp Keyb-11
.L203 cp 0x43 ;<F9>
jr nz,.L204
ld hl,(Reg._PC)
call List ;á«¥¤ãîé ï ª®¬ ­¤ 
ld (Reg._PC),hl ;­®¢ë© PC
push hl
ld a,(KList.Descript) ;ª®«¨ç¥á⢮ áâப «¨á⨭£ 
call AdrListTabl ;­¨¦­¨©  ¤à¥á «¨á⨭£ 
ld de,(ListAdr) ;¢¥àå­¨©  ¤à¥á «¨á⨭£ 
pop bc ;­®¢ë© PC
call AdrArea
jp nc,Keyb-11
ld (ListAdr),bc ;­®¢ ï áâà ­¨æ  «¨á⨭£ 
jp Keyb-11
.L204 cp 0x0F ;<Tab>
jr nz,.L205
ld hl,Keyb.WinScreen
ld a,(hl)
inc a
cp 5
jr nz,$+4
ld a,1
ld (hl),a ;­®¬¥à ®ª­  ¤ ¬¯ 
jp Keyb-3
.L205 cp 0x48 ;<ScrollLock>
jr nz,.L206
call SaveScr ;á®åà ­¥­¨¥ íªà ­  ¢ ä ©«
jp Keyb+6
.L206 cp 0x44 ;<F10>
jr nz,.L0
;¢ë室
ld ix,ExitDlg
call DialogWindow
ret
call ClearScreen
.L0 ld a,(.WinScreen) ; ªâ¨¢­®¥ ®ª­®
dec a
jp z,KList
dec a
jp z,KDump
dec a
jp z,KReg
jp KStack
.WinScreen db 1 ;­®¬¥à  ªâ¨¢­®£® ®ª­ 
;1 - ®ª­® «¨á⨭£ 
;2 - ®ª­® ¤ ¬¯ 
;3 - ®ª­® ॣ¨áâ஢
;4 - ®ª­® á⥪ 
;<3B>à®à¨á®¢ª  ªãàá®à 
Cursor:
ld a,(Keyb.WinScreen) ; ªâ¨¢­®¥ ®ª­®
dec a
jr z,.L1
dec a
jr z,.L2
dec a
jr z,.L3
;Žª­® ¤ ¬¯  á⥪ 
ld de,(KStack.Coordinate) ;à áç¥â ªãàá®à 
ld hl,KStack.Descript+2
ld b,e
inc hl
inc hl
djnz $-2
ld a,(hl) ;¤«¨­  ªãàá®à 
ld (KStack.L201+1),a
ld b,a
dec hl
ld e,(hl) ;X-ª®®à¤¨­ â  ªãàá®à 
ex de,hl
ld (KStack.L201+3),hl
ret
;Žª­® «¨á⨭£ 
.L1 ld de,(KList.Coordinate) ;à áç¥â ªãàá®à 
ld hl,KList.Descript+2
ld b,e
inc hl
inc hl
djnz $-2
ld a,(hl) ;¤«¨­  ªãàá®à 
ld (KList.L201+1),a
ld b,a
dec hl
ld e,(hl) ;X-ª®®à¤¨­ â  ªãàá®à 
ex de,hl
ld (KList.L201+3),hl
ret
;Žª­® ¤ ¬¯ 
.L2 ld de,(KDump.Coordinate) ;à áç¥â ªãàá®à 
ld hl,KDump.Descript+2
ld b,e
inc hl
inc hl
djnz $-2
ld a,(hl) ;¤«¨­  ªãàá®à 
ld (KDump.L201+1),a
ld b,a
dec hl
ld e,(hl) ;X-ª®®à¤¨­ â  ªãàá®à 
ex de,hl
ld (KDump.L201+3),hl
ret
;Žª­® ॣ¨áâ஢
.L3 call KReg.DescCalc
ld d,b
ld b,e ;ª®«®­®ª  ¢ áâப¥
inc hl
inc hl
djnz $-2
ld a,(hl) ;¤«¨­  ªãàá®à 
ld (KReg.L201+1),a
ld b,a
dec hl
ld e,(hl) ;X-ª®®à¤¨­ â  ªãàá®à 
ex de,hl
ld (KReg.L201+3),hl
ret
;Ž¡à ¡®âª  ª« ¢¨è ¢ ®ª­¥ «¨á⨭£ 
KList:
ld a,b ;á®áâ®ï­¨¥ <Shift><Alt><Ctrl>
and 11110000b
jr z,.L100
;Ž¡à ¡®âª  ª®¬¡¨­ æ¨¨ Alt + ᨬ¢®«
cp 00010000b ;<Alt>
jr nz,.L10
jp Keyb+6
;Ž¡à ¡®âª  ª®¬¡¨­ æ¨¨ Ctrl + ᨬ¢®«
.L10 cp 00100000b ;<Ctrl>
jp nz,Keyb+6
ld a,d ;¯®§¨æ¨®­­ë© ª®¤
cp 0x80+0x2B ;<Ctrl>+<X>
jp nz,.L20
call AdrListTabl-3 ;¢ë¡®àª   ¤à¥á  «¨á⨭£  ¯® N áâப¨
ld (Reg._PC),hl
jp .NewLA1+3
.L20 ld a,b
cp 00100010b ;¯à ¢ë© <Ctrl>
jr nz,.L21
ld bc,.CtrlTabl
call AdrCtrlTabl ;¢ë¡®àª  áâப¨ ¢ â ¡«¨æ¥
jp nc,Keyb+6 ;­¥ æ¨äà®¢ë¥ ª« ¢¨è¨
ld a,(.Coordinate+1)
ld (bc),a ;­®¬¥à áâப¨ «¨á⨭£ 
inc bc
call AdrListTabl ;¢ë¡®àª   ¤à¥á  «¨á⨭£  ¯® N áâப¨
ld a,l
ld (bc),a
inc bc
ld a,h
ld (bc),a
jp Keyb+6
.L21 cp 00101000b ;«¥¢ë© <Ctrl>
jp nz,Keyb+6
ld a,d ;¯®§¨æ¨®­­ë© ª®¤
cp 0x80+0x00 ;Ctrl+"`"
jp nz,.L22
ld a,(.CtrlWin)
ld h,a
ld l,0
add a,0x40 ;á«¥¤ãî饥 ®ª­®
ld (.CtrlWin),a
ld a,(.Descript+1)
ld (.Coordinate+1),a
jp .NewLA1
.L22 ld bc,.CtrlTabl
call AdrCtrlTabl ;¢ë¡®àª  áâப¨ ¢ â ¡«¨æ¥
jp nc,Keyb+6
ld a,(bc) ;­®¬¥à áâப¨ «¨á⨭£ 
or a
jp z,Keyb+6 ;­¥â ¤ ­­ëå
inc bc
ld a,(bc)
ld l,a
inc bc
ld a,(bc)
ld h,a ; ¤à¥á ¨§ ¡ãä¥à 
jp .NewLA
;Ž¡à ¡®âª  ¯®§¨æ¨®­­®£® ª®¤ 
.L100 ld a,e ;ASCII ª®¤
ld (.L200+1),a
ld a,d ;¯®§¨æ¨®­­ë© ª®¤
ld de,(.Coordinate) ;⥪ã騥 ª®®à¤¨­ âë ªãàá®à 
cp 0x56 ;<Right>
jr nz,.L101
ld a,(.Descript+2) ;ª®«-¢® ª®«®­®ª
cp e
ld a,e
jr nz,$+3
xor a
inc a
ld (.Coordinate),a ;⥪ãé ï ª®«®­ª 
jp Keyb-3
.L101 cp 0x54 ;<Left>
jr nz,.L102
ld a,e ;⥪ãé ï ª®«®­ª 
cp 1
jr nz,$+6
ld a,(.Descript+2) ;ª®«-¢® ª®«®­®ª
inc a
dec a
ld (.Coordinate),a ;⥪ãé ï ª®«®­ª 
jp Keyb-3
.L102 ld hl,(.Descript)
cp 0x52 ;<Down>
jr nz,.L103
ld a,d ;⥪ãé ï áâப 
cp l
jr nz,.L104
ld hl,(ListAdr+2) ; ¤à¥á á«¥¤ãî饩 áâப¨
jp .NewLA1
.L104 inc a
ld (.Coordinate+1),a
jp Keyb-3
.L103 cp 0x58 ;<Up>
jr nz,.L105
ld a,d ;⥪ãé ï áâப 
cp h
jr nz,.L107
ld hl,(ListAdr) ; ¤à¥á ¢¥àå­¥© áâப¨ «¨á⨭£ 
call UpAdres ;¯à¥¤ë¤ã騩  ¤à¥á
jp .NewLA1
.L107 dec a
ld (.Coordinate+1),a
jp Keyb-3
.L105 cp 0x53 ;<PgDown>
jr nz,.L108
ld a,d ;⥪ãé ï áâப 
cp l
jr nz,.L106
call AdrListTabl
jp .NewLA1
.L106 ld a,l ;­  ¯®á«¥¤­îî áâபã
ld (.Coordinate+1),a
jp Keyb-3
.L108 cp 0x59 ;<PgUp>
jr nz,.L110
ld a,d ;⥪ãé ï áâப 
cp h
jr nz,.L109
dec l ;ª®«-¢® áâப - 1
ld b,l
ld hl,(ListAdr) ; ¤à¥á ¯¥à¢®© áâப¨
push bc
call UpAdres ;¯à¥¤ë¤ã騩  ¤à¥á
pop bc
djnz $-5
jp .NewLA1
.L109 ld a,h ;­  ¯¥à¢ãî áâபã
ld (.Coordinate+1),a
jp Keyb-3
.L110 cp 0x57 ;<Home>
jr nz,.L111
ld a,1
ld (.Coordinate),a ;¯¥à¢ ï ª®«®­ª 
jp Keyb-3
.L111 cp 0x51 ;<End>
jr nz,.L200
ld a,(.Descript+2) ;¯®á«¥¤­ïï ª®«®­ª 
ld (.Coordinate),a ;¯¥à¢ ï ª®«®­ª 
jp Keyb-3
;Ž¡à ¡®âª  ASCII ª®¤®¢
.L200 ld a,0
cp 0x0D ;<Enter>
jp nz,.NewPCAdr ;Keyb+6
.L201 ld b,0 ;¤«¨­  áâப¨ ¢¢®¤ 
ld hl,0 ;ª®®à¤¨­ âë áâப¨ ¢¢®¤ 
ld a,(.Coordinate)
dec a ;ª®«®­ª   ¤à¥á 
jr z,.InAdres
dec a ;ª®«®­ª  ¬¥âª¨
jr z,$+5
dec a ;ª®«®­ª  ª®¤  ª®¬ ­¤ë
jr z,.InCode
call InputLine
jp Keyb-3
.NewPCAdr cp "z" ;<Z>
jp nz,Keyb+6
call AdrListTabl-3 ;“áâ ­®¢¨âì ­®¢ë© PC
ld (Reg._PC),HL
jp Keyb-11
.InCode call InputLine ;¢¢®¤ ª®¤  ¢ 3 ª®«®­ª¥
jp c,Keyb-3 ;§ ¢¥à襭¨¥ ¢¢®¤  ¯® <ESC>
call PutCode
jr c,.L201 ;®è¨¡ª  ¢ ¢¥¤¥­­ëå ¤ ­­ëå
call AdrListTabl-3 ; ¤à¥á ⥪ã饩 áâப¨
ld de,PutCode.Buffer
ld a,(de) ;§ ¯¨áì ª®¤  ¢ ¯ ¬ïâì
call Ld_hl_a
inc de
inc hl
djnz $-6
jr .NewLA1+3
.InAdres call InputLine ;¢¢®¤  ¤à¥á  ¢ 1 ª®«®­ª¥
jp c,Keyb-3 ;§ ¢¥à襭¨¥ ¢¢®¤  ¯® <ESC>
call PutAdres
jr c,.L201 ;®è¨¡ª  ¢ ¢¥¤¥­­ëå ¤ ­­ëå
.NewLA ld a,(.Coordinate+1)
dec a
jr z,.NewLA1
ld b,a
push bc
call UpAdres ;¯à¥¤ë¤ã騩  ¤à¥á
pop bc
djnz $-5
.NewLA1 ld (ListAdr),hl
jp Keyb-11
.CtrlWin db 0 ;®ª­® ¤«ï Ctrl+"`"
.CtrlTabl ds 30 ;¡ãää¥à ¤«ï  ¤à ¡ëáâà ¯¥à¥å®¤ 
.Coordinate dw 0x0201 ;ªãàá®à (áâà/ª®« ªãàá®à )
.Descript:
dw 0x0114 ;¯¥à¢ ï/¯®á«¥¤­ïï áâப  ®ª­ 
db 4 ;ª®«-¢® ª®«®­®ª
db 0x1A ;N á⮫¡æ  ª®«®­ª¨
db 5 ;è¨à¨­  ª®«®­ª¨
db 0x20
db 14
db 0x2F
db 8
db 0x38
db 22
;[]=========================================================================[]
;[] ‚롮ઠ  ¤à¥á  «¨á⨭£  ¨§ â ¡«¨æë []
;[] ‚ë室: HL -  ¤à¥á «¨á⨭£  ¢ ⥪ã饩 áâப¥ []
;[]=========================================================================[]
ld a,(KList.Coordinate+1) ;­®¬¥à ⥪ã饩 áâப¨ «¨á⨭£ 
AdrListTabl:
dec a
add a,a ;*2
ld e,a
ld d,0
ld hl,ListAdr ;â ¡«¨æ   ¤à¥á®¢ «¨á⨭£ 
add hl,de ;áâப  ¢ â ¡«¨æ¥
ld a,(hl)
inc hl
ld h,(hl)
ld l,a ; ¤à¥á áâப¨ «¨á⨭£ 
ret
;[]=========================================================================[]
;[] ‚롮ઠ  ¤à¥á  æ¨ä஢ëå ª« ¢¨è ¨§ â ¡«¨æë []
;[] ‚室: D - ¯®§¨æ¨®­­ë© ª®¤ æ¨ä஢®© ª« ¢¨è¨ []
;[] BC -  ¤à¥á ­ ç «  â ¡«¨æë []
;[] ‚ë室: BC -  ¤à¥á ¢ â ¡«¨æ¥ []
;[] ”« £ NC - ­ ¦ â  ­¥ æ¨ä஢ ï ª« ¢¨è  []
;[]=========================================================================[]
AdrCtrlTabl:
ld a,d
and 01111111b ;á¡à®á áâ à襣® ¡¨â 
dec a
dec a
cp 0x0A ;¯à®¢¥àª  æ¨ä஢ëå ª« ¢¨è ¢¥àå­¥£® à鸞
ret nc
or a
scf
ret z ;¢ë室, ¥á«¨ "0"
inc bc
inc bc
inc bc
dec a
jr nz,$-4
ret
;[]=========================================================================[]
;[] <20>®«ã祭¨¥ ª®¤  ¨§ áâப¨ ¢¢®¤  []
;[] ‚室: C - ¤«¨­  áâப¨ ¢¢®¤  []
;[] ‚ë室: .Buffer - § å¢ ç¥­­ë¥ ¡ ©âë []
;[] B - ª®«¨ç¥á⢮ § å¢ ç¥­­ëå ¡ ©â []
;[] ä« £ C - ®è¨¡ª  []
;[]=========================================================================[]
PutCode:
ld de,InputLine.Buffer
ld hl,.Buffer
ld a,c
dec a
ret c ;­ã«¥¢ ï áâப 
inc a
srl a
ld b,a
jr z,.L3 ;®¡à ¡®âª  ®¤­®£® ᨬ¢®« 
ld c,a
ld a,0xC9 ;RET
jr nc,$+3
xor a ;NOP
ld (.L3-1),a
.L2 push hl
ld hl,0
ld a,2
call PutHex
ld a,l
pop hl
ret c ;¢ë室 á ®è¨¡ª®©
ld (hl),a
inc hl
dec c
jr nz,.L2
or a
ret
.L3 inc b
push hl
ld hl,0
ld a,1
call PutHex
ld a,l
pop hl
ret c ;¢ë室 á ®è¨¡ª®©
ld (hl),a
or a
ret
.Buffer ds 4
;[]=========================================================================[]
;[] <20>®«ã祭¨¥  ¤à¥á  ¨§ áâப¨ ¢¢®¤  []
;[] ‚室: C - ¤«¨­  áâப¨ ¢¢®¤  []
;[] ‚ë室: HL - ç¨á«® []
;[] ä« £ C - ®è¨¡ª  []
;[]=========================================================================[]
PutAdres:
ld a,c
dec a
ret c ;­ã«¥¢ ï áâப 
ld de,InputLine.Buffer
ld hl,0
ld a,(de)
call CapsLetter
cp "X" ;hex-ç¨á«®
jr z,$+4
cp "#" ;hex-ç¨á«®
ld a,c
jr nz,PutDec
inc de
inc de
dec a
dec a
ret c
inc a
PutHex exa
ld a,(de)
call Numeric ;æ¨äà ?
jr c,.L1
call CapsLetter ;« â.¡ãª¢ë ¢ ¢¥àå­¨© ॣ¨áâà
cp "F"+1
ccf
ret c ;¢ë室 á ®è¨¡ª®©
cp "A"
ret c ;¢ë室 á ®è¨¡ª®©
sub 0x07
.L1 sub 0x30
add hl,hl ;*16
add hl,hl
add hl,hl
add hl,hl
or l
ld l,a
inc de
inc de
exa
dec a
jr nz,PutHex
or a ;á¡à®á ä« £  C
ret
PutDec exa
ld a,(de)
call Numeric ;æ¨äà ?
ccf
ret c ;¢ë室 ¥á«¨ ­¥â
ld c,l
ld b,h
add hl,hl ;*10
add hl,hl
add hl,bc
add hl,hl
ld b,0
sub 0x30
ld c,a
add hl,bc
inc de
inc de
exa
dec a
jr nz,PutDec
or a ;á¡à®á ä« £  C
ret
;[]=========================================================================[]
;[] <20>஢¥àª  ª®¤  ᨬ¢®«  ­  ¯à¨­ ¤«¥¦­®áâì ª æ¨äà ¬ (ª®¤ë 0x30...0x39) []
;[] ‚室: A - ª®¤ ᨬ¢®«  []
;[] ‚ë室: ä« £ C - æ¨äà ; ”« £ NC - ­¥ æ¨äà  []
;[]=========================================================================[]
Numeric cp "0"
ccf
ret nc
cp 3Ah
ret
;[]=========================================================================[]
;[] <20>¥à¥¢®¤ ᨬ¢®«®¢ « â¨­áª®£®  «ä ¢¨â  a...z ¢ ¢¥àå­¨© ॣ¨áâà []
;[] ‚室: A - ª®¤ ᨬ¢®«  []
;[] ‚ë室: A - ª®¤ ᨬ¢®«  ¢ ¢¥àå­¥¬ ॣ¨áâॠ[]
;[]=========================================================================[]
CapsLetter cp "a" ;<"a"
ret c
cp "z"+1 ;>"z"
ret nc
and 11011111b ;¯à¥®¡à §®¢ ­¨¥ ᨬ¢®« 
ret
InputLine1 push hl
push bc
call CursorSet
pop bc
pop hl
jr InputLine
;[]=========================================================================[]
;[] ‚¢®¤ áâப¨ ᨬ¢®«®¢ á ª« ¢¨ âãàë []
;[] ‚室: B - ¤«¨­  áâப¨ ¢¢®¤  []
;[] HL - ª®®à¤¨­ âë ªãàá®à  []
;[] ‚ë室: ä« £ C - <Esc> ä« £ NC - <Enter> []
;[] C - ¤«¨­  ¢¢¥¤¥­­®© áâப¨, ¥á«¨ <Enter> []
;[]=========================================================================[]
InputLineEd:
ld a,(Color.InLineEd) ;梥â áâப¨ ¢¢®¤ 
ld c,a
xor a
jr InputLine+6
InputLine:
ld a,(Color.InLine) ;梥â áâப¨ ¢¢®¤ 
ld c,a
ld a,On
ld (.EntEnd),a
ld a,0xC3 ;ª®¤ JP
ld (.L15),a
ld (CursPos),hl
ld (.Coordinate),hl
ld hl,.Pos
xor a ;⥪ãé ï ¯®§¨æ¨ï
ld (hl),a
inc hl
ld (hl),c ;梥â
inc hl
ld (hl),b ;¤«¨­  áâப¨ । ªâ¨à®¢ ­¨ï
inc hl ;­ ç «® ¡ãä¥à  । ªâ¨à®¢ ­¨ï
ld de,CursorSet.Buffer ;¡ãä¥à áâப¨ ¯®¤ ªãàá®à®¬
;ld c,a ;®ªà áª  áâப¨ । ªâ¨à®¢ ­¨ï
.L1 ld a,(de)
ld (hl),a
inc hl
inc de
ld (hl),c
inc hl
inc de
djnz .L1
call .PrintInLine ;­ ¯¥ç â âì áâபã
ld a,(.EntEnd)
or a
call nz,.EndString ;ªãàá®à ¢ ª®­¥æ áâப¨
.L100 ld a,On ;¢ª«îç¨âì ¯à®£à ¬ ªãàá®à
ld (CursOnOff),a
ld hl,.L100
push hl ; ¤à¥á ¢®§¢à â 
ld c,Dss.ScanKey ;á®áâ®ï­¨¥ ª« ¢¨ âãàë
rst DssRst
jr z,$-3
cp 0x20 ;¥áâì ASCII-ª®¤
jr c,.L3
push af
ld a,(.Pos)
exa
ld hl,.Color ;⥪ã騩 梥â áâப¨ ¢¢®¤ 
ld a,(Color.InLine)
cp (hl)
call z,.ClearInLine
call z,.HomeString
call .NextPos ;­  ¢ë室¥ ¢ HL  ¤à¥á .Pos
jr z,.L12
ld a,(CursInsOvr) ;०¨¬ Ins/Ovr
or a
jr nz,.L12 ;¯¥à¥å®¤ ¥á«¨ Ovr
ld a,(.Len)
ld e,a
dec a ;¤«¨­  áâப¨ - 1
add a,a
ld b,0
ld c,a
ld d,(hl) ;¯®§¨æ¨ï ¯¥ç â¨ ᨬ¢®« 
ld hl,.Buffer
add hl,bc ;ª®­¥æ ¡ãä¥à 
inc hl
ld a,e
sub d ;ª®«-¢® ᤢ¨£ ¥¬ëå ᨬ¢®«®¢
add a,a
ld c,a
ld d,h
ld e,l
dec hl
dec hl
lddr ;à §¤¢¨¦ª  áâப¨
.L12 exa
add a,a
ld b,0
ld c,a
ld hl,.Buffer
add hl,bc ; ¤à¥á ¢ ¡ãä¥à¥
pop af
ld (hl),a ;ᨬ¢®« ¢ ¡ãä¥à
call ResCurs
.L15 jp .PrintInLine
jr .L14
.L3 cp 0x1B ;<Esc>
jr nz,.L13
call ResCurs
pop hl ;¢®áâ ­®¢¨âì á⥪
scf
ret
.L13 cp 0x0D ;<Enter>
jr nz,.L2
ld a,On
ld (.EntEnd),a
call ResCurs
.L14 pop hl ;¢®áâ ­®¢¨âì á⥪
call .EndPos ;¤«¨­  ¢¢¥¤¥­­®© áâப¨
ret
.L2 ld a,d
cp 0x4F ;<Del>
jr nz,.L9
call ResCurs
ld hl,.Color ;⥪ã騩 梥â áâப¨ ¢¢®¤ 
ld a,(Color.InLine)
cp (hl)
call z,.ClearInLine
.L11 ld hl,.Pos
ld a,(hl) ;¯®§¨æ¨ï ªãàá®à 
add a,a
ld e,a
inc hl
inc hl
ld a,(hl) ;¤«¨­  áâப¨
dec a
add a,a
sub e ;¯à®¢¥àª  ª®­æ  áâப¨
ld c,a
ld b,0
ld d,b
inc hl ;­ ç «® ¡ãä¥à 
add hl,de ; ¤à¥á ªãàá®à 
push hl
pop de
inc hl
inc hl
jr z,$+4 ;¥á«¨ ¢ ª®­æ¥ áâப¨
ldir
ld a," "
ld (de),a ;¯®á«¥¤­¨© ᨬ¢®«
jp .PrintInLine
.L9 cp 0x0E ;<BackSp>
jr nz,.L10
call ResCurs
call .ColorInLine ;ᬥ­¨âì 梥â áâப¨
ld hl,.Pos
ld a,(hl) ;¯®§¨æ¨ï ªãàá®à 
or a
jp z,.PrintInLine ;¥á«¨ ¢ ­ ç «¥ áâப¨
dec (hl) ;㬥­ìè¨âì ¯®§¨æ¨î
ld hl,CursPos
dec (hl) ;ªãàá®à ¢«¥¢®
jr .L11
.L10 cp 0x50 ;<Ins>
jr nz,.L5
ld a,(CursInsOvr)
cpl
ld (CursInsOvr),a
ret
.L5 cp 0x56 ;<Right>
jr nz,.L6
call ResCurs
call .ColorInLine ;ᬥ­¨âì 梥â áâப¨
call z,.PrintInLine
call .EndPos
ret z
ld a,(.Pos)
cp c
ret nc
jp .NextPos
.L6 cp 0x54 ;<Left>
jr nz,.L7
call ResCurs
call .ColorInLine ;ᬥ­¨âì 梥â áâப¨
call z,.PrintInLine
ld hl,.Pos ;¯®§¨æ¨ï ªãàá®à 
ld a,(hl)
or a
ret z
dec (hl)
ld hl,CursPos ;ª®®à¤¨­ âë ¯à®£à ¬ ªãàá®à 
dec (hl)
ret
.L7 cp 0x57 ;<Home>
jr nz,.L8
call ResCurs
call .ColorInLine ;ᬥ­¨âì 梥â áâப¨
call z,.PrintInLine
.HomeString ld hl,.Pos ;¯®§¨æ¨ï ªãàá®à 
ld a,(hl)
or a
ret z
ld a,(.Coordinate) ;ª®®à¤¨­ âë ­ ç «  áâப¨
ld (CursPos),a
xor a
ld (hl),a ;®¡­ã«¨âì ¯®§¨æ¨î ¯¥ç â¨
ret
.L8 cp 0x51 ;<End>
ret nz
call ResCurs
call .ColorInLine ;ᬥ­¨âì 梥â áâப¨
call z,.PrintInLine
.EndString call .EndPos
ret z
ld a,(.Len)
; dec a ;¤«¨­  áâப¨ ¢¢®¤  - 1
sub c ;§ ¯®«­¥­  ¯®«­®áâìî?
jr nz,$+3
dec c
ld hl,.Pos
ld (hl),c ;¯®§¨æ¨ï ¢ ª®­æ¥ áâப¨
ld a,(.Coordinate)
add a,c
ld (CursPos),a ;­®¢ ï ¯®§¨æ¨ï ¯à®£à ¬ ªãàá®à 
ret
.PrintInLine ld ix,.Buffer ;¡ãä¥à áâப¨
ld a,(.Len)
ld l,a
ld h,1 ;à §¬¥àë ¡ãä¥à 
ld de,(.Coordinate) ;ª®®à¤¨­ âë ¢ íªà ­¥
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
.ClearInLine ld hl,.Len ;®ç¨á⪠ áâப¨ ¢¢®¤ 
ld b,(hl) ;¤«¨­  áâப¨ ¢¢®¤ 
ld a," " ;¯à®¡¥«
inc hl ;­ ç «® ¡ãä¥à  áâப¨
ld (hl),a
inc hl
djnz $-3
xor a ;¯®§¨æ¨ï ¯¥ç â¨
ld (.Pos),a
exa
ld a,(.Coordinate)
ld (CursPos),a
jr $+10
.ColorInLine ld hl,.Color ;®ªà áª  ¢ ®á­®¢­®© 梥â
ld a,(Color.InLine)
cp (hl)
ret nz
ld a,(Color.InLineEd) ;梥â áâப¨ ¢¢®¤ 
ld (.Color),a
ld hl,.Len ;¤«¨­  áâப¨ ¢¢®¤ 
ld b,(hl)
inc hl
inc hl
ld (hl),a
inc hl
djnz $-3
ret
.EndPos ld hl,.Buffer ;¯®¨áª ¯®§¨æ¨¨ ¯®á«¥¤. ᨬ¢®« 
ld a,(.Len)
ld c,a
dec a
add a,a
ld e,a
ld d,0
add hl,de
ld a,(hl)
dec hl
dec hl
cp " " ;¨é¥¬ ª®­¥æ áâப¨
ret nz
dec c
jr nz,$-7
ret
.NextPos ld hl,.Pos ;à áç¥â á«¥¤ãî饩 ¯®§¨æ¨¨
ld a,(.Len)
dec a
cp (hl)
jr nz,.L16
ld a,(.EntEnd) ;§ ª ­ç¨¢ âì ¯® ENTER
inc a
ret z ;¯®á«¥¤­ïï ¯®§¨æ¨ï ¢ áâப¥
ld a,0xCD ;ª®¤ CALL
ld (.L15),a
ret
.L16 inc (hl) ;㢥«¨ç¥­¨¥ ¯®§¨æ¨¨
ld a,(CursPos) ;ª®®à¤¨­ âë ¯à®£à ¬ ªãàá®à 
inc a
ld (CursPos),a
ret
;[]=========================================================================[]
;[] Š®¯¨à®¢ ­¨¥ ¨§ ¡ãä¥à  áâப¨ ¢¢®¤  []
;[]=========================================================================[]
;‚室:
;DE -  ¤à¥á ­ §­ ç¥­¨ï
;C - ¤«¨­  áâப¨
.FromBuffer ld hl,.Buffer
ld b,0
.FB1 ld a,(hl)
ld (de),a
inc hl
inc hl
inc de
dec c
jr nz,.FB1
ret
;[]=========================================================================[]
;[] Š®¯¨à®¢ ­¨¥ ¢ ¡ãä¥à áâப¨ ¢¢®¤  []
;[]=========================================================================[]
;‚室:
;HL -  ¤à¥á áâப¨
;C - ¤«¨­  áâப¨
.ToBuffer ld de,.Buffer
.TB1 ld a,(hl)
ld (de),a
inc de
inc de
inc hl
dec c
jr nz,.TB1
ret
.EntEnd db On ;ä« £ ®ª®­ç ­¨ï áâப¨ ENTER
.Coordinate dw 0 ;­ ç «® áâப¨ ¢ íªà ­¥
;¯®á«¥¤®¢ â¥«ì­®áâì ¯¥à¥¬¥­­ëå ­¥ ¨§¬¥­ïâì!
.Pos db 0 ;¯®§¨æ¨ï ªãàá®à  ¢ áâப¥
.Color db 0 ;梥â áâப¨ ¢¢®¤ 
.Len db 0 ;¤«¨­  áâப¨ ¢¢®¤ 
.Buffer ds 22*2 ;¡ãä¥à áâப¨ ¢¢®¤ 
;[]=========================================================================[]
;[] <20>ணࠬ¬­®¥ ᮧ¤­¨¥ ¬¨£ î饣® ªãàá®à  []
;[]=========================================================================[]
;======== <20>®¤£®â®¢ª  ¤®¯®«­¨â¥«ì­®£® §­ ª®£¥­¥à â®à  ========
PreparChar:
ld de,OrgAdr-0x100 ;¡ãä¥à ¤«ï 2kB §­ ª®£¥­¥à â®à 
ld c,Bios.Win_Get_ZG ;¯®«ãç¨âì á¨áâ. §­ ª®£¥­¥à â®à
rst BiosRst
ld hl,OrgAdr-0x100+7*256
ld bc,0x00FF
ld (hl),c
inc hl
djnz $-2
ld de,OrgAdr-0x100 ;ãáâ.§­ ª®£¥­¥à â®à 0x5B
ld c,Bios.Win_Set_ZG
ld a,0x5B
rst BiosRst
ld hl,(0039h) ;ãáâ ­®¢ª  ¢¥ªâ®à  (¤«ï ¬¨£ ­¨ï ªãàá®à )
ld (Rst38.Vect+1),hl
ld hl,Rst38
ld (0039h),hl
ret
Rst38 di ;¢¥ªâ®à ªãàá®à 
push iy
push ix
push hl
push de
push bc
push af
exx
exa
push hl
push de
push bc
push af
call Clock
ld a,(CursOnOff)
or a
call nz,CuttingCurs
pop af
pop bc
pop de
pop hl
exx
exa
pop af
pop bc
pop de
pop hl
pop ix
pop iy
.Vect jp 0x0000 ; ¤à¥á á¨áâ. ¢¥ªâ®à  RST 38
;======== Ž¡à ¡®âª  ¯à®£à ¬¬­®£® ªãàá®à  ========
CuttingCurs ld a,(TimerFlash) ;¯ ã§  ¬¨£ ­¨ï
dec a
call z,.L1
ld (TimerFlash),a
ret
.L1 ld a,(CursPutRes)
cpl
ld (CursPutRes),a
ld de,(CursPos)
ld (ResCurs.L1+1),de
or a ;ä« £ Put / Res
jr z,.L3 ;ãáâ ­®¢ª  ªãàá®à 
;¨­ ç¥ á¡à®á ªãàá®à 
ld hl,(CursSymb) ;ᨬ¢®« ¨ ¥£® 梥â
sub a ;á¡à®á id ®ª­ 
ld b,SysSymb ;á¨á⥬­ë© §­ ª®£¥­¥à â®à
ld c,Bios.Win_Put_Sym ;¯®«®¦¨âì ᨬ¢®«
rst BiosRst
ld a,PauseFlash ;¯ ã§  ¬¨£ ­¨ï
ret
.L3 ld c,Bios.Win_Get_Sym ;¯®«ãç¨âì ᨬ¢®«
sub a ;á¡à®á id ®ª­ 
rst BiosRst
ld (CursSymb),hl ;ᨬ¢®« ¨ ¥£® 梥â
ld de,(CursPos) ;¯®§¨æ¨ï ¯¥ç â¨
ld a,(CursInsOvr) ;ä« £ ०¨¬  Ins / Ovr
or a
jr z,.L4 ;०¨¬ ¢áâ ¢ª¨
;¨­ ç¥ ०¨¬ § ¬¥­ë
ld a,h
rlca
rlca
rlca
rlca
ld h,a
sub a ;á¡à®á id ®ª­ 
ld b,SysSymb ;á¨á⥬­ë© §­ ª®£¥­¥à â®à
; ld l,0xDC ;ªãàá®à ०¨¬  § ¬¥­ë
ld c,Bios.Win_Put_Sym ;ᨬ¢®« ­  íªà ­
rst BiosRst
ld a,PauseFlash ;¯ ã§  ¬¨£ ­¨ï
ret
.L4 sub a ;á¡à®á id ®ª­ 
ld b,0x5B ;¬®¤¨ä. §­ ª®£¥­¥à â®à
ld c,Bios.Win_Put_Sym ;ᨬ¢®« ­  íªà ­
rst BiosRst
ld a,PauseFlash ;¯ ã§  ¬¨£ ­¨ï
ret
;======== <20>ਭ㤨⥫ì­ë© á¡à®á ªãàá®à  ========
ResCurs ld a,(CursOnOff)
or a
ret z ;ªãàá®à ­¥ ãáâ ­®¢«¥­
push hl
ld a,On
ld (CursPutRes),a
inc a
ld (CursOnOff),a
ld a,1 ;¯ ã§  ¬¨£ ­¨ï
ld (TimerFlash),a
.L1 ld de,0 ;¯®á«¥¤­¨¥ ª®®à¤¨­ âë ªãàá®à 
ld hl,(CursSymb)
ld bc,0x1B00+Bios.Win_Put_Sym
sub a ;á¡à®á¨âì id ®ª­ 
rst BiosRst
pop hl
ret
CursOnOff db Off ;ä« £ ªãàá®à  00-¢ëª«/FF-¢ª«
CursPutRes db On ;ä« £ 00-Res/FF-Put
CursInsOvr db Ins ;ä« £ 00-Ins/FF-Ovr
TimerFlash db 1 ;â ©¬¥à
CursPos dw 0 ;¯®§¨æ¨ï ªãàá®à 
CursSymb dw 0 ;ᨬ¢®« ¯®¤ ªãàá®à®¬