gpt4 book ai didi

c - 6502 仿真器上的 EhBASIC 输入

转载 作者:太空宇宙 更新时间:2023-11-04 03:19:45 25 4
gpt4 key购买 nike

我已经在这个 6502 仿真器上工作了一段时间,并且我正在尝试让一个简单的增强型 BASIC ROM 工作。虽然它缺少精确的时钟计时,但仿真器确实通过了 AllSuiteA.asm。使用 EhBASIC,当对该地址完成读取时,我通过打印 $F001 的值设法获得了一些输出。

if(lastwrite == 0xF001)
{
printf("%c",CPUMEM[0xF001]);
}

但是,我不知道如何模拟输入过程。 This post指出无论何时 EhBASIC 需要输入,它都会轮询 $F004。但是我目前的代码似乎有两个问题:

while(1)
{
decodeandexecute();
if(lastread == 0xF004)
{
inputchar = getchar();
CPUMEM[0xF004] = inputchar;
}
if(lastwrite == 0xF001)
{
printf("%c",CPUMEM[0xF001]);
}
}
  • 只能通过单个字母输入(预期)
  • 在程序请求内存大小后,提供任何输入只会导致从 $F004 (LDA $F004) 读取的循环 - 即我不能让 EhBASIC 知道何时停止接收输入

我想知道一个有效的方法来输入一串字符,并通过“内存大小?”。

另外,如果我想让EhBASIC自动计算内存大小,我应该在$F004中输入什么?

我在这方面几乎是个新手....

最佳答案

我看到你在代码中使用了 getchar,如果我没记错的话那是一个阻塞调用(它会等到有人按下某个键)。

在ehbasic的手册中说:

How to.
The interpreter calls the system routines via RAM based vectors and,
as long as the requirements for each routine are met, these can be changed
on the fly if needs be.

All the routines exit via an RTS.

The routines are ...

Input
This is a non halting scan of the input device. If a character is ready it
should be placed in A and the carry flag set, if there is no character then A,
and the carry flag, should be cleared.

处理这个问题的一种方法是使用两个线程。一个线程运行 6502 运行 ehbasic 的仿真,另一个线程轮询键盘。然后让轮询线程将任何输入击键推送到一个小缓冲区中,ehbasic 输入例程可以从中使用。

手册:http://www.sunrise-ev.com/photos/6502/EhBASIC-manual.pdf

更新阅读您链接到的问题/答案,我看到它是一个修改过的 ehbasic。您的键盘轮询线程应该将读取的击键放在 $F004 中(并在一段时间后再次清除 F004 - 如果我理解说明的话)。

更新 2作为调试提示:在您的第一个版本中,只需一个带有固定输入的字符串,例如 10 print "hello"20 goto 10 并从那里输入 $f004。这样您就不必担心使用实际键盘时出现任何问题。

关于c - 6502 仿真器上的 EhBASIC 输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47605996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com