第 62 环 · 按序号点选(说「第二场」就切过去)
第 61 环终于把能点的名字念出来了。可用户听完,未必想把「家里的事」四个字一字不差地说回去——最自然的回应是「第二场」。上一环收到「第二场」只会把它当成一个名字去比,24 字节永远不相等,于是又回「没找到:…」。
这一环让「第 N 场」本身成为可点的东西:硬件在扫名字格之前先认序号,直接取活清单第 N 条,排一句「好,接着第N场。」,再走同一条换场通路。
name_pick 加了一条「序号」快路。全名命中、反问给选项、空名字这些老路一个字没改;新增的是读表头之后、扫名字格之前的一次判断:
npu.pick 同一口径),硬件算 0x1C0 + 1 + (N-1)×2 取那一条,不读名字格、不比 24 字节;0x230,然后发一拍 enter,把会话号交给开关场引擎;miss_r,避免写完后误走 enter);空清单只报 err、不回话;npu.name,只是入口多认了一种说法。活清单 4 场:0xB1 记一笔 / 0xB2 查资料 / 0xB3 家里的事 / 0xB4 跑步计划
说「第二场」→ 读表头 cnt=4 → 认序号 N=2 → 取第 2 条
→ 0xB2 / 槽 1 → 回「好,接着第二场。」24 字节
→ enter 0xB2(ncmp=0:一场名字都没比)
说「第九场」→ N=9 > 4 → 回「没找到,是这四场吗?」(36 字节)
→ 不换场,SX_CUR 仍 0xB2
软硬接口。点名页新增只读探针:NP_ORD(0xFEC,这一趟认没认出序号)、NP_ORDN(0xFF0,认出的是几);新观察点 SCREEN38(0xFF4)。前 61 圈的地址映射一字不改。
协同仿真 tb_min_soc62:重建目录,造四场会话 0xB1..0xB4,依次改名「记一笔 / 查资料 / 家里的事 / 跑步计划」,然后:
NP_ORD=1 / NP_ORDN=2 / NP_OK=1 / NP_SID=0xB2 / NP_SLOT=1 / NP_NCMP=0 / NP_BYTES=24 / NP_ANSWERED=1,0x230 与「好,接着第二场。」逐字相同,SX_CUR 切到 0xB2;NP_ORD=1 / NP_ORDN=9 / NP_OK=0 / NP_ERR=1 / NP_ANSWERED=1 / NP_NCMP=0,回 36 字节「没找到,是这四场吗?」,SX_CUR 仍 0xB2——不换场;NP_ORD=0 / NP_OK=1 / NP_SID=0xB2 / NP_NCMP=2(第 2 条命中);NP_ORD=0,不认成序号,走比名字路径;NP_CORE=0:核一个点名页配置寄存器都没写。主通路 SCREEN=0xF905FD04、SCREEN2~37 与第 25~61 环逐位一致。单元仿真 tb_name_pick62(第二场 / 第4场 / 越界第七场 / 全名命中 / 「第二场会议」不算序号 / 空名字 / 可复现)通过;协同 tb_min_soc62 通过,tb_name_pick61 与 tb_min_soc61 复跑 PASS。
人对着一列东西说话,最省力的指法从来不是复述全名,而是「第二个」。手机只有一个 AI 对话窗口,它要听得懂这种最自然的指法,而不是要求用户记住并背出整串名字。
这一环把「念出来」接成了「点得到」:AI 说得出选项,用户就点得中选项。说错序号也不沉默——它会告诉你没有第九场,并问是不是这四场。对话继续往前走,而不是停在「我没听懂」。
序号用于删除。这一环让「第二场」能点开,下一步该让「删掉第二场」也能直接执行——把序号从「选」扩展到「管」,让清单真的能被一句话整理。