1

czesc,

jak szybko sprawdzic czy wartosc np w akumulatorze jest poprawna wartoscia w kodzie bcd?

jasniej:

lda #$29 - jest poprawna w kodzie bcd
lda #$2a - juz nie jest

pozdrawiam

http://atari.pl/hsc/ad.php?i=1.

2

Napewno zadziała coś takiego:

tax
lda is_valid_bcd,x

:)

Ale wydaje mi się, że powinno wystarczyć coś takiego:

sta temp
lda #0
clc
sed
adc temp
cmp temp

i wtedy jeśli Z=1 to wartość jest poprawna. Trzeba to sprawdzić, ale wydaje mi się, że dodawania BCD polega na dodaniu normalnie i potem korekcji, więc jak dodamy do niepoprawnego BCD zero, to powinien zostać skorygowany.

Przy zabawie z BCD pamiętaj tylko o niepoprawnych wartościach flag N,V i Z na 6502 i poprawnych na 65c02/65c816.

3

tak, po sed nastepuje korekta :-)

sta temp
sed
clc
adc #0
cld
cmp temp
beq prawidlowa

http://atari.pl/hsc/ad.php?i=1.

4

dlaczego $2A nie jest poprawną liczbą BCD?

5

hej!

http://pl.wikipedia.org/wiki/BCD

pozdrawiam
Seban

6

kod BCD nie wykorzystuje wszystkich mozliwych kombinacji bitow w niblach

0000, 0001, 0010, 0011, 0100, 0101, 0110, 0111, 1000, 1001

pozostale kombinacje sa niedozwolone - nie reprezentuja cyfr dziesietnych

http://atari.pl/hsc/ad.php?i=1.

7

to mam braki w edukacji :) dzieki,.

8 Ostatnio edytowany przez laoo/ng (2007-04-13 16:03:09)

Skoro już jesteśmy przy BCD miałbym małą prośbę. Żeby definitywnie przekonać się jak to jest z tymi flagami napisałem program, który wykonuje wszystykie 32896 możliwe dodawania dwóch liczb ośmiobitowych w BCD i zapisuje wynik wraz z flagami (700 kB). Programik jest tu. Wersja BCDD.XEX zapisuje wynik na D:, BCDH.XEX na H:, a BCDP.XEX na P:. Potrzebuję ochotnika, który uruchomi ten program na atari z 6502 i prześle mi wynik na laoo(at)icomp.pl. Chodzi mi o wynik na 6502, bo na 65c816 już sprawdziłem u siebie, a drugiej atarki nie mam. Sprawdziłem też na atari++ z emulacją 6502 jak i 65c02, na atar800win oraz na UltraXE. Każdy emulator robi to inaczej :)

Oczywiście jakby ktoś w komputerze miał 65c02 (podobno ostatnie modele atari mają. Prawda to w ogóle?) to też byłbym wdzięczny.

9 Ostatnio edytowany przez epi (2007-04-13 16:58:58)

mikey napisał/a:

to mam braki w edukacji :) dzieki,.

Ech, humanistyczne liceum. ;>

laoo: Sprawdzone. Mail poszedł.

Hitler, Stalin, totalniak, SSman, NKWDzista, kaczor dyktator, za długo byłem w ChRL, wypowiadam się afektywnie.

10

> wszystykie 32896 możliwe dodawania dwóch liczb ośmiobitowych

pewnie sie czepiam, moze bez racji... ale czy to przypadkiem nie powinna byc liczba: 32640?

poza tym kto wie, moze to dobry sposob na detekcje na czym uruchomiony jest program :-)

http://atari.pl/hsc/ad.php?i=1.

11 Ostatnio edytowany przez epi (2007-04-13 21:50:37)

xxl: Liczb jest 256, zatem 256*(256+1) / 2 = 32896

Hitler, Stalin, totalniak, SSman, NKWDzista, kaczor dyktator, za długo byłem w ChRL, wypowiadam się afektywnie.

12 Ostatnio edytowany przez xxl (2007-04-13 17:26:49)

a to zwracam honor, ja liczylem kombinacje (bez powtorzen) 2elementowe ze zbioru 256elementowego i nie uwzglenilem dodawania dwoch takich samych cyfr a oczywiscie nalezy to zrobic.

http://atari.pl/hsc/ad.php?i=1.

13 Ostatnio edytowany przez laoo/ng (2007-04-13 22:44:10)

XXL: liczyłeś kombinacje bez powtórzeń 2 elementów ze zbioru 255 elementowego: 255*(255+1)/2=32640 :)

Jakby kogoś interesowało dotychczasowe wyniki razem z wynikiem epiego (thx) dla 6502 są tu
Zamieszczone wyniki dowodzą od razu twierdzenia z postu #2 i #3: dodanie zera do dowolnej liczby wygeneruje poprawną liczbę w BCD (nie chodzi tu o to, że wynik jest porawny, tylko liczba jest poprawna w sensie BCD), a więc dodanie zera do liczby niepoprawnej zmieni jej wartość (zero nie jest elementem neutralnym w zbiorze niepoprawnych liczb BCD ;P)

Dodatkowo widać, że atari++ ma poważne problemy z BCD, podczas gdy atari800 radzi sobie wyśmienicie, a UltraXE  daje niekiedy niepoprawny wynik.

==== EDIT ====

Dla pełności testu dodałem wyniki odejmowania w BCD i wszystko razem umieściłem w archiwum 7zip.

Z ciekawostek w 6502 błędna jest tylko flaga Z, atari800 działa dokładnie jak 6502, a UltraXE myli się częściej niż przy dodawaniu :)

14

laoo: oczywiscie podeslales bugreporta do atari++ ? ;)

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep

15

Oczywiście. O błędach w BCD informowałem już w wersji 1.51, ale poprawka w 1.52 zmieniła je tylko na inne. Te dane mam nadzieje pomogą w uzyskaniu dobrej emulacji.

16

heh, gdyby wiecej takich uzytkownikow bylo, a mniej narzekajacych - pisanie okazuje sie sama przyjemnoscia ;)

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep