6502, 12 바이트 (Apple II의 경우 13 바이트)
6502
기계 코드는 한 쌍의 제로 페이지 위치가 문자 입력 ($ FE) 및 출력 (FF) 하드웨어에 연결되어 있다고 가정합니다. 많은 6502 기반 시스템은 이러한 방식으로 I / O를 용이하게하지만 I / O 주소는 대개 제로 페이지에 있지 않습니다.
단순화를 위해 Py65를 사용 했습니다. 는 Python으로 작성된 6502 마이크로 컴퓨터 시스템 시뮬레이터 인 .
다음은 Py65의 메모리 덤프입니다. $ FE 및 $ FF와 겹치지 않도록 다음 코드를 제로 페이지의 어느 곳에 나로드 할 수 있습니다.
PC AC XR YR SP NV-BDIZC
6502: 0000 00 00 00 ff 00110010
.mem 0:b
0000: a9 21 85 ff a5 fe f0 fc 85 ff d0 f4
Windows 명령 창에서 실행하면 원하는 텍스트를 붙여 넣기 (Ctrl + V)하거나 간단히 입력 할 수 있습니다. 입력하는 경우 줄 바꾸기 (같은 ASCII 문자)를 보려면 Ctrl + J를 누르십시오. 프로세서를 중단하고 Py65 명령 프롬프트로 돌아가려면 Ctrl + C를 누르십시오.
당연히 어셈블리 코드를 읽기가 더 쉽습니다.
PC AC XR YR SP NV-BDIZC
6502: 0000 00 00 00 ff 00110010
.d 00:0b
$0000 a9 21 LDA #$21
$0002 85 ff STA $ff
$0004 a5 fe LDA $fe
$0006 f0 fc BEQ $0004
$0008 85 ff STA $ff
$000a d0 f4 BNE $0000
명확성을 위해 다음은 CBA65 형식 의 어셈블리 코드 입니다.
; ASSEMBLE:
; cba65 bangit
;
; LOAD/RUN
; python3 py65/monitor.py -i 00fe -o 00ff -l bangit.bin
; goto 0000
.FILES BIN=256
; I/O LOCATIONS
GETC .EQU $FE ; (1) MOVING PY65'S GETC TO ZP SHAVES 1 BYTE
PUTC .EQU $FF ; (1) MOVING PY65'S PUTC TO ZP SHAVES 2 BYTES
.ORG $0000
VROOM LDA #'!'
STA PUTC
VROOM2 LDA GETC
BEQ VROOM2
STA PUTC
BNE VROOM
.END
애플 II
위의 코드는 널이 입력이 없음을 나타내므로 널이 아닌 값이 리턴 될 때까지 폴링을 계속합니다.
비교를 위해 Apple I 및 Apple II는 키보드 I / O 주소의 비트 7을 설정하여 새 문자의 가용성을 알립니다. 그런 다음 문자를 가져온 후 지워야합니다. 이러한 시스템에서 문자 I / O는 일반적으로 하드웨어에 직접 액세스하는 대신 시스템 모니터 루틴을 호출하여 수행됩니다.
RDKEY ($ FD0C) 및 COUT ($ FDED)을 호출하면 위와 동일한 Apple II를 13 바이트로 코딩 할 수 있으며 RAM의 어느 곳에서나 실행할 수 있습니다. 다음은 Apple // e 에뮬레이터, Android 9의 a2ix 에서 실행 한 코드 입니다.
Return 키를 누르면 줄 바꿈과 동일한 효과가 있습니다.
*300L
0300- A9 A1 LDA #$A1
0302- 20 ED FD JSR $FDED
0305- 20 0C FD JSR $FD0C
0308- 20 ED FD JSR $FDED
030B- F0 F3 BEQ $0300
느낌표의 일반 ASCII 값 # $ 21 대신 # $ A1이 대신 사용됩니다. 표준 ASCII 값을 COUT으로 전송하면 "역 모드"로 표시되고 흰색은 검정색으로 표시되기 때문입니다. ASCII를 일반 흰색으로 검은 색으로 표시하려면 COUT을 호출하기 전에 누산기의 문자 값에 # $ 80을 추가해야합니다. RDKEY는 hi- 비트 세트를 가진 문자를 반환하기 때문에 어셈블리 프로그램은 일반적으로 문자를 사용하기 전에 ASCII 값을 얻기 위해 문자 비트를 지 웁니다.