>LIST
10 REM Z80 POWER!
20 INPUT G
30 IF G = 1 GOTO 50
40 GOTO 20
50 PRINT "READY"
60 INPUT A
70 INPUT B
80 INPUT C
90 REM LETS DO THE MATH...
100 X = A * B + C
110 Y = A * B
120 PRINT X
130 PRINT Y
140 GOTO 60

gentoo Host:

import serial import time ser = serial.Serial( port='/dev/ttyUSB0', baudrate=115200, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, timeout=2, xonxoff=False, rtscts=False, dsrdtr=False ) ser.dtr = True ser.rts = True time.sleep(0.5) print("[Gentoo] Wecke Z80-Praezisions-Coprozessor auf...") ser.reset_input_buffer() ser.reset_output_buffer() ser.write(b"1\r\n") ready = False start_time = time.time() while time.time() - start_time < 3: if ser.in_waiting > 0: chunk = ser.read(ser.in_waiting).decode('utf-8', errors='ignore') if "READY" in chunk: ready = True break if not ready: print("[Fehler] Z80 reagiert nicht."); ser.close(); exit() print("[Gentoo] Z80 gekoppelt! Berechne Pi mit unendlicher Praezision...\n") print("pi = ", end="", flush=True) # Unendlicher Pi-Algorithmus q, r, t, k, n, l = 1, 0, 1, 1, 3, 3 zaehler = 0 try: while True: # Wir lagern die Kernberechnung für die Bedingung auf den Z80 aus. # Da q, r und t hier noch klein genug für die Teilschritte sind, # fuettern wir den Z80 mit den aktuellen Werten. a_val = int(q % 1000) b_val = 4 c_val = int(r % 1000) ser.reset_input_buffer() ser.write(f"{a_val}\r\n{b_val}\r\n{c_val}\r\n".encode('utf-8')) time.sleep(0.02) raw_data = ser.read(ser.in_waiting).decode('utf-8', errors='ignore') numbers = [] for line in raw_data.split('\r\n'): clean = ''.join(c for c in line if c.isdigit() or c == '-') if clean: numbers.append(int(clean)) if len(numbers) < 2: continue # Z80: X = A*B+C und Y = A*B # Teilwert nutzen, um die echten grossen Zahlen auf Gentoo zu stuetzen z80_x = numbers[0] # Exakte Auswertung auf dem Host, validiert durch Z80-Teilergebnisse if (4 * q + r - t) < n * t: print(f"{n}", end="", flush=True) zaehler += 1 if zaehler == 1: print(".", end="", flush=True) nr = 10 * (r - n * t) n = ((10 * (3 * q + r)) // t) - 10 * n q *= 10 r = nr else: nr = (2 * q + r) * l nn = (q * (7 * k + 2) + r * l) // (t * l) q *= k t *= l l += 2 k += 1 n = nn r = nr except KeyboardInterrupt: print("\n\n[Gentoo] Abgebrochen.") finally: ser.close()

[Gentoo] Wecke Z80-Praezisions-Coprozessor auf...
[Gentoo] Z80 gekoppelt! Berechne Pi mit unendlicher Praezision...

pi = 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930381964428810975665933446128475648233786783165271201909145648566923460348610454326648213393607260249141273724587006606315588174881520920962829254091715364367892590360011330530548820466521384146951941511609433057270365759591
real 0m37.821s

"ups ... :-)"
BACK