6502 Maschinensprache + Apple] [+ ROM, 12 (11? 10? 9?) Bytes
CE 06 80 F0 01 A2 0B A9 00 4C 24 ED
Sollte um beginnen $8000
. Stürzt auf dem Systemmonitor ab, wenn die Anzahl 0 erreicht.
C6 B6 F0 01 A2 0B A9 00 4C 24 ED
Sollte um beginnen $B1
. Dies spart ein Byte, da ich die (Zwei-Byte-) Zero-Page-Version von verwenden kann DEC
, aber die kritische Applesoft-Routine überschreibe CHRGET
. Sie müssen es laden und vom Monitor aus aufrufen und anschließend mit CTRL+ BReturnBASIC neu initialisieren. Ich bin mir nicht sicher, ob dies den Fehler verursacht oder nicht.
CE 06 80 F0 01 A2 0B 4C 26 ED
Sollte um beginnen $8000
. Dies wird nicht initialisiert $9E
und spart zwei Bytes. Dies bedeutet jedoch, dass Sie es nicht mit einer negativen Adresse anrufen dürfen (oder, wenn Sie es vom Monitor aus anrufen, müssen Sie den Monitor mit einer positiven Adresse anrufen). Wenn Sie das tun, Apple die CALL
speichert Routine FF
in $9E
, es verursacht 65280 an die Nummer hinzuzufügen , wenn es gedruckt wird . Wieder nicht sicher, ob dies die Lösung ungültig macht oder nicht.
C6 B6 F0 01 A2 0B 4C 26 ED
Sollte um beginnen $B1
. Dies ist eine Kombination der beiden oben genannten Programme, wodurch insgesamt drei Bytes eingespart werden. Sie müssen den Monitor mit einer positiven Adresse aufrufen, ihn laden und von dort ausführen und mit Ctrl+ BReturnBASIC neu initialisieren, wenn Sie fertig sind.
Beachten Sie, dass diese Programme nur das Programm im Speicher ändern; Durch erneutes Laden des Programms von der Festplatte wird der Countdown zurückgesetzt. Dies funktioniert, weil Apple] [(und] [+, // e und // c) überhaupt kein Speicherschutzsystem haben. Das Programm (und seine Selbstmodifikationen) bleiben auch nach dem Beenden im Speicher, sodass Sie es so lange ausführen können, bis Sie diesen Speicher mit etwas anderem überschreiben.
Probelauf
]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
*
Erläuterung
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
Erklärung der 10-Byte-Version
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
Varianten
Druckt ERR
und piept, wenn die Anzahl 0 erreicht
Normal - 15 Bytes
CE 06 80 F0 07 A2 0B A9 00 4C 24 ED 4C 2D FF
Überschreibt CHRGET
- 14 Bytes
C6 B6 F0 07 A2 0B A9 00 4C 24 ED 4C 2D FF
Initialisiert nicht $9E
- 13 Bytes
CE 06 80 F0 05 A2 0B 4C 26 ED 4C 2D FF
Überschreibt CHRGET
und initialisiert nicht $9E
- 12 Bytes
C6 B6 F0 05 A2 0B 4C 26 ED 4C 2D FF
Friert ein, wenn die Anzahl 0 erreicht
Normal - 12 Bytes
CE 06 80 F0 FE A2 0B A9 00 4C 24 ED
Überschreibt CHRGET
- 11 Bytes
C6 B6 F0 FE A2 0B A9 00 4C 24 ED
Initialisiert nicht $9E
- 10 Bytes
CE 06 80 F0 FE A2 0B 4C 26 ED
Überschreibt CHRGET
und initialisiert nicht $9E
- 9 Bytes
C6 B6 F0 FE A2 0B 4C 26 ED