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, ...) |
(optimized routine) |
||
| (4 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
| + | [[Category:Z80 Routines:Display|DispHL]] | ||
[[Category:Z80 Routines:Other|DispHL]] | [[Category:Z80 Routines:Other|DispHL]] | ||
[[Category:Z80 Routines|DispHL]] | [[Category:Z80 Routines|DispHL]] | ||
| − | |||
| − | <nowiki>; | + | 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: | DispHL: | ||
| − | + | ld bc,-10000 | |
| − | + | call Num1 | |
| − | ld | + | ld bc,-1000 |
| − | + | call Num1 | |
| − | + | ld bc,-100 | |
| − | call | + | call Num1 |
| − | + | ld c,-10 | |
| − | ld | + | call Num1 |
| − | + | ld c,-1 | |
| − | + | Num1: ld a,'0'-1 | |
| − | + | Num2: inc a | |
| − | ld | + | add hl,bc |
| − | + | jr c,Num2 | |
| − | + | sbc hl,bc | |
| − | + | call PUTCHAR | |
| − | + | ret </nowiki> | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | ret | + | |
| − | ; | + | <nowiki>;Bonus! DispA routine |
| + | ;adaptable for a DispA routine or any other 8-bit register | ||
DispA: | DispA: | ||
ld h,0 | ld h,0 | ||
ld l,a | ld l,a | ||
| − | + | jp DispHL</nowiki> | |
| − | + | ||
| − | == Signed Version == | + | * DispHL especially adapted to games (nifty to RPG) |
| + | |||
| + | <nowiki>;DispHL for games | ||
| + | ;input: hl=num, d=row,e=col, c=number of algarisms to skip | ||
| + | ;number of numbers' characters to display: 5 ; example: 65000 | ||
| + | ;output: hl displayed, with algarisms skiped and spaces for initial zeros | ||
| + | DispHL_games: | ||
| + | inc c | ||
| + | ld b,1 ;skip 0 flag | ||
| + | ld (CurRow),de | ||
| + | ;Number in hl to decimal ASCII | ||
| + | ;Thanks to z80 Bits | ||
| + | ;inputs: hl = number to ASCII | ||
| + | ;example: hl=300 outputs ' 300' | ||
| + | ;destroys: af, hl, de used | ||
| + | ld de,-10000 | ||
| + | call Num1 | ||
| + | ld de,-1000 | ||
| + | call Num1 | ||
| + | ld de,-100 | ||
| + | call Num1 | ||
| + | ld e,-10 | ||
| + | call Num1 | ||
| + | ld e,-1 | ||
| + | Num1: | ||
| + | ld a,'0'-1 | ||
| + | Num2: inc a | ||
| + | add hl,de | ||
| + | jr c,Num2 | ||
| + | sbc hl,de | ||
| + | dec c ;c is skipping | ||
| + | jr nz,skipnum | ||
| + | inc c | ||
| + | djnz notcharnumzero | ||
| + | cp '0' | ||
| + | jr nz,notcharnumzero | ||
| + | leadingzero: | ||
| + | inc b | ||
| + | skipnum: | ||
| + | ld a,' ' | ||
| + | notcharnumzero: | ||
| + | push bc | ||
| + | call PUTCHAR ;bcall(_PutC) works, not sure if it preserves bc | ||
| + | pop bc | ||
| + | ret</nowiki> | ||
| + | |||
| + | == 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 |
| − | + | ; | |
| + | DispHLdecsigned: | ||
| + | |||
| + | |||
| + | ret</nowiki> | ||
Latest revision as of 05:56, 21 April 2010
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, c=number of algarisms to skip ;number of numbers' characters to display: 5 ; example: 65000 ;output: hl displayed, with algarisms skiped and spaces for initial zeros DispHL_games: inc c ld b,1 ;skip 0 flag ld (CurRow),de ;Number in hl to decimal ASCII ;Thanks to z80 Bits ;inputs: hl = number to ASCII ;example: hl=300 outputs ' 300' ;destroys: af, hl, de used ld de,-10000 call Num1 ld de,-1000 call Num1 ld de,-100 call Num1 ld e,-10 call Num1 ld e,-1 Num1: ld a,'0'-1 Num2: inc a add hl,de jr c,Num2 sbc hl,de dec c ;c is skipping jr nz,skipnum inc c djnz notcharnumzero cp '0' jr nz,notcharnumzero leadingzero: inc b skipnum: ld a,' ' notcharnumzero: push bc call PUTCHAR ;bcall(_PutC) works, not sure if it preserves bc pop bc 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 ; DispHLdecsigned: ret