📄 mcal.asz
字号:
;------------------------------------------------------------------------------
;
; 墘嶼梡儔僀僽儔儕(?)
; Compiler LSI C-80 Ver 3.6 梡娭悢
;
; Version :1.00
; MakeDate:2004/12/06
;
;------------------------------------------------------------------------------
public mulub10_ ; 忔嶼柦椷 16bit = 8bit x 10
public mulub60_ ; 忔嶼柦椷 16bit = 8bit x 60
public mulub75_ ; 忔嶼柦椷 16bit = 8bit x 75
public mulub_ ; 忔嶼柦椷 16bit = 8bit x 8bit
public muluw_ ; 忔嶼柦椷 32bit = 16bit x 16bit
public bcd2bin_ ; BCD => BIN 曄姺娭悢
public msf2lbn_bcd_ ; MSF(BCD) => LBN曄姺娭悢
public msf2lbn_bin_ ; MSF(BIN) => LBN曄姺娭悢
public divub_ ; 彍嶼柦椷 16bit = 8bit 亐 8bit
public divuw_ ; 彍嶼柦椷 32bit = 16bit 亐 16bit
;------------------------------------------------------------------------------
CSEG
;------------------------------------------------------------------------------
; 忔嶼柦椷梡儗僕僗僞價僢僩掕媊
R_B equ 11000001b ;
R_C equ 11001001b ;
R_D equ 11010001b ;
R_E equ 11011001b ;
R_A equ 11111001b ;
SS_BC equ 11000011b ;
SS_SP equ 11110011b ;
dr_e equ 11011000b ;
dr_bc equ 11000010b ;
;------------------------------------------------------------------------------
;
; 忔嶼柦椷 16bit = 8bit x 10
; UINT16 mulub( UINT08 p1 )
; 堷悢: UINT08 p1 忔嶼抣
; 曉抣: UINT16 忔嶼寢壥抣
;
;------------------------------------------------------------------------------
; 堷悢 : A_Reg = p1
; 曉抣 : HL_Reg
;
mulub10_: ;
PUSH DE ;
LD E,10 ;
;; MULUB R_E ; HL=A x E
db 0EDh,R_E ;#
POP DE ;
RET ;
;------------------------------------------------------------------------------
;
; 忔嶼柦椷 16bit = 8bit x 60
; UINT16 mulub( UINT08 p1 )
; 堷悢: UINT08 p1 忔嶼抣
; 曉抣: UINT16 忔嶼寢壥抣
;
;------------------------------------------------------------------------------
; 堷悢 : A_Reg = p1
; 曉抣 : HL_Reg
;
mulub60_: ;
PUSH DE ;
LD E,60 ;
;; MULUB R_E ; HL=A x E
db 0EDh,R_E ;#
POP DE ;
RET ;
;------------------------------------------------------------------------------
;
; 忔嶼柦椷 16bit = 8bit x 75
; UINT16 mulub( UINT08 p1 )
; 堷悢: UINT08 p1 忔嶼抣
; 曉抣: UINT16 忔嶼寢壥抣
;
;------------------------------------------------------------------------------
; 堷悢 : A_Reg = p1
; 曉抣 : HL_Reg
;
mulub75_: ;
PUSH DE ;
LD E,75 ;
;; MULUB R_E ; HL=A x E
db 0EDh,R_E ;#
POP DE ;
RET ;
;------------------------------------------------------------------------------
;
; 忔嶼柦椷 16bit = 8bit x 8bit
; UINT16 mulub( UINT08 p1, UINT08 p2 )
; 堷悢: UINT08 p1 忔嶼抣(1)
; UINT08 p2 忔嶼抣(2)
; 曉抣: UINT16 忔嶼寢壥抣
;
;------------------------------------------------------------------------------
; 堷悢 : HL_Reg = p1
; DE_Reg = p2
; 曉抣 : HL_Reg
;
mulub_: ;
;; MULUB R_E ; HL=A x E
db 0EDh,R_E ;#
RET ;
;------------------------------------------------------------------------------
;
; 忔嶼柦椷 32bit = 16bit x 16bit
; UINT32 muluw( UINT16 p1, UINT16 p2 )
; 堷悢: UINT16 p1 忔嶼抣(1)
; UINT16 p2 忔嶼抣(2)
; 曉抣: UINT32 忔嶼寢壥抣
;
;------------------------------------------------------------------------------
; 堷悢 : HL_Reg = p1
; DE_Reg = p2
; 曉抣 : (stack?)
;
muluw_: ;
;x PUSH BC ;
LD B,D ;
LD C,E ;
;; MULUW SS_BC ; DE:HL=HL x BC
db 0EDh,SS_BC ;#
;x POP BC ;
PUSH DE ;
PUSH HL ;
LD HL,6 ;
ADD HL,SP ;
CALL POPL## ;
RET ;
;------------------------------------------------------------------------------
;
; 忔嶼柦椷 32bit = 16bit 亐 16bit
; UINT32 muluw( UINT16 p1, UINT16 p2 )
; 堷悢: UINT16 p1 忔嶼抣(1)
; UINT16 p2 忔嶼抣(2)
; 曉抣: UINT32 忔嶼寢壥抣
;
;------------------------------------------------------------------------------
; 堷悢 : HL_Reg = p1
; DE_Reg = p2
; 曉抣 : (stack?)
;
divub_: ; 彍嶼柦椷 16bit = 8bit 亐 8bit
; divub e ;
db 0EDh, dr_e ;
ret
divuw_: ; 彍嶼柦椷 32bit = 16bit 亐 16bit
; push bc ;
ld b, d ;
ld c, e ;
; divuw bc ;
db 0EDh, dr_bc ;
; pop bc ;
PUSH DE ;
PUSH HL ;
LD HL,6 ;
ADD HL,SP ;
CALL POPL## ;
ret
;------------------------------------------------------------------------------
;
; BCD => BIN 曄姺娭悢
; UINT08 bcd2bin( UINT08 bcd )
;
; 堷悢: UINT08 bcd BCD僐乕僪
; 曉抣: UINT08 BCD偺抣傪BIN偵曄姺偟偨抣
; 仸AF儗僕僗僞埲奜偼曐忈偝傟傞
;------------------------------------------------------------------------------
; 堷悢 : A_Reg = bcd
; 曉抣 : A_Reg
;
bcd2bin_: ;
;*; PUSH HL ;
;*; PUSH DE ;
;*; LD D,A ; D = A
;*; RRCA ; A = A >> 1 (cy晅偒)
;*; RRCA ; A = A >> 1 (cy晅偒)
;*; RRCA ; A = A >> 1 (cy晅偒)
;*; AND 00011110b ; A = A & 11110b
;*; LD E,5 ; E = 5 仸shift傪3夞偵偟偰傞堊 10偱側偔5傪戙擖
;*;;; MULUB R_E ; HL = A[忋埵4bitx2] x E[5]
;*; db 0EDh,R_E ;#
;*; LD A,D ; A = D
;*; AND 00001111b ; A = A & 1111b
;*; ADD A,L ; A = A + L
;*; POP DE ;
;*; POP HL ;
;*; RET ;
;;伀偺曽偑僶僀僩悢偑彮側偔側傞丄幚岠懍搙懍偄丄僗僞僢僋儗儀儖偑侾儗儀儖彮側偄
PUSH DE ;
LD E,A ;
RRCA ;
RRCA ;
RRCA ;
AND 00011110b ;
LD D,A ;
ADD A,A ;
ADD A,A ;
ADD A,D ;
LD D,A ;
LD A,E ;
AND 00001111b ;
ADD A,D ;
POP DE ;
RET ;
;------------------------------------------------------------------------------
;
; MSF(BCD) => LBN曄姺娭悢
; UINT32 msf2lbn_bcd( UINT08 min, UINT08 sec, UINT08 frame )
; 堷悢: UINT08 min 暘僐乕僪(BCD)
; UINT08 sec 昩僐乕僪(BCD)
; UINT08 frame 僼儗乕儉僐乕僪(BCD)
; 曉抣: UINT32 MSF(BCD)偺抣傪LBN偵曄姺偟偨抣
; 仸AF儗僕僗僞偼曐忈偝傟傞
;------------------------------------------------------------------------------
; 堷悢 : A_Reg = min
; E_Reg = sec
; C_reg = frame
; 曉抣 : (stack?)
;
msf2lbn_bcd_: ;
PUSH AF ;
PUSH AF ;
LD A,C ;
call bcd2bin_ ; F(BCD)->F(BIN)
LD C,A ;
LD A,E ;
call bcd2bin_ ; S(BCD)->S(BIN)
LD E,A ;
POP AF ;
call bcd2bin_ ; M(BCD)->M(BIN)
jr msf2lbn_bin_2 ;
;僐乕僪弅彫偺堊丄師偺張棟傪偦偺傑傑MSF(BIN) => LBN曄姺娭悢偵擟偣傞
;伀偵懕偔
;------------------------------------------------------------------------------
;
; MSF(BIN) => LBN曄姺娭悢 LBN = (((min * 60) + sec) * 75) + frame
; UINT32 msf2lbn_bin( UINT08 min, UINT08 sec, UINT08 frame )
; 堷悢: UINT08 min 暘僐乕僪(BIN)
; UINT08 sec 昩僐乕僪(BIN)
; UINT08 frame 僼儗乕儉僐乕僪(BIN)
; 曉抣: UINT32 MSF(BIN)偺抣傪LBN偵曄姺偟偨抣
; 仸AF儗僕僗僞偼曐忈偝傟傞
;------------------------------------------------------------------------------
; 堷悢 : A_Reg = min
; E_Reg = sec
; C_reg = frame
; 曉抣 : (stack?)
;
msf2lbn_bin_: ;
PUSH AF ;
msf2lbn_bin_2: ;
;x PUSH BC ;
LD D,60 ; D = 60
;; MULUB R_D ; HL=A * D ( HL = A[Min] * D[60] )
db 0EDh,R_D ;#
LD D,0 ; D = 0
ADD HL,DE ; HL=HL+DE ( HL = HL + DE[Sec] )
LD A,C ;
LD B,0 ; B = 0
LD C,75 ; E = 75
;; MULUW SS_BC ; DE:HL=HL * BC (DEHL = HL * BC[75] )
db 0EDh,SS_BC ;#
LD B,0 ; B = 0
LD C,A ;
ADD HL,BC ; HL = HL + BC ( HL = HL + BC[Frame] )
;x POP BC ;
JR NC,calc_exit ; Cy僆乕僶乕偟偰側偗傟偽DE偼偦偺傑傑
;
INC DE ; Cy僆乕僶乕偟偰偄傟偽 DE = DE + 1
;
calc_exit: ;
POP AF ;
PUSH DE ;
PUSH HL ;
LD HL,6 ;
ADD HL,SP ;
CALL POPL## ;
RET ;
;------------------------------------------------------------------------------
END ; end of file
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -