6502 langage machine + Apple] [+ ROM, 12 (11? 10? 9?) Octets
CE 06 80 F0 01 A2 0B A9 00 4C 24 ED
Devrait commencer à $8000
. Se bloque sur le moniteur système lorsque le nombre atteint 0.
C6 B6 F0 01 A2 0B A9 00 4C 24 ED
Devrait commencer à $B1
. Cela enregistre un octet, car je peux utiliser la version (deux octets) de zéro page DEC
, mais écrase la routine critique Applesoft CHRGET
; vous devez le charger et l'appeler à partir du moniteur, puis utilisez CTRL+ BReturnpour réinitialiser BASIC une fois que vous avez terminé. Pas sûr si cela invalide ou pas.
CE 06 80 F0 01 A2 0B 4C 26 ED
Devrait commencer à $8000
. Cela n'initialise pas $9E
, économisant deux octets. Cependant, cela signifie que vous ne devez pas l'appeler avec une adresse négative (ou, si vous l'appelez depuis le moniteur, vous devez appeler le moniteur avec une adresse positive). Si vous le faites, de Applesoft CALL
la routine va stocker FF
dans $9E
, l' amenant à ajouter 65280 au numéro lors de l' impression. Encore une fois, je ne sais pas si cela invalide la solution ou non.
C6 B6 F0 01 A2 0B 4C 26 ED
Devrait commencer à $B1
. Ceci est une combinaison des deux programmes ci-dessus, économisant un total de trois octets; vous devrez appeler le moniteur avec une adresse positive, le charger et l'exécuter à partir de là, et utiliser Ctrl+ BReturnpour réinitialiser BASIC une fois que vous aurez terminé.
Notez que ces programmes ne modifient que le programme en mémoire; recharger le programme à partir du disque réinitialisera le compte à rebours. Cela fonctionne parce que les Apple] [(et] [+, // e et // c) n’ont aucun système de protection de la mémoire; le programme (et ses auto-modifications) restera en mémoire même après sa fermeture. Vous pourrez donc continuer à l'exécuter de mémoire jusqu'à ce que vous remplaciez cette mémoire par quelque chose d'autre.
Échantillon échantillon
]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
*
Explication
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
Explication de la version 10 octets
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
Des variantes
Imprime ERR
et émet un bip lorsque le nombre atteint 0
Normal - 15 octets
CE 06 80 F0 07 A2 0B A9 00 4C 24 ED 4C 2D FF
Écrasement CHRGET
- 14 octets
C6 B6 F0 07 A2 0B A9 00 4C 24 ED 4C 2D FF
N'initialise pas $9E
- 13 octets
CE 06 80 F0 05 A2 0B 4C 26 ED 4C 2D FF
Écrase CHRGET
et n'initialise pas $9E
- 12 octets
C6 B6 F0 05 A2 0B 4C 26 ED 4C 2D FF
Gèle lorsque le nombre atteint 0
Normal - 12 octets
CE 06 80 F0 FE A2 0B A9 00 4C 24 ED
Écrasement CHRGET
- 11 octets
C6 B6 F0 FE A2 0B A9 00 4C 24 ED
N'initialise pas $9E
- 10 octets
CE 06 80 F0 FE A2 0B 4C 26 ED
Écrase CHRGET
et n'initialise pas $9E
- 9 octets
C6 B6 F0 FE A2 0B 4C 26 ED