6502 bahasa mesin + Apple] [+ ROM, 12 (11? 10? 9?) Byte
CE 06 80 F0 01 A2 0B A9 00 4C 24 ED
Harus mulai $8000
. Gangguan ke monitor sistem ketika hitungan mencapai 0.
C6 B6 F0 01 A2 0B A9 00 4C 24 ED
Harus mulai $B1
. Ini menghemat satu byte karena saya dapat menggunakan versi halaman nol (dua byte) DEC
, tetapi menimpa rutin Applesoft yang kritis CHRGET
; Anda harus memuatnya dan memanggilnya dari monitor, dan menggunakan CTRL+ BReturnuntuk menginisialisasi ulang BASIC setelah Anda selesai. Tidak yakin apakah ini membatalkan atau tidak.
CE 06 80 F0 01 A2 0B 4C 26 ED
Harus mulai $8000
. Ini tidak menginisialisasi $9E
, menghemat dua byte. Namun, ini berarti Anda tidak boleh menyebutnya dengan alamat negatif (atau, jika Anda memanggilnya dari monitor, Anda harus memanggil monitor dengan alamat positif). Jika Anda melakukannya, Applesoft ini CALL
rutin akan menyimpan FF
di $9E
, menyebabkan ia menambahkan 65.280 ke nomor ketika mencetaknya. Sekali lagi, tidak yakin apakah ini membatalkan solusi atau tidak.
C6 B6 F0 01 A2 0B 4C 26 ED
Harus mulai $B1
. Ini adalah kombinasi dari dua program di atas, menghemat total tiga byte; Anda harus memanggil monitor dengan alamat positif, memuatnya dan menjalankannya dari sana, dan menggunakan Ctrl+ BReturnuntuk menginisialisasi ulang BASIC begitu Anda selesai.
Perhatikan bahwa program-program ini hanya memodifikasi program dalam memori; memuat ulang program dari disk akan mengatur ulang hitungan mundur. Ini berfungsi karena Apple] [(dan] [+, // e, dan // c) tidak memiliki sistem perlindungan memori apa pun; program (dan modifikasi-nya sendiri) akan tetap berada dalam memori bahkan setelah keluar, sehingga Anda dapat tetap menjalankannya dari memori sampai Anda menimpa memori itu dengan sesuatu yang lain.
Contoh dijalankan
]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
*
Penjelasan
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
Penjelasan versi 10 byte
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
Varian
Mencetak ERR
dan berbunyi bip saat hitungan mencapai 0
Normal - 15 byte
CE 06 80 F0 07 A2 0B A9 00 4C 24 ED 4C 2D FF
Timpa CHRGET
- 14 byte
C6 B6 F0 07 A2 0B A9 00 4C 24 ED 4C 2D FF
Tidak menginisialisasi $9E
- 13 byte
CE 06 80 F0 05 A2 0B 4C 26 ED 4C 2D FF
Timpa CHRGET
dan tidak diinisialisasi $9E
- 12 byte
C6 B6 F0 05 A2 0B 4C 26 ED 4C 2D FF
Membeku ketika hitungan mencapai 0
Normal - 12 byte
CE 06 80 F0 FE A2 0B A9 00 4C 24 ED
Timpa CHRGET
- 11 byte
C6 B6 F0 FE A2 0B A9 00 4C 24 ED
Tidak menginisialisasi $9E
- 10 byte
CE 06 80 F0 FE A2 0B 4C 26 ED
Timpa CHRGET
dan tidak diinisialisasi $9E
- 9 byte
C6 B6 F0 FE A2 0B 4C 26 ED