69 lines
2.2 KiB
Python
69 lines
2.2 KiB
Python
#!/usr/bin/env python3
|
|
# probeModemPrompt.py - get to the "PRESS A OR O AND SET MODEM." prompt with the SwiftLink module
|
|
# resident, then find out why a typed key does or does not reach the game.
|
|
#
|
|
# The game records the last typed character in lastTypedKey ($9248) from the raster IRQ, and
|
|
# waitForAnswerOriginateKey ($0CBD) spins until it holds $C1 ('A') or $CF ('O'). The keyboard scan
|
|
# goes through the comm module's hook at $E012, so this also dumps that vector.
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
import time
|
|
|
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
|
from viceHarness import ViceSession, aciaArgs, readByte, SCRATCH
|
|
|
|
SHOTS = os.path.join(os.path.dirname(os.path.abspath(__file__)), "shots")
|
|
|
|
|
|
def main():
|
|
disk = os.path.abspath(sys.argv[1])
|
|
session = ViceSession(disk, f"{SCRATCH}/prompt.vice.log", aciaArgs(), label="prompt")
|
|
try:
|
|
session.connect()
|
|
session.bootPastLoader()
|
|
session.findWindow()
|
|
session.focus()
|
|
time.sleep(8)
|
|
session.mon("help")
|
|
|
|
# highlight COMPETE WITH MODEM OPPONENT and choose it
|
|
for _ in range(3):
|
|
session.enterMonitor()
|
|
row = readByte(session, 0x91D5)
|
|
session.sock.sendall(b"x\n")
|
|
session.recv(3)
|
|
if row == 0:
|
|
break
|
|
session.hold("KP_8", 250)
|
|
time.sleep(0.8)
|
|
print(f"row = {row}", flush=True)
|
|
session.hold("KP_0", 300)
|
|
time.sleep(25)
|
|
|
|
session.enterMonitor()
|
|
session.mon("m e000 e017")
|
|
session.mon("m 9248 9248")
|
|
session.mon("m 90e9 90ea")
|
|
session.mon("m 0b7d 0b7e")
|
|
session.mon("r")
|
|
session.sock.sendall(b"x\n")
|
|
session.recv(3)
|
|
|
|
for key in ("x", "a", "o", "A"):
|
|
session.hold(key, 500)
|
|
time.sleep(1)
|
|
session.enterMonitor()
|
|
print(f"--- after key {key!r}", flush=True)
|
|
session.mon("m 9248 9248")
|
|
session.mon("m 90e9 90ea")
|
|
session.mon("m e03b e041")
|
|
session.mon("m de00 de03")
|
|
session.sock.sendall(b"x\n")
|
|
session.recv(3)
|
|
session.shot(f"{SHOTS}/promptAfterKeys.png")
|
|
finally:
|
|
session.close()
|
|
|
|
|
|
main()
|