Tom_Non CPL Tom Non

User Manual: Pdf Tom_NonCPL

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

DownloadTom_Non CPL Tom Non
Open PDF In BrowserView PDF
. TDL ZSO CP/M DISK ASSEMBLER VERSION 2.21
USEMAP -

PAGE 1

• INSERT A:S.ASM
@.REMARK (

*

@
@
* * *
@
***
@
*******
@ *
@
*
@
@
@
*
@
*******

*

*

@

"WHEN YOU CAF* TYPE .j!. ( $ I AD DR , $NAI'1ADR)
****'lI-****
* SIZE * (IN 16 BYTE BLOCKS)
*****-If..j!.ij'*
*
** NAME
PTR
*
********.*
.*
*
*********
0

••

; CALLS:

TDl Z80 CP/M DISK ASSEMBLER VERSION 2.21
USEI"IAP -

PRINTHl - PRINT ASCII STRING
PRTVPA - PRINT TYPE
)
NXTVAL - GET VALUE FROM NAME
TABPNT - PRINT TAB
PDEC8C - PRINT DECIMAL NUM
NLPNT - PRINT NEWLINE

;

;

00:3(:"
003C"

-_._-

DIF~NAM:

PU:;::H

E5

H

;+

·, PRINT THE

NAME

;-

,0030'"
0040'"
0041 "
0044'"

I..,.

O~~

CD 0000=08
CD OOOO:OD

B,$NASCII
8
PRINTHL
TABPNT

XI
DAD
CALL
CALL

01 0009

;GET NAME FIELD
;HL-)NAME
;PRINT NAME
;AND TAB

;+

·

, PRINT THE TYPE
;-

0047'"
0048'"
0049"004A"
0048"
004C'"
.OO4E···

AF
5F
El
E..)
7E
FEOA
200A
C-

OO~~O"

,,":).:-.
.,_'"

0051"
0052"
005::;::'"
0056'"
0(>59"
005A'"

SE
28
CD
CA
7E
CD
CD

()O!.5D·'

0000: O'Y
0000:06
OOOO:OC
OOOO:OD

·,

E IS THE SIZE
XRA
MOV
POP
PUSH
MOV
CPI
dRNZ
INX
MOV
[lCX
CALL
,JZ
I"IOV
CALL
• • IH:
CALL

OF THE NAI'1E
A
E.A
H
H
A,M
$NA.MADR
.• D1
H

E,M
H
NXTVAL
NAMERR
A,M
PRTYPA
TASPNT

;CLEAR A
.; CLEAR E
;Hl..-)TOP OF BLOCK
;SAVE AGAIN
;A=TYPE
; IS NAME?
;NO? INT OR FLT
;.REMEI"IBER SIZE t)F
;NAME BLOCK FOR
;SIZE L.ATER
; Ht. ···)VALUE
;O? ERROR THEN
;A==TYPE OF VAL
;PRINT TYPE
.; AND 'TAB·

;+

PRINT SIZE
; E :::: SIZE OF NAME BLOCK IF NOT INT VALUE
; ELSE· Eli;, 0
....a:).-.
.....")

0060'"
0061 "
·.0062'"
006:3'0064'"
t:)(16~5 .'.
(lOt.,6'"
(1067 . . ·
(l06S""

0069"

;-

7E
83

6F
AF
67
':2'~
,;,

29
29
29

(106A'"

E5

O<)6B'"

(::1.

·,

INX
.MOV
ADD
MOV
CLR
XRA
.. ,MeIV
DAtI

A,M
E
L,A
H
. A
H,1i

·nA.D

H

. ttAD
··,DAD
\MVD'
, PUSH
POP

H

H

H
H
B,H
H

B

;HL-:>SIZE
;A==SIZE OF VAL
;PLUS NAME SIZE
;HL=SIZE IN BL.OCKS
;CLEAR H
,;H(~SlZE IN

BYTES

TDl Z80 CP/M DISK ASSEMBLER VERSION 2.21
USE MAP -

006F'

CD OOOO=OA
CD 0000:07

0072'
0073'

E1
C9

006C'

CALL
CALL
POP
RET
.END

PAGE 4

PDECBC
NlPNT
H

;PRINT SIZE
;AND NEWLINE
;RESTORE REGS.

~.

.::-.::...
.... "'\ VERSION 2.21
TDL Z80 CP/M DISK A'-:""'EMBLEFi'
USEMAP -"1-++++ SYMBOL TABLE +++++

F'AGE

,

005F
0020
COCA
0015
OOOD
C816
OOOB
0003
0010
C!57B

AASN
BLANK
CLEARS
CNTRlU
CR
CURCY
C.CX
(::. X C.YF
DEVCl.l
DEveLS
DEVHCB
DEVTNA
DEVVAR
DEVVD
DEVYCD
DUMBST
EDMODE
EDNEW:::;
EDPO
ERABIT
ER.ASN
ER.CNV
ER.DIM
.ER.EDT
ER. IMP
ER.NAM
ER.NUM
ER.OVE
ER.)::EP
ER.SW
EXTDEL
E.TYP
FCNT,..I
F'CNTY
FOREGR
F::HINT
,JUNI<
KEYTRI<
MACTOP
NBU:06 X
OOOA
NL
NXTLNI< 0000: 0::;: X
OLDKEY C4'7[1
OPR!:::P C558
PCNT
C55E
PONOFF C5DA
RAMSTR C900
Rt.IBOUT 007F
"SCJPRSP C53D
':;:"TRc'IZ C::::OO
TAF'BUF C4B~::.
TEMPHIJ COCA
TTYBEG (:261
TXTWIN (:7E2
V3PTR ":(:572:
.....

__I .

Co;'
....1

TDL Z:30 CP/M DISI< ASSEMBL.EH VERSION
USEMAP .+++++ SYMBOL. TABLE +++++
VDCHAR
WRMODE
$ADDRF
$ANYNA
$BNDL
$CSBLO
$DVAL
$FORBL
$IADR
$I:;:::::: ...

oo:::m'"

POP B

~::

;GET VALUE OFF STACK

" • EX:

~-;:;OP D

.. DEX:

CALL NLPNT
MOV (,.~, D
CALL.. HEXBYT
MOV {-~, E
CALL HEXBYT

0000: 0':;'

C:D 0000: 0';:'1
:3 E::::D
CD 0000::l. :::

1"1 V I A. ,.' ",..'

CALL·OUTCH

lA

LD('~X

OOAO'"

CD 0000: 0':;'

;GET

D

OOA4'"

1.:::::
1.A

OO{-~~5'"

cn 0000:09

CALL HEXBYT
INX D
LDAX D
CAL.L HEXBYT

(lOA::::'"
OOA9'"

7E

MOV ;.':t, M

OOAA'"

FE2C

CPI "', .,'

O(lJ~C

:2:::F.:: :I.

..JRZ ... DEX

oo(.r::: ",

"

BACKWARDS

;COMMA MEAN!3 PRINT ON

(lOAE'"

CD 0000::1.:3

CALL Nl.PNT

Dm::1.

POP X

(lOB:)'"
OOB4'"

C9

OOB4'"

2B

+

F

PR I NTS

(JUT F'LO{'H I N13 F'O I NT VALUE

OF

FU·n I ON

TDL
MOD

zeo

00C1 "
00C2"
00C:3"
00C4"
(lOce.'·
OC>C:I:;I'"
(lOCA"
OOCD"
OODO"
OOD2"
00D3.···
O(>D/:..·'
00D9'OODA';
OODD'"
ClODE'"
OOEl'"
OOE4'"
00E~5"

OOEE:'"
00E9'"
I)OEC"
OOEF"
OClFO"
(lOFl"

CP/M DISK ASSEMBLER VERSION 2.21

j .0;;;'
0::.

04
00
C3AC
OOC[I"
OODO'"
4D4600
CD 0000:04
0600
E5
CD 0000: OF
CD OOOO:OD
7A
CD 0000:09
7B
CD 0000:09
CD OOOO:OD
"lA
CD 0000: 0':;>
7B
CD 0000:09
CD .0000: 13
El
C';;:'

; A/B. COlvtMAND FORMAT: MF A. B
M. CMD[MF , ... MFX .0. AFI X[M:J , •• MFA, •• MFSJ[
+MF:.BVTE $CMDADR
+
.BYTE L.MFX-MF)/16+1.
+.
• BYTE 0
+
.. WORD AFI x[M][( IIM"-I0IQ) -lH6+FSTINTJ
+
.WORD •• MFS
of·
• WORD •• MF A
+
• ASCI Z //yIF i
+J
ARG
• • MFS: CALL
$FVAL,$TAF
• • MFA: • BYTE
PUSH
H
IYNCU
CALL
IPOF'
CALL
A,D
MOV
CALL
HEXBYT
A,E
MOV
CALL
HEXBYT
IPOP
CALL
MOV
A.D
HEXBYT'
CALL
MOV
A.E
CALL
HEXBYT
CALL
NLPNT·
POP
H
RET
I

• ./yIFX=

.END

PAGE

4.

PAGE c:-__,

;

TOL" Z80 CP/M DISK A!::;SEMBLER VERSION
IYJOD
+++++ SYMBOL TABLE +-1.. +++
005F
AASN
BACKGR C5CC
CARTYP OOtIO: 05
CNTRLC C5CD
CPLARE Cl1C
CSFLAG C260
C.CO·
00:1.1
001:3
C.DP
0007
C.. XS
DOTON C5CE
DEVCL.3,C57F
OEveL7 C:5:37
'DEVNM C5B7
DEVTNC. C5(::3
OEVVBL C591
DEVVS C!:;iC7
DOLPPT Cf2EA
EDCCNT C4A7
EDNCX C80C
EDerCY C80A
EDPTRL C4A9
ER.ARA 002F
ER.cHN 0002
ER.CTL 0036
ER.DP 00::::7
ER.FNF 0018
ER. t"lAC 0022
ER.NOT 002:~{
EF~. OFL. 0017
ER. REi'.1 .002C
ER.SPC 002E'
ER.UFL 01):3::::
E.LVAL 0001,
FCNTH C5D:2
. FCNTL' (5[16
FLA(;~=;
C5CB
FSTDOL C48t:
HEXBYT 0000: O';y
INHEX OOOO:OB
IYNCU 0000: OF
KEYPTI< '(:533
LISTON C!5E2
00C1--MF
0000:11
NAMADR
NCUCOM 0029
NU:'NT 0000: 1:3
NXTLNK 0(l!)0: 1.5
OOi):3
N~A,RI3'
N.CH::::F 00:1.5
N.rtDIV OO:2F
N. [tSI.JB l)02D . •
N.EX,P bO()A'
N.FIXS OO;1.F
'N.r-SUB 001.1
N.NOP ·0000
".

X

X
X
X

X

X
X

ADDON 0001
BLANK 0020
CHARSL C5DD
CNTRLO C5D9
CPLSIZ-0.140·
CURCX C814
C.Cl
.0012
0002
C.ST
0005
C.Y
DEVCLO C579
OEVCL4 C581
OEVFB C5CB
OEVNT C58D
DEVVA C5BD
DEVVC C5C5
DEVXCD C5B3
DONCU 0000:06
EDLONG (:812
EPNCY C80E.
C:::06
EDPN
EDSTR CE:1A
ER.ARG 0034
ER.CMD 001F
ER.DEL 0026
ER. D~*~ 0019
ER.FOR 002f:?
ER.NAE 002D
ER.NUL OO::::(~
ER.OPN 0014
ER.RET 0024
ER.STK 0004ER.UNF 0027
E.SIZ 0005
FCNTI C5D3
FCNTV C5EO
FOREGR C5DO
FSTINT C:2EC
HEXHL 0000:08
INPTTY 0900:0C
,JUNK
C540
KEYTRI< (7F'7
MACSTU C5:;:6
MNMX
C5E:B
NAMSET 0000:12
NCUDAT 0028
NSADDR C802
NXTPTR .0000: 16
N.ASIN 0005
N. CH:::~S 0074.
,N.·DJV. 0004'
'N.EMAX 0017,'
N.FADD (>,01(1 . .
N. FLTD' 001C .'
(:>009
'N.LN
/\I.OFLO 0001

:;~a

X

X
X

X
X

21-

0000:04
ARG
BOT RAM cooo
CLEAR::; COCA
. CNTRLU 0015
0000
CR
CURCY C816
OOOB
C.CX
(1003·
CoX
C.YF
0010
DEVCL1 C57B
DEVCL5· C5E:3
DEVHCB C58F
DEVTNA C5BB
DEVVAR C57';y
DEVVD C5C9
DEVYCD (:5B5
DUMBST C577
EDMODE C81C
EDNEWS C4A5
EDPO
C804
ERABIT 0002
ER;.ASN ()015
ER.CNV 0016
ER.DIM '0030
ER.EDT 0035
ER.IMP 0003·
ER.NAM 002'~
ER~NUI'1 0028
ER.OVE 001E
ER. ~:;;EP 0021
ER.SW 0032
EXTDEL 002E
E."FYP 0000
FCNT ....1 C5D4
FCNTY C5E3
FRAGSI 0400
FWDPTR C5E7
OOOl):OA
IGET
Ol)OO:OD
IPOP
KBUJCK C5Fl
KLS' . .0000:10
MACTOP C25E
MODIFY 0000"
NBLI
C49F
0014
0000:18
0006
0000:19
0000: 1A
C900
007F
C5:3D
COOO
OOOO:lE

X

X
X

X

C:53:3
Cf:31 t:::

C2E1
C57:3
C56:3
0010
00lA
OOOF
002A
O(IQ2
0002
(lOlA
0004
0009
OOOA.
000:2
(1020
0003
0000:03 X

N.PTOF
N.SADD
N.SMUL
N.TAN
N.XCHS
OLDI
00:1.1 .
0018
0001
OOOE
0006
0016.
0005
OOOA
·0003
0013
OOOE:

0005

(:,

PAGE 1

TDl ZSO CP/M DISK ASSEMBLER VERSION 2.21
SUB
'-- ZGF~ASS SUBROUTINES

• INSERT A: S. '~SM
@.REMARI< /
@
@
'@

@
@
@
@
@
@

@
@:

*
* * *

***
*******

*

*

*
*

*

*******
"WHEN YOU CARE ENOUGH TO PROGRAM
THE VERY BEST"

@
(~

@

ZGRASS V2.oo00dOOO
@BY JAY FENTON, NOLA DONATO, AND TOM DEFANTI

@

(C)

@

1978

@

@/

. INSERT A:ZRAM.ASM
· lIN~~
.PREl
.IDENT SUB
.EXTERN AllOC
~EXTERN ARGlIN
"EXTERN DElMIB
.EXTERN ERRPGM
.EXTERN FREE
. EXTERN GETOPND
.EXTERN ClUTCH
• INTERN ACOPY
• INTEF~N CARTYA
• INTERN CARTYP
• INTERN CLEAR!
. INTERN DEC51Y
-. INTERN F I NDLAB
~INTERN GETLPT
. INTERN HEXBYT
· ~NTEFAT UNTIL A NULL
OOIA'"

AF

PRINTHL= XRA A

;NULL A

;PRINTA--PRINTS WHAT HL->AT UNTIL DELIM
IN A SEEN OR A NULL IS FOUND "
:;HL IS ADVANCED TO POINT PAST DELIMITER
001B~

C~5

OOJ(:'"
OOttl-·

4F
7E

001E'-

00lF ..,

B7

0020'0022'"

:2:3C)8"
B9

0023'"
0025"

CD (lOOO:OA

0028~
(I02A,"~

<)02B"

C1
C9

PRINTA= PUSH B
MOV C.A
• • LOOP:: MOV A,M
INX H
ORA A
.JFa • . G!UIT
CMP C
.JRZ • • GJ.UI T
CALL OUTCH
.JtvIPR •• LOOP
• • G!UIT: POP! B
RET

~COPY

;GET CHAR

; r !::: NULL?
~YAS;

;NLPNT AND TABPNT--PRINTS .I\IL'··8
O(j2C"
(H)2E ,.'
O()~30 .'

3EOA·
,,' 1 ::::02
3E20

,MVI A,NL
.JMPR TABPN 1
TABPNT= MVI A~~ ~

NLPNT~

"

AND

TABS

PAGE

TDL 180 CP/M DISK ASSEMBLER VERSION 2.21
SUB
- ZGRASS SUBROUTINES
PRINT FWUTINE:::;;
0032'"
O():3~::i ..'

00:::::(':.···
00T7'"

C:D (lOCH): Of.,
C';:,

PDECA=
4F

0600

OO:3A'"

TABPNl: CALL DUTCH
RET
;PDECA--PRINTS CONTENTS OF A AS UNSIGNED
DEC I Mf.~L NLII"IBER

1801

PUSH B ;SAVE BC
MOV C,A ;STORE A IN BC
MVI B,O
JMPR PDECBl
;PRINT SC

;PDECBC--PRINT BC AS 16-BIT SIGNED
OO:3C .'
003D"

OO:7::E'"
OO~::F'"

004-2'"
004::':"
0044'"

t ()():::2 ..'
E5
/.:.0
:~:

004~5···

0046'"
0047'"

004A'"
004C'"
004F'"

A7
CD OOOO:OA
CD OOSc·"

0052"

0052'"
00:55'"
()O~)6

..'

01 0501

5E

00:57'"
0(1::;:::':: ..'
OO~5':;'

.'

(jTOP
" . LOOP: XTHL
; GET !3UBRTF2"
0093"
0094/
Q095/

7D
2F

6F
2:3

C9

;INHEX-~GETS

0096'0097'009A/
0090'009E-"
OOAO-"
00A2'"
OOA4"
00A6'"
00A8'"
OOA9"
OOAA'"
OOAC/
OOAD"OOAE"
OOAF'"

C5

INHEX=

11 0000,
CD 025F--'
7E

•• SCAN:

:2:31. ~5

::::(>04
D6:30
1802
D6:37
EB
4F
0(:·00

• . ALPH:
... ADD:

2':;'

29
2''3'1

29
0';;>
EB

OOBO'-

0081 ,OOB2'"
008::;:'00B5-'
00B6"

2:3

l8E5
C1
C9

· . INDL:

,

VALUE IN DE FROM HEX C8ARS

,PUSHB
LXI D,O
; ACCUMULAT6R
tA~L CARTYP
;IS NUMBER OR NAME?
MOV A, M
; GET CHAR 'ANYWAY
JRZ •• INDL
;IS DELIM
J~NC •• ALPH
;IS NAME
SUI 30H
; NUMMIE'
JMPR •• ADD
;ADD IT IN
SU I ::{7H
; SHOULD BE A-F
'XCHG
MIDV C,A
MVI B,O
DAD H
DAD H
,DAD H
DAD H
;MUL BY 16
DAD B
;AND ADD IN E#NEW ONE
XCHG
;PUT IN D
INX H
;NEXT CHAR
JMPR •• SCAN
POP B
RET

; HEXr~L--PRINTS ,BYTE HL-:>ATIN HEX
.,'

"

(lOB'-'

00138-'
OOB9/" .
008A'~

008B'-

,

7E
F5

OF
OF
,OF

"

,HEXHL=dYfOV A,M , '
"HEXBVT: ,p(ISH PSW
RRC
RRC"
RRC
~

~,

HL~)AT

TDL zeo CP/M DISK ASSEMBLER VERSION 2.21
SUB
- ZOF~ASS SUBE~OUTINES'
PHINT ROUTINES
OOBC'"
008D'"

(lOCO"
00C1 "
00C3"
00C5'"
(lOC7"
OOC':i'"
OOCB"
'OO(:E"

OF
CD OOC1. ,~
Fl.
E60F
FEOA

RRC
. C(..ltLL
HNIB
POP PSW
• • HNIB= ANI OFH
cpr 10

3802
C607
C630
CD (lOC)(); OA

,JRC •• LT10
ADI "'A"'-···9·'-1.
• .LT10= AD! "0"
CALL OUTCH
RET

(:9

#

PAGE 5

•

;<:10
;ADD OFFSET
;MAKE INTO ASCII

* TEMPC:HN--L INK:;; HL I NTO TEMP LIST
;IN:
HL~)BLOCK TO BE LINKED IN
;OUT:
SAME
BLOCKSLINK~D

;NOTE:

OOCF'"
.OOCF "
OODO'"
OOD:1. .'
00D2'"
00[16'"
06D9>

OODC'"
OODD'"
OODE"
OODF"
OOEO'"
00E1'"
O(lE2"
00E:3"

IN S80ULD NOT HAVE STUFF
HANGING OFF, THAT IS, NAMEBLOX WITH
POINTER VALUES SHOULDN"'T BE TEMPCHNED

TEMpCHN:
PUSH H
PUSH.D
t-'USH B
LDED TEMPHDR
SHLD TEMPHDR
L. X I B, $NL I NI-<
DAD B
MOV M,E
INXH
MOV M,D
"POP B
POP D
POP H
RET

E5
D5
(:5

E[l58 COCA
2:;~ CC)(;A'

01 000:3
'09
·':/
7 '-'
,?--=..........

72
Cl
Dl
E1
(:9

;PICKUP CURRENT FIRST
;STUFF NEW GUY

HL OUT OF TEMP LIST
HL-)BLOCK TO BE EXTRACTED
BLOCK EXTRACTED

*TEMPUNCH-~PULLS

;IN:
;OUT:
.' 00E4"
. 00£4"
00E5'"
00E7"

00E8;'
OOEB"
OOE(::'
. ()OEE'"
OOF1'"
OOF::!:/

00F4 . . ·
OOF6"
OOF7'"
OOFE:'"
(lOF9'"

C5

[IDES
E5
21 COC7
E5
DDEl
CD 0:227"
200~5

El
DDEl
Cl
C9
Cl
(:5'

TEI'1PUNCH:
PUSH B
PUSH X
PUSH H
LXI H,TEMPHDR-$NLINK
ILISTHEAD
;SAVE POINTER IN X
• • MORE: PUSH H
POP X
CALL NXTLNK
;GET:NEX.GUY
,JRN Z ' •• THERE
; GOT .ONE
• • RET: POP H·
POPiX
POP .B
'RET,'
;GET ORIG Ht.
• • THERE ..POP B
; AN::; SAVE;:' IT.
PUSH B.

TDL Z80CP/M DISK ASSEMBLER VERSION
SUB
- ZGRASS SUBROUTINES
PRINT ROUTINES
OOFA'"
00F8"

OOFC"
OOFE'"
OOFF'"
0101'"
0104'"
0107"
010A'"

AF
ED42
E1.

20EA
CD 0227"
OD750:3
01:17404
18E7

PAGE (:.

2.21

PUSH H
XRA A
OSBe B
; HL=BC?
POP H
JRNZ •• MORE
;NO
CALL NXTLI\lK
MOV $NLINK(X),L
MOV $NLINK+1(X).H
;VUP
.JMPR •• RET
*ISTERM--RETURNS IF NULL. ETC
; ALLOWS ,NULL. Nt. .... , ....... ; .... ANO ...... AS
; VAL I D LINE TERM I ES AND JUMP::; OVER THEM
fALSO CALLS PUTLPT FOR VOU
;ER.TERM IS OTHEA TERMIES SEEN

010C'"
OlOD'"
010E"

O:1.0F···
0110'"
Ol12:'"
0115'"
01:1.Co···
01:I.:::V

01.19"
01lB"
013.C·'
01 :I.E"
011F"
012(V
0121. ...
0122"
012:3'"
0124'"
O:l.2~5'"
O:l.:;~8'·

0:1.29"
012C'"
OJ;2:F'''

0142"

ISTERM: MOV A.M
ORA A
RZ
e8
INX H
CALL PUTLPT
CD 024:3"
CPI NL
FEOA
1-'0
RZ
.... '...'
CP I ",'"
FE2C
C:f~
RZ
cpr
,;' ~',
FE::?O
C:::E:
RZ
cpr .......
..:;:.
RZ
DC; X H
2B
[lCX H
;SEE IF NULL BEFORE IT
2B
;IN CASE OF SKIP -999
MOV A.M
7E
;WILL BE -) BEFORE STRING
ORA A
87
;POINT PAST NULL
INX H
; SO A DClESN" T HAVE NULL
MOV A.M
7E
;SAVE PTR
CAL.L PI...ITLPT
CD 0243'"
;OR AT ERROR
C8
RZ
CD (H)OO"
; WAI::::N THEM
CALL WARNFF
"• ASCIZ 'ITOO MUCH ON LINE:· I
!;:i4·4F 4F204D!:.:;5,
;PRINT IT
CD (lOOO~05
CALL ARGLIN
C:::: 002C"
....IMPNLPNT
7E
B7

-";t.';)
01:" __'

.

",

'

1_01_,

; '* I SNL

--RETURN~=; Z, IF CR OR
;KISNL DOES KLB FIRST

0145'" '
0'148"
0149'"

9J4A"
1)14B'"
014D"

CD 015:8"
7E

B7 -.'

*

;IN
;OUT

HL->CHARACTER
Z SET IF CHARACTE~ IS CR OR ; OR NULL

KISNL=
ISNL:

CALL ICHARAC:TER
HL-)PAST NL

SCANNL: MOV A.M
ANA A
RZ
INX H
CPI NL
RZ
.JMPR SCANNL

;IS NULL?
; IS "Il.

; LOOK MOFtE

*KLB--KILLS OFF BLANX*
;IN
HL-)CHARACTER. MAYBE BLANK
;OUT
HL-)FIRST NON-BLANK CHARACTER
;KLBINC INCREMENTS HL FIRST
015A"
0j,5B"
015C"
03.5E·'
O1.5F'·

2:3
7E
FE20
CO
18F';;

0j,6j, "
0162'"
0163"
0164"
03.65"
0:1.66'"

E5

KLBINC: ·INX H
MOV A, M
cpr SLANI<
RNZ
..JMPR KLBINC

~(LB:

016::~'"

EDBO

(l1.6A···

Dj,
E3.
C9

*CLEAR I T--CLEARS FROM HL FOF< BC
CLEARIT: PUSH H
PUSH D
MOV D.H
MOV E,L
INX [I
MVI M,O
LDIR
POP D
POP H·
RET

CD 025F""

!:'.;CANLAB:

011.:.B···
01.6C'·

016[1'"
01.70'"
0171"-

[15

54
~.5D

1'':)
...'
3600

'017:~"

BYTES~'

CALL CAFAT ,BLANK FOLLOWING NONBLANK CHARS
(I.E •• IT SKIPS OVER A BUNCH OF NON-BLANKS)
;Z IS SET IF POINTING AT A NL. ; ,OR NULL,
; Z CLEAR IF --> AT A BLAN~~ UPON EXIT
;IN~-HL->CHARACTERS

01.7E···
01::31 "
0,1.82.. .
0183'01:34'"
,OJ.se...·

0188'"
0:1.89'"

CD

0145"

SC('~NB:

C::3

23
7E
FE20
20F6
B7
C9

CALL IconE '
A HAS RETIJRNEn TYPE. DE HAS VALUE"
FROM $RVSTUFF
OLD·
MI B I S ZAPPED ANI) CALLER RESTORED
•

·
018A"
018B'"
01an··· ,
01':;>0'"
():t.91"
01':;>2'0:1.94"

0:1.97'"
0:1.98'0198'"
01.~:;>C·'

019F'"

01AO"
01A2"

C5
FDE~5

2A C25E
7C
B!5

2004
CD 0000:07
24

;SAVE B
;SAVE Y TOO
;GET MIB
;IS ZERO?
; I F SO. I S FROM ·jf--LEVEL
;AND IS BOOBOO[

+ •• 0001=J

FD2A C25E
F07E1.A
B7
202F

01 001:3
FD09
CD 0000:09
01A7'"
01AA'"
F5
01AB"
D5
01AC>'
7E
OlAD'"
FE22
,01.AF/2C~O'3' ,
01 B 1 ',;-'·CD"·, OOOC);;:(16
0184"'"
01 (lOt)D'
{):I. B7 " "<;eD P22A'"
01SA< ',; 22 C1eiE
01A~'i'"

oleD!"'

SWITCH: PUSH B
PUSH Y
LHLD MACTOP
MOV A.H
ORA L'
ZERROR ER.RET
,JFSOMETHING
HL CONTAINS THAT STUFF

;

AN'D. Z 18 f)ET

rF

NXTVAL= LXI B,$NVALUE
..JMPR NXTABC
NXTLNK= LXI B.$NLINK
NXTABC= DAD B
;ADD IN
NXTPTR: PUSH D
MOV E.M
INX H
MOV D.M
MOV A,D
ORA E
XCHG
POP· (I
RET

.,.

HL.=()

;NAME LINt<
BC TO HL
;GET IT
; :::LOW STUFF
;GET SECOND HALF
;CHECK FER ZERO
;?
;EXIT

~GEtLPt --GETS L I NPTR l NTO HL FROM t1AC~.~)P*
F.:,'··..

. . G~TLPT: PUSH Y
LIYD MACTOP
;GET MACTOP ADDR
MOV L,$LINPTRCYJ

TDl zso CP/M DISK ASSEMBLER VERSION
SUB
- ZGRASS SUBROUTINES
PRINT ROUTINES·

MOV H,$LINPTR+1(Y)
GETI... PX: POP Y
RET

FD6606
FDE:I.

023D'"

'0240'-

C~)

0242'"

PAGE :1.1

2.21

; *PUTLPT--PUTS LINPTR FROM HL INTO MACTOP*
FDE5
FD2A C:25E
FD7505
FD7406
lSEF

024:3'0245'0249'024C'0:24F'-

PUTl. PT: PUSH Y
LIYD MACTOP
MOV $LINPTR(Y).L
MOV $LINPTR+1 (Y) '} H .
,JMPR GETLP X
*INC5IY--ADDS 5 TO IY*
INC5IY: PUSH B
LXI B,5
IYOUT= DADY B
POP B
RET

C5

O:;;::!51-'
0252'-

0005
FDO$"
C1
01

0255'"
0257'-

C9

; *DEC51Y--SUBS 5 FROM IY*
C5
01 FFFB
1.8F6

02.5';:>'-

'02~5A'-

0:,:51)-'-

DEC5IY= PUSH B
LXI B,-·5
,JMPR IYOUT
*CARTYP--SETS CC.-S ACCORDING TO WHAT HL POINTS AT*
. ;IN
;OUT

HL-)CHARACTER
HL-)CHARACTER
Z CLEAR, C CLEAR IF ALPHA
Z CLEAR, ·C SET
IF NUMERIC
Z SET
C CLEAR IF DELIM
,CARTYA:USES ~ INSTEAD OF M

7E
FE24

025F"
0260'-

0262'0264--0:266'-'

2:::.2:2

0:269"
026B-'

026E"
0270'027:3-'
.0:275'Q271:V
,.027A,·····,

027D-'
027F"-:
()28,:~t~

FE30
FA 0:282-'
FE3A
FA 0284"
FE41
FA 0:2:2.2-'
FE5B
r,'A0:2:36-'~

.

.JM ••

FEb1

.~A. 02E::2-~

·····AF
,

I~:~

37

C{~

CPI··1.41~

.'

FEiC,
FA 0:286''-

02::::2''cy:i6:4".. .,:.:.}-"

CARTYP= MOV A,M
CARTYA: CPI '-$'dRZ •• CA
cpr '-0"
oJl'1 •• CD
CPI' "9"+1
,..1M •• CN
CPI "A'.JM •• CD
(:Pl .-- Z ,- + l'
,

.JM • '" CD

Cf'I 1.41Q+27
'JM .~ • I::: A

•• CD:

XRA,A

RET
pTC

":;.

;GET CHARACTER
;$ IS ALPHA

;FOR

us

; IS DELIM
; IS NUMERIC:
; IS DEL I !"I
;: IS ALPHA
;LITTLE A
;lS tlELIM

. ; L.ITLe::Z+l'

.; rSALPHA'

, ."

; SET' 'z, CLEAR :}::ARRY

1$£T CARRY,Z liS CLEAR

TDL Z::.:rO CP/M DISt< A:::SEMBLER VERSION 2.21
SUB
- ZGRASS SUBROUTINES
PR I NT ROtH r NES
()~~85·~

(:9

028(-:,"

A7

1)287'"

C:~::>

(~~"2

E: 8 ..-

• • C:A=

RET
ANA A
RET

SUBEND:

.END

PAGE 12

; CLEAR CARRY,
; LEAVE Z CLEAR

P(.~CiE

TDL. Z:::::O CP/M D1::;I< ASSE1 IBLER VERSION 2. :2:1.
_. ZGRASS SUBFOB
OOO:~:

0010
0000: 0,:::,

X

C57F
C:5~=:7

C587
C5C:3
C591,
C~jC:7

C2EA
C:::;!1:2

C:30E
C:::OI.:,
C:;:: 1. (:.1j

00:::;:4
00lF
0026
0019
002:3

002[1
0(1::::9

0014
0021.1·

0004
0027
OOO!5

C5D::::
C:::'EO
C!:iCB
C5E!5
02::34'"

I

00£1f:3'-

I

0096'"
C540
C7F7

I

OOOf.'1

0040
NEWBerT C::::10
NUMBUF C4A::':
NXTVAL () :2~:2 ~~
OL.DXY C:5EF
opr.:;:~nl< [:547
C:~5~iE
PCNT
PI XVI'~L (:5ED
PRINTF 000[1'MAXFf~O

.ow

RAMS-rF~

(:'?OO

. RUBOtJT 007F

I

I

:l :~:

PAGE: 14

TDL Z80 CF'/I'1 DISI< ASSEMBLEF~ VERSION 2.:21
SUB
- ZGRASS SUBROUTINES
+++++ !::YMBOL TABLE +++++
SAVESF'

C2~;C

~3CNEED

0004
COC8
02:38"
0032'"
C4Bl
C2E5
C:261
C7E2

STACK
!3UBEND
TABPN1
TAPPRO
TEMPS
TrYBEG
TXTWIN
VDCHAR
WARNFF
$AADR
$ANY
$BGPTR
$CPLBL
$DOLOO
$FLAGS
$GOSUB
$1VAL
$LOCPT
$NAI'1E
$NULL
$SAME
$STRPT

SCANB
SCRWIN
STAICURRENT MIB

DID THIS GUY RETURN?
CALL. ISTERM
;PROPER TERMY?
ORA A
; NULL?
JRNZ •• NEXM
;NOP-NEXT MACRO
; YES HE DID - RESET STRING. .PTR TO FIRST CHAR
I"! (I V
H ,$STR~TR4;t ( X>
MOV
L..$STRPTR~~)
LXI
B,$~ASCII'
DAtI
B
; $rUF~ P(llNTER BACK 1NTQ MIE,'
CALL' PtrtLPT
,MOVE TO NEXT MIB, ON CHAIN AND TRY TO [I(l1T
,

004~3'"

·.0041.... ·'
OQ49"
(;64C:'"

DD<::.604
'DD6EO:3
',01 OOOA"
09
CD OOOO:lD

.

PAGE :3

TDL Z80 CP/M DISK ASSEMBLER YERSION 2.21
DOL
- DOL--DOLOOP STUFF AND MIB STUFF

0050'6053"
005(;:.···
0(158"
0059'"
005(:"

005D'"
00~5E"

005F'"
00(:,0':
()06:2"
0064'"
006(:,"

\

DD(:;.(:'10
DD6EOF
18B:3
E1
22 C25E
C9

18
05
00
0000: :I.F
0()6C"
0075'53544F5000

00.
006B"
.006(:'"
CD 0000:16
006F"
CA 0000:04
. CD 0000: 07
0072"
OE:j,E
0075'0077'"
E5
0078'FD7EOO
007B'"
A7
007C'007E"
FD5602
0081. ,.
FD5E01.
00.84"
2A C2E8
(lOB7'"
7C
0088"
85
0089'"
2810
0.08B··· . 23
008(:'',008D'"
008E'"

"".,:;
.....
.1::. __'

O()E~F···

,23

009(:)"
00'7'1'009:3····
,.009·1,\· . .
0095"

.'").~

';)

7E
BB
200D
'lE
BA
2009

NEXM= MOV
MOV
..JMPR
· • DONE: POP
S:HLD
RET
~.

H.$BGPTR+l(X)
L,$BGPTR(X)
•• NEXT
H
MAC TOP

COMMAND TO UNDO!...OOP A l'1ACRO
THIS BUY JUst SETS A DIE! FLAG
WH 1CH THE DOLOOP r:i I SPATCH I NG LOOP LOOI •• UNLSJ[
+STOP:
.BYTE $CMDADR
+
.BYTE ( •• UNLX-STOP)/1.6+1
+
• BYTE 0
+
.WORD·SNAP
+
• WORD •• UNLS
+.
• WORD •• UNLA
+
.ASCIZ/STOPI
+J
;NO SWITCHES
.BYTE: 0 .
;1S STOP ALONE?
• • UNLS: CALL .KISNL
JZABORT
CALL
ARG
$STRADR.$REPEAT
• • UNLA: • BYTE
PUSH
H
"; MORE TO DO
A.O(Y)
MOV
• • UNLL:
ANA
A
; DONE
.JRZ •• [lOUT
.D. 2 (Y)
MOV
DE=STRING ADDR
E.1.(Y)
MOV
.,
LHL[I
LIST TOP
DOLPLH
A,H
MOV
• • ZAP:
ORA
L
.JRZ
; NULL IF NOF1ND
•• NULL
; ELSE STEP
INX
H
;TO STR ADDR
TO STRING ADDRESS
INX
H
INX
H
A,M
MOV
; COMPARE TO
INX
H
;SEARCH TARGET
E
CMP
,JRNZ
•. NONa
?NO MATCH
MOV
A.M
CMP
D
·.,JRNZ
•• NONO
WE GOT A LIVE ONE
DCX
H
r :aAC1< TO FLAG:::;
DCX
H
';.. ·ET. .
; !~;AY 'DELETE' ArM'
$DOLDEL,M
i':;:'
• • NU.LL: CALL INC.SIY

.

,,";

0.097'"
0098:.009';/:'-

.' OCJ9B'-

2B. :' ...

,'.:2;,/'
CIiitt:.E
'.
"
CD OO~)O= 1.:2

TDL
DOL

zeo

CP/M DISK ASSEMBLER VERSION 2.21
- DOL--DOLOOP STUFF AND "'lIB STUFF

O(l9E'-

1808

(lOAO'OOA3--00A4-'
OOAS'"
(lOA6'"
(lOA7'"
OOA:3-'
OOAA'OOAB-'
OOAC---

01 OOOB
09
7E

1800

El
C9

, C5

D5

OOAE--OOBO'"
00B2--OOB!;:i'-

E5
05
:3E05
CD 0000:
E5

i)OB6-'

::':622

OOB:~?'-

.-.-.

00B9'OOBA'OOBD~

Ooce)---

00C2'"
00C3'OOC(:.,00C7-'

OOC8'"
OOCB-'

OOCE--O(IDl--0004'"
0005---

0008'"

OODB-'
C~ODC:'"

OODE-'
O!)EO"", '

0()E2-'

O~i

23

.&.•..:-

01 001B

CD 0000:09
DDEl
El
CD OOOO:lB
54
50
CD 0000: 1~:
00750:3
DD7404
,01 OOOA
09
1:ID7505
DD740(:'

Et
FDES
DOES
FDEl
,01 001B

,OOES'--';", ;,F'DCl':71

'

(lOE7"

,PDE5

OOEA -'
OO£D:'

•,dtr1012 "

'OOE:~';;'

·

6F

(lOAD-'
OOAF'-

,JMPR
•• UNLL '
• MOVE ON DOWN THE L. I Sf. ••
f,J,$BGPTR-4
• • NONO: LXI
• NEXT PTI::;:
DAD
B
A,M
MOV
INX
H
H,M
MOV
L,A
MOV
,JMPR
.• ZAP
• • DOUr: POP H
RET
• • UNLX:
; PROCEDURE to BUILD AN MIB
; NEEDS:
;HL.->DELIM FOLLOWING MACRO NAME IN LINE
RETURNS:
IX - MIS ADDRE:::;S
; HL~>LINE TERMINATOR
MIB ~ETUP WITHARGS PARSED AND STUCK AT
$MIBEND'

23
66

OOAC'"

c:a "

DD?1l!

PAGE 4

.

MAKM I B: PUSH B,
PUSH D
PUSH H
;SAVE NAMEBLOCK FWA
PUSH D
MVI A,S
;GET6 BLOX
;GET MIB SPACE
CALLALLOC
PU::;H H
;SAVE FWA
MVI M,$MIBBLK
;TAG IT
;SKIP TAG
INX H
;AND LENGTH
INX H
LXI S, $MIBEND
;CLEAR STUFF
CALL CLEARIT
POP X,
;GET MIBFWA BACK
; GET NAMEBLOCK FWA
POP H
CALL NXTVAL
;POINT AT STRING
MOV D.H
MOV E,L
; INCREMENT USE COUNT
CALL INCUSE
MOV'$STRPtReX),L
;POINT STRPTR
MOV $STRPTR+1(X).H
LXI B,$SASCII
;POINT ASCII
DAD B
MOV $LINPTR(X),L
MOV SLINPTR+l(X),H
, POP H
;GET CALLING LINE F'TR
PUSH. V
;SAVE IV STACK
PUSH X
;MIBFWA
POP V
~IN V
LXI B,$MIBEND
DADV B'
;WHERE 1"9 STICK~,lT
PIJSH V
; PUT 'ARI3PTRIN"" ,
' ; NOV S('X). Y
. POP B
MOV $ARGPTR< X) .Cl.MOV $+1 tX), I
MOV SARGPTR+f(X),B

BAC~::

PAGE !:i

TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21
DOL.
_. DOL-·-DOLOOP STUFF AND MIS ~;TUFF

OOFO"
00F4'"
·QOF7'"
OOF9'"
OOFB"
OOFE"
0101'010::::'"
0106'0109"
01(1)-'
OJ.OF···
01.11-'
0112-'
01.13'"
0114'"
0116-':
0117'"
Ql1A-'o.l:1.B-··
011D'-011E"011F'"

FD360000
CD 0000: :I.!:.~
2816
FDE3
CD OOOO:OD
CD 0000:11
RDE3
CD OOOO:lC
CD 0000:12
FD3t.000O
18El
FDE5
D·l
1'-'-':E5
DDE5
El
CD 0000:06
El
FDEl
Dl
Cl
[:9

•• MORE: MVI O(V),$TAF
CALL KBCNLP
..JRZ •• DONE

xn:v

CALL EVALARG
CAL.L GETOPND
XTIV
CALL PUTdpND
CALL INC5IY
MVI O(Y),$TAF
..JMPR •• MORE
•• DONE: PUSH Y
POP D
INX D
PUSH H
PUSH X
POP H
CALL ALLOCD
POP H
POP Y
POP D
POP B
RET

;TERMINATE LIST SO FAR
;ARGS??
;NONE (LEFT)
;SETUP FQR EVAL
; GET IT
.,.
;MIBEND STACK BACK
; STIC:K IT THERE
; POINT TO NEXT .
; TERMINATE LI::H
;LOOK FER MORE
;SETUP FOR ALLOCD
; POINT :\; PA~n
;SAVE CURRENT LINE PTR
;GET MIBFWA
; INTO HL
; REI.EASE EXTRA
;RESTORE H

;LEAVE WITH IX-)MACTOP

; KI LM I B..,.-CHA I NS 1"1 I B'" S BACI127-'
012A'"
(121)-'
. 01:30'--

7C
B5
C8
7E
FE22
CO
CD 01:32"
01 0000
.CD 0000:18
18EE

I:1.42,":
CI:t 0000 :'18
,CD. 0600: 1E .
01.4.5
. 0148-'E~
0149'"
C~

DELM I B: PU:3H B
PU:;::H H
LXI B,$FORPTR
. CALL NXTABC
CALL.FREEALL
POP H
"PIJSH 1-1
, LX 1..B, $:;:;TRPTR
CALL NXTABt:
"CALL

~;DEL

POP H
POPS

; DELETE

; DE;CUS!i COUNT·

~P(ttNT.ATS.TR:INCi

;DEC IT

. ; RE:;::TORE H , .

TtlL ZEtO CP/M DISK ASSEMBLER VERSION 2.21
DOL
- DOL--DOLOOP STUFF AND MIS STUFF

C3 !)!)!)!):OE

.JMF'

• END

FREE

;THEN THE MIS ITSELF

PAGE 7

:;~ 1.
CP /1'1 DISK A!:;SEI'1BLEF< VER!:::;ION
!:~;TUFF AND MIB !::;TUFF
+++++ !::WMBOL TABI....E +++++

'rDL
DOL

2::::0

AA!::;N
AI... I.... 0CD
BLANK
CLEARI
CNTRLO
CPU::IZ

':;: It

- DOL ---[lOLOOP
005F

0000:06 X
0020
0000:09 X

C5D9
0140
C814
CUI~CX
C:. CO
0011
001 ~~:
C.DP
C: ..,'X!::;
0(107
DDTON C!;:iCE
DEVCL2 C57D
..
DEVCL6 ,-.t::'
........1'=' __'
DEVI'10 C5::m
DEVTNB C!::iBF
DEVVB C!::iC 1
DEVVN C!:;iEl9
DI:::;PLA OOO(>:OA
DUMBS'- C~::i77
I::DMODE C::::1C
EDNEWS [:4r~~3
C:;::04
EDPO
ERABI,.. 0002
En.ASN (101 !;:i
ER.CNV (lOll;;..
EFL IHM 00:30
ER.EDT OO::::~i
ER. IMP OOO:~::
ER. NAI'1 0029
ERn NUI"1 002B
ER.OVE 001E
EF,. SEP 0021
ER.SW 00:::::2
EV(.·':jL
OOOO:OC
E. L.VAL 0001
FCNTH C~iD2
FCNTL C~:;De,
FL.A G!::: C!5CB
FREEAL 0000= OF
FWDF'TF< C5E7
INC5IY 0000: :1.2
..J 1...1 NK
C~340
~£::-

~:OB
ER.BOX (lOlA

X

EF~.COR

O(JO~~
LF
I"IACTOF' C25E
I'.IBL.KB 0000
NSADDR C:!:::()~2
NXTPTF< 0000: lA X
OLDKEY C49L1
C!5!5B
OPR~3P
C:~55E
PCNT
PUTLPT 0000: 1D X

RAN~=;f-IT

0000:04-

(~BORT

x

I

X

OOtS

EF<.DIV 001::3
EH. FMT 00:3::::
ER.LAB 002~::i
ER.NE;::G 00::::: A
ER.NXT· OO:l.D
EF~. PA~-;: 002A
ER.SNP 00:::::1
ER.TEF< 0020
EvALAR OOOO:OD
E.SIZ OOO~:i
FCNTI C5D::::
FCNTV C~5EO
FOREOR C5DO
FREELS C~:iE~3
GETL.PT 0000: :1.0
INCHO C5E9
I{BCNLP 0000: 1 ~)
I::>
'-' X

C4AO

(:729

C!55D
C4A7
DFFF
0005
C7CD
C5:::::F

C5BB
C!;:i79
C5C9
C:5r.:..:!:i

C2EA
c:!:! 1~"2

C80E
C80(::'
C:::HA
00::::4
00lF
()O26
0019
0028
002D
00:39

0014
00240004
0027

0002
000:1.

Ct5D5
CAr'!::.:

OOOO:OE X

C2EC
C:5':;I:;:
O(H)(I::

C7FF

l4 X

0000: le.

x

C5::':6
C5EB
OOOA

OOO(): 1. ':;1 X

C49F
00:1.4
C2E7
·C5DA
C9i)O
007F
OOOO::l.E X

COC::;:

.....
FiAGE .;::.

TDL Z:::O CP/M DISK ASSEMBLER VERSION :;~. 21
DOL
- DOL -·-DOLOOP STI...IFF AND MIB STUFF
+++++ SYMBOL. TABLE ++ .... ++
STAKTO
TAB
TBFEND
TOP
TTYPTR
V:3PTR
VOICEO
$AADR
$ANY
$BGPTR
$CPLBL
$DOLOQ
$FLAGS
$GOSUB
$IVAL
$LOCPT
$NAME
$I\IULL
$SAME
$STRPT
.BLNK.

(:000
OOOt::,
C:533

C818
C2El
C57:3
(:563
(H)10
OOlA
OOOF
002A
0002
0002
001A
0004
0009
OOOA
0002
0020
000:3
0000=03 X

STOP
TAPBUF
TEMPHD
TTY BEG
TXTWIN
VDCHAR
WRMODE
$ADDRF
$ANYNA
$BNDL
$CSBLO
$DVAL
$PORBL
$IADR
$KEYBL
$MIBBL
$NASCI
$NVALU
$SAS(:I
$TAF
.DATA.

005D"
C4B:3
COCA
C261
C7E2
C49E
C5EE
0007
FFFC
0007
0028
0000
0024
OOOC
002e.
0022
0009
0005
OOOA
0000
0000*

I

X

STRSIZ C800
TAPCON C4AF
TEMP!::: C2E5
TTY END C2El
UARTFL C49C
VDNLF C5CF
ZCiIM2 ··0001.
$AIJDRI 0005
$ANYVA FFFE
$CALLE OOOD
$DATAP 0007
001(:
$END
$FOF~PT OOOB
$lNPBU 0018
$LENGT 000l.
$MIBEN 0018
$NDEL 0080
$REPEA 001E
$SLEN 0006
$TYPE 0000
• PROG. 014D"-

SUBSTU (:534
TAPPRO C4Bl
TMPAF~13 C7AD
TTYINT C2E3
USREND C5Fl
VIPLH C545
Z·GREND C81.D
$ADDRS 0009,
$ARGPT 0011
$CMDAD 0018
$DOLDE 0001
$FADR QOOE
$FVAL 0006
$INPPT 0016
$LINPT 0005
$NAMAD OOOA
$NLINK 000::::
$RVSTU 001:3
$STRAD 0008
$USE
0005
X

TDL
CMl.

zeO

CP/M DISK ASSEMBLER VERSION 2.21

PAGE 1

• INSERT A=S.ASM
@.REMARK /
@
@
@
@
@
@
@
@
@
@

*

*

*

*

*

*******

@

@
@

*

* * *
***
*******

"WHEN YOU .CARE ENOUGH TO PROGRAM
THE VERY BEST"

@

ZGRASS V2.00000000
@BY JAY FENTON, NOLA DONATO, ~ND TOM DEFANTI

@

(C)

@

1978

@

@/

..

:

,'.:.

'.

• INSERT A:ZRAM.ASM
.LINK
.PREL
.:tDENT eM:!.
.• I NTERN.t;MDTAB
• INTERN CONTAB
• INTERN DATA
.INTERN END
.INTERN.FPR
• INTERN GOTO
.' INTERN IF
• INTERN LET
• INTERN NEXT
• INTERN RESTORE
• INTERN RETURN
• INTERN !::*: I P
• INTERN THEN
.EXTERN ABORT
.EXTERN ACOPY
~EXTERN ALLOC
.EXTERN ALLOCD
• EXTERNAf~RAY
• EXTERN ARG"
.EXTERN BOX
.EXTERN CARTYP
• EXTERN CL~AR.IT
.EXTERN CMDREN
• EX TERN"CMbRES
jo EXTERN'GMDS!(P
;.ExtERNCORE
~EXT'ERN .DELE;Tf;::'
.. E~TERN··D,ISPLAY ,
.EXTERN.D0t:/0RE
.~

Ex TerR~ERRPGI"I

.

,

PAGE 2

TDl Z80 CP/M DISK ASSEMBLER VERSION 2.21
CMl

.EXTERN
• EXTERN
• EXTERN
.EXTERN
• EXTERN
. EXTERN
• EXTERN
. EXTERN
• EXTERN
• EXTEHN
.E;XTERN
.EXTERN
• EXTERN
• EXTERN
• EXTERN
.EXTERN
• EXTERN
. EXTERN
• EXTERN
. EXTERN
• EXTERN
• EXTERN
.EXTERN
• EXTERN
• EXTERN
.EXTERN
• EXTERN
• EXTERN
.EXTERN
.EXTERN
• EXTERN
.EXTERN
.EXTERN
.EXTERN
• EXTEf.~N.
.EXTERN
• EXTERN
• EXTERN
.EXTERN
. EXTERN
"EXTERN
. EXTERN
• EXTERN
.EXTERN
"EXTERN
.EXTERN
"EXTEHN
• EX'rEf;:N
.EXTERN
• EXTERN
.EXTERN
.EXTERN
. EXTERN
. EXTERN
• EXTERN

EVAl
EVAU-)RO
EDIT
FINDH(')!3H
FINDLAB
FORlvlAT
FREE
OETtISI<
GETLPT
CiETOPND
HELP
HEXHL
INIVDA
INIVDM
INIDEV
INPTTY
II\IPUT
I!::;NAI'1E
I!;:;NL.
KISNL
KLB
LAROE
LINE
LINEP
MODIFY
NAMADR
NAI'1~;ET

NL.PNT
NXTABC
NXTLNK
NXTPTR
NXTVAL
OUTCH
PDECBC
PRINT
PRINTF
PRINH1L
PRTYPA
PSCAN
PUTLPT
PUTOPND
RENAME:
RETNONE
RET ONE
ri:OBINI
!:::;CANB
!::;CANL.{.:)E/
!::;CANNL
SCL.E~'.\R

!:;l"l?)LL
SN?'iP
!:;TOP
!3TREO+<
SWITCH

TABPNT

PAGE: :3

TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21
CM:!.

"EXTERN
.EXTERN
• EXTEF:N
• EXTERN

0000'"
0002'"
0004'"
0006'"
000:;::'"

OOOA'"
OOOC·"
OOOE'"
0010'"
001.2'"
0014'"
0016"
001:;::"
(lOlA"
001C'"
OOlE'"
0020'"
0022'"
0024'"
. 0026'"

OO::?6 ..'
OOOO=OA
0,05:;::'"
04::::D'"
OOOO::L 7
Ol27'"
O:::::Fl'"
(I000=1.F
0:3B::::"C:~:7C

c:::;::!::!c:
0460'"
0000::2[1
0:269"
0:2C4'"
0000: :37
C:3EC
O:~:OB'"

O::::6F'"
0000:4D

OOOO:4E
C4~-::C

002A'"
OO:2C'"
002E'"
00:::;:0'"
00:::;:2'"

(:47(:

OO:~::4'"

(:4:::(:

OOOO:4F
C4·~:'C
CL~6C

CMDTAB=

Tt!-)NGENT
TEXT
USEMAP
WHATSH:;

.WORD ANYARGS
BOX
"WORD CONTROL
• WORD DAT{'\
.WORD EDIT

•wom:r

"worm

FOR
• WORD. 130TO
• worm HELP
.WORD IF
AF I X [...I] [
• WORD AF I Xl 1<:1 [
.WORD LET
.WORD MODIFY
.WORD NEXT
• WORD ONEr 10 ) ~·1. f.:,+FST I NT :1

( "V 11"':1.0:1. G!) * l6+F!::;T I NT:1
( "X 1I'-l01.0) *It.+F!:::T INT J
( II Y II --1 0 1 G! ) 16""F!;::T I NT:I
(" Z "-1.(10) *l(:.+FSTINTJ

;RETURNS 1. IF THERE/S ARGS LEFT,

00::-::6'"
00:::::7'"
()(i:3::;: ...
OO:~::9'"

OO:::::B'"

oo:::m·'·
OO::;::F'"
'004·7'"
004:;::'"
004C'" .
OO·lj·F···
l)050'"

0051'"
0052'"

*

0 OTHERWISE

M.CMD[ANYARGS, •• ANYX,0,ARRAY,0 ••• ANY1J[
1. E:
+ANYARG!::;:
• BYTE $CI'1DADR
03
+
.BYTE ( •• ANYX-ANYARGS)/16+1
00
+
.BYTE 0
0000:08
+
.WORD ARRAY
004:::';: ..'
+
• I...JORD •• ANY 1.
0000
+
.WORD 0
414E59415247+
.ASCIZ /ANYARGS!
i"J
.BYTE 0 ;NO SWI~CHES
00
•• (~NY 1.: L I XD MACTOP
;.SEE r F $M :r BEND
DD2A C25E
MOV A.$MIBEND{X)
;IS 0
DD7E:l.B
; NOFiE. RET 1
ORA A
EO
~HET TO HEJONE
C:O.
RNZ
MOV E,A
~5F
I",OV D.l~
~57

TDL
eMI

zao

PAGE 4

CP/M DISK ASSEMBLER VERSION 2.21

0053"
0055'"

005:3'"
OO~5A'·

00513"
005D'"
005F"
OQ6l'-

;RET A 0

• • ANYX:

.005:3"

.0059'"

MVI A,$IVAL.
,JMP RETN(INE

3E04
C:3 0000: :3F

; ***CONTROL. COMMAND~**
M.CMDECONTROL.CONTRX.O,CORE.CONTRH,CONTRIJE
18
+CONTROL:
.BYTE $CM'DADR
00
+
.BYTE (CONTRX-CONTROL.)/16+1
00
+
.BYTE 0
0000:10
+
.WORD CORE
006A'"
+
.WORD CONTRI
0060'"
+
.wORD CONTRH
434F4E54524F+
.ASCIZ /CONTROL!
+]

006,'~"

006.A .'
006D"
006F'"
0070'"
0.07::':'"

(11)76"
0079"
007A'"

. OCI7B'"

00
CD 0000:09
0800
E5
FD6EOI
FD6602
01 OOOA
09

7E
D640

0070 ....

F:2

0080'"
0080"

CD 0000:14

00f~4'"

.BYTE 0
CONTR1= CALL. ARG
CONTRH= .BYTE $STRADR.$TAF
PUSH H
MOV L..I(Y)
;GET ADDR
MOV 1-I,2(Y)
L.XI B.$SASCII
;~ET FIRST CHAR
DAD B
MOV A.M
SUI "A"-l
;IS LT O?
.JP •• OK
;·BAD
CHARE
ERRClR
ER.CTL.
• • BAD:
CALL ERRPGM
+
. BYTE ER. CTL.
+
+]

0084"
0086'"
OOS'7'"
OOE:A"
OOSB'"
OOSC"

OOE:E"
0091'"

0094'"
OO'~5'"

·009:::'"
009'~'"

OO':;'A'"
009D'-

009E'"

FEIB
F200}30'"
57
87

4F
0600
21 OOAA'"
CD 0000:31
E5
21 00A3'"
E3

E5
2j. C5CA
4A
,09

009F"
7E
.OOAO···
EB
(IOA1'
,EX
OOA2'"
·E9
OCIA:!{'" . .5F
"'O()A4'"
····16l1f.)···.•
. (:>OA6,·>

3E04.'

,OOAS .... '

El

, OOA';;>:'

.(:3 0000: 3F'

CP I 27 ; OT Z?
;YUP
.JP •• BAD
;SAVE A
CONTRL= MOV D.A
;DOUBLE IT
ADD A
;ENTRY FROM 10 SCANNER
MOV C.A
MVI 13.0
LXI H.CONTAB-2 ; GO THF~U .TABLE
;GET'VALUE
CAL.L NXTABC
; SAVE IT
PUSH H
;RET ADDR
LXI I-I.CONRET
.; ON STAC.<
XTHL
;NOW·FETCH FLAGS BYTE
PUSH H
;HAS 26 BYTES IN TABLE
LX I H,FLAGS··1
MOV C,D
;GET CNTL.. CHAR BACK
;8 ZEROED BY MVI ABOVE
DAD B
; I;:iET FLAG VALUE
MOV A.M
.; INTO . DE
XCHG
.; GET (iOTO· ADDR
POP H
rGOTOIT
PCHL
. ,; $ETUP FOR RETURN
CONRET:MCIV E. A
. MV~ D.O
MVI A.$IVAL..
; I~ET H BACK tEOL F'TR)
POP H
; F TO (
;11. CREATE STRING VAR_VAR+EXPR3
; 12. 1:::FEXPR2 OR VARCEXPR2
01.57'"
Ol5A"
(h5B'"
. OiSE'"
,016(j'"
'Ole:3"
0160"

0.167'"

CD 0000:29
E5
CD ·ObOO:2F
FE28 .
CC 0000::38
~:65F

3Eb5
CD (1000: 06.

•• FOR 1: CALL IEXPR2. HL->VAR

; !;:;AVE ,-:;:'VAR
;POINT DE->FORASCII

.
,.

•

It'.

MOV E.A
XF<{~

01B:3'"

El

01.B9···

01. BC:'"

CD 0000:
lB

01.BD···

El

(lIBE'"

01C8'"
01 Cf71'"

;LIKE THIS

I"IOV A, E

:3E5F
CD 0000:05

01. C.:';:...'

;PUT IN NEW BLOCK

7B

DDE~5

0:1. B:3""
OtB!S'"

otc:~:'"

PREV FORBU:::

D1-

57

OlC:I.···
01C2'"

; CHA I NIT I 1\1
; GET

XTHL
Pt,I!3H H
PU!::;H X
POP D

E::::

E5

OlB2'"

(1:1. F:JF ."

•• NOTO:

;IX<- FWA OF FORBLK

; WHEW !
; COPY

TILL ,_

C{:')LL. ACOPY

POP 1'1
O~5

E5

.
12
1. :::;:
CD 0000:4:2
201.l
::3E:::;:1

12

A

ADC D
MOV [I,A
MVI A, ,.' _. ,,'

CAL.L. ACOPY

; VAR... VAR....

DCX [I
POP H

;VAR~_W~F(

PU3H H
l"IVI A, ..,+",
!::;TAX D

;AND SAVE IT AGAIN
; BUILD V{iR.,. . VAR+l.

TNX D
CAL.L. !3CANB
.JF:NZ ". !3TEP

MV I

A. "'1 "

STAX D

;

H-->EXPF~

; ::::;CAN·OVEF~
; SUMPT IN. THE:F{E

TD~

zeo CP/M DISK ASSEMBLER VERSION

PAGE 8

2.21

CI'11

'OICB'"
0ICC'"
0ICD"
01CE"
01.CF·'

INX 0

1:3

AF
1:2 '
1,:3"
1.8:39

01Dl'"

5~'354455000

• • :3TEA=

01D6~"

544FOO
CO 0000:29
05

• • TOA:

01.D9'·

0IDC'"
0IDO"
OJ.Etl'''

11 OlOl"

CD_OOOO:49

0IE:~V'

200'~

01ES"
OlE8"

CD 0000: 4·::::

01EB'"

CO 0000:27
CA 0247"

0IEE" ,

01.

0IEF'"

CO 0000:29
FE2C

01f:2'"
01F4'"

OlF6"
OlF7'"

E5
EOAO
,20F9

cJ1FF" '
0201'"

El

0202'"

~-::E04

020A"

020S'"
020C"

020E'"
020F'"
0212'"
0213"

EDAO

CO 0000:15
F07E02

· • PLUS:

E!::i
FS

DDE5
El

01

OOO~-i)

09
:;:'E5F

021A"
021C"

Fl.

0210'"

B7

0218'"
0219"

02lE'"
0221'"
022:3"
0224'"

EB

0225'"

El

ORA A

,...IP •• SOK
MVI M•.,(."
SCrt(: INX H
XCHG
POP H
XTHL
• • COpy: L.DI
MOV A.M
CPI ... .,'
,JRZ •• E2X

It

02.:26 "
0227'"
0229,"
',,"022A'"

• • NOSE:
• • SORE:

CD 0000:27

CD 0000:05
lB
ES
363E

0215"

• • FOR,J:
• • NOST:

2001

0IF:;::'"
01FA"
0IFO"

" 0204"
0207'"

• • ~?TEP:

'EbAO

7£'
t;;;E20

XRA A
STAX 0 ;PUT IN
INXD
,.JMPR •• PLUS
.ASCIZ ISTEPI
.ASCIZ ITOI
CALL, KLB
PUSH D
LXI D••• STEA
CALL STREQI<
..JRNZ •• NOST
CALL SCANLAB
CALL ISNL
oJZ '," FORE
POP 0
CALL I 1. F'A~::::r
rEOL
;FOR NEXT

+]

(>25::::'"
() :2 ~:i :::! ,.0254'"

E5
DDE!5

0:2!56'"

CD 0000: :::::2

(j2!51~)

.,'

DD2A

C2~5E

DD7~30B

025[1'"
0:260'"

D[l740C

()~~c':::~

DDE:!.

",

0:26!::;""

El

0266'"

C:3 0000: lEl

0269'"

O:;;::I.:.A···
026B'"
0:26C'"
0261:.'"
0270'"
0:272'"

.::;;
1·-·

o/.:.

00
C:;:BC
0278'"
4E455B5400

•• FORX:
FORDEL: PUSH H ;SAVE FORBLK PTR FOR FREE
PUSH X
CALL I\IXTLI\IK
;OET PREV FORBL.K
LIXD MACTOP
;CURRENT MIS
MOV SFORPTR(X),L
MOV SFORPTR+l(X),H
POP X
POP H
..JI"IF' F'REE

1'1.Cl"fD[NEXT, ... I\IEXX,O.AFIX[I\I], .• NEXA, ... NEX1J[
+I\IEXT=
.BYTE $CMDADR
+
.BYTE ( •• NEXX-I\IEXT)/16+1
+
.BYTE 0
+
.WOFm AFIX[I\IJ[("N"--l0lG!)-lI·1./.:.+FSTINT]
+
• WOHD •• NEX 1
+
.W(~D •• NEXA
+
.ASCIZ INEXTI
+]

0277'"
<)2'7:=: .,"
027B'"
027[1'"
0271:.'"
()2::::t .,'
()~;~:::4

,0-

00
CD 0000: 0':;1

OAOO
E5
:2A C:25E

01. OOOB
CD 0000: :::: 1.

() :;~ ::: ,'7 ,.'
():;~::::7'"

..·
():~:E:C: ",
(r:;::::;l~

2004
CD 0000=14

lD

02BD····

. BYTE 0
; NO SW I TCI-·IES
•• NEXl.= CALL ARG
;GET VAR ADDR
•• I\IEXA= .BYTE 'NAME,STAF
pu~::ai

H

LHLD MACTOP
LXI 8,SFORPTR
CALL NXTABC
•• NXTE: ZEHROR ER.I\IXT[
+
JRNZ •• 0001
+
CALL ERRPGM
+
.BYTE ER.NXT
+ •. OOOI:J

()~~~::[I···

E5

PU::;::H H

(>:2::::E'"
0:291 "

01. 0009
09

():2:~~;~

CD 0000: j.6

LXIB,9
DAD B
CALL... EW4L.ARO

<

;GEr AT FORBLK
;LATEST ENTRY
;IF ZERO, WE/RE DEAD

::HL HAS FORElL.. K ADDR
;FIRST DO INCR EVAL
; I GNOREI~ESUL T:;::

PAGE lO

T'DL Z80 CP/M DISK ASSEMBLER VERSION 2. 2l
CMl

0:295'"
0:2';;>6'"
0298"
029B'"
02';;>E"
029F"
02A(I"

:;:E04
CD 0000:15
FD7EOI
El
B7
200A

()2A2'"

01 0007

02A5'"
02A:3"
02AA"
O:2AB"

CD 0000::3 l.

02AC'"
02AD'"
02AF"
02B2"
02B6"
02B9"
02BC'"
02BE'"
02BF'"
02C:2"
02C:;:'"
02C4"
02C4"
02C5"
O:;;::C(:""
02C7"
02C9"
02(:B'"
02CD'"
02D5'"
02D6"
02D7'"
02E7'"
02EA'"
02EE'" .
t)2F2·",

INX H
MVI
A, $ IVAL
CALL EVAL
MOV A,E.LVAL(Y)
POP H
ORA .A
..JRNZ •• FALL
LXI B,7
CALL NXTABC
..JRZ •• NXTE
POP PSW
RET

23

PI
C·;>

;SAVE CURRENT FORBLK
• • FALL.: PUSH H
PUSH X
;POINT TO PREV FORBLOK
CALL NXTLNK
LIXD MAC TOP
MOV $F(lRPTR(X),L
MOV$FORPTR+l(X),H
POP X
POP H
CALL FREE
;ZAP CURRENT
;EOL PTR
El
POP H
; FAL.L THRU.
C9
RET
• .NEXX:
M.CMD[ONERROR,~.ONEX.0~AFIXrO] ••• ONEA, •• ONE1][
18
+ONERROR:
.BYTE $CMDADR
05
+
.BYTE ( •• ONEX-ONERROR)/16+1
00
+
.BYTE 0
C3CC
+
• WORD AFI X[0] [ ( "0"·-j,01GJ) -!(·1.6+FSTINT]
0:2E7'"
+
.• WORD •• ONEI
02D6'"
+
.WORD •• ONEA
4F4E4552524F+
• A:::;CIZ IONERRORI
+1
00
• BYTE 0
; NO SW ITCHES
63
•• ONEA: ;SYTE 99
414E59205A47
.ASCIZ IANY ZGRASS CODEI
0:1. 0000
E[l43 C7:29
ED43 C72B
C[l0000:28
·~)

•• ONE1: LXI B,O.
SBCD ONEBUF
SBCD ONEBUF+2
CALL KISNL
RZ
LXI D.ONEBUF+4
• • MORE: LDI
CAL.L ISNL
.JRNZ •• MORE
CPI "; "
..JRZ •• MORE

:;~g::: >;':~~}

XRAA'

STAXD
INR A'
!3 f A ONEBUF
RET

::::C

0307"

j

():;:t)A'"

Q:30B .~:

;18.0 (FAIL, I.E. GO UP)?
; NOPE, FALL THRU, DEL FORBLI<'
;GET PTRTO BACK ADDR
;GET IT
;BAD ERROR
;TRASH OLD HL EOL
;..JUST RETURN

E5
DDE5
CD 0000:32
DD2A (:25E
DD750B
DD740C
DDEI
El
CD OOOO:lB

C.'_1
0:2F5 "
.02FI:..···
1:1. C72D
'EDAO
02F9"
O:2FB'"
CD 0000:27
02FE'" . 20F';>
0:300"
FE::::B
0:302"',' 28F5

030;:: .:.

;POP OVER TERMY
;ASK FOR INTEGER'
;CHECK OUT CONDITIONAL.
;GET VALUE

• .ONEX:

;CLEAR OUT ONEBUF A BIT
; EOL?
;YUP, RETURN
; !:nAfH AT #4·
;COPY TILL DONE

..
.,

•

II

•

,

.11

it

a

; COpy··' ;., TOO
; STUFF ·/~ NULL IN
;·AT.,. END. .
; ANJ::I ~~~ET ONEBt..lF F I R~;T

TDl Z80 CP/M DISK
CMl

ASSEMBl~R

F'AGE 11

VERSION 2.21

•• RETA ••• RET1J[
$CMDADR
.BYTE (RETX-RETURN)/16+1
.BYTE 0
.WORD REMARK
.WORD •• RETI
• WOFm ' •• RETA
.ASCIZ IRETURN/

M.CMD[RETURN,RETX,0,REMARK~

0:308'"
030C'"
030D'"
030E"
(>::::10'"

0312"
0314'"

+RETURN:
18
04
,+
00
+
+
044C'"
031C'"
+
031 F "
+
52455455524E+

~BYTE

+]

031B'"
031C'"
O::':::IF'"
0321 "
0324"
0325"
0:327'"
032A ... ·
O:32B~

032F"
()3:32'"

0334'"
0887'"
03:3A'"
. 0:3:3D"
033D"
0:33F'"
03:3F"
0::::40'~

0~'341"

()342'"

0::::44"
0346."
0848'"
034E"

034F"
0352'"
0354"
,0356~

,·0357"
()~:5A'"

035B'"
08~3E'"

085F'"
031.:.3"
Cl361.:,'"
. ()31.:;91,
L ;":)'
0 3 ~"
....

."'1,,,·

00
CD' 0000:09
FE1E
CD 0000: IE
B7
;2004
21 0:3:30'"
C9
FD2A C25E
01 0013
FD09
CD 0000: :3D
,~2 :1.0830"
C:3 0000: :3F
0000

• BYTE' I)
; NO SWITCHES
•• RET 1: CALL
ARG
•• RETA: .BYTE
$ANYVAl,$REPEAT
CALL
GETOPND ;OET THE OPERAND
. ORA A
;IS 01
JRNZ •• RETB
;NO-OET ARG
LXI H.RFAKE
;FAKE A NULL
RET
;BACK TO RETONE
•• RETB: LIYD
MACTOP ;IY -> MIB
LXI B,$RVSTUFF ;SETUP Y
DADY B
CALL PUTOPND
;STUFF IT
RETOUT: LXI H.RFAKE
;STUFF IT
JMP RETNONE
; AND RETURN VALUE
RETX=
RFAKE:
• WORD 0 ; FAKE NULL EOF

.• RESX:
M.CMD[OOSUB •• ~GOSX.I).GETDSK.OOTARG, •• GOS1][
18
+OOSUB: .BYTE $CMDADR
04
+
.BYTE ( •• GOSX-GOSUB)/16+1
00
+
.BYTE 0
OOOO:IC
+'
.WORD GETDSK
034F"
+
• WORD •• GOSI
04·00"
+
• WORD GOTARG
4i4F5:3~554200+
• ASCI Z IGOSUBI
+J
; NO !:..;W I TO'IES
00
CD 0000:29
;START LIKE OOTO
DDE5
;PUTSTUFF ON STACK
FDE5
E~'i
;SAVE ->TO LABEL
CD 0000:44
;GE1 LINE TO RET TO
E3
;REPlACE ON STACK
11 0000:40
; RETIJRN ADOR
D5
FD2A C25E"
;OET &INCROOSUB BYTE
FD341.A.
;rciINDICATE OOStlB
CD doon:! ;1,
'. ; I)ET TCJCOf.:tE
.~ !SAVEL.INE f.',TR·'
CD' 0000: .8C
C3 . 0006:~13
Ji-\t'fD' EXECLITE" iT

.

7 •

•

•

PAGE 12

TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21
CM1

O:36F'"
0370'"
0371"
0:372"0374"
O~';:76"-

037:~"-

1.8
05
00
0000:48
0~';:7E"-

0:3::: 1"
5:34B4950i)O

+SKIP:
+
+

+
+
+
-I"

• BYTE $CMDADR
• BYTE ( •• SKPX-SKIP)/16+1.
• BYTE (I
• WORD STOP
• WORD •• SKP1.
• WORD •• SKPA
.ASCIZ ISKIPI

+J
037D"
037E"
038:1...·

038:3"0:386'"
0:389"()~~~=:A

."

03t:::B'"
O:;:8E"03:3F"
0391. "
0:394"0395'"
0:396'"
0397'"
()3 ?=3"·
1

0:399"
039B"
0:39C'"
0:39D'"
0:39E"0:3 ';l> F'"

.BYTE 0
• • SKP1: CALL ARO
•• SKPA: .BYTE $IVA~,O
MOV E,I(Y)
MOV (l,2(Y)
XRA A
ORA D
,JM •• SKP
ORA E
,JRZ •• SI

0409 FD5E01 'FD5602 AF B2 FA 03';-fD" B3 280(: CD 0000:44 lB B7 C:3 7A B3 20F(:, 2B C9 2B 7E B7 03AO" 0:3?t;;:··' (j3A:3'" O:3A6'" 1~::3 0000: OE FEOA ()::':A:::··· 20F:3 03AA': 7A B3 1:3 20EE C9 28 1:3EA O:;:AB'" O:3AC" O:;:AD" ' 0:3AF" 03BO" 0:3Bl"()3B:'::··· 0:3B:3'" 03B4" 0:3B5..-' 0:3B,6" 0:3B8:" O:3BA"- . O::::BC ." . ., " " .~ n • a .. + + 00 0000: 25 ()3CO ..' 03D4"494600 ;C:iET A NUMBER ;IN DE ;CHECK FOR 0 ; IS +, 0 OR _.-;:. ;ITS NEGATIVE ; I S ALL ZERer'? ;ITS 0 ;SKIP NL"-S UNTIL DE=O ; CHEC~< FOR NULL ;IS NULL (FROM SCANNL) ;CHECK FOR DE::::(I . 7 ...... ; BACKUP8~- :>NL ;ALL DONE ;BACKUP ONE ;PICKUP CURRENT CHAR ;IS NO NULL ;IS NULL, POINT AT FIRST ; CHAR OF STF< I NO ;IS NL? ; NOPE ;CHECK IF DE=O ;INCR ,JUST IN CASE ; MORE ;NO MORE ; DE=DE"-j. ;ZIP MORE !3KF',X: +IF: 18 04 ;NO SWITCHES + + + ·f- M.CMb[IF ••• FXX,O,INPUT, •• IFA, •• FI1J[ .BYTE $CMDADR .BYTE ( •• FXX-IF)/16+1 .BYTE (I , • WORD . INPUT • WORD •• FI1 .WORD •• IFA , • A!;:;C I Z I I F I +:f ,03BF'" 00 ,0:3CO'" CD' 00(11): 29 • .FI 1: • BYTE 0 ,CALLI 524553544F52+ • ASC I Z IRESTOREI +J 00 • BYTE 0 ; NO SW ITCHES FD2A C25E .~RESl.: LIYD MACTOP FD360700 MVI'$DATAPTR(Y),O FD36080<) MV I $DATAPTR+ 1 ( Y ).• 0 ; CLEAR OUT ;.DATAP1"R IN MIB F .0124" OOOD qOF6" C4A5 OOOB. 000:3 0010 ,~ELETE 0000:11 X DEVCL,.:3 C57F DEVCL7 C587 DEVNM C5B7" DEVTNC C5.C~:: .DEVVBL C591 DEVYS C5C7 DOLPLH C2E8 EDEtCNT C4AD '. EDMCIOE C8:1. C EDNEWS C4A5 EDPO C8'04 END 042F" I ERR P(il"l 0000: 14 X ER.BOX001A ER.COR 'OOlB ER. DIV OOU:: ER. FMT 00:3:?ER.LAB 0025 ER. NEG OO:;:A ER.NXT 001D ER.• PAR 002A ER. SNP 00:;: 1 ER.lER 0020 EVALAR 0000:16 X E.SI! 0005 FCNT.! C5D:3 FCN1'V C5EO FIRST C4A:;: FOREGR (51)0 FREELS CSe:5 CiETDSK .OPO(I,~.1 C X ,O()TARG (14.0t~··· HCAF: 22 X ISNAME' '0006:26 X KEYFL.iS' Cl'FF 1 ABORT ALLOCD ARRAY BOTTOM CLARGE; CLRALL CMDTA'B CNTRLO CONTAB CQNTRO CPLARE CSBLOK CSMALL CXOR C.CY C.XF 0000:04 X 0000:07 X 0000:08 X C4A9 OOEA" 0101'000.0'" I C5D9 OOAC" I 0058" CI1C C68D OOF 1 .' OOFD" (l000 OOOF 000';> C:. YS DEVCLO C579 DEVCL4 C581 DEVFB C5CB DEVNT C58D DEVVA C58D DEVVC 'C5C5 DEVXCD C5B3 DOLPPTC2EA EDCCNT C4A7 EDNAME C4Al EDOCX CS08 EDF-'TI:;:C C4AB ENDI 045D" ER •.ARA q02F ER.CHN '0002 ER. CTL 00:;:6 ER.DP 0037 ER.FNF OI)IC ER.MAC 0022 ER.NOT 0023 ER.OFL 0017 ER.REN 002C ER.SPC'002E ER .)JFL OO:;::~: EXTDEL 002E E. TYP.' 0000 FCNT..J C504 FCNTY (:5E3 FLAGS C5CB FORMAT OOOO:J.A X FSTDOL C48C GETLPT ,OOOO:IDX t. GOTO' t)3Fl'" 'H~LP 0009: 1F X ,tN'~DEV 0000:2:3 X INIWHL OOEO~·:',· ISNL '0000: 27 X "KEYPTK C!:'t32: ,::t,t ACOPY 0000:05 X ANYARG 003(;:." BACKGR C5CC: BOX 0000: OA ;:X CLARX OOED" ': CMDREN' 6000: OD X CNOISE 0115~~ CNTRLU 0.0.15 CONTRI 006A" CONTRX 0127" CPLSIZ 0140 QOFC'.CSEr CURCX C814 c.Co 0.0.11 00.1::::: C.DP c.xs 0.00.7 DATA 0430" I DEVCLI C57B OEVCL5 C583 DEVHC,B C58F OEVTNA C:5BB DEVVAR C579 "DEVVD C5C,9 DEVVcb C5B5 COMORE 0.000:13 X EDIT 0.0.0.0:17 X EDNCX C80C EDClCY C8o.A EDF'TRL C4A9 ENDX 0460'ER.ARO 00.34 ER~CMD Oo.IF ER.DEL 0026 ER.DSK 0019 ER.FOR 0028 ER.NAE 00.20 EF< •NUL 0039 ER.OPN 001,4· ER.RET 0024 ER.STK 0004 ER. UNF 0027 E.HYALOO()2 E. VAL ()(IQl FCNTK C5D5 FINDHA'000Q:t8 X FOR 0127" I FRAOSI 0400 FSTTNi C2EC (JETOF'N ,OOOl): 1E' X 001·0 1~6407:'" HEXHL .• CiCIOQ,;, 20 X . IN ITWO'C'()E,e;'" ' INPTi¥:,,':OOC)(I: 24,0")( '~".JNI< (:540 'KE'/'rRK',C7F7 ' ','_ • ,do, . < :;., , , ADDON 0001 0000:09 X ARG BLAN.( , 0020 CARTYP Oo.OO:OB" X CLEARI OOOO:OC X CMDRES OOOO:OE .X CNlRL OOOC CNTRLZ C5E4 CONTRH Oo.6D" 0000:10 X CQRE CQ 0123"CSFLAO'C260 CURCY C81~. 0012 C.C1 C:. E:T 0002 0005 C.Y DDTON C5CE DEVCL2 C57D OEVCL6 DEVMO: C58B DEVTNB C5,BF DEVVB C5C1 DEVVN C:5Bi~ DI$PLA .0000: 12 X· Dt.IMBST C577 EDLONO C812 EDNCY C80E EDPN C806 EDSTR C81A ERABIT 0002 EF<. ASN 0015 ER. CNV dOll::.. ER. DIM OO:~:O ER.EDT 0035 ER.IMP 0003 ER.NAM 0029 ER.NUM 002B " ER. ovg OOlE ER.SEF' 0021 ER.SW 0032 EVAL 0000: :1.5 X E.LVAL 0001 FCNTH C5D2 FCNTL C5D6 FINDLA 0000:19 X FORr:IEL FREE 0000: 1. B X FWDPTR C5E7 i:;OSUB 03:3F " , G€)TOX·, 0410" tP 03B3" I~ INIVDA 0000: 21':,X JNP'UT' 00.00; 25 5 X •.•• F' .,,',1 KrtLO" .r.~.. C'. c:" "' KI!:;NL' OQ(10:l:28 X ;'fi)' < ~.l<·r'. """I,_~ 0" i, PAGE 17 TnL Z80 CP/M DISK ASSEMBLER VERSION 2.21 CM:!., +++++ SYMBOL TABLE +++++ I(LB 0000:29 '0000: 2B LINE ,MACTOP C25E NAMADR 0IjOO:2E NEW BOT C810 NSADDR C802 NXTPTR 0000:33 OLDKEY C49D 0014 QPRL ClUTCH 0000:35 PIXVAL C5ED PRINTP 0000:38 PUTLPT 0000: :::;:C RANSHT C55F RETNON 000:0: :3F 03:3D'" RETX RUBACK 0005 SCANLA 0000:43 SCRWIN C7CD SOPRSP C53D 0000:48 STOP SWITCH 00OO:4A TAPBLIF C4B21 TEMPHD COCA THEN 1; 047E'" TTYBECi C261 rXTwrN C7E2 V3PTR C573 VOICEO C563 ZGREND C:31D $ADDRS 0009 $ARGPT 0011 $CMDAD 0018 $DClLDE 0001 $FADR OOCE $FVAL 0006 $1 Nf='F'T OOle:. $LINF'T 0005, $NAMAD OOOA, $NLINK 000:3 $RVSTU OOt3 $STRAD, OOO~:;: $IJSF.;: 0005' X X X X X X X X X X X LARGE 0000:2A LINEP 0000:2C MAXFRG 0040 NAMSET OOOO:2F NEXT 0269" NUMBUF C4A3 NXTVAL 0000:34 OLDXY C5EF OPRSP C55B OU'TOFF' C2E7 'POINTE C4AT PRINTH 0000:39 ,PUTOPN 0000: 3D REMARK 044C'" RET ONE 0000:40 RFAKE 033D" RUBOUT 007F SCANNL ,0000:44 036F" SKIP SOPRSZ C53F STREQK 0000:49 00'09 TAB ' TAPCON' C4AF .. TEMPS C2E5 THENX 04::'{A" TTYEND C2El I...IARTFL C49t: " VDCHAR C49E WHATSI OOOO:4F $AADR 0010 $ANY OOtA $BGPTR OOOF $CPLBL 002A $DOLOO 0002 $FLAGS ()OO2 $OOSUB 001 A $IVAL. 0004 $LOePT 0009 $NAME OOOA $NULL 0002 $SAME Otl20 $STRPT 0003 • BLNK. 0000:03 X X X I X X X X X I X X X 0460" LET LISTON C:5E2 MNMX C5EB NBLKB 0000 OOOA NL NXTABC '0000: 31 OLDtHR'C4AO ONEBUF C729 OPRSTK C547 ' PCNT CS5E POI\tOFF (:5DA PRTYPA 0006:3A ,RAMEND DFFF 'RENAME OOOO:3E RETOUT·0337'" ROBIN! 0000:41 SAVESP (:25C SCLEAR 0000:45 SMALL 0000:46 STACK COC8 STRSI z'e800 " TABPNT, ,,0000: 4B TAPPRO C481 TEXT 00OOJ4D TMF'ARG,(:7AD TTYINT C2E3 USEMAP:C)()OO: 4E VDNLF 'C5CF WRMODE C5EE $ADDRF 0007 $ANYNA FFFC $BNDL.' 0007 $CS13LO 0028 $DVAL 0.000 $FORBL 0024 $IADR 000t:: $KEYBL 0026 $MIBBL 0022 $NASCI' 0009 $NVALU 0005 $SASCI OOOA $TAF 0000 • DATA. '0000* I X X LF MACSTU MODIFY NBLKM, NLPNT NXTLNK OLOCUR ONERRO OPRSZ PDECBC PRINT PSCAN RAM~;TR X X X X X X X X RESTOR, RETURN RI"IDTMP SCANB SCNEED SNAP STAKTO SUBSTU TANGEN TBFE,ND THEN TOP TTYPTR ' USREND VIPLH ZOIM2 $ADDRI $ANYVA $CALLE $DATAP $END $FORPT $INPBIJ $LENGT $MIBEN OOOA C536 OOOCI: 1D 0001 0600: :30 0000:32 C49F 02C4'" C55D 0000:36 0000: 2:7 0000::3B C900' 0410'" 030B" C538 0000:42 0004 0000:47 COOO C534 OOOO:4C C533 046F" X X X X 'X X I I X X X I ~:811~{ C2El C5Fl C545 0001 0005 FFFE OOOD 0007 001C OOOB 0018 0001 001B 0080 ~;NOEL $REPEA 001E $SLEN OOO~. 01)00 $TYP~ .PROG. 01.J.8A'" X PAGE 1. TDL leo CP/M DISK ASSEMBLER VERSION 2.21 CM2 .. IN!SERT A= ::::. A!:;M' @.REMARK / @ @ @ @ @ * * * * *** @ @ @ @ @ @ @ @ @ * * * * ******* "WHEN YOU CARE ENOUGH TO PROGRAM THE VERY BEST" lGRASSV2.00000000 @BY JAY FENTON, NOLA DONATO. AND TOM DEFANTI @ (C) @ 1978 @ @/ iINSERT A=lRAM.ASM .LINK .PREL .IDENT CM2 · I NTERN CORE • INTERN DELETE • INTERN HELF' .INTERN INPUT • INTERN KBCNLP • INTERN PRINT . INTERN PROMPT · INTERN RENAI"IE .INTERNWHATSIS .EXTERN ABORT .EXTERN ACOPY .EXTERN ALLOC .EXTERN AL.STR .EXTERN ARG .EXTERN ASSIGN .EXTERN CARTYP .. EXTERN CL~AR .EXTERN CLEARIT .EXTERN CLEARVAL .EXTERN CMDSKO .EXTERN DEC5IY .EXTERN DEI-BAG .EXTERN DISPLAY • EXTERN DOMCtRE • EXTERN ENDSTR . '. EXTERN ERRPGM .EXTERN EVAL. .·EXTERN ,I=INDHAS:H PAGE 2 TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 CM2 " 1::XTEf~N • EXTERN .EXTERN .EXTERN .EXTERN .EXTERN • EXTERN • EXTERN . EXTERN · EXTEF . ,'~', . Q092 ( ()Q·:.'I5~- 0096-' . '·00;;>7'009:::" .ASCIZ /TYPE HELP PLUS ONE OF: !;:i4·59504-5204S / OOOAOO ;SAVEEOL PTR PUSH H E5 MVI A, "'A-' ;CHAIN THRU ALL NAMES :3E41 ;SAVE CONTENTS OF A F5 • • DOlT: PUSH PSW ;OET AD DR OF HASH ENTRY CALL FINDHASH ,CD 0000:16 ;POINT'TO COMMANDS (>1 OOOE LXI B,14 ;GET PTR CALL NXTABC CD 0090: 2::: ;SEE IF COMMAN • • CHEK :MOV A, M, 7E CPI $CMDADR ,• ~-?'-J : - : FE18 ;END OF COMMANDS ,JRNZ •• MORE 2011 ;SAVE PTR,TO NAME START PUSH H E!'.5 ;dET PTR TO ASCI! LXI B~$NASCII 000';> DAD B 09 ;PRIT WHAT I-IL-> AT CD 0000: ~::O CA~L PRINTHL CALL TABPNT CD 0000:3C POP H El ;GET NEXT NAME CALL NXTLNK CD 0000:29 .JMPR .• CHEK ISEA ;GET HASH CHARACTER BACK •• MORE: POP PSW Fl ;DONE $ YET? CPI "'$" FE24 ;YUP--DONE .JRZ •• EXIT 2809 3(: . ;NO, BUMPSIE INR A CPT "Z~--+l ; DONE .WITI-¥' Z? FE5B . ·.:JRNi ••. DOIT ;NAH 2006 .; DO $ NAMES :3E24 MVI A. "'$" .JMPR •• DOIT 18D2 •• EXIT: CALL NLPNT CD 0000:27 en El C9 FE2C 2001 CD 0000:26 AF CD 0000:25 2804 CD 0000:14 . POP H RET ;ALL DCINE • .I-IM,ES: CPI ... , ... .JRNZ •• HM2 INX H ;LOOKUP NAME CALL NAMSET • • I-IM2: XRAA CALL NAMADR NZERROR ER.NAMEC' .JRZ •• 0001 + CALL ERRPGM + + .BYTE ER.NAME + •• OOOl:J E~:5 EB 7E FE1::: 2052 ',CD. ,()OOO: 2F 434F4D4D414E " 01 Oq'97 99' 2~.' 23 PUSH H ;SAVE EOL PTR ;GET NADDR IN HL XCHG MOV A,M CPI $CMDADR, ;:r8 CciMMAND? ;NAH . JRNZ •• USER CALL PRINTFF .• ASC I Z .lCOMMAND •bIKES; I LXIB, $NASCIl-Z JPRINT NAME: DADB . . . rl?OINX AT IT PUSH H .' ':fSAVE' ~Ff:ti LIST ADPR INX H INX H TDL CM2 Z80 CP/M DISK ASSEMBLER VERSION oo'?'"";:}'" 009(:'" 009D;" (lOAO'" OOA2" OOA5" OOB2'~ 0084'" 00B6'" 0089'" OOBA'" OOBB'" OOBD'" OOBF'" 00C1'" 00(:::3'" 00C5'" 000:::'" . OOC,::"" OOeB'" 00(:(:" OOCF'" OO[ll. ", 0002'" (lOD5'" 00D6" 00D9'" oO(le:'" 00E6'" OOE7'" OOEA'" OOEC'" OOEC'" OOED'" OOEE'" (l()EF'" OOF 1 ", OOF::':" OOF!:i'" OOFA" OOFB'" OOFC'" (lOFF'" 010::::'" 010B'" 01QE'" 01(!F< 0110'" 0:1. t:t ,.' . PAGE 4, 2.21 CD 0000:30 CALL PRINTHL El POP H ;GET ADDR OF ARG LIST CD 0000: 2A CALL NXTPTR ; IF HL-:>O, OUIT 2012 JRNZ •• PRIT CD 0000:2F CALL PRINTFF 202842592049 .ASCIZ I (BY ITSELF)I 18AD .• EX1I: JMPR •. EXIT 7 PR I NT SP'~CE •• PRIT: MVI A,: . . :3E20 . CALL OUTCH C(I 0000:2(: ;GET ARGLST TYPE MOV A,M 7E ; I F 0, END. ORA A B7 ,. . ,..JRZ .• EXIT CPI $REPEAT FEtE JRZ ... EXIT ;IF 99, SPECIAL CPI 99 ,..JRZ .• SPEC ;PRINT TYPE IN A CALL PRTYPA CD 0000: :::: 1. INX H :~~:3 ; CONTINUE .JMPR •• PRI T 18E9 INX H ;PRINT SPECIAL STRING CALL PHINTHL CD 0000 :::::0 ,JMPR •• EX IT 1E:90 F5 · . USER: PUSH PSW LXI B,$NASCII 01 0009 DAD B 09 CD O()OO: ::30 G('~LL PR I NTHL. CALL PRINTFF CD OOOO:2F .ASCIZ I IS YOUR / 20495:320!:i94F POP P!::;W Fl ctt 0000: :31 CALL PRTYPA .JMPR .. EX I I · • ,..,IELX : ;. *CORE COMMAND* M.CMD[CORE, •. CORX,Q,CLEAR,0, •. COR1J[ +CORE: .BYTE $CMDADR + • BYTE ( •• CORX --CORE) 11 (:.+ 1 05 + • BYTE 0 00 (lOOO:OB + .WORD CLEAR OOFB'" + .WORD .•. CORl + .WORD 0 0000 .ASCIZ ICOREI 4:34F524500 + +J ; NO !;::;W I TCHE!;::; , .BYTE I) 00 H E5 • . CORi = PUSH ;PRINT HEADER PF:INTFF CD OOOO:2F CAL.L. 41444452205:::: • A!3CI Z IADDH SIZE I ODOAOO IHL->FIRSTFWD PTR H,FWDPTR 21 C~:iE7 LXI C: 1 ': E,M ; DE-->NEXT ITEt1 MOV 5E INX H w:, ., a st:. 1.B 0112'" tA 011:3'" B7 . .. 1'10V [leX ··L,.. DAX ORr"! .JRZ D,I'1 D ;DE...,.:::·!~n D fA=BLOCK SIZE ; IS L UHHEAD? A u. EX ZE FIEL.D TDL CM2 Z~O CP/M 01.16" 0119" 011A" 011D'" 0120'" 01;21'" 0123" 0124'" o 12!:.'V 0126" 0127" 012:3" 0:1.29" 01Z{..lj··· 012D'" 012E'" 0131" 01.:32'" 01.34" 0135'" 01:36" 0136'" 0137'" 01.:38" 01 :39" 0138" 01 :!:D'" 01.3F··· 0146'" 01.47,. . Cq4A'" 0:1:4C'" 01.4D'· 0150" Ol.!.:H'· 01.!5:3'" 0156'" 01!.:W·' 01.5C'· O1.5F'· 0161" 016::;::" 016::::'" 0163'" CD OOOO:lC 2B CD OOOO:lC CD 0000:3C lA 2t,OO 6F 2'~ 29 29 29 44 4D CD 0000:20 EB CD OCH)O: 27 23 1ElDA El C9 Cp 0000:22 .61~.7/ . FE2;~ 0:J.69~·' C:8. FEZC . CO ;2:3 Cir.¢.A'·> . () 16C-', ()ll.::tJ ;. •• EX: CALL DCX CALL CALL LDAX MVI MOV DAD DAD DAD DAD MOV MOV CALL XCHG CALL INX ..JMPR POP RET HEXHL H HEXHL TABPNT D H,O L,A H ;PRINT OUT ADDR ;l.ST HI ORDER ; THEN L.O ORDER ;THEN A TAB ;A=SIZE (BLOCKS) HfL=BLOCK SIZE ; BLOCKS--:>BYTES H H H B,H C,L PDECBC NLPNT H •• Cl H ;BC=BYTE SIZED ;PRINT THE SIZE ; HL-:'-:'SI ZE ;CR.LF ;HL-:>FWD PTR AGAIN ;DO NEXT ONE • • C:ORX: ; -DELETE COMMAND* M.CMD[DELETE, •• DXX,0,DISPLAY ••• DELA, .• Dl1J[ +DELETE: .BYTE SCMDADR U3 .BYTE ( •• DXX-DELETE)/16+1 03 + .BYTE 0 + 00 • WORD DISPLAY' 0000=11 + 0147'" + .WORD •• Dl1 014A" + .WORD •. DELA .ASCIZ IDELETE/ 44454C:455445+ +J • BYTE 0 ; NO ,SWITCHES 00 CD 0000:0'8 .~Dll: CALL ARG OA1E •• DELA: .BYTE $NAME~$REPEAT E5 PUSH H ~.MORE: MOV A,O(Y) ;GET TYPE FD7EOO B7 ORA A ;CHECK FER NULL 2:30E ..JRZ •• DONE ; IS ALLIJONE FD6(:;.02 MOV H, 2 ( V ) ; GET ADDR MOV L~l(Y) ;TO DELETE AT FD6EOl CD 0000:10 CALL'DELBAG ;DELETE IT CD OOOO:1.D CALL INC5I~ ;INC IT 3 ..JMPR •• MORE El • • DONE: .POP H . C'~ RET • • DXX = ;*JNPUT COMMAND ~OR INTEGERS* 016~,·l ",::~: .c PAGE 5 DISK ASSEMBLER VERSION 2.21 KBCNLP= CALL KISNL RZ 'CPI .') .... RZ :' ·.CPI ", " RNZ, INX H :.0 ...·C.I.MM·· A'.-;:.· '1:,':·S"'r'I'T' _. . ··..::;:·c·.AN·" ·c ',"~'~', ;SKIP COMMA _~ RAGE 1:.. TDL Z80CP/M DISK ASSEMBLER VERSION 2.21 CM2 016.E i .., . .. .. .JMPR KBCNLP 18F3 $INPBUF=$INPPTR+2 ; INPUT COMMAND SYNOPSIS ;MIB USAGE ;INPPTR - HOLDS PTR TO DELIM BEFORE CURRENT ARG ; SO IT KNOWS WHERE TO CONTINUE ;ARGPTR- HOLDS PTR TO CURRENT ARG TO FEED TO INPUT ARCiS. ' IF $MIBEND-)A NULL. THIS IS AN ,ASCII STRING TO FEED TO EVAL. OTHERWISE IT IS A PASSED Af~G L.IST IN. THEMIB " ;INPBUF - HOLDS POINTER TO ARGL.IST ,TYPED IN BY USER VIA INPTTY 0018 ;CASE l--INPUT FROM ; EQUATE VALUE IN PASSE~ARG LIST IN MIB OUT NOT DONE DELIM DONE ,,0 ;$INPPTR o ;$INPBUF o o 0 ;$ARGPTR $MIBEND NEXT NEXT ;$MIBEND ARGS ARGS ARGS , ; CASE 2A-- TTY' INPUT NEEDED (FIRST TIME CALLED) ;$EQUATE ·!J$INPPTR , ;$INPBUF ;$ARGPTR ;$MIBEND VALUE 0 0 I) 0 IN OUT NOT DONE DELIM BUFF ADDR DELIM 0 DONE 0 0 (I 0 M.CMDEINPUT ••• INPX.0.INT, •• INPA ••• INP1JE +INPUT:.BYTE $tMDADR '+ .BYTE ( •• INPX-INPUT)/16+1 00 + • BYTE 0' 1)000: IF + .WORDINT 018D'" + .WORD •• INRI 01DC'" +.WORD •• INPA 494E50SS5400+ .ASCIZ tINPUT/ +J M.SWITCHENAME, •• NAME ••• INPAJE 0189'" + .WORD •• NAME 0IDC'" + .WORD .~INPA 4E414D4S00 + .ASCIZ /NAME/ 18 10 01.70" 0171';' 0172'" 0173" 017S'" 01770" 0:1.79", 017F'" 0.:1.81'0' , 018:3" -I- J ~'O:l.88·' 0189';' 018B'" 01.:;;[1 " , 01.8F:":' '01'~:3"" 00 ,"3EOA 1,802 " :~E06 DD2A C2SE ,DlJ7"l14 ' , 0196;'''' !::S 0197" 'DD6617 0191-\'" ! br:H~.E 1~. ~ BYTE: (I ; ENJ:I OF, SW ITCHES • • NAME=,MV I A,$NAME ' ; ASK FOR NAME '.JMPR •• INPN •• INP1: MVI A,$FVAL ' • .INPN: LIXD MAC TOP ,;LqAD 'IX , ', MOV $RVSTUF+l ( X). A'" ':;SAVE'TYPE " :lCHG" fSAV6: HI..,. 'r N I)E "MOV H;;., $1 NPPTR-t 1( X) , MaY; L, $ INPPTROO p3ET I Nf'LIT LINE PTR PAGE 7 TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 CM2 0190···· 01'?E'" 7C B5 2001 01Al " .EB 01A2 l ' "'E5 01?,\3 ,.' CD 016:3'" 01A6'" .01AS" E5 01A9 ... · DD6E18 01AC:.... DD661'? 7C OlAF" OlBI)'" B!5 280A 01 B1" 01B:3" 01 FFFB '01B6;" O'? CD' 0000: :3E OlB7" CD 0000:18 01BA'" 01BD" El 01BE'" AF 01BF" DD7716 DD7717 01C2" DD7718 01C5" DD771'? 01C=;:'" DD7E1B 01eB'" , 01CE'" 87 2006' 01eF'" [1[17711 0:1.01" [1[17712 01.04'" 0107" Fl , O:1.9F'" I) 1D:::'" o l.D'? " 01DC" 01. DE'" Ol~f> 01E2 ... · 01E~5'" ,OlE8'" 01E,?'OlEA',· 01EC'" OlED'01EE" ',,'01. FO" 01. F~'3" 01F4" . 01F~"" (rtF7" oiF9" Ol.FC"· C':';' CD. ·0000: 0:::: OAOO CD OOOO:l.D E5 DD6E1.1 DD(:,612 7C 85 2848 7E B7 2847 DD7E1.B 87 . ")'3,"),-. ,L~":":_~ E5 . PDE3 :CD 0000: 1B . cti 'OOOCr: 1D FDE:3 ,.• ;OlFtt: ... "b2-01,~ "(::1" 0205" .7.E' '. 020:2>' .0206;" 02(}7'" Cp 000<>::33 , B7 :2002 ' MOV A,H ;IS ZERO? ORA L ;IF SO, NEW INPUT COMMAND JRNZ •. INPP ;ELSE USE IT AS PTR XCHG ~ GET HL BACK .~INPP: PUSH H ;SAVe:: PTR IN~O LINE CALL KBCNLP ; SCAN 8LANX, COMMANS JRNZ •• GET ;CLOSE ) AND EOL"'S •• DONE: PUSH H ;DONE!, CLEANUP $INPBUF MOV L,$INPBUF(X) ;IF ALLoe"'D MOV H,$INPBUF+1(X) MOV A,H ;IS THERE? ,ORA L' JRZ •• DXX ; NAH LXI 8,-5 ;ADDR IS ALLOC"'D BLOCK DAD B ;PLUS.5 CALL TEMPUN ; TEM'UNLI NK IT CALL FREE ;RESTORE IT •• DXX: POP H ;EOL POINTER XRA A ; C L E A R A MOV $INPPTR(X).A MOV $INPPTR+1.(X),A MOV $INPBUF(X).A MOV $INPBUF+l(X).A MOV A,$MIBEND(X) ; ZAP ONLY IF ORA A ;MIBEND=$TAF JRNZ •• OUT MOV $ARGPTR ex ) • A MOV $ARGPTR+l(X),A ;CLEAR ICKIES •• OUT= POP ~SW ;TRASH ENTRY POINTER RET ; AND GO BYE8YE •• Ge:T : CALL ARG •• INPA: .BYTE $NAME,$TAF CALL INC5IY ;FOR ASSIGN BELOW PUSH H ;GET AHG LIST MOV L,$ARGPTR(X) ;SET BY DOMACRCt MOV H.$ARGPTR+1.(X) MOV A,H 1SEE IF ZILCH ORA L JRI .• TTY fIT IS. NEED HUMAN NOW MOV A.M fIS $MIBEND =O? ORA A ;b~ IS ARGS DONE FOR? .JRZ •• TTY ;YUP-DO HUMAN INPUT MOV A.$MIBEND(X), ;CHECK THIS TOO ORA A ;iF ZILCH. ARGS IS ASCII 'JRZ •• TTA ;FROM MULTI~HUMAN INPUT PUSH H ; FER .' SURE GOT PASSED ARG XTIY ;LIST. POINT IY AT IT " CALL GETOPND ; GET 'STUFF INTO A&DE FOR CALL I NC!:-iI Y , ; AS~31C;N BELOW 'XTIY ';d~i'EV~L"'siYBACK FOP H ; A~II)'.' f!>:TR rNTCiHL ,,'.' •• STUF= 'C:ALLPU:TOPND ;STU'F,F"rtE8.:AIN'1"OIV· MCtv A. M J l S - :>NULL? .. ORA A ..JHNZ '•• (If< ;NO , . ' .'" " ;'" ~ .' PAGE TDL ISO CPIM DISK ASSEMBLER VERSION 2.21 CM:2 0209'" 020A'" 020B'" 020E'" 0211'" 02:1.4'" Q21.5<··· <)21 :::~ /:,,7 (:,F DD7511 " DD7417 0:21 E'" O:2:1.F··· C:~: 01 (~2 ", CD 016:;:'" 02:1. B'" t):2:;~'2 ." ()2~~5'" ():~~:~~::;~ to- ()~7::35 ,,- 02:;;:7'" 02::':.A"· 0:23[1'" (':2::3E'" O:2::::F'" 0241'" 0:24::::'" 0:246'" 0:24';:"" 024C'" 024[1'" D[l661 ') •. TTY: 0000:1,5 CD 0000: :I.B DD6E1.:::: 7C B5 :2() 1. :~: :3Ec):::: CD 0000:06 CD 0000 = ::::D 01. oom:~ 09 01 0080 02~:iO"· CD.OOOO:OC 0253'" DD741,') DD751.::;: ()25~1'" ();~ ::i ~::) .0' CD 025C'" 02:::;[1'" '-1'-' .(.:...:' O~-;-~5F'·' Fl. F:l o~-;;:(:.o ", 0261'" 0264'" ;SCAN TO NEXT ARG IN LIST ;NONE-GET INPUT FEOA CC 0:21.:04'" 1::::CB DD7E14 CD 022D'" CALL KBCNLP ,JF TOP OF NAME; BLOCK SNASC I I - f'~SC: I I NAME FIELD !) F=i:ETUHNS = A = ~YPE STRING (SSTRADH) DE -> TOP DF STRING WHICH CONTAINS THE ASCII NAME :~: TDl Z~O CP/M DISK ASSEMBlER.VERSlON 2.21 CM·2 CNVNAM -CONVERT NAME TO STRING PAGE 9 " CALLS: ALSTR - ALLOCATE STRING ENDSTR - CLEAN UP AND RETURN ;---- 0264"0265"0266"026'~/"- 026A" 026B" 026E-' 026F" 0271'" 0274'" 0275~" 0276'" (>27S··· 0279" 027C" 0270"027E" 027F" 027F" 0282"- E5 C5 21 0009 19 E5 CD 0000:07 E3 EDAO E2.027F'· 7E B7 20F7 E1 cn 0000: 1:3 C1 El C9 CD 0000:14 lB H CNVNAM= PUS!;/ PUSH B H,$NASCrI LXI DAD D PUSH H CALL ALSTR XTHL LDI • • C: 1 : '-'PO •• ERR A,M MOV ORA A .JRNZ •. C:I. POP H CALL ENDSTR R POP B POP H RET .n . ERR: ERROR ER.COR[ + CALL ERRPGM .BYTE ER.COR "" +J ;SAVE REGS ;OFFSET OF NAME ;HL-)NAME FIELD ;SAVE PTR TO NAME ;ALLOCATE STRING ; (SP)-)STRING,HL-)NAME ;COPY A CHAR ;OUT O"CORE ; GET NE XT CHAF< ;IF NULL. END OF NAME ;IF NOT, DO ANOTHER ;HL-)TOP OF STRING ;GARBAGE COLLECT LEFTOVE ; REST()RE REGS *WHATSIS COMMAND--GETS TYPE IN VAR PASSED M.CMDCWHATSIS, •• WHX,0,AFIXtWJ, •• WHA, •• WHA1J[ +WHATSIS: .BYTE SCMDADR 04 + .BYTE· ( •• WHX-WHATSIS)/16+1 00 + .BYTE 0 . C44C + • WORD AFI X[WJ £: ( "W"~1011:;l.) *16.+FSTINTJ 0286" 028::::'" 0295" + .WORD •• WHA1 028A" 0298" + .WORD .• WHA 028(:" 574841545349+ .A~CIZ /WHATSIS/ +J 02~14"00 • BYTE 0 ; NO SW ITCHES 02~/5'" CD 0000:08 • • WHA1: CALL ARG 0298" OA1E • • WHA= .BYTE $NAME.$REPEAT PU!::;H H 029A" E5 FD6EOj. MOV l,l(Y) 029B" FD66(~)2 MOV H.2(Y) 029E'02A:I. " 7E MOV A.M ;G£T TYPE . .CP I $NAMADR . ; IS NAME',;' 02A2'" FEOA ; IF SO, (lEi VALUE . 02A4" . CC OOOO::2B CZ NXTVAL . 0::?A7;' .Htlv E·,M 5E ; GET. tYPE '. 02A8 ..' ; 1600 ;IN~ I;;!E. .......... . Mvr D,·O 02AA'" .' FD7EO:3. MOV A,3(Y) ; SEE: ". IF NAME· PASSED. 02Att" B7 ORA A , 1"1\;1 A,$IVAL ; I.JSEFUL,TAG .02AE··· 3E04 02BO . .·· 2004 ..JRNZ '•• CMD: ;YUP. USED AS CMD 028:3'" 0:(.:84 ..' i8 , ,.'., zao PAGE 10' , TDl CP1MDISK ASSEMBLER VERSION 2.21 CM2 C~VNAM - CONVERT NAME TO STRING 02B2" 02B~::" 0286" 0289" 02BC" 02BF" 02CO" 02Cl" El (::3 0000: 3!5 CD 0000: lD ctt 0000:32 CD 0000:09 El C9 •• CMD: ;GET TERMY BACI< ;RETURN VALUE POP H .JMP RETNONE CALL INC5IY CALL PSHOPND 'CALL ASS:J:I:JN ' POP H RET ;STICK IT ;STICI< IT •• WHX= ;++++ ( PRSTR ; PRINTS AN ASCII STRING ON THE TERMINAL, NEEDS: DE -) TOP OF STRINC~ HEADER STRING DATA STARTS AS $SASCII-t:DE. IS'NULL TERMINATED DESTROYS DE .; C:ALL.. S~ OUTCH SFREE - 02Cl" 02Cl" 02C2'" 02(:3" O:;:~C4" (12(:5" 02CS'" 02C9'" 02CC'" 02(:D" ()2CF" 02DO" 02Dl" 02D:3'" 02D6'" OLD7'" 0209'" 02DA'" 02DD" 02DE'" OUTPUT A CHAR ATTEMPTS TO FREE STRING . PRSTR: ' MOV, ADD RZ PUSH 7A 8:3 C8 E5 21 OOOA 19 3A C2E7 87 200A 7E 137 2S06 COOOOO:2C 2:3 lSFI:.. EB CD 0000: ::::9' El C9 A, D, ; I, F NttLL..· .JI;.I$T E ; RETURN ; SAVE RE I3p ;8ET STRING DATA ;HL-;)lST CHAR ; SURF'RESS FROM ; INPUT ARGS ; BE I NG THERE?,' ;END OF STRING?' H H.$SASCII PA'O D LDA OUT OFF ORA A .JRNZ •• EX MOV A.M LXI .• Pi: .,JR z ORA CALL INX •...IMPR XCHG CALL POP RET ,.A • EX~...;.. " __..._ ~~~~~~::-"'-"'''='' .... 'PUT :'R2iQ, (IUTt.ft4 H •• PI ; OUTF::UT A CHAR ; HL-:-)NEXT CHAR, ; LOOP ~OAIN ; HL ._> TOP OF ,9TR I N() S F R E E ; FREE IT H ;RESTORE PTR ;++++ " ; PRINT COMMAND TO ",. A SPA,t~ I S IS PR'INTE:[i PRiKfrw I LL . '~,' r F:~ NT $TR I 1\1.0$' 'ON"THE: TERi'11NAL ,< •• > " " PRINTED AFT.~f3·.:,;~k~ARGLIMENT AND, A NEWL'[ Nt:: AT THEEND·,;OF"'1',HE:LlNE.UNLIKE PROMPT, ,,' " DISpLAY I TS"'A~6IjMENtsRg:dAaDLESSI;:)f:f' WHE~HSf ."';'j .. _.> ':, . ,"" '. .' ., '. . . • '~f'~:' "J::" ~ " . ;c· ,T~E," M~~::RCt :ARGI)MENT 'L:~I:E;T""is:' .E:X'HA,IJ.S.TJ~~D jjR,,'.,,'NOi'. ',. TDl ZSO CP/M DISK ASSEMBl~R VERSION 2.21 PAGE 11 CNVNAM - CONVERT NAME TO STRING SYNTAX: PRINT (STRING>, , ••• 'AX ; ----:- 62DF" O:2E(I" 02El" 02E2" 02E4" ··02Ec.'· 02E8'" U3 02 00 02FA'02EF" 02F2" +PRINT: + + + + + ~:5052494E5400+ 00 CD 0000:08 083.E CD 0322"- C::3 OOQO: 27 #. ° +J 02EE" 02EF'" 02F2'" 02F4'" 02F7'" 02FA'- )t,c M.CMD[PRINT, •• PEND,O,PROMPT, •• PARG ••• PRNTJ[ . .BYTE $CMDA[lR • BYTE ( •• F'END-PR INT ) / :1,6+ 1 .BYTE .WORD PROMPT .WORD •• PRNT .WORD •• PARG .ASCIZ /PRINT/ . BYTE • • PRNT= CALL PARG: . BYTE CALL .JMP PEND: ; ++++ a • I) . ARG $STRADR.$REPEAT PNXT ;PRINTARGUMENTS NLPNT ; AND NEWL I NE • » PROMPT ; COMMAND TO PROMPT THE USER WIT8 A MESSAGE (OR MESSAGES .) ON ; THE TERMINAL. UNLIKE PRINT, PROMPT WILL BE SUPPRESSED IF THERE . ; ARE ANY ARGUMENTS LEFT I N' THE MACRO" S A.RGUMENT LIST WH ICH HAVE r NOT BEEN PICKED UP BY INPUL A TRAILING NEWLINE IS NOT ADDED. BUT SPACES ARE PUT BETWEEN THE STRING ARGUMENTS SYNTAX: PROMPT (STRING>,(STRING>, ••• ; --_.. - M.CMD[PROMPT ••• PEND,O.POWER, •• PARG, •• PROMJ[ +PROMPT: .BYTE $CMDADR 0~3 • BYTE ( •• PEND--PROMPT ) /3.6+ 1 + -t00 .BYTE 0 '02FD'0000=2E + .WORD POWER 0:30B"02FF'" .WORD •• PROM + 0301 " + .WORD •• pARG 030:3" 50524F4D5054+ .ASCIl /PRaMPT/ +J (> O:30A'00 . BYTE O::;::OB" . CD 0000: 08. ~ • PROM: CALL ARG 0:31E ; $STRADR, $REPEA1~ 0:30E~ • • PARC;: • BYTE ·.DD2A C25E LIXD· 03.;1.0" ; I X-:~'MACRO HEADER MAC:TOP .... A,O(X) 0314'~ ;I;::HECK ,IF ·$MIBBLK DD'7EOO MOV ; IS.MIS? $MIBBLK 0317." FE.22 ; CPl.. '2(107 , PNXT ;? ·.0$19" ; NO? PRI NT ANYWAY' .JRNZ '031B"[IDA6.1B. $MfBEN.IHX ) ANA· ANYARGs? PNXT . Nel? PRINT Q31E" CZ RET 0321-: . t):B22·', ' • • PEND: . 02FA'" 02FB" 02FC'" , ;,j',',.'" 1::3 PAGE 12 TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 CM2 CNVNAM -CONVERT NAME TO STRING ;++++ PNXT PRINTS THE ARGUMENTS" LIST OF STRINGS ON THE IY STACK FOR THE PR"INT AND PROMPT COMMANDS , ., NEEDS: IY,-) LIST OF STRING ARGUMENTS .. RETURNS: STRINGS PRINTED OUT ON THE TERMINAL WITH SPACES BETW EEN ; THEM, IY, DE DESTROYED ; CALLS: OUTCH - OUTPUT A CHAR PRSTR - PRINT A STRING INC5IY - GET NEXT ARG ;- ..... -- 0322''0325'0327"'" 032::'{'0:3213--032E'-, 03:.31·" 0334'-' O::;:{:36"'" 0:;::39'" FD7EOO FEOO PNXT: ' I~'~ _-0 FD5602 FD5E01 CD ooot): .1D CD 02C1-' :3E20 CD 0000:2C 18E7 ;+ ;+ MOV CPI RZ MOV MOV ,CALL CALL MVr 4:;1·~" .-'MPR A,E.TYP(Y> $TAF ;CHECK TYPE ;NO MORE ARGS? E• HVAL ( Y) E,E.LVAL(Y) ,INC5IY PRSTR A. ..' " " ;DE -.> 'STRING TO PRINT . (I. :::: .mPNXT IIIII'~ , "" .. ;GET NEXT ARG ;PRINT STRING ~ PRINT (lLANK ; CONTINUE, *RENA,ME COMMAND* ;++++ RENAME (OLD>,(NEW) ; RENAMES THE OLD VALUE WITH THE· NEW NAME (OLD) AND (NEW> ARE BOTH ZGRASS NAMES , (OLD:> MUST BE A .NAME WH I CHI 8 ALREADY THERE, ;. (NEW:~" MLfST· BE A"'·'NAME WHIC:H [fetES· NCft YE-T EXI.!::;-T I F (OLD) I S A NON . . . DELETEAJ3LENAME. AN ERROR, I ~=; PRINTED. ONLY THE TYPE: AND VALUE FIELDS ARE COPIED ·, NEEDS: ON ARGUMENT STACK: TYPE ($NAME) ADDR OF OLD NAME TYPE ($NAME) ADPR OF "NEW' NAME · 1 ;, 'CALL$:,' Cl...EARVAL - CLEAR. VALUEAk • ,'.,, ... , T¥F~E TDL zeo CP/M DISK ASSEMBLER VERSION 2.21 PAGE :I.:::;: CM2 CNvNAM - CONVERT NAME TO STRLNG M.CMDrRENAME, •• RENX,O,RESTORE, •• RENA, •• RENIJ[ 18 +RENAME= .BYTE $CMDADR 03~';:C"06 + .BYTE ( •• RENX-RENAME)/16+1 0~:'{:3D··· 00 + .BYTE 0 0::::3E'" 0000:34 +.WORD RESTORE 0340"035A' + .WORD •• RENl 034C' + .WORD •• RENA 0342" 0344"52454E414D45+ .ASCIZ /RENAME/ +J .BYTE 0 . lNO SWITcHES 034B" 00 034(:"" 6:3 . •. RENA: .BYT~ 99 ;SPECIAL 0::::4D;' 4E4.14D452C4E .ASCIZ /NAME,NEWNAME/ '0:35A"CD 0000:08 •• REN1:C.ALL ARt3 ; GET ARGS 0::::5D'" OAOAOO • BYTE $NAME,$NAME,$TAF 0360'E5 PUSH H ; SAVE TE.RMY 0361"FD6.EO:l. MOV L,lCY) ;HL-)OLD NAME 0364-' MOV H,2(Y) FD6602 0~:67'E5 PUSH H 0:368"POP X '; I X,-> qLD NAME DDEl 036A'" DDCB027E BIT $BNDL,$FLAI3S(X) ;NO-DELETE? NZERR()R ER. REN ; NO? RENA1"IE ERRORE0:36E"2804 + ....IRZ •• 0002 Cl) OOQO: 14 + 0370" CALL ERRPGM 0::::7:3"2C + .BYTE ER.REN 0374" + •• 0002=J MOVE, 6( Y) .' ; DE ,...)NEW NAME O~:74" FD5E06 MOV D, iCY) 0377"FD561)7 037A'" ;A=TYPE OF NEW lA LDAX D 0:37B'" ;ALREADY THERE? CPl· $NULL FE02 ;NAME ALREADY EXISTSE 'NZERROR ER.NAE 0~37D" 2804 + .JRZ •• 0003 0~:7F" CD 0000:14 + CALL ERRPGM 0:382-' 2D + .BYTE ER. NAE +:.0003: J 0.3:33" (l~:8:3"A,M .; A==TYPE OF OLD 7E MOV 0384'" ;SAVE IT STAX 12 D 0::::85"E5 ;SAVE NAME PTR PUSH H 0386"H,$NVALUE ;HL=OFFSET OF VAL 21 0005 L.XI 03:::9";HL-)NEW VALLIE 19 DAD D ()~~::=:A·... " A,$NVALUE(X) ;MQVE IN NEW"VAL' DD7E05 MOV 0:38D" M,A 77 MOV ;THE HARD WAY ·0:3:3E"· 2:3 INX H 0::;8F'" . A,$NVALUE+1.(X) DD7E06. . MOV 0:392'" M,A 77 MOY ;HL";">TOP E1 POP H 0::::94"CD OOOO:OD CALL CLEARVAL ;·GLEAR OLD VAL 0397'E1 POP H 0:398" C9 RET 039':;>"•• RENX= . . ' '•. END 0:3~:B"- TDL 280 CF'll'" DISK Crf2 .,1-++-1.. + AA,SN ALLOC AS::;;IGN BOTTOIYf CLtARI CNTRL CNTRLZ CF'U:;IZ CURCX C.Cl TABLE ~::;YMBOL (lO!;;:iF OOOl):(>1.:. X 0000:09 X C4A9 OOOl):OC X OOOC C5E4 014() C:314 0012 C:~' s:"r 0002 C:. y 0005 DEC5IY 000(1: OF X [lEVCLl C57B DEVCL}.') C:~)::':::': DEVHCB C:5:::F DEVTNA C5BB DEVVAR C!;;:i 79 DEVVD C~jC9 DEVYCD C~5B!5 '-', X DOMORE 0000= :l.L EDLONG C:312 EDNey C80E EDPN c=:::o/::.. ED::::TR celA ER.ARA 002F ER. CHN' 0002 ER.CTL 00:36 ER.DP 00::::7 EI::;:. FNF 001C ER.MAC 0022 EF.:.NOT 002:::: ER"OFL 00:1. "7 ER.REN OO~~C EF~. SPC 002E ER.I.JFL 00:;::3 E. HW~L 0002 E . VAL 0001 FCNTK C~5D5 FINDH(~ 0000: 16 X FOREGR C5DO F!::HDOL C4::::C GETLPT 0000: l.A X HEXHL 0000: :l.C X INPUT 0170'" \ I ,JUNK C!::i40 KEYF'TK C:~:i:3:3 OOOA LF MJ~C:TOF' C25E NAM!:;ET OOOO:2/::" X OOOf~ NL NXTABC 0000 : ~7:::::: X OLttCHH C4AO QNEBUF (:'729 OF'RSZ (:55[1 " AS~::;EMBLER VEFFWA OF HASH VARIABLE (A-Z) 6F MOV DAD DAD DAD DAD LXI DAD • • FINO: POP RET 21;> 2~;J :;~9 29 0:1. C2EC 09 C1 C'::') L,A H H H H B.FSTINT 8 ;IS $? ; NO--ALPHA ;FWA OF THIS GUY ;AND EXIT ; GET OFFSET" FROM ;CHAR IN A ;PUT RMNDR IN L ;MUL BY 16 ;GET ADDR OF FIRST ONE ;AND ADD IT IN 8 ;++++ ; *DELBAG--DELETES STUFF BY TYPE*. ;IN: FWA OF NAME8LOCK IN HL ;,CiUT= HL SAME, THING & VALUE DELETED ;NO ACTION IF HL=O OR HL-> 0 TYPE . 00:1.9" 00lA" 7C 85 0018'" 001C'" C:3 C!:; E5 OOl.F'" 41::, 0020" 0022" 0025'" O()2:;::'" ' 0029" 0600 OOlA'" . . 002(:'002E:~" 0031::" . 21. 002A'" CD 0000=13 E3 :(:9. 0063;' 004·E '· '006:3" 0063'" 00.58" MOV A,H OR?~ E5 Q01D'" 001. E'" 00:30'- DELBi~G: ' L HZ PUSH H PUSH B PUSH H MOV C,M MVI B.O LXI H, •. DTAB CALL NXTABC XT.HL ;IGNORE IF HL=O ;PASS TO ROUtINE VIA XTHL .. ; TYPE ;COMPUTE DISPATCH . ; ADDRESS ~LIKE'THIS ; S,kJI TCH .' EM .; ANtt·GOTO IT • • DTAB: .WORD •• NOTYET ;!:;E::I;' CARRY HERE ;$NULL' , .WORD DE)(IT ;$IVAL ..WORD .•• NOGO .; $r=VAL.: • WORD •• !\tOGO '; $STRAD,R .WORD •• STR RET PAGE :3 TDL l80 CP/M DISK ASSEMBLER VERSION 2.21 NAM - ZGRASS NAME ROUTINES 00~34" 00:36'003::;:'" 003A'" 00:3C'00:3E'0040'0042'" 0044'0045'0048'()04A'004D'- ;$NAMADR •• NAME ;$IADR •• INT ;$FADR .• INT ;$A?mR • • ARA • • NOTYET ~$CPLADR • • NOTYET . ; $PI X.· ;$GROUP ~WORD • • NOTYET ;$CMDADR • WORD • ~ NOGO • WORD • WORD • WORD • WORD • WORD • WORD 0044" 004E'004E" 0053'0063'" 0063'00&13'006:3'E5 CD OQOO:15 280:::: "CD 0019'E1 CD 0071'181B · • NAME: PUSH H CALL NXTVAL .JRZ •• DONT CALL DEL BAG • • DONT= POP H • • INn CALL CLEARVAL ....IMPR nEXIT 005:3'0056'005';:'" CD 0067'cn 0000:04 • • AHA: CAJ.,.;L CALL .-'MPR 005B'" 005E'0061'0063 . ' 0063'0063'006e. :- CD 0067'CD (:)000: 1B .. STR: CALL DECUSE CALL SFHEE ...IMPR DEXIT 0067'006:3'0069'-' 006C", 006D'OO(:.E'·· 006F'- E5, C5 004E'~ 00~j1 -' 0070'- 1:~:1:3' CD OOOO~OB O:~: (Ii 0005 09: :~:5 (:1 E1 C9 ; DELETE VALU!;: OECUSE AFREE DEX!T . ; DECR USE COUNT •• Not;O: •• NOTVET: ERROH ER.IMP[ + CALL ERRPGM + • BYTE ER. IMP +l DECUSE: PUSH H ;DECREMENT USE COUNT PUSH B ; ASSUMES USECOUNT #0. LXI B~$USE DAD. B DCR M DEXIT: POP B POP, H RET *CLEARVAL-~CLEARS ;IN= JOUT: 0071 " 007:;~ .' E5 C5 0073" 0075'- 01 0005 007:::1~' 09 007'7':, . 01 0004 ()OVC··· CDOOOO:OA 007F'''' . H::E;D 4 BYTE~OFVALUE& SETS $NULL HL->FWA OF NAME. IADR OR FADR HL SAME, FIRST BYTE~$NULL AND $NVALUE BYTES (4) ARE CLEAR CLEARVAL: PUSH H PI.J::;H B ;SET $NULL IN MVI M.$NULL J.,.;XI ~,$NVALUE ;POINT TO WHERE TO CLEAR . DAD B " .; CLEAR ,.4' B¥Tt;::S ' LXI B,4 ;QUESS·WHAT CALL CLEARIT ; BYE .. ' .JMPR [lEX!T :, PAGE 4 TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 NAM- ZGRASS NAME ROUTINES 7E FEOA· C8 FEOC 0081 " 0082" 0084"00$5" 0087" 0088" OO:;::A'- (::3 FEOE C9 008B'008C'" (108E'" 0090'" 0091" D5 162:::: lE29 ; *ISNAME-- SEES IF THING IS NAME OR NUMBER* ISNAME: MOV A,M CPI $NAMADR RZ CPI $IADR RZ 'CPI $FADR RET ; *PSCAN--SCANS OVER BALANCED PARENS PSCAN: 23 CD. 01 0094"0095-' 0000:06 C';y PUSH [I MVI [1,"-("MVI E,")"INX H CAll BAllY' POP [I RET ; POINT PAST .- ( ..' *NAMSET--POINTS Hl AT END OF NAME, DE AT BEGINNING* ;IN HJUT 0096'0097"0098'009B" 009C" E5 01 CD 00'7D'" 1.8F9 0000:08 CEl Hl-)NAME IN ASCII IN COMMAND, ETC DE-:>NAME, HL-)TERMINATOR OF NAME NAMSET: PUSH H POP D • • NAMS: CAll CARTYP RZ INX H .JMPR .• NAMS ;. ( _'="";D_E"",_L_I_M_?__ ;NAMADR-~GFTSNAMg A~ORES~ U . FUR YA DE-)FIRST CHAR OF NAME ; HL:-)TERMINATOR AFTER NAME ...,.-...C£.~ J~ SETUP BY NAMSET, PROBABLY) --9 -,::.----~g~.'---IA~=O TO SEARCH S:YSTE.M NAMES, ~; A= 1 TO, HASH OFF FIRST LETTER ;OUT HL-)DELIM FOLLOWING NAME INCL SWITCH IFCMD DE-)FWA OF NAME BLOCK IF Z SET ,. . OR SAME AS ENTRY IF NAME NOT FOUND, BUTZCLEAR C-::::'POINTER TO CODE TO EXEC IF CMD OR AT $NVALUE BYTES IN NAMBLOCK OR, IF NOT ~OUND (Z CLEAR CASE), BC-)LAST NAME IN HASH TABLE CHAIN (THE ONE WITH 0 NLINK.FIElD) , BC+2-)POINTER TO ARG LIST OR 0 .FOR HELP IF STUPID NAME (STARTS'WITH bEllMOR NUMBER), CARRY SET. OTHERWISE CARRY CLEAR. ' .v _ 'D"~ ;VOF' .... ;NEXT CHAR trJ. Y/ti:. • tft.;. · · "; ALOORITHM: COMPARE ( DE ) + WITH CI.JRRENT NAME • . wHEN M.ATCH FAILS .IFDE=HL, . THEN GOT A MATCH '''.~ (IT WAS THE. DELIM:::: THAT . ) TnL NAM H30 CP/M rH!:':;K ASSEMBLEF~ VEF~SION - ZGRASS NAME ROUTINES ·, 009r'::··· OO(~l'" OOA:3'" OOA4'" (lOA~'5'" (lOA?" (lOA::?" OOA9'" OO{~C:··' ·OOAE··· (lOAF···· 00B1'" 00B2'" OOB::::'" 00B6" 00B7'" OOF.j::;:··· 00B9'" DDE5 FDE5 E5 D5 DDEl 4F 79 87 OQC6'" F:l. 01 F1. 200{"1 EB 00C7 . , DOCA' OOCD'" QOCE'" OOOE CD 0000=1:3 E5 FDEl 00[1::':" Ol 0009 09 00D4'·· 1(..\ OOD!::V BE 00D6 .., 202:~:: 00D8'" OOD·;:.) " OODA'" AF BE 280C (lODe'" (IODD'" l:3 OODE;" C1 OODF'" .00120'" (JOEl'" !)ot:;:~:;;~ ..' 00124'" :20FO tl... .A..I\"- ~ p6p X MOV C. A LDAXD CALL CARTYA .JRC •• EX IT"" ::::::~5[1 OOBC'" 008D'" OOBE'" OOCO·" (lOCl'" OOC:?:··· .00(::4 . ' oono··· NAMADR= PUSH X PU::;;H .Y P.Ie..lCII ~/'-. PUSH.· CD 0000:07 lA CD 000(1:07 lB F5 lA CD 0000'" FAILED TO MATCH) OTHERWISE, NO MATCH, CHAIN ON ONE TOUGH CASE--IF Hl->NULl. IT WILL MATCH NULL AT END OF NAME. SO WE COUNT HL->NULL AS A MATCH UNLESS. OF COURSE. HL=DE IN THE BEGINNING (ERROR) . l.A ::':7 PAGE 5 2.21 · • DUMB: src JRZ •• EXIT INX D LDAX D CALL CARTYA DC X D PtH:;f-1 PSW lDAX D CALL FINDHASH MOV A.C ORA A ...IRZ .• SYSN pelP PSW ...IRNZ ... NAML XCHG .JMPR •• EXIT • . SY::;;N: POP PSW LXI B,14 CALL NXTABC •• NAML: PUSH H POP Y LX I B. $NA~-:;CI I DAD B • • NAR: LDAX D CMP M .JRNZ •• NAG XRA A CMP M ...IRZ •• NAM INX H INX D POP B PUSH B MOV A,C CMP E ..JRNZ· .• NAR tviOV (:~, 1) IF NO FIND I'X ; SAVE FOF< BELOW ;GET FIRST CHAR ;CHECK IT ; NO PLACE FOR NUI'1BEF< ;SET IN CASE Z SET ;NO DELIMS HERE EITHER ;CHECK SECOND ; ••• ;IF DELIM. IS A-Z ; BAO:::t.JP ; !:;;AVE CC ··'S 81. A ;GET FIRST CHAR AGAIN ;GET FWA OF TABLE ; 011 FRO!"I ENTFW81. "MOV C:,A" ;IS SYSNAMES (=O)? ;YUP ;CHECK CC'S FROM CHKAZ ;IS AT LEAST :2 CHARS ;DE HAS POINTER NOW ~SAVE ;1 ;GET RID OF PUSHEE ;POINT TO SYSNAMES ; !:;::AVE PTR I N I Y ; POINT AT ASCI I ;LOAD CHAR INTO A ;SAME AS (HL.)? ; NOPE ;IS (HL)=O ..; BUMP ; TERM I NA1"or~ ADDR I N Be ;AND PUTBf~C~::: ;CHECK FOR =:;:: TDL ZSO CP/M DISK ASSEMBLER VERSION 2.21 NAI'1 ..:. ZGRASS NAME ROUTINE::; (lOES'" OOE6'" OOES'" OOEA'" Dl OQEB~' 62 (lOEC" OOED" OOFO" 01 0005 09 SA 20EC FDES , •• NAM= 6.B 44, 40 lA 00F1'" 00F2" 00F:3" (iOF4" FEH:: OOF6" ~2:319' OclFS'" AF IS10 FDE5 El DDE5 Dl CD 0000: 00F9'" OOFB" OOFD'" OOFE" 0100'" 0101'" 0104" FDE5 010:::'" Ol09'" (HOB'" 010C'" 010E" OliO" Cl • • EX IT: • • EX 1: C9 o U. 2 " El E5 0113" 0114" 7E FE2E 0116'" OilS". OilS"" E1. •• SWIT: 20EO ,CD QOOO:08 288F 0::':: 0122" 0:3 ()12:~;~" OA 0124" 0:3. 87 20FB 01:25'" •• SCMR: 0126" 012S'" OA B7 0129" . 012A" ;i).12A"· '. 2004· .' >012(:"'" 'CD' 0000,: (JB '." 6f2F" 01.::;:0'0'130·' . " ol . ; PO I NT PAST INX H ; ALF'HANS ONLY~,~ ~ ()JNbAb~ CALL CARTYP JRZ •• DUMB ; DUMMY ~ ~~ •• ' v,..~ INX B • ;JUMP OVER 4BYTES I~' .' INX B INK B INXB FIt! CJ "",' ;SCAN TO Z OF LDAX B .J~ ..tMIf' ;ASCIZ NAME INX B ORA A ;PAST NULL NOW JRNZ •. SCMR ;DOUBLE NULL? LDAX B ORA A ;SWITCH ERROR[ ZERROR ER.SW JRNZ •• 0001 CALL ERRPGM • BYTE ER. SW ' •• BAD: + + + ,,..., '+ •. 0001.: J PUSH B PUSH H INX B. . ;SAVEB' ; SAVE PTR TO FIRST CHAR ,., ;OF TYPED SWITCH . PAGE 7 TDl Z80 CP/M DISK ASSEMBLER VERSION 2.21 NAM - ZGRASS NAME ROUTINES Ol:~:::::'" O:~: 013L~'" 0:::: ().j. ::::~'5 .." 0::::: (> 1 :3(:,'- 7E B7 0:1.:'::7'" (ll :~~:3 .,' .~::3WIC:: · :;~::~' 1 () Ot:'::A··· 01 :::::9 . , 01:3C'013D'" 01:'::E··· 0140'" 014l'" 0144'" OA BE 01.46'" El Fl 0:1.47'" Ol4::::'" O14A'" Ol4·B··· 014C'" O:l4D'" . :2~: 0::::: · :2::::F'/:.. 2B CD 0000: 0:::: · 2=:::()4 . 1. :::[11;> Fl INX B INX B INX B MOV A.11 ORA A .JRZ .01TO CODE&ARGLIST ; SUCCESS liBYE! 1 A NAME NODE* DE&HL&BC SETUP BY NAMA DR HL SAME DE->FWA OF NAMEBLOCK BC CLOBBERED *NAMBLD-~-BUILD:3 ;IN: lOUT ;NAMEBLOCK LOOKS LIKE: TYPE L.ENGTH , FLAG:::; LINK TO NEXT NAME(2) LINK TO VAL.UE(2) OR; ASCIZ NAI"IE ;GAME PL.AN: l. FILL IN TYPE AND FL.AGS 2. CHAIN IN $NLINK 3. COpy IN ASCIZ NAME Ol.4F··· DDE5 NAMBL.D: PUSH X PUSH H PUSH B .. ' E~j ()1 ~)2 ,.' r,r: _.,-' 0:1. 5::::" A7 AW~A ED~i2 D F'U::H H O:l.~5l 0:1. ~:i4 ,.' 0156'" 0157'" E5 (>1"5t::-··· C60';:) E6FO 015?~" 015.C:;" Ol~m'" 01. ~5E " O:l.~3F·'· 7D IF IF IF l.F D:::mc 110V A.I. . ADI $NASCII '~NI OFOH !JeLEAR CAFWHERE TO STICK POP B ; RESTORE B XCHG ;DE HAS WHERE FROM LDIR ;DO IT XRA A ;STUFF A NULL STAX D ;FWA IN DE POP D POP H POP X ; BYE RET ;ARG IN: HL->TERMINATOR (BLANK. COMMA) CALL ARG • BYTE ARG1.ARG2 ••••• $TAF OUT: IY->TYPE !:HUFF TYPE STUFF o AND HL~>TERMINATOR (BLANK, COMMA, NL OR NULL) ;NARRATIVE BY JAY FENTON: ;ZGRASS ARGUMENT SCANNER ;THIS ROUTINE PREPROCESSES THE ARGUMENTS. TO A ; COMMAND AND LEAVr::!::;: THEM ON .THE VALUE STACI<;: ;(IY STACK)~ A~LIST SWECIFYING'HOW TO ~SCAN THE. ARGUMENTS FCtLl..:OWS INLINE AFTER THE ·;CALL ;ON ENtRY, HL POINTS AT THE DELIMITER FOLLOWING .. ;. THE .COI"IMAND NAME ; ON EXIT. HL PCtINH:: BEYON£) THE· LA~;T 'ARG . SCANNED TDL Z80 CP/M DISK ASSEMBLER VERSION NAM ~ ZGRASS NAME ROUTINES ARG--PARSES COMMAND ARGUMENTS PAGE ';:1 2.21 ;AND IY POINTS AT THE FIRST ENTRY ON THE ; .VALUE STAO(. ;ENTRIES ON THE STACK CONSIST OF A TYPE BYTE ;FOLLOWED BY 4 BYTES OF VALUE ;REGISTER USE: HL=STRING POINTER I X~LI~:;T POINTER IY=VALUE POINTER DDE:~: 01.:::£1'" 01:;:::E'" (J:I. 90 ..' 01.9::;;:'" CD OOOO:OF FDE5 CD 0000:1.1 0195'" FE29 0197'" 0199'" 019B'" FE2C 2001 0190'" 01 ';;/E'" . 01Al...' ·01.A:~:··· 0IA5'" 0IA9'" O:l.AB··· OlAD'" OlAF'" OlBO'" 01B2'" 0IB4'" . 01.B6··· 01B9'" OlBC'" 0IBF'" OlCl'" DD7EOO FE!)!) 200B F D:31::.,O 000 FDEI D[l2:::: DDE:3 C9 FE1E 200!:i DD2B DD7E!)!) CD OOOo:OC CD OOOO:OF DD:;;-~:3 :I.:::CD 01C6'" DD7EOO FEOO Ole:::'" 01. CA " FE:l.E O:lC:~:'" O:lCC'" OlCE'" 0100'" 01D~3'" 002:3 DD7EOO FE1E OlD!;:i'" OiD7'" OlDA'" CD OOOO:OB 27 XTIX ;SAVE IX AND USE TO FETCH ARGS ARG: CALL INC5IY · . ARG1.: ; :::AVE FOF< LATER PUSH Y ;EOLALREADY? CALL K I :::NL ARC;:2: ;YUP .JRZ •• EMTY CPI .") ,.' ;CL.OSE PAREN? ; OK .JRZ •. EMTY CPI ", .,' ; COMMA'-;:' ;MUSTA BEEN SPACE ,JRNZ •• AFW:3 ~SKIP COMMA INX H ;GET TYPE WANTED MOV A,O(X) ; THAT "'::;: ALL";:CPI $TAF ;NAH ..JRNZ •• ARG4 ; TEF ; WIND DCIWN POP Y ;.JUMP OVER STAF.ETC. INX X ; F<::HOHEX XTIX RET • u .. ARG4= CPI SREPEAT ..JRNZ •• ARG5 DCX X I"IOV A, O( X) •. ARGS: CALL EVAL CALL. INC5IY INX X ,JMPR .. AHG2 .. EMTY: MOVA,O(X) CPI $T?~F .JRZ •• AOUT CPI SREPEAT .)RZ •• AOUT INX X MOV A,(l(X) CPI SRE~-::'EAT ...IF000=·1.6 POINTE C4t:i7 PftINTH 0000=19 .PUTOPN 0000: lA RIYfttTMP C:!:i:::;:::~: I I X X X X ADDON ARCi::::Tl< BOT RAM CHARSL CLEARV CNTRLU CR CUFP'I XVAL C5iE.D PRINTF 0000:1.:::: X P::;;CAN· OOE;:B" I F $NAME OOOA $NULL 0002 $SAME '0020 $STRPT 0003 •.8LNI< • OOO!): 03, X SCRWIN STACI< TAB·· TAPPRO TEMPS TTYBEG TXTWIN VDCHAR WRMCtDE $ADDRF $ANYNA $BNDL $CS8LO $DVAL ·$FOR8L $IADR· $IC C5CF OOOl 0005 FFFE OOOD 0007 001e OOOB 001:;:: OOOl 001B 0080 001E 0006 0000 022E-- X X X SOPRSP STRSIZ TAPBIJF TEIYIPCH TMPARG TTYINT USREND VIPLH ZGREND $ADDRS $ARGPT $CMDAD $DOLDE ,$FADR $FVAL $INPPT $LINPT $NAMAD $NLINI< C5:3D C800 C4B:;: 0000: 1n X C7AD C2E:3 C5F1 C545 C8:LD, 0009, 001.1 0018 0001 000£ 0006 0016 0005 OOOA OQO:::: 001:3 $STRAD 0008 $USE 0005 $RV~:3TU X ,·tD~Z80CP/M DISK ASSEMEtLEI::;: VEF~SIOi:'r2.:21 Ii MA;t N• ~ ZGRASS·-- TblI ~::; IS! T ~ PAGE THE V(:F'" 01.58/' 2807 AF 32 C4'~/C CD 044D'" 21 C261 22 C2E1. .22 C2E:3 CD 0000:28 !:;E43 ODOAOO FB 21 COCC EI::" FDE3. 21 0000 22 C25E 21 002A 22 C577 :3A C5CB A7 2806 21 C577 22 C573 CD 0000:28 3EOO 2A COCA CD 0000: 12 2.1 0000 22 COCA CD 01';:JF" CD 013:3"" 18C9 21 C5Fl CD 0000: lE: 21 C60C CD 0073'" CD 0000:15 E5 FS CD 01 !:.'IC " 3A C~CC· 137 CC 0060:0D Fl, El 20EA CD 01D4" CD 0000;l,7 87 20F}7 .:;) (::8· •• OK= ,JRZ .• OK XRA A STA UARTFL. INUART CALL LXI H.TTYBEG SHLD TTYPTR SHLD TTYINT CALL PRINTFF .ASCII '/"'C / EI IGRASS: L.XI H.ARGSTK ; LOA Dt.:.IP IY PUSH H POP. Y ; CLEAR MACTOP LXI H.O ;FOR . . OiFe.'· 01F:;:" OiFB'" ,caFE" co .0073'" CO 0000:13 CD 0000: 11:.. C8 FE2E CO 0000:2C CO'OOOO:2A l8EA CD 0000:1B CO 0000:07 3006 CD 0000:2B C:3 18EO C0017E'" 6 .... D·I, '0'c'(-'· I... J. )0 • 1,,,,~", 'CD 0000:, fE' , ' i0201'" . 'CD,0000:16 !Oi04" , ' 281C·',.:: 0206" , FE2!) 'Q:;2Q$"" 2.81. 8 . (i20A ~' FE2C. 2814 , 02QE ."" '. FE2E 0210" 2810 . 0212'':' "F-528 cliot: " ,~, ;SAVECC"'S FROM NXTLNt< ;pREE IT UP ;RESTORE HL ;,WASZERCr';=' ;OET CURRENT LETT~R BACt< $'0;:' .' ; YUP--DCINE ;A GOES TO B. ETC. ;00 IT THE LINE PRbcE8S0R. FOLLdws ;CHECt< FOR CNTC CAI...,L CNTCt< 10ET LINE POINTER CALL OETLPT ;18 END OF COMMAND? CALL ISNL ;YUP. RETURN RZ CPI" .... ; COMMENT? ;Nq . .JRNZ LINOO ;sl<;rp TO THE NEXT LINE LIN02: CAL.L. SCANNL ;AND STUFF HL. .CALL PUTLPT LINO:3= 1ANO TRY AGAIN •..IMPR LINEP ;::zAp· ... BLANX LINOO: CALL I[IELIJYI RZ . ; ANrJ .. T~Y .~GA IN'<. . .JMPR LIN03 ;SEE' 'IF, t;,IN~~WANrs ;PRINTED 'CALL PRCHEt< tZAf:;' LEAh Bt:ANX .' . CALL ITERjYfINATI)R . .;CHECK TE:RMIN{.noR CAL,L iSNL.' ;IS ;, NL'OR NUL.L :;;;.JRZ·" • '~CMO CPl,.BLANK ; I SNL l.OADS A ..,IRZ •• CMO (:PI i',~" ;ALLOW COMMAS TOO •.JRZ ... CMO ;SWITCH? CPI EXTDEL .JRZ •• CMO .CP I " c·' CZ PSCAN ; PICKUp· CHAR MOV A.M LINEP: cpr .... ;:;. . . • • 0/<:: ::~~~ ZM:A~~~N •• AA~N: •• CM[): XCHI3 ' ·..IMP ~VALARt;, XRAA CALL. NAMAOR ;TRYI.T ANYWAY, ;!::.;rUFF AAASN. ,;, RE!3rTqREH . ; TRY SYS' NAME!::: ;IFZSET, GOOD t.' PAGE ., TOL Z80 CP/M DISK ASSEMBLER YERSION2.21 ~MAIN. ~ ZGRASS--THIS IS IT. THE VERY BEST ,PART OF THE TRIP LINEP-'-THE LINE PROCESSOR 0226" ()22~3~ .JRZ DOCMD CALL ERRPGX HBYTE ER.NOTF 2804 CD 0:30A'" 0228'" ;ENTRY TO PROCESS ANYTHING GIVEN NAMBLOK ADDR 022C'" . 022E/ 02:30'" ,- ,()2.33{' 0234"· .02::':6" : ()2'3A·" 02::':E'· 3A C260 B7 ·~OI·'::o· ;;:;'17' t:.l.:. ~"" __, ~. ·I-"")5C-; ~*c,,:;..' • D02A J;::55B D022 (:5::':::(1 :3A C55D 0242'0245" 0248'" 024C" 024E:'" 024Fo' 0251 " 0253 .. 0254 000 DDE5 lA FE18 20:3A EB 60 02~'!:5" 69 02!56" 025':"0" 025A" 0258" EB D5 0 .DOCMD : DDE5 . FDE5 :32 C~.33F DD21 026F'" CD 0000:22 C9 PUSH X PU~;H Y LDA CSFLAG ORf.~ A .JRN Z •• NOCS ;SAVE X ;AND Y ;ONLY STORE SP ;IF CSFLAG OFF ; DON" T DO I,. 'S~;pr:rSAVESP ,LIXI) OPRSpi SIXD SOPRS';P I....DA OPRSZ. "STASOPRSI •• NOC!;::~· 'LXi' X;RETONE PUSH.· X LDAX D CPI $CMDADR .JRNZ DOMACRO XCHG MOV H.B MOV'L.C CALL NXTPTR XCHG PUSH D RET ;SAVE>tIP STACK PTR ; FOR .. ERROR RECOVERY ;(111,0 FOR SIZE lOF OPR8TACK ;PUSH RET ADDR ;GET FWA ; I S COMMAND? ; NOPE. TRY MACRO!:; ; DE-~)OTERMINATOR. ; BC-)'POINTER TO CODE ;GO TO IT ; DE--)oCODE. HL-)OTERM ;DE IS DISPATCH ADDR! ;GOTO IT. CMDREN STILL 1'08 CMDREN----GENERAL END OF' CCIMMAND STUFF ;DETAILS: DEFAULT RETURN IS TO RETONE WHICH RETURNS INTEGER 1 RETNONE RETURNS WHATEVER A&DE HAVE CMDSKO SETS UP R#TO REDO CURRENT LINE CMDSKP SETS ~P TO SKIP REST OF LINE .0:;;:!5Co'· 025F" .0260. 0261'0262 0" 0264 0265,0 0267'" 026A'" 0268'" 0 ' 0 " CD 0000: 1:3 28 7E B7 200A ...) ....) ..t:....... 1.::307 CD 0000:2C B7 CMOSK!): CALL GETLPT DCX H MOV A. M· ORA A .JRN Z CMDRES INX H .JMPR CMDRES CMDSKP: CALL SCANNL ORA A .JRZ CMDRES 026D" 28 02~E" Cl. CMDRES: POP B 026F" 0271" 0274" :3E04 RETONE: MVI, A.$IVAL LXI n. 1 . .JMPR CMDREN RETNONE :. F'ClP 027e.··· . O(i!)1 1801 11 C:I. ;GET OLD LINE PTR ONE IF NOT ;FIRST LINE ; IE. HL->NL ; IF HL-->NULL, ;FIX IT ~BACKUP ; ENTER .HERE TO SK I F' ;DCX IF NON-NULL . ., a at ., . ; RESTPP: l.;.INE ; ENTER' -HERE . TO :=;TR I F' . ' ; .OFF .RET .TORETt!tNE ; INTEGER 'I IN DE ; ANDFI:%LL THRLI, . [n::X H , f-C ... ;- ~ -.-, ;DUMP RET TO RETONE PAGE 8 TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21 .MAIN. - ZGRASS--THIS IS IT, THE VERY BEST PART OF THE TRIP LINEP--THE LINE PROCESSOR 02"17/ , 0278'" 027B--027E-'028:1. ... 02E:3'-", 0286-' 0287"0287-' 0288--02:3A--- , d2EK:'" F5 CD 0000:2A CO Ol5C'-CD OOOO:OA 3004 CD 03l1'" :I_B Fl FOEI DDEI C9 CMDREN=PUSH PSW CALL PUTLPT CALL STUFFCHK CALL CORCHK CERROR ER.CORFr. + JRNC •• 0001 + . CALL ERRPGM + .BYTE ER.CORF + •• OOOl=J POP PSW POF' Y POP X RET ;SAVE A ;STUFF HL INTO SLINPTR ;ANYBODY PENDING? ;RESTORE A ;STILl ON STACK ;RESTORE X *OOMACRO--I"!ACRO EXECUTION STARTUP* ~OT A GOOD ENTRY POINT (STUFF ON 02:30-' 0290'" 0291--0292-' 029::::'0296-' 0297'" 029':;>" 0299'" 029C--029E--029F-' . 02Al '.02A3'" 02A4'02A5'- ~~MRI( n .. _. I. STA~) CO 0000=2A DOMACRQ=CALL PUTlPT ;SAVE CURRENT POINTER E5 . PUSH H ;SAVE H FOR ARRAYZ 62 MOV H, D ; POINT HL AT NAMEBLOCK 6B MOV L. E ; LEAVE IN DE FOR ARRAYS CD 0000: 23 --C~LL NXTVAL ; GET STRING FWA 7E . . ... ~MUV A.M ;GET TYPE FE08 . ~. CPI '$STRADR ;.IS STRING? 204EJlII\.fJ.JRN ZDOARA El POP H ; GET HL BACK DDE5 pu!:::t-l X A' ; SAVE X 7E MOV ~ ..... ,,'': ; CHECK FER • B FE2E .......".. CJiiI"f"'""EXTDELI)\IA'" ; IS IT? 201_ A JR. .. FORE ; NOPE, REGULAR CALL 23 INX H ;SKIP EXTDEL 23 INX H ; !SKIP B CDOOOO:1C CALL MAKMIB ;BUILD MIB O,~"2A8~" ED4B C2E8 LBCD DOLPlH ;GET DOL LISTHEAD DD710F MOV SBGPTR(X},C ;LINK IN 02AC'DD7010 MOV $BGPTR+l(X).B . 02.AF--02B2'DDCB02D6 SET $DOLOOP.$FLAGS(X) ;SAY IS DOLOOP"'D 02B6--bD22 C2E8 SIXO DOLPLH ;LINK US IN ODEI POP X ;RESTORE X 02BA'" 02BC--C9 RET ;RETURN SUCCESS 02BD-' CD OOOO:IC •• FORE: CALL MAKMIB; CALL MIB MAKE ROUTINE 02CO'-CD OOOO:2A CALL PUTLPT ;SAVE EOL FOR RET TIME ED4B C25E LBCD MACTOP . ;GET CURRENT MACRO 02(:7'00710D MOV $CALLER(X),C ;POINT TO CALLER 02CA'DD700E MOV $CALLER+ltX),B 02CD'S I XD MACTI)P ;MACTOP IS US NOW DD22 C25E 'POP X 0201" ; EXTRA FOR GOSU8 COMPATS 02D3{ PUSH PSW F5 0204--; ENTRY .FROI"! GO$I.JB. DOMORE= 0204-' . 'CD '0104" ; PROCESS LINE., CALL.. LINf;::P 0207-;CALL 1!3TERM" cti O()OO: l 7 ;CHECK'TERMY ". ORA ,A . ;CHECf(FER NULL.. 02DA'~ 87 ;NOPE .JRNZ •• CZC 02D9'2007 p.,.'6 "T _la' I i' '?;: ",. . , ',~ F'nF' n ; cm£=;lJB HE'lTIF~1\I (? ) ~ ~ • , 'rDLZ80,C:P/M DISk ASSEMBLER VERSION 2.21 ·.,MA'IN~-·· ZGRASS-"-THIS IS IT. THE VERY BEST PART OF THE TRIF' LINEP-·THE LINE PROCESSOR 020E'" 02E~ ..' 02E4··· 02E7' CD 0000:2E C:3· 0271:,.··· CD 02F8'" 18EB •• CZC: ; .02E9···· 02EA " 02EC" .O~EE' 02F1 " 02F2'" 02F2'. 02F5" . E1 FE 10 2804 CD 0311' 22 CALL SWITCH .:..IMP RETNONE CALL CZCHEK .JMPR DOMORE ; SW I TCHEROO' ;AND PASS A&DE BACK ;CHECK DDT&CNTRLS ; CONTINUE ARVAL WANTS DE->NAMEBLOCK, HL~>AFTER PAREN POP H . ;GE1 PTR TO ARGS'BACK $AADR ; IS ARRAY NZERROR. ER.MACr. JRZ •• 0002 CALL ERRPGM • BYTE ER. MAC DOARA: cpt + + + ...... O()02: ] CALL ARVAL JMF' RETNON.E CD 0000:06 C3 0276" ;DO IT ; LEAVE WITH A81.DE SETUP ;*CZ CHEK--CHECKS 'FOR CONTROL Z AND DEBUG 02F8' 02FB"· . 02FC ", ()':2FE', 0301" 0:302" 0304,0' 0307'" 0309" ::::A C2C.0 B7 2006 3A C5CE B'7 . 2070 CD (H)7:3 " 206B C9 0:30A".· E1 O:::tOB" DDE~i (31)D'" FDE5 030F'0:311" 0:;:j,2'0:316'" 031A" . 0:31£'" . 0:321 " 0324" :I.:::O~), LDA CSFLAG CZCHEK= ORA. A .JRNZ •• NOCZ LDA DDTON ORA A JRNZ ZSIN. •• NOCZ: CALL CNTCK JRNZ Z::;IN RET .0343/ '034~;'" 'Ff CO 6000 : .25 . CD 0006: IF·· '." -' ; CHECK" EM .' ; *ERROF(---ERROR Mt::SSAGE HANDLER8( eNTLS HANDLER* ERRPGX: POP H ; POP CALL RET ERRPGM= E3 ED7B C25C ERRFOO: ED4l? C53D ED43 C55B. :3A, C53F .?""') '-'~ C55[1 7E F5 3'-' 0::::26" .... ..:. C72A :3A C729 0::::29" ():;:2,C:.·.. B7 0::;:{2D'" 2::K) 3 .·.0:32F< ..... F1 .' 9:):3(V . 1817 '~332' CO 0191,0' •• PRNT: 0335> ·CD·· 0900: 28 n':;:''3:=!/ . .·3F:3F 4552524F . ·. ··:'6;~14~··: ;DON'T CHECK. DEBUG IF ; IN CNTRL Z. ALREAI:tY ; ~ S DEBUG ON'? rCNTRLD) .' PUSH X PUSH Y ....IMPRERRFOO ;KLUDGE FOR L INEP ERRMESS XTHL LSPI) SAVESP ; FIX STACK IJP LBCD SOPRSP ;RESTORE OP STACK ;POINTER SBeD OPR:~~P LDA SOPRSZ ;DITTO FOR STACK STA OPRSZ ; BYTE MOV A.M ;Gt::T ERROR NUMBER PUSH PSW ;SAVE ERROR NUMBER STA ONEBUF+l (STORE ERROR NUMBER LOA ONEBUF ; GET ONERROR FLAG ORA A ~IS ilLCH? .JRZ •• PRNT ; YtJP-NORMAL POP PSW ; NOPE, ONERROR TIME . .JMfR •• CHK2 CALIiPRLINE ;PRINTLINEIKl ER~OR CALL FiRIN:l1FF ," . '....'. '•. '.'ASCI Zr~;?ERRQR#/., POPPSW fA HAS ERROR:-.; MeSSAO'E' CALL PDECA . . CALLNLPNT , '. ~ ) 'C, rDL Z80 CP/M DISK ASSEMBL.ER VERSION 2.21 '.MAIN. 7 ZGRASS--THIS IS IT. THE VERY BEST PART OF THE TRIP LINEP--THE LINE PROCESSOR 0349···· 0:34D'" 0368": 036C .' 0:'::6E'" 0370"- ED4B C25E OA FE2.6 C"3 00A2'" CA (lOA2" 3A C260 87 2.(10C CD 0000:13 2.2 C72B CD 0000:2(: CD 0000:2A E;D7B (:25C r-DE1 DI)E1 21 01D4'- C);=:7~:·" £5 0::::74'0377" 0:37A'037D'037F':' 0380" 03:33" ei3E:e.·' 0:389:O:::;:3A'- . 0:38C'- CD 0080"21 C:e,E:D CD 0000:18 3c.28 AF :32 C5[19 C5F-4 034E~" 1):350';' 035:3'0356'0359" 0:35A"035C" 0~'35F"- 0362'0~'365" (':3E:E·" 0:39"1 " 0394'0:397 .' 0399'039C:" 039F" O:3A1" 03A2'O:3A:3'03A4'0:3A6'~ 03A9" O:::;:AC" 03AI)" 03AF"0:382;" 2:A C72~1 B7 202B :3£23 32 C2C.0 CD 0000:24 2:1. Cc.A8 3600 CD 007::::" CD 0000:15 2(lFE: 23 7E B7 ;28:~C: CD 01D4" cO 0000:17 B7 20F7 :21 C6(.~9 CD OOOO:2A 03B!;i~ 18[::3 0::::87'" .':;i.") 03BA" AF 'O~B8',j .. .....~ ,', ',' ,.-.' .'j.-.. •.;.0 .... "_'L C260 ::::2 C72':;> " .11'.C:6A9 08C1'·:21 .C72~ ,03c4'01 0080 62:C7" :EDBO 03C:~';>" CD 01D4" O~:':CC·' CD 0(100: :1.7 O:3BE'~ .:; MI:...""",: ~ . _~:: PAGE 10 ; CHECK IF KB LEVEL • • CHK2: LBCD MACTOP LD~X B cpr $KEYBLOCK ;IS IT? ,-IMP ABORT ; TEMPORARY TILL BELOW WOR~:'S ,-IZ ABORT ;YEAH~ ABORT ;IS SECOND TIME" THRU? LDA CSFLAG ; I. E. IS CSFLAG SET? ORA A ,-IRNZ •• TRY ;YUP, DON"'! 'CHANGE PTR ;GET ClIRRENT LINE • • GLPT= CALL GETLPT ; !:rTORE LINE POINTER SHLD ONEBUF+2 ;TO NEXT ONE CALL SCANNL ; SAVE POINTER CALL PUTLPT ; RESTORE STACK • • TRY: LSPD SAVESP POP Y POP X ;RET STILL ON STACK ; FAKE NEW RET LXI H,LINEP PI...ISH H ; ONTO STACK CALL ZAPCZ ; CLEAN UP MIBS IF NECESSARY ZSIN= LXI H,CSBLOK ;BUILD MIB CALL KBMIB ;TAG IT MVI M,$CSBLOK ; NULL ON/OFF"'S • • SWIN: XRA A STA CNTRL.O ;LIKE THIS ; Z.AP CNTRLZ STA CNTRLZ ;ONERROR LDA ONEBUF ON? ORA A , ; WELL, DO IT ...IRNZ •• ONDO ;PLIT OUT HASH MVI A, .,#.;SET CSFLAG#O STA CSFLAG CALL OUTCH ; BUFFER ADDR LXI H,CSBLOK+$MIBEND ;f\/ULL COUNT MVI M,O ; CHECI<:: . . . C CALL CNTCK • • :3WT: ;GET A LINE CALL INPTTY fWAIT FER IT . ...IRNZ •• SWT ;POINT PAST COUNT INX H ; NULL L.INE? MOV A,M ORA A ; YEP-- FAKE RETURN ...IRZ •• BACK ;DO THE DEED •• SGO: CALL LINEP .' ; CHECt<'~ TERMY CAL.L ISTERM OR.A ,A ; STUFF L.EFT ..JRNZ •• SGO LXI H,CSBL.OK+$MIBE~D+1 ;S£T LINEF'TR' ;LIKE THIS, CALL F'UTLP,T ; MORE TO 1~10 .JMPR •• SWIN ;S~T CSFLACi ~ .ONDO: 8TA CSFLAG ; CLEAR ONEBUF XRA A STA ONEBl.lF , " LXI D, 1:~SBlOI{+$M I Br;::ND+ 1 " I_X! H, ONES(tF+4 LXI' a,1~2:~:, " LDIR ; EXECUTE THE LINE .. 0000: CALL LINER ; DONE',? CALL ISTERM' TElL Z:::'{() CP/M DI:::I< (:.lj::;::SEMBLER VERS.ION 2.21 • l"lf:)IN.. .- ZGF::':F::!'·· CD 044[1" O::~:FD··· 21 001(:.··· 0400'" 04·0::::'" 7C ED47 7D 0404'" D:30[l ·04·0~.··· ED~3E 0401'" 040:;::'" 04·0A··· 04·()C··· 040E'" 0410'" 04:1.::::'" 21 O:l COCA :!.F:3~5 041/.:.··· CD 000(1:08 04l·~··· CD OOOO:OB 041.C'· CD 041.F··· 042:1. ..' :3E41 2:1. C2EC 0424'" 0427" FS 042:3'" :360E 042A'- 0000:14 1:1. 0000:09 OF THE TFnr:' ; I"IOF:E CSFL..AG ;AND CNTRLZ ; :30 CAN ·····Z ACiA I N ;BACK TO INTERRUPTEE ~CLEAR *RESTART--SYSTEM RESET CODE* .MAIN.: DI ;,D I SABLE INTERRUPTS RE::;:;TART: SF', ST(..':tCK LXI ;AND ZAP INMOD XRA A OUT INMOD o1...1 T NORML OUT 2AH OUT OF';:JH ::::2·-64 I NTEt\NAL OUT 0-32K WRITE ENABLED OFAH OUT 32-64 WRITE ENABLED OFBH OUT CMA CI...Ef.,)I:::': LEDS LED~=; OUT A, iF/-·1 MVI j,()O'020K EXTERNAL OUT O~:':F4··· O:3FA'" ORA A .JRNZ •• 0000 •• BACK: XI::::A A ::3TA CN°rRLZ STA CSFLACi ....IMP ::;W ITCH PAGE 1 :1. OF:3H . ;HYPE MUSIC PIMPL. I TUDE MVI (4 , (X':W H BSAUD OUT I NUr-,)RT CALI... INITIALIZE INTERRUPT::::; H,ZCiITAB LXI 'A.H MeN :::HH MOV A,1... OUT INFBI< IIvl2 lV/VI A.200 . OUT' INI...IN lV/VI t'.:3 OUT 'INMOD ; PROGRAM VERTICAL INTERRUPT ;ENABLE StREEN INTS. ;AND INT EVERY Mi LX I H. CLEf.'.':jR:?:; LXI B.RAMEND-CLEARS CALL CLE(.71jF< I T C(4L.L COF< I N I CALL INIVDR ;L.ENGTH OF USER .; STORAGE ;PROPAGATE ZEROES ;STRUCTURE USER MEMORY ; SET UP ONSCREEN TYPING NOW BUILDINTECiER A-Z ENTRIES/HASHTABLE MVI A.'A'. ;START WITH A LXI H.FSTINT IFIRST INTEGER ADDRESS LXI D.CMDTAB •• REST: PUSH P~;W I"IVI M. $F/4DR INX H ;TABLE OF COMMAND ADDRS ; SET TO IVAL TDl Z80 CP/M DISK ASSEMBLER VERSION 2.21 .MAIN. - ZGRASS--THIS IS IT~ THE VERY BEST PART OF THE TRIP lINEP--THE LINE PROCESSOR 042B'- . 042D'- . 042E" 0430'04::::3···. 04:34" 04:35" 04:38" 3601 04·:;::9'04:3A'043D" 04:;::F" 0440" 0442'0444·.... 0445'0447'" 0449-' 044B-' EB MVI INX MVI LXI DAD MOV LXI DAD 23 36.80 01 0007 09 77 01 0005 O'? Ol 0002 EDBO EB FE24 28:39 3C FE5B 200E :3E24. 180A 044D" 044D" 0;44F'" 0451 " 0452> 0454" 0456 " 0458-' 045A"()45C'045E'" 0460-' :3E12 D321 C'? ()462 . . 0464-' 0466'0469" 046(:" 046F" 3E38 21 C4B3 .-........ ...:....:.. C4AF 22 C4Bl C9 0470'- 11 (:579 0473-' 0476'" 21 0493--01 00lA EDBO. FB ~~EAE D32B ~3E40 D32B 3ECE D:32B 3E27 D:32B D:::::':'::~: M,l PAGE 12 ;SIZE IS 1 BLOCK H M,$NDEL ;$£T .BYTE 2 TO $NDEL B.$NASCII-2 ;PUTIN NAME B. M.A ;LIKE THIS B,14-$NASCII ;-)TO CMD PLACE B XCHG LXI B·,2 ;COPV CMDTAB ENTRY LDIR ;HL<'-)DE XCHCi ;DID $? CPI "$" .jRZ REBDON ~DONE ;A CHANGES TO B, ETC. INR A ; DONE-? CPI .' Z"'+1 .jRNZ •• REST MVI A, "-$" ;DO $. .JMPR •• REST ROUTINE TO INITIALIZE AlmON UART INUART.= ; RESET INTERRUPT VECTOR MVI A.12H OUT VCTR RET ;**TEMP ** MVI A.OAEH OUT . AUART!::; MVI A,4·0H OUT AUARTS. MVI A.OCEH OLlT AUARTS MVI A,27H OUT AUARTS SET BAUD RATE AT 2400 MVI A.00111000~· OUT BAUDSEL LX.I H, TAPBUF SHLD TAPCON SHLD TAPPRO RET ROUTINE TO INITIALIZE DEVIC~ VARIABLES! RGBINI: LXI D,DEVVAR DE-INITIAL DEVICE TABL E 047''i!-' 047B--(147C'047D-' Q4E:()-- 041::{3--0486" 04.::::7'0480'- LXI H, INIDEV LXI B,ENDDEV-INIDEV LDIR EI C>?,I RET CD047Q-_i REBDON= .CALL RGB I NI C~:.· . OOA2'-· .JMf' ABORT. . .cp: oobo: 28 .CALL PRINTFF ."()C; . BY1"e: CNTRL . ·47524146495:3 • ASCI Z ·/GRAFI X / ODCIAOO ~. HL=INITIAL VALUES


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:33:59-08:00
Modify Date                     : 2018:08:27 15:40:10-07:00
Metadata Date                   : 2018:08:27 15:40:10-07:00
Producer                        : Adobe Acrobat 9.0 Paper Capture Plug-in
Format                          : application/pdf
Document ID                     : uuid:7b5774be-83a8-ee40-a043-2ca102d59487
Instance ID                     : uuid:fdc2f20f-5e0d-2f40-8935-16c7f8672dbb
Page Layout                     : SinglePage
Page Mode                       : UseOutlines
Page Count                      : 90
EXIF Metadata provided by EXIF.tools

Navigation menu