add fnuction
This commit is contained in:
166
source/fcrd.asm
166
source/fcrd.asm
@@ -12,11 +12,18 @@ getParameterandCheckXMS MACRO
|
|||||||
MOV BL,01h
|
MOV BL,01h
|
||||||
CMP BYTE PTR CS:[statXMSinstalled],01h
|
CMP BYTE PTR CS:[statXMSinstalled],01h
|
||||||
ENDM
|
ENDM
|
||||||
|
;PUSH BP
|
||||||
|
;MOV BP,SP
|
||||||
|
;MOV BL,01
|
||||||
|
;CMP BYTE PTR CS:[011D],01
|
||||||
callXMSReturn MACRO
|
callXMSReturn MACRO
|
||||||
MOV CS:[GUEST_statusXMS],BL
|
MOV CS:[GUEST_statusXMS],BL
|
||||||
POP BP
|
POP BP
|
||||||
RET
|
RET
|
||||||
ENDM
|
ENDM
|
||||||
|
;MOV CS:[011E],BL
|
||||||
|
;POP BP
|
||||||
|
;RET
|
||||||
|
|
||||||
.code
|
.code
|
||||||
org 100h
|
org 100h
|
||||||
@@ -24,6 +31,7 @@ start:
|
|||||||
JMP prepareTSR
|
JMP prepareTSR
|
||||||
;org 0103h
|
;org 0103h
|
||||||
originES DW 0x0000
|
originES DW 0x0000
|
||||||
|
;0105h
|
||||||
ExtMemAddr DW 0000h
|
ExtMemAddr DW 0000h
|
||||||
;
|
;
|
||||||
XMSDRVVERSION DW 0x0000
|
XMSDRVVERSION DW 0x0000
|
||||||
@@ -32,10 +40,14 @@ XMSDRVADDR_BX DW 0x0000
|
|||||||
XMSDRVADDR_ES DW 0x0000
|
XMSDRVADDR_ES DW 0x0000
|
||||||
;011Dh
|
;011Dh
|
||||||
statXMSinstalled DB 0x00 ;01=INSTALLED, 00=NOINSTALL
|
statXMSinstalled DB 0x00 ;01=INSTALLED, 00=NOINSTALL
|
||||||
|
;011Eh
|
||||||
GUEST_statusXMS DB 0x00 ;01=BUSY?, 00=IDLE/Exited Normally, other=XMS Error Code
|
GUEST_statusXMS DB 0x00 ;01=BUSY?, 00=IDLE/Exited Normally, other=XMS Error Code
|
||||||
|
;011Fh
|
||||||
data11F DB 0x00
|
data11F DB 0x00
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
;org 120h
|
;org 120h
|
||||||
|
;fcz buffer
|
||||||
|
;asc16.fcz 120h-220h
|
||||||
res00h DB 80 DUP(0x00)
|
res00h DB 80 DUP(0x00)
|
||||||
res01h DB 80 DUP(0x01)
|
res01h DB 80 DUP(0x01)
|
||||||
res02h DB 80 DUP(0x02)
|
res02h DB 80 DUP(0x02)
|
||||||
@@ -68,6 +80,9 @@ res41F0h DW 125 DUP(0x41F0)
|
|||||||
res200h DB 32 DUP(0x00)
|
res200h DB 32 DUP(0x00)
|
||||||
data00h DB 8 DUP(0x00)
|
data00h DB 8 DUP(0x00)
|
||||||
;-u 16d0 1bcf
|
;-u 16d0 1bcf
|
||||||
|
;16D4h
|
||||||
|
data16D4 DW 0000h
|
||||||
|
data16D6 DW 0000h
|
||||||
;0876:16D0: 0000 ADD [BX+SI],AL
|
;0876:16D0: 0000 ADD [BX+SI],AL
|
||||||
;0876:16D2: 0000 ADD [BX+SI],AL
|
;0876:16D2: 0000 ADD [BX+SI],AL
|
||||||
;0876:16D4: 0000 ADD [BX+SI],AL
|
;0876:16D4: 0000 ADD [BX+SI],AL
|
||||||
@@ -344,14 +359,16 @@ ISR81hEntry: ;interrupt service routine
|
|||||||
PUSH ES
|
PUSH ES
|
||||||
CMP AH,81h ;if AH!=81h jump to ISR_Return.
|
CMP AH,81h ;if AH!=81h jump to ISR_Return.
|
||||||
JNZ ISR_Return
|
JNZ ISR_Return
|
||||||
CMP BYTE PTR CS:[statXMSinstalled],01h
|
CMP BYTE PTR CS:[data11F],01h
|
||||||
JZ ISR_Return
|
JZ ISR_Return
|
||||||
CMP AL,03h
|
CMP AL,03h
|
||||||
JNZ 18DAh
|
JNZ ISR00hselfCheck
|
||||||
NOP ;
|
NOP ;
|
||||||
NOP ;
|
NOP ;
|
||||||
MOV BYTE PTR CS:[statXMSinstalled],01h
|
MOV BYTE PTR CS:[data11F],01h
|
||||||
CALL Fn181E
|
CALL Fn181E
|
||||||
|
MOV BYTE PTR CS:[data11F],00h
|
||||||
|
JMP ISR_Return
|
||||||
|
|
||||||
;0876:18AF: 1E PUSH DS
|
;0876:18AF: 1E PUSH DS
|
||||||
;0876:18B0: 06 PUSH ES
|
;0876:18B0: 06 PUSH ES
|
||||||
@@ -367,13 +384,34 @@ ISR81hEntry: ;interrupt service routine
|
|||||||
;0876:18CE: E84DFF CALL 181E
|
;0876:18CE: E84DFF CALL 181E
|
||||||
;0876:18D1: 2EC6061F0100 MOV BYTE PTR CS:[011F],00
|
;0876:18D1: 2EC6061F0100 MOV BYTE PTR CS:[011F],00
|
||||||
;0876:18D7: E9A400 JMP 197E
|
;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:18DA: 3C00 CMP AL,00
|
||||||
;0876:18DC: 7507 JNZ 18E5
|
;0876:18DC: 7507 JNZ 18E5
|
||||||
;0876:18DE: 90 NOP
|
;0876:18DE: 90 NOP
|
||||||
;0876:18DF: 90 NOP
|
;0876:18DF: 90 NOP
|
||||||
;0876:18E0: B081 MOV AL,81
|
;0876:18E0: B081 MOV AL,81
|
||||||
;0876:18E2: E99900 JMP 197E
|
;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:18E5: 3C01 CMP AL,01
|
||||||
;0876:18E7: 7544 JNZ 192D
|
;0876:18E7: 7544 JNZ 192D
|
||||||
;0876:18E9: 90 NOP
|
;0876:18E9: 90 NOP
|
||||||
@@ -386,6 +424,23 @@ Fn18DA:
|
|||||||
;0876:18F7: 90 NOP
|
;0876:18F7: 90 NOP
|
||||||
;0876:18F8: B401 MOV AH,01
|
;0876:18F8: B401 MOV AH,01
|
||||||
;0876:18FA: E98100 JMP 197E
|
;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:18FD: 53 PUSH BX
|
||||||
;0876:18FE: 2EC606411A00 MOV BYTE PTR CS:[1A41],00
|
;0876:18FE: 2EC606411A00 MOV BYTE PTR CS:[1A41],00
|
||||||
;0876:1904: E8F300 CALL 19FA
|
;0876:1904: E8F300 CALL 19FA
|
||||||
@@ -401,7 +456,9 @@ Fn18DA:
|
|||||||
;0876:191E: CD21 INT 21
|
;0876:191E: CD21 INT 21
|
||||||
;0876:1920: B400 MOV AH,00
|
;0876:1920: B400 MOV AH,00
|
||||||
;0876:1922: EB5A JMP 197E
|
;0876:1922: EB5A JMP 197E
|
||||||
|
NOP ;
|
||||||
;0876:1924: 90 NOP
|
;0876:1924: 90 NOP
|
||||||
|
Fn1925:
|
||||||
;0876:1925: E85BFE CALL 1783
|
;0876:1925: E85BFE CALL 1783
|
||||||
;0876:1928: B402 MOV AH,02
|
;0876:1928: B402 MOV AH,02
|
||||||
;0876:192A: EB52 JMP 197E
|
;0876:192A: EB52 JMP 197E
|
||||||
@@ -461,6 +518,60 @@ ISR_Return:
|
|||||||
;0876:197F: 1F POP DS
|
;0876:197F: 1F POP DS
|
||||||
;0876:1980: CF IRET
|
;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:1981: 0E PUSH CS
|
||||||
;0876:1982: 1F POP DS
|
;0876:1982: 1F POP DS
|
||||||
;0876:1983: B43D MOV AH,3D
|
;0876:1983: B43D MOV AH,3D
|
||||||
@@ -511,9 +622,33 @@ ISR_Return:
|
|||||||
;0876:19ED: CD21 INT 21
|
;0876:19ED: CD21 INT 21
|
||||||
;0876:19EF: EB08 JMP 19F9
|
;0876:19EF: EB08 JMP 19F9
|
||||||
;0876:19F1: 90 NOP
|
;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:19F2: 2EC606411A01 MOV BYTE PTR CS:[1A41],01
|
||||||
;0876:19F8: 90 NOP
|
;0876:19F8: 90 NOP
|
||||||
;0876:19F9: C3 RET
|
;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:19FA: 2EC706D4160000 MOV WORD PTR CS:[16D4],0000
|
||||||
;0876:1A01: 2EC706D6160000 MOV WORD PTR CS:[16D6],0000
|
;0876:1A01: 2EC706D6160000 MOV WORD PTR CS:[16D6],0000
|
||||||
;0876:1A08: BA2C1A MOV DX,1A2C
|
;0876:1A08: BA2C1A MOV DX,1A2C
|
||||||
@@ -534,9 +669,12 @@ ISR_Return:
|
|||||||
;---------------------------------------------------
|
;---------------------------------------------------
|
||||||
;string
|
;string
|
||||||
;org 1a2ch
|
;org 1a2ch
|
||||||
GUEST_filename DB "asc16.fcz.hz16.fcz"
|
filename_ASCII_FONTS DB "asc16.fcz", 00h
|
||||||
data1A3E DW 0x0000
|
;1a36
|
||||||
data1A40 DW 0x0000
|
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
|
data1A42 DW 0x0000
|
||||||
;0876:1A2C: 61 POPA
|
;0876:1A2C: 61 POPA
|
||||||
;0876:1A2D: 7363 JAE 1A92
|
;0876:1A2D: 7363 JAE 1A92
|
||||||
@@ -555,6 +693,17 @@ data1A42 DW 0x0000
|
|||||||
;0876:1A4A: FB STI
|
;0876:1A4A: FB STI
|
||||||
;0876:1A4B: 00750D ADD [DI+0D],DH
|
;0876:1A4B: 00750D ADD [DI+0D],DH
|
||||||
;=====wasted====================
|
;=====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]
|
;0x1a44: 2E 8B 1E 05 01 mov bx, word ptr cs:[0x105]
|
||||||
;0x1a49: 83 FB 00 cmp bx, 0
|
;0x1a49: 83 FB 00 cmp bx, 0
|
||||||
;0x1a4c: 75 0D jne 0x1a5b
|
;0x1a4c: 75 0D jne 0x1a5b
|
||||||
@@ -565,7 +714,10 @@ data1A42 DW 0x0000
|
|||||||
;0876:1A54: 59 POP CX
|
;0876:1A54: 59 POP CX
|
||||||
;0876:1A55: 8BD8 MOV BX,AX
|
;0876:1A55: 8BD8 MOV BX,AX
|
||||||
;0876:1A57: 2EA30501 MOV CS:[0105],AX
|
;0876:1A57: 2EA30501 MOV CS:[0105],AX
|
||||||
|
RETURN_1A5B:
|
||||||
|
RET
|
||||||
;0876:1A5B: C3 RET
|
;0876:1A5B: C3 RET
|
||||||
|
;------------------
|
||||||
;0876:1A5C: 55 PUSH BP
|
;0876:1A5C: 55 PUSH BP
|
||||||
;0876:1A5D: 8BEC MOV BP,SP
|
;0876:1A5D: 8BEC MOV BP,SP
|
||||||
;0876:1A5F: 56 PUSH SI
|
;0876:1A5F: 56 PUSH SI
|
||||||
|
|||||||
Reference in New Issue
Block a user