1

jest dostepna jakas biblioteka oferujaca funkcje dodawania/odejmowania/mnozenia/dzielenia liczb ze znakiem zapisywanych max na 2 bajtach ?

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

2 Ostatnio edytowany przez gorgh (2019-08-13 11:37:43)

to moja biblioteka dodawania liczb ze znakiem
sign1-znak liczby pierwszej (0== dodatni, 255== ujemny)
sign2- znak liczby drugiej
value1, value1h- wartosc pierwsza
value2,value2h- wartosc druga
value,valueH- wynik
na wyjściu znak liczby po dodaniu

edit: działa dla rozsądnych wartości starszego bajtu
edit2: poprawiłem w 2 miejscach eor #$ff na eor #$ff clc adc #1

addition
 lda sign2
 bne fuuu
 jmp dodaj
fuuu 
;sign2=minus
 lda sign1
 bmi dodaj_ ;sign1=minus sign2=minus
 lda value1 ;sign1=plus sign2=minus
 sec
 sbc value2
 sta value
 bcc change_sign
 lda value1h
 sec
 sbc value2h
 sta valueH
 bpl yyyy_
 eor #$ff
 
 sta valueH
 lda value
 eor #$ff
 clc
 adc #1
 sta value
 lda #255
 rts
yyyy_
 lda #0
 rts
change_sign

 lda value1h
 clc
 sbc value2h
 sta valueh
 bpl yyyy_
 eor #$ff
 sta valueH
 lda value
 eor #$ff
 clc
 adc #1
 sta value
 lda #255
 rts
dodaj_ ;sign1=minus sign2=minus
 lda value1
 clc
 adc value2
 sta value
 bcs double
 lda value1h
 bne tot
 lda value2h
 bne tot
q1
 sta valueH
yyg_
 lda #255
 rts
tot
 lda #1
 sta valueH
 lda #255
 rts
double
 lda value1h
 sec
 adc value2h
 sta valueH
 lda #255
 rts
dodaj ;sign1=? sign2=plus
 lda sign1
 beq plusplus
minusplus
 lda value1
 sec
 sbc value2
 sta value
 bcc turn
 lda value1h
 sec
 sbc value2h
 sta valueH
 bmi hfa_
seee_
 lda #255
 rts
hfa_
 eor #$ff
 sta valueH
 lda value
 eor #$ff
 clc
 adc #1
 sta value
 lda #0
 rts

plusplus
 lda value1
 clc
 adc value2 
 sta value
 bcs double2
 lda value1h
 bne tot2
 lda value2h
 bne tot2
ty_
 sta valueH
fh_
 lda #0
 rts
tot2
 lda #1
 bne ty_
double2
 lda value1h
 sec
 adc value2h
 sta valueH
 lda #0
 rts
turn
 lda value1h
 clc
 sbc value2h
 sta valueH
 bpl seee_
hf_
 eor #$ff
 sta valueH
 lda value
 eor #$ff
 clc
 adc #1
 sta value
 lda #0
 rts

3

dzieki. przydaloby sie tez info czy skladniki to liczba 1 czy 2 bajtowa... no i reszta operacji...

a wlasnie aby korzystac z pakietu FP z ROM to jak przeksztalcic liczbe INT ze znakiem na FP ? pakiet FP z C64 ma do tego procke a na Atari trzeba konwertowac liczbe do stringa a pozniej na FP?

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

4 Ostatnio edytowany przez mono (2019-08-13 15:15:53)

Dodawanie i odejmowanie? Wydawało mi się że wystarczy potraktować liczbę jako U2 i wtedy zwyczajnie:

lda a
clc
adc b
sta c
lda a+1
adc b+1
sta c+1

b15 składników i wyniku wskazuje znak (i N w rejestrze flag). V mówi o przepełnieniu zakresu U2. OCB z bibliotekami?
Mnożenie U2 jest bardziej skomplikowane, ale OIDP na codebase64 są procedury korygujące znak.

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

5 Ostatnio edytowany przez xxl (2019-08-13 16:12:50)

o co chodzi? o czas :-)

jesli jest biblioteka, ktora realizuje pewne zadania to po co mialbym pisac wszystko od zera skoro mozna skorzystac z biblioteki?

jak masz wbic wozdzia to robisz do tego celu mlotek? ;-)

przykladowo czego mi brakuje w pakiecie FP z ROM: operacji na liczbach int ze znakiem (nawet c64 to ma :/).
nie chce przygotowywac liczb do operacji (korzystajac z pakietu) chce podac skladniki ewentualnie ich format, operacje i dostac wynik oraz info czy wynik jest prawidlowy. :-)

---
tym bardziej, ze konwertowanie liczb na string a pozniej na fp albo przechowywanie reprezentacji wartosci -1 w formacie ataroskim FP w programie usera do dalszch obliczen... to tylko atari moglo na to wpasc ;-)

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

6 Ostatnio edytowany przez mono (2019-08-13 16:59:07)

xxl napisał/a:

o co chodzi? o czas :-)

jesli jest biblioteka, ktora realizuje pewne zadania to po co mialbym pisac wszystko od zera skoro mozna skorzystac z biblioteki?

jak masz wbic wozdzia to robisz do tego celu mlotek? ;-)

Daj spokój, to jest rzecz oczywista. Zaskoczyło mnie że szukasz biblioteki do dodawania/odejmowania liczb U2.

xxl napisał/a:

przykladowo czego mi brakuje w pakiecie FP z ROM: operacji na liczbach int ze znakiem (nawet c64 to ma :/).
nie chce przygotowywac liczb do operacji (korzystajac z pakietu) chce podac skladniki ewentualnie ich format, operacje i dostac wynik oraz info czy wynik jest prawidlowy. :-)

To może trzeba sobie rozszerzyć pakiet o procedury z ROM-u C64 :)

xxl napisał/a:

tym bardziej, ze konwertowanie liczb na string a pozniej na fp albo przechowywanie reprezentacji wartosci -1 w formacie ataroskim FP w programie usera do dalszch obliczen... to tylko atari moglo na to wpasc ;-)

To fakt. Musiałbyś robić coś w rodzaju:

;FR0.w=int
  lda FR0+1
  cmp #$80
  php
  bcc @+
  eor #$ff   ;abs(a)
  sta FR0+1
  lda FR0
  eor #$ff
  sta FR0
@ jsr IFP
  asl FR0  ;korekcja znaku
  plp
  ror FR0
hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

7

wykonalem -1 * 1 = 0 ;-)

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

8

...mieszkał w Wiśle sum wąstaty, znaaaakomity matematyk :)

Cuda wianki i nie tylko :) POKEY 4ever ;)

9

po prostu procka Mono zle dziala.

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

10

Tak. Przepraszam - pisałem na szybko. Poniżej działająca:

;YX-U2
iifp:
  stx FR0
  sty FR0+1
  cpy #$80
  php
  bcc @+
  txa
  eor #$ff   ;abs(a)
  adc #0
  sta FR0
  tya
  eor #$ff
  adc #0
  sta FR0+1
@ jsr IFP
  asl FR0  ;korekcja znaku
  plp
  ror FR0
  rts

To zamienia Ci liczbę U2 na FP.
Wcześniej zrobiłem uzupełnienie do 1 zamiast do 2 przy abs.

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

11 Ostatnio edytowany przez xxl (2019-08-14 01:30:00)

dzieki. wyszlo takie cos :-)

https://www.youtube.com/watch?v=-1BSMP_YY9s

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