96
MICROFRIEND DYNA – 85 User’s Manual Kailas Vaibhav , G– Wing , 3 rd Floor, Park Site, Vikhroli ( West ) , Mumbai 400 079 . INDIA Tel . : 91 - 22 - 5181900 (16 Lines) Fax . : 91 - 22 - 5181930 / 5181940 [email protected] www.dynalogindia.com

Microprocessor 8085

Embed Size (px)

Citation preview

Page 1: Microprocessor 8085

MICROFRIEND DYNA – 85

User’s Manual

Kailas Vaibhav , G– Wing , 3rd Floor, Park Site, Vikhroli ( West ) , Mumbai – 400 079 . INDIA

Tel . : 91 - 22 - 5181900 (16 Lines) Fax . : 91 - 22 - 5181930 / 5181940

s a l e s @ d y n a l o g i n d i a . c o m w w w . d y n a l o g i n d i a . c o m

Page 2: Microprocessor 8085

TABLE OF CONTENTS PAGE NO. INTRODUCTION

INTRODUCTON TO MICROFRIEND DYNA-85 1 CHAPTER 1

CONFIGURATION OF MICROFRIEND DYNA-85 1.1 1.1 SYSTEM OVERVIEW……………………………………… 1-1

1.1.1 SYSTEM HARDWARE CONFIGURATION……. 1-1

CENTRAL PROCESSING UNIT………………… 1-1

MEMORY…………………………………………. 1-1

HEX KEYPAD/DISPLAY INTERFACE…………. 1-2

8279 DATA FORMAT……………………………. 1-2

PARALLEL I/O/ INTERFACE…………………… 1-3

SERIAL I/O AND AUDIO CASSETE INTERFACE.1-3

TIMER………………………………………………. 1-3

EXPANSION SLOT………………………………… 1-4

1.1.2 SYSTEM COMMANDS OVERVIEW…………….. 1-4

1.1.3 SYSTEM FIRMWARE OVERVIEW……………… 1-5

1.1.4 APPLICATON OF MICROFRIEND DYNA-85…… 1-6 CHAPTER 2

SYSTEM MEMORY & INPUT / OUTPUT 2-1 MAPPING 2.1 MEMORY MAPPING……………………………… 2-1

2.2 INPUT / OUTPUT MAPPING……………………… 2-2

2.3 POWER SUPPLY …………………………………… 2-3 i

Page 3: Microprocessor 8085

PAGE NO. CHAPTER 3

OPERATING INSTRUCTION-KEYBOARD…………. 3-1

3.1 KEYBOARD OPERATION…………………………………. 3-1

3.2 SET , INR , DCR KEYS…………………………………….. 3-2

3.3 REG………………………………………………………….. 3-3

3.4 GO / EXEC………………………………………………….. 3-6

3.5 STEP………………………………………………………… 3-7

3.6 VI : VECTOR INTERRUPT……………………………….. 3-10

3.7 RES : RESET………………………………………………. 3-10

3.8 CODE………………………………………………………. 3-10

3.9 USER KEYS U1 , U2 , U3 , U4……………………………. 3-11

3.10 SAVE……………………………………………………….. 3-12

3.11 LOAD………………………………………………………. 3-12 CHAPTER 4

CODES………………………………………………….. 4-1

4.1 CODE 00 : MOVE BLOCK…………………………………. 4-1

4.2 CODE 01 : FILL BLOCK…………………………………… 4-3

4.3 CODE 02 : INSERT BLOCK………………………………. 4-3

4.4 CODE 03 : DELETE BLOCK………………………………. 4-3

4.5 CODE 04 : SEARCH BLOCK……………………………… 4-5

4.6 CODE 04 : HEX TO DECIMAL……………………………. 4-6

4.7 CODE 06 : DECIMAL TO HEX……………………………. 4-7

4.8 CODE 0E : COMPLEMENT BLOCK………………………. 4-7

4.9 CODE OF : ROLLING DISPLAY…………………………… 4-8 ii

PAGE NO. CHAPTER 5

MACHINE LANGUAGE PROGRAMMING…………. 5-1

5.1 MONITOR SUBROUTINES………………………………… 5-1

1. MODIAD…………………………………………… 5-3

2. MODIDT…………………………………………… 5-4

3. RDKBD …………………………………………….. 5-4

4. DELAY…………………………………………….. 5-4

5. CLEAR ……………………………………………. 5-5

6. GTHEX……………………………………………….5-5

7. OUTPUT…………………………………………….. 5-5

5.2 SERIAL ROUTINES…………………………………………..5-7

1. CIN………………………………………………….. 5-8

2. COUT………………………………………………. 5-8

3. CROUT……………………………………………… 5-8

4. NMOUT…………………………………………….. 5-8

5. GETHX …………………………………………….. 5-8

5.3 PROGRAMMING EXAMPLES…………………………….. 5-9

EXAMPLE 1 : FAMILIARIZATION……………………….. 5-9

EXAMPLE 2 : RDKBD……………………………………… 5-11

EXAMPLE 3 : MODIDT……………………………………... 5-12

EXAMPLE 4 : RDKBD + MODIDT………………………… 5-12

EXAMPLE 5 : HEX ADDITION…………………………….. 5-12

EXAMPLE 6 : 4 DIGIT HEX COUNTER…………………… 5-13

EXAMPLE 7 : 2 DIGIT DECIMAL COUNTER…………….. 5-14

EXAMPLE 8 : FLASHING DISPLAY………………………. 5-15

EXAMPLE 9 : ROLLING DISPLAY………………………… 5-16

TABLE 5.1 SCRATCH PAD LOCATION……………….. 5-2

TABLE 5.2 CHARACTER CODES………………………. 5-6 iii

Page 4: Microprocessor 8085

PAGE NO. CHAPTER 6 SERIAL I/O OPERATION 6-1 6.1 USE OF MONITOR 6-2

6.2 COMMAND STRUCTURE 6-2

6.2.1 D – DISPLAY MEMORY COMMAND 6-3

6.2.2 G – PROGRAM EXECUTE COMMAND 6-3

6.2.3 I – INSERT INSTRUCTIONS INTO RAM-1 6-3

6.2.4 M – MOVE MEMORY COMMAND 6-4

6.2.5 S – SUBSTITUTE MEMORY 6-4

6.2.6 X – EXAMINE / MODIFY CPU 6-5

REGISTER COMMAND

6.3 PROGRAM DEBUGGING 6-7

6.4 ERROR CONDITIONS 6-8

6.5 ADDRESS VALUE ERRORS 6-8

6.6 COMMAND EXAMPLES 6-9

6.7 AUDIO CASSETTE INTERFACE 6-9

TABLE 6.1 BAUD RATE SELECTION 6-11 CHAPTER 7 FOR THE MICROFRIEND ILC USER 7-1

iv

PAGE NO. APPENDIX A CONNECTOR AND STRAPPING DETAILS A-1

CONNECTOR J1 : DYNA BUS INTERFACE A-1

CONNECTOR J2 : 8155 CONNECTOR A-2

CONNECTOR J3 : 8255 CONNECTOR A-3

CONNECTOR J4 : 8279 CONNECTOR A-4

CONNECTOR J5 : POWER SUPPLY CONNECTOR A-4

CONNECTOR J6 : SERIAL CONNECTOR A-4

CONNECTOR J7 : 8253 CONNECTOR A-4

STRAPPING DETAILS A-5 B ADD-ON CARDS FOR MICROFRIEND B-1 DYNA-85 SYSTEM C CIRCUIT DIAGRAM C-1 D MICROFRIEND DYNA-85 MONITOR LISTING D-1 E PROCEDURE FOR UPLOADING AND E-1

DOWNLOADING

v

Page 5: Microprocessor 8085

INTRODUCTION

INTRODUCTION TO MICROFRIEND DYNA-85

What will I get DYNA-85 ! Microfriend DYNA-85 is an introduction to a low cost trainer and

development kit. It was developed to assist the novice to get familiar

with INTEL 8085 microprocessor in a user friendly environments. This user’s manual tells you about –

Hardware of DYNA-85.

Monitor commands to interact with DYNA-85.

Memory & I/O details of Dyna-85.

Working with hex keypad and display.

Serial I/O and Audio cassette interface.

Circuit diagram and connector details. Before you begin :

1) Study this manual carefully.

2) Write your own programs after studying the chapter on

Machine Language programming and try them out.

3) Do not hesitate to experiment using the I/O lines for real

world interfacing.

1

Page 6: Microprocessor 8085

1-1

CHAPTER 1 CONFIGURATION OF MICROFRIEND DYNA-85 MICROFRIEND DYNA-85 is a single board computer based on 8085A

CPU designed specially for training and development applications.

It is equally useful for a novice as well as development engineers for

studying the 8085A CPU and developing various product based on the

8085A. 1.1.1 SYSTEM HARDWARE OVERVIEW

CENTRAL PROCESSING UNIT MICROFRIEND DYNA - 85 I s based on the INTEL 8085A high

performance CPU operating at 3 MHz. MEMORY

Powerful system monitor has been provided on a 2732 EPROM

covering 4K bytes.This monitor includes all standard commands,

codes , functions and utility subroutines. A 6116 battery back up RAM ( 2K ) is provided on the board for

inputting and executing programs. Three 28 pin sockets are provided for memory chips so that further

expansion of RAM/EPROM is possible upto a maximum of 56K .

1.1 SYSTEM OVERVIEW

Page 7: Microprocessor 8085

1-2 HEX KEYPAD / DISPLAY INTERFACE

A Keypad with 21 keys and 6 digits LED seven segments display is

provided for interaction with the system using 8279 keyboard /

display controller. This chip provides the following features. Simultanous Keyboard & Display operation.

Scanned Keyboard Model sensor Mode.

2 Key locked / N Key roll over. Contact Debounce.

16 Displays

Programmable scan timing. The hex keypad has the standard hexadecimal keys and many other

function and Code keys. 4 “User Definable” function keys are also

provided which can be defined by the user . All scan, return, shift and

control lines of 8279 are brought on to connected J4.

8279 DATA FORMAT : The data format for the character being displayed by the 8279 is one bit

corresponding to each segment of the seven segment display plus one

bit for the decimal point. The display bits are store in the 8279 in the

form of one byte digit of the display from RAM location 0 to 5 . The byte format is as follows : A3 A2 A1 A0 B3 B2 B1 B0 c d b a e g f dp

1-3 a f b g e c d Writing a 1 in the desired bit lights that particular segment.

PARALLEL I/O INTERFACE

46 parallel I/O lines are provided on board , 22 from 8155 and 24 from

8255 . These lines are brought on to connector J2 ( for 8155 ) and

(for 8255).

SERIAL I/O AUDIO CASSETTE INTERFACE

Serial I/O is available through RS232C compatible port. The SID & SOD

lines are used under software control for serial operation . Baud rate is

adjustable. Onboard Audio Cassette I / F is provided with file management , for

storage and retrieval of data using a cassette recorder.

TIMER

Three channels of 8253 chip , a 16 bit TIMER / COUNTER and one

channel of 14 bit TIMER /COUNTER of 8155 are provided on board. All

lines of 8253 are provided on connector J7 and 8155 are provided on J2.

Page 8: Microprocessor 8085

1-4

EXPANSION SLOT

All Address, Data, Control and Hardware Interrupt lines are brought on

to a 50 pin FRC connector for system interfacing and expansion. These

lines are unbuffered so user has to take care while expanding their

system.

1.1.2 SYSTEM COMMANDS OVERVIEW

The HEX KEYPAD mode supports the following commands :

RESET : Provides hardware reset . Display shows “FrlEND” on

pressing this key.

VI : Vector interrupt key.Activate RST 7.5 vectored interrupt.

SET : Allows the user to examine & modify the contents of

RAM and only examination of contents is possible in

case of EPROM.

INR : Increments memory address presently displayed un the

address field of display.

DCR : Decrements memory address presently displayed in the

address field od display.

REG : Allows the user to examine contents of CPU registers &

modify them if necessary.

GO : Allows the user to load the program counter by the

desired memory address which is the starting address of

the program to be executed.

EXEC : Used to start the execution of GO or CODE command.

CODE : Used for selecting one of the coded subroutines in the

monitor.

1-5

STEP : Allows the user to execute the program on single step

mode or break point mode.

SAVE : Used for saving the contents of memory onto an audio

cassette.

LOAD : Used for loading the program from audio cassette back

to the memory in RAM area.

U1..U4 : These keys are user definable functin keys. The function

of these keys can be defined by the user , by loading the

appropriate memory locations with vectors pointing to

user subroutines.

1.1.3 SYSTEM FIRMWARE OVERVIEW

The MICROFRIEND DYNA-85 has very powerful and user friendly FIRMWARE in the EPROM.

Complete listing of the Monitor FIRMWARE is given at the end of User can borrow any subroutine from the listing for his own program development.

Various commands available through the keyboard and the coded

subroutines are accessible through the CODE key and is already been

listed in chapter.

A point worth mentioning here about the FIRMWARE is the options of

entry point to the Monitor.

There are two options available , one is the COLD START , other is WARM START . In COLD START entry the system is completely

reinitialized and no user program status is saved from the previous

program executed. This is equivalent to the hardware reset.

Page 9: Microprocessor 8085

1-6 COLD START entry can be performed through software by using the

RST 0 instruction.

In WARM START entry, the start of previously executed user program is

fully saved before entering the monitor. WARM START entry is possible

through software by using th RST 1 instruction.

In both cases, the sign on display is ‘FrlEND’ as in case of hardware

reset through RESET Key. CODE COMMANDS :

CODE 00 : Move a block of memory.

CODE 01 : Fill a block with a data byte.

CODE 02 : Insert a byte in a block.

CODE 03 : Delete a byte from a block.

CODE 04 : Search a given block for a given pattern.

CODE 05 : Hex to Decimal conversion.

CODE 06 : Decimal to Hex conversion.

CODE 0E : Complement a block.

CODE 0F : Rolling Display. 1.1.3 APPLICATION OF MICROFRIEND DYNA-85 MICROFRIEND DYNA-85 is the low cost learning and development

system for beginners as well as development engineers

The powerful friendly FIRMWARE allows you to learn all application of

8085A and its support chips like 8255 PPI. 8155 PPI and Timer . 8279

prgrammable keyboard and display controller,8253 Programmable timer

and counter etc.You can load,debug and finialize your program on the

MICROFRIEND DYNA-85 and nce the development is finilize it can

also be used as an OEM board.

1-7 The areas of application on MICROFRIEND DYNA-85 are as follows :-

1. Analog to Digital Converter Interface.

2. Digital to Analog Converter interface.

3. Interfacing Hexadecimal Keyboad.

4. Simulation of an Elevator.

5. Temparature Controller Interface.

6. Stepper motor Controller.

7. Traffic Light Control System.

8. DC Motor Controller.

9. Thumbwheel Interface. And many more experiment and application can be thought and

successfully developed on MICROFRIEND DYNA-85 system.

Page 10: Microprocessor 8085

2-1

CHAPTER 2 SYSTEM MEMORY & INPUT / OUTPUT MAPPING

The system memory is also as important as the CPU itself , because this is where the system program resides and the CPU takes its instruction from the program. The memory is of two types ROM and RAM i.e. READ ONLY MEMORY & RANDOM ACCESS MEMORY. The MICROFRIEND DYNA-85 has a flexible memory map , and for your convenience for program development, the RAM has useful feature such as battery back-up. FFFF C000 BFFF 4000 3FFF 0000

2.1 MEMORY MAPPING

USER RAM

IC 6116

EXPANSION EPROM/RAM

MONITOR EPROM

Page 11: Microprocessor 8085

2-2

0000H TO 3FFFH :

Monitor EPROM socket.Monitor 2732 is located at 000H to 0FFFH and is mapped at 1000H-1FFFH,2000H-2FFFH and 3000-3FFFh also. It 2764 / 27128 are used , 1000H - 3FFFH can be used for further expansion. 4000H to BFFFH : This Socket is used for user expansion of EPROM and RAM. EPROMs like 2716 / 2732 / 2732 / 2764 / 27128 / 27256 or RAMs like 6116 / 6264 / 62256 can be installed by suitable strappings. C000H to FFFFH : User RAM socket.The 2K user RAM IC 6116 is located at F800H- FFFFH.This 2K memory is folded after every 2K bytes from C000H to FFFFH.In this socket 6264 can also be used.

2-3

Recommanded Power Supply for DYNA-85 kit

DMS SMPS – 01

Having following specification :

2.2 INPUT/ OUTPUT MAPPING

IC ADDRESS MODE I/O FUNCTION 8279 04 READ READ KEYBOARD FIFO

WRITE WRITE DATA TO DISPLAY 05 READ READ STATUS WORD

WRITE WRITE COMMAND WORD 8155 08 WRITE COMMAND/STATUS REGISTER 09 R/W PORT A 0A R/W PORT B 0B R/W PORT C 0C R/W TIMER LOW BYTE 0D R/W TIMER HIGH BYTE

IC ADDRESS MODE I/O FUNCTION 8255 10 R/W PORT A 11 R/W PORT B 12 R/W PORT C 13 WRITE CONTROL REGISTER 8253 18 R/W COUNTER 0 19 R/W COUNTER 1 1A R/W COUNTER 2 1B WRITE CNTROL REGISTER

2.3 POWER SUPPLY

Voltage Current Rating + 5 V 1A + 12 V 500 mA - 12 V 250 mA + 30 V 100 mA

Page 12: Microprocessor 8085

2-4 KEYPAD LAYOUT :

3-1 CHAPTER 3 OPERATING INSTRUCTION- KEYBOARD MICROFRIEND DYNA-85 has a built in keyboard ( KEYPAD).The layout of the keypad is given on the opposite page for ready reference. The system can also be operated through a console connected to the serial interface.

While using the built in keyboard , we can work only in the Hexadecimal number system . There are 16 keys for entering Hex numbers from 0 to F. These are all dual meaning keys and the key designated depends on when the key I s pressed. In addition to these 16 keys there is one vector Interrupt key, one RESET key and 3 function keys.

When the system is switched on the display shows , sign – on message

’F r l E n d’. This indicates that the system is reset and the monitor expects a command from you. At this moment any one of the command keys : SET , CODE , STEP, REG, GO, LOAD or SAVE can be pressed depending on the desired operation.

In case any non command key is pressed, the display will show ‘FErr’ message, you can again press a valid command key or press RESET and then press a valid command key.

The various command and function keys are explained below :

RESET

VI F U4

E U3

D U2

C U1

DCR

EXEC

INR

4 SPH

8 GO/H

9 L

0 SET

A LOAD

1 CODE

5 SPL

B SAVE

2 STEP

6 PCH

3 REG/I

7 PCL

3.1 KEYBOARD OPERATION

Page 13: Microprocessor 8085

3-2

You can use the SET key to set the address of the memory location to be accessed. On pressing SET key the display becomes blank and a dot appears in the Address field which is made up of the first four digit of the six digit display . The remaining two digit of the six digit display are the data field .The dot in the address field indicates that your next key will be treated as an address entry (entry is from Right to Left and last 4 entries are retained). When you have entered the 4 digit hexadecimal address press the INR key which will terminate the address entry and display the c ontents of that memory location as the two digits in the data field. Now you can modify or retain the contents of the location. Pressing INR key again will load the data field into the memory location at the address shown in the address field . This key also increments the address by 1 location and dispalys the contents of that new locaton with required data. DCR key also works in a similar way but it decrements the address by 1 and points to the previous location. Trying to load data into a Monitor EPROM location using SET key results in ‘FErr’(error). SET, INR, DCR, keys can also be used to verify the data loaded in RAM by displaying one location after another.

3-3

EXAMPLE 1 :

Pressing EXEC key terminate the loading of memory and the monitor waits for next command.

This key allows you to examine and optionally modify the contents of all 8085 internal registers.

Pressing REG key will blank the display and a dot appears in the Field.

Next press a valid register name. The Register names appears on various

hexadecimal number keys as follows :-

3 : I ( Interrupt Mask )

4 : SPH ( Stack Pointer High )

5 : SPL ( Stack Pointer Low )

3.2 SET,INR,DCR KEYS

Key Pressed Address Field Data Field RES F r I E n d SET F 0 0 0 F 0 0 0 F 0 0 0 F 0 0 0 F 0 0 0 INR F 0 0 0 X X 3 F 0 0 0 0 3 E F 0 0 0 3 E INR F 0 0 1 X X DCR F 0 0 0 3 E EXEC F

3.3 REG

Page 14: Microprocessor 8085

3-4 6 : PCH ( Program Counter High 7 : PCL ( Program Counter Low )

8 : H ( H Register )

9 : L ( L Register )

A : A ( A Register )

B : B ( B Register )

C : C ( C Register )

D : D ( D Register )

E : E ( E Register )

F : F ( Flag register )

Pressing any one of these keys after pressing REG key will display the

particular register name in the address field and the contents of that

register will be displayed in the data field.

Pressing INR key after this , will point to the next register and DCR will

point to the previous register.

Contents of the register can be modified at this point similar to loading

any other memory location.

Pressing INR and DCR keys after modifying the contents of that register

and ENTER terminates the command. Address field shows F in the left

most digit , the monitor indicates as usual that the it is waiting for the

next command.

Format for the I register (Interrupt mask) is as follows : I Interrupt enable Flag [ 1 is enabled, 0 is disabled ] M Interrupt Mask [1 is masked , 0 is unmasked ]

3-5 Format of the F register ( Flag Register ) is as follows : X : Don’t care.

C : Carry

P : Parity

X : Don’t Care

AC : Auxillary Carry

Z : Zero

S : Sign EXAMPLE 2 : NOTE : ONLY LAST TWO ENTRIES ARE RETAINED.

I M M M 0 0 0 A E 7.5 6.5 5.5

S Z X AC X P X C

Key Pressed Address Field Data Field REG . A A X X 0 A 0 0 5 A 0 5 0 0 5 0 INR B X X DCR A 5 0 EXEC F

Page 15: Microprocessor 8085

3-6

This pairs of keys is used to execute a program from a desired location

onwards. If the GO key is pressed, It displays the present address in the

program counter and the contents of the memory location at address. A

dot appears in the address field indicating that you can enter a new

address in the address field. You can now modify the contents of the

program counter . After loading the desired starting address in the

address field , press EXEC key to execute the program starting at the

address .During execution of the program , the address field shows ‘E’

indicating that the user program or subroutine is being executed.

The Monitor Regains control either after pressing the RESET key

( Hardware Reset ) or after executing RST 0, RST 1, JMP 0000H or JMP

0008H instruction (Software Reset).

EXAMPLE 3 : NOTE : P P P P IS THE PRESENT CONTENTS OF PROGRAM COUNTER WHEN GO KEY WAS PRESSED. XX IS THE DATA IN MEMORY LOCATION P P P P.

3-7

We have seen how a program can be executed by using GO and EXEC pair of keys.This method is useful only when the program is finalized, or when we have a ready program.

In case a program is being developed , it is essential that we have a ready program and it I s essential that we have a facility to check the execution of program stage by stage and see the results.

This can be achieved in two ways . One way is to insert the RST 1

instruction ( CFH ) at every point where a break is desired to check status or result , which is possible only in case of short programs being run from the RAM.

Another way is to use the STEP key and step through the program.

Pressing the STEP key displays the contents of the program

counter , Which can be modified to set the starting address of the

program.

Now press INR and the monitor will prompt for other parameters : br : Break Address

Cn : N +1 , where N is the number of times the break should

occur. In case ‘br’ and ‘Cn’ both are given a value of zero,the system goes into

single stepping mode. In single stepping mode, the program os executed

single instruction at a time . Execution stops after every instruction and a

status check is possible.

EXAMPLE 4 :

Let us take a simple program to see how the STEP command works.Load

the following program starting at location F000H.

3.4 GO/EXEC

Key Pressed Address Field Data Field GO P P P P X X F 0 0 0 F 0 0 0 F 0 0 0 F 0 0 0 F 0 0 0 EXEC F

3.5 STEP

Page 16: Microprocessor 8085

3-8

Address Data Mnemonic

F000 3E 05 MVI A, 05h F002 3D DCR A F003 C202F0 JNZ F002h F006 76 HALT

This program first loads register A ( Accumulator ) with 05 , then

decrements the accumulator contents by 1 till the contents become zero

and halts at that point.

The JNZ loop will make use of ‘br’ and ‘Cn’. First let us execute the

program with STEP key and using ‘br’ and ‘Cn’ parameters.

As the program stopped after the breakpoint occurs 3 times, the original contents of register A which were 05 have been decremented three times. The register A should now contain 02, which is displayed in the data field.

The same program can be executed in a single stepping mode.

3-9

After counting this sequence till the contents of A become 00, the program comes out from the JNZ loop and the address field shows the last address of the program , i.e. F006H. Contents of this location are displayed in the data field as 76 (HALT). If you press EXEC at this stage and examine the stage and examine the contents of register A using REG command , the result will be 00 as expected.

Key Address Data Comments Pressed Field Field

STEP P P P P X X PRESENT PC CONTENTS F000 F 0 0 0 STARTING ADDRESS INR . b r BREAK ADDRESS ? F002 F 0 0 2 b r BREAK AT F002 INR C n . Cn ? 04 C n 0 4 Cn 4 N + 1 INR F 0 0 2 3 D PROGRAM STOPS AFTER

BREAKPOINT OCCURRED 3EXEC F TIMES REG . EXAMINE REG.A A A 0 2

Key Address Data Comments Pressed Field Field STEP P P P P X X PRESENT PC CONTENTS F000 F 0 0 0 STARTING ADDRESS INR . b r BREAK POINT ? 0 0 0 0 0 b r IGNORE br. INR C n . Cn ? 0 0 0 0 0 0 0 IGNORE Cn. INR F 0 0 2 3 D FIRST INSTRUCTION

EXECUTED PC POINTS TO NEXT INSTR . EXEC F PROGRAM STOPS FOR REG . STATUS CHECK . A A 0 5 REG . A (Acc) CONTENS 05 EXEC F NEXT COMMAND ? STEP F 0 0 2 3 D STEP INR F 0 0 3 C 2 SECOND INSTR.

EXECUTED EXEC F PROGRAM STOP FOR STATUS CHECK REG . REGISTER A (Acc) CONTENTS 04 A A 0 4 AFTER DECREMENTING ONCE

Page 17: Microprocessor 8085

3-10

This key is used to interrupt the program execution and transfe r the

control to location 003CH in the monitor.This location has a jump to

location FFCEH in the user RAM.By inserting another jump instruction at

FFCEH , we can transfer the control to an interrupt service routine

located to another area in the memory.

For proper operation of this key, the user program must enable the

interrupt through the EI instruction and the RST 7.5 must be unmasked

using the SIM instruction.

The exmple of a decimal counter included in the chapter on

programming, will make the application of key will make it more clear.

Pressing RES key causes a hardware RESET operation.The control is

transferred to location 0000H in the monitor. The monitor program is

executed from 0000H onwards without saving the status resulting from

any user program executed before the ‘RESET’. The display shows

‘F r l E N D’ as the sign-on message and the monitor waits for a valid

command.

The code key allows you to access one of the coded subroutines in the

monitor firmware. All the user accessible coded subroutines are

explained in Chapter 4.

3-11

There are 4 user definable keys on the MICROFRIEND DYNA-85. Each of these keys has a vector in the scratchpad RAM area . By loading an appropriate jump instruction at these location, you can define the functon of keys U1, U2, U3, U4. The vector location are as follows : An example will illustrate how these keys can be used . There is a

subroutine in the monitor for a “ROLLING DISPLAY” at location 0E5BH.

Using the SET key load a jump instruction C3 5B 0E at location FF9CH,

FF9DH and FF9EH which are the U1 key vector location.Mow reset the

system and then press U1 key, the display immediately blanks for a moment and then a rolling message appears D Y n A L o G h E L P S Y o U L E A r n I n G U P By using the U1 key vector, ypu have efficiently transferred the control to

the rolling display subroutine.

3.6 VI : VECTOR INTERRUPT

3.7 RES : RESET

3.8 CODE

3.9 USER KEYS U1,U2,U3,U4

Key Memory Location U1 FF9CH, FF9DH, FF9EH U2 FF9FH, FFA0H, FFA1H U3 FFA2H, FFA3H, FFA4H U4 FFA5H, FFA6H, FFA7H

Page 18: Microprocessor 8085

3-12

This command is used for saving your program on an audio cassette. The procedure for saving is as follows : 1. Command the MIC socket (on the top) of the MICROFRIEND

DYNA – 85 to the MIC socket of the CTR.

2. Press SAVE key, enter the following parameters

SS : Source Start

SE : Source End

Fn : File Number – any hex number from 00 to FF.

3. Turn CTR ON and keep it in RECORD mode.

4. Press the EXEC key, S appears in the data field indicates that your

program is being saved on the audio cassette.

5. On completion of SAVE operation, F r l E n d appears again on the

display.

6. Turn CTR OFF.

This command loads your program from the cassette to the RAM . The procedure for loading is described below :

1. Connect the EAR Socket of MICROFRIEND DYNA-85 to the EAR or external speaker socket of the CTR. (Select volume control setting by trial)

3-13

2. Press LOAD key, enter the File Number Fn of the program to be loaded.( A hex number between 00 & FF )

3. Turn CTR ON, keep it in PLAY mode.

4. Immediately press EXED Key. L appears in the data field, indicating

that the CPU is searching for the file with file number Fn.

5. Whenever the CPU comes across any File Number , it is displayed in the data field. Loading starts only when the specified File number is found and displayed.

6. The SS parameter of your program is already saved on the cassette

tape, and when the program is being loaded back into RAM , it automatically gets loaded at the same address.

7. On completion of loading the program with File number Fn , SS

parameter is displayed in the address field. NOTE : There shouldn’t be a gap of more than 10 sec. Between turning CTR ON and pressing EXEC key.

3.10 SAVE

3.11 LOAD

Page 19: Microprocessor 8085

4-1

CHAPTER 4 CODES As we have seen in the previous chapter, the code key allows us to access the various coded subroutines from the monitor program. It is not essential to remember the starting location addresses of all these subroutines, as they have been coded to be used with the CODE key.

A “Code Referance Chart” has been included in this chapter for quick referance. Detailed explainaton of operation of all the coded are given below.For executing any code,the ‘CODE’ key is pressed. A dot appesrs in the data field,indicating that the code number should be entered and will be displayed in the data field. Now enter the code number and press INR key. The data field prompts for the data field or the address field will prompt for the next parameter to be entered.

After entering all the parameters,the code can be executed using the INR or EXEC key. Move a Block of Memory

This code moves a block of memory from one place to other . The parameters required to be entered are SS : Source Block starting address, SE : Source Block end address and dS : Destination Block start address.

A point to remember here is that dS must always be a RAM address.Trying to move a block to monitor EPROM results in an error. Please see Chapter 5 for further explanation of this point.

4.1 CODE 00

Page 20: Microprocessor 8085

4-2

Example : 1 This example program moves a block of memory between 0000H and 0005H to the RAM address F000H. This can be verified by using the SET key as follows :

4-3

Fill Block with a Data Byte

This code requires the following parameters :

SS : Starting address of the block. SE : End address of the block. Sr. : Data byte to be filled in all the location from SS to SE

Sr. can be any hex number from 00 to FF must be within the RAM area.

Insert Byte in a Block ( SE, Sr,IA )

In a given block of RAM it is sometimes necessary to insert a byte of data which is missing. A given byte in Sr is inserted at a given insert address IA. The remaining block shifts down by one position, upto the address given by SE.

No address relocation for jumps are done.

Delete a Byte at a Given Address ( SE,DA )

In a given block at a given address DA, a byte is deleted. The remaining block till SE shifts up by one position. The above two INSERT and DELETE commands are very useful in inserting or deleting a display character in the VIDEO RAM at the given cursor position.

Key Pressed Address Field Data Field CODE 0 0 0. INR . S S 0 0 0 0 0. S S INR . S E 5 0 0 0 5. S E INR . d S F000 F 0 0 0. d S EXEC F r I E n d

Key Pressed Address Field Data Field SET F 0 0 0. INR F 0 0 0 3 E INR F 0 0 1 0 0. INR F 0 0 2 d 3. INR F 0 0 3 0 5. INR F 0 0 4 0 0 INR F 0 0 5 C 3

4.2 CODE 01

4.3 CODE 02

4.4 CODE 03

Page 21: Microprocessor 8085

4-4

Ex : INSERT BYTE

Load the RAM location 1000H-1007H with the help of SET command.

1000 3E After loading we notice that the instruction to 1 00 store accumulator STA 200FFH is incorrect.The 2 D3 ‘OPCODE’ 32 is missing. It has to be inserted 3 05 before FF , 20

4 FF 5 20 6 19 7 76 8 XX

If the block is small you an manually make 1004 as 32 and reload theremaining by shifting one down. But if the block is very tedious. To Do this use INSERT byte command.IA (Insert Address ) is 1004. SE ( Block End ) is 1007 and Sr ( Insert byte ) is 32.

4-5

You can insert anything else. With the SET command verify that 3E,00,D3,05,32,FF,20,19,76 is the data from location 1000H-1008H. The block has shifted down by 1 byte.

The opposite of INSERT is DELETE and it works as follows :

With the SET command verify that 1000-1007 contents are same as before the INSERT command (i.e 1004 ; FF etc.)

Search a Given Block for Given Pattern ( SS,SE,Sr )

The given block of memory (RAM or ROM ) between SS and SE is searched for a pattern o f byte given in Sr. Whenever the first match is found, the address and bytes are displayed. Remaining mismatches can be scanned with INR.

LOAD the data in Ex.4.3 from 1000H.

Key Pressed Address Field Data Field CODE 02 0 2 EXEC S E 1007 1 0 0 7. S E INR I A 1004 1 0 0 4. I A INR Sr 32 Sr 3 2 EXEC F r i E N D.

Key Pressed Address Field Data Field CODE 03 0 3. EXEC . S E 1008 1 0 0 8. S E INR . D A 1004 1 0 0 4. D A EXEC F r i E N D.

4.5 CODE 04

Page 22: Microprocessor 8085

4-6

Ex : BLOCK SEARCH

Hex to Decimal Conversion CODE 05 is a utility code for converting any Hex number from 0000 to FFFF into a Decimal number.

The parameter to be entered is prompted in the data field as HE, and the Hex number to be converted can now the directly entered in the Address field. Pressing EXEC displays the Decimal equivalent of the Hex number entered.

4-7

Decimal to Hex Conversion

This code is useful for converting any Decimal number from 0000 to 9999 into a Hex number equivalent.

The parameter to be entered is dE, which is the decimal number we desire to convert into Hex format.

Pressing EXEC after entering the decimal number displays the Hex equivalent. An important precaution to be taken is that , when you are entering the decimal number to be converted to Hex, do not press any keys from A to F. There is no provision for detecting this error and the results of converting that number are unpredictable.

CODE 05 and CODE 06 are very useful in address conversions,relative jumps and total space calculations. Complement a block of memory

This code complements all the data contained within a memory block : The required parameters are :

SS : Starting address of the block. SE : End address of the block.

On executing this code, all the ‘0’ are replaced by ‘1’ by ‘0’ within the specified block of memory.

SS and SE must be in RAM area.

Key Pressed Address Field Data Field CODE 04 0 4. EXEC . S S 1000 1 0 0 0. S S INR S E 1008 1 0 0 8. S E INR S r . 19 S r 1 9. EXEC 1 0 0 6 1 9 INR F r i E n d

4.6 CODE : 05

4.7 CODE : 06

4.8 CODE : 0E

Page 23: Microprocessor 8085

4-8

Rolling Display This is not a utility code but it is a demonstration code to illustration code illustrate the powerof the display control. On executing 0F, the display starts rolling the message : d Y n A L o G h E L P S Y o U in L E A r n I n G UP. CODES REFERANCE CHART SS : Statrting Address SE : End Address dS : Destination IA : Insert Address DA : Delete Address Sr : Data Byte

5-1 CHAPTER 5

MACHINE LANGUAGE PROGRAMMING

This section will cover the applications from the software point of view of MICROFRIEND DYNA - 85 . You are advised to get familiar with the assembly language of INTEL 8085 Microprocessor.You should get familiar with the various mnemonics and their power. The 8085 microprocessor makes use of a 16 bit internal register called the stack register to point to a memory area called stack. The stack uses the LIFO ( Last In First Out ) type for storage during subroutine calls. User is advised to initialize the Stack Pointer with his stack area.The suggested stack pointer location is FEFFH. Location beyond this should not be utilized by the user as the monitor uses this area as the scratch-pad RAM. You may borrow several monitor routines to simplify your task of programming and to minimize RAM used. From the Firmware listing provided, take care of noting the parameters required by these routines, as some of the routines destroy the contents of the Registers. Also go through the manuals for the detailed operation of 8155, 8255 and 8279 supporting chips. The following is a list of scratch-pad RAM allocation to the Monitor program.

4.9 CODE : 0F

Code Function Parameters 00 Block Move SS,SE,dS 01 Fill Block SS,SE,Sr 02 Insert Byte SE,IA,Sr 03 Delete Byte SE,dA 04 Block Search SS,SE,Sr 05 Hex to Dec HE 06 Dec to Hex dE 0E Complement Block SS,SE 0F Rolling Display

5.1 MONITOR SUBROUTINES

Page 24: Microprocessor 8085

5-2 TABLE 5.1

5-3

Important subroutines which can be borrowed from the Monitor FIRMWARE are listed below.These subroutines can be called in your own programs by using the CALL Instruction and specifying the starting address of that particular subroutine.The starting addreses of all these subroutines are given in brackets along with their names.

1. Modiad (0362) – Modify address field of display

Inputs

B : Dot Flag- 1 Put dot at right edge of the field. 0 No dot. HL : The character to be displayed.

Location (Hex) Used for FF9 A, B HALF BIT FF9 C, D, E U1 Key Jump FF9 F, 0, 1 U2 Key Jump FFA2, 3, 4 U3 Key Jump FFA5, 6, 7 U4 Key Jump FFA8 P DATA FFAA, B Unused FFAC, CnSave FFAD, E BrSave FFA, F, 0 DESAVE FB1 CARRYLOC FFB2, 3 HESAVE FFB4, 5 DASAVE FBB6, 7 IA SAVE FFBB, C SE SAVE FFB9, A DS SAVE FFBD, E SS SAVE FFBF COPY TEST FFC0, 1 BIT TIME FFB8 SR SAVE FFC2 User may place a JMP instr. to a RST 5 routine in locs FFFC2H-FFFC4H FFC5 JMP to RST 6 routine FFC8 JMP to RST 6.5 routine (Hardwored user interrupt) FFCB JMP to RST 7 routine FFCE JMP to ‘VECT INTR’Key routine FFDI-FFE8 Monitor Stack (temporary storage Used by Monitor FFE9 E Register FFEA D Register FFEB C Register

Location (Hex) Used for FFED Flags FFEE A Register FFEF L Register FFF0 H Register FFF1 Interrupt Mask FFF2 Prog. Cntr – Low Byte FFF3 Prog. Cntr – Hi Byte FFF4 Stack Ptr – Low Byte FFF5 Stack Ptr – Hi Byte FFF6 Current Address FFF8 Current Data FFF9-FFFC Output buffer & Temp Loc FFFD Register Pointer FFFE Input Buffer FFFF 8155 command/status Register Image

Page 25: Microprocessor 8085

5-4

The contents of HL Register pair are displayed in the address field.The contents of all the CPU registers are affected

2. MODIDT ( 036E ) Inputs B : Dot Flag-

1 : Put Dot at the right edge of the field 0 : No dot

The contents of the A register are displayed in hex notation in the data field of display the contents of all the CPU registers and flags are affected.

3. RDKBD (02E7) Input : Nothing Output : A : character read from the keyboard Destroys : A, H, L, F/E’s.

This routine waits until a character is entered om the hex keypad and on return, places the value of the character in the A register.

For the RDKBD routine to work correctly, the user must unmask RST 5.5 hardware interrupt using the SIM instuction in Version 1.

4. DELAY (05F1)

This routine takes the 16 bit contents of register pair and counts down to zero.Then returns to the calling program. The A,D & E register and flags are affected.

5-5

5. CLEAR (01D7) Inputs : B : Dot falg – 1 – Dot in address field 0 – No Dot

This routines sends blank characters to both the address field and data field of the display. If the dot flag is set then a Dot appears at the right edge of the address field.

6. GTHEX (022B) – Get Hex Digits Inputs : B : Display Flag – 0 – Use address field of display. 1 – Use data field of display. Outputs : A : Last character read from keyboard. DE : Hex Digits from keyboard last four entered. Carry : Set : At least one hex digit read, else it is reset. Destroys contents of all registers.

This routine accepts a string of hex digits from keyboard and displays them in address / data field as they are received. In either case a dot will be displayed in the right most field. It is not terminated by INR, DCR or EXEC keys, the received hex digits are invalid.

7. OUTPUT (02B7) Inputs : A : Display Flag –

0 – To use address field 1 – Use data field

Page 26: Microprocessor 8085

5-6

B : Dot Flag – 1 - Dot at right edge 0 - No dot

HL : Address of characters to be output.

Destroys all

Outputs two characters to data field or four to address field. The address of the characters is received as an argument. The routines MODIDT and MODIAD are useful whenever the user wants to display hexadecimal information like messages. The userhas to use the output routine with the following code assigned to the characters to be displayed. The display technique on 7 segment LED is already explained.

TABLE 5.2

5-7

The following are the routines you can borrow from the serial Monitor. Whenever the user straps the SID to TTY ( 20 mA loop ) or CRT (RS232C) the serial routine is invoked. The serial routine is AUTOBAUD type i.e. on power up or RESET, the contents for HALFBIT and BITTIME are undefined. After sending ASCII space character (20H) from a serial device, and baud rate is calculated . A BRID routine and a sign on message is transmitted at that baud rate. Thus user is advised to set the appropriate values in HALFBIT and BITTIME and then use CIN and COUT routines for any other purpose of block transfer on serial link from one system to another etc. Please refer to the chapter on serial I/O operation for details, before using any of the following routines which can be obtained from the serial monitor.

Character Hex Code

0 00 1 01 2 02 3 03 4 04 5 05 6 06 7 07 8 08 9 09 A 0A b 0B C 0C d 0D E 0E F 0F

Character Hex Code

H 10 L 11 P 12 I 13 r 14 Blank 15 n 16 U 17 h 18 G 19 J 1A y 1B O 1C

5.2 SERIAL ROUTINES

Page 27: Microprocessor 8085

5-8 1.CIN (07FD) – Console Input

This routine returns a character in ASCII code received from the serial devices,to the A register. Condition flags are affected. 2.COUT (07FA) – Console Output This routine transmit a character (in ASCII Code) passed from the program in C Register to the serial device. The A, C & F registers are affected. 3.CROUT (05EB) – Carriage Return Line Feed CROUT send CR and LF characters to console, A, B, C and F are destroyed. 4.NMOUT (06C6) – Hex Number printing NMOUT converts the 8 bit unsigned integer in A register to 2 ASCII characters representing 2 hex digits and prints the two digits on console. Contents of A,B, and C, F are destroyed. 5.GETHX (0626) Outputs : BC : 16 Bit Integer D : Character which terminated the integer. Carry : 1 – First character is not delimiter 0 – If first character is delimiter. Destroys : A, B, C, D, E & F. GETHX accepts a string of hex digits from the input stream and returns a value, a 10 bit binary integer, taking only last four digits entered.

5-9 The following are the program examples . The user should load and execute these program to get familiar with the keyboard of MICROFRIEND DYNA-85.

Example 1 : Familiarizaton Let us start with a simple program to understnd exactly what happens inside a microprocessor when a program is run. First, load the following program using ‘SET’ and ‘INR’ keys. Address Data Mnemonic Comments F000 31 FF FE LXI SP Define Stack Pointer F003 00 NOP F004 00 NOP F005 00 NOP F006 00 NOP F007 00 NOP F008 00 NOP F009 CD 6E 03 CALL Display contents of A into

Data Field F00C 76 HALT Stop Executing Now to understand exactly how the program works, let us take three simple instructions. MVI A, D8 MVI B, D8 ADD B RST 1

5.3 PROGRAMMING EXAMPLES

Page 28: Microprocessor 8085

5-10 The RST 1 instruction will be used so that the register status is saved and we can examine registers after executing the programs , using the ‘REG’ key.

a. Execute the program that has been entered at location F000H by using the ‘GO’ and ‘EXEC’ keys .‘E’ will appear in the address field showing that the program is being executed. Press ‘RES’ to reset and ‘FrlEnd’ will appear.

b. Modify the initial contents of location , as follows :

F003 3E F004 23 F005 CF

Execute the program at F000H and examine the register A and B.

Contents of A should be 23, because the instruction MVI A , 23 (3E 23 ) will load register A with 23.

c. Modify the locations again as follows :

F005 06 F006 11 F007 CF

Execute the program at F000H and examine the registers A and B.

Register A contain 23, and Register B will contain 11, because the instruction MVI B, 11 (06 11) has now loaded the register B with 11.

d. Modify the location again as follows : F007 80 F008 CF

5-11 Execute the program at F000H and examine registers A & B, this

time the contents of register A are not 23 as before, but it is 34. This is the result of instruction

ADD B, 80 Which contents of B are added to A, A become 34 (23+11).

e. Now remove the CF from location F008 and replace it by 00 (NOP) again. Execute the program at F000H and observe the difference.

This time the data field shows 34.Instruction CALL MODIDT has displayed the contents of register A in the data field.Execution of program now select different sets of instruction and study the effect of executing those instruction in the similar manner.

In case of long programs, it is very inconvient to insert the CF and remove it for each step. Such programs can be studied by using the ‘STEP’ key which is already explained.

Example 2 : RDKBD

The following program illustrate the utility of the subroutine RDKBD. Execute the following program and then examine register A . Register A will contain the value of the key you has pressed.

Address Data Mnemonic Comments F000 32 FF FE LXI SP, FEFF Define Stack Pointer F003 00 NOP F004 00 NOP F005 00 NOP F006 CD E7 02 CALL RDKBD Read Keyboard value Into A. F009 CF RST 1 Save registers & return to monitor

Page 29: Microprocessor 8085

5-12

Example 3 : MODIDT

This examples loads register A with a value and displays that value in the data field of the display.

Address Data Mnemonic Comments

F000 31 FF FE LXI SP, FEFF Define stack Pointer F003 3E 96 MVI A, 96 Load A with Value 96 F005 CD 6E 03 CALL MODIDT Display contents F008 76 HLT of A in the data field

Example 4 : RDKBD + MODIDT

This example combines previous two programs and the Data field of display the value of the key pressed.

Address Data Mnemonics Comments

F000 31 FFFE LXI, SP FEFF Define stack pointer F003 00 NOP Unmak interrupt F004 00 NOP F005 00 NOP F006 CD E702 CALL RKBD Read keyboard Into A F009 CD 6E03 CALL MODIDT Display A into data field F00C C3 06F0 JMP F006 Wait for next key Example 5 : HEX ADDITION This program combines the RDKBD and MODIDT subroutines with the ADD B instruction.The RDLBD subroutine reads two successive key entries and adds them together in register A. The MODIDT subroutines then displays the result of this addition in the data field of the display.

5-13 Address Data Mnemonics Comments

F000 31 FFFE LXI SP,FEFF Define stack pointer F003 00 NOP F004 00 NOP F005 00 NOP F006 CD E702 CALL RDKBD Read Keyboard into A F009 47 MOV B, A Transfer A to B F00A CD E702 CALL RDKBD Read next key F00D 80 ADD B Add B to A F00E CD 6E03 CALL MODIDT Display result in data field F001 C3 06F0 JMP F006 Wait for Next cycle

Addition Suggestions : 1. Modify this program using the DAA instruction to perform decimal addition. 2. Write a program for 2 digit decimal addition using DAA and RLC

instructions.

Example 6 : 4 DIGIT HEX COUNTER

This example program displays a 4 digit Hex count in the address field of the display, from 000 to FFFF and again resets to 0000 before continuing further count. The HL register pair is used for counting and the MODIDT subroutine is used to obtain the display. Address Data Mnemonic Comments F000 31 FFFE LXI SP,FEFF Define stack pointer F003 21 0000 LXI H, PUSH H Save HL on stack F007 CD 6203 CALL MODIAD Display count in address field F00A 11 0040 LXI D 4000 Set Delay F00D CD F105 CALL DELAY Wait out Delay F010 EI POP H Restore HL F011 23 INX H Increment count F012 C3 06F0 JMP F006 Continue in loop

Page 30: Microprocessor 8085

5-14 Example 7 : 2 DIGIT DECIMAL COUNTER

This program displays s decimal counter in the data field of display. The count can be stopped using the VI key and restarted by pressing any key, except the Reset key. The address field shows ‘E’ to indicate that user program is being executed.

Address Data Mnemonics Comments

F000 31 FFFE LXI SP,FEFF Define stack Pointer F003 3E IB MVI A, IB Load A with 1B F005 30 SIM Set interrupt mask F006 FB EI Enable Interrupt F007 06 00 MVI B, 00 Clear B F009 78 MOV A, B Load A from B F00A 27 DAA Decimal adjust A F00B 47 MOV B, A Load B from A F00C C5 PUSH B Save B on stack F00D CD 6E03 CALL MODIDT Display count F010 16 18 MVI D, 18 Set Delay F012 CD F105 CALL DELAY Wait out delay F015 C1 POP B Restore count F016 04 INR B Increment count F017 C3 09F0 JMP F009 Continue F020 3E 1F MVI A, 1F Load A with 1 F F022 30 SIM Set interrupt mask F023 CD E702 CALL RDKBD Wait for a key to be Pressed F026 3E 1B MVI A, 1B Load a with 1B F028 30 SIM Set interrupt mask F029 FB EI Enable Interrupt F02A C9 RET Return FFCE C3 20F0 JMP F020 Jump to interrupt routine

5-15

This program executedas GO F000 EXEC, and it can be stopped by pressing the VI key. The count can be restarted by pressing any key other than Reset key. 1. Change the speed of counter by modifying the contents of location

F011H which decides the delay. 2. Use the CPI instruction to compare the count with 60, & a conditional

jump JNZ, converts this program to count only upto 59.Use the XRA instruction to reset the accumulator to 00 after counting upto 59. Now set the delay in such a way that count advances by 1 per second . This program coverts your MICROFRIEND DYNA – 85 into digital stop watch.

3. Write a program based on these basic ideas to display hours and minutes in the address field and seconds in the data field. You can either have a 12 hour or 24 hour clock.

Example 8 : FLASHING DISPLAY ‘LErn’ This program flashes the message ‘Lern’ in the address field of the dispay. Adderss Data Mnemonic Comments F000 11 L F001 0E E F002 14 r F003 16 n F004 15 blank F005 15 blank F006 15 blank

Page 31: Microprocessor 8085

5-16

Address Data Mnemonics Comments F010 31 FFFE LXI SP, FEFF Define stack pointer F013 3E 01 MVI A, 01 Load A with 1 to use Data field. F015 06 00 MVI B, 00 No decimal point F017 21 06F0 LXI, H F006 Get characters starting at F006H F01A CD B702 CALL OUTPUT Display them in data field F01D 3E 00 MVI A, 00 Use address field F01F 06 00 MVI B, 00 No Decimal point F021 21 00F0 LXI H, F000 Get characters starting at F000 F024 CD B702 CALL OUTPUT Display them in address Field F027 11 FFFF LXI D,FFFF Set Delay F02A CD F105 CALL DELAY Wait out delay F02D 3E 00 MVI A, 00 F02F 06 00 MVI B, 00 F031 21 04F0 LXI H F004 Get blank F034 CD B702 CALL OUTPUT Blank display F037 11 FFFF LXI D, FFFF F03A CD F105 CALL DELAY F03D C3 1DF0 JMP F01D Continue Flashing Additional Suggestion : 1. Find out the location where the delay values are sorted.

Change these delay values to change the rate of flashing. 2. Select any other 4 character word and flash it on the display.

3. Select a 2 character word and place it at F004H and F005H

so that it flashes in between the flashing of 4 character word.

5-17 Example 9 : ROLLING DISPLAY This program is included in the monitor FIRMWARE and it is accessible through code ‘0F’. On executing this code the display starts showing the rolling message “dYnALOG hELPS YoU In LEArning UP”. The rolling display is using the OUTPUT and DELAY subroutines. To simulate the effect of rolling, characters are taken one from a string of characters and the position is shifted from right to left. When the first letter appears in the highermost position, remaining 5 digits must be blank. This string starts with 5 blank characters. The last character in the string is FFH, which is not used to display any letter but it is used only to detect the end of string , so that the rolling can once again start from the beginning using a conditional jump instruction. The complete listing of this program is given in the FIRMWARE listing at address 0E5BH. Transfer this program from EPROM to RAM using CODE 00. Then modify all the address locations suitably so that the same program can be executed form RAM. Now you can put any other message in the string and display that message.

Page 32: Microprocessor 8085

6-1

CHAPTER 6

SERIAL I / O OPERATION

In the serial I / O section we will discuss about the RS232Ã and Audio Cassette Interface. Apart from the Keyboard Mode, the serial Mode can be selected with appropriate strapping. In the keyboard mode user can communicate with the system only in hexadecimal format . The serial mode is provided for the better interaction mode of communication using a terminal. Normally the mode of cmmunation is ASCII ( American Standard Code for Information Interchange).

To Correct MICROFRIEND with a terminal strap SID, the appropriate signals are provided 7 pin cable type connect . After appropriately connecting the terminal the standard Baud Rate is 110 with two stop bits. When the system is powered on the in - built displays show SERIAL. This routine expects a space character (20H in ASCII) from the terninal. The system is claimed to be AUTO BAUD, that is after sensing the space character from the terminal it will adjust to the appropriate Baud Rate and hence forth communicate with this Baud Rate, until the next power ON or the Reset key is pressed, the Baud Rate is unchanged.

Thus on power ON or Reset you press a space bar on TTY and sign on message MICROFRIEND DYNA – 85 appears on the console . The procedure is similsr for CRT type of terminals where the communication mode is RS232C. RS232C is a EIA approved standard for communation. For an active signal the channel will give -12V signal and for the inactive signal the voltage will be +12V. This is to keep the long communication line immune to noise and to connect a CRT terminal on RS232C link, strap the SID line to CRT. The communication format is fully duplex, 8 bit ASCII data , no parity start bit and two stop bits. Full Duplex means that whatever character received from the terminal is echoed back.

Page 33: Microprocessor 8085

6-2

The later paragraphs will explain the operation of various commands supported under the serial section. The commands are in the form of a single alphabetical character specifying the command, followed by a list of numerical or alphabetical parameters which are entered as hexadecimal numbers, The monitor recognizes the character 0 through 9 and A through F as legal hexadecimal digits . Longer numbers may be entered but only the last four digits will be retained. The only command an alphabetical parameter is the ‘X’ command. The nature of such parameter will be discussed in the section explaining the command.

The monitor allows you to enter, checkout and execute small programs. It contains facilities for memory display and modification program loading from console device and program initiation with a break-point facility. In addition, the key on the keyboard may be used to initiate your own keyboard interrupt routine.

In the following paragraphs, the Monitor command language is discussed. Each command is described and examples are included for clarity. Error conditions that may be encountered while operating the monitor are described later.

The monitor requires each command to be terminated by a carriage return with the exception of the ‘S’ and ‘X’ commands, the command is not acted upon until the carriage return is sensed. Therefore, you may abort any command , before entering the carriage return, if you have typed an illegal character.

Except where indicated otherwise, a single space is synonymous with the comma for use as a delimiter.

Consecutive spaces or commas or a space or comma immediately following the command letter, are illegal in all commands except the ‘X’ command.

6-3

6.2.1 D – Display memory Command

D

Selected area of addressable memory may be accessed and displayed by the D command. The D command produces a formatted listing of the memory contents between ( Low Address ) , and (High Address ) , inclusive on the console. Each line of the listing begins with the address of the first memory location displayed on that line, represented as 4 hexadecimal digits , followed by up to 16 memory location, each one represented by 2 hexadecimal digits. 6.2.2 G – Program Execute Command

G ( Entry Point )

Control of the CPU is transferred from the monitor to the user program by means of the program execute command G. The entry point should be an address in RAM which contains an instruction in the program. If no entry point is specified , the monitor uses, as the address, which is the value on the top of the stack when the monitor was entered. G Command Example G 2000

Control is passed to location 2000. 6.2.2 I – Insert Instructions into RAM-1

I ( Address ) ( Data )

Single instruction , or an entire user program, are entered into RAM with the I command. After sensing the carriage return terminating the command line , the monitor waits for the user to enter a string of hexadecimal digits ( 0 to 9 , A to F ) . Each digit in the string is converted to its binary value, and then loaded into memory , beginning at the starting address specified and continuing with sequential memory locations . Two hexadecimal digits are loaded into each byte of memory.

6.1 USE OF MONITOR

6.2 COMMAND STRUCTURE

Page 34: Microprocessor 8085

6-4

Seperators between digits ( Commas, Spaces, Carriage Returns ) are ignored, illegal characters, however will terminate the command with an error message. (The character ESC or ALTMODE which is echoed on the console as ‘$’ terminates the digit string.

6.2.3 M – Move Memory Command M ( Low Address ) ( High Address ) ( Destination )

The M command moves the contents of memory between (Low Address) and ( High Address ) inclusive of the area of RAM beginning at ( destination ) .The contents of the field remain undistributed, unless the receiving field overlaps the source field. The move operation is performed on a Byte–by-Byte basis, beginning at (Low Address). Care should taken if ( Destination ) is between ( Low Address) and (High Address). For example, if l ocation 2010H contains 1A, the command M2010, 201F, 2011 will result in locations 2010H to 2020H containing ‘1A1A1A’ , and the original contents of the memory will be lost. The monitor will continue to move data until the source field is exhausted or until it reaches address FFFFH. If the monitor reaches FFFFH without exhausting, the source field, it will move data into this location and then stop.

6.2.4 S – Substitute Memory

S ( Address ) ( Data) The S command allows you to examine and optionally modify memory locations individually. The command functions as follows :

6-5

1. Type S, followed by the hexadecimal address of the first memory location which is displayed, followed by a space or comma.

2. The contents of the location are displayed, followed by a dash (-). 3. To modify the contents of the location displayed, type in the new

data, followed by a space, comma or carriage return. If you do not wish to modify the location type only space, comma or carriage return . The next higher memory location will automatically be displayed as in step ( 2 ).

4. Type a carriage return. The S command will be terminated. 6.2.5 X – Examine / Modify CPU Register Command

X ( Register Identifier )

The displaying and modification of the CPU registers are accomplished via the X command. The X command uses (Register Identifier) to select the particular register to be displayed. The register identifier is asingle alphabetic character denoting a register, as defined in table. X command register identifiers : Identifier code Register A Register A B Register B C Register C D Register D E Register E F Flags Byte

Page 35: Microprocessor 8085

6-6

Identifier code Register I Interrupt mask H Register H L Register L M Register H & L combined S Stack Pointer P Program Counter

The command operates as follows : 1. Type X, followed by a register identifier or a carriage return. 2. The contents of the register are displayed (Two hexadecimal digits for

A, B, C, D, E, F, I, H and L, four hexadecimal digits for M, S and P) followed by a dash(-).

3. The register can be modifiedby typing the new value, followed by a

space comma, or carriage return. If no modification is desired, type only the space comma or carriage return.

4. If a space or comma is typed in step (3), the next register in sequence

will be displayed as in step 2. If P was displayed the command is terminated. If a carriage return is entered in step 3, the X command is terminated.

5. If a carriage return is typed in step (1) above, an annotated list of all

registers and their contents are displayed.

6-7

The bits in the byte (F) and interrupt mask (I) are encoded as follows :

The format of F register : S Z X C X P X C

CarryParityAux.Carry

Zero

Sign X= Undefined

The format of I register :

Interrupt Mask Interrupt enable flag The monitor treats the RST 1 instruction (CF) as a special sequence initiater. When the RST 1 instruction is executed, the monitor will automatically save the complete CPU status, and after pressing the space bar , it outputs the sign-on message MICROFRIEND DYNA-85 on the console. Now you may display the contents of the CPU status register by initiating the ‘X’ command. After examining the machine status and making any changes you can resume execution of the program by inputting ‘G’ and carriage return on the console. You can step through large portions of your program by inserting RST 1 instructions at key location.

I M M M 0 0 0 0 E 7.5 6.5 5.5

6.3 PROGRAM DEBUGGING

Page 36: Microprocessor 8085

6-8

Each character is checked as it is entered from the console. As soon as the monitor determines that the last character entered is illegal, it aborts the commands and issues ‘*’ to indicate an error has occurred.

Some commands require an address pair in the form of ( Low Address ) ( High Address ). While these commands are used and the value of Low address is greater than or equal to the value of high address, the action indicated by the command will be performed on the data at low address only. Addresses are evaluated modulo 210 , thus if a hexadecimal address greater than FFFFFH is entered, only the last 4 hex digits will be used. Another type of address error may occur when you specify a part of memory in a command which does not exit in the hardware configuration you are using.

In general, if a nonexistent portion of memory is specified as the source field for an instruction, the data fetched will be unpredictable. If a non existent portion of memory is given as the distrinct field in a command, the command effect.

1. D COMMAND EXAMPLE :

DC5, D6 (CR)

00C5 DA 9D 00 C3 E9 01 CD 00 02 CD E7 00D0 02 FE 10 CA EC 00 32

6-9

2. I COMMAND EXAMPLE :

1 1 0 0 0 (CR) 0 1 2 3 4 5 6 7 8 9 A $

This command puts the following into RAM.

3. M COMMAND EXAMPLE :

M 0 0 0 0, 0 0 1 0, F 0 0 0 (CR)

Block area from 0H to 0010H (27 Bytes) is moved to RAM from F000H. User can check it with two commands. D0, 10 (CR) and DF000, F020 (CR)

4. S COMMAND EXAMPLE :

SF000 3E- 00-05 D3-00 05-07 (CR)

The location F000H which contains 3E is unchanged. Location F001H contains 00 is replaced with 05 , location F002H contains D3 is replaced with 00 and F0003H contains 05, which is replaced by 07. The user can verify it with the D command. Till now the full discussion was concentrated on CRT (RS232C) type of communication interface . Additional useful interface provided on SID and SOD lines of 8085 Microprocessor is the Audio Cassette I/F.

6.4 ERROR CONDITIONS

6.5 ADDRESS VALUE ERRORS

6.6 COMMAND EXAMPLES 6.7 AUDIO CASSETTE I/F

Page 37: Microprocessor 8085

6-10 The System RAM is volatile, i.e. whenever the power is OFF, data is lost.EPROM is nonvolatile storage but it is costly and consumes more time for erasing and reburning. Audio Cassette I/F is cheap and fast to use. You can store 30K bytes on one side of the C60 cassette. The two commands SAVE and LOAD in operating section explain the use of this interface. In this section the background of this interface is discussed . A file management type of storage is supported . A very reliable , ‘Simple Hardware Complex Software’ type frequency modulation method is used for MF-DYNA 85. BIT 0 2KHz 8 cycles + 1KHz 2 cycles 6 ms BIT 1 2KHz 4 cycles + 1KHz 4 cycles 6ms Byte Start Bit ( 0 ) bit 7 to bit 0 1 stop Bit 10*6 60ms FILE Hexadecimal file. SAVE / LOAD SEQUENCE :

1KHz 1 Byte 2 Bytes 1Byte 1 Byte 2 KHz Variable 2KHz 4 Sec. 2 Sec. Data 2Sec. The data rate is 165 bps in 30 min. You can store (165 * 30 * 60) * 10 Bytes 25 K. The Output could be connected to MIC or AUX IN of CRTs. The total procedure for SAVING and LOADING is explained in command chapter.

6-11

If Err is displayed. It indicates : Open area for RAM (SS-SE) Improper formatting Checksum mismatch Noisy Tape recorde/ tape BAUD RATE TABLE 6.1 (At 6,144 MHz Crystal)

Please note that only while using the CIN and COUT routines off line. You have to load these HALFBIT and BITTIME. In all other situations the AUTOBAUD software will adjust to terminal baud rate ( Any nonstandard baud rates also ). While loading the locations are FF9AH for HALFBIT and FFCOH for BITTIME For 600 Baud, load the following using the SET command : FFC0 – 69 FFC1 – 02 FF9A – A5 FF9B – 01

SS LOAD FILE SE SS CHKSUM MIDSYNC DATA TAILSYNC NAME SS SYNC

Baud Rate Bit-Time Half Bit 110 08C6 04E3 150 05B2 03D9 300 03D7 026C 600 0269 01A5 1200 02B2 0159 4800 0157 012C 9600 0129 0115 19200 0112 0109 0107 0104

Page 38: Microprocessor 8085

7-1 CHAPTER 7 FOR THE MICROFRIEND ILC USER

This manual can be utilized for the user of MICROFRIEND ILC, also because MICROFRIEND DYNA-85 is the upgraded version of ILC (W/P). The differences between MICROFRIEND DYNA-85 and ILC are as follows : 1) In DYNA-85 Address, Data and Control lines are brought on to a 50 pin FRC connector instead of the 56 pin STD connector

provided on ILC. 2) In DYNA-85, three 16 bit timer/ counter channels are available

onboard using the 8253 chip and it is brought on to a 10 pin connector.

3) RAM sockets are provided with battery back up on DYNA-85 which is not present on the ILC.

All command, codes, keyboard functions and monitor programs of ILC are the same as that of DYNA-85 system. The Memory and I/O mapping are also the same as DYNA-85. Any program written on DYNA-85 will work on ILC and vice versa,expect the routine code related to the timer/counter of 8253.

Page 39: Microprocessor 8085

7-2 The details of the 56 pin edge connector is given below : Pin No. Signal Pin No. Signal Name Name 1 +5V 29 A0 2 +5V 30 A8 3 GND 31 WR 4 GND 32 RD 5 NC 33 IORQ 6 NC 34 MEMRQ 7 AD3 35 IOEXP 8 AD7 36 NC 9 AD2 37 NC 10 AD6 38 NC 11 AD1 39 S1 12 AD5 40 S0 13 AD0 41 BUSAK (HLDA) 14 AD4 42 BUSRQ (HOLD) 15 A7 43 INTA 16 A15 44 INTRQ 17 A6 45 18 A14 46 NMIRQ 19 A5 47 SYSRST 20 A13 48 PBRESET 21 A4 49 CLK 22 A12 50 NC 23 A3 51 NC 24 A11 52 NC 25 A2 53 NC 26 A10 54 NC 27 A1 55 +12V 28 A9 56 -12V

A-1

APPENDIX A CONNECTOR & STRAPPING DETAILS The connectors on MICROFRIEND-DYNA 85 are designated as follows : J1 : 50 pin Edge connector with STD compatible signals J2 : 26 pin flat cable connector for 8155 J3 : 26 pin flat cable cinnector 8255 J4 : 26 pin flat cable connector for 8279 J5 : 7 pin power supply connector J6 : 7 pin connector for serial I/O J7 : 10 pin FRC connector for 8253 Connector J1 : DYNA-85 Bus Interface Pin No. Signal Name Pin No. Signal Name 1 + 5V 26 A10 2 + 5V 27 A1 3 GND 28 A9 4 GND 29 A0 5 RDY 30 A8 6 ALE 31 WR 7 AD3 32 RD 8 AD7 33 IORQ 9 AD2 34 IO/ M 10 AD6 35 IOEXP 11 AD1 36 IOEXP1 12 AD5 37 IOEXP2 13 AD0 38 IOEXP3 14 AD4 39 NMIRQ

Page 40: Microprocessor 8085

A-2 Pin No. Signal Name Pin No. Signal Name 15 A7 40 CS2 16 A15 41 HLDA 17 A6 42 HOLD 18 A14 43 INTA 19 A5 44 INTRQ 20 A13 45 CLK 21 A4 46 RST6.5 22 A12 47 SYSRESET 23 A3 48 PBRESET 24 A11 49 RST5.5 25 A2 50 RST7.5 Connector J2 : 8155 Connector Pin No. Signal Name Pin No. Signal Name 1 PA3 2 PA2 3 PA1 4 PA0 5 VCC 6 PA7 7 PA6 8 PA5 9 PA4 10 TIM OUT 11 TIM IN 12 PC5 13 PC4 14 PC0 15 PC1 16 PC2 17 PC3 18 PB0 19 PB1 20 PB2 21 PB3 22 PB4 23 PB5 24 PB6 25 PB7 26 GND

A-3

Connector J3 : 8255 Connector

Pin No. Signal Name Pin No. Signal Name 1 PA3 2 PA2 3 PA1 4 PA0 5 VCC 6 PA7 7 PA6 8 PA5 9 PA4 10 PC7 11 PC6 12 PC5 13 PC4 14 PC0 15 PC1 16 PC2 17 PC3 18 PB0 19 PB1 20 PB2 21 PB3 22 PB4 23 PB5 24 PB6 25 PB7 26 GND

Connector J4 : 8279 Connector

Pin No. Signal Name Pin No. Signal Name 1 RL0 2 RL1 3 RL2 4 RL3 5 RL4 6 RL5 7 RL6 8 RL7 9 OUT A3 10 OUT A2 11 OUT A1 12 OUT A0 13 OUT B3 14 OUT B2 15 OUT B1 16 OUT B0 17 NC 18 VCC 19 CNTL 20 SHIFT 21 NC 22 GND 23 SL3 24 SL2 25 SL1 26 SL0

Page 41: Microprocessor 8085

A-4 Connector J5 : Power Supply Connector Pin No. Signal Name 1 GND 2 GND 3 + 5V 4 + 5V 5 + 12V 6 -12V 7 NC Connector J6 : Serial Connector Pin No. Signal Name 1 NC 2 NC 3 NC 4 NC 5 TXD 6 RXD 7 GND Connector J7 : 8253 Connector Pin No. Signal Name Pin No. Signal Name 1 GATE 0 2 GATE 1 3 GATE 2 4 GND 5 CLK 0 6 OUT 0 7 CLK 1 8 OUT 1 9 CLK 2 10 OUT 2

B-1

APPENDIX B ADD-ON CARDS FOR MICROFRIEND DYNA-85 The MICROFRIEND DYNA-85 trainer and development system supports various type of add-on interfacing cards like DYNA study card, PIO cards. These cards are designed for the novice as well as those who already know about microprocessors, to carry out experiments for the purpose of thorough understanding of the peripheral chips and interfacing with external world. List of add on card supported by DYNA-85 is as follows : 1) DYNA-SERIES PERIPHERAL STUDY CARDS [A] DYNA-PIO : 8155 STUDY CARD [B] DYNA-PIO/1 : 8212 STUDY CARD [C] DYNA-PIO/2 : 8255 STUDY CARD [D] DYNA-TIMER : 8253 STUDY CARD [E] DYNA-SERIAL : 8251 STUDY CARD [F] DYNA-LBDR : LATCH, BUFFER, DECODER,

RAM STUDY CARD

[G] DYNA-INTR : 8259 STUDY CARD [H] DYNA-KBDISP : 8279 STUDY CARD [I] DYNA-DCM : DC MOTOR CONTROL

STUDY CARD [J] DYNA-TWH : THUMBWHEEL STUDY CARD And many more study cards will be made available in the DYNA-SERIES.

Page 42: Microprocessor 8085

B-2

2) DMS-PIO CARDS [A] HEX KEYPAD CARD. [B] STEPPER MOTOR CONTROLLER CARD. [C] ELEVATOR SIMULATOR CARD. [D] D TO A CONVERTER CARD. [E] A TO D CONVERTER CARD. [F] LOGIC INTERFACE CARD. [G] SERIAL DISPLAY CARD. [H] DIGITAL I/O SIMULATOR CARD For further information or demonstration of the above cards with DYNA-85, please contact us or our dealers.

D-1

APPENDIX D

MICROFRIEND DYNA-85 MONITOR LISTING ADDRESS NAME FUNCTION 0000 RST 0 COLD START Resets & Reinitializes

all 0008 RST 1 WARM START Stores all CPU status 004E SIGNONK Friend Message 0066 CMMND Keyboard command

recognizer 0092 REG 'REG' Command entry

examine/modify CPU registers 00CB RUN Execute user program 00FD STEP STEP/Breakpoint user

program 018B SET Examine/Modify

memory 01D7 ** CLEAR Clear display. Dot as

per B flag 01E9 * CLDIS Clear display,

Terminate command 01F1 CLDST Subroutine for Cold

Start 0200 DISPC Display program

counter & contents 0215 ** ERR Display FErr &

terminate command 022B ** GTHEX Get hex digits from the

keyboard as per B flag 026C * HXDSP Expand hex digits for display 028E ININT Input interrupt RST 5.5

processing

Page 43: Microprocessor 8085

D-2 ADDRESS NAME FUNCTION 029F * INSDG INSERT hex digit in A into DE 02A8 NXTRG Advance register pointer to next reg. 02B7 ** OUTPUT Output characters to display 02E7 ** RDKBD Read characters from KBD in A 02F7 RETF Return False 02FA RETT Return True 02FC RGLOC Get register save location 0309 RGNAM Display register name 031B RSTOR Restore user registers 0344 SETRG SET Register pointer 035F MODIAD Update address field of display

from CURAD 0362 ** MODADI Update address field of display

from HL 036B MODIDT Update address field of display

from WRDT 036E ** MODIDT1 Update data field of display

from A 03FA SIGNON Print MICROFRIEND-I on TTY 0408 GETCM Get commands from TTY 0437 DCMD Display memory block 0468 GCMD Execute user program 0486 IMCD Insert byte into memory 04D0 SCMD Block move during memory 04F0 SCMD Examine & Modify memory 0514 XCMD Examine & Modify registers 0590 ** CIN Gets character in A from TTY 05BB * CNVBN Converts ASCII hex to Binary 05C4 ** COUT Outputs ASCII character in C to

TTY 05EB ** CROUT Outputs CR & CF to console 05F1 ** DELAY Returns when count in DE

become 0 05F8 ** ECHO Gets character from console &

sends it back 0611 * ERROR Outputs to console 061C FRET 061F ** GETCH Get a character from input

stream 0626 ** GETHX Accept a string of hex digits

from input stream

D-3 ADDRESS NAME FUNCTION 065B ** GETNM Get specified count of

numbers from input stream

06A0 * HIL0 Compare HL & DE 06C7 ** NMOUT Outputs two ASCII

characters for each number in A

06E2 PRVAL Convert hex to ASCII 06EA REGDS Display contents of

register save one location

071B RGADR From a character denoting register gets the saved location address

0732 SRET Success return 0734 STHF0 Store to lower half zero 073F STHLF Store into specified half

byte of DE the 4 bit value in C

075E VALDG 0-9 & A-F valid hex degit check

0779 VALDL Valid delimiter check 0841 CODECMD CODE Command 085C MOVE BLOCK Move Block of Memory

CODE 00 088D FILL BLOCK Fill block of RAM with

variable CODE 01 08A6 COMPL CMENT Complement RAM

block CODE 0E 08BD BLOCK Search Search a given block

for variable CODE 04 08D4 * DISPLAY Display

match/mismatch & wait for INR

08DD INSERT Insert a byte in a block CODE 02

0929 DELETE Delete a byte from a block code 03

0951 HEX-DECIMAL CODE 05 Hexadecimal to Decimal

Page 44: Microprocessor 8085

D-3 ADDRESS NAME FUNCTION -- DEC-HEX CODE 06 Decimal to

Hex conversion 09D7 SERIAL Baud Rate id, Sign,

Command 09E3 BRID Baud Rate identification 0A10 CNVBN Convert to Binary 0A19 TPO Break point loading 0A4B SSTEP Break point checking 0A78 * LDALL Load SS, SE & DS 0A93 LDSSE Load SS & SE 0AC2 * DTDISP Display as per code 0AE6 BLANKCHK Check EPROM for

erasure code 0B 0B16 Pr LOAD Load Pr (Program)type 0B35 DUPL Duplicate CODE 0A 055B COPY Copy PROM into RAM

CODE 09 0B65 CHKSUM Checksum given

PROM CODE 'OC' 0BA7 VERIFY Verify RAM VS EPROM

CODE '08' 0BD6 * READ Read from COPY

PROM At a given ADR 0BF1 PROGRAM Program given memory

block in COPY ODE 07 0C46 SRKD SS/SE and Sr. Loading 0C6B MESG Display message like

P,V,C,D 0CB7 SAVE Save from memory

block onto cassette 0CDD TAPEOUT Output a byte in C onto

tape 0CFC BURST Output a burst of signal

D-4 ADDRESS NAME FUNCTION

0D28 LOAD Load from cassette to RAM

0D5C TAPEIN Input a byte from tape 0D84 BITIN Input a bit at a time

from Tape 0DAB PRVRG Previous register 0DBA CHK INR or DCR Check 0DC3 INR DCR 0DD9 VALCHI Validity Check 0DF8 * BITSPAS Pass Bits in serial

mode 0E0F SRL1 Display Serial 0E50 * COMPARE Block compare

compares two blocks SS, SE & ds 0E5B CODE OF 0EA2 Guess game CODE 0D

* These routines are very useful to the user & are re-explained in the programming section

Page 45: Microprocessor 8085

D-5 SOFTWARE LISTING OF MICROFRIEND-DYNA-85 LOC OBJ SOURCE STATEMENT "RESET" KEY ENTRY POINT-COLD

START RST 0 ENTRY POINT 0000 3E00 MVI A, KMODE ;GET CONTROL

CHARACTER 0002 D30500 OUT CTRL ;SET

KEYBOARD/DISPLAY MODE 0005 C3F101 JMP CLDST ;GO FINISH COLD START CLDBK ;THEN JUMP BACK HERE 0008 ORG 8 SAVE REGISTERS 0008 22EFFF SHLD LSAV ;SAVE H & L

REGISTERS 000B E1 POP H ;GET USER PROGRAM

COUNTER FROM TOP OF STACK 000C 22F2FF SHLD PSAV ;/AND SAVE IT 000F F5 PUSH PSW ; 0010 E1 POP H 0011 22EdFF SHLD FSAV ;SAVE FLIP/FLOP &

REGISTER A 0014 210000 LXI H, 0 ;CLEAR H & L 0017 39 DAD SP ;GET USER STACK POINTER 0018 22F4FF SHLD SSAV ;AND SAVE IT 001B 21EDFF LXI H, BSAV+1 ;SET STACK POINTER

FOR SAVING 001E F9 SPHL ;REMAINING REGISTERS 001F C5 PUSHB ;SAVE B& C 0020 D5 PUSHD ;SAVE D & E 0021 C33F00 JMPRES10 ;LEAVE ROOM FOR

VECTORED INTERRUPTS TIMER INTERRUPT (TRAP) ENTRY POINT (RST 4.5)-- 0024 ORG 24H 0024 C35701 JMP STP 25 ;BACK TO SINGLE STEP

ROUTINE RST5 ENTRY POINT

0028 ORG 28H

D-6

0028 C3C2FF JMP RST 5.5 ;BRANCH TO RST 5 LOCATION IN RAM INPUT INTERRUPT ENTRY POINT (RST 5.5)

002C ORG 2CH 002C C397FF JMP ININT ;BRANCH TO USER RAM RST

6 ENTRY POINT 0030 ORG 30H 0030 C3C5FF JMP RSET6 ;BRANCH TO RST 6

LOCATION IN RAM HARD WIRED USER INTERRUPT ENTRY POINT (RST 6.5)

0034 ORG 34H 0034 C3C8FF JMP RESET 6.5 ;BRANCH TO RST 675

LOCATION IN RAM 0038 ORG 38H 0038 C3CBFF JMP RSET7 ;BRANCH TO RST 7

LOCATION IN RAM "VECTORED INTERRUPT" KEY ENTRY POINT(RST 7.5)

003C ORG 3CH 003C C3CEFF JMP USINT ;BRANCH TO USER

INTERRUPT LOCATION IN RAM.

RES10 ; CONTINUE SAVING USER STATUS

;GET USER INTERRUPT STATUS AND INTERRUPT MASK

003F 20 RIM ;GET USER INTERRUPT STATUS AND INTERRUPT MASK

0040 E60F ANI 0FH ;KEEP STATUS & MAK BITS 0042 32F1FF STA ISAV ;SAVE INTERRUPT STATUS &

MASK 0045 3E0E MVI A, UNMASK ;UNMASK INTERRUPTS

FOR MONITOR USE 0047 30 STM ;INTERRUPTS DISABLED

WHILE MONITOR IS RUNNING (EXCEPT WHEN WAITING FOR INPUT)

0049 20 RIM ;TTY OR KEYBOARD MONITOR?

004A 07 RLC ;IS TTY CONNECTED?

Page 46: Microprocessor 8085

D-7 0048 DAD709 JC SERIAL ;YES - BRANCH TO

TTY MONITOR ;NO - ENTER KEYBOARD

MONITOR ******************************************

BEGINNING OF KEYBOARD MONITOR CODE ***************************************************** OUTPUT SIGN-ON MESSAGE 004E AF XRA A ;ARG-USE ADDRESS FIELD

OF DISPLAY 004F 0600 MVI B, NODOT ;ARG-NO DOT IN ADDRESS

FIELD 0051 21A063 LXI H, SGNAD ;ARG-GET ADDRESS OF

ADDRESS FIELD PORTION OF SIGN-ON MESSAGE

0054 CDB702 CALL OUTPUT ;OUTPUT SIGN ON MESSAGE TO ADDRESS FIELD

0057 3E01 MVI A, DTFLD ;ARG-USE DATA FIELD OF DISPLAY

0059 0600 MVI B, NODOT ;ARG-NO DOT IN DATA FIELD PORTION OF SIGN-ON

MESSAGE 005B 21AA03 LXI H, SGNOT ;ARG-GET ADDRESS OF

DATA FIELD PORTION OF SIGN-ON MESSAGE

005E CDB702 CALL OUTPUT ;O/P SIGN-ON MESSAGE TO DATA FIELD

0061 3E80 MVI A, EMPTY 0063 32FEFF STA IBUFF ;SET INPUT BUFFER EMPTY

FLAQ

D-8 **************************************** FUNCTION ; COMMD-COMMAND RECOGNIZER INPUTS ; NONE OUTPUT ; NONE CALLS ; RDKBD, ERR, SET, REG, RUN, STEP, CODE, SAVE, LOAD DESTROYS ; A, B, C, D, E, H, L, F/F'S 0066 31E9FF LXIH MNSTK ;MONITOR SP INITIALIZED 0069 3E90 MVI A, ADISP ;USE ADDRESS FIELD 006B D305 OUT CNTRL ;OUTPUT TO CNTRL 006D 3E1E MVI A, F ;PROMPT 006F D304 OUT DATA ;OUTPUT F TO START OF

ADDRESS 0071 00 NOP 0072 CDE702 CALL RDKBD ;READ KEYBOARD 0075 010B00 LXI B, NUMC ;COUNTER FOR NUMBER OF

COMMANDS IN C 0078 210008 CMD10 LXI H, CMDTB ;GET ADDRESS OF

COMMAND TABLE 0078 BE CMP M ;RECOGNIZE THE COMMAND? 007C CA8700 JZ CMD15 ;YES GO PROCESS IT 007F 23 INX H ;NO-NEXT COMMAND TABLE

ENTRY 0080 0D DCR C ;END OF TABKE? 0081 C27800 JNZ CMD10 ;NO-GP CHECK NEXT ENTRY ;YES - COMMAND UNKNOWN 0084 C31502 JMP ERR ;DISPLAY ERROR MESSAGE

AND GET ANOTHER COMMAND

CMD15 0087 210B08 LXI H, CMDAD ;GET ADDRESS OF

COMMAND ADDRESS TABLE 008A 0D DCR C ;ADJUST COMMAND

COUNTER COUNTER ACTS AS POINTER TO COMMAND ADDRESS TABLE

Page 47: Microprocessor 8085

D-9 008B 09 DAD B ;ADD POINTER TO TABLE

ADDRESS 008C 09 DAD B ; TWICE BECAUSE TABLE HAS 2 BYTE ENTRIES 008D 7E MOV A, M GET LOW ORDER BYTE OF COMMAND ADDRESS 008E 23 INX H 008F 66 MOV H, M ;GET HIGH ORDER BYTE OF

COMMAND 0090 6F MOV L, A ;PUT LOW ORDER BYTE IN L

COMMAND ROUTINE ADDRESS IS NOW IN H & L

0091 E9 PCHL ;BRANCH TO ADDRESS IN H & L

************************ COMMAND ROUTINES ************************ FUNCTION ; REG EXAMINE AND MODIFY REGISTERS INPUTS ; NONE OUTPUTS ; NONE CALLS ; CLEAR, SETRG, ERR, RGNAM, RGLOC,

UPDDT, GTHEX, NXTRG DESTROYS ; A, B, C, D, E, H, L, F/F'S REG 0092 0601 MVI B, DOT ;ARG-DOT IN ADDRESS

FIELD OF DISPLAY 0094 CDD701 CALL CLEAR ;CLEAR DISPLAY 0097 CD4403 CALL SETRG ;GET REGISTER

DESIGNATOR FROM KEYBOARD AND SET REGISTER/POINTER ACCORDINGLY WAS CHARACTER A REGISTER DESIGNATOR

FALSE ERR ;NO-DISPLAY ERROR MSG. AND TERMINATE COMMAND

009A D21502 JNC ERR EXAM05 009D CD0903 CALL RGNAM ;OUTPUT REGISTER NAME

TO ADDRESS FIELD 00A0 CDFC02 CALL RGLOC ;GET REGISTER SAVE

LOCATION IN H & L

D-10

00A3 7E MOV A, M ;GET REGISTER CONTENTS 00A4 32F8FF STA CURDT ;STORE REGISTER

CONTENTS AT CURRENT DATA

00A7 0601 MVI B, DOT ;ARG-DOT IN DATA FIELD 00A9 CD6B03 CALL UPDOT ;UPDATE DATA FIELD OF

DISPLAY 00AC 0601 MVI A, DTFLD ;ARG-USE DATA FIELD OF

DISPLAY 00AE CD2B02 CALL GTHEX ;GET HEX DIGIT-WERE ANY

DIGIT RECEIVED FALSE EXM10;NO-DOT UPDATE REG.CONTENT

00B1 D2B800 JNC EXM10 00B4 CDFC02 CALL RGLOC ;YES GET REGISTER SAVE

LOCATION IN H & L 00B7 73 MOV M, E ;UPDATE REGISTER

CONTENTS EXAM10 00B8 FE11 CPI PERIO ;WAS LAST CHARACTER A

PERIOD ? 00BA CAE901 JZ CLDIS ;YES CLEAR DISPLAY AND

TERMINATE COMMAND 00BD FE10 CPI COMMA ;WAS LAST CHARACTER. ? 00BF C2E60D JNZ PRRG ;NO JUMP TO PREVIOUS

REG. 00C2 CDA802 CALL NXTRG ;YES ADVANCE REG.

POINTER TO NEXT REG. ANY MORE REGISTER TRUE EXAM05 ;YES CONTINUE PROCESSING WITH NEXT REGISTER

00C5 DA9D00 JC EXAM05 00C8 C3E901 JMP CLDIS ;NO CLEAR DISPLAY AND

TERMINATE COMMAND

************************************************* FUNCTION RUN -EXECUTE USER PROGRAM INPUTS ; NONE OUTPUTS ; NONE CALLS ; DISPC, RDKBD, CLEAR, ERR, OUTPT DESTROYS ; A, B, C, D, E, H, L, F/F'S

Page 48: Microprocessor 8085

D-11

RUN 00CB CD0002 CALL DISPC ;DISPLAY USEER PROGRAM

COUNTER 00CE CDE702 CALL RDKBD ;READ FROM KEYBOARD 00D1 FE11 CPI PERIO ;IS CHAR. IS PERIOD ? 00D3 CAEC0 JZ GIO ;YES GO EXECUTE THE

COMMAND ;NO ARG CHARACTER IS IN A 00D6 32FEFF STA IBUFF ;REPLACE CHARACTER IN

INPUT BUFFER 00D9 0601 MVI B, DOT ;ARG DOT IN ADDRESS

FIELD 00DB CDD701 CALL CLEAR ;CLEAR DISPLAY 00DE 0600 MVI B, ADFLD ;ARG USE ADDRESS FIELD 00E0 CD2B02 CALL GTHEX ;GET HEX DIGITS 00E3 FE11 CPI PERIO ;WASLASTCHAR. A PERIOD 00E5 C21902 JNZ ERR ;NO-DISPLAY ERROR MSG.

AND TERMINATE COMMAND 00E8 EB ECHG ;PUT HEX VALUE FROM

GTHEX TO H & L 00E9 22F2FF SHLD PSAV ;HEX VALUE IS NEW USER

PC 00EC 0600 G10 MVI B, NODOT ;YES-ARG-NO DOT IN

ADDRESS FIELD 00EE CDD701 CALL CLEAR ;CLEAR DISPLAY 00F1 AF XRA A ;ARG-USE-NO ADDRESS

FIELD OF DISPLAY 00F2 0600 MVI B, NODOT ;ARG-NO DOT IN

ADDR. FIELD 00F4 21A203 LXI H, EXMSG ;GET ADDRESS OF

EXECUTION MESSAGE IN H & L

00F7 CDB702 CALL OUTPT ;DISPLAY EXECUTION MESSAGE

D-12

00FA C31B03 JMP RSTOR ;RESTORE USER REG.INCLUDING PROGRAM COUNTER i.e.BEGIN EXECUTION OF USER PROGRAM

************************************************************** FUCTION ; STEP-SINGLE STEP(EXECUTE 1 USER

INSTRUCTION) INPUTS ; NONE

OUTPUTS ; NONE CALLS ; DISPC, RDKBD, CLEAR, GTHEX, ERR DESTROYS; A, B, C, D, E, H, L, F/F'S STEP

00FD CD0002 CALL DISPC ;DISPLAY USER PROG.COUNTER

0100 CDE702 CALL RDKBD ;READ FROM KEYBOARD 0103 FE11 CPI PERIO ;WAS CHARACTER A

PERIOD? 0105 CAE901 JZ STP20 ;YES GO TO STP20 0108 FE10 CPI COMMA ;WAS LAST CHARATER '.'? 010A CA2601 JZ CLD1S ;YES-GO SET TIMER

NO-CHARACTER FROM KEYBOARD WAS NEITHER PERIOD NOR COMMA

010D 32FEFF STA IBUFF ;REPLACE THE CHARACTER IN THE INPUT BUFFER

0110 0601 MVI A, DOT ;ARG-DOT IN ADDRESS FIELD

0112 CDD701 CALL CLEAR ;CLEAR DISPLAY 0115 0600 MVI B, ADFLD ;ARG-USE ADDRESS FIELD

OF DISPLAY 0117 CD2B02 CALL GTHEX ;GET HEX DIGIT-WERE ANY DIGITS RECIEVED ? FALSE ERR ;NO DISPLAY ERROR MSG.

AND TERMINATE COMMAND 011A D21502 JNC ERR

Page 49: Microprocessor 8085

D-13

011D EB XCHG ;HEX VALUE FROM GTHEX TO HL 011E 22F2FF SHLDX PSAV ;HEX VALUE IN NEW USER PC 0121 FE11 CPI PERIO ;WAS LAST CHAR. FROM GTHEX A

PERIOD ? 0123 C4190A CNZ STP0 ;NO-GO TO CHECK BREAK 0126 3AF1FF STP20 LDA ISAV ;GET USER INTERRUPT

MASK 0129 E608 ANI 08H ;KEEP INTERRUPT STATUS 012B 32FDFF STA TEMP ;SAVE USER INTERRUPT

STATUS 012E 2AF2FF LHLD PSAV ;GET USER PC 0131 7E MOV A, M ;GET USER INSTRUCTION 0132 FEF3 CPI (DI) ;DI INSTRUCTION ? 0134 C23B01 JNZ STP21 ;NO 0137 AF XRA A ;YES-RESET USER INTR.

STATUS 0138 C34201 STP21 JMP STP22 013B FEFB CPI (EI) ;EI INSTRUCTION ? 013D C24501 JNZ STP23 ;NO 0140 3E08 MVI A,08H ;YES SET USER INTR. STATUS 0142 32FDFF STP22 STA TEMP ;SAVE NEW USER INTR

STATUS 0145 3E40 MVI A,(TIMER SHR8);HIGH ORDER BITS OF

TIME OR TMODE VALUE OR'ED WITH MODE

0147 D30D OUT TIMHI 0149 3EC5 MVI A,TIMER AND 0FFH;LOW ORDER BITS

OFTIMER VAL 014B D30C OUT TIMLO 014D 3AFFFF LDA USCSR ;GRT USER IMAGE OF WHAT'S

IN CSR 0150 F6C0 ORI TSTRT ;SET TIMER COMMAND BITS

TO START TIMER 0152 D308 OUT CSR ;START TIMER 0154 C31B03 JMP RSTOR ;RESTORE USER REGISTERS 0157 F5 STP25 PUSH PSW ;BRANCH HERE WHEN TIMER

INTERRUPTS AFTER 1 USER INSTR 0158 3AFFFF LDA USCSR ;GET USER IMAGE WHAT'S IN

SCR 015B E63F ANI 3FH ;CLEAR TWO HIGH ORDER

BITS 015D F640 ORI 40H ;SET TIMER STOP BIT 015F DE08 OUT CSR ;STOP TIMER

D-14

0161 F1 POP PSW ;RETRIEVE PSW 0162 22EFFF SHLD PSAV ;SAVE H & L 0165 E1 POP H ;GET USER PROGRAM

COUNTER FROM TOP OF THE STACK

0166 22F2FF SHLD PSAV ;SAVE USER PC 0169 F5 PUSH PSW 016A E1 POP H 016B 22EDFF SHLD PSAV ;SAVE FLIP\FLOP & A REG. 016E 210000 LXI H, 0H ;CLEAR H & L 0171 39 DAD SP ;GET USER STACK POINTER 0172 22F4FF SHLD SSAV ;SAVE USER STACK

POINTER 0175 21EDFF LXI H, BSAV+1 ;SET MONITOR STACK

POINTER 0178 F9 SPHL ;SAVING REMAINING USER

REG 0179 C5 PUSH B ;SAVE B & C 017A D5 PUSH D ;SAVE D & C 017B 20 RIM ;GET USER INTERRUPT

MASK 017C E607 ANI 07H ;KEEP MASK BITS 017E 21FDFF LXI H, TEMP ;GET USER INTERRUPT

STATUS 0181 B6 ORA M ;OR IT INTO MASK 0182 32F1FF STA ISAV ;SAVE INTR. STATUS& MASK 0185 3E0E MVI A, UNMASK;UNMASK INTERRUPT

FOR MONITOR USE 0187 30 SIM 0188 C34B0A JMP SSTEP ;GO GET READY FOR

ANOTHER INSTR.

Page 50: Microprocessor 8085

D-15 *************************************************** FUNCTION : SET-SUBSTITUTE MEMORY INPUTS : NONE OUTPUTS : NONE CALLS : CLEAR, GTHEX, UPADD, UPDDT, ERR DESTROYS : A, B, C, D, E, H, L, F/F'S SET 018B 0601 MVI B, DOT ;ARG-DOT IN ADDR. FIELD 018D CDD701 CALL CLEAR ;CLEAR THE DISPALY 0190 0600 MVI B, ADFLD ;ARG-USE ADDRESS FIELD

OF DISPLAY 0192 CD2B02 CALL GTHEX ;GET HEX DIGITS-WERE ANY

DIGIT RECIEVED FALSE ERR ;NO-DISPLAY ERROR MSG.

AND 0195 D21502 JNC ERR ;TERMINATE COMMAND 0198 EB XCHG ;ASSIGN HEX VALUE

RETURNED BY GTHEX TO CURRENT ADDR.

0199 22F6FF SHLD CURAD 019C CDBA0D SUB05 CALL CHK ;CALL CHK ROUTINE 019F 000000 NOP 01A1 0600 SUB MVI B, NODOT ;ARG-NO DOT IN ADDR.

FIELD 01A3 CD5F03 CALL UPDAD ;UPDATE ADDR.FIELD OF

DISPLAY 01A6 2AF6FF LHLD CURAD ;GET CURRENT ADDR. IN H &

L 01A9 7E MOV A, M ;GET DATA BYTE POINTED

TO BY CURRENT ADDRESS 01AA 32F8FF STA CURDT ;STORE DATA BYTE AT

CURRENT DATA 01AD 0601 MVI B, DOT ;ARG-DOT IN DATA FIELD

D-16

01AF CD6B03 CALL UPDDT ;UPDATE DATA FIELD OF DISPLAY

01B2 0601 MVI B, DTFLD ;ARG-USE DATA FIELD 01B4 CD2B02 CALL GTHEX ;GET HEX DIGITS-WERE ANY

HEX DIGITS RECIEVED? 01B7 F5 PUSH PSW ;SAVE LAST CHARACTER FALSE SUB10 ;NO LEAVE DATA

UNCHANGED 01B8 D2C401 JNC SUB10 ;AT CURRENT ADDRESS 01BB 2AF6FF LHLD CURAD ;YES-GET CURRENT

ADDRESS IN H & L 01BE 73 MOV M, E ;STORE NEW DATA AT

CURRENT ADDRESS MAKE SURE DATA WAS ACTUALLY STORED IN CASE CURRENT ADDRESS IN ROM OR IS NON-EXISTANT 01BF 7B MOV A, E ;DATA FOR A COMPARISON 01C0 BE CMP M ;WAS DATA STORED

CORRECTLY 01C1 C21502 JNZ ERR ;NO DISPLAY ERROR MSG.

AND TERMINATE COMMAND 01C4 C3C30D SUB10 JMP INRDCR ;INCREMENT

DECREMENT CHECK 01C7 22F6FF SUB20 SHLD CURAD 01CA C3A101 JMP SUB ;RETRIEVE LAST

CHARACTER 01CF FE11 SUB15 CPI PERIO ;WAS LAST CHARACTER '.'? 01D1 C21502 JNZ ERR ;NO-DISPLAY ERROR MSG.

AND TERMINATE COMMAND 01D4 C3E901 JMP CLDIS ;YES-CLEAR DISPALY AND TERMINATE COMMAND

Page 51: Microprocessor 8085

D-17 ********************************************** UTILITY ROUTINES ********************************************** FUNCTION : CLEAR-CLEAR THE DISPLAY INPUTS : B-DOT FLAG 1 - MEANS DOT IN ADDR. FIELD OF DISPLAY 0 - MEANS NO DOT OUTPUTS : NONE CALLS : OUTPT DESTROYS : A, B, C, D, E, H, L, F\F'S DESCRIPTION : CLEAR SENDS BLANK CHARACTERS

TO BOTH THE ADDRESS & DATA FIELD OF THE DISPLAY.IF THE

DOT FLAG IS SET THEN A DOT WILL APPEAR AT THE RIGHT EDGE OF THE ADDRESS FIELD.

CLEAR 01D7 AF XRA A ;ARG-USEADDRESS FIELD OF

DISPLAY ARG-FLAG FOR DOT IN ADDR. FIELD IN B

01D8 219A03 LXI H, BLNKS ;ARG-ADDRESS OF BLANKS FOR DISPLAY 01DB CDB702 CALL OUTPT ;O/P BLANKSTOADDR.FIELD 01DE 3E01 MVI A, DTFLD ;ARG-USE DATA FIELD FOR

DISPLAY 01E0 0600 MVI B, NODOT ;ARG-USE NO DOT IN DATA

FIELD 01E2 219A03 LXI H, BLNKS ;ARG-ADDRESS OF BLANKS

FOR DISPLAY 01E5 CDB702 CALL OUTPT ;OUTPUT BLANKS TO DATA

FIELD 01E8 C9 RET ;RETURN

D-18

******************************************************************* FUNCTION : CLDIS-CLEAR DISPLAY AND TERMINATE

COMMAND INPUTS : NONE

OUTPUTS : NONE CALLS : CLEAR DESTROYS : A, B, C, D, E, H, L, F/F'S DESCRIPTION : CLDIS IS JUMPED TO BY COMMAND

ROUTINES WISHING TO TERMINATE NORMALLY. CLDIS CLEARS THE DISPLAY AND BRANCHES TO THE

COMMAND RECOGNISER. 01E9 0600 CLDIS MVI B, NODOT ;ARG-NO DOT IN ADDR.

FIELD 01EB CDD701 CALL CLEAR ;CLEAR THE DISPLAY 01EE C36600 JMP COMMAND ;GO GET ANOTHER

COMMAND **************************************************** FUNCTION : CLDST -COLD START INPUTS : NONE OUTPUTS : NONE CALLS : NOTHING DESTROYS : A DESCRIPTION : CLDST IS JUMPED BY THE MAIN

COLD START PROCEDURE,COMPLETES COLD START INITIALIZATION

AND JUMPS BACK TO THE MAIN COLD START PROCEDURE.

CLDST 01F1 3EC0 MVI A, KBINT ;GET CONTROL CHAR. 01F3 D30500 OUT CNTRL ;INITIALIZE KEYBOARD/ DISPLAY BLANKING 01F7 3E00 MVI A, CSNIT ;INITIAL VALUE OF

COMMAND STATUS REG. 01F8 D308 OUT CSR ;INITIALIZE CSR 01FA 32FFFF STA USCSR ;INITIALIZE USER CSR VALUE 01FD C32B0E JMP CLD0 ;BACK TO MAIN PROCEDURE

Page 52: Microprocessor 8085

D-19 *************************************************************** FUNCTION : DISPC-DISPLAY PROGRAM COUNTER INPUTS : NONE OUTPUTS : NONE CALLS : UPDAD,UPDDT DESTYROYS: A, B, C, D, E, H, L, F\F'S DESCRIPTION : DISPC- DISPLAYS THE USER

PROGRAM COUNTER IN ADDRESS FIELD OF THE DISPLAY,WITH A DOT AT THE RIGHT EDGE OF THE FIELD.THE BYTE OF DATA ADDRESSED BY THE PROGRAM COUNTER IS DISPLAYED IN THE DATA FIELD OF DISPLAY

DISPC 0200 2AF2FF LHLD PSAV ;GET USER PROGRAM

COUNTER 0203 22F6FF SHLD CURAD ;MAKE IT THE CURRENT ADDRESS 0206 7E MOV A, M ;GET THE INSTRUCTION AT THAT ADDRESS 0207 32F8FF STA CURDT ;MAKE IT THE CURRENT

DATA 020A 0601 MVI B, DOT ;ARG-DOT IN ADDRESS

FIELD 020C CD5F03 CALL UPDAD ;UPDATE ADDRESS FIELD OF DISPLAY 020F 0600 MVI B, NODOT ;ARG-NO DOT IN DATA FIELD 0211 CD6B03 CALL UPDDT ;UPDATE DATA FIELD OF

DISPLAY 0214 C9 RET

D-20

********************************************* FUNCTION : ERR-DISPLAY ERROR MASSEGE INPUTS : NONE OUTPUTS : NONE CALL : OUTPT DESTROYS : A, B, C, D, E, H, L, F\F'S DESCRIPTION : ERR IS JUMPED TO BY COMMAND

ROUTINES WISHING TO TERMINATE BECAUSE OF AN ERROR ERR OUTPUTS AN ERROR MESSEGS TO THE DISPLAY AND BRANCHES TO THE COMMAND RECOGNISER.

ERR 0215 AF XRA A ;ARG-USE ADDRESS FIELD 0216 0600 MVI B, NODOT ;ARG-NO DOT IN ADDRESS

FIELD 0218 219E03 LXI H, ERMSG ;ARG-ADDRESS OF ERROR

MESSAGE 021B CDB702 CALL OUTPT ;OUTPUT ERROR MESSAGE TO ADDRESS FIELD 021E 3E01 MVI A, DTFLD ;ARG-USE DATA FIELD 0220 0600 MVI B, NODOT ;ARG-NO DOT IN DATA FIELD 0222 219A03 LXI H, BLNKS ;ARG-ADDRESS OF BLANKS

FOR 0225 CDB702 CALL OUTPT ;OUTPUT BLANKS TO DATA

FOR DISPLAY 0228 C36600 JMP CMMND ;GO GET A NEW COMMAND

Page 53: Microprocessor 8085

D-21 ******************************************** FUNCTION : GTHEX-GET HEX DIGITS INPUTS : B - DISPLAY FLAG -0 MEANS USE ADDRESS

FIELD OF DISPLAY 1 - MEANS USE DATA FIELD OF DISPLAY

OUTPUTS : A - LAST CHARACTER READ FROM KEYBOARD DE - HEX DIGITS FROM KEYBOARD EVALUATED MODULO 2**16 CARRY - SET IF AT LEAST ONE VALID HEX DIGIT WAS READ RESET OTHERWISE

CALLS : RDKBD, INSDG, HXDSP, OUTPT DESTROYS: A, B, C, D, E, H, L, F\F'S DESCRIPTION : GTHEX ACCEPTS A STRING OF HEX

DIGITS FROM THE KEYBOARD, DISPLAYS THEM AS THEY ARE RECIEVED AND RETURNS THEIR VALUE AS A 16 BIT INTEGER. IF MORE TAHN 4 HEX DIGITS ARE RECIEVED ONLY THE LAST 2 HEX DIGITS ARE DISPLAYED IN THE

DATA OF THE DISPLAY. IN EITHER CASE,A DOT WILL BE DISPLAYED AT THE RIGHTMOST EDGE OF THE FIELD. A CHARACTER WHICH IS NOT A HEX DIGIT TERMINATES

THE STRING AND IS RETURNED AS AN OUTPUT OF THE FUCTION. IF THE TERMINATORS IS NOT A PERIOD OR A COMMA THEN ANY HEX DIGITS WHICH MAY HAVE

RECIEVED ARE CONSIDERED TO BE INVALID. THE FUNCTION RETURNS A FLAG INDICATING WHETHER

OR NOT ANY VALID HEX DIGITS WERE RECIEVED.

022B 0E00 GTHEX MVI C, 00 ;RESET HEX DIGIT

FLAG 022D C5 PUSH B ;SAVE DISPLAY AND HEX

DIGIT FLAGS 022E 110000 LXI D, 0 ;SET HEX VALUE TO ZERO 0231 D5 PUSH D ;SAVE HEX VALUE 0232 CDE702 GTH05 CALL RDKBD ;READ KEYBOARD

D-22

0235 FE10 CPI 10H ;IS CHAR. A HEX DIGIT? 0237 D25502 JNC GTH20 ;NO-GO CHECK FOR

TERMINATOR. YES-ARG-NEW HEX DIGIT IS

IN A 023A D1 POP D ;ARG-RETRIEVE HEX VALUE 023B CD9F02 CALL INSDG ;INSERT NEW DIGIT IN HEX

VALUE 023E C1 POP B ;RETRIEVE DISPLAY FLAG 023F 0301 MVI C, 1 ;SET HEX DIGIT FLAG i.e. HEX DIGIT HAS BEEN READ 0241 C5 PUSH B ;SAVE DISPLAY AND HEX

DIGIT FLAGS 0242 D5 PUSH D ;SAVE HEX VALUE 0243 78 MOV A, B ;TEST DISPLAY FLAG 0244 0F RRC ;SHOULD ADDRESS FIELD

FIELD OF DISPLAY BE USED 0245 D24902 JNC GTH10 ;YES-USE HEX VALUE AS IS NO-ONLYLOWORDER BYTE

OF HEX VALUE SHOULD BE USED FOR DATA FIELD OF DISPLAY

0248 53 MOV D, E ;PUT LOW ORDER BYTE OF HEX VALUE IN D

ARG-HEX VALUE TO BE EXPANDED IN D & E

0249 CD6C02 GTH10 CALL HXDSP ;EXPAND HEX VALUE FOR DISPLAY ARG- ADDRESS OF EXPANDED HEX VALUE IN H & L

024C 78 MOV A, B ;ARG-PUT DISPLAY FLAG IN A

024D 0601 MVI B, DOT ;ARG-DOT IN APPROPRIATE FIELD

024F CDB702 CALL OUTPT ;OUTPUT HEX VALUETO DISPLAY

0252 C33202 JMP GTH05 ;GOGETNEXT CHARACTER ;LAST CHAR WAS NOT A HEX

DIGIT 0255 D1 GTH20 POP D ;RETRIEVE A HEX VALUE 0256 C1 POP B ;RETRIEVE HEX DIGIT FLAG

IN C 0257 C33202 JMP VALCH ;VALIDITY CHECK

Page 54: Microprocessor 8085

D-23

025A 0000 NOP ;YES-READY TO RETURN 025C FE11 CPI PERIO ;NO-WAS LAST CHAR. '.'? 025E CA6702 JZ GTH25 ;YES READY TO RETURN `NO-INVALID TERMINATOR-

IGNORE ANY HEX DIGIT READ

0261 110000 LXI D, 0 ;SET HEX VALUE TO ZERO 0264 C3F702 JMP RETF ;RETURN FALSE 0267 47 GTH25 MOV B, A ;SAVE LAST CHARACTER 0268 79 MOV A, C ;FHIFT HEX DIGIT FLAG TO 0269 0F RRC ;CARRY BIT 026A 78 MOV A, B ;RESTORE LAST

CHARACTER 026B C9 RET ;RETTURN

*************************************************** FUNCTION : HXDSP-EXPAND HEX DIGITS FOR DISPLAY INPUTS : DE-4 HEX DIGITS OUTPUTS : HL-ADDRESS OF OUTPUT BUFFER CALLS : NOTHING DESTROYS : A, H, L, F/F'S DESCRIPTION : HXDSP EXPANDS EACH INPUT BYTE

TO 2 BYTE IN A FORM SUITABLE FOR DISPLAY BY THE OUTPUT

ROUTINES.EACH HEX DIGIT IS PLACED IN THE LOW ORDER 4 BITS OF A BYTE WHOSE HIGH ORDER 4 BITS ARE SET TO ZERO. THE RESULTING BYTE IS STORED

IN THE OUTPUT BUFFER THE FUNCTION RETURNS THE

ADDRESS OF THE OUTPUT BUFFER. HXDSP 026C 7A MOV A, D ;GET FIRST DATA BYTE

D-24

026D 0F RRC ;CONVERT 4 HIGH ORDER BITS TO A SINGLE CHARACTER

026E 0F RRC 026F 0F RRC 0270 0F RRC 0271 E60F ANI 0FH 0273 21F9FF LXI H, BUFF ;GET ADDR.OF OUTPUT

BUFFER 0276 77 MOV M, A ;STORE CHAR.IN O/P

BUFFER 0277 7A MOV A, D ;GET FIRST DATA BYTE AND

CONVERT 4 LOW ORDER BITS TO A SINGLE CHARACTER.

0278 E60F ANI 0FH 027A 23 INX H ;NEXT BUFFER POSITION 027B 77 MOV M, A ;STORE CHAR.IN BUFFER 027C 7B MOV A, E ;GET SECOND DATA BYTE 027D 0F RRC ;CONVERT 4 HIGH ORDER 027E 0F RRC ;BITS TO A SINGLE CHAR. 027F 0F RRC 0280 0F RRC 0281 E60F ANI 0FH 0283 23 INX H ;NEXT BUFFER POSITION 0284 77 MOV M, A ;STORE CHAR. IN BUFFER 0285 7B MOV A, E ;GET SECOND DATA BYTE & ;CONVERT LOW ORDER 4

BIT 0286 E60F ANI 0FH ;TO A SINGLE CHARACTER 0288 23 INX H ;NEXT BUFFER POSITION 0289 77 MOV M, A ;STORE CHAR. IN BUFFER 028A 21F9FF LXI H, OBUFF ;RETURN ADDRESS OF

OUTPUT 028D C9 RET ;BUFFER IN H & L

Page 55: Microprocessor 8085

D-25 028E DB05 INBYTE IN, STATUS ;GET 8279 FIFO 0290 E607 ANI,07 ;STATUS & KEEP 0292 FE00 CPI,00 ;COUNT 0294 CA8E02 JZ,INBYTE ;IF NO ENTRY WAIT 0297 3E40 MVI A,40H ;IF ENTRY OF

KEYBOARD IN 0299 D305 OUT 05H ;FIFO 029B DB04 IN,DATA ;THEN GET BYTE IN

ACC. 029D C9 RET 029E FF ;BLANK **************************************************************** FUNCTION : INSDG-INSERT HEX DIGIT INPUTS : A - HEX DIGIT TO BE INSERTED DE - HEX VALUE OUTPUTS : DE - HEX VALUE WITH DIGIT INSERTED CALLS : NOTHING DESTROYS : A, F/F'S DESCRIPTION : INSDG SHIFTS THE CONTENTS OF D

& E. LEFT 4 BITS (1 HEX DIGIT) & INSERTS THE HEX DIGIT INA. THE LOW ORDER DIGIT POSITION OF THE RESULT. A IS ASSUMED TO CONTAIN A SINGLE HEX DIGIT IN

THE LOW ORDER 4 BITS AND ZEROS IN THE HIGH ORDER

4 BITS. ***************************************************************** 029F EB XCHG ;PUT D & E IN H & L 02A0 29 DAD H 02A1 29 DAD H 02A2 29 DAD H 02A3 29 DAD H 02A4 85 ADD L ;INSERT LOW ORDER DIGIT 02A5 6F MOV L, A 02A6 EB XCHG ;PUT H & L IN D & E 02A7 C9 RET

D-26

******************************************************** FUNCTION : NXTRG - ADVANCE REGISTER POINTER TO

NEXT REG. INPUTS : NONE OUTPUTS : CARRY - 1 IF POINTER IS AADVANNCE

SUCCESSFULLY 0 OTHERWISE CALLS : NOTHING DESTROYS : A, F/F'S DESCRIPTION : IF THE REG.POINTER POINTS TO

THE LAST REG. IN THE EXAMINE REG. SEQUENCE,

THE POINTER IS NOT CHANGED AND THE

FUNCTION RETURNS FALSE. IF THE REG. POINTER DOES NOT

POINT TO THE LAST REG. THEN THE POINTER IS

ADVANCED TO THE NEXT REG. IN THE SEQUENCE & THE

FUNCTION RETURNS TRUE. NXTRG 02A8 3AFDFF LDA RDPTR ;GET REG. POINTER 02AB FE0C CPI NUMRG-1 ;DOES POINTER POINT TO

LAST REGISTER 02AD D2F702 JNC RETF ;YES-UNABLE TO ADVANCE

POINTER RETURN ELSE 02B0 3C INR A ;NO ADVANCE REG.POINTER 02B1 32FDFF STA RGPTR ;SAVE REGISTER POINTER 02B4 C3FA02 JMP RETT ;RETURN TRUE

Page 56: Microprocessor 8085

D-27 **************************************************** FUNCTION : OUTPUT - O/P CHARACTER TO DISPLAY INPUTS : A - DISPLAY FLAG 0=USE ADDRESS FIELD 1 = USE DATA FIELD B - DOT FLAG 1 = O/P DOT AT RIGHT EDGE OF

FIELD 0 = NO DOT

HL - ADDRESS OF CHARACTER TO BE OUTPUT CALLS : NOTHING DESTROYS : A, B, C, D, E, H, L, F/F'S DESCRIPTION : OUTPUT SENDS CHARCTERS TO

THE DISPLAY. THE ADDRESS OF THE CHARACTER IS RECIEVED

AS AN ARGUMENT EITHER 2 CHARACTERS ARE SENT TO THE

DATA FIELD,OR 4 CHARACTERS ARE SENT TO THE ADDRESS FIELD ? DEPANDING ON THE DISPLAY FLAG ARGUMENT THE DOT FLAG ARGUMENT DETERMINES WHETHER OR NOT A DOT (DECIMAL POINT) WILL BE SENT ALONGWITH THE LAST OUTPUT CHARACTER.

OUTPT 02B7 0F RRC ;USE DATA FIELD? 02B8 DAC202 JC OUT05;YES-GO SET UP TO USE DATA

FIELD 02BB 0E04 MVI C, 4 ;NO-COUNT FOR ADDR.

FIELD 02BD 3E90 MVI A, ADISP ;CONTROL CHARCTER FOR

OUTPUT TO ADDRESS FIELD OF DISPLAY

02BF C3C602 JMP OUT10 02C2 0E02 OUT05 MVI C, 2;COUNT FOR DATA FIELD

D-28 02C4 3E94 MVI A, DDISP ;CONTROL CHARACTER FOR

O/P TO DATA FIELD OF DISPLAY

02CC6 D30500 OUT10 OUT CNTRL 02C9 7E OUT15 MOV A, M ;GET O/P CHARACTER 02CA EB XCHG ;SAVE O/P CHARACTER

ADDRESS IN D & E 02CB 217803 LXI H, DSPTB ;GET DISPLAY FORMAT

TABLE ADDRESS 02CE 85 ADD L ;USE O/P CHARACTER AS A

POINTER TO DISPLAY FORMAT TABLE

02CF 6F MOV L, A 02D0 7E MOV A, M ;GETDISPLAYFORMAT

CHARACTER FROM TABLE 02D1 61 MOV H, C ;TEST COUNTER WITHOUT

CHANGING IT 02D2 25 DCR H ;IS THIS THE LAST

CHARACTER 02D3 C2DC02 JNZ OUT20 ;NO-GO OUTPUT CHAR.

AS IS 02D6 05 DCR B ;YES-IS DOT FLAG SET? 02D7 C2DC02 JNZ OUT20 ;NO-GO OUTPUT CHAR.

AS IS 02DA F601 ORI DTMSK ;YES-ORINMASKTO DISPLAY

DOT WITH LAST CHARACTER 02DC 00 OUT20 NOP 02DD D30400 OUT DSPLY ;SEND CHARACTER TO

DISPLAY 02E0 EB XCHG ;RETRIEVE O/P

CHAR.ADDRESS 02E1 23 INX H ;NEXT O/P CHARACTER 02E2 0D DCR C ;ANY MORE O/P CHARACTER 02E3 C2C902 JNZ OUT15 ;YES-GO PROCESS

ANOTHER CHARACTER 02E6 C9 RET ;NO-RETURN

Page 57: Microprocessor 8085

D-29 **************************************************** FUNCTION : RDKBD-READ KEYBOARD INPUTS : NONE OUTPUTS : A - CHARCATER READ FROM KEYBOARD CALLS : NOTHING DESTROYS : A, H, L, F/F'S DESCRIPTION : RDKBD DETERMINES WHETHER OR

NOT THERE IS A CHARACTER IN THE INPUFT BUFFER IF NOT THE

FUNCTION ENABLES INTERRUPTS AND LOOPS UNTIL THE INPUT INTERRUPT ROUTINE STORES A CHARACTER IN THE BUFFER.WHEN THE BUFFER CONTAINS A

CHARACTER,THE FUNCTION FLAGS THE BUFFER AS EMPTY AND RETURNS THE CHARACTER AS OUTPUT.

RDKBD 02E7 21FFFF LXI H,IBUFF 02EA 7E MOV A, M 02EB B7 ORA A ;IF HIGHER ORDER BIT 02EC F2F302 JP RDKIO ;ONE THEN 02EF F3 DI ;BUFFER EMPTY,DISABLE

INT. 02F0 CD8E02 CALL INBYT ;INPUT BYTE 02F3 3680 RDKIO MVI M, EMPTY ;SET B 02F5 FB EI 02F6 C9 RET ******************************************************* FUNCTION : RETF-RETURN FALSE INPUTS : NONE OUTPUTS : CARRY =0 FALSE CALLS : NOTHING DESTROYS : CARRY DESCRIPTION : RETF IS JUMPED TO BY FUNCTIONS

WISHING TO RETURN FALSE.RETF RESETS CARRY TO 0 AND RETURNS

TO THE CALLER OF THE ROUTINE INVOKING RETF.

RETF 02F7 37 STC ;SET CARRY TRUE

D-30 02F8 3F CMC ;COMPLEMENT CARRY TO MAKE 02F9 RET ;IT FALSE ******************************************************* FUNCTION : RETT-RETURN TRUE INPUTS : NONE OUTPUTS : CARRY=1 TRUE CALLS : NOTHING DESTROYS : CARRY DESCRIPTION : RETT IS JUMPED TP BY ROUTINES

WISHING TO RETURN TRUE. RETT SETS CARRY TO 1 AND RETURNS

TO THE CALLER OF THE ROUTINE INVOKING RETT.

RETT 02FA 37 STC ;SET CARRY TRUE 02FB C9 RET ******************************************************** FUNCTION : RGLOC-GET REGISTER SAVE LOCATION INPUTS : NONE OUTPUTS : HL-REGISTER SAVE LOCATION CALLS : NOTHING DESTROYS : B, C, H, L, F/F'S DESCRIPTION : RGLOC RETURNS THE SAVE

LOCATION OF THE REG. INDICATED BY THE CURRENT

REGISTER POINTER VALUE. RGLOC 02FC 2AFDFF LHLD RGPTR ;GET REG. POINTER 02FF 2600 MVI H, 0 ;IN H AND L 0301 01ED03 LXI B, RGTBL ;GET REG.SAVE

LOCATION TABLE ADDRESS

0304 09 DAD B ;POINTER INDEXES TABLE

0305 6E MOV L, M ;GET LOW ORDER BYTE OF REGISTER

SAVE LOCATION 0306 26FF MVI H,(RAMST SHR B) ;GET HIGH

ORDER BYTE OF 0308 C9 RET ;REGISTER SAVE

LOCATION

Page 58: Microprocessor 8085

D-31 *********************************************************** FUNCTION : RGNAM-DISPLAY REGISTER NAME INPUTS : NONE OUTPUTS : NONE CALLS : OUTPT DESTROYS : A, B, C, D, E, H, L, F/F'S DESCRIPTION : RGNAM DISPLAYS IN THE ADDRESS

FIELD OF THE DISPLAY, THE REGISTER NAME CORRESPONDING TO THE CURRENT REGISTER POINTER VALUE.

RGNAM 0309 2AFDFF LHLD RGPTR ;GET REGISTE POINTER 030C 2600 MVI H, 0 030E 29 DAD H ;MULTIPLY POINTERVALUE BY 4 030F 29 DAD H ;REG. NAME TABLE HAS 4 BYTE

ENTRIES) 0310 01B903 LXI B, NMTABL ;GET ADDRESS OF START OF

REGISTER NAME TABLE 0313 09 DAD B ;ARG-ADD TABLE ADDRESS TO

POINTER-RESULT IS ADDRESS OF APPROPRIATE REG.NAME IN H & L

0314 AF XRA A ;ARG-USE ADDRESS FIELD OF DISPLAY

0315 0600 MVI B, NODOT ;ARG-NO DOT IN ADDR.FIELD 0317 CDB702 CALL OUTPT ;OUTPUT REGISTER NAME TO 031A C9 RET ADDRES FIELD

D-32

******************************************************** FUNCTION : RSTOR-RESTORE USER REGISTER INPUTS : NONE OUTPUTS : NONE CALLS : NOTHING DESTROYS : A, B, C, D, E, H, L, F/F'S DESCRIPTION : RSTOR RESTORES SALL CPU

REGISTERS,FLIP/FLOPS, INTERUPT STATUS, INTERRUPT,

STACK POINTER AND PROGRAM COUNTER FROM THEIR

RESPACTIVE SAVE LOCATION IN MEMORY,BY RESTORING THE

PROGRAM COUNTER,THE ROUTINE EFFECTIVELY TRANSFERS

CONTROL TO THE ADDRESS IN THE PROGRAM COUNTER SAVE LOCATION.THE TIMING OF THIS ROUTINE IS CRITICAL TO THE

CORRECT OPERATION OF THE SINGLE STEP ROUTINE.

IF ANY MODIFICATION CHANGES THE NUMBER OF CPU STATUS NEEDED TO EXECUTE THE ROUTINE THEN THE TIMER VALUE MUST BE ADJUSTED BYTHE SAME NUMBER.THIS IS ALSO ENTRY POINT FOR THE TTY MONITOR

TO RESTORE THE REGISTER. RSTOR 031B 3AF1FF LDA ISAV ;GET USER INTERRUPT

MASK 031E F618 ORI 18H ;ENABLE SETTING OF

INTERRUPT MASK AND RESET RST7.5 FLIP FLOP

Page 59: Microprocessor 8085

D-33

0320 30 SIM ;RESTORE USER INTERRUPT MASK RESTORE USER INTERUPT STATUS

0321 3AF1FF LDA ISAV ;GET USER INTERRUPT MASK 0324 E608 ANI 08H ;SHOULD USER INTERRUPT BE

ENABLED 0326 CA2D03 JZ RST05 ;NO-LEAVE INTERRUPT DISABLED 0329 FB EI ;YES-ENABLE INTERRUPT FOR

USER PROGRAM 032A C33103 JMP RSR10 032D 37 RSR05 STC ;DUMMY INSTRUCTION-WHEN

SINGLE STEP ROUTINE IS BEING USED,THE

032E D23103 LNC RSR10 ;TIMER IS RUNNING AND EXECUTE TIME FOR THIS ROUTINE MUST NOT VARY

0331 21E9FF RSR10 LXI H, MNSTK ;SET MONITOR STACK POINTER TO START OF STACK

0334 F9 SPHL ;WHICH IS ALSO END OF REGISTER SAVE AREA 0335 D1 POP D ;RESTORE REGISTERS 0336 C1 POP B 0337 F1 POP PSW 0338 2AF4FF LHLD SSAV ;RESTORE USER STACK POINTER 033B F9 SPHL 033C 2AF2FF LHLD PSAV 033F E5 PUSH H ;PUT USER PROGRAM COUNTER ON

STACK 0340 2AEFFF LHLD LSAV ;RESTORE H & L REGISTERS 0343 C9 RET ;JUMP TO USER PROGRAM

COUNTER ******************************************************** FUNCTION : SETRG-SET REGISTER POINTER INPUTS : NONE OUTPUTS : CARRY-SET IF CHARACTER FROM KEYBOARD

IS A REGISTER DESIGNATOR RESET OTHERWISE.

CALLS : RDKBD DESTROYS : A, B, C, H, L, F/F'S DESCRIPTION :SETRG - READS A CHARACTER FROM THE

KEYBOARD IF THE CHARACTER IS A REGISTER DESIGNATOR, IT IS

D-34

CONVERTED TO THE CORROSPONDING REGISTER POINTER

VALUE, THE POINTER IS SAVED, AND THE FUNCTION RETURNS 'TRUE'.OTHERWISE,THE FUNCTION RETURNS'FALSE'

SETRG 0344 CDE702 CALL RDKBD ;READ FROM KEYBOARD 0347 FE11 CPI 10H ;IS CHARACTER A DIGIT? 0349 D2F702 JNC RETF ;NO-RETURN FALSE- CHARACTER IS NOT A REGISTER DESIGNATOR 034C D603 SUI 3 ;YES-TRY TO CONVERT

REGISTER DESIGNATOR TO INDEX INTO REGISTER

POINTER TABLE WAS CONVERSION SUCCESSFU?

034E DAF702 JC RETF ;NO-RETURN FALSE 0351 4F MOV C, A ;INDEX TO B & C 0352 0600 MVI B, 0 0354 21AC03 LXIH, RGPTB ;GET ADDRESS OF

REGISTER POINTER TABLE 0357 09 DAD B ;INDEX POINTS INTO TABLE 0358 7E MOV A, M ;GET REGISTER POINTER

FROM TABLE 0359 32FDFF STA RGPTR ;SAVE REGISTER POINTER 035C C3FA02 JMP RETT ;RETURN TRUE ******************************************************** FUNCTION : MODIAD-UPDATE ADDRESS FIELD OF

DISPLAY INPUTS : B - DOTFLAG - 1 MEANS PUT DOT AT

RIGHTEDGEOF FIELD OUTPUTS : NONE CALLS : HXDSP,OUTPT DESTROYS : A, B, C, D, E, H, L, F/F'S DESCRIPTION : UPDAD UPDATES THE ADDRESS

FIELD OF THE DISPLAY USING THE CURRENT ADDRESS

Page 60: Microprocessor 8085

D-35

MODIAD

035F 2AF6FF LHLD CURAD ;GET CURRENT ADDRESS 0362 EB XCHG ;ARG-PUT CURRENT IN D & E 0363 CD6C02 CALL HXDSP ;EXPAND CURRENT ADDRESS FOR

DISPALY. ARG-ADDRESS OF EXPANDED ADDRESS IS IN H & L

0366 AF XRA A ;ARG-USE ADDRESS FIELD OF DISPLAY

0367 CDB702 CALL OUTPT ;OUTPUT CURRENT ADDRESS TO ADDRESS FIELD

036A C9 RET ******************************************************** FUNCTION : MODIDT - UPDATE DATA FIELD OF DISPLAY INPUTS : B - DOT FLAG - 1 MEANS PUT DOT AT RIGHT OF

FIELD 0 MEANS NO DOT

OUTPUTS : NONE CALLS : HXDSP,OUTDT DESTROYS : A, B, C, D, E, H, L, F/F, S DESCRIPTION : UPDDT UPDATES THE DATA FIELD

OF THE DISPLAY USING THE CURRENT DATA BYTE

UPDDT: 036B 3AF8FF LDA CURDT ;GET CURRENT DATA 036E 57 MOV D, A ;ARG-PUT CURRENT DATA IN D 036F CD6C02 CALL HXDSP ;EXPAND CURRENT DATA FOR

DISPLAY. ARG-ADDRESS OF EXPANDED DATA IS IN H & L.

0372 3E01 MVI A, DTFLD ;ARG-USE DATA FIELD OF DISPLAY ARG-DOT FLAG IS IN B

0374 CDB702 CALL OUTPT ;OUTPUT CURRENT DATA TO DATA FIELD

0377 C9 RET 0378 00 FA

D-36

0379 01 A0 037A 02 7C 037B 03 F4 037C 04 A6 037D 05 D6 037E 06 DE 037F 07 B0 0380 08 FE 0381 09 B6 0382 0A BE 0383 0B CE 0384 0C 5A 0385 0D EC 0386 0E 5E 0387 0F 1E 0388 H AE 0389 L 4A 038A P 3E 038B I A0 038C r 0C 038D BLANK 00 038E n 8C 038F U EA 0391 h 8E 0391 G DA 0392 J E0 0393 y E6 0394 O CC 0395 3E46 4(19) 0397 01FF 0399 01FF

Page 61: Microprocessor 8085

D-37

MESSAGES FOR OUTPUT TO DISPLAY 039A 15 BLANKS DB BLANK, BLANK, BLANK, BLANK

;FOR ADDRESS OR DATA FIELD. 039B 15 039C 15 039D 15 039E 15 ERMSG DB BLANK, LETRE, LETRR, LETRR

;ERROR MESSAGE FOR ADDRESS FIELD

039F 0E 03A0 14 03A1 14 EXMSG DB LETRE, BLANK, BLANK, BLANK

;EXECUTION MESSAGE 03A2 0E 03A3 15 03A4 15 03A5 15 03A6 0F SGNAD DB F r I E

;SIGN ON MESSAGE (ADDR. FIELD) 03A7 14 03A8 13 03A9 0E 03AA 16 SGNDT DB n d

;SIGN ON MESSAGE(DATA FIELD)

******************************************************** RGPTB REGISTER POINTER TABLE :THE ENTRIES IN THIS TABLE ARE IN THE SAME

ORDER AS THE REGISTER DESIGNATOR KEYS ON THE

KEYBOARD EACH ENTRY CONTAINS THE REGISTER POINTER VALUE

WHICH CORROSPONDS TO THE REG. DESIGNATOR. REGISTER POINTER VALUES ARE USED TO POINT INTO THE REGISTER NAME TABLE

(NMTBL) AND REGISTER SAVE LOCATION TABLE (RGTBL).

03AC 06 DB 6 :INTERRUPT MASK 03AD 09 DB 9 :SPH 03AE 0A DB 10 :SPL 03AF 0B DB 11 :PCH

D-38 03B0 0C DB 12 :PCL 03B1 07 DB 7 :H 03B2 08 DB 8 :L 03B3 00 DB 0 :A 03B4 01 DB 1 :B 03B5 02 DB 2 :C 03B6 03 DB 3 :D 03B7 04 DB 4 :E 03B8 05 DB 5 :FLAGS ******************************************************** NMTBL : REGISTER NAME TABLE : NAMES OF REGISTER IN DISPLAY FORMAT 03B9 15 DB BLANK, BLANK, BLANK, LETRA ;A REGISTER 03BA 15 03BB 15 03BC 0A 03BD 15 DB BLANK, BLANK, BLANK, LETRB ;B REGISTER 03BE 15 03BF 15 03C0 0B 03C1 15 DB BLANK, BLANK, BLANK, LETRC ;C REGISTER 03C2 15 03C3 15 03C4 0C 03C5 15 DB BLANK, BLANK, BLANK, LETRD ;D REGISTER 03C6 15 03C7 15 03C8 0D 03C9 15 DB BLANK, BLANK, BLANK, LETRE ;E REGISTER 03CA 15 03CB 15 03CC 0E 03CD 15 DB BLANK, BLANK, BLANK, LETRF ;F REGISTER 03CE 15 03CF 15 03D0 0F

Page 62: Microprocessor 8085

D-39

03D1 15 DB BLANK, BLANK, BLANK, LETRI ;INTERRUPT MASK 03D2 15 03D3 15 03D4 13 03D5 15 DB BLANK, BLANK, BLANK, LETRH ;H REGISTER 03D6 15 03D7 15 03D8 10 03D9 15 DB BLAMK, BLANK, BLANK, LETRL ;L REGISTER 03DA 15 03DB 15 03DC 11 03DD 15 DB BLANK, LETRS, LETRP, LETRH ;STACK POINTER HIGH ORDER

BYTE 03DE 05 03DF 12 03E0 10 03E1 15 DB BLANK, LETRS, LETRP, LETRL ;STACK POINTER LOW ORDER BYTE 03E2 05 03E3 12 03E4 11 03E5 15 DB BLANK, LETRP, LETRC, LETRH ;PROGRAM COUNTER HIGH BYTE 03E6 12 03E7 0C 03E8 10 03E9 15 DB BLANK, LETRP, LETRC, LETRL ;PROGRAM COUNTER LOW BYTE 03EA 12 03EB 0C 03EC 11

D-40 ************************************************* REGISTER SAVE LOCATION TABLE ADDRESSES OF SAVE LOCATIONS OF REGISTERS IN THE

ORDER IN WHICH THE REGISTERS ARE DISPLAYED BY THE EXAMINE COMMAND

RGTBL 03ED EE DB ASAV AND OFFH ;A REGISTER 03EE EC DB BSAV AND OFFH ;B REGISTER 03EF EB DB CSAV AND OFFH ;C REGISTER 03F0 EA DB DSAV AND OFFH ;D REGISTER 03F1 E9 DB ESAV AND OFFH ;E REGISTER 03F2 ED DB FSAV AND OFFH ;FLAGS 03F3 F1 DB ISAV AND OFFH ;INTERRUPT MASK 03F4 F0 DB HSAV AND OFFH ;H REGISTER 03F5 EF DB LSAV AND OFFH ;L REGISTER 03F6 F5 DB SPHSV AND OFFH ;STACK POINTER

HIGH ORDER BYTE 03F7 F4 DB SPLSV AND OFFH ;STACK POINTER

LOW ORDER BYTE 03F8 F3 DB PCHSV AND OFFH ;PROGRAM

COUNTER HIGH ORDER BYTE

03F9 F2 DB OCKSV AND IFFG ;PROGRAM COUNTER LOW ORDER BYTE

000D NUMRG EQU ($ - RGTBL) ;/REGISTER SAVE TABLE LOCATION NUMBER

OF ENTRIES.

Page 63: Microprocessor 8085

D-41 ********************************************* T T Y PRINT SIGNON MESSAGE ********************************************* 03FA 218C07 SIGNON LXIH STRING D 4E S1 MOVC, M E AF XRAA F B1 ORAC 0400 C8 RZ 1 CDC405 CALLC OUT 4 23 INX H 0405 C3FD03 JUMP S1 ************************************************************* COMMAND RECOGNIZING ROUTINE ************************************************************* FUNCTION : GETCM INPUTS : NONE OUTPUTS : NONE CALLS : GETCH, ECHO, ERROR DESTROYS : A, B, C, H, L, F/F'S DESCRIPTION : GETCM RECEIVES AN INPUT

CHARATER FROM THE USER AND USER AND ATTEMPTS TO

LOCATE THIS CHARATER IN ITS COMMAND CHARATER TABLE. IF SUCCESSFUL,THE ROUTINE CORROSPONDING TO THIS IS SELECTED FROM A TABLE OF COMMAND ROUTINE ADDRESSES,

AND CONTROL IS TRANSFERED TO THIS ROUTINE. IF THE CHARATER DOES NOT MATCH ANY ENTRIES,CONTROL IS PASSED TO THE ERROR HANDLER.

GETCM 0408 21E9FF LXI H, MNSTK ;ALWAYS WAMT TO RESET

STACK PTR TO MONITOR 040B F9 SPHL ;STARTING VALUE SO

ROUTINE NEED NOT CLEAN UP

D-42 040C 0E2E MVI C,'.' ;PROMPT CHARCHTER TO C 040E CDF805 CALL ECHO ;SEND PROMPT CHARATER

TO USER TERMINAL 0411 C31404 JMP GTC03 ;WANT TO LEAVE ROOM FOR

RST BRANCH 0414 CD1F06 GTC03 CALL GETCH ;GET COMMAND

CHARATER TO A 0417 CDF805 CALL ECHO ;ECHO CHARCTER TO USER 041A 79 MOV A, C ;PUT COMMAND CHARCTER

INTO ACC. 041B 010600 LXI B, NCMDS ;C CONTAINS LOOP AND

INDEXCOUNT 041E 21AE07 LXI H, CTAB ;HL POINTS INTO COMMAND

TABLE 0421 BE GTC05 CMP M ;COMPARE TABLE ENTRY

AND CHARATER 0422 CA2D04 JZ GTC10 ;BRANCH IF EQUAL –

COMMAND RECOGNIZED 0425 23 INX H ;ELSE,INCREMENT TABLE

POINTER 0426 0D DCR C ;DECREMENT LOOP COUNT 0427 C22104 JNZ GTC05 ;BRANCH IF NOT AT TABLE

END 042A C31106 JMP ERROR ;ELSE COMMAND

CHARACTER IS ILLEGAL 042D 21A007 GTC10 LXI H, CADR ;IF GOOD COMMAND. LOAD

ADDRESS OR TABLE OF COMMAND ROUTINE ADDRESSES

0430 09 DAD B ;ADD WHAT IS LEFT OF LOOP COUNT

0431 09 DAD B ;ADD AGAIN -EACH ENTRY IN CADR IS 2 BYTES LONG

0432 7E MOV A, M ;GET LSP OF ADDRESS OF TABLE ENTRY TO A

0433 23 INX H ;POINT TO NEXT BYTE IN TABLE

0434 66 MOV H, M ;GET MSP OF ADDRESS OF TABLE ENTRY TO H

Page 64: Microprocessor 8085

D-43 0435 6F MOV L, A ;PUT LSP OF ADDRESS OF

TABLE ENTRY IMTO L 0436 E9 PCHL ;NEXT INSTRUCTION COMES

FROM COMMAND ROUTINE *************************************************************** COMMAND IMPLEMENTING ROUTINES *************************************************************** FUNCTION : DCMD INPUTS : NONE OUTPUTS : NONE CALLS : ECHO, NMOUT, HILO, GETCM,CROUT, GETNM DESTROYS : A, B, C, D, E, H, L, F/F'S DESCREPTION : DCMD IMPLEMENTS THE DISPLAY MEMORY (D) COMMAND DCMD 0437 0E02 MVI C, 2 ;GET 2 NUMBERS FROM

INPUT STREAM 0439 CD5B06 CALL GETNM 043C D1 POP D ;ENDING ADDRESS TO DE 043D E1 POP H ;STARTING ADDRESS TO HL DCMO5 043E CDEB05 CALL CROUT ;ECHO CARRIAGE

RETURN/LINE FEED 0441 7C MOV A, H ;DISPLAY ADDRESS OF

FIRST LOCATION IN LINE 0442 CDC706 CALL NMOUT 0445 7D MOV A, L ;ADDRESS IS 2 BYTES LONG 0446 CDC706 CALL NMOUT DCM10 0449 0E20 MVI C,'.' 044B CDF805 CALL ECHO ;USE BLANK AS SEPARATOR 044E 7E MOV A, M ;GET CONTENTS OF NEXT

MEMORY LOC.

D-44

044F CDC706 CALL NMOUT ;DISPLAY CONTENTS 0452 CDA006 CALL HILO ;SEE IF ADDRESS OF

DISPLAY LOC. IS GREATER THAN

OR EQUAL TO ENDING ADDRESS FALSE DCM15 ;IF NOT ,MORE TO

DISPLAY 0455 D25E04 JNC DCM15 0458 CDEB05 CALL CROUT ;CARRIGE

RETURN/LINE FEED TO END LINE

045B C30804 JMP GETCM ;ALL DOME 045E 23 DCM15 INX H ;IF MORE TO GO,

POINTS TO THE NEW DISPLAY

045F 7D MOV A,L GET LOW ORDER BITS OF NEW ADDRESS

0460 E60G ANI NEWLN ;SEE IF LAST HEX DIGIT OR ADDRESS DENOTES START OF NEWLINE

0462 C24904 JNZ DCM10 ;NO-DOT AT END OF LINE

0465 C33E04 JMP DCM05 ;YES-START NEW LINE WITH ADDRESS

Page 65: Microprocessor 8085

D-45 ******************************************************************************* FUNCTION : GCMD INPUTS : NONE OUTPUTS : NONE CALLS : ERROR, GETHX, RSTTF DESTROYS : A, B, C, D, E, H, L, F/F'S DESCRIPTION : GCMD IMPLEMENTS THE BEGIN

EXECUTION (G) COMMAND

0468 CD2606 GCMD CALL GETHX ;GET ADDRESS(IF PRESENT) FROM INPUT STREAM

FALSE GCM05 046B D27D04 JNC GCM05 ;BRANCH IF NO NU. PRESENT 046E 7A MOV A, D ;ELSE GET TERMINATOR 046F FE0D CPI CR ;SEE IF CARRIAGE RETURN 0471 C21106 JNZ ERROR ;ERROR IF NOT PROPERLY

TERMINATED 0474 21F2FF LXI H, PSAV ;WANT NU. TO REPLACE SAVE 1/4 PGM COUNTER 0477 71 MOV M, C 0478 23 INX H 0479 70 MOV M, B 047A C38304 JMP GCM10 047D 7A GCM05 MOV A, D ;IF NO STARTING ADDRESS

MAKE SURE THATCR TERMINATED COMMAND

047E FE0D CPI CR 0480 C21106 JNZ ERROR ;ERROR IF NOT 0483 C31B03 GCM10 JMP RSTOR ;RESTORE REG. AND BEGIN

EXECUTION (RSTOR IS IN KEYBOARD MONITOR)

D-46

***************************************************** FUNCTION : ICMD INPUTS : NONE OUTPUTS : NONE CALLS : ERROR, ECHO, GETCH, VALDL, VALDG, CNVBN,

STHLF, GETNM, GROUT DESTROYS : A, B, C, D, E, H, L, F/F'S DESCRIPTION : ICMD IMPLEMENTS THE INSERT

MODE INTO MEMORY (I) COMMAND 0468 0E01 ICMD MVI C, 1 0488 CD5B06 CALL GETNM ;GET SINGLE NU.

FROM INPUT STREAM

048B 3EFF MVI A, UPPER 048D 32FDFF STA TEMP ;TEMP WILL HOLD

THE UPPER/LOWER HALF BYTE FLAG

0490 D1 POP D 0491 CD1F06 ICM05 CALL GETCH ;GET A CHAR. FROM

INPUT STREAM 0494 4F MOV C, A 0495 CDF805 CALL ECHO ;ECHO IT 0498 79 MOV A, C ;PUT CAHR. BACK

INTO A 0499 FE1B CPI TERM ;SEE IF CHAR.IS A

TERMINATING CHARACTER 049B CAC704 JZ ICM25 ;IF SO ALL DONE

ENTERING CHARACTERS.

049E CD7907 CALL VALDL ;ELSE CHECK TO SEE IF VALID DELIMITER

TRUE ICM05 ;IF SO SIMPLY IGNORE THIS

CHARACTER 04A1 DA9104 JC ICM05 04A4 CD5E07 CALL VALDG ;ELSE CHECK TO SEE

IF VALID HEX DIGIT FALSE ICM20 ;IF NOT, BRANCH TO

HANDLE ERROR CONDITION

Page 66: Microprocessor 8085

D-47

04A7 D2C104 JNC ICM20 04AA CD100A CALL CNVBN ;CONVERT DIGIT TO BINARY 04AD 4F MOV C, A ;MOVE RESULT TO C 04AE CD3F07 CALL STHLF ;STORE IN APPROPRIATE

HALF WORD 04B1 3AFDFF LDA TEMP ;GET HALF BYTE FLAG 04B4 B7 ORA A ;SET F/F'S 04B5 C2B904 JNZ ICM10 ;BRANCH IF FLAG SET FOR

UPPER 04B8 13 INX D ;IF LOWER ,INC ADDRESS OF BYTE TO STORE IN 04B9 EEFF ICM10 XRI INVERT ;TOGGLE STATE OF FLAG 04BB 32FDFF STA TEMP ;PUT NEW VALUE OF FLAG

BACK 04BE C39104 JMP ICM05 ;PROCESS NEXT DIGIT 04C1 CD3407 ICM20 CALL STHFO ;ILLEGAL CHARACTER 04C4 C31106 JMP ERROR ;MAKE SURE ENTIRE BYTE FILLED THEN ERROR 04C7 CD3407 ICM25 CALL STHF0 ;HERE FOR ESCAPE

CHARACTER I/P IS DONE 04CA CDEB05 CALL CROUT ;ADD CARRIAGE RETURN 04CD C30804 JMP GETCM **************************************************** FUNCTION : MCMD

INPUTS : NONE OUTPUTS : NONE CALLS : GETCM, HILO, GETNM DESTROYS : A, B, C, D, E, H, L, F/F'S DECRIPTION : MCMD IMPLEMENTS THE MOVE DATA IN

MEMORY(M) COMMAND

D-48

MCMD 04D0 0E03 MVI C, 3 04D2 CD5B06 CALL GETNM ;GET 3 NUMBERS FROM

INPUT STREAM 04D5 C1 POP B ;DESTINATION ADDR. TO BC 04D6 E1 POP H ;ENDING ADDR. TO HL 04D7 D1 POP D ;STARTING ADDR TO DE 04D8 E5 MCM05 PUSH H ;SAVE ENDING ADDRESS 04D9 62 MOV H, D 04DA 6B MOV L, E ;SOURCE ADDR. TO HL 04DB 7E MOV A, M ;GET SOURCE BYTE 04DC 60 MOV H, B 04DD 69 MOV L, C ;DESTINATION ADDR. TO HL 04DE 77 MOV M, A ;MOVE BYTE TO

DESTINATION 04DF 03 INX B ;INR. DESTINATION

ADDRESS 04E0 78 MOV A, B 04E1 B1 ORA C ;TEST FOR DESTINATION

ADDR 04E2 CA0804 JZ GETCM ;IF SO CAN TERMINATE CMD. 04E5 13 INX D ;INCREMENT SIURCE

ADDRESS 04E6 E1 POP H ;ELSE GET BACKENDING

ADDR 04E7 CDA006 CALL HILO ;SEE IF ENDING

ADDR=SOURCE ADDR FALSE GETCM ;IF NOT COMMAND IS DONE

04EA D20804 JNC GETCM 04ED C3D804 JMP MCM05 ;MOVE ANOTHER BYTE

Page 67: Microprocessor 8085

D-49

**************************************************** FUNCTION : SCMD INPUTS : NONE CALLS : GETHX, GETCM, NMOUT, ECHO DESTROYS : A, B, C, D, E, H, L, F/F/'S DESCRIPTION : SCMD IMPLEMENTS THE

SUBSTITUTE INTO MEMORY (S) COMMAND SCMD

04F0 CD2606 CALL GETHX ;GET A NUMBER IF PRESENT, FROM INPUT

04F3 C5 PUSH B 04F4 E1 POP H ;GET NU. TO HL-DENOTES MEMORY LOCATION 04F5 7A SCM05 MOV A, D ;GET TERMINATOR 04F6 FE20 CPI '.' ;SEWE IF SPACE 04F8 CA0005 JZ SCM10 ;YES CONTINUE

PROCESSING 04FB FE2C CPI '.' ;ELSE SEE IF COMMA 04FD C20804 JNZ GWTCM ;NO TERMINATE COMMAND 0500 7E SCM10 MOV A, M ;GET CONTENTS OF

SPECIFIED LOCATION TO A 0501 CDC706 CALL NMOUT ;DISPLAY CONTENTS ON

CONSOLE 0504 0E2D MVI C,'.' 0506 CDF805 CALL ECHO ;USE DASH FOR SEPARATOR 0509 CD2606 CALL GETHX ;USE NEW VALUE FOR

MEMORY LOCATION IF ANY FALSE SCM15 ;IF NO VALUE PRESENT,BRANCH 050C D21005 JNC SCM15 050F 71 MOV M, C ;ELSE,STORE LOWER 8BIT OF NUMBER ENTERED 0510 23 SCM15 INX H ;INCREMENT ADDR. OF MEMORY LOCATION TO VIEW 0511 C3F504 JMP SCM05

D-50

********************************************************* FUNCTION : XCMD INPUTS : NONE OUTPUTS : NONE CALLS : GETCH, ECHO, REGDS, GETCM, ERROR, RGADR,

NMOUT, CROUT, GTHEX DESTROYS : A, B, C, D, E, H, L, F/F'S DESCRIPTION : XCMD IMPLEMENTS THE REGISTER

EXAMINE AND CHANGE (X) COMMAND.

0514 CD1F06 XCMD CALL GETCH ;GET REGISTER

INDENTIFIER 0517 4F MOV C, A 0518 CDF805 CALL ECHO ;ECHO IT 051B 79 MOV A, C 051C FE0D CPI CP 051E C22705 JNZ XCM05 ;BRANCH IF

NOTCARRIAGE RET 0521 CDEA06 CALL REGDS ;ELSE,DISPLAY

REG.CONTENTS 0524 C30804 JMP GETCM ;THEN TERMINATE

COMMAND 0527 4F XCM05 MOV C, A ;GET REG.IDENTIFIER

TO C 0528 CD1B07 CALL RGADR ;CONVERT

IDENTIFIER INTO RTAB TABLE ADDR

052B C5 PUSH B 052C E1 POP H ;PUT POINTER TO

REGISTER ENTRY INTO HL

052D 0E20 MVI C," 052F CDF805 CALL ECHO ;ECHO SPACE TO

USER 0532 79 MOV A, C 0533 32FDFF STA TEMP ;PUT SPACE INTO

TEMP AS DELIMITER 0536 3AFDFF XCM10 LDA TEMP ;GET TERMINATOR 0539 FE20 CPI '.' ;SEE IF A BLANK 053B CA4305 JZ XCM15 ;YES-GO CHECK

POINTER IN TABLE 053E FE2C CPI '.' ;NO SEE IF COMMA

Page 68: Microprocessor 8085

D-51

0540 C20804 JNZ GETCM ;NO-MUST BE CARRIAGE RETURN TO AN END COMMAND

0543 73 XCM15 MOV A, M 0544 B7 ORA A ;SET F/F'S 0545 C24E05 JNZ XCM16 ;BRANCH IF NOT AT END OF TABLE 0548 CDEB05 CALL CROUT ;ELSE O/P CARIAGE RETURN LINE FEED 054B C30804 JMP GETCM ;AND EXIT 054E E5 XCM18 PUSH H ;PUT POINTER ON

STACK 054F 5E MOV E, M 0550 16FF MOV D, RAMST SHR 8 ;ADDRESS OF SAVE

LOCATION FROM TABLE

0552 23 INX H 0553 46 MOV B, M ;FETCH LENGTH FLAG EROM

TABLE 0554 D5 PUSHD ;SAVE ADDR.OF SAVE

LOCATION 0555 D5 PUSH D 0556 E1 POP H ;MOVE ADDRESSS TO HL 0557 C5 PUSH B ;SAVE LENGTH FLAG 0558 7E MOV A, M ;GET 8 BITS OF REG FROM

SAVED LOCATION 0559 CDC706 CALL NMOUT ;DISPLAY IT 055C F1 POP PSW ;GET BACK LENGTH FLAG 055D F5 PUSH PSW ;SAVE IT AGAIN 055E B7 ORA A ;SET F/F'S 055F CA6705 JZ XCM20 ;IF8BIT REG.NOTHING TO

DISPLAY 0562 2B DCX H ;ELSE FOR 16 BIT REG.GET LOWER 8 BITS

D-52

0563 7E MOV A, M 0564 CDC706 CALL NMOUT ;DISPLAY THEM 0567 0E2D XCM20 MVI C,'-' 0569 CDF805 CALL ECHO ;USE DASH AS

SEPARATOR 056C CD2606 CALL GETHX ;SEE IF THERE IS A

VALUE TO PUT INTO REGISTER

FALSE XCM30 ;NO GO CHECKFORNEXT REG.

056F D28705 JNC XCM30 0572 7A MOV A, D 0573 32FDFF STA TEMP ;ELSE SAVE THE

TERMINATOR FOR NOW

0576 F1 POP PSW ;GET BACK LENGTH FLAG

0577 E1 POPH ;PUT ADDR.OFSAVE LOCATION INTO HL

0578 B7 ORA A ;SET F/F'S 0579 CA7E05 JZ XCM25 ;IF 8 BIT REG,

BRANCH 057C 70 MOV M, B ;SAVE UPPER 8 BITS 057D 2B DCX H ;POINT TO SAVE

LOCATION FOR LOWER 8 BITS

057E 71 XCM25 MOV M, C ;STORE ALL OF 8 BIT OR LOWER 1/2 OF 16 BIT REG.

057F 110300 XCM27 LXI D, RTABS ;SIZE OF ENTRY INRTAB TABLE

0582 E1 POP H ;POINTER INTO

REG.TABLE RTAB

Page 69: Microprocessor 8085

D-53

0583 19 DAD D ;ADD ENTRY SIZE TO POINTER 0584 C33605 JMP XCM10 ;DO NEXT REGISTER 0587 7A XCM30 MOV A, D ;GET TERMINATOR 0588 32FDFF STA TEMP ;SAVE IN MEMORY 058B D1 POP D ;CLEAR STACK OF LENGTH FLAG 058C D1 POP D & ADDR. OF SAVE LOCATION 058D C37F05 JMP XCM27 ;GO INCREMENT REG. TABLE

POINTER ******************************************************** UTILITY ROUTINE ******************************************************** FUNCTION : CI INPUTS : NONE OUTPUTS : A - CHARACTER FROM TTY CALLS : DELAY DESTROYS : A, F/F'S DESCRIPTION : CI WAITS UNTIL A CHAR. HAS BEEN

ENTERED AT THE TTY AND THEN RETURNS THE CHAR. VIA THE A REG. TO THE CALLING ROUTINE. THIS ROUTINE IS CALLED BY THE USER VIA A JUMP TABLE IN RAM

CI 0590 F3 DI 0591 E5 PUSH H 0592 0609 MVI B, BITS 0594 20 CI1 RIM 0595 B7 ORA A 0596 FA9405 JM CI1 0599 2A9AFF CHLD HALFBIT 059C 2D CI2 DCR L 059D C29C05 JNZ CI2 05A0 25 DCR H 05A1 C29C05 JNZ CI2 05A4 2AC0FF CI3 LHLD BITTIMC 05A7 2D CI4 DCR L 05A8 C2A705 JNZ CI4 05AB 25 DCR H 05AC C2A705 JNZ CI4 05AF 20 RIM 05B0 17 RAL

D-54

05B1 05 DCR B 05B2 CABC05 JZ CI5 05B5 79 MOV A, C 05B6 1F RAR 05B7 4F MOV C, A 05B8 00 NOP 05B9 C3A405 JMP CI3 05BC E1 CI5 POP H 05BD FB EI 05BE 79 MOV A, C 05BF C9FFFF JMP 3PASS 05C2 FF BLANK 05C3 FF BLANK **************************************************** FUNCTION : CO INPUTS : C-CHARACTER TO OUTPUT TO TTY OUTPUTS : C-CHARACTER OUTPUT TO TTY CALLS : DELAY DESTROYS : A, F/F'S DESCRIPTION : CO-SENDS ITS INPUT ARGUMENT

TO THE TTY. C0 05C4 F3 DI 05C5 C5 PUSH B 05C6 E5 PUSH H 05C7 060B MVI B, BITS0 05C9 AF XRA A 05CA 3E80 CO1 MVI A, 80H 05CC 1F RAR 05CD 30 SIM 05CE 2AC0FF LHLD BITTIME 05D1 2D CO2 DCR L 05D2 C2D105 JNZ CO2 05C5 25 DCR H 05C6 C2D105 JNZ CO2 05C9 37 STC 05CA 79 MOV A, C 05CB 1F RAR 05CC 4F MOV C, A 05CD 05 DCR B 05CE 2CA05 JNZ CO1

Page 70: Microprocessor 8085

D-55 05E1 E1 POP H 05E2 C1 POP B 05E3 FB EI 05E4 C9 RET 05E5 FF BLANK 05E6 FF BLANK 05E7 FF BLANK 05E8 FF BLANK 05E9 FF BLANK 05EA FF BLANK ******************************************************** FUNCTION : CROUT INPUTS : NONE OUTPUTS : NONE CALLS : ECHO DESTROYS : A, B, C, F/F'S DESCRIPTION : CROUT SENDS A CARRIAGE

RETURN AND HENCE A LINE FEED TO THE CONSOLE. CROUT 05EB 0E0D MVI C, CR 05ED CDF805 CALL ECHO 05F0 C9 RET

D-56

******************************************************** FUNCTION : DELAY INPUTS : DE - 16BIT INT.DENOTING NUMBER OF TIMES TO

LOOP. OUTPUTS : NOTHING DESTROYS : A, D, E, F/F'S DESCRIPTION : DELAY DOES NOT RETURN TO

CALLER UNTIL INPUT ARGUMENT IS COUNTED DOWN TO 0.

DELAY 05F1 1B DCX D ;DECREMENT INPUT ARG. 05F2 7A MOV A, D 05F3 B3 ORA E 05F4 C2F105 JNZ DELAY ;IF ARG NOT 0,KEEP

GOING 05F7 C9 RET ******************************************************** FUNCTION : ECHO INPUTS : C - CHARACTER TO ECHO TO TERMINAL OUTPPUTS : C - CHARACTER ECHOED TO TERMINAL CALLS : CO DESTROYS : A, B, F/F'S DESCRIPTION : ECHO TAKES A SINGLE CHARACTER

INPUT AND VIA THE MONITOR SENDS THAT CHARACTER TO THE USER TERMINAL. A CARRIAGE IS ECHOED AS A CARRIAGE RETURN LINE FEED, AND AN ESCAPE CHARACTER IS ECHOED AS $.

ECHO 05F8 41 MOV B, C ;SAVE ARGUMENT 05F9 3E1B MVI A, ESC

Page 71: Microprocessor 8085

D-57

05FB B8 CMP B ;SEE IF ECHOING AN ESCAPE CHARACTER

05FC C20106 JNZ ECHO5 ;NO BRANCH 05FF 0E24 MVI C, '$' ;YES ECHO AS $ 0601 CDC405 ECHO5 CALL CO ;DO OUTPUT THRO'

MONITOR 0604 3E0D MVI A, CR 0606 B8 CMP B ;SEE IF CHAR. ECHOED WAS

A CARRIAGE RETURN 0607 C20F06 JNZ ECH10 ;NO-NO NEED TO TAKE

SPECIAL ACTION 060A 0E0A MVI C, LF ;YES-WANT TO ECHO

LINEFEED 060C CDC405 CALL CO 060F 48 ECH10 MOV C, B ;RESTORE

ARGUMENT 0610 C9 RET ******************************************************** FUNCTION : ERROR INPUTS : NONE OUTPUTS : NONE CALLS : ECHO, CROUT, GETCM DESTROYS : A, B, C, F/F'S DESCRIPTION : ERROR PRINTS THE

ERRORCHARACTER (CURRENTLY AN ASTERISK) ON THE CONSOLE FOLLOWED BY A CR LF, AND THEN RETURNS CONTROL TO THE COMMAND RECOGNISER.

ERROR 0611 OE2A MVI C,'*' 0613 CDF805 CALL ECHO ;SEND '*' TO

CONSOLE 0616 CDEB05 CALL CROUT ;SKIP TO BEGINING OR NEXT

LINE 0619 C30804 JMP GETCM ;TRY AGAIN FOR ANOTHER

COMMAND

D-58 ********************************************************

FUNCTION : FRET INPUTS : NONE OUTPUTS : CARRY-ALWAYS 0 CALLS : NOTHING DESTROYS : CARRY DESCRIPTION : FRET IS JUMPED TO BY ANY

ROUTINE THET WISHES TO INDICATE FAILURE ON RETURN. FRET SETS THE CARRY FALSE DENOTING FAILURE & THEN RETURN TO THE CALLER OF THE ROUTINE INVOKINK FRET.

FRET 061C 37 STC ;SET CARRY TRUE 061D 3F CMC ;THEN COMPLEMENT TO MAKE IT

FALSE 061E C9 RET ;RETURN APPROPRIATLY ******************************************************** FUNCTION : GETCH INPUTS : NONE OUTPUTS : C - NEXT CHAR. IN INPUT STREAM CALLS : CI DESTROYS : A, C, F/F'S DESCRIPTION : GETCH RETURNS THE NEXT CHAR.

IN THE INPUT STREAM TO THE CALLING PROGRAM.

GETCH 061F CD9005 CALL CI ;GET CHAR. FROM

TERMINAL 0622 E67F ANI PRTY0 ;TURN OFF PARITY

BIT IN CASE SET BY CONSOLE

0624 4F MOV C, A ;PUT VALUE IN C REG.FOR

0625 C9 RET ;RETURN

Page 72: Microprocessor 8085

D-59 ******************************************************** FUNCTION : GETHX INPUTS : NONE OUTPUT : SBC - 16 BIT INTEGER D - CHAR. WHICH TERMINATED THE INTEGER CARRY - 1 IF FIRST CHAR NOT DELIMITER - 0 IF FIRST CHAR. IS DELIMITER CALLS : GETCH, ECHO, VALDL, VALDG, CNVBN, ERROR DESTROYS : A, B, C, D, E, F/F'S DESCRIPTION : GETHX ACCEPTS A STRING OF HEX

DIGITS FROM THE INPUT STREAM & RETURNS THEIR VALUE AS A

16 BIT BINARY INTEGER.IF MORE THAN 4 HEX DIGITS ARE ENTERED, ONLY THE LAST 4 ARE USED THE NUM. TERMINATES WHEN A VALID DELIMITER IS ENCOUNTERED.

THE DELIMITER IS ALSO RETURNED AS AN OUTPUT OF THE FUNCTION.ILLEGAL CHAR. (NOT HEX DIGITS OR DELIMITERS) CAUSE AN ERROR INDICATION. IF THE

FIRST (VALID)CHARACTER ENCOUNTERED IN THE INPUT STREAM IS NOT A DELIMITER, GETHX WILL RETURN WITH THE CARRY BIT SET TO 1;OTHERWISE THE CARRY BIT IS SET TO 0 AND THE CONTENTS OF BC ARE UNDEFINED.

GETHX 0626 E5 PUSH H ;SAVE HL 0627 210000 LXI H, 0 ;INITIALIZE RESULT

D-60 062A 1E00 MVI E, 0 ;INITIALIZE DIGIT FLAG TO

FALSE 062C CD1F06 GTH05 CALL GETCH ;GET A CHARACTER 062F 4F MOV C, A 0630 CDF805 CALL ECHO ;ECHO THE CHARACTER 0633 CD7907 CALL VALDL ;SEE IF DELIMITER

FALSE GHX10 ;NO BRANCH 0636 D24506 JNC GTX10 0639 51 MOV D, C ;YES-ALL DONE,BUT WANT

TO RETURN DELIMITER 063A E5 PUSH H 063B C1 POP B ;MOVE RESULT TO BC 063C E1 POP H ;RESTORE HL 063D 7B MOV A, E ;GET FLAG 063E B7 ORA A ;SET F/F'S 063F C23207 JNZ SRET ;IF FLAG NONE-0ANUM.HAS BEEN FOUND 0642 CA1C06 JZ FRET ;ELSE DELIMITER WAS FIRST

CHARACTER 0645 CD5E07 GHX10 CALL VALDG ;IF NOT DELIMITER SEE IF

DIGIT FALSE ERROR ;ERROR, IF NOT A VALID

DIGIT 0648 D21106 JNC ERROR 064B CD100A CALL CNVBN ;CONVERT DIGIT TO ITS

BINARY VALUE 064E 1EFF MVI E, 0FFH ;SET DIGIT FLAG NON-0 0650 29 DAD H ;*2 0651 29 DAD H ;*4 0652 29 DAD H ;*8 0653 29 DAD H ;*16 0654 0600 MVI B, 0 ;CLEAR UPPER 8 BITS OF BC

PAIR 0656 4F MOV C, A ;BINARY VALUE OF

CHARACTER INTO C

Page 73: Microprocessor 8085

D-61

0657 09 DADB ;ADD THIS VALUE TO PARTIAL RESULT

0658 C32C06 JMP GHX05 ;GET NEXT CHARACTER ******************************************************** FUNCTION : GETNM INPUTS : C - COUNT OF NUM. TO FIND IN INPUT STREAM OUTPUTS : TOP OF STACK-NUM.FOUND IN REVERSE

ORDER (LAST ON TOP OF STACK) CALLS : GETHX, HILO, ERROR DESTROYS : A, B, C, D, E, H, L, F/F'S DESCRIPTION : GETNM FINDS A SPECIFIED COUNT

OF NUMBERS, BETWEEN 1 & 3, INCLUSIVE, IN THE INPUT STREAM

AND RETURNS THEIR VALUES ON THE STACK. IF 2 OR MORE NUM. ARE REQUESTED THEN THE FIRST MUST BE LESS THEN OR EQUEL TO THE SECOND, OR THE FIRST & SECOND NUM. WILL BE SET EQUAL. THE LAST NUM. REQUESTED MUST BE TERMINATED BY A CARRIAGE

RETURN OR AN ERROR INDICATION WILL RESULT. GETNM 065B 2E03 MVI L, 3 ;PUT MAX. ARG.COUNT IN L 065D 79 MOV A, C ;GET THE ACTUAL

ARG.COUNT 065E E603 ANI 03 ;FORCE TO MAX.OF 3 0660 C8 RZ ;IF 0,DON'T BOTHER TO ANY 0661 67 MOV H, A ;ELSE PUTACTUALCOUNT

INTO 0662 CD2606 GNM05 CALL GETHX ;GET A NUM.FROM I/P

STREAM FALSE ERROR ;ERROR IF NOT THERE-TOO

FEW NUMBERS 0665 D21106 JNC ERROR 0668 C5 PUSH B ;ELSE SAVE NUM.ON STACK 0669 2D DCR L ;DECREMENT

MAX.ARG.COUNT 066A 25 DCR H ;DECREMENT ACTUAL

ARG.COUNT

D-62 066B CA7706 JZ GNM10 ;BRANCH IF NO MORE

NUM.WANTED 066E 7A MOV A, D ;ELSE GET NUM.

TERMINATOR TO A 066F FE0D CPI CR ;SEE IF CARRIAGE RETURN 0671 CA1106 JZ ERROR ;ERROR IF SO TOO FEW

NUM. 0674 C36206 JMP GNM ;ELSE PROCESS NEXT NUM. 0677 7A GNM10 MOV A, D ;WHEN COUNT 0,CHECK

LAST TERMINATOR 0678 FE0D CPI CR 067A C21106 JNZ ERROR ;ERROR IF NOT CR 067D 01FFFF LXI B, 0FFFFH ;HL GETS LARGEST NUM. 0680 7D MOV A, L ;GET WHAT'S LEFT OF MAX.

ARG COUNT 0681 B7 ORA A ;CHECK FOR 0 0682 CA8A06 JZ GNM20 ;IF YES,3 NUM WERE I/P 0685 C5 GNM15 PUSH B ;IF NOT? FILL REMAINING

ARG WITH 0FFFFH 0686 2D DCR L 0687 C28506 JNZ GNM15 068A C1 GNM20 POP B ;GET THE 3 ARG. OUT 068B D1 POP D 068C E1 POP H 068D CDA006 CALL HILO ;SEE IF FIRST=SECOND FALSE GNM25 ;NO BRANCH 0690 D29506 JNC GNM25 0693 54 MOV D, H 0694 5D MOV E, L ;YES-MAKE SECOND EQUAL

TO THE FIRST 0695 E3 GNM25 XTHL ;PUT FIRST ON STACK GET

RETURN ADDR 0696 D5 PUSH D ;PUT SECOND ON STACK 0697 C5 PUSH B ;PUT THIRD ON STACK 0698 E5 PUSH H ;PUT RETURNADDR.ON

STACK 0699 3D GNM30 DCR A ;DECREMENT RESDUAL

COUNT 069A F8 RM ;IF NEGATIVE,PROPER

RESULT ON STACK 069B E1 POP H ;ELSE GET RETURN ADDR 069C E3 XTHL ;REPLACE TOP RESULT

WITH RETURN ADDR 069D C39906 JMP GNM30 ;TRY AGAIN

Page 74: Microprocessor 8085

D-63

******************************************************** FUNCTION : HILO INPUTS : DE - 16 BIT INTEGER HL - 16 BIT INTEGER OUTPUTS : CARRY - 0 IF HL < DE 1 IF HL => DE CALLS : NOTHING DESTROYS : F/F'S DESCRIPTION : HILO COMPARES THE 2 16 BIT

INTEGERS IN BL AND DE. THE INTEGERS ARE TREATED AS UNSIGNED NUMBERS.THE CARRY BIT IS SET ACCORDING TO THE

RESULT OF THE COMPARISON. HILO

06A0 C5 PUSH B ;SAVE BC 06A1 47 MOV B, A ;SAVE A IN B REGISTER 06A2 E5 PUSH H ;SAVE HL PAIR 06A3 7A MOV A, D ;CHECK FOR DE=0000H 06A4 B3 ORA E 06A5 CAC106 JZ HILO5 ;WE'RE AUTOMATICALLY DONE 06A8 23 INX H IF HL IS INCREMENTED BY 1 06A9 7C MOV A, H ;WANT TO TEST FOR 0 06AA B5 ORA L RESULT AFTER INCREMENTING 06AB CAC106 JZ HILO5 ;IF SOHL MUST HAVE CONTAINED

0FFFFH 06AE E1 POP H ;IF NOT RESTORE ORIGINAL HL 06AF D5 PUSH D ;SAVE DE 06B0 3EFF MVI A, 0FFH ;WANT TO TAKE 2'S COMPLEMENT OF DE CONTENTS 06B2 AA XRA D 06B3 57 MOV D, A 06B4 3EFF MVI A, 0FFH 06B6 AB XRA E 06B7 5F MOV E, A

D-64

06B8 13 INX D ;2'S COMPLEMENT OF DE TO DE 06B9 7D MOV A, L 06BA 83 ADD E ;ADD HL AND DE 06BB 7C MOV A, H 06BC 8A ADC D ;THIS OPERATION SETS CARRY PROPERLY 06BD D1 POP D ;RESTORE ORIGINAL DE CONT. 06BE 78 MOV A, B ;RESTORE ORIGINAL CONT.OF A 06BF C1 POP B ;RESTORE ORIGINALCONT.OF BC 06C0 C9 RET ;RETURN WITH CARRY SET AS REQUIRED 06C1 E1 HILO5 POP H ;IF HL CONTENTS 0FFFFH,THEN 06C2 78 MOV A, B CARRY CAN ONLY BE SET TO 1 06C3 C1 POP B ;RESTORE ORIGINAL CONTENTS OF REGISTERS 06C4 C33207 JMP SRET ;SET CARRY AND RETURN ******************************************************** FUNCTION : NMOUT INPUTS : A - 8 BIT INTEGER OUTPUTS : NONE CALLS : ECHO, PRVAL DESTROYS : A, B, C, F/F'S DESCRIPTION : NMOUT CONVERTS THE 8

BIT,UNSIGNED INTEGER THE A REGISTER INTO 2 ASCII CHARACTERS. THE ASCII

CHARACTER ARE THE ONES REPRESENTING THE 8 BITS. THESE TWO CHARACTERS ARE SENT TO THE CONSOLE AT THE CURRENT PRINT POSITION OF THE CONSOLE.

Page 75: Microprocessor 8085

D-65

NMOUT 06C7 E5 PUSH H ;SAVE HL DESTROYS

PREVAL 06C8 F5 PUSH PSW ;SAVE ARGUMENT 06C9 0F RRC 06CA 0F RRC 06CB 0F RRC 06CC 0F RRC ;GET UPPER 4 BITS TO LOW

4 BIT POSITION 06CD E60F ANI HCHAR ;MASK OUT UPPER 4 BITS-

WANT 1 HEX CHAR 06CF 4F MOV C, A 06D0 CDE206 CALL PRVAL ;CONVERT LOWER 4 BITSTO

ASCII 06D3 CDF805 CALL ECHO ;SEND TO TERMINAL 06D6 F1 POP PSW ;GET BACK ARGUMENT 06D7 E60F ANI HCHAR ;MASK OUT UPPER 4 BITS-

WANT 1 HEX CHAR 06D9 4F MOV C, A 06DA CDE206 CALL PRVAL 06DD CDF805 CALL ECHO 06E0 E1 POP H ;RESTORE SAVED VALUE OF

HL 06E1 C9 RET ******************************************************** FUNCTION : PRVAL INPUTS : C - INTEGER RANGE 0 TO F OUTPUTS : C - ASCII CHARACTER CALLS : NOTHING DESTROYS : B, C, H, L, F/F'S DESCRIPTION : PRVAL CONVERTS A NUM. IN THE

RANGE 0 TO F HEX TO THE CORROSPONDING

ASCII CHARACTER,0-9, A-F.PRVAL DOES NOT CHECK THE

VALIDITY OF ITS INPUT ARGUMENT. PRVAL

06E2 21B407 LXI H, DIGTB ;ADDRESS OF TABLE 06E5 0600 MVI B, 0 ;CLEAR HIGH ORDER BITS

OF BC

D-66 06E7 09 DAD B ;ADD DIGIT VALUE TO HL

ADDRESS 06E8 4E MOV C, M ;GET CHAR.FROM MEMORY 06E9 C9 RET

******************************************************** FUNCTION : REGDS INPUTS : NONE OUTPUTS : NONE CALLS : ECHO, NMOUT, ERROR, CROUT DESTROYS : A, B, C, D, E, H, L, F/F'S DESCRIPTION : REGDS DISPLAYS THE CONTENTS

OF THE REGISTER SAVE LOCATIONS,IN FORMATTED FORM,ON THE CONSOLE.

THE DISPLAY IS DRIVAN FROM A TABLE, RTAB,WHICH

CONTAINS THE REGISTERS'S PRINT SYMBOL, SAVE LOCATION ADDRESS,AND LENGTH (8 OR 16 BITS).

REGDS

06EA 21C407 LXI H, RTAB ;LOAD HL WITH ADDRESS OF START OF TABLE

06ED 4E REG05 MOV C, M ;GET PRINT SYMBOL OF REG.

06EE 79 MOV A, C 06EF B7 ORA A ;TEST FOR 0 END OF TABLE 06F0 C2F706 JNZ REG10 ;IF NOT END,BRANCH 06F3 CDEB05 CALL CROUT ;ELSE CARRIAGE

RETURN/LINE FEED TO END DISPLAY

06F6 C9 RET 06F7 CDF805 REG10 CALL ECHO ;ECHO CHARACTER 06FA 0E3D MVI C,'=' 06FC CDF805 CALL ECHO ;O/P EQUAL SIGN i.e. A = 06FF 23 INX H ;POINT TO START OF SAVE

LOCATION ADDRESS 0700 5E MOV E, M ;GET LSP OF SAVE

LOCATION ADDRESS TO E

Page 76: Microprocessor 8085

D-67

0701 16FF MVI D, RAMST SHR 8 ;PUT MSO OF SAVE LOC ADDRESS TO E

0703 23 INX H ;POINT TO LENGTH FLAG 0704 1A LDAX D ;GET CONTENTS OF SAVE

LOC. 0705 CDC706 CALL NMOUT ;DISPLAY ON CONSOLE 0708 7E MOV A, M ;GET LENGTH FLAG 0709 B7 ORA A ;SET SIGN F/F 070A CA1207 JZ REG15 ;IF 0,REG. IS 8 BITS 070D 1B DCX D ;ELSE 16 BIT REGISTER SO

MORE TO DISPLAY 070E 1A LDAX D ;GET LOWER 8 BITS 070F CDC706 CALL NMOUT ;DISPLAY THEM 0712 0E20 REG15 MVI C,' ' 0714 CDF805 CALL ECHO 0717 23 INX H ;POINT TO START OF NEXT

TABLE ENTRY 0718 C3ED06 JP REG05 ;DO NEXT REGISTER ******************************************************************* FUNCTION : RGADR INPUTS : C - CHARACTER DENOTING REGISTER OUTPUTS : BC - ADDRESS OF ENTRY IN RTAB

CORROSPONDING TO REG CALLS : ERROR DESTROYS : A, B, C, D, E, H, L, F/F'S DESCRIPTION :RGADR TAKES A SINGLE CHARACTER AS

INPUT.THIS CHARACTER DENOTES A REGISTER. RGADR SEARCHES THE TABLE RTAB FOR A MATCH ON THE I/P ARGUMENT.IF ONE OCCURS,RGADR RETURNS THE ADDR OF THE SAVED LOCATION CORRESPONDING TO THE REGISTER. THIS ADDRESS POINTS INTO

D-68

RTAB. IF NO MATCH OCCURS, THEN CONTROL IS PASSED TO THE ERROR ROUTINE.

071B 21C407 RGADR LXI H, RTAB ;HL GETS ADDR. OF

TABLE START 071E 110300 LXI D, RTAB5 ;DE GET SIZE OF A

TABLE ENTRY 0721 7E RGA05 MOV A, M ;GET REG.

IDENTIFIER 0722 B7 ORA A ;CHECK FOR TABLE END

(IDENTIFIER IS 0) 0723 CA1106 JZ ERROR ;IF AT END OF

TABLE,ARG.IS ILLEGAL

0726 B9 CMP C ;ELSE, COMPARE TABLE ENTRY & ARGUMENT

0727 CA2E07 JZ RGA10 ;IFEQUAL,WE'VE FOUND WHAT WE'RE LOOKING FOR

072A 19 DAD D ;ELSE INCREMENT TABLE POINTER TO

NEXT ENTRY 072B C32107 JMP RGA05 ;TRY AGAIN 072E 23 RGA10 INX H ;IF A MATCH INR.

TABLE 072F 44 MOV B, H ;POINTER TO SAVE

LOC.ADDR. 0730 4D MOV C, L ;RETURN THIS VALUE 0731 C9 RET

Page 77: Microprocessor 8085

D-69 ******************************************************** FUNCTION : SRET INPUTS : NONE OUTPUTS : CARRY = 1 CALLS : NOTHING DESTROYS : CARRY DESCRIPTION : SRET IS JUMPED TO BY RIUTINES

WISHING TO RETURN SUCCESS.SRET SETS THE CARRY TRUE & THEN RETURNS TO THE CALLER OF THE ROUTINE INVOKING SRET.

SRET

0732 37 STC SET CARRY TRUE 0733 C9 RET RETURN APPROPRIATELY ******************************************************** FUNCTION : STHFO INPUTS : DE - 16BIT ADDRESS OF BYTE TO BE STORED

INTO OUTPUTS : NONE CALLS : STHLF DESTROYS : A, B, C, H, L, F/F'S DESCRIPTION : STHFO CHECKS THE HALF BYTE

FLAG IN TEMP TO SEE IF IT SET TO LOWER. IF SO, STFHO STORES

A 0 TO PAD OUT THE LOWER HALF OF THE ADDRESSED BYTE : OTHERWISE,THE ROUTINE TAKES NO ACTION.

STHFO 0734 3AFDFF LDA TEMP ;GET HALF BYTE FLAG 0737 B7 ORA A ;SET F/F'S 0738 C0 RNZ ;IF SET TO UPPER DO NOT

DO ANYTHING 0739 0E00 MVI C, 0 ;ELSE WANT TO STORE THE

VALUE 0 073B CD3F07 CALL STHLF ;DO IT 073E C9 RET

D-70

******************************************************** FUNCTION : STHLF INPUTS : C - 4 BIT VALUE TO BE STORED IN HALF BYTE DE - 16 BIT ADDR. OF BYTE TO BE STORED INTO OUTPUTS : NONE CALLS : NOTHING DESTROYS : A, B, C, H, L, F/F'S DESCRIPTION : STHLF TAKES THE 4 BIT VALUE IN C

AND STORES IT IN HALF OF THE BYTE ADDRESSED BY REGISTER

DE. THE HALF BYTE USED(EITHER UPPER OR LOWER) IS DENOTED BY THE VALUE OF THE FLAG IS TEMP.

STHLF ASSUMES THAT THIS FLAG HAS BEEN PREVIOUSLY SET (NORMALLY BY ICMD)

STHLF

073F D5 PUSH D 0740 E1 POP H ;MOVE ADDR. OF BYTE IN HL 0741 79 MOV A, C ;GET VALUE 0742 E60F ANI 0FH ;FORCE TO 4 BIT LENGTH 0744 4F MOV C, A ;PUT VALUE BACK 0745 3AFDFF LDA TEMP ;GET HALF BYTE FLAG 0748 B7 ORA A ;CHECK FOR LOWER HALF 0749 C25207 JNZ STH05 ;BRANCH IF NOT 074C 7E MOV A, M ;ELSE GET BYTE 074D E6F0 ANI 0F0H ;CLEAR LOWER 4 BITS 074F B1 ORA C ;OR IN VALUE 0750 77 MOV M, A ;PUT BYTE BACK 0751 C9 RET 0752 7E STH05 MOV A, M ;IF UPPER HALF,GET BYTE 0753 E60F ANI 0FH ;CLEAR UPPER 4 BITS 0755 47 MOV B, A ;SAVE BYTE IN B 0756 79 MOV A, C ;GET VALUE 0757 0F RRC 0758 0F RRC 0759 0F RRC 075A 0F RRC ;ALIGN TO UPPER 4 BITS 075B B0 ORA B ;OR IN ORIGINAL LOWER 4 BITS 075C 77 MOV M, A ;PUT NEW CONFGURATION BACK 075D C9 RET

Page 78: Microprocessor 8085

D-71 ******************************************************** FUNCTION : VALDG INPUTS : C - 1 ASCII CHARACTER OUTPUTS : CARRY - 1 IF CHAR. REPRESENTS VALID HEX

DIGIT 0 OTHERWISE CALLS : NOTHING DESTROYS : A, F/F'S DESCRIPTION : VALDG RETURNS SUCCESS IF ITS

INPUT ARGUMENT IS IN ASCII CHAR. REPRESENTING A VALID HEX HEX DIGIT (0-9, A-F) AND FAILURE OTHERWISE.

VALDG

075E 79 MOV A, C 075F FE30 CPI 'C' ;TEST CHAR. AGAINST '0' 0761 FA1C06 JM FRET ;IF ASCII CODE IS

LESS,CANNOT BE VALID DIGIT

0764 FE39 CPI '9' ;ELSE SEE IF IN RANGE '0'-'9' 0766 FA3207 JM SRET ;CODE BET' '0' - '9' 0769 CA3207 JM SRET ;CODE EQUAL '9' 076C FE41 CPI 'A' ;NOT A DIGIT-TRY FOR A

LETTER 076E FA1C06 JM FRET ;NO CODE BET' '9'-'A' 0771 FE47 CPI 'G' 0773 F21C06 JP FRET ;NO CODE THAN 'F' 0776 C33207 JMP SRET ;OKAY CODE IS 'A' TO 'F'

D-72

******************************************************** FUNCTION : VALDL INPUTS : C - CHARACTER OUTPUTS : CARRY - 1 IF INPUT ARGUMENT VALID

DELIMITER - 0 OTHERWISE

CALLS : NOTHING DESTROYS : A, F/F'S DESCRIPTION : VALDL RETURNS SUCCESS IF ITS

INPUT ARGUMENT IS A VALID DELIMITER CHARACTER (SPACE, COMMA, CR)AND FAILURE OTHERWISE.

VALDL 0779 79 MOV A,C 077A FE2C CPI ',' ;CHECK FOR COMMA 077C CA3207 JZ SRET 077F FE0D CPI CR ;CHECK FOR CARRIAGE

RETURN 0781 CA3207 JZ SRET 0784 FE20 CPI ' ' ;CHECK FOR SPACE 0786 CA3207 JZ SRET 0769 C31C06 JMP FRET ;ERROR IF NONEOF ABOVE

******************************************************** MONITOR TABLES ********************************************************

078C 0D SGNON DB CR, LF, 'MICROFRIEND-I' CR, LF EOT.

078D 0A 078E 4D494352 0792 4F465249 0796 454E442D 079A 4920200D

Page 79: Microprocessor 8085

D-73

079E 0A 079F 00 LSGNON EQU S-SGNON ;LENGTH OF SIGNON MESSAGE CADR ;TABLE OF

ADDRESSES OF COMNMAND

ROUTINES 07A0 0000 DW 0 07A2 1405 DW XCMD 07A4 F004 DW SCMD 07A6 D004 DW MCMD 07A8 8604 DW ICMD 07AA 6804 DW GCMD 07AC 3704 DW DCMD CTAB ;TABLE OF VALID

COMMAND CHARACTERS

07AE 44 DB 'D' 07AE 47 DB 'G' 07AE 49 DB 'I' 07AE 4D DB 'M' 07AE 53 DB 'S' 07AE 58 DB 'X' 0006 NCMDS EQU $-CTAB ;NUM. OF VALID

COMMANDS DIGTB ;NUM. OF PRINT VALUE OF

HEX DIGITS 07B4 30 DB '0' 07B5 31 DB '1' 07B6 32 DB '2' 07B7 33 DB '3' 07B8 34 DB '4' 07B9 35 DB '5' 07BA 36 DB '6' 07BB 37 DB '7' 07BC 38 DB '8' 07BD 39 DB '9' 07BE 41 DB 'A' 07BF 42 DB 'B' 07C0 43 DB 'C' 07C1 44 DB 'D' 07C2 45 DB 'E'

D-74 07C3 46 DB 'F' RTAB ;TABLE OF REGISTER

INFORMATION 07C4 41 DB 'A' ;REGISTER

IDENTIFIER 07C5 EE DB ASAV AND 0FFH ;ADDRESS OF

REGISTER SAVE LOCATION 07C6 00 DB0 ;LENGTH FLAG 0=8

BITS 1=16 BITS 0003 RTABS EQU $-RTAB ;SIZE OF AN ENTRY

IN THIS TABLE 07C7 42 DB 'B' 07C8 EC DB BSAV AND 0FFH 07C9 00 DB 0 07CA 43 DB 'C' 07CB EB DB CSAV AND 0FFH 07CC 00 DB 0 07CD 44 DB 'D' 07CE EA DBD SAV AND 0FFH 07CF 00 DB 0 07D0 45 DB 'E' 07D1 E9 DB ESAV AND 0FFH 07D2 00 DB 0 07D3 46 DB 'F' 07D4 ED DB FSAV AND 0FFH 07D5 00 DB 0 07D6 49 DB 'I' 07D7 F1 DB ISAV AND 0FFH 07D8 00 DB 0 07D9 48 DB 'H' 07DA F0 DB HSAV AND 0FFH 07DB 00 DB 0 07DC 4C DB 'L' 07DD EF DB LSAV AND 0FFH 07DE 00 DB 0 07DF 4D DB 'M' 07E0 FD DB MSAV AND 0FFH 07E1 01 DB 1 07E2 53 DB 'S' 07E3 F5 DB SSAV AND 0FFH 07E4 01 DB 1

Page 80: Microprocessor 8085

D-75 07E5 50 DB 'P' 07E6 F3 DB PSAV+1 AND 0FFH 07E7 01 DB 1 07E8 00 DB 0 ;END OF TABLE

MARK 07E9 000B79 DB 0 07EC BOC2C2 JMP CO ;TTY CONSOLE

OUTPUT 07EF 0CC3CA JMP CI ;TTY CONSOLE INPUT 07F2 0C3E95 07F5 D305C3 07F8 9503 07FA C3C405 07FD C39005 07F0 C3CA0C 07F3 3E95 CODE0 MVI A, 95 07F5 D305 OUT CNTRL 07F7 C39503 JMP CODE1 0395 3EF7 CODE1 MVI A, BLANK DOT 0397 D305 OUT DATA 0399 C9 RET 0800 08 CMDTB GO 0801 00 SET 0802 03 REG 0803 02 STEP 0804 0B SAVE 0805 01 CODE 0806 0A LOAD 0807 0C U1 0808 0D U2 0809 0E U3 080A 0F U4 080B A5FF CMDAD U4RAM 080D A2FF U3RAM 080F 9FFF U2RAM

D-76

0811 9CFF U1RAM 0813 AE0E LOAD 0815 4108 CODE 0817 B70C SAVE 0819 FD00 STEP 081B 5109 REG 081D 8B01 SET 081E CB00 RUN 0821 5C08 COD-A 00 MOVE BLOCK 0823 E50B 01 FILL BLOCK 0825 DD08 02 INSERT BYTE 0827 2909 03 DELETE BYTE 0829 BD08 04 BLOCK SEARCH 082B 5109 05 HEX TO DECIMAL 082D 9F09 06 DECIMAL TO HEX 082F F10B 07 PROGRAMMING 0831 A70B 08 VERIFY 0833 1502 09 FERR 0835 1502 0A BLANK CHECK 0837 E60A 0B BLANK CHECK 0839 650B 0C CHKSUM 083B 1502 0D FERR 083D A608 0E COMPLEMENT

BLOCK 083F 5B0E 0F ROLLING DISPLAY 0841 0600 CODE MVI B, NODOT 0843 CDD701 CALL CLEAR 0846 CDF307 MVI B, DTFLD 0849 06 CALL GTHEX 084A 01 084B CD2B02 JNC ERR 084E 1600 MVI D, 00 0850 7B MOV A, E 0851 FE11 CPI 10 0853 D21502 JNC ERR

Page 81: Microprocessor 8085

D-77

0856 212108 LXI H, CODEA 0859 C3A40C JMP RMNCOD 085C 3EFF MOVEBLK MVI A, 0FF 085E 32BFFF STA COPYTEST 0861 CD780A BLMOV CALL LDAIL 0864 2AB9FF LHLD DSSAVE 0867 EB XCHG 0868 2ABDFF LHLD SSAVE 086B 3ADFFF MB1 LDA COPYTEST 086E FE00 CPI L 0870 CA7708 JZ MB2 0873 7E MOV A, M 0874 C37A08 JMP MB3 0877 CDD60B MB2 CALL READ 087A 47 MB3 MOV B, A 087B EB XCHG 087C 77 MOV M, A 087D 7E MOV A, M 087E B8 CMP B 087F C21502 JNZ ERR 0822 13 IND X 0823 23 INX H 0824 E5 PUSH H 0825 CD6F0A CALL 0828 D1 POP D 0829 D26B08 JNC MB1 088C CF RST 1 088D CD46 088F 2ABDFF FILL BLK LHLD SSAVE 0892 3AB8FF LDA SRSAVE 0895 47 MOV B, A 0896 00 NOP 0897 77 MOV M, A 0898 7E MOV A, M 0899 B8 CMP B 089A C21502 JNZ ERR 089D 23 INX H 089E EB XCHG 089F CD6F08 CALL S-E 08A2 D29208 JNC FB1 08A5 CF RST 1 08A6 CD930A COMPLEMENT CALL LDSSE 08A9 2ABDFF LHLD SSAVE

D-78 08AC 7E CM1 MOV A, M 08AD 2F CMA 08AE 77 MOV M, A 08AF 00 NOP 08B0 BE CMP M 08B1 C21502 JNZ ERROR 08B4 23 INX H 08B5 EB XCHG 08B6 CD6F0A CALL S-E 08B9 D2AC08 JNC CM1 08BC CF RST 1 08BD CD460C BLOCKSEARCH CALL SRLD 08C0 2ABDFF LHLD SSAVE 08C3 46 BZI MOV B, M 08C4 3AB8FF LDA SERSAVE 08C7 B8 CMP B 08C8 CCD408 CZ DISPLY 08CB 23 INX H 08CC EB XCHG 08CD CD6F0A CALL S-E 08D0 D2C308 JNC BS1 08D3 CF RST 1 08D4 E5 DISPLY PUSH HL 08D5 D5 PUSH DE 08D6 F5 PUSH PSW 08D7 CD6203 CALL UPDAD1 08DA C3910D JMP DISP1 08DD CDAA0A INSERT CALL SEDI ;LOAD DE 08E0 0601 MVI B, 01 08E2 CDD701 CALL CLEAR ;DOT IN ADDR. FIELD 08E5 0E03 MVI A, 03 08E7 CDC20A CALL DTDISP 08EA 00 NOP 08EB 0600 MVI B, 00 08ED CD2B02 CALL GTHEX ;IA 08F0 D21502 JNC ERROR 08F3 EB XCHG 08F4 22B6FF SHLD IASAVE ;IA 08F7 CD490C INS1 CALL SRL1 ;LOAD SR 08FA 2ABBFF LHLD SESAVE 08FD 54 MOV D, H ;HL:SS-SE 08FE 5D MOV E, L 08FF 13 INX D ;DE:DS(SE+1)

Page 82: Microprocessor 8085

D-79

0900 7E INSZ MOV A, M ;DATA AT SS 0901 47 MOV B, A 0902 EB XCHG 0903 77 MOV M, A 0904 7E MOV A, M 0905 B8 CMP B 0906 C21502 JNZ ERR 0909 1B DCX DE 090A 2B DCX HL 090B EB ECHG 090C D5 PUSH DE 090D E5 PUSH HL 090E 2AB6FF LHLD IASAVE 0911 EB ECHG 0912 E1 POP HL 0913 7D MOV A, L 0914 93 SUB E 0915 7C MOV A, H 0916 9A SUB D 0917 D1 POP DE 0918 D20009 JNC INS2 091B 2AB6FF LHLD TASAVE 091E 3AB8FF LDA SRSAVE 0921 77 MOV M, A 0922 47 MOV B, A 0923 7E MOV A, M 0924 B8 CMP B 0925 C2150A CF JNZ ERROR 0929 CDAA0A DELETE CALL SED1 092C 0601 MVI B, 01 092E CDD701 CALL CLEAR 0931 0E04 MVI C, 04 0933 CDC20A CALL DTDISP 0936 00 NOP 0937 0600 MVI B, 00

D-80

0939 CD2B02 CALL GTHEX 093C D21502 JNC ERR 093F EB XCHG 0940 22B4FF SHLD DASAVE 0943 000000 NOPS 0946 E5 PUSH H 0947 D1 POP D 0948 23 INX H 0949 3EFF MVI A, FF 094B 32BFFF STA COPYTEST 094E C36B08 JMP MB1 0951 0E05 HEX-DEMVI C, 05 0953 CDC20A CALL DTDISP 0956 0600 MVI B, 00 0958 CD2B02 CALL GTHEX 095B D21502 JNC ERROR 095E EB XCHG 095F 22B1FF SHLD HESAVE 0962 AF RAA 0963 32B1FF STA CARRY LOC 0966 010000 LXI B, 00 0969 7C HD0 MOV A, H ;SEE HL=HEX

COUNT 00 096A B5 ORA L 096B CA8909 JZ HD3 ;OVER DISPLAY BC 096E 2B DCX HL ;DECIMAL

CARRY CLEAR 096F AF XRA A 0970 79 MOV A, C 0971 3C INR A ;INCREMENT C 0972 37 DAA ;DECIMALLY 0973 4F MOV C, A

Page 83: Microprocessor 8085

D-81

0974 D26909 JNC HD0 ;IF NO CARRY 0977 AF XRA A 0978 78 MOV A, B 0979 3C INR A 097A 27 DAA 097B 47 MOV B, A 097C D26909 JNC HD0 ;IF NO CARRY CHECK 097F 3AB1FF LDA CARRY LOC 0982 3C INR A 0983 32B1FF STA CARRY LOC ;CARRY

AFTER 0986 C36909 JMP HD0 ;EACH BC 0989 3AB1FF HD3 LDA CARRY LOC ;DECIMAL 098C 67 MOV H, A 098D 68 MOV L, B ;IN ADDRESS 098E C5 PUSH BC ;CARRY & 098F CD6203 CALL MODI DAD1 ;HIGHER

BYTE OF 0992 C1 POP BC ;BCD COUNTER

DATES 0993 79 MOV A, C ;SHOWN OVER BYTE 0994 CD6E03 CALL MODIDTA 0997 76 HLT 0998 TO 099E IS BLANK. 099F 0E06 DEC-HEX MVI C, 06 ;DISPLAY DE 09A1 CDC20A CALL DTDISP 09A4 0600 MVI B, 00 ;GET IN DE 09A6 CD2B02 CALL GTHEX 09A9 D21502 JNC ERR ;DECIMAL 09AC D5 PUSH DE ;NUMBER 09AD C1 POP BC ;BC:NUMBER 09AE 219999 LXI H, 9999 ;HL:9999 09B1 110000 LXI D, 0000 ;DE:00 HEX

CNTR 09B4 AF XRA ;CLEAR CARRY 09B5 00 NOP 09B6 08 DSUB ;UNSPECIFIED LODE

HL-BC INTO HL 09B7 3E99 DH2 MVI A, 99 ;9999-NUMBER 09B9 BD CMP L 09BA C2C509 JNZ DH0 09BD BC CMP P ;IS HL 9999? 09BE C2C509 JNZ DH0 ;IF NO LOOP

D-82 09C1 D5 PUSH DE ;SAVE HEX COUNT 09C2 C3640C JP DH2 ;DISPLAY HEX

COUNT 09C5 AF DH0 XRA A ;CLEAR CARRY 09C6 13 INX DE ;INCREMENT HEX 09C7 7D MOV A, L 09C8 3C INR A ;DECIMAL

ADJUST 09C9 27 DAA & INCREMENT H1 09CA 6F MOV L, A 09CB D2B709 09CE AF XRA A 09CF 7C MOV A, H ;DECIMALLY

INCREMENT 09D0 3C INR A ;H AND 09D1 27 DAA ;CONTINUE 09D2 67 MOV H, A 09D3 C3B709 JMP DH1 09D6 FF 09D7 C30F0E SERIAL JMP SRL1 09DA CDE309 CALL BRID 09DD CDFA03 CALL SIGNON 09E0 C30804 JMP GETCM 09E3 20 BRI0 RIM 09E4 B7 ORA Z 09E5 FAE809 JP BRID 09E8 20 BRI1 RIM 09E9 B7 ORA Z 09EA FAE809 JM BRI1 09ED 21FAFF LXI H, -6 09F0 1E04 BRI3 MVI E, 04 09F2 1D BRI4 DCR E 09F3 C2F209 JM BRI1 09F6 23 INX H 09F7 20 RIM 09F8 B7 ORA A 09F9 F2F009 JP BRI3 09FC E5 PUSH H 09FD 24 INR H 09FE 2C INR L 09FF 22C0FF SHLD BIT TIME 0A02 E1 POP H 0A03 B7 ORA A

Page 84: Microprocessor 8085

D-83

0A04 7C MOV A, H 0A05 1F RAR 0A06 67 MOV H, A 0A07 7D MOV A, L 0A08 1F RAR 0A09 6F MOV L, A 0A0A 24 INR H 0A0B 0606 MVI B, 06 0A0D C3080E JMP 6PASS 0A10 79 CNVBN MOV A, C 0A11 D630 SUI '0' 0A13 FE0A CPI 10 0A15 F8 RM 0A16 D607 SUI 7 0A18 C9 RET 0A19 0601 MVI B, 01 0A1B CDD701 CALL 0A1E 0E07 MVI C, 07 0A20 CDC20A CALL 0A23 000600 0A26 CD2B02 CALL GTHEX 0A29 D21502 INC ERROR 0A2C EB XCHG 0A2D 22ADFF SHLD BRASAVE 0A30 21E20A LXI H, CnADR 0A33 AF XRA A 0A34 47 MOV B, A 0A35 CDB702 CALL OUTOUT 0A38 3E01 MVI A, 01 0A3A 47 MOV B, A 0A3B 21310B LXI H, 0B31 ;BLANK 0A3E CDB702 CALL OUTPUT 0A41 0601 MVI B, 01 ;USE ADDRESS FIELD

OF DISPLAY & DOT 0A43 CD2B02 CALL GTHEX

D-84

0A46 7B MOV A, E 0A47 32ACFF STA CnSAVE 0A4A C9 RET 0A4B 3AACFF SSTCP LDA CnSAVE 0A4E FE00 CPI 00 0A50 CAFD00 JZ STEP 0A53 2AF2FF LHLD PCSAVE 0A56 EB XCHG 0A57 2AADFF LHLD BrSAVE 0A5A 7D MOV A, L 0A5B BB CMP E 0A5C C22601 JNZ STP20 0A5F 7C MOV A, H 0A60 BA CMP D 0A61 C22601 JNZ STP20 0A64 3AACFF LDA CnSAVE 0A67 3D DCR A 0A68 32ACFF STA CnSAVE 0A6B C3AB0C JMP SST0 0A6F 2ABBFF LHLD SESAVE 0A72 7D MOV A, L 0A73 93 SUB E 0A74 7C MOV A, H 0A75 9A SBB D 0A76 EB XCHG 0A77 C9 RET 0A78 CD930A LDALL CALL LDSSE 0A7B 0601 MVI B, 01 0A7D CDD701 CALL 0A80 0E02 MVI C, 02 0A82 CDC20A CALL 0A85 000600 0A88 CD2B02 CALL GTHEX 0A8B D21502 JNC ERR 0A8E EB XCHG

Page 85: Microprocessor 8085

D-85

0A8F 22B9FF SHLD DSSAVE 0A92 C9 RET 0A93 0601 LDSSE MVI C, 01 0A95 CDD701 CALL DIDISP 0A98 0E00 LHLD SSAVE 0A9B CDC20A CALL UPDAD1 0A9D 00 NOP 0A9E 0600 MVI B, 0 0AA0 CD2B02 CALL GTHEX 0AA3 D21502 JNC ERROR 0AA6 EB XCHG 0AA7 22BDFF SHLD SSAVE 0AAA 0601 MVI B, 01 0AAC CDD701 CALL 0AAF 0E01 MCI C, 01

0AB1 CDD20A CALL 0AB4 000600 0AB7 CD2B02 CALL GTHEX 0ABA D21502 JNC ERROR 0ABD EB XCHG 0ABE 22BBFF SHLD SESAVE 0AC1 C9 RET 0AC2 0600 DIDISP MVI B, 00 0AC4 21CE0A LXI H, SSADR 0AC7 09 DTDO DAD BC 0AC8 09 DAD BC 0AC9 3E01 MVI 01 0ACB C3B702 JMP OUTPUT 0ACE 0505 SSADR DCR B 0AD0 05 DCR B 0AD1 0E 0AD2 0D 0AD3 05 0AD4 13 0AD5 0A 0AD6 0D 0AD7 0A 0AD8 10 0AD9 0E 0ADA 0D 0ADB 0E

D-86

0ADC 0B 0ADD 14 0ADE 15 SRADR 0ADF 15 0AE0 05 0AE1 14 0AE2 15 CnADR 0AE3 15 0AE4 0C 0AE5 16 0AE6 CD160B BLANCKCHK CALL PrLOAD 0AE9 210080 LXI H, 8000 0AEC 000000 NOPs 0AEF 06FF BC1 MVI B, FF 0AF1 7E0000 MOV A, M NOP NOP 0AF4 B8 CMP B 0AF5 C4D408 CMZ DISPLAY 0AF8 23 INX H 0AF9 EB XCHG 0AFA CDD60B CALL CALC 0AFD 67 MOV H, L 0AFE 2EFF MVI L, FF 0B00 000000 NOP 0B03 000000 NOP 0B06 000000 NOP 0B09 0000 0B0B 7D BC3 MOV A, L 0B0C 93 SUB E 0B0D 7C MOV A, H 0B0E 9A SBB D 0B0F EB XCHG 0B10 D2EF0A JNC BC1 0B13 CF 0B14 EF 0B15 FF 0B16 21310B PrLOAD LXI H, PrADR 0B19 AF XRA A 0B1A 47 MOV B, A 0B1B CDB702 CALL OUTPUT 0B1E 3E01 MVI A, 01 0B20 47 MOV B, A 0B21 21310B LXI H, 0B ;BLANK OF

DISPLAY DOT

Page 86: Microprocessor 8085

D-87

0B24 CDB702 CALL OUTPUT 0B27 0601 MVI B, 01 0B29 CD2B02 CALL GTHEX ;GET HEX IN

ADDR. 0B2C 7B MOV A, E 0B2D 32A7FF STA PrSAVE 0B30 C9 RET 0B31 15 PRADR b 0B32 15 b 0B33 12 p 0B34 14 R 0B35 CD900C DUPL CALL DDISP 0B38 3AA9FF LDA PRSAVE 0B3B FE01 CPI 01 0B3D CA460B JZ DUP1 0B40 21FF07 LXI H, 07FF 0B43 C3490B JMP DUP2 0B46 21FF0F DUP1 LXI H, 0FFF 0B49 110030 DUP2 LXI D, 3000 0B4C 19 DAD DE 0B4D 22BBFF SHLD SESAVE 0B50 EB XCHG 0B51 22BDFF SHLD SSAVE 0B54 2600 MVI H, 00 0B56 C3B10C JMP DUP3 0B59 F7 0B5A 0B 0B5B CD880C COPY CALL CDISP 0B5E AF XRA A 0B5F 32BFFF CHKSUM STA COPYTEST 0B62 C36108 JMP BLMOV 0B65 CD160B CALL PrLOAD 0B68 CDD60B CALL CALC 0B6B 57 MOV D, A 0B6C 1EFF MOV E, FF

D-88

0B6E 0E00 MOV C, 00 0B70 210080 LXI H, 8000 0B73 7E CH0 MOV A, M 0B74 81 POP D 0B75 4F ADD C 0B76 23 INX H 0B77 7B MOV A, E 0B78 95 SUB L 0B79 7A MOV A, D 0B7A 9C SBB H 0B7B D2730B JNC CH0 0B7E 69 MOV L, C 0B7F 2600 MVI H, 00 0B81 CD620B LXI H, CHADR 0B84 3E01 MVI A,01 0B86 0600 MVI B,00 0B88 21A50B LXI H, CHADR 0B8B CDB702 CALL OUTPUT 0B8E 76 HALT 0B8F 0000 NOPs 0B91 7B CH2 MOV A, E 0B92 95 SUB L 0B93 7A MOV A, D 0B94 9C SBB H 0B95 E1 POP H 0B96 D2710B JNC CH0 0B99 CD6203 CALL UPDAD1 0B9C 3E01 MVI A, 01 0B9E 21A50B LXI H, CHADR 0BA1 CDB702 CALL GTHEX 0BA4 76 HALT 0BA5 0C CHADR INR C 0BA6 00 NOP 0BA7 0000 VERIFY NOP 0BA9 CD800C CALL VDISP

Page 87: Microprocessor 8085

D-89 0BAC 2AB9FF LHLD DSSAVE 0BAF EB XCHG 0BB0 2ABDFF LHLD SSAVE 0BB3 EB XCHG 0BB4 46 VFY1 MOV B, M 0BB5 EB XCHG 0BB6 7E MOV A, M 0BB7 EB XCHG 0BB8 B8 MOV A, M 0BB9 78 XCHG 0BBA C4D408 CMP B 0BBD 23 INX H 0BBE 13 INX D 0BBF E5 PUSH HL 0BC0 2ABBFF LHLD SESAVE 0BC3 7D MOV A, L 0BC4 93 SUB E 0BC5 7C MOV A, H 0BC6 9A SBB D 0BC7 E1 POP H 0BC8 00 NOP 0BC9 D2B40B JNC VFY1 0BCC CF RST 1 0BCD E5 0BCE CD6E03 0BD1 F1 0BD2 CD6E06 0BD5 76 0BD6 3AA9FF CALC LDA $20A9 0BD9 47 MOV B, A 0BDA 3E03 MVI A, 03 0BDC 37 STC 0BDD 17 RAL 0BDE 05 DCR B 0BDF F2DC0B JP 0BDC 0BE2 C680 ADI 80 0BE4 C9 RET 0BE5 CD460C CALL SRKD 0BE8 CD8F08 JMP 088F 0BEB 000000 NOPs 0BEE 0000 NOPs 0BF0 00 PROGRAM NOP 0BF1 CD780A CALL 0A78

D-90 0BF4 2AB9FF LHLD FF89 0BF7 EB XCHG 0BF8 2ABDFF LHLD FFBD 0BFB 7E MOV A, M 0BFC 47 MOV B, A 0BFD EB XCHG 0BFE 77 MOV M, A 0BFF E5 PUSH H 0C00 C5 PUSH B 0C01 F5 PUSH PSW 0C02 D5 PUSH D 0C03 0600 MVI B, 00 0C05 CD6203 CALL 0362 0C08 D1 POP D 0C09 D5 PUSH D 0C0A EB XCHG 0C0B 0600 MVI B, 00 0C0D 7E MOV A, M 0C0E CD6E03 CALL 036E 0C11 D1 POP D 0C12 F1 POP PSW 0C13 C1 POP B 0C14 E1 POP H 0C15 7E MOV A, M 0C16 B8 CMP B 0C17 C21502 JNZ 0215 0C1A 13 LDAX D 0C1B 23 INX H 0C1C E5 XCHG 0C1D CD6F0A CALL 0A6F 0C20 D1 POP E 0C21 D2FB0B JNC 0BFB 0C24 CF RST 7.5 0C25 00 NOP 0C26 D5 PUSH DE 0C27 11FF19 LXI D, 19FF 0C2A CDF105 CALL DELAY 0C2D D1 POP DE 0C2E 7A MOV A, D 0C2F F660 ORI 60 0C31 D302 OUT 02 0C33 13 INX D 0C34 23 INX H

Page 88: Microprocessor 8085

D-91

0C35 EB XCHG 0C36 E5 PUSH H 0C37 2ABBFF LHLD SESAVE 0C3A 7D MOV A, L 0C3B 93 SUB E 0C3C 7C MOV A, H 0C3D 9A SBB D 0C3E E1 POP H 0C3F EB XCHG 0C40 D20E0C JNX PRO 0C43 C3360E JMP PR1 0C46 CD830A SRKD CALL LDSSE 0C49 21DE0A LXI H, SRADR 0C4C AF XRA A 0C4D 47 MOV B, A 0C4E CDB702 CALL OUTPUT 0C51 3E01 MVI A, 01 0C53 47 MOV B, A 0C54 CDB702 CALL OUTPUT 0C57 0601 MVI B, 01 0C59 CD2B02 CALL GTHEX 0C5C D21502 INC ERR 0C5F 7B MOV A, E 0C60 32B8FF STA SRSAVE 0C63 C9 RET 0C64 CDD701 DH2 CALL CLEAR 0C67 E1 POP HL 0C68 C38D0D JMP DH3 0C6B C5 MESG PUSH BC 0C6C CDD701 CALL CLEAR 0C6F C1 POP BC 0C70 0600 MVI B, 00 0C72 21980C LXI H, PADR 0C75 C3C70A JMP DIDO 0C78 CD780A PDISP CALL LDALL

D-92 0C7B 0E00 MVI C, 00 0C7D C36B0C JMP MESG 0C80 CD780A VDISP CALL LDALL 0C83 0E01 MVI C, 01 0C85 C36B0C JMP MESG 0C88 CD160B CDISP CALL PRLOAD 0C8B 0E02 MVI C, 02 0C8D C36B0C JMP MESG 0C90 CD160B DDISP CALL PRLOAD 0C93 0E03 MVI C, 03 0C95 C36B0C 0C98 b 15 BLANK 0C99 p 12 P 0C9A b 15 BLANK 0C9B V 17 U 0C9C h 15 BLANK 0C9D r OR 0C C 0C9E b 15 BLANK 0C9F D 0D D 0CA0 B 15 BLANK 0CA1 S 05 S 0CA2 b 15 BLANK 0CA3 L 11 L 0CA4 19 RMNC0D DAD D 0CA5 19 DAD D 0CA6 7E MOV A, M 0CA7 23 INX H 0CA8 66 MOV A, M 0CA9 6F MOV L, A 0CAA E9 PCHL 0CAB C22601 SST0 JNZ STP20 0CAE C3FD00 JMP STEP 0CB1 22B9FF DUP3 SHLD SSAVE 0CB4 C3F70B JMP PROG

Page 89: Microprocessor 8085

D-93

0CB7 CD930A SAVE CALL LDSSE ;GET SS AND SE BLOCK LIMIT

0CBA 21550D LXI H, FnSAVE ;DISPLAY Fn 0CBD CD190B CALL PrLOAD 0CC0 32BAFF STA FnSAVE 0CC3 0E04 MVI C, 04 0CC5 CD6B0C CALL MESG 0CC8 CD040D CALL CHKSUM1 ;SAME FILE NAME 0CCB 32BFFF STA (CHSAVE) ;SAVE CHECKSUM 0CCE 21A00F LXI H, 4000D 0CD1 DA1502 JC ERROR ;MISMATCH ERROR 0CD4 CD590D CALL 1KOUT ;1KHz LEADER FOR 4

SEC. 0CD7 21BAFF LXI H, BUSTADR ;BUFFER START

ADDRESS 0CDA 010600 LXI B, 0006 ;6 PARAMETER OIP 0CDD CD150D CALL TAPEOUT ;SEND Fn,SE,SS &

CHECKSUM 0CE0 21A00F LXI H, 4000 0CE3 CD5E0D CALL 2KOUT ;O/P 2KHz MIDSYNC. 0CE6 CDF50C CALL GETPARA ;SET SS AND BLOCK

COUNT 0CE9 CD150D CALL TAPEOUT 0CEC 21A00F LXI H, 4000D 0CEF CD5E0D CALL 2KOUT ;2KHz END SYNC. 0CF2 C34E00 JMP SIGNON ;FrIEnd 0CF5 2ABBFF GETPARA LHLD SESAVE 0CF8 EB XCHG 0CF9 2ABDFF LHLD SSAVE ;THIS RETURN SS IN

HL 0CFC 7B MOV A, E ;AND BYTE COUNT IN BC 0CFD 95 SUB L 0CFE 4F MOV C, A 0CFF 7A MOV A, D ;BC=DE-HL=SE-SS 0D00 9C SBB H 0D01 47 MOV B, A 0D02 03 INX B ;BC=BYTE COUNT HL:SS 0D03 C9 RET 0D04 CDF50 CHKSUM CALL GETPARA ;GET PARAMETER 0D07 D8 RET 0D08 AF XRA A 0D09 86 SUM0 ADD A, HL

D-94 0D0A 57 MOV D, A 0D0B 23 INX HL 0D0C 0B DCX BC 0D0D 78 MOV A, B 0D0E B1 ORA C 0D0F 7A MOV A, D 0D10 C2090D JNZ SUM0 0D13 B7 ORA A 0D14 C9 RET 0D15 5E TAPEOUT MOV E, M ;OUTPUT A MEMORY

BLOCK TO 0D16 CD210D CALL OUTBYTE ;TAPE 0D19 23 INX HL 0D1A 0B DCX BC 0D1B 78 MOV A, B 0D1C B1 ORA C 0D1D C2150D JNZ TAPEOUT 0D20 C9 RET 0D21 1608 OUTBYTE MVI D, 08 0D23 B7 ORA A 0D24 CD350D CALL OUTBIT 0D27 7B MOV A, E 0D28 0F RRC 0D29 CD690F CALL OUTBIT 0D2C 15 DCR D ;8 BIT DATA 0D2D C2270D JNZ 0B 0D30 37 STC 0D31 CD350D CALL OUTBIT ;STOP BIT 0D34 C9 RET 0D35 E5 OUTBIT PUSH H 0D36 D5 PUSH D 0D37 C5 PUSH B 0D38 2600 MVI H, 00 0D3A DA470D JC OUT1 0D3D 2E08 MVI L, 08 0D3F CD5E0D CALL 2KOYT 0D42 2E02 MVI L, 02 0D44 C34E0D JMP OUT2 0D47 2E04 MVI L, 04 0D49 CD5E0D CALL 2KOUT 0D4C 2E04 MVI L, 04 0D4E CD590D CALL 1KOUT 0D51 C1 POP B

Page 90: Microprocessor 8085

D-95

0D52 D1 POP D 0D53 E1 POP H 0D54 C9 RET 0D55 15 FnADR BLANK 0D56 15 BLANK 0D57 0F F 0D58 16 n 0D59 0E61 1KOUT MVI C, F1K 0D5B C3600D JMP TONE 0D5E 0E2E 2KOUT MVI C, F2K 0D60 29 TONE DAD HL 0D61 3EC0 MVI A, C0 0D63 C5 SQW PUSH B 0D64 30 SIM 0D65 0D TP DCR C 0D66 C2650D JNZ TP 0D69 EF80 XRI 80 0D6B 47 MOV B, A 0D6C 2B DCX H 0D6D 7C MOV A, H 0D6E B5 ORA L 0D6F 78 MOV A, B 0D70 C3640F JMP EXT 0D73 CD170F GETBYTE CALL GETBIT ;OIP DATA IN E 0D76 1608 MVI D, 08 0D78 CD170F GET0 CALL GETBIT 0D7B 7B MOV A, E 0D7C 1F RAR 0D7D 5F MOV E, A 0D7E 15 DCR D 0D7F C2780D JNZ GET0 0D82 CD170F CALL GETBIT ;STOP BIT BYPASSED 0D85 C9 RET 0D86 1D BT1 DCR E 0D87 C2860D JNZ BT1

D-96 0D8A 20 RIM 0D8B 17 RAL 0D8C C9 RET 0D8D CD6203 DH3 CALL UPDAD1 0D90 76 HLT 0D91 F1 DISP1 POP PSW 0D92 CD6E03 CALL UPDAD1 0D95 CDE702 DISP2 CALL RDKBD 0D98 FE10 CPI 11 0D9A C2950D INZ DISP2 0D9D D1 POP DE 0D9E E1 POP HL 0D9F C9 RET 0DA0 C2490D LOAD3 INZ LOAD2 0DA3 C34500 JMP CMMND 0DA6 FE12 0DA8 C21502 0DAB 3AFDFF PRVRG LDA RGPTR 0DAE FE00 CPI 00 0DB0 CAF702 JZ RETF 0DB3 3D DCR A 0DB4 32FDFF STA RGPTR 0DB7 C3FA02 JMP RETT 0DBA FE10 CHK CPI INR 0DBC C8 RZ 0DBD FE12 CPI DCR 0DBF C2CF01 JNZ SUB15 0DC2 C9 RET 0DC3 F1 INRDCR POP PSW 0DC4 2AF6FF LHLD CURAD 0DC7 FE10 CPI INR 0DC9 C2D00D JNZ DCR 0DCC 23 INX H 0DCD C3C701 JMP SUB 20 0DD0 FE12 DCR CPI DCR

Page 91: Microprocessor 8085

D-97 0DD2 C2CF01 JNZ SUB15 0DD5 2B DCX H 0DD6 C3C701 JMP SUB20 0DD9 FE10 VALCH CPI INR 0DDB CA6702 JZ GTH25 0DDE FE12 CPI DCR 0DE0 CA6702 JZ GTH25 0DE3 C3C500 JMP GTH30 0DE6 FE12 PRRG CPI DCR 0DE8 C21502 JNZ ERR 0DEB CDAB0D CALL PRVRG 0DEE C3C500 JMP 00C5 0DF1 0603 3PASS MVI B, 03 0DF3 C3F80D JMP BITSPAS 0DF6 0606 0DF8 2AC0FF BITSPAS LHLD BITTIME 0DFB 2D BP DCR L 0DFC C2FB0D JNZ BP 0DFF 25 DCR H 0E00 C2FB0D JNZ BP 0E03 05 DCR B 0E04 C2F80D JNZ BITSPAS 0E07 C9 RET 0E08 2C 6PASS INR L 0E09 229AFF SHLD HALFBIT 0E0C C3F80D JMP BITSPAS 0E0F 21250E SRL1 LXI H, SERIADR 0E12 AF XRA A 0E13 47 MOV B, A 0E14 CDB702 CALL OUTPT 0E17 21290E LXI H, ALADR 0E1A 3E01 MVI A, 01 0E1C CDB702 CALL OUTPT 0E1F 3E0C MVI A, 0C 0E21 30 SIM 0E22 C2DA09 JMP SRL2 0E25 S 05 0E26 E 0E 0E27 r 14 0E28 I 13 0E29 A 0A 0E2A L 11

D-98

0E2B 3E82 CLD0 MVI A, 82 0E2D 0000 OUT 03 0E2F 3EF0 MVI A, F0 0E31 D302 OUT 02 0E33 C30800 JMP CLDBK 0E36 3E82 PR1 MVI A, 82 0E38 D303 OUT 03 0E3A 3EF0 MVI A, F0 0E3C D302 OUT 02 0E3E C3AD0B JMP VFY0 0E41 3AA9FF READ1 LDA PrLOAD 0E44 FEFF CPI FF 0E46 CA4C0E JZ READ2 0E49 C3D60B JMP READ 0E4C 7E READ2 MOV A, M 0E4D C9 RET 0E4E FFFF 0E50 3E08 COMPARE MVI A, 08 0E52 30 SIM 0E53 3EFF MVI A, FF 0E55 32A9FF STA PrLOAD 0E5B 217C0E ROLLING LXI H, STRING

;HL:STRING ADDRESS

0E5E E5 DISP PUSH HL ;HL:SAVE ADDRESS

0E5F AF ROLL1 XRA A ;A=0 ADDRESS

0E60 47 MOV B, A ;NO DOT 0E61 CDB702 CALL OUTPT 0E64 3E01 MVI A, 01 ;USE DATA

FIELD 0E66 0600 MVI B, 00 ;NO DOT 0E68 CDB702 CALL OUTPT 0E6B 11FFFF LXI H, FFFF ;FULL

DELAY 0E6E CDF105 CALL DELAY 0E71 7E MOV A, M ;FF IS END OF

STRING 0E72 FEFF CPI EOS ;GET BACK

START 0E74 E1 POP H ;ADDRESS

INCREMENT

Page 92: Microprocessor 8085

D-99

0E75 23 INX H ;IF NOT AT EOS 0E76 C25E0E JNZ ROLL1 ;IF NOT AT EOS 0E79 C35B0E JMP ROLLING THE STRING: 0E7C 15 BLANK 0E7D 15 BLANK 0E7E 15 BLANK 0E7F 15 BLANK 0E80 15 BLANK 0E81 0D d 0E82 1B y 0E83 16 n 0E84 0A A 0E85 11 L 0E86 1C o 0E87 19 G 0E88 15 BLANK 0E89 18 h 0E8A 0E E 0E8B 11 L 0E8C 12 P 0E8D 05 S 0E8E 15 BLANK 0E8F 1B y 0E90 1C o 0E91 17 U 0E92 15 BLANK 0E93 13 I 0E94 16 n 0E95 15 BLANK 0E96 11 L 0E97 0E E 0E98 0A A 0E99 14 r 0E9A 16 n

D-100

0E9B 13 I 0E9C 16 n 0E9D 19 G 0E9E 15 BLANK 0E9F 17 U 0EA0 12 P 0EA1 FF EOS MEMORY LOACTION USED : 2080 15 2081 15 2082 X 2083 Y 2084 CD(GENERATED) 2085 AB(GUESSED) 2086 0D 2087 D0 2088 C0 2089 0C 208A A0 208B B0 208C 208D 208E 208F CMTR 2090 (RANDOM IN BETWEEN) 0EA2 CD730D PAPEIN CALL GETBYTE ;MEMORY

BLOCK FROM HL

0EA5 73 MOV M, E ;COUNT IN BC 0EA6 23 INX HL 0EA7 0B DCX BC 0EA8 78 MOV A, B

Page 93: Microprocessor 8085

D-101

0EA9 B1 ORA C 0EAA C3490F JMP TAPEIN 0EAD FF 0EAE 21550D LXI HL, (FnADR) ;GET Fn 0EB1 CD190B CALL PrLOAD 0EB4 0E05 MVI C, 05 0EB6 CD6B0C CALL MESG ;L DISPLAY 0EB9 21E803 LXI HL, 1000D 0EBC CD410F CALL PERIOD ;NC:1KHz 0EBF DAB90E JC LOAD0 ;LOOP UNTIL SYNC

1KHz DOT 0EC2 2B DCX HL 0EC3 7C MOV A, H ;LEADING SYNC

1000? 0EC4 B5 ORA L 0EC5 C2BC0E JNZ LOAD1 0EC8 CD510E CALL PERIOD 0ECB D2C80E JNC LOAD2 0ECE 21BAFF LXI HL, BUFFST 0ED1 010600 LXI B, 0006 0ED4 CDA20E CALL TAPEIN ;GET Fn SE SS & CHK 0ED7 DAB90E JC LOAD0 0EDA 3ABAFF LDA (TAPEF n) 0EDD F5 PUSH PSW 0EDE CD6E03 CALL MODIDT1 ;Fn IS DATA FIELD 0EE1 CD0A0F CALL 1.5 SEC ;PASS OUT 2KHz

SYNC. 0EE4 F1 POP PSW 0EE5 47 MOV B, A 0EE6 DA1502 LDA Fn 0EE9 B8 CMP A, B 0EED CDF50C CALL GETPARA ;FILE NOT FOUND 0EF0 DA1502 JC ERROR 0EF3 CDA20E CALL TAPEIN 0EF6 DA1502 JC ERROR ;ILLEGAL

PARAMETER 0EF9 CD040D CALL CHKSUM1 0EFC 21BFFF LXI H, CHSAVE 0EFF FE CMP A, M ;COMPARE DATA

SUMWITHTAPE SUM 0F00 C21502 JNZ ERROR

0F03 2ABDF LHLD SSAVE

D-102

0F06 CD6203 CALL MODIAD1 ;DISPLAY START ADDRESS ON

0F09 76 HALT ;ADDRESS FIELD FOR YOUR REF.

0F0A 0603 1.5 SEC MVI B, 03 0F0C 11FFFF LOOP0 LXI D, FFFF 0F0F CDF105 CALL DELAY ;5 X 3 = 1.5

SEC. DELAY 0F12 05 DCR B 0F13 C20C0F JNZ LOOP0 0F16 C9 RET 0F17 C5 GETBIT PUSH B 0F18 D5 PUSH D 0F19 E5 PUSH H 0F1A AF XRA A 0FAB 32FFFF STA CARRY TEMP. 0F1E 210000 LXI H, 0000 0F21 CD510F GB0 CALL PERIOD 0F24 14 INR D ;NON

DESTRUCTIV E TESTING

0F25 15 DCR D 0F26 C2400F JNZ TOOMUCH ;D 0 LONG

PERIOD 0F29 DA330F JC 2KP 0F2C 2D DCR L ;FOR 1KHz

DECREMENT BY 2

0F2D 2D DCR L 0F2E 26FF MVI H, FF ;1KHz END OF

THIS BIT 0F30 C3210F JMP GB0 0F33 2C INR L 0F34 7C MOV A, H 0F35 FE00 CPI 00 ;H=00 2KHz IS

FIRST 0F37 CA210F JZ GB0 0F3A 7D MOV A, L 0F3B 17 RAL 0F3C E1 POP H 0F3D D1 POP D ;L=(=/2KHz PERIOD)-2

Page 94: Microprocessor 8085

D-103

0F3E C1 POP B ;(=/ 1KHz PERIOD) 0F3F C9 RET ;L+CARRY=0

8(2K),2(1K) 0F40 3EFF TOOMUCH MVI A, FF ;L-CARRY=1

4(2K),4(2K) 0F42 32FFFF STA CARRY TEMP ;ERROR

WHILE READING 0F45 E1 POP H 0F46 D1 POP D 0F47 C1 POP B 0F48 C9 RET 0E49 C2A20E TAPEINO JNZ TAPEIN ;CARRY = 1 IF

ERROR 0F4C 32FFFF LDA CARRY TEMP 0 NO ERROR 0F4F 17 RAL 0F50 C9 RET 0F51 110000 PERIOD LXI D, 0000 0F54 20 RIM ;GET IN SID BIT 0F55 13 INX D 0F56 17 RAL ;CARRY = BIT 0F57 DA540F JC PH ;10+7 IF CARRY PASS

HIGH BIT 0F5A 20 RIM 0F5B 13 INX D 0F5C 17 RAL ;IF NO BIT 0 PASS

LOW BIT 0F5D D25A0F JNC OF5A 0F60 7B MOV A, E 0F61 FE55 CMP A, THRSn ;IF E

TRESHOLD 1 KHz 0F63 C9 RET ;IF E TRESHOLD 2

KHz 0F64 C1 POP B ;D 0 TOO MUCH 0F65 C2630D JNZ SOW ;LOOP COUNT 2KHz =

57

D-104

0F68 C9 RET 1KHz = 114 0F69 5F NOB MOV C, A 0F6A C3350D JMP OUTBIT 0F6D 3E60 BYTER MVI A, 60 0F6F D302 OUT 02 0F71 60 NOP 0F72 3E30 MVI A, 30 0F74 D302 OUT 02 0F76 11FF68 LXI D, 200ms ;PREPARE

FOR 200ms PHASE

0F79 CDF105 CALL DELAY 0F7C 3E60 MVI A, 60 0F7E D302 OUT 02 0F80 0000 NOPs 0F82 3EF0 MVI A, 60 0F84 D302 OUT 02 0F86 3E00 MVI A, 00 0F88 32A7FF STA PrSAVE 0F8B C3E900 JMP BC0 0F8F FF 0F90 TO 0FFF IS UNUSED ROM. IT IS AVAILABLE FOR THE USER. 1000 TO 11FF IS USED FOR UPLOADING & DOWNLOADING MON SOFTWARE (APPENDIX F) 1200 TO 1FFF IS UNUSED ROM & IS AVAILABLE FOR THE USER

Page 95: Microprocessor 8085

D-105 APPENDIX E PRODEDURE FOR UPLOADING AND DOWNLOADING Uploading Operating Instructions For Uploading DYNA-85 kit should be in serial mode. 1. Short P13 and P14 for serial mode. 2. Connect serial cable between the serial port of PC and serial

connector J6 of DYNA-85 kit. 3. Run tange on PC. 4. Press F9 and wordsize 7 bit. 5. Press reser of DYNA-85. Then press space key of terminal

keyboard. Message MICROFRIEND-1 and “.” Prompt is displayed in the screen. Note : If wordsize is 8 message displayed is “CaSRhj4RQ4YV” and “.” Prompt. Just Ignore this message and do the following for uploading.

6. For Uploading (from kit to PC)

a. Type G1100 (ENTER) b. Specify SS (source start) on prompt “SOURCE START”. c. Press Enter. d. Specify SE (source end) on prompt “SOURCE END”. e. Press F9. f. Press L to capture file. g. After specifying the file name press enter. h. Message “Capturing file” is displayed at the top of the

screen.

Page 96: Microprocessor 8085

D-106

i. Press enter. Data to be transmitted to the file is displayed on the screen while transmitting . After complete data tranmission “.” Prompt appears on the screen.

j. Press F9. k. Press L to end capture. Then on prompt “Verify (y/n)

press “y” key and then enter. Uploading ends here. Downloading Operating Instructions For Downloading DYNA-85 kit should be in serial mode. 1. Short P13 and P14 for serial mode. 2. Connect serial cable between the serial port of PC and serial

connector J6 of DYNA-85 kit. 3. Run tango on PC. 4. Press F9 and set wordsize 7 bit. 5. Press reset of. DYNA-85. Then press space key of terminal

keyboard.Message MICROFRIEND-1 and “.” Pronpt is displayed on the screen. Note : If wordsize is 8 message displayed is “CaSRhj4RQ4YV” and “.” prompt. Just ignore this message and do the following for downloading.

D-107

6. For Downloading (from PC to kit) a. Type G1000. b. Press Enter. c. Specify SS on prompt “source start” and press enter. d. Press F9. e. Press m to transmit file. f. Enter file name. g. Press Enter. h. Press F9. i. After transmitting a file fully,”.” Prompt is displayed in the

screen .

Downloading ends here.