 
 
 
APPENDIX NINE
Numerical Conversions
If you use this map a lot, or use the Atari a lot for machine language
routines, interrupts, graphics and the like, you know the need to
translate between decimal and hexadecimal, even back and forth with
binary, frequently. It is possible, although tedious, to do your
translations by hand, using pencil and paper. The tables for doing so
are below. It's not the best nor the fastest method available. I
recommend you get the Texas Instruments TI Programmer calculator.
It does most of this work for you, plus bit manipulation (unfortunately it
does not offer binary translation). It's an indispensable tool for
programmers.
There are other ways around buying the calculator: you can buy
Monkey Wrench from Eastern House Software, which will do the hex -
decimal translations for you quite nicely. Or you can buy any of the
numerous disk or programming utilities which include such translation
routines, such as Disk Scan from Micro Media. However, those who
wish to do the work themselves can use a simple translator program.
One such example, modified from routines that appeared separately in
COMPUTE!, November 1981 and March 1982, is:
10 DIM HEX$(16),DEC$(23),NUM$(10),W$(
   4),BIN$(8),BNY$(8),TRANS(8)
15 DATA 128,64,32,16,8,4,2,1
20 FOR N=1 TO 8:READ B:TRANS(N)=B:NEX
   T N:POKE 201,14
25 PRINT CHR$(125)
30 HEX$="0123456789ABCDEF":DEC$"=@ABC
   DEFGHI!!!!!!!JKLMNO"
40 ?:?"PRESS [OPTION] FOR HEXADECIMAL":
   ?"{6 SPACES}[SELECT] FOR DECIMAL":?"
   {6 SPACES}[START] FOR BINARY"
42 ?"{6 SPACES}TRANSLATIONS":A=1:MAX=
   4096 
50 IF PEEK(53279)=3 THEN GOTO 100
60 IF PEEK(53279)=5 THEN GOTO 200
70 IF PEEK(53279)=6 THEN GOTO 300
80 GOTO 50
100 ? : ?"ENTER HEXADECIMAL NUMBER":"?
    "$0000 TO $FFFF": INPUT NUM$:ACC=
    0:A=1:TRAP 100
120 FOR NUM=1 TO LEN(NUM$):ACC=ACC*16
    +ASC(DEC$(ASC(NUM$(NUM))-47))-64:
    NEXT NUM:T=ACC
125 IF ACC>255 THEN BNY$="........":G
    OTO 170
130 FOR N=7 TO 0 STEP-1:BIN=2^N
135 IF INT(ACC/BIN)=l THEN BNY$(A,A)=
    "1":ACC=ACC-BIN:GOTO 150
140 BNY$(A,A)="0"
150 A=A+1:NEXT N
170 ?:?"HEXADECIMAL","DECIMAL","BINA
    RY"
180 ? " ";NUM$,T,BNY$
190 ? :? : GOTO 40
200 ? :? "ENTER DECIMAL NUMBER": ?"0
    TO 65535": INPUT NUM:T=NUM:Z=T:MA
    X=4096:TRAP 200
205 IF NUM>65535 THEN GOTO 200
208 IF NUM<1 THEN GOTO 200
210 FOR N=1 TO 4:BYTE=INT(NUM/MAX):W$
    (N,N)=HEX$(BYTE+1,BYTE+1):NUM=NUM
    -MAX*BYTE:MAX=MAX/16:NEXT N
220 IF T>255 THEN BNY$="........": GOT
    O 270
230 FOR N=7 TO 0 STEP -1:BIN=2^N
235 IF INT(Z/BIN)=1 THEN BNY$(A,A)="1
    ":Z=Z-BIN:GOTO 250
240 BNY$(A,A)="0"
250 A=A+1:NEXT N
270 ?:?"DECIMAL","HEXADECIMAL","BINAR
    Y"
280 ? " ";T,W$,BNY$
290 GOTO 40
300 ? :? "INPUT BINARY NUMBER":?"0000
    0000 TO 11111111":? :?"76543210 B
    ITS":INPUT BIN$:TRAP 300
305 IF LEN(BIN$)<>8 THEN GOTO 300
308 FOR B=1 TO 8:IF VAL(BIN$(B,B))>1
    THEN POP:GOTO 300
310 NEXT B
320 FOR B=1 TO 8:IF BIN$(B,B)="1" THE
    N TOT=TOT+TRANS(B)
325 NEXT B: Q=TOT
330 FOR L=1 TO 4:BYTE=INT(TOT/MAX):W$
    (L,L)=HEX$(BYTE+1,BYTE+1):TOT=TOT
    -MAX*BYTE:MAX=MAX/16:NEXT L
340 ?:?"BINARY","HEXADECIMAL","DECIMA
    L"
350 ? " ";BIN$,W$,Q
390 GOTO 40
DOWNLOAD CONVERT.BAS
This program will translate any hexadecimal, decimal, and binary
number to and from the others. There are some constraints in its use: it
will not translate a binary number for any hex number larger than $FF
or decimal number larger than 255. It will not translate any hex
number larger than $FFFF or any decimal number larger than 65535.
Since about 99% of your numeric manipulations will be within these
ranges, you should have no problems. You can easily remove the
translation routines from the program for use in your own utility.
For a quick way to translate any number in the range of zero to 65535
($FFFF), use the table below. It's quite simple to use: to translate hex to
decimal you take the number that appears in the column that
corresponds to the value in the proper row and add the values
together. The total is your decimal number. For example:
$7AC1 = 28672   fourth column, 7
         2560    third column, A
          192   second column, C
            1    first column, 1
        -----
        31425      decimal value
To translate decimal into hex, you find the largest number less than the
number you wish to translate and subtract it from your original
number. The value in the row is the first hexadecimal value. You then
do the same with the remainder until your result is zero. The values in
the row are then concatenated together for a hexadecimal number. For
example:
31425 = 31425
      - 28672 largest number, column four. first hex number = 7
        -----
         2753 remainder, minus third column
         2560 second hex number = A
        -----
          193 remainder, minus second column
          192 third hex number = C
        -----
            1 remainder and fourth hex number
Hexadecimal value = $7AC1
 Hex                 Column              Hex
number  fourth   third   second  first  number
  1       4096     256      16      1     1
  2       8192     512      32      2     2
  3      12288     768      48      3     3
  4      16384    1024      64      4     4
  5      20480    1280      80      5     5
  6      24576    1536      96      6     6
  7      28672    1792     112      7     7
  8      32768    2048     128      8     8
  9      36864    2304     144      9     9
  A      40960    2560     160     10     A
  B      45056    2816     176     11     B
  C      49152    3072     192     12     C
  D      53248    3328     208     13     D
  E      57344    3584     224     14     E
  F      61440    3840     240     15     F
The next few pages are simply a listing of the decimal, hex,and binary
values for the range of numbers between zero and 255. I have found
this listing to be extremely useful when I couldn't enter a translator
program or lay my hands on a calculator. Read the note in the
introduction regarding the translation techniques for binary and
hexadecimal.
Decimal  Hex  Binary     Decimal  Hex  Binary     Decimal  Hex  Binary
    0     0   00000000      34    22   00100010      68    44   01000100
    1     1   00000001      35    23   00100011      69    45   01000101
    2     2   00000010      36    24   00100100      70    46   01000110
    3     3   00000011      37    25   00100101      71    47   01000111
    4     4   00000100      38    26   00100110      72    48   01001000
    5     5   00000101      39    27   00100111      73    49   01001001
    6     6   00000110      40    28   00101000      74    4A   01001010
    7     7   00000111      41    29   00101001      75    4B   01001011
    8     8   00001000      42    2A   00101010      76    4C   01001100
    9     9   00001001      43    2B   00101011      77    4D   01001101
   10     A   00001010      44    2C   00101100      78    4E   01001110
   11     B   00001011      45    2D   00101101      79    4F   01001111
   12     C   00001100      46    2E   00101110      80    50   01010000
   13     D   00001101      47    2F   00101111      81    51   01010001
   14     E   00001110      48    30   00110000      82    52   01010010
   15     F   00001111      49    31   00110001      83    53   01010011
   16    10   00010000      50    32   00110010      84    54   01010100
   17    11   00010001      51    33   00110011      85    55   01010101
   18    12   00010010      52    34   00110100      86    56   01010110
   19    13   00010011      53    35   00110101      87    57   01010111
   20    14   00010100      54    36   00110110      88    58   01011000
   21    15   00010101      55    37   00110111      89    59   01011001
   22    16   00010110      56    38   00111000      90    5A   01011010
   23    17   00010111      57    39   00111001      91    5B   01011011
   24    18   00011000      58    3A   00111010      92    5C   01011100
   25    19   00011001      59    3B   00111011      93    5D   01011101
   26    1A   00011010      60    3C   00111100      94    5E   01011110
   27    1B   00011011      61    3D   00111101      95    5F   01011111
   28    1C   00011100      62    3E   00111110      96    60   01100000
   29    1D   00011101      63    3F   00111111      97    61   01100001
   30    1E   00011110      64    40   01000000      98    62   01100010
   31    1F   00011111      65    41   01000001      99    63   01100011
   32    20   00100000      66    42   01000010     100    64   01100100
   33    21   00100001      67    43   01000011     101    65   01100101
Decimal  Hex  Binary     Decimal  Hex  Binary     Decimal  Hex  Binary
  102    66   01100110     163    A3   10100011     224    E0   11100000
  103    67   01100111     164    A4   10100100     225    E1   11100001
  104    68   01101000     165    A5   10100101     226    E2   11100010
  105    69   01101001     166    A6   10100110     227    E3   11100011
  106    6A   01101010     167    A7   10100111     228    E4   11100100
  107    6B   01101011     168    A8   10101000     229    E5   11100101
  108    6C   01101100     169    A9   10101001     230    E6   11100110
  109    6D   01101101     170    AA   10101010     231    E7   11100111
  110    6E   01101110     171    AB   10101011     232    E8   11101000
  111    6F   01101111     172    AC   10101100     233    E9   11101001
  112    70   01110000     173    AD   10101101     234    EA   11101010
  113    71   01110001     174    AE   10101110     235    EB   11101011
  114    72   01110010     175    AF   10101111     236    EC   11101100
  115    73   01110011     176    B0   10110000     237    ED   11101101
  116    74   01110100     177    B1   10110001     238    EE   11101110
  117    75   01110101     178    B2   10110010     239    EF   11101111
  118    76   01110110     179    B3   10110011     240    F0   11110000
  119    77   01110111     180    B4   10110100     241    F1   11110001
  120    78   01111000     181    B5   10110101     242    F2   11110010
  121    79   01111001     182    B6   10110110     243    F3   11110011
  122    7A   01111010     183    B7   10110111     244    F4   11110100
  123    7B   01111011     184    B8   10111000     245    F5   11110101
  124    7C   01111100     185    B9   10111001     246    F6   11110110
  125    7D   01111101     186    BA   10111010     247    F7   11110111
  126    7E   01111110     187    BB   10111011     248    F8   11111000
  127    7F   01111111     188    BC   10111100     249    F9   11111001
  128    80   10000000     189    BD   10111101     250    FA   11111010
  129    81   10000001     190    BE   10111110     251    FB   11111011
  130    82   10000010     191    BF   10111111     252    FC   11111100
  131    83   10000011     192    C0   11000000     253    FD   11111101
  132    84   10000100     193    C1   11000001     254    FE   11111110
  133    85   10000101     194    C2   11000010     255    FF   11111111
  134    86   10000110     195    C3   11000011
  135    87   10000111     196    C4   11000100
  136    88   10001000     197    C5   11000101
  137    89   10001001     198    C6   11000110
  138    8A   10001010     199    C7   11000111
  139    8B   10001011     200    C8   11001000
  140    8C   10001100     201    C9   11001001
  141    8D   10001101     202    CA   11001010
  142    8E   10001110     203    CB   11001011
  143    8F   10001111     204    CC   11001100
  144    90   10010000     205    CD   11001101
  145    91   10010001     206    CE   11001110
  146    92   10010010     207    CF   11001111
  147    93   10010011     208    D0   11010000
  148    94   10010100     209    D1   11010001
  149    95   10010101     210    D2   11010010
  150    96   10010110     211    D3   11010011
  151    97   10010111     212    D4   11010100
  152    98   10011000     213    D5   11010101
  153    99   10011001     214    D6   11010110
  154    9A   10011010     215    D7   11010111
  155    9B   10011011     216    D8   11011000
  156    9C   10011100     217    D9   11011001
  157    9D   10011101     218    DA   11011010
  158    9E   10011110     219    DB   11011011
  159    9F   10011111     220    DC   11011100
  160    A0   10100000     221    DD   11011101
  161    A1   10100001     222    DE   11011110
  162    A2   10100010     223    DF   11011111
Return to Table of Contents
| Previous Chapter
| Next Chapter