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
。这可以节省一个字节,因为我可以使用(两个字节)的零页版本DEC
,但是可以覆盖关键的Applesoft例程CHRGET
;您将需要加载它并从监视器中调用它,并在完成后使用CTRL+ BReturn重新初始化BASIC。不知道这是否会使它无效。
CE 06 80 F0 01 A2 0B 4C 26 ED
应该从开始$8000
。这不会初始化$9E
,节省两个字节。但是,这意味着您不能使用负地址来调用它(或者,如果从监视器调用它,则必须使用正地址来调用监视器)。如果这样做,Applesoft的CALL
例程将存储FF
在中$9E
,从而在打印时将其添加65280。同样,不确定这是否会使解决方案无效。
C6 B6 F0 01 A2 0B 4C 26 ED
应该从开始$B1
。这是上述两个程序的组合,总共节省了三个字节;您必须使用一个正地址调用监视器,然后从那里加载并运行它,并在完成后使用Ctrl+ BReturn重新初始化BASIC。
请注意,这些程序仅修改内存中的程序。从磁盘重新加载程序将重置倒数计时。之所以可行,是因为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