📄 memfunc2.asm
字号:
;use TASM.EXE V2.01 or later
;
; TASM /jSMART /jJUMPS /uM520 /jLOCALS /m8 /t
;
.386P
CGROUP GROUP TEXT, _TEXT
TEXT SEGMENT BYTE PUBLIC 'CODE' USE16
EXTRN C preInitHimem_:NEAR
EXTRN C maskNMI_:NEAR
EXTRN C unmaskNMI_:NEAR
EXTRN C readHimemByte_:NEAR
EXTRN C writeHimemByte_:NEAR
EXTRN C readHimemWord_:NEAR
EXTRN C writeHimemWord_:NEAR
EXTRN C readHimemLong_:NEAR
EXTRN C writeHimemLong_:NEAR
EXTRN C readHimemBlockByte_:NEAR
EXTRN C writeHimemBlockByte_:NEAR
EXTRN C readHimemBlockWord_:NEAR
EXTRN C writeHimemBlockWord_:NEAR
EXTRN C readHimemBlockLong_:NEAR
EXTRN C writeHimemBlockLong_:NEAR
EXTRN C copyHimemByte_:NEAR
EXTRN C copyHimemWord_:NEAR
EXTRN C copyHimemLong_:NEAR
EXTRN C fillHimemByte_:NEAR
EXTRN C fillHimemWord_:NEAR
EXTRN C fillHimemLong_:NEAR
EXTRN C getCpuMode_:NEAR
TEXT ENDS
_TEXT SEGMENT BYTE PUBLIC 'CODE' USE16
ASSUME CS:CGROUP,DS:NOTHING,ES:NOTHING
;**************************
; Pre-Initialize the Himem access functions
;
; int _preInitHimem()
;
; 入力 None
; 出力 AX 0)Success
; -1)False
; 破壊 None
;**************************
_preInitHimem PROC C NEAR PUBLIC USES BX ES
CALL preInitHimem_
RET
_preInitHimem ENDP
;**************************
; mask NMI
;
; void _maskNMI();
;
; 入力 Nothing
; 出力 Nothing
; 破壊 Nothing
;**************************
_maskNMI PROC C NEAR PUBLIC
JMP maskNMI_
_maskNMI ENDP
;**************************
; unmask NMI
;
; void _unmaskNMI();
;
; 入力 Nothing
; 出力 Nothing
; 破壊 Nothing
;**************************
_unmaskNMI PROC C NEAR PUBLIC
JMP unmaskNMI_
_unmaskNMI ENDP
;**************************
; read byte data from Himem
;
; unsigned char _readHimemByte(unsigned long Address)
;
; 入力 [SP-2].L Read address
; 出力 AL
; 破壊 なし
;**************************
_readHimemByte PROC C NEAR PUBLIC USES BX ES,address:DWORD
MOV AX, WORD PTR address
MOV BX, WORD PTR address+2
CALL readHimemByte_
RET
_readHimemByte ENDP
;**************************
; write byte data to Himem
;
; void _writeHimemByte(unsigned long Address,unsigned char Data)
;
; 入力 [SP-2].L write address
; [SP-6].B write data
; 出力 なし
; 破壊 なし
;**************************
_writeHimemByte PROC C NEAR PUBLIC USES AX BX CX ES,address:DWORD,data:BYTE
MOV AX, WORD PTR address
MOV BX, WORD PTR address+2
MOV CL, data
CALL writeHimemByte_
RET
_writeHimemByte ENDP
;**************************
; read word data from Himem
;
; unsigned short int _readHimemWord(unsigned long Address)
;
; 入力 [SP-2].L Read address
; 出力 AX
; 破壊 なし
;**************************
_readHimemWord PROC C NEAR PUBLIC USES BX ES,address:DWORD
MOV AX, WORD PTR address
MOV BX, WORD PTR address+2
CALL readHimemWord_
RET
_readHimemWord ENDP
;**************************
; write word data to Himem
;
; void _writeHimemWord(unsigned long Address,unsigned int Data)
;
; 入力 [SP-2].L write address
; [SP-6].W write data
; 出力 なし
; 破壊 なし
;**************************
_writeHimemWord PROC C NEAR PUBLIC USES AX BX CX ES,address:DWORD,data:WORD
MOV AX, WORD PTR address
MOV BX, WORD PTR address+2
MOV CX, data
CALL writeHimemWord_
RET
_writeHimemWord ENDP
;**************************
; read long data from Himem
;
; unsigned long _readHimemLong(unsigned long Address)
;
; 入力 [SP-2].L write address
; 出力 DX:AX Read Data
; 破壊 なし
;**************************
_readHimemLong PROC C NEAR PUBLIC USES BX ES,address:DWORD
MOV AX, WORD PTR address
MOV BX, WORD PTR address+2
CALL readHimemLong_
MOV DX, BX
RET
_readHimemLong ENDP
;**************************
; write long data to Himem
;
; void _writeHimemLong(unsigned long Address,unsigned long Data)
;
; 入力 [SP-2].L write address
; [SP-6].L write data
; 出力 なし
; 破壊 なし
;**************************
_writeHimemLong PROC C NEAR PUBLIC USES AX BX CX ES,address:DWORD,data:DWORD
MOV AX, WORD PTR address
MOV BX, WORD PTR address+2
MOV CX, WORD PTR data
MOV DX, WORD PTR data+2
CALL writeHimemLong_
RET
_writeHimemLong ENDP
;**************************
; read block byte data from Himem
;
; unsigned int _readHimemBlockByte(unsigned long Address,unsigned char *Buffer,unsigned int bytes)
;
; 入力 [SP-2].L Read address
; [SP-6].W Buffer address
; [SP-8].W Read Size
; 出力 AX Read Size
; 破壊 なし
;**************************
_readHimemBlockByte PROC C NEAR PUBLIC USES BX CX DX,address:DWORD,buffer:WORD,bytes:WORD
MOV AX, WORD PTR address
MOV BX, WORD PTR address+2
MOV CX, buffer
MOV DX, bytes
CALL readHimemBlockByte_
RET
_readHimemBlockByte ENDP
;**************************
; write block byte data to Himem
;
; unsigned int _writeHimemBlockByte(unsigned long Address,unsigned char *Buffer,unsigned int bytes)
;
; 入力 [SP-2].L Write address
; [SP-6].W Buffer address
; [SP-8].W Write Size
; 出力 AX Write Size
; 破壊 なし
;**************************
_writeHimemBlockByte PROC C NEAR PUBLIC USES BX CX DX,address:DWORD,buffer:WORD,bytes:WORD
MOV AX, WORD PTR address
MOV BX, WORD PTR address+2
MOV CX, buffer
MOV DX, bytes
CALL writeHimemBlockByte_
RET
_writeHimemBlockByte ENDP
;**************************
; read block word data from Himem
;
; unsigned int _readHimemBlockWord(unsigned long Address,unsigned char *Buffer,unsigned int words)
;
; 入力 [SP-2].L Read address
; [SP-6].W Buffer address
; [SP-8].W Read Size(unit word)
; 出力 AX Read Size(unit word)
; 破壊 nothing
;**************************
_readHimemBlockWord PROC C NEAR PUBLIC USES BX CX DX,address:DWORD,buffer:WORD,words:WORD
MOV AX, WORD PTR address
MOV BX, WORD PTR address+2
MOV CX, buffer
MOV DX, words
CALL readHimemBlockWord_
RET
_readHimemBlockWord ENDP
;**************************
; write block word data to Himem
;
; unsigned int _writeHimemBlockWord(unsigned long Address,unsigned char *Buffer,unsigned int words)
;
; 入力 [SP-2].L Write address
; [SP-6].W Buffer address
; [SP-8].W Write Size(unit word)
; 出力 AX Write Size(unit word)
; 破壊 nothing
;**************************
_writeHimemBlockWord PROC C NEAR PUBLIC USES BX CX DX,address:DWORD,buffer:WORD,words:WORD
MOV AX, WORD PTR address
MOV BX, WORD PTR address+2
MOV CX, buffer
MOV DX, words
CALL writeHimemBlockWord_
RET
_writeHimemBlockWord ENDP
;**************************
; read block long word data from Himem
;
; unsigned int _readHimemBlockLong(unsigned long Address,unsigned char *Buffer,unsigned int longWords)
;
; 入力 [SP-2].L Read address
; [SP-6].W Buffer address
; [SP-8].W Read Size(unit long word)
; 出力 AX Read Size(unit long word)
; 破壊 nothing
;**************************
_readHimemBlockLong PROC C NEAR PUBLIC USES BX CX DX,address:DWORD,buffer:WORD,longWords:WORD
MOV AX, WORD PTR address
MOV BX, WORD PTR address+2
MOV CX, buffer
MOV DX, longWords
CALL readHimemBlockLong_
RET
_readHimemBlockLong ENDP
;**************************
; write block long word data from Himem
;
; unsigned int _writeHimemBlockLong(unsigned long Address,unsigned char *Buffer,unsigned int longWords)
;
; 入力 [SP-2].L Write address
; [SP-6].W Buffer address
; [SP-8].W Write Size(unit long word)
; 出力 AX Write Size(unit long word)
; 破壊 nothing
;**************************
_writeHimemBlockLong PROC C NEAR PUBLIC USES BX CX DX,address:DWORD,buffer:WORD,longWords:WORD
MOV AX, WORD PTR address
MOV BX, WORD PTR address+2
MOV CX, buffer
MOV DX, longWords
CALL writeHimemBlockLong_
RET
_writeHimemBlockLong ENDP
;**************************
; copy from himem to himem by byte
;
; unsigned int _copyHimemByte(unsigned long SourceAddress,unsigned long DestAddress,unsigned int bytes)
;
; 入力 [SP-2].L Source address
; [SP-6].L Destination address
; [SP-10].L copy Size(unit byte)
; 出力 DX:AX copied Size(unit byte)
; 破壊 nothing
;**************************
_copyHimemByte PROC C NEAR PUBLIC USES BX CX,srcAddress:DWORD,dstAddress:DWORD,bytes:DWORD
MOV AX, WORD PTR srcAddress
MOV BX, WORD PTR srcAddress+2
MOV CX, WORD PTR dstAddress
MOV DX, WORD PTR dstAddress+2
PUSH bytes
CALL copyHimemByte_
ADD SP, 4
MOV DX, BX
RET
_copyHimemByte ENDP
;**************************
; copy from himem to himem by word
;
; unsigned int _copyHimemWord(unsigned long SourceAddress,unsigned long DestAddress,unsigned int words)
;
; 入力 [SP-2].L Source address
; [SP-6].L Destination address
; [SP-10].L copy Size(unit word)
; 出力 DX:AX copied Size(unit word)
; 破壊 nothing
;**************************
_copyHimemWord PROC C NEAR PUBLIC USES BX CX,srcAddress:DWORD,dstAddress:DWORD,words:DWORD
MOV AX, WORD PTR srcAddress
MOV BX, WORD PTR srcAddress+2
MOV CX, WORD PTR dstAddress
MOV DX, WORD PTR dstAddress+2
PUSH words
CALL copyHimemWord_
ADD SP, 4
MOV DX, BX
RET
_copyHimemWord ENDP
;**************************
; copy from himem to himem by long word
;
; unsigned int _copyHimemLong(unsigned long SourceAddress,unsigned long DestAddress,unsigned int longWords)
;
; 入力 [SP-2].L Source address
; [SP-6].L Destination address
; [SP-10].L copy Size(unit long word)
; 出力 DX:AX copied Size(unit long word)
; 破壊 nothing
;**************************
_copyHimemLong PROC C NEAR PUBLIC USES BX CX,srcAddress:DWORD,dstAddress:DWORD,longWords:DWORD
MOV AX, WORD PTR srcAddress
MOV BX, WORD PTR srcAddress+2
MOV CX, WORD PTR dstAddress
MOV DX, WORD PTR dstAddress+2
PUSH longWords
CALL copyHimemLong_
ADD SP, 4
MOV DX, BX
RET
_copyHimemLong ENDP
;**************************
; fill from himem to himem by byte
;
; unsigned int _fillHimemByte(unsigned long Address,unsigned int bytes)
;
; 入力 [SP-2].L Fill address
; [SP-6].L Fill Size(unit byte)
; [SP-10].B Fill Data
; 出力 DX:AX Filled Size(unit byte)
; 破壊 nothing
;**************************
_fillHimemByte PROC C NEAR PUBLIC USES BX CX,address:DWORD,fillSize:DWORD,writeData:BYTE
MOV AX, WORD PTR address
MOV BX, WORD PTR address+2
MOV CX, WORD PTR fillSize
MOV DX, WORD PTR fillSize+2
PUSH WORD PTR writeData
CALL fillHimemByte_
ADD SP, 2
MOV DX, BX
RET
_fillHimemByte ENDP
;**************************
; fill from himem to himem by word
;
; unsigned int _fillHimemByte(unsigned long Address,unsigned int words)
;
; 入力 [SP-2].L Fill address
; [SP-6].L Fill Size(unit word)
; [SP-10].B Fill Data
; 出力 DX:AX Filled Size(unit word)
; 破壊 nothing
;**************************
_fillHimemWord PROC C NEAR PUBLIC USES BX CX,address:DWORD,fillSize:DWORD,writeData:WORD
MOV AX, WORD PTR address
MOV BX, WORD PTR address+2
MOV CX, WORD PTR fillSize
MOV DX, WORD PTR fillSize+2
PUSH writeData
CALL fillHimemWord_
ADD SP, 2
MOV DX, BX
RET
_fillHimemWord ENDP
;**************************
; fill from himem to himem by long
;
; unsigned int _fillHimemByte(unsigned long Address,unsigned int longWords)
;
; 入力 [SP-2].L Fill address
; [SP-6].L Fill Size(unit long word)
; [SP-10].B Fill Data
; 出力 DX:AX Filled Size(unit long word)
; 破壊 nothing
;**************************
_fillHimemLong PROC C NEAR PUBLIC USES BX CX,address:DWORD,fillSize:DWORD,writeData:DWORD
MOV AX, WORD PTR address
MOV BX, WORD PTR address+2
MOV CX, WORD PTR fillSize
MOV DX, WORD PTR fillSize+2
PUSH writeData
CALL fillHimemLong_
ADD SP, 4
MOV DX, BX
RET
_fillHimemLong ENDP
;********************************
;CPU動作モードチェック
;
; 入力 なし
; 出力 AX 0)Real Mode
; 1)VCPI Mode
; 2)DPMI Mode
; -1)判定できず
; 破壊 なし
;********************************
_getCpuMode PROC C NEAR PUBLIC
JMP getCpuMode_
_getCpuMode ENDP
_TEXT ENDS
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -