6502 język maszynowy + Apple] [+ ROM, 12 (11? 10? 9?) Bajtów
CE 06 80 F0 01 A2 0B A9 00 4C 24 ED
Powinien zacząć od $8000
. Awarie monitora systemu, gdy liczba osiągnie 0.
C6 B6 F0 01 A2 0B A9 00 4C 24 ED
Powinien zacząć od $B1
. Oszczędza to bajt, ponieważ mogę używać (dwubajtowej) wersji zerowej strony DEC
, ale zastępuje krytyczną procedurę Applesoft CHRGET
; musisz go załadować i wywołać z monitora, a po zakończeniu użyj CTRL+, BReturnaby ponownie zainicjować BASIC. Nie jestem pewien, czy to unieważnia, czy nie.
CE 06 80 F0 01 A2 0B 4C 26 ED
Powinien zacząć od $8000
. Nie inicjuje się $9E
, oszczędzając dwa bajty. Oznacza to jednak, że nie wolno dzwonić do niego z ujemnym adresem (lub, jeśli dzwonisz z monitora, musisz zadzwonić do monitora z dodatnim adresem). Jeśli tak, Applesoft za CALL
rutynowe będzie przechowywać FF
w $9E
, powodując jej dodać 65280 do numeru podczas drukowania go. Ponownie, nie jestem pewien, czy to unieważnia rozwiązanie, czy nie.
C6 B6 F0 01 A2 0B 4C 26 ED
Powinien zacząć od $B1
. Jest to kombinacja powyższych dwóch programów, oszczędzając w sumie trzy bajty; będziesz musiał zadzwonić do monitora z dodatnim adresem, załadować go i uruchomić stamtąd, a następnie użyć Ctrl+, BReturnaby ponownie zainicjować BASIC po zakończeniu .
Zauważ, że te programy modyfikują tylko program w pamięci; ponowne załadowanie programu z dysku spowoduje zresetowanie odliczania. Działa to, ponieważ Apple] [(i] [+, // e i // c) nie mają żadnego systemu ochrony pamięci; program (i jego samodzielne modyfikacje) pozostaną w pamięci nawet po wyjściu z niego, więc możesz nadal uruchamiać go z pamięci, dopóki nie nadpiszesz tej pamięci na coś innego.
Przykładowy przebieg
]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
*
Wyjaśnienie
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
Objaśnienie wersji 10-bajtowej
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
Warianty
Drukuje ERR
i emituje sygnały dźwiękowe, gdy liczba osiągnie 0
Normalny - 15 bajtów
CE 06 80 F0 07 A2 0B A9 00 4C 24 ED 4C 2D FF
Nadpisuje CHRGET
- 14 bajtów
C6 B6 F0 07 A2 0B A9 00 4C 24 ED 4C 2D FF
Nie inicjuje się $9E
- 13 bajtów
CE 06 80 F0 05 A2 0B 4C 26 ED 4C 2D FF
Nadpisuje CHRGET
i nie inicjuje $9E
- 12 bajtów
C6 B6 F0 05 A2 0B 4C 26 ED 4C 2D FF
Zatrzymuje się, gdy liczba osiągnie 0
Normalny - 12 bajtów
CE 06 80 F0 FE A2 0B A9 00 4C 24 ED
Nadpisuje CHRGET
- 11 bajtów
C6 B6 F0 FE A2 0B A9 00 4C 24 ED
Nie inicjuje się $9E
- 10 bajtów
CE 06 80 F0 FE A2 0B 4C 26 ED
Nadpisuje CHRGET
i nie inicjuje $9E
- 9 bajtów
C6 B6 F0 FE A2 0B 4C 26 ED