gbdk-2020 | GameBoy Development Kit |
| download: https://git.y1.nz/archives/gbdk.tar.gz | |
| README | Files | Log | Refs | LICENSE |
commit 65e0a1b265cc9728bd49f7e8d63c542512c4710d parent 0f4eea69007556fc9082e27aa37e9bab50375d8c Author: Toxa <untoxa@mail.ru> Date: Wed, 21 Jul 2021 17:16:30 +0300 tab to space, fixed areas and module names Diffstat:
| M | gbdk-lib/libc/asm/gbz80/__sdcc_call_hl.s | 8 | +++++--- |
| M | gbdk-lib/libc/asm/gbz80/_memcpy.s | 116 | ++++++++++++++++++++++++++++++++++++++++--------------------------------------- |
| M | gbdk-lib/libc/asm/gbz80/_memset.s | 92 | ++++++++++++++++++++++++++++++++++++++++--------------------------------------- |
| M | gbdk-lib/libc/asm/gbz80/_strcmp.s | 60 | +++++++++++++++++++++++++++++++----------------------------- |
| M | gbdk-lib/libc/asm/gbz80/_strcpy.s | 42 | ++++++++++++++++++++++-------------------- |
| M | gbdk-lib/libc/asm/gbz80/abs.s | 35 | +++++++++++++++++------------------ |
| M | gbdk-lib/libc/asm/gbz80/atomic_flag_test_and_set.s | 26 | ++++++++++++++------------ |
| M | gbdk-lib/libc/asm/gbz80/crt0_rle.s | 66 | ++++++++++++++++++++++++++++++++++-------------------------------- |
| M | gbdk-lib/libc/asm/gbz80/div.s | 37 | ++++++++++++++++++++----------------- |
| M | gbdk-lib/libc/asm/gbz80/itoa.s | 284 | ++++++++++++++++++++++++++++++++++++++++---------------------------------------- |
| M | gbdk-lib/libc/asm/gbz80/labs.s | 60 | ++++++++++++++++++++++++++++++------------------------------ |
| M | gbdk-lib/libc/asm/gbz80/ltoa.s | 344 | ++++++++++++++++++++++++++++++++++++++++---------------------------------------- |
| M | gbdk-lib/libc/asm/gbz80/mul.s | 14 | ++++++++------ |
| M | gbdk-lib/libc/asm/gbz80/reverse.s | 92 | ++++++++++++++++++++++++++++++++++++++++---------------------------------------- |
| M | gbdk-lib/libc/asm/gbz80/setjmp.s | 132 | ++++++++++++++++++++++++++++++++++++++++--------------------------------------- |
| M | gbdk-lib/libc/asm/gbz80/shift.s | 4 | ++++ |
| M | gbdk-lib/libc/asm/gbz80/strlen.s | 26 | +++++++++++++------------- |
17 files changed, 731 insertions(+), 707 deletions(-)
diff --git a/gbdk-lib/libc/asm/gbz80/__sdcc_call_hl.s b/gbdk-lib/libc/asm/gbz80/__sdcc_call_hl.s @@ -26,11 +26,13 @@ ; might be covered by the GNU General Public License. ;-------------------------------------------------------------------------- - .area _BASE + .module call_hl - .globl ___sdcc_call_hl + .area _BASE + + .globl ___sdcc_call_hl ; The Z80 has the jp (hl) instruction, which is perfect for implementing function pointers. ___sdcc_call_hl: - jp (hl) + jp (hl) diff --git a/gbdk-lib/libc/asm/gbz80/_memcpy.s b/gbdk-lib/libc/asm/gbz80/_memcpy.s @@ -1,69 +1,71 @@ - .area _BASE + .module memcpy + + .area _BASE ; void *memcpy(void *dest, const void *source, int count) ___memcpy:: _memcpy:: - lda hl,7(sp) - ld a,(hl-) - ld d, a - ld a,(hl-) - ld e,a ; de == count - or d - jr z, 6$ + lda hl,7(sp) + ld a,(hl-) + ld d, a + ld a,(hl-) + ld e,a ; de == count + or d + jr z, 6$ - push bc ; preserve bc (smallc convention) + push bc ; preserve bc (smallc convention) - ld a,(hl-) - ld b,a - ld a,(hl-) - ld c,a ; bc == source - ld a,(hl-) - ld l,(hl) - ld h,a ; hl == dest + ld a,(hl-) + ld b,a + ld a,(hl-) + ld c,a ; bc == source + ld a,(hl-) + ld l,(hl) + ld h,a ; hl == dest - srl d - rr e - jr nc,4$ - ld a,(bc) ; copy one byte - ld (hl+),a - inc bc + srl d + rr e + jr nc,4$ + ld a,(bc) ; copy one byte + ld (hl+),a + inc bc 4$: - srl d - rr e - jr nc,5$ - ld a,(bc) ; copy two bytes - ld (hl+),a - inc bc - ld a,(bc) - ld (hl+),a - inc bc -5$: - inc d - inc e - jr 2$ + srl d + rr e + jr nc,5$ + ld a,(bc) ; copy two bytes + ld (hl+),a + inc bc + ld a,(bc) + ld (hl+),a + inc bc +5$: + inc d + inc e + jr 2$ 1$: - ld a,(bc) ; copy four bytes - ld (hl+),a - inc bc - ld a,(bc) - ld (hl+),a - inc bc - ld a,(bc) - ld (hl+),a - inc bc - ld a,(bc) - ld (hl+),a - inc bc + ld a,(bc) ; copy four bytes + ld (hl+),a + inc bc + ld a,(bc) + ld (hl+),a + inc bc + ld a,(bc) + ld (hl+),a + inc bc + ld a,(bc) + ld (hl+),a + inc bc 2$: - dec e - jr nz,1$ - dec d - jr nz,1$ + dec e + jr nz,1$ + dec d + jr nz,1$ 3$: - pop bc ; restore bc + pop bc ; restore bc 6$: - lda hl,2(sp) ; return dest - ld a,(hl+) - ld e,a - ld d,(hl) - ret + lda hl,2(sp) ; return dest + ld a,(hl+) + ld e,a + ld d,(hl) + ret diff --git a/gbdk-lib/libc/asm/gbz80/_memset.s b/gbdk-lib/libc/asm/gbz80/_memset.s @@ -1,50 +1,52 @@ - .area _BASE + .module memset + + .area _BASE ; void *memset (void *s, int c, size_t n) _memset:: - lda hl,7(sp) - ld a,(hl-) - ld d, a - ld a,(hl-) - ld e, a - or d - jr z,6$ - - dec hl - ld a,(hl-) - push af - ld a,(hl-) - ld l,(hl) - ld h,a - pop af - - srl d - rr e - jr nc,4$ - ld (hl+),a -4$: - srl d - rr e - jr nc,5$ - ld (hl+),a - ld (hl+),a -5$: - inc d - inc e - jr 2$ -1$: - ld (hl+),a - ld (hl+),a - ld (hl+),a - ld (hl+),a + lda hl,7(sp) + ld a,(hl-) + ld d, a + ld a,(hl-) + ld e, a + or d + jr z,6$ + + dec hl + ld a,(hl-) + push af + ld a,(hl-) + ld l,(hl) + ld h,a + pop af + + srl d + rr e + jr nc,4$ + ld (hl+),a +4$: + srl d + rr e + jr nc,5$ + ld (hl+),a + ld (hl+),a +5$: + inc d + inc e + jr 2$ +1$: + ld (hl+),a + ld (hl+),a + ld (hl+),a + ld (hl+),a 2$: - dec e - jr nz,1$ - dec d - jr nz,1$ + dec e + jr nz,1$ + dec d + jr nz,1$ 6$: - lda hl,2(sp) - ld a,(hl+) - ld e,a - ld d,(hl) - ret + lda hl,2(sp) + ld a,(hl+) + ld e,a + ld d,(hl) + ret diff --git a/gbdk-lib/libc/asm/gbz80/_strcmp.s b/gbdk-lib/libc/asm/gbz80/_strcmp.s @@ -1,33 +1,35 @@ - .area _BASE + .module strcmp + + .area _BASE ; int strcmp(const char *s1, const char *s2) _strcmp:: - lda hl,2(sp) - ld a,(hl+) - ld e, a - ld a,(hl+) - ld d, a - ld a,(hl+) - ld h,(hl) - ld l,a -1$: - ld a,(de) - sub (hl) ; s1[i]==s2[i]? - jr nz, 2$ ; -> Different - ;; A == 0 - cp (hl) ; s1[i]==s2[i]==0? - - inc de - inc hl - jr nz, 1$ ; ^ Didn't reach a null character. Loop. - - ; Yes. return 0; - ld d, a ; Since a == 0 this is faster than a 16 bit immediate load. - ld e, a - ret + lda hl,2(sp) + ld a,(hl+) + ld e, a + ld a,(hl+) + ld d, a + ld a,(hl+) + ld h,(hl) + ld l,a +1$: + ld a,(de) + sub (hl) ; s1[i]==s2[i]? + jr nz, 2$ ; -> Different + ;; A == 0 + cp (hl) ; s1[i]==s2[i]==0? + + inc de + inc hl + jr nz, 1$ ; ^ Didn't reach a null character. Loop. + + ; Yes. return 0; + ld d, a ; Since a == 0 this is faster than a 16 bit immediate load. + ld e, a + ret 2$: - ld de,#-1 - ret c + ld de,#-1 + ret c - ld de,#1 - ret - + ld de,#1 + ret + diff --git a/gbdk-lib/libc/asm/gbz80/_strcpy.s b/gbdk-lib/libc/asm/gbz80/_strcpy.s @@ -1,24 +1,26 @@ - .area _BASE + .module strcpy + + .area _BASE ; char *strcpy(char *dest, const char *source) _strcpy:: - lda hl,2(sp) - ld a,(hl+) - ld e, a - ld a,(hl+) - ld d, a - ld a,(hl+) - ld h,(hl) - ld l,a + lda hl,2(sp) + ld a,(hl+) + ld e, a + ld a,(hl+) + ld d, a + ld a,(hl+) + ld h,(hl) + ld l,a - push de -1$: - ld a,(hl+) - ld (de),a - inc de - or a,a - jr nz,1$ + push de +1$: + ld a,(hl+) + ld (de),a + inc de + or a,a + jr nz,1$ - pop de - ret - - + pop de + ret + + diff --git a/gbdk-lib/libc/asm/gbz80/abs.s b/gbdk-lib/libc/asm/gbz80/abs.s @@ -1,19 +1,19 @@ + .module abs + + .area _BASE + ; int abs(int) _abs:: - lda HL, 3(SP) ; 3 - ld A,(HL-) ; 2 Load high byte. - ld D,A ; 1 - ld E,(HL) ; 2 Load low byte - add A,A ; 1 Sign check. - ret nc ; 5/2 Return if positive. - xor A ; 1 A=0. - sub E ; 1 Calculate 0-(low byte). - ld E,A ; 1 - ld A,#0 ; 2 A=0. Can't use xor A because carry flag needs to be preserved. - sbc D ; 1 Calculate 0-(high byte)-carry. - ld D,A ; 1 - ret ; 4 - -; Cycle count -; Pos: 14 -; Neg: 22 - + lda HL, 3(SP) ; 3 + ld A,(HL-) ; 2 Load high byte. + ld D,A ; 1 + ld E,(HL) ; 2 Load low byte + add A,A ; 1 Sign check. + ret nc ; 5/2 Return if positive. + xor A ; 1 A=0. + sub E ; 1 Calculate 0-(low byte). + ld E,A ; 1 + ld A,#0 ; 2 A=0. Can't use xor A because carry flag needs to be preserved. + sbc D ; 1 Calculate 0-(high byte)-carry. + ld D,A ; 1 + ret ; 4 diff --git a/gbdk-lib/libc/asm/gbz80/atomic_flag_test_and_set.s b/gbdk-lib/libc/asm/gbz80/atomic_flag_test_and_set.s @@ -26,19 +26,21 @@ ; might be covered by the GNU General Public License. ;-------------------------------------------------------------------------- - .area _CODE + .module atomic - .globl _atomic_flag_test_and_set + .area _BASE + + .globl _atomic_flag_test_and_set _atomic_flag_test_and_set: - pop de - pop hl - push hl - push de - xor a, a - srl (hl) - ccf - rla - ld e, a - ret + pop de + pop hl + push hl + push de + xor a, a + srl (hl) + ccf + rla + ld e, a + ret diff --git a/gbdk-lib/libc/asm/gbz80/crt0_rle.s b/gbdk-lib/libc/asm/gbz80/crt0_rle.s @@ -27,41 +27,43 @@ ; might be covered by the GNU General Public License. ;-------------------------------------------------------------------------- - .area _HOME + .module rledecompress - ;; Special RLE decoder used for initing global data - ;; input: DE - destination address + .area _BASE + + ;; Special RLE decoder used for initing global data + ;; input: DE - destination address __initrleblock:: - ;; Pop the return address - pop hl + ;; Pop the return address + pop hl 1$: - ;; Fetch the run - ld c, (hl) - inc hl - ;; Negative means a run - bit 7, c - jr Z, 2$ - ;; Expanding a run - ld a, (hl+) + ;; Fetch the run + ld c, (hl) + inc hl + ;; Negative means a run + bit 7, c + jr Z, 2$ + ;; Expanding a run + ld a, (hl+) 3$: - ld (de), a - inc de - inc c - jr NZ, 3$ - jr 1$ + ld (de), a + inc de + inc c + jr NZ, 3$ + jr 1$ 2$: - ;; Zero means end of a block - inc c - dec c - jr Z, 4$ - ;; Expanding a block + ;; Zero means end of a block + inc c + dec c + jr Z, 4$ + ;; Expanding a block 5$: - ld a, (hl+) - ld (de), a - inc de - dec c - jr NZ, 5$ - jr 1$ + ld a, (hl+) + ld (de), a + inc de + dec c + jr NZ, 5$ + jr 1$ 4$: - ;; Return back - jp (hl) - + ;; Return back + jp (hl) + diff --git a/gbdk-lib/libc/asm/gbz80/div.s b/gbdk-lib/libc/asm/gbz80/div.s @@ -27,20 +27,23 @@ ;-------------------------------------------------------------------------- ;; Originally from GBDK by Pascal Felber. - .area _CODE - -.globl __divsuchar -.globl __modsuchar -.globl __divuschar -.globl __moduschar -.globl __divschar -.globl __modschar -.globl __divsint -.globl __modsint -.globl __divuchar -.globl __moduchar -.globl __divuint -.globl __moduint + + .module div + + .area _BASE + +.globl __divsuchar +.globl __modsuchar +.globl __divuschar +.globl __moduschar +.globl __divschar +.globl __modschar +.globl __divsint +.globl __modsint +.globl __divuchar +.globl __moduchar +.globl __divuint +.globl __moduint __divsuchar: ldhl sp,#2+1 @@ -52,10 +55,10 @@ __divsuchar: call signexte - ld e,c - ld d,b + ld e,c + ld d,b - ret + ret __modsuchar: ldhl sp,#2+1 diff --git a/gbdk-lib/libc/asm/gbz80/itoa.s b/gbdk-lib/libc/asm/gbz80/itoa.s @@ -26,165 +26,165 @@ ; might be covered by the GNU General Public License. ;-------------------------------------------------------------------------- - .module itoa + .module itoa - .area _CODE + .area _BASE _utoa:: - push BC - lda HL, 4(SP) - ld A, (HL+) - ld E, A - ld A, (HL+) - ld D, A ; DE: uint - ld A, (HL+) - ld C, A - ld B, (HL) ; BC: dest - call .utoa - pop BC - ret + push BC + lda HL, 4(SP) + ld A, (HL+) + ld E, A + ld A, (HL+) + ld D, A ; DE: uint + ld A, (HL+) + ld C, A + ld B, (HL) ; BC: dest + call .utoa + pop BC + ret _itoa:: - push BC - lda HL, 4(SP) - ld A, (HL+) - ld E, A - ld A, (HL+) - ld D, A ; DE: int - ld A, (HL+) - ld C, A - ld B, (HL) ; BC: dest - call .itoa - pop BC - ret - -.itoa:: ; convert int into ascii - ld A, D - add A, A - jr NC, .utoa + push BC + lda HL, 4(SP) + ld A, (HL+) + ld E, A + ld A, (HL+) + ld D, A ; DE: int + ld A, (HL+) + ld C, A + ld B, (HL) ; BC: dest + call .itoa + pop BC + ret + +.itoa:: ; convert int into ascii + ld A, D + add A, A + jr NC, .utoa - rra ; DE = abs(DE) - cpl - ld D, A - ld A, E - cpl - ld E, A - inc DE - - ld A, #'-' - ld (BC), A - inc BC - - call .utoa - dec DE - ret + rra ; DE = abs(DE) + cpl + ld D, A + ld A, E + cpl + ld E, A + inc DE + + ld A, #'-' + ld (BC), A + inc BC + + call .utoa + dec DE + ret -.utoa:: ; convert unsigned int into ascii - add SP, #-3 - lda HL, 2(SP) - - xor A ; clear value - ld (HL-), A - ld (HL-), A - ld (HL), A +.utoa:: ; convert unsigned int into ascii + add SP, #-3 + lda HL, 2(SP) + + xor A ; clear value + ld (HL-), A + ld (HL-), A + ld (HL), A - push BC - ld B, #8 + push BC + ld B, #8 1$: - sla E - rl D - - ld A, (HL) - adc A - daa - ld (HL+), A - ld A, (HL) - adc A - daa - ld (HL+), A - ld A, (HL) - adc A - daa - ld (HL-), A - dec HL + sla E + rl D + + ld A, (HL) + adc A + daa + ld (HL+), A + ld A, (HL) + adc A + daa + ld (HL+), A + ld A, (HL) + adc A + daa + ld (HL-), A + dec HL - sla E - rl D - - ld A, (HL) - adc A - daa - ld (HL+), A - ld A, (HL) - adc A - daa - ld (HL+), A - ld A, (HL) - adc A - daa - ld (HL-), A - dec HL + sla E + rl D + + ld A, (HL) + adc A + daa + ld (HL+), A + ld A, (HL) + adc A + daa + ld (HL+), A + ld A, (HL) + adc A + daa + ld (HL-), A + dec HL - dec B - jr NZ, 1$ + dec B + jr NZ, 1$ - pop BC - push BC + pop BC + push BC - ld DE, #'0' - lda HL, 4(SP) - - ld A, (HL-) - and #0x0f - or A - jr Z, 3$ - add A, E - ld D, #1 ; make D nonzero - ld (BC), A - inc BC + ld DE, #'0' + lda HL, 4(SP) + + ld A, (HL-) + and #0x0f + or A + jr Z, 3$ + add A, E + ld D, #1 ; make D nonzero + ld (BC), A + inc BC 3$: - ld A, (HL) - swap A - and #0x0f - add D - jr Z, 4$ - sub D - add A, E - ld D, #1 ; make D nonzero - ld (BC), A - inc BC + ld A, (HL) + swap A + and #0x0f + add D + jr Z, 4$ + sub D + add A, E + ld D, #1 ; make D nonzero + ld (BC), A + inc BC 4$: - ld A, (HL-) - and #0x0f - add D - jr Z, 5$ - sub D - add A, E - ld D, #1 ; make D nonzero - ld (BC), A - inc BC + ld A, (HL-) + and #0x0f + add D + jr Z, 5$ + sub D + add A, E + ld D, #1 ; make D nonzero + ld (BC), A + inc BC 5$: - ld A, (HL) - swap A - and #0x0f - add D - jr Z, 6$ - sub D - add A, E - ld (BC), A - inc BC + ld A, (HL) + swap A + and #0x0f + add D + jr Z, 6$ + sub D + add A, E + ld (BC), A + inc BC 6$: - ld A, (HL) - and #0x0f - add A, E - ld (BC), A - inc BC - - xor A - ld (BC), A ; write trailing #0 + ld A, (HL) + and #0x0f + add A, E + ld (BC), A + inc BC + + xor A + ld (BC), A ; write trailing #0 - pop DE + pop DE - add sp, #3 + add sp, #3 - ret + ret diff --git a/gbdk-lib/libc/asm/gbz80/labs.s b/gbdk-lib/libc/asm/gbz80/labs.s @@ -26,45 +26,45 @@ ; might be covered by the GNU General Public License. ;-------------------------------------------------------------------------- - .module labs + .module labs - .area _CODE + .area _BASE ;long labs(long num) _labs:: - lda HL, 2(SP) - ld A, (HL+) - ld E, A - ld A, (HL+) - ld D, A - ld A, (HL+) - ld H, (HL) - ld L, A ; DEHL = num + lda HL, 2(SP) + ld A, (HL+) + ld E, A + ld A, (HL+) + ld D, A + ld A, (HL+) + ld H, (HL) + ld L, A ; DEHL = num .labs:: - ld A, H - add A, A - ret NC + ld A, H + add A, A + ret NC 1$: - ld A, E - cpl - add #1 - ld E, A + ld A, E + cpl + add #1 + ld E, A - ld A, D - cpl - adc #0 - ld D, A + ld A, D + cpl + adc #0 + ld D, A - ld A, L - cpl - adc #0 - ld L, A + ld A, L + cpl + adc #0 + ld L, A - ld A, H - cpl - adc #0 - ld H, A + ld A, H + cpl + adc #0 + ld H, A - ret + ret diff --git a/gbdk-lib/libc/asm/gbz80/ltoa.s b/gbdk-lib/libc/asm/gbz80/ltoa.s @@ -26,197 +26,197 @@ ; might be covered by the GNU General Public License. ;-------------------------------------------------------------------------- - .module ltoa + .module ltoa - .area _CODE + .area _BASE _ultoa:: - push BC - - lda HL, 8(SP) - ld A, (HL+) - ld C, A - ld B, (HL) ; BC: dest - - lda HL, 4(SP) - ld E, L - ld D, H ; DE : ulong * - - call .ultoa - - pop BC - ret + push BC + + lda HL, 8(SP) + ld A, (HL+) + ld C, A + ld B, (HL) ; BC: dest + + lda HL, 4(SP) + ld E, L + ld D, H ; DE : ulong * + + call .ultoa + + pop BC + ret _ltoa:: - push BC - - lda HL, 8(SP) - ld A, (HL+) - ld C, A - ld B, (HL) ; BC: dest + push BC + + lda HL, 8(SP) + ld A, (HL+) + ld C, A + ld B, (HL) ; BC: dest - lda HL, 4(SP) - ld E, L - ld D, H ; DE : ulong * + lda HL, 4(SP) + ld E, L + ld D, H ; DE : ulong * - call .ltoa + call .ltoa - pop BC - ret + pop BC + ret .ltoa:: - push DE - - ld A, #3 - add E - ld E, A - adc D - sub E - ld D, A - - ld A, (DE) - add A, A - pop DE - jr NC, .ultoa + push DE + + ld A, #3 + add E + ld E, A + adc D + sub E + ld D, A + + ld A, (DE) + add A, A + pop DE + jr NC, .ultoa 1$: - push DE - ld A, (DE) - cpl - add #1 - ld (DE), A - inc DE - - ld A, (DE) - cpl - adc #0 - ld (DE), A - inc DE - - ld A, (DE) - cpl - adc #0 - ld (DE), A - inc DE - - ld A, (DE) - cpl - adc #0 - ld (DE), A - - pop DE - - ld A, #'-' - ld (BC), A - inc BC - - call .ultoa - dec DE - ret - -.ultoa:: ; convert unsigned int into ascii - add SP, #-5 - lda HL, 4(SP) - - xor A ; clear value - ld (HL-), A - ld (HL-), A - ld (HL-), A - ld (HL-), A - ld (HL), A - - push BC - ld B, #32 + push DE + ld A, (DE) + cpl + add #1 + ld (DE), A + inc DE + + ld A, (DE) + cpl + adc #0 + ld (DE), A + inc DE + + ld A, (DE) + cpl + adc #0 + ld (DE), A + inc DE + + ld A, (DE) + cpl + adc #0 + ld (DE), A + + pop DE + + ld A, #'-' + ld (BC), A + inc BC + + call .ultoa + dec DE + ret + +.ultoa:: ; convert unsigned int into ascii + add SP, #-5 + lda HL, 4(SP) + + xor A ; clear value + ld (HL-), A + ld (HL-), A + ld (HL-), A + ld (HL-), A + ld (HL), A + + push BC + ld B, #32 1$: - ld H, D - ld L, E - - sla (HL) - inc HL - rl (HL) - inc HL - rl (HL) - inc HL - rl (HL) - - rra - lda HL, 2(SP) - rla - - ld A, (HL) - adc A - daa - ld (HL+), A ; #0 - ld A, (HL) - adc A - daa - ld (HL+), A ; #1 - ld A, (HL) - adc A - daa - ld (HL+), A ; #2 - ld A, (HL) - adc A - daa - ld (HL+), A ; #3 - ld A, (HL) - adc A - daa - ld (HL), A ; #4 - - dec B - jr NZ, 1$ - - pop BC - push BC - - ld DE, #((5 << 8) | '0') - lda HL, 6(SP) - - scf - ccf + ld H, D + ld L, E + + sla (HL) + inc HL + rl (HL) + inc HL + rl (HL) + inc HL + rl (HL) + + rra + lda HL, 2(SP) + rla + + ld A, (HL) + adc A + daa + ld (HL+), A ; #0 + ld A, (HL) + adc A + daa + ld (HL+), A ; #1 + ld A, (HL) + adc A + daa + ld (HL+), A ; #2 + ld A, (HL) + adc A + daa + ld (HL+), A ; #3 + ld A, (HL) + adc A + daa + ld (HL), A ; #4 + + dec B + jr NZ, 1$ + + pop BC + push BC + + ld DE, #((5 << 8) | '0') + lda HL, 6(SP) + + scf + ccf 3$: - rl D - ld A, (HL) - swap A - and #0x0f - bit 0, D - jr NZ, 6$ - or A - jr Z, 4$ + rl D + ld A, (HL) + swap A + and #0x0f + bit 0, D + jr NZ, 6$ + or A + jr Z, 4$ 6$: - add A, E - ld (BC), A - set 0, D - inc BC + add A, E + ld (BC), A + set 0, D + inc BC 4$: - ld A, (HL-) - and #0x0f - bit 0, D - jr NZ, 7$ - or A - jr Z, 5$ -7$: - add A, E - ld (BC), A - set 0, D - inc BC + ld A, (HL-) + and #0x0f + bit 0, D + jr NZ, 7$ + or A + jr Z, 5$ +7$: + add A, E + ld (BC), A + set 0, D + inc BC 5$: - rr D - dec D - jr NZ, 3$ - jr C, 8$ - - ld A, #'0' ; n == 0 - ld (BC), A - inc BC + rr D + dec D + jr NZ, 3$ + jr C, 8$ + + ld A, #'0' ; n == 0 + ld (BC), A + inc BC 8$: - xor A - ld (BC), A ; write trailing #0 + xor A + ld (BC), A ; write trailing #0 - pop DE + pop DE - add sp, #5 + add sp, #5 - ret + ret diff --git a/gbdk-lib/libc/asm/gbz80/mul.s b/gbdk-lib/libc/asm/gbz80/mul.s @@ -28,13 +28,15 @@ ;; Originally from GBDK by Pascal Felber. - .area _CODE + .module mul -.globl __mulsuchar -.globl __muluschar -.globl __mulschar -.globl __muluchar -.globl __mulint + .area _BASE + +.globl __mulsuchar +.globl __muluschar +.globl __mulschar +.globl __muluchar +.globl __mulint ; operands have different sign diff --git a/gbdk-lib/libc/asm/gbz80/reverse.s b/gbdk-lib/libc/asm/gbz80/reverse.s @@ -26,59 +26,59 @@ ; might be covered by the GNU General Public License. ;-------------------------------------------------------------------------- - .module reverse + .module reverse - .area _BASE + .area _BASE _reverse:: - lda HL, 2(SP) - ld A, (HL+) - ld H, (HL) - ld L, A ; HL: s - - push BC - ld B, H - ld C, L ; BC: s - - ld DE, #0 -1$: ld A, (HL+) - or A - jr Z, 2$ - inc DE - jr 1$ + lda HL, 2(SP) + ld A, (HL+) + ld H, (HL) + ld L, A ; HL: s + + push BC + ld B, H + ld C, L ; BC: s + + ld DE, #0 +1$: ld A, (HL+) + or A + jr Z, 2$ + inc DE + jr 1$ 2$: - srl D - rr E - - ld A, E - or D - jr Z, 3$ + srl D + rr E + + ld A, E + or D + jr Z, 3$ - dec HL - dec HL + dec HL + dec HL - inc D - inc E - jr 5$ + inc D + inc E + jr 5$ 4$: - ld A, (HL) - push AF - ld A, (BC) - ld (HL-), A - pop AF - ld (BC), A - inc BC + ld A, (HL) + push AF + ld A, (BC) + ld (HL-), A + pop AF + ld (BC), A + inc BC 5$: - dec E - jr NZ, 4$ - dec D - jr NZ, 4$ - + dec E + jr NZ, 4$ + dec D + jr NZ, 4$ + 3$: - pop BC - lda HL, 2(SP) - ld E, (HL) - inc HL - ld D, (HL) - ret + pop BC + lda HL, 2(SP) + ld E, (HL) + inc HL + ld D, (HL) + ret diff --git a/gbdk-lib/libc/asm/gbz80/setjmp.s b/gbdk-lib/libc/asm/gbz80/setjmp.s @@ -26,78 +26,80 @@ ; might be covered by the GNU General Public License. ;-------------------------------------------------------------------------- - .area _CODE + .module longjmp - .globl ___setjmp + .area _BASE + + .globl ___setjmp ___setjmp: - pop bc - pop de - push de - push bc - - ; Store stack pointer. - ldhl sp, #0 - push de - push hl - pop de - pop hl - ld (hl), e - inc hl - ld (hl), d - inc hl - - ; Store return address. - ld (hl), c - inc hl - ld (hl), b - - ; Return 0. - xor a, a - ld e, a - ld d, a - ret + pop bc + pop de + push de + push bc + + ; Store stack pointer. + ldhl sp, #0 + push de + push hl + pop de + pop hl + ld (hl), e + inc hl + ld (hl), d + inc hl + + ; Store return address. + ld (hl), c + inc hl + ld (hl), b + + ; Return 0. + xor a, a + ld e, a + ld d, a + ret .globl _longjmp _longjmp: - pop af - pop hl - pop de - - ; Ensure that return value is non-zero. - ld a, e - or a, d - jr NZ, 0001$ - inc de + pop af + pop hl + pop de + + ; Ensure that return value is non-zero. + ld a, e + or a, d + jr NZ, 0001$ + inc de 0001$: - ; Get stack pointer. - ld c, (hl) - inc hl - ld b, (hl) - inc hl - - ; Adjust stack pointer. - push hl - push bc - pop hl - pop bc - ld sp, hl - push bc - pop hl - - ; Get return address. - ld c, (hl) - inc hl - ld b, (hl) - - ; Set return address. - pop af - push bc - - ; Return value is in de. - - ; Jump. - ret + ; Get stack pointer. + ld c, (hl) + inc hl + ld b, (hl) + inc hl + + ; Adjust stack pointer. + push hl + push bc + pop hl + pop bc + ld sp, hl + push bc + pop hl + + ; Get return address. + ld c, (hl) + inc hl + ld b, (hl) + + ; Set return address. + pop af + push bc + + ; Return value is in de. + + ; Jump. + ret diff --git a/gbdk-lib/libc/asm/gbz80/shift.s b/gbdk-lib/libc/asm/gbz80/shift.s @@ -1,3 +1,7 @@ + .module shift + + .area _BASE + ;; __rrulong_rrx_s:: ld hl,#2 diff --git a/gbdk-lib/libc/asm/gbz80/strlen.s b/gbdk-lib/libc/asm/gbz80/strlen.s @@ -26,19 +26,19 @@ ; might be covered by the GNU General Public License. ;-------------------------------------------------------------------------- - .module strlen + .module strlen - .area _BASE + .area _BASE _strlen:: - lda HL, 2(SP) - ld A, (HL+) - ld H, (HL) - ld L, A -.strlen:: - ld DE, #0 -1$: ld A, (HL+) - or A - ret Z - inc DE - jr 1$ + lda HL, 2(SP) + ld A, (HL+) + ld H, (HL) + ld L, A +.strlen:: + ld DE, #0 +1$: ld A, (HL+) + or A + ret Z + inc DE + jr 1$
This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.