📄 myclib.msa
字号:
or a
UL_RSH_L03_0
ret z
cp 8
jr c,UL_RSH_L03_1
ld l,h
ld h,c
ld c,b
ld b,0
sub 8
jr UL_RSH_L03_0
UL_RSH_L03_1
srl b
rr c
rr h
rr l
dec a
jr nz,UL_RSH_L03_1
ret
//mod and div
//added by fqliu 20040301
/******************************************************************************/
?C_DIVMOD_L01: //----------------------//
ld de,9
C_DIVMOD_L01_0
rl c
dec e
ret z
rl d
ld a,d
sub b
jr c,C_DIVMOD_L01_0
ld d,a
jr C_DIVMOD_L01_0
/******************************************************************************/
?S_DIVMOD_L02: //----------------------//
ld hl,0
ld a,11h
S_DIVMOD_L02_0
rl e
rl d
dec a
ret z
rl l
rl h
sbc hl,bc
jr nc,S_DIVMOD_L02_0
add hl,bc
jr S_DIVMOD_L02_0
/******************************************************************************/
?L_DIVMOD_L03: //----------------------//
push af
ld hl,0
ld bc,0
ld (ix-8),21h
jr L_DIVMOD_L03_0
L_DIVMOD_L03_2
add hl,de
scf
L_DIVMOD_L03_0
rl (ix-4)
rl (ix-3)
rl (ix-2)
rl (ix-1)
dec (ix-8)
jr z,L_DIVMOD_L03_1
rl c
rl b
rl l
rl h
sbc hl,de
jr c,L_DIVMOD_L03_2
jr nz,L_DIVMOD_L03_3
ld a,b
sub (ix+7)
jr c,L_DIVMOD_L03_2
jr nz,L_DIVMOD_L03_3
ld a,c
sub (ix+6)
jr c,L_DIVMOD_L03_2
jr L_DIVMOD_L03_4
L_DIVMOD_L03_3
ld a,c
sub (ix+6)
L_DIVMOD_L03_4
ld c,a
ld a,b
sbc a,(ix+7)
ld b,a
jr nc,L_DIVMOD_L03_0
dec hl
and a
jr L_DIVMOD_L03_0
L_DIVMOD_L03_1
pop af
push hl
ld h,b
ld l,c
pop bc
ret
/******************************************************************************/
?C_FIND_SIGN_L01: //----------------------//
bit 7,b
jr z,C_FIND_SIGN_L01_0
xor a
sub b
ld b,a
ld a,1
C_FIND_SIGN_L01_0
bit 7,c
ret z
push af
xor a
sub c
ld c,a
pop af
xor 1
ret
/******************************************************************************/
?L_INC_L03: //----------------------//
inc l
ret nz
inc h
ret nz
inc c
ret nz
inc b
ret
/******************************************************************************/
?L_NOT_L03: //----------------------//
push af
ld a,l
cpl
ld l,a
ld a,h
cpl
ld h,a
ld a,c
cpl
ld c,a
ld a,b
cpl
ld b,a
pop af
ret
/******************************************************************************/
?L_FIND_SIGN_L03: //----------------------//
bit 7,d
jr z,L_FIND_SIGN_L03_0
ld b,d
ld c,e
ld h,(ix+7)
ld l,(ix+6)
call ?L_NOT_L03
call ?L_INC_L03
ld d,b
ld e,c
ld (ix+7),h
ld (ix+6),l
ld a,1
L_FIND_SIGN_L03_0
bit 7,(ix-1)
ret z
push af
ld b,(ix-1)
ld c,(ix-2)
ld h,(ix-3)
ld l,(ix-4)
call ?L_NOT_L03
call ?L_INC_L03
ld (ix-1),b
ld (ix-2),c
ld (ix-3),h
ld (ix-4),l
pop af
xor 1
ret
/******************************************************************************/
?UC_MOD_L01: //----------------------//
push bc
push de
ld c,a
call ?C_DIVMOD_L01
ld a,d
pop de
pop bc
ret
/******************************************************************************/
?SC_MOD_L01: //----------------------//
push bc
push de
ld c,a
ld a,1
call ?C_FIND_SIGN_L01
push af
call ?C_DIVMOD_L01
pop af
or a
ld a,d
jr nz,SC_MOD_L01_0
neg
SC_MOD_L01_0
pop de
pop bc
ret
/******************************************************************************/
?SS_MOD_L02: //----------------------//
push af
push hl
push bc
ld a,1
call ?S_FIND_SIGN_L02
push af
call ?S_DIVMOD_L02
pop af
ex de,hl
or a
jr nz,SS_MOD_L02_0
xor a
sub e
ld e,a
ld a,0
sbc a,d
ld d,a
SS_MOD_L02_0
pop bc
pop hl
pop af
ret
/******************************************************************************/
?SS_MODASG_L02: //----------------------//
ld e,(hl)
inc hl
ld d,(hl)
call ?SS_MOD_L02
ld (hl),d
dec hl
ld (hl),e
ret
/******************************************************************************/
?US_MOD_L02: //----------------------//
push af
push hl
call ?S_DIVMOD_L02
ex de,hl
pop hl
pop af
ret
/******************************************************************************/
?US_MODASG_L02: //----------------------//
LD e,(hl)
inc hl
ld d,(hl)
call ?US_MOD_L02
ld (hl),d
dec hl
ld (hl),e
ret
/******************************************************************************/
?SL_MOD_L03: //----------------------//
ex de,hl
ex (sp),hl
push af
push ix
ld ix,0
add ix,sp
push bc
push de
ld d,(ix+9)
ld (ix+9),h
ld e,(ix+8)
ld (ix+8),l
ld a,1
call ?L_FIND_SIGN_L03
call ?L_DIVMOD_L03
or a
jr nz,SL_MOD_L03_0
call ?L_NOT_L03
call ?L_INC_L03
SL_MOD_L03_0
ld sp,ix
pop ix
pop af
pop de
inc sp
inc sp
ret
/******************************************************************************/
?SL_MODASG_L03: //----------------------//
push bc
push de
ld e,(hl)
inc hl
ld d,(hl)
inc hl
ld c,(hl)
inc hl
ld b,(hl)
ex de,hl
call ?SL_MOD_L03
call ?L_END_MULDIVASG_L03
ret
/******************************************************************************/
?UL_MOD_L03: //----------------------//
ex de,hl
ex (sp),hl
push af
push ix
ld ix,0
add ix,sp
push bc
push de
ld d,(ix+9)
ld (ix+9),h
ld e,(ix+8)
ld (ix+8),l
call ?L_DIVMOD_L03
ld sp,ix
pop ix
pop af
pop de
inc sp
inc sp
ret
/******************************************************************************/
?UL_MODASG_L03: //----------------------//
push bc
push de
ld e,(hl)
inc hl
ld d,(hl)
inc hl
ld c,(hl)
inc hl
ld b,(hl)
ex de,hl
call ?UL_MOD_L03
call ?L_END_MULDIVASG_L03
ret
/******************************************************************************/
?BF_UC_MODASG_L10: //----------------------//
ex de,hl
ex (sp),hl
push bc
push de
ld e,(hl)
inc hl
ld d,(hl)
inc hl
ex (sp),hl
push af
call ?BF_UC_LD_SHIFT_DOWN_L10
call ?UC_MOD_L01
call ?BF_C_SHIFT_UP_L10
JP ?BF_C_RET_VAL_L10
/******************************************************************************/
?BF_SC_EXT_L10: //----------------------//
ld b,80h
BF_SC_EXT_L10_1
ld a,d
and b
jr nz,BF_SC_EXT_L10_0
sra b
jr BF_SC_EXT_L10_1
BF_SC_EXT_L10_0
ld a,c
and b
ret z
ld a,c
or b
ld c,a
ret
/******************************************************************************/
?BF_UC_LD_SHIFT_DOWN_L10: //----------------------//
ld b,a
push bc
ld a,(hl)
and d
ld c,a
ld a,e
and 7
ld b,a
ld a,c
call ?UC_RSH_L01
pop bc
ret
/******************************************************************************/
?BF_C_SHIFT_UP_L10: //----------------------//
ld c,a
ld a,e
and 7
ld b,a
ld a,c
jp ?C_LSH_L01
/******************************************************************************/
?BF_C_RET_VAL_L10: //----------------------//
and d
ld c,a
ld a,d
cpl
and (hl)
or c
ld (hl),a
bit 7,e
jr z,BF_C_RET_VAL_L10_0
bit 6,e
call nz,?BF_SC_EXT_L10
ld a,e
and 7
ld b,a
ld a,c
bit 6,e
jr z,BF_C_RET_VAL_L10_1
call ?SC_RSH_L01
pop de
jp BF_C_RET_VAL_L10_2
BF_C_RET_VAL_L10_1
call ?UC_RSH_L01
pop de
jp BF_C_RET_VAL_L10_2
BF_C_RET_VAL_L10_0
pop af
BF_C_RET_VAL_L10_2
pop de
pop bc
ex de,hl
ex (sp),hl
ex de,hl
ret
/******************************************************************************/
?BF_SS_MODASG_L10: //----------------------//
ex de,hl
ex (sp),hl
push ix
push de
push hl
pop ix
inc hl
inc hl
inc hl
ex (sp),hl
push hl
push af
push bc
call ?BF_SS_LD_SHIFT_DOWN_L10
call ?SS_MOD_L02
call ?BF_S_SHIFT_UP_L10
Jp ?BF_S_RET_VAL_L10
/******************************************************************************/
?BF_SS_EXT_L10: //----------------------//
push hl
push bc
ld L,(ix+1)
ld h,(ix+2)
ld b,80h
ld c,0
BF_SS_EXT_L10_1
ld a,h
and b
jr nz,BF_SS_EXT_L10_0
ld a,l
and c
jr nz,BF_SS_EXT_L10_0
sra b
rr c
jr BF_SS_EXT_L10_1
BF_SS_EXT_L10_0
ld a,d
and h
and b
jr nz,BF_SS_EXT_L10_2
ld a,e
and l
and c
jr z,BF_SS_EXT_L10_3
ld a,e
or c
ld e,a
BF_SS_EXT_L10_2
ld a,d
or b
ld d,a
BF_SS_EXT_L10_3
pop bc
pop hl
ret
/******************************************************************************/
?BF_MASKED_LD_L10: //----------------------//
ld a,(hl)
and (ix+1)
ld e,a
inc hl
ld a,(hl)
and (ix+2)
ld d,a
ret
/******************************************************************************/
?BF_SS_LD_SHIFT_DOWN_L10: //----------------------//
push bc
call ?BF_MASKED_LD_L10
call ?BF_SS_EXT_L10
ld a,(ix+0)
and 0fh
ld b,a
call ?SS_RSH_L02
pop bc
ret
/******************************************************************************/
?BF_US_LD_SHIFT_DOWN_L10: //----------------------//
push bc
call ?BF_MASKED_LD_L10
ld a,(ix+0)
and 0fh
ld b,a
call ?US_RSH_L02
pop bc
ret
/******************************************************************************/
?BF_S_SHIFT_UP_L10: //----------------------//
ld a,(ix+0)
and 0fh
ld b,a
jp ?S_LSH_L02
/******************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -