c71e249a4e
First substantive commit: the entire Sprinter C compiler tree on top of
the bare README+gitignore initial commit.
What's in here:
bin/sprinter-cc — driver script invoking SDCC + linker + mkexe
libc/ — Sprinter-specific libc layer over ESTEX/BIOS
(conio, gfx, io, mem, stdio + headers)
runtime/ — crt0 variants (default/small/banked/minimal)
+ heap + bank trampolines
toolchain/ — mkexe (SprintEXE packer, C + tests)
examples/ — 30 demo programs (gfx, file I/O, env, time, …)
lib/Makefile — builds the libc archive (sprinter.lib)
docs/ — converted Sprinter manuals + asm reference samples
third_party/ — solid-c reference compiler dump + sdcc setup script
release_docs/ — packaging / release notes
gitignore overhaul:
• Drop dangerous blanket patterns: *.asm (would hide docs/samples/*.asm)
and *.exe (case-insensitive match was hiding third_party/solid-c/*.EXE
on macOS APFS). Replaced with examples/*/*.{asm,exe,…} and lib/*.lib.
• Restore tracking of toolchain/mkexe/tests/{one,big}.bin — those are
INPUT fixtures, not build outputs.
• Collapse the duplicated SDCC/C/Sdcc sections into one section per
concern (build outputs / vendored / OS-junk).
• Add .sprinter-cc-*/, build/ (catches lib/build/ too), .claude/.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1486 lines
20 KiB
NASM
1486 lines
20 KiB
NASM
; ‚室ï騥 äãªæ¨¨:
|
||
;
|
||
; rand
|
||
; srand
|
||
; div
|
||
; atoi
|
||
; strtol
|
||
; qsort
|
||
; bsearch
|
||
; ?lauhl
|
||
; ?sauhl
|
||
; ?mulhd
|
||
; ?mulab
|
||
; ?dvnhd
|
||
; min
|
||
; max
|
||
; abs
|
||
; ?abshl
|
||
; ?neghl
|
||
; ?nothl
|
||
; ?dvihd
|
||
; ?dvbab
|
||
; ?slhb
|
||
; ?slab
|
||
; ?srnhb
|
||
; ?srihb
|
||
; ?srab
|
||
; ?cpshd
|
||
; setjmp
|
||
; longjmp
|
||
; hex8
|
||
; hex16
|
||
; hex32
|
||
; dec8
|
||
; dec16
|
||
; dec32
|
||
;
|
||
|
||
|
||
|
||
|
||
|
||
MODULE rand
|
||
;
|
||
; "stdlib.h"
|
||
; ”ãªæ¨ï srand ãáâ ¢«¨¢ ¥â ç «ìãî â®çªã ¤«ï £¥¥à 樨
|
||
; ¬®¦¥á⢠¯á¥¢¤®á«ãç ©ëå æ¥«ëå. ‚ ª ç¥á⢥ à£ã¬¥â seed
|
||
; ¤«ï ¯¥à¥ãáâ ®¢ª¨ £¥¥à â®à ¨á¯®«ì§ã¥âáï 1. ‹î¡®¥ ¤à㣮¥
|
||
; § 票¥ seed ãáâ ¢«¨¢ ¥â £¥¥à â®à ¢ ç «ìãî á«ãç ©ãî
|
||
; â®çªã.
|
||
; ‚®§¢à é ¥¬®£® § ç¥¨ï ¥â.
|
||
;
|
||
; void srand(seed)
|
||
;
|
||
srand_::
|
||
ld (seed+1),hl
|
||
ret
|
||
|
||
;
|
||
; "stdlib.h"
|
||
; ”ãªæ¨ï ¢®§¢à é ¥â ¯á¥¢¤®á«ãç ©®¥ 楫®¥ ¢ ¨â¥à¢ «¥ 0..65535.
|
||
; �¥à¥¤ ¢ë§®¢®¬ rand, ¬®¦¥â ¡ëâì ¢ë§¢ äãªæ¨ï srand ¤«ï ãáâ -
|
||
; ®¢ª¨ ç «ì®© á«ãç ©®© â®çª¨.
|
||
; ”ãªæ¨ï ¢®§¢à é ¥â ¯á¥¢¤®á«ãç ©®¥ ç¨á«®.
|
||
;
|
||
; in: none
|
||
; out: hl=pseudo-random number, period 0..65535
|
||
;
|
||
; int rand()
|
||
;
|
||
rand_::
|
||
seed: ld de,0 ; seed is usually 0
|
||
ld a,d
|
||
ld h,e
|
||
ld l,253
|
||
or a
|
||
sbc hl,de
|
||
sbc a,0
|
||
sbc hl,de
|
||
ld d,0
|
||
sbc a,d
|
||
ld e,a
|
||
sbc hl,de
|
||
jr nc,rnd1
|
||
inc hl
|
||
rnd1: ld (seed+1),hl
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE div
|
||
;
|
||
; "stdlib.h"
|
||
; ”ãªæ¨ï ¤¥«¨â num1 num2, ¢®§¢à é ï ç á⮥ ¨ ®áâ ⮪.
|
||
; ‚®§¢à é ¥â áâàãªâãàã ⨯ div_t, ®¯à¥¤¥«¥ãî ¢ "stdlib.h".
|
||
;
|
||
; struct divt *div(uint num1, uint num2)
|
||
;
|
||
div_::
|
||
call ?dvihd##
|
||
ld (quot),hl ; ç á⮥
|
||
ld (rem),de ; ®áâ ⮪
|
||
ld hl,quot ; ¢¥àãâì ¤à¥á áâàãªâãàë
|
||
ret
|
||
|
||
quot: dw 0 ; ç á⮥
|
||
rem: dw 0 ; ®áâ ⮪
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE atoi
|
||
;
|
||
; "stdlib.h"
|
||
; ”ãªæ¨ï ¯à¥®¡à §ã¥â ᨬ¢®«ìãî áâபã string ¢ 楫®¥ § 票¥.
|
||
; ˆá室 ï áâப string ¯à¥¤áâ ¢«ï¥â ᮡ®© ¯®á«¥¤®¢ ⥫ì®áâì
|
||
; ᨬ¢®«®¢, ª®â®àë¥ ¬®£ãâ ¡ëâì ¨â¥à¯à¥â¨à®¢ ë ª ª ç¨á«®¢®¥
|
||
; § 票¥ ®¯à¥¤¥«¥®£® ⨯ . ”ãªæ¨ï ¯à¥ªà é ¥â ç⥨¥ ¨á室®©
|
||
; áâப¨, ª ª ⮫쪮 ¯®ï¢¨âáï ¯¥à¢ë© ᨬ¢®«, ª®â®àë© ¥ ¬®¦¥â ¡ëâì
|
||
; ¢®á¯à¨ïâ ª ª ç áâì ç¨á« (¨¬ ¬®¦¥â ¡ëâì ã«¥¢®© ᨬ¢®«, § ¢¥à-
|
||
; è î騩 áâபã).
|
||
; ”ãªæ¨ï ¢®§¢à é ¥â § 票¥ int ⨯ .
|
||
; ‚®§¢à é ¥¬®¥ § 票¥ à ¢® 0, ¥á«¨ ¢å®¤ ¥ ¬®¦¥â ¡ëâì ¯à¥®¡à -
|
||
; §®¢ ¢ § 票¥ ¤ ®£® ⨯ .
|
||
; ‚ á«ãç ¥ ¯¥à¥¯®«¥¨ï, ¢®§¢à é ¥¬®¥ § 票¥ ¥ ®¯à¥¤¥«¥®.
|
||
;
|
||
; int atoi(*string)
|
||
;
|
||
atoi_::
|
||
ex de,hl ; de = ¤à¥á string
|
||
xor a
|
||
ld (@3+1),a
|
||
ld h,a
|
||
ld l,a
|
||
ld a,(de)
|
||
cp "-"
|
||
jr z,@0
|
||
cp "+"
|
||
jr z,@1
|
||
jr @2
|
||
;
|
||
;@0: ld a,1
|
||
@0: ld (@3+1),a
|
||
@1: inc de
|
||
@2: ld a,(de) ; ⥪. ¤à¥á string
|
||
cp "0"
|
||
jr c,@3
|
||
ld a,(de)
|
||
cp "9"+1
|
||
jr nc,@3
|
||
add hl,hl
|
||
ld c,l
|
||
ld b,h
|
||
add hl,hl
|
||
add hl,hl
|
||
add hl,bc
|
||
inc de
|
||
sub "0"
|
||
ld c,a
|
||
ld b,0
|
||
add hl,bc
|
||
jp @2
|
||
;
|
||
@3: ld a,0
|
||
or a
|
||
ret z
|
||
xor a
|
||
sub l
|
||
ld l,a
|
||
ld a,0
|
||
sbc a,h
|
||
ld h,a
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE strtol
|
||
;
|
||
; "stdlib.h"
|
||
;
|
||
; int strtol(char *s, char **eptr, int base)
|
||
;
|
||
; char *s 㪠§ ⥫ì áâபã
|
||
; char **eptr 㪠§ â¥«ì ª®¥æ ¯à®á¬®âà
|
||
; int base ¨á¯®«ì§ã¥¬®¥ ®á®¢ ¨¥ ç¨á«
|
||
;
|
||
; ”ãªæ¨ï ¯à¥®¡à §ã¥â ᨬ¢®«ìãî áâபã s ¢ long-§ 票¥, íª¢¨¢ «¥â®¥ ç¨á«ã
|
||
; á § ¤ ë¬ base ®á®¢ ¨¥¬. ”ãªæ¨ï ¯à¥ªà é ¥â ç⥨¥ áâப¨, ª ª ⮫쪮
|
||
; ¢áâà¥â¨âáï ᨬ¢®«, ª®â®àë© ¥ ¬®¦¥â ¡ëâì ç áâìî ç¨á« - íâ® ¬®¦¥â ¡ëâì ã«¥-
|
||
; ¢®© ᨬ¢®« '\0' ¢ ª®æ¥ áâப¨ ¨«¨ ¯¥à¢ë© æ¨ä஢®© ᨬ¢®«, ª®â®àë© ¡®«ìè¥
|
||
; ¨«¨ à ¢¥ base. …᫨ eptr ¥ à ¢¥ NULL, *eptr 㪠§ë¢ ¥â â®â ᨬ¢®«,
|
||
; ª®â®à®¬ ®áâ ¢«¨¢ ¥âáï ¯à®á¬®âà.
|
||
; ”ãªæ¨ï strtol ¯à¥¤¯®« £ ¥â, çâ® s 㪠§ë¢ ¥â áâபã á«¥¤ãî饩 áâàãªâãàë:
|
||
;
|
||
; [whitespace][sign][0][x][digits]
|
||
;
|
||
; …᫨ base «¥¦¨â ¬¥¦¤ã 2 ¨ 36, íâ® § 票¥ ¨á¯®«ì§ã¥âáï ª ª ®á®¢ ¨¥ á¨á⥬ë
|
||
; áç¨á«¥¨ï ¤ ®£® ç¨á« . …᫨ base à ¢® 0, ç «ìë¥ á¨¬¢®«ë áâப¨,
|
||
; ª®â®àë¥ ãª §ë¢ ¥â s, ¨á¯®«ì§ãîâáï ¤«ï ®¯à¥¤¥«¥¨ï ®á®¢ ¨ï. …᫨ ¯¥à¢ë©
|
||
; ᨬ¢®« à ¢¥ 0 ¨ ¢â®à®© - ®¤ ¨§ æ¨äà ®â 1 ¤® 7, â® áâப ¨â¥à¯à¥â¨àã¥âáï
|
||
; ª ª ¢®á쬥à¨ç®¥ 楫®¥. …᫨ ¯¥à¢ë© ᨬ¢®« à ¢¥ 0, ¢â®à®© 'x' ¨«¨ 'X',
|
||
; ⮣¤ áâப ¯®¨¬ ¥âáï ª ª è¥áâ ¤æ â¥à¨ç®¥ 楫®¥. …᫨ ¯¥à¢ë© ᨬ¢®«
|
||
; ¯à¨ ¤«¥¦¨â ª æ¨äà ¬ 1..9, â® áâப ¯®¨¬ ¥âáï ª ª ¤¥áïâ¨ç®¥ 楫®¥.
|
||
; ”ãªæ¨ï strtol ¢®§¢à é ¥â § 票¥ ¯à¥®¡à §®¢ ®© áâப¨, ¥á«¨ ¥ ¡ë«®
|
||
; ¯¥à¥¯®«¥¨ï ¨«¨ ¯®â¥à¨ १ã«ìâ â .
|
||
;
|
||
strtol_::
|
||
ld (base),bc ; base
|
||
push de ; **eptr
|
||
ld (s@),hl ; *s
|
||
ex de,hl
|
||
xor a
|
||
ld (sig),a
|
||
ld h,a
|
||
ld l,a
|
||
ld (n@),hl
|
||
ld a,(de)
|
||
cp "-"
|
||
jr z,@4
|
||
cp "+"
|
||
jr z,@5
|
||
jr @6
|
||
;
|
||
@4: ld a,1
|
||
ld (sig),a
|
||
@5: inc de
|
||
ld (s@),de
|
||
@6: ld a,c
|
||
or b
|
||
jr nz,@7
|
||
ld a,(de)
|
||
cp "0"
|
||
jr nz,@8
|
||
ld bc,8
|
||
ld (base),bc
|
||
inc de
|
||
ld (s@),de
|
||
ld a,(de)
|
||
and 5Fh
|
||
cp "X"
|
||
jr nz,@10
|
||
ld bc,16
|
||
ld (base),bc
|
||
inc de
|
||
ld (s@),de
|
||
jr @10
|
||
;
|
||
@8: ld bc,10
|
||
ld (base),bc
|
||
jr @10
|
||
;
|
||
@7: ld a,c
|
||
sub 16
|
||
or b
|
||
jr nz,@10
|
||
ld a,(de)
|
||
cp "0"
|
||
jr nz,@10
|
||
ld hl,1
|
||
add hl,de
|
||
ld a,(hl)
|
||
and 5Fh
|
||
cp "X"
|
||
jr nz,@10
|
||
inc hl
|
||
ld (s@),hl
|
||
@10: ld e,c
|
||
ld d,b
|
||
ld hl,000Ah
|
||
call ?CPSHD##
|
||
jr nc,@12
|
||
ld a,"9"
|
||
jr @13
|
||
;
|
||
@12: ld a,c
|
||
add a,"0"
|
||
@13: ld (?16),a
|
||
ld e,c
|
||
ld d,b
|
||
ld hl,000Ah
|
||
call ?CPSHD##
|
||
jr nc,@14
|
||
ld a,c
|
||
add a,57h
|
||
jr @15
|
||
;
|
||
@14: ld a,(?16)
|
||
@15: ld (?17),a
|
||
@23: ld hl,(s@)
|
||
ld a,(hl)
|
||
inc hl
|
||
ld (s@),hl
|
||
call tolower_##
|
||
ld (?15),a
|
||
cp "0"
|
||
jr c,@18
|
||
ld hl,(?16)
|
||
cp l
|
||
jr c,@17
|
||
cp "a"
|
||
jr c,@18
|
||
ld hl,(?17)
|
||
cp l
|
||
jr nc,@18
|
||
@17: ld de,(base)
|
||
ld hl,(n@)
|
||
call ?MULHD##
|
||
ex de,hl
|
||
ld a,(?15)
|
||
cp "9"+1
|
||
jr nc,@19
|
||
ld hl,0-"0"
|
||
jr @20
|
||
;
|
||
@19: ld hl,0-"a"+10
|
||
@20: add hl,de
|
||
ld b,0
|
||
ld c,a
|
||
add hl,bc
|
||
add hl,de
|
||
ld (n@),hl
|
||
jr @23
|
||
;
|
||
@18: ld de,(s@)
|
||
pop hl
|
||
ld (hl),e
|
||
inc hl
|
||
ld (hl),d
|
||
ld a,(sig)
|
||
ld hl,(n@)
|
||
or a
|
||
ret z
|
||
xor a
|
||
sub l
|
||
ld l,a
|
||
ld a,0
|
||
sbc a,h
|
||
ld h,a
|
||
ret
|
||
|
||
dseg
|
||
s@: dw 0
|
||
base: dw 0
|
||
sig: db 0
|
||
n@: dw 0
|
||
?15: db 0
|
||
?16: db 0
|
||
?17: db 0
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE qsort
|
||
;-----------------------------------------------------------
|
||
; call from qsort
|
||
;-----------------------------------------------------------
|
||
_swp_: ld a,l
|
||
or h
|
||
ret z
|
||
ld a,(de)
|
||
ex af,af'
|
||
ld a,(bc)
|
||
ld (de),a
|
||
ex af,af'
|
||
ld (bc),a
|
||
inc de
|
||
inc bc
|
||
dec hl
|
||
jr _swp_
|
||
|
||
dseg
|
||
?7: dw 0
|
||
?10: dw 0
|
||
?9: dw 0
|
||
?11: dw 0
|
||
?12: dw 0
|
||
?13: dw 0
|
||
?18: dw 0
|
||
|
||
cseg
|
||
;
|
||
; "stdlib.h"
|
||
; ”ãªæ¨ï ॠ«¨§ã¥â ¡ëáâàãî á®àâ¨à®¢ªã â ¡«¨æë ¤ ëå.
|
||
;
|
||
; void qsort(*base, nel, size, *compare)
|
||
;
|
||
; void *base; - 㪠§ ⥫ì â ¡«¨æã
|
||
; unsigned nel; - ª®«¨ç¥á⢮ í«¥¬¥â®¢ â ¡«¨æë
|
||
; unsigned size; - à §¬¥à ¢ ¡ ©â å í«¥¬¥â â ¡«¨æë
|
||
; int (*compare)(); - 㪠§ ⥫ì äãªæ¨î áà ¢¥¨ï
|
||
;
|
||
; €à£ã¬¥â compare ï¥âáï 㪠§ ⥫¥¬ ¯à®æ¥¤ãàã, ¯®áâ ¢«ï¥¬ãî
|
||
; ¯®«ì§®¢ ⥫¥¬. ‚ ¯à®æ¥áᥠá®àâ¨à®¢ª¨, äãªæ¨ï qsort ¬®¦¥â ¢ë§ë¢ âì
|
||
; íâã ¯à®æ¥¤ãàã ®¤¨ ¨«¨ ¥áª®«ìª® à §, ¯à¨ ª ¦¤®¬ ¢ë§®¢¥ ¯¥à¥¤ ¢ ï
|
||
; 㪠§ ⥫¨ ¤¢ í«¥¬¥â ¬ áᨢ . �à®æ¥¤ãà compare ¤®«¦ áà ¢-
|
||
; ¨¢ âì í«¥¬¥âë, § ⥬ ¢®§¢à é âì ®¤® ¨§ á«¥¤ãîé¨å int-§ 票©:
|
||
;
|
||
; < 0 element1 < element2
|
||
; 0 element1 = element2
|
||
; > 0 element1 > element2
|
||
;
|
||
; �®á«¥ ®âà ¡®âª¨ äãªæ¨¨ qsort, â ¡«¨æ ᮤ¥à¦¨â ®âá®àâ¨à®¢ ë¥
|
||
; í«¥¬¥âë.
|
||
; ‚ á«ãç ¥ ®è¨¡ª¨, ¢®§¢à é ¥¬®£® § ç¥¨ï ¥â.
|
||
;
|
||
qsort_::
|
||
ld (?7),hl ; base ?
|
||
ld hl,-80
|
||
add hl,sp
|
||
ld sp,hl
|
||
ld l,c ; size ?
|
||
ld h,b
|
||
ld (?9),hl
|
||
ex de,hl
|
||
ld (?10),hl ; nel ?
|
||
ld hl,(?7)
|
||
ex de,hl
|
||
ld hl,0
|
||
add hl,sp
|
||
ld (hl),e
|
||
inc hl
|
||
ld (hl),d
|
||
push de
|
||
ld e,c
|
||
ld d,b
|
||
push de
|
||
ld hl,(?10)
|
||
ex de,hl
|
||
ld hl,-1
|
||
add hl,de
|
||
pop de
|
||
call ?MULHD##
|
||
pop de
|
||
add hl,de
|
||
call ?SAUHL##
|
||
dw 42
|
||
;
|
||
ld hl,0
|
||
ld (?18),hl
|
||
@5: inc h
|
||
dec h
|
||
jp m,@3
|
||
push hl
|
||
add hl,hl
|
||
ex de,hl
|
||
ld hl,2
|
||
add hl,sp
|
||
add hl,de
|
||
ld c,(hl)
|
||
inc hl
|
||
ld b,(hl)
|
||
pop hl
|
||
add hl,hl
|
||
ex de,hl
|
||
ld hl,40
|
||
add hl,sp
|
||
add hl,de
|
||
ld a,c
|
||
sub (hl)
|
||
inc hl
|
||
ld a,b
|
||
sbc a,(hl)
|
||
jr c,@4
|
||
ld hl,(?18)
|
||
dec hl
|
||
ld (?18),hl
|
||
jr @5
|
||
;
|
||
@4: ld hl,(?18)
|
||
push hl
|
||
add hl,hl
|
||
ex de,hl
|
||
ld hl,2
|
||
add hl,sp
|
||
add hl,de
|
||
push hl
|
||
ld hl,(?9)
|
||
ld c,l
|
||
ld b,h
|
||
pop hl
|
||
ld a,(hl)
|
||
sub c
|
||
ld e,a
|
||
inc hl
|
||
ld a,(hl)
|
||
sbc a,b
|
||
ld d,a
|
||
ex de,hl
|
||
ld (?12),hl
|
||
pop hl
|
||
push hl
|
||
add hl,hl
|
||
ex de,hl
|
||
ld hl,42
|
||
add hl,sp
|
||
add hl,de
|
||
ld a,(hl)
|
||
inc hl
|
||
ld h,(hl)
|
||
ld l,a
|
||
ld (?13),hl
|
||
ld (?11),hl
|
||
@12: ld hl,(?12)
|
||
ld de,(?13)
|
||
ld a,l
|
||
sub e
|
||
ld a,h
|
||
sbc a,d
|
||
jp nc,@6
|
||
ex de,hl
|
||
ld (?13),hl
|
||
ex de,hl
|
||
add hl,bc
|
||
push bc
|
||
@8: ld (?12),hl
|
||
push bc
|
||
push hl
|
||
ld hl,@1
|
||
push hl
|
||
call ?LAUHL##
|
||
dw 92+2
|
||
;
|
||
push hl
|
||
ld hl,(?11)
|
||
ex de,hl
|
||
ld hl,(?12)
|
||
ret
|
||
;
|
||
@1: pop de
|
||
pop bc
|
||
inc h
|
||
dec h
|
||
jp p,@7
|
||
ld hl,(?12)
|
||
add hl,bc
|
||
jr @8
|
||
;
|
||
@7: push bc
|
||
push de
|
||
ld hl,(?13)
|
||
ex de,hl
|
||
ld a,e
|
||
sub c
|
||
ld c,a
|
||
ld a,d
|
||
sbc a,b
|
||
ld b,a
|
||
ld l,c
|
||
ld h,b
|
||
ld (?13),hl
|
||
@10: ld hl,(?12)
|
||
ld a,l
|
||
sub c
|
||
ld a,h
|
||
sbc a,b
|
||
jr nc,@9
|
||
ld hl,@2
|
||
push bc
|
||
push hl
|
||
call ?LAUHL##
|
||
dw 94+2
|
||
;
|
||
push hl
|
||
ld hl,(?11)
|
||
ex de,hl
|
||
ld l,c
|
||
ld h,b
|
||
ret
|
||
;
|
||
@2: ex de,hl
|
||
ld hl,0000h
|
||
pop bc
|
||
call ?CPSHD##
|
||
jr nc,@9
|
||
ld hl,(?9)
|
||
ld a,c
|
||
sub l
|
||
ld c,a
|
||
ld a,b
|
||
sbc a,h
|
||
ld b,a
|
||
ld l,c
|
||
ld h,b
|
||
ld (?13),hl
|
||
jr @10
|
||
;
|
||
@9: pop de
|
||
pop hl
|
||
ld a,e
|
||
sub c
|
||
ld a,d
|
||
sbc a,b
|
||
jr nc,@11
|
||
call _swp_
|
||
@11: pop bc
|
||
jp @12
|
||
;
|
||
@6: ld (?12),hl
|
||
pop hl
|
||
ld (?18),hl
|
||
push hl
|
||
add hl,hl
|
||
ex de,hl
|
||
ld hl,42
|
||
add hl,sp
|
||
add hl,de
|
||
push bc
|
||
ld c,(hl)
|
||
inc hl
|
||
ld b,(hl)
|
||
ld hl,(?12)
|
||
ex de,hl
|
||
pop hl
|
||
push de
|
||
call _swp_
|
||
ld hl,(?18)
|
||
ld (?18),hl
|
||
add hl,hl
|
||
ex de,hl
|
||
ld hl,44
|
||
add hl,sp
|
||
add hl,de
|
||
pop bc
|
||
ld a,(hl)
|
||
sub c
|
||
ld e,a
|
||
inc hl
|
||
ld a,(hl)
|
||
sbc a,b
|
||
ld d,a
|
||
push de
|
||
ld hl,(?18)
|
||
add hl,hl
|
||
ex de,hl
|
||
ld hl,4
|
||
add hl,sp
|
||
add hl,de
|
||
ld e,(hl)
|
||
inc hl
|
||
ld d,(hl)
|
||
ld a,c
|
||
sub e
|
||
ld l,a
|
||
ld a,b
|
||
sbc a,d
|
||
ld h,a
|
||
pop de
|
||
call ?CPSHD##
|
||
jr nc,@13
|
||
ld l,c
|
||
ld h,b
|
||
ld (?12),hl
|
||
ld hl,(?18)
|
||
ld (?18),hl
|
||
push hl
|
||
add hl,hl
|
||
ex de,hl
|
||
ld hl,4
|
||
add hl,sp
|
||
add hl,de
|
||
ld c,(hl)
|
||
inc hl
|
||
ld b,(hl)
|
||
ld hl,(?18)
|
||
inc hl
|
||
add hl,hl
|
||
ex de,hl
|
||
ld hl,4
|
||
add hl,sp
|
||
add hl,de
|
||
ld (hl),c
|
||
inc hl
|
||
ld (hl),b
|
||
pop hl
|
||
ld (?18),hl
|
||
inc hl
|
||
add hl,hl
|
||
ex de,hl
|
||
ld hl,42
|
||
add hl,sp
|
||
add hl,de
|
||
push hl
|
||
ld hl,(?12)
|
||
ld c,l
|
||
ld b,h
|
||
ld hl,(?9)
|
||
ld a,c
|
||
sub l
|
||
ld e,a
|
||
ld a,b
|
||
sbc a,h
|
||
ld d,a
|
||
ld (?9),hl
|
||
pop hl
|
||
ld (hl),e
|
||
inc hl
|
||
ld (hl),d
|
||
ld l,c
|
||
ld h,b
|
||
ex de,hl
|
||
ld hl,(?9)
|
||
ex de,hl
|
||
add hl,de
|
||
push hl
|
||
ld hl,(?18)
|
||
add hl,hl
|
||
ex de,hl
|
||
ld hl,4
|
||
add hl,sp
|
||
add hl,de
|
||
pop de
|
||
ld (hl),e
|
||
inc hl
|
||
ld (hl),d
|
||
jr @14
|
||
;
|
||
@13: ld l,c
|
||
ld h,b
|
||
push bc
|
||
ex de,hl
|
||
ld hl,(?9)
|
||
ex de,hl
|
||
add hl,de
|
||
push hl
|
||
ld hl,(?18)
|
||
ld (?18),hl
|
||
inc hl
|
||
add hl,hl
|
||
push hl
|
||
ld hl,8
|
||
add hl,sp
|
||
ex de,hl
|
||
ld (?9),hl
|
||
ex de,hl
|
||
pop de
|
||
add hl,de
|
||
pop de
|
||
ld (hl),e
|
||
inc hl
|
||
ld (hl),d
|
||
ld hl,(?18)
|
||
push hl
|
||
add hl,hl
|
||
ex de,hl
|
||
ld hl,46
|
||
add hl,sp
|
||
add hl,de
|
||
ld c,(hl)
|
||
inc hl
|
||
ld b,(hl)
|
||
ld hl,(?18)
|
||
inc hl
|
||
add hl,hl
|
||
ex de,hl
|
||
ld hl,46
|
||
add hl,sp
|
||
add hl,de
|
||
ld (hl),c
|
||
inc hl
|
||
ld (hl),b
|
||
pop hl
|
||
add hl,hl
|
||
ex de,hl
|
||
ld hl,44
|
||
add hl,sp
|
||
add hl,de
|
||
pop bc
|
||
ex de,hl
|
||
ld hl,(?9)
|
||
ex de,hl
|
||
ld a,c
|
||
sub e
|
||
ld e,a
|
||
ld a,b
|
||
sbc a,d
|
||
ld d,a
|
||
ld (hl),e
|
||
inc hl
|
||
ld (hl),d
|
||
@14: pop hl
|
||
inc hl
|
||
ld (?18),hl
|
||
jp @5
|
||
;
|
||
@3: ld hl,80
|
||
add hl,sp
|
||
ld sp,hl
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE bsearch
|
||
;
|
||
; "stdlib.h"
|
||
; ”ãªæ¨ï ¢ë¯®«ï¥â ¤¢®¨çë© ¯®¨áª ¢ ®âá®àâ¨à®¢ ®¬ ¬ áᨢ¥.
|
||
;
|
||
; void *bsearch(*key, *base, num, size, *compare)
|
||
;
|
||
; char *key; - 㪠§ â¥«ì ª«îç (áâபã) ¯®¨áª
|
||
; char *base; - 㪠§ â¥«ì ¬ áᨢ
|
||
; unsigned num; - ç¨á«® í«¥¬¥â®¢ ¬ áᨢ
|
||
; unsigned size; - à §¬¥à ª ¦¤®£® í«¥¬¥â
|
||
; int (*compare)(); - 㪠§ ⥫ì äãªæ¨î áà ¢¥¨ï
|
||
;
|
||
; €à£ã¬¥â compare ï¥âáï 㪠§ ⥫¥¬ ¯à®æ¥¤ãàã, ¯®áâ ¢«ï¥¬ãî ¯®«ì§®-
|
||
; ¢ ⥫¥¬. ‚ ¯à®æ¥áᥠ¯®¨áª , äãªæ¨ï bsearch ¬®¦¥â ¢ë§ë¢ âì íâã ¯à®æ¥¤ãàã
|
||
; ®¤¨ ¨«¨ ¥áª®«ìª® à §, ¯à¨ ª ¦¤®¬ ¢ë§®¢¥ ¯¥à¥¤ ¢ ï 㪠§ ⥫¨ ¤¢ í«¥-
|
||
; ¬¥â ¬ áᨢ . �à®æ¥¤ãà compare ¤®«¦ áà ¢¨¢ âì í«¥¬¥âë, § ⥬ ¢®§¢-
|
||
; à é âì ®¤® ¨§ á«¥¤ãîé¨å int-§ 票©:
|
||
;
|
||
; < 0 element1 < element2
|
||
; 0 element1 = element2
|
||
; > 0 element1 > element2
|
||
;
|
||
; ”ãªæ¨ï bsearch ¢®§¢à é ¥â 㪠§ â¥«ì ¯¥à¢®¥ ¢å®¦¤¥¨¥ ª«îç
|
||
; key ¢ ¬ áᨢ¥.
|
||
; ‚®§¢à é ¥âáï NULL, ¥á«¨ ª«îç key ¢ ¬ áᨢ¥ ¥â.
|
||
;
|
||
dseg
|
||
?33: dw 0
|
||
?37: dw 0
|
||
|
||
cseg
|
||
bsearch_::
|
||
ld (?33),hl
|
||
ex de,hl
|
||
ld (?37),hl
|
||
@18: ld a,c
|
||
or b
|
||
jr z,@16
|
||
ld hl,@15
|
||
push bc
|
||
push hl
|
||
ld hl,10
|
||
add hl,sp
|
||
ld e,(hl)
|
||
inc hl
|
||
ld d,(hl)
|
||
push de
|
||
ld de,(?37)
|
||
ld hl,(?33)
|
||
ret
|
||
|
||
@15: ld de,(?37)
|
||
pop bc
|
||
ld a,l
|
||
or h
|
||
jr nz,@17
|
||
ld hl,(?37)
|
||
ret
|
||
|
||
@17: push de
|
||
dec bc
|
||
ld hl,6
|
||
add hl,sp
|
||
ld e,(hl)
|
||
inc hl
|
||
ld d,(hl)
|
||
pop hl
|
||
add hl,de
|
||
ld (?37),hl
|
||
jr @18
|
||
;
|
||
@16: ld hl,0
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE lauhl
|
||
;
|
||
; ‡ £à㧨âì hl ¨§ ...
|
||
;
|
||
?lauhl::
|
||
pop hl
|
||
ld e,(hl)
|
||
inc hl
|
||
ld d,(hl)
|
||
inc hl
|
||
push hl
|
||
ex de,hl
|
||
?laut::
|
||
add hl,sp
|
||
ld e,(hl)
|
||
inc hl
|
||
ld d,(hl)
|
||
ex de,hl
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE sauhl
|
||
;
|
||
; ‘®åà ¨âì hl ¢ ...
|
||
;
|
||
?sauhl::
|
||
ex (sp),hl
|
||
ld e,(hl)
|
||
inc hl
|
||
ld d,(hl)
|
||
inc hl
|
||
ex (sp),hl
|
||
?saut::
|
||
ex de,hl
|
||
add hl,sp
|
||
ld (hl),e
|
||
inc hl
|
||
ld (hl),d
|
||
ex de,hl
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE mulhd
|
||
;
|
||
; “¬®¦¥¨¥ h * d = hl
|
||
; out: hl = १ã«ìâ â
|
||
;
|
||
?mulhd::
|
||
ld a,h
|
||
ld c,l
|
||
ld hl,0
|
||
ld b,16
|
||
@1: add hl,hl
|
||
rl c
|
||
rla
|
||
jr nc,@2
|
||
add hl,de
|
||
@2: djnz @1
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE mulab
|
||
;
|
||
; “¬®¦¥¨¥ a * b
|
||
; out: a = १ã«ìâ â
|
||
;
|
||
?mulab::
|
||
ld h,a
|
||
xor a
|
||
ld l,b
|
||
ld b,8
|
||
@1: add a,a
|
||
rl h
|
||
jr nc,@2
|
||
add a,l
|
||
@2: djnz @1
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE dvnhd
|
||
;
|
||
; �¥§§ ª®¢®¥ ¤¥«¥¨¥ hl / de
|
||
; out: hl,de = १ã«ìâ â
|
||
;
|
||
?dvnhd::
|
||
ld b,d
|
||
ld c,e
|
||
ld de,0
|
||
ld a,16
|
||
@1: ex af,af'
|
||
add hl,hl
|
||
rl e
|
||
rl d
|
||
jr c,@2
|
||
ld a,e
|
||
sub c
|
||
ld a,d
|
||
sbc a,b
|
||
jr c,@3
|
||
@2: or a
|
||
ex de,hl
|
||
sbc hl,bc
|
||
ex de,hl
|
||
inc l
|
||
@3: ex af,af'
|
||
dec a
|
||
jp nz,@1
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE min
|
||
;
|
||
; "stdlib.h"
|
||
; ”ãªæ¨ï áà ¢¨¢ ¥â ¤¢ à£ã¬¥â ¨ ¢o§¢à é ¥â
|
||
; § 票¥ ¨¬¥ì襣o à£ã¬¥â .
|
||
; ’¨¯ à£ã¬¥âo¢ ¨ ⨯ ¢o§¢à é ¥¬o£o § 票ï
|
||
; o¤¨ ªo¢.
|
||
;
|
||
; int min(int arg1, int arg2)
|
||
;
|
||
min_::
|
||
call ?cpshd## ; signed compare hl with de
|
||
ret c
|
||
ex de,hl
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE max
|
||
;
|
||
; "stdlib.h"
|
||
; ”ãªæ¨ï áà ¢¨¢ ¥â ¤¢ à£ã¬¥â ¨ ¢o§¢à é ¥â
|
||
; § 票¥ ¨¡®«ì襣® à£ã¬¥â .
|
||
; ’¨¯ à£ã¬¥âo¢ ¨ ⨯ ¢o§¢à é ¥¬o£o § 票ï
|
||
; o¤¨ ªo¢.
|
||
;
|
||
; int max(int arg1, int arg2)
|
||
;
|
||
max_::
|
||
push hl
|
||
ex de,hl
|
||
pop de
|
||
call ?cpshd## ; signed compare hl with de
|
||
ret nc
|
||
ex de,hl
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE abs
|
||
;
|
||
; "stdlib.h"
|
||
; ‚®§¢à é ¥â § 票¥ n, à ¢®¥ ¡á®«î⮩ ¢¥«¨ç¨¥ n
|
||
; in: hl = § 票¥
|
||
; out: hl = १ã«ìâ â
|
||
;
|
||
; int abs(int n)
|
||
;
|
||
abs_::
|
||
?abshl::
|
||
bit 7,h
|
||
ret z
|
||
?neghl::
|
||
dec hl
|
||
?nothl::
|
||
ld a,l
|
||
cpl
|
||
ld l,a
|
||
ld a,h
|
||
cpl
|
||
ld h,a
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE dvihd
|
||
;
|
||
; ‡ ª®¢®¥ ¤¥«¥¨¥ hl / de
|
||
; out: hl,de = १ã«ìâ â
|
||
;
|
||
?dvihd::
|
||
ld a,h
|
||
or a
|
||
push af ; reminder's sign
|
||
xor d
|
||
push af ; quotient's sign
|
||
call ?abshl##
|
||
ex de,hl
|
||
call ?abshl##
|
||
ex de,hl
|
||
call ?dvnhd##
|
||
pop af
|
||
call m,?neghl##
|
||
pop af
|
||
ret p
|
||
xor a
|
||
sub e
|
||
ld e,a
|
||
ld a,0
|
||
sbc a,d
|
||
ld d,a
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE dvbab
|
||
;
|
||
; „¥«¥¨¥ a / b
|
||
; out: b,a = १ã«ìâ â
|
||
;
|
||
?dvbab::
|
||
ld l,a
|
||
ld h,b
|
||
xor a
|
||
ld b,8
|
||
@1: sla l
|
||
rla
|
||
jr c,@2
|
||
cp h
|
||
jr c,@3
|
||
@2: sub h
|
||
inc l
|
||
@3: djnz @1
|
||
ld b,a
|
||
ld a,l
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE slhb
|
||
;
|
||
; ‘¬¥é¥¨¥ ¡¨â®¢ "hl" ¢«¥¢® "b" à §
|
||
;
|
||
?slhb::
|
||
inc b
|
||
dec b
|
||
ret z
|
||
@1: add hl,hl
|
||
djnz @1
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE slab
|
||
;
|
||
; ‘¬¥é¥¨¥ ¡¨â®¢ "a" ¢«¥¢® "b" à §
|
||
;
|
||
?slab::
|
||
inc b
|
||
dec b
|
||
ret z
|
||
@1: add a,a
|
||
djnz @1
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE srnhb
|
||
;
|
||
; �¥§§ ª®¢®¥ ᬥ饨¥ ¡¨â®¢ "hl" ¢¯à ¢® "b" à §
|
||
;
|
||
?srnhb::
|
||
inc b
|
||
dec b
|
||
ret z
|
||
@1: srl h
|
||
rr l
|
||
djnz @1
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE srihb
|
||
;
|
||
; ‡ ª®¢®¥ ᬥ饨¥ ¡¨â®¢ "hl" ¢¯à ¢® "b" à §
|
||
;
|
||
?srihb::
|
||
inc b
|
||
dec b
|
||
ret z
|
||
@1: sra h
|
||
rr l
|
||
djnz @1
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE srab
|
||
;
|
||
; ‘¬¥é¥¨¥ ¡¨â®¢ "a" ¢¯à ¢® "b" à §
|
||
;
|
||
?srab::
|
||
inc b
|
||
dec b
|
||
ret z
|
||
@1: srl a
|
||
djnz @1
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE cpshd
|
||
;
|
||
; ‡ ª®¢®¥ áà ¢¥¨¥ hl á de
|
||
;
|
||
?cpshd::
|
||
ld a,h
|
||
xor d
|
||
jp p,@1
|
||
ld a,d
|
||
cp h
|
||
ret
|
||
@1: ld a,h
|
||
cp d
|
||
ret nz
|
||
ld a,l
|
||
cp e
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE setjmp
|
||
;
|
||
; "setjmp.h"
|
||
; ”ãªæ¨ï setjmp á®åà ï¥â á®áâ®ï¨¥ á⥪ , ª®â®àë© ¬®¦¥â ¡ëâì
|
||
; ¯®á«¥¤®¢ â¥«ì® ¢®ááâ ®¢«¥ ¨á¯®«ì§®¢ ¨¥¬ äãªæ¨¨ longjmp.
|
||
; ”ãªæ¨¨ setjmp ¨ longjmp ®¡¥á¯¥ç¨¢ îâ ¢®§¬®¦®áâì ¢ë¯®«¥¨ï
|
||
; ¥«®ª «ì®£® (nonlocal) ¯¥à¥å®¤ ¨ ®¡ëç® ¨á¯®«ì§ãîâáï ¤«ï ¯¥à¥-
|
||
; ¤ ç¨ ã¯à ¢«¥¨ï ª ®¡à ¡®âª¥ ®è¨¡®ª ¤«ï ¢®ááâ ®¢«¥¨ï ª®¤ ¢
|
||
; à ¥¥ ¢ë§¢ ®© ¯à®æ¥¤ãॠ(¡¥§ ¨á¯®«ì§®¢ ¨ï ®¡ë箣® ¢ë§®¢ ),
|
||
; ¤«ï ¢®§¢à â ãá«®¢ëå ®¡®§ 票©. ‚ë§®¢ setjmp ªâ¨¢¨§¨àã¥â
|
||
; á®åà ¥¨¥ ⥪ã饣® á®áâ®ï¨ï á⥪ ¢ env. �®á«¥¤ãî騩 ¢ë§®¢
|
||
; longjmp ¢®ááâ ¢«¨¢ ¥â á®åà ¥®¥ á®áâ®ï¨¥ ¨ ¢®§¢à é ¥â ã¯à ¢-
|
||
; «¥¨¥ 㪠§ ⥫ì (â®çªã ¢å®¤ ), ¥¯®á।á⢥® á«¥¤ãî騩 §
|
||
; ᮮ⢥âáâ¢ãî騬 ¢ë§®¢®¬ setjmp.
|
||
;
|
||
; int setjmp(jmp_buf env)
|
||
;
|
||
setjmp_::
|
||
push ix
|
||
pop bc
|
||
push hl
|
||
pop iy
|
||
ld hl,2
|
||
add hl,sp
|
||
ld (iy+0),l ; SP value
|
||
ld (iy+1),h
|
||
ld (iy+2),c
|
||
ld (iy+3),b
|
||
pop hl
|
||
ld (iy+4),l
|
||
ld (iy+5),h
|
||
push hl
|
||
ld hl,0
|
||
ret
|
||
;
|
||
; void longjmp(jmp_buf env, int retval)
|
||
;
|
||
longjmp_::
|
||
push hl
|
||
pop iy
|
||
ld l,(iy+0)
|
||
ld h,(iy+1)
|
||
ld c,(iy+2)
|
||
ld b,(iy+3)
|
||
ld sp,hl
|
||
ld l,(iy+4)
|
||
ld h,(iy+5)
|
||
push hl
|
||
push bc
|
||
pop ix
|
||
ex de,hl
|
||
ld a,h
|
||
or l
|
||
ret nz
|
||
inc hl
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE hex32
|
||
;
|
||
; "stdlib.h"
|
||
; ”ãªæ¨ï ¢ë¢®¤¨â ¢ è¥áâ ¤æ â¥à¨ç®¬ ä®à¬ ⥠§ 票ï
|
||
; à£ã¬¥â®¢ high ¨ low ª ª ®¤® ç¨á«®.
|
||
; ‚®§¢à é ¥¬®£® § ç¥¨ï ¥â.
|
||
;
|
||
; void hex32(uint high, uint low)
|
||
;
|
||
hex32_::
|
||
push de
|
||
call hex16_##
|
||
pop hl
|
||
jp hex16_##
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE hex16
|
||
;
|
||
; "stdlib.h"
|
||
; ”ãªæ¨ï ¢ë¢®¤¨â ¢ è¥áâ ¤æ â¥à¨ç®¬ ä®à¬ ⥠§ 票¥ value.
|
||
; „¨ ¯ §® ¢ë¢®¤¨¬ëå § 票© 0x0000..0xFFFF
|
||
; ‚®§¢à é ¥¬®£® § ç¥¨ï ¥â.
|
||
;
|
||
; void hex16(uint value)
|
||
;
|
||
hex16_::
|
||
ld a,h
|
||
push hl
|
||
call hex8_##
|
||
pop hl
|
||
ld a,l
|
||
jp hex8_##
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE hex8
|
||
;
|
||
; "stdlib.h"
|
||
; ”ãªæ¨ï ¢ë¢®¤¨â ¢ è¥áâ ¤æ â¥à¨ç®¬ ä®à¬ ⥠§ 票¥ value.
|
||
; „¨ ¯ §® ¢ë¢®¤¨¬ëå § 票© 0x00..0xFF.
|
||
; ‚®§¢à é ¥¬®£® § ç¥¨ï ¥â.
|
||
;
|
||
; void hex8(char value)
|
||
;
|
||
hex8_::
|
||
push af
|
||
rra
|
||
rra
|
||
rra
|
||
rra
|
||
call @1
|
||
pop af
|
||
@1: and 0Fh
|
||
cp 9+1
|
||
sbc a,69h
|
||
daa
|
||
ld c,5Bh
|
||
rst 10h
|
||
ret
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE dec8
|
||
;
|
||
; "stdlib.h"
|
||
; ”ãªæ¨ï ¢ë¢®¤¨â à£ã¬¥â value ¢ ¤¥áïâ¨ç®¬ ä®à¬ â¥,
|
||
; ¡¥§ ¢¥¤ãé¨å ã«¥©.
|
||
; „¨ ¯ §® ¢ë¢®¤¨¬ëå § 票© 0..255.
|
||
; ”ãªæ¨ï ¥ ¢®§¢à é ¥â ¨ª ª®£® § 票ï.
|
||
;
|
||
; void dec8(char value)
|
||
;
|
||
dec8_::
|
||
push iy
|
||
ld l,a
|
||
ld h,0
|
||
ld iy,_@tmp_##
|
||
res 7,(iy+0)
|
||
jp __dec3_##
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE dec16
|
||
;
|
||
; "stdlib.h"
|
||
; ”ãªæ¨ï ¢ë¢®¤¨â à£ã¬¥â value ¢ ¤¥áïâ¨ç®¬ ä®à¬ â¥,
|
||
; ¡¥§ ¢¥¤ãé¨å ã«¥©.
|
||
; „¨ ¯ §® ¢ë¢®¤¨¬ëå § 票© 0..65535.
|
||
; ”ãªæ¨ï ¥ ¢®§¢à é ¥â ¨ª ª®£® § 票ï.
|
||
;
|
||
; void dec16(uint value)
|
||
;
|
||
dec16_::
|
||
push iy
|
||
exx
|
||
ld hl,0 ; áâ. à §àï¤
|
||
exx
|
||
ld iy,_@tmp_##
|
||
res 7,(iy+0)
|
||
jp __dec5_##
|
||
|
||
ENDMODULE
|
||
|
||
|
||
MODULE dec32
|
||
;
|
||
; "stdlib.h"
|
||
; ”ãªæ¨ï ¢ë¢®¤¨â à£ã¬¥âë high ¨ low ª ª ®¤® § 票¥.
|
||
; ‚뢮¤ ¯à®¨á室¨â ¢ ¤¥áïâ¨ç®¬ ä®à¬ â¥, ¡¥§ ¢¥¤ãé¨å ã«¥©.
|
||
; „¨ ¯ §® ¢ë¢®¤¨¬ëå § 票© 0...4 ¬«à¤.
|
||
; ”ãªæ¨ï ¥ ¢®§¢à é ¥â ¨ª ª®£® § 票ï.
|
||
;
|
||
; void dec32(uint high, uint low)
|
||
;
|
||
dec32_::
|
||
push hl
|
||
exx
|
||
pop hl ; hl' = áâ. à §àï¤
|
||
exx
|
||
ex de,hl ; hl = ¬«. à §àï¤
|
||
push iy
|
||
ld de,0CA00h
|
||
exx
|
||
ld de,3B9Ah ; 1.000.000.000
|
||
exx
|
||
ld iy,_@tmp_
|
||
res 7,(iy+0)
|
||
call GetLenN32
|
||
ld de,0E100h
|
||
exx
|
||
ld de,05F5h ; 100.000.000
|
||
exx
|
||
call GetLenN32
|
||
ld de,9680h
|
||
exx
|
||
ld de,98h ; 10.000.000
|
||
exx
|
||
call GetLenN32
|
||
ld de,4240h
|
||
exx
|
||
ld de,0Fh ; 1.000.000
|
||
exx
|
||
call GetLenN32
|
||
ld de,86A0h
|
||
exx
|
||
ld de,1 ; 100.000
|
||
exx
|
||
call GetLenN32
|
||
__dec5_::
|
||
ld de,10000
|
||
exx
|
||
ld de,0 ; 10.000
|
||
exx
|
||
call GetLenN32
|
||
ld de,1000 ; 1.000
|
||
call GetLenN16
|
||
__dec3_::
|
||
ld de,100 ; 100
|
||
call GetLenN16
|
||
ld de,10 ; 10
|
||
call GetLenN16
|
||
ld a,l
|
||
add a,"0"
|
||
ld c,5Bh
|
||
rst 10h
|
||
pop iy
|
||
ret
|
||
|
||
_@tmp_::db 0
|
||
|
||
GetLenN32:
|
||
ld a,2Fh
|
||
and a
|
||
GetLenN321:
|
||
inc a
|
||
sbc hl,de
|
||
exx
|
||
sbc hl,de
|
||
exx
|
||
jp nc,GetLenN321
|
||
add hl,de
|
||
exx
|
||
adc hl,de
|
||
exx
|
||
jr GetLenN160
|
||
;
|
||
GetLenN16:
|
||
ld a,2Fh
|
||
and a
|
||
GetLenN161:
|
||
inc a
|
||
sbc hl,de
|
||
jp nc,GetLenN161
|
||
add hl,de
|
||
GetLenN160:
|
||
cp "0"
|
||
jr z,GetLenN162
|
||
set 7,(iy+0)
|
||
GetLenN162:
|
||
bit 7,(iy+0)
|
||
ret z ; ¡¥§ ¢¥¤ãé. ã«¥©
|
||
ld c,5Bh
|
||
rst 10h
|
||
ret
|
||
|
||
ENDMODULE
|