00000000: 2A 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D |*---------------|
00000010: 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D |----------------|
00000020: 2D 2D 2D 2D 2D 2D 2D 0D 2A A0 72 4F 55 54 49 4E |-------.*.rOUTIN|
00000030: 45 A0 54 4F A0 43 4F 4E 56 45 52 54 A0 61 73 63 |E.TO.CONVERT.asc|
00000040: 69 69 A0 53 54 52 49 4E 47 A0 41 54 0D 2A A0 61 |ii.STRING.AT.*.a|
00000050: 73 63 73 74 72 A0 54 4F A0 41 A0 54 57 4F A0 42 |scstr.TO.A.TWO.B|
00000060: 59 54 45 A0 48 45 58 A0 4E 55 4D 42 45 52 A0 41 |YTE.HEX.NUMBER.A|
00000070: 54 0D 2A A0 6E 75 6D 2C A0 6E 75 6D 2B 31 2E A0 |T.*.num,.num+1..|
00000080: A0 75 53 45 A0 76 61 72 A0 53 54 41 54 45 4D 45 |.uSE.var.STATEME|
00000090: 4E 54 A0 54 4F A0 53 45 54 0D 2A A0 5D 31 A0 54 |NT.TO.SET.*.]1.T|
000000A0: 4F A0 27 46 27 A0 4F 52 A0 27 66 27 A0 41 43 43 |O.'F'.OR.'f'.ACC|
000000B0: 4F 52 44 49 4E 47 A0 54 4F A0 57 48 49 43 48 0D |ORDING.TO.WHICH.|
000000C0: 2A A0 61 73 63 69 69 A0 53 45 54 A0 49 53 A0 44 |*.ascii.SET.IS.D|
000000D0: 45 53 49 52 45 44 2E A0 A0 74 48 45 A0 52 4F 55 |ESIRED...tHE.ROU|
000000E0: 54 49 4E 45 0D 2A A0 49 47 4E 4F 52 45 53 A0 45 |TINE.*.IGNORES.E|
000000F0: 58 54 52 41 A0 4C 45 41 44 49 4E 47 A0 44 49 47 |XTRA.LEADING.DIG|
00000100: 49 54 53 2C A0 53 4F A0 54 48 41 54 0D 2A A0 27 |ITS,.SO.THAT.*.'|
00000110: 61 62 63 64 65 27 A0 57 49 4C 4C A0 43 4F 4E 56 |abcde'.WILL.CONV|
00000120: 45 52 54 A0 54 4F A0 24 62 63 64 65 2C A0 45 54 |ERT.TO.$bcde,.ET|
00000130: 43 2E 0D 2A 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D |C..*------------|
00000140: 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D |----------------|
00000150: 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 0D 0D 61 73 63 68 |----------..asch|
00000160: 65 78 20 6C 64 61 20 23 30 0D 20 73 74 61 20 6E |ex lda #0. sta n|
00000170: 75 6D 2B 31 20 3B 69 4E 49 54 A0 6E 75 6D 0D 20 |um+1 ;iNIT.num. |
00000180: 74 61 78 20 3B A0 41 4E 44 A0 53 54 52 49 4E 47 |tax ;.AND.STRING|
00000190: A0 50 4F 49 4E 54 45 52 0D 20 62 65 71 20 68 78 |.POINTER. beq hx|
000001A0: 32 20 3B 61 4C 57 41 59 53 A0 54 41 4B 45 4E 0D |2 ;aLWAYS.TAKEN.|
000001B0: 5D 6C 6F 6F 70 20 6F 72 61 20 6E 75 6D 0D 68 78 |]loop ora num.hx|
000001C0: 32 20 73 74 61 20 6E 75 6D 0D 20 6C 64 61 20 61 |2 sta num. lda a|
000001D0: 73 63 73 74 72 2C 78 20 3B 67 45 54 A0 44 49 47 |scstr,x ;gET.DIG|
000001E0: 49 54 0D 20 63 6D 70 20 23 27 30 27 20 3B 76 41 |IT. cmp #'0' ;vA|
000001F0: 4C 49 44 A0 48 45 58 A0 44 49 47 49 54 3F 0D 20 |LID.HEX.DIGIT?. |
00000200: 62 6C 74 20 67 6F 74 68 65 78 20 3B 65 58 49 54 |blt gothex ;eXIT|
00000210: A0 49 46 A0 4E 4F 54 0D 20 65 6F 72 20 23 27 30 |.IF.NOT. eor #'0|
00000220: 27 0D 20 63 6D 70 20 23 31 30 20 3B 6E 55 4D 45 |'. cmp #10 ;nUME|
00000230: 52 49 43 A0 44 49 47 49 54 3F 0D 20 62 6C 74 20 |RIC.DIGIT?. blt |
00000240: 69 78 20 3B 67 4F A0 4F 4E A0 49 46 A0 53 4F 0D |ix ;gO.ON.IF.SO.|
00000250: 20 61 64 63 20 23 2D 5D 31 21 27 30 27 2D 32 0D | adc #-]1!'0'-2.|
00000260: 20 63 6D 70 20 23 24 66 61 20 3B 76 41 4C 49 44 | cmp #$fa ;vALID|
00000270: A0 48 45 58 A0 44 49 47 49 54 3F 0D 20 62 6C 74 |.HEX.DIGIT?. blt|
00000280: 20 67 6F 74 68 65 78 20 3B 65 58 49 54 A0 49 46 | gothex ;eXIT.IF|
00000290: A0 4E 4F 54 0D 20 65 6F 72 20 23 24 66 30 20 3B |.NOT. eor #$f0 ;|
000002A0: 63 4F 4E 56 45 52 54 A0 54 4F A0 4E 49 42 42 4C |cONVERT.TO.NIBBL|
000002B0: 45 0D 69 78 20 69 6E 78 0D 20 6C 64 79 20 23 34 |E.ix inx. ldy #4|
000002C0: 20 3B 69 4E 44 45 58 A0 46 4F 52 A0 4E 49 42 42 | ;iNDEX.FOR.NIBB|
000002D0: 4C 45 A0 53 48 49 46 54 0D 73 68 69 66 74 20 61 |LE.SHIFT.shift a|
000002E0: 73 6C 20 6E 75 6D 0D 20 72 6F 6C 20 6E 75 6D 2B |sl num. rol num+|
000002F0: 31 0D 20 64 65 79 0D 20 62 6E 65 20 73 68 69 66 |1. dey. bne shif|
00000300: 74 0D 20 62 65 71 20 5D 6C 6F 6F 70 20 3B 61 4C |t. beq ]loop ;aL|
00000310: 57 41 59 53 A0 54 41 4B 45 4E 0D 67 6F 74 68 65 |WAYS.TAKEN.gothe|
00000320: 78 20 72 74 73 20 3B 78 A0 50 4F 49 4E 54 53 A0 |x rts ;x.POINTS.|
00000330: 54 4F A0 43 48 52 A0 41 46 54 45 52 A0 48 45 58 |TO.CHR.AFTER.HEX|
00000340: A0 53 54 52 49 4E 47 0D |.STRING. |
*--------------------------------------.
* ROUTINE TO CONVERT ASCII STRING AT.* A
SCSTR TO A TWO BYTE HEX NUMBER AT.* NUM,
NUM+1. USE VAR STATEMENT TO SET.* ]1 T
O 'F' OR 'F' ACCORDING TO WHICH.* ASCII
SET IS DESIRED. THE ROUTINE.* IGNORES E
XTRA LEADING DIGITS, SO THAT.* 'ABCDE' W
ILL CONVERT TO $BCDE, ETC..*------------
--------------------------..ASCHEX LDA #
0. STA NUM+1 ;INIT NUM. TAX ; AND STRING
POINTER. BEQ HX2 ;ALWAYS TAKEN.]LOOP OR
A NUM.HX2 STA NUM. LDA ASCSTR,X ;GET DIG
IT. CMP #'0' ;VALID HEX DIGIT?. BLT GOTH
EX ;EXIT IF NOT. EOR #'0'. CMP #10 ;NUME
RIC DIGIT?. BLT IX ;GO ON IF SO. ADC #-]
1!'0'-2. CMP #$FA ;VALID HEX DIGIT?. BLT
GOTHEX ;EXIT IF NOT. EOR #$F0 ;CONVERT
TO NIBBLE.IX INX. LDY #4 ;INDEX FOR NIBB
LE SHIFT.SHIFT ASL NUM. ROL NUM+1. DEY.
BNE SHIFT. BEQ ]LOOP ;ALWAYS TAKEN.GOTHE
X RTS ;X POINTS TO CHR AFTER HEX STRING.
×
C64 Image
> CLICK IMAGE PREVIEW FOR FULL MODAL