nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 18 Apr 2024 04:10



Reply to topic  [ 3 posts ] 
Вещественная математика для Z80 
Author Message
Retired

Joined: 03 Aug 2003 22:37
Posts: 1474
Location: Moscow
Reply with quote
В прошедшую субботу ко мне явилась совесть в лице cr0acker-а и прямо спросила меня - когда я выложу библиотеку вещественной математики для Z80 в инет, дабы ей могли воспользоваться все ? Собрав остатки сил, которые были в моём распоряжении в воскресенье вечером, я донабрал оставшиеся 75 строк исходника, и даже вроде бы исправил все замеченые опечатки ;) Результат труда представляю на ваше рассмотрение. Однако следует иметь в виду, что здесь присутствуют исключительно подпрограммы вещественного сложения и вычитания, а умножение, деление и преобразование вещественного числа в и из ascii строки будут набраны после следующего визита совести :D Набирать достаточно тяжело, т.к. книжка небольшого формата и постоянно стремиться закрыться, так что мне приходится придерживать её одной рукой, а другой - вернее одним пальцем - набирать исходник в своём собственном редакторе (это попытка предупредить вопрос относительно странной ширины разделителей полей строк исходника). Вот промежуточный результат набора исходника. Использовать эту библиотеку по прямому назначению я пока не пробовал, просто добился отсутствия ошибок и предупреждений при ассемблировании ;) Да, чуть не забыл - в оригинале исходника каждая строка снабжена коментарием :D

P.S. Эх, вот если бы Shaos сделал подсветку синтаксиса z80 в форуме... :P

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                     ;
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


15 Nov 2004 01:21
Profile
Retired

Joined: 03 Aug 2003 22:37
Posts: 1474
Location: Moscow
Reply with quote
Post 
В прошедшие выходные снова являлась совесть и спрашивала о продолжении библиотеки. В результате я на целый час засел за набор и форматирование исходника библиотеки дополнив её описанием формата чисел и подпрограммой умножения. Кроме этого прокоментировал все используемые переменные и одну из служебных подпрограмм. Пока выкладывать не стану, т.к. надо набрать подпрограммы деления и инициализации библиотеки. Тогда она скорее всего заработает полностью. А пока я так - дразню ;)


15 Dec 2004 07:17
Profile
Doomed
User avatar

Joined: 11 Dec 2003 14:34
Posts: 413
Reply with quote
Post 
Mac Buster wrote:
В прошедшие выходные снова являлась совесть и спрашивала о продолжении библиотеки. В результате я на целый час засел за набор и форматирование исходника библиотеки дополнив её описанием формата чисел и подпрограммой умножения. Кроме этого прокоментировал все используемые переменные и одну из служебных подпрограмм. Пока выкладывать не стану, т.к. надо набрать подпрограммы деления и инициализации библиотеки. Тогда она скорее всего заработает полностью. А пока я так - дразню ;)


Я тоже сейчас являюсь к тебе ;) - давай комплектуй библу до конца.
Лишней не будет.

_________________
Vasil Ivanov
vasil-i@yandex.ru


16 Dec 2004 04:19
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 3 posts ] 

Who is online

Users browsing this forum: No registered users and 15 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.