*``````````````````````````````* * HEX2BINASC :: * * * *- -* *- -* * CLOBBERS: * * * * FLAGS: ????---- REG: AXYM * *- -* * CYCLES: ??? * * SIZE: * *- -* * USAGE: * * * *- -* * ENTRY * * * * TOP OF STACK * * * * LOW BYTE OF RETURN ADDRESS * * HI BYTE OF RETURN ADDRESS * *- -* * EXIT * * * * TOP OF STACK * * * * LOW BYTE OF RETURN ADDRESS * * HI BYTE OF RETURN ADDRESS * * * * .Y = COUNTER; TRASH * * .X = COUNTER; TRASH * * .A = LOW BYTE OF RET ADDR * * * * [RETURN] = STRING VALUE * * [RETLEN] = LENGTH OF STRING * *,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,* * HEX2BINASC * ** SAVE RETURN ADDRESS * PLA STA RETADR PLA STA RETADR+1 * ** GET PARAMETERS * PLA STA :HBYTE * ** MASK RIGHT * AND #$F0 LSR LSR LSR LSR STA :LEFT LDA :HBYTE * ** MASK LEFT * AND #$0F STA :RIGHT * ** GET LEFT FROM LOOKUP TABLE * ASL :LEFT ASL :LEFT ; MUL BY 4 LDX :LEFT LDA :BINTAB,X STA RETURN LDA :BINTAB,X+1 STA RETURN+1 LDA :BINTAB,X+2 STA RETURN+2 LDA :BINTAB,X+3 STA RETURN+3 * ** NOW GET RIGHT * ASL :RIGHT ASL :RIGHT ; MUL BY 4 LDX :RIGHT LDA :BINTAB,X STA RETURN+4 LDA :BINTAB,X+1 STA RETURN+5 LDA :BINTAB,X+2 STA RETURN+6 LDA :BINTAB,X+3 STA RETURN+7 * LDA #8 STA RETLEN * ** RESTORE RETURN ADDRESS * LDA RETADR+1 PHA LDA RETADR PHA * RTS ; RETURN * ** DATA * :BINTAB ASC "0000" ; 0 ASC "0001" ; 1 ASC "0010" ; 2 ASC "0011" ; 3 ASC "0100" ; 4 ASC "0101" ; 5 ASC "0110" ; 6 ASC "0111" ; 7 ASC "1000" ; 8 ASC "1001" ; 9 ASC "1010" ; A ASC "1011" ; B ASC "1100" ; C ASC "1101" ; D ASC "1110" ; E ASC "1111" ; F * :LEFT DS 1 :RIGHT DS 1 :HBYTE DS 1