summaryrefslogtreecommitdiff
path: root/macosx/Source/PcsxrMemoryObject.m
diff options
context:
space:
mode:
authoriCatButler <i.am.catbutler@gmail.com>2016-03-30 15:07:35 +0100
committeriCatButler <i.am.catbutler@gmail.com>2016-03-30 15:07:35 +0100
commit8b4350fee747708ffd376744ef5dc1e239a87ba6 (patch)
treea9ab6e2f25e06edc7c668353f8000856704f7fa3 /macosx/Source/PcsxrMemoryObject.m
parente3df273095a5800e3dcdcb63bd66e269c0c2d3a8 (diff)
downloadpcsxr-8b4350fee747708ffd376744ef5dc1e239a87ba6.tar.gz
Bring up to date with PCSX-R master (97809)
Diffstat (limited to 'macosx/Source/PcsxrMemoryObject.m')
-rw-r--r--macosx/Source/PcsxrMemoryObject.m81
1 files changed, 43 insertions, 38 deletions
diff --git a/macosx/Source/PcsxrMemoryObject.m b/macosx/Source/PcsxrMemoryObject.m
index 9860e7fa..e8393608 100644
--- a/macosx/Source/PcsxrMemoryObject.m
+++ b/macosx/Source/PcsxrMemoryObject.m
@@ -22,32 +22,37 @@
@property (readwrite) BOOL hasImages;
@end
+#pragma pack(push,2)
+struct PSXRGBColor {
+ UInt8 r;
+ UInt8 g;
+ UInt8 b;
+};
+#pragma pack(pop)
+
@implementation PcsxrMemoryObject
+ (NSArray *)imagesFromMcd:(McdBlock *)block
{
NSMutableArray *imagesArray = [[NSMutableArray alloc] initWithCapacity:block->IconCount];
for (int i = 0; i < block->IconCount; i++) {
- NSImage *memImage;
- @autoreleasepool {
- NSBitmapImageRep *imageRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL pixelsWide:16 pixelsHigh:16 bitsPerSample:8 samplesPerPixel:3 hasAlpha:NO isPlanar:NO colorSpaceName:NSCalibratedRGBColorSpace bytesPerRow:0 bitsPerPixel:0];
-
- short *icon = block->Icon;
-
- int x, y, c, v, r, g, b;
- for (v = 0; v < 256; v++) {
- x = (v % 16);
- y = (v / 16);
- c = icon[(i * 256) + v];
- r = (c & 0x001f) << 3;
- g = ((c & 0x03e0) >> 5) << 3;
- b = ((c & 0x7c00) >> 10) << 3;
- [imageRep setColor:[NSColor colorWithCalibratedRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1.0] atX:x y:y];
- }
- memImage = [[NSImage alloc] init];
- [memImage addRepresentation:imageRep];
- [memImage setSize:NSMakeSize(32, 32)];
+ NSBitmapImageRep *imageRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL pixelsWide:16 pixelsHigh:16 bitsPerSample:8 samplesPerPixel:3 hasAlpha:NO isPlanar:NO colorSpaceName:NSCalibratedRGBColorSpace bytesPerRow:16*3 bitsPerPixel:24];
+ struct PSXRGBColor *cocoaImageData = (struct PSXRGBColor *)imageRep.bitmapData;
+ short *icon = block->Icon;
+
+ for (int v = 0; v < 256; v++) {
+ int c = icon[(i * 256) + v];
+ int r = (c & 0x001f) << 3;
+ int g = ((c & 0x03e0) >> 5) << 3;
+ int b = ((c & 0x7c00) >> 10) << 3;
+ struct PSXRGBColor *colorItem = &cocoaImageData[v];
+ colorItem->r = r;
+ colorItem->g = g;
+ colorItem->b = b;
}
+ NSImage *memImage = [[NSImage alloc] init];
+ [memImage addRepresentation:imageRep];
+ [memImage setSize:NSMakeSize(32, 32)];
[imagesArray addObject:memImage];
}
return [NSArray arrayWithArray:imagesArray];
@@ -86,23 +91,23 @@ static NSString *MemLabelMultiSave;
{
switch (flagNameIndex) {
default:
- case memFlagFree:
+ case PCSXRMemFlagFree:
return MemLabelFree;
break;
- case memFlagEndLink:
+ case PCSXRMemFlagEndLink:
return MemLabelEndLink;
break;
- case memFlagLink:
+ case PCSXRMemFlagLink:
return MemLabelLink;
break;
- case memFlagUsed:
+ case PCSXRMemFlagUsed:
return MemLabelUsed;
break;
- case memFlagDeleted:
+ case PCSXRMemFlagDeleted:
return MemLabelDeleted;
break;
}
@@ -126,22 +131,22 @@ static NSString *MemLabelMultiSave;
{
if ((blockFlags & 0xF0) == 0xA0) {
if ((blockFlags & 0xF) >= 1 && (blockFlags & 0xF) <= 3)
- return memFlagDeleted;
+ return PCSXRMemFlagDeleted;
else
- return memFlagFree;
+ return PCSXRMemFlagFree;
} else if ((blockFlags & 0xF0) == 0x50) {
if ((blockFlags & 0xF) == 0x1)
- return memFlagUsed;
+ return PCSXRMemFlagUsed;
else if ((blockFlags & 0xF) == 0x2)
- return memFlagLink;
+ return PCSXRMemFlagLink;
else if ((blockFlags & 0xF) == 0x3)
- return memFlagEndLink;
+ return PCSXRMemFlagEndLink;
} else
- return memFlagFree;
+ return PCSXRMemFlagFree;
//Xcode complains unless we do this...
NSLog(@"Unknown flag %x", blockFlags);
- return memFlagFree;
+ return PCSXRMemFlagFree;
}
- (instancetype)initWithMcdBlock:(McdBlock *)infoBlock startingIndex:(uint8_t)startIdx size:(uint8_t)memSize
@@ -150,7 +155,7 @@ static NSString *MemLabelMultiSave;
self.startingIndex = startIdx;
self.blockSize = memSize;
self.flag = [PcsxrMemoryObject memFlagsFromBlockFlags:infoBlock->Flags];
- if (self.flag == memFlagFree) {
+ if (self.flag == PCSXRMemFlagFree) {
self.imageArray = @[];
self.hasImages = NO;
self.title = @"Free block";
@@ -279,23 +284,23 @@ static inline void SetupAttrStr(NSMutableAttributedString *mutStr, NSColor *txtc
switch (flag) {
default:
- case memFlagFree:
+ case PCSXRMemFlagFree:
return attribMemLabelFree;
break;
- case memFlagEndLink:
+ case PCSXRMemFlagEndLink:
return attribMemLabelEndLink;
break;
- case memFlagLink:
+ case PCSXRMemFlagLink:
return attribMemLabelLink;
break;
- case memFlagUsed:
+ case PCSXRMemFlagUsed:
return attribMemLabelUsed;
break;
- case memFlagDeleted:
+ case PCSXRMemFlagDeleted:
return attribMemLabelDeleted;
break;
}
@@ -303,7 +308,7 @@ static inline void SetupAttrStr(NSMutableAttributedString *mutStr, NSColor *txtc
- (BOOL)showCount
{
- if (flag == memFlagFree) {
+ if (flag == PCSXRMemFlagFree) {
//Always show the size of the free blocks
return YES;
} else {