TITLE	ASCIIHEX	;VICTOR MANUEL INIESTRA ALVAREZ
 
	ORG	1000
 
YURGEN:	DEFB	0	; VALIDACION	
 
VALIDA1	DEFB	0	; 6:NO ES NUMERO 0:SI ES NUMERO	
ASCII1	DEFM	0E0F	; CADENA A TRANSFORMAR
HEX1	DEFS	2	; LUGAR DONDE SE PONDRAN LAS CIFRAS
 
VALIDA2	DEFB	0
ASCII2	DEFM	1GF0	; CADENA A TRANSFORMAR
HEX2	DEFS	2	; LUGAR DONDE SE PONDRAN LAS CIFRAS
 
VALIDA3	DEFB	0
ASCII3	DEFM	3FY9	; CADENA A TRANSFORMAR
HEX3	DEFS	2	; LUGAR DONDE SE PONDRAN LAS CIFRAS
 
VALIDA4	DEFB	0
ASCII4	DEFM	7E01	; CADENA A TRANSFORMAR
HEX4	DEFS	2	; LUGAR DONDE SE PONDRAN LAS CIFRAS
 
	ORG	0
	JZ	BEGIN
	JNZ	BEGIN
 
ILEGAL:	LD	#6
	STO	YURGEN
	JZ	SALIDA
	JNZ	SALIDA	; REGRESA A ASCHEX  
 
DEC09:	LD	X	; A=@X
	AND	#0F	; A=BAJO(@X)
	
	PUSH	A
	SUB	#9
	LD	#0
	ADC	#0
	POP	A
	JZ	ILEGAL
 
	SL		; A=BAJO(@X)*10
	SL
	SL
	SL
	STO	Y	; Y=BAJO(@X)*10
	JZ	UNIDAD
	JNZ	UNIDAD	; VE A LEER LA UNIDAD
 
DECAF:	LD	X
	AND	#0F	
	
	PUSH	A
	SUB	#6
	LD	#0
	ADC	#0
	POP	A
	JZ	ILEGAL
 
	ADD	#9	; A=BAJO(@X)+9
	SL
	SL
	SL
	SL
	STO	Y
	JZ	UNIDAD
	JNZ	UNIDAD
 
UNI09:	LD	#0	; CARRY=0
	ADD	#0
	
	PUSH	A
	SUB	#9
	LD	#0
	ADC	#0
	POP	A
	JZ	ILEGAL
 
	LD	X	; A=@X
	AND	#0F	; A=BAJO(@X)
	ADC	Y	; A=Y+BAJO(@X)
	STO	Y	; Y=Y+BAJO(@X)
	JZ	SALIDA
	JNZ	SALIDA
 
UNIAF:	LD	#0
	ADD	#0
	
	PUSH	A
	SUB	#6
	LD	#0
	ADC	#0
	POP	A
	JZ	ILEGAL
 
	LD	X
	AND	#0F
	ADD	#9	; A=BAJO(@X)+9
	ADC	Y
	STO	Y
	JZ	SALIDA
	JNZ	SALIDA
 
ASCHEX:
	LD	X	; A=@X
	AND	#0F0	; A=ALTO(@X)
	SUB	#30	; ALTO(@X)=30? (30,31,32,...,39)
	JZ	DEC09	; X ESTA ENTRE 0 Y 9
	SUB	#10	; ALTO(@X)=40? (41,42,..46)
	JZ	DECAF	; X ESTA ENTRE A Y F
	JNZ	ILEGAL
 
UNIDAD:	INX		; AHORA LEE LA UNIDAD
	LD	X	
	AND	#0F0
	SUB	#30
	JZ	UNI09
	SUB	#10
	JZ	UNIAF
	JNZ	ILEGAL
 
SALIDA:
	INX
	INY
	RET		; REGRESA A RECNUM
 
RECNUM:
	CALL	ASCHEX	; PRIMERA CIFRA
	CALL	ASCHEX	; SEGUNDA CIFRA
	RET
 
BEGIN:	LDSP	#5000	; EL STACK CRECERA DESDE 5000 HASTA 0
	
	LD	#0
	STO	YURGEN
	LDX	ASCII1	; X=ASCII1
	LDY	HEX1	; Y=HEX1
	CALL	RECNUM
	LD	YURGEN
	STO	VALIDA1
	
	LD	#0
	STO	YURGEN
	LDX	ASCII2	; X=ASCII2
	LDY	HEX2	; Y=HEX2
	CALL	RECNUM
	LD	YURGEN
	STO	VALIDA2
	
	LD	#0
	STO	YURGEN
	LDX	ASCII3	; X=ASCII3
	LDY	HEX3	; Y=HEX3
	CALL	RECNUM
	LD	YURGEN
	STO	VALIDA3
	
	LD	#0
	STO	YURGEN
	LDX	ASCII4	; X=ASCII4
	LDY	HEX4	; Y=HEX4
	CALL	RECNUM
	LD	YURGEN
	STO	VALIDA4
 
FIN:	HALT
	END

    Source: geocities.com/v.iniestra/apuntes/arq_proc

               ( geocities.com/v.iniestra/apuntes)                   ( geocities.com/v.iniestra)