add fnuction

This commit is contained in:
2026-02-15 07:18:01 +08:00
parent 54f6450883
commit 48d554843c

View File

@@ -12,11 +12,18 @@ getParameterandCheckXMS MACRO
MOV BL,01h
CMP BYTE PTR CS:[statXMSinstalled],01h
ENDM
;PUSH BP
;MOV BP,SP
;MOV BL,01
;CMP BYTE PTR CS:[011D],01
callXMSReturn MACRO
MOV CS:[GUEST_statusXMS],BL
POP BP
RET
ENDM
;MOV CS:[011E],BL
;POP BP
;RET
.code
org 100h
@@ -24,6 +31,7 @@ start:
JMP prepareTSR
;org 0103h
originES DW 0x0000
;0105h
ExtMemAddr DW 0000h
;
XMSDRVVERSION DW 0x0000
@@ -32,10 +40,14 @@ XMSDRVADDR_BX DW 0x0000
XMSDRVADDR_ES DW 0x0000
;011Dh
statXMSinstalled DB 0x00 ;01=INSTALLED, 00=NOINSTALL
;011Eh
GUEST_statusXMS DB 0x00 ;01=BUSY?, 00=IDLE/Exited Normally, other=XMS Error Code
;011Fh
data11F DB 0x00
;------------------------------------
;org 120h
;fcz buffer
;asc16.fcz 120h-220h
res00h DB 80 DUP(0x00)
res01h DB 80 DUP(0x01)
res02h DB 80 DUP(0x02)
@@ -68,6 +80,9 @@ res41F0h DW 125 DUP(0x41F0)
res200h DB 32 DUP(0x00)
data00h DB 8 DUP(0x00)
;-u 16d0 1bcf
;16D4h
data16D4 DW 0000h
data16D6 DW 0000h
;0876:16D0: 0000 ADD [BX+SI],AL
;0876:16D2: 0000 ADD [BX+SI],AL
;0876:16D4: 0000 ADD [BX+SI],AL
@@ -344,14 +359,16 @@ ISR81hEntry: ;interrupt service routine
PUSH ES
CMP AH,81h ;if AH!=81h jump to ISR_Return.
JNZ ISR_Return
CMP BYTE PTR CS:[statXMSinstalled],01h
CMP BYTE PTR CS:[data11F],01h
JZ ISR_Return
CMP AL,03h
JNZ 18DAh
JNZ ISR00hselfCheck
NOP ;
NOP ;
MOV BYTE PTR CS:[statXMSinstalled],01h
MOV BYTE PTR CS:[data11F],01h
CALL Fn181E
MOV BYTE PTR CS:[data11F],00h
JMP ISR_Return
;0876:18AF: 1E PUSH DS
;0876:18B0: 06 PUSH ES
@@ -367,13 +384,34 @@ ISR81hEntry: ;interrupt service routine
;0876:18CE: E84DFF CALL 181E
;0876:18D1: 2EC6061F0100 MOV BYTE PTR CS:[011F],00
;0876:18D7: E9A400 JMP 197E
Fn18DA:
ISR00hselfCheck:
CMP AL,00h ;功能00h检查是否为fcrd驻留应返回AL=81h。
JNZ ISR01h
NOP ;
NOP ;
MOV AL,81h
JMP ISR_Return
;0876:18DA: 3C00 CMP AL,00
;0876:18DC: 7507 JNZ 18E5
;0876:18DE: 90 NOP
;0876:18DF: 90 NOP
;0876:18E0: B081 MOV AL,81
;0876:18E2: E99900 JMP 197E
;--------------------
ISR01h:
CMP AL,01
JNZ Fn192D
NOP
NOP
MOV CX,010Ah ;Allocated 10A KB ExtMem
CALL CheckandAllocatedExtMem
CMP BX, 00h
JNZ Fn18FD
NOP
NOP
MOV AH,01h ;if ExtAddr == 00h, return
JMP ISR_Return
;0876:18E5: 3C01 CMP AL,01
;0876:18E7: 7544 JNZ 192D
;0876:18E9: 90 NOP
@@ -386,6 +424,23 @@ Fn18DA:
;0876:18F7: 90 NOP
;0876:18F8: B401 MOV AH,01
;0876:18FA: E98100 JMP 197E
Fn18FD:
PUSH BX
MOV BYTE PTR CS:[1A41],00
CALL Fn19FA
POP BX
CMP BYTE PTR CS:[1A41],00
JNZ Fn1925
NOP
NOP
MOV AH,4A
MOV BX,[1A42]
PUSH WORD PTR CS:[0103]
POP ES
INT 21
MOV AH,00h
JMP ISR_Return
;0876:18FD: 53 PUSH BX
;0876:18FE: 2EC606411A00 MOV BYTE PTR CS:[1A41],00
;0876:1904: E8F300 CALL 19FA
@@ -401,7 +456,9 @@ Fn18DA:
;0876:191E: CD21 INT 21
;0876:1920: B400 MOV AH,00
;0876:1922: EB5A JMP 197E
NOP ;
;0876:1924: 90 NOP
Fn1925:
;0876:1925: E85BFE CALL 1783
;0876:1928: B402 MOV AH,02
;0876:192A: EB52 JMP 197E
@@ -461,6 +518,60 @@ ISR_Return:
;0876:197F: 1F POP DS
;0876:1980: CF IRET
;-----------------------------------------
Fn1981:
PUSH CS ;set cs=ds
POP DS
MOV AH,3Dh ;open file handle
MOV AL,00h ;read only
INT 21
JB Fn19F2 ;if error happend CF=1, jump to Fn19F2.
NOP
NOP
MOV CS:[GUEST_filehandle],AX ;save file handle
PUSH DS
PUSH ES
Fn1993:
MOV AH,3F ;read file content
MOV BX,CS:[GUEST_filehandle]
MOV CX,1000 ;read 4096 Byte
PUSH CS
POP DS
MOV DX,0120
INT 21
JB Fn19DD ;if error happend CF=1, jump to Fn19DD.
NOP
NOP
CMP AX,0000 ;check if read EOF, End reading jump to 19e4
JZ Fn19E4_EndReading
NOP
NOP
PUSH AX
MOV DX,0000
PUSH DX
PUSH AX
PUSH CS
MOV DX,0120
PUSH DX
PUSH WORD PTR CS:[16D6]
PUSH WORD PTR CS:[16D4]
PUSH WORD PTR CS:[0105]
CALL 1A5C
ADD SP,+0E
POP AX
ADD CS:[16D4],AX
ADC WORD PTR CS:[16D6],+00
JMP Fn1993
Fn19DD: ;Error Slove
MOV BYTE PTR CS:[data1A41],01
NOP
Fn19E4_EndReading:
POP ES
POP DS
MOV AH,3E
MOV BX,CS:[GUEST_filehandle]
INT 21
JMP RETURN_19F9
NOP
;0876:1981: 0E PUSH CS
;0876:1982: 1F POP DS
;0876:1983: B43D MOV AH,3D
@@ -511,9 +622,33 @@ ISR_Return:
;0876:19ED: CD21 INT 21
;0876:19EF: EB08 JMP 19F9
;0876:19F1: 90 NOP
Fn19F2:
MOV BYTE PTR CS:[data1A41],01h
NOP
RETURN_19F9:
RET
;0876:19F2: 2EC606411A01 MOV BYTE PTR CS:[1A41],01
;0876:19F8: 90 NOP
;0876:19F9: C3 RET
Fn19FA:
MOV WORD PTR CS:[data16D4],0000h
MOV WORD PTR CS:[data16D6],0000h
MOV DX, filename_ASCII_FONTS ;file name asc16.fcz
CALL Fn1981 ;read file
CMP BYTE PTR CS:[data1A41],00h ; if !=00h error happend
JNZ RETURN_1A2B
NOP
NOP
MOV DX, filename_HANZI_FONTS ;file name hz16.fcz
CALL Fn1981
CMP BYTE PTR CS:[data1A41],00h
JNZ RETURN_1A2B
NOP
NOP
JMP RETURN_1A2B
NOP
RETURN_1A2B:
RET
;0876:19FA: 2EC706D4160000 MOV WORD PTR CS:[16D4],0000
;0876:1A01: 2EC706D6160000 MOV WORD PTR CS:[16D6],0000
;0876:1A08: BA2C1A MOV DX,1A2C
@@ -534,9 +669,12 @@ ISR_Return:
;---------------------------------------------------
;string
;org 1a2ch
GUEST_filename DB "asc16.fcz.hz16.fcz"
data1A3E DW 0x0000
data1A40 DW 0x0000
filename_ASCII_FONTS DB "asc16.fcz", 00h
;1a36
filename_HANZI_FONTS DB "hz16.fcz", 00h
;1A3F
GUEST_filehandle DW 0000h
data1A41 DB 00h ;fcz load status 01h=ERROR, 00=OK
data1A42 DW 0x0000
;0876:1A2C: 61 POPA
;0876:1A2D: 7363 JAE 1A92
@@ -555,6 +693,17 @@ data1A42 DW 0x0000
;0876:1A4A: FB STI
;0876:1A4B: 00750D ADD [DI+0D],DH
;=====wasted====================
CheckandAllcatedExtMem:
MOV BX, WORD PTR CS:[ExtMemAddr]
CMP BX, 0000h ;check XMS External Memory Address, if not empty, return.
JNZ RETURN_1A5B
NOP ;
NOP ;
PUSH CX ;pass the parameter
CALL Allocate_Extended_Memory
POP CX
MOV BX,AX ;save Allocated Memory Block Address
MOV CS:[ExtMemAddr],AX
;0x1a44: 2E 8B 1E 05 01 mov bx, word ptr cs:[0x105]
;0x1a49: 83 FB 00 cmp bx, 0
;0x1a4c: 75 0D jne 0x1a5b
@@ -565,7 +714,10 @@ data1A42 DW 0x0000
;0876:1A54: 59 POP CX
;0876:1A55: 8BD8 MOV BX,AX
;0876:1A57: 2EA30501 MOV CS:[0105],AX
RETURN_1A5B:
RET
;0876:1A5B: C3 RET
;------------------
;0876:1A5C: 55 PUSH BP
;0876:1A5D: 8BEC MOV BP,SP
;0876:1A5F: 56 PUSH SI