No you are not alone.
1) don't use buffer port at all. I am not sure what y output is for.
2) use clock in your design(clock your process). This is not essential right now but will be soon in your project
3) use one case statement for each output; one for alu_out and one for the mystery y output. You can't read alu_out(as you are assigning alu_out to y), I don't know how your compiler didn't issue an error.
4) split up your opcode into 3 bits and 2 bits(assuming you need them separately) one case for opcode(4 downto 2):
case opcode(4 downto 2) is
when "000" etc.
do not use (- or x)
for y output use a separate case:
case opcode(1 dwnto 0) is
when "00" .etc
Hope this helps