Ngôn ngữ máy 6502 + Apple] [+ ROM, 12 (11? 10? 9?) Byte
CE 06 80 F0 01 A2 0B A9 00 4C 24 ED
Nên bắt đầu từ $8000
. Tai nạn đến màn hình hệ thống khi số đếm đạt 0.
C6 B6 F0 01 A2 0B A9 00 4C 24 ED
Nên bắt đầu từ $B1
. Điều này tiết kiệm một byte vì tôi có thể sử dụng phiên bản không có trang (hai byte) DEC
, nhưng ghi đè lên thói quen quan trọng của Applesoft CHRGET
; bạn sẽ cần tải nó và gọi nó từ màn hình và sử dụng CTRL+ BReturnđể khởi tạo lại BASIC sau khi hoàn tất. Không chắc chắn nếu điều này vô hiệu hóa nó hay không.
CE 06 80 F0 01 A2 0B 4C 26 ED
Nên bắt đầu từ $8000
. Điều này không khởi tạo $9E
, tiết kiệm hai byte. Tuy nhiên, điều này có nghĩa là bạn không được gọi nó bằng một địa chỉ âm (hoặc, nếu bạn gọi nó từ màn hình, bạn phải gọi màn hình với một địa chỉ dương). Nếu bạn làm thế, Applesoft của CALL
thói quen sẽ lưu trữ FF
trong $9E
, làm cho nó thêm 65.280 với số khi in nó. Một lần nữa, không chắc chắn điều này có làm mất hiệu lực giải pháp hay không.
C6 B6 F0 01 A2 0B 4C 26 ED
Nên bắt đầu từ $B1
. Đây là sự kết hợp của hai chương trình trên, tiết kiệm tổng cộng ba byte; bạn sẽ phải gọi màn hình với một địa chỉ tích cực, tải nó và chạy nó từ đó và sử dụng Ctrl+ BReturnđể khởi tạo lại BASIC sau khi bạn hoàn thành.
Lưu ý rằng các chương trình này chỉ sửa đổi chương trình trong bộ nhớ; tải lại chương trình từ đĩa sẽ thiết lập lại đếm ngược. Điều này hoạt động vì Apple] [(và] [+, // e và // c) không có hệ thống bảo vệ bộ nhớ nào; chương trình (và tự sửa đổi) sẽ ở lại trong bộ nhớ ngay cả khi nó thoát, vì vậy bạn có thể tiếp tục chạy nó từ bộ nhớ cho đến khi bạn ghi đè lên bộ nhớ đó bằng thứ khác.
Chạy mẫu
]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
*
Giải trình
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
Giải thích về phiên bản 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
Biến thể
In ERR
và tiếng bíp khi đếm đến 0
Bình thường - 15 byte
CE 06 80 F0 07 A2 0B A9 00 4C 24 ED 4C 2D FF
Ghi đè CHRGET
- 14 byte
C6 B6 F0 07 A2 0B A9 00 4C 24 ED 4C 2D FF
Không khởi tạo $9E
- 13 byte
CE 06 80 F0 05 A2 0B 4C 26 ED 4C 2D FF
Ghi đè CHRGET
và không khởi tạo $9E
- 12 byte
C6 B6 F0 05 A2 0B 4C 26 ED 4C 2D FF
Đóng băng khi số đếm đạt 0
Bình thường - 12 byte
CE 06 80 F0 FE A2 0B A9 00 4C 24 ED
Ghi đè CHRGET
- 11 byte
C6 B6 F0 FE A2 0B A9 00 4C 24 ED
Không khởi tạo $9E
- 10 byte
CE 06 80 F0 FE A2 0B 4C 26 ED
Ghi đè CHRGET
và không khởi tạo $9E
- 9 byte
C6 B6 F0 FE A2 0B 4C 26 ED