📄 muedit.asm.bak
字号:
MOV pasteBuffer[SI],AL
INC SI
INC DL
poscur DH,DL
LOOP copyLoop
MOV pasteBuffer[SI],24h
exitCopyEdit:
recover
RET
CopyEdit ENDP
cutEdit PROC
saveE
CMP copyFlag,0
JZ exitCutedit
MOV pasteFlag,1
MOV CL,pasteNum
MOV CH,0
poscur rowbak,columnbak
MOV DH,rowbak
MOV DL,columnbak
MOV SI,0
cutLoop:
readchar
MOV pasteBuffer[SI],AL
INC SI
INC DL
poscur DH,DL
LOOP cutLOOP
MOV pasteBuffer[SI],24h
exitCutEdit:
posgets
poscur rowbak,columnbak
MOV DH,rowbak
MOV DL,columnbak
CALL BackDisplay
LOOPclearCut: ;此循环是为了恢复反显文本
MOV AL,20h
MOV BX,0017h
MOV CX,1
MOV AH,09h
INT 10h
DEC SI
INC DL
poscur DH,DL
CMP SI,0
JNZ LOOPclearCut
CALL savedisplay
poscur row,column
recover
RET
cutEdit ENDP
pasteEdit PROC
saveE
CALL backdisplay
poscur row,column
CMP pasteFlag,0
JZ exitPasteEdit
posgets
MOV CL,pasteNum
MOV CH,0
MOV SI,0
LOOPPaste:
CMP column,79
JNZ continuePaste
MOV column,1
INC row
poscur row,column
continuePaste:
INC column
MOV DL,pastebuffer[SI]
INC SI
MOV AH,2
INT 21h
LOOP LOOPPaste
CALL saveDisplay
mov modifyFlag,0
exitPasteEdit:
recover
RET
pasteEdit ENDP
;显示帮助
showmenuh PROC
saveE
posgets
CALL SaveDisplay
win 10,15,16,67,07h
win 9,14,15,66,0E4h
poscur 10,5
show mess16
poscur 11,5
show mess17
poscur 12,5
show mess18
poscur 13,5
show mess19
win 14,15,14,66,0EDh
poscur 14,5
show mess20
GEtchar
CALL BackDisplay
poscur row,column
recover
RET
showmenuh ENDP
;*****播放第一首歌*********
music1play PROC
saveE
CALL menuHide
CALL BackDisplay
LEA SI,music
LEA BP,time
freq1:
MOV DI,[SI]
CMP DI,0
JE endmusic1
CALL soundf1
ADD SI,2
ADD BP,2
JMP freq1
endmusic1:
MOV AL,48h
OUT 61h,AL
EXITMuP1:
recover
RET
music1play ENDP
soundf1 PROC
saveE
MOV AL,0b6h ;位组合格式:通道2,两字节计数,模式3,二进制码
OUT 43h,AL
MOV DX,12h
MOV AX,348ch
DIV DI ;(di)=频率
OUT 42h,AL ;频率计数值送通道二
MOV AL,AH
OUT 42h,AL
IN AL,61h
MOV AH,AL
OR AL,3
OUT 61h,AL ;关闭扬声器
MOV BL,[BP]
up:
MOV CX,16572
CALL waitf1
DEC BL
JNZ up
exitSoundf1:
recover
RET
soundf1 ENDP
waitf1 PROC
saveE
waitf2:
IN AL,61h
AND AL,10h
CMP AL,AH
JE waitf2
MOV AH,AL
LOOP waitf2
recover
RET
waitf1 ENDP
music2play PROC
saveE
CALL menuHide
CALL BackDisplay
recover
RET
music2play ENDP
scaleplay PROC
saveE
LEA SI,music1
LEA BP,time1
freq2:
MOV DI,[SI]
CMP DI,0
JE endmusic2
MOV BX,DS:[BP]
CALL soundy
ADD SI,2
ADD BP,2
JMP freq2
endmusic2:
MOV AL,48h
OUT 61h,AL
JMP exit1
exit1:
recover
RET
scaleplay ENDP
soundy PROC
saveE
wait1:
MOV CX,2801
delay:
LOOP delay
DEC BX
JNZ wait1
MOV AL,0b6h
OUT 43h,AL
MOV DX,12h
MOV AX,348ch
DIV DI
OUT 42h,AL
MOV AL,AH
OUT 42h,AL
IN AL,61h
MOV AH,AL
OR AL,3
OUT 61h,AL
CALL waitf1
recover
RET
soundy ENDP
gunplay PROC
saveE
MOV CX,50d
newshoot:
PUSH CX
CALL shoot
MOV CX,4000h
silent:
LOOP silent
POP CX
LOOP newshoot
MOV AL,48h
OUT 61h,AL
recover
RET
gunplay ENDP
shoot PROC
saveE
MOV DX,140h
MOV BX,200h
IN AL,61h
AND AL,11111100b ;关断定时器通道2的门控
sound:
XOR AL,2d ;触发61h端口的第一位
OUT 61h,AL
ADD DX,9248h
MOV CL,3
ROR DX,CL
MOV CX,DX
ADD CX,1ffh
OR CX,10
waits:
LOOP waits
DEC BX
JNZ sound
AND AL,11111100b
OUT 61h,AL ;恢复61h端口
recover
RET
shoot ENDP
;*********按下新建菜单时的处理函数******
;入口参数有:musicInt:文件数量,一进入即增加1
;先隐藏菜单,并用默认名创建文件,文件名根据musicInt来自动判断并更改
;最后调用函数:editFile进入编辑状态.
filenew PROC
saveE
MOV modifyFlag,0
CALL menuHide
win 1,28,1,56,70h ;写文件名
MOV SI,8
INC musicInt
INC musicname[SI]
poscur 1,35
show musicname
win 2,1,23,78,017h ;工作区为蓝底白字
MOV row,2
MOV column,1
poscur row,column
CALL EDItfile
recover
RET
filenew ENDP
;*********最重要的函数之一**********
;可能被fileNew函数、fileOpen函数调用
;获取键盘输入,按照输入跳到不同的分支,
;每个分支都调用相应的函数来处理.
;注意不同的分支处理缓冲区的方式也不同
;处理函数是相应的键名+K,以区别以其标号
EDItfile PROC
saveE
MOV BX,0
CHargetF:
posgets
poscur 24,0
show mess15
;根据modifyFlag的值来显示是否已修改的信息.
poscur 24,43
CMP modifyFlag,0
JZ MODifyMess
show mess14
JMP showedMess
MODifyMess:
show mess13
showedMess:
poscur row,Column
CALL showRC
;从键盘读字符 ah=扫描码 al=字符码
MOV AH,12h
INT 16h
AND AL,00000011b
JZ notshift1
posgets
MOV rowbak,DH
MOV columnbak,DL
shift:
MOV CLearFlag,1
GEtchar
PUSH AX
MOV AH,12h
INT 16h
AND AL,00000011b
JZ exitshift
POP AX
; CMP AH,48h ;上;待实现
; JZ ups
; CMP AH,50h ;下;待实现
; JZ downs
CMP AH,4bh ;左
JZ leftS
CMP AH,4dh ;右
JZ rightS
JMP exitShift
notshift1: JMP NOTshift
exitRet13: JMP exitRet
ups: CALL upSProc
JMP shift
downs: CALL downSProc
JMP shift
LEfts: CALL LEftSProc ;S表示:selet
JMP shift
rights: CALL rightsProc ;
JMP shift
exitShift:
POP AX
JMP NOTshift2
NOTshift:
Getchar
NOTshift2:
posgets
LEA DX,buffer
MOV buffer[BX],AL
INC totalChars
INC BX
CMP AH,48h ;上
JZ upk1
CMP AH,50h ;下
JZ down1
CMP AH,4bh ;左
JZ left1
CMP AH,4dh ;右
JZ right1
CMP AH,1ch ;回车
JZ enter1
CMP AH,47h ;home
JZ home1
CMP AH,4fh ;end
JZ _END1
CMP AH,0eh ;backspace
JZ bak_sp1
CMP AH,53h
JZ del1
CMP AH,3bh
JZ showFilen1
CMP AH,3ch
JZ showPlayn1
CMP AH,3Dh
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -