init
This commit is contained in:
137
source/fcquit.asm
Normal file
137
source/fcquit.asm
Normal file
@@ -0,0 +1,137 @@
|
||||
;PS: File Save with UFT-8==========================================================
|
||||
; FCDOS - Free Chinese DOS
|
||||
; fcquit.asm (卸载驻留模块)
|
||||
;--------------------------------------------------------------------------------
|
||||
; 原始信息:
|
||||
; 原始代码发布于:
|
||||
; https://www.cn-dos.net/forum/viewthread.php?tid=24334&fpage=1
|
||||
; 作者:
|
||||
; Macadd <macadd@163.com>
|
||||
; 中国DOS联盟论坛 https://www.cn-dos.net/forum/viewpro.php?uid=58572
|
||||
;
|
||||
; https://sourceforge.net/projects/fcdos/
|
||||
; 作者:
|
||||
; fc_lijian <fc_lijian@users.sourceforge.net>
|
||||
;
|
||||
; 原始版本:v1.1.0
|
||||
; 许可证:
|
||||
; https://www.cn-dos.net/forum/post.php?action=reply&fid=17&tid=24334&repquote=154336
|
||||
; Macadd:都是汇编写的COM文件,文件不大,在DOS下用DEBUG看就可以了。 2006-11-27 09:37
|
||||
;--------------------------------------------------------------------------------
|
||||
; 版本:重构版 v1.0
|
||||
; 版权所有 (c) fc_lijian@users.sourceforge.net
|
||||
; 重构版本 (c) 2026 Tarime Argus
|
||||
;
|
||||
; 本文件是FCDOS项目的汇编源码重构版。
|
||||
; 原始只有二进制COM文件,现通过反汇编恢复为可维护的汇编代码。
|
||||
; 本项目基于开源原则发布,具体许可证遵循原始项目。
|
||||
;
|
||||
; 功能:退出FCDOS中文平台,清除驻留状态。
|
||||
; 使用:fcquit.com
|
||||
;
|
||||
; 修改历史:
|
||||
; 2026-01-08 Tarime Argus 初始版本
|
||||
; 2026-02-05 Tarime Argus Ver. 1.0
|
||||
;================================================================================
|
||||
;FCQUIT.COM renew by Tarime Argus 2026-02-05 Ver. 1.0
|
||||
;Compile with JWasm v2.20
|
||||
;COMMAND: jwasmd -bin -Fo FCQUIT.COM fcquit.asm
|
||||
.286
|
||||
.model tiny
|
||||
DOSint_PrintString MACRO printString
|
||||
MOV DX, offset printString
|
||||
call dosint2109h
|
||||
ENDM DOSint_PrintString
|
||||
.code
|
||||
org 100h
|
||||
start:
|
||||
MOV AX,CS ;初始化数据段
|
||||
MOV DS,AX
|
||||
|
||||
;检查中断向量非空
|
||||
Check_INT80h:
|
||||
MOV AX,3580h ;检查80h中断
|
||||
INT 21h
|
||||
MOV AX,ES ;检查中断向量是否为空
|
||||
AND AX,BX
|
||||
JZ Error_KNL_Not_Found ;向量空则进入错误处理
|
||||
;--------
|
||||
MOV AX,8000h
|
||||
INT 80h ;检查80h中断是否为FCD
|
||||
CMP AL,80h
|
||||
JZ Release_FCD_KNL
|
||||
|
||||
Error_KNL_Not_Found:
|
||||
INC byte ptr cs:[error_count] ;错误计数+1
|
||||
DOSint_PrintString msgerr_KNL_not_found
|
||||
JMP Check_INT81h
|
||||
NOP ;此处不加NOP指令不影响程序执行
|
||||
|
||||
Release_FCD_KNL:
|
||||
MOV AX,8001h
|
||||
INT 80h
|
||||
MOV AH,49h
|
||||
INT 21h
|
||||
PUSH DS ;暂存DS
|
||||
LDS DX,CS:[origin_80h_vector] ;加载原INT80h向量到DS:DX
|
||||
MOV AX,2580h ;设定中断向量
|
||||
INT 21h
|
||||
POP DS ;恢复DS
|
||||
DOSint_PrintString msg_FCD_KNL_Released
|
||||
|
||||
;检查中断向量非空
|
||||
Check_INT81h:
|
||||
MOV AX,3581h
|
||||
INT 21h
|
||||
MOV AX,ES
|
||||
AND AX,BX
|
||||
JZ Error_RD_Not_Found
|
||||
;--------
|
||||
MOV AX,8100h
|
||||
INT 81h ;检查81h中断是否为FCD
|
||||
CMP AL,81h
|
||||
JZ Release_FCD_RD
|
||||
Error_RD_Not_Found:
|
||||
INC byte ptr cs:[error_count] ;错误计数+1
|
||||
DOSint_PrintString msgerr_RD_not_found
|
||||
JMP Check_Error_Count_and_Exit
|
||||
NOP ;此处不加NOP指令不影响程序执行
|
||||
Release_FCD_RD:
|
||||
MOV AX,8102h
|
||||
INT 81h
|
||||
MOV AH,49h
|
||||
INT 21h
|
||||
PUSH DS
|
||||
LDS DX,CS:[origin_81h_vector]
|
||||
MOV AX,2581h
|
||||
INT 21h
|
||||
POP DS
|
||||
DOSint_PrintString msg_FCD_RD_Released
|
||||
JMP Check_Error_Count_and_Exit
|
||||
NOP ;此处不加NOP指令不影响程序执行
|
||||
;=========================================
|
||||
dosint2109h PROC
|
||||
MOV AH, 09h ;调用DOS中断09h输出字符串
|
||||
INT 21h
|
||||
RET
|
||||
dosint2109h ENDP
|
||||
;=========================================
|
||||
Check_Error_Count_and_Exit:
|
||||
CMP byte ptr cs:[error_count],00h ;检查错误计数是否为零
|
||||
JNZ PrintFCDInfo ;不为零时跳过已经退出消息
|
||||
DOSint_PrintString msg_FCD_exited
|
||||
PrintFCDInfo:
|
||||
DOSint_PrintString byte ptr msg_FCD_info
|
||||
MOV AX,4C00h ;退出程序
|
||||
INT 21h
|
||||
|
||||
msg_FCD_info db 0dh, 0ah,"The FreeCDOS Project <lijian@auts.edu.cn>", 0dh,0ah, '$'
|
||||
msg_FCD_exited db 0dh,0ah,"The FreeCDOS system has exited successful!", '$'
|
||||
msg_FCD_KNL_Released db 0dh,0ah,"[FCKNL.COM] has realeased!", '$'
|
||||
msg_FCD_RD_Released db 0dh,0ah,"[FCRD.COM] has realeased!", '$'
|
||||
msgerr_KNL_not_found db 0dh,0ah,"[FCKNL.COM] not found!", '$'
|
||||
msgerr_RD_not_found db 0dh,0ah,"[FCRD.COM] not found!", '$'
|
||||
origin_80h_vector dd 00000000h ;CS:[0265h]
|
||||
origin_81h_vector dd 00000000h ;CS:[0269h]
|
||||
error_count db 00h ;CS:[026Dh]
|
||||
end start
|
||||
Reference in New Issue
Block a user