From 89cd34c7dbb383a4046790cdfb4f7d46eb81ea68 Mon Sep 17 00:00:00 2001
From: David Banks <dave@hoglet.com>
Date: Fri, 25 Oct 2019 17:07:27 +0100
Subject: [PATCH] T80: comments only

Change-Id: Id680066f04c3ede403eea87b6c433c6c913f09a8
---
 src/T80/T80_MCode.vhd | 71 +++++++++++++++++++++++++++++++++++++------
 1 file changed, 62 insertions(+), 9 deletions(-)

diff --git a/src/T80/T80_MCode.vhd b/src/T80/T80_MCode.vhd
index f5312bd..0d1fbab 100644
--- a/src/T80/T80_MCode.vhd
+++ b/src/T80/T80_MCode.vhd
@@ -643,28 +643,81 @@ begin
 					Set_Addr_To <= aSP;
 				when 2 =>
 					Read_To_Reg <= '1';
-					Set_BusA_To <= "0101";
-					Set_BusB_To <= "0101";
+					Set_BusA_To <= "0101"; -- L, target of Read_To_Reg
+					Set_BusB_To <= "0101"; -- L, input of ALU
 					Set_Addr_To <= aSP;
-					LDZ <= '1';
+					LDZ <= '1';            -- also load Z
 				when 3 =>
-					IncDec_16 <= "0111";
+					IncDec_16 <= "0111";   -- Increment SP
 					Set_Addr_To <= aSP;
 					TStates <= "100";
 					Write <= '1';
 				when 4 =>
 					Read_To_Reg <= '1';
-					Set_BusA_To <= "0100";
-					Set_BusB_To <= "0100";
+					Set_BusA_To <= "0100"; -- H, target of Read_To_Reg
+					Set_BusB_To <= "0100"; -- H, input of ALU
 					Set_Addr_To <= aSP;
-					LDW <= '1';
+					LDW <= '1';            -- also load Z
 				when 5 =>
-					IncDec_16 <= "1111";
+					IncDec_16 <= "1111";   -- Decrement SP
 					TStates <= "101";
 					Write <= '1';
 				when others => null;
 				end case;
-			end if;
+            end if;
+
+-- The T80 implementation does:
+--
+-- (4) M1 fetch
+-- (3) M2 Read (SP) -> L, Z
+--        L -> ALU
+-- (4) M3 Write ALU result -> (SP)
+--        SP++
+-- (3) M4 Read (SP) -> H, W
+--        H -> ALU
+-- (5) M5 Write ALU result -> (SP)
+--        SP--
+--
+-- The Z80 does
+-- (4) M1 fetch
+-- (3) M2 Read (SP) -> Z
+--     SP++
+-- (4) M3 Read (SP) -> W
+-- (3) M4 Write H -> (SP)
+--     SP--
+-- (5) M5 Write L -> (SP)
+--
+-- and somehow WZ -> HL at the end!
+--
+-- Attempt at a new version.
+--
+--				case to_integer(unsigned(MCycle)) is
+--				when 1 =>
+--					Set_Addr_To <= aSP;
+--				when 2 =>
+--					IncDec_16 <= "0111";
+--					Read_To_Reg <= '1';
+--					Set_BusA_To <= "0101";
+--					Set_BusB_To <= "0101";
+--					Set_Addr_To <= aSP;
+--					LDZ <= '1';
+--				when 3 =>
+--					Read_To_Reg <= '1';
+--					Set_BusA_To <= "0100";
+--					Set_BusB_To <= "0100";
+--					Set_Addr_To <= aSP;
+--					TStates <= "100";
+--					LDW <= '1';
+--				when 4 =>
+--					IncDec_16 <= "1111";
+--					Set_Addr_To <= aSP;
+--					Write <= '1';
+--				when 5 =>
+--					TStates <= "101";
+--					Write <= '1';
+--				when others => null;
+--				end case;
+--			end if;
 
 -- 8 BIT ARITHMETIC AND LOGICAL GROUP
 		when "10000000"|"10000001"|"10000010"|"10000011"|"10000100"|"10000101"|"10000111"