6502 linguaggio macchina + Apple] [+ ROM, 12 (11? 10? 9?) Byte
CE 06 80 F0 01 A2 0B A9 00 4C 24 ED
Dovrebbe iniziare alle $8000
. Si arresta in modo anomalo sul monitor di sistema quando il conteggio raggiunge 0.
C6 B6 F0 01 A2 0B A9 00 4C 24 ED
Dovrebbe iniziare alle $B1
. Ciò consente di risparmiare un byte poiché posso utilizzare la versione (a due byte) della pagina zero di DEC
, ma sovrascrive la routine critica di Applesoft CHRGET
; dovrai caricarlo e chiamarlo dal monitor e, al termine, utilizzare CTRL+ BReturnper reinizializzare BASIC. Non sono sicuro se questo lo invalida o meno.
CE 06 80 F0 01 A2 0B 4C 26 ED
Dovrebbe iniziare alle $8000
. Questo non si inizializza $9E
, salvando due byte. Tuttavia, ciò significa che non è necessario chiamarlo con un indirizzo negativo (o, se lo si chiama dal monitor, è necessario chiamare il monitor con un indirizzo positivo). Se lo fai, di Applesoft CALL
routine memorizzare FF
in $9E
, inducendolo a aggiungi 65280 al numero quando stamparlo. Ancora una volta, non sono sicuro se questo invalida la soluzione o meno.
C6 B6 F0 01 A2 0B 4C 26 ED
Dovrebbe iniziare alle $B1
. Questa è una combinazione dei due programmi precedenti, che salva un totale di tre byte; dovrai chiamare il monitor con un indirizzo positivo, caricarlo ed eseguirlo da lì, e usare Ctrl+ BReturnper reinizializzare BASIC al termine.
Si noti che questi programmi modificano solo il programma in memoria; il nuovo caricamento del programma dal disco ripristinerà il conto alla rovescia. Questo funziona perché Apple] [(e] [+, // e e // c) non ha alcun sistema di protezione della memoria; il programma (e le sue auto-modifiche) rimarranno in memoria anche dopo la sua uscita, quindi puoi continuare a eseguirlo dalla memoria fino a quando non sovrascrivi quella memoria con qualcos'altro.
Esecuzione del campione
]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
*
Spiegazione
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
Spiegazione della versione a 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
varianti
Stampa ERR
e emette un segnale acustico quando il conteggio raggiunge 0
Normale - 15 byte
CE 06 80 F0 07 A2 0B A9 00 4C 24 ED 4C 2D FF
Sovrascrive CHRGET
- 14 byte
C6 B6 F0 07 A2 0B A9 00 4C 24 ED 4C 2D FF
Non inizializza $9E
- 13 byte
CE 06 80 F0 05 A2 0B 4C 26 ED 4C 2D FF
Sovrascrive CHRGET
e non si inizializza $9E
- 12 byte
C6 B6 F0 05 A2 0B 4C 26 ED 4C 2D FF
Si blocca quando il conteggio raggiunge 0
Normale - 12 byte
CE 06 80 F0 FE A2 0B A9 00 4C 24 ED
Sovrascrive CHRGET
- 11 byte
C6 B6 F0 FE A2 0B A9 00 4C 24 ED
Non inizializza $9E
- 10 byte
CE 06 80 F0 FE A2 0B 4C 26 ED
Sovrascrive CHRGET
e non si inizializza $9E
- 9 byte
C6 B6 F0 FE A2 0B 4C 26 ED