⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 memfunc2.asm

📁 访问32位PCI总线MEMORY的例程
💻 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 + -