Code:
@trace
def ADD(): # 03153
global A, B, C, D, E, F, M
B = A
A = C = A + C
@trace
def SUB(): # 03152
global A, B, C, D, E, F, M
B = A
A = C = A - C
@trace
def MPY(): # 03345
global A, B, C, D, E, F, M
B = A
A = C = A * C
@trace
def DIV(): # 03343
global A, B, C, D, E, F, M
B = C
A = C = A / C
@trace
def XTY(): # 03004
global A, B, C, D, E, F, M
B = A
D = C
A = C = A**C
@trace
def ONE(): # 03106
global A, B, C, D, E, F, M
A, C = C, 1
@trace
def CSN(): # 03321
global A, B, C, D, E, F, M
E = - E
@trace
def DOWN_ROTATE():
global A, B, C, D, E, F, M
C, D, E, F = D, E, F, C
@trace
def STACK_A():
global A, B, C, D, E, F, M
A, D, E = D, E, F
@trace
def C_STACK():
global A, B, C, D, E, F, M
D, E, F = C, D, E
@trace
def A_EXCHANGE_B():
global A, B, C, D, E, F, M
A, B = B, A
@trace
def B_EXCHANGE_C():
global A, B, C, D, E, F, M
B, C = C, B
@trace
def C_EXCHANGE_M():
global A, B, C, D, E, F, M
C, M = M, C
@trace
def B_C():
global A, B, C, D, E, F, M
C = B
@trace
def C_A():
global A, B, C, D, E, F, M
A = C
@trace
def M_C():
global A, B, C, D, E, F, M
C = M
@trace
def TEN6(): # 03354
global A, B, C, D, E, F, M
C = M
C *= 100
A *= 10000
def trace(operation):
def fmt(s):
return str(s)
def wrapper():
operation()
if SYMBOLIC:
print((
f"A: {fmt(A):<45s} "
f"B: {fmt(B):<45s} "
f"C: {fmt(C):<45s} "
f"D: {fmt(D):<45s} "
f"E: {fmt(E):<45s} "
f"F: {fmt(F):<45s} "
f"M: {fmt(M):<45s} "
f": {operation.__name__} "
))
else:
print((
f"A: {A:< 20.12e} "
f"B: {B:< 20.12e} "
f"C: {C:< 20.12e} "
f"D: {D:< 20.12e} "
f"E: {E:< 20.12e} "
f"F: {F:< 20.12e} "
f"M: {M:< 20.12e} "
f": {operation.__name__} "
))
return wrapper
And now we just follow the assembler code.