![]() |
Różne procedury | Kompilacja |
WEJŚCIOWE | WYJŚCIE DANYCH | STOSU | ||
| ConBD | Konwersja bajtu do systemu DEC-ASCIIZ | A | textbuf | 1x |
| ConBDs | Konwersja bajtu do systemu DEC-ASCIIZ (szybka) | A | textbuf | - |
| Con8D | Konwersja 8-bitów do systemu DEC-ASCIIZ | var0 | textbuf | - |
| ConWD | Konwersja słowa (16-bit) do systemu DEC-ASCIIZ | [var0, var1] | textbuf | 1x |
| Con16D | Konwersja 16-bitów do systemu DEC-ASCIIZ | [var0, var1] | textbuf | - |
| Con24D | Konwersja 24-bitów do systemu DEC-ASCIIZ | [var0, var1, var2] | textbuf | - |
| Con32D | Konwersja 32-bitów do systemu DEC-ASCIIZ | [var0, var1, var2, var3] | textbuf | - |
| ConBO | Konwersja bajtu do systemu OCT-ASCIIZ | A | textbuf | 1x |
| ConBOs | Konwersja bajtu do systemu OCT-ASCIIZ (szybka) | A | textbuf | - |
| Con8O | Konwersja 8-bitów do systemu OCT-ASCIIZ | var0 | textbuf | - |
| Con16O | Konwersja 16-bitów do systemu OCT-ASCIIZ | [var0, var1] | textbuf | - |
| Con24O | Konwersja 24-bitów do systemu OCT-ASCIIZ | [var0, var1, var2] | textbuf | - |
| Con32O | Konwersja 32-bitów do systemu OCT-ASCIIZ | [var0, var1, var2, var3] | textbuf | - |
| ConBH | Konwersja bajtu do systemu HEX-ASCIIZ | A | textbuf | - |
| ConBB | Konwersja bajtu do systemu BIN-ASCIIZ | A | textbuf | - |
WEJŚCIOWE | DANYCH | STOSU | ||
| Add168 | Dodawanie bajtu NN do słowa: [16] + [8] = [16] | [var0, var1] + NN | [var0, var1] | - |
| Add1616 | Dodawanie 2 słów: [16] + [16] = [16] | [var0, var1] + [var2, var3] | [var0, var1] | - |
| Add248 | Dodawanie bajtu NN do wartości 24-bitowej: [24] + [8] = [24] | [var0, var1, var2] + NN | [var0, var1, var2] | - |
| Add2416 | Dodawanie słowa do wartości 24-bitowej: [24] + [16] = [24] | [var0, var1, var2] + [var3, var4] | [var0, var1, var2] | - |
| Add2424 | Dodawanie 2 wartości 24-bitowych: [24] + [24] = [24] | [var0, var1, var2] + [var3, var4, var5] | [var0, var1, var2] | - |
| Add328 | Dodawanie bajtu NN do wartości 32-bitowej: [32] + [8] = [32] | [var0, var1, var2, var3] + NN | [var0, var1, var2, var3] | - |
| Add3216 | Dodawanie słowa do wartości 32-bitowej: [32] + [16] = [32] | [var0, var1, var2, var3] + [var4, var5] | [var0, var1, var2, var3] | - |
| Add3224 | Dodawanie wartości 24-bitowej do wartości 32-bitowej: [32] + [24] = [32] | [var0, var1, var2, var3] + [var4, var5, var6] | [var0, var1, var2, var3] | - |
| Add3232 | Dodawanie 2 wartości 32-bitowych: [32] + [32] = [32] | [var0, var1, var2, var3] + [var4, var5, var6, var7] | [var0, var1, var2, var3] | - |
| Sub168 | Odejmowanie bajtu NN od słowa: [16] - [8] = [16] | [var0, var1] - NN | [var0, var1] | - |
| Sub1616 | Odejmowanie 2 słów: [16] - [16] = [16] | [var0, var1] - [var2, var3] | [var0, var1] | - |
| Sub248 | Odejmowanie bajtu NN od wartości 24-bitowej: [24] - [8] = [24] | [var0, var1, var2] - NN | [var0, var1, var2] | - |
| Sub2416 | Odejmowanie słowa od wartości 24-bitowej: [24] - [16] = [24] | [var0, var1, var2] - [var3, var4] | [var0, var1, var2] | - |
| Sub2424 | Odejmowanie 2 wartości 24-bitowych: [24] - [24] = [24] | [var0, var1, var2] - [var3, var4, var5] | [var0, var1, var2] | - |
| Sub328 | Odejmowanie bajtu NN od wartości 32-bitowej: [32] - [8] = [32] | [var0, var1, var2, var3] - NN | [var0, var1, var2, var3] | - |
| Sub3216 | Odejmowanie słowa od wartości 32-bitowej: [32] - [16] = [32] | [var0, var1, var2, var3] - [var4, var5] | [var0, var1, var2, var3] | - |
| Sub3224 | Odejmowanie wartości 24-bitowej od wartości 32-bitowej: [32] - [24] = [32] | [var0, var1, var2, var3] - [var4, var5, var6] | [var0, var1, var2, var3] | - |
| Sub3232 | Odejmowanie 2 wartości 32-bitowych: [32] - [32] = [32] | [var0, var1, var2, var3] - [var4, var5, var6, var7] | [var0, var1, var2, var3] | - |
| Mul88 | Mnożenie 2 bajtów: [8] * [8] = [16] | var0 * var1 | [var0, var1] | - |
| Mul1616 | Mnożenie 2 słów: [16] * [16] = [32] | [var2, var3] * [var4, var5] | [var0, var1, var2, var3] | - |
| Div88 | Dzielenie 2 bajtów: [8] / [8] = [8] + [8] | var0 / var1 | var0 + A | - |
| Div1616 | Dzielenie 2 słów: [16] / [16] = [16] + [16] | [var0, var1] / [var2, var3] | [var0, var1] + [var4, var5] | - |
| ARGUMENTY WEJŚCIOWE | WYJŚCIE DANYCH | STOSU | ||
| LenStr | Liczenie znaków w ciągu ASCIIZ | textbuf | X | - |
| DelZero | Usuwanie zbędnych zer z wartości ASCIIZ | textbuf | textbuf | - |
| ClrZero | Zamienianie zbędnych zer w wartości ASCIIZ na spacje | textbuf | textbuf | - |
| CPUtype | Generowanie ciągu ASCIIZ z typem procesora (NMOS/CMOS) | - | textbuf | - |
| RegP | Generowanie ciągu ASCIIZ z wartościami flag rejestru P | P | textbuf | 2x |
ConBD: lda #$00 ;bajt do konwersji
ldx #$00
ConBD0: ldy #$2F
clc
adc ConBD2,X
ConBD1: iny
sec
sbc ConBD2,X
cmp ConBD2,X
bcs ConBD1
pha ;odkładanie A na stos
tya
sta textbuf,X
pla ;przywracanie A ze stosu
inx
cpx #$03
bne ConBD0
lda #$00
sta textbuf,X ;wyjście danych
rts
ConBD2: .db $64,$0A,$01
;Maksymalna wartość liczby wyjściowej: "255" ($FF)
;Rozmiar: 40 B, linii kodu: 21
ConBDs: lda #$00 ;bajt do konwersji
ldy #$2F
ldx #$3A
sec
ConBDs0: iny
sbc #$64
bcs ConBDs0
ConBDs1: dex
adc #$0A
bmi ConBDs1
adc #$2F
sty textbuf
stx textbuf+1
sta textbuf+2
lda #$00
sta textbuf+3 ;wyjście danych
rts
;Maksymalna wartość liczby wyjściowej: "255" ($FF)
;Rozmiar: 34 B, linii kodu: 17
Con8D: lda #$00
sta var0 ;bajt do konwersji
ldx #$02 ;maksymalna liczba cyfr (-1 cyfra)
Con8D0: ldy #$09 ;liczba bitów do konwersji (+1 bit)
lda #$00
clc
Con8D1: rol A
cmp #$0A
bcc Con8D2
sbc #$0A
Con8D2: rol var0
dey
bne Con8D1
clc
adc #$30
sta textbuf,X
dex
bpl Con8D0
sty textbuf+3 ;wyjście danych
rts
;Maksymalna wartość liczby wyjściowej: "255" ($FF)
;Rozmiar: 38 B, linii kodu: 20
ConWD: lda #$00
sta var0 ;starszy bajt do konwersji
lda #$00
sta var1 ;młodszy bajt do konwersji
lda #$00
ldx #$05
ConWD0: sta textbuf,X
dex
bpl ConWD0
ldx #$10
ConWD1: asl var1
rol var0
txa
pha ;odkładanie A na stos
ldx #$04
ConWD2: ldy textbuf,X
lda ConWD4,Y
rol A
sta textbuf,X
dex
bne ConWD2
rol textbuf
pla ;przywracanie A ze stosu
tax
dex
bne ConWD1
ConWD3: lda textbuf,X
clc
adc #$30
sta textbuf,X ;wyjście danych
inx
cpx #$05
bne ConWD3
rts
ConWD4: .db $00,$01,$02,$03,$04,$80,$81,$82,$83,$84
;Maksymalna wartość liczby wyjściowej: "65535" ($FFFF)
;Rozmiar: 78 B, linii kodu: 35
Con16D: lda #$00
sta var0 ;starszy bajt do konwersji
lda #$00
sta var1 ;młodszy bajt do konwersji
ldx #$04 ;maksymalna liczba cyfr (-1 cyfra)
Con16D0: ldy #$11 ;liczba bitów do konwersji (+1 bit)
lda #$00
clc
Con16D1: rol A
cmp #$0A
bcc Con16D2
sbc #$0A
Con16D2: rol var1
rol var0
dey
bne Con16D1
clc
adc #$30
sta textbuf,X
dex
bpl Con16D0
sty textbuf+5 ;wyjście danych
rts
;Maksymalna wartość liczby wyjściowej: "65535" ($FFFF)
;Rozmiar: 46 B, linii kodu: 23
Con24D: lda #$00
sta var0 ;najstarszy bajt do konwersji
lda #$00
sta var1
lda #$00
sta var2 ;najmłodszy bajt do konwersji
ldx #$07 ;maksymalna liczba cyfr (-1 cyfra)
Con24D0: ldy #$19 ;liczba bitów do konwersji (+1 bit)
lda #$00
clc
Con24D1: rol A
cmp #$0A
bcc Con24D2
sbc #$0A
Con24D2: rol var2
rol var1
rol var0
dey
bne Con24D1
clc
adc #$30
sta textbuf,X
dex
bpl Con24D0
sty textbuf+8 ;wyjście danych
rts
;Maksymalna wartość liczby wyjściowej: "16777215" ($FFFFFF)
;Rozmiar: 54 B, linii kodu: 26
Con32D: lda #$00
sta var0 ;najstarszy bajt do konwersji
lda #$00
sta var1
lda #$00
sta var2
lda #$00
sta var3 ;najmłodszy bajt do konwersji
ldx #$09 ;maksymalna liczba cyfr (-1 cyfra)
Con32D0: ldy #$21 ;liczba bitów do konwersji (+1 bit)
lda #$00
clc
Con32D1: rol A
cmp #$0A
bcc Con32D2
sbc #$0A
Con32D2: rol var3
rol var2
rol var1
rol var0
dey
bne Con32D1
clc
adc #$30
sta textbuf,X
dex
bpl Con32D0
sty textbuf+10 ;wyjście danych
rts
;Maksymalna wartość liczby wyjściowej: "4294967295" ($FFFFFFFF)
;Rozmiar: 62 B, linii kodu: 29
ConBO: lda #$00 ;bajt do konwersji
ldx #$00
ConBO0: ldy #$2F
clc
adc ConBO2,X
ConBO1: iny
sec
sbc ConBO2,X
cmp ConBO2,X
bcs ConBO1
pha ;odkładanie A na stos
tya
sta textbuf,X
pla ;przywracanie A ze stosu
inx
cpx #$03
bne ConBO0
lda #$00
sta textbuf,X ;wyjście danych
rts
ConBO2: .db $40,$08,$01
;Maksymalna wartość liczby wyjściowej: "377" ($FF)
;Rozmiar: 40 B, linii kodu: 21
ConBOs: lda #$00 ;bajt do konwersji
ldy #$2F
ldx #$38
sec
ConBOs0: iny
sbc #$40
bcs ConBOs0
ConBOs1: dex
adc #$08
bmi ConBOs1
adc #$2F
sty textbuf
stx textbuf+1
sta textbuf+2
lda #$00
sta textbuf+3 ;wyjście danych
rts
;Maksymalna wartość liczby wyjściowej: "377" ($FF)
;Rozmiar: 34 B, linii kodu: 17
Con8O: lda #$00
sta var0 ;bajt do konwersji
ldx #$02 ;maksymalna liczba cyfr (-1 cyfra)
Con8O0: ldy #$09 ;liczba bitów do konwersji (+1 bit)
lda #$00
clc
Con8O1: rol A
cmp #$08
bcc Con8O2
sbc #$08
Con8O2: rol var0
dey
bne Con8O1
clc
adc #$30
sta textbuf,X
dex
bpl Con8O0
sty textbuf+3 ;wyjście danych
rts
;Maksymalna wartość liczby wyjściowej: "377" ($FF)
;Rozmiar: 38 B, linii kodu: 20
Con16O: lda #$00
sta var0 ;starszy bajt do konwersji
lda #$00
sta var1 ;młodszy bajt do konwersji
ldx #$05 ;maksymalna liczba cyfr (-1 cyfra)
Con16O0: ldy #$11 ;liczba bitów do konwersji (+1 bit)
lda #$00
clc
Con16O1: rol A
cmp #$08
bcc Con16O2
sbc #$08
Con16O2: rol var1
rol var0
dey
bne Con16O1
clc
adc #$30
sta textbuf,X
dex
bpl Con16O0
sty textbuf+6 ;wyjście danych
rts
;Maksymalna wartość liczby wyjściowej: "177777" ($FFFF)
;Rozmiar: 46 B, linii kodu: 23
Con24O: lda #$00
sta var0 ;najstarszy bajt do konwersji
lda #$00
sta var1
lda #$00
sta var2 ;najmłodszy bajt do konwersji
ldx #$07 ;maksymalna liczba cyfr (-1 cyfra)
Con24O0: ldy #$19 ;liczba bitów do konwersji (+1 bit)
lda #$00
clc
Con24O1: rol A
cmp #$08
bcc Con24O2
sbc #$08
Con24O2: rol var2
rol var1
rol var0
dey
bne Con24O1
clc
adc #$30
sta textbuf,X
dex
bpl Con24O0
sty textbuf+8 ;wyjście danych
rts
;Maksymalna wartość liczby wyjściowej: "77777777" ($FFFFFF)
;Rozmiar: 54 B, linii kodu: 26
Con32O: lda #$00
sta var0 ;najstarszy bajt do konwersji
lda #$00
sta var1
lda #$00
sta var2
lda #$00
sta var3 ;najmłodszy bajt do konwersji
ldx #$0A ;maksymalna liczba cyfr (-1 cyfra)
Con32O0: ldy #$21 ;liczba bitów do konwersji (+1 bit)
lda #$00
clc
Con32O1: rol A
cmp #$08
bcc Con32O2
sbc #$08
Con32O2: rol var3
rol var2
rol var1
rol var0
dey
bne Con32O1
clc
adc #$30
sta textbuf,X
dex
bpl Con32O0
sty textbuf+11 ;wyjście danych
rts
;Maksymalna wartość liczby wyjściowej: "37777777777" ($FFFFFFFF)
;Rozmiar: 62 B, linii kodu: 29
ConBH: lda #$00 ;bajt do konwersji
ldx #$00
ConBH0: tay
cpx #$00
bne ConBH1
and #$F0
ror A
ror A
ror A
ror A
ConBH1: and #$0F
clc
adc #$30
cmp #$3A
bmi ConBH2
clc
adc #$07 ;adc #$27 - małe litery (a-f)
ConBH2: sta textbuf,X
tya
inx
cpx #$02
bne ConBH0
lda #$00
sta textbuf,X ;wyjście danych
rts
;Maksymalna wartość liczby wyjściowej: "FF" ($FF)
;Procedura generuje duże lub małe litery (a-f)
;Rozmiar: 42 B, linii kodu: 25
ConBB: lda #$00 ;bajt do konwersji
ldx #$00
ConBB0: rol A
tay
lda #$30
bcc ConBB1
lda #$31
ConBB1: sta textbuf,X
tya
inx
cpx #$08 ;liczba bitów do konwersji
bne ConBB0
lda #$00
sta textbuf,X ;wyjście danych
rts
;Maksymalna wartość liczby wyjściowej: "11111111" ($FF)
;Rozmiar: 27 B, linii kodu: 15
Add168: clc
lda var1 ;młodszy bajt słowa
adc #$01 ;bajt NN
sta var1 ;młodszy bajt wyniku
bcc Add168a
inc var0 ;starszy bajt słowa/wyniku
Add168a: rts ;Z=1 i C=1 jeśli wynik >65535
;Rozmiar: 15 B, linii kodu: 7
Add168: clc
lda var1 ;młodszy bajt słowa
adc #$01 ;bajt NN
sta var1 ;młodszy bajt wyniku
lda var0 ;starszy bajt słowa
adc #$00
sta var0 ;starszy bajt wyniku
rts ;C=1 jeśli wynik >65535
;Rozmiar: 18 B, linii kodu: 8
Add1616: clc
lda var1 ;młodszy bajt 1 słowa
adc var3 ;młodszy bajt 2 słowa
sta var1 ;młodszy bajt wyniku
lda var0 ;starszy bajt 1 słowa
adc var2 ;starszy bajt 2 słowa
sta var0 ;starszy bajt wyniku
rts ;C=1 jeśli wynik >65535
;Rozmiar: 20 B, linii kodu: 8
Add248: clc
lda var2 ;najmłodszy bajt wartości
adc #$01 ;bajt NN
sta var2 ;najmłodszy bajt wyniku
bcc Add248a
inc var1
bne Add248a
inc var0 ;najstarszy bajt wartości/wyniku
Add248a: rts ;Z=1 i C=1 jeśli wynik >16777215
;Rozmiar: 20 B, linii kodu: 9
Add248: clc
lda var2 ;najmłodszy bajt wartości
adc #$01 ;bajt NN
sta var2 ;najmłodszy bajt wyniku
lda var1
adc #$00
sta var1
lda var0 ;najstarszy bajt wartości
adc #$00
sta var0 ;najstarszy bajt wyniku
rts ;C=1 jeśli wynik >16777215
;Rozmiar: 26 B, linii kodu: 11
Add2416: clc
lda var2 ;najmłodszy bajt wartości
adc var4 ;młodszy bajt słowa
sta var2 ;najmłodszy bajt wyniku
lda var1
adc var3 ;starszy bajt słowa
sta var1
bcc Add2416a
inc var0 ;najstarszy bajt wartości/wyniku
Add2416a: rts ;Z=1 i C=1 jeśli wynik >16777215
;Rozmiar: 25 B, linii kodu: 10
Add2416: clc
lda var2 ;najmłodszy bajt wartości
adc var4 ;młodszy bajt słowa
sta var2 ;najmłodszy bajt wyniku
lda var1
adc var3 ;starszy bajt słowa
sta var1
lda var0 ;najstarszy bajt wartości
adc #$00
sta var0 ;najstarszy bajt wyniku
rts ;C=1 jeśli wynik >16777215
;Rozmiar: 28 B, linii kodu: 11
Add2424: clc
lda var2 ;najmłodszy bajt 1 wartości
adc var5 ;najmłodszy bajt 2 wartości
sta var2 ;najmłodszy bajt wyniku
lda var1
adc var4
sta var1
lda var0 ;najstarszy bajt 1 wartości
adc var3 ;najstarszy bajt 2 wartości
sta var0 ;najstarszy bajt wyniku
rts ;C=1 jeśli wynik >16777215
;Rozmiar: 29 B, linii kodu: 11
Add328: clc
lda var3 ;najmłodszy bajt wartości
adc #$01 ;bajt NN
sta var3 ;najmłodszy bajt wyniku
bcc Add328a
inc var2
bne Add328a
inc var1
bne Add328a
inc var0 ;najstarszy bajt wartości/wyniku
Add328a: rts ;Z=1 i C=1 jeśli wynik >4294967295
;Rozmiar: 25 B, linii kodu: 11
Add328: clc
lda var3 ;najmłodszy bajt wartości
adc #$01 ;bajt NN
sta var3 ;najmłodszy bajt wyniku
lda var2
adc #$00
sta var2
lda var1
adc #$00
sta var1
lda var0 ;najstarszy bajt wartości
adc #$00
sta var0 ;najstarszy bajt wyniku
rts ;C=1 jeśli wynik >4294967295
;Rozmiar: 34 B, linii kodu: 14
Add3216: clc
lda var3 ;najmłodszy bajt wartości
adc var5 ;młodszy bajt słowa
sta var3 ;najmłodszy bajt wyniku
lda var2
adc var4 ;starszy bajt słowa
sta var2
bcc Add3216a
inc var1
bne Add3216a
inc var0 ;najstarszy bajt wartości/wyniku
Add3216a: rts ;Z=1 i C=1 jeśli wynik >4294967295
;Rozmiar: 30 B, linii kodu: 12
Add3216: clc
lda var3 ;najmłodszy bajt wartości
adc var5 ;młodszy bajt słowa
sta var3 ;najmłodszy bajt wyniku
lda var2
adc var4 ;starszy bajt słowa
sta var2
lda var1
adc #$00
sta var1
lda var0 ;najstarszy bajt wartości
adc #$00
sta var0 ;najstarszy bajt wyniku
rts ;C=1 jeśli wynik >4294967295
;Rozmiar: 36 B, linii kodu: 14
Add3224: clc
lda var3 ;najmłodszy bajt 1 wartości
adc var6 ;najmłodszy bajt 2 wartości
sta var3 ;najmłodszy bajt wyniku
lda var2
adc var5
sta var2
lda var1
adc var4 ;najstarszy bajt 2 wartości
sta var1
bcc Add3224a
inc var0 ;najstarszy bajt 1 wartości/wyniku
Add3224a: rts ;Z=1 i C=1 jeśli wynik >4294967295
;Rozmiar: 34 B, linii kodu: 13
Add3224: clc
lda var3 ;najmłodszy bajt 1 wartości
adc var6 ;najmłodszy bajt 2 wartości
sta var3 ;najmłodszy bajt wyniku
lda var2
adc var5
sta var2
lda var1
adc var4 ;najstarszy bajt 2 wartości
sta var1
lda var0 ;najstarszy bajt 1 wartości
adc #$00
sta var0 ;najstarszy bajt wyniku
rts ;C=1 jeśli wynik >4294967295
;Rozmiar: 37 B, linii kodu: 14
Add3232: clc
lda var3 ;najmłodszy bajt 1 wartości
adc var7 ;najmłodszy bajt 2 wartości
sta var3 ;najmłodszy bajt wyniku
lda var2
adc var6
sta var2
lda var1
adc var5
sta var1
lda var0 ;najstarszy bajt 1 wartości
adc var4 ;najstarszy bajt 2 wartości
sta var0 ;najstarszy bajt wyniku
rts ;C=1 jeśli wynik >4294967295
;Rozmiar: 38 B, linii kodu: 14
Sub168: sec
lda var1 ;młodszy bajt słowa
sbc #$01 ;bajt NN
sta var1 ;młodszy bajt wyniku
bcs Sub168a
dec var0 ;starszy bajt słowa/wyniku
Sub168a: rts
;Rozmiar: 15 B, linii kodu: 7
Sub168: sec
lda var1 ;młodszy bajt słowa
sbc #$01 ;bajt NN
sta var1 ;młodszy bajt wyniku
lda var0 ;starszy bajt słowa
sbc #$00
sta var0 ;starszy bajt wyniku
rts ;C=0 jeśli wynik <0
;Rozmiar: 18 B, linii kodu: 8
Sub1616: sec
lda var1 ;młodszy bajt 1 słowa
sbc var3 ;młodszy bajt 2 słowa
sta var1 ;młodszy bajt wyniku
lda var0 ;starszy bajt 1 słowa
sbc var2 ;starszy bajt 2 słowa
sta var0 ;starszy bajt wyniku
rts ;C=0 jeśli wynik <0
;Rozmiar: 20 B, linii kodu: 8
Sub248: sec
lda var2 ;najmłodszy bajt wartości
sbc #$01 ;bajt NN
sta var2 ;najmłodszy bajt wyniku
lda var1
sbc #$00
sta var1
bcs Sub248a
dec var0 ;najstarszy bajt wartości/wyniku
Sub248a: rts
;Rozmiar: 23 B, linii kodu: 10
Sub248: sec
lda var2 ;najmłodszy bajt wartości
sbc #$01 ;bajt NN
sta var2 ;najmłodszy bajt wyniku
lda var1
sbc #$00
sta var1
lda var0 ;najstarszy bajt wartości
sbc #$00
sta var0 ;najstarszy bajt wyniku
rts ;C=0 jeśli wynik <0
;Rozmiar: 26 B, linii kodu: 11
Sub2416: sec
lda var2 ;najmłodszy bajt wartości
sbc var4 ;młodszy bajt słowa
sta var2 ;najmłodszy bajt wyniku
lda var1
sbc var3 ;starszy bajt słowa
sta var1
bcs Sub2416a
dec var0 ;najstarszy bajt wartości/wyniku
Sub2416a: rts
;Rozmiar: 25 B, linii kodu: 10
Sub2416: sec
lda var2 ;najmłodszy bajt wartości
sbc var4 ;młodszy bajt słowa
sta var2 ;najmłodszy bajt wyniku
lda var1
sbc var3 ;starszy bajt słowa
sta var1
lda var0 ;najstarszy bajt wartości
sbc #$00
sta var0 ;najstarszy bajt wyniku
rts ;C=0 jeśli wynik <0
;Rozmiar: 28 B, linii kodu: 11
Sub2424: sec
lda var2 ;najmłodszy bajt 1 wartości
sbc var5 ;najmłodszy bajt 2 wartości
sta var2 ;najmłodszy bajt wyniku
lda var1
sbc var4
sta var1
lda var0 ;najstarszy bajt 1 wartości
sbc var3 ;najstarszy bajt 2 wartości
sta var0 ;najstarszy bajt wyniku
rts ;C=0 jeśli wynik <0
;Rozmiar: 29 B, linii kodu: 11
Sub328: sec
lda var3 ;najmłodszy bajt wartości
sbc #$01 ;bajt NN
sta var3 ;najmłodszy bajt wyniku
lda var2
sbc #$00
sta var2
lda var1
sbc #$00
sta var1
bcs Sub328a
dec var0 ;najstarszy bajt wartości/wyniku
Sub328a: rts
;Rozmiar: 31 B, linii kodu: 13
Sub328: sec
lda var3 ;najmłodszy bajt wartości
sbc #$01 ;bajt NN
sta var3 ;najmłodszy bajt wyniku
lda var2
sbc #$00
sta var2
lda var1
sbc #$00
sta var1
lda var0 ;najstarszy bajt wartości
sbc #$00
sta var0 ;najstarszy bajt wyniku
rts ;C=0 jeśli wynik <0
;Rozmiar: 34 B, linii kodu: 14
Sub3216: sec
lda var3 ;najmłodszy bajt wartości
sbc var5 ;młodszy bajt słowa
sta var3 ;najmłodszy bajt wyniku
lda var2
sbc var4 ;starszy bajt słowa
sta var2
lda var1
sbc #$00
sta var1
bcs Sub3216a
dec var0 ;najstarszy bajt wartości/wyniku
Sub3216a: rts
;Rozmiar: 33 B, linii kodu: 13
Sub3216: sec
lda var3 ;najmłodszy bajt wartości
sbc var5 ;młodszy bajt słowa
sta var3 ;najmłodszy bajt wyniku
lda var2
sbc var4 ;starszy bajt słowa
sta var2
lda var1
sbc #$00
sta var1
lda var0 ;najstarszy bajt wartości
sbc #$00
sta var0 ;najstarszy bajt wyniku
rts ;C=0 jeśli wynik <0
;Rozmiar: 36 B, linii kodu: 14
Sub3224: sec
lda var3 ;najmłodszy bajt 1 wartości
sbc var6 ;najmłodszy bajt 2 wartości
sta var3 ;najmłodszy bajt wyniku
lda var2
sbc var5
sta var2
lda var1
sbc var4 ;najstarszy bajt 2 wartości
sta var1
bcs Sub3224a
dec var0 ;najstarszy bajt 1 wartości/wyniku
Sub3224a: rts
;Rozmiar: 34 B, linii kodu: 13
Sub3224: sec
lda var3 ;najmłodszy bajt 1 wartości
sbc var6 ;najmłodszy bajt 2 wartości
sta var3 ;najmłodszy bajt wyniku
lda var2
sbc var5
sta var2
lda var1
sbc var4 ;najstarszy bajt 2 wartości
sta var1
lda var0 ;najstarszy bajt 1 wartości
sbc #$00
sta var0 ;najstarszy bajt wyniku
rts ;C=0 jeśli wynik <0
;Rozmiar: 37 B, linii kodu: 14
Sub3232: sec
lda var3 ;najmłodszy bajt 1 wartości
sbc var7 ;najmłodszy bajt 2 wartości
sta var3 ;najmłodszy bajt wyniku
lda var2
sbc var6
sta var2
lda var1
sbc var5
sta var1
lda var0 ;najstarszy bajt 1 wartości
sbc var4 ;najstarszy bajt 2 wartości
sta var0 ;najstarszy bajt wyniku
rts ;C=0 jeśli wynik <0
;Rozmiar: 38 B, linii kodu: 14
Mul88: lda #$00
clc
ldx #$08
Mul88a: bcc Mul88b
clc
adc var0 ;bajt 1
Mul88b: ror A
ror var1 ;bajt 2, młodszy bajt wyniku
dex
bpl Mul88a
sta var0 ;starszy bajt wyniku
rts
;Rozmiar: 22 B, linii kodu: 12
Mul1616: lda #$00
sta var1
clc
ldx #$10
Mul1616a: bcc Mul1616b
clc
lda var1
adc var5 ;młodszy bajt 1 słowa
sta var1
lda var0
adc var4 ;starszy bajt 1 słowa
Mul1616b: ror A
sta var0 ;najstarszy bajt wyniku
ror var1
ror var2 ;starszy bajt 2 słowa
ror var3 ;młodszy bajt 2 słowa, najmłodszy bajt wyniku
dex
bpl Mul1616a
rts
;Rozmiar: 43 B, linii kodu: 19
Div88: lda #$00
ldx #$08
Div88a: asl var0 ;bajt 1
rol A ;bajt z niepodzieloną resztą
cmp var1 ;bajt 2
bcc Div88b
inc var0 ;bajt wyniku
sbc var1
Div88b: dex
bne Div88a
rts
;Jeśli var1 (bajt 2) > var0 (bajt 1): wynik = $00, reszta = var0 (bajt 1).
;Po dzieleniu przez 0: wynik = $FF, reszta = var0 (bajt 1) (0/0 i 255/1 dają taki sam rezultat).
;Rozmiar: 23 B, linii kodu: 11
Div1616: lda #$00
sta var4
sta var5
ldx #$10
Div1616a: asl var1 ;młodszy bajt 1 słowa/wyniku
rol var0 ;starszy bajt 1 słowa/wyniku
rol var5 ;młodszy bajt słowa z niepodzieloną resztą
rol var4 ;starszy bajt słowa z niepodzieloną resztą
sec
lda var5
sbc var3 ;młodszy bajt 2 słowa
tay
lda var4
sbc var2 ;starszy bajt 2 słowa
bcc Div1616b
inc var1
sty var5
sta var4
Div1616b: dex
bne Div1616a
rts
;Jeśli [var2, var3] (słowo 2) > [var0, var1] (słowo 1): wynik = $0000, reszta = [var0, var1] (słowo 1).
;Po dzieleniu przez 0: wynik = $FFFF, reszta = [var0, var1] (słowo 1) (0/0 i 65535/1 dają taki sam
;rezultat).
;Rozmiar: 51 B, linii kodu: 21
LenStr: ldx #$FF
LenStr0: inx ;liczba znaków (maks. 255)
lda textbuf,X
bne LenStr0
rts
;Rozmiar: 9 B, linii kodu: 5
DelZero: ldx #$FF
ldy #$FF
DelZero0: inx
lda textbuf,X
beq DelZero3
cmp #$30
beq DelZero0
dex
cpx #$FF
beq DelZero2
DelZero1: inx
iny
lda textbuf,X
sta textbuf,Y
bne DelZero1
DelZero2: rts
DelZero3: sta textbuf+1
rts
;Rozmiar: 34 B, linii kodu: 18
ClrZero: ldx #$00
lda textbuf,X
ClrZero0: cmp #$30
beq ClrZero1
rts
ClrZero1: lda #$20 ;znak spacji
sta textbuf,X
inx
lda textbuf,X
bne ClrZero0
lda #$30
dex
sta textbuf,X
rts
;Rozmiar: 28 B, linii kodu: 14
CPUtype: ldx #$FF
CPUtype0: inx ;kopiowanie ciągu ASCIIZ do wyjścia danych
lda CPUtype2,X
sta textbuf,X
bne CPUtype0
sed ;sprawdzanie typu procesora
lda #$99
clc
adc #$01
cld
bne CPUtype1 ;typ NMOS
lda #$43
sta textbuf+10 ;zmiana 11 znaku ciągu ASCIIZ
CPUtype1: rts
CPUtype2: .db "CPU type: NMOS",0
;Rozmiar: 41 B, linii kodu: 15
RegP: php ;odkładanie P na stos
ldx #$00
ldy #$FF
RegP0: iny
lda RegP2,X
sta textbuf,Y
iny
lda #$3A
sta textbuf,Y
iny
pla ;załadowanie P ze stosu do A
rol A
pha ;odkładanie A na stos
lda #$30
bcc RegP1
lda #$31
RegP1: sta textbuf,Y
iny
lda #$20
sta textbuf,Y
inx
cpx #$08
bne RegP0
lda #$00
sta textbuf,Y
pla ;przywracanie A ze stosu
rts
RegP2: .db "NV-BDIZC"
;Rozmiar: 57 B, linii kodu: 28