📄 calcedit.asm
字号:
MACRO Clear_Mem(%1,%2,%3)
lda #%3
sta PP
lda #%1 ;0807
sta DP
1$:
lda #00h
sta i
incdp ;Clear page 0 (02h to 0cfh)
lda DP
cmpe #%2
brnz 1$
ENDM
MACRO PP2One()
lda #01h
sta PP
ENDM
MACRO PP2Zero()
lda #00h
sta PP
ENDM
.area caledit_use(data,abs)
;------------------------------------------------------------------------
;------------------------------------------------------------------------
.org 0x115 ;0x11a;0x1f0
Insetflag:: .ds 1
chkFlag:: .ds 1
chkDP:: .ds 1
editFlag:: .ds 1
editDP:: .ds 1
;------------------------------------------------------------------------
;------------------------------------------------------------------------
.area forcaledit(code)
Delmode::
PP2One()
lda .SetFlag
anda #BLANKCHK
brnz Delmodeend
lda .SFlag
anda #ACCHK
brnz Delmodeend
PP2One()
lda0 .DataDP
cmpe #C_ZERO
brnz Candel
br Delmodeend
Candel:
lda0 .SFDP
cmpe #C_ZERO
brnz Del1go
br Del2go
Del1go:
call ClrPP3
call Movepage
PP2One()
lda0 .SFDP
sta cmpDP
sta editDP
lda #C_TWO
sta cmpPP
call Decplace
PP2One()
lda cmpDP
sta chkDP
sta0 .SFDP
call clrp2back
PP2One()
lda0 .DataDP
sta cmpDP
lda #C_THREE ;PP2 IS CLR BACK,SO CHK PP3
sta cmpPP
call Decplace
lda0 .SFDP
cmpe cmpDP
brnz keepchkadd
lda0 .SFDP
sta0 .DataDP
lda #C_ZERO
sta0 .SFDP
br Delmodeend1
keepchkadd:
PP2One()
lda editDP
sta cmpDP
movewordloop:
call movebehind
PP2One()
lda0 .DataDP
cmpe cmpDP
brnz movewordloop
PP2One()
lda chkDP
sta0 .DataDP
PP2One()
lda0 .SFDP
sta cmpDP
lda #C_TWO
sta cmpPP
call Addplace
lda cmpDP
sta0 .SFDP
br Delmodeend1
Del2go:
Del2go2:
PP2One()
lda0 .DataDP
sta cmpDP
lda #C_TWO
sta cmpPP
call Decplace
lda0 .DataDP
deca
sta DP
lda #C_TWO
sta PP
lda #C_ZERO
sta I
PP2One()
lda cmpDP
sta0 .DataDP
br Delmodeend1
Delmodeend1:
call ClrPP3
br Rightchk
Delmodeend:
PP2One()
ret
;------------------------------------------------------------------------
;------------------------------------------------------------------------
Movepage:
PP2One()
lda #C_ZERO
sta cmpDP
moveloop:
PP2One()
lda #C_TWO
sta cmpPP
lda cmpDP
sta DP
lda cmpPP
sta PP
lda I
sta0 .DataBuf
PP2One()
lda #C_THREE
sta cmpPP
lda cmpDP
sta DP
lda cmpPP
sta PP
lda0 .DataBuf
sta I
PP2One()
lda0 .DataDP
cmpe cmpDP
brz Movepageend
lda cmpDP
inca
sta cmpDP
br moveloop
Movepageend:
ret
;------------------------------------------------------------------------
;------------------------------------------------------------------------
movebehind:
PP2One()
lda #C_THREE
sta cmpPP
call Addplace
PP2One()
lda font
sta0 .DataBuf
lda chkDP
sta DP
inca
sta chkDP
lda #C_TWO
sta PP
lda0 .DataBuf
sta I
movebehindend:
ret
;------------------------------------------------------------------------
;------------------------------------------------------------------------
Replace::
call ClrPP3
call Movepage
PP2One()
lda0 .SFDP
sta editDP
lda0 .SFDP
sta cmpDP
lda #C_TWO
sta cmpPP
call Decplace
lda cmpDP
sta0 .SFDP
call clrp2back
Replaceset:
lda0 .SFDP
sta DP
inca
sta0 .SFDP
lda #C_TWO
sta PP
lda0 .KeyPos
cmpe #TENCODE
brnz 0$
lda #C_ZERO
0$: sta I
PP2One()
lda0 .DataDP
cmpe editDP
brnz 1$
lda0 .SFDP
sta0 .DataDP
lda #C_ZERO
sta0 .SFDP
br rpmodeend1
1$:
PP2One()
lda0 .SFDP
sta chkDP
lda editDP
sta cmpDP
wordrploop:
call movebehind
PP2One()
lda0 .DataDP
cmpe cmpDP
brnz wordrploop
PP2One()
lda0 .SFDP
sta cmpDP
lda #C_TWO
sta cmpPP
call Addplace
lda cmpDP
sta0 .SFDP
PP2One()
lda chkDP
sta0 .DataDP
br rpmodeend1
rpmodeend1:
call ClrPP3
br Rightchk
rpmodeend:
ret
;------------------------------------------------------------------------
;------------------------------------------------------------------------
Insetmode::
lda0 .KeyPos
cmpe #DELKEY
brz Insdelgo
cmpe #C_ZERO
brz Insetmodeend
cmpe #INSKEY
brz Insetmodeend
cmpe #INSKEY
brz Insetmodeend
cmpe #LOGICKEY
brz Insetmodeend
br Inswordgo
Insdelgo:
PP2One()
lda0 .SFDP
sta cmpDP
lda #C_TWO
sta cmpPP
call Decplace
lda cmpDP
cmpe #C_ZERO
brnz Delfront
br Delback
Delfront:
call ClrPP3
call Movepage
PP2One()
lda0 .SFDP
sta cmpDP
lda #C_TWO
sta cmpPP
call Decplace
PP2One()
lda cmpDP
sta editDP
call Decplace
PP2One()
lda cmpDP
sta chkDP
sta0 .SFDP
call clrp2back
PP2One()
lda editDP
sta cmpDP
frontloop:
call movebehind
PP2One()
lda0 .DataDP
cmpe cmpDP
brnz frontloop
PP2One()
lda chkDP
sta0 .DataDP
PP2One()
lda0 .SFDP
sta cmpDP
lda #C_TWO
sta cmpPP
call Addplace
lda cmpDP
sta0 .SFDP
br Insetmodeend1
Delback:
call ClrPP3
call Movepage
call ClrPP2
PP2One()
lda0 .DataDP
sta cmpDP
lda #C_TWO
sta cmpPP
call Decplace
lda cmpDP
cmpe #C_ZERO
brnz keepDelback
PP2One()
lda cmpDP
sta0 .DataDP
call .DispInitial
br Insetmodeend
keepDelback:
lda #C_ZERO
sta chkDP
call clrp2back
lda #C_ZERO
sta cmpDP
lda #C_TWO
sta cmpPP
call Addplace
backloop:
call movebehind
PP2One()
lda0 .DataDP
cmpe cmpDP
brnz backloop
PP2One()
lda chkDP
sta0 .DataDP
br Insetmodeend1
Inswordgo:
PP2One()
lda0 .DataDP
cmpe #STEPCHK
brc Insetmodeend
call ClrPP3
call Movepage
PP2One()
lda0 .SFDP
sta cmpDP
lda #C_TWO
sta cmpPP
call Decplace
lda cmpDP
cmpe #C_ZERO
brnz nothead
lda #C_ZERO
sta0 .SFDP
Inswordclrp2:
call ClrPP2
nothead:
PP2One()
lda cmpDP
sta editDP
sta0 .SFDP
call clrp2back
setbyte:
lda0 .SFDP
sta DP
inca
sta0 .SFDP
lda #C_TWO
sta PP
lda0 .KeyPos
cmpe #TENCODE
brnz 0$
lda #C_ZERO
0$: sta I
PP2One()
lda0 .SFDP
sta chkDP
lda editDP
sta cmpDP
wordloop:
call movebehind
PP2One()
lda0 .DataDP
cmpe cmpDP
brnz wordloop
PP2One()
lda0 .SFDP
sta cmpDP
lda #C_TWO
sta cmpPP
call Addplace
lda cmpDP
sta0 .SFDP
PP2One()
lda chkDP
sta0 .DataDP
br Insetmodeend1
Insetmodeend1:
call ClrPP3
br Rightchk
Insetmodeend:
ret
;------------------------------------------------------------------------
;------------------------------------------------------------------------
clrp2back:
PP2One()
lda0 .SFDP
sta cmpDP
lda cmpDP
sta DP
lda #C_TWO
sta PP
lda #C_ZERO
sta I
nextclr:
PP2One()
lda0 .DataDP
cmpe cmpDP
brz clrp2backend
lda cmpDP
inca
sta cmpDP
sta DP
lda #C_TWO
sta PP
lda #C_ZERO
sta I
br nextclr
clrp2backend:
ret
;------------------------------------------------------------------------
;------------------------------------------------------------------------
ClrPP2::
lda #04fh
sta0 Temp4
lda #00h
sta DP
lda #02h
sta PP
br Clear_MemAll
;------------------------------------------------------------------------
;------------------------------------------------------------------------
ClrPP3::
lda #04fh
sta0 Temp4
lda #00h
sta DP
lda #03h
sta PP
;------------------------------------------------------------------------
;------------------------------------------------------------------------
Clear_MemAll::
1$:
lda #C_ZERO
sta i
incdp ;Clear any page at 00h-ffh
lda0 Temp4
cmpe DP
brnz 1$
ret
;------------------------------------------------------------------------
;------------------------------------------------------------------------
.include "caldisp.inc"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -