6502 makine dili + Elma] [+ ROM, 12 (11 - 10 - 9 -) bayt
CE 06 80 F0 01 A2 0B A9 00 4C 24 ED
Başlamalı $8000
. Sayım 0'a ulaştığında, sistem monitörü çöküyor.
C6 B6 F0 01 A2 0B A9 00 4C 24 ED
Başlamalı $B1
. Bu, (iki baytlık) sıfır sayfalı sürümünü kullanabildiğim için bir bayt kazandırıyor DEC
ancak kritik Applesoft yordamının üzerine yazıyor CHRGET
; yüklemek ve monitörden çağırmanız ve BASIC'i yeniden başlattığınızda yeniden başlatmak için CTRL+ BReturndüğmesini kullanmanız gerekir. Bunun geçersiz olup olmadığından emin değil.
CE 06 80 F0 01 A2 0B 4C 26 ED
Başlamalı $8000
. Bu, $9E
iki bayt tasarrufu sağlamaz . Ancak bu, negatif bir adresle aramamanız gerektiği anlamına gelir (veya monitörden ararsanız, monitörü pozitif bir adresle çağırmanız gerekir). Bunu yaparsanız, Applesoft'un CALL
rutini saklanır FF
ve $9E
yazdırırken sayıya 65280 eklemesi sağlanır. Yine, bunun çözümü geçersiz kıldığından emin değiliz.
C6 B6 F0 01 A2 0B 4C 26 ED
Başlamalı $B1
. Bu, yukarıdaki üç programın bir birleşimidir ve toplam üç bayt tasarruf sağlar; Monitörü pozitif bir adresle çağırmanız, yüklemeniz ve oradan çalıştırmanız ve tamamladığınızda BASIC'i yeniden başlatmak için Ctrl+ ' BReturnyı kullanmanız gerekir.
Bu programların yalnızca bellekteki programı değiştirdiğini unutmayın; Programı diskten yeniden yüklemek geri sayımı sıfırlar. Bu işe yarıyor, çünkü Apple] [(ve] [+, // e ve // c) hiçbir bellek koruma sistemine sahip değil; program (ve kendi modifikasyonları) çıktıktan sonra bile hafızada kalacaktır, böylece o hafızayı başka bir şeyin üzerine yazana kadar hafızada çalıştırmaya devam edebilirsiniz.
Örnek çalışma
]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
*
açıklama
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
10 byte versiyonun açıklaması
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
Varyantlar
Sayı ERR
0'a ulaştığında yazdırır ve bip sesi çıkarır
Normal - 15 bayt
CE 06 80 F0 07 A2 0B A9 00 4C 24 ED 4C 2D FF
Üzerine yazar CHRGET
- 14 bayt
C6 B6 F0 07 A2 0B A9 00 4C 24 ED 4C 2D FF
Başlamaz $9E
- 13 bayt
CE 06 80 F0 05 A2 0B 4C 26 ED 4C 2D FF
Üzerine yazar CHRGET
ve başlatılmaz $9E
- 12 bayt
C6 B6 F0 05 A2 0B 4C 26 ED 4C 2D FF
Sayım 0'a ulaştığında donar
Normal - 12 bayt
CE 06 80 F0 FE A2 0B A9 00 4C 24 ED
Üzerine Yaz CHRGET
- 11 byte
C6 B6 F0 FE A2 0B A9 00 4C 24 ED
Başlamaz $9E
- 10 bayt
CE 06 80 F0 FE A2 0B 4C 26 ED
Üzerine yazar CHRGET
ve başlatmaz $9E
- 9 bayt
C6 B6 F0 FE A2 0B 4C 26 ED