Source file: /~heha/hs/kcemu/kcswberg.zip/DISK/HDU.ASM

HDUASM 
;** Testumgebung **
 
	DEFW	7F7FH
	DEFM	'TESTDH'
	DEFB	1
	;DEZIMAL-UNIT FUER S-CAOS
	LD	C,E
	DEC	A
	JP	NZ,HEXDEZ
	LD	C,L	;Steuerbits
	CALL	0F003H
	DEFB	17H
	RET	C
	LD	HL,(0)
	LD	(0B796H),HL
	LD	A,(2)
	LD	(0B798H),A
	CALL	DEZHEX
	JR	NC,HLOUT
	LD	A,7
	CALL	0F003H
	DEFB	24H
HLOUT
	CALL	0F003H
	DEFB	1AH
	LD	A,B
	CALL	0F003H
	DEFB	1CH
	RET
 
;** eigentliche Unit **
 
DEZHEX
	;C: Steuerbyte
	;Bit 7: Integer oder Word
	;Bit 3: Quelle BCD oder ASCII
	;PA: HL	VR: alle
	;CY: Zahl }bersteigt Werteber.
	;B>0 oder (DE)>20h: Falsche Z.
	LD	A,C
	OR	60H
	LD	C,A
	LD	HL,0	;Akku
	LD	B,6
	DEC	DE
	CALL	DHMAIN
	RET	C	;Zahl zu gro~
	BIT	7,C
	RET	Z	;Word
	LD	A,H	;Integer
	ADD	A	;Bit 7
	BIT	6,C	;Plus?
	RET	NZ  ;ohne oder mit CY!
	XOR	A
	SUB	L
	LD	L,A
	LD	A,0
	SBC	H
	LD	H,A
	CP	80H
	RET	;ohne oder mit CY
DHMAIN
	INC	DE
	BIT	3,C
	JR	NZ,NIBBLES
	INC	B ;Repeat until false;
	LD	A,(DE)
	OR	A
	RET	Z	;Sofort Ende
	CP	21H
	CCF
	JR	NC,NXZ
	CP	'-'
	JR	Z,UDHM
	SUB	30H
	CCF
	RET	NC	;keine Ziffer
	CP	0AH
	RET	NC	;--"--
	JR	UDH1
NIBBLES
	XOR	A
	CALL	UPDH1
	CP	0AH
	JR	C,UDH1
	JR	NZ,NXZ
UDHM	;Minus auswerten
	LD	A,C
	CPL
	AND	0E0H	;Word erwartet
	RET	NZ	;oder Zahl war
	RES	6,C	;oder 2.Minus
NXZ
	BIT	5,C
	RET	Z	;1.Nicht-Ziffer
NXZ1
	DJNZ	DHMAIN
	RET		;(immer NC)
UDH1
	RES	5,C	;Eine Ziffer kam
	ADD	HL,HL	;*2
	RET	C
	PUSH	DE
	ADD	L
	LD	E,A
	LD	A,H
	ADC	0
	LD	D,A
	ADD	HL,HL	;*4
	JR	C,UDHX
	ADD	HL,HL	;*8
	JR	C,UDHX
	ADD	HL,DE	;*10+A
UDHX
	POP	DE
	RET	C
	JR	NXZ1
HEXDEZ
	;C-Register
	;Bit 0,1,2: L{nge 1..6
	;Bit 3: Anzeige oder Schieben
	;Bit 4,5: Anz.Stellen mit 0 -1
	;Bit 6: Vorzeichen linksb}ndig
	;Bit 7: Integer oder Word
	PUSH	HL
	PUSH	DE
	PUSH	BC
	XOR	A
	BIT	7,C
	JR	Z,WORD
	BIT	7,H
	JR	Z,PLUS
	EX	DE,HL
	LD	HL,0
	SBC	HL,DE
	DEFB	11H	;LD DE,
PLUS
	RES	7,C
WORD	;Vorzeichen gewandelt
	LD	A,C
	AND	0F8H
	LD	B,A
	LD	A,C
	CPL
	DEC	A
	AND	7
	OR	B
	LD	C,A
	RRCA
	RRCA
	RRCA
	RRCA
	CPL
	AND	3
	INC	A
	LD	B,A
	LD	A,C
	AND	0C0H	;VZ
	CP	80H	;anh{ngig?
	CALL	NZ,UPHD6
	LD	DE,-10000
	CALL	UPHD
	LD	DE,-1000
	CALL	UPHD
	LD	DE,-100
	CALL	UPHD
	LD	DE,-10
	CALL	UPHD
	LD	DE,-1
	CALL	UPHD
	POP	BC
	POP	DE
	POP	HL
	RET
UPHD
	XOR	A
UPHD1	ADD	HL,DE
	INC	A
	JR	C,UPHD1
	SBC	HL,DE
	DEC	A
	JR	NZ,UPHD2;1.Zahl ausg.
	;
	LD	A,B
	OR	A
	JR	Z,UPHD2	;Null ausg.
	DEC	B
UPHD6
	LD	A,C
	AND	7
	JR	Z,UPHD3	;Nicht-1.Zahl
	DEC	C
	LD	A,0FH
	JR	UPHD4
UPHD3
	LD	A,C
	CPL
	AND	0C0H	;Vorz. vorn?
	LD	A,0BH	;Space
	JR	NZ,UPHD4
	DEC	A
	JR	UPHD8	;Minus
UPHD2
	BIT	7,C	;Vorzeichen
	LD	B,0	;Rest ausgeben
	PUSH	AF
	LD	A,0AH
	CALL	NZ,UPHD4
	POP	AF
UPHD8
	RES	7,C	;Vorz. l|schen
UPHD4
	BIT	3,C
	JR	Z,UPHD5
UPDH1
	EX	DE,HL
	LD	HL,0B796H
	RLD
	INC	L
	RLD
	INC	L
	RLD
	EX	DE,HL
	RET
UPHD5
	ADD	30H
	CP	3AH
	JR	C,UPHD7
	JR	Z,UPMIN
	CP	3FH
	RET	Z
	LD	A,20H
	DEFB	11H	;LD DE,
UPMIN	LD	A,'-'
UPHD7	CALL	0F003H
	DEFB	24H
	RET
À@Àt(Àp6ÀnTop of Text: End of Text: Start of MC: ASM-Offset : õÛˆö$ÓˆUPMIN	LD	A,'-'
UPHD7	CALL	0F003H
	DEFB	24H
	RET
À@Àt(Àp6ÀnTop of Text: End of Text: Start of MC: ASM-Offset : õÛˆö$Óˆ
Detected encoding: ANSI (CP1252)4
Wrong umlauts? - Assume file is ANSI (CP1252) encoded