第 76 环 · 翻页带序号(念名字时报序号,点「第二个」就切过去)
第 75 环把「还有呢」一页页翻到底,可用户听完想选其中一场,仍得把名字完整说一遍。名字长、口音重、背景吵的时候,三四个字就是点不出来。
这一环让每一页报序号:「第一个记一笔,第二个工作那场等。」用户只需说「第二个」。序号必须和念出来的顺序一一对应,不能出现「听的是第二个、点的是第三场」。
序号 = 余场序列里的位置。跳过当前这场、跳过归属不符或名字为空的场,跨页连续编号。第 0 页从「第一个」起句,第 1 页起加「接着」;带序号一页最多两位——一个「第N个」占 9 字节,64 字节窗口只容得下两位,这是诚实的硬约束,不硬塞。
每页收口写一张「余场序号表」。落会话记忆区 0x2A0:字 0 = 已念出的场数,字 1..6 = {5'b0, 槽号[2:0], 8'b0, 会话号[15:0]},按念出来的顺序排。念的是谁、点的是谁,同一张表,永远不会错位。
点「第N个」不再查活清单。name_pick 新增「第N个」识别(个 = E4B8AA,必须带「第」),读 0x2A0 的第 N 位 → 回执「好,接着第N个。」24 字节落 0x230 → 走与 npu.sess 同一条 enter 通路换场。核不查表、不取号、不拼字。
两个序号各有权威,绝不混用。「第N场」是活清单的紧凑序号(第 62 环),用于点选和删除;「第N个」是余场序列的序号,只对刚念过的那一页负责。混用就会点错人、删错场。
老语义原样保留。num_mode=0 时第 74/75 环一字不改;新写口 0xB20 RP_NUM,新只读 0xB24 RP_ORDCNT / 0xB28 NP_PER,新观察点 0xB30 SCREEN52;前 75 圈地址映射一位不动,ISA 一位没动。
单元 tb_rem_pick76(真同步 SRAM 模型,五场、当前 slot0 0xA1):
pg_left=2 / tspoke=2,表 2 条(0xA2 / 0xA3);left=0 / tspoke=4 / finished=1,表 4 条;num_mode=0:首页仍三位、不写序号表,第 75 环语义不变;clear:探针与序号计数归零。ISA 协同 tb_isa_greet76(真整颗 SoC,五场目录、当前 0xA3):
RP_NUM=1 → 一条 npu.boot 恢复 0xA3
一条 npu.rem → 0x1E0「第一个记一笔,第二个工作那场等。」48 字节
RP digest = 0x00500540 / ORDCNT = 2
一条 npu.rem.next → 0x1E0「接着第三个跑步计划,第四个读论文。」51 字节
ORDCNT = 4
说「第四个」→ npu.name → SX_CUR = 0xA5(余场第 4 位,不是清单第 4 条 0xA4)
说「第二个」→ npu.name → SX_CUR = 0xA2,0x230「好,接着第二个。」
SCREEN52 = 0x04C0A5A2 / SCREEN = 0x76
回归:tb_rem_pick74、tb_rem_pick75、tb_isa_greet74、tb_isa_greet75、tb_min_soc64、tb_boot_greet73、tb_riscv_core 全部 PASS;主通路 0xF905FD04 与 25~75 环逐位一致。
tspoke_r(每念一场 +1),不能再叠本页 nspoken——叠加会把序号数成 1、3、5;E4BA8C,不能复用「还有两场」的「两」E4B8A4;序数另开 ord_byte,不然会念成「第两个」;[26:24]({5'b0,3bit,8'b0,16bit} 拼接),按 [18:16] 读会恒 0;ord_valid 之前,但 ord_valid 的句末条件(只有「场」或什么都没有)不会误吃「个」;page_cap 必须随 num_mode 变,不能写死 3;点「第二个」能切过去了,可回执只有「好,接着第二个。」——用户听见一个数字,还得自己回想那是哪一场。下一环在序号命中后读该槽名字格、验一遍归属,把回执升级成「好,工作那场,接着聊。」;名字格为空才退回序号回执。