2017-12-02 19 views
1

나는이 6502 에뮬레이터를 잠시 동안 사용 해왔다. 그리고 나는 작동하도록 간단한 Enhanced BASIC ROM을 얻고 자한다. 정확한 클럭 타이밍이 없지만 에뮬레이터는 AllSuiteA.asm을 통과했습니다. EhBASIC의 경우, 해당 주소로 읽기가 완료되면 $ F001 값을 출력하여 일부 출력을 얻을 수있었습니다.EhBASIC 입력에서 6502 에뮬레이터

그러나 입력 프로세스를 에뮬레이션하는 방법을 알지 못합니다. 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에 무엇을 입력해야합니까?

I 해요 꽤 많이 난 당신이 코드에서 getchar를 사용하고 내가 정확히 기억한다면 그 차단 호출입니다 볼이 분야에서 초보자 ....

답변

1

은 (사람이 어떤 키를 누를 때까지 대기) . 그것이 말하는 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. 

한 가지 방법이 다루는 두 개의 스레드를 사용하는 것입니다. ehbasic을 실행하는 6502의 에뮬레이션을 실행하는 스레드와 키보드를 폴링하는 다른 스레드. 그런 다음 폴링 스레드가 입력 키 스트로크를 ehbasic 입력 루틴에서 사용할 수있는 작은 버퍼로 밀어 넣으십시오.

수동 : 질문 읽기가 http://www.sunrise-ev.com/photos/6502/EhBASIC-manual.pdf

UPDATE /당신이 연결 대답 나는 그것이 수정 ehbasic입니다 참조하십시오. 키보드 폴링 쓰레드는 $ F004에서 키 스트로크를 읽어야합니다. (그리고 지시를 이해하면 F004를 다시 지우십시오.)

업데이트 2 디버깅 팁 : 첫 번째 버전에서는 10 print "hello" 20 goto 10과 같은 고정 입력 문자열이 있고 거기에서 $ f004가 제공됩니다. 그렇게하면 실제 키보드를 사용할 때의 문제에 대해 걱정할 필요가 없습니다.