diff --git a/frontends/sdl/src/main.rs b/frontends/sdl/src/main.rs
index 2bbebc802c027d6b7a06ecee96c9e0ae370172a0..9013fb9384c4b5c85a0971d465794c36ade689b8 100644
--- a/frontends/sdl/src/main.rs
+++ b/frontends/sdl/src/main.rs
@@ -484,7 +484,8 @@ fn main() {
     // ROM file and starts running it
     let mut emulator = Emulator::new(game_boy);
     emulator.start(SCREEN_SCALE);
-    emulator.load_rom(Some("../../res/roms/demo/pocket.gb"));
+    emulator.load_rom(Some("../../res/roms.prop/tetris_dx.gbc"));
+    //emulator.load_rom(Some("../../res/roms/demo/pocket.gb"));
     emulator.toggle_palette();
     emulator.run();
 }
diff --git a/src/ppu.rs b/src/ppu.rs
index 8811a1aba264600e35debae4e1bfd727f0ce0c19..f008e1bf73707bbfea037ce0d4f1096783fd5860 100644
--- a/src/ppu.rs
+++ b/src/ppu.rs
@@ -239,6 +239,10 @@ pub struct Ppu {
     /// be re-read if required by the system.
     palettes: [u8; 3],
 
+    /// The raw byte information (64 bytes) for the color palettes,
+    /// both the background and the objects one.
+    palettes_color: [[u8; 64]; 2],
+
     /// The scroll Y register that controls the Y offset
     /// of the background.
     scy: u8,
@@ -380,6 +384,7 @@ impl Ppu {
             palettes_color_bg: [[[0u8; RGB_SIZE]; PALETTE_SIZE]; 8],
             palettes_color_obj: [[[0u8; RGB_SIZE]; PALETTE_SIZE]; 8],
             palettes: [0u8; 3],
+            palettes_color: [[0u8; 64]; 2],
             scy: 0x0,
             scx: 0x0,
             wy: 0x0,
@@ -424,6 +429,7 @@ impl Ppu {
         self.palettes_color_bg = [[[0u8; RGB_SIZE]; PALETTE_SIZE]; 8];
         self.palettes_color_obj = [[[0u8; RGB_SIZE]; PALETTE_SIZE]; 8];
         self.palettes = [0u8; 3];
+        self.palettes_color = [[0u8; 64]; 2];
         self.scy = 0x0;
         self.scx = 0x0;
         self.ly = 0x0;
@@ -574,6 +580,12 @@ impl Ppu {
             0xff4f => 0xff,
             // 0xFF68 — BCPS/BGPI (CGB only)
             0xff68 => self.palette_address_bg | if self.auto_increment_bg { 0x80 } else { 0x00 },
+            // 0xFF69 — BCPD/BGPD (CGB only)
+            0xff69 => self.palettes_color[0][self.palette_address_bg as usize],
+            // 0xFF6A — OCPS/OBPI (CGB only)
+            0xff6A => self.palette_address_obj | if self.auto_increment_obj { 0x80 } else { 0x00 },
+            // 0xFF6B — OCPD/OBPD (CGB only)
+            0xff6b => self.palettes_color[1][self.palette_address_obj as usize],
             _ => {
                 warnln!("Reading from unknown PPU location 0x{:04x}", addr);
                 0xff
@@ -647,6 +659,29 @@ impl Ppu {
                 self.palette_address_bg = value & 0x3f;
                 self.auto_increment_bg = value & 0x80 == 0x80;
             }
+            // 0xFF69 — BCPD/BGPD (CGB only)
+            0xff69 => {
+                self.palettes_color[0][self.palette_address_bg as usize] = value;
+                //@TODO: update palette background data accordingly for the give update
+                // index - should not be a problem
+                if self.auto_increment_bg {
+                    self.palette_address_bg = (self.palette_address_bg + 1) & 0x3f;
+                }
+            }
+            // 0xFF6A — OCPS/OBPI (CGB only)
+            0xff6a => {
+                self.palette_address_obj = value & 0x3f;
+                self.auto_increment_obj = value & 0x80 == 0x80;
+            }
+            // 0xFF6B — OCPD/OBPD (CGB only)
+            0xff6b => {
+                self.palettes_color[1][self.palette_address_obj as usize] = value;
+                //@TODO: update palette object data accordingly for the give update
+                // index - should not be a problem
+                if self.auto_increment_obj {
+                    self.palette_address_obj = (self.palette_address_obj + 1) & 0x3f;
+                }
+            }
             0xff7f => (),
             _ => warnln!("Writing in unknown PPU location 0x{:04x}", addr),
         }