You are correct. That is why I am asking for a more tangible explanation.
So let's examine a basic hack to understand the role of the CPU: Adding a spindash to Sonic 1.
First up, Sonic's list of attributes are stored as Obj01, which is defined in line 23466. When the program is executed, it will jump to a subroutine for this object which will allocate memory for all his local object variables, velocity, speed, angle, etc. The CPU itself will set the registers and RAM locations to store these variables for the Sonic object upon object creation.
In the location Obj01_MdNormal are a bunch of conditional branches to handle Sonic's actions in different situations. These are bsr branches - branch to subroutine. Essentially, the CPU takes two values stored in two different registers, compares them, and if they are equal, it sets a flag in a result register that gets looked at to determine which branch the subroutine should take. In our example, we want to add a conditional for when Sonic is ducking and pressing jump, like so:
Obj01_MdNormal: ; XREF: Obj01_Modes
bsr.w Sonic_SpinDash ; This is the line I'm adding in this spin dash example
bsr.w Sonic_Jump
bsr.w Sonic_SlopeResist
bsr.w Sonic_Move
bsr.w Sonic_Roll
bsr.w Sonic_LevelBound
jsr SpeedToPos
bsr.w Sonic_AnglePos
bsr.w Sonic_SlopeRepel
rts
The top bsr will take us to the Sonic_SpinDash subroutine provided the conditional is met. Now here is our Sonic_SpinDash subroutine, I'm just going to describe what the CPU is doing in comments after each line:
Sonic_SpinDash:
tst.b $39(a0) // test a conditional if pointer at address 0 holds a value equal to $39 (testing to see if spindash flag is set), sets z flag if condition is true
bne.s loc_1AC8E //if z flag indicates previous condition is false (because we're using
Branch
Not
Equal) branch to location 1AC8E (i.e. bail on the subroutine)
cmpi.b #8,$1C(a0) //compare integer "8" to address 0 ('8' is a bitmask for controller input at this point), sets z flag if condition is true
bne.s locret_1AC8C //if z flag indicates previous condition is false (because we're using
Branch
Not
Equal) branch to location 1AC8C (i.e. bail on the subroutine)
move.b ($FFFFF603).w,d0 //move word value "FFFFF603" to data register 0 (this is the value of one spindash "revolution" to potential velocity.
and so forth. I don't really have the time to go over each individual line in this hack because I'm at work, but you can see what the CPU is doing very clearly. It's comparing conditionals, allocating memory, doing mathematical computation, polling for input... the things I described.