Nola_Non CPL Nola Non

User Manual: Pdf Nola_NonCPL

Open the PDF directly: View PDF PDF.
Page Count: 31

DownloadNola_Non CPL Nola Non
Open PDF In BrowserView PDF
~AGEli

TDI... Z 80 CP! M DISK ASSEI'1BLER VERS I ON· 2. 21
SFUN

• INSERT A:MAC.ASM
@

· I NSEI:;:T A: S .ASM
@.REMARK !
@

@
@
@
@
@

'*

*
* *
**'*,

@
@
@

@
@
@

II

@

WHEN YIJU CARE ENOUG.H TO PROGRAM
THE VERY BEST II

@

ZGRASS V2.000000(lO
NOLA ,DONATO, AND TOI"l DEFANTI
(C) 1:978

@

@J3Y ,JAY

FENTON~

@
@

@!.
."
.. IN$J;R1 All ZRAM;:ASM
.LINK
.. I DENT SF I.J N
.PREL

; r NTERNAU::
• INTERN FIND
• INTERN LPAD
• INTERN SUBSTR

.+

.; FIND STRING
;PAD ON LEFT
; SUBSTRING

; EXTERNALS
;.EXTERN ALSTS
.EXTERN ARG
• E:XTERN. DIV1.6 '
.EXTERN ENDSTR
• ,EX TEF~N ERRPGM

.EXTERNm~TOPND

.~

EXTERN INC5IY
.EXTERN RETNONE
~. EXTERN :::PI:;:EE

;, I_PAD:-'
,
;'; ." PAD S·TR'~;'N.,'~_ {<:ON TH,E . . ·. LJ:!FT~

....

; ALLOCATE STRING
;AR(iUfYIENT PAr':;:SER
;DIVIDE::HLBV :1.6
; CLEAN UP FOR ::::TR I NG
; ERRORS
; GET OPERAND
;BUM~ IV TO NEXT ARG
; RETURN PI)INT
; PREI.:: 8TR I NO·

WI T~

CHARACTER $0 .IT FITS

.

~'.

. "

~';i',"

';SYNTAX=

.,

U~AD <':8TR TNI;3>.?· .('F.t EUjt:·
. ; -  - STRING WHOSE FfRST CHARACTER WILL

B~

USED A

·,

THE ~'AO, CHARACTER
 -:- INTEGER i3 I VI N13 THE LENGTH DES! RED FOR THE
FIELD
; RETURNS:
;
STR ING RETURNED WILI_ BE <:F I ELD> CHAF WAS TOO, SHORT. IT IS PADDED ON THE LEFT WIT
H THE FIRST
CHARACTER OF THE STRING  8NTIL IT FITS IN THE
FIELD
IF IT WAS TOO LONG. IT IS TRUNCATED ON THE LEFT
,
,CALLS:
ARG - ARGUMENT PARSER
GETSTO ,...." GET STR 11\113 OPERAND
CHKINT - GEl' INTEGER OPERAND
SLEN - STRING LENGTH FINDER-,
..
SFREE - FI~EE STRlNG '
DIV16 - DIVIDE BY 16
ALSTS -ALLOCATE STRING
,
ENDSTR - CLEAN .UP STRING
.
•
u

·

··

.;----

,.\.

+LPAD:

0000"
0(101':0002'0003"
0005"
0007-'
0009"

00:1.:1. .4C!;;i041 L~400

CIOOE"

CD

0011"
0015"

07
00
63 ':;' C

OOOE'-

0000:05
0:30l:?0400
E5

+
+
+
+
+
+

M.CMD[LPAD, •• LP~,O,AFIX[lj, •• LPARG •• oLPADJ[
• BYTE $CMDADR '
.BYTE ( •• LPX-LPAD)/16+1
.BYTE 0
• WORD AFI XI:L1J: (ilL "-1.011:;".1) *16+FSTINTJ
.WORD • "LPAD
· WOI=i:D .• L.PARG
.ASCIZ ILPADI

+J
• • LPAD: CALL
o • LPARG: • BYTE
PtJSH

AF

D5
CD

CALL
PUSH
PIJSH
CALL

006E'-

009!:i'"

13ETSTO

;GET 1ST STRING
',; I-IL->TOP QF STRING
; DE""'> 1!ST CI-IAR OF STR I!\IG
;B=LENGTI-I OF STRING

1-1
D

SLEN

;+

; SP - > TOP OF Si:IUI::;:CE:

"

l.!~rt. 'C:,H.~R ··,:(IF·;:< . S,~~l~IR'~E·

;

; B~: L,ENGTH 017 ,;.sqp~C~>;> , . , ' ,
; THE SECOND ,OPERAND rs THE ,PADCHARACTER~'I;:tNI;.N.. '
; TI-II£ FIRST CHAR Af:;TERIS ,·,I,..lSSt);~<'?W"~!'f~~i<.:i•.S}t1AtlE
TO '. GARBAGJ: CqLL£QTJ.THE,p,/ii:'P· Srrr.HNJ)/·r,··;·/··, ...•••. :;'. .... ..,:.
;.~

!".

PAGE :;:

TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21
SFUN

0021"-

lA
4F
CD OOOO:OC

(}O:;~2,"·

0023--

U)AX

D

MOV,
CALL

C.A
SFREE

;A = PAD CHAR
;C = PAD CHARACTER
;FREE IT

SI=w. -.,..)- TOP OF SOURCE
1ST CHAR OF SOURCE
; B = LENI3TH I)P SCIIJRC:E

; C = PAD CHARACTER
; THE LAST OPERAND IS AN INTEGER GIVING THE SIZE OF
THE FIELD NEEDED. IF THE STRING TO BE PADDED HAS
FEWER CHARS THAN THE FIELD LENGTH. IT IS PADDED
ON THE LEFT WITH THE PAD CHARACTER. IF IT HAS MORE,
; IT IS TRUNCATED ON THE LEFT TO FIT IN THE FIELD
;-

0026--CD 0083'0029'7B
002A--E1.
002B"- ·90
002C-FA 0038--002F'" 2016

CALL
!"IOV
POP
SUB
...11'1
.JRNZ

CHKINT
A,E
H

;GET FIELD LENGTH
;GET IN A
;HL->1ST SOURCE CHAR
;A=# TO PAD
;(1'-;:' MUST PAD

£1

•• Ll.
• • L5

SP -> TOP OF SOURCE
; THE STRING IS EXACTLY THE FIELD LENGTH. NOTHING
; NEED BE DONE TO, IT. ..1 TIS RETURNED AS IS
.

00:;: 1-'
0032'-00:;:4-(1035"-

;-

• • LEX: POP
• • EXIT: I'1VI
POP
. . IMP

D1
:3E08
El
C::3 OOOO:OB

D
A,$STRAm:::
H
RETNONE

;TYPE STRING
;RESTORE ARG PTR

;+

SP -> TOP OF SOURCE
1ST CHAR OF SOURCE
A ~ # OF CHARS TO TRUNCATE
THE STRING MUST BE TRUNCATED ON THE LEFT. IT H:;
TOO SMALL TO FIT IN THE FIELD. THE POINTER
(HL) IS ADVANCED TO THE FIRST CH?\R TO GO IN
THE FIELD AND THEN ALL CHARACTERS ARE MOVED
OVER (SHUFFLED)
;-

0038'0039--OO:;:A"
003B"

•• L1.:

?--;:.
.........

• • L2=

:3C
20FC
Dl
7E
1.2

00~3D'--

OO:;:E'003F--0040'0041. ,0042'0043"0045"-

E5

•

II

L:3=

2:;:

'1.{:;.
.87
,

",.'

H
H
A
••

;SAVE CHAR PTR
;, SK I P CHARS TO
;TRUNCATE STRING

--:.
L .0:.,

;DE->lST CHAR POS
;GET NEXT CHAR
;SAVE IN STRING
; BUJVIP
PTRS
.
"

D

A.M
D
H

o

.; UNT lL NULL[

A

AJ
.JRNZ
• i. L:3
.JMPR .."LEX

.0RA

+

~OF9

l8EA

PUSH
INX
INR
.JRNZ
POP
!"IOV
STAX"
INX
INX
1ST

; +"

".

<.

,"'.

.
' . !

THIi'STR1NG 'MUST BE PADDEDQNTHELEriWITH THE
; PAD CHARACTER. ANEW StRl,NG. I?; CREATED LA,RGE

..

.

TDL iaO,CP/M DISK ASSEMBLER VERSION 2.21
SF UN

PAGE 4

; ENOUGH TO HOLD THE NUMBER OF CHARACTERS IN THE
; FIELD

0047--0048'0049--004A'004D-004E-'
0051 ,-

·,-

47
E5
C5
21 OOOB
19

.

("!OV
PUSH
PUSH
LXI
DAD
CALL
CALL

'.

CD 0000:06
CD 0000:04

B,A

; SAVE # TO PAD'
;HL->1ST CHAR

H

B

H.$SASCII+1

D

DIVH:;
ALSTS

; HEADER PLU!:; NULL
;HL=# OF CHARS
;GET *" BLOCKS
; ACLOCATE STRING

SP -> TOP OF SOURCE
PAD LENGTH, PAD CHAR
lsi CHAR OF SOURCE
DE -> 1ST CAAR OF NEW STRING
; STRING IS CREATED. IT IS PADDED ON THE LEFT WITH
THE APPROPRIATE NUMBER OF PAD CHARACTERS
DE -> 1ST BYTE OF NEW STRING
;-

0054'0055-'
0056--0057'005:3--005';:"005A---

POP
XTHL
MOV
STAX
INX
DCR
JRNZ

C1
E'='
,-'
79
12

• .. Lei·:

1~:

05
20FB
;+

;B=PAD NUM,C=PAD CHAR
.; HL->1ST CHAR OF SOURCE
;A -- PAD CHAR
;PAD ONE
;BI.,.It1P PTR
;FOR a CHARS

B
A,C
D
0
B
• • '-6

. HL -)- 1ST CHAR I N SOURCE STR I NG
DE -) NEXT BYTE IN DESTINATION
; THE REST OF THE OLD STRING· IS COPIED OVER UNTIL
; THE NULL AND THE OLD 8TRINI:3 IS GARBPiGE COLLECTED
;-

005C--005D-'

7E
12

OQ5E--

23

OO!:iF---

("!(lV
STAX
I 1\1 X
INX
TST
Oi='TOP OF NEW
; CLEAN UP
!JFRE;E OLD STRING

SFREE
• • EXIT

;AND EXIT

[I

H

ENDSTR

; ++++ .

GET8TO
; 'GET

~TR.I·NI3"

; NEEDS:

"

·
·

.,

I Y-)- POSSI Bt:g'stR 1NI3

iJF!~RAND'

PAGE S

TDL Z:::O CP/M DISI< ASSE'''IBLER VERSION 2.21 ".
SFUI\I

;

·;,
·;,

IY -> NEXT OPERAND
HL -> TOP OF STRING
DE -> 1ST CHAR
EI~RCII~S:

ER.NULS - ERROR IF NULL
C:AI_LS::

GETOPND -: GET THE OPERAND
INC5IY ~ BUMP IY TO NEXT OPERAND

,
·;---006E'--

CD

0071--'
0072'-

7A
B:3

0073-'

2004

007S"0078'-

CD 0000:08

.0079'0079'007A'007D",
007E'--

007F--0080'"

O(JClO:09

3'~

GETSTO: CALL
GETOPND
TSTD
D
+
MOV
A,D
+
ORA
D
ZERROR ER.NULS
+
dRNZ •• 0001
+
CALL ERRPGM
+
• BYTE ER. NLiLS

;GET STRING
;IS I\IULL?[
+lJ

;YES? ERROR[

+ •• 0001: ]

DS
21 OOOA
'19

EB

E:L····
C:::: 0000: OA

PUSH
LXl

D
H,$SASCII

DAD

D

XCHG
POP
..JI"IP

H"
I NCS I Y

;SAVE: TOP PTR
;HL=OFFSET OF 1ST
;HL~>lST CHAR
;HL->TOP,DE->lST CHAR
; IY'-)-NEXT ARG

; +++-1-

'CHI NEXT OPEI=i:AND
RETURNS =
DE = INTEGE:R. t;:tPERAND (NON-NEGATIVE)
,
IY ...,.>AFTER INTEGER OPERAND
;
Z BIT SETIFDE=O, ELSE CLEAR

·

EI:;:RORS:
ER.NEG - NEGATIVE ARGUMENT NOT ALLOWED HERE
CALLS:
GETOPND - GI;:T OPERAND
INC5IY - POINT AT NEXT OPERAND
0083'"
0086<
Ot)89<' ,
008A:(
00:3B'- . .

.. 1;1}.,6I)Ol~:U:09
;:,cn 0000: OA'

'1Pi"

137

FA 00':;".1'" .

.' (:HI< I NT: CA1_L,

CALL
TST·
ORA,
';jh'\

"'1.8.10
. ').l,~.

GE;:rOPND
INC5lY
D
.-A.,

'a.
.,

[

AJ
.. .ERR

tr

;DEI=OPERAND

;NEXT CINE .'

I··O:'·1:'T
';I~FE'":-'A'T
I VE-?
.-,
" .... _..:J.<.
..... r.•
~_~

'.~

A,b'" .

; vE::::? .ERROR
? IS IT ZERO? £

:t

TDL ZSI) CP/M D I SI 1. ST CHAI:;: OF STI:;: I NG

·,

·
,

RETURNS:
DE - > AFTER NULL'
B
# OF CHAR IN STRING (NOT INCLUDING NULL)

=

;----

0095'"
0095"

0600

0097"

lA

0098"
0099'"
009A'"
. 009B'009C"
OQ9F'"
OOA2'"

B7
C:3
13
04
F2 0097"

SLEN:
+.IFN
XRA

CLR

B

;0 CHARS£: .
£:

;GET A CHAR
;IS NULL?£:

D

A
AJ

RZ
INX
D
INR
B
.JP
•• S1
ERROR
ER.OFLO
CALL ERRPGM
.BYTE ER.OFLO

CD Q?OO=08. +
17
+
+J

,OJ£:

B

MVI

Al J
LDAX
TST
ORA

+

B
-A.

. ; RETURN THEN
; BUMP f'TR'
; AND COUNTER'
;UNTIL OVERFLOW
; STRING. TOO LONG£:

;++++

·,
;

·•
·•

·,
,

SIJBSTR

FINDS THE SPEC I F I ED SIJB:3TR I NO,
!~YNTAX:

SUBSTR STRING. START, LEN
 ~ STRING TO TAKE SUBSTRING OUT OF
 - INTEGEI:;:SPECIFYING THE CHARACTER TO START
THE SUBSTRING AT (0 BASED)
 - NUMBER OF CHARACTERS IN SUBSTR I NG
RETURNS:
SUBs1-I:;:ING STARTING AT THESF'ECIFIEO CHARACTERW,HICH

0::'
1 '-'

·
·
,;
.,
•
'n

•

f

C:At~..·L·S:-

\
(iETSTO -GErst;'RI NG OPERAND
CHITOP OF STRING
H
; DE-)'lST CHAR
Pt.lSH
D
o'

(lOBA'"
OOBD'"
OOBE"

CD 006E'"
E5
D5

; GET. FIRST CHARACTER INDEX AND SKIP TO THAT CHARACTER
; IN THE SOURCE STRING
;

OOBF"
00C2'"
OOC:.::·"

CD 0083'"
El
2:30A

00C5'"
00e6'"
00C7'"
00C9'"
OOCA"

7E
B7

OOCB"
OOCC",
OOCD'"

-,',

CALL
POP
...IRZ
TST
+.IFN M
ORA
...IRZ
INX
DCX
TSTD
JYIOV
ORA
.J!"IPR·.

+

2=32F·
23'

iB
7A
B3

+
+

18Fi~

CHKINT
H
..-.
.. ...-=-..::.

M
-A. r.
AJ
•• NULL
H
D
D
A,D

MOV

..

CHAR OFFSET
CHAR OF SOURCE
ON
OF CHARS?C
J

;RETURN NULL STRING
~ S~< I PONE JYIORE
;DEC COUNTER
;CHECK IF OE
+lJ

D·
D

;I;3ET1ST
; HL...;..:> 1ST
;YES? GO
;RAN OUT
A.M

51

;+
; AI_I_IJ"::ATE EI\lIJIJI3H:' ,MI::MORY FIJR THE SIJBSTR I Nt3

; . THE CHARACTER C:t:IIJNT JYllI!:::T BE CONVERTED TO A !:rrRING BLOC
K
~

COUNT AND USED FOR ALSTS
IF THE LENGTH 18 0, IT MEANS THE REST OF THE SOURCE

;-

OOCF"
00D2"
00D3<,

. OOD4'~~
···,.0006·...

. ()orle:~·

"oboB"
OODC'"
OOPF~

OOEO'"

CD 0083'"
E5
05,

"::::EFF
····2S(H3,·

,....

21 : QOPB "

. 19,

1t.82=

'C:ALL

CHKINT

PUSH
pusH

D

. MVP
.JR'Z
L'

H

A,-l
It. II

$.3

H. $SASCII.:tc1
D
•....•

'.<1'\

CD 00.00:06·
7D
CD 00('0: 04

DIV1f..

A.L

ALST~;

;GET SUBSTR LENGTH
;SAVE STRING PTR
; !SAVE SUBSTR· LEN
, ;. IN CASE DE=O
'; O? UNKNOWN S I ZE
;HEADSRAND' NULL
;;HL'';'::if-fTESIZE
.'
,"
4.·.
;HL=BLCtCl"
OOFC"

OOFE"
,. 010l'~
, 0101"

OJ,
11 0000

:3EOS
C:::: OOOO:OB

ORA
..IRZ
LDI
...IPE
POP
CALL
POP
CALL
JMPR

• • NULL: POP
LXI
EX:
MVI
,.JJ"IP
o •

FIND:
.EN[!

[

/vIOV

,~C'

u

...::, __,

II

•

~34

H
ENDSTR
H
SFREE
•• EX

; SOURCE CHAR NULL?[
A? !VI
J
;ALL DUN
~COPY A CHAR
;00 AGAIN
; HL-:>TOP OF SUBSTR
; CLEAN Uf'
; HL-)'TOP OF ~30URCE
;FRF:;E IF NEED BE

HERE WHEN SUBSTRING IS NULL

• • :3BX: '.
C';iI

M
-A?
AJ

RET

D
D?O
A,$STRAOR
RET NONE

:;OE->SOURCE
; RETURN NUL.L
; RETURN TYPE STRING

TOL·Z80 CP//y1 DISK ASSEMBLER. VERSION 2.21.
SFUN
+++++ SYMBOL TABLE +++++
AASN·
BACKGR
CHARSL
CNTRL.C

005F
65CC
6500
65t:0
CPLAI~E 611C
CSFLAG ·t:.260
C:.C:O
(l01.l.
001::::
C.OP
C:. X:3
0007
DOTON 65CE
OEVCL2 6570
DEVCL6 t:.5:35
OI::VMO 65:3B
DEVTNB 65BF
OEVVB 65Cl
DEVVN 65B9
DIV1.6 0000: O~. X
EDBCNT 64AD
EDNAME t:.4Al
EDOCX 6808
EDPTRC 64AB
ERABIT 0002
ER.ASN 0015
ER.CNV 0016
ER. DII'1 00:30
ER.EDT 0035
ER.IMP 0003
ER.NAM 0029
ER.NUM (l02B
ER.OVE 001E
EI~. !:;EP 0021
. ER.SW 0032
EXTDEL 002E
E.TYP 0000
FCNT,-' 65D4
FCI\ITY 65£3
FOREGR 65DO
FSTINT 62EC
HCAREA 659:3
KBLOCK 65F1
OOOA
LF
MACTOP 625E
NBUSAVESP 62.:::;'
00';;>5'" .
.SLEN
STAKTO 6000
TAB
0009
TBFEND 6.5::;::;:
.-~.

',"

ALST8 0(100= 04
BLANK 0020
CHKINT 0083"
CNTRLO 65D';iI
CPLSIZ 0140
CURCX 6814
C.Cl.
00l.2
C.ST
0002
C.Y
0005
OEVBL 6589
OEVCL:3 6S7F·
DEVCL7 6587
DEVNJ"! 65B7
DEVTNC ~.5C:3
DEVVBL 6591
DEVVS 65C7
DOLPLH 621::8
EDCCNT 64A7
EDNCX 6:3(1C
EDOCY 680A
EDPTRL 64A9
ERRPG/y1 0000:08
ER.BOX 001A
ER.COR OO:lB
EI~. DIV 00:1.:3
ER.FMT 00::::8
ER.LAB 0025
.ER. NEG. 00:::: A
ER.NXT 001D
ER.PAR 002A
ER.SNP 00::::1.
ER.TER 0020
E.HVAL 0002
E.VAL 0001
FCNTK 65D5
0101'"
FIND
FRAGSI 0400
FWDPTR 65£7
INC5IY OOclO::OA
KEYFLG 67FF
LISTON 65E2
MAXFRG (1)40
NEWBOT 68:1.0
OLDCHR 64AO
ONEBI-'F 672''9
OPRSZ 655D
o.srz 0006
PIXVAL e.!:;ED
RAM END 7FI=F
RMDT/yIP 6538
SCNEED 0004
SOPRSP 653(1·
SIRS r Z"6:300.,;
TAPBUF 64B~:'
TEMPHQ·60CA.

X

X

I
X

ARG
BOTRAI"!
CLEARS
CNTRLU
CR
CURCY
C.CX
C.X
C.YF
DEVCLO
OEVCL4
DEVFB
DEVNT
OEVVA
OEVVC
DEVXCD
DOLPPT
EDLONG
EDNey
EDPN
EDSTR
ER.ARA
ER.CHN
ER.CTL
ER.DP
ER.FNF
ER.MAC
ER.NOT
ER.OFL
ER.REN
ER.SPC
ER.UFL
E.LVAL
FCNTH
FCNT!.::.
FIRST
FREELS
GETOPN
'INCRO
KEYPTK
LPAD
MNMX
NL
OLDCUR
OPRL
OUTOFF
O.SUB
POINTE
RAI'1STR
RLJBACk
SCRWIN
SOPRSZ
·SUBSTR
TAPCtlN
IF-IVJPS

PAGE 9

0000:05 X
6000
bOCA
0015
OOOD
6::::16
OOOB
000:3
00:1.0
6579
6581
65CB
t:.58D
~.!:iBO

65C5
~.5B::::

62EA
6812
6E:OE
6806
68l.A
002F
00(12
0.036
0037
001C
0022
0023
0017
002C
002E
00::::::::
0001
65D2
65D~,

64A3
65E5
0000= 0';:' X
65E9
653:;:

0000'"
e,5EB
OOOA
649F
0014
t:.2E7
0004

I

(:.4A7
6;~()O

OC:;ll;)p

..

6tep.'
~$3F

t)OA:;:<
64AF
62E5

1:

ARGSTK.60CC
BOTTOlvl 64A9
CNTRL o(l(le·
. CNTFRUBOUT 007F
'. ·St=:REE 'OOOO::OC X
iSrAel( 60C8
SC!BSTU .6534
TAPFiRO 6.4B1
TMPAI~G 67AD

TDL zeo CP/M DISt< ASSEMBLER VERSION 2.21
SFUN
++++-1. SYMBOL TABLE +++++
TOP
6818
TTYPTR ~.2El
V:3PTR 6573
VOICEO 6563
$AADR 0010
$ANY
001A
$BGPTR OOOF
$CPLBL 002A
$DOLOO ··0002
$FLAGS 0002
$GOSUB OOlA
$IVAL 0004
$LOCPT 0009
$NAI"lE OOOA.
$I\IULL 0002
$SAI"IE 0020
$STRPT 000:3
.BLN.K. 0000=03 X

TTYBEG
TXTWIN
VDCI-IAR
WRI"IODE
$ADDRF
$ANYNA
$BNDL
$CSBLO
$DVAL
$FORBL.
$IADI~

6261
67E2
64·9E
65EE
01)07
FFFC
0007
0028
0000
0024
OOOC
0026
0022
0009
0005
OOOA
0000

$KEYBL
$MIBBL
$NASCI
$NVALU
$SASCI
$TAF
.DATA. oooO·1t-

X

TTY END
UARTFL
. VDNLF
ZGIM2
$ADDRI
$ANYVA
$CALLE
$DATAP
$END
$FORPT
$INPBU
$LENGT
$MIBEN
$NDEL
$REPEA
$SLEN
$TYPE
.PROG.

PAtiE 10

62E1
649C
65CF
0001
001)5
FFFE
OOOD
0007
003.C
OOOB
00:1.:3
0001
001B
0080
001E
0006
0000
0102'-

TTYINT 62E3
USREND 65F1
VIPLH 6545
ZGREND 681D
$ADDR!:;: 0009
$ARGPT 0011
$CMDAD 001:3
$DOLDE 0001
$FADR OOOE
$FVAL OOOt.
$INPPT 0016
$LINPT 0005
$NAMAD OOOA
$NLINi< 0003
$RVSTU ·001:3
$STRAD 0008
$USE
0005
X

PAGE

TDL ZE:O CP/M DISI< ASSEMBLER VERSION 2.21
EF
,

• INSERT A=MAC. ASI"!

,

@

• INSERT A:S.ASM
@.REMARI< /
@

*
* * *
***.

@
@
@
@
@

*******

@

@
@

*

*
*

*

*

*******

@

@
C~

@
@

"WHEN YOU CARE ENOUGH TO PROGRAM
THE VERY BEST"

ZGRASSV2.00000000
@BY dAY FENTON • .NOLA DONATO, AND TOI"l DEFANTI

@

(C)

@

1'~7:3

@

@/

• INSERT A=NCUEQU.ASM
.INSERT A=ZRAM.ASM
.LINI< '
.IDENT EF
.PREL
; I NTEI:;:NALS
;-

• I NTEI:;:N ARCCOS
• INTERN ARCSIN
., I NTERN ARCTAN
.INTERNCNVFS
• INTERN COSINE
• INTERN EXP
• INTERN FORMAT
• INTERN GETNUM
.INTERN INT
• INTERN LN
• I NTERN LOG
• INTERN PI
• INTERN ,POWER
• INTERN SINE,
• INTERN SQRT
• INTERN TANGENT

;ARC COSINE FUNCTION
;ARC SINE FUNCTION
;ARC TANGENT FUNCTION
;CONVERT FLOATtNG TO STRING
;COSINE FUNCTION
;EXPONENT FUNCTION
;FORMAT ASCII OUTPUT
;PARSE FLOATING NUMBER
; INTEGER CONVERT
;LOI3 NATURAL FUNCTION
;LOO BASE 10 FUNCTION
;RETURN VALUE OF PI
;POWER FUNCTION
;SINE FUNCTION
; SQUARE ROOT FUNCTION
;rANGENT FUNCTION

; EXTEI:;:NA,LS,
;-

• EXTERN "ALSIS,
.EXTEt='(NARG
; " • EXTEftN CARTYP
". ExrEF(N, ·CVDSTR
'.~XIE.RN CV~STR

"'CA'
L'" _,_.~.,
J"·it·A'~E
ST' R'I'. NG'..J"
'"I
1,'
"'~_..
';.PARSE ARGUt'lgNT$
'rFIND CI..fA~ACfE~ TYPE

;'CONVERT" (!OLiBLE, TO , SrR I NG
; CQNVER'r",FRACTION TO STRING

j.

TDL
-EF

zeo

CP/MDISK ASSEMBLER VERSION 2.21

PAGE 2

;DO NCU OPERATION
;CLEAN UP STRING
; I::RROR TRAP
;PUSH FLT NUMBER
;GET MOST SIGNIF BYTE
;GET OPERAND
;POINT TO NEX~ ARG
;POP INT FROM NClI STACK
; PlISHO ONTO NClI !::;TACK
;PUSH INT ONTO NCU STACK
;GET FROM IY TO NCU
;FOR LOG LINKAGE
;GET FROM NClI TO IY
;FOR POWER LINK
;POP OPERAND
;PUSH FLOATING 10
;PUSH OPERAND
; PUT OPERAND
; RETURN
; FOR SG!RT LINK

.EXTERN.DONCU
.EXTERN ENDSTR
• EXTEI=!:N ERRPGM
'. EXTERN. FRUSH
.EXTERN GETMSB
• EXTERN GETOPN[I
.EXTERN INC5IY
.EXTERN IF-OP
.EXTERN IPSHO
.EXTERN IPUSH
.EXTERN IYNCU
.EXTERN LPAD
• EXTEF

FLOATING POINT OPERAND

RETURNS: '
IV-)- STRII\IC-i CIPEFlAN.rl

;

CAI_LS::

·,

ALSTS - ALLbcATE STRING
ENDSTR - CLEAN UP AFtER STRING
GETOPND, PUTOPND - FETCH, PUT OPERAND
GETMSB.- GET MOST 'SIGNIFICANT BYTE
INTPT - CONVERT INTEGER PART
FRACPT - CONVERT FRACTIONAL PART
DONCU - DO NCU OPERATION

·,•
·; ----"
.

'0000'"
0000"
0001"
000:3"
0006'-

0007 . ··

oa08'"

Q(I(lB'"

(lOOE"

CNVFS=

C5
:;::E01
CD 0000:04
Er;:,
EB
en OOOO:OE
CD 0041"
CD 0(l4F"
...1

~>

H"

, ;·:~c

PlISH
Mvr
CALL
PUSH
XCHG
CALL
CALL'
CALL

;SAVE BC
A,' ($SASC I 1+ 1:':: ) I 16
ALSTS
;ALLOCATE STRING
H
;SAVE PTR
;HL->WHERE TO PUT DATA
, GEYOPN.D"
; GET NUM ON NCU·
.;DD" THE SIGN
'
MSON .
;- NoliMALI
IE
THE
NUMBEF<
NORMLrZ'
_.
B

== BASE'l I) EXFkiNENT

; IF. THE, .a~SE 1 0 ~xptINE:NrI!~
; . ~JSE :3C1ENTlP'I'C~:" .~ITA7f:-X:CI1\l

. .

,

. ,

PAGE

TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21
EF
CNVFS - CONVERT FLOATING TO STRING
001 t ..'
0012'"
0014"
0016"
00:1.:3'"

'OO:LA"

• • CA=

7'7

FEO]
:3810
FEFD
300C
CD OOFE'"

•• Cl:

!VIOV
. CPI
.JRC
CPI
.JRNC
CALL

A,C
6+1

:~~

;A=BASE 10 EXP
;EXP<:7? NORMAL
;EXP<:7? 1\I0Rt1AI..
; EXP<:-::::? SCI NO

-3
.i. C2

;SCIENTIFIC NOTATION

SCINO

H-

; EXIT, CLEAN UP AFTER STRING AND PUSH IT
;-

001D"
LL 001 D'001F'"
0020'"
002:1."
0023"-

:3600

• • EX:

CLR

+.IFN M

XRA

AJJ
POP
POP

01

C1
:3E08
C::·
...... 0000:1A

1"1 V I

dMP

M

; TI~AII..ING NULl-I:

-A?, ?[ MVI

M

D
B

;HL->TOP OF STRING
;RESTORE BC
;TYPE STRING
;SAVE STRING

A, $STI~ADF<
PUTOPND

, 0'7'J [

C = BASE 10 EXPONENT
IF 0, .NNNNNN
IF <:0, .OONI\II\INI\IN
ELSE, NN.NNNN
0026'"
0029'-

CD 002B"18F2

;++++

CALL
dMPR

; NORI"IAL NOTATION
.AND EXIT

NUMIT
•• EX

NUMIT
CONVERTS A FLOATING POINT NUMBER TO AN ASCII INTEGER
AND FRACTINAL PART
NEEDS:
BC = BASE 10 EXPONENT
HL -> WHERE TO PUT FIRST DIGIT
,
NCU STACK HAS NORMALIZED NUMBER

·

I~ETURNS:

;

·,

HL -> AFTER LAST DIGIT
BC DE:::;TROYED
CALLS:
FLTOUT - GET 6 DIGITS
FRAC, FRACPT - FRACTION PART
INTPT - INTEGER PART

;---~

002B"
002C"
0()2F<
OCl;:::(l,'

0033('
0034"
1)O:::5~·

(10:36'"
0031"-

E5
21- 64 A::::
E5
CD OOE7"
D1
1:::1
79
B7
CC 00C6"

NUMIn

PUSH
LXI
PUSH.

C:~ALL
POP'
POF-::l,:'

'T:3T
+.IFN C
+

H,NUMBUF
.H

.'

fo"LTOUT

;GET 7 DIGITS
; DE - :>NUMBER BUF
I N'.'-'
....
,•.:H·. L;-""='TR
...~ ._'
. ". '; CHECK BA~=:E 1. I) EX P r.

D
H
C

-A, I:

ORA
CZ

;SAVE OUR PTR
;HL->NUMBER BUFFER

H

'.'

rloV.·

',

A.e

A:l

FRAC

;.NNNN

J

TDl LBO CP I M DISK ASSEIYJBLER VERS I ON :2. 21
EF
CNVFS - CONVERT FLOATING TO STRING
003Ao003D, 0040'"
o

FC OOBBooo
C4 00B2'"
C9

PAGE 4

; .OONNN
;NNN.NNN

FRACPT
INTPT

CM
CNZ
RET
;++++

MSGN
TAKES CARE OF THE SIGN OF THE MANTISSA OF A
FLOATINQ POINT NUM~ER. IF IT IS POSITIVE, NOTHING
IS DONE. IF IT IS NEGATIVE, A . . _... IS PUT IN THE
STRING AND THE SIGN OF THE FLOATtNG NUMBER ON
; TI-IE TIJP elF THE I\IC:IJ STAC:I<: IS C:HAJ\J13EI).

·;, NEEDS:

HL ->WHERE TO PUT SIGN IN STRING
NCU -> FLOATING POINT NUMBER

·, RETURNS::
·•

NCU -> POSITIVE FLOATING POINT NUMBER
HL -> AFTER SIGN (IP ANY)
CALLS:,

0041 0,0
0044 0 0
0046 00047 0004,9 0 0
004A'0
004C'0

"

- GET EXPONENT
·, GETMSB
DONCU - DO NCU OPERATION
';---•.
CD O(l(l(l:OD
E680

CALL
ANI
RZ
MVI
INX
MVI
.JMP

MSGN=

':::3

:362D
:23
3E15
,-.._,,:.
........ 0000=09

,GETMSB
N.MSGN
M, ,00_0,0
H
A,N.CHSF

;(-iET EXPONENT
;CHECK MANTISSA SIGN
;POSITIVE? LEAVE IT
;SIGN IN STRING
;;AFTER THE SIGN
;GET ABSOLUTE VALUE

DONI~U

;++++

NORMLIZ, NORMLZ
NORMALIZES A FLOATING POINT NUMBER WITH, RESPECT TO
BASE 10

·
,

NEEDS::,
NCU->NUMBER .NNNNNN * 10**M
Be: = BASE 10 EXPONENT ( NOF BASE 1.0 l'1ANTISSA • NNNNNN
BC = BASE 10 EXPONENT + M

;
;-~--

004F ooo
OtJ.4F

oo
O

(U)s:;zr
9t)!;5!t/
0057,0
0058'-

NORMLIZ=
010(1)0
3E17
CD 00QO:09

EO
t:~,

LXI

,"+

MVI
CALL
,TST
ORA
RZ

B.O

,.

, Aj N. PTOf:'

DONC:U. '"

At
,AJ

,;BASE
. , . ,- 10 EXP
fIF!S O.

','

;RETdRN" '

o

TDL Z80 CP/M DISK 'ASSEMBLER VERSION 2.21
EF
CNVFS - CONVERT FLOATING TO STRING
0059"
005C'"
005E."
OOe.O·'

0062"
0064'"
0066"
006E:'"
0069"
006B"
(1)6C'"
006F"
0070"
0073'"
0075"

CD OOOO=OD
FE40
:2:St)4

FE56
:3:::14
C6EB
E67F
57
:I.EEO
D5
CD 0000: :L 1
01
CD 0000:1.2
3E10
CD 0000=09

•• N1:

;+

;

007::3"
007B'"
007C .'
007D"
007F"

CD 0000:00
B7
C:::::

E640
2826

..

CALL
CPI
.JRC
CPI
.JRC
ADI
ANt
MOV
I"IV I
PUSH
CALL
POP
CALL
MVI
CALL

PAGE 5

GETMSB
N.ESGN
• .N1
#N. MSGN~'I.-42
NORI"ILZ
..,.21
#N.I"ISGN
D,A
E,(lEOH
D
IPSHO
0
IPUSH
A,N.FADD
DONCU

;G8T EXPONENT
;EXPONENT NEGATIVE?
;NO? L.EAVE IT BE
;IS TOO SMALL?
;DONT ROUND THEN
;SHIFT TO THE RIGHT
;KILL THE SIGN

; ROI.:JND I T UP

NORMLZ ,- ACTUAL NORMALIZATION
THE BASE 2 EXPONENT IS CHECKED
IF IT IS 0 - WE EXIT
IF IT IS) 0 - WE DIVIDE BY 10.& CHECK AGAIN

NORI"ILZ: CALL
TST
ORA··.
+
RZ
ANt
.JRZ
;+

GETI"lSB
A
AJ
N.ESGN
• • NO

;GET EXPONENT
; IS IT O?[
;RETURN IF SO
;IS IT NEGATIVE?
; DIVIDE BY 10

BASE 2 EXPONENT IS .( 0. IF THE NUI'1BER WE HAVE IS
; LARGER THAN OR EQUAL TO .1, WE CAN EXIT. OTHERWISE
; WE MUST MULTIPLY BY 10 AND CHECK AGAIN
0081'"
008:;:"
00E:6"
0087'"
008A'"
0080'"
OO:3E'"
Q090'"

:3E:I.7
CD 0000:09
E5
21 0350'"
CD OOOO:OC
E1
3E:I.1
CD 0000:09

0093'"
00'7'.4"
009!:i"
0097"
009A'"
0098"
009C"
009F'"
OOAO"
OOA2"
OOA!:i'"

87
F5
3E1:3
CD 0000:09
F1
FO
CD 0000: 1:::

OB

381:2
CI::tOOQO:09

laDA

;a'u NM::

+

MVI
CALL
PUSH
LXI
CALL
POP
I"IVI
C,t)LL
TST
ORA
PUSH
MVI
CALL
POP
RP.
CALL
. Dt:::X
1"1 V I
CAI-L
. .JfYfPR

A.N.PTOF
DONCU
H
H,PT1
FPUSH
H
A,N.FSUB
DONCU
A
AJ
PSW.
A,N.POPF
DONCU
PSW
PSHF10· '.
B
A, N. FMI~L;.
.DONCIJ
• .NM

; SAVE NUfYlBER
; SUBTRACT • 1
; HL-)·. 1
;ON NCU STACK
; SUBTRACT JO
; COMPARE THEM
; SAVE C:C:···~3[
; KILL RESULT
;(;ET CC·'·S
; RETURN IF ).= • 1
; ELSE PUSH.I0.
; DEC BA:;::E 1:0 EXP
; AND MULTIPU(
;~/.:~<

'

,c'

;CH~CJ<: AGAIN

;+
; BASE 2 EXPONENT ::~ 0, wEth~l:r,!E' B'{10AND
;CHE;CK' 'AG/U N . '

TDL z80tP/M DISK ASSEMBLER VERSION 2.21
EF
CNVFS - CONVERT FLOATING TO STRING

OOA7'"
OOAA'"
OOAC·'·
OOAF"
OOBO'"

CD (1)00:: 1.8

; ....
• • ND:

CALL
MVI
CALL
INX
.. JMPR

~:E13

CD 0000=09
O'=....'
18G6

PAGE 6

PSHF10
A,N.FDIV
DONCU
B
NORIVJLZ

; PUSH 10.
;AND DIVIDE
; BUMP BA:5E 10 EXP

;++++

; INTPT
PUTS THE INTEGER PART OF A FLOATING POINT NUMBER
INTO THE GIVEN STRING

1

NEEDS:
DE -> F.IRST DIGIT OF NUMBER IN BUFFER
HL -> NEXT BYTE IN STRING TO STORE INTO
A ~ BASE 10 EXPONENT (IF <=0, RETURN)
RETURNS:
HL -~ AFTER INTEGER PART (IF ANY)
tiE: -:> AFTER LAST INTEGER DIG I T
B DESTROYED

;----

00B2"
00B3'00B4"
00B5'"
00B6'"
(lOB7'"
00B9"

4·7
1A

MOV
LDAX
INX
MOV
IN.X
D....INZ
..JMPR

INTPT=
• • II::

12=

77
23
10FA
H30B

B,A
D
D
M',A
H

;B=BASE :to EXP
;A=NEXT DIGIT

•• 11

; UI\lTIL. AL.L DONE
;DO F8ACTION

; COpy DIGIT

'FRAC

;++++

; FRACPT
; COPIES THE REST OF THE FRACUIONAL DIGITS FHOM
BUFFER INTO STRING. DECIMAL POINT ADDED, TRAILING
ZEROS SUPPRESSED

·,

NEEDS:
DE -:> FIRST FRACTIONAL DIGIT
HL -)- WHERE TO PUT DIGITS IN STRING

; RETURNS:
DE -) AFTER LAST DIGIT
HL -:>NEXT BYTE IN STRING
,

·
7

·;---OOBB"
OOB])"
OOBE'"
oqCO'"
P9'[:;I····
OOG4:,o'
ID(lC4'"

:36212:
',.23

3630
23
3C
20FA
1:303

.

FRACPT= ,MVI
INX
• .Fl.:
I"IV!
INX
INR
, ....IRNZ
JMPR'

M,
'H

.~

H··.

; PUT IN "DEC PT
;LEAD.ING tEROS
';;Bbl¥te~CEXf'QNENT

lllNT:rL, 0 ,'.

; RESTOF-,"6i1:,1ITS

PAGE 7

TDLZSO CP/M DISK ASSEMBLER VERSION 2.21
EF
CNVFS - CONVERT FLOATING TO STRING
;-

00C6"
OOCS·'
OOC·~··'

OOCA'"
OOCB'"
OOCC··'
OOCD"
OOCE'"
0000'000:1."0003'"
0004'"
OODS'00D7'"
OODS'"
OODA"
OODC'"
OODD'"
OODE'"
OODF'"
OOE1'"
O(tE2"
OOE4....

:362E

FRAC:

23
:I. A
I?
....

FRACX=

77
23
B7

+

201=-9

2B
:3E:~:0

2B
BE

••

F"'-·II
..::: II

2:3FC:

7E
FE2E
200:3
2B
7E
B?

+.IFN M
+

200::::
'2:3

3630
23

OOE5"

AF

OOE6-"

C·~

+.IFN A
XRA
;++++

· FLTOUT
~

; CONVERT NORMALIZED FLOATING POINT NUMBER TO A
DIGIT STRING (NO DECIMAL POINT, ASSUMED TO BE
AT THE FAR LEFT)

·,

NEEDS:
HI_ .-:> BIJr"FER Tel STORE! AT I_EAST /:., [IICiITS: 8(
NCU~> BASE 10 NORMALIZED FLOATING NUMBER

·, RETURNS:
-> AFTER
··,, HL
DE!::;TROYS B.
;---.....:

(lOE7"00E9'"

OOEA/
OOEn···O.CIFO·"
OOF1-'
OQF3"
OQF6--

OOFS-"

0605,
E5'
21 0361.';. CD.. OOQO: QC
. E.1 .
3E.12
CD OOOO:O'~1
3E1E
CD 0000:09

NIJI_I_

LAST DIGIT
NCU

.

B,5

FLTOUT: lVIVI·
PUSH
LXI
CAtlL
POP

H,TEN6
. FP.USH
H..

i

M\lI'

.;.

A1N~FMIJL

!"IVI.

CALL

;FIELD WIDTH
;PUSH 10*-*6
; eiN NCU STACK

H

DO NCl.J

. . A.I\I.FIXD·

GALL ...

DONCU

; cqNVERT T'O I NT

TDLze':i' CP/M DISK ASSEMBLER VERSION 2.21
EF
CNVFS - CONVERT FLOATING TO STRING
OOFB"

C:3

0(1)1):08

.JMP

PAGE 8

CVFSTR

; PUT IN STF AFTER SIGN IN STRING
NCU-> FLOATING MANTISSA OF NUMBER
BC = BASE 10 EXPONENT

,

RETIJRNS:
HL -> AFTER EXPONENT DIGITS
;

Be:, [IE, "JCtl [IE:3TRCIYED

;--- .....

OOFE'"
OOFF"
0101'"
0102"
0105"
0107'"
0108"
0109'"

C5
362E
23
CD 00E7"
3645
23
Dl
CD 0000:12

01.O.C·'
010D'"
OiOE"
0113."
0113"
0116"
0119"

7A
B7,

SCINO:

+.IFN D
+

11 0000
28():3

11 FFFF
CD 0000: :1.2
C3 0000:07

PUSH
MVI
INX
CALL
MVI
INX
POP
CALL
TST

.;++++
,

ORA
LXI
.JRZ
LXI
CALL
.JI"IP

; SAVE BASE 10 EXP
:; DEC I I"IAL POINT

B
M, .' .'
H
FLTOUT
M, "E'"
H
D
IPU!:::H
D
.... A, t:
AJ
D,O

.

;OET 7 DIGITS
; EXPONENT
;DE = BASE 10 EXP
; DOUBLE IT,
; CHECK HI BYTE[
A,D
J

~IOV

; ASSUME POS
;OK
; NEGATIVE
; PUSH HI BYTE
; INTO STRING

11·.81

D,-1
IPUSH
CVDSTR

; GETNUM
PARSES A FLOATING POINT NUMBER FROM A STRING
; NEEI)S::
u

•

HL ->'FIRST DIGIT OF STRING

RETURNS:
FAIL:
C BIT SET
FAILS IF NO DIGITS AT ALL
SUCCI:::ED=
,
HL ...:.> AFTER LAST DIGIT, EXPONENT. ETC •
TCIP OF NCtL STACK HAS GLOATING ,NUMBER
:; ,
'A = $ FVAL 'AFTER OP
; PARSE FRACTION

GETINT
B,O
A.M

.

..- ..-

It

.132

H
GET I

;+

; IF AN EXPONENT IS FOUND, IT IS PARSED AND
; AbDED TO THE CURRENT EXPONENT IN B
;-

CD (It :::D ,.
:;:E1C
CD 0000=09

01.34'"
0137"
01.:39"

'* ..

CALL
MVI
CALL

132::

'GETEXP
A.N.FLTD
DONJ::U

;PARSE EXPONENT
;CONVERT TO FLT

;+

HEREB = BASE 1.0 EXPONENT AND THE STACK HAS
THE FLOATING NUMBER PARSED WITH THE DECIMAL
; POINT TO THE FAR RIGHT. WE MULTIPLY/DIVIDE
THE NUMBER OF TIMES INDICATED BY THE EXPONENT
; TO GET, THE TRUE VALUE
;-

01:3C"
013C"
01.3D···
013E'"
01.40'"
014~:···

0146'"
0148"01.49 ,.
014C'"
Ol.4E·'

TST
78
B7
2816.
,FA Ol.4E·'
CD 0000: 18"
3E12
05
CD 0000=09
18EE
CD (I(IOO:H3

+.IFN B
ORA
..JRZ
,JM
CALL
IYfVI
DCR
CALL
.JMPR
CALL
MVI
INR
,.JMPR
MVI
RET

+

01!l:il" "

01.53" .

'.

04

."

"

,18F3
Of54~'
0:l56", ,"; 3E06';
01.58":' C9

•• EX:
;,++++.

'r NT',• ,r'E1"]'
.:J _
•

, ,•''. ;("E1"
)
"

B
':"A.

[

MOV

; EXPONENT O?[
A.B

]

A]

•• EX
u

•

(35

PSHF10
A. N. FIYJUL
B
DONCU
II.

G3

PSI-IF10
A,N.FDIV
B

; YES? CAN EXIT
; NEGATIVE? DIVIDE
; I"IUL TIPLYBY :LO.O
;DEC EXPONENT
;DO IT
;GO AGAIN
;DIVIDE BY lO.O
rBUMP EXPONENT

•• 134

,A. $FVAL

;RETLrRN TYPE FLT

'-OL Z:::cliCI::)/M DISK ASSEMBLER VERSIQN 2.21
EF
CONVERT STRING TO FLOATING

PAGE 10

INTERNAL ROUT INESTI) PARSE 1. NTEGEr~ AND MAINTAIN
;

A 2:2 BI"T NtlMBER ON NeLl STAC"K. THE EXPCINENT IN
B IS DECI~EMENTED EVERY T I ME A D1: G.I T IS PARSED

NEEDS:
HL .;..> DIGIT
NCU STAI'::K HAS CURRENT NUMBER FOR GETI, GETINT
;
WILL PUSH A 32 BIT 0
'; RETURNS:
, .FAIL:
C BIT SET
•
FAILS IF NO DIGIT FOUND
SUCCEED:
HL -> NON-DIGIT
NCU STACK HAS 32 BIT INTEGER PARSED
,
CALL:
,
CARTYP - CHECHK CHARACTER TYPE
DONCU - DO NCUOPERATION
IPSHO - PUSH INTEGER 0
I PUSH - PUSH I NTEr:.~ER

·

·

·
·
·•

0159'"
015C"015F"01.62"-

CO 0000:11
CD 0000=11
CD 0000:06
3027
7E

0:1.64"
0165'"
0166"

06::::0

0168"

1600

016A,"
Oi6B';'
016E'"
0171 ;.

;2~:

5F
CD 0000:12
CD 0000:11
3E2C
CD
1)000:09
017~'"
0176'CD 0000:06
0179"
DO
11 (looA
017A"CD 0000:12
Ot70"
CD 0006::11
0180'"
3E2E'
0183~'
0185l
CD 0000:09
05
0113=3'"
0189", ' 18D9
C:X'18EF
37
C9

GETINT:: CALL
CALL
CALL
.JRNC
GI:
MOV
INX
SUI
CLR
+.IFN D
XRA
AJJ
"'IOV
CALL
CALL
MVI
CALL
CALL
GETI=
RNC
LXI
CALL
CALL
1"1 VI
CALL
OCR
o..:IMPR
.8T(:
FAIL:
; +++-I~

IPSHO
IPSHO
CARTYP
FAIL
A,M
H
,"0'D
-A, C
E,A
IPUSH
IPSHO
A,N.DADD
DONCU
CARTYP
D,:LO
IPUSH
IPSHO
A,N.DMUL
DONCU
B
.81

;PUSH 32 BIT ZERO
; CHECK OHJIT
;FAIL RETURN
;A=OIGIT
;HL->AFTER DIGIT
;GET IN BINARY
;PLlT IT IN DE[
MVI

D

;PLlSH ON NCU STACK
; PAD, HI ORDER
;ADD TO RESULT
;CHECK NEXT DIGIT
;RETLIRNIF NOT DiG
, ; PUSH INTEGER 10
;ON NCLI STACK
; MUL t IPL YOUR NUM ("
'; BY 10
' ",
;DEC EXPONENT
; CONTINUE
;SETCPtRRY

R~T

; 'J3ETEXF
',"
; ~PARSEF.::XPONENT I1~ STRING AND REtiJ~N IN B

,

, :0

,OJ[

PAGE 1.1.

TDL Z:~O CPII"I DISI< ASSEMBLEI~ VERSION 2.21
EF
CONVERT ~:::TRING TO FLOATING
NEEDS::
HL ~> POSSIBLE EXPONENT IN STRING
B = OLD EXPONENT OR 0
RETURNS:
HL -> AFTER EXPONENT (IF ANY)
B = OLD EXPONENT PLUS NEW EXPONENT

.'

,
.;

C:ALLS:

GETINT - PARSE INTEGER
DONCU - DO NCU OPERATION
IROP - POP INTEGER
;----

01::::0"

01SF"
01'?0'"
0191"
0:1.92 "
0193"
O1.'?5'"
0196'"
019:3 ..'
(1199 ..'
01.9C"
019F"
01A2"
01A3'"
OlA4'"
01A6'"
OiAS'"
01A·;:.···
01.AA.···
01AB"

FE45
CO
C5
22:

7E
FE2D
F5
2001
23
CD 0159'"
CD 0000= :1.0
CD 0000:10
Fi
78
2002
ED44
Cl.
SO
47
C9

GETEXP: CPI
RNZ
PUSH
INX
I"IOV
CPI
PUSH
.JRNZ
INX
•• 131:
CALL
CALL
. CALL
POP
MOV
.JRNZ
NEG
POP
'32::'
ADD
MOV
RET
M

..

"'E"
B
H
A,M
"-"
P~=;W

•• 131
H
GETINT
IPOP
IPOP
PSW
A.E
•• 132
B

a

B.A

; 1: !::; EXPONENT?

;NO? SIAFTER E
;A = NEXT THING AFTER E
;CHECI< SIGN
; SAVE CCS
;NO SIGN?
; HL-:>AFTER SIGN
;GET EXPONENT
;POP HI PART
;DE=EXPONENT
;WAS THERE A ~:;IGN1
;A=EXPONENT PARSED
;NO SIGN
; NEGATE IT
;B=OLD EXPONENT
;ADD TO NEW ONE
; SAVE IN B
;AND RETURN

; ++i-+

; POWER
;----

01AC"
OlAD"
01AE'"
01.AF···
01Bl'"
01B3'"
01B5"
01BB'01.BC'·
OlBF"
01.C2···
:" 01e5,:'
01CEv'
01CB'"
~

lS
0:3
00·
0000:16

+POWER=
+
+
+
+
+

01BC'"
01BF'504F57 4~i5200+
+J
·.'Oti .'

CD

0000:05.
tJ6.tZ16QO
.

"CD OOOd:13
CD 0'000: OF
CD OOI)C): 1 ::::
3EOB

M.CMD[POWER, •• POWX.O.PLAY ••• PARG ••• POWJ[
• EYTE $CI"IDADR
.BYTE ( •• POWX-POWER)/16+1
.BYTE 0
.WORD PLAY
.WORD •• POW
.WORD ... PARG
. ASCIZ /POWER/.

• BYTE
•• POW:: CALL
•• PARG:' .BYTE
CALL
CALL
CALL
MVI'

o
ARG
$FVAL.$FVAL.$TAF·
IYNljlj
; GET 1,8T ARG
INC5IY'
~POINtAT 2ND ONE
IYNCU
.;AND2Nfj ARG
A. N. PWR
; PtlWER FUNCT I ON

TPL Z::fO CP 1 M D18K ASSEMBLER VERS I ON 2. 2l
EF
FLOATING FUNCTIONS
01.CD"
01CF"

.JMPR

181B

PAGE :1.2

FRET

;AND RETURN

• • POWX=
;++++

.

; SIN
•

,

;----

01CF"
01DO···
OlD~"

01D2···
01D4·'
01D6···
01D8'·

18

+SINE:

0::::

+

00
0277'"
01DE···
01E4···
534'S"/4E.l~500

M.CMD[SINE.SINX.O.SQRT.FNARt ••• SINl][
_,BYTE $CMDADR
.BYTE (SINX-SINE)/16+1
.BYTE (I
.WORO SGlRT
.WORD •• SINl
.WORD FNARG
.ASCIZ ISINEI

+

+

+

+
+
+]

01DD···
OlDE·'
01DE"
OlEO'·
OlEl ,.
01E4·'
01E6"
01.E9"
OlEA···
O:LED···
01EF·'
01F2"

00

3E02
F5
CD 0000:05
0600
CD 0000:13
Fl
CD 0000: O'S"I
3E06
C30000:1B

• • SINl:
FFUN=
FNARG=
FRET:

• BYTE

(I

MVI
PUSH
CALL
• BYTE
CALL
POP
CALL
MVI.
...IMP

A,NaSIN
PSW
ARG
$FVAL.$TAF
IYI\ICU
PSW
DONCU
A.$FVAL
RETNONE

;SINE
; SAVE OPERATION
;GET ARGUMENT
;OI\lTO NCU FROM IY
;A = FI..INCTION .
; RE~=;ULT ON NCU
; FLOATING VALUE
; RETURN

SINX=
;++++

-•
; COS
;----

01F2'·
O:l.F3·'
01F4·'
01F5'·
01F7"
OtF9···
01FB·'

M.CMD[COSINE •• ~COSX,0.AFIX[C],FNARG •.• COS1][
+COS!NE: .BYTE $CMDADR
.BYTE ( •• COSX-C08INE)/16+1
+
.BYTE 0
00
+
630C'
• WORD AFI X(C][ ("C"-:l.OHn *16+FSTINT]
+
0203·'
+
.WORD •• COS1
01E4·'
+
.. WORD FNARG
434F53494E45+
.ASCIZ IcosINEI

0202"

00

0203···

3E03
18D9

18
02

+]

0205"~

• BYTE
• • COS1: IVIVI
.JMPR

o

A.N.COS ;COSINE
FFUN

0207'·
;++++.

·;• TAN.
; ;-----.

,

·Q2Q7····
')i?f) 8 ...
0'209"
.",. -£.

0"

l_

'1:8\

02

00

'

.
M. CMD[TANGEI\tT.,,; .TANX~O. AFI,XCT] .FNA:RI3 ••• T~N]t
+TANGENT:
~BVTE:$CMDADR'
.
. ;+
.. E!YTE (" .~ :TJirsix .... TANGENT> 116+ 1 '
+
• BV-rE 0 '

PAGE 1:3

TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21
EF
FLOATING FUNCTIONS
020A"
.020(:"
()20E'"
0210'"
0218'"
021'';1'"
021B"
021D"

+
641.C
0219'"
+
01E4'+
544·14E47454E+
+J
00
3E04
• • TAN:

• BYTE
MVI

l8C:::

,JMPR

G

• WORD AFIX[TJ [( "T"-10117n*16+FSTINTJ
.WORD •• TAN
.WORD FNARG
.ASCIZ ITANGENTI

o

; TANGENT

A.NaTAN
FFUN

• • TANX=
;++++

·;,

INT

;--~-

021D'"
021E'"
021F"
0220"
()222"·

0224'"
0226'"

18

+INT:

02

+
+
+
+
+
+

00
6:36C
022B"
022E'"
494E5400

M.CMD[INT, •• INTX.O,AFIX[IJ, •• INTA, •• INTJ[
.BYTE $CMDADR
.BYTE ( •• INTX-INT)/16+1.
.BYTE 0
• WORD AF I X[ I J [ ( I -10 :1.17.1 ) * 1. 6+FST I NT J
.WORD •• INT
.WORD •• INTA
.ASC!Z IINTI
II

II

+J
022A'"
022B"
022E'"
02:30"
0233··-

00
CD 0000 =O!:i
0400
CD OOOO:OE
(:30000:1B

• BYTE
•• INT: CALL
• • INTA= .. BYTE
CALL.
.JI"IP
•• INTX=
;++++

o
ARG
$IVAL.$TAF
GETOPND'
RETNONE

;GET OPERAND
;RETURN INTEGER

; ASIN
,.

·

;----

0236'"
02:;::7'"
0239"
023B"
02:3D"
02:;::F'"
0246'0247'"
0249'"
024B'"

18
+ARCSIN:
02
+
00
+
+
62EC
0247'"
+
01.E4'"
....
4152435:3494E+
+J

M.CMD[ARCSIN ••• ACSX.O.AFIX[AJ,FNARG •.• ASiNJC
.BYTE $(:MDADR
.BYTE ( •• ACSX-ARCSIN)/1.6+i
.BYTE 0
• WORD AFI X[AJ [ ( "A"-l01.Q) i/·16+FSTINTJ
.WORD •• AS!N
.WORD FNARG
.ASCIZ, /ARCSINI
• BYTE

00

3E05
1. E:';'J!:i

• • ASIN: 1'1 VI
.JMPR
II

II

o
A.N.ASIN
FFUN

;ARC SINE

AC:~3X:

;++++

; ACOS
;
•

. . 024B···.
024C"

~~--:-

. ; "i

18

+ARCGOS:

,02'

-I-

/,!f~J:MDiARCCOSt··. ,; AGqX. O.ARI:;SIN .. FNARG, ". ACOSJ [
~BYrE $CMDADR
.
.• BVTE( •• ACCX;:"'ARCCCIS) 116+1.

PAGE 14

TDL 280 CP/M DISt< ASSEMBLER, VERSION 2.21
EF
FLOATING FUNCTIONS
024D"
024E"
0250'"
0252'"
0254"
'025B'"
025C"
025E"
0261 "

00
0236~

.BYTE (I
.WORD ARCSIN
.WORD •• ACOS
.WORD F'NARG
.ASCIZ IARCCOSI

+
+
+
+

025C'"
0IE4"
41524:3434F53+
+J
00
• BYTE
3E06
• • ACOS: MVI
(::3 0 :I. E()-"
.JMP
• • ACCX=
;++++

{)

A, 1\1. ACOS
FFUN

;ARC COSINE

; ATAN
;----

0261 "
0262'"
0263'"
0264"
0266"
0268'"
026A'"
0271'"
0272'"
0274'"
0277'"

M~CMD[ARCTAN, •• ATNX,07ARCCOS,FNARG, •• ATANJ[
'+ARCTAN: .BYTE $CMDADR
.BYTE ( •• ATNX-ARCTAN)/16+:I.
02
+
.BYTE 0
00
+
024B;"
.WORD ARCCOS
+
0272"
+
.WORD •• ATAN
01E4'"
+
• WORD FNARI3
41524::::54414E +
.ASCIZ IARCTANI
+J
o
00
• BYTe:
:3E07
A,N.ATAN
~ARC TANGENT
• .,ATAN= MVI
,JMP
FFUN
C3 OlEO"
• • ATNX=
;++++

18

; SG!I=i:T

·,

;----

0277-'
027:::"
0279"
027A"
027C"
027E'"
0280'"

18
02

0285"
02:::6'"
0288'"
0288"

00
3E01.
C3 OlEO'"

00

OOOO:lC
0286'"
Ol.E4'·
5351 !:i2540Q

+SQRT=
+
+
+

+
+

+
+J

M.CMD[SQRT ••• SQRX,O,SUBSTR,FNARG, •• SQRTJ[
~BYTE SCMDADR
,
• BYTE ( ... SG!RX-SQRT) 116+1
.BYTE 0
• WORD ::;;UBSTR
• WORD •• SG!RT
.. WORD FNARG
.ASC I Z I SG!RT I

;BYTE
• • SI:?!RT= MVI
;.JMP
• .. SG!RX:
; ++++'

';•.

(I

A. N. SG!RT
FFUN

; SI~UAREROOT

LOG"

•7,
;~-~-'

'926a';;
02:::C'"
028D'"

18
02
·,00

+LOG:
+
'+

M. CMDCLQG;;~ .. uicix .O"d=-AfJ, FNARG. ~ .LOI~J I:
.,BYTE $CMDADR
• BYTE(..• LohX~L:OGi) /16+ 1·
• BYTe: ,,0'

PAGE 15

TDLZ80 CP/M. DISK ASSEMBLER VERSION 2.21
EF
FLOATING FUNCTIONS
02:3E--0290'"
0292'0294'-

0000=14

0298-'
0299--029B'029E;'

00
::::E08
C::!: Ol.EO'"

02'~J9'"

01E4'"
4C4F4700

+
+
+
+
+]
• • LOG:

.WORD LPAD
.WpRD •• LOG
• WORD FNARG
.ASCrZ ILOGI
• BYTE
MVI
,-IMP

0
A,N.LOG
FFUN

~8ASE

10 LOG

• • LOGX =
;++++
; LN
;----

029E--029F'02AO-'
02Al--02A3--02A5--02A7'"

,=,
1 '-'
02
00
02:3B--02AB--01E4'"
4C4EOO

+LN=

+
+
+
+
+
+

M.CMD[LN, •• LNX,O,LOG,FNARG ••• LNJI:
• BYTE $CI"IDADR
.BYTE ( •• LNX-LN)/16+1
.BYTE 0
.WORD LOG
.WORD •• LN
.WORD FNARG
.ASCIZ ILNI

+]

02AA--02AB':
02AD--0280---

00
:3E09
C:::: OlEO-'

• • LI\I=

• BYTE
MVI
,-IMP

I)

A,N.LN
FFI,JN

;BASE E LOG

• • LNX:
;++++

·; EXP
·
;---7

7

02BO"
18
02B1 "
02.
00
0282-"
0283'-. 632C
02B5 ,02BE ,02B7-·-· O:l.E4-0289 -'455E:!:iOOO

+EXP:

+
+
+
+
+
+

M.CMDt:EXP, •• EXPX,O,AFIXI:E],FNARG, •• EXP)1:
.BYTE $CMDADR
.BYTE ( •• EXPX-EXP)/16+1
.BYTE 0
• WORD AFIX I:E] I: ( "E II "-10l.G!) *:l.6+F:::;TINTJ
• WORD •• EXP
.WORD FNARG
.ASCIZ IEXPI

+]

02BD-'
02BE -'
02CO'"
02C3-'-

00
....3EOA
C3 OlEO'"

• • EXP:

• BYTE
MVr
,JrlP

I)

A.N.EXP
FFUN

'RAISE TO E POWER

• • EXPX:
'::1"+++

·•; PI
·, .

02C3"
02C4-'
",
'02C5···
0206"- .
'.

+PI:
02

00
63 DI::;:

+
.+
+

·M.CMD[PI? .,.' PI)<,.O:7 AFrX[PJ,o!" .pI] [ .
• BYTE $CMDADR
.
.
.BYTE ( •• PIX-PI>/16+f
.•. BYTE 0
.• WORD AFIX[P][ ("PII-l01G!HI-16+FSTINTJ

,

,

ToL' 1'80" CP I M DISK' ASSEMBLER VERS I ON 2. 21
EF
""FLOATING FUNCTIONS

02CA-02CC--

02DO "
0000
504,'700

02CF'"
02DO"
02D2"
02tI5"

00
3E1A
C3 OlEA"

02C:3'~

+
.+
+

P(4GE 16

• WORD •• PI
• WORD 0
.ASCIZ IPII

+]

• . PI:

• BYTE
MV!
,JMP

()

A,N.PUPI
FRET

;RETURN PI

• • PI X:
;++++
; FORMAT
; FORMATS A FLOATING POINT NUMBER INTO AN INTEGER AND FR
ACTIONAL
; PART (ASCII STRING) WITH N DIGITS AFTER THE DECIMAL PO
,.INT

,

NEEDS:
FLOATING NUMBER TO ,FORMAT
INTEGER GIVING NUMBER OF DIGITS AFTER DECIMAL POINT
(MAY BE BETWEEN 0 AND 6)

·,

RETURNS:
STRING WITH FORMATTED NIJMBER

CALLS:
ARG - 'FETCH ARGUMENTS
ALsTS - ALLOCATE STRING
GETOPND -,FETCH OPERAND
INC5IY - BUMP IY TO NEXT ARG
MSGN - GET SIGN
;
NORMLIZ - NORMALIZ NUMBER
NUMIT - CONVERT TO ASCII

•
·;----

02D5-02D(:;-0207'"
02D8'"
02DA"
02DC~'

02DE)o

M.CMDEFORIYJAT, •• FMTX,O, AFIX[Fh •• FIYJARG ••• FMTJ(
+FORMAT: .BYTE $CMDADR
.BYTe (.~FMTX-FORMAY)/16+l
09
+
00
.BYTE 0
+
633(:
.WORD AFIXJ:FJ[(IIF II -l01Q)*1.6+FSTINTJ
+
02E5-.WORJ) •• FMT
+
02E:3-+
.WORD •• FMARG
464F!:i24D4154+
.ASCIZ IFORMATI
+J
CD 0000:05
ARG
• • FMT = " CALL,.
$FVAL,$IVAL.O
060400
• •FIYJARG:: • BYTE
18

PU~=;H

E5
:3EOl
E5

EB
CD booo :()E;
eD OOOO:OF

'.

"

Pt, ($SASCI 1+19) 116

POSH.

ALSf$; "
H,' '

, CALL'

CD 0000:04

H

1'1 V I

XeHG

.,.', , ':

.
I~EToPNtr'"
CALL' ·/I~NCeiI.¥'

.

C:ALI~

~.,

~+

~

;, Gt:::T :1* OF DIIJtTSAFTER

;ALLOCATE STR I NG
; SAVE THE PTR

'J,1Cr'~T~rt·?tcip . ' , '
:'~~eef ·~t.htrfING ",,VALUft .
, ~.F?lj! NT::..TCCNE.XT ·ARa, •

DP' Ict\bD'E;;~ "

',"

; IT MU~3T,BE .'J~OSI7l"IVE" A~p tES~; T~AN,,; 1.:. '.

/~".<::' ..

.

.

"

PAGE 17\

TDI-Z$O CP/M DISK ASSEMBLEI;: VERSION 2.21

EF

FI..J)ATING FUNCTIONS
;-

Cl2F9"
02FC'"

CD OOOO:OE
7B

02FD"
O.2FE···
0301'"
0303"
0305"
0305'"
0308"

B7
FA 0305"
FE07
3804
CD OOOO:OB
37

; GET :1* DIGITS At=T~R DR .
;A = # DIGITS AFTER
; Iv\UST BE :> 01:

CALL
GETOPND
- MOV
A,E
TST
A
+
ORA
AJ
..JM
•• ERR
CPI
6:+1
,.JRC
•• NN
•• ERR: ERROR
ER.DP[
+
CALL E~RPGM
+
.BYTE ER.DP

; ERROR
; JYIUST BE <: 6
;OR ERROR

+J

; PRINT INITIAL SIGN AND NORMALIZE NUMBER
;-

CD 0041. "
D5
CD 004F"

030'7"
030C"030D'"

• • NN:

CALL
PUSH
CALL

;GET THE SIGN
;SAVE DIGIT COUNT
;NORMALIZE NUMBER

MSGN
D

NORMLIZ

; IF THE NUMBER IS GREATER THAN 10**10, IT IS
; TOO BIG TO'DISPLAY. IF IT IS GREATER THAN 10**6;
; TRAILING ZEROS ARE ADDED
;-

031.0"
0311'"
031.:3"
0315"0317"
0::::19"0:31B'"

79
FE07
381.C
FEOB
:3:;::08
FEFO
::::014

031D"
0320'"

--:ac.
._'._'

CD OOO(l:OB

A,C
I"IOV
6+1
CPI
..JRC
• .1\11.
10+1
CPI
..JRC
•• N
CPI
-16
..JRNC
• ",N l.
ERROR
ER.FMT
CALL ERRPGM
.BYTE ER.FMT

+

+

. ; A=EXPONENT
';'0 <: EXP -( 6"-::'
; YES?
; 6 <: EXP <:: 10?
;YES?·
;-16 <: EXP <: 10
; YES?
;EL.SE ERROR[

+J

032:1;···.

DE05
4F
CD 00E7"
3630
23
OD
:20FA
362E
180C

()323···

0:324"
0327'"
0329"
032A"
032B'"
032D"032F'"

•

It

N::

• • NW=

SBI
MOV
CALL
MVI
INX
DCR
..JRNZ
MVI
..JMPR

;. SI..,IBTRACT 5
;NEW EXPONENT

5
C,A
FLTOUT.
JYI, "'0"
H
C
• • NW
M, ..' ..• • N5

;TRAILING OS
;UNTIL COUNTUP

.

; PUT DP IN

; CONVERT FLOATING NUMBER TO ASCII AND:GET THE
; NUMBER OF DIG I TS REG!UESTED AFTER THE DEC I MAL PO I NT
00

;-

Eo'
-(:;O"002B i
Et';;·

0331"0332 -:
0335/

• • N1=
.

PUSH
CAL.L
POP

;SAVE PTR
.; GET ASCI I NUMBER
HiL :-::> FIRST DIGIT

H

NUMIT

0

H

;+

; WE SEARCH THE DIG I T !=;TR~NG FIJRTHE: -DEcr MAL
03.::::6~'

()~:38·"'·

0

:3E2E

MVI

BE.

eM!?

.

A ,.·' .,.
M

o

PO I NT

;DPTOCOMPARE
;IS' IT POII\ET?

TDL Z§~CP/M DISK ASSEMBLE~ VERSION 2.21
EF'
FLOATING. FUNCTIONS
0339'"
()3~:A'"

():33C:'"

23
20FC
2B

;+

INX
..JRNZ
DCX

PAGE 1:3

;POINT AFTER
; SCAN FOR IT
Hil -). AT DP

H
..

N

N2

H

DECIMAL POINT FOUND, WE COUNT OUT THE DIGITS
; UNTIL DECIMAL POINT COUNTER EXHAUSTED OR END
; OF STRING IS REACHED
; E == NUMBER OF DIGITS ALLOWED AFTER DP
;• .. N5=

POP
TST

D
E
-A. E
AJ
•• OUT
H
E
•• OUT
M
-A. E
AJ
H

0331Y

Dl

033E'03:3F"
034()'"
034·2'"
0343"
0344'"

7B
B7
2812
23
1D
FA 0354'"

+.IFN E
+

0347'"
0348"
0349"
034A'"

7E
B7

034C'"
0341)'"
034F'"
0350-035:1. ...

2B

+.IFN M
MOV
ORA
+
;HL - ).. AT NEXT CHAR
INX
.,JRNZ
... "N:3
; NO?' CONTINUE
;+
END OF STRING REACHED. NUMBER MUST BE PADDED WITH
; TRAILING ZEROS UNTIL 'THE DECIMAL POINT COUNTER
; IN E BEtOMES MINUS
;;HL -:> AT NULL
DCX
H
;TRAILING 0
MVI
M. "0"
• • N4:
INX
H
!JONE LESS DIGIT
DCR
E
.,JP
•• N4

23

20F7

3~.30

23
lD
F2 0:34D'"

.. .. N3=

ORA
..JRZ
INX
DCR
..JM
TST

MOV

;IF O. EXITE
A.E

J

;HL -). AFTER DP
;ONE LESS DIGIT
;ALL GONE? EXIT
; FOUND THE NULL?C
A.M
J

; EXIT POINT
; PUT IN TRAILING NULL. POP OFF STRING ADDRS &£XIT
;-

0354-'

D1

0355'"

:3600

0357"

:035E:"·

035A'-0:35D"
0350'-0361<

• • OUT:

POP
CLR

+.IFN M
XRA
AJJ
E1
POP
3EO:::
MVI
C3 0000: :I.B
..JMP
• • FMTX:
CCCC
.WORD·
7DCC
1=
·2400
:L4F4
N~.:.
• WORD
,.END

D
M

-A. [
H

A.$STRADR
RETNONE "\
OCCCCH.07DCCH
02400H.014F4H

; DE -)- TOP OF !:;;TR I NG
;ENDING NULLE
M
.OJC
; RESTORE i)THERS
;RETURN TYPE STRING
• RETURN

TDL
EF

zao

CP/M DISK ASSEMBLER VERSION 2.21

PAGE 19

+++++ SYMBOL TABLE +++++

005F
AA.SN
ARCTAN 0261'"
BLANK 0020
CHARSL 65DD
CNTRLO 65D9
COSINE 01F2"
CSBLOK 66::;D
CURREN 64A5
C.Cl
0012
C.ST
0002
C.Y
0005
DEVBL 6589
DEVCL3 657F
DEVCL7 6587
DEVNM 6!:iB7
DEVTNC 65C3
DEVVBL 65':>'1
DEVVS 65C7
DOLPPT 62EA
EDCCNT 64A7
EDNCX 680C
EDOCY 680A
EDPTRL 64A9
ERRPGM ., 0000: OB
ER.BOX 001.A
.ER .. COR 0018
ER.DJV 001.::;
ER.FMT 0038
ER.LAB 0025
ER.NEG 003A
ER.NXT 001D
ER.PAR 002A
ER.SNP 003l
ER.TER 0020
EXTDEL 002E
E.TYP 0000
FCNTI 6.5D3
FCNTV 65EO
FLAC~:::
65CB
FORMAT 02D5a"o
FRACX 00C9'"
FSTDOL 648C
0176~
GETI
GEiOPN OOOO:OE
INCRO 65E9
IPSHO 0000:1:1.
KBLOCK 65Fl
OOOA.,
LF
LPAD .. QOQO:l:4
65£8
'MNMX
NBLKI"I ,0001
NEWBOT 6:::10
'N$ADIJI:;: 6802
N.ARG OQ():=:
N.. CHSF 001.5

I

I

X

I

X
X
X

ALSTS 0000:04
ARG
0000:.05
BOT RAM 6000
CLEARS 60CA
CNTRLU 0015
CPLARE 611C
CSFLAG 6260
CVDSTR 0000:07
C.. CX
OOOB
0003
C.X
C.YF
0010
DEVCLO 657':>'
DEVCL4 6581
DEVFB 6.5CB
DEVNT 658D
DEVVA 65BD
DEVVC 65C5
DEVXCD 65B3
DONCU 0000:09
EDLONG 6812
EDNC:Y 680E
EDPN
6806
EDSTR 681.A
ER.ARA 002F
ER.CHN 0002
ER.CTL 0036
ER.DP 0037
ER.FNF 001C
ER.MAC 0022
ER.NOT 0023
ER.OFL 0017
ER.REN 002C
ER.SPC 002E
ER.UFL 003:3
E.HVAL 0002
E.VAL 0001
FCNi\J 65D4
FCNTY 65E3
FLTOUT 00E7"
FPUSH OOOO=QC
FRAI:iSI 0400
FSTINT 62EC
GETINT 0159'"
GI
0164."
INT
021'0"
1: PUSH 0000: :L2
KEYFLt3 . 67FF
,L.ISTON 65E2
MAG:STU 6536
6041";
MS(;N
.,
,

.:

Nr~rJCOM

~.:'

P02'7

00014
NL
NUMBf.,lF 64A~

N.A~:t:N OOil5

N.CH88.0074

X
X

X

X

X

I
X

ARCCOS
ARGSTK
BOTTOM
CNTRL
CNTRLZ
CPLSIZ
CURCX
CVFSTR
C.CY
C. XF'

024B~

60CC
64A9
OOOC
65E4
01.40
6814
0000: 0::;
OOOD
OOOF
C:."Y:3
0009
DEVCLl 657B
DEVCL5 658:3
DEVHCB 6!58F
DEVTNA· 65BB
DE\NAR 6579
DEVVD 6.5C9
DEVYCD 65B5
DUMBST 6577
EDMODE '681C
EDNEWS 64A5
EDPO
6804
ENDSTR OOOO:OA
ER.ARG 0034
ER.CMD OOl.F
ER.DEL 0026
ER.DSK o(il'~
ER.FOR ·(1028
ER.NAE 002D
ER.NUL 0039
ER.OPN 0014
ER.RET 0024
ER .• STK 0004
ER.UNF 0027
E.LVAL OOOl
FAIL
018B"
FCNTK 6505
FFUN
01E!Y
FNARG 01E4....
FRAC
00C6"
FREELS 6.5E5
FWDPTR 65E7
GETMSB OOOO:OD
HCAREA 659:3
.INTPT 00B2"
lYNCU 0000:18
KEYPTK e.533
LN
~29E",
MACTOP 6;25E,
M.POPS 0079·
NCUDAT "(U)2::;
NORML~ 004F"
NUMIT 002R'
N.ATAN 06c.fj:
,I\I.COS 0008

I

ARCSIN
BACKGR
CARTYP
CNTRLC
CNVFS
CR
CURCY
C.CO
C.DP
C.XS
DDTON
DEVCL2
DEVCL6
DEVMO
DEVTNB
DEVVB
DEVVN
DOLPLH
EDBCNT
EDNAME
EDOCX
EDPTRC
ERABIT
ER.ASN
ER.CNV
ER.DIM
ER.EDT
ER.IMP
ER.NAM
·ER.NUM

X

X

X
X

I
..

02:36"
I
65CC
0000:06 X
(:;.5CD
OOOO'~
I
OOOD
6:316
0011
0013
0007
65CE
657D
6585
658B
65BF
65Cl
65B9
6.:2E8

64AD
64Al
6::;08
64AB
0002
0015
0016
0030
0035
0003
0029
0028
ER~OVE 001E
ER.SEP 0021
ER.SW 00:=:2
02BO'"
EXP
E.SIZ ·0005
FCNTH 65D2
FCNTL 6506
FIRST 64A8
FOREGR 6500
FRACPT OOBB~
01EA~
FRET
,018D~
GETEXP
GETNUM O:l.le'·
INC5IY 0000: OF
0000:1.0
IPOP
..JUNK
6542
KEYTRI{ 67F7
028B~
LOG
MAXFRG 0040
N13tI<8 .. .0000
(\leu IV 0000:15
.NOR.Mtz, 0078~'
N~A'cOS 0006
N~.(:HSD 00:34
N.DADO 002C

I

I
X
X
1:
X

"

TDL ZBO"CP/M DISK ASSEMBLER VERSION 2.21
EF
+++++ SYIYJBOL TABLE +++++
N.DDIV 002F
N.DSUB 002D
N.EXP OOOA
N.FIXS 001F
N.FSU8 0011
N.NOP, 0000
N.PTOD 0037
N.PWR '0008
N.SIN 0002
N.S8UB 006D
N.XCHF 0019
OLDCUR 649F
OPRL
001.4
OUTOFF 62E7
O.SUB 0004
PIXVAL 65ED
POPOPN 0000:17 X
PSHOPN 0000=19 X
RAMSTR 6900
RUBACK "0005
SCNEED 0004
SOPRSP 653D
STAKTO 6000
0009
TAB
TAPPRO 64B1
0::::61 ,TEN6
TTYEND 62E1
UARTFL 649C
VDNLF 65CF
Z,GIM2 0001
$ADDRI 0005
$ANYVA FFFE
$CALLE OOOD
$DATAP 0007
(U)lC
$END
$FORPT OOOB
$INPBU 001.8
$LENC;T 0001
$MIBEN 0018
$NDEL' 0080
$REPEA 00lE
$SLEN 0006
$TYPE 0000
• PROG. 0365"X

N.DIY, 0004
N.EMAK 0017
N. FArm ·0010 ,."
N.FLTD 001C,
N.LN
0009
N.OFLO 0001
N.PTOF 0017
"'.SADD 006C
N.SMUL 006E
N.TAN 0004
N.XCHS 0079
OLDKEY 64';>D
OPRSP 655B
Ct. CHAR 0000
O. TYF' 0003
PLAY
0000:16 X
POWER 01AC-'
I
035D'PTl
RANSHT 655F
RUBOUT OO!F
SCRWltit 67CD
SOPRSZ 653F
STRSIZ 6800
TANGEN 0207"I
TBFEND 6533
TMPARG 67AD
TTYINT 'e.:2E3
USREND 65Fl
,V IPLI-I 6545
ZGREND 681D
$ADDRS 0009
$ARGPT 0011
$CMDAD 001:3
$DOLDE 0001
$FADR OOOE
$FVAL 0006
$INI::'PT 001.6
' $LINPT 0005
$NAIYJAD OOOA
$NLINK 0003
$RVSTU 001:3
$STRAD 0008
$/JSE
0005

.··.3 ERRORS WERE DETECTED**-II-:IHt-

N.DMUL 002E
N.EMIN FF69
N.FDIV 001:Z{
" N.FLTS 001D
N.LOG 0008
N.POPD 0038
' N. PTOS 0077
N.SDIV 006F
N.SMUU 0076
N.I..,IFLO 0002
N. ZERO 0020
OLDXY 65EF
OPRSTK 6547
O.PREC 0002
PCNT
655E
POINTE 64A7
PRINTR 6540
PUTOPN OOOO:lA
RETNON OOOO:lB
SAVESP 625C
01eF'SINE
0277-SG!RT
SUBSTR OOOO::lC
TAPBUF b4B3,
TEMPHD 60CA
6:318
TOP
TTYPTR 62El
V3PTR 657:::1
VOICEO e,563
$AADR (l010
$ANY
001A
$BGPTR OOOF
$CPLBL 002A
$DO/.._OO, 0002
$FLAGS 00Q2
$GOSUB 001A,
$IVAL 0004
$Li)CPT 0009
,$NAME 'OOOA
$NULL 0002
$SAME 00;20
$STRPT 0003
• Bl,.NK • 0000=03

PAGE 20

X
X

I
I

X

X

N.DMUU 0036
N.ESGN 0040
N.FIXD ,001E
N.FMUL 0012
N.MSGN 0080
N.P-OPF 0018
"'.PUPI 001A
N.SIGN 0040
N.SQRT 0001
N.XCHD 0039
OLDCHR 64AO
ONEBUF 6729
OPRSZ 655D
O.SIZ 0006
02(::3"I
PI
PONOFF 65DA
PSHF10 0000:18 X
RAMEND 7FFF
RMDTMP 6538
SCINO ' OOFE--01F2'SINX
STACK 60C8
SUBSTU 65:34,
TAPCON 64AF
TEMPS 62E5
TTVBEG 62<=.1
TXTWIN 67E2
VDCHAF< 649E
WRMODE 65EE
$ADDRF 0007
$ANYNA FFFC
$BNDL .0007
$CSBLO 0028
$DVAL 0000
$FORBL 0024
$IADR OOOC "
$KEYBL 0026
$MIBBL 0022
$NASCI 0009
$NVALU 0005
.$SASCI OOOA
$TAF
0000
• DATA. 0000*
X

.. REMARK !

*
* * *
******.*
*
*
-II'

II

WHEN YOU CARE ENOUGH TO PROGRAfYl
THE VERY·· BEST II

ZGRASS V2.00000000
BY JAY FENTON, NOLA DONATO, AND TOM DEFANTI
(C) 197:3
!

XLI!ST
THIS MODULE CONTAINS ALL THE SYSTEM E(;lUATES
; EG!UATES F'REFACEDBY $ SIGNS ARE GENERALLY OFFSETS

»

~

;MACRO INVOCATION BLOCI{ (MIB) EQUATES:
$TYPE=O.
$LENGTH=1

;TYPE BYTE
;LENGTH BYTE (FILLED BY ALLOC)



Source Exif Data:
File Type                       : PDF
File Type Extension             : pdf
MIME Type                       : application/pdf
PDF Version                     : 1.3
Linearized                      : No
XMP Toolkit                     : Adobe XMP Core 4.2.1-c041 52.342996, 2008/05/07-21:37:19
Create Date                     : 2018:08:27 15:11:32-08:00
Modify Date                     : 2018:08:27 15:13:49-07:00
Metadata Date                   : 2018:08:27 15:13:49-07:00
Producer                        : Adobe Acrobat 9.0 Paper Capture Plug-in
Format                          : application/pdf
Document ID                     : uuid:ef1e2fa6-bf73-a342-a338-fe70f253a980
Instance ID                     : uuid:97797da9-a215-9744-b2ba-cd74645e8e1b
Page Layout                     : SinglePage
Page Mode                       : UseOutlines
Page Count                      : 31
EXIF Metadata provided by
EXIF.tools

Navigation menu