6502 lenguaje máquina + Apple] [+ ROM, 12 (11? 10? 9?) Bytes
CE 06 80 F0 01 A2 0B A9 00 4C 24 ED
Debería comenzar a las $8000
. Se bloquea en el monitor del sistema cuando el recuento llega a 0.
C6 B6 F0 01 A2 0B A9 00 4C 24 ED
Debería comenzar a las $B1
. Esto ahorra un byte ya que puedo usar la versión de cero páginas (dos bytes) DEC
, pero sobrescribe la rutina crítica de Applesoft CHRGET
; necesitará cargarlo y llamarlo desde el monitor, y usar CTRL+ BReturnpara reiniciar BASIC una vez que haya terminado. No estoy seguro si esto lo invalida o no.
CE 06 80 F0 01 A2 0B 4C 26 ED
Debería comenzar a las $8000
. Esto no se inicializa $9E
, ahorrando dos bytes. Sin embargo, esto significa que no debe llamarlo con una dirección negativa (o, si lo llama desde el monitor, debe llamar al monitor con una dirección positiva). Si lo hace, de Applesoft CALL
rutina almacenará FF
en $9E
, haciendo que se añada al número 65280 al imprimirlo. Nuevamente, no estoy seguro si esto invalida la solución o no.
C6 B6 F0 01 A2 0B 4C 26 ED
Debería comenzar a las $B1
. Esta es una combinación de los dos programas anteriores, ahorrando un total de tres bytes; tendrá que llamar al monitor con una dirección positiva, cargarlo y ejecutarlo desde allí, y usar Ctrl+ BReturnpara reiniciar BASIC una vez que haya terminado.
Tenga en cuenta que estos programas solo modifican el programa en la memoria; volver a cargar el programa desde el disco restablecerá la cuenta regresiva. Esto funciona porque Apple] [(y] [+, // e y // c) no tienen ningún sistema de protección de memoria; el programa (y sus auto-modificaciones) permanecerán en la memoria incluso después de salir, por lo que puede seguir ejecutándolo desde la memoria hasta que sobrescriba esa memoria con algo más.
Ejecución de la muestra
]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
*
Explicación
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
Explicación de la versión de 10 bytes.
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
Variantes
Imprime ERR
y emite un pitido cuando el recuento llega a 0
Normal - 15 bytes
CE 06 80 F0 07 A2 0B A9 00 4C 24 ED 4C 2D FF
Sobrescribe CHRGET
- 14 bytes
C6 B6 F0 07 A2 0B A9 00 4C 24 ED 4C 2D FF
No se inicializa $9E
- 13 bytes
CE 06 80 F0 05 A2 0B 4C 26 ED 4C 2D FF
Sobrescribe CHRGET
y no se inicializa $9E
- 12 bytes
C6 B6 F0 05 A2 0B 4C 26 ED 4C 2D FF
Se congela cuando el recuento llega a 0
Normal - 12 bytes
CE 06 80 F0 FE A2 0B A9 00 4C 24 ED
Sobrescribe CHRGET
- 11 bytes
C6 B6 F0 FE A2 0B A9 00 4C 24 ED
No se inicializa $9E
- 10 bytes
CE 06 80 F0 FE A2 0B 4C 26 ED
Sobrescribe CHRGET
y no se inicializa $9E
: 9 bytes
C6 B6 F0 FE A2 0B 4C 26 ED