如何退出循环?

时间:2016-10-20 14:10:26

标签: loops 6502

我正在创建一个简单的程序,允许用户输入输入,然后在用户输入某个键时退出程序。但是,我不知道下面我的代码在哪里:

            OBJ $8000
    KYBD    EQU $C000
    STROBE  EQU $C010
    COUT    EQU $FDED
    HOME    EQU $FC58

    START   JSR HOME
    LOOP    LDA KYBD
            CMP #$80
            BCC LOOP
            STA STROBE
            JSR COUT
            JMP LOOP

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

简单来说,只需测试.A的内容以获取要用于退出的键码,然后分支如果相等:

        OBJ $8000
KYBD    EQU $C000
STROBE  EQU $C010
COUT    EQU $FDED
HOME    EQU $FC58

START   JSR HOME
LOOP    LDA KYBD
        CMP #$80
        BCC LOOP
        CMP #$<KEYCODE>
        BEQ EXIT
        STA STROBE
        JSR COUT
        JMP LOOP
EXIT    NOP

答案 1 :(得分:2)

地址和键盘选通行为看起来像Apple II,所以我会用它来回答。 (如果这实际上是一个反向计算问题,那么你可以在Retrocomputing上发布。)

对于与八位大师的回答稍有不同的一点,这里是你的代码的一个版本(“A”),它假定你想要打印结束键字符(因为它经常是Enter / Return,如下所示),这使得循环最终清洁工。您还可以省略CMP#$ 80,因为LDA KYBD设置N。

START   JSR HOME
LOOP    LDA KYBD   ;Key pressed?
        BPL LOOP
        STA STROBE ;Yes: clear key
        JSR COUT   ;Print key
        CMP #$8D   ;End key?
        BNE LOOP
        RTS        ;Yes: return to caller

如果您不想打印结束键,则应在退出前清除频闪:

START   JSR HOME
LOOP    LDA KYBD   ;Key pressed?
        BPL LOOP
        STA STROBE ;Yes: clear key
        CMP #$8D   ;End key?
        BEQ EXIT
        JSR COUT   ;No: print key
        JMP LOOP
EXIT    RTS        ;Yes: return to caller

退出代码将特定于环境。例如,如果从Applesoft BASIC使用CALL 32768调用RTS,则RTS会很好,但如果您的程序是从ProDOS磁盘操作系统调用的,则需要使用QUIT命令调用API。

请注意,版本“A”仅在COUT保留A的内容时有效,就像在Apple II固件中一样。记住每个寄存器中的内容以及每个指令后更改或保持不变的标记是简化汇编语言的方法。

相关问题