6502 기계 언어 + Apple] [+ ROM, 12 (11? 10? 9?) 바이트
CE 06 80 F0 01 A2 0B A9 00 4C 24 ED
에서 시작해야합니다 $8000
. 카운트가 0에 도달하면 시스템 모니터에 충돌이 발생합니다.
C6 B6 F0 01 A2 0B A9 00 4C 24 ED
에서 시작해야합니다 $B1
. 이렇게하면 (2 바이트) 제로 페이지 버전 DEC
의을 사용할 수 있기 때문에 바이트가 절약 되지만 중요한 Applesoft 루틴을 덮어 씁니다 CHRGET
. 로드 한 다음 모니터에서 호출해야하며 완료되면 CTRL+ BReturn를 사용 하여 BASIC을 다시 초기화해야합니다. 이것이 무효인지 아닌지 확실하지 않습니다.
CE 06 80 F0 01 A2 0B 4C 26 ED
에서 시작해야합니다 $8000
. 초기화되지 않아 $9E
2 바이트를 절약합니다. 그러나 이는 네거티브 주소로 호출해서는 안됩니다 (또는 모니터에서 호출하면 포지티브 주소로 모니터를 호출해야 함). 그렇게하면 Applesoft의 CALL
루틴이에 저장 FF
되어 $9E
인쇄 할 때 번호에 65280을 추가합니다. 다시 말하지만 이것이 솔루션을 무효화하는지 여부는 확실하지 않습니다.
C6 B6 F0 01 A2 0B 4C 26 ED
에서 시작해야합니다 $B1
. 이것은 위의 두 프로그램의 조합으로 총 3 바이트를 절약합니다. 양의 주소로 모니터를 호출하고로드하여 실행 한 다음 Ctrl+ BReturn를 사용 하여 BASIC을 다시 초기화해야합니다.
이러한 프로그램은 메모리의 프로그램 만 수정합니다. 디스크에서 프로그램을 다시로드하면 카운트 다운이 재설정됩니다. 이것은 애플] [(그리고] [+, // e, // c)에 메모리 보호 시스템이 없기 때문입니다. 프로그램 (및 자체 수정)은 종료 된 후에도 메모리에 유지되므로 메모리를 다른 것으로 덮어 쓸 때까지 메모리에서 계속 실행할 수 있습니다.
샘플 런
]BLOAD COUNT THEN BRK
]CALL 32768
10
]CALL 32768
9
]CALL 32768
8
]CALL 32768
7
]CALL 32768
6
]CALL 32768
5
]CALL 32768
4
]CALL 32768
3
]CALL 32768
2
]CALL 32768
1
]CALL 32768
8008- A=80 X=9D Y=00 P=36 S=EE
*
설명
DEC NUM+1 ; Decrement the LDX instruction's operand
BEQ NUM+1 ; If it is now zero, branch to it; 00 is the opcode for the BRK instruction, which causes the program to crash to the monitor
NUM LDX #$0B ; Load the X register with 0x0A; the operand has already been decremented once
LDA #$00 ; Load the accumulator with 0
JMP $ED24 ; Jump to $ED24, an Applesoft ROM routine which prints A (high byte),X (low byte) in decimal
10 바이트 버전의 설명
DEC NUM+1 ; Decrement the LDX instruction's operand
BEQ NUM+1 ; If it is now zero, branch to it; 00 is the opcode for the BRK instruction, which causes the program to crash to the monitor
NUM LDX #$0B ; Load the X register with 0x0A; the operand has already been decremented once
JMP $ED26 ; Jump to $ED26, which is two bytes into the Applesoft routine at $ED24. The two skipped bytes would store the accumulator in $9E
변형
ERR
카운트가 0에 도달하면 인쇄 및 경고음
보통-15 바이트
CE 06 80 F0 07 A2 0B A9 00 4C 24 ED 4C 2D FF
덮어 쓰기 CHRGET
-14 바이트
C6 B6 F0 07 A2 0B A9 00 4C 24 ED 4C 2D FF
초기화하지 않음 $9E
-13 바이트
CE 06 80 F0 05 A2 0B 4C 26 ED 4C 2D FF
덮어 쓰기 CHRGET
및 초기화하지 않음 $9E
-12 바이트
C6 B6 F0 05 A2 0B 4C 26 ED 4C 2D FF
카운트가 0에 도달하면 정지
보통-12 바이트
CE 06 80 F0 FE A2 0B A9 00 4C 24 ED
덮어 쓰기 CHRGET
-11 바이트
C6 B6 F0 FE A2 0B A9 00 4C 24 ED
초기화하지 않음 $9E
-10 바이트
CE 06 80 F0 FE A2 0B 4C 26 ED
덮어 쓰기 CHRGET
및 초기화하지 않음 $9E
-9 바이트
C6 B6 F0 FE A2 0B 4C 26 ED