Slowly and lazily, just like the snail climbing Fuji mountain, I added ability to execute MVI instructions. This was as easy as defining a handful of registers and setting them in corresponding places:

    module CPU(input iClk, input iRst, output [7:0] oAddressBus, input [7:0] iMemoryValue);

    localparam MVI=2'b00, MOV=2'b01, ALU=2'b10, ALI=2'b11;

    localparam B = 3'b000, C = 3'b001, D = 3'b010, E = 3'b011, 
               H = 3'b100, L = 3'b101, M = 3'b110, A = 3'b111;

    reg [7:0] _pc;

    reg _mode;
    localparam
        NORMAL=1'b0,
        READ_IMMED=1'b1;

    reg [7:0] _instruction;
    //our new and shiny registers:
    reg [7:0] _a, _b, _c, _d, _e, _h, _l;

    always @(posedge iClk, posedge iRst)
    begin
        if(iRst)
            begin
                $display("resetting...");
                _pc = 8'h0;
                _mode = NORMAL;
            end
        else begin
            $display("PC:%d", _pc);
            $display("mem:%d", iMemoryValue);

            case(_mode)
                NORMAL:
                    if(iMemoryValue == 8'h0) $display("executing NOP!");
                    else case(iMemoryValue[7:6])
                        MVI: if(iMemoryValue[2:0] == M) begin
                                $display("initiating MVI");
                                _mode = READ_IMMED;
                                _instruction = iMemoryValue;
                             end
                             else $display("unknown instruction");
                        default:
                            $display("unknown instruction");
                    endcase
                READ_IMMED: begin
                    case(_instruction[5:3])
                        B: begin 
                            $display("MVI B, %d", iMemoryValue);
                            //now we can actually perform the operation requested:
                            _b = iMemoryValue;
                        end
                        C: begin
                            $display("MVI C, %d", iMemoryValue);
                            _c = iMemoryValue;
                        end
                        D: begin
                            $display("MVI D, %d", iMemoryValue);
                            _d = iMemoryValue;
                        end
                        E: begin
                            $display("MVI E, %d", iMemoryValue);
                            _e = iMemoryValue;
                        end
                        H: begin
                            $display("MVI H, %d", iMemoryValue);
                            _h = iMemoryValue;
                        end
                        L: begin
                            $display("MVI L, %d", iMemoryValue);
                            _l = iMemoryValue;
                        end
                        //moving from memory to memory is not supported in this architecture
                        M: $display("unknown instruction");
                        A: begin
                            $display("MVI A, %d", iMemoryValue);
                            _a = iMemoryValue;
                        end
                    endcase
                    _mode = NORMAL;
                end
            endcase

            _pc = _pc + 1'b1;
        end
    end

    assign oAddressBus = _pc;

endmodule  

Since the debug messages were not changed, the printout looks exactly same as last time.

The next step should be support of MOV instructions.