Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
76
Task/String-case/Z80-Assembly/string-case.z80
Normal file
76
Task/String-case/Z80-Assembly/string-case.z80
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
ToUpperCase:
|
||||
;INPUT:
|
||||
;HL = BASE ADDRESS OF A NULL-TERMINATED STRING
|
||||
;OVERWRITES THE STRING YOU INPUT WITH THE UPPERCASE VERSION
|
||||
ld bc,&617A ;lower case ascii range
|
||||
loop_toUpperCase:
|
||||
ld a,(hl)
|
||||
or a
|
||||
ret z
|
||||
call CompareRange_Inclusive ;is this a lower case letter?
|
||||
jr c,skipUpperCase ;if not, don't change it!
|
||||
and %11011111 ;change to upper case
|
||||
ld (hl),a ;store back in string
|
||||
skipUpperCase:
|
||||
inc hl
|
||||
jr loop_toUpperCase
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
ToLowerCase:
|
||||
;INPUT:
|
||||
;HL = BASE ADDRESS OF A NULL-TERMINATED STRING
|
||||
;OVERWRITES THE STRING YOU INPUT WITH THE LOWERCASE VERSION
|
||||
ld bc,&415A ;upper case ascii range
|
||||
loop_toLowerCase:
|
||||
ld a,(hl)
|
||||
or a
|
||||
ret z
|
||||
call CompareRange_Inclusive
|
||||
jr c,skipLowerCase
|
||||
or %00100000
|
||||
ld (hl),a
|
||||
skipLowerCase:
|
||||
inc hl
|
||||
jr loop_toLowerCase
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
ToggleCase:
|
||||
;INPUT:
|
||||
;HL = BASE ADDRESS OF A NULL-TERMINATED STRING
|
||||
;INVERTS THE CASE OF ALL ALPHABET CHARACTERS IN THE STRING
|
||||
ld bc,&415A
|
||||
loop_toggleCase:
|
||||
ld a,(hl)
|
||||
or a
|
||||
ret z
|
||||
call CompareRange_Inclusive
|
||||
jr nc,toggle
|
||||
push bc
|
||||
ld bc,&617A
|
||||
call CompareRange_Inclusive
|
||||
pop bc
|
||||
jr c, skipToggleCase
|
||||
toggle:
|
||||
xor %00100000
|
||||
ld (hl),a
|
||||
skipToggleCase:
|
||||
inc hl
|
||||
jr loop_toggleCase
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
CompareRange_Inclusive:
|
||||
;returns CF CLEAR if B <= A <= C, and CF SET otherwise.
|
||||
cp b
|
||||
ret c ;if carry set, A < B thus out of range.
|
||||
push de
|
||||
ld e,a
|
||||
ld a,c
|
||||
ld c,e ;swap A with C
|
||||
|
||||
cp c ;compare C to A. Signs are reversed.
|
||||
;if carry set, "A" < "C" which means original C < original A. Thus out of range.
|
||||
;if carry clear, we are in range.
|
||||
|
||||
ld e,a ;now put A and C back where they belong.
|
||||
ld a,c
|
||||
ld c,e ;none of this affects the flags, so the compare is still valid.
|
||||
pop de
|
||||
ret
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
Loading…
Add table
Add a link
Reference in a new issue