home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 28 / amigaformatcd28.iso / -coverdisks- / subscribers / subs.dms / subs / ksc.lzx / ksc / hex.asm < prev    next >
Assembly Source File  |  1981-01-05  |  812b  |  51 lines

  1. ; by Kyzer/CSG
  2.  
  3. ; IN:
  4. ;  A0=string containing ASCII hex digits
  5.  
  6. ; OUT:
  7. ;  D0=value of hex string (32 bit)
  8. ;  D1=validity: -1 = valid number, 0 = invalid number
  9.  
  10. ; ALSO TRASHED
  11. ;  A0/A1/D2/D3
  12.  
  13.     cmp.b    #'$',(a0)
  14.     bne.s    .noadd
  15.     addq.l    #1,a0
  16. .noadd    cmp.b    #'0',(a0)
  17.     bne.s    .noadd2
  18.     cmp.b    #'x',1(a0)
  19.     bne.s    .noadd2
  20.     addq.l    #2,a0
  21. .noadd2
  22.     moveq    #0,d0
  23.     moveq    #0,d1
  24.     moveq    #0,d2
  25.  
  26. .next    lea    .table(pc),a1
  27.  
  28. .cmp    move.b    (a1),d2
  29.     beq.s    .fail
  30.     addq.l    #2,a1
  31.     cmp.b    (a0),d2
  32.     bne.s    .cmp
  33.  
  34.     move.b    -1(a1),d1
  35.     asl.l    #4,d0
  36.     add.b    d1,d0
  37.  
  38.     addq.l    #1,a0
  39.     tst.b    (a0)
  40.     bne.s    .next
  41.  
  42. .done    moveq    #-1,d1    ; OK
  43.     rts
  44. .fail    moveq    #0,d1    ; FAIL
  45.     rts
  46.  
  47. .table    dc.b    '0',0,    '1',1,    '2',2,    '3',3,    '4',4,    '5',5
  48.     dc.b    '6',6,    '7',7,    '8',8,    '9',9,    'a',10,    'A',10
  49.     dc.b    'b',11,    'B',11,    'c',12,    'C',12,    'd',13,    'D',13
  50.     dc.b    'e',14,    'E',14,    'f',15,    'F',15,    0,0
  51.