Reduce pin count
diff --git a/verilog/rtl/chip.v b/verilog/rtl/chip.v
index eab7503..02e76de 100644
--- a/verilog/rtl/chip.v
+++ b/verilog/rtl/chip.v
@@ -27,17 +27,17 @@
     output reg cs, // Cartridge chip select
     output wire hsync, // LCD horizontal sync
     output wire vsync, // LCD vertical sync
+    output wire csync, // LCD composite sync
     output wire pvalid, // LCD pixel valid/ clock gate
     output wire [1:0] pixel, // LCD pixel output
     input wire skey, // Serial key input
-    output wire audiol, // Audio left output
-    output wire audior, // Audio right output
-    input wire mode, // Test mode
+    output wire audiolr, // Audio left/right output
     // For testbench only
     output wire done,
     output wire fault
 );
     wire rst = !rstn;
+
     wire [1:0] ct;
     wire [15:0] cpu_a;
     wire [7:0] cpu_dout;
@@ -86,6 +86,7 @@
         .fault(fault)
     );
 
+    assign csync = hsync ^ vsync;
     assign ppu_a[15:13] = 3'b100;
 
     // Internal SRAM (WRAM + VRAM, 16KB)
@@ -147,9 +148,23 @@
     end
 
     // Audio PDM
+    reg lrck;
+    always @(posedge clk) begin
+        if (rst) begin
+            lrck <= 1'b0;
+        end
+        else begin
+            lrck <= ~lrck;
+        end
+    end
+
+    wire audiol;
+    wire audior;
+
     sdm1b #(.W(9)) sdm_left (
         .clk_fast(clk),
-        .rst_n(rstn),
+        .rst(rst),
+        .enable(lrck),
         .din(left[14:6]),
         .error(),
         .dout(audiol)
@@ -157,17 +172,20 @@
 
     sdm1b #(.W(9)) sdm_right (
         .clk_fast(clk),
-        .rst_n(rstn),
+        .rst(rst),
+        .enable(!lrck),
         .din(right[14:6]),
         .error(),
         .dout(audior)
     );
 
+    assign audiolr = (lrck) ? (audiol) : (audior);
+
     // Key serial to parallel
     reg [7:0] key_sr;
     reg [3:0] counter;
     always @(posedge clk) begin
-        if (hsync) begin
+        if (csync) begin
             counter <= 4'b0;
         end
         else begin
diff --git a/verilog/rtl/lfsr_prbs_gen.v b/verilog/rtl/lfsr_prbs_gen.v
index 4f66086..3bd5ca1 100644
--- a/verilog/rtl/lfsr_prbs_gen.v
+++ b/verilog/rtl/lfsr_prbs_gen.v
@@ -43,7 +43,7 @@
     parameter STYLE = "AUTO"
 ) (
     input  wire                  clk,
-    input  wire                  rst_n,
+    input  wire                  rst,
     input  wire                  enable,
     output wire [DATA_WIDTH-1:0] data_out
 );
@@ -154,14 +154,14 @@
 
     always @* begin
         if (INVERT) begin
-            output_reg <= ~lfsr_data;
+            output_reg = ~lfsr_data;
         end else begin
-            output_reg <= lfsr_data;
+            output_reg = lfsr_data;
         end
     end
 
-    always @(posedge clk or negedge rst_n) begin
-        if (~rst_n) begin
+    always @(posedge clk) begin
+        if (rst) begin
             state_reg <= LFSR_INIT;
         end else begin
             if (enable) begin
diff --git a/verilog/rtl/ppu.v b/verilog/rtl/ppu.v
index 662fbb1..c230c1a 100644
--- a/verilog/rtl/ppu.v
+++ b/verilog/rtl/ppu.v
@@ -157,12 +157,12 @@
     reg [7:0] oam_rd_addr_int;
     wire [7:0] oam_rd_addr;
     wire [7:0] oam_wr_addr;
-    reg [15:0] oam_data_out;
+    wire [15:0] oam_data_out;
     wire [7:0] oam_data_out_byte;
     wire [7:0] oam_data_in;
     wire oam_we;
     
-    always @ (negedge clk)
+    always @ (posedge clk)
     begin
         if (oam_we) begin
             if (oam_wr_addr[0])
@@ -170,10 +170,8 @@
             else
                 oam_l[oam_wr_addr[7:1]] <= oam_data_in;
         end
-        else begin
-            oam_data_out <= {oam_u[oam_rd_addr[7:1]], oam_l[oam_rd_addr[7:1]]};
-        end
     end
+    assign oam_data_out = {oam_u[oam_rd_addr[7:1]], oam_l[oam_rd_addr[7:1]]};
     
     assign oam_wr_addr = oam_a[7:0];
     assign oam_rd_addr = (oam_access_ext) ? (oam_a[7:0]) : (oam_rd_addr_int); 
diff --git a/verilog/rtl/sdm1b.v b/verilog/rtl/sdm1b.v
index 2fd3ce9..748ab3e 100644
--- a/verilog/rtl/sdm1b.v
+++ b/verilog/rtl/sdm1b.v
@@ -30,7 +30,8 @@
     parameter integer ADD_NOISE = 1
 ) (
     input          clk_fast,
-    input          rst_n,
+    input          rst,
+    input          enable,
     input  [W-1:0] din,
     output [W-1:0] error,
     output         dout
@@ -44,19 +45,21 @@
         .STYLE     ("AUTO")
     ) u_LFSR(
         .clk     (clk_fast),
-        .rst_n   (rst_n),
-        .enable  (1'b1),
+        .rst     (rst),
+        .enable  (enable),
         .data_out(lfsr_bit)
     );
     reg [W:0] acc_r = 0;
     assign dout  = acc_r[W];
     assign error = acc_r[W-1:0];
-    always @(posedge clk_fast or negedge rst_n) begin
-        if (~rst_n) begin
+    always @(posedge clk_fast) begin
+        if (rst) begin
             acc_r <= 0;
         end else begin
-            if(ADD_NOISE) acc_r <= din + error ^ lfsr_bit[0];
-            else          acc_r <= din + error;
+            if (enable) begin
+                if(ADD_NOISE) acc_r <= din + error ^ lfsr_bit[0];
+                else          acc_r <= din + error;
+            end
         end
     end
 endmodule  /* sdm1b */
\ No newline at end of file
diff --git a/verilog/rtl/simtop.v b/verilog/rtl/simtop.v
index ad1072e..9e65f34 100644
--- a/verilog/rtl/simtop.v
+++ b/verilog/rtl/simtop.v
@@ -27,8 +27,8 @@
     output wire [1:0] pixel,
     output wire valid,
     // Audio output
-    output wire audiol,
-    output wire audior,
+    output reg audiol,
+    output reg audior,
     // For testbench only
     output wire done,
     output wire fault
@@ -41,7 +41,9 @@
     wire bus_wr;
     wire bus_cale;
     wire bus_cs;
+    wire csync;
     wire skey;
+    wire audiolr;
 
     chip chip(
         .clk(clk),
@@ -51,20 +53,30 @@
         .din(bus_din),
         .doe(bus_doe),
         .wr(bus_wr),
-        .cale(bus_cale),
-        .cs(bus_cs),
         .hsync(hs),
         .vsync(vs),
+        .csync(csync),
         .pvalid(valid),
         .pixel(pixel),
         .skey(skey),
-        .audiol(audiol),
-        .audior(audior),
-        .mode(1'b0),
+        .audiolr(audiolr),
         .done(done),
         .fault(fault)
     );
 
+    reg [1:0] ct;
+    always @(posedge clk) begin
+        if (rst) begin
+            ct <= 2'd0;
+        end
+        else begin
+            ct <= ct + 1;
+        end
+    end
+
+    assign bus_cale = ct == 2'b00;
+    assign bus_cs = (ct == 2'b10) && (!bus_a[15] || (bus_a[15:13] == 3'b101));
+
     wire sram_we;
     wire [7:0] sram_dout;
     async_ram #(.WORDS(16384), .ABITS(14)) sram(
@@ -90,7 +102,7 @@
     // Key parallel to serial
     reg [7:0] key_sr;
     always @(posedge clk) begin
-        if (hs) begin
+        if (csync) begin
             key_sr <= key;
         end
         else if (valid) begin
@@ -99,4 +111,20 @@
     end
     assign skey = key_sr[7];
 
+    reg lrck;
+    always @(posedge clk) begin
+        if (rst) begin
+            lrck <= 1'b0;
+        end
+        else begin
+            lrck <= ~lrck;
+            if (lrck) begin
+                audiol <= audiolr;
+            end
+            else begin
+                audior <= audiolr;
+            end
+        end
+    end
+
 endmodule