Jump to content

Talk:Binary-coded decimal

Page contents not supported in other languages.
From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by ClueBot III (talk | contribs) at 18:35, 28 March 2020 (Archiving 1 discussion to Talk:Binary-coded decimal/Archives/2019/November. (BOT)). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
WikiProject iconComputing Start‑class
WikiProject iconThis article is within the scope of WikiProject Computing, a collaborative effort to improve the coverage of computers, computing, and information technology on Wikipedia. If you would like to participate, please visit the project page, where you can join the discussion and see a list of open tasks.
StartThis article has been rated as Start-class on Wikipedia's content assessment scale.
???This article has not yet received a rating on the project's importance scale.
Note icon
This article has been automatically rated by a bot or other tool because one or more other projects use this class. Please ensure the assessment is correct before removing the |auto= parameter.
WikiProject iconElectronics Start‑class Low‑importance
WikiProject iconThis article is part of WikiProject Electronics, an attempt to provide a standard approach to writing articles about electronics on Wikipedia. If you would like to participate, you can choose to edit the article attached to this page, or visit the project page, where you can join the project and see a list of open tasks. Leave messages at the project talk page
StartThis article has been rated as Start-class on Wikipedia's content assessment scale.
LowThis article has been rated as Low-importance on the project's importance scale.


Is there an article about an algorithm that converts a binary value to BCD?

for example: convert the value 11111111 (binary) to 255 with each digit stored in separate bytes:

2 5 5
00000010 00000101 00000101

What I can do is: you simply divide by 10 repeatedly and each time, you use the remainder to place your digits, while the quotient (rounded down) is the next digit to be divided again. For example:

  1. 255/10 = Q:25 R:5 That is 5 would be placed in the ones place of the digit BCD storage (XX5).
  2. with the quotient in hand, divide by 10 again, which would be 25/10 = Q:2 R:5 store the remainder into the tens place (X55)
  3. again, with the new quotient in hand, divide by 10 again: 2/10 = Q:0 R:2 now write the remainder value in the hundreds place (255).

This only works with unsigned integers. For signed integers, simply flip the negative value to a positive (-5 turns into 5, for example), call the routine to write the digits in, and then place a minus sign before it (so 11111111 (255), XOR +1 would be 00000001, then BCD it, which spits out 1 in decimal, and place the minus sign to form -1). You can keep going based on how many digits you want to display.

I did this on Super Mario World ROM hacking when Akaginite developed the 32-bit/16-bit division. Joeleoj123 (talk) 21:49, 24 February 2018 (UTC)[reply]

Edit: Included how to convert. Joeleoj123 (talk) 00:38, 8 March 2018 (UTC)[reply]

I'm sorry... I thought I replied to this. I was certainly intending to. In general we don't include algorithms, particularly not if they're obvious or very well known. This one is widely covered in the literature, eg places like IBM's "Commercial Subroutine Package" (which dates from the 1960s) and, well, this one is obvious (or should be) to anyone in a first-year programming course and so has been "invented" countless times already. Jeh (talk) 03:12, 8 March 2018 (UTC)[reply]

BCD code B

I was reading MAX7219/MAX7221 datasheet, and they mention code B, https://datasheets.maximintegrated.com/en/ds/MAX7219-MAX7221.pdf page 7 and 8.

It goes 0-9, then '-', 'E', 'H', 'L', 'P', ' '. Instead of pure A B C D E F. This is because these letter and symbols are more useful in userfacing equipement, i.e. E error, H/L - high low, and '-' for a minus sign in front or between digits, and blank for spacing. P is probably standing for program, i.e. P001, and all 6 characters can be easily displayed on standard 7 segment display in upper case without problem. (B and D cannot be displayed without confusion with 8 and 0).

I do not know if this is industry standard. 81.6.34.246 (talk) 14:21, 31 July 2018 (UTC)[reply]

It isn't. Neither are A through F (which btw can be displayed just fine using lower case for b and d). And it's really only marginally associated with the article topic, since neither this set of six characters nor A through F are decimal digits. Jeh (talk) 17:48, 31 July 2018 (UTC)[reply]
The SN7447 (maybe closest to industry standard) implements them with minimal logic, except for the requirement that B'1111' give all segments off. This gives strange looking characters. The DM9368[1] generates AbCdEF. I believe it uses a ROM, instead of minimized random logic. (It also has current source outputs for directly driving LEDs.) Gah4 (talk) 18:24, 31 July 2018 (UTC)[reply]
I wonder what CD players do with non-decimal digits in the track number? Gah4 (talk) 18:24, 31 July 2018 (UTC)[reply]

References

  1. ^ "DM9368 7-Segment Decoder/Driver/Latch with Constant Current Source Outputs" (PDF). pdf.datasheetcatalog.com. Fairchild. Retrieved 31 July 2018.

x87

That article mentions the x87 implementation of BCD, but doesn't quite explain it. x87 converts external BCD integers to internal floating point values in its internal 64 bit significant format. With a little luck and careful programming, you can get the appropriate integer results. It doesn't store BCD values in its internal registers. Gah4 (talk) 12:57, 28 March 2020 (UTC)[reply]