Difference between revisions of "Z80 Routines:Other:DispHL"
From WikiTI
		
		
		
 (New page: DispHL DispHL == Unsigned Version ==   <nowiki>;DispHL, especially adapted to some kind of games (RPG's actually) ;input: hl=num, ...)  | 
				 (added description, hex version and optimized the decimal version. all tested!)  | 
				||
| Line 1: | Line 1: | ||
[[Category:Z80 Routines:Other|DispHL]]  | [[Category:Z80 Routines:Other|DispHL]]  | ||
[[Category:Z80 Routines|DispHL]]  | [[Category:Z80 Routines|DispHL]]  | ||
| − | |||
| − |   <nowiki>;DispHL, especially adapted to   | + | Simple and small routines that print the value of z80 register pair hl.   | 
| + | |||
| + | == Decimal Unsigned Versions ==  | ||
| + | |||
| + | * First a simple and small to show. Mostly for debugging or simple programs.  | ||
| + |   <nowiki>;Number in hl to decimal ASCII  | ||
| + | ;Thanks to z80 Bits  | ||
| + | ;inputs:	hl = number to ASCII  | ||
| + | ;example: hl=300 outputs '00300'  | ||
| + | ;destroys: af, bc, hl, de used  | ||
| + | DispHL:  | ||
| + | 	ld	bc,-10000  | ||
| + | 	call	Num1  | ||
| + | 	ld	bc,-1000  | ||
| + | 	call	Num1  | ||
| + | 	ld	bc,-100  | ||
| + | 	call	Num1  | ||
| + | 	ld	c,-10  | ||
| + | 	call	Num1  | ||
| + | 	ld	c,-1  | ||
| + | Num1:	ld	a,'0'-1  | ||
| + | Num2:	inc	a  | ||
| + | 	add	hl,bc  | ||
| + | 	jr	c,Num2  | ||
| + | 	sbc	hl,bc  | ||
| + | 	call PUTCHAR  | ||
| + | 	ret </nowiki>  | ||
| + | |||
| + |  <nowiki>;Bonus! DispA routine  | ||
| + | ;adaptable for a DispA routine or any other 8-bit register  | ||
| + | DispA:  | ||
| + | 	ld h,0  | ||
| + | 	ld l,a  | ||
| + | 	jp DispHL</nowiki>  | ||
| + | |||
| + | * DispHL especially adapted to games (nifty to RPG)  | ||
| + | |||
| + |  <nowiki>;DispHL for games  | ||
;input: hl=num, d=row,e=col, bc=number of algarisms to skip  | ;input: hl=num, d=row,e=col, bc=number of algarisms to skip  | ||
;number of numbers' characters to display: 5 ; example: 65000  | ;number of numbers' characters to display: 5 ; example: 65000  | ||
;output: hl displayed  | ;output: hl displayed  | ||
| − | + | DispHL_game:  | |
	push bc  | 	push bc  | ||
	ld (CurRow),de  | 	ld (CurRow),de  | ||
| Line 28: | Line 64: | ||
	pop bc  | 	pop bc  | ||
	add hl,bc  | 	add hl,bc  | ||
| − | 	b_call(_PutS)  | + | 	call PUTSTR		;b_call(_PutS)  | 
| − | 	ret  | + | 	ret </nowiki>  | 
| − | + | <!-- It would be good a optimized version but I don't know how to avoid OP1 temp use -->  | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | == Signed Version ==  | + | == Hexadecimal Version ==  | 
| + |  <nowiki>;Display a 16- or 8-bit number in hex.  | ||
| + | DispHLhex:  | ||
| + | ; Input: HL  | ||
| + |    ld  c,h  | ||
| + |    call  OutHex8  | ||
| + |    ld  c,l  | ||
| + | OutHex8:  | ||
| + | ; Input: C  | ||
| + |    ld  a,c  | ||
| + |    rra  | ||
| + |    rra  | ||
| + |    rra  | ||
| + |    rra  | ||
| + |    call  Conv  | ||
| + |    ld  a,c  | ||
| + | Conv:  | ||
| + |    and  $0F  | ||
| + |    add  a,$90  | ||
| + |    daa  | ||
| + |    adc  a,$40  | ||
| + |    daa  | ||
| + |    call PUTCHAR  ;replace by bcall(_PutC) or similar  | ||
| + |    ret  | ||
| + |  </nowiki>  | ||
| + | |||
| + | == Decimal Signed Version ==  | ||
{{stub}}  | {{stub}}  | ||
| − |   <nowiki>;  | + |   <nowiki>;DispHL signed  | 
| − | DispHLsign:</nowiki>  | + | ;  | 
| + | DispHLsign:  | ||
| + | |||
| + |  </nowiki>  | ||
Revision as of 08:07, 28 November 2009
Simple and small routines that print the value of z80 register pair hl. 
Decimal Unsigned Versions
- First a simple and small to show. Mostly for debugging or simple programs.
 
;Number in hl to decimal ASCII ;Thanks to z80 Bits ;inputs: hl = number to ASCII ;example: hl=300 outputs '00300' ;destroys: af, bc, hl, de used DispHL: ld bc,-10000 call Num1 ld bc,-1000 call Num1 ld bc,-100 call Num1 ld c,-10 call Num1 ld c,-1 Num1: ld a,'0'-1 Num2: inc a add hl,bc jr c,Num2 sbc hl,bc call PUTCHAR ret
;Bonus! DispA routine ;adaptable for a DispA routine or any other 8-bit register DispA: ld h,0 ld l,a jp DispHL
- DispHL especially adapted to games (nifty to RPG)
 
;DispHL for games ;input: hl=num, d=row,e=col, bc=number of algarisms to skip ;number of numbers' characters to display: 5 ; example: 65000 ;output: hl displayed DispHL_game: push bc ld (CurRow),de ld de,OP1 push de push de ;save twice... call Num2Dec ex de,hl ld (hl),0 pop hl jr firsttime nozerodisp: ld (hl),' ' ;suppress starting zeros, but you can delete this code if you don't want it inc hl firsttime: ld a,(hl) cp '0' jr z,nozerodisp pop hl pop bc add hl,bc call PUTSTR ;b_call(_PutS) ret
Hexadecimal Version
;Display a 16- or 8-bit number in hex. DispHLhex: ; Input: HL ld c,h call OutHex8 ld c,l OutHex8: ; Input: C ld a,c rra rra rra rra call Conv ld a,c Conv: and $0F add a,$90 daa adc a,$40 daa call PUTCHAR ;replace by bcall(_PutC) or similar ret
Decimal Signed Version
;DispHL signed ; DispHLsign: