6502 idioma da máquina + Apple] [+ ROM, 12 (11? 10? 9?) Bytes
CE 06 80 F0 01 A2 0B A9 00 4C 24 ED
Deve começar às $8000
. Falha no monitor do sistema quando a contagem atinge 0.
C6 B6 F0 01 A2 0B A9 00 4C 24 ED
Deve começar às $B1
. Isso economiza um byte, pois eu posso usar a versão de página zero (dois bytes) DEC
, mas sobrescreve a rotina crítica da Applesoft CHRGET
; você precisará carregá-lo e chamá-lo do monitor e usar CTRL+ BReturnpara reinicializar o BASIC assim que terminar. Não tenho certeza se isso invalida ou não.
CE 06 80 F0 01 A2 0B 4C 26 ED
Deve começar às $8000
. Isso não inicializa $9E
, economizando dois bytes. No entanto, isso significa que você não deve chamá-lo com um endereço negativo (ou, se o chamar pelo monitor, precisará chamá-lo com um endereço positivo). Se fizer isso, de Applesoft CALL
rotina irá armazenar FF
em $9E
, causando-lo para adicionar 65280 para o número quando imprimi-lo. Novamente, não tenho certeza se isso invalida a solução ou não.
C6 B6 F0 01 A2 0B 4C 26 ED
Deve começar às $B1
. Essa é uma combinação dos dois programas acima, economizando um total de três bytes; você precisará ligar para o monitor com um endereço positivo, carregá-lo e executá-lo a partir daí e usar Ctrl+ BReturnpara reinicializar o BASIC assim que terminar.
Observe que esses programas apenas modificam o programa na memória; recarregar o programa do disco redefinirá a contagem regressiva. Isso funciona porque a Apple] [(e] [+, // e e // c) não possuem sistema de proteção de memória; o programa (e suas auto-modificações) permanecerá na memória mesmo depois de sair, para que você possa continuar executando-o da memória até substituir essa memória por outra coisa.
Amostra de execução
]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
*
Explicação
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
Explicação da versão 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
e emite um sinal sonoro quando a contagem chega a 0
Normal - 15 bytes
CE 06 80 F0 07 A2 0B A9 00 4C 24 ED 4C 2D FF
Substituições CHRGET
- 14 bytes
C6 B6 F0 07 A2 0B A9 00 4C 24 ED 4C 2D FF
Não inicializa $9E
- 13 bytes
CE 06 80 F0 05 A2 0B 4C 26 ED 4C 2D FF
Substitui CHRGET
e não inicializa $9E
- 12 bytes
C6 B6 F0 05 A2 0B 4C 26 ED 4C 2D FF
Congela quando a contagem chega a 0
Normal - 12 bytes
CE 06 80 F0 FE A2 0B A9 00 4C 24 ED
Substituições CHRGET
- 11 bytes
C6 B6 F0 FE A2 0B A9 00 4C 24 ED
Não inicializa $9E
- 10 bytes
CE 06 80 F0 FE A2 0B 4C 26 ED
Substitui CHRGET
e não inicializa $9E
- 9 bytes
C6 B6 F0 FE A2 0B 4C 26 ED