Вещественная математика для Z80

Компьютер "Спринтер" http://sprinter.nedopc.org

Moderator: Shaos

Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

Вещественная математика для Z80

Post by Mac Buster »

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

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

Code: Select all

;
; 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                     ;
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

Post by Mac Buster »

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

Post by Vasil Ivanov »

Mac Buster wrote:В прошедшие выходные снова являлась совесть и спрашивала о продолжении библиотеки. В результате я на целый час засел за набор и форматирование исходника библиотеки дополнив её описанием формата чисел и подпрограммой умножения. Кроме этого прокоментировал все используемые переменные и одну из служебных подпрограмм. Пока выкладывать не стану, т.к. надо набрать подпрограммы деления и инициализации библиотеки. Тогда она скорее всего заработает полностью. А пока я так - дразню ;)
Я тоже сейчас являюсь к тебе ;) - давай комплектуй библу до конца.
Лишней не будет.
Vasil Ivanov
vasil-i@yandex.ru