【发布时间】:2019-09-25 00:14:59
【问题描述】:
我最近得到了一个 ZX Spectrum +3 并试图让 RS232 与该频谱一起工作。我已经在电缆(Spectrum 128 RS232 数据电缆)here 的引脚之后构建了一根电缆('BT' 型连接器 DB9 串行)。 电缆的另一端使用 USB 串行适配器连接到 PC。我在 Linux 上使用 Moserial 与 Spectrum 进行通信。
电缆工作正常,我可以使用LLIST 通过串行端口打印 BASIC 程序,但我无法让 Spectrum 可靠地从串行端口读取 - 即使在启用硬件握手 (DTR/CTS) 时也是如此莫赛尔。
我用 +3 BASIC 编写了一个简单的程序,将接收到的字符打印到屏幕上。似乎第一个字符接收正常,但其余字符被丢弃或损坏。
以下是尝试以 300 波特发送“zx 频谱”时频谱输出的示例:
z[dot/box character]. VAL$ [box character]MOVE VAL$ VAL$ ?)
(似乎VAL$ 和MOVE$ 都是 Spectrum ROM 中的单个字符)
截图:
以及打开串口并将接收到的字符打印到屏幕上的 BASIC 程序:
10 FORMAT LINE 300
20 FORMAT LPRINT "r"
30 FORMAT LPRINT "e"
40 OPEN #4,"p"
50 PRINT INKEY$#4;
60 GO TO 50
我发现,如果我从 PC 一个接一个地发送字符,并且它们之间有足够长的延迟,我可以从 Spectrum 获得更可靠的输出。我用不同的延迟对此进行了测试,80ms 效果最好。我真的不想使用这种方法作为解决方案 - 它非常慢,有时会丢失一些字符。
这可能是 Spectrum 本身的问题吗?还是我在设置中遗漏了什么?似乎有些不对劲,我知道有一个用于串行频谱的程序加载器 - 所以频谱肯定能够接受串行输入,而每个字符没有 80 毫秒的延迟?
【问题讨论】:
-
如果我这样做,我会首先专注于频谱传输和 PC 接收。使用示波器测量实际波特率,以确认旧硬件晶体/振荡器的准确性。然后比较PC发送的波特率。 “这是一个示例,说明在尝试以 300 波特发送“zx 频谱”时 Spectrum 输出的内容” -- 你的意思是不是 Spectrum 在 之后显示的内容 >接收 ...? IOW 保持您对输入/输出的看法一致。
-
您使用的是什么 USB-RS232 适配器?您是否验证过它可以在其他设备上以低速运行?
-
在 300 波特下,传输速度约为每秒 30 个字符,因此 80 毫秒仍然很慢,但影响不大。你能查一下收到的字符的十六进制/二进制值吗?然后将二进制值与发送字符的二进制值进行比较——您可能有错误的参数(数据位数、奇偶校验、停止位数)并且接收到的字符被“移位”。是的,那些“MOVE”等被打印是因为接收到的字符是频谱中的字节编码“令牌”。更好的输出十六进制值。
-
@sawdust 是的,这就是我的意思,抱歉,措辞可以更好
-
您知道Retrocomputing 资源吗?那里有很多 Spectrum 大师。
标签: serial-port z80 zxspectrum sinclair