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
。ロードしてモニターから呼び出す必要があり、完了したらBASICを再初期化するためにCTRL+ BReturnを使用します。これで無効になるかどうかはわかりません。
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
ます。これは上記の2つのプログラムの組み合わせで、合計3バイトを節約します。正のアドレスでモニターを呼び出し、そこからロードして実行し、完了したらBASICを再初期化するためにCtrl+ BReturnを使用する必要があります。
これらのプログラムはメモリ内のプログラムのみを変更することに注意してください。ディスクからプログラムを再ロードすると、カウントダウンがリセットされます。これは、Apple] [(および] [+、// 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