BASIC_TDL BASIC TDL

User Manual: Pdf BASIC_TDL

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

DownloadBASIC_TDL BASIC TDL
Open PDF In BrowserView PDF
.,..r

.TDL Z80 CP/M DISK ASSEMBLER VERSION
I"IAIN

4-E20
4E20
4£20
4E2:1,
4E22

.PREL
.IDENTMAIN
• INSERT HVG.LIB
• INSERT MACRO.LIB
• INSERT MUSIC.LIB
• INSERT BBEQU.ASM
LOC
BOTSCF~
; TAPE INPUT GOODIES
CONPI::,(O ==:
TAG TO NAIL BOTH
PF~OPTR: :
1
PRODUCERS POIN
• BU:::B
TER
.8U:::B
1
CONSUMERS POIN
CONPTR= ::
TER
TAPBUI=: :
48
ROTATING BUFFE
• BU:::S
n

.

R

lj,E5:2
.l1-E!:i2
4E~:54

4E55
4E56
4E57
4E58
4E59
4E5A
.l~E5B

4E5B
4E5C
4E5C
4E5E
4£60
4E62

4E64

2~21

__ u

TBFEND . _-w
TXTUNF= :
VDMNLF: :
LAG
I

2~:

208B
2()!3C:

20::;:[/
208F
209:l
2092
2C)'~}:;:

2095
20';:'6

:3600
''':a''":)

L·...•

7E
D:310
:3647

se
23

7E
D:311
A7
~::::C)4

~?09A

:3EOF
0:3:1./'-;.

209C
209F
20Al
20A:3
20A6
20A:3

:3A 4EA2
D:;:04
D::::05
3A 4EA4
D:306
D307

2()'~E:

20AA
. 20AB
2 OAt:
.20AD

El
D1
C1
18:30

H

H
INX
A,M
MOV
AND NEW TONE
TONEA
OUT
REST WANTED?·
ANA
A
....IRZ
TBIN3
YES - ..JUMP AROUND VOLU
ME UPDATE
A.15
MVI
VOLAB
TBIN2= OUT
; SET COLOR REGISTERS TO VALUES IN PARAMETER VAR
S %0 AND %1
DEVCLO
TBIN:3= LDA

£~:,

(~r:r['it .t.

LDA

DEVCL'1

g~~

~fJ.L.

-

.

-

eti3 .

; DONE - RESTORE REGISTERS AND GO BACK
INTDON= POP.H
POP
D
POP
B
..JMPR
ZRONK
SERI AL INPUT rlR I Vl;:R INTERRUPT ;RpurlNE
THIS ROUTINE SAMPLES THE SERIAL INPUT BIT

TDL Z80 CP/,M DISI< ASSEMBLER VERSION 2.21
MAIN

PAGE 5

; AND FO~MS CHARACTERS WHICH ARE PLACED IN THE
; CIRCULAR INPUT BUFFER FOR CONSUMPTION BY BACKG
ROUND L.EVEL
THIS ROUTINE USES THE ALTERNATE REGISTER SET
; WHERE B=STATE VARIABLE, C=CHARACTER ACCUMULATO
R
I

20AF
20BO
20B1

F5
1:)9

20B4

DB12
1F
79

20B!:i
20B6
20B7
20B8
20B9
20BC

1F
4F
78
A7
FA 20C6
20l1.

2()B3

20BE
20CO
20C2

CB79
2'01.C
0608

20C4

1::::18

20CI.:.
20C7
20C9

04
(:B79
2013

IF STATE VAR < 0 =). WE ARE AWAITING -·N STOP BI
TS BEFORE
WE BELIEVE ANYTHING
; IF STAT~ VAR = 0 =:~. . WE ARE LOOKING FOR A START
BIT
; IF STATE VAR > 0 =:::. WE ARE GETTING DATA BIT::;
SIDINT= PUSH
PSW
EXX
; SAMPL.E THE INPUT BIT
GETBIT: IN
TAPEIO
RAR
MOV
A,C
SHIFT INTO ACCUMULATOR
RAR
MOV
MOV
ANA
.JM
.,JRNZ

C.A
A.B

WHAT STATE ARE WE IN?

A

l COUNTING STATE?
JUMP IF IN MIDDLE OF C

SIDINO
SIDIN1

HAR
; WE ARE WAITING FOR A START BIT
BIT
7,C
DID WE GET ONE?
.JRNZ
SIDIN~3
JUMP IF RIGHT
MVI
B.:3
SET WAITING FOR 8 BIT::;
JMPR
SIDIN3
AND GO GONZO
; TAPE INPUT WAS RECENTLY TURNED ON. AND WE ARE
WAITING FOR
; SEVERAL SEARCH WINDOWS IN A ROW TO EACH SHOW A
1 BIT
; IMPLYING THAT THIS BEASTIE IS REALLY WORKING
SIDINO: INR
B
ASSUME WE GOT IT
7,C
BIT
JRNZ
SIDIN3; J~~PIF GOOD ASSUMPTIO
N

20CB
20(:D

06FC
l80F

20(:F

100D

20Dl
2QD4
20D5
20D8
20D9
20DB

2A 4E20
7D
CD 20E2.
BC
28C):;:

2b4E

NO - RESET COUNTER AND WAIT SOME MORE
MVI
B.,STPBCT
.JI"IPR
SI DIN::::
IN THE MIDDLE OF A CHARACTER •••
WAS THIS 'THE LAST BIT?
SIDIN3 ; JUMP IF NOT
SIDIN1= DJNZ
WELtOME TO LAST BI TSV ILLE .
COj\fPRO;GET POINTERS
LHLD
A,L
MOV
BlJ.I'1PTR ," ;.,A:;=P+ 1,
CALL
"H " '.,. ..'. IC:··f'i::· P+l?
CMP
·.,JRZ
S 101 N::::
; YEP. -. FULL . . .; IGNORE
. I"IVI
H, TAPBUF)'8
"

4~.

_'

"

••

"

TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21

PAGE 6

1'1 AIN

:;;::ODD
20DE
20DF
20EO
20E:I.

71
D9
Fl
FB
C9

20E2
20E:3
20E5
20Ee:,
20E:;::

::::C:

20E9
20E(:
20ED

CD 20£D
F7
DB12

20EF
20F1

E602
20FA

FE!:i2
CO
~:E22

C9

MOV
1"1. C
SI[lIN:;;:: EXX
ZRONK= POP
PSW
EI
RET
; SUBROUTINE TO INCREMENT 1 BYTE POINTER TO CIRC
ULAR BUFFER
BUMPTR= :
INR
A
BUMP IT
TBFEND&OFFH
CPI
; QUIT IF NOT AT END
RNZ
MVI
A. TAPBUF~1.0FFH
RET
COI"IMAND TO RESTORE TINY BASIC INTERRUPT ROUTIN
E

20F3
20F6
20F:3

..

~":)

.. 4EC2
",

°_1 4

~:E03

:32 4EA6
F'?
.
ED5E
3E20
ED47
:;;:EO:3
D30E
:3EC8
D30F

20FB
20FC
20FE
2100
2102
2:1.04
:no&.,
21.08
210A
210C
2:1.0E
21.0F

D:30D
FB
eo:)
-' ."

2110
2:t.U.

F'?'-'
21 2222

2114
2117
2118
2119
211C
211[1
·21.:20

22 4E20

21.'22
~l'~·'·j
4. . 4~~'

~1:25
2'~27

212Et

.;)

3E22

D9
AF
.~'-J

~''':;'

4EA6

~:c·

--.-,

4EC2
06FC
[19
3E18
[/30E
FB
C9
..:t ..::.

TRETUR:: CALL
BBRET: RST
TBIEST: :
E INTERFACE
ANI
.JRNZ
o ZERO
STA
MVI
STA
; ACTIVATE TINY
DI
1M2
MVI
STAI
MVI
OUT
MVI
OUT
MVI
OUT

TBIEST
RSTFIN
IN

; GO HOME
TAPEIO
INITIALIZE TAP

2

TBIEST

WAIT FOR THANG TO GO T

TAPEST
A.:3
DEVTEM
BASIC INTERRUPT ROUTINE
A.ITAB>S
A. E:

INMOD
A.200
INLIN
A,ITAB&OFFH
INFBK

EI

RET
SUBROUTINE TO ESTABLISH JAPE UNIT AS INPUTDEV
ICE
TINPES=: IH
H,«TAPBUF&OFFH)(S)+(TAPBUF&OFFH
LXI
SHLD
.EXX
XRA
STA
INR
STA
MVI
EXX
!'1VI.

OUT'

E!

RET
.END

CONPRO
A

DEVTEM
A

TAPEST
B.STPBCT
/'

,A.18H
INMOD

'TDL l80 CP/M DISK ASSEMBLER VERSION 2 •. 21
LINE

0000'"
0000"
0000"0000'"
0003"
0001.,···
0009"
OOOC··'
OOOF'"

001:2"0014":
0017"
001::;:"OOtB"
OOlC'"
001E"
00:20"
0021'"
00:24'"
0025"
0026'"
0027'"
00:28"
002B"
OO:2E'"
002F'"
00:30'"
00::::1 "
00:;:2"
00::::3'"
0034"
00::::5"
00~~6'"

00:37'"
00:3:3"
0039"
OO::::C"

oo:::m···

00:3F'"
0040'"
004:3'"
0044"0047"
004A"c.>
004B"
004C····

:31 0000:04
2:1. OOOA"
2:;;:~ 0000:05
21 0000
0000:06
22 0000:07
::::E::::E
CD 00C7'"
D5
11 0000: 0:3
.").")

L.';..

1A
FE::::E
2001
1,:3
CD 0000:09
E7
7C
B5
C1
CA (lOOO:OA
22 OOOO:OB
lB
7C
12
:LB
7D
j .~
.-.

C5
D5
79
Q'':;'
.' __I

F5
CD 0077"
D5
2010
D5
CD 0094'"
Ct
2A OOOO:OC
CD 01.77";
60
69
22 OOOO:OC

PAGE

.PREL
"IDENT LINE
• INSERT HVG.LIB
• INSERT Mt~CRO. LIB
"INSERT BBEG~U. AS1"!
.RELOC
DIRECT COMMAND - TEXT COLLECTOR
TELL: :
LX I
D, M:SG
CALL
PRTSTG
STOP::
RSTART: :
LXI
SP,STACK#
H,XXSTt+l
LXI
SHLD
CURRNT#
H,O
XXSTt= LXI
SHLD
LOPVAR#
STKCiOS#
SHLD
A, ,.. )"
XX::::T:2= MVI
CALL
GETLN
PUSH
D
D.BUFFER#
LXI
IGNORE ANY LEADING "':::J
LDAX
D
""),, ..
CPI
.JRNl
XXST4
INX
D
XXST4: CALL
TSTNUI'1#
RST
RSTIGN
MOV
A.H
ORA
L
POP
B
•...IZ
EXECO#
SHLD
OLDLN#
DCX
D
MOV
A.H
STAX
D
DCX
D
A,L
MOV
STAX
D
PUSH
B
PUSH
D
A,C
MOV
SUB
E
PUSH
PSW
CALL
FNDLN
PUSH
D
.JRNl
XXST3
PUSH
D
CALL
FNDNXT
OP
B
LH I
TxtUNF#
CALL
t1VUP
.. B.S'··.
MOV
L,C'
I"IOV
SHLD
TXTUNF#
,

-------

1

TDL zeo CP/M DISK ASSEMBLER VERSION
LINE

004F'"
0050"
005:]"
0054,0'
005!::i"
0057"
0059'"
005A'"
005B'-

2A oooo:OC
F1
E5

FEO::;
28A7

:35
5F

:':;:EOO

005D,o'

8C

005E"

57
2:1. A70C
EB

005F,o'
0062"
0063"
()()6~,

"

0069,0'
006C"
006D"
0070'"
0071--0072"-

0075-0077'"
007::::"0079'"
007C"
r007F'"

0080'-

0083"
0084-00:::=5--0086'0087--'
00:3A-"
008B"

OO::::C",
(1):3[1"

OO:3E"
OO::::F'009:1. "
00':,'12"009:3'"
00-::/ 4'0095'-'
0096'"
0099"
009B'"
",009D'"

OP9E"

, O()AO'"
'OOA3"
OOA4"

OOA6"
OOA9"

POP
LHLD
POP
PUSH
CPI
..JRZ
ADD
MOV
MVI
ADC
MOV
LXI
XCHG
CALL
..JNC
::;:HLD

XXST~3:

C:I.

CD OOOO:OD
OOOO:OE
OOOO:OC

[12
:22
D:I.

/ CALL

- - -•••..

TXTUNF#
PSW
H----.

E.A
pj,o
H

-----.--1
MV tOtAlN

CD 0177'"
:l898

pOP
CALL
..JMPR

~ ___~..D-._

[11

El

7C
87
FA OOOO:OF

B

'?~~'-'

018'::/'"

CD

PAGE 2:

2.21

; FNDLN
FNDLN:: MOV
ORA

11 0000:10

FN[lLP:
CD 019A····
4F

~

JM
LXI
INX
CALL

H

MVUP
XXST2
A.H
A
G!HOW*!'

D.TEXT#
D

LDE

MOV

1.B
:37

[lex

C,A
D

ADD

A

DB

RC
CALL
SUB

L

CD 019A'"

95

LDE

MOV

EhA

!NX

D

4·7
1:3
79

I"IOV

A.C

9(:

SBB

H

3804
:I.B

...IRe

FLl

DCX
ORA
FI2=
RET
FNDNXT= INX

D

1:3

FL1:

D

CD 01.9A'·
FEOD
20F:3

FNDSKP:: CAt.L
CPI

BO
(:9

1:3
18DF
3A 0000:11
A7'
2814

11 0000: O::~
CD 00(1):09

INX,

,JRNZ

INX
GLED:

,JMPR
.LDA

ANA
..JRZ
LXI
CALL

B
D

LI:tE:
CR
/FL.1
'D
, FNDLP

.' EDFLt3#
A.'

GLEDA
D,BlIFFER#
TSTNUM#

TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21
LINE

OOAC'"
(lOAF'"
OOBl "
00B2'"
OOB:=:"
00B6'"
(lOB7"
OOBA'"
OOBE'"
(H)Cl ..'

OOC2'"
OOC6"
00C7'"
OOCA"
OOCD'"
(lOCE"
OOCF'"
0000"

00[11'"
0003"
00D6'"
00D9"
OODA'"
00D8'"
OODD'"
(lODE"
OOEO ..'
00E2"
OOE5"
OOE8'"
00E9"
OOEB'"
OOEE'"
OOEF "
OOFO'"
OOF2'"
OOF5'"
00F7"
OOF8'"
OOFA'"
OOFD'"
OOFE"
0100'"
0101'"
0104'"
'01.07"
0108"
0IQ9'"
010B'"

CD 0077'"
CAL.L.
FNDLN
A, ... ?.,
:3E3F
MVI
CO
RNZ
1:3
INX
D
CD OOC1'"
CALL.
GL.ED8
AF
XRA
A
::::2 0000: 11
STA
EDFLG#
ED5B 0000:1.2 GL.EDA: L.DED
EDPTR#
CD 019A"
CALL
LDE
GLEDB: INX
D
ED5:=: 0000: 12
SDED
EDPTR#
C9
RET
11 0000: 0:3
GETLN= : LXI
D,BUFFER#
32 0000:11
STA
EDFLG#
DF
GU. :
RST
RSTOCH
PROMPT OR ECHO
C5
PUSH
GL2=
B
E5
PUSH
H
D5
PUSH
D
PLACE UP CURSOR BLOCK
OEAA
MVI
C.OAAH
CD 0000: 1:=:
CALL.
CURSE#
; RETURN CHAR FROM NEXT LINE #
21 0000:14
GL2A(
LXI
H,NLLNCT#
7E
MOV
A.M
FLAG
A7
ANA
A
283=::
.JRZ
GL2C
:35
DCR
M
FIR!:::T TIME THRU?
FE05
CPI
5
.JRNZ
200C
GL2B
.JUMP IF NOT
GET PREVIOUS LINE # AND BUMP IT'
2A OOOO=OB
OLDLN#
LHLD
11 OOOA
L.XI
D.1.0
1.9
DAD
D
CBBC
ALLOW 'NEG
RES
7.H
:22 (H)O(): 15
GL2.j:
SHLD
NLLNLN
MOVE TO WORKING RAM CE
LL:J:I:
; COMPUTE DIVISION SUBTRACT OR
FF
GL2B=
INDEXW lEINTP%[.IFE .INTP.,[RST 7J]
5B
+.BYTE
90+1 J
01.C8···
• WORD
TBLDIV-2
::;::A 0000:1.5
NLLNLN#
LHLD
0600
MVI
B.O
A7
ANA
GL2E=
A
ED52
DSBC
D
FA 0100'"
GL.2F
·..11'1
04
INR
B
1:3F7
.JMPR
GL2E
1':>'
GL2F=
DAD
D
2:2 000(1: 15
SHL.D
'NLLNLN#
21 0000:16
H~, NL.LNtSiM:
LXI
7:3
.f'I'IB·,
MOV
A7
'A
ANA
2005
.JRNZ
GL2G
A.,M
7E
IVIOV
J

TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21
LINE

010C"
O:LOD"
010F'"
011.0'"
0:1.:1.2'"
0:1. :1.3"

A7

011.5"011:::;:'"
01.19"

CD 0000:17
D1
12

01IA'"
011.B···
01. 1. D'"
0120'"
0121"

D5
FE6t.
CC OOAO'"
D:l.
E:I.
C1.
:1.2
FE:l.F

(>12:7::

2::::C:7

AF
Ct.:3!)
77
180B

0
"

0123'"
01.24'"
01.26'"

2t)33

() 1. :~:::: ..'

7B
E5

0129"
012A'"
O:l.2D·'
012E'012F'"
01,::::1'"

21 0000:08

BD
El.
2:3 e7D

1B
lA
FEb:;::
3007
CD 0000: 18

()132'"

0:1.3::::"
()1::':5"·

01:37'"
01::::A'"
01::::C"
01:3F'"
0142'"
0:1.4:3"
0144'"
01.46'"
01.49'"
0:1.4B"01.4E···
01.4F···
0:1.50"
0151 "
0:1.52'"
0154'"
0:1.56'"
0157"
0:1.58"-

1"1 V I

l.::~E:F

.Ji'1PR
PUSH
CALL

TOI= . . , XPRI [

.ASCIS

.0":::.= . .

XPRl

ITEM
• WORD

"#"', XPR2[
XPR2

.. A~a::IS

"#,,

ITEM
• WORD

")-,", XPR:3[
XPR3

I E;

... ) ....

ITEM
• WORD

."=,", XPR5[

.ASCIS

u

II

A!3C:I~::

A~;t::

·~SZ~

7FH+80H

.ASCIS

"~=F

• ASCI~:;

.0'.:::='"

XPR5

"<:="', XPR4[

ITEM
.WORD

XPR4

ITEM
.WORD

"-<"',XPR6[
XPR6

• Ar:=a:: I ~=;

TOIOE::3·. .

..s:..,"...

0089"
00:3A'"
008D'"

7:3
CD 0000:06
Fl

(108E'"
0091. "
0092'"
00'3"J:3 ..,

CD
DO
C9

0096"

C~3

0000:

00':;-6'"

E7
FE2!:i
281E

0097'"
0099;009B'"
0090"
009E-'
OOAO'"

00A1 "
OOA2'"

~,,=,

04

D640
D8
201D
13

EF
29

OOA:;::'"

DA 0000:07

00A6'"
OOA7'"
OOA8-'
OOAB'-

D5
EB
CD 0000=08
CD 0000:09

. OOAE'"
00B1 ;00B4'. 00B5"0.0136'00B7'"00138'"

DA (lOOI):OA
2A OOOO:OB
2B

2B
1':;-

D1
C9

· . 00B9···
OOBA'OOBB'"

13
E:F

OOBe"-

(:9

AF

SETV1:: PUSH
RST
MOV
MOV
POP
PUSH
MOV
CALL
INX
MOV
CALL
POP
.; SUBROUT I NE TO
ONE
TSTVFF:: CALL
RNC
RET
SVWHAT= .JMP
TSTV:: RST
CPT.
.JRZ
SUI
RC
.JRNZ
INX
RST
DAD

H
RSTEXP
B.H
C.L
H

PSW
A.C
STHL#
H

A.B
STHL:f:I:
PSW
GET A VARIABLE MAKING SURE IT IS

QWHAT#
RSTIGN
,,' t. ..'

PEEI< -POKE?

TSTVO
..,@,.,

TV:!,
D

F VAF~BGN#'-2

A,L,

ADD

L

6F

I"!DV
1'1 V I

L, PI
A.O

ADC

H

67

!'10V

!-·I, A

HET
.END

TDL 180CP1MDISK ASSEMBLER VERSION 2.21
MATH

0000'"
0000"

0001 "
0002"
000::::"

E7
1:'::

0007'"

F5
CD 0000=04
D5
11 0000:05

OOOA"
OOOD"
OOOE'"

CD 005D'"
Dl
CF

0006"

OOOF"
0010'"

:2(:
-'-I
.~~

0011"0014--0015-'
0016'001'7'-OO:lA--001D'-'
0020-0021 "
002::::'0026,-'

CD 0000:04
Fl
D5
U 0000:06
F5
CD 005D"
:1.:1. 0000:05
Fl
0609
CD 0047--[11

0027"
002::::'0029---

CF

002A-'002D--'
002E-'

CD 0000:04
D5
11 0000:05

0031 ,00::::4'-'
(1):35--0036-'
00:::::7 .-'
002:'7'O(I::3A'"
003D"

01 l200
EB
FF
56
C630
EB
CD OO(lO: 07

OOSE:·;-··
OOSF(

0040:"
(1l)42"
.OO4:3'~

2(:

lA

2.:3,

--;'3
OC
lOF2
D.1
F7
":",.:.'"

PAGE 1

.PREL
.IDENT MATH
• INSERT HVG.LIB
• INSERT MACRO.LIB
• INSERT BBEQU.ASM
• RELCiC
; BCD MATH ROUTINE INTERFACE
; IMPLEMENTS $+, $-, $*. *1
BCDMAT:: RST
RSTIGN
INX
D
PUSH
PSW
SAVE CODE SCANNED
TSTVFF#
GET FIRST
VAR
CALL
PUSH
D
D,BCDA1#
~ CONVERT TO BCD
LXI

ASE
+
+
+]

CALL
POP
TSTCC
RST
• BYTE
• BYTE

ASCBCD

CALL
POP
PUSH
LXI
PUSH
CALL
LXI
POP
MVI
CALL

TSTVFF#
PSW

D

COMMA, BCDDUD

INSIST ON COMM

:I.

COMMA
BCDDUD

-.-l

GET 2ND VAR

D

D.BCDA2#
PSW
ASCBCD
D.BCDA1#
PSW
B.

SAME STORY

~!

DOBCDO

; SCAN FOR PLACE
POP
D
TO STORE
TSTCC
COMMA. BCDDUDE
RST
1
+
COfvIMPI
.BYTE
+
BC[lDUD-.':"l
.BYTE
+:1
CALL
TSTVFF#
PUSH
0
LXI
D,BCDA1#
; ARGI CONTAINS THE RESULT - STICK IT LAST VAR
LX I
B.1.200H
BCDASC: XCHG
INDEXN[INTPX[.IFE .INTP.,[RST 7J]
+.BYTE
86+0J
--'0"
ADI
XCHG·
CALL
.STHL#
INX
H
H
INX
INR .•. , C
D.JNZ
BCDASC
POP
.D,.
RsT
RSTFIN

PAGE :2

TDL Z80 CP I 1"1 DISk: ASSEMBLER, VE;::RSIQN 2.21,
I"IATH

0044'"

C3 0000:08

0047'"
0049'"
004B'"
004D"
004F'"

FE6:2
:300A
FE2D

0050"
0051 "
0052'"

62
C9
FF

005:3'"
0054"
0055'"
0057"

64
C9
200::::
FF

0058"0059'005A'"
005B"
005C"

:;;!:3():;:

FF

66
C'~

FF
~-:.:3

C:I?

\I

BCDDlJD,p . . IMP
I:;),WHAT#
\
; SUBRbUTINE TO IT
j, <: I"IU~\T?
DOBCDO: CPI
62H
)
Nn
.JRNC
BCD:3
.
0_
.
'
YES It.:; IT MINUS?
CPI
,JRZ
BCD2
.JUMP f'rF SO
BCDADD ; NO - ITS ADDTHENCINTP%[.IFE
INTP •• [RST 7JJ
+.BYTE
98+0J
RET
SUBTR lCINTP%[.IFE .INTP •• [RST
BcnSUB
BCD2=
7JJ
+.BYTE
100+0]
RET
BCD3:
JRNZ
BCD4
; ,JUMP IF NOT = TIMES
BCDMUL ; ELSE MULT[INTP%[.IFE .INTP.,CR
ST 7]]
+.BYTE
102+0J
RET
BCD4:
BCDDIV[INTP%C.IFE .INTP.,[RST 7]J
+.BYTE
1.04+0J
RET
SUBROUTINE TO CONVERT ASCII STRING TO BCD
I HL = ASCII IN. DE=BCD OUT
; OUT: DE=ASCII IN BUMPED. HL=BCD OUT NOT BUMPE

.

D

005D--'
005E'"
0061-'
OOc.Lj····
0065'"
0066'"
0067'"
0068"
0069"
006B"
006C"
006[1'"
006E'"
006F"
0072"0073"
0076"
0077'"
007:::-"
0079--'
007A'"
007B"
007C"
,.907D-'
007E"
007F'-'
6080"-

EB
l200
CD 0000=09
FF
58
OC
OJ,

13
13

10F6
C9
EF
7C
B7
FA OOOO:OA
B5
CA OOOQ:OA
D5
EB
AF
FF
76
6F
AF
FF
76
67
CI::'
.~I

A::;CBCD= XCHG
LXI
B.12001-1
ASCBC1= CALL
LDE#
STOREN[INTPX[.IFE
+.BYTE
n\lR
C
INX
D
INX
D
D,JNZ
ASCBCl
RET
; RANDOM Nlil"lBER FUNCTION
RND::
RST
RSTPAR
A,H
,I"IOV
ORA
A
.JI"I
G!HOW#
ORA
L
.JZ
G'JHOW#
PUSH
D
XCHG
XRA
A
RANGEDCINTP%C.IFE
11.8+0]
+.BYTE
MOV
L.. A
XRA
A
RANGED [ INlF-'%['~'lFE
1. 1 8 + 0 J ,
+.BYTE
MOVH.A
; HL = RANDOM #
PUSH
B

.INTP •• [RST 7J]

DE = RANGE
.INTP.,[RST 7JJ

' I!\tTP ••, eRST 7]J
,

,

TOL Z80 CP/M DISK ASSEMBLER VERSION 2.21
JYIATH

00:31,"
0084"
0085'"
0086"
0087"

CO OOA3"
Cl
01
..,.";;!
" ....'
C9

0088"
0089'"
008A"
0080"
008E'"

EF
lB
CD 00B8"
C9

OOE:F'"
0092"
0093"
0094"0097'"
0098"
009A"
009B"

2A OOOO:OB
05
EB
21. A70C
A7
ED52
01
C9

009C'"
OO';>E'"
009F"
OOAO"(lOA1 "
00A2"

2600

1:3

7D

A7
FO
25

C9

00A3'"
(lOA4"
00A5"
OOA7"OOAA"
OOAB"
OOAC"
OOAO"
OOAE'"
OOBO"
OOBI "
00B2"
00B4'"
00B6"00B7'"
00B8"
OOB';>"
OOBA'"
OOBB"
OOBC"
. O(!BO'"
'. ,ObBE"
OQBF/
.IJ~·O'.C'_.
.... o' .,'
~;:-..

()OC1":'

. OOC2"
008:3'"

E5

6e

26(1)
CD OOAE"
41
70

El
/,:,7

OEFF
OC
A7
ED52
30FA
1.9
C9
7C
, B7
FO
7C
B5

e8

7(:

F5

.:-

2F, '
,·67
70"
2F

PAG~

CALL
DIVIDE
POP
B
POP
D
INX
H
RET
; ABSOLUTE VALUE FUNCTION
ABS::
RST
RSTPAR
DCX
D
CALL
CHKSGN
INX
D
RET
; SIZE FUNCTION - RETURNS BYTES NOT YET USED
SIZE:: LHLO
TXTUNF#
PUSH
D
XCHG
LXI
H.OFTLMT
ANA
A
DSBC
D
POP
0
RET
; SIGN EXTEND SUBROUTINE
SGNEXT:: MVI
H,Q
t'IOV
A,· L
ANA

A

RP
nCR
H
RET
; DIVIDE. SUBDE. CHKSGN. CHGSGN. CKHLDE
DIVIDE:: PUSH
H
MOV
L.H
H,O
MVI
[IV 1
CALL
B,e
MOV
MOV
A.L
POP
H
MOV
H.A
DV1 :
MVI
C.-1
DV2:
C
INR
ANA

A

[lSBe

D
DV2
D

,JRNC
DAD
RET
CHKSGN:

A.H

= I"IOV

ORA
RP
CHGSGN= : MOV
ORA
RZ
MOV
PUSH
CMA .• ,".'
MOV
MOV.·
CM.A'

A

A.H
L

«

A,H
PSW
.:H~A

" A,L

3

. TDL zao CP/M DISK ASSEMBLER VERSION 2.21
.MATH

00C4'
00C5'
00C6'
00C7'
00C8'
OOCB'
OOCC'
OOCE'
OOCF'

6F

MOV
INX

~~
L~

Fl
AC
F~
k

~p

XRA
JP
MOV
XRI
MOV
RET

OOOO:OA

78
EE80
47
C9

;CKHLDE:

.•

;CK1:
;COMP:

XRA
JP
XCHG
CALL
RET
MOV
CMP
RNZ
MOV
CMP
~T

.END

PAGE.4

L,A
H
PSW
H
QHOW#
A,B
BOH
B.A
MOV
D
(:k:l

COMP
A,H
D
A.L
E

A.H

TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21
STDBAS -

0000'"
0000'"
0001 "
0002"
0005'"
0008'"
0009'"

D7
D5
CD 0000:04
r''-' 0000:05
Fl
r"":)
_,--I 0000:06

OOOC"
OOOF"
001.0'001.:3'"
0015'00:1.7'"

21 0000
E7
CD 0000:07
2:305
FE2C
2801

...·L

PAI3E 1

.PREL
• I DENT =:HDBAS
• INSERT HVG.LIB
• INSERT MACRO.LIB
• INSERT BBEQU.ASM
.RELOC
RSTEXP
GOTO:: RST
PU=;::H
D
CALL
FNDLN#
.JNZ
AHOW#
POP
PSW
..JMP
RUNTSL#
; LIST AND PRINT
; NEW - IMPROVED LIST COMMAND
; LET8 YOU PUT IT IN A PROGRAM
LIST:: LXI
H,O
ASSUME AT EOL
RST
RSTIGN
IGNORE
CALL
ATNL#
.JRZ
L82:
CPI
'.'
LEADING COMMA?
.JRZ
LS3
YEP - SKIP FIRST
EXPR GET
, NOT AT END - GET FIRST
EXPR
F

EB
OOOO~

LHLD

1°
~ "-~

I

H

PUSH
1"10\,1

A.H

7A
19

i"lOV

A, D

DAD

FA 014·B···

dM
)mA

D
NX:3
H
NX5

AC

FA o:t 7:2'"

.J!'1

!\IX::;:::

EB

2A

OOOO~

:1.4

XCH(3
L.HLD

LOPVA!=<#
A,E

O14F'"
O:l.!:i!)···

7B

riO\'

CD 0000: 21

C?'~LL

015:~:'"

~~:::':

I 1\1 X

0:1.54'"
I) 1, !:;i5"
01.5::;:"
Ol!:iB'"
O:l.5C···

7A

MO\'

STHL#
H
A. D

CD 0000: 21,
2A 0000: 17

CALL
LHLD

LOPU1'r#

!::;THL*~

F1.

POP

PSW

137

OF [I

2A 0000: 1<:)
"

:22 0000: 1.'::'
.....
2A 0000: :!.A

LHLD

EEl
F7

Dl
CD Ol.F2'··

NX/.:.:

.,

F7

REM,
RE!"!: ~

21 0000
1::;:01,
D7

.

IFF~ "

IFl ..

7C

D

NX/.:.
LOPLN#
CURRNT#
LOPPT#

RSTFIN
POP
H
POP
D
POPf'l
CALL
RST
F::p

l)

A.

E

::::n-lL~*

+]
0:1. BC'"

:t ::::[1::;:

HST

1.

T[~ Z80 CP/M DISK ASSEMBLER VERSION 2.21
!:n-D8A!:::; _.

O:l.8E··'

F7

01. BF,.'

D~i

Oleo'"

CD 0000:

01(:::::'"

:300:3

Ol(:5'"
Ole:8'"

C::~:

01C9'"
OleA'"

D1-

OJ.C[I···

:It;::[12

01.CF···

(:1

OlDO'"

D5
EB

Ol[ll .,'
0:1.[12'"
01[15'"

IF'?:
I F'~:: ~
oooo~

PUSH

R:;:;TFII\I
D

:1.(:

CALL.

TSTV#

l5

..JRNC
.JMP
I"IOV

G!WHAT#
B, r'

POP

D

CALL

PRTCHS~*

.J1'1PR

POP

IP:::::
B

PUSH

D

4':'
'-'

CD

2A

F~!:n

..

IP1.0:
IPl. 1.

oooo~ ~:!::
IP12~

oooo~

XCHG
LHLD

1:2

.:. ....1
F"'"

C:URRNT#
H

LXI

H" IPj.

2j,

O:l.D9··'

22 0000: 12

:::;HLD

O:I,DC'"

2l 0000
:][:.'

LXI
DAD

::~::;~

01.96.···

0000: .-,C'
L·,.J

(:5

OlE::)'"

:3E2()

OlE?'"

C:::::

O:l.E{~·'

:I.

OlEB
OlED'"

FEOD

01EF'"
OlF2/

C::~:~

OlF:::::'"

E:I.

n

B~

O:LF9'"

~2~:;

O:I.FB'··

E:t
2:2: 0000 :I. .;::.
'-'

""

L
Fr;lt""t'1l

\'" ,I.

Fo(JF!

1
oooo~ 'iJ. '0;;;
"

POP
;:;HLD

lA

:::HLD

E:t

020B'"
020C'"

C:t;i

B
H

14

E

:~~2

oooo~

PPl

(:5

0:20:0 ,.'

',~~

O:;;:~j,O'·'

C1-

021 1 .,'

A7
ED72
D2 0000: 2B
2A 0000: 1.4
7C

'

POP

0

:~::;2

<):2()::;; ~.'

02lB'"
021.[:'"
021E'"
0221 ..
{)~~::;:~:2 .,'

:

F'OP

01. F:;::

0:7:: 14 ..'
021.7'"
02:1. A'"

GHJJH$:n-:f:l;
F'C~FS~)

(:1.
:;:~:2

.,"

D

15

"le

(}:;~,:1. ~"2

LDAX

,.'

r

oooo~

O:l.F4'··

..'

!::;FI
::;:;TI<:INP#
D
B

dt~IP

L::::C:F~

::22:

cur~F{NT*t.

H, ()

A, ..OETLN#

MV

()OOO~

OlF?'"

01.FC···
0 FF'"
0200'"
020::;::'"
0204'"

:::I"1LD
PUSH
PUSH

[15

IPI 1.

PIJSH

OlDI.:,"·

O:l.DF···
OlEO'"
Ol.E:3···
OlE4'"

PAGE

0000: 2A

B::5
~"2:::::I. :;::
2A 0000:: H-'I

E~~

2A 0000: :I 'oj

.

PU:;:;(·..I?\:

PUSH
!::;:ET

H
LOPLN~*

H
LOPPT*!:
B

un

H. ST! "
EB
FF
5D
0000"
lA

001E"
(l01F'"
0021'0022"
002:3"

00l8"

001';!>'"
OOtA'"

001B'-

0024"0025"-

0026"
0027'"
002A'"
0029"0(i2C'"

002D'"
002E'"

POP
PUSH
MOV
MOV
CALL
XCHG
INDEXB

C1
D5

+.BYTE

SAVE t::'TR
E,C
R2A

l[INTPX[.IFE .INTP •• [RST 7]]

92+1J

A6

• WORD
LDAX
ANA

D
M

2600

l"IVI

H.O

I.':tC

MOV
POP
POP
RZ
INX
RET

D1
C1
C8
C9

PIXTBL
GET BYTE FROM SCREEN
MASK OFF NONSENSE

L,H
D
B
H

C:::: 0000: 04 ~t.lfjrr::.!\IMP
G!WHAT
/ / ' , BOX"
ROUTINE
.
D7
c.-'"
B, OXDRW=: ":~TRSTEXP ; GET X
E5
/'" I~I.::.H
,1-1"
,
"
"'-"-"';/ T8TCC
C(lMMA,BOXDUD
CF
RST
1
COMMA .:
2C
• BYTE
+
BOXDtlD ~.-1
• BYTE
55
+

tu'

FIND COMMA[

.TDL. Z80 CP/M DISK ASSEMBLER VERSION 2.21
GRAPHI -

PAGE 2

+J

002F"00:30'"
00:31."
0032"
003:3'"

D7
E5
CF
2C
50

0034'"
00:::;:7"
0038'"
00:39"
OO:3A"

CD 00D3"F5
CF
2C
49

003B"
003E'"
003F"
0040'"
004:1.···

CD 00D:3"
F5
CF
2C
4·2

0042"0043"0044'-

D7
D5
DDEl
Fl.
47
Fl
4F
7D
E1
55
E1
5D
6F

+
+

F
D1
7D

e)l. ::::2··~

2:C:

01.:33"
03.34'- .
01.:37"01.39"01:3A-'
01:3B--03.3C··01:3E'-

F5
CD 0199"
C5
E5
4F
0600
21 0000"

SET NEW LAST PLACE

LINED2= STA
PIXVAL#
SET PIXVAL
CALL
DVECT
LINE03= PUSH
X
POP
D
RST
RSTFIN
LINED4: JMP
QHOW#
; LARRY LIVERMORE"S VECTOR DRAWING ALGORITHM
; H=Y3., L=Xl, 0=Y2, E=X2
OVECT= PUSH
D
MOV
B,L.
MOV
C,E
CALL
COELTA
MOV
E.B
MOV
L.C
MOV
B.H
MOV
C.D
CALL
CDELTA
MOV
H.C
MOV
n.B
WE NOW HAVE: H=SGN(DY). L=SGNCDX)
D=ABSCDY), E=ANSCDX)
SHLD
INCRO#
DECIDE WHICH DELTA IS LARGER
CALL BIGGER MX, SMALLER MN

011C'-

:;~::: 19

PAGE 5

VECT1. ~

!"NI

c~ (I

MOV

A,D
E

MetV

D. E

r"iOV

E~A

INR

C

MOV

A.D

SRLR

A

MOV

B.A

XCHG
SHLD
POP

MNMX#

MOV

A.L

MX TO A

D

; MAKE SURE LAST PIXEL W
INR
A
RITTEN
; THE INFAMOUS PIXEL PAINTING LOOP
PSW
VECT2= PUSH
R2ACLP
CALL
VECT?A
..
•..IRe
:~'" .,.' f""
PUSH
B,
H.
PUSH.
,t;::.A
MOV
MVI
B.O .
H.PIXTBL
LXI

TDL Z80 CP/M DISK ASSEMBLER VER::HON 2.21
GRAPHI -

014:1. "
0142"
01.43"
0144'"
01.47'"
014·9"
014B"
O:l.4C'"
014D"
0l.4E'"
014F'"
0150"
0151'"
0152'"
0:1.55"
0156"
0157'"
015::;:'"
015A"
015B'"
015C'"
01.5F'·
0l,60"
0161"
01.62'"
0163"
0164'"
0165'"
0167"
0168"
016B'"
016C'"
016D"
016F"
0:1.70'"
0171."
0172"
03.73"
.0174'"
0176"
0177'"
03.78'"
03. 79"
017A'"
017D"
(l17E'"
·OJ7F ....

olE!2 "

.O18:3}
0185""

09
46
E1
2:A 0000:06
FEOl
2002
7E
A8
AE
AO
AE
77
Cl

2A 0000: 0$"
78
84
BD
95
47
2A 0000:08
7A
84

VECT3:

85

5F
180B
47
2A 0000:08
79
OF
30F:3
7A
84
57
Fl
3D
20BD
C9
E5
D5
69
CD OOOO:OA
EB
68'
CD '0000: QA
AF
ED~2
"',

'S4

~~.

DAD
B
MOV
B.M
POP
H
LDA
PIXVAL#
1
CPI
...JRNZ
VECT9
MOV
A.M
XRA
B
VECT9= XRA
M
ANA
B
XRA
M
MOV
1"1. A
POP
B
INCREMENT COORDINATES
VECT2A= LHLD
MNMX#

:3::::()D

57
7B

PAGE

VECT4:

1"10 V

A. B

ADD
CMP
.JRC

H
L

VECT4

SUB

L

MOV
LHLD
MOV
ADD
MOV
MOV
ADD
MOV
·JMPR
MOV
LHLD
MOV
RRC
.JRNC
MOV

B.A
INCRO#
A.D

ADD

H

[I.A

A.E
L

E.A
VEeTS
B.A
INCRO#
A.C
VECT:::~

A,D
H

MOV
D.A
; END OF LOOP
VECT5: POP
PSW
DCR
A
.JRNZ
VECT2
RET
SUBROUTINE TO COMPUTE DELTA AND INCREMENT FOR
TWO COORDINATES
CDELTA: PUSH
H
PUSH
D
L,C
MOV
CALL
SGNEXT#
XCHG
MIJV
. L.B
StJNEXT#
CALL
/:4'
XRA'
o'

Dsse

D

COMPUTE SGN(DELTA). AND ABS(DELT(%)
'ORA"H

TDl 180 CP/M DISK ASSEMBLER VER~iQ~ 2.21
GRAPHI ~

0186"
0188"
0189"
018A'"
018C'"
018D'"
018F"
0190'"
01'~2"

0194"
0195"
01.96'"
0197"
0198-'
0199'019A'019C'"
019E'"
01AO'01Al'01A2'01A4'"
Ol.A~")'·

OlA:3'-

2:307
4F
7D
ED44
47
1807
B5
2802
:3E01.
45
4F
Dl
El
C9
7B
FE50
3803
FEBO
D8
7A
FE2C
:3:303

FED4
D8

PAGE 7

.JRZ
C:DELTI
C,A
MOV
MOV
A.L
NEG
B,A
MOV
,..IMPR
CDELT3
CDEL.Tl : ORA
POS CASE O?
L
.JRZ
CDELT2
A,l
MVI
CDELT2= MOV
B.L
MOV
C.A
CDEL.T:3= POP
D
POP
'H
RET
, RELATIVE TO ABSOLUTE CONVERSION WITH CLIPPING
R2ACLP: MOV
A.E
:=:0
CPI
,..IRC
•• OKY
CPI
OBOH
** -:30 **
RC
A,D
•• OI

;1' 1..., USED.

OUTCH;: PUSH
PUSH
PUS;H
PUSH

.H

b
B

psw

TDL Z80 CP/I"I DISK ASSEIYfBLER VERSION
CHAR

QO:::O'"
00:31'"
0084'"
0085"
00:38'"
0089'"
008A"
008B'"
008C'"

57
CD 0000:08
7A
CD 0096"
F1
C1
D1
El
C9
~."'

008D"
008E'"
0091'"
0093"
00';:'4'"

6F

3A 0000:09
FE06
7D
28EI.-:.

OOS'!E:'"

~~tD
.:..E

009A'"
009C"
(109E"
OOAO'"
00A2'"
OOA4'"
00A6"
OOA:::'"

FE1F
280F
:3804
FE78
:3802
3E3F
FE68
304F

OOAA"

CD

OOAD'"
00B6···
00F/3'"
OOBS'"

CD 010E'"
CD 003E'"
FE1F

00B7'"
009:3"
OOB~' "
OOBB'"
OOBI)"
OOCO'"
OOC:2'"
00C3'"
00C5'"
00C6"

7D
A7
2805
D606
6F
1,:33:1.
2E';i) 6
7C
1)608
67
1829

00C8"
OOCB'"

,·3A 0000:
A7

0096'"

OOBE'"

OOCc"
Oi)CE"
OClIH "
. Qi)tI4"
(lODe:,.'
(iOD7'"

,.... ,'.t'~.,. "

MOV
CALL
VDMCAL: MOV .
CALL
POP
POP
POP
POP
RET
VDMTOK= MOV
L,..DA
cpr

..JRl
,r~p I

, JRZ
.JRC
CPI
.JRC
FILT1= MVI
FILT2=
cpr

!:":i4
5D

A.D

VDM
PSW'
B
D

H

ENTER HERE •• ~
L,A
TAPESi"#
6·

lJDIX'Or'R
RU80Llif

om:!,

FILTl'
78H '
FIL T2·,
A,"'?'"

.JRNC
NOTE FOR

C LL
V.DM 1 :

CALL

.UCUR:;::E

CALL
L.DVDMC
CPI
RUBOUT
dRNZ
VDM3
RUBOUT ENTERED - SO RUB
MOV
A.L
;

201F

202~,

D,A ..
TOUTCK#

·;EVEN·ST~ANGERGUYS

,r:"I::J •

CD 010E'"
CD 0112'"
18:LE

PAGE 3

2.21

ANA

A

.JRZ

VDM2

IS X :::: Cr'?
;. YE:::; - ,JiJMP
NO - BACKUP

!j.

X
L,A
VDMDN1; AND JOIN STORE BACK
VDM2=
L,150
MOV
A,H
SUI
8
i"IOV
H, A
.JMPH
VDMDN 1.
; NEW LINE CHAR - DID WE JUST WRAP AROUND
VDMOCR= LDA
VDMNLF#
CHECK OLD GLORY
ANA
A
,.JRNZ
VDMDON
YES - SKIP DIDDL.ING
CALL
UCURSE; NO ~ UNWRITE CURSOR
CALL
NE~LIN; G8. TO NEXT LINE
.JMPR. VDMEtON; ANtI GHJ'I T .
; NORMAL CHARACTERE:NttRED- DISt:='LAvIT "
MOV
D. H
; cooRL1INAn::s, TO DE
. VDM3:
MOV
E,L
SUI

MOV
JMPR
MVI

B

WAS THAT I::::UBOUT?
.JUMP! F NOT
OUT
GET X

6

TDL Z80 CP/M
CHAR

VERSION 2.21

00D8 "
OODA'"

F680
OE1::::

OR!
MVI

OODC'"

DD21 0000:01

OOEO'"

FF

PAGE 4

80H
ALT FONT THE CHAR
C,011000B
OR WRITE THE C

HAR
LXI
E CHAR FONT
CHRDIS

USING ALTERNAT

\

l[INTP%[.IFE .INTP.,[RST

J

X.ALTFONI
; IT

7]]

OOEl "
OOE2"

,(

32

OOE5"
OOE6"
OOE8'"
OOEA'"

7D
C606
6F
FE9C
2007
CD 0112"

OOED"

3EO:l.

OOE:~:'"

+.BYTE

00 F 4""

1804
CD 00S8"
AF

OOFS'-'

:32 ()(H)O: t)

OOF1"

ADVANCE X POINTER

A.L
6

END OF L I NE'f'
NO - ..JUMP
YES - NEW
1 LINE .
AND SET NEW LINE FORCE

156
VDMDNl
NEWLIN
A.l

MVI
D

OOEF'"

50+1)]
MOV
ADI
MOV
CPI
.JRNZ
CAL.L

FU~G

.JMPR
VDMDN1= CALL
VDMDON= XRA
FLAG
VDMDN2= STA

VDMDN2
STVDMC
CLEAR NEW LINE FORCED

A

VDMNLF#

OOFEl'"
OOF9'"
OOFC"
OOFD'"

CD OH:A-'
7E

OOFF"

ES

; ROUTINE TO DISPLAY A TOKEN IN FULL FORM
CALL
TOKEPT
TOI{EP:I. : MOV
A.M
ANI
7FH
PUSH
H
CALL
VDMTOK
POP
H
TOKEF'~

E~.7F

0100'"

CD

0103'"

El

0104"
0105"
0106'"

23

OOE:D'-

MOV

7E:
07
:30F3

0107'01.09'"

3E20

010B'"

C:~:::

O:!.OE···

OEOO

01:1.0'"

lE:3E

A.I"I
H

INX
RLC
JRNC
TOI

OOBD'"
OOBF--'

ESS

:3EOl.
32 OOOO:OE

C5
D5

PAGE :3

VERSION 2.21

NEWTMR#
A

WCLICK
A.GO
MUZTON:f:I:
DEVTEM# ; DON"'T CLICK IF NT=O
A

1"1 V I

A, 1

STA
RET

NEWTMR#

SUBROUTINE TO CHECK FOR
ING
WHATSU= :
PUSH
B
PUSH
D
CALL
KEYSCN
--,4
SUI
.JRZ
FRZr

FE2D
28:30

FE30

cpr

21 007C"-

oJRZ
L XI

FF
5C
:3C
280E

3D
32 0000:06
3A 0000:07
32 0000:05

AF
•

::::2· (JOOO ; 08

004S"F'1
'004.6;"016047"'El
I~Q·
004:3".- .'

PNOTMN
·'0'-

PNOTZ
. ,H, NOTES"':CR

,HOOK!,N:: INDEXBEINTPX[.IFE .INTP.,[RST 7]J
+.BYTE
92+0J
CLICK?
INR
A
..JRZ
PNOTCL
INR
A
AINSWORTH NUMBA?
..JRZ
PNOTNO
nCR
A
A
D.CR
STA
MUZTON#
DEVTEM#
LDA
STA
NEWTMR#
A
PNOTCL= XRA
PSHARP: S"fA,
SHARPF#
PNOTCl : POP
'PSW
pjJP ...
D
P(IP
H
RET

TDL Z80 CP/lvl DISK ASSEMBLER VERSION 2.21
MUSIC

0049'"
004B'004E-'
0050-'

~

:;:E:;~:3

0052---

H~F7

0054"0056"-

3EOl

11.

0057'-0059"005B"005E-'
0061, -'
0062'0063--0064'0065---

:3E02
18E7
21 OOOO:OA
:3A 0000=07
F::::
86
77
FB
1.8DE

0067--006A-'
006B"
OOC.C'006E"
006F-0070--'

:3A 0000: 0:3
FF
5B
0075--EB
Fl
F5
[l6~:: 1
1.8B9

0071"
0073--0075'0077--0079-'
007B--007B"007C'007D'007E--007F'0080-'
0081'"
0082-0082'0083"0084-'
00.85--00:36"00:::7-'
00:::::3--

PNOTDV: I"IV I
PNOTD1= STA
.JMPR
PNOTML= MVI
.JMPR
PNOTPL= MVI
• BYTE
WO BYTES INTO
PNOTMN: MVI
.JMPR
PNOTZ= LXI

3E8F
32 0000:09
1:3F5

00:32'-OO·~/4'·

007B"1.~.4

59
4F
4A
42
:3B
2:4
5E
54
4A
46
:3E
::::7
:31

L.DA

PAGE 2

A.OAl
MUZMO#
PNCITCl_
A·,OA3
PNOTDl
A,l
llH

OPCODE TO MUNCH NEXT T

DE

A,2
PSHARP
H,MUZTMR#
DEVTEM#

DI
ADD
M
MOV
M,A
EI
.JMPR
PNOTC 1
; PLAY AINSWORTH NOTE
PNOTNO: LDA
SHARPF# ; RESTORE CHARACTER
INDEXW lCINTP%C.IFE .INTP.,CRST 7J]
+.BYTE
90+1J
• WORD
DICKY
XCHG
POP
PSW
PUSH
PSW
·-'1"SUI
.JMPR
HOOKIN
, l'1U!::;IC TABLES
DICKY: .WORD
!'1UZNOR
• WORD
MUZMAX
• WOi~D
MUZI'1IN
MUZMIN=
.BYTE
Bl.
C~;:;::
.BYTE
.BYTE
DS2
.BYTE
E2
F!S2
• BYTE
1382
.BYTE
.BYTE
A82
I"IUZNOR=
C'-..
-..:.,
• BYTE
[I ....,
.BYTE
..:;.BYTE
E2
• BYTE
F2
• BYTE
132
• BYTE
A2
• BYTE
B2
; TONE GENERATION TABLE .- ORDERED BY ASCI I CHARA

.

CTER

OOFF
OOFE
0089'-008A'"
0094---

FF
0000

. 0000

CLICK
-OFFH .
NLl.MBA
==
OFE.H
NOTES =.= • BYTE
CI,.. 1CI< , ; CR
; IRRELEVANT STUFF TO EAT TABLE SPACE
WORD O. O. 0,0. 0
MUZMAX=

TDL ZSO CP/M DISK ASSEMBLER VERSION 2.21
MUSIC

0094'"
0095'0096.'0097'009::':::'"
0099'"
009A'"

59
4F
4·6
42
3B
:34
2E

009B'"
009C-'
009D'009E'"
009F'"
OOAO'"
OOAl .00A2'-'
00A:3'"
00A4-'
OOA5'"
00A6-'
OOA7'"
OOAS'"
OOA9'"
OOAA-'
OOAB'"
OOAC'OOAD'OOAE"
OOAF'"
OOBO'OOBl . '
00B2'"
00B:3'"
00B4"
00B5'"
00B6-'
00B7'OOB:;::'"
00B9'"
OOBA'"
OOBB'"
OOBC'"
OOBD'"
, OOBE'"
OOBF'"
OOCO"
OOC1. ",
,00(:2'"

FF
00
El
D4

00(:3'"

,'"OOC4·<
00:(:5-> "

00(::6'"
bot:?,·
(H:>CS'"
00C9:,,,,'

"

C8

BD
B'-'
..::.
AS
9F
96
:3D

85

FF
77
FF
6A
64
FF
FE
FE
FE
FE
FE
FE
FE
2E
2C
"-Je;

...:;;,

~.

27
25

.. BYTE
CS2
• BYTE
DS2
.BYTE
F2
F~''-'
• BYTE
.=-".BYTE
GS2
• BYTE
A82
C:3
.BYTE
AND THE TABLE CONTINUES
.. BYTE
CLICK
.BYTE
0
• BYTE
AO
.BYTE
ASO
• BYTE
BO
.BYTE
C1
.. BYTE
CS:L
• BYTE
Dl
• BYTE
DSl
• BYTE
El
.BYTE
Fl
.BYTE
FS1
• BYTE
CLICK
G~=; :L
• BYTE
.BYTE
CLICK
.BYTE
AS1
.. BYTE
B1
.BYTE
CLICK
.BYTE
NUMBA
• BYTE
NUMBA
• BYTE
NUMBA
• BYTE
NUMBA
• BYTE
NUMBA
• BYTE
NUMBA
• BYTE
NUI'1BA
• BYTE
C3
C:~33
• BYTE
• BYTE '[1:3
[1!:32:
.BYTE
E'='
• BYTE
F":'
• BYTE
..
F~:::::
• BYTE
.BYTE
G3
13~=;2:
• BYTE
A'-'-':;'
• BYTE
A'-'-~
..":t.::"
• BYTE
B:3
• BYTE
• BYTE
C4
[:84
• BYTE
• BYTE
D4
• BYTE ,,[lS4
• BYTE
E4
• BYTE
F4
'~ BYTE,
FS4
". BYTE' 134
• BYTE
084• BYTE:
A4
'J

:22

.

20
1F
lD
:I.B
1A
1:;::
17
le:".J
l4
13

12
11.
10
OF
C)E
OD

PAGE

"

.."

~~~

TDL Z80CP/M DISK ASSEMBLER VERSION 2.21
MI.JSIC

OOCA'"
OOCB'"
OOCC·"
OOCD'"
OOCE'"
OOCF'"
OODO"
OODl'"
OPD2"
OOD3'"
OOD4"
OODS"
OOD6'"
OOD7"
OOD8"
OOD9"
OO[lA"
OODB'"
00(1(:'"

OODD"

OB
OA
09
0:::

07
0<:05
04
0'':'
.. "_I

02
Ol
64
5E
S~:I

54
4F
4A
4t.:.

42
~:E

(lODE"

FF

OODF"

FF

..

• BYTE
• BYTE
.BYTE
.BYTE
.BYTE
.BYTE
• BYTE
• BYTE
.BYTE
.BYTE
• BYTE
• BYTE
• BYTE
.BYTE
»BYTE
• BYTE
.BYTE
• BYTE
.. BYTE
• BYTE
.BYTE
• BYTE
.END

PAOE 4

l::5
r·····~

_''::''-'

DS5
F5
05
A5
Cc.
I)S6
06
C7
07
B1
.

r°-::t
.........

C::;;2

D2
I)S2
t~~:

F:2
FS;2
02
CLICK
CLICI<

TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21
TAPE

• PI~EL
.IDENT TAPE
.. INSERT HVG.LIB
• INSERT MACRO.LIB
• INSERT BBEQU.ASM
.RELOC
COMMAND TO ESTABLISH TAPE UNIT AS INPUT DEVICE

0000'-

0000'"

CD 0000:04

000:3'"

F7

0004'0007'OOOA'"
OOOB'-

CD 0000=04
CD 0000=05
DF
l.:;::FA

OOOD'"
OOOF'-

:3EO/.:.

0010'"
003.2-'
OOl!::i'"

01
:;:Et)2

32

OOOO:O/.:.

F7

OOl/.:.···
0019'"
003.C·001.[1'"
001.E-·
0023. "
0022"
002:3'"
0024"
0026'"
0028"
002'i'"
0029"
002C"
002E'"
002:0'"
0032'0032:'"
0034"-

CD 0000: 04·
21- 4000
E5
E5
CD 0000: O~i
El
77

00:31:..-'
003:;::'"

DB12
E/.:.02

.~.-;

.~::.

e.:!

CB7D
2E:F5

C9
:3A 0000:06
FEO/.:.
282[1
E/.:.02
C8
4A
CBOl

28FA"
. OQ3C··

PAGE 1

TINPUT:: CALL
TINPES#
RSTFIN ; GO HOME
RST
; COI'1MAND TO LIST STUFF ON CRT
TLIST:: CALL
TINPES#
TLIST:J.: CAL.L
CHKIO# ; GET CHARACTER
RST
RSTOCH ; PRINT IT
.j/"IPR
TLIST1 ; FOREVER
1
; COMMAND TO ESTABLISH PRINTING THRU THE TAPE IN
TERFACE
TPRINT:: MVI
A,/.:.
; SET PRINT FLAG
01H
; LXI
B,SSS$ OPCODE TO
.BYTE
EFFECTSI< I P
; COMMAND TO ESTABLISH OUTPUT TO TAPE
TOUTPU:: MVI
A,2
; SET OUTPUT FLAG
!;:':;TA
TAPEST#
RST
RSTFIN
; COMMAND TO LOAD l28 BYTE BOOTSTRAP FROM TAPE
TLOAD:: CALL
TINPES#; START TAPE READING
LXI
H, NORI'1EM
PUSH
H
TLOAD1: PUSH
H
CALL
CHKIO#
POP
H
MOV
M,A
INX
H
BIT
7,L
.JRZ
TLOADI
ENTER VIA RETURNING
RET
TOUTCK: :
TAPEST#
LDA
CPI
/.:.
.JRZ
VDI"IFRG
TURDC1= ANI
2
WRITE TO TAPE WANTED?
RZ
C,D
TURDC2= MOV
RLCR
C
, YEP
, WRITE START BIT
TAPCHO: IN
7
INPUT FF STATE
....::.TAPEIO
,
WAIT FOR IT TO GO NONZ
ANI
ERO
.JRZ
TAPCHO
MEANING !:;;TART BIT WRIT
TEN
<.'
B,10
MVr
B ::;: # OF.BITS TO WRITE

.
.

.

; WAIT ABOUT 1.:3 MILLISECONDS TO MOVE BEYOND CHA
NGE WINDOW

TDLZ80 CP/M DISK ASSEMBLER VERSION 2.21
TAPE

0040"
0041:'

:3ECO
3D
20FD

004:3"
0044"

C::::

OQ:;:E'"

05

0045'"
0047"
0048:'
004A'"
004B'"
004D"
004F"
0050'"
0051 "
005::::'"
0055'"

DB12
5F
DB12
AB
E602

0057'"

CBC9

:;::E:F9

7B
A':;'

E602
2802
DB12

PAGE 2

TAPCH1 :: MVI
A,192
TAPCH2: DCR
A
.JRNZ
TAPCH2
ARE WE DONE WRITING?
DCF<
B
RZ
(POSITION I"".;:. BIT 1 )
IN
TAPEIO
E,A
MOV
TAPCH3= IN
TAPEIO
XRA
E
ANI
2
TAPCH::::
..JRZ
MOV
A.E
r'-'
XRA
ANI
2
,JRZ
TAPCH4
TAPEIO
IN
GLE
1, C
TAPCH4= SET

KEEP READING INPUT
UNTIL IT TOGGLES

E :::: WHAT WE GOT NOW
, C :::: WHAT WE WANT
DID WE :'GET IT?'"
,JUMP IF SO
NO -- READ AGAIN TO TOC;

·
;

SET EACH BIT WRITTEN T

0 1

(1059'"

CB09

RRCR

C

.JMPR

TAPCH1

ON
005B:'

18E1

.,

T

005D'"
(l05E"
0060:'

7A
FE6::::

0062:'

C9

3:==tll

SHIFT INTO NEXT

·• SO STOP

PO~=;ITI

BIT WILL GO OU

MODE 6 - TOKEN COMING THRU?
A.D
VDMFRG= MOV
e:.8H
CPI
TURDC2 • NO -. TWEEDLE IT TO TAP
....IRC
E
RET
.END

·

TDL ZSO CP/M DISK ASSEMBLER VERSION 2.21

PAGE 1.

SUB~:;

7(:
AA

0000'"
0001--0002--0005---

EB

0006--0007-'
OOOS--0009'OOOA-'
OOOB'-

7C
BA
CO
7D
BB
(:9

...

F--' 0006---

.PREL
.IDENT
• INSERT
CKHLDE:: MOV
XRA
..JP
XCHG
COMP: :

SUBS
BBEQU.ASM
A,H
D
COMP

MOV
CMP
RNZ
MOV
eMP
RET
SUBROUTINE TO
IN A IS NL. OR

.
..

,?"

,
..

A,H
D
A.L
E

RETURN ZERO STATUS IF CHARACTER

,/'

.. ...

OOOC---

ATNL:: CPI

OOClE'OOOF'"
0011 - 001.2'0015"
0017'"
001:::--001'::'---

RZ
CPI
CR
RET
IGNBLI<:: CALL
LDE#
.,.. ..'
CPI
RNZ
INX
D
..JI"IPR
I GNBLK
; TSTCH AND TSTNUM
TSTCH:: XTHL
RST
RSTIGN
CMP
1"1
INX
H
.JRZ
TCI
PUSH
B
C,I'1
!"IOV
MVI
B.O
DAD
B
POP
B
DCX
D
TCl.:
INX
D
INX
H
XTHL
RET •.
H,O
HnNUI"I:: LX I
B,H
MOV
RST
RSTIGN
---0'TN1:
CPI
RC
.:3AH
CPr
RNC
. A, (lFOH
MVl
'tf
' '
AI':/A
.)NZ
Qt-IC)W#

FEOD
C9
CD 0000:04
FE20
CO
13

lSF7

00IB-'
00:1.(:--00ID-'
00IE"
00:1. F-'
0021-0022---

E7
BE
:23

2807
C5
4E

0600

002~::---

0025-'
0026'-

00:;'

Cl
1B
1:3

0027-'

002::;:--0029---

002A---

E3

C9

002B-'
002C--002F'"
0030'00::::1. ...
00:3:3'0.03.4---

21. 0000
44

E7
FE:30
D8
FE:3A

003~,---

DO

0037-' .
0039-'
Q~)~:A ,; ..•. ,
<:H)3D ,-

A4,'
C2 O(i(lO: O~i

OOGE-'

:3t:::FI:>
04

INR

. C5

PUSH

.'~

,B

B

•

CHECK FOR CONTINUATION
AND FOR CR

TDL Z80 CP/M DISK ASSEMBLER VERSION 2.21
SUBS

003F'
0040'
0041'
0042'
0043'
0044'
0045'
0048'
0049'
004B'
004C'
004D'
004F'
0050'
0051'
0052'
0055'
0058'

44
4D
29

29
09
29

CD 0000:04
I?
~

E60F
Q~

o~

6F
3EOO
8C
67

Cl
CD 0000:04
F2 0031'
c~
0000:05
.~

MOV
MOV
DAD
DAD
DAD
DAD
CALL
INX
ANI
ADD
MOV
MVI
ADC
MOV
~P

CALL
JP
JMP
.END

PAGE 2

B.H
.C.L
H
H
B
H
LDE#
D
OOFH
L
L.A
A,O
H

H.A
B
LDE#
TNI
QHOW#

TDL ZSO CP/M DISK ASSEMBLER VERSION
PRT!3UB -

2.~1

PAGE 1

.PREL
.IDENT PRT!:::UBS
.INSERT BBEG!U~ ASM
PRTSTG. QTSTG. PRTNUM, PRTLN
7
PRTSTG: : SUB
A
B,A
PSi:
MOV
LDE#
PS·2=
CALL
INX
D
CMP
B
RZ
RST
RSTOCH
C:R
CPI
.JRNZ
PS2
RET
QTSTG= : TSTC
'-"'-. GH:3[
+
• BYTE
+
I;fr:;::-. -:I.
• BYTE

.

0000'0001 "
0002'0005'"
OOOC.'·
0007'"
OOOS'"
0009"
OOOB"
0000'"
OOOE'"
OOOF'"
0010'"

~17

47
CD 0000:04
1:;:

BS
CS
OF
FEOO
20F5
C9
CF
:22

OE

.0"

RST

1

RST

1

n.l'

+J

0011'"
001.3'"
0016"
001.::::"
0019'"
00 1c: . ,
(1010"
0011::'"
001F'"
0020'"
0021"-

CD 0(1(11. ..'
FEOD
E1
CA 0000:05
23

G!Tl :
G!T2:

..411."

POP

.jz

INX

H
H

INX
PCHL
TSTCC
• BYTE

23
E9

CF
27
04

A,
PSl
CR
H
RUNNXL#

IYIVI
CALL
CPI

::::E22

i~T:::~~

+
+

027H,GH5[
027H
G!TS .... - l

• BYTE

+J

0022'"
0024"
0026'"
0027"
0028"
0029"
002A'002[1'"
002E"
002F"
00:;::1'"
00:31'"
0033"
0036'"

:3E27

MVI

C9
7B
BE:

G!T1

RET

cn5~

PRTCH:3:

~

A~E

MOV

CMP
Rl
CALL

C8

CO 0000:04
DF

BST

1"'';'
.....
l.E:F6

INX
..JMPR

0600
CD 0000:06
F2 003C"
00:3~1"
0620
003B'"
OD
003C"
05
0030'"
l.1 OOOA
0040'"
. 05
OD
0041'004~'- . C5
··(lO.4·~.(
CO· 0000::07
"~., ,,<~
:
0046 . .
78
·0047·'
Bl
0048"
CA 0052'"

~h027H

,JMPR

1:3ED

PRTNUi'1
FtN3=

PN4=

PN5=

B

LDE#
RSTOCH
0
PRTCHS

--a
__ a

MVI
CALL
.JP
MVI
OCR
PUSH
LXI
PUSH
OCR
Pt.I$H
CAp...
.MOV
ORA
.JZ

B.O
CH!{SGN#
PN4
B•.,-,.,
C
D

071.0
0
C
B

04D'004E--004F-'
0050 ,005:2--005::;::-'
0(154'0055-'
0(156--0059-'
005B'"
005e--005E'005F--'
0060--006::::'0064--0065-'
0067'"
006E:--0069'006B'006C--(106E--0071"0072-'
007::::'0076--0077'"
0078--007A"
0070"
(107F'"
(1080"

E:3

:2[1
E5
60
69
1E:F1

(:1
OD
79
B7
FA OOSE--:3E:20
DF
t8F5
78
B7
C4 0000:08
5[1
7B
FEOA
D1
.'_1
c·='

C630
rtF
1::lF6
CD 00(1):04
6F
to?
--'
CD 000(1:04

PN6=
PN7:

PN8=

PN9:

XTHL.
DCR
PUSH
MOV
MOV
..JMPR
POP
DCR
1'10V
ORA
..JM
MVI
RST
.JMPR
MOV
ORA
CNZ
MOV
MOV

cpr

POP
RZ
ADI
RST
,JMPR
PRTL.N: : CALL
1'10V

INX

67

CALL
MOV

13
OE04
CD 00:3t "
3E20
DF
(:9

MVI
CALL.
MVI
'RST
RET

INX

.END

PAGE :2

L
H
H,B
L.,C
PN5
B
C
A,C
A
PN:3
A,'" --RSTOCH
PN7
A,B
A
OUTCH#"
E,L
A,E
to
0
"0"-

R!:HOCH
PI\19
LDE#
L?A
D
LDE#
H.A
D
C.4
PRTNUM

A, -- .-

RSTOCH

.. "TDL 4.80 CP/M DISK ASSEMBLER VERSION 2.21
ERROR

0000·'
0005'"
0006·'
OOOA·'
OOOB'"
001.0···
0011···
0012·'
001.5···
(1018···
001B···
001E···
0OlF···
0020···
0023···
0024···
0025'·
002:3···
0029···
002A'·
002B'"
002E·'
002F'·
00:32·003:3'"
0034···
OO~';:7'"

003A···
003B·'
003C'"
003F'·
0041'·
0042'·
0045'·
0048···
0049'·
004C·'
004E···
004F···
0052···

574841.543F
OD
484F57:::::F
OD
5:34F525259
OD
05
1:1. 0000·'
CD 0000:04
CD 0000:05
2A 0000: 0(:.
E5
EB
CD 0000:07
67
12:
CD 0000:07
B4
EB
01
CA 0000: 0:::
EB
CD 0000:07
EB
B7
FA 0000: 0'7
CD OOOO:OA
Cl
41
CD OOOO:OB
3E~:F

DF
CD 0000:05
C:3 0000: 0:3
D5

:I.l. OOOB···
18C7
D5
11 0006···
(::3 0015'·

.PREL
• IDEI~T
• INSERT
• INSERT
WHAT:
.ASCII
.BYTE
HOW:
.ASCII
.. BYTE
SORRY:
• ASCI I
• BYTE
I~WHAT: : PUSH
AWHAT: : LXI
ERROR:
CALL
CALL
LHLD
PUSH
XCHG
CALL
MOV
INX
CALL.
ORA
XCHG
POP
JZ
XCHG
CALL
XCHG
ORA
JI'1
CALL
POP
MOV
CALL
MVI
R:3T
CALL
•..;IMP
I~SORRY: :
ASOR~Y: :
JMPR
G!HOW: :
PUSH
AHOW= :
LXI
.JMP
.END

ERROl::::
I"IACRO. LIB
BBEG!U. ASM
"'WHAT?···
CR
·'HOW?'"
CR
'·SORRY'·
CR
0
0, WHAT
CRLF#
PRTSTG#
CURF
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:28 09:58:29-08:00
Modify Date                     : 2018:08:28 10:02:54-07:00
Metadata Date                   : 2018:08:28 10:02:54-07:00
Producer                        : Adobe Acrobat 9.0 Paper Capture Plug-in
Format                          : application/pdf
Document ID                     : uuid:c9e9744b-e197-6442-9cea-d49446408bba
Instance ID                     : uuid:9702928c-7a68-6847-b3d2-cf7a0719a590
Page Layout                     : SinglePage
Page Mode                       : UseOutlines
Page Count                      : 66
EXIF Metadata provided by
EXIF.tools

Navigation menu