Zmniejszenie słowa 16-bitowego:
Standardowo:
lda word
sne:dec word+1
dec word
; abs: 11 bajtów, 13/18 cykli
; zp: 8 bajtów, 11/15 cykli
Nieudokumentowane:
lda #$ff
dcm word
sne:dec word+1
; abs: 10 bajtów, 11/16 cykli
; zp: 8 bajtów, 10/14 cykli
Wartość $ff możemy mieć przypadkiem przed operacją lub potrzebną po operacji - wtedy zyskujemy więcej.
65816:
rep #$20
dec word
sep #$20
; abs: 7 bajtów, 14 cykli (? - proszę o potwierdzenie)
; zp: 6 bajtów, 13 cykli (?)
Zmniejszenie słowa 24-bitowego:
Standardowo:
lda word
bne lo
lda word+1
sne:dec word+2
dec word+1
lo dec word
Nieudokumentowane:
lda #$ff
dcm word
bne lo
dcm word+1
sne:dec word+2
lo
Zmniejszenie słowa N-bajtowego:
Standardowo:
ldx #0
clc
loop lda #$ff
adc:sta word,x
bcs exit
inx
cpx #N
bcc loop
exit
Nieudokumentowane:
lda #$ff
tax
loop inx
dcm word,x
bne exit
cpx #N
bcc loop
exit
Zmniejszenie cyfry ASCII / kod ANTIC (np. liczba żyć w grze):
Standardowo:
dec:lda lives
cmp #'0'
beq gameover
Nieudokumentowane:
lda #'0'
dcm lives
beq gameover
@tebe: akurat nielegale potrafią zapisać do rejestrów sprzętowych mniej więcej to samo co zwykłe instrukcje. Fajnie by było, gdyby ROR $D01B zastąpił suszarkę. ;)
Ostatnio edytowany przez Fox (2012-11-08 22:06:05)
https://www.youtube.com/watch?v=jofNR_WkoCE