- incb := (others => '1');
- end if;
-
- if (ext_reg.sel = '1') and ext_reg.wr_en = '1' then
- case ext_reg.addr(1 downto 0) is
- when "00" =>
- if ext_reg.byte_en(0) = '1' then
- reg_nxt_v.psw := (ext_reg.data(0),ext_reg.data(1),ext_reg.data(3),ext_reg.data(2));
- psw <= reg_nxt_v.psw;
- end if;
- when "01" =>
- --STACK_POINTER
- if ext_reg.byte_en(0) = '1' then
- reg_next_v.preg(0)(byte_t'range) := ext_reg.data(byte_t'range);
- end if;
- if ext_reg.byte_en(1) = '1' then
- reg_next_v.preg(0)((byte_t'length*2)-1 downto byte_t'length) :=
- ext_reg.data((byte_t'length*2)-1 downto byte_t'length) ;
- end if;
- if ext_reg.byte_en(2) = '1' then
- reg_next_v.preg(0)((byte_t'length*3)-1 downto byte_t'length*2) :=
- ext_reg.data((byte_t'length*3)-1 downto byte_t'length*2) ;
- end if;
- if ext_reg.byte_en(3) = '1' then
- reg_next_v.preg(0)((byte_t'length*4)-1 downto byte_t'length*3) :=
- ext_reg.data((byte_t'length*4)-1 downto byte_t'length*3) ;
- end if;
- when others => null;
- end case;
- end if;
-
- if (ext_reg.sel = '1') and wr_en = '0' then
- case ext_reg.addr(1 downto 0) is
- when "00" =>
- if ext_reg.byte_en(0) = '1' then
- data_out(3 downto 0) <= (reg.status.sign, reg.status.carry, reg.status.oflo, reg.status.zero);
- end if;
- when "01" =>
- --STACK_POINTER
- if ext_reg.byte_en(0) = '1' then
- data_out(byte_t'range) <= reg.preg(0)(byte_t'range);
- end if;
- if ext_reg.byte_en(1) = '1' then
- data_out((byte_t'length*2)-1 downto byte_t'length) <=
- reg_preg(0)((byte_t'length*2)-1 downto byte_t'length) ;
- end if;
- if ext_reg.byte_en(2) = '1' then
- data_out((byte_t'length*3)-1 downto 2*byte_t'length) <=
- reg_preg(0)((byte_t'length*3)-1 downto 2*byte_t'length) ;
- end if;
- if ext_reg.byte_en(3) = '1' then
- data_out((byte_t'length*4)-1 downto 3*byte_t'length) <=
- reg_preg(0)((byte_t'length*4)-1 downto 3*byte_t'length) ;
- end if;
- when others => null;
- end case;