Autor Wątek: Konwerter HEX to BIN i odwrotność  (Przeczytany 6238 razy)

Gelip

  • *****
  • Wiadomości: 714
Odp: Konwerter HEX to BIN i odwrotność
« Odpowiedź #15 dnia: 2021.11.11, 11:41:42 »
@Phonex
Posklejałem Twoje programy w jeden - dodałem odwrócenie BIN w tablicy DIM i$() ale coś jest nie tak bo źle oblicza. Możesz rzucić okiem na program conv.z80 bo coś źle działa.

P.S. Twój program zamiany HEX na BIN jednak źle działa. Jak podam mu HEX FF to źle oblicza BIN i zamiast samych 11111111 wyświetla 10001000
« Ostatnia zmiana: 2021.11.11, 11:57:02 wysłana przez Gelip »
"Byte" Personal Computer
Брестское ПО средств вычислительной техники

Gelip

  • *****
  • Wiadomości: 714
Odp: Konwerter HEX to BIN i odwrotność
« Odpowiedź #16 dnia: 2021.11.11, 13:07:51 »
Zrobiłem konwerter mynew.tap używając swoich początkowych plików. Program zamienia:
HEX -> DEC -> BIN -> REVBIN -> DEC -> HEX ale wyświetla wyniki tylko:
HEX -> BIN -> REVBIN -> HEX
Jeśli podamy Hex=0 to wychodzi z programu (polecenie STOP)

Power button: 20DF10EF (32-bit unsigned)

czyli 20 NOT 20=DF 10 NOT 10=EF

20 00100000 00000100 04
10 00010000 00001000 08

NEC ADDR=04, CMD=08
« Ostatnia zmiana: 2021.11.11, 13:36:23 wysłana przez Gelip »
"Byte" Personal Computer
Брестское ПО средств вычислительной техники

Phonex

  • *****
  • Wiadomości: 1232
  • Miejsce pobytu:
    Warszawa
Odp: Konwerter HEX to BIN i odwrotność
« Odpowiedź #17 dnia: 2021.11.12, 08:25:08 »
Nawias w złym miejscu w linii 2040 >:(
Tak ma być:
100 REM liczba HEX w x$, tylko duże litery
110 LET n$=""
120 LET s=CODE x$(1): GO SUB 2000
130 LET s=CODE x$(2): GO SUB 2000
140 STOP: REM wynik w n$
 
2000 IF s>CODE "9" THEN LET s=s-(CODE "A"-CODE "9"-1)
2010 LET s=s-CODE "0"
2020 FOR a=3 TO 0 STEP -1
2030 LET s$="0"
2040 LET b=INT (s/2^a)
2050 IF b THEN LET s$="1": LET s=s-b*2^a
2060 LET n$=n$+s$
2070 NEXT a
2080 RETURN

Poprawiłem w pliku.
Drugi zamieszczony programik BIN -> HEX sam odwraca łańcuch w trakcie - nie potrzeba osobnej procedury, tak jest szybciej i krócej. Też poprawiłem. Teraz już działa dobrze. Można jeszcze trochę przyspieszyć i skrócić wpisując wartości zamiast CODE "xx".

Gelip

  • *****
  • Wiadomości: 714
Odp: Konwerter HEX to BIN i odwrotność
« Odpowiedź #18 dnia: 2021.11.12, 17:56:01 »
Pod jaką zmienną jest odwrócona wartość BIN bo chciałbym aby się wyświetlała jak w niepoprawionej wersji conv.z80 ?
"Byte" Personal Computer
Брестское ПО средств вычислительной техники

Phonex

  • *****
  • Wiadomości: 1232
  • Miejsce pobytu:
    Warszawa
Odp: Konwerter HEX to BIN i odwrotność
« Odpowiedź #19 dnia: 2021.11.13, 09:46:43 »
Sorry, nie ma.
Nie ma odwracania, program po prostu przetwarza łańcuch od końca.
Wiem, że wygląda teraz niesymetrycznie, ale tak naprawdę chyba nie jest do niczego potrzebne? ;)
Rozumiem, że przydawało się do testów, ale jak już działa...
Ewentualnie można wydrukować łańcuch od tyłu :P

Przy okazji jak się przyglądałem, to wpadłem, że IF w linii 2050 nie jest do końca niezbędny. Odejmowanie od s sobie poradzi, tylko trzeba jakoś wybrać "0" czy "1". I wymyśliłem! Bezpośrednie indeksowanie łańcucha, które zawsze mnie rozbawia (w linii 2060) :D.
100 REM liczba HEX w x$, tylko duże litery
110 LET n$=""
120 LET s=CODE x$(1): GO SUB 2000
130 LET s=CODE x$(2): GO SUB 2000
140 STOP: REM wynik w n$
 
2000 IF s>CODE "9" THEN LET s=s-(CODE "A"-CODE "9"-1)
2010 LET s=s-CODE "0"
2020 FOR a=3 TO 0 STEP -1
2040 LET b=INT (s/2^a)
2050 LET s=s-b*2^a
2060 LET n$=n$+"01"(b+1)
2070 NEXT a
2080 RETURN
Jest krótsze.

Jak już miałem to w pamięci, to w ten sam sposób poprawiłem też BIN -> HEX:
10 LET h$=""
20 LET start=5: GO SUB 1000
30 LET start=1: GO SUB 1000
40 STOP: REM wynik w h$

1000 LET h=0
1010 FOR a=0 TO 3
1020 LET h=h+2^(3-a)*VAL b$(3-a+start)
1030 NEXT a
1050 LET h$=h$+"0123456789ABCDEF"(h+1)
1060 RETURN
I teraz jest szybsze!
I lepiej wygląda :D
I od razu widać co robi.

EDIT: poprawki w linii 1050. Zmiana załącznika
« Ostatnia zmiana: 2021.11.13, 10:17:14 wysłana przez Phonex »

Gelip

  • *****
  • Wiadomości: 714
Odp: Konwerter HEX to BIN i odwrotność
« Odpowiedź #20 dnia: 2021.11.13, 10:00:31 »
Coś źle działa
"Byte" Personal Computer
Брестское ПО средств вычислительной техники

Phonex

  • *****
  • Wiadomości: 1232
  • Miejsce pobytu:
    Warszawa
Odp: Konwerter HEX to BIN i odwrotność
« Odpowiedź #21 dnia: 2021.11.13, 10:19:32 »
A no jasne! Zapomniałem o zerze w łańcuchu.
Przetestowałem za słabo, jak się okazuje.
Poprawiłem w poprzednim poście i zmieniłem załączony plik.

Phonex

  • *****
  • Wiadomości: 1232
  • Miejsce pobytu:
    Warszawa
Odp: Konwerter HEX to BIN i odwrotność
« Odpowiedź #22 dnia: 2021.11.14, 12:47:29 »
Na zakończenie można by jeszcze sprawdzić, jak długi byłby konwerter korzystający z pomysłu trojacka z postu #2.
Skoro już jest działający poprawnie odwracacz HEX, można wygenerować sobie wszystkie wyniki i stablicować je.

Oto kompletny konwerter.
Dzięki "xxxxxxx" w tablicy, da się to zrobić w dwóch liniach tylko!
REM wejście x$, wyjście h$
LET a$="084C2A6E19xxxxxxx5D3B7F"
LET h$=a$(CODE x$(2)-47): LET h$=h$+a$(CODE x$(1)-47)

Dziękuję za uwagę :D

Gelip

  • *****
  • Wiadomości: 714
Odp: Konwerter HEX to BIN i odwrotność
« Odpowiedź #23 dnia: 2021.11.15, 13:40:41 »
Dzięki "xxxxxxx" w tablicy, da się to zrobić w dwóch liniach tylko!
Co mam wstawić za te xxxxxxx ?
"Byte" Personal Computer
Брестское ПО средств вычислительной техники

matofesi

  • *****
  • Wiadomości: 1939
  • Miejsce pobytu:
    Toruń/Poland
Odp: Konwerter HEX to BIN i odwrotność
« Odpowiedź #24 dnia: 2021.11.15, 13:50:00 »
Dokładnie to, co tam jest - iksy są po to, żeby przeskoczyć różnicę między kodem '9' i 'A' - '9' to 57, 'A' - 65 czyli między nimi masz 7 znaków, które się nigdy nie pojawią w wejściowym HEXie.
« Ostatnia zmiana: 2021.11.15, 14:32:02 wysłana przez matofesi »

Gelip

  • *****
  • Wiadomości: 714
Odp: Konwerter HEX to BIN i odwrotność
« Odpowiedź #25 dnia: 2021.11.15, 14:22:29 »
Faktycznie działa:
   5 POKE 23658,8
  10 INPUT "Hex ";x$
  20 LET a$="084C2A6E19xxxxxxx5D3B7F"
  30 LET h$=a$(CODE x$(2)-47): LET h$=h$+a$(CODE x$(1)-47)
  40 PRINT x$;" -> ";h$
  50 GO TO 10
"Byte" Personal Computer
Брестское ПО средств вычислительной техники