User Tools

Site Tools


microvax_mem_test

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

microvax_mem_test [2026/04/29 01:28] – created adminmicrovax_mem_test [2026/04/29 01:29] (current) admin
Line 7: Line 7:
 <code>python vax_mem_full.py</code> <code>python vax_mem_full.py</code>
  
 +Script:
  
 +<code>
 +
 +
 +import serial
 +import time
 +import re
 +
 +# Increase timeout and use a slightly slower baud rate if 9600 is flaky, 
 +# but 9600 is usually standard.
 +ser = serial.Serial('/dev/ttyS0', 9600, timeout=1)
 +
 +def vax_io(cmd):
 +    # 1. Clear the buffer so we don't read old garbage
 +    ser.reset_input_buffer()
 +    
 +    # 2. Send the command with a Carriage Return
 +    ser.write(f"{cmd}\r".encode())
 +    
 +    # 3. Wait for the VAX to finish. We look for the '>>>' prompt.
 +    timeout = time.time() + 2  # 2 second safety timeout
 +    full_resp = ""
 +    while ">>>" not in full_resp:
 +        if ser.in_waiting > 0:
 +            full_resp += ser.read(ser.in_waiting).decode(errors='ignore')
 +        if time.time() > timeout:
 +            break
 +        time.sleep(0.05)
 +    
 +    return full_resp
 +
 +def test_onboard_full_map():
 +    start = 0x00300000
 +    end = 0x003FFFFF
 +    error_count = 0
 +    
 +    print(f"--- Mapping Entire Onboard RAM (4MB) ---")
 +    
 +    # We'll use a slightly larger step (e.g., 1KB) if you want a fast map,
 +    # or keep it at 4 to check every single longword.
 +    for addr in range(start, end, 4):
 +        addr_hex = f"{addr:08X}"
 +        
 +        # Test pattern: All zeros then all ones
 +        for pat in [0x00000000, 0xFFFFFFFF, 0xAAAAAAAA, 0x55555555]:
 +            pat_hex = f"{pat:08X}"
 +            
 +            vax_io(f"D /L /P /U {addr_hex} {pat_hex}")
 +            resp = vax_io(f"E /L /P /U {addr_hex}")
 +            
 +            match = re.search(r"P\s+[0-9A-F]+\s+([0-9A-F]+)", resp, re.IGNORECASE)
 +            
 +            if match:
 +                received_val = match.group(1).upper()
 +                if received_val != pat_hex:
 +                    error_count += 1
 +                    print(f"\n[!] ERROR at {addr_hex}")
 +                    print(f"    Expected: {pat_hex} | Recv: {received_val}")
 +                    
 +                    # If we get too many errors, the board might be totally dead
 +                    if error_count > 100:
 +                        print("\n[!!!] Too many errors! Likely a controller or bus failure.")
 +                        return
 +
 +        if addr % 0x1000 == 0:
 +            print(f"Mapping... {addr_hex} (Errors found: {error_count})", end='\r')
 +
 +    print(f"\nScan Complete. Total errors logged: {error_count}")
 +
 +# Clear the screen on the VAX first
 +vax_io("\r")
 +test_onboard_full_map()
 +</code>
  
  
microvax_mem_test.1777426086.txt.gz · Last modified: by admin