LoLeOp module includes these data types:
Io8, Io16, Io32, Io64, Mem8, Mem16, Mem32, Mem64, CpuId, Msr
These data types are based on LoleOp basic class
BitOp::_MemArray, BitOp::_MemCell,
BitOp::_CellCascade, rUnionOp::rUnionOp
To create LoLeOp new data type, this is the basic procedure.
1. Define new class, which is inherit from _MemCell, input(MemSet) output(MemGet) function.
2. create new data type by _MemArray instance.
Using LoLeOp.Mem.Mem8 as sample
from BitOp import _MemCell, _MemArray
#1. New class which is inherit from _MemCell.
class _Mem8 (_MemCell):
# 1.1 Output function.
def MemSet (self, Address, Value):
a = EfiPy.UINT8.from_address (Address)
a.value = Value & 0xFF
# 1.2 Input function
def MemGet (self, Address):
a = EfiPy.UINT8.from_address (Address)
return a.value
2. New data type.
Mem8 = _MemArray ("Mem8", 8, CellClass = _Mem8)
Comments:
MemSet (self, Address, Value)
#
# INPUT:
# self _MemArray class instance
# Address Memory address in integer
# Value value to set
#
# OUTPUT: <<None>>
#
MemGet (self, Address)
#
# INPUT:
# self _MemArray class instance
# Address Memory address in integer
#
# OUTPUT:
# value to get
#
_MemArray::__init__ (self, Name, Width = 8, **args)
#
# INPUT:
# self _MemArray class instance
# Name String of new data type name
# Width new data type bit width
# **args: {
# CellExt: Reference from _MemCell
# DictKey: Direct item in _MemArray: default None
# CellClass: bit field operation class
# }
#
By MemSet and MemGet parameter, there can be another data type Io8, Io16, Io32, Io64.
# _IoBit is inherit from _MemCell, it is for override
# output string in _MemCell
class _IoBit8 (_IoBit):
#
# ; Intel assembly syntax
# MOV DX, port
# IN AL, DX ; return value
#
def MemGet (self, port):
IoParams.p1 = port
ret = IoProc.execute(IoCodeGet8, params = IoParams, mode = 'int')
return ret & 0xFF
#
# ; Intel assembly syntax
# MOV DX, port
# MOV AL, val
# OUT AL, DX
#
def MemSet (self, port, val):
IoParams.p1 = port
IoParams.p2 = val & 0xFF
IoProc.execute(IoCodeSet8, params = IoParams, mode = 'int')
# create Io8 data type.
Io8 = _MemArray ("Io8", 8, CellClass = _IoBit8)
No comments:
Post a Comment