6502 мова машини + Apple] [+ ROM, 12 (11? 10? 9?) Байт
CE 06 80 F0 01 A2 0B A9 00 4C 24 ED
Слід почати о $8000
. Збої системного монітора, коли кількість досягає 0.
C6 B6 F0 01 A2 0B A9 00 4C 24 ED
Слід почати о $B1
. Це економить байт, оскільки я можу використовувати (двобайтову) версію нульової сторінки DEC
, але перезаписати критичну програму Applesoft CHRGET
; вам потрібно буде завантажити його та зателефонувати з монітора та використовувати CTRL+ BReturnдля повторної ініціалізації BASIC, коли закінчите. Не впевнений, це визнає це недійсним чи ні
CE 06 80 F0 01 A2 0B 4C 26 ED
Слід почати о $8000
. Це не ініціалізується $9E
, зберігаючи два байти. Однак це означає, що ви не повинні телефонувати з негативною адресою (або, якщо ви телефонуєте з монітора, ви повинні дзвонити монітору з позитивною адресою). Якщо ви це зробите, Applesoft в CALL
рутина буде зберігати FF
в $9E
, змушуючи його , щоб додати 65280 на номер при друку. Знову ж таки, не впевнений, чи це недійсне рішення чи ні.
C6 B6 F0 01 A2 0B 4C 26 ED
Слід почати о $B1
. Це поєднання двох вищеперелічених програм, економлячи загалом три байти; вам доведеться зателефонувати на монітор із позитивною адресою, завантажити його та запустити звідти, а також використати Ctrl+ BReturnдля повторної ініціалізації BASIC, коли ви закінчите.
Зауважте, що ці програми змінюють програму лише в пам'яті; повторна завантаження програми з диска скине відлік часу. Це працює, тому що Apple] [(і] [+, // e і // c) взагалі не мають системи захисту пам'яті; програма (та її самовиправлення) залишатиметься в пам’яті навіть після її виходу, тому ви можете продовжувати працювати з пам’яті, поки не перезаписаєте цю пам’ять чимось іншим.
Вибірка зразка
]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
*
Пояснення
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-байтної версії
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
Варіанти
Друкує ERR
і звукові сигнали, коли кількість досягає 0
Нормальна - 15 байт
CE 06 80 F0 07 A2 0B A9 00 4C 24 ED 4C 2D FF
Оверсайз CHRGET
- 14 байт
C6 B6 F0 07 A2 0B A9 00 4C 24 ED 4C 2D FF
Не ініціалізується $9E
- 13 байт
CE 06 80 F0 05 A2 0B 4C 26 ED 4C 2D FF
Переписує CHRGET
і не ініціалізує $9E
- 12 байт
C6 B6 F0 05 A2 0B 4C 26 ED 4C 2D FF
Замерзає, коли кількість досягає 0
Нормальна - 12 байт
CE 06 80 F0 FE A2 0B A9 00 4C 24 ED
Оверсайз CHRGET
- 11 байт
C6 B6 F0 FE A2 0B A9 00 4C 24 ED
Не ініціалізується $9E
- 10 байт
CE 06 80 F0 FE A2 0B 4C 26 ED
Переписує CHRGET
і не ініціалізує $9E
- 9 байт
C6 B6 F0 FE A2 0B 4C 26 ED