| Code: ; ; Project: Z80 floating point math library ; Author: Nat Wadsworth ; Date: 1979 ; Source: "Z80 software gourmet guide & cookbook", 1990 ; ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ decadd And A ; dcad1 Ld A,(De) ; Adc A,(Hl) ; Daa ; Ld (Hl),A ; Inc De ; Cpi ; Jp Pe,dcad1 ; Ret ; ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ decsub Ex De,Hl ; Scf ; dcsb1 Ld A,0x99 ; Adc A,(Hl) ; Sbc A,(Hl) ; Ex De,Hl ; Adc A,(Hl) ; Daa ; Ex De,Hl ; Ld (Hl),A ; Inc De ; Cpi ; Jp Pe,dcsb1 ; Ret ; ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sgnadd Ld Hl,sign1 ; Ld A,(sign2) ; Cp (Hl) ; Jp Z,sar2 ; Jp C,sar3 ; sar1 Call cmpr12 ; Jp C,sb12 ; Xor A ; Ld (sign2),A ; Jp sb21 ; sb12 Call shift ; Ld Hl,shft ; Ld De,two ; Ld Bc,0x0004 ; Call decsub ; Ret ; sar2 Ld Hl,two ; Ld De,one ; Ld Bc,0x0004 ; Call decadd ; Ret ; sar3 Call cmpr12 ; Jp C,sb12 ; Ld A,0x80 ; Ld (sign2),A ; sb21 Ld Hl,one ; Ld De,two ; Ld Bc,0x0004 ; Call decsub ; Ret ; cmpr12 Ld Hl,twom ; Ld De,onem ; Ld Bc,0x0004 ; cmpr Ld A,(De) ; Cp (Hl) ; Ret Nz ; Dec De ; Cpd ; Jp Pe,cmpr ; Ret ; shift Ld Hl,twom ; Ld De,shftm ; Ld Bc,0x0008 ; movlop Ld A,(Hl) ; Ld (De),A ; Dec De ; Cpd ; Jp Pe,movlop ; Ret ; ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sngsub Ld Hl,sign1 ; Ld A,(sign2) ; Cp (Hl) ; Jp Nz,difsgn ; And A ; Jp M,nega ; Call cmpr12 ; Jp Nc,sb21 ; Ld A,0x80 ; Ld (sign2),A ; Jp sb12 ; difsgn Ld A,(sign2) ; Add A,0x80 ; Ld (sign2),A ; Jp sar2 ; nega Call cmpr12 ; Jp Nz,neg1 ; Jp Nc,sb21 ; neg1 Xor A ; Ld (sign2),A ; Jp sb12 ; ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fpnorm Ld A,B ; And A ; Jp Z,noexco ; Ld Hl,fpace ; Ld (Hl),B ; noexco Ld Hl,fpacm ; Ld A,(Hl) ; Ld Hl,si ; And A ; Jp M,accmin ; Xor A ; Ld (Hl),A ; Jp aczert ; accmin Ld (Hl),A ; Ld Bc,0x0004 ; Ld Hl,fpext ; Call complm ; aczert Ld Hl,fpacm ; Ld B,0x04 ; look0 Ld A,(Hl) ; And A ; Jp Nz,acnonz ; Dec Hl ; Dec B ; Jp Nz,look0 ; Ld Hl,fpace ; Xor A ; Ld (Hl),A ; Ret ; acnonz Ld Hl,fpext ; Ld Bc,0x0004 ; Call rotatl ; Ld A,(fpacm) ; And A ; Jp M,accset ; Dec (Hl) ; Jp acnonz ; accset Ld Hl,fpacm ; Ld Bc,0x0003 ; Call rotatr ; Ld Hl,si ; Ld A,(Hl) ; And A ; Ret P ; Ld Hl,fpacl ; Ld Bc,0x0003 ; Call complm ; Ret ; ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rotatl And A ; rotl Rl (Hl) ; Cpi ; Ret Po ; Jp rotl ; ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rotatr And A ; rotr Rr (Hl) ; Cpd ; Ret Po ; Jp rotr ; ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ complm Ld A,(Hl) ; Cpl ; Add A,0x01 ; morcom Ld (Hl),A ; Cpi ; Ret Po ; Ld A,(Hl) ; Cpl ; Adc A,0x00 ; Jp morcom ; ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fpadd Ld Hl,fpacm ; Ld B,0x03 ; ckzacc Ld A,(Hl) ; And A ; Jp Nz,nonzac ; Dec B ; Jp Z,movop ; Dec Hl ; Jp ckzacc ; movop Ex De,Hl ; Ld Hl,fpopl ; Ld Bc,0x0004 ; Ldir ; Ret ; nonzac Ld Hl,fpopm ; Ld B,0x03 ; ckzop Ld A,(Hl) ; And A ; Jp Nz,ckeqex ; Dec B ; Ret Z ; Dec Hl ; Jp ckzop ; ckeqex Ld Hl,fpace ; Ld A,(Hl) ; Ld Hl,fpope ; Cp (Hl) ; Jp Z,shacop ; Neg ; Add A,(Hl) ; Jp P,skpneg ; Neg ; skpneg Cp 0x18 ; Jp M,lineup ; Ld A,(Hl) ; Ld Hl,fpace ; Sub (Hl) ; Ret M ; Ld Hl,fpacl ; Jp movop ; lineup Ld A,(Hl) ; Ld Hl,fpace ; Sub (Hl) ; Jp M,shifto ; Ld D,A ; moracc Ld Hl,fpace ; Call shloop ; Dec D ; Jp Nz,moracc ; Jp shacop ; shifto Ld D,A ; morop Ld Hl,fpope ; Call shloop ; Inc D ; Jp Nz,morop ; shacop Ld Hl,fpext ; Ld (Hl),0x00 ; Ld Hl,foext ; Ld (Hl),0x00 ; Ld Hl,fpace ; Call shloop ; Ld Hl,fpope ; Call shloop ; Ld Hl,fpext ; Ex De,hl ; Ld Bc,0x0004 ; Call adder ; Ld B,0x00 ; Call fpnorm ; Ret ; shloop Inc (Hl) ; Dec Hl ; Ld Bc,0x0004 ; fshift Ld A,(Hl) ; And A ; Jp M,bring1 ; Call rotatr ; Inc Hl ; Ret ; bring1 Rla ; Call rotr ; Inc Hl ; Ret ; ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fpsub Ld Hl,fpacl ; Ld Bc,0x0003 ; Call complm ; Jp fpadd ; adder And A ; addmor Ld A,(De) ; Adc A,(Hl) ; Ld (De),A ; Cpi ; Ret Po ; Inc De ; Jp addmor ; ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ si Db 0x00 ; simd Db 0x00 ; bitct Db 0x00 ; fpext Db 0x00 ; fpacl Db 0x00 ; fpacn Db 0x00 ; fpacm Db 0x00 ; fpace Db 0x00 ; work Db 0x00 ; work1 Dw 0x0000 ; foext Db 0x00 ; fpopl Db 0x00 ; fpopn Db 0x00 ; fpopm Db 0x00 ; fpope Db 0x00 ; ppwrk1 Db 0x00 ; ppwrk2 Db 0x00 ; ppwrk3 Db 0x00 ; pplsb Db 0x00 ; ppnsb Db 0x00 ; ppmsb Db 0x00 ; ppext Db 0x00 ; ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sign1 Db 0x00 ; sign2 Db 0x00 ; one Db 0x00,0x00,0x00 ; onem Db 0x00 ; two Db 0x00,0x00,0x00 ; twom Db 0x00 ; shft Db 0x00,0x00,0x00 ; shftm Db 0x00 ; ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |