self.value = toMemorySize(value)
         self._check()
 
+class MemorySize32(CheckedInt):
+    size = 32
+    unsigned = True
+    def __init__(self, value):
+        if isinstance(value, MemorySize):
+            self.value = value.value
+        else:
+            self.value = toMemorySize(value)
+        self._check()
 
 class Addr(CheckedInt):
     size = 64
            'Int32', 'UInt32', 'Int64', 'UInt64',
            'Counter', 'Addr', 'Tick', 'Percent',
            'TcpPort', 'UdpPort', 'EthernetAddr',
-           'MemorySize', 'Latency', 'Frequency', 'RootClock', 'Clock',
+           'MemorySize', 'MemorySize32',
+           'Latency', 'Frequency', 'RootClock', 'Clock',
            'NetworkBandwidth', 'MemoryBandwidth',
            'Range', 'AddrRange', 'MaxAddr', 'MaxTick', 'AllMemory',
            'Null', 'NULL',
 
     BAR3 = Param.UInt32(0x00, "Base Address Register 3")
     BAR4 = Param.UInt32(0x00, "Base Address Register 4")
     BAR5 = Param.UInt32(0x00, "Base Address Register 5")
-    BAR0Size = Param.UInt32(0, "Base Address Register 0 Size")
-    BAR1Size = Param.UInt32(0, "Base Address Register 1 Size")
-    BAR2Size = Param.UInt32(0, "Base Address Register 2 Size")
-    BAR3Size = Param.UInt32(0, "Base Address Register 3 Size")
-    BAR4Size = Param.UInt32(0, "Base Address Register 4 Size")
-    BAR5Size = Param.UInt32(0, "Base Address Register 5 Size")
+    BAR0Size = Param.MemorySize32('0B', "Base Address Register 0 Size")
+    BAR1Size = Param.MemorySize32('0B', "Base Address Register 1 Size")
+    BAR2Size = Param.MemorySize32('0B', "Base Address Register 2 Size")
+    BAR3Size = Param.MemorySize32('0B', "Base Address Register 3 Size")
+    BAR4Size = Param.MemorySize32('0B', "Base Address Register 4 Size")
+    BAR5Size = Param.MemorySize32('0B', "Base Address Register 5 Size")
 
     CardbusCIS = Param.UInt32(0x00, "Cardbus Card Information Structure")
     SubsystemID = Param.UInt16(0x00, "Subsystem ID")